pax_global_header00006660000000000000000000000064152216725630014523gustar00rootroot0000000000000052 comment=b6e9a6594cf39b0b6df644f9f27aaf4a925138d9 bazaar-org-bazaar-b6e9a65/000077500000000000000000000000001522167256300154315ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.clang-format000066400000000000000000000007531522167256300200110ustar00rootroot00000000000000BasedOnStyle: GNU AlwaysBreakAfterDefinitionReturnType: All BreakBeforeBinaryOperators: None BinPackParameters: false SpaceAfterCStyleCast: true PointerAlignment: Right ColumnLimit: 0 AlignArrayOfStructures: Right AlignAfterOpenBracket: Align AlignConsecutiveAssignments: true AlignConsecutiveBitFields: true AlignConsecutiveDeclarations: true AlignConsecutiveMacros: true AllowShortCaseLabelsOnASingleLine: true AlignEscapedNewlines: true AlignOperands: true AlignTrailingComments: Always bazaar-org-bazaar-b6e9a65/.devcontainer/000077500000000000000000000000001522167256300201705ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.devcontainer/Dockerfile000066400000000000000000000010321522167256300221560ustar00rootroot00000000000000FROM fedora:rawhide RUN dnf update -y && dnf install -y \ meson \ ninja \ cmake \ just \ git \ blueprint-compiler \ desktop-file-utils \ gtk4-devel \ libadwaita-devel \ libdex-devel \ flatpak-devel \ libxmlb-devel \ appstream-devel \ glycin-devel \ glycin-gtk4-devel \ libyaml-devel \ libsoup3-devel \ json-glib-devel \ md4c-devel \ webkitgtk6.0-devel \ libsecret-devel \ libproxy-devel \ gtksourceview5-devel \ glib-networking \ clangd bazaar-org-bazaar-b6e9a65/.devcontainer/devcontainer.json000066400000000000000000000017551522167256300235540ustar00rootroot00000000000000{ "name": "Bazaar devcontainer", "build": { "dockerfile": "Dockerfile" }, "runArgs": [ "--device=/dev/dri", "--network=host" ], "features": { "ghcr.io/devcontainers/features/common-utils:2": { "installZsh": "false", "username": "vscode", "userUid": "1000", "userGid": "1000", "upgradePackages": "true" } }, "remoteUser": "vscode", "customizations": { "vscode": { "extensions": [ "ms-vscode.cpptools-extension-pack", "bodil.blueprint-gtk" ] } }, // Wayland support "containerEnv": { "WAYLAND_DISPLAY": "${localEnv:WAYLAND_DISPLAY}", "XDG_RUNTIME_DIR": "${localEnv:XDG_RUNTIME_DIR}", "XDG_SESSION_TYPE": "${localEnv:XDG_SESSION_TYPE}", "DBUS_SYSTEM_BUS_ADDRESS": "unix:path=/var/run/dbus/system_bus_socket" }, "mounts": [ "source=${localEnv:XDG_RUNTIME_DIR},target=${localEnv:XDG_RUNTIME_DIR},type=bind,consistency=cached", "source=/var/run/dbus/system_bus_socket,target=/var/run/dbus/system_bus_socket,type=bind,consistency=cached" ] }bazaar-org-bazaar-b6e9a65/.foundry/000077500000000000000000000000001522167256300171755ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.foundry/.gitignore000066400000000000000000000000221522167256300211570ustar00rootroot00000000000000tmp/ user/ cache/ bazaar-org-bazaar-b6e9a65/.github/000077500000000000000000000000001522167256300167715ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.github/CODEOWNERS000066400000000000000000000001761522167256300203700ustar00rootroot00000000000000# All files * @kolunmi @AlexanderVanhee .github/workflows/ @renner0e @tulilirockz build-aux/flatpak/ @renner0e @tulilirockz bazaar-org-bazaar-b6e9a65/.github/FUNDING.yml000066400000000000000000000001201522167256300205770ustar00rootroot00000000000000github: [kolunmi] ko_fi: kolunmi custom: - https://ko-fi.com/alexandervanhee bazaar-org-bazaar-b6e9a65/.github/ISSUE_TEMPLATE/000077500000000000000000000000001522167256300211545ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.github/ISSUE_TEMPLATE/bug_form.yml000066400000000000000000000040001522167256300234710ustar00rootroot00000000000000name: Bug Report description: Report an issue about using Bazaar body: - type: markdown attributes: value: | Thank you for taking the time to fill out this bug report! - type: textarea id: describe-bug attributes: label: Describe the bug description: A clear and concise description of what the bug is. If you are reporting a crash please take a look at https://github.com/bazaar-org/bazaar/blob/debug-symbols/docs/debugging.md#debugging-crashes placeholder: Tell us what happened! value: "When I entered 2 + 2, I got the answer 6." validations: required: true - type: input id: os attributes: label: OS description: Operating system (and desktop environment) placeholder: , validations: required: true - type: textarea id: version attributes: label: Version description: | Please check the current version of Bazaar (Main Window > About Bazaar) so we can more easily indentify issues. Output of `flatpak info io.github.kolunmi.Bazaar`. If you are on Bazzite or secureblue please run `rpm -qi bazaar` validations: required: true - type: textarea id: flatpak-remotes attributes: label: Configured Flatpak Remotes description: | Currently there are issues with user remotes. Please run `flatpak remotes`. placeholder: | Name Options flathub system validations: required: true - type: textarea id: hardware attributes: label: Hardware description: | If you are reporting performance issues or crashes then please fill this out. placeholder: | CPU: Ryzen 5 7600 GPU: RX 6750 XT RAM: 16GB validations: required: false - type: textarea id: extra-context attributes: label: Extra information or context description: Add any other context about the problem here. bazaar-org-bazaar-b6e9a65/.github/workflows/000077500000000000000000000000001522167256300210265ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.github/workflows/build-flatpak.yml000066400000000000000000000020421522167256300242660ustar00rootroot00000000000000on: push: branches: [main] pull_request: paths-ignore: - "**.md" - "docs/*" - "screenshots/*" - "translators.sh" - ".github/ISSUE_TEMPLATE/**" name: CI Build Flatpak jobs: flatpak: name: "Flatpak" container: image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-50 options: --privileged strategy: matrix: variant: - arch: x86_64 runner: ubuntu-latest # no latest for ARM :( - arch: aarch64 runner: ubuntu-24.04-arm runs-on: ${{ matrix.variant.runner }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: submodules: recursive - uses: flatpak/flatpak-github-actions/flatpak-builder@92ae9851ad316786193b1fd3f40c4b51eb5cb101 # v6.6 with: bundle: Bazaar.flatpak manifest-path: build-aux/flatpak/io.github.kolunmi.Bazaar.json cache-key: flatpak-builder-046f9ec arch: ${{ matrix.variant.arch }} verbose: true bazaar-org-bazaar-b6e9a65/.github/workflows/flatpak-external-data-checker.yml000066400000000000000000000020521522167256300273230ustar00rootroot00000000000000name: Check for Flatpak dependency updates on: schedule: - cron: "0 0 * * *" # every day workflow_dispatch: jobs: flatpak-external-data-checker: runs-on: ubuntu-latest strategy: matrix: branch: [ main ] steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ matrix.branch }} - uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest env: GIT_AUTHOR_NAME: Flatpak External Data Checker GIT_COMMITTER_NAME: Flatpak External Data Checker # email sets "github-actions[bot]" as commit author, see https://github.community/t/github-actions-bot-email-address/17204/6 GIT_AUTHOR_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GIT_COMMITTER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: --update --never-fork --require-important-update build-aux/flatpak/io.github.kolunmi.Bazaar.json bazaar-org-bazaar-b6e9a65/.gitignore000066400000000000000000000000151522167256300174150ustar00rootroot00000000000000build .cache bazaar-org-bazaar-b6e9a65/.gitmodules000066400000000000000000000002141522167256300176030ustar00rootroot00000000000000[submodule "flatpak-builder-tools"] path = build-aux/flatpak/flatpak-builder-tools url = https://github.com/flatpak/flatpak-builder-tools bazaar-org-bazaar-b6e9a65/.well-known/000077500000000000000000000000001522167256300176045ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/.well-known/funding-manifest-urls000066400000000000000000000000601522167256300237440ustar00rootroot00000000000000https://www.kolunmi.net/ https://usebazaar.org/ bazaar-org-bazaar-b6e9a65/CODESTYLE.md000066400000000000000000000042161522167256300173110ustar00rootroot00000000000000# Bazaar Code Style Rules Thanks for your interest in contributing to Bazaar! Here are the code style rules which you must adhere to in order to keep a clean and consistent codebase: ## Formatting Bazaar uses the GNU C style. The `.clang-format` file at the root project directory will configure `clang-format` to follow the proper conventions. ## General Rules * _Always_ prefer using `g_auto`, `g_autofree`, `g_autoptr`, `g_autolist`, and `g_autoslist` over calling `*_unref` or `*_free` manually. If a variable needs to escape the scope, either increment its reference count or use `g_steal_pointer`. * When you are otherwise forced to call `*_unref` or `*_free` manually, _always_ use `g_clear_pointer` or `g_clear_object`. This prevents use-after-free bugs. * _Always_ prefer using the libdex API over the older GTask API for async operations. It is cleaner and easier to read, and it prevents callbacks from cluttering the source file. This often means spawning a fiber and using `dex_await`. To wrap a call to a function which uses GTask, use [dex_async_pair_new](https://gnome.pages.gitlab.gnome.org/libdex/libdex-1/class.AsyncPair.html). See `src/bz-download-worker.c` for an example of this. * _Always_ declare variables first and initialize them to `0` or `NULL`. Function calls must not be made in the declaration section of a scope. * The general layout of a `.c` file must be in this order: 1. License comment with your name mentioned 2. `#include "config.h"` 3. Include external headers, like `#include ` 4. Include internal headers, like `#include "bz-env.h"` 5. If applicable, define the class's internal struct 6. If applicable, `G_DEFINE_TYPE (...)` or equivalent 7. If applicable, the property enums and `static GParamSpec *props[LAST_PROP] = { 0 };` 8. Declare static functions (which are not virtual methods) 9. If applicable, define class virtual methods (`dispose`, `class_init`, `snapshot`, etc) 10. Define the public API (non-`static` functions which were declared in this `.c` file's associated `.h` header file) 11. Define the static functions which were previously declared in this file bazaar-org-bazaar-b6e9a65/CONTRIBUTING.md000066400000000000000000000067731522167256300176770ustar00rootroot00000000000000# Contributing Guide Thank you for contributing to Bazaar! Here are some instructions to get you started. * [New Contributor Guide](#contributing-guide) * [Ways to Contribute](#ways-to-contribute) * [Find an Issue](#find-an-issue) * [Ask for Help](#ask-for-help) * [Pull Request Lifecycle](#pull-request-lifecycle) * [Development Environment Setup](#development-environment-setup) * [Sign Your Commits](#sign-your-commits) * [Pull Request Checklist](#pull-request-checklist) Welcome! We are glad that you are here! 💖 As you get started, you are in the best position to give us feedback on areas of our project that we need help with including: * Problems found during setting up a new developer environment * Documentation * Bugs in our automation scripts and actions If anything doesn't make sense, or doesn't work when you run it, please open a bug report and let us know! ## Ways to Contribute We welcome many different types of contributions including: * New features * Builds, CI/CD * Bug fixes * Documentation * Issue Triage * Answering questions in Discussions * Release management * [Translations](https://github.com/bazaar-org/bazaar/blob/master/TRANSLATORS.md) - follow the dedicated instructions in that document ## Find an Issue These are the issues that need the most amount of attention and would be an effective way to get started: - [Help Wanted issues](https://github.com/bazaar-org/bazaar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22help%20wanted%22) - [Good first issues](https://github.com/bazaar-org/bazaar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) Sometimes there won’t be any issues with these labels. That’s ok! There is likely still something for you to work on. If you want to contribute but you don’t know where to start or can't find a suitable issue then feel free to post on the [discussion forum](https://github.com/bazaar-org/bazaar/discussions) Once you see an issue that you'd like to work on, please post a comment saying that you want to work on it. Something like "I want to work on this" is fine. ## Ask for Help The best way to reach us with a question when contributing is to ask on: * The original github issue you want to contribute to * The [discussions](https://github.com/bazaar-org/bazaar/discussions) area ## Building GNOME Builder or ```sh just build-flatpak ``` See [Flatpak Docs](https://docs.flatpak.org/en/latest/flatpak-builder.html) ### Find out which version is installed for bug reports ```sh flatpak info io.github.kolunmi.Bazaar ``` ### Verbose output ```sh G_MESSAGES_DEBUG=all flatpak run io.github.kolunmi.Bazaar ``` ## Pull Request Lifecycle [Instructions](https://contribute.cncf.io/maintainers/github/templates/required/contributing/#pull-request-lifecycle) ⚠️ **Explain your pull request process** ## Sign Your Commits [Instructions](https://contribute.cncf.io/maintainers/github/templates/required/contributing/#sign-your-commits) ## Pull Request Checklist When you submit your pull request, or you push new commits to it, our automated systems will run some checks on your new code. We require that your pull request passes these checks, but we also have more criteria than just that before we can accept and merge it. We recommend that you check the following things locally before you submit your code: - [ ] Use the GNU Style Guide - [ ] Format your commits using `clang-format`; see [.clang-format](/.clang-format) - [ ] Follow the [GNOME Commit Style](https://handbook.gnome.org/development/commit-messages.html) bazaar-org-bazaar-b6e9a65/COPYING000066400000000000000000001045201522167256300164660ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . bazaar-org-bazaar-b6e9a65/Justfile000066400000000000000000000051151522167256300171430ustar00rootroot00000000000000# These are just convenience scripts, NOT a build system! appid := env("BAZAAR_APPID", "io.github.kolunmi.Bazaar") manifest := "./build-aux/flatpak/" + appid + ".json" branch := env("BAZAAR_BRANCH", "master") just := just_executable() alias run := run-base run-base: build-base ./build/src/bazaar build-base: meson setup build --wipe ninja -C build build-flatpak $manifest=manifest $branch=branch: #!/usr/bin/env bash set -xeuo pipefail flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo FLATPAK_BUILDER_DIR="$(realpath ".flatpak-builder")" BUILDER_ARGS+=(--default-branch="${branch}") BUILDER_ARGS+=(--state-dir="${FLATPAK_BUILDER_DIR}/flatpak-builder") BUILDER_ARGS+=("--user") BUILDER_ARGS+=("--ccache") BUILDER_ARGS+=("--force-clean") BUILDER_ARGS+=("--install") BUILDER_ARGS+=("--disable-updates") BUILDER_ARGS+=("--disable-rofiles-fuse") BUILDER_ARGS+=("${FLATPAK_BUILDER_DIR}/build-dir") BUILDER_ARGS+=("${manifest}") if which flatpak-builder &>/dev/null ; then flatpak-builder "${BUILDER_ARGS[@]}" else flatpak run org.flatpak.Builder "${BUILDER_ARGS[@]}" fi build-flatpak-bundle $appid=appid: build-flatpak #!/usr/bin/env bash set -euo pipefail FLATPAK_BUILDER_DIR="$(realpath ".flatpak-builder")" flatpak build-export repo "${FLATPAK_BUILDER_DIR}/build-dir" flatpak build-bundle repo "${appid}".flatpak "${appid}" build-rpm: #!/usr/bin/env bash mkdir -p rpmbuild podman run --rm -i -v .:/build:Z -v ./rpmbuild:/root/rpmbuild:Z registry.fedoraproject.org/fedora:latest <<'EOF' set -xeuo pipefail dnf install -y rpmdevtools mkdir -p $HOME/rpmbuild/SOURCES RPMDIR="/build/build-aux/rpm" cp "${RPMDIR}"/* $HOME/rpmbuild/SOURCES spectool -agR "${RPMDIR}"/bazaar.spec dnf builddep -y "${RPMDIR}"/bazaar.spec rpmbuild -bb "${RPMDIR}"/bazaar.spec EOF [private] default: @{{ just }} --list # Check just Syntax [group('just')] check: #!/usr/bin/bash find . -type f -name "*.just" | while read -r file; do echo "Checking syntax: $file" {{ just }} --unstable --fmt --check -f $file done echo "Checking syntax: Justfile" {{ just }} --unstable --fmt --check -f Justfile # Fix {{ just }} Syntax [group('{{ just }}')] fix: #!/usr/bin/bash find . -type f -name "*.just" | while read -r file; do echo "Checking syntax: $file" {{ just }} --unstable --fmt -f $file done echo "Checking syntax: Justfile" {{ just }} --unstable --fmt -f Justfile || { exit 1; } bazaar-org-bazaar-b6e9a65/README.md000066400000000000000000000161321522167256300167130ustar00rootroot00000000000000


Bazaar

Discover and install apps

Screenshot showing Bazaar's Flathub page
> [!NOTE] > If you are a distributor/packager who would like to learn how to > customize Bazaar, take a look at the [docs](/docs/overview.md). > [!NOTE] > If you are interested in contributing code to Bazaar (Thank you!), > please see the [style rules](/CODESTYLE.md). > [!NOTE] > If you are interested in contributing translations to Bazaar (Thank > you!), please see the [translators introduction](/TRANSLATORS.md). Bazaar is a new app store for GNOME with a focus on discovering and installing apps and add-ons from Flatpak remotes, particularly [Flathub](https://flathub.org/). It emphasizes supporting the developers who make the Linux desktop possible. Bazaar features a "curated" tab that can be configured by distributors to allow for a more localized experience. Bazaar is fast and highly multi-threaded, guaranteeing a smooth experience in the user interface. You can queue as many downloads as you wish and run them while perusing Flathub's latest releases. This is due to the UI being completely decoupled from all backend operations. It runs as a service, meaning state will be maintained even if you close all windows, and implements the gnome-shell search provider dbus interface. A krunner [plugin](https://github.com/ublue-os/krunner-bazaar) is available for use on the KDE Plasma desktop. Thanks to [Tobias Bernard](https://tobiasbernard.com/), [Jakub Steiner](http://jimmac.eu), and [Sam Hewitt](https://snwh.org) for designing Bazaar's market stall icon. ### Installing Pre-built binaries are distributed via Flathub and GitHub actions: Get it on Flathub [![Build Flatpak and Upload Artifact](https://github.com/bazaar-org/bazaar/actions/workflows/build-flatpak.yml/badge.svg)](https://github.com/bazaar-org/bazaar/actions/workflows/build-flatpak.yml) There also exist packages for [Debian](https://tracker.debian.org/pkg/bazaar) and [Arch](https://archlinux.org/packages/extra/x86_64/bazaar/). These are not directly supported but should work fine. If you encounter a bug on any package of Bazaar other than the flatpak, ensure the bug also exists on the flatpak before reporting it here. ### Supporting If you would like to support me and the development of this app (Thank you!), I have a ko-fi here! [![Ko-Fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/kolunmi) Thanks to everyone in the GNOME development community for creating such an awesome desktop environment! ### Contributing If you would like to try this project on your local machine, clone it on the cli and type these commands inside the project root: ```sh meson setup build --prefix=/usr --libdir=/usr/lib64 ninja -C build sudo ninja -C build install bazaar ``` You will need the following dependencies installed, along with a C compiler, meson, and ninja: | Dep Name | `pkg-config` Name | Min Version | Justification | |-------------------------------------------------------------------|-------------------|-------------|-----------------------------------------------------| | [gtk4](https://gitlab.gnome.org/GNOME/gtk/) | `gtk4` | `4.22.1` | GUI | | [libadwaita](https://gitlab.gnome.org/GNOME/libadwaita) | `libadwaita-1` | `1.8` | GNOME styling | | [libdex](https://gitlab.gnome.org/GNOME/libdex) | `libdex-1` | `1.0` | Async helpers | | [flatpak](https://github.com/flatpak/flatpak) | `flatpak` | `1.9` | Flatpak installation management | | [appstream](https://github.com/ximion/appstream) | `appstream` | `1.0` | Interpret application metadata | | [xmlb](https://github.com/hughsie/libxmlb) | `xmlb` | `0.3.4` | Handle binary xml appstream bundles/Parse plain xml | | [glycin](https://gitlab.gnome.org/GNOME/glycin) | `glycin-2` | `2.0` | Decode image URIs | | [glycin-gtk4](https://gitlab.gnome.org/GNOME/glycin) | `glycin-gtk4-2` | `2.0` | Convert glycin frames to texture representations | | [libyaml](https://github.com/yaml/libyaml) | `yaml-0.1` | `0.2.5` | Parse YAML configs | | [libsoup](https://gitlab.gnome.org/GNOME/libsoup) | `libsoup-3.0` | `3.6.0` | HTTP operations | | [json-glib](https://gitlab.gnome.org/GNOME/json-glib) | `json-glib-1.0` | `1.10.0` | Parse some HTTP replies | | [md4c](https://github.com/mity/md4c) | `md4c` | `0.5.1` | Parse markdown (.md) | | [gtksourceview](https://gitlab.gnome.org/GNOME/gtksourceview) | `gtksourceview-5` | `5.17` | Render markdown code blocks | | [webkitgtk](https://webkitgtk.org/) | `webkitgtk-6.0` | `2.50.2` | Render web views | | [libsecret](https://gitlab.gnome.org/GNOME/libsecret) | `libsecret-1` | `0.20` | Store Flathub account information | | [libproxy](https://github.com/libproxy/libproxy) | `libproxy-1.0` | `0.5` | Parse proxies for networking operations | | [malcontent](https://gitlab.freedesktop.org/pwithnall/malcontent) | `malcontent-0` | `0.12.0` | Adhere to system parental controls settings | #### Code of Conduct This project adheres to the [GNOME Code of Conduct](https://conduct.gnome.org/). By participating through any means, including PRs, Issues or Discussions, you are expected to uphold this code. ### What people are saying - [Why Bazaar Is the Best Flatpak App Store You’re Not Using](https://fossforce.com/2025/10/why-bazaar-is-the-best-flatpak-app-store-youre-not-using/) - [Bazaar is a game changer](https://gardinerbryant.com/linux-software-management-is-about-to-change-with-bazaar/) - [Bazaar is a Slick New Desktop Flathub Frontend](https://www.omgubuntu.co.uk/2025/08/bazaar-new-flatpak-app-store-gnome-linux) - [Bazaar Is the Flatpak Store GNOME Always Needed](https://linuxiac.com/bazaar-is-the-flatpak-store-gnome-always-needed/) bazaar-org-bazaar-b6e9a65/TRANSLATORS-FR.md000066400000000000000000000122561522167256300201020ustar00rootroot00000000000000# Instructions pour les traducteurs Merci pour votre intĂŠrĂŞt Ă  traduire Bazaar ! 🏷️🗺️💜 Ceci est une adaptation française de `TRANSLATORS.md` pour la traduction française spĂŠcifiquement. Voici quelques règles simples: * Vous devez parler couramment Français et avoir une bonne comprĂŠhension de l'anglais * L'utilisation de modèles de langue (IA) pour gĂŠnĂŠrer du texte dans les fichiers est interdite (N'importe qui pourrait le faire). Si vous le faite, vous serez banni du projet par le crĂŠateur * Le but n'est pas de fournir une traduction littĂŠrale, mais une expĂŠrience claire et complète aux utilisateurs francophones * Utilisez `chore(po): update French translation` comme titre de Pull Request pour ĂŞtre uniforme avec les autres langues > Note : La section "RecommandĂŠes" dĂŠpend du système dans lequel est fourni Bazaar - de plus il n'y a pas encore de système de traduction pour cette page lĂ . ## Installation > Pour traduire et soumettre votre traduction, il est recommandĂŠ de savoir utiliser Git, la plateforme Github et un ĂŠditeur de traductions comme [celui fourni par Gnome](https://flathub.org/fr/apps/org.gnome.Gtranslator) par exemple. Vous devrez fork le projet et le cloner sur votre machine - afin de pouvoir soumettre votre traduction dans un Pull Request après. Ensuite vous devrez vous assurez que le dossier actuellement ouvert est le dossier racine de Bazaar. ## Mise en place ### Automatique Une fois que c'est fait, vous pourrez exĂŠcuter `./translators.sh` et suivre les diffĂŠrentes instructions (en anglais). Le script va vous montrer l'ĂŠtat actuel de `po/LINGUAS`. Si tout est correct, tappez `Y` et appuyez sur entrĂŠe. Après cela, le script va vous demander votre code de langue (`fr`), ĂŠcrivez le et appuyez sur entrĂŠe. Le script va gĂŠnĂŠrer un nouveau fichier `po` ou mettre Ă  jour le fichier existant avec de nouvelles entrĂŠes traduisibles. Vous ĂŞtes dorĂŠnavant prĂŞts Ă  ouvrir le fichier `po` dans votre ĂŠditeur de texte ou votre ĂŠditeur de traduction ([POEdit](https://flathub.org/apps/net.poedit.Poedit), [GTranslator](https://flathub.org/apps/org.gnome.Gtranslator), [Lokalize](https://flathub.org/apps/org.kde.lokalize), etc.) et Ă  commencer Ă  traduire. Une fois que vous avez fini, envoyez vos commits et soumettez un Pull Request sur Github. Faites attention Ă  n'envoyez que le(s) fichier(s) liĂŠs Ă  votre traduction. ### Manuelle Une fois que c'est fait, mettez en place meson avec le flag `im_a_translator` mis Ă  `true`: ```sh meson setup build -Dim_a_translator=true ``` Ensuite ouvrez le dossier `build`: ```sh cd build ``` Et exĂŠcutez la commande suivante pour gĂŠnĂŠrer le fichier `pot` (**P**ortable **O**bject **T**emplate) principal : ```sh meson compile bazaar-pot ``` Il se pourrait que vous verrez pas mal de messages disant que l'extension `blp` est inconnue - vous pouvez les ignorer. Enfin, toujours dans le dossier build, exĂŠcutez la commande suivante pour mettre Ă  jour ou crĂŠer le fichier `po` : ```sh meson compile bazaar-update-po ``` Vous ĂŞtes dorĂŠnavant prĂŞts Ă  ouvrir le fichier `po` dans votre ĂŠditeur de texte ou votre ĂŠditeur de traduction ([POEdit](https://flathub.org/apps/net.poedit.Poedit), [GTranslator](https://flathub.org/apps/org.gnome.Gtranslator), [Lokalize](https://flathub.org/apps/org.kde.lokalize), etc.) et Ă  commencer Ă  traduire. Une fois que vous avez fini, envoyez vos commits et soumettez un Pull Request sur Github. Faites attention Ă  n'envoyez que le(s) fichier(s) liĂŠs Ă  votre traduction. ## Mettre Ă  jour la traduction existante GĂŠnĂŠrez Ă  nouveau un fichier `.pot` (si nĂŠcessaire) Ă  l'aide des commandes ci-dessus. ```sh msgmerge --update --verbose po/fr.po po/bazaar.pot ``` Veuillez crĂŠer un commit sĂŠparĂŠ pour la mise Ă  jour prĂŠcĂŠdente dans votre Pull Request afin de faciliter la rĂŠvision. Merci ! ## Tester la traduction Depuis le dossier de Bazaar, exĂŠcutez la commande suivante : ```sh msgfmt po/fr.po -o bazaar.mo ``` Ensuite copiez le fichier `.mo` pour que Bazaar puisse le voir : ```sh sudo cp bazaar.mo /var/lib/flatpak/runtime/io.github.kolunmi.Bazaar.Locale/x86_64/stable/active/files/fr/share/fr/LC_MESSAGES/ ``` Assurez-vous d'abord de tuer le processus d'arrière-plan de Bazaar afin que les modifications/la langue souhaitĂŠes soient utilisĂŠes : ```sh killall bazaar ``` Et ensuite redĂŠmarrez Bazaar pour voir vos traductions ! >Si vous n'avez pas votre système en français, vous pouvez utiliser la commande suivante pour lancer Bazaar en français: ```sh LANGUAGE=fr flatpak run io.github.kolunmi.Bazaar ``` ## Notes des traducteurs Les processus automatiques et manuels peuvent gĂŠnĂŠrer des entrĂŠes marquĂŠes comme ÂŤ floues Âť (`fuzzy`). Cela signifie que pour ces entrĂŠes, `gettext` a tentĂŠ de dĂŠriver une traduction prĂŠexistante. Certaines suites de traduction, comme Lokalize, utilisent ce marquage pour dĂŠfinir les chaĂŽnes comme non rĂŠvisĂŠes et les supprimer lorsque l'entrĂŠe est marquĂŠe comme terminĂŠe. Lorsque vous travaillez avec des fichiers pot Ă  l'aide d'un ĂŠditeur de texte, veillez Ă  supprimer vous-mĂŞme les marques `fuzzy` des entrĂŠes que vous considĂŠrez comme terminĂŠes, sinon votre traduction n'apparaĂŽtra pas dans Bazaar. bazaar-org-bazaar-b6e9a65/TRANSLATORS-PL.md000066400000000000000000000103671522167256300201070ustar00rootroot00000000000000# Instrukcje dla tłumaczy Dziękuję za wasze zainteresowanie w tłumaczeniu Bazaar'u! 🏷️🗺️💜 Oto parę podstawowych zasad: * Musisz być biegły w języku, na ktĂłry będziesz tłumaczyć. * Nie korzystaj z [SI](https://pl.wikipedia.org/wiki/Sztuczna_inteligencja), aby wygenerować tłumaczenie (Sam mĂłgłbym to zrobić). Jeśli to zrobisz, zablokuję cię. * Jeśli edytujesz istniejące tłumaczenie zapoznaj się z `TRANSLATORS-[kod języka].md`, aby zapoznać się z zasadami obecnymi dla tego języka. Tłumaczenie na język polski: * Zanim rozpoczniesz tłumaczenie zapoznaj się z http://fsc.com.pl/poradnik/ * Przydatne strony: - Słownik Diki - https://www.diki.pl/ - Słownik Bab.la - https://bab.la/ - Słownik Cambridge - https://dictionary.cambridge.org/ * Słowniki zapisane w podpunkcie "Przydatne strony" mają funkcje tłumaczenia całych wyraĹźen i zdań, lecz proszę z nich nie korzystać, bo to nie są dokładne tłumaczenia. * Proszę rĂłwnieĹź ogranicznyć korzystanie z serwisĂłw takich jak Google Tłumacz, DeepL, itp. ## Procedury podstawowe UtwĂłrz fork projektu (tak abyś mĂłgł później zrobić pull request) i skonuj repozytorium. Następnie upewnij się, Ĺźe jesteś w folderze odpowiadającym budową do podstawy repozytorium: ``` # Zmień '...' na adress URL twojego forku Bazaar'u, # w ktĂłrym masz uprawnienia do zapisywania git clone ... cd bazaar ``` Nie zamykaj okna terminala # Konfiguracja Automatyczna Dodaj kod języka docelowego do `po/LINGUAS`. Na przykład, jeśli dodajesz hiszpańskie tłumaczenie, wstaw `es` do nowej linijki, upewniając się, Ĺźe lista jest w kolejności alfabetycznej. Zatem jeśli `po/LINGUAS` wygląda następująco: ``` # Please keep this file sorted alphabetically. ab en_GB ms ``` musisz zmienić to na: ``` # Please keep this file sorted alphabetically. ab en_GB es ms ``` Jak juĹź to zrobisz, moĹźesz uruchomić `./translators.sh` i podążać za instrukcjami widocznymi na ekranie. Skrypt pokaĹźe ci jak plik `po/LINGUAS` aktualnie wygląda, jeśli wszystko się zgadza naciśnij Y, a następnie enter. Następnie skrypt poprosi cię o wprowadzenie kodu języka docelowego, wpisz go, a następnie naciśnij enter. Następnie skrypt wygeneruje nowy plik `po` lub zaktualizuje istniejący, tak aby wszystkie przetłumaczalne linijki były dostępne. Teraz jesteś gotowy, aby otworzyć swĂłj plik `po` w wybranym edytorze tekstu lub edytorze tłumaczeń (POEdit, GTranslator, Lokalize, itp.) i rozpocząć proces tłumaczenia. Jak juĹź skończysz, skommituj swoje zmiany i utwĂłrz pull request na githubie. # Konfiguracja Ręczna Jak juĹź to zrobisz, skonfiguruj projekt za pomocą mesona z flagą `im_a_translator` ustawioną na `true`: ```sh meson setup build -Dim_a_translator=true ``` Dodaj kod języka docelowego do `po/LINGUAS`. Na przykład, jeśli dodajesz hiszpańskie tłumaczenie, wstaw `es` do nowej linijki, upewniając się, Ĺźe lista jest w kolejności alfabetycznej. Zatem jeśli `po/LINGUAS` wygląda następująco: ``` # Please keep this file sorted alphabetically. ab en_GB ms ``` musisz zmienić to na: ``` # Please keep this file sorted alphabetically. ab en_GB es ms ``` Następnie, przejdĹş do katalogu `build`: ```sh cd build ``` Uruchom tą komendę, aby wygenerować główny plik `pot` (**P**ortable **O**bject **T**emplate): ```sh meson compile bazaar-pot ``` Na wierszu poleceń moĹźe wyskoczyć mnĂłstwo błędĂłw o tym, Ĺźe rozszerzenie `blp` jest nieznane. MoĹźesz je zignorować. Wreszcie, wciąż będąc w katalogu `build`, uruchom następującą komendę, aby zaktualizować i/lub stworzyć pliki `po` (**P**ortable **O**bject): ```sh meson compile bazaar-update-po ``` Teraz jesteś gotowy, aby otworzyć swĂłj plik `po` w wybranym edytorze tekstu lub edytorze tłumaczeń (POEdit, GTranslator, Lokalize, itp.) i rozpocząć proces tłumaczenia. Jak juĹź skończysz, skommituj swoje zmiany i utwĂłrz pull request na githubie. ## Testowanie swojego tłumaczenia Dostosuj do swojego [kodu języka](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes)! ``` msgfmt po/de.po -o bazaar.mo sudo cp bazaar.mo /usr/share/locale/de/LC_MESSAGES/ ``` Upewnij się, Ĺźe zatrzymasz wszystkie utuchomione instancje Bazaar'u. ``` killall bazaar ``` ``` LANGUAGE=de bazaar ``` bazaar-org-bazaar-b6e9a65/TRANSLATORS-ZH-CN.md000066400000000000000000000101051522167256300204010ustar00rootroot00000000000000# 翻译者指南 感谢你对翻译 Bazaar 的兴趣!🏷️🗺️💜 一些基本规则: * 你必须精通你所贡献的语言。 * **丼猁**使用 LLM 生成译文。如果你这样做,你将被项目作者禁止参与此项目。 * flathub.org 本身就有良好的中文支持,因此 Bazaar 里 Flathub 页面的翻译应当和 flathub.org 高度一致。 即使 flathub.org 中个别翻译可能并不恰当,也请直接采用 flathub.org 的原文。 例如 https://flathub.org/zh-Hans/apps/category/game/subcategories/ArcadeGame 里将 Arcade 翻译为“游乐中心”,虽然实际上是“街机”更合适,但我们依旧选择直接采用“游乐中心”作为翻译 ## 统一术语 Uninstall 为“卸载”而非“删除” 根据: ```bash ❯ flatpak uninstall --help 用法: flatpak uninstall [选项…] [引用…] - 卸载应用程序或运行时 ... ``` Donate 为“捐助”而非“捐赠” 根据 flathub.org ## 基本流程 Fork 本项目(以便稍后开启 PR)并克隆仓库。然后确保你的当前目录位于 Bazaar 项目的根目录: ```sh # 将 '...' 替换为你拥有写入权限的 Bazaar Fork 的 URL git clone ... cd bazaar ``` # 自动设置 完成上述操作后,你可以运行 `./translators.sh` 并按照屏幕上的提示进行操作。该脚本会显示当前 `po/LINGUAS` 的内容。如果一切正确,输入 `Y` 并按回车。随后脚本会要求你输入语言代码,请输入并回车。脚本现在将生成一个新的 `po` 文件或更新现有文件,以便所有新的待翻译字符串都可用。 现在,你可以使用文本编辑器或翻译编辑器(POEdit、GTranslator、Lokalize 等)打开 `po` 文件并开始翻译。完成后,提交你的更改并在 GitHub 上提交 Pull RequestPR)。 # 手动设置 完成克隆后,使用 Meson 设置项目,并将 `im_a_translator` 标志设为 `true`: ```sh meson setup build -Dim_a_translator=true ``` 接下来,进入构建目录: ```sh cd build ``` 运行以下命令生成主 `pot`**P**ortable **O**bject **T**emplate)文件: ```sh meson compile bazaar-pot ``` 你可能会看到一堆警告 `blp` 扩展名未知的输出,可以安全忽略它。 最后,仍然在构建目录内,运行以下命令来更新和/或创建 `po`**P**ortable **O**bject)文件: ```sh meson compile bazaar-update-po ``` 现在,你可以使用文本编辑器或翻译编辑器([POEdit](https://flathub.org/apps/net.poedit.Poedit)、[GTranslator](https://flathub.org/apps/org.gnome.Gtranslator)、[Lokalize](https://flathub.org/apps/org.kde.lokalize) 等)打开 `po` 文件并开始翻译。 完成后,提交你的更改并在 GitHub 上提交 PR。请确保只提交与你的翻译相关的文件。 ## 更新现有翻译 根据上述命令再次生成全新的 `.pot` 文件(如有必要)。 ```sh msgmerge --update --verbose po/zh_CN.po po/bazaar.pot ``` 请在 PR 中将上述更新步骤作为一个单独的提交(Commit),以便于代码审查。谢谢! ## 测试你的翻译 确保使用简体中文对应的[语言代码](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes)"zh_CN" ```sh msgfmt po/zh_CN.po -o bazaar.mo ``` 复制 `.mo` 文件,使 Bazaar 能够识别它: ```sh sudo cp bazaar.mo /var/lib/flatpak/runtime/io.github.kolunmi.Bazaar.Locale/x86_64/stable/active/files/zh/share/zh_CN/LC_MESSAGES/ ``` 确保先结束 Bazaar 的后台进程,以便应用所需的更改/语言。 ```sh killall bazaar ``` 覆盖使用的语言并启动 Bazaar: ```sh LANGUAGE=zh_CN flatpak run io.github.kolunmi.Bazaar ``` # 翻译者注意事项 自动和手动流程都可能生成标记为 `fuzzy`(模糊)的条目。这意味着对于这些条目,`gettext` 尝试从现有的翻译中推导结果。某些翻译软件(如 Lokalize)会利用此标记将字符串设为“未审核”,并在条目被标记为完成时移除标记。如果你使用文本编辑器处理 pot 文件,请务必手动删除你认为已完成条目的 `fuzzy` 标记,否则你的翻译将不会出现在 Bazaar 中。 bazaar-org-bazaar-b6e9a65/TRANSLATORS.md000066400000000000000000000101671522167256300175740ustar00rootroot00000000000000# Instructions for Translators Thank you for your interest in translating Bazaar! 🏷️🗺️💜 Some basic rules: * You must be fluent in the language you contribute * You may not use llms to generate the strings (I could do that). If you do, I will ban you from the project * If you are editing existing translation, make sure to check rules for that language in `TRANSLATORS-[language code].md` file. ## Basic Process Fork the project (so you can open a PR later) and clone the repo. Then make sure your current directory is the bazaar project root: ```sh # Replace '...' with the URL of your Bazaar fork # for which you have write permissions git clone ... cd bazaar ``` # Automatic Setup Once you've done that, you can run `./translators.sh` and follow instructions present on the screen. The script will show you what `po/LINGUAS` currently looks like. If everything is correct, type `Y` and press enter. After that the script will ask you to enter language code, please enter it, and press enter. The script will now generate a new `po` file or update an existing one such that any new translatable strings will be available. You are now ready to open your `po` file in your text editor or translation editor (POEdit, GTranslator, Lokalize, etc.) and begin translating. When you are done, commit your changes and submit a pull request on github. # Manual Setup Once you've done that, setup the project with meson with the `im_a_translator` flag set to `true`: ```sh meson setup build -Dim_a_translator=true ``` Add your language identifier to `po/LINGUAS`. For example, if you are adding a Spanish translation, insert `es` into the newline-separated list, keeping it sorted alphabetically. So if the `po/LINGUAS` file currently looks like this: ``` # Please keep this file sorted alphabetically. ab en_GB ms ``` you will edit the file to look like this: ``` # Please keep this file sorted alphabetically. ab en_GB es ms ``` Next, enter the build directory: ```sh cd build ``` Run this command to generate the main `pot` (**P**ortable **O**bject **T**emplate) file: ```sh meson compile bazaar-pot ``` You might get a bunch of output complaining that the `blp` extension is unknown. You can ignore this. Finally, still inside the build directory, run the following command to update and/or create the `po` (**P**ortable **O**bject) files: ```sh meson compile bazaar-update-po ``` You are now ready to open your `po` file in your text editor or translation editor ([POEdit](https://flathub.org/apps/net.poedit.Poedit), [GTranslator](https://flathub.org/apps/org.gnome.Gtranslator), [Lokalize](https://flathub.org/apps/org.kde.lokalize), etc.)and begin translating. When you are done, commit your changes and submit a pull request on GitHub. Make sure to only commit files that are related to your translation. ## Update existing translations Generate a fresh `.pot` file again (if necessary) with the commands from above. ```sh msgmerge --update --verbose po/de.po po/bazaar.pot ``` Please make the previous update step a separate commit in your PR so it is easier to review. Thanks! ## Test your translations Replace "de" with your [Language code](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes)! ```sh msgfmt po/de.po -o bazaar.mo ``` Copy the `.mo` file so Bazaar can see it ```sh sudo cp bazaar.mo /var/lib/flatpak/runtime/io.github.kolunmi.Bazaar.Locale/x86_64/stable/active/files/de/share/de/LC_MESSAGES/ ``` Make sure to kill the background process from Bazaar first so the desired changes/language will be used. ```sh killall bazaar ``` Override the used Language and launch Bazaar ```sh LANGUAGE=de flatpak run io.github.kolunmi.Bazaar ``` # Notes From Translators Both automatic and manual processes may generate entries marked as `fuzzy`. This means that for such entries, `gettext` attempted to derive previously existing translation. Some translation suites, like Lokalize, will utilize this marking to set strings as unreviewed and remove when the entry is marked finished. When working with pot-files using text editor, be sure to remove `fuzzy` marks yourself from entries you deem finished, else your translation will not appear in Bazaar. bazaar-org-bazaar-b6e9a65/bazaar.doap000066400000000000000000000025101522167256300175340ustar00rootroot00000000000000 bazaar Discover and install applications A new app store for Linux with a focus on discovering and installing apps and add-ons from Flatpak remotes, particularly Flathub. C GTK 4 Libadwaita Kolunmi kolunmi bazaar-org-bazaar-b6e9a65/bge/000077500000000000000000000000001522167256300161665ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/README.md000066400000000000000000000000301522167256300174360ustar00rootroot00000000000000# Bazaar GTK Extensions bazaar-org-bazaar-b6e9a65/bge/bge-animation-private.h000066400000000000000000000032341522167256300225230ustar00rootroot00000000000000/* bge-animation-private.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include /* Copied with modifications from libadwaita */ double spring_oscillate (double damping, double mass, double stiffness, double from, double to, double time, double *velocity); /* Copied with modifications from libadwaita */ double spring_get_first_zero (double damping, double mass, double stiffness, double from, double to); /* Copied with modifications from libadwaita */ double spring_calculate_duration (double damping, double mass, double stiffness, double from, double to, gboolean clamp); gboolean bge_should_animate (GtkWidget *widget); bazaar-org-bazaar-b6e9a65/bge/bge-animation.c000066400000000000000000000543111522167256300210500ustar00rootroot00000000000000/* bge-animation.c * * Copyright 2026 Eva M * * 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 */ /* This animation implementation was originally from my other project, libpastry: https://github.com/kolunmi/libpastry */ /** * BgeAnimation: * * Manages animations for a widget. Individual value animations are tracked in a * hash map with string keys, allowing them to be easily restarted or replaced. */ #define G_LOG_DOMAIN "BGE::ANIMATION" #define DELTA 0.001 #define EPSILON 0.00001 #include "bge.h" #include "bge-animation-private.h" enum { PROP_0, PROP_WIDGET, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; struct _BgeAnimation { GObject parent_instance; GtkWidget *widget; GWeakRef wr; guint tag; GHashTable *data; GPtrArray *anonymous; }; G_DEFINE_FINAL_TYPE (BgeAnimation, bge_animation, G_TYPE_OBJECT) typedef struct { double from; double to; double damping_ratio; double mass; double stiffness; double damping; gboolean clamp; BgeAnimationCallback cb; gpointer user_data; GDestroyNotify destroy_data; double est_duration; GTimer *timer; double velocity; GCancellable *cancellable; } SpringData; static gboolean tick_cb (GtkWidget *widget, GdkFrameClock *frame_clock, GWeakRef *wr); static void ensure_tick (BgeAnimation *self, GtkWidget *widget); static void destroy_spring_data (gpointer ptr); static void destroy_wr (gpointer ptr); static void dispose (GObject *object) { BgeAnimation *self = BGE_ANIMATION (object); g_autoptr (GtkWidget) widget = NULL; widget = g_weak_ref_get (&self->wr); if (widget != NULL) { gtk_widget_remove_tick_callback (widget, self->tag); self->tag = 0; } g_clear_object (&widget); g_weak_ref_clear (&self->wr); g_clear_object (&self->widget); g_clear_pointer (&self->data, g_hash_table_unref); g_clear_pointer (&self->anonymous, g_ptr_array_unref); G_OBJECT_CLASS (bge_animation_parent_class)->dispose (object); } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeAnimation *self = BGE_ANIMATION (object); switch (prop_id) { case PROP_WIDGET: g_value_take_object (value, bge_animation_dup_widget (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeAnimation *self = BGE_ANIMATION (object); switch (prop_id) { case PROP_WIDGET: g_clear_object (&self->widget); self->widget = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void constructed (GObject *object) { BgeAnimation *self = BGE_ANIMATION (object); g_weak_ref_init (&self->wr, self->widget); g_clear_object (&self->widget); } static void bge_animation_class_init (BgeAnimationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; /** * BgeAnimation:widget: * * The widget on which this animation is attached. */ props[PROP_WIDGET] = g_param_spec_object ( "widget", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bge_animation_init (BgeAnimation *self) { g_weak_ref_init (&self->wr, NULL); self->data = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, destroy_spring_data); self->anonymous = g_ptr_array_new_with_free_func ( destroy_spring_data); } /** * bge_animation_new: * @widget: The widget onto which to attach the tick callback * * Creates a new `BgeAnimation` object. * * Returns: The newly created `BgeAnimation` object. */ BgeAnimation * bge_animation_new (GtkWidget *widget) { g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); return g_object_new ( BGE_TYPE_ANIMATION, "widget", widget, NULL); } /** * bge_animation_dup_widget: * @self: a `BgeAnimation` * * Gets the widget on which @self is attached. * * Returns: (nullable) (transfer full): the widget for @self */ GtkWidget * bge_animation_dup_widget (BgeAnimation *self) { g_return_val_if_fail (BGE_IS_ANIMATION (self), NULL); return g_weak_ref_get (&self->wr); } /** * bge_animation_add_spring: * @self: a `BgeAnimation` * @key: (nullable): a string ID to replace, or NULL for anonymous * @from: the start value * @to: the end value * @damping_ratio: the damping ratio * @mass: the mass * @stiffness: the stiffness * @cb: a tick callback * @user_data: (nullable): the user data pointer to be passed to @cb * @destroy_data: (nullable): the destruction function for @user_data * @cancellable: (nullable): a cancellable to cancel the operation * * Adds a one shot spring animation to @self. If @key is already running in * @self, then the old animation is replaced, maintaining the current velocity. * */ void bge_animation_add_spring (BgeAnimation *self, const char *key, double from, double to, double damping_ratio, double mass, double stiffness, BgeAnimationCallback cb, gpointer user_data, GDestroyNotify destroy_data, GCancellable *cancellable) { g_autoptr (GtkWidget) widget = NULL; g_return_if_fail (BGE_IS_ANIMATION (self)); g_return_if_fail (cb != NULL); widget = g_weak_ref_get (&self->wr); if (widget != NULL) { if (bge_should_animate (widget)) { SpringData *data = NULL; if (key != NULL) /* reuse old data if possible */ data = g_hash_table_lookup (self->data, key); if (data != NULL) { if (data->user_data != NULL && data->destroy_data != NULL) /* we are going to overwrite this */ data->destroy_data (data->user_data); g_clear_pointer (&data->timer, g_timer_destroy); g_clear_object (&data->cancellable); /* old velocity is retained */ } else { data = g_new0 (typeof (*data), 1); if (key != NULL) g_hash_table_replace (self->data, g_strdup (key), data); else g_ptr_array_add (self->anonymous, data); } data->from = from; data->to = to; data->damping_ratio = damping_ratio; data->mass = mass; data->stiffness = stiffness; data->cb = cb; data->user_data = user_data; data->destroy_data = destroy_data; data->damping = damping_ratio * (/* critical damping */ 2 * sqrt (mass * stiffness)); /* We'll fill this in on the first iteration */ data->timer = NULL; if (cancellable != NULL) data->cancellable = g_object_ref (cancellable); data->est_duration = spring_calculate_duration ( data->damping, data->mass, data->stiffness, data->from, data->to, data->clamp); cb (widget, key, from, user_data); ensure_tick (self, widget); } else /* If we shouldn't animate, just invoke the callback at the final value */ { cb (widget, key, to, user_data); if (user_data != NULL && destroy_data != NULL) destroy_data (user_data); } } else { if (user_data != NULL && destroy_data != NULL) destroy_data (user_data); } } /** * bge_animation_has_key: * @self: a `BgeAnimation` * @key: a string ID * * Determines whether @key exists and represents an active animation on @self. * * Returns: a boolean representing whether the string ID exists */ gboolean bge_animation_has_key (BgeAnimation *self, const char *key) { g_return_val_if_fail (BGE_IS_ANIMATION (self), FALSE); g_return_val_if_fail (key != NULL, FALSE); return g_hash_table_contains (self->data, key); } /** * bge_animation_cancel: * @self: a `BgeAnimation` * @key: a string ID to remove * * If @key exists on @self, cancel the associated animation. */ void bge_animation_cancel (BgeAnimation *self, const char *key) { SpringData *data = NULL; g_autoptr (GtkWidget) widget = NULL; g_return_if_fail (BGE_IS_ANIMATION (self)); g_return_if_fail (key != NULL); data = g_hash_table_lookup (self->data, key); if (data == NULL) return; widget = g_weak_ref_get (&self->wr); if (widget != NULL) data->cb (widget, key, data->to, data->user_data); g_hash_table_remove (self->data, key); } /** * bge_animation_cancel_all: * @self: a `BgeAnimation` * * Cancel all animations on @self. */ void bge_animation_cancel_all (BgeAnimation *self) { GHashTableIter iter = { 0 }; g_autoptr (GtkWidget) widget = NULL; g_return_if_fail (BGE_IS_ANIMATION (self)); g_hash_table_iter_init (&iter, self->data); widget = g_weak_ref_get (&self->wr); for (;;) { char *key = NULL; SpringData *data = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &key, (gpointer *) &data)) break; if (widget != NULL) data->cb (widget, key, data->to, data->user_data); g_hash_table_iter_remove (&iter); } } static gboolean tick_cb (GtkWidget *widget, GdkFrameClock *frame_clock, GWeakRef *wr) { g_autoptr (BgeAnimation) self = NULL; gboolean cancel = FALSE; GHashTableIter iter = { 0 }; self = g_weak_ref_get (wr); if (self == NULL) return G_SOURCE_REMOVE; cancel = !bge_should_animate (widget); #define UPDATE(_data, _out_value, _out_finished, _out_cancelled) \ G_STMT_START \ { \ if (cancel || \ ((_data)->cancellable != NULL && \ g_cancellable_is_cancelled ((_data)->cancellable))) \ (_out_finished) = (_out_cancelled) = TRUE; \ else \ { \ double elapsed = 0.0; \ \ if ((_data)->timer == NULL) \ { \ (_data)->timer = g_timer_new (); \ (_out_value) = (_data)->from; \ } \ else \ { \ elapsed = g_timer_elapsed ((_data)->timer, NULL); \ (_out_value) = spring_oscillate ( \ data->damping, \ data->mass, \ data->stiffness, \ data->from, \ data->to, \ elapsed, \ &(_data)->velocity); \ } \ \ (_out_finished) = elapsed >= (_data)->est_duration; \ } \ if ((_out_finished)) \ (_out_value) = (_data)->to; \ } \ G_STMT_END /* Named anims */ g_hash_table_iter_init (&iter, self->data); for (;;) { char *key = NULL; SpringData *data = NULL; double value = 0.0; gboolean finished = FALSE; gboolean cancelled = FALSE; if (!g_hash_table_iter_next ( &iter, (gpointer *) &key, (gpointer *) &data)) break; UPDATE (data, value, finished, cancelled); if (!cancelled || cancel) data->cb (widget, key, value, data->user_data); if (finished) g_hash_table_iter_remove (&iter); } /* Anonymous anims */ for (guint i = 0; i < self->anonymous->len;) { SpringData *data = NULL; double value = 0.0; gboolean finished = FALSE; gboolean cancelled = FALSE; data = g_ptr_array_index (self->anonymous, i); UPDATE (data, value, finished, cancelled); if (!cancelled || cancel) data->cb (widget, NULL, value, data->user_data); if (finished) g_ptr_array_remove_index (self->anonymous, i); else i++; } #undef UPDATE if (g_hash_table_size (self->data) == 0 && self->anonymous->len == 0) { gtk_widget_remove_tick_callback (widget, self->tag); self->tag = 0; return G_SOURCE_REMOVE; } return G_SOURCE_CONTINUE; } /* COPIED FROM LIBADWAITA */ /* Based on RBBSpringAnimation from RBBAnimation, MIT license. * https://github.com/robb/RBBAnimation/blob/master/RBBAnimation/RBBSpringAnimation.m * * @offset: Starting value of the spring simulation. Use -1 for regular animations, * as the formulas are tailored to rest at 0 and the resulting evolution between * -1 and 0 will be lerped to the desired range afterwards. Otherwise use 0 for in-place * animations which already start at equilibrium */ double spring_oscillate (double damping, double mass, double stiffness, double from, double to, double time, double *velocity) { double b = damping; double m = mass; double k = stiffness; double v0 = 0.0; double beta = 0.0; double omega0 = 0.0; double x0 = 0.0; double envelope = 0.0; beta = b / (2 * m); omega0 = sqrt (k / m); x0 = from - to; envelope = exp (-beta * time); /* * Solutions of the form C1*e^(lambda1*x) + C2*e^(lambda2*x) * for the differential equation m*ẍ+b*ẋ+kx = 0 */ /* Critically damped */ /* DBL_EPSILON is too small for this specific comparison, so we use * FLT_EPSILON even though it's doubles */ if (G_APPROX_VALUE (beta, omega0, FLT_EPSILON)) { if (velocity != NULL) *velocity = envelope * (-beta * time * v0 - beta * beta * time * x0 + v0); return to + envelope * (x0 + (beta * x0 + v0) * time); } /* Underdamped */ if (beta < omega0) { double omega1 = 0.0; omega1 = sqrt ((omega0 * omega0) - (beta * beta)); if (velocity != NULL) *velocity = envelope * (v0 * cos (omega1 * time) - (x0 * omega1 + (beta * beta * x0 + beta * v0) / (omega1)) * sin (omega1 * time)); return to + envelope * (x0 * cos (omega1 * time) + ((beta * x0 + v0) / omega1) * sin (omega1 * time)); } /* Overdamped */ if (beta > omega0) { double omega2 = 0.0; omega2 = sqrt ((beta * beta) - (omega0 * omega0)); if (velocity != NULL) *velocity = envelope * (v0 * coshl (omega2 * time) + (omega2 * x0 - (beta * beta * x0 + beta * v0) / omega2) * sinhl (omega2 * time)); return to + envelope * (x0 * coshl (omega2 * time) + ((beta * x0 + v0) / omega2) * sinhl (omega2 * time)); } g_assert_not_reached (); } double spring_get_first_zero (double damping, double mass, double stiffness, double from, double to) { /* The first frame is not that important and we avoid finding the trivial 0 * for in-place animations. */ for (int i = 0; i < 20000; i++) { double y = 0.0; y = spring_oscillate ( damping, mass, stiffness, from, to, (double) i / 1000.0, NULL); if (!((to - from > DBL_EPSILON && to - y > EPSILON) || (from - to > DBL_EPSILON && y - to > EPSILON))) return y; } return 0.0; } double spring_calculate_duration (double damping, double mass, double stiffness, double from, double to, gboolean clamp) { double beta = 0.0; double omega0 = 0.0; double x0 = 0.0; double y0 = 0.0; double x1 = 0.0; double y1 = 0.0; double m = 0.0; beta = damping / (2 * mass); if (G_APPROX_VALUE (beta, 0, DBL_EPSILON) || beta < 0) return G_MAXDOUBLE; if (clamp) { if (G_APPROX_VALUE (to, from, DBL_EPSILON)) return 0; return spring_get_first_zero (damping, mass, stiffness, from, to); } omega0 = sqrt (stiffness / mass); /* * As first ansatz for the overdamped solution, * and general estimation for the oscillating ones * we take the value of the envelope when it's < epsilon */ x0 = -log (EPSILON) / beta; /* DBL_EPSILON is too small for this specific comparison, so we use * FLT_EPSILON even though it's doubles */ if (G_APPROX_VALUE (beta, omega0, FLT_EPSILON) || beta < omega0) return x0; /* * Since the overdamped solution decays way slower than the envelope * we need to use the value of the oscillation itself. * Newton's root finding method is a good candidate in this particular case: * https://en.wikipedia.org/wiki/Newton%27s_method */ y0 = spring_oscillate (damping, mass, stiffness, from, to, x0, NULL); m = (spring_oscillate ( damping, mass, stiffness, from, to, (x0 + DELTA), NULL) - y0) / DELTA; x1 = (to - y0 + m * x0) / m; y1 = spring_oscillate ( damping, mass, stiffness, from, to, x1, NULL); for (int i = 0; ABS (to - y1) > EPSILON && i < 1000; i++) { x0 = x1; y0 = y1; m = (spring_oscillate ( damping, mass, stiffness, from, to, x0 + DELTA, NULL) - y0) / DELTA; x1 = (to - y0 + m * x0) / m; y1 = spring_oscillate ( damping, mass, stiffness, from, to, x1, NULL); } if (ABS (to - y1) <= EPSILON) return x1; else return 0.0; } /* ///COPIED FROM LIBADWAITA */ static void ensure_tick (BgeAnimation *self, GtkWidget *widget) { GWeakRef *wr = NULL; if (self->tag > 0) return; wr = g_new0 (typeof (*wr), 1); g_weak_ref_init (wr, self); self->tag = gtk_widget_add_tick_callback ( widget, (GtkTickCallback) tick_cb, wr, destroy_wr); } static void destroy_spring_data (gpointer ptr) { SpringData *data = ptr; if (data->destroy_data != NULL && data->user_data != NULL) data->destroy_data (data->user_data); g_clear_pointer (&data->timer, g_timer_destroy); g_clear_object (&data->cancellable); g_free (ptr); } static void destroy_wr (gpointer ptr) { GWeakRef *wr = ptr; g_weak_ref_clear (wr); g_free (ptr); } gboolean bge_should_animate (GtkWidget *widget) { GtkSettings *settings = NULL; gboolean enable_animations = FALSE; if (!gtk_widget_get_mapped (widget)) return FALSE; settings = gtk_widget_get_settings (widget); g_object_get ( settings, "gtk-enable-animations", &enable_animations, NULL); return enable_animations; } bazaar-org-bazaar-b6e9a65/bge/bge-animation.h000066400000000000000000000044311522167256300210530ustar00rootroot00000000000000/* bge-animation.h * * Copyright 2026 Eva M * * 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 */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif G_BEGIN_DECLS #define BGE_TYPE_ANIMATION (bge_animation_get_type ()) G_DECLARE_FINAL_TYPE (BgeAnimation, bge_animation, BGE, ANIMATION, GObject) typedef void (*BgeAnimationCallback) (GtkWidget *widget, const char *key, double value, gpointer user_data); BGE_AVAILABLE_IN_ALL BgeAnimation * bge_animation_new (GtkWidget *widget); BGE_AVAILABLE_IN_ALL GtkWidget * bge_animation_dup_widget (BgeAnimation *self); BGE_AVAILABLE_IN_ALL void bge_animation_add_spring (BgeAnimation *self, const char *key, double from, double to, double damping_ratio, double mass, double stiffness, BgeAnimationCallback cb, gpointer user_data, GDestroyNotify destroy_data, GCancellable *cancellable); BGE_AVAILABLE_IN_ALL gboolean bge_animation_has_key (BgeAnimation *self, const char *key); BGE_AVAILABLE_IN_ALL void bge_animation_cancel (BgeAnimation *self, const char *key); BGE_AVAILABLE_IN_ALL void bge_animation_cancel_all (BgeAnimation *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/bge-carousel.c000066400000000000000000001126061522167256300207100ustar00rootroot00000000000000/* bge-carousel.c * * Copyright 2026 Eva M * * 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 */ /** * BgeCarousel: * * Arranges widgets into a horizontal carousel */ #define G_LOG_DOMAIN "BGE::CAROUSEL" #include "bge.h" #include "bge-marshalers.h" #include "util.h" #define RAISE_FACTOR 0.025 /* `ratio < 1.0` means it overshoots */ #define ANIMATION_DAMPING_RATIO 1.15 struct _BgeCarousel { GtkWidget parent_instance; GtkEventController *motion; double motion_x; double motion_y; GtkEventController *scroll; gboolean scrolling; int hscroll_start; int hscroll_current; GtkGesture *drag; gboolean dragging; double drag_x; double drag_y; BgeAnimation *animation; gboolean allow_mouse_drag; gboolean allow_overshoot; gboolean allow_scroll_wheel; gboolean allow_raise; GtkSingleSelection *model; GPtrArray *mirror; GPtrArray *widgets; }; G_DEFINE_FINAL_TYPE (BgeCarousel, bge_carousel, GTK_TYPE_WIDGET); enum { PROP_0, PROP_ALLOW_MOUSE_DRAG, PROP_ALLOW_OVERSHOOT, PROP_ALLOW_SCROLL_WHEEL, PROP_ALLOW_RAISE, PROP_MODEL, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_CREATE_WIDGET, SIGNAL_REMOVE_WIDGET, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; BGE_DEFINE_DATA ( carousel_widget, CarouselWidget, { GtkWidget *widget; int width; graphene_rect_t rect; graphene_rect_t target; gboolean raised; GCancellable *cancellable; }, BGE_RELEASE_DATA (widget, gtk_widget_unparent); BGE_RELEASE_DATA (cancellable, g_object_unref)) static void items_changed (BgeCarousel *self, guint position, guint removed, guint added, GListModel *model); static void model_selected_changed (BgeCarousel *self, GParamSpec *pspec, GtkSingleSelection *selection); static void move_to_idx (BgeCarousel *self, guint idx, /* damping_ratio <= 0.0 means no animation */ double damping_ratio); static void animate (BgeCarousel *self, const char *key, double value, CarouselWidgetData *data); static void ensure_viewport (BgeCarousel *self, GtkSingleSelection *model, gboolean animate); static void motion_enter (BgeCarousel *self, gdouble x, gdouble y, GtkEventControllerMotion *controller); static void motion_event (BgeCarousel *self, gdouble x, gdouble y, GtkEventControllerMotion *controller); static void motion_leave (BgeCarousel *self, GtkEventControllerMotion *controller); static void update_motion (BgeCarousel *self, gdouble x, gdouble y); static void scroll_begin (BgeCarousel *self, GtkEventControllerScroll *controller); static void scroll_end (BgeCarousel *self, GtkEventControllerScroll *controller); static gboolean scroll (BgeCarousel *self, gdouble dx, gdouble dy, GtkEventControllerScroll *controller); static void drag_begin (BgeCarousel *self, gdouble start_x, gdouble start_y, GtkGestureDrag *gesture); static void drag_end (BgeCarousel *self, gdouble offset_x, gdouble offset_y, GtkGestureDrag *gesture); static void drag_update (BgeCarousel *self, gdouble offset_x, gdouble offset_y, GtkGestureDrag *gesture); static void finish_horizontal_gesture (BgeCarousel *self, int offset_x, int offset_y); static void bge_carousel_dispose (GObject *object) { BgeCarousel *self = BGE_CAROUSEL (object); if (self->model != NULL) { g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_signal_handlers_disconnect_by_func (self->model, model_selected_changed, self); } g_clear_pointer (&self->animation, g_object_unref); g_clear_pointer (&self->model, g_object_unref); g_clear_pointer (&self->mirror, g_ptr_array_unref); g_clear_pointer (&self->widgets, g_ptr_array_unref); G_OBJECT_CLASS (bge_carousel_parent_class)->dispose (object); } static void bge_carousel_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeCarousel *self = BGE_CAROUSEL (object); switch (prop_id) { case PROP_ALLOW_MOUSE_DRAG: g_value_set_boolean (value, bge_carousel_get_allow_mouse_drag (self)); break; case PROP_ALLOW_OVERSHOOT: g_value_set_boolean (value, bge_carousel_get_allow_overshoot (self)); break; case PROP_ALLOW_SCROLL_WHEEL: g_value_set_boolean (value, bge_carousel_get_allow_scroll_wheel (self)); break; case PROP_ALLOW_RAISE: g_value_set_boolean (value, bge_carousel_get_allow_raise (self)); break; case PROP_MODEL: g_value_set_object (value, bge_carousel_get_model (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_carousel_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeCarousel *self = BGE_CAROUSEL (object); switch (prop_id) { case PROP_ALLOW_MOUSE_DRAG: bge_carousel_set_allow_mouse_drag (self, g_value_get_boolean (value)); break; case PROP_ALLOW_OVERSHOOT: bge_carousel_set_allow_overshoot (self, g_value_get_boolean (value)); break; case PROP_ALLOW_SCROLL_WHEEL: bge_carousel_set_allow_scroll_wheel (self, g_value_get_boolean (value)); break; case PROP_ALLOW_RAISE: bge_carousel_set_allow_raise (self, g_value_get_boolean (value)); break; case PROP_MODEL: bge_carousel_set_model (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_carousel_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BgeCarousel *self = BGE_CAROUSEL (widget); for (guint i = 0; i < self->widgets->len; i++) { CarouselWidgetData *child = NULL; int tmp_minimum = 0; int tmp_natural = 0; int tmp_minimum_baseline = 0; int tmp_natural_baseline = 0; child = g_ptr_array_index (self->widgets, i); gtk_widget_measure ( child->widget, orientation, for_size, &tmp_minimum, &tmp_natural, &tmp_minimum_baseline, &tmp_natural_baseline); if (tmp_minimum > 0 && tmp_minimum > *minimum) *minimum = tmp_minimum; if (tmp_natural > 0 && tmp_natural > *natural) *natural = tmp_natural; if (tmp_minimum_baseline > 0 && tmp_minimum_baseline > *minimum_baseline) *minimum_baseline = tmp_minimum_baseline; if (tmp_natural_baseline > 0 && tmp_natural_baseline > *natural_baseline) *natural_baseline = tmp_natural_baseline; } } static void bge_carousel_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BgeCarousel *self = BGE_CAROUSEL (widget); ensure_viewport (self, self->model, FALSE); for (guint i = 0; i < self->widgets->len; i++) { CarouselWidgetData *child = NULL; g_autoptr (GskTransform) transform = NULL; child = g_ptr_array_index (self->widgets, i); transform = gsk_transform_translate ( gsk_transform_new (), &child->rect.origin); gtk_widget_allocate ( child->widget, child->rect.size.width, child->rect.size.height, baseline, g_steal_pointer (&transform)); } } static void bge_carousel_class_init (BgeCarouselClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bge_carousel_set_property; object_class->get_property = bge_carousel_get_property; object_class->dispose = bge_carousel_dispose; /** * BgeCarousel:allow-mouse-drag: * * Whether to allow dragging with the mouse. */ props[PROP_ALLOW_MOUSE_DRAG] = g_param_spec_boolean ( "allow-mouse-drag", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeCarousel:allow-overshoot: * * Whether to allow overshooting the ends of the carousel with drag/touchpad * input. Once the event completes, the carousel offset value will go back to * that of the start/end widget. Setting this value to FALSE will prevent this * widget from capturing input events which would result in an overshoot. */ props[PROP_ALLOW_OVERSHOOT] = g_param_spec_boolean ( "allow-overshoot", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeCarousel:allow-scroll-wheel: * * Whether to allow moving the carousel contents with the horizontal scroll * wheel. */ props[PROP_ALLOW_SCROLL_WHEEL] = g_param_spec_boolean ( "allow-scroll-wheel", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeCarousel:allow-raise: * * Whether to allow raise animations when motion input events hover over them * carousel widgets. */ props[PROP_ALLOW_RAISE] = g_param_spec_boolean ( "allow-raise", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeCarousel:model: * * The selection model for the carousel contents. */ props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, GTK_TYPE_SINGLE_SELECTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); /** * BgeCarousel::create-widget: * @carousel: the object that received the signal * @object: a list item object from [property@Bge.Carousel:model] * * Emitted when an object is being bound to the carousel * * Return: a newly allocated widget to add to the carousel */ signals[SIGNAL_CREATE_WIDGET] = g_signal_new ( "create-widget", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, bge_marshal_OBJECT__OBJECT, GTK_TYPE_WIDGET, 1, G_TYPE_OBJECT); g_signal_set_va_marshaller ( signals[SIGNAL_CREATE_WIDGET], G_TYPE_FROM_CLASS (klass), bge_marshal_OBJECT__OBJECTv); /** * BgeCarousel::remove-widget: * @carousel: the object that received the signal * @widget: the widget which was created by [signal@Bge.Carousel::create-widget] * @object: a list item object from [property@Bge.Carousel:model] * * Emitted when an object is being unbound from the carousel */ signals[SIGNAL_REMOVE_WIDGET] = g_signal_new ( "remove-widget", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, bge_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GTK_TYPE_WIDGET, G_TYPE_OBJECT); g_signal_set_va_marshaller ( signals[SIGNAL_REMOVE_WIDGET], G_TYPE_FROM_CLASS (klass), bge_marshal_VOID__OBJECT_OBJECTv); widget_class->measure = bge_carousel_measure; widget_class->size_allocate = bge_carousel_size_allocate; } static void bge_carousel_init (BgeCarousel *self) { self->animation = bge_animation_new (GTK_WIDGET (self)); self->mirror = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_object_unref); self->widgets = g_ptr_array_new_with_free_func ( carousel_widget_data_unref); gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN); self->motion = gtk_event_controller_motion_new (); g_signal_connect_swapped (self->motion, "enter", G_CALLBACK (motion_enter), self); g_signal_connect_swapped (self->motion, "motion", G_CALLBACK (motion_event), self); g_signal_connect_swapped (self->motion, "leave", G_CALLBACK (motion_leave), self); gtk_widget_add_controller (GTK_WIDGET (self), self->motion); self->scroll = gtk_event_controller_scroll_new ( GTK_EVENT_CONTROLLER_SCROLL_HORIZONTAL | GTK_EVENT_CONTROLLER_SCROLL_KINETIC); g_signal_connect_swapped (self->scroll, "scroll-begin", G_CALLBACK (scroll_begin), self); g_signal_connect_swapped (self->scroll, "scroll-end", G_CALLBACK (scroll_end), self); g_signal_connect_swapped (self->scroll, "scroll", G_CALLBACK (scroll), self); gtk_widget_add_controller (GTK_WIDGET (self), self->scroll); self->drag = gtk_gesture_drag_new (); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->drag), GTK_PHASE_CAPTURE); g_signal_connect_swapped (self->drag, "drag-begin", G_CALLBACK (drag_begin), self); g_signal_connect_swapped (self->drag, "drag-end", G_CALLBACK (drag_end), self); g_signal_connect_swapped (self->drag, "drag-update", G_CALLBACK (drag_update), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (self->drag)); } /** * bge_carousel_new: * * Creates a new `BgeCarousel` object. * * Returns: The newly created `BgeCarousel` object. */ GtkWidget * bge_carousel_new (void) { return g_object_new (BGE_TYPE_CAROUSEL, NULL); } /** * bge_carousel_get_allow_mouse_drag: * @self: a `BgeCarousel` * * Gets [property@Bge.Carousel:allow-mouse-drag]. * * Returns: the value of the property */ gboolean bge_carousel_get_allow_mouse_drag (BgeCarousel *self) { g_return_val_if_fail (BGE_IS_CAROUSEL (self), FALSE); return self->allow_mouse_drag; } /** * bge_carousel_get_allow_overshoot: * @self: a `BgeCarousel` * * Gets [property@Bge.Carousel:allow-overshoot]. * * Returns: the value of the property */ gboolean bge_carousel_get_allow_overshoot (BgeCarousel *self) { g_return_val_if_fail (BGE_IS_CAROUSEL (self), FALSE); return self->allow_overshoot; } /** * bge_carousel_get_allow_scroll_wheel: * @self: a `BgeCarousel` * * Gets [property@Bge.Carousel:allow-scroll-wheel]. * * Returns: the value of the property */ gboolean bge_carousel_get_allow_scroll_wheel (BgeCarousel *self) { g_return_val_if_fail (BGE_IS_CAROUSEL (self), FALSE); return self->allow_scroll_wheel; } /** * bge_carousel_get_allow_raise: * @self: a `BgeCarousel` * * Gets [property@Bge.Carousel:allow-raise]. * * Returns: the value of the property */ gboolean bge_carousel_get_allow_raise (BgeCarousel *self) { g_return_val_if_fail (BGE_IS_CAROUSEL (self), FALSE); return self->allow_raise; } /** * bge_carousel_get_model: * @self: a `BgeCarousel` * * Gets [property@Bge.Carousel:model]. * * Returns: (nullable): the value of the property */ GtkSingleSelection * bge_carousel_get_model (BgeCarousel *self) { g_return_val_if_fail (BGE_IS_CAROUSEL (self), NULL); return self->model; } /** * bge_carousel_get_nth_page: * @self: a `BgeCarousel` * @index: Index of the page. * * Returns: (nullable) (transfer none): the page at @index, or NULL if out of bounds */ GtkWidget * bge_carousel_get_nth_page (BgeCarousel *self, guint index) { CarouselWidgetData *data = NULL; g_return_val_if_fail (BGE_IS_CAROUSEL (self), NULL); if (index >= self->widgets->len) return NULL; data = g_ptr_array_index (self->widgets, index); return data->widget; } /** * bge_carousel_set_allow_mouse_drag: * @self: a `BgeCarousel` * @allow_mouse_drag: a boolean * * Sets [property@Bge.Carousel:allow-mouse-drag]. */ void bge_carousel_set_allow_mouse_drag (BgeCarousel *self, gboolean allow_mouse_drag) { g_return_if_fail (BGE_IS_CAROUSEL (self)); if (!!allow_mouse_drag == !!self->allow_mouse_drag) return; self->allow_mouse_drag = allow_mouse_drag; if (!allow_mouse_drag && self->dragging) { self->dragging = FALSE; finish_horizontal_gesture (self, self->drag_x, self->drag_y); self->drag_x = 0.0; self->drag_y = 0.0; } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALLOW_MOUSE_DRAG]); } /** * bge_carousel_set_allow_overshoot: * @self: a `BgeCarousel` * @allow_overshoot: a boolean * * Sets [property@Bge.Carousel:allow-overshoot]. */ void bge_carousel_set_allow_overshoot (BgeCarousel *self, gboolean allow_overshoot) { g_return_if_fail (BGE_IS_CAROUSEL (self)); if (!!allow_overshoot == !!self->allow_overshoot) return; self->allow_overshoot = allow_overshoot; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALLOW_OVERSHOOT]); } /** * bge_carousel_set_allow_scroll_wheel: * @self: a `BgeCarousel` * @allow_scroll_wheel: a boolean * * Sets [property@Bge.Carousel:allow-scroll-wheel]. */ void bge_carousel_set_allow_scroll_wheel (BgeCarousel *self, gboolean allow_scroll_wheel) { g_return_if_fail (BGE_IS_CAROUSEL (self)); if (!!allow_scroll_wheel == !!self->allow_scroll_wheel) return; self->allow_scroll_wheel = allow_scroll_wheel; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALLOW_SCROLL_WHEEL]); } /** * bge_carousel_set_allow_raise: * @self: a `BgeCarousel` * @allow_raise: a boolean * * Sets [property@Bge.Carousel:allow-raise]. */ void bge_carousel_set_allow_raise (BgeCarousel *self, gboolean allow_raise) { g_return_if_fail (BGE_IS_CAROUSEL (self)); if (!!allow_raise == !!self->allow_raise) return; self->allow_raise = allow_raise; if (self->model != NULL) ensure_viewport (self, self->model, TRUE); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALLOW_RAISE]); } /** * bge_carousel_set_model: * @self: a `BgeCarousel` * @model: a `GtkSingleSelection` object * * Sets [property@Bge.Carousel:model]. */ void bge_carousel_set_model (BgeCarousel *self, GtkSingleSelection *model) { g_return_if_fail (BGE_IS_CAROUSEL (self)); g_return_if_fail (model == NULL || GTK_IS_SINGLE_SELECTION (model)); if (model == self->model) return; if (self->model != NULL) { g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_signal_handlers_disconnect_by_func (self->model, model_selected_changed, self); items_changed ( self, 0, g_list_model_get_n_items (G_LIST_MODEL (self->model)), 0, G_LIST_MODEL (self->model)); } g_clear_pointer (&self->model, g_object_unref); if (model != NULL) { self->model = g_object_ref (model); items_changed ( self, 0, 0, g_list_model_get_n_items (G_LIST_MODEL (model)), G_LIST_MODEL (model)); g_signal_connect_swapped ( model, "items-changed", G_CALLBACK (items_changed), self); g_signal_connect_swapped ( model, "notify::selected", G_CALLBACK (model_selected_changed), self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); } static void items_changed (BgeCarousel *self, guint position, guint removed, guint added, GListModel *model) { for (guint i = 0; i < removed; i++) { GObject *object = NULL; CarouselWidgetData *child = NULL; object = g_ptr_array_index (self->mirror, position + i); child = g_ptr_array_index (self->widgets, position + i); if (child->cancellable != NULL) g_cancellable_cancel (child->cancellable); g_signal_emit (self, signals[SIGNAL_REMOVE_WIDGET], 0, child->widget, object); } if (removed > 0) { g_ptr_array_remove_range (self->mirror, position, removed); g_ptr_array_remove_range (self->widgets, position, removed); } for (guint i = 0; i < added; i++) { g_autoptr (GObject) object = NULL; GtkWidget *child = NULL; CarouselWidgetData *data = NULL; object = g_list_model_get_item (model, position + i); g_signal_emit (self, signals[SIGNAL_CREATE_WIDGET], 0, object, &child); if (child == NULL) { g_critical ("Failed to populate child for carousel widget"); child = gtk_fixed_new (); } if (position + i == 0) gtk_widget_set_parent (child, GTK_WIDGET (self)); else { CarouselWidgetData *prev = NULL; prev = g_ptr_array_index (self->widgets, position + i - 1); gtk_widget_insert_after (child, GTK_WIDGET (self), prev->widget); } data = carousel_widget_data_new (); data->widget = child; g_ptr_array_insert (self->mirror, position + i, g_object_ref (object)); g_ptr_array_insert (self->widgets, position + i, data); } ensure_viewport (self, GTK_SINGLE_SELECTION (model), FALSE); } static void model_selected_changed (BgeCarousel *self, GParamSpec *pspec, GtkSingleSelection *selection) { guint idx = 0; idx = gtk_single_selection_get_selected (selection); if (idx != G_MAXUINT) move_to_idx (self, idx, ANIMATION_DAMPING_RATIO); gtk_widget_queue_allocate (GTK_WIDGET (self)); } static void move_to_idx (BgeCarousel *self, guint idx, /* damping_ratio <= 0.0 means no animation */ double damping_ratio) { int width = 0; int height = 0; int offset = 0; width = gtk_widget_get_width (GTK_WIDGET (self)); height = gtk_widget_get_height (GTK_WIDGET (self)); if (width == 0 || height == 0) { gtk_widget_queue_allocate (GTK_WIDGET (self)); return; } offset = width / 2; if (self->scrolling) offset += self->hscroll_start - self->hscroll_current; if (self->dragging) offset += self->drag_x; for (guint i = 0; i <= idx; i++) { CarouselWidgetData *child = NULL; int hminimum = 0; int hnatural = 0; int unused = 0; int child_width = 0; child = g_ptr_array_index (self->widgets, i); gtk_widget_measure ( child->widget, GTK_ORIENTATION_HORIZONTAL, height, &hminimum, &hnatural, &unused, &unused); if (gtk_widget_get_hexpand (child->widget)) child_width = MAX (hminimum, width); else child_width = CLAMP (hnatural, hminimum, width); if (i == idx) offset -= child_width / 2; else offset -= child_width; } for (guint i = 0; i < self->widgets->len; i++) { CarouselWidgetData *child = NULL; int hminimum = 0; int hnatural = 0; int unused = 0; int rect_width = 0; int child_width = 0; int child_height = 0; int child_x = 0; int child_y = 0; graphene_rect_t target = { 0 }; gboolean avoid_animation = FALSE; child = g_ptr_array_index (self->widgets, i); gtk_widget_measure ( child->widget, GTK_ORIENTATION_HORIZONTAL, height, &hminimum, &hnatural, &unused, &unused); if (gtk_widget_get_hexpand (child->widget)) rect_width = MAX (hminimum, width); else rect_width = CLAMP (hnatural, hminimum, width); if (child->raised || !self->allow_raise) { child_width = rect_width; child_height = height; child_x = offset; child_y = 0; } else { child_height = round ((double) height * (1.0 - RAISE_FACTOR)); gtk_widget_measure ( child->widget, GTK_ORIENTATION_HORIZONTAL, child_height, &hminimum, &hnatural, &unused, &unused); child_width = CLAMP (hnatural, hminimum, width); child_x = offset + round ((double) (rect_width - child_width) * 0.5); child_y = round ((double) height * (0.5 * RAISE_FACTOR)); } target = GRAPHENE_RECT_INIT (child_x, child_y, child_width, child_height); avoid_animation = graphene_rect_equal (&target, &child->target); if (child->width != rect_width || (damping_ratio < 0.0 && !avoid_animation)) { if (child->cancellable != NULL) g_cancellable_cancel (child->cancellable); child->width = rect_width; child->rect = target; child->target = target; } else if (avoid_animation) child->target = target; else { char buf[64] = { 0 }; g_clear_object (&child->cancellable); child->cancellable = g_cancellable_new (); #define MASS 1.0 #define STIFFNESS 800.0 /* pointer is to ensure a unique identifier so as not to overwrite any other child's key */ g_snprintf (buf, sizeof (buf), "x%p", child); bge_animation_add_spring ( self->animation, buf, child->rect.origin.x, target.origin.x, damping_ratio, MASS, STIFFNESS, (BgeAnimationCallback) animate, carousel_widget_data_ref (child), carousel_widget_data_unref, child->cancellable); g_snprintf (buf, sizeof (buf), "y%p", child); bge_animation_add_spring ( self->animation, buf, child->rect.origin.y, target.origin.y, damping_ratio, MASS, STIFFNESS, (BgeAnimationCallback) animate, carousel_widget_data_ref (child), carousel_widget_data_unref, child->cancellable); g_snprintf (buf, sizeof (buf), "w%p", child); bge_animation_add_spring ( self->animation, buf, child->rect.size.width, target.size.width, damping_ratio, MASS, STIFFNESS, (BgeAnimationCallback) animate, carousel_widget_data_ref (child), carousel_widget_data_unref, child->cancellable); g_snprintf (buf, sizeof (buf), "h%p", child); bge_animation_add_spring ( self->animation, buf, child->rect.size.height, target.size.height, damping_ratio, MASS, STIFFNESS, (BgeAnimationCallback) animate, carousel_widget_data_ref (child), carousel_widget_data_unref, child->cancellable); #undef STIFFNESS #undef MASS child->target = target; } offset += rect_width; } gtk_widget_queue_allocate (GTK_WIDGET (self)); } static void animate (BgeCarousel *self, const char *key, double value, CarouselWidgetData *data) { switch (*key) { case 'x': data->rect.origin.x = value; break; case 'y': data->rect.origin.y = value; break; case 'w': data->rect.size.width = value; break; case 'h': data->rect.size.height = value; break; default: g_assert_not_reached (); } gtk_widget_queue_allocate (GTK_WIDGET (self)); } static void ensure_viewport (BgeCarousel *self, GtkSingleSelection *model, gboolean animate) { guint n_items = 0; n_items = g_list_model_get_n_items (G_LIST_MODEL (model)); if (n_items > 0) { guint selected = 0; selected = gtk_single_selection_get_selected (model); if (selected == G_MAXUINT) { gtk_single_selection_set_selected (model, 0); move_to_idx (self, 0, animate ? ANIMATION_DAMPING_RATIO : -1.0); } else move_to_idx (self, selected, animate ? ANIMATION_DAMPING_RATIO : -1.0); } gtk_widget_queue_allocate (GTK_WIDGET (self)); } static void motion_enter (BgeCarousel *self, gdouble x, gdouble y, GtkEventControllerMotion *controller) { self->motion_x = x; self->motion_y = y; update_motion (self, x, y); } static void motion_event (BgeCarousel *self, gdouble x, gdouble y, GtkEventControllerMotion *controller) { self->motion_x = x; self->motion_y = y; update_motion (self, x, y); } static void motion_leave (BgeCarousel *self, GtkEventControllerMotion *controller) { if (self->dragging) return; self->motion_x = -1.0; self->motion_y = -1.0; update_motion (self, -1.0, -1.0); } static void update_motion (BgeCarousel *self, gdouble x, gdouble y) { graphene_point_t point = { 0 }; gboolean ensure = FALSE; point = GRAPHENE_POINT_INIT (x, y); if (self->scrolling) return; for (guint i = 0; i < self->widgets->len; i++) { CarouselWidgetData *child = NULL; gboolean contained = FALSE; child = g_ptr_array_index (self->widgets, i); contained = graphene_rect_contains_point (&child->target, &point); if (!!contained != !!child->raised) { child->raised = contained; ensure = TRUE; } } if (self->dragging) return; if (ensure) ensure_viewport (self, self->model, TRUE); } static void scroll_begin (BgeCarousel *self, GtkEventControllerScroll *controller) { self->scrolling = TRUE; self->hscroll_start = self->motion_x; self->hscroll_current = self->motion_x; } static void scroll_end (BgeCarousel *self, GtkEventControllerScroll *controller) { self->scrolling = FALSE; finish_horizontal_gesture ( self, self->hscroll_start - self->hscroll_current, 0); self->hscroll_start = -1; self->hscroll_current = -1; update_motion (self, self->motion_x, self->motion_y); } static gboolean scroll (BgeCarousel *self, gdouble dx, gdouble dy, GtkEventControllerScroll *controller) { guint n_items = 0; GdkDevice *device = NULL; GdkInputSource source = 0; if (self->model == NULL) { self->scrolling = FALSE; return FALSE; } n_items = g_list_model_get_n_items (G_LIST_MODEL (self->model)); if (n_items == 0) { self->scrolling = FALSE; return FALSE; } device = gtk_event_controller_get_current_event_device ( GTK_EVENT_CONTROLLER (controller)); source = gdk_device_get_source (device); switch (source) { case GDK_SOURCE_TOUCHPAD: case GDK_SOURCE_TRACKPOINT: { if (self->widgets->len > 0 && !self->allow_overshoot) { guint selection = 0; selection = gtk_single_selection_get_selected (self->model); if ((selection == 0 && self->hscroll_current + dx < 0) || (selection == self->widgets->len - 1 && self->hscroll_current + dx > 0)) { self->scrolling = FALSE; return FALSE; } } self->hscroll_current += dx; ensure_viewport (self, self->model, FALSE); } break; case GDK_SOURCE_MOUSE: case GDK_SOURCE_PEN: case GDK_SOURCE_KEYBOARD: case GDK_SOURCE_TOUCHSCREEN: case GDK_SOURCE_TABLET_PAD: default: { guint selected = 0; guint new_selected = 0; if (!self->allow_scroll_wheel) break; selected = gtk_single_selection_get_selected (self->model); if (dx > 0) new_selected = MIN (selected + 1, n_items - 1); else { if (selected == 0) new_selected = 0; else new_selected = selected - 1; } gtk_single_selection_set_selected (self->model, new_selected); } break; } return TRUE; } static void drag_begin (BgeCarousel *self, gdouble start_x, gdouble start_y, GtkGestureDrag *gesture) { if (!self->allow_mouse_drag) return; self->dragging = TRUE; if (self->model == NULL) return; ensure_viewport (self, self->model, TRUE); } static void drag_end (BgeCarousel *self, gdouble offset_x, gdouble offset_y, GtkGestureDrag *gesture) { if (!self->dragging) /* This situation will happen if the `allow-mouse-drag` prop is set to FALSE while a drag is taking place */ return; self->dragging = FALSE; finish_horizontal_gesture (self, self->drag_x, self->drag_y); self->drag_x = 0.0; self->drag_y = 0.0; if (offset_x < -3 || offset_x > 3 || offset_y < -3 || offset_y > 3) gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); } static void drag_update (BgeCarousel *self, gdouble offset_x, gdouble offset_y, GtkGestureDrag *gesture) { if (!self->dragging) return; self->drag_x = offset_x; self->drag_y = offset_y; if (self->model == NULL) return; if (self->widgets->len > 0 && !self->allow_overshoot) { guint selected = 0; selected = gtk_single_selection_get_selected (self->model); if (selected == 0) self->drag_x = MIN (self->drag_x, 0.0); if (selected == self->widgets->len - 1) self->drag_x = MAX (self->drag_x, 0.0); } ensure_viewport (self, self->model, FALSE); } static void finish_horizontal_gesture (BgeCarousel *self, int offset_x, int offset_y) { guint selected = 0; double width = 0.0; guint new_selected = G_MAXUINT; int min_distance = G_MAXINT; if (self->model == NULL || self->widgets->len == 0) return; if (offset_x == 0) return; selected = gtk_single_selection_get_selected (self->model); width = gtk_widget_get_width (GTK_WIDGET (self)); for (guint i = 0; i < self->widgets->len; i++) { CarouselWidgetData *child = NULL; int left_distance = 0; int right_distance = 0; int distance_from_center = 0; child = g_ptr_array_index (self->widgets, i); if (child->rect.origin.x > width / 2.0) left_distance = child->rect.origin.x - width / 2.0; else left_distance = width / 2.0 - child->rect.origin.x; if ((child->rect.origin.x + child->rect.size.width) > width / 2.0) right_distance = (child->rect.origin.x + child->rect.size.width) - width / 2.0; else right_distance = width / 2.0 - (child->rect.origin.x + child->rect.size.width); distance_from_center = MIN (left_distance, right_distance); if (distance_from_center < min_distance) { new_selected = i; min_distance = distance_from_center; } } if (new_selected == selected) { /* Ensure dragging is not too stiff; meaning if we drag the content at least 15 pixels in either direction, it will automatically snap to the next widget */ if (offset_x > 15 && selected > 0) new_selected--; else if (offset_x < -15 && selected < self->widgets->len - 1) new_selected++; } if (new_selected == G_MAXUINT || new_selected == selected) ensure_viewport (self, self->model, TRUE); else gtk_single_selection_set_selected (self->model, new_selected); } /* End of bge-carousel.c */ bazaar-org-bazaar-b6e9a65/bge/bge-carousel.h000066400000000000000000000044511522167256300207130ustar00rootroot00000000000000/* bge-carousel.h * * Copyright 2026 Eva M * * 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 */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif G_BEGIN_DECLS #define BGE_TYPE_CAROUSEL (bge_carousel_get_type ()) G_DECLARE_FINAL_TYPE (BgeCarousel, bge_carousel, BGE, CAROUSEL, GtkWidget) BGE_AVAILABLE_IN_ALL GtkWidget * bge_carousel_new (void); BGE_AVAILABLE_IN_ALL gboolean bge_carousel_get_allow_mouse_drag (BgeCarousel *self); BGE_AVAILABLE_IN_ALL gboolean bge_carousel_get_allow_overshoot (BgeCarousel *self); BGE_AVAILABLE_IN_ALL gboolean bge_carousel_get_allow_scroll_wheel (BgeCarousel *self); BGE_AVAILABLE_IN_ALL gboolean bge_carousel_get_allow_raise (BgeCarousel *self); BGE_AVAILABLE_IN_ALL GtkSingleSelection * bge_carousel_get_model (BgeCarousel *self); BGE_AVAILABLE_IN_ALL GtkWidget * bge_carousel_get_nth_page (BgeCarousel *self, guint index); BGE_AVAILABLE_IN_ALL void bge_carousel_set_allow_mouse_drag (BgeCarousel *self, gboolean allow_mouse_drag); BGE_AVAILABLE_IN_ALL void bge_carousel_set_allow_overshoot (BgeCarousel *self, gboolean allow_overshoot); BGE_AVAILABLE_IN_ALL void bge_carousel_set_allow_scroll_wheel (BgeCarousel *self, gboolean allow_scroll_wheel); BGE_AVAILABLE_IN_ALL void bge_carousel_set_allow_raise (BgeCarousel *self, gboolean allow_raise); BGE_AVAILABLE_IN_ALL void bge_carousel_set_model (BgeCarousel *self, GtkSingleSelection *model); G_END_DECLS /* End of bge-carousel.h */ bazaar-org-bazaar-b6e9a65/bge/bge-markdown-render.c000066400000000000000000000773101522167256300221740ustar00rootroot00000000000000/* bge-markdown-render.c * * Copyright 2025 Eva M * * 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 */ /** * BgeMarkdownRender: * * Renders markdown input using regular GTK widgets. * * For code blocks with a specified language, BgeMarkdownRender will attempt to * apply gtksourceview styling. */ #define G_LOG_DOMAIN "BGE::MARKDOWN-RENDER" #include #include #include "bge-marshalers.h" #include "bge.h" struct _BgeMarkdownRender { GtkWidget parent_instance; char *markdown; gboolean dark; gboolean wrap_tables; int spacing; GtkWidget *box; GPtrArray *box_children; GPtrArray *source_views; }; G_DEFINE_FINAL_TYPE (BgeMarkdownRender, bge_markdown_render, GTK_TYPE_WIDGET); enum { PROP_0, PROP_MARKDOWN, PROP_DARK, PROP_WRAP_TABLES, PROP_SPACING, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_BIND_INLINE_URI, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void regenerate (BgeMarkdownRender *self); typedef struct { BgeMarkdownRender *self; GtkBox *box; GPtrArray *box_children; char *beginning; GString *markup; GArray *block_stack; GPtrArray *container_stack; int indent; int list_index; MD_CHAR list_prefix; GPtrArray *source_views; GString *alt_text; gboolean in_image; GtkWidget *grid; guint grid_rows; guint grid_columns; guint grid_row_idx; guint grid_column_idx; } ParseCtx; static GtkBox * current_container (ParseCtx *ctx) { if (ctx->container_stack->len > 0) return g_ptr_array_index (ctx->container_stack, ctx->container_stack->len - 1); return ctx->box; } static int enter_block (MD_BLOCKTYPE type, void *detail, void *user_data); static int leave_block (MD_BLOCKTYPE type, void *detail, void *user_data); static int enter_span (MD_SPANTYPE type, void *detail, void *user_data); static int leave_span (MD_SPANTYPE type, void *detail, void *user_data); static int text (MD_TEXTTYPE type, const MD_CHAR *buf, MD_SIZE size, void *user_data); static const MD_PARSER parser = { .flags = MD_FLAG_COLLAPSEWHITESPACE | MD_FLAG_NOHTMLBLOCKS | MD_FLAG_NOHTMLSPANS | MD_FLAG_STRIKETHROUGH | MD_FLAG_TABLES, .enter_block = enter_block, .leave_block = leave_block, .enter_span = enter_span, .leave_span = leave_span, .text = text, }; static int terminate_block (MD_BLOCKTYPE type, void *detail, void *user_data); static void check_dark_mode (BgeMarkdownRender *self); static void bge_markdown_render_dispose (GObject *object) { BgeMarkdownRender *self = BGE_MARKDOWN_RENDER (object); g_clear_pointer (&self->markdown, g_free); g_clear_pointer (&self->box, gtk_widget_unparent); g_clear_pointer (&self->box_children, g_ptr_array_unref); g_clear_pointer (&self->source_views, g_ptr_array_unref); G_OBJECT_CLASS (bge_markdown_render_parent_class)->dispose (object); } static void bge_markdown_render_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeMarkdownRender *self = BGE_MARKDOWN_RENDER (object); switch (prop_id) { case PROP_MARKDOWN: g_value_set_string (value, bge_markdown_render_get_markdown (self)); break; case PROP_DARK: g_value_set_boolean (value, bge_markdown_render_get_dark (self)); break; case PROP_WRAP_TABLES: g_value_set_boolean (value, bge_markdown_render_get_wrap_tables (self)); break; case PROP_SPACING: g_value_set_int (value, bge_markdown_render_get_spacing (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_markdown_render_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeMarkdownRender *self = BGE_MARKDOWN_RENDER (object); switch (prop_id) { case PROP_MARKDOWN: bge_markdown_render_set_markdown (self, g_value_get_string (value)); break; case PROP_DARK: bge_markdown_render_set_dark (self, g_value_get_boolean (value)); break; case PROP_WRAP_TABLES: bge_markdown_render_set_wrap_tables (self, g_value_get_boolean (value)); break; case PROP_SPACING: bge_markdown_render_set_spacing (self, g_value_get_int (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static GtkSizeRequestMode bge_markdown_render_get_request_mode (GtkWidget *widget) { return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } static void bge_markdown_render_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BgeMarkdownRender *self = BGE_MARKDOWN_RENDER (widget); gtk_widget_measure ( self->box, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); } static void bge_markdown_render_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BgeMarkdownRender *self = BGE_MARKDOWN_RENDER (widget); if (gtk_widget_should_layout (self->box)) gtk_widget_allocate (self->box, width, height, baseline, NULL); } static void bge_markdown_render_class_init (BgeMarkdownRenderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bge_markdown_render_set_property; object_class->get_property = bge_markdown_render_get_property; object_class->dispose = bge_markdown_render_dispose; /** * BgeMarkdownRender:markdown: * * Raw markdown text. */ props[PROP_MARKDOWN] = g_param_spec_string ( "markdown", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeMarkdownRender:dark: * * Whether to apply dark styling to widgets where applicable. */ props[PROP_DARK] = g_param_spec_boolean ( "dark", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeMarkdownRender:wrap-tables: * * Whether if table elements should scroll horizontally or wrap. */ props[PROP_WRAP_TABLES] = g_param_spec_boolean ( "wrap-tables", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * BgeMarkdownRender:spacing: * * Vertical spacing between rendered block-level elements, in pixels. */ props[PROP_SPACING] = g_param_spec_int ( "spacing", NULL, NULL, 0, G_MAXINT, 7, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); /** * BgeMarkdownRender::bind-inline-uri: * @markdown: the object that received the signal * @title: a string title * @src: a string source uri * * Emitted when an inline image is encountered during parsing. The callback * should respond with a new widget to add to represent the uri. If no * callback is registered for this signal, or if the callback returns NULL, a * [class@Gtk.Picture] is automatically constructed and used. * * Return: a newly allocated widget to add to the markdown view */ signals[SIGNAL_BIND_INLINE_URI] = g_signal_new ( "bind-inline-uri", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, bge_marshal_OBJECT__STRING_STRING, GTK_TYPE_WIDGET, 2, G_TYPE_STRING, G_TYPE_STRING); g_signal_set_va_marshaller ( signals[SIGNAL_BIND_INLINE_URI], G_TYPE_FROM_CLASS (klass), bge_marshal_OBJECT__STRING_STRINGv); widget_class->get_request_mode = bge_markdown_render_get_request_mode; widget_class->measure = bge_markdown_render_measure; widget_class->size_allocate = bge_markdown_render_size_allocate; } static void bge_markdown_render_init (BgeMarkdownRender *self) { self->spacing = 7; self->wrap_tables = TRUE; self->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, self->spacing); gtk_widget_set_parent (self->box, GTK_WIDGET (self)); self->box_children = g_ptr_array_new (); self->source_views = g_ptr_array_new (); } /** * bge_markdown_render_new: * * Creates a new `BgeMarkdownRender` object. * * Returns: The newly created `BgeMarkdownRender` object. */ GtkWidget * bge_markdown_render_new (void) { return g_object_new (BGE_TYPE_MARKDOWN_RENDER, NULL); } /** * bge_markdown_render_get_markdown: * @self: a `BgeMarkdown` * * Gets [property@Bge.MarkdownRender:markdown]. * * Returns: (nullable) (transfer none): the value of the property */ const char * bge_markdown_render_get_markdown (BgeMarkdownRender *self) { g_return_val_if_fail (BGE_IS_MARKDOWN_RENDER (self), NULL); return self->markdown; } /** * bge_markdown_render_get_dark: * @self: a `BgeMarkdown` * * Gets [property@Bge.MarkdownRender:dark]. * * Returns: the value of the property */ gboolean bge_markdown_render_get_dark (BgeMarkdownRender *self) { g_return_val_if_fail (BGE_IS_MARKDOWN_RENDER (self), FALSE); return self->dark; } /** * bge_markdown_render_set_markdown: * @self: a `BgeMarkdownRender` * @markdown: a string * * Sets [property@Bge.MarkdownRender:markdown]. */ void bge_markdown_render_set_markdown (BgeMarkdownRender *self, const char *markdown) { g_return_if_fail (BGE_IS_MARKDOWN_RENDER (self)); g_clear_pointer (&self->markdown, g_free); if (markdown != NULL) self->markdown = g_strdup (markdown); regenerate (self); check_dark_mode (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MARKDOWN]); } /** * bge_markdown_render_set_dark: * @self: a `BgeMarkdownRender` * @dark: a boolean * * Sets [property@Bge.MarkdownRender:dark]. */ void bge_markdown_render_set_dark (BgeMarkdownRender *self, gboolean dark) { g_return_if_fail (BGE_IS_MARKDOWN_RENDER (self)); if (!!dark == !!self->dark) return; self->dark = dark; check_dark_mode (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DARK]); } /** * bge_markdown_render_get_wrap_tables: * @self: a `BgeMarkdownRender` * * Gets [property@Bge.MarkdownRender:wrap-tables]. * * Returns: the value of the property */ gboolean bge_markdown_render_get_wrap_tables (BgeMarkdownRender *self) { g_return_val_if_fail (BGE_IS_MARKDOWN_RENDER (self), FALSE); return self->wrap_tables; } /** * bge_markdown_render_set_wrap_tables: * @self: a `BgeMarkdownRender` * @wrap_tables: a boolean * * Sets [property@Bge.MarkdownRender:wrap-tables]. */ void bge_markdown_render_set_wrap_tables (BgeMarkdownRender *self, gboolean wrap_tables) { g_return_if_fail (BGE_IS_MARKDOWN_RENDER (self)); wrap_tables = !!wrap_tables; if (self->wrap_tables == wrap_tables) return; self->wrap_tables = wrap_tables; regenerate (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WRAP_TABLES]); } /** * bge_markdown_render_get_spacing: * @self: a `BgeMarkdownRender` * * Gets [property@Bge.MarkdownRender:spacing]. * * Returns: the value of the property */ int bge_markdown_render_get_spacing (BgeMarkdownRender *self) { g_return_val_if_fail (BGE_IS_MARKDOWN_RENDER (self), 0); return self->spacing; } /** * bge_markdown_render_set_spacing: * @self: a `BgeMarkdownRender` * @spacing: spacing in pixels * * Sets [property@Bge.MarkdownRender:spacing]. */ void bge_markdown_render_set_spacing (BgeMarkdownRender *self, int spacing) { g_return_if_fail (BGE_IS_MARKDOWN_RENDER (self)); g_return_if_fail (spacing >= 0); if (spacing == self->spacing) return; self->spacing = spacing; gtk_box_set_spacing (GTK_BOX (self->box), spacing); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SPACING]); } static void regenerate (BgeMarkdownRender *self) { int iresult = 0; ParseCtx ctx = { 0 }; for (guint i = 0; i < self->box_children->len; i++) { GtkWidget *child = NULL; child = g_ptr_array_index (self->box_children, i); gtk_box_remove (GTK_BOX (self->box), child); } g_ptr_array_set_size (self->box_children, 0); g_ptr_array_set_size (self->source_views, 0); if (self->markdown == NULL) return; ctx.self = self; ctx.box = GTK_BOX (self->box); ctx.box_children = self->box_children; ctx.beginning = self->markdown; ctx.markup = NULL; ctx.block_stack = g_array_new (FALSE, TRUE, sizeof (int)); ctx.indent = 0; ctx.list_index = 0; ctx.list_prefix = '\0'; ctx.source_views = self->source_views; ctx.container_stack = g_ptr_array_new (); iresult = md_parse ( self->markdown, strlen (self->markdown), &parser, &ctx); if (ctx.markup != NULL) g_string_free (ctx.markup, TRUE); if (ctx.alt_text != NULL) g_string_free (ctx.alt_text, TRUE); if (ctx.grid != NULL) g_object_unref (ctx.grid); g_array_unref (ctx.block_stack); g_ptr_array_unref (ctx.container_stack); if (iresult != 0) { g_warning ("Failed to parse markdown text"); return; } } static int enter_block (MD_BLOCKTYPE type, void *detail, void *user_data) { ParseCtx *ctx = user_data; if (ctx->markup != NULL) { int current_type = 0; current_type = g_array_index (ctx->block_stack, int, ctx->block_stack->len - 1); terminate_block (current_type, NULL, user_data); g_array_index (ctx->block_stack, int, ctx->block_stack->len - 1) = -1; } if (type == MD_BLOCK_UL) { MD_BLOCK_UL_DETAIL *ul_detail = detail; ctx->indent++; ctx->list_index = 0; ctx->list_prefix = ul_detail->mark; } else if (type == MD_BLOCK_OL) { MD_BLOCK_OL_DETAIL *ol_detail = detail; ctx->indent++; ctx->list_index = 0; ctx->list_prefix = ol_detail->mark_delimiter; } else if (type == MD_BLOCK_LI) { GtkWidget *prefix = NULL; GtkWidget *row = NULL; GtkWidget *content_box = NULL; int parent = -1; if (ctx->block_stack->len > 0) parent = g_array_index (ctx->block_stack, int, ctx->block_stack->len - 1); if (parent == MD_BLOCK_OL) { g_autofree char *prefix_text = NULL; prefix_text = g_strdup_printf ("%d%c", ctx->list_index, ctx->list_prefix); prefix = gtk_label_new (prefix_text); gtk_widget_add_css_class (prefix, "caption"); } else { prefix = gtk_image_new_from_icon_name ("circle-filled-symbolic"); gtk_image_set_pixel_size (GTK_IMAGE (prefix), 6); gtk_widget_set_margin_top (prefix, 6); } gtk_widget_add_css_class (prefix, "dimmed"); gtk_widget_set_valign (prefix, GTK_ALIGN_START); content_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); gtk_widget_set_hexpand (content_box, TRUE); row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_set_margin_start (row, 10); gtk_box_append (GTK_BOX (row), prefix); gtk_box_append (GTK_BOX (row), content_box); gtk_box_append (current_container (ctx), row); g_ptr_array_add (ctx->box_children, row); g_ptr_array_add (ctx->container_stack, content_box); ctx->list_index++; ctx->markup = g_string_new (NULL); } else if (type == MD_BLOCK_TABLE) { MD_BLOCK_TABLE_DETAIL *table_detail = detail; g_assert (ctx->grid == NULL); ctx->grid = gtk_grid_new (); gtk_widget_add_css_class (ctx->grid, "markdown-table"); gtk_widget_set_halign (ctx->grid, GTK_ALIGN_START); ctx->grid_rows = table_detail->head_row_count + table_detail->body_row_count; ctx->grid_columns = table_detail->col_count; ctx->grid_row_idx = 0; ctx->grid_column_idx = 0; } else ctx->markup = g_string_new (NULL); g_array_append_val (ctx->block_stack, type); return 0; } static int leave_block (MD_BLOCKTYPE type, void *detail, void *user_data) { ParseCtx *ctx = user_data; g_assert (ctx->block_stack->len > 0); if (type == MD_BLOCK_LI) { if (ctx->markup != NULL) terminate_block (type, detail, user_data); if (ctx->container_stack->len > 0) g_ptr_array_set_size (ctx->container_stack, ctx->container_stack->len - 1); } else { if (g_array_index (ctx->block_stack, int, ctx->block_stack->len - 1) >= 0) terminate_block (type, detail, user_data); } g_array_set_size (ctx->block_stack, ctx->block_stack->len - 1); return 0; } static int enter_span (MD_SPANTYPE type, void *detail, void *user_data) { ParseCtx *ctx = user_data; g_assert (ctx->markup != NULL); switch (type) { case MD_SPAN_EM: g_string_append (ctx->markup, ""); break; case MD_SPAN_STRONG: g_string_append (ctx->markup, ""); break; case MD_SPAN_A: { MD_SPAN_A_DETAIL *a_detail = detail; g_autofree char *href = NULL; g_autofree char *title = NULL; href = g_strndup (a_detail->href.text, a_detail->href.size); if (a_detail->title.text != NULL) title = g_strndup (a_detail->title.text, a_detail->title.size); g_string_append_printf ( ctx->markup, "", href, title != NULL ? title : href); } break; case MD_SPAN_IMG: ctx->in_image = TRUE; ctx->alt_text = g_string_new (NULL); break; case MD_SPAN_CODE: g_string_append (ctx->markup, ""); break; case MD_SPAN_DEL: g_string_append (ctx->markup, ""); break; case MD_SPAN_U: g_string_append (ctx->markup, ""); break; case MD_SPAN_LATEXMATH: case MD_SPAN_LATEXMATH_DISPLAY: case MD_SPAN_WIKILINK: default: g_warning ("Unsupported markdown event (Did you use latex/wikilinks?)"); return 1; break; } return 0; } static int leave_span (MD_SPANTYPE type, void *detail, void *user_data) { ParseCtx *ctx = user_data; g_assert (ctx->markup != NULL); switch (type) { case MD_SPAN_EM: g_string_append (ctx->markup, ""); break; case MD_SPAN_STRONG: g_string_append (ctx->markup, ""); break; case MD_SPAN_A: g_string_append (ctx->markup, ""); break; case MD_SPAN_IMG: { MD_SPAN_IMG_DETAIL *img_detail = detail; g_autofree char *title = NULL; g_autofree char *src = NULL; g_autofree char *alt = NULL; GtkWidget *widget = NULL; if (img_detail->title.text != NULL) title = g_strndup (img_detail->title.text, img_detail->title.size); if (img_detail->src.text != NULL) src = g_strndup (img_detail->src.text, img_detail->src.size); if (ctx->alt_text != NULL) { alt = g_string_free (ctx->alt_text, FALSE); ctx->alt_text = NULL; } ctx->in_image = FALSE; g_signal_emit (ctx->self, signals[SIGNAL_BIND_INLINE_URI], 0, title != NULL ? title : alt, src, &widget); if (widget != NULL) { gtk_box_append (current_container (ctx), widget); g_ptr_array_add (ctx->box_children, widget); } } break; case MD_SPAN_CODE: g_string_append (ctx->markup, ""); break; case MD_SPAN_DEL: g_string_append (ctx->markup, ""); break; case MD_SPAN_U: g_string_append (ctx->markup, ""); break; case MD_SPAN_LATEXMATH: case MD_SPAN_LATEXMATH_DISPLAY: case MD_SPAN_WIKILINK: default: g_warning ("Unsupported markdown event (Did you use latex/wikilinks?)"); return 1; break; } return 0; } static int text (MD_TEXTTYPE type, const MD_CHAR *buf, MD_SIZE size, void *user_data) { ParseCtx *ctx = user_data; int block = -1; g_assert (ctx->markup != NULL); if (ctx->in_image) { g_string_append_len (ctx->alt_text, buf, size); return 0; } if (ctx->block_stack->len > 0) block = g_array_index (ctx->block_stack, int, ctx->block_stack->len - 1); if (type == MD_TEXT_SOFTBR && ctx->markup->len > 0) g_string_append_c (ctx->markup, ' '); else if (type == MD_TEXT_BR && ctx->markup->len > 0) g_string_append_c (ctx->markup, '\n'); else if (block == MD_BLOCK_CODE) g_string_append_len (ctx->markup, buf, size); else { g_autofree char *escaped = NULL; escaped = g_markup_escape_text (buf, size); g_string_append (ctx->markup, escaped); } return 0; } static int terminate_block (MD_BLOCKTYPE type, void *detail, void *user_data) { ParseCtx *ctx = user_data; int parent = 0; GtkWidget *child = NULL; g_assert (ctx->block_stack->len > 0); if (ctx->block_stack->len > 1) parent = g_array_index (ctx->block_stack, int, ctx->block_stack->len - 2); if (ctx->markup != NULL && ctx->markup->len > 0) { const char *end = ctx->markup->str + ctx->markup->len; const char *prev = g_utf8_find_prev_char (ctx->markup->str, end); if (prev != NULL) { gunichar last_char = g_utf8_get_char (prev); if (!g_unichar_isgraph (last_char)) g_string_truncate (ctx->markup, prev - ctx->markup->str); } } #define SET_DEFAULTS(_label_widget) \ G_STMT_START \ { \ gtk_label_set_use_markup (GTK_LABEL (_label_widget), TRUE); \ gtk_label_set_wrap (GTK_LABEL (_label_widget), TRUE); \ gtk_label_set_wrap_mode (GTK_LABEL (_label_widget), PANGO_WRAP_WORD_CHAR); \ gtk_label_set_xalign (GTK_LABEL (_label_widget), 0.0); \ gtk_label_set_selectable (GTK_LABEL (_label_widget), TRUE); \ } \ G_STMT_END switch (type) { case MD_BLOCK_DOC: { g_assert (ctx->markup != NULL); if (ctx->markup->len == 0) break; child = gtk_label_new (ctx->markup->str); SET_DEFAULTS (child); } break; case MD_BLOCK_QUOTE: { GtkWidget *bar = NULL; GtkWidget *label = NULL; g_assert (ctx->markup != NULL); if (ctx->markup->len == 0) break; bar = gtk_separator_new (GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request (bar, 10, -1); gtk_widget_set_margin_end (bar, 20); label = gtk_label_new (ctx->markup->str); SET_DEFAULTS (label); child = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_append (GTK_BOX (child), bar); gtk_box_append (GTK_BOX (child), label); } break; case MD_BLOCK_UL: { if (ctx->markup == NULL) ctx->indent--; } break; case MD_BLOCK_OL: { if (ctx->markup == NULL) ctx->indent--; } break; case MD_BLOCK_LI: { if (ctx->markup != NULL && ctx->markup->len > 0) { GtkWidget *label = gtk_label_new (ctx->markup->str); SET_DEFAULTS (label); gtk_widget_add_css_class (label, "body"); gtk_box_append (current_container (ctx), label); g_ptr_array_add (ctx->box_children, label); } } break; case MD_BLOCK_HR: child = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); break; case MD_BLOCK_H: { MD_BLOCK_H_DETAIL *h_detail = detail; const char *css_class = NULL; g_assert (ctx->markup != NULL); if (ctx->markup->len == 0) break; child = gtk_label_new (ctx->markup->str); SET_DEFAULTS (child); switch (h_detail->level) { case 1: css_class = "title-1"; break; case 2: css_class = "title-2"; break; case 3: css_class = "title-3"; break; case 4: css_class = "title-4"; break; case 5: css_class = "heading"; break; case 6: default: css_class = "caption-heading"; break; } gtk_widget_add_css_class (child, css_class); } break; case MD_BLOCK_CODE: { MD_BLOCK_CODE_DETAIL *code_detail = detail; g_autofree char *lang_id = NULL; GtkSourceLanguage *language = NULL; g_autoptr (GtkSourceBuffer) buffer = NULL; GtkWidget *view = NULL; GtkWidget *window = NULL; g_assert (ctx->markup != NULL); if (ctx->markup->len == 0) break; if (code_detail->lang.text != NULL) { lang_id = g_strndup (code_detail->lang.text, code_detail->lang.size); language = gtk_source_language_manager_get_language ( gtk_source_language_manager_get_default (), lang_id); } if (language != NULL) buffer = gtk_source_buffer_new_with_language (language); else buffer = gtk_source_buffer_new (NULL); gtk_text_buffer_set_text ( GTK_TEXT_BUFFER (buffer), ctx->markup->str, ctx->markup->len); view = gtk_source_view_new_with_buffer (buffer); g_ptr_array_add (ctx->source_views, view); gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE); gtk_text_view_set_monospace (GTK_TEXT_VIEW (view), TRUE); gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 16); gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 16); gtk_text_view_set_top_margin (GTK_TEXT_VIEW (view), 12); gtk_text_view_set_bottom_margin (GTK_TEXT_VIEW (view), 12); gtk_widget_add_css_class (view, "monospace"); window = gtk_scrolled_window_new (); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (window), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (window), view); child = gtk_frame_new (NULL); gtk_frame_set_child (GTK_FRAME (child), window); gtk_widget_add_css_class (child, "code-block"); } break; case MD_BLOCK_P: { g_assert (ctx->markup != NULL); if (ctx->markup->len == 0) break; child = gtk_label_new (ctx->markup->str); SET_DEFAULTS (child); gtk_widget_add_css_class (child, "body"); } break; case MD_BLOCK_TABLE: break; case MD_BLOCK_THEAD: case MD_BLOCK_TBODY: case MD_BLOCK_TR: break; case MD_BLOCK_TH: case MD_BLOCK_TD: { GtkWidget *label = NULL; g_assert (ctx->markup != NULL); label = gtk_label_new (ctx->markup->str); SET_DEFAULTS (label); gtk_label_set_wrap (GTK_LABEL (label), ctx->self->wrap_tables); if (type == MD_BLOCK_TH) gtk_widget_add_css_class (label, "heading"); if (ctx->grid_row_idx % 2 == 1) gtk_widget_add_css_class (label, "row-odd"); gtk_grid_attach ( GTK_GRID (ctx->grid), label, ctx->grid_column_idx * 2, ctx->grid_row_idx, 1, 1); ctx->grid_column_idx++; if (ctx->grid_column_idx >= ctx->grid_columns) { ctx->grid_row_idx++; ctx->grid_column_idx = 0; if (ctx->grid_row_idx >= ctx->grid_rows) { GtkWidget *grid = g_steal_pointer (&ctx->grid); if (!ctx->self->wrap_tables) { GtkWidget *scrolled = NULL; scrolled = gtk_scrolled_window_new (); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); gtk_scrolled_window_set_propagate_natural_height ( GTK_SCROLLED_WINDOW (scrolled), TRUE); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled), grid); child = scrolled; } else child = grid; } } } break; case MD_BLOCK_HTML: default: g_warning ("Unsupported markdown event (Did you use html?)"); return 1; } #undef SET_DEFAULTS if (child != NULL) { gtk_box_append (current_container (ctx), child); g_ptr_array_add (ctx->box_children, child); } if (ctx->markup != NULL) { g_string_free (ctx->markup, TRUE); ctx->markup = NULL; } return 0; } static void check_dark_mode (BgeMarkdownRender *self) { const char *id = NULL; GtkSourceStyleScheme *scheme = NULL; if (self->dark) id = "Adwaita-dark"; else id = "Adwaita"; scheme = gtk_source_style_scheme_manager_get_scheme ( gtk_source_style_scheme_manager_get_default (), id); for (guint i = 0; i < self->source_views->len; i++) { GtkSourceView *view = NULL; GtkTextBuffer *buffer = NULL; view = g_ptr_array_index (self->source_views, i); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); if (scheme != NULL) { gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (buffer), TRUE); gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (buffer), scheme); } else gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (buffer), FALSE); } } /* End of bge-markdown-render.c */ bazaar-org-bazaar-b6e9a65/bge/bge-markdown-render.h000066400000000000000000000035561522167256300222020ustar00rootroot00000000000000/* bge-markdown-render.h * * Copyright 2025 Eva M * * 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 */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif G_BEGIN_DECLS #define BGE_TYPE_MARKDOWN_RENDER (bge_markdown_render_get_type ()) G_DECLARE_FINAL_TYPE (BgeMarkdownRender, bge_markdown_render, BGE, MARKDOWN_RENDER, GtkWidget) GtkWidget * bge_markdown_render_new (void); const char * bge_markdown_render_get_markdown (BgeMarkdownRender *self); gboolean bge_markdown_render_get_dark (BgeMarkdownRender *self); void bge_markdown_render_set_markdown (BgeMarkdownRender *self, const char *markdown); void bge_markdown_render_set_dark (BgeMarkdownRender *self, gboolean dark); int bge_markdown_render_get_spacing (BgeMarkdownRender *self); void bge_markdown_render_set_spacing (BgeMarkdownRender *self, int spacing); gboolean bge_markdown_render_get_wrap_tables (BgeMarkdownRender *self); void bge_markdown_render_set_wrap_tables (BgeMarkdownRender *self, gboolean wrap_tables); G_END_DECLS /* End of bge-markdown-render.h */ bazaar-org-bazaar-b6e9a65/bge/bge-marshalers.list000066400000000000000000000034211522167256300217570ustar00rootroot00000000000000# see glib-genmarshal(1) for a detailed description of the file format, # possible parameter types are: # VOID indicates no return type, or no extra # parameters. if VOID is used as the parameter # list, no additional parameters may be present. # BOOLEAN for boolean types (gboolean) # CHAR for signed char types (char) # UCHAR for unsigned char types (guchar) # INT for signed integer types (int) # UINT for unsigned integer types (guint) # LONG for signed long integer types (glong) # ULONG for unsigned long integer types (gulong) # INT64 for signed 64bit integer types (gint64) # UINT64 for unsigned 64bit integer types (guint64) # ENUM for enumeration types (int) # FLAGS for flag enumeration types (guint) # FLOAT for single-precision float types (float) # DOUBLE for double-precision float types (double) # STRING for string types (char *) # BOXED for boxed (anonymous but reference counted) types (GBoxed*) # PARAM for GParamSpec or derived types (GParamSpec*) # POINTER for anonymous pointer types (gpointer) # OBJECT for GObject or derived types (GObject*) # VARIANT for GVariant types (GVariant*) # NONE deprecated alias for VOID # BOOL deprecated alias for BOOLEAN OBJECT:VOID OBJECT:STRING,STRING OBJECT:OBJECT VOID:OBJECT,OBJECT # for wdgt stuff # graphene types DOUBLE:DOUBLE DOUBLE:DOUBLE,DOUBLE DOUBLE:DOUBLE,DOUBLE,DOUBLE DOUBLE:DOUBLE,DOUBLE,DOUBLE,DOUBLE DOUBLE:DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE BOXED:DOUBLE,DOUBLE BOXED:DOUBLE,DOUBLE,DOUBLE BOXED:DOUBLE,DOUBLE,DOUBLE,DOUBLE BOXED:DOUBLE,ENUM,ENUM,DOUBLE INT:DOUBLE OBJECT:DOUBLE UINT:DOUBLE OBJECT:OBJECT,UINT,DOUBLE bazaar-org-bazaar-b6e9a65/bge/bge-version-macros.h000066400000000000000000000046201522167256300220430ustar00rootroot00000000000000/* bge-version-macros.h * * Copyright 2026 Eva M * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #include #include "bge-version.h" #ifndef _BGE_EXTERN #define _BGE_EXTERN extern #endif #define BGE_VERSION_CUR_STABLE (G_ENCODE_VERSION (BGE_MAJOR_VERSION, 0)) #ifdef BGE_DISABLE_DEPRECATION_WARNINGS #define BGE_DEPRECATED _BGE_EXTERN #define BGE_DEPRECATED_FOR(f) _BGE_EXTERN #define BGE_UNAVAILABLE(maj, min) _BGE_EXTERN #else #define BGE_DEPRECATED G_DEPRECATED _BGE_EXTERN #define BGE_DEPRECATED_FOR(f) G_DEPRECATED_FOR (f) _BGE_EXTERN #define BGE_UNAVAILABLE(maj, min) G_UNAVAILABLE (maj, min) _BGE_EXTERN #endif #define BGE_VERSION_1_0 (G_ENCODE_VERSION (1, 0)) #if BGE_MAJOR_VERSION == BGE_VERSION_1_0 #define BGE_VERSION_PREV_STABLE (BGE_VERSION_1_0) #else #define BGE_VERSION_PREV_STABLE (G_ENCODE_VERSION (BGE_MAJOR_VERSION - 1, 0)) #endif #ifndef BGE_VERSION_MIN_REQUIRED #define BGE_VERSION_MIN_REQUIRED (BGE_VERSION_CUR_STABLE) #endif #ifndef BGE_VERSION_MAX_ALLOWED #if BGE_VERSION_MIN_REQUIRED > BGE_VERSION_PREV_STABLE #define BGE_VERSION_MAX_ALLOWED (BGE_VERSION_MIN_REQUIRED) #else #define BGE_VERSION_MAX_ALLOWED (BGE_VERSION_CUR_STABLE) #endif #endif #define BGE_AVAILABLE_IN_ALL _BGE_EXTERN #if BGE_VERSION_MIN_REQUIRED >= BGE_VERSION_1_0 #define BGE_DEPRECATED_IN_1_0 BGE_DEPRECATED #define BGE_DEPRECATED_IN_1_0_FOR(f) BGE_DEPRECATED_FOR (f) #else #define BGE_DEPRECATED_IN_1_0 _BGE_EXTERN #define BGE_DEPRECATED_IN_1_0_FOR(f) _BGE_EXTERN #endif #if BGE_VERSION_MAX_ALLOWED < BGE_VERSION_1_0 #define BGE_AVAILABLE_IN_1_0 BGE_UNAVAILABLE (1, 0) #else #define BGE_AVAILABLE_IN_1_0 _BGE_EXTERN #endif bazaar-org-bazaar-b6e9a65/bge/bge-version.h.in000066400000000000000000000047571522167256300212010ustar00rootroot00000000000000/* bge-version.h.in * * Copyright 2026 Eva M * * 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 */ #pragma once #if !defined(BGE_INSIDE) && !defined(BGE_COMPILATION) # error "Only can be included directly." #endif /** * SECTION:bgeversion * @short_description: bge version checking * * bge provides macros to check the version of the library * at compile-time */ /** * BGE_MAJOR_VERSION: * * bge major version component (e.g. 1 if %BGE_VERSION is 1.2.3) */ #define BGE_MAJOR_VERSION (@MAJOR_VERSION@) /** * BGE_MINOR_VERSION: * * bge minor version component (e.g. 2 if %BGE_VERSION is 1.2.3) */ #define BGE_MINOR_VERSION (@MINOR_VERSION@) /** * BGE_MICRO_VERSION: * * bge micro version component (e.g. 3 if %BGE_VERSION is 1.2.3) */ #define BGE_MICRO_VERSION (@MICRO_VERSION@) /** * BGE_VERSION * * bge version. */ #define BGE_VERSION (@VERSION@) /** * BGE_VERSION_S: * * bge version, encoded as a string, useful for printing and * concatenation. */ #define BGE_VERSION_S "@VERSION@" #define BGE_ENCODE_VERSION(major,minor,micro) \ ((major) << 24 | (minor) << 16 | (micro) << 8) /** * BGE_VERSION_HEX: * * bge version, encoded as an hexadecimal number, useful for * integer comparisons. */ #define BGE_VERSION_HEX \ (BGE_ENCODE_VERSION (BGE_MAJOR_VERSION, BGE_MINOR_VERSION, BGE_MICRO_VERSION)) /** * BGE_CHECK_VERSION: * @major: required major version * @minor: required minor version * @micro: required micro version * * Compile-time version checking. Evaluates to %TRUE if the version * of bge is greater than the required one. */ #define BGE_CHECK_VERSION(major,minor,micro) \ (BGE_MAJOR_VERSION > (major) || \ (BGE_MAJOR_VERSION == (major) && BGE_MINOR_VERSION > (minor)) || \ (BGE_MAJOR_VERSION == (major) && BGE_MINOR_VERSION == (minor) && \ BGE_MICRO_VERSION >= (micro))) bazaar-org-bazaar-b6e9a65/bge/bge.h000066400000000000000000000021441522167256300170750ustar00rootroot00000000000000/* bge.h - Bazaar GTK Extensions * * Copyright 2026 Eva M * * 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 */ #pragma once #include G_BEGIN_DECLS #define BGE_INSIDE #include "bge-version-macros.h" #include "bge-animation.h" #include "bge-carousel.h" #include "bge-markdown-render.h" #include "wdgt/bge-easing.h" #include "wdgt/bge-wdgt-renderer.h" #include "wdgt/bge-wdgt-spec.h" #undef BGE_INSIDE BGE_AVAILABLE_IN_ALL void bge_init (void); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/demo/000077500000000000000000000000001522167256300171125ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/demo/demo.c000066400000000000000000000113041522167256300202010ustar00rootroot00000000000000/* demo.c * * Copyright 2026 Eva M * * 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 */ #include static BgeWdgtRenderer *wdgt = NULL; static GtkLabel *error_lbl = NULL; static void on_activate (GtkApplication *app); static void on_buffer_changed (GtkTextBuffer *buffer, gpointer user_data); int main (int argc, char **argv) { g_autoptr (GtkApplication) app = NULL; g_autoptr (GtkCssProvider) provider = NULL; bge_init (); app = gtk_application_new ( "io.github.kolunmi.BgeDemo", G_APPLICATION_NON_UNIQUE); g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL); provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (provider, "/io/github/kolunmi/BgeDemo/style.css"); gtk_style_context_add_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); return g_application_run (G_APPLICATION (app), argc, argv); } static void on_activate (GtkApplication *app) { GtkWidget *window = NULL; GtkWidget *root = NULL; GtkTextBuffer *buffer = NULL; BgeMarkdownRender *markdown = NULL; g_autoptr (GtkStringObject) reference = NULL; g_autoptr (GtkBuilder) builder = NULL; g_autoptr (GtkBuilderScope) scope = NULL; g_autoptr (GBytes) wdgt_bytes = NULL; gsize wdgt_buffer_size = 0; gconstpointer wdgt_buffer = NULL; g_autoptr (GBytes) markdown_bytes = NULL; gsize markdown_buffer_size = 0; gconstpointer markdown_buffer = NULL; window = gtk_application_window_new (app); gtk_window_set_default_size (GTK_WINDOW (window), 1000, 500); scope = gtk_builder_cscope_new (); builder = gtk_builder_new (); gtk_builder_set_scope (builder, scope); gtk_builder_add_from_resource (builder, "/io/github/kolunmi/BgeDemo/window.ui", NULL); root = GTK_WIDGET (gtk_builder_get_object (builder, "root")); buffer = GTK_TEXT_BUFFER (gtk_builder_get_object (builder, "buffer")); wdgt = BGE_WDGT_RENDERER (gtk_builder_get_object (builder, "wdgt")); error_lbl = GTK_LABEL (gtk_builder_get_object (builder, "error_lbl")); markdown = BGE_MARKDOWN_RENDER (gtk_builder_get_object (builder, "markdown")); reference = gtk_string_object_new ("Hello from demo.c!!"); bge_wdgt_renderer_set_reference (wdgt, G_OBJECT (reference)); g_signal_connect ( buffer, "changed", G_CALLBACK (on_buffer_changed), NULL); wdgt_bytes = g_resources_lookup_data ( "/io/github/kolunmi/BgeDemo/test.wdgt", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); g_assert (wdgt_bytes != NULL); wdgt_buffer = g_bytes_get_data (wdgt_bytes, &wdgt_buffer_size); gtk_text_buffer_set_text (buffer, wdgt_buffer, wdgt_buffer_size); markdown_bytes = g_resources_lookup_data ( "/io/github/kolunmi/BgeDemo/example-markdown.md", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); g_assert (markdown_bytes != NULL); markdown_buffer = g_bytes_get_data (markdown_bytes, &markdown_buffer_size); bge_markdown_render_set_markdown (markdown, markdown_buffer); gtk_window_set_child (GTK_WINDOW (window), g_object_ref_sink (root)); gtk_window_present (GTK_WINDOW (window)); } static void on_buffer_changed (GtkTextBuffer *buffer, gpointer user_data) { g_autoptr (GError) local_error = NULL; g_autofree char *text = NULL; GtkTextIter start_iter = { 0 }; GtkTextIter end_iter = { 0 }; g_autoptr (BgeWdgtSpec) spec = NULL; gtk_text_buffer_get_start_iter (buffer, &start_iter); gtk_text_buffer_get_end_iter (buffer, &end_iter); text = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE); spec = bge_wdgt_spec_new_for_string (text, &local_error); if (spec != NULL) gtk_widget_set_visible (GTK_WIDGET (error_lbl), FALSE); else { gtk_label_set_label (error_lbl, local_error->message); gtk_widget_set_visible (GTK_WIDGET (error_lbl), TRUE); } bge_wdgt_renderer_set_spec (wdgt, spec); } bazaar-org-bazaar-b6e9a65/bge/demo/demo.gresource.xml000066400000000000000000000004301522167256300225520ustar00rootroot00000000000000 window.ui style.css test.wdgt ../../docs/overview.md bazaar-org-bazaar-b6e9a65/bge/demo/meson.build000066400000000000000000000010431522167256300212520ustar00rootroot00000000000000demo_sources = files( 'demo.c', ) blueprints = custom_target( 'blueprints', input: files( 'window.blp', ), output: '.', command: [ find_program('blueprint-compiler', version: '>= 0.20.0'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@' ], ) demo_sources += gnome.compile_resources('demo-resources', 'demo.gresource.xml', c_name: 'demo', dependencies: blueprints ) demo_deps = [ bge_dep, ] demo = executable( 'bge-demo', demo_sources, dependencies: demo_deps, install: true, ) bazaar-org-bazaar-b6e9a65/bge/demo/style.css000066400000000000000000000003421522167256300207630ustar00rootroot00000000000000.source-edit { font-family: monospace; font-size: large; } .debug { background-color: alpha(pink, 0.25); } .gradient { background-image: linear-gradient(to bottom left, #1f2d8f, #159eff); color: white; } bazaar-org-bazaar-b6e9a65/bge/demo/test.wdgt000066400000000000000000000057001522167256300207620ustar00rootroot00000000000000defwidget "My Widget" { reference ref-string : "GtkStringObject"; var box : "GtkBox"; var cx : "gdouble"; var cy : "gdouble"; var w : "gdouble"; var h : "gdouble"; var corner : "gdouble"; var x : "gdouble"; var y : "gdouble"; var start : "gdouble"; var end : "gdouble"; var outline : "GskPath"; var measure : "GskPathMeasure"; init { set box = #child/(""("gradient") orientation = vertical; _=#child/GtkLabel(""() margin-start = 10; margin-end = 10; margin-top = 10; margin-bottom = 10; label = ref-string:string; wrap = true; ); ); measure 200, 300, 200, 300; set x = #eval(#(cx)-#(w)/2.0); set y = #eval(#(cy)-#(h)/2.0); allocate box w, h, #(translate(#GraphenePoint(x, y));); set outline = #GskPath( move-to(#eval(#(x)+#(corner)), y); rel-line-to(#eval(#(w)-#(corner)*2.0), 0.0); rel-arc-to(corner, 0.0, corner, corner); rel-line-to(0.0, #eval(#(h)-#(corner)*2.0)); rel-arc-to(0.0, corner, #eval(-#(corner)), corner); rel-line-to(#eval(-(#(w)-#(corner)*2.0)), 0.0); rel-arc-to(#eval(-#(corner)), 0.0, #eval(-#(corner)), #eval(-#(corner))); rel-line-to(0.0, #eval(-(#(h)-#(corner)*2.0))); rel-arc-to(0.0, #eval(-#(corner)), corner, #eval(-#(corner))); close(); ); set measure = #measure-path(outline); snapshot { with fill( outline, #GskFillRule(winding), ) { do-child box; } add stroke( #GskPath( add-segment( outline, #path-point(measure, start), #path-point(measure, end), ); ), #GskStroke(6.0, round, round, 0.0), #GdkRGBA("#101432"), ); } } state-default "1" { set w = 100.0; set h = 100.0; set corner = 10.0; set cx = #eval(30.0*sin(#(%tick%)) + #(%width%)/2.0); set cy = #eval(#(%height%)/2.0); set start = #eval(#(#path-length(measure))*(0.333*sin(#(%tick%))+0.333)); set end = #eval(#(#path-length(measure))*(0.333*sin(#(%tick%))+0.666)); transition-spring w 1.0, 0.5, 100.0; transition-spring h 1.0, 0.5, 100.0; transition-spring corner 1.0, 0.5, 100.0; transition-spring cx 1.0, 0.5, 100.0; transition-spring cy 1.0, 0.5, 100.0; transition-spring start 0.5, 0.5, 5.0; transition-spring end 0.5, 0.5, 5.0; } state "2" { set w = 200.0; set h = 200.0; set corner = 20.0; set cx = #eval(#(%width%)/2.0); set cy = #eval(#(%height%)/2.0); set start = 0.0; set end = #path-length(measure); transition-spring w 0.9, 0.5, 100.0; transition-spring h 0.9, 0.5, 100.0; transition-spring corner 0.9, 0.5, 100.0; transition-spring cx 0.9, 0.5, 100.0; transition-spring cy 0.9, 0.5, 100.0; transition-spring start 1.1, 0.2, 10.0; transition-spring end 1.1, 0.2, 10.0; } } bazaar-org-bazaar-b6e9a65/bge/demo/window.blp000066400000000000000000000017571522167256300211320ustar00rootroot00000000000000using Gtk 4.0; Box root { Paned { orientation: horizontal; position: 400; wide-handle: true; start-child: ScrolledWindow { child: $BgeMarkdownRender markdown { margin-start: 10; margin-end: 10; }; }; end-child: Paned { orientation: horizontal; position: 400; start-child: ScrolledWindow { child: TextView { styles ["source-edit"] monospace: true; buffer: TextBuffer buffer { }; }; }; end-child: Box { orientation: vertical; Label error_lbl { styles ["error"] visible: false; wrap: true; } $BgeWdgtRenderer wdgt { styles ["debug"] halign: center; valign: center; hexpand: true; vexpand: true; state: bind state_entry.text; } Entry state_entry { text: "1"; } }; shrink-end-child: false; }; } } bazaar-org-bazaar-b6e9a65/bge/libbge.c000066400000000000000000000021431522167256300175560ustar00rootroot00000000000000/* libbge.c * * Copyright 2025 Eva M * * 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 */ #define G_LOG_DOMAIN "BGE::CORE" #include "bge.h" /** * bge_init: * * Initializes BGE (And GTK). * * This function must be called before using any other BGE functions. */ void bge_init (void) { gtk_init (); g_type_ensure (BGE_TYPE_ANIMATION); g_type_ensure (BGE_TYPE_CAROUSEL); g_type_ensure (BGE_TYPE_MARKDOWN_RENDER); g_type_ensure (BGE_TYPE_WDGT_RENDERER); } bazaar-org-bazaar-b6e9a65/bge/meson.build000066400000000000000000000033171522167256300203340ustar00rootroot00000000000000api_version = bz_version bge_sources = [ 'libbge.c', 'bge-animation.c', 'bge-carousel.c', 'bge-markdown-render.c', ] bge_headers = [ 'bge.h', 'bge-animation.h', 'bge-carousel.h', ] subdir('wdgt') version_split = api_version.split('.') version_conf = configuration_data() version_conf.set('VERSION', api_version) version_conf.set('MAJOR_VERSION', version_split[0]) version_conf.set('MINOR_VERSION', version_split[1]) version_conf.set('MICRO_VERSION', version_split[2]) configure_file( input: 'bge-version.h.in', output: 'bge-version.h', configuration: version_conf, install: true, install_dir: get_option('includedir') / 'bge' ) bge_deps = [ cc.find_library('m', required: true), dependency('gtk4', version: '>= 4.22.1'), dependency('gtksourceview-5', version: '>= 5.17'), dependency('md4c', version: '>= 0.5.1'), ] bge_marshalers = gnome.genmarshal('bge-marshalers', sources: 'bge-marshalers.list', prefix: 'bge_marshal', valist_marshallers: true, ) bge_lib = shared_library( 'bge', bge_sources, bge_marshalers, dependencies: bge_deps, version: api_version, soversion: version_split[0], install: true, ) install_headers( bge_headers + files('bge-version-macros.h'), subdir: 'bge') pkg = import('pkgconfig') pkg.generate( description: 'Bazaar GTK Extensions', libraries: bge_lib, name: 'libbge', filebase: 'bge', version: api_version, subdirs: 'bge', requires: ['gtk4', 'md4c', 'gtksourceview-5'], install_dir: get_option('libdir') / 'pkgconfig' ) bge_dep = declare_dependency( link_with: bge_lib, dependencies: [bge_deps], include_directories : include_directories('..', '.'), ) subdir('demo') bazaar-org-bazaar-b6e9a65/bge/util.h000066400000000000000000000076521522167256300173260ustar00rootroot00000000000000/* util.h * * Copyright 2026 Eva M * * 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 */ #pragma once #define BGE_RELEASE_DATA(name, unref) \ if ((unref) != NULL) \ { \ g_clear_pointer (&self->name, (unref)); \ } #define BGE_RELEASE_UTAG(name, remove) \ if ((remove) != NULL) \ { \ g_clear_handle_id (&self->name, (remove)); \ } /* va args = releases */ #define BGE_DEFINE_DATA(name, Name, layout, ...) \ typedef struct _##Name##Data Name##Data; \ struct _##Name##Data \ { \ gatomicrefcount rc; \ struct layout; \ }; \ G_GNUC_UNUSED \ static inline Name##Data * \ name##_data_new (void) \ { \ Name##Data *data = NULL; \ data = g_new0 (typeof (*data), 1); \ g_atomic_ref_count_init (&data->rc); \ return data; \ } \ G_GNUC_UNUSED \ static inline Name##Data * \ name##_data_ref (gpointer ptr) \ { \ Name##Data *self = ptr; \ g_atomic_ref_count_inc (&self->rc); \ return self; \ } \ G_GNUC_UNUSED \ static void \ name##_data_unref (gpointer ptr); \ G_GNUC_UNUSED \ static void \ name##_data_deinit (gpointer ptr) \ { \ Name##Data *self = ptr; \ __VA_ARGS__ \ } \ G_GNUC_UNUSED \ static void \ name##_data_unref (gpointer ptr) \ { \ Name##Data *self = ptr; \ if (g_atomic_ref_count_dec (&self->rc)) \ { \ name##_data_deinit (self); \ g_free (self); \ } \ } \ G_GNUC_UNUSED \ static void \ name##_data_unref_closure (gpointer data, \ GClosure *closure) \ { \ name##_data_unref (data); \ } \ G_DEFINE_AUTOPTR_CLEANUP_FUNC (Name##Data, name##_data_unref); bazaar-org-bazaar-b6e9a65/bge/wdgt/000077500000000000000000000000001522167256300171335ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-easing.c000066400000000000000000000400231522167256300212770ustar00rootroot00000000000000/* TAKEN FROM LIBADWAITA */ /* * Copyright (C) 2021 Manuel GenovĂŠs * Copyright (C) 2021 Purism SPC * * SPDX-License-Identifier: LGPL-2.1-or-later */ #define G_LOG_DOMAIN "BGE::EASING" #include "bge.h" G_DEFINE_ENUM_TYPE ( BgeEasing, bge_easing, G_DEFINE_ENUM_VALUE (BGE_LINEAR, "linear"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_QUAD, "in-quad"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_QUAD, "out-quad"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_QUAD, "in-out-quad"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_CUBIC, "in-cubic"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_CUBIC, "out-cubic"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_CUBIC, "in-out-cubic"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_QUART, "in-quart"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_QUART, "out-quart"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_QUART, "in-out-quart"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_QUINT, "in-quint"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_QUINT, "out-quint"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_QUINT, "in-out-quint"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_SINE, "in-sine"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_SINE, "out-sine"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_SINE, "in-out-sine"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_EXPO, "in-expo"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_EXPO, "out-expo"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_EXPO, "in-out-expo"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_CIRC, "in-circ"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_CIRC, "out-circ"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_CIRC, "in-out-circ"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_ELASTIC, "in-elastic"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_ELASTIC, "out-elastic"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_ELASTIC, "in-out-elastic"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_BACK, "in-back"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_BACK, "out-back"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_BACK, "in-out-back"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_BOUNCE, "in-bounce"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT_BOUNCE, "out-bounce"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT_BOUNCE, "in-out-bounce"), G_DEFINE_ENUM_VALUE (BGE_EASE, "ease"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN, "ease-in"), G_DEFINE_ENUM_VALUE (BGE_EASE_OUT, "ease-out"), G_DEFINE_ENUM_VALUE (BGE_EASE_IN_OUT, "ease-in-out")); #include /* * Copied from: * https://gitlab.gnome.org/GNOME/clutter/-/blob/a236494ea7f31848b4a459dad41330f225137832/clutter/clutter-easing.c * https://gitlab.gnome.org/GNOME/clutter/-/blob/a236494ea7f31848b4a459dad41330f225137832/clutter/clutter-enums.h * * Copyright (C) 2011 Intel Corporation */ /** * BgeEasing: * @BGE_LINEAR: Linear tweening. * @BGE_EASE_IN_QUAD: Quadratic tweening. * @BGE_EASE_OUT_QUAD: Quadratic tweening, inverse of * [enum@Bge.Easing.ease-in-quad]. * @BGE_EASE_IN_OUT_QUAD: Quadratic tweening, combining * [enum@Bge.Easing.ease-in-quad] and [enum@Bge.Easing.ease-out-quad]. * @BGE_EASE_IN_CUBIC: Cubic tweening. * @BGE_EASE_OUT_CUBIC: Cubic tweening, inverse of * [enum@Bge.Easing.ease-in-cubic]. * @BGE_EASE_IN_OUT_CUBIC: Cubic tweening, combining * [enum@Bge.Easing.ease-in-cubic] and [enum@Bge.Easing.ease-out-cubic]. * @BGE_EASE_IN_QUART: Quartic tweening. * @BGE_EASE_OUT_QUART: Quartic tweening, inverse of * [enum@Bge.Easing.ease-in-quart]. * @BGE_EASE_IN_OUT_QUART: Quartic tweening, combining * [enum@Bge.Easing.ease-in-quart] and [enum@Bge.Easing.ease-out-quart]. * @BGE_EASE_IN_QUINT: Quintic tweening. * @BGE_EASE_OUT_QUINT: Quintic tweening, inverse of * [enum@Bge.Easing.ease-in-quint]. * @BGE_EASE_IN_OUT_QUINT: Quintic tweening, combining * [enum@Bge.Easing.ease-in-quint] and [enum@Bge.Easing.ease-out-quint]. * @BGE_EASE_IN_SINE: Sine wave tweening. * @BGE_EASE_OUT_SINE: Sine wave tweening, inverse of * [enum@Bge.Easing.ease-in-sine]. * @BGE_EASE_IN_OUT_SINE: Sine wave tweening, combining * [enum@Bge.Easing.ease-in-sine] and [enum@Bge.Easing.ease-out-sine]. * @BGE_EASE_IN_EXPO: Exponential tweening. * @BGE_EASE_OUT_EXPO: Exponential tweening, inverse of * [enum@Bge.Easing.ease-in-expo]. * @BGE_EASE_IN_OUT_EXPO: Exponential tweening, combining * [enum@Bge.Easing.ease-in-expo] and [enum@Bge.Easing.ease-out-expo]. * @BGE_EASE_IN_CIRC: Circular tweening. * @BGE_EASE_OUT_CIRC: Circular tweening, inverse of * [enum@Bge.Easing.ease-in-circ]. * @BGE_EASE_IN_OUT_CIRC: Circular tweening, combining * [enum@Bge.Easing.ease-in-circ] and [enum@Bge.Easing.ease-out-circ]. * @BGE_EASE_IN_ELASTIC: Elastic tweening, with offshoot on start. * @BGE_EASE_OUT_ELASTIC: Elastic tweening, with offshoot on end, inverse of * [enum@Bge.Easing.ease-in-elastic]. * @BGE_EASE_IN_OUT_ELASTIC: Elastic tweening, with offshoot on both ends, * combining [enum@Bge.Easing.ease-in-elastic] and * [enum@Bge.Easing.ease-out-elastic]. * @BGE_EASE_IN_BACK: Overshooting cubic tweening, with backtracking on start. * @BGE_EASE_OUT_BACK: Overshooting cubic tweening, with backtracking on end, * inverse of [enum@Bge.Easing.ease-in-back]. * @BGE_EASE_IN_OUT_BACK: Overshooting cubic tweening, with backtracking on both * ends, combining [enum@Bge.Easing.ease-in-back] and * [enum@Bge.Easing.ease-out-back]. * @BGE_EASE_IN_BOUNCE: Exponentially decaying parabolic (bounce) tweening, * on start. * @BGE_EASE_OUT_BOUNCE: Exponentially decaying parabolic (bounce) tweening, * with bounce on end, inverse of [enum@Bge.Easing.ease-in-bounce]. * @BGE_EASE_IN_OUT_BOUNCE: Exponentially decaying parabolic (bounce) tweening, * with bounce on both ends, combining [enum@Bge.Easing.ease-in-bounce] and * [enum@Bge.Easing.ease-out-bounce]. * * Describes the available easing functions for use with * [class@TimedAnimation]. * * New values may be added to this enumeration over time. */ /** * BGE_EASE: * * Cubic bezier tweening, with control points in (0.25, 0.1) and (0.25, 1.0). * * Increases in velocity towards the middle of the animation, slowing back down * at the end. * * Since: 1.7 */ /** * BGE_EASE_IN: * * Cubic bezier tweening, with control points in (0.42, 0.0) and (1.0, 1.0). * * Starts off slowly, with the speed of the animation increasing until complete. * * Since: 1.7 */ /** * BGE_EASE_OUT: * * Cubic bezier tweening, with control points in (0.0, 0.0) and (0.58, 1.0). * * Starts quickly, slowing down the animation until complete. * * Since: 1.7 */ /** * BGE_EASE_IN_OUT: * * Cubic bezier tweening, with control points in (0.42, 0.0) and (0.58, 1.0). * * Starts off slowly, speeds up in the middle, and then slows down again. * * Since: 1.7 */ static inline double linear (double t, double d) { return t / d; } static inline double ease_in_quad (double t, double d) { double p = t / d; return p * p; } static inline double ease_out_quad (double t, double d) { double p = t / d; return -1.0 * p * (p - 2); } static inline double ease_in_out_quad (double t, double d) { double p = t / (d / 2); if (p < 1) return 0.5 * p * p; p -= 1; return -0.5 * (p * (p - 2) - 1); } static inline double ease_in_cubic (double t, double d) { double p = t / d; return p * p * p; } static inline double ease_out_cubic (double t, double d) { double p = t / d - 1; return p * p * p + 1; } static inline double ease_in_out_cubic (double t, double d) { double p = t / (d / 2); if (p < 1) return 0.5 * p * p * p; p -= 2; return 0.5 * (p * p * p + 2); } static inline double ease_in_quart (double t, double d) { double p = t / d; return p * p * p * p; } static inline double ease_out_quart (double t, double d) { double p = t / d - 1; return -1.0 * (p * p * p * p - 1); } static inline double ease_in_out_quart (double t, double d) { double p = t / (d / 2); if (p < 1) return 0.5 * p * p * p * p; p -= 2; return -0.5 * (p * p * p * p - 2); } static inline double ease_in_quint (double t, double d) { double p = t / d; return p * p * p * p * p; } static inline double ease_out_quint (double t, double d) { double p = t / d - 1; return p * p * p * p * p + 1; } static inline double ease_in_out_quint (double t, double d) { double p = t / (d / 2); if (p < 1) return 0.5 * p * p * p * p * p; p -= 2; return 0.5 * (p * p * p * p * p + 2); } static inline double ease_in_sine (double t, double d) { return -1.0 * cos (t / d * G_PI_2) + 1.0; } static inline double ease_out_sine (double t, double d) { return sin (t / d * G_PI_2); } static inline double ease_in_out_sine (double t, double d) { return -0.5 * (cos (G_PI * t / d) - 1); } static inline double ease_in_expo (double t, double d) { return G_APPROX_VALUE (t, 0, DBL_EPSILON) ? 0.0 : pow (2, 10 * (t / d - 1)); } static double ease_out_expo (double t, double d) { return G_APPROX_VALUE (t, d, DBL_EPSILON) ? 1.0 : -pow (2, -10 * t / d) + 1; } static inline double ease_in_out_expo (double t, double d) { double p; if (G_APPROX_VALUE (t, 0, DBL_EPSILON)) return 0.0; if (G_APPROX_VALUE (t, d, DBL_EPSILON)) return 1.0; p = t / (d / 2); if (p < 1) return 0.5 * pow (2, 10 * (p - 1)); p -= 1; return 0.5 * (-pow (2, -10 * p) + 2); } static inline double ease_in_circ (double t, double d) { double p = t / d; return -1.0 * (sqrt (1 - p * p) - 1); } static inline double ease_out_circ (double t, double d) { double p = t / d - 1; return sqrt (1 - p * p); } static inline double ease_in_out_circ (double t, double d) { double p = t / (d / 2); if (p < 1) return -0.5 * (sqrt (1 - p * p) - 1); p -= 2; return 0.5 * (sqrt (1 - p * p) + 1); } static inline double ease_in_elastic (double t, double d) { double p = d * .3; double s = p / 4; double q = t / d; if (G_APPROX_VALUE (q, 1, DBL_EPSILON)) return 1.0; q -= 1; return -(pow (2, 10 * q) * sin ((q * d - s) * (2 * G_PI) / p)); } static inline double ease_out_elastic (double t, double d) { double p = d * .3; double s = p / 4; double q = t / d; if (G_APPROX_VALUE (q, 1, DBL_EPSILON)) return 1.0; return pow (2, -10 * q) * sin ((q * d - s) * (2 * G_PI) / p) + 1.0; } static inline double ease_in_out_elastic (double t, double d) { double p = d * (.3 * 1.5); double s = p / 4; double q = t / (d / 2); if (G_APPROX_VALUE (q, 2, DBL_EPSILON)) return 1.0; if (q < 1) { q -= 1; return -.5 * (pow (2, 10 * q) * sin ((q * d - s) * (2 * G_PI) / p)); } else { q -= 1; return pow (2, -10 * q) * sin ((q * d - s) * (2 * G_PI) / p) * .5 + 1.0; } } static inline double ease_in_back (double t, double d) { double p = t / d; return p * p * ((1.70158 + 1) * p - 1.70158); } static inline double ease_out_back (double t, double d) { double p = t / d - 1; return p * p * ((1.70158 + 1) * p + 1.70158) + 1; } static inline double ease_in_out_back (double t, double d) { double p = t / (d / 2); double s = 1.70158 * 1.525; if (p < 1) return 0.5 * (p * p * ((s + 1) * p - s)); p -= 2; return 0.5 * (p * p * ((s + 1) * p + s) + 2); } static inline double ease_out_bounce (double t, double d) { double p = t / d; if (p < (1 / 2.75)) { return 7.5625 * p * p; } else if (p < (2 / 2.75)) { p -= (1.5 / 2.75); return 7.5625 * p * p + .75; } else if (p < (2.5 / 2.75)) { p -= (2.25 / 2.75); return 7.5625 * p * p + .9375; } else { p -= (2.625 / 2.75); return 7.5625 * p * p + .984375; } } static inline double ease_in_bounce (double t, double d) { return 1.0 - ease_out_bounce (d - t, d); } static inline double ease_in_out_bounce (double t, double d) { if (t < d / 2) return ease_in_bounce (t * 2, d) * 0.5; else return ease_out_bounce (t * 2 - d, d) * 0.5 + 1.0 * 0.5; } static inline double x_for_t (double t, double x_1, double x_2) { double omt = 1.0 - t; return 3.0 * omt * omt * t * x_1 + 3.0 * omt * t * t * x_2 + t * t * t; } static inline double y_for_t (double t, double y_1, double y_2) { double omt = 1.0 - t; return 3.0 * omt * omt * t * y_1 + 3.0 * omt * t * t * y_2 + t * t * t; } static inline double t_for_x (double x, double x_1, double x_2) { double min_t = 0, max_t = 1; int i; for (i = 0; i < 30; ++i) { double guess_t = (min_t + max_t) / 2.0; double guess_x = x_for_t (guess_t, x_1, x_2); if (x < guess_x) max_t = guess_t; else min_t = guess_t; } return (min_t + max_t) / 2.0; } static double ease_cubic_bezier (double t, double d, double x_1, double y_1, double x_2, double y_2) { double p = t / d; if (G_APPROX_VALUE (p, 0.0, DBL_EPSILON)) return 0.0; if (G_APPROX_VALUE (p, 1.0, DBL_EPSILON)) return 1.0; return y_for_t (t_for_x (p, x_1, x_2), y_1, y_2); } /** * bge_easing_ease: * @self: an easing value * @value: a value to ease * * Computes easing with @easing for @value. * * @value should generally be in the [0, 1] range. * * Returns: the easing for @value */ double bge_easing_ease (BgeEasing self, double value) { switch (self) { case BGE_LINEAR: return linear (value, 1); case BGE_EASE_IN_QUAD: return ease_in_quad (value, 1); case BGE_EASE_OUT_QUAD: return ease_out_quad (value, 1); case BGE_EASE_IN_OUT_QUAD: return ease_in_out_quad (value, 1); case BGE_EASE_IN_CUBIC: return ease_in_cubic (value, 1); case BGE_EASE_OUT_CUBIC: return ease_out_cubic (value, 1); case BGE_EASE_IN_OUT_CUBIC: return ease_in_out_cubic (value, 1); case BGE_EASE_IN_QUART: return ease_in_quart (value, 1); case BGE_EASE_OUT_QUART: return ease_out_quart (value, 1); case BGE_EASE_IN_OUT_QUART: return ease_in_out_quart (value, 1); case BGE_EASE_IN_QUINT: return ease_in_quint (value, 1); case BGE_EASE_OUT_QUINT: return ease_out_quint (value, 1); case BGE_EASE_IN_OUT_QUINT: return ease_in_out_quint (value, 1); case BGE_EASE_IN_SINE: return ease_in_sine (value, 1); case BGE_EASE_OUT_SINE: return ease_out_sine (value, 1); case BGE_EASE_IN_OUT_SINE: return ease_in_out_sine (value, 1); case BGE_EASE_IN_EXPO: return ease_in_expo (value, 1); case BGE_EASE_OUT_EXPO: return ease_out_expo (value, 1); case BGE_EASE_IN_OUT_EXPO: return ease_in_out_expo (value, 1); case BGE_EASE_IN_CIRC: return ease_in_circ (value, 1); case BGE_EASE_OUT_CIRC: return ease_out_circ (value, 1); case BGE_EASE_IN_OUT_CIRC: return ease_in_out_circ (value, 1); case BGE_EASE_IN_ELASTIC: return ease_in_elastic (value, 1); case BGE_EASE_OUT_ELASTIC: return ease_out_elastic (value, 1); case BGE_EASE_IN_OUT_ELASTIC: return ease_in_out_elastic (value, 1); case BGE_EASE_IN_BACK: return ease_in_back (value, 1); case BGE_EASE_OUT_BACK: return ease_out_back (value, 1); case BGE_EASE_IN_OUT_BACK: return ease_in_out_back (value, 1); case BGE_EASE_IN_BOUNCE: return ease_in_bounce (value, 1); case BGE_EASE_OUT_BOUNCE: return ease_out_bounce (value, 1); case BGE_EASE_IN_OUT_BOUNCE: return ease_in_out_bounce (value, 1); case BGE_EASE: return ease_cubic_bezier (value, 1, 0.25, 0.1, 0.25, 1.0); case BGE_EASE_IN: return ease_cubic_bezier (value, 1, 0.42, 0.0, 1.0, 1.0); case BGE_EASE_OUT: return ease_cubic_bezier (value, 1, 0.0, 0.0, 0.58, 1.0); case BGE_EASE_IN_OUT: return ease_cubic_bezier (value, 1, 0.42, 0.0, 0.58, 1.0); default: g_assert_not_reached (); } } bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-easing.h000066400000000000000000000023611522167256300213070ustar00rootroot00000000000000/* TAKEN FROM LIBADWAITA */ /* * Copyright (C) 2021 Manuel GenovĂŠs * Copyright (C) 2021 Purism SPC * * SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif G_BEGIN_DECLS typedef enum { BGE_LINEAR, BGE_EASE_IN_QUAD, BGE_EASE_OUT_QUAD, BGE_EASE_IN_OUT_QUAD, BGE_EASE_IN_CUBIC, BGE_EASE_OUT_CUBIC, BGE_EASE_IN_OUT_CUBIC, BGE_EASE_IN_QUART, BGE_EASE_OUT_QUART, BGE_EASE_IN_OUT_QUART, BGE_EASE_IN_QUINT, BGE_EASE_OUT_QUINT, BGE_EASE_IN_OUT_QUINT, BGE_EASE_IN_SINE, BGE_EASE_OUT_SINE, BGE_EASE_IN_OUT_SINE, BGE_EASE_IN_EXPO, BGE_EASE_OUT_EXPO, BGE_EASE_IN_OUT_EXPO, BGE_EASE_IN_CIRC, BGE_EASE_OUT_CIRC, BGE_EASE_IN_OUT_CIRC, BGE_EASE_IN_ELASTIC, BGE_EASE_OUT_ELASTIC, BGE_EASE_IN_OUT_ELASTIC, BGE_EASE_IN_BACK, BGE_EASE_OUT_BACK, BGE_EASE_IN_OUT_BACK, BGE_EASE_IN_BOUNCE, BGE_EASE_OUT_BOUNCE, BGE_EASE_IN_OUT_BOUNCE, BGE_EASE, BGE_EASE_IN, BGE_EASE_OUT, BGE_EASE_IN_OUT } BgeEasing; GType bge_easing_get_type (void); #define BGE_TYPE_EASING (bge_easing_get_type ()) BGE_AVAILABLE_IN_ALL double bge_easing_ease (BgeEasing self, double value); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-wdgt-renderer.h000066400000000000000000000046411522167256300226150ustar00rootroot00000000000000/* bge-wdgt-renderer.h * * Copyright 2026 Eva M * * 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 */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif #include "bge-wdgt-spec.h" G_BEGIN_DECLS #define BGE_TYPE_WDGT_RENDERER (bge_wdgt_renderer_get_type ()) G_DECLARE_FINAL_TYPE (BgeWdgtRenderer, bge_wdgt_renderer, BGE, WDGT_RENDERER, GtkWidget) BGE_AVAILABLE_IN_ALL BgeWdgtRenderer * bge_wdgt_renderer_new (void); BGE_AVAILABLE_IN_ALL BgeWdgtSpec * bge_wdgt_renderer_get_spec (BgeWdgtRenderer *self); BGE_AVAILABLE_IN_ALL const char * bge_wdgt_renderer_get_state (BgeWdgtRenderer *self); BGE_AVAILABLE_IN_ALL GObject * bge_wdgt_renderer_get_reference (BgeWdgtRenderer *self); BGE_AVAILABLE_IN_ALL GtkWidget * bge_wdgt_renderer_get_child (BgeWdgtRenderer *self); BGE_AVAILABLE_IN_ALL void bge_wdgt_renderer_set_spec (BgeWdgtRenderer *self, BgeWdgtSpec *spec); BGE_AVAILABLE_IN_ALL void bge_wdgt_renderer_set_state (BgeWdgtRenderer *self, const char *state); BGE_AVAILABLE_IN_ALL void bge_wdgt_renderer_set_reference (BgeWdgtRenderer *self, GObject *reference); BGE_AVAILABLE_IN_ALL void bge_wdgt_renderer_set_child (BgeWdgtRenderer *self, GtkWidget *child); BGE_AVAILABLE_IN_ALL void bge_wdgt_renderer_set_state_take (BgeWdgtRenderer *self, char *state); #define bge_wdgt_renderer_set_state_take_printf(self, ...) bge_wdgt_renderer_set_state_take (self, g_strdup_printf (__VA_ARGS__)) BGE_AVAILABLE_IN_ALL gpointer bge_wdgt_renderer_lookup_object (BgeWdgtRenderer *self, const char *name); G_END_DECLS /* End of bge-wdgt-renderer.h */ bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-wdgt-spec-private.h000066400000000000000000000232541522167256300234120ustar00rootroot00000000000000/* bge-wdgt-spec-private.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include "bge.h" G_BEGIN_DECLS typedef enum { BGE_WDGT_SNAPSHOT_INSTR_APPEND = 0, BGE_WDGT_SNAPSHOT_INSTR_PUSH, BGE_WDGT_SNAPSHOT_INSTR_POP, BGE_WDGT_SNAPSHOT_INSTR_SAVE, BGE_WDGT_SNAPSHOT_INSTR_TRANSFORM, BGE_WDGT_SNAPSHOT_INSTR_RESTORE, BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD, } BgeWdgtSnapshotInstrKind; typedef enum { BGE_WDGT_MEASURE_MINIMUM_WIDTH, BGE_WDGT_MEASURE_NATURAL_WIDTH, BGE_WDGT_MEASURE_MINIMUM_HEIGHT, BGE_WDGT_MEASURE_NATURAL_HEIGHT, } BgeWdgtMeasureKind; gboolean bge_wdgt_spec_add_constant_source_value (BgeWdgtSpec *self, const char *name, const GValue *constant, GError **error); gboolean bge_wdgt_spec_add_component_source_value (BgeWdgtSpec *self, const char *name, GType type, const char *const *components, guint n_components, GError **error); gboolean bge_wdgt_spec_add_transform_source_value (BgeWdgtSpec *self, const char *name, const char *next, const char *instruction, const char *const *args, guint n_args, GError **error); gboolean bge_wdgt_spec_add_path_source_value (BgeWdgtSpec *self, const char *name, const char *const *instructions, const char *const *const *argss, const guint *n_argss, guint n_args, GError **error); gboolean bge_wdgt_spec_add_instance_source_value (BgeWdgtSpec *self, const char *name, GType type, GError **error); gboolean bge_wdgt_spec_add_child_source_value (BgeWdgtSpec *self, const char *name, GType type, const char *parent_widget, const char *builder_type, const char *const *css_classes, guint n_css_classes, GError **error); gboolean bge_wdgt_spec_add_cclosure_source_value (BgeWdgtSpec *self, const char *name, GType type, GClosureMarshal marshal, GCallback func, const char *const *args, const GType *arg_types, guint n_args, gpointer user_data, GDestroyNotify destroy_user_data, GError **error); gboolean bge_wdgt_spec_add_measure_for_size_source_value (BgeWdgtSpec *self, const char *name, GError **error); gboolean bge_wdgt_spec_add_widget_width_source_value (BgeWdgtSpec *self, const char *name, GError **error); gboolean bge_wdgt_spec_add_widget_height_source_value (BgeWdgtSpec *self, const char *name, GError **error); gboolean bge_wdgt_spec_add_tick_time_source_value (BgeWdgtSpec *self, const char *name, GError **error); gboolean bge_wdgt_spec_add_track_transition_source_value (BgeWdgtSpec *self, const char *name, const char *src, const char *damping_ratio, const char *mass, const char *stiffness, GError **error); gboolean bge_wdgt_spec_add_variable_value (BgeWdgtSpec *self, GType type, const char *name, GError **error); gboolean bge_wdgt_spec_add_reference_object_value (BgeWdgtSpec *self, GType type, const char *name, GError **error); gboolean bge_wdgt_spec_add_property_value (BgeWdgtSpec *self, const char *name, const char *object, const char *property, GType *type_out, GError **error); gboolean bge_wdgt_spec_add_allocation_width_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error); gboolean bge_wdgt_spec_add_allocation_height_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error); gboolean bge_wdgt_spec_add_allocation_transform_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error); gboolean bge_wdgt_spec_add_measure_value (BgeWdgtSpec *self, const char *name, BgeWdgtMeasureKind kind, GError **error); gboolean bge_wdgt_spec_add_state (BgeWdgtSpec *self, const char *name, gboolean default_state, GError **error); gboolean bge_wdgt_spec_set_value (BgeWdgtSpec *self, const char *state, const char *dest_value, const char *src_value, GError **error); gboolean bge_wdgt_spec_transition_value (BgeWdgtSpec *self, const char *state, const char *value, const char *seconds, const char *easing, GError **error); gboolean bge_wdgt_spec_transition_value_spring (BgeWdgtSpec *self, const char *state, const char *value, const char *damping_ratio, const char *mass, const char *stiffness, GError **error); gboolean bge_wdgt_spec_append_snapshot_instr (BgeWdgtSpec *self, const char *state, BgeWdgtSnapshotInstrKind kind, const char *instr, const char *const *args, guint n_args, guint *n_pops_out, GError **error); gboolean bge_wdgt_spec_push_foreach (BgeWdgtSpec *self, const char *model, const char *value_iterator, const char *index_iterator, GType iterator_type, GError **error); gboolean bge_wdgt_spec_pop_foreach (BgeWdgtSpec *self); G_END_DECLS /* End of bge-wdgt-spec-private.h */ bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-wdgt-spec.c000066400000000000000000006240051522167256300217360ustar00rootroot00000000000000/* bge-wdgt-spec.c * * Copyright 2026 Eva M * * 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 */ #define G_LOG_DOMAIN "BGE::WDGT" #include "../bge-animation-private.h" #include "bge-marshalers.h" #include "bge-wdgt-spec-private.h" #include "bge.h" #include "fmt/parser.h" #include "graphene-gobject.h" #include "lookup/lookup.h" #include "util.h" #include "util/marshal.h" typedef enum { VALUE_ALLOCATION_HEIGHT = 0, VALUE_ALLOCATION_TRANSFORM, VALUE_ALLOCATION_WIDTH, VALUE_CHILD, VALUE_CLOSURE, VALUE_COERCION, VALUE_COMPONENT, VALUE_CONSTANT, VALUE_ITERATOR, VALUE_MEASURE_FOR_SIZE, VALUE_MEASURE_MINIMUM_HEIGHT, VALUE_MEASURE_MINIMUM_WIDTH, VALUE_MEASURE_NATURAL_HEIGHT, VALUE_MEASURE_NATURAL_WIDTH, VALUE_OBJECT, VALUE_PATH, VALUE_PROPERTY, VALUE_REFERENCE_OBJECT, VALUE_TICK_TIME, VALUE_TRACK_TRANSITION, VALUE_TRANSFORM, VALUE_VARIABLE, VALUE_WIDGET_HEIGHT, VALUE_WIDGET_WIDTH, } ValueKind; typedef enum { TRANSITION_EASE = 0, TRANSITION_SPRING, } TransitionKind; typedef struct _ForeachData ForeachData; static void deinit_value (gpointer ptr); BGE_DEFINE_DATA ( value, Value, { char *name; GType type; ValueKind kind; union { struct { GValue value; } constant; struct { GPtrArray *params; } component; struct { ForeachData *context; } iterator; struct { TransformCallFunc func; ValueData *next; GPtrArray *args; } transform; struct { GPtrArray *funcs; GPtrArray *argss; } path; struct { GPtrArray *args; GClosureMarshal marshal; GCallback func; gpointer user_data; GDestroyNotify destroy_user_data; } closure; struct { ValueData *src; struct { ValueData *damping_ratio; ValueData *mass; ValueData *stiffness; } spring; } track_transition; struct { ValueData *value; } coercion; struct { ValueData *object; char *prop_name; GParamFlags pspec_flags; } property; struct { ValueData *parent_widget; char *builder_type; GPtrArray *css_classes; } child; struct { ValueData *widget; } allocation; }; }, deinit_value (self);) BGE_DEFINE_DATA ( foreach, Foreach, { ValueData *model; GHashTable *values; ForeachData *parent; }, BGE_RELEASE_DATA (model, value_data_unref); BGE_RELEASE_DATA (values, g_hash_table_unref); BGE_RELEASE_DATA (parent, foreach_data_unref)) static void deinit_value (gpointer ptr) { ValueData *value = ptr; g_clear_pointer (&value->name, g_free); switch (value->kind) { case VALUE_CONSTANT: g_value_unset (&value->constant.value); break; case VALUE_ITERATOR: g_clear_pointer (&value->iterator.context, foreach_data_unref); break; case VALUE_COMPONENT: g_clear_pointer (&value->component.params, g_ptr_array_unref); break; case VALUE_TRANSFORM: g_clear_pointer (&value->transform.next, value_data_unref); g_clear_pointer (&value->transform.args, g_ptr_array_unref); break; case VALUE_PATH: g_clear_pointer (&value->path.funcs, g_ptr_array_unref); g_clear_pointer (&value->path.argss, g_ptr_array_unref); break; case VALUE_CLOSURE: g_clear_pointer (&value->closure.args, g_ptr_array_unref); if (value->closure.destroy_user_data != NULL) g_clear_pointer (&value->closure.user_data, value->closure.destroy_user_data); break; case VALUE_COERCION: g_clear_pointer (&value->coercion.value, value_data_unref); break; case VALUE_TRACK_TRANSITION: g_clear_pointer (&value->track_transition.src, value_data_unref); g_clear_pointer (&value->track_transition.spring.damping_ratio, value_data_unref); g_clear_pointer (&value->track_transition.spring.mass, value_data_unref); g_clear_pointer (&value->track_transition.spring.stiffness, value_data_unref); break; case VALUE_PROPERTY: g_clear_pointer (&value->property.object, value_data_unref); g_clear_pointer (&value->property.prop_name, g_free); break; case VALUE_CHILD: g_clear_pointer (&value->child.parent_widget, value_data_unref); g_clear_pointer (&value->child.builder_type, g_free); g_clear_pointer (&value->child.css_classes, g_ptr_array_unref); break; case VALUE_ALLOCATION_WIDTH: case VALUE_ALLOCATION_HEIGHT: case VALUE_ALLOCATION_TRANSFORM: g_clear_pointer (&value->allocation.widget, value_data_unref); break; case VALUE_MEASURE_FOR_SIZE: case VALUE_MEASURE_MINIMUM_HEIGHT: case VALUE_MEASURE_MINIMUM_WIDTH: case VALUE_MEASURE_NATURAL_HEIGHT: case VALUE_MEASURE_NATURAL_WIDTH: case VALUE_OBJECT: case VALUE_REFERENCE_OBJECT: case VALUE_TICK_TIME: case VALUE_VARIABLE: case VALUE_WIDGET_HEIGHT: case VALUE_WIDGET_WIDTH: break; default: g_assert_not_reached (); } } static void deinit_transition (gpointer ptr); BGE_DEFINE_DATA ( transition, Transition, { TransitionKind kind; union { struct { ValueData *seconds; ValueData *easing; } ease; struct { ValueData *damping_ratio; ValueData *mass; ValueData *stiffness; } spring; }; }, deinit_transition (self);) static void deinit_transition (gpointer ptr) { TransitionData *transition = ptr; switch (transition->kind) { case TRANSITION_EASE: g_clear_pointer (&transition->ease.seconds, value_data_unref); g_clear_pointer (&transition->ease.easing, value_data_unref); break; case TRANSITION_SPRING: g_clear_pointer (&transition->spring.damping_ratio, value_data_unref); g_clear_pointer (&transition->spring.mass, value_data_unref); g_clear_pointer (&transition->spring.stiffness, value_data_unref); break; default: g_assert_not_reached (); } } BGE_DEFINE_DATA ( snapshot_call, SnapshotCall, { BgeWdgtSnapshotInstrKind kind; SnapshotCallFunc func; GPtrArray *args; GPtrArray *rest; ValueData *child; ForeachData *foreach_context; }, BGE_RELEASE_DATA (args, g_ptr_array_unref); BGE_RELEASE_DATA (rest, g_ptr_array_unref); BGE_RELEASE_DATA (child, value_data_unref); BGE_RELEASE_DATA (foreach_context, foreach_data_unref)) BGE_DEFINE_DATA ( snapshot, Snapshot, { GPtrArray *calls; }, BGE_RELEASE_DATA (calls, g_ptr_array_unref)) BGE_DEFINE_DATA ( state, State, { char *name; GHashTable *setters; GHashTable *transitions; SnapshotData *snapshot; GHashTable *expressions; GPtrArray *snapshot_deps; GHashTable *values_need_tick; gboolean needs_tick; }, BGE_RELEASE_DATA (name, g_free); BGE_RELEASE_DATA (setters, g_hash_table_unref); BGE_RELEASE_DATA (transitions, g_hash_table_unref); BGE_RELEASE_DATA (snapshot, snapshot_data_unref); BGE_RELEASE_DATA (expressions, g_hash_table_unref); BGE_RELEASE_DATA (snapshot_deps, g_ptr_array_unref); BGE_RELEASE_DATA (values_need_tick, g_hash_table_unref);); /* --------------------------- */ /* Spec Builder Implementation */ /* --------------------------- */ struct _BgeWdgtSpec { GObject parent_instance; char *name; GHashTable *values; GPtrArray *values_stack; GPtrArray *foreaches; GPtrArray *foreach_stack; GPtrArray *anon_values; GPtrArray *track_transition_values; GHashTable *states; GPtrArray *children; GPtrArray *nonchildren; StateData *init_state; StateData *default_state; ValueData *reference; gboolean ready; }; G_DEFINE_FINAL_TYPE (BgeWdgtSpec, bge_wdgt_spec, G_TYPE_OBJECT); enum { PROP_0, PROP_NAME, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static gboolean check_can_coerce_type (GType dest, GType src); static void coerce_value (const GValue *in, GType dest_type, GValue *out); static ValueData * wrap_coerce_value (BgeWdgtSpec *self, ValueData *value, GType dest_type); static void ensure_state_snapshot (StateData *state); static void bge_wdgt_spec_dispose (GObject *object) { BgeWdgtSpec *self = BGE_WDGT_SPEC (object); g_clear_pointer (&self->name, g_free); g_clear_pointer (&self->values, g_hash_table_unref); g_clear_pointer (&self->values_stack, g_ptr_array_unref); g_clear_pointer (&self->foreaches, g_ptr_array_unref); g_clear_pointer (&self->foreach_stack, g_ptr_array_unref); g_clear_pointer (&self->anon_values, g_ptr_array_unref); g_clear_pointer (&self->track_transition_values, g_ptr_array_unref); g_clear_pointer (&self->states, g_hash_table_unref); g_clear_pointer (&self->children, g_ptr_array_unref); g_clear_pointer (&self->nonchildren, g_ptr_array_unref); g_clear_pointer (&self->init_state, state_data_unref); g_clear_pointer (&self->default_state, state_data_unref); g_clear_pointer (&self->reference, value_data_unref); G_OBJECT_CLASS (bge_wdgt_spec_parent_class)->dispose (object); } static void bge_wdgt_spec_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeWdgtSpec *self = BGE_WDGT_SPEC (object); switch (prop_id) { case PROP_NAME: g_value_set_string (value, bge_wdgt_spec_get_name (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_spec_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeWdgtSpec *self = BGE_WDGT_SPEC (object); switch (prop_id) { case PROP_NAME: bge_wdgt_spec_set_name (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_spec_class_init (BgeWdgtSpecClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bge_wdgt_spec_set_property; object_class->get_property = bge_wdgt_spec_get_property; object_class->dispose = bge_wdgt_spec_dispose; props[PROP_NAME] = g_param_spec_string ( "name", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BGE_TYPE_EASING); /* Make sure these names are available for the parser */ g_type_ensure (GRAPHENE_TYPE_POINT); g_type_ensure (GRAPHENE_TYPE_POINT3D); g_type_ensure (GRAPHENE_TYPE_SIZE); g_type_ensure (GRAPHENE_TYPE_RECT); g_type_ensure (GRAPHENE_TYPE_VEC2); g_type_ensure (GRAPHENE_TYPE_VEC3); g_type_ensure (GRAPHENE_TYPE_VEC4); g_type_ensure (GRAPHENE_TYPE_QUAD); g_type_ensure (GRAPHENE_TYPE_QUATERNION); g_type_ensure (GRAPHENE_TYPE_MATRIX); g_type_ensure (GRAPHENE_TYPE_PLANE); g_type_ensure (GRAPHENE_TYPE_FRUSTUM); g_type_ensure (GRAPHENE_TYPE_SPHERE); g_type_ensure (GRAPHENE_TYPE_BOX); g_type_ensure (GRAPHENE_TYPE_TRIANGLE); g_type_ensure (GRAPHENE_TYPE_EULER); g_type_ensure (GRAPHENE_TYPE_RAY); g_type_ensure (GSK_TYPE_PATH); g_type_ensure (GSK_TYPE_PATH_POINT); g_type_ensure (GSK_TYPE_PATH_MEASURE); g_type_ensure (GSK_TYPE_TRANSFORM); g_type_ensure (GSK_TYPE_FILL_RULE); g_type_ensure (GSK_TYPE_LINE_CAP); g_type_ensure (GSK_TYPE_LINE_JOIN); /* Ensure GTK names are available for the parser */ g_type_ensure (gtk_at_context_get_type ()); g_type_ensure (gtk_about_dialog_get_type ()); g_type_ensure (gtk_accessible_get_type ()); g_type_ensure (gtk_accessible_announcement_priority_get_type ()); g_type_ensure (gtk_accessible_autocomplete_get_type ()); g_type_ensure (gtk_accessible_invalid_state_get_type ()); g_type_ensure (gtk_accessible_list_get_type ()); g_type_ensure (gtk_accessible_platform_state_get_type ()); g_type_ensure (gtk_accessible_property_get_type ()); g_type_ensure (gtk_accessible_range_get_type ()); g_type_ensure (gtk_accessible_relation_get_type ()); g_type_ensure (gtk_accessible_role_get_type ()); g_type_ensure (gtk_accessible_sort_get_type ()); g_type_ensure (gtk_accessible_state_get_type ()); g_type_ensure (gtk_accessible_text_get_type ()); g_type_ensure (gtk_accessible_text_content_change_get_type ()); g_type_ensure (gtk_accessible_text_granularity_get_type ()); g_type_ensure (gtk_accessible_tristate_get_type ()); g_type_ensure (gtk_action_bar_get_type ()); g_type_ensure (gtk_actionable_get_type ()); g_type_ensure (gtk_activate_action_get_type ()); g_type_ensure (gtk_adjustment_get_type ()); g_type_ensure (gtk_alert_dialog_get_type ()); g_type_ensure (gtk_align_get_type ()); g_type_ensure (gtk_alternative_trigger_get_type ()); g_type_ensure (gtk_any_filter_get_type ()); g_type_ensure (gtk_app_chooser_get_type ()); g_type_ensure (gtk_app_chooser_button_get_type ()); g_type_ensure (gtk_app_chooser_dialog_get_type ()); g_type_ensure (gtk_app_chooser_widget_get_type ()); g_type_ensure (gtk_application_get_type ()); g_type_ensure (gtk_application_inhibit_flags_get_type ()); g_type_ensure (gtk_application_window_get_type ()); g_type_ensure (gtk_arrow_type_get_type ()); g_type_ensure (gtk_aspect_frame_get_type ()); g_type_ensure (gtk_assistant_get_type ()); g_type_ensure (gtk_assistant_page_get_type ()); g_type_ensure (gtk_assistant_page_type_get_type ()); g_type_ensure (gtk_baseline_position_get_type ()); g_type_ensure (gtk_bin_layout_get_type ()); g_type_ensure (gtk_bitset_get_type ()); g_type_ensure (gtk_bitset_iter_get_type ()); g_type_ensure (gtk_bookmark_list_get_type ()); g_type_ensure (gtk_bool_filter_get_type ()); g_type_ensure (gtk_border_get_type ()); g_type_ensure (gtk_border_style_get_type ()); g_type_ensure (gtk_box_get_type ()); g_type_ensure (gtk_box_layout_get_type ()); g_type_ensure (gtk_buildable_get_type ()); g_type_ensure (gtk_builder_get_type ()); g_type_ensure (gtk_builder_cscope_get_type ()); g_type_ensure (gtk_builder_closure_flags_get_type ()); g_type_ensure (gtk_builder_error_get_type ()); g_type_ensure (gtk_builder_list_item_factory_get_type ()); g_type_ensure (gtk_builder_scope_get_type ()); g_type_ensure (gtk_button_get_type ()); g_type_ensure (gtk_buttons_type_get_type ()); g_type_ensure (gtk_cclosure_expression_get_type ()); g_type_ensure (gtk_calendar_get_type ()); g_type_ensure (gtk_callback_action_get_type ()); g_type_ensure (gtk_cell_area_get_type ()); g_type_ensure (gtk_cell_area_box_get_type ()); g_type_ensure (gtk_cell_area_context_get_type ()); g_type_ensure (gtk_cell_editable_get_type ()); g_type_ensure (gtk_cell_layout_get_type ()); g_type_ensure (gtk_cell_renderer_get_type ()); g_type_ensure (gtk_cell_renderer_accel_get_type ()); g_type_ensure (gtk_cell_renderer_accel_mode_get_type ()); g_type_ensure (gtk_cell_renderer_combo_get_type ()); g_type_ensure (gtk_cell_renderer_mode_get_type ()); g_type_ensure (gtk_cell_renderer_pixbuf_get_type ()); g_type_ensure (gtk_cell_renderer_progress_get_type ()); g_type_ensure (gtk_cell_renderer_spin_get_type ()); g_type_ensure (gtk_cell_renderer_spinner_get_type ()); g_type_ensure (gtk_cell_renderer_state_get_type ()); g_type_ensure (gtk_cell_renderer_text_get_type ()); g_type_ensure (gtk_cell_renderer_toggle_get_type ()); g_type_ensure (gtk_cell_view_get_type ()); g_type_ensure (gtk_center_box_get_type ()); g_type_ensure (gtk_center_layout_get_type ()); g_type_ensure (gtk_check_button_get_type ()); g_type_ensure (gtk_closure_expression_get_type ()); g_type_ensure (gtk_collation_get_type ()); g_type_ensure (gtk_color_button_get_type ()); g_type_ensure (gtk_color_chooser_get_type ()); g_type_ensure (gtk_color_chooser_dialog_get_type ()); g_type_ensure (gtk_color_chooser_widget_get_type ()); g_type_ensure (gtk_color_dialog_get_type ()); g_type_ensure (gtk_color_dialog_button_get_type ()); g_type_ensure (gtk_column_view_get_type ()); g_type_ensure (gtk_column_view_cell_get_type ()); g_type_ensure (gtk_column_view_column_get_type ()); g_type_ensure (gtk_column_view_row_get_type ()); g_type_ensure (gtk_column_view_sorter_get_type ()); g_type_ensure (gtk_combo_box_get_type ()); g_type_ensure (gtk_combo_box_text_get_type ()); g_type_ensure (gtk_constant_expression_get_type ()); g_type_ensure (gtk_constraint_get_type ()); g_type_ensure (gtk_constraint_attribute_get_type ()); g_type_ensure (gtk_constraint_guide_get_type ()); g_type_ensure (gtk_constraint_layout_get_type ()); g_type_ensure (gtk_constraint_layout_child_get_type ()); g_type_ensure (gtk_constraint_relation_get_type ()); g_type_ensure (gtk_constraint_strength_get_type ()); g_type_ensure (gtk_constraint_target_get_type ()); g_type_ensure (gtk_constraint_vfl_parser_error_get_type ()); g_type_ensure (gtk_content_fit_get_type ()); g_type_ensure (gtk_corner_type_get_type ()); g_type_ensure (gtk_css_provider_get_type ()); g_type_ensure (gtk_css_section_get_type ()); g_type_ensure (gtk_custom_filter_get_type ()); g_type_ensure (gtk_custom_layout_get_type ()); g_type_ensure (gtk_custom_sorter_get_type ()); g_type_ensure (gtk_debug_flags_get_type ()); g_type_ensure (gtk_delete_type_get_type ()); g_type_ensure (gtk_dialog_get_type ()); g_type_ensure (gtk_dialog_error_get_type ()); g_type_ensure (gtk_dialog_flags_get_type ()); g_type_ensure (gtk_direction_type_get_type ()); g_type_ensure (gtk_directory_list_get_type ()); g_type_ensure (gtk_drag_icon_get_type ()); g_type_ensure (gtk_drag_source_get_type ()); g_type_ensure (gtk_drawing_area_get_type ()); g_type_ensure (gtk_drop_controller_motion_get_type ()); g_type_ensure (gtk_drop_down_get_type ()); g_type_ensure (gtk_drop_target_get_type ()); g_type_ensure (gtk_drop_target_async_get_type ()); g_type_ensure (gtk_editable_get_type ()); g_type_ensure (gtk_editable_label_get_type ()); g_type_ensure (gtk_editable_properties_get_type ()); g_type_ensure (gtk_emoji_chooser_get_type ()); g_type_ensure (gtk_entry_get_type ()); g_type_ensure (gtk_entry_buffer_get_type ()); g_type_ensure (gtk_entry_completion_get_type ()); g_type_ensure (gtk_entry_icon_position_get_type ()); g_type_ensure (gtk_event_controller_get_type ()); g_type_ensure (gtk_event_controller_focus_get_type ()); g_type_ensure (gtk_event_controller_key_get_type ()); g_type_ensure (gtk_event_controller_legacy_get_type ()); g_type_ensure (gtk_event_controller_motion_get_type ()); g_type_ensure (gtk_event_controller_scroll_get_type ()); g_type_ensure (gtk_event_controller_scroll_flags_get_type ()); g_type_ensure (gtk_event_sequence_state_get_type ()); g_type_ensure (gtk_every_filter_get_type ()); g_type_ensure (gtk_expander_get_type ()); g_type_ensure (gtk_expression_get_type ()); g_type_ensure (gtk_expression_watch_get_type ()); g_type_ensure (gtk_file_chooser_get_type ()); g_type_ensure (gtk_file_chooser_action_get_type ()); g_type_ensure (gtk_file_chooser_dialog_get_type ()); g_type_ensure (gtk_file_chooser_error_get_type ()); g_type_ensure (gtk_file_chooser_native_get_type ()); g_type_ensure (gtk_file_chooser_widget_get_type ()); g_type_ensure (gtk_file_dialog_get_type ()); g_type_ensure (gtk_file_filter_get_type ()); g_type_ensure (gtk_file_launcher_get_type ()); g_type_ensure (gtk_filter_get_type ()); g_type_ensure (gtk_filter_change_get_type ()); g_type_ensure (gtk_filter_list_model_get_type ()); g_type_ensure (gtk_filter_match_get_type ()); g_type_ensure (gtk_fixed_get_type ()); g_type_ensure (gtk_fixed_layout_get_type ()); g_type_ensure (gtk_fixed_layout_child_get_type ()); g_type_ensure (gtk_flatten_list_model_get_type ()); g_type_ensure (gtk_flow_box_get_type ()); g_type_ensure (gtk_flow_box_child_get_type ()); g_type_ensure (gtk_font_button_get_type ()); g_type_ensure (gtk_font_chooser_get_type ()); g_type_ensure (gtk_font_chooser_dialog_get_type ()); g_type_ensure (gtk_font_chooser_level_get_type ()); g_type_ensure (gtk_font_chooser_widget_get_type ()); g_type_ensure (gtk_font_dialog_get_type ()); g_type_ensure (gtk_font_dialog_button_get_type ()); g_type_ensure (gtk_font_level_get_type ()); g_type_ensure (gtk_font_rendering_get_type ()); g_type_ensure (gtk_frame_get_type ()); g_type_ensure (gtk_gl_area_get_type ()); g_type_ensure (gtk_gesture_get_type ()); g_type_ensure (gtk_gesture_click_get_type ()); g_type_ensure (gtk_gesture_drag_get_type ()); g_type_ensure (gtk_gesture_long_press_get_type ()); g_type_ensure (gtk_gesture_pan_get_type ()); g_type_ensure (gtk_gesture_rotate_get_type ()); g_type_ensure (gtk_gesture_single_get_type ()); g_type_ensure (gtk_gesture_stylus_get_type ()); g_type_ensure (gtk_gesture_swipe_get_type ()); g_type_ensure (gtk_gesture_zoom_get_type ()); g_type_ensure (gtk_graphics_offload_get_type ()); g_type_ensure (gtk_graphics_offload_enabled_get_type ()); g_type_ensure (gtk_grid_get_type ()); g_type_ensure (gtk_grid_layout_get_type ()); g_type_ensure (gtk_grid_layout_child_get_type ()); g_type_ensure (gtk_grid_view_get_type ()); g_type_ensure (gtk_header_bar_get_type ()); g_type_ensure (gtk_im_context_get_type ()); g_type_ensure (gtk_im_context_simple_get_type ()); g_type_ensure (gtk_im_multicontext_get_type ()); g_type_ensure (gtk_icon_lookup_flags_get_type ()); g_type_ensure (gtk_icon_paintable_get_type ()); g_type_ensure (gtk_icon_size_get_type ()); g_type_ensure (gtk_icon_theme_get_type ()); g_type_ensure (gtk_icon_theme_error_get_type ()); g_type_ensure (gtk_icon_view_get_type ()); g_type_ensure (gtk_icon_view_drop_position_get_type ()); g_type_ensure (gtk_image_get_type ()); g_type_ensure (gtk_image_type_get_type ()); g_type_ensure (gtk_info_bar_get_type ()); g_type_ensure (gtk_input_hints_get_type ()); g_type_ensure (gtk_input_purpose_get_type ()); g_type_ensure (gtk_inscription_get_type ()); g_type_ensure (gtk_inscription_overflow_get_type ()); g_type_ensure (gtk_interface_color_scheme_get_type ()); g_type_ensure (gtk_interface_contrast_get_type ()); g_type_ensure (gtk_justification_get_type ()); g_type_ensure (gtk_keyval_trigger_get_type ()); g_type_ensure (gtk_label_get_type ()); g_type_ensure (gtk_layout_child_get_type ()); g_type_ensure (gtk_layout_manager_get_type ()); g_type_ensure (gtk_level_bar_get_type ()); g_type_ensure (gtk_level_bar_mode_get_type ()); g_type_ensure (gtk_license_get_type ()); g_type_ensure (gtk_link_button_get_type ()); g_type_ensure (gtk_list_base_get_type ()); g_type_ensure (gtk_list_box_get_type ()); g_type_ensure (gtk_list_box_row_get_type ()); g_type_ensure (gtk_list_header_get_type ()); g_type_ensure (gtk_list_item_get_type ()); g_type_ensure (gtk_list_item_factory_get_type ()); g_type_ensure (gtk_list_scroll_flags_get_type ()); g_type_ensure (gtk_list_store_get_type ()); g_type_ensure (gtk_list_tab_behavior_get_type ()); g_type_ensure (gtk_list_view_get_type ()); g_type_ensure (gtk_lock_button_get_type ()); g_type_ensure (gtk_map_list_model_get_type ()); g_type_ensure (gtk_media_controls_get_type ()); g_type_ensure (gtk_media_file_get_type ()); g_type_ensure (gtk_media_stream_get_type ()); g_type_ensure (gtk_menu_button_get_type ()); g_type_ensure (gtk_message_dialog_get_type ()); g_type_ensure (gtk_message_type_get_type ()); g_type_ensure (gtk_mnemonic_action_get_type ()); g_type_ensure (gtk_mnemonic_trigger_get_type ()); g_type_ensure (gtk_mount_operation_get_type ()); g_type_ensure (gtk_movement_step_get_type ()); g_type_ensure (gtk_multi_filter_get_type ()); g_type_ensure (gtk_multi_selection_get_type ()); g_type_ensure (gtk_multi_sorter_get_type ()); g_type_ensure (gtk_named_action_get_type ()); g_type_ensure (gtk_native_get_type ()); g_type_ensure (gtk_native_dialog_get_type ()); g_type_ensure (gtk_natural_wrap_mode_get_type ()); g_type_ensure (gtk_never_trigger_get_type ()); g_type_ensure (gtk_no_selection_get_type ()); g_type_ensure (gtk_notebook_get_type ()); g_type_ensure (gtk_notebook_page_get_type ()); g_type_ensure (gtk_notebook_tab_get_type ()); g_type_ensure (gtk_nothing_action_get_type ()); g_type_ensure (gtk_number_up_layout_get_type ()); g_type_ensure (gtk_numeric_sorter_get_type ()); g_type_ensure (gtk_object_expression_get_type ()); g_type_ensure (gtk_ordering_get_type ()); g_type_ensure (gtk_orientable_get_type ()); g_type_ensure (gtk_orientation_get_type ()); g_type_ensure (gtk_overflow_get_type ()); g_type_ensure (gtk_overlay_get_type ()); g_type_ensure (gtk_overlay_layout_get_type ()); g_type_ensure (gtk_overlay_layout_child_get_type ()); g_type_ensure (gtk_pack_type_get_type ()); g_type_ensure (gtk_pad_action_type_get_type ()); g_type_ensure (gtk_pad_controller_get_type ()); g_type_ensure (gtk_page_orientation_get_type ()); g_type_ensure (gtk_page_set_get_type ()); g_type_ensure (gtk_page_setup_get_type ()); g_type_ensure (gtk_pan_direction_get_type ()); g_type_ensure (gtk_paned_get_type ()); g_type_ensure (gtk_paper_size_get_type ()); g_type_ensure (gtk_param_expression_get_type ()); g_type_ensure (gtk_password_entry_get_type ()); g_type_ensure (gtk_password_entry_buffer_get_type ()); g_type_ensure (gtk_pick_flags_get_type ()); g_type_ensure (gtk_picture_get_type ()); g_type_ensure (gtk_policy_type_get_type ()); g_type_ensure (gtk_popover_get_type ()); g_type_ensure (gtk_popover_menu_get_type ()); g_type_ensure (gtk_popover_menu_bar_get_type ()); g_type_ensure (gtk_popover_menu_flags_get_type ()); g_type_ensure (gtk_position_type_get_type ()); g_type_ensure (gtk_print_context_get_type ()); g_type_ensure (gtk_print_dialog_get_type ()); g_type_ensure (gtk_print_duplex_get_type ()); g_type_ensure (gtk_print_error_get_type ()); g_type_ensure (gtk_print_operation_get_type ()); g_type_ensure (gtk_print_operation_action_get_type ()); g_type_ensure (gtk_print_operation_preview_get_type ()); g_type_ensure (gtk_print_operation_result_get_type ()); g_type_ensure (gtk_print_pages_get_type ()); g_type_ensure (gtk_print_quality_get_type ()); g_type_ensure (gtk_print_settings_get_type ()); g_type_ensure (gtk_print_setup_get_type ()); g_type_ensure (gtk_print_status_get_type ()); g_type_ensure (gtk_progress_bar_get_type ()); g_type_ensure (gtk_propagation_limit_get_type ()); g_type_ensure (gtk_propagation_phase_get_type ()); g_type_ensure (gtk_property_expression_get_type ()); g_type_ensure (gtk_range_get_type ()); g_type_ensure (gtk_recent_info_get_type ()); g_type_ensure (gtk_recent_manager_get_type ()); g_type_ensure (gtk_recent_manager_error_get_type ()); g_type_ensure (gtk_requisition_get_type ()); g_type_ensure (gtk_response_type_get_type ()); g_type_ensure (gtk_revealer_get_type ()); g_type_ensure (gtk_revealer_transition_type_get_type ()); g_type_ensure (gtk_root_get_type ()); g_type_ensure (gtk_scale_get_type ()); g_type_ensure (gtk_scale_button_get_type ()); g_type_ensure (gtk_scroll_info_get_type ()); g_type_ensure (gtk_scroll_step_get_type ()); g_type_ensure (gtk_scroll_type_get_type ()); g_type_ensure (gtk_scrollable_get_type ()); g_type_ensure (gtk_scrollable_policy_get_type ()); g_type_ensure (gtk_scrollbar_get_type ()); g_type_ensure (gtk_scrolled_window_get_type ()); g_type_ensure (gtk_search_bar_get_type ()); g_type_ensure (gtk_search_entry_get_type ()); g_type_ensure (gtk_section_model_get_type ()); g_type_ensure (gtk_selection_filter_model_get_type ()); g_type_ensure (gtk_selection_mode_get_type ()); g_type_ensure (gtk_selection_model_get_type ()); g_type_ensure (gtk_sensitivity_type_get_type ()); g_type_ensure (gtk_separator_get_type ()); g_type_ensure (gtk_settings_get_type ()); g_type_ensure (gtk_shortcut_get_type ()); g_type_ensure (gtk_shortcut_action_get_type ()); g_type_ensure (gtk_shortcut_action_flags_get_type ()); g_type_ensure (gtk_shortcut_controller_get_type ()); g_type_ensure (gtk_shortcut_label_get_type ()); g_type_ensure (gtk_shortcut_manager_get_type ()); g_type_ensure (gtk_shortcut_scope_get_type ()); g_type_ensure (gtk_shortcut_trigger_get_type ()); g_type_ensure (gtk_shortcut_type_get_type ()); g_type_ensure (gtk_shortcuts_group_get_type ()); g_type_ensure (gtk_shortcuts_section_get_type ()); g_type_ensure (gtk_shortcuts_shortcut_get_type ()); g_type_ensure (gtk_shortcuts_window_get_type ()); g_type_ensure (gtk_signal_action_get_type ()); g_type_ensure (gtk_signal_list_item_factory_get_type ()); g_type_ensure (gtk_single_selection_get_type ()); g_type_ensure (gtk_size_group_get_type ()); g_type_ensure (gtk_size_group_mode_get_type ()); g_type_ensure (gtk_size_request_mode_get_type ()); g_type_ensure (gtk_slice_list_model_get_type ()); g_type_ensure (gtk_snapshot_get_type ()); g_type_ensure (gtk_sort_list_model_get_type ()); g_type_ensure (gtk_sort_type_get_type ()); g_type_ensure (gtk_sorter_get_type ()); g_type_ensure (gtk_sorter_change_get_type ()); g_type_ensure (gtk_sorter_order_get_type ()); g_type_ensure (gtk_spin_button_get_type ()); g_type_ensure (gtk_spin_button_update_policy_get_type ()); g_type_ensure (gtk_spin_type_get_type ()); g_type_ensure (gtk_spinner_get_type ()); g_type_ensure (gtk_stack_get_type ()); g_type_ensure (gtk_stack_page_get_type ()); g_type_ensure (gtk_stack_sidebar_get_type ()); g_type_ensure (gtk_stack_switcher_get_type ()); g_type_ensure (gtk_stack_transition_type_get_type ()); g_type_ensure (gtk_state_flags_get_type ()); g_type_ensure (gtk_statusbar_get_type ()); g_type_ensure (gtk_string_filter_get_type ()); g_type_ensure (gtk_string_filter_match_mode_get_type ()); g_type_ensure (gtk_string_list_get_type ()); g_type_ensure (gtk_string_object_get_type ()); g_type_ensure (gtk_string_sorter_get_type ()); g_type_ensure (gtk_style_context_get_type ()); g_type_ensure (gtk_style_context_print_flags_get_type ()); g_type_ensure (gtk_style_provider_get_type ()); g_type_ensure (gtk_switch_get_type ()); g_type_ensure (gtk_symbolic_color_get_type ()); g_type_ensure (gtk_symbolic_paintable_get_type ()); g_type_ensure (gtk_system_setting_get_type ()); g_type_ensure (gtk_text_get_type ()); g_type_ensure (gtk_text_buffer_get_type ()); g_type_ensure (gtk_text_buffer_notify_flags_get_type ()); g_type_ensure (gtk_text_child_anchor_get_type ()); g_type_ensure (gtk_text_direction_get_type ()); g_type_ensure (gtk_text_extend_selection_get_type ()); g_type_ensure (gtk_text_iter_get_type ()); g_type_ensure (gtk_text_mark_get_type ()); g_type_ensure (gtk_text_search_flags_get_type ()); g_type_ensure (gtk_text_tag_get_type ()); g_type_ensure (gtk_text_tag_table_get_type ()); g_type_ensure (gtk_text_view_get_type ()); g_type_ensure (gtk_text_view_layer_get_type ()); g_type_ensure (gtk_text_window_type_get_type ()); g_type_ensure (gtk_toggle_button_get_type ()); g_type_ensure (gtk_tooltip_get_type ()); g_type_ensure (gtk_tree_expander_get_type ()); g_type_ensure (gtk_tree_iter_get_type ()); g_type_ensure (gtk_tree_list_model_get_type ()); g_type_ensure (gtk_tree_list_row_get_type ()); g_type_ensure (gtk_tree_list_row_sorter_get_type ()); g_type_ensure (gtk_tree_model_get_type ()); g_type_ensure (gtk_tree_model_filter_get_type ()); g_type_ensure (gtk_tree_model_flags_get_type ()); g_type_ensure (gtk_tree_model_sort_get_type ()); g_type_ensure (gtk_tree_path_get_type ()); g_type_ensure (gtk_tree_row_reference_get_type ()); g_type_ensure (gtk_tree_selection_get_type ()); g_type_ensure (gtk_tree_sortable_get_type ()); g_type_ensure (gtk_tree_store_get_type ()); g_type_ensure (gtk_tree_view_get_type ()); g_type_ensure (gtk_tree_view_column_get_type ()); g_type_ensure (gtk_tree_view_column_sizing_get_type ()); g_type_ensure (gtk_tree_view_drop_position_get_type ()); g_type_ensure (gtk_tree_view_grid_lines_get_type ()); g_type_ensure (gtk_unit_get_type ()); g_type_ensure (gtk_uri_launcher_get_type ()); g_type_ensure (gtk_video_get_type ()); g_type_ensure (gtk_viewport_get_type ()); g_type_ensure (gtk_volume_button_get_type ()); g_type_ensure (gtk_widget_get_type ()); g_type_ensure (gtk_widget_paintable_get_type ()); g_type_ensure (gtk_window_get_type ()); g_type_ensure (gtk_window_controls_get_type ()); g_type_ensure (gtk_window_gravity_get_type ()); g_type_ensure (gtk_window_group_get_type ()); g_type_ensure (gtk_window_handle_get_type ()); g_type_ensure (gtk_wrap_mode_get_type ()); } static void bge_wdgt_spec_init (BgeWdgtSpec *self) { self->values = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, value_data_unref); self->values_stack = g_ptr_array_new_with_free_func ((GDestroyNotify) g_hash_table_unref); self->foreaches = g_ptr_array_new_with_free_func (foreach_data_unref); self->foreach_stack = g_ptr_array_new_with_free_func (foreach_data_unref); self->anon_values = g_ptr_array_new_with_free_func (value_data_unref); self->track_transition_values = g_ptr_array_new_with_free_func (value_data_unref); self->states = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, state_data_unref); self->children = g_ptr_array_new_with_free_func (value_data_unref); self->nonchildren = g_ptr_array_new_with_free_func (value_data_unref); self->init_state = state_data_new (); self->init_state->name = g_strdup ("init"); self->init_state->setters = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, value_data_unref); self->init_state->transitions = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, transition_data_unref); self->init_state->expressions = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, (GDestroyNotify) gtk_expression_unref); self->init_state->snapshot_deps = g_ptr_array_new_with_free_func ( (GDestroyNotify) gtk_expression_unref); self->init_state->values_need_tick = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, NULL); ensure_state_snapshot (self->init_state); g_hash_table_replace (self->states, g_strdup ("init"), state_data_ref (self->init_state)); self->ready = FALSE; } BgeWdgtSpec * bge_wdgt_spec_new (void) { return g_object_new (BGE_TYPE_WDGT_SPEC, NULL); } BgeWdgtSpec * bge_wdgt_spec_new_for_string (const char *string, GError **error) { g_return_val_if_fail (string != NULL, NULL); return bge_wdgt_parse_string (string, error); } BgeWdgtSpec * bge_wdgt_spec_new_for_resource (const char *resource, GError **error) { g_autoptr (GBytes) bytes = NULL; gsize size = 0; gconstpointer data = NULL; g_return_val_if_fail (resource != NULL, NULL); bytes = g_resources_lookup_data (resource, G_RESOURCE_LOOKUP_FLAGS_NONE, error); if (bytes == NULL) return NULL; data = g_bytes_get_data (bytes, &size); return bge_wdgt_parse_string ((const char *) data, error); } const char * bge_wdgt_spec_get_name (BgeWdgtSpec *self) { g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), NULL); return self->name; } void bge_wdgt_spec_set_name (BgeWdgtSpec *self, const char *name) { g_return_if_fail (BGE_IS_WDGT_SPEC (self)); if (name == self->name || (name != NULL && self->name != NULL && g_strcmp0 (name, self->name) == 0)) return; g_clear_pointer (&self->name, g_free); if (name != NULL) self->name = g_strdup (name); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]); } void bge_wdgt_spec_set_name_take (BgeWdgtSpec *self, char *name) { g_return_if_fail (BGE_IS_WDGT_SPEC (self)); if (name != NULL && self->name != NULL && g_strcmp0 (name, self->name) == 0) { g_free (name); return; } g_clear_pointer (&self->name, g_free); if (name != NULL) self->name = name; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]); } gboolean bge_wdgt_spec_add_constant_source_value (BgeWdgtSpec *self, const char *name, const GValue *constant, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (constant != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = constant->g_type; value->kind = VALUE_CONSTANT; g_value_copy (constant, g_value_init (&value->constant.value, constant->g_type)); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_component_source_value (BgeWdgtSpec *self, const char *name, GType type, const char *const *components, guint n_components, GError **error) { GType expected_types[ARGBUF_SIZE] = { 0 }; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (components != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } if (type == GRAPHENE_TYPE_POINT) { if (n_components != 2) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "composed point value needs 2 arguments"); return FALSE; } expected_types[0] = G_TYPE_DOUBLE; expected_types[1] = G_TYPE_DOUBLE; } else if (type == GRAPHENE_TYPE_POINT3D) { if (n_components != 3) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "composed 3d point value needs 3 arguments"); return FALSE; } expected_types[0] = G_TYPE_DOUBLE; expected_types[1] = G_TYPE_DOUBLE; expected_types[2] = G_TYPE_DOUBLE; } else if (type == GRAPHENE_TYPE_SIZE) { if (n_components != 2) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "composed 2d size value needs 2 arguments"); return FALSE; } expected_types[0] = G_TYPE_DOUBLE; expected_types[1] = G_TYPE_DOUBLE; } else if (type == GRAPHENE_TYPE_RECT) { if (n_components != 4) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "composed rectangle value needs 4 arguments"); return FALSE; } expected_types[0] = G_TYPE_DOUBLE; expected_types[1] = G_TYPE_DOUBLE; expected_types[2] = G_TYPE_DOUBLE; expected_types[3] = G_TYPE_DOUBLE; } else if (type == GSK_TYPE_STROKE) { if (n_components != 4) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "composed rectangle value needs 4 arguments"); return FALSE; } expected_types[0] = G_TYPE_DOUBLE; /* line width */ expected_types[1] = GSK_TYPE_LINE_CAP; expected_types[2] = GSK_TYPE_LINE_JOIN; expected_types[3] = G_TYPE_DOUBLE; /* miter limit */ } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' is not elligible for a component value", g_type_name (type)); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = type; value->kind = VALUE_COMPONENT; value->component.params = g_ptr_array_new_with_free_func (value_data_unref); for (guint i = 0; i < n_components; i++) { ValueData *value_data = NULL; value_data = g_hash_table_lookup (self->values, components[i]); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", components[i]); return FALSE; } if (!g_type_is_a (value_data->type, expected_types[i])) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "component %u for type %s " "must be of type %s, got %s", i, g_type_name (type), g_type_name (expected_types[i]), g_type_name (value_data->type)); return FALSE; } g_ptr_array_add (value->component.params, value_data_ref (value_data)); } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_transform_source_value (BgeWdgtSpec *self, const char *name, const char *next, const char *instruction, const char *const *args, guint n_args, GError **error) { gboolean result = FALSE; ValueData *next_data = NULL; g_autoptr (ValueData) value = NULL; TransformInstr match = { 0 }; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (next != NULL, FALSE); g_return_val_if_fail (instruction != NULL, FALSE); g_return_val_if_fail (n_args == 0 || args != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } next_data = g_hash_table_lookup (self->values, next); if (next_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", next); return FALSE; } if (next_data->type != GSK_TYPE_TRANSFORM) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' must be of type %s to " "build a transform, got %s", next, g_type_name (GSK_TYPE_TRANSFORM), g_type_name (next_data->type)); return FALSE; } result = lookup_transform_instr (instruction, &match); if (!result) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" is not a valid transform builder instruction", instruction); return FALSE; } if (n_args != match.n_args) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transform builder function %s requires %u " "arguments, got %u", match.name, match.n_args, n_args); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = GSK_TYPE_TRANSFORM; value->kind = VALUE_TRANSFORM; value->transform.func = match.call; value->transform.next = value_data_ref (next_data); value->transform.args = g_ptr_array_new_with_free_func (value_data_unref); for (guint i = 0; i < n_args; i++) { ValueData *value_data = NULL; value_data = g_hash_table_lookup (self->values, args[i]); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", args[i]); return FALSE; } if (!g_type_is_a (value_data->type, match.args[i])) { if (check_can_coerce_type (match.args[i], value_data->type)) g_ptr_array_add (value->transform.args, wrap_coerce_value (self, value_data, match.args[i])); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "argument %u for snapshot instruction %s " "must be of type %s, got %s", i, match.name, g_type_name (match.args[i]), g_type_name (value_data->type)); return FALSE; } } else g_ptr_array_add (value->transform.args, value_data_ref (value_data)); } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_path_source_value (BgeWdgtSpec *self, const char *name, const char *const *instructions, const char *const *const *argss, const guint *n_argss, guint n_args, GError **error) { gboolean result = FALSE; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (instructions != NULL, FALSE); g_return_val_if_fail (argss != NULL, FALSE); g_return_val_if_fail (n_argss != NULL, FALSE); g_return_val_if_fail (n_args > 0, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = GSK_TYPE_PATH; value->kind = VALUE_PATH; value->path.funcs = g_ptr_array_new (); value->path.argss = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_ptr_array_unref); for (guint i = 0; i < n_args; i++) { PathBuilderInstr match = { 0 }; g_autoptr (GPtrArray) args = NULL; result = lookup_path_builder_instr (instructions[i], &match); if (!result) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" is not a valid path builder instruction", instructions[i]); return FALSE; } if (n_argss[i] != match.n_args) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "path builder instructions %s requires %u " "arguments, got %u", match.name, match.n_args, n_argss[i]); return FALSE; } args = g_ptr_array_new_with_free_func (value_data_unref); for (guint j = 0; j < n_argss[i]; j++) { ValueData *value_data = NULL; value_data = g_hash_table_lookup (self->values, argss[i][j]); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", argss[i][j]); return FALSE; } if (!g_type_is_a (value_data->type, match.args[j])) { if (check_can_coerce_type (match.args[j], value_data->type)) g_ptr_array_add (args, wrap_coerce_value (self, value_data, match.args[j])); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "argument %u for path builder instruction %s " "must be of type %s, got %s", j, match.name, g_type_name (match.args[j]), g_type_name (value_data->type)); return FALSE; } } else g_ptr_array_add (args, value_data_ref (value_data)); } g_ptr_array_add (value->path.funcs, match.call); g_ptr_array_add (value->path.argss, g_steal_pointer (&args)); } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_instance_source_value (BgeWdgtSpec *self, const char *name, GType type, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } if (!g_type_is_a (type, G_TYPE_OBJECT)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' is not an object type", g_type_name (type)); return FALSE; } if (!G_TYPE_IS_INSTANTIATABLE (type) || G_TYPE_IS_ABSTRACT (type)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' is not instantiable", g_type_name (type)); return FALSE; } value = value_data_new (); value->kind = VALUE_OBJECT; value->type = type; value->name = g_strdup (name); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); g_ptr_array_add (self->nonchildren, value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_child_source_value (BgeWdgtSpec *self, const char *name, GType type, const char *parent, const char *builder_type, const char *const *css_classes, guint n_css_classes, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } if (!g_type_is_a (type, GTK_TYPE_WIDGET)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' does not derive from GtkWidget", g_type_name (type)); return FALSE; } if (!G_TYPE_IS_INSTANTIATABLE (type) || G_TYPE_IS_ABSTRACT (type)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' is not instantiable", g_type_name (type)); return FALSE; } value = value_data_new (); value->kind = VALUE_CHILD; value->type = type; value->name = g_strdup (name); value->child.builder_type = builder_type != NULL ? g_strdup (builder_type) : NULL; if (n_css_classes > 0 && css_classes != NULL) { value->child.css_classes = g_ptr_array_new_with_free_func (g_free); g_ptr_array_set_size (value->child.css_classes, n_css_classes); for (guint i = 0; i < n_css_classes; i++) { g_ptr_array_index (value->child.css_classes, i) = g_strdup (css_classes[i]); } } if (parent != NULL) { ValueData *parent_data = NULL; parent_data = g_hash_table_lookup (self->values, parent); if (parent_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", parent); return FALSE; } if (!g_type_is_a (parent_data->type, GTK_TYPE_BUILDABLE)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "parent widget '%s' is not of type %s", g_type_name (GTK_TYPE_BUILDABLE), parent); return FALSE; } value->child.parent_widget = value_data_ref (parent_data); } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); g_ptr_array_add (self->children, value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_cclosure_source_value (BgeWdgtSpec *self, const char *name, GType type, GClosureMarshal marshal, GCallback func, const char *const *args, const GType *arg_types, guint n_args, gpointer user_data, GDestroyNotify destroy_user_data, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (func != NULL, FALSE); g_return_val_if_fail (args != NULL, FALSE); g_return_val_if_fail (n_args > 0, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); if (user_data != NULL && destroy_user_data != NULL) destroy_user_data (user_data); return FALSE; } if (!G_TYPE_IS_VALUE (type)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "invalid type '%s'", g_type_name (type)); if (user_data != NULL && destroy_user_data != NULL) destroy_user_data (user_data); return FALSE; } value = value_data_new (); value->kind = VALUE_CLOSURE; value->name = g_strdup (name); value->type = type; value->closure.marshal = marshal; value->closure.func = func; value->closure.args = g_ptr_array_new_with_free_func (value_data_unref); value->closure.user_data = user_data; value->closure.destroy_user_data = destroy_user_data; for (guint i = 0; i < n_args; i++) { ValueData *value_data = NULL; value_data = g_hash_table_lookup (self->values, args[i]); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", args[i]); return FALSE; } if (arg_types != NULL && !g_type_is_a (value_data->type, arg_types[i])) { if (check_can_coerce_type (arg_types[i], value_data->type)) g_ptr_array_add (value->closure.args, wrap_coerce_value (self, value_data, arg_types[i])); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "component %u for type %s " "must be of type %s, got %s", i, g_type_name (type), g_type_name (arg_types[i]), g_type_name (value_data->type)); return FALSE; } } else g_ptr_array_add (value->closure.args, value_data_ref (value_data)); } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_measure_for_size_source_value (BgeWdgtSpec *self, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->kind = VALUE_MEASURE_FOR_SIZE; value->type = G_TYPE_INT; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_widget_width_source_value (BgeWdgtSpec *self, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->kind = VALUE_WIDGET_WIDTH; value->type = G_TYPE_DOUBLE; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_widget_height_source_value (BgeWdgtSpec *self, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->kind = VALUE_WIDGET_HEIGHT; value->type = G_TYPE_DOUBLE; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_tick_time_source_value (BgeWdgtSpec *self, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->kind = VALUE_TICK_TIME; value->type = G_TYPE_DOUBLE; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_track_transition_source_value (BgeWdgtSpec *self, const char *name, const char *src, const char *damping_ratio, const char *mass, const char *stiffness, GError **error) { ValueData *src_value = NULL; g_autoptr (ValueData) coerced_src_value = NULL; ValueData *damping_ratio_value = NULL; g_autoptr (ValueData) coerced_damping_ratio_value = NULL; ValueData *mass_value = NULL; g_autoptr (ValueData) coerced_mass_value = NULL; ValueData *stiffness_value = NULL; g_autoptr (ValueData) coerced_stiffness_value = NULL; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (src != NULL, FALSE); g_return_val_if_fail (damping_ratio != NULL, FALSE); g_return_val_if_fail (mass != NULL, FALSE); g_return_val_if_fail (stiffness != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } /* TODO clean up type checking process */ src_value = g_hash_table_lookup (self->values, src); if (src_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", src); return FALSE; } if (src_value->type != G_TYPE_DOUBLE) { if (check_can_coerce_type (G_TYPE_DOUBLE, src_value->type)) coerced_src_value = wrap_coerce_value (self, src_value, src_value->type); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "source type %s cannot be transitioned", g_type_name (src_value->type)); return FALSE; } } damping_ratio_value = g_hash_table_lookup (self->values, damping_ratio); if (damping_ratio_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", damping_ratio); return FALSE; } if (damping_ratio_value->type != G_TYPE_DOUBLE) { if (check_can_coerce_type (G_TYPE_DOUBLE, damping_ratio_value->type)) coerced_damping_ratio_value = wrap_coerce_value (self, damping_ratio_value, damping_ratio_value->type); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "damping ratio must be a double, got type %s", g_type_name (damping_ratio_value->type)); return FALSE; } } mass_value = g_hash_table_lookup (self->values, mass); if (mass_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", mass); return FALSE; } if (mass_value->type != G_TYPE_DOUBLE) { if (check_can_coerce_type (G_TYPE_DOUBLE, mass_value->type)) coerced_mass_value = wrap_coerce_value (self, mass_value, mass_value->type); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "mass must be a double, got type %s", g_type_name (mass_value->type)); return FALSE; } } stiffness_value = g_hash_table_lookup (self->values, stiffness); if (stiffness_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", stiffness); return FALSE; } if (stiffness_value->type != G_TYPE_DOUBLE) { if (check_can_coerce_type (G_TYPE_DOUBLE, stiffness_value->type)) coerced_stiffness_value = wrap_coerce_value (self, stiffness_value, stiffness_value->type); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "stiffness must be a double, got type %s", g_type_name (stiffness_value->type)); return FALSE; } } value = value_data_new (); value->name = g_strdup (name); value->kind = VALUE_TRACK_TRANSITION; value->type = G_TYPE_DOUBLE; value->track_transition.src = coerced_src_value != NULL ? value_data_ref (coerced_src_value) : value_data_ref (src_value); value->track_transition.spring.damping_ratio = coerced_damping_ratio_value != NULL ? value_data_ref (coerced_damping_ratio_value) : value_data_ref (damping_ratio_value); value->track_transition.spring.mass = coerced_mass_value != NULL ? value_data_ref (coerced_mass_value) : value_data_ref (mass_value); value->track_transition.spring.stiffness = coerced_stiffness_value != NULL ? value_data_ref (coerced_stiffness_value) : value_data_ref (stiffness_value); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); g_ptr_array_add (self->track_transition_values, value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_variable_value (BgeWdgtSpec *self, GType type, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (!G_TYPE_IS_VALUE (type)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' cannot be stored in value '%s'", g_type_name (type), name); return FALSE; } if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = type; value->kind = VALUE_VARIABLE; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_reference_object_value (BgeWdgtSpec *self, GType type, const char *name, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (self->reference != NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "an object reference value has already been defined"); return FALSE; } if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } if (!g_type_is_a (type, G_TYPE_OBJECT)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type '%s' cannot be stored in reference object value '%s'", g_type_name (type), name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = type; value->kind = VALUE_REFERENCE_OBJECT; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); self->reference = value_data_ref (value); return TRUE; } gboolean bge_wdgt_spec_add_property_value (BgeWdgtSpec *self, const char *name, const char *object, const char *property, GType *type_out, GError **error) { ValueData *object_value = NULL; ValueData *existing_value = NULL; g_autoptr (GTypeClass) type_class = NULL; GParamSpec *pspec = NULL; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (object != NULL, FALSE); g_return_val_if_fail (property != NULL, FALSE); object_value = g_hash_table_lookup (self->values, object); if (object_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", object); return FALSE; } if (!g_type_is_a (object_value->type, G_TYPE_OBJECT)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is not an object", object); return FALSE; } existing_value = g_hash_table_lookup (self->values, name); if (existing_value != NULL) { if (existing_value->kind == VALUE_PROPERTY && existing_value->property.object == object_value && g_strcmp0 (existing_value->property.prop_name, property) == 0) return TRUE; else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } } type_class = g_type_class_ref (object_value->type); pspec = g_object_class_find_property (G_OBJECT_CLASS (type_class), property); if (pspec == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "property '%s' doesn't exist on type %s", property, g_type_name (object_value->type)); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = pspec->value_type; value->kind = VALUE_PROPERTY; value->property.object = value_data_ref (object_value); value->property.prop_name = g_strdup (property); value->property.pspec_flags = pspec->flags; g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); if (type_out != NULL) *type_out = pspec->value_type; return TRUE; } gboolean bge_wdgt_spec_add_allocation_width_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error) { ValueData *child_value = NULL; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (child != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } child_value = g_hash_table_lookup (self->values, child); if (child_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", child); return FALSE; } if (!g_type_is_a (child_value->type, GTK_TYPE_WIDGET)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is not a widget", child); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = G_TYPE_INT; value->kind = VALUE_ALLOCATION_WIDTH; value->allocation.widget = value_data_ref (child_value); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_allocation_height_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error) { ValueData *child_value = NULL; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (child != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } child_value = g_hash_table_lookup (self->values, child); if (child_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", child); return FALSE; } if (!g_type_is_a (child_value->type, GTK_TYPE_WIDGET)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is not a widget", child); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = G_TYPE_INT; value->kind = VALUE_ALLOCATION_HEIGHT; value->allocation.widget = value_data_ref (child_value); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_allocation_transform_value (BgeWdgtSpec *self, const char *name, const char *child, GError **error) { ValueData *child_value = NULL; g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (child != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } child_value = g_hash_table_lookup (self->values, child); if (child_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", child); return FALSE; } if (!g_type_is_a (child_value->type, GTK_TYPE_WIDGET)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is not a widget", child); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = GSK_TYPE_TRANSFORM; value->kind = VALUE_ALLOCATION_TRANSFORM; value->allocation.widget = value_data_ref (child_value); g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_measure_value (BgeWdgtSpec *self, const char *name, BgeWdgtMeasureKind kind, GError **error) { g_autoptr (ValueData) value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->values, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", name); return FALSE; } value = value_data_new (); value->name = g_strdup (name); value->type = G_TYPE_INT; switch (kind) { case BGE_WDGT_MEASURE_MINIMUM_WIDTH: value->kind = VALUE_MEASURE_MINIMUM_WIDTH; break; case BGE_WDGT_MEASURE_NATURAL_WIDTH: value->kind = VALUE_MEASURE_NATURAL_WIDTH; break; case BGE_WDGT_MEASURE_MINIMUM_HEIGHT: value->kind = VALUE_MEASURE_MINIMUM_HEIGHT; break; case BGE_WDGT_MEASURE_NATURAL_HEIGHT: value->kind = VALUE_MEASURE_NATURAL_HEIGHT; break; default: { g_critical ("Passed an invalid measure kind"); return FALSE; } } g_hash_table_replace (self->values, g_strdup (name), value_data_ref (value)); return TRUE; } gboolean bge_wdgt_spec_add_state (BgeWdgtSpec *self, const char *name, gboolean default_state, GError **error) { g_autoptr (StateData) state = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (name != NULL, FALSE); if (g_hash_table_contains (self->states, name)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "state '%s' already exists", name); return FALSE; } if (default_state && self->default_state != NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "default state already specified"); return FALSE; } state = state_data_new (); state->name = g_strdup (name); state->setters = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, value_data_unref); state->transitions = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, transition_data_unref); state->expressions = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, (GDestroyNotify) gtk_expression_unref); state->snapshot_deps = g_ptr_array_new_with_free_func ( (GDestroyNotify) gtk_expression_unref); state->values_need_tick = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, NULL); g_hash_table_replace (self->states, g_strdup (name), state_data_ref (state)); if (default_state) self->default_state = state_data_ref (state); return TRUE; } gboolean bge_wdgt_spec_set_value (BgeWdgtSpec *self, const char *state, const char *dest_value, const char *src_value, GError **error) { StateData *state_data = NULL; ValueData *dest_data = NULL; ValueData *src_data = NULL; g_autoptr (ValueData) coerced_src_data = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (dest_value != NULL, FALSE); g_return_val_if_fail (src_value != NULL, FALSE); if (state != NULL) state_data = g_hash_table_lookup (self->states, state); else state_data = self->init_state; dest_data = g_hash_table_lookup (self->values, dest_value); src_data = g_hash_table_lookup (self->values, src_value); if (state_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "state '%s' is undefined", state); return FALSE; } if (dest_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", dest_value); return FALSE; } if (src_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", src_value); return FALSE; } if (dest_data == src_data) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "cannot assign '%s' to itself", src_value); return FALSE; } if (!g_type_is_a (src_data->type, dest_data->type)) { if (check_can_coerce_type (dest_data->type, src_data->type)) coerced_src_data = wrap_coerce_value (self, src_data, dest_data->type); else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "source type %s cannot be assigned to destination type %s", g_type_name (src_data->type), g_type_name (dest_data->type)); return FALSE; } } if (dest_data->kind == VALUE_CONSTANT) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "cannot assign to a constant source value"); return FALSE; } if (dest_data->kind == VALUE_PROPERTY && !(dest_data->property.pspec_flags & G_PARAM_WRITABLE)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "property %s on type %s is not writable", dest_data->property.prop_name, g_type_name (dest_data->type)); return FALSE; } if (src_data->kind == VALUE_PROPERTY && !(src_data->property.pspec_flags & G_PARAM_READABLE)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "property %s on type %s is not writable", src_data->property.prop_name, g_type_name (src_data->type)); return FALSE; } g_hash_table_replace ( state_data->setters, value_data_ref (dest_data), coerced_src_data != NULL ? value_data_ref (coerced_src_data) : value_data_ref (src_data)); return TRUE; } gboolean bge_wdgt_spec_transition_value (BgeWdgtSpec *self, const char *state, const char *value, const char *seconds, const char *easing, GError **error) { StateData *state_data = NULL; ValueData *value_data = NULL; ValueData *seconds_data = NULL; ValueData *easing_data = NULL; g_autoptr (TransitionData) transition = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); /* state is required for transitions */ g_return_val_if_fail (state != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); g_return_val_if_fail (seconds != NULL, FALSE); g_return_val_if_fail (easing != NULL, FALSE); state_data = g_hash_table_lookup (self->states, state); if (state_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "state '%s' is undefined", state); return FALSE; } value_data = g_hash_table_lookup (self->values, value); seconds_data = g_hash_table_lookup (self->values, seconds); easing_data = g_hash_table_lookup (self->values, easing); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", value); return FALSE; } if (value_data->type != G_TYPE_DOUBLE) /* TODO: support more types */ { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s cannot be transitioned", g_type_name (value_data->type)); return FALSE; } if (seconds_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", value); return FALSE; } if (seconds_data->type != G_TYPE_DOUBLE) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition ease seconds value must be a double, got %s", g_type_name (seconds_data->type)); return FALSE; } if (easing_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", value); return FALSE; } if (easing_data->type != BGE_TYPE_EASING) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition ease easing value must be of type %s, got %s", g_type_name (BGE_TYPE_EASING), g_type_name (easing_data->type)); return FALSE; } transition = transition_data_new (); transition->kind = TRANSITION_EASE; transition->ease.seconds = value_data_ref (seconds_data); transition->ease.easing = value_data_ref (easing_data); g_hash_table_replace ( state_data->transitions, value_data_ref (value_data), transition_data_ref (transition)); /* We want the init state to track the transition as well in case of value overlays */ g_hash_table_replace ( self->init_state->transitions, value_data_ref (value_data), transition_data_ref (transition)); return TRUE; } gboolean bge_wdgt_spec_transition_value_spring (BgeWdgtSpec *self, const char *state, const char *value, const char *damping_ratio, const char *mass, const char *stiffness, GError **error) { StateData *state_data = NULL; ValueData *value_data = NULL; ValueData *damping_ratio_data = NULL; ValueData *mass_data = NULL; ValueData *stiffness_data = NULL; g_autoptr (TransitionData) transition = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); /* state is required for transitions */ g_return_val_if_fail (state != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); g_return_val_if_fail (damping_ratio != NULL, FALSE); g_return_val_if_fail (mass != NULL, FALSE); g_return_val_if_fail (stiffness != NULL, FALSE); state_data = g_hash_table_lookup (self->states, state); value_data = g_hash_table_lookup (self->values, value); damping_ratio_data = g_hash_table_lookup (self->values, damping_ratio); mass_data = g_hash_table_lookup (self->values, mass); stiffness_data = g_hash_table_lookup (self->values, stiffness); if (state_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "state '%s' is undefined", state); return FALSE; } if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", value); return FALSE; } if (damping_ratio_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", damping_ratio); return FALSE; } if (mass_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", mass); return FALSE; } if (stiffness_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", stiffness); return FALSE; } if (value_data->type != G_TYPE_DOUBLE) /* TODO: support more types */ { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s cannot be transitioned", g_type_name (value_data->type)); return FALSE; } if (damping_ratio_data->type != G_TYPE_DOUBLE) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition damping ratio must of type %s, got %s", g_type_name (G_TYPE_DOUBLE), g_type_name (damping_ratio_data->type)); return FALSE; } if (mass_data->type != G_TYPE_DOUBLE) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition mass must of type %s, got %s", g_type_name (G_TYPE_DOUBLE), g_type_name (mass_data->type)); return FALSE; } if (stiffness_data->type != G_TYPE_DOUBLE) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition stiffness must of type %s, got %s", g_type_name (G_TYPE_DOUBLE), g_type_name (stiffness_data->type)); return FALSE; } transition = transition_data_new (); transition->kind = TRANSITION_SPRING; transition->spring.damping_ratio = value_data_ref (damping_ratio_data); transition->spring.mass = value_data_ref (mass_data); transition->spring.stiffness = value_data_ref (stiffness_data); g_hash_table_replace ( state_data->transitions, value_data_ref (value_data), transition_data_ref (transition)); /* We want the init state to track the transition as well in case of value overlays */ g_hash_table_replace ( self->init_state->transitions, value_data_ref (value_data), transition_data_ref (transition)); return TRUE; } gboolean bge_wdgt_spec_append_snapshot_instr (BgeWdgtSpec *self, const char *state, BgeWdgtSnapshotInstrKind kind, const char *instr, const char *const *args, guint n_args, guint *n_pops_out, GError **error) { gboolean result = FALSE; StateData *state_data = NULL; ForeachData *foreach_context = NULL; SnapshotInstr match = { 0 }; guint match_rest_start = 0; g_autoptr (SnapshotCallData) call = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (instr != NULL, FALSE); g_return_val_if_fail (n_args == 0 || args != NULL, FALSE); if (state != NULL) { state_data = g_hash_table_lookup (self->states, state); if (state_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "state '%s' is undefined", state); return FALSE; } } else state_data = self->init_state; if (self->foreach_stack->len > 0) foreach_context = g_ptr_array_index ( self->foreach_stack, self->foreach_stack->len - 1); switch (kind) { case BGE_WDGT_SNAPSHOT_INSTR_PUSH: result = lookup_snapshot_push_instr (instr, &match); if (!result) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" is not a valid snapshot push instruction", instr); return FALSE; } if (n_pops_out != NULL) *n_pops_out = match.n_pops; break; case BGE_WDGT_SNAPSHOT_INSTR_TRANSFORM: result = lookup_snapshot_transform_instr (instr, &match); if (!result) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" is not a valid snapshot transform instruction", instr); return FALSE; } break; case BGE_WDGT_SNAPSHOT_INSTR_APPEND: result = lookup_snapshot_append_instr (instr, &match); if (!result) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" is not a valid snapshot append instruction", instr); return FALSE; } break; case BGE_WDGT_SNAPSHOT_INSTR_POP: case BGE_WDGT_SNAPSHOT_INSTR_SAVE: case BGE_WDGT_SNAPSHOT_INSTR_RESTORE: { call = snapshot_call_data_new (); call->kind = kind; if (foreach_context != NULL) call->foreach_context = foreach_data_ref (foreach_context); ensure_state_snapshot (state_data); g_ptr_array_add (state_data->snapshot->calls, snapshot_call_data_ref (call)); } return TRUE; case BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD: { ValueData *child = NULL; if (n_args != 1) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "child snapshot instruction requires " "a single argument"); return FALSE; } child = g_hash_table_lookup (self->values, args[0]); if (child == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", args[0]); return FALSE; } if (!g_type_is_a (child->type, GTK_TYPE_WIDGET)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is not a child", args[0]); return FALSE; } call = snapshot_call_data_new (); call->kind = kind; call->child = value_data_ref (child); if (foreach_context != NULL) call->foreach_context = foreach_data_ref (foreach_context); ensure_state_snapshot (state_data); g_ptr_array_add (state_data->snapshot->calls, snapshot_call_data_ref (call)); } return TRUE; default: g_critical ("invalid snapshot instruction kind specified"); return FALSE; } match_rest_start = match.n_args - match.n_rest; if (n_args != match.n_args) { if (match.n_rest > 0 && n_args > match.n_args) { if ((n_args - match.n_args) % match.n_rest != 0) g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "snapshot instruction %s cannot handle %u " "trailing arguments", match.name, n_args - match.n_args); } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "snapshot instruction %s requires %u " "arguments, got %u", match.name, match.n_args, n_args); return FALSE; } } call = snapshot_call_data_new (); call->kind = kind; call->func = match.call; call->args = g_ptr_array_new_with_free_func (value_data_unref); call->rest = g_ptr_array_new_with_free_func (value_data_unref); if (foreach_context != NULL) call->foreach_context = foreach_data_ref (foreach_context); for (guint i = 0; i < n_args; i++) { ValueData *value_data = NULL; gboolean in_rest = FALSE; GType expected_type = 0; value_data = g_hash_table_lookup (self->values, args[i]); if (value_data == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", args[i]); return FALSE; } in_rest = i >= match_rest_start; if (in_rest) expected_type = match.args[match_rest_start + ((i - match_rest_start) % match.n_rest)]; else expected_type = match.args[i]; if (!g_type_is_a (value_data->type, expected_type)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "argument %u for snapshot instruction %s " "must be of type %s, got %s", i, match.name, g_type_name (expected_type), g_type_name (value_data->type)); return FALSE; } if (in_rest) g_ptr_array_add (call->rest, value_data_ref (value_data)); else g_ptr_array_add (call->args, value_data_ref (value_data)); } ensure_state_snapshot (state_data); g_ptr_array_add (state_data->snapshot->calls, snapshot_call_data_ref (call)); return TRUE; } gboolean bge_wdgt_spec_push_foreach (BgeWdgtSpec *self, const char *model, const char *value_iterator, const char *index_iterator, GType iterator_type, GError **error) { ValueData *model_value = NULL; g_autoptr (GHashTable) values_copy = NULL; GHashTableIter iter = { 0 }; g_autoptr (ForeachData) foreach_context = NULL; g_autoptr (ValueData) value_iterator_value = NULL; g_autoptr (ValueData) index_iterator_value = NULL; g_return_val_if_fail (BGE_IS_WDGT_SPEC (self), FALSE); g_return_val_if_fail (!self->ready, FALSE); g_return_val_if_fail (model != NULL, FALSE); g_return_val_if_fail (value_iterator != NULL, FALSE); g_return_val_if_fail (index_iterator != NULL, FALSE); model_value = g_hash_table_lookup (self->values, model); if (model_value == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' is undefined", model); return FALSE; } if (!g_type_is_a (model_value->type, G_TYPE_LIST_MODEL)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' does not implement GListModel", model); return FALSE; } if (g_hash_table_contains (self->values, value_iterator)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", value_iterator); return FALSE; } if (g_hash_table_contains (self->values, index_iterator)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "value '%s' already exists", index_iterator); return FALSE; } if (!g_type_is_a (iterator_type, G_TYPE_OBJECT)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "iterator type does not derive from GObject"); return FALSE; } values_copy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, value_data_unref); g_hash_table_iter_init (&iter, self->values); for (;;) { char *name = NULL; ValueData *value = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &name, (gpointer *) &value)) break; g_hash_table_replace (values_copy, g_strdup (name), value_data_ref (value)); } g_ptr_array_add (self->values_stack, g_steal_pointer (&self->values)); self->values = g_hash_table_ref (values_copy); foreach_context = foreach_data_new (); foreach_context->model = value_data_ref (model_value); foreach_context->values = g_hash_table_ref (values_copy); if (self->foreach_stack->len > 0) { ForeachData *parent = NULL; parent = g_ptr_array_index ( self->foreach_stack, self->foreach_stack->len - 1); foreach_context->parent = foreach_data_ref (parent); } g_ptr_array_add (self->foreach_stack, foreach_data_ref (foreach_context)); g_ptr_array_add (self->foreaches, foreach_data_ref (foreach_context)); value_iterator_value = value_data_new (); value_iterator_value->kind = VALUE_ITERATOR; value_iterator_value->name = g_strdup (value_iterator); value_iterator_value->type = iterator_type; value_iterator_value->iterator.context = foreach_data_ref (foreach_context); g_hash_table_replace (values_copy, g_strdup (value_iterator), value_data_ref (value_iterator_value)); index_iterator_value = value_data_new (); index_iterator_value->kind = VALUE_ITERATOR; index_iterator_value->name = g_strdup (index_iterator); index_iterator_value->type = G_TYPE_UINT; index_iterator_value->iterator.context = foreach_data_ref (foreach_context); g_hash_table_replace (values_copy, g_strdup (index_iterator), value_data_ref (index_iterator_value)); return TRUE; } gboolean bge_wdgt_spec_pop_foreach (BgeWdgtSpec *self) { GHashTable *restore_values = NULL; g_return_val_if_fail (self->foreach_stack->len > 0, FALSE); g_assert (self->values_stack->len > 0); g_clear_pointer (&self->values, g_hash_table_unref); restore_values = g_ptr_array_index (self->values_stack, self->values_stack->len - 1); self->values = g_hash_table_ref (restore_values); g_ptr_array_set_size (self->values_stack, self->values_stack->len - 1); g_ptr_array_set_size (self->foreach_stack, self->foreach_stack->len - 1); return TRUE; } static gboolean check_can_coerce_type (GType dest, GType src) { const struct { GType dest; GType src; } valid_pairings[] = { { G_TYPE_INT, G_TYPE_UINT }, { G_TYPE_INT, G_TYPE_FLOAT }, { G_TYPE_INT, G_TYPE_DOUBLE }, { G_TYPE_UINT, G_TYPE_INT }, { G_TYPE_UINT, G_TYPE_FLOAT }, { G_TYPE_UINT, G_TYPE_DOUBLE }, { G_TYPE_INT64, G_TYPE_INT }, { G_TYPE_INT64, G_TYPE_UINT }, { G_TYPE_INT64, G_TYPE_FLOAT }, { G_TYPE_INT64, G_TYPE_DOUBLE }, { G_TYPE_UINT64, G_TYPE_INT }, { G_TYPE_UINT64, G_TYPE_UINT }, { G_TYPE_UINT64, G_TYPE_INT64 }, { G_TYPE_UINT64, G_TYPE_FLOAT }, { G_TYPE_UINT64, G_TYPE_DOUBLE }, { G_TYPE_FLOAT, G_TYPE_INT }, { G_TYPE_FLOAT, G_TYPE_UINT }, { G_TYPE_FLOAT, G_TYPE_DOUBLE }, { G_TYPE_DOUBLE, G_TYPE_INT }, { G_TYPE_DOUBLE, G_TYPE_UINT }, { G_TYPE_DOUBLE, G_TYPE_FLOAT }, { G_TYPE_STRING, G_TYPE_INT }, { G_TYPE_STRING, G_TYPE_UINT }, { G_TYPE_STRING, G_TYPE_INT64 }, { G_TYPE_STRING, G_TYPE_UINT64 }, { G_TYPE_STRING, G_TYPE_FLOAT }, { G_TYPE_STRING, G_TYPE_DOUBLE }, }; for (guint i = 0; i < G_N_ELEMENTS (valid_pairings); i++) { if (dest == valid_pairings[i].dest && src == valid_pairings[i].src) return TRUE; } return FALSE; } static void coerce_value (const GValue *in, GType dest_type, GValue *out) { /* Not a switch for style, though not the case here GType macros can sometimes be non-compile-time constants */ if (dest_type == G_TYPE_INT) { int val = 0; if (in->g_type == G_TYPE_UINT) val = g_value_get_uint (in); else if (in->g_type == G_TYPE_FLOAT) val = round (g_value_get_float (in)); else if (in->g_type == G_TYPE_DOUBLE) val = round (g_value_get_double (in)); g_value_set_int (out, val); } else if (dest_type == G_TYPE_UINT) { guint val = 0; if (in->g_type == G_TYPE_INT) val = g_value_get_int (in); else if (in->g_type == G_TYPE_FLOAT) val = round (g_value_get_float (in)); else if (in->g_type == G_TYPE_DOUBLE) val = round (g_value_get_double (in)); g_value_set_uint (out, val); } else if (dest_type == G_TYPE_INT64) { gint64 val = 0; if (in->g_type == G_TYPE_INT) val = g_value_get_int (in); else if (in->g_type == G_TYPE_UINT) val = g_value_get_uint (in); else if (in->g_type == G_TYPE_FLOAT) val = round (g_value_get_float (in)); else if (in->g_type == G_TYPE_DOUBLE) val = round (g_value_get_double (in)); g_value_set_int64 (out, val); } else if (dest_type == G_TYPE_UINT64) { guint64 val = 0; if (in->g_type == G_TYPE_INT) val = g_value_get_int (in); else if (in->g_type == G_TYPE_UINT) val = g_value_get_uint (in); else if (in->g_type == G_TYPE_INT64) val = g_value_get_int64 (in); else if (in->g_type == G_TYPE_UINT64) val = round (g_value_get_float (in)); else if (in->g_type == G_TYPE_DOUBLE) val = round (g_value_get_double (in)); g_value_set_uint64 (out, val); } else if (dest_type == G_TYPE_FLOAT) { float val = 0; if (in->g_type == G_TYPE_INT) val = g_value_get_int (in); else if (in->g_type == G_TYPE_UINT) val = g_value_get_uint (in); else if (in->g_type == G_TYPE_DOUBLE) val = round (g_value_get_double (in)); g_value_set_float (out, val); } else if (dest_type == G_TYPE_DOUBLE) { double val = 0; if (in->g_type == G_TYPE_INT) val = g_value_get_int (in); else if (in->g_type == G_TYPE_UINT) val = g_value_get_uint (in); else if (in->g_type == G_TYPE_FLOAT) val = round (g_value_get_float (in)); g_value_set_double (out, val); } else if (dest_type == G_TYPE_STRING) { g_autofree char *val = NULL; if (in->g_type == G_TYPE_INT) val = g_strdup_printf ("%d", g_value_get_int (in)); else if (in->g_type == G_TYPE_UINT) val = g_strdup_printf ("%u", g_value_get_uint (in)); else if (in->g_type == G_TYPE_INT64) val = g_strdup_printf ("%zd", g_value_get_int64 (in)); else if (in->g_type == G_TYPE_UINT64) val = g_strdup_printf ("%zu", g_value_get_uint64 (in)); else if (in->g_type == G_TYPE_FLOAT) val = g_strdup_printf ("%f", g_value_get_float (in)); else if (in->g_type == G_TYPE_DOUBLE) val = g_strdup_printf ("%f", g_value_get_double (in)); g_value_take_string (out, g_steal_pointer (&val)); } } static ValueData * wrap_coerce_value (BgeWdgtSpec *self, ValueData *value, GType dest_type) { g_autoptr (ValueData) coerced = NULL; g_assert (!g_type_is_a (value->type, dest_type)); coerced = value_data_new (); coerced->type = dest_type; coerced->kind = VALUE_COERCION; coerced->coercion.value = value_data_ref (value); g_ptr_array_add (self->anon_values, value_data_ref (coerced)); return g_steal_pointer (&coerced); } static void ensure_state_snapshot (StateData *state) { if (state->snapshot != NULL) return; state->snapshot = snapshot_data_new (); state->snapshot->calls = g_ptr_array_new_with_free_func ( snapshot_call_data_unref); } /* ------------------------------ */ /* Widget Renderer Implementation */ /* ------------------------------ */ #define BGE_TYPE_WDGT_NOTIFIER (bge_wdgt_notifier_get_type ()) G_DECLARE_FINAL_TYPE (BgeWdgtNotifier, bge_wdgt_notifier, BGE, WDGT_NOTIFIER, GObject) struct _BgeWdgtNotifier { GObject parent_instance; double value; }; G_DEFINE_FINAL_TYPE (BgeWdgtNotifier, bge_wdgt_notifier, G_TYPE_OBJECT); enum { NOTIFIER_PROP_0, NOTIFIER_PROP_VALUE, LAST_NOTIFIER_PROP }; static GParamSpec *notifier_props[LAST_NOTIFIER_PROP] = { 0 }; static void bge_wdgt_notifier_dispose (GObject *object) { BgeWdgtNotifier *self = BGE_WDGT_NOTIFIER (object); (void) self; G_OBJECT_CLASS (bge_wdgt_notifier_parent_class)->dispose (object); } static void bge_wdgt_notifier_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeWdgtNotifier *self = BGE_WDGT_NOTIFIER (object); switch (prop_id) { case NOTIFIER_PROP_VALUE: g_value_set_double (value, self->value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_notifier_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeWdgtNotifier *self = BGE_WDGT_NOTIFIER (object); switch (prop_id) { case NOTIFIER_PROP_VALUE: self->value = g_value_get_double (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_notifier_class_init (BgeWdgtNotifierClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bge_wdgt_notifier_set_property; object_class->get_property = bge_wdgt_notifier_get_property; object_class->dispose = bge_wdgt_notifier_dispose; notifier_props[NOTIFIER_PROP_VALUE] = g_param_spec_double ( "value", NULL, NULL, G_MININT, G_MAXINT, 0.0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, notifier_props); } static void bge_wdgt_notifier_init (BgeWdgtNotifier *self) { } /* --- */ BGE_DEFINE_DATA ( foreach_instance, ForeachInstance, { guint current_idx; BgeWdgtNotifier *notifier; }, BGE_RELEASE_DATA (notifier, g_object_unref)) BGE_DEFINE_DATA ( state_instance, StateInstance, { GHashTable *transitions; }, BGE_RELEASE_DATA (transitions, g_hash_table_unref)); struct _BgeWdgtRenderer { GtkWidget parent_instance; BgeWdgtSpec *spec; char *state; GObject *reference; GtkWidget *child; StateInstanceData *init_instance; GPtrArray *init_watches; StateData *active_state; StateInstanceData *active_instance; SnapshotData *active_snapshot; StateData *last_state; StateInstanceData *last_instance; GTimer *since_last_state; guint tick; gboolean had_tick_since_state_switch; GHashTable *objects; GPtrArray *nonchildren; GPtrArray *children; GHashTable *allocations; GHashTable *foreach_instances; GHashTable *state_instances; GHashTable *transition_instances; GHashTable *transition_closure_instances; GHashTable *track_transition_closure_instances; GPtrArray *track_transitions; GPtrArray *bindings; GPtrArray *watches; BgeWdgtNotifier *reference_notifier; int measure_minimum_width; int measure_natural_width; int measure_minimum_height; int measure_natural_height; int current_measure_for_size; BgeWdgtNotifier *measure_for_size_notifier; int widget_width; int widget_height; BgeWdgtNotifier *widget_width_notifier; BgeWdgtNotifier *widget_height_notifier; GTimer *tick_time; BgeWdgtNotifier *tick_time_notifier; }; G_DEFINE_FINAL_TYPE (BgeWdgtRenderer, bge_wdgt_renderer, GTK_TYPE_WIDGET); enum { RENDERER_PROP_0, RENDERER_PROP_SPEC, RENDERER_PROP_RESOURCE, RENDERER_PROP_STATE, RENDERER_PROP_REFERENCE, RENDERER_PROP_CHILD, LAST_RENDERER_PROP }; static GParamSpec *renderer_props[LAST_RENDERER_PROP] = { 0 }; BGE_DEFINE_DATA ( watch_setter, WatchSetter, { BgeWdgtRenderer *self; StateData *state; StateInstanceData *instance; ValueData *dest; ValueData *src; }, BGE_RELEASE_DATA (state, state_data_unref); BGE_RELEASE_DATA (instance, state_instance_data_unref); BGE_RELEASE_DATA (dest, value_data_unref); BGE_RELEASE_DATA (src, value_data_unref)) BGE_DEFINE_DATA ( allocation, Allocation, { ValueData *width; ValueData *height; ValueData *transform; }, BGE_RELEASE_DATA (width, value_data_unref); BGE_RELEASE_DATA (height, value_data_unref); BGE_RELEASE_DATA (transform, value_data_unref)) typedef struct { double velocity; double est_duration; double cache_damping_ratio; double cache_mass; double cache_stiffness; } SpringCache; BGE_DEFINE_DATA ( transition_instance, TransitionInstance, { double value; double elapsed; BgeWdgtNotifier *notifier; struct { BgeEasing easing; double seconds; } ease; SpringCache spring; }, BGE_RELEASE_DATA (notifier, g_object_unref)) BGE_DEFINE_DATA ( transition_closure, TransitionClosure, { StateData *state; StateInstanceData *instance; ValueData *value; }, BGE_RELEASE_DATA (state, state_data_unref); BGE_RELEASE_DATA (instance, state_instance_data_unref); BGE_RELEASE_DATA (value, value_data_unref)); BGE_DEFINE_DATA ( track_transition_closure, TrackTransitionClosure, { ValueData *value; GTimer *timer; BgeWdgtNotifier *notifier; double elapsed; double current; double target; double last; SpringCache spring; }, BGE_RELEASE_DATA (value, value_data_unref); BGE_RELEASE_DATA (notifier, g_object_unref); BGE_RELEASE_DATA (timer, g_timer_destroy)); static void regenerate (BgeWdgtRenderer *self); static void spawn_nonchild (BgeWdgtRenderer *self, ValueData *value); static void spawn_child (BgeWdgtRenderer *self, ValueData *value, GtkBuilder *dummy_builder); static void apply_state (BgeWdgtRenderer *self); static GtkExpression * ensure_expressions (BgeWdgtSpec *self, ValueData *value, StateData *state, gboolean *value_needs_tick); static void set_value (BgeWdgtRenderer *self, StateData *state, StateInstanceData *instance, ValueData *dest, ValueData *src, GPtrArray *watches); static int resolve_value_int (BgeWdgtRenderer *self, ValueData *value, StateData *state); static double resolve_value_double (BgeWdgtRenderer *self, ValueData *value, StateData *state); static gint resolve_value_enum (BgeWdgtRenderer *self, ValueData *value, StateData *state); static gpointer resolve_value_boxed_dup (BgeWdgtRenderer *self, ValueData *value, StateData *state); static gpointer resolve_value_object_dup (BgeWdgtRenderer *self, ValueData *value, StateData *state); static void discard_binding (gpointer ptr); static void discard_watch (gpointer ptr); static void prop_change_queue_draw (BgeWdgtRenderer *self); static void reset_setter (WatchSetterData *data); static void wdgt_renderer_set_from_resource (BgeWdgtRenderer *self, const char *resource); static void bge_wdgt_renderer_dispose (GObject *object) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (object); if (self->tick > 0) { gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->tick); self->tick = 0; } g_clear_pointer (&self->spec, g_object_unref); g_clear_pointer (&self->state, g_free); g_clear_pointer (&self->reference, g_object_unref); g_clear_pointer (&self->child, gtk_widget_unparent); g_clear_pointer (&self->init_instance, state_instance_data_unref); g_clear_pointer (&self->init_watches, g_ptr_array_unref); g_clear_pointer (&self->active_state, state_data_unref); g_clear_pointer (&self->active_instance, state_instance_data_unref); g_clear_pointer (&self->active_snapshot, snapshot_data_unref); g_clear_pointer (&self->last_state, state_data_unref); g_clear_pointer (&self->last_instance, state_instance_data_unref); g_clear_pointer (&self->since_last_state, g_timer_destroy); g_clear_pointer (&self->objects, g_hash_table_unref); g_clear_pointer (&self->children, g_ptr_array_unref); g_clear_pointer (&self->allocations, g_hash_table_unref); g_clear_pointer (&self->nonchildren, g_ptr_array_unref); g_clear_pointer (&self->foreach_instances, g_hash_table_unref); g_clear_pointer (&self->state_instances, g_hash_table_unref); g_clear_pointer (&self->transition_instances, g_hash_table_unref); g_clear_pointer (&self->transition_closure_instances, g_hash_table_unref); g_clear_pointer (&self->track_transition_closure_instances, g_hash_table_unref); g_clear_pointer (&self->track_transitions, g_ptr_array_unref); g_clear_pointer (&self->bindings, g_ptr_array_unref); g_clear_pointer (&self->watches, g_ptr_array_unref); g_clear_pointer (&self->reference_notifier, g_object_unref); g_clear_pointer (&self->measure_for_size_notifier, g_object_unref); g_clear_pointer (&self->widget_width_notifier, g_object_unref); g_clear_pointer (&self->widget_height_notifier, g_object_unref); g_clear_pointer (&self->tick_time, g_timer_destroy); g_clear_pointer (&self->tick_time_notifier, g_object_unref); G_OBJECT_CLASS (bge_wdgt_renderer_parent_class)->dispose (object); } static void bge_wdgt_renderer_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (object); switch (prop_id) { case RENDERER_PROP_SPEC: g_value_set_object (value, bge_wdgt_renderer_get_spec (self)); break; case RENDERER_PROP_STATE: g_value_set_string (value, bge_wdgt_renderer_get_state (self)); break; case RENDERER_PROP_REFERENCE: g_value_set_object (value, bge_wdgt_renderer_get_reference (self)); break; case RENDERER_PROP_CHILD: g_value_set_object (value, bge_wdgt_renderer_get_child (self)); break; case RENDERER_PROP_RESOURCE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_renderer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (object); switch (prop_id) { case RENDERER_PROP_SPEC: bge_wdgt_renderer_set_spec (self, g_value_get_object (value)); break; case RENDERER_PROP_RESOURCE: wdgt_renderer_set_from_resource (self, g_value_get_string (value)); break; case RENDERER_PROP_STATE: bge_wdgt_renderer_set_state (self, g_value_get_string (value)); break; case RENDERER_PROP_REFERENCE: bge_wdgt_renderer_set_reference (self, g_value_get_object (value)); break; case RENDERER_PROP_CHILD: bge_wdgt_renderer_set_child (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bge_wdgt_renderer_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (widget); gboolean wdgt_measured = FALSE; self->current_measure_for_size = for_size; /* This will update our measurement values in self */ g_object_notify_by_pspec ( G_OBJECT (self->measure_for_size_notifier), notifier_props[NOTIFIER_PROP_VALUE]); switch (orientation) { case GTK_ORIENTATION_HORIZONTAL: if (self->measure_minimum_width > 0 || self->measure_natural_width > 0) { *minimum = self->measure_minimum_width; *natural = self->measure_natural_width; wdgt_measured = TRUE; } break; case GTK_ORIENTATION_VERTICAL: if (self->measure_minimum_height > 0 || self->measure_natural_height > 0) { *minimum = self->measure_minimum_height; *natural = self->measure_natural_height; wdgt_measured = TRUE; } break; default: g_assert_not_reached (); } if (!wdgt_measured) { GtkWidget *child = NULL; child = gtk_widget_get_first_child (GTK_WIDGET (self)); if (child != NULL) gtk_widget_measure ( GTK_WIDGET (child), orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); } } static void bge_wdgt_renderer_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (widget); self->widget_width = width; self->widget_height = height; g_object_notify_by_pspec ( G_OBJECT (self->widget_width_notifier), notifier_props[NOTIFIER_PROP_VALUE]); g_object_notify_by_pspec ( G_OBJECT (self->widget_height_notifier), notifier_props[NOTIFIER_PROP_VALUE]); if (self->child != NULL && gtk_widget_should_layout (self->child)) gtk_widget_allocate (self->child, width, height, baseline, NULL); for (guint i = 0; i < self->children->len; i++) { GtkWidget *child = NULL; AllocationData *allocation = NULL; int alloc_width = width; int alloc_height = height; g_autoptr (GskTransform) transform = NULL; child = g_ptr_array_index (self->children, i); allocation = g_hash_table_lookup (self->allocations, child); alloc_width = resolve_value_int ( self, allocation->width, self->active_instance != NULL ? self->active_state : self->spec->init_state); alloc_height = resolve_value_int ( self, allocation->height, self->active_state != NULL ? self->active_state : self->spec->init_state); transform = resolve_value_boxed_dup ( self, allocation->transform, self->active_state != NULL ? self->active_state : self->spec->init_state); gtk_widget_allocate ( child, MAX (alloc_width, 0.0), MAX (alloc_height, 0.0), baseline, g_steal_pointer (&transform)); } } static gboolean recurse_snapshot (BgeWdgtRenderer *self, GtkSnapshot *snapshot, GPtrArray *calls, guint *idx, ForeachData *foreach_context, ForeachData *parent_foreach, gboolean skip_foreach) { gboolean result = FALSE; guint start_idx = 0; guint n_iters = 0; ForeachData *next_foreach = NULL; ForeachInstanceData *foreach_instance = NULL; g_autoptr (GListModel) model = NULL; start_idx = *idx; if (foreach_context != NULL) { for (ForeachData *data = foreach_context->parent; data != NULL && data != parent_foreach; data = data->parent) { next_foreach = foreach_context; foreach_context = data; } foreach_instance = g_hash_table_lookup ( self->foreach_instances, foreach_context); g_assert (foreach_instance != NULL); model = resolve_value_object_dup ( self, foreach_context->model, self->active_state); if (model != NULL) n_iters = g_list_model_get_n_items (model); else { n_iters = 1; skip_foreach = TRUE; } } else n_iters = 1; for (guint i = 0; i < n_iters; i++) { if (foreach_instance != NULL) { foreach_instance->current_idx = i; g_object_notify_by_pspec ( G_OBJECT (foreach_instance->notifier), notifier_props[NOTIFIER_PROP_VALUE]); } *idx = start_idx; if (next_foreach != NULL) { result = recurse_snapshot ( self, snapshot, calls, idx, next_foreach, foreach_context, skip_foreach); if (!result) return FALSE; } for (; *idx < calls->len; (*idx)++) { SnapshotCallData *call = NULL; call = g_ptr_array_index (calls, *idx); if ((call->foreach_context != NULL || parent_foreach != NULL) && call->foreach_context == parent_foreach) break; else if (call->foreach_context != foreach_context) { result = recurse_snapshot ( self, snapshot, calls, idx, call->foreach_context, foreach_context, skip_foreach); if (!result) return FALSE; } else if (!skip_foreach) { switch (call->kind) { case BGE_WDGT_SNAPSHOT_INSTR_POP: gtk_snapshot_pop (snapshot); break; case BGE_WDGT_SNAPSHOT_INSTR_SAVE: gtk_snapshot_save (snapshot); break; case BGE_WDGT_SNAPSHOT_INSTR_RESTORE: gtk_snapshot_restore (snapshot); break; case BGE_WDGT_SNAPSHOT_INSTR_APPEND: case BGE_WDGT_SNAPSHOT_INSTR_PUSH: case BGE_WDGT_SNAPSHOT_INSTR_TRANSFORM: { GValue arg_values[ARGBUF_SIZE] = { 0 }; guint n_arg_values = 0; GValue rest_values[ARGBUF_SIZE] = { 0 }; guint n_rest_values = 0; n_arg_values = MIN (call->args->len, G_N_ELEMENTS (arg_values)); n_rest_values = MIN (call->rest->len, G_N_ELEMENTS (rest_values)); for (guint j = 0; j < n_arg_values; j++) { ValueData *value = NULL; GtkExpression *expression = NULL; value = g_ptr_array_index (call->args, j); expression = g_hash_table_lookup (self->active_state->expressions, value); result = gtk_expression_evaluate (expression, self, &arg_values[j]); if (!result) return FALSE; } for (guint j = 0; j < n_rest_values; j++) { ValueData *value = NULL; GtkExpression *expression = NULL; value = g_ptr_array_index (call->rest, j); expression = g_hash_table_lookup (self->active_state->expressions, value); result = gtk_expression_evaluate (expression, self, &rest_values[j]); if (!result) return FALSE; } call->func (snapshot, arg_values, rest_values, n_rest_values); for (guint j = 0; j < n_rest_values; j++) { g_value_unset (&rest_values[j]); } for (guint j = 0; j < n_arg_values; j++) { g_value_unset (&arg_values[j]); } } break; case BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD: { GtkExpression *expression = NULL; GValue child_value = G_VALUE_INIT; GtkWidget *child = NULL; expression = g_hash_table_lookup ( self->active_state->expressions, call->child); gtk_expression_evaluate (expression, self, &child_value); child = g_value_get_object (&child_value); if (child != NULL) { if (gtk_widget_get_parent (child) == GTK_WIDGET (self)) gtk_widget_snapshot_child (GTK_WIDGET (self), child, snapshot); else g_critical ("Trying to snapshot a widget which is " "not a direct child of this spec! Skipping"); } g_value_unset (&child_value); } break; default: break; } } } } return TRUE; } static void bge_wdgt_renderer_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BgeWdgtRenderer *self = BGE_WDGT_RENDERER (widget); GPtrArray *calls = NULL; guint call_idx = 0; if (self->active_state == NULL || self->active_instance == NULL || self->active_snapshot == NULL) goto done; calls = self->active_snapshot->calls; recurse_snapshot (self, snapshot, calls, &call_idx, NULL, NULL, FALSE); done: if (self->child != NULL) gtk_widget_snapshot_child (GTK_WIDGET (self), self->child, snapshot); // for (guint i = 0; i < self->children->len; i++) // { // GtkWidget *child = NULL; // // child = g_ptr_array_index (self->children, i); // gtk_widget_snapshot_child (GTK_WIDGET (self), child, snapshot); // } } static void bge_wdgt_renderer_class_init (BgeWdgtRendererClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bge_wdgt_renderer_set_property; object_class->get_property = bge_wdgt_renderer_get_property; object_class->dispose = bge_wdgt_renderer_dispose; renderer_props[RENDERER_PROP_SPEC] = g_param_spec_object ( "spec", NULL, NULL, BGE_TYPE_WDGT_SPEC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); renderer_props[RENDERER_PROP_RESOURCE] = g_param_spec_string ( "resource", NULL, NULL, NULL, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); renderer_props[RENDERER_PROP_STATE] = g_param_spec_string ( "state", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); renderer_props[RENDERER_PROP_REFERENCE] = g_param_spec_object ( "reference", NULL, NULL, G_TYPE_OBJECT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); renderer_props[RENDERER_PROP_CHILD] = g_param_spec_object ( "child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_RENDERER_PROP, renderer_props); widget_class->measure = bge_wdgt_renderer_measure; widget_class->size_allocate = bge_wdgt_renderer_size_allocate; widget_class->snapshot = bge_wdgt_renderer_snapshot; g_type_ensure (BGE_TYPE_WDGT_NOTIFIER); } static gboolean tick_cb (BgeWdgtRenderer *self, GdkFrameClock *frame_clock, gpointer user_data) { gboolean should_animate = FALSE; GHashTableIter iter = { 0 }; gboolean finished_all_state_transitions = TRUE; self->had_tick_since_state_switch = TRUE; g_object_notify_by_pspec ( G_OBJECT (self->tick_time_notifier), notifier_props[NOTIFIER_PROP_VALUE]); should_animate = bge_should_animate (GTK_WIDGET (self)); for (guint i = 0; i < self->track_transitions->len;) { TrackTransitionClosureData *data = NULL; double elapsed = 0.0; data = g_ptr_array_index (self->track_transitions, i); elapsed = g_timer_elapsed (data->timer, NULL); g_object_notify_by_pspec ( G_OBJECT (data->notifier), notifier_props[NOTIFIER_PROP_VALUE]); if (should_animate && elapsed <= data->spring.est_duration) i++; else g_ptr_array_remove_index (self->track_transitions, i); } if (should_animate && self->spec != NULL && self->active_state != NULL && self->active_instance != NULL && self->last_state != NULL && self->last_instance != NULL) { double elapsed = 0.0; elapsed = g_timer_elapsed (self->since_last_state, NULL); g_hash_table_iter_init (&iter, self->active_state->transitions); for (;;) { ValueData *value = NULL; TransitionData *transition = NULL; TransitionInstanceData *transition_instance = NULL; TransitionInstanceData *init_transition_instance = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &value, (gpointer *) &transition)) break; transition_instance = g_hash_table_lookup (self->active_instance->transitions, value); if (transition_instance != NULL) g_object_notify_by_pspec ( G_OBJECT (transition_instance->notifier), notifier_props[NOTIFIER_PROP_VALUE]); init_transition_instance = g_hash_table_lookup (self->init_instance->transitions, value); if (init_transition_instance != NULL) g_object_notify_by_pspec ( G_OBJECT (init_transition_instance->notifier), notifier_props[NOTIFIER_PROP_VALUE]); switch (transition->kind) { case TRANSITION_EASE: if (elapsed <= transition_instance->ease.seconds) finished_all_state_transitions = FALSE; break; case TRANSITION_SPRING: if (transition_instance->spring.est_duration < 0.0 || elapsed <= transition_instance->spring.est_duration) finished_all_state_transitions = FALSE; break; default: g_assert_not_reached (); } } } if (finished_all_state_transitions) { g_clear_pointer (&self->last_state, state_data_unref); g_clear_pointer (&self->last_instance, state_instance_data_unref); } if ((self->active_state == NULL || !self->active_state->needs_tick) && self->track_transitions->len == 0 && finished_all_state_transitions) { gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->tick); self->tick = 0; return G_SOURCE_REMOVE; } return G_SOURCE_CONTINUE; } static void bge_wdgt_renderer_init (BgeWdgtRenderer *self) { self->init_watches = g_ptr_array_new_with_free_func (discard_watch); self->objects = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, g_object_unref); self->children = g_ptr_array_new_with_free_func ( (GDestroyNotify) gtk_widget_unparent); self->nonchildren = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_object_unref); self->allocations = g_hash_table_new_full ( g_direct_hash, g_direct_equal, g_object_unref, allocation_data_unref); self->foreach_instances = g_hash_table_new_full ( g_direct_hash, g_direct_equal, foreach_data_unref, NULL); self->state_instances = g_hash_table_new_full ( g_direct_hash, g_direct_equal, state_data_unref, state_instance_data_unref); self->transition_instances = g_hash_table_new_full ( g_direct_hash, g_direct_equal, transition_data_unref, transition_instance_data_unref); self->transition_closure_instances = g_hash_table_new_full ( g_direct_hash, g_direct_equal, transition_data_unref, transition_closure_data_unref); self->track_transition_closure_instances = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, track_transition_closure_data_unref); self->track_transitions = g_ptr_array_new_with_free_func ( track_transition_closure_data_unref); self->bindings = g_ptr_array_new_with_free_func (discard_binding); self->watches = g_ptr_array_new_with_free_func (discard_watch); self->since_last_state = g_timer_new (); self->tick_time = g_timer_new (); self->reference_notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); self->measure_for_size_notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); self->widget_width_notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); self->widget_height_notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); self->tick_time_notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); } BgeWdgtRenderer * bge_wdgt_renderer_new (void) { return g_object_new (BGE_TYPE_WDGT_RENDERER, NULL); } BgeWdgtSpec * bge_wdgt_renderer_get_spec (BgeWdgtRenderer *self) { g_return_val_if_fail (BGE_IS_WDGT_RENDERER (self), NULL); return self->spec; } const char * bge_wdgt_renderer_get_state (BgeWdgtRenderer *self) { g_return_val_if_fail (BGE_IS_WDGT_RENDERER (self), NULL); return self->state; } GObject * bge_wdgt_renderer_get_reference (BgeWdgtRenderer *self) { g_return_val_if_fail (BGE_IS_WDGT_RENDERER (self), NULL); return self->reference; } GtkWidget * bge_wdgt_renderer_get_child (BgeWdgtRenderer *self) { g_return_val_if_fail (BGE_IS_WDGT_RENDERER (self), NULL); return self->child; } void bge_wdgt_renderer_set_spec (BgeWdgtRenderer *self, BgeWdgtSpec *spec) { GBinding *name_binding = NULL; g_return_if_fail (BGE_IS_WDGT_RENDERER (self)); g_return_if_fail (spec == NULL || BGE_IS_WDGT_SPEC (spec)); if (spec == self->spec) return; g_clear_pointer (&self->spec, g_object_unref); if (spec != NULL) self->spec = g_object_ref (spec); regenerate (self); apply_state (self); if (spec != NULL) { name_binding = g_object_bind_property (spec, "name", self, "name", G_BINDING_SYNC_CREATE); g_ptr_array_add (self->bindings, g_object_ref (name_binding)); } else gtk_widget_set_name (GTK_WIDGET (self), NULL); g_object_notify_by_pspec (G_OBJECT (self), renderer_props[RENDERER_PROP_SPEC]); } void bge_wdgt_renderer_set_state (BgeWdgtRenderer *self, const char *state) { g_return_if_fail (BGE_IS_WDGT_RENDERER (self)); if (state == self->state || (state != NULL && self->state != NULL && g_strcmp0 (state, self->state) == 0)) return; g_clear_pointer (&self->state, g_free); if (state != NULL) self->state = g_strdup (state); apply_state (self); g_object_notify_by_pspec (G_OBJECT (self), renderer_props[RENDERER_PROP_STATE]); } void bge_wdgt_renderer_set_reference (BgeWdgtRenderer *self, GObject *reference) { g_return_if_fail (BGE_IS_WDGT_RENDERER (self)); if (reference == self->reference) return; g_clear_pointer (&self->reference, g_object_unref); if (reference != NULL) self->reference = g_object_ref (reference); g_object_notify_by_pspec (G_OBJECT (self), renderer_props[RENDERER_PROP_REFERENCE]); g_object_notify_by_pspec (G_OBJECT (self->reference_notifier), notifier_props[NOTIFIER_PROP_VALUE]); } void bge_wdgt_renderer_set_child (BgeWdgtRenderer *self, GtkWidget *child) { g_return_if_fail (BGE_IS_WDGT_RENDERER (self)); if (self->child == child) return; if (child != NULL) g_return_if_fail (gtk_widget_get_parent (child) == NULL); g_clear_pointer (&self->child, gtk_widget_unparent); self->child = child; if (child != NULL) gtk_widget_set_parent (child, GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), renderer_props[RENDERER_PROP_CHILD]); } void bge_wdgt_renderer_set_state_take (BgeWdgtRenderer *self, char *state) { g_return_if_fail (BGE_IS_WDGT_RENDERER (self)); if (state != NULL && self->state != NULL && g_strcmp0 (state, self->state) == 0) { g_free (state); return; } g_clear_pointer (&self->state, g_free); if (state != NULL) self->state = state; g_object_notify_by_pspec (G_OBJECT (self), renderer_props[RENDERER_PROP_STATE]); } gpointer bge_wdgt_renderer_lookup_object (BgeWdgtRenderer *self, const char *name) { ValueData *value = NULL; g_return_val_if_fail (BGE_IS_WDGT_RENDERER (self), NULL); g_return_val_if_fail (name != NULL, NULL); if (self->spec == NULL) return NULL; value = g_hash_table_lookup (self->spec->values, name); if (value == NULL) return NULL; if (!g_type_is_a (value->type, G_TYPE_OBJECT)) return NULL; return resolve_value_object_dup ( self, value, self->active_state != NULL ? self->active_state : self->spec->init_state); } static void regenerate (BgeWdgtRenderer *self) { BgeWdgtSpec *spec = self->spec; g_autoptr (GtkBuilder) dummy_builder = NULL; GHashTableIter state_iter = { 0 }; GHashTableIter setters_iter = { 0 }; g_clear_pointer (&self->init_instance, state_instance_data_unref); g_ptr_array_set_size (self->init_watches, 0); g_hash_table_remove_all (self->state_instances); g_hash_table_remove_all (self->objects); g_ptr_array_set_size (self->children, 0); g_ptr_array_set_size (self->nonchildren, 0); g_hash_table_remove_all (self->allocations); g_hash_table_remove_all (self->foreach_instances); g_ptr_array_set_size (self->track_transitions, 0); g_clear_pointer (&self->last_state, state_data_unref); g_clear_pointer (&self->last_instance, state_instance_data_unref); g_clear_pointer (&self->active_state, state_data_unref); g_clear_pointer (&self->active_instance, state_instance_data_unref); g_clear_pointer (&self->active_snapshot, snapshot_data_unref); g_ptr_array_set_size (self->bindings, 0); g_ptr_array_set_size (self->watches, 0); self->measure_minimum_width = -1; self->measure_natural_width = -1; self->measure_minimum_height = -1; self->measure_natural_height = -1; if (self->spec == NULL) return; for (guint i = 0; i < spec->foreaches->len; i++) { ForeachData *data = NULL; g_autoptr (ForeachInstanceData) foreach_instance = NULL; data = g_ptr_array_index (spec->foreaches, i); foreach_instance = foreach_instance_data_new (); foreach_instance->notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); g_hash_table_replace (self->foreach_instances, foreach_data_ref (data), foreach_instance_data_ref (foreach_instance)); } for (guint i = 0; i < spec->nonchildren->len; i++) { ValueData *value = NULL; value = g_ptr_array_index (spec->nonchildren, i); spawn_nonchild (self, value); } dummy_builder = gtk_builder_new (); for (guint i = 0; i < spec->children->len; i++) { ValueData *value = NULL; value = g_ptr_array_index (spec->children, i); spawn_child (self, value, dummy_builder); } g_hash_table_iter_init (&state_iter, spec->states); for (;;) { char *state_name = NULL; StateData *state = NULL; g_autoptr (StateInstanceData) instance = NULL; GHashTableIter transitions_iter = { 0 }; if (!g_hash_table_iter_next ( &state_iter, (gpointer *) &state_name, (gpointer *) &state)) break; instance = state_instance_data_new (); instance->transitions = g_hash_table_new_full ( g_direct_hash, g_direct_equal, value_data_unref, transition_instance_data_unref); g_hash_table_replace (self->state_instances, state_data_ref (state), state_instance_data_ref (instance)); g_hash_table_iter_init (&transitions_iter, state->transitions); for (;;) { ValueData *value = NULL; TransitionData *transition = NULL; g_autoptr (BgeWdgtNotifier) notifier_object = NULL; g_autoptr (TransitionInstanceData) instance_data = NULL; g_autoptr (TransitionClosureData) closure_data = NULL; if (!g_hash_table_iter_next ( &transitions_iter, (gpointer *) &value, (gpointer *) &transition)) break; notifier_object = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); instance_data = transition_instance_data_new (); instance_data->notifier = g_object_ref (notifier_object); switch (transition->kind) { case TRANSITION_EASE: instance_data->elapsed = G_MAXINT; break; case TRANSITION_SPRING: instance_data->spring.est_duration = -1.0; break; default: g_assert_not_reached (); } g_hash_table_replace (instance->transitions, value_data_ref (value), transition_instance_data_ref (instance_data)); g_hash_table_replace (self->transition_instances, transition_data_ref (transition), transition_instance_data_ref (instance_data)); closure_data = transition_closure_data_new (); closure_data->state = state_data_ref (state); closure_data->instance = state_instance_data_ref (instance); closure_data->value = value_data_ref (value); g_hash_table_replace (self->transition_closure_instances, transition_data_ref (transition), transition_closure_data_ref (closure_data)); } for (guint i = 0; i < spec->track_transition_values->len; i++) { ValueData *value = NULL; g_autoptr (TrackTransitionClosureData) closure_data = NULL; value = g_ptr_array_index (spec->track_transition_values, i); closure_data = track_transition_closure_data_new (); closure_data->value = value_data_ref (value); closure_data->timer = g_timer_new (); closure_data->notifier = g_object_new (BGE_TYPE_WDGT_NOTIFIER, NULL); g_hash_table_replace (self->track_transition_closure_instances, value_data_ref (value), track_transition_closure_data_ref (closure_data)); } if (state == spec->init_state) self->init_instance = state_instance_data_ref (instance); } /* Separate to ensure `self->init_instance` has been set */ if (!spec->ready) { g_hash_table_iter_init (&state_iter, spec->states); for (;;) { GHashTableIter value_iter = { 0 }; char *state_name = NULL; StateData *state = NULL; if (!g_hash_table_iter_next ( &state_iter, (gpointer *) &state_name, (gpointer *) &state)) break; g_hash_table_iter_init (&value_iter, spec->values); for (;;) { char *value_name = NULL; ValueData *value = NULL; g_autoptr (GtkExpression) expression = NULL; if (!g_hash_table_iter_next ( &value_iter, (gpointer *) &value_name, (gpointer *) &value)) break; expression = ensure_expressions (spec, value, state, NULL); } for (guint i = 0; i < spec->anon_values->len; i++) { ValueData *value = NULL; g_autoptr (GtkExpression) expression = NULL; value = g_ptr_array_index (spec->anon_values, i); expression = ensure_expressions (spec, value, state, NULL); } for (guint i = 0; i < spec->foreaches->len; i++) { ForeachData *data = NULL; data = g_ptr_array_index (spec->foreaches, i); { g_autoptr (GtkExpression) expression = ensure_expressions (spec, data->model, state, NULL); } g_hash_table_iter_init (&value_iter, data->values); for (;;) { char *value_name = NULL; ValueData *value = NULL; g_autoptr (GtkExpression) expression = NULL; if (!g_hash_table_iter_next ( &value_iter, (gpointer *) &value_name, (gpointer *) &value)) break; expression = ensure_expressions (spec, value, state, NULL); } } } g_hash_table_iter_init (&state_iter, spec->states); for (;;) { char *state_name = NULL; StateData *state = NULL; StateData *snapshot_state = NULL; if (!g_hash_table_iter_next ( &state_iter, (gpointer *) &state_name, (gpointer *) &state)) break; g_hash_table_iter_init ( &setters_iter, state->setters); for (;;) { ValueData *dest = NULL; ValueData *src = NULL; if (!g_hash_table_iter_next ( &setters_iter, (gpointer *) &dest, (gpointer *) &src)) break; if (g_hash_table_contains (state->values_need_tick, src)) state->needs_tick = TRUE; } if (state->snapshot != NULL) snapshot_state = state; else /* If this state doesn't have snapshot instructions specified, fallback on using the init state */ snapshot_state = self->spec->init_state; for (guint i = 0; i < snapshot_state->snapshot->calls->len; i++) { SnapshotCallData *call = NULL; call = g_ptr_array_index (snapshot_state->snapshot->calls, i); if (call->args == NULL) /* pop, save, restore... */ continue; for (guint j = 0; j < call->args->len; j++) { ValueData *arg = NULL; gboolean found = FALSE; GtkExpression *expression = NULL; arg = g_ptr_array_index (call->args, j); expression = g_hash_table_lookup (state->expressions, arg); g_assert (expression != NULL); for (guint k = 0; k < state->snapshot_deps->len; k++) { GtkExpression *other = NULL; other = g_ptr_array_index (state->snapshot_deps, k); if (expression == other) { found = TRUE; break; } } if (found) /* Ensure we don't duplicate deps */ continue; if (g_hash_table_contains (state->values_need_tick, arg)) state->needs_tick = TRUE; g_ptr_array_add (state->snapshot_deps, gtk_expression_ref (expression)); } } } spec->ready = TRUE; } g_hash_table_iter_init ( &setters_iter, self->spec->init_state->setters); for (;;) { ValueData *dest = NULL; ValueData *src = NULL; if (!g_hash_table_iter_next ( &setters_iter, (gpointer *) &dest, (gpointer *) &src)) break; set_value ( self, self->spec->init_state, self->init_instance, dest, src, self->init_watches); } gtk_widget_queue_allocate (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void spawn_nonchild (BgeWdgtRenderer *self, ValueData *value) { g_autoptr (GObject) object = NULL; g_assert (value->kind == VALUE_OBJECT); object = g_object_new (value->type, NULL); if (g_type_is_a (value->type, G_TYPE_INITIALLY_UNOWNED)) g_object_ref_sink (object); g_hash_table_replace (self->objects, value_data_ref (value), g_object_ref (object)); g_ptr_array_add (self->nonchildren, g_object_ref (object)); } static void spawn_child (BgeWdgtRenderer *self, ValueData *value, GtkBuilder *dummy_builder) { GtkWidget *widget = NULL; g_autoptr (AllocationData) allocation = NULL; g_assert (value->kind == VALUE_CHILD); widget = g_object_new ( value->type, "name", value->name, NULL); if (value->child.css_classes != NULL) { for (guint j = 0; j < value->child.css_classes->len; j++) { const char *class = NULL; class = g_ptr_array_index (value->child.css_classes, j); gtk_widget_add_css_class (widget, class); } } if (value->child.parent_widget != NULL) { GtkWidget *parent_widget = NULL; g_autoptr (GtkBuilder) tmp_builder = NULL; parent_widget = g_hash_table_lookup ( self->objects, value->child.parent_widget); g_assert (parent_widget != NULL); if (dummy_builder == NULL) tmp_builder = gtk_builder_new (); GTK_BUILDABLE_GET_IFACE (parent_widget) ->add_child ( GTK_BUILDABLE (parent_widget), dummy_builder != NULL ? dummy_builder : tmp_builder, G_OBJECT (widget), value->child.builder_type); } else { gtk_widget_set_parent (widget, GTK_WIDGET (self)); g_ptr_array_add (self->children, g_object_ref (widget)); } g_hash_table_replace (self->objects, value_data_ref (value), g_object_ref (widget)); allocation = allocation_data_new (); g_hash_table_replace (self->allocations, g_object_ref (widget), allocation_data_ref (allocation)); } static void apply_state (BgeWdgtRenderer *self) { BgeWdgtSpec *spec = self->spec; StateData *state = NULL; StateInstanceData *instance = NULL; GHashTableIter iter = { 0 }; if (self->had_tick_since_state_switch) { g_clear_pointer (&self->last_state, state_data_unref); g_clear_pointer (&self->last_instance, state_instance_data_unref); if (self->active_state != NULL && self->active_instance != NULL) { self->last_state = g_steal_pointer (&self->active_state); self->last_instance = g_steal_pointer (&self->active_instance); } g_timer_start (self->since_last_state); self->had_tick_since_state_switch = FALSE; } g_clear_pointer (&self->active_state, state_data_unref); g_clear_pointer (&self->active_instance, state_instance_data_unref); g_clear_pointer (&self->active_snapshot, snapshot_data_unref); g_ptr_array_set_size (self->bindings, 0); g_ptr_array_set_size (self->watches, 0); gtk_widget_queue_draw (GTK_WIDGET (self)); if (self->spec == NULL || self->state == NULL) return; state = g_hash_table_lookup (spec->states, self->state); if (state == NULL) { g_critical ("state \"%s\" doesn't exist on spec \"%s\"", self->state, spec->name); return; } instance = g_hash_table_lookup (self->state_instances, state); g_assert (instance != NULL); self->active_state = state_data_ref (state); self->active_instance = state_instance_data_ref (instance); if (state->snapshot != NULL) self->active_snapshot = snapshot_data_ref (state->snapshot); else if (self->spec->init_state->snapshot != NULL) self->active_snapshot = snapshot_data_ref (self->spec->init_state->snapshot); g_hash_table_iter_init (&iter, state->setters); for (;;) { ValueData *dest = NULL; ValueData *src = NULL; TransitionInstanceData *transition_instance = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &dest, (gpointer *) &src)) break; set_value ( self, state, instance, dest, src, self->watches); transition_instance = g_hash_table_lookup (instance->transitions, dest); if (transition_instance != NULL) transition_instance->spring.est_duration = -1.0; } g_hash_table_iter_init (&iter, spec->init_state->setters); for (;;) { ValueData *dest = NULL; ValueData *src = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &dest, (gpointer *) &src)) break; set_value ( self, state, instance, dest, src, self->watches); } for (guint i = 0; i < state->snapshot_deps->len; i++) { GtkExpression *expression = NULL; GtkExpressionWatch *watch = NULL; expression = g_ptr_array_index (state->snapshot_deps, i); watch = gtk_expression_watch ( expression, self, (GtkExpressionNotify) prop_change_queue_draw, self, NULL); g_ptr_array_add (self->watches, watch); } gtk_widget_queue_allocate (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); if (self->tick == 0) self->tick = gtk_widget_add_tick_callback ( GTK_WIDGET (self), (GtkTickCallback) tick_cb, NULL, NULL); } static graphene_point_t * expression_create_point (gpointer object, double x, double y, gpointer user_data) { graphene_point_t *point = NULL; point = graphene_point_alloc (); point->x = x; point->y = y; return point; } static graphene_size_t * expression_create_size (gpointer object, double width, double height, gpointer user_data) { graphene_size_t *size = NULL; size = graphene_size_alloc (); size->width = width; size->height = height; return size; } static graphene_point3d_t * expression_create_point3d (gpointer object, double x, double y, double z, gpointer user_data) { graphene_point3d_t *point3d = NULL; point3d = graphene_point3d_alloc (); point3d->x = x; point3d->y = y; point3d->z = z; return point3d; } static graphene_rect_t * expression_create_rect (gpointer object, double x, double y, double width, double height, gpointer user_data) { graphene_rect_t *rect = NULL; rect = graphene_rect_alloc (); rect->origin.x = x; rect->origin.y = y; rect->size.width = width; rect->size.height = height; return rect; } static GskStroke * expression_create_stroke (gpointer object, double line_width, GskLineCap line_cap, GskLineJoin line_join, double miter_limit, gpointer user_data) { GskStroke *stroke = NULL; stroke = gsk_stroke_new (line_width); gsk_stroke_set_line_cap (stroke, line_cap); gsk_stroke_set_line_join (stroke, line_join); gsk_stroke_set_miter_limit (stroke, miter_limit); return stroke; } static void expression_coerce_type (gpointer this, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer dest_type_ptr) { GType dest_type = GPOINTER_TO_SIZE (dest_type_ptr); coerce_value (¶m_values[0], dest_type, return_value); } static gpointer expression_lookup_object (BgeWdgtRenderer *this, ValueData *value) { return g_object_ref (g_hash_table_lookup (this->objects, value)); } static gpointer expression_get_reference_notifier (BgeWdgtRenderer *this, gpointer user_data) { return g_object_ref (this->reference_notifier); } static gpointer expression_get_measure_for_size_notifier (BgeWdgtRenderer *this, gpointer user_data) { return g_object_ref (this->measure_for_size_notifier); } static gpointer expression_get_widget_width_notifier (BgeWdgtRenderer *this, gpointer user_data) { return g_object_ref (this->widget_width_notifier); } static gpointer expression_get_widget_height_notifier (BgeWdgtRenderer *this, gpointer user_data) { return g_object_ref (this->widget_height_notifier); } static gpointer expression_get_tick_time_notifier (BgeWdgtRenderer *this, gpointer user_data) { return g_object_ref (this->tick_time_notifier); } static gpointer expression_get_foreach_instance_notifier (BgeWdgtRenderer *this, ForeachData *data) { ForeachInstanceData *instance = NULL; instance = g_hash_table_lookup (this->foreach_instances, data); g_assert (instance != NULL); return g_object_ref (instance->notifier); } static gpointer expression_get_transition_instance_notifier (BgeWdgtRenderer *this, TransitionData *data) { TransitionInstanceData *instance = NULL; instance = g_hash_table_lookup (this->transition_instances, data); g_assert (instance != NULL); return g_object_ref (instance->notifier); } static gpointer expression_get_track_transition_closure_instance_notifier (BgeWdgtRenderer *this, ValueData *value) { TrackTransitionClosureData *instance = NULL; instance = g_hash_table_lookup (this->track_transition_closure_instances, value); g_assert (instance != NULL); return g_object_ref (instance->notifier); } static guint expression_get_foreach_index (BgeWdgtRenderer *this, double notify, ForeachData *data) { ForeachInstanceData *instance = NULL; instance = g_hash_table_lookup (this->foreach_instances, data); g_assert (instance != NULL); return instance->current_idx; } static gpointer expression_get_model_item (BgeWdgtRenderer *this, GListModel *model, guint idx, double notify, gpointer user_data) { return g_list_model_get_item (model, idx); } static int expression_get_measure_for_size (BgeWdgtRenderer *this, double notify, gpointer user_data) { return this->current_measure_for_size; } static double expression_get_widget_width (BgeWdgtRenderer *this, double notify, gpointer user_data) { return (double) this->widget_width; } static double expression_get_widget_height (BgeWdgtRenderer *this, double notify, gpointer user_data) { return (double) this->widget_height; } static double expression_get_tick_time (BgeWdgtRenderer *this, double notify, gpointer user_data) { return g_timer_elapsed (this->tick_time, NULL); } static gpointer expression_get_reference_object (BgeWdgtRenderer *this, double notify, gpointer user_data) { return this->reference != NULL ? g_object_ref (this->reference) : NULL; } static double expression_adjust_state_transition (BgeWdgtRenderer *this, double in, double notifier, TransitionData *data) { TransitionClosureData *closure_data = NULL; TransitionData *transition = NULL; TransitionData *last_transition = NULL; TransitionInstanceData *transition_instance = NULL; TransitionInstanceData *last_transition_instance = NULL; ValueData *last_in_value = NULL; double last_in = 0.0; double elapsed = 0.0; double progress = 0.0; double interpolated_number = 0.0; closure_data = g_hash_table_lookup (this->transition_closure_instances, data); g_assert (closure_data != NULL); g_assert (closure_data->value->type == G_TYPE_DOUBLE); if (!bge_should_animate (GTK_WIDGET (this))) return in; if (this->active_state == NULL || this->active_instance == NULL || this->last_state == NULL || this->last_instance == NULL) return in; transition = g_hash_table_lookup ( this->active_state->transitions, closure_data->value); if (transition == NULL) return in; last_transition = g_hash_table_lookup ( this->last_state->transitions, closure_data->value); transition_instance = g_hash_table_lookup ( this->active_instance->transitions, closure_data->value); g_assert (transition_instance != NULL); last_transition_instance = g_hash_table_lookup ( this->last_instance->transitions, closure_data->value); if (last_transition != NULL && last_transition_instance != NULL && last_transition->kind == TRANSITION_EASE && last_transition_instance->elapsed < last_transition_instance->ease.seconds) last_in = last_transition_instance->value; else { last_in_value = g_hash_table_lookup (this->last_state->setters, closure_data->value); if (last_in_value == NULL) return in; last_in = resolve_value_double (this, last_in_value, this->last_state); } elapsed = g_timer_elapsed (this->since_last_state, NULL); transition_instance->elapsed = elapsed; switch (transition->kind) { case TRANSITION_EASE: { BgeEasing easing = 0; double seconds = 0.0; easing = resolve_value_enum ( this, transition->ease.easing, this->active_state); seconds = resolve_value_double ( this, transition->ease.seconds, this->active_state); if (elapsed >= seconds) interpolated_number = in; else { progress = bge_easing_ease (easing, elapsed / seconds); interpolated_number = last_in + progress * (in - last_in); } transition_instance->ease.easing = easing; transition_instance->ease.seconds = seconds; } break; case TRANSITION_SPRING: { double damping_ratio = 0.0; double mass = 0.0; double stiffness = 0.0; double damping = 0.0; damping_ratio = resolve_value_double ( this, transition->spring.damping_ratio, this->active_state); mass = resolve_value_double ( this, transition->spring.mass, this->active_state); stiffness = resolve_value_double ( this, transition->spring.stiffness, this->active_state); damping = damping_ratio * (/* critical damping */ 2 * sqrt (mass * stiffness)); if (transition_instance->spring.est_duration < 0.0 || damping_ratio != transition_instance->spring.cache_damping_ratio || mass != transition_instance->spring.cache_mass || stiffness != transition_instance->spring.cache_stiffness) { if (last_transition != NULL && last_transition->kind == TRANSITION_SPRING) transition_instance->spring.velocity = last_transition_instance->spring.velocity; else transition_instance->spring.velocity = 0.0; transition_instance->spring.est_duration = spring_calculate_duration ( damping, mass, stiffness, last_in, in, FALSE); transition_instance->spring.cache_damping_ratio = damping_ratio; transition_instance->spring.cache_mass = mass; transition_instance->spring.cache_stiffness = stiffness; } if (elapsed >= transition_instance->spring.est_duration) interpolated_number = in; else interpolated_number = spring_oscillate ( damping, mass, stiffness, last_in, in, elapsed, &transition_instance->spring.velocity); } break; default: g_assert_not_reached (); } transition_instance->value = interpolated_number; return interpolated_number; } static double expression_adjust_track_transition (BgeWdgtRenderer *this, double in, double damping_ratio, double mass, double stiffness, double notifier, ValueData *value) { TrackTransitionClosureData *closure_data = NULL; guint idx = 0; gboolean registered = FALSE; double damping = 0.0; g_assert (value->type == G_TYPE_DOUBLE); if (!bge_should_animate (GTK_WIDGET (this))) return in; closure_data = g_hash_table_lookup (this->track_transition_closure_instances, value); g_assert (closure_data != NULL); registered = g_ptr_array_find (this->track_transitions, closure_data, &idx); if (!registered) { g_ptr_array_add (this->track_transitions, track_transition_closure_data_ref (closure_data)); if (this->tick == 0) this->tick = gtk_widget_add_tick_callback ( GTK_WIDGET (this), (GtkTickCallback) tick_cb, NULL, NULL); } damping = damping_ratio * (/* critical damping */ 2 * sqrt (mass * stiffness)); if (!registered || closure_data->target != in || damping_ratio != closure_data->spring.cache_damping_ratio || mass != closure_data->spring.cache_mass || stiffness != closure_data->spring.cache_stiffness) { closure_data->target = in; closure_data->last = closure_data->current; closure_data->elapsed = 0.0; g_timer_start (closure_data->timer); closure_data->spring.est_duration = spring_calculate_duration ( damping, mass, stiffness, closure_data->last, closure_data->target, FALSE); closure_data->spring.cache_damping_ratio = damping_ratio; closure_data->spring.cache_mass = mass; closure_data->spring.cache_stiffness = stiffness; } else closure_data->elapsed = g_timer_elapsed (closure_data->timer, NULL); if (closure_data->elapsed >= closure_data->spring.est_duration) { closure_data->current = closure_data->target; closure_data->last = closure_data->target; } else closure_data->current = spring_oscillate ( damping, mass, stiffness, closure_data->last, closure_data->target, closure_data->elapsed, &closure_data->spring.velocity); return closure_data->current; } static GskTransform * expression_perform_transform (gpointer this, guint n_param_values, const GValue *param_values, TransformCallFunc func) { return func (g_value_dup_boxed (¶m_values[0]), param_values + 1); } static GskPath * expression_perform_path_build (gpointer this, guint n_param_values, const GValue *param_values, ValueData *path_value) { g_autoptr (GskPathBuilder) builder = NULL; const GValue *cursor = 0; g_assert (path_value->kind == VALUE_PATH); builder = gsk_path_builder_new (); cursor = param_values; for (guint i = 0; i < path_value->path.argss->len; i++) { PathBuilderCallFunc func = NULL; GPtrArray *args = NULL; func = g_ptr_array_index (path_value->path.funcs, i); args = g_ptr_array_index (path_value->path.argss, i); func (builder, cursor); cursor += args->len; } return gsk_path_builder_to_path (builder); } static GtkExpression * ensure_expressions (BgeWdgtSpec *self, ValueData *value, StateData *state, gboolean *value_needs_tick) { GtkExpression *cached = NULL; g_autoptr (GtkExpression) expression = NULL; TransitionData *transition = NULL; gboolean need_tick = FALSE; cached = g_hash_table_lookup (state->expressions, value); if (cached != NULL) { if (value_needs_tick != NULL && g_hash_table_contains (state->values_need_tick, value)) *value_needs_tick = TRUE; return gtk_expression_ref (cached); } switch (value->kind) { case VALUE_CONSTANT: expression = gtk_constant_expression_new_for_value (&value->constant.value); break; case VALUE_OBJECT: case VALUE_CHILD: expression = gtk_cclosure_expression_new ( value->type, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_lookup_object), value_data_ref (value), value_data_unref_closure); break; case VALUE_REFERENCE_OBJECT: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_reference_notifier), NULL, NULL); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_OBJECT__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_reference_object), GSIZE_TO_POINTER (value->type), NULL); } break; case VALUE_ITERATOR: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_foreach_instance_notifier), foreach_data_ref (value->iterator.context), foreach_data_unref_closure); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( G_TYPE_UINT, bge_marshal_UINT__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_foreach_index), foreach_data_ref (value->iterator.context), foreach_data_unref_closure); if (value->type != G_TYPE_UINT) { GtkExpression *model_expression = NULL; g_assert (g_type_is_a (value->type, G_TYPE_OBJECT)); model_expression = ensure_expressions ( self, value->iterator.context->model, state, &need_tick); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_OBJECT__OBJECT_UINT_DOUBLE, 3, (GtkExpression *[]){ model_expression, expression, notify_expression }, G_CALLBACK (expression_get_model_item), NULL, NULL); } } break; case VALUE_VARIABLE: case VALUE_ALLOCATION_WIDTH: case VALUE_ALLOCATION_HEIGHT: case VALUE_ALLOCATION_TRANSFORM: case VALUE_MEASURE_MINIMUM_WIDTH: case VALUE_MEASURE_NATURAL_WIDTH: case VALUE_MEASURE_MINIMUM_HEIGHT: case VALUE_MEASURE_NATURAL_HEIGHT: { ValueData *holds = NULL; holds = g_hash_table_lookup (state->setters, value); if (holds == NULL) holds = g_hash_table_lookup (self->init_state->setters, value); if (holds != NULL) expression = ensure_expressions ( self, holds, state, &need_tick); else { GValue empty_value = G_VALUE_INIT; g_value_init (&empty_value, value->type); expression = gtk_constant_expression_new_for_value (&empty_value); g_value_unset (&empty_value); } } break; case VALUE_MEASURE_FOR_SIZE: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_measure_for_size_notifier), NULL, NULL); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_INT__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_measure_for_size), GSIZE_TO_POINTER (value->type), NULL); } break; case VALUE_WIDGET_WIDTH: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_widget_width_notifier), NULL, NULL); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_DOUBLE__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_widget_width), GSIZE_TO_POINTER (value->type), NULL); } break; case VALUE_WIDGET_HEIGHT: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_widget_height_notifier), NULL, NULL); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_DOUBLE__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_widget_height), GSIZE_TO_POINTER (value->type), NULL); } break; case VALUE_TICK_TIME: { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_tick_time_notifier), NULL, NULL); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_DOUBLE__DOUBLE, 1, (GtkExpression *[]){ notify_expression }, G_CALLBACK (expression_get_tick_time), GSIZE_TO_POINTER (value->type), NULL); need_tick = TRUE; } break; case VALUE_COERCION: { expression = ensure_expressions ( self, value->coercion.value, state, &need_tick); expression = gtk_cclosure_expression_new ( value->type, _marshal_DIRECT__ARGS_DIRECT, 1, (GtkExpression *[]){ expression }, G_CALLBACK (expression_coerce_type), GSIZE_TO_POINTER (value->type), NULL); } break; case VALUE_TRACK_TRANSITION: { g_autoptr (BgeWdgtNotifier) notifier_object = NULL; GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; GtkExpression *damping_ratio_expression = NULL; GtkExpression *mass_expression = NULL; GtkExpression *stiffness_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_track_transition_closure_instance_notifier), value_data_ref (value), value_data_unref_closure); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); damping_ratio_expression = ensure_expressions ( self, value->track_transition.spring.damping_ratio, state, &need_tick); mass_expression = ensure_expressions ( self, value->track_transition.spring.mass, state, &need_tick); stiffness_expression = ensure_expressions ( self, value->track_transition.spring.stiffness, state, &need_tick); expression = ensure_expressions ( self, value->track_transition.src, state, &need_tick); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_DOUBLE__DOUBLE_DOUBLE_DOUBLE_DOUBLE_DOUBLE, 5, (GtkExpression *[]){ expression, damping_ratio_expression, mass_expression, stiffness_expression, notify_expression }, G_CALLBACK (expression_adjust_track_transition), value_data_ref (value), value_data_unref_closure); } break; case VALUE_COMPONENT: { g_autoptr (GPtrArray) params = NULL; GClosureMarshal marshal = NULL; GCallback callback = NULL; params = g_ptr_array_new (); for (guint i = 0; i < value->component.params->len; i++) { ValueData *member = NULL; g_autoptr (GtkExpression) member_expr = NULL; member = g_ptr_array_index (value->component.params, i); member_expr = ensure_expressions (self, member, state, &need_tick); g_ptr_array_add (params, g_steal_pointer (&member_expr)); } if (value->type == GRAPHENE_TYPE_POINT) { marshal = bge_marshal_BOXED__DOUBLE_DOUBLE; callback = G_CALLBACK (expression_create_point); } else if (value->type == GRAPHENE_TYPE_SIZE) { marshal = bge_marshal_BOXED__DOUBLE_DOUBLE; callback = G_CALLBACK (expression_create_size); } else if (value->type == GRAPHENE_TYPE_POINT3D) { marshal = bge_marshal_BOXED__DOUBLE_DOUBLE_DOUBLE; callback = G_CALLBACK (expression_create_point3d); } else if (value->type == GRAPHENE_TYPE_RECT) { marshal = bge_marshal_BOXED__DOUBLE_DOUBLE_DOUBLE_DOUBLE; callback = G_CALLBACK (expression_create_rect); } else if (value->type == GSK_TYPE_STROKE) { marshal = bge_marshal_BOXED__DOUBLE_ENUM_ENUM_DOUBLE; callback = G_CALLBACK (expression_create_stroke); } else g_assert_not_reached (); expression = gtk_cclosure_expression_new ( value->type, marshal, params->len, (GtkExpression **) params->pdata, callback, self, NULL); } break; case VALUE_TRANSFORM: { g_autoptr (GPtrArray) params = NULL; g_autoptr (GtkExpression) next_expr = NULL; params = g_ptr_array_new (); next_expr = ensure_expressions (self, value->transform.next, state, &need_tick); g_ptr_array_add (params, g_steal_pointer (&next_expr)); for (guint i = 0; i < value->transform.args->len; i++) { ValueData *arg = NULL; g_autoptr (GtkExpression) arg_expr = NULL; arg = g_ptr_array_index (value->transform.args, i); arg_expr = ensure_expressions (self, arg, state, &need_tick); g_ptr_array_add (params, g_steal_pointer (&arg_expr)); } expression = gtk_cclosure_expression_new ( value->type, _marshal_BOXED__ARGS_DIRECT, params->len, (GtkExpression **) params->pdata, G_CALLBACK (expression_perform_transform), value->transform.func, NULL); } break; case VALUE_PATH: { g_autoptr (GPtrArray) params = NULL; g_autoptr (GtkExpression) next_expr = NULL; params = g_ptr_array_new (); g_assert (value->path.funcs->len == value->path.argss->len); for (guint i = 0; i < value->path.argss->len; i++) { GPtrArray *args = NULL; args = g_ptr_array_index (value->path.argss, i); for (guint j = 0; j < args->len; j++) { ValueData *arg = NULL; g_autoptr (GtkExpression) arg_expr = NULL; arg = g_ptr_array_index (args, j); arg_expr = ensure_expressions (self, arg, state, &need_tick); g_ptr_array_add (params, g_steal_pointer (&arg_expr)); } } expression = gtk_cclosure_expression_new ( value->type, _marshal_BOXED__ARGS_DIRECT, params->len, (GtkExpression **) params->pdata, G_CALLBACK (expression_perform_path_build), value_data_ref (value), value_data_unref_closure); } break; case VALUE_CLOSURE: { g_autoptr (GPtrArray) params = NULL; params = g_ptr_array_new (); for (guint i = 0; i < value->closure.args->len; i++) { ValueData *arg = NULL; g_autoptr (GtkExpression) arg_expr = NULL; arg = g_ptr_array_index (value->closure.args, i); arg_expr = ensure_expressions (self, arg, state, &need_tick); g_ptr_array_add (params, g_steal_pointer (&arg_expr)); } expression = gtk_cclosure_expression_new ( value->type, value->closure.marshal, params->len, (GtkExpression **) params->pdata, value->closure.func, value->closure.user_data, NULL); } break; case VALUE_PROPERTY: { g_autoptr (GtkExpression) object_expression = NULL; /* Mark subproperty values as dependencies as well */ object_expression = ensure_expressions ( self, value->property.object, state, &need_tick); expression = gtk_property_expression_new ( value->property.object->type, g_steal_pointer (&object_expression), value->property.prop_name); } break; default: g_assert_not_reached (); break; } transition = g_hash_table_lookup (state->transitions, value); if (value->type == G_TYPE_DOUBLE && transition != NULL) { GtkExpression *notifier_constant = NULL; GtkExpression *notify_expression = NULL; notifier_constant = gtk_cclosure_expression_new ( BGE_TYPE_WDGT_NOTIFIER, bge_marshal_OBJECT__VOID, 0, (GtkExpression *[]){}, G_CALLBACK (expression_get_transition_instance_notifier), transition_data_ref (transition), transition_data_unref_closure); notify_expression = gtk_property_expression_new_for_pspec ( notifier_constant, notifier_props[NOTIFIER_PROP_VALUE]); expression = gtk_cclosure_expression_new ( value->type, bge_marshal_DOUBLE__DOUBLE_DOUBLE, 2, (GtkExpression *[]){ expression, notify_expression }, G_CALLBACK (expression_adjust_state_transition), transition_data_ref (transition), transition_data_unref_closure); } g_hash_table_replace ( state->expressions, value_data_ref (value), gtk_expression_ref (expression)); if (need_tick) { /* We need to track this so we know not to remove the animation tick callback when transitions are not active */ g_hash_table_replace ( state->values_need_tick, value_data_ref (value), NULL); if (value_needs_tick != NULL) *value_needs_tick = TRUE; } return gtk_expression_ref (expression); } static void set_value (BgeWdgtRenderer *self, StateData *state, StateInstanceData *instance, ValueData *dest, ValueData *src, GPtrArray *watches) { GtkExpression *src_expression = NULL; GtkExpression *dest_expression = NULL; src_expression = g_hash_table_lookup (state->expressions, src); g_assert (src_expression != NULL); dest_expression = g_hash_table_lookup (state->expressions, dest); g_assert (dest_expression != NULL); switch (dest->kind) { case VALUE_PROPERTY: { GtkExpression *dest_obj_expression = NULL; GValue dest_obj_resolved = G_VALUE_INIT; GObject *dest_obj = NULL; dest_obj_expression = g_hash_table_lookup (state->expressions, dest->property.object); g_assert (dest_obj_expression != NULL); gtk_expression_evaluate ( dest_obj_expression, self, &dest_obj_resolved); dest_obj = g_value_get_object (&dest_obj_resolved); if (dest_obj != NULL) { gboolean resolved = FALSE; GValue src_resolved = G_VALUE_INIT; resolved = gtk_expression_evaluate ( src_expression, self, &src_resolved); if (resolved) g_object_set_property ( dest_obj, dest->property.prop_name, &src_resolved); g_value_unset (&src_resolved); } g_value_unset (&dest_obj_resolved); } break; case VALUE_ALLOCATION_WIDTH: case VALUE_ALLOCATION_HEIGHT: case VALUE_ALLOCATION_TRANSFORM: { GtkExpression *dest_widget_expression = NULL; GValue dest_widget_resolved = G_VALUE_INIT; GtkWidget *dest_widget = NULL; dest_widget_expression = g_hash_table_lookup (state->expressions, dest->allocation.widget); g_assert (dest_widget_expression != NULL); gtk_expression_evaluate ( dest_widget_expression, self, &dest_widget_resolved); dest_widget = g_value_get_object (&dest_widget_resolved); if (dest_widget != NULL) { AllocationData *allocation = NULL; allocation = g_hash_table_lookup (self->allocations, dest_widget); if (allocation != NULL) { switch (dest->kind) { case VALUE_ALLOCATION_WIDTH: g_clear_pointer (&allocation->width, value_data_unref); allocation->width = value_data_ref (src); break; case VALUE_ALLOCATION_HEIGHT: g_clear_pointer (&allocation->height, value_data_unref); allocation->height = value_data_ref (src); break; case VALUE_ALLOCATION_TRANSFORM: g_clear_pointer (&allocation->transform, value_data_unref); allocation->transform = value_data_ref (src); break; case VALUE_CHILD: case VALUE_CLOSURE: case VALUE_COERCION: case VALUE_COMPONENT: case VALUE_CONSTANT: case VALUE_ITERATOR: case VALUE_MEASURE_FOR_SIZE: case VALUE_MEASURE_MINIMUM_HEIGHT: case VALUE_MEASURE_MINIMUM_WIDTH: case VALUE_MEASURE_NATURAL_HEIGHT: case VALUE_MEASURE_NATURAL_WIDTH: case VALUE_OBJECT: case VALUE_PATH: case VALUE_PROPERTY: case VALUE_REFERENCE_OBJECT: case VALUE_TICK_TIME: case VALUE_TRACK_TRANSITION: case VALUE_TRANSFORM: case VALUE_VARIABLE: case VALUE_WIDGET_HEIGHT: case VALUE_WIDGET_WIDTH: default: g_assert_not_reached (); } gtk_widget_queue_allocate (GTK_WIDGET (self)); } } g_value_unset (&dest_widget_resolved); } break; case VALUE_MEASURE_MINIMUM_WIDTH: case VALUE_MEASURE_NATURAL_WIDTH: case VALUE_MEASURE_MINIMUM_HEIGHT: case VALUE_MEASURE_NATURAL_HEIGHT: { GValue src_resolved = G_VALUE_INIT; gtk_expression_evaluate ( src_expression, self, &src_resolved); switch (dest->kind) { case VALUE_MEASURE_MINIMUM_WIDTH: self->measure_minimum_width = g_value_get_int (&src_resolved); break; case VALUE_MEASURE_NATURAL_WIDTH: self->measure_natural_width = g_value_get_int (&src_resolved); break; case VALUE_MEASURE_MINIMUM_HEIGHT: self->measure_minimum_height = g_value_get_int (&src_resolved); break; case VALUE_MEASURE_NATURAL_HEIGHT: self->measure_natural_height = g_value_get_int (&src_resolved); break; case VALUE_ALLOCATION_HEIGHT: case VALUE_ALLOCATION_TRANSFORM: case VALUE_ALLOCATION_WIDTH: case VALUE_CHILD: case VALUE_CLOSURE: case VALUE_COERCION: case VALUE_COMPONENT: case VALUE_CONSTANT: case VALUE_ITERATOR: case VALUE_MEASURE_FOR_SIZE: case VALUE_OBJECT: case VALUE_PATH: case VALUE_PROPERTY: case VALUE_REFERENCE_OBJECT: case VALUE_TICK_TIME: case VALUE_TRACK_TRANSITION: case VALUE_TRANSFORM: case VALUE_VARIABLE: case VALUE_WIDGET_HEIGHT: case VALUE_WIDGET_WIDTH: default: g_assert_not_reached (); } g_value_unset (&src_resolved); gtk_widget_queue_resize (GTK_WIDGET (self)); } break; case VALUE_CHILD: case VALUE_CLOSURE: case VALUE_COERCION: case VALUE_COMPONENT: case VALUE_CONSTANT: case VALUE_ITERATOR: case VALUE_MEASURE_FOR_SIZE: case VALUE_OBJECT: case VALUE_PATH: case VALUE_REFERENCE_OBJECT: case VALUE_TICK_TIME: case VALUE_TRACK_TRANSITION: case VALUE_TRANSFORM: case VALUE_VARIABLE: case VALUE_WIDGET_HEIGHT: case VALUE_WIDGET_WIDTH: break; default: g_assert_not_reached (); } if (watches != NULL) { g_autoptr (WatchSetterData) watch_data = NULL; GtkExpressionWatch *watch = NULL; watch_data = watch_setter_data_new (); watch_data->self = self; watch_data->state = state_data_ref (state); watch_data->instance = state_instance_data_ref (instance); watch_data->dest = value_data_ref (dest); watch_data->src = value_data_ref (src); watch = gtk_expression_watch ( src_expression, self, (GtkExpressionNotify) reset_setter, watch_setter_data_ref (watch_data), watch_setter_data_unref); g_ptr_array_add (watches, watch); } } static int resolve_value_int (BgeWdgtRenderer *self, ValueData *value, StateData *state) { GtkExpression *expression = NULL; GValue resolved = G_VALUE_INIT; int ret = 0.0; expression = g_hash_table_lookup (state->expressions, value); g_assert (expression != NULL); gtk_expression_evaluate ( expression, self, &resolved); ret = g_value_get_int (&resolved); g_value_unset (&resolved); return ret; } static double resolve_value_double (BgeWdgtRenderer *self, ValueData *value, StateData *state) { GtkExpression *expression = NULL; GValue resolved = G_VALUE_INIT; double ret = 0.0; expression = g_hash_table_lookup (state->expressions, value); g_assert (expression != NULL); gtk_expression_evaluate ( expression, self, &resolved); ret = g_value_get_double (&resolved); g_value_unset (&resolved); return ret; } static gint resolve_value_enum (BgeWdgtRenderer *self, ValueData *value, StateData *state) { GtkExpression *expression = NULL; GValue resolved = G_VALUE_INIT; gint ret = 0; expression = g_hash_table_lookup (state->expressions, value); g_assert (expression != NULL); gtk_expression_evaluate ( expression, self, &resolved); ret = g_value_get_enum (&resolved); g_value_unset (&resolved); return ret; } static gpointer resolve_value_boxed_dup (BgeWdgtRenderer *self, ValueData *value, StateData *state) { GtkExpression *expression = NULL; GValue resolved = G_VALUE_INIT; gpointer ret = NULL; expression = g_hash_table_lookup (state->expressions, value); g_assert (expression != NULL); gtk_expression_evaluate ( expression, self, &resolved); ret = g_value_dup_boxed (&resolved); g_value_unset (&resolved); return ret; } static gpointer resolve_value_object_dup (BgeWdgtRenderer *self, ValueData *value, StateData *state) { GtkExpression *expression = NULL; GValue resolved = G_VALUE_INIT; gpointer ret = NULL; expression = g_hash_table_lookup (state->expressions, value); g_assert (expression != NULL); gtk_expression_evaluate ( expression, self, &resolved); ret = g_value_dup_object (&resolved); g_value_unset (&resolved); return ret; } static void discard_binding (gpointer ptr) { GBinding *binding = ptr; g_binding_unbind (binding); g_object_unref (binding); } static void discard_watch (gpointer ptr) { GtkExpressionWatch *watch = ptr; /* unrefs for us */ gtk_expression_watch_unwatch (watch); } static void prop_change_queue_draw (BgeWdgtRenderer *self) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void reset_setter (WatchSetterData *data) { BgeWdgtRenderer *self = data->self; /* Active state watchers are "overlayed" over the permanent init state. Thus, if this is the init state and the active state also sets this value, we should avoid touching it */ if (self->active_state != NULL /* ? */ && data->state == self->spec->init_state && g_hash_table_contains ( self->active_state->setters, data->dest)) return; set_value ( data->self, data->state, data->instance, data->dest, data->src, NULL); } static GHashTable *renderer_resource_cache = NULL; // static void // cache_weak_notify (char *resource, // GObject *where_the_object_was) // { // g_hash_table_remove (renderer_resource_cache, resource); // g_free (resource); // } static void wdgt_renderer_set_from_resource (BgeWdgtRenderer *self, const char *resource) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; BgeWdgtSpec *cached = NULL; gsize buffer_size = 0; gconstpointer buffer = NULL; g_autoptr (BgeWdgtSpec) spec = NULL; if (g_once_init_enter_pointer (&renderer_resource_cache)) { GHashTable *tmp = NULL; tmp = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_object_unref); g_once_init_leave_pointer (&renderer_resource_cache, tmp); } cached = g_hash_table_lookup ( renderer_resource_cache, resource); if (cached == NULL) { bytes = g_resources_lookup_data ( resource, G_RESOURCE_LOOKUP_FLAGS_NONE, &local_error); if (bytes == NULL) { g_critical ("failed to set renderer spec from resource: %s", local_error->message); bge_wdgt_renderer_set_spec (self, NULL); return; } buffer = g_bytes_get_data (bytes, &buffer_size); spec = bge_wdgt_spec_new_for_string (buffer, &local_error); if (spec == NULL) { g_critical ("failed to set renderer spec from resource %s: %s", resource, local_error->message); bge_wdgt_renderer_set_spec (self, NULL); return; } g_hash_table_replace ( renderer_resource_cache, g_strdup (resource), g_object_ref (spec)); // g_object_weak_ref ( // G_OBJECT (spec), // (GWeakNotify) cache_weak_notify, // g_strdup (resource)); cached = spec; } bge_wdgt_renderer_set_spec (self, cached); } /* End of bge-wdgt-spec.c */ bazaar-org-bazaar-b6e9a65/bge/wdgt/bge-wdgt-spec.h000066400000000000000000000034141522167256300217360ustar00rootroot00000000000000/* bge-wdgt-spec.h * * Copyright 2026 Eva M * * 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 */ #pragma once #ifndef BGE_INSIDE #error "Only can be included directly." #endif G_BEGIN_DECLS #define BGE_TYPE_WDGT_SPEC (bge_wdgt_spec_get_type ()) G_DECLARE_FINAL_TYPE (BgeWdgtSpec, bge_wdgt_spec, BGE, WDGT_SPEC, GObject) BGE_AVAILABLE_IN_ALL BgeWdgtSpec * bge_wdgt_spec_new (void); BGE_AVAILABLE_IN_ALL BgeWdgtSpec * bge_wdgt_spec_new_for_string (const char *string, GError **error); BGE_AVAILABLE_IN_ALL BgeWdgtSpec * bge_wdgt_spec_new_for_resource (const char *resource, GError **error); BGE_AVAILABLE_IN_ALL const char * bge_wdgt_spec_get_name (BgeWdgtSpec *self); BGE_AVAILABLE_IN_ALL void bge_wdgt_spec_set_name (BgeWdgtSpec *self, const char *name); BGE_AVAILABLE_IN_ALL void bge_wdgt_spec_set_name_take (BgeWdgtSpec *self, char *name); #define bge_wdgt_spec_set_name_take_printf(self, ...) bge_wdgt_spec_set_name_take (self, g_strdup_printf (__VA_ARGS__)) G_END_DECLS /* End of bge-wdgt-spec.h */ bazaar-org-bazaar-b6e9a65/bge/wdgt/fmt/000077500000000000000000000000001522167256300177215ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/wdgt/fmt/meson.build000066400000000000000000000000461522167256300220630ustar00rootroot00000000000000bge_sources += files( 'parser.c', ) bazaar-org-bazaar-b6e9a65/bge/wdgt/fmt/parser.c000066400000000000000000003302731522167256300213710ustar00rootroot00000000000000/* parser.c * * Copyright 2026 Eva M * * 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 */ #define G_LOG_DOMAIN "BGE::WDGT-PARSE" #include #include #include "../bge-wdgt-spec-private.h" #include "../util/marshal.h" #include "bge-marshalers.h" #include "parser.h" #include "util.h" #define IS_EOF(_p) ((_p) == NULL || *(_p) == '\0') #define SINGLE_CHAR_TOKENS "{}()=:;," #define EVAL_SINGLE_CHAR_TOKENS "#(),+-*/^%" #define STR_DEFARRAY "defarray" #define STR_DEFWIDGET "defwidget" #define STR_FOREACH "%FOREACH" #define STR_VARIABLE "var" #define STR_REFERENCE "reference" #define STR_INIT "init" #define STR_STATE "state" #define STR_DEFAULT_STATE "state-default" #define STR_SET "set" #define STR_TRANSITION "transition" #define STR_TRANSITION_SPRING "transition-spring" #define STR_ALLOCATE "allocate" #define STR_MEASURE "measure" #define STR_SNAPSHOT "snapshot" typedef enum { TOKEN_PARSE_DEFAULT = 0, TOKEN_PARSE_QUOTED = 1 << 0, } TokenParseFlags; typedef enum { ARGS_PARSE_PARENS = 0, ARGS_PARSE_LEFT_ASSIGN, ARGS_PARSE_RIGHT_ASSIGN, } ArgsParseKind; typedef enum { OPERATOR_ADD = 0, OPERATOR_SUBTRACT, OPERATOR_MULTIPLY, OPERATOR_DIVIDE, OPERATOR_MODULUS, OPERATOR_POWER, } Operator; static const int operator_precedence[] = { [OPERATOR_ADD] = 0, [OPERATOR_SUBTRACT] = 0, [OPERATOR_MULTIPLY] = 1, [OPERATOR_DIVIDE] = 1, [OPERATOR_MODULUS] = 1, [OPERATOR_POWER] = 2, }; typedef struct { Operator op; guint pos; } EvalOperator; BGE_DEFINE_DATA ( eval_closure, EvalClosure, { GArray *ops; gdouble *workbuf0; gdouble *workbuf1; }, BGE_RELEASE_DATA (ops, g_array_unref); BGE_RELEASE_DATA (workbuf0, g_free); BGE_RELEASE_DATA (workbuf1, g_free)); static BgeWdgtSpec * parse_string_inner (const char *string, guint *line, guint *column, GError **error); static const char * parse_widget_block (const char *p, BgeWdgtSpec *spec, GHashTable *macro_arrays, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, GError **error); static const char * parse_snapshot_block (const char *p, BgeWdgtSpec *spec, const char *state, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, GError **error); static const char * parse_eval (const char *p, BgeWdgtSpec *spec, const char *state, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, char **value_out, GError **error); static const char * parse_args (const char *p, BgeWdgtSpec *spec, const char *state, const char *enclosing_object, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, const char *const *destinations, GType destinations_types[], guint n_destinations, char ***values_out, GType **types_out, guint *n_out, ArgsParseKind parse_kind, GError **error); static char * parse_token_fundamental (const char *token, BgeWdgtSpec *spec, guint *n_anon_vals, guint *line, guint *column, GError **error); static char * consume_token (const char **pp, const char *single_chars, TokenParseFlags flags, gboolean *was_quoted, GHashTable *macro_replacements, guint *line, guint *column, GError **error); static char * consume_token_inner (const char **pp, const char *single_chars, TokenParseFlags flags, gboolean *was_quoted, guint *line, guint *column, GError **error); static gdouble eval_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data); static char * make_object_property_name (const char *object, const char *property, guint n); static char * make_widget_allocation_name (const char *widget, guint n); static char * make_widget_measurement_name (guint n); static char * make_anon_name (guint n); static gint cmp_operator (EvalOperator *a, EvalOperator *b); BgeWdgtSpec * bge_wdgt_parse_string (const char *string, GError **error) { g_autoptr (GError) local_error = NULL; guint line = 0; guint column = 0; g_autoptr (BgeWdgtSpec) spec = NULL; g_return_val_if_fail (string != NULL, FALSE); spec = parse_string_inner (string, &line, &column, &local_error); if (spec == NULL) { g_set_error ( error, local_error->domain, local_error->code, "wdgt parser error in string input " "at line:%u, offset:%u : %s", line, column, local_error->message); return NULL; } return g_steal_pointer (&spec); } static BgeWdgtSpec * parse_string_inner (const char *string, guint *line, guint *column, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autoptr (BgeWdgtSpec) spec = NULL; g_autoptr (GHashTable) macro_arrays = NULL; g_autoptr (GHashTable) macro_replacements = NULL; guint n_anon_vals = 0; g_autoptr (GHashTable) type_hints = NULL; spec = bge_wdgt_spec_new (); macro_arrays = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref); macro_replacements = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_free); type_hints = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, NULL); #define RETURN_ERROR_UNLESS(_cond) \ G_STMT_START \ { \ if (!(_cond)) \ { \ g_set_error ( \ error, \ G_IO_ERROR, \ G_IO_ERROR_UNKNOWN, \ "%s", \ local_error != NULL \ ? local_error->message \ : "???"); \ return NULL; \ } \ } \ G_STMT_END #define EXPECT_TOKEN(_string, _token) \ G_STMT_START \ { \ if (g_strcmp0 ((_string), (_token)) != 0) \ { \ g_set_error ( \ error, \ G_IO_ERROR, \ G_IO_ERROR_UNKNOWN, \ "expected token \"%s\", got \"%s\"", \ (_token), (_string)); \ return NULL; \ } \ } \ G_STMT_END #define UNEXPECTED_TOKEN(_token) \ G_STMT_START \ { \ g_set_error ( \ error, \ G_IO_ERROR, \ G_IO_ERROR_UNKNOWN, \ "unexpected token \"%s\"", (_token)); \ return NULL; \ } \ G_STMT_END result = bge_wdgt_spec_add_measure_for_size_source_value ( spec, "%for-size%", &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace ( type_hints, g_strdup ("%for-size%"), GSIZE_TO_POINTER (G_TYPE_INT)); result = bge_wdgt_spec_add_widget_width_source_value ( spec, "%width%", &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace ( type_hints, g_strdup ("%width%"), GSIZE_TO_POINTER (G_TYPE_INT)); result = bge_wdgt_spec_add_widget_height_source_value ( spec, "%height%", &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace ( type_hints, g_strdup ("%height%"), GSIZE_TO_POINTER (G_TYPE_INT)); result = bge_wdgt_spec_add_tick_time_source_value ( spec, "%tick%", &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace ( type_hints, g_strdup ("%tick%"), GSIZE_TO_POINTER (G_TYPE_DOUBLE)); for (const char *p = string; !IS_EOF (p);) { g_autofree char *token = NULL; token = consume_token ( &p, SINGLE_CHAR_TOKENS, TOKEN_PARSE_DEFAULT, NULL, NULL, line, column, NULL); if (token == NULL) break; #define GET_TOKEN_FULL(_token_out, _flags, _single_chars, _was_quoted) \ G_STMT_START \ { \ g_clear_pointer ((_token_out), g_free); \ *(_token_out) = consume_token ( \ &p, \ (_single_chars), \ (_flags), \ (_was_quoted), \ macro_replacements, \ line, column, \ &local_error); \ RETURN_ERROR_UNLESS (*(_token_out) != NULL); \ } \ G_STMT_END #define GET_TOKEN(_token_out, _flags) \ GET_TOKEN_FULL (_token_out, _flags, SINGLE_CHAR_TOKENS, NULL) #define GET_TOKEN_EXPECT(_token_out, _flags, _expect) \ G_STMT_START \ { \ GET_TOKEN ((_token_out), (_flags)); \ EXPECT_TOKEN (*(_token_out), (_expect)); \ } \ G_STMT_END if (g_strcmp0 (token, STR_DEFWIDGET) == 0) { g_autofree char *widget_name = NULL; GET_TOKEN (&widget_name, TOKEN_PARSE_QUOTED); bge_wdgt_spec_set_name (spec, widget_name); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); p = parse_widget_block ( p, spec, macro_arrays, macro_replacements, &n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); } else if (g_strcmp0 (token, STR_DEFARRAY) == 0) { g_autofree char *array_name = NULL; guint n_elements = 0; g_auto (GStrv) elements = NULL; g_autoptr (GPtrArray) array = NULL; GET_TOKEN (&array_name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, NULL, NULL, macro_replacements, &n_anon_vals, type_hints, line, column, NULL, NULL, 0, &elements, NULL, &n_elements, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); array = g_ptr_array_new_take_null_terminated ( (gpointer *) g_steal_pointer (&elements), g_free); g_hash_table_replace ( macro_arrays, g_steal_pointer (&array_name), g_steal_pointer (&array)); } else UNEXPECTED_TOKEN (token); } return g_steal_pointer (&spec); } static const char * parse_widget_block (const char *p, BgeWdgtSpec *spec, GHashTable *macro_arrays, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *token = NULL; for (;;) { GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, "}") == 0) return p; else if (g_strcmp0 (token, STR_FOREACH) == 0) { g_autofree char *var_name = NULL; g_autofree char *iterator_name = NULL; g_autofree char *iterator_paste_name = NULL; g_autofree char *array_name = NULL; GPtrArray *array = NULL; const char *fixed_p = NULL; GET_TOKEN (&var_name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ","); GET_TOKEN (&iterator_name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ","); GET_TOKEN (&iterator_paste_name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "IN"); GET_TOKEN (&array_name, TOKEN_PARSE_DEFAULT); array = g_hash_table_lookup (macro_arrays, array_name); if (array == NULL) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "macro array \"%s\" is undefined", array_name); return NULL; } GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); fixed_p = p; for (guint i = 0; i < array->len; i++) { const char *element = NULL; g_autofree char *iterator = NULL; g_autofree char *iterator_paste = NULL; GValue iter_value = G_VALUE_INIT; element = g_ptr_array_index (array, i); g_hash_table_replace ( macro_replacements, g_strdup (var_name), g_strdup (element)); iterator = make_anon_name ((*n_anon_vals)++); g_value_set_uint (g_value_init (&iter_value, G_TYPE_UINT), i); result = bge_wdgt_spec_add_constant_source_value ( spec, iterator, &iter_value, &local_error); g_value_unset (&iter_value); RETURN_ERROR_UNLESS (result); g_hash_table_replace ( macro_replacements, g_strdup (iterator_name), g_steal_pointer (&iterator)); iterator_paste = g_strdup_printf ("%u", i); g_hash_table_replace ( macro_replacements, g_strdup (iterator_paste_name), g_steal_pointer (&iterator_paste)); p = parse_widget_block ( fixed_p, spec, macro_arrays, macro_replacements, n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); } g_hash_table_remove (macro_replacements, var_name); g_hash_table_remove (macro_replacements, iterator_name); g_hash_table_remove (macro_replacements, iterator_paste_name); } else if (g_strcmp0 (token, STR_VARIABLE) == 0) { g_autofree char *name = NULL; g_autofree char *type_string = NULL; GType type = 0; GET_TOKEN (&name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ":"); GET_TOKEN (&type_string, TOKEN_PARSE_QUOTED); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ";"); type = g_type_from_name (type_string); result = bge_wdgt_spec_add_variable_value ( spec, type, name, &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace (type_hints, g_steal_pointer (&name), GSIZE_TO_POINTER (type)); } else if (g_strcmp0 (token, STR_REFERENCE) == 0) { g_autofree char *name = NULL; g_autofree char *type_string = NULL; GType type = 0; GET_TOKEN (&name, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ":"); GET_TOKEN (&type_string, TOKEN_PARSE_QUOTED); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ";"); type = g_type_from_name (type_string); result = bge_wdgt_spec_add_reference_object_value ( spec, type, name, &local_error); RETURN_ERROR_UNLESS (result); g_hash_table_replace (type_hints, g_steal_pointer (&name), GSIZE_TO_POINTER (type)); } else if (g_strcmp0 (token, STR_INIT) == 0 || g_strcmp0 (token, STR_STATE) == 0 || g_strcmp0 (token, STR_DEFAULT_STATE) == 0) { g_autofree char *state_name = NULL; if (g_strcmp0 (token, STR_INIT) != 0) { GET_TOKEN (&state_name, TOKEN_PARSE_QUOTED); result = bge_wdgt_spec_add_state ( spec, state_name, g_strcmp0 (token, STR_DEFAULT_STATE) == 0, &local_error); /* TODO: allow states to be redefined for macros, so they are just concatenated */ g_clear_error (&local_error); // RETURN_ERROR_UNLESS (result); } GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); for (;;) { GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, "}") == 0) break; else if (g_strcmp0 (token, STR_SNAPSHOT) == 0) { GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); p = parse_snapshot_block (p, spec, state_name, macro_replacements, n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); } else if (g_strcmp0 (token, STR_SET) == 0) { guint n_dest_values = 0; g_auto (GStrv) dest_values = NULL; g_autofree GType *dest_types = NULL; guint n_src_values = 0; g_auto (GStrv) src_values = NULL; p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &dest_values, &dest_types, &n_dest_values, ARGS_PARSE_LEFT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_dest_values == 0) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Left assignment needs at least one argument"); return NULL; } p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, (const char *const *) dest_values, dest_types, n_dest_values, &src_values, NULL, &n_src_values, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_src_values != n_dest_values) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Right assignment needs %d argument(s) " "to match the left side", n_dest_values); return NULL; } for (guint i = 0; i < n_dest_values; i++) { result = bge_wdgt_spec_set_value ( spec, state_name, dest_values[i], src_values[i], &local_error); RETURN_ERROR_UNLESS (result); } } else if (g_strcmp0 (token, STR_TRANSITION) == 0) { g_autofree char *transition_value = NULL; guint n_spec_values = 0; g_auto (GStrv) spec_values = NULL; GET_TOKEN (&transition_value, TOKEN_PARSE_DEFAULT); p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_DOUBLE, BGE_TYPE_EASING }, 2, &spec_values, NULL, &n_spec_values, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_spec_values != 2) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "transition spec needs 2 arguments " "(animation length in seconds, easing type), got %u", n_spec_values); return NULL; } result = bge_wdgt_spec_transition_value ( spec, state_name, transition_value, spec_values[0], spec_values[1], &local_error); RETURN_ERROR_UNLESS (result); } else if (g_strcmp0 (token, STR_TRANSITION_SPRING) == 0) { g_autofree char *transition_value = NULL; guint n_spec_values = 0; g_auto (GStrv) spec_values = NULL; GET_TOKEN (&transition_value, TOKEN_PARSE_DEFAULT); p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE }, 3, &spec_values, NULL, &n_spec_values, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_spec_values != 3) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "spring transition spec needs 3 arguments " "(damping-ratio, mass, stiffness), got %u", n_spec_values); return NULL; } result = bge_wdgt_spec_transition_value_spring ( spec, state_name, transition_value, spec_values[0], spec_values[1], spec_values[2], &local_error); RETURN_ERROR_UNLESS (result); } else if (g_strcmp0 (token, STR_ALLOCATE) == 0) { g_autofree char *child_value = NULL; guint n_allocation_values = 0; g_auto (GStrv) allocation_values = NULL; GET_TOKEN (&child_value, TOKEN_PARSE_DEFAULT); p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_INT, G_TYPE_INT, GSK_TYPE_TRANSFORM }, 3, &allocation_values, NULL, &n_allocation_values, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_allocation_values != 2 && n_allocation_values != 3) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "allocation needs 2 or 3 values, a width " "and height and one transform, got %u", n_allocation_values); return NULL; } for (guint i = 0; i < n_allocation_values; i++) { g_autofree char *allocation_key = NULL; allocation_key = make_widget_allocation_name (child_value, (*n_anon_vals)++); switch (i) { case 0: result = bge_wdgt_spec_add_allocation_width_value ( spec, allocation_key, child_value, &local_error); break; case 1: result = bge_wdgt_spec_add_allocation_height_value ( spec, allocation_key, child_value, &local_error); break; case 2: result = bge_wdgt_spec_add_allocation_transform_value ( spec, allocation_key, child_value, &local_error); break; default: g_assert_not_reached (); } RETURN_ERROR_UNLESS (result); result = bge_wdgt_spec_set_value ( spec, state_name, allocation_key, allocation_values[i], &local_error); RETURN_ERROR_UNLESS (result); } } else if (g_strcmp0 (token, STR_MEASURE) == 0) { guint n_measurement_values = 0; g_auto (GStrv) measurement_values = NULL; p = parse_args (p, spec, state_name, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT }, 4, &measurement_values, NULL, &n_measurement_values, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_measurement_values != 4) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "measurement needs 4 values, a " "minimum width, " "natural width, " "minimum height, " "and " "natural height, " "got %u", n_measurement_values); return NULL; } for (guint i = 0; i < n_measurement_values; i++) { g_autofree char *measurement_key = NULL; measurement_key = make_widget_measurement_name ((*n_anon_vals)++); switch (i) { case 0: result = bge_wdgt_spec_add_measure_value ( spec, measurement_key, BGE_WDGT_MEASURE_MINIMUM_WIDTH, &local_error); break; case 1: result = bge_wdgt_spec_add_measure_value ( spec, measurement_key, BGE_WDGT_MEASURE_NATURAL_WIDTH, &local_error); break; case 2: result = bge_wdgt_spec_add_measure_value ( spec, measurement_key, BGE_WDGT_MEASURE_MINIMUM_HEIGHT, &local_error); break; case 3: result = bge_wdgt_spec_add_measure_value ( spec, measurement_key, BGE_WDGT_MEASURE_NATURAL_HEIGHT, &local_error); break; default: g_assert_not_reached (); } RETURN_ERROR_UNLESS (result); result = bge_wdgt_spec_set_value ( spec, state_name, measurement_key, measurement_values[i], &local_error); RETURN_ERROR_UNLESS (result); } } else UNEXPECTED_TOKEN (token); } } else UNEXPECTED_TOKEN (token); } return p; } static const char * parse_snapshot_block (const char *p, BgeWdgtSpec *spec, const char *state, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *token = NULL; for (;;) { g_autofree char *action = NULL; BgeWdgtSnapshotInstrKind kind = 0; g_autofree char *instr = NULL; guint n_args = 0; g_auto (GStrv) args = NULL; guint n_pops = 0; GET_TOKEN (&action, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (action, "}") == 0) break; else if (g_strcmp0 (action, "foreach") == 0) { g_autofree char *var = NULL; g_autofree char *element_type_string = NULL; g_autofree char *idx_var = NULL; g_autofree char *model = NULL; GType element_type = G_TYPE_INVALID; GET_TOKEN (&var, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ":"); GET_TOKEN (&element_type_string, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ","); GET_TOKEN (&idx_var, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "in"); GET_TOKEN (&model, TOKEN_PARSE_DEFAULT); element_type = g_type_from_name (element_type_string); result = bge_wdgt_spec_push_foreach ( spec, model, var, idx_var, element_type, &local_error); RETURN_ERROR_UNLESS (result); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); p = parse_snapshot_block (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); bge_wdgt_spec_pop_foreach (spec); continue; } else if (g_strcmp0 (action, "save") == 0) kind = BGE_WDGT_SNAPSHOT_INSTR_SAVE; else if (g_strcmp0 (action, "with") == 0) kind = BGE_WDGT_SNAPSHOT_INSTR_PUSH; else if (g_strcmp0 (action, "add") == 0) kind = BGE_WDGT_SNAPSHOT_INSTR_APPEND; else if (g_strcmp0 (action, "move") == 0) kind = BGE_WDGT_SNAPSHOT_INSTR_TRANSFORM; else if (g_strcmp0 (action, "do-child") == 0) kind = BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD; else UNEXPECTED_TOKEN (action); if (kind == BGE_WDGT_SNAPSHOT_INSTR_SAVE) { result = bge_wdgt_spec_append_snapshot_instr ( spec, state, BGE_WDGT_SNAPSHOT_INSTR_SAVE, "save", NULL, 0, NULL, &local_error); RETURN_ERROR_UNLESS (result); } else if (kind == BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD) { p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &args, NULL, &n_args, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); result = bge_wdgt_spec_append_snapshot_instr ( spec, state, BGE_WDGT_SNAPSHOT_INSTR_SNAPSHOT_CHILD, "do-child", (const char *const *) args, n_args, NULL, &local_error); RETURN_ERROR_UNLESS (result); } else { GET_TOKEN (&instr, TOKEN_PARSE_DEFAULT); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &args, NULL, &n_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); result = bge_wdgt_spec_append_snapshot_instr ( spec, state, kind, instr, (const char *const *) args, n_args, &n_pops, &local_error); RETURN_ERROR_UNLESS (result); } if (kind == BGE_WDGT_SNAPSHOT_INSTR_APPEND || kind == BGE_WDGT_SNAPSHOT_INSTR_TRANSFORM) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ";"); else if (kind == BGE_WDGT_SNAPSHOT_INSTR_PUSH) { for (guint i = 0; i < n_pops; i++) { if (i > 0) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "then"); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); p = parse_snapshot_block (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); result = bge_wdgt_spec_append_snapshot_instr ( spec, state, BGE_WDGT_SNAPSHOT_INSTR_POP, "pop", NULL, 0, NULL, &local_error); RETURN_ERROR_UNLESS (result); } } else if (kind == BGE_WDGT_SNAPSHOT_INSTR_SAVE) { GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "{"); p = parse_snapshot_block (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &local_error); RETURN_ERROR_UNLESS (p != NULL); result = bge_wdgt_spec_append_snapshot_instr ( spec, state, BGE_WDGT_SNAPSHOT_INSTR_RESTORE, "restore", NULL, 0, NULL, &local_error); RETURN_ERROR_UNLESS (result); } } return p; } static gdouble floor_closure (gpointer this, gdouble x, gpointer data) { return floor (x); } static gdouble ceil_closure (gpointer this, gdouble x, gpointer data) { return ceil (x); } static gdouble sin_closure (gpointer this, gdouble x, gpointer data) { return sin (x); } static gdouble cos_closure (gpointer this, gdouble x, gpointer data) { return cos (x); } static const char * parse_eval (const char *p, BgeWdgtSpec *spec, const char *state, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, char **value_out, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *token = NULL; g_autoptr (GPtrArray) values = NULL; g_autoptr (GArray) ops = NULL; g_autoptr (GArray) value_types = NULL; g_autofree char *key = NULL; g_autoptr (EvalClosureData) data = NULL; values = g_ptr_array_new_with_free_func (g_free); ops = g_array_new (FALSE, FALSE, sizeof (EvalOperator)); value_types = g_array_new (FALSE, FALSE, sizeof (GType)); #define GET_TOKEN_EVAL(_token_out, _flags) \ GET_TOKEN_FULL (_token_out, _flags, EVAL_SINGLE_CHAR_TOKENS, NULL) #define GET_TOKEN_EVAL_EXPECT(_token_out, _flags, _expect) \ G_STMT_START \ { \ GET_TOKEN_EVAL ((_token_out), (_flags)); \ EXPECT_TOKEN (*(_token_out), (_expect)); \ } \ G_STMT_END for (gboolean apply_negative = FALSE;;) { g_autofree char *value = NULL; Operator op = -1; gboolean expected_value = FALSE; GET_TOKEN_EVAL (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, ")") == 0) break; else if (g_strcmp0 (token, "(") == 0) { p = parse_eval (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &value, &local_error); RETURN_ERROR_UNLESS (p != NULL); } else if (g_strcmp0 (token, "#") == 0) { g_auto (GStrv) escape_args = NULL; guint n_escape_args = 0; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_DOUBLE }, 1, &escape_args, NULL, &n_escape_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_escape_args != 1) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "evaluation escape " "needs a single argument"); return NULL; } value = g_strdup (escape_args[0]); } else if (g_strcmp0 (token, "ceil") == 0 || g_strcmp0 (token, "floor") == 0 || g_strcmp0 (token, "sin") == 0 || g_strcmp0 (token, "cos") == 0) { GCallback cb = NULL; g_autofree char *arg = NULL; g_autofree char *math_func_key = NULL; if (g_strcmp0 (token, "ceil") == 0) cb = G_CALLBACK (ceil_closure); else if (g_strcmp0 (token, "floor") == 0) cb = G_CALLBACK (floor_closure); else if (g_strcmp0 (token, "sin") == 0) cb = G_CALLBACK (sin_closure); else if (g_strcmp0 (token, "cos") == 0) cb = G_CALLBACK (cos_closure); GET_TOKEN_EVAL_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_eval (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &arg, &local_error); RETURN_ERROR_UNLESS (p != NULL); math_func_key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, math_func_key, G_TYPE_DOUBLE, bge_marshal_DOUBLE__DOUBLE, cb, (const char *const[]){ arg }, (GType[]){ G_TYPE_DOUBLE }, 1, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); value = g_steal_pointer (&math_func_key); } else if (g_strcmp0 (token, "+") == 0) op = OPERATOR_ADD; else if (g_strcmp0 (token, "-") == 0) op = OPERATOR_SUBTRACT; else if (g_strcmp0 (token, "*") == 0) op = OPERATOR_MULTIPLY; else if (g_strcmp0 (token, "/") == 0) op = OPERATOR_DIVIDE; else if (g_strcmp0 (token, "%") == 0) op = OPERATOR_MODULUS; else if (g_strcmp0 (token, "^") == 0) op = OPERATOR_POWER; else { value = parse_token_fundamental ( token, spec, n_anon_vals, line, column, &local_error); RETURN_ERROR_UNLESS (value != NULL); } expected_value = values->len == ops->len; if (value != NULL) { GType type_double = G_TYPE_DOUBLE; if (!expected_value) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Expected operator, got \"%s\"", token); return NULL; } if (apply_negative) { GValue gvalue = G_VALUE_INIT; g_autofree char *negative_key = NULL; EvalOperator append = { 0 }; g_value_set_double (g_value_init (&gvalue, G_TYPE_DOUBLE), -1.0); negative_key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_constant_source_value ( spec, negative_key, &gvalue, &local_error); g_value_unset (&gvalue); RETURN_ERROR_UNLESS (result); g_ptr_array_add (values, g_steal_pointer (&negative_key)); g_array_append_val (value_types, type_double); append.op = OPERATOR_MULTIPLY; append.pos = ops->len; g_array_append_val (ops, append); apply_negative = FALSE; } g_ptr_array_add (values, g_steal_pointer (&value)); g_array_append_val (value_types, type_double); } else if (op >= 0) { EvalOperator append = { 0 }; if (expected_value) { if (op == OPERATOR_SUBTRACT) apply_negative = !apply_negative; else if (op != OPERATOR_ADD) /* Allow adding `+` in front of numbers for alignment with negatives etc */ { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Expected value, got \"%s\"", token); return NULL; } } else { append.op = op; append.pos = ops->len; g_array_append_val (ops, append); } } } if (values->len == 0) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Empty evaluation block"); return NULL; } if (ops->len != values->len - 1) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Invalid syntax in evaluation block"); return NULL; } if (values->len == 1) { *value_out = g_ptr_array_steal_index (values, 0); return p; } g_array_sort (ops, (GCompareFunc) cmp_operator); data = eval_closure_data_new (); data->ops = g_array_ref (ops); data->workbuf0 = g_malloc0_n (values->len, sizeof (gdouble)); data->workbuf1 = g_malloc0_n (values->len, sizeof (gdouble)); key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, G_TYPE_DOUBLE, _marshal_DOUBLE__ARGS_DIRECT, G_CALLBACK (eval_closure), (const char *const *) values->pdata, (const GType *) (void *) value_types->data, values->len, eval_closure_data_ref (data), eval_closure_data_unref, &local_error); RETURN_ERROR_UNLESS (result); *value_out = g_steal_pointer (&key); return p; } static gboolean not_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { for (guint i = 0; i < n_param_values; i++) { if (!g_value_get_boolean (¶m_values[i])) return TRUE; } return FALSE; } static gboolean and_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { for (guint i = 0; i < n_param_values; i++) { if (!g_value_get_boolean (¶m_values[i])) return FALSE; } return TRUE; } static gboolean or_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { for (guint i = 0; i < n_param_values; i++) { if (g_value_get_boolean (¶m_values[i])) return TRUE; } return FALSE; } static gboolean lt_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with < g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean gt_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with > g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean lte_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with <= g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean gte_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with >= g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean eq_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with == g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean neq_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(cmp_with != g_value_get_double (¶m_values[i]))) return FALSE; } return TRUE; } static gboolean aeq_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(G_APPROX_VALUE (cmp_with, g_value_get_double (¶m_values[i]), 0.00001))) return FALSE; } return TRUE; } static gboolean aneq_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { gdouble cmp_with = 0.0; cmp_with = g_value_get_double (param_values); for (guint i = 1; i < n_param_values; i++) { if (!(!G_APPROX_VALUE (cmp_with, g_value_get_double (¶m_values[i]), 0.00001))) return FALSE; } return TRUE; } static void ifelse_closure (gpointer this, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer dest_type_ptr) { if (g_value_get_boolean (param_values)) g_value_copy (¶m_values[1], return_value); else g_value_copy (¶m_values[2], return_value); } static void measure_path_closure (gpointer this, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer dest_type_ptr) { GskPathMeasure *measure = NULL; measure = gsk_path_measure_new ( g_value_get_boxed (param_values)); g_value_take_boxed (return_value, measure); } static void path_length_closure (gpointer this, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer dest_type_ptr) { gdouble length = 0.0; length = gsk_path_measure_get_length ( g_value_get_boxed (param_values)); g_value_set_double (return_value, length); } static void path_point_closure (gpointer this, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer dest_type_ptr) { gboolean result = FALSE; GskPathPoint point = { 0 }; result = gsk_path_measure_get_point ( g_value_get_boxed (¶m_values[0]), g_value_get_double (¶m_values[1]), &point); if (!result) return; g_value_set_boxed (return_value, &point); } static const char * parse_args (const char *p, BgeWdgtSpec *spec, const char *state, const char *enclosing_object, GHashTable *macro_replacements, guint *n_anon_vals, GHashTable *type_hints, guint *line, guint *column, const char *const *destinations, GType destinations_types[], guint n_destinations, char ***values_out, GType **types_out, guint *n_out, ArgsParseKind parse_kind, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *token = NULL; guint n_args = 0; g_autoptr (GStrvBuilder) builder = NULL; g_autoptr (GArray) types_array = NULL; builder = g_strv_builder_new (); types_array = g_array_new (FALSE, TRUE, sizeof (GType)); for (gboolean need_comma = FALSE, get_token = TRUE, was_quoted = FALSE; ;) { if (get_token) GET_TOKEN_FULL (&token, TOKEN_PARSE_DEFAULT, SINGLE_CHAR_TOKENS, &was_quoted); get_token = TRUE; if (was_quoted) { g_autofree char *tmp_token = NULL; g_autofree char *key = NULL; GValue value = { 0 }; g_value_set_string (g_value_init (&value, G_TYPE_STRING), token); key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_constant_source_value ( spec, key, &value, &local_error); g_value_unset (&value); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if ((parse_kind == ARGS_PARSE_LEFT_ASSIGN && g_strcmp0 (token, "=") == 0) || (parse_kind == ARGS_PARSE_RIGHT_ASSIGN && g_strcmp0 (token, ";") == 0) || (parse_kind == ARGS_PARSE_PARENS && g_strcmp0 (token, ")") == 0)) break; else if (need_comma) { if (g_strcmp0 (token, ",") == 0) { need_comma = FALSE; continue; } else { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Arguments must be comma-separated"); return NULL; } } else if (g_strcmp0 (token, "_") == 0 || g_strcmp0 (token, "C_") == 0) /* gettext translations */ { gboolean have_context = FALSE; g_autofree char *context_text = NULL; g_autofree char *source_text = NULL; GValue value = G_VALUE_INIT; g_autofree char *key = NULL; have_context = g_strcmp0 (token, "C_") == 0; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); if (have_context) { GET_TOKEN (&context_text, TOKEN_PARSE_QUOTED); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ","); } GET_TOKEN (&source_text, TOKEN_PARSE_QUOTED); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); g_value_init (&value, G_TYPE_STRING); if (have_context) { g_autofree char *query = NULL; query = g_strdup_printf ("%s\004%s", context_text, source_text); g_value_set_string (&value, g_dpgettext (NULL, query, strlen (context_text) + 1)); } else g_value_set_string (&value, gettext (source_text)); key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_constant_source_value ( spec, key, &value, &local_error); g_value_unset (&value); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#eval") == 0) { g_autofree char *key = NULL; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_eval (p, spec, state, macro_replacements, n_anon_vals, type_hints, line, column, &key, &local_error); RETURN_ERROR_UNLESS (p != NULL); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#not") == 0 || g_strcmp0 (token, "#!") == 0 || g_strcmp0 (token, "#and") == 0 || g_strcmp0 (token, "#or") == 0 || g_strcmp0 (token, "#<") == 0 || g_strcmp0 (token, "#>") == 0 || g_strcmp0 (token, "#eq") == 0 || g_strcmp0 (token, "#eq") == 0 || g_strcmp0 (token, "#neq") == 0 || g_strcmp0 (token, "#~eq") == 0 || g_strcmp0 (token, "#~neq") == 0) { g_autofree char *key = NULL; GCallback cb = NULL; GType all_type = G_TYPE_INVALID; guint require_n_cmp_values = 0; guint n_cmp_values = 0; g_auto (GStrv) cmp_values = NULL; g_autofree GType *all_types = NULL; if (g_strcmp0 (token, "#not") == 0 || g_strcmp0 (token, "#!") == 0) { cb = G_CALLBACK (not_closure); all_type = G_TYPE_BOOLEAN; require_n_cmp_values = 1; } else if (g_strcmp0 (token, "#and") == 0) { cb = G_CALLBACK (and_closure); all_type = G_TYPE_BOOLEAN; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#or") == 0) { cb = G_CALLBACK (or_closure); all_type = G_TYPE_BOOLEAN; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#<") == 0) { cb = G_CALLBACK (lt_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#>") == 0) { cb = G_CALLBACK (gt_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#eq") == 0) { cb = G_CALLBACK (gte_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#eq") == 0) { cb = G_CALLBACK (eq_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#neq") == 0) { cb = G_CALLBACK (neq_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#~eq") == 0) { cb = G_CALLBACK (aeq_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else if (g_strcmp0 (token, "#~neq") == 0) { cb = G_CALLBACK (aneq_closure); all_type = G_TYPE_DOUBLE; require_n_cmp_values = 2; } else g_assert_not_reached (); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &cmp_values, NULL, &n_cmp_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_cmp_values < require_n_cmp_values) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "%s() needs at least %u argument(s), " "got %u", token, require_n_cmp_values, n_cmp_values); return NULL; } all_types = g_new (GType, n_cmp_values); for (guint i = 0; i < n_cmp_values; i++) { all_types[i] = all_type; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, G_TYPE_BOOLEAN, _marshal_BOOL__ARGS_DIRECT, cb, (const char *const *) cmp_values, all_types, n_cmp_values, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#ifelse") == 0) { g_autofree char *key = NULL; GType type_hint = G_TYPE_INVALID; guint n_expr_values = 0; g_auto (GStrv) expr_values = NULL; g_autofree GType *expr_types = NULL; if (n_args < n_destinations) { if (destinations != NULL) type_hint = GPOINTER_TO_SIZE (g_hash_table_lookup ( type_hints, destinations[n_args])); if (type_hint == G_TYPE_INVALID && destinations_types != NULL) type_hint = destinations_types[n_args]; } GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_BOOLEAN }, 1, &expr_values, &expr_types, &n_expr_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_expr_values != 3) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#ifelse() needs exactly 3 argument(s), " "got %u", n_expr_values); return NULL; } if (type_hint == G_TYPE_INVALID) /* Use the return type of the TRUE value and coerce the FALSE value to this if necessary */ type_hint = expr_types[1]; key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, type_hint, _marshal_DIRECT__ARGS_DIRECT, G_CALLBACK (ifelse_closure), (const char *const *) expr_values, (GType[]){ G_TYPE_BOOLEAN, type_hint, type_hint }, n_expr_values, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#measure-path") == 0) { g_autofree char *key = NULL; guint n_expr_values = 0; g_auto (GStrv) expr_values = NULL; g_autofree GType *expr_types = NULL; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ GSK_TYPE_PATH }, 1, &expr_values, &expr_types, &n_expr_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_expr_values != 1) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#measure-path() needs exactly 1 argument of type %s," "got %u", g_type_name (GSK_TYPE_PATH), n_expr_values); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, GSK_TYPE_PATH_MEASURE, _marshal_DIRECT__ARGS_DIRECT, G_CALLBACK (measure_path_closure), (const char *const *) expr_values, (GType[]){ GSK_TYPE_PATH }, n_expr_values, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#path-length") == 0) { g_autofree char *key = NULL; guint n_expr_values = 0; g_auto (GStrv) expr_values = NULL; g_autofree GType *expr_types = NULL; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ GSK_TYPE_PATH_MEASURE }, 1, &expr_values, &expr_types, &n_expr_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_expr_values != 1) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#path-length() needs exactly 1 argument of type %s," "got %u", g_type_name (GSK_TYPE_PATH_MEASURE), n_expr_values); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, G_TYPE_DOUBLE, _marshal_DIRECT__ARGS_DIRECT, G_CALLBACK (path_length_closure), (const char *const *) expr_values, (GType[]){ GSK_TYPE_PATH_MEASURE }, n_expr_values, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#path-point") == 0) { g_autofree char *key = NULL; guint n_expr_values = 0; g_auto (GStrv) expr_values = NULL; g_autofree GType *expr_types = NULL; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ GSK_TYPE_PATH_MEASURE, G_TYPE_DOUBLE }, 2, &expr_values, &expr_types, &n_expr_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_expr_values != 2) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#path-point() needs exactly 2 arguments " "of types %s and %s," "got %u", g_type_name (GSK_TYPE_PATH_MEASURE), g_type_name (G_TYPE_DOUBLE), n_expr_values); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_cclosure_source_value ( spec, key, GSK_TYPE_PATH_POINT, _marshal_DIRECT__ARGS_DIRECT, G_CALLBACK (path_point_closure), (const char *const *) expr_values, (GType[]){ GSK_TYPE_PATH_MEASURE, G_TYPE_DOUBLE }, n_expr_values, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else if (g_strcmp0 (token, "#transition") == 0) { g_autofree char *key = NULL; guint n_spec_values = 0; g_auto (GStrv) spec_values = NULL; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, NULL, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE }, 4, &spec_values, NULL, &n_spec_values, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_spec_values != 4) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#transition() needs 4 arguments " "(variable, damping-ratio, mass, stiffness), " "got %u", n_spec_values); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_track_transition_source_value ( spec, key, spec_values[0], spec_values[1], spec_values[2], spec_values[3], &local_error); RETURN_ERROR_UNLESS (result); g_strv_builder_take (builder, g_steal_pointer (&key)); n_args++; need_comma = TRUE; } else { g_autofree char *key = NULL; GType type = G_TYPE_INVALID; if (g_hash_table_contains (type_hints, token) || /* A macro placed this here */ g_utf8_strchr (token, -1, '@') != NULL) key = g_steal_pointer (&token); else { GType type_hint = G_TYPE_INVALID; gboolean expect_closing_paren = FALSE; gboolean is_child = FALSE; gboolean constant = FALSE; GValue value = G_VALUE_INIT; if (n_args < n_destinations) { if (destinations != NULL) type_hint = GPOINTER_TO_SIZE (g_hash_table_lookup ( type_hints, destinations[n_args])); if (type_hint == G_TYPE_INVALID && destinations_types != NULL) type_hint = destinations_types[n_args]; } if (g_str_has_prefix (token, "#")) { const char *type_name = token + 1; if (g_str_has_prefix (type_name, "child/")) { is_child = TRUE; type_name += strlen ("child/"); } if (*type_name == '\0') { if (type_hint == G_TYPE_INVALID) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unable to guess type for value"); return NULL; } type = type_hint; } else { type = g_type_from_name (type_name); if (type == G_TYPE_INVALID) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unknown type name \"%s\"", type_name); return NULL; } } GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); expect_closing_paren = TRUE; } else type = type_hint; if (is_child && !g_type_is_a (type, GTK_TYPE_WIDGET)) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Children must be a widget type"); return NULL; } if (type == G_TYPE_INVALID) { if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); key = parse_token_fundamental (token, spec, n_anon_vals, line, column, &local_error); RETURN_ERROR_UNLESS (key != NULL); } else if (type == G_TYPE_STRING) { if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); g_value_set_string (g_value_init (&value, G_TYPE_STRING), token); constant = TRUE; if (expect_closing_paren) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); } else if (type == G_TYPE_BOOLEAN) { if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, "true") == 0) g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), TRUE); else if (g_strcmp0 (token, "false") == 0) g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), FALSE); else { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "a boolean value must be 'true' " "or 'false', got \"%s\"", token); return NULL; } constant = TRUE; if (expect_closing_paren) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); } else if (type == G_TYPE_INT || type == G_TYPE_INT64 || type == G_TYPE_UINT || type == G_TYPE_UINT64 || type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE) { const GVariantType *variant_type = NULL; g_autoptr (GVariant) variant = NULL; if (type == G_TYPE_INT) variant_type = G_VARIANT_TYPE_INT32; else if (type == G_TYPE_INT64) variant_type = G_VARIANT_TYPE_INT64; else if (type == G_TYPE_UINT) variant_type = G_VARIANT_TYPE_UINT32; else if (type == G_TYPE_UINT64) variant_type = G_VARIANT_TYPE_UINT64; else if (type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE) variant_type = G_VARIANT_TYPE_DOUBLE; if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); variant = g_variant_parse (variant_type, token, NULL, NULL, &local_error); RETURN_ERROR_UNLESS (variant != NULL); if (type == G_TYPE_INT) g_value_set_int (g_value_init (&value, G_TYPE_INT), g_variant_get_int32 (variant)); else if (type == G_TYPE_INT64) g_value_set_int64 (g_value_init (&value, G_TYPE_INT64), g_variant_get_int64 (variant)); else if (type == G_TYPE_UINT) g_value_set_uint (g_value_init (&value, G_TYPE_UINT), g_variant_get_uint32 (variant)); else if (type == G_TYPE_UINT64) g_value_set_uint64 (g_value_init (&value, G_TYPE_UINT64), g_variant_get_uint64 (variant)); else if (type == G_TYPE_FLOAT) g_value_set_float (g_value_init (&value, G_TYPE_FLOAT), g_variant_get_double (variant)); else if (type == G_TYPE_DOUBLE) g_value_set_double (g_value_init (&value, G_TYPE_DOUBLE), g_variant_get_double (variant)); constant = TRUE; if (expect_closing_paren) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); } else if (g_type_is_a (type, G_TYPE_ENUM)) { g_autoptr (GEnumClass) enum_class = NULL; GEnumValue *enum_value = NULL; if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); enum_class = g_type_class_ref (type); enum_value = g_enum_get_value_by_nick (enum_class, token); if (enum_value == NULL) enum_value = g_enum_get_value_by_name (enum_class, token); if (enum_value == NULL) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "\"%s\" not found in enum type %s", token, g_type_name (type)); return NULL; } g_value_set_enum (g_value_init (&value, type), enum_value->value); constant = TRUE; if (expect_closing_paren) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); } else if (type == GDK_TYPE_RGBA) { GdkRGBA rgba = { 0 }; if (expect_closing_paren) GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); result = gdk_rgba_parse (&rgba, token); if (!result) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#color() specifier failed to " "parse color from string"); return NULL; } g_value_set_boxed (g_value_init (&value, GDK_TYPE_RGBA), &rgba); constant = TRUE; if (expect_closing_paren) GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ")"); } else if (type == GRAPHENE_TYPE_POINT || type == GRAPHENE_TYPE_SIZE || type == GRAPHENE_TYPE_RECT) { g_auto (GStrv) component_args = NULL; guint n_component_args = 0; GType component_type = 0; if (!expect_closing_paren) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s must be wrapped in #(...)", g_type_name (type)); return NULL; } p = parse_args (p, spec, state, enclosing_object, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE }, 4, &component_args, NULL, &n_component_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (type == GRAPHENE_TYPE_POINT) { switch (n_component_args) { case 2: component_type = GRAPHENE_TYPE_POINT; break; case 3: component_type = GRAPHENE_TYPE_POINT3D; break; default: g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#point() specifier can have 2 or 3 arguments, got %u", n_component_args); return NULL; } } else if (type == GRAPHENE_TYPE_SIZE) { switch (n_component_args) { case 2: component_type = GRAPHENE_TYPE_SIZE; break; default: g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#size() specifier can have 2 arguments, got %u", n_component_args); return NULL; } } else if (type == GRAPHENE_TYPE_RECT) { switch (n_component_args) { case 4: component_type = GRAPHENE_TYPE_RECT; break; default: g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "#rect() specifier can have 4 arguments, got %u", n_component_args); return NULL; } } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_component_source_value ( spec, key, component_type, (const char *const *) component_args, n_component_args, &local_error); RETURN_ERROR_UNLESS (result); } else if (g_type_is_a (type, G_TYPE_OBJECT)) { if (!expect_closing_paren) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s must be wrapped in #(...)", g_type_name (type)); return NULL; } key = make_anon_name ((*n_anon_vals)++); if (is_child) { g_autofree char *builder_type = NULL; g_autoptr (GPtrArray) css_classes = NULL; GET_TOKEN (&builder_type, TOKEN_PARSE_QUOTED); if (*builder_type == '\0') g_clear_pointer (&builder_type, g_free); css_classes = g_ptr_array_new_with_free_func (g_free); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); for (;;) { GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, ")") == 0) break; g_ptr_array_add (css_classes, g_steal_pointer (&token)); } result = bge_wdgt_spec_add_child_source_value ( spec, key, type, enclosing_object, builder_type, (const char *const *) css_classes->pdata, css_classes->len, &local_error); RETURN_ERROR_UNLESS (result); } else { result = bge_wdgt_spec_add_instance_source_value ( spec, key, type, &local_error); RETURN_ERROR_UNLESS (result); } for (;;) { g_autofree char *property_name = NULL; g_autofree char *set_key = NULL; GType prop_type = G_TYPE_INVALID; g_auto (GStrv) value_args = NULL; guint n_value_args = 0; GET_TOKEN (&property_name, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (property_name, ")") == 0) break; else if (g_strcmp0 (property_name, "%set") == 0) { GET_TOKEN (&set_key, TOKEN_PARSE_DEFAULT); prop_type = GPOINTER_TO_SIZE (g_hash_table_lookup (type_hints, set_key)); } else if (g_strcmp0 (property_name, "_") != 0) { set_key = make_object_property_name (key, property_name, (*n_anon_vals)++); result = bge_wdgt_spec_add_property_value ( spec, set_key, key, property_name, &prop_type, &local_error); RETURN_ERROR_UNLESS (result); } GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "="); p = parse_args (p, spec, state, key, macro_replacements, n_anon_vals, type_hints, line, column, NULL, (GType[]){ prop_type }, 1, &value_args, NULL, &n_value_args, ARGS_PARSE_RIGHT_ASSIGN, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_value_args != 1) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "property/child assignment " "needs a single argument, got %u", n_value_args); return NULL; } if (set_key != NULL) { result = bge_wdgt_spec_set_value (spec, state, set_key, value_args[0], &local_error); RETURN_ERROR_UNLESS (result); } } } else if (type == GSK_TYPE_TRANSFORM) { g_autofree char *last_key = NULL; if (!expect_closing_paren) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s must be wrapped in #(...)", g_type_name (type)); return NULL; } last_key = make_anon_name ((*n_anon_vals)++); g_value_take_boxed (g_value_init (&value, GSK_TYPE_TRANSFORM), gsk_transform_new ()); result = bge_wdgt_spec_add_constant_source_value ( spec, last_key, &value, error); g_value_unset (&value); if (!result) return NULL; for (;;) { g_autofree char *instr = NULL; g_auto (GStrv) value_args = NULL; guint n_value_args = 0; g_autofree char *tmp_key = NULL; GET_TOKEN (&instr, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (instr, ")") == 0) break; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, enclosing_object, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &value_args, NULL, &n_value_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ";"); tmp_key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_transform_source_value ( spec, tmp_key, last_key, instr, (const char *const *) value_args, n_value_args, &local_error); RETURN_ERROR_UNLESS (result); g_clear_pointer (&last_key, g_free); last_key = g_steal_pointer (&tmp_key); } key = g_steal_pointer (&last_key); } else if (type == GSK_TYPE_PATH) { g_autoptr (GPtrArray) instrs = NULL; g_autoptr (GPtrArray) argss = NULL; g_autoptr (GArray) n_argss = NULL; instrs = g_ptr_array_new_with_free_func (g_free); argss = g_ptr_array_new_with_free_func ((GDestroyNotify) g_strfreev); n_argss = g_array_new (FALSE, FALSE, sizeof (guint)); if (!expect_closing_paren) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s must be wrapped in #(...)", g_type_name (type)); return NULL; } for (;;) { g_autofree char *instr = NULL; g_auto (GStrv) call_args = NULL; guint n_call_args = 0; GET_TOKEN (&instr, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (instr, ")") == 0) break; GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, "("); p = parse_args (p, spec, state, enclosing_object, macro_replacements, n_anon_vals, type_hints, line, column, NULL, NULL, 0, &call_args, NULL, &n_call_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); GET_TOKEN_EXPECT (&token, TOKEN_PARSE_DEFAULT, ";"); g_ptr_array_add (instrs, g_steal_pointer (&instr)); g_ptr_array_add (argss, g_steal_pointer (&call_args)); g_array_append_val (n_argss, n_call_args); } if (instrs->len == 0) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "not enough path builder instructions"); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_path_source_value ( spec, key, (const char *const *) instrs->pdata, (const char *const *const *) argss->pdata, (const guint *) (void *) n_argss->data, instrs->len, &local_error); RETURN_ERROR_UNLESS (result); } else if (type == GSK_TYPE_STROKE) { g_auto (GStrv) component_args = NULL; guint n_component_args = 0; GType types[] = { G_TYPE_DOUBLE, /* line width */ GSK_TYPE_LINE_CAP, GSK_TYPE_LINE_JOIN, G_TYPE_DOUBLE, /* miter limit */ }; if (!expect_closing_paren) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "type %s must be wrapped in #(...)", g_type_name (type)); return NULL; } p = parse_args (p, spec, state, enclosing_object, macro_replacements, n_anon_vals, type_hints, line, column, NULL, types, G_N_ELEMENTS (types), &component_args, NULL, &n_component_args, ARGS_PARSE_PARENS, &local_error); RETURN_ERROR_UNLESS (p != NULL); if (n_component_args != G_N_ELEMENTS (types)) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "%s type initializer can have %d arguments, got %u", g_type_name (GSK_TYPE_STROKE), (int) G_N_ELEMENTS (types), n_component_args); return NULL; } key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_component_source_value ( spec, key, GSK_TYPE_STROKE, (const char *const *) component_args, n_component_args, &local_error); RETURN_ERROR_UNLESS (result); } else { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Can't parse type %s", g_type_name (type)); return NULL; } if (constant) { key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_constant_source_value ( spec, key, &value, &local_error); g_value_unset (&value); RETURN_ERROR_UNLESS (result); } } for (;;) { GET_TOKEN (&token, TOKEN_PARSE_DEFAULT); if (g_strcmp0 (token, ":") == 0) { g_autofree char *property = NULL; g_autofree char *name = NULL; GET_TOKEN (&property, TOKEN_PARSE_DEFAULT); name = make_object_property_name (key, property, (*n_anon_vals)++); result = bge_wdgt_spec_add_property_value ( spec, name, key, property, &type, &local_error); RETURN_ERROR_UNLESS (result); g_clear_pointer (&key, g_free); key = g_steal_pointer (&name); } else break; } get_token = FALSE; g_strv_builder_add (builder, key); g_array_append_val (types_array, type); n_args++; need_comma = TRUE; } } if (n_out != NULL) *n_out = n_args; if (values_out != NULL) *values_out = g_strv_builder_end (builder); if (types_out != NULL) *types_out = g_array_steal (types_array, NULL); return p; } static char * parse_token_fundamental (const char *token, BgeWdgtSpec *spec, guint *n_anon_vals, guint *line, guint *column, GError **error) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; gunichar ch = 0; GValue value = { 0 }; g_autofree char *key = NULL; ch = g_utf8_get_char (token); if (ch == '-' || g_unichar_isdigit (ch)) { gboolean is_double = FALSE; g_autoptr (GVariant) variant = NULL; is_double = g_utf8_strchr (token, -1, '.') != NULL; if (is_double) variant = g_variant_parse (G_VARIANT_TYPE_DOUBLE, token, NULL, NULL, &local_error); else variant = g_variant_parse (G_VARIANT_TYPE_INT32, token, NULL, NULL, &local_error); if (variant == NULL) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unable to parse number value '%s': %s", token, local_error->message); return NULL; } if (is_double) g_value_set_double (g_value_init (&value, G_TYPE_DOUBLE), g_variant_get_double (variant)); else g_value_set_int (g_value_init (&value, G_TYPE_INT), g_variant_get_int32 (variant)); } else if (g_strcmp0 (token, "true") == 0) g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), TRUE); else if (g_strcmp0 (token, "false") == 0) g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), FALSE); else return g_strdup (token); if (key == NULL) key = make_anon_name ((*n_anon_vals)++); result = bge_wdgt_spec_add_constant_source_value ( spec, key, &value, error); g_value_unset (&value); if (!result) return NULL; return g_steal_pointer (&key); } static char * consume_token (const char **pp, const char *single_chars, TokenParseFlags flags, gboolean *was_quoted, GHashTable *macro_replacements, guint *line, guint *column, GError **error) { g_autofree char *token = NULL; token = consume_token_inner (pp, single_chars, flags, was_quoted, line, column, error); if (token == NULL) return NULL; if (macro_replacements != NULL) { const char *replacement = NULL; replacement = g_hash_table_lookup (macro_replacements, token); if (replacement != NULL) return g_strdup (replacement); else { const char *replace_start = NULL; replace_start = g_utf8_strchr (token, -1, '@'); if (replace_start != NULL) { const char *last_end = token; g_autoptr (GString) string = NULL; string = g_string_new (NULL); for (;;) { g_autofree char *replace = NULL; const char *with = NULL; if (replace_start - last_end > 0) g_string_append_len (string, last_end, replace_start - last_end); replace_start++; last_end = g_utf8_strchr (replace_start, -1, '@'); if (last_end == NULL) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "error in macro expansion: " "unterminated replacement"); return NULL; } replace = g_strndup (replace_start, last_end - replace_start); with = g_hash_table_lookup (macro_replacements, replace); if (with == NULL) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "error in macro expansion: " "undefined string \"%s\"", replace); return NULL; } g_string_append (string, with); last_end++; replace_start = g_utf8_strchr (last_end, '@', -1); if (replace_start == NULL) break; } if (*last_end != '\0') g_string_append (string, last_end); return g_string_free_and_steal (g_steal_pointer (&string)); } } } return g_steal_pointer (&token); } static char * consume_token_inner (const char **pp, const char *single_chars, TokenParseFlags flags, gboolean *was_quoted, guint *line, guint *column, GError **error) { const char *p = *pp; gboolean hit_non_space = FALSE; if (was_quoted != NULL) *was_quoted = FALSE; #define UNEXPECTED_EOF \ G_STMT_START \ { \ g_set_error ( \ error, \ G_IO_ERROR, \ G_IO_ERROR_UNKNOWN, \ "Unexpected EOF"); \ return NULL; \ } \ G_STMT_END #define RETURN_TOKEN \ G_STMT_START \ { \ g_autofree char *_ret = NULL; \ \ _ret = g_strndup (*pp, p - *pp); \ *pp = p; \ return g_steal_pointer (&_ret); \ } \ G_STMT_END #define RETURN_TOKEN_ADJUST_NEXT_CHAR \ G_STMT_START \ { \ g_autofree char *_ret = NULL; \ \ _ret = g_strndup (*pp, p - *pp); \ *pp = g_utf8_next_char (p); \ return g_steal_pointer (&_ret); \ } \ G_STMT_END if (IS_EOF (p)) UNEXPECTED_EOF; for (; !IS_EOF (p); p = g_utf8_next_char (p)) { gunichar ch = 0; gboolean is_whitespace = FALSE; gboolean is_quotes = FALSE; ch = g_utf8_get_char (p); if (ch == '\n') { (*line)++; *column = 0; } else (*column)++; is_whitespace = ch == '\n' || g_unichar_isspace (ch); is_quotes = ch == '"'; if (is_whitespace) { if (!(flags & TOKEN_PARSE_QUOTED) && hit_non_space) RETURN_TOKEN; } else { if (is_quotes) { if (hit_non_space) { if (was_quoted != NULL) *was_quoted = TRUE; if (flags & TOKEN_PARSE_QUOTED) RETURN_TOKEN_ADJUST_NEXT_CHAR; else RETURN_TOKEN; } else { flags |= TOKEN_PARSE_QUOTED; *pp = g_utf8_next_char (p); if (IS_EOF (*pp)) UNEXPECTED_EOF; hit_non_space = TRUE; } } else if (flags & TOKEN_PARSE_QUOTED) { if (!hit_non_space) { g_set_error ( error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Expected quote"); return NULL; } } else if (single_chars != NULL && g_utf8_strchr (single_chars, -1, ch) != NULL) { if (hit_non_space) RETURN_TOKEN; else { char buf[16] = { 0 }; g_unichar_to_utf8 (ch, buf); *pp = g_utf8_next_char (p); return g_strdup (buf); } } if (!hit_non_space) { *pp = p; hit_non_space = TRUE; } } } if (!(flags & TOKEN_PARSE_QUOTED) && hit_non_space) RETURN_TOKEN; UNEXPECTED_EOF; #undef RETURN_TOKEN_ADJUST_NEXT_CHAR #undef RETURN_TOKEN #undef UNEXPECTED_EOF } static gdouble eval_closure (gpointer this, guint n_param_values, const GValue *param_values, EvalClosureData *data) { GArray *ops = data->ops; gdouble *workbuf0 = data->workbuf0; gdouble *workbuf1 = data->workbuf1; gdouble result = 0.0; for (guint i = 0; i < n_param_values; i++) { workbuf0[i] = g_value_get_double (¶m_values[i]); workbuf1[i] = 1.0; } for (guint i = 0; i < ops->len; i++) { EvalOperator *op = NULL; guint left_idx = 0; guint right_idx = 0; gdouble left = 0.0; gdouble right = 0.0; op = &g_array_index (ops, EvalOperator, i); left_idx = op->pos; while (workbuf1[left_idx] < 0.0) { left_idx--; } right_idx = op->pos + 1; while (workbuf1[right_idx] < 0.0) { right_idx++; } left = workbuf0[left_idx]; right = workbuf0[right_idx]; switch (op->op) { case OPERATOR_ADD: result = left + right; break; case OPERATOR_SUBTRACT: result = left - right; break; case OPERATOR_MULTIPLY: result = left * right; break; case OPERATOR_DIVIDE: result = left / right; break; case OPERATOR_MODULUS: result = fmod (left, right); break; case OPERATOR_POWER: result = pow (left, right); break; default: g_assert_not_reached (); } workbuf0[left_idx] = result; workbuf1[left_idx] = 1.0; workbuf1[right_idx] = -1.0; } return result; } static char * make_object_property_name (const char *object, const char *property, guint n) { return g_strdup_printf ("prop@%u(%s).%s", n, object, property); } static char * make_widget_allocation_name (const char *widget, guint n) { return g_strdup_printf ("allocation@%u(%s)", n, widget); } static char * make_widget_measurement_name (guint n) { return g_strdup_printf ("measurement@%u", n); } static char * make_anon_name (guint n) { return g_strdup_printf ("anon@%u", n); } static gint cmp_operator (EvalOperator *a, EvalOperator *b) { int a_prec = 0; int b_prec = 0; a_prec = operator_precedence[a->op]; b_prec = operator_precedence[b->op]; return a_prec > b_prec ? -1 : 1; } bazaar-org-bazaar-b6e9a65/bge/wdgt/fmt/parser.h000066400000000000000000000015701522167256300213710ustar00rootroot00000000000000/* parser.h * * Copyright 2026 Eva M * * 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 */ #include "bge.h" G_BEGIN_DECLS BgeWdgtSpec * bge_wdgt_parse_string (const char *string, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/000077500000000000000000000000001522167256300204445ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/lookup.h000066400000000000000000000047171522167256300221370ustar00rootroot00000000000000/* lookup.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include #include "bge.h" G_BEGIN_DECLS #define ARGBUF_SIZE 128 typedef GskTransform *(*TransformCallFunc) (GskTransform *next, const GValue args[]); typedef struct { const char *name; guint n_args; GType args[16]; gpointer func; TransformCallFunc call; } TransformInstr; gboolean lookup_transform_instr (const char *lookup_name, TransformInstr *out); typedef void (*PathBuilderCallFunc) (GskPathBuilder *builder, const GValue args[]); typedef struct { const char *name; guint n_args; GType args[16]; gpointer func; PathBuilderCallFunc call; } PathBuilderInstr; gboolean lookup_path_builder_instr (const char *lookup_name, PathBuilderInstr *out); typedef void (*SnapshotCallFunc) (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest); typedef struct { const char *name; guint n_args; guint n_rest; GType args[16]; gpointer func; SnapshotCallFunc call; /* for push instrs only */ guint n_pops; } SnapshotInstr; gboolean lookup_snapshot_push_instr (const char *lookup_name, SnapshotInstr *out); gboolean lookup_snapshot_transform_instr (const char *lookup_name, SnapshotInstr *out); gboolean lookup_snapshot_append_instr (const char *lookup_name, SnapshotInstr *out); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/meson.build000066400000000000000000000001151522167256300226030ustar00rootroot00000000000000bge_sources += files( 'path-builder.c', 'snapshot.c', 'transform.c', ) bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/path-builder.c000066400000000000000000000322151522167256300231730ustar00rootroot00000000000000/* path-builder.c * * Copyright 2026 Eva M * * 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 */ #include "lookup.h" static void path_builder_instr_add_circle (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_circle ( builder, g_value_get_boxed (&args[0]), g_value_get_double (&args[1])); } static void path_builder_instr_add_layout (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_layout ( builder, g_value_get_object (&args[0])); } static void path_builder_instr_add_path (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_path ( builder, g_value_get_boxed (&args[0])); } static void path_builder_instr_add_rect (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_rect ( builder, g_value_get_boxed (&args[0])); } static void path_builder_instr_add_reverse_path (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_reverse_path ( builder, g_value_get_boxed (&args[0])); } static void path_builder_instr_add_rounded_rect (GskPathBuilder *builder, const GValue args[]) { GskRoundedRect rrect = { 0 }; rrect.bounds = *(graphene_rect_t *) g_value_get_boxed (&args[0]); rrect.corner[0] = *(graphene_size_t *) g_value_get_boxed (&args[1]); rrect.corner[1] = *(graphene_size_t *) g_value_get_boxed (&args[2]); rrect.corner[2] = *(graphene_size_t *) g_value_get_boxed (&args[3]); rrect.corner[3] = *(graphene_size_t *) g_value_get_boxed (&args[4]); gsk_path_builder_add_rounded_rect ( builder, &rrect); } static void path_builder_instr_add_segment (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_add_segment ( builder, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_boxed (&args[2])); } static void path_builder_instr_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3])); } static void path_builder_instr_close (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_close (builder); } static void path_builder_instr_conic_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_conic_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4])); } static void path_builder_instr_cubic_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_cubic_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4]), g_value_get_double (&args[5])); } static void path_builder_instr_rel_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3])); } static void path_builder_instr_html_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_html_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4])); } static void path_builder_instr_line_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_line_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static void path_builder_instr_move_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_move_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static void path_builder_instr_quad_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_quad_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3])); } static void path_builder_instr_rel_conic_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_conic_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4])); } static void path_builder_instr_rel_cubic_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_cubic_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4]), g_value_get_double (&args[5])); } static void path_builder_instr_rel_html_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_html_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4])); } static void path_builder_instr_rel_line_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_line_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static void path_builder_instr_rel_move_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_move_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static void path_builder_instr_rel_quad_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_quad_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3])); } static void path_builder_instr_svg_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_svg_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_boolean (&args[3]), g_value_get_boolean (&args[4]), g_value_get_double (&args[5]), g_value_get_double (&args[6])); } static void path_builder_instr_rel_svg_arc_to (GskPathBuilder *builder, const GValue args[]) { gsk_path_builder_rel_svg_arc_to ( builder, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_boolean (&args[3]), g_value_get_boolean (&args[4]), g_value_get_double (&args[5]), g_value_get_double (&args[6])); } gboolean lookup_path_builder_instr (const char *lookup_name, PathBuilderInstr *out) { PathBuilderInstr instrs[] = { { "add-circle", 2, { GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, }, gsk_path_builder_add_circle, path_builder_instr_add_circle, }, { "add-layout", 1, { PANGO_TYPE_LAYOUT, }, gsk_path_builder_add_layout, path_builder_instr_add_layout, }, { "add-path", 1, { GSK_TYPE_PATH, }, gsk_path_builder_add_path, path_builder_instr_add_path, }, { "add-rect", 1, { GRAPHENE_TYPE_RECT, }, gsk_path_builder_add_rect, path_builder_instr_add_rect, }, { "add-reverse-path", 1, { GSK_TYPE_PATH, }, gsk_path_builder_add_reverse_path, path_builder_instr_add_reverse_path, }, { "add-rounded-rect", 5, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, }, gsk_path_builder_add_rounded_rect, path_builder_instr_add_rounded_rect, }, { "add-segment", 3, { GSK_TYPE_PATH, GSK_TYPE_PATH_POINT, GSK_TYPE_PATH_POINT, }, gsk_path_builder_add_segment, path_builder_instr_add_segment, }, { "arc-to", 4, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_arc_to, path_builder_instr_arc_to, }, { "close", 0, {}, gsk_path_builder_close, path_builder_instr_close, }, { "conic-to", 5, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_conic_to, path_builder_instr_conic_to, }, { "cubic-to", 6, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_cubic_to, path_builder_instr_cubic_to, }, { "html-arc-to", 5, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_html_arc_to, path_builder_instr_html_arc_to, }, { "line-to", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_line_to, path_builder_instr_line_to, }, { "move-to", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_move_to, path_builder_instr_move_to, }, { "quad-to", 4, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_quad_to, path_builder_instr_quad_to, }, { "rel-arc-to", 4, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_arc_to, path_builder_instr_rel_arc_to, }, { "rel-conic-to", 5, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_conic_to, path_builder_instr_rel_conic_to, }, { "rel-cubic-to", 6, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_cubic_to, path_builder_instr_rel_cubic_to, }, { "rel-html-arc-to", 5, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_html_arc_to, path_builder_instr_rel_html_arc_to, }, { "rel-line-to", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_line_to, path_builder_instr_rel_line_to, }, { "rel-move-to", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_move_to, path_builder_instr_rel_move_to, }, { "rel-quad-to", 4, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_quad_to, path_builder_instr_rel_quad_to, }, { "rel-svg-arc-to", 7, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_rel_svg_arc_to, path_builder_instr_rel_svg_arc_to, }, { "svg-arc-to", 7, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_path_builder_svg_arc_to, path_builder_instr_svg_arc_to, }, }; for (guint i = 0; i < G_N_ELEMENTS (instrs); i++) { if (g_strcmp0 (lookup_name, instrs[i].name) == 0) { *out = instrs[i]; return TRUE; } } return FALSE; } bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/snapshot.c000066400000000000000000000731561522167256300224630ustar00rootroot00000000000000/* snapshot.c * * Copyright 2026 Eva M * * 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 */ #include "lookup.h" static void snapshot_push_instr_opacity (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_opacity ( snapshot, g_value_get_double (&args[0])); } static void snapshot_push_instr_isolation (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_isolation ( snapshot, g_value_get_flags (&args[0])); } static void snapshot_push_instr_blur (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_blur ( snapshot, g_value_get_double (&args[0])); } static void snapshot_push_instr_color_matrix (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_color_matrix ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_push_instr_component_transfer (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_component_transfer ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_boxed (&args[2]), g_value_get_boxed (&args[3])); } static void snapshot_push_instr_repeat (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_repeat ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_push_instr_clip (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_clip ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_push_instr_rounded_clip (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { GskRoundedRect rrect = { 0 }; rrect.bounds = *(graphene_rect_t *) g_value_get_boxed (&args[0]); rrect.corner[0] = *(graphene_size_t *) g_value_get_boxed (&args[1]); rrect.corner[1] = *(graphene_size_t *) g_value_get_boxed (&args[2]); rrect.corner[2] = *(graphene_size_t *) g_value_get_boxed (&args[3]); rrect.corner[3] = *(graphene_size_t *) g_value_get_boxed (&args[4]); gtk_snapshot_push_rounded_clip ( snapshot, &rrect); } static void snapshot_push_instr_fill (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_fill ( snapshot, g_value_get_boxed (&args[0]), g_value_get_enum (&args[1])); } static void snapshot_push_instr_stroke (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_stroke ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_push_instr_shadow (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_shadows = 0; GskShadow shadows[ARGBUF_SIZE] = { 0 }; n_shadows = MIN (n_rest / 4, G_N_ELEMENTS (shadows)); for (guint i = 0; i < n_shadows; i++) { shadows[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 4 + 0]); shadows[i].dx = g_value_get_double (&rest[i * 4 + 1]); shadows[i].dy = g_value_get_double (&rest[i * 4 + 2]); shadows[i].radius = g_value_get_double (&rest[i * 4 + 3]); } gtk_snapshot_push_shadow ( snapshot, shadows, n_shadows); } static void snapshot_push_instr_blend (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_blend ( snapshot, g_value_get_enum (&args[0])); } static void snapshot_push_instr_mask (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_mask ( snapshot, g_value_get_enum (&args[0])); } static void snapshot_push_instr_copy (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_copy ( snapshot); } static void snapshot_push_instr_composite (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_composite ( snapshot, g_value_get_enum (&args[0])); } static void snapshot_push_instr_cross_fade (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_push_cross_fade ( snapshot, g_value_get_double (&args[0])); } gboolean lookup_snapshot_push_instr (const char *lookup_name, SnapshotInstr *out) { SnapshotInstr instrs[] = { { "opacity", 1, 0, { G_TYPE_DOUBLE, }, gtk_snapshot_push_opacity, snapshot_push_instr_opacity, 1, }, { "isolation", 1, 0, { GSK_TYPE_ISOLATION, }, gtk_snapshot_push_isolation, snapshot_push_instr_isolation, 1, }, { "blur", 1, 0, { G_TYPE_DOUBLE, }, gtk_snapshot_push_blur, snapshot_push_instr_blur, 1, }, { "color-matrix", 2, 0, { GRAPHENE_TYPE_MATRIX, GRAPHENE_TYPE_VEC4, }, gtk_snapshot_push_color_matrix, snapshot_push_instr_color_matrix, 2, }, { "component-transfer", 4, 0, { GSK_TYPE_COMPONENT_TRANSFER, GSK_TYPE_COMPONENT_TRANSFER, GSK_TYPE_COMPONENT_TRANSFER, GSK_TYPE_COMPONENT_TRANSFER, }, gtk_snapshot_push_component_transfer, snapshot_push_instr_component_transfer, 2, }, { "repeat", 2, 0, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_RECT, }, gtk_snapshot_push_repeat, snapshot_push_instr_repeat, 2, }, { "clip", 1, 0, { GRAPHENE_TYPE_RECT, }, gtk_snapshot_push_clip, snapshot_push_instr_clip, 1, }, { "rounded-clip", 5, 0, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, }, gtk_snapshot_push_rounded_clip, snapshot_push_instr_rounded_clip, 1, }, { "fill", 2, 0, { GSK_TYPE_PATH, GSK_TYPE_FILL_RULE, }, gtk_snapshot_push_fill, snapshot_push_instr_fill, 1, }, { "stroke", 2, 0, { GSK_TYPE_PATH, GSK_TYPE_STROKE, }, gtk_snapshot_push_stroke, snapshot_push_instr_stroke, 1, }, { "shadow", 4, 4, { GDK_TYPE_RGBA, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gtk_snapshot_push_shadow, snapshot_push_instr_shadow, 1, }, { "blend", 1, 0, { GSK_TYPE_BLEND_MODE, }, gtk_snapshot_push_blend, snapshot_push_instr_blend, 2, }, { "mask", 1, 0, { GSK_TYPE_MASK_MODE, }, gtk_snapshot_push_mask, snapshot_push_instr_mask, 2, }, { "copy", 0, 0, {}, gtk_snapshot_push_copy, snapshot_push_instr_copy, 1, }, { "composite", 1, 0, { GSK_TYPE_PORTER_DUFF, }, gtk_snapshot_push_composite, snapshot_push_instr_composite, 2, }, { "cross-fade", 1, 0, { G_TYPE_DOUBLE, }, gtk_snapshot_push_cross_fade, snapshot_push_instr_cross_fade, 2, }, }; for (guint i = 0; i < G_N_ELEMENTS (instrs); i++) { if (g_strcmp0 (lookup_name, instrs[i].name) == 0) { *out = instrs[i]; return TRUE; } } return FALSE; } static void snapshot_transform_instr_transform (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_transform ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_transform_instr_transform_matrix (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_transform_matrix ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_transform_instr_translate (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_translate ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_transform_instr_translate_3d (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_translate_3d ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_transform_instr_rotate (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_rotate ( snapshot, g_value_get_double (&args[0])); } static void snapshot_transform_instr_rotate_3d (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_rotate_3d ( snapshot, g_value_get_double (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_transform_instr_scale (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_scale ( snapshot, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static void snapshot_transform_instr_scale_3d (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_scale_3d ( snapshot, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2])); } static void snapshot_transform_instr_perspective (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_scale_3d ( snapshot, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2])); } gboolean lookup_snapshot_transform_instr (const char *lookup_name, SnapshotInstr *out) { SnapshotInstr instrs[] = { { "transform", 1, 0, { GSK_TYPE_TRANSFORM, }, gtk_snapshot_transform, snapshot_transform_instr_transform, }, { "transform-matrix", 1, 0, { GRAPHENE_TYPE_MATRIX, }, gtk_snapshot_transform_matrix, snapshot_transform_instr_transform_matrix, }, { "translate", 1, 0, { GRAPHENE_TYPE_POINT, }, gtk_snapshot_translate, snapshot_transform_instr_translate, }, { "translate-3d", 1, 0, { GRAPHENE_TYPE_POINT3D, }, gtk_snapshot_translate_3d, snapshot_transform_instr_translate_3d, }, { "rotate", 1, 0, { G_TYPE_DOUBLE, }, gtk_snapshot_rotate, snapshot_transform_instr_rotate, }, { "rotate-3d", 2, 0, { G_TYPE_DOUBLE, GRAPHENE_TYPE_VEC3, }, gtk_snapshot_rotate_3d, snapshot_transform_instr_rotate_3d, }, { "scale", 2, 0, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gtk_snapshot_scale, snapshot_transform_instr_scale, }, { "scale-3d", 3, 0, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gtk_snapshot_scale_3d, snapshot_transform_instr_scale_3d, }, { "perspective", 1, 0, { G_TYPE_DOUBLE, }, gtk_snapshot_perspective, snapshot_transform_instr_perspective, }, }; for (guint i = 0; i < G_N_ELEMENTS (instrs); i++) { if (g_strcmp0 (lookup_name, instrs[i].name) == 0) { *out = instrs[i]; return TRUE; } } return FALSE; } static void snapshot_append_instr_node (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_node ( snapshot, g_value_get_boxed (&args[0])); } static void snapshot_append_instr_texture (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_texture ( snapshot, g_value_get_object (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_append_instr_scaled_texture (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_scaled_texture ( snapshot, g_value_get_object (&args[0]), g_value_get_enum (&args[1]), g_value_get_boxed (&args[2])); } static void snapshot_append_instr_color (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_color ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_append_instr_linear_gradient (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_stops = 0; GskColorStop stops[ARGBUF_SIZE] = { 0 }; n_stops = MIN (n_rest / 2, G_N_ELEMENTS (stops)); for (guint i = 0; i < n_stops; i++) { stops[i].offset = g_value_get_double (&rest[i * 2 + 0]); stops[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 2 + 1]); } gtk_snapshot_append_linear_gradient ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_boxed (&args[2]), stops, n_stops); } static void snapshot_append_instr_repeating_linear_gradient (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_stops = 0; GskColorStop stops[ARGBUF_SIZE] = { 0 }; n_stops = MIN (n_rest / 2, G_N_ELEMENTS (stops)); for (guint i = 0; i < n_stops; i++) { stops[i].offset = g_value_get_double (&rest[i * 2 + 0]); stops[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 2 + 1]); } gtk_snapshot_append_repeating_linear_gradient ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_boxed (&args[2]), stops, n_stops); } static void snapshot_append_instr_radial_gradient (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_stops = 0; GskColorStop stops[ARGBUF_SIZE] = { 0 }; n_stops = MIN (n_rest / 2, G_N_ELEMENTS (stops)); for (guint i = 0; i < n_stops; i++) { stops[i].offset = g_value_get_double (&rest[i * 2 + 0]); stops[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 2 + 1]); } gtk_snapshot_append_radial_gradient ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4]), g_value_get_double (&args[5]), stops, n_stops); } static void snapshot_append_instr_repeating_radial_gradient (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_stops = 0; GskColorStop stops[ARGBUF_SIZE] = { 0 }; n_stops = MIN (n_rest / 2, G_N_ELEMENTS (stops)); for (guint i = 0; i < n_stops; i++) { stops[i].offset = g_value_get_double (&rest[i * 2 + 0]); stops[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 2 + 1]); } gtk_snapshot_append_repeating_radial_gradient ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4]), g_value_get_double (&args[5]), stops, n_stops); } static void snapshot_append_instr_conic_gradient (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { guint n_stops = 0; GskColorStop stops[ARGBUF_SIZE] = { 0 }; n_stops = MIN (n_rest / 2, G_N_ELEMENTS (stops)); for (guint i = 0; i < n_stops; i++) { stops[i].offset = g_value_get_double (&rest[i * 2 + 0]); stops[i].color = *(GdkRGBA *) g_value_get_boxed (&rest[i * 2 + 1]); } gtk_snapshot_append_conic_gradient ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_double (&args[2]), stops, n_stops); } static void snapshot_append_instr_border (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { GskRoundedRect rrect = { 0 }; float border_width[4] = { 0 }; GdkRGBA border_color[4] = { 0 }; rrect.bounds = *(graphene_rect_t *) g_value_get_boxed (&args[0]); rrect.corner[0] = *(graphene_size_t *) g_value_get_boxed (&args[1]); rrect.corner[1] = *(graphene_size_t *) g_value_get_boxed (&args[2]); rrect.corner[2] = *(graphene_size_t *) g_value_get_boxed (&args[3]); rrect.corner[3] = *(graphene_size_t *) g_value_get_boxed (&args[4]); border_width[0] = g_value_get_double (&args[5]); border_width[1] = g_value_get_double (&args[6]); border_width[2] = g_value_get_double (&args[7]); border_width[3] = g_value_get_double (&args[8]); border_color[0] = *(GdkRGBA *) g_value_get_boxed (&args[9]); border_color[1] = *(GdkRGBA *) g_value_get_boxed (&args[10]); border_color[2] = *(GdkRGBA *) g_value_get_boxed (&args[11]); border_color[3] = *(GdkRGBA *) g_value_get_boxed (&args[12]); gtk_snapshot_append_border ( snapshot, &rrect, border_width, border_color); } static void snapshot_append_instr_inset_shadow (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { GskRoundedRect rrect = { 0 }; rrect.bounds = *(graphene_rect_t *) g_value_get_boxed (&args[0]); rrect.corner[0] = *(graphene_size_t *) g_value_get_boxed (&args[1]); rrect.corner[1] = *(graphene_size_t *) g_value_get_boxed (&args[2]); rrect.corner[2] = *(graphene_size_t *) g_value_get_boxed (&args[3]); rrect.corner[3] = *(graphene_size_t *) g_value_get_boxed (&args[4]); gtk_snapshot_append_inset_shadow ( snapshot, &rrect, g_value_get_boxed (&args[5]), g_value_get_double (&args[6]), g_value_get_double (&args[7]), g_value_get_double (&args[8]), g_value_get_double (&args[9])); } static void snapshot_append_instr_outset_shadow (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { GskRoundedRect rrect = { 0 }; rrect.bounds = *(graphene_rect_t *) g_value_get_boxed (&args[0]); rrect.corner[0] = *(graphene_size_t *) g_value_get_boxed (&args[1]); rrect.corner[1] = *(graphene_size_t *) g_value_get_boxed (&args[2]); rrect.corner[2] = *(graphene_size_t *) g_value_get_boxed (&args[3]); rrect.corner[3] = *(graphene_size_t *) g_value_get_boxed (&args[4]); gtk_snapshot_append_outset_shadow ( snapshot, &rrect, g_value_get_boxed (&args[5]), g_value_get_double (&args[6]), g_value_get_double (&args[7]), g_value_get_double (&args[8]), g_value_get_double (&args[9])); } static void snapshot_append_instr_layout (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_layout ( snapshot, g_value_get_object (&args[0]), g_value_get_boxed (&args[1])); } static void snapshot_append_instr_fill (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_fill ( snapshot, g_value_get_boxed (&args[0]), g_value_get_enum (&args[1]), g_value_get_boxed (&args[2])); } static void snapshot_append_instr_stroke (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_stroke ( snapshot, g_value_get_boxed (&args[0]), g_value_get_boxed (&args[1]), g_value_get_boxed (&args[2])); } static void snapshot_append_instr_paste (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { gtk_snapshot_append_paste ( snapshot, g_value_get_boxed (&args[0]), g_value_get_uint64 (&args[1])); } static void snapshot_append_instr_paintable (GtkSnapshot *snapshot, const GValue args[], const GValue rest[], guint n_rest) { graphene_rect_t rect = { 0 }; rect = *(graphene_rect_t *) g_value_get_boxed (&args[1]); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &rect.origin); gdk_paintable_snapshot ( g_value_get_object (&args[0]), snapshot, rect.size.width, rect.size.height); gtk_snapshot_restore (snapshot); } gboolean lookup_snapshot_append_instr (const char *lookup_name, SnapshotInstr *out) { SnapshotInstr instrs[] = { { "node", 1, 0, { GSK_TYPE_RENDER_NODE, }, gtk_snapshot_append_node, snapshot_append_instr_node, }, { "texture", 2, 0, { GDK_TYPE_TEXTURE, GRAPHENE_TYPE_RECT, }, gtk_snapshot_append_texture, snapshot_append_instr_texture, }, { "scaled-texture", 3, 0, { GDK_TYPE_TEXTURE, GSK_TYPE_SCALING_FILTER, GRAPHENE_TYPE_RECT, }, gtk_snapshot_append_scaled_texture, snapshot_append_instr_scaled_texture, }, { "color", 2, 0, { GDK_TYPE_RGBA, GRAPHENE_TYPE_RECT, }, gtk_snapshot_append_color, snapshot_append_instr_color, }, { "linear-gradient", 5, 2, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_POINT, GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, GDK_TYPE_RGBA, }, gtk_snapshot_append_linear_gradient, snapshot_append_instr_linear_gradient, }, { "repeating-linear-gradient", 5, 2, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_POINT, GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, GDK_TYPE_RGBA, }, gtk_snapshot_append_repeating_linear_gradient, snapshot_append_instr_repeating_linear_gradient, }, { "radial-gradient", 8, 2, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, GDK_TYPE_RGBA, }, gtk_snapshot_append_radial_gradient, snapshot_append_instr_radial_gradient, }, { "repeating-radial-gradient", 8, 2, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, GDK_TYPE_RGBA, }, gtk_snapshot_append_repeating_radial_gradient, snapshot_append_instr_repeating_radial_gradient, }, { "conic-gradient", 5, 2, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_POINT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, GDK_TYPE_RGBA, }, gtk_snapshot_append_conic_gradient, snapshot_append_instr_conic_gradient, }, { "border", 13, 0, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, GDK_TYPE_RGBA, GDK_TYPE_RGBA, GDK_TYPE_RGBA, GDK_TYPE_RGBA, }, gtk_snapshot_append_border, snapshot_append_instr_border, }, { "inset-shadow", 10, 0, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GDK_TYPE_RGBA, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gtk_snapshot_append_inset_shadow, snapshot_append_instr_inset_shadow, }, { "outset-shadow", 10, 0, { GRAPHENE_TYPE_RECT, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GRAPHENE_TYPE_SIZE, GDK_TYPE_RGBA, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gtk_snapshot_append_outset_shadow, snapshot_append_instr_outset_shadow, }, { "layout", 2, 0, { PANGO_TYPE_LAYOUT, GDK_TYPE_RGBA, }, gtk_snapshot_append_layout, snapshot_append_instr_layout, }, { "fill", 3, 0, { GSK_TYPE_PATH, GSK_TYPE_FILL_RULE, GDK_TYPE_RGBA, }, gtk_snapshot_append_fill, snapshot_append_instr_fill, }, { "stroke", 3, 0, { GSK_TYPE_PATH, GSK_TYPE_STROKE, GDK_TYPE_RGBA, }, gtk_snapshot_append_stroke, snapshot_append_instr_stroke, }, { "paste", 2, 0, { GRAPHENE_TYPE_RECT, G_TYPE_UINT64, }, gtk_snapshot_append_paste, snapshot_append_instr_paste, }, { "paintable", 2, 0, { GDK_TYPE_PAINTABLE, GRAPHENE_TYPE_RECT, }, gdk_paintable_snapshot, snapshot_append_instr_paintable, }, }; for (guint i = 0; i < G_N_ELEMENTS (instrs); i++) { if (g_strcmp0 (lookup_name, instrs[i].name) == 0) { *out = instrs[i]; return TRUE; } } return FALSE; } bazaar-org-bazaar-b6e9a65/bge/wdgt/lookup/transform.c000066400000000000000000000131641522167256300226300ustar00rootroot00000000000000/* transform.c * * Copyright 2026 Eva M * * 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 */ #include "lookup.h" static GskTransform * transform_instr_transform (GskTransform *next, const GValue args[]) { return gsk_transform_transform ( next, g_value_get_boxed (&args[0])); } static GskTransform * transform_instr_invert (GskTransform *next, const GValue args[]) { return gsk_transform_transform ( next, g_value_get_boxed (&args[0])); } static GskTransform * transform_instr_matrix (GskTransform *next, const GValue args[]) { return gsk_transform_matrix ( next, g_value_get_boxed (&args[0])); } static GskTransform * transform_instr_matrix_2d (GskTransform *next, const GValue args[]) { return gsk_transform_matrix_2d ( next, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2]), g_value_get_double (&args[3]), g_value_get_double (&args[4]), g_value_get_double (&args[5])); } static GskTransform * transform_instr_translate (GskTransform *next, const GValue args[]) { return gsk_transform_translate ( next, g_value_get_boxed (&args[0])); } static GskTransform * transform_instr_translate_3d (GskTransform *next, const GValue args[]) { return gsk_transform_translate_3d ( next, g_value_get_boxed (&args[0])); } static GskTransform * transform_instr_skew (GskTransform *next, const GValue args[]) { return gsk_transform_skew ( next, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static GskTransform * transform_instr_rotate (GskTransform *next, const GValue args[]) { return gsk_transform_rotate ( next, g_value_get_double (&args[0])); } static GskTransform * transform_instr_rotate_3d (GskTransform *next, const GValue args[]) { return gsk_transform_rotate_3d ( next, g_value_get_double (&args[0]), g_value_get_boxed (&args[1])); } static GskTransform * transform_instr_scale (GskTransform *next, const GValue args[]) { return gsk_transform_scale ( next, g_value_get_double (&args[0]), g_value_get_double (&args[1])); } static GskTransform * transform_instr_scale_3d (GskTransform *next, const GValue args[]) { return gsk_transform_scale_3d ( next, g_value_get_double (&args[0]), g_value_get_double (&args[1]), g_value_get_double (&args[2])); } static GskTransform * transform_instr_perspective (GskTransform *next, const GValue args[]) { return gsk_transform_perspective ( next, g_value_get_double (&args[0])); } gboolean lookup_transform_instr (const char *lookup_name, TransformInstr *out) { TransformInstr instrs[] = { { "transform", 1, { GSK_TYPE_TRANSFORM, }, gsk_transform_transform, transform_instr_transform, }, { "invert", 0, {}, gsk_transform_invert, transform_instr_invert, }, { "matrix", 1, { GRAPHENE_TYPE_MATRIX, }, gsk_transform_matrix, transform_instr_matrix, }, { "matrix-2d", 6, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_transform_matrix_2d, transform_instr_matrix_2d, }, { "translate", 1, { GRAPHENE_TYPE_POINT, }, gsk_transform_translate, transform_instr_translate, }, { "translate-3d", 1, { GRAPHENE_TYPE_POINT3D, }, gsk_transform_translate_3d, transform_instr_translate_3d, }, { "skew", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_transform_skew, transform_instr_skew, }, { "rotate", 1, { G_TYPE_DOUBLE, }, gsk_transform_rotate, transform_instr_rotate, }, { "rotate-3d", 2, { G_TYPE_DOUBLE, GRAPHENE_TYPE_VEC3, }, gsk_transform_rotate_3d, transform_instr_rotate_3d, }, { "scale", 2, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_transform_scale, transform_instr_scale, }, { "scale-3d", 3, { G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, }, gsk_transform_scale_3d, transform_instr_scale_3d, }, { "perspective", 1, { G_TYPE_DOUBLE, }, gsk_transform_perspective, transform_instr_perspective, }, }; for (guint i = 0; i < G_N_ELEMENTS (instrs); i++) { if (g_strcmp0 (lookup_name, instrs[i].name) == 0) { *out = instrs[i]; return TRUE; } } return FALSE; } bazaar-org-bazaar-b6e9a65/bge/wdgt/meson.build000066400000000000000000000003061522167256300212740ustar00rootroot00000000000000bge_sources += files( 'bge-wdgt-spec.c', 'bge-easing.c', ) bge_headers += files( 'bge-wdgt-spec.h', 'bge-wdgt-renderer.h', 'bge-easing.h', ) subdir('util') subdir('lookup') subdir('fmt') bazaar-org-bazaar-b6e9a65/bge/wdgt/util/000077500000000000000000000000001522167256300201105ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/bge/wdgt/util/marshal.c000066400000000000000000000154011522167256300217040ustar00rootroot00000000000000/* marshal.c * * Copyright 2026 Eva M * * 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 */ #include "marshal.h" void _marshal_DIRECT__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_DIRECT__ARGS_DIRECT) (gpointer data1, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer data2); GCClosure *cc = (GCClosure *) closure; gpointer data1, data2; GMarshalFunc_DIRECT__ARGS_DIRECT callback; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values >= 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_DIRECT__ARGS_DIRECT) (marshal_data ? marshal_data : cc->callback); callback (data1, return_value, n_param_values - 1, param_values + 1, data2); } void _marshal_BOXED__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gpointer (*GMarshalFunc_BOXED__ARGS_DIRECT) (gpointer data1, guint n_param_values, const GValue *param_values, gpointer data2); GCClosure *cc = (GCClosure *) closure; gpointer data1, data2; GMarshalFunc_BOXED__ARGS_DIRECT callback; gpointer v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values >= 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOXED__ARGS_DIRECT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, n_param_values - 1, param_values + 1, data2); g_value_take_boxed (return_value, v_return); } void _marshal_BOOL__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOL__ARGS_DIRECT) (gpointer data1, guint n_param_values, const GValue *param_values, gpointer data2); GCClosure *cc = (GCClosure *) closure; gpointer data1, data2; GMarshalFunc_BOOL__ARGS_DIRECT callback; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values >= 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOL__ARGS_DIRECT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, n_param_values - 1, param_values + 1, data2); g_value_set_boolean (return_value, v_return); } void _marshal_DOUBLE__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gdouble (*GMarshalFunc_DOUBLE__ARGS_DIRECT) (gpointer data1, guint n_param_values, const GValue *param_values, gpointer data2); GCClosure *cc = (GCClosure *) closure; gpointer data1, data2; GMarshalFunc_DOUBLE__ARGS_DIRECT callback; gdouble v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values >= 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_DOUBLE__ARGS_DIRECT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, n_param_values - 1, param_values + 1, data2); g_value_set_double (return_value, v_return); } bazaar-org-bazaar-b6e9a65/bge/wdgt/util/marshal.h000066400000000000000000000046341522167256300217170ustar00rootroot00000000000000/* marshal.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include "bge.h" G_BEGIN_DECLS void _marshal_DIRECT__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data); void _marshal_BOXED__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data); void _marshal_BOOL__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data); void _marshal_DOUBLE__ARGS_DIRECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data); G_END_DECLS bazaar-org-bazaar-b6e9a65/bge/wdgt/util/meson.build000066400000000000000000000000471522167256300222530ustar00rootroot00000000000000bge_sources += files( 'marshal.c', ) bazaar-org-bazaar-b6e9a65/build-aux/000077500000000000000000000000001522167256300173235ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/build-aux/flatpak/000077500000000000000000000000001522167256300207455ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/build-aux/flatpak/flatpak-builder-tools/000077500000000000000000000000001522167256300251515ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/build-aux/flatpak/fuse-2.9.2-closefrom.patch000066400000000000000000000007001522167256300253620ustar00rootroot00000000000000--- fuse-2.9.2/util/ulockmgr_server.c.closefromfix 2019-01-04 05:33:33.000000000 -0800 +++ fuse-2.9.2/util/ulockmgr_server.c 2022-07-12 12:29:56.445402244 -0700 @@ -124,7 +124,7 @@ return res; } -static int closefrom(int minfd) +static int _closefrom(int minfd) { DIR *dir = opendir("/proc/self/fd"); if (dir) { @@ -384,7 +384,7 @@ dup2(nullfd, 1); } close(3); - closefrom(5); + _closefrom(5); while (1) { char c; int sock; bazaar-org-bazaar-b6e9a65/build-aux/flatpak/fuse-2.9.2-namespace-conflict-fix.patch000066400000000000000000000010641522167256300277140ustar00rootroot00000000000000diff -up fuse-2.9.2/include/fuse_kernel.h.conflictfix fuse-2.9.2/include/fuse_kernel.h --- fuse-2.9.2/include/fuse_kernel.h.conflictfix 2013-06-26 09:31:57.862198038 -0400 +++ fuse-2.9.2/include/fuse_kernel.h 2013-06-26 09:32:19.679198365 -0400 @@ -88,12 +88,16 @@ #ifndef _LINUX_FUSE_H #define _LINUX_FUSE_H -#include +#ifdef __linux__ +#include +#else +#include #define __u64 uint64_t #define __s64 int64_t #define __u32 uint32_t #define __s32 int32_t #define __u16 uint16_t +#endif /* * Version negotiation: bazaar-org-bazaar-b6e9a65/build-aux/flatpak/fuse-disable-sys-mount-under-flatpak.patch000066400000000000000000000011671522167256300310450ustar00rootroot00000000000000From 1ec935f4abecd08957affc7b21bae6bf5be78931 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 12 Apr 2018 01:47:57 -0700 Subject: [PATCH] libfuse: disable sys mount under flatpak --- lib/mount.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/mount.c b/lib/mount.c index 7a18c11..1667db2 100644 --- a/lib/mount.c +++ b/lib/mount.c @@ -392,6 +392,9 @@ static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, int fd; int res; + /* disable in flatpak */ + return -2; + if (!mnt) { fprintf(stderr, "fuse: missing mountpoint parameter\n"); return -1; -- 2.17.0.rc2 bazaar-org-bazaar-b6e9a65/build-aux/flatpak/fusermount-wrapper.sh000066400000000000000000000006431522167256300251710ustar00rootroot00000000000000#!/bin/sh set -eo pipefail echo "Running fusermount wrapper, redirecting to host..." export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/flatpak/bus binary="fusermount" if flatpak-spawn --host fusermount3 --version &> /dev/null ; then binary="fusermount3" fi [ ! -z "$_FUSE_COMMFD" ] && export FD_ARGS="--env=_FUSE_COMMFD=${_FUSE_COMMFD} --forward-fd=${_FUSE_COMMFD}" exec flatpak-spawn --host ${FD_ARGS} "$binary" "$@" bazaar-org-bazaar-b6e9a65/build-aux/flatpak/io.github.kolunmi.Bazaar.json000066400000000000000000000425071522167256300264140ustar00rootroot00000000000000{ "id": "io.github.kolunmi.Bazaar", "runtime": "org.gnome.Platform", "runtime-version": "50", "sdk": "org.gnome.Sdk", "command": "bazaar", "sdk-extensions": [ "org.freedesktop.Sdk.Extension.llvm20" ], "tags": [ "nightly" ], "desktop-file-name-suffix": " (Nightly)", "finish-args": [ "--share=network", "--share=ipc", "--socket=fallback-x11", "--socket=wayland", "--device=dri", "--filesystem=/var/lib/flatpak", "--filesystem=xdg-data/flatpak", "--talk-name=org.freedesktop.Flatpak", "--system-talk-name=org.freedesktop.Flatpak.SystemHelper", "--filesystem=/var/tmp", "--filesystem=~/.var/app", "--system-talk-name=org.freedesktop.Accounts", "--talk-name=org.freedesktop.impl.portal.PermissionStore" ], "cleanup": [ "/share/zsh", "/share/gettext", "/include", "/lib/pkgconfig", "/lib/cmake", "/share/applications/mimeinfo.cache", "/share/bash-completion", "/share/zsh/site-functions", "/share/icons/hicolor/icon-theme.cache", "/share/man", "/share/pkgconfig", "*.la", "*.a" ], "modules": [ { "name": "bazaar", "buildsystem": "meson", "build-options": { "append-path": "/usr/lib/sdk/llvm20/bin", "prepend-ld-library-path": "/usr/lib/sdk/llvm20/lib" }, "config-opts": [ "-Ddevelopment=true", "-Dsandboxed_libflatpak=true", "-Dhardcoded_main_config_path=/run/host/etc/bazaar/bazaar.yaml", "-Dhardcoded_content_config_path=/run/host/etc/bazaar/config.yaml", "-Dhardcoded_blocklist_path=/run/host/etc/bazaar/blocklist.txt" ], "sources": [ { "type": "dir", "path": "../.." } ], "modules": [ { "name": "md4c", "buildsystem": "cmake", "config-opts": [ "-DBUILD_MD2HTML_EXECUTABLE=Off" ], "sources": [ { "type": "git", "url": "https://github.com/mity/md4c.git", "commit": "472c417005c2c71b8617de4f7b8d6b30411d78f4", "tag": "release-0.5.3", "x-checker-data": { "type": "git", "tag-pattern": "^release-([\\d.]+)$" } } ] }, { "name": "malcontent", "buildsystem": "meson", "config-opts": [ "-Dui=disabled", "-Dinstalled_tests=false" ], "sources": [ { "type": "git", "url": "https://gitlab.freedesktop.org/pwithnall/malcontent.git", "commit": "3ba80995bb25b7aeda7e21d547f9e39ff9a81736", "tag": "0.12.0" }, { "type": "shell", "commands": [ "sed -i \"/subdir('tests')/d\" libmalcontent/meson.build", "sed -i \"/subdir('tests')/d\" meson.build", "sed -i \"/subdir('pam')/d\" meson.build" ] } ] }, { "name": "flatpak", "buildsystem": "meson", "config-opts": [ "-Dgtkdoc=disabled", "-Ddocbook_docs=disabled", "-Dtests=false", "-Dman=disabled", "-Dseccomp=disabled", "-Dselinux_module=disabled", "-Dmalcontent=enabled", "-Dsandboxed_triggers=false", "-Dsystem_helper=enabled", "-Dsystemd=disabled", "-Dsystem_install_dir=/var/lib/flatpak", "-Dsystem_bubblewrap=bwrap", "-Dsystem_dbus_proxy=xdg-dbus-proxy", "--sysconfdir=/var/run/host/etc" ], "cleanup": [ "/bin/flatpak-bisect", "/bin/flatpak-coredumpctl", "/etc/profile.d", "/lib/systemd", "/share/dbus-1/interfaces/org.freedesktop.*", "/share/dbus-1/services/org.freedesktop.*", "/share/flatpak/triggers", "/share/gdm", "/share/zsh", "/share/fish", "/lib/sysusers.d", "/lib/tmpfiles.d" ], "post-install": [ "install -Dpm0755 -t /app/bin /usr/bin/update-{mime,desktop}-database" ], "sources": [ { "type": "git", "url": "https://github.com/flatpak/flatpak", "commit": "5de2b58bdafde88515d9d6b9189bd1cfd3b88c46", "tag": "1.18.0", "x-checker-data": { "type": "git", "url-template": "$version", "is-important": true } } ], "modules": [ { "name": "python3-pyparsing", "buildsystem": "simple", "cleanup": [ "*" ], "build-commands": [ "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} pyparsing" ], "sources": [ { "type": "file", "url": "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", "sha256": "c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", "x-checker-data": { "type": "pypi", "name": "pyparsing" } }, { "type": "file", "url": "https://files.pythonhosted.org/packages/69/59/b6fc2188dfc7ea4f936cd12b49d707f66a1cb7a1d2c16172963534db741b/flit_core-3.12.0.tar.gz", "sha256": "18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2", "x-checker-data": { "type": "pypi", "name": "flit_core" } } ] }, { "name": "python3-babel", "buildsystem": "simple", "cleanup": [ "*" ], "build-commands": [ "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation babel" ], "sources": [ { "type": "file", "url": "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", "sha256": "b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", "x-checker-data": { "type": "pypi", "name": "babel" } } ] }, { "name": "polkit", "buildsystem": "meson", "config-opts": [ "-Dlibs-only=true", "-Dintrospection=false", "-Dauthfw=shadow" ], "rm-configure": true, "build-options": { "env": { "CFLAGS": "-Wno-implicit-function-declaration" } }, "cleanup": [ "/bin/*", "/etc/dbus-1", "/etc/pam.d", "/include", "/lib/pkgconfig", "/lib/polkit-1", "/share/dbus-1/system-services/*", "/share/polkit-1" ], "sources": [ { "type": "git", "url": "https://github.com/polkit-org/polkit", "commit": "9e4894c969eecf26a3ba762f4f7a268aa0fb3e51", "tag": "127", "x-checker-data": { "type": "git", "tag-pattern": "^([\\d.]+)$" } } ], "modules": [ { "name": "ostree", "build-options": { "env": { "BASH_COMPLETIONSDIR": "/app/share/bash-completion/completions" }, "config-opts": [ "--disable-man", "--enable-introspection=no", "--with-curl", "--without-libsystemd" ] }, "cleanup": [ "/bin", "/etc/grub.d", "/etc/ostree", "/share/ostree", "/libexec" ], "sources": [ { "type": "git", "url": "https://github.com/ostreedev/ostree", "tag": "v2026.2", "commit": "4672e91445451660eaa4405630692ade1b48c914", "x-checker-data": { "type": "anitya", "project-id": 10899, "tag-template": "v$version", "is-important": true } } ], "modules": [ { "name": "libfuse", "build-options": { "env": { "MOUNT_FUSE_PATH": "../tmp/" } }, "config-opts": [ "UDEV_RULES_PATH=/app/etc/udev/rules.d", "INIT_D_PATH=/app/etc/init.d" ], "cleanup": [ "/bin/ulockmgr_server", "/etc" ], "post-install": [ "install -Dpm0755 ./fusermount-wrapper.sh /app/bin/fusermount" ], "sources": [ { "type": "archive", "url": "https://github.com/libfuse/libfuse/releases/download/fuse-2.9.9/fuse-2.9.9.tar.gz", "sha256": "d0e69d5d608cc22ff4843791ad097f554dd32540ddc9bed7638cc6fea7c1b4b5" }, { "type": "patch", "path": "fuse-2.9.2-namespace-conflict-fix.patch" }, { "type": "patch", "path": "fuse-disable-sys-mount-under-flatpak.patch" }, { "type": "patch", "path": "fuse-2.9.2-closefrom.patch" }, { "type": "file", "path": "fusermount-wrapper.sh" } ] } ] }, { "name": "xdg-dbus-proxy", "buildsystem": "meson", "config-opts": [ "-Dman=disabled", "-Dtests=false" ], "sources": [ { "type": "git", "url": "https://github.com/flatpak/xdg-dbus-proxy", "commit": "6a170fa77e3cbecb48f9dd2478fe5c0a119eb467", "tag": "0.1.7", "x-checker-data": { "type": "git", "url-template": "$version" } } ] } ] } ] } ] }, { "name": "bubblewrap", "buildsystem": "meson", "config-opts": [ "-Dman=disabled", "-Dselinux=disabled", "-Dtests=false" ], "sources": [ { "type": "git", "url": "https://github.com/containers/bubblewrap", "commit": "1b80120ef26a28e065e67f89bfef873f13bdd317", "tag": "v0.11.2", "x-checker-data": { "type": "git", "url-template": "$version" } } ] } ] } bazaar-org-bazaar-b6e9a65/data/000077500000000000000000000000001522167256300163425ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/dbus/000077500000000000000000000000001522167256300172775ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/dbus/io.github.kolunmi.Bazaar.service.in000066400000000000000000000001731522167256300260330ustar00rootroot00000000000000[D-BUS Service] Name=io.github.kolunmi.Bazaar SystemdService=io.github.kolunmi.Bazaar.service Exec=@bindir@/bazaar service bazaar-org-bazaar-b6e9a65/data/dbus/meson.build000066400000000000000000000004701522167256300214420ustar00rootroot00000000000000service_conf = configuration_data() service_conf.set('bindir', get_option('prefix') / get_option('bindir')) configure_file( input: 'io.github.kolunmi.Bazaar.service.in', output: 'io.github.kolunmi.Bazaar.service', configuration: service_conf, install_dir: get_option('datadir') / 'dbus-1' / 'services' ) bazaar-org-bazaar-b6e9a65/data/icons/000077500000000000000000000000001522167256300174555ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/000077500000000000000000000000001522167256300211145ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/scalable/000077500000000000000000000000001522167256300226625ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/scalable/apps/000077500000000000000000000000001522167256300236255ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/scalable/apps/io.github.kolunmi.Bazaar.Devel.svg000066400000000000000000000102551522167256300321530ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/scalable/apps/io.github.kolunmi.Bazaar.svg000066400000000000000000000103051522167256300311110ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/symbolic/000077500000000000000000000000001522167256300227355ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/symbolic/apps/000077500000000000000000000000001522167256300237005ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/data/icons/hicolor/symbolic/apps/io.github.kolunmi.Bazaar-symbolic.svg000066400000000000000000000047301522167256300330100ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/data/icons/io.github.kolunmi.Bazaar.Source.svg000066400000000000000000007446121522167256300262170ustar00rootroot00000000000000 Adwaita Icon Template image/svg+xml GNOME Design Team Adwaita Icon Template Hicolor Symbolic bazaar-org-bazaar-b6e9a65/data/icons/meson.build000066400000000000000000000010731522167256300216200ustar00rootroot00000000000000application_id = 'io.github.kolunmi.Bazaar' scalable_dir = 'hicolor' / 'scalable' / 'apps' if get_option('development') icon_file = '@0@.Devel.svg'.format(application_id) else icon_file = '@0@.svg'.format(application_id) endif install_data( scalable_dir / icon_file, install_dir: get_option('datadir') / 'icons' / scalable_dir, rename: '@0@.svg'.format(application_id) ) symbolic_dir = 'hicolor' / 'symbolic' / 'apps' install_data( symbolic_dir / ('@0@-symbolic.svg').format(application_id), install_dir: get_option('datadir') / 'icons' / symbolic_dir ) bazaar-org-bazaar-b6e9a65/data/io.github.kolunmi.Bazaar.desktop.in000066400000000000000000000010351522167256300251050ustar00rootroot00000000000000[Desktop Entry] Name=Bazaar Comment=Add, remove or update flatpak software on this computer Exec=bazaar %U Icon=io.github.kolunmi.Bazaar Terminal=false Type=Application Categories=Utility; Keywords=GTK;System;PackageManager;Discover;Flatpak;Software;Store; StartupNotify=true MimeType=x-scheme-handler/appstream;x-scheme-handler/flatpak;x-scheme-handler/flatpak+https;application/vnd.flatpak;application/vnd.flatpak.ref; Actions=new-window; X-Purism-FormFactor=Workstation;Mobile; [Desktop Action new-window] Name=New Window Exec=bazaar %U bazaar-org-bazaar-b6e9a65/data/io.github.kolunmi.Bazaar.gschema.xml000066400000000000000000000060061522167256300252400ustar00rootroot00000000000000 true Hide EOL Entries Hide EOL entries and entries depending on them false Only Show Free Software Hide proprietary software false Show Only Flathub Content Hide apps which do not originate from Flathub false Show Only Verified Content Hide apps which are not verified on Flathub 'accent-color' Global Progress Bar Theme Describes the look of the global progress bar (1220, 900) Saved Window Dimensions The window dimensions to be used by the next Bazaar window true Force Adwaita Icon Theme Override the icon theme with Adwaita true Show Permission Warning Banner Show a warning banner on the permissions page true Check For Ubuntu Whether to check for and warn about Ubuntu's broken apparmor permissions on startup bazaar-org-bazaar-b6e9a65/data/io.github.kolunmi.Bazaar.metainfo.xml.in000066400000000000000000000575351522167256300260550ustar00rootroot00000000000000 io.github.kolunmi.Bazaar CC0-1.0 GPL-3.0-or-later Bazaar Discover and install apps

A fast and modern app store for Linux with a focus on discovering and installing Flatpak apps and add-ons, particularly from Flathub.

  • Queue multiple installs and keep browsing
  • Easily view app permissions
  • Sign in to Flathub to view and manage your favorites
  • Search apps directly from GNOME Shell
pointing keyboard touch 360 The Bazaar Contributors https://usebazaar.org/ https://github.com/bazaar-org/bazaar https://github.com/bazaar-org/bazaar/issues https://github.com/bazaar-org/bazaar/tree/master/po https://github.com/bazaar-org/bazaar/blob/master/README.md https://github.com/bazaar-org/bazaar/discussions https://github.com/sponsors/kolunmi https://github.com/kolunmi https://github.com/bazaar-org/bazaar bazaar io.github.kolunmi.Bazaar.desktop #ffbe6f #c11c2b https://github.com/user-attachments/assets/e67f35f0-9566-4068-93f5-cb814db0aedd The home page displaying Flathub apps https://github.com/user-attachments/assets/3de5d9a0-9c5d-461a-964c-7d680cc5f1a2 Exhibit app page https://github.com/user-attachments/assets/18424ebc-73a1-41b5-956e-57dcbcb592e6 Library page https://github.com/user-attachments/assets/73fa606d-9a54-4169-a692-a14375183b0c Search page https://github.com/user-attachments/assets/e38681c0-a064-4075-8a11-3d5f5d84703c Category page https://github.com/bazaar-org/bazaar/releases/tag/v0.9.0

New Features

  • Added three new tabs to the "We ❤️ Games" section
  • App links can now span two columns
  • Improved the apps startup time
  • Improved the image viewer opening animation
  • Made many accessibility improvements

Bug Fixes

  • Fixed an issue where the app page would sometimes not update when busy refreshing

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.8.2

Maintenance Release

  • Add mobile search filter
  • Fix infinite fetching of user data folder size
  • Add Network subcategories
  • Remove tag list SEO-ism
  • Rework some UI components

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.8.1

Hot fix for an issue where updates would not show. Also adds a cancel button to the app tiles on the search page.

Other Fixes

  • Fix Flathub page svg graphics being rendered with a solid fill
  • Disable broken graphs for very new Flathub apps
  • Add workaround for KRunner sending broken app IDs

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.8.0

New Features

  • Add support for installing (.flatpak) bundles
  • New progress indicators
  • The ability to view and delete app caches

Fixes

  • Fix the download context tile not displaying a label for non-Flathub apps
  • Reduce RAM usage when no windows are open
  • Fix an issue where a window could open at the wrong size while a transaction was running
  • Many other bug fixes

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.15

New Features

  • Add support for previewing metainfo files
  • Show total installed apps number in the library view
  • Make exported desktop search provider app icon sizes adjustable

Fixes

  • Fix download timeline graph rerendering too much
  • Fix animated widget ticks not being in sync with fps
  • Fix progress animation for vertical pride flag stripes
  • Many other bug fixes

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.14

New Features

  • Rework the add-ons dialog
  • Add a gradient under the download timeline
  • Add a filter button to the search page
  • Add a button to show the EULA for some proprietary apps
  • Make the names of verified developers clickable links

Fixes

  • Fix the colours of the update card
  • Make the update banner follow the accent colour

Thanks for reading, and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.13

Changes

  • Update to GNOME 50 Runtime
  • Force Adwaita icon theme to ensure consistency
  • Add support for clickable links in app descriptions
  • Add timed lingering cache to async textures, thereby reducing image flickering
  • Add ability to sort installed apps by size in library view
  • Add BAZAAR_N_DOWNLOAD_WORKERS envvar support

Bug Fixes

  • Fix double shadow around update cards
  • Fix global progress button displaying a focus ring when invisible
  • Fix incorrect total size displayed on update tasks
  • Fix empty UI when Flathub hasn't finished syncing yet

Thanks for reading and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.11

This release contains many technical improvements. This changelog reflects roughly 2 weeks of work.

Changes

  • Respect system parental controls settings
  • Reap download workers when all windows are closed, reducing total memory usage
  • Add mnemonics to full app view
  • Many updates to language translations

Bug Fixes

  • Fix broken library page when backing installed apps model is empty
  • Fix int casting bug that was causing RetroDeck to appear to be 18.4 exabytes
  • Make "all apps" category pages respect global filters
  • Fix some text wrapping issues

Thanks for reading and have a great day!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.10

This release fixes some bugs and greatly improves search functionality.

If you missed the previous release, in 0.7.9 we also added the ability to cancel transactions in the library view, a brand new screenshots carousel, search suggestion buttons, and app runtime size information. You can also now skip confirmation dialogs by holding shift as you start a transaction.

Thanks for reading!

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.9

**New Features**

  • Search suggestion pills
  • **Cancel installation** transactions
  • Skip dialogs by pressing shift
  • Runtime size info for app pages

**Updated**

  • Redesigned "What's New" dialog
  • Improved search results by utilizing Flathub rankings
  • Improved screenshots carousel
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.8

This release lets you view and remove user-scoped installed apps from the library page in the Flatpak version of the app. Installing from user remotes is not supported yet.

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.7

This release comes with the following improvements:

  • Merges the task sidebar and install page into the library page
  • Add installed version numbers of each app on the library and app pages
  • Add donations dialog
  • Fix broken add-on and runtime eol detection
  • Add `enable-bulk-install` key to curated sections
  • Add `override-eol-markings` main config string list
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.6

This release comes with the following improvements:

  • Improve context dialogs
  • Fix leftover data bar being shown prematurely
  • Have a rotation toggle for flags
  • Add hard check to prevent removing Bazaar flatpak
  • Improve download statistics tooltips
  • Add read support for flatpak bundles
  • Fix critical output sometimes during transactions
  • Fix error popover refusing to spawn in transaction sidebar
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.5

Minor bugfix release

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.4

This release comes with the following improvements:

  • Fix issue where installed page is empty on opening second window
  • Fix screenshot flickering in search results
  • Fix pride flags sometimes not showing on certain locales
  • Add "Install all" to favorites page
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.3

This release comes with the following improvements:

  • Trash user data instead of deleting
  • Tweaks to permissions dialog
  • Fix broken EOL filtering
  • Add text filter to installed page
  • Add optional translations mappings for string properties in YAML configs
  • Hide EOL apps by default
  • Many other minor bug fixes and improvements
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.2

This small release ensures the new icon is rendered correctly on KDE Plasma.

https://github.com/bazaar-org/bazaar/releases/tag/v0.7.1

This release comes with the following improvements:

  • New market stall icon
  • Remove Flathub styling
  • Add horizontal versions of pride flags
  • Text selection in app descriptions can be made across paragraph breaks
  • Support YAML anchors and aliases in config parsing
  • Drastically reduce disk cache writes over time by skipping unchanged entries
  • Show background status in popover
  • Add app permission system
  • Add back release URLs
  • Fix sync-remotes action in shortcut dialog
  • Fix visual hiccups in comet animations
https://github.com/bazaar-org/bazaar/releases/tag/v0.7.0

This release comes with the following improvements:

  • Flathub account support with the ability to manage bookmarks
  • Flathub bookmarks replace star count; you can add or remove bookmarks from app pages
  • An "Only Show Verified" option
  • Exhaustive category pages for most categories
  • An "Adwaita" or "KDE" category shown based on desktop environment
  • Updated installed indicator for app tiles
  • 3 new flag options
  • Fixed GNOME search provider to show the app page instead of search
  • Fixed issue where flatpakref URIs did not open when the app wasn't running in the background
  • Fixed issue where some proprietary apps were marked as "Special License"
  • Fixed issue where graphs did not work with touch
https://github.com/bazaar-org/bazaar/releases/tag/v0.6.3

Another quick release to restore alphabetical sorting on the installed page

https://github.com/bazaar-org/bazaar/releases/tag/v0.6.2

Quick release to allow manual refresh if flathub is being flaky

https://github.com/bazaar-org/bazaar/releases/tag/v0.6.1

This release comes with the following improvements:

  • Fix frequent disk writes; set refresh frequency to 1 day rather than 1 hour
  • Add "Delete User Data" option when uninstalling an app
  • Version cache to prevent incompatibility between Bazaar versions
https://github.com/bazaar-org/bazaar/releases/tag/v0.6.0

This release comes with the following improvements:

  • Reworked loading to be substantially faster after first start via async loading
  • A gaming section on the Flathub page
  • Improved UI on mobile, especially on app pages
  • Verified badges next to most places where apps are shown
  • A popover that explains what verification and non-verification mean
  • An "other apps by" page for when a developer has more than 6 apps
  • Tags that show other apps with the same tag when pressed
  • An age rating dialog
  • Changed search filters into global content filters
  • 5 new pride flags
https://github.com/bazaar-org/bazaar/releases/tag/v0.5.10 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.9 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.8 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.7 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.6 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.5 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.4 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.3 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.2 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.1 https://github.com/bazaar-org/bazaar/releases/tag/v0.5.0 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.11 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.10 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.9 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.8 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.7 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.6 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.5 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.4 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.3 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.2 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.1 https://github.com/bazaar-org/bazaar/releases/tag/v0.4.0 https://github.com/bazaar-org/bazaar/releases/tag/v0.3.2 https://github.com/bazaar-org/bazaar/releases/tag/v0.3.1 https://github.com/bazaar-org/bazaar/releases/tag/v0.3.0 https://github.com/bazaar-org/bazaar/releases/tag/v0.2.3 https://github.com/bazaar-org/bazaar/releases/tag/v0.2.2 https://github.com/bazaar-org/bazaar/releases/tag/v0.2.1 https://github.com/bazaar-org/bazaar/releases/tag/v0.2.0 https://github.com/bazaar-org/bazaar/releases/tag/v0.1.0
bazaar-org-bazaar-b6e9a65/data/io.github.kolunmi.Bazaar.search-provider.ini.in000066400000000000000000000002411522167256300273050ustar00rootroot00000000000000[Shell Search Provider] DesktopId=io.github.kolunmi.Bazaar.desktop BusName=io.github.kolunmi.Bazaar ObjectPath=/io/github/kolunmi/Bazaar/SearchProvider Version=2bazaar-org-bazaar-b6e9a65/data/io.github.kolunmi.Bazaar.service.in000066400000000000000000000002361522167256300250760ustar00rootroot00000000000000[Unit] Description=Bazaar Service PartOf=graphical-session.target [Service] Type=dbus BusName=io.github.kolunmi.Bazaar ExecStart=@bindir@/bazaar --no-window bazaar-org-bazaar-b6e9a65/data/meson.build000066400000000000000000000034411522167256300205060ustar00rootroot00000000000000desktop_file = i18n.merge_file( input: 'io.github.kolunmi.Bazaar.desktop.in', output: 'io.github.kolunmi.Bazaar.desktop', type: 'desktop', po_dir: '../po', install: true, install_dir: 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: 'io.github.kolunmi.Bazaar.metainfo.xml.in', output: 'io.github.kolunmi.Bazaar.metainfo.xml', po_dir: '../po', install: true, install_dir: get_option('datadir') / 'metainfo' ) appstreamcli = find_program('appstreamcli', required: false, disabler: true) test('Validate appstream file', appstreamcli, args: ['validate', '--no-net', '--explain', appstream_file]) install_data('io.github.kolunmi.Bazaar.gschema.xml', install_dir: get_option('datadir') / 'glib-2.0' / 'schemas' ) compile_schemas = find_program('glib-compile-schemas', required: false, disabler: true) test('Validate schema file', compile_schemas, args: ['--strict', '--dry-run', meson.current_source_dir()]) service_conf = configuration_data() service_conf.set('bindir', get_option('prefix') / get_option('bindir')) configure_file( input: 'io.github.kolunmi.Bazaar.service.in', output: 'io.github.kolunmi.Bazaar.service', configuration: service_conf, install_dir: get_option('prefix') / 'lib' / 'systemd' / 'user' ) service_conf = configuration_data() configure_file( input: 'io.github.kolunmi.Bazaar.search-provider.ini.in', output: 'io.github.kolunmi.Bazaar.search-provider.ini', configuration: service_conf, install_dir: get_option('datadir') / 'gnome-shell' / 'search-providers' ) subdir('icons') subdir('dbus') bazaar-org-bazaar-b6e9a65/docs/000077500000000000000000000000001522167256300163615ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/docs/debugging.md000066400000000000000000000040121522167256300206330ustar00rootroot00000000000000# Debugging Bazaar ## Running Bazaar with Debug Messages Enabled You do this the same as with any other GLib application: ```sh pkill bazaar; env G_MESSAGES_DEBUG=all bazaar ``` This will produce a flood of output. If you know the specific log domain you want to see, you can replace `all` with that domain name, such as `flatpak` or `BAZAAR::CORE`. ## Bazaar Inspector Bazaar has its own inspector window, which you can spawn with the key combo `control+alt+shift+i`. This is meant to be useful for developers and distributors. The global debug mode toggle in this window basically just enables a bottom bar in each Bazaar window which displays useful information particular to that window and allows you to easily inspect the UI entry for the visible application. You can also disable blocklists from this window. This is a temporary internal property, not a configuration option; It will not be saved for the next Bazaar process. The rest of the contents of this window should be self-explanatory. ## Debugging Crashes ### Flatpak #### Installing the Debug Symbols This is mostly based on [flatpak docs](https://docs.flatpak.org/en/latest/debugging.html). Installing debug extensions so the stacktrace is actually useful for developers: ```sh flatpak install --include-debug --include-sdk io.github.kolunmi.Bazaar ``` You can remove all the gnome sdk and debug extensions again when you are finished with debugging. This is quite a big download, please have patience. #### Actually Start Debugging Bazaar starts a background service once started, make sure it is not running first: ```sh flatpak kill io.github.kolunmi.Bazaar ``` ```sh flatpak run --devel --command=bash io.github.kolunmi.Bazaar ``` This will get you a shell inside the flatpak sandbox: run this: `gdb /app/bin/bazaar` ```sh [📦 io.github.kolunmi.Bazaar ~]$ gdb /app/bin/bazaar ``` Actually run bazaar: ```sh $ (gdb) run ``` (reproduce the bug here so it crashes) after it crashed, retrieve the useful information: ```sh $ (gdb) thread apply all backtrace ``` bazaar-org-bazaar-b6e9a65/docs/example.yaml000066400000000000000000000103221522167256300206760ustar00rootroot00000000000000rows: - banner: height: 250 image: light-uri: https://www.mibatcontrol.com/wp-content/uploads/2026/04/Raccoon-Removal-Services-1.png # regular "uri" option is also available dark-uri: https://cdn.answeroverflow.com/1233140484017487952/image.png # you can also use file:// fit: contain # contain, fill, cover or scale-down alt: "Raccoon" can-shrink: true halign: center dark-color: "#2b1f3d" light-color: "#778cf7" - section: title: "Welcome to Bazaar" subtitle: string: | # Basic markdown is supported here. Discover apps you'll love. Here's one to get you started: [GNOME Calculator](appstream://org.gnome.Calculator). overflow-count: 8 # Will automatically create a "Show More" button, if there are more apps than the count (except if enable-bulk-install is true) appids: list: - org.gnome.Calendar - org.gnome.Contacts - org.gnome.Maps - org.gnome.Calculator - org.gnome.TextEditor - org.gnome.Loupe - org.mozilla.firefox - org.gnome.Boxes - org.gnome.Weather - org.gnome.clocks - org.gnome.Music - org.gnome.Showtime - org.gnome.Characters - org.gnome.Connections - org.gnome.Software - org.gnome.SimpleScan - org.gnome.font-viewer - org.gnome.Logs - articles: aspect-ratio: 1.777 # aspect ratio of the thumbnails, per articles section uri: https://usebazaar.org/curated/articles.yaml # Can be used as a feed. list: # Used only if URI fails, or is not given. - title: "Introducing GNOME 50, “Tokyo”" # Also used as the title on the article page subtitle: "First Half of 2026" image: https://release.gnome.org/50.webp # Always in 16:9 uri: file:///var/home/xander/test-article.md - title: "#254 Commit Graph" subtitle: "This Week in GNOME" image: https://thisweek.gnome.org/posts/2026/06/twig-254/cover.webp uri: file:///var/home/xander/twig.md - title: "Introducing GNOME 50, “Tokyo”" subtitle: "First Half of 2026" image: https://release.gnome.org/50.webp uri: file:///var/home/xander/test-article.md - title: "HTTPS Test" subtitle: "This Week in GNOME" image: https://thisweek.gnome.org/posts/2026/06/twig-254/cover.webp uri: https://gist.githubusercontent.com/allysonsilva/85fff14a22bbdf55485be947566cc09e/raw/fa8048a906ebed3c445d08b20c9173afd1b4a1e5/Full-Markdown.md - featured-carousel: # A carousel, like the one seen at the top of the "Explore" page disable-auto-rotate: true appids: list: - io.github.kolunmi.Bazaar - be.alexandervanhee.gradia - section: title: "Web Browsers" list-type: rich # Directly features an install button on the card, use when a section has little apps. appids: list: - org.mozilla.firefox - com.google.Chrome - com.brave.Browser - org.chromium.Chromium - section: title: "Creative & Media" appids: list: # Sections of 12 apps look nice at all window widths - org.gnome.Music - org.gnome.Showtime - org.gnome.Loupe - org.gimp.GIMP - org.inkscape.Inkscape - org.blender.Blender - org.kde.krita - org.audacityteam.Audacity - org.kde.kdenlive - com.obsproject.Studio - org.shotcut.Shotcut - com.github.PintaProject.Pinta - section: title: "Developer Tools" subtitle: string: | Install these to become the *ultimate* developer list-type: rich appids: list: - me.iepure.devtoolbox - org.gnome.Builder - com.jetbrains.IntelliJ-IDEA-Community - re.sonny.Workbench enable-bulk-install: true - banner: image: uri: https://images.unsplash.com/photo-1612287230202-1ff1d85d1bdf?q=80&w=1471&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D fit: cover can-shrink: true bazaar-org-bazaar-b6e9a65/docs/overview.md000066400000000000000000000651161522167256300205620ustar00rootroot00000000000000# Bazaar Overview These docs are intended for distributors of Bazaar to learn how to configure the application. ## Features Here is a short list of some of the things Bazaar can do, beyond the basics of managing software through the GUI: * Queue an arbitrary number of transactions (a catch-all term for installations, updates, and removals) during which you may close all windows or continue to append new transactions freely * Display a "Curated" page which you may extensively customize with YAML. * This is a way to highlight applications which you believe might be of interest. * Curated configuration files are constantly monitored for filesystem events, changes immediately reflected in the GUI * Any number of curated configuration files; they will concatenate in the GUI in the order they were provided * Access data from [Flathub](https://flathub.org/), such as the latest or most popular applications, and allow users to sign in to Flathub to manage bookmarked applications * Run in the background and respond to desktop search queries with application info, using the same search routine as in-application - GNOME will work out of the box, as Bazaar implements the `org.gnome.Shell.SearchProvider2` dbus interface - KDE Plasma will require a [krunner plugin](https://github.com/ublue-os/krunner-bazaar) * Hide applications you do not want users to see with blocklists, which is useful for discouraging the use of certain packages which you deem to be broken. * Manage an arbitrary amount of windows and keep them synchronized * Communicate with, and invoke operations on, the main daemon through the command line ## CLI Usage You can start the bazaar daemon like this: ``` bazaar [ARGS] [PACKAGE PATH/URI] ``` To avoid spawning an initial window, use: ``` bazaar --no-window [ARGS] [PACKAGE PATH/URI] ``` `[PACKAGE PATH/URI]` could be a `.flatpakref` file. flatpak+https and regular https is supported. ## Comptime Configuration The only compile time meson option you should concern yourself with for production is `hardcoded_main_config_path`. This embeds a path to the main configuration file into Bazaar. If this is not defined at compile time, Bazaar will never attempt to read a main config. See the next section of this document to see an example config file. ## Environment Variables Bazaar reads the following environment variables, which may be of interest: * `BAZAAR_DESKTOP_SEARCH_PROVIDER_ICON_SIZE`: may be read as an unsigned integer from 1 to 256 to specify the square pixel size of icons sent to the desktop search provider. This should be configured to be a higher value than its default value of 24x24 when on KDE, as krunner paints result icons as much larger than gnome-shell does. This way, the images will not appear blurry. * `BAZAAR_N_DOWNLOAD_WORKERS`: may be read as an unsigned integer greater than 0 to specify the number of image download worker subprocesses that should be spawned and managed by Bazaar to fetch screenshots, icons, and other images. By default, Bazaar spawns 8 download workers. Download workers are always killed when Bazaar has no active windows and ensured when Bazaar returns to having 1 or more windows. ## Main Configuration This is the primary YAML configuration file for bazaar, as designated by the `hardcoded_main_config_path` meson option. Here, you will point bazaar to where your other configs are located. You can also define hooks in this file. See the "Hooks" section of this document for an overview of the hooks system and an example of integration into the main config. ### Example ```yaml yaml-blocklist-paths: - /path/to/yaml/blocklist.yaml - /path/to/another/yaml/blocklist.yaml # Flatpak path with host-etc permission - /run/host/etc/bazaar/blocklist.yaml txt-blocklist-paths: - /path/to/txt/blocklist.txt - /path/to/another/txt/blocklist.txt # Flatpak path with host-etc permission - /run/host/etc/bazaar/blocklist.txt curated-config-paths: - /path/to/yaml/file.yaml - /path/to/another/yaml/file.yaml # Flatpak path with host-etc permission - /run/host/etc/bazaar/curated.yaml # Make the app start on the curated page instead of the explore page, try to only use if you have an interesting news section start-on-curated: true ``` ### EOL Overrides In this file, you can also specify a list of apps for which to hide EOL warnings and therefore prevent users from being deterred from installing them: ```yaml override-eol-markings: - com.obsproject.Studio - net.lutris.Lutris ``` (At the time of writing, the projects listed above rely on EOL runtimes but are otherwise widely used) ## Blocklists Blocklists are a way to ensure that users will never interact with a certain application inside Bazaar by searching or browsing, either on the Flathub page or via search. Blocked applications which are already installed still appear in the library or when there are updates available for them and via the system's flatpak configuration. Under no circumstance does Bazaar touch the underlying flatpak configuration in order to block or allow apps. The `flatpak` command line tool is unaffected. ### Blocklist Types There are two kinds of blocklists supported by Bazaar: #### YAML Blocklists For those who are learn more effectively by seeing an example: ```yaml blocklists: - priority: 0 block-regex: # block all ids matching this regex unconditionally - com\.place\..* - priority: -1 # lower number = more priority conditions: - match-locale: # only apply this rule if we have the Arabic locale regex: ar allow: - com.place.App3 - com.place.App5 allow-regex: - com\.place\..*\.ar - priority: -1 conditions: - match-locale: regex: en.* # invert the result of this condition; so all locales which don't match # the regex post-process: invert - match-envvar: var: PATH regex: .*/usr/local/bin.* block: - com.other.App1 allow: - com.place.App1 - com.place.App2 ``` YAML blocklists files are comprised of a list of sub "blocklists," which to Bazaar means a **list of appids to block or allow**. These are optionally **applied based on a list of provided conditions** and **composed with other blocklists in the list based on a priority**. Each blocklist may contain these fields: * `priority`: a number which tells Bazaar how to layer this blocklist with the others, or how "important" this blocklist is. **A lower number means more priority**. * `conditions`: a list of conditions to apply. Two condition types exist at the moment: `match-locale` and `match-envvar`. TODO: describe these * `block`: a list of appids to block. These are matched without regex. * `block-regex`: a list of appids to block. These allow regex syntax for special matching. * `allow`: a list of appids to allow. These are matched without regex. * `allow-regex`: a list of appids to allow. These allow regex syntax for special matching. #### Basic Newline Separated TXT Blocklists This type of blocklist is what Bazaar originally supported. They still function, but it is encouraged to use YAML blocklists if any sort of pattern matching or conditional inclusion is required. ``` # comments are supported com.jetbrains.CLion com.valvesoftware.Steam # empty lines are allowed io.neovim.nvim net.lutris.Lutris ``` Warning: **Incorrect Buzzer** TXT blocklists do not support regular expressions. This matches the literal text provided ``` com\.place\..* ``` ### Blocklist FAQ #### No Worky Check that the path of the blocklist exists and that Bazaar can access it. This command is useful for debugging this: ``` flatpak run --command=bash io.github.kolunmi.Bazaar ``` The `/etc` of the host system accessed from a Flatpak requires the `host-etc` permission. This means `/etc/bazaar/banner.png` turns into `/run/host/etc/bazaar/banner.png`. #### I want to to block a list of applications all the time, and also another list only on desktop environment X: Say you want to block Bazaar and Steam unconditionally and Kate and KWrite if the desktop is Plasma. You can use an environment variable condition to check the value of `XDG_CURRENT_DESKTOP`: ```yaml blocklists: - block: - io.github.kolunmi.Bazaar - com.valvesoftware.Steam - block: - org.kde.kate - org.kde.kwrite conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: KDE ``` Let's add another for GNOME: ```yaml blocklists: - block: - io.github.kolunmi.Bazaar - com.valvesoftware.Steam - block: - org.kde.kate - org.kde.kwrite conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: KDE - block: - org.gnome.eog - org.gnome.Extensions conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: GNOME ``` #### What about blocking an application by default, but allowing it if a condition resolves to true? Taking from the previous example, let's allow Steam on KDE and GNOME, but block it on other desktops. We'll need to give the DE-specific blocklists more priority: ```yaml blocklists: - priority: 1 block: - io.github.kolunmi.Bazaar - com.valvesoftware.Steam - block: - org.kde.kate - org.kde.kwrite allow: - com.valvesoftware.Steam conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: KDE - block: - org.gnome.eog - org.gnome.Extensions allow: - com.valvesoftware.Steam conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: GNOME ``` You could also make a new blocklist matching both `KDE` and `GNOME`: ```yaml blocklists: - priority: 1 block: - io.github.kolunmi.Bazaar - com.valvesoftware.Steam - block: - org.kde.kate - org.kde.kwrite conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: KDE - block: - org.gnome.eog - org.gnome.Extensions conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: GNOME - allow: - com.valvesoftware.Steam conditions: - match-envvar: var: XDG_CURRENT_DESKTOP regex: KDE|GNOME ``` ## Curated Section If Bazaar is provided a non-zero amount of curated configs, an extra tab will appear on the window's header bar called "Curated". This section is intended for distributors to curate applications for users with a customizable interface. Curated configs are YAML files. They are constantly monitored by Bazaar for filesystem events, so when the config changes, Bazaar will automatically reload the content. Right now, curated configs are essentially composed of a vertical list of elements which appear stacked on top of each other inside of a scrollable viewport in the order they appear in the YAML. Each element has certain properties you can customize. Bazaar maps the appids you provide to the best matching "entry group" from the table of applications it was able to pull from remote sources (Simply put, an entry group in Bazaar is a collection of applications which share the same appid but come from different sources or installations). The entry group has a designated "ui entry" which was determined to have the most useful content associated with it as it pertains to presenting things like icons, descriptions, screenshots, etc to the user, usually from Flathub when available. When the user selects an app, they are brought to a "full view" where they can see a bunch of information stored inside or referenced by the ui entry and choose to invoke transactions on the entry group, like installation or removal. ### Example An example can be found in docs/example.yaml ### Integrate the curated section + blocklist with the official Flatpak for Administrators/Vendors For more practical examples check out the configuration from [Bluefin](https://github.com/projectbluefin/common/tree/a868eba107b91c4eae60b6d1d6d2e2cdf05eb1c8/system_files/bluefin/etc/bazaar) and [Aurora](https://github.com/get-aurora-dev/common/tree/0d86028dd0d737d1d0eee08205c33fc91997f155/system_files/shared/etc/bazaar). Bazaar by default looks for a config file in `/etc/bazaar` or `/run/host/etc/bazaar` inside the sandbox, this is [configured on build time](https://github.com/flathub/io.github.kolunmi.Bazaar/blob/709faccd8c4198c5fdabf20eb4a98db98a5aa1c6/io.github.kolunmi.Bazaar.yaml#L43-L46) This needs permission to `/etc` which can be granted with the `filesystem=host-etc` permission, the build on Flathub doesn't have this permission by default. This is not super straightforward to setup currently as Flatpak doesn't support overriding permissions in `/etc` or `/usr` yet, so you have to resort to `systemd-tmpfiles` to create this permission override in `/var/lib/flatpak/overrides/io.github.kolunmi.Bazaar`. Here is how they did it: - [tmpfiles](https://github.com/get-aurora-dev/common/blob/0d86028dd0d737d1d0eee08205c33fc91997f155/system_files/shared/usr/lib/tmpfiles.d/bazaar-flatpak.conf) - [actual permission override](https://github.com/get-aurora-dev/common/blob/0d86028dd0d737d1d0eee08205c33fc91997f155/system_files/shared/usr/share/ublue-os/flatpak-overrides/io.github.kolunmi.Bazaar), the filepath for this doesn't really matter, just a way for you to ship the symlink with tmpfiles ## Hooks Hooks are an advanced feature of Bazaar. In essence, they allow you to programmatically react to events and define dialogs with which you can query user input. Currently, these are the event signals you can subscribe to: * `view-app`: run the hook when the user clicks on an app tile or otherwise views an application in the main app page * `before-transaction`: run the hook right as the user invokes a transaction * `after-transaction`: run the hook after a transaction completes Hooks are run like a signal emission. After an event occurs, hooks that are found to be of the appropriate type are evaluated in an order of priority. Higher priority hooks have the ability to stop the emission from propagating further downwards. In the case of some events, like "before-transaction", a hook can also hint to Bazaar some action to take, in this case whether the transaction should be aborted. A shell snippet which is defined by you is evaluated with `/bin/sh -c` multiple times over the course of a hook's execution. An invocation of the shell snippet is referred to as a "stage". Your shell snippet (which of course could just invoke another script written in whatever language you prefer) will be provided a number of environment variables which together will describe the current stage. Your snippet must react accordingly by printing a response to stdout, which Bazaar will read back. This opens up a lot of possibilities for customization; here are a few examples: * You would like a certain appid to be added to steam after the user installs it, so you register a hook on "after-transaction" to query the user's permission with a custom dialog. If they confirm, your script will go forward with the task of setting up a steam shortcut. * You would like to prevent users from installing a certain appid, as some other method of installation, such as a system package, would provide a superior experience. A blocklist could achieve this, but you don't like the idea of hiding anything from the user. A hook subscribed to the "before-transaction" event could issue a warning and ask for extra confirmation. If the user decides to listen to the warning, you can signal to Bazaar that the transaction should be aborted. Here is an overview of the environment variables the shell snippet will receive: * `BAZAAR_HOOK_INITIATED_UNIX_STAMP`: the unix timestamp in seconds at which this hook was first invoked (the number of seconds that have elapsed since 1970-01-01 00:00:00 UTC) * `BAZAAR_HOOK_INITIATED_UNIX_STAMP_USEC`: the unix timestamp in microseconds at which this hook was first invoked (the number of microseconds that have elapsed since 1970-01-01 00:00:00 UTC) * `BAZAAR_HOOK_STAGE_IDX`: the number of stages this hook has run so far * `BAZAAR_HOOK_ID`: the value of the "id" mapping * `BAZAAR_HOOK_TYPE`: the value of the "when" mapping * `BAZAAR_HOOK_WAS_ABORTED`: "true" if a dialog aborted the hook * `BAZAAR_HOOK_DIALOG_ID`: if applicable, the id of the current dialog * `BAZAAR_HOOK_DIALOG_RESPONSE_ID`: if applicable, the user response given through the current dialog * `BAZAAR_APPID`: if applicable, the appid of the entry Bazaar is currently dealing with. Use this for hooks that are not related to transactions. If your hook deals with transactions, such as `before-transaction` or `after-transaction`, use `BAZAAR_TS_APPID` instead. * `BAZAAR_TS_APPID`: if applicable, the appid of the entry Bazaar is currently dealing with. Use this for hooks that are related to transactions. If your hook does not deal with transactions, such as `view-app`, use `BAZAAR_APPID` instead. * `BAZAAR_TS_TYPE`: if applicable, the type of transaction being run. Can be "install", "update", or "removal". * `BAZAAR_HOOK_STAGE`: the stage at which the hook is running. This will indicate what the shell body is instructed to do at this time. The shell body must respond by outputting to stdout with a valid answer; the structure of a valid answer will depend on the stage, and if the structure is not valid the hook will be abandoned. The shell body might be run multiple times by Bazaar over the course of a hook with this variable set to differing values in order know how to orchestrate events in the UI, so the shell body must be able to branch depending on the value. The value may be any of the following: * `setup`: the hook is starting. Respond with "ok" to continue the execution of this hook, or "pass" to skip it and move on to the next registered hook * `setup-dialog` Bazaar is ready to ask the user a question with one of the dialogs you've defined inside the "dialogs" mapping. `BAZAAR_HOOK_DIALOG_ID` will tell you which one. Respond with "ok" to spawn the dialog, or "pass" to skip the dialog. * `teardown-dialog` Bazaar has received input from the user after asking them a question with one of the dialogs you've defined inside the "dialogs" mapping. `BAZAAR_HOOK_DIALOG_ID` will tell you which one. `BAZAAR_HOOK_DIALOG_RESPONSE_ID` will tell you the response the user chose. Respond with "ok" to continue, or "abort" to stop the execution of this hook. * `catch` One of your dialogs has aborted. This is your chance to handle the error. Respond with "recover" to continue, or "abort" to confirm that the execution of this hook should indeed skip to the teardown stage. * `action` Everything so far has gone according to plan, so it is time to take whatever external action this hook exists for. Bazaar requires no response at this time. * `teardown` The hook is cleaning up. Respond with "continue" to propagate the signal emission to lower priority hooks, or "stop" to indicate the emission should stop. Alternatively, if this hook type should hint to Bazaar an action to take (such as the "before-transaction" hook), respond with "confirm" to hint that the action should be taken, or "deny" to prevent the action from being taken. Both "confirm" and "deny" imply the effect of "stop", and "stop" implies "confirm". ### Example Hooks are defined in the main yaml config as indicated by the `hardcoded_main_config_path` comptime var. Here is a basic example demonstrating how to define a hook: `hardcoded_main_config_path`: ```yaml hooks: - id: handle-jetbrains when: before-transaction dialogs: - id: jetbrains-warning title: >- JetBrains IDEs are not supported in this format # If true, render inline markup commands in body; see # https://docs.gtk.org/Pango/pango_markup.html body-use-markup: true body: >- This is a JetBrains application and is not officially supported on Flatpak. We recommend using the Toolbox app to manage JetBrains IDEs. # Determines which option will be assumed if the user hits the # escape key or otherwise cancels the dialog default-response-id: cancel options: - id: cancel string: "Cancel" - id: goto-web string: "Download JetBrains Toolbox" # can be "destructive" or "suggested" or omit for no # styling style: suggested shell: exec /absolute/path/to/bazaar-jetbrains-hook.bash # This gives you the opportunity to add a basic regex check on an incoming # appid before incurring the overhead of spawning a subprocess. This # improves performance and reduces script boilerplate for long lists of # hooks that execute on specific appids. check-appid-regex: ^com\.jetbrains\..*$ ``` `/absolute/path/to/bazaar-jetbrains-hook.bash`: ```bash #!/usr/bin/env bash handle_setup_stage() { # only proceed if the user is installing something if [ "$BAZAAR_TS_TYPE" = install ]; then case "$BAZAAR_TS_APPID" in com\.jetbrains\.*) # since the appid belongs to jetbrains, we continue # with the hook echo 'ok' ;; *) # otherwise, skip this hook echo 'pass' ;; esac else echo 'pass' fi } handle_setup_dialog_stage() { # we don't need to do anything here right now, just let Bazaar # know we should continue setting up the dialog echo 'ok' } handle_teardown_dialog_stage() { case "$BAZAAR_HOOK_DIALOG_RESPONSE_ID" in goto-web) # if the user pressed "Download JetBrains Toolbox", # continue echo 'ok' ;; *) # otherwise, let's not do anything echo 'abort' ;; esac } handle_catch_stage() { # this only happens if the `teardown-dialog` stage echoed "abort", # we could echo "recover" at this point to still go to the # `action` stage, but we have no reason to do that right now echo 'abort' } handle_action_stage() { # this is where we do the thing! it is important to use `nohup` # here so bazaar doesn't hang nohup xdg-open 'https://www.jetbrains.com/toolbox-app/' } handle_teardown_stage() { # Let's always prevent the user from installing JetBrains stuff echo 'deny' } # Branch based on the stage case "$BAZAAR_HOOK_STAGE" in setup) handle_setup_stage ;; setup-dialog) handle_setup_dialog_stage ;; teardown-dialog) handle_teardown_dialog_stage ;; catch) handle_catch_stage ;; action) handle_action_stage ;; teardown) handle_teardown_stage ;; esac # exit successfully exit 0 ``` ## Search Biases Search biases are a mechanism provided by Bazaar to influence search results. Given a regex string with which to match a search query, a bias can replace the matched text with a new string and/or adjust the scores of certain appids according to a defined function if a match occurs. This is particularly useful in the following cases: * An application is, for example, an image editor, but doesn't show up in the results for "image editor" because its metadata doesn't contain those search tokens for whatever reason. A search bias can ensure that the app appears despite this. * You want an abbreviation or phrase to be expanded into a version which is more likely to yield better results. For example, Bazaar hardcodes the expansion of the abbreviation `dl` to `download`, which is more helpful when searching metadata. ### Boost Functions Right now, there are two kinds of boost functions you can specify to influence the score of certain appids in the event of a regex match: linear and exponential: #### Linear Linear functions require a `slope` and a `y-intercept` and are evaluated like this: ``` new-score = y-intercept + (slope * original-score) ``` #### Exponential Exponential functions require a `factor` and a `y-intercept` and are evaluated like this: ``` new-score = y-intercept * (factor ^ original-score) ``` ### Examples Search biases are defined in the main yaml config as indicated by the `hardcoded_main_config_path` comptime var. Here is a basic example demonstrating how to define search biases: ```yaml search-biases: # Brief regex review: # `^` indicates the beginning of the string # `$` indicates the end of the string # `\b` indicates a word boundary # `(?i)` means case insensitive # Convert queries like "smb server" to "samba server" - regex: \b(?i)smb\b convert-to: samba # Give your favorite matrix clients a simple boost of 100.0 to their score - regex: \b(?i)matrix\b boost-appids: - org.gnome.Fractal - im.riot.Riot linear-boost: slope: 1.0 y-intercept: 100.0 # Convert the search _and_ boost appids - regex: ^(?i)deck$ convert-to: steam deck boost-appids: - com.github.Matoking.protontricks - com.steamgriddb.steam-rom-manager - com.valvesoftware.SteamLink linear-boost: slope: 1.2 y-intercept: 20.0 # Biases are applied in the order that you specify them, so in both the case # that the user types "deck" or "steam deck launcher", the following will be # applied: - regex: \bsteam deck\b boost-appids: - net.retrodeck.retrodeck exponential-boost: factor: 2.0 y-intercept: 5.0 ``` Pro tip: pressing `ctrl-alt-d` in Bazaar activates debug mode, which enables you to see the scores of app results on the search page. This is useful for debugging search biases! ## Translations in YAML Configs For any string scalar property in YAML configs parsed by bazaar, you can optionally provide a map of language code ids -> translated strings. This is for strings only, thus it doesn't apply to scalars which are explicitly parsed as numbers, etc. For instance, this is valid: ```yaml # ... category: title: "My Favorite Apps" subtitle: "These are really good and you should download them!" # ... ``` This is also valid: ```yaml # ... category: title: en: "My Favorite Apps" es: "Mis Aplicaciones Favoritas" ko: "내가 가장 좋아하는 앱들" subtitle: en: "These are really good and you should download them!" es: "¡Son realmente buenos y deberías descargarlos!" ko: "이것들은 정말 좋으니 꼭 다운로드하세요!" # ... ``` (I just used google translate for these, sorry if they are bad) bazaar-org-bazaar-b6e9a65/funding.json000066400000000000000000000064011522167256300177570ustar00rootroot00000000000000{ "$schema": "https://fundingjson.org/schema/v1.1.0.json", "version": "v1.0.0", "entity": { "type": "individual", "role": "maintainer", "name": "Adam Masciola", "email": "kolunmi@posteo.net", "phone": "", "description": "Adam is the creator and lead programmer of Bazaar.", "webpageUrl": { "url": "https://www.kolunmi.net/" } }, "projects": [ { "guid": "bazaar", "name": "Bazaar", "description": "Bazaar is a vertically-integrated App Store for Linux desktop applications, tightly integrating with Flatpak application packages and flathub.org, the central Flatpak repository. It provides a beautiful and high-performance frontend to these open standards and open infrastructure for Linux desktop apps.", "webpageUrl": { "url": "https://usebazaar.org/" }, "repositoryUrl": { "url": "https://github.com/bazaar-org/bazaar", "wellKnown": "https://github.com/bazaar-org/bazaar/blob/main/.well-known/funding-manifest-urls" }, "licenses": ["spdx:GPL-3.0"], "tags": ["app-store", "flatpak"] } ], "funding": { "channels": [ { "guid": "kolunmi-bank", "type": "bank", "address": "", "description": "Direct bank transfers to USA bank. Please e-mail me for details." } ], "plans": [ { "guid": "curation", "status": "active", "name": "Curation", "description": "Bazaar acts as both a software frontend and a curated frontend to flathub.org, which requires a small amount of continuous curation of applications (in the form of presentation layer tweaks) as they flow through Flathub.", "amount": 200, "currency": "USD", "frequency": "monthly", "channels": ["kolunmi-bank"] }, { "guid": "developer-time", "status": "active", "name": "Developer Compensation", "description": "This will cover the cost of kolunmi's full-time contribution to Bazaar and integration with other projects.", "amount": 2000, "currency": "USD", "frequency": "monthly", "channels": ["kolunmi-bank"] }, { "guid": "donations", "status": "active", "name": "Donation GUI Enhancements", "description": "Because Bazaar is increasingly the default Linux App Store, and many desktop Linux applications are F/OSS, carefully-designed donation opportunities to those projects will grow the overall Linux desktop.", "amount": 300, "currency": "USD", "frequency": "monthly", "channels": ["kolunmi-bank"] }, { "guid": "gnome-core", "status": "active", "name": "GNOME Circle and Core", "description": "This is an ongoing task to get Bazaar into GNOME Circle and, ultimately, GNOME Core. This will require code review, security concerns, code cleanup, etc. in conjunction with the GNOME Core teams. Some of this work has already begun with the GNOME Design Team. Bazaar is already the default App Store on Bazzite, Nobara, and the other Universal Blue distributions.", "amount": 500, "currency": "USD", "frequency": "monthly", "channels": ["kolunmi-bank"] } ], "history": [] } } bazaar-org-bazaar-b6e9a65/meson.build000066400000000000000000000105441522167256300175770ustar00rootroot00000000000000project('bazaar', 'c', version: run_command('version.sh', 'get-vcs').stdout().strip(), meson_version: '>= 1.0.0', default_options: [ 'warning_level=2', 'werror=false', 'c_std=gnu11', ], ) # can't have statements before `project` ... bz_vcs_version = run_command('version.sh', 'get-vcs').stdout().strip() bz_version = run_command('version.sh', 'get-version').stdout().strip() python3 = find_program('python3') i18n = import('i18n') if get_option('im_a_translator') subdir('po') else gnome = import('gnome') cc = meson.get_compiler('c') project_c_args = [] test_c_args = [ '-Wcast-align', '-Wdeclaration-after-statement', '-Werror=address', '-Werror=array-bounds', '-Werror=empty-body', '-Werror=implicit', '-Werror=implicit-function-declaration', '-Werror=incompatible-pointer-types', '-Werror=init-self', '-Werror=int-conversion', '-Werror=int-to-pointer-cast', '-Werror=main', '-Werror=misleading-indentation', '-Werror=missing-braces', '-Werror=missing-include-dirs', '-Werror=nonnull', '-Werror=overflow', '-Werror=parenthesis', '-Werror=pointer-arith', '-Werror=pointer-to-int-cast', '-Werror=redundant-decls', '-Werror=return-type', '-Werror=sequence-point', '-Werror=shadow', '-Werror=strict-prototypes', '-Werror=trigraphs', '-Werror=undef', '-Werror=write-strings', '-Wformat-nonliteral', '-Wignored-qualifiers', '-Wimplicit-function-declaration', '-Wlogical-op', '-Wmissing-declarations', '-Wmissing-format-attribute', '-Wmissing-include-dirs', '-Wmissing-noreturn', '-Wnested-externs', '-Wno-cast-function-type', '-Wno-dangling-pointer', '-Wno-missing-field-initializers', '-Wno-sign-compare', '-Wno-unused-parameter', '-Wold-style-definition', '-Wpointer-arith', '-Wredundant-decls', '-Wstrict-prototypes', '-Wswitch-default', '-Wswitch-enum', '-Wundef', '-Wuninitialized', '-Wunused', '-fno-strict-aliasing', ['-Werror=format-security', '-Werror=format=2'], ] if get_option('buildtype') != 'plain' test_c_args += '-fstack-protector-strong' endif foreach arg: test_c_args if cc.has_multi_arguments(arg) project_c_args += arg endif endforeach add_project_arguments(project_c_args, language: 'c') if get_option('bge_only') subdir('bge') else config_h = configuration_data() config_h.set_quoted('PACKAGE_VERSION', bz_version) config_h.set_quoted('PACKAGE_VCS_VERSION', bz_vcs_version) config_h.set_quoted('GETTEXT_PACKAGE', 'bazaar') config_h.set_quoted('LOCALEDIR', get_option('prefix') / get_option('localedir')) config_h.set_quoted('DONATE_LINK', 'https://ko-fi.com/kolunmi') config_h.set_quoted('RELEASE_PAGE', run_command('version.sh', 'get-gh-release').stdout().strip()) refresh_worker_bin_name = 'bazaar-refresh-worker' config_h.set_quoted('REFRESH_WORKER_BIN_NAME', refresh_worker_bin_name) dl_worker_bin_name = 'bazaar-dl-worker' config_h.set_quoted('DL_WORKER_BIN_NAME', dl_worker_bin_name) if get_option('hardcoded_main_config_path') != '' config_h.set_quoted('HARDCODED_MAIN_CONFIG', get_option('hardcoded_main_config_path')) endif if get_option('hardcoded_blocklist_path') != '' config_h.set_quoted('HARDCODED_BLOCKLIST', get_option('hardcoded_blocklist_path')) endif if get_option('hardcoded_content_config_path') != '' config_h.set_quoted('HARDCODED_CONTENT_CONFIG', get_option('hardcoded_content_config_path')) endif if get_option('sandboxed_libflatpak') config_h.set_quoted('SANDBOXED_LIBFLATPAK', '1') endif if get_option('development') config_h.set10('DEVELOPMENT_BUILD', get_option('development')) config_h.set_quoted('DEVELOPMENT_EXAMPLE_YAML', get_option('prefix') / get_option('datadir') / 'bazaar' / 'example.yaml') install_data( 'docs/example.yaml', install_dir: get_option('datadir') / 'bazaar', ) endif configure_file(output: 'config.h', configuration: config_h) add_project_arguments(['-I' + meson.project_build_root()], language: 'c') subdir('bge') subdir('data') subdir('src') subdir('po') gnome.post_install( glib_compile_schemas: true, gtk_update_icon_cache: true, update_desktop_database: true, ) endif endif bazaar-org-bazaar-b6e9a65/meson_options.txt000066400000000000000000000021231522167256300210640ustar00rootroot00000000000000option('bge_only', type: 'boolean', value: false, description: 'Whether to restrict the build to libbge') option('hardcoded_main_config_path', type: 'string', value: '', description: 'Hardcoded absolute path to a main yaml config which will be read at runtime') option('hardcoded_blocklist_path', type: 'string', value: '', description: 'Hardcoded absolute path to a package name blocklist which will be read at runtime') option('hardcoded_content_config_path', type: 'string', value: '', description: 'Hardcoded absolute path to a yaml content configuration which will be read at runtime') option('im_a_translator', type: 'boolean', value: false, description: 'Whether to set up the environment for translation work') option('sandboxed_libflatpak', type: 'boolean', value: false, description: 'Whether to treat libflatpak as being sandboxed or not') option('development', type: 'boolean', value: false, description: 'If this is a development build') bazaar-org-bazaar-b6e9a65/po/000077500000000000000000000000001522167256300160475ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/po/.gitignore000066400000000000000000000000121522167256300200300ustar00rootroot00000000000000bazaar.potbazaar-org-bazaar-b6e9a65/po/LINGUAS000066400000000000000000000002171522167256300170740ustar00rootroot00000000000000# Please keep this file sorted alphabetically. ar be bg bs cs de el es eu fa_IR fr ga hu id it ja kw nl pl pt_BR pt_PT ru tr uk vi zh_CN zh_TW bazaar-org-bazaar-b6e9a65/po/POTFILES.in000066400000000000000000000073501522167256300176310ustar00rootroot00000000000000# List of source files containing translatable strings. # Please keep this file sorted alphabetically. data/io.github.kolunmi.Bazaar.desktop.in data/io.github.kolunmi.Bazaar.metainfo.xml.in src/bz-addon-tile.blp src/bz-addon-tile.c src/bz-addons-dialog.blp src/bz-addons-dialog.c src/bz-age-rating-dialog.blp src/bz-age-rating-dialog.c src/bz-all-apps-page.blp src/bz-all-apps-page.c src/bz-app-permissions.c src/bz-app-size-dialog.blp src/bz-app-size-dialog.c src/bz-app-tile.blp src/bz-app-tile.c src/bz-application-map-factory.c src/bz-application.c src/bz-apps-page.blp src/bz-apps-page.c src/bz-appstream-parser.c src/bz-article.blp src/bz-article.c src/bz-article-list-view.c src/bz-article-tile.blp src/bz-article-tile.c src/bz-async-texture.c src/bz-backend.c src/bz-banner-view.blp src/bz-banner-view.c src/bz-bundle-install-dialog.blp src/bz-bundle-install-dialog.c src/bz-content-provider.c src/bz-context-tile-callbacks.c src/bz-context-tile.blp src/bz-context-tile.c src/bz-curated-view.blp src/bz-curated-view.c src/bz-data-graph.c src/bz-decorated-screenshot.blp src/bz-decorated-screenshot.c src/bz-developer-badge.blp src/bz-developer-badge.c src/bz-donations-dialog.blp src/bz-donations-dialog.c src/bz-download-worker.c src/bz-dynamic-list-view.c src/bz-entry-cache-manager.c src/bz-entry-group-util.c src/bz-entry-group.c src/bz-entry-inspector.blp src/bz-entry-inspector.c src/bz-entry-selection-row.blp src/bz-entry-selection-row.c src/bz-entry.c src/bz-env.c src/bz-error-dialog.blp src/bz-error-dialog.c src/bz-error.c src/bz-favorite-button.blp src/bz-favorite-button.c src/bz-favorites-page.blp src/bz-favorites-page.c src/bz-favorites-tile.blp src/bz-favorites-tile.c src/bz-featured-carousel.blp src/bz-featured-carousel-view.c src/bz-featured-tile.blp src/bz-flathub-category-section.c src/bz-flathub-category.c src/bz-flathub-page.blp src/bz-flathub-page.c src/bz-flathub-state.c src/bz-flatpak-entry.c src/bz-flatpak-instance.c src/bz-full-view.blp src/bz-full-view.c src/bz-global-net.c src/bz-gnome-shell-search-provider.c src/bz-group-tile-css-watcher.c src/bz-hardware-support-dialog.blp src/bz-hardware-support-dialog.c src/bz-inspector.blp src/bz-inspector.c src/bz-install-controls.blp src/bz-install-controls.c src/bz-install-controls.wdgt src/bz-installed-tile.blp src/bz-installed-tile.c src/bz-io.c src/bz-library-page.blp src/bz-library-page.c src/bz-license-dialog.blp src/bz-license-dialog.c src/bz-license-dialog.h src/bz-login-page.blp src/bz-login-page.c src/bz-login-page.h src/bz-metainfo-preview.c src/bz-preferences-dialog.blp src/bz-preferences-dialog.c src/bz-progress-bar.blp src/bz-progress-bar.c src/bz-releases-dialog.blp src/bz-releases-list.blp src/bz-releases-list.c src/bz-result.c src/bz-rich-app-tile.blp src/bz-rich-app-tile.c src/bz-safety-calculator.c src/bz-safety-dialog.blp src/bz-safety-dialog.c src/bz-screenshot-page.blp src/bz-screenshot-page.c src/bz-screenshot.c src/bz-screenshots-carousel.blp src/bz-screenshots-carousel.c src/bz-search-engine.c src/bz-search-filter-popover.blp src/bz-search-filter-popover.c src/bz-search-page.blp src/bz-search-page.c src/bz-search-pill-list.c src/bz-section-view.blp src/bz-section-view.c src/bz-serializable.c src/bz-share-list.c src/bz-stats-dialog.blp src/bz-stats-dialog.c src/bz-subcategory-list.c src/bz-transact-icon.wdgt src/bz-transaction-dialog.c src/bz-transaction-list-dialog.blp src/bz-transaction-list-dialog.c src/bz-transaction-manager.c src/bz-transaction-tile.blp src/bz-transaction-tile.c src/bz-transaction.c src/bz-updates-card.blp src/bz-updates-card.c src/bz-user-data-page.blp src/bz-user-data-page.c src/bz-user-data-tile.blp src/bz-user-data-tile.c src/bz-window.blp src/bz-window.c src/bz-world-map.c src/bz-yaml-parser.c src/dl-worker.c src/main.c src/shortcuts-dialog.blp bazaar-org-bazaar-b6e9a65/po/ar.po000066400000000000000000003044201522167256300170140ustar00rootroot00000000000000# Arabic translations for bazaar package. # Copyright (C) 2025 bazaar's COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Ahmed Najmawi , 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-02-14 09:05+0300\n" "PO-Revision-Date: 2026-02-14 13:41+0300\n" "Last-Translator: Ahmed Najmawi \n" "Language-Team: Arabic\n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: Poedit 3.8\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:6 #: src/bz-window.blp:111 msgid "Bazaar" msgstr "بازار" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "أضِف، أو أزل، أو حدث برمجيات فلاتباك على هذا الحاسوب" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK؛ النظام؛ مدير الحزم؛ اكتشاف؛ فلات باك؛ البرامج؛ المتجر؛" #: data/io.github.kolunmi.Bazaar.desktop.in:15 msgid "New Window" msgstr "نافذة جديدة" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "استكشف ونصِّب التطبيقات" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for Linux with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "متجر تطبيقات جديد للينوكس يركز على استكشاف وتنصيب التطبيقات والإضافات من " "فلاتباك، وبالأخص مستودع فلاتهَب." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "يُشدِّد «بازار» على دعم المطورين الواقفين وراء إتاحة سطح مكتب لينكس، ويضم لسانًا " "للمحتوى المنتقى يمكن للموزِّعين إعداده لتوفير تجربة استخدام أكثر مواءمة." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:703 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home page displaying Flathub apps" msgstr "الصفحة الرئيسية وهي تعرض تطبيقات فلاتهَب" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Exhibit app page" msgstr "صفحة معرض التطبيق" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Library page" msgstr "صفحة المكتبة" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Search page" msgstr "صفحة البحث" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:70 msgid "Category page" msgstr "صفحة التصنيفات" #: src/bz-addons-dialog.blp:16 src/bz-full-view.blp:708 #: src/bz-installed-tile.blp:101 msgid "Manage Add-ons" msgstr "أدِر الإضافات" #: src/bz-addons-dialog.c:94 src/bz-full-view.blp:495 #: src/bz-installed-tile.blp:119 src/bz-transaction-dialog.c:231 msgid "Remove" msgstr "أزِل" #: src/bz-addons-dialog.c:99 src/bz-favorites-tile.c:174 #: src/bz-full-view.blp:262 src/bz-full-view.blp:482 #: src/bz-transaction-dialog.c:202 msgid "Install" msgstr "نصِّب" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:726 src/bz-full-view.c:338 src/bz-full-view.c:345 msgid "Age Rating" msgstr "التصنيف العمري" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "عنف الرسوم المتحركة" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "لا توجد معلومات بخصوص العنف في الرسوم المتحركة" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "عنف خيالي" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "لا توجد معلومات بخصوص العنف الخيالي" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "عنف واقعي" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "لا توجد معلومات بخصوص العنف الواقعي" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "العنف الذي يصور إراقة الدماء" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "لا توجد معلومات بخصوص العنف الذي يصور إراقة الدماء" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "عنف الجنسي" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "لا توجد معلومات بخصوص العنف الجنسي" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "كحول" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "لا توجد معلومات بخصوص الكحول" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "المخدرات" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "لا توجد معلومات بخصوص الإشارات إلى المخدرات غير المشروعة" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "تبغ" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "لا توجد معلومات بخصوص استخدام التبغ" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "تعري" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "لا توجد معلومات بخصوص التعري بأي شكل" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "المواضيع الجنسية" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "لا توجد معلومات بخصوص المواضيع الجنسية" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "ألفاظ بذيئة" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "لا توجد معلومات بخصوص الألفاظ البذيئة بأي شكل من الأشكال" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "فكاهة غير لائقة" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "لا توجد معلومات بخصوص الفكاهة الغير لائقة" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "تمييز" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "لا توجد معلومات بخصوص استخدام لغة التمييز بأي شكل" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "إعلانات" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "لا توجد معلومات بخصوص الإعلانات بأي شكل" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "مقامرة" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "لا توجد معلومات بخصوص المقامرة بأي شكل" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "شراء" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "لا توجد معلومات بخصوص القدرة على دفع الأمواب" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "الدردشة بين المستخدمين" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "لا توجد معلومات بخصوص الدردشة بين المستخدمين" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "المحادثة الصوتية بين المستخدمين" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "لا توجد معلومات بخصوص المحادثة الصوتية بين المستخدمين" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "معلومات التواصل" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "لا توجد معلومات بخصوص مشاركة معلومات اسم المستخدم أو البريد الإلكتروني" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "معلومات التعريف" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "لا توجد معلومات بخصوص مشاركة معلومات المستخدم مع طرف ثالث" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "مشاركة الموقع" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "لا توجد معلومات بخصوص مشاركة الموقع مع مستخدمين آخرين" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "دعارة" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "لا توجد معلومات بخصوص الدعارة" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "الزنا" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "لا توجد معلومات بخصوص الزنا" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "شخصيات ذات طابع جنسي" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "لا توجد معلومات بخصوص شخصيات ذات طابع جنسي" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "تدنيس" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "لا توجد معلومات بخصوص التدنيس" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "بقايا بشرية" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "لا توجد معلومات بخصوص البقايا البشرية" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "عبودية" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "لا توجد معلومات بخصوص العبودية" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "لا يتضمن إشارات إلى المخدرات" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "لا يتضمن قذف, شتم, وأي شكل من أشكال التعدي اللفظي" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "لا يتضمن إعلانات أو المعاملات المالية" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "لا يتضمن جنس أو تعري" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "لا يتضمن دردشة غير قابلة للتحكم" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "لا يتضمن عنف" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "مخدرات" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "تعدي لفظي" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "مال" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "إجتماعي" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "عنف" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:676 src/bz-full-view.c:328 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:701 msgctxt "Age rating" msgid "All" msgstr "جميع الأعمار" #: src/bz-age-rating-dialog.c:737 #, c-format msgid "%s has an unknown age rating" msgstr "%s التصنيف العمري غير محدد" #: src/bz-age-rating-dialog.c:743 #, c-format msgid "%s is suitable for everyone" msgstr "%s مناسب للجميع" #: src/bz-age-rating-dialog.c:746 #, c-format msgid "%s is suitable for young children" msgstr "%s مناسب للأطفال الصغار" #: src/bz-age-rating-dialog.c:749 #, c-format msgid "%s is suitable for children" msgstr "%s مناسب للأطفال" #: src/bz-age-rating-dialog.c:752 #, c-format msgid "%s is suitable for teenagers" msgstr "%s مناسب للمراهقين" #: src/bz-age-rating-dialog.c:755 #, c-format msgid "%s is suitable for adults" msgstr "%s مناسب للبالغين" #: src/bz-age-rating-dialog.c:758 #, c-format msgid "%s is suitable for %s" msgstr "%s مناسب للـ %s" #: src/bz-age-rating-dialog.c:852 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-all-apps-page.blp:13 src/bz-apps-page.blp:14 src/bz-full-view.blp:29 #: src/bz-user-data-page.blp:15 src/bz-window.blp:292 msgid "Main Menu" msgstr "القائمة الرئيسة" #: src/bz-all-apps-page.blp:18 src/bz-apps-page.blp:18 #: src/bz-user-data-page.blp:19 src/bz-window.blp:384 msgid "_Donate to Bazaar ❤️" msgstr "ت_برَّع إلى بازار ❤️" #: src/bz-all-apps-page.blp:25 src/bz-apps-page.blp:25 #: src/bz-user-data-page.blp:26 src/bz-window.blp:391 msgid "_Preferences" msgstr "ال_تفضيلات" #: src/bz-all-apps-page.blp:30 src/bz-apps-page.blp:30 #: src/bz-user-data-page.blp:31 src/bz-window.blp:396 msgid "_Login with Flathub" msgstr "_تسجيل الدخول بفلاتهب" #: src/bz-all-apps-page.blp:36 src/bz-apps-page.blp:36 #: src/bz-user-data-page.blp:37 src/bz-window.blp:402 msgid "_Manage Leftover User Data" msgstr "_أدر معلوماتك" #: src/bz-all-apps-page.blp:41 src/bz-apps-page.blp:41 #: src/bz-user-data-page.blp:42 src/bz-window.blp:407 msgid "_Synchronize Remotes" msgstr "مزامنة" #: src/bz-all-apps-page.blp:46 src/bz-apps-page.blp:46 #: src/bz-user-data-page.blp:47 src/bz-window.blp:412 msgid "_Keyboard Shortcuts" msgstr "ا_ختصارات لوحة المفاتيح" #: src/bz-all-apps-page.blp:51 src/bz-apps-page.blp:51 #: src/bz-user-data-page.blp:52 src/bz-window.blp:417 msgid "_About Bazaar" msgstr "_عَنْ بازار" #: src/bz-all-apps-page.blp:58 src/bz-apps-page.blp:58 #: src/bz-user-data-page.blp:59 src/bz-window.blp:424 msgid "_Quit Bazaar" msgstr "_أخرج من بازار" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "مجلد النظام %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "المجلد ضمن الرئيسي %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "مجلدات نظام المستضيف" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "تكوين نظام المضيف من /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "المجلد ضمن سطح المكتب %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "مجلد سطح المكتب" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "المجلد ضمن المستندات %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "مجلد المستندات" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "المجلد ضمن الموسيقا %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "مجلد الموسيقا" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "المجلد ضمن الصور %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "مجلد الصور" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "المجلد ضمن المشاركة العامة %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "مجلد المشاركة العامة" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "المجلد ضمن الفيديو %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "مجلد الفيديو" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "المجلد ضمن القوالب %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "مجلد القوالب" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "المجلد ضمن ذاكرة التخزين المؤقت %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "مجلد الذاكرة المؤقتة للمستخدم" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "المجلد ضمن لإعدادات المستخدم %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "مجلد إعدادات المستخدم" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "المجلد ضمن بيانات المستخدم %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "مجلد بيانات المستخدم" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "المجلد ضمن وقت تشغيل المستخدم %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "مجلد وقت تشغيل المستخدم" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "صلاحيات ملفات النظام لـ %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "مسار ملف النظام غير معروف" #: src/bz-app-size-dialog.blp:29 src/bz-app-size-dialog.blp:55 msgid "Download Size" msgstr "حجم التنزيل" #: src/bz-app-size-dialog.blp:56 msgid "Amount to download from the internet" msgstr "الكمية المطلوب تنزيلها من الإنترنت" #: src/bz-app-size-dialog.blp:76 msgid "Installed Size" msgstr "حجم التنصيب" #: src/bz-app-size-dialog.blp:77 msgid "Size on Disk" msgstr "الحجم على القرص" #: src/bz-app-size-dialog.blp:99 msgid "User Data Size" msgstr "حجم بيانات المستخدم" #: src/bz-app-size-dialog.blp:100 msgid "Caches, settings, and other app data" msgstr "الذاكرة المؤقتة, الإعدادات, ومعلومات التطبيق الأخرى" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:86 src/bz-full-view.c:287 src/bz-releases-list.c:178 msgid "Installed" msgstr "المنصَّبة" #: src/bz-apps-page.blp:142 msgid "Show All" msgstr "عرض الكل" #: src/bz-apps-page.c:243 #, c-format msgid "All \"%s\"" msgstr "كل \"%s\"" #: src/bz-apps-page.c:530 src/bz-tag-list.c:109 #, c-format msgid "%d Applications" msgstr "%d تطبيقات" #: src/bz-application.c:674 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:675 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:706 msgid "translator-credits" msgstr "" "أحمد النجماوي \n" "أنس داوود آغا " #: src/bz-application.c:717 msgid "Special Thanks" msgstr "شكر خاص" #: src/bz-application.c:775 msgid "Logged Out Successfully!" msgstr "نجح تسجيل الخروج!" #: src/bz-application.c:898 msgid "Performing setup..." msgstr "يتم التنصيب..." #: src/bz-application.c:981 src/bz-application.c:990 msgid "Set Up Flathub" msgstr "نصِّب فلاتهب" #: src/bz-application.c:984 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "فلاتهب لم يتم تنصيبه على النظام. لن تستطيع تصفح و تنصيب تطبيقات بازار اذا لم " "توجد.\n" "\n" "يمكنك استخدام بازار لتصفح وحذف التطبيقات المحملة." #: src/bz-application.c:989 msgid "Later" msgstr "لاحقًا" #: src/bz-application.c:1399 src/bz-application.c:3116 msgid "Synchronizing..." msgstr "يُزامن..." #: src/bz-application.c:1546 src/bz-application.c:3112 #, c-format msgid "Receiving %d entries..." msgstr "استلام %d المدخلات..." #: src/bz-application.c:1551 msgid "Checking for updates" msgstr "التحقق من التحديثات" #: src/bz-application.c:3118 msgid "Indexing Data..." msgstr "فهرسة البيانات..." #: src/bz-appstream-parser.c:265 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "صفحة فلاتهَب" #: src/bz-appstream-parser.c:286 msgctxt "Project URL Type" msgid "Project Website" msgstr "موقع المشروع" #: src/bz-appstream-parser.c:290 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "متعقب العلل" #: src/bz-appstream-parser.c:294 msgctxt "Project URL Type" msgid "FAQ" msgstr "الأسئلة الشائعة" #: src/bz-appstream-parser.c:298 msgctxt "Project URL Type" msgid "Help" msgstr "المساعدة" #: src/bz-appstream-parser.c:302 msgctxt "Project URL Type" msgid "Donate" msgstr "التبرع" #: src/bz-appstream-parser.c:308 msgctxt "Project URL Type" msgid "Translate" msgstr "الترجمة" #: src/bz-appstream-parser.c:312 msgctxt "Project URL Type" msgid "Contact" msgstr "التواصل" #: src/bz-appstream-parser.c:316 msgctxt "Project URL Type" msgid "Source Code" msgstr "المصدر البرمجي" #: src/bz-appstream-parser.c:322 msgctxt "Project URL Type" msgid "Contribute" msgstr "المساهمة" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:68 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:61 #: src/bz-library-page.blp:59 src/bz-user-data-page.blp:86 msgid "Empty" msgstr "فارغ" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "لا يوجد تنسيق" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "لا تتوفر معلومات عن التنسيق في هذا النظام. لا يزال بإمكانك تصفح التطبيقات " "على فلاتهب" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "تصفح فلاتهَب" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "غير متصل" #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 msgid "Browser" msgstr "المتصفح" #: src/bz-developer-badge.c:131 msgid "Developer information not available." msgstr "معلومات المطور غير متاحة." #: src/bz-developer-badge.c:137 src/bz-developer-badge.c:151 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "لم يتم التحقق من ملكية معرف التطبيق %s وقد يكون حزمة مجتمعية." #: src/bz-developer-badge.c:155 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "تم التحقق يدويًا من ملكية معرف التطبيق %s بواسطة فريق فلاتهب." #: src/bz-developer-badge.c:161 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "تم التحقق من ملكية معرف التطبيق %1$s بواسطة %2$s في %3$s." #: src/bz-developer-badge.c:168 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "تم التحقق من ملكية معرف التطبيق %1$s باستخدام %2$s." #: src/bz-developer-badge.c:172 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "تم التحقق من ملكية معرف التطبيق %s." #: src/bz-donations-dialog.blp:47 msgid "View the Release Page" msgstr "أظهِر صفحة الاطلاق" #: src/bz-donations-dialog.blp:69 msgid "This Bazaar Release Was Made Possible By Users Like You!" msgstr "تم إطلاق هذا الإصدار من بازار بفضل مستخدمين مثلك!" #: src/bz-donations-dialog.blp:77 msgid "" "I love making Bazaar, but I cannot do it alone. If you would like to help " "support further development, please consider donating to the project at my " "ko-fi:" msgstr "" "أحبّ تصميم بازار، لكنني لا أستطيع القيام بذلك بمفردي. إذا كنتم ترغبون في دعم " "تطويره، يُرجى التبرع للمشروع عبر حسابي على Ko-fi:" #: src/bz-donations-dialog.blp:87 msgid "Donate to Bazaar" msgstr "تبرَّع إلى بازار" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:156 #, c-format msgid "What's New in Version %s?" msgstr "ما الجديد في هذا الإصدار %s؟" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "اختر تنصيبًا" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "لديك عدة إصدارات منصَّبة من هذا التطبيق. أي واحد ستشرع به؟" #: src/bz-entry-group-util.c:80 src/bz-transaction-dialog.c:201 #: src/bz-transaction-dialog.c:230 src/bz-transaction-dialog.c:275 #: src/bz-transaction-dialog.c:578 msgid "Cancel" msgstr "إلغاء" #: src/bz-entry-selection-row.blp:17 msgid "For this user only" msgstr "لهذا المستخدم فقط" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "هذا المستخدم" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "جميع المستخدمين" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "حدث خطأ" #: src/bz-error.c:89 msgid "Close" msgstr "أغلِق" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "انسخ وأغلِق" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "سجّل الدخول باستخدام فلاتهب لإدارة المفضلة" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "تسجيل الدخول" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "عدد المفضلة" #: src/bz-favorites-tile.c:172 msgid "Uninstall" msgstr "إزالة" #: src/bz-favorites-tile.blp:70 src/bz-installed-tile.blp:77 msgid "Support this application" msgstr "ادعم هذا التطبيق" #: src/bz-favorites-tile.blp:119 msgid "Remove from Favorites" msgstr "حذف من المفضلة" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:78 #: src/bz-window.blp:442 msgid "Favorites" msgstr "المفضلة" #: src/bz-favorites-page.blp:22 src/bz-full-view.blp:44 src/bz-window.blp:307 msgid "Open App Library" msgstr "افتح مكتبة التطبيقات" #: src/bz-favorites-page.blp:39 src/bz-section-view.blp:144 #: src/bz-transaction-dialog.c:579 msgid "Install All" msgstr "نصِّب الكل" #: src/bz-favorites-page.blp:56 src/bz-user-data-page.blp:75 msgid "Loading" msgstr "يحمِّل" #: src/bz-favorites-page.blp:71 msgid "No Favorites" msgstr "لا يوجد تفضلات" #: src/bz-favorites-page.blp:72 msgid "Applications you mark as favorite will appear here" msgstr "ستظهر التطبيقات التي تضع عليها علامة \"مفضلة\" هنا" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "السابق" #: src/bz-featured-carousel.blp:53 msgid "Next" msgstr "التالي" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "تطبيق اليوم" #: src/bz-flathub-category.c:89 msgid "Editing" msgstr "يعدل" #: src/bz-flathub-category.c:90 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:91 msgid "Mixer" msgstr "خلاط" #: src/bz-flathub-category.c:92 msgid "Music" msgstr "موسيقا" #: src/bz-flathub-category.c:93 msgid "Player" msgstr "مشغل" #: src/bz-flathub-category.c:94 msgid "Recorder" msgstr "مسجل" #: src/bz-flathub-category.c:95 msgid "Sequencer" msgstr "جهاز التسلسل" #: src/bz-flathub-category.c:96 msgid "Tuner" msgstr "موالف" #: src/bz-flathub-category.c:97 msgid "TV" msgstr "تلفاز" #: src/bz-flathub-category.c:102 msgid "Emulation" msgstr "محاكاة" #: src/bz-flathub-category.c:103 msgid "Action" msgstr "حماسي" #: src/bz-flathub-category.c:104 msgid "Adventure" msgstr "مغامرة" #: src/bz-flathub-category.c:105 msgid "Arcade" msgstr "آركيد" #: src/bz-flathub-category.c:106 msgid "Blocks" msgstr "مكعبات" #: src/bz-flathub-category.c:107 msgid "Board" msgstr "طاولة" #: src/bz-flathub-category.c:108 msgid "Card" msgstr "ورق" #: src/bz-flathub-category.c:109 msgid "Kids" msgstr "أطفال" #: src/bz-flathub-category.c:110 msgid "Logic" msgstr "منطق" #: src/bz-flathub-category.c:111 msgid "Role Playing" msgstr "لعب الأدوار" #: src/bz-flathub-category.c:112 msgid "Shooter" msgstr "رماية" #: src/bz-flathub-category.c:113 msgid "Simulation" msgstr "محاكاة" #: src/bz-flathub-category.c:114 msgid "Sports" msgstr "رياضة" #: src/bz-flathub-category.c:115 msgid "Strategy" msgstr "استراتيجية" #: src/bz-flathub-category.c:120 msgid "Audio & Video" msgstr "صوت وفيديو" #: src/bz-flathub-category.c:120 msgid "Media" msgstr "وسائط متعددة" #: src/bz-flathub-category.c:120 msgid "More Audio & Video" msgstr "المزيد من الصوت وفيديو" #: src/bz-flathub-category.c:121 msgid "Developer Tools" msgstr "أدوات المطوريين" #: src/bz-flathub-category.c:121 msgid "Develop" msgstr "تطوير" #: src/bz-flathub-category.c:121 msgid "More Developer Tools" msgstr "المزيد من أدوات المطوريين" #: src/bz-flathub-category.c:122 msgid "Education" msgstr "تعليمية" #: src/bz-flathub-category.c:122 msgid "Learn" msgstr "تعلَّم" #: src/bz-flathub-category.c:122 msgid "More Education" msgstr "المزيد من التطبيقات التعليمية" #: src/bz-flathub-category.c:123 msgid "Gaming" msgstr "ألعاب" #: src/bz-flathub-category.c:123 msgid "Play" msgstr "لعب" #: src/bz-flathub-category.c:123 msgid "More Gaming" msgstr "المزيد من الألعاب" #: src/bz-flathub-category.c:124 msgid "Graphics & Photography" msgstr "الرسومات والصور" #: src/bz-flathub-category.c:124 msgid "Create" msgstr "صمِّم" #: src/bz-flathub-category.c:124 msgid "More Graphics & Photography" msgstr "المزيد من الرسومات والصور" #: src/bz-flathub-category.c:125 msgid "Networking" msgstr "شبكي" #: src/bz-flathub-category.c:125 msgid "Internet" msgstr "شبكي" #: src/bz-flathub-category.c:125 msgid "More Networking" msgstr "المزيد من التطبيقات الشبكية" #: src/bz-flathub-category.c:126 msgid "Productivity" msgstr "إنتاجية" #: src/bz-flathub-category.c:126 msgid "Work" msgstr "عمل" #: src/bz-flathub-category.c:126 msgid "More Productivity" msgstr "المزيد من تطبيقات الإنتاجية" #: src/bz-flathub-category.c:127 msgid "Science" msgstr "علمي" #: src/bz-flathub-category.c:127 msgid "More Science" msgstr "المزيد من التطبيقات العلمية" #: src/bz-flathub-category.c:128 msgid "System" msgstr "نظام" #: src/bz-flathub-category.c:128 msgid "More System" msgstr "المزيد من تطبيقات النظام" #: src/bz-flathub-category.c:129 msgid "Utilities" msgstr "أدوات" #: src/bz-flathub-category.c:129 msgid "Tools" msgstr "أدوات" #: src/bz-flathub-category.c:129 msgid "More Utilities" msgstr "المزيد من الأدوات" #: src/bz-flathub-category.c:130 src/bz-flathub-page.blp:119 #: src/bz-flathub-page.blp:152 msgid "Trending" msgstr "الرائجة" #: src/bz-flathub-category.c:130 msgid "More Trending" msgstr "المزيد من التطبيقات الرائجة" #: src/bz-flathub-category.c:131 src/bz-flathub-page.blp:125 #: src/bz-flathub-page.blp:185 msgid "Popular" msgstr "الشائعة" #: src/bz-flathub-category.c:131 msgid "More Popular" msgstr "المزيد من التطبيقات الشائعة" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:174 msgid "Recently Added" msgstr "أُضيفت مؤخرًا" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:131 msgid "New" msgstr "جديد" #: src/bz-flathub-category.c:132 msgid "More New" msgstr "المزيد من الجديد" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:163 msgid "Recently Updated" msgstr "حُدِّثت مؤخرًا" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:137 msgid "Updated" msgstr "حدثَّ مؤخرا" #: src/bz-flathub-category.c:133 msgid "More Updated" msgstr "المزيد من التطبيقات المُحدَّثة مؤخرا" #: src/bz-flathub-category.c:134 msgid "Mobile" msgstr "جهاز الهاتف" #: src/bz-flathub-category.c:134 msgid "More Mobile" msgstr "المزيد من التطبيقات أجهزة الهاتف" #: src/bz-flathub-category.c:135 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:135 msgid "More Adwaita" msgstr "المزيد من Adwaita" #: src/bz-flathub-category.c:136 msgid "KDE Apps" msgstr "تطبيقات بيئة سطح مكتب KDE" #: src/bz-flathub-category.c:136 msgid "More KDE Apps" msgstr "المزيد من تطبيقات بيئة سطح مكتب KDE" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "لم يُضف فلاتهَب" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "لم يتم العثور على جهاز التحكم عن بعد فلاتهب في أي من عمليات تثبيت فلاتباك " "الخاصة بك" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "حصل خطأ في فلاتهب" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "أعد محاولة الاتصال بفلاتهب" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "فلاتهب غير متوفر" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "لم نتمكن من الاتصال بـفلاتهب. لا يزال بإمكانك إدارة التطبيقات والبحث عنها." #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "ابحث التطبيقات" #: src/bz-flathub-page.blp:270 msgid "On the Go" msgstr "أثناء التنقل" #: src/bz-flathub-page.blp:282 msgid "Apps for your Linux phones and tablets" msgstr "تطبيقات لأجل هواتف لينكس وأجهزتها اللوحية" #: src/bz-flathub-page.blp:293 src/bz-flathub-page.blp:328 msgid "More Mobile Apps" msgstr "المزيد من تطبيقات هواتف لينكس" #: src/bz-flathub-page.blp:388 msgid "We​ ♥​ Games" msgstr "نحن ♥ الألعاب" #: src/bz-flathub-page.blp:401 msgid "Games and apps to run your favorite titles" msgstr "ألعاب وتطبيقات لتشغل عناوينك المفضلة" #: src/bz-flathub-page.blp:435 msgid "More Games" msgstr "المزيد من الألعاب" #: src/bz-full-view.blp:65 src/bz-library-page.blp:70 #: src/bz-library-page.blp:74 msgid "No Results" msgstr "لا توجد نتائج" #: src/bz-full-view.blp:66 msgid "Try a different search query" msgstr "جرِّب عبارة بحث مختلفة" #: src/bz-full-view.blp:72 msgid "Content" msgstr "المحتوى" #: src/bz-full-view.blp:130 msgid "Installing .flatpak bundles is not yet supported" msgstr "تثبيت حزم فلاتباك غير مدعوم حاليًا" #: src/bz-full-view.blp:223 msgid "Support" msgstr "ادعَم" #: src/bz-full-view.blp:246 src/bz-full-view.blp:506 msgid "Open" msgstr "افتح" #: src/bz-full-view.blp:259 src/bz-full-view.blp:479 msgid "Download & Install Application" msgstr "نزِّل التطبيق ونصِّبه" #: src/bz-full-view.blp:274 msgid "Uninstall Application" msgstr "أزِل التطبيق" #: src/bz-full-view.blp:289 src/bz-full-view.blp:521 msgid "Install Other Version" msgstr "نصِّب إصدارًا آخر" #: src/bz-full-view.blp:443 msgid "Downloads/Month" msgstr "تنزيلات\\شهر" #: src/bz-full-view.blp:540 msgid "Stopped Receiving Core Updates" msgstr "توقف عن تلقي التحديثات الأساسية" #: src/bz-full-view.blp:554 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "يستخدم هذا التطبيق بيئة تشغيل لم تعد تتلقى تحديثات أو إصلاحات أمنية. قد يصبح " "استخدامه غير آمن." #: src/bz-full-view.blp:643 msgid "Trash Data" msgstr "بيانات المهملات" #: src/bz-full-view.blp:784 msgid "Tags:" msgstr "الوسوم:" #: src/bz-full-view.c:227 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:234 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:241 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-full-view.c:251 #, c-format msgid "%d downloads in the last 30 days" msgstr "عدد التنزيلات %d في آخر 30 يومًا" #: src/bz-full-view.c:263 src/bz-full-view.c:597 src/bz-full-view.c:614 msgid "N/A" msgstr "غير متوفر" #. Translators: . #: src/bz-full-view.c:287 msgid "Download" msgstr "تحميل" #: src/bz-full-view.c:307 msgid "Size information unavailable" msgstr "معلومات المقاس غير متوفرة" #: src/bz-full-view.c:310 #, c-format msgid "Download size of %s" msgstr "حجم التنزيل %s" #: src/bz-full-view.c:343 msgid "All Ages" msgstr "جميع الأعمار" #: src/bz-full-view.c:355 msgid "Age rating information unavailable" msgstr "لا توجد معلومات للتصنيف العمري" #: src/bz-full-view.c:360 msgid "Suitable for all ages" msgstr "مناسب لجميع الأعمار" #: src/bz-full-view.c:362 #, c-format msgid "Suitable for ages %d and up" msgstr "مناسب للأعمار من %d سنوات فما فوق" #: src/bz-full-view.c:395 src/bz-full-view.c:400 src/bz-full-view.c:428 #: src/bz-full-view.c:439 msgid "Unknown" msgstr "مجهول" #: src/bz-full-view.c:405 #, c-format msgid "Free software licensed under %s" msgstr "برامج مجانية مرخصة بموجب %s" #: src/bz-full-view.c:410 msgid "Free software" msgstr "برمجية مجانية" #: src/bz-full-view.c:413 msgid "Proprietary Software" msgstr "برمجية محتكرة" #: src/bz-full-view.c:416 #, c-format msgid "Special License: %s" msgstr "رخصة خاصة: %s" #: src/bz-full-view.c:433 msgid "Free" msgstr "مجاني" #: src/bz-full-view.c:436 src/bz-license-dialog.c:132 msgid "Proprietary" msgstr "محتكرة" #: src/bz-full-view.c:441 src/bz-license-dialog.c:134 msgid "Special License" msgstr "ترخيص خاص" #: src/bz-full-view.c:461 msgid "Adaptive" msgstr "متكيف" #: src/bz-full-view.c:461 msgid "Desktop Only" msgstr "سطح المكتب فقط" #: src/bz-full-view.c:467 msgid "Works on desktop, tablets, and phones" msgstr "يعمل على أجهزة الكمبيوتر المكتبية والأجهزة اللوحية والهواتف" #: src/bz-full-view.c:468 msgid "May not work on mobile devices" msgstr "قد لا يعمل على أجهزة الهاتف" #: src/bz-full-view.c:479 msgid "No URL" msgstr "لا رابط" #: src/bz-full-view.c:497 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "هذا التطبيق مرخص تحت رخصة حرَّة، مما يعني أنه يمكن فحص المصدر البرمجي أمنيًا." #: src/bz-full-view.c:498 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "هذا التطبيق مرخص تحت رخصة احتكارية، مما يعني أنه يطوَّر بشكل خاص ولا يمكن " "الوصول للمصدر البرمجي أو فحصه أمنيًا بواسطة طرف ثالث." #: src/bz-full-view.c:505 msgid "More Apps" msgstr "المزيد من التطبيقات" #: src/bz-full-view.c:506 #, c-format msgid "More Apps by %s" msgstr "المزيد من تطبيقات %s" #: src/bz-full-view.c:513 msgid "Other Apps by this Developer" msgstr "تطبيقات أخرى من هذا المطور" #: src/bz-full-view.c:515 src/bz-full-view.c:715 #, c-format msgid "Other Apps by %s" msgstr "تطبيقات أخرى من %s" #: src/bz-full-view.c:524 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "لم يتم تثبيت %s، ولكن لا يزال يحتوي على %s من البيانات." #: src/bz-full-view.c:604 src/bz-safety-dialog.blp:31 msgid "Safe" msgstr "آمن" #: src/bz-full-view.c:606 src/bz-full-view.c:608 msgid "Low Risk" msgstr "خطورة متدنية" #: src/bz-full-view.c:610 msgid "Medium Risk" msgstr "خطورة متوسطة" #: src/bz-full-view.c:612 msgid "High Risk" msgstr "خطورة عالية" #: src/bz-full-view.c:717 msgid "Other Apps" msgstr "تطبيقات أخرى" #: src/bz-full-view.c:719 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d تطبيق" msgstr[1] "%d تطبيق" msgstr[2] "%d تطبيقات" msgstr[3] "%d تطبيقات" msgstr[4] "%d تطبيقات" msgstr[5] "%d تطبيقات" #: src/bz-full-view.c:1058 msgid "Show Less" msgstr "عرض أقل" #: src/bz-full-view.c:1058 msgid "Show More" msgstr "عرض المزيد" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "دعم الأجهزة" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "دعم لوحة المفاتيح" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "يتطلب استخدام لوحة مفاتيح" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "يفضل استخدام لوحة مفاتيح" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "يدعم استخدام لوحة المفاتيح" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "لا توجد معلومات دعم لوحة المفاتيح" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "دعم الفأرة" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "يتطلب استخدام الفأرة أو أجهزة تأشير" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "يفضَّل استخدام الفأرة أو أجهزة تأشير" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "يدعم الفأرة أو أجهزة التأشير" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "لا توجد معلومات دعم الفأرة أو أجهزة التأشير" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "دعم شاشة اللمس" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "يتطلب استخدام شاشة اللمس" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "يُفضَّل استخدام شاشة اللمس" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "يدعم شاشة اللمس" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "لا توجد معلومات دعم شاشة اللمس" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "دعم أجهزة الهاتف" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "يعمل على أجهزة الهاتف" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "قد لا يعمل على أجهزة الهاتف" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "دعم أجهزة سطح المكتب" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "يعمل على الشاشة كبيرة الحجم" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "يعمل %s بشكل أفضل على أجهزة محددة" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "يعمل %s على معظم الأجهزة" #: src/bz-installed-tile.blp:63 src/bz-rich-app-tile.blp:136 msgid "Stopped Receiving Updates" msgstr "توقف عن استقبال التحديثات" #: src/bz-library-page.blp:29 msgid "Search installed apps" msgstr "ابحث في التطبيقات المنصبة" #: src/bz-library-page.blp:63 msgid "No Apps Found" msgstr "لا توجد تطبيقات" #. Translators: . #: src/bz-library-page.blp:82 src/bz-window.blp:179 msgid "Library" msgstr "المكتبة" #: src/bz-library-page.blp:110 msgid "Pending Updates" msgstr "التحديثات المنتظرة" #: src/bz-library-page.blp:137 msgid "Downloads" msgstr "التنزيلات" #: src/bz-library-page.blp:180 msgid "Recently Uninstalled" msgstr "حذفت مؤخرًا" #: src/bz-library-page.blp:231 msgid "Clear Finished Tasks" msgstr "امحُ كل العمليات المنتهية" #: src/bz-library-page.blp:242 msgid "Installed Apps" msgstr "التطبيقات المنصَّبة" #: src/bz-library-page.c:153 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "لا يوجد نتائج للبحث عن \"%s\" في التطبيقات المنصبة" #: src/bz-library-page.c:166 src/bz-updates-card.c:257 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u تحديث متوفر" msgstr[1] "%u تحديث متوفر" msgstr[2] "%u تحديثات متوفر" msgstr[3] "%u تحديثات متوفر" msgstr[4] "%u تحديثات متوفر" msgstr[5] "%u تحديثات متوفر" #: src/bz-license-dialog.blp:95 msgid "Get Involved" msgstr "شارك" #: src/bz-license-dialog.c:126 msgid "Unknown License" msgstr "الترخيص غير معروف" #: src/bz-license-dialog.c:129 msgid "Community Built" msgstr "من إنشاء المجتمع" #: src/bz-license-dialog.c:202 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "تم تطوير هذا التطبيق من قبل مجتمع دولي.\n" "\n" "يمكنك المساعدة في جعله أفضل." #: src/bz-license-dialog.c:205 msgid "The license of this app is not known" msgstr "ترخيص هذا التطبيق غير معروف" #: src/bz-license-dialog.c:211 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "تم تطوير هذا التطبيق من قبل مجتمع دولي, وإطلاقه تحت ترخيص %s.\n" "\n" "يمكنك المساعدة في جعله أفضل." #: src/bz-license-dialog.c:219 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "هذا التطبيق ليس مفتوح المصدر، لذا لا يعرف طريقة عمله إلا مطوروه. قد يكون غير " "آمن بطرق يصعب اكتشافها، وقد يتغير دون رقابة.\n" "\n" "قد تتمكن أو لا تتمكن من المساهمة في تطوير هذا التطبيق." #: src/bz-license-dialog.c:225 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "تم تطوير هذا التطبيق بموجب ترخيص خاص %s.\n" "\n" "قد تتمكن أو لا تتمكن من المساهمة في هذا التطبيق." #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 msgid "Connect to Flathub" msgstr "اربط بفلاتهب" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "حدث خطأ" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "اربط حسابك على فلاتهب ببازار لادارة تطبيقاتك المفضلة." #: src/bz-login-page.blp:108 msgid "Finish" msgstr "انتهاء" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "مرحبا, %s!" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "التفضيلات" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data sync is paused" msgstr "" "يتم تحديد تكلفة الاتصال بالشبكة - تم إيقاف مزامنة بيانات المتجر التلقائية " "مؤقتًا" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:334 msgid "Sync Manually" msgstr "زامن" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "فلاتر المحتوى" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "برمجيات مجانية فقط" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "إخفاء التطبيقات المحتكرة من نتائج البحث" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "نتائج من فلاتهب فقط" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "قيِّد نتائج البحث إلى التطبيقات المتوفرة على فلاتهَب فقط" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "نتائج موثقة فقط" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "استبعِد النتائج التي ليست موثقة من فلاتهَب" #: src/bz-preferences-dialog.blp:49 msgid "Hide EOL Apps" msgstr "إخفاء تطبيقات نهاية العمر الافتراضي" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "أخف التطبيقات التي لم تعد مدعومة من مطوريها" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:197 msgid "Search" msgstr "ابحث" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "تأخير نتائج البحث" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "تحسين أداء نتائج البحث عن طريق تقليل ارتداد مصطلحات البحث" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "شريط التقدم" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "حدد سمة لشريط التحميل العام!" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "خطوط عمودية" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "اعرض ألوان العلم من اليسار إلى اليمين" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "لون النظام" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "الوان الفخر" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "الوان فخر السحاقيات" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "ألوان فخر المثليين الذكور" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "ألوان فخر المتحولين جنسياً" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "ألوان فخر غير الثنائيين" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "ألوان فخر ثنائيي الجنس" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "ألوان فخر اللاجنسيين" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "ألوان فخر الجنسانية الشاملة" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "ألوان فخر اللاجنسيين" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "ألوان فخر الهوية الجندرية المتغيرة" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "ألوان فخر تعدد الميول الجنسية" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "ألوان فخر الجنس الشامل" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "ألوان فخر الأرومانسيين واللا رومانسيين" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "ألوان فخر اللاجنسيين" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "ألوان فخر الجندر كوير" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "ألوان فخر ثنائيي الجنس" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "ألوان فخر الجنس الجزئي" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "ألوان فخر ثنائيي الميول الرومانسية" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "ألوان فخر ذوي الإعاقة" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "ألوان فخر الفيمبوي" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "ألوان فخر النيوتروا" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:28 #: src/bz-updates-card.blp:150 msgid "Version History" msgstr "تاريخ الاصدارات" #: src/bz-releases-list.c:168 #, c-format msgid "Version %s" msgstr "الإصدار %s" #: src/bz-releases-list.c:220 msgid "No details for this release" msgstr "لا تفاصيل لهذه الإصدارة" #: src/bz-releases-list.c:232 msgid "Get More Information" msgstr "احصل على معلومات اضافية" #: src/bz-rich-app-tile.blp:153 msgid "Get" msgstr "يحصل" #: src/bz-safety-calculator.c:82 msgid "Unknown Permissions" msgstr "أذونات غير معروفة" #: src/bz-safety-calculator.c:83 msgid "Permissions are missing for this app." msgstr "أذونات مفقودة للتطبيق." #: src/bz-safety-calculator.c:96 msgid "No Permissions" msgstr "لا أذونات" #: src/bz-safety-calculator.c:97 msgid "App is fully sandboxed" msgstr "التطبيق معزول بالكامل" #: src/bz-safety-calculator.c:103 msgid "Network Access" msgstr "اتصال بالشبكة" #: src/bz-safety-calculator.c:104 msgid "Can access the internet" msgstr "قادر على الوصول للشبكة" #: src/bz-safety-calculator.c:106 msgid "No Network Access" msgstr "لا يوجد وصول للشبكة" #: src/bz-safety-calculator.c:107 msgid "Cannot access the internet" msgstr "غير قادر على الوصول للشبكة" #: src/bz-safety-calculator.c:112 msgid "User Device Access" msgstr "الوصول لجهاز المستخدم" #: src/bz-safety-calculator.c:113 msgid "Can access devices such as webcams or gaming controllers" msgstr "قادر على الوصول للأجهزة مثل الكاميرا وأيادي اللعب" #: src/bz-safety-calculator.c:115 msgid "No User Device Access" msgstr "غير قادر على الوصول لجهاز المستخدم" #: src/bz-safety-calculator.c:116 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "غير قادر على الوصول لأجهزة كالكاميرا أو كونترولر الألعاب" #: src/bz-safety-calculator.c:121 msgid "Input Device Access" msgstr "الوصول لأجهزة الدخل" #: src/bz-safety-calculator.c:122 msgid "Can access input devices" msgstr "قادر على الوصول لأجهزة الدخل" #: src/bz-safety-calculator.c:128 msgid "Microphone Access and Audio Playback" msgstr "الوصول للميكروفون وتشغيل الصوت" #: src/bz-safety-calculator.c:129 msgid "Can listen using microphones and play audio without asking permission" msgstr "قادر على الاستماع باستخدام الميكروفونات وتشغيل الصوت دون طلب إذن" #: src/bz-safety-calculator.c:135 msgid "System Device Access" msgstr "الوصول إلى أجهزة النظام" #: src/bz-safety-calculator.c:136 msgid "Can access system devices which require elevated permissions" msgstr "يمكنه الوصول إلى أجهزة النظام التي تتطلب صلاحيات موسعة" #: src/bz-safety-calculator.c:142 msgid "Screen Contents Access" msgstr "الوصول إلى محتويات الشاشة" #: src/bz-safety-calculator.c:143 msgid "Can access the contents of the screen or other windows" msgstr "يمكن الوصول إلى محتويات الشاشة أو النوافذ الأخرى" #: src/bz-safety-calculator.c:149 msgid "Legacy Windowing System" msgstr "نظام نوافذ قديم" #: src/bz-safety-calculator.c:150 msgid "Always uses a legacy windowing system (X11)" msgstr "دائما يستخدم نظام النوافذ (X11) القديم" #: src/bz-safety-calculator.c:156 msgid "Arbitrary Permissions" msgstr "أذونات تعسفية" #: src/bz-safety-calculator.c:157 msgid "Can acquire arbitrary permissions" msgstr "يمكن الحصول على أذونات تعسفية" #: src/bz-safety-calculator.c:163 msgid "User Settings" msgstr "إعدادات المستخدم" #: src/bz-safety-calculator.c:164 msgid "Can access and change user settings" msgstr "قادر على الوصول وتعديل إعدادات المستخدم" #: src/bz-safety-calculator.c:170 msgid "Full File System Read/Write Access" msgstr "وصول كامل لقراءة وكتابة ملفات النظام" #: src/bz-safety-calculator.c:171 msgid "Can read and write all data on the file system" msgstr "قادر على قراءة وكتابة جميع البيانات التي على بيانات النظام" #: src/bz-safety-calculator.c:178 msgid "Home Folder Read/Write Access" msgstr "إمكانية الوصول للقراءة/الكتابة إلى المجلد الرئيسي" #: src/bz-safety-calculator.c:179 msgid "Can read and write all data in your home directory" msgstr "يمكنك قراءة وكتابة جميع البيانات في دليل المستخدم الخاص بك" #: src/bz-safety-calculator.c:186 msgid "Full File System Read Access" msgstr "وصول كامل لقراءة ملفات النظام" #: src/bz-safety-calculator.c:187 msgid "Can read all data on the file system" msgstr "يمكن قراءة جميع البيانات الموجودة على نظام الملفات" #: src/bz-safety-calculator.c:195 msgid "Home Folder Read Access" msgstr "إمكانية قراءة المجلد الرئيسي" #: src/bz-safety-calculator.c:196 msgid "Can read all data in your home directory" msgstr "يمكن قراءة جميع البيانات في مجلدك الرئيسي" #: src/bz-safety-calculator.c:204 msgid "Download Folder Read/Write Access" msgstr "إمكانية قراءة/كتابة مجلد التنزيل" #: src/bz-safety-calculator.c:205 msgid "Can read and write all data in your downloads directory" msgstr "يمكنك قراءة وكتابة جميع البيانات في مجلد التنزيلات الخاص بك" #: src/bz-safety-calculator.c:215 msgid "Download Folder Read Access" msgstr "إمكانية قراءة مجلد التنزيل" #: src/bz-safety-calculator.c:216 msgid "Can read all data in your downloads directory" msgstr "قادر على قراءة جميع البيانات في مجلد التحميلات" #: src/bz-safety-calculator.c:229 msgid "Can read and write all data in the directory" msgstr "قادر على قراءة وكتابة البيانات ضمن هذا المجلد" #: src/bz-safety-calculator.c:243 msgid "Can read all data in the directory" msgstr "قادر على قراءة البيانات ضمن هذا المجلد" #: src/bz-safety-calculator.c:258 msgid "No File System Access" msgstr "لا يوجد وصول لملفات النظام" #: src/bz-safety-calculator.c:259 msgid "Cannot access the file system at all" msgstr "غير قادر على الوصول لملفات النظام على الإطلاق" #: src/bz-safety-calculator.c:266 msgid "Uses System Services" msgstr "يستخدم خدمات النظام" #: src/bz-safety-calculator.c:267 msgid "Can request data from non-portal system services" msgstr "يمكن طلب البيانات من خدمات النظام غير التابعة للبوابة" #: src/bz-safety-calculator.c:273 msgid "Uses Session Services" msgstr "يستخدم خدمات الجلسة" #: src/bz-safety-calculator.c:274 msgid "Can request data from non-portal session services" msgstr "يمكن طلب البيانات من خدمات جلسات غير تابعة للبوابة" #: src/bz-safety-calculator.c:322 msgid "No Service Access" msgstr "لا يوجد وصول للخدمات" #: src/bz-safety-calculator.c:323 msgid "Cannot access non-portal session or system services at all" msgstr "" "لا يمكن الوصول إلى جلسات أو خدمات النظام غير التابعة للبوابة على الإطلاق" #: src/bz-safety-calculator.c:331 msgid "Verified App Developer" msgstr "مطور تطبيقات موثق" #: src/bz-safety-calculator.c:332 msgid "The developer of this app has been verified to be who they say they are" msgstr "تم التحقق من هوية مطور هذا التطبيق" #: src/bz-safety-calculator.c:341 msgid "Proprietary Code" msgstr "كود محتكر" #: src/bz-safety-calculator.c:342 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "الكود المصدري غير متاح للعامة ويمكن مراجعته بشكل مستقل، مما يعني أن التطبيق " "قد يكون غير آمن" #: src/bz-safety-calculator.c:352 msgid "Auditable Code" msgstr "كود قابل للتدقيق" #: src/bz-safety-calculator.c:353 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "الكود المصدري متاح للعامة ويمكن مراجعته بشكل مستقل، مما يجعل التطبيق أكثر " "أمانًا" #: src/bz-safety-calculator.c:493 #, c-format msgid "Use the %s System Service" msgstr "يمكنه استخدام خدمة النظام: %s" #: src/bz-safety-calculator.c:497 #, c-format msgid "Use the %s Session Service" msgstr "يمكنه استخدام جلسة الخدمة: %s" #: src/bz-safety-calculator.c:501 #, c-format msgid "Use the %s Service" msgstr "يمكنه استخدام خدمة: %s" #: src/bz-safety-calculator.c:511 msgid "Can see the non-portal service" msgstr "يمكنه رؤية الخدمة غير التابعة للبوابة" #: src/bz-safety-calculator.c:513 msgid "Can talk to the non-portal service" msgstr "يمكنه التحدث مع الخدمة غير التابعة للبوابة" #: src/bz-safety-calculator.c:515 msgid "Can own the non-portal service" msgstr "يمكنه امتلاك الخدمة غير التابعة للبوابة" #: src/bz-safety-calculator.c:530 msgid "Global Menu Integration" msgstr "تكامل القوائم العامة" #: src/bz-safety-calculator.c:531 msgid "Can display its menus in a global menu bar" msgstr "قادر على عرض قوائمه في شريط القوائم العام" #: src/bz-safety-calculator.c:536 msgid "KDE Settings Integration" msgstr "تكامل إعدادات KDE" #: src/bz-safety-calculator.c:537 msgid "Can detect when KDE desktop settings change" msgstr "قادر على تحديد التغيرات في إعدادات سطح مكتب KDE" #: src/bz-safety-calculator.c:542 msgid "KDE Global Settings" msgstr "الإعدادات العامة لـKDE" #: src/bz-safety-calculator.c:543 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "قادر على قراءة تفضيلات سطح مكتب KDE مثل الخطوط والألوان" #: src/bz-safety-calculator.c:548 msgid "Secret Storage Service" msgstr "خدمة تخزين الأسرار" #: src/bz-safety-calculator.c:549 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "قادر على تخزين واستعادة كلمات المرور الخاصة به باستخدام سلسلة مفاتيح النظام" #: src/bz-safety-calculator.c:554 msgid "Desktop Notifications Service" msgstr "خدمة إشعارات سطح المكتب" #: src/bz-safety-calculator.c:555 msgid "Can send desktop notifications" msgstr "يستطيع إرسال إشعارات لسطح المكتب" #: src/bz-safety-calculator.c:561 msgid "System Tray Integration" msgstr "تكامل شريط النظام" #: src/bz-safety-calculator.c:562 msgid "Can display an icon in the system tray" msgstr "قادر على عرض أيقونة في شريط النظام" #: src/bz-safety-calculator.c:567 msgid "KDE Connect Integration" msgstr "تكامل KDE Connect" #: src/bz-safety-calculator.c:568 msgid "Can interact with devices paired via KDE Connect" msgstr "قادر على التفاعل مع الأجهزة المرتبطة عن طريق KDE Connect" #: src/bz-safety-dialog.blp:7 msgid "Safety" msgstr "الأمن" #: src/bz-safety-dialog.blp:50 msgid "Details" msgstr "التفاصيل" #: src/bz-safety-dialog.blp:53 msgid "License" msgstr "الرخصة" #: src/bz-safety-dialog.blp:63 msgid "App ID" msgstr "معرف التطبيق" #: src/bz-safety-dialog.blp:73 msgid "SDK" msgstr "حزمة التطوير البرمجية" #: src/bz-safety-dialog.blp:101 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "يستخدم هذا التطبيق إصدارًا قديمًا من منصة البرامج (حزمة تطوير برمجية) وقد " "يحتوي على أخطاء أو ثغرات أمنية لن يتم إصلاحها." #: src/bz-safety-dialog.c:227 #, c-format msgid "%s is Safe" msgstr "%s آمن" #: src/bz-safety-dialog.c:232 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s لا يملك أذونات آمنة" #: src/bz-safety-dialog.c:237 #, c-format msgid "%s is Probably Safe" msgstr "%s آمن غالبا" #: src/bz-safety-dialog.c:242 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s يمكن أن يكون آمن" #: src/bz-safety-dialog.c:247 #, c-format msgid "%s is Unsafe" msgstr "%s غير آمن" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "لقطات الشاشة" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "لقطة الشاشة السابقة" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "لقطة الشاشة التالية" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "نسخ الصورة" #: src/bz-screenshot-page.blp:147 msgid "Reset View" msgstr "إعادة ضبط" #: src/bz-screenshot-page.blp:158 msgid "Zoom Out" msgstr "تصغير" #: src/bz-screenshot-page.blp:168 msgid "Zoom In" msgstr "تكبير" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "عرض لقطات الشاشة" #: src/bz-screenshots-carousel.blp:112 msgid "Open Screenshot Viewer" msgstr "افتح عارض لقطات الشاشة" #: src/bz-search-widget.blp:57 msgid "Search Apps, Games, Software" msgstr "ابحث عن التطبيقات, الألعاب, البرامج" #: src/bz-search-widget.blp:96 msgid "Categories Unavailable" msgstr "التصنيف غير متوفر" #: src/bz-search-widget.blp:97 msgid "Search for apps using the search bar above." msgstr "ابحث عن التطبيقات من خلال حقل البحث في الأعلى." #: src/bz-search-widget.blp:181 msgid "No Applications Found" msgstr "لم يتم العثور على تطبيق" #: src/bz-search-widget.c:241 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "لا يوجد نتائج لـ \"%s\" في فلاتهب" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "نُسِخ!" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "انسخ الوصلة" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "افتح الوصلة" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "الخط الزمني" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "التنصيبات:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "العالم" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:124 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM كامل التنزيلات" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:127 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK كامل التنزيلات" #: src/bz-stats-dialog.c:129 #, c-format msgid "%'d Total Installs" msgstr "%'d كامل التنزيلات" #: src/bz-tag-list.c:96 msgid "No Results Found" msgstr "لا توجد نتائج" #: src/bz-tag-list.c:108 #, c-format msgid "Apps Tagged \"%s\"" msgstr "التطبيقات الموسومة \"%s\"" #: src/bz-tag-list.c:124 msgid "Search failed" msgstr "فشل البحث" #: src/bz-transaction-dialog.c:155 msgid "Keep Data" msgstr "الحفاظ على المعلومات" #: src/bz-transaction-dialog.c:156 msgid "Allow restoring settings and content" msgstr "السماح باستعادة الإعدادات والمحتوى" #: src/bz-transaction-dialog.c:165 msgid "Delete Data" msgstr "حذف المعلومات" #: src/bz-transaction-dialog.c:166 msgid "Permanently remove app data to save space" msgstr "أزِل معلومات التطبيق نهائيا للحفاظ على مساحة التخزين" #: src/bz-transaction-dialog.c:191 #, c-format msgid "Install %s?" msgstr "أتُنصِّب %s؟" #: src/bz-transaction-dialog.c:196 msgid "" "Select which version to install. May install additional shared components" msgstr "حدد الإصدار الذي ترغب في تنصيبه. قد تُنصَّب مكونات إضافية مشتركة" #: src/bz-transaction-dialog.c:198 msgid "May install additional shared components" msgstr "قد تُنصَّب مكونات إضافية مشتركة" #: src/bz-transaction-dialog.c:219 #, c-format msgid "Remove %s?" msgstr "أتُزيل %s؟" #: src/bz-transaction-dialog.c:222 msgid "Select which version to remove." msgstr "حدد الإصدار الذي تود حذفه." #: src/bz-transaction-dialog.c:224 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "لن تستطيع استخدام %s بعد إزالته." #: src/bz-transaction-dialog.c:247 #, c-format msgid "“%s” is High Risk" msgstr "“%s” خطر جدا" #: src/bz-transaction-dialog.c:251 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "هذا التطبيق يملك صلاحيات كاملة على نظامك منها ملفاتك, معلومات تصفحك, " "كلمات مرورك المحفوظة,و المزيد. وأيضا يملك صلاحية وصول للشبكة, قد يعني " "ذلك إرسال معلوماتك لجهات خارجية.\n" "\n" "لأن التطبيق محتكر، فلا يمكن تدقيقه لمعرفة ما يفعله بهذه الأذونات." #: src/bz-transaction-dialog.c:260 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "هذا التطبيق يستخدم نظام النوافذ X11, مما يسمح له بـ تسجيل جميع ضغطات " "الأزرار, تسجيل لقطات الشاشة, ومراقبة التطبيقات الأخرى. كما يمكنه أيضا " "الوصول للشبكة, مما يعني إمكانية إرسال بياناتك الشخصية لأطراف خارجية.\n" "لأن التطبيق محتكر، فلا يمكن تدقيقه لمعرفة ما يفعله بهذه الأذونات." #: src/bz-transaction-dialog.c:276 msgid "Install Anyway" msgstr "نصِّب على كل حال" #: src/bz-transaction-dialog.c:549 msgid "All apps are already installed" msgstr "تم تنصيب جميع التطبيقات" #: src/bz-transaction-dialog.c:551 msgid "OK" msgstr "حسناً" #: src/bz-transaction-dialog.c:567 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "أتُنصِّب %u التطبيق؟" msgstr[1] "أتُنصِّب %u التطبيق؟" msgstr[2] "أتُنصِّب %u التطبيقات؟" msgstr[3] "أتُنصِّب %u التطبيقات؟" msgstr[4] "أتُنصِّب %u التطبيقات؟" msgstr[5] "أتُنصِّب %u التطبيقات؟" #: src/bz-transaction-dialog.c:575 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "سيتم تنصيب التالي. برمجيات تشاركية إضافية قد يتم تنصيبها" #: src/bz-transaction-dialog.c:576 #, c-format msgid "%d addons will be installed." msgstr "%d إضافات ستنصَّب." #: src/bz-transaction-dialog.c:577 msgid "Additionally, addons will be installed." msgstr "بالإضافة إلى ذلك، ستنصَّب %d من بيئات التشغيل و\\أو الإضافات." #: src/bz-transaction-manager.c:1251 #, c-format msgid "Finished in %.02f seconds" msgstr "انتهى خلال %.02f ثانية" #: src/bz-transaction-tile.blp:125 msgid "App Add-on" msgstr "إضافات التطبيق" #: src/bz-transaction-tile.blp:154 msgid "Runtime" msgstr "وقت التشغيل" #: src/bz-transaction-tile.blp:178 msgid "In Queue" msgstr "في الطابور" #: src/bz-transaction-tile.blp:202 msgid "Done" msgstr "انتهاء" #: src/bz-transaction-tile.blp:226 msgid "Error" msgstr "خطأ" #: src/bz-transaction-tile.blp:267 msgid "Open App" msgstr "افتح التطبيق" #: src/bz-transaction-tile.c:110 #, c-format msgid "%s Freed" msgstr "%s ذاكرة محررة" #: src/bz-transaction.c:342 msgid "Pending" msgstr "ينتظر" #: src/bz-updates-card.blp:36 msgid "Update All" msgstr "حدِّث الكل" #: src/bz-updates-card.blp:161 src/bz-updates-card.blp:186 msgid "Update" msgstr "حدِّث" #: src/bz-updates-card.c:293 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u تحديث وقت التشغيل" msgstr[1] "%u تحديث وقت التشغيل" msgstr[2] "%u تحديثات وقت التشغيل" msgstr[3] "%u تحديثات وقت التشغيل" msgstr[4] "%u تحديثات وقت التشغيل" msgstr[5] "%u تحديثات وقت التشغيل" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "أدر معلوماتك" #: src/bz-user-data-page.blp:89 msgid "No User Data found" msgstr "لم يتم العثور على معلومات المستخدم" #: src/bz-user-data-page.blp:94 msgid "User Data" msgstr "معلومات المستخدم" #: src/bz-user-data-tile.c:144 #, c-format msgid "Trashed User Data for %s" msgstr "معلومات المستخدم المهملة لـ %s" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "معلومات المستخدم المهملة" #: src/bz-window.blp:135 msgid "Refreshing Store Content" msgstr "تحديث محتوى المتجر" #: src/bz-window.blp:153 msgid "Curated" msgstr "المنتقاة" #: src/bz-window.blp:166 msgid "Flathub" msgstr "فلاتهَب" #: src/bz-window.blp:273 msgid "No background tasks!" msgstr "لا توجد مهمات في الخلفية!" #: src/bz-window.blp:325 msgid "You are running a new version of Bazaar!" msgstr "انت تشغل نسخة حديثة من بازار!" #: src/bz-window.blp:326 msgid "See What's New" msgstr "تعرف على أحدث التطبيقات" #: src/bz-window.blp:333 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "لديك اتصال بالشبكة ولكن يتم عرض نسخة مسجلة من فلاتهب" #: src/bz-window.blp:449 msgid "Log Out" msgstr "تسجيل الخروج" #: src/bz-window.c:683 msgid "You can't remove Bazaar from Bazaar!" msgstr "لا يمكنك حذف بازار من بازار!" #: src/bz-window.c:891 src/bz-window.c:925 msgid "Can't do that right now!" msgstr "لا يمكن فعل ذلك الآن!" #: src/bz-world-map.c:587 msgctxt "As in, \"100 Downloads\"" msgid "Downloads" msgstr "التنزيلات" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "عام" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "افتح البحث" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "افتح التفضيلات" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Synchronize Remotes" msgstr "المزامنة" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Open Library" msgstr "افتح المكتبة" #: src/gtk/shortcuts-dialog.blp:30 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "أظهِر الاختصارات" #: src/gtk/shortcuts-dialog.blp:35 msgctxt "shortcut window" msgid "Quit" msgstr "الخروج" #~ msgid "Show Git Forge Star Counts" #~ msgstr "إظهار نجوم مستودع جِت" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "أيظهر مقدار نجوم مستودع جِت للمشروع أم لا؟" #~ msgid "Only Show Free Software" #~ msgstr "إظهار البرمجيات الحرة حصرًا" #~ msgid "Hide proprietary software when searching" #~ msgstr "يخفي البرمجيات المحتكرة عند البحث" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "يرشِّح نتائج البحث لتظهر التطبيقات المتوفرة على فلاتهَب حصرًا" #~ msgid "Debounce Search Inputs" #~ msgstr "تجاهل ارتداد مدخلات البحث" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "يؤخر إظهار النتائج لمنع ظهورها فوريًا أثناء الكتابة" #~ msgid "Global Progress Bar Theme" #~ msgstr "سمة شريط التقدم العامة" #~ msgid "Describes the look of the global progress bar" #~ msgstr "يشرح المظهر العام لشريط التقدم" #~ msgid "Saved Window Dimensions" #~ msgstr "أبعاد النافذة المحفوظة" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "أبعاد النافذة التي ستستخدمها نافذة بازار التالية" #~ msgid "Nucleus app page" #~ msgstr "صفحة تطبيق «Nucleus»" #~ msgid "Manage Addons" #~ msgstr "أدِر الإضافات" #~ msgid "Of the size of human DNA" #~ msgstr "من حجم الحمض الريبي النووي منزوع الأكسجين للإنسان" #~ msgid "3 billion base pairs" #~ msgstr "3 مليارات زوج قاعدي" #~ msgid "Of the Linux Kernel" #~ msgstr "من نواة لينكس" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "من حاسوب توجيه أبولو 11" #~ msgid "Total ROM and RAM" #~ msgstr "إجمالي ذاكرة القراءة والذاكرة العشوائية" #~ msgid "Of the original Super Mario Bros" #~ msgstr "من لعبة «سوبر ماريو بروز» الأصلية" #~ msgid "Of the size of Wikipedia" #~ msgstr "من حجم ويكيبيديا" #~ msgid "Without any media" #~ msgstr "دون أي وسائط" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "هذه الوظيفة معطَّلة حاليًا. ينصح بتنصيب «فلاتسيل» لإدارة أذونات التطبيق." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "أحمد النجماوي" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "João Victor (Leal)" #~ msgstr "João Victor (Leal)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Léane GRASSER" #~ msgstr "Léane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel Mrówka (Microwave)" #~ msgstr "Marcel Mrówka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "camegone" #~ msgstr "camegone" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "Constructing Flatpak instance..." #~ msgstr "تُبنى نسخة فلاتباك..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "يعاد استخدام آخر نسخة فلاتباك..." #~ msgid "Flathub is not registered on this system" #~ msgstr "لم يُسجِّل فلاتهَب على هذا النظام" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "أتود إضافة فلاتهَب كمستودع؟ لن تتوفر صفحة فلاتهَب إن رفضت ذلك. يمكنك تغيير " #~ "ذلك لاحقًا." #~ msgid "Add Flathub" #~ msgstr "أضِف فلاتهَب" #, c-format #~ msgid "Identifying installed entries..." #~ msgstr "يتعرف على المدخلات المنصَّبة..." #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "يبدأ جلب مدخلات المستودع أثناء إحالة %d قائمة حجب..." #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d من %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "ينتظر اكتمال مهام فهرسة الخلفية..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "اكتمل التمهيد خلال %0.2f ثانية" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "لم يُزوَّد بازار بإعدادات محتوى منتقى. تواصل مع قنوات دعم نظام تشغيلك للحصول " #~ "على المساعدة." #~ msgid "Entry Inspector" #~ msgstr "فاحص المدخلات" #~ msgid "Serialize" #~ msgstr "سَلسِل" #~ msgid "Convert to JSON" #~ msgstr "حوِّل إلى JSON" #~ msgid "Graphics" #~ msgstr "رسوميات" #~ msgid "Office" #~ msgstr "مكتب" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "الصفحة الرئيسة" #~ msgid "This flatpak is verified by the original developers of the software." #~ msgstr "وثَّق مطوروا البرمجية فلاتباك هذا." #~ msgid "Repository Star Count" #~ msgstr "نجوم المستودع" #~ msgid "Share this application" #~ msgstr "شارِك هذا التطبيق" #~ msgid "Excludes shared components" #~ msgstr "يستبعد المكونات المشتركة" #~ msgid "Source code may not be available" #~ msgstr "قد لا يتوفر المصدر البرمجي" #~ msgid "Click for details" #~ msgstr "انقر للتفاصيل" #~ msgid "Repositories" #~ msgstr "المستودعات" #~ msgid "Open in browser" #~ msgstr "افتح في المتصفح" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "%'d تنزيل شهري" #~ msgid "%B %-d, %Y" #~ msgstr "%-Od %B، %OY" #~ msgid "%B %-d" #~ msgstr "%-Od %B" #~ msgid "Bazaar Inspector" #~ msgstr "متعقب «بازار»" #~ msgid "Active Blocklists" #~ msgstr "قوائم الحجب النشطة" #~ msgid "Active Curated-Configs" #~ msgstr "ضبط التطبيقات «المنتقاة» النشط" #~ msgid "All Entry Groups" #~ msgstr "جميع مجموعات المدخلات" #~ msgid "Filter..." #~ msgstr "رشِّح..." #~ msgid "Decache and Inspect" #~ msgstr "امحُ الاختزان وافحص" #~ msgid "No Flatpaks Installed" #~ msgstr "لا حزم فلاتباك منصَّبة" #~ msgid "Run this application" #~ msgstr "شغِّل هذا التطبيق" #~ msgid "Run" #~ msgstr "شغِّل" #~ msgid "Application Details" #~ msgstr "تفاصيل التطبيق" #~ msgid "Git Forge Star Counts" #~ msgstr "نجوم مستودع جِت" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "قد يُحدّ وصولك إن لم يكن لديك رمز وصول جِت‌هَب" #~ msgid "Show Only Flathub Apps" #~ msgstr "إظهار تطبيقات فلاتهَب حصرًا" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "ينتظر وهلة لتخفيف حِمل النظام عند البحث" #~ msgid "Theme" #~ msgstr "السمة" #~ msgid "Pride Rainbow Flag" #~ msgstr "علم فخر قوس قزح" #~ msgid "Bisexual Flag" #~ msgstr "علم ازدواج التوجه الجنسي" #~ msgid "Asexual Flag" #~ msgstr "علم اللاجنسية" #~ msgid "Share" #~ msgstr "شارِك" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "نُقِل %s حتى الآن" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "التطبيقات التالية متاحة للتحديث. أتنصبها؟" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "تتوفر تحديثات ل‍ %d من بيئات التشغيل و\\أو الإضافات. أتنصبها؟" #~ msgid "Transactions" #~ msgstr "العمليات" #~ msgid "Toggle transaction sidebar" #~ msgstr "بدِّل الشريط الجانبي للعمليات" #~ msgid "Stop Active Tasks" #~ msgstr "أوقف المهام النشطة" #~ msgid "Clear History" #~ msgstr "امحُ التأريخ" #~ msgid "No Tasks Yet" #~ msgstr "لا توجد مهام حتى الآن" #~ msgid "Browse" #~ msgstr "تصفَّح" #~ msgid "App View" #~ msgstr "منظور التطبيق" #~ msgid "Go Back" #~ msgstr "ارجِع" #~ msgid "View curated applications" #~ msgstr "اعرِض التطبيقات المنتقاة" #~ msgid "View the latest on Flathub" #~ msgstr "اعرِض آخر المستجدات على فلاتهَب" #~ msgid "_Quit Service" #~ msgstr "أ_نهِ الخدمة" #~ msgid "Up to date!" #~ msgstr "مُحدَّث!" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "قابلة فحص وتنصيب ملفات حزم .flatpak قادمة. أثناء ذلك، يمكنك تشغيل\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "في الطرفية." #~ msgid "Settings & user data will be kept" #~ msgstr "ستبقى الإعدادات وبيانات المستخدم مخزَّنة" #~ msgid "Resume Current Tasks" #~ msgstr "استأنف المهام الحالية" #~ msgid "Pause Current Tasks" #~ msgstr "ألبث المهام الحالية" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u تنزيل" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "أعِد التحميل" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "بدِّل مدير المعاملات" #~ msgid "Calligraphy application page" #~ msgstr "صفحة تطبيق «كالِغرَفي»" #~ msgid "Download graph for Blender" #~ msgstr "تنزيل رسم بياني ل‍«بلندر»" #~ msgid "Open this image in the default image viewer" #~ msgstr "افتح هذه الصورة في عارض الصور المبدئي" #~ msgid "Copy this image to the clipboard" #~ msgstr "انسخ هذه الصورة إلى الحافظة" #~ msgid "Download Statistics" #~ msgstr "إحصاءات التنزيل" #~ msgid "Show Downloads Over Time" #~ msgstr "أظهِر التنزيلات عبر الزمن" #~ msgid "Remote repo name" #~ msgstr "اسم المستودع" #~ msgid "Updated Size" #~ msgstr "الحجم المحدَّث" #~ msgid "Freed Space" #~ msgstr "المساحة المفرغة" #~ msgid "Transactions Will Appear Here" #~ msgstr "ستظهر العمليات هنا" #~ msgid "Halt the execution of transactions" #~ msgstr "أوقِف تنفيذ العمليات" #~ msgid "Resume the execution of transactions" #~ msgstr "استَئنف تنفيذ العمليات" #~ msgid "Pause the execution of transactions" #~ msgstr "أوقِف تنفيذ العمليات مؤقتًا" #~ msgid "Apps Of The Week" #~ msgstr "تطبيقات الأسبوع" #, c-format #~ msgid "Released %x" #~ msgstr "أُصدِر في %x" #~ msgid "Downloads Over Time" #~ msgstr "التنزيلات عبر الزمن" #~ msgid "Minimize Lower Bound" #~ msgstr "صغِّر الحد الأدنى" #~ msgid "Maximize Upper Bound" #~ msgstr "كبِّر الحد الأعلى" #~ msgid "Confirm Action" #~ msgstr "تأكيد الإجراء" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "أنت على وشك إزالة حزمة فلاتباك التالية:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "أمتأكد؟" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "أنت على وشك تنصيب حزمة فلاتباك التالية:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "أمتأكد؟" #~ msgctxt "Project URL Type" #~ msgid "VCS Browser" #~ msgstr "المستودع" #~ msgid "Full Application View" #~ msgstr "عرض التطبيق الكامل" #~ msgid "Change what content is shown when viewing applications" #~ msgstr "يغيِّر المحتوى المعروض عند إظهار التطبيقات" #~ msgid "" #~ "If you do not have an access token, turning this setting on may cause " #~ "GitHub to eventually rate limit you." #~ msgstr "" #~ "قد يؤدي تفعيل هذا الإعداد إلى حدِّك من الوصول إلى GitHub إن لم يكن لديك رمز " #~ "وصول." #~ msgid "Type to filter" #~ msgstr "اكتب للترشيح" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "استبعِد النتائج ذات الرخص الاحتكارية" #~ msgid "Advanced" #~ msgstr "متقدم" #~ msgid "Open this link externally" #~ msgstr "افتح هذه الوصلة خارجيًا" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "استُلمت %'d من أصل %'d (انقضت %0.1f ثانية)" #~ msgid "Installing" #~ msgstr "ينصَّب" #~ msgid "Removing" #~ msgstr "يُزال" #~ msgid "Show Animated Background" #~ msgstr "إظهار الخلفية المتحركة" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "أتُعرَض خلفية الأيقونات المتحركة في الصفحة الرئيسة أم لا" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "عدد التنزيلات في آخر 30 يومًا. انقر لعرض إحصائيات تنزيل هذا التطبيق." #~ msgid "How the application looks" #~ msgstr "كيف يبدو التطبيق" #~ msgid "Appearance" #~ msgstr "المظهر" #~ msgid "Show animated background" #~ msgstr "إظهار الخلفية المتحركة" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "أبقِ الملخص مختصرًا، بين 10 و 35 حرفًا" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "نافذة بازار الرئيسية تعرض تطبيق بلندر" #~ msgid "Match using regular expressions" #~ msgstr "طابِق باستخدام التعابير النمطية" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "أخفِ الترشيح والفرز خلف تأثير التلاشي المتداخل" bazaar-org-bazaar-b6e9a65/po/be.po000066400000000000000000003061371522167256300170070ustar00rootroot00000000000000# Belarusian translations for bazaar package. # Copyright (C) 2026 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-03-01 06:45+0100\n" "PO-Revision-Date: 2026-03-01 21:34+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: be\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: Poedit 3.8\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:6 #: src/bz-window.blp:110 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Дадавайце, выдаляйце або абнаўляйце праграмы ў фармаце flatpak на гэтым камп’ютары" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;PackageManager;Discover;Flatpak;Software;Store;Сістэма;ПакетныМенеджар;Пакеты;Магазін;Крама;Флатпак;Праграмы;ПЗ;" #: data/io.github.kolunmi.Bazaar.desktop.in:15 msgid "New Window" msgstr "Новае акно" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Знаходзьце і ўсталёўвайце праграмы" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for Linux with a focus on discovering and installing applications and addons from Flatpak remotes, particularly " "Flathub." msgstr "" "Новая крама праграм для Linux з фокусам на тым, каб адкрываць і ўсталёўваць праграмы і дадаткі з аддаленых сервераў Flatpak (у " "прыватнасці — Flathub)." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. Bazaar features a \"curated\" tab that can be " "configured by distributors to allow for a more localized experience." msgstr "" "Яна робіць акцэнт на падтрымцы распрацоўшчыкаў, якія робяць магчымым Linux для настольных камп’ютараў. Bazaar вылучае ўкладку " "\"падабраныя\" праграмы, якую могуць канфігураваць пастаўшчыкі для больш цэласнага вопыту карыстання дыстрыбутывам." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:699 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home page displaying Flathub apps" msgstr "Галоўная старонка паказвае праграмы з Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Exhibit app page" msgstr "Дэманстрацыйная старонка праграмы" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Library page" msgstr "Старонка бібліятэкі" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Search page" msgstr "Старонка пошуку" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:70 msgid "Category page" msgstr "Старонка катэгорыі" #: src/bz-addons-dialog.blp:16 src/bz-full-view.blp:606 src/bz-installed-tile.blp:101 msgid "Manage Add-Ons" msgstr "Кіраваць дадаткамі" #: src/bz-addons-dialog.c:94 src/bz-install-controls.blp:78 src/bz-install-controls.blp:128 src/bz-installed-tile.blp:119 #: src/bz-transaction-dialog.c:231 msgid "Remove" msgstr "Выдаліць" #: src/bz-addons-dialog.c:99 src/bz-favorites-tile.c:159 src/bz-install-controls.blp:34 src/bz-transaction-dialog.c:202 msgid "Install" msgstr "Усталяваць" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 src/bz-age-rating-dialog.c:726 src/bz-full-view.c:333 #: src/bz-full-view.c:340 msgid "Age Rating" msgstr "Узроставы рэйтынг" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Мультыплікацыйны гвалт" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Няма звестак наконт сцэн гвалту мультыплікацыйнага характару" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Фантазійны гвалт" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Няма звестак наконт сцэн гвалту фантазійнага характару" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Рэалістычны гвалт" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Няма звестак наконт сцэн з рэалістычным гвалтам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Гвалт з кровапраліццем" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Няма звестак наконт сцэн гвалту з кровапраліццем" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Сексуальны гвалт" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Няма звестак наконт сцэн з сексуальным гвалтам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Алкаголь" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Няма звестак наконт згадвання алкагольных напояў" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Наркотыкі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Няма звестак наконт згадвання забароненых наркотыкаў" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Табак" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Няма звестак наконт згадвання тытунёвых вырабаў" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Аголенасць" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Няма звестак наконт сцэн агалення" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Сексуальныя сцэны" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Няма звестак наконт згадванняў або выяў сексуальнага характару" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Нецэнзурная лексіка" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Няма звестак наконт нецэнзурнай лексікі любога кшталту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Недарэчны гумар" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Няма звестак наконт недарэчнага гумару" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Дыскрымінацыя" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Няма звестак наконт моўнай дыскрымінацыі любога кшталту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Рэклама" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Няма звестак наконт рэкламы любога кшталту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Азартныя гульні" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Няма звестак наконт азартных гульняў любога кшталту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Купля за рэальныя грошы" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Няма звестак наконт магчымасці траціць грошы" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Чат паміж карыстальнікамі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Няма звестак наконт магчымасці вядзення размоў у чаце з іншымі карыстальнікамі" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Аўдыячат паміж карыстальнікамі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Няма звестак наконт магчымасці вядзення размоў у аўдыячаце з іншымі карыстальнікамі" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Кантактныя звесткі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "No information regarding sharing of social network usernames or email addresses" msgstr "Няма звестак наконт абагульвання імёнаў карыстальнікаў сацыяльнай сеткі або адрасоў электроннай пошты" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Ідэнфікацыйныя звесткі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Няма звестак наконт перадачы даных карыстальніка староннім асобам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Абагульванне месцазнаходжання" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Няма звестак наконт перадачы фізічнага месцазнаходжання іншым карыстальнікам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Прастытуцыя" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Няма звестак наконт згадвання прастытуцыі" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Сямейная нявернасць" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Няма звестак наконт згадвання сямейнай нявернасці" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Сексуалізаваныя персанажы" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Няма звестак наконт сексуалізаваных персанажаў" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Апаганьванне" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Няма звестак наконт згадванняў пра апаганьванне" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Парэшткі памерлых людзей" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Няма звестак наконт бачных парэшткаў памерлых людзей" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Рабства" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Няма звестак наконт згадвання пра рабства" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Не ўтрымлівае згадванняў пра наркотыкі" #: src/bz-age-rating-dialog.c:426 msgid "Does not include swearing, profanity, and other kinds of strong language" msgstr "Не ўтрымлівае лаянкі, нецэнзурнай і непрыстойнай лексікі" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Не ўтрымлівае рэкламы або грашовых аперацый" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Не ўтрымлівае сцэн сексу або агалення" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Не ўтрымлівае бескантрольных функцый чата" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Не ўтрымлівае сцэн гвалту" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Наркотыкі" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Лаянка" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Грошы" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Сувязь" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Гвалт" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:676 src/bz-full-view.c:323 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:701 msgctxt "Age rating" msgid "All" msgstr "Усе" #: src/bz-age-rating-dialog.c:737 #, c-format msgid "%s has an unknown age rating" msgstr "Узроставы рэйтынг \"%s\" невядомы" #: src/bz-age-rating-dialog.c:743 #, c-format msgid "%s is suitable for everyone" msgstr "\"%s\" прыдатна для ўсіх" #: src/bz-age-rating-dialog.c:746 #, c-format msgid "%s is suitable for young children" msgstr "\"%s\" прыдатна для дзяцей школьнага ўзросту (6+)" #: src/bz-age-rating-dialog.c:749 #, c-format msgid "%s is suitable for children" msgstr "\"%s\" прыдатна для дзяцей школьнага ўзросту (12+)" #: src/bz-age-rating-dialog.c:752 #, c-format msgid "%s is suitable for teenagers" msgstr "\"%s\" прыдатна для дзяцей старэйшага ўзросту (16+)" #: src/bz-age-rating-dialog.c:755 #, c-format msgid "%s is suitable for adults" msgstr "\"%s\" прыдатна для дарослых (18+)" #: src/bz-age-rating-dialog.c:758 #, c-format msgid "%s is suitable for %s" msgstr "\"%s\" прыдатна для %s" #: src/bz-age-rating-dialog.c:852 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-all-apps-page.blp:13 src/bz-apps-page.blp:14 src/bz-full-view.blp:29 src/bz-user-data-page.blp:15 src/bz-window.blp:285 msgid "Main Menu" msgstr "Галоўнае меню" #: src/bz-all-apps-page.blp:18 src/bz-apps-page.blp:18 src/bz-user-data-page.blp:19 src/bz-window.blp:374 msgid "_Donate to Bazaar ❤️" msgstr "Па_дтрымаць Bazaar ❤️" #: src/bz-all-apps-page.blp:25 src/bz-apps-page.blp:25 src/bz-user-data-page.blp:26 src/bz-window.blp:381 msgid "_Refresh" msgstr "_Абнавіць" #: src/bz-all-apps-page.blp:30 src/bz-apps-page.blp:30 src/bz-user-data-page.blp:31 src/bz-window.blp:386 msgid "_Preferences" msgstr "_Параметры" #: src/bz-all-apps-page.blp:35 src/bz-apps-page.blp:35 src/bz-user-data-page.blp:36 src/bz-window.blp:391 msgid "_Login With Flathub" msgstr "_Увайсці праз Flathub" #: src/bz-all-apps-page.blp:41 src/bz-apps-page.blp:41 src/bz-user-data-page.blp:42 src/bz-window.blp:397 msgid "_Manage Leftover User Data" msgstr "_Кіраваць астаткамі даных карыстальніка" #: src/bz-all-apps-page.blp:46 src/bz-apps-page.blp:46 src/bz-user-data-page.blp:47 src/bz-window.blp:402 msgid "_Keyboard Shortcuts" msgstr "_Спалучэнні клавіш" #: src/bz-all-apps-page.blp:51 src/bz-apps-page.blp:51 src/bz-user-data-page.blp:52 src/bz-window.blp:407 msgid "_About Bazaar" msgstr "П_ра Bazaar" #: src/bz-all-apps-page.blp:58 src/bz-apps-page.blp:58 src/bz-user-data-page.blp:59 src/bz-window.blp:414 msgid "_Quit Bazaar" msgstr "_Выйсці з Bazaar" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Сістэмная папка %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Падпапка ў папцы \"Галоўная\" %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Папкі сістэмы-хоста" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Канфігурацыя сістэмы-хоста з /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Падпапка ў папцы працоўнага стала %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Папка працоўнага стала" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Падпапка ў папцы \"Дакументы\" %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Папка \"Дакументы\"" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Падпапка ў папцы \"Музыка\" %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Папка \"Музыка\"" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Падпапка ў папцы \"Відарысы\" %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Папка \"Відарысы\"" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Падпапка ў папцы \"Публічныя файлы\" %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Папка \"Публічныя файлы\"" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Падпапка \"Відэа\" %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Папка \"Відэа\"" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Падпапка \"Шаблоны\" %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Папка \"Шаблоны\"" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Падпапка з кэшам карыстальніка %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Папка з кэшам карыстальніка" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Падпапка ў папцы канфігурацыі карыстальніка %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Папка канфігурацыі карыстальніка" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Падпапка ў папцы даных карыстальніка %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Папка даных карыстальніка" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Падпапка ў папцы карыстальніцкага асяроддзя выканання %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Папка карыстальніцкага асяроддзя выканання" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Доступ файлавай сістэмы да %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Невядомы шлях у файлавай сістэме" #: src/bz-app-size-dialog.blp:29 src/bz-app-size-dialog.blp:55 msgid "Download Size" msgstr "Памер спампоўвання" #: src/bz-app-size-dialog.blp:56 msgid "Amount to download from the internet" msgstr "Па даных да спампоўвання з інтэрнэту" #: src/bz-app-size-dialog.blp:76 msgid "Installed Size" msgstr "Памер усталёўкі" #: src/bz-app-size-dialog.blp:77 msgid "Size on Disk" msgstr "Памер на дыску" #: src/bz-app-size-dialog.blp:125 msgid "Open user data folder" msgstr "Адкрыць папку даных карыстальніка" #: src/bz-app-size-dialog.blp:135 msgid "User Data Size" msgstr "Памер даных карыстальніка" #: src/bz-app-size-dialog.blp:136 msgid "Caches, settings, and other app data" msgstr "Кэш, налады і іншыя даныя праграм" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Памер усталяванага асяроддзя выканання" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Памер спрампаванага асяроддзя выканання" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 src/bz-rich-app-tile.blp:103 src/bz-rich-app-tile.c:275 msgid "Verified" msgstr "Спраўджана" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:89 src/bz-full-view.c:282 src/bz-releases-list.c:178 msgid "Installed" msgstr "Усталявана" #: src/bz-apps-page.blp:141 msgid "Show All" msgstr "Паказаць усё" #: src/bz-apps-page.c:229 #, c-format msgid "All \"%s\"" msgstr "Усё \"%s\"" #: src/bz-apps-page.c:498 src/bz-tag-list.c:109 #, c-format msgid "%d Applications" msgstr "Колькасць праграм: %d" #: src/bz-application.c:678 #, fuzzy msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:679 #, fuzzy msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:702 msgid "translator-credits" msgstr "Аляксандр Клюеў , 2026" #: src/bz-application.c:712 msgid "Special Thanks" msgstr "Асаблівая падзяка" #: src/bz-application.c:770 msgid "Logged Out Successfully!" msgstr "Выхад выкананы!" #: src/bz-application.c:893 msgid "Performing setup…" msgstr "Выконваецца наладжванне…" #: src/bz-application.c:977 msgid "Set Up System Flathub?" msgstr "Наладзіць Flathub на ўзроўні сістэмы?" #: src/bz-application.c:980 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be configured on the system Flatpak installation to browse " "and install applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Аддалены сервер Flathub не наладжаны для гэтай сістэмы. Для прагляду і ўсталёўвання праграм, Bazaar патрабуе канфігурацыі Flathub " "у сістэмнай ўсталёўцы Flatpak.\n" "\n" "Вы ўсё яшчэ зможаце выкарыстоўваць Bazaar для прагляду і выдалення ўжо ўсталяваных праграм." #: src/bz-application.c:987 msgid "Set Up Flathub?" msgstr "Наладзіць Flathub?" #: src/bz-application.c:990 msgid "" "Flathub is not set up on this system. You will not be able to browse and install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub не наладжаны для гэтай сістэмы. Вы не зможаце праглядаць і ўсталёўваць праграм у Bazaar, калі гэты сервіс не будзе " "даступны.\n" "\n" "Вы ўсё яшчэ зможаце выкарыстоўваць Bazaar для прагляду і выдалення ўжо ўсталяваных праграм." #: src/bz-application.c:996 msgid "Later" msgstr "Пазней" #: src/bz-application.c:997 msgid "Set Up Flathub" msgstr "Наладзіць Flathub" #: src/bz-application.c:1280 msgid "A backend error occurred" msgstr "Адбылася памылка на сервернай частцы" #: src/bz-application.c:1406 src/bz-application.c:3178 src/bz-window.blp:134 msgid "Refreshing…" msgstr "Ідзе абнаўленне…" #: src/bz-application.c:1552 src/bz-application.c:3176 #, c-format msgid "Loading %d apps…" msgstr "Ідзе загрузка праграм (%d)…" #: src/bz-application.c:1556 msgid "Checking for updates…" msgstr "Ідзе праверка абнаўленняў…" #: src/bz-application.c:1612 msgid "Failed to open .flatpakref" msgstr "Не ўдалося адкрыць .flatpakref" #: src/bz-application.c:1666 msgid "An initialization error occurred" msgstr "Адбылася памылка ініцыялізацыі" #: src/bz-application.c:2004 msgid "Failed to check for updates" msgstr "Не ўдалося праверыць абнаўленні" #: src/bz-application.c:2961 msgid "Could not find app" msgstr "Не ўдалося знайсці праграму" #: src/bz-application.c:3180 msgid "Writing to cache…" msgstr "Ідзе запіс у кэш…" #: src/bz-appstream-parser.c:304 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Старонка Flathub" #: src/bz-appstream-parser.c:325 msgctxt "Project URL Type" msgid "Project Website" msgstr "Вэб-сайт праекта" #: src/bz-appstream-parser.c:329 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Трэкер памылак" #: src/bz-appstream-parser.c:333 msgctxt "Project URL Type" msgid "FAQ" msgstr "Пытанні і адказы" #: src/bz-appstream-parser.c:337 msgctxt "Project URL Type" msgid "Help" msgstr "Даведка" #: src/bz-appstream-parser.c:341 msgctxt "Project URL Type" msgid "Donate" msgstr "Ахвяраваць" #: src/bz-appstream-parser.c:347 msgctxt "Project URL Type" msgid "Translate" msgstr "Перакласці" #: src/bz-appstream-parser.c:351 msgctxt "Project URL Type" msgid "Contact" msgstr "Звязацца" #: src/bz-appstream-parser.c:355 msgctxt "Project URL Type" msgid "Source Code" msgstr "Зыходны код" #: src/bz-appstream-parser.c:361 msgctxt "Project URL Type" msgid "Contribute" msgstr "Зрабіць унёсак" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:68 src/bz-flathub-page.blp:19 src/bz-full-view.blp:61 #: src/bz-library-page.blp:65 src/bz-user-data-page.blp:86 msgid "Empty" msgstr "Пуста" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Няма падборкі" #: src/bz-curated-view.blp:16 msgid "There is no curation information provided on this system. You can still browse applications on Flathub" msgstr "На гэтай сістэме не падаецца інфармацыі адносна падабраных праграм. Вы ўсё яшчэ можаце праглядаць праграмы ў Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Праглядзець Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Па-за сеткай" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Вэб-браўзер" #: src/bz-developer-badge.c:92 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Не спраўджана" #: src/bz-developer-badge.c:145 msgid "Developer information not available." msgstr "Звесткі пра распрацоўшчыка недаступныя." #: src/bz-developer-badge.c:151 src/bz-developer-badge.c:165 #, c-format msgid "The ownership of the %s app ID has not been verified and it may be a community package." msgstr "Правы ўласнасці для ідэнтыфікатара праграмы \"%s\" не спраўджаны, таму, імаверна, гэта пакет ад супольнасці." #: src/bz-developer-badge.c:169 #, c-format msgid "The ownership of the %s app ID has been manually verified by the Flathub team." msgstr "Правы ўласнасці для ідэнтыфікатара праграмы \"%s\" былі спраўджаны ўручную камандай Flathub." #: src/bz-developer-badge.c:175 #, c-format msgid "The ownership of the %1$s app ID has been verified by %2$s on %3$s." msgstr "Правы ўласнасці для ідэнтыфікатара праграмы \"%1$s\" былі спраўджаны %2$s %3$s." #: src/bz-developer-badge.c:182 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Правы ўласнасці для ідэнтыфікатара праграмы \"%1$s\" былі спраўджаны з дапамогай %2$s." #: src/bz-developer-badge.c:186 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Правы ўласнасці для ідэнтыфікатара праграмы \"%s\" былі спраўджаны." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Поўныя нататкі да выпуску" #: src/bz-donations-dialog.blp:105 msgid "This release was made possible by users like you!" msgstr "Гэты выпуск Bazaar стаў магчымым дзякуючы такім людзям, як вы!" #: src/bz-donations-dialog.blp:113 msgid "I love making Bazaar, but I cannot do it alone. Help support further development by donating on Ko-Fi." msgstr "" "Мне падабаецца ствараць Bazaar, але я не магу рабіць гэта ўадзіночку. Падтрымайце развіццё праекта ў будучыні, пакінуўшы " "ахвяраванне на старонцы Ko-Fi." #: src/bz-donations-dialog.blp:128 msgid "Donate to Bazaar" msgstr "Падтрымаць Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Што новага ў версіі %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Выпушчана %e %B %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Выберыце ўсталёўку" #: src/bz-entry-group-util.c:76 msgid "You have multiple versions of this app installed. Which one would you like to proceed with?" msgstr "У вас усталявана некалькі версій гэтай праграмы. Якую з іх вы хацелі бы пакінуць на будучыню?" #: src/bz-entry-group-util.c:80 src/bz-transaction-dialog.c:201 src/bz-transaction-dialog.c:230 src/bz-transaction-dialog.c:275 #: src/bz-transaction-dialog.c:578 msgid "Cancel" msgstr "Скасаваць" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Толькі для гэтага карыстальніка" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "гэты карыстальнік" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "усе карыстальнікі" #: src/bz-error.c:69 src/bz-error.c:88 src/bz-error-dialog.blp:36 src/bz-safety-dialog.blp:50 msgid "Details" msgstr "Падрабязныя звесткі" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Скапіяваць" #: src/bz-error-dialog.c:56 src/bz-share-list.c:64 msgid "Copied!" msgstr "Скапіявана!" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Не ўдалося абнавіць спіс упадабаных" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Увайдзіце ў Flathub, каб кіраваць абранымі" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Увайсці" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Колькасць упадабанняў" #: src/bz-favorites-tile.c:157 src/bz-rich-app-tile.blp:171 msgid "Uninstall" msgstr "Выдаліць" #: src/bz-favorites-tile.c:357 msgid "Failed to remove favorite" msgstr "Не ўдалося выдаліць з упадабаных" #: src/bz-favorites-tile.blp:70 src/bz-installed-tile.blp:77 msgid "Support This Application" msgstr "Падтрымаць гэту праграму" #: src/bz-favorites-tile.blp:119 msgid "Remove From Favorites" msgstr "Выдаліць з упадабаных" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:78 src/bz-window.blp:432 msgid "Favorites" msgstr "Упадабаныя" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 src/bz-transaction-dialog.c:579 msgid "Install All" msgstr "Усталяваць усе" #: src/bz-favorites-page.blp:34 src/bz-full-view.blp:44 src/bz-window.blp:301 msgid "Open App Library" msgstr "Адкрыць бібліятэку праграм" #: src/bz-favorites-page.blp:56 src/bz-user-data-page.blp:75 msgid "Loading" msgstr "Ідзе загрузка" #: src/bz-favorites-page.blp:71 msgid "No Favorites" msgstr "Няма ўпадабаных" #: src/bz-favorites-page.blp:72 msgid "Applications you mark as favorite will appear here" msgstr "Тут будуць паказвацца праграмы, якія вы пазначылі як упадабаныя" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Папярэдняя" #: src/bz-featured-carousel.blp:53 msgid "Next" msgstr "Наступная" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "Праграмы дня" #: src/bz-flathub-category.c:89 msgid "Editing" msgstr "Рэдагаванне" #: src/bz-flathub-category.c:90 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:91 msgid "Mixer" msgstr "Мікшар" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:92 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Музыка" #: src/bz-flathub-category.c:93 msgid "Player" msgstr "Прайгравальнік" #: src/bz-flathub-category.c:94 msgid "Recorder" msgstr "Праграма запісу гуку" #: src/bz-flathub-category.c:95 msgid "Sequencer" msgstr "Секвенсар" #: src/bz-flathub-category.c:96 msgid "Tuner" msgstr "Цюнер" #: src/bz-flathub-category.c:97 msgid "TV" msgstr "Тэлебачанне" #: src/bz-flathub-category.c:102 msgid "Emulation" msgstr "Эмуляцыя" #: src/bz-flathub-category.c:103 msgid "Action" msgstr "Экшн" #: src/bz-flathub-category.c:104 msgid "Adventure" msgstr "Прыгоды" #: src/bz-flathub-category.c:105 msgid "Arcade" msgstr "Аркады" #: src/bz-flathub-category.c:106 msgid "Blocks" msgstr "Блокі" #: src/bz-flathub-category.c:107 msgid "Board" msgstr "Настольныя" #: src/bz-flathub-category.c:108 msgid "Card" msgstr "Картачныя" #: src/bz-flathub-category.c:109 msgid "Kids" msgstr "Для дзяцей" #: src/bz-flathub-category.c:110 msgid "Logic" msgstr "На логіку" #: src/bz-flathub-category.c:111 msgid "Role Playing" msgstr "Ролевыя" #: src/bz-flathub-category.c:112 msgid "Shooter" msgstr "Шутары" #: src/bz-flathub-category.c:113 msgid "Simulation" msgstr "Сімулятары" #: src/bz-flathub-category.c:114 msgid "Sports" msgstr "Спорт" #: src/bz-flathub-category.c:115 msgid "Strategy" msgstr "Стратэгіі" #: src/bz-flathub-category.c:120 msgid "Audio & Video" msgstr "Аўдыя і відэа" #: src/bz-flathub-category.c:120 msgid "Media" msgstr "Мультымедыя" #: src/bz-flathub-category.c:120 msgid "More Audio & Video" msgstr "Больш аўдыя і відэа" #: src/bz-flathub-category.c:121 msgid "Developer Tools" msgstr "Інструменты распрацоўшчыка" #: src/bz-flathub-category.c:121 msgid "Develop" msgstr "Распрацоўка" #: src/bz-flathub-category.c:121 msgid "More Developer Tools" msgstr "Больш інструментаў распрацоўшчыка" #: src/bz-flathub-category.c:122 msgid "Education" msgstr "Адукацыя" #: src/bz-flathub-category.c:122 msgid "Learn" msgstr "Навучанне" #: src/bz-flathub-category.c:122 msgid "More Education" msgstr "Больш з адукацыі" #: src/bz-flathub-category.c:123 msgid "Gaming" msgstr "Гульні" #: src/bz-flathub-category.c:123 msgid "Play" msgstr "Гуляць" #: src/bz-flathub-category.c:123 msgid "More Gaming" msgstr "Больш гульняў" #: src/bz-flathub-category.c:124 msgid "Graphics & Photography" msgstr "Графіка і фатаграфія" #: src/bz-flathub-category.c:124 msgid "Create" msgstr "Творчасць" #: src/bz-flathub-category.c:124 msgid "More Graphics & Photography" msgstr "Больш графікі і фатаграфіі" #: src/bz-flathub-category.c:125 msgid "Networking" msgstr "Сеткі" #: src/bz-flathub-category.c:125 msgid "Internet" msgstr "Інтэрнэт" #: src/bz-flathub-category.c:125 msgid "More Networking" msgstr "Больш сеткавага" #: src/bz-flathub-category.c:126 msgid "Productivity" msgstr "Прадукцыйнасць" #: src/bz-flathub-category.c:126 msgid "Work" msgstr "Для працы" #: src/bz-flathub-category.c:126 msgid "More Productivity" msgstr "Больш для прадукцыйнасці" #: src/bz-flathub-category.c:127 msgid "Science" msgstr "Навука" #: src/bz-flathub-category.c:127 msgid "More Science" msgstr "Больш навуковага" #: src/bz-flathub-category.c:128 msgid "System" msgstr "Сістэмнае" #: src/bz-flathub-category.c:128 msgid "More System" msgstr "Больш сістэмнага" #: src/bz-flathub-category.c:129 msgid "Utilities" msgstr "Утыліты" #: src/bz-flathub-category.c:129 msgid "Tools" msgstr "Інструменты" #: src/bz-flathub-category.c:129 msgid "More Utilities" msgstr "Больш утыліт" #: src/bz-flathub-category.c:130 src/bz-flathub-page.blp:118 src/bz-flathub-page.blp:151 msgid "Trending" msgstr "У трэндзе" #: src/bz-flathub-category.c:130 msgid "More Trending" msgstr "Больш у трэндзе" #: src/bz-flathub-category.c:131 src/bz-flathub-page.blp:124 src/bz-flathub-page.blp:181 msgid "Popular" msgstr "Папулярныя" #: src/bz-flathub-category.c:131 msgid "More Popular" msgstr "Больш папулярных" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:171 msgid "Recently Added" msgstr "Нядаўна дададзеныя" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:130 msgid "New" msgstr "Новыя" #: src/bz-flathub-category.c:132 msgid "More New" msgstr "Больш новых" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:161 msgid "Recently Updated" msgstr "Нядаўна абноўленыя" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:136 msgid "Updated" msgstr "Абноўленыя" #: src/bz-flathub-category.c:133 msgid "More Updated" msgstr "Больш абноўленых" #: src/bz-flathub-category.c:134 msgid "Mobile" msgstr "Мабільныя" #: src/bz-flathub-category.c:134 msgid "More Mobile" msgstr "Больш мабільных" #: src/bz-flathub-category.c:135 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:135 msgid "More Adwaita" msgstr "Больш з тэмай Adwaita" #: src/bz-flathub-category.c:136 msgid "KDE Apps" msgstr "Праграмы KDE" #: src/bz-flathub-category.c:136 msgid "More KDE Apps" msgstr "Больш праграм KDE" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub не дададзены" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Аддалены сервер Flathub не быў знойдзены на якой-небудзь з вашых усталёвак Flatpak" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "Flathub вярнуў памылку" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "Паўтарыце спробу злучэння з Flathub" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "Flathub не даступны" #: src/bz-flathub-page.blp:58 msgid "We could not connect to Flathub. You can still manage and search for applications." msgstr "Не атрымалася падключыцца да Flathub. Вы ўсё яшчэ можаце кіраваць праграмамі і шукаць іх." #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "Шукаць праграмы" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "На хаду" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Праграмы для вашых тэлефонаў і планшэтаў на Linux" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Больш мабільных праграм" #: src/bz-flathub-page.blp:377 msgid "We​ ♥​ Games" msgstr "Мы​ ♥​ гульні" #: src/bz-flathub-page.blp:390 msgid "Games and apps to run your favorite titles" msgstr "Гульні і праграмы для запуску вашых любімых гульняў" #: src/bz-flathub-page.blp:424 msgid "More Games" msgstr "Больш гульняў" #: src/bz-full-view.blp:65 src/bz-library-page.blp:76 src/bz-library-page.blp:80 msgid "No Results" msgstr "Нічога не знойдзена" #: src/bz-full-view.blp:66 msgid "Try a different search query" msgstr "Паспрабуйце іншы запыт" #: src/bz-full-view.blp:72 msgid "Content" msgstr "Змесціва" #: src/bz-full-view.blp:130 msgid "Installing .flatpak bundles is not yet supported" msgstr "Усталяванне .flatpak-набораў яшчэ не падтрымліваецца" #: src/bz-full-view.blp:234 msgid "Support" msgstr "Падтрымаць" #: src/bz-full-view.blp:404 msgid "Downloads/Month" msgstr "Спампоўванняў у месяц" #: src/bz-full-view.blp:440 msgid "Stopped Receiving Core Updates" msgstr "Атрыманне абнаўленняў ядра спынена" #: src/bz-full-view.blp:454 msgid "This app uses a runtime that no longer receives updates or security fixes. It may become unsafe to use." msgstr "" "Асяроддзе выканання гэтай праграмы больш не атрымлівае абнаўленняў і выпраўленняў, звязаных з бяспекай. Праграма можа стаць " "небяспечнай для выкарыстання." #: src/bz-full-view.blp:541 msgid "Trash Data" msgstr "Смеццевыя даныя" #: src/bz-full-view.blp:682 msgid "Tags:" msgstr "Цэтлікі:" #: src/bz-full-view.c:215 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:222 #, c-format msgid "%.*fM" msgstr "%.*f млн." #. Translators: K is the suffix for thousands #: src/bz-full-view.c:229 #, c-format msgid "%.*fK" msgstr "%.*f тыс." #: src/bz-full-view.c:239 #, c-format msgid "%d downloads in the last 30 days" msgstr "Спампоўванняў за апошнія 30 дзён: %d" #: src/bz-full-view.c:251 src/bz-full-view.c:592 src/bz-full-view.c:609 msgid "N/A" msgstr "N/A" #: src/bz-full-view.c:279 #, c-format msgid "+%s runtime" msgstr "+%s асяроддзе выканання" #: src/bz-full-view.c:282 msgid "Download" msgstr "Спампаваць" #: src/bz-full-view.c:302 msgid "Size information unavailable" msgstr "Інфармацыя пра памер недаступна" #: src/bz-full-view.c:305 #, c-format msgid "Download size of %s" msgstr "Памер спампоўвання для %s" #: src/bz-full-view.c:338 msgid "All Ages" msgstr "Для ўсіх узростаў" #: src/bz-full-view.c:350 msgid "Age rating information unavailable" msgstr "Інфармацыя пра ўзроставы рэйтынг недаступна" #: src/bz-full-view.c:355 msgid "Suitable for all ages" msgstr "Пасуе для ўсіх узростаў" #: src/bz-full-view.c:357 #, c-format msgid "Suitable for ages %d and up" msgstr "Пасуе для ўсіх узростаў ад %d гадоў" #: src/bz-full-view.c:390 src/bz-full-view.c:395 src/bz-full-view.c:423 src/bz-full-view.c:434 msgid "Unknown" msgstr "Невядомы" #: src/bz-full-view.c:400 #, c-format msgid "Free software licensed under %s" msgstr "Свабоднае ПЗ пад ліцэнзіяй %s" #: src/bz-full-view.c:405 msgid "Free software" msgstr "Свабоднае ПЗ" #: src/bz-full-view.c:408 msgid "Proprietary Software" msgstr "Прапрыетарнае ПЗ" #: src/bz-full-view.c:411 #, c-format msgid "Special License: %s" msgstr "Спецыяльная ліцэнзія: %s" #: src/bz-full-view.c:428 msgid "Free" msgstr "Вольная" #: src/bz-full-view.c:431 src/bz-license-dialog.c:132 msgid "Proprietary" msgstr "Прапрыетарная" #: src/bz-full-view.c:436 src/bz-license-dialog.c:134 msgid "Special License" msgstr "Спецыяльная ліцэнзія" #: src/bz-full-view.c:456 msgid "Adaptive" msgstr "Адаптыўная" #: src/bz-full-view.c:456 msgid "Desktop Only" msgstr "Толькі для настольных камп’ютараў" #: src/bz-full-view.c:462 msgid "Works on desktop, tablets, and phones" msgstr "Працуе на настольных камп’ютарах, планшэтах і тэлефонах" #: src/bz-full-view.c:463 msgid "May not work on mobile devices" msgstr "Можа не працаваць на мабільных прыладах" #: src/bz-full-view.c:474 msgid "No URL" msgstr "Няма URL-адраса" #: src/bz-full-view.c:492 msgid "This application has a FLOSS license, meaning the source code can be audited for safety." msgstr "" "Гэта праграма мае FLOSS-ліцэнзію (свабоднае ПЗ з адкрытым зыходным кодам). Гэта азначае, што магчымы аўдыт бяспекі для зыходнага " "кода праграмы." #: src/bz-full-view.c:493 msgid "" "This application has a proprietary license, meaning the source code is developed privately and cannot be audited by an " "independent third party." msgstr "" "Ліцэнзія гэтай праграмы — прапрыетарная. Гэта азначае, што зыходны код праграмы распрацоўваецца прыватна, а незалежны аўдыт для " "яго немагчымы." #: src/bz-full-view.c:500 msgid "More Apps" msgstr "Больш праграм" #: src/bz-full-view.c:501 #, c-format msgid "More Apps by %s" msgstr "Боль праграм ад %s" #: src/bz-full-view.c:508 msgid "Other Apps by this Developer" msgstr "Іншыя праграмы ад гэтага распрацоўшчыка" #: src/bz-full-view.c:510 src/bz-full-view.c:700 #, c-format msgid "Other Apps by %s" msgstr "Іншыя праграмы ад %s" #: src/bz-full-view.c:519 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "Праграма \"%s\" не ўсталявана, але на прыладзе ўсё яшчэ застаецца %s звязаных з ёю даных." #: src/bz-full-view.c:599 src/bz-safety-dialog.blp:31 msgid "Safe" msgstr "Бяспечная" #: src/bz-full-view.c:601 src/bz-full-view.c:603 msgid "Low Risk" msgstr "Нізкая рызыка" #: src/bz-full-view.c:605 msgid "Medium Risk" msgstr "Сярэдняя рызыка" #: src/bz-full-view.c:607 msgid "High Risk" msgstr "Высокая рызыка" #: src/bz-full-view.c:702 msgid "Other Apps" msgstr "Іншыя праграмы" #: src/bz-full-view.c:704 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d праграма" msgstr[1] "%d праграмы" msgstr[2] "%d праграм" #: src/bz-full-view.c:931 src/bz-transaction-tile.c:340 msgid "Failed to launch application" msgstr "Не ўдалося запусціць праграму" #: src/bz-full-view.c:996 msgid "Show Less" msgstr "Паказаць менш" #: src/bz-full-view.c:996 msgid "Show More" msgstr "Паказаць больш" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Падтрымка абсталявання" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Падтрымка клавіятур" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Патрабуюцца клавіятуры" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Рэкамендуецца ўжыванне клавіятур" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Клавіятуры падтрымліваюцца" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Няма звестак пра падтрымку клавіятур" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Падтрымка мышы" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Патрабуецца мыш або ўказальныя прылады" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Рэкамендуецца ўжыванне мышы або ўказальных прылад" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Мыш або ўказальныя прылады падтрымліваюцца" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Няма звестак пра падтрымку мышы або ўказальных прылад" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Падтрымка сэнсарнага экрана" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Патрэбны сэнсарны экран" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Рэкамендуецца ўжыванне сэнсарнага экрана" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Сэнсарныя экраны падтрымліваюцца" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Невядома пра падтрымку сэнсарных экранаў" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Мабільныя прылад" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Працуе на мабільных прыладах" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Можа працаваць не лепшым чынам на мабільных прыладах" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Падтрымка стацыянарных прылад" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Добра працуе на вялікіх экранах" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s працуе на асаблівым абсталяванні" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s працуе на большасці прылад" #: src/bz-install-controls.blp:32 msgid "Download & Install Application" msgstr "Спампаваць і ўсталяваць праграму" #: src/bz-install-controls.blp:54 msgid "Open" msgstr "Адкрыць" #: src/bz-install-controls.blp:68 src/bz-install-controls.blp:118 msgid "Uninstall Application" msgstr "Выдаліць праграму" #: src/bz-install-controls.blp:105 src/bz-updates-card.blp:161 src/bz-updates-card.blp:186 msgid "Update" msgstr "Абнавіць" #: src/bz-install-controls.blp:155 msgid "Install Other Version" msgstr "Усталяваць іншую версію" #: src/bz-installed-tile.blp:63 src/bz-rich-app-tile.blp:139 msgid "Stopped Receiving Updates" msgstr "Спынена атрыманне абнаўленняў" #: src/bz-library-page.blp:31 msgid "Search installed apps" msgstr "Пошук усталяваных праграм" #: src/bz-library-page.blp:48 msgid "Clear search" msgstr "Ачысціць пошук" #: src/bz-library-page.blp:69 msgid "No Apps Found" msgstr "Праграм не знойдзена" #. Translators: . #: src/bz-library-page.blp:98 src/bz-window.blp:176 msgid "Library" msgstr "Бібліятэка" #: src/bz-library-page.blp:126 msgid "Pending Updates" msgstr "Абнаўленні ў чаканні" #: src/bz-library-page.blp:153 msgid "Downloads" msgstr "Спампоўкі" #: src/bz-library-page.blp:196 msgid "Recently Uninstalled" msgstr "Нядаўна выдаленае" #: src/bz-library-page.blp:247 msgid "Clear Finished Tasks" msgstr "Ачысціць завершаныя задачы" #: src/bz-library-page.blp:258 msgid "Installed Apps" msgstr "Усталяваныя праграмы" #: src/bz-library-page.c:175 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "У спісе ўсталяваных праграм нічога не знойдзена для запыту \"%s\"" #: src/bz-library-page.c:188 src/bz-updates-card.c:257 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "Даступна %u абнаўленне" msgstr[1] "Даступна %u абнаўленні" msgstr[2] "Даступна %u абнаўленняў" #: src/bz-license-dialog.blp:95 msgid "Get Involved" msgstr "Прыняць удзел" #: src/bz-license-dialog.c:126 msgid "Unknown License" msgstr "Невядомая ліцэнзія" #: src/bz-license-dialog.c:129 msgid "Community Built" msgstr "Зборка ад супольнасці" #: src/bz-license-dialog.c:202 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Гэта праграма распрацоўваецца адкрытай міжнароднай супольнасцю.\n" "\n" "Вы можаце прыняць удзел у распрацоўцы і дапамагчы палепшыць яе." #: src/bz-license-dialog.c:205 msgid "The license of this app is not known" msgstr "Ліцэнзія для гэтай праграмы невядомая" #: src/bz-license-dialog.c:211 #, c-format msgid "" "This app is developed in the open by an international community, and released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Гэта праграма распрацоўваецца адкрытай міжнароднай супольнасцю і распаўсюджваецца пад ліцэнзіяй %s.\n" "\n" "Вы можаце прыняць удзел у распрацоўцы і дапамагчы палепшыць яе." #: src/bz-license-dialog.c:219 msgid "" "This app is not developed in the open, so only its developers know how it works. It may be insecure in ways that are hard to " "detect, and it may change without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Гэта праграма распрацоўваецца закрытым чынам, таму толькі яе стваральнікі ведаюць, як яна працуе. Гэта можа несці з сабой " "небяспеку, якую цяжка выявіць, а сама праграма можа змяняцца без нагляду.\n" "\n" "У вас можа як быць, так і не быць магчымасці ўдзелу ў распрацоўцы гэтай праграмы." #: src/bz-license-dialog.c:225 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Гэта праграма распрацоўваецца пад спецыяльнай ліцэнзіяй %s.\n" "\n" "Вы не зможаце прыняць удзелу ў яе распрацоўцы." #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 msgid "Connect to Flathub" msgstr "Злучыцца з Flathub" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "Нешта пайшло не так" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "Падключыце свой уліковы запіс Flathub да Bazaar, каб кіраваць сваімі праграмамі ў спісе абраных." #: src/bz-login-page.blp:108 msgid "Finish" msgstr "Скончыць" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "Вітаем, %s!" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Параметры" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "Падключэнне да сеткі з падлікам трафіка — аўтаматычная сінхранізацыя даных крамы прыпынена" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:328 msgid "Refresh Manually" msgstr "Сінхранізаваць уручную" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Фільтры змесціва" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Толькі свабоднае праграмнае забеспячэ" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Схаваць падчас прагляду і пошуку прапрыетарныя праграмы" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Толькі вынікі з Flathub" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to applications only available on Flathub" msgstr "Абмежаваць пошук і прагляд вынікаў праграмамі, якія даступныя толькі на Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Толькі спраўджаныя вынікі" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Схаваць вынікі, якія не спраўджаны на Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide EOL Apps" msgstr "Схаваць праграмы напрыканцы тэрміну службы" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Схаваць праграмы, якія больш не падтрымліваюцца іх распрацоўшчыкамі" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:191 msgid "Search" msgstr "Пошук" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "Адкладваць паказванне вынікаў пошуку" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "Палепшыце якасць пошуку з прадухіленнем пошуку памылковых значэнняў" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "Індыкатар выканання" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "Выберыце тэму індыкатара выканання!" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "Вертыкальныя палосы" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "Паказваць колеры сцяга злева направа" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Колер акцэнту" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Колеры гонару" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Колеры гонару — лесбіянкі" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Колеры гонару — мужчыны гомасексуалы" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Колеры гонару — трансгендары" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Колеры гонару — небінарныя асобы" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Колеры гонару — бісексуалы" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Колеры гонару — асексуалы" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Колеры гонару — пансексуалы" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Колеры гонару — арамантычныя асобы" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Колеры гонару — гендарфлюідныя асобы" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Колеры гонару — полісексуальныя асобы" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Колеры гонару — омнісексуальныя асобы" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Колеры гонару — арамантычныя асексуальныя асобы" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Колеры гонару — агендарныя асобы" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Колеры гонару — гендарквіры" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Колеры гонару — інтэрсексуалы" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Колеры гонару — дэмігендарныя асобы" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Колеры гонару — бірамантычныя асобы" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Колеры гонару — асобы з асаблівымі патрэбамі" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Колеры гонару — фембоі" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Колеры гонару — пазагендарныя асобы" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:28 src/bz-updates-card.blp:150 msgid "Version History" msgstr "Гісторыя версій" #. Translators: This is a date format for timestamps from the current year. Used in the app releases section. #. * %B is the full month name, %e is the day. #. * Example: "October 1" #. * See https://docs.gtk.org/glib/method.DateTime.format.html for format options #. * Please modify to make it sound natural in your locale. #. * #: src/bz-releases-list.c:121 msgid "%e %B" msgstr "%e %B" #. Translators: This is a date format for timestamps from previous years. Used in the app releases section. #. * %B is the full month name, %e is the day, %Y is the year. #. * Example: "October 1, 2025" #. * See https://docs.gtk.org/glib/method.DateTime.format.html for format options #. * Please modify to make it sound natural in your locale. #. * #: src/bz-releases-list.c:129 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:168 #, c-format msgid "Version %s" msgstr "Версія %s" #: src/bz-releases-list.c:220 msgid "No details for this release" msgstr "Пра гэта выданне няма звестак" #: src/bz-releases-list.c:232 msgid "Get More Information" msgstr "Атрымаць больш інфармацыі" #: src/bz-rich-app-tile.blp:156 msgid "Get" msgstr "Атрымаць" #: src/bz-safety-calculator.c:82 msgid "Unknown Permissions" msgstr "Дазволы невядомыя" #: src/bz-safety-calculator.c:83 msgid "Permissions are missing for this app." msgstr "Не хапае дазволаў для гэтай праграмы." #: src/bz-safety-calculator.c:96 msgid "No Permissions" msgstr "Не патрабуе дазволаў" #: src/bz-safety-calculator.c:97 msgid "App is fully sandboxed" msgstr "Праграма цалкам выконваецца ў «пясочніцы»" #: src/bz-safety-calculator.c:103 msgid "Network Access" msgstr "Доступ да сеткі" #: src/bz-safety-calculator.c:104 msgid "Can access the internet" msgstr "Мае доступ да інтэрнэту" #: src/bz-safety-calculator.c:106 msgid "No Network Access" msgstr "Без доступу да сеткі" #: src/bz-safety-calculator.c:107 msgid "Cannot access the internet" msgstr "Не мае доступу да інтэрнэту" #: src/bz-safety-calculator.c:112 msgid "User Device Access" msgstr "Доступ да прылад карыстальніка" #: src/bz-safety-calculator.c:113 msgid "Can access devices such as webcams or gaming controllers" msgstr "Мае доступ да прылад накшталт вэб-камер або гульнявых кантролераў" #: src/bz-safety-calculator.c:115 msgid "No User Device Access" msgstr "Без доступу да прылад карыстальніка" #: src/bz-safety-calculator.c:116 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Не мае доступу да прылад накшталт вэб-камер або гульнявых кантролераў" #: src/bz-safety-calculator.c:121 msgid "Input Device Access" msgstr "Доступ да прылад уводу" #: src/bz-safety-calculator.c:122 msgid "Can access input devices" msgstr "Мае доступ да прылад уводу" #: src/bz-safety-calculator.c:128 msgid "Microphone Access and Audio Playback" msgstr "Доступ да мікрафона і прайгравання аўдыя" #: src/bz-safety-calculator.c:129 msgid "Can listen using microphones and play audio without asking permission" msgstr "Можа весці праслухоўванне праз мікрафон і прайграваць аўдыя не пытаючы дазволу" #: src/bz-safety-calculator.c:135 msgid "System Device Access" msgstr "Доступ да сістэмных прылад" #: src/bz-safety-calculator.c:136 msgid "Can access system devices which require elevated permissions" msgstr "Мае доступ да сістэмных прылад, якія патрабуюць павышанага ўзроўню дазволаў" #: src/bz-safety-calculator.c:142 msgid "Screen Contents Access" msgstr "Доступ да змесціва экрана" #: src/bz-safety-calculator.c:143 msgid "Can access the contents of the screen or other windows" msgstr "Мае доступ да змесціва экрана або іншых акон" #: src/bz-safety-calculator.c:149 msgid "Legacy Windowing System" msgstr "Састарэлы аконны інтэрфейс" #: src/bz-safety-calculator.c:150 msgid "Always uses a legacy windowing system (X11)" msgstr "Заўсёды выкарыстоўвае састарэлую сістэму кіравання вокнамі (X11)" #: src/bz-safety-calculator.c:156 msgid "Arbitrary Permissions" msgstr "Адвольныя дазволы" #: src/bz-safety-calculator.c:157 msgid "Can acquire arbitrary permissions" msgstr "Можа атрымліваць адвольныя дазволы" #: src/bz-safety-calculator.c:163 msgid "User Settings" msgstr "Налады карыстальніка" #: src/bz-safety-calculator.c:164 msgid "Can access and change user settings" msgstr "Можа праглядаць і змяняць налады карыстальніка" #: src/bz-safety-calculator.c:170 msgid "Full File System Read/Write Access" msgstr "Чытанне і запіс даных ва усёй файлавай сістэме" #: src/bz-safety-calculator.c:171 msgid "Can read and write all data on the file system" msgstr "Мае доступ да чытання і запісу даных ва усёй файлавай сістэме" #: src/bz-safety-calculator.c:178 msgid "Home Folder Read/Write Access" msgstr "Чытанне і запіс даных ў галоўнай папцы" #: src/bz-safety-calculator.c:179 msgid "Can read and write all data in your home directory" msgstr "Мае доступ да чытання і запісу даных ў галоўнай папцы" #: src/bz-safety-calculator.c:186 msgid "Full File System Read Access" msgstr "Чытанне даных ва ўсёй файлавай сістэме" #: src/bz-safety-calculator.c:187 msgid "Can read all data on the file system" msgstr "Мае доступ да чытання даных ва усёй файлавай сістэме" #: src/bz-safety-calculator.c:195 msgid "Home Folder Read Access" msgstr "Чытанне даных у галоўнай папцы" #: src/bz-safety-calculator.c:196 msgid "Can read all data in your home directory" msgstr "Мае доступ да чытання ў галоўнай папцы" #: src/bz-safety-calculator.c:204 msgid "Download Folder Read/Write Access" msgstr "Чытанне і запіс даных у папцы спамповак" #: src/bz-safety-calculator.c:205 msgid "Can read and write all data in your downloads directory" msgstr "Мае доступ да чытання і запісу даных у папцы спамповак" #: src/bz-safety-calculator.c:215 msgid "Download Folder Read Access" msgstr "Чытанне даных ў папцы спамповак" #: src/bz-safety-calculator.c:216 msgid "Can read all data in your downloads directory" msgstr "Мае доступ да чытання даных ў папцы спамповак" #: src/bz-safety-calculator.c:229 msgid "Can read and write all data in the directory" msgstr "Мае доступ да чытання і запісу даных у каталогу" #: src/bz-safety-calculator.c:243 msgid "Can read all data in the directory" msgstr "Мае доступ да чытання даных у каталогу" #: src/bz-safety-calculator.c:258 msgid "No File System Access" msgstr "Без доступу да файлавай сістэмы" #: src/bz-safety-calculator.c:259 msgid "Cannot access the file system at all" msgstr "Не мае доступу да ўсёй файлавай сістэмы" #: src/bz-safety-calculator.c:266 msgid "Uses System Services" msgstr "Выкарыстоўвае сістэмныя сэрвісы" #: src/bz-safety-calculator.c:267 msgid "Can request data from non-portal system services" msgstr "Можа запытваць даныя з сістэмных сэрвісаў, якія не звязаны з парталам" #: src/bz-safety-calculator.c:273 msgid "Uses Session Services" msgstr "Выкарыстоўвае сэрвісы сеанса" #: src/bz-safety-calculator.c:274 msgid "Can request data from non-portal session services" msgstr "Можа запытваць даныя з сэрвісаў сеанса, якія не звязаны з парталам" #: src/bz-safety-calculator.c:322 msgid "No Service Access" msgstr "Без доступу да сэрвісаў" #: src/bz-safety-calculator.c:323 msgid "Cannot access non-portal session or system services at all" msgstr "Не можа запытваць даныя з сэрвісаў сеанса або сістэмных сэрвісаў, якія не звязаны з парталам" #: src/bz-safety-calculator.c:331 msgid "Verified App Developer" msgstr "Спраўджаны распрацоўшчык" #: src/bz-safety-calculator.c:332 msgid "The developer of this app has been verified to be who they say they are" msgstr "Распрацоўшчык гэтай праграмы прайшоў спраўджанне асобы" #: src/bz-safety-calculator.c:341 msgid "Proprietary Code" msgstr "Прапрыетарны код" #: src/bz-safety-calculator.c:342 msgid "The source code is not public, so it cannot be independently audited and might be unsafe" msgstr "Зыходны код праграмы не даступны для публікі, яго нельга праверыць незалежна, таму праграма можа быць небяспечнай" #: src/bz-safety-calculator.c:352 msgid "Auditable Code" msgstr "Правяральны код" #: src/bz-safety-calculator.c:353 msgid "The source code is public and can be independently audited, which makes the app more likely to be safe" msgstr "Зыходны код праграмы даступны для публікі, яго можна праверыць незалежна, таму з большай верагоднасцю праграма бяспечная" #: src/bz-safety-calculator.c:493 #, c-format msgid "Use the %s System Service" msgstr "Выкарыстоўвае сістэмны сэрвіс %s" #: src/bz-safety-calculator.c:497 #, c-format msgid "Use the %s Session Service" msgstr "Выкарыстоўвае сэрвіс сеанса %s" #: src/bz-safety-calculator.c:501 #, c-format msgid "Use the %s Service" msgstr "Выкарыстоўвае сервіс %s" #: src/bz-safety-calculator.c:511 msgid "Can see the non-portal service" msgstr "Можа праглядаць сэрвіс, які не звязаны з парталам" #: src/bz-safety-calculator.c:513 msgid "Can talk to the non-portal service" msgstr "Можа адпраўляць паведамленні сэрвісу, які не звязаны з парталам" #: src/bz-safety-calculator.c:515 msgid "Can own the non-portal service" msgstr "Можа валодаць сэрвісам, які не звязаны з парталам" #: src/bz-safety-calculator.c:530 msgid "Global Menu Integration" msgstr "Інтэграцыя з глабальным меню" #: src/bz-safety-calculator.c:531 msgid "Can display its menus in a global menu bar" msgstr "Можа паказваць свае меню ў панэлі глабальнага меню" #: src/bz-safety-calculator.c:536 msgid "KDE Settings Integration" msgstr "Інтэграцыя ў наладамі KDE" #: src/bz-safety-calculator.c:537 msgid "Can detect when KDE desktop settings change" msgstr "Можа адсочваць змены ў наладах асяроддзя KDE" #: src/bz-safety-calculator.c:542 msgid "KDE Global Settings" msgstr "Глабальныя налады KDE" #: src/bz-safety-calculator.c:543 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Можа чытаць такія параметры асяроддзя KDE, як выбар шрыфтоў і колераў" #: src/bz-safety-calculator.c:548 msgid "Secret Storage Service" msgstr "Служба сховішча сакрэтаў" #: src/bz-safety-calculator.c:549 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Можа захоўваць і атрымліваць уласныя паролі з дапамогай набору сістэмных ключоў" #: src/bz-safety-calculator.c:554 msgid "Desktop Notifications Service" msgstr "Сэрвіс апавяшчэнняў на працоўным стале" #: src/bz-safety-calculator.c:555 msgid "Can send desktop notifications" msgstr "Можа адпраўляць апавяшчэнні на працоўным стале" #: src/bz-safety-calculator.c:561 msgid "System Tray Integration" msgstr "Інтэграцыя з панэллю заданняў" #: src/bz-safety-calculator.c:562 msgid "Can display an icon in the system tray" msgstr "Можа паказваць значок у панэлі заданняў" #: src/bz-safety-calculator.c:567 msgid "KDE Connect Integration" msgstr "Інтэграцыя з KDE Connect" #: src/bz-safety-calculator.c:568 msgid "Can interact with devices paired via KDE Connect" msgstr "Можа ўзаемадзейнічаць з прыладамі, спалучанымі праз KDE Connect" #: src/bz-safety-dialog.blp:7 msgid "Safety" msgstr "Бяспека" #: src/bz-safety-dialog.blp:53 msgid "License" msgstr "Ліцэнзія" #: src/bz-safety-dialog.blp:63 msgid "App ID" msgstr "ID праграмы" #: src/bz-safety-dialog.blp:73 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:104 msgid "" "This app uses an outdated version of the software platform (SDK) and might contain bugs or security vulnerabilities which will " "not be fixed." msgstr "" "Гэта праграма выкарыстоўвае састарэлую версію праграмнай платформы (SDK) і, імаврна, утрымлівае памылкі або пагрозы для бяспекі, " "якія немагчыма выправіць." #: src/bz-safety-dialog.c:227 #, c-format msgid "%s is Safe" msgstr "%s у бяспецы" #: src/bz-safety-dialog.c:232 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s не мае небяспечных дазволаў" #: src/bz-safety-dialog.c:237 #, c-format msgid "%s is Probably Safe" msgstr "%s імаверна бяспечная" #: src/bz-safety-dialog.c:242 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s можа несці небяспеку" #: src/bz-safety-dialog.c:247 #, c-format msgid "%s is Unsafe" msgstr "%s небяспечная" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Здымкі экрана" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Папярэдні здымак" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Наступны здымак" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Скапіяваць відарыс" #: src/bz-screenshot-page.blp:147 msgid "Reset View" msgstr "Скінуць від" #: src/bz-screenshot-page.blp:158 msgid "Zoom Out" msgstr "Паменшыць" #: src/bz-screenshot-page.blp:168 msgid "Zoom In" msgstr "Павялічыць" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Карусель здымкаў экрана" #: src/bz-screenshots-carousel.blp:112 msgid "Open Screenshot Viewer" msgstr "Адкрыць прагляд здымкаў экрана" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Відэа" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Офіс" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Каляндар" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Паведамленні" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Steam" msgstr "Steam" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "Paint" msgstr "Маляванне" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:122 msgid "Minecraft" msgstr "Minecraft" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:127 msgid "Emulator" msgstr "Эмулятар" #: src/bz-search-widget.blp:57 msgid "Search Apps, Games, Software" msgstr "Пошук праграм і гульняў" #: src/bz-search-widget.blp:79 msgid "Clear Search" msgstr "Ачысціць пошук" #: src/bz-search-widget.blp:167 msgid "Categories Unavailable" msgstr "Катэгорыі не даступныя" #: src/bz-search-widget.blp:168 msgid "Search for apps using the search bar above." msgstr "Шукайце праграмы, выкарыстоўваючы панэль зверху." #: src/bz-search-widget.blp:193 msgid "Browse Categories" msgstr "Агляд катэгорый" #: src/bz-search-widget.blp:316 msgid "No Applications Found" msgstr "Праграм не знойдзена" #: src/bz-search-widget.c:243 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Для запыту \"%s\" на Flathub нічога не знайшлося" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Скапіяваць спасылку" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Адкрыць спасылку" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "Часавая шкала" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Усталяванняў:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "У свеце" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:124 #, c-format msgid "%.2fM Total Installs" msgstr "Усяго ўсталяванняў — %.2f млн." #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:127 #, c-format msgid "%.2fK Total Installs" msgstr "Усяго ўсталяванняў — %.2f тыс." #: src/bz-stats-dialog.c:129 #, c-format msgid "%'d Total Installs" msgstr "Усяго ўсталяванняў — %'d" #: src/bz-tag-list.c:96 msgid "No Results Found" msgstr "Няма вынікаў" #: src/bz-tag-list.c:108 #, c-format msgid "Apps Tagged \"%s\"" msgstr "Праграмы з цэтлікам \"%s\"" #: src/bz-tag-list.c:124 msgid "Search failed" msgstr "Памылка пошуку" #: src/bz-transaction-dialog.c:155 msgid "Keep User Data" msgstr "Пакінуць даныя карыстальніка" #: src/bz-transaction-dialog.c:156 msgid "Allow restoring personal settings & content" msgstr "Дазволіць аднаўляць персанальныя налады і змесціва" #: src/bz-transaction-dialog.c:165 msgid "Delete All Data" msgstr "Выдаліць усе даныя" #: src/bz-transaction-dialog.c:166 msgid "Permanently erase user data to save space" msgstr "Незваротна выдаліць даныя карыстальніка, каб зберагчы месца" #: src/bz-transaction-dialog.c:191 #, c-format msgid "Install %s?" msgstr "Усталяваць \"%s\"?" #: src/bz-transaction-dialog.c:196 msgid "Select which version to install. May install additional shared components" msgstr "Выберыце, якую версію ўсталяваць. Могуць усталявацца дадатковыя абагуленыя кампаненты" #: src/bz-transaction-dialog.c:198 msgid "May install additional shared components" msgstr "Можа ўсталяваць дадатковыя абагуленыя кампаненты" #: src/bz-transaction-dialog.c:219 #, c-format msgid "Remove %s?" msgstr "Выдаліць \"%s\"?" #: src/bz-transaction-dialog.c:222 msgid "Select which version to remove." msgstr "Выберыце, якую версію выдаліць." #: src/bz-transaction-dialog.c:224 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Праграму %s нельга будзе выкарыстоўваць пасля выдалення." #: src/bz-transaction-dialog.c:247 #, c-format msgid "“%s” is High Risk" msgstr "Праграма \"%s\" нясе высокія рызыкі" #: src/bz-transaction-dialog.c:251 msgid "" "This app has full access to your system, including all your files, browser history, saved passwords, and more. It also has " "access to the internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with these permissions." msgstr "" "Гэта праграма мае поўны доступ да сістэмы, у тым ліку да ўсіх вашых файлаў, гісторыі браўзера, захаваных пароляў і не " "толькі. Таксама, яна мае доступ да інтэрнэту, што азначае, што яна можа адпраўляць вашы даныя знешнім суб’ектам.\n" "\n" "З-за таго, што праграма з’яўляецца прапрыетарнай, немагчыма правесці праверку таго, што яна робіць з гэтымі дазволамі." #: src/bz-transaction-dialog.c:260 msgid "" "This app uses the legacy X11 windowing system, which allows it to record all keystrokes, capture screenshots, and monitor " "other applications. It also has access to the internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with these permissions." msgstr "" "Гэта праграма выкарыстоўвае састарэлую версію сістэмы кіравання вокнамі X11, у якой ёсць дазвол на запісванне ўсіх спалучэнняў " "клавіш, стварэнне здымкаў экрана і сачыць за іншымі праграмамі. Таксама, яна мае доступ да інтэрнэту, што азначае, што яна " "можа адпраўляць вашы даныя знешнім суб’ектам.\n" "\n" "З-за таго, што праграма з’яўляецца прапрыетарнай, немагчыма правесці праверку таго, што яна робіць з гэтымі дазволамі." #: src/bz-transaction-dialog.c:276 msgid "Install Anyway" msgstr "Усё адно ўсталяваць" #: src/bz-transaction-dialog.c:331 msgid "Failed to load transaction dialog" msgstr "Не ўдалося загрузіць дыялог трансакцыі" #: src/bz-transaction-dialog.c:549 msgid "All apps are already installed" msgstr "Усе праграмы ўсталяваны" #: src/bz-transaction-dialog.c:551 msgid "OK" msgstr "OK" #: src/bz-transaction-dialog.c:567 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Усталяваць %u праграму?" msgstr[1] "Усталяваць %u праграмы?" msgstr[2] "Усталяваць %u праграм?" #: src/bz-transaction-dialog.c:575 msgid "The following will be installed. Additional shared components may also be installed" msgstr "Будуць усталяваны наступныя праграмы. Разам з імі могуць усталявацца дадатковыя агульныя кампаненты" #: src/bz-transaction-dialog.c:576 #, c-format msgid "%d addons will be installed." msgstr "Будзе ўсталявана столькі дадаткаў: %d." #: src/bz-transaction-dialog.c:577 msgid "Additionally, addons will be installed." msgstr "Таксама будуць усталяваны дадаткі." #: src/bz-transaction-manager.c:766 #, c-format msgid "Finished in %.02f seconds" msgstr "Завершана за %.02f сек" #: src/bz-transaction-tile.blp:126 msgid "App Add-On" msgstr "Дадатак да праграмы" #: src/bz-transaction-tile.blp:155 msgid "Runtime" msgstr "Асяроддзе выканання" #: src/bz-transaction-tile.blp:179 msgid "In Queue" msgstr "У чарзе" #: src/bz-transaction-tile.blp:203 msgid "Done" msgstr "Зроблена" #: src/bz-transaction-tile.blp:227 msgid "Error" msgstr "Памылка" #: src/bz-transaction-tile.blp:271 msgid "Open App" msgstr "Адкрыць праграму" #: src/bz-transaction-tile.blp:285 msgid "Cancel Transaction" msgstr "Скасаваць трансакцыю" #: src/bz-transaction-tile.blp:409 msgid "Show Error Info" msgstr "Паказаць звесткі пра памылку" #: src/bz-transaction-tile.c:112 #, c-format msgid "%s Freed" msgstr "Вызвалена месца: %s" #: src/bz-transaction-tile.c:398 src/bz-transaction-tile.c:401 msgid "Transaction Error" msgstr "Памылка трансакцыі" #: src/bz-transaction.c:342 msgid "Pending" msgstr "У чаканні" #: src/bz-updates-card.blp:36 msgid "Update All" msgstr "Абнавіць усе" #: src/bz-updates-card.c:293 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u абнаўленне асяроддзя выканання" msgstr[1] "%u абнаўленні асяроддзя выканання" msgstr[2] "%u абнаўленняў асяроддзя выканання" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Кіраваць астаткамі даных карыстальніка" #: src/bz-user-data-page.blp:89 msgid "No User Data Found" msgstr "Даных карыстальніка не знойдзена" #: src/bz-user-data-page.blp:94 msgid "User Data" msgstr "Даныя карыстальніка" #: src/bz-user-data-tile.c:144 #, c-format msgid "Trashed User Data for %s" msgstr "Перамешчаныя даныя карыстальніка для %s" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Перамясціць даныя карыстальніка ў сметніцу" #: src/bz-window.blp:152 msgid "Curated" msgstr "Падабраныя" #: src/bz-window.blp:164 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:266 msgid "Refresh completed!" msgstr "Абнаўленне скончана!" #: src/bz-window.blp:319 msgid "You are running a new version of Bazaar!" msgstr "Вы запусцілі новую версію Bazaar!" #: src/bz-window.blp:320 msgid "See What's New" msgstr "Паглядзець, што новага" #: src/bz-window.blp:327 msgid "You have a network connection but are viewing a cached version of Flathub" msgstr "У вас ёсць злучэнне з сеткай, але вы праглядаеце версію Flathub у кэшы" #: src/bz-window.blp:439 msgid "Log Out" msgstr "Выйсці" #: src/bz-window.c:473 msgid "Failed to load add-ons" msgstr "Не ўдалося загрузіць дадаткі" #: src/bz-window.c:763 msgid "You can't remove Bazaar from Bazaar!" msgstr "Вы не можаце выдаліць Bazaar, карыстаючыся Bazaar!" #: src/bz-window.c:1055 src/bz-window.c:1089 msgid "Can't do that right now!" msgstr "У гэты момант дзеянне немагчымае!" #: src/bz-world-map.c:587 msgctxt "As in, \"100 Downloads\"" msgid "Downloads" msgstr "Спампоўкі" #: src/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Асноўнае" #: src/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Refresh" msgstr "Абнавіць" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Адкрыць параметры" #: src/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Адкрыць дыялог пошуку" #: src/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Open Library" msgstr "Адкрыць бібліятэку" #: src/shortcuts-dialog.blp:30 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Паказаць спалучэнні клавіш" #: src/shortcuts-dialog.blp:35 msgctxt "shortcut window" msgid "Close Window" msgstr "Закрыць акно" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Выйсці з Bazaar" #~ msgid "_Synchronize Remotes" #~ msgstr "Сін_хранізацыя з аддаленымі серверамі" #~ msgid "Synchronizing..." #~ msgstr "Ідзе сінхранізацыя..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "Ідзе атрыманне запісаў (%d)..." #~ msgid "Indexing Data..." #~ msgstr "Ідзе індэксаванне даных..." #~ msgid "View the Release Page" #~ msgstr "Праглядзець старонку выпуску" #~ msgid "Close" #~ msgstr "Закрыць" #~ msgid "Copy and Close" #~ msgstr "Скапіяваць і закрыць" #~ msgid "Keep Data" #~ msgstr "Пакінуць даныя" #~ msgid "Refreshing Store Content" #~ msgstr "Ідзе абнаўленне змесціва крамы" #~ msgid "No background tasks!" #~ msgstr "Няма фонавых задач!" #~ msgctxt "shortcut window" #~ msgid "Synchronize Remotes" #~ msgstr "Сінхранізацыя з аддаленымі серверамі" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Выйсці" bazaar-org-bazaar-b6e9a65/po/bg.po000066400000000000000000001102611522167256300170000ustar00rootroot00000000000000# Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # twlvnn kraftwerk , 2025 # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-18 06:40+0200\n" "PO-Revision-Date: 2025-10-19 11:04+0200\n" "Last-Translator: twlvnn kraftwerk \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: Poedit 3.8\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 src/bz-window.blp:51 msgid "Bazaar" msgstr "Базар" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Добавяйте, премахвайте или обновете flatpak софтуер на този компютър" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;PackageManager;Discover;Flatpak;Software;Store;система;мениджър на пакети;откриване;софтуер;програми;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Show Git Forge Star Counts" msgstr "Показване на броя на звездите в Git Forge" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Whether to attempt to detect and show \"star counts\" for projects in the full view" msgstr "Дали да се опита да се засече и покаже „броя на звездите“ за проектите в пълния изглед" #: data/io.github.kolunmi.Bazaar.gschema.xml:11 src/bz-preferences-dialog.blp:25 msgid "Only Show Free Software" msgstr "Показване само на свободен софтуер" #: data/io.github.kolunmi.Bazaar.gschema.xml:12 msgid "Hide proprietary software when searching" msgstr "Скриване на собственически софтуер при търсене" #: data/io.github.kolunmi.Bazaar.gschema.xml:16 msgid "Show Only Flathub Content" msgstr "Показване само на Flathub съдържание" #: data/io.github.kolunmi.Bazaar.gschema.xml:17 msgid "Filter search results to only show applications available on Flathub" msgstr "Филтриране на резултатите от търсенето, за да се показват само програмите, налични в Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:21 msgid "Debounce Search Inputs" msgstr "Забавяне на входа за търсене" #: data/io.github.kolunmi.Bazaar.gschema.xml:22 msgid "Add a delay before searching to prevent instant replies while typing" msgstr "Добавяне на закъснение преди търсенето, за да се предотвратят незабавни резултати по време на писане" #: data/io.github.kolunmi.Bazaar.gschema.xml:40 msgid "Global Progress Bar Theme" msgstr "Тема за глобалната лента за напредък" #: data/io.github.kolunmi.Bazaar.gschema.xml:41 msgid "Describes the look of the global progress bar" msgstr "Описва вида на глобалната лента за напредък" #: data/io.github.kolunmi.Bazaar.gschema.xml:45 msgid "Saved Window Dimensions" msgstr "Запазени размери на прозореца" #: data/io.github.kolunmi.Bazaar.gschema.xml:46 msgid "The window dimensions to be used by the next Bazaar window" msgstr "Размерите на прозореца, които ще се използват от следващия прозорец на Базар" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Открийте и инсталирайте програми" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "A new app store for GNOME with a focus on discovering and installing applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Нов магазин за програми за GNOME, предназначен за откриването и инсталирането на програми и добавки от Flatpak отдалечени хранилища, по-" "специфично Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. Bazaar features a \"curated\" tab that can be configured by " "distributors to allow for a more localized experience." msgstr "" "Той взема под внимание подкрепата на разработчиците, които правят Луникс за настолни компютри възможен. Bazaar разполага с раздел „подбрани“, " "който може да бъде настроен от дистрибуторите, за да позволи по-специализирано потребителско изживяване." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:22 src/bz-application.c:496 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:47 msgid "The home view displaying Flathub apps" msgstr "Началната страница, показваща програми на Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:51 msgid "Nucleus app page" msgstr "Страницата на Nucleus" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "Searching for Blender" msgstr "Търсене за Blender" #: src/bz-addons-dialog.blp:13 msgid "Manage Addons" msgstr "Управление на добавки" #: src/bz-app-size-dialog.c:55 msgid "Of the size of human DNA" msgstr "" #: src/bz-app-size-dialog.c:55 msgid "3 billion base pairs" msgstr "" #: src/bz-app-size-dialog.c:56 msgid "Of the Linux Kernel" msgstr "" #: src/bz-app-size-dialog.c:56 msgid "linux-6.17.tar.xz" msgstr "linux-6.17.tar.xz" #: src/bz-app-size-dialog.c:57 msgid "Of the Apollo 11 guidance computer" msgstr "" #: src/bz-app-size-dialog.c:57 msgid "Total ROM and RAM" msgstr "" #: src/bz-app-size-dialog.c:58 msgid "Of the original Super Mario Bros" msgstr "" #: src/bz-app-size-dialog.c:58 msgid "On the NES" msgstr "" #: src/bz-app-size-dialog.c:59 msgid "Of the size of Wikipedia" msgstr "" #: src/bz-app-size-dialog.c:59 msgid "Without any media" msgstr "" #: src/bz-app-size-dialog.blp:43 msgid "--- MB" msgstr "--- МБ" #: src/bz-app-size-dialog.blp:53 src/bz-full-view.blp:351 msgid "Download Size" msgstr "Размер за изтегляне" #: src/bz-application.c:392 msgid "This functionality is currently disabled. It is recommended you download and install Flatseal to manage app permissions." msgstr "Тази функционалност е деактивирана в момента. Препоръчваме да изтеглите и инсталирате Flatseal, за да управлявате права̀та на програмите." #: src/bz-application.c:456 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:457 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:481 msgid "translator-credits" msgstr "twlvnn kraftwerk" #: src/bz-application.c:462 msgctxt "About Dialog Translator Credit" msgid "Ahmed Najmawi" msgstr "Ahmed Najmawi" #: src/bz-application.c:463 msgctxt "About Dialog Translator Credit" msgid "AtomHare" msgstr "AtomHare" #: src/bz-application.c:464 msgctxt "About Dialog Translator Credit" msgid "Azenyr" msgstr "Azenyr" #: src/bz-application.c:465 msgctxt "About Dialog Translator Credit" msgid "Goudarz Jafari" msgstr "Goudarz Jafari" #: src/bz-application.c:466 msgctxt "About Dialog Translator Credit" msgid "Jill Fiore (Lumaeris)" msgstr "Jill Fiore (Lumaeris)" #: src/bz-application.c:467 msgctxt "About Dialog Translator Credit" msgid "João Victor (Leal)" msgstr "João Victor (Leal)" #: src/bz-application.c:468 msgctxt "About Dialog Translator Credit" msgid "KiKaraage" msgstr "KiKaraage" #: src/bz-application.c:469 msgctxt "About Dialog Translator Credit" msgid "Lucosec" msgstr "Lucosec" #: src/bz-application.c:470 msgctxt "About Dialog Translator Credit" msgid "Léane GRASSER" msgstr "Léane GRASSER" #: src/bz-application.c:471 msgctxt "About Dialog Translator Credit" msgid "Marcel Mrówka (Microwave)" msgstr "Marcel Mrówka (Microwave)" #: src/bz-application.c:472 msgctxt "About Dialog Translator Credit" msgid "Peter Dave Hello" msgstr "Peter Dave Hello" #: src/bz-application.c:473 msgctxt "About Dialog Translator Credit" msgid "Pietro F." msgstr "Pietro F." #: src/bz-application.c:474 msgctxt "About Dialog Translator Credit" msgid "Shihfu Juan" msgstr "Shihfu Juan" #: src/bz-application.c:475 msgctxt "About Dialog Translator Credit" msgid "Shinsei" msgstr "Shinsei" #: src/bz-application.c:476 msgctxt "About Dialog Translator Credit" msgid "Vlastimil Dědek" msgstr "Vlastimil Dědek" #: src/bz-application.c:477 msgctxt "About Dialog Translator Credit" msgid "asen23" msgstr "asen23" #: src/bz-application.c:478 msgctxt "About Dialog Translator Credit" msgid "camegone" msgstr "camegone" #: src/bz-application.c:479 msgctxt "About Dialog Translator Credit" msgid "renner" msgstr "renner" #: src/bz-application.c:480 msgctxt "About Dialog Translator Credit" msgid "robotta" msgstr "robotta" #: src/bz-application.c:1019 msgid "Constructing Flatpak instance..." msgstr "Изграждане на Flatpak инстанция..." #: src/bz-application.c:1036 msgid "Reusing last Flatpak instance..." msgstr "Преизползване на последната Flatpak инстанция…" #: src/bz-application.c:1061 msgid "Flathub is not registered on this system" msgstr "Flathub не е регистриран в тази система" #: src/bz-application.c:1064 msgid "Would you like to add Flathub as a remote? If you decline, the Flathub page will not be available. You can change this later." msgstr "" "Искате ли да добавите Flathub като отдалечено хранилище? Ако откажете, страницата на Flathub няма да бъде достъпна. Може да промените това по-" "късно." #: src/bz-application.c:1069 src/bz-update-dialog.blp:6 msgid "Later" msgstr "По-късно" #: src/bz-application.c:1070 msgid "Add Flathub" msgstr "Добавяне на Flathub" #: src/bz-application.c:1102 #, c-format msgid "Identifying installed entries..." msgstr "Идентифициране на инсталираните записи..." #: src/bz-application.c:1114 #, c-format msgid "Beginning remote entry retrieval while referencing %d blocklist(s)..." msgstr "Получаване на отдалечените записи и четене от %d списък(а) за блокиране..." #: src/bz-application.c:1262 #, c-format msgid "Receiving Entries" msgstr "Получаване на записите" #: src/bz-application.c:1263 #, c-format msgid "%'d of %'d" msgstr "%'d от %'d" #: src/bz-application.c:1273 #, c-format msgid "Waiting for background indexing tasks to catch up..." msgstr "Изчакване на задачите за индексиране във фона да настигнат…" #: src/bz-application.c:1309 #, c-format msgid "Completed initialization in %0.2f seconds" msgstr "Инициализацията завърши за %0.2f секунди" #: src/bz-application.c:1314 msgid "Checking for updates..." msgstr "Проверяване за обновления..." #: src/bz-application.c:1353 msgid "Synchronizing..." msgstr "Синхронизиране..." #: src/bz-browse-widget.blp:11 src/bz-flathub-page.blp:11 src/bz-full-view.blp:10 src/bz-installed-page.blp:11 src/bz-window.blp:151 msgid "Empty" msgstr "Празно" #: src/bz-browse-widget.blp:15 msgid "No Curated Applications" msgstr "Няма подбрани програми" #: src/bz-browse-widget.blp:16 msgid "Bazaar was not provided a curated content configuration. Contact your operating system's support channels for assistance." msgstr "Bazaar не разполага с настройки за подбрано съдържание. Свържете се с каналите за поддръжка на вашата операционна система за помощ." #: src/bz-browse-widget.blp:22 src/bz-flathub-page.blp:22 msgid "Browser" msgstr "Браузър" #: src/bz-entry-inspector.blp:5 msgid "Entry Inspector" msgstr "Инспектор на записите" #: src/bz-entry-inspector.blp:76 msgid "Serialize" msgstr "Сериализиране" #: src/bz-entry-inspector.blp:80 msgid "Convert to JSON" msgstr "Преобразуване в JSON" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Възникна грешка" #: src/bz-error.c:89 msgid "Close" msgstr "Затваряне" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Копиране и затваряне" #: src/bz-flathub-category.c:290 msgid "Audio & Video" msgstr "Аудио & видео" #: src/bz-flathub-category.c:292 msgid "Development" msgstr "Разработка" #: src/bz-flathub-category.c:294 msgid "Education" msgstr "Образование" #: src/bz-flathub-category.c:296 msgid "Games" msgstr "Игри" #: src/bz-flathub-category.c:298 msgid "Graphics" msgstr "Графика" #: src/bz-flathub-category.c:300 msgid "Networking" msgstr "Интернет" #: src/bz-flathub-category.c:302 msgid "Office" msgstr "Офис" #: src/bz-flathub-category.c:304 msgid "Science" msgstr "Наука" #: src/bz-flathub-category.c:306 msgid "System" msgstr "Система" #: src/bz-flathub-category.c:308 msgid "Utilities" msgstr "Инструменти" #: src/bz-flathub-page.blp:15 msgid "Flathub Not Added" msgstr "Flathub не беше добавен" #: src/bz-flathub-page.blp:16 msgid "The Flathub remote was not found on any of your flatpak installations" msgstr "Отдалеченото Flathub хранилище не беше намерено в нито една от вашите инсталации на flatpak" #: src/bz-flathub-page.blp:70 src/bz-flathub-page.c:185 msgid "Trending" msgstr "Популярни" #: src/bz-flathub-page.blp:101 msgid "More Trending" msgstr "Още набиращи популярност" #: src/bz-flathub-page.blp:117 msgid "Categories" msgstr "Категории" #: src/bz-flathub-page.blp:154 src/bz-flathub-page.c:195 msgid "Recently Updated" msgstr "Наскоро обновени" #: src/bz-flathub-page.blp:185 msgid "More Updated" msgstr "Още обновени" #: src/bz-flathub-page.blp:206 src/bz-flathub-page.c:205 msgid "Recently Added" msgstr "Наскоро добавени" #: src/bz-flathub-page.blp:237 msgid "More Added" msgstr "Още добавени" #: src/bz-flathub-page.blp:258 src/bz-flathub-page.c:215 msgid "Popular" msgstr "Популярни" #: src/bz-flathub-page.blp:289 msgid "More Popular" msgstr "Още популярни" #: src/bz-flatpak-entry.c:507 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub страницата" #: src/bz-flatpak-entry.c:526 msgctxt "Project URL Type" msgid "Homepage" msgstr "Начална страница" #: src/bz-flatpak-entry.c:529 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Система за проблеми" #: src/bz-flatpak-entry.c:532 msgctxt "Project URL Type" msgid "FAQ" msgstr "ЧЗВ" #: src/bz-flatpak-entry.c:535 msgctxt "Project URL Type" msgid "Help" msgstr "Помощ" #: src/bz-flatpak-entry.c:538 msgctxt "Project URL Type" msgid "Donate" msgstr "Дарете" #: src/bz-flatpak-entry.c:543 msgctxt "Project URL Type" msgid "Translate" msgstr "Превод" #: src/bz-flatpak-entry.c:546 msgctxt "Project URL Type" msgid "Contact" msgstr "Контакти" #: src/bz-flatpak-entry.c:549 msgctxt "Project URL Type" msgid "Source Code" msgstr "Изходен код" #: src/bz-flatpak-entry.c:554 msgctxt "Project URL Type" msgid "Contribute" msgstr "Допринесете" #: src/bz-full-view.blp:14 msgid "No Results" msgstr "Няма резултати" #: src/bz-full-view.blp:15 msgid "Try a different search query" msgstr "Oпитайте различно търсене" #: src/bz-full-view.blp:21 src/bz-window.blp:161 msgid "Content" msgstr "Съдържание" #: src/bz-full-view.blp:129 msgid "This flatpak is verified by the original developers of the software." msgstr "Този flatpak е проверен от оригиналните разработчици на софтуера." #: src/bz-full-view.blp:156 msgid "Support" msgstr "Подкрепи" #: src/bz-full-view.blp:176 msgid "Repository Star Count" msgstr "Брой звезди на хранилището" #: src/bz-full-view.blp:207 msgid "Run Application" msgstr "Изпълняване на програмата" #: src/bz-full-view.blp:221 msgid "Download & Install Application" msgstr "Изтегляне и инсталиране на програмата" #: src/bz-full-view.blp:224 src/bz-transaction-view.blp:108 src/bz-window.c:1071 msgid "Install" msgstr "Инсталиране" #: src/bz-full-view.blp:236 msgid "Uninstall Application" msgstr "Деинсталиране на програмата" #: src/bz-full-view.blp:251 src/bz-installed-page.blp:125 msgid "Manage Add-ons" msgstr "Управление на добавки" #: src/bz-full-view.blp:264 msgid "Install Other Version" msgstr "Инсталиране на друга версия" #: src/bz-full-view.blp:279 msgid "Share this application" msgstr "Споделете тази програма" #: src/bz-full-view.blp:362 msgid "Excludes shared components" msgstr "Изключва споделени компоненти" #: src/bz-full-view.blp:418 msgid "Free Software" msgstr "Свободен софтуер" #: src/bz-full-view.blp:460 msgid "Proprietary" msgstr "Собственически" #: src/bz-full-view.blp:471 msgid "Source code may not be available" msgstr "Изходният код може да не е наличен" #: src/bz-full-view.blp:526 msgid "Click for details" msgstr "Натиснете за подробности" #: src/bz-full-view.blp:592 msgid "Repositories" msgstr "Хранилища" #: src/bz-full-view.blp:623 src/bz-full-view.blp:631 msgid "Project Website" msgstr "Уеб сайт на проекта" #: src/bz-full-view.blp:639 msgid "Open in browser" msgstr "Отваряне в Интернет браузър" #: src/bz-full-view.c:213 #, c-format msgid "%'d Monthly Downloads" msgstr "%'d месечни изтегляния" #: src/bz-full-view.c:215 msgid "--- Downloads" msgstr "--- изтегляния" #: src/bz-full-view.c:241 msgid "Unknown" msgstr "Неизвестно" #. Translators: This is a date format for timestamps from previous years. Used in the app releases section. #. * %B is the full month name, %e is the day, %Y is the year. #. * Example: "October 1, 2025" #. * See https://docs.gtk.org/glib/method.DateTime.format.html for format options #. * Please modify to make it sound natural in your locale. #. * #: src/bz-full-view.c:268 msgid "%B %-d, %Y" msgstr "%-d %B, %Y" #. Translators: This is a date format for timestamps from the current year. Used in the app releases section. #. * %B is the full month name, %e is the day. #. * Example: "October 1" #. * See https://docs.gtk.org/glib/method.DateTime.format.html for format options #. * Please modify to make it sound natural in your locale. #. * #: src/bz-full-view.c:276 msgid "%B %-d" msgstr "%-d %B" #: src/bz-full-view.c:287 msgid "No URL" msgstr "Няма адрес" #: src/bz-full-view.c:305 msgid "This application has a FLOSS license, meaning the source code can be audited for safety." msgstr "Това приложение има FLOSS лиценз, което означава, че изходният код може да бъде проверен за сигурност." #: src/bz-full-view.c:306 msgid "" "This application has a proprietary license, meaning the source code is developed privately and cannot be audited by an independent third party." msgstr "" "Тази програма има собственически лиценз, което означава, че изходният код е разработен частно и не може да бъде проверен от независими трети " "лица." #: src/bz-full-view.c:596 #, c-format msgid "Version %s" msgstr "Версия %s" #: src/bz-full-view.c:621 msgid "No details for this release" msgstr "Няма подробности за това издание" #: src/bz-inspector.blp:5 msgid "Bazaar Inspector" msgstr "Базар инспектор" #: src/bz-inspector.blp:22 msgid "Active Blocklists" msgstr "Активни списъци за блокиране" #: src/bz-inspector.blp:44 msgid "Active Curated-Configs" msgstr "" #: src/bz-inspector.blp:66 msgid "All Entry Groups" msgstr "Всички групи за запис" #: src/bz-inspector.blp:69 msgid "Filter..." msgstr "Филтриране…" #: src/bz-inspector.blp:110 msgid "Decache and Inspect" msgstr "Декаширане и изследване" #: src/bz-installed-page.blp:15 msgid "No Flatpaks Installed" msgstr "Няма инсталирани Flatpak програми" #: src/bz-installed-page.blp:21 src/bz-window.blp:302 src/bz-window.blp:395 msgid "Installed" msgstr "Инсталирани" #: src/bz-installed-page.blp:101 msgid "Support this application" msgstr "Подкрепете тази програма" #: src/bz-installed-page.blp:151 src/bz-window.c:1093 msgid "Remove" msgstr "Премахване" #: src/bz-installed-page.blp:178 msgid "More actions" msgstr "Допълнителни действия" #: src/bz-installed-page.blp:197 msgid "Run this application" msgstr "Изпълняване на тази програма" #: src/bz-installed-page.blp:209 msgid "Run" msgstr "Изпълняване" #: src/bz-installed-page.blp:221 src/bz-installed-page.blp:232 msgid "View Store Page" msgstr "Вижте страницата в магазина" #: src/bz-installed-page.c:649 msgid "Choose an Installation" msgstr "Изберете инсталация" #: src/bz-installed-page.c:652 msgid "You have multiple versions of this app installed. Which one would you like to proceed with? " msgstr "Имате инсталирани няколко версии на тази програма. Коя от тях искате да използвате? " #: src/bz-installed-page.c:656 src/bz-window.c:1070 src/bz-window.c:1092 msgid "Cancel" msgstr "Отказване" #: src/bz-preferences-dialog.blp:9 msgid "Preferences" msgstr "Настройки" #: src/bz-preferences-dialog.blp:13 msgid "Application Details" msgstr "Подробности за програмата" #: src/bz-preferences-dialog.blp:16 msgid "Git Forge Star Counts" msgstr "Брой звезди в Git Forge" #: src/bz-preferences-dialog.blp:17 msgid "Not having a GitHub access token may trigger rate limits" msgstr "Липсата на токен за достъп до GitHub може да доведе до ограничения на скоростта" #: src/bz-preferences-dialog.blp:22 src/bz-window.blp:43 src/bz-window.blp:58 src/bz-window.blp:334 msgid "Search" msgstr "Търсене" #: src/bz-preferences-dialog.blp:26 msgid "Hide proprietary applications from search results" msgstr "Скриване на собственическите програми от резултатите от търсенето" #: src/bz-preferences-dialog.blp:30 msgid "Show Only Flathub Apps" msgstr "Показване само на Flathub програми" #: src/bz-preferences-dialog.blp:31 msgid "Limit search results to applications available on Flathub" msgstr "Ограничаване на резултатите от търсенето до програмите, налични в Flathub" #: src/bz-preferences-dialog.blp:35 msgid "Debounce Search Results" msgstr "Забавяне на резултатите за търсене" #: src/bz-preferences-dialog.blp:36 msgid "Wait for a brief pause to reduce system load" msgstr "Изчакване за кратко, за да се намали натоварването на системата" #: src/bz-preferences-dialog.blp:41 msgid "Global Progress Bar" msgstr "Глобална лента за напредъка" #: src/bz-preferences-dialog.blp:44 msgid "Theme" msgstr "Тема" #: src/bz-preferences-dialog.blp:45 msgid "Choose a fun theme for the global progress bar!" msgstr "Изберете забавна тема за глобалната лента за напредъка!" #: src/bz-preferences-dialog.blp:48 msgid "Accent Color" msgstr "Акцентиращ цвят" #: src/bz-preferences-dialog.blp:49 msgid "Pride Rainbow Flag" msgstr "Прайд ЛГБТ флаг" #: src/bz-preferences-dialog.blp:50 msgid "Lesbian Pride Flag" msgstr "" #: src/bz-preferences-dialog.blp:51 msgid "Transgender Flag" msgstr "" #: src/bz-preferences-dialog.blp:52 msgid "Nonbinary Flag" msgstr "" #: src/bz-preferences-dialog.blp:53 msgid "Bisexual Flag" msgstr "" #: src/bz-preferences-dialog.blp:54 msgid "Asexual Flag" msgstr "" #: src/bz-preferences-dialog.blp:55 msgid "Pansexual Flag" msgstr "" #: src/bz-preferences-dialog.blp:56 msgid "Aromantic Flag" msgstr "" #: src/bz-preferences-dialog.blp:57 msgid "Genderfluid Flag" msgstr "" #: src/bz-preferences-dialog.blp:58 msgid "Polysexual Flag" msgstr "" #: src/bz-preferences-dialog.blp:59 msgid "Omnisexual Flag" msgstr "" #: src/bz-search-widget.blp:69 msgid "Search Apps" msgstr "Търсете програми" #: src/bz-share-dialog.blp:13 msgid "Share" msgstr "Споделяне" #: src/bz-share-dialog.c:62 msgid "Copied!" msgstr "Копирано!" #: src/bz-share-dialog.c:106 msgid "Copy Link" msgstr "Копиране на връзката" #: src/bz-share-dialog.c:117 msgid "Open Link" msgstr "Отваряне на връзката" #: src/bz-stats-dialog.blp:26 msgid "Timeline" msgstr "Хронология" #: src/bz-stats-dialog.blp:31 msgid "Installs:" msgstr "Инсталации:" #: src/bz-stats-dialog.blp:37 msgid "World" msgstr "Глобално" #: src/bz-transaction-manager.c:1140 #, c-format msgid "Finished in %.02f seconds" msgstr "Завърши за %.02f секунди" #: src/bz-transaction-view.blp:95 msgid "Install Size" msgstr "Размер за инсталирани" #: src/bz-transaction-view.blp:238 msgid "Error Details" msgstr "Подробности за грешката" #: src/bz-transaction-view.c:139 #, c-format msgid "Transferred %s so far" msgstr "Прехвърлени са %s до момента" #: src/bz-transaction.c:336 msgid "Pending" msgstr "В опашката" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "Инсталиране сега" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "Налични са обновления" #: src/bz-update-dialog.blp:11 msgid "The following applications are eligible for updates. Would you like to install them?" msgstr "Следните програми имат обновления. Искате ли да ги инсталирате?" #: src/bz-update-dialog.c:134 #, c-format msgid "%d runtimes and/or addons are eligible for updates. Would you like to install them?" msgstr "%d среди за изпълнение и/или добавки имат обновления. Искате ли да ги инсталирате?" #: src/bz-update-dialog.c:142 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "Освен това, %d среди за изпълнение и/или добавки ще бъдат обновени." #: src/bz-window.blp:80 msgid "Transactions" msgstr "Операции" #: src/bz-window.blp:95 src/bz-window.blp:414 msgid "Toggle transaction sidebar" msgstr "Превключване на страничната лента за операции" #: src/bz-window.blp:131 msgid "Stop Active Tasks" msgstr "Спиране на работещите задачи" #: src/bz-window.blp:139 msgid "Clear History" msgstr "Изчистване на историята" #: src/bz-window.blp:155 msgid "No Tasks Yet" msgstr "Все още няма задачи" #: src/bz-window.blp:210 src/bz-window.blp:214 msgid "Offline" msgstr "Няма връзка" #: src/bz-window.blp:220 msgid "Loading" msgstr "Зареждане" #: src/bz-window.blp:268 msgid "Browse" msgstr "Разглеждане" #: src/bz-window.blp:278 msgid "App View" msgstr "Изглед на програмата" #: src/bz-window.blp:292 src/bz-window.blp:388 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:322 msgid "Go Back" msgstr "Назад" #: src/bz-window.blp:347 msgid "Update" msgstr "Обновяване" #: src/bz-window.blp:377 msgid "View curated applications" msgstr "Вижте подбрани програми" #: src/bz-window.blp:381 msgid "Curated" msgstr "Подбрани" #: src/bz-window.blp:385 msgid "View the latest on Flathub" msgstr "Вижте най-новите програми във Flathub" #: src/bz-window.blp:392 msgid "View installed applications" msgstr "Вижте инсталираните програми" #: src/bz-window.blp:437 msgid "Main Menu" msgstr "Основно меню" #: src/bz-window.blp:471 msgid "_Quit Service" msgstr "_Спиране на услугата" #: src/bz-window.blp:476 msgid "_Refresh Content" msgstr "_Опресняване на съдържанието" #: src/bz-window.blp:481 msgid "_Preferences" msgstr "_Настройки" #: src/bz-window.blp:486 msgid "_Keyboard Shortcuts" msgstr "_Клавишни комбинации" #: src/bz-window.blp:491 msgid "_About Bazaar" msgstr "_Относно Базар" #: src/bz-window.blp:496 msgid "_Donate to Bazaar ❤️" msgstr "_Дарете за Базар ❤️" #: src/bz-window.c:628 msgid "Up to date!" msgstr "Всичко е обновено!" #: src/bz-window.c:800 msgid "" "The ability to inspect and install local .flatpak bundle files is coming soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "Функцията за проверяване и инсталиране на локални .flatpak пакетни файлове ще бъде достъпна скоро! Междувременно, опитайте да изпълните\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "в командния ред." #: src/bz-window.c:935 msgid "Can't do that right now!" msgstr "Това действие не може да се извърши сега!" #: src/bz-window.c:1064 #, c-format msgid "Install %s?" msgstr "Инсталиране на %s?" #: src/bz-window.c:1067 msgid "May install additional shared components" msgstr "Може да инсталира допълнителни споделени компоненти" #: src/bz-window.c:1086 #, c-format msgid "Remove %s?" msgstr "Премахване на %s?" #: src/bz-window.c:1089 msgid "Settings & user data will be kept" msgstr "Настройките и потребителските данни ще бъдат запазени" #: src/bz-window.c:1257 msgid "Resume Current Tasks" msgstr "Възобновяване на текущите задачи" #: src/bz-window.c:1263 msgid "Pause Current Tasks" msgstr "Пауза на текущите задачи" #: src/bz-world-map.c:523 #, c-format msgid "%s: %'u downloads" msgstr "%s: %'u изтегляния" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Общи" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Отваряне на търсачката" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Refresh" msgstr "Опресняване" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Превключване на мениджъра на операциите" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Показване на клавишните комбинации" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Quit" msgstr "Спиране на програмата" #~ msgid "Show Animated Background" #~ msgstr "Animierten Hintergrund anzeigen" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Den animierten Hintergrund auf der Startseite anzeigen" #~ msgid "It emphasizes supporting the developers who make the Linux desktop possible." #~ msgstr "Es legt Wert darauf, die Entwickler zu unterstützen, die den Linux-Desktop möglich machen." #~ msgid "Calligraphy application page" #~ msgstr "Calligraphy" #~ msgid "Download graph for Blender" #~ msgstr "Downloadkurve für Blender" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "%'d Einträge von %'d empfangen (%0.1f Sekunden vergangen)" #~ msgid "Apps Of The Week" #~ msgstr "Anwendungen der Woche" #~ msgid "Show More" #~ msgstr "Mehr anzeigen" #~ msgid "The number of downloads in the last 30 days. Click to view this application's download statistics." #~ msgstr "Die Anzahl der Downloads in den letzten 30 Tagen. Klicken Sie hier, um die Download-Statistiken für diese Anwendung anzuzeigen." #~ msgid "Support this developer" #~ msgstr "Diesen Entwickler unterstützen" #~ msgid "Remote repo name" #~ msgstr "Namen des Repository" #, c-format #~ msgid "Released %x" #~ msgstr "Veröffentlicht %x" #~ msgid "Edit Permissions" #~ msgstr "Berechtigungen bearbeiten" #~ msgid "How the application looks" #~ msgstr "Wie die Anwendung aussieht" #~ msgid "Appearance" #~ msgstr "Erscheinungsbild" #~ msgid "Show animated background" #~ msgstr "Animierten Hintergrund anzeigen" #~ msgid "Type to filter" #~ msgstr "Zum Filtern hier tippen" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Ergebnisse mit proprietären Lizenzen ausschließen" #~ msgid "Exclude results not originating from Flathub" #~ msgstr "Ergebnisse ausschließen, die nicht von Flathub stammen" #~ msgid "Advanced" #~ msgstr "Erweitert" #~ msgid "Open this link externally" #~ msgstr "Diesen Link extern öffnen" #~ msgid "Downloads Over Time" #~ msgstr "Downloads im Laufe der Zeit" #~ msgid "Minimize Lower Bound" #~ msgstr "Untere Grenze verringern" #~ msgid "Maximize Upper Bound" #~ msgstr "Obere Grenze vergrößern" #~ msgid "Installing" #~ msgstr "Wird installiert" #~ msgid "Updating" #~ msgstr "Wird aktualisiert" #~ msgid "Removing" #~ msgstr "Wird entfernt" #~ msgid "Transactions Will Appear Here" #~ msgstr "Transaktionen werden hier erscheinen" #~ msgid "Halt the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen anhalten" #~ msgid "Clear all finished transactions" #~ msgstr "Alle abgeschlossenen Transaktionen leeren" #~ msgid "Confirm Action" #~ msgstr "Aktion bestätigen" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Sie sind dabei, die folgende Anwendung zu entfernen:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sind Sie sich sicher?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Sie sind dabei, die folgende Anwendung zu installieren:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sind Sie sich sicher?" #~ msgid "Resume the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen fortsetzen" #~ msgid "Pause the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen pausieren" #~ msgid "No description" #~ msgstr "Keine Beschreibung" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Bazaar-Hauptfenster zeigt Blender" #~ msgid "Match using regular expressions" #~ msgstr "Übereinstimmung mit regulären Ausdrücken" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "Filterung und Sortierung hinter einem Überblendungseffekt verstecken" bazaar-org-bazaar-b6e9a65/po/bs.po000066400000000000000000000347111522167256300170210ustar00rootroot00000000000000# Bosnian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Manually modified from a previous translation, 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-02 08:40+0200\n" "PO-Revision-Date: 2025-09-02 09:06+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bs\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: Poedit 3.6\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Dodajte, uklonite ili ažurirajte flatpak softver na ovom računaru" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistem;UpraviteljPaketa;Otkrijte;Flatpak;Softver;Prodavnica;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Show Animated Background" msgstr "Prikaži animiranu pozadinu" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Whether to show the animated icon background on the home page" msgstr "Da li već prikazati animiranu pozadinu ikone na početnoj stranici" #. FIXME: add descriptions and summary #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:9 msgid "Keep the summary shorter, between 10 and 35 characters" msgstr "Sažetak neka bude kraći, između 10 i 35 znakova" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:11 msgid "No description" msgstr "Nema opisa" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 src/bz-application.c:1215 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:41 msgid "Main Bazaar window showing Blender" msgstr "Glavni prozor Bazaara koji prikazuje Blender" #: src/bz-addons-dialog.blp:13 src/bz-installed-page.blp:162 #: src/bz-installed-page.blp:174 msgid "Manage Addons" msgstr "Upravljanje dodacima" #: src/bz-app-tile.blp:65 src/bz-full-view.blp:139 msgid "This flatpak is verified by the original developers of the software." msgstr "Ovaj flatpak je verifikovan od strane originalnih programera softvera." #: src/bz-application.c:1186 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:481 msgid "translator-credits" msgstr "SecularSteve" #: src/bz-application.c:1191 msgctxt "About Dialog Translator Credit" msgid "Ahmed Najmawi" msgstr "Ahmed Najmawi" #: src/bz-application.c:1192 msgctxt "About Dialog Translator Credit" msgid "AtomHare" msgstr "AtomHare" #: src/bz-application.c:1193 msgctxt "About Dialog Translator Credit" msgid "Jill Fiore" msgstr "Jill Fiore" #: src/bz-application.c:1194 msgctxt "About Dialog Translator Credit" msgid "Lucosec" msgstr "Lucosec" #: src/bz-application.c:1195 msgctxt "About Dialog Translator Credit" msgid "Shihfu Juan" msgstr "Shihfu Juan" #: src/bz-application.c:1196 msgctxt "About Dialog Translator Credit" msgid "Vlastimil Dědek" msgstr "Vlastimil Dědek" #: src/bz-application.c:1197 msgctxt "About Dialog Translator Credit" msgid "asen23" msgstr "asen23" #: src/bz-application.c:1198 msgctxt "About Dialog Translator Credit" msgid "renner" msgstr "renner" #: src/bz-application.c:1199 msgctxt "About Dialog Translator Credit" msgid "robotta" msgstr "robotta" #: src/bz-browse-widget.blp:11 src/bz-full-view.blp:11 #: src/bz-installed-page.blp:11 src/bz-window.blp:32 msgid "Empty" msgstr "Prazno" #: src/bz-browse-widget.blp:15 msgid "No Curated Applications" msgstr "Nema izloženih aplikacija" #: src/bz-browse-widget.blp:16 msgid "Bazaar was not provided a curated content configuration. Contact your operating system's support channels for assistance." msgstr "Bazaaru nije pružena konfiguracija izloženog sadržaja. Za pomoć kontaktirajte kanale podrške vašeg operativnog sistema." #: src/bz-browse-widget.blp:22 src/bz-flathub-page.blp:11 msgid "Browser" msgstr "Pretraživač" #: src/bz-error.c:45 msgid "An Error Occurred" msgstr "Došlo je do greške" #: src/bz-error.c:51 msgid "Close" msgstr "Zatvori" #: src/bz-error.c:52 msgid "Copy and Close" msgstr "Kopiraj i zatvori" #: src/bz-flathub-page.blp:41 msgid "Apps Of The Week" msgstr "Aplikacije sedmice" #: src/bz-flathub-page.blp:85 msgid "Trending" msgstr "U trendu" #: src/bz-flathub-page.blp:117 msgid "Recently Updated" msgstr "Zadnje ažurirano" #: src/bz-flathub-page.blp:149 msgid "Recently Added" msgstr "Zadnje dodano" #: src/bz-flathub-page.blp:181 msgid "Popular" msgstr "Popularno" #: src/bz-full-view.blp:15 msgid "No Results" msgstr "Nema rezultata" #: src/bz-full-view.blp:16 msgid "Try a different search query" msgstr "Pokušajte s drugim upitom za pretragu" #: src/bz-full-view.blp:22 src/bz-window.blp:42 msgid "Content" msgstr "Sadržaj" #: src/bz-full-view.blp:180 msgid "Run this application" msgstr "Pokreni ovu aplikaciju" #: src/bz-full-view.blp:204 msgid "Download and install this application" msgstr "Preuzmite i instalirajte ovu aplikaciju" #: src/bz-full-view.blp:222 src/bz-window.c:987 msgid "Install" msgstr "Instaliraj" #: src/bz-full-view.blp:236 msgid "Uninstall this application" msgstr "Deinstalirajte ovu aplikaciju" #: src/bz-full-view.blp:262 msgid "Share this application" msgstr "Podijelite ovu aplikaciju" #: src/bz-full-view.blp:274 msgid "The number of downloads in the last 30 days. Click to view this application's download statistics." msgstr "Broj preuzimanja u posljednjih 30 dana. Kliknite za pregled statistike preuzimanja ove aplikacije." #: src/bz-full-view.blp:316 msgid "Support this developer" msgstr "Podržite ovog programera" #: src/bz-full-view.blp:329 msgid "Support" msgstr "Podrška" #: src/bz-full-view.blp:387 msgid "Remote repo name" msgstr "Naziv udaljenog repozitorija" #: src/bz-full-view.blp:400 msgid "Project URL" msgstr "URL projekta" #: src/bz-full-view.blp:412 msgid "Download size" msgstr "Veličina preuzimanja" #: src/bz-full-view.c:214 #, c-format msgid "Released %x" msgstr "Objavljeno %x" #: src/bz-full-view.c:225 msgid "No URL" msgstr "Nema URL-a" #: src/bz-full-view.c:233 msgid "This application has a FLOSS license, meaning the source code can be audited for safety." msgstr "Ova aplikacija ima FLOSS licencu, što znači da se izvorni kod može revidirati radi sigurnosti." #: src/bz-full-view.c:234 msgid "This application has a proprietary license, meaning the source code is developed privately and cannot be audited by an independent third party." msgstr "Ova aplikacija ima vlasničku licencu, što znači da je izvorni kod razvijen privatno i ne može ga revidirati nezavisna treća strana." #: src/bz-installed-page.blp:15 msgid "No Flatpaks Installed" msgstr "Nema instaliranih Flatpak uređaja" #: src/bz-installed-page.blp:21 src/bz-window.blp:201 src/bz-window.blp:336 msgid "Installed" msgstr "Instalirano" #: src/bz-installed-page.blp:143 msgid "More actions" msgstr "Više akcija" #: src/bz-installed-page.blp:187 src/bz-installed-page.blp:198 msgid "Edit Permissions" msgstr "Uredi dozvole" #: src/bz-preferences-dialog.blp:9 msgid "Preferences" msgstr "Postavke" #: src/bz-preferences-dialog.blp:13 msgid "How the application looks" msgstr "Kako izgleda aplikacija" #: src/bz-preferences-dialog.blp:14 msgid "Appearance" msgstr "Izgled" #: src/bz-preferences-dialog.blp:17 msgid "Show animated background" msgstr "Prikaži animiranu pozadinu" #: src/bz-search-widget.blp:69 msgid "Type to filter" msgstr "Upišite tekst za filtriranje" #: src/bz-search-widget.blp:98 src/bz-search-widget.blp:115 msgid "Search Options" msgstr "Opcije pretrage" #: src/bz-search-widget.blp:119 msgid "Exclude results with proprietary licenses" msgstr "Isključi rezultate s vlasničkim licencama" #: src/bz-search-widget.blp:124 msgid "Exclude results not originating from Flathub" msgstr "Isključi rezultate koji ne potiču sa Flathub-a" #: src/bz-search-widget.blp:139 msgid "Advanced" msgstr "Napredno" #: src/bz-search-widget.blp:143 msgid "Match using regular expressions" msgstr "Uparivanje pomoću običnih izraza" #: src/bz-search-widget.blp:148 msgid "Hide filtering and sorting behind a crossfade effect" msgstr "Sakrij filtriranje i sortiranje iza efekta prelaza" #: src/bz-search-widget.blp:153 msgid "Debounce input to prevent instant replies" msgstr "Otodskočite unos kako bi se spriječili brzi odgovori" #: src/bz-share-dialog.blp:13 msgid "Share" msgstr "Podijeli" #: src/bz-share-dialog.blp:64 msgid "Copy this link" msgstr "Kopiraj ovu vezu" #: src/bz-share-dialog.blp:71 msgid "Open this link externally" msgstr "Otvorite ovu vezu eksterno" #: src/bz-stats-dialog.blp:15 msgid "Downloads Over Time" msgstr "Preuzimanja tokom vremena" #: src/bz-stats-dialog.blp:31 msgid "Minimize Lower Bound" msgstr "Minimiziraj donju granicu" #: src/bz-stats-dialog.blp:36 msgid "Maximize Upper Bound" msgstr "Maksimiziraj gornju granicu" #: src/bz-transaction-manager.c:451 #, c-format msgid "Finished in %.02f seconds" msgstr "Završeno za %.02f sekundi" #: src/bz-transaction-view.blp:34 msgid "Installing" msgstr "Instaliranje" #: src/bz-transaction-view.blp:63 msgid "Updating" msgstr "Ažuriranje" #: src/bz-transaction-view.blp:92 msgid "Removing" msgstr "Uklanjanje" #: src/bz-transaction.c:268 msgid "Pending" msgstr "Na čekanju" #: src/bz-update-dialog.blp:6 msgid "Later" msgstr "Kasnije" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "Instaliraj odmah" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "Dostupna su ažuriranja" #: src/bz-update-dialog.blp:11 msgid "The following applications are eligible for updates. Would you like to install them?" msgstr "Sljedeće aplikacije ispunjavaju uslove za ažuriranja. Želite li ih instalirati?" #: src/bz-update-dialog.c:135 #, c-format msgid "%d runtimes and/or addons are eligible for updates. Would you like to install them?" msgstr "%d okruženja za izvršavanje i/ili dodaci ispunjavaju uslove za ažuriranja. Želite li ih instalirati?" #: src/bz-update-dialog.c:143 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "Pored toga, ažurirat će se i sljedeći broj runtime okruženja i/ili dodataka: %d." #: src/bz-window.blp:36 msgid "Transactions Will Appear Here" msgstr "Transakcije će se pojaviti ovdje" #: src/bz-window.blp:97 msgid "Halt the execution of transactions" msgstr "Zaustaviti izvršenje transakcija" #: src/bz-window.blp:105 msgid "Clear all finished transactions" msgstr "Obriši sve završene transakcije" #: src/bz-window.blp:136 src/bz-window.blp:140 msgid "Offline" msgstr "Bez mreže" #: src/bz-window.blp:146 msgid "Loading" msgstr "Učitavanje" #: src/bz-window.blp:170 msgid "Browse" msgstr "Pregledaj" #: src/bz-window.blp:180 msgid "App View" msgstr "Prikaz aplikacije" #: src/bz-window.blp:191 src/bz-window.blp:315 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:220 msgid "Go Back" msgstr "Idi nazad" #: src/bz-window.blp:228 msgid "Refresh" msgstr "Osvježi" #: src/bz-window.blp:237 msgid "Search" msgstr "Pretraži" #: src/bz-window.blp:249 msgid "Update" msgstr "Ažuriraj" #: src/bz-window.blp:263 msgid "Checking for updates" msgstr "Provjera ažuriranja" #: src/bz-window.blp:279 msgid "View curated applications" msgstr "Pogledajte izložene aplikacije" #: src/bz-window.blp:294 msgid "Curated" msgstr "Izloženo" #: src/bz-window.blp:300 msgid "View the latest on Flathub" msgstr "Pogledajte najnovije na Flathub-u" #: src/bz-window.blp:321 msgid "View installed applications" msgstr "Pogledajte instalirane aplikacije" #: src/bz-window.blp:350 msgid "Main Menu" msgstr "Glavni meni" #: src/bz-window.blp:361 msgid "Toggle transaction sidebar" msgstr "Uključi/isključi bočnu traku transakcija" #: src/bz-window.blp:400 msgid "Up to date!" msgstr "Ažurno!" #: src/bz-window.blp:425 msgid "_Keyboard Shortcuts" msgstr "_Prečice na tastaturi" #: src/bz-window.blp:430 msgid "_About Bazaar" msgstr "_O Bazaar-u" #: src/bz-window.blp:435 msgid "_Donate to Bazaar ❤️" msgstr "_Donirajte Bazaaru ❤️" #: src/bz-window.c:856 msgid "" "The ability to inspect and install local .flatpak bundle files is coming soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "Mogućnost pregleda i instaliranja lokalnih .flatpak datoteka paketa uskoro stiže! U međuvremenu, pokušajte pokrenuti\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "u komandnom redu." #: src/bz-window.c:927 msgid "Can't do that right now!" msgstr "To se sada ne može uraditi!" #: src/bz-window.c:940 msgid "Confirm Action" msgstr "Potvrdi radnju" #: src/bz-window.c:958 #, c-format msgid "" "You are about to remove the following Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Are you sure?" msgstr "" "Namjeravate ukloniti sljedeći Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Jeste li sigurni?" #: src/bz-window.c:966 src/bz-window.c:986 msgid "Cancel" msgstr "Otkaži" #: src/bz-window.c:967 msgid "Remove" msgstr "Ukloni" #: src/bz-window.c:978 #, c-format msgid "" "You are about to install the following Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Are you sure?" msgstr "" "Instalirat ćete sljedeći Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Jeste li sigurni?" #: src/bz-window.c:1012 msgid "More details" msgstr "Više detalja" #: src/bz-window.c:1138 msgid "Resume the execution of transactions" msgstr "Nastavite izvršavanje transakcija" #: src/bz-window.c:1144 msgid "Pause the execution of transactions" msgstr "Pauzirajte izvršavanje transakcija" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Općenito" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Otvori dijalog za pretragu" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "Osvježi" #: src/gtk/help-overlay.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Uključi/isključi Upravitelja za transakcije" #: src/gtk/help-overlay.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Prikaži prečice" #: src/gtk/help-overlay.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "Odustani" bazaar-org-bazaar-b6e9a65/po/cs.po000066400000000000000000002673451522167256300170350ustar00rootroot00000000000000# Czech translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Vlastimil Dědek , 2025. # Pavel Borecki , 2026. # Daniel Rusek , 2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-02 23:15+0200\n" "PO-Revision-Date: 2026-07-03 00:58+0200\n" "Last-Translator: Daniel Rusek \n" "Language-Team: Czech\n" "Language: cs\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>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Poedit 3.9\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:47 #: src/bz-window.blp:203 src/bz-window.c:386 src/bz-window.c:387 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "" "Přidávejte, odstraňujte nebo aktualizujte software z flatpaků na tomto " "počítači" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Systém;SprávceBalíčků;Discover;Flatpak;Software;Obchod;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Nové okno" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Objevujte a instalujte aplikace" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Rychlý a moderní obchod s aplikacemi pro Linux se zaměřením na objevování a " "instalaci aplikací a doplňků Flatpaku, zejména z Flathubu." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Zařaďte více instalací do fronty a pokračujte v prohlížení" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Jednoduše si zobrazte oprávnění aplikací" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "" "Přihlaste se pomocí Flathubu pro zobrazení a správu oblíbených aplikací" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Vyhledávejte aplikace přímo z GNOME Shellu" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:787 msgid "The Bazaar Contributors" msgstr "Přispěvatelé aplikace Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Domovská stránka zobrazující aplikace Flathubu" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Stránka aplikace Exhibit" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Stránka knihovny" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Stránka hledání" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Stránka kategorií" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Příjem aktualizací zastaven" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Odinstalovat" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Instalovat" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Spravovat doplňky" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Žádné viditelné doplňky" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Vaše aktuální nastavení filtrů skrývají všechny známé doplňky. Zkuste je " "upravit." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Stránka doplňků" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Stažení/měsíc" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Příjem základních aktualizací zastaven" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Tento doplněk používá běhové prostředí, které již nedostává aktualizace ani " "opravy zabezpečení. Jeho používání nemusí být bezpečné." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Doplněk pro %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 msgid "Show Less" msgstr "Zobrazit méně" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 src/bz-section-view.blp:71 msgid "Show More" msgstr "Zobrazit více" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Statistiky stahování" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Vhodné od věku" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Kreslené násilí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Bez informací o kresleném násilí" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Násilí ve fantasy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Bez informací o násilí ve fantasy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Realistické násilí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Bez informací o realistickém násilí" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Násilí zobrazující krvácení" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Bez informací o krvácení" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Sexuální násilí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Bez informací o sexuálním násilí" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alkohol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Bez informací o odkazech na alkohol" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Narkotika" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Bez informací o odkazech na nezákonné drogy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabák" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Bez informací o odkazech na tabákové produkty" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nahota" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Bez informací o nahotě jakéhokoliv typu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Sexuální tématika" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Bez informací o odkazech na nebo vyobrazení sexuální tématiky" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Vulgarismy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Bez informací o vulgaritách jakéhokoliv typu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Nepřiměřený humor" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Bez informací o nepřiměřeném humoru" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Diskriminace" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Bez informací o diskriminačních projevech jakéhokoliv typu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Reklamy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Bez informací o reklamách jakéhokoliv typu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Hazard" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Bez informací o hazardu jakéhokoliv typu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Nakupování" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Bez informací o možnosti utrácet peníze" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Konverzace mezi uživateli" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Bez informací o způsobech konverzace mezi uživateli" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Hlasová konverzace mezi uživateli" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Bez informací o způsobech hlasové komunikace mezi uživateli" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Kontaktní údaje" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Bez informací o sdílení uživatelských jmen ze sociálních sítí nebo e-" "mailových adres" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Identifikační údaje" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Bez informací o sdílení údajů o uživatelích se třetími stranami" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Sdílení polohy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Bez informací o sdílení fyzické polohy s ostatními uživateli" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostituce" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Bez informací o odkazech na prostituci" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Cizoložství" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Bez informací o odkazech na cizoložství" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Sexualizované postavy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Bez informací o sexualizovaných postavách" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Znesvěcení" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Bez informací o odkazech na znesvěcení" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Lidské ostatky" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Bez informací o viditelných ostatcích mrtvých lidí" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Otroctví" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Bez informací o odkazech na otroctví" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Neobsahuje odkazy na drogy" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Neobsahuje nadávky, vulgarity ani jiné hrubé výrazy" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Neobsahuje reklamy ani peněžní operace" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Neobsahuje sex a nahotu" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Neobsahuje funkci neusměrňované konverzace" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Neobsahuje násilí" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogy" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Hrubé výrazy" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Peníze" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Sociální sítě" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Násilí" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Vše" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "Aplikace %s má neznámé věkové hodnocení" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "Aplikace %s je vhodná pro každého" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "Aplikace %s je vhodná pro malé děti" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "Aplikace %s je vhodná pro děti" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "Aplikace %s je vhodná pro dospívající mládež" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "Aplikace %s je vhodná pro dospělé" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "Aplikace %s je vhodná pro %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Systémová složka %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Podsložka %s v domovské složce" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Složky hostitelského systému" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Konfigurace hostitelského systému z /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Podsložka %s ve složce plochy" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Složka plochy" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Podsložka %s ve složce dokumentů" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Složka dokumentů" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Podsložka %s ve složce hudby" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Složka hudby" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Podsložka %s ve složce obrázků" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Složka obrázků" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Podsložka %s ve složce veřejně sdílených" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Složka veřejně sdílených" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Podsložka %s ve složce videí" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Složka videí" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Podsložka %s ve složce šablon" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Složka šablon" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Podsložka %s ve složce uživatelské mezipaměti" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Složka uživatelské mezipaměti" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Podsložka %s ve složce uživatelské konfigurace" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Složka uživatelské konfigurace" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Podsložka %s ve složce uživatelských dat" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Složka uživatelských dat" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Podsložka %s v uživatelské složce pro běh aplikací" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Uživatelská složka pro běh aplikací" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Přístup k souborovému systému v %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Neznámá cesta souborového systému" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Stahovaná velikost" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Instalovaná velikost" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Velikost ke stažení z internetu" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Velikost na disku" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Otevřít složku uživatelských dat" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Vaše uživatelská data" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Mezipaměti, nastavení a další data aplikací" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Mezipaměť" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Dočasná data v mezipaměti" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Vymazat mezipaměť" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Instalovaná velikost prostředí" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Stahovaná velikost prostředí" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "N/A" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Velikost aplikace" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Ověřeno" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Nainstalováno" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:790 msgid "translator-credits" msgstr "" "Vlastimil Dědek , 2025\n" "Pavel Borecki , 2026\n" "Daniel Rusek , 2026" #: src/bz-application.c:800 msgid "Special Thanks" msgstr "Zvláštní poděkování patří" #: src/bz-application.c:858 msgid "Logged Out Successfully!" msgstr "Úspěšně odhlášeni!" #: src/bz-application.c:1038 msgid "Ubuntu Troubles!" msgstr "Problémy s Ubuntu!" #: src/bz-application.c:1041 msgid "" "The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version of " "Bazaar, please just use the normal package for now by using\n" "\n" "sudo apt install bazaar\n" "\n" "You can then remove this Flatpak version with\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" msgstr "" "Novější verze Ubuntu mají porušená výchozí bezpečnostní pravidla, takže " "není možné instalovat aplikace z Flatpak verze Bazaaru. Prozatím " "prosím použijte normální balíček pomocí\n" "\n" "sudo apt install bazaar\n" "\n" "Tuto Flatpak verzi pak můžete odstranit pomocí\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" #: src/bz-application.c:1047 msgid "Continue Anyway" msgstr "Přesto pokračovat" #: src/bz-application.c:1063 msgid "Performing setup…" msgstr "Provádí se nastavení…" #: src/bz-application.c:1155 msgid "Set Up System Flathub?" msgstr "Nastavit systémový Flathub?" #: src/bz-application.c:1158 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Systémový repozitář Flathub není nastaven. Bazaar vyžaduje, aby byl Flathub " "nastaven na systémové Flatpak instalaci pro procházení a instalaci " "aplikací.\n" "\n" "Bazaar můžete i nadále používat k procházení a odstraňování již " "nainstalovaných aplikací." #: src/bz-application.c:1165 msgid "Set Up Flathub?" msgstr "Nastavit Flathub?" #: src/bz-application.c:1168 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub není v tomto systému nastaven. Pokud není k dispozici, nebudete moci " "procházet a instalovat aplikace v Bazaaru.\n" "\n" "Bazaar můžete i nadále používat k procházení a odstraňování již " "nainstalovaných aplikací." #: src/bz-application.c:1174 msgid "Later" msgstr "Později" #: src/bz-application.c:1175 msgid "Set Up Flathub" msgstr "Nastavit Flathub" #: src/bz-application.c:1699 msgid "A backend error occurred" msgstr "Došlo k chybě backendu" #: src/bz-application.c:1899 src/bz-application.c:4114 msgid "Refreshing…" msgstr "Obnovuje se…" #: src/bz-application.c:2063 src/bz-application.c:4112 #, c-format msgid "Loading %d apps…" msgstr "Načítá se %d aplikací…" #: src/bz-application.c:2116 msgid "Failed to open file" msgstr "Nezdařilo se otevřít soubor" #: src/bz-application.c:2237 msgid "An initialization error occurred" msgstr "Došlo k chybě inicializace" #: src/bz-application.c:2631 msgid "Checking for updates…" msgstr "Kontrolují se aktualizace…" #: src/bz-application.c:2687 msgid "Failed to check for updates" msgstr "Nezdařilo se zkontrolovat aktualizace" #: src/bz-application.c:3824 msgid "Malformed Link" msgstr "Špatně formátovaný odkaz" #: src/bz-application.c:3825 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Odkaz použitý k otevření této aplikace má nesprávné velké písmeno a v " "budoucnu může přestat fungovat.\n" "\n" "To je pravděpodobně způsobeno tím, že KRunner odesílá nesprávná ID aplikací" #: src/bz-application.c:3833 msgid "Could not find app" msgstr "Nezdařilo se najít aplikaci" #: src/bz-application.c:3864 msgid "Failed to load metainfo" msgstr "Nezdařilo se načíst metainfo" #: src/bz-application.c:4116 msgid "Writing to cache…" msgstr "Zapisuje se do mezipaměti…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Zobrazit vše" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Všechny „%s“" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d aplikací" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Nezdařilo se načíst článek" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Instalace balíčku" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Dodatečné závislosti mohou zabírat další místo" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Instalace této aplikace může vyžadovat přidání nového zdroje softwaru. " "Ostatní aplikace z tohoto zdroje se zobrazí v Bazaaru.\n" "\n" "Tento zdroj přidejte, pouze pokud jste si jisti, že mu důvěřujete." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Úspěšně nainstalováno!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Otevřít" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Zobrazit podrobnosti o aplikaci" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Již nainstalováno" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Instalace se nezdařila" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Neznámá velikost instalace" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Přibližně %s k instalaci" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Žádná zvláštní oprávnění" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f mil." #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f tis." #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d stažení za poslední měsíc" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+ prostředí %s" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Stáhnout" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Informace o velikosti nejsou k dispozici" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Stahovaná velikost %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Libovolný věk" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Hodnocení věku není k dispozici" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Vhodné pro všechny věkové skupiny" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Vhodné pro věk %d a více" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Neznámé" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Svobodný software licencovaný pod %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Svobodný software" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Uzavřený software" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Zvláštní licence: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Svobodné" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Uzavřené" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Zvláštní licence" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Adaptivní" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "Pouze pro PC" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Funguje na PC, tabletech a telefonech" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Možná nefunguje na mobilních zařízeních" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Bezpečné" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Nízké riziko" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Střední riziko" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Vysoké riziko" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Prázdné" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Žádné vybrané aplikace" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "V tomto systému nejsou k dispozici žádné informace o vybraných aplikacích. " "Aplikace si stále můžete prohlížet na Flathubu" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Procházet Flathub" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Off-line" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Prohlížeč" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Neověřeno" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Informace o vývojáři nejsou k dispozici." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Vlastnictví ID aplikace %s nebylo ověřeno a může se jednat o komunitní " "balíček." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "Vlastnictví ID aplikace %s bylo ručně ověřeno týmem Flathubu." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Vlastnictví ID aplikace %1$s bylo ověřeno uživatelem %2$s na %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Vlastnictví ID aplikace %1$s bylo ověřeno pomocí %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Vlastnictví ID aplikace %s bylo ověřeno." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Úplné poznámky k vydání" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Toto vydání bylo možné díky uživatelům, jako jste vy!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Miluji vytváření Bazaaru, ale nedokážu to sám. Pomozte podpořit další vývoj " "darováním na Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Podpořit Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Co je nového ve verzi %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Vydáno %-e. %B %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Vyberte instalaci" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Máte nainstalováno několik verzí této aplikace. S kterou chcete pokračovat?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Zrušit" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Pouze pro tohoto uživatele" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "tento uživatel" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "všichni uživatelé" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Podrobnosti" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopírovat" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:415 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Zkopírováno!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Počet oblíbených" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Aktualizace oblíbených se nezdařila" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Přihlaste se pomocí Flathubu pro správu oblíbených aplikací" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Přihlásit se" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:348 msgid "Favorites" msgstr "Oblíbené" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "Instalovat vše" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Načítání" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Žádné oblíbené aplikace" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Aplikace, které označíte jako oblíbené, se zobrazí zde" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Podpořit tuto aplikaci" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Odebrat z oblíbených" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Odebrání z oblíbených se nezdařilo" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Předchozí" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Další" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Úprava" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mixer" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Hudba" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Přehrávač" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Záznamník" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Sekvencer" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Tuner" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Emulace" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Akční" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Adventury" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Arkádové" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Blokové" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Deskové" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Karetní" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Dětské" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Logické" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Na hrdiny" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Střílečky" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Simulace" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Sporty" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Strategické" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Prohlížeče" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Konverzace" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Pošta" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Sdílení souborů" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Audio a video" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Multimédia" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Více z Audio a video" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Vývojářské nástroje" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Vývoj" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Více z Vývojářské nástroje" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Vzdělávání" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Učení" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Více z Vzdělávání" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Hraní her" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Hraní" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Více z Hraní her" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Grafika a fotografie" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Vytváření" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Více z Grafika a fotografie" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Síť" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Více z Síť" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Produktivita" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Práce" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Více z Produktivita" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Věda" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Více z Věda" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Systém" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Více z Systém" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Utility" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Nástroje" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Více z Utility" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Trendy" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Více z Trendů" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Populární" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Více z Populárních" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Nedávno přidané" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nové" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Více z Nových" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Nedávno aktualizované" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Aktualizované" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Více z Aktualizovaných" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Mobilní" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Více z Mobilních" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Více z Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "KDE aplikace" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Více z KDE aplikací" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Hry" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Více z Her" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Emulátory" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Více z Emulátorů" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Spouštěče" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Více z Herních spouštěčů" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Herní nástroje" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Více z Herních nástrojů" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub nebyl přidán" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Repozitář Flathubu nebyl nalezen v žádné z vašich instalací Flatpaku" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub není k dispozici" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Nelze se připojit k Flathubu" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Stále však můžete spravovat a vyhledávat aplikace." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Hledat aplikace" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Znovu připojit" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Aplikace dne" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Na cestách" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Aplikace pro vaše linuxové telefony a tablety" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Více z Mobilních aplikací" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Máme ♥​ hry" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Hry a aplikace pro spuštění vašich oblíbených titulů" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Žádné výsledky" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Zkuste jiný dotaz" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Obsah" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Toto je místní náhled, některé podrobnosti se mohou lišit od zveřejněné verze" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Náhled vzhledu obchodu" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Podpořit" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Tato aplikace používá běhové prostředí, které již nedostává aktualizace ani " "opravy zabezpečení. Její používání nemusí být bezpečné." #: src/bz-full-view.blp:539 msgid "Trash Data" msgstr "Vymazat data" #: src/bz-full-view.blp:602 msgid "Add-ons" msgstr "Doplňky" #: src/bz-full-view.blp:637 msgid "More Add-Ons" msgstr "Více doplňků" #: src/bz-full-view.blp:648 msgid "Links" msgstr "Odkazy" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Žádná adresa URL" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Tato aplikace má licenci FLOSS. To znamená, že její zdrojový kód může být " "ověřen pro bezpečnost." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Tato aplikace má proprietární licenci. To znamená, že její zdrojový kód je " "vyvíjen v soukromí a nemůže být ověřen nezávislou třetí stranou." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Více aplikací" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Více aplikací od %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Další aplikace od tohoto vývojáře" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Další aplikace od %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "Aplikace %s není nainstalována, ale má stále k dispozici %s dat." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Další aplikace" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d aplikace" msgstr[1] "%d aplikace" msgstr[2] "%d aplikací" #: src/bz-full-view.c:506 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Nezdařilo se odstranit uživatelská data" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Podpora hardwaru" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Podpora klávesnice" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Vyžaduje klávesnice" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Doporučuje klávesnice" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Podporuje klávesnice" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Neznámá podpora klávesnic" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Podpora myši" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Vyžaduje myši nebo ukazovátka" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Doporučuje myši nebo ukazovátka" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Podporuje myši nebo ukazovátka" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Neznámá podpora myší nebo ukazovátek" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Podpora dotykových obrazovek" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Vyžaduje dotykové obrazovky" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Doporučuje dotykové obrazovky" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Podporuje dotykové obrazovky" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Neznámá podpora dotykových obrazovek" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Podpora pro mobilní zařízení" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Funguje na mobilních zařízeních" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Nemusí fungovat dobře na mobilních zařízeních" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Podpora pro PC" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Funguje dobře na velkých obrazovkách" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "Aplikace %s funguje nejlépe na konkrétním hardware" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "Aplikace %s funguje na většině zařízení" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Otevřít" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Odinstalovat aplikaci" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "Odeb_rat" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Aktualizovat" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Odebrat" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "Nainstalovat %s od %s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "Nainstalovat %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Zrušit" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Ruší se" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Tlačítko darování" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "hledat nainstalované aplikace" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Vymazat hledání" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Nenalezeny žádné aplikace" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Hledat v obchodě" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:114 msgid "Library" msgstr "Knihovna" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Čekající aktualizace" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Stažení" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Nedávno odinstalované" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Vymazat dokončené úlohy" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Možnosti řazení" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Řadit podle" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Název" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Velikost" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Žádné shody pro výraz „%s“ v seznamu nainstalovaných aplikací" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u dostupná aktualizace" msgstr[1] "%u dostupné aktualizace" msgstr[2] "%u dostupných aktualizací" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u nainstalovaná aplikace" msgstr[1] "%u nainstalované aplikace" msgstr[2] "%u nainstalovaných aplikací" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Zapojit se" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Zjistit více" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Neznámá licence" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Vybudováno komunitou" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Tato aplikace je otevřeně vyvíjena mezinárodní komunitou.\n" "\n" "Můžete se zapojit a pomoci ji ještě vylepšit." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Licence této aplikace není známa" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Tato aplikace je otevřeně vyvíjena mezinárodní komunitou a je uvolněna pod " "licencí %s.\n" "\n" "Můžete se zapojit a pomoci ji ještě vylepšit." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Tato aplikace není vyvíjena otevřeně, takže o jejím fungování vědí pouze " "její vývojáři. Může být nezabezpečena způsobem, který je těžké odhalit, a " "může se měnit, aniž byste o tom věděli.\n" "\n" "Můžete nebo nemusíte být schopni do této aplikace přispívat." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Tato aplikace je vyvíjena pod zvláštní licencí %s.\n" "\n" "Můžete nebo nemusíte být schopni do této aplikace přispívat." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Licence" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Připojit se k Flathubu" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Něco se pokazilo" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "Přihlaste se a synchronizujte své oblíbené aplikace napříč zařízeními" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Dokončit" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Ahoj, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Vyberte soubor metainfo" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Soubory metainfo" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Vyberte ikonu (volitelné)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Soubory obrázků" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Náhled" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Předvolby" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Připojení k síti je měřené – automatické obnovení dat obchodu je pozastaveno" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:236 src/bz-window.blp:247 msgid "Refresh Manually" msgstr "Obnovit ručně" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Filtry obsahu" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Pouze svobodný software" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Skrýt uzavřené aplikace z výsledků vyhledávání" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Pouze výsledky z Flathubu" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "Omezit výsledky vyhledávání pouze na aplikace dostupné na Flathubu" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Pouze ověřené výsledky" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Skrýt výsledky, které nejsou ověřeny na Flathubu" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Skrýt zastaralé aplikace" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Skrýt aplikace, které již nejsou podporované jejich vývojáři" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Motiv ukazatele postupu" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Barevný odstín" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Barvy hrdosti" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Barvy lesbické hrdosti" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Barvy mužské homosexuální hrdosti" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Barvy transgender hrdosti" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Barvy nebinární hrdosti" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Barvy bisexuální hrdosti" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Barvy asexuální hrdosti" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Barvy pansexuální hrdosti" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Barvy aromatické hrdosti" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Barvy genderfluidní hrdosti" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Barvy polysexuální hrdosti" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Barvy omnisexuální hrdosti" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Barvy aroace hrdosti" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Barvy agenderové hrdosti" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Barvy genderqueer hrdosti" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Barvy intersexuální hrdosti" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Barvy demigenderové hrdosti" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Barvy biromantické hrdosti" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Barvy hrdosti invalidů" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Barvy hrdosti femboyů" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Barvy neutrois hrdosti" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "Historie verzí" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "Historie _verzí" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "dnes" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "včera" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "před %d dnem" msgstr[1] "před %d dny" msgstr[2] "před %d dny" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "před %d týdnem" msgstr[1] "před %d týdny" msgstr[2] "před %d týdny" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "před %d měsícem" msgstr[1] "před %d měsíci" msgstr[2] "před %d měsíci" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "před %d rokem" msgstr[1] "před %d roky" msgstr[2] "před %d lety" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e. %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Verze %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Žádné informace o této verzi" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Získat více informací" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Odinstalovat" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Získat" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Neznámá oprávnění" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Pro tuto aplikaci chybí oprávnění." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Žádná oprávnění" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Aplikace je v plně izolovaném prostředí" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Přístup k síti" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Může přistupovat k internetu" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Žádný přístup k síti" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Nemůže přistupovat k internetu" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Přístup k uživatelským zařízením" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Může přistupovat k zařízením jako jsou webkamery nebo herní ovladače" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Žádný přístup k uživatelským zařízením" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Nemůže přistupovat k zařízením jako jsou webkamery nebo herní ovladače" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Přístup ke vstupním zařízením" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Může přistupovat ke vstupním zařízením" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Přístup k mikrofonu a přehrávání zvuku" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "Může poslouchat pomocí mikrofonů a přehrávat zvuk bez žádosti o povolení" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Přístup k systémovým zařízením" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Může přistupovat k systémovým zařízením, která vyžadují zvýšená oprávnění" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Přístup k obsahu obrazovky" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Může přistupovat k obsahu obrazovky nebo jiných oken" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Zastaralý zobrazovací systém" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Vždy používá starý zobrazovací systém (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Libovolná oprávnění" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Může získat libovolná oprávnění" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Nastavení uživatele" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Může zobrazovat a měnit uživatelská nastavení" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Plný přístup k souborovému systému pro čtení/zápis" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Může číst a zapisovat všechna data v souborovém systému" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Přístup k domovské složce pro čtení/zápis" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Může číst a zapisovat všechna data ve vaší domovské složce" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Plný přístup k souborovému systému pro čtení" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Může číst všechna data v souborovém systému" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Přístup k domovské složce pro čtení" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Může číst všechna data ve vaší domovské složce" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Přístup ke složce se staženými soubory pro čtení/zápis" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Může číst a zapisovat všechna data ve vaší složce se staženými soubory" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Přístup ke složce se staženými soubory pro čtení" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Může číst všechna data ve vaší složce se staženými soubory" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Může číst a zapisovat všechna data ve složce" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Může číst všechna data ve složce" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Žádný přístup k souborovému systému" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Vůbec nemůže přistupovat k souborovému systému" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Využívá služby systému" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Může si vyžádat data ze služeb systému mimo portál" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Využívá služby sezení" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Může si vyžádat data ze služeb sezení mimo portál" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Žádný přístup ke službám" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Nemůže přistupovat ke službám sezení nebo systému mimo portál" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Ověřený vývojář aplikace" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "Vývojář této aplikace byl ověřen jako ten, za koho se vydává" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Uzavřený kód" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Zdrojový kód není veřejný, takže jej nelze nezávisle zkontrolovat a nemusí " "být bezpečný" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Otevřený kód" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Zdrojový kód je veřejný a může být nezávisle kontrolován, což zvyšuje " "pravděpodobnost, že je aplikace bezpečná" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Použít službu systému %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Použít službu sezení %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Použít službu %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Může vidět službu mimo portál" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Může komunikovat se službou mimo portál" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Může vlastnit službu mimo portál" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Integrace globální nabídky" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Může zobrazit své nabídky v globálním panelu nabídek" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Integrace nastavení KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Může detekovat změnu nastavení plochy KDE" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Globální nastavení KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Může číst nastavení plochy KDE, jako jsou písma a barvy" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Úložiště služby utajení" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Může ukládat a načítat vlastní hesla pomocí systémové klíčenky" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Služba upozornění plochy" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Může zasílat upozornění plochy" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Integrace do oznamovací oblasti systému" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Může zobrazit ikonu v systémové oznamovací oblasti" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Integrace KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Může komunikovat se zařízeními spárovanými přes KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Tato aplikace má oprávnění, které jí nepřímo umožňuje udělit si jakékoli " "jiné oprávnění, které chce, a obejít tak izolované prostředí Flatpaku.\n" "\n" "Může tedy dělat cokoli, co normální aplikace bez izolovaného prostředí, " "například přistupovat ke všem vašim souborům a připojením k internetu.\n" "\n" "Zobrazení dalších oprávnění vám může stále poskytnout lepší představu o tom, " "co aplikace pravděpodobně udělá." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Zobrazit další oprávnění" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "ID aplikace" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Tato aplikace používá zastaralou verzi softwarové platformy (SDK) a může " "obsahovat chyby nebo slabá místa zabezpečení, která nebudou opravena." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Bezpečnost" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "Aplikace %s je bezpečná" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "Aplikace %s nemá žádná nebezpečná oprávnění" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "Aplikace %s je pravděpodobně bezpečná" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "Aplikace %s pravděpodobně není bezpečná" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "Aplikace %s není bezpečná" #: src/bz-screenshot-page.blp:41 msgid "Back" msgstr "Zpět" #: src/bz-screenshot-page.blp:71 msgid "Previous Screenshot" msgstr "Předchozí snímek obrazovky" #: src/bz-screenshot-page.blp:81 msgid "Next Screenshot" msgstr "Následující snímek obrazovky" #: src/bz-screenshot-page.blp:97 msgid "Copy Image" msgstr "Kopírovat obrázek" #: src/bz-screenshot-page.blp:160 msgid "Reset View" msgstr "Původní" #: src/bz-screenshot-page.blp:171 msgid "Zoom Out" msgstr "Oddálit" #: src/bz-screenshot-page.blp:181 msgid "Zoom In" msgstr "Přiblížit" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Prohlížeč snímků obrazovky" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Žádné snímky obrazovky" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Otevřít prohlížeč snímků obrazovky" #: src/bz-screenshots-carousel.c:308 #, c-format msgid "Screenshot %u %s" msgstr "Snímek %u %s" #: src/bz-screenshots-carousel.c:310 #, c-format msgid "Screenshot %u" msgstr "Snímek %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filtry" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "O_věřené" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Svobodné/otevřené" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "N_ezastaralé" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Filtrovat zastaralé aplikace" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Mobilní aplikace" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Kategorie" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "hledat aplikace, hry, software" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Filtry vyhledávání" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Vymazat hledání" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Procházet kategorie" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Kategorie nejsou k dispozici" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Vyhledejte aplikace pomocí vyhledávacího panelu výše." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Nenalezeny žádné aplikace" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Žádné výsledky pro „%s“ v Flathubu" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Video" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Kancelář" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Kalendář" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Zasílání zpráv" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Malování" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulátor" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Stránka na Flathubu" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Stránky projektu" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Sledování problémů" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Časté otázky" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Nápověda" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Věnovat dar" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Překlad" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Kontakt" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Zdrojový kód" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Přispět" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifest" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Kopírovat odkaz" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Časová osa" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Počet instalací:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Svět" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Od 15. 4. 2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2f mil. celkových instalací" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2f tis. celkových instalací" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d celkových instalací" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Nenalezeny žádné výsledky" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "Hledání se nezdařilo" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Ponechat uživatelská data" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Povolit obnovení uživatelských nastavení a obsahu" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Odstranit všechna data" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Trvale odstranit uživatelská data, aby se ušetřilo místo" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Nainstalovat %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Vyberte verzi, kterou chcete nainstalovat. Může dojít k instalaci dalších " "sdílených komponent" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Může nainstalovat dodatečné sdílené komponenty" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Zrušit" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Instalovat" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Odebrat %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Vyberte, kterou verzi chcete odebrat." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Po odinstalování nebude možné aplikaci %s používat." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "Aplikace „%s“ je vysoce riziková" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Tato aplikace má plný přístup k vašemu systému, včetně všech vašich " "souborů, historie prohlížení, uložených hesel a dalších údajů. Má také " "přístup k internetu, což znamená, že může odesílat vaše data externím " "stranám.\n" "\n" "Protože je aplikace uzavřený software, nelze auditovat, co s těmito " "oprávněními dělá." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Tato aplikace používá starší okenní systém X11, který jí umožňuje " "zaznamenávat všechny stisky kláves, pořizovat snímky obrazovky a " "monitorovat další aplikace. Má také přístup k internetu, což znamená, že " "může odesílat vaše data externím stranám.\n" "\n" "Protože je aplikace uzavřený software, nelze auditovat, co s těmito " "oprávněními dělá." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "Přesto na_instalovat" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Nezdařilo se načíst dialogové okno transakce" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Všechny aplikace jsou již nainstalovány" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Budiž" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Nainstalovat %u aplikaci?" msgstr[1] "Nainstalovat %u aplikace?" msgstr[2] "Nainstalovat %u aplikací?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Následující aplikace budou nainstalovány. Mohou být také nainstalovány další " "sdílené komponenty" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Bude nainstalováno %d doplňků." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Kromě toho budou nainstalovány doplňky." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Instalovat vše" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Dokončeno v %.02f sekundách" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Doplněk aplikace" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Prostředí" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Ve frontě" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Hotovo" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Zrušeno" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Chyba" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Zrušit transakci" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Zobrazit podrobnosti" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Zobrazit informace o chybě" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s uvolněno" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Chyba transakce" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Čeká" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "Akt_ualizovat vše" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u aktualizace prostředí" msgstr[1] "%u aktualizace prostředí" msgstr[2] "%u aktualizací prostředí" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Správa zbylých uživatelských dat" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Nenalezena žádná uživatelská data" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Uživatelská data" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Vymazat uživatelská data" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Uživatelská data aplikace %s byla vymazána" #: src/bz-window.blp:72 msgid "Refreshing" msgstr "Obnovuje se" #: src/bz-window.blp:90 msgid "Curated" msgstr "Vybrané" #: src/bz-window.blp:102 msgid "Explore" msgstr "Procházet" #: src/bz-window.blp:129 msgid "Search" msgstr "Vyhledávání" #: src/bz-window.blp:216 msgid "Main Menu" msgstr "Hlavní nabídka" #: src/bz-window.blp:227 msgid "You are running a new version of Bazaar!" msgstr "Používáte novou verzi Bazaaru!" #: src/bz-window.blp:228 msgid "See What's New" msgstr "Podívejte se, co je nového" #: src/bz-window.blp:235 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Máte připojení k síti, ale prohlížíte si verzi Flathubu uloženou v mezipaměti" #: src/bz-window.blp:246 msgid "Network connection is metered — automatic refreshes disabled" msgstr "Připojení k síti je měřené – automatická obnovení jsou zakázána" #: src/bz-window.blp:292 msgid "_Donate to Bazaar" msgstr "Po_dpořit Bazaar" #: src/bz-window.blp:298 msgid "_Refresh" msgstr "_Obnovit" #: src/bz-window.blp:302 msgid "_Login With Flathub" msgstr "Přih_lásit se pomocí Flathubu" #: src/bz-window.blp:308 msgid "_Manage Leftover User Data" msgstr "Sp_ravovat zbylá uživatelská data" #: src/bz-window.blp:314 msgid "_Preferences" msgstr "_Předvolby" #: src/bz-window.blp:319 msgid "_Keyboard Shortcuts" msgstr "_Klávesové zkratky" #: src/bz-window.blp:324 msgid "_About Bazaar" msgstr "O _aplikaci Bazaar" #: src/bz-window.blp:330 msgid "_Quit Bazaar" msgstr "_Ukončit Bazaar" #: src/bz-window.blp:355 msgid "Log Out" msgstr "Odhlásit se" #. Translators: %s is the title of the current page #: src/bz-window.c:389 #, c-format msgid "Bazaar — %s" msgstr "Bazaar – %s" #: src/bz-window.c:609 src/bz-window.c:647 msgid "Failed to launch application" msgstr "Aplikaci se nezdařilo spustit" #: src/bz-window.c:860 msgid "You can't remove Bazaar from Bazaar!" msgstr "Bazaar nelze odstranit z Bazaaru!" #: src/bz-window.c:1166 src/bz-window.c:1200 msgid "Can't do that right now!" msgstr "Toto teď nelze provést!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "instalace" msgstr[1] "instalace" msgstr[2] "instalací" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navigace" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Otevřít stránku procházení" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Otevřít stránku knihovny" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Otevřít stránku vyhledávání" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Repozitáře" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Synchronizovat repozitáře" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Obecné" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Otevřít předvolby" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Zobrazit zkratky" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Zavřít okno" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Ukončit Bazaar" bazaar-org-bazaar-b6e9a65/po/de.po000066400000000000000000002746261522167256300170200ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # # SPDX-FileCopyrightText: 2025, 2026 renner # renner , 2025. # # SPDX-FileCopyrightText: 2026 min7-i msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-11 17:58+0200\n" "PO-Revision-Date: 2026-06-20 14:43+0200\n" "Last-Translator: min7-i \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: Lokalize 26.04.2\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Hinzufügen, Entfernen oder Aktualisieren von Apps auf diesem Computer" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;Paketverwaltung;Discover;Flatpak;Software;Store;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Neues Fenster" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Apps entdecken und verwalten" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Ein schneller und moderner App-Store für Linux mit Schwerpunkt auf dem " "Entdecken und der Installation von Flatpak-Apps und -Erweiterungen, " "insbesondere von Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "" "Melden Sie sich bei Flathub an, um Ihre Favoriten zu sehen und zu verwalten" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:784 msgid "The Bazaar Contributors" msgstr "Die Bazaar Mitwirkenden" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Die Startseite mit den Flathub-Apps" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Bibliotheksseite" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Suchseite" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Kategorienseite" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Erhält keine Aktualisierungen mehr" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Deinstallieren" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 #: src/bz-bundle-install-dialog.blp:159 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Installieren" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Erweiterungen verwalten" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Keine Erweiterungen sichtbar" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Ihre aktuellen Filtereinstellungen blenden alle bekannten Erweiterungen aus. " "Versuche Sie, sie anzupassen." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Erweiterungsseite" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "Downloads/Monat" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Diese Erweiterung verwendet eine Laufzeitumgebung, die keine Updates oder " "Sicherheitsaktualisierungen mehr erhält. Die Nutzung könnte unsicher werden." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Erweiterung für %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Weniger anzeigen" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Mehr anzeigen" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Downloadstatistiken" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Alterseinstufung" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Cartoon-Gewalt" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Keine Informationen über Cartoon-Gewalt" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Fantasie-Gewalt" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Keine Informationen über Fantasie-Gewalt" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Realistische Gewalt" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Keine Informationen über realistische Gewaltdarstellung" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Darstellung von Blutvergießen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Keine Informationen über Blutvergießen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Sexuelle Gewalt" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Keine Informationen über Sexuelle Gewalt" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alkohol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Keine Informationen über Alkohol" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Betäubungsmittel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Keine Informationen über unerlaubten Drogen/Medikamente" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Keine Informationen über Tabakprodukte" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nacktheit" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Keine Informationen über Nacktszenen irgendeiner Form" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Sexuelle Themen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Keine Informationen über Anspielungen oder Darstellungen sexueller Natur" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Obszönität" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Keine Informationen über Obszönität irgendeiner Art" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Unangemessener Humor" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Keine Informationen über unangemessenen Humor" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Diskriminierung" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Keine Informationen über diskriminierender Sprache irgendeiner Art" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Werbung" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Keine Informationen über Werbung irgendeiner Art" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Glücksspiel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Keine Informationen über Glücksspiel irgendeiner Art" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Einkauf" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Keine Informationen über die Möglichkeit, reales Geld auszugeben" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Mit anderen Nutzern chatten" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "" "Keine Informationen über die Möglichkeit, mit anderen Nutzern zu chatten." #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Audio-Chat zwischen Nutzern" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Keine Informationen über die Möglichkeit, mit anderen Nutzern zu sprechen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Kontaktdetails" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Keine Informationen über das Teilen von Benutzernamen und E-Mail-Adressen " "über soziale Netzwerke" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Identifizierende Informationen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Keine Informationen über das Teilen von Benutzerinformationen mit Dritten" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Standortfreigabe" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Keine Informationen über das Teilen des physischen Aufenthaltsortes mit " "anderen Nutzern" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostitution" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Keine Informationen über die Erwähnung von Prostitution" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Ehebruch" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Keine Informationen über die Erwähnung von Ehebruch" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Sexualisierten Figuren" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Keine Informationen über sexualisierte Figuren" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Schändung" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Keine Informationen über Erwähnungen von Schändung" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Menschliche Überreste" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Keine Informationen über sichtbare menschliche Überreste" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Sklaverei" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Keine Informationen über die Erwähnung von Sklaverei" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Enthält keine Erwähnungen von Drogen" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Enthält keine Schimpfwörter, Obszönitäten und andere Arten von vulgärer " "Sprache" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Enthält keine Werbung oder Geldtransaktionen" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Enthält keine sexuellen Inhalte oder Nacktheit" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Enthält keine unkontrollierte Chat-Funktion" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Enthält keine Gewalt" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogen" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Kraftausdrücke" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Geld" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Soziales" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Gewalt" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Alle" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s hat ein unbekannte Alterseinstufung" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s ist für alle geeignet" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s ist für junge Kinder geeignet" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s ist für Kinder geeignet" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s ist für Jugendliche geeignet" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s ist für Erwachsene geeignet" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s is geeignet für %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Systemordner %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Desktop-Unterordner %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Desktopordner" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Dokumentenordner" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Musik-Unterordner %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Musikordner" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Bilderordner" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Öffentlicher Ordner" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Video-Unterordner %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Videoordner" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Vorlagenordner" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Downloadgröße" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Installierte Größe" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Ihre Benutzerdaten" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Cache" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Cache leeren" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Installierte Größe der Laufzeitumgebung" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Downloadgröße der Laufzeitumgebung" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:392 #: src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "N/V" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "App-Größe" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Verifiziert" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Installiert" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:787 msgid "translator-credits" msgstr "" "renner\n" "Mandarinoo\n" "min7-i" #: src/bz-application.c:797 msgid "Special Thanks" msgstr "Besonderer Dank" #: src/bz-application.c:855 msgid "Logged Out Successfully!" msgstr "Erfolgreich abgemeldet!" #: src/bz-application.c:993 msgid "Performing setup…" msgstr "Einrichtung wird durchgeführt…" #: src/bz-application.c:1085 msgid "Set Up System Flathub?" msgstr "" #: src/bz-application.c:1088 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" #: src/bz-application.c:1095 msgid "Set Up Flathub?" msgstr "Flathub einrichten?" #: src/bz-application.c:1098 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" #: src/bz-application.c:1104 msgid "Later" msgstr "Später" #: src/bz-application.c:1105 msgid "Set Up Flathub" msgstr "Flathub einrichten" #: src/bz-application.c:1623 msgid "A backend error occurred" msgstr "Ein Backend-Fehler ist aufgetreten" #: src/bz-application.c:1823 src/bz-application.c:4003 msgid "Refreshing…" msgstr "Wird aktualisiert..." #: src/bz-application.c:1987 src/bz-application.c:4001 #, c-format msgid "Loading %d apps…" msgstr "%d Apps werden geladen..." #: src/bz-application.c:2040 msgid "Failed to open file" msgstr "" #: src/bz-application.c:2138 msgid "An initialization error occurred" msgstr "Ein Intitialisierungsfehler ist aufgetreten" #: src/bz-application.c:2532 msgid "Checking for updates…" msgstr "Wird auf Aktualisierungen geprüft…" #: src/bz-application.c:2588 msgid "Failed to check for updates" msgstr "Prüfung auf Aktualisierungen ist fehlgeschlagen" #: src/bz-application.c:3714 msgid "Malformed Link" msgstr "" #: src/bz-application.c:3715 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" #: src/bz-application.c:3723 msgid "Could not find app" msgstr "App konnte nicht gefunden werden" #: src/bz-application.c:3754 msgid "Failed to load metainfo" msgstr "" #: src/bz-application.c:4005 msgid "Writing to cache…" msgstr "" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Alle anzeigen" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "Alle \"%s\"" #: src/bz-apps-page.c:487 #, c-format msgid "%d Applications" msgstr "%d Apps" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Bundle-Installation" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "Erfolgreich installiert!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Öffnen" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "App-Details anzeigen" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "Bereits installiert" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "Installation fehlgeschlagen" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Unbekannte Installationsgöße" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Keine Spezialberechtigungen" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d Downloads im letzten Monat" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s Laufzeitumgebung" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Download" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Information über Größe nicht verfügbar" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Downloadgröße von %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Alle Altersgruppen" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Geeignet für alle Altersgruppen" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Unbekannt" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Freie Software lizenziert unter %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Freie Software" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Proprietäre Software" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Besondere Lizenz: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Frei" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Proprietär" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Besondere Lizenz" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Adaptiv" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Nur Desktop" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Funktioniert auf Desktops, Tablets und Smartphones" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "Sicher" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Geringes Risiko" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Mittleres Risiko" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Hohes Risiko" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Leer" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Keine vorgestellten Apps" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Flathub durchsuchen" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Offline" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Browser" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Nicht verifiziert" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "" #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "" #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "An Bazaar spenden" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Was ist neu in %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Veröffentlicht %B %-e, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Installationsart auswählen" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Sie haben mehrere Versionen dieser App installiert. Mit welcher möchten Sie " "fortfahren?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Abbrechen" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Nur für diesen Benutzer" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "dieser Benutzer" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "alle Benutzer" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:46 msgid "Details" msgstr "Details" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopieren" #: src/bz-error-dialog.c:56 src/bz-share-list.c:364 msgid "Copied!" msgstr "Kopiert." #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Mit Flathub anmelden, um Favoriten zu verwalten" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Anmelden" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "Favoriten" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Alle installieren" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Wird geladen" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Keine Favoriten" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Diese App unterstützen" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Aus Favoriten entfernen" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Zurück" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Weiter" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Musik" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Emulation" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Action" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Adventure" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Arcade" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Logik" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Shooter" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Simulation" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Sport" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Strategie" #: src/bz-flathub-category.c:124 msgid "Browsers" msgstr "Browser" #: src/bz-flathub-category.c:125 msgid "Chat" msgstr "Chat" #: src/bz-flathub-category.c:126 msgid "Mail" msgstr "E-Mail" #: src/bz-flathub-category.c:127 msgid "File Sharing" msgstr "Dateifreigabe" #: src/bz-flathub-category.c:132 msgid "Audio & Video" msgstr "Audio & Video" #: src/bz-flathub-category.c:132 msgid "Media" msgstr "Media" #: src/bz-flathub-category.c:132 msgid "More Audio & Video" msgstr "Mehr Audio & Video" #: src/bz-flathub-category.c:133 msgid "Developer Tools" msgstr "Entwicklungswerkzeuge" #: src/bz-flathub-category.c:133 msgid "Develop" msgstr "Entwickeln" #: src/bz-flathub-category.c:133 msgid "More Developer Tools" msgstr "Mehr Entwicklerwerkzeuge" #: src/bz-flathub-category.c:134 msgid "Education" msgstr "Bildung" #: src/bz-flathub-category.c:134 msgid "Learn" msgstr "Lernen" #: src/bz-flathub-category.c:134 msgid "More Education" msgstr "Mehr Bildung" #: src/bz-flathub-category.c:135 msgid "Gaming" msgstr "Gaming" #: src/bz-flathub-category.c:135 msgid "Play" msgstr "Spielen" #: src/bz-flathub-category.c:135 msgid "More Gaming" msgstr "Mehr Gaming" #: src/bz-flathub-category.c:136 msgid "Graphics & Photography" msgstr "Grafik & Fotografie" #: src/bz-flathub-category.c:136 msgid "Create" msgstr "Erstellen" #: src/bz-flathub-category.c:136 msgid "More Graphics & Photography" msgstr "Mehr Grafik & Fotografie" #: src/bz-flathub-category.c:137 msgid "Networking" msgstr "Netzwerk" #: src/bz-flathub-category.c:137 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:137 msgid "More Networking" msgstr "Mehr Netzwerk" #: src/bz-flathub-category.c:138 msgid "Productivity" msgstr "Produktivität" #: src/bz-flathub-category.c:138 msgid "Work" msgstr "Arbeit" #: src/bz-flathub-category.c:138 msgid "More Productivity" msgstr "Mehr Produktivität" #: src/bz-flathub-category.c:139 msgid "Science" msgstr "Wissenschaft" #: src/bz-flathub-category.c:139 msgid "More Science" msgstr "Mehr Wissenschaft" #: src/bz-flathub-category.c:140 msgid "System" msgstr "System" #: src/bz-flathub-category.c:140 msgid "More System" msgstr "Mehr System" #: src/bz-flathub-category.c:141 msgid "Utilities" msgstr "Dienstprogramme" #: src/bz-flathub-category.c:141 msgid "Tools" msgstr "Werkzeuge" #: src/bz-flathub-category.c:141 msgid "More Utilities" msgstr "Mehr Dienstprogramme" #: src/bz-flathub-category.c:142 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Im Trend" #: src/bz-flathub-category.c:142 msgid "More Trending" msgstr "Mehr von „Im Trend“" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:171 msgid "Popular" msgstr "Beliebt" #: src/bz-flathub-category.c:143 msgid "More Popular" msgstr "Mehr von „Beliebt“" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "Kürzlich hinzugefügt" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:121 msgid "New" msgstr "Neu" #: src/bz-flathub-category.c:144 msgid "More New" msgstr "Mehr Neues" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "Kürzlich aktualisiert" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Aktualisiert" #: src/bz-flathub-category.c:145 msgid "More Updated" msgstr "Mehr von „Aktualisiert“" #: src/bz-flathub-category.c:146 msgid "Mobile" msgstr "Mobil" #: src/bz-flathub-category.c:146 msgid "More Mobile" msgstr "Mehr Mobil" #: src/bz-flathub-category.c:147 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:147 msgid "More Adwaita" msgstr "Mehr Adwaita" #: src/bz-flathub-category.c:148 msgid "KDE Apps" msgstr "KDE-Apps" #: src/bz-flathub-category.c:148 msgid "More KDE Apps" msgstr "Mehr KDE-Apps" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub wurde nicht hinzugefügt" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Flathub wurde auf keiner Ihrer Flatpak-Installationen gefunden." #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub nicht erreichbar" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Flathub nicht erreichbar" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "" #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Apps suchen" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "App des Tages" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "Unterwegs" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Mehr Mobile Apps" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "Wir ♥​ Spiele" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "Mehr Spiele" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Keine Ergebnisse" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Versuchen Sie eine andere Suchanfrage" #: src/bz-full-view.blp:41 msgid "Content" msgstr "Inhalt" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Vorschau des Store-Erscheinungsbilds" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "_Unterstützen" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Diese App verwendet eine Laufzeitumgebung, die keine Updates und " "Sicherheitsaktualisierungen mehr enthält. Sie könnte unsicher zu verwenden " "werden." #: src/bz-full-view.blp:545 msgid "Trash Data" msgstr "" #: src/bz-full-view.blp:607 msgid "Add-ons" msgstr "Erweiterungen" #: src/bz-full-view.blp:642 msgid "More Add-Ons" msgstr "Mehr Erweiterungen" #: src/bz-full-view.blp:653 msgid "Links" msgstr "" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Keine URL" #: src/bz-full-view.c:199 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Diese App steht unter einer FLOSS-Lizenz, was bedeutet, dass der Quellcode " "auf Sicherheit geprüft werden kann." #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Diese App hat eine proprietäre Lizenz, das bedeute, dass der Quellcode " "privat entwickelt wird und kann nicht von einer unabhängigen dritten Partei " "überprüft werden." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Mehr Apps" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Mehr Apps von %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Andere Apps von diesem Entwickler" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Andere Apps von %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Andere Apps" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d App" msgstr[1] "%d Apps" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Hardwareunterstützung" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Tastaturunterstützung" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Benötigt Tastatur" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Tastatur empfohlen" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Unterstützt Tastaturen" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Tastaturunterstützung unbekannt" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Mausunterstützung" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Benötigt Maus oder anderes Zeigegerät" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Maus oder anderes Zeigegerät empfohlen" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Unterstützt Mäuse und andere Zeigegeräte" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Mausunterstützung unbekannt" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Touchscreen-Unterstützung" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Benötigt einen Touchscreen" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Empfiehlt Touchscreen" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Unterstützt Touchscreens" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Touchscreen-Unterstützung unbekannt" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Mobilgeräteunterstützung" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Funktioniert auf Mobilgeräten" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Könnte auf Mobilgeräten nicht gut funktionieren" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Desktop-Unterstützung" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Funktioniert gut auf großen Bildschirmen" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s funktioniert auf den meisten Geräten" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Öffnen" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "App deinstallieren" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Entfernen" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Aktualisieren" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Entfernen" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Abbrechen" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Wird abgebrochen" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Installierte Apps anzeigen" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Suche löschen" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Keine Apps gefunden" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Bibliothek" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "Anstehende Aktualisierungen" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "Downloads" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "Kürzlich deinstalliert" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "Abgeschlossene Aufgaben löschen" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "Sortieren nach" #: src/bz-library-page.blp:348 msgid "Name" msgstr "Name" #: src/bz-library-page.blp:354 msgid "Size" msgstr "Größe" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u verfügbare Aktualisierung" msgstr[1] "%u verfügbare Aktualisierungen" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u installierte App" msgstr[1] "%u installierte Apps" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "Machen Sie mit" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "Mehr erfahren" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Unbekannte Lizenz" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Entwickelt von der Gemeinschaft" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "Lizenz" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Mit Flathub verbinden" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Leider ist ein Fehler aufgetreten" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Fertigstellen" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Hallo %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Bilddateien" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Vorschau" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Einstellungen" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "Manuell aktualisieren" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Inhaltsfilter" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Nur freie Software" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "" "Proprietäre Apps beim Durchsuchen und in den Suchergebnissen ausblenden" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Nur Flathub Ergebnisse" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Suchergebnisse und Inhalte auf nur in Flathub verfügbare Apps beschränken" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Nur verifizierte Ergebnisse" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Apps ausschließen, die nicht von Flathub verifiziert wurden" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Veraltete Apps ausblenden" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Apps ausschließen, die nicht mehr aktiv weiterentwickelt werden" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Fortschrittsbalken-Design" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Akzentfarbe" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Pride-Farben" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Lesbian Pride-Farben" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Gay Pride-Farben" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Transgender Pride-Farben" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Nichtbinäre Pride-Farben" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Bisexuelle Pride-Farben" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Asexuelle Pride-Farben" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Pansexuelle Pride-Farben" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Aromantische Pride-Farben" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Genderfluide Pride-Farben" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Polysexuelle Pride-Farben" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Omnisexuelle Pride-Farben" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Aroace Pride-Farben" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Agender Pride-Farben" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Genderqueere Pride-Farben" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Intersexuelle Pride-Farben" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Demigender-Pride-Farben" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Bi-romantische Pride-Farben" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Pride-Farben der Behindertenbewegung" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Femboy-Pride-Farben" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Neutrois-Pride-Farben" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Versionsverlauf" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Versionsverlauf" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Heute" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Gestern" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "Vor %d Tag" msgstr[1] "Vor %d Tagen" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "Vor %d Woche" msgstr[1] "Vor %d Wochen" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "Vor %d Monat" msgstr[1] "Vor %d Monaten" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "Vor %d Jahr" msgstr[1] "Vor %d Jahren" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Version: %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Keine Details für diese Veröffentlichung" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Weitere Informationen erhalten" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Deinstallieren" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "Installieren" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Unbekannte Berechtigungen" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "" #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Keine Berechtigungen" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "App ist vollständig isoliert" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Netzwerk-Zugriff" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Hat Zugriff auf das Internet" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Kein Netzwerk-Zugriff" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Hat keinen Zugriff auf das Internet" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "Willkürliche Berechtigungen" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Benutzereinstellungen" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Kein Dateisystemzugriff" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Verifizierter App-Entwickler" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Proprietärer Code" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Auditierbarer Code" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE Connect-Integration" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "" #: src/bz-safety-dialog.blp:60 msgid "App ID" msgstr "App-ID" #: src/bz-safety-dialog.blp:70 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:101 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "Sicherheit" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "%s ist sicher" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s hat keine unsicheren Berechtigungen" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s ist möglicherweise unsicher" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "%s ist unsicher" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Bild kopieren" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Ansicht zurücksetzen" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Verkleinern" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Vergrößern" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filter" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Verifiziert" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Nicht-_EOL" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Kategorien" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Nach Apps, Spielen und Software suchen" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Suchfilter" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Suche löschen" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Kategorien durchsuchen" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "Kategorien nicht verfügbar" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "" #: src/bz-search-page.blp:362 msgid "No Applications Found" msgstr "Keine App gefunden" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Video" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Büro" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Kalender" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulator" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub-Seite" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Projekt-Webseite" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Bugtracker" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Hilfe" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Spenden" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Übersetzen" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Kontakt" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Quellcode" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Mitmachen" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Link kopieren" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Zeitleiste" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Installationen:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Welt" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Seit 15.4.2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM Installationen gesamt" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK Installationen gesamt" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d Installationen gesamt" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Benutzerdaten behalten" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Alle Daten löschen" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "%s installieren?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Wählen Sie die zu installierende Version. Es können zusätzliche gemeinsam genu" "tzte Komponenten installiert werden" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "" "Es könnten zusätzliche gemeinsam genutzte Komponenten installiert werden" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Abbrechen" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Installieren" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "%s entfernen?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Wählen Sie die Version, die entfernt werden soll." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "" "Es wird nicht mehr möglich sein, %s nach der Deinstallation auszuführen." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Trotzdem installieren" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Alle Apps sind bereits installiert" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_OK" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "%u App installieren?" msgstr[1] "%u Apps installieren?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d Erweiterungen werden installiert." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Zusätzlich werden Erweiterungen installiert." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Alle installieren" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "In %.02f Sekunden abgeschlossen" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "App-Erweiterung" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Laufzeitumgebung" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "In der Warteschlange" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Abgeschlossen" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Abgebrochen" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Fehler" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Vorgang abbrechen" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Fehlerinformationen anzeigen" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Freigegeben" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Transaktionsfehler" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Ausstehend" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_ Alle aktualisieren" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "" msgstr[1] "" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Benutzerdaten bereinigen" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Keine Benutzerdaten gefunden" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Benutzerdaten" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Benutzerdaten löschen" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Wird aktualisiert" #: src/bz-window.blp:89 msgid "Curated" msgstr "Vorgestellt" #: src/bz-window.blp:101 msgid "Explore" msgstr "Erkunden" #: src/bz-window.blp:128 msgid "Search" msgstr "Suchen" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Hauptmenü" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Sie verwenden eine neue Version von Bazaar!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Neuerungen ansehen" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "_An Bazaar spenden" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "_Aktualisieren" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "_Mit Flathub anmelden" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "_Benutzerdaten bereinigen" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "_Einstellungen" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "_Tastaturkurzbefehle" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "_Über Bazaar" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "_Bazaar beenden" #: src/bz-window.blp:342 msgid "Log Out" msgstr "Abmelden" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Start der App fehlgeschlagen" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Das kann momentan nicht getan werden." #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Installation" msgstr[1] "Installationen" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navigation" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Erkunden-Seite öffnen" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Bibliothek-Seite öffnen" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Such-Seite öffnen" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Remotes synchronisieren" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Allgemein" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Einstellungen öffnen" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Kurzbefehle anzeigen" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Fenster schließen" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Bazaar beenden" #~ msgid "Retry Flathub Connection" #~ msgstr "Nur Flathub-Apps anzeigen" #~ msgid "Tags:" #~ msgstr "Stichwörter:" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "Verbinden Sie Ihr Flathub-Konto mit Bazaar, um Ihre favorisierten Apps zu " #~ "verwalten." #~ msgid "Delay Search Results" #~ msgstr "Suchergebnisse verzögern" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "Ergebnis-Performance durch Debouncing der Suchbegriffe verbessern" #~ msgid "Progress Bar" #~ msgstr "Fortschrittsbalken" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Wählen Sie ein Design für den Fortschrittsbalken!" #~ msgid "Open Link" #~ msgstr "Link öffnen" #~ msgid "No Results Found" #~ msgstr "Keine Ergebnisse gefunden" #~ msgid "Search failed" #~ msgstr "Suchen fehlgeschlagen" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Es legt Wert darauf, die Entwickler zu unterstützen, die den Linux-" #~ "Desktop möglich machen. Bazaar verfügt über ein „vorgestellt”-" #~ "Unterfenster, der von Distributoren eingerichtet werden kann, um eine " #~ "lokalisiertere Erfahrung zu ermöglichen." #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "Nucleus app page" #~ msgstr "Seite der Nucleus App" #, fuzzy #~ msgid "_Refresh Content" #~ msgstr "Store-Inhalt aktualisieren" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Synchronizing..." #~ msgstr "Abgleichen …" #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "%d Einträge empfangen …" #~ msgid "Close" #~ msgstr "Schließen" #~ msgid "Copy and Close" #~ msgstr "Kopieren und Schließen" #~ msgid "Toggle transaction sidebar" #~ msgstr "Seitenleiste für Transaktionen anzeigen" #~ msgid "Download & Install Application" #~ msgstr "Apps herunterladen & installieren" #~ msgid "Install Other Version" #~ msgstr "Andere Version installieren" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "%s bis jetzt übertragen" #~ msgid "Tasks" #~ msgstr "Aufgaben" #~ msgid "Stop Active Tasks" #~ msgstr "Aktiven Aufgaben stoppen" #~ msgid "No Tasks Yet" #~ msgstr "Noch keine Aufgaben" #~ msgid "Refreshing Store Content" #~ msgstr "Store-Inhalt aktualisieren" #~ msgid "Flathub" #~ msgstr "Flathub" #, fuzzy, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "Es sind Aktualisierungen verfügbar" #~ msgstr[1] "Es sind Aktualisierungen verfügbar" #~ msgid "Updates Are Available" #~ msgstr "Es sind Aktualisierungen verfügbar" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Für die folgenden Apps sind Aktualisierungen erhältlich. Möchten Sie " #~ "diese installieren?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "%d Laufzeitumgebungen und/oder Erweiterungen haben neue Aktualisierungen " #~ "erhalten. Möchten Sie diese installieren?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "" #~ "Zusätzlich werden %d Laufzeitumgebungen und/oder Erweiterungen " #~ "aktualisiert." #~ msgid "Update Now" #~ msgstr "Jetzt aktualisieren" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "Die Möglichkeit, lokale .flatpak-Bundle-Dateien zu überprüfen und zu " #~ "installieren, wird in Kürze verfügbar sein!\n" #~ "In der Zwischenzeit können Sie versuchen, folgenden Befehl in der " #~ "Befehlszeile auszuführen:\n" #~ "\n" #~ "flatpak install --bundle dein-bundle.flatpak" #~ msgid "Resume Current Tasks" #~ msgstr "Die aktuelle Ausgabe fortsetzen" #~ msgid "Pause Current Tasks" #~ msgstr "Die aktuelle Aufgabe pausieren" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Transaktionsverwaltung umschalten" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Beenden" #~ msgid "Hide EOL Entries" #~ msgstr "EOL-Einträge ausblenden" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "EOL-Einträge und davon abhängige Einträge ausblenden" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Git Forge Sterneanzahl anzeigen" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "" #~ "Ob versucht werden soll, die Sternanzahl für Projekte in der Vollansicht " #~ "anzuzeigen" #~ msgid "Only Show Free Software" #~ msgstr "Nur freie Software anzeigen" #~ msgid "Hide proprietary software" #~ msgstr "Proprietäre Software ausblenden" #~ msgid "Debounce Search Inputs" #~ msgstr "Sucheingaben verzögern" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "Eine Verzögerung hinzufügen, um sofortige Antworten während der Eingabe " #~ "zu verhindern" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Beschreibt das Aussehen des globalen Fortschrittsbalkens" #~ msgid "Saved Window Dimensions" #~ msgstr "Gespeicherte Fensterabmessungen" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "" #~ "Die Fensterabmessungen, die vom nächsten Bazaar-Fenster verwendet werden " #~ "sollen" #~ msgid "?" #~ msgstr "?" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s ist für Kleinkinder geeignet" #~ msgid "--- MB" #~ msgstr "--- MB" #~ msgid "Of the size of human DNA" #~ msgstr "Der Größe der menschlichen DNA" #~ msgid "3 billion base pairs" #~ msgstr "3 Milliarden Basenpaare" #~ msgid "Of the Linux Kernel" #~ msgstr "Des Linux Kernels" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "Des Apollo 11 Guidance-Computers" #~ msgid "Total ROM and RAM" #~ msgstr "Gesamt-ROM und RAM" #~ msgid "Of the original Super Mario Bros" #~ msgstr "Des ursprünglichen Super Mario Bros." #~ msgid "On the NES" #~ msgstr "Auf dem NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "Der Größe von Wikipedia" #~ msgid "Without any media" #~ msgstr "Ohne jegliche Medien" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "Diese Funktion ist derzeit nicht freigeschaltet. Es wird empfohlen, " #~ "Flatseal herunterzuladen und zu installieren, um Berechtigungen von " #~ "Anwendungen einzustellen." #~ msgid "Entry Inspector" #~ msgstr "Eintragsinspektor" #~ msgid "Serialize" #~ msgstr "Serialisierung der Anfrage ist fehlgeschlagen" #~ msgid "Convert to JSON" #~ msgstr "In JSON umwandeln" #~ msgid "We ♥ Games" #~ msgstr "Wir ♥ Spiele" #~ msgid "Repository Star Count" #~ msgstr "Repository Sterneanzahl" #~ msgid "Bazaar Inspector" #~ msgstr "Bazaar-Inspektor" #~ msgid "Active Blocklists" #~ msgstr "Aktive Blocklisten" #~ msgid "Active Curated-Configs" #~ msgstr "Aktive Vorgestellte Einrichtung" #~ msgid "All Entry Groups" #~ msgstr "Alle Eintragsgruppen" #~ msgid "Decache and Inspect" #~ msgstr "Entcachen und Inspizieren" #~ msgid "No Flatpaks Installed" #~ msgstr "Keine Anwendungen installiert" #~ msgid "Display Star Count" #~ msgstr "Sterneanzahl anzeigen" #~ msgid "Open Bazaar Inspector" #~ msgstr "Bazaar-Inspektor öffnen" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %u Downloads" #~ msgid "Hide proprietary software when searching" #~ msgstr "Proprietäre Anwendungen in Suchergebnissen ausblenden" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "" #~ "Suchergebnisse auf Anwendungen beschränken, die auf Flathub verfügbar sind" #~ msgid "Constructing Flatpak instance..." #~ msgstr "Flatpak-Instanz wird erstellt …" #~ msgid "Reusing last Flatpak instance..." #~ msgstr "Letzte Flatpak-Instanz wiederverwenden …" #~ msgid "Flathub is not registered on this system" #~ msgstr "Flathub ist auf diesem System nicht eingerichtet" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "Möchten Sie Flathub hinzufügen? Wenn Sie ablehnen, ist die Flathub-Seite " #~ "nicht verfügbar. Sie können dies später ändern." #~ msgid "Add Flathub" #~ msgstr "Flathub hinzufügen" #~ msgid "Identifying installed entries..." #~ msgstr "Installierte Einträge werden erkannt …" #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d von %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "Warten auf Hintergrund-Indizierung …" #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "Initialisierung in %0.2f Sekunden abgeschlossen" #~ msgid "Verified by the original developers" #~ msgstr "" #~ "Diese Anwendung wurde von den ursprünglichen Entwicklern der Software " #~ "verifiziert." #~ msgid "Manage Addons" #~ msgstr "Erweiterungen verwalten" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Azenyr" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "João Victor (Leal)" #~ msgstr "João Victor (Leal)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Léane GRASSER" #~ msgstr "Léane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel Mrówka (Microwave)" #~ msgstr "Marcel Mrówka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "camegone" #~ msgstr "camegone" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "Abfragenbeginn der Gegenstelleneinträge unter Bezugnahme auf %d " #~ "Blockliste(n) …" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "Bazaar wurde nicht mit vorgestellten Inhalten eingerichtet. Nehmen Sie " #~ "Kontakt mit den Entwicklern Ihres Betriebssystems auf, um Hilfe zu " #~ "erhalten." #~ msgid "Games" #~ msgstr "Spiele" #~ msgid "Graphics" #~ msgstr "Grafik" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "Startseite" #~ msgid "Excludes shared components" #~ msgstr "Gemeinsame Komponenten ausgeschlossen" #~ msgid "Source code may not be available" #~ msgstr "Der Quellcode ist möglicherweise nicht verfügbar." #~ msgid "Click for details" #~ msgstr "Klicken Sie, um Details anzusehen" #~ msgid "Repositories" #~ msgstr "Repositories" #~ msgid "Open in browser" #~ msgstr "Im Webbrowser öffnen" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "%'d monatliche Downloads" #~ msgid "%B %-d" #~ msgstr "%B %-d" #~ msgid "Run this application" #~ msgstr "Diese Anwendung ausführen" #~ msgid "Run" #~ msgstr "Ausführen" #~ msgid "Git Forge Star Counts" #~ msgstr "Git Forge Sterneanzahl" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "" #~ "Wenn Sie keinen GitHub-Token haben, kann dies zu Ratenbegrenzungen führen." #~ msgid "Show Only Flathub Apps" #~ msgstr "Nur Flathub-Anwendungen anzeigen" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "EIne kurze Weile warten, um die Systemlast zu verringern" #~ msgid "Theme" #~ msgstr "Design" #~ msgid "Pride Rainbow Flag" #~ msgstr "Pride-Regenbogenflagge" #~ msgid "Bisexual Flag" #~ msgstr "Bisexuellenflagge" #~ msgid "Asexual Flag" #~ msgstr "Asexuellenflagge" #~ msgid "Share" #~ msgstr "Teilen" #~ msgid "Browse" #~ msgstr "Durchsuchen" #~ msgid "Go Back" #~ msgstr "Zurück" #~ msgid "View curated applications" #~ msgstr "Vorgestellte Anwendungen ansehen" #~ msgid "View the latest on Flathub" #~ msgstr "Das neueste auf Flathub ansehen" #~ msgid "_Quit Service" #~ msgstr "Dienst _beenden" #~ msgid "Up to date!" #~ msgstr "Auf neuestem Stand" #~ msgid "Settings & user data will be kept" #~ msgstr "Einstellungen und Benutzerdaten werden beibehalten" #~ msgid "Show Animated Background" #~ msgstr "Animierten Hintergrund anzeigen" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Den animierten Hintergrund auf der Startseite anzeigen" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible." #~ msgstr "" #~ "Es legt Wert darauf, die Entwickler zu unterstützen, die den Linux-" #~ "Desktop möglich machen." #~ msgid "Calligraphy application page" #~ msgstr "Calligraphy" #~ msgid "Download graph for Blender" #~ msgstr "Downloadkurve für Blender" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "%'d Einträge von %'d empfangen (%0.1f Sekunden vergangen)" #~ msgid "Apps Of The Week" #~ msgstr "Anwendungen der Woche" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "Die Anzahl der Downloads in den letzten 30 Tagen. Klicken Sie hier, um " #~ "die Download-Statistiken für diese Anwendung anzuzeigen." #~ msgid "Remote repo name" #~ msgstr "Namen des Repository" #~ msgid "How the application looks" #~ msgstr "Wie die Anwendung aussieht" #~ msgid "Appearance" #~ msgstr "Erscheinungsbild" #~ msgid "Show animated background" #~ msgstr "Animierten Hintergrund anzeigen" #~ msgid "Type to filter" #~ msgstr "Zum Filtern hier tippen" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Ergebnisse mit proprietären Lizenzen ausschließen" #~ msgid "Advanced" #~ msgstr "Erweitert" #~ msgid "Open this link externally" #~ msgstr "Diesen Link extern öffnen" #~ msgid "Downloads Over Time" #~ msgstr "Downloads im Laufe der Zeit" #~ msgid "Minimize Lower Bound" #~ msgstr "Untere Grenze verringern" #~ msgid "Maximize Upper Bound" #~ msgstr "Obere Grenze vergrößern" #~ msgid "Installing" #~ msgstr "Wird installiert" #~ msgid "Removing" #~ msgstr "Wird entfernt" #~ msgid "Transactions Will Appear Here" #~ msgstr "Transaktionen werden hier erscheinen" #~ msgid "Halt the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen anhalten" #~ msgid "Confirm Action" #~ msgstr "Aktion bestätigen" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Sie sind dabei, die folgende Anwendung zu entfernen:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sind Sie sich sicher?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Sie sind dabei, die folgende Anwendung zu installieren:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sind Sie sich sicher?" #~ msgid "Resume the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen fortsetzen" #~ msgid "Pause the execution of transactions" #~ msgstr "Die Ausführung von Transaktionen pausieren" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Bazaar-Hauptfenster zeigt Blender" #~ msgid "Match using regular expressions" #~ msgstr "Übereinstimmung mit regulären Ausdrücken" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "" #~ "Filterung und Sortierung hinter einem Überblendungseffekt verstecken" bazaar-org-bazaar-b6e9a65/po/el.po000066400000000000000000001755671522167256300170340ustar00rootroot00000000000000# Greek translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-18 02:22+0200\n" "PO-Revision-Date: 2025-12-18 04:30+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: el\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: Poedit 3.8\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 #: src/bz-window.blp:234 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "" "Προσθήκη, αφαίρεση ή ενημέρωση λογισμικού flatpak σε αυτόν τον υπολογιστή" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;Σύστημα;Διαχειριστής πακέτων;Ανακάλυψη;Flatpak;Λογισμικό;Κατάστημα;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Hide EOL Entries" msgstr "Απόκρυψη καταχωρήσεων EOL" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Hide EOL entries and entries depending on them" msgstr "Απόκρυψη καταχωρήσεων EOL και καταχωρήσεων που εξαρτώνται από αυτές" #: data/io.github.kolunmi.Bazaar.gschema.xml:11 msgid "Only Show Free Software" msgstr "Εμφάνιση μόνο δωρεάν λογισμικού" #: data/io.github.kolunmi.Bazaar.gschema.xml:12 msgid "Hide proprietary software" msgstr "Απόκρυψη ιδιόκτητου λογισμικού" #: data/io.github.kolunmi.Bazaar.gschema.xml:16 msgid "Show Only Flathub Content" msgstr "Εμφάνιση μόνο περιεχομένου Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:17 msgid "Hide applications which do not originate from Flathub" msgstr "Απόκρυψη εφαρμογών που δεν προέρχονται από το Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:21 msgid "Debounce Search Inputs" msgstr "Αναζήτηση εισόδων χωρίς αναπήδηση" #: data/io.github.kolunmi.Bazaar.gschema.xml:22 msgid "Add a delay before searching to prevent instant replies while typing" msgstr "" "Προσθέστε μια καθυστέρηση πριν από την αναζήτηση για να αποτρέψετε τις " "άμεσες απαντήσεις κατά την πληκτρολόγηση" #: data/io.github.kolunmi.Bazaar.gschema.xml:46 msgid "Global Progress Bar Theme" msgstr "Καθολικό θέμα μπάρας προόδου" #: data/io.github.kolunmi.Bazaar.gschema.xml:47 msgid "Describes the look of the global progress bar" msgstr "Περιγράφει την εμφάνιση της καθολικής μπάρας προόδου" #: data/io.github.kolunmi.Bazaar.gschema.xml:51 msgid "Saved Window Dimensions" msgstr "Αποθηκευμένες διαστάσεις παραθύρου" #: data/io.github.kolunmi.Bazaar.gschema.xml:52 msgid "The window dimensions to be used by the next Bazaar window" msgstr "" "Οι διαστάσεις του παραθύρου που θα χρησιμοποιηθούν από το επόμενο παράθυρο " "Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Ανακαλύψτε και εγκαταστήστε εφαρμογές" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for GNOME with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Ένα νέο κατάστημα εφαρμογών για το GNOME με έμφαση στην αναζήτηση και " "εγκατάσταση εφαρμογών και πρόσθετων από απομακρυσμένους διακομιστές Flatpak, " "ιδίως το Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "Δίνει έμφαση στην υποστήριξη των προγραμματιστών που καθιστούν δυνατή τη " "λειτουργία του Linux desktop. Το Bazaar διαθέτει μια καρτέλα \"curated\" που " "μπορεί να διαμορφωθεί από τους διανομείς ώστε να προσφέρει μια πιο τοπική " "εμπειρία." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home page displaying Flathub apps" msgstr "Η αρχική σελίδα που εμφανίζει τις εφαρμογές Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Nucleus app page" msgstr "Σελίδα εφαρμογής Nucleus" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Search page" msgstr "Σελίδα αναζήτησης" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Category page" msgstr "Σελίδα κατηγορίας" #: src/bz-addons-dialog.blp:14 src/bz-full-view.blp:711 #: src/bz-installed-tile.blp:99 msgid "Manage Add-ons" msgstr "Διαχείριση πρόσθετων" #: src/bz-addons-dialog.c:90 src/bz-full-view.blp:502 #: src/bz-installed-tile.blp:117 src/bz-transaction-view.blp:213 #: src/bz-window.c:1294 msgid "Remove" msgstr "Κατάργηση" #: src/bz-addons-dialog.c:95 src/bz-full-view.blp:274 src/bz-full-view.blp:489 #: src/bz-transaction-view.blp:187 src/bz-window.c:1271 msgid "Install" msgstr "Εγκατάσταση" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:50 #: src/bz-full-view.c:373 src/bz-full-view.c:380 msgid "Age Rating" msgstr "Βαθμολογία ηλικίας" #: src/bz-age-rating-dialog.blp:40 src/bz-age-rating-dialog.c:790 msgid "?" msgstr "?" #: src/bz-age-rating-dialog.c:139 msgid "Cartoon Violence" msgstr "Βία στα κινούμενα σχέδια" #: src/bz-age-rating-dialog.c:140 msgid "No information regarding cartoon violence" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με τη βία στα κινούμενα σχέδια" #: src/bz-age-rating-dialog.c:143 msgid "Fantasy Violence" msgstr "Φανταστική βία" #: src/bz-age-rating-dialog.c:144 msgid "No information regarding fantasy violence" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με τη φανταστική βία" #: src/bz-age-rating-dialog.c:147 msgid "Realistic Violence" msgstr "Ρεαλιστική βία" #: src/bz-age-rating-dialog.c:148 msgid "No information regarding realistic violence" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με ρεαλιστική βία" #: src/bz-age-rating-dialog.c:151 msgid "Violence Depicting Bloodshed" msgstr "Βία που απεικονίζει αιματοχυσία" #: src/bz-age-rating-dialog.c:152 msgid "No information regarding bloodshed" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με βία που απεικονίζει αιματοχυσία" #: src/bz-age-rating-dialog.c:155 msgid "Sexual Violence" msgstr "Σεξουαλική βία" #: src/bz-age-rating-dialog.c:156 msgid "No information regarding sexual violence" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με σεξουαλική βία" #: src/bz-age-rating-dialog.c:159 msgid "Alcohol" msgstr "Αλκοόλ" #: src/bz-age-rating-dialog.c:160 msgid "No information regarding references to alcohol" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές στο αλκοόλ" #: src/bz-age-rating-dialog.c:163 msgid "Narcotics" msgstr "Ναρκωτικά" #: src/bz-age-rating-dialog.c:164 msgid "No information regarding references to illicit drugs" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές σε παράνομες ναρκωτικές ουσίες" #: src/bz-age-rating-dialog.c:167 msgid "Tobacco" msgstr "Καπνός" #: src/bz-age-rating-dialog.c:168 msgid "No information regarding references to tobacco products" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές σε προϊόντα καπνού" #: src/bz-age-rating-dialog.c:171 src/bz-age-rating-dialog.c:358 msgid "Nudity" msgstr "Γυμνότητα" #: src/bz-age-rating-dialog.c:172 msgid "No information regarding nudity of any sort" msgstr "Καμία πληροφορία σχετικά με γυμνότητα οποιουδήποτε είδους" #: src/bz-age-rating-dialog.c:175 msgid "Sexual Themes" msgstr "Σεξουαλικά θέματα" #: src/bz-age-rating-dialog.c:176 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές ή απεικονίσεις σεξουαλικού " "χαρακτήρα" #: src/bz-age-rating-dialog.c:179 msgid "Profanity" msgstr "Βωμολοχίες" #: src/bz-age-rating-dialog.c:180 msgid "No information regarding profanity of any kind" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με οποιαδήποτε μορφή βωμολοχίας" #: src/bz-age-rating-dialog.c:183 msgid "Inappropriate Humor" msgstr "Ακατάλληλο χιούμορ" #: src/bz-age-rating-dialog.c:184 msgid "No information regarding inappropriate humor" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με ακατάλληλο χιούμορ" #: src/bz-age-rating-dialog.c:187 msgid "Discrimination" msgstr "Διακρίσεις" #: src/bz-age-rating-dialog.c:188 msgid "No information regarding discriminatory language of any kind" msgstr "Καμία πληροφορία σχετικά με διακριτική γλώσσα οποιουδήποτε είδους" #: src/bz-age-rating-dialog.c:191 msgid "Advertising" msgstr "Διαφήμιση" #: src/bz-age-rating-dialog.c:192 msgid "No information regarding advertising of any kind" msgstr "Καμία πληροφορία σχετικά με διαφημίσεις οποιουδήποτε είδους" #: src/bz-age-rating-dialog.c:195 msgid "Gambling" msgstr "Τυχερά παιχνίδια" #: src/bz-age-rating-dialog.c:196 msgid "No information regarding gambling of any kind" msgstr "Καμία πληροφορία σχετικά με τυχερά παιχνίδια οποιουδήποτε είδους" #: src/bz-age-rating-dialog.c:199 msgid "Purchasing" msgstr "Αγορές" #: src/bz-age-rating-dialog.c:200 msgid "No information regarding the ability to spend money" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με τη δυνατότητα δαπάνης χρημάτων" #: src/bz-age-rating-dialog.c:203 msgid "Chat Between Users" msgstr "Συνομιλία μεταξύ χρηστών" #: src/bz-age-rating-dialog.c:204 msgid "No information regarding ways to chat with other users" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με τους τρόπους επικοινωνίας με άλλους " "χρήστες" #: src/bz-age-rating-dialog.c:207 msgid "Audio Chat Between Users" msgstr "Ηχητική συνομιλία μεταξύ χρηστών" #: src/bz-age-rating-dialog.c:208 msgid "No information regarding ways to talk with other users" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με τους τρόπους επικοινωνίας με άλλους " "χρήστες" #: src/bz-age-rating-dialog.c:211 msgid "Contact Details" msgstr "Στοιχεία επικοινωνίας" #: src/bz-age-rating-dialog.c:212 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με την κοινοποίηση ονομάτων χρήστη " "κοινωνικών δικτύων ή διευθύνσεων ηλεκτρονικού ταχυδρομείου" #: src/bz-age-rating-dialog.c:215 msgid "Identifying Information" msgstr "Πληροφορίες ταυτοποίησης" #: src/bz-age-rating-dialog.c:216 msgid "No information regarding sharing of user information with third parties" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με την κοινοποίηση πληροφοριών χρηστών σε " "τρίτους" #: src/bz-age-rating-dialog.c:219 msgid "Location Sharing" msgstr "Κοινή χρήση τοποθεσίας" #: src/bz-age-rating-dialog.c:220 msgid "No information regarding sharing of physical location with other users" msgstr "" "Δεν υπάρχουν πληροφορίες σχετικά με την κοινοποίηση της φυσικής τοποθεσίας " "σε άλλους χρήστες" #: src/bz-age-rating-dialog.c:223 msgid "Prostitution" msgstr "Πορνεία" #: src/bz-age-rating-dialog.c:224 msgid "No information regarding references to prostitution" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές σε πορνεία" #: src/bz-age-rating-dialog.c:227 msgid "Adultery" msgstr "Μοιχεία" #: src/bz-age-rating-dialog.c:228 msgid "No information regarding references to adultery" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές σε μοιχεία" #: src/bz-age-rating-dialog.c:231 msgid "Sexualized Characters" msgstr "Σεξουαλικοποιημένοι χαρακτήρες" #: src/bz-age-rating-dialog.c:232 msgid "No information regarding sexualized characters" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με Σεξουαλικοποιημένους χαρακτήρες" #: src/bz-age-rating-dialog.c:235 msgid "Desecration" msgstr "Βεβήλωση" #: src/bz-age-rating-dialog.c:236 msgid "No information regarding references to desecration" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές σε βεβήλωση" #: src/bz-age-rating-dialog.c:239 msgid "Human Remains" msgstr "Ανθρώπινα λείψανα" #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με ορατά ανθρώπινα λείψανα" #: src/bz-age-rating-dialog.c:243 msgid "Slavery" msgstr "Δουλεία" #: src/bz-age-rating-dialog.c:244 msgid "No information regarding references to slavery" msgstr "Δεν υπάρχουν πληροφορίες σχετικά με αναφορές στη δουλεία" #: src/bz-age-rating-dialog.c:307 msgid "Does not include references to drugs" msgstr "Δεν περιλαμβάνει αναφορές σε φάρμακα" #: src/bz-age-rating-dialog.c:309 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Δεν περιλαμβάνει βρισιές, χυδαίες εκφράσεις και άλλα είδη σκληρής γλώσσας" #: src/bz-age-rating-dialog.c:311 msgid "Does not include ads or monetary transactions" msgstr "Δεν περιλαμβάνει διαφημίσεις ή χρηματικές συναλλαγές" #: src/bz-age-rating-dialog.c:313 msgid "Does not include sex or nudity" msgstr "Δεν περιλαμβάνει σεξ ή γυμνότητα" #: src/bz-age-rating-dialog.c:315 msgid "Does not include uncontrolled chat functionality" msgstr "Δεν περιλαμβάνει λειτουργία ανεξέλεγκτης συνομιλίας" #: src/bz-age-rating-dialog.c:317 msgid "Does not include violence" msgstr "Δεν περιλαμβάνει βία" #: src/bz-age-rating-dialog.c:352 msgid "Drugs" msgstr "Ναρκωτικά" #: src/bz-age-rating-dialog.c:354 msgid "Strong Language" msgstr "Σκληρή γλώσσα" #: src/bz-age-rating-dialog.c:356 msgid "Money" msgstr "Χρήματα" #: src/bz-age-rating-dialog.c:360 msgid "Social" msgstr "Κοινωνικά" #: src/bz-age-rating-dialog.c:362 msgid "Violence" msgstr "Βία" #: src/bz-age-rating-dialog.c:564 #, c-format msgid "%s • %s" msgstr "%s • %s" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:752 src/bz-full-view.c:363 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:782 msgctxt "Age rating" msgid "All" msgstr "Όλα" #: src/bz-age-rating-dialog.c:846 #, c-format msgid "%s has an unknown age rating" msgstr "Το %s έχει άγνωστη ηλικιακή βαθμολογία" #: src/bz-age-rating-dialog.c:854 #, c-format msgid "%s is suitable for everyone" msgstr "Το %s είναι κατάλληλο για όλους" #: src/bz-age-rating-dialog.c:857 #, c-format msgid "%s is suitable for toddlers" msgstr "Το %s είναι κατάλληλο για νήπια" #: src/bz-age-rating-dialog.c:860 #, c-format msgid "%s is suitable for young children" msgstr "Το %s είναι κατάλληλο για μικρά παιδιά" #: src/bz-age-rating-dialog.c:863 #, c-format msgid "%s is suitable for children" msgstr "Το %s είναι κατάλληλο για παιδιά" #: src/bz-age-rating-dialog.c:866 #, c-format msgid "%s is suitable for teenagers" msgstr "Το %s είναι κατάλληλο για εφήβους" #: src/bz-age-rating-dialog.c:869 #, c-format msgid "%s is suitable for adults" msgstr "Το %s είναι κατάλληλο για ενήλικες" #: src/bz-age-rating-dialog.c:872 #, c-format msgid "%s is suitable for %s" msgstr "Το %s είναι κατάλληλο για %s" #: src/bz-app-size-dialog.blp:43 msgid "--- MB" msgstr "--- MB" #: src/bz-app-size-dialog.blp:53 msgid "Download Size" msgstr "Μέγεθος λήψης" #: src/bz-app-size-dialog.c:55 msgid "Of the size of human DNA" msgstr "Του μεγέθους του ανθρώπινου DNA" #: src/bz-app-size-dialog.c:55 msgid "3 billion base pairs" msgstr "3 δισεκατομμύρια ζεύγη βάσεων" #: src/bz-app-size-dialog.c:56 msgid "Of the Linux Kernel" msgstr "Του πυρήνα Linux" #: src/bz-app-size-dialog.c:56 msgid "linux-6.17.tar.xz" msgstr "linux-6.17.tar.xz" #: src/bz-app-size-dialog.c:57 msgid "Of the Apollo 11 guidance computer" msgstr "Του υπολογιστή πλοήγησης του Apollo 11" #: src/bz-app-size-dialog.c:57 msgid "Total ROM and RAM" msgstr "Συνολική ROM και RAM" #: src/bz-app-size-dialog.c:58 msgid "Of the original Super Mario Bros" msgstr "Από το αρχικό Super Mario Bros" #: src/bz-app-size-dialog.c:58 msgid "On the NES" msgstr "Στο NES" #: src/bz-app-size-dialog.c:59 msgid "Of the size of Wikipedia" msgstr "Του μεγέθους της Wikipedia" #: src/bz-app-size-dialog.c:59 msgid "Without any media" msgstr "Χωρίς κανένα πολυμέσο" #: src/bz-app-tile.blp:84 src/bz-installed-page.blp:25 src/bz-window.blp:298 msgid "Installed" msgstr "Εγκατεστημένες" #: src/bz-apps-page.blp:14 src/bz-full-view.blp:43 src/bz-user-data-page.blp:15 #: src/bz-window.blp:443 msgid "Main Menu" msgstr "Κύριο μενού" #: src/bz-apps-page.blp:17 src/bz-user-data-page.blp:18 src/bz-window.blp:522 msgid "_Donate to Bazaar ❤️" msgstr "_Δωρίστε στο Bazaar ❤️" #: src/bz-apps-page.blp:18 src/bz-user-data-page.blp:19 msgid "_Refresh Content" msgstr "_Ανανέωση περιεχομένου" #: src/bz-apps-page.blp:22 src/bz-user-data-page.blp:22 src/bz-window.blp:529 msgid "_Preferences" msgstr "_Προτιμήσεις" #: src/bz-apps-page.blp:23 src/bz-user-data-page.blp:23 src/bz-window.blp:550 msgid "_Keyboard Shortcuts" msgstr "_Συντομεύσεις πληκτρολογίου" #: src/bz-apps-page.blp:24 src/bz-user-data-page.blp:24 src/bz-window.blp:555 msgid "_About Bazaar" msgstr "_Σχετικά με το Bazaar" #: src/bz-apps-page.blp:28 src/bz-user-data-page.blp:27 src/bz-window.blp:562 msgid "_Quit Bazaar" msgstr "_Κλείστε το Bazaar" #: src/bz-application.c:577 msgid "" "This functionality is currently disabled. It is recommended you download and " "install Flatseal to manage app permissions." msgstr "" "Αυτή η λειτουργία είναι προς το παρόν απενεργοποιημένη. Συνιστάται να " "κατεβάσετε και να εγκαταστήσετε το Flatseal για να διαχειριστείτε τις άδειες " "της εφαρμογής." #: src/bz-application.c:659 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:660 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #: src/bz-application.c:682 msgid "Adam Masciola" msgstr "Adam Masciola" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:685 msgid "translator-credits" msgstr "Xarishark-Zacharias Xenakis" #: src/bz-application.c:749 msgid "Logged Out Successfully!" msgstr "Αποσύνδεση με επιτυχία!" #: src/bz-application.c:855 msgid "Performing setup..." msgstr "Εκτέλεση εγκατάστασης..." #: src/bz-application.c:934 src/bz-application.c:943 msgid "Set Up Flathub" msgstr "Ρύθμιση του Flathub" #: src/bz-application.c:937 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Το Flathub δεν είναι εγκατεστημένο σε αυτό το σύστημα. Δεν θα μπορείτε να " "περιηγηθείτε και να εγκαταστήσετε εφαρμογές στο Bazaar εάν δεν είναι " "διαθέσιμο.\n" "\n" "Μπορείτε ακόμα να χρησιμοποιήσετε το Bazaar για να περιηγηθείτε και να " "καταργήσετε ήδη εγκατεστημένες εφαρμογές." #: src/bz-application.c:942 src/bz-update-dialog.blp:6 msgid "Later" msgstr "Αργότερα" #: src/bz-application.c:1344 msgid "Synchronizing..." msgstr "Συγχρονισμός..." #: src/bz-application.c:1483 #, c-format msgid "Receiving %d entries..." msgstr "Λήψη %d καταχωρήσεων..." #: src/bz-application.c:1488 msgid "Checking for updates" msgstr "Έλεγχος για ενημερώσεις" #: src/bz-curated-view.blp:11 src/bz-flathub-page.blp:19 #: src/bz-full-view.blp:53 src/bz-installed-page.blp:15 #: src/bz-user-data-page.blp:52 src/bz-window.blp:183 msgid "Empty" msgstr "Άδειο" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Χωρίς επιμέλεια" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Δεν παρέχονται πληροφορίες σχετικά με την επιμέλεια σε αυτό το σύστημα. " "Μπορείτε να συνεχίσετε να περιηγείστε στις εφαρμογές στο Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Περιήγηση στο Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Εκτός σύνδεσης" #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 msgid "Browser" msgstr "Πρόγραμμα περιήγησης" #: src/bz-developer-badge.c:131 msgid "Developer information not available." msgstr "Οι πληροφορίες για τον προγραμματιστή δεν είναι διαθέσιμες." #: src/bz-developer-badge.c:137 src/bz-developer-badge.c:151 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Η ιδιοκτησία του αναγνωριστικού εφαρμογής %s δεν έχει επαληθευτεί και " "ενδέχεται να πρόκειται για πακέτο κοινότητας." #: src/bz-developer-badge.c:155 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Η ιδιοκτησία του αναγνωριστικού εφαρμογής %s έχει επαληθευτεί χειροκίνητα " "από την ομάδα του Flathub." #: src/bz-developer-badge.c:161 #, c-format msgid "" "The ownership of the %s app ID has been verified by %s on %s." msgstr "" "Η ιδιοκτησία του αναγνωριστικού εφαρμογής %s έχει επαληθευτεί από τον %s στις %s." #: src/bz-developer-badge.c:168 #, c-format msgid "The ownership of the %s app ID has been verified using %s." msgstr "" "Η ιδιοκτησία του αναγνωριστικού εφαρμογής %s έχει επαληθευτεί " "χρησιμοποιώντας το %s." #: src/bz-developer-badge.c:172 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Η ιδιοκτησία του αναγνωριστικού εφαρμογής %s έχει επαληθευτεί." #: src/bz-entry-inspector.blp:5 msgid "Entry Inspector" msgstr "Επιθεωρητής εισόδου" #: src/bz-entry-inspector.blp:76 msgid "Serialize" msgstr "Σειριοποίηση" #: src/bz-entry-inspector.blp:80 msgid "Convert to JSON" msgstr "Μετατροπή σε JSON" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Παρουσιάστηκε σφάλμα" #: src/bz-error.c:89 msgid "Close" msgstr "Κλείσιμο" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Αντιγραφή και κλείσιμο" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Προηγούμενο" #: src/bz-featured-carousel.blp:53 msgid "Next" msgstr "Επόμενο" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "Εφαρμογή της ημέρας" #: src/bz-flathub-category.c:78 msgid "Audio & Video" msgstr "Ήχος & Βίντεο" #: src/bz-flathub-category.c:78 msgid "Media" msgstr "Πολυμέσα" #: src/bz-flathub-category.c:78 msgid "More Audio & Video" msgstr "Περισσότερα Ήχος & Βίντεο" #: src/bz-flathub-category.c:79 msgid "Developer Tools" msgstr "Εργαλεία προγραμματιστή" #: src/bz-flathub-category.c:79 msgid "Develop" msgstr "Προγραμματισμός" #: src/bz-flathub-category.c:79 msgid "More Developer Tools" msgstr "Περισσότερα εργαλεία προγραμματιστή" #: src/bz-flathub-category.c:80 msgid "Education" msgstr "Εκπαίδευση" #: src/bz-flathub-category.c:80 msgid "Learn" msgstr "Μάθηση" #: src/bz-flathub-category.c:80 msgid "More Education" msgstr "Περισσότερη Μάθηση" #: src/bz-flathub-category.c:81 msgid "Gaming" msgstr "Παιχνίδια" #: src/bz-flathub-category.c:81 msgid "Play" msgstr "Παιχνίδι" #: src/bz-flathub-category.c:81 msgid "More Gaming" msgstr "Περισσότερα παιχνίδια" #: src/bz-flathub-category.c:82 msgid "Graphics & Photography" msgstr "Γραφικά & Φωτογραφία" #: src/bz-flathub-category.c:82 msgid "Create" msgstr "Δημιουργία" #: src/bz-flathub-category.c:82 msgid "More Graphics & Photography" msgstr "Περισσότερα Γραφικά & Φωτογραφία" #: src/bz-flathub-category.c:83 msgid "Networking" msgstr "Δικτύωση" #: src/bz-flathub-category.c:83 msgid "Internet" msgstr "Διαδίκτυο" #: src/bz-flathub-category.c:83 msgid "More Networking" msgstr "Περισσότερη Δικτύωση" #: src/bz-flathub-category.c:84 msgid "Productivity" msgstr "Παραγωγικότητα" #: src/bz-flathub-category.c:84 msgid "Work" msgstr "Εργασία" #: src/bz-flathub-category.c:84 msgid "More Productivity" msgstr "Περισσότερη Παραγωγικότητα" #: src/bz-flathub-category.c:85 msgid "Science" msgstr "Επιστήμη" #: src/bz-flathub-category.c:85 msgid "More Science" msgstr "Περισσότερη Επιστήμη" #: src/bz-flathub-category.c:86 msgid "System" msgstr "Σύστημα" #: src/bz-flathub-category.c:86 msgid "More System" msgstr "Περισσότερο Σύστημα" #: src/bz-flathub-category.c:87 msgid "Utilities" msgstr "Βοηθητικά προγράμματα" #: src/bz-flathub-category.c:87 msgid "Tools" msgstr "Εργαλεία" #: src/bz-flathub-category.c:87 msgid "More Utilities" msgstr "Περισσότερα βοηθητικά προγράμματα" #: src/bz-flathub-category.c:88 src/bz-flathub-page.blp:119 #: src/bz-flathub-page.blp:152 msgid "Trending" msgstr "Τάσεις" #: src/bz-flathub-category.c:88 msgid "More Trending" msgstr "Περισσότερες Τάσεις" #: src/bz-flathub-category.c:89 src/bz-flathub-page.blp:125 #: src/bz-flathub-page.blp:185 msgid "Popular" msgstr "Δημοφιλείς" #: src/bz-flathub-category.c:89 msgid "More Popular" msgstr "Περισσότερα Δημοφιλή" #: src/bz-flathub-category.c:90 src/bz-flathub-page.blp:174 msgid "Recently Added" msgstr "Πρόσφατα Προστέθηκαν" #: src/bz-flathub-category.c:90 src/bz-flathub-page.blp:131 msgid "New" msgstr "Νέες" #: src/bz-flathub-category.c:90 msgid "More New" msgstr "Περισσότερες Νέες" #: src/bz-flathub-category.c:91 src/bz-flathub-page.blp:163 msgid "Recently Updated" msgstr "Πρόσφατα Ενημερωμένες" #: src/bz-flathub-category.c:91 src/bz-flathub-page.blp:137 msgid "Updated" msgstr "Ενημερωμένες" #: src/bz-flathub-category.c:91 msgid "More Updated" msgstr "Περισσότερες Ενημερωμένες" #: src/bz-flathub-category.c:92 msgid "Mobile" msgstr "Κινητό" #: src/bz-flathub-category.c:92 msgid "More Mobile" msgstr "Περισσότερα για κινητό" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Το Flathub δεν έχει προστεθεί" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "O απομακρυσμένος διακομιστής Flathub δεν βρέθηκε σε καμία από τις " "εγκαταστάσεις Flatpak σας" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "Το Flathub επέστρεψε ένα σφάλμα" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "Επανάληψη σύνδεσης με το Flathub" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "Το Flathub δεν είναι διαθέσιμο" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "Δεν μπορέσαμε να συνδεθούμε στο Flathub. Μπορείτε ακόμα να διαχειριστείτε " "και να αναζητήσετε εφαρμογές." #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "Αναζήτηση εφαρμογών" #: src/bz-flathub-page.blp:270 msgid "On the Go" msgstr "Εν κινήσει" #: src/bz-flathub-page.blp:282 msgid "Apps for your Linux phones and tablets" msgstr "Εφαρμογές για τα τηλέφωνα και τα tablet σας με Linux" #: src/bz-flathub-page.blp:293 msgid "More Mobile Apps" msgstr "Περισσότερες εφαρμογές για κινητά" #: src/bz-flathub-page.blp:328 msgid "More Mobile apps" msgstr "Περισσότερες εφαρμογές για κινητά" #: src/bz-flathub-page.blp:388 msgid "We​ ♥​ Games" msgstr "♥ τα παιχνίδια" #: src/bz-flathub-page.blp:401 msgid "Games and apps to run your favorite titles" msgstr "Παιχνίδια και εφαρμογές για να τρέξετε τους αγαπημένους σας τίτλους" #: src/bz-flathub-page.blp:435 msgid "More Games" msgstr "Περισσότερα παιχνίδια" #: src/bz-flatpak-entry.c:600 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Σελίδα Flathub" #: src/bz-flatpak-entry.c:621 msgctxt "Project URL Type" msgid "Project Website" msgstr "Ιστοσελίδα του έργου" #: src/bz-flatpak-entry.c:625 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Παρακολούθηση ζητημάτων" #: src/bz-flatpak-entry.c:629 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-flatpak-entry.c:633 msgctxt "Project URL Type" msgid "Help" msgstr "Βοήθεια" #: src/bz-flatpak-entry.c:637 msgctxt "Project URL Type" msgid "Donate" msgstr "Δωρεά" #: src/bz-flatpak-entry.c:643 msgctxt "Project URL Type" msgid "Translate" msgstr "Μετάφραση" #: src/bz-flatpak-entry.c:647 msgctxt "Project URL Type" msgid "Contact" msgstr "Επικοινωνία" #: src/bz-flatpak-entry.c:651 msgctxt "Project URL Type" msgid "Source Code" msgstr "Πηγαίος κώδικας" #: src/bz-flatpak-entry.c:657 msgctxt "Project URL Type" msgid "Contribute" msgstr "Συνεισφέρετε" #: src/bz-full-view.blp:20 src/bz-window.blp:126 src/bz-window.blp:420 msgid "Toggle transaction sidebar" msgstr "Εναλλαγή πλευρικής γραμμής συναλλαγών" #: src/bz-full-view.blp:57 msgid "No Results" msgstr "Κανένα αποτέλεσμα" #: src/bz-full-view.blp:58 msgid "Try a different search query" msgstr "Δοκιμάστε μια διαφορετική αναζήτηση" #: src/bz-full-view.blp:64 src/bz-window.blp:193 msgid "Content" msgstr "Περιεχόμενο" #: src/bz-full-view.blp:210 msgid "Support" msgstr "Υποστήριξη" #: src/bz-full-view.blp:226 msgid "Favorite Count" msgstr "Αριθμός αγαπημένων" #: src/bz-full-view.blp:258 src/bz-full-view.blp:513 msgid "Open" msgstr "Ανοιχτό" #: src/bz-full-view.blp:271 src/bz-full-view.blp:486 msgid "Download & Install Application" msgstr "Λήψη και εγκατάσταση εφαρμογής" #: src/bz-full-view.blp:286 msgid "Uninstall Application" msgstr "Απεγκατάσταση εφαρμογής" #: src/bz-full-view.blp:301 src/bz-full-view.blp:528 msgid "Install Other Version" msgstr "Εγκατάσταση άλλης έκδοσης" #: src/bz-full-view.blp:325 msgid "Size" msgstr "Μέγεθος" #: src/bz-full-view.blp:430 msgid "Downloads /mo" msgstr "Λήψεις /mo" #: src/bz-full-view.blp:547 msgid "Stopped Receiving Core Updates" msgstr "Δεν λαμβάνετε πλέον βασικές ενημερώσεις" #: src/bz-full-view.blp:561 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Αυτή η εφαρμογή χρησιμοποιεί ένα περιβάλλον εκτέλεσης που δεν λαμβάνει πλέον " "ενημερώσεις ή διορθώσεις ασφαλείας. Η χρήση της ενδέχεται να μην είναι " "ασφαλής." #: src/bz-full-view.blp:644 src/bz-window.c:1240 msgid "Delete Data" msgstr "Διαγραφή δεδομένων" #: src/bz-full-view.blp:778 msgid "Tags:" msgstr "Ετικέτες:" #: src/bz-full-view.c:289 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:296 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:303 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-full-view.c:313 #, c-format msgid "%d downloads in the last 30 days" msgstr "%d λήψεις τις τελευταίες 30 ημέρες" #: src/bz-full-view.c:345 #, c-format msgid "Download size of %s" msgstr "Μέγεθος λήψης του %s" #: src/bz-full-view.c:378 msgid "All Ages" msgstr "Όλες οι ηλικίες" #: src/bz-full-view.c:390 msgid "Age rating information unavailable" msgstr "Πληροφορίες σχετικά με την ηλικιακή βαθμολογία δεν είναι διαθέσιμες" #: src/bz-full-view.c:395 msgid "Suitable for all ages" msgstr "Κατάλληλο για όλες τις ηλικίες" #: src/bz-full-view.c:397 #, c-format msgid "Suitable for ages %d and up" msgstr "Κατάλληλο για ηλικίες %d και άνω" #: src/bz-full-view.c:430 src/bz-full-view.c:435 src/bz-full-view.c:463 #: src/bz-full-view.c:474 msgid "Unknown" msgstr "Άγνωστο" #: src/bz-full-view.c:440 #, c-format msgid "Free software licensed under %s" msgstr "Ελεύθερο λογισμικό με άδεια χρήσης %s" #: src/bz-full-view.c:445 msgid "Free software" msgstr "Ελεύθερο λογισμικό" #: src/bz-full-view.c:448 msgid "Proprietary Software" msgstr "Ιδιόκτητο λογισμικό" #: src/bz-full-view.c:451 #, c-format msgid "Special License: %s" msgstr "Ειδική άδεια: %s" #: src/bz-full-view.c:468 msgid "Free" msgstr "Ελεύθερο" #: src/bz-full-view.c:471 src/bz-license-dialog.c:118 msgid "Proprietary" msgstr "Ιδιόκτητο" #: src/bz-full-view.c:476 src/bz-license-dialog.c:120 msgid "Special License" msgstr "Ειδική άδεια" #: src/bz-full-view.c:496 msgid "Adaptive" msgstr "Προσαρμοστικό" #: src/bz-full-view.c:496 msgid "Desktop Only" msgstr "Μόνο για επιτραπέζιους υπολογιστές" #: src/bz-full-view.c:502 msgid "Works on desktop, tablets, and phones" msgstr "Λειτουργεί σε επιτραπέζιους υπολογιστές, tablet και κινητά τηλέφωνα" #: src/bz-full-view.c:503 msgid "May not work on mobile devices" msgstr "Ενδέχεται να μην λειτουργεί σε κινητές συσκευές" #: src/bz-full-view.c:514 msgid "No URL" msgstr "Χωρίς διεύθυνση URL" #: src/bz-full-view.c:532 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Αυτή η εφαρμογή διαθέτει άδεια FLOSS, που σημαίνει ότι ο πηγαίος κώδικας " "μπορεί να ελεγχθεί για λόγους ασφαλείας." #: src/bz-full-view.c:533 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Αυτή η εφαρμογή διαθέτει ιδιόκτητη άδεια χρήσης, που σημαίνει ότι ο πηγαίος " "κώδικας έχει αναπτυχθεί ιδιωτικά και δεν μπορεί να ελεγχθεί από ανεξάρτητο " "τρίτο μέρος." #: src/bz-full-view.c:540 msgid "More Apps" msgstr "Περισσότερες εφαρμογές" #: src/bz-full-view.c:541 #, c-format msgid "More Apps by %s" msgstr "Περισσότερες εφαρμογές από %s" #: src/bz-full-view.c:548 msgid "Other Apps by this Developer" msgstr "Άλλες εφαρμογές από αυτόν τον προγραμματιστή" #: src/bz-full-view.c:550 src/bz-full-view.c:658 #, c-format msgid "Other Apps by %s" msgstr "Άλλες εφαρμογές από %s" #: src/bz-full-view.c:558 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "Το %s δεν είναι εγκατεστημένο, αλλά εξακολουθεί να περιέχει %s " "δεδομένων." #: src/bz-full-view.c:660 msgid "Other Apps" msgstr "Άλλες εφαρμογές" #: src/bz-full-view.c:662 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d Εφαρμογή" msgstr[1] "%d Εφαρμογές" #: src/bz-full-view.c:1010 msgid "Show Less" msgstr "Εμφάνιση λιγότερων" #: src/bz-full-view.c:1010 msgid "Show More" msgstr "Εμφάνιση περισσότερων" #: src/bz-hardware-support-dialog.blp:6 src/bz-hardware-support-dialog.blp:47 msgid "Hardware Support" msgstr "Υποστήριξη υλικού" #: src/bz-hardware-support-dialog.c:69 msgid "Keyboard support" msgstr "Υποστήριξη πληκτρολογίου" #: src/bz-hardware-support-dialog.c:71 msgid "Requires keyboards" msgstr "Απαιτεί πληκτρολόγια" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends keyboards" msgstr "Συνιστά πληκτρολόγια" #: src/bz-hardware-support-dialog.c:73 msgid "Supports keyboards" msgstr "Υποστηρίζει πληκτρολόγια" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for keyboards" msgstr "Άγνωστη υποστήριξη για πληκτρολόγια" #: src/bz-hardware-support-dialog.c:76 msgid "Mouse support" msgstr "Υποστήριξη ποντικιού" #: src/bz-hardware-support-dialog.c:78 msgid "Requires mice or pointing devices" msgstr "Απαιτεί ποντίκια ή συσκευές κατάδειξης" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends mice or pointing devices" msgstr "Συνιστά ποντίκια ή συσκευές κατάδειξης" #: src/bz-hardware-support-dialog.c:80 msgid "Supports mice or pointing devices" msgstr "Υποστηρίζει ποντίκια ή συσκευές κατάδειξης" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for mice or pointing devices" msgstr "Άγνωστη υποστήριξη για ποντίκια ή συσκευές κατάδειξης" #: src/bz-hardware-support-dialog.c:83 msgid "Touchscreen support" msgstr "Υποστήριξη οθόνης αφής" #: src/bz-hardware-support-dialog.c:85 msgid "Requires touchscreens" msgstr "Απαιτεί οθόνες αφής" #: src/bz-hardware-support-dialog.c:86 msgid "Recommends touchscreens" msgstr "Συνιστά οθόνες αφής" #: src/bz-hardware-support-dialog.c:87 msgid "Supports touchscreens" msgstr "Υποστηρίζει οθόνες αφής" #: src/bz-hardware-support-dialog.c:88 msgid "Unknown support for touchscreens" msgstr "Άγνωστη υποστήριξη για οθόνες αφής" #: src/bz-hardware-support-dialog.c:192 msgid "Mobile support" msgstr "Υποστήριξη για κινητά" #: src/bz-hardware-support-dialog.c:193 msgid "Works on mobile devices" msgstr "Λειτουργεί σε κινητές συσκευές" #: src/bz-hardware-support-dialog.c:193 msgid "May not work well on mobile devices" msgstr "Μπορεί να μην λειτουργεί καλά σε κινητές συσκευές" #: src/bz-hardware-support-dialog.c:198 msgid "Desktop support" msgstr "Υποστήριξη επιτραπέζιων υπολογιστών" #: src/bz-hardware-support-dialog.c:199 msgid "Works well on large screens" msgstr "Λειτουργεί καλά σε μεγάλες οθόνες" #: src/bz-hardware-support-dialog.c:233 #, c-format msgid "%s works best on specific hardware" msgstr "Το %s λειτουργεί καλύτερα σε συγκεκριμένο υλικό" #: src/bz-hardware-support-dialog.c:240 #, c-format msgid "%s works on most devices" msgstr "Το %s λειτουργεί στις περισσότερες συσκευές" #: src/bz-inspector.blp:5 msgid "Bazaar Inspector" msgstr "Επιθεωρητής Bazaar" #: src/bz-inspector.blp:33 msgid "Background Task Info:" msgstr "Πληροφορίες για την εργασία παρασκηνίου:" #: src/bz-inspector.blp:43 msgid "Enable Global Debug Mode" msgstr "Ενεργοποίηση καθολικής λειτουργίας αποσφαλμάτωσης" #: src/bz-inspector.blp:50 msgid "Active Blocklists" msgstr "Ενεργές λίστες αποκλεισμένων" #: src/bz-inspector.blp:67 msgid "Active Curated-Configs" msgstr "Ενεργές Επιμελημένες-Ρυθμίσεις" #: src/bz-inspector.blp:85 msgid "All Entry Groups" msgstr "Όλες οι ομάδες εισόδου" #: src/bz-inspector.blp:93 msgid "Filter..." msgstr "Φίλτρο..." #: src/bz-inspector.blp:134 msgid "Decache and Inspect" msgstr "Καθαρισμός cache και Έλεγχος" #: src/bz-installed-page.blp:19 msgid "No Flatpaks Installed" msgstr "Δεν έχουν εγκατασταθεί Flatpaks" #: src/bz-installed-page.c:395 msgid "Choose an Installation" msgstr "Επιλέξτε μια εγκατάσταση" #: src/bz-installed-page.c:398 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with? " msgstr "" "Έχετε εγκαταστήσει πολλές εκδόσεις αυτής της εφαρμογής. Με ποια από αυτές " "θέλετε να συνεχίσετε; " #: src/bz-installed-page.c:402 src/bz-window.c:1270 src/bz-window.c:1293 msgid "Cancel" msgstr "Ακύρωση" #: src/bz-installed-tile.blp:61 src/bz-rich-app-tile.blp:137 msgid "Stopped Receiving Updates" msgstr "Δεν λαμβάνετε πλέον ενημερώσεις" #: src/bz-installed-tile.blp:75 msgid "Support this application" msgstr "Υποστηρίξτε αυτήν την εφαρμογή" #: src/bz-license-dialog.blp:160 msgid "Get Involved" msgstr "Συμμετέχε" #: src/bz-license-dialog.c:107 src/bz-license-dialog.c:112 msgid "Unknown License" msgstr "Άγνωστη άδεια χρήσης" #: src/bz-license-dialog.c:115 msgid "Community Built" msgstr "Δημιουργήθηκε από την Κοινότητα" #: src/bz-license-dialog.c:148 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Αυτή η εφαρμογή έχει αναπτυχθεί ανοιχτά από μια διεθνή κοινότητα και " "διατίθεται με άδεια χρήσης %s.\n" "\n" "Μπορείτε να συμμετάσχετε και να βοηθήσετε να γίνει ακόμα καλύτερη." #: src/bz-license-dialog.c:156 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Αυτή η εφαρμογή έχει αναπτυχθεί ανοιχτά από μια διεθνή κοινότητα.\n" "\n" "Μπορείτε να συμμετάσχετε και να βοηθήσετε να γίνει ακόμα καλύτερη." #: src/bz-license-dialog.c:161 msgid "The license of this app is not known" msgstr "Η άδεια χρήσης αυτής της εφαρμογής δεν είναι γνωστή" #: src/bz-license-dialog.c:165 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Αυτή η εφαρμογή δεν έχει αναπτυχθεί ανοιχτά, επομένως μόνο οι " "προγραμματιστές της γνωρίζουν πώς λειτουργεί. Μπορεί να είναι ανασφαλής με " "τρόπους που είναι δύσκολο να εντοπιστούν και μπορεί να αλλάξει χωρίς " "εποπτεία.\n" "\n" "Μπορεί να έχετε ή να μην έχετε τη δυνατότητα να συνεισφέρετε σε αυτήν την " "εφαρμογή." #: src/bz-license-dialog.c:174 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Αυτή η εφαρμογή έχει αναπτυχθεί με την ειδική άδεια %s.\n" "\n" "Μπορεί να έχετε ή να μην έχετε τη δυνατότητα να συνεισφέρετε σε αυτήν την " "εφαρμογή." #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Προτιμήσεις" #: src/bz-preferences-dialog.blp:23 msgid "Content Filters" msgstr "Φίλτρα περιεχομένου" #: src/bz-preferences-dialog.blp:26 msgid "Free Software Only" msgstr "Μόνο ελεύθερο λογισμικό" #: src/bz-preferences-dialog.blp:27 msgid "Hide proprietary applications when browsing and searching" msgstr "Απόκρυψη ιδιόκτητων εφαρμογών κατά την περιήγηση και την αναζήτηση" #: src/bz-preferences-dialog.blp:31 msgid "Flathub Results Only" msgstr "Αποτελέσματα μόνο από το Flathub" #: src/bz-preferences-dialog.blp:32 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Περιορίστε τα αποτελέσματα αναζήτησης και περιήγησης σε εφαρμογές που είναι " "διαθέσιμες μόνο στο Flathub" #: src/bz-preferences-dialog.blp:36 msgid "Hide EOL Apps" msgstr "Απόκρυψη εφαρμογών EOL" #: src/bz-preferences-dialog.blp:37 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Απόκρυψη εφαρμογών που δεν υποστηρίζονται πλέον από τους προγραμματιστές τους" #: src/bz-preferences-dialog.blp:42 src/bz-window.blp:313 msgid "Search" msgstr "Αναζήτηση" #: src/bz-preferences-dialog.blp:45 msgid "Delay Search Results" msgstr "Αναβολή αποτελεσμάτων αναζήτησης" #: src/bz-preferences-dialog.blp:46 msgid "Improve results performance by debouncing search terms" msgstr "" "Βελτιώστε την απόδοση των αποτελεσμάτων με την απομάκρυνση των όρων " "αναζήτησης" #: src/bz-preferences-dialog.blp:51 msgid "Progress Bar" msgstr "Μπάρα προόδου" #: src/bz-preferences-dialog.blp:52 msgid "Choose a theme for the progress bar!" msgstr "Επιλέξτε ένα θέμα για τη μπάρα προόδου!" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Χρώμα έμφασης" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Χρώματα υπερηφάνειας" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Χρώματα Υπερηφάνειας Λεσβιών" #: src/bz-preferences-dialog.c:35 msgid "Transgender Pride Colors" msgstr "Χρώματα Υπερηφάνειας Τρανς" #: src/bz-preferences-dialog.c:36 msgid "Nonbinary Pride Colors" msgstr "Χρώματα Υπερηφάνειας Nonbinary" #: src/bz-preferences-dialog.c:37 msgid "Bisexual Pride Colors" msgstr "Χρώματα Υπερηφάνειας Bisexual" #: src/bz-preferences-dialog.c:38 msgid "Asexual Pride Colors" msgstr "Χρώματα Υπερηφάνειας Asexual" #: src/bz-preferences-dialog.c:39 msgid "Pansexual Pride Colors" msgstr "Χρώματα Υπερηφάνειας Pansexual" #: src/bz-preferences-dialog.c:40 msgid "Aromantic Pride Colors" msgstr "Χρώματα Υπερηφάνειας Aromantic" #: src/bz-preferences-dialog.c:41 msgid "Genderfluid Pride Colors" msgstr "Χρώματα Υπερηφάνειας Genderfluid" #: src/bz-preferences-dialog.c:42 msgid "Polysexual Pride Colors" msgstr "Χρώματα Υπερηφάνειας Polysexual" #: src/bz-preferences-dialog.c:43 msgid "Omnisexual Pride Colors" msgstr "Χρώματα Υπερηφάνειας Omnisexual" #: src/bz-preferences-dialog.c:44 msgid "Aroace Pride Colors" msgstr "Χρώματα Υπερηφάνειας Aroace" #: src/bz-preferences-dialog.c:45 msgid "Agender Pride Colors" msgstr "Χρώματα Υπερηφάνειας Agender" #: src/bz-preferences-dialog.c:46 msgid "Genderqueer Pride Colors" msgstr "Χρώματα Υπερηφάνειας Genderqueer" #: src/bz-preferences-dialog.c:47 msgid "Intersex Pride Colors" msgstr "Χρώματα Υπερηφάνειας Intersex" #: src/bz-preferences-dialog.c:48 msgid "Demigender Pride Colors" msgstr "Χρώματα Υπερηφάνειας Demigender" #: src/bz-preferences-dialog.c:49 msgid "Biromantic Pride Colors" msgstr "Χρώματα Υπερηφάνειας Biromantic" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:26 msgid "Version History" msgstr "Ιστορικό εκδόσεων" #: src/bz-releases-list.c:128 #, c-format msgid "Version %s" msgstr "Έκδοση %s" #: src/bz-releases-list.c:153 msgid "No details for this release" msgstr "Δεν υπάρχουν λεπτομέρειες για αυτήν την έκδοση" #: src/bz-rich-app-tile.blp:154 msgid "Get" msgstr "Λήψη" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Στιγμιότυπα οθόνης" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Προηγούμενο στιγμιότυπο οθόνης" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Επόμενο στιγμιότυπο οθόνης" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" #: src/bz-screenshot-page.blp:147 msgid "Reset View" msgstr "Επαναφορά προβολής" #: src/bz-screenshot-page.blp:158 msgid "Zoom Out" msgstr "Σμίκρυνση" #: src/bz-screenshot-page.blp:168 msgid "Zoom In" msgstr "Μεγέθυνση" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Καρουζέλ Στιγμιότυπων Οθόνης" #: src/bz-screenshots-carousel.blp:104 msgid "Open Screenshot Viewer" msgstr "Άνοιγμα προγράμματος προβολής στιγμιότυπων οθόνης" #: src/bz-search-widget.blp:106 msgid "Search Apps, Games, Software" msgstr "Αναζήτηση εφαρμογών, παιχνιδιών, λογισμικού" #: src/bz-search-widget.blp:150 msgid "Categories Unavailable" msgstr "Κατηγορίες Μη διαθέσιμες" #: src/bz-search-widget.blp:151 msgid "Search for apps using the search bar above." msgstr "Αναζητήστε εφαρμογές χρησιμοποιώντας τη γραμμή αναζήτησης παραπάνω." #: src/bz-search-widget.blp:235 msgid "No Applications Found" msgstr "Δεν βρέθηκαν εφαρμογές" #: src/bz-search-widget.c:241 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Δεν βρέθηκαν αποτελέσματα για το \"%s\" στο Flathub" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "Αντιγράφηκε!" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Αντιγραφή συνδέσμου" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Άνοιγμα συνδέσμου" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "Χρονοδιάγραμμα" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Εγκαταστάσεις:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Κόσμος" #: src/bz-tag-list.c:96 msgid "No Results Found" msgstr "Δεν βρέθηκαν αποτελέσματα" #: src/bz-tag-list.c:108 #, c-format msgid "Apps Tagged \"%s\"" msgstr "Εφαρμογές με ετικέτα \"%s\"" #: src/bz-tag-list.c:109 #, c-format msgid "%d Applications" msgstr "%d Εφαρμογές" #: src/bz-tag-list.c:124 msgid "Search failed" msgstr "Η αναζήτηση απέτυχε" #: src/bz-transaction-manager.c:1135 #, c-format msgid "Finished in %.02f seconds" msgstr "Ολοκληρώθηκε σε %.02f δευτερόλεπτα" #: src/bz-transaction-view.blp:95 msgid "App Add-on" msgstr "Πρόσθετο εφαρμογής" #: src/bz-transaction-view.blp:120 msgid "Runtime" msgstr "Περιβάλλον εκτέλεσης" #: src/bz-transaction-view.blp:146 src/bz-transaction-view.blp:172 msgid "Install Size" msgstr "Μέγεθος εγκατάστασης" #: src/bz-transaction-view.blp:200 msgid "Update" msgstr "Ενημέρωση" #: src/bz-transaction-view.c:139 #, c-format msgid "Transferred %s so far" msgstr "Μεταφέρθηκαν %s μέχρι τώρα" #: src/bz-transaction.c:336 msgid "Pending" msgstr "Σε εκκρεμότητα" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "Εγκατάσταση τώρα" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "Διατίθενται ενημερώσεις" #: src/bz-update-dialog.blp:11 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "" "Οι ακόλουθες εφαρμογές είναι επιλέξιμες για ενημερώσεις. Θέλετε να τις " "εγκαταστήσετε;" #: src/bz-update-dialog.c:134 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "%d περιβάλλοντα εκτέλεσης και/ή πρόσθετα είναι επιλέξιμα για ενημερώσεις. " "Θέλετε να τα εγκαταστήσετε;" #: src/bz-update-dialog.c:142 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "Επιπλέον, θα ενημερωθούν %d περιβάλλοντα εκτέλεσης και/ή πρόσθετα." #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Διαχείριση υπολειπόμενων δεδομένων χρήστη" #: src/bz-user-data-page.blp:41 msgid "Loading" msgstr "Φόρτωση" #: src/bz-user-data-page.blp:55 msgid "No User Data found" msgstr "Δεν βρέθηκαν δεδομένα χρήστη" #: src/bz-user-data-page.blp:60 msgid "User Data" msgstr "Δεδομένα χρήστη" #: src/bz-user-data-tile.c:144 #, c-format msgid "Removed User Data for %s" msgstr "Διαγράφηκαν τα δεδομένα χρήστη για %s" #: src/bz-user-data-tile.blp:74 msgid "Remove User Data" msgstr "Κατάργηση δεδομένων χρήστη" #: src/bz-window.blp:66 msgid "Inspect UI Entry" msgstr "Επιθεώρηση εισόδου UI" #: src/bz-window.blp:73 msgid "All Debug Actions" msgstr "Όλες οι ενέργειες εντοπισμού σφαλμάτων" #: src/bz-window.blp:107 msgid "Tasks" msgstr "Εργασίες" #: src/bz-window.blp:163 msgid "Stop Active Tasks" msgstr "Διακοπή ενεργών εργασιών" #: src/bz-window.blp:171 msgid "Clear History" msgstr "Εκκαθάριση ιστορικού" #: src/bz-window.blp:187 msgid "No Tasks Yet" msgstr "Δεν υπάρχουν ακόμη εργασίες" #: src/bz-window.blp:258 msgid "Refreshing Store Content" msgstr "Ανανέωση περιεχομένου καταστήματος" #: src/bz-window.blp:273 msgid "Curated" msgstr "Επιμελημένες" #: src/bz-window.blp:286 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:450 msgid "Network connection is metered — automatic store data sync is paused" msgstr "" "Η σύνδεση δικτύου μετράται — η αυτόματη συγχρονισμός δεδομένων του " "καταστήματος έχει παυθεί" #: src/bz-window.blp:451 src/bz-window.blp:460 msgid "Sync Manually" msgstr "Χειροκίνητος συγχρονισμός" #: src/bz-window.blp:459 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Έχετε σύνδεση στο δίκτυο, αλλά βλέπετε μια προσωρινά αποθηκευμένη έκδοση του " "Flathub" #: src/bz-window.blp:534 msgid "_Login with Flathub" msgstr "_Σύνδεση με το Flathub" #: src/bz-window.blp:540 msgid "_Manage Leftover User Data" msgstr "_Διαχείριση υπολειπόμενων δεδομένων χρήστη" #: src/bz-window.blp:545 msgid "_Synchronize Remotes" msgstr "_Συγχρονισμός απομακρυσμένου διακομιστής" #: src/bz-window.blp:571 msgid "Open Bazaar Inspector" msgstr "Άνοιγμα Επιθεωρητή Bazaar" #: src/bz-window.blp:580 msgid "Log Out" msgstr "Αποσύνδεση" #: src/bz-window.c:475 #, c-format msgid "%d Update Available" msgid_plural "%d Updates Available" msgstr[0] "%d Διαθέσιμη ενημέρωση" msgstr[1] "%d Διαθέσιμες ενημερώσεις" #: src/bz-window.c:973 msgid "" "The ability to inspect and install local .flatpak bundle files is coming " "soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "Η δυνατότητα ελέγχου και εγκατάστασης τοπικών αρχείων πακέτων .flatpak θα " "είναι διαθέσιμη σύντομα! Εν τω μεταξύ, δοκιμάστε να εκτελέσετε την εντολή\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "στη γραμμή εντολών." #: src/bz-window.c:1100 msgid "Can't do that right now!" msgstr "Δεν μπορεί να γίνει αυτή τη στιγμή!" #: src/bz-window.c:1231 msgid "Keep Data" msgstr "Διατήρηση δεδομένων" #: src/bz-window.c:1232 msgid "Allow restoring settings and content" msgstr "Επιτρέψτε την επαναφορά ρυθμίσεων και περιεχομένου" #: src/bz-window.c:1241 msgid "Permanently remove app data to save space" msgstr "Διαγράψτε μόνιμα τα δεδομένα των εφαρμογών για να εξοικονομήσετε χώρο" #: src/bz-window.c:1264 #, c-format msgid "Install %s?" msgstr "Εγκατάσταση %s?" #: src/bz-window.c:1267 msgid "May install additional shared components" msgstr "Μπορεί να εγκαταστήσει επιπλέον κοινόχρηστα στοιχεία" #: src/bz-window.c:1286 #, c-format msgid "Remove %s?" msgstr "Αφαίρεση %s?" #: src/bz-window.c:1290 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Δεν θα είναι δυνατή η χρήση του %s μετά την απεγκατάστασή του." #: src/bz-window.c:1353 msgid "Resume Current Tasks" msgstr "Συνέχιση τρεχουσών εργασιών" #: src/bz-window.c:1359 msgid "Pause Current Tasks" msgstr "Παύση τρέχουσων εργασιών" #: src/bz-world-map.c:572 #, c-format msgid "%s: %'u downloads" msgstr "%s: %'u λήψεις" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Γενικά" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Άνοιγμα Διαλόγου Αναζήτησης" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Άνοιγμα Προτιμήσεων" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "Ανανέωση" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Εναλλαγή Διαχειριστή Συναλλαγών" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Εμφάνιση συντομεύσεων" #: src/gtk/shortcuts-dialog.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "Έξοδος" bazaar-org-bazaar-b6e9a65/po/es.po000066400000000000000000002665201522167256300170310ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2025 Spanish translations for bazaar package # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025 robotta # robotta <>, 2025. # Óscar Fernández Díaz , 2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-27 10:28+0200\n" "PO-Revision-Date: 2026-06-27 21:26+0200\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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Añada, elimine o actualice programas flatpak en este ordenador" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistema;GestorDePaquetes;Discover;Flatpak;Software;Store;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Ventana nueva" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Descubrir e instalar aplicaciones" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Una tienda de aplicaciones rápida y moderna para Linux enfocada en descubrir " "e instalar aplicaciones y complementos Flatpak, particularmente de Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Poner en cola varias instalaciones y seguir explorando" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Ver fácilmente los permisos de la aplicación" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Inicie sesión en Flathub para ver y gestionar sus favoritos" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Buscar aplicaciones directamente desde GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "Los colaboradores de Bazar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "La página de inicio que muestra las aplicaciones de Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Página de exhibición de la aplicación" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Página de la biblioteca" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Página de búsqueda" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Página de categoría" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Dejó de recibir actualizaciones" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Desinstalar" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Instalar" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Gestionar complementos" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "No hay complementos visibles" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Sus preferencias de filtrado actuales ocultan todos los complementos " "conocidos. Intente ajustarlas." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Página del complemento" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Descargas por mes" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Dejó de recibir actualizaciones del sistema" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Este complemento usa un entorno de ejecución que ya no recibe " "actualizaciones ni correcciones de seguridad. Puede llegar a ser inseguro " "usarlo." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Complemento para %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Mostrar menos" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 src/bz-section-view.blp:71 msgid "Show More" msgstr "Mostrar más" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Estadísticas de descarga" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Calificación por edades" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Violencia de dibujos animados" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "No hay información sobre violencia de dibujos animados" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Violencia fantástica" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "No hay información sobre violencia fantástica" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Violencia realista" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "No hay información sobre violencia realista" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Violencia con derramamiento de sangre" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "No hay información sobre derramamiento de sangre" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Violencia sexual" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "No hay información sobre violencia sexual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alcohol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "No hay información sobre referencias al alcohol" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Estupefacientes" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "No hay información sobre referencias a drogas ilegales" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabaco" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "No hay información sobre referencias a productos de tabaco" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Desnudez" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "No hay información sobre desnudez de ningún tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Temas sexuales" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "No hay información sobre referencias o descripciones de naturaleza sexual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Lenguaje soez" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "No hay información sobre lenguaje soez de ningún tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Humor inapropiado" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "No hay información sobre humor inapropiado" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Discriminación" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "No hay información sobre lenguaje discriminatorio de ningún tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Publicidad" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "No hay información sobre publicidad de ningún tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Apuestas y juego" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "No hay información sobre juego o apuestas de ningún tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Compras" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "No hay información sobre la posibilidad de gastar dinero" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Conversación entre usuarios" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "No hay información sobre formas de conversar con otros usuarios" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Conversación de sonido entre usuarios" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "No hay información sobre formas de hablar con otros usuarios" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Detalles de contacto" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "No hay información sobre compartir nombres de usuario de redes sociales o " "direcciones de correo electrónico" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Información de identificación" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "No hay información sobre compartir información de usuario con terceros" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Compartir ubicación" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "No hay información sobre compartir la ubicación física con otros usuarios" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostitución" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "No hay información sobre referencias a la prostitución" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adulterio" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "No hay información sobre referencias al adulterio" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Personajes sexualizados" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "No hay información sobre personajes sexualizados" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Profanación" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "No hay información sobre referencias a la profanación" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Restos humanos" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "No hay información sobre restos visibles de personas fallecidas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Esclavitud" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "No hay información sobre referencias a la esclavitud" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "No incluye referencias a drogas" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "No incluye juramentos, lenguaje soez ni otros tipos de lenguaje fuerte" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "No incluye anuncios ni transacciones monetarias" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "No incluye sexo ni desnudez" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "No incluye una funcionalidad de conversación sin control" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "No incluye violencia" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogas" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Lenguaje fuerte" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Dinero" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Social" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Violencia" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Todas" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s tiene una clasificación por edades desconocida" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s es adecuado para todos" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s es adecuado para niños pequeños" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s es adecuado para niños" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s es adecuado para adolescentes" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s es adecuado para adultos" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s es adecuado para %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Carpeta del sistema %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Subcarpeta personal %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Carpetas del sistema anfitrión" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Configuración del sistema anfitrión desde /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Subcarpeta de escritorio %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Carpeta de escritorio" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Subcarpeta de documentos %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Carpeta de documentos" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Subcarpeta de música %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Carpeta de música" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Subcarpeta de imágenes %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Carpeta de imágenes" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Subcarpeta de compartición pública %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Carpeta de compartición pública" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Subcarpeta de vídeos %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Carpeta de vídeos" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Subcarpeta de plantillas %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Carpeta de plantillas" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Subcarpeta de caché de usuario %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Carpeta de caché de usuario" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Subcarpeta de configuración de usuario %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Carpeta de configuración de usuario" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Subcarpeta de datos de usuario %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Carpeta de datos de usuario" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Subcarpeta del entorno de ejecución de usuario %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Carpeta del entorno de ejecución de usuario" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Acceso al sistema de archivos para %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Ruta del sistema de archivos desconocida" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Tamaño de la descarga" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Tamaño instalado" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Cantidad que descargar de internet" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Tamaño en disco" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Abrir la carpeta de datos de usuario" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Sus datos de usuario" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Cachés, ajustes y otros datos de la aplicación" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Caché" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Datos temporales en caché" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Limpiar caché" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Tamaño del entorno de ejecución instalado" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Tamaño de descarga del entorno de ejecución" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "N/D" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Tamaño de la aplicación" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Verificado" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Instalado" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "" "robotta\n" "Óscar Fernández Díaz " #: src/bz-application.c:799 msgid "Special Thanks" msgstr "Agradecimientos especiales" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "¡Sesión cerrada correctamente!" #: src/bz-application.c:995 msgid "Performing setup…" msgstr "Realizando la configuración…" #: src/bz-application.c:1087 msgid "Set Up System Flathub?" msgstr "¿Configurar Flathub en el sistema?" #: src/bz-application.c:1090 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "El repositorio remoto Flathub del sistema no está configurado. Bazar " "requiere que Flathub esté configurado en la instalación de Flatpak del " "sistema para explorar e instalar aplicaciones.\n" "\n" "Aún puede usar Bazar para explorar y eliminar aplicaciones ya instaladas." #: src/bz-application.c:1097 msgid "Set Up Flathub?" msgstr "¿Configurar Flathub?" #: src/bz-application.c:1100 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub no está configurado en este sistema. No podrá explorar e instalar " "aplicaciones en Bazar si no está disponible.\n" "\n" "Aún puede usar Bazar para explorar y eliminar aplicaciones ya instaladas." #: src/bz-application.c:1106 msgid "Later" msgstr "Más tarde" #: src/bz-application.c:1107 msgid "Set Up Flathub" msgstr "Configurar Flathub" #: src/bz-application.c:1626 msgid "A backend error occurred" msgstr "Ocurrió un error en el motor de soporte" #: src/bz-application.c:1826 src/bz-application.c:4045 msgid "Refreshing…" msgstr "Actualizando…" #: src/bz-application.c:1990 src/bz-application.c:4043 #, c-format msgid "Loading %d apps…" msgstr "Cargando %d aplicaciones…" #: src/bz-application.c:2043 msgid "Failed to open file" msgstr "Falló al abrir el archivo" #: src/bz-application.c:2159 msgid "An initialization error occurred" msgstr "Ocurrió un error de inicialización" #: src/bz-application.c:2553 msgid "Checking for updates…" msgstr "Comprobando actualizaciones…" #: src/bz-application.c:2609 msgid "Failed to check for updates" msgstr "Falló al comprobar las actualizaciones" #: src/bz-application.c:3755 msgid "Malformed Link" msgstr "Enlace malformado" #: src/bz-application.c:3756 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "El enlace usado para abrir esta aplicación tiene mayúsculas incorrectas y " "podría dejar de funcionar en el futuro.\n" "\n" "Esto se debe probablemente a que KRunner envía identificadores de aplicación " "incorrectos." #: src/bz-application.c:3764 msgid "Could not find app" msgstr "No se pudo encontrar la aplicación" #: src/bz-application.c:3795 msgid "Failed to load metainfo" msgstr "Falló al cargar la metainformación" #: src/bz-application.c:4047 msgid "Writing to cache…" msgstr "Escribiendo en la caché…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Mostrar todo" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Todo sobre «%s»" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d aplicaciones" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Falló al cargar el artículo" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Instalación de paquete independiente" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Las dependencias adicionales pueden requerir espacio extra" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Instalar esta aplicación puede requerir añadir una nueva fuente de software. " "Otras aplicaciones de esta fuente aparecerán en Bazar.\n" "\n" "Solo añada esta fuente si está seguro de que confía en ella." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "¡Instalado correctamente!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Abrir" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Mostrar detalles de la aplicación" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Ya instalado" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Instalación fallida" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Tamaño de instalación desconocido" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Cerca de %s por instalar" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Sin permisos especiales" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f M" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f K" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d descargas en el último mes" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s entorno de ejecución" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Descargar" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Información de tamaño no disponible" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Tamaño de la descarga de %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Para todas las edades" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Información de clasificación por edades no disponible" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Apto para todas las edades" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Apto para mayores de %d" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Desconocido" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Software libre licenciado bajo %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Software libre" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Software propietario" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Licencia especial: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Software libre" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Propietario" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Licencia especial" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Adaptativo" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "Solo para escritorio" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Funciona en escritorios, tabletas y teléfonos" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Podría no funcionar en dispositivos móviles" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Seguro" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Riesgo bajo" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Riesgo medio" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Riesgo alto" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Vacío" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Sin selección dedicada" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "No se proporciona información de selección dedicada en este sistema. Aún " "puede explorar aplicaciones en Flathub" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Explorar Flathub" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Sin conexión" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Navegador" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "No verificado" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Información del desarrollador no disponible." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "La propiedad del identificador de aplicación %s no ha sido verificada y " "podría ser un paquete de la comunidad." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "La propiedad del identificador de aplicación %s ha sido verificada " "manualmente por el equipo de Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "La propiedad del identificador de aplicación %1$s ha sido verificada por " "%2$s en %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "" "La propiedad del identificador de aplicación %1$s ha sido verificada usando " "%2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "La propiedad del identificador de aplicación %s ha sido verificada." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Notas de lanzamiento completas" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "¡Este lanzamiento fue posible gracias a usuarios como usted!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Me encanta crear Bazar, pero no puedo hacerlo solo. Ayude a apoyar el " "desarrollo continuo haciendo una donación en Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Donar a Bazar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "¿Qué hay de nuevo en %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Lanzado el %-e de %B de %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Elija una instalación" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Tiene varias versiones instaladas de esta aplicación. ¿Con cuál quiere " "proceder?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Cancelar" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Solo para este usuario" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "este usuario" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "todos los usuarios" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Detalles" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Copiar" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:408 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "¡Copiado!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Recuento de favoritos" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Falló al actualizar el favorito" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Inicie sesión con Flathub para gestionar los favoritos" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Iniciar sesión" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:346 msgid "Favorites" msgstr "Favoritos" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "Instalar todo" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Cargando" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Sin favoritos" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Las aplicaciones que marque como favoritas aparecerán aquí" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Apoyar esta aplicación" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Quitar de favoritos" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Falló al quitar de favoritos" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Anterior" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Siguiente" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Edición" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "MIDI" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mezclador" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Música" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Reproductor" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Grabadora" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Secuenciador" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Sintonizador" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "Televisión" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Emulación" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Acción" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Aventura" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Arcade" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Bloques" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Tablero" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Cartas" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Infantil" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Lógica" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Juegos de rol" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Disparos" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Simulación" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Deportes" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Estrategia" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Navegadores" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Conversación" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Correo electrónico" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Compartición de archivos" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Sonido y vídeo" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Multimedia" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Más sonido y vídeo" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Herramientas de desarrollo" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Desarrollo" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Más herramientas de desarrollo" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Educación" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Aprendizaje" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Más educación" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Juegos" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Jugar" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Más juegos" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Fotografía y edición de gráficos" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Creación" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Más fotografía y edición de gráficos" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Conexiones y redes" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Más conexiones y redes" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Productividad" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Trabajo" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Más productividad" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Ciencia" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Más ciencia" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Sistema" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Más sistema" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Utilidades" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Herramientas" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Más utilidades" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Tendencia" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Más tendencias" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Populares" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Ver más populares" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Recién añadidas" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Novedades" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Ver más novedades" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Actualizadas recientemente" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Actualizado" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Ver más actualizadas recientemente" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Móvil" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Más para móviles" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Más Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "Aplicaciones de KDE" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Más aplicaciones de KDE" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Juegos" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Más juegos" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Emuladores" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Más emuladores" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Lanzadores" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Más lanzadores de juegos" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Herramientas de juegos" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Más herramientas de juegos" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub no está añadido" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "El repositorio remoto de Flathub no se encontró en ninguna de sus " "instalaciones de Flatpak." #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub no está disponible" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "No se puede conectar con Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Aún puede buscar y gestionar aplicaciones." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Buscar aplicaciones" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Volver a conectar" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Aplicación del día" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Para llevar" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Aplicaciones para sus teléfonos y tabletas con Linux" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Más aplicaciones móviles" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Nosotros​ ♥​ juegos" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Juegos y aplicaciones para ejecutar sus títulos favoritos" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Sin resultados" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Prueba con un término de búsqueda diferente" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Contenido" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Esta es una vista previa local, algunos detalles pueden diferir de la lista " "publicada" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Vista previa de la apariencia en la tienda" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Soporte" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Esta aplicación usa un entorno de ejecución que ya no recibe actualizaciones " "ni correcciones de seguridad. Puede llegar a ser inseguro usarlo." #: src/bz-full-view.blp:540 msgid "Trash Data" msgstr "Enviar datos a la papelera" #: src/bz-full-view.blp:603 msgid "Add-ons" msgstr "Complementos" #: src/bz-full-view.blp:638 msgid "More Add-Ons" msgstr "Más complementos" #: src/bz-full-view.blp:649 msgid "Links" msgstr "Enlaces" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Sin enlace" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Esta aplicación tiene una licencia de código abierto (FLOSS), lo que " "significa que el código fuente se puede auditar por seguridad." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Esta aplicación tiene una licencia propietaria, lo que significa que el " "código fuente se desarrolla de forma privada y no puede ser auditado por un " "tercero independiente." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Más aplicaciones" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Más aplicaciones de %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Otras aplicaciones de este desarrollador" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Otras aplicaciones de %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s no está instalada, pero todavía tiene %s de datos guardados." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Otras aplicaciones" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d aplicación" msgstr[1] "%d aplicaciones" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Falló al eliminar los datos de usuario" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Soporte de hardware" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Soporte de teclado" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Requiere teclado" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Recomienda teclado" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Soporta teclado" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Soporte desconocido de teclado" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Soporte de ratón" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Requiere ratón o dispositivo de puntero" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Recomienda ratón o dispositivo de puntero" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Soporta ratón o dispositivo de puntero" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Soporte desconocido de ratón o dispositivo de puntero" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Soporte de pantalla táctil" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Requiere pantalla táctil" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Recomienda pantalla táctil" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Soporta pantalla táctil" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Soporte desconocido de pantalla táctil" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Soporte de móviles" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Funciona en móviles" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Puede no funcionar bien en móviles" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Soporte de escritorio" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Funciona bien en pantallas grandes" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s funciona mejor en hardware específico" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s funciona en la mayoría de dispositivos" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Abrir" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Desinstalar la aplicación" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Quitar" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Actualizar" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Quitar" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "Instalar %s desde %s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "Instalar %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Cancelar" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Cancelando" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Botón de donación" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Buscar aplicaciones instaladas" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Limpiar búsqueda" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "No se encontraron aplicaciones" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Buscar en la tienda en su lugar" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Biblioteca" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Actualizaciones pendientes" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Descargas" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Desinstaladas recientemente" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Limpiar tareas completadas" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Opciones de ordenación" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Ordenar por" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Nombre" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Tamaño" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" "No se encontraron coincidencias para «%s» en la lista de aplicaciones " "instaladas" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u actualización disponible" msgstr[1] "%u actualizaciones disponibles" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u aplicación instalada" msgstr[1] "%u aplicaciones instaladas" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Participe" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Saber más" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Licencia desconocida" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Creado por la comunidad" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Esta aplicación se desarrolla en código abierto por una comunidad " "internacional.\n" "\n" "Puede contribuir a esta aplicación y ayudar a mejorarla." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Se desconoce la licencia de esta aplicación" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Esta aplicación se desarrolla en código abierto por una comunidad " "internacional, y se lanza bajo la licencia %s.\n" "\n" "Puede contribuir a esta aplicación y ayudar a mejorarla." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Esta aplicación no se desarrolla en código abierto, así que solo sus " "desarrolladores saben cómo funciona. Puede ser insegura de maneras difíciles " "de detectar, y puede cambiar sin previo aviso.\n" "\n" "Puede que no pueda contribuir a esta aplicación." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Esta aplicación se desarrolla bajo la licencia especial %s.\n" "\n" "Puede o no ser capaz de colaborar con esta aplicación." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Licencia" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Conectar a Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Algo salió mal" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" "Inicie sesión para sincronizar sus aplicaciones favoritas entre dispositivos" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Finalizar" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "¡Hola, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Seleccionar archivo de metainformación" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Archivos de metainformación" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Seleccionar icono (opcional)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Archivos de imagen" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Vista previa" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Preferencias" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "La conexión de red es medida: se ha pausado la actualización automática de " "datos de la tienda" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 src/bz-window.blp:246 msgid "Refresh Manually" msgstr "Actualizar manualmente" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Filtros de contenido" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Solo software libre" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Ocultar software propietario al explorar y buscar" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Solo resultados de Flathub" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "" "Limitar los resultados de búsqueda y exploración a aplicaciones disponibles " "en Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Solo resultados verificados" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Ocultar los resultados que no estén verificados en Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Ocultar aplicaciones al final de su vida útil" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Ocultar aplicaciones que ya no cuentan con el soporte de sus desarrolladores" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Tema de la barra de progreso" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Color de realce personal" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Colores del Orgullo" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Colores del Orgullo Lésbico" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Colores del orgullo homosexual masculino" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Colores del Orgullo Transgénero" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Colores del Orgullo No Binario" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Colores del Orgullo Bisexual" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Colores del Orgullo Asexual" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Colores del Orgullo Pansexual" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Colores del Orgullo Arromántico" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Colores del Orgullo de Género fluido" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Colores del Orgullo Polisexual" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Colores del Orgullo Omnisexual" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Colores del orgullo aroace" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Colores del orgullo agénero" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Colores del orgullo genderqueer" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Colores del orgullo intersexual" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Colores del orgullo demigénero" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Colores del orgullo biromántico" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Colores del orgullo de la discapacidad" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Colores del orgullo femboy" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Colores del orgullo neutrois" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "Historial de versiones" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Historial de versiones" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Hoy" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Ayer" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "hace %d día" msgstr[1] "hace %d días" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "hace %d semana" msgstr[1] "hace %d semanas" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "hace %d mes" msgstr[1] "hace %d meses" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "hace %d año" msgstr[1] "hace %d años" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e de %B de %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Versión %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "No hay detalles de este lanzamiento" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Obtener más información" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Desinstalar" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Obtener" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Permisos desconocidos" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Faltan los permisos para esta aplicación." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Sin permisos" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "La aplicación está completamente aislada en un entorno protegido" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Acceso a la red" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Puede acceder a internet" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Sin acceso a la red" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "No puede acceder a internet" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Acceso a dispositivos de usuario" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Puede acceder a dispositivos como cámaras web o mandos de juego" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Sin acceso a dispositivos de usuario" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "No puede acceder a dispositivos como cámaras web o mandos de juego" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Acceso a dispositivos de entrada" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Puede acceder a dispositivos de entrada" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Acceso al micrófono y reproducción de sonido" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "Puede escuchar usando micrófonos y reproducir sonido sin pedir permiso" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Acceso a dispositivos del sistema" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Puede acceder a dispositivos del sistema que requieren permisos elevados" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Acceso al contenido de la pantalla" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Puede acceder al contenido de la pantalla u otras ventanas" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Sistema de ventanas heredado" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Siempre usa un sistema de ventanas heredado (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Permisos arbitrarios" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Puede adquirir permisos arbitrarios" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Ajustes de usuario" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Puede acceder y cambiar los ajustes de usuario" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Acceso completo de lectura/escritura al sistema de archivos" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Puede leer y escribir todos los datos en el sistema de archivos" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Acceso de lectura/escritura a la carpeta personal" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Puede leer y escribir todos los datos en su directorio personal" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Acceso completo de lectura al sistema de archivos" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Puede leer todos los datos en el sistema de archivos" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Acceso de lectura a la carpeta personal" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Puede leer todos los datos en su directorio personal" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Acceso de lectura/escritura a la carpeta de descargas" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Puede leer y escribir todos los datos en su directorio de descargas" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Acceso de lectura a la carpeta de descargas" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Puede leer todos los datos en su directorio de descargas" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Puede leer y escribir todos los datos en el directorio" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Puede leer todos los datos en el directorio" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Sin acceso al sistema de archivos" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "No puede acceder al sistema de archivos en absoluto" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Usa servicios del sistema" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Puede solicitar datos de servicios del sistema que no sean portales" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Usa servicios de sesión" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Puede solicitar datos de servicios de sesión que no sean portales" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Sin acceso a servicios" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" "No puede acceder a servicios de sesión o del sistema que no sean portales en " "absoluto" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Desarrollador de aplicaciones verificado" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "" "Se ha verificado que el desarrollador de esta aplicación es quien dice ser" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Código propietario" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "El código fuente no es público, por lo que no se puede auditar de forma " "independiente y podría ser inseguro" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Código auditable" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "El código fuente es público y se puede auditar de forma independiente, lo " "que hace que la aplicación sea probablemente más segura" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Usa el servicio del sistema %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Usa el servicio de sesión %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Usa el servicio %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Puede ver el servicio que no es portal" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Puede comunicarse con el servicio que no es portal" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Puede poseer el servicio que no es portal" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Integración con el menú global" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Puede mostrar sus menús en una barra de menús global" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Integración con los ajustes de KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Puede detectar cuándo cambian los ajustes del escritorio de KDE" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Ajustes globales de KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "" "Puede leer las preferencias del escritorio de KDE como tipografías y colores" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Servicio de almacenamiento secreto" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Puede almacenar y recuperar sus propias contraseñas usando el depósito de " "claves del sistema" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Servicio de notificaciones del escritorio" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Puede enviar notificaciones del escritorio" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Integración con la bandeja del sistema" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Puede mostrar un icono en la bandeja del sistema" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Integración con KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Puede interactuar con dispositivos vinculados mediante KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Esta aplicación tiene un permiso que le permite indirectamente otorgarse " "cualquier otro permiso que desee, eludiendo el entorno protegido de " "Flatpak.\n" "\n" "Por lo tanto, puede hacer cualquier cosa que una aplicación normal sin " "aislamiento pueda hacer, como acceder a todos sus archivos y conectarse a " "internet.\n" "\n" "Ver los otros permisos aún puede dar una mejor idea de lo que es probable " "que haga la aplicación." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Ver otros permisos" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "ID de la aplicación" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Esta aplicación usa una versión obsoleta de la plataforma de software (SDK) " "y podría contener errores o vulnerabilidades de seguridad que no se " "solucionarán." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Seguridad" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "%s es seguro" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s no tiene permisos inseguros" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "%s es probablemente seguro" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s es posiblemente inseguro" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "%s es inseguro" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Capturas de pantalla" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Captura de pantalla anterior" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Captura de pantalla siguiente" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Copiar imagen" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Restablecer vista" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Alejar" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Acercar" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Carrusel de capturas de pantalla" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Sin capturas de pantalla" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Abrir el visor de capturas de pantalla" #: src/bz-screenshots-carousel.c:301 #, c-format msgid "Screenshot %u %s" msgstr "Captura de pantalla %u %s" #: src/bz-screenshots-carousel.c:303 #, c-format msgid "Screenshot %u" msgstr "Captura de pantalla %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filtros" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Verificado" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Libre/Abierto" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Sin fin de vida ú_til" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Filtrar aplicaciones al final de su vida útil" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "Adaptado a _móviles" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Categorías" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Buscar aplicaciones, juegos, programas" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Filtros de búsqueda" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Limpiar búsqueda" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Explorar categorías" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Categorías no disponibles" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Busque aplicaciones usando la barra de búsqueda de arriba." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "No se encontraron aplicaciones" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "No se encontraron resultados para «%s» en Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Vídeo" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Ofimática" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Calendario" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Mensajería" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Dibujo" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulador" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Página de Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Página del proyecto" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Rastreador de problemas" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Preguntas frecuentes" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Ayuda" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Donar" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Traducir" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Contactar" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Código fuente" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Contribuir" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifiesto" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Copiar enlace" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Línea de tiempo" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Instalaciones:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Global" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Desde el 15/4/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2f M instalaciones totales" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2f K instalaciones totales" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d instalaciones totales" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "No se encontraron resultados" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "La búsqueda falló" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Conservar los datos de usuario" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Permitir restaurar los ajustes personales y el contenido" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Eliminar todos los datos" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Borrar permanentemente los datos de usuario para ahorrar espacio" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "¿Instalar %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Seleccione qué versión instalar. Podría instalar componentes compartidos " "adicionales." #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Puede que instale componentes compartidos adicionales" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Cancelar" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Instalar" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "¿Eliminar %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Seleccione qué versión quitar." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "No será posible usar %s después de desinstalarla." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "«%s» es de alto riesgo" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Esta aplicación tiene acceso completo a su sistema, incluyendo todos sus " "archivos, historial de navegación, contraseñas guardadas y más. También " "tiene acceso a internet, lo que significa que podría enviar sus datos a " "terceros externos.\n" "\n" "Debido a que la aplicación es propietaria, no se puede auditar qué hace con " "estos permisos." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Esta aplicación usa el sistema de ventanas heredado X11, lo que le permite " "registrar todas las pulsaciones de teclas, capturar capturas de pantalla " "y monitorizar otras aplicaciones. También tiene acceso a internet, lo " "que significa que podría enviar sus datos a terceros externos.\n" "\n" "Debido a que la aplicación es propietaria, no se puede auditar qué hace con " "estos permisos." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "Instalar de _todos modos" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Falló al cargar el diálogo de transacción" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Todas las aplicaciones ya están instaladas" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Aceptar" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "¿Instalar %u aplicación?" msgstr[1] "¿Instalar %u aplicaciones?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Se instalará lo siguiente. También se podrían instalar componentes " "compartidos adicionales." #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Se instalarán %d complementos." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Adicionalmente, se instalarán complementos." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Instalar todo" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Terminado en %.02f segundos" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Complemento de la aplicación" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Entorno de ejecución" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "En cola" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Hecho" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Cancelado" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Error" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Cancelar transacción" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Mostrar detalles" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Mostrar información del error" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s liberados" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Error de transacción" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Pendiente" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Actualizar todo" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u actualización del entorno de ejecución" msgstr[1] "%u actualizaciones del entorno de ejecución" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Gestionar los datos de usuario restantes" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "No se encontraron datos de usuario" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Datos de usuario" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Enviar datos de usuario a la papelera" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Se enviaron a la papelera los datos de usuario de %s" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Actualizando" #: src/bz-window.blp:89 msgid "Curated" msgstr "Seleccionado" #: src/bz-window.blp:101 msgid "Explore" msgstr "Explorar" #: src/bz-window.blp:128 msgid "Search" msgstr "Buscar" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Menú principal" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "¡Está ejecutando una nueva versión de Bazar!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Ver las novedades" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Tiene una conexión de red pero está viendo una versión en caché de Flathub" #: src/bz-window.blp:245 msgid "Network connection is metered — automatic refreshes disabled" msgstr "" "La conexión de red es medida: se han desactivado las actualizaciones " "automáticas" #: src/bz-window.blp:290 msgid "_Donate to Bazaar" msgstr "_Donar a Bazar" #: src/bz-window.blp:296 msgid "_Refresh" msgstr "Ac_tualizar" #: src/bz-window.blp:300 msgid "_Login With Flathub" msgstr "Iniciar sesión con _Flathub" #: src/bz-window.blp:306 msgid "_Manage Leftover User Data" msgstr "_Gestionar los datos de usuario restantes" #: src/bz-window.blp:312 msgid "_Preferences" msgstr "_Preferencias" #: src/bz-window.blp:317 msgid "_Keyboard Shortcuts" msgstr "Atajos del _teclado" #: src/bz-window.blp:322 msgid "_About Bazaar" msgstr "_Acerca de Bazar" #: src/bz-window.blp:328 msgid "_Quit Bazaar" msgstr "_Salir de Bazaar" #: src/bz-window.blp:353 msgid "Log Out" msgstr "Cerrar sesión" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Falló al iniciar la aplicación" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "¡No puede quitar Bazaar desde el propio Bazaar!" #: src/bz-window.c:1132 src/bz-window.c:1166 msgid "Can't do that right now!" msgstr "¡No se puede hacer eso ahora mismo!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Instalación" msgstr[1] "Instalaciones" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navegación" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Abrir la página de exploración" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Abrir la página de la biblioteca" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Abrir la página de búsqueda" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Repositorios remotos" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Sincronizar repositorios remotos" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "General" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Abrir preferencias" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar atajos" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Cerrar ventana" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Salir de Bazaar" bazaar-org-bazaar-b6e9a65/po/eu.po000066400000000000000000002624671522167256300170410ustar00rootroot00000000000000# Basque translations for bazaar package. # Copyright (C) 2026 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2026. # Ibai Oihanguren Sala , 2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-09 00:56+0200\n" "PO-Revision-Date: 2026-06-09 00:59+0200\n" "Last-Translator: Ibai Oihanguren Sala \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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Gehitu, kendu edo eguneratu ordenagailuko flatpak softwarea" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistema;Pakete;Kudeatzailea;Deskubritu;Flatpak;Softwarea;Denda;Biltegia;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Leiho berria" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Deskubritu eta kudeatu aplikazioak" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Aplikazio biltegi bizkor eta modernoa Linuxerako, Flatpak aplikazio eta " "gehigarriak (bereziki Flathub-etik) deskubritu eta instalatzera bideratua." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Gehitu hainbat instalazio ilarara eta jarraitu nabigatzen" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Ikusi aplikazioen baimenak era errazean" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Hasi saioa Flathub-en zure gogokoak ikusi eta kudeatzeko" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Bilatu aplikazioak zuzenean GNOME Shell-etik" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:762 msgid "The Bazaar Contributors" msgstr "Bazaarren kolaboratzaileak" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Flathub aplikazioak erakusten dituen orri nagusia" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Aplikazio baten orria" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Liburutegi orria" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Bilaketa orria" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Kategoria orria" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Eguneratzeak jasotzeari utzi dio" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Desinstalatu" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 #: src/bz-bundle-install-dialog.blp:159 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Instalatu" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Kudeatu gehigarriak" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Ez dago gehigarririk ikusgai" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Uneko iragazki hobespenek gehigarri erabilgarri guztiak ezkutatu dituzte. " "Doitu hobespenak gehigarriak ikusteko." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Gehigarriaren orria" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "Deskarga hileko" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "Oinarrizko eguneratzeak jasotzari utzi dio" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Gehigarri honek eguneratzerik edo segurtasun-konponketarik jasotzen ez duen " "exekuzio-ingurune bat darabil. Baliteke berau erabiltzea ez izatea segurua." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "%s(r)entzako gehigarria" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Gutxiago erakutsi" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Gehiago erakutsi" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Deskargen estatistikak" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Adin balorazioa" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Marrazki bizidunetako indarkeria" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Ez dago informaziorik marrazki bizidunetako indarkeriari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Fantasiazko indarkeria" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Ez dago informaziorik fantasiazko indarkeriari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Indarkeria errealista" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Ez dago informaziorik indarkeria errealistari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Sarraskia irudikatzen duen indarkeria" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "" "Ez dago informaziorik sarraskia irudikatzen duen indarkeriari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Indarkeria sexuala" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Ez dago informaziorik indarkeria sexualari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alkohola" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Ez dago informaziorik alkohola aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Legez kanpoko drogak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Ez dago informaziorik legez kanpoko drogak aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabakoa" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Ez dago informaziorik tabakoa aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Biluztasuna" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Ez dago informaziorik biluztasunari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Gai sexualak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Ez dago informaziorik gai sexualak aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Hizkera zakarra" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Ez dago informaziorik edonolako hizkera zakarrari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Umore ezegokia" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Ez dago informaziorik umore ezegokiari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Bereizkeria" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Ez dago informaziorik edonolako bereizkeriari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Publizitatea" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Ez dago informaziorik edonolako publizitateari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Jokoa (apustuak)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Ez dago informaziorik edonolako apustuei dagokienean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Erosketak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Ez dago informaziorik diruz erosketak egiteko aukerari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Erabiltzaileen arteko txatak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "" "Ez dago informaziorik beste erabiltzaileekin berriketan aritzeko bideei " "dagokienean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Erabiltzaileen arteko audio txatak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Ez dago informaziorik beste erabiltzaileekin hitz egiteko bideei dagokienean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Harremanetarako xehetasunak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Ez dago informaziorik sare sozialetako erabiltzaileak edo email helbideak " "partekatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Identifikatzeko informazioa" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Ez dago informaziorik erabiltzailearen datuak hirugarren batekin " "partekatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Kokapena partekatzea" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Ez dago informaziorik beste erabiltzaileekin kokapen fisikoa partekatzeari " "dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostituzioa" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Ez dago informaziorik prostituzioa aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adulterioa" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Ez dago informaziorik adulterioa aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Pertsonaia sexualizatuak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Ez dago informaziorik pertsonaia sexualizatuei dagokienean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Profanazioa" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Ez dago informaziorik profanazioa aipatzeari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Giza hondakinak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Ez dago informaziorik giza hondakinak erakusteari dagokionean" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Esklabotza" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Ez dago informaziorik esklabotza aipatzeari dagokionean" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Ez die drogei aipamenik egiten" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Ez du biraorik, juramenturik edo bestelako hizkera zakarrik erabiltzen" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Ez du iragarkirik edo diru-trukerik" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Ez du sexu edukirik edo biluztasunik erakusten" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Ez du kontrolik gabeko txat funtzionalitaterik" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Ez du indarkeriarik erakusten" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogak" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Hizkera zakarra" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Dirua" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Soziala" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Indarkeria" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Guztiak" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s(e)k adin balorazio ezezaguna dauka" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s edonorentzako da egokia" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s egokia da haur txikientzako" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s egokia da haurrentzako" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s egokia da nerabeentzako" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s egokia da helduentzako" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s egokia da %s urte bitartekoentzako" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "%s sistemako karpeta" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Karpeta nagusiko %s azpikarpeta" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Ostalari sistemako karpetak" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Ostalari sistemako konfigurazioa /etc direktoriotik" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Mahaigaineko %s azpikarpeta" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Mahaigaina karpeta" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Dokumentuetako %s azpikarpeta" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Dokumentuak karpeta" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Musikako %s azpikarpeta" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Musika karpeta" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Irudietako %s azpikarpeta" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Irudiak karpeta" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Publikoki partekatutako %s azpikarpeta" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Publikoa karpeta" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Bideoetako %s azpikarpeta" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Bideoak karpeta" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Txantiloietako %s azpikarpeta" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Txantiloiak karpeta" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Erabiltzailearen cacheko %s azpikarpeta" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Erabiltzailearen cache karpeta" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Erabiltzailearen konfigurazioko %s azpikarpeta" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Erabiltzailearen konfigurazio karpeta" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Erabiltzailearen datuetako %s azpikarpeta" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Erabiltzailearen datuen karpeta" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Erabiltzailearen exekuzio-inguruneko %s azpikarpeta" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Erabiltzailearen exekuzio-ingurune karpeta" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Fitxategi-sisteman sarbidea %s karpetara" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Fitxategi-sistemako bide ezezaguna" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Deskargaren tamaina" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Instalazioaren tamaina" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Internetetik deskargatu beharrekoaren tamaina" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Diskoan hartzen duen tamaina" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Ireki erabiltzaile-datuen karpeta" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Zure erabiltzaile-datuak" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Cachea, ezarpenak eta aplikazioaren bestelako datuak" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Cachea" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Aldi baterako cacheratutako datuak" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Garbitu cachea" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Instalatutako exekuzio-ingurunearen tamaina" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Exekuzio-ingurunearen deskarga tamaina" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:392 #: src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "E/E" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Aplikazioaren tamaina" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Egiaztatua" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Instalatua" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:765 msgid "translator-credits" msgstr "Ibai Oihanguren Sala" #: src/bz-application.c:775 msgid "Special Thanks" msgstr "Eskerrak" #: src/bz-application.c:833 msgid "Logged Out Successfully!" msgstr "Behar bezala amaitu da saioa!" #: src/bz-application.c:969 msgid "Performing setup…" msgstr "Konfigurazioa osatzen…" #: src/bz-application.c:1055 msgid "Set Up System Flathub?" msgstr "Sistemako Flathub konfiguratu?" #: src/bz-application.c:1058 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Sistemako Flathub urruneko biltegia ez dago konfiguratuta. Bazaar erabilita " "aplikazioak arakatu eta instalatzeko, Flathub konfiguratuta egon behar da " "sistemako Flatpak instalazioan.\n" "\n" "Bestela, Bazaar soilik instalatutako aplikazioak nabigatu eta kentzeko " "erabili ahalko duzu." #: src/bz-application.c:1065 msgid "Set Up Flathub?" msgstr "Flathub konfiguratu?" #: src/bz-application.c:1068 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub ez dago sisteman konfiguratuta. Ezin izango dituzu aplikazioak " "nabigatu eta instalatu Bazaar erabilita.\n" "\n" "Bazaar dagoeneko instalatutako aplikazioak nabigatu eta kentzeko erabili " "ahalko duzu." #: src/bz-application.c:1074 msgid "Later" msgstr "Geroago" #: src/bz-application.c:1075 msgid "Set Up Flathub" msgstr "Konfiguratu Flathub" #: src/bz-application.c:1431 msgid "A backend error occurred" msgstr "Backendeko errorea gertatu da" #: src/bz-application.c:1631 src/bz-application.c:3783 msgid "Refreshing…" msgstr "Berritzen…" #: src/bz-application.c:1795 src/bz-application.c:3781 #, c-format msgid "Loading %d apps…" msgstr "%d aplikazioak kargatzen…" #: src/bz-application.c:1848 msgid "Failed to open file" msgstr "Ezin izan da fitxategia ireki" #: src/bz-application.c:1946 msgid "An initialization error occurred" msgstr "Hasieratze-errore bat gertatu da" #: src/bz-application.c:2312 msgid "Checking for updates…" msgstr "Eguneratzeak bilatzen…" #: src/bz-application.c:2368 msgid "Failed to check for updates" msgstr "Ezin izan dira eguneratzeak bilatu" #: src/bz-application.c:3494 msgid "Malformed Link" msgstr "Gaizki eratutako esteka" #: src/bz-application.c:3495 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Aplikazio hau irekitzeko erabilitako estekak maiuskulen okerreko erabilera " "dauka, eta baliteke noizbait funtzionatzeari uztea.\n" "\n" "Seguruenera hau KRunner-ek okerreko aplikazio IDak bidaltzen dituelako " "izango da." #: src/bz-application.c:3503 msgid "Could not find app" msgstr "Ez da aplikazioa aurkitu" #: src/bz-application.c:3534 msgid "Failed to load metainfo" msgstr "Ezin izan da meta informazioa kargatu" #: src/bz-application.c:3785 msgid "Writing to cache…" msgstr "Cachean idazten…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Erakutsi dena" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "\"%s\" aplikazio guztiak" #: src/bz-apps-page.c:487 #, c-format msgid "%d Applications" msgstr "%d aplikazio" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Sortaren instalazioa" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "Menpekotasun gehigarriek leku gehiago har dezakete" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Baliteke aplikazio hau instalatzeko software-iturri berri bat gehitu behar " "izatea. Iturri honetako beste aplikazioak ere Bazaarren azalduko dira.\n" "\n" "Ez gehitu iturri hau ez bazaude bere fidagarritasunaz ziur." #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "Behar bezala instalatu da!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Ireki" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "Erakutsi aplikazioaren xehetasunak" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "Dagoeneko instalatua" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "Instalazioak huts egin du" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Instalazio tamaina ezezaguna" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "%s inguru instalatzeko" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Baimen berezirik ez" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d deskarga azken hilean" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s exekuzio-ingurunea" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Deskargatzeko" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Ez dago tamainaren informaziorik" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "%sko deskarga tamaina" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Adin guztiak" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Ez dago adin balorazioaren informaziorik" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Egokia adin guztietakoentzat" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Egokia %d urtetik gorakoentzat" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Ezezaguna" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Software librea %s lizentziapean" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Software librea" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Software pribatiboa" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Lizentzia berezia: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Librea" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Pribatiboa" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Lizentzia berezia" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Moldakorra" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Mahaigainerako soilik" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Mahaigainean, tabletetan eta mugikorretan dabil" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "Baliteke gailu mugikorretan ez ibiltzea" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "Segurua" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Arrisku txikia" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Arrisku ertaina" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Arrisku handia" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Hutsik" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Aukeraketarik gabe" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Ez dago aukeraketa informaziorik sistema honetan. Halere, Flathub-eko " "aplikazioak araka ditzakezu." #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Arakatu Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Lineaz kanpo" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Nabigatzailea" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Egiaztatu gabea" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Garatzailearen informazioa ez dago eskuragarri." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "%s aplikazio IDaren jabetza ez da egiaztatu, eta baliteke komunitateko " "paketea izatea." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "%s aplikazio IDaren jabetza eskuz egiaztatu du Flathub-eko lantaldeak." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "%1$s aplikazio IDaren jabetza %2$s(e)k egiaztatu du %3$s(e)an." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "%1$s aplikazio IDaren jabetza %2$s erabiliz egiaztatu da." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "%s aplikazio IDaren jabetza egiaztatua izan da." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Bertsio-ohar osoak" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Bertsio hau zu moduko erabiltzaileei esker sortu da!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Maite dut Bazaar garatzea, baina ezin dut lan hau bakarrik egin. Lagundu " "aplikazioaren garapena Ko-Fi erabilita dohaintza bat eginez." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Lagundu Bazaar diruz" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Zer berri %s bertsioan?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "%Y(e)ko %Bren %-e(e)an argitaratua" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Aukeratu instalazio bat" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Aplikazio honen hainbat bertsio dituzu instalatuta. Zeinekin egin nahi duzu " "aurrera?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Utzi" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Erabiltzaile honentzat soilik" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "erabiltzaile hau" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "erabiltzaile guztiak" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:46 msgid "Details" msgstr "Xehetasunak" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopiatu" #: src/bz-error-dialog.c:56 src/bz-share-list.c:364 msgid "Copied!" msgstr "Kopiatuta!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Gogokoen kopurua" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Huts egin du gogokoa eguneratzeak" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Hasi saioa Flathub-ekin gogokoak kudeatzeko" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Hasi saioa" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "Gogokoak" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Instalatu dena" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Kargatzen" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Gogokorik ez" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Gogoko gisa markatzen dituzun aplikazioak hemen azalduko dira" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Babestu aplikazio hau" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Kendu gogokoetatik" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Huts egin du gogokoa kentzeak" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Aurrekoa" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Hurrengoa" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "Edizioa" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "Nahasketa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Musika" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "Erreproduzitzailea" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "Grabatzailea" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "Sekuentziadorea" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "Afinagailua / Sintonizadorea" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "TB" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Emulazioa" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Akzioa" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Abentura" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Arkade" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "Blokeak" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "Mahai-jokoa" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "Kartak" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "Haurrak" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Logika" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "Rol jokoa" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Tiroak" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Simulazioa" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Kirolak" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Estrategia" #: src/bz-flathub-category.c:124 msgid "Browsers" msgstr "Nabigatzaileak" #: src/bz-flathub-category.c:125 msgid "Chat" msgstr "Txata" #: src/bz-flathub-category.c:126 msgid "Mail" msgstr "Posta" #: src/bz-flathub-category.c:127 msgid "File Sharing" msgstr "Fitxategiak partekatzea" #: src/bz-flathub-category.c:132 msgid "Audio & Video" msgstr "Audioa eta bideoa" #: src/bz-flathub-category.c:132 msgid "Media" msgstr "Multimedia" #: src/bz-flathub-category.c:132 msgid "More Audio & Video" msgstr "Audio / bideo aplikazio gehiago" #: src/bz-flathub-category.c:133 msgid "Developer Tools" msgstr "Garapen tresnak" #: src/bz-flathub-category.c:133 msgid "Develop" msgstr "Garapena" #: src/bz-flathub-category.c:133 msgid "More Developer Tools" msgstr "Garapen tresna gehiago" #: src/bz-flathub-category.c:134 msgid "Education" msgstr "Hezkuntza" #: src/bz-flathub-category.c:134 msgid "Learn" msgstr "Ikasi" #: src/bz-flathub-category.c:134 msgid "More Education" msgstr "Hezkuntza aplikazio gehiago" #: src/bz-flathub-category.c:135 msgid "Gaming" msgstr "Jokoak" #: src/bz-flathub-category.c:135 msgid "Play" msgstr "Jolastu" #: src/bz-flathub-category.c:135 msgid "More Gaming" msgstr "Joko gehiago" #: src/bz-flathub-category.c:136 msgid "Graphics & Photography" msgstr "Grafikoak eta argazkigintza" #: src/bz-flathub-category.c:136 msgid "Create" msgstr "Sortu" #: src/bz-flathub-category.c:136 msgid "More Graphics & Photography" msgstr "Grafiko / argazkigintzako aplikazio gehiago" #: src/bz-flathub-category.c:137 msgid "Networking" msgstr "Sareak" #: src/bz-flathub-category.c:137 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:137 msgid "More Networking" msgstr "Sareko aplikazio gehiago" #: src/bz-flathub-category.c:138 msgid "Productivity" msgstr "Produktibitatea" #: src/bz-flathub-category.c:138 msgid "Work" msgstr "Lana" #: src/bz-flathub-category.c:138 msgid "More Productivity" msgstr "Produktibitate aplikazio gehiago" #: src/bz-flathub-category.c:139 msgid "Science" msgstr "Zientzia" #: src/bz-flathub-category.c:139 msgid "More Science" msgstr "Zientzia aplikazio gehiago" #: src/bz-flathub-category.c:140 msgid "System" msgstr "Sistema" #: src/bz-flathub-category.c:140 msgid "More System" msgstr "Sistema aplikazio gehiago" #: src/bz-flathub-category.c:141 msgid "Utilities" msgstr "Tresnak" #: src/bz-flathub-category.c:141 msgid "Tools" msgstr "Tresnak" #: src/bz-flathub-category.c:141 msgid "More Utilities" msgstr "Tresna gehiago" #: src/bz-flathub-category.c:142 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Pil-pilean" #: src/bz-flathub-category.c:142 msgid "More Trending" msgstr "Pil-pilean dauden aplikazio gehiago" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:171 msgid "Popular" msgstr "Ezagunak" #: src/bz-flathub-category.c:143 msgid "More Popular" msgstr "Aplikazio ezagun gehiago" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "Azkena gehituak" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:121 msgid "New" msgstr "Berriak" #: src/bz-flathub-category.c:144 msgid "More New" msgstr "Aplikazio berri gehiago" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "Berriki eguneratuak" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Eguneratuak" #: src/bz-flathub-category.c:145 msgid "More Updated" msgstr "Eguneratutako aplikazio gehiago" #: src/bz-flathub-category.c:146 msgid "Mobile" msgstr "Mugikorrerako" #: src/bz-flathub-category.c:146 msgid "More Mobile" msgstr "Mugikorrerako aplikazio gehiago" #: src/bz-flathub-category.c:147 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:147 msgid "More Adwaita" msgstr "Adwaita aplikazio gehiago" #: src/bz-flathub-category.c:148 msgid "KDE Apps" msgstr "KDE aplikazioak" #: src/bz-flathub-category.c:148 msgid "More KDE Apps" msgstr "KDE aplikazio gehiago" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Ez da Flathub gehitu" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Ez da Flathub urrunekorik aurkitu zure Flatpak instalazioetan" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub ez dago eskuragarri" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Ezin da Flathub atzitu" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "Halere, aplikazioak kudeatu eta bila ditzakezu oraindik." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Bilatu aplikazioak" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Birkonektatu" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "Eguneko aplikazioa" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "Aldean" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Linux mugikor eta tabletentzako aplikazioak" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Aplikazio mugikor gehiago" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "Guk ere ♥​ ditugu jokoak" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "Gogokoen dituzun jokoak eta hauentzako aplikazioak" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "Joko gehiago" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Emaitzarik ez" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Saiatu beste bilaketa batekin" #: src/bz-full-view.blp:41 msgid "Content" msgstr "Edukia" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Hau tokiko aurrebista da, baliteke xehetasun batzuk argitaratutako " "zerrendarekin bat ez etortzea" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Aurreikusi biltegiaren itxura" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "_Babestu" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Aplikazio honek eguneratzerik edo segurtasun-konponketarik jasotzen ez duen " "exekuzio-ingurune bat darabil. Baliteke berau erabiltzea ez izatea segurua." #: src/bz-full-view.blp:544 msgid "Trash Data" msgstr "Bota datuak zakarrontzira" #: src/bz-full-view.blp:606 msgid "Add-ons" msgstr "Gehigarriak" #: src/bz-full-view.blp:641 msgid "More Add-Ons" msgstr "Gehigarri gehiago" #: src/bz-full-view.blp:652 msgid "Links" msgstr "Estekak" #: src/bz-full-view.c:181 msgid "No URL" msgstr "URLrik ez" #: src/bz-full-view.c:199 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Aplikazio honek lizentzia libre eta irekia dauka, eta ondorioz, bere " "iturburu kodea segurtasun ikuspegitik audita daiteke." #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Aplikazio honek lizentzia pribatiboa dauka, eta ondorioz, bere iturburu " "kodea pribatuki garatzen da eta ezin du hirugarren independente batek " "auditatu." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Aplikazio gehiago" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "%s(r)en aplikazio gehiago" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Garatzailearen beste aplikazioak" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "%s(r)en beste aplikazioak" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "%s ez dago instalatua, baina oraindik %s daude gordeta datuetan." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Bestelako aplikazioak" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "Aplikazio %d" msgstr[1] "%d aplikazio" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Huts egin du erabiltzaile-datuak ezabatzeak" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Hardware euskarria" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Teklatu euskarria" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Teklatua behar du" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Teklatua gomendatzen du" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Teklatua onartzen du" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Teklatuentzako euskarria ezezaguna" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Sagu euskarria" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Sagua edo gailu erakuslea behar du" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Sagua edo gailu erakuslea gomendatzen du" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Sagua edo gailu erakuslea onartzen du" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Sagu edo gailu erakusleentzako euskarria ezezaguna" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Ukipen-pantaila euskarria" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Ukipen-pantaila behar du" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Ukipen-pantaila gomendatzen du" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Ukipen-pantaila onartzen du" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Ukipen-pantailentzako euskarria ezezaguna" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Mugikor euskarria" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Gailu mugikorretan funtzionatzen du" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Baliteke gailu mugikorretan behar bezala ez funtzionatzea" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Mahaigain euskarria" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Behar bezala funtzionatzen du pantaila handietan" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s hobeto dabil hardware batzuetan" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s(e)k gailu gehienetan funtzionatzen du" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Ireki" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Desinstalatu aplikazioa" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Kendu" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Eguneratu" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Kendu" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Utzi" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Uzten" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Bilatu instalatutako aplikazioak" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Garbitu bilaketa" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Ez da aplikaziorik aurkitu" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Bilatu biltegian" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Liburutegia" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "Zain dauden eguneratzeak" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "Deskargak" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "Berriki desinstalatuak" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "Garbitu amaitutako atazak" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "Ordenatu honela" #: src/bz-library-page.blp:348 msgid "Name" msgstr "Izena" #: src/bz-library-page.blp:354 msgid "Size" msgstr "Tamaina" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" "Ez da \"%s\" bilaketarekin bat datorren emaitzarik aurkitu instalatutako " "aplikazioen zerrendan" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "Eguneratze %u erabilgarri" msgstr[1] "%u eguneratze erabilgarri" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "Aplikazio %u instalatuta" msgstr[1] "%u aplikazio instalatuta" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "Hartu parte" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "Informazio gehiago" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Lizentzia ezezaguna" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Komunitateak eraikia" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Aplikazio hau nazioarteko komunitate batek eraiki du modu irekian.\n" "\n" "Parte hartuz hobetzen lagun dezakezu." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Ez da aplikazio honen lizentzia ezagutzen" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Aplikazio hau nazioarteko komunitate batek eraiki du modu irekian, eta %s " "lizentziapean askatu du.\n" "\n" "Parte hartuz hobetzen lagun dezakezu." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Aplikazio hau ez da modu irekian garatu eta, beraz, bere garatzaileek soilik " "dakite nola funtzionatzen duen. Baliteke segurua ez izatea antzemateko zaila " "den eran, eta inork ikuskatu gabe alda daiteke.\n" "\n" "Ezin dugu ziurtatu aplikazio honen garapenean lagun dezakezunik." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Aplikazio hau %s lizentzia berezipean garatu da.\n" "\n" "Ezin dugu ziurtatu aplikazio honen garapenean lagun dezakezunik." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "Lizentzia" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Konektatu Flathub-era" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Zerbaitek ez du funtzionatu" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "Hasi saioa zure gogoko aplikazioak gailuetan zehar partekatzeko" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Amaitu" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Kaixo, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Hautatu metainfo fitxategia" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Metainfo fitxategiak" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Hautatu ikonoa (aukerakoa)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Irudi fitxategiak" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Aurrebista" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Hobespenak" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Sareko konexioa neurtua da — biltegiko datuen berritze automatikoa pausatu da" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "Berritu eskuz" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Eduki iragazkiak" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Software librea soilik" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Ezkutatu aplikazio pribatiboak nabigatzean eta bilatzean" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Flathub-eko emaitzak soilik" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Mugatu bilaketa eta nabigazioko emaitzak Flathub-en erabilgarri dauden " "aplikazioetara" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Egiaztatutako emaitzak soilik" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Ezkutatu Flathub-ek egiaztatu gabeko emaitzak" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Ezkutatu bizirik ez dauden aplikazioak" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Ezkutatu garatzaileek mantentzen ez dituzten aplikazioak" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Aurrerapen barraren gaia" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Kolore orokorra" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Harrotasunaren koloreak" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Harrotasun lesbianaren koloreak" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Gay harrotasunaren koloreak" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Trans harrotasunaren koloreak" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Ez-bitar harrotasunaren koloreak" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Harrotasun bisexualaren koloreak" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Harrotasun asexualaren koloreak" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Harrotasun pansexualaren koloreak" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Harrotasun arromantikoaren koloreak" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Genero fluido harrotasunaren koloreak" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Harrotasun polisexualaren koloreak" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Harrotasun omnisexualaren koloreak" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Harrotasun arromantiko asexualaren koloreak" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Genero gabeko harrotasunaren koloreak" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Kuir harrotasunaren koloreak" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Intersex harrotasunaren koloreak" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Demigenero harrotasunaren koloreak" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Harrotasun birromantikoaren koloreak" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Ezgaitasun harrotasunaren koloreak" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Femboy harrotasunaren koloreak" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Genero neutroko harrotasunaren koloreak" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Bertsioen historia" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Bertsioen historia" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Gaur" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Atzo" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "Duela egun %d" msgstr[1] "Duela %d egun" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "Duela astebete" msgstr[1] "Duela %d aste" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "Duela hilabete" msgstr[1] "Duela %d hilabete" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "Duela urtebete" msgstr[1] "Duela %d urte" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%Y %b %e" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "%s bertsioa" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Xehetasunik ez argitaratze honentzat" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Eskuratu informazio gehiago" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Desinstalatu" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "Eskuratu" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Baimen ezezagunak" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Aplikazio honen baimenak ezezagunak dira." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Baimenik ez" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Aplikazioa guztiz isolatua dago" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Sarera sarbidea" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Internetera sarbidea dauka" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Sarera sarbiderik ez" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Ez dauka Internetera sarbiderik" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Erabiltzailearen gailuetara sarbidea" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Web kamera eta joko-aginteen erako gailuetara sarbidea dauka" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Erabiltzailearen gailuetara sarbiderik ez" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Ez dauka web kamera eta joko-aginteen erako gailuetara sarbiderik" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Sarrerako gailuetara sarbidea" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Sarrerako gailuetara sarbidea dauka" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Mikrofonora eta audio erreprodukziora sarbidea" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "Mikrofonotik entzun eta audioa erreproduzitu dezake baimenik eskatu gabe" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Sistemako gailuetara sarbidea" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "Goragoko baimenak behar dituzten sistemako gailuetara sarbidea dauka" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Pantailako edukietara sarbidea" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Pantailako edo beste leihoetako edukia ikus dezake" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Leiho-sistema legatua" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Leiho-sistema legatua (X11) darabil beti" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "Baimen arbitrarioak" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Baimen arbitrarioak eskura ditzake" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Erabiltza ezarpenak" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Erabiltzaile ezarpenak atzitu eta alda ditzake" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Fitxategi-sistema osoan irakurri/idazteko sarbidea" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Fitxategi-sistemako datu guztiak irakurri eta idatz ditzake" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Karpeta nagusian irakurri/idazteko sarbidea" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Karpeta nagusiko datu guztiak irakurri eta idatz ditzake" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Fitxategi-sistema osoa irakurtzeko sarbidea" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Fitxategi-sistemako datu guztiak irakur ditzake" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Karpeta nagusian irakurtzeko sarbidea" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Karpeta nagusiko datu guztiak irakur ditzake" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Deskarga karpetan irakurri/idazteko sarbidea" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Deskarga karpetako datu guztiak irakurri eta idatz ditzake" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Deskarga karpeta irakurtzeko sarbidea" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Deskarga karpetako datu guztiak irakur ditzake" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Direktorioko datu guztiak irakurri eta idatz ditzake" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Direktorioko datu guztiak irakur ditzake" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Fitxategi-sistemara sarbiderik ez" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Ezin du fitxategi-sistema inola ere atzitu" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Sistemako zerbitzuak darabiltza" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Sistemako zerbitzu zuzenei datuak eska diezazkieke" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Saioko zerbitzuak darabiltza" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Saioko zerbitzu zuzenei datuak eska diezazkieke" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Ez du zerbitzuetara sarbiderik" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Ez dauka sistemako edo saioko zerbitzu zuzenetara inolako sarbiderik" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Aplikazio garatzaile egiaztatua" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "Aplikazio honen garatzailea berak dioen hura dela egiaztatu da" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Kode pribatiboa" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Iturburu kodea ez da publikoa, ezin da era independentean auditatu, eta " "baliteke segurua ez izatea" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Kode auditagarria" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Iturburu kodea publikoa da, independenteki audita daiteke, eta aplikazioa " "segurua izatea errazten du" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "%s sistemako zerbitzuaren erabilera" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "%s saioko zerbitzuaren erabilera" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "%s zerbitzuaren erabilera" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Zuzeneko zerbitzua ikus dezake" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Zuzeneko zerbitzuarekin hitz egin dezake" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Zuzeneko zerbitzua beregana dezake" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Menu orokorrarekin integrazioa" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Bere menuak menu orokorraren barran erakuts ditzake" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "KDEren ezarpenekin integrazioa" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "KDE mahaigaineko ezarpenen aldaketak antzeman ditzake" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "KDEren ezarpen orokorrak" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "" "KDE mahaigaineko hobespenak irakur ditzake, esaterako letra-tipo eta " "koloreei buruzkoak" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Biltegiratze sekretuaren zerbitzua" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Bere pasahitzak sistemako gako-sorta erabiliz gorde eta eskura ditzake" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Mahaigaineko jakinarazpenen zerbitzua" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Mahaigaineko jakinarazpenak bidal ditzake" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Sistemako erretiluarekin integrazioa" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Sistemako erretiluan ikono bat erakuts dezake" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE Connect-ekin integrazioa" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "KDE Connect bidez parekatutako gailuekin interaktua dezake" #: src/bz-safety-dialog.blp:60 msgid "App ID" msgstr "Aplikazioaren IDa" #: src/bz-safety-dialog.blp:70 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:101 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Aplikazio honek software plataformaren (SDK) bertsio zaharkitua darabil, eta " "baliteke konpondu gabeko akatsak edo segurtasun-zaurgarritasunak izatea." #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "Segurtasuna" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "%s segurua da" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s(e)k ez dauka baimen ez segururik" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "%s segurua da, segur aski" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s beharbada segurua da" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "%s ez da segurua" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Pantaila-argazkiak" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Aurreko pantaila-argazkia" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Hurrengo pantaila-argazkia" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Kopiatu irudia" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Berrezarri ikuspegia" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Urrundu" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Gerturatu" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Pantaila-argazkien aurkezpena" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Pantaila-argazkirik ez" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Ireki pantaila-argazki ikustailea" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Iragazkiak" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Egiaztatua" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Librea/Irekia" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Bizirik" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Ez erakutsi bizirik ez dauden aplikazioak" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Mugikorrerako egokitua" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Kategoriak" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Bilatu aplikazioak, jokoak, softwarea" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Bilaketa iragazkiak" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Garbitu bilaketa" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Arakatu kategoriak" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "Kategoriarik ez erabilgarri" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "Bilatu aplikazioak goiko bilaketa-barra erabiliz." #: src/bz-search-page.blp:360 msgid "No Applications Found" msgstr "Ez da aplikaziorik aurkitu" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Ez da emaitzarik aurkitu \"%s\" bilaketarentzat Flathub-en" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Bideoa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Bulegoa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDFak" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Egutegia" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Mezularitza" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Margoketa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPNa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrentak" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulatzailea" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub-eko orria" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Proiektuaren webgunea" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Akatsen aztarnaria" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Ohiko galderak" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Laguntza" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Eman dirua" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Itzuli" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Kontaktua" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Iturburu kodea" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Lagundu" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifestua" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Kopiatu esteka" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Denbora-lerroa" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Instalazioak:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Mundua" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "2024/04/15etik" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM instalazio guztira" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK instalazio guztira" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d instalazio guztira" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Mantendu erabiltzaile-datuak" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Baimendu ezarpen eta eduki pertsonalak berrezartzea" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Ezabatu datu guztiak" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Ezabatu betiko erabiltzaile-datuak lekua libratzeko" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "%s instalatu?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Hautatu zein bertsio instalatu nahi duzun. Baliteke partekatutako beste " "osagai batzuk ere instalatzea." #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Baliteke partekatutako osagai gehigarriak instalatzea" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Utzi" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Instalatu" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "%s kendu?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Hautatu kendu beharreko bertsioa." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Ezin izango duzu %s erabili desinstalatu ondoren." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "\"%s\" arrisku handikoa da" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Aplikazio honek sistemara sarbide osoa dauka, zure fitxategi guztiak, " "nabigatze-historia, gordetako pasahitzak eta gehiago atzitzeko baimena " "barne. Internetera sarbidea ere badauka, eta ondorioz, zure datuak kanpoko " "norbaiti bidal diezazkioke.\n" "\n" "Aplikazio hau pribatiboa denez, ezin da auditatu baimen hauekin zer egiten " "duen aztertzeko." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Aplikazio honek X11 leiho-sistema legatua darabil, eta honek teklatuko " "sakatze guztiak grabatu, pantaila-argazkiak atera eta beste aplikazioak " "monitorizatzea ahalbidetzen dio. Internetera sarbidea ere badauka, eta " "ondorioz, zure datuak kanpoko norbaiti bidal diezazkioke.\n" "\n" "Aplikazio hau pribatiboa denez, ezin da auditatu baimen hauekin zer egiten " "duen aztertzeko." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Instalatu halere" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Huts egin du transakzioaren leihoa kargatzeak" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Aplikazio guztiak instalatu dira dagoeneko" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Ados" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Aplikazioa instalatu?" msgstr[1] "%u aplikazioak instalatu?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Ondorengoa instalatuko da. Baliteke partekatutako osagai gehigarriak ere " "instalatzea." #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d gehigarri instalatuko dira." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Gainera, gehigarriak instalatuko dira." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Instalatu dena" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "%.02f segundoan amaitua" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Aplikazioaren gehigarria" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Exekuzio-ingurunea" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Ilaran" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Egina" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Utzita" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Errorea" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Eten transakzioa" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Erakutsi errore-informazioa" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s libratuta" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Transakzio-errorea" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Zain" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Eguneratu dena" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "Exekuzio-ingurunearen eguneratze %u" msgstr[1] "Exekuzio-ingurunearen %u eguneratze" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Kudeatu soberako erabiltzaile-datuak" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Ez da erabiltzaile-daturik aurkitu" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Erabiltzaile-datuak" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Bota erabiltzaile-datuak zakarrontzira" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "%s(r)en erabiltzaile-datuak zakarrontzira bota dira" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Berritzen" #: src/bz-window.blp:89 msgid "Curated" msgstr "Aukeratua" #: src/bz-window.blp:101 msgid "Explore" msgstr "Arakatu" #: src/bz-window.blp:128 msgid "Search" msgstr "Bilaketa" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Menu nagusia" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Bazaarren bertsio berria ari zara erabiltzen!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Ikusi berritasunak" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Sareko konexioa daukazu, baina Flathub-en bertsio cacheratua ari zara ikusten" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "_Lagundu Bazaar diruz" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "_Berritu" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "Hasi saioa _Flathub-en" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "_Kudeatu soberako erabiltzaile-datuak" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "_Hobespenak" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "_Teklatuko lasterbideak" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "B_azaarri buruz" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "_Irten" #: src/bz-window.blp:342 msgid "Log Out" msgstr "Amaitu saioa" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Huts egin du aplikazioa abiarazteak" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Ezin duzu Bazaar kendu Bazaar erabilita!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Orain ezin duzu hori egin!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "instalazio" msgstr[1] "instalazio" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Nabigazioa" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Ireki Arakatu orria" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Ireki Liburutegia orria" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Ireki Bilaketa orria" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Urrunekoak" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Sinkronizatu urrunekoak" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Orokorra" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Ireki hobespenak" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Erakutsi laster-teklak" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Itxi leihoa" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Irten" #~ msgid "Tags:" #~ msgstr "Etiketak:" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "Konektatu zure Flathub kontua Bazaarrera gogoko aplikazioak kudeatzeko." #~ msgid "Delay Search Results" #~ msgstr "Atzeratu bilaketen emaitzak" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "" #~ "Hobetu emaitzak erakusteko errendimendua, bilaketako hitzak berehala ez " #~ "prozesatuz" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Aukeratu aurrerapen barrarako gaia!" #~ msgid "Vertical Stripes" #~ msgstr "Marra bertikalak" #~ msgid "Display flag colors from left to right" #~ msgstr "Erakutsi banderen koloreak ezkerretik eskuinerantz" #~ msgid "Open Link" #~ msgstr "Ireki esteka" #~ msgid "No Results Found" #~ msgstr "Ez da emaitzarik aurkitu" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "\"%s\" etiketadun aplikazioak" #~ msgid "Search failed" #~ msgstr "Huts egin du bilaketak" #~ msgid "Flathub returned an error" #~ msgstr "Flathub-ek errorea itzuli du" #~ msgid "Retry Flathub Connection" #~ msgstr "Saiatu Flathub-era berriro konektatzen" #~ msgid "User Data Size" #~ msgstr "Erabiltzaile-datuen tamaina" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Open App Library" #~ msgstr "Ireki aplikazioen liburutegia" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "Oraingoz ez dago .flatpak sortak instalatzeko aukerarik" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" #~ msgid "Refresh completed!" #~ msgstr "Berrituta!" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "instalazio" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Berritu" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "_Lagundu diruz Bazaar ❤️" #~ msgid "Flathub" #~ msgstr "Flathub" bazaar-org-bazaar-b6e9a65/po/fa_IR.po000066400000000000000000000411521522167256300173720ustar00rootroot00000000000000# Persian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Goudarz Jafari , 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-07-14 09:23+0330\n" "PO-Revision-Date: 2025-07-14 16:34+0330\n" "Last-Translator: Goudarz Jafari \n" "Language-Team: none\n" "Language: fa_IR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.6\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 msgid "Bazaar" msgstr "بازار" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "افزودن، حذف یا به‌روزرسانی نرم‌افزارهای Flatpak در این رایانه" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;سیستم;مدیر بسته‌ها;کشف ;کردن;Flatpak;نرم‌افزار;فروشگاه;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Show Animated Background" msgstr "نمایش پس‌زمینه متحرک" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Whether to show the animated icon background on the home page" msgstr "آیا پس‌زمینه‌ی نماد متحرک در صفحه‌ی اصلی نمایش داده شود" #. FIXME: add descriptions and summary #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:9 msgid "Keep the summary shorter, between 10 and 35 characters" msgstr "خلاصه را کوتاه نگه دارید، بین ۱۰ تا ۳۵ نویسه" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:11 msgid "No description" msgstr "بدون توضیح" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:41 msgid "Main Bazaar window showing Blender" msgstr "پنجره‌ی اصلی بازار که Blender را نمایش می‌دهد" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:50 msgid "Release description" msgstr "توضیح‌های نگارش" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:52 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:53 msgid "List of changes" msgstr "فهرست تغییرات" #: src/bz-addons-dialog.blp:13 src/bz-installed-page.blp:162 #: src/bz-installed-page.blp:174 msgid "Manage Addons" msgstr "مدیریت افزونه‌ها" #: src/bz-app-tile.blp:65 src/bz-full-view.blp:139 msgid "This flatpak is verified by the original developers of the software." msgstr "این Flatpak توسط توسعه‌دهندگان اصلی نرم‌افزار تایید شده است." #: src/bz-application.c:1194 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:481 msgid "translator-credits" msgstr "Goudarz Jafari" #: src/bz-application.c:1199 msgctxt "About Dialog Translator Credit" msgid "Ahmed Najmawi" msgstr "Ahmed Najmawi" #: src/bz-application.c:1200 msgctxt "About Dialog Translator Credit" msgid "AtomHare" msgstr "AtomHare" #: src/bz-application.c:1201 msgctxt "About Dialog Translator Credit" msgid "Jill Fiore" msgstr "Jill Fiore" #: src/bz-application.c:1202 msgctxt "About Dialog Translator Credit" msgid "Lucosec" msgstr "Lucosec" #: src/bz-application.c:1203 msgctxt "About Dialog Translator Credit" msgid "Shihfu Juan" msgstr "Shihfu Juan" #: src/bz-application.c:1204 msgctxt "About Dialog Translator Credit" msgid "Vlastimil Dědek" msgstr "Vlastimil Dědek" #: src/bz-application.c:1205 msgctxt "About Dialog Translator Credit" msgid "asen23" msgstr "asen23" #: src/bz-application.c:1206 msgctxt "About Dialog Translator Credit" msgid "renner" msgstr "renner" #: src/bz-application.c:1207 msgctxt "About Dialog Translator Credit" msgid "robotta" msgstr "robotta" #: src/bz-application.c:1223 msgid "Adam Masciola" msgstr "Adam Masciola" #: src/bz-browse-widget.blp:11 src/bz-full-view.blp:11 #: src/bz-installed-page.blp:11 src/bz-window.blp:32 msgid "Empty" msgstr "خالی" #: src/bz-browse-widget.blp:15 msgid "No Curated Applications" msgstr "هنوز هیچ برنامه‌ی پیشنهادی‌ای وجود ندارد" #: src/bz-browse-widget.blp:16 msgid "" "Bazaar was not provided a curated content configuration. Contact your " "operating system's support channels for assistance." msgstr "" "هیچ پیکربندی‌ای برای محتوای انتخاب‌شده به بازار ارائه نشده است. برای دریافت " "کمک با پشتیبانی سیستم‌عامل خود تماس بگیرید." #: src/bz-browse-widget.blp:22 src/bz-flathub-page.blp:11 msgid "Browser" msgstr "مرورگر" #: src/bz-error.c:45 msgid "An Error Occurred" msgstr "یک خطا رخ داد" #: src/bz-error.c:51 msgid "Close" msgstr "بستن" #: src/bz-error.c:52 msgid "Copy and Close" msgstr "رونوشت و بستن" #: src/bz-flathub-page.blp:41 msgid "Apps Of The Week" msgstr "برنامه‌های هفته" #: src/bz-flathub-page.blp:85 msgid "Trending" msgstr "محبوب‌ها" #: src/bz-flathub-page.blp:117 msgid "Recently Updated" msgstr "اخیرا به‌روزرسانی‌شده" #: src/bz-flathub-page.blp:149 msgid "Recently Added" msgstr "اخیرا افزوده‌شده" #: src/bz-flathub-page.blp:181 msgid "Popular" msgstr "پرطرفدار" #: src/bz-full-view.blp:15 msgid "No Results" msgstr "نتیجه‌ای یافت نشد" #: src/bz-full-view.blp:16 msgid "Try a different search query" msgstr "از یک عبارت دیگر برای جستجو استفاده کنید" #: src/bz-full-view.blp:22 src/bz-window.blp:42 msgid "Content" msgstr "محتوا" #: src/bz-full-view.blp:180 msgid "Run this application" msgstr "اجرای این برنامه" #: src/bz-full-view.blp:204 msgid "Download and install this application" msgstr "بارگیری و نصب این برنامه" #: src/bz-full-view.blp:222 src/bz-window.c:987 msgid "Install" msgstr "نصب" #: src/bz-full-view.blp:236 msgid "Uninstall this application" msgstr "این برنامه را حذف کن" #: src/bz-full-view.blp:262 msgid "Share this application" msgstr "هم‌رسانی این برنامه" #: src/bz-full-view.blp:274 msgid "" "The number of downloads in the last 30 days. Click to view this " "application's download statistics." msgstr "" "تعداد بارگیری در ۳۰ روز گذشته. برای مشاهده‌ی آمار بارگیری این برنامه کلیک " "کنید." #: src/bz-full-view.blp:316 msgid "Support this developer" msgstr "حمایت از این توسعه‌دهنده" #: src/bz-full-view.blp:329 msgid "Support" msgstr "پشتیبانی" #: src/bz-full-view.blp:387 msgid "Remote repo name" msgstr "نام مخزن راه‌دور" #: src/bz-full-view.blp:400 msgid "Project URL" msgstr "نشانی اینترنتی پروژه" #: src/bz-full-view.blp:412 msgid "Download size" msgstr "اندازه‌ی بارگیری" #: src/bz-full-view.c:214 #, c-format msgid "Released %x" msgstr "منتشر شده در %x" #: src/bz-full-view.c:225 msgid "No URL" msgstr "بدون نشانی اینترنتی" #: src/bz-full-view.c:233 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "این برنامه دارای مجوز FLOSS است، به این معنا که کد منبع آن برای ایمنی قابل " "بررسی است." #: src/bz-full-view.c:234 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "این برنامه دارای مجوز مالکیتی است، به این معنا که کد منبع آن به‌صورت خصوصی " "توسعه یافته و توسط طرف ثالث مستقل قابل بررسی نیست." #: src/bz-installed-page.blp:15 msgid "No Flatpaks Installed" msgstr "هیچ Flatpakی نصب نشده است" #: src/bz-installed-page.blp:21 src/bz-window.blp:201 src/bz-window.blp:336 msgid "Installed" msgstr "نصب شده" #: src/bz-installed-page.blp:143 msgid "More actions" msgstr "اقدام‌های بیشتر" #: src/bz-installed-page.blp:187 src/bz-installed-page.blp:198 msgid "Edit Permissions" msgstr "ویرایش مجوزها" #: src/bz-preferences-dialog.blp:9 msgid "Preferences" msgstr "تنظیمات" #: src/bz-preferences-dialog.blp:13 msgid "How the application looks" msgstr "ظاهر برنامه" #: src/bz-preferences-dialog.blp:14 msgid "Appearance" msgstr "ظاهر" #: src/bz-preferences-dialog.blp:17 msgid "Show animated background" msgstr "نمایش پس‌زمینه متحرک" #: src/bz-search-widget.blp:69 msgid "Type to filter" msgstr "برای فیلتر کردن تایپ کنید" #: src/bz-search-widget.blp:98 src/bz-search-widget.blp:115 msgid "Search Options" msgstr "گزینه‌های جستجو" #: src/bz-search-widget.blp:119 msgid "Exclude results with proprietary licenses" msgstr "حذف نتایج دارای مجوز مالکیتی" #: src/bz-search-widget.blp:124 msgid "Exclude results not originating from Flathub" msgstr "حذف نتایجی که از Flathub منشا نگرفته‌اند" #: src/bz-search-widget.blp:139 msgid "Advanced" msgstr "پیشرفته" #: src/bz-search-widget.blp:143 msgid "Match using regular expressions" msgstr "همسان‌سازی با استفاده از عبارات باقاعده" #: src/bz-search-widget.blp:148 msgid "Hide filtering and sorting behind a crossfade effect" msgstr "پنهان‌سازی فیلتر و مرتب‌سازی با افکت محوشونده" #: src/bz-search-widget.blp:153 msgid "Debounce input to prevent instant replies" msgstr "مکث ورودی برای جلوگیری از پاسخ فوری" #: src/bz-share-dialog.blp:13 msgid "Share" msgstr "هم‌رسانی" #: src/bz-share-dialog.blp:64 msgid "Copy this link" msgstr "رونوشت این پیوند" #: src/bz-share-dialog.blp:71 msgid "Open this link externally" msgstr "این پیوند را در بیرون از این برنامه باز کنید" #: src/bz-stats-dialog.blp:15 msgid "Downloads Over Time" msgstr "بارگیری‌ها در طول زمان" #: src/bz-stats-dialog.blp:31 msgid "Minimize Lower Bound" msgstr "کاهش حد پایین" #: src/bz-stats-dialog.blp:36 msgid "Maximize Upper Bound" msgstr "افزایش حد بالا" #: src/bz-transaction-manager.c:451 #, c-format msgid "Finished in %.02f seconds" msgstr "اتمام در %.02f ثانیه" #: src/bz-transaction-view.blp:34 msgid "Installing" msgstr "در حال نصب" #: src/bz-transaction-view.blp:63 msgid "Updating" msgstr "در حال به‌روزرسانی" #: src/bz-transaction-view.blp:92 msgid "Removing" msgstr "در حال حذف" #: src/bz-transaction.c:268 msgid "Pending" msgstr "در انتظار" #: src/bz-update-dialog.blp:6 msgid "Later" msgstr "بعداً" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "اکنون نصب شود" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "به‌روزرسانی‌ها در دسترس‌اند" #: src/bz-update-dialog.blp:11 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "برنامه‌های زیر واجد شرایط به‌روزرسانی هستند. آیا مایل به نصب آن‌ها هستید؟" #: src/bz-update-dialog.c:135 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "%d محیط اجرایی و/یا افزونه برای به‌روزرسانی واجد شرایط هستند. آیا مایل به نصب " "آن‌ها هستید؟" #: src/bz-update-dialog.c:143 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "علاوه بر این، %d محیط اجرایی و/یا افزونه به‌روزرسانی خواهند شد." #: src/bz-window.blp:36 msgid "Transactions Will Appear Here" msgstr "تراکنش‌ها اینجا ظاهر خواهند شد" #: src/bz-window.blp:97 msgid "Halt the execution of transactions" msgstr "توقف اجرای تراکنش‌ها" #: src/bz-window.blp:105 msgid "Clear all finished transactions" msgstr "پاک‌سازی همه‌ی تراکنش‌های پایان‌یافته" #: src/bz-window.blp:136 src/bz-window.blp:140 msgid "Offline" msgstr "آفلاین" #: src/bz-window.blp:146 msgid "Loading" msgstr "در حال بارگذاری" #: src/bz-window.blp:170 msgid "Browse" msgstr "مرور" #: src/bz-window.blp:180 msgid "App View" msgstr "نمایش برنامه" #: src/bz-window.blp:191 src/bz-window.blp:315 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:220 msgid "Go Back" msgstr "بازگشت" #: src/bz-window.blp:228 msgid "Refresh" msgstr "تازه‌سازی" #: src/bz-window.blp:237 msgid "Search" msgstr "جست‌وجو" #: src/bz-window.blp:249 msgid "Update" msgstr "به‌روزرسانی" #: src/bz-window.blp:263 msgid "Checking for updates" msgstr "در حال بررسی برای به‌روزرسانی‌ها" #: src/bz-window.blp:279 msgid "View curated applications" msgstr "مشاهده‌ی برنامه‌های منتخب" #: src/bz-window.blp:294 msgid "Curated" msgstr "منتخب" #: src/bz-window.blp:300 msgid "View the latest on Flathub" msgstr "مشاهده‌ی آخرین‌ها در Flathub" #: src/bz-window.blp:321 msgid "View installed applications" msgstr "مشاهده‌ی برنامه‌های نصب‌شده" #: src/bz-window.blp:350 msgid "Main Menu" msgstr "منوی اصلی" #: src/bz-window.blp:361 msgid "Toggle transaction sidebar" msgstr "نمایش یا پنهان کردن نوار جانبی تراکنش‌ها" #: src/bz-window.blp:400 msgid "Up to date!" msgstr "به‌روز است!" #: src/bz-window.blp:425 msgid "_Keyboard Shortcuts" msgstr "_میان‌برهای صفحه‌کلید" #: src/bz-window.blp:430 msgid "_About Bazaar" msgstr "_درباره‌ی بازار" #: src/bz-window.blp:435 msgid "_Donate to Bazaar ❤️" msgstr "_به بازار اهدا کنید ❤️" #: src/bz-window.c:856 msgid "" "The ability to inspect and install local .flatpak bundle files is coming " "soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "قابلیت بررسی و نصب پرونده‌های محلی .flatpak به‌زودی ارائه خواهد شد! در این " "فاصله، دستور\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" " را در خط فرمان امتحان کنید." #: src/bz-window.c:927 msgid "Can't do that right now!" msgstr "فعلا امکان انجام این کار وجود ندارد!" #: src/bz-window.c:940 msgid "Confirm Action" msgstr "تایید عملیات" #: src/bz-window.c:958 #, c-format msgid "" "You are about to remove the following Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Are you sure?" msgstr "" "شما در حال حذف Flatpak زیر هستید:\n" "\n" "%s\n" "%s\n" "\n" "آیا مطمئن هستید؟" #: src/bz-window.c:966 src/bz-window.c:986 msgid "Cancel" msgstr "لغو" #: src/bz-window.c:967 msgid "Remove" msgstr "حذف" #: src/bz-window.c:978 #, c-format msgid "" "You are about to install the following Flatpak:\n" "\n" "%s\n" "%s\n" "\n" "Are you sure?" msgstr "" "شما در حال نصب Flatpak زیر هستید:\n" "\n" "%s\n" "%s\n" "\n" "آیا مطمئن هستید؟" #: src/bz-window.c:1012 msgid "More details" msgstr "جزئیات بیشتر" #: src/bz-window.c:1138 msgid "Resume the execution of transactions" msgstr "ادامه دادن اجرای تراکنش‌ها" #: src/bz-window.c:1144 msgid "Pause the execution of transactions" msgstr "توقف اجرای تراکنش‌ها" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "عمومی" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "باز کردن پنجره جست‌وجو" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "تازه‌سازی" #: src/gtk/help-overlay.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "نمایش یا پنهان کردن مدیر تراکنش" #: src/gtk/help-overlay.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "نمایش میان‌برها" #: src/gtk/help-overlay.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "خروج" bazaar-org-bazaar-b6e9a65/po/fr.po000066400000000000000000002777541522167256300170440ustar00rootroot00000000000000# French translations for Bazaar. # Copyright (C) 2025-2026 The Bazaar Contributors # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Atom <29772841+AtomHare@users.noreply.github.com>, 2025. # Léane GRASSER , 2025. # Irénée THIRION , 2026. # Mimolet , 2025-2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-02 23:15+0200\n" "PO-Revision-Date: 2026-07-02 11:08+0200\n" "Last-Translator: Mimolet \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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:47 #: src/bz-window.blp:203 src/bz-window.c:386 src/bz-window.c:387 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Ajouter, enlever ou mettre à jour les applications flatpak" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;Système;Gestionnaire " "de paquets;Applis;Logiciel;Magasin;Logithèque;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Nouvelle fenêtre" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Découvrez et installez des applis" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Une logithèque rapide et moderne pour Linux, spécialement conçue pour " "découvrir et installer des applis et des extensions Flatpak, notamment " "celles disponibles sur Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Gérez plusieurs installations en même temps tout en naviguant" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Consultez facilement les autorisations des applications" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Connectez-vous à Flathub pour consulter et gérer vos favoris" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Recherchez des applications directement depuis le Shell GNOME" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:787 msgid "The Bazaar Contributors" msgstr "Les Contributeurs de Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Page d’accueil affichant les applis de Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Page de l’appli Exhibit" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Page Bibliothèque" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Page Recherche" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Page Catégorie" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Utilise un environnement en fin de vie" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Désinstaller" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Installer" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Gérer les extensions" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Aucune extension visible" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Toutes extensions connues de cette appli sont cachés par vos préférences de " "filtrage. Ajustez les pour voir les extensions cachées. " #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Page des extensions" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Téléchargements/mois" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "L'application utilise un environnement en fin de vie" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "L’environnement d’exécution utilisé par cette extension ne reçoit plus de " "mises à jour ni de correctifs de sécurité.\n" "Son utilisation pourrait devenir risquée." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Extension pour %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 msgid "Show Less" msgstr "Montrer moins" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 src/bz-section-view.blp:71 msgid "Show More" msgstr "Montrer plus" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Statistiques de téléchargement" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Classification d'âge" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Violence animée" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Aucune information concernant de la violence animée" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Violence fictive" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Aucune information concernant des scènes de violence fictive" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Violence réaliste" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Aucune information concernant des scènes de violence réaliste" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Violence sanglante" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Aucune information concernant des scènes de violence sanglante" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Violence sexuelle" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Aucune information concernant des scènes de violence sexuelle" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alcool" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Aucune information concernant des références à l’alcool" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Stupéfiants" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Aucune information concernant des références aux drogues illicites" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabac" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Aucune information concernant des références aux produits du tabac" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nudité" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Aucune information concernant des formes de nudité" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Thèmes sexuels" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Aucune information concernant des références ou scènes à caractère sexuel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Vulgarité" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Aucune information concernant des formes de vulgarité" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Humour inapproprié" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Aucune information concernant de l’humour inapproprié" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Discrimination" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Aucune information concernant un langage à caractère discriminatoire" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Publicité" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Aucune information concernant des formes de publicité" # Fait parti du système d'estimation d'âge et n'est pas une catégorie # (d'où l'utilisation du singuler par rapport au pluriel) #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Jeu d’argent" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Aucune information concernant les jeux d’argent" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Achat" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Aucune information concernant la faculté de dépenser de l’argent" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Discussions entre utilisateurs" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "" "Aucune information concernant des moyens de discuter avec d’autres " "utilisateurs" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Discussions vocales entre utilisateurs" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Aucune information concernant les moyens de parler avec d’autres utilisateurs" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Détails des contacts" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Aucune information concernant le partage de pseudonymes ou d’adresses " "courriel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Données d’identification" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Aucune information concernant le partage d’information utilisateur avec des " "tiers" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Partage de position" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Aucune information concernant la possibilité de partager sa position avec " "d’autres utilisateurs" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostitution" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Aucune information concernant des références à la prostitution" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adultère" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Aucune information concernant des références à l’adultère" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Personnage sexualisés" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Aucune information concernant des personnages sexualisés" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Profanation" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Aucune information concernant des formes de profanation" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Restes humains" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Aucune information concernant la visibilité de restes humains" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Esclavage" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Aucune information concernant des références à l’esclavage" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "N’inclut pas de références aux drogues" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Ne comporte pas de jurons, blasphèmes ou d’autres formes de langage grossier" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "N’inclut pas de publicité, ni de transactions monétaires" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "N’inclut pas de sexe, ni de nudité" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "N’inclut pas de fonctionnalités de discussion non modérées" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "N’inclut pas de violence" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogues" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Langage grossier" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Monétisation" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Social" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Violence" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Tout" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s a une limite d’âge inconnue" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s convient à tout le monde" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s convient aux jeunes enfants" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s convient aux enfants" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s convient aux adolescents" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s convient aux adultes" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s convient aux %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Accès au répertoire %s (Système)" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Sous-dossier %s (Dossier Personnel)" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Dossiers du système hôte" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Configuration du système hôte à partir de /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Sous-dossier %s (Bureau)" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Dossier Bureau" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Sous-dossier %s (Documents)" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Dossier Documents" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Sous-dossier %s (Musique)" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Dossier Musique" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Sous-dossier %s (Images)" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Dossier Images" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Sous-dossier %s (Public)" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Dossier Public" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Sous-dossier %s (Vidéos)" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Dossier Vidéos" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Sous-dossier %s (Modèles)" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Dossier Modèles" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Sous-dossier %s (cache utilisateur)" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Dossier du cache utilisateur" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Sous-dossier %s (configuration utilisateur)" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Dossier de configuration utilisateur" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Sous-dossier %s (données utilisateur)" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Dossier des données utilisateur" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Sous-dossier %s (environnement d’exécution utilisateur)" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Dossier d’envionnement d’exécution utilisateur" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Accès à %s dans le système de fichiers" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Chemin d’accès au système de fichiers inconnu" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Taille du téléchargement" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Taille après installation" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Volume à télécharger depuis Internet" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Taille sur le disque" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Ouvrir le dossier des données utilisateur" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Vos données" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Caches, paramètres et autres données" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Cache" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Données mises en cache temporairement" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Effacer le cache" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Taille de l'environnement d’exécution" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Taille du téléchargement de l'environnement d’exécution" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "Inconnu" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Taille de l'appli" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Vérifié" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Installée" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:790 msgid "translator-credits" msgstr "" "Atom <29772841+AtomHare@users.noreply.github.com>, 2025\n" "Léane GRASSER , 2025\n" "Mimolet , 2025-2026\n" "Irénée THIRION , 2026" #: src/bz-application.c:800 msgid "Special Thanks" msgstr "Remerciements particuliers à" #: src/bz-application.c:858 msgid "Logged Out Successfully!" msgstr "Déconnexion réussie !" #: src/bz-application.c:1038 msgid "Ubuntu Troubles!" msgstr "À l'attention des utilisateurs d'Ubuntu" #: src/bz-application.c:1041 msgid "" "The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version of " "Bazaar, please just use the normal package for now by using\n" "\n" "sudo apt install bazaar\n" "\n" "You can then remove this Flatpak version with\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" msgstr "" "Les versions récentes d'Ubuntu ont mis du désordre dans les règles de " "sécurité par défaut, ce qui rend impossible l'installation " "d'applications depuis la version Flatpak de Bazaar. Pour le moment, " "veuillez utiliser le paquet apt à la place – installez-le avec \n" "\n" "sudo apt install bazaar\n" "\n" "Vous pourrez ensuite enlever la version Flatpak avec\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" #: src/bz-application.c:1047 msgid "Continue Anyway" msgstr "Continuer quand même" #: src/bz-application.c:1063 msgid "Performing setup…" msgstr "Configuration en cours…" #: src/bz-application.c:1155 msgid "Set Up System Flathub?" msgstr "Configurer Flathub sur le système ? " #: src/bz-application.c:1158 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Le dépôt d'applications Flathub n’a pas été configuré sur ce système. Bazaar " "a besoin que Flathub soit configuré pour parcourir et installer des " "applications.\n" "\n" "Vous pouvez toujours utiliser Bazaar pour parcourir et désinstaller des " "applis déjà installées." #: src/bz-application.c:1165 msgid "Set Up Flathub?" msgstr "Configurer Flathub ?" #: src/bz-application.c:1168 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub n’a pas été configuré sur ce système. Vous ne pourrez pas parcourir " "et installer des applications dans Bazaar s’il est indisponible.\n" "\n" "Vous pouvez toujours utiliser Bazaar pour parcourir et désinstaller des " "applis déjà installées." #: src/bz-application.c:1174 msgid "Later" msgstr "Plus tard" #: src/bz-application.c:1175 msgid "Set Up Flathub" msgstr "Configurer Flathub" #: src/bz-application.c:1699 msgid "A backend error occurred" msgstr "Une erreur de backend est survenue" #: src/bz-application.c:1899 src/bz-application.c:4114 msgid "Refreshing…" msgstr "Actualisation…" #: src/bz-application.c:2063 src/bz-application.c:4112 #, c-format msgid "Loading %d apps…" msgstr "Chargement de %d applis…" #: src/bz-application.c:2116 msgid "Failed to open file" msgstr "Échec de l’ouverture du fichier" #: src/bz-application.c:2237 msgid "An initialization error occurred" msgstr "Une erreur d'initialisation s'est produite" #: src/bz-application.c:2631 msgid "Checking for updates…" msgstr "Recherche de mises à jour…" #: src/bz-application.c:2687 msgid "Failed to check for updates" msgstr "Échec de la vérification des mises à jour" #: src/bz-application.c:3824 msgid "Malformed Link" msgstr "Lien corrigé" #: src/bz-application.c:3825 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Le lien utilisé pour ouvrir cette application a une majuscule incorrecte et " "a été corrigé par Bazaar.\n" "\n" "Il s'agit très probablement de KRunner qui envoie des identifiants " "d'application incorrects." #: src/bz-application.c:3833 msgid "Could not find app" msgstr "Impossible de trouver l'application" #: src/bz-application.c:3864 msgid "Failed to load metainfo" msgstr "Échec du chargement des métainfos" #: src/bz-application.c:4116 msgid "Writing to cache…" msgstr "Écriture dans le cache…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Tout afficher" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Toutes les applis « %s »" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d applications" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Échec du chargement de l'article" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Installation de paquet" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "" "Des dépendances additionnelles pourraient nécessiter de l'espace disque " "supplémentaire" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Installer cette application pourrait nécessiter l'ajout d'une nouvelle " "source de logiciels.\n" "D'autres applis de cette source apparaîtront alors dans Bazaar.\n" "\n" "N'ajoutez cette source que si vous lui faites confiance." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Application installée avec succès!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Ouvrir" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Voir les détails" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Déjà installée" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Échec de l'installation" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Taille d'installation inconnue" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Environ %s à installer" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Aucune autorisation spéciale" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f Mio." #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f mil." #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d téléchargements au cours du dernier mois" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s d'environnement" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "À télécharger" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Informations sur la taille non disponibles" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Taille du téléchargement de %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Tout public" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Informations sur la classification d’âge non disponibles" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Convient à tout public" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Approprié dès %d ans et plus" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Inconnue" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Logiciel libre sous licence %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Logiciel libre" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Logiciel propriétaire" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Licence spéciale : %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Logiciel libre" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Propriétaire" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Licence spéciale" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Adaptatif" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "PC uniquement" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Fonctionne sur ordinateur, tablette et téléphone" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Peut ne pas fonctionner sur les appareils mobiles" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Fiable" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Risque faible" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Risque moyen" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Risque élevé" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Vide" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Aucune sélection" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "Votre système ne possède pas de sélection d'applications. Vous pouvez " "toujours en chercher dans la logithèque" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Parcourir Flathub" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Hors-ligne" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Navigateur" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Non-vérifié" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Informations sur le développeur non disponibles." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "La propriété de l'identifiant %s n’a pas été vérifiée et il pourrait s’agir " "d’un paquet géré par la communauté." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "La propriété de l'identifiant %s a été vérifiée par l’équipe Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "La propriété de l'identifiant %1$s a été vérifiée par %2$s sur " "%3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "La propriété de l'identifiant %1$s a été vérifiée en utilisant %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "La propriété de l'identifiant %s a été vérifiée." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Notes de version complètes" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Bazaar existe grâce à vous !" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "J'adore travailler sur Bazaar, mais je ne peux pas y arriver seule. Vous " "pouvez m'aider à continuer le projet en faisant un don sur Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Faire un don à Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Quoi de neuf en %s ?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Publié le %-e %B %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Choisissez une installation" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Plusieurs versions de cette application sont installées. Avec quelle version " "souhaitez-vous poursuivre ?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Annuler" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Pour cet utilisateur seulement" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "cet utilisateur" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "tous les utilisateurs" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Détails" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Copier" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:415 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Copié !" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Nombre de favoris" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Échec de la mise à jour des favoris" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Connectez-vous avec Flathub pour gérer vos favoris" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Se connecter" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:348 msgid "Favorites" msgstr "Favoris" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "Tout installer" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Chargement" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Pas de favoris" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Les applications que vous marquerez comme favorites apparaîtront ici" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Soutenez cette application" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Retirer des favoris" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Échec de la suppression du favori" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Précédent" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Suivant" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Montage" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mixage" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Musique" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Lecteurs" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Enregistreurs" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Séquenceurs" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Accordeurs" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Émulateurs" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Action" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Aventure" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Arcade" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Blocs" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Plateau" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Jeux de cartes" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Jeux pour enfants" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Logique" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Jeux de rôle" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Jeux de tir" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Simulation" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Sports" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Jeux de stratégie" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Navigateurs" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Messageries" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Emails" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Partage de fichiers" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Audio & Vidéo" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Média" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Plus d’applis audio & vidéo" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Outils de Développement" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Coder" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Plus d’outils de développement" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Éducation" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Apprendre" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Plus d’applis éducatives" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Jeux vidéos" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Jouer" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Plus de jeux" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Graphisme & Photographie" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Créer" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Plus d’applis de graphisme et photographie" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Réseau" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Plus d’applis réseau" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Productivité" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Travailler" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Plus d’applis de productivité" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Sciences" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Plus d’applis scientifiques" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Système" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Plus d’applis système" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Utilitaires" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Outils" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Plus d’utilitaires" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Tendances" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Plus de tendances" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Populaires" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Plus d’applis populaires" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Ajoutées récemment" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nouveautés" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Plus de nouveautés" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Mises à jour récemment" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Mises à jour" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Plus d’applis mises à jour" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Mobile" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Plus d’applis mobiles" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Plus d’applis Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "KDE" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Plus d’applis KDE" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Jeux" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Plus de jeux" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Émulateurs" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Plus d'émulateurs" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Lanceurs" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Plus de lanceurs de jeux" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Outils de jeu" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Plus d'outils de jeu" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub n’a pas été ajouté" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "Le dépôt Flathub n’a été trouvé dans aucune de vos installations Flatpak" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub est indisponible" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Connexion à Flathub impossible" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Vous pouvez toujours gérer et cherchez des applis." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Rechercher des applis" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Se reconnecter" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Appli du jour" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Sur tous vos écrans" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Applis pour vos téléphones et tablettes Linux" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Plus d’applis mobiles" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Nous + jeux = ♥" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Jeux et applis pour lancer vos titres préférés" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Aucun résultat" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Essayez une autre recherche" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Contenu" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Ceci est une prévisualisation locale, quelques détails pourraient être " "différents du résultat publié" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Prévisualiser dans la logithèque" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Soutenir" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "L’environnement d’exécution utilisé par cette application ne reçoit plus de " "mises à jour ni de correctifs de sécurité.\n" "Son utilisation pourrait devenir risquée." #: src/bz-full-view.blp:539 msgid "Trash Data" msgstr "Supprimer les données" #: src/bz-full-view.blp:602 msgid "Add-ons" msgstr "Extensions" #: src/bz-full-view.blp:637 msgid "More Add-Ons" msgstr "Plus d'extensions" #: src/bz-full-view.blp:648 msgid "Links" msgstr "Liens" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Aucune URL" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Cette appli a une licence FLOSS, la fiabilité de son code source peut donc " "être vérifiée." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Cette appli a une licence propriétaire, son code source est donc privé et " "n'est pas vérifiable par un tiers indépendant." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Plus d’applis" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Plus d’applis par %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "D’autres applis de ce développeur" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "D’autres applis par %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s n’est pas installé, mais a toujours %s de données présentes." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "D’autres applis" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d application" msgstr[1] "%d applications" #: src/bz-full-view.c:506 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Échec de la suppression des données utilisateurs" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Support matériel" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Prise en charge des claviers" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Requiert un clavier" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Recommande l’utilisation d’un clavier" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Prend en charge les claviers" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Prise en charge des claviers inconnue" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Prise en charge des souris" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Nécessite une souris ou un pointeur" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Recommande l’utilisation d’une souris ou d’un pointeur" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Prend en charge les souris et pointeurs" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Prise en charge des souris et pointeurs inconnue" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Prise en charge des écrans tactiles" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Requiert un écran tactile" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Recommande l’utilisation d’un écran tactile" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Prend en charge les écrans tactiles" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Prise en charge des écrans tactiles inconnue" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Prise en charge des appareils mobiles" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Fonctionne sur les appareils mobiles" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Peut ne pas fonctionner correctement sur les appareils mobiles" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Prise en charge PC" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Fonctionne bien sur grands écrans" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s fonctionne mieux sur certains appareils" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s fonctionne sur la plupart des appareils" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Ouvrir" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Désinstaller l’application" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Désinstaller" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Mettre à jour" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Désinstaller" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "Installer %s depuis %s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "Installer %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Annuler" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Annulation" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Bouton Faire un don" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Rechercher des applis installées" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Effacer la recherche" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Aucune appli trouvée" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Rechercher plutôt dans la logithèque" # "Bibliothèque" est trop long sous un format "mobile" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:114 msgid "Library" msgstr "Bibliothèque" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Mises à jour en attente" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Téléchargements" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Désinstallées récemment" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Effacer les tâches effectuées" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Options de tri" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Trier par" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Nom" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Taille" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Aucune application installée ne correspond à « %s »" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u mise à jour disponible" msgstr[1] "%u mises à jour disponibles" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u appli installée" msgstr[1] "%u applis installées" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "S’impliquer" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "En savoir plus" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Licence inconnue" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Construite par la communauté" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Cette appli est développée de manière ouverte par une communauté " "internationale.\n" "\n" "Vous pouvez participer à son amélioration." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "La licence de cette appli est inconnue" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Cette appli est développée de manière ouverte par une communauté " "internationale, et publiée sous la licence %s.\n" "\n" "Vous pouvez participer à son amélioration." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Cette appli n’est pas développée de manière ouverte : seuls ses développeurs " "connaissent son fonctionnement. Elle est susceptible de comporter des " "failles de sécurité difficiles à détecter et peut être modifiée sans aucun " "contrôle préalable.\n" "\n" "Vous ne pourrez peut-être pas contribuer à cette application." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Cette appli est développée sous la licence spéciale %s.\n" "\n" "Vous ne pourrez peut-être pas contribuer à cette application." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Licence" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Se connecter à Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Une erreur s’est produite" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" "Connectez-vous pour synchroniser vos applications favorites d'un appareil à " "l'autre" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Terminer" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Bonjour, %s !" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Sélectionner un fichier métainfo" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Fichiers métainfo" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Sélectionner une icône (facultatif)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Fichiers image" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Aperçu" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Préférences" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "La connexion réseau est limitée — l’actualisation automatique de la " "logithèque est suspendue" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:236 src/bz-window.blp:247 msgid "Refresh Manually" msgstr "Actualiser manuellement" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Filtres de contenus" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Logiciels libres seulement" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Masque les applis propriétaires dans les résultats des recherches" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Logiciels Flathub seulement" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "" "Restreint les résultats des recherches aux applis disponibles sur Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Résultats vérifiés seulement" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Masque les résultats non vérifiés sur Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Masquer les applications en fin de vie" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Masque les applis qui ne sont plus prises en charge par leurs développeurs" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Thème de la barre de progression" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Couleur d’accentuation" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Couleurs de la fierté" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Couleurs de la fierté lesbienne" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Couleurs de la fierté homosexuelle" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Couleurs de la fierté transgenre" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Couleurs de la fierté non binaire" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Couleurs de la fierté bisexuelle" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Couleurs de la fierté asexuelle" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Couleurs de la fierté pansexuelle" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Couleurs de la fierté aromantique" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Couleurs de la fierté fluide" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Couleurs de la fierté polysexuelle" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Couleurs de la fierté omnisexuelle" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Couleurs de la fierté aroace" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Couleurs du drapeau agenre" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Couleurs du drapeau genderqueer" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Couleurs du drapeau intersexe" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Couleurs du drapeau demi-genre" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Couleurs du drapeau biromantique" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Couleurs de la fierté des personnes en situation de handicap" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Couleurs de la fierté femboy" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Couleurs du drapeau neutrois" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "Historique des versions" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Historique des versions" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Aujourd'hui" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Hier" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "Il y a %d jour" msgstr[1] "Il y a %d jours" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "Il y a %d semaine" msgstr[1] "Il y a %d semaines" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "Il y a %d mois" msgstr[1] "Il y a %d mois" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "Il y a %d an" msgstr[1] "Il y a %d ans" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Version %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Aucun détail à propos de cette version" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Obtenir plus d’informations" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Désinstaller" # Dans le contexte d'App Store - "Get" serait plutôt traduit en "Télécharger" ou comme ici en "Installer" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "/" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Autorisations inconnues" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Des autorisations sont manquantes pour cette application." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Aucune autorisation" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "L’application est entièrement sandboxée" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Accès à Internet" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Peut accéder à Internet" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Aucun accès Internet" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Ne peut pas accéder à Internet" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Accès à l’appareil de l’utilisateur" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" "Peut accéder à des périphériques tels que des webcams ou des manettes de jeu" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Aucun accès aux périphériques" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Ne peut pas accéder aux périphériques système qui nécessitent des " "autorisations élevées" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Accès aux périphériques d’entrée" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Peut accéder aux périphériques d’entrée" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Accès au microphone et à la lecture audio" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "A accès aux microphones connectés et peut lire des fichiers audio sans " "demander l’autorisation" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Accès aux périphériques du système" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Peut accéder aux périphériques du système qui nécessitent des autorisations " "élevées" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Accès au contenu de l’écran" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Peut accéder au contenu de l’écran ou d’autres fenêtres" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Système de fenêtrage ancien" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Utilise toujours un ancien système de fenêtrage (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Autorisations arbitraires" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Peut obtenir des autorisations arbitraires" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Paramètres utilisateur" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Peut accéder aux paramètres utilisateur et les modifier" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Accès complet en lecture/écriture au système de fichiers" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Peut lire et écrire tout le contenu du système de fichiers" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Accès en lecture/écriture au dossier personnel" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Peut lire et écrire tout le contenu de votre dossier personnel" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Accès complet en lecture au système de fichiers" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Peut lire tout le contenu du système de fichiers" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Accès en lecture au dossier personnel" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Peut lire tout le contenu de votre dossier personnel" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Accès en lecture/écriture au dossier Téléchargements" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Peut lire et écrire tout le contenu de votre dossier Téléchargements" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Accès en lecture au dossier Téléchargements" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Peut lire tout le contenu de votre dossier Téléchargements" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Peut lire et écrire tout le contenu du répertoire" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Peut lire tout le contenu du répertoire" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Aucun accès au système de fichiers" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Ne peut pas accéder au système de fichiers" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Utilise les services système" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Peut demander des données à des services système hors portail" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Utilise les services de la session utilisateur" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Peut demander des données à des services de session hors portail" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Aucun accès aux services" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" "Ne peut ni accéder à des services de session, ni à des services système hors " "portail" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Développeur vérifié" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "L’identité du développeur de cette application a été vérifiée" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Code propriétaire" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Le code source n’est pas public, il ne peut donc pas être vérifié de manière " "indépendante et pourrait ne pas être sécurisé" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Code vérifiable" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Le code source est public et peut être vérifié de manière indépendante, ce " "qui rend l’application plus sûre" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Utilise le service système %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Utilise le service de session %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Utilise le service %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Peut détecter ce service hors portail" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Peut communiquer à ce service hors portail" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Peut posséder ce service hors portail" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Intégration au menu global" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Peut afficher ses menus dans une barre de menus globale" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Intégration aux paramètres KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Peut détecter lorsque les paramètres du bureau KDE changent" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Paramètres généraux KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "" "Peut lire les préférences du bureau KDE telles que les polices et les " "couleurs" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Service de stockage secret" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Peut stocker et récupérer ses propres mots de passe à l’aide du trousseau " "système" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Service de notifications sur le bureau" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Peut envoyer des notifications sur le bureau" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Intégration dans la barre d’état système" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Peut afficher une icône dans la barre d’état système" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Intégration de KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Peut interagir avec les appareils connectés avec KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Cette appli possède des autorisations qui lui permettent indirectement de " "s'octroyer n'importe quelle autorisation qu'elle souhaite, " "contournant le bac à sable Flatpak.\n" "\n" "Par conséquent, elle peut agir comme une application normale, non-isolée qui " "peut accéder tous vos fichiers et se connecter à Internet, par exemple.\n" "\n" "Voir les autres autorisations peut donner une meilleure idée de ce que " "l'appli pourrait faire. " #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Voir les autres autorisations" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "Identifiant" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "Plateforme logicielle (SDK)" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Cette application utilise une version obsolète de la plateforme logicielle " "(SDK) et peut contenir des bogues ou des failles de sécurité qui ne seront " "pas corrigés." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Sécurité" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "%s est fiable" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s n’a pas d’autorisations à risque" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "%s est probablement fiable" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s n'est peut-être pas fiable" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "%s n’est pas fiable" #: src/bz-screenshot-page.blp:41 msgid "Back" msgstr "Retour" #: src/bz-screenshot-page.blp:71 msgid "Previous Screenshot" msgstr "Capture d’écran précédente" #: src/bz-screenshot-page.blp:81 msgid "Next Screenshot" msgstr "Capture d’écran suivante" #: src/bz-screenshot-page.blp:97 msgid "Copy Image" msgstr "Copier l’image" #: src/bz-screenshot-page.blp:160 msgid "Reset View" msgstr "Réinitialiser l’affichage" #: src/bz-screenshot-page.blp:171 msgid "Zoom Out" msgstr "Zoom arrière" #: src/bz-screenshot-page.blp:181 msgid "Zoom In" msgstr "Zoom avant" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Carrousel de captures d’écran" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Aucune capture d’écran" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Ouvrir la visionneuse de captures d’écran" #: src/bz-screenshots-carousel.c:308 #, c-format msgid "Screenshot %u %s" msgstr "Captures d’écran %u %s" #: src/bz-screenshots-carousel.c:310 #, c-format msgid "Screenshot %u" msgstr "Captures d’écran %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filtres" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Vérifiées" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Libres" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "À _jour" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Affiche/Masque les applications en fin de vie" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Disponibles sur mobile" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Catégories" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Rechercher applis, jeux et logiciels" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Filtres de recherche" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Effacer la recherche" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Parcourir les catégories" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Catégories non disponibles" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Cherchez des applis en utilisant l'onglet « Rechercher »." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Aucune application trouvée" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Aucun résultat pour « %s » dans la logithèque" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Vidéo" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Bureautique" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Calendrier" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Messagerie" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Dessin" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Émulateur" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Page Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Site du projet" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Signaler un problème" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Aide" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Faire un don" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Traduire" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Contact" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Code Source" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Contribuer" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifeste" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Copier le lien" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Chronologie" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Installations :" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Monde" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Depuis le 15 Avril 2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2f Mio installations en tout" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2f mil. installations en tout" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d téléchargements en tout" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Aucun résultat trouvé" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "La recherche a échoué" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Conserver les données utilisateur" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Permet la restauration des paramètres et du contenu" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Supprimer les données" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "" "Supprime définitivement les données de l’appli pour libérer de l’espace" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Installer %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Sélectionnez la version à installer.\n" "Elle pourrait installer des composants partagés supplémentaire" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Pourrait installer des composants partagés supplémentaires" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Annuler" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Installer" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Désinstaller %s ?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Sélectionnez la version à désinstaller." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Il ne sera plus possible d’utiliser %s après sa désinstallation." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "« %s » présente un risque élevé" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Cette application dispose d’un accès complet à votre système, y compris à " "tous vos fichiers, à l’historique de votre navigateur, à vos mots de " "passe enregistrés, etc. Elle a également accès à Internet, ce qui " "signifie qu’elle pourrait envoyer vos données à des tiers.\n" "\n" "Comme cette application est propriétaire, il est impossible de vérifier ce " "qu’elle fait avec ces autorisations." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Cette application utilise l’ancien système de fenêtrage X11, qui lui permet " "d’enregistrer toutes les frappes au clavier, de faire des captures " "d’écran et de surveiller d’autres applications. Elle a également accès à " "Internet, ce qui signifie qu’elle pourrait envoyer vos données à des tiers.\n" "\n" "Comme cette application est propriétaire, il est impossible de vérifier ce " "qu’elle fait avec ces autorisations." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Installer quand même" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Échec du chargement du dialogue de la transaction" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Toutes les applis sont déjà installées" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "D’_accord" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Installer %u appli ?" msgstr[1] "Installer %u applis ?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Les applications suivantes seront installées. Des composants partagés " "supplémentaires pourraient également être installés" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d extensions seront installées." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Des extensions seront aussi installées." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Tout installer" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Terminé en %.02f secondes" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Extension d'application" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Environnement d’exécution" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "En attente" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Tâche terminée" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Tâche annulée" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Erreur" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Annuler la tâche" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Voir les détails" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Afficher les informations sur l'erreur" # Pluriel car on parle d'octets #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s libérés" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Erreur de transaction" #: src/bz-transaction.c:344 msgid "Pending" msgstr "En attente" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "Tout _mettre à jour" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u mise à jour d'environnement d’exécution " msgstr[1] "%u mises à jour d'environnement d’exécution " #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Nettoyer les données orphelines" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Pas de données orphelines trouvées" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Données utilisateur" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Mettre les données utilisateurs à la corbeille" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Les données utilisateur de %s ont été mise à la corbeille" #: src/bz-window.blp:72 msgid "Refreshing" msgstr "Actualisation" #: src/bz-window.blp:90 msgid "Curated" msgstr "Sélection" #: src/bz-window.blp:102 msgid "Explore" msgstr "Explorer" #: src/bz-window.blp:129 msgid "Search" msgstr "Recherche" #: src/bz-window.blp:216 msgid "Main Menu" msgstr "Menu principal" #: src/bz-window.blp:227 msgid "You are running a new version of Bazaar!" msgstr "Bazaar a été mis à jour !" #: src/bz-window.blp:228 msgid "See What's New" msgstr "Voir les nouveautés" #: src/bz-window.blp:235 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Votre appareil est connecté à Internet, mais vous consultez une version hors-" "ligne de la logithèque" #: src/bz-window.blp:246 msgid "Network connection is metered — automatic refreshes disabled" msgstr "Connexion réseau limitée — l’actualisation automatique est désactivée" #: src/bz-window.blp:292 msgid "_Donate to Bazaar" msgstr "Faire un _don à Bazaar" #: src/bz-window.blp:298 msgid "_Refresh" msgstr "_Actualiser" #: src/bz-window.blp:302 msgid "_Login With Flathub" msgstr "Se _connecter avec Flathub" #: src/bz-window.blp:308 msgid "_Manage Leftover User Data" msgstr "_Gérer les données utilisateurs orphelines" #: src/bz-window.blp:314 msgid "_Preferences" msgstr "_Préférences" #: src/bz-window.blp:319 msgid "_Keyboard Shortcuts" msgstr "_Raccourcis clavier" #: src/bz-window.blp:324 msgid "_About Bazaar" msgstr "À propos de _Bazaar" #: src/bz-window.blp:330 msgid "_Quit Bazaar" msgstr "_Quitter Bazaar" #: src/bz-window.blp:355 msgid "Log Out" msgstr "Se déconnecter" #. Translators: %s is the title of the current page #: src/bz-window.c:389 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:609 src/bz-window.c:647 msgid "Failed to launch application" msgstr "Échec du lancement de l'application" #: src/bz-window.c:860 msgid "You can't remove Bazaar from Bazaar!" msgstr "Vous ne pouvez supprimer Bazaar depuis Bazaar !" #: src/bz-window.c:1166 src/bz-window.c:1200 msgid "Can't do that right now!" msgstr "Impossible de faire ceci pour le moment !" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Installation" msgstr[1] "Installations" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navigation" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Ouvrir la page Explorer" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Ouvrir la page Bibliothèque" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Ouvrir la page Recherche" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Sources" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Synchroniser les sources" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Général" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Ouvrir les préférences" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Afficher les raccourcis" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Fermer la fenêtre" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Quitter Bazaar" #~ msgid "Screenshots" #~ msgstr "Captures d’écran" #~ msgid "Free" #~ msgstr "Libre" #~ msgid "Flathub returned an error" #~ msgstr "Flathub a renvoyé une erreur" #~ msgid "Retry Flathub Connection" #~ msgstr "Réessayer de se connecter à Flathub" #~ msgid "Tags:" #~ msgstr "Étiquettes :" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "Connectez votre compte Flathub à Bazaar pour gérer vos applications " #~ "favorites." #~ msgid "Delay Search Results" #~ msgstr "Retarder l’affichage des résultats de recherche" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "Améliore la performance des résultats en rajoutant un anti-rebond" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Choisissez un thème pour la barre de progression !" #~ msgid "Vertical Stripes" #~ msgstr "Motifs verticaux" #~ msgid "Display flag colors from left to right" #~ msgstr "Affiche les couleurs des drapeaux de gauche à droite" #~ msgid "Open Link" #~ msgstr "Ouvrir le lien" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "Applis étiquetées « %s »" #~ msgid "Refresh completed!" #~ msgstr "Actualisation terminée !" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Actualiser" #~ msgid "User Data Size" #~ msgstr "Taille des données utilisateur" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "installations" #~ msgid "Open App Library" #~ msgstr "Ouvrir la bibliothèque" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "L’installation de lots .flatpak n’est pas encore prise en charge" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" bazaar-org-bazaar-b6e9a65/po/ga.po000066400000000000000000002774161522167256300170170ustar00rootroot00000000000000# Irish translations for bazaar package. # Copyright (C) 2026 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2026. # # Aindriú Mac Giolla Eoin , 2026. msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-24 13:42+0100\n" "PO-Revision-Date: 2026-05-24 13:17+0000\n" "Last-Translator: Aindriú Mac Giolla Eoin \n" "Language-Team: Irish \n" "Language: ga\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==2 ? 1 : 2;\n" "X-Generator: Weblate 2026.5\n" #: data/io.github.kolunmi.Bazaar.desktop.in:3 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:45 #: src/bz-window.blp:199 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:4 msgid "Add, remove or update flatpak software on this computer" msgstr "" "Bogearraí flatpak a chur leis, a bhaint nó a nuashonrú ar an ríomhaire seo" #: data/io.github.kolunmi.Bazaar.desktop.in:10 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Córas;Bainisteoir Pacáistí;Faigh Amach;Flatpak;Bogearraí;Stór;" #: data/io.github.kolunmi.Bazaar.desktop.in:17 msgid "New Window" msgstr "Fuinneog Nua" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Aimsigh agus bainistigh feidhmchláir" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Siopa aipeanna gasta agus nua-aimseartha do Linux le fócas ar aipeanna agus " "breiseáin Flatpak a aimsiú agus a shuiteáil, go háirithe ó Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Cuir ilshuiteálacha i scuaine agus lean ort ag brabhsáil" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Féach go héasca ar cheadanna aipeanna" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "" "Sínigh isteach chuig Flathub chun do rogha pearsanta a fheiceáil agus a " "bhainistiú" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Cuardaigh aipeanna go díreach ó GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:762 msgid "The Bazaar Contributors" msgstr "Rannpháirtithe an Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "An leathanach baile a thaispeánann aipeanna Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Leathanach aip taispeántais" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Leathanach na leabharlainne" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Leathanach cuardaigh" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Leathanach catagóire" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Stopadh ag fáil nuashonruithe" #: src/bz-addon-tile.c:167 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Díshuiteáil" #: src/bz-addon-tile.c:169 src/bz-bundle-install-dialog.blp:126 #: src/bz-favorites-tile.c:157 src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Suiteáil" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-full-view.blp:583 #: src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Bainistigh Breiseáin" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Gan Breiseáin le Feiceáil" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Tá do chuid roghanna scagaire reatha ag cur breiseáin aitheanta i bhfolach. " "Bain triail as iad a choigeartú." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Leathanach Breiseáin" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:381 msgid "Downloads/Month" msgstr "Íoslódálacha/Mí" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:417 msgid "Stopped Receiving Core Updates" msgstr "Stopadh ag fáil nuashonruithe lárnacha" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Úsáideann an breiseán seo am rith nach bhfaigheann nuashonruithe ná " "socruithe slándála a thuilleadh. D’fhéadfadh sé a bheith neamhshábháilte le " "húsáid." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Breiseán do %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:600 msgid "Show Less" msgstr "Taispeáin Níos Lú" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:600 msgid "Show More" msgstr "Taispeáin Tuilleadh" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Staitisticí Íoslódála" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Rátáil Aois" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Foréigean Cartúin" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Gan aon eolas maidir le foréigean cartúin" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Foréigean Fantaisíochta" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Gan aon eolas maidir le foréigean fantaisíochta" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Foréigean Réalaíoch" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Gan aon fhaisnéis maidir le foréigean réalaíoch" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Foréigean a léiríonn fuildhoirteadh" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Gan aon eolas faoi fhuildhoirteadh" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Foréigean Gnéasach" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Gan aon eolas maidir le foréigean gnéasach" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alcól" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Gan aon fhaisnéis maidir le tagairtí d'alcól" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Támhshuanacha" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Gan aon fhaisnéis maidir le tagairtí do dhrugaí mídhleathacha" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tobac" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Gan aon fhaisnéis maidir le tagairtí do tháirgí tobac" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nochtacht" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Gan aon fhaisnéis maidir le nochtas de chineál ar bith" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Téamaí Gnéis" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Gan aon fhaisnéis maidir le tagairtí nó léirithe de chineál gnéasach" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Maslaí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Gan aon fhaisnéis maidir le maslaí de chineál ar bith" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Greann Míchuí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Gan aon eolas maidir le greann míchuí" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Idirdhealú" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Gan aon fhaisnéis maidir le teanga idirdhealaitheach d'aon chineál" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Fógraíocht" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Gan aon fhaisnéis maidir le fógraíocht d'aon chineál" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Cearrbhachas" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Gan aon fhaisnéis maidir le cearrbhachas d'aon chineál" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Ceannach" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Gan aon eolas maidir leis an gcumas airgead a chaitheamh" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Comhrá idir Úsáideoirí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "" "Gan aon eolas maidir le bealaí chun comhrá a dhéanamh le húsáideoirí eile" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Comhrá Fuaime Idir Úsáideoirí" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Gan aon eolas maidir le bealaí chun labhairt le húsáideoirí eile" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Sonraí Teagmhála" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Gan aon fhaisnéis maidir le hainmneacha úsáideora ná seoltaí ríomhphoist " "líonraí sóisialta a roinnt" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Faisnéis Aitheantais" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Gan aon fhaisnéis maidir le faisnéis úsáideora a roinnt le tríú páirtithe" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Comhroinnt Suímh" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Gan aon fhaisnéis maidir le suíomh fisiceach a roinnt le húsáideoirí eile" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Striapachas" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Gan aon fhaisnéis maidir le tagairtí do striapachas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adaltranas" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Gan aon fhaisnéis maidir le tagairtí d'adhaltranas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Carachtair Ghnéasaithe" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Gan aon fhaisnéis maidir le carachtair ghnéasaithe" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Mí-naomhú" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Gan aon fhaisnéis maidir le tagairtí do dhí-sheacracht" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Iarsmaí Daonna" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Gan aon fhaisnéis maidir le hiarsmaí daonna marbha infheicthe" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Sclábhaíocht" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Gan aon fhaisnéis maidir le tagairtí don sclábhaíocht" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Ní áirítear tagairtí do dhrugaí" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Ní chuimsíonn sé mionnú, maslaí, agus cineálacha eile teanga ghéar" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Ní áirítear fógraí ná idirbhearta airgid" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Ní chuimsíonn sé gnéas ná nochtas" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Ní chuimsíonn sé feidhmiúlacht comhrá neamhrialaithe" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Ní áirítear foréigean" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drugaí" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Teanga Láidir" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Airgead" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Sóisialta" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Foréigean" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Gach" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "Tá rátáil aoise anaithnid ag %s" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "Tá %s oiriúnach do gach duine" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "Tá %s oiriúnach do leanaí óga" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "Tá %s oiriúnach do pháistí" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "Tá %s oiriúnach do dhéagóirí" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "Tá %s oiriúnach do dhaoine fásta" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "Tá %s oiriúnach do %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Fillteán córais %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Fo-fhillteán baile %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Fillteáin chórais óstach" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Cumraíocht an chórais óstach ó /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Fo-fhillteán deisce %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Fillteán deisce" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Fo-fhillteán doiciméad %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Fillteán na ndoiciméad" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Fo-fhillteán ceoil %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Fillteán ceoil" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Fo-fhillteán pictiúr %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Fillteán pictiúr" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Fo-fhillteán Comhroinnte Poiblí %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Fillteán Comhroinnte Poiblí" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Fo-fhillteán físeáin %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Fillteán físeáin" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Fo-fhillteán teimpléid %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Fillteán teimpléid" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Fo-fhillteán taisce úsáideora %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Fillteán taisce úsáideora" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Fo-fhillteán cumraíochta úsáideora %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Fillteán cumraíochta úsáideora" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Fo-fhillteán sonraí úsáideora %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Fillteán sonraí úsáideora" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Fo-fhillteán ama rite úsáideora %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Fillteán rith-ama úsáideora" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Rochtain ar chóras comhad ar %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Cosán anaithnid córas comhad" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Méid Íoslódála" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Méid Suiteáilte" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Méid le híoslódáil ón idirlíon" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Méid ar Diosca" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Oscail fillteán sonraí úsáideora" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Do Shonraí Úsáideora" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Taisceáin, socruithe, agus sonraí eile aipeanna" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Taisce" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Sonraí taisceáilte sealadacha" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Glan an Taisce" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Méid Ama Rith Suiteáilte" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Méid Íoslódála Am Rithime" #: src/bz-app-size-dialog.c:220 msgid "App Size" msgstr "Méid an Aipe" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Fíoraithe" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Suiteáilte" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:765 msgid "translator-credits" msgstr "Aindriú Mac Giolla Eoin" #: src/bz-application.c:775 msgid "Special Thanks" msgstr "Buíochas Speisialta" #: src/bz-application.c:833 msgid "Logged Out Successfully!" msgstr "Logáilte Amach go Rathúil!" #: src/bz-application.c:969 msgid "Performing setup…" msgstr "Ag déanamh an socraithe…" #: src/bz-application.c:1055 msgid "Set Up System Flathub?" msgstr "Córas Flathub a Chur Ar Bun?" #: src/bz-application.c:1058 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Níl an cianrialtán Flathub córais socraithe. Éilíonn Bazaar go mbeidh " "Flathub cumraithe ar shuiteáil Flatpak an chórais chun brabhsáil agus " "feidhmchláir a shuiteáil.\n" "\n" "Is féidir leat Bazaar a úsáid fós chun brabhsáil agus aipeanna atá " "suiteáilte cheana féin a bhaint." #: src/bz-application.c:1065 msgid "Set Up Flathub?" msgstr "Suiteáil Flathub?" #: src/bz-application.c:1068 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Níl Flathub socraithe ar an gcóras seo. Ní bheidh tú in ann brabhsáil agus " "feidhmchláir a shuiteáil i Bazaar mura bhfuil sé ar fáil.\n" "\n" "Is féidir leat Bazaar a úsáid fós chun brabhsáil agus aipeanna atá " "suiteáilte cheana féin a bhaint." #: src/bz-application.c:1074 msgid "Later" msgstr "Níos déanaí" #: src/bz-application.c:1075 msgid "Set Up Flathub" msgstr "Socraigh Flathub" #: src/bz-application.c:1431 msgid "A backend error occurred" msgstr "Tharla earráid chúltaca" #: src/bz-application.c:1631 src/bz-application.c:3790 msgid "Refreshing…" msgstr "Ag athnuachan…" #: src/bz-application.c:1795 src/bz-application.c:3788 #, c-format msgid "Loading %d apps…" msgstr "Ag lódáil %d aip…" #: src/bz-application.c:1848 msgid "Failed to open file" msgstr "Theip ar an gcomhad a oscailt" #: src/bz-application.c:1953 msgid "An initialization error occurred" msgstr "Tharla earráid tosaithe" #: src/bz-application.c:2319 msgid "Checking for updates…" msgstr "Ag seiceáil le haghaidh nuashonruithe…" #: src/bz-application.c:2375 msgid "Failed to check for updates" msgstr "Theip ar sheiceáil le haghaidh nuashonruithe" #: src/bz-application.c:3501 msgid "Malformed Link" msgstr "Nasc Mífhoirmithe" #: src/bz-application.c:3502 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Tá caipitliú mícheart ar an nasc a úsáideadh chun an aip seo a oscailt agus " "d'fhéadfadh sé stopadh ag obair amach anseo.\n" "\n" "Is dóichí gur tharla sé seo mar gheall ar aitheantais aipeanna míchearta a " "sheoladh ag KRunner" #: src/bz-application.c:3510 msgid "Could not find app" msgstr "Níorbh fhéidir an aip a aimsiú" #: src/bz-application.c:3541 msgid "Failed to load metainfo" msgstr "Theip ar an meiteafhaisnéis a lódáil" #: src/bz-application.c:3792 msgid "Writing to cache…" msgstr "Ag scríobh chuig an taisce…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Taispeáin Gach Rud" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "Gach \"%s\"" #: src/bz-apps-page.c:487 src/bz-tag-list.c:91 #, c-format msgid "%d Applications" msgstr "%d Feidhmchlár" #: src/bz-bundle-install-dialog.blp:8 src/bz-bundle-install-dialog.blp:14 msgid "Bundle Installation" msgstr "Suiteáil Pacáiste" #: src/bz-bundle-install-dialog.blp:147 msgid "Additional dependencies may take extra space" msgstr "D’fhéadfadh spleáchais bhreise spás breise a thógáil" #: src/bz-bundle-install-dialog.blp:181 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "B’fhéidir go mbeadh gá le foinse bogearraí nua a chur leis agus an aip seo á " "shuiteáil. Beidh aipeanna eile ón bhfoinse seo le feiceáil i Bazaar.\n" "\n" "Ná cuir an fhoinse seo leis ach amháin má tá tú cinnte go bhfuil muinín agat " "aisti." #: src/bz-bundle-install-dialog.blp:357 msgid "Successfully Installed!" msgstr "Suiteáilte go rathúil!" #: src/bz-bundle-install-dialog.blp:381 src/bz-bundle-install-dialog.blp:463 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Oscail" #: src/bz-bundle-install-dialog.blp:391 src/bz-bundle-install-dialog.blp:473 msgid "Show App Details" msgstr "Taispeáin Sonraí an Aipe" #: src/bz-bundle-install-dialog.blp:440 msgid "Already Installed" msgstr "Suiteáilte cheana féin" #: src/bz-bundle-install-dialog.blp:485 msgid "Installation Failed" msgstr "Theip ar an Suiteáil" #: src/bz-bundle-install-dialog.c:169 msgid "Unknown install size" msgstr "Méid suiteála anaithnid" #: src/bz-bundle-install-dialog.c:172 #, c-format msgid "About %s to install" msgstr "Thart ar %s le suiteáil" #: src/bz-bundle-install-dialog.c:186 src/bz-context-tile-callbacks.c:104 #: src/bz-context-tile-callbacks.c:392 src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "N/B" #: src/bz-bundle-install-dialog.c:215 msgid "No special permissions" msgstr "Gan ceadanna speisialta" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d íoslódálacha sa mhí seo caite" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s am rith" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Íoslódáil" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Níl faisnéis mhéide ar fáil" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Méid íoslódála %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Gach Aois" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Níl faisnéis faoi rátáil aoise ar fáil" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Oiriúnach do gach aois" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Oiriúnach do dhaoine aois %d agus os a chionn" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Anaithnid" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Bogearraí saor in aisce ceadúnaithe faoi %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Bogearraí saor in aisce" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Bogearraí Dílseánaigh" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Ceadúnas Speisialta: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Saor in aisce" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Dílseánaigh" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Ceadúnas Speisialta" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Oiriúnaitheach" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Deasc Amháin" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Oibríonn sé ar dheasc, táibléid agus fóin" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "B’fhéidir nach n-oibreoidh sé ar ghléasanna soghluaiste" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "Sábháilte" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Riosca Íseal" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Riosca Meánach" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Ardriosca" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Folamh" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Gan Coimeádadh" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Níl aon fhaisnéis choimeádta curtha ar fáil ar an gcóras seo. Is féidir leat " "brabhsáil a dhéanamh ar fheidhmchláir ar Flathub fós" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Brabhsáil Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "As líne" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Brabhsálaí" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Gan Fíorú" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Níl faisnéis forbróra ar fáil." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Níl úinéireacht an aitheantais aip %s fíoraithe agus d'fhéadfadh gur " "pacáiste pobail atá ann." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Tá úinéireacht an aitheantais aip %s fíoraithe de láimh ag foireann Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Tá úinéireacht an aitheantais aip %1$s fíoraithe ag %2$s ar %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Tá úinéireacht ID an aip %1$s fíoraithe ag baint úsáide as %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Tá úinéireacht an aitheantais aip %s fíoraithe." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Nótaí Eisiúna Iomlána" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "" "Rinneadh an eisiúint seo indéanta a bhuíochas d’úsáideoirí cosúil leatsa!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Is breá liom Bazaar a chruthú, ach ní féidir liom é a dhéanamh liom féin. " "Cabhraigh le forbairt bhreise a chothú trí bhronnadh a thabhairt ar Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Tabhair síntiús don Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Cad atá Nua i %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Scaoilte %B %-e, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Roghnaigh Suiteáil" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Tá roinnt leaganacha den aip seo suiteáilte agat. Cé acu ceann ar mhaith " "leat leanúint ar aghaidh leis?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Cealaigh" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Don Úsáideoir seo Amháin" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "an t-úsáideoir seo" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "gach úsáideoir" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:46 msgid "Details" msgstr "Sonraí" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Cóipeáil" #: src/bz-error-dialog.c:56 src/bz-share-list.c:94 msgid "Copied!" msgstr "Cóipeáilte!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Líon na bhFear is Ansa liom" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Theip ar an rogha is fearr leat a nuashonrú" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Logáil isteach le Flathub chun na cinn is fearr leat a bhainistiú" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Logáil Isteach" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:334 msgid "Favorites" msgstr "Ceanáin" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Suiteáil Uile" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Ag luchtú" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Gan aon Ceanáin" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Beidh feidhmchláir a mharcálann tú mar is fearr leat le feiceáil anseo" #: src/bz-favorites-tile.blp:60 src/bz-installed-tile.blp:69 msgid "Support This Application" msgstr "Tacaigh leis an bhFeidhmchlár seo" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Bain as na Ceanáin" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Níorbh fhéidir an ceanán a bhaint" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Roimhe Seo" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Ar Aghaidh" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "Eagarthóireacht" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "Meascthóir" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Ceol" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "Seinnteoir" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "Taifeadán" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "Seicheamhóir" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "Tiúnóir" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "Teilifís" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Aithris" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Gníomh" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Eachtraíochta" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Stuara" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "Bloic" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "Bord" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "Cárta" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "Páistí" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Lóighic" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "Rólghlacadh" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Lámhachóir" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Insamhalta" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Spóirt" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Straitéis" #: src/bz-flathub-category.c:124 msgid "Audio & Video" msgstr "Fuaim & Físeán" #: src/bz-flathub-category.c:124 msgid "Media" msgstr "Meáin" #: src/bz-flathub-category.c:124 msgid "More Audio & Video" msgstr "Tuilleadh Fuaime & Físeáin" #: src/bz-flathub-category.c:125 msgid "Developer Tools" msgstr "Uirlisí Forbróra" #: src/bz-flathub-category.c:125 msgid "Develop" msgstr "Forbair" #: src/bz-flathub-category.c:125 msgid "More Developer Tools" msgstr "Tuilleadh Uirlisí Forbróra" #: src/bz-flathub-category.c:126 msgid "Education" msgstr "Oideachas" #: src/bz-flathub-category.c:126 msgid "Learn" msgstr "Foghlaim" #: src/bz-flathub-category.c:126 msgid "More Education" msgstr "Tuilleadh Oideachais" #: src/bz-flathub-category.c:127 msgid "Gaming" msgstr "Cluichíocht" #: src/bz-flathub-category.c:127 msgid "Play" msgstr "Imir" #: src/bz-flathub-category.c:127 msgid "More Gaming" msgstr "Tuilleadh Cluichíocht" #: src/bz-flathub-category.c:128 msgid "Graphics & Photography" msgstr "Grafaicí & Grianghrafadóireacht" #: src/bz-flathub-category.c:128 msgid "Create" msgstr "Cruthaigh" #: src/bz-flathub-category.c:128 msgid "More Graphics & Photography" msgstr "Tuilleadh Grafaicí & Grianghrafadóireachta" #: src/bz-flathub-category.c:129 msgid "Networking" msgstr "Líonrú" #: src/bz-flathub-category.c:129 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:129 msgid "More Networking" msgstr "Tuilleadh Líonraithe" #: src/bz-flathub-category.c:130 msgid "Productivity" msgstr "Táirgiúlacht" #: src/bz-flathub-category.c:130 msgid "Work" msgstr "Obair" #: src/bz-flathub-category.c:130 msgid "More Productivity" msgstr "Tuilleadh Táirgiúlachta" #: src/bz-flathub-category.c:131 msgid "Science" msgstr "Eolaíocht" #: src/bz-flathub-category.c:131 msgid "More Science" msgstr "Tuilleadh Eolaíochta" #: src/bz-flathub-category.c:132 msgid "System" msgstr "Córas" #: src/bz-flathub-category.c:132 msgid "More System" msgstr "Tuilleadh Córas" #: src/bz-flathub-category.c:133 msgid "Utilities" msgstr "Fóntais" #: src/bz-flathub-category.c:133 msgid "Tools" msgstr "Uirlisí" #: src/bz-flathub-category.c:133 msgid "More Utilities" msgstr "Tuilleadh Fóntais" #: src/bz-flathub-category.c:134 src/bz-flathub-page.blp:116 #: src/bz-flathub-page.blp:148 msgid "Trending" msgstr "Ag treochtáil" #: src/bz-flathub-category.c:134 msgid "More Trending" msgstr "Tuilleadh Treochtaí" #: src/bz-flathub-category.c:135 src/bz-flathub-page.blp:122 #: src/bz-flathub-page.blp:178 msgid "Popular" msgstr "Coitianta" #: src/bz-flathub-category.c:135 msgid "More Popular" msgstr "Níos Coitianta" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:168 msgid "Recently Added" msgstr "Curtha leis le Déanaí" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:128 msgid "New" msgstr "Nua" #: src/bz-flathub-category.c:136 msgid "More New" msgstr "Tuilleadh Nua" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:158 msgid "Recently Updated" msgstr "Nuashonraithe le Déanaí" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:134 msgid "Updated" msgstr "Nuashonraithe" #: src/bz-flathub-category.c:137 msgid "More Updated" msgstr "Tuilleadh Nuashonraithe" #: src/bz-flathub-category.c:138 msgid "Mobile" msgstr "Soghluaiste" #: src/bz-flathub-category.c:138 msgid "More Mobile" msgstr "Níos Soghluaiste" #: src/bz-flathub-category.c:139 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:139 msgid "More Adwaita" msgstr "Tuilleadh Adwaita" #: src/bz-flathub-category.c:140 msgid "KDE Apps" msgstr "Aipeanna KDE" #: src/bz-flathub-category.c:140 msgid "More KDE Apps" msgstr "Tuilleadh Aipeanna KDE" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Níor Cuireadh Flathub Leis" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "Ní bhfuarthas an cianrialtán Flathub ar aon cheann de do shuiteálacha Flatpak" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "Thug Flathub earráid ar ais" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "Déan iarracht eile ar nasc Flathub" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "Flathub Gan Fáil" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "Ní raibh muid in ann ceangal le Flathub. Is féidir leat feidhmchláir a " "bhainistiú agus a chuardach fós." #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "Cuardaigh Aipeanna" #: src/bz-flathub-page.blp:205 msgid "App of the Day" msgstr "Aip an Lae" #: src/bz-flathub-page.blp:268 msgid "On the Go" msgstr "Ar an mBóthar" #: src/bz-flathub-page.blp:280 msgid "Apps for your Linux phones and tablets" msgstr "Aipeanna do do ghutháin agus táibléid Linux" #: src/bz-flathub-page.blp:291 src/bz-flathub-page.blp:326 msgid "More Mobile Apps" msgstr "Tuilleadh Aipeanna Soghluaiste" #: src/bz-flathub-page.blp:382 msgid "We​ ♥​ Games" msgstr "Is breá linn ♥ Cluichí" #: src/bz-flathub-page.blp:395 msgid "Games and apps to run your favorite titles" msgstr "Cluichí agus aipeanna chun do theidil is fearr leat a rith" #: src/bz-flathub-page.blp:429 msgid "More Games" msgstr "Tuilleadh Cluichí" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Gan Torthaí" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Bain triail as ceist chuardaigh dhifriúil" #: src/bz-full-view.blp:41 msgid "Content" msgstr "Ábhar" #: src/bz-full-view.blp:103 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Réamhamharc áitiúil atá anseo, d'fhéadfadh roinnt sonraí a bheith difriúil " "ón liostú foilsithe" #: src/bz-full-view.blp:106 msgid "Preview Store Appearance" msgstr "Réamhamharc ar Chuma an tSiopa" #: src/bz-full-view.blp:232 msgid "_Support" msgstr "_Tacaíocht" #: src/bz-full-view.blp:431 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Úsáideann an aip seo am rith nach bhfaigheann nuashonruithe ná socruithe " "slándála a thuilleadh. D’fhéadfadh sé a bheith neamhshábháilte le húsáid." #: src/bz-full-view.blp:518 msgid "Trash Data" msgstr "Sonraí Bruscair" #: src/bz-full-view.blp:658 msgid "Tags:" msgstr "Clibeanna:" #: src/bz-full-view.c:180 msgid "No URL" msgstr "Gan URL" #: src/bz-full-view.c:198 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Tá ceadúnas FLOSS ag an bhfeidhmchlár seo, rud a chiallaíonn gur féidir an " "cód foinse a iniúchadh ar mhaithe le sábháilteacht." #: src/bz-full-view.c:199 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Tá ceadúnas dílseánaigh ag an bhfeidhmchlár seo, rud a chiallaíonn go " "bhforbraítear an cód foinse go príobháideach agus nach féidir le tríú páirtí " "neamhspleách é a iniúchadh." #: src/bz-full-view.c:206 msgid "More Apps" msgstr "Tuilleadh Aipeanna" #: src/bz-full-view.c:207 #, c-format msgid "More Apps by %s" msgstr "Tuilleadh Aipeanna ó %s" #: src/bz-full-view.c:214 msgid "Other Apps by this Developer" msgstr "Aipeanna Eile ón bhForbróir seo" #: src/bz-full-view.c:216 src/bz-full-view.c:316 #, c-format msgid "Other Apps by %s" msgstr "Aipeanna Eile ó %s" #: src/bz-full-view.c:225 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "Níl %s suiteáilte, ach tá %s sonraí ann fós." #: src/bz-full-view.c:318 msgid "Other Apps" msgstr "Aipeanna Eile" #: src/bz-full-view.c:320 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d Feidhmchlár" msgstr[1] "%d Feidhmchláir" msgstr[2] "%d Feidhmchláir" #: src/bz-full-view.c:536 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Theip ar Shonraí Úsáideora a Bhaint" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Tacaíocht Crua-earraí" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Tacaíocht méarchláir" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Éilíonn méarchláir" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Molann méarchláir" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Tacaíonn méarchláir" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Tacaíocht anaithnid do mhéarchláir" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Tacaíocht luiche" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Teastaíonn lucha nó gléasanna pointeála" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Molann lucha nó gléasanna pointeála" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Tacaíonn sé le lucha nó le gléasanna pointeála" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Tacaíocht anaithnid do lucha nó do ghléasanna pointeála" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Tacaíocht scáileáin tadhaill" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Éilíonn scáileáin tadhaill" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Molann scáileáin tadhaill" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Tacaíonn sé le scáileáin tadhaill" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Tacaíocht anaithnid do scáileáin tadhaill" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Tacaíocht shoghluaiste" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Oibríonn sé ar ghléasanna soghluaiste" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "B’fhéidir nach n-oibreoidh sé go maith ar ghléasanna soghluaiste" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Tacaíocht deisce" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Oibríonn go maith ar scáileáin mhóra" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "Oibríonn %s is fearr ar chrua-earraí sonracha" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "Oibríonn %s ar an gcuid is mó de na gléasanna" #: src/bz-install-controls.blp:62 msgid "_Open" msgstr "_Oscail" #: src/bz-install-controls.blp:77 src/bz-install-controls.blp:134 msgid "Uninstall Application" msgstr "Díshuiteáil Feidhmchlár" #: src/bz-install-controls.blp:87 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Bain" #: src/bz-install-controls.blp:121 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Nuashonrú" #: src/bz-install-controls.blp:144 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Bain" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Cealaigh" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Ag cealú" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Cuardaigh aipeanna suiteáilte" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Glan an cuardach" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Níor aimsíodh aon aipeanna" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Cuardaigh Siopa Ina Ionad" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:112 msgid "Library" msgstr "Leabharlann" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "Nuashonruithe ar Feitheamh" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "Íoslódálacha" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "Díshuiteáilte le Déanaí" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "Glan na Tascanna Críochnaithe" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "Sórtáil De réir" #: src/bz-library-page.blp:348 msgid "Name" msgstr "Ainm" #: src/bz-library-page.blp:354 msgid "Size" msgstr "Méid" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" "Níor aimsíodh aon mheaitseálacha do \"%s\" i liosta na n-aipeanna suiteáilte" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u Nuashonrú atá ar Fáil" msgstr[1] "%u Nuashonruithe atá ar Fáil" msgstr[2] "%u Nuashonruithe atá ar Fáil" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u Aip Suiteáilte" msgstr[1] "%u Aipeanna Suiteáilte" msgstr[2] "%u Aipeanna Suiteáilte" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "Bígí Páirteach" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "Foghlaim Tuilleadh" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Ceadúnas Anaithnid" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Tógtha ag an bPobal" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Forbraíodh an aip seo go hoscailte ag pobal idirnáisiúnta.\n" "\n" "Is féidir leat páirt a ghlacadh agus cabhrú le feabhas a chur uirthi." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Níl ceadúnas an aip seo ar eolas" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Forbraíodh an aip seo go hoscailte ag pobal idirnáisiúnta, agus eisíodh í " "faoin gceadúnas %s.\n" "\n" "Is féidir leat páirt a ghlacadh agus cabhrú le feabhas a chur uirthi." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Níor forbraíodh an aip seo go hoscailte, mar sin níl a fhios ag ach a " "forbróirí conas a oibríonn sé. D’fhéadfadh sé a bheith neamhshábháilte ar " "bhealaí atá deacair a bhrath, agus d’fhéadfadh sé athrú gan mhaoirseacht.\n" "\n" "B’fhéidir go mbeidh tú in ann cur leis an aip seo nó nach mbeidh." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Forbraíodh an aip seo faoin gceadúnas speisialta %s.\n" "\n" "B’fhéidir go mbeidh tú in ann cur leis an aip seo nó nach mbeidh." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "Ceadúnas" #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 msgid "Connect to Flathub" msgstr "Ceangail le Flathub" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "Chuaigh rud éigin mícheart" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "" "Ceangail do chuntas Flathub le Bazaar chun do chuid aipeanna is fearr leat a " "bhainistiú." #: src/bz-login-page.blp:110 msgid "Finish" msgstr "Críochnaigh" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "Haigh, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Roghnaigh Comhad Meiteafhaisnéise" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Comhaid Meiteafhaisnéise" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Roghnaigh Deilbhín (Roghnach)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Comhaid Íomhá" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Réamhamharc" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Roghanna" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Tá an nasc líonra méadraithe — tá athnuachan uathoibríoch sonraí stórála ar " "sos" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:232 msgid "Refresh Manually" msgstr "Athnuachan de Láimh" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Scagairí Ábhair" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Bogearraí Saor in Aisce Amháin" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "" "Folaigh feidhmchláir dhílseánaigh agus tú ag brabhsáil agus ag cuardach" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Torthaí Flathub Amháin" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Teorainn a chur le cuardach agus torthaí brabhsála d’fheidhmchláir atá ar " "fáil ar Flathub amháin" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Torthaí Fíoraithe Amháin" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Folaigh torthaí nach bhfuil fíoraithe ar Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Folaigh Aipeanna Deireadh Saoil" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Folaigh aipeanna nach dtacaíonn a bhforbróirí leo a thuilleadh" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:127 msgid "Search" msgstr "Cuardaigh" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "Moill ar Thorthaí Cuardaigh" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "" "Feabhas a chur ar fheidhmíocht na dtorthaí trí théarmaí cuardaigh a dhí-" "bhreabadh" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "Barra Dul Chun Cinn" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "Roghnaigh téama don bharra dul chun cinn!" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "Stríoca Ingearacha" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "Taispeáin dathanna na mbratach ó chlé go deas" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Dath Aicinn" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Dathanna Bród" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Dathanna Bród Leispiach" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Dathanna Bród Fir Homaighnéasacha" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Dathanna Bród Trasinscne" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Dathanna Bród Neamhdhénártha" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Dathanna Bród Déghnéasacha" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Dathanna Bród Neamhghnéasacha" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Dathanna Bród Panghnéasacha" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Dathanna Bród Cumhra" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Dathanna Bród Inscnefluid" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Dathanna Bród Ilghnéasacha" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Dathanna Bród Uileghnéasacha" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Dathanna Bród Aroace" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Dathanna Bród Agender" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Dathanna Bród Inscnequeer" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Dathanna Bród Idirghnéasacha" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Dathanna Bród Demi-Inscne" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Dathanna Bród Birománsacha" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Dathanna Bród Míchumais" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Dathanna Bród Femboy" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Dathanna Bród Neutrois" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Stair Leagan" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Stair Leagan" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Inniu" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Inné" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d lá ó shin" msgstr[1] "%d lá ó shin" msgstr[2] "%d lá ó shin" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d seachtain ó shin" msgstr[1] "%d seachtain ó shin" msgstr[2] "%d seachtain ó shin" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d mí ó shin" msgstr[1] "%d mí ó shin" msgstr[2] "%d mí ó shin" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d bliain ó shin" msgstr[1] "%d bliain ó shin" msgstr[2] "%d bliain ó shin" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Leagan %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Gan aon sonraí don eisiúint seo" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Faigh Tuilleadh Eolais" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Díshuiteáil" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "Faigh" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Ceadanna Anaithnid" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Tá ceadanna ar iarraidh don aip seo." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Gan Ceadanna" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Tá an aip bosca gainimh go hiomlán" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Rochtain Líonra" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Is féidir rochtain a fháil ar an idirlíon" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Gan Rochtain Líonra" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Ní féidir rochtain a fháil ar an idirlíon" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Rochtain Gléas Úsáideora" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" "Is féidir rochtain a fháil ar fheistí ar nós ceamaraí gréasáin nó rialtóirí " "cearrbhachais" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Gan Rochtain ar Ghléas Úsáideora" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Ní féidir rochtain a fháil ar fheistí ar nós ceamaraí gréasáin nó rialtóirí " "cearrbhachais" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Rochtain ar Ghléas Ionchuir" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Is féidir rochtain a fháil ar fheistí ionchuir" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Rochtain Micreafóin agus Athsheinm Fuaime" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "Is féidir éisteacht le micreafóin agus fuaim a sheinm gan cead a iarraidh" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Rochtain ar Ghléas an Chórais" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Is féidir rochtain a fháil ar ghléasanna córais a bhfuil ceadanna ardaithe " "ag teastáil uathu" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Rochtain ar Ábhar an Scáileáin" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Is féidir rochtain a fháil ar ábhar an scáileáin nó fuinneoga eile" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Córas Fuinneoige Oidhreachta" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Úsáideann sé córas fuinneoige oidhreachta i gcónaí (X11)" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "Ceadanna Treallacha" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Is féidir ceadanna treallacha a fháil" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Socruithe Úsáideora" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Is féidir rochtain a fháil ar shocruithe úsáideora agus iad a athrú" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Rochtain Léitheoireachta/Scríofa ar an gCóras Comhad Iomlán" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "" "Is féidir leis na sonraí go léir ar an gcóras comhad a léamh agus a scríobh" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Rochtain Léitheoireachta/Scríofa ar Fhillteán Baile" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "" "Is féidir leat na sonraí go léir i do eolaire baile a léamh agus a scríobh" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Rochtain Léitheoireachta Iomlán an Chórais Comhad" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Is féidir leis na sonraí go léir ar an gcóras comhad a léamh" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Rochtain Léitheoireachta Fillteán Baile" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Is féidir leat na sonraí go léir i do eolaire baile a léamh" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Rochtain Léitheoireachta/Scríofa ar an bhFillteán Íoslódála" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "" "Is féidir leat na sonraí go léir i do eolaire íoslódálacha a léamh agus a " "scríobh" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Íoslódáil Rochtain Léitheoireachta Fillteáin" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Is féidir leat na sonraí go léir i do chomhadlann íoslódálacha a léamh" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Is féidir na sonraí go léir san eolaire a léamh agus a scríobh" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Is féidir na sonraí go léir san eolaire a léamh" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Gan Rochtain ar Chóras Comhad" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Ní féidir rochtain a fháil ar an gcóras comhad ar chor ar bith" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Úsáideann Seirbhísí Córais" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Is féidir sonraí a iarraidh ó sheirbhísí córais neamh-thairsí" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Úsáideann Seirbhísí Seisiúin" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Is féidir sonraí a iarraidh ó sheirbhísí seisiúin neamh-thairseach" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Gan Rochtain Seirbhíse" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" "Ní féidir rochtain a fháil ar sheirbhísí seisiúin nó córais neamh-thairseach " "ar chor ar bith" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Forbróir Aipeanna Fíoraithe" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "" "Tá sé fíoraithe gurb é forbróir an aip seo an duine a deir siad a bheith" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Cód Dílseánaigh" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Níl an cód foinse poiblí, mar sin ní féidir é a iniúchadh go neamhspleách " "agus d'fhéadfadh sé a bheith neamhshábháilte" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Cód Iniúchta" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Tá an cód foinse poiblí agus is féidir é a iniúchadh go neamhspleách, rud a " "fhágann go bhfuil an aip níos dóchúla a bheith sábháilte" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Bain úsáid as an Seirbhís Córais %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Bain úsáid as an tSeirbhís Seisiúin %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Bain úsáid as an tseirbhís %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Is féidir an tseirbhís neamh-thairseach a fheiceáil" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Is féidir labhairt leis an tseirbhís neamh-thairseach" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Is féidir leis an tseirbhís neamh-thairsí a bheith i seilbh" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Comhtháthú Roghchláir Dhomhanda" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Is féidir a bhiachláir a thaispeáint i mbarra roghchláir domhanda" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Comhtháthú Socruithe KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Is féidir a bhrath nuair a athraíonn socruithe deisce KDE" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Socruithe Domhanda KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Is féidir roghanna deisce KDE a léamh ar nós clónna agus dathanna" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Seirbhís Stórála Rúnda" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Is féidir leis a phasfhocail féin a stóráil agus a aisghabháil ag baint " "úsáide as eochairfháinne an chórais" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Seirbhís Fógraí Deisce" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Is féidir fógraí deisce a sheoladh" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Comhtháthú Tráidire an Chórais" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Is féidir deilbhín a thaispeáint sa tráidire córais" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Comhtháthú KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Is féidir idirghníomhú le gléasanna atá péireáilte trí KDE Connect" #: src/bz-safety-dialog.blp:59 msgid "App ID" msgstr "Aitheantas Aipe" #: src/bz-safety-dialog.blp:69 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:100 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Úsáideann an aip seo leagan atá as dáta den ardán bogearraí (SDK) agus " "d'fhéadfadh fabhtanna nó leochaileachtaí slándála a bheith ann nach ndéanfar " "a shocrú." #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "Sábháilteacht" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "Tá %s sábháilte" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "Níl aon Cheadanna Neamhshábháilte ag %s" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "Is dócha go bhfuil %s sábháilte" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "B’fhéidir go bhfuil %s neamhshábháilte" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "Tá %s neamhshábháilte" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Seat scáileáin" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "An seat scáileán roimhe seo" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "An seat scáileán eile" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Cóipeáil íomhá" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Athshocraigh an Amharc" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Súmáil amach" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Súmáil isteach" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Roithleagán Seat scáileáin" #: src/bz-screenshots-carousel.blp:117 msgid "Open Screenshot Viewer" msgstr "Oscail Amharcóir Seat scáileáin" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Scagairí" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Fíoraithe" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Saor in Aisce/Oscailte" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Neamh-_EOL" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Scag amach aipeanna atá ag deireadh a saoil" #: src/bz-search-filter-popover.blp:57 msgid "Categories" msgstr "Catagóirí" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Cuardaigh Aipeanna, Cluichí, Bogearraí" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Scagairí Cuardaigh" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Glan an Chuardach" #: src/bz-search-page.blp:192 msgid "Categories Unavailable" msgstr "Catagóirí Gan Fáil" #: src/bz-search-page.blp:193 msgid "Search for apps using the search bar above." msgstr "Cuardaigh aipeanna ag baint úsáide as an mbarra cuardaigh thuas." #: src/bz-search-page.blp:219 msgid "Browse Categories" msgstr "Brabhsáil Catagóirí" #: src/bz-search-page.blp:361 msgid "No Applications Found" msgstr "Níor aimsíodh aon fheidhmchláir" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Níor aimsíodh aon torthaí le haghaidh \"%s\" i Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Físeán" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Oifig" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Féilire" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Teachtaireachtaí" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Péint" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Aithriseoir" #: src/bz-share-list.c:55 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Leathanach Flathub" #: src/bz-share-list.c:56 msgctxt "Project URL Type" msgid "Project Website" msgstr "Suíomh Gréasáin an Tionscadail" #: src/bz-share-list.c:57 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Rianaitheoir Fadhbanna" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "FAQ" msgstr "Ceisteanna Coitianta" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Help" msgstr "Cabhair" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Donate" msgstr "Tabhair Síntiús" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "Translate" msgstr "Aistrigh" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Contact" msgstr "Teagmháil" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Source Code" msgstr "Cód Foinse" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Contribute" msgstr "Cuir leis" #: src/bz-share-list.c:153 msgid "Copy Link" msgstr "Cóipeáil Nasc" #: src/bz-share-list.c:164 msgid "Open Link" msgstr "Oscail an Nasc" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Amlíne" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Suiteálacha:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Domhan" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Ó 15/4/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM Suiteálacha Iomlána" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK Suiteálacha Iomlána" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d Suiteálacha Iomlána" #: src/bz-tag-list.c:78 msgid "No Results Found" msgstr "Níor aimsíodh aon torthaí" #: src/bz-tag-list.c:90 #, c-format msgid "Apps Tagged \"%s\"" msgstr "Aipeanna atá tagáilte \"%s\"" #: src/bz-tag-list.c:103 msgid "Search failed" msgstr "Theip ar an gcuardach" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Coinnigh Sonraí Úsáideora" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Ceadaigh socruithe pearsanta & ábhar a athchóiriú" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Scrios na Sonraí Uile" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Scrios sonraí úsáideora go buan chun spás a shábháil" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Suiteáil %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Roghnaigh cén leagan atá le suiteáil. Féadfaidh comhpháirteanna comhroinnte " "breise a shuiteáil" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Féadfaidh sé comhpháirteanna comhroinnte breise a shuiteáil" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Cealaigh" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Suiteáil" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Bain %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Roghnaigh cén leagan atá le baint." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Ní bheidh sé indéanta %s a úsáid tar éis é a dhíshuiteáil." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "Tá “%s” i mbaol ard" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Tá rochtain iomlán ag an aip seo ar do chóras, lena n-áirítear do chuid " "comhad go léir, stair bhrabhsálaí, pasfhocail shábháilte, agus " "tuilleadh. Tá rochtain aici ar an idirlíon freisin, rud a chiallaíonn go " "bhféadfadh sí do shonraí a sheoladh chuig páirtithe seachtracha.\n" "\n" "Ós rud é gur aip dhílseánaigh í, ní féidir iniúchadh a dhéanamh uirthi " "maidir leis an méid a dhéanann sí leis na ceadanna seo." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Úsáideann an aip seo an seanchóras fuinneoige X11, rud a ligeann di gach " "eochairbhuille a thaifeadadh, scáileáin a ghabháil, agus monatóireacht a " "dhéanamh ar fheidhmchláir eile. Tá rochtain aici ar an idirlíon freisin, " "rud a chiallaíonn gur féidir léi do shonraí a sheoladh chuig páirtithe " "seachtracha.\n" "\n" "Ós rud é gur aip dhílseánaigh í, ní féidir iniúchadh a dhéanamh uirthi " "maidir leis an méid a dhéanann sí leis na ceadanna seo." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Suiteáil Ar Aon Slí" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Theip ar an dialóg idirbhirt a lódáil" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Tá na haipeanna go léir suiteáilte cheana féin" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Ceart go leor" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Suiteáil an aip %u?" msgstr[1] "Suiteáil %u Aipeanna?" msgstr[2] "Suiteáil %u Aipeanna?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Suiteálfar an méid seo a leanas. Féadfar comhpháirteanna comhroinnte breise " "a shuiteáil freisin" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Suiteálfar %d breiseán." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Ina theannta sin, suiteálfar breiseáin." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Suiteáil Uile" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Críochnaithe i %.02f soicind" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Breiseán Aipe" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Am rith" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Sa Scuaine" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Déanta" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Cealaithe" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Earráid" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Cealaigh an tIdirbheart" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Taispeáin Eolas Earráide" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Saortha" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Earráid Idirbhirt" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Ar feitheamh" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Nuashonraigh Gach Rud" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "Nuashonrú Ama Rith %u" msgstr[1] "Nuashonruithe Rith-ama %u" msgstr[2] "Nuashonruithe Rith-ama %u" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Bainistigh Sonraí Úsáideora atá Fágtha" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Níor aimsíodh aon sonraí úsáideora" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Sonraí Úsáideora" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Bruscar Sonraí Úsáideora" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Sonraí Úsáideora Bruscair do %s" #: src/bz-window.blp:70 msgid "Refreshing" msgstr "Athnuachan" #: src/bz-window.blp:88 msgid "Curated" msgstr "Coimeádta" #: src/bz-window.blp:100 msgid "Explore" msgstr "Taiscéal" #: src/bz-window.blp:212 msgid "Main Menu" msgstr "Príomh-Roghchlár" #: src/bz-window.blp:223 msgid "You are running a new version of Bazaar!" msgstr "Tá leagan nua de Bazaar á rith agat!" #: src/bz-window.blp:224 msgid "See What's New" msgstr "Féach Cad atá Nua" #: src/bz-window.blp:231 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Tá nasc líonra agat ach tá leagan taisceáilte de Flathub á fheiceáil agat" #: src/bz-window.blp:276 msgid "_Donate to Bazaar" msgstr "_Tabhair Síntiús do Bazaar" #: src/bz-window.blp:283 msgid "_Refresh" msgstr "_Athnuachan" #: src/bz-window.blp:288 msgid "_Preferences" msgstr "_Sainroghanna" #: src/bz-window.blp:293 msgid "_Login With Flathub" msgstr "_Logáil Isteach Le Flathub" #: src/bz-window.blp:299 msgid "_Manage Leftover User Data" msgstr "_Bainistigh Sonraí Úsáideora atá Fágtha" #: src/bz-window.blp:304 msgid "_Keyboard Shortcuts" msgstr "_Aicearraí Méarchláir" #: src/bz-window.blp:309 msgid "_About Bazaar" msgstr "_Maidir le Bazaar" #: src/bz-window.blp:316 msgid "_Quit Bazaar" msgstr "_Scoir den Bazaar" #: src/bz-window.blp:341 msgid "Log Out" msgstr "Logáil Amach" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Theip ar an bhfeidhmchlár a sheoladh" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Ní féidir leat Bazaar a bhaint as Bazaar!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Ní féidir liom é sin a dhéanamh faoi láthair!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Suiteáil" msgstr[1] "Suiteálacha" msgstr[2] "Suiteálacha" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Loingseoireacht" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Oscail an Leathanach Iniúchta" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Oscail Leathanach na Leabharlainne" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Oscail Leathanach Cuardaigh" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Cianrialtáin" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Cianrialtáin Sioncrónaithe" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Ginearálta" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Oscail Roghanna" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Taispeáin Aicearraí" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Dún an Fhuinneog" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Scoir den Bazaar" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Leagann sé béim ar thacaíocht a thabhairt do na forbróirí a chuireann ar " #~ "chumas an deasc Linux a bheith indéanta. Tá cluaisín \"coimeádta\" ar " #~ "fáil i Bazaar ar féidir le dáileoirí é a chumrú chun eispéireas níos " #~ "logánta a cheadú." #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "Nucleus app page" #~ msgstr "Leathanach aip Nucleus" #~ msgid "User Data Size" #~ msgstr "Méid Sonraí Úsáideora" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Synchronizing..." #~ msgstr "Ag sioncrónú..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "Ag fáil %d iontráil..." #~ msgid "Indexing Data..." #~ msgstr "Ag Innéacsú Sonraí..." #~ msgid "Close" #~ msgstr "Dún" #~ msgid "Copy and Close" #~ msgstr "Cóipeáil agus Dún" #~ msgid "Download & Install Application" #~ msgstr "Íoslódáil & Suiteáil Feidhmchlár" #~ msgid "Install Other Version" #~ msgstr "Suiteáil Leagan Eile" #~ msgid "Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród (Cothrománach)" #~ msgid "Lesbian Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Leispiach (Cothrománach)" #~ msgid "Male Homosexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Fir Homaighnéasacha (Cothrománach)" #~ msgid "Transgender Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Trasinscne (Cothrománach)" #~ msgid "Nonbinary Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Neamhdhénártha (Cothrománach)" #~ msgid "Bisexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Déghnéasacha (Cothrománach)" #~ msgid "Asexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Asexual (Cothrománach)" #~ msgid "Pansexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Panghnéasacha (Cothrománach)" #~ msgid "Aromantic Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Cumhra (Cothrománach)" #~ msgid "Genderfluid Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Inscnefluid (Cothrománach)" #~ msgid "Polysexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Ilghnéasacha (Cothrománach)" #~ msgid "Omnisexual Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Uileghnéasacha (Cothrománach)" #~ msgid "Aroace Pride Colors (Horizontal)" #~ msgstr "Dathanna Aroace Pride (Cothrománach)" #~ msgid "Agender Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Agender (Cothrománach)" #~ msgid "Genderqueer Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Inscnequeer (Cothrománach)" #~ msgid "Intersex Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Idirghnéasacha (Cothrománach)" #~ msgid "Demigender Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Demigender (Cothrománach)" #~ msgid "Biromantic Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Biormantach (Cothrománach)" #~ msgid "Disability Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Míchumais (Cothrománach)" #~ msgid "Femboy Pride Colors (Horizontal)" #~ msgstr "Dathanna Bród Femboy (Cothrománach)" #~ msgid "Keep Data" #~ msgstr "Coinnigh Sonraí" #~ msgid "Ongoing" #~ msgstr "Ar siúl" #~ msgid "Finished" #~ msgstr "Críochnaithe" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "Aistríodh %s go dtí seo" #~ msgid "Update Now" #~ msgstr "Nuashonraigh Anois" #~ msgid "Updates Are Available" #~ msgstr "Tá Nuashonruithe ar Fáil" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Tá na feidhmchláir seo a leanas incháilithe le haghaidh nuashonruithe. Ar " #~ "mhaith leat iad a shuiteáil?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Tá %d rith-am agus/nó breiseán incháilithe le haghaidh nuashonruithe. Ar " #~ "mhaith leat iad a shuiteáil?" #~ msgid "Tasks" #~ msgstr "Tascanna" #~ msgid "Stop Active Tasks" #~ msgstr "Stop Tascanna Gníomhacha" #~ msgid "No Tasks Yet" #~ msgstr "Gan aon tascanna fós" #~ msgid "Refreshing Store Content" #~ msgstr "Ábhar an tSiopa á Athnuachan" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgid "No background tasks!" #~ msgstr "Gan aon tascanna cúlra!" #~ msgid "_Synchronize Remotes" #~ msgstr "_Sioncrónaigh Cianrialtáin" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d Nuashonrú Ar Fáil" #~ msgstr[1] "%d Nuashonruithe Ar Fáil" #~ msgstr[2] "%d Nuashonruithe Ar Fáil" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "Beidh an cumas comhaid phacáiste .flatpak áitiúla a iniúchadh agus a " #~ "shuiteáil ag teacht go luath! Idir an dá linn, bain triail as\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "a rith ar an líne ordaithe." #~ msgid "Resume Current Tasks" #~ msgstr "Lean ar aghaidh le Tascanna Reatha" #~ msgid "Pause Current Tasks" #~ msgstr "Cuir Tascanna Reatha ar Sos" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u íoslódálacha" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Bainisteoir Idirbheart a Athrú" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Scoir" bazaar-org-bazaar-b6e9a65/po/hu.po000066400000000000000000001031731522167256300170300ustar00rootroot00000000000000# Hungarian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Benedek Dévényi , 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-31 23:45+0100\n" "PO-Revision-Date: 2025-11-02 20:12+0100\n" "Last-Translator: Benedek Dévényi \n" "Language-Team: Hungarian\n" "Language: hu\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: Gtranslator 49.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 #: src/bz-window.blp:56 msgid "Bazaar" msgstr "Bazár" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Flatpak alkalmazások telepítése, eltávolítása és frissítése" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;PackageManager;Discover;Flatpak;Software;Store;rendszer;csomagkezelő;felfedezés;szoftver;áruház;bolt;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Show Git Forge Star Counts" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "" "Whether to attempt to detect and show \"star counts\" for projects in the " "full view" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:11 msgid "Only Show Free Software" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:12 msgid "Hide proprietary software when searching" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:16 msgid "Show Only Flathub Content" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:17 msgid "Filter search results to only show applications available on Flathub" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:21 msgid "Debounce Search Inputs" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:22 msgid "Add a delay before searching to prevent instant replies while typing" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:40 msgid "Global Progress Bar Theme" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:41 msgid "Describes the look of the global progress bar" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:45 msgid "Saved Window Dimensions" msgstr "" #: data/io.github.kolunmi.Bazaar.gschema.xml:46 msgid "The window dimensions to be used by the next Bazaar window" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Alkalmazások felfedezése és telepítése" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for GNOME with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Egy új alkalmazásbolt GNOME-ra, amelynek fókuszában a Flatpak adattárakból, " "kifejezetten a Flathubról származó alkalmazások és kiegészítők felfedezése " "és telepítése áll." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "Hangsúlyozza a Linuxos asztali rendszereket létrehozó fejlesztők " "támogatását. A Bazár egy „válogatott” füllel is rendelkezik, amelyet a " "disztrók konfigurálhatnak, hogy lokalizáltabb élményt nyújtsanak." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:506 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home view displaying Flathub apps" msgstr "A kezdőképernyő Flathub alkalmazásokkal" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Nucleus app page" msgstr "Alkalmazásoldal a Nucleus alkalmazással" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Searching for Blender" msgstr "Keresés a Blenderre" #: src/bz-addons-dialog.blp:14 src/bz-full-view.blp:527 #: src/bz-installed-page.blp:132 msgid "Manage Add-ons" msgstr "Kiegészítők kezelése" #: src/bz-addons-dialog.c:88 src/bz-installed-page.blp:158 #: src/bz-transaction-view.blp:212 src/bz-window.c:1125 msgid "Remove" msgstr "Eltávolítás" #: src/bz-addons-dialog.c:95 src/bz-full-view.blp:244 #: src/bz-transaction-view.blp:186 src/bz-window.c:1103 msgid "Install" msgstr "Telepítés" #: src/bz-app-size-dialog.c:55 msgid "Of the size of human DNA" msgstr "Az emberi DNS méretéhez képest" #: src/bz-app-size-dialog.c:55 msgid "3 billion base pairs" msgstr "3 milliárd bázispár" #: src/bz-app-size-dialog.c:56 msgid "Of the Linux Kernel" msgstr "A Linux Kernelhez képest" #: src/bz-app-size-dialog.c:56 msgid "linux-6.17.tar.xz" msgstr "linux-6.17.tar.xz" #: src/bz-app-size-dialog.c:57 msgid "Of the Apollo 11 guidance computer" msgstr "Az Apollo 11 irányító számítógépéhez képest" #: src/bz-app-size-dialog.c:57 msgid "Total ROM and RAM" msgstr "A teljes ROM és RAM" #: src/bz-app-size-dialog.c:58 msgid "Of the original Super Mario Bros" msgstr "Az eredeti Super Mario Bros méretéhez képest" #: src/bz-app-size-dialog.c:58 msgid "On the NES" msgstr "A NES-en" #: src/bz-app-size-dialog.c:59 msgid "Of the size of Wikipedia" msgstr "A Wikipédia méretéhez képest" #: src/bz-app-size-dialog.c:59 msgid "Without any media" msgstr "Minden média nélkül" #: src/bz-app-size-dialog.blp:43 msgid "--- MB" msgstr "--- MB" #: src/bz-app-size-dialog.blp:53 msgid "Download Size" msgstr "Letöltési méret" #: src/bz-application.c:401 msgid "" "This functionality is currently disabled. It is recommended you download and " "install Flatseal to manage app permissions." msgstr "" "Ez a funkció jelenleg nem elérhető. Javasoljuk, hogy telepítsd a Flatseal " "alkalmazást az alkalmazások engedélyeinek kezeléséhez." #: src/bz-application.c:465 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:466 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:481 msgid "translator-credits" msgstr "Benedek Dévényi , 2025" #: src/bz-application.c:471 msgctxt "About Dialog Translator Credit" msgid "Ahmed Najmawi" msgstr "Ahmed Najmawi" #: src/bz-application.c:472 msgctxt "About Dialog Translator Credit" msgid "AtomHare" msgstr "AtomHare" #: src/bz-application.c:473 msgctxt "About Dialog Translator Credit" msgid "Azenyr" msgstr "Azenyr" #: src/bz-application.c:474 msgctxt "About Dialog Translator Credit" msgid "Goudarz Jafari" msgstr "Goudarz Jafari" #: src/bz-application.c:475 msgctxt "About Dialog Translator Credit" msgid "Jill Fiore (Lumaeris)" msgstr "Jill Fiore (Lumaeris)" #: src/bz-application.c:476 msgctxt "About Dialog Translator Credit" msgid "João Victor (Leal)" msgstr "João Victor (Leal)" #: src/bz-application.c:477 msgctxt "About Dialog Translator Credit" msgid "KiKaraage" msgstr "KiKaraage" #: src/bz-application.c:478 msgctxt "About Dialog Translator Credit" msgid "Lucosec" msgstr "Lucosec" #: src/bz-application.c:479 msgctxt "About Dialog Translator Credit" msgid "Léane GRASSER" msgstr "Léane GRASSER" #: src/bz-application.c:480 msgctxt "About Dialog Translator Credit" msgid "Marcel Mrówka (Microwave)" msgstr "Marcel Mrówka (Microwave)" #: src/bz-application.c:481 msgctxt "About Dialog Translator Credit" msgid "Peter Dave Hello" msgstr "Peter Dave Hello" #: src/bz-application.c:482 msgctxt "About Dialog Translator Credit" msgid "Pietro F." msgstr "Pietro F." #: src/bz-application.c:483 msgctxt "About Dialog Translator Credit" msgid "Sabri Ünal" msgstr "Sabri Ünal" #: src/bz-application.c:484 msgctxt "About Dialog Translator Credit" msgid "Shihfu Juan" msgstr "Shihfu Juan" #: src/bz-application.c:485 msgctxt "About Dialog Translator Credit" msgid "Shinsei" msgstr "Shinsei" #: src/bz-application.c:486 msgctxt "About Dialog Translator Credit" msgid "Vlastimil Dědek" msgstr "Vlastimil Dědek" #: src/bz-application.c:487 msgctxt "About Dialog Translator Credit" msgid "asen23" msgstr "asen23" #: src/bz-application.c:488 msgctxt "About Dialog Translator Credit" msgid "camegone" msgstr "camegone" #: src/bz-application.c:489 msgctxt "About Dialog Translator Credit" msgid "renner" msgstr "renner" #: src/bz-application.c:490 msgctxt "About Dialog Translator Credit" msgid "robotta" msgstr "robotta" #: src/bz-application.c:1033 msgid "Constructing Flatpak instance..." msgstr "Flatpak példány létrehozása…" #: src/bz-application.c:1050 msgid "Reusing last Flatpak instance..." msgstr "Legutóbbi Flatpak példány újrafelhasználása…" #: src/bz-application.c:1075 msgid "Flathub is not registered on this system" msgstr "A Flathub nincs beállítva ezen a rendszeren" #: src/bz-application.c:1078 msgid "" "Would you like to add Flathub as a remote? If you decline, the Flathub page " "will not be available. You can change this later." msgstr "" "Szeretnéd engedélyezni a Flathub távoli adattárat? Ha ezt nem teszed meg, a " "Flathub fül nem lesz elérhető. Később ezt bármikor megváltoztathatod." #: src/bz-application.c:1083 src/bz-update-dialog.blp:6 msgid "Later" msgstr "Később" #: src/bz-application.c:1084 msgid "Add Flathub" msgstr "Flathub engedélyezése" #: src/bz-application.c:1116 #, c-format msgid "Identifying installed entries..." msgstr "Telepített tételek beazonosítása…" #: src/bz-application.c:1128 #, c-format msgid "Beginning remote entry retrieval while referencing %d blocklist(s)..." msgstr "Távoli tételek lekérésének megkezdése, %d tiltólista hivatkozásával…" #: src/bz-application.c:1276 #, c-format msgid "Receiving Entries" msgstr "Tételek fogadása" #: src/bz-application.c:1277 #, c-format msgid "%'d of %'d" msgstr "%'d/%'d" #: src/bz-application.c:1288 #, c-format msgid "Waiting for background indexing tasks to catch up..." msgstr "Várakozás a háttérben futó indexelési feladatok befejezésére…" #: src/bz-application.c:1329 #, c-format msgid "Completed initialization in %0.2f seconds" msgstr "Az indítás %0.2f másodperc alatt befejeződött" #: src/bz-application.c:1334 src/bz-application.c:1489 msgid "Checking for updates..." msgstr "Frissítések keresése…" #: src/bz-application.c:1373 msgid "Synchronizing..." msgstr "Szinkronizálás…" #: src/bz-browse-widget.blp:11 src/bz-flathub-page.blp:19 #: src/bz-full-view.blp:10 src/bz-installed-page.blp:15 src/bz-window.blp:161 msgid "Empty" msgstr "Üres" #: src/bz-browse-widget.blp:15 msgid "No Curated Applications" msgstr "Nincsenek válogatott alkalmazások" #: src/bz-browse-widget.blp:16 msgid "" "Bazaar was not provided a curated content configuration. Contact your " "operating system's support channels for assistance." msgstr "" "A Bazaar nem talál válogatott tartalomkonfigurációt. Segítségért fordulj az " "operációs rendszer támogatási csatornáihoz." #: src/bz-browse-widget.blp:22 src/bz-flathub-page.blp:30 msgid "Browser" msgstr "Böngésző" #: src/bz-entry-inspector.blp:5 msgid "Entry Inspector" msgstr "" #: src/bz-entry-inspector.blp:76 msgid "Serialize" msgstr "" #: src/bz-entry-inspector.blp:80 msgid "Convert to JSON" msgstr "" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Hiba történt" #: src/bz-error.c:89 msgid "Close" msgstr "Bezárás" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Másolás és bezárás" #: src/bz-featured-tile.blp:89 msgid "App of the Day" msgstr "A nap alkalmazása" #: src/bz-flathub-category.c:325 msgid "Audio & Video" msgstr "Hang és videó" #: src/bz-flathub-category.c:327 msgid "Developer Tools" msgstr "Fejlesztői eszközök" #: src/bz-flathub-category.c:329 msgid "Education" msgstr "Oktatás" #: src/bz-flathub-category.c:331 msgid "Gaming" msgstr "Játék" #: src/bz-flathub-category.c:333 msgid "Graphics & Photography" msgstr "Grafika és fényképezés" #: src/bz-flathub-category.c:335 msgid "Networking" msgstr "Hálózat" #: src/bz-flathub-category.c:337 msgid "Productivity" msgstr "Produktivitás" #: src/bz-flathub-category.c:339 msgid "Science" msgstr "Tudomány" #: src/bz-flathub-category.c:341 msgid "System" msgstr "Rendszer" #: src/bz-flathub-category.c:343 msgid "Utilities" msgstr "Segédprogramok" #: src/bz-flathub-category-section.c:137 #, c-format msgid "%d applications" msgstr "%d alkalmazás" #: src/bz-flathub-category-section.c:336 #, c-format msgid "More %s" msgstr "Még több %s" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "A Flathub nincs engedélyezve" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "A Flathub adattár nem található egyik Flatpak telepítéseden sem" #: src/bz-flathub-page.blp:80 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.c:168 msgid "Trending" msgstr "Felkapott" #: src/bz-flathub-page.blp:85 src/bz-flathub-page.blp:235 #: src/bz-flathub-page.c:198 msgid "Popular" msgstr "Népszerű" #: src/bz-flathub-page.blp:90 msgid "New" msgstr "Új" #: src/bz-flathub-page.blp:95 msgid "Updated" msgstr "Frissített" #: src/bz-flathub-page.blp:141 msgid "More Trending" msgstr "Még több felkapott" #: src/bz-flathub-page.blp:151 src/bz-flathub-page.c:178 msgid "Recently Updated" msgstr "Nemrég frissített" #: src/bz-flathub-page.blp:183 msgid "More Updated" msgstr "Még több frissített" #: src/bz-flathub-page.blp:193 src/bz-flathub-page.c:188 msgid "Recently Added" msgstr "Nemrég hozzáadott" #: src/bz-flathub-page.blp:225 msgid "More New" msgstr "Még több új" #: src/bz-flathub-page.blp:267 msgid "More Popular" msgstr "Még több népszerű" #: src/bz-flathub-page.blp:356 msgid "On the go" msgstr "Útközben" #: src/bz-flathub-page.blp:368 msgid "Apps for your Linux phones and tablets" msgstr "Alkalmazások Linux telefonokra és táblagépekre" #: src/bz-flathub-page.blp:379 src/bz-flathub-page.blp:414 msgid "More Mobile apps" msgstr "Még több mobilapp" #: src/bz-flathub-page.c:208 msgid "Mobile Apps" msgstr "Mobilappok" #: src/bz-flatpak-entry.c:552 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub oldal" #: src/bz-flatpak-entry.c:573 msgctxt "Project URL Type" msgid "Project Website" msgstr "Projekt honlapja" #: src/bz-flatpak-entry.c:577 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Hiba bejelentése" #: src/bz-flatpak-entry.c:581 msgctxt "Project URL Type" msgid "FAQ" msgstr "GYIK" #: src/bz-flatpak-entry.c:585 msgctxt "Project URL Type" msgid "Help" msgstr "Segítség" #: src/bz-flatpak-entry.c:589 msgctxt "Project URL Type" msgid "Donate" msgstr "Adományozás" #: src/bz-flatpak-entry.c:595 msgctxt "Project URL Type" msgid "Translate" msgstr "Segítség a fordításban" #: src/bz-flatpak-entry.c:599 msgctxt "Project URL Type" msgid "Contact" msgstr "Kapcsolat" #: src/bz-flatpak-entry.c:603 msgctxt "Project URL Type" msgid "Source Code" msgstr "Forráskód" #: src/bz-flatpak-entry.c:609 msgctxt "Project URL Type" msgid "Contribute" msgstr "Hozzájárulás" #: src/bz-full-view.blp:14 msgid "No Results" msgstr "Nincs találat" #: src/bz-full-view.blp:15 msgid "Try a different search query" msgstr "Próbálkozz más keresőkifejezéssel" #: src/bz-full-view.blp:21 src/bz-window.blp:171 msgid "Content" msgstr "Tartalom" #: src/bz-full-view.blp:151 msgid "Verified by the original developers" msgstr "Az eredeti fejlesztők által hitelesítve" #: src/bz-full-view.blp:178 msgid "Support" msgstr "Támogatás" #: src/bz-full-view.blp:198 msgid "Repository Star Count" msgstr "Adattár csillagszámlálója" #: src/bz-full-view.blp:228 msgid "Open" msgstr "Megnyitás" #: src/bz-full-view.blp:241 msgid "Download & Install Application" msgstr "Alkalmazás letöltése és telepítése" #: src/bz-full-view.blp:256 msgid "Uninstall Application" msgstr "Alkalmazás eltávolítása" #: src/bz-full-view.blp:271 msgid "Install Other Version" msgstr "Másik verzió telepítése" #: src/bz-full-view.blp:295 msgid "Download" msgstr "Letöltés" #: src/bz-full-view.blp:411 msgid "Downloads/mo" msgstr "Letöltés/hó" #: src/bz-full-view.c:261 msgid "---" msgstr "---" #. Translators: M is the suffix for millions, \xC2\xA0 is a non-breaking space #: src/bz-full-view.c:265 #, c-format msgid "%.2f M" msgstr "%.2f m" #. Translators: K is the suffix for thousands, \xC2\xA0 is a non-breaking space #: src/bz-full-view.c:268 #, c-format msgid "%.2f K" msgstr "%.2f e" #: src/bz-full-view.c:277 #, c-format msgid "%d downloads in the last 30 days" msgstr "%d letöltés az elmúlt 30 napban" #: src/bz-full-view.c:298 #, c-format msgid "Download size of %s" msgstr "Letöltés mérete: %s" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-full-view.c:308 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-full-view.c:316 msgid "All Ages" msgstr "Minden életkor" #: src/bz-full-view.c:318 msgid "Age Rating" msgstr "Korhatár" #: src/bz-full-view.c:326 msgid "Suitable for all ages" msgstr "Minden korosztály számára alkalmas" #: src/bz-full-view.c:328 #, c-format msgid "Suitable for ages %d and up" msgstr "%d éves kortól ajánlott" #: src/bz-full-view.c:348 msgid "Unknown" msgstr "Ismeretlen" #: src/bz-full-view.c:351 msgid "Proprietary Software" msgstr "Zárt forráskódú szoftver" #: src/bz-full-view.c:355 #, c-format msgid "Free software licensed under %s" msgstr "Szabad szoftver a(z) %s licenc alatt" #: src/bz-full-view.c:363 msgid "Free" msgstr "Szabad" #: src/bz-full-view.c:363 msgid "Proprietary" msgstr "Védett" #: src/bz-full-view.c:383 msgid "Adaptive" msgstr "Alkalmazkodó" #: src/bz-full-view.c:383 msgid "Desktop Only" msgstr "Csak asztali" #: src/bz-full-view.c:389 msgid "Works on desktop, tablets, and phones" msgstr "Működik asztali számítógépen, táblagépen és mobiltelefonon" #: src/bz-full-view.c:390 msgid "May not work on mobile devices" msgstr "Lehet, hogy nem működik mobileszközökön" #: src/bz-full-view.c:401 msgid "No URL" msgstr "Nincs URL" #: src/bz-full-view.c:419 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Ez az alkalmazás Szabad és Nyílt Forráskódú licenccel rendelkezik, ami azt " "jelenti, hogy által a forráskód biztonsági szempontból bárki által " "ellenőrizhető." #: src/bz-full-view.c:420 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Ez az alkalmazás kereskedelmi licenccel rendelkezik, ami azt jelenti, hogy a " "forráskód magántulajdonban van, és független harmadik fél nem ellenőrizheti." #: src/bz-full-view.c:676 msgid "Show Less" msgstr "Kevesebb mutatása" #: src/bz-full-view.c:676 msgid "Show More" msgstr "Több mutatása" #: src/bz-hardware-support-dialog.c:69 msgid "Keyboard support" msgstr "Billentyűzet támogatás" #: src/bz-hardware-support-dialog.c:71 msgid "Requires keyboards" msgstr "Billentyűzet szükséges" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends keyboards" msgstr "Billentyűzet ajánlott" #: src/bz-hardware-support-dialog.c:73 msgid "Supports keyboards" msgstr "Billentyűzet használható" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for keyboards" msgstr "Billentyűzet támogatás ismeretlen" #: src/bz-hardware-support-dialog.c:76 msgid "Mouse support" msgstr "Egér támogatás" #: src/bz-hardware-support-dialog.c:78 msgid "Requires mice or pointing devices" msgstr "Egér vagy mutatóeszköz szükséges" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends mice or pointing devices" msgstr "Egér vagy mutatóeszköz ajánlott" #: src/bz-hardware-support-dialog.c:80 msgid "Supports mice or pointing devices" msgstr "Egér vagy mutatóeszköz használható" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for mice or pointing devices" msgstr "Egér vagy mutatóeszköz támogatás ismeretlen" #: src/bz-hardware-support-dialog.c:83 msgid "Touchscreen support" msgstr "Érintőképernyő támogatás" #: src/bz-hardware-support-dialog.c:85 msgid "Requires touchscreens" msgstr "Érintőképernyő szükséges" #: src/bz-hardware-support-dialog.c:86 msgid "Recommends touchscreens" msgstr "Érintőképernyő ajánlott" #: src/bz-hardware-support-dialog.c:87 msgid "Supports touchscreens" msgstr "Érintőképernyő használható" #: src/bz-hardware-support-dialog.c:88 msgid "Unknown support for touchscreens" msgstr "Érintőképernyő támogatás ismeretlen" #: src/bz-hardware-support-dialog.c:192 msgid "Mobile support" msgstr "Mobil támogatás" #: src/bz-hardware-support-dialog.c:193 msgid "Works on mobile devices" msgstr "Működik mobileszközökön" #: src/bz-hardware-support-dialog.c:193 msgid "May not work well on mobile devices" msgstr "Lehet, hogy nem működik jól mobileszközökön" #: src/bz-hardware-support-dialog.c:198 msgid "Desktop support" msgstr "Asztali támogatás" #: src/bz-hardware-support-dialog.c:199 msgid "Works well on large screens" msgstr "Jól működik nagy kijelzőkön" #: src/bz-hardware-support-dialog.c:233 #, c-format msgid "%s works best on specific hardware" msgstr "%s csak bizonyos eszközökön működik jól" #: src/bz-hardware-support-dialog.c:240 #, c-format msgid "%s works on most devices" msgstr "%s a legtöbb eszközön működik" #: src/bz-hardware-support-dialog.blp:6 src/bz-hardware-support-dialog.blp:47 msgid "Hardware Support" msgstr "Hardver támogatás" #: src/bz-inspector.blp:5 msgid "Bazaar Inspector" msgstr "" #: src/bz-inspector.blp:22 msgid "Active Blocklists" msgstr "" #: src/bz-inspector.blp:44 msgid "Active Curated-Configs" msgstr "" #: src/bz-inspector.blp:66 msgid "All Entry Groups" msgstr "" #: src/bz-inspector.blp:69 msgid "Filter..." msgstr "" #: src/bz-inspector.blp:110 msgid "Decache and Inspect" msgstr "" #: src/bz-installed-page.blp:19 msgid "No Flatpaks Installed" msgstr "Nincs telepített Flatpak" #: src/bz-installed-page.blp:25 src/bz-window.blp:305 src/bz-window.blp:399 msgid "Installed" msgstr "Telepítve" #: src/bz-installed-page.blp:108 msgid "Support this application" msgstr "Alkalmazás támogatása" #: src/bz-installed-page.blp:185 msgid "More actions" msgstr "További lehetőségek" #: src/bz-installed-page.blp:204 msgid "Run this application" msgstr "Alkalmazás futtatása" #: src/bz-installed-page.blp:216 msgid "Run" msgstr "Futtatás" #: src/bz-installed-page.blp:228 src/bz-installed-page.blp:239 msgid "View Store Page" msgstr "Alkalmazásoldal megnyitása" #: src/bz-installed-page.c:649 msgid "Choose an Installation" msgstr "Telepítés kiválasztása" #: src/bz-installed-page.c:652 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with? " msgstr "" "Ennek az alkalmazásnak több verziója is telepítve van. Melyikkel szeretnéd " "folytatni?" #: src/bz-installed-page.c:656 src/bz-window.c:1102 src/bz-window.c:1124 msgid "Cancel" msgstr "Mégse" #: src/bz-license-dialog.c:115 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may not be able to contribute to this app." msgstr "" "Ez az alkalmazás zárt fejlesztésű, ezért csak a fejlesztői ismerik a belső " "működését. Lehetnek olyan biztonsági hiányosságai, amelyek nehezen " "észlelhetők, illetve a működése észrevétlenül megváltozhat.\n" "\n" "Nem tudsz hozzájárulni az alkalmazás fejlesztéséhez." #: src/bz-license-dialog.c:124 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Ezt az alkalmazást egy nemzetközi közösség nyíltan fejleszti.\n" "\n" "Te is csatlakozhatsz és segíthetsz még jobbá tenni." #: src/bz-license-dialog.c:135 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Ezt az alkalmazást egy nemzetközi közösség nyíltan fejleszti, és a(z) %s teszi elérhetővé.\n" "\n" "Te is csatlakozhatsz és segíthetsz még jobbá tenni." #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Beállítások" #: src/bz-preferences-dialog.blp:23 src/bz-window.blp:48 src/bz-window.blp:337 msgid "Search" msgstr "Keresés" #: src/bz-preferences-dialog.blp:26 msgid "Free Software Only" msgstr "Csak szabad szoftver" #: src/bz-preferences-dialog.blp:27 msgid "Hide proprietary applications from search results" msgstr "Zárt forráskódú alkalmazások elrejtése a keresési eredményekből" #: src/bz-preferences-dialog.blp:31 msgid "Flathub Results Only" msgstr "Csak Flathub eredmények" #: src/bz-preferences-dialog.blp:32 msgid "Limit search results to applications only available on Flathub" msgstr "Keresés korlátozása a Flathubon elérhető alkalmazásokra" #: src/bz-preferences-dialog.blp:36 msgid "Delay Search Results" msgstr "Keresés késleltetése" #: src/bz-preferences-dialog.blp:37 msgid "Improve results performance by debouncing search terms" msgstr "" "Keresés teljesítményének javítása a keresőkifejezések pergésmentesítésével" #: src/bz-preferences-dialog.blp:42 msgid "Application Details" msgstr "Alkalmazás részletei" #: src/bz-preferences-dialog.blp:45 msgid "Display Star Count" msgstr "Csillagszámláló mutatása" #: src/bz-preferences-dialog.blp:46 msgid "Show the star count of an application's source code repository" msgstr "Az alkalmazás forráskód-adattára csillagszámának megjelenítése" #: src/bz-preferences-dialog.blp:71 msgid "Progress Bar" msgstr "Folyamatjelző" #: src/bz-preferences-dialog.blp:72 msgid "Choose a theme for the progress bar!" msgstr "Válassz témát a folyamatjelző sávoknak" #: src/bz-preferences-dialog.blp:107 msgid "" "Bazaar can fetch and display the star count from an application's source " "code repository on a remote Git forge. \n" " For projects on GitHub, rate limits may cause them not to appear." msgstr "" "A Bazár letölti és megjeleníti a csillagok számát egy alkalmazás forráskód-" "adattárából a távoli Git forge-on. \n" " A GitHubon található projektek esetében a használati korlát miatt " "előfordulhat, hogy nem mindig sikerül betölteni." #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Kiemelőszín" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Pride színek" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Lezbikus színek" #: src/bz-preferences-dialog.c:35 msgid "Transgender Pride Colors" msgstr "Transzgender színek" #: src/bz-preferences-dialog.c:36 msgid "Nonbinary Pride Colors" msgstr "Nonbináris színek" #: src/bz-preferences-dialog.c:37 msgid "Bisexual Pride Colors" msgstr "Biszexuális színek" #: src/bz-preferences-dialog.c:38 msgid "Asexual Pride Colors" msgstr "Aszexuális színek" #: src/bz-preferences-dialog.c:39 msgid "Pansexual Pride Colors" msgstr "Pánszexuális színek" #: src/bz-preferences-dialog.c:40 msgid "Aromantic Pride Colors" msgstr "Aromantikus színek" #: src/bz-preferences-dialog.c:41 msgid "Genderfluid Pride Colors" msgstr "Genderfluid színek" #: src/bz-preferences-dialog.c:42 msgid "Polysexual Pride Colors" msgstr "Poliszexuális színek" #: src/bz-preferences-dialog.c:43 msgid "Omnisexual Pride Colors" msgstr "Omniszexuális színek" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:26 msgid "Version History" msgstr "Verziótörténet" #: src/bz-releases-list.c:128 #, c-format msgid "Version %s" msgstr "%s verzió" #: src/bz-releases-list.c:153 msgid "No details for this release" msgstr "Nincsenek részletek ehhez a kiadáshoz" #: src/bz-search-widget.blp:69 msgid "Search Apps" msgstr "Alkalmazások keresése" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "Másolva!" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Hivatkozás másolása" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Hivatkozás megnyitása" #: src/bz-stats-dialog.blp:26 msgid "Timeline" msgstr "Idővonal" #: src/bz-stats-dialog.blp:31 msgid "Installs:" msgstr "Telepítés:" #: src/bz-stats-dialog.blp:37 msgid "World" msgstr "Térkép" #: src/bz-transaction-manager.c:1140 #, c-format msgid "Finished in %.02f seconds" msgstr "Befejezve %.02f másodperc alatt" #: src/bz-transaction-view.blp:94 msgid "App Add-on" msgstr "Alkalmazás kiegészítő" #: src/bz-transaction-view.blp:119 msgid "Runtime" msgstr "Futtatókörnyezet" #: src/bz-transaction-view.blp:145 src/bz-transaction-view.blp:171 msgid "Install Size" msgstr "Telepített méret" #: src/bz-transaction-view.blp:199 src/bz-window.blp:350 msgid "Update" msgstr "Frissítés" #: src/bz-transaction-view.c:139 #, c-format msgid "Transferred %s so far" msgstr "Eddig átvíve: %s" #: src/bz-transaction.c:336 msgid "Pending" msgstr "Függőben" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "Telepítés most" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "Frissítések elérhetők" #: src/bz-update-dialog.blp:11 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "" "A következő alkalmazások frissítésre várnak. Szeretnéd telepíteni őket?" #: src/bz-update-dialog.c:134 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "%d futtatókörnyezet és/vagy kiegészítőhöz érhető el frissítés. Szeretnéd " "telepíteni ezeket?" #: src/bz-update-dialog.c:142 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "További %d futtatókörnyezet és/vagy kiegészítő frissítve lesz." #: src/bz-window.blp:63 msgid "Go Home" msgstr "Vissza a kezdőoldalra" #: src/bz-window.blp:86 msgid "Tasks" msgstr "Feladatok" #: src/bz-window.blp:105 src/bz-window.blp:418 msgid "Toggle transaction sidebar" msgstr "Tranzakciók megjelenítése/elrejtése" #: src/bz-window.blp:141 msgid "Stop Active Tasks" msgstr "Futó feladatok leállítása" #: src/bz-window.blp:149 msgid "Clear History" msgstr "Előzmények törlése" #: src/bz-window.blp:165 msgid "No Tasks Yet" msgstr "Nincsenek feladatok" #: src/bz-window.blp:219 src/bz-window.blp:223 msgid "Offline" msgstr "Offline" #: src/bz-window.blp:229 msgid "Loading" msgstr "Betöltés" #: src/bz-window.blp:270 msgid "Browse" msgstr "Böngészés" #: src/bz-window.blp:280 msgid "App View" msgstr "Alkalmazás nézet" #: src/bz-window.blp:295 src/bz-window.blp:392 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:325 msgid "Go Back" msgstr "Vissza" #: src/bz-window.blp:381 msgid "View curated applications" msgstr "Válogatott alkalmazások megtekintése" #: src/bz-window.blp:385 msgid "Curated" msgstr "Válogatott" #: src/bz-window.blp:389 msgid "View the latest on Flathub" msgstr "Legújabb Flathub alkalmazások megtekintése" #: src/bz-window.blp:396 msgid "View installed applications" msgstr "Telepített alkalmazások megtekintése" #: src/bz-window.blp:441 msgid "Main Menu" msgstr "Főmenü" #: src/bz-window.blp:486 msgid "_Donate to Bazaar ❤️" msgstr "A Bazár _támogatása ❤️" #: src/bz-window.blp:491 msgid "_Refresh Content" msgstr "Ú_jratöltés" #: src/bz-window.blp:498 msgid "_Preferences" msgstr "_Beállítások" #: src/bz-window.blp:503 msgid "_Keyboard Shortcuts" msgstr "_Gyorsbillentyűk" #: src/bz-window.blp:508 msgid "_About Bazaar" msgstr "A Bazár _névjegye" #: src/bz-window.blp:515 msgid "_Quit Bazaar" msgstr "_Kilépés" #: src/bz-window.c:827 msgid "" "The ability to inspect and install local .flatpak bundle files is coming " "soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "Hamarosan elérhető lesz a helyi .flatpak csomagfájlok ellenőrzésének és " "telepítésének lehetősége! Addig is próbáld meg futtatni a\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "parancsot a parancssorban." #: src/bz-window.c:967 msgid "Can't do that right now!" msgstr "Ezt most nem lehetséges!" #: src/bz-window.c:1096 #, c-format msgid "Install %s?" msgstr "%s telepítése" #: src/bz-window.c:1099 msgid "May install additional shared components" msgstr "További megosztott összetevők telepíthetők" #: src/bz-window.c:1118 #, c-format msgid "Remove %s?" msgstr "Remove %s?" #: src/bz-window.c:1121 msgid "Settings & user data will be kept" msgstr "A beállítások és a felhasználói adatok megmaradnak" #: src/bz-window.c:1289 msgid "Resume Current Tasks" msgstr "Feladatok folytatása" #: src/bz-window.c:1295 msgid "Pause Current Tasks" msgstr "Feladatok szüneteltetése" #: src/bz-world-map.c:523 #, c-format msgid "%s: %'u downloads" msgstr "%s: %'u downloads" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Általános" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Keresőablak megnyitása" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Beállítások megnyitása" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "Újratöltés" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Tranzakciókezelő megjelenítése/elrejtése" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Gyorsbillentyűk" #: src/gtk/shortcuts-dialog.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "Kilépés" bazaar-org-bazaar-b6e9a65/po/id.po000066400000000000000000002741701522167256300170160ustar00rootroot00000000000000# Indonesian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025 asen23 # KiKaraage , 2025-2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-03-24 10:16+0700\n" "PO-Revision-Date: 2026-03-30 02:31+0700\n" "Last-Translator: KiKaraage \n" "Language-Team: Indonesian\n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.c:377 src/bz-window.c:378 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Tambah, hapus atau perbarui aplikasi Flatpak pada komputer ini" # Added "Aplikasi" and "Pusat Aplikasi" (App Center) to search queries #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistem;PackageManager;Discover;Flatpak;Aplikasi;Toko;PerangkatLunak;PusatAplikasi;ManajerPaket;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Jendela Baru" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Temukan dan pasang aplikasi" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Toko aplikasi Linux yang cepat dan modern, berfokus pada kemudahan menemukan " "serta memasang aplikasi dan modul tambahan Flatpak, terutama dari Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Pasang beberapa aplikasi sekaligus dan lanjut menjelajah" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Dapat melihat izin aplikasi secara mudah" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Masuk dengan Flathub untuk lihat dan kelola aplikasi favoritmu" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Cari aplikasi langsung dari bilah pencarian GNOME" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Tampilan muka dengan daftar aplikasi dari Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Tampilan halaman detail aplikasi" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Halaman pustaka aplikasi" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Tampilan pencarian aplikasi" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Tampilan kategori aplikasi" #: src/bz-addons-dialog.blp:16 src/bz-full-view.blp:627 #: src/bz-installed-tile.blp:101 msgid "Manage Add-Ons" msgstr "Kelola Modul Tambahan" #: src/bz-addons-dialog.c:94 src/bz-install-controls.blp:137 #: src/bz-installed-tile.blp:114 msgid "Remove" msgstr "Hapus" #: src/bz-addons-dialog.c:99 src/bz-favorites-tile.c:159 msgid "Install" msgstr "Pasang" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-full-view.c:333 src/bz-full-view.c:340 msgid "Age Rating" msgstr "Peringkat Usia" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Kekerasan (Kartun)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Tidak ada info mengenai penggambaran kekerasan berbentuk kartun" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Kekerasan (Fantasi)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Tidak ada info mengenai penggambaran kekerasan berbentuk fantasi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Kekerasan (Nyata)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Tidak ada info mengenai penggambaran kekerasan realistik" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Kekerasan Menggambarkan Pertumpahan Darah" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Tidak ada info mengenai penggambaran pertumpahan darah" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Kekerasan Seksual" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Tidak ada info mengenai penggambaran kekerasan seksual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Minuman Keras" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "" "Tidak ada info mengenai penggambaran/penyebutan terkait minuman beralkohol" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Narkotika" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "" "Tidak ada info mengenai referensi terkait narkotika dan obat-obatan terlarang" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Rokok" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Tidak ada info mengenai referensi terkait rokok " #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Ketelanjangan" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Tidak ada info mengenai segala bentuk ketelanjangan" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Tema Seksual" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Tidak ada info mengenai segala bentuk referensi atau penggambaran seksual " #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Kata-Kata Kasar" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Tidak ada info mengenai segala penggunaan kata-kata kasar" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Humor Tidak Pantas" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Tidak ada info mengenai penggunaan humor yang tidak pantas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Diskriminasi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Tidak ada info mengenai segala penggunaan bahasa yang diskriminatif" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Iklan" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Tidak ada info mengenai semua bentuk iklan" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Judi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "" "Tidak ada info mengenai segala penyebutan dan penggambaran terkait judi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Jual Beli" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Tidak ada info mengenai kemampuan transaksi atau pembelian" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Obrolan Antar Pengguna" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Tidak ada info mengenai cara melakukan obrolan dengan pengguna lain" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Panggilan Antar Pengguna" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Tidak ada info mengenai cara melakukan panggilan suara dengan pengguna lain" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Rincian Kontak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Tidak ada info terkait tindakan berbagi nama pengguna di media sosial atau " "alamat email" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Informasi Identifikasi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Tidak ada info terkait tindakan membagikan info pengguna dengan pihak ketiga " #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Berbagi Lokasi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Tidak ada info mengenai tindakan berbagi lokasi dengan pengguna lain" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostitusi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Tidak ada info mengenai penyebutan referensi terkait prostitusi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Zina" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Tidak ada info mengenai penyebutan referensi terkait perzinaan" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Karakter yang Diseksualisasi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Tidak ada info mengenai karakter yang diseksualisasikan" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Penistaan" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Tidak ada info mengenai penyebutan referensi terkait penistaan" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Jasad Manusia" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Tidak ada info mengenai terlihatnya sisa-sisa jasad manusia" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Perbudakan" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Tidak ada info mengenai penyebutan referensi terkait perbudakan" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Tidak memuat referensi terkait obat-obatan terlarang" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Tidak memuat penggunaan kata-kata kasar dan umpatan" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Tidak memuat iklan atau transaksi keuangan" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Tidak memuat konten seksual" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Tidak memuat kemampuan obrolan tanpa moderasi" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Tidak memuat konten kekerasan" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Obat Terlarang" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Kata-Kata Kasar" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Uang" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Sosial" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Kekerasan" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-full-view.c:323 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Semua" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "Peringkat usia untuk %s tidak diketahui" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s cocok untuk semua usia" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s diperbolehkan untuk usia balita" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s diperbolehkan untuk usia anak-anak" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s diperbolehkan untuk usia remaja" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s diperbolehkan untuk usia dewasa" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s diperbolehkan untuk usia %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-all-apps-page.blp:13 src/bz-apps-page.blp:14 src/bz-full-view.blp:29 #: src/bz-user-data-page.blp:15 src/bz-window.blp:239 msgid "Main Menu" msgstr "Menu Utama" #: src/bz-all-apps-page.blp:18 src/bz-apps-page.blp:18 #: src/bz-user-data-page.blp:19 src/bz-window.blp:328 msgid "_Donate to Bazaar ❤️" msgstr "_Donasi ke Bazaar ❤️" #: src/bz-all-apps-page.blp:25 src/bz-apps-page.blp:25 #: src/bz-user-data-page.blp:26 src/bz-window.blp:335 msgid "_Refresh" msgstr "_Muat Ulang" #: src/bz-all-apps-page.blp:30 src/bz-apps-page.blp:30 #: src/bz-user-data-page.blp:31 src/bz-window.blp:340 msgid "_Preferences" msgstr "_Pengaturan" #: src/bz-all-apps-page.blp:35 src/bz-apps-page.blp:35 #: src/bz-user-data-page.blp:36 src/bz-window.blp:345 msgid "_Login With Flathub" msgstr "_Masuk Dengan Flathub" #: src/bz-all-apps-page.blp:41 src/bz-apps-page.blp:41 #: src/bz-user-data-page.blp:42 src/bz-window.blp:351 msgid "_Manage Leftover User Data" msgstr "_Kelola Sisa Data Pengguna" #: src/bz-all-apps-page.blp:46 src/bz-apps-page.blp:46 #: src/bz-user-data-page.blp:47 src/bz-window.blp:356 msgid "_Keyboard Shortcuts" msgstr "_Pintasan Papan Tik" #: src/bz-all-apps-page.blp:51 src/bz-apps-page.blp:51 #: src/bz-user-data-page.blp:52 src/bz-window.blp:361 msgid "_About Bazaar" msgstr "_Tentang Bazaar" #: src/bz-all-apps-page.blp:58 src/bz-apps-page.blp:58 #: src/bz-user-data-page.blp:59 src/bz-window.blp:368 msgid "_Quit Bazaar" msgstr "_Tutup Bazaar" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Folder sistem %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Subfolder beranda %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Folder sistem utama" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Konfigurasi sistem utama dari /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Subfolder desktop %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Folder desktop" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Subfolder dokumen %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Folder dokumen" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Subfolder musik %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Folder musik" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Subfolder gambar %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Folder gambar" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Subfolder Berkas Publik %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Folder Berkas Publik" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Subfolder video %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Folder video" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Subfolder templat %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Folder templat" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Subfolder cache pengguna %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Folder cache pengguna" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Subfolder konfigurasi pengguna %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Folder konfigurasi pengguna" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Subfolder data pengguna %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Folder data pengguna" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Subfolder tempokerja pengguna %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Folder tempokerja pengguna" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Akses sistem file ke %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Jalur sistem file tidak diketahui" #: src/bz-app-size-dialog.blp:29 src/bz-app-size-dialog.blp:55 msgid "Download Size" msgstr "Ukuran Unduh" #: src/bz-app-size-dialog.blp:56 msgid "Amount to download from the internet" msgstr "Ukuran yang diunduh dari internet" #: src/bz-app-size-dialog.blp:76 msgid "Installed Size" msgstr "Ukuran Terpasang" #: src/bz-app-size-dialog.blp:77 msgid "Size on Disk" msgstr "Ukuran Tersimpan" #: src/bz-app-size-dialog.blp:125 msgid "Open user data folder" msgstr "Buka folder data pengguna" #: src/bz-app-size-dialog.blp:135 msgid "User Data Size" msgstr "Ukuran Data Pengguna" #: src/bz-app-size-dialog.blp:136 msgid "Caches, settings, and other app data" msgstr "Cache, konfigurasi, dan data aplikasi lainnya" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Ukuran Tempokerja Terpasang" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Ukuran Unduh Tempokerja" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:104 src/bz-rich-app-tile.c:304 msgid "Verified" msgstr "Terverifikasi" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-full-view.c:282 src/bz-releases-list.c:205 msgid "Installed" msgstr "Terpasang" #: src/bz-apps-page.blp:142 msgid "Show All" msgstr "Tunjukkan Semua" #: src/bz-apps-page.c:229 #, c-format msgid "All \"%s\"" msgstr "Semua \"%s\"" #: src/bz-apps-page.c:478 src/bz-tag-list.c:91 #, c-format msgid "%d Applications" msgstr "%d Aplikasi" #: src/bz-application.c:695 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:696 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #: src/bz-application.c:716 msgid "The Bazaar Contributors" msgstr "Kontributor Bazaar" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:719 msgid "translator-credits" msgstr "KiKaraage , 2025" #: src/bz-application.c:729 msgid "Special Thanks" msgstr "Terima Kasih Khusus" #: src/bz-application.c:787 msgid "Logged Out Successfully!" msgstr "Akun Berhasil Dikeluarkan!" #: src/bz-application.c:910 msgid "Performing setup…" msgstr "Melakukan pengaturan..." #: src/bz-application.c:994 msgid "Set Up System Flathub?" msgstr "Atur Flathub pada Sistem?" #: src/bz-application.c:997 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub belum diatur sebagai sumber Flatpak pada sistem ini. Bazaar " "membutuhkan Flathub terkonfigurasi sebagai sumber Flatpak sistem untuk " "mencari dan memasang aplikasi.\n" "\n" "Anda masih dapat menggunakan Bazaar untuk mencari dan menghapus aplikasi " "terpasang." #: src/bz-application.c:1004 msgid "Set Up Flathub?" msgstr "Atur Flathub?" #: src/bz-application.c:1007 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub belum diatur pada sistem ini. Anda tidak dapat mencari dan memasang " "aplikasi lewat Bazaar jika Flathub belum tersedia.\n" "\n" "Anda masih dapat menggunakan Bazaar untuk mencari dan menghapus aplikasi " "terpasang." #: src/bz-application.c:1013 msgid "Later" msgstr "Nanti" #: src/bz-application.c:1014 msgid "Set Up Flathub" msgstr "Atur Flathub" #: src/bz-application.c:1303 msgid "A backend error occurred" msgstr "Terjadi kegagalan latar belakang" #: src/bz-application.c:1499 src/bz-application.c:3357 src/bz-window.blp:70 msgid "Refreshing…" msgstr "Memuat ulang..." #: src/bz-application.c:1651 src/bz-application.c:3355 #, c-format msgid "Loading %d apps…" msgstr "%d aplikasi dimuat..." #: src/bz-application.c:1654 msgid "Checking for updates…" msgstr "Memeriksa pembaruan..." #: src/bz-application.c:1717 msgid "Failed to open .flatpakref" msgstr "Gagal membuka .flatpakref" #: src/bz-application.c:1773 msgid "An initialization error occurred" msgstr "Terjadi kegagalan initialisasi" #: src/bz-application.c:2123 msgid "Failed to check for updates" msgstr "Gagal memeriksa pembaruan" #: src/bz-application.c:3128 msgid "Could not find app" msgstr "Tidak dapat mencari aplikasi" #: src/bz-application.c:3359 msgid "Writing to cache…" msgstr "Menulis cache..." #: src/bz-appstream-parser.c:302 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Halaman Flathub" #: src/bz-appstream-parser.c:323 msgctxt "Project URL Type" msgid "Project Website" msgstr "Situs Web Proyek" #: src/bz-appstream-parser.c:327 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Pelacak Masalah" #: src/bz-appstream-parser.c:331 msgctxt "Project URL Type" msgid "FAQ" msgstr "Pertanyaan Jamak" #: src/bz-appstream-parser.c:335 msgctxt "Project URL Type" msgid "Help" msgstr "Bantuan" #: src/bz-appstream-parser.c:339 msgctxt "Project URL Type" msgid "Donate" msgstr "Sumbang" #: src/bz-appstream-parser.c:345 msgctxt "Project URL Type" msgid "Translate" msgstr "Terjemahkan" #: src/bz-appstream-parser.c:349 msgctxt "Project URL Type" msgid "Contact" msgstr "Kontak" #: src/bz-appstream-parser.c:353 msgctxt "Project URL Type" msgid "Source Code" msgstr "Kode Sumber" #: src/bz-appstream-parser.c:359 msgctxt "Project URL Type" msgid "Contribute" msgstr "Berkontribusi" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:68 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:62 #: src/bz-library-page.blp:65 src/bz-user-data-page.blp:86 msgid "Empty" msgstr "Kosong" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Pilihan Belum Tersedia" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Info aplikasi pilihan tidak tersedia pada sistem ini. Anda masih dapat " "menjelajahi aplikasi dari Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Jelajah Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Tidak Ada Jaringan" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Peramban" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Tidak Terverifikasi" #: src/bz-developer-badge.c:145 msgid "Developer information not available." msgstr "Informasi pengembang tidak tersedia." #: src/bz-developer-badge.c:151 src/bz-developer-badge.c:165 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Kepemilikan ID aplikasi %s belum diverifikasi, kemungkinan dikemas dalam " "skala komunitas." #: src/bz-developer-badge.c:169 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Kepemilikan ID aplikasi %s telah diverifikasi secara manual \n" " tim Flathub." #: src/bz-developer-badge.c:175 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Kepemilikan ID aplikasi %1$s telah diverifikasi oleh %2$s di %3$s." #: src/bz-developer-badge.c:182 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Kepemilikan ID aplikasi %1$s telah diverifikasi menggunakan %2$s." #: src/bz-developer-badge.c:186 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Kepemilikan ID aplikasi %s telah diverifikasi." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Catatan Rilis Lengkap" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Versi ini dapat rilis karena dukungan Anda!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Saya cinta Bazaar, namun saya tidak dapat mengembangkannya sendiri. Jika " "Anda ingin membantu pengembangan lebih lanjut, mari berdonasi lewat Ko-fi:" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Donasi ke Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Apa Yang Baru di %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Dirilis pada %-e %B %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Pilih Pemasangan" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Anda telah memasang beberapa versi aplikasi ini. Versi mana yang ingin Anda " "gunakan?" #: src/bz-entry-group-util.c:80 msgid "Cancel" msgstr "Batal" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Hanya untuk pengguna ini" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "pengguna ini" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "semua pengguna" #: src/bz-error.c:69 src/bz-error.c:88 src/bz-error-dialog.blp:36 #: src/bz-safety-dialog.blp:50 msgid "Details" msgstr "Rincian" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Salin" #: src/bz-error-dialog.c:56 src/bz-share-list.c:64 msgid "Copied!" msgstr "Tersalin!" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Gagal memperbarui daftar favorit" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Masuk dengan Flathub dan kelola aplikasi favorit" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Masuk" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Jumlah Favorit" #: src/bz-favorites-tile.c:157 src/bz-rich-app-tile.blp:172 msgid "Uninstall" msgstr "Bongkar" #: src/bz-favorites-tile.c:357 msgid "Failed to remove favorite" msgstr "Gagal melepas status favorit" #: src/bz-favorites-tile.blp:70 src/bz-installed-tile.blp:78 msgid "Support This Application" msgstr "Dukung Aplikasi Ini" #: src/bz-favorites-tile.blp:119 msgid "Remove From Favorites" msgstr "Hapus dari Favorit" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:78 #: src/bz-window.blp:386 msgid "Favorites" msgstr "Aplikasi Favorit" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Pasang Semua" #: src/bz-favorites-page.blp:34 src/bz-full-view.blp:45 src/bz-window.blp:255 msgid "Open App Library" msgstr "Buka Pustaka Aplikasi" #: src/bz-favorites-page.blp:56 src/bz-user-data-page.blp:75 msgid "Loading" msgstr "Memuat" #: src/bz-favorites-page.blp:71 msgid "No Favorites" msgstr "Tidak Ada Favorit" #: src/bz-favorites-page.blp:72 msgid "Applications you mark as favorite will appear here" msgstr "Aplikasi yang Anda tandai sebagai favorit akan muncul di sini" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Sebelumnya" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Selanjutnya" #: src/bz-featured-tile.blp:90 msgid "App of the Day" msgstr "Aplikasi Hari Ini" #: src/bz-flathub-category.c:89 msgid "Editing" msgstr "Penyunting" #: src/bz-flathub-category.c:90 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:91 msgid "Mixer" msgstr "Mixer" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:92 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Musik" #: src/bz-flathub-category.c:93 msgid "Player" msgstr "Pemutar" #: src/bz-flathub-category.c:94 msgid "Recorder" msgstr "Perekam" #: src/bz-flathub-category.c:95 msgid "Sequencer" msgstr "Pengurut" #: src/bz-flathub-category.c:96 msgid "Tuner" msgstr "Pengontrol" #: src/bz-flathub-category.c:97 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:102 msgid "Emulation" msgstr "Emulasi" #: src/bz-flathub-category.c:103 msgid "Action" msgstr "Aksi" #: src/bz-flathub-category.c:104 msgid "Adventure" msgstr "Petualangan" #: src/bz-flathub-category.c:105 msgid "Arcade" msgstr "Arkade" #: src/bz-flathub-category.c:106 msgid "Blocks" msgstr "Blok" #: src/bz-flathub-category.c:107 msgid "Board" msgstr "Papan" #: src/bz-flathub-category.c:108 msgid "Card" msgstr "Kartu" #: src/bz-flathub-category.c:109 msgid "Kids" msgstr "Anak-Anak" #: src/bz-flathub-category.c:110 msgid "Logic" msgstr "Logika" #: src/bz-flathub-category.c:111 msgid "Role Playing" msgstr "Bermain Peran" #: src/bz-flathub-category.c:112 msgid "Shooter" msgstr "Penembak" #: src/bz-flathub-category.c:113 msgid "Simulation" msgstr "Simulasi" #: src/bz-flathub-category.c:114 msgid "Sports" msgstr "Olahraga" #: src/bz-flathub-category.c:115 msgid "Strategy" msgstr "Strategi" #: src/bz-flathub-category.c:120 msgid "Audio & Video" msgstr "Audio & Video" #: src/bz-flathub-category.c:120 msgid "Media" msgstr "Putar Media" #: src/bz-flathub-category.c:120 msgid "More Audio & Video" msgstr "Apl Audio & Video Lain" #: src/bz-flathub-category.c:121 msgid "Developer Tools" msgstr "Alat Pengembangan" #: src/bz-flathub-category.c:121 msgid "Develop" msgstr "Kembangkan" #: src/bz-flathub-category.c:121 msgid "More Developer Tools" msgstr "Apl Pengembangan Lain" #: src/bz-flathub-category.c:122 msgid "Education" msgstr "Edukasi" #: src/bz-flathub-category.c:122 msgid "Learn" msgstr "Belajar" #: src/bz-flathub-category.c:122 msgid "More Education" msgstr "Apl Edukasi Lain" #: src/bz-flathub-category.c:123 msgid "Gaming" msgstr "Permainan" #: src/bz-flathub-category.c:123 msgid "Play" msgstr "Bermain" #: src/bz-flathub-category.c:123 msgid "More Gaming" msgstr "Permainan Lainnya" #: src/bz-flathub-category.c:124 msgid "Graphics & Photography" msgstr "Grafis & Fotografi" #: src/bz-flathub-category.c:124 msgid "Create" msgstr "Berkreasi" #: src/bz-flathub-category.c:124 msgid "More Graphics & Photography" msgstr "Apl Grafis & Foto Lain" #: src/bz-flathub-category.c:125 msgid "Networking" msgstr "Jaringan" #: src/bz-flathub-category.c:125 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:125 msgid "More Networking" msgstr "Apl Jaringan Lain" #: src/bz-flathub-category.c:126 msgid "Productivity" msgstr "Produktivitas" #: src/bz-flathub-category.c:126 msgid "Work" msgstr "Bekerja" #: src/bz-flathub-category.c:126 msgid "More Productivity" msgstr "Apl Produktivitas Lain" #: src/bz-flathub-category.c:127 msgid "Science" msgstr "Ilmu Pengetahuan" #: src/bz-flathub-category.c:127 msgid "More Science" msgstr "Apl Ilmu Pengetahuan Lain" #: src/bz-flathub-category.c:128 msgid "System" msgstr "Sistem" #: src/bz-flathub-category.c:128 msgid "More System" msgstr "Apl Sistem Lain" #: src/bz-flathub-category.c:129 msgid "Utilities" msgstr "Utilitas" #: src/bz-flathub-category.c:129 msgid "Tools" msgstr "Alat" #: src/bz-flathub-category.c:129 msgid "More Utilities" msgstr "Apl Utilitas Lain" #: src/bz-flathub-category.c:130 src/bz-flathub-page.blp:119 #: src/bz-flathub-page.blp:152 msgid "Trending" msgstr "Sedang Tren" #: src/bz-flathub-category.c:130 msgid "More Trending" msgstr "Aplikasi Tren Lainnya" #: src/bz-flathub-category.c:131 src/bz-flathub-page.blp:125 #: src/bz-flathub-page.blp:182 msgid "Popular" msgstr "Populer" #: src/bz-flathub-category.c:131 msgid "More Popular" msgstr "Apl Populer Lainnya" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:172 msgid "Recently Added" msgstr "Baru Saja Rilis" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:131 msgid "New" msgstr "Baru" #: src/bz-flathub-category.c:132 msgid "More New" msgstr "Apl Baru Lainnya" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:162 msgid "Recently Updated" msgstr "Baru Dimutakhirkan" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:137 msgid "Updated" msgstr "Diperbarui" #: src/bz-flathub-category.c:133 msgid "More Updated" msgstr "Apl Mutakhir Lainnya" #: src/bz-flathub-category.c:134 msgid "Mobile" msgstr "Untuk Ponsel" #: src/bz-flathub-category.c:134 msgid "More Mobile" msgstr "Apl Ponsel Lainnya" #: src/bz-flathub-category.c:135 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:135 msgid "More Adwaita" msgstr "Apl Adwaita Lainnya" #: src/bz-flathub-category.c:136 msgid "KDE Apps" msgstr "Aplikasi KDE" #: src/bz-flathub-category.c:136 msgid "More KDE Apps" msgstr "Apl KDE Lainnya" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub Belum Ditambahkan" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Remote Flathub tidak ditemukan pada seluruh pemasangan Flatpak Anda" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "Terdapat kesalahan pada Flathub" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "Hubungkan Kembali Flathub" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "Flathub Tidak Tersedia" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "Bazaar tidak dapat terhubung ke Flathub. Anda masih dapat mencari dan " "mengelola aplikasi." #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "Cari Aplikasi" #: src/bz-flathub-page.blp:263 msgid "On the Go" msgstr "Di Mana Saja" #: src/bz-flathub-page.blp:275 msgid "Apps for your Linux phones and tablets" msgstr "Aplikasi untuk ponsel dan tablet Linux Anda" #: src/bz-flathub-page.blp:286 src/bz-flathub-page.blp:321 msgid "More Mobile Apps" msgstr "Apl Ponsel Lainnya" #: src/bz-flathub-page.blp:379 msgid "We​ ♥​ Games" msgstr "Kita ♥​ Main" #: src/bz-flathub-page.blp:392 msgid "Games and apps to run your favorite titles" msgstr "Permainan dan aplikasi untuk memainkan judul-judul favoritmu" #: src/bz-flathub-page.blp:426 msgid "More Games" msgstr "Permainan Lainnya" #: src/bz-full-view.blp:66 src/bz-library-page.blp:76 #: src/bz-library-page.blp:80 msgid "No Results" msgstr "Tidak Ada Hasil" #: src/bz-full-view.blp:67 msgid "Try a different search query" msgstr "Coba gunakan kata kunci lainnya" #: src/bz-full-view.blp:73 msgid "Content" msgstr "Konten" #: src/bz-full-view.blp:131 msgid "Installing .flatpak bundles is not yet supported" msgstr "Saat ini pemasangan bundel .flatpak belum didukung" #: src/bz-full-view.blp:257 msgid "_Support" msgstr "_Dukung" #: src/bz-full-view.blp:426 msgid "Downloads/Month" msgstr "Unduhan/Bulan" #: src/bz-full-view.blp:461 msgid "Stopped Receiving Core Updates" msgstr "Berhenti Menerima Pembaruan Utama" #: src/bz-full-view.blp:475 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Aplikasi ini menggunakan tempokerja (runtime) yang sudah tidak menerima " "pembaruan maupun perbaikan keamanan. Aplikasi ini mungkin tidak aman saat " "digunakan." #: src/bz-full-view.blp:562 msgid "Trash Data" msgstr "Buang Data" #: src/bz-full-view.blp:702 msgid "Tags:" msgstr "Label:" #: src/bz-full-view.c:215 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:222 #, c-format msgid "%.*fM" msgstr "%.*fjt" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:229 #, c-format msgid "%.*fK" msgstr "%.*frb" #: src/bz-full-view.c:239 #, c-format msgid "%d downloads in the last month" msgstr "%d unduhan dalam sebulan terakhir" #: src/bz-full-view.c:251 src/bz-full-view.c:592 src/bz-full-view.c:609 msgid "N/A" msgstr "Nihil" #: src/bz-full-view.c:279 #, c-format msgid "+%s runtime" msgstr "+%s Tempokerja (Runtime)" #: src/bz-full-view.c:282 msgid "Download" msgstr "Ukuran Unduh" #: src/bz-full-view.c:302 msgid "Size information unavailable" msgstr "Info ukuran apl tidak tersedia" #: src/bz-full-view.c:305 #, c-format msgid "Download size of %s" msgstr "Ukuran unduhan %s" #: src/bz-full-view.c:338 msgid "All Ages" msgstr "Semua Usia" #: src/bz-full-view.c:350 msgid "Age rating information unavailable" msgstr "Info panduan usia tidak tersedia" #: src/bz-full-view.c:355 msgid "Suitable for all ages" msgstr "Cocok untuk semua usia" #: src/bz-full-view.c:357 #, c-format msgid "Suitable for ages %d and up" msgstr "Cocok untuk usia %d ke atas" #: src/bz-full-view.c:390 src/bz-full-view.c:395 src/bz-full-view.c:423 #: src/bz-full-view.c:431 msgid "Unknown" msgstr "Tidak Diketahui" #: src/bz-full-view.c:400 #, c-format msgid "Free software licensed under %s" msgstr "Aplikasi bebas di bawah lisensi %s" #: src/bz-full-view.c:405 msgid "Free software" msgstr "Aplikasi bebas" #: src/bz-full-view.c:408 msgid "Proprietary Software" msgstr "Aplikasi dengan hak cipta khusus" #: src/bz-full-view.c:411 #, c-format msgid "Special License: %s" msgstr "Lisensi Khusus: %s" #: src/bz-full-view.c:428 msgid "Free" msgstr "Bebas" #: src/bz-full-view.c:434 src/bz-license-dialog.c:132 msgid "Proprietary" msgstr "Proprietari" #: src/bz-full-view.c:436 src/bz-license-dialog.c:134 msgid "Special License" msgstr "Lisensi Khusus" #: src/bz-full-view.c:456 msgid "Adaptive" msgstr "Adaptif" #: src/bz-full-view.c:456 msgid "Desktop Only" msgstr "Hanya Desktop" #: src/bz-full-view.c:462 msgid "Works on desktop, tablets, and phones" msgstr "Bekerja di desktop, tablet dan ponsel" #: src/bz-full-view.c:463 msgid "May not work on mobile devices" msgstr "Mungkin tidak bekerja optimal di ponsel" #: src/bz-full-view.c:474 msgid "No URL" msgstr "Tidak ada URL" #: src/bz-full-view.c:492 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Aplikasi ini memiliki lisensi FLOSS, sehingga kode sumbernya dapat diaudit " "secara bebas dan terbuka." #: src/bz-full-view.c:493 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Aplikasi ini memiliki lisensi proprietari, dikembangkan secara tertutup " "dengan kode sumber aplikasi yang tidak bisa diaudit secara independen." #: src/bz-full-view.c:500 msgid "More Apps" msgstr "Aplikasi Lainnya" #: src/bz-full-view.c:501 #, c-format msgid "More Apps by %s" msgstr "Aplikasi Lain dari %s" #: src/bz-full-view.c:508 msgid "Other Apps by this Developer" msgstr "Jelajah lebih dari pengembang ini" #: src/bz-full-view.c:510 src/bz-full-view.c:693 #, c-format msgid "Other Apps by %s" msgstr "Jelajah lebih dari %s" #: src/bz-full-view.c:519 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "%s sudah tidak terpasang, namun masih memiliki %s data tersimpan." #: src/bz-full-view.c:599 src/bz-safety-dialog.blp:31 msgid "Safe" msgstr "Aman" #: src/bz-full-view.c:601 src/bz-full-view.c:603 msgid "Low Risk" msgstr "Risiko Rendah" #: src/bz-full-view.c:605 msgid "Medium Risk" msgstr "Risiko Sedang" #: src/bz-full-view.c:607 msgid "High Risk" msgstr "Risiko Tinggi" #: src/bz-full-view.c:695 msgid "Other Apps" msgstr "Aplikasi Lain" #: src/bz-full-view.c:697 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d Aplikasi" #: src/bz-full-view.c:941 msgid "Show Less" msgstr "Sembunyikan" #: src/bz-full-view.c:941 msgid "Show More" msgstr "Tampilkan Lebih Banyak" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Dukungan Perangkat" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Pintasan papan tik" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Membutuhkan papan tik" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Direkomendasikan menggunakan papan tik" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Mendukung papan tik" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Dukungan papan tik tidak diketahui" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Dukungan tetikus" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Membutuhkan tetikus atau alat penunjuk" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Direkomendasikan menggunakan tetikus atau alat penunjuk" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Mendukung tetikus atau alat penunjuk" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Dukungan untuk tetikus atau alat penunjuk tidak diketahui" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Dukungan layar sentuh" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Membutuhkan layar sentuh" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Direkomedasikan menggunakan layar sentuh" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Mendukung layar sentuh" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Dukungan untuk layar sentuh tidak diketahui" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Dukungan ponsel" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Bekerja di ponsel" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Mungkin tidak bekerja optimal di ponsel" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Dukungan desktop" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Bekerja optimal di layar lebar" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s bekerja optimal pada perangkat tertentu" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s bekerja baik pada sebagian besar perangkat" #: src/bz-install-controls.blp:33 msgid "Download & Install Application" msgstr "Unduh & Pasang Aplikasi" #: src/bz-install-controls.blp:35 src/bz-transaction-dialog.c:202 msgid "_Install" msgstr "_Pasang" #: src/bz-install-controls.blp:61 msgid "_Open" msgstr "_Buka" #: src/bz-install-controls.blp:76 src/bz-install-controls.blp:127 msgid "Uninstall Application" msgstr "Hapus Pemasangan Aplikasi" #: src/bz-install-controls.blp:86 src/bz-transaction-dialog.c:231 msgid "_Remove" msgstr "_Hapus" #: src/bz-install-controls.blp:114 src/bz-updates-card.blp:184 #: src/bz-updates-card.blp:212 msgid "Update" msgstr "Perbarui" #: src/bz-installed-tile.blp:64 src/bz-rich-app-tile.blp:140 msgid "Stopped Receiving Updates" msgstr "Berhenti Menerima Pembaruan" #: src/bz-library-page.blp:31 msgid "Search installed apps" msgstr "Cari aplikasi terpasang" #: src/bz-library-page.blp:48 msgid "Clear search" msgstr "Bersihkan pencarian" #: src/bz-library-page.blp:69 msgid "No Apps Found" msgstr "Tidak Ada Aplikasi Tersedia" #. Translators: . #: src/bz-library-page.blp:98 src/bz-window.blp:112 msgid "Library" msgstr "Pustaka" #: src/bz-library-page.blp:126 msgid "Pending Updates" msgstr "Pembaruan Tertunda" #: src/bz-library-page.blp:153 msgid "Downloads" msgstr "Unduhan" #: src/bz-library-page.blp:196 msgid "Recently Uninstalled" msgstr "Baru Dihapus" #: src/bz-library-page.blp:247 msgid "Clear Finished Tasks" msgstr "Bersihkan Transaksi Lama" #: src/bz-library-page.blp:260 msgid "Installed Apps" msgstr "Aplikasi Terpasang" #: src/bz-library-page.blp:333 msgid "Sort By" msgstr "Urutkan" #: src/bz-library-page.blp:347 msgid "Name" msgstr "Nama" #: src/bz-library-page.blp:353 msgid "Size" msgstr "Ukuran" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Tidak ada hasil yang cocok untuk \"%s\" dari aplikasi terpasang" #: src/bz-library-page.c:193 src/bz-updates-card.c:257 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u Pembaruan Tersedia" #: src/bz-license-dialog.blp:95 msgid "Get Involved" msgstr "Mari Berpartisipasi" #: src/bz-license-dialog.c:126 msgid "Unknown License" msgstr "Lisensi Tidak Diketahui" #: src/bz-license-dialog.c:129 msgid "Community Built" msgstr "Dibangun Bersama" #: src/bz-license-dialog.c:202 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Aplikasi ini dikembangkan secara terbuka oleh komunitas dari seluruh dunia.\n" "\n" "Anda dapat berpartisipasi dan ikut membuatnya lebih baik." #: src/bz-license-dialog.c:205 msgid "The license of this app is not known" msgstr "Lisensi aplikasi ini tidak diketahui" #: src/bz-license-dialog.c:211 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Aplikasi ini dikembangkan secara terbuka oleh komunitas dari seluruh dunia, " "dan dirilis di bawah lisensi %s.\n" "\n" "Anda dapat berpartisipasi membuat aplikasi ini lebih baik." #: src/bz-license-dialog.c:219 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Aplikasi ini tidak dikembangkan secara terbuka, sehingga hanya pihak " "pengembang yang memahami penuh cara kerjanya. Pengawasan keamanan aplikasi " "ini mungkin lebih sulit, dan statusnya dapat berubah sewaktu-waktu.\n" "\n" "Anda mungkin tidak dapat berkontribusi pada aplikasi ini." #: src/bz-license-dialog.c:225 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Aplikasi ini dikembangkan di bawah lisensi khusus %s.\n" "\n" "Anda mungkin dapat atau tidak dapat berkontribusi pada aplikasi ini." #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 msgid "Connect to Flathub" msgstr "Hubungkan ke Flathub" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "Terjadi Kesalahan" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "" "Hubungkan akun Flatpak ke Bazaar untuk mengelola aplikasi favorit Anda." #: src/bz-login-page.blp:110 msgid "Finish" msgstr "Selesai" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "Halo, %s!" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Preferensi" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "Koneksi jaringan dibatasi — sinkronisasi data otomatis saat ini dijeda" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:282 msgid "Refresh Manually" msgstr "Segarkan Langsung" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Saringan Konten" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Sembunyikan Aplikasi Sumber Tertutup" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Hanya tampilkan aplikasi bersumber terbuka pada hasil cari/jelajah" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Hanya Tampilkan Aplikasi Flathub" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "Batasi hasil cari/jelajah hanya pada aplikasi yang tersedia di Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Hanya Tampilkan Apl Terverifikasi" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Sembunyikan aplikasi tanpa verifikasi Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide EOL Apps" msgstr "Sembunyikan Aplikasi Tanpa Dukungan" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Sembunyikan aplikasi yang sudah tidak didukung oleh para pengembangnya" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:127 msgid "Search" msgstr "Cari" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "Tunda Hasil Pencarian" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "" "Tingkatkan performa pencarian dengan menunda pemuatan istilah pencarian" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "Bilah Kemajuan" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "Pilihlah tema favorit Anda!" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "Strip Vertikal" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "Tampilkan warna bendera dari kiri ke kanan" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Warna Aksen" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Warna Kebanggaan" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Warna Bangga Lesbian" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Warna Bangga Homoseksual Pria" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Warna Bangga Transgender" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Warna Bangga Nonbiner" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Warna Bangga Biseksual" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Warna Bangga Aseksual" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Warna Bangga Panseksual" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Warna Bangga Aromantik" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Warna Bangga Fluiditas Gender " #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Warna Bangga Poliseksual" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Warna Bangga Omniseksual" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Warna Bangga Aromantik-Aseksual" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Warna Bangga Agender" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Warna Bangga Genderqueer" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Warna Bangga Interseks" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Warna Bangga Demigender" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Warna Bangga Biromantik" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Warna Bangga Disabilitas" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Warna Bangga Waria" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Warna Bangga Netrois" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.blp:171 msgid "Version History" msgstr "Riwayat Versi" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Riwayat Versi" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Hari Ini" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Kemarin" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d hari lalu" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d minggu lalu" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d bulan lalu" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d tahun lalu" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:195 #, c-format msgid "Version %s" msgstr "Versi %s" #: src/bz-releases-list.c:250 msgid "No details for this release" msgstr "Tidak ada detail untuk rilisan ini" #: src/bz-releases-list.c:262 msgid "Get More Information" msgstr "Info Lebih Lanjut" #: src/bz-rich-app-tile.blp:157 msgid "Get" msgstr "Pasang" #: src/bz-rich-app-tile.blp:185 src/bz-transaction-tile.blp:272 msgid "Open" msgstr "Buka" #: src/bz-safety-calculator.c:82 msgid "Unknown Permissions" msgstr "Izin Tidak Jelas" #: src/bz-safety-calculator.c:83 msgid "Permissions are missing for this app." msgstr "Izin aplikasi ini tidak diketahui" #: src/bz-safety-calculator.c:96 msgid "No Permissions" msgstr "Tidak Ada Izin" #: src/bz-safety-calculator.c:97 msgid "App is fully sandboxed" msgstr "Aplikasi ini sepenuhnya terisolasi" #: src/bz-safety-calculator.c:103 msgid "Network Access" msgstr "Akses Jaringan" #: src/bz-safety-calculator.c:104 msgid "Can access the internet" msgstr "Dapat mengakses internet" #: src/bz-safety-calculator.c:106 msgid "No Network Access" msgstr "Tidak Ada Akses Jaringan" #: src/bz-safety-calculator.c:107 msgid "Cannot access the internet" msgstr "Tidak dapat mengakses internet" #: src/bz-safety-calculator.c:112 msgid "User Device Access" msgstr "Akses Perangkat Pengguna" #: src/bz-safety-calculator.c:113 msgid "Can access devices such as webcams or gaming controllers" msgstr "Dapat mengakses perangkat seperti kamera atau pengontrol mainan" #: src/bz-safety-calculator.c:115 msgid "No User Device Access" msgstr "Tidak Ada Akses Perangkat Pengguna" #: src/bz-safety-calculator.c:116 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Tidak dapat mengakses perangkat seperti kamera atau pengontrol mainan" #: src/bz-safety-calculator.c:121 msgid "Input Device Access" msgstr "Akses Perangkat Masukan" #: src/bz-safety-calculator.c:122 msgid "Can access input devices" msgstr "Dapat mengakses perangkat masukan" #: src/bz-safety-calculator.c:128 msgid "Microphone Access and Audio Playback" msgstr "Akses Mikrofon dan Pemutaran Suara" #: src/bz-safety-calculator.c:129 msgid "Can listen using microphones and play audio without asking permission" msgstr "Dapat mengakses mikrofon dan memutar suara tanpa permintaan izin" #: src/bz-safety-calculator.c:135 msgid "System Device Access" msgstr "Akses Perangkat Sistem" #: src/bz-safety-calculator.c:136 msgid "Can access system devices which require elevated permissions" msgstr "Dapat mengakses perangkat sistem yang membutuhkan izin lebih lanjut" #: src/bz-safety-calculator.c:142 msgid "Screen Contents Access" msgstr "Akses Konten Layar" #: src/bz-safety-calculator.c:143 msgid "Can access the contents of the screen or other windows" msgstr "Dapat mengakses konten dari layar, termasuk jendela aplikasi lain" #: src/bz-safety-calculator.c:149 msgid "Legacy Windowing System" msgstr "Sistem Jendela Lawas" #: src/bz-safety-calculator.c:150 msgid "Always uses a legacy windowing system (X11)" msgstr "Selalu menggunakan sistem jendela lawas X11" #: src/bz-safety-calculator.c:156 msgid "Arbitrary Permissions" msgstr "Izin Sewenang-wenang" #: src/bz-safety-calculator.c:157 msgid "Can acquire arbitrary permissions" msgstr "Dapat memperoleh izin sewenang-wenang" #: src/bz-safety-calculator.c:163 msgid "User Settings" msgstr "Akses Konfigurasi Pengguna" #: src/bz-safety-calculator.c:164 msgid "Can access and change user settings" msgstr "Dapat mengakses dan mengubah konfigurasi pengguna" #: src/bz-safety-calculator.c:170 msgid "Full File System Read/Write Access" msgstr "Akses Baca/Tulis Penuh pada Sistem Berkas" #: src/bz-safety-calculator.c:171 msgid "Can read and write all data on the file system" msgstr "" "Memiliki akses baca dan tulis untuk semua data pada sistem perangkat ini" #: src/bz-safety-calculator.c:178 msgid "Home Folder Read/Write Access" msgstr "Akses Baca/Tulis Direktori Rumah" #: src/bz-safety-calculator.c:179 msgid "Can read and write all data in your home directory" msgstr "" "Memiliki akses baca dan tulis untuk semua data pada direktori Rumah " "perangkat ini" #: src/bz-safety-calculator.c:186 msgid "Full File System Read Access" msgstr "Akses Baca Penuh dalam Sistem Berkas" #: src/bz-safety-calculator.c:187 msgid "Can read all data on the file system" msgstr "Memiliki akses baca untuk semua data pada sistem perangkat ini" #: src/bz-safety-calculator.c:195 msgid "Home Folder Read Access" msgstr "Akses Baca Direktori Rumah" #: src/bz-safety-calculator.c:196 msgid "Can read all data in your home directory" msgstr "" "Memiliki akses baca untuk semua data pada direktori Rumah perangkat ini" #: src/bz-safety-calculator.c:204 msgid "Download Folder Read/Write Access" msgstr "Akses Baca/Tulis Folder Unduhan" #: src/bz-safety-calculator.c:205 msgid "Can read and write all data in your downloads directory" msgstr "" "Memiliki akses baca dan tulis untuk semua data pada direktori Unduhan " "perangkat ini" #: src/bz-safety-calculator.c:215 msgid "Download Folder Read Access" msgstr "Akses Baca Folder Unduhan" #: src/bz-safety-calculator.c:216 msgid "Can read all data in your downloads directory" msgstr "Memiliki akses baca untuk semua data di direktori Unduhan Anda" #: src/bz-safety-calculator.c:229 msgid "Can read and write all data in the directory" msgstr "Memiliki akses baca dan tulis untuk semua data pada direktori ini" #: src/bz-safety-calculator.c:243 msgid "Can read all data in the directory" msgstr "Memiliki akses baca untuk semua data pada direktori ini" #: src/bz-safety-calculator.c:258 msgid "No File System Access" msgstr "Tidak Ada Akses Sistem Berkas" #: src/bz-safety-calculator.c:259 msgid "Cannot access the file system at all" msgstr "Tidak dapat mengakses sistem berkas sama sekali" #: src/bz-safety-calculator.c:266 msgid "Uses System Services" msgstr "Menggunakan Layanan Sistem" #: src/bz-safety-calculator.c:267 msgid "Can request data from non-portal system services" msgstr "Dapat meminta data dari layanan sistem di luar portal XDG" #: src/bz-safety-calculator.c:273 msgid "Uses Session Services" msgstr "Menggunakan Layanan Sesi" #: src/bz-safety-calculator.c:274 msgid "Can request data from non-portal session services" msgstr "Dapat meminta data dari layanan sesi di luar portal XDG" #: src/bz-safety-calculator.c:322 msgid "No Service Access" msgstr "Tidak Ada Akses Layanan" #: src/bz-safety-calculator.c:323 msgid "Cannot access non-portal session or system services at all" msgstr "Tidak dapat mengakses layanan sistem atau sesi non-portal sama sekali" #: src/bz-safety-calculator.c:331 msgid "Verified App Developer" msgstr "Pengembang Terverifikasi" #: src/bz-safety-calculator.c:332 msgid "The developer of this app has been verified to be who they say they are" msgstr "Pengembang aplikasi ini sudah terverifikasi oleh Flathub" #: src/bz-safety-calculator.c:341 msgid "Proprietary Code" msgstr "Kode Proprietari" #: src/bz-safety-calculator.c:342 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Kode sumber aplikasi ini tidak bersifat publik, sehingga aplikasi ini tidak " "dapat diaudit secara independen dan mungkin tidak aman" #: src/bz-safety-calculator.c:352 msgid "Auditable Code" msgstr "Kode Dapat Diaudit" #: src/bz-safety-calculator.c:353 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Kode sumber aplikasi ini bersifat publik dan dapat diaudit secara " "independen, sehingga kemungkinan besar aplikasi ini aman" #: src/bz-safety-calculator.c:493 #, c-format msgid "Use the %s System Service" msgstr "Menggunakan Layanan Sistem %s" #: src/bz-safety-calculator.c:497 #, c-format msgid "Use the %s Session Service" msgstr "Menggunakan Layanan Sesi %s" #: src/bz-safety-calculator.c:501 #, c-format msgid "Use the %s Service" msgstr "Menggunakan Layanan %s" #: src/bz-safety-calculator.c:511 msgid "Can see the non-portal service" msgstr "Dapat melihat layanan di luar portal XDG" #: src/bz-safety-calculator.c:513 msgid "Can talk to the non-portal service" msgstr "Dapat berkomunikasi dengan layanan di luar portal XDG" #: src/bz-safety-calculator.c:515 msgid "Can own the non-portal service" msgstr "Dapat memiliki layanan di luar portal XDG" #: src/bz-safety-calculator.c:530 msgid "Global Menu Integration" msgstr "Integrasi Menu Global" #: src/bz-safety-calculator.c:531 msgid "Can display its menus in a global menu bar" msgstr "Dapat menampilkan opsi aplikasi pada bilah menu global" #: src/bz-safety-calculator.c:536 msgid "KDE Settings Integration" msgstr "Integrasi Pengaturan KDE" #: src/bz-safety-calculator.c:537 msgid "Can detect when KDE desktop settings change" msgstr "Dapat mendeteksi ketika terdapat perubahan konfigurasi desktop KDE" #: src/bz-safety-calculator.c:542 msgid "KDE Global Settings" msgstr "Pengaturan Global KDE" #: src/bz-safety-calculator.c:543 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Dapat membaca preferensi desktop KDE, seperti font dan tema warna" #: src/bz-safety-calculator.c:548 msgid "Secret Storage Service" msgstr "Layanan Penyimpanan Sandi" #: src/bz-safety-calculator.c:549 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Dapat menyimpan dan mengambil kata sandi menggunakan penyimpanan kunci sistem" #: src/bz-safety-calculator.c:554 msgid "Desktop Notifications Service" msgstr "Layanan Notifikasi Desktop" #: src/bz-safety-calculator.c:555 msgid "Can send desktop notifications" msgstr "Dapat mengirim notifikasi desktop" #: src/bz-safety-calculator.c:561 msgid "System Tray Integration" msgstr "Integrasi Baki Sistem" #: src/bz-safety-calculator.c:562 msgid "Can display an icon in the system tray" msgstr "Dapat menampilkan ikon pada baki sistem" #: src/bz-safety-calculator.c:567 msgid "KDE Connect Integration" msgstr "Integrasi KDE Connect" #: src/bz-safety-calculator.c:568 msgid "Can interact with devices paired via KDE Connect" msgstr "" "Dapat berinteraksi dengan perangkat yang terkoneksi melalui KDE Connect" #: src/bz-safety-dialog.blp:7 msgid "Safety" msgstr "Keamanan" #: src/bz-safety-dialog.blp:53 msgid "License" msgstr "Lisensi" #: src/bz-safety-dialog.blp:63 msgid "App ID" msgstr "ID Aplikasi" #: src/bz-safety-dialog.blp:73 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:104 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Aplikasi ini menggunakan versi platform aplikasi (SDK) usang dan mungkin " "memiliki gangguan atau kerentanan keamanan yang tak diperbaiki." #: src/bz-safety-dialog.c:227 #, c-format msgid "%s is Safe" msgstr "%s aman untuk dipasang" #: src/bz-safety-dialog.c:232 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s tidak memiliki izin berbahaya" #: src/bz-safety-dialog.c:237 #, c-format msgid "%s is Probably Safe" msgstr "%s mungkin aman untuk dipasang" #: src/bz-safety-dialog.c:242 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s mungkin tidak aman untuk dipasang" #: src/bz-safety-dialog.c:247 #, c-format msgid "%s is Unsafe" msgstr "%s tidak aman untuk dipasang" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Tangkapan Layar" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Tangkapan Layar Sebelumnya" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Tangkapan Layar Selanjutnya" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Salin Gambar" #: src/bz-screenshot-page.blp:147 msgid "Reset View" msgstr "Kembalikan Skala Tampilan" #: src/bz-screenshot-page.blp:158 msgid "Zoom Out" msgstr "Perkecil Tampilan" #: src/bz-screenshot-page.blp:168 msgid "Zoom In" msgstr "Perbesar Tampilan" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Karosel Tangkapan Layar" #: src/bz-screenshots-carousel.blp:117 msgid "Open Screenshot Viewer" msgstr "Tampilkan Tangkapan Layar" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Video" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Perkantoran" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Kalender" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Komunikasi" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Steam" msgstr "Steam" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "Paint" msgstr "Seni Lukis" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:122 msgid "Minecraft" msgstr "Minecraft" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:127 msgid "Emulator" msgstr "Emulator" #: src/bz-search-page.blp:57 msgid "Search Apps, Games, Software" msgstr "Cari Aplikasi dan Permainan" #: src/bz-search-page.blp:79 msgid "Clear Search" msgstr "Bersihkan Pencarian" #: src/bz-search-page.blp:171 msgid "Categories Unavailable" msgstr "Kategori Tidak Tersedia" #: src/bz-search-page.blp:172 msgid "Search for apps using the search bar above." msgstr "Cari aplikasi menggunakan bilah pencarian di atas. " #: src/bz-search-page.blp:198 msgid "Browse Categories" msgstr "Jelajahi Kategori" #: src/bz-search-page.blp:340 msgid "No Applications Found" msgstr "Tidak Ada Aplikasi Tersedia" #: src/bz-search-page.c:244 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Tidak ada hasil untuk \"%s\" di Flathub" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Salin Tautan" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Buka Tautan" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "Linimasa" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Jumlah Pemasangan:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Dunia" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Sejak 15/4/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:124 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM Pemasangan Total" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:127 #, c-format msgid "%.2fK Total Installs" msgstr "%.2frb Pemasangan Total" #: src/bz-stats-dialog.c:129 #, c-format msgid "%'d Total Installs" msgstr "%'d Pemasangan Total" #: src/bz-tag-list.c:78 msgid "No Results Found" msgstr "Tidak Ada Hasil" #: src/bz-tag-list.c:90 #, c-format msgid "Apps Tagged \"%s\"" msgstr "Aplikasi Berlabel \"%s\"" #: src/bz-tag-list.c:103 msgid "Search failed" msgstr "Pencarian gagal" #: src/bz-transaction-dialog.c:155 msgid "Keep User Data" msgstr "Simpan Data Pengguna" #: src/bz-transaction-dialog.c:156 msgid "Allow restoring personal settings & content" msgstr "Izinkan pemulihan data & pengaturan personal" #: src/bz-transaction-dialog.c:165 msgid "Delete All Data" msgstr "Hapus Semua Data" #: src/bz-transaction-dialog.c:166 msgid "Permanently erase user data to save space" msgstr "Hapus permanen data aplikasi untuk menghemat ruang" #: src/bz-transaction-dialog.c:191 #, c-format msgid "Install %s?" msgstr "Pasang %s?" #: src/bz-transaction-dialog.c:196 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Pilih versi pemasangan. Mungkin membutuhkan pemasangan komponen tambahan" #: src/bz-transaction-dialog.c:198 msgid "May install additional shared components" msgstr "Mungkin membutuhkan pemasangan komponen tambahan" #: src/bz-transaction-dialog.c:201 src/bz-transaction-dialog.c:230 #: src/bz-transaction-dialog.c:275 src/bz-transaction-dialog.c:578 msgid "_Cancel" msgstr "_Batal" #: src/bz-transaction-dialog.c:219 #, c-format msgid "Remove %s?" msgstr "Hapus %s?" #: src/bz-transaction-dialog.c:222 msgid "Select which version to remove." msgstr "Pilih versi aplikasi yang akan dihapus." #: src/bz-transaction-dialog.c:224 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Setelah dihapus, aplikasi %s tidak akan bisa digunakan." #: src/bz-transaction-dialog.c:247 #, c-format msgid "“%s” is High Risk" msgstr "\"%s\" memiliki risiko tinggi" #: src/bz-transaction-dialog.c:251 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Aplikasi ini memiliki akses penuh pada sistem Anda, termasuk semua file, " "riwayat peramban, kata sandi tersimpan, dan data lainnya. Aplikasi ini " "juga memiliki akses internet, yang memungkinkannya mengirim data Anda ke " "pihak luar. \n" "\n" "Karena kode sumbernya tidak terbuka, aplikasi ini tidak dapat diaudit " "terkait penggunaan izin-izin tersebut." #: src/bz-transaction-dialog.c:260 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Aplikasi ini menggunakan sistem jendela lawas X11, yang memungkinkannya " "merekam semua penekanan tombol, mengambil tangkapan layar, dan memantau " "aplikasi lain. Aplikasi ini juga memiliki akses internet, yang " "memungkinkannya mengirim data Anda ke pihak luar.\n" "\n" "Karena kode sumbernya tidak terbuka, aplikasi ini tidak dapat diaudit " "terkait penggunaan izin-izin tersebut." #: src/bz-transaction-dialog.c:276 msgid "_Install Anyway" msgstr "_Tetap Pasang" #: src/bz-transaction-dialog.c:331 msgid "Failed to load transaction dialog" msgstr "Gagal memuat dialog" #: src/bz-transaction-dialog.c:549 msgid "All apps are already installed" msgstr "Semua aplikasi sudah terpasang." #: src/bz-transaction-dialog.c:551 msgid "_OK" msgstr "_Ya" # %u is the number of apps to install, so the strings might have singular and plural versions depend on your language. #: src/bz-transaction-dialog.c:567 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Pasang %u Aplikasi?" #: src/bz-transaction-dialog.c:575 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Aplikasi berikut akan dipasang, termasuk komponen tambahan jika tersedia" #: src/bz-transaction-dialog.c:576 #, c-format msgid "%d addons will be installed." msgstr "%d komponen tambahan akan dipasang." #: src/bz-transaction-dialog.c:577 msgid "Additionally, addons will be installed." msgstr "Selain itu, komponen tambahan juga akan dipasang." #: src/bz-transaction-dialog.c:579 msgid "_Install All" msgstr "_Pasang Semua" #: src/bz-transaction-manager.c:766 #, c-format msgid "Finished in %.02f seconds" msgstr "Selesai dalam %.02f detik" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Modul Aplikasi" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Tempokerja (Runtime)" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Dalam Antrian" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Selesai" #: src/bz-transaction-tile.blp:230 msgid "Error" msgstr "Terjadi Kesalahan" #: src/bz-transaction-tile.blp:286 msgid "Cancel Transaction" msgstr "Batalkan Proses" #: src/bz-transaction-tile.blp:410 msgid "Show Error Info" msgstr "Tampilkan Info Galat" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Bebas" #: src/bz-transaction-tile.c:362 src/bz-transaction-tile.c:365 msgid "Transaction Error" msgstr "Terjadi Kegagalan" #: src/bz-transaction.c:342 msgid "Pending" msgstr "Ditunda" #: src/bz-updates-card.blp:40 msgid "_Update All" msgstr "_Perbarui Semua" #: src/bz-updates-card.c:293 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u Tempokerja Baru" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Kelola Sisa Data Pengguna" #: src/bz-user-data-page.blp:89 msgid "No User Data Found" msgstr "Data Pengguna Tidak Ditemukan" #: src/bz-user-data-page.blp:94 msgid "User Data" msgstr "Data Pengguna" #: src/bz-user-data-tile.c:144 #, c-format msgid "Trashed User Data for %s" msgstr "Data aplikasi %s telah dihapus." #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Hapus Data Pengguna" #: src/bz-window.blp:88 msgid "Curated" msgstr "Pilihan" #: src/bz-window.blp:100 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:220 msgid "Refresh completed!" msgstr "Penyegaran berhasil!" #: src/bz-window.blp:273 msgid "You are running a new version of Bazaar!" msgstr "Versi terbaru Bazaar telah terpasang!" #: src/bz-window.blp:274 msgid "See What's New" msgstr "Lihat Yang Baru" #: src/bz-window.blp:281 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "Saat ini Bazaar belum memuat halaman Flathub terbaru" #: src/bz-window.blp:393 msgid "Log Out" msgstr "Keluar" #. Translators: %s is the title of the current page #: src/bz-window.c:380 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:487 msgid "Failed to load add-ons" msgstr "Gagal memuat modul tambahan" #: src/bz-window.c:601 src/bz-window.c:618 msgid "Failed to launch application" msgstr "Gagal menjalankan aplikasi" #: src/bz-window.c:823 msgid "You can't remove Bazaar from Bazaar!" msgstr "Anda tidak dapat menghapus Bazaar dari dalam Bazaar." #: src/bz-window.c:1108 src/bz-window.c:1142 msgid "Can't do that right now!" msgstr "Tunggu hingga Bazaar selesai memuat" #: src/bz-world-map.c:595 msgctxt "As in, \"100 Downloads\"" msgid "Downloads" msgstr "Unduhan" #: src/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Umum" #: src/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Buka Halaman Pencarian" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Buka Halaman Pustaka" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Refresh" msgstr "Muat ulang" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Buka Pengaturan" #: src/shortcuts-dialog.blp:30 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Tampilkan Pintasan" #: src/shortcuts-dialog.blp:35 msgctxt "shortcut window" msgid "Close Window" msgstr "Tutup Jendela" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Keluar dari Bazaar" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Bazaar menekankan pentingnya mendukung para pengembang yang telah " #~ "memajukan desktop Linux. Bazaar juga memberi ruang distributor untuk " #~ "melakukan kurasi aplikasi \"pilihan\" untuk pengguna. " #~ msgid "_Synchronize Remotes" #~ msgstr "_Sinkronkan Dengan Server" #~ msgid "Synchronizing..." #~ msgstr "Mengsinkronkan..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "%d entri tersisa..." #~ msgid "Indexing Data..." #~ msgstr "Mengindeks Data..." #~ msgid "Install Other Version" #~ msgstr "Pasang Versi Lain" #~ msgid "Keep Data" #~ msgstr "Simpan Data" #~ msgid "Open App" #~ msgstr "Buka Aplikasi" #~ msgid "Refreshing Store Content" #~ msgstr "Memuat Ulang Konten Bazaar" #~ msgid "No background tasks!" #~ msgstr "Tidak ada proses latar belakang!" #~ msgctxt "shortcut window" #~ msgid "Synchronize Remotes" #~ msgstr "Sinkronkan Dengan Server" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Keluar" #~ msgid "Nucleus app page" #~ msgstr "Tampilan halaman detail aplikasi" #~ msgid "Close" #~ msgstr "Tutup" #~ msgid "Copy and Close" #~ msgstr "Salin dan Tutup" #~ msgid "Toggle transaction sidebar" #~ msgstr "Tampil/sembunyikan bilah samping transaksi" #~ msgid "Install Size" #~ msgstr "Ukuran Terpasang" #~ msgid "Ongoing" #~ msgstr "Saat Ini" #~ msgid "Finished" #~ msgstr "Selesai" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "Telah mentransfer %s sejauh ini" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d Pemutakhiran Tersedia" #~ msgid "Updates Are Available" #~ msgstr "Terdapat Pemutakhiran" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Aplikasi berikut memiliki pemutakhiran. Apakah anda ingin memasangnya?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "%d tempokerja dan/atau modul tambahan memiliki pemutakhiran. Apakah Anda " #~ "ingin memasangnya?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "" #~ "Selain itu, %d tempokerja dan/atau modul tambahan akan dimutakhirkan." #~ msgid "Update Now" #~ msgstr "Mutakhirkan Sekarang" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Tampilkan/sembunyikan Manajer Transaksi" #~ msgid "Hide EOL Entries" #~ msgstr "Sembunyikan Aplikasi Tanpa Dukungan" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "Sembunyikan aplikasi dan dependensi tanpa dukungan mutakhir" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Tunjukkan Jumlah Bintang Repo" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "" #~ "Deteksi dan tampilkan data \"jumlah bintang\" repositori git saat memuat " #~ "halaman detail aplikasi" #~ msgid "Only Show Free Software" #~ msgstr "Sembunyikan Aplikasi Sumber Tertutup" #~ msgid "Hide proprietary software" #~ msgstr "Hanya tampilkan aplikasi dengan lisensi sumber terbuka" #~ msgid "Debounce Search Inputs" #~ msgstr "Tunda Masukan Pencarian" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "Tunda masukan saat mengetik untuk mencegah hasil pencarian muncul terlalu " #~ "cepat" #~ msgid "Global Progress Bar Theme" #~ msgstr "Tema Bilah Kemajuan" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Pilih tampilan bilah kemajuan Bazaar" #~ msgid "Saved Window Dimensions" #~ msgstr "Dimensi Jendela Tersimpan" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "Dimensi jendela saat membuka jendela Bazaar berikutnya" #~ msgid "?" #~ msgstr "?" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s cocok untuk usia batita" #~ msgid "--- MB" #~ msgstr "--- MB" #~ msgid "Of the size of human DNA" #~ msgstr "Dari ukuran DNA manusia" #~ msgid "3 billion base pairs" #~ msgstr "3 miliar pasangan basa" #~ msgid "Of the Linux Kernel" #~ msgstr "Dari ukuran kernel Linux" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "Dari ukuran RAM dan ROM komputer pemandu Apollo 11" #~ msgid "Total ROM and RAM" #~ msgstr "Pada misi pendaratan manusia pertama di Bulan" #~ msgid "Of the original Super Mario Bros" #~ msgstr "Dari ukuran gim Super Mario Bros asli" #~ msgid "On the NES" #~ msgstr "pada konsol NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "Dari ukuran seluruh artikel Wikipedia" #~ msgid "Without any media" #~ msgstr "Tanpa file media sama sekali" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "Fitur ini sedang dinonaktifkan. Silahkan unduh dan pasang Flatseal untuk " #~ "mengatur perizinan aplikasi. " #~ msgid "Entry Inspector" #~ msgstr "Periksa Masukan" #~ msgid "Serialize" #~ msgstr "Serialisasikan" #~ msgid "Convert to JSON" #~ msgstr "Ubah ke JSON" #~ msgid "More Mobile apps" #~ msgstr "Aplikasi Ponsel lainnya" #~ msgid "We ♥ Games" #~ msgstr "Kami ♥ Main" #~ msgid "Repository Star Count" #~ msgstr "Jumlah Bintang Repositori" #, c-format #~ msgid "%.2fM" #~ msgstr "%.2fM" #, c-format #~ msgid "%.2fK" #~ msgstr "%.2fK" #~ msgid "Bazaar Inspector" #~ msgstr "Pemeriksa Bazaar" #~ msgid "Enable Global Debug Mode" #~ msgstr "Nyalakan Mode Debug Global" #~ msgid "Active Blocklists" #~ msgstr "Daftar Blok Aktif" #~ msgid "Active Curated-Configs" #~ msgstr "Konfigurasi Kurasi Aktif" #~ msgid "All Entry Groups" #~ msgstr "Seluruh Grup Masukan" #~ msgid "Filter..." #~ msgstr "Saring..." #~ msgid "Decache and Inspect" #~ msgstr "Hapus Cache dan Periksa" #~ msgid "No Flatpaks Installed" #~ msgstr "Tidak Ada Flatpak Terpasang" #~ msgid "Application Details" #~ msgstr "Detail Aplikasi" #~ msgid "Display Star Count" #~ msgstr "Tunjukkan Jumlah Bintang Repo" #~ msgid "Show the star count of an application's source code repository" #~ msgstr "Tunjukkan jumlah bintang dari repositori sumber aplikasi" #~ msgid "" #~ "Bazaar can fetch and display the star count from an application's source " #~ "code repository on a remote Git forge. \n" #~ " For projects on GitHub, rate limits may cause them not to appear." #~ msgstr "" #~ "Bazaar dapat mengambil dan menampilkan jumlah bintang dari repositori Git " #~ "sumber kode aplikasi.\n" #~ "Untuk aplikasi dari GitHub, terdapat potensi terbatasnya muatan yang " #~ "mungkin menghambat munculnya data ini." #~ msgid "Inspect UI Entry" #~ msgstr "Periksa Masukan Antarmuka" #~ msgid "All Debug Actions" #~ msgstr "Semua Tindakan Debug" #~ msgid "Tasks" #~ msgstr "Proses" #~ msgid "Stop Active Tasks" #~ msgstr "Hentikan Proses Aktif" #~ msgid "No Tasks Yet" #~ msgstr "Tidak ada proses berlangsung" #~ msgid "Sync" #~ msgstr "Sinkronisasi" #~ msgid "Open Bazaar Inspector" #~ msgstr "Buka Pemeriksa Bazaar" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "Kemampuan membuka dan memasang file .flatpak secara lokal segera hadir! " #~ "Saat ini, coba jalankan\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "pada baris perintah." #~ msgid "Resume Current Tasks" #~ msgstr "Lanjutkan Proses Ini" #~ msgid "Pause Current Tasks" #~ msgstr "Jeda Proses Ini" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u unduhan" #~ msgid "Show Animated Background" #~ msgstr "Tampilkan Animasi Latar Belakang" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Tampilkan animasi ikon latar belakang pada halaman utama" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "Buat ringkasan pendek berkisar antara 10-35 karakter" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Jendela utama Bazaar yang menampilkan Blender" #~ msgid "This flatpak is verified by the original developers of the software." #~ msgstr "Flatpak ini telah diverifikasi oleh pengembang perangkat lunak asli" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore" #~ msgstr "Jill Fiore" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "Konfigurasi kurasi konten Bazaar saat ini belum tersedia. Hubungi sistem " #~ "operasi anda untuk mendukung fitur ini." #~ msgid "Apps Of The Week" #~ msgstr "Aplikasi Minggu Ini" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "Jumlah unduhan pada 30 hari terakhir. Klik untuk melihat statistik " #~ "unduhan aplikasi ini." #~ msgid "Remote repo name" #~ msgstr "Nama repo remote" #~ msgid "How the application looks" #~ msgstr "Tampilan aplikasi" #~ msgid "Appearance" #~ msgstr "Tampilan" #~ msgid "Show animated background" #~ msgstr "Tampilkan animasi latar belakang" #~ msgid "Type to filter" #~ msgstr "Ketik untuk mencari" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Sembunyikan aplikasi berlisensi proprietari" #~ msgid "Advanced" #~ msgstr "Opsi Lanjutan" #~ msgid "Match using regular expressions" #~ msgstr "Cocokkan dengan ekspresi reguler (regex)" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "Sembunyikan hasil pencarian dan sortir di balik transisi pemuatan" #~ msgid "Share" #~ msgstr "Bagikan" #~ msgid "Open this link externally" #~ msgstr "Buka tautan ini secara eksternal" #~ msgid "Downloads Over Time" #~ msgstr "Unduhan seiring waktu" #~ msgid "Minimize Lower Bound" #~ msgstr "Perkecil batas bawah" #~ msgid "Maximize Upper Bound" #~ msgstr "Perbesar batas atas" #~ msgid "Installing" #~ msgstr "Sedang dipasang" #~ msgid "Removing" #~ msgstr "Sedang dihapus" #~ msgid "Transactions Will Appear Here" #~ msgstr "Transaksi akan muncul di sini" #~ msgid "Halt the execution of transactions" #~ msgstr "Hentikan proses transaksi" #~ msgid "Browse" #~ msgstr "Telusuri" #~ msgid "App View" #~ msgstr "Tampilan Aplikasi" #~ msgid "Go Back" #~ msgstr "Kembali" #~ msgid "View curated applications" #~ msgstr "Lihat aplikasi pilihan" #~ msgid "View the latest on Flathub" #~ msgstr "Lihat yang terbaru dari Flathub" #~ msgid "Up to date!" #~ msgstr "Versi terkini sudah dimuat!" #~ msgid "Confirm Action" #~ msgstr "Konfirmasi Aksi" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Anda akan menghapus Flatpak berikut:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Apakah Anda yakin?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Anda akan memasang Flatpak berikut:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Apakah Anda yakin?" #~ msgid "Resume the execution of transactions" #~ msgstr "Lanjutkan proses transaksi" #~ msgid "Pause the execution of transactions" #~ msgstr "Hentikan sementara proses transaksi" bazaar-org-bazaar-b6e9a65/po/it.po000066400000000000000000001317541522167256300170360ustar00rootroot00000000000000# Italian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Pietro F. , 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-11 10:39+0100\n" "PO-Revision-Date: 2025-11-11 11:25+0100\n" "Last-Translator: Pietro F. \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: Gtranslator 49.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 #: src/bz-window.blp:225 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "" "Aggiunge, rimuove o aggiorna le applicazioni flatpak su questo computer" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Hide EOL Entries" msgstr "Nascondi voci EOL" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Hide EOL entries and entries depending on them" msgstr "Nascondi voci EOL e voci che dipendono da esse" #: data/io.github.kolunmi.Bazaar.gschema.xml:11 msgid "Show Git Forge Star Counts" msgstr "Mostra il numero di stelle su Git Forge" #: data/io.github.kolunmi.Bazaar.gschema.xml:12 msgid "" "Whether to attempt to detect and show \"star counts\" for projects in the " "full view" msgstr "" "Se tentare di rilevare e mostrare il “numero di stelle” per i progetti nella " "vista completa" #: data/io.github.kolunmi.Bazaar.gschema.xml:16 msgid "Only Show Free Software" msgstr "Mostra solo Free Software" #: data/io.github.kolunmi.Bazaar.gschema.xml:17 msgid "Hide proprietary software when searching" msgstr "nascondi software proprietario durante la ricerca" #: data/io.github.kolunmi.Bazaar.gschema.xml:21 msgid "Show Only Flathub Content" msgstr "Mostra solo i contenuti di Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:22 msgid "Filter search results to only show applications available on Flathub" msgstr "" "Filtra i risultati della ricerca per mostrare solo le applicazioni " "disponibili su Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:26 msgid "Debounce Search Inputs" msgstr "Ricerca senza rimbalzo" #: data/io.github.kolunmi.Bazaar.gschema.xml:27 msgid "Add a delay before searching to prevent instant replies while typing" msgstr "" "Aggiungere un ritardo nell'elaborazione dei dati per evitare risultati " "immediati" #: data/io.github.kolunmi.Bazaar.gschema.xml:45 msgid "Global Progress Bar Theme" msgstr "Tema barra di avanzamento globale" #: data/io.github.kolunmi.Bazaar.gschema.xml:46 msgid "Describes the look of the global progress bar" msgstr "Descrive l'aspetto della barra di avanzamento globale" #: data/io.github.kolunmi.Bazaar.gschema.xml:50 msgid "Saved Window Dimensions" msgstr "Dimensioni finestra salvate" #: data/io.github.kolunmi.Bazaar.gschema.xml:51 msgid "The window dimensions to be used by the next Bazaar window" msgstr "" "Le dimensioni della finestra da utilizzare per la prossima finestra Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Scopri e installa applicazioni" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for GNOME with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Un nuovo app store per GNOME incentrato sulla ricerca e l'installazione di " "applicazioni e componenti aggiuntivi dai repository remoti Flatpak, in " "particolare Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "Sottolinea l'importanza di supportare gli sviluppatori che rendono possibile " "il desktop Linux. Bazaar presenta una scheda “Consigliate” che può essere " "configurata dai distributori per consentire un'esperienza più personalizzata." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:494 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home page displaying Flathub apps" msgstr "La schermata iniziale che mostra le app di Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Nucleus app page" msgstr "Pagina dell'app Nucleus" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Search page" msgstr "Pagina di Ricerca" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Category page" msgstr "Pagina delle Categorie" #: src/bz-addons-dialog.blp:14 src/bz-full-view.blp:582 msgid "Manage Add-ons" msgstr "Gestisce estensioni" #: src/bz-addons-dialog.c:88 src/bz-transaction-view.blp:212 #: src/bz-window.c:1101 msgid "Remove" msgstr "Rimuovi" #: src/bz-addons-dialog.c:93 src/bz-full-view.blp:289 #: src/bz-transaction-view.blp:186 src/bz-window.c:1077 msgid "Install" msgstr "Installa" #: src/bz-app-size-dialog.c:55 msgid "Of the size of human DNA" msgstr "Delle dimensioni del DNA umano" #: src/bz-app-size-dialog.c:55 msgid "3 billion base pairs" msgstr "3 miliardi di coppie di basi" #: src/bz-app-size-dialog.c:56 msgid "Of the Linux Kernel" msgstr "Del kernel Linux" #: src/bz-app-size-dialog.c:56 msgid "linux-6.17.tar.xz" msgstr "linux-6.17.tar.xz" #: src/bz-app-size-dialog.c:57 msgid "Of the Apollo 11 guidance computer" msgstr "Del computer di bordo dell'Apollo 11" #: src/bz-app-size-dialog.c:57 msgid "Total ROM and RAM" msgstr "ROM e RAM totali" #: src/bz-app-size-dialog.c:58 msgid "Of the original Super Mario Bros" msgstr "Dell'originale Super Mario Bros." #: src/bz-app-size-dialog.c:58 msgid "On the NES" msgstr "Su NES" #: src/bz-app-size-dialog.c:59 msgid "Of the size of Wikipedia" msgstr "Delle dimensioni di Wikipedia" #: src/bz-app-size-dialog.c:59 msgid "Without any media" msgstr "Senza alcun media" #: src/bz-app-size-dialog.blp:43 msgid "--- MB" msgstr "--- MB" #: src/bz-app-size-dialog.blp:53 msgid "Download Size" msgstr "Dimensione Download" #: src/bz-application.c:416 msgid "" "This functionality is currently disabled. It is recommended you download and " "install Flatseal to manage app permissions." msgstr "" "Questa funzionalità è attualmente disabilitata. Si consiglia di scaricare e " "installare Flatseal per gestire le autorizzazioni delle app." #: src/bz-application.c:479 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:480 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:497 msgid "translator-credits" msgstr "Pietro F. , 2025" #: src/bz-application.c:1069 msgid "Constructing Flatpak instance..." msgstr "Creazione dell'istanza Flatpak..." #: src/bz-application.c:1086 msgid "Reusing last Flatpak instance..." msgstr "Riutilizzo dell'ultima istanza Flatpak..." #: src/bz-application.c:1111 msgid "Flathub is not registered on this system" msgstr "Flathub non è registrato su questo sistema" #: src/bz-application.c:1114 msgid "" "Would you like to add Flathub as a remote? If you decline, the Flathub page " "will not be available. You can change this later." msgstr "" "Vuoi aggiungere Flathub come repository remoto? Se rifiuti, la pagina " "Flathub non sarà disponibile. Puoi cambiare questa impostazione in un " "secondo momento." #: src/bz-application.c:1119 src/bz-update-dialog.blp:6 msgid "Later" msgstr "Dopo" #: src/bz-application.c:1120 msgid "Add Flathub" msgstr "Aggiungi Flathub" #: src/bz-application.c:1152 msgid "Identifying installed entries..." msgstr "Identificazione delle voci installate..." #: src/bz-application.c:1176 msgid "Receiving Entries" msgstr "Ricezione delle voci" #: src/bz-application.c:1333 #, c-format msgid "%'d of %'d" msgstr "%'d di %'d" #: src/bz-application.c:1346 #, c-format msgid "Waiting for background indexing tasks to catch up..." msgstr "" "In attesa che le attività di indicizzazione in background vengano " "completate..." #: src/bz-application.c:1388 #, c-format msgid "Completed initialization in %0.2f seconds" msgstr "Inizializzazione completata in %0.2f secondi" #: src/bz-application.c:1393 src/bz-application.c:1548 msgid "Checking for updates..." msgstr "Controllo degli aggiornamenti..." #: src/bz-application.c:1432 msgid "Synchronizing..." msgstr "Sincronizzazione..." #: src/bz-browse-widget.blp:11 src/bz-flathub-page.blp:19 #: src/bz-full-view.blp:53 src/bz-installed-page.blp:15 src/bz-window.blp:174 msgid "Empty" msgstr "Vuoto" #: src/bz-browse-widget.blp:15 msgid "No Curation" msgstr "Non ci sono Applicazioni Consigliate" #: src/bz-browse-widget.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Non sono disponibili informazioni sulle app consigliate per questo sistema. " "È comunque possibile sfogliare le applicazioni su Flathub" #: src/bz-browse-widget.blp:18 msgid "Browse Flathub" msgstr "Esplora Flathub" #: src/bz-browse-widget.blp:29 src/bz-browse-widget.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Nessuna connessione" #: src/bz-browse-widget.blp:39 src/bz-flathub-page.blp:40 msgid "Browser" msgstr "Browser" #: src/bz-entry-inspector.blp:5 msgid "Entry Inspector" msgstr "Ispettore delle voci" #: src/bz-entry-inspector.blp:76 msgid "Serialize" msgstr "Serializza" #: src/bz-entry-inspector.blp:80 msgid "Convert to JSON" msgstr "Converti in JSON" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Si è verificato un errore" #: src/bz-error.c:89 msgid "Close" msgstr "Chiudi" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Copia e Chiudi" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "App del Giorno" #: src/bz-flathub-category.c:66 msgid "Audio & Video" msgstr "Audio & Video" #: src/bz-flathub-category.c:66 msgid "Media" msgstr "Media" #: src/bz-flathub-category.c:66 msgid "More Audio & Video" msgstr "Più Audio & Video" #: src/bz-flathub-category.c:67 msgid "Developer Tools" msgstr "Strumenti per Sviluppatori" #: src/bz-flathub-category.c:67 msgid "Develop" msgstr "Sviluppa" #: src/bz-flathub-category.c:67 msgid "More Developer Tools" msgstr "Più Strumenti per Sviluppatori" #: src/bz-flathub-category.c:68 msgid "Education" msgstr "Educazione" #: src/bz-flathub-category.c:68 msgid "Learn" msgstr "Impara" #: src/bz-flathub-category.c:68 msgid "More Education" msgstr "Più Educazione" #: src/bz-flathub-category.c:69 msgid "Gaming" msgstr "Gaming" #: src/bz-flathub-category.c:69 msgid "Play" msgstr "Gioca" #: src/bz-flathub-category.c:69 msgid "More Gaming" msgstr "Più Gaming" #: src/bz-flathub-category.c:70 msgid "Graphics & Photography" msgstr "Grafica & Fotografia" #: src/bz-flathub-category.c:70 msgid "Create" msgstr "Crea" #: src/bz-flathub-category.c:70 msgid "More Graphics & Photography" msgstr "Più Grafica & Fotografia" #: src/bz-flathub-category.c:71 msgid "Networking" msgstr "Networking" #: src/bz-flathub-category.c:71 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:71 msgid "More Networking" msgstr "Più Networking" #: src/bz-flathub-category.c:72 msgid "Productivity" msgstr "Produttività" #: src/bz-flathub-category.c:72 msgid "Work" msgstr "Lavoro" #: src/bz-flathub-category.c:72 msgid "More Productivity" msgstr "Più Produttività" #: src/bz-flathub-category.c:73 msgid "Science" msgstr "Scienza" #: src/bz-flathub-category.c:73 msgid "More Science" msgstr "Più Scienza" #: src/bz-flathub-category.c:74 msgid "System" msgstr "Sistema" #: src/bz-flathub-category.c:74 msgid "More System" msgstr "Più Sistema" #: src/bz-flathub-category.c:75 msgid "Utilities" msgstr "Utilità" #: src/bz-flathub-category.c:75 msgid "Tools" msgstr "Strumenti" #: src/bz-flathub-category.c:75 msgid "More Utilities" msgstr "Più Utilità" #: src/bz-flathub-category.c:76 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:142 msgid "Trending" msgstr "In Tendenza" #: src/bz-flathub-category.c:76 msgid "More Trending" msgstr "Più In Tendenza" #: src/bz-flathub-category.c:77 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:175 msgid "Popular" msgstr "Popolari" #: src/bz-flathub-category.c:77 msgid "More Popular" msgstr "Più Popolari" #: src/bz-flathub-category.c:78 src/bz-flathub-page.blp:164 msgid "Recently Added" msgstr "Aggiunte Recentemente" #: src/bz-flathub-category.c:78 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nuove" #: src/bz-flathub-category.c:78 msgid "More New" msgstr "Più Nuove" #: src/bz-flathub-category.c:79 src/bz-flathub-page.blp:153 msgid "Recently Updated" msgstr "Aggiornate Recentemente" #: src/bz-flathub-category.c:79 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Aggiornate" #: src/bz-flathub-category.c:79 msgid "More Updated" msgstr "Più Aggiornate Recentemente" #: src/bz-flathub-category.c:80 msgid "Mobile" msgstr "Mobile" #: src/bz-flathub-category.c:80 msgid "More Mobile" msgstr "Più Mobile" #: src/bz-flathub-category-section.c:132 src/bz-search-widget.c:314 #, c-format msgid "%d applications" msgstr "%d applicazioni" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub non aggiunto" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "Il repository remoto Flathub non è stato trovato in nessuna delle tue " "installazioni Flatpak" #: src/bz-flathub-page.blp:48 msgid "Flathub Unavailable" msgstr "Flathub non disponibile" #: src/bz-flathub-page.blp:49 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "Impossibile connettersi a Flathub. È comunque possibile gestire e cercare le " "applicazioni." #: src/bz-flathub-page.blp:52 msgid "Search Apps" msgstr "Cerca Applicazioni" #: src/bz-flathub-page.blp:266 msgid "On the go" msgstr "On the go" #: src/bz-flathub-page.blp:278 msgid "Apps for your Linux phones and tablets" msgstr "App per il tuo telefono o tablet Linux" #: src/bz-flathub-page.blp:289 src/bz-flathub-page.blp:324 msgid "More Mobile apps" msgstr "Più App Mobile" #: src/bz-flathub-page.c:204 msgid "Mobile Apps" msgstr "App Mobile" #: src/bz-flatpak-entry.c:554 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Pagina Flathub" #: src/bz-flatpak-entry.c:575 msgctxt "Project URL Type" msgid "Project Website" msgstr "Sito del Progetto" #: src/bz-flatpak-entry.c:579 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Segnala un problema" #: src/bz-flatpak-entry.c:583 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-flatpak-entry.c:587 msgctxt "Project URL Type" msgid "Help" msgstr "Aiuto" #: src/bz-flatpak-entry.c:591 msgctxt "Project URL Type" msgid "Donate" msgstr "Dona" #: src/bz-flatpak-entry.c:597 msgctxt "Project URL Type" msgid "Translate" msgstr "Traduci" #: src/bz-flatpak-entry.c:601 msgctxt "Project URL Type" msgid "Contact" msgstr "Contatta" #: src/bz-flatpak-entry.c:605 msgctxt "Project URL Type" msgid "Source Code" msgstr "Codice Sorgente" #: src/bz-flatpak-entry.c:611 msgctxt "Project URL Type" msgid "Contribute" msgstr "Contribuisci" #: src/bz-full-view.blp:20 src/bz-window.blp:117 src/bz-window.blp:394 msgid "Toggle transaction sidebar" msgstr "Mostra o Nasconde il menu delle operazioni" #: src/bz-full-view.blp:43 src/bz-window.blp:417 msgid "Main Menu" msgstr "Menu Principale" #: src/bz-full-view.blp:57 msgid "No Results" msgstr "Nessun risultato" #: src/bz-full-view.blp:58 msgid "Try a different search query" msgstr "Prova con una ricerca diversa" #: src/bz-full-view.blp:64 src/bz-window.blp:184 msgid "Content" msgstr "Contenuto" #: src/bz-full-view.blp:196 msgid "Verified by the original developers" msgstr "Verificato dagli sviluppatori originali" #: src/bz-full-view.blp:223 msgid "Support" msgstr "Supporta" #: src/bz-full-view.blp:243 msgid "Repository Star Count" msgstr "Numero di stelle del repository" #: src/bz-full-view.blp:273 msgid "Open" msgstr "Apri" #: src/bz-full-view.blp:286 msgid "Download & Install Application" msgstr "Installa questa applicazione" #: src/bz-full-view.blp:301 msgid "Uninstall Application" msgstr "Disinstalla questa applicazione" #: src/bz-full-view.blp:316 msgid "Install Other Version" msgstr "Installa altra versione" #: src/bz-full-view.blp:340 msgid "Size" msgstr "Peso" #: src/bz-full-view.blp:456 msgid "Downloads /mo" msgstr "Download /mo" #: src/bz-full-view.c:284 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:288 #, c-format msgid "%.2fM" msgstr "%.2fM" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:291 #, c-format msgid "%.2fK" msgstr "%.2fK" #: src/bz-full-view.c:300 #, c-format msgid "%d downloads in the last 30 days" msgstr "%'d download negli ultimi 30 giorni" #: src/bz-full-view.c:321 #, c-format msgid "Download size of %s" msgstr "Dimensioni Download di %s" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-full-view.c:331 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-full-view.c:339 msgid "All Ages" msgstr "Tutte le Età" #: src/bz-full-view.c:341 msgid "Age Rating" msgstr "Fascia d'Età" #: src/bz-full-view.c:349 msgid "Suitable for all ages" msgstr "Adatto per tutte le età" #: src/bz-full-view.c:351 #, c-format msgid "Suitable for ages %d and up" msgstr "Adatto per %d anni in sù" #: src/bz-full-view.c:375 msgid "Unknown" msgstr "Sconosciuto" #: src/bz-full-view.c:378 msgid "Proprietary Software" msgstr "Software Propietario" #: src/bz-full-view.c:382 #, c-format msgid "Free software licensed under %s" msgstr "Free software sotto licenza %s" #: src/bz-full-view.c:390 msgid "Free" msgstr "Free" #: src/bz-full-view.c:390 msgid "Proprietary" msgstr "Propietario" #: src/bz-full-view.c:410 msgid "Adaptive" msgstr "Adattiva" #: src/bz-full-view.c:410 msgid "Desktop Only" msgstr "Solo Desktop" #: src/bz-full-view.c:416 msgid "Works on desktop, tablets, and phones" msgstr "Funziona su desktop, tablet e telefoni" #: src/bz-full-view.c:417 msgid "May not work on mobile devices" msgstr "Potrebbe non funzionare su dispositvi mobili" #: src/bz-full-view.c:428 msgid "No URL" msgstr "Nessun URL" #: src/bz-full-view.c:446 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Questa applicazione ha una licenza FLOSS, il che significa che il codice " "sorgente può essere controllato per sicurezza." #: src/bz-full-view.c:447 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Questa applicazione ha una licenza proprietaria, il che significa che il " "codice sorgente è sviluppato privatamente e non può essere verificato da una " "terza parte indipendente." #: src/bz-full-view.c:454 msgid "Other Apps by this Developer" msgstr "Altre App di questo Sviluppatore" #: src/bz-full-view.c:456 #, c-format msgid "Other Apps by %s" msgstr "Altre App di %s" #: src/bz-full-view.c:828 msgid "Show Less" msgstr "Mostra di meno" #: src/bz-full-view.c:828 msgid "Show More" msgstr "Mostra di più" #: src/bz-hardware-support-dialog.c:69 msgid "Keyboard support" msgstr "Supporto per le tastiere" #: src/bz-hardware-support-dialog.c:71 msgid "Requires keyboards" msgstr "Richiede le tastiere" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends keyboards" msgstr "Raccomanda le tastiere" #: src/bz-hardware-support-dialog.c:73 msgid "Supports keyboards" msgstr "Supporto per le tastiere" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for keyboards" msgstr "Supporto sconosciuto per le tastiere" #: src/bz-hardware-support-dialog.c:76 msgid "Mouse support" msgstr "Supporto Mouse" #: src/bz-hardware-support-dialog.c:78 msgid "Requires mice or pointing devices" msgstr "Richiede mouse o dispositivi di puntamento" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends mice or pointing devices" msgstr "Raccomanda mouse o dispositivi di puntamento" #: src/bz-hardware-support-dialog.c:80 msgid "Supports mice or pointing devices" msgstr "Supporto per mouse o dispositivi di puntamento" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for mice or pointing devices" msgstr "Supporto sconosciuto per mouse o dispositivi di puntamento" #: src/bz-hardware-support-dialog.c:83 msgid "Touchscreen support" msgstr "Supporto per schermi touchscreen" #: src/bz-hardware-support-dialog.c:85 msgid "Requires touchscreens" msgstr "Richiede schermi touchscreen" #: src/bz-hardware-support-dialog.c:86 msgid "Recommends touchscreens" msgstr "Raccomanda schermi touchscreen" #: src/bz-hardware-support-dialog.c:87 msgid "Supports touchscreens" msgstr "Supporto touchscreen" #: src/bz-hardware-support-dialog.c:88 msgid "Unknown support for touchscreens" msgstr "Supporto sconosciuto per schermi touchscreen" #: src/bz-hardware-support-dialog.c:192 msgid "Mobile support" msgstr "Supporto per dispositivi mobili" #: src/bz-hardware-support-dialog.c:193 msgid "Works on mobile devices" msgstr "Funziona su dispositivi mobili" #: src/bz-hardware-support-dialog.c:193 msgid "May not work well on mobile devices" msgstr "Potrebbe non funzionare su dispositivi mobili" #: src/bz-hardware-support-dialog.c:198 msgid "Desktop support" msgstr "Supporto Desktop" #: src/bz-hardware-support-dialog.c:199 msgid "Works well on large screens" msgstr "Ottimizzato per grandi schermi" #: src/bz-hardware-support-dialog.c:233 #, c-format msgid "%s works best on specific hardware" msgstr "%s funziona al meglio su hardware specifico" #: src/bz-hardware-support-dialog.c:240 #, c-format msgid "%s works on most devices" msgstr "%s funziona sulla maggior parte dei dispositivi" #: src/bz-hardware-support-dialog.blp:6 src/bz-hardware-support-dialog.blp:47 msgid "Hardware Support" msgstr "Supporto Hardware" #: src/bz-inspector.blp:5 msgid "Bazaar Inspector" msgstr "Ispettore di Bazaar" #: src/bz-inspector.blp:22 msgid "Enable Global Debug Mode" msgstr "Abilita Modalità di Debug globale" #: src/bz-inspector.blp:29 msgid "Active Blocklists" msgstr "Blocklist attive" #: src/bz-inspector.blp:46 msgid "Active Curated-Configs" msgstr "Configurazioni attive per Consigliate" #: src/bz-inspector.blp:64 msgid "All Entry Groups" msgstr "Tutti i gruppi di voci" #: src/bz-inspector.blp:72 msgid "Filter..." msgstr "Filtra..." #: src/bz-inspector.blp:113 msgid "Decache and Inspect" msgstr "Elimina la cache ed Ispeziona" #: src/bz-installed-page.blp:19 msgid "No Flatpaks Installed" msgstr "Nessun Flatpak Installato" #: src/bz-installed-page.blp:25 src/bz-window.blp:319 msgid "Installed" msgstr "Installate" #: src/bz-installed-page.c:406 msgid "Choose an Installation" msgstr "Scegli un installazione" #: src/bz-installed-page.c:409 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with? " msgstr "" "Hai installato più versioni di questa app. Con quale desideri procedere? " #: src/bz-installed-page.c:413 src/bz-window.c:1076 src/bz-window.c:1100 msgid "Cancel" msgstr "Annulla" #: src/bz-license-dialog.c:115 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may not be able to contribute to this app." msgstr "" "Questa app non è sviluppata in modo trasparente, quindi solo i suoi " "sviluppatori sanno come funziona. Potrebbe essere insicura in modi difficili " "da rilevare e potrebbe cambiare senza preavviso o supervisione." #: src/bz-license-dialog.c:124 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Questa app è sviluppata apertamente da una comunità internazionale.\n" "\n" "Puoi partecipare e contribuire a renderla ancora migliore." #: src/bz-license-dialog.c:135 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Questa applicazione è sviluppata apertamente da una comunità internazionale " "e rilasciata con licenza %s.\n" "\n" "Puoi partecipare e contribuire a migliorarla." #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Preferenze" #: src/bz-preferences-dialog.blp:23 src/bz-window.blp:334 msgid "Search" msgstr "Cerca" #: src/bz-preferences-dialog.blp:26 msgid "Free Software Only" msgstr "Solo Free Software" #: src/bz-preferences-dialog.blp:27 msgid "Hide proprietary applications from search results" msgstr "Nascondi applicazioni proprietarie dai risultati di ricerca" #: src/bz-preferences-dialog.blp:31 msgid "Flathub Results Only" msgstr "Solo risultati da Flathub" #: src/bz-preferences-dialog.blp:32 msgid "Limit search results to applications only available on Flathub" msgstr "" "Limita i risultati della ricerca alle applicazioni disponibili su Flathub" #: src/bz-preferences-dialog.blp:36 msgid "Delay Search Results" msgstr "Mostra Risultati di Ricerca" #: src/bz-preferences-dialog.blp:37 msgid "Improve results performance by debouncing search terms" msgstr "" "Migliorare le prestazioni dei risultati applicando il debouncing ai termini " "di ricerca" #: src/bz-preferences-dialog.blp:42 msgid "Application Details" msgstr "Dettagli dell'app" #: src/bz-preferences-dialog.blp:45 msgid "Display Star Count" msgstr "Mostra conteggio stelle" #: src/bz-preferences-dialog.blp:46 msgid "Show the star count of an application's source code repository" msgstr "" "Mostra il numero di stelle del repository del codice sorgente di " "un'applicazione" #: src/bz-preferences-dialog.blp:71 msgid "Progress Bar" msgstr "Barra di avanzamento" #: src/bz-preferences-dialog.blp:72 msgid "Choose a theme for the progress bar!" msgstr "Scegli un tema per la barra di avanzamento!" #: src/bz-preferences-dialog.blp:98 msgid "End of Life Apps" msgstr "App Obsolete" #: src/bz-preferences-dialog.blp:101 msgid "Hide EOL Apps" msgstr "Nascondi App obsolete" #: src/bz-preferences-dialog.blp:102 msgid "Hide apps which are no longer supported by their developers" msgstr "Nascondi le app non più supportate dagli sviluppatori" #: src/bz-preferences-dialog.blp:116 msgid "" "Bazaar can fetch and display the star count from an application's source " "code repository on a remote Git forge. \n" " For projects on GitHub, rate limits may cause them not to appear." msgstr "" "Bazaar può recuperare e visualizzare il numero di stelle dal repository del " "codice sorgente di un'applicazione su una piattaforma Git remota.\n" "Per i progetti su GitHub, i limiti di richieste potrebbero impedirne la " "visualizzazione." #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Colore d'accento" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Colori Pride" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Colori lesbian pride" #: src/bz-preferences-dialog.c:35 msgid "Transgender Pride Colors" msgstr "Colori transgender pride" #: src/bz-preferences-dialog.c:36 msgid "Nonbinary Pride Colors" msgstr "Colori nonbinary pride" #: src/bz-preferences-dialog.c:37 msgid "Bisexual Pride Colors" msgstr "Colori bisexual pride" #: src/bz-preferences-dialog.c:38 msgid "Asexual Pride Colors" msgstr "Colori asexual pride" #: src/bz-preferences-dialog.c:39 msgid "Pansexual Pride Colors" msgstr "" "Non sono disponibili informazioni sulla curatela per questo sistema. È " "comunque possibile sfogliare le applicazioni su Flathub" #: src/bz-preferences-dialog.c:40 msgid "Aromantic Pride Colors" msgstr "Colori aromantic pride" #: src/bz-preferences-dialog.c:41 msgid "Genderfluid Pride Colors" msgstr "Colori genderfluid pride" #: src/bz-preferences-dialog.c:42 msgid "Polysexual Pride Colors" msgstr "Colori polysexual pride" #: src/bz-preferences-dialog.c:43 msgid "Omnisexual Pride Colors" msgstr "Colori omnisexual pride" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:26 msgid "Version History" msgstr "Cronologia delle Versioni" #: src/bz-releases-list.c:128 #, c-format msgid "Version %s" msgstr "Versione %s" #: src/bz-releases-list.c:153 msgid "No details for this release" msgstr "Nessun dettaglio per questa versione" #: src/bz-rich-app-tile.blp:103 msgid "Get" msgstr "Ottieni" #: src/bz-search-widget.blp:105 msgid "Search Apps, Games, Software" msgstr "Cerca App, Giochi, Software" #: src/bz-search-widget.blp:149 msgid "Categories Unavailable" msgstr "Categorie non disponibili" #: src/bz-search-widget.blp:150 msgid "Search for apps using the search bar above." msgstr "Cerca le app digitando nella barra di ricerca superiore." #: src/bz-search-widget.blp:233 msgid "No Applications Found" msgstr "Nessuna Applicazione Trovata" #: src/bz-search-widget.c:225 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Nessun risultato per \"%s\" in Flathub" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "Copiato!" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Copia Link" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Apri Link" #: src/bz-stats-dialog.blp:26 msgid "Timeline" msgstr "Cronologia" #: src/bz-stats-dialog.blp:31 msgid "Installs:" msgstr "Installazioni:" #: src/bz-stats-dialog.blp:37 msgid "World" msgstr "Mondiale" #: src/bz-transaction-manager.c:1140 #, c-format msgid "Finished in %.02f seconds" msgstr "Finito in %.02f secondi" #: src/bz-transaction-view.blp:94 msgid "App Add-on" msgstr "Estensioni dell'App" #: src/bz-transaction-view.blp:119 msgid "Runtime" msgstr "Runtime" #: src/bz-transaction-view.blp:145 src/bz-transaction-view.blp:171 msgid "Install Size" msgstr "Dimensione di Installazione" #: src/bz-transaction-view.blp:199 src/bz-window.blp:355 msgid "Update" msgstr "Aggiorna" #: src/bz-transaction-view.c:139 #, c-format msgid "Transferred %s so far" msgstr "Trasferito %s finora" #: src/bz-transaction.c:336 msgid "Pending" msgstr "In attesa" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "Installa ora" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "Sono disponibili aggiornamenti" #: src/bz-update-dialog.blp:11 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "Le seguenti applicazioni possono essere aggiornate. Vuoi installarle?" #: src/bz-update-dialog.c:134 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "%d I runtime e/o i componenti aggiuntivi possono essere aggiornati. Vuoi " "installarli?" #: src/bz-update-dialog.c:142 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "Inoltre, verranno aggiornati %d runtime e/o componenti aggiuntivi." #: src/bz-window.blp:66 msgid "Inspect UI Entry" msgstr "Ispeziona voci UI" #: src/bz-window.blp:73 msgid "All Debug Actions" msgstr "Tutte le Azioni di Debug" #: src/bz-window.blp:98 msgid "Tasks" msgstr "Attività" #: src/bz-window.blp:154 msgid "Stop Active Tasks" msgstr "Interrompi attività attive" #: src/bz-window.blp:162 msgid "Clear History" msgstr "Cancella cronologia" #: src/bz-window.blp:178 msgid "No Tasks Yet" msgstr "Nessuna attività ancora" #: src/bz-window.blp:293 msgid "Curated" msgstr "Consigliate" #: src/bz-window.blp:306 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:481 msgid "_Donate to Bazaar ❤️" msgstr "_Dona a Bazaar ❤️" #: src/bz-window.blp:486 msgid "_Refresh Content" msgstr "_Ricarica Contenuto" #: src/bz-window.blp:493 msgid "_Preferences" msgstr "_Preferenze" #: src/bz-window.blp:498 msgid "_Keyboard Shortcuts" msgstr "_Scorciatoie da tastiera" #: src/bz-window.blp:503 msgid "_About Bazaar" msgstr "_Info su Bazaar" #: src/bz-window.blp:510 msgid "_Quit Bazaar" msgstr "_Chiude Bazaar" #: src/bz-window.blp:519 msgid "Open Bazaar Inspector" msgstr "Apri Ispettore di Bazaar" #: src/bz-window.c:819 msgid "" "The ability to inspect and install local .flatpak bundle files is coming " "soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "La possibilità di ispezionare e installare i file bundle .flatpak locali è " "in arrivo! Nel frattempo, provate a eseguire\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "alla riga di comando." #: src/bz-window.c:941 msgid "Can't do that right now!" msgstr "Non posso farlo adesso!" #: src/bz-window.c:1070 #, c-format msgid "Install %s?" msgstr "Installare %s?" #: src/bz-window.c:1073 msgid "May install additional shared components" msgstr "È possibile installare componenti condivisi aggiuntivi" #: src/bz-window.c:1092 #, c-format msgid "Remove %s?" msgstr "Rimuovere %s?" #: src/bz-window.c:1096 #, c-format msgid "" "It will not be possible to use %s after it is uninstalled.\n" "\n" "Settings and user data will be kept." msgstr "" "Non sarà possibile usare %s dopo la disinstallazione.\n" "\n" "Le impostazioni e i dati utente verranno conservati." #: src/bz-window.c:1262 msgid "Resume Current Tasks" msgstr "Riprendi attività correnti" #: src/bz-window.c:1268 msgid "Pause Current Tasks" msgstr "Sospendi attività correnti" #: src/bz-world-map.c:523 #, c-format msgid "%s: %'u downloads" msgstr "%s: %'u download" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Generali" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Apre la barra di ricerca" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Apri le Preferenze" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "Ricarica" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Mostra o Nasconde menu delle operazioni" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostra scorciatoie da tastiera" #: src/gtk/shortcuts-dialog.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "Esce" #~ msgid "Searching for Blender" #~ msgstr "Ricerca di Blender" #~ msgid "Manage Addons" #~ msgstr "Gestione delle estensioni" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Azenyr" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "João Victor (Leal)" #~ msgstr "João Victor (Leal)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Léane GRASSER" #~ msgstr "Léane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel Mrówka (Microwave)" #~ msgstr "Marcel Mrówka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "camegone" #~ msgstr "camegone" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "Avvio recupero delle voci remote facendo riferimento a %d blocklist..." #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "Non è stata fornita alcuna configurazione di contenuti consigliati per " #~ "Bazaar. Per assistenza, contattare il supporto del sistema operativo." #~ msgid "Games" #~ msgstr "Giochi" #~ msgid "Graphics" #~ msgstr "Grafica e Fotografia" #~ msgid "Office" #~ msgstr "Produttività" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "Sito del Progetto" #~ msgid "Share this application" #~ msgstr "Condividi questa applicazione" #~ msgid "Excludes shared components" #~ msgstr "Esclude componenti condivisi" #~ msgid "Source code may not be available" #~ msgstr "Il codice sorgente potrebbe non essere disponibile" #~ msgid "Click for details" #~ msgstr "Clicca per maggiori dettagli" #~ msgid "Repositories" #~ msgstr "Repository" #~ msgid "Open in browser" #~ msgstr "Apri nel browser" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "%'d Download Mensili" #~ msgid "%B %-d, %Y" #~ msgstr "%B %-d, %Y" #~ msgid "%B %-d" #~ msgstr "%B %-d" #~ msgid "Support this application" #~ msgstr "Supporta questa applicazione" #~ msgid "Run this application" #~ msgstr "Avvia questa applicazione" #~ msgid "Run" #~ msgstr "Avvia" #~ msgid "View Store Page" #~ msgstr "Mostra dettagli nello Store" #~ msgid "Git Forge Star Counts" #~ msgstr "Numero di stelle Git Forge" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "" #~ "La mancanza di un token di accesso GitHub può causare limiti di velocità" #~ msgid "Show Only Flathub Apps" #~ msgstr "Mostra solo applicazioni da Flathub" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "Attendere una breve pausa per ridurre il carico del sistema." #~ msgid "Theme" #~ msgstr "Tema" #~ msgid "Pride Rainbow Flag" #~ msgstr "Bandiera arcobaleno" #~ msgid "Bisexual Flag" #~ msgstr "Bandiera bisessuale" #~ msgid "Asexual Flag" #~ msgstr "Bandiera asessuale" #~ msgid "Share" #~ msgstr "Condividi" #~ msgid "Error Details" #~ msgstr "Dettagli dell'errore" #~ msgid "Transactions" #~ msgstr "Transazioni" #~ msgid "Loading" #~ msgstr "Caricamento" #~ msgid "Browse" #~ msgstr "Esplora" #~ msgid "App View" #~ msgstr "Vista dell'App" #~ msgid "Go Back" #~ msgstr "Vai indietro" #~ msgid "View curated applications" #~ msgstr "Visualizza applicazioni consigliate" #~ msgid "View the latest on Flathub" #~ msgstr "Visualizza le ultime novità di Flathub" #~ msgid "View installed applications" #~ msgstr "Visualizza applicazioni installate" #~ msgid "_Quit Service" #~ msgstr "_Esce dal servizio" #~ msgid "Up to date!" #~ msgstr "Aggiornato!" #~ msgid "Settings & user data will be kept" #~ msgstr "Le impostazioni e i dati utente saranno conservati" #~ msgid "Calligraphy application page" #~ msgstr "Pagina dell'applicazione Calligraphy" #~ msgid "Download graph for Blender" #~ msgstr "Grafico dei download di Blender" #~ msgid "Open this image in the default image viewer" #~ msgstr "Apri questa immagine nel visualizzatore di immagini di default" #~ msgid "Copy this image to the clipboard" #~ msgstr "Copia questa immagine negli appunti" #~ msgid "App Details" #~ msgstr "Dettagli dell'app" #~ msgid "License" #~ msgstr "Licenza" #~ msgid "Download Statistics" #~ msgstr "Statistiche di Download" #~ msgid "Show Downloads Over Time" #~ msgstr "Mostra download nel tempo" #~ msgid "Remote repo name" #~ msgstr "Nome del repository remoto" #~ msgid "Updated Size" #~ msgstr "Dimensione dell'aggiornamento" #~ msgid "Freed Space" #~ msgstr "Spazio liberato" #~ msgid "Transactions Will Appear Here" #~ msgstr "Le operazioni appariranno qui" #~ msgid "Halt the execution of transactions" #~ msgstr "Ferma l'esecuzione delle operazioni" #~ msgid "Clear all finished transactions" #~ msgstr "Cancella tutte le operazioni completate" #~ msgid "Resume the execution of transactions" #~ msgstr "Riprende l'esecuzione delle operazioni" #~ msgid "Pause the execution of transactions" #~ msgstr "Mette in pausa l'esecuzione delle operazioni" #~ msgid "Downloads Over Time" #~ msgstr "Download nel tempo" #~ msgid "Confirm Action" #~ msgstr "Conferma Azione" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Stai per disinstallare il seguente Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sei sicuro?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Stai per installare il seguente Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Sei sicuro?" #~ msgid "Apps Of The Week" #~ msgstr "Applicazioni della Settimana" #, c-format #~ msgid "Released %x" #~ msgstr "Rilasciata il %x" #~ msgid "Minimize Lower Bound" #~ msgstr "Minimizzare il limite inferiore" #~ msgid "Maximize Upper Bound" #~ msgstr "Massimizzare il limite superiore" #~ msgctxt "Project URL Type" #~ msgid "VCS Browser" #~ msgstr "Sfoglia il codice sorgente" #~ msgid "Full Application View" #~ msgstr "Vista completa dell'applicazione" #~ msgid "Change what content is shown when viewing applications" #~ msgstr "" #~ "Modifica i contenuti visualizzati durante la visualizzazione delle " #~ "applicazioni" #~ msgid "" #~ "If you do not have an access token, turning this setting on may cause " #~ "GitHub to eventually rate limit you." #~ msgstr "" #~ "Se non disponi di un token di accesso, attivando questa impostazione " #~ "GitHub potrebbe eventualmente limitare la tua velocità di accesso." #~ msgid "Type to filter" #~ msgstr "Digita per cercare" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Escludi risultati con licenza proprietaria" #~ msgid "Exclude results not originating from Flathub" #~ msgstr "Escludi risultati non provenienti da Flathub" #~ msgid "Advanced" #~ msgstr "Avanzate" #~ msgid "Open this link externally" #~ msgstr "Aprire questo link in un'applicazione esterna" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "Ricevute %'d voci su %'d (%.1f secondi trascorsi)" #~ msgid "Finished Tasks" #~ msgstr "Operazioni Completate" #, c-format #~ msgid "%s to install" #~ msgstr "%s da installare" #~ msgid "Open in Image Viewer" #~ msgstr "Apri nel Visualizzatore Immagini" #~ msgid "Installing" #~ msgstr "Installazione" #~ msgid "Updating" #~ msgstr "Aggiornamento" #~ msgid "Removing" #~ msgstr "Rimozione" #~ msgid "Show Animated Background" #~ msgstr "Mostra sfondo animato" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Mostrare o nascondere lo sfondo animato sulla pagina iniziale" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "Il numero di download negli ultimi 30 giorni. Clicca per vedere le " #~ "statistiche." #~ msgid "This application does not provide a donation link" #~ msgstr "Questa applicazione non fornisce un link per le donazioni" #~ msgid "Edit Permissions" #~ msgstr "Modifica le autorizzazioni" #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try looking at their project page for " #~ "more information." #~ msgstr "" #~ "“%s” non fornisce un link per le donazioni. Ciò non significa che non " #~ "puoi sostenerli! Prova a consultare la loro pagina del " #~ "progetto per ulteriori informazioni." #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try finding their project page for more information." #~ msgstr "" #~ "“%s” non fornisce un link per le donazioni. Ciò non significa che non " #~ "puoi sostenerli! Prova a cercare la pagina del loro progetto per " #~ "ulteriori informazioni." #~ msgid "How the application looks" #~ msgstr "Aspetto dell'applicazione" #~ msgid "Appearance" #~ msgstr "Aspetto" #~ msgid "Show animated background" #~ msgstr "Mostra sfondo animato" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "Mantenere la descrizione breve, tra i 10 e i 35 caratteri." #~ msgid "No description" #~ msgstr "Nessuna descrizione" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Finestra principale di Bazaar nella pagina di Blender" #~ msgid "Match using regular expressions" #~ msgstr "Corrispondenza tramite espressioni regolari" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "" #~ "Nascondere il filtro e l'ordinamento con un effetto di dissolvenza " #~ "incrociata" bazaar-org-bazaar-b6e9a65/po/ja.po000066400000000000000000004132101522167256300170020ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2025 Japanese translations for bazaar package # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025 camegone msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-10 16:41+0900\n" "PO-Revision-Date: 2026-06-10 16:42+0900\n" "Last-Translator: camegone \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.0.1\n" #: data/io.github.kolunmi.Bazaar.desktop.in:3 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:4 msgid "Add, remove or update flatpak software on this computer" msgstr "flatpakのソフトウェアをこのコンピューターに追加、削除します" #: data/io.github.kolunmi.Bazaar.desktop.in:10 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" #: data/io.github.kolunmi.Bazaar.desktop.in:17 msgid "New Window" msgstr "新しいウィンドウ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "アプリケーションを検索したり、管理したりする" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Linux 用の高速で新しいアプリストアです。Flatpak のアプリケーションやアドオン" "を検索、インストールすることに特化していて、主に Flathub を利用します。" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "ダウンロードタスクをキューに入れて、ブラウジングを続行しよう" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "簡単にアプリの権限を表示して、編集する" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Flathub にログインしてお気に入りを管理、表示する" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "GNOME シェルから直接検索する" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Flathub のアプリを表示しているホームページ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Exhibit のアプリページ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "ライブラリーページ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "検索ページ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "カテゴリーページ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:79 msgid "Maintenance Release" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:83 msgid "Add mobile search filter" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:84 msgid "Fix infinite fetching of user data folder size" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:85 msgid "Add Network subcategories" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:86 msgid "Remove tag list SEO-ism" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:87 msgid "Rework some UI components" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:89 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:108 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:133 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:158 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:183 #, fuzzy msgid "Thanks for reading, and have a great day!" msgstr "読んでくれてありがとう! 良い一日を!" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:97 msgid "" "Hot fix for an issue where updates would not show. Also adds a cancel button " "to the app tiles on the search page." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:100 #, fuzzy msgid "Other Fixes" msgstr "バグ修正" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:104 msgid "Fix Flathub page svg graphics being rendered with a solid fill" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:105 msgid "Disable broken graphs for very new Flathub apps" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:106 msgid "Add workaround for KRunner sending broken app IDs" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:116 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:141 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:166 #, fuzzy msgid "New Features" msgstr "バグ修正" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:120 msgid "Add support for installing (.flatpak) bundles" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:121 msgid "New progress indicators" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:122 msgid "The ability to view and delete app caches" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:124 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:149 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:176 #, fuzzy msgid "Fixes" msgstr "バグ修正" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:128 msgid "" "Fix the download context tile not displaying a label for non-Flathub apps" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:129 msgid "Reduce RAM usage when no windows are open" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:130 msgid "" "Fix an issue where a window could open at the wrong size while a transaction " "was running" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:131 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:156 msgid "Many other bug fixes" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:145 msgid "Add support for previewing metainfo files" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:146 msgid "Show total installed apps number in the library view" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:147 msgid "Make exported desktop search provider app icon sizes adjustable" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:153 msgid "Fix download timeline graph rerendering too much" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:154 msgid "Fix animated widget ticks not being in sync with fps" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:155 msgid "Fix progress animation for vertical pride flag stripes" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:170 msgid "Rework the add-ons dialog" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:171 msgid "Add a gradient under the download timeline" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:172 msgid "Add a filter button to the search page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:173 msgid "Add a button to show the EULA for some proprietary apps" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:174 msgid "Make the names of verified developers clickable links" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:180 msgid "Fix the colours of the update card" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:181 msgid "Make the update banner follow the accent colour" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:191 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:223 msgid "Changes" msgstr "変更点" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:195 msgid "Update to GNOME 50 Runtime" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:196 msgid "Force Adwaita icon theme to ensure consistency" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:197 msgid "Add support for clickable links in app descriptions" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:198 msgid "" "Add timed lingering cache to async textures, thereby reducing image " "flickering" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:199 msgid "Add ability to sort installed apps by size in library view" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:200 msgid "Add BAZAAR_N_DOWNLOAD_WORKERS envvar support" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:202 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:232 msgid "Bug Fixes" msgstr "バグ修正" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:206 msgid "Fix double shadow around update cards" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:207 msgid "Fix global progress button displaying a focus ring when invisible" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:208 msgid "Fix incorrect total size displayed on update tasks" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:209 msgid "Fix empty UI when Flathub hasn't finished syncing yet" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:211 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:241 msgid "Thanks for reading and have a great day!" msgstr "読んでくれてありがとう! 良い一日を!" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:219 msgid "" "This release contains many technical improvements. This changelog reflects " "roughly 2 weeks of work." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:227 msgid "Respect system parental controls settings" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:228 msgid "" "Reap download workers when all windows are closed, reducing total memory " "usage" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:229 msgid "Add mnemonics to full app view" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:230 msgid "Many updates to language translations" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:236 msgid "Fix broken library page when backing installed apps model is empty" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:237 msgid "" "Fix int casting bug that was causing RetroDeck to appear to be 18.4 exabytes" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:238 msgid "Make \"all apps\" category pages respect global filters" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:239 msgid "Fix some text wrapping issues" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:249 msgid "This release fixes some bugs and greatly improves search functionality." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:253 msgid "" "If you missed the previous release, in 0.7.9 we also added the ability to " "cancel transactions in the library view, a brand new screenshots carousel, " "search suggestion buttons, and app runtime size information. You can also " "now skip confirmation dialogs by holding shift as you start a transaction." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:260 msgid "Thanks for reading!" msgstr "読んでくれてありがとう!" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:268 msgid "**New Features**" msgstr "**新機能**" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:270 msgid "Search suggestion pills" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:271 #, fuzzy msgid "**Cancel installation** transactions" msgstr "現在進行中のダウンロードを停止" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:272 msgid "Skip dialogs by pressing shift" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:273 msgid "Runtime size info for app pages" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:275 msgid "**Updated**" msgstr "**更新点**" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:277 msgid "Redesigned \"What's New\" dialog" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:278 msgid "Improved search results by utilizing Flathub rankings" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:279 #, fuzzy msgid "Improved screenshots carousel" msgstr "スクリーンショット カルーセル" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:286 msgid "" "This release lets you view and remove user-scoped installed apps from the " "library page in the Flatpak version of the app. Installing from user remotes " "is not supported yet." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:295 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:309 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:331 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:343 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:364 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:383 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:414 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:425 msgid "This release comes with the following improvements:" msgstr "このリリースには以下の改善点が含まれています:" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:297 msgid "Merges the task sidebar and install page into the library page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:298 msgid "Add installed version numbers of each app on the library and app pages" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:299 #, fuzzy msgid "Add donations dialog" msgstr "年齢レーティングダイアログ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:300 msgid "Fix broken addon and runtime eol detection" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:301 msgid "Add `enable-bulk-install` key to curated sections" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:302 msgid "Add `override-eol-markings` main config string list" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:311 msgid "Improve context dialogs" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:312 msgid "Fix leftover data bar being shown prematurely" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:313 msgid "Have a rotation toggle for flags" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:314 msgid "Add hard check to prevent removing Bazaar flatpak" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:315 #, fuzzy msgid "Improve download statistics tooltips" msgstr "ダウンロードの統計" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:316 msgid "Add read support for flatpak bundles" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:317 msgid "Fix critical output sometimes during transactions" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:318 msgid "Fix error popover refusing to spawn in transaction sidebar" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:325 msgid "Minor bugfix release" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:333 msgid "Fix issue where installed page is empty on opening second window" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:334 msgid "Fix screenshot flickering in search results" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:335 msgid "Fix pride flags sometimes not showing on certain locales" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:336 msgid "Add \"Install all\" to favorites page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:345 msgid "Trash user data instead of deleting" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:346 msgid "Tweaks to permissions dialog" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:347 msgid "Fix broken EOL filtering" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:348 msgid "Add text filter to installed page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:349 msgid "" "Add optional translations mappings for string properties in YAML configs" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:350 msgid "Hide EOL apps by default" msgstr "更新終了のアプリをデフォルトで非表示" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:351 msgid "Many other minor bug fixes and improvements" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:358 msgid "" "This small release ensures the new icon is rendered correctly on KDE Plasma." msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:366 msgid "New market stall icon" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:367 msgid "Remove Flathub styling" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:368 msgid "Add horizontal versions of pride flags" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:369 msgid "Text selection in app descriptions can be made across paragraph breaks" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:370 msgid "Support YAML anchors and aliases in config parsing" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:371 msgid "" "Drastically reduce disk cache writes over time by skipping unchanged entries" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:372 msgid "Show background status in popover" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:373 msgid "Add app permission system" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:374 msgid "Add back release URLs" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:375 msgid "Fix sync-remotes action in shortcut dialog" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:376 msgid "Fix visual hiccups in comet animations" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:385 msgid "Flathub account support with the ability to manage bookmarks" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:386 msgid "" "Flathub bookmarks replace star count; you can add or remove bookmarks from " "app pages" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:387 msgid "An \"Only Show Verified\" option" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:388 msgid "Exhaustive category pages for most categories" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:389 msgid "An \"Adwaita\" or \"KDE\" category shown based on desktop environment" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:390 msgid "Updated installed indicator for app tiles" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:391 msgid "3 new flag options" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:392 msgid "Fixed GNOME search provider to show the app page instead of search" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:393 msgid "" "Fixed issue where flatpakref URIs did not open when the app wasn't running " "in the background" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:394 msgid "" "Fixed issue where some proprietary apps were marked as \"Special License\"" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:395 msgid "Fixed issue where graphs did not work with touch" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:402 msgid "" "Another quick release to restore alphabetical sorting on the installed page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:408 msgid "Quick release to allow manual refresh if flathub is being flaky" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:416 msgid "" "Fix frequent disk writes; set refresh frequency to 1 day rather than 1 hour" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:417 msgid "Add \"Delete User Data\" option when uninstalling an application" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:418 msgid "Version cache to prevent incompatibility between Bazaar versions" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:427 msgid "" "Reworked loading to be substantially faster after first start via async " "loading" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:428 msgid "A gaming section on the Flathub page" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:429 msgid "Improved UI on mobile, especially on app pages" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:430 msgid "Verified badges next to most places where apps are shown" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:431 msgid "A popover that explains what verification and non-verification mean" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:432 msgid "An \"other apps by\" page for when a developer has more than 6 apps" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:433 msgid "Tags that show other apps with the same tag when pressed" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:434 msgid "An age rating dialog" msgstr "年齢レーティングダイアログ" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:435 msgid "Changed search filters into global content filters" msgstr "" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:436 msgid "5 new pride flags" msgstr "" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "更新の提供終了" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "アンインストール" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 #: src/bz-bundle-install-dialog.blp:159 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "インストール" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "アドオンを管理する" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "表示できるアドオンがありません" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "現在のフィルターの設定では、全ての現存するアドオンが非表示になっています。設" "定を変更してもう一度お試しください。" #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "アドオン ページ" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "月あたりのダウンロード数" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "コアアップデートの提供終了" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "このアドオンは更新やセキュリティ修正の提供が終了したランタイムを使用していま" "す。 将来的に使用することが安全でなくなる可能性があります。" #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "%s 用のアドオン" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "折り畳む" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "もっと見る" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "ダウンロード状態" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "年齢レーティング" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "カートゥーン調の暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "カートゥーン調の暴力に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "ファンタジー風の暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "ファンタジー風の暴力に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "リアルな暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "リアルな暴力に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "流血表現を含む暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "流血表現に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "性的暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "性的暴力に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "アルコール" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "アルコールに関する描写の情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "麻薬" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "麻薬に関する描写の情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "タバコ" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "タバコに関する描写の情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "ヌード" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "あらゆるヌード描写に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "性的なテーマ" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "性的な要素や描写に関する情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "不適切な言葉" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "あらゆる不適切な言葉、行動に関する描写の情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "不適切なユーモア" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "不適切なユーモアに反する描写が含まれているかの情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "差別" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "あらゆる差別的な言葉に関する描写が含まれているかの情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "広告" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "あらゆる広告が含まれているかについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "ギャンブル" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "あらゆる種類のギャンブル描写が含まれているかの情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "購入" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "お金を払うことができるかについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "ユーザー同士のチャット" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "他のユーザーとチャットをする方法があるかについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "ユーザー同士のボイスチャット" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "他のユーザーと会話をする方法があるかについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "連絡先" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "SNS のユーザーネームや、e-メールアドレスを共有することについての情報はありま" "せん" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "特定可能な情報" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "ユーザーの情報を第三者と共有することに関しての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "位置情報の共有" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "他のユーザーと物理的な位置情報を共有することについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "売春" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "売春に関する描写についての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "姦通" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "姦通 (不倫) に関する描写の情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "性的特徴付けられたキャラクター" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "性的特徴付けられたキャラクターについての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "冒涜" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "" "冒涜的な描写が含まれているかの冒涜的な描写が含まれているかの情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "人の死体" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "人の死体に関する表示についての情報はありません" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "奴隷制度" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "奴隷に関する描写が含まれているかの情報はありません" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "ドラッグの描写は含まれていません" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "汚い言葉や不適切な言葉、乱暴な言葉は含まれていません" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "広告やアプリ内での取引は含まれていません" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "性的描写やヌードは含まれていません" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "無制限のチャット機能は含まれていません" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "暴力描写は含まれていません" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "ドラッグ" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "乱暴な言葉" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "お金" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "ソーシャル" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "暴力" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "全年齢" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s の年齢レーティングは不明です" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s は全ての年齢のユーザーに適している" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s は小さな子供のユーザーに適している" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s は子供のユーザーに適している" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s はティーンエイジのユーザーに適している" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s は大人のユーザーに適している" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s は %s のユーザーに適している" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "システムフォルダー %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "ホームのサブフォルダー %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "ホストシステムのフォルダー" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "/etc ディレクトリにあるホストシステムの設定" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "デスクトップ内のサブフォルダー %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "デスクトップのフォルダー" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "ドキュメント内のサブフォルダー %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "ドキュメントのフォルダー" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "ミュージック内のサブフォルダー %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "ミュージックのフォルダー" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "ピクチャ内のサブフォルダー %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "ピクチャのフォルダー" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "公開フォルダー内のサブフォルダー %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "公開フォルダー" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "ビデオ内のサブフォルダー %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "ビデオのフォルダー" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "テンプレート内のサブフォルダー %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "テンプレートのフォルダー" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "ユーザーキャッシュ内のサブフォルダー %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "ユーザーのキャッシュフォルダー" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "ユーザー設定内のサブフォルダー %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "ユーザー設定のフォルダー" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "ユーザーデータ内のサブフォルダー %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "ユーザーデータのフォルダー" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "ユーザーランタイム内のサブフォルダー %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "ユーザーランタイムのフォルダー" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "%s へのファイルシステム アクセス" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "不明なファイルシステムのパス" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "ダウンロードサイズ" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "インストール済みのサイズ" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "インターネットからダウンロードするデータの量" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "ディスク上のサイズ" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "ユーザーデータのフォルダーを開く" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "あなたのユーザーデータ" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "キャッシュや設定、その他のアプリデータ" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "キャッシュ" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "一時的なキャッシュデータ" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "キャッシュを削除" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "インストール済みランタイムのサイズ" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "ランタイムのダウンロードサイズ" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:392 #: src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "利用不能" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "アプリのサイズ" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "認証済み" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "インストール済み" #: src/bz-application.c:762 msgid "The Bazaar Contributors" msgstr "Bazzar の貢献者たち" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:765 msgid "translator-credits" msgstr "camegone, 2025, 2026" #: src/bz-application.c:775 msgid "Special Thanks" msgstr "スペシャルサンクス" #: src/bz-application.c:833 msgid "Logged Out Successfully!" msgstr "正常にログアウトされました!" #: src/bz-application.c:969 msgid "Performing setup…" msgstr "セットアップの実行中…" #: src/bz-application.c:1055 msgid "Set Up System Flathub?" msgstr "システムに Flathub をセットアップしますか?" #: src/bz-application.c:1058 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub リモートはあなたのシステムでセットアップされていません。Bazaar でアプ" "リを検索したりインストールするためには、システムに Flathub をセットアップする" "必要があります。 \n" "\n" "あなたは引き続き Bazaar でインストール済みのアプリを検索したり削除することが" "できます。" #: src/bz-application.c:1065 msgid "Set Up Flathub?" msgstr "Flathub をセットアップしますか?" #: src/bz-application.c:1068 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub はあなたのシステムでセットアップされていません。Flathub が利用できな" "い場合、アプリを検索したりインストールすることができません。\n" "\n" "あなたは引き続き Bazaar でインストール済みのアプリを検索したり削除することが" "できます。" #: src/bz-application.c:1074 msgid "Later" msgstr "後で" #: src/bz-application.c:1075 msgid "Set Up Flathub" msgstr "Flathub をセットアップする" #: src/bz-application.c:1431 msgid "A backend error occurred" msgstr "バックエンドのエラーが発生しました" #: src/bz-application.c:1631 src/bz-application.c:3783 msgid "Refreshing…" msgstr "再読み込み中…" #: src/bz-application.c:1795 src/bz-application.c:3781 #, c-format msgid "Loading %d apps…" msgstr "%d 個のアプリをロード中…" #: src/bz-application.c:1848 msgid "Failed to open file" msgstr "ファイルを開けませんでした" #: src/bz-application.c:1946 msgid "An initialization error occurred" msgstr "初期化中にエラーが発生しました" #: src/bz-application.c:2312 msgid "Checking for updates…" msgstr "更新を確認中…" #: src/bz-application.c:2368 msgid "Failed to check for updates" msgstr "更新の確認に失敗しました" #: src/bz-application.c:3494 msgid "Malformed Link" msgstr "正常でないリンク" #: src/bz-application.c:3495 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "このアプリを開くために使われたリンクは誤った箇所が大文字になっており、将来的" "に動作しなくなる可能性があります。\n" "\n" "これはおもに KRunner が誤ったアプリ ID を送信するために起こります" #: src/bz-application.c:3503 msgid "Could not find app" msgstr "アプリが見つかりませんでした" #: src/bz-application.c:3534 msgid "Failed to load metainfo" msgstr "メタ情報の読み込みに失敗しました" #: src/bz-application.c:3785 msgid "Writing to cache…" msgstr "キャッシュを書き込み中…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "すべて表示" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "全ての「%s」" #: src/bz-apps-page.c:487 #, c-format msgid "%d Applications" msgstr "アプリケーション総数: %d" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "バンドルのインストール" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "追加の依存関係が、追加のディスク容量を使用する可能性があります" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "このアプリをインストールするためには、新しいソフトウェアのソースを追加する必" "要があります。そのソースに含まれる他のアプリが Bazaar に表示されるようになり" "ます。\n" "\n" "このソースを確実に信用できる場合のみ、追加してください。" #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "インストールに成功しました!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "開く" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "アプリケーションの詳細を開く" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "すでにインストール済み" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "インストールに失敗" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "インストールサイズ不明" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "インストールまであと %s" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "特別な権限なし" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "過去1ヶ月の間に %d ダウンロード" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s ランタイム" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "ダウンロード" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "サイズの情報がありません" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "ダウンロードサイズ: %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "全年齢" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "年齢レーティングの情報がありません" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "全ての年齢のユーザーに適している" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "%d 歳以上のユーザーに適している" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "不明" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "%s ライセンスのもと公開されているフリーソフト" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "フリーのソフトウェア" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "プロプライエタリ ソフトウェア" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "特別なライセンス: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "フリー" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "プロプライエタリ" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "特別なライセンス" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "幅広いデバイスに対応" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "デスクトップのみ" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "デスクトップ、タブレット、携帯電話で動きます" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "モバイル端末では動かない可能性があります" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "安全" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "低いリスク" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "中間のリスク" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "高いリスク" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "空" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "特選アプリなし" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "特選アプリの情報がこのシステム向けに提供されていません。ですが Flathub のアプ" "リを閲覧することはできます" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Flathub を閲覧" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "オフライン" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "ブラウザー" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "認証なし" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "開発者に関する情報がありません。" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "このアプリ ID、%s の所有権は検証されておらず、コミュニティのパッケージである" "可能性があります。" #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "このアプリ ID、%s の所有権は Flathub のチームが手動で検証済みです。" #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "このアプリ ID、%1$s の所有権は %3$s に所属する %2$s によって検" "証済みです。" #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "このアプリ ID、%1$s の所有権は、%2$s を使って検証済みです。" #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "このアプリ ID、%s の所有権は検証済みです。" #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "更新履歴の全文" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "この新バージョンはあなたのようなユーザーのおかげで実現しました!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "私は Bazaar の開発が好きですが、それは私一人だけではできません。もしあなたが" "将来的な開発の継続を支援したいなら、ko-fi でプロジェクトを支援することを検討" "してください。" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Bazaar に寄付する" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "バージョン %s での変更点は何?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "リリース日: %Y/%0m/%0d" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "インストールの選択" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "あなたはこのアプリの複数のバージョンをインストールしています。どれを選択して" "続けますか?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "キャンセル" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "このユーザーのみ" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "このユーザー" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "全てのユーザー" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:46 msgid "Details" msgstr "詳細" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "コピーする" #: src/bz-error-dialog.c:56 src/bz-share-list.c:364 msgid "Copied!" msgstr "コピーしました!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "お気に入りされた数" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "お気に入りを更新できませんでした" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Flathub にログインしてお気に入りを管理する" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "ログイン" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "お気に入り" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "全てインストール" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "読み込み中" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "お気に入りがありません" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "あなたがお気に入りマークをつけたアプリがここに表示されます" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "このアプリケーションを支援する" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "お気に入りから削除" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "お気に入りから削除できませんでした" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "前へ" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "次へ" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "編集" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "ミキサー" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "音楽" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "プレーヤー" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "レコーダー" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "シーケンサー" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "チューナー" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "テレビ" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "エミュレーター" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "アクション" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "アドベンチャー" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "アーケード" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "ブロック" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "ボードゲーム" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "カードゲーム" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "子供向け" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "論理" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "ロールプレイング" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "射撃系" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "シミュレーション" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "スポーツ" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "戦略" #: src/bz-flathub-category.c:124 msgid "Browsers" msgstr "ブラウザー" #: src/bz-flathub-category.c:125 msgid "Chat" msgstr "チャット" #: src/bz-flathub-category.c:126 msgid "Mail" msgstr "メール" #: src/bz-flathub-category.c:127 msgid "File Sharing" msgstr "ファイルの共有" #: src/bz-flathub-category.c:132 msgid "Audio & Video" msgstr "映像や音楽" #: src/bz-flathub-category.c:132 msgid "Media" msgstr "メディア" #: src/bz-flathub-category.c:132 msgid "More Audio & Video" msgstr "映像や音楽をもっと見る" #: src/bz-flathub-category.c:133 msgid "Developer Tools" msgstr "開発ツール" #: src/bz-flathub-category.c:133 msgid "Develop" msgstr "開発" #: src/bz-flathub-category.c:133 msgid "More Developer Tools" msgstr "開発ツールをもっと見る" #: src/bz-flathub-category.c:134 msgid "Education" msgstr "教育" #: src/bz-flathub-category.c:134 msgid "Learn" msgstr "学ぶ" #: src/bz-flathub-category.c:134 msgid "More Education" msgstr "教育アプリをもっと見る" #: src/bz-flathub-category.c:135 msgid "Gaming" msgstr "ゲーム" #: src/bz-flathub-category.c:135 msgid "Play" msgstr "遊ぶ" #: src/bz-flathub-category.c:135 msgid "More Gaming" msgstr "ゲームをもっと見る" #: src/bz-flathub-category.c:136 msgid "Graphics & Photography" msgstr "画像や写真" #: src/bz-flathub-category.c:136 msgid "Create" msgstr "創作する" #: src/bz-flathub-category.c:136 msgid "More Graphics & Photography" msgstr "画像や写真関連のアプリをもっと見る" #: src/bz-flathub-category.c:137 msgid "Networking" msgstr "ネットワーク" #: src/bz-flathub-category.c:137 msgid "Internet" msgstr "インターネット" #: src/bz-flathub-category.c:137 msgid "More Networking" msgstr "ネットワーク関連のアプリをもっと見る" #: src/bz-flathub-category.c:138 msgid "Productivity" msgstr "生産性向上" #: src/bz-flathub-category.c:138 msgid "Work" msgstr "働く" #: src/bz-flathub-category.c:138 msgid "More Productivity" msgstr "生産性向上アプリをもっと見る" #: src/bz-flathub-category.c:139 msgid "Science" msgstr "科学" #: src/bz-flathub-category.c:139 msgid "More Science" msgstr "科学アプリをもっと見る" #: src/bz-flathub-category.c:140 msgid "System" msgstr "システム" #: src/bz-flathub-category.c:140 msgid "More System" msgstr "システムアプリをもっと見る" #: src/bz-flathub-category.c:141 msgid "Utilities" msgstr "便利ツール" #: src/bz-flathub-category.c:141 msgid "Tools" msgstr "ツール" #: src/bz-flathub-category.c:141 msgid "More Utilities" msgstr "便利ツールをもっと見る" #: src/bz-flathub-category.c:142 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "話題のアプリ" #: src/bz-flathub-category.c:142 msgid "More Trending" msgstr "話題のアプリをもっと見る" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:171 msgid "Popular" msgstr "人気のアプリ" #: src/bz-flathub-category.c:143 msgid "More Popular" msgstr "人気アプリをもっと見る" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "最近追加されたアプリ" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:121 msgid "New" msgstr "新しいアプリ" #: src/bz-flathub-category.c:144 msgid "More New" msgstr "新着アプリをもっと見る" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "最近更新されたアプリ" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "更新されたアプリ" #: src/bz-flathub-category.c:145 msgid "More Updated" msgstr "更新されたものをもっと見る" #: src/bz-flathub-category.c:146 msgid "Mobile" msgstr "モバイル" #: src/bz-flathub-category.c:146 msgid "More Mobile" msgstr "モバイル対応アプリをもっと見る" #: src/bz-flathub-category.c:147 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:147 msgid "More Adwaita" msgstr "Adwaita をもっと見る" #: src/bz-flathub-category.c:148 msgid "KDE Apps" msgstr "KDE アプリ" #: src/bz-flathub-category.c:148 msgid "More KDE Apps" msgstr "KDE のアプリをもっと見る" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub が見つかりません" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "このコンピューター上のどの Flatpak にも Flathub リモートレポジトリが見つかり" "ませんでした" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub が利用不可" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Flathub に接続できませんでした" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "アプリの管理と検索は今でもすることができます。" #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "アプリ検索" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "再接続" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "今日のアプリ" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "どこでも一緒" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Linux フォンやタブレット向けのアプリ" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "モバイル対応アプリをもっと見る" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "ゲームやお気に入りのタイトルを遊ぶためのアプリ" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "ゲームをもっと見る" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "結果無し" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "別の語句で検索してみてください" #: src/bz-full-view.blp:41 msgid "Content" msgstr "内容" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "これはローカルのプレビューです。細かな部分は公開のリストのページと異なる可能" "性があります" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "ストアの外観をプレビュー" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "支援する(_S)" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "このアプリは更新やセキュリティ修正の提供が終了したランタイムを使用していま" "す。 将来的に使用することが安全でなくなる可能性があります。" #: src/bz-full-view.blp:545 msgid "Trash Data" msgstr "データをゴミ箱に移動" #: src/bz-full-view.blp:607 msgid "Add-ons" msgstr "アドオン" #: src/bz-full-view.blp:642 msgid "More Add-Ons" msgstr "アドオンをさらに表示" #: src/bz-full-view.blp:653 msgid "Links" msgstr "リンク" #: src/bz-full-view.c:181 msgid "No URL" msgstr "URL がありません" #: src/bz-full-view.c:199 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "このアプリケーションはフリーのOSSライセンスで公開されており、安全のためにソー" "スコードを確認することができます。" #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "このアプリケーションはプロプライエタリなライセンスで公開されており、ソース" "コードはプライベートで開発されているため、独立した第三者による検査を受けるこ" "とができません。" #: src/bz-full-view.c:207 msgid "More Apps" msgstr "アプリをもっと見る" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "%s のアプリをもっと見る" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "この開発者の別のアプリ" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "%s の別のアプリ" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "%s はインストールされていませんが、%s のデータは残存しています。" #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "他のアプリ" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "アプリケーション総数: %d" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "ユーザーデータを削除できませんでした" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "ハードウェアのサポート" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "キーボードのサポート" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "キーボードの使用が必須" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "キーボードの使用を推奨" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "キーボードが使用可能" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "キーボードのサポート状況が不明" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "マウスのサポート" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "マウス等のポインティングデバイスの使用が必須" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "マウス等のポインティングデバイスの使用を推奨" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "マウス等のポインティングデバイスが使用可能" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "マウス等のポインティングデバイスのサポート状況が不明" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "タッチスクリーンのサポート" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "タッチスクリーンの使用が必須" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "タッチスクリーンの使用を推奨" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "タッチスクリーンが使用可能" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "タッチスクリーンのサポート状況が不明" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "モバイル端末のサポート" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "モバイル端末で使用可能" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "モバイル端末では動かない可能性があります" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "デスクトップのサポート" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "大きな画面で快適に動作します" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s は特定のデバイスが搭載された端末で快適に動作します" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s はほとんどのデバイスで動作します" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "開く(_O)" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "このアプリケーションをアンインストール" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "削除する(_R)" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "更新" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "削除する" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "キャンセル" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "キャンセル中" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "インストール済みのアプリを検索" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "検索を削除" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "アプリケーションがありません" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "代わりにストアを検索" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "ライブラリー" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "実行待ちの更新" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "ダウンロード一覧" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "最近アンインストールされたアプリ" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "完了したタスクを削除" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "ソート順" #: src/bz-library-page.blp:348 msgid "Name" msgstr "名前" #: src/bz-library-page.blp:354 msgid "Size" msgstr "サイズ" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" "インストール済みのアプリ一覧には、「%s」という単語は見つかりませんでした" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u 件の利用可能なアップデート" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u 件のインストール済みのアプリ" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "参加する" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "詳細を表示" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "不明なライセンス" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "コミュニティーによって作られました" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "このアプリは国際的なコミュニティによってオープンに開発されています。\n" "\n" "あなたは開発に参加して機能改善の手助けができます。" #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "このアプリのライセンスは不明です" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "このアプリは国際的なコミュニティによってオープンに開発されていて、%s ライセン" "スのもとで公開されています。\n" "\n" "あなたは開発に参加して機能改善の手助けができます。" #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "このアプリはオープンソースとして開発されていないため、開発者しかどんな処理を" "行っているかを知ることができません。これによってセキュリティ上の脅威を発見す" "ることが難しくなったり、外部の監視無しに悪意のあるコードに変更される可能性が" "あります。\n" "\n" "あなたはこのアプリに対しての貢献を行うことができないかもしれません。" #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "このアプリは特別なライセンス、%s の下開発されています。\n" "あなたはこのアプリに対して貢献を行うことができないかもしれません。" #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "ライセンス" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Flathub に接続する" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "不明なエラーが発生しました" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "ログインして、お気に入りのアプリをデバイス間で同期しよう" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "完了" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "ようこそ、%s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "メタ情報ファイルを選択" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "メタ情報ファイル" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "アイコンを選択(任意)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "画像ファイル" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "プレビュー" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "設定" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "従量課金のネットワークに接続しています — ストア情報の自動読み込みは一時停止さ" "れています" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "手動で同期する" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "コンテンツフィルター" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "フリーのソフトウェアのみ表示" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "プロプライエタリのソフトウェアを検索結果から除外する" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Flathub からの検索結果のみ表示" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "検索結果を Flathub で利用可能なアプリのみに限定する" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "検証済みの検索結果のみ表示" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Flathub で検証されていないアプリケーションを非表示にする" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "更新終了したアプリを非表示" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "開発者によるサポートが終了したアプリを非表示にする" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "プログレスバーのテーマ" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "アクセントカラー" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "プライドカラー" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "レズビアン プライド カラー" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "男性 ホモセクシャル プライド カラー" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "トランスジェンダー プライド カラー" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "ノンバイナリー プライド カラー" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "バイセクシュアル プライド カラー" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "アセクシュアル プライド カラー" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "パンセクシュアル プライド カラー" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "アロマンティック プライド カラー" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "ジェンダーフルイド プライド カラー" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "ポリセクシュアル プライド カラー" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "オムニセクシュアル プライド カラー" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "アロエース プライド カラー" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "アジェンダー プライド カラー" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "ジェンダークィア プライド カラー" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "インターセックス プライド カラー" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "デミジェンダー プライド カラー" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "バイロマンティック プライド カラー" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "ディスアビリティー プライド カラー" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "フェムボーイ プライドカラー" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "ニュートロワ プライド カラー" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "バージョン履歴" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "バージョン履歴(_V)" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "今日" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "昨日" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d 日前" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d 週間前" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d ヶ月前" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d 年前" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%Y/%0m/%0d" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "バージョン %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "このリリースの詳細情報がありません" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "詳細情報を確認する" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "アンインストール" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "入手" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "不明な権限" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "このアプリの動作に必要な権限が許可されていません。" #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "使用する権限なし" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "アプリは完全にサンドボックス化 (隔離) されています" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "ネットワーク アクセス" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "インターネットに接続する" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "ネットワーク アクセスなし" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "インターネットに接続しない" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "ユーザーデバイスへのアクセス" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "ウェブカメラやゲーム用コントローラーのようなデバイスにアクセスできます" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "ユーザーデバイスへのアクセスなし" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "ウェブカメラやゲーム用コントローラーのようなデバイスにアクセスできません" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "入力デバイスへのアクセス" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "入力デバイスへアクセスできます" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "マイクへのアクセスと音声再生" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "マイクの入力へのアクセスと音声再生を許可なく行えます" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "システムデバイスへのアクセス" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "特権を要求されるシステムデバイスにアクセスすることができます" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "画面の内容へのアクセス" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "画面や他のウィンドウに表示されている内容へのアクセスができます" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "古いウィンドウシステム" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "常に古いウィンドウシステム (X11) を使用します" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "任意の権限" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "任意のあらゆる権限を取得することができます" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "ユーザー設定" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "ユーザーの設定へのアクセスと変更ができます" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "ファイルシステム全体の読み書きアクセス" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "ファイルシステム上全てのファイルの読み書きができます" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "ホームフォルダーの読み書きアクセス" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "あなたのホームディレクトリ内の全てのデータを読み書きできます" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "ファイルシステム全体の読み込みアクセス" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "ファイルシステム上全てのデータを読み込みできます" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "ホームフォルダーの読み込みアクセス" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "あなたのホームディレクトリ内の全てのデータの読み込みができます" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "ダウンロードフォルダーの読み書きアクセス" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "あなたのダウンロード ディレクトリ内の全てのデータを読み書きできます" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "ダウンロードフォルダーの読み込みアクセス" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "あなたのダウンロード ディレクトリ内の全てのデータを読みこみできます" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "このディレクトリ内の全てのデータを読み書きできます" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "このディレクトリ内の全てのデータの読み込みができます" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "ファイルシステムへのアクセスなし" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "ファイルシステムへのアクセスは全く行いません" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "システムサービスを使用" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Portal 以外のシステムサービスへデータをリクエストできます" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "セッション サービスを使用" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Portal 以外のセッション サービスへデータをリクエストできます" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "サービスへのアクセスなし" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" "Portal 以外のシステムやセッションのサービスへのアクセスを全く行いません" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "検証済みアプリ開発者" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "このアプリの開発者はなりすましではないことが確認されています" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "プロプライエタリなコード" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "ソースコードが公開されていないため、個別に監査することができず、脆弱である可" "能性があります" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "検査可能なコード" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "このアプリのソースコードは公開されており、自主的に検査可能なため、安全な可能" "性が高いです" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "システムサービス %s を使用" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "セッション サービス %s を使用" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "サービス %s を使用" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Portal 以外のサービスを見ることができます" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Portal 以外のサービスと通信できます" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Portal 以外のサービスを保有できます" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "グローバル メニュー統合" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "グローバルなメニューバーに追加のメニューを表示できます" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "KDE 設定統合" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "KDE デスクトップの設定が変更されたときに検知できます" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "KDE のグローバル設定" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "KDE デスクトップの設定 (フォントやカラーなど) を読み込むことができます" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "シークレット ストレージ サービス" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "システムのキーリングを使用して、パスワードを保存または引き出すことができます" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "デスクトップ通知サービス" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "デスクトップに通知を送信できます" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "システムトレイ統合" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "システムトレイにアイコンを表示できます" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE コネクト統合" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "KDE コネクトでペアリングされたデバイスと通信することができます" #: src/bz-safety-dialog.blp:60 msgid "App ID" msgstr "アプリ ID" #: src/bz-safety-dialog.blp:70 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:101 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "このアプリは古いバージョンのソフトウェア開発キット (SDK) を使用しており、バグ" "や脆弱性などの修正が提供されないままになっている可能性があります。" #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "安全性" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "%s は安全です" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s は危険な権限を使用していません" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "%s はおそらく安全です" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s はおそらく安全ではありません" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "%s は安全ではありません" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "スクリーンショット" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "前のスクリーンショット" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "次のスクリーンショット" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "画像をコピー" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "表示をリセット" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "ズームアウト" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "ズームイン" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "スクリーンショット カルーセル" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "スクリーンショットなし" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "スクリーンショットビューアを開く" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "フィルター" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "認証済み(_V)" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "フリー/オープン(_F)" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "サポート中(_E)" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "更新終了したアプリを除外する" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "モバイル対応(_M)" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "カテゴリー一覧" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "アプリ、ゲーム、ソフトウェアを検索" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "検索フィルター" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "検索を削除" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "カテゴリー一覧" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "カテゴリーが利用不能です" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "画面上側にある検索バーを使用してアプリを検索する。" #: src/bz-search-page.blp:361 msgid "No Applications Found" msgstr "アプリケーションがありません" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "「%s」という検索語句に合致するアプリは、Flathub にありませんでした" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "動画" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "オフィス" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "カレンダー" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "メッセージ" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "お絵描き" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "エミュレーター" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub ページ" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "プロジェクトのウェブサイト" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "バグトラッカー" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "よくある質問" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "ヘルプ" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "寄付" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "翻訳" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "連絡先" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "ソースコード" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "貢献する" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "マニフェスト" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "リンクをコピーする" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "時系列" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "インストール数:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "地域別" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "2024/04/15 から" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "総ダウンロード回数: %.2fM 回" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "総ダウンロード回数: %.2fK 回" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "総ダウンロード回数: %'d 回" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "ユーザーデータを保持" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "設定やコンテンツをまた使うことのできるように保持する" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "全てのデータを削除" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "アプリのデータを永久に削除して容量を確保する" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "%s をインストールしますか?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "どのバージョンをインストールするかを選択してください。追加の共有のコンポーネ" "ントがインストールされることがあります" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "追加の共有コンポーネントがインストールされることがあります" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "キャンセル(_C)" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "インストール(_I)" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "%s を削除しますか?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "削除するバージョンを選択してください。" #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "%s をアンインストールした後は、利用できなくなります。" #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "「%s」は高リスクです" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "このアプリはあなたのシステムに完全なアクセスが可能であり、これはあなたの" "ファイル、ブラウザの閲覧履歴、保存したパスワード にアクセス可能なうえ、イ" "ンターネットに接続して第三者へあなたのデータを送信可能であることを意味しま" "す。\n" "\n" "このアプリはプロプライエタリであり、取得した権限で何を行っているかを検査する" "ことができません。" #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "このアプリは古い X11 ウィンドウシステムを使用しており、全てのキーストロー" "クを記録したり、スクリーンショットを撮ったり、他のアプリケーションを監視する" "ことができます。さらに、インターネットに接続可能なため、第三者にあなたの" "データを送信可能なことを意味します。\n" "\n" "このアプリはプロプライエタリであり、取得した権限で何を行っているかを検査する" "ことができません。" #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "それでもインストールする(_I)" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "ファイル操作のダイアログを読み込むことができませんでした" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "全てのアプリがすでにインストール済みです" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "OK(_O)" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "%u 個のアプリをインストールしますか?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "以下のものがインストールされます。追加の共有コンポーネントがインストールされ" "ることがあります" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d 個のアドオンがインストールされます。" #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "追加で、いくつかのアドオンがインストールされます。" #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "全てインストール(_I)" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "%.02f 秒で完了しました" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "アプリ アドオン" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "ランタイム" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "順番待ち" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "完了" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "キャンセル済" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "エラー" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "ファイル操作をキャンセル" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "エラーの詳細を表示" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s を解放しました" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "ファイル操作のエラー" #: src/bz-transaction.c:344 msgid "Pending" msgstr "一時停止中" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "全て更新(_U)" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u 件のランタイムのアップデート" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "残存するユーザーデータを管理" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "ユーザーデータが見つかりませんでした" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "ユーザーデータ" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "ユーザーデータをゴミ箱に移動" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "%s のユーザーデータをゴミ箱に移す" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "再読み込み中" #: src/bz-window.blp:89 msgid "Curated" msgstr "特選アプリ" #: src/bz-window.blp:101 msgid "Explore" msgstr "探索" #: src/bz-window.blp:128 msgid "Search" msgstr "検索" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "メインメニュー" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Bazaar のバージョンが新しくなりました!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "変更点を見る" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "ネットワークに接続されていますが、キャッシュされた Flathub を表示しています" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "Bazaar に寄付する(_D)" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "再読み込み(_R)" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "Flathub にログイン(_L)" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "残存しているユーザーデータを管理(_M)" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "設定(_P)" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "キーボードショートカット(_K)" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "Bazaar について(_A)" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "Bazaar を終了(_Q)" #: src/bz-window.blp:342 msgid "Log Out" msgstr "ログアウト" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "アプリケーションの起動失敗" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Bazaar を使って Bazaar を削除することはできません!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "今すぐにはできません!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "件のインストール" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "ナビゲーション" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "探索ページを表示" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "ライブラリ ページを開く" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "検索ページを表示" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "リモート" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "リモートと同期" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "一般" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "設定を開く" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "ショートカットを表示" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "ウィンドウを閉じる" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Bazaar を終了" #~ msgid "Add pending state to the global progress bar" #~ msgstr "全体のプログレスバーに中止の状態を追加しました" #~ msgid "More improvements:" #~ msgstr "改善点:" #~ msgid "Some improvements:" #~ msgstr "改善点:" #~ msgid "This release includes:" #~ msgstr "今回のリリースに含まれる変更:" #~ msgid "User Data Size" #~ msgstr "ユーザーデータのサイズ" #~ msgid "Open App Library" #~ msgstr "アプリ ライブラリを開く" #~ msgid "Flathub returned an error" #~ msgstr "Flathub がエラーを返しました" #~ msgid "Retry Flathub Connection" #~ msgstr "Flathub への接続を再試行" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "" #~ ".flatpak 形式のバンドルをインストールする機能はまだサポートされていません" #~ msgid "Tags:" #~ msgstr "タグ:" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "あなたの Flathub アカウントを Bazzar へ接続して、お気に入りのアプリを管理" #~ "しよう。" #~ msgid "Delay Search Results" #~ msgstr "検索の遅延" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "" #~ "入力から検索までをわずかに遅延させることで検索のパフォーマンスを向上させる" #~ msgid "Progress Bar" #~ msgstr "プログレスバー" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "プログレスバーを好きなテーマで彩りましょう!" #~ msgid "Vertical Stripes" #~ msgstr "垂直のストライプ" #~ msgid "Display flag colors from left to right" #~ msgstr "旗の色を左から右へと表示します" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" #~ msgid "Open Link" #~ msgstr "リンクを開く" #~ msgid "No Results Found" #~ msgstr "検索結果無し" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "\"%s\" タグのついたアプリ" #~ msgid "Search failed" #~ msgstr "検索に失敗しました" #~ msgid "Refresh completed!" #~ msgstr "再読み込み完了!" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "インストール" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "再読み込み" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "Bazaar に寄付する❤️(_D)" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgctxt "As in, \"100 Downloads\"" #~ msgid "Downloads" #~ msgstr "ダウンロード" #~ msgid "Download & Install Application" #~ msgstr "アプリケーションをダウンロードしてインストールする" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Linux のデスクトップを開発している開発者たちを支援することは重要です。" #~ "Bazaar ではディストリビューターが管理できる「特選アプリ」タブによってユー" #~ "ザーの体験を最適化することを可能にします。" #~ msgid "Install Other Version" #~ msgstr "ほかのバージョンをインストール" #~ msgid "%e %B" #~ msgstr "%0m/%0d" #~ msgid "Keep Data" #~ msgstr "データを保持" #~ msgid "Open App" #~ msgstr "アプリを開く" #~ msgid "Support this application" #~ msgstr "このアプリケーションを支援する" #~ msgid "Manage Add-ons" #~ msgstr "アドオンを管理する" #~ msgid "_Login with Flathub" #~ msgstr "Flathub にログイン(_L)" #~ msgid "_Synchronize Remotes" #~ msgstr "リモートと同期(_S)" #~ msgid "Synchronizing..." #~ msgstr "同期中..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "%d 件のエントリを受信中..." #~ msgid "Indexing Data..." #~ msgstr "データをインデックス中..." #~ msgid "View the Release Page" #~ msgstr "リリースページを表示" #~ msgid "Close" #~ msgstr "閉じる" #~ msgid "Copy and Close" #~ msgstr "コピーして閉じる" #~ msgid "Refreshing Store Content" #~ msgstr "ストアの内容を再読み込み中" #~ msgid "No background tasks!" #~ msgstr "バックグラウンドタスクがありません!" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "アプリを閉じる" #~ msgid "Nucleus app page" #~ msgstr "Nucleus アプリページ" #, fuzzy #~ msgid "Better track installed versions of apps" #~ msgstr "インストール済みのアプリを検索" #~ msgid "Toggle transaction sidebar" #~ msgstr "ダウンロードのサイドバーを表示/非表示" #~ msgid "Ongoing" #~ msgstr "進行中" #~ msgid "Finished" #~ msgstr "完了済み" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "%s 転送済み" #~ msgid "Tasks" #~ msgstr "タスク" #~ msgid "Stop Active Tasks" #~ msgstr "現在進行中のタスクを停止" #~ msgid "No Tasks Yet" #~ msgstr "タスクがありません" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d 件の更新が利用可能です" #~ msgid "Updates Are Available" #~ msgstr "更新が利用可能です" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "以下のアプリケーションが更新の対象になっています。インストールしてもよろし" #~ "いですか?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "%d 個のランタイムやアドオンが更新の対象になっています。インストールしても" #~ "よろしいですか?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "さらに %d 個のランタイムや、アドオンが更新されます。" #~ msgid "Update Now" #~ msgstr "今すぐ更新" #~ msgid "Resume Current Tasks" #~ msgstr "中止中のタスクを再開" #~ msgid "Pause Current Tasks" #~ msgstr "現在のタスクを一時停止" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "ダウンロードマネージャーの表示/非表示" #~ msgid "Pride Colors (Horizontal)" #~ msgstr "プライドカラー (水平)" #~ msgid "Lesbian Pride Colors (Horizontal)" #~ msgstr "レズビアン プライド カラー (水平)" #~ msgid "Male Homosexual Pride Colors (Horizontal)" #~ msgstr "男性 ホモセクシャル プライド カラー (水平)" #~ msgid "Transgender Pride Colors (Horizontal)" #~ msgstr "トランスジェンダー プライド カラー (水平)" #~ msgid "Nonbinary Pride Colors (Horizontal)" #~ msgstr "ノンバイナリー プライド カラー (水平)" #~ msgid "Bisexual Pride Colors (Horizontal)" #~ msgstr "バイセクシュアル プライド カラー (水平)" #~ msgid "Asexual Pride Colors (Horizontal)" #~ msgstr "アセクシュアル プライド カラー (水平)" #~ msgid "Pansexual Pride Colors (Horizontal)" #~ msgstr "パンセクシュアル プライド カラー (水平)" #~ msgid "Aromantic Pride Colors (Horizontal)" #~ msgstr "アロマンティック プライド カラー (水平)" #~ msgid "Genderfluid Pride Colors (Horizontal)" #~ msgstr "ジェンダーフルイド プライド カラー (水平)" #~ msgid "Polysexual Pride Colors (Horizontal)" #~ msgstr "ポリセクシュアル プライド カラー (水平)" #~ msgid "Omnisexual Pride Colors (Horizontal)" #~ msgstr "オムニセクシュアル プライド カラー (水平)" #~ msgid "Aroace Pride Colors (Horizontal)" #~ msgstr "アロエース プライド カラー (水平)" #~ msgid "Agender Pride Colors (Horizontal)" #~ msgstr "アジェンダー プライド カラー (水平)" #~ msgid "Genderqueer Pride Colors (Horizontal)" #~ msgstr "ジェンダークィア プライド カラー (水平)" #~ msgid "Intersex Pride Colors (Horizontal)" #~ msgstr "インターセックス プライド カラー (水平)" #~ msgid "Demigender Pride Colors (Horizontal)" #~ msgstr "デミジェンダー プライド カラー (水平)" #~ msgid "Biromantic Pride Colors (Horizontal)" #~ msgstr "バイロマンティック プライド カラー (水平)" #~ msgid "Disability Pride Colors (Horizontal)" #~ msgstr "ディスアビリティー プライド カラー (水平)" #~ msgid "Femboy Pride Colors (Horizontal)" #~ msgstr "フェムボーイ プライドカラー (水平)" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "ローカルの flatpak バンドルファイルを表示、インストールする機能は近日追加" #~ "予定です! しばらくの間は代わりに、\n" #~ "\n" #~ "flatpak install --bundle バンドルファイル名.flatpak\n" #~ "\n" #~ "をコマンドラインで実行してください。" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u ダウンロード" #~ msgid "Hide EOL Entries" #~ msgstr "更新終了のエントリを非表示" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "更新が終了したエントリや、それに依存しているエントリを非表示にする" #~ msgid "Only Show Free Software" #~ msgstr "フリーのソフトウェアのみ表示" #~ msgid "Hide proprietary software" #~ msgstr "プロプライエタリ ソフトウェアを非表示" #~ msgid "Show Only Flathub Content" #~ msgstr "Flathub の内容のみ表示" #~ msgid "Debounce Search Inputs" #~ msgstr "検索の遅延" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "入力してから検索されるまでに遅延を設け、即座に結果が表示されないようにする" #~ msgid "Describes the look of the global progress bar" #~ msgstr "全体のプログレスバーの見た目を変更する" #~ msgid "Saved Window Dimensions" #~ msgstr "保存したウィンドウサイズ" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "次回 Bazaar のウィンドウを表示する時に使用されるウィンドウの寸法" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s は幼児のユーザーに適している" #~ msgid "Of the size of human DNA" #~ msgstr "人間のDNAのサイズに対する割合" #~ msgid "3 billion base pairs" #~ msgstr "30億塩基対" #~ msgid "Of the Linux Kernel" #~ msgstr "linuxのカーネルに対する割合" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "アポロ11号のガイダンスコンピュータに対する割合" #~ msgid "Total ROM and RAM" #~ msgstr "ROMとRAMの合計" #~ msgid "Of the original Super Mario Bros" #~ msgstr "初代スーパーマリオブラザーズに対する割合" #~ msgid "On the NES" #~ msgstr "ファミコン版" #~ msgid "Of the size of Wikipedia" #~ msgstr "Wikipedia のサイズに対する割合" #~ msgid "Without any media" #~ msgstr "画像や音声などを除いたサイズ" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "この機能は現在無効になっています。アプリの権限を管理するためには、" #~ "Flatseal をインストールすることを推奨します。" #~ msgid "Entry Inspector" #~ msgstr "エントリのインスペクター" #~ msgid "Serialize" #~ msgstr "シリアライズ" #~ msgid "Convert to JSON" #~ msgstr "JSON に変換する" #~ msgid "More Mobile apps" #~ msgstr "モバイル対応アプリをもっと見る" #~ msgid "Bazaar Inspector" #~ msgstr "Bazaar インスペクター" #~ msgid "Enable Global Debug Mode" #~ msgstr "全域のデバッグモードを有効化" #~ msgid "Active Blocklists" #~ msgstr "有効なブラックリスト" #~ msgid "Active Curated-Configs" #~ msgstr "有効な特選アプリの設定" #~ msgid "All Entry Groups" #~ msgstr "全てのエントリグループ" #~ msgid "No Flatpaks Installed" #~ msgstr "Flatpak がインストールされていません" #~ msgid "Inspect UI Entry" #~ msgstr "UI エントリを検査" #~ msgid "All Debug Actions" #~ msgstr "すべてのデバッグオプション" #~ msgid "Open Bazaar Inspector" #~ msgstr "Bazaar インスペクターを開く" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Git Forge のスター数を表示" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "「スターの数」をプロジェクトの詳細画面で表示するかどうか" #~ msgid "Repository Star Count" #~ msgstr "リポジトリーのスター数" #~ msgid "Display Star Count" #~ msgstr "スターの数を表示" #~ msgid "Show the star count of an application's source code repository" #~ msgstr "アプリのソースコードがあるリポジトリのスターの数を表示する" #~ msgid "" #~ "Bazaar can fetch and display the star count from an application's source " #~ "code repository on a remote Git forge. \n" #~ " For projects on GitHub, rate limits may cause them not to appear." #~ msgstr "" #~ "Bazzarは Git forge のリモートにあるアプリケーションのリポジトリに付けられ" #~ "たスターの数を取得して、表示できます。\n" #~ "GitHub のプロジェクトでは、レート制限により表示されないことがあります。" #~ msgid "Mobile Apps" #~ msgstr "モバイル対応アプリ" #~ msgid "Verified by the original developers" #~ msgstr "オリジナルの開発者によって検証済みです" #~ msgid "Hide proprietary software when searching" #~ msgstr "検索結果からプロプライエタリのソフトウェアを除外します" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "検索結果を Flathub で利用可能なアプリのみに限定する" #~ msgid "Constructing Flatpak instance..." #~ msgstr "Flatpak のインスタンスを生成中..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "Flatpak のインスタンスを再利用中..." #~ msgid "Flathub is not registered on this system" #~ msgstr "Flathub がシステムに登録されていません" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "Flathub をリモートのリポジトリに追加しますか? 拒否した場合、Flathub ページ" #~ "は利用できません。これは、あとから変更可能です。" #~ msgid "Add Flathub" #~ msgstr "Flathub を追加" #, c-format #~ msgid "Identifying installed entries..." #~ msgstr "インストール済みのエントリを特定中..." #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "%d 件のブロックリストを参照しながらリモートのエントリの取得開始中..." #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d / %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "バックグラウンドのインデックス処理が終了するのを待っています..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "%0.2f で初期化を完了しました" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "Bazaar が読み込める特選アプリの情報がありませんでした。あなたが使用してい" #~ "る OS のサポートチャンネルに連絡してください。" #~ msgid "More actions" #~ msgstr "詳細コマンド" #~ msgid "Run this application" #~ msgstr "このアプリケーションを実行する" #~ msgid "Run" #~ msgstr "実行" #~ msgid "Git Forge Star Counts" #~ msgstr "Git Forge のスター数" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "" #~ "GitHub のアクセストークン無しではレート制限の原因となる可能性があります" #~ msgid "Show Only Flathub Apps" #~ msgstr "Flathub のアプリのみ表示" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "システムの負荷を減らすため、少しの待ち時間を追加する" #~ msgid "Go Home" #~ msgstr "ホームに戻る" #~ msgid "Browse" #~ msgstr "ブラウズ" #~ msgid "Go Back" #~ msgstr "戻る" #~ msgid "View curated applications" #~ msgstr "厳選されたアプリケーションを表示する" #~ msgid "View the latest on Flathub" #~ msgstr "Flathub の最新のアプリを表示する" #~ msgid "Settings & user data will be kept" #~ msgstr "設定とユーザーデータは保持されます" #~ msgid "Pride Rainbow Flag" #~ msgstr "プライドレインボー フラッグ" #~ msgid "Bisexual Flag" #~ msgstr "バイセクシュアル フラッグ" #~ msgid "Asexual Flag" #~ msgstr "アセクシュアル フラッグ" #~ msgid "_Quit Service" #~ msgstr "_サービスの停止" #~ msgid "Games" #~ msgstr "ゲーム" #~ msgid "Graphics" #~ msgstr "グラフィック" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "ホームページ" #~ msgid "Excludes shared components" #~ msgstr "共有のコンポーネントを除く" #~ msgid "Source code may not be available" #~ msgstr "ソースコードを入手できないことがあります" #~ msgid "Click for details" #~ msgstr "クリックで詳細を開く" #~ msgid "Repositories" #~ msgstr "リポジトリー" #~ msgid "Open in browser" #~ msgstr "ブラウザーで開く" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "月間 %'d ダウンロード" #~ msgid "Theme" #~ msgstr "テーマ" #~ msgid "Share" #~ msgstr "共有" #~ msgid "Manage Addons" #~ msgstr "アドオンを管理する" #~ msgid "%B %-d" #~ msgstr "%0m/%0d" #~ msgid "Up to date!" #~ msgstr "最新です!" #~ msgid "Calligraphy application page" #~ msgstr "カリグラフィーのアプリケーションページ" #~ msgid "Download graph for Blender" #~ msgstr "Blender のグラフをダウンロード" #~ msgid "Open this image in the default image viewer" #~ msgstr "この画像をデフォルトの画像ビューアーで開く" #~ msgid "Copy this image to the clipboard" #~ msgstr "この画像をクリップボードにコピーする" #~ msgid "Show Downloads Over Time" #~ msgstr "過去の期間に対するダウンロード数のグラフを表示する" #~ msgid "Remote repo name" #~ msgstr "リモートのリポジトリーの名前" #~ msgid "Updated Size" #~ msgstr "更新後のサイズ" #~ msgid "Freed Space" #~ msgstr "解放された容量" #~ msgid "Transactions Will Appear Here" #~ msgstr "ダウンロードはここに表示されます" #~ msgid "Resume the execution of transactions" #~ msgstr "ダウンロードを再開する" #~ msgid "Pause the execution of transactions" #~ msgstr "実行中のダウンロードを一時停止する" #~ msgid "Downloads Over Time" #~ msgstr "ダウンロード数の推移" #~ msgid "Minimize Lower Bound" #~ msgstr "グラフの下限を最小化" #~ msgid "Maximize Upper Bound" #~ msgstr "グラフの上限を最大化" #~ msgid "Confirm Action" #~ msgstr "操作の確認" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "あなたは以下の Flatpak をアンインストールしようとしています:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "アンインストールしてもよろしいですか?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "あなたは以下の Flatpak をインストールしようとしています:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "インストールしてもよろしいですか?" #~ msgid "Apps Of The Week" #~ msgstr "今週のアプリ" #~ msgctxt "Project URL Type" #~ msgid "VCS Browser" #~ msgstr "VCS ブラウザー" #~ msgid "Full Application View" #~ msgstr "アプリケーションページの表示" #~ msgid "Change what content is shown when viewing applications" #~ msgstr "アプリケーションを見ているときに表示される内容を変更します" #~ msgid "" #~ "If you do not have an access token, turning this setting on may cause " #~ "GitHub to eventually rate limit you." #~ msgstr "" #~ "あなたがアクセストークンを持っていない場合、この設定をオンにしていると " #~ "Github からレート制限をされる恐れがあります。" #~ msgid "Type to filter" #~ msgstr "入力して検索" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "プロプライエタリなライセンスの結果を除外" #~ msgid "Advanced" #~ msgstr "高度なオプション" #~ msgid "Open this link externally" #~ msgstr "このリンクを外部で開く" bazaar-org-bazaar-b6e9a65/po/kw.po000066400000000000000000002777321522167256300170520ustar00rootroot00000000000000# Cornish translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Flynn Peck , 2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-15 02:13+0100\n" "PO-Revision-Date: 2026-06-15 16:09+0100\n" "Last-Translator: Flynn Peck \n" "Language-Team: kw\n" "Language: kw\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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Basar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Keworra, dilea, po nowedhi medhelweyth flatpak war'n amontyell ma" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;DyghtyerFardellow;Trovya;Flatpak;Medhelweyth;Gwerthji;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Fenester Nowydh" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Trovya ha dyghtya appys" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Gwerthji appys snell hag arnowydh rag Linux gans fog war ow trovya hag ow " "lea appys hag ystynansow Flatpak, dres oll dhyworth Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Lostya meur a leyansow ha pesya ow peuri" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Gweles kummyasow app yn es" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Omgelmi dhe Flathub rag gweles ha dyghtya agas appys drudh" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Hwilas appys dhyworth GNOME Shell didro" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "An Kevriysi Vasar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "An folen dre ow tispletya appys Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Folen app diskwedhyn" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Folen lyverva" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Folen hwithrans" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Folen glass" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Nowedhys Namoy" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Dilea" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 #: src/bz-bundle-install-dialog.blp:159 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Lea" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Dyghtya Ystynansow" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Nyns eus Ystynansow Weladow" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Agas dewisyow sidhlans a-lemmyn yw ow kudha oll ystynansow aswonys. " "Assayewgh ow chanjya dhedha." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Folen Ystynnans" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "Iskargow/Mis" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "Ow Receva Nowedhyansow Kolonnen Na Fella" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "An app ma a dhevnydh kerghynnedh nag ow receva nowedhyansow po ewnheansow " "sawder na fella. Yth a yll bydh diantel dhe dhevnydhya." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Ystynnans rag %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Diskwedhes Le" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Diskwedhes Moy" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Statystygyon Iskargow" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Gwiwder Bloodh" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Garowder Komik" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Nyns eus kedhlow yn-kever garowder komik" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Garowder Fantasi" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Nyns eus kedhlow yn-kever garowder fantasi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Garowder Gwirvosek" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Nyns eus kedhlow yn-kever garowder gwirvosek" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Garowder rag Krow" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Nyns eus kedhlow vyth yn-kever krow" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Garowder Reydhel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Nyns eus kedhlow yn-kever garowder reydhel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Las" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Nyns eus kedhlow yn-kever kampollans dhe las" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Droggya Anlaghel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Nyns eus kedhlow yn-kever kampollans dhe droggya anlaghel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tobacko" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Nyns eus kedhlow yn-kever kampollans dhe wara tobacko" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nothedh" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Nyns eus kedhlow yn-kever kampollans dhe nothedh" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Themow Reydhel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Nyns eus kedhlow yn-kever kampollans dhe bo portrayansow a nas reydhel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Koss" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Nyns eus kedhlow yn-kever kossyans" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Hwarthuster Anwiw" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Nyns eus kedhlow yn-kever hwarthuster anwiw" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Disfaveryans" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Nyns eus kedhlow yn-kever keskows disfaveryans a neb eghen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Argemynnow" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Nyns eus kedhlow yn-kever argemynnow" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Hapwaryans" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Nyns eus kedhlow yn-kever hapwaryans" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Prenyans" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Nyns eus kedhlow yn-kever prenyans" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Keskows ynter Devnydhyoryon" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Nyns eus kedhlow yn-kever keskows ynter devnydhyoryon" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Galow Pellgows ynter Devnydhyoryon" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Nyns eus kedhlow yn-kever keskows ynter devnydhyoryon" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Kedhlow Kestav" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "Nyns eus kedhlow yn-kever kevrans a henwyn devnydhyer po ebost" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Kedhlow Privedh" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Nyns eus kedhlow yn-kever kevrans a gedhlow privedh gans partiow-tressa" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Kevrans Tyller" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Nyns eus kedhlow yn-kever kevrans tyller gans devnydhyoryon erel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Horyans" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Nyns eus kedhlow yn-kever kampollans dhe horyans" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Avoutri" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Kedhlow vyth yn-kever kampollans dhe avoutri" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Warioryon Reydhel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Nyns eus kedhlow yn-kever warioryon reydhel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Defolyans" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Nyns eus kedhlow yn-kever kampollans dhe dhefolyans" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Korf Marow" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Nyns eus kedhlow yn-kever korf marow gweladow" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Kethneth" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Nyns eus kedhlow yn-kever kampollans dhe gethneth" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Nyns eus kampollans dhe dhroggys ynno" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Nyns eus kossya ynno" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Nyns eus argemynnow po treuswriansow monesek ynno" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Nyns eus kyjyans po nothedh ynno" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Nyns eus keskows heb musur ynno" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Nyns eus garowder ynno" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Droggys" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Koss" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Mona" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Kowethasek" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Garowder" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Oll" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "Yma gwiwder bloodh ankoth dhe %s" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s yw gwiw rag oll" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s yw gwiw rag fleghes yowynk" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s yw gwiw rag fleghes" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s yw gwiw rag degowogyon" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s yw gwiw rag tevesigesow" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s yw gwiw rag %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Restrenva system %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Isrestrenva dre %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Restrenvaow system ost" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Selyans system ost dhyworth /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Isrestrenva dhesktop %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Restrenva dhesktop" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Isrestrenva skrifow %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Restrenva skrifow" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Isrestrenva ilow %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Restrenva ilow" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Isrestrenva skeusennow %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Restrenva skeusennow" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Isrestrenva Gevren Poblek %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Restrenva Gevren Poblek" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Isrestrenva wydhyowyow %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Restrenva wydhyowyow" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Isrestrenva ensamplys %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Restrenva ensamplys" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Isrestrenva sorn devnydhyer %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Restrenva sorn devnydhyer" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Isrestrenva selyans devnydhyer %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Restrenva selyans devnydhyer" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Isrestrenva dhata devnydhyer %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Restrenva Dhata Devnydhyer" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Isrestrenva gerghynnedh devnydhyer %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Restrenva gerghynnedh devnydhyer" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Hedhas restrenva dhe %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Tyller restren ankoth" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Braster a'n Iskarg" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Braster pan Leys" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Myns dhe iskarga dhyworth an kesrosweyth" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Braster war Blasen" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Ygeri restrenva dhata devnydhyer" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Agas Data Devnydhyer" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Sornow, settyansow, ha data app erel" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Sorn" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Data yn sorn yn servadow" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Dilea Sorn" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Braster Leys Kerghynnedh" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Braster Iskarg Kerghynnedh" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:392 #: src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "Ankavadow" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Braster App" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Gwirhes" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Leys" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "Flynn " #: src/bz-application.c:799 msgid "Special Thanks" msgstr "Grassow Arbennik" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "Omdhigelmys yn Sewen!" #: src/bz-application.c:995 msgid "Performing setup…" msgstr "Ow kwruthyl selyans…" #: src/bz-application.c:1087 msgid "Set Up System Flathub?" msgstr "Selya Flathub System?" #: src/bz-application.c:1090 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "An withva system Flathub nag yw selys na hwath. Res yw dhe Vasar rag Flathub " "bos selys war'n leyans Flatpak system dhe peuri ha lea appys.\n" "\n" "Hwi a yll devnydhya Basar hwath rag peuri ha remova appys leys seulabrys." #: src/bz-application.c:1097 msgid "Set Up Flathub?" msgstr "Selya Flathub?" #: src/bz-application.c:1100 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub nag yw selys war'n system ma. Ny yllowgh peuri ha lea appys yn Basar " "mars ankavadow yw.\n" "\n" "Hwi a yll devnydhya Basar hwath rag peuri ha remova appys leys seulabrys." #: src/bz-application.c:1106 msgid "Later" msgstr "Wosa Henna" #: src/bz-application.c:1107 msgid "Set Up Flathub" msgstr "Selya Flathub" #: src/bz-application.c:1626 msgid "A backend error occurred" msgstr "Yth esa error a-bervedh" #: src/bz-application.c:1826 src/bz-application.c:4006 msgid "Refreshing…" msgstr "Ow Tisegha…" #: src/bz-application.c:1990 src/bz-application.c:4004 #, c-format msgid "Loading %d apps…" msgstr "Ow karga %d appys…" #: src/bz-application.c:2043 msgid "Failed to open file" msgstr "Ny yllir ygeri restren" #: src/bz-application.c:2141 msgid "An initialization error occurred" msgstr "Yth esa error dalleth" #: src/bz-application.c:2535 msgid "Checking for updates…" msgstr "Ow checkya rag nowedhyansow…" #: src/bz-application.c:2591 msgid "Failed to check for updates" msgstr "Ny yllir checkya rag nowedhyansow" #: src/bz-application.c:3717 msgid "Malformed Link" msgstr "Gorgrevren Gamm" #: src/bz-application.c:3718 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Yma lytherennans anewn y'n worgevren devnydhys rag ygeri an app ma hag yth a " "yll astel owth oberi yn termyn a dheu.\n" "\n" "Dell yw gwirhaval, hemm yw drefen KRunner ow tanvon IDys app anewn" #: src/bz-application.c:3726 msgid "Could not find app" msgstr "Ny yllir kavos app" #: src/bz-application.c:3757 msgid "Failed to load metainfo" msgstr "Ny yllir karga metakedhlow" #: src/bz-application.c:4008 msgid "Writing to cache…" msgstr "Ow skrifa dhe sorn…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Diskwedhes Oll" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "Oll \"%s\"" #: src/bz-apps-page.c:487 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d Appys" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Leyans Fardel" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "Medhelweyth serghek keworransel a yll kemeres moy spas" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Ow lea an app ma a yll rekwirya ow keworra devedhyans medhelweyth nowydh. " "Appys erel dhyworth an devedhyans ma a wra diskwedhes yn Basar.\n" "\n" "Keworra an devedhyans ma hepken mar sur owgh hwi a'n fydhya." #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "Leys yn Sewen!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Ygeri" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "Diskwedhes Manylyon App" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "Leys Seulabrys" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "Leyans re Fyllis" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Braster leyans ankoth" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "A-dro dhe %s rag lea" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Nyn eus kummyasow arbennik" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d iskargow y'n mis yw passys" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s kerghynnedh rag app" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Iskarg" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Kedhlow braster ankavadow" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Braster iskarg a %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Oll Bloodh" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Kedhlow gwiwder bloodh ankavadow" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Gwiw rag oll bloodh" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Gwiw rag %d bloodh hag a-ugh" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Ankoth" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Medhelweyth rydh a-woles dhe'n leshyans %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Medhelweyth rydh" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Medhelweyth Perghenogel" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Leshyans Arbennik: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Rydh" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Perghenogel" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Leshyans Arbennik" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Desedhadow" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Amontyell yn Unnik" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Gweythresek war amontyellow, leghennow, ha klapkodhow" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "Martesen angweythresek war dhevisyow wayadow" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Saw" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Peryl Isel" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Peryl Kresek" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Peryl Ughel" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Gwag" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Nyns eus Dyghtyans" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Nyns eus kedhlow dyghtyans provys war'n system ma. Hwi a yll peuri appys war " "Flathub hwath" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Peuri Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Dhywarlinen" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Peurell" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Na Wirhys" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Kedhlow awtour nag yw kavadow." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "An berghenogeth a'n %s ID app nag yw gwirys ha martesen fardel gemeneth yw." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "An berghenogeth a'n %s ID app re beu gwirys dre dhorn gans an bagas Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "An berghenogeth a'n %1$s ID app re beu gwirys gans %2$s war %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "An berghenogeth a'n %1$s ID app re beu gwirys ow tevnydhya %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "An berghenogeth a'n %s ID app re beu gwirys." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Notennow Dyllans Leun" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "An dyllans ma o gwrys possybyl gans devnydhyoryon avel hwi!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "My a gar ow kwruthyl Basar, mes ny allav vy gul henna yn unsel. Gweresewgh " "skoodhya displegyans pella gans owth argevri war Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Argevri dhe Vasar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Pyth yw Nowydh yn %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Dyllys %-e ves %B, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Dewis Leyans" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Yma dhywgh versyons liesek a'n app ma leys. Pyneyl a vynnowgh procedya gans?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Hedhi" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Rag An Devnydhyer Ma Hepken" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "an devnydhyer" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "oll devnydhyoryon" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Manylyon" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopia" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:408 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Kopys!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Somm Drudhyow" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Ny yllir nowedhi drudh" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Omgelmi gans Flathub rag dyghtya drudhyow" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Omgelmi" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "Drudhyow" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Lea Oll" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Ow karga" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Drudhyow Vyth" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Appys hwi a verkya avel drudh a wra diskwedhes omma" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Skoodhya An App Ma" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Dilea Dhyworth Drudhyow" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Ny yllir remova drudh" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Kyns" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Nessa" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "Ow Pennskrifa" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "Kemyskell" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Ilow" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "Gwarier" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "Rekordyer" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "Kevreser" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "Tonyer" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "Pellwolok" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Omhevelians" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Gwrians" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Aventur" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Arkade" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "Stockow" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "Bordh" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "Karten" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "Fleghes" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Lojyk" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "Gwari Rann" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Sether" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Hevelebyans" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Sportys" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Strateji" #: src/bz-flathub-category.c:124 msgid "Browsers" msgstr "Peurellow" #: src/bz-flathub-category.c:125 msgid "Chat" msgstr "Keskows" #: src/bz-flathub-category.c:126 msgid "Mail" msgstr "Post" #: src/bz-flathub-category.c:127 msgid "File Sharing" msgstr "Kevrennans Restren" #: src/bz-flathub-category.c:132 msgid "Audio & Video" msgstr "Son & Gwydhyow" #: src/bz-flathub-category.c:132 msgid "Media" msgstr "Media" #: src/bz-flathub-category.c:132 msgid "More Audio & Video" msgstr "Moy Son & Gwydhyow" #: src/bz-flathub-category.c:133 msgid "Developer Tools" msgstr "Toulys Amontydh" #: src/bz-flathub-category.c:133 msgid "Develop" msgstr "Displegya" #: src/bz-flathub-category.c:133 msgid "More Developer Tools" msgstr "Moy Toulys Amontydh" #: src/bz-flathub-category.c:134 msgid "Education" msgstr "Adhyskans" #: src/bz-flathub-category.c:134 msgid "Learn" msgstr "Dyski" #: src/bz-flathub-category.c:134 msgid "More Education" msgstr "Moy Adhyskans" #: src/bz-flathub-category.c:135 msgid "Gaming" msgstr "Gwariow" #: src/bz-flathub-category.c:135 msgid "Play" msgstr "Gwari" #: src/bz-flathub-category.c:135 msgid "More Gaming" msgstr "Moy Gwariow" #: src/bz-flathub-category.c:136 msgid "Graphics & Photography" msgstr "Grafek & Skeusenieth" #: src/bz-flathub-category.c:136 msgid "Create" msgstr "Gwruthyl" #: src/bz-flathub-category.c:136 msgid "More Graphics & Photography" msgstr "Moy Grafek & Skeusenieth" #: src/bz-flathub-category.c:137 msgid "Networking" msgstr "Rosweythyans" #: src/bz-flathub-category.c:137 msgid "Internet" msgstr "Kesrosweyth" #: src/bz-flathub-category.c:137 msgid "More Networking" msgstr "Moy Rosweythyans" #: src/bz-flathub-category.c:138 msgid "Productivity" msgstr "Askorruster" #: src/bz-flathub-category.c:138 msgid "Work" msgstr "Ober" #: src/bz-flathub-category.c:138 msgid "More Productivity" msgstr "Moy Askorruster" #: src/bz-flathub-category.c:139 msgid "Science" msgstr "Godhonieth" #: src/bz-flathub-category.c:139 msgid "More Science" msgstr "Moy Godhonieth" #: src/bz-flathub-category.c:140 msgid "System" msgstr "Kevreyth" #: src/bz-flathub-category.c:140 msgid "More System" msgstr "Moy Kevreyth" #: src/bz-flathub-category.c:141 msgid "Utilities" msgstr "Lesow" #: src/bz-flathub-category.c:141 msgid "Tools" msgstr "Toulys" #: src/bz-flathub-category.c:141 msgid "More Utilities" msgstr "Moy Lesow" #: src/bz-flathub-category.c:142 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Gerys-da Lemmyn" #: src/bz-flathub-category.c:142 msgid "More Trending" msgstr "Moy Gerys-da Lemmyn" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:171 msgid "Popular" msgstr "Gerys-da" #: src/bz-flathub-category.c:143 msgid "More Popular" msgstr "Moy Gerys-da" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "Keworrys A-dhiwedhes" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nowydh" #: src/bz-flathub-category.c:144 msgid "More New" msgstr "Moy Nowydh" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "Nowedhys A-dhiwedhes" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Nowedhys" #: src/bz-flathub-category.c:145 msgid "More Updated" msgstr "Moy Nowedhys" #: src/bz-flathub-category.c:146 msgid "Mobile" msgstr "Gwayadow" #: src/bz-flathub-category.c:146 msgid "More Mobile" msgstr "Moy Gwayadow" #: src/bz-flathub-category.c:147 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:147 msgid "More Adwaita" msgstr "Moy Adwaita" #: src/bz-flathub-category.c:148 msgid "KDE Apps" msgstr "Appys KDE" #: src/bz-flathub-category.c:148 msgid "More KDE Apps" msgstr "Moy Appys KDE" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub nag yw Keworrys" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "An gwerthji Flathub nag o kevys war neb a'gas leyansow Flatpak" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub Ankavadow" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Ny Yllir Drehedhes Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "Hwi a yll dyghtya ha hwilas rag appys hwath." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Hwilas Appys" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Dasjunya" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "App a'n Jydh" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "Gwayadow" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Appys rag agas klapkodhow ha leghennow Linux" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Moy Appys Gwayadow" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "Ni ♥ Gwariow​" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "Gwariow hag appys rag eksekutya agas titlys dhrudh" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "Moy Gwariow" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Sewyansow Vyth" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Assayewgh hwithrans aral" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Synsas" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Hemm yw ragwolok leel, nebes manylyon a yll bos dihaval dhe'n rolyans dyllys" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Gis Gwerthji Ragwolok" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "_Skoodhya" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "An app ma a dhevnydh kerghynnedh na fella ow receva nowedhyansow po " "ewnheansow sawder. Yth a yll bydh rag devnydh." #: src/bz-full-view.blp:538 msgid "Trash Data" msgstr "Data Atal" #: src/bz-full-view.blp:600 msgid "Add-ons" msgstr "Ystynansow" #: src/bz-full-view.blp:635 msgid "More Add-Ons" msgstr "Moy Ystynansow" #: src/bz-full-view.blp:646 msgid "Links" msgstr "Kevrennow" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Gorgevren Vyth" #: src/bz-full-view.c:199 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Yma leshyans rydh dhe'n app ma, ytho an kod a yll bos arhwilys rag salowder." #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Yma leshyans perghenogel dhe'n app ma, ytho an kod yw displegys privedh ha " "ny yllir bos arhwilys gans parti tressa anserghek." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Moy Appys" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Moy Appys gans %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Appys Erel gans an Awtour ma" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Appys Erel gans %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s nag yw leys, mes yma %s a dhata remenant hwath." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Appys Erel" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d App" msgstr[1] "%d Appys" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Ny yllir remova data devnydhyer" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Skoodhyans kalesweyth" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Skoodhyans bysowek" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Bysowegi a res" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Bysowegi komendys" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Bysowegi skoodhys" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Skoodhyans ankoth rag bysowegi" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Skoodhyans logosen" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Logosen po devisyow boyntya a res" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Logosen po devisyow boyntya komendys" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Logosen po devisyow boyntya skoodhys" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Skoodhyans ankoth rag logosen po devisyow boyntya" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Skoodhyans tochskrin" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Tochskrinyow a res" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Tochskrinyow gomendys" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Tochskrinyow skoodhys" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Skoodhyans ankoth rag tochskrinyow" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Skoodhyans klapkodh" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Gweythresek war dhevisyow wayadow" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Martesen angweythresek war dhevisyow wayadow" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Skoodhyans amontyell" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Gweythresek war skrinyow vras" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s gweythresek gwella war galesweyth komparek" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s yw gweythresek war an rann vrassa a dhevisyow" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Ygeri" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Dilea App" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Remova" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Nowedhyans" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Remova" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Hedhi" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Ow Hedhi" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Hwilas appys leys" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Dilea hwithrans" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Nyns eus Appys Kevys" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Hwilas Gwerthji Yn Le" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Lyverva" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Nowedhyansow Ow Gortos" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Iskargow" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Dileys A-Dhiwedhes" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Dilea Oberennow Deu" #: src/bz-library-page.blp:335 msgid "Sort By" msgstr "Sortya Orth" #: src/bz-library-page.blp:349 msgid "Name" msgstr "Hanow" #: src/bz-library-page.blp:355 msgid "Size" msgstr "Braster" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Nyns eus parow rag \"%s\" y'n rol appys leys" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u Nowedhyans Kavadow" msgstr[1] "%u Nowedhyansow Gavadow" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u App Leys" msgstr[1] "%u Appys Leys" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Bos Omvyskys" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Dyski Moy" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Leshyans Ankoth" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Byldys gans an Gemeneth" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "An app ma yw gwrys y'n poblek gans kemeneth geswlasek.\n" "\n" "Hwi a yll kemeres rann ha gweres dhe wellhe." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "An leshyans rag an app ma yw ankoth" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "An app ma yw gwrys y'n poblek gans kemeneth geswlasek, ha dyllys a-woles " "dhe'n leshyans %s.\n" "\n" "Hwi a yll kemeres rann ha gweres ow kwellhe." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "An app ma nag yw gwyrs y'n poblek, ytho an awtours hepken a aswon fatel yth " "a ober. Martesen, yth yw andhiogel yn agwedhow kales dhe helergi, hag yth a " "yll chanja heb ankov.\n" "\n" "Ny wodhon mar hwi a yll kevri dhe'n app ma." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "An app ma yw gwyrs a-woles dhe'n leshyans arbennik %s.\n" "\n" "Ny wodhon mar hwi a yll kevri dhe'n app ma." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Leshyans" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Junya dhe Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Yth esa Hager Vargen" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "Omgelmi rag kettermynyegi agas appys drudh yntra devisyow" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Finsya" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Dydh dha, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Dewis Restren Vetakedhlow" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Restrennow Metakedhlow" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Dewis Arwodhik (Dre Dhewis)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Restrennow Skeusen" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Ragwolok" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Dewisyow" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Junyans kesrosweyth yw strothys — diseghans awtomatek synsas gwerthji yw " "powesys" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "Disegha dre Dhorn" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Sidhlow Synsas" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Medhelweyth Rydh Hepken" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Kudha appys berghenogel dres ow peuri hag ow hwilas" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Sewyansow Flathub Hepken" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Finwetha sewyansow hwithrans ha peuryans dhe appys gavadow war Flathub hepken" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Sewyansow Wirhes Hepken" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Kudha sewyansow nag yw gwirhes war Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Kudha Appys Marow" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Kudha appys skoodhys na fella gans aga awtours" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Thema Barr Avonsyans" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Liw Devnydhyer" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Liwyow Wooth" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Liwyow Wooth Lesbian" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Liwyow Wooth Gourkethreydhel" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Liwyow Wooth Treusreydhek" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Liwyow Wooth Andhewek" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Liwyow Wooth Dewreydhel" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Liwyow Wooth Anreydhel" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Liwyow Wooth Pubreydhel" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Liwyow Wooth Anromansek" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Liwyow Wooth Reydh Linyel" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Liwyow Wooth Liesreydhel" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Liwyow Wooth Ollreydhel" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Liwyow Wooth Anromansek hag Anreydhel" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Liwyow Wooth Anreydh" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Liwyow Gooth Reydhkwir" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Liwyow Wooth Kesreydh" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Liwyow Wooth Hanterreydh" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Liwyow Wooth Dewromansek" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Liwyow Wooth Evredhyon" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Liwyow Wooth Maw-Gwregel" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Liwyow Wooth Newtroys" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Istori Dyllansow" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "Istori _Dyllansow" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Hedhyw" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "De" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "Nans yw %d dydh" msgstr[1] "Nans yw %d dedhyow" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "Nans yw %d seythen" msgstr[1] "Nans yw %d seythennyow" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "Nans yw %d mis" msgstr[1] "Nans yw %d misyow" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "Nans yw %d bledhen" msgstr[1] "Nans yw %d bledhynnyow" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Dyllans %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Nyns eus manylyon rag an dyllans ma" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Kerghes Moy Kedhlow" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Dilea" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "Kerghes" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Kummyasow Ankoth" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Kummyasow yw fyllis rag an app ma." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Kummyasow Vyth" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "App yw kontaynys yn leun" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Hedhas Kesrosweyth" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "A yll drehedhes an kesrosweyth" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Hedhas Kesrosweyth Vyth" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Ny yllir drehedhes an kesrosweyth" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Hedhas Devis Devnydhyer" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "A yll drehedhes devisyow kepar ha kameras po konsolen wariow gwydhyow" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Hedhas Devis Devnydhyer Vyth" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Ny yllir drehedhes devisyow kepar ha kameras po konsolen wariow gwydhyow" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Hedhas Devis Ynworrans" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "A yll drehedhes devisyow ynworrans" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Hedhas Korrgewsell ha Seni Son" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "A yll goslowes ow tevnydhya korrgewsellow ha seni son heb ow peji" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Hedhas Devis System" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "A yll drehedhes devisyow system may a rekwir kummyasow ughelhys" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Hedhas Synsas Skrin" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "A yll drehedhes an synsas a'n skrin po fenestri erel" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "System Fenester Anterrus" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "A dhevnydh prest system fenester anterrus (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Kummyas Siansek" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "A yll kavos kummyasow siansek" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Settyansow Dhevnydhyer" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "A yll drehedhes ha chanjya settyansow dhevnydhyer" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Hedhas rag Redya/Skrifa System Restrenva Leun" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "A yll redya ha skrifa oll data war'n system restrenva" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Hedhas rag Redya/Skrifa Restrenva Dre" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "A yll redya ha skrifa oll data y'gas restrenva dre" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Hedhas rag Redya System Restrenva Leun" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "A yll redya oll data y'n system restrenva" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Hedhas rag Redya Restrenva Dre" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "A yll redya oll data y'gas restrenva dre" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Hedhas rag Redya/Skrifa yn Restrenva Iskargow" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "A yll redya ha skrifa oll data y'gas restrenva iskargow" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Hedhas rag Redya yn Restrenva Iskargow" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "A yll redya oll data y'gas restrenva iskargow" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "A yll redya ha skrifa oll data y'n restrenva" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "A yll redya oll data y'n restrenva" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Hedhas System Restrenva Vyth" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Ny yllir drehedhes an system restrenva banna" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "A dhevnydh Gonisyow System" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "A yll govyn data dhyworth gonisyow anportal system" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "A dhevnydh Gonisyow Esedhek" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "A yll govyn data dhyworth gonisyow anportal esedhek" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Hedhas Gonis Vyth" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Ny yllir drehedhes gonisyow anportal system po esedhek banna" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Awtour App Gwirhes" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "An awtour a'n app ma yw gwirhes rag bos piw i onwul" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Kod Perghenogel" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "An kod nag yw poblek, ytho ny allas bos arhwilys yn anserghek ha martesen " "diantel yw" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Kod Arhwiladow" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "An kod yw poblek hag a yll bos arhwilys yn anserghek, ytho an app ma yw saw " "moy gwirhaval" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Devnydhya an Gonis System %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Devnydhya an Gonis Esedhek %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Devnydhya an Gonis %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "A yll gweles an gonis anportal" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "A yll kewsel dhe'n gonis anportal" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "A yll perghenna an gonis anportal" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Oberyans Rol Olldalghus" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "A yll diskwedhes rolyow yn barr rol olldalghus" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Oberyans Settyansow KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "A yll helerghi pan settyansow KDE chanjya" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Settyansow Olldalghus KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "A yll redya settyansow desktop KDE kepar ha fontow ha liwyow" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Gonis Gwithyans Kevrinyow" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "A yll gwitha ha kerghes an eryow-tremena y honan ow tevnydhya an alhwedhow-" "kylgh system" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Gonis Gwarnyansow Dhesktop" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "A yll danvon gwarnyansow dhesktop" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Oberyans Tallyour System" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "A yll diskwedhes arwodhik y'n tallyour system" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Oberyans KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "A yll keskomunya gans devisyow junys dre KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Yma dhe'n app ma kummyas neb a as dhe wrontya dh'y honan neb kummyas " "aral, ow skyppya an lestryn Flatpak.\n" "\n" "Ytho y hyll gul neppyth app normal heb lestryn a yll gul, kepar hag ow " "trehedhes oll a'gas restrennow hag ow junya dhe'n kesrosweyth.\n" "\n" "Ow kweles an kumyasow erel a yll ri tybyans gwella a'n pyth an app yw " "gwirhaval dhe wul." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Gweles Kumyasow Erel" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "ID App" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "An app ma a dhevnydh dyllans anterrus a'n kerghynnedh medhelweyth (SDK) hag " "a yll synsi kudynnow po goliadewderow sawder may na vydh ewnhys." #: src/bz-safety-dialog.c:278 msgid "Safety" msgstr "Sawder" #: src/bz-safety-dialog.c:344 #, c-format msgid "%s is Safe" msgstr "%s yw Saw" #: src/bz-safety-dialog.c:349 #, c-format msgid "%s has no Unsafe Permissions" msgstr "Nyns eus Kummyasow Dhiantel dhe %s" #: src/bz-safety-dialog.c:354 #, c-format msgid "%s is Probably Safe" msgstr "%s yw Saw Dell Hevel" #: src/bz-safety-dialog.c:359 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s yw Saw Martesen" #: src/bz-safety-dialog.c:364 #, c-format msgid "%s is Unsafe" msgstr "%s yw Diantel" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Skrinskeusennow" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Skeusen Gyns" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Skeusen Nessa" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Kopia Skeusen" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Dasgorra Gwel" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Lehe" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Moghhe" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Res A-dro Skeusennow" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Skrinskeusennow Vyth" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Ygeri Gwelell Skeusennow" #: src/bz-screenshots-carousel.c:287 #, c-format msgid "Screenshot %u of %u" msgstr "Skrinskeusennow %u a %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Sidhlow" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Gwirhes" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Rydh/Ygor" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "_Anmarow" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Sidhla rag appys Varow" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Klapkodh-Kowethek" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Klassys" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Hwilas Appys, Gwariow, Medhelweyth" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Sidhlow Hwithrans" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Dilea Hwithrans" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Peuri Klassys" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "Klassys Ankavadow" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "Hwilas rag appys gans an barr hwithrans a-ugh." #: src/bz-search-page.blp:362 msgid "No Applications Found" msgstr "Appys Kevys Vyth" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Sewyansow kevys vyth rag \"%s\" yn Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Gwydhyow" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Buro" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Kalender" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Messajys" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Liwa" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Keynres" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Omhevelians" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Folen Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Gwiasva Ragdres" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Rol Gudynnow" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Govynnow Gemmyn" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Gweres" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Argevri" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Treylya" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Kestava" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Pennfenten God" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Kevri" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Rol" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Kopia Gorgevren" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Linen Dermyn" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Leyansow:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Bys" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "A-dhia 15/4/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM Somm Leyansow" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fk Somm Leyansow" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d Somm Leyansow" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Sewyansow Kevys Vyth" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "Hwithrans re fyllis" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Gwitha Data Devnydhyer" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Alowa ow taskor settyansow & synsas personel" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Dilea Oll Data" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Dilea yn fast data devnydhyer rag erbysi dalghuster" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Lea %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Dewis py dyllans dhe lea. Martesen a wra lea darnow gevrennys keworransel" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Martesen a wra lea darnow geworransel poblek" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Hedhi" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Lea" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Remova %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Dewis py dyllans dhe remova." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Ny vydh galladow dhe dhevnydhya %s wosa dileys yw." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "\"%s\" yw Peryl Ughel" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Yma hedhas leun dh'gas system dhe'n app ma, ow synsi oll a'gas " "restrennow, istori peurell, geryow-tremena sawys ha moy. Ynwedh, yma " "hedhas dhe'n kesrosweyth, ytho yth a yll danvon agas data dhe bartiow " "tressa.\n" "\n" "Drefen perghenogel yw an app, ny allas bos arwhilys rag an pyth yth a wul " "gans an gummyasow ma." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "An app ma a dhevnydh an system fenestri anterrus X11, ytho yth a yll " "rekordya oll jynnskrifow, kemeres skrinskeusennow, ha helerghi appys " "erel. Ynwedh, yth a yll drehedhes an kesrosweyth, ytho yth a yll danvon " "agas data dhe bartiow tressa.\n" "\n" "Drefen perghenogel yw an app, ny allas bos arwhilys rag an pyth yth a wul " "gans an gummyasow ma." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Lea yn neb Kas" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Ny yllir karga fenester negys" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Oll appys yw leys seulabrys" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Da Lowr" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Lea %u App?" msgstr[1] "Lea %u Appys?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "An pyth a sew a vydh leys. Ynwedh, darnow gevrennys keworransel a vydh leys " "martesen" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d ystynansow a vydh leys." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Ynwedh, ystyanansow a vydh leys." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Lea Oll" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Deu yn %.02f eylennow" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Ystynnans rag App" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Kerghynnedh rag App" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Yn Lost" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Deu" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Hedhys" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Error" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Hedhi Negys" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Diskwedhes Kedhlow Error" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Rythhes" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Error Negys" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Ow Gortos" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Nowedhi Oll" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u Nowedhyans Kerghynnedh" msgstr[1] "%u Nowedhyansow Gerghynnedh" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Dyghtya Data Devnydhyer Remenant" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Data Devnydhyer Kevys Vyth" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Data Devnydhyer" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Remova Data Devnydhyer" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Data Devnydhhyer Removys rag %s" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Ow Tisegha" #: src/bz-window.blp:89 msgid "Curated" msgstr "Dyghtys" #: src/bz-window.blp:101 msgid "Explore" msgstr "Trovya" #: src/bz-window.blp:128 msgid "Search" msgstr "Hwithrans" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Pennrol" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Owth eksekutya owgh hwi dyllans nowydh a Vasar!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Pyth yw Nowydh" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Yma dhywgh junyans kewrosweyth mes ow kweles owgh hwi dyllans koth a Flathub" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "_Argevri dhe Vasar" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "_Disegha" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "_Omgelmi gans Flathub" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "_Dyghtya Data Devnydhyer Remenant" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "_Dewisyow" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "_Kesunyansow Vysowek" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "_A-dro dhe Vasar" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "_Kwytya Basar" #: src/bz-window.blp:342 msgid "Log Out" msgstr "Omdhigelmi" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Basar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Ny yllir lonchya app" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Ny yllowgh remova Basar dhyworth Basar!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Ny yllir gul an re na y'n eur ma" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Leyans" msgstr[1] "Leyansow" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navigacyon" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Ygeri Folen Drovya" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Ygeri Folen Lyverva" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Ygeri Folen Hwithrans" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Pellwithvaow" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Kettermynyegi Gwerthjiow" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Ollgemmyn" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Ygeri Dewisyow" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Diskwedhes Kesunyansow Vysowek" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Degea Fenester" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Kwytya Basar" #~ msgid "Flathub returned an error" #~ msgstr "Flathub ros tre error" #~ msgid "Retry Flathub Connection" #~ msgstr "Assaya Junyans Flathub Arta" #~ msgid "Tags:" #~ msgstr "Taggys:" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "Junya agas akont Flathub dhe Vasar rag dyghtya agas appys dhrudh." #~ msgid "Delay Search Results" #~ msgstr "Delatya Sewyansow Hwithrans" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "Gwellhe skavder sewyasow gans ow kesunya geryow hwithrans" #~ msgid "Progress Bar" #~ msgstr "Barr Avonsyans" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Dewis thema rag an barr avonsyans!" #~ msgid "Vertical Stripes" #~ msgstr "Linennow Plommwedhek" #~ msgid "Display flag colors from left to right" #~ msgstr "Diskwedhes liwyow vaner a-gledh dhe a-dhyghow" #~ msgid "Open Link" #~ msgstr "Ygeri Gorgevren" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "Appys Taggys avel \"%s\"" #~ msgid "User Data Size" #~ msgstr "Braster Data Devnydhyer" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Installing" #~ msgstr "Ow Lea" #~ msgid "Refresh completed!" #~ msgstr "Diseghans deu!" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "Leyansow" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Disegha" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "_Argevri dhe Vasar ❤️" #~ msgid "Open App Library" #~ msgstr "Ygeri Lyverva Appys" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "Ow lea fardellow .flatpak yw anskoodhys hwath" #~ msgid "Download & Install Application" #~ msgstr "Iskarga & Lea App" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgctxt "As in, \"100 Downloads\"" #~ msgid "Downloads" #~ msgstr "Iskargow" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Yth posleva ow skoodhya an awtours neb a gul an ekokevreyth Linux. Basar " #~ "omdhiskwedhes an tabb \"dyghtys\" dre konfigurys gans lesrenyadesow dhe " #~ "alowa rag eksperyans leel." #~ msgid "%e %B" #~ msgstr "%e %B" #~ msgid "Install Other Version" #~ msgstr "Lea Versyon Aral" #~ msgid "Support this application" #~ msgstr "Skoodhya an app ma" #~ msgid "Manage Add-ons" #~ msgstr "Dyghtya Ystynansow" #~ msgid "Keep Data" #~ msgstr "Gwitha Data" #~ msgid "Open App" #~ msgstr "Ygeri App" #~ msgid "_Login with Flathub" #~ msgstr "_Omgelmi gans Flathub" #~ msgid "Nucleus app page" #~ msgstr "Folen app Nuklesen" #~ msgid "_Synchronize Remotes" #~ msgstr "_Kerghes Gwerthjiow" #~ msgid "Synchronizing..." #~ msgstr "Ow Kettermynyegi..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "Ow receva %d enworrans manylyon..." #~ msgid "Indexing Data..." #~ msgstr "Ow Kevernya Data..." #~ msgid "Bazaar is a Passion Project" #~ msgstr "Basar yw Ragdres Passyon" #~ msgid "Support the Future of Linux App Distribution" #~ msgstr "Skoodhya an Termyn a Dheu a Lesrannans Appys Linux" #~ msgid "Disable the donations banner on startup" #~ msgstr "Ungallosegi an baner argevrohow dres dalleth" #~ msgid "Close" #~ msgstr "Kwytya" #~ msgid "Copy and Close" #~ msgstr "Dasskrifa ha Kwytya" #~ msgid "Refreshing Store Content" #~ msgstr "Ow Diseghow Dalgh Gwerthji" #~ msgid "No background tasks!" #~ msgstr "Oberennow vyth yn kilva!" #~ msgid "See More" #~ msgstr "Gweles Moy" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Dewis Dyghtyer Treuswrians" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Kwytya" #~ msgid "Ongoing" #~ msgstr "Didorr" #~ msgid "Finished" #~ msgstr "Deu" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "Treusperthi %s bys lemmyn" #~ msgid "Tasks" #~ msgstr "Oberennow" #~ msgid "Stop Active Tasks" #~ msgstr "Hedhi Oberennow Byw" #~ msgid "No Tasks Yet" #~ msgstr "Oberennow Vyth Hwath" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d Nowedh Kavadow" #~ msgstr[1] "%d Nowedhow Kavadow" #~ msgid "Updates Are Available" #~ msgstr "Nowedhow Kavadow" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "An appys a sew yw dewisadow rag nowedhow. A vynnsowgh lea y's?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "%d kerghynnedhow ha/po ystynnans yw dewisadow rag nowedhow. A vynnsowgh " #~ "lea y's?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "Dres hemma, %d kerghynnedhow ha/po ystyannans yw nowedhys." #~ msgid "Update Now" #~ msgstr "Nowedhi Lemmyn" #~ msgid "Resume Current Tasks" #~ msgstr "Daskemeres Oberennow A-Lemmyn" #~ msgid "Pause Current Tasks" #~ msgstr "Powes Oberennow A-Lemmyn" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "An Gallos dhe hwithra ha lea restrennow .flatpak leel ow tos yn skon! Yn " #~ "kettermyn, tria owth eksekutya\n" #~ "\n" #~ "flatpak install --bundle agas-gronn.flatpak\n" #~ "\n" #~ "yn an linen arghadow." #~ msgid "Hide EOL Entries" #~ msgstr "Keles appys marow" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "Keles appys marow hag appys serghek" #~ msgid "Only Show Free Software" #~ msgstr "Diskwedhes appys dhe wari hepken" #~ msgid "Hide proprietary software" #~ msgstr "Keles appys perghenogel" #~ msgid "Show Only Flathub Content" #~ msgstr "Diskwedhes synsas Flathub hepken" #~ msgid "Hide applications which do not originate from Flathub" #~ msgstr "Kudha appys may na dalleth dhyworth Flathub" #~ msgid "Show Only Verified Content" #~ msgstr "Diskwedhes Dalgh Flathub Hepken" #~ msgid "Hide applications which are not verified on Flathub" #~ msgstr "Kudha appys may na gwirys war Flathub" #~ msgid "Debounce Search Inputs" #~ msgstr "Kesunya Ynworransow Hwithrans" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "Addya unn ardak dherag hwilas rag preventya gorthebow desempis dres " #~ "jynnskrifa" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Deskrifa an mir a an Barr Avonsyans Olldalghus" #~ msgid "Saved Window Dimensions" #~ msgstr "Sawys Braster Fenester" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "An braster fenester rag devnydh gans an fenester Basar nessa" #~ msgid "?" #~ msgstr "?" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "An nas ma usi evredhek y'n eur ma. Y usi komendya dhe iskarga ha lea " #~ "Flatseal dhe dyghtya grontow appys." #~ msgid "Entry Inspector" #~ msgstr "Hwithrer Enworrans Manylyon" #~ msgid "Serialize" #~ msgstr "Kedreylya yn Baytys" #~ msgid "Convert to JSON" #~ msgstr "Kedreylya yn JSON" #~ msgid "More Mobile apps" #~ msgstr "Moy Appys Gwayadow" #~ msgid "Bazaar Inspector" #~ msgstr "Hwithrer Basar" #~ msgid "Background Task Info:" #~ msgstr "Kedhlow Oberennow Kilva:" #~ msgid "Enable Global Debug Mode" #~ msgstr "Gallosegi Prevessa Olldalghus" #~ msgid "Active Blocklists" #~ msgstr "Rol a Lettys Byw" #~ msgid "Active Curated-Configs" #~ msgstr "Settyansow Dyghtys Byw" #~ msgid "All Entry Groups" #~ msgstr "Oll Bagasow Enworrans Manylyon" #~ msgid "Decache and Inspect" #~ msgstr "Dissorn ha Hwithra" #~ msgid "No Flatpaks Installed" #~ msgstr "Vyth Flatpakow Ynstallys" #~ msgid "Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth (Gorwelyek)" #~ msgid "Lesbian Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Lesbian (Gorwelyek)" #~ msgid "Male Homosexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Gourkethreydhel (Gorwelyek)" #~ msgid "Transgender Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Treusreydhek (Gorwelyek)" #~ msgid "Nonbinary Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth na Den na Ben (Gorwelyek)" #~ msgid "Bisexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Dewreydhel (Gorwelyek)" #~ msgid "Asexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Anreydhel (Gorwelyek)" #~ msgid "Pansexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Pubreydhek (Gorwelyek)" #~ msgid "Aromantic Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Anromansek (Gorwelyek)" #~ msgid "Genderfluid Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Reydh Chanjus (Gorwelyek)" #~ msgid "Polysexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Liesreydhek (Gorwelyek)" #~ msgid "Omnisexual Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Ollreydhek (Gorwelyek)" #~ msgid "Aroace Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Anromansek hag Anreydhel (Gorwelyek)" #~ msgid "Agender Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Anreydh (Gorwelyek)" #~ msgid "Genderqueer Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth na Den na Ben (Gorwelyek)" #~ msgid "Intersex Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Hermaphroditek (Gorwelyek)" #~ msgid "Demigender Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Hanterreydh (Gorwelyek)" #~ msgid "Biromantic Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Dewromansek (Gorwelyek)" #~ msgid "Disability Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Evredhyon (Gorwelyek)" #~ msgid "Femboy Pride Colors (Horizontal)" #~ msgstr "Kolors Gooth Maw-Gwregel (Gorwelyek)" #~ msgid "Inspect UI Entry" #~ msgstr "Hwithra Elven Ynterfas" #~ msgid "All Debug Actions" #~ msgstr "Oll Gwriansow Prevessa" #~ msgid "Open Bazaar Inspector" #~ msgstr "Ygeri Hwithrer Basar" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u iskargow" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s usi fytti rag fleghes vyghan" #~ msgid "--- MB" #~ msgstr "--- MB" #~ msgid "Of the size of human DNA" #~ msgstr "a an braster a DNA den" #~ msgid "3 billion base pairs" #~ msgstr "3 bilvil koplow ben" #~ msgid "Of the Linux Kernel" #~ msgstr "a an Bewyn Linux" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "a an amontyell Apollo 11" #~ msgid "Total ROM and RAM" #~ msgstr "Somm rag ROM ha RAM" #~ msgid "Of the original Super Mario Bros" #~ msgstr "a Super Mario Bros" #~ msgid "On the NES" #~ msgstr "yn an NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "a an braster rag Wikipedya" #~ msgid "Without any media" #~ msgstr "Heb neb media" bazaar-org-bazaar-b6e9a65/po/meson.build000066400000000000000000000000471522167256300202120ustar00rootroot00000000000000i18n.gettext('bazaar', preset: 'glib') bazaar-org-bazaar-b6e9a65/po/nl.po000066400000000000000000002524131522167256300170270ustar00rootroot00000000000000# Dutch translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-04 14:01+0200\n" "PO-Revision-Date: 2026-06-06 15:40+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\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" #: data/io.github.kolunmi.Bazaar.desktop.in:2 data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 #: src/bz-window.blp:46 src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Voeg Flatpak software toe, verwijder deze of update deze op deze computer" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Systeem;Pakketbeheer;Ontdekken;Flatpak;Software;Winkel;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Nieuw venster" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Ontdek en installeer applicaties" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and installing Flatpak apps and " "addons, particularly from Flathub." msgstr "" "Een snelle en moderne appstore voor Linux, gericht op het ontdekken en installeren van applicaties en " "add-ons van Flatpak, specifiek van Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Zet meerdere installaties in een wachtrij en ga door met bladeren" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Bekijk eenvoudig de app-toestemmingen" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Log in met Flathub om je favorieten te beheren" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Zoek apps rechtstreeks vanuit GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:762 msgid "The Bazaar Contributors" msgstr "De bijdragers aan Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "De startpagina met Flathub-apps" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Exhibit app-pagina" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Bibliotheekpagina" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Zoekpagina" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Categoriepagina" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Ontvangt geen updates meer" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Verwijderen" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 src/bz-bundle-install-dialog.blp:159 #: src/bz-favorites-tile.c:157 src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Installeren" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 src/bz-addons-dialog.blp:70 #: src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Add-ons beheren" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Geen add-ons zichtbaar" #: src/bz-addons-dialog.blp:81 msgid "Your current filter preferences are hiding all known add-ons. Try adjusting them." msgstr "Jouw huidige filters verbergen alle bekende add-ons. Probeer ze te aan te passen." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Add-onpagina" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "Downloads/maand" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "Onvangt geen core-updates meer" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security fixes. It may become unsafe to " "use." msgstr "" "Deze add-on gebruikt een runtime die geen updates of beveiligingsupdates meer ontvangt. Deze app kan " "onveilig worden om te gebruiken." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Add-on voor %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Minder weergeven" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Meer weergeven" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Downloadstatistieken" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 src/bz-age-rating-dialog.c:736 #: src/bz-context-tile-callbacks.c:186 src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Leeftijdsadvies" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Cartoongeweld" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Geen informatie over cartoongeweld" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Fantasiegeweld" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Geen informatie over fantasiegeweld" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Realistisch geweld" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Geen informatie over realistisch geweld" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Geweld met bloedvergieten" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Geen informatie over geweld met bloedvergieten" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Seksueel geweld" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Geen informatie over seksueel geweld" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alcohol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Geen informatie over verwijzingen naar alcohol" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Drugs" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Geen informatie over verwijzingen naar illegale drugs" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabak" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Geen informatie over verwijzingen naar tabaksproducten" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Naaktheid" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Geen informatie over enige naaktheid" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Seksuele thema’s" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Geen informatie over seksuele verwijzingen of afbeeldingen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Grof taalgebruik" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Geen informatie over grof taalgebruik" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Ongepaste humor" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Geen informatie over ongepaste humor" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Discriminatie" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Geen informatie over discriminerend taalgebruik" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Reclame" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Geen informatie over enige reclame" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Gokken" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Geen informatie over gokken" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Aankopen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Geen informatie over de mogelijkheid om echt geld uit te geven" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Gesprekken tussen gebruikers" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Geen informatie over mogelijkheden om met andere gebruikers te chatten" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Audiogesprekken tussen gebruikers" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Geen informatie over mogelijkheden om met andere gebruikers te praten" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Contactgegevens" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "No information regarding sharing of social network usernames or email addresses" msgstr "Geen informatie over het delen van gebruikersnamen van sociale netwerken of e-mailadressen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Identificerende informatie" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Geen informatie over het delen van gebruikersinformatie met derden" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Locatie delen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Geen informatie over het delen van de fysieke locatie met andere gebruikers" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostitutie" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Geen informatie over verwijzingen naar prostitutie" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Overspel" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Geen informatie over verwijzingen naar overspel" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Geseksualiseerde personages" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Geen informatie over geseksualiseerde personages" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Heiligschennis" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Geen informatie over verwijzingen naar heiligschennis" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Menselijke overblijfselen" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Geen informatie over zichtbare overblijfselen van dode mensen" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Slavernij" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Geen informatie over verwijzingen naar slavernij" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Bevat geen verwijzingen naar drugs" #: src/bz-age-rating-dialog.c:426 msgid "Does not include swearing, profanity, and other kinds of strong language" msgstr "Bevat geen scheldwoorden of ander grof taalgebruik" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Bevat geen reclame of geldtransacties" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Bevat geen seks of naaktheid" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Bevat geen niet-gecontroleerde gespreksfunctionaliteit tussen gebruikers" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Bevat geen geweld" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drugs" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Grof taalgebruik" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Geld" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Sociaal" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Geweld" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Alle" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s heeft een onbekende leeftijdsclassificatie" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s is geschikt voor iedereen" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s is geschikt voor jonge kinderen" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s is geschikt voor kinderen" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s is geschikt voor tieners" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s is geschikt voor volwassenen" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s is geschikt voor %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Systeemmap %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Home-submap %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Systeemmappen van host" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Systeemconfiguratie van host in /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Bureaublad-submap %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Bureaubladmap" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Bureaublad-submap %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Documentenmap" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Muziek-submap %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Muziekmap" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Afbeeldingen-submap %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Afbeeldingenmap" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Openbare submap %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Openbare map" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Video’s-submap %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Video's-map" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Sjablonen-submap %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Sjablonenmap" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Cache-submap %s van de gebruiker" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Cachemap van de gebruiker" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Configuratie-submap %s van de gebruiker" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Configuratiemap van de gebruiker" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Gegevens-submap %s van de gebruiker" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Gegevensmap van de gebruiker" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Runtime-submap %s van de gebruiker" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Runtime-map van de gebruiker" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Toegang tot %s in bestandssysteem" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Onbekend bestandspad" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Downloadgrootte" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Geïnstalleerde grootte" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Te downloaden hoeveelheid van internet" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Grootte op schijf" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Open gebruikersgegevensmap" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Jouw gebruikersgegevens" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Caches, instellingen en andere app-data" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Cache" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Tijdelijke gecachte data" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Cache legen" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Grootte geïnstalleerde runtime" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Downloadgrootte runtime" #: src/bz-app-size-dialog.c:220 msgid "App Size" msgstr "App-grootte" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 src/bz-rich-app-tile.blp:105 #: src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Geverifieerd" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 src/bz-releases-list.c:206 msgid "Installed" msgstr "Geïnstalleerd" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:765 msgid "translator-credits" msgstr "" "Alexander Vanhee, 2025\n" "SKBotNL, 2026" #: src/bz-application.c:775 msgid "Special Thanks" msgstr "Speciale dank" #: src/bz-application.c:833 msgid "Logged Out Successfully!" msgstr "Succesvol uitgelogd!" #: src/bz-application.c:969 msgid "Performing setup…" msgstr "Setup aan het uitvoeren…" #: src/bz-application.c:1055 msgid "Set Up System Flathub?" msgstr "Flathub van het systeem instellen?" #: src/bz-application.c:1058 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be configured on the system Flatpak " "installation to browse and install applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "De Flathub-bron van het systeem is niet ingesteld. Bazaar vereist dat Flathub is geconfigureerd in de " "Flatpak-installatie van het systeem om applicaties te kunnen bladeren en installeren\n" "\n" "Je kunt Bazaar nog steeds gebruiken om reeds geïnstalleerde apps te bladeren en verwijderen." #: src/bz-application.c:1065 msgid "Set Up Flathub?" msgstr "Flathub instellen?" #: src/bz-application.c:1068 msgid "" "Flathub is not set up on this system. You will not be able to browse and install applications in Bazaar " "if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub is niet ingesteld op dit systeem. Je kunt geen applicaties in Bazaar bladeren en installeren " "als het niet beschikbaar is.\n" "\n" "Je kunt Bazaar nog steeds gebruiken om reeds geïnstalleerde apps te bladeren en verwijderen." #: src/bz-application.c:1074 msgid "Later" msgstr "Later" #: src/bz-application.c:1075 msgid "Set Up Flathub" msgstr "Flathub instellen" #: src/bz-application.c:1431 msgid "A backend error occurred" msgstr "Er is een backend-fout opgetreden" #: src/bz-application.c:1631 src/bz-application.c:3783 msgid "Refreshing…" msgstr "Verversen…" #: src/bz-application.c:1795 src/bz-application.c:3781 #, c-format msgid "Loading %d apps…" msgstr "%d apps laden…" #: src/bz-application.c:1848 msgid "Failed to open file" msgstr "Kan bestand niet openen" #: src/bz-application.c:1946 msgid "An initialization error occurred" msgstr "Een initialisatiefout is opgetreden" #: src/bz-application.c:2312 msgid "Checking for updates…" msgstr "Controleren op updates…" #: src/bz-application.c:2368 msgid "Failed to check for updates" msgstr "Het controleren op updates is mislukt" #: src/bz-application.c:3494 msgid "Malformed Link" msgstr "Onjuiste link" #: src/bz-application.c:3495 msgid "" "The link used to open this app has incorrect capitalization and may stop working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "De link die wordt gebruikt om deze app te openen, bevat fouten in het gebruik van hoofdletters en werkt " "in de toekomst mogelijk niet meer.\n" "\n" "Dit wordt hoogstwaarschijnlijk veroorzaakt doordat KRunner onjuiste app-ID’s verstuurt" #: src/bz-application.c:3503 msgid "Could not find app" msgstr "Kan app niet vinden" #: src/bz-application.c:3534 msgid "Failed to load metainfo" msgstr "Het laden van de metainfo is mislukt" #: src/bz-application.c:3785 msgid "Writing to cache…" msgstr "Schrijven naar cache…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Toon alle" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "Alle \"%s\"" #: src/bz-apps-page.c:487 #, c-format msgid "%d Applications" msgstr "%d applicaties" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Bundelinstallatie" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "Extra afhankelijkheden kunnen extra ruimte in beslag nemen" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps from this source will show up " "in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Voor het installeren van deze app moet je mogelijk een nieuwe softwarebron toevoegen. Andere apps uit " "deze bron worden dan in Bazaar weergegeven.\n" "\n" "Voeg deze bron alleen toe als je er zeker van bent dat je deze kunt vertrouwen." #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "Successvol geïnstalleerd!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 src/bz-rich-app-tile.blp:198 #: src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Openen" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "Appgegevens tonen" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "Al geïnstalleerd" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "Installatie mislukt" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Onbekende installatiegrootte" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Ongeveer %s om te installeren" #: src/bz-bundle-install-dialog.c:185 src/bz-context-tile-callbacks.c:104 #: src/bz-context-tile-callbacks.c:392 src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "N.v.t." #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Geen speciale machtigingen" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d downloads in de afgelopen maand" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s runtime" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Download" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Grootte-informatie onbeschikbaar" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Downloadgrootte van %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Alle leeftijden" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Leeftijdsclassificatie niet beschikbaar" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Geschikt voor alle leeftijden" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Geschikt voor %d-jarigen en ouder" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Onbekend" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Vrije software gelicentieerd onder %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Alleen vrije software" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Propriëtaire software" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Speciale licentie: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Vrij" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Propriëtair" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Speciale licentie" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Adaptief" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Alleen desktop" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Werkt op desktop, tablets en telefoons" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "Werkt mogelijk niet op mobiele apparaten" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "Veilig" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Laag risico" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Gemiddeld risico" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Hoog risico" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 src/bz-flathub-page.blp:19 #: src/bz-full-view.blp:30 src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Leeg" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Geen gecureerde apps" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still browse applications on Flathub" msgstr "Er is geen curatie-info beschikbaar op dit systeem. Je kan nog steeds apps op Flathub bladeren" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Flathub bladeren" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Offline" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Browser" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Niet geverifieerd" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Ontwikkelaarsinformatie niet beschikbaar." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "The ownership of the %s app ID has not been verified and it may be a community package." msgstr "Het eigendom van het %s app-ID is niet geverifieerd en het kan een communitypakket zijn." #: src/bz-developer-badge.c:237 #, c-format msgid "The ownership of the %s app ID has been manually verified by the Flathub team." msgstr "Het eigendom van het %s app-ID is handmatig geverifieerd door het Flathub-team." #: src/bz-developer-badge.c:253 #, c-format msgid "The ownership of the %1$s app ID has been verified by %2$s on %3$s." msgstr "Het eigendom van het %1$s app-ID is geverifieerd door %2$s op %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Het eigendom van het %1$s app-ID is geverifieerd met %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Het eigendom van het %s app-ID is geverifieerd." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Volledige release-opmerkingen" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Deze release is mogelijk gemaakt door gebruikers zoals jij!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further development by donating on Ko-Fi." msgstr "" "Ik vind het geweldig om Bazaar te maken, maar ik kan het niet in mijn eentje. Steun de verdere " "ontwikkeling door een donatie te doen via Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Doneer aan Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Wat is er nieuw in %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Uitgebracht op %B %-e, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Kies een installatie" #: src/bz-entry-group-util.c:76 msgid "You have multiple versions of this app installed. Which one would you like to proceed with?" msgstr "Je hebt meerdere versies van deze app geïnstalleerd. Met welke wil je verdergaan?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Annuleren" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Alleen voor deze gebruiker" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "deze gebruiker" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "alle gebruikers" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 src/bz-safety-dialog.blp:46 msgid "Details" msgstr "Details" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopiëren" #: src/bz-error-dialog.c:56 src/bz-share-list.c:364 msgid "Copied!" msgstr "Gekopieërd!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Aantal favorieten" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Updaten van favorieten is mislukt" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Log in met Flathub om favorieten te beheren" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Log in" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 src/bz-window.blp:335 msgid "Favorites" msgstr "Favorieten" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Alles installeren" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Laden" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Geen favorieten" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Applicaties die je als favoriet markeert verschijnen hier" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Deze applicatie steunen" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Van favorieten verwijderen" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Verwijderen van favorieten is mislukt" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Vorige" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Volgende" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "Bewerken" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "Mixer" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Muziek" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "Muziekspeler" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "Geluidsrecorder" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "Muzieksequencer" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "Tuner" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Emulatie" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Actie" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Avontuur" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Arcade" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "Blokken" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "Bord" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "Kaart" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "Kinderen" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Logica" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "Rollenspel" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Shooter" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Simulatie" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Sport" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Strategie" #: src/bz-flathub-category.c:124 msgid "Browsers" msgstr "Browsers" #: src/bz-flathub-category.c:125 msgid "Chat" msgstr "Chat" #: src/bz-flathub-category.c:126 msgid "Mail" msgstr "Mail" #: src/bz-flathub-category.c:127 msgid "File Sharing" msgstr "Bestanden delen" #: src/bz-flathub-category.c:132 msgid "Audio & Video" msgstr "Audio & video" #: src/bz-flathub-category.c:132 msgid "Media" msgstr "Media" #: src/bz-flathub-category.c:132 msgid "More Audio & Video" msgstr "Meer audio & video" #: src/bz-flathub-category.c:133 msgid "Developer Tools" msgstr "Ontwikkeltools" #: src/bz-flathub-category.c:133 msgid "Develop" msgstr "Ontwikkel" #: src/bz-flathub-category.c:133 msgid "More Developer Tools" msgstr "Meer ontwikkeltools" #: src/bz-flathub-category.c:134 msgid "Education" msgstr "Educatie" #: src/bz-flathub-category.c:134 msgid "Learn" msgstr "Leren" #: src/bz-flathub-category.c:134 msgid "More Education" msgstr "Meer educatie" #: src/bz-flathub-category.c:135 msgid "Gaming" msgstr "Gaming" #: src/bz-flathub-category.c:135 msgid "Play" msgstr "Spelen" #: src/bz-flathub-category.c:135 msgid "More Gaming" msgstr "Meer gaming" #: src/bz-flathub-category.c:136 msgid "Graphics & Photography" msgstr "Grafisch & fotografie" #: src/bz-flathub-category.c:136 msgid "Create" msgstr "Creëren" #: src/bz-flathub-category.c:136 msgid "More Graphics & Photography" msgstr "Meer grafisch & fotografie" #: src/bz-flathub-category.c:137 msgid "Networking" msgstr "Netwerken" #: src/bz-flathub-category.c:137 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:137 msgid "More Networking" msgstr "Meer netwerken" #: src/bz-flathub-category.c:138 msgid "Productivity" msgstr "Productiviteit" #: src/bz-flathub-category.c:138 msgid "Work" msgstr "Werk" #: src/bz-flathub-category.c:138 msgid "More Productivity" msgstr "Meer productiviteit" #: src/bz-flathub-category.c:139 msgid "Science" msgstr "Wetenschap" #: src/bz-flathub-category.c:139 msgid "More Science" msgstr "Meer wetenschap" #: src/bz-flathub-category.c:140 msgid "System" msgstr "Systeem" #: src/bz-flathub-category.c:140 msgid "More System" msgstr "Meer systeem" #: src/bz-flathub-category.c:141 msgid "Utilities" msgstr "Hulpprogramma’s" #: src/bz-flathub-category.c:141 msgid "Tools" msgstr "Hulpmiddelen" #: src/bz-flathub-category.c:141 msgid "More Utilities" msgstr "Meer hulpprogramma’s" #: src/bz-flathub-category.c:142 src/bz-flathub-page.blp:109 src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Trending" #: src/bz-flathub-category.c:142 msgid "More Trending" msgstr "Meer trending" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:115 src/bz-flathub-page.blp:171 msgid "Popular" msgstr "Populair" #: src/bz-flathub-category.c:143 msgid "More Popular" msgstr "Meer populair" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "Recent toegevoegd" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nieuw" #: src/bz-flathub-category.c:144 msgid "More New" msgstr "Meer nieuwe" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "Onlangs bijgewerkt" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Bijgewerkt" #: src/bz-flathub-category.c:145 msgid "More Updated" msgstr "Meer bijgewerkt" #: src/bz-flathub-category.c:146 msgid "Mobile" msgstr "Onderweg" #: src/bz-flathub-category.c:146 msgid "More Mobile" msgstr "Meer onderweg" #: src/bz-flathub-category.c:147 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:147 msgid "More Adwaita" msgstr "Meer Adwaita" #: src/bz-flathub-category.c:148 msgid "KDE Apps" msgstr "KDE-apps" #: src/bz-flathub-category.c:148 msgid "More KDE Apps" msgstr "Meer KDE-apps" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub niet toegevoegd" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "De Flathub-bron is op geen van je Flatpak installaties teruggevonden" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub is onbeschikbaar" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Flathub is niet bereikbaar" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "Je kunt nog steeds applicaties beheren en zoeken." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Apps zoeken" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Opnieuw verbinden" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "App van de dag" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "Onderweg" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Apps voor je Linux-telefoons en -tablets" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Meer mobiele apps" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "Wij​ ♥​ games" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "Spellen en apps om je favoriete titels te spelen" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "Meer spellen" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 src/bz-library-page.blp:82 msgid "No Results" msgstr "Geen resultaten" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Probeer een andere zoekterm" #: src/bz-full-view.blp:41 msgid "Content" msgstr "Content" #: src/bz-full-view.blp:106 msgid "This is a local preview, some details may differ from the published listing" msgstr "Dit is een voorvertoning, sommige details kunnen afwijken van de gepubliceerde vermelding" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Voorvertoning winkel openen" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "_Steunen" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. It may become unsafe to use." msgstr "" "Deze app gebruikt een runtime die geen updates of beveiligingsupdates meer ontvangt. Het kan onveilig " "worden om te gebruiken." #: src/bz-full-view.blp:548 msgid "Trash Data" msgstr "Gegevens verwijderen" #: src/bz-full-view.blp:610 msgid "Add-ons" msgstr "Add-ons" #: src/bz-full-view.blp:645 msgid "More Add-Ons" msgstr "Meer add-ons" #: src/bz-full-view.blp:656 msgid "Links" msgstr "Links" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Geen URL" #: src/bz-full-view.c:199 msgid "This application has a FLOSS license, meaning the source code can be audited for safety." msgstr "" "Deze applicatie heeft een FLOSS licentie, wat betekent dat de broncode gecontroleerd kan worden op " "veiligheid." #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is developed privately and cannot " "be audited by an independent third party." msgstr "" "Deze applicatie heeft een propriëtaire licentie, wat betekent dat de broncode privé wordt ontwikkeld en " "niet gecontroleerd kan worden door een onafhankelijke derde partij." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Meer apps" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Andere apps van %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Andere apps van deze ontwikkelaar" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Andere apps van %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s is niet geïnstalleerd, maar heeft nog %s aan gegevens." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Andere apps" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d applicatie" msgstr[1] "%d applicaties" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Verwijderen van gebruikersgegevens is mislukt" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Hardwareondersteuning" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Toetsenbordondersteuning" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Vereist toetsenbord" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Toetsenbord aanbevolen" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Ondersteunt toetsenborden" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Onbekende ondersteuning voor toetsenborden" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Muisondersteuning" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Vereist muis of aanwijzingsapparaat" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Muis of aanwijzingsapparaat aanbevolen" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Ondersteunt muis of aanwijzingsapparaten" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Onbekende ondersteuning voor muis of aanwijzingsapparaten" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Touchscreen-ondersteuning" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Vereist touchscreen" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Touchscreens aanbevolen" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Ondersteunt touchscreens" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Onbekende ondersteuning voor touchscreens" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Mobiele ondersteuning" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Werkt op mobiele apparaten" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Werkt mogelijk niet goed op mobiele apparaten" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Desktopondersteuning" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Werkt goed op grote schermen" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s werkt het beste op specifieke hardware" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s werkt op de meeste apparaten" #: src/bz-install-controls.blp:62 msgid "_Open" msgstr "_Openen" #: src/bz-install-controls.blp:77 src/bz-install-controls.blp:134 msgid "Uninstall Application" msgstr "Applicatie verwijderen" #: src/bz-install-controls.blp:87 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Verwijderen" #: src/bz-install-controls.blp:121 src/bz-updates-card.c:164 src/bz-updates-card.c:183 msgid "Update" msgstr "Updaten" #: src/bz-install-controls.blp:144 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Verwijderen" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Annuleren" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Bezig met annuleren" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Geïnstalleerde apps zoeken" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Geschiedenis wissen" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Geen applicaties gevonden" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "In plaats daarvan in winkel zoeken" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Bibliotheek" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "Wachtende updates" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "Downloads" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "Onlangs verwijderd" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "Afgeronde taken wissen" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "Sorteren op" #: src/bz-library-page.blp:348 msgid "Name" msgstr "Naam" #: src/bz-library-page.blp:354 msgid "Size" msgstr "Grootte" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Geen resultaten gevonden voor \"%s\" in de lijst met geïnstalleerde apps" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u beschikbare update" msgstr[1] "%u beschikbare updates" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u geïnstalleerde app" msgstr[1] "%u geïnstalleerde apps" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "Doe mee" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "Leer meer" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Onbekende licentie" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Door de community gebouwd" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Deze app wordt openbaar ontwikkeld door een internationale community.\n" "\n" "Je kunt dus deelnemen en helpen om de app nog beter te maken." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "De licentie van deze app is niet bekend" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Deze app wordt openbaar ontwikkeld door een internationale community en uitgebracht onder de %s " "licentie.\n" "\n" "Je kunt deelnemen en helpen om de app nog beter te maken." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it works. It may be insecure in " "ways that are hard to detect, and it may change without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Deze app wordt niet in het openbaar ontwikkeld, dus alleen de ontwikkelaars weten hoe het werkt. De app " "kan op moeilijk te detecteren manieren onveilig zijn en kan zonder toezicht veranderen.\n" "\n" "Je kunt mogelijk niet bijdragen aan deze app." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Deze app is ontwikkeld onder de speciale licentie %s.\n" "\n" "Je kunt mogelijk niet bijdragen aan deze app." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "Licentie" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Verbinden met Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Er ging iets mis" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "Log in om je favoriete apps op al je apparaten te synchroniseren" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Voltooien" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Hallo, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Selecteer een metainfo-bestand" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Metainfo-bestanden" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Selecteer een icoon (optioneel)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Fotobestanden" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Voorbeeld" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Voorkeuren" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "De netwerkverbinding is gelimiteerd — automatisch vernieuwen van de winkelgegevens is gepauzeerd" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "Handmatig verversen" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Contentfilters" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Alleen vrije software" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Verberg propriëtaire applicaties bij bladeren en zoeken" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Alleen resultaten van Flathub" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to applications only available on Flathub" msgstr "Beperk de zoek- en bladerresultaten tot applicaties die alleen op Flathub beschikbaar zijn" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Alleen geverifieerde resultaten" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Verberg resultaten die niet geverifieerd zijn op Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Verberg end-of-life-apps" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Verberg apps die niet langer ondersteund worden door hun ontwikkelaars" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Voortgangsbalkthema" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Accentkleur" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Pride kleuren" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Lesbische pride kleuren" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Mannelijke homoseksuele pride kleuren" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Transgender pride kleuren" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Nonbinaire pride kleuren" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Biseksuele pride kleuren" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Aseksuele pride kleuren" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Panseksuele pride kleuren" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Aromantische pride kleuren" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Genderfluïde pride kleuren" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Polyseksuele pride kleuren" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Omniseksuele pride kleuren" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Aroace pride kleuren" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Agender pride kleuren" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Genderqueer pride kleuren" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Intersekse pride kleuren" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Demigender pride kleuren" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Biromantische pride kleuren" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Disability pride kleuren" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Femboy pride kleuren" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Neutrois pride kleuren" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Versie geschiedenis" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Versiegeschiedenis" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Vandaag" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Gisteren" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d dag geleden" msgstr[1] "%d dagen geleden" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d week geleden" msgstr[1] "%d weken geleden" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d maand geleden" msgstr[1] "%d maanden geleden" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d jaar geleden" msgstr[1] "%d jaren geleden" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Versie %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Geen details voor deze versie" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Meer informatie" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Verwijderen" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "/" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Onbekende machtigingen" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Machtigingen ontbreken voor deze app." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Geen machtigingen" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "App is volledig gesandboxt" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Netwerktoegang" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Heeft toegang tot het internet" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Geen netwerktoegang" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Heeft geen toegang tot het internet" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Toegang tot gebruikersapparaten" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Heeft toegang tot apparaten zoals webcams of spelcontrollers" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Geen toegang tot gebruikersapparaten" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Heeft geen toegang tot apparaten zoals webcams of spelcontrollers" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Toegang tot invoerapparaten" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Heeft toegang tot invoerapparaten" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Toegang tot microfoon en audio-afspelen" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "Kan audio opnemen en afspelen zonder toestemming te vragen" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Toegang tot systeemapparaten" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "Heeft toegang tot systeemapparaten waarvoor verhoogde rechten vereist zijn" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Toegang tot scherminhoud" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Heeft toegang tot de inhoud van het scherm of andere vensters" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Verouderd venstersysteem" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Gebruikt een verouderd venstersysteem (X11)" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "Alle mogelijke machtigingen" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Kan alle mogelijke machtigingen verkrijgen" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Gebruikersinstellingen" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Kan gebruikersinstellingen bekijken en wijzigen" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Lees- en schrijftoegang tot het volledige bestandssysteem" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Kan alle gegevens op het bestandssysteem lezen en schrijven" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Lees- en schrijftoegang tot de persoonlijke map" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Kan alle gegevens in jouw persoonlijke map lezen en schrijven" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Leestoegang tot het volledig bestandssysteem" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Kan alle gegevens op het bestandssysteem lezen" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Leestoegang tot de persoonlijke map" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Kan alle gegevens in jouw persoonlijke map lezen" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Lees- en schrijftoegang tot de downloadmap" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Kan alle gegevens in jouw downloadmap lezen en schrijven" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Leestoegang tot de downloadmap" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Kan alle gegevens in jouw downloadmap lezen" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Kan alle gegevens in de map lezen en schrijven" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Kan alle gegevens in de map lezen" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Geen toegang tot het bestandssysteem" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Heeft geen enkele toegang tot het bestandssysteem" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Gebruikt systeemdiensten" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Kan buiten het portaal om gegevens opvragen van systeemdiensten" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Gebruikt sessiediensten" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Kan buiten het portaal om gegevens opvragen van sessiediensten" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Geen diensttoegang" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Heeft buiten het portaal om geen enkele toegang tot sessie- of systeemdiensten" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Geverifieerde app-ontwikkelaar" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "De ontwikkelaar van deze app is geverifieerd en zijn wie ze zeggen dat ze zijn" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Propriëtaire code" #: src/bz-safety-calculator.c:365 msgid "The source code is not public, so it cannot be independently audited and might be unsafe" msgstr "" "De broncode is niet publiek, dus het kan niet onafhankelijk gecontroleerd worden en kan onveilig zijn" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Controleerbare code" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the app more likely to be safe" msgstr "" "De broncode is publiek en kan onafhankelijk gecontroleerd worden, wat de app waarschijnlijk veiliger " "maakt" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Gebruikt de %s-systeemdienst" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Gebruikt de %s-sessiedienst" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Gebruikt de %s-dienst" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Kan buiten het portaal om de dienst zien" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Kan buiten het portaal om praten met de dienst" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Kan buiten het portaal om eigenaar zijn van de dienst" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Globale menu-integratie" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Kan menu’s in de globale menubalk tonen" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "KDE-instellingen integratie" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Kan detecteren wanneer de instellingen van het KDE-bureaublad veranderen" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Globale KDE-instellingen" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Kan KDE-bureaubladvoorkeuren zoals lettertypen en kleuren lezen" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Beveiligde opslagservice" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Kan zijn eigen wachtwoorden opslaan en ophalen via de systeemsleutelbeheerder" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Bureaubladnotificatiedienst" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Kan bureaubladmeldingen sturen" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Systeemvakintegratie" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Kan een icoon tonen in het systeemvak" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE Connect-integratie" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Kan communiceren met gekoppelde apparaten via KDE Connect" #: src/bz-safety-dialog.blp:59 msgid "App ID" msgstr "App ID" #: src/bz-safety-dialog.blp:69 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:100 msgid "" "This app uses an outdated version of the software platform (SDK) and might contain bugs or security " "vulnerabilities which will not be fixed." msgstr "" "Deze app gebruikt een verouderde versie van het softwareplatform (SDK) en kan bugs of " "beveiligingskwetsbaarheden bevatten die niet zullen worden opgelost." #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "Veiligheid" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "%s is veilig" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s geeft geen onveilige machtigingen" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "%s is waarschijnlijk veilig" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s is mogelijk onveilig" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "%s is onveilig" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Schermafbeeldingen" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Vorige schermafbeelding" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Volgende schermafbeelding" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Afbeelding kopiëren" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Weergave resetten" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Uitzoomen" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Inzoomen" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Schermafbeeldingen-carrousel" #: src/bz-screenshots-carousel.blp:117 msgid "Open Screenshot Viewer" msgstr "Schermafbeeldingsviewer openen" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filters" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Geverifieerd" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Vrij" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Niet-_EOL" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Verberg end-of-life-apps" #: src/bz-search-filter-popover.blp:57 msgid "Categories" msgstr "Categorieën" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Apps, games en software zoeken" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Zoekfilters" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Zoekopdracht wissen" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Categorieën bladeren" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "Categorieën zijn niet beschikbaar" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "Zoek naar apps met de zoekbalk hierboven." #: src/bz-search-page.blp:360 msgid "No Applications Found" msgstr "Geen applicaties gevonden" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Geen resultaten voor \"%s\" op Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Video" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Kantoor" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Agenda" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Berichten" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Tekenen" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulator" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub-pagina" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Projectwebsite" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Probleemtracker" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Veelgestelde vragen" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Hulp" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Doneer" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Vertalen" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Contact" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Broncode" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Bijdragen" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifest" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Kopieer link" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Tijdlijn" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Installaties:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Kaart" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Sinds 15/4/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM totale installaties" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK totale installaties" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d totale installaties" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Gebruikersgegevens behouden" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Herstel van persoonlijke instellingen en inhoud toestaan" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Alle data verwijderen" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Gebruikersgegevens permanent verwijderen om ruimte te besparen" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "%s installeren?" #: src/bz-transaction-dialog.c:195 msgid "Select which version to install. May install additional shared components" msgstr "" "Selecteer de versie die je wilt installeren. Mogelijk worden er extra gedeelde componenten geïnstalleerd" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Mogelijk worden er extra gedeelde componenten geïnstalleerd" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 src/bz-transaction-dialog.c:274 #: src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Annuleren" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Installeren" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "%s verwijderen?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Selecteer de versie die je wilt verwijderen." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Het zal niet mogelijk zijn om %s te gebruiken na deïnstallatie." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "“%s” heeft een hoog risico" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, browser history, saved passwords, and more. It also has access to the internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with these permissions." msgstr "" "Deze app heeft volledige toegang tot je systeem, inclusief al je bestanden, browsergeschiedenis, " "opgeslagen wachtwoorden en meer. Het heeft ook toegang tot internet, wat betekent dat het je " "gegevens naar externe partijen kan versturen.\n" "\n" "Omdat de app propriëtair is, kan het ook niet gecontroleerd worden wat het doet met deze machtigingen." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record all keystrokes, capture " "screenshots, and monitor other applications. It also has access to the internet, meaning it could " "send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with these permissions." msgstr "" "Deze app maakt gebruik van het verouderde X11-venstersysteem, waardoor deze alle toetsaanslagen kan " "registreren, schermafbeeldingen kan maken en andere applicaties kan monitoren. De app heeft ook " "toegang tot het internet, wat betekent dat deze je gegevens naar derden zou kunnen verzenden.\n" "\n" "Omdat de app propriëtair is, kan er geen controle worden uitgevoerd op wat deze met deze machtigingen " "doet." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "Toch _installeren" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Het laden van de transactievenster is mislukt" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Alle apps zijn al geïnstalleerd" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_OK" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "%u app installeren?" msgstr[1] "%u apps installeren?" #: src/bz-transaction-dialog.c:573 msgid "The following will be installed. Additional shared components may also be installed" msgstr "" "Het volgende wordt geïnstalleerd. Mogelijk worden er ook nog extra gedeelde onderdelen geïnstalleerd" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Er worden %d add-ons geïnstalleerd." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Daarnaast worden er add-ons geïnstalleerd." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "Alles _installeren" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Geslaagd in %.02f seconden" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "App-add-on" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Runtime" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "In wachtrij" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Gereed" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Geannuleerd" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Fout" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Transactie annuleren" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Foutinformatie tonen" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s vrijgemaakt" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Transactiefout" #: src/bz-transaction.c:344 msgid "Pending" msgstr "In afwachting" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "Alles _updaten" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u runtime-update" msgstr[1] "%u runtime-updates" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Achtergebleven gebruikersgegevens beheren" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Geen gebruikersgegevens gevonden" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Gebruikersgegevens" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Gebruikersgegevens verwijderen" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Gebruikersgegevens verwijderd voor %s" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Verversen…" #: src/bz-window.blp:89 msgid "Curated" msgstr "Gecureerd" #: src/bz-window.blp:101 msgid "Explore" msgstr "Ontdekken" #: src/bz-window.blp:128 msgid "Search" msgstr "Zoeken" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Hoofdmenu" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Je gebruikt een nieuwe versie van Bazaar!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Zie wat er nieuw is" #: src/bz-window.blp:234 msgid "You have a network connection but are viewing a cached version of Flathub" msgstr "Je hebt een netwerkverbinding maar bekijkt een gecachte versie van Flathub" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "_Doneer aan Bazaar" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "Ve_rversen" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "_Inloggen met Flathub" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "Overgebleven _gebruikersgegevens beheren" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "_Voorkeuren" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "Snel_toetsen" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "_Over Bazaar" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "Bazaar _sluiten" #: src/bz-window.blp:342 msgid "Log Out" msgstr "Uitloggen" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Het opstarten van de applicatie is mislukt" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Je kan Bazaar niet verwijderen vanuit Bazaar!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Dit is nu niet mogelijk!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Installatie" msgstr[1] "Installaties" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navigatie" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Ontdekpagina openen" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Bibliotheekpagina openen" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Zoekpagina openen" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Bronnen" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Bronnen synchroniseren" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Algemeen" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Voorkeuren openen" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Sneltoetsen tonen" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Venster sluiten" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Bazaar sluiten" bazaar-org-bazaar-b6e9a65/po/pl.po000066400000000000000000003502631522167256300170330ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2025 Polish translations for bazaar package # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025-2026 Microwave msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-01 22:08+0200\n" "PO-Revision-Date: 2026-07-02 18:44+0200\n" "Last-Translator: Marcel Mrówka \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: Lokalize 26.04.1\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:47 #: src/bz-window.blp:203 src/bz-window.c:386 src/bz-window.c:387 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Zarządzaj oprogramowaniem flatpak na tym komputerze" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;Marketplace;Zarządza" "nieOprogramowaniem;Odkryj;Odkrywaj;Odkrywca;Oprogramowanie;Sklep;Bazar;Sklepza" "plikacjami;AppStore;Play;Aplikacja;Aplikacje;Rynek;Targ;Bazar;Giełda;Apki;Apka" ";Program;Pobieranie;Pobierz;Instalowanie;Instaluj;Instalacja;Flathub;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Nowe okno" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Odkrywaj i zarządzaj aplikacjami" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Nowoczesny, szybki sklep z aplikacjami na Linuxa z naciskiem na odkrywanie " "oraz instalowanie aplikacji i dodatków z repozytoriów Flatpak, głównie z " "Flathuba" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Ustawiaj w kolejce kilka instalacji i nadal przeglądaj" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Łatwo przeglądaj uprawnienia aplikacji" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Zaloguj się do konta Flathub, aby zarządzać ulubionymi" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Wyszukuj aplikacje prościutko z GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "Kontrybutorzy Bazaaru" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Widok domowy pokazujący aplikacje z Flathuba" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Strona aplikacji Exhibit" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Strona biblioteki" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Strona wyszukiwania" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Strona kategorii" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Zatrzymano otrzymywanie wystąpień" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Odinstaluj" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Zainstaluj" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Zarządzaj dodatkami" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Brak widocznych dodatków" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Twoje aktualne preferencje filtrowania ukrywają wszystkie znane dodatki. " "Spróbuj dostosować je." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Strona dodatków" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Pobrań/m-c" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Nie otrzymuje podstawowych aktualizacji" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Ten dodatek wykorzystuje bibliotekę, która już nie otrzymuje aktualizacji " "lub poprawek zabezpieczeń. Może się stać niebezpieczny." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Dodatek dla aplikacji %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 msgid "Show Less" msgstr "Pokaż mniej" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 src/bz-section-view.blp:71 msgid "Show More" msgstr "Pokaż więcej" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Statystyki pobrań" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Próg wiekowy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Kreskówkowa przemoc" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Brak informacji o występowaniu kreskówkowej przemocy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Fantastyczna przemoc" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Brak informacji o występowaniu fantastycznej przemocy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Realistyczna przemoc" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Brak informacji o występowaniu realistycznej przemocy" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Przemoc z ukazaniem krwawienia" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Brak informacji o występowaniu przemocy z krwawieniem" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Przemoc seksualna" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Brak informacji o występowaniu przemocy seksualnej" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alkohol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Brak informacji o występowaniu odniesień do alkoholu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Narkotyki" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Brak informacji o występowaniu odniesień do narkotyków" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tytoń" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Brak informacji o występowaniu odniesień do tytoniu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nagość" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Brak informacji o występowaniu nagości" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Motywy seksualne" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Brak informacji o występowaniu odniesień lub przedstawień natury seksualnej" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Wulgaryzmy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Brak informacji o występowaniu wulgaryzmów" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Nieodpowiedni humor" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Brak informacji o występowaniu nieodpowiedniego humoru" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Dyskryminacja" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Brak informacji o występowaniu dyskryminacji" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Reklamy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Brak informacji o występowaniu reklam" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Hazard" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Brak informacji o występowaniu hazardu" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Zakupy" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Brak informacji o możliwości robienia zakupów" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Rozmowy między użytkownikami" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Brak informacji o możliwości rozmawiania z innymi użytkownikami" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Rozmowy głosowe między użytkownikami" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Brak informacji o możliwości prowadzenia rozmów głosowych z innymi " "użytkownikami" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Przekazywanie informacji kontaktowych" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Brak informacji o przekazywaniu nazw użytkowników na portalach " "społecznościowych, czy też adresów e-mail" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Przekazywanie danych osobowych" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Brak informacji o wysyłaniu osobom trzecim danych osobowych użytkowników" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Udostępnianie lokalizacji" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Brak informacji o udostępnianiu lokalizacji użytkownika z innymi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostytucja" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Brak informacji o występowaniu odniesień do prostytucji" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Cudzołóstwo" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Brak informacji o występowaniu odniesień do cudzołóstwa" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Seksualizowanie postacie" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Brak informacji o występowaniu seksualizowanych postaci" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Profanacja" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Brak informacji o występowaniu odniesień do profanacji" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Zwłoki" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Brak informacji o występowaniu zwłok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Niewolnictwo" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Brak informacji o występowaniu odniesień do niewolnictwa" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Nie zawiera odniesień do narkotyków" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Nie zawiera przekleństw, profanacji i innych rodzajów mocnego języka" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Nie zawiera reklam i możliwości wykonywania zakupów" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Nie zawiera seksu i nagości" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Nie zawiera niekontrolowanej funkcji chatu" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Nie zawiera przemocy" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Używki" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Mocny język" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Pieniądze" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Społeczność" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Przemoc" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "3+" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "Aplikacja %s nie posiada progu wiekowego" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "Aplikacja %s jest odpowiednia dla wszystkich" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "Aplikacja %s jest odpowiednia dla młodszych dzieci" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "Aplikacja %s jest odpowiednia dla dzieci" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "Aplikacja %s jest odpowiednia dla nastolatków" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "Aplikacja %s jest odpowiednia dla dorosłych" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "Aplikacja %s jest odpowiednia dla %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Folder systemowy %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Podfolder katalogu domowego %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Foldery systemu hostowego" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Konfiguracja systemu hostowego z /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Podfolder pulpitu %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Folder pulpitu" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Podfolder dokumentów %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Folder dokumentów" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Podfolder muzyki %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Folder muzyki" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Podfolder obrazów %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Folder obrazów" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Podfolder publicznego udostępniania %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Folder publicznego udostępniania" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Podfolder filmów %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Folder filmów" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Podfolder szablonów %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Folder szablonów" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Podfolder pamięci podręcznej użytkownika %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Folder pamięci podręcznej użytkownika" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Podfolder konfiguracji użytkownika %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Folder konfiguracji użytkownika" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Podfolder danych użytkownika %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Folder danych użytkownika" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Podfolder bibliotek użytkownika %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Folder bibliotek użytkownika" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Dostęp systemu plików do %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Nieznana ścieżka systemu plików" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Rozmiar do pobrania" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Rozmiar po instalacji" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Ilość do pobrania z internetu" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Rozmiar na dysku" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Otwórz folder danych użytkownika" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Twoje dane użytkownika" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Pamięć podręczna, ustawienia i inne dane aplikacji" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Pamięć podręczna" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Tymczasowo przechowywane dane w pamięci podręcznej" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Wyczyść pamięć podręczną" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Rozmiar bibliotek po instalacji" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Rozmiar bibliotek do pobrania" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "Niedostępne" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Rozmiar aplikacji" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Zweryfikowano" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Zainstalowano" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "Marcel Mrówka (Microwave) , 2025, 2026" #: src/bz-application.c:799 msgid "Special Thanks" msgstr "Specjalne podziękowania" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "Wylogowano pomyślnie!" #: src/bz-application.c:1037 msgid "Ubuntu Troubles!" msgstr "Kłopoty Ubuntu!" #: src/bz-application.c:1040 msgid "" "The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version of " "Bazaar, please just use the normal package for now by using\n" "\n" "sudo apt install bazaar\n" "\n" "You can then remove this Flatpak version with\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" msgstr "" "Niedawne wydania Ubuntu spartaczyły domyślne zasady bezpieczeństwa, " "spowodowało to, że aplikacje są niemożliwe do zainstalowania z " "Flatpakowej wersji Bazaaru, na razie proszę używać normalnego pakietu " "uruchamiając w terminalu komendę\n" "\n" "sudo apt install bazaar\n" "\n" "Flatpakową wersję aplikacji można usunąć komendą\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" #: src/bz-application.c:1046 msgid "Continue Anyway" msgstr "Kontynuuj mimo to" #: src/bz-application.c:1062 msgid "Performing setup…" msgstr "Konfigurowanie…" #: src/bz-application.c:1154 msgid "Set Up System Flathub?" msgstr "Skonfigurować Flathub systemowo?" #: src/bz-application.c:1157 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Repozytorium Flathuba na poziomie systemu nie jest skonfigurowane. Bazaar " "wymaga Flathuba skonfigurowanego na systemowej instalacji Flatpaka, aby móc " "przeglądać oraz instalować aplikacje.\n" "\n" "Nadal możesz używać Bazaaru do przeglądania i usuwania już zainstalowanych " "aplikacji." #: src/bz-application.c:1164 msgid "Set Up Flathub?" msgstr "Skonfigurować Flathub?" #: src/bz-application.c:1167 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub nie jest skonfigurowany na tym urządzeniu. Nie będziesz mógł " "przeglądać i instalować aplikacji w Bazaarze, jeśli jest niedostępny.\n" "\n" "Nadal możesz używać Bazaaru do przeglądania i usuwania już zainstalowanych " "aplikacji." #: src/bz-application.c:1173 msgid "Later" msgstr "Później" #: src/bz-application.c:1174 msgid "Set Up Flathub" msgstr "Skonfiguruj Flathub" #: src/bz-application.c:1696 msgid "A backend error occurred" msgstr "Wystąpił błąd w backendzie" #: src/bz-application.c:1896 src/bz-application.c:4111 msgid "Refreshing…" msgstr "Odświeżanie…" #: src/bz-application.c:2060 src/bz-application.c:4109 #, c-format msgid "Loading %d apps…" msgstr "Ładowanie %d aplikacji…" #: src/bz-application.c:2113 msgid "Failed to open file" msgstr "Otwieranie pliku nie powiodło się" #: src/bz-application.c:2234 msgid "An initialization error occurred" msgstr "Wystąpił błąd inicjalizacji" #: src/bz-application.c:2628 msgid "Checking for updates…" msgstr "Sprawdzanie dostępności aktualizacji…" #: src/bz-application.c:2684 msgid "Failed to check for updates" msgstr "Sprawdzanie dostępności aktualizacji nie powiodło się" #: src/bz-application.c:3821 msgid "Malformed Link" msgstr "Zniekształcone złącze" #: src/bz-application.c:3822 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Łącze użyte do otwarcia ma niepoprawną kapitalizację i może przestać działać " "w przyszłości.\n" "\n" "Jest to prawdopodobnie spowodowane KRunnerem nie dającym poprawnych " "identyfikatorów" #: src/bz-application.c:3830 msgid "Could not find app" msgstr "Nie można znaleźć aplikacji" #: src/bz-application.c:3861 msgid "Failed to load metainfo" msgstr "Ładowanie metainfo nie powiodło się" #: src/bz-application.c:4113 msgid "Writing to cache…" msgstr "Zapisywanie do pamięci podręcznej…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Pokaż wszystkie" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Wszystkie aplikacje dot. „%s”" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d aplikacji" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Otwieranie artykułu nie powiodło się" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Instalacja pakietu" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Dodatkowe zależności mogą zająć dodatkowe miejsce" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Instalacja tej aplikacji może wymagać dodania nowego źródła oprogramowania. " "Inne aplikacje z tego źródła będą pojawiać się w Bazaarze.\n" "\n" "Tylko dodaj to źródło, jeśli pewny, że można mu zaufać." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Pomyślnie zainstalowano!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Otwórz" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Pokaż szczegóły aplikacji" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Już zainstalowano" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Instalacja nie powiodła się" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Nieznany rozmiar instalacji" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Około %s do zainstalowania" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Brak specjalnych uprawnień" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f mln" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f tys." #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d pobrań w ciągu zeszłego miesiąca" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s bibliotek" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Rozmiar do pobrania" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Informacja o rozmiarze jest niedostępna" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Rozmiar do pobrania aplikacji %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Próg wiekowy" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Informacja o progu wiekowym jest niedostępna" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Odpowiednie od 3 lat" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Odpowiednie od %d lat" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Nieznane" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Wolne oprogramowanie pod licencją %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Wolne oprogramowanie" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Oprogramowanie własnościowe" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Licencja specjalna: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Wolne" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Własnościowe" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Licencja specjalna" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "" "Na różne\n" "urządzenia" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "" "Tylko na\n" "komputery" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Działa na komputerach, tabletach i telefonach" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Może nie działać na urządzeniach mobilnych" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Bezpieczna" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Niskie ryzyko" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Średnie ryzyko" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Wysokie ryzyko" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Puste" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Brak polecanych" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "Plik konfiguracji polecanych nie jest dostępny na tym urządzeniu. Możesz " "nadal przeglądać aplikacje na Flathubie." #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Przeglądaj Flathuba" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Offline" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Przeglądarka" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Nie zweryfikowano" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Informacja o twórcy jest niedostępna" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Własność identyfikatora aplikacji %s nie została zweryfikowana, więc może " "być pakietem zbudowanym przez społeczność." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Własność identyfikatora aplikacji %s została zweryfikowana ręcznie przez " "zespół Flathub" #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Własność identyfikatora aplikacji %1$s została zweryfikowana przez %2$s na %3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "" "Własność identyfikatora aplikacji %1$s została zweryfikowana przy użyciu " "%2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Własność identyfikatora aplikacji %s została zweryfikowana." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Pełne notatki o wydaniu" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "To wydanie było możliwe dzięki użytkownikom takim jak ty!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Kocham tworzyć Bazaar, lecz nie mogę robić tego bez niczyjej pomocy. Wspomóż " "dalszy rozwój aplikacji, przekazując darowiznę na Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Wesprzyj Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Co nowego w wersji %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Wydano %-e %B, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Wybierz instalację" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Masz zainstalowanych kilka wersji tej aplikacji. Z którą chciałbyś " "kontynuować?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Anuluj" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Tylko dla tego użytkownika" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "ten użytkownik" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "wszyscy użytkownicy" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Szczegóły" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopiuj" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:415 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Skopiowano!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Liczba polubień" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Aktualizacja polubienia nie powiodła się" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Zaloguj się do konta Flathub, aby zarządzać ulubionymi" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Zaloguj" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:337 msgid "Favorites" msgstr "Ulubione" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "Zainstaluj wszystkie" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Ładowanie" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Brak ulubionych" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Aplikacje, które oznaczysz jako ulubione będą się tutaj ukazywać" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Wesprzyj tą aplikację" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Usuń z ulubionych" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Usunięcie z ulubionych nie powiodło się" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Wstecz" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Dalej" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Edytowanie" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mikser" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Muzyka" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Gracz" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Nagrywarka" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Sekwencer" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Tuner" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "Telewizja" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Emulacja" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Akcja" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Przygoda" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Automatowe" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Klocki" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Planszówki" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Karciane" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Dla dzieci" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Logiczne" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "RPG" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Strzelanki" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Symulacja" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Sporty" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Strategiczne" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Przeglądarki" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Rozmowy" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Poczta" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Udostępnianie plików" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Audio i wideo" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Multimedia" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Więcej aplikacji multimedialnych" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Narzędzia programistyczne" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Programowanie" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Więcej narzędzi programistycznych" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Edukacja" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Ucz się" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Więcej aplikacji dot. edukacji" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Gry" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Graj" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Więcej gier" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Grafika i fotografia" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Twórz" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Więcej aplikacji dot. grafiki i fotografii" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Narzędzia sieciowe" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Więcej narzędzi sieciowych" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Produktywność" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Pracuj" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Więcej aplikacji dot. produktywności" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Nauka" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Więcej aplikacji dot. nauki" #: src/bz-flathub-category.c:142 msgid "System" msgstr "System" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Więcej aplikacji dot. systemu" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Narzędzia" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Narzędzia" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Więcej narzędzi" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Trendujące" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Więcej trendujących" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Popularne" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Więcej popularnych" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Niedawno dodane" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Nowe" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Więcej nowych" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Niedawno zaktualizowane" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Zaktualizowane" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Więcej zaktualizowanych" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Mobilne" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Więcej mobilnych" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Więcej aplikacji Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "Od KDE" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Więcej aplikacji od KDE" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Gry" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Więcej gier" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Emulatory" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Więcej emulatorów" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Launchery" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Więcej launcherów gier" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Więcej narzędzi" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Więcej narzędzi do gier" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub nie został dodany" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Nie znaleziono Flathuba na żadnej z twoich instalacji flatpaka" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub jest niedostępny" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Nie można osiągnąć Flathuba" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Nadal możesz zarządzać i wyszukiwać aplikacje." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Wyszukuj aplikacji" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Połącz ponownie" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Aplikacja dnia" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "W biegu" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Aplikacje na twoje urządzenia mobilne z Linuxem" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Więcej aplikacji mobilnych" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "My ♥ gry" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Gry i aplikacje do uruchamiania twoich ulubionych pozycji" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Brak wyników" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Spróbuj wyszukać coś innego" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Zawartość" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "To jest lokalny podgląd, niektóre szczegóły mogą się różnić od opublikowanej " "pozycji" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Wygląd podglądu sklepu" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "We_sprzyj" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Ta aplikacja wykorzystuje bibliotekę, która już nie otrzymuje aktualizacji " "lub poprawek zabezpieczeń. Może się stać niebezpieczna." #: src/bz-full-view.blp:539 msgid "Trash Data" msgstr "Przenieś dane do kosza" #: src/bz-full-view.blp:602 msgid "Add-ons" msgstr "Dodatki" #: src/bz-full-view.blp:637 msgid "More Add-Ons" msgstr "Więcej dodatków" #: src/bz-full-view.blp:648 msgid "Links" msgstr "Łącza" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Brak adresu URL" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Ta aplikacja ma licencję FLOSS — oznacza to, że jej kod źródłowy może być " "audytowany pod kątem bezpieczeństwa." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Ta aplikacja ma licencję własnościową — oznacza to, że jej kod źródłowy jest " "tworzony prywatnie i niezależne osoby trzecie nie mogą go audytować." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Więcej aplikacji" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Więcej aplikacji od %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Inne aplikacje od tego twórcy" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Inne aplikacje od %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "Aplikacja %s nie jest zainstalowana, lecz nadal ma %s obecnych danych." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Inne aplikacje" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d aplikacja" msgstr[1] "%d aplikacje" msgstr[2] "%d aplikacji" #: src/bz-full-view.c:506 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Usunięcie danych użytkownika nie powiodło się" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Wsparcie sprzętu" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Wsparcie klawiatury" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Wymaga posiadania klawiatury" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Zaleca posiadanie klawiatury" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Wspiera klawiaturę" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Wsparcie klawiatur jest nieznane" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Wsparcie myszki" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Wymaga myszki lub innego urządzenia wskazującego" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Zaleca korzystanie z myszki lub innego urządzenia wskazującego" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Wspiera myszki i inne urządzenia wskazujące" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Wsparcie myszek i innych urządzeń wskazujących jest nieznane" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Wsparcie ekranów dotykowych" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Wymaga ekranu dotykowego" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Zaleca korzystanie z ekranu dotykowego" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Wspiera ekrany dotykowe" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Wsparcie ekranów dotykowych jest nieznane" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Wsparcie urządzeń mobilnych" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Działa na urządzeniach mobilnych" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Może nie działać najlepiej na urządzeniach mobilnych" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Wsparcie komputerów" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Doskonale działa na dużych ekranach" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "Aplikacja %s działa najlepiej na konkretnym sprzęcie" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "Aplikacja %s działa na większości urządzeń" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Otwórz" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Odinstaluj aplikację" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Usuń" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Aktualizuj" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Usuń" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "Zainstaluj aplikację %s z źródła %s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "Zainstaluj aplikację %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Anuluj" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Anulowanie" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Przycisk „Przekaż darowiznę”" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Wyszukuj wśród zainstalowanych aplikacji" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Wyczyść wyszukiwanie" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Nie znaleziono aplikacji" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "W zamian przeszukaj sklep" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:114 msgid "Library" msgstr "Biblioteka" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Aktualizacje w toku" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Pobrania" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Niedawno odinstalowane" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Wyczyść zakończone zadania" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Opcje sortowania" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Sortuj wg" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Nazwa" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Rozmiar" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Brak wyników dla „%s” na liście zainstalowanych aplikacji" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u aktualizacja dostępna" msgstr[1] "%u aktualizacje dostępne" msgstr[2] "%u aktualizacji dostępnych" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u zainstalowana aplikacja" msgstr[1] "%u zainstalowane aplikacje" msgstr[2] "%u zainstalowanych aplikacji" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Miej wkład" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Dowiedz się więcej" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Nieznana licencja" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Stworzone przez społeczność" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Ta aplikacja jest tworzona jako wolna przez międzynarodową społeczność.\n" "\n" "Możesz mieć wkład w proces tworzenia i ulepszania jej." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Licencja tej aplikacji jest nieznana." #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Ta aplikacja jest tworzona jako wolna przez międzynarodową społeczność i " "jest wydawana z licencją %s.\n" "\n" "Możesz mieć wkład w ulepszaniu jej." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Ta aplikacja nie jest tworzona jako wolna, zatem tylko jej twórcy wiedzą jak " "działa. Może być niewykrywalnie niebezpieczna, oraz zmieniać się bez " "ostrzeżenia.\n" "\n" "Nie będziesz mógł mieć wkładu w procesie tworzenia tej aplikacji." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Ta aplikacja jest tworzona i wydawana pod licencją specjalną %s\n" "\n" "Nie wiemy, czy będziesz mógł mieć wkładu w procesie tworzenia jej." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Licencja" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Połącz z Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Coś poszło nie tak" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" "Zaloguj się, aby synchronizować swoje ulubione aplikacje pomiędzy " "urządzeniami" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Zakończ" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Cześć, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Wybierz plik Metainfo" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Pliki Metainfo" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Wybierz ikonę (opcjonalnie)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Pliki obrazów" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Podgląd" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Preferencje" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Wykryto taryfowe połączenie internetowe - zatrzymano automatyczne " "odświeżanie danych sklepowych" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:236 msgid "Refresh Manually" msgstr "Odśwież ręcznie" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Filtry zawartości" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Tylko wolne oprogramowanie" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Ukrywaj aplikacje własnościowe podczas przeglądania i wyszukiwania" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Tylko wyniki z Flathuba" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "" "Limituj wyniki wyszukiwania i przeglądania, tak aby pokazywać tylko " "aplikacje dostępne na Flathubie" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Tylko zweryfikowane wyniki" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Ukrywaj niezweryfikowane aplikacje" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Ukrywaj aplikacje z brakiem wsparcia" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Ukrywaj aplikacje nie otrzymujące już aktualizacji od swoich twórców" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Motyw paska postępu" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Kolor akcentowy" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Kolory dumy" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Kolory dumy lesbijek" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Kolory dumy mężczyzn homoseksualnych" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Kolory dumy osób transpłciowych" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Kolory dumy osób niebinarnych" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Kolory dumy osób biseksualnych" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Kolory dumy osób aseksualnych" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Kolory dumy osób panseksualnych" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Kolory dumy osób aromantycznych" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Kolory dumy osób genderfluidalnych" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Kolory dumy osób polyseksualnych" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Kolory dumy osób omniseksualnych" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Kolory dumy osób aromantyczno-seksualnych" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Kolory dumy osób bezpłciowych" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Kolory dumy osób genderqueerowych" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Kolory dumy osób interseksualnych" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Kolory dumy osób półpłciowych" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Kolory dumy osób biromantycznych" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Kolory dumy osób niepełnosprawnych" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Kolory dumy fembojów" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Kolory dumy osób neutroidalnych" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "Historia wersji" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "Historia _wersji" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Dzisiaj" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Wczoraj" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d dzień temu" msgstr[1] "%d dni temu" msgstr[2] "%d dni temu" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d tydzień temu" msgstr[1] "%d tygodnie temu" msgstr[2] "%d tygodni temu" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d miesiąc temu" msgstr[1] "%d miesiące temu" msgstr[2] "%d miesięcy temu" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d rok temu" msgstr[1] "%d lata temu" msgstr[2] "%d lat temu" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Wersja %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Brak szczegółów dla tego wydania" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Dowiedz się więcej" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Odinstaluj" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Pobierz" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Nieznane uprawnienia" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Brakuje uprawnień tej aplikacji." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Brak uprawnień" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Aplikacja jest w pełni uruchamiana w środowisku piaskownicy" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Dostęp do sieci" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Ma dostęp do internetu" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Brak dostępu do sieci" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Nie ma dostępu do internetu" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Dostęp do urządzeń użytkownika" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" "Może uzyskać dostęp do urządzeń takich jak kamerki internetowe i kontrolery " "do gier" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Brak dostępu do urządzeń użytkownika" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Nie może uzyskać dostęp do urządzeń takich jak kamerki internetowe i " "kontrolery do gier" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Dostęp do urządzeń wprowadzania" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Ma dostęp do urządzeń wprowadzania" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Dostęp do mikrofonu i odtwarzania dźwięku" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "Może słuchać przy użyciu mikrofonów i odtwarzać dźwięk bez proszenia o " "pozwolenie" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Dostęp do urządzeń systemowych" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Może uzyskać dostęp do urządzeń systemowych, które wymagają wysokich " "uprawnień" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Dostęp do zawartości ekranu" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Ma dostęp do zawartości ekranu i innych okien" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Przestarzały system okien" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Zawsze wykorzystuje przestarzały system okien (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Samowolne uprawnienia" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Może uzyskać samowolne uprawnienia" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Ustawienia użytkownika" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Ma dostęp do ustawień użytkownika i może je zmieniać" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Pełny dostęp do systemu plików" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Może odczytywać i zapisywać wszystkie dane na systemie plików" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Dostęp do katalogu domowego" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Może odczytywać i zapisywać wszystkie dane w twoim katalogu domowym" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Pełny dostęp do odczytu systemu plików" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Może odczytywać wszystkie dane na systemie plików" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Dostęp do odczytu katalogu domowego" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Może odczytywać dane w twoim katalogu domowym" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Dostęp do folderu pobranych" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Może odczytywać i zapisywać wszystkie dane w twoim folderze pobranych" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Dostęp do odczytu folderu pobranych" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Może odczytywać dane w twoim folderze pobranych" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Może odczytywać i zapisywać wszystkie dane w katalogu" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Może odczytywać wszystkie dane w katalogu" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Brak dostępu do systemu plików" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Absolutnie nie ma dostępu do systemu plików" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Wykorzystuje usługi systemowe" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Może prosić o dane z poza-portalowych usług systemowych" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Usługi sesji użytkownika" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Może prosić o dane z poza-portalowych usług" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Brak dostępu do usług" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Absolutnie nie ma dostępu do usług systemowych, ani sesji" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Zweryfikowany twórca aplikacji" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "" "Twórca tej aplikacji został zweryfikowany pod względem czy są kim za kogo " "się podają" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Własnościowy kod" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Kod źródłowy nie jest publiczny, więc nie może być niezależnie audytowany, " "co sprawia, że aplikacja może być niebezpieczna" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Audytowalny" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Kod źródłowy jest publiczny i może być niezależnie audytowany, co sprawia, " "że aplikacja jest raczej bardziej bezpieczna" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Korzysta z usługi systemowej %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Korzysta z usługi sesji %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Korzysta z usługi %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Może widzieć poza-portalowe usługi" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Może rozmawiać z poza-portalowymi usługami" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Może posiadać poza-portalowe usługi" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Integracja z globalnym menu" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Może wyświetlać swoje menu w globalnym pasku menu" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Integracja z ustawieniami KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Może wykryć kiedy ustawienia pulpitu KDE się zmieniają" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Globalne ustawienia KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Może odczytywać preferencje pulpitu KDE, rzeczy jak czcionki i kolory" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Usługa tajemnej pamięci" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Może przechowywać i otrzymywać swoje hasła korzystając z systemowego pęku " "kluczy" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Usługa powiadomień pulpitowych" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Może wysyłać powiadomienia pulpitowe" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Integracja z zasobnikiem systemowym" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Może wyświetlać ikonę w zasobniku systemowym" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Integracja z KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Może komunikować się z urządzeniami połączonymi przez KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Ta aplikacja ma uprawnienie do pozwalające jej okrężnie przyznać sobie " "jakiekolwiek inne uprawnienia, obchodząc piaskownicę Flatpaka.\n" "\n" "Zatem może ona robić wszystko co normalna niesandboxowana aplikacja " "w tym mieć dostęp do twoich plików oraz łączyć się z internetem.\n" "\n" "Obejrzenie innych uprawnień nadal jest dobrym pomysłem, by dowiedzieć się " "co aplikacja najprawdopodobniej będzie robić." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Pokaż inne uprawnienia" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "Identyfikator aplikacji" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Ta aplikacja wykorzystuje przestarzałą wersję środowiska programowania (SDK) " "i może zawierać błędy i luki bezpieczeństwa, które nie zostaną naprawione." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Bezpieczeństwo" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "Aplikacja %s jest bezpieczna" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "Aplikacja %s nie posiada niebezpiecznych uprawnień" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "Aplikacja %s jest prawdopodobnie bezpieczna" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "Aplikacja %s jest prawdopodobnie niebezpieczna" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "Aplikacja %s jest niebezpieczna" #: src/bz-screenshot-page.blp:41 msgid "Back" msgstr "Wróć" #: src/bz-screenshot-page.blp:71 msgid "Previous Screenshot" msgstr "Wstecz" #: src/bz-screenshot-page.blp:81 msgid "Next Screenshot" msgstr "Dalej" #: src/bz-screenshot-page.blp:97 msgid "Copy Image" msgstr "Kopiuj obraz" #: src/bz-screenshot-page.blp:160 msgid "Reset View" msgstr "Zresetuj widok" #: src/bz-screenshot-page.blp:171 msgid "Zoom Out" msgstr "Oddal" #: src/bz-screenshot-page.blp:181 msgid "Zoom In" msgstr "Przybliż" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Karuzela zrzutów ekranu" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Brak zrzutów ekranu" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Otwórz przeglądarkę zrzutów ekranu" #: src/bz-screenshots-carousel.c:308 #, c-format msgid "Screenshot %u %s" msgstr "Zrzut ekranu numer %u podpisany %s" #: src/bz-screenshots-carousel.c:310 #, c-format msgid "Screenshot %u" msgstr "Zrzut ekranu numer %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filtry" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "Z_weryfikowane" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "W_olne" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Wspi_erane" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Odfiltruj aplikacje z brakiem wsparcia" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "Przyjazne ko_mórkom" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Kategorie" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Wyszukuj aplikacji, gier i oprogramowania" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Filtry wyszukiwania" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Wyczyść wyszukiwanie" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Przeglądaj kategorie" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Kategorie są niedostępne" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Wyszukuj aplikacji korzystając z powyższego paska wyszukiwania" #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Nie znaleziono aplikacji" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Brak wyników dotyczących „%s” na Flathubie" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Filmy" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Biuro" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Kalendarz" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Komunikatory" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Rysowanie" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emulator" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Strona Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Strona projektu" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Issue Tracker" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Pomoc" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Przekaż darowiznę" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Tłumacz" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Skontaktuj się" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Kod źródłowy" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Miej wkład" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifest" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Kopiuj łącze" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Oś czasowa" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Instalacje:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Świat" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Od 15.04.2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "Suma instalacji: %.2f mln" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "Suma instalacji: %.2f tys." #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "Suma instalacji: %'d" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Brak wyników" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "Wyszukiwanie nie powiodło się" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Usuń dane użytkownika" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Pozwól na przywracanie ustawień i zawartości" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Usuń wszystkie dane" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Usuń dane aplikacji na zawsze, aby zaoszczędzić miejsce" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Zainstalować aplikację %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Wybierz wersję do zainstalowania. Może zainstalować dodatkowe współdzielone " "komponenty" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Może zainstalować dodatkowe współdzielone komponenty" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Anuluj" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "Za_instaluj" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Usunąć aplikację %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Wybierz wersję do usunięcia." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Nie będzie można korzystać z aplikacji %s po odinstalowaniu jej." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "Aplikacja %s jest wysokim zagrożeniem" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Ta aplikacja ma pełny dostęp do twojego systemu, w tym twoich plików, " "historii przeglądania, zapisanych haseł i wielu innych. Posiada również " "dostęp do internetu, co oznacza, że może wysyłać twoje dane do osób " "trzecich.\n" "\n" "Ponieważ ta aplikacja jest własnościowa, nie może być audytowana pod " "względem tego co robi z tymi uprawnieniami." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Ta aplikacja wykorzystuje przestarzały system okien X11, który pozwala jej " "na rejestrowanie wszystkich wciśnięć klawiszy, robienia zrzutów ekranu i " "monitorowania innych aplikacji Posiada również dostęp do internetu, co " "oznacza, że może wysyłać twoje dane do osób trzecich.\n" "\n" "Ponieważ ta aplikacja jest własnościowa, nie może być audytowana pod " "względem tego co robi z tymi uprawnieniami." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "Za_instaluj mimo to" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Ładowanie okna transakcji nie powiodło się" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Wszystkie aplikacje są już zainstalowane" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_OK" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Zainstalować %u aplikację?" msgstr[1] "Zainstalować %u aplikacje?" msgstr[2] "Zainstalować %u aplikacji?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Następujące zostaną zainstalowane. Dodatkowe współdzielone składniki mogą " "również być zainstalowane." #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Dodatki do zainstalowania: %d" #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Dodatkowo, następująca liczba dodatków zostanie zainstalowana: %d." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "Za_instaluj wszystkie" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Ukończono w %.02f sek." #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Dodatek aplikacji" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Biblioteka" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "W kolejce" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Gotowe" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Anulowane" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Bład" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Anuluj transakcję" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Pokaż szczegóły" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Pokaż szczegóły błędu" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "Zwolniono %s" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Błąd transakcji" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Oczekujące" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "Akt_ualizuj wszystkie" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u aktualizacja biblioteki" msgstr[1] "%u aktualizacje bibliotek" msgstr[2] "%u aktualizacji bibliotek" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Zarządzaj pozostałymi danymi" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Nie znaleziono pozostałych danych" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Dane użytkownika" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Przenieś do kosza dane użytkownika" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Przeniesiono do kosza dane użytkownika aplikacji %s" #: src/bz-window.blp:72 msgid "Refreshing" msgstr "Odświeżanie" #: src/bz-window.blp:90 msgid "Curated" msgstr "Polecane" #: src/bz-window.blp:102 msgid "Explore" msgstr "Odkrywaj" #: src/bz-window.blp:129 msgid "Search" msgstr "Wyszukaj" #: src/bz-window.blp:216 msgid "Main Menu" msgstr "Menu główne" #: src/bz-window.blp:227 msgid "You are running a new version of Bazaar!" msgstr "Odpaliłeś nowiutką wersję Bazaaru!" #: src/bz-window.blp:228 msgid "See What's New" msgstr "Zobacz co nowego" #: src/bz-window.blp:235 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Masz połączenie z internetem, ale przeglądasz wersję Flathuba, która została " "zapisana w pamięci twojego komputera" #: src/bz-window.blp:281 msgid "_Donate to Bazaar" msgstr "_Wesprzyj Bazaar" #: src/bz-window.blp:287 msgid "_Refresh" msgstr "_Odśwież" #: src/bz-window.blp:291 msgid "_Login With Flathub" msgstr "Za_loguj się do Flathub" #: src/bz-window.blp:297 msgid "_Manage Leftover User Data" msgstr "Zarządzaj pozostały_mi danymi" #: src/bz-window.blp:303 msgid "_Preferences" msgstr "_Preferencje" #: src/bz-window.blp:308 msgid "_Keyboard Shortcuts" msgstr "Skróty _klawiszowe" #: src/bz-window.blp:313 msgid "_About Bazaar" msgstr "O _aplikacji Bazaar" #: src/bz-window.blp:319 msgid "_Quit Bazaar" msgstr "_Zamknij Bazaar" #: src/bz-window.blp:344 msgid "Log Out" msgstr "Wyloguj się" #. Translators: %s is the title of the current page #: src/bz-window.c:389 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:609 src/bz-window.c:647 msgid "Failed to launch application" msgstr "Uruchomienie aplikacji nie powiodło się" #: src/bz-window.c:860 msgid "You can't remove Bazaar from Bazaar!" msgstr "Nie możesz usunąć Bazaaru z poziomu Bazaaru!" #: src/bz-window.c:1166 src/bz-window.c:1200 msgid "Can't do that right now!" msgstr "Nie możesz tego teraz zrobić!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "instalacja" msgstr[1] "instalacje" msgstr[2] "instalacji" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Nawigacja" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Otwórz stronę „Odkrywaj”" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Otwórz stronę biblioteki" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Otwórz stronę wyszukiwania" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Repozytoria" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Zsynchronizuj repozytoria" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Ogólne" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Otwórz preferencje" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Pokaż skróty klawiszowe" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Zamknij okno" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Zamknij Bazaar" #~ msgid "Free" #~ msgstr "Wolne" #~ msgid "Tags:" #~ msgstr "Identyfikatory:" #~ msgid "Progress Bar" #~ msgstr "Pasek postępu" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Wybierz motyw paska postępu!" #~ msgid "Open Link" #~ msgstr "Otwórz łącze" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "Aplikacje z identyfikatorem \"%s\"" #~ msgid "Flathub returned an error" #~ msgstr "Flathub zwrócił błąd" #~ msgid "Retry Flathub Connection" #~ msgstr "Spróbuj ponownie połączyć się z Flathub" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "Zaloguj się swoim kontem Flathub w Bazaarze, aby zarządzać swoimi " #~ "ulubionymi aplikacjami." #~ msgid "Delay Search Results" #~ msgstr "Opóźniaj wyniki wyszukiwania" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "Ulepsz wydajność wyszukiwania opóźniając wyniki" #~ msgid "Vertical Stripes" #~ msgstr "Pionowe paski" #~ msgid "Display flag colors from left to right" #~ msgstr "Wyświetlaj kolory flag od lewej do prawej" #~ msgid "User Data Size" #~ msgstr "Rozmiar danych użytkownika" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Open App Library" #~ msgstr "Otwórz bibliotekę aplikacji" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "Instalowanie pakietów .flatpak nie jest jeszcze wspierane" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" #~ msgid "Refresh completed!" #~ msgstr "Ukończono odświeżanie!" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "zainstalowań" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Odśwież" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "Przekaż _darowiznę ❤️" #~ msgid "Hide EOL Apps" #~ msgstr "Ukrywaj aplikacje z brakiem wsparcia" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgid "Download & Install Application" #~ msgstr "Pobierz i zainstaluj aplikację" #~ msgctxt "As in, \"100 Downloads\"" #~ msgid "Downloads" #~ msgstr "Pobrań" #~ msgid "%e %B" #~ msgstr "%e %B" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Podkreśla też potrzebę wspierania twórców aplikacji na Linuxa. Bazaar " #~ "posiada stronę \"polecane\", która może być konfigurowana przez " #~ "dystrybutorów pozwalając na bardziej lokalne doświadczenia." #~ msgid "Install Other Version" #~ msgstr "Zainstaluj inną wersję" #~ msgid "Keep Data" #~ msgstr "Zachowaj dane" #~ msgid "Open App" #~ msgstr "Otwórz aplikację" #~ msgid "_Synchronize Remotes" #~ msgstr "Z_synchronizuj repozytoria" #~ msgid "Synchronizing..." #~ msgstr "Synchronizowanie..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "Otrzymywanie %d wystąpień..." #~ msgid "Indexing Data..." #~ msgstr "Indeksowanie danych..." #~ msgid "Refreshing Store Content" #~ msgstr "Odświeżanie zawartości" #~ msgid "No background tasks!" #~ msgstr "Brak zadań w tle!" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Wyjdź" #~ msgid "View the Release Page" #~ msgstr "Pokaż stronę wydania" #~ msgid "Close" #~ msgstr "Zamknij" #~ msgid "Copy and Close" #~ msgstr "Kopiuj i zamknij" #~ msgid "Nucleus app page" #~ msgstr "Strona aplikacji Nucleus" #~ msgid "Toggle transaction sidebar" #~ msgstr "Włącz pasek boczny transakcji" #~ msgid "Ongoing" #~ msgstr "Trwające" #~ msgid "Finished" #~ msgstr "Zakończone" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "Do tej pory przeniesiono %s" #~ msgid "Tasks" #~ msgstr "Zadania" #~ msgid "Stop Active Tasks" #~ msgstr "Zatrzymaj aktywne zadania" #~ msgid "No Tasks Yet" #~ msgstr "Brak zadań" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d aktualizacja dostepna" #~ msgstr[1] "%d aktualizacje dostępne" #~ msgstr[2] "%d aktualizacji dostępnych" #~ msgid "Updates Are Available" #~ msgstr "Dostępne są aktualizacje" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Następujące aplikacje mają dostępne aktualizacje. Czy chcesz je " #~ "zainstalować?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Jest dostępna następująca liczba aktualizacji dla bibliotek i/lub " #~ "dodatków: %d. Czy chcesz je zainstalować?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "" #~ "Dodatkowo, następująca liczba bibliotek i/lub dodatków zostanie " #~ "zaktualizowana: %d." #~ msgid "Update Now" #~ msgstr "Aktualizuj teraz" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "Możliwość wyświetlania i instalowania lokalnych plików .flatpak będzie " #~ "niedługo dostępna! Tymczasem, możesz uruchomić z poziomu terminala\n" #~ "\n" #~ "flatpak install --bundle twoj-pakiet.flatpak" #~ msgid "Resume Current Tasks" #~ msgstr "Kontynuuj wykonywanie zadań" #~ msgid "Pause Current Tasks" #~ msgstr "Zapauzuj wykonywanie zadań" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Włącz menedżera transakcji" #~ msgid "Pride Colors (Horizontal)" #~ msgstr "Kolory dumy (poziome)" #~ msgid "Lesbian Pride Colors (Horizontal)" #~ msgstr "Kolory dumy lesbijek (poziome)" #~ msgid "Male Homosexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy mężczyzn homoseksualnych (poziome)" #~ msgid "Transgender Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób transpłciowych (poziome)" #~ msgid "Nonbinary Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób niebinarnych (poziome)" #~ msgid "Bisexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób biseksualnych (poziome)" #~ msgid "Asexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób aseksualnych (poziome)" #~ msgid "Pansexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób panseksualnych (poziome)" #~ msgid "Aromantic Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób aromantycznych (poziome)" #~ msgid "Genderfluid Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób genderfluidalnych (poziome)" #~ msgid "Polysexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób polyseksualnych (poziome)" #~ msgid "Omnisexual Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób omniseksualnych (poziome)" #~ msgid "Aroace Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób aromantyczno-seksualnych (poziome)" #~ msgid "Agender Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób bezpłciowych (poziome)" #~ msgid "Genderqueer Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób genderqueerowych (poziome)" #~ msgid "Intersex Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób interseksualnych (poziome)" #~ msgid "Demigender Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób półpłciowych (poziome)" #~ msgid "Biromantic Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób biomantycznych (poziome)" #~ msgid "Disability Pride Colors (Horizontal)" #~ msgstr "Kolory dumy osób niepełnosprawnych (poziome)" #~ msgid "Femboy Pride Colors (Horizontal)" #~ msgstr "Kolory dumy fembojów (poziome)" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u pobrań" #~ msgid "Hide EOL Entries" #~ msgstr "Ukrywaj wystąpienia z brakiem wsparcia" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "Ukrywaj wystąpienia z brakiem wsparcia" #~ msgid "Only Show Free Software" #~ msgstr "Pokazuj tylko wolne oprogramowanie" #~ msgid "Hide proprietary software" #~ msgstr "Ukrywaj oprogramowanie własnościowe" #~ msgid "Show Only Flathub Content" #~ msgstr "Pokazuj tylko zawartość z Flathuba" #~ msgid "Hide applications which do not originate from Flathub" #~ msgstr "Ukrywaj aplikacje nie pochodzące z Flathuba" #~ msgid "Show Only Verified Content" #~ msgstr "Pokazuj tylko zawartość zweryfikowaną" #~ msgid "Hide applications which are not verified on Flathub" #~ msgstr "Ukrywaj aplikacje nie będące zweryfikowane na Flathubie" #~ msgid "Debounce Search Inputs" #~ msgstr "Opóźniaj wyszukiwanie podczas wpisywania" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "Dodaj opóźnienie przed wyszukiwaniem, aby zapobiec natychmiastowym " #~ "odpowiedziom podczas wpisywania" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Określa wygląd paska postępu w całej aplikacji" #~ msgid "Saved Window Dimensions" #~ msgstr "Zapisane wymiary okna" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "" #~ "Wymiary okna, które zostaną użyte przy następnym uruchomieniu Bazaaru" #~ msgid "?" #~ msgstr "?" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "Ta funkcja jest na ten moment wyłączona. Zalecamy, abyś zainstalował " #~ "Flatseal, aby zarządzać uprawnieniami twoich aplikacji." #~ msgid "Entry Inspector" #~ msgstr "Inspektor wystąpień" #~ msgid "Serialize" #~ msgstr "Serializuj" #~ msgid "Convert to JSON" #~ msgstr "Przekonwertuj na JSON" #~ msgid "More Mobile apps" #~ msgstr "Więcej aplikacji mobilnych" #~ msgid "Bazaar Inspector" #~ msgstr "Inspektor Bazaaru" #~ msgid "Background Task Info:" #~ msgstr "Informacje o zadaniu w tle:" #~ msgid "Enable Global Debug Mode" #~ msgstr "Włącz globalny tryb debugowania" #~ msgid "Active Blocklists" #~ msgstr "Aktywne listy blokowania" #~ msgid "Active Curated-Configs" #~ msgstr "Aktywne konfiguracje strony \"Polecane\"" #~ msgid "All Entry Groups" #~ msgstr "Wszystkie grupy wystąpień" #~ msgid "Decache and Inspect" #~ msgstr "Wyczyść pamięć podręczną i inspektuj" #~ msgid "No Flatpaks Installed" #~ msgstr "Nie zainstalowano żadnych Flatpaków" #~ msgid "Inspect UI Entry" #~ msgstr "Zbadaj element interfejsu" #~ msgid "All Debug Actions" #~ msgstr "Wszystkie działania debugowania" #~ msgid "Open Bazaar Inspector" #~ msgstr "Otwórz inspektora Bazaaru" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s jest odpowiednie dla małych dzieci" #~ msgid "--- MB" #~ msgstr "--- MB" #~ msgid "Of the size of human DNA" #~ msgstr "rozmiaru DNA człowieka" #~ msgid "3 billion base pairs" #~ msgstr "3 miliardy par zasadowych" #~ msgid "Of the Linux Kernel" #~ msgstr "jądra Linuksa" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "komputera naprowadzającego Apollo 11" #~ msgid "Total ROM and RAM" #~ msgstr "RAMu i ROMu razem" #~ msgid "Of the original Super Mario Bros" #~ msgstr "oryginalnej wersji Super Mario Bros" #~ msgid "On the NES" #~ msgstr "na konsoli NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "rozmiaru Wikipedii" #~ msgid "Without any media" #~ msgstr "bez żadnych multimediów" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Pokaż ilość gwiazdek na git" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "" #~ "Stwierdź, czy Bazaar ma próbwać wykryć i pokazać \"ilość gwiazdek\" dla " #~ "projektów w pełwnym widoku" #~ msgid "Mobile Apps" #~ msgstr "Aplikacje mobilne" #~ msgid "Repository Star Count" #~ msgstr "Liczba gwiazdek repozytorium" #, c-format #~ msgid "%.2fM" #~ msgstr "%.2f mln" #, c-format #~ msgid "%.2fK" #~ msgstr "%.2f tys." #~ msgid "Display Star Count" #~ msgstr "Pokaż liczbę gwiazdek repozytorium" #~ msgid "Show the star count of an application's source code repository" #~ msgstr "Pokaż licznik ukazujący liczbę gwiazdek repozytorium aplikacji" #~ msgid "" #~ "Bazaar can fetch and display the star count from an application's source " #~ "code repository on a remote Git forge. \n" #~ " For projects on GitHub, rate limits may cause them not to appear." #~ msgstr "" #~ "Bazaar może pokazywać ilość gwiazdek z repozytorium aplikacji na " #~ "serwisach Git. Projekty z repozytoriamu na GitHubie, mogą zostać " #~ "ograniczone,\n" #~ "więc licznik może się nie pokazać." #~ msgid "Hide proprietary software when searching" #~ msgstr "Ukrywaj oprogramowanie własnościowe podczas wyszukiwania" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "" #~ "Filtruj wyniki wyszukiwania, tak aby pokazywać tylko aplikacje dostępne " #~ "na Flathubie" #~ msgid "Verified by the original developers" #~ msgstr "Zweryfikowane przez oryginalnych twórców " #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Azenyr" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "João Victor (Leal)" #~ msgstr "João Victor (Leal)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Léane GRASSER" #~ msgstr "Léane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel Mrówka (Microwave)" #~ msgstr "Marcel Mrówka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Sabri Ünal" #~ msgstr "Sabri Ünal" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "camegone" #~ msgstr "camegone" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "Constructing Flatpak instance..." #~ msgstr "Przygotywywanie instancji Flatpaka..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "Ponowne wykorzystywanie ostatniej instancji Flatpaka..." #~ msgid "Flathub is not registered on this system" #~ msgstr "Flathub nie jest zarejestrwowany na tym komputerze" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "Czy chcesz dodać Flathub do listy repozytoriów flatpak? Jeśli tego nie " #~ "zrobisz strona \"Flathub\" nie będzie dostępna. Możesz to zmienić w " #~ "dowolnym momencie." #~ msgid "Add Flathub" #~ msgstr "Dodaj Flathub" #, c-format #~ msgid "Identifying installed entries..." #~ msgstr "Identyfikowanie zainstalowanych wystąpień..." #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "Rozpoczynanie otrzymywania zdalnych wystąpień odnosząc się do %d list(y) " #~ "blokowania..." #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d z %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "Oczekiwanie na zakończenie indeksowania w tle..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "Zakończono inicjalizację w %0.2f sek." #~ msgid "Run this application" #~ msgstr "Uruchom tą aplikację" #~ msgid "Run" #~ msgstr "Uruchom" #~ msgid "Settings & user data will be kept" #~ msgstr "Ustawiania i dane użytkownika zostaną zachowane" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "Nie dołączono konfiguracji polecanych aplikacji do Bazaaru. Skontakuj się " #~ "z kanałami pomocy swojej dystrybucji, aby uzyskać pomoc." #~ msgid "Visual" #~ msgstr "Grafika" #~ msgid "Git Forge Star Counts" #~ msgstr "Licznik gwiazdek na git" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "" #~ "Nie posiadanie tokenu dostępu Githuba może spowodoać blokowanie próśb" #~ msgid "Show Only Flathub Apps" #~ msgstr "Pokazuj tylko aplikacje z Flathuba" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "Poczekaj przez chilkę, aby zmniejszyć obciążenie systemu" #~ msgid "Pride Rainbow Flag" #~ msgstr "Tęczowa flaga dumy" #~ msgid "Bisexual Flag" #~ msgstr "Flaga osób biseksualnych" #~ msgid "Asexual Flag" #~ msgstr "Flaga osób aseksualnych" #~ msgid "Go Home" #~ msgstr "Powróć do strony domowej" #~ msgid "Browse" #~ msgstr "Przeglądaj" #~ msgid "View curated applications" #~ msgstr "Przeglądaj polecane aplikacje" #~ msgid "View the latest on Flathub" #~ msgstr "Przeglądaj najnowsze z Flathuba" #~ msgid "_Quit Service" #~ msgstr "_Zakończ usługę" #~ msgid "Graphics" #~ msgstr "Grafika" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "Strona domowa" #~ msgid "Excludes shared components" #~ msgstr "Wyklucza współdzielone komponenty" #~ msgid "Source code may not be available" #~ msgstr "Kod źródłowy, może nie być dostępny" #~ msgid "Click for details" #~ msgstr "Kliknij, aby uzyskać informacje" #~ msgid "Repositories" #~ msgstr "Repozytoria" #~ msgid "Open in browser" #~ msgstr "Otwórz w przeglądarce" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "%'d miesięcznych pobrań" #~ msgid "Theme" #~ msgstr "Motyw" #~ msgid "Share" #~ msgstr "Podziel się" #~ msgid "Calligraphy application page" #~ msgstr "Strona aplikacji Calligraphy" #~ msgid "Download graph for Blender" #~ msgstr "Wykres pobrań Blendera" #~ msgid "Manage Addons" #~ msgstr "Zarządzaj dodatkami" #~ msgid "Open this image in the default image viewer" #~ msgstr "Otwórz ten obraz w domyślnej przeglądarce zdjęć" #~ msgid "Copy this image to the clipboard" #~ msgstr "Skopiuj ten obraz do schowka" #~ msgid "Show Downloads Over Time" #~ msgstr "Pokaż pobrania na przestrzeni czasu" #~ msgid "Remote repo name" #~ msgstr "Nazwa repozytorium" #~ msgid "%B %-d" #~ msgstr "%-d %B" #~ msgid "Downloads Over Time" #~ msgstr "Pobrania na przestrzeni czasu" #~ msgid "Updated Size" #~ msgstr "Rozmiar po aktualizacji" #~ msgid "Freed Space" #~ msgstr "Zwolnione miejsce" #~ msgid "Transactions Will Appear Here" #~ msgstr "Tutaj pojawią się transakcje" #~ msgid "Halt the execution of transactions" #~ msgstr "Zatrzymaj wykonywanie transakcji" #~ msgid "Up to date!" #~ msgstr "Wszystko zaktualizowane!" #~ msgid "Confirm Action" #~ msgstr "Zatwierdź zadanie" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Masz zamiar usunąć następujący Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Czy na pewno chcesz to zrobić?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Masz zamiar zainstalować następujący Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Czy na pewno chcesz to zrobić?" #~ msgid "Resume the execution of transactions" #~ msgstr "Wznów wykonywanie transakcji" #~ msgid "Pause the execution of transactions" #~ msgstr "Zatrzymaj wykonywanie transakcji" #~ msgid "Apps Of The Week" #~ msgstr "Polecane w tym tygodniu" #~ msgid "Minimize Lower Bound" #~ msgstr "Zminimalizuj dolną granicę" #~ msgid "Maximize Upper Bound" #~ msgstr "Zmaksymalizuj górną granicę" #~ msgctxt "Project URL Type" #~ msgid "VCS Browser" #~ msgstr "Przeglądarka VCS" #~ msgid "Full Application View" #~ msgstr "Pełny widok aplikacji" #~ msgid "Change what content is shown when viewing applications" #~ msgstr "Zmień co się pokazuje podczas wyświetlania aplikacji" #~ msgid "" #~ "If you do not have an access token, turning this setting on may cause " #~ "GitHub to eventually rate limit you." #~ msgstr "" #~ "Jeśli nie posiadasz tokenu dostępu włączenie tego ustawienia może " #~ "sprawić, że Github może zacząć blokować twoje żądania" #~ msgid "Type to filter" #~ msgstr "Pisz, aby filtrować" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Odrzuć wyniki z licencjami własnościowymi" #~ msgid "Advanced" #~ msgstr "Zaawansowane" #~ msgid "Open this link externally" #~ msgstr "Otwórz to łącze w przeglądarce" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "Otrzymano %'d z %'d wystąpień (minęło %0.1f sek.)" #~ msgid "VCS Forge Star Count" #~ msgstr "Licznik gwiazdek na VCS" #~ msgid "This application does not provide a donation link" #~ msgstr "Ta aplikacja nie posiada łącza do strony przekazywania darowizny" #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try looking at their project page for " #~ "more information." #~ msgstr "" #~ "\"%s\" nie posiada łącza do strony przekazywaina darowizny. Oznacza to, " #~ "że nie możesz wesprzeć tej aplikacji. Zajrzyj do a href=\"%s\">strony " #~ "projektu, aby dowiedzieć się więcej." #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try finding their project page for more information." #~ msgstr "" #~ "\"%s\" nie posiada łącza do strony przekazywaina darowizny. Oznacza to, " #~ "że nie możesz wesprzeć tej aplikacji. Spróbój znaleźć stronę projektu tej " #~ "aplikacji, aby dowiedzieć się więcej." #~ msgid "Installing" #~ msgstr "Instalowanie" #~ msgid "Removing" #~ msgstr "Usuwanie" #~ msgid "Show Animated Background" #~ msgstr "Pokaż animowane tła" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "" #~ "Wybierz czy chcesz, aby pokazywać animowane tła ikon na stronie domowej" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "Jest to liczba pobrań z ostatnich 30 dni. Naciśnij, aby zobaczyć " #~ "statystyki pobrań tej aplikacji." #~ msgid "How the application looks" #~ msgstr "Jak aplikacja się prezentuje" #~ msgid "Appearance" #~ msgstr "Wygląd" #~ msgid "Show animated background" #~ msgstr "Pokaż animowane tła" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "Proszę skrócić podsumowanie, powinno mieć między 10 a 35 znaków." #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Główne okno Bazaaru pokazujące Blendera" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Microwave" #~ msgstr "Microwave" #~ msgid "Match using regular expressions" #~ msgstr "Porównywaj używając zwyczajnych wyrażeń" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "Ukryj filtrowanie i sortowanie za efektem przejścia" bazaar-org-bazaar-b6e9a65/po/pt_BR.po000066400000000000000000003361551522167256300174320ustar00rootroot00000000000000# Portuguese translations for bazaar package # Traduções em português brasileiro para o pacote bazaar. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Rin Koito , 2025-2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-21 09:59-0400\n" "PO-Revision-Date: 2026-06-21 14:39-0400\n" "Last-Translator: Rin Koito \n" "Language-Team: Brazilian Portuguese\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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Adicione, remova ou atualize flatpaks neste computador" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistema;GerenciadorDePacotes;Discover;Flatpak;Aplicativos;Loja;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Nova Janela" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Descobrir e instalar aplicativos" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Uma loja de aplicativos rápida e moderna para Linux, focada em descobrir e " "instalar aplicativos e extensões Flatpak, particularmente do Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Enfileire múltiplas instalações e continuar navegando" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Veja permissões de aplicativos facilmente" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Faça login com o Flathub para ver e gerenciar seus favoritos" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Pesquise aplicativos diretamente do GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "Contribuidores do Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "A página inicial exibindo aplicativos do Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Exibir página do app" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Página da Biblioteca" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Página de Pesquisa" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Página de Catergorias" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Parou de Receber Atualizações" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Desinstalar" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Instalar" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Gerenciar Extensões" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Sem Extensões Visíveis" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "As suas preferências de filtro atuais estão escondendo todos as extensões " "conhecidas. Tente ajustá-las" #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Página de Extensões" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Downloads/Mês" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Parou de receber atualizações críticas" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Esta extensão utiliza um runtime que não recebe mais atualizações ou " "atualizações de segurança. Talvez se torne insegura para uso." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Extensão para %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Mostrar Menos" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Mostrar Mais" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Estatísticas de Download" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Classificação Indicativa" # https://pt.wikipedia.org/wiki/Sistema_de_Classifica%C3%A7%C3%A3o_Indicativa_Brasileiro #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Violência Caricata" # https://pt.wikipedia.org/wiki/Sistema_de_Classifica%C3%A7%C3%A3o_Indicativa_Brasileiro #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Sem informações acerca de violência caricata" # https://pt.wikipedia.org/wiki/Sistema_de_Classifica%C3%A7%C3%A3o_Indicativa_Brasileiro #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Violência Fantasiosa" # https://pt.wikipedia.org/wiki/Sistema_de_Classifica%C3%A7%C3%A3o_Indicativa_Brasileiro #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Sem informações acerca de violência fantasiosa" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Violência Realista" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Sem informações acerca de violência realista" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Violência com Presença de Sangue" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Sem informações acerca de violência com presença de sangue" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Violência Sexual" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Sem informações acerca de violência sexual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Álcool" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Sem informações acerca de referências à álcool" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Narcóticos" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Sem informações acerca de referências a drogas ilícitas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabaco" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Sem informações acerca de referências a produtos de tabaco" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nudez" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Sem informações acerca de nenhum tipo de nudez" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Temas Sexuais" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Sem informações acerca de referências ou retratações a nenhum tipo de " "natureza sexual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Profanidade" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Sem informações acerca de nenhum tipo de profanidade" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Humor Inapropriado" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Sem informações acerca de humor inapropriado" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Discriminação" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Sem informações acerca de nenhum tipo de linguagem discriminatória" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Propaganda" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Sem informações acerca de nenhum tipo de propaganda" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Apostas ou Jogos de Azar" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Sem informações acerca de nenhum tipo de apostas ou jogos de azar" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Compras" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Sem informações acerca de possibilidades de gastar dinheiro" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Mensagens Entre Usuários" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Sem informações acerca de formas de se comunicar com outros usuários" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Comunicações de Áudio Entre Usuários" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "" "Sem informações acerca de formas de se comunicar por áudio com outros " "usuários" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Detalhes de Contato" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Sem informações acerca de compartilhamento de nomes de usuário de redes " "sociais ou endereços de e-mail" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Informações de Identidade" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Sem informações acerca de compartilhamento de informações de usuário com " "terceiros" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Compartilhamento de Localização" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Sem informações acerca de compartilhamento de localização com outros usuários" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostituição" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Sem informações acerca de referências a prostituição" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adultério" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Sem informações acerca de referências a adultério" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Personagens Sexualizados" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Sem informações acerca de personagens sexualizados" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Profanação" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Sem informações acerca de referências a profanação" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Restos Humanos" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Sem informações acerca de restos humanos mortos visíveis" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Escravidão" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Sem informações acerca de referências a escravidão" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Não inclui referências a drogas" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Não inclui linguagem de teor ofensivo, profanidade e nenhum outro tipo de " "linguagem inapropriada" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Não inclui anúncios ou transações monetárias" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Não inclui sexo ou nudez" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Não inclui funcionalidade não controlada de comunicação" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Não inclui violência" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogas" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Linguagem Imprópria" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Dinheiro" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Social" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Violência" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Livre" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s possui classificação indicativa desconhecida" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s é adequado para todos" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s é adequado para crianças pequenas" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s é adequado para crianças" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s é adequado para adolecentes" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s é adequado para adultos" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s é adequado para %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Pasta do Sistema %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Subpasta da Pasta pessoal %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Pastas host do sistema" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Configurações host do sistema de /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Subpasta do Desktop %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Pasta do Desktop" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Subpasta de Documentos %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Pasta de Documentos" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Subpasta de Músicas %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Pasta de Músicas" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Subpasta de images %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Pasta de imagens" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Subpasta de Compartilhamento Público %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Pasta de Compartilhamento Público" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Subpasta de Vídeos %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Pasta de Vídeos" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Subpasta de Modelos %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Pasta de Modelos" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Subpasta de cache de usuário %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Pasta de cache de usuário" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Subpasta de configuração de usuário %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Pasta de configuração de usuário" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Subpasta de dados de usuário %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Pasta de dados de usuário" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Subpasta de runtime de usuário %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Pasta de runtime de usuário" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Acesso ao sistema de arquivos para %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Diretório do sistema de arquivos desconhecido" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Tamanho do Download" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Tamanho Instalado" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Quantidade a ser baixada da internet" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Tamanho no Disco" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Abrir pasta de dados de usuário" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Seus Dados de Usuário" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Caches, configurações e outros dados do app" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Cache" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Dados de cache temporários" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Limpar Cache" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Tamanho do Runtime Instalado" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Tamanho de Download do Runtime" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "N/A" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Tamanho do App" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Verificado" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Instalado" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "" "João Victor , 2025\n" "Rin Koito , 2025" #: src/bz-application.c:799 msgid "Special Thanks" msgstr "Agradecimentos Especiais" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "Desconectado com Sucesso!" #: src/bz-application.c:995 msgid "Performing setup…" msgstr "Realizando configuração..." #: src/bz-application.c:1087 msgid "Set Up System Flathub?" msgstr "Configurar Flathub do Sistema?" #: src/bz-application.c:1090 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "O repositório Flathub do sistema não está configurado. O Bazaar precisa que " "o Flahub esteja configurado na instalação Flatpak do sistema para navegar e " "instalar aplicações.\n" "\n" "Você ainda pode utilizar o Bazaar para navegar e remover aplicativos já " "instalados." #: src/bz-application.c:1097 msgid "Set Up Flathub?" msgstr "Configurar Flathub?" #: src/bz-application.c:1100 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub não configurado neste sistema. Você não poderá navegar e instalar " "aplicativos no Bazaar se estiver indisponível.\n" "\n" "Você ainda pode utilizar o Bazaar para navegador e remover aplicativos já " "instalados." #: src/bz-application.c:1106 msgid "Later" msgstr "Depois" #: src/bz-application.c:1107 msgid "Set Up Flathub" msgstr "Configurando Flathub" #: src/bz-application.c:1626 msgid "A backend error occurred" msgstr "Ocorreu um erro no backend" #: src/bz-application.c:1826 src/bz-application.c:4006 msgid "Refreshing…" msgstr "Atualizando..." #: src/bz-application.c:1990 src/bz-application.c:4004 #, c-format msgid "Loading %d apps…" msgstr "Carregando %d aplicativos..." #: src/bz-application.c:2043 msgid "Failed to open file" msgstr "Falha ao abrir arquivo" #: src/bz-application.c:2141 msgid "An initialization error occurred" msgstr "Ocorreu Um Erro de Iniciazalição" #: src/bz-application.c:2535 msgid "Checking for updates…" msgstr "Procurando por atualizações..." #: src/bz-application.c:2591 msgid "Failed to check for updates" msgstr "Falha ao procurar por atualizações" #: src/bz-application.c:3717 msgid "Malformed Link" msgstr "Link Malformado" #: src/bz-application.c:3718 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "O link usado para abrir este aplicativo possui capitalização incorreta e " "pode parar de funcionar no futuro.\n" "\n" "Isto costuma ocorrer quando o KRunner está enviando incorretamente IDs de " "aplicativos" #: src/bz-application.c:3726 msgid "Could not find app" msgstr "Não foi possível encontrar o app" #: src/bz-application.c:3757 msgid "Failed to load metainfo" msgstr "Falha ao carregar metainfo" #: src/bz-application.c:4008 msgid "Writing to cache…" msgstr "Escrevendo no cache" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Mostrar Tudo" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Todos \"%s\"" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d Aplicativos" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Instalação de Bundle" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Dependências adicionais podem ocupar mais espaço" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Instalar este aplicativo pode exigir adicionar uma nova fonte de software. " "Outros aplicativos desta fonte aparecerão no Bazaar.\n" "\n" "Somente adicione esta fonte se você tem certeza de que confia nela." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Instalado com Sucesso!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Abrir" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Mostrar Detalhes do App" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Já Instalado" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Falha ao Instalar" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Tamanho de instalação desconhecido" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Cerca de %s para instalar" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Sem permissões especiais" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d downloads no último mês" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s runtime" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Download" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Informação sobre o tamanho não disponível" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Tamanho do download de %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Todas as idades" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Classificação indicativa indisponível" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Adequado para todas as idades" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Adequado para idades de %d anos ou mais" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Desconhecido" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Software livre sob a licença %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Software Livre" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Software Proprietário" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Licença Especial: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Software Livre" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Proprietário" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Licença Especial" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Adaptativo" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "Somente Desktop" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Funciona em desktops, tablets e celulares" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Talvez não funcione em dispositivos móveis" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Seguro" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Baixo Risco" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Médio Risco" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Alto Risco" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Vazio" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Sem Recomendações" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "Não há informação curada provida para este sistema. Você ainda pode navegar " "por aplicativos no Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Navegar Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Offline" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Navegador" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Não Verificado" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Informações sobre desenvolveres não está disponível" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "A propriedade do ID do aplicativo %s não foi verificada e talvez seja um " "pacote da comunidade." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "A propriedade do ID do aplicativo %s foi manualmente verificada pelo time do " "Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "A propriedade do ID do aplicativo %1$s foi verificada por %2$s em " "%3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "A propriedade do ID do aplicativo %1$s foi verificada utilizando %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "A propriedade do ID do aplicativo %s foi verificada." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Notas de Lançamento Completas" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Esta versão do Bazaar foi possível graças a usuários como você!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Eu amo fazer o Bazaar, mas eu não consigo fazê-lo sem ajuda. Ajude o " "desenvolvimento doando para o projeto no Ko-Fi:" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Doar para o Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "O Que Tem de Novo na %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Lançado em %B %-e, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Escolha uma Instalação" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Você tem várias versões deste aplicativo instaladas. Com qual você gostaria " "de prosseguir?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Cancelar" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Somente Para Este Usuário" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "este usuário" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "todos os usuários" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Detalhes" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Copiar" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:408 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Copiado!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Contagem de Favoritos" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Falha ao atualizar favorito" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Faça login com o Flathub para gerenciar seus favoritos" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Entrar" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "Favoritos" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Instalar Todos" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Carregando" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Sem Favoritos" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Aplicativos que você marcar como favoritos aparecerão aqui" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Apoiar Esta Aplicação" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Remover dos Favoritos" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Falha ao remover favorito" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Anterior" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Próximo" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Editação" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mixagem" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Música" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Reprodutor de Mídia" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Gravador" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Sequenciador" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Sintonizador" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Emulação" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Ação" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Aventura" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Arcade" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Blocos" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Tabuleiro" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Carta" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Crianças" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Lógica" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Role Playing" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Tiro" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Simulação" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Estportes" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Estratégia" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Navegadores" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Chat" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "E-mail" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Compartilhamento de Arquivos" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Áudio & Vídeo" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Mídia" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Mais Áudio e Vídeo" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Ferramentas de desenvolvedores" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Desenvolver" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Mais Ferramentas de desenvolvedores" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Educação" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Aprender" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Mais Educação" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Jogos" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Jogar" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Mais Jogos" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Gráficos e Fotografia" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Criar" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Mais Gráficos e Fotografia" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Conectividade" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Comunicação" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Mais Comunicação" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Produtividade" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Trabalho" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Mais Produtividade" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Ciência" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Mais Ciência" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Sistema" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Mais Sistema" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Utilitários" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Ferramentas" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Mais Utilitários" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Em Alta" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Mais Em Alta" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Populares" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Mais Populares" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Recentemente Adicionados" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Novos" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Mais Novos" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Recentemente Atualizados" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Atualizados" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Mais Atualizados" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Aplicativos Móveis" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Mais Aplicativos Móveis" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Mais Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "Aplicativos KDE" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Mais Aplicativos KDE" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Jogos" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Mais Jogos" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Emuladores" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Mais Emuladores" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Inicializadores de Jogo" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Mais Inicializadores de Jogo" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Ferramentas de Jogo" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Mais Ferramentas de Jogo" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub Não Adicionado" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "O repositório do Flathub não foi encontrado por nenhuma de suas instalações " "de Flatpak" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub Indisponível" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Falha ao se conectar ao Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Você ainda pode gerenciar e procurar por aplicativos" #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Procurar Aplicativos" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Reconectar" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Aplicativo do Dia" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Em movimento" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Aplicativos para seus telefones e tablets Linux" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Mais Aplicativos Móveis" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Nós♥Jogos" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Jogos e aplicativos para rodar seus títulos favoritos" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Sem Resultados" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Tente outro termo de pesquisa" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Conteúdo" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Esta é uma pré-visualização local, alguns detalhes podem estar diferentes da " "listagem publicada" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Pre-visualizar Aparência da Loja" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Apoiar" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Este aplicativo utiliza um runtime que não recebe mais atualizações ou " "atualizações de segurança. Talvez se torne inseguro para uso." #: src/bz-full-view.blp:540 msgid "Trash Data" msgstr "Deletar dados" #: src/bz-full-view.blp:603 msgid "Add-ons" msgstr "Extensões" #: src/bz-full-view.blp:638 msgid "More Add-Ons" msgstr "Mais Extensões" #: src/bz-full-view.blp:649 msgid "Links" msgstr "Links" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Sem URL" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Este aplicativo tem uma licença livre e de código aberto (FLOSS), o que " "significa que o código fonte pode ser auditável por segurança." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Este aplicativo tem uma licença proprietária, o que significa que o código " "fonte é desenvolvido de maneira privada e não pode ser auditável " "independentemente por terceiros." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Mais Aplicativos" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Mais Aplicativos de %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Outros Aplicativos Deste Desenvolvedor" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Outros Aplicativos de %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s não está instalado, mas ainda possui %s de dados presentes." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Outros Aplicativos" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d Aplicativo" msgstr[1] "%d Aplicativos" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Falha ao Remover Dados de Usuário" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Suporte a Hardware" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Suporte a Teclado" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Precisa de teclado" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Teclado recomendado" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Suporta teclados" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Suporte a teclado desconhecido" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Suporte a mouse" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Precisa de mouse ou dispositivo de indicação" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Recomenda mouse ou dispositivo de indicação" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Suporta mouse ou dispositivo de indicação" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Suporte para mouses ou dispositivos de indicação desconhecido" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Suporte a tela sensível ao toque" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Precisa de tela sensível ao toque" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Recomenda tela sensível ao toque" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Suporta tela sensível ao toque" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Suporte a telas sensíveis ao toque desconhecido" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Suporte a dispositivos móveis" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Funciona em dispositivos móveis" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Talvez não funcione bem em dispositivos móveis" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Suporte a Desktop" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Funciona bem em telas grandes" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s funciona melhor em hardwares específicos" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s funciona na maioria dos dispositivos" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Abrir" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Desinstalar Aplicativo" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Remover" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Atualizar" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Remover" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Cancelar" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Cancelando" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Doar Button" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Pesquisar aplicativos instalados" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Limpar pesquisa" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Nenhum App Encontrado" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Tentar Pesquisar na Loja" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "Biblioteca" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Atualizações pendentes" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Downloads" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Recentemente Desinstalado" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Limpar Tarefas Finalizadas" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Opções de Filtro" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Ordenar Por" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Nome" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Tamanho" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "" "Nenhum resultado encontrado para \"%s\" na lista de aplicativos instalados" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u Atualização Disponível" msgstr[1] "%u Atualizações Disponíveis" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u Aplicativos Instalados" msgstr[1] "%u Aplicativos Instalados" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Envolva-se" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Aprender Mais" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Licença Desconhecida" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Feito pela Comunidade" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Este app é desenvolvido em aberto por uma comunidade internacional.\n" "\n" "Você pode participar e ajudar a torná-lo ainda melhor." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "A licença deste app é desconhecida" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Este app é desenvolvido em aberto por uma comunidade internacional e é " "distribuído sob a licença %s.\n" "\n" "Você pode participar e ajudar a torná-lo ainda melhor." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Este app não é desenvolvido em código aberto, então somente os " "desenvolvedores sabem como ele funciona. Ele talvez seja inseguro de formas " "que são difíceis de detectar e pode mudar sem supervisão.\n" "\n" "Você talvez não possa contribuir para este app." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Este app é desenvolvido sob a licença especial %s.\n" "\n" "Você talvez não possa contribuir para este aplicativo." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Licença" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Conectar-se ao Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Algo Deu Errado" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" "Conecte-se para sincronizar seus aplicativos favoritos entre dispositivos" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Finalizar" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Olá, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Selecionar Arquivo de Metainfo" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Arquivos de Metainfo" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Selecionar Ícone (Opcional)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Arquivos de Imagem" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Pré-visualizar" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Preferências" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Sua conexão é limitada — atualização automática de dados da loja pausada" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "Atualizar Manualmente" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Filtros de Conteúdo" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Somente Software Livre" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Ocultar aplicativos proprietários dos durante navegação e pesquisa" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Somente Resultados do Flathub" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "" "Limitar resultados de navegação e pesquisa a aplicativos disponíveis no " "Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Somente Resultados Verificados" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Ocultar resultados que não são verificados no Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Ocultar Aplicativos em fim-de-vida (EOL)" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Ocultar aplicativos que não são mais suportados por seus desenvolvedores" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Tema da Barra de Progresso" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Cor de destaque" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Cores de Orgulho" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Cores do Orgulho Lésbico" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Cores do Orgulho Homossexual Masculino" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Cores do Orgulho Transgênero" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Cores do Orgulho Não Binário" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Cores do Orgulho Bisexual" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Cores do Orgulho Asexual" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Cores do Orgulho Pansexual" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Cores do Orgulho Arromântico" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Cores do Orgulho Gênero Fluído" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Cores do Orgulho Polissexual" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Cores do Orgulho Omnissexual" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Cores do Orgulho Aroace" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Cores do Orgulho Agênero" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Cores do Orgulho Genderqueer" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Cores do Orgulho Intersexo" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Cores do Orgulho Demigênero" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Cores do Orgulho Birromântico" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Cores do Orgulho da Deficiência" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Cores do Orgulho Femboy" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Cores do Orgulho Neutrois" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Histórico de Versão" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Histórico de Versão" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Hoje" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Ontem" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "Há %d dia" msgstr[1] "Há %d dias" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "Há %d semana" msgstr[1] "Há %d semanas" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "Há %d mês" msgstr[1] "Há %d meses" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "Há %d ano" msgstr[1] "Há %d anos" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Versão %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Não há detalhes para este lançamento" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Obter mais informações" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Desinstalar" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Obter" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Permissões Desconhecidas" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Estão faltando permissões para este app." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Sem Permissões" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "O app é completamente isolado" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Acesso à Internet" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Pode acessar a internet" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Sem Acesso à Rede" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Não pode acessar a internet" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Acesso a Dispositivos de Usuário" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Pode acessar dispositivos como webcams ou controles de jogos" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Sem Acesso a Dispositivos de Usuário" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Não pode acessar dispositivos como webcams ou controles de jogos" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Acesso a Dispositivos de Entrada" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Pode acessar dispositivos de entrada" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Acesso a Microfone e Tocar Áudio" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "Pode ouvir usando microfones e tocar áudio sem pedir permissão" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Acesso a Dispositivo do Sistema" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "Pode acessar dispositivos do sistema que requerem permissões elevadas" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Acesso a Conteúdos da Tela" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Pode acessar os conteúdos da tela e de outras janelas" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Sistema de Janelas Legado" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Sempre usa um sistema de janelas legado (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Permissões Arbitrárias" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Pode adquirir permissões arbitrárias" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Configurações de Usuário" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Pode acessar e mudar configurações de usuário" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Acesso Total de Leitura/Escrita ao Sistema de Arquivos" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Pode ler e escrever todos os dados no sistema de arquivos" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Acesso de Leitura/Escrita à Pasta Pessoal" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Pode ler e escrever todos os dados na sua pasta pessoal" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Acesso Total de Leitura ao Sistema de Arquivos" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Pode ler todos os dados no sistema de arquivos" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Acesso de Leitura à Pasta Pessoal" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Pode ler todos os dados na sua pasta pessoal" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Acesso de Leitura/Escrita à Pasta de Download" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Pode ler e escrever todos os dados na sua pasta de downloads" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Acesso de Leitura à Pasta de Downloads" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Pode ler todos os dados na sua pasta de downloads" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Pode ler e escrever todos os dados na sua pasta de downloads" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Pode ler todos os dados no diretório" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Sem Acesso ao Sistema de Arquivos" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Não pode acessar o sistema de arquivos de maneira alguma" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Usa Serviços do Sistema" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Pode solicitar dados de serviços do sistema que não utilizam portais" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Usa Serviços de Sessão" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Pode solicitar dados de serviços de sessão que não utilizam portais" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Sem Acesso a Serviços" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Não pode acessar servições de sessão ou do sistema de maneira alguma" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Desenvolvedor do App Verificado" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "O desenvolvedor deste app foi verificado e é quem diz ser" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Código Proprietário" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "O código fonte não é público, então não pode ser auditado independentemente " "e pode ser inseguro" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Código Auditável" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "O código fonte é público e pode ser auditado independentemente, o que torna " "o app potencialmente seguro" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Usa o Serviço do Sistema %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Usa a Serviço de Sessão %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Usa o Serviço %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Pode ver serviços que não usam portais" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Pode se comunicar com serviços que não utilizam portais" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Pode ter um serviço que não utiliza portais" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Integração de Menu Global" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Pode mostrar seus menus em uma menu de barra global" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Integração de Configurações do KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Pode detectar quando configurações do desktop KDE mudam" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Configurações Globais do KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Pode ler preferência do desktop KDE como fontes e cores" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Serviço de Armazenamento Secreto" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Pode guardar e recuperar suas próprias senhas usando o keyring do sistema" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Serviço de Notificações do Desktop" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Pode mandar notificações de desktop" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Integração com a Bandeja do Sistema" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Pode mostrar um ícone na bandeja do sistema" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Integração com KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Pode interagir com dispositivos pareados via KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Este aplicativo possui uma permissão que, indiretamente, o autoriza " "conseguir qualquer outra permissão que este aplicativo quiser, " "burlando o isolamento do Flatpak.\n" "\n" "Portanto, ele pode fazer qualquer coisa que uma aplicação normal e sem " "isolamento consegue fazer, como acessar todos os seus arquivos e conectar à " "internet.\n" "\n" "Verificar as outras permissões pode esclarecer o que este aplicativo " "provavelmente fará." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Ver Outras Permissões" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "ID do App" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Este app utiliza uma versão desatualizada da plataforma de software (SDK) e " "pode conter bugs ou vunerabilidades de segurança que talvez não estejam " "consertadas." #: src/bz-safety-dialog.c:278 msgid "Safety" msgstr "Segurança" #: src/bz-safety-dialog.c:344 #, c-format msgid "%s is Safe" msgstr "%s é Seguro" #: src/bz-safety-dialog.c:349 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s não possui Permissões Inseguras" #: src/bz-safety-dialog.c:354 #, c-format msgid "%s is Probably Safe" msgstr "%s é Provavelmente Seguro" #: src/bz-safety-dialog.c:359 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s é Possivelmente Inseguro" #: src/bz-safety-dialog.c:364 #, c-format msgid "%s is Unsafe" msgstr "%s é Inseguro" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Capturas de tela" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Captura de tela anterior" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Próxima captura de tela" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Copiar Image" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Redefinir Visualização" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Diminuir Zoom" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Aumentar Zoom" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Carrossel de Capturas de Tela" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Sem Capturas de Tela" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Abrir Visualizador de Capturas de Tela" #: src/bz-screenshots-carousel.c:301 #, c-format msgid "Screenshot %u %s" msgstr "Captura de tela %u %s" #: src/bz-screenshots-carousel.c:303 #, c-format msgid "Screenshot %u" msgstr "Captura de tela %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Filtros" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Verificado" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Livre/Aberto" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Não-_EOL" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Filtrar aplicativos em fim-de-vida (EOL)" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Amigável para Dispositivos Móveis" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Catergorias" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Pesquisar Aplicativos, Jogos e Softwares" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Filtros de Pesquisa" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Limpar Pesquisa" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Navegar por Categorias" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Atualizações Indisponíveis" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Pesquise aplicativos utilizando a barra de pesquisa acima." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Nenhuma Aplicação Encontrada" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Sem resultados para \"%s\" no Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Vídeo" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Produtividade" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Calendário" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Mensagens" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Pintura" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Emuladores" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Página do Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Site do Projeto" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Rastreador de problemas" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Perguntas Mais Frequentes" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Ajuda" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Doar" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Traduzir" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Contatar" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Código Fonte" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Contribuir" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifesto" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Copiar Link" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Linha do tempo" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Instalações:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Mundo" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Desde 15/04/2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM de Instalações Totais" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK de Instalações Totais" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d de Instalações Totais" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Nenhum Resultado Encontrado" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "A pesquisa falhou" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Manter Dados de Usuário" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Habilitar restauração de configurações pessoais & conteúdos" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Excluir Todos os Dados" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Remover permanentemente dados de usuário para liberar espaço" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Instalar %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Selecione qual versão para instalar. Talvez haja a instalação de componente " "compartilhados adicionais" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Pode instalar componentes compartilhados adicionais" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Cancelar" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Instalar" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Remover %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Selecione qual versão para remover." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Não será possível utilizar %s após ser desinstalado." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "\"%s\" é de Alto Risco" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Este app possui acesso total ao seu sistema, incluindo todos os seus " "arquivos, histórico de navegação, senhas salvas e mais. Também possui " "acesso à internet, o que significa que também pode enviar seus dados para " "terceiros.\n" "\n" "Por este app ser proprietário, não é possível auditar o que faz com estas " "permissões." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Este app utiliza o sistema de janelas legado X11, o qual permite gravar " "todas as teclas pressionadas, capturar tela e monitorar outros " "aplicativos. Também possui acesso à internet, o que significa que também " "pode enviar os seus dados para terceiros.\n" "\n" "Por este app ser proprietário, não é possível auditar o que faz com estas " "permissões." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Instalar de Qualquer Maneira" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Falha ao carregar o diálogo de transação" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Todos os aplicativos já estão instalados" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_OK" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Instalar Aplicativo %u?" msgstr[1] "Instalar Aplicativos %u?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Os seguintes aplicativos serão instalados. Componentes compartilhados " "adicionais também podem ser instalados" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d addons serão instalados." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Adicionalmente, %d addons serão instalados." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Instalar Todos" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Concluído em %.02f segundos" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Extensões do App" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Runtime" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Em Fila" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Concluído" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Cancelado" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Erro" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Cancelar Transação" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Mostrar Detalhes" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Mostrar Informações do Erro" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Liberados" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Erro de Transação" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Pendente" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Atualizar Todos" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u Atualização de Runtime" msgstr[1] "%u Atualizações de Runtime" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Gerenciar Dados de Usuário Restantes" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Nenhum Dado de Usuário Encontrado" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Dados de Usuário" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Apagar Dados de Usuário" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Apagar Dados de Usuário de %s" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "Atualizando" #: src/bz-window.blp:89 msgid "Curated" msgstr "Recomendados" #: src/bz-window.blp:101 msgid "Explore" msgstr "Explorar" #: src/bz-window.blp:128 msgid "Search" msgstr "Pesquisa" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "Menu Principal" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "Você está utilizando a nova versão do Bazaar!" #: src/bz-window.blp:227 msgid "See What's New" msgstr "Veja O Que Há de Novo" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Você possui conexão à internet, mas está vendo uma versão em cache do Flathub" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "_Doar para o Bazaar" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "_Atualizar" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "_Entrar com Flathub" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "_Gerenciar Dados de Usuário Restantes" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "_Preferências" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "_Atalhos de Teclado" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "_Sobre o Bazaar" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "_Sair do Bazaar" #: src/bz-window.blp:342 msgid "Log Out" msgstr "Desconectar" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Falha ao iniciar a aplicação" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Você não pode remover o Bazaar pelo Bazaar!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Não é possível fazer isso agora!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Instalação" msgstr[1] "Instalações" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Navegação" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Abrir a Página Explorar" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Abrir a Página da Biblioteca" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Abrir a Página de Pesquisa" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Repositórios" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Sincronizar Repositórios" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Geral" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Abrir Preferências" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar Atalhos" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Fechar Janela" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Sair do Bazaar" #~ msgid "Free" #~ msgstr "Livre" #~ msgid "Tags:" #~ msgstr "Etiquetas:" #~ msgid "Progress Bar" #~ msgstr "Barra de Progresso" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "Escolha um tema para a barra de progresso!" #~ msgid "Open Link" #~ msgstr "Abrir Link" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "Aplicativos com a etiqueta \"%s\"" #~ msgid "Flathub returned an error" #~ msgstr "Flathub retornou um erro" #~ msgid "Retry Flathub Connection" #~ msgstr "Tentar conexão ao Flathub novamente" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "" #~ "Connect sua conta do Flathub ao Bazaar para gerenciar seus apps favoritos." #~ msgid "Delay Search Results" #~ msgstr "Atrasar Resultados de Pesquisa" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "" #~ "Melhorar resultados de performance utilizando debouncing nos termos " #~ "pesquisados" #~ msgid "Vertical Stripes" #~ msgstr "Listras Verticais" #~ msgid "Display flag colors from left to right" #~ msgstr "Mostrar as cores das bandeiras da esquerda para a direita" #~ msgid "User Data Size" #~ msgstr "Tamanho dos Dados de Usuário" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Installing" #~ msgstr "Instalando" #~ msgid "Refresh completed!" #~ msgstr "Atualização completa!" #~ msgctxt "As in, \"100 Installs\"" #~ msgid "Installs" #~ msgstr "Instalações" #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Atualizar" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "_Doar para o Bazaar ❤️" #~ msgid "Open App Library" #~ msgstr "Abrir Biblioteca de Apps" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "Instalar bundles .flatpak ainda não é suportado" #~ msgid "Steam" #~ msgstr "Steam" #~ msgid "Minecraft" #~ msgstr "Minecraft" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "Isso enfatiza o apoio aos desenvolvedores que tornam o desktop Linux " #~ "possível. Bazaar provê uma seção de \"recomendados\" que pode ser " #~ "configurada por distribuidores para entregar uma experiência mais " #~ "localizada." #~ msgid "_Synchronize Remotes" #~ msgstr "_Sincronizar Repositórios" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "Synchronizing..." #~ msgstr "Sincronizando..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "Obtendo %d entradas" #~ msgid "Indexing Data..." #~ msgstr "Indexando Dados..." #~ msgid "View the Release Page" #~ msgstr "Visualizar Página de Lançamento" #~ msgid "Close" #~ msgstr "Fechar" #~ msgid "Copy and Close" #~ msgstr "Copiar e Fechar" #~ msgid "Download & Install Application" #~ msgstr "Baixar & Instalar Aplicativo" #~ msgid "Install Other Version" #~ msgstr "Instalar Outra Versão" #~ msgid "Keep Data" #~ msgstr "Manter Dados" #~ msgid "Open App" #~ msgstr "Abrir App" #~ msgid "Refreshing Store Content" #~ msgstr "Recarregando o Conteúdo da Loja" #~ msgid "No background tasks!" #~ msgstr "Sem atividades em segundo plano!" #~ msgctxt "As in, \"100 Downloads\"" #~ msgid "Downloads" #~ msgstr "Downloads" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Sair" #~ msgid "Nucleus app page" #~ msgstr "Página do aplicativo Nucleus" #~ msgid "Toggle transaction sidebar" #~ msgstr "Alternar barra lateral de transações" #, fuzzy #~ msgid "Finished" #~ msgstr "Tarefas finalizadas" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "%s transferidos até agora" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d Atualização Disponível" #~ msgstr[1] "%d Atualizações Disponíveis" #~ msgid "Updates Are Available" #~ msgstr "Atualizações Estão Disponíveis" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "Os seguintes aplicativos podem ser atualizados. Você gostaria de instalá-" #~ "los?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "" #~ "%d runtimes e/ou extensões podem ser atualizados. Você gostaria de " #~ "instalá-los?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "Adicionalmente, %d runtimes e/ou extensões serão atualizados." #~ msgid "Update Now" #~ msgstr "Atualizar Agora" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "Alternar Gerenciador de Transações" # https://pt.wikipedia.org/wiki/Fim_de_vida_(produto) #~ msgid "Hide EOL Entries" #~ msgstr "Esconder entradas em fim de vida (EOL)" # https://pt.wikipedia.org/wiki/Fim_de_vida_(produto) #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "Esconder entradas em fim de vida (EOL) e entradas dependentes delas" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Exibir a contagem de estrelas de plataformas Git" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "" #~ "Se deve fazer a tentativa de detectar e mostrar a \"contagem de " #~ "estrelas\" para projetos na visualização completa" #~ msgid "Only Show Free Software" #~ msgstr "Mostrar apenas softwares livres" #~ msgid "Hide proprietary software" #~ msgstr "Ocultar softwares proprietários" #~ msgid "Show Only Flathub Content" #~ msgstr "Mostrar Apenas Conteúdos do Flathub" #~ msgid "Debounce Search Inputs" #~ msgstr "Entrada de Pesquisa com Atraso" #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "" #~ "Adiciona um delay antes de pesquisar para evitar múltiplas respostas " #~ "enquanto digita" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Descreve a aparência da barra de progresso global" #~ msgid "Saved Window Dimensions" #~ msgstr "Dimensões da Janela Salvas" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "" #~ "As dimensões da janela a serem utilizadas pela próxima janela do Bazaar" #~ msgid "?" #~ msgstr "?" #, c-format #~ msgid "%s is suitable for toddlers" #~ msgstr "%s é adequado para crianças de um a três anos" #~ msgid "--- MB" #~ msgstr "--- MB" #~ msgid "Of the size of human DNA" #~ msgstr "Do tamanho do DNA humano" #~ msgid "3 billion base pairs" #~ msgstr "3 bilhões de pares de bases" #~ msgid "Of the Linux Kernel" #~ msgstr "Do Kernel Linux" #~ msgid "linux-6.17.tar.xz" #~ msgstr "linux-6.17.tar.xz" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "Do computador de orientação da Apollo 11" #~ msgid "Total ROM and RAM" #~ msgstr "Total de ROM e RAM" #~ msgid "Of the original Super Mario Bros" #~ msgstr "Do Super Mario Bros original" #~ msgid "On the NES" #~ msgstr "No NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "Do tamanho da Wikipedia" #~ msgid "Without any media" #~ msgstr "Sem nenhuma mídia" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "Esta funcionalidade está atualmente desativada. É recomendado baixar e " #~ "instalar o Flatseal para gerenciar permissões de aplicativos." #~ msgid "Entry Inspector" #~ msgstr "Inspetor de entrada" #~ msgid "Serialize" #~ msgstr "Serializar" #~ msgid "Convert to JSON" #~ msgstr "Converter para JSON" #~ msgid "More Mobile apps" #~ msgstr "Mais Aplicativos Móveis" #~ msgid "Repository Star Count" #~ msgstr "Contagem de Estrelas do Repositório" #~ msgid "Bazaar Inspector" #~ msgstr "Inspetor do Bazaar" #~ msgid "Enable Global Debug Mode" #~ msgstr "Habilitar Modo de Depuração Global" #~ msgid "Active Blocklists" #~ msgstr "Listas de Bloqueio Ativas" #~ msgid "Active Curated-Configs" #~ msgstr "Configurações de Listas Recomendadas Ativas" #~ msgid "All Entry Groups" #~ msgstr "Todos os Grupos de Entradas" #~ msgid "Decache and Inspect" #~ msgstr "Limpar Cache e Inspecionar" #~ msgid "No Flatpaks Installed" #~ msgstr "Sem Flatpaks Instalados" #~ msgid "Display Star Count" #~ msgstr "Mostrar Contagem de Estrelas" #~ msgid "Show the star count of an application's source code repository" #~ msgstr "" #~ "Mostrar a contagem de estrelas do repositório código fonte da aplicação" #~ msgid "" #~ "Bazaar can fetch and display the star count from an application's source " #~ "code repository on a remote Git forge. \n" #~ " For projects on GitHub, rate limits may cause them not to appear." #~ msgstr "" #~ "Bazaar pode verificar e mostrar a contagem de estrelas do repositório " #~ "código fonte da aplicação em uma forja git externa.\n" #~ " Para projetos no GitHub, limites de taxa talvez façam com que elas não " #~ "apareçam." #~ msgid "Inspect UI Entry" #~ msgstr "Inspecionar Entrada de UI" #~ msgid "All Debug Actions" #~ msgstr "Depurar todas as ações" #~ msgid "Tasks" #~ msgstr "Tarefas" #~ msgid "Stop Active Tasks" #~ msgstr "Parar Tarefas Ativas" #~ msgid "No Tasks Yet" #~ msgstr "Nenhuma Tarefa Ainda" #~ msgid "Open Bazaar Inspector" #~ msgstr "Abrir Inspetor do Bazaar" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "A funcionalidade de inspecionar e instalar pacotes .flatpak está chegando " #~ "em breve! Por enquanto, insira\n" #~ "\n" #~ "flatpak install --bundle seu-pacote.flatpak\n" #~ "\n" #~ "em seu terminal." #~ msgid "Resume Current Tasks" #~ msgstr "Retomar Tarefas Atuais" #~ msgid "Pause Current Tasks" #~ msgstr "Pausar Tarefas Atuais" #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u downloads" #~ msgid "We ♥ Games" #~ msgstr "Nós ♥ Jogos" #, c-format #~ msgid "%.2fM" #~ msgstr "%.2fM" #, c-format #~ msgid "%.2fK" #~ msgstr "%.2fK" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "" #~ "Filtra resultados de pesquisa para exibir apenas aplicativos disponíveis " #~ "no Flathub" #~ msgid "Manage Addons" #~ msgstr "Gerenciar Extensões" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Azenyr" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "João Victor (Leal)" #~ msgstr "João Victor (Leal)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Léane GRASSER" #~ msgstr "Léane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel Mrówka (Microwave)" #~ msgstr "Marcel Mrówka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Sabri Ünal" #~ msgstr "Sabri Ünal" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "camegone" #~ msgstr "camegone" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "Constructing Flatpak instance..." #~ msgstr "Construindo instância de Flatpak..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "Reutilizando última instância de Flatpak..." #~ msgid "Flathub is not registered on this system" #~ msgstr "Flathub não está registrado neste sistema" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "Você gostaria de adicionar o repositório do Flathub? Se recusar, a página " #~ "do Flathub não estará disponível. Você pode alterar isso depois." #~ msgid "Add Flathub" #~ msgstr "Adicionar Flathub" #, c-format #~ msgid "Identifying installed entries..." #~ msgstr "Identificando entradas instaladas..." #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "Iniciando a obtenção de entradas remotas, consultando %d lista(s) de " #~ "bloqueio..." #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d de %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "Aguardando tarefas de indexação em segundo plano..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "Inicialização completada em %0.2f segundos" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "O Bazaar não recebeu uma configuração de conteúdo recomendado. Contate os " #~ "canais de suporte do seu sistema operacional para receber assistência." #~ msgid "Graphics" #~ msgstr "Gráficos" #~ msgctxt "Project URL Type" #~ msgid "Homepage" #~ msgstr "Página Inicial" #~ msgid "This flatpak is verified by the original developers of the software." #~ msgstr "" #~ "Este flatpak foi verificado pelos desenvolvedores originais do software." #~ msgid "Excludes shared components" #~ msgstr "Exclui componentes compartilhados" #~ msgid "Source code may not be available" #~ msgstr "O código-fonte pode não estar disponível" #~ msgid "Click for details" #~ msgstr "Clique para mais detalhes" #~ msgid "Repositories" #~ msgstr "Repositórios" #~ msgid "Open in browser" #~ msgstr "Abrir no navegador" #, c-format #~ msgid "%'d Monthly Downloads" #~ msgstr "%'d Downloads Mensais" #~ msgid "%B %-d" #~ msgstr "%-d de %B" #~ msgid "Run this application" #~ msgstr "Executar este aplicativo" #~ msgid "Run" #~ msgstr "Executar" #~ msgid "Git Forge Star Counts" #~ msgstr "Contagem de Estrelas de Plataformas Git" #~ msgid "Not having a GitHub access token may trigger rate limits" #~ msgstr "Não ter um token de acesso do GitHub pode acionar limites de taxa" #~ msgid "Show Only Flathub Apps" #~ msgstr "Mostrar Apenas Apps Flathub" #~ msgid "Wait for a brief pause to reduce system load" #~ msgstr "Aguarde uma breve pausa para reduzir a carga do sistema" #~ msgid "Theme" #~ msgstr "Tema" #~ msgid "Pride Rainbow Flag" #~ msgstr "Bandeira do Orgulho Arco-Íris" #~ msgid "Bisexual Flag" #~ msgstr "Bandeira Bissexual" #~ msgid "Asexual Flag" #~ msgstr "Bandeira Assexual" #~ msgid "Share" #~ msgstr "Compartilhar" #~ msgid "Browse" #~ msgstr "Navegar" #~ msgid "Go Back" #~ msgstr "Voltar" #~ msgid "View curated applications" #~ msgstr "Ver aplicativos recomendados" #~ msgid "View the latest on Flathub" #~ msgstr "Ver os últimos do Flathub" #~ msgid "_Quit Service" #~ msgstr "_Sair do Serviço" #~ msgid "Settings & user data will be kept" #~ msgstr "As configurações e os dados do usuário serão mantidos" #~ msgid "Calligraphy application page" #~ msgstr "Página de aplicativo de caligragia" #~ msgid "Download graph for Blender" #~ msgstr "Gráfico de Downloads para o Blender" #~ msgid "Open this image in the default image viewer" #~ msgstr "Abra essa imagem no visualizador de imagens padrão" #~ msgid "Copy this image to the clipboard" #~ msgstr "Copiar para área de transferência" #~ msgid "Apps Of The Week" #~ msgstr "Aplicativos da Semana" #~ msgid "Show Downloads Over Time" #~ msgstr "Mostrar downloads ao longo do tempo" #~ msgid "Remote repo name" #~ msgstr "Nome do repositório remoto" #~ msgid "Downloads Over Time" #~ msgstr "Downloads ao Longo do Tempo" #~ msgid "Minimize Lower Bound" #~ msgstr "Minimizar o Limite Inferior" #~ msgid "Maximize Upper Bound" #~ msgstr "Maximizar o Limite Superior" #~ msgid "Updated Size" #~ msgstr "Tamanho Atualizado" #~ msgid "Freed Space" #~ msgstr "Espaço Liberado" #~ msgid "Halt the execution of transactions" #~ msgstr "Interromper a execução das transações" #~ msgid "Up to date!" #~ msgstr "Já está atualizado!" #~ msgid "Confirm Action" #~ msgstr "Confirmar Ação" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Você está prestes a remover o seguinte Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Você tem certeza?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Você está prestes a instalar o seguinte Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Você tem certeza?" #~ msgid "Resume the execution of transactions" #~ msgstr "Retomar a execução de transações" #~ msgid "Pause the execution of transactions" #~ msgstr "Pausar a execução de transações" #~ msgctxt "Project URL Type" #~ msgid "VCS Browser" #~ msgstr "Navegador" #~ msgid "Full Application View" #~ msgstr "Visualização Completa do Aplicativo" #~ msgid "Change what content is shown when viewing applications" #~ msgstr "Mudar qual conteúdo é mostrado ao visualizar aplicativos" #~ msgid "" #~ "If you do not have an access token, turning this setting on may cause " #~ "GitHub to eventually rate limit you." #~ msgstr "" #~ "Se você não tiver um token de acesso, ativar esta configuração pode fazer " #~ "com que o GitHub eventualmente limite suas requisições." #~ msgid "Type to filter" #~ msgstr "Digite para filtrar" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Excluir resultados com licenças proprietárias" #~ msgid "Advanced" #~ msgstr "Avançado" #~ msgid "Open this link externally" #~ msgstr "Abrir este link externamente" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "" #~ "%'d entradas recebidas de um total de %'d (%0.1f segundos decorridos)" #~ msgid "VCS Forge Star Count" #~ msgstr "Contagem de Estrelas da Plataforma de VCS" #~ msgid "This application does not provide a donation link" #~ msgstr "Este aplicativo não provê um link para doações" #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try looking at their project page for " #~ "more information." #~ msgstr "" #~ "\"%s\" não provê um link para doações. Isso não quer dizer que você não " #~ "possá apoiá-lo! Tente procurar na página do projeto " #~ "para mais informações." #, c-format #~ msgid "" #~ "\"%s\" does not provide a donations link. This does not mean you cannot " #~ "support them! Try finding their project page for more information." #~ msgstr "" #~ "\"%s\" não provê um link para doações. Isso não quer dizer que você não " #~ "possá apoiá-lo! Tente procurar na página do projeto para mais informações." #~ msgid "Removing" #~ msgstr "Removendo" #~ msgid "Show Animated Background" #~ msgstr "Mostrar Plano de Fundo Animado" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Se deseja mostrar ícone de plano de fundo animado na página inicial" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "Mantenha o resumo curto, entre 10 e 35 caracteres" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Janela principal do Bazaar mostrando o Blender" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "O número de downloads dos últimos 30 dias. Clique para ver as " #~ "estatísticas de download deste aplicativo." #~ msgid "How the application looks" #~ msgstr "Como o aplicativo se parece" #~ msgid "Appearance" #~ msgstr "Aparência" #~ msgid "Show animated background" #~ msgstr "Mostrar plano de fundo animado" #~ msgid "Match using regular expressions" #~ msgstr "Corresponder utilizando expressões regulares" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "" #~ "Ocultar filtragem e ordenação usando um efeito de transição crossfade" bazaar-org-bazaar-b6e9a65/po/pt_PT.po000066400000000000000000002564241522167256300174520ustar00rootroot00000000000000# Portuguese translations for bazaar package # Tradução portuguesa (Portugal) para o pacote bazaar. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-01-27 19:32+0000\n" "PO-Revision-Date: 2025-07-15 11:36+0100\n" "Last-Translator: Eduardo Correia (Azenyr)\n" "Language-Team: Portuguese (Portugal)\n" "Language: pt_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" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 #: src/bz-window.blp:233 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Adicionar, remover ou atualizar software flatpak neste computador" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Sistema;GestorDePacotes;Discover;Flatpak;Aplicações;Loja;" #: data/io.github.kolunmi.Bazaar.desktop.in:15 msgid "New Window" msgstr "Nova Janela" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "Descobrir e instalar aplicações" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 #, fuzzy msgid "" "A new app store for Linux with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Uma nova loja de aplicações para Linux com foco em descobrir e instalar " "aplicações e extensões (add-ons) a partir de repositórios Flatpak, " "principalmente do Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 #, fuzzy msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "Prioritiza o suporte aos desenvolvedores que juntos tornam o Linux em " "computadores possível. O Bazaar apresenta a secção \"Recomendadas\" que pode " "ser configurada pelos distribuidores para permitir uma experiência mais " "personalizada." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:706 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 #, fuzzy msgid "The home page displaying Flathub apps" msgstr "A vista inicial a demonstrar apps do Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Nucleus app page" msgstr "Página da app Nucleus" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 #, fuzzy msgid "Search page" msgstr "Página de pesquisa" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Category page" msgstr "Página das categorias" #: src/bz-addons-dialog.blp:14 src/bz-full-view.blp:701 #: src/bz-installed-tile.blp:99 #, fuzzy msgid "Manage Add-ons" msgstr "Gerir Extensões" #: src/bz-addons-dialog.c:90 src/bz-full-view.blp:488 #: src/bz-installed-tile.blp:117 src/bz-transaction-dialog.c:242 #: src/bz-transaction-view.blp:277 msgid "Remove" msgstr "Remover" #: src/bz-addons-dialog.c:95 src/bz-favorites-tile.c:174 #: src/bz-full-view.blp:255 src/bz-full-view.blp:475 #: src/bz-transaction-dialog.c:213 src/bz-transaction-view.blp:225 msgid "Install" msgstr "Instalar" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:726 src/bz-full-view.c:346 src/bz-full-view.c:353 msgid "Age Rating" msgstr "classificação etária" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Violência em desenhos animados" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Sem informação sobre violência em desenhos animados" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Violência em fantasia" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Sem informação sobre violência em fantasia" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Violência realista" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Sem informação sobre violência realista" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Violência que mostre sangue" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Sem informação sobre violência que mostre sangue" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Violência sexual" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Sem informação sobre violência sexual" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Álcool" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Sem informação sobre referências a álcool" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Narcóticos (Drogas)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Sem informação sobre referências a drogas" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tabaco" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Sem informação sobre referências a produtos de tabaco" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Nudez" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Sem informação sobre nudez de qualquer tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Temas sexuais" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Sem informação sobre referências ou representações de temas sexuais" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Linguagem obscena" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Sem informação sobre uso de linguagem obscena de qualquer tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Humor inapropriado" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Sem informação sobre uso de humor inapropriado" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Discriminação" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Sem informação sobre liguagem discriminatória de qualquer tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Publicidades" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Sem informação sobre publicidade de qualquer tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Apostas (Jogos de azar)" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Sem informação sobre apostas ou jogos de azar de qualquer tipo" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Compras" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Sem informação sobre a possibilidade de gastar dinheiro" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Conversas entre utilizadores" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "" "Sem informação sobre a possibilidade de conversar com outros utilizadores" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Conversas por áudio entre utilizadores" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Sem informação sobre conversas por áudio entre utilizadores" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 #, fuzzy msgid "Contact Details" msgstr "Detalhes de contacto" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Sem informação sobre a partilha social de nomes de utilizador ou emails" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Informação pessoal identificável" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Sem informação sobre a partilha de informação pessoal com terceiros" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Partilha de localização" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Sem informação sobre a possibilidade de partilhar a localização física com " "outros utilizadores" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Prostituição" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Sem informação sobre referências a prostituição" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Adultério" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Sem informação sobre referências a adultério" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Conteúdos sexualizados" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Sem informação sobre referências a conteúdos sexualizados" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 #, fuzzy msgid "Desecration" msgstr "Profanação" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Sem informação sobre referências a profanação" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Visibilidade de restos humanos" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Sem informação sobre restos humanos visíveis" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Escravidão" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Sem informação sobre referências a escravidão" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Não inclui referências a uso de drogas" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Não inclui liguagem palavrões, asneiras, ou qualquer outro tipo de liguagem " "obscena" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Não inclui publicidade ou transações monetárias" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Não inclui sexo nem nudez" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Não inclui capacidade de conversas por chat sem controlo" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Não inclui violência" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Drogas" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Linguagem obscena" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Dinheiro" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Social" #: src/bz-age-rating-dialog.c:479 #, fuzzy msgid "Violence" msgstr "Violência" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:676 src/bz-full-view.c:336 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:701 msgctxt "Age rating" msgid "All" msgstr "Todas as idades" #: src/bz-age-rating-dialog.c:737 #, c-format msgid "%s has an unknown age rating" msgstr "%s tem uma classificação etária desconhecida" #: src/bz-age-rating-dialog.c:743 #, c-format msgid "%s is suitable for everyone" msgstr "%s é apropriado para todas as idades" #: src/bz-age-rating-dialog.c:746 #, c-format msgid "%s is suitable for young children" msgstr "%s é apropriado para crianças pequenas" #: src/bz-age-rating-dialog.c:749 #, c-format msgid "%s is suitable for children" msgstr "%s é apropriado para crianças" #: src/bz-age-rating-dialog.c:752 #, fuzzy, c-format msgid "%s is suitable for teenagers" msgstr "%s é apropriado para adolescentes" #: src/bz-age-rating-dialog.c:755 #, fuzzy, c-format msgid "%s is suitable for adults" msgstr "%s é apropriado para adultos" #: src/bz-age-rating-dialog.c:758 #, fuzzy, c-format msgid "%s is suitable for %s" msgstr "%s é apropriado para %s" #: src/bz-age-rating-dialog.c:852 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-all-apps-page.blp:13 src/bz-apps-page.blp:14 src/bz-full-view.blp:43 #: src/bz-user-data-page.blp:15 src/bz-window.blp:483 msgid "Main Menu" msgstr "Menu Principal" #: src/bz-all-apps-page.blp:17 src/bz-apps-page.blp:17 #: src/bz-user-data-page.blp:18 src/bz-window.blp:556 msgid "_Donate to Bazaar ❤️" msgstr "_Efetuar uma doação para o Bazaar ❤️" #: src/bz-all-apps-page.blp:18 src/bz-apps-page.blp:18 #: src/bz-user-data-page.blp:19 #, fuzzy msgid "_Refresh Content" msgstr "_Recarregar conteúdo" #: src/bz-all-apps-page.blp:22 src/bz-apps-page.blp:22 #: src/bz-user-data-page.blp:22 src/bz-window.blp:563 #, fuzzy msgid "_Preferences" msgstr "_Definições" #: src/bz-all-apps-page.blp:23 src/bz-apps-page.blp:23 #: src/bz-user-data-page.blp:23 src/bz-window.blp:584 msgid "_Keyboard Shortcuts" msgstr "_Atalhos de teclado" #: src/bz-all-apps-page.blp:24 src/bz-apps-page.blp:24 #: src/bz-user-data-page.blp:24 src/bz-window.blp:589 msgid "_About Bazaar" msgstr "_Acerca do bazaar" #: src/bz-all-apps-page.blp:28 src/bz-apps-page.blp:28 #: src/bz-user-data-page.blp:27 src/bz-window.blp:596 #, fuzzy msgid "_Quit Bazaar" msgstr "_Sair do bazaar" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Pasta do sistema %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Subpasta pessoal %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Pastas do sistema principal" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Definições do sistema principal provenientes de /etc" #: src/bz-app-permissions.c:169 #, fuzzy, c-format msgid "Desktop subfolder %s" msgstr "Subpasta do ambiente de trabalho %s" #: src/bz-app-permissions.c:170 #, fuzzy msgid "Desktop folder" msgstr "Pasta do computador" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Subpasta documentos %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Pasta documentos" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Subpasta música %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Pasta música" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Subpasta imagens %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Pasta imagens" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Subpasta partilha %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Pasta partilha" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Subpasta vídeos %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Pasta vídeos" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Subpasta templates %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Pasta templates" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Subpasta cache do utilizador %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Pasta cache do utilizador" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Subpasta das definições do utilizador %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Pasta das definições do utilizador" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Subpasta dos dados do utilizador %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Pasta dos dados do utilizador" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Subpasta runtime do utilizador %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Pasta runtime do utilizador" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Acesso ao sistema de ficheiros para %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Caminho de localização desconhecido" #: src/bz-app-size-dialog.blp:29 src/bz-app-size-dialog.blp:55 #, fuzzy msgid "Download Size" msgstr "Tamanho da transferência" #: src/bz-app-size-dialog.blp:56 msgid "Amount to download from the internet" msgstr "Tamanho para transferência da internet" #: src/bz-app-size-dialog.blp:76 #, fuzzy msgid "Installed Size" msgstr "Tamanho da instalação" #: src/bz-app-size-dialog.blp:77 msgid "Size on Disk" msgstr "Tamanho no disco" #: src/bz-app-size-dialog.blp:99 #, fuzzy msgid "User Data Size" msgstr "Dados de utilizador" #: src/bz-app-size-dialog.blp:100 msgid "Caches, settings, and other app data" msgstr "Ficheiros temporários, definições e outros dados da app" #. Translators: As in 'The app is installed'. #. Translators: . #: src/bz-app-tile.blp:86 src/bz-full-view.c:295 src/bz-installed-page.blp:86 #: src/bz-window.blp:299 msgid "Installed" msgstr "Instalado" #: src/bz-apps-page.blp:110 msgid "Show All" msgstr "Mostrar tudo" #: src/bz-apps-page.c:243 #, fuzzy, c-format msgid "All \"%s\"" msgstr "Todas de \"%s\"" #: src/bz-apps-page.c:530 src/bz-tag-list.c:109 #, fuzzy, c-format msgid "%d Applications" msgstr "%d aplicações" #: src/bz-application.c:677 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:678 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:709 msgid "translator-credits" msgstr "" #: src/bz-application.c:720 msgid "Special Thanks" msgstr "Agradecimentos especiais" #: src/bz-application.c:778 msgid "Logged Out Successfully!" msgstr "Sessão terminada com sucesso!" #: src/bz-application.c:906 msgid "Performing setup..." msgstr "A configurar..." #: src/bz-application.c:985 src/bz-application.c:994 #, fuzzy msgid "Set Up Flathub" msgstr "Adicionar o Flathub" #: src/bz-application.c:988 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "O Flathub não está configurado neste sistema. Pode ainda assim navegar e " "instalar apps no Bazaar.\n" "\n" "Pode mesmo assim utilizar o Bazzar para navegar e remover apps já instaladas." #: src/bz-application.c:993 src/bz-window.c:875 msgid "Later" msgstr "Mais tarde" #: src/bz-application.c:1393 src/bz-application.c:3072 msgid "Synchronizing..." msgstr "A sincronizar..." #: src/bz-application.c:1534 src/bz-application.c:3068 #, fuzzy, c-format msgid "Receiving %d entries..." msgstr "A receber %d itens..." #: src/bz-application.c:1539 #, fuzzy msgid "Checking for updates" msgstr "A procurar atualizações..." #: src/bz-application.c:3074 msgid "Indexing Data..." msgstr "A indexar dados..." #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:75 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:53 #: src/bz-installed-page.blp:63 src/bz-user-data-page.blp:52 #: src/bz-window.blp:183 msgid "Empty" msgstr "Vazio" #: src/bz-curated-view.blp:15 #, fuzzy msgid "No Curation" msgstr "Sem Aplicações Recomendadas" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "De momento, não existe sistema de recomendações configurado neste sistema. " "Pode mesmo assim navegar e instalar aplicações na tab Flathub." #: src/bz-curated-view.blp:18 #, fuzzy msgid "Browse Flathub" msgstr "Navegar pelo Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Sem Ligação (Offline)" #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 msgid "Browser" msgstr "Explorador" #: src/bz-developer-badge.c:131 msgid "Developer information not available." msgstr "Informações de desenvolvedor não disponíveis." #: src/bz-developer-badge.c:137 src/bz-developer-badge.c:151 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "A propriedade do ID da app %s não foi verificada pelo que poderá ser uma " "aplicação da comunidade." #: src/bz-developer-badge.c:155 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "A propriedade do ID da app %s foi verificada manualmente pela equipa do " "Flathub." #: src/bz-developer-badge.c:161 #, fuzzy, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "A propriedade do ID da app %s foi verificada por %s em %s" #: src/bz-developer-badge.c:168 #, fuzzy, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "A propriedade do ID da app %s foi verificada usando %s" #: src/bz-developer-badge.c:172 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "A propriedade do ID da app %s foi verificado." #: src/bz-entry-group-util.c:73 #, fuzzy msgid "Choose an Installation" msgstr "Escolha uma instalação" #: src/bz-entry-group-util.c:76 #, fuzzy msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Parece que tem múltiplas versões desta app instaladas. Com qual delas " "gostaria de continuar? " #: src/bz-entry-group-util.c:80 src/bz-transaction-dialog.c:212 #: src/bz-transaction-dialog.c:241 src/bz-transaction-dialog.c:286 #: src/bz-transaction-dialog.c:595 msgid "Cancel" msgstr "Cancelar" #: src/bz-entry-selection-row.blp:17 msgid "For this user only" msgstr "Apenas para este utilizador" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "este utilizador" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "todos os utilizadores" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Ocorreu Um Erro" #: src/bz-error.c:89 msgid "Close" msgstr "Fechar" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Copiar e Fechar" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Entre com a conta Flathub para gerir os seus favoritos" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Entrar" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Contagem de favoritos" #: src/bz-favorites-tile.c:172 #, fuzzy msgid "Uninstall" msgstr "Desinstalar" #: src/bz-favorites-tile.blp:70 src/bz-installed-tile.blp:75 #, fuzzy msgid "Support this application" msgstr "Apoiar esta aplicação" #: src/bz-favorites-tile.blp:119 msgid "Remove from Favorites" msgstr "Remover dos favoritos" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:85 #: src/bz-window.blp:614 msgid "Favorites" msgstr "Favoritos" #: src/bz-favorites-page.blp:22 src/bz-full-view.blp:20 src/bz-window.blp:126 #: src/bz-window.blp:460 msgid "Toggle transaction sidebar" msgstr "Alternar a barra lateral de transações" #: src/bz-favorites-page.blp:46 src/bz-transaction-dialog.c:596 #, fuzzy msgid "Install All" msgstr "Instalar" #: src/bz-favorites-page.blp:63 src/bz-user-data-page.blp:41 msgid "Loading" msgstr "A carregar" #: src/bz-favorites-page.blp:78 msgid "No Favorites" msgstr "Sem favoritos" #: src/bz-favorites-page.blp:79 msgid "Applications you mark as favorite will appear here" msgstr "Aplicações que marque como favoritas irão aparecer aqui" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Anterior" #: src/bz-featured-carousel.blp:53 msgid "Next" msgstr "Seguinte" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "App do Dia" #: src/bz-flathub-category.c:89 #, fuzzy msgid "Editing" msgstr "Edição" #: src/bz-flathub-category.c:90 msgid "Midi" msgstr "MIDI" #: src/bz-flathub-category.c:91 msgid "Mixer" msgstr "Mixagem" #: src/bz-flathub-category.c:92 msgid "Music" msgstr "Música" #: src/bz-flathub-category.c:93 #, fuzzy msgid "Player" msgstr "Jogar" #: src/bz-flathub-category.c:94 msgid "Recorder" msgstr "Gravador" #: src/bz-flathub-category.c:95 #, fuzzy msgid "Sequencer" msgstr "Sequenciador" #: src/bz-flathub-category.c:96 msgid "Tuner" msgstr "Sintetizador" #: src/bz-flathub-category.c:97 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:102 #, fuzzy msgid "Emulation" msgstr "Emulação" #: src/bz-flathub-category.c:103 #, fuzzy msgid "Action" msgstr "Ação" #: src/bz-flathub-category.c:104 msgid "Adventure" msgstr "Aventura" #: src/bz-flathub-category.c:105 msgid "Arcade" msgstr "Arcada" #: src/bz-flathub-category.c:106 msgid "Blocks" msgstr "Blocos" #: src/bz-flathub-category.c:107 msgid "Board" msgstr "Tabuleiro" #: src/bz-flathub-category.c:108 msgid "Card" msgstr "Cartas" #: src/bz-flathub-category.c:109 msgid "Kids" msgstr "Crianças" #: src/bz-flathub-category.c:110 msgid "Logic" msgstr "Lógica" #: src/bz-flathub-category.c:111 msgid "Role Playing" msgstr "Atuação (Role Playing)" #: src/bz-flathub-category.c:112 msgid "Shooter" msgstr "Tiros" #: src/bz-flathub-category.c:113 #, fuzzy msgid "Simulation" msgstr "Simulação" #: src/bz-flathub-category.c:114 #, fuzzy msgid "Sports" msgstr "Desporto" #: src/bz-flathub-category.c:115 msgid "Strategy" msgstr "Estratégia" #: src/bz-flathub-category.c:120 msgid "Audio & Video" msgstr "Áudio e Vídeo" #: src/bz-flathub-category.c:120 msgid "Media" msgstr "Multimédia" #: src/bz-flathub-category.c:120 msgid "More Audio & Video" msgstr "Ver mais áudio e vídeo" #: src/bz-flathub-category.c:121 msgid "Developer Tools" msgstr "Ferramentas para desenvolvedores" #: src/bz-flathub-category.c:121 msgid "Develop" msgstr "Desenvolver" #: src/bz-flathub-category.c:121 msgid "More Developer Tools" msgstr "Ver mais ferramentas para desenvolvedores" #: src/bz-flathub-category.c:122 msgid "Education" msgstr "Educação" #: src/bz-flathub-category.c:122 msgid "Learn" msgstr "Aprender" #: src/bz-flathub-category.c:122 #, fuzzy msgid "More Education" msgstr "Ver mais educação" #: src/bz-flathub-category.c:123 msgid "Gaming" msgstr "Jogos" #: src/bz-flathub-category.c:123 msgid "Play" msgstr "Jogar" #: src/bz-flathub-category.c:123 #, fuzzy msgid "More Gaming" msgstr "Ver mais jogos" #: src/bz-flathub-category.c:124 msgid "Graphics & Photography" msgstr "Gráficos e fotografia" #: src/bz-flathub-category.c:124 msgid "Create" msgstr "Criar" #: src/bz-flathub-category.c:124 msgid "More Graphics & Photography" msgstr "Ver mais gráficos e fotografia" #: src/bz-flathub-category.c:125 msgid "Networking" msgstr "Redes e comunicações" #: src/bz-flathub-category.c:125 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:125 msgid "More Networking" msgstr "Ver mais redes e comunicações" #: src/bz-flathub-category.c:126 msgid "Productivity" msgstr "Produtividade" #: src/bz-flathub-category.c:126 msgid "Work" msgstr "Trabalhar" #: src/bz-flathub-category.c:126 msgid "More Productivity" msgstr "Ver mais produtividade" #: src/bz-flathub-category.c:127 msgid "Science" msgstr "Ciência" #: src/bz-flathub-category.c:127 #, fuzzy msgid "More Science" msgstr "Ver mais ciência" #: src/bz-flathub-category.c:128 msgid "System" msgstr "Sistema" #: src/bz-flathub-category.c:128 msgid "More System" msgstr "Mais sistema" #: src/bz-flathub-category.c:129 msgid "Utilities" msgstr "Utilitários" #: src/bz-flathub-category.c:129 msgid "Tools" msgstr "Ferramentas" #: src/bz-flathub-category.c:129 #, fuzzy msgid "More Utilities" msgstr "Ver mais utilitários" #: src/bz-flathub-category.c:130 src/bz-flathub-page.blp:119 #: src/bz-flathub-page.blp:152 msgid "Trending" msgstr "Tendências" #: src/bz-flathub-category.c:130 #, fuzzy msgid "More Trending" msgstr "Mais tendências" #: src/bz-flathub-category.c:131 src/bz-flathub-page.blp:125 #: src/bz-flathub-page.blp:185 msgid "Popular" msgstr "Populares" #: src/bz-flathub-category.c:131 #, fuzzy msgid "More Popular" msgstr "Mais Populares" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:174 msgid "Recently Added" msgstr "Adicionadas Recentemente" #: src/bz-flathub-category.c:132 src/bz-flathub-page.blp:131 msgid "New" msgstr "Novas" #: src/bz-flathub-category.c:132 #, fuzzy msgid "More New" msgstr "Ver mais adicionadas recentemente" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:163 msgid "Recently Updated" msgstr "Atualizadas Recentemente" #: src/bz-flathub-category.c:133 src/bz-flathub-page.blp:137 #, fuzzy msgid "Updated" msgstr "Atualizadas" #: src/bz-flathub-category.c:133 #, fuzzy msgid "More Updated" msgstr "Ver mais atualizadas recentemente" #: src/bz-flathub-category.c:134 msgid "Mobile" msgstr "Mobile" #: src/bz-flathub-category.c:134 #, fuzzy msgid "More Mobile" msgstr "Ver mais mobile" #: src/bz-flathub-category.c:135 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:135 #, fuzzy msgid "More Adwaita" msgstr "Ver mais adwaita" #: src/bz-flathub-category.c:136 msgid "KDE Apps" msgstr "Apps KDE" #: src/bz-flathub-category.c:136 #, fuzzy msgid "More KDE Apps" msgstr "Ver mais apps KDE" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "O repositório Flathub não foi adicionado" #: src/bz-flathub-page.blp:24 #, fuzzy msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "" "O repositório Flathub não foi encontrado em nenhuma das suas instalações " "Flatpak" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "O Flathub devolveu um erro" #: src/bz-flathub-page.blp:41 #, fuzzy msgid "Retry Flathub Connection" msgstr "Tentar novamente a conexão com o Flathub" #: src/bz-flathub-page.blp:57 #, fuzzy msgid "Flathub Unavailable" msgstr "Flathub não disponível" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "Não foi possível conectar com o Flathub. Pode ainda assim gerir e pesquisar " "por aplicações." #: src/bz-flathub-page.blp:61 #, fuzzy msgid "Search Apps" msgstr "Pesquisar aplicações" #: src/bz-flathub-page.blp:270 #, fuzzy msgid "On the Go" msgstr "Fora de casa" #: src/bz-flathub-page.blp:282 msgid "Apps for your Linux phones and tablets" msgstr "Apps para o seu telemóvel e tablet Linux" #: src/bz-flathub-page.blp:293 src/bz-flathub-page.blp:328 #, fuzzy msgid "More Mobile Apps" msgstr "Mais apps mobile" #: src/bz-flathub-page.blp:388 msgid "We​ ♥​ Games" msgstr "Todos ♥ Jogos" #: src/bz-flathub-page.blp:401 msgid "Games and apps to run your favorite titles" msgstr "Jogos e apps para gerir e correr os seus jogos favoritos" #: src/bz-flathub-page.blp:435 #, fuzzy msgid "More Games" msgstr "Ver mais jogos" #: src/bz-full-view.blp:57 src/bz-installed-page.blp:74 #: src/bz-installed-page.blp:78 msgid "No Results" msgstr "Sem Resultados" #: src/bz-full-view.blp:58 msgid "Try a different search query" msgstr "Tente termos de pesquisa diferentes" #: src/bz-full-view.blp:64 src/bz-window.blp:193 msgid "Content" msgstr "Conteúdo" #: src/bz-full-view.blp:123 msgid "Installing .flatpak bundles is not yet supported" msgstr "A instalação de pacotes .flatpak ainda não é suportada." #: src/bz-full-view.blp:216 msgid "Support" msgstr "Apoiar" #: src/bz-full-view.blp:239 src/bz-full-view.blp:499 msgid "Open" msgstr "Abrir" #: src/bz-full-view.blp:252 src/bz-full-view.blp:472 #, fuzzy msgid "Download & Install Application" msgstr "Transferir e instalar a aplicação" #: src/bz-full-view.blp:267 #, fuzzy msgid "Uninstall Application" msgstr "Desinstalar a aplicação" #: src/bz-full-view.blp:282 src/bz-full-view.blp:514 msgid "Install Other Version" msgstr "Instalar outra versão" #: src/bz-full-view.blp:436 #, fuzzy msgid "Downloads/Month" msgstr "Transferências/Mês" #: src/bz-full-view.blp:533 msgid "Stopped Receiving Core Updates" msgstr "Deixou de receber atualizações base" #: src/bz-full-view.blp:547 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Esta app usa um runtime (serviço de execução) que já não está a receber " "atualizações nem correções de segurança. Pode tornar-se perigoso a usar no " "futuro." #: src/bz-full-view.blp:636 #, fuzzy msgid "Trash Data" msgstr "Dados de utilizador" #: src/bz-full-view.blp:776 msgid "Tags:" msgstr "Etiquetas:" #: src/bz-full-view.c:235 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:242 #, c-format msgid "%.*fM" msgstr "%.*f M" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:249 #, c-format msgid "%.*fK" msgstr "%.*f mil" #: src/bz-full-view.c:259 #, c-format msgid "%d downloads in the last 30 days" msgstr "%d transferências nos últimos 30 dias" #: src/bz-full-view.c:271 src/bz-full-view.c:605 src/bz-full-view.c:622 msgid "N/A" msgstr "N/A" #. Translators: . #: src/bz-full-view.c:295 #, fuzzy msgid "Download" msgstr "Transferir" #: src/bz-full-view.c:315 #, fuzzy msgid "Size information unavailable" msgstr "Classificação etária não disponível" #: src/bz-full-view.c:318 #, fuzzy, c-format msgid "Download size of %s" msgstr "%s de tamanho da transferência" #: src/bz-full-view.c:351 msgid "All Ages" msgstr "Todas as idades" #: src/bz-full-view.c:363 msgid "Age rating information unavailable" msgstr "Classificação etária não disponível" #: src/bz-full-view.c:368 msgid "Suitable for all ages" msgstr "Adequado a todas as idades" #: src/bz-full-view.c:370 #, c-format msgid "Suitable for ages %d and up" msgstr "Adequado a %d anos ou acima" #: src/bz-full-view.c:403 src/bz-full-view.c:408 src/bz-full-view.c:436 #: src/bz-full-view.c:447 msgid "Unknown" msgstr "Desconhecido" #: src/bz-full-view.c:413 #, c-format msgid "Free software licensed under %s" msgstr "Software livre licenciado sob %s" #: src/bz-full-view.c:418 #, fuzzy msgid "Free software" msgstr "Software livre" #: src/bz-full-view.c:421 msgid "Proprietary Software" msgstr "Software proprietário" #: src/bz-full-view.c:424 #, c-format msgid "Special License: %s" msgstr "Licença Especial: %s" #: src/bz-full-view.c:441 msgid "Free" msgstr "Livre" #: src/bz-full-view.c:444 src/bz-license-dialog.c:132 msgid "Proprietary" msgstr "Proprietário" #: src/bz-full-view.c:449 src/bz-license-dialog.c:134 msgid "Special License" msgstr "Licença Especial" #: src/bz-full-view.c:469 msgid "Adaptive" msgstr "Adaptável" #: src/bz-full-view.c:469 msgid "Desktop Only" msgstr "Apenas computador" #: src/bz-full-view.c:475 msgid "Works on desktop, tablets, and phones" msgstr "Funciona em computador, tablets e telemóveis" #: src/bz-full-view.c:476 msgid "May not work on mobile devices" msgstr "Poderá não funcionar em telemóveis" #: src/bz-full-view.c:487 msgid "No URL" msgstr "Sem URL" #: src/bz-full-view.c:505 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "Esta aplicação tem uma licença livre de código aberto (FOSS), o que " "significa que o código fonte pode ser auditável para verificações de " "segurança." #: src/bz-full-view.c:506 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "Esta aplicação tem uma licença proprietária, o que significa que o código " "fonte é privado e não pode ser auditável nem verificado por terceiros." #: src/bz-full-view.c:513 #, fuzzy msgid "More Apps" msgstr "Mais apps" #: src/bz-full-view.c:514 #, fuzzy, c-format msgid "More Apps by %s" msgstr "Mais apps de %s" #: src/bz-full-view.c:521 msgid "Other Apps by this Developer" msgstr "Outras apps deste desenvolvedor" #: src/bz-full-view.c:523 src/bz-full-view.c:723 #, c-format msgid "Other Apps by %s" msgstr "Outras apps de %s" #: src/bz-full-view.c:532 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s não está instalado(a), mais ainda tem %s de dados presentes." #: src/bz-full-view.c:612 src/bz-safety-dialog.blp:31 msgid "Safe" msgstr "Seguro" #: src/bz-full-view.c:614 src/bz-full-view.c:616 msgid "Low Risk" msgstr "Baixo Risco" #: src/bz-full-view.c:618 msgid "Medium Risk" msgstr "Médio Risco" #: src/bz-full-view.c:620 msgid "High Risk" msgstr "Alto Risco" #: src/bz-full-view.c:725 msgid "Other Apps" msgstr "Outras apps" #: src/bz-full-view.c:727 #, fuzzy, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d aplicação" msgstr[1] "%d aplicações" #: src/bz-full-view.c:1066 msgid "Show Less" msgstr "Mostrar menos" #: src/bz-full-view.c:1066 #, fuzzy msgid "Show More" msgstr "Mostrar mais" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 #, fuzzy msgid "Hardware Support" msgstr "Suporte de hardware" #: src/bz-hardware-support-dialog.c:62 #, fuzzy msgid "Keyboard support" msgstr "Suporte de teclado" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Requer um teclado" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Recomenda um teclado" #: src/bz-hardware-support-dialog.c:66 #, fuzzy msgid "Supports keyboards" msgstr "Suporta teclados" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Suporte a teclados desconhecido" #: src/bz-hardware-support-dialog.c:69 #, fuzzy msgid "Mouse support" msgstr "Suporte a rato" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Requer um rato ou dispositivo de apontar" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Recomenda um rato ou dispostivo de apontar" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Suporta ratos ou dispostivos de apontar" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Suporte a ratos ou dispostivos de apontar desconhecido" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Suporte a ecrã táctil" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Requer ecrã táctil" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Recomenda ecrã táctil" #: src/bz-hardware-support-dialog.c:80 #, fuzzy msgid "Supports touchscreens" msgstr "Suporta ecrãs tácteis" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Suporte a ecrãs tácteis desconhecido" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Suporte a dispositivos móveis" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Funciona em todos os dispositivos móveis" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Pode não funcionar perfeitamente em alguns dispositivos móveis" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Suporte a computador desktop" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Funciona bem em ecrãs grandes" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s funciona melhor em hardware específico" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s funciona bem na maior parte dos dispositivos" #: src/bz-installed-page.blp:28 #, fuzzy msgid "Search installed apps" msgstr "Ver as aplicações instaladas" #: src/bz-installed-page.blp:67 #, fuzzy msgid "No Apps Found" msgstr "Não foram encontradas aplicações" #: src/bz-installed-page.c:157 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Sem resultados para \"%s\" na lista de apps instaladas" #: src/bz-installed-tile.blp:61 src/bz-rich-app-tile.blp:136 #, fuzzy msgid "Stopped Receiving Updates" msgstr "A transferir itens" #: src/bz-license-dialog.blp:95 msgid "Get Involved" msgstr "Envolver-se" #: src/bz-license-dialog.c:126 #, fuzzy msgid "Unknown License" msgstr "Licença desconhecida" #: src/bz-license-dialog.c:129 msgid "Community Built" msgstr "Feito pela comunidade" #: src/bz-license-dialog.c:202 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Esta app é desenvolvida em código aberto por uma comunidade internacional de " "desenvolvedores e apoiantes como você.\n" "\n" "Poderá participar e ajudar a tornar esta app ainda melhor." #: src/bz-license-dialog.c:205 msgid "The license of this app is not known" msgstr "A licença desta app não é conhecida" #: src/bz-license-dialog.c:211 #, fuzzy, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Esta app é desenvolvida em código aberto por uma comunidade internacional de " "desenvolvedores e apoiantes como você, e publicada sob a licença %s.\n" "\n" "Poderá participar e ajudar a tornar esta app ainda melhor." #: src/bz-license-dialog.c:219 #, fuzzy msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Esta app não é desenvolvida com o código aberto, pelo que apenas os seus " "desenvolvedores têm acesso à forma como a mesma funciona. Isto pode ser " "inseguro em certas formas difíceis de detectar, e o funcionamento pode mudar " "sem aviso prévio.\n" "\n" "Poderá ou não conseguir contribuir para o desenvolvimento desta app." #: src/bz-license-dialog.c:225 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Esta app foi desenvolvida sub a licença especial %s.\n" "\n" "Poderá ou não conseguir contribuir para o desenvolvimento desta app." #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 #, fuzzy msgid "Connect to Flathub" msgstr "Navegar pelo Flathub" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "Algo correu mal" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "" "Conecte a sua conta Flathub ao Bazaar para gerir as suas apps favoritas." #: src/bz-login-page.blp:108 msgid "Finish" msgstr "Terminar" #: src/bz-login-page.c:663 #, c-format msgid "Hello, %s!" msgstr "Olá, %s!" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Definições" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data sync is paused" msgstr "" "A conexão de internet atual está definida como limitada - a sincronização " "automática de dados da loja foi pausada" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:494 msgid "Sync Manually" msgstr "Sincronizar manualmente" #: src/bz-preferences-dialog.blp:31 #, fuzzy msgid "Content Filters" msgstr "Filtragem de Conteúdo" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Apenas software livre" #: src/bz-preferences-dialog.blp:35 #, fuzzy msgid "Hide proprietary applications when browsing and searching" msgstr "Ocultar software proprietário dos resultados de pesquisa" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Apenas resultados do Flathub" #: src/bz-preferences-dialog.blp:40 #, fuzzy msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "Limitar a pesquisa e navegação apenas a apps disponíveis no Flathub" #: src/bz-preferences-dialog.blp:44 #, fuzzy msgid "Verified Results Only" msgstr "Apenas apps verificadas do Flathub" #: src/bz-preferences-dialog.blp:45 #, fuzzy msgid "Hide results that are not verified on Flathub" msgstr "Excluir da pesquisa resultados que não sejam do Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide EOL Apps" msgstr "Ocultar apps em fim de vida (EOL)" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Ocultar apps que já não estejam a receber suporte dos seus desenvolvedores" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:314 msgid "Search" msgstr "Pesquisar" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "Atrasar resultados de pesquisa" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "" "Melhorar o desempenho da lista de resultados ao atrasar a entrada de texto " "da pesquisa" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "Barra de progresso" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "Escolha um tema para a barra de progresso" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "Riscas Verticais" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "Mostrar as cores das bandeiras da esquerda para a direita" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Cor de destaque" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:28 msgid "Version History" msgstr "Histórico de versões" #: src/bz-releases-list.c:136 #, c-format msgid "Version %s" msgstr "Versão %s" #: src/bz-releases-list.c:173 msgid "No details for this release" msgstr "Sem detalhes sobre esta versão" #: src/bz-releases-list.c:185 #, fuzzy msgid "Get More Information" msgstr "Obter mais informações" #: src/bz-rich-app-tile.blp:153 msgid "Get" msgstr "Obter" #: src/bz-safety-calculator.c:82 #, fuzzy msgid "Unknown Permissions" msgstr "Permissões Desconhecidas" #: src/bz-safety-calculator.c:83 msgid "Permissions are missing for this app." msgstr "As permissões estão em falta para esta app." #: src/bz-safety-calculator.c:96 #, fuzzy msgid "No Permissions" msgstr "Sem Permissões" #: src/bz-safety-calculator.c:97 msgid "App is fully sandboxed" msgstr "A app é completamente sandboxed (isolada do sistema)" #: src/bz-safety-calculator.c:103 msgid "Network Access" msgstr "Acesso à internet" #: src/bz-safety-calculator.c:104 msgid "Can access the internet" msgstr "Pode aceder à internet" #: src/bz-safety-calculator.c:106 msgid "No Network Access" msgstr "Sem acesso à internet" #: src/bz-safety-calculator.c:107 msgid "Cannot access the internet" msgstr "Não pode aceder à internet" #: src/bz-safety-calculator.c:112 msgid "User Device Access" msgstr "Acesso a dispositivos do utilizador" #: src/bz-safety-calculator.c:113 msgid "Can access devices such as webcams or gaming controllers" msgstr "Pode aceder a dispositivos como câmaras ou comandos de jogos" #: src/bz-safety-calculator.c:115 msgid "No User Device Access" msgstr "Sem acesso a dispositivos do utilizador" #: src/bz-safety-calculator.c:116 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Não pode aceder a dispositivos como câmaras ou comandos de jogos" #: src/bz-safety-calculator.c:121 msgid "Input Device Access" msgstr "Acesso a dispositivos de introdução" #: src/bz-safety-calculator.c:122 msgid "Can access input devices" msgstr "Pode aceder a dispositivos de introdução como rato e teclado" #: src/bz-safety-calculator.c:128 msgid "Microphone Access and Audio Playback" msgstr "Acesso a microfone e reprodução de áudio" #: src/bz-safety-calculator.c:129 msgid "Can listen using microphones and play audio without asking permission" msgstr "Pode aceder a microfones e reproduzir som sem necessitar de permissão" #: src/bz-safety-calculator.c:135 msgid "System Device Access" msgstr "Acesso a dispositivos de sistema" #: src/bz-safety-calculator.c:136 msgid "Can access system devices which require elevated permissions" msgstr "" "Pode aceder a dispositivos de sistema que requeiram permissões elevadas" #: src/bz-safety-calculator.c:142 msgid "Screen Contents Access" msgstr "Acesso ao conteúdo do ecrã" #: src/bz-safety-calculator.c:143 msgid "Can access the contents of the screen or other windows" msgstr "Pode aceder ao conteúdo do ecrã ou de outras janelas" #: src/bz-safety-calculator.c:149 msgid "Legacy Windowing System" msgstr "Sistema de janelas antigo (legacy)" #: src/bz-safety-calculator.c:150 #, fuzzy msgid "Always uses a legacy windowing system (X11)" msgstr "Usa um sistema de janelas antigo (legacy)" #: src/bz-safety-calculator.c:156 #, fuzzy msgid "Arbitrary Permissions" msgstr "Permissões arbitrárias" #: src/bz-safety-calculator.c:157 msgid "Can acquire arbitrary permissions" msgstr "Pode obter permissões arbitrárias" #: src/bz-safety-calculator.c:163 msgid "User Settings" msgstr "Definições do utilizador" #: src/bz-safety-calculator.c:164 msgid "Can access and change user settings" msgstr "Pode aceder e alterar definições do utilizador" #: src/bz-safety-calculator.c:170 msgid "Full File System Read/Write Access" msgstr "Acesso completo de leitura e escrita ao sistema de ficheiros" #: src/bz-safety-calculator.c:171 msgid "Can read and write all data on the file system" msgstr "Pode aceder, alterar ou apagar quaisquer dados no sistema de ficheiros" #: src/bz-safety-calculator.c:178 msgid "Home Folder Read/Write Access" msgstr "Acesso de leitura/escrita à pasta pessoal (Home)" #: src/bz-safety-calculator.c:179 msgid "Can read and write all data in your home directory" msgstr "Pode aceder, alterar ou apagar quaisquer dados na pasta pessoal" #: src/bz-safety-calculator.c:186 msgid "Full File System Read Access" msgstr "Acesso de leitura a todo o sistema" #: src/bz-safety-calculator.c:187 msgid "Can read all data on the file system" msgstr "" "Pode ler e aceder (mas não alterar/apagar) a quaisquer dados em qualquer " "parte do sistema de ficheiros" #: src/bz-safety-calculator.c:195 msgid "Home Folder Read Access" msgstr "Acesso de leitura à pasta pessoal (Home)" #: src/bz-safety-calculator.c:196 msgid "Can read all data in your home directory" msgstr "" "Pode ler e aceder (mas não alterar/apagar) a quaisquer dados na pasta " "pessoal do seu utilizador" #: src/bz-safety-calculator.c:204 msgid "Download Folder Read/Write Access" msgstr "Acesso completo de leitura/escrita à pasta Transferências" #: src/bz-safety-calculator.c:205 msgid "Can read and write all data in your downloads directory" msgstr "" "Pode aceder, alterar ou apagar quaisquer dados na sua pasta Transferências" #: src/bz-safety-calculator.c:215 msgid "Download Folder Read Access" msgstr "Acesso de leitura à pasta Transferências" #: src/bz-safety-calculator.c:216 msgid "Can read all data in your downloads directory" msgstr "" "Pode ler e aceder (mas não alterar/apagar) a quaisquer dados na sua pasta " "Transferências" #: src/bz-safety-calculator.c:229 msgid "Can read and write all data in the directory" msgstr "" "Pode aceder, alterar ou apagar quaisquer dados nesta pasta ou diretório" #: src/bz-safety-calculator.c:243 msgid "Can read all data in the directory" msgstr "" "Pode ler e aceder (mas não alterar/apagar) a quaisquer dados nesta pasta ou " "diretório" #: src/bz-safety-calculator.c:258 msgid "No File System Access" msgstr "Sem acesso completo ao sistema de ficheiros" #: src/bz-safety-calculator.c:259 msgid "Cannot access the file system at all" msgstr "Não pode aceder de todo ao sistema de ficheiros" #: src/bz-safety-calculator.c:266 msgid "Uses System Services" msgstr "Usa serviços de sistema" #: src/bz-safety-calculator.c:267 msgid "Can request data from non-portal system services" msgstr "Pode pedir dados para serviços de sistema fora do portal" #: src/bz-safety-calculator.c:273 msgid "Uses Session Services" msgstr "Usa serviços de sessão" #: src/bz-safety-calculator.c:274 msgid "Can request data from non-portal session services" msgstr "Pode pedir dados para serviços de sessão fora do portal" #: src/bz-safety-calculator.c:322 msgid "No Service Access" msgstr "Sem acesso a serviços" #: src/bz-safety-calculator.c:323 msgid "Cannot access non-portal session or system services at all" msgstr "" "Não pode de todo aceder a serviços fora do portal sejam de sistema ou de " "sessão" #: src/bz-safety-calculator.c:331 #, fuzzy msgid "Verified App Developer" msgstr "" "Este flatpak foi verificado pelos desenvolvedores originais do software." #: src/bz-safety-calculator.c:332 msgid "The developer of this app has been verified to be who they say they are" msgstr "O desenvolvedor desta app foi verificado como sendo quem realmente diz" #: src/bz-safety-calculator.c:341 #, fuzzy msgid "Proprietary Code" msgstr "Código Proprietário" #: src/bz-safety-calculator.c:342 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "O código-fonte não é público, pelo que não pode ser verificado nem testado " "por terceiros e poderá ser inseguro" #: src/bz-safety-calculator.c:352 msgid "Auditable Code" msgstr "Código-fonte auditável" #: src/bz-safety-calculator.c:353 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Este código-fonte é público e pode ser testado e verificado de forma " "independente o que ajuda a verificar se esta app é segura" #: src/bz-safety-calculator.c:493 #, c-format msgid "Use the %s System Service" msgstr "Usa o serviço de sistema %s" #: src/bz-safety-calculator.c:497 #, c-format msgid "Use the %s Session Service" msgstr "Usa o serviço de sessão %s" #: src/bz-safety-calculator.c:501 #, c-format msgid "Use the %s Service" msgstr "Usa o serviço %s" #: src/bz-safety-calculator.c:511 msgid "Can see the non-portal service" msgstr "Pode ver o serviço fora do portal" #: src/bz-safety-calculator.c:513 msgid "Can talk to the non-portal service" msgstr "Pode comunicar com o serviço fora do portal" #: src/bz-safety-calculator.c:515 msgid "Can own the non-portal service" msgstr "Pode ser proprietário do serviço fora do portal" #: src/bz-safety-calculator.c:530 #, fuzzy msgid "Global Menu Integration" msgstr "Integração com o menu global" #: src/bz-safety-calculator.c:531 msgid "Can display its menus in a global menu bar" msgstr "Pode mostrar os seus próprios menus na barra de menu global" #: src/bz-safety-calculator.c:536 msgid "KDE Settings Integration" msgstr "Integração com as definições do KDE" #: src/bz-safety-calculator.c:537 msgid "Can detect when KDE desktop settings change" msgstr "Pode detectar quando definições do KDE são alteradas" #: src/bz-safety-calculator.c:542 msgid "KDE Global Settings" msgstr "Definições globais do KDE" #: src/bz-safety-calculator.c:543 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Pode ler personalizações do KDE como fontes ou tema de cores" #: src/bz-safety-calculator.c:548 #, fuzzy msgid "Secret Storage Service" msgstr "Serviço de armazenamento secreto" #: src/bz-safety-calculator.c:549 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Pode guardar e obter as suas próprias passwords através do chaveiro do sistema" #: src/bz-safety-calculator.c:554 msgid "Desktop Notifications Service" msgstr "Notificações do ambiente de trabalho" #: src/bz-safety-calculator.c:555 msgid "Can send desktop notifications" msgstr "Pode enviar notificações de ambiente de trabalho" #: src/bz-safety-calculator.c:561 msgid "System Tray Integration" msgstr "Integração com a barra de estado" #: src/bz-safety-calculator.c:562 msgid "Can display an icon in the system tray" msgstr "Pode mostrar um ícone na barra de estado" #: src/bz-safety-calculator.c:567 msgid "KDE Connect Integration" msgstr "Integração KDE Connect" #: src/bz-safety-calculator.c:568 msgid "Can interact with devices paired via KDE Connect" msgstr "Pode interagir com dispositivos via KDE Connect" #: src/bz-safety-dialog.blp:7 msgid "Safety" msgstr "Segurança" #: src/bz-safety-dialog.blp:50 msgid "Details" msgstr "Detalhes" #: src/bz-safety-dialog.blp:53 msgid "License" msgstr "Licença" #: src/bz-safety-dialog.blp:63 msgid "App ID" msgstr "ID da app" #: src/bz-safety-dialog.blp:73 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:101 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Esta app usa uma versão de software de desenvolvimento (SDK) desatualizada e " "pode por isso conter problemas ou vulnerabilidades de segurança que nunca " "serão resolvidas." #: src/bz-safety-dialog.c:227 #, c-format msgid "%s is Safe" msgstr "%s é seguro(a)" #: src/bz-safety-dialog.c:232 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s tem permissões inseguras" #: src/bz-safety-dialog.c:237 #, c-format msgid "%s is Probably Safe" msgstr "%s é provavelmente seguro(a)" #: src/bz-safety-dialog.c:242 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s poderá ser inseguro(a)" #: src/bz-safety-dialog.c:247 #, c-format msgid "%s is Unsafe" msgstr "%s é inseguro(a)" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Capturas de ecrã" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Captura anterior" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Captura seguinte" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Copiar imagem" #: src/bz-screenshot-page.blp:147 msgid "Reset View" msgstr "Redefinir vista" #: src/bz-screenshot-page.blp:158 msgid "Zoom Out" msgstr "Afastar o zoom" #: src/bz-screenshot-page.blp:168 msgid "Zoom In" msgstr "Aproximar o zoom" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Carrossel de capturas de ecrã" #: src/bz-screenshots-carousel.blp:103 msgid "Open Screenshot Viewer" msgstr "Abrir o visualizador de capturas de ecrã" #: src/bz-search-widget.blp:57 msgid "Search Apps, Games, Software" msgstr "Procure apps, jogos e software" #: src/bz-search-widget.blp:96 #, fuzzy msgid "Categories Unavailable" msgstr "Categorias não disponíveis" #: src/bz-search-widget.blp:97 msgid "Search for apps using the search bar above." msgstr "Pesquise por apps usando a barra de pesquisa acima." #: src/bz-search-widget.blp:181 #, fuzzy msgid "No Applications Found" msgstr "Não foram encontradas aplicações" #: src/bz-search-widget.c:241 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Sem resultados para \"%s\" no Flathub" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "Copiado!" #: src/bz-share-list.c:116 #, fuzzy msgid "Copy Link" msgstr "Copiar a ligação" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Abrir a ligação" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "Linha do tempo" #: src/bz-stats-dialog.blp:46 #, fuzzy msgid "Installs:" msgstr "Instalações:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Mundo" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:124 #, c-format msgid "%.2fM Total Installs" msgstr "%.2f milhões de instalações totais" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:127 #, c-format msgid "%.2fK Total Installs" msgstr "%.2f mil instalações totais" #: src/bz-stats-dialog.c:129 #, c-format msgid "%'d Total Installs" msgstr "%'d instalações totais" #: src/bz-tag-list.c:96 #, fuzzy msgid "No Results Found" msgstr "Sem Resultados" #: src/bz-tag-list.c:108 #, c-format msgid "Apps Tagged \"%s\"" msgstr "Apps etiquetadas com \"%s\"" #: src/bz-tag-list.c:124 #, fuzzy msgid "Search failed" msgstr "A pesquisa falhou" #: src/bz-transaction-dialog.c:166 msgid "Keep Data" msgstr "Manter dados" #: src/bz-transaction-dialog.c:167 msgid "Allow restoring settings and content" msgstr "Permitir o restauro de definições e conteúdo" #: src/bz-transaction-dialog.c:176 msgid "Delete Data" msgstr "Apagar dados" #: src/bz-transaction-dialog.c:177 msgid "Permanently remove app data to save space" msgstr "Remover permanentemente todos os dados da app para poupar espaço" #: src/bz-transaction-dialog.c:202 #, fuzzy, c-format msgid "Install %s?" msgstr "Instalar %s ?" #: src/bz-transaction-dialog.c:207 #, fuzzy msgid "" "Select which version to install. May install additional shared components" msgstr "Poderá instalar componentes adicionais" #: src/bz-transaction-dialog.c:209 msgid "May install additional shared components" msgstr "Poderá instalar componentes adicionais" #: src/bz-transaction-dialog.c:230 #, fuzzy, c-format msgid "Remove %s?" msgstr "Remover %s ?" #: src/bz-transaction-dialog.c:233 msgid "Select which version to remove." msgstr "Selecione qual versão a remover." #: src/bz-transaction-dialog.c:235 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Não será mais possível usar %s após ser desinstalado(a)." #: src/bz-transaction-dialog.c:258 #, c-format msgid "“%s” is High Risk" msgstr "“%s” é de alto risco" #: src/bz-transaction-dialog.c:262 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Esta app tem acesso completo de leitura e escrita ao sistema, incluindo " "todos os seus ficheiros, históricos, passes guardadas, e muito mais. " "Também tem acesso à internet, pelo que poderá enviar estes e quaisquer dados " "para terceiros.\n" "\n" "Por a app ser proprietária de código fechado, não se pode verificar o que é " "que a mesma faz com estas permissões e estes dados." #: src/bz-transaction-dialog.c:271 #, fuzzy msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Esta app tem acesso completo de leitura e escrita ao sistema, incluindo " "todos os seus ficheiros, históricos, passes guardadas, e muito mais. " "Também tem acesso à internet, pelo que poderá enviar estes e quaisquer dados " "para terceiros.\n" "\n" "Por a app ser proprietária de código fechado, não se pode verificar o que é " "que a mesma faz com estas permissões e estes dados." #: src/bz-transaction-dialog.c:287 #, fuzzy msgid "Install Anyway" msgstr "Instalar mesmo assim" #: src/bz-transaction-dialog.c:566 msgid "All apps are already installed" msgstr "As apps já estão todas instaladas" #: src/bz-transaction-dialog.c:568 msgid "OK" msgstr "OK" #: src/bz-transaction-dialog.c:584 #, fuzzy, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Instalar %s ?" msgstr[1] "Instalar %s ?" #: src/bz-transaction-dialog.c:592 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "Os seguintes itens serão instalados. Componentes partilhados adicionais " "também poderão ser instalados, conforme necessário." #: src/bz-transaction-dialog.c:593 #, c-format msgid "%d addons will be installed." msgstr "%d extensão(ões) será(ão) instalada(s)." #: src/bz-transaction-dialog.c:594 #, fuzzy msgid "Additionally, addons will be installed." msgstr "" "%d serviços de execução (runtimes) e/ou extensões relacionados(as) também " "serão atualizados(as)." #: src/bz-transaction-manager.c:1150 #, c-format msgid "Finished in %.02f seconds" msgstr "Concluído em %.02f segundos" #: src/bz-transaction-view.blp:95 msgid "App Add-on" msgstr "Extras da app" #: src/bz-transaction-view.blp:120 msgid "Runtime" msgstr "Serviço de execução (Runtime)" #: src/bz-transaction-view.blp:146 src/bz-transaction-view.blp:172 #, fuzzy msgid "Install Size" msgstr "Tamanho da instalação" #: src/bz-transaction-view.blp:187 src/bz-transaction-view.blp:238 #: src/bz-transaction-view.blp:264 src/bz-transaction.c:342 msgid "Pending" msgstr "Pendente" #: src/bz-transaction-view.blp:199 msgid "Ongoing" msgstr "Em andamento" #: src/bz-transaction-view.blp:212 msgid "Finished" msgstr "Terminado" #: src/bz-transaction-view.blp:251 msgid "Update" msgstr "Atualizar" #: src/bz-transaction-view.c:135 #, c-format msgid "Transferred %s so far" msgstr "%s transferidos até agora" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Gerir Dados Obsoletos(as)" #: src/bz-user-data-page.blp:55 msgid "No User Data found" msgstr "Não foram encontrados dados de utilizador" #: src/bz-user-data-page.blp:60 msgid "User Data" msgstr "Dados de utilizador" #: src/bz-user-data-tile.c:144 #, fuzzy, c-format msgid "Trashed User Data for %s" msgstr "Removido os dados de utilizador de %s" #: src/bz-user-data-tile.blp:74 #, fuzzy msgid "Trash User Data" msgstr "Dados de utilizador" #: src/bz-window.blp:107 msgid "Tasks" msgstr "Tarefas" #: src/bz-window.blp:163 msgid "Stop Active Tasks" msgstr "Parar as tarefas ativas" #: src/bz-window.blp:171 msgid "Clear History" msgstr "Limpar o histórico de tarefas" #: src/bz-window.blp:187 msgid "No Tasks Yet" msgstr "Ainda sem tarefas" #: src/bz-window.blp:257 #, fuzzy msgid "Refreshing Store Content" msgstr "Recarregar o conteúdo da loja" #: src/bz-window.blp:273 msgid "Curated" msgstr "Recomendadas" #: src/bz-window.blp:286 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:435 msgid "No background tasks!" msgstr "Sem tarefas de fundo!" #: src/bz-window.blp:493 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Tem uma conexão à internet ativa mas está a ver uma versão anterior em cache " "do Flathub" #: src/bz-window.blp:568 #, fuzzy msgid "_Login with Flathub" msgstr "_Entrar com uma conta no Flathub" #: src/bz-window.blp:574 msgid "_Manage Leftover User Data" msgstr "_Gerir dados deixados para trás" #: src/bz-window.blp:579 msgid "_Synchronize Remotes" msgstr "_Sincronizar os repositórios" #: src/bz-window.blp:620 msgid "Log Out" msgstr "Terminar sessão" #: src/bz-window.c:440 #, fuzzy, c-format msgid "%d Update Available" msgid_plural "%d Updates Available" msgstr[0] "%d atualização disponível" msgstr[1] "%d atualizações disponíveis" #: src/bz-window.c:734 msgid "You can't remove Bazaar from Bazaar!" msgstr "Não pode remover o Bazaar pelo Bazaar!" #: src/bz-window.c:871 msgid "Updates Are Available" msgstr "Estão Disponíveis Atualizações" #: src/bz-window.c:872 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "" "As seguintes aplicações têm atualizações disponíveis. Deseja instalá-las " "agora?" #: src/bz-window.c:873 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "Existe(m) %d serviços de execução (runtimes) e/ou extensões com atualizações " "disponíveis. Deseja atualizá-los(as) agora?" #: src/bz-window.c:874 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "" "%d serviços de execução (runtimes) e/ou extensões relacionados(as) também " "serão atualizados(as)." #: src/bz-window.c:876 #, fuzzy msgid "Update Now" msgstr "Atualizar agora" #: src/bz-window.c:1036 src/bz-window.c:1086 msgid "Can't do that right now!" msgstr "Não é possível fazer isso neste momento!" #: src/bz-window.c:1161 msgid "Resume Current Tasks" msgstr "Retomar as tarefas atuais" #: src/bz-window.c:1167 msgid "Pause Current Tasks" msgstr "Pausar as tarefas atuais" #: src/bz-world-map.c:587 #, fuzzy msgid "Downloads" msgstr "Transferir" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Geral" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Abrir a Janela de Pesquisa" #: src/gtk/shortcuts-dialog.blp:14 #, fuzzy msgctxt "shortcut window" msgid "Open Preferences" msgstr "Abrir as definições" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Synchronize Remotes" msgstr "Sincronizar os repositórios" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Alternar o Gestor de Transações" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar os Atalhos" #: src/gtk/shortcuts-dialog.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "Sair" #~ msgid "Hide EOL Entries" #~ msgstr "Ocultar apps em fim de vida (EOL)" #~ msgid "Hide EOL entries and entries depending on them" #~ msgstr "Ocultar apps em fim de vida (EOL) e items que dependam destas" #~ msgid "Only Show Free Software" #~ msgstr "Mostrar apenas software livre" #, fuzzy #~ msgid "Hide proprietary software" #~ msgstr "Ocultar software proprietário" #~ msgid "Show Only Flathub Content" #~ msgstr "Mostrar apenas conteúdo do Flathub" #, fuzzy #~ msgid "Hide applications which do not originate from Flathub" #~ msgstr "Ocultar apps que não sejam do Flathub" #, fuzzy #~ msgid "Show Only Verified Content" #~ msgstr "Mostrar apenas apps verificadas" #~ msgid "Hide applications which are not verified on Flathub" #~ msgstr "Ocultar apps que não estejam verificadas no Flathub" #~ msgid "Debounce Search Inputs" #~ msgstr "Suavizar a entrar de texto na pesquisa" #, fuzzy #~ msgid "Add a delay before searching to prevent instant replies while typing" #~ msgstr "Atrasar a entrada de texto para evitar resultados instantâneos" #~ msgid "Global Progress Bar Theme" #~ msgstr "Tema da barra de progresso global" #~ msgid "Describes the look of the global progress bar" #~ msgstr "Descreve o aspeto da barra de progresso global" #~ msgid "Saved Window Dimensions" #~ msgstr "Guardar dimensões da janela" #~ msgid "The window dimensions to be used by the next Bazaar window" #~ msgstr "As dimensões a serem usadas por novas janelas do Bazaar" #~ msgid "?" #~ msgstr "?" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "" #~ "Esta funcionalidade está atualmente desativada. É recomendado que " #~ "transfira e instale a aplicação Flatseal para gerir as permissões das " #~ "aplicações Flatpak." #~ msgid "Entry Inspector" #~ msgstr "Inspetor de Itens" #~ msgid "Serialize" #~ msgstr "Serializar" #~ msgid "Convert to JSON" #~ msgstr "Converter para JSON" #~ msgid "More Mobile apps" #~ msgstr "Mais apps mobile" #, fuzzy #~ msgctxt "Project URL Type" #~ msgid "Flathub Page" #~ msgstr "Página do Flathub" #, fuzzy #~ msgctxt "Project URL Type" #~ msgid "Project Website" #~ msgstr "Página do Projeto" #~ msgctxt "Project URL Type" #~ msgid "Issue Tracker" #~ msgstr "Issue Tracker" #~ msgctxt "Project URL Type" #~ msgid "FAQ" #~ msgstr "Perguntas Frequentes (FAQ)" #~ msgctxt "Project URL Type" #~ msgid "Help" #~ msgstr "Ajuda" #~ msgctxt "Project URL Type" #~ msgid "Donate" #~ msgstr "Donativos" #~ msgctxt "Project URL Type" #~ msgid "Translate" #~ msgstr "Traduções" #, fuzzy #~ msgctxt "Project URL Type" #~ msgid "Contact" #~ msgstr "Contacto" #~ msgctxt "Project URL Type" #~ msgid "Source Code" #~ msgstr "Código-fonte" #~ msgctxt "Project URL Type" #~ msgid "Contribute" #~ msgstr "Contruibuir" #~ msgid "Size" #~ msgstr "Tamanho" #~ msgid "Bazaar Inspector" #~ msgstr "Inspector do Bazaar" #~ msgid "Background Task Info:" #~ msgstr "Info da tarefa em plano de fundo:" #~ msgid "Enable Global Debug Mode" #~ msgstr "Ligar o Modo de Depuração Global" #~ msgid "Active Blocklists" #~ msgstr "Listas de bloqueio ativas" #~ msgid "Active Curated-Configs" #~ msgstr "Configurações ativas de recomendações de apps" #~ msgid "All Entry Groups" #~ msgstr "Todos os grupos de itens" #~ msgid "Filter..." #~ msgstr "Filtrar..." #~ msgid "Decache and Inspect" #~ msgstr "Retirar da cache e inspeccionar" #~ msgid "No Flatpaks Installed" #~ msgstr "Não Existem Flatpaks Instalados" #~ msgid "Connect with Flathub" #~ msgstr "Conectar com o Flathub" #, fuzzy #~ msgid "Remove User Data" #~ msgstr "Remover os dados de utilizador" #~ msgid "Inspect UI Entry" #~ msgstr "Inspecionar o item de UI" #~ msgid "All Debug Actions" #~ msgstr "Todas as ações de depuração" #, fuzzy #~ msgid "Open Bazaar Inspector" #~ msgstr "Abrir o inspector do Bazaar" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "A funcionalidade de verificar e instalar ficheiros/conjuntos .flatpak " #~ "está a caminho! Enquanto não está disponível, experimente executar o " #~ "comando\n" #~ "\n" #~ "flatpak install --bundle .flatpak\n" #~ "\n" #~ "a partir do terminal." #, c-format #~ msgid "%s: %'u downloads" #~ msgstr "%s: %'u transferências" #~ msgid "Show Git Forge Star Counts" #~ msgstr "Ver o total de estrelas do Git Forge" #~ msgid "" #~ "Whether to attempt to detect and show \"star counts\" for projects in the " #~ "full view" #~ msgstr "" #~ "Tentar detectar e mostrar a contagem de estrelas para projetos na vista " #~ "completa" #~ msgid "Hide proprietary software when searching" #~ msgstr "Ocultar software proprietário ao pesquisar" #~ msgid "Filter search results to only show applications available on Flathub" #~ msgstr "" #~ "Mostrar apenas resultados de pesquisa para aplicações disponíveis no " #~ "Flathub" #~ msgid "Of the size of human DNA" #~ msgstr "Do tamanho do ADN humano" #~ msgid "3 billion base pairs" #~ msgstr "3 mil milhões de pares-base" #~ msgid "Of the Linux Kernel" #~ msgstr "Do Kernel do Linux" #~ msgid "Of the Apollo 11 guidance computer" #~ msgstr "Do computador guia Apollo 11" #~ msgid "Total ROM and RAM" #~ msgstr "Memória ROM e RAM total" #~ msgid "Of the original Super Mario Bros" #~ msgstr "Do Super Mario Bros original" #~ msgid "On the NES" #~ msgstr "Na consola NES" #~ msgid "Of the size of Wikipedia" #~ msgstr "Do tamanho da Wikipedia" #~ msgid "Without any media" #~ msgstr "Sem nenhuma multimédia" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Eduardo Correia (Azenyr)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "Constructing Flatpak instance..." #~ msgstr "A construir a instância Flatpak..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "A reutilizar a última instância Flatpak..." #~ msgid "Flathub is not registered on this system" #~ msgstr "O Flathub não está configurado neste sistema" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "Gostaria de adicionar o repositório Flathub a este sistema? Se recusar, a " #~ "página do Flathub ficará indisponível. Pode alterar esta escolha mais " #~ "tarde." #~ msgid "Add Flathub" #~ msgstr "Adicionar o Flathub" #, c-format #~ msgid "Identifying installed entries..." #~ msgstr "A identificar conteúdo instalado..." #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "" #~ "A iniciar a obtenção de dados dos repositórios enquanto se referencia %d " #~ "lista(s) de bloqueio..." #, c-format #~ msgid "%'d of %'d" #~ msgstr "%'d de %'d" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "" #~ "A esperar que as tarefas de indexação a decorrer de fundo avancem..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "Inicialização terminada em %0.2f segundos" #~ msgid "Repository Star Count" #~ msgstr "Contagem de estrelas do repositório" #, c-format #~ msgid "%.2f M" #~ msgstr "%.2f M" #, c-format #~ msgid "%.2f K" #~ msgstr "%.2f K" #~ msgid "Run this application" #~ msgstr "Executar a aplicação" #~ msgid "Run" #~ msgstr "Executar" #~ msgid "View Store Page" #~ msgstr "Ver a página na loja" #~ msgid "Application Details" #~ msgstr "Detalhes da aplicação" #~ msgid "Display Star Count" #~ msgstr "Mostrar a contagem de estrelas" #~ msgid "Show the star count of an application's source code repository" #~ msgstr "Mostrar o total de estrelas do repositório do código da aplicação" #~ msgid "" #~ "Bazaar can fetch and display the star count from an application's source " #~ "code repository on a remote Git forge. \n" #~ " For projects on GitHub, rate limits may cause them not to appear." #~ msgstr "" #~ "O Bazaar pode obter e mostrar a contagem de estrelas do respetivo " #~ "repositório Git de código fonte de uma aplicação. \n" #~ "Para projetos do Github, poderão ser aplicados limites de pedidos pelo " #~ "mesmo que poderão fazer com que as estrelas deixem de aparecer " #~ "temporariamente." #~ msgctxt "shortcut window" #~ msgid "Refresh" #~ msgstr "Recarregar" #~ msgid "Show Animated Background" #~ msgstr "Mostrar Imagem de Fundo Animada" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "Mostrar o ícone de imagem de fundo animada na página inicial" #~ msgid "Calligraphy application page" #~ msgstr "Página da aplicação Calligraphy" #~ msgid "Download graph for Blender" #~ msgstr "Gráfico de transferências para o Blender" #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "" #~ "Foram recebidos %'d itens de um total de %'d (%0.1f segundos decorridos)" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "" #~ "O Bazaar não tem uma definição para conteúdo recomendado. Contacte os " #~ "canais de suporte do seu sistema operativo para mais ajuda. " #~ msgid "Apps Of The Week" #~ msgstr "Aplicações da Semana" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "" #~ "Número de transferências dos últimos 30 dias. Clique para ver as " #~ "estatísticas desta aplicação." #~ msgid "Remote repo name" #~ msgstr "Nome do repositório remoto" #, c-format #~ msgid "Released %x" #~ msgstr "Lançado a %x" #~ msgid "How the application looks" #~ msgstr "A aparência da aplicação" #~ msgid "Appearance" #~ msgstr "Aparência" #~ msgid "Show animated background" #~ msgstr "Mostrar imagem de fundo animada" #~ msgid "Type to filter" #~ msgstr "Escreva para procurar" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "Excluir da pesquisa resultados com licenças proprietárias" #~ msgid "Advanced" #~ msgstr "Avançado" #~ msgid "Share" #~ msgstr "Partilhar" #~ msgid "Open this link externally" #~ msgstr "Abrir a ligação externamente" #~ msgid "Downloads Over Time" #~ msgstr "Transferências ao Longo do Tempo" #~ msgid "Minimize Lower Bound" #~ msgstr "Minimizar o limite inferior" #~ msgid "Maximize Upper Bound" #~ msgstr "Maximizar o limite superior" #~ msgid "Installing" #~ msgstr "A Instalar" #~ msgid "Removing" #~ msgstr "A Remover" #~ msgid "Transactions Will Appear Here" #~ msgstr "As Transações Irão Aparecer Aqui" #~ msgid "Halt the execution of transactions" #~ msgstr "Interromper a execução das transações" #~ msgid "Clear all finished transactions" #~ msgstr "Limpar as transações finalizadas" #~ msgid "Browse" #~ msgstr "Explorar" #~ msgid "App View" #~ msgstr "Vista de Aplicação" #~ msgid "Go Back" #~ msgstr "Voltar" #~ msgid "View the latest on Flathub" #~ msgstr "Ver as novidades do Flathub" #~ msgid "Up to date!" #~ msgstr "Atualizado!" #~ msgid "Confirm Action" #~ msgstr "Confirmar Ação" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Irá a remover a seguinte aplicação Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Deseja continuar?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "Irá instalar a seguinte aplicação Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Deseja continuar?" #~ msgid "Resume the execution of transactions" #~ msgstr "Retomar a execução das transações" #~ msgid "Pause the execution of transactions" #~ msgstr "Colocar a execução das transações em pausa" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "Mantenha o resumo curto, entre 10 e 35 caracteres" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Janela principal do Bazaar a mostrar o Blender" #~ msgid "Match using regular expressions" #~ msgstr "Corresponder através de expressões regulares" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "" #~ "Ocultar filtragem e ordenação através de um efeito visual de transição " #~ "crossfade" bazaar-org-bazaar-b6e9a65/po/ru.po000066400000000000000000003324701522167256300170460ustar00rootroot00000000000000# Russian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025, 2026 Jill Fiore # Jill Fiore , 2025-2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-03 15:21+0700\n" "PO-Revision-Date: 2026-07-03 15:34+0700\n" "Last-Translator: Jill Fiore \n" "Language-Team: Russian\n" "Language: ru\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: Gtranslator 50.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:47 #: src/bz-window.blp:203 src/bz-window.c:386 src/bz-window.c:387 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "" "Установка, удаление или обновление Flatpak приложений на этом компьютере" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;Система;УправлениеПакетами;Discover;Flatpak;Приложения;Магазин;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Новое окно" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Поиск и установка приложений" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Быстрый и современный магазин приложений для Linux с акцентом на поиске и " "установке Flatpak приложений и дополнений, в частности с Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "" "Добавьте несколько установок в очередь и продолжайте просматривать страницы" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Просто просматривайте разрешения приложений" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "" "Войдите в Flathub для просмотра и управления вашими избранными приложениями" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Поиск приложения напрямую с GNOME Shell" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:787 msgid "The Bazaar Contributors" msgstr "Разработчики Bazaar" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Главная страница, отображающая приложения Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Страница приложения Exhibit" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Страница библиотеки" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Страница поиска" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Страница категорий" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Прекращено получение обновлений" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Удалить" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Установить" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Управление дополнениями" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Нет видимых дополнений" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Ваши параметры фильтра скрывают все известные дополнения. Попробуйте " "изменить их." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Страница дополнений" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "Загрузок в месяц" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Прекращено получение основных обновлений" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Это дополнение использует среду выполнения, которая больше не получает " "обновления или исправления ошибок безопасности. Оно может стать небезопасным " "для использования." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Дополнение к %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 msgid "Show Less" msgstr "Показать меньше" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 src/bz-section-view.blp:72 msgid "Show More" msgstr "Показать больше" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Статистика загрузок" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Возраст" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Мультипликационное насилие" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Нет информации о мультипликационном насилии" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Фэнтезийное насилие" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Нет информации о фэнтезийном насилии" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Реалистичное насилие" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Нет информации о реалистичном насилии" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Кровопролитие" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Нет информации о кровопролитии" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Сексуальное насилие" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Нет информации о сексуальном насилии" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Алкоголь" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Нет информации о упоминании алкоголя" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Наркотики" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Нет информации о упоминании наркотических средств" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Табак" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Нет информации о упоминании табачных изделий" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Нагота" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Нет информации о наготе любого рода" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Сексуальные темы" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "" "Нет информации о упоминании или показе изображений сексуального характера" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Ненормативная лексика" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Нет информации о ненормативной лексике в любом виде" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Неприемлемый юмор" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Нет информации о неприемоемом юморе" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Дискриминация" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Нет информации о дискриминации в любом виде" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Реклама" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Нет информации о рекламе в любом виде" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Азартные игры" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Нет информации о азартных играх в любом виде" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Покупка" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Нет информации о возможности тратить деньги" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Общение между пользователями" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Нет инфорамции о возможностях общаться с другими пользователями" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Аудиочат между пользователями" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Нет информации о возможности разговаривать с другими пользователями" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Контактная информация" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Нет информации о распространении имён пользователей или адресов электронной " "почты" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Идентифицирующая информация" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "" "Нет информации о распространении пользовательских данных с другими лицами" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Распространение местоположения" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "" "Нет информации о распространении физического местоположения с другими " "пользователями" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Проституция" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Нет информации о упоминании проституции" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Прелюбодеяние" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Нет информации о упоминании прелюбодеяния" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Сексуализированные персонажи" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Нет информации о сексуализированных персонажей" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Осквернение" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Нет информации о осквернении" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Останки человека" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Нет информации о видимости останков человека" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Рабство" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Нет информации о упоминании рабства" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Не содержит упоминания наркотических средств" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "" "Не содержит ругательство, ненормативную лексику, и любых видов грубой речи" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Не содержит рекламу или денежные транзакции" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Не содержит секс или наготу" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Не содержит функциональность немодерируемого чата" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Не содержит насилие" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Наркотики" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Грубая речь" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Деньги" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Общение" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Насилие" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Все" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s имеет неизвестное возрастное ограничение" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s предназначено для всех возрастов" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s предназначено для маленьких детей" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s предназначено для детей" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s предназначено для подростков" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s предназначено для взрослых" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s предназначено для %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Системная папка %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Домашняя подпапка %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Системные папки хоста" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Системная конфигурация хоста из /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Подпапка рабочего стола %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Папка рабочего стола" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Подпапка документов %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Папка документов" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Подпапка музыки %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Папка музыки" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Подпапка изображений %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Папка изображений" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Подпапка общего доступа %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Папка общего доступа" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Подпапка с видео %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Папка с видео" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Подпапка шаблонов %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Папка шаблонов" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Подпапка пользовательского кэша %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Папка пользовательского кэша" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Подпапка пользовательской конфигурации %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Папка пользовательской конфигурации" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Подпапка пользовательских данных %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Папка пользовательских данных" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Подпапка пользовательской среды выполнения %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Папка пользовательской среды выполнения" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Доступ к файловой системе в %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Неизвестный путь файловой системы" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Размер скачивания" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Размер установки" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Размер скачивания из интернета" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Размер на диске" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Открыть папку пользовательских данных" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Ваши пользовательские данные" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Кэши, настройки и другие пользовательские данные" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Кэш" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Временно кэшированные данные" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Очистить кэш" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Размер установленной среды выполнения" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Размер скачивания среды выполнения" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "Н/Д" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Размер приложения" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Подтверждено" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Установлено" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:790 msgid "translator-credits" msgstr "Jill Fiore , 2025, 2026" #: src/bz-application.c:800 msgid "Special Thanks" msgstr "Особая благодарность" #: src/bz-application.c:858 msgid "Logged Out Successfully!" msgstr "Выход из аккаунта выполнен успешно!" #: src/bz-application.c:1038 msgid "Ubuntu Troubles!" msgstr "Проблема с Ubuntu!" #: src/bz-application.c:1041 msgid "" "The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version of " "Bazaar, please just use the normal package for now by using\n" "\n" "sudo apt install bazaar\n" "\n" "You can then remove this Flatpak version with\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" msgstr "" "Последние версии Ubuntu имеют неправильные правила безопасности по " "умолчанию, делая установку приложений из Flatpak версии Bazaar " "невозможной, пожалуйста, пока используйте обычный пакет используя\n" "\n" "sudo apt install bazaar\n" "\n" "Затем Вы можете удалить Flatpak версию с\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" #: src/bz-application.c:1047 msgid "Continue Anyway" msgstr "Всё равно продолжить" #: src/bz-application.c:1063 msgid "Performing setup…" msgstr "Выполняется настройка…" #: src/bz-application.c:1155 msgid "Set Up System Flathub?" msgstr "Добавить системный Flathub?" #: src/bz-application.c:1158 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Системный Flathub не был добавлен. Bazaar требует наличия Flathub в " "системной установке Flatpak для поиска и установки приложений.\n" "\n" "Вы по-прежнему можете использовать Bazaar для обзора и удаления уже " "установленных приложений." #: src/bz-application.c:1165 msgid "Set Up Flathub?" msgstr "Добавить Flathub?" #: src/bz-application.c:1168 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub не был добавлен в данную систему. Вы не сможете искать и " "устанавливать приложения в Bazaar пока он недоступен.\n" "\n" "Вы по-прежнему можете использовать Bazaar для обзора и удаления уже " "установленных приложений." #: src/bz-application.c:1174 msgid "Later" msgstr "Позже" #: src/bz-application.c:1175 msgid "Set Up Flathub" msgstr "Добавить Flathub" #: src/bz-application.c:1699 msgid "A backend error occurred" msgstr "Произошла ошибка бэкэнда" #: src/bz-application.c:1899 src/bz-application.c:4114 msgid "Refreshing…" msgstr "Обновление…" #: src/bz-application.c:2063 src/bz-application.c:4112 #, c-format msgid "Loading %d apps…" msgstr "Загрузка %d приложений…" #: src/bz-application.c:2116 msgid "Failed to open file" msgstr "Невозможно открыть файл" #: src/bz-application.c:2237 msgid "An initialization error occurred" msgstr "Произошла ошибка инициализации" #: src/bz-application.c:2631 msgid "Checking for updates…" msgstr "Проверка на наличие обновлений…" #: src/bz-application.c:2687 msgid "Failed to check for updates" msgstr "Невозможно проверить на наличие обновлений" #: src/bz-application.c:3824 msgid "Malformed Link" msgstr "Неверный формат ссылки" #: src/bz-application.c:3825 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "В ссылке, используемой для запуска данного приложения, допущена ошибка в " "написании заглавных букв, и в будущем она может перестать работать.\n" "\n" "Скорее всего это связано с тем, что KRunner отправляет неверные ID приложений" #: src/bz-application.c:3833 msgid "Could not find app" msgstr "Не удалось найти приложение" #: src/bz-application.c:3864 msgid "Failed to load metainfo" msgstr "Не удалось загрузить метаданные" #: src/bz-application.c:4116 msgid "Writing to cache…" msgstr "Запись в кэш…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Показать все" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Все \"%s\"" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d приложений" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Невозможно открыть страницу" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Установка пакета" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Дополнительные зависимости могут занять дополнительное место" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Установка данного приложения может потребовать добавления нового " "репозитория. Другие приложения из этого источника будут отображаться в " "Bazaar.\n" "\n" "Добавляйте данный репозиторий только в том случае, если доверяете ему." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Успешно установлено!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Открыть" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Показать детали приложения" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Уже установлено" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Ошибка установки" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Неизвестный размер установки" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Примерно %s к установке" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Нет специальных разрешений" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f мил." #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f тыс." #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d загрузок за последний месяц" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s среды выполнения" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Скачивание" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Информация о размере недоступна" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Размер скачивания %s" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Для всех" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Информация о возрастном ограничении недоступна" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Предназначено для всех возрастов" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "Предназначено для лиц старше %d лет" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Неизвестно" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Свободное программное обеспечение, лицензированное под %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Cвободное программное обеспечение" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Проприетарное программное обеспечение" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Специальная лицензия: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Cвободное приложение" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Проприетарное" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Специальная лицензия" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Адаптивное" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "Только для ПК" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Работает на настольных компьютерах, планшетах и телефонах" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Может не работать на мобильных устройствах" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Безопасно" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Низкий риск" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Средний риск" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Высокий риск" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Пусто" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Нет курации" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "Отсутствует курируемая информация в данной системе. Вы всё ещё можете искать " "приложения во Flathub" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Открыть Flathub" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Нет интернета" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Браузеры" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Не подтверждено" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Информация о разработчике недоступна." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Право собственности на ID приложения %s не было подтверждено, это приложение " "может быть неофициальным." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Право собственности на ID приложения %s было подтверждено командой Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Право собственности на ID приложения %1$s было подтверждено %2$s на " "%3$s." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "" "Право собственности на ID приложения %1$s было подтверждено используя %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Право собственности на ID приложения %s было подтверждено." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Полные изменения выпуска" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Этот выпуск был сделан благодаря таким пользователям, как Вы!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Мне нравится делать Bazaar, но я не могу это делать в одиночку. Поддержите " "дальнейшую разработку пожертвовав средства в моём Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Поддержать Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "Что нового в %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Выпущено %-e %B, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Выбор установки" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Вы установили несколько версий данного приложения. Какое вы хотите выбрать " "для продолжения?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "Отмена" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Только для этого пользователя" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "этот пользователь" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "все пользователи" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Детали" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Скопировать" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:415 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Скопировано!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Число избранных" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Не удалось добавить в избранные" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Войдите в Flathub для управления избранными приложениями" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Войти" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:348 msgid "Favorites" msgstr "Избранные" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:87 msgid "Install All" msgstr "Установить все" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Загрузка" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Нет избранных" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Приложения помеченные как избранные будут показаны здесь" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Поддержать это приложение" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Удалить из избранных" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Не удалось удалить из избранных" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Предыдущий" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Следующий" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Монтаж" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Микшеры" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Музыка" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Проигрыватели" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Звукозапись" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Секвенсоры" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "Тюнеры" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "ТВ" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Эмуляторы" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Экшен" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Приключения" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Аркады" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Блоки" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Настольные" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Карточные" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Для детей" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Логические" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Ролевые" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Шутеры" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Симуляторы" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Спортивные" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Стратегии" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Браузеры" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Общение" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Почта" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Обмен файлами" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Аудио и видео" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Медиа" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Больше приложений для аудио и видео" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Инструменты разработчика" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Разработчикам" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Больше приложений для разработки" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Образование" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Обучение" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Больше образовательных приложений" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Игры" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Игры" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Больше игр" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Графика и фотография" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Творение" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Больше приложений для графики" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Сеть" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "Сеть" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Больше сетевых приложений" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Продуктивность" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "Работа" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Больше приложений для продуктивности" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Наука" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Больше научных приложений" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Система" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Больше системных приложений" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Утилиты" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Инструменты" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Больше утилит" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "В тренде" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Больше трендовых" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Популярное" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Больше популярных" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Недавно добавленные" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Новое" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Больше новинок" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Недавно обновленные" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Обновлённые" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Больше обновленных" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Мобильные" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Больше мобильных приложений" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Больше Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "KDE приложения" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Больше приложений к KDE" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Игры" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Больше игр" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Эмуляторы" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Больше эмуляторов" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Лаунчеры" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Больше игровых лаунчеров" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Инструменты для игр" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Больше инструментов для игр" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub не добавлен" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Репозиторий Flathub не был найден среди ваших flatpak установок" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub недоступен" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Невозможно подключиться к Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Вы всё ещё можете искать приложения и управлять ими." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Поиск приложений" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Переподключиться" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Приложение дня" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Всегда под рукой" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Приложения для ваших телефонов и планшетов на Linux" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Больше мобильных приложений" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Мы ♥ Игры" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Игры и приложения для запуска ваших любимых тайтлов" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Нет результатов" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Попробуйте выполнить другой поисковый запрос" #: src/bz-full-view.blp:47 msgid "Content" msgstr "Содержимое" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Это локальный предварительный просмотр, некоторые детали могут отличаться от " "опубликованной страницы" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Предварительный просмотр элемента магазина" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Поддержать" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Это приложение использует среду выполнения, которая больше не получает " "обновления или исправления ошибок безопасности. Оно может стать небезопасным " "для использования." #: src/bz-full-view.blp:539 msgid "Trash Data" msgstr "Отправить в корзину" #: src/bz-full-view.blp:602 msgid "Add-ons" msgstr "Дополнения" #: src/bz-full-view.blp:637 msgid "More Add-Ons" msgstr "Больше дополнений" #: src/bz-full-view.blp:648 msgid "Links" msgstr "Ссылки" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Нет URL" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Это приложение имеет лицензию FLOSS, что значит исходный код может быть " "проверен на безопасность." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Это приложение имеет проприетарную лицензию, что значит исходный код " "разрабатывается в тайне и не может быть проверен независимой третьей " "стороной." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Больше приложений" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Больше приложений от %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Другие приложения от этого разработчика" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Другие приложения от %s" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "%s не установлено, но пользовательские данные в размере %s ещё " "присутствуют." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Другие приложения" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d приложение" msgstr[1] "%d приложения" msgstr[2] "%d приложений" #: src/bz-full-view.c:506 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Не удалось удалить пользовательские данные" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Поддержка оборудования" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Поддержка клавиатуры" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Требуется использовать клавиатуру" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Рекомендуется использовать клавиатуру" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Поддерживает клавиатуру" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Неизвестная поддержка клавиатуры" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Поддержка мыши" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Требуется использовать мышь или указательные устройства" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Рекомендуется использовать мышь или указательные устройства" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Поддерживает мышь или указательные устройства" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Неизвестная поддержка мыши и указательных устройств" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Поддержка сенсорного экрана" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Требуется использовать сенсорный экран" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Рекомендуется использовать сенсорный экран" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Поддерживает сенсорные экраны" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Неизвестная поддержка сенсорных экран" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Поддержка мобильных устройств" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Работает на мобильных устройствах" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Может не работать хорошо на мобильных устройствах" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Поддержка настольных компьютеров" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Работает хорошо на больших экранах" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s работает лучше на определённых устройствах" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s работает на большинстве устройств" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Открыть" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Удалить приложение" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Удалить" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Обновить" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Удалить" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "Установить %s от %s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "Установить %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Отмена" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Отменяется" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Кнопка пожертвования" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Поиск установленных приложений" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Очистить поиск" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Приложение не найдено" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Искать в магазине" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:114 msgid "Library" msgstr "Библиотека" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Ожидают обновления" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "Загрузки" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Недавно удалённые" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Очистить выполненные задачи" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Параметры сортировки" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Сортировка" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Название" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Размер" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Нет результатов по запросу \"%s\" в списке установленных приложений" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "Доступно %u обновление" msgstr[1] "Доступно %u обновления" msgstr[2] "Доступно %u обновлений" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u установленное приложение" msgstr[1] "%u установленных приложения" msgstr[2] "%u установленных приложений" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Внести вклад" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Узнать больше" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Неизвестная лицензия" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Сделано сообществом" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Это приложение разрабатывается открыто международным сообществом.\n" "\n" "Вы можете внести свой вклад и сделать это приложение ещё лучше." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Лицензия этого приложения неизвестна" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Это приложение открыто разрабатывается международным сообществом и " "выпускается под лицензией %s.\n" "\n" "Вы можете внести свой вклад и сделать это приложение ещё лучше." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Это приложение не разрабатывается открыто, поэтому только его разработчики " "знают как оно работает. Оно может быть небезопасным в некоторых местах, " "которые сложно опознать, и оно может измениться без предупреждения.\n" "\n" "Вы можете не иметь возможности внести вклад в это приложение." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Это приложение разрабатывается под специальной лицензией %s.\n" "\n" "Вы можете не иметь возможности внести вклад в это приложение." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Лицензия" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Подключение к Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Что-то пошло не так" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "" "Войдите, чтобы синхронизировать избранные приложения между устройствами" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Завершить" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Приветствуем, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Выбрать файл метаданных" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Файлы метаданных" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Выбрать иконку (необязательно)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Файлы изображений" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Предварительный просмотр" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Параметры" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Сетевое соединение ограничено — автоматическое обновление данных магазина " "приостановлена" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:236 src/bz-window.blp:247 msgid "Refresh Manually" msgstr "Обновить вручную" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Фильтры содержимого" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Только свободные приложения" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Скрыть проприетарные приложения при обзоре и поиске" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Только результаты из Flathub" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "Ограничить обзор и результаты поиска только приложениями из Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Только подтверждённые результаты" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Скрыть приложения, которые не являются подтверждёнными на Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Скрыть неподдерживаемые приложения" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Скрыть приложения, которые больше не поддерживаются разработчиками" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Тема полосы прогресса" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Цвет акцента" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Цвета гордости" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Цвета гордости лесбиянок" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Цвета гордости мужчин гомосексуалов" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Цвета гордости трансгендеров" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Цвета гордости небинарных" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Цвета гордости бисексуалов" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Цвета гордости асексуалов" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Цвета гордости пансексуалов" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Цвета гордости аромантиков" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Цвета гордости гендерфлюид" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Цвета гордости полисексуалов" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Цвета гордости омнисексуалов" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Цвета гордости ароэйс" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Цвета гордости агендеров" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Цвета гордости гендерквиров" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Цвета гордости интерсекс" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Цвета гордости демигендеров" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Цвета гордости биромантиков" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Цвета гордости людей с ограниченными возможностями" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Цвета гордости фембоев" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Цвета гордости нейтроис" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "История версий" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_История версий" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Сегодня" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Вчера" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d день назад" msgstr[1] "%d дня назад" msgstr[2] "%d дней назад" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d неделю назад" msgstr[1] "%d недели назад" msgstr[2] "%d недель назад" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d месяц назад" msgstr[1] "%d месяца назад" msgstr[2] "%d месяцев назад" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d год назад" msgstr[1] "%d года назад" msgstr[2] "%d лет назад" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Версия %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Нет подробностей" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Получить дополнительную информацию" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Удалить" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Скачать" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Неизвестные разрешения" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Разрешения для этого приложения отсутствуют." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Нет разрешений" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Приложение полностью изолировано" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Доступ к сети" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Может получить доступ к интернету" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Нет доступа к сети" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Не может получить доступ к интернету" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Доступ к устройствам пользователя" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" "Может получить доступ к таким устройствам, как веб-камеры или игровые " "контроллеры" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Нет доступа к устройствам пользователя" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Не может получить доступ к таким устройствам, как веб-камеры или игровые " "контроллеры" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Доступ к устройствам ввода" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Может получить доступ к устройствам ввода" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Доступ к микрофону и воспроизведение звука" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "Может слышать с помощью микрофона и воспроизводить звук без разрешения" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Доступ к системным устройствам" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Может получить доступ к системным устройствам, требующие повышенные " "разрешения" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Доступ к содержимому экрана" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Может получить доступ к содержимому экрана или других окон" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Устаревшая оконная система" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Использует устаревшую оконную систему постоянно (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "Произвольные разрешения" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Может получить произвольные разрешения" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Пользовательские настройки" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Может получить и изменить пользовательские настройки" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Полный доступ к файловой системе на чтение/запись" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Может читать и записывать все данные в файловой системе" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Доступ к домашней папке для чтения/записи" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Может читать и записывать все данные в вашей домашней папке" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Полный доступ к файловой системе на чтение" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Может читать все данные в файловой системе" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Доступ на чтение домашней папки" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Может читать все данные в вашей домашней папке" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Доступ для чтения/записи в папку загрузки" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Может читать и записывать все данные в вашей папке загрузки" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Доступ на чтение папки загрузки" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Может читать все данные в вашей папке загрузки" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Может читать и записывать все данные в папке" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Может читать все данные в папке" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Нет доступа к файловой системе" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Не может получить доступ к файловой системе" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Использует системные службы" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Может запрашивать данные у системных служб, не относящихся к порталу" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Использует службы сеанса" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Может запрашивать данные у служб сеанса, не относящихся к порталу" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Нет доступа к службе" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "" "Не может получить доступ к службам сеанса или системным, не относящимся к " "порталу" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Подтверждённый разработчик приложения" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "" "Разработчик этого приложения подтвердил, что является тем, за кого себя " "выдает" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Проприетарный код" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Исходный код не является открытым, поэтому не может быть подвергнут " "независимому аудиту и может быть небезопасным" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Проверяемый код" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Исходный код является открытым и может быть подвергнут независимому аудиту, " "что повышает вероятность того, что приложение безопасно" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Использует системную службу %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Использует службу сеанса %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Использует службу %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Может просматривать службу, не относящуюся к порталу" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Может связаться со службой, не относящейся к порталу" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Может быть владельцем службы, не относящейся к порталу" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Интеграция с глобальным меню" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Может показывать своё меню в глобальной полосе меню" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Интеграция с настройками KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Может определять изменение в настройках рабочего стола KDE" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Глобальные параметры KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Может читать параметры рабочего стола KDE как шрифты и цвета" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Служба хранения секретов" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "Может хранить и извлекать свои пароли используя системные ключи" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Служба уведомлений рабочего стола" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Может отправлять уведомления на рабочий стол" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Интеграция с системным треем" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Может отображать иконку в системном треем" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Интеграция с KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Может взаимодействовать с устройстами привязанным к KDE Connect" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Данное приложение имеет разрешение, дающее возможность произвольно давать " "себе любое необходимое разрешение обходя песочницу Flatpak.\n" "\n" "Потому оно может совершать любое действие как нормальное приложение вне " "песочницы, например доступ ко всем Вашим файлам и подключаться к Интернету.\n" "\n" "Просмотр других разрешений может дать понять, что приложение пытается " "сделать." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Посмотреть другие разрешения" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "ID приложения" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Это приложение использует устаревшую версию платформа для разработки (SDK) и " "может иметь баги или уязвимости безопасности которые не были исправлены." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Безопасность" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "%s безопасное" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s имеет небезопасные разрешения" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "%s вероятно безопасное" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s вероятно небезопасное" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "%s небезопасное" #: src/bz-screenshot-page.blp:41 msgid "Back" msgstr "Назад" #: src/bz-screenshot-page.blp:71 msgid "Previous Screenshot" msgstr "Предыдущий скриншот" #: src/bz-screenshot-page.blp:81 msgid "Next Screenshot" msgstr "Следующий скриншот" #: src/bz-screenshot-page.blp:97 msgid "Copy Image" msgstr "Скопировать изображение" #: src/bz-screenshot-page.blp:160 msgid "Reset View" msgstr "Возобновить вид" #: src/bz-screenshot-page.blp:171 msgid "Zoom Out" msgstr "Отдалить" #: src/bz-screenshot-page.blp:181 msgid "Zoom In" msgstr "Приблизить" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Карусель скриншотов" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Нет скриншотов" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Открыть просмотрщик скриншотов" #: src/bz-screenshots-carousel.c:308 #, c-format msgid "Screenshot %u %s" msgstr "Скриншот %u %s" #: src/bz-screenshots-carousel.c:310 #, c-format msgid "Screenshot %u" msgstr "Скриншот %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Фильтры" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Подтвержденные" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Свободные" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "П_оддерживаемые" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Отфильтровать неподдерживаемые приложения" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Для мобильных" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Категории" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Поиск приложений, игр, ПО" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Фильтры поиска" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Очистить поиск" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Обзор категорий" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Категории недоступны" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Попробуйте поискать приложения используя поле ввода запроса выше." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Приложение не найдено" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Нет результатов по запросу \"%s\" в Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Видео" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Офис" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Календарь" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Общение" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Рисование" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Торрент" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Эмуляторы" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Страница Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Веб-сайт проекта" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Отслеживание ошибок" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "Часто задаваемые вопросы" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Помощь" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Пожертвовать" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Перевод" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Связаться" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Исходный код" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Внести вклад" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Манифест" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Скопировать ссылку" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Временная шкала" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Установок:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Карта мира" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "С 15 апреля 2024" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2f миллионов общих установок" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2f тысяч общих установок" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d общих установок" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Нет найденных результатов" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "Ошибка поиска" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Оставить пользовательские данные" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Возможно восстановление настроек и содержимого" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Удалить все данные" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Навсегда удалить данные приложения для сохранения места" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Установить %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Выберите какую версию установить. Может установить дополнительные общие " "компоненты" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Может установить дополнительные общие компоненты" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Отмена" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Установить" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Удалить %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Выберите какую версию удалить." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Станет невозможным использовать %s после его удаления." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "“%s” под высоким риском" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Это приложение имеет полный доступ к вашей системе, включая все ваши " "файлы, историю браузера, сохранённые пароли, и так далее. Оно также " "имеет доступ к интернету, что может означать отправку ваших данных третьим " "лицам.\n" "\n" "Так как это приложение является проприетарным, проверка на действия с такими " "разрешениями является невозможной." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Это приложение использует устаревшую оконную систему X11, которая получает " "доступ к записи всех нажатий клавиш, получению скриншотов и наблюдению " "над другими приложениями. Оно также имеет доступ к интернету, что может " "означать отправку ваших данных третьим лицам.\n" "\n" "Так как это приложение является проприетарным, проверка на действия с такими " "разрешениями является невозможной." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Всё равно установить" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Не удалось загрузить диалог транзакции" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Все приложения уже были установлены" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_ОК" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Установить %u приложение?" msgstr[1] "Установить %u приложения?" msgstr[2] "Установить %u приложений?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Перечисленное будет установлено. Дополнительные общие компоненты будут также " "установлены." #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d дополнений будет установлено." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Также будут установлены дополнения." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Установить все" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Закончено за %.02f секунд" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Дополнение приложения" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Среда выполнения" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "В очереди" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Готово" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "Отменено" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Ошибка" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Отменить транзакцию" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Показать детали" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Показать информацию об ошибке" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s очищено" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Ошибка транзакции" #: src/bz-transaction.c:344 msgid "Pending" msgstr "В ожидании" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Обновить все" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "Обновление %u среды выполнения" msgstr[1] "Обновление %u сред выполнения" msgstr[2] "Обновление %u сред выполнения" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Управление оставшимися пользовательскими данными" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Пользовательские данные не найдены" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Пользовательские данные" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Отправить в корзину" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Пользовательские данные к %s отправлены в корзину" #: src/bz-window.blp:72 msgid "Refreshing" msgstr "Обновление" #: src/bz-window.blp:90 msgid "Curated" msgstr "Курируемое" #: src/bz-window.blp:102 msgid "Explore" msgstr "Обзор" #: src/bz-window.blp:129 msgid "Search" msgstr "Поиск" #: src/bz-window.blp:216 msgid "Main Menu" msgstr "Главное меню" #: src/bz-window.blp:227 msgid "You are running a new version of Bazaar!" msgstr "Вы используете новую версию Bazaar!" #: src/bz-window.blp:228 msgid "See What's New" msgstr "Посмотреть что нового" #: src/bz-window.blp:235 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Вы имеете сетевое подключение, но просматриваете кэшируемую версию Flathub" #: src/bz-window.blp:246 msgid "Network connection is metered — automatic refreshes disabled" msgstr "" "Сетевое соединение ограничено — автоматическое обновление приостановлено" #: src/bz-window.blp:292 msgid "_Donate to Bazaar" msgstr "_Поддержать Bazaar" #: src/bz-window.blp:298 msgid "_Refresh" msgstr "_Обновить" #: src/bz-window.blp:302 msgid "_Login With Flathub" msgstr "_Войти в Flathub" #: src/bz-window.blp:308 msgid "_Manage Leftover User Data" msgstr "_Управлять оставшимися данными" #: src/bz-window.blp:314 msgid "_Preferences" msgstr "П_араметры" #: src/bz-window.blp:319 msgid "_Keyboard Shortcuts" msgstr "_Сочетание клавиш" #: src/bz-window.blp:324 msgid "_About Bazaar" msgstr "О _Bazaar" #: src/bz-window.blp:330 msgid "_Quit Bazaar" msgstr "_Завершить Bazaar" #: src/bz-window.blp:355 msgid "Log Out" msgstr "Выйти" #. Translators: %s is the title of the current page #: src/bz-window.c:389 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:609 src/bz-window.c:647 msgid "Failed to launch application" msgstr "Не удалось запустить приложение" #: src/bz-window.c:860 msgid "You can't remove Bazaar from Bazaar!" msgstr "Вы не можете удалить Bazaar из Bazaar!" #: src/bz-window.c:1166 src/bz-window.c:1200 msgid "Can't do that right now!" msgstr "Невозможно сделать это сейчас!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "установка" msgstr[1] "установки" msgstr[2] "установок" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Навигация" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Открыть страницу обзора" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Открыть страницу библиотеки" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Открыть страницу поиска" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Репозитории" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Синхронизировать репозитории" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Общее" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Открыть параметры" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Открыть сочетания клавиш" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Закрыть окно" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Завершить Bazaar" bazaar-org-bazaar-b6e9a65/po/tr.po000066400000000000000000002637151522167256300170520ustar00rootroot00000000000000# Turkish translation for io.github.kolunmi.Bazaar. # Copyright (C) 2025-2026 io.github.kolunmi.Bazaar's COPYRIGHT HOLDER # This file is distributed under the same license as the io.github.kolunmi.Bazaar package. # # Sabri Ünal , 2025-2026. # msgid "" msgstr "" "Project-Id-Version: io.github.kolunmi.Bazaar master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-01 23:08+0300\n" "PO-Revision-Date: 2026-07-02 22:43+0300\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=1; plural=0;\n" "X-Generator: Poedit 3.9\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:47 #: src/bz-window.blp:203 src/bz-window.c:386 src/bz-window.c:387 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "Bu bilgisayara flatpak yazılımı ekle, kaldır ya da güncelle" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;Sistem;Paket " "Yöneticisi;Keşfet;Yazılımlar;Mağaza;Çarşı;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "Yeni Pencere" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "Uygulamaları keşfet ve kur" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "Özellikle Flathubʼdan Flatpak uygulamalarını ve eklentilerini keşfetmeye ve " "kurmaya odaklanan, Linux için hızlı ve modern uygulama mağazası." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Birden çok kurulumu kuyruklar ve gezinmeye devam et" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Uygulama izinlerini kolayca görüntüle" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Gözdelerinizi görüntülemek ve yönetmek için Flathub ile oturum açın" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Uygulamaları GNOME Shell üstünden ara" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "Bazaar Katkıcıları" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Flathub uygulamalarını görüntüleyen ana görünüm" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Uygulama sergisi sayfası" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Kitaplık sayfası" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Arama sayfası" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Kategori sayfası" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "Güncellemelerin Alınması Durduruldu" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Kaldır" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Kur" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "Eklentileri Yönet" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Görünün Eklenti Yok" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Geçerli süzgeçleriniz, bilinen tüm eklentileri gizliyor. Süzgeç ayarlarını " "düzenleyin." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Eklenti Sayfası" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "İndirme/Ay" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "Çekirdek Güncellemelerinin Alınması Durduruldu" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Bu eklenti, artık güncelleme ya da güvenlik düzeltmesi almayan bir çalışma " "zamanı kullanıyor. Kullanımı güvenli olmayabilir." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "%s Eklentisi" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 msgid "Show Less" msgstr "Daha Az Göster" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:626 src/bz-section-view.blp:71 msgid "Show More" msgstr "Daha Çok Göster" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "İndirme İstatistikleri" # Arayüzde sığmadığı için new line eklendi #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "" "Yaş\n" "Derecelendirmesi" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Çizgi Dizisi Şiddeti" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Çizgi dizisi şiddetiyle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Fantezi Şiddeti" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Fantezi şiddetiyle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Gerçekçi Şiddet" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Gerçekçi şiddetle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Kan Dökülmesini Betimleyen Şiddet" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Kan dökülmesiyle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Cinsel Şiddet" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Cinsel şiddetle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Alkol" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Alkole atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Uyuşturucu" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Yasadışı ilaçlara atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Tütün" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Tütün ürünlerine atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Çıplaklık" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Herhangi biçimde çıplaklıkla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Cinsel Temalar" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Cinsel doğaya atıf ya da betimlemelerle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Sövgü" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Herhangi türde küfürlerle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Uygunsuz Mizah" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Uygunsuz mizahla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Ayrımcılık" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Herhangi türde ayrımcı dille ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Reklam" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Herhangi türde reklamla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Kumar" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Herhangi türde kumarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Satın Alım" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Para harcama yeteneğiyle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Kullanıcılar Arası Sohbet" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Diğer kullanıcılarla sohbet etme yollarıyla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Kullanıcılar Arası Sesli Sohbet" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Diğer kullanıcılarla konuşma yollarıyla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Kişi Ayrıntıları" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Sosyal ağ kullanıcı adlarının ya da e-posta adreslerinin paylaşımıyla ilgili " "bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Tanımlayıcı Bilgiler" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Üçüncü şahıslarla kullanıcı bilgisi paylaşımıyla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Konum Paylaşımı" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Diğer kullanıcılarla fiziksel konum paylaşımıyla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Fuhuş" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Fuhşa atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Zina" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Eş aldatmaya atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Cinselleştirilmiş Karakterler" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Cinselleştirilmiş karakterlerle ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Saygısızlık" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Kutsala saygısızlığa atıflarla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "İnsan Kalıntıları" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Görününür ölü insan kalıntılarıyla ilgili bilgi yok" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Kölelik" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Köleliğe atıflarla ilgili bilgi yok" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Yasadışı ilaçlara atıf içermez" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Küfür, sövgü ve diğer türlerde sert dil içermez" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Reklam ya da parasal işlemler içermez" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Cinsellik ya da çıplaklık içermez" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Denetimsiz sohbet işlevi içermez" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Şiddet içermez" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Uyuşturucu" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Sert Dil" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Para" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Sosyal" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Şiddet" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Tümü" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s yaş derecelendirmesi bilinmiyor" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s, herkese uygundur" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s, küçük çocuklara uygundur" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s, çocuklara uygundur" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s, ergenlere uygundur" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s, yetişkinlere uygundur" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s, %s için uygundur" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Sistem klasörü %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Ev alt klasörü %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Ana makine sistem klasörleri" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "/etc dizininden ana makine sistem yapılandırması" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Masaüstü alt klasörü %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Masaüstü klasörü" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Belgeler alt klasörü %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Belgeler klasörü" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Müzik alt klasörü %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Müzik klasörü" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Resimler alt klasörü %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Resimler klasörü" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Paylaşılanlar alt klasörü %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Paylaşılanlar klasörü" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Videolar alt klasörü %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Videolar klasörü" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Şablonlar alt klasörü %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Şablonlar klasörü" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Kullanıcı ön bellek alt klasörü %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Kullanıcı ön bellek klasörü" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Kullanıcı yapılandırma alt klasörü %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Kullanıcı yapılandırma klasörü" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Kullanıcı verisi alt klasörü %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Kullanıcı veri klasörü" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Kullanıcı çalışma zamanı alt klasörü %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Kullanıcı çalışma zamanı klasörü" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Dosya sistemi erişimi %s" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Bilinmeyen dosya sistemi yolu" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "İndirme Boyutu" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Kurulum Boyutu" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "İnternetten indirilecek miktar" # Kasten daha açıklayıcı bir çeviri kullanıldı #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Diskteki kapladığı alan" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Kullanıcı veri klasörünü aç" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Kullanıcı Veriniz" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Önbellekler, ayarlar ve diğer uygulama verileri" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Önbellek" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Geçici önbellekli veri" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Önbelleği Temizle" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Çalışma Zamanı Kurulum Boyutu" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Çalışma Zamanı İndirme Boyutu" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "Yok" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "Uygulama Boyutu" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "Doğrulanmış" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Kurulu" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "Sabri Ünal , 2025-2026" #: src/bz-application.c:799 msgid "Special Thanks" msgstr "Özel Teşekkürler" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "Oturum Kapatıldı!" #: src/bz-application.c:1037 msgid "Ubuntu Troubles!" msgstr "Ubuntu Sorunları!" #: src/bz-application.c:1040 msgid "" "The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version of " "Bazaar, please just use the normal package for now by using\n" "\n" "sudo apt install bazaar\n" "\n" "You can then remove this Flatpak version with\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" msgstr "" "Ubuntuʼnun son sürümlerinde öntanımlı güvenlik kurallarının bozuk olmasından " "kaynaklı Bazaarʼın Flatpak sürümünden uygulama kurmak imkansız hale " "gelmiştir. Lütfen şimdilik aşağıdaki komutu kullanarak normal paketi " "kullanın:\n" "\n" "sudo apt install bazaar\n" "\n" "Ardından bu Flatpak sürümünü aşağıdaki komutla kaldırabilirsiniz:\n" "\n" "flatpak uninstall io.github.kolunmi.Bazaar" #: src/bz-application.c:1046 msgid "Continue Anyway" msgstr "Yine De Sürdür" #: src/bz-application.c:1062 msgid "Performing setup…" msgstr "Kurulum gerçekleştiriliyor…" #: src/bz-application.c:1154 msgid "Set Up System Flathub?" msgstr "Sistem Flathubʼı Kurulsun Mu?" #: src/bz-application.c:1157 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub sistem uzağı kurulmamış. Bazaar, uygulamalara göz atmak ve kurmak " "için Flatpak kurulumunda Flathubʼın sistem geneli olarak yapılandırılmış " "olmasını gerektirir. \n" "\n" "Yine de Bazaarʼı kullanarak zaten kurulmuş uygulamalara göz atabilir ve " "kaldırabilirsiniz." #: src/bz-application.c:1164 msgid "Set Up Flathub?" msgstr "Flathub Kurulsun Mu?" #: src/bz-application.c:1167 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub bu sistemde kurulmamış. Bu sebeple Bazaar uygulamalara göz atamaz ve " "kuramaz.\n" "\n" "Yine de Bazaarʼı kullanarak zaten kurulmuş uygulamalara göz atabilir ve " "kaldırabilirsiniz." #: src/bz-application.c:1173 msgid "Later" msgstr "Sonra" #: src/bz-application.c:1174 msgid "Set Up Flathub" msgstr "Flathubʼı Kur" #: src/bz-application.c:1696 msgid "A backend error occurred" msgstr "Arka uç hatası oluştu" #: src/bz-application.c:1896 src/bz-application.c:4111 msgid "Refreshing…" msgstr "Yenileniyor…" #: src/bz-application.c:2060 src/bz-application.c:4109 #, c-format msgid "Loading %d apps…" msgstr "%d uygulama yükleniyor…" #: src/bz-application.c:2113 msgid "Failed to open file" msgstr "Dosya açılamadı" #: src/bz-application.c:2234 msgid "An initialization error occurred" msgstr "İlklendirme hatası oluştu" #: src/bz-application.c:2628 msgid "Checking for updates…" msgstr "Güncellemeler denetleniyor…" #: src/bz-application.c:2684 msgid "Failed to check for updates" msgstr "Güncellemeler denetlenemedi" #: src/bz-application.c:3821 msgid "Malformed Link" msgstr "Hatalı Bağlantı" #: src/bz-application.c:3822 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Uygulamayı açmak için kullanılan bağlantıda büyük harf kullanımı hatalı ve " "ileride çalışmayabilir.\n" "\n" "Bunun en olası nedeni, KRunnerʼın hatalı uygulama kimliği göndermesidir" #: src/bz-application.c:3830 msgid "Could not find app" msgstr "Uygulama bulunamadı" #: src/bz-application.c:3861 msgid "Failed to load metainfo" msgstr "Metainfo yüklenemedi" #: src/bz-application.c:4113 msgid "Writing to cache…" msgstr "Ön belleğe yazılıyor…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "Tümünü Göster" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "Tüm \"%s\"" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d Uygulama" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "Makale Yüklenemedi" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Derleme Kur" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "Ek bağımlılıklar fazladan alan kaplayabilir" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Bu uygulamayı kurmak için yeni yazılım kaynağı eklemeniz gerekebilir. Bu " "kaynaktan gelen diğer uygulamalar Bazaarʼda görünecek.\n" "\n" "Bu kaynağı yalnızca güveniyorsanız ekleyin." #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "Kuruldu!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Aç" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "Uygulama Ayrıntılarını Göster" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "Zaten Kurulu" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "Kurulamadı" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Kurulum boyutu bilinmiyor" # size_str = g_format_size (installed_size); # return g_strdup_printf (_ ("About %s to install"), size_str); #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Yaklaşık kurulum boyutu: %s" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Özel izin yok" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "Son ay içinde %d indirme" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s çalışma zamanı" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "İndirme Boyutu" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Boyut bilgisi yok" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "%s İndirme Boyutu" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Tüm Yaşlar" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Yaş derecelendirme bilgisi yok" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Tüm yaşlar için uygun" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "%d ve üstü yaşlar için uygun" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "Bilinmiyor" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "%s altında lisanslanmış özgür yazılım" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Özgür yazılım" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Sahipli Yazılım" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Özel Lisans: %s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "Özgür Yazılım" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Sahipli" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Özel Lisans" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "Uyarlanır" # Arayüzde sığmadığı için new line eklendi #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "" "Yalnızca\n" "Masaüstü" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "Telefonlarda, tabletlerde ve masaüstülerde çalışır" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "Mobil aygıtlarda çalışmayabilir" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "Güvenli" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "Düşük Risk" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "Orta Risk" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "Yüksek Risk" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Boş" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "Uygulama Seçkisi Yok" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "" "Bu sistemde uygulama seçkisi bilgisi sağlanmamaktadır. Flathubʼda " "uygulamalara yine de göz atabilirsiniz" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "Flathubʼa Göz At" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "Çevrim Dışı" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Tarayıcı" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Doğrulanmamış" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Geliştirici bilgisi yok." #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "%s uygulama kimliğinin sahipliği doğrulanmadı ve topluluk paketlemesi " "olabilir." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "%s uygulama kimliğinin sahipliği Flathub ekibi tarafından elle doğrulandı." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "%1$s uygulama kimliğinin sahipliği %2$s tarafından %3$s " "sitesinden doğrulandı." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "%1$s uygulama kimliğinin sahipliği %2$s kullanılarak doğrulandı." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "%s uygulama kimliğinin sahipliği doğrulandı." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Tam Sürüm Notları" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "Bu sürüm, sizin gibi kullanıcılar sayesinde mümkün oldu!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "Bazaar uygulamasını geliştirmeyi çok seviyorum, yine de bunu tek başıma " "yapamam. Ko-Fi ile bağış yaparak geliştirilmesine destek olun." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Bazaarʼa Bağış Yap" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "%s ile neler yeni?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Yayın tarihi: %-e %B %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Kurulum Seç" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Bu uygulamanın birden çok sürümü kurulu. Hangisiyle devam etmek istersiniz?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "İptal" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Yalnızca Bu Kullanıcı İçin" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "bu kullanıcı" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "tüm kullanıcılar" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "Ayrıntılar" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Kopyala" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:415 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "Kopyalandı!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Gözde Sayısı" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Gözde güncellenemedi" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Gözdeleri yönetmek için Flathub ile oturum aç" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Oturum Aç" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:337 msgid "Favorites" msgstr "Gözdeler" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "Tümünü Kur" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Yükleniyor" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Gözde Yok" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Gözde olarak imlediğiniz uygulamalar burada görünecek" # "Bu Uygulamayı Destekle" diye de çevirmek mümkün fakat bağış daha doğru ve yerelleştirilmiş çeviri olacaktır. İşin içinde zaten para var. #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "Bağış Yap" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Gözdelerden Kaldır" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Gözdelerden kaldırılamadı" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "Önceki" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "Sonraki" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "Düzenleme" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "Midi" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "Mixer" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Müzik" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "Oynatıcı" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "Kaydedici" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "Ardışımlayıcı" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "İnce Ayar" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "TV" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "Öykünme" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "Aksiyon" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "Macera" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "Atari" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "Bloklar" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "Tahta" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "Kart" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "Çocuk" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "Mantık" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "Rol Yapma" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "Atış" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "Simulasyon" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "Spor" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "Strateji" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "Tarayıcılar" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "Sohbet" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "Posta" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "Dosya Paylaşımı" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "Ses ve Video" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "Ortam" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "Ses ve Video" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "Geliştirici Araçları" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "Geliştir" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "Daha Çok Geliştirici Araçları" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "Eğitim" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "Öğren" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "Eğitim" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "Oyun" # Oyun Oyna anlamında Oyna, Oynat değil! #: src/bz-flathub-category.c:137 msgid "Play" msgstr "Oyna" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "Daha Çok Oyun" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "Grafikler ve Fotoğrafçılık" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "Oluştur" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "Daha Çok Grafikler ve Fotoğrafçılık" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "Ağ" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "İnternet" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "Ağ" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "Verimlilik" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "İş" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "Daha Çok Verimlilik" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "Bilim" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "Bilim" #: src/bz-flathub-category.c:142 msgid "System" msgstr "Sistem" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "Sistem" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "Araçlar" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "Araçlar" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "Daha Çok Araçlar" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Trend" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "Daha Çok Trend" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "Popüler" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "Daha Çok Popüler" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "Son Eklenenler" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "Yeni" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "Daha Çok Yeni" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "Son Güncellenenler" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Güncellendi" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "Daha Çok Güncellenenler" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "Mobil" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "Daha Çok Mobil" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "Daha Çok Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "KDE Uygulamaları" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "Daha Çok KDE Uygulaması" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "Oyunlar" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "Daha Çok Oyun" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "Öykünücüler" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "Daha Çok Öykünücü" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "Başlatıcılar" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "Daha Çok Oyun Başlatıcı" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "Oyun Araçları" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "Daha Çok Oyun Aracı" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub Eklenmedi" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Flatpak kurulumlarınızda Flathub uzağı bulunamadı" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub Kullanılamıyor" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Flathubʼa Bağlanamadı" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "Yine de uygulamaları yönetebilir ve arayabilirsiniz." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Uygulamaları Ara" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Yeniden Bağlan" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "Günün Uygulaması" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "Hareket Halindeyken" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "Linux telefonlarınız ve tabletleriniz için uygulamalar" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "Daha Çok Mobil Uygulama" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "Oyunları ♥​ Severiz" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "Sevdiğiniz oyunları çalıştırabileceğiniz oyunlar ve uygulamalar" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Sonuç Yok" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Başka arama deneyin" #: src/bz-full-view.blp:47 msgid "Content" msgstr "İçerik" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "Bu, yerel bir ön izlemedir; kimi ayrıntılar yayınlanan listelemeden farklı " "olabilir" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Mağaza Görünümünü Ön İzle" # Bkz: Support This App çevirisiyle ilgili not. #: src/bz-full-view.blp:236 msgid "_Support" msgstr "_Bağış Yap" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "Bu uygulama, artık güncelleme ya da güvenlik düzeltmesi almayan bir çalışma " "zamanı kullanıyor. Kullanımı güvenli olmayabilir." #: src/bz-full-view.blp:539 msgid "Trash Data" msgstr "Çöp Verisi" #: src/bz-full-view.blp:602 msgid "Add-ons" msgstr "Eklentiler" #: src/bz-full-view.blp:637 msgid "More Add-Ons" msgstr "Daha Çok Eklenti" #: src/bz-full-view.blp:648 msgid "Links" msgstr "Bağlantılar" #: src/bz-full-view.c:181 msgid "No URL" msgstr "URL Yok" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "Bu uygulama Özgür ya da Açık Kaynak Yazılım lisansına sahip, yani kaynak " "kodu güvenlik açısından denetlenebilir." #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "" "Bu uygulama sahipli lisansa sahip, yani kaynak kodu özel olarak " "geliştirilmiştir ve bağımsız üçüncü tarafca denetlenemez." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Daha Çok Uygulama" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Daha Çok %s Uygulamaları" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Bu Geliştiricinin Diğer Uygulamaları" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Diğer %s Uygulamaları" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s kurulmamış, ancak yine de %s verisi var." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Diğer Uygulamalar" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d Uygulama" #: src/bz-full-view.c:506 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Kullanıcı Verisi Kaldırılamadı" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Donanım Desteği" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Klavye desteği" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Klavye gerektirir" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Klavye kullanımı önerilir" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Klavyeleri destekler" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Klavye desteği bilinmiyor" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Fare desteği" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Fare ya da işaretleme aygıtları gerektirir" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Fare ya da işaretleme aygıtları önerilir" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Fare ve işaretleme aygıtlarını destekler" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Fare ya da işaretleme aygıtları desteği bilinmiyor" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Dokunmatik ekran desteği" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Dokunmatik ekran gerektirir" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Dokunmatik ekran önerilir" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Dokunmatik ekranı destekler" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Dokunmatik ekran desteği bilinmiyor" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Mobil desteği" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Mobil aygıtlarda çalışır" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Mobil aygıtlarda iyi çalışmayabilir" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Masaüstü desteği" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Büyük ekranlarda iyi çalışır" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s belirli donanımlarda daha iyi çalışır" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s çoğu aygıtta çalışır" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "_Aç" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "Uygulamayı Kaldır" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Kaldır" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "Güncelle" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "Kaldır" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "%s, %s kaynağıdan kur" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "%s kur" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "İptal" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "İptal ediliyor" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "Bağış Yap Düğmesi" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Kurulu uygulamaları ara" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Aramayı temizle" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Uygulama Bulunamadı" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Mağazada Ara" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:114 msgid "Library" msgstr "Kitaplık" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "Güncellemeler Bekliyor" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "İndirmeler" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "Son Kaldırılanlar" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "Tamamlanan Görevleri Temizle" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "Sıralama Seçenekleri" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "Sırala" #: src/bz-library-page.blp:350 msgid "Name" msgstr "Ad" #: src/bz-library-page.blp:356 msgid "Size" msgstr "Boyut" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Kurulu uygulamalar listesinde \"%s\" ile eşleşen hiçbir öge bulunamadı" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u Güncelleme Var" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u Kurulu Uygulama" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "Katılım Sağlayın" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "Daha Çoğunu Öğren" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Bilinmeyen Lisans" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Topluluk İnşası" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "Bu uygulama, uluslararası bir topluluk tarafından açık şekilde " "geliştirilmiştir. \n" "\n" "Katılarak daha iyi olmasını sağlayabilirsiniz." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Uygulamanın lisansı bilinmiyor" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "Bu uygulama, uluslararası bir topluluk tarafından açık şekilde geliştirilmiş " "ve %s lisansıyla dağıtılmıştır.\n" "\n" "Katılarak daha iyi olmasını sağlayabilirsiniz." #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Bu uygulama açık olarak geliştirilmemiştir, nasıl çalıştığını yalnızca kendi " "geliştiricileri bilir. Saptanması zor biçimde güvensiz olabilir ve " "gözetimsizce değişebilir.\n" "\n" "Bu uygulamaya katkıda bulunabilir ya da bulunamayabilirsiniz." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "Bu uygulama özel “%s” lisansı altında geliştirilmiştir.\n" "\n" "Bu uygulamaya katkıda bulunabilir ya da bulunamayabilirsiniz." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "Lisans" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "Flathubʼa Bağlan" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "Bir Şeyler Yanlış Gitti" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "Gözde uygulamalarınızı aygıtlar arasında eşzamanlamak için oturum açın" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "Bitti" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "Merhaba, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Metainfo Dosyası Seç" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Metainfo Dosyaları" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Simge Seç (İsteğe bağlı)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "Resim Dosyaları" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Ön İzle" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Tercihler" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "" "Ağ bağlantısı ölçülü — kendiliğinden mağaza verilerinin yenilenmesi " "duraklatıldı" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:236 msgid "Refresh Manually" msgstr "Elle Yenile" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "İçerik Süzgeçleri" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Yalnızca Özgür Yazılımlar" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "Göz atarken ve arama yaparken sahipli uygulamaları gizle" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Yalnızca Flathub Sonuçları" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "" "Arama ve gözatma sonuçlarını yalnızca Flathubʼda bulunan uygulamalarla " "sınırla" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Yalnızca Doğrulanmış Sonuçlar" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Flathubʼda doğrulanmamış sonuçları gizle" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Ömrünün Sonuna Gelmiş Uygulamaları Gizle" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "Geliştiricilerince artık desteklenmeyen uygulamaları gizle" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "İlerleme Çubuğu Teması" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Vurgu Rengi" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Pride Colors" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Lesbian Pride Colors" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Male Homosexual Pride Colors" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Transgender Pride Colors" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Nonbinary Pride Colors" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Bisexual Pride Colors" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Asexual Pride Colors" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Pansexual Pride Colors" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Aromantic Pride Colors" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Genderfluid Pride Colors" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Polysexual Pride Colors" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Omnisexual Pride Colors" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Aroace Pride Colors" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Agender Pride Colors" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Genderqueer Pride Colors" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Intersex Pride Colors" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Demigender Pride Colors" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Biromantic Pride Colors" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Disability Pride Colors" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Femboy Pride Colors" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Neutrois Pride Colors" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "Sürüm Geçmişi" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Sürüm Geçmişi" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Bugün" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Dün" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d gün önce" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d hafta önce" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d ay önce" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d yıl önce" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Sürüm %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Bu sürüm için ayrıntı yok" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "Daha Çok Bilgi" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "Kaldır" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "Al" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Bilinmeyen İzinler" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "Bu uygulama için izinler eksik." #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "İzin Yok" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Uygulama tümüyle yalıtılmış alandadır" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Ağ Erişimi" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "İnternete erişebilir" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Ağ Erişimi Yok" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "İnternete erişemez" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Kullanıcı Aygıtı Erişimi" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "Web kameraları veya oyun denetçileri gibi aygıtlara erişebilir" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Kullanıcı Aygıtı Erişimi Yok" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "Web kameraları veya oyun denetçileri gibi aygıtlara erişemez" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Girdi Aygıtı Erişimi" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Girdi aygıtlarına erişebilir" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Mikrofon Erişimi ve Ses Oynatımı" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "İzin istemeden mikrofonlarla dinleyebilir ve sesleri oynatabilir" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Sistem Aygıtı Erişimi" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "Yükseltilmiş izinler gerektiren sistem aygıtlarına erişebilir" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Ekran İçerikleri Erişimi" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Ekranın ya da diğer pencerelerin içeriklerine erişebilir" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Eski Pencereleme Sistemi" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Daima eski pencereleme sistemi kullanır (X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "İsteğe Bağlı İzinler" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "İsteğe bağlı izinler edinir" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Kullanıcı Ayarları" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Kullanıcı ayarlarına erişebilir ve değiştirebilir" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Tüm Dosya Sistemini Okuma/Yazma Erişimi" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Dosya sistemindeki tüm veriyi okuyabilir ve yazabilir" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Ev Klasörü Okuma/Yazma Erişimi" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Ev dizininizdeki tüm veriyi okuyabilir ve yazabilir" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Tüm Dosya Sistemini Okuma Erişimi" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Dosya sistemindeki tüm veriyi okuyabilir" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Ev Klasörü Okuma Erişimi" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Ev dizininizdeki tüm verinizi okuyabilir" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "İndirilenler Klasörü Okuma/Yazma Erişimi" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "İndirilenler dizininizdeki tüm veriyi okuyabilir ve yazabilir" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "İndirilenler Klasörü Okuma Erişimi" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "İndirilenler dizininizdeki tüm veriyi okuyabilir" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Dizindeki tüm veriyi okuyabilir ve yazabilir" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Dizindeki tüm veriyi okuyabilir" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Dosya Sistemi Erişimi Yok" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Dosya sistemine asla erişemez" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Sistem Hizmetlerini Kullanır" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Kapı dışı sistem hizmetlerinden veri isteyebilir" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Oturum Hizmetlerini Kullanır" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Kapı dışı oturum hizmetlerinden veri isteyebilir" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Hizmet Erişimi Yok" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Kapı dışı oturum ya da sistem hizmetlerine asla erişemez" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Doğrulanmış Uygulama Geliştiricileri" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "Bu uygulamanın geliştiricisinin söylediği kişi olduğu doğrulandı" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Sahipli Kod" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Kaynak kod halka açık değildir, bu nedenle bağımsızca denetlenemez ve " "güvenilir olmayabilir" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Denetlenebilir Kod" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Kaynak kod halka açıktır ve bağımsızca denetlenebilir, bu uygulamayı daha " "güvenilir kılar" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "%s Sistem Hizmetini Kullan" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "%s Oturum Hizmetini Kullan" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "%s Hizmetini Kullan" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Kapı dışı hizmetleri görebilir" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Kapı dışı hizmetlere konuşabilir" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Kapı dışı hizmet edinebilir" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Küresel Menü Tümleşimi" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Menülerini genel menü çubuğunda görüntüleyebilir" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "KDE Ayarları Tümleşimi" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "KDE masaüstü ayarları değiştiğinde algılayabilir" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "KDE Genel Ayarlar" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "KDE masaüstü tercihlerini (yazı tipleri ve renkler gibi) okuyabilir" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Gizli Depolama Hizmeti" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Sistem anahtarlığı kullanarak kendi parolalarını saklayabilir ve geri " "getirebilir" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Masaüstü Bildirim Hizmeti" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Masaüstü bildirimleri gönderebilir" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Sistem Tepsisi Tümleşimi" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Sistem tepsisinde simge gösterebilir" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE Connect Tümleşimi" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "KDE Connect aracılığıyla eşleştirilen aygıtlarla etkileşime girebilir" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "Bu uygulamanın, Flatpak korumalı alanını atlayarak istediği herhangi bir " "izni kullanma izni var.\n" "\n" "Bu nedenle, korumalı alanda çalışmayan bir uygulamanın yapabileceği her " "şeyi, tüm dosyalarınıza erişmek ve internete bağlanmak gibi, yapabilir.\n" "\n" "Diğer izinleri görüntülemek, uygulamanın yapabilecekleri hakkında daha iyi " "fikir verebilir." #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "Diğer İzinleri Görüntüle" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "Uygulama Kimliği" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" # SDK vurgusu hatalı. Yazılımları genelde Platform ile paketleniyor, SDK ise derlenirken kullanılıyor. #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "Bu uygulama, çalışma ortamının eski sürümünü kullanıyor ve düzeltilmeyecek " "hatalar ya da güvenlik açıkları içerebilir." #: src/bz-safety-dialog.c:287 msgid "Safety" msgstr "Güvenlik" #: src/bz-safety-dialog.c:347 #, c-format msgid "%s is Safe" msgstr "%s Güvenilir" #: src/bz-safety-dialog.c:352 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s Güvenli Olmayan İzinleri Yok" #: src/bz-safety-dialog.c:357 #, c-format msgid "%s is Probably Safe" msgstr "%s Muhtemelen Güvenli" #: src/bz-safety-dialog.c:362 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s Güvenilir Olmayabilir" #: src/bz-safety-dialog.c:367 #, c-format msgid "%s is Unsafe" msgstr "%s Güvenilir Değil" #: src/bz-screenshot-page.blp:41 msgid "Back" msgstr "Geri" #: src/bz-screenshot-page.blp:71 msgid "Previous Screenshot" msgstr "Önceki Ekran Görüntüsü" #: src/bz-screenshot-page.blp:81 msgid "Next Screenshot" msgstr "Sonraki Ekran Görüntüsü" #: src/bz-screenshot-page.blp:97 msgid "Copy Image" msgstr "Resmi Kopyala" #: src/bz-screenshot-page.blp:160 msgid "Reset View" msgstr "Görünümü Sıfırla" #: src/bz-screenshot-page.blp:171 msgid "Zoom Out" msgstr "Uzaklaştır" #: src/bz-screenshot-page.blp:181 msgid "Zoom In" msgstr "Yakınlaştır" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "Ekran Görüntüsü Sergisi" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "Ekran Görüntüsü Yok" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "Ekran Görüntüsü Görüntüleyiciyi Aç" #: src/bz-screenshots-carousel.c:308 #, c-format msgid "Screenshot %u %s" msgstr "Ekran görüntüsü %u %s" #: src/bz-screenshots-carousel.c:310 #, c-format msgid "Screenshot %u" msgstr "Ekran görüntüsü %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Süzgeçler" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Doğrulanmış" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "Ö_zgür/Açık Kaynak" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "_Yaşam Döngüsünde" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Ömrünün Sonuna Gelmiş Uygulamaları Süz" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "_Mobil Uyumlu" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "Kategoriler" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Uygulamaları, Oyunları, Yazılımları Ara" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Arama Süzgeçleri" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Aramayı Temizle" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Kategorilere Göz At" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "Kategoriler Kullanılamıyor" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "Yukarıdaki arama çubuğunu kullanarak uygulamaları ara." #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "Uygulama Bulunamadı." #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Flathubʼda \"%s\" için sonuç bulunamadı" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Video" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Ofis" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Takvim" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "İletişim" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Boyama" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Öykünücü" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub Sayfası" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "Proje Web Sitesi" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Sorun İzleyici" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "SSS" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Yardım" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Bağış" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Çevir" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "İletişim" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Kaynak Kodu" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Katkı Ver" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifesto" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "Bağlantıyı Kopyala" # Konumu gereği başlık düzeni kullanıldı. Ayrıca Zaman Çizgisi yerine Zaman Çizelgesi çevirisi yeğlendi. #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Zaman Çizelgesi" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Kurulum Sayısı:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Dünya" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "15 Nisan 2024 tarihinden beri" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM Toplam Kurulum" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK Toplam Kurulum" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d Toplam Kurulum" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "Hiçbir Sonuç Bulunamadı" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "Arama başarısız" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Kullanıcı Verisini Tut" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Kişisel ayarların ve içeriğin geri yüklenmesine izin ver" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Tüm Verileri Sil" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Disk alanını korumak için kullanıcı verisini sil" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "%s Kurulsun Mu?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "Hangi sürümün kurulacağını seç. Ek paylaşımlı bileşenler kurabilir" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Ek paylaşımlı bileşenler kurabilir" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "İ_ptal" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Kur" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "%s Kaldırılsın Mı?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Hangi sürümün kaldırılacağını seç." #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "Kaldırıldıktan sonra %s artık kullanılamayacak." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "“%s” Çok Riskli" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Bu uygulama, tüm dosyalarınız, tarayıcı geçmişiniz, kaydedilmiş " "parolalarınız ve daha fazlası üzerinde sisteminize tam erişimi var. " "Ayrıca internete de erişebilir, yani verilerinizi dış taraflara " "gönderebilir.\n" "\n" "Uygulama sahipli olduğundan, bu izinlerle ne yaptığı denetlenemez." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "Bu uygulama, tüm tuş darbelerini kaydetmeye, ekran görüntülerini " "yakalamaya ve diğer uygulamaları izlemeye izin veren eski X11 pencere " "sistemini kullanır. Ayrıca internete erişimi var, yani verilerinizi dış " "taraflara gönderebilir.\n" "\n" "Uygulama sahipli olduğundan, bu izinlerle ne yaptığı denetlenemez." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "Yine De _Kur" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "İşlem iletişim kutusu yüklenemedi" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Tüm uygulamalar zaten kurulmuş" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Tamam" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "%u Uygulama Kurulsun Mu?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "Aşağıdakiler yüklenecek. Ek ortak bileşenler de kurulabilir" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d eklenti kurulacak." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Ayrıca, uzantılar kurulacak." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "Tümünü _Kur" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "%.02f saniyede bitti" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Uygulama Eklentisi" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Çalışma Zamanı" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "Kuyrukta" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Bitti" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "İptal edildi" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Hata" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "İşlemi İptal Et" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "Ayrıntıları Göster" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "Hata Bilgisini Göster" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s Temizlendi" # Transaction dese de para ile ilgisi yok. O sebeple sadece İşlemler diye çevirdim. #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "İşlem Hatası" #: src/bz-transaction.c:344 msgid "Pending" msgstr "Beklemede" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "Tümünü _Güncelle" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u Çalışma Zamanı Güncellemesi" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Artık Kullanıcı Verisini Yönet" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Kullanıcı Verisi bulunamadı" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Kullanıcı Verisi" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Kullanıcı Verisini Çöpe Taşı" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "%s İçin Kullanıcı Verisi Çöpe Taşındı" #: src/bz-window.blp:72 msgid "Refreshing" msgstr "Yenileniyor" #: src/bz-window.blp:90 msgid "Curated" msgstr "Özelleştirilmiş" #: src/bz-window.blp:102 msgid "Explore" msgstr "Keşfet" #: src/bz-window.blp:129 msgid "Search" msgstr "Ara" #: src/bz-window.blp:216 msgid "Main Menu" msgstr "Ana Menü" #: src/bz-window.blp:227 msgid "You are running a new version of Bazaar!" msgstr "Bazaarʼın yeni bir sürümünü kullanıyorsunuz!" #: src/bz-window.blp:228 msgid "See What's New" msgstr "Neler Yeni Gör" #: src/bz-window.blp:235 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "" "Ağ bağlantınız var ancak Flathubʼın önbelleklenmiş sürümünü görüntülüyorsunuz" #: src/bz-window.blp:281 msgid "_Donate to Bazaar" msgstr "Bazaarʼa _Bağış Yap" #: src/bz-window.blp:287 msgid "_Refresh" msgstr "_Yenile" #: src/bz-window.blp:291 msgid "_Login With Flathub" msgstr "Flathub İle _Oturum Aç" #: src/bz-window.blp:297 msgid "_Manage Leftover User Data" msgstr "Artık Kullanıcı Verisini _Yönet" #: src/bz-window.blp:303 msgid "_Preferences" msgstr "_Tercihler" #: src/bz-window.blp:308 msgid "_Keyboard Shortcuts" msgstr "_Klavye Kısayolları" #: src/bz-window.blp:313 msgid "_About Bazaar" msgstr "Bazaar _Hakkında" #: src/bz-window.blp:319 msgid "_Quit Bazaar" msgstr "Bazaarʼdan Çı_k" #: src/bz-window.blp:344 msgid "Log Out" msgstr "Oturumu Kapat" #. Translators: %s is the title of the current page #: src/bz-window.c:389 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:609 src/bz-window.c:647 msgid "Failed to launch application" msgstr "Uygulama başlatılamadı" #: src/bz-window.c:860 msgid "You can't remove Bazaar from Bazaar!" msgstr "Bazaarʼı Bazaar ile kaldıramazsınız!" #: src/bz-window.c:1166 src/bz-window.c:1200 msgid "Can't do that right now!" msgstr "Şimdi yapma!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Kurulum" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Gezinti" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Keşfet Sayfasını Aç" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Kitaplık Sayfasını Aç" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Arama Sayfasını Aç" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Uzaklar" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Uzakları Eşzamanla" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Genel" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Tercihleri Aç" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Kısayolları Göster" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Pencereyi Kapat" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Bazaarʼdan Çık" bazaar-org-bazaar-b6e9a65/po/uk.po000066400000000000000000003157341522167256300170430ustar00rootroot00000000000000# Ukrainian translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025-2026 faoquad msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-01 10:04+0300\n" "PO-Revision-Date: 2026-06-01 14:48+0300\n" "Last-Translator: faoquad \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: Lokalize 26.04.1\n" #: data/io.github.kolunmi.Bazaar.desktop.in:3 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:45 #: src/bz-window.blp:199 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Базар" #: data/io.github.kolunmi.Bazaar.desktop.in:4 msgid "Add, remove or update flatpak software on this computer" msgstr "Встановлюйте, видаляйте та оновлюйте пакунки Flatpak на Ваш компʼютер" #: data/io.github.kolunmi.Bazaar.desktop.in:10 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;Магазин;Крамниця;" "Флатпак;Пакунки;Програми;" #: data/io.github.kolunmi.Bazaar.desktop.in:17 msgid "New Window" msgstr "Нове вікно" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "Знаходьте та керуйте застосунками" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "Швидка та сучасна крамниця застосунків для Linux, зосереджена на знаходженні т" "а встановленні застосунків і розширень зі сховищ Flatpak, зокрема Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "Шукайте та завантажуйте водночас" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "Легко переглядайте дозволи застосунків" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "Увійдіть із допомогою Flathub, аби керувати вподобаннями" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "Шукайте застосунки безпосередньо з оболонки GNOME" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "Домашня сторінка із застосунками з Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "Сторінка застосунку Exhibit" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "Сторінка бібліотеки" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "Сторінка пошуку" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "Сторінка пошуку з категоріями" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:141 msgid "Stopped Receiving Updates" msgstr "Більшe не отримує оновлень" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "Видалити" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:145 #: src/bz-bundle-install-dialog.blp:159 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "Встановити" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:92 msgid "Manage Add-Ons" msgstr "Керувати розширеннями" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "Не видно жодного розширення" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "" "Ваші налаштування відсіювання сховали всі відомі розширення. Спробуйте відкори" "гувати їх." #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "Сторінка розширень" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:410 msgid "Downloads/Month" msgstr "зав/міс" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:446 msgid "Stopped Receiving Core Updates" msgstr "Більше не отримує оновлень середовища виконання" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "Це розширення використовує середовище виконання, котре більше не отримує оновл" "ень або безпекових виправлень. Він може стати небезпечним до використання." #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "Розширення для %s" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "Згорнути" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show More" msgstr "Розгорнути" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "Звіт щодо завантажень" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "Вікове обмеження" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "Анімована жорстокість" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "Без даних щодо зображення анімованої жорстокости" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "Вигадана жорстокість" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "Без даних щодо зображення вигаданої жорстокости" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "Реалістична жорстокість" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "Без даних щодо зображення реалістичної жорстокости" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "Жорстокість із зображенням кровопролиття" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "Без даних щодо зображення кровопролиття" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "Сексуальне насильство" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "Без даних щодо згадок або зображення сексуального насильства" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "Алкоголь" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "Без даних щодо згадок або зображення алкоголю" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "Заборонені речовини" # Тут поняття включає як заборонені, так і незаборонені речовини (алкоголь, тютюн тощо) #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "Без даних щодо згадок або зображення пʼянких речовин" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "Тютюн" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "Без даних щодо згадок або зображення тютюнових виробів" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "Оголення" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "Без даних щодо зображення оголення" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "Сексуальні теми" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "Без даних щодо згадок або зображення сексуального характеру" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "Лайка" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "Без даних щодо грубощів або недоречного гумору" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "Недоречний гумор" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "Без даних щодо використання недоречного гумору" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "Дискримінація" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "Без даних щодо використання дискримінаційної мови" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "Реклама" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "Без даних щодо рекламного вмісту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "Азартний вміст" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "Без даних щодо азартного вмісту" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "Покупки" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "Без даних щодо можливості витрачати гроші" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "Розмови між користувачами" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "Без даних щодо можливості спілкуватися з іншими користувачами" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "Голосові розмови між користувачами" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "Без даних щодо голосового звʼязку з іншими користувачами" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "Контактні дані" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "Без даних щодо розголошення облікових даних соцмереж або адрес електронної " "пошти" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "Виявні дані" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "Без даних щодо розголошення користувацьких даних третім сторонам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "Місцезнаходження" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "Без даних щодо розголошення розташування іншим користувачам" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "Проституція" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "Без даних щодо згадок або зображення проституції" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "Подружня зрада" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "Без даних щодо згадок або зображення подружньої зради" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "Сексуалізовані персонажі" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "Без даних щодо зображення сексуалізованих персонажів" # По-нашому не «кощунство». #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "Блюзнірство" # По-нашому не «кощунство». #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "Без даних щодо блюзнірства" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "Людські рештки" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "Без даних щодо зображення людських решток" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "Рабство" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "Без даних щодо згадок або зображення рабства" # Тут поняття включає як заборонені, так і незаборонені речовини (алкоголь, тютюн тощо) #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "Не містить згадок або зображення пʼянких речовин" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "Не містить грубощів або недоречного гумору" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "Не містить реклами або грошових операцій" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "Не містить оголености або сексу" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "Не має можливості спілкуватися з іншими користувачами" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "Не містить жорстокости" # Тут поняття включає як заборонені, так і незаборонені речовини (алкоголь, тютюн тощо) #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "Речовини" # Як розумію, це включає лайливу мову та інші форми міцної мови. #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "Грубощі" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "Гроші" # Тут мається на увазі чат та інші види звʼязку з іншими людьми. #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "Спілкування" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "Жорстокість" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "Без обмежень" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s не вказує вікове обмеження" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s пасує всім" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s пасує малим дітям" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s пасує дітям" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s пасує підліткам" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s пасує дорослим" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s пасує %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "Системна тека %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "Домашня підтека %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "Системні теки пристрою" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "Системні налаштування пристрою з /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "Підтека стільниці %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "Тека стільниці" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "Підтека з документами %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "Тека з документами" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "Підтека з музикою %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "Тека з музикою" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "Підтека зображень %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "Тека зображень" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "Прилюдна підтека %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "Прилюдна тека" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "Підтека відео %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "Тека відео" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "Підтека шаблонів %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "Тека шаблонів" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "Підтека користувацького кешу %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "Тека користувацького кешу" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "Підтека налаштувань користувача %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "Тека налаштувань користувача" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "Підтека даних користувача %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "Тека даних користувача" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "Підтека середовища виконання користувача %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "Тека середовища виконання користувача" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "Доступ до %s у файловій системі" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "Невідомий шлях" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "Розмір завантаження" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "Розмір встановлення" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "Обсяг даних до завантаження" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "Розмір на диску" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "Відкрити теку користувацьких даних" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "Ваші користувацькі дані" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "Кеш, налаштування, та інші дані застосунку" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "Кеш" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "Тимчасово кешовані дані" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "Очистити кеш" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "Розмір встановленого середовища виконання" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "Розмір середовища виконання до завантаження" #: src/bz-app-size-dialog.c:220 msgid "App Size" msgstr "Розмір застосунку" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:105 src/bz-rich-app-tile.c:429 msgid "Verified" msgstr "Підтверджено" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "Встановлені" #: src/bz-application.c:762 msgid "The Bazaar Contributors" msgstr "Внесники Базару" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:765 msgid "translator-credits" msgstr "faoquad , 2025" #: src/bz-application.c:775 msgid "Special Thanks" msgstr "Особливі подяки" #: src/bz-application.c:833 msgid "Logged Out Successfully!" msgstr "Ви вийшли з Flathub" #: src/bz-application.c:969 msgid "Performing setup…" msgstr "Налаштовуємо…" #: src/bz-application.c:1055 msgid "Set Up System Flathub?" msgstr "Налаштувати сховище Flathub всесистемно?" #: src/bz-application.c:1058 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Сховище Flathub не налаштовано на цій системі. Базар вимагає налаштованого схо" "вища Flathub у системі для пошуку та встановлення застосунків.\n" "\n" "Проте, Ви зможете користати Базар для огляду та керування вже встановленими за" "стосунками." #: src/bz-application.c:1065 msgid "Set Up Flathub?" msgstr "Налаштувати Flathub?" #: src/bz-application.c:1068 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub не налаштовано на цій системі. Ви не зможете шукати та встановлювати " "застосунки в Базарі. Проте, Ви зможете користати Базар для огляду та " "керування вже встановленими застосунками." #: src/bz-application.c:1074 msgid "Later" msgstr "Пізніше" #: src/bz-application.c:1075 msgid "Set Up Flathub" msgstr "Налаштувати Flathub" #: src/bz-application.c:1431 msgid "A backend error occurred" msgstr "Виникла помилка на боці серверу" #: src/bz-application.c:1631 src/bz-application.c:3783 msgid "Refreshing…" msgstr "Освіжаємо…" #: src/bz-application.c:1795 src/bz-application.c:3781 #, c-format msgid "Loading %d apps…" msgstr "Провантажуємо %d застосунків…" #: src/bz-application.c:1848 msgid "Failed to open file" msgstr "Не вдалося відкрити файл" #: src/bz-application.c:1946 msgid "An initialization error occurred" msgstr "Виникла помилка ініціалізації" #: src/bz-application.c:2312 msgid "Checking for updates…" msgstr "Шукаємо оновлення…" #: src/bz-application.c:2368 msgid "Failed to check for updates" msgstr "Помилка пошуку оновлень" #: src/bz-application.c:3494 msgid "Malformed Link" msgstr "Хибне посилання" #: src/bz-application.c:3495 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "Посилання, за котрим було відкрито цей застосунок, містить хибне використання " "малих і великих літер та може перестати працювати в майбутньому.\n" "\n" "Найвірогіднішою причиною може бути KRunner, котрий надсилає хибні ID застосунк" "ів." #: src/bz-application.c:3503 msgid "Could not find app" msgstr "Не вдалося знайти застосунок" #: src/bz-application.c:3534 msgid "Failed to load metainfo" msgstr "Не вдалося завантажити метадані" #: src/bz-application.c:3785 msgid "Writing to cache…" msgstr "Кешуємо…" #: src/bz-apps-page.blp:99 msgid "Show All" msgstr "Показати всі" #: src/bz-apps-page.c:237 #, c-format msgid "All \"%s\"" msgstr "Усі «%s»" #: src/bz-apps-page.c:487 #, c-format msgid "%d Applications" msgstr "%d застосунків" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Встановлення пакунку" #: src/bz-bundle-install-dialog.blp:195 msgid "Additional dependencies may take extra space" msgstr "Додаткові залежності можуть зайняти більше місця" #: src/bz-bundle-install-dialog.blp:229 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "Встановлення цього застосунку може потребувати додання нового джерела для зава" "нтажень. Інші застосунки з цього джерела стануть доступні в Базарі.\n" "\n" "Додавайте це джерело лише якщо довіряєте йому." #: src/bz-bundle-install-dialog.blp:406 msgid "Successfully Installed!" msgstr "Успішно встановлено!" #: src/bz-bundle-install-dialog.blp:430 src/bz-bundle-install-dialog.blp:513 #: src/bz-rich-app-tile.blp:198 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "Запустити" #: src/bz-bundle-install-dialog.blp:440 src/bz-bundle-install-dialog.blp:523 msgid "Show App Details" msgstr "Докладніше про застосунок" #: src/bz-bundle-install-dialog.blp:490 msgid "Already Installed" msgstr "Вже встановлені" #: src/bz-bundle-install-dialog.blp:535 msgid "Installation Failed" msgstr "Помилка встановлення" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "Невідомий розмір встановлення" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "Близько %s до встановлення" #: src/bz-bundle-install-dialog.c:185 src/bz-context-tile-callbacks.c:104 #: src/bz-context-tile-callbacks.c:392 src/bz-context-tile-callbacks.c:409 msgid "N/A" msgstr "Н/Д" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "Без особливих дозволів" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*f млн" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*f тис." #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "%d завантажень за останній місяць" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+ середовище виконання %s" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "Завантажити" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "Дані про розмір недоступні" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "Розмір завантаження" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "Без обмежень" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "Дані щодо вікового обмеження недоступні" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "Без обмежень за віком" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "%d та старше" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "Невідомо" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "Вільне ПЗ за ліцензією %s" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "Вільне ПЗ" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "Власницька ліцензія" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "Власна ліцензія: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "Вільна ліцензія" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "Власницька ліцензія" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "Власна ліцензія" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "Адаптивний" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "Лише для стільниць" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "Працює на стільницях, планшетах і смартфонах" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "Може не працювати на мобільних пристроях" #: src/bz-context-tile-callbacks.c:399 src/bz-safety-dialog.blp:27 msgid "Safe" msgstr "Безпечний" #: src/bz-context-tile-callbacks.c:401 src/bz-context-tile-callbacks.c:403 msgid "Low Risk" msgstr "Низький ризик" #: src/bz-context-tile-callbacks.c:405 msgid "Medium Risk" msgstr "Помірний ризик" #: src/bz-context-tile-callbacks.c:407 msgid "High Risk" msgstr "Високий ризик" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "Порожньо" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "Жодного підібраного вмісту" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "Ваша операційна система не надає підібранoго вмісту. Ви все ще можете шукати " "застосунки на Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Оглянути Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 msgid "Offline" msgstr "Поза мережею" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "Оглядач" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "Не підтверджено" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "Відомості щодо розробників недоступні" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Володіння ідентифікатором цього застосунку но йуНО підтверджено. Можливо, " "цей пакунОк йуНО вивантажено спільнотою." #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "" "Володіння ідентифікатором %s йуНО підтверджено власноруч командою Flathub." #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "" "Володіння ідентифікатором %1$s йуНО підтверджено %2$s станом на %3%s" "." #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "Володіння ідентифікатором %1$s йуНО підтверджено С допомогою %2$s." #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Володіння ідентифікатором %s йуНО підтверджено." #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "Повна примітка Đ´Đž випуску" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "" "Випуск цієї крамниці став ПОМНивиП завдяки таким саПиП користувачам, що і Ви!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "ĐŻ люблю створювати Базар, та но ПОМу робити це йоС дОпОПОги. Підтримайте пОдаН" "ьшу розробку гривнею на Ko-Fi." #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "Пожертувати Базару" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "ĐŠĐž нОвОгО у %s?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "Випущено %-e %B %Y р." #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "Оберіть встановлення" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "" "Ви маєте декілька встановлених версій цього застосунку. З котрою С них Ви " "бажаєте продовжити?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:232 msgid "Cancel" msgstr "Скасувати" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "Лише для цього користувача" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "цей користувач" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "усі користувачі" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:46 msgid "Details" msgstr "Докладніше" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "Копіювати" #: src/bz-error-dialog.c:56 src/bz-share-list.c:363 msgid "Copied!" msgstr "Скопійовано!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "Кількість уподобань" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "Не вдалося оновити вподобані" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "Увійдіть із допомогою Flathub, айи керувати вподобаннями" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "Увійти" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:334 msgid "Favorites" msgstr "Вподобані" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "Встановити всі" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "Шукаємо" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "Нічого но впОдОйанО" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "Вподобані застосунки опинятимуться тут" #: src/bz-favorites-tile.blp:60 src/bz-installed-tile.blp:69 msgid "Support This Application" msgstr "Підтримати цей застосунок" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "Прибрати С уподобаних" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "Не вдалося прибрати С уподобаних" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "Назад" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "Далі" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "Редактори" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "MIDI" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "Мікшування" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "Музика" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "Програвачі" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "Запис" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "Секвенсори" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "Тюнер" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "ТБ" # Сторінка повертає різні ігрові емулятори #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "Емулятори" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "Бойовики" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "Пригоди" #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "Аркади" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "Блоки" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "Настільні" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "Карткові" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "Дитячі" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "Головоламки" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "Рольові" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "Стрілянки" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "Симулятори" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "Спортивні" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "Стратеґії" #: src/bz-flathub-category.c:124 msgid "Audio & Video" msgstr "Звук та відео" #: src/bz-flathub-category.c:124 msgid "Media" msgstr "Медіа" #: src/bz-flathub-category.c:124 msgid "More Audio & Video" msgstr "Показати більше" #: src/bz-flathub-category.c:125 msgid "Developer Tools" msgstr "Розробка" #: src/bz-flathub-category.c:125 msgid "Develop" msgstr "Розробка" #: src/bz-flathub-category.c:125 msgid "More Developer Tools" msgstr "Показати більше" #: src/bz-flathub-category.c:126 msgid "Education" msgstr "Освіта" #: src/bz-flathub-category.c:126 msgid "Learn" msgstr "Освіта" #: src/bz-flathub-category.c:126 msgid "More Education" msgstr "Показати більше" #: src/bz-flathub-category.c:127 msgid "Gaming" msgstr "Ігри" #: src/bz-flathub-category.c:127 msgid "Play" msgstr "Ігри" #: src/bz-flathub-category.c:127 msgid "More Gaming" msgstr "Показати більше" #: src/bz-flathub-category.c:128 msgid "Graphics & Photography" msgstr "Графіка та фотографія" #: src/bz-flathub-category.c:128 msgid "Create" msgstr "Творчість" #: src/bz-flathub-category.c:128 msgid "More Graphics & Photography" msgstr "Показати більше" #: src/bz-flathub-category.c:129 msgid "Networking" msgstr "Мережа" #: src/bz-flathub-category.c:129 msgid "Internet" msgstr "Інтернет" #: src/bz-flathub-category.c:129 msgid "More Networking" msgstr "Показати більше" #: src/bz-flathub-category.c:130 msgid "Productivity" msgstr "Продуктивність" #: src/bz-flathub-category.c:130 msgid "Work" msgstr "Робота" #: src/bz-flathub-category.c:130 msgid "More Productivity" msgstr "Показати більше" #: src/bz-flathub-category.c:131 msgid "Science" msgstr "Наука" #: src/bz-flathub-category.c:131 msgid "More Science" msgstr "Показати більше" #: src/bz-flathub-category.c:132 msgid "System" msgstr "Система" #: src/bz-flathub-category.c:132 msgid "More System" msgstr "Показати більше" #: src/bz-flathub-category.c:133 msgid "Utilities" msgstr "Утиліти" #: src/bz-flathub-category.c:133 msgid "Tools" msgstr "Утиліти" #: src/bz-flathub-category.c:133 msgid "More Utilities" msgstr "Показати більше" #: src/bz-flathub-category.c:134 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "Набирають популярність" #: src/bz-flathub-category.c:134 msgid "More Trending" msgstr "Показати більше" #: src/bz-flathub-category.c:135 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:171 msgid "Popular" msgstr "Популярні" #: src/bz-flathub-category.c:135 msgid "More Popular" msgstr "Показати більше" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:161 msgid "Recently Added" msgstr "Нещодавно додані" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:121 msgid "New" msgstr "Нові" #: src/bz-flathub-category.c:136 msgid "More New" msgstr "Показати більше" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:151 msgid "Recently Updated" msgstr "Нещодавно оновлені" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "Оновлені" #: src/bz-flathub-category.c:137 msgid "More Updated" msgstr "Показати більше" #: src/bz-flathub-category.c:138 msgid "Mobile" msgstr "Мобільні пристрої" #: src/bz-flathub-category.c:138 msgid "More Mobile" msgstr "Показати більше" #: src/bz-flathub-category.c:139 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:139 msgid "More Adwaita" msgstr "Показати більше" #: src/bz-flathub-category.c:140 msgid "KDE Apps" msgstr "Застосунки KDE" #: src/bz-flathub-category.c:140 msgid "More KDE Apps" msgstr "Показати більше" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub но дОданО" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Сховище Flathub но йуНО СнаКдонО на МОднОПу С Ваших встановлень" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub недоступний" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "Не вдалося зʼєднатися С Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for applications." msgstr "Ви всо ще можете шукати застосунки та керувати ниПи." #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "Шукати застосунки" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "Зʼєднатися СнОв" #: src/bz-flathub-page.blp:198 msgid "App of the Day" msgstr "Застосунок дня" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "На ходу" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "Застосунки для Ваших смартфонів та планшетів на Linux" #: src/bz-flathub-page.blp:284 src/bz-flathub-page.blp:319 msgid "More Mobile Apps" msgstr "Показати більше" #: src/bz-flathub-page.blp:375 msgid "We​ ♥​ Games" msgstr "Ми​ ♥​ ігри" #: src/bz-flathub-page.blp:388 msgid "Games and apps to run your favorite titles" msgstr "Улюблені ігри та застосунки для них" #: src/bz-flathub-page.blp:422 msgid "More Games" msgstr "Показати більше" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "Нічого но СнаКдонО" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "Спробуйте інший запит" #: src/bz-full-view.blp:41 msgid "Content" msgstr "Вміст" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "" "ĐŚĐľ передпрогляд на пристрої; деякі дрібниці можуть відрізнятися від оприлюднен" "ої версії" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "Передпроглянути вигляд у крамниці" #: src/bz-full-view.blp:235 msgid "_Support" msgstr "_Підтримати" #: src/bz-full-view.blp:460 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "ЌоК застосунок використовує середовище виконання, котре більше но отримує " "оновлень айО безпекових виправлень. Він ПОМо стати небезпечним Đ´Đž " "використання." #: src/bz-full-view.blp:548 msgid "Trash Data" msgstr "Перемістити дані в смітник" #: src/bz-full-view.blp:610 msgid "Add-ons" msgstr "Розширення" #: src/bz-full-view.blp:645 msgid "More Add-Ons" msgstr "Більше розширень" #: src/bz-full-view.blp:656 msgid "Links" msgstr "Посилання" #: src/bz-full-view.c:181 msgid "No URL" msgstr "Без URL" #: src/bz-full-view.c:199 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "ЌоК застосунок має вільну ліцензію. ĐŚĐľ означає, що початковий кОд ПОМо бути " "перевірено на безпечність." #: src/bz-full-view.c:200 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "ЌоК застосунок має невільну (власницьку) ліцензію. ĐŚĐľ означає, що початковий " "кОд но є публічно доступним і но ПОМо бути перевіреним на безпечність." #: src/bz-full-view.c:207 msgid "More Apps" msgstr "Більше застосунків" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "Більше від %s" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "Більше від розробників" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "Більше від %s" # Трохи дОвшиК переклад, айи зберегти статеву нейтральність наСви саПОгО застосунку. #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "" "Застосунок %s но встановлено, проте він має %s залишкових даних." #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "Інші застосунки" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d застосунок" msgstr[1] "%d застосунки" msgstr[2] "%d застосунків" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "Не вдалося видалити користувацькі дані" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "Підтримка пристроїв" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "Підтримка клавіатури" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "Вимагає клавіатуру" # Позначає, що застосунок ліпше працює С такими пристроями # Стан підтримки СагаНОП описується іншим рядком #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "Бажана клавіатура" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "Підтримує клавіатуру" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "Сумісність із клавіатурами на вкаСана" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "Підтримка миші" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "Вимагає Пишу айО вказівний пристрій" # Позначає, що застосунок ліпше працює С такими пристроями # Стан підтримки СагаНОП описується іншим рядком #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "Бажані Пиша айО вказівний пристрій" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "Підтримує Пишу айО вказівний пристрій" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "Сумісність із ПишаПи айО вказівними пристроями но вкаСана" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "Підтримка сенсорних екранів" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "Вимагає сенсорний екран" # Позначає, що застосунок ліпше працює С такими пристроями # Стан підтримки СагаНОП описується іншим рядком #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "Бажаний сенсорний екран" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "Підтримує сенсорний екран" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "Сумісність із сенсорними екранами на вкаСана" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "Підтримка мобільних пристроїв" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "Працює на мобільних пристроях" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "Обмежена підтримка на мобільних пристроях" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "Підтримка стільниць" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "Працює добре на великих екранах" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s найліпше працює на певних пристроях" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s працює на більшості пристроїв" #: src/bz-install-controls.blp:62 msgid "_Open" msgstr "_Запустити" #: src/bz-install-controls.blp:77 src/bz-install-controls.blp:134 msgid "Uninstall Application" msgstr "Видалити цей застосунок" #: src/bz-install-controls.blp:87 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_Видалити" #: src/bz-install-controls.blp:121 src/bz-updates-card.c:164 #: src/bz-updates-card.c:183 msgid "Update" msgstr "Оновлення" #: src/bz-install-controls.blp:144 src/bz-installed-tile.blp:105 msgid "Remove" msgstr "Видалити" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "Скасувати" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "Скасовуємо" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "Шукати встановлені застосунки" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "Очистити пОшук" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "Не СнаКдонО МОднОгО застосунку" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "Шукати в крамниці" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:112 msgid "Library" msgstr "Бібліотека" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "Оновлення в черзі" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "Завантажень" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "Нещодавно видалені" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "Очистити завершені завдання" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "Упорядкувати Са" #: src/bz-library-page.blp:348 msgid "Name" msgstr "Назва" #: src/bz-library-page.blp:354 msgid "Size" msgstr "Розмір" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "Жодного збігу Са ÂŤ%sÂť у переліку встановлених застосунків" #: src/bz-library-page.c:193 src/bz-updates-card.c:433 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "Доступне %u оновлення" msgstr[1] "Доступні %u оновлення" msgstr[2] "Доступні %u оновлень" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u встановлений застосунок" msgstr[1] "%u встановлені застосунки" msgstr[2] "%u встановлених застосунків" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "Долучитися" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "Дізнатися більше" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "Невідома ліцензія" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "Розроблено спільнотою" # Згідно перекладу на Flathub #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "ЌоК застосунок розробляється у відкритому доступі міжнародною спільнотою.\n" "\n" "Ви можете долучитися Đ´Đž проєкту та зробити КОгО ліпшим." #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "Ліцензія цього застосунку невідома" # Згідно перекладу на Flathub #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "ЌоК застосунок розробляється у відкритому доступі міжнародною спільнотою та " "випускається під %s.\n" "\n" "Ви можете долучитися Đ´Đž проєкту та зробити КОгО ліпшим." # Згідно перекладу на Flathub #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "ЌоК застосунок но розробляється у відкритому доступі, тому Нишо КОгО " "розробники знають, як він працює. Він ПОМо мати вразливості, які ваМкО " "виявити, і ПОМо змінюватися йоС нагляду.\n" "\n" "Ви можете но мати можливості долучитися Đ´Đž проєкту." #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "ЌоК застосунок розробляється на умовах власної ліцензії %s.\n" "\n" "Ви можете но мати можливості долучитися Đ´Đž проєкту." #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:49 msgid "License" msgstr "Ліцензія" #: src/bz-login-page.blp:5 src/bz-login-page.blp:44 msgid "Connect to Flathub" msgstr "Зʼєднатися С Flathub" #: src/bz-login-page.blp:34 msgid "Something Went Wrong" msgstr "Щось трапилось" #: src/bz-login-page.blp:45 msgid "Log in to sync your favorited apps across devices" msgstr "Увійдіть, айи синхронізувати уподобані застосунки між пристроями" #: src/bz-login-page.blp:112 msgid "Finish" msgstr "Завершити" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "Вітаємо, %s!" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "Оберіть файл metainfo" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "ФаКНи metainfo" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "Обрати піктограми (необовʼязково)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "ФаКНи зображень" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "Передпрогляд" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "Налаштування" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "Платне зʼєднання — автоматичне освіження вмісту крамниці призупинено" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:232 msgid "Refresh Manually" msgstr "Освіжити власноруч" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "Відсіяти вміст" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "Вільна ліцензія" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "Ховати власницькі (пропрієтарні) застосунки С огляду та пОшуку" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "Надходження Нишо С Flathub" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "" "Обмежити надходження у пОшуку та огляді Нишо Đ´Đž тих, що походять С Flathub" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "Лише підтверджені надходження" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "Ховати надходження, котрі но є підтвердженими на Flathub" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "Сховати осиротілі застосунки" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "" "Сховати застосунки, котрі більше но підтримуються вНасниПи розробниками" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "Вигляд сПуМки поступу" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "Акцентний колір" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "Барви Гордості" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "Лесбійський прапор" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "Барви Гордості чоловічої гомосексуальності" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "Трансґендерний прапор" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "Небінарний прапор" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "Бісексуальні барви Гордості" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "Асексуальні барви Гордості" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "Пансексуальний прапор" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "Аромантичний прапор" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "Ґендерфлюїдний прапор" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "Полісексуальний прапор" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "Омнісексуальний прапор" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "Прапор ароейс" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "Аґендерний прапор" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "Ґендерквірний прапор" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "Інтерсексуальний прапор" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "Деміґендерний прапор" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "Біромантичний прапор" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "Барви Незламності" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "Барви Гордості фембоїв" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "Барви Гордості нейтроїв" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:155 msgid "Version History" msgstr "Історія версій" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_Історія версій" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "Сьогодні" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "Учора" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d день тому" msgstr[1] "%d дні тому" msgstr[2] "%d днів тому" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d тиждень тому" msgstr[1] "%d тижні тому" msgstr[2] "%d тижнів тому" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d місяць тому" msgstr[1] "%d місяці тому" msgstr[2] "%d місяців тому" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d рік тому" msgstr[1] "%d роки тому" msgstr[2] "%d років тому" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "Версія %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "Без подробиць" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "Докладніше про випуск" #: src/bz-rich-app-tile.blp:217 msgid "Uninstall" msgstr "Видалити" # Сирець підказує, що це кнОпка завантаження #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:369 msgid "Get" msgstr "Завантажити" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "Невідомі дОСвОНи" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "ЌоК застосунок но має дозволів" #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "Немає дозволів" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "Застосунок повністю закритий у пісочниці" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "Доступ Đ´Đž мережі" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "Може доступатися Đ´Đž мережі" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "Без доступу Đ´Đž мережі" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "Не ПОМо доступатися Đ´Đž мережі" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "Доступ Đ´Đž пристроїв" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "" "Може доступатися Đ´Đž таких пристроїв, як вебкамера айО ігрові контролери" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "Без доступу Đ´Đž пристроїв" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "" "Не ПОМо доступатися Đ´Đž таких пристроїв, як вебкамера айО ігрові контролери" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "Доступ Đ´Đž пристроїв уведення" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "Може доступатися Đ´Đž пристроїв уведення" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "Доступ Đ´Đž мікрофону та відтворення Свуку" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "" "Може доступатися Đ´Đž мікрофону та програвати Свуки йоС додаткових запитів" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "Доступ Đ´Đž системних пристроїв" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "" "Може доступатися Đ´Đž системних пристроїв, котрі вимагають підвищених " "повноважень" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "Доступ Đ´Đž вмісту екрану" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "Може доступатися Đ´Đž вмісту на екрані та інших вікон" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "Застаріла система вікон" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "Завжди користує застарілу систему вікон (X11)" #: src/bz-safety-calculator.c:161 msgid "Arbitrary Permissions" msgstr "Власні дОСвОНи" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "Може набувати власних дозволів" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "Налаштування користувача" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "Може доступатися Đ´Đž та правити користувацькі налаштування" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "Повний доступ Đ´Đž читання та Сапису С/Đ´Đž файлової системи" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "Може читати та записувати будь-яке місце у файловій системі" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "Доступ Đ´Đž читання та Сапису домашньої теки" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "Може читати та записувати будь-яке місце Вашої домашньої теки" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "Повний доступ Đ´Đž читання файлової системи" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "Може читати будь-яке місце у файловій системі" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "Доступ Đ´Đž читання домашньої теки" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "Може читати будь-яке місце Вашої домашньої теки" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "Доступ Đ´Đž читання та Сапису теки завантажень" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "Може читати та записувати Đ´Đž Вашої теки завантажень" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "Доступ Đ´Đž читання теки завантажень" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "Може читати С Вашої теки завантажень" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "Може читати та записувати будь-яке місце у теці" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "Може читати будь-яке місце у теці" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "Без доступу Đ´Đž файлової системи" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "Не ПОМо доступатися файлової системи" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "Користує системні сервіси" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "Може запитувати дані від системних сервісів у обхід порталів" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "Користує сесійні сервіси" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "Може запитувати дані від сесійних сервісів у обхід порталів" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "Без доступу Đ´Đž сервісів" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "Не ПОМо запитувати дані в обхід порталів" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "Підтверджені розробники" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "Приналежність застосунку Đ´Đž заявлених розробників йуНО підтверджено" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "Власницький кОд" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "" "Початковий кОд но оприлюднено, відтак но ПОМо бути перевіреним та ПОМо бути но" "безпечним" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "Доступний кОду" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "" "Початковий кОд є оприлюдненим, що дозволяє перевірити КОгО на безпечність та С" "більшує імовірність, що він є безпечним" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "Користує системний сервіс %s" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "Користує сесійний сервіс %s" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "Користує сервіс %s" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "Може бачити сервіс у обхід порталу" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "Може звʼязуватися із сервісом пОСа порталом" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "Може володіти сервісом пОСа порталом" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "Сумісність із глобальним меню" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "Може показувати власні меню на глобальній панелі" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "Сумісність із налаштуваннями KDE" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "Може бачити зміни у налаштуваннях стільниці KDE" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "Загальні налаштування KDE" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "Може читати деякі налаштування стільниці KDE, як-от шрифти та кольори" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "Сервіс таємного сховку" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "" "Може зберігати та отримувати власні паролі С допомогою системної звʼязки ключі" "в" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "Сповіщення" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "Може надсилати стільничні сповіщення" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "Сумісність із системним лотком" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "Може показувати іконку в системному лотку" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "Сумісність із KDE Connect" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "Може взаємодіяти С пристроями, зʼєднаними через KDE Connect" #: src/bz-safety-dialog.blp:59 msgid "App ID" msgstr "ID застосунку" #: src/bz-safety-dialog.blp:69 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:100 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "ЌоК застосунок користує застарілу версію середовища виконання (SDK) і ПОМо " "містити пОПиНки та/айО прогалини йоСпоки, котрі вМо но будуть полагоджені." #: src/bz-safety-dialog.c:167 msgid "Safety" msgstr "Безпечність" #: src/bz-safety-dialog.c:226 #, c-format msgid "%s is Safe" msgstr "%s є безпечним" #: src/bz-safety-dialog.c:231 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s но має небезпечних дозволів" #: src/bz-safety-dialog.c:236 #, c-format msgid "%s is Probably Safe" msgstr "%s радше безпечний" #: src/bz-safety-dialog.c:241 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s імовірно небезпечний" #: src/bz-safety-dialog.c:246 #, c-format msgid "%s is Unsafe" msgstr "%s є небезпечним" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "Знімки" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "Попередній знімок" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "Наступний знімок" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "Копіювати знімок" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "Відновити масштаб" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "Віддалити" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "Наблизити" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "Карусель знімків" #: src/bz-screenshots-carousel.blp:117 msgid "Open Screenshot Viewer" msgstr "Відкрити переглядач знімків" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "Відсіяти" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_Підтверджені" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_Вільні/Безкоштовні" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "Без _осиротілих" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "Відсіяти осиротілі застосунки" #: src/bz-search-filter-popover.blp:57 msgid "Categories" msgstr "Категорії" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "Шукайте застосунки, ігри та програми" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "Відсіяти пОшук" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "Очистити пОшук" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "Шукати в категоріях" #: src/bz-search-page.blp:242 msgid "Categories Unavailable" msgstr "Категорії недоступні" #: src/bz-search-page.blp:243 msgid "Search for apps using the search bar above." msgstr "Шукайте застосунки Са допомогою рядка згори." #: src/bz-search-page.blp:360 msgid "No Applications Found" msgstr "Жодного підібраного застосунку" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "Не СнаКдонО збігів для ÂŤ%sÂť на Flathub" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "Відео" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "Офіс" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "Календар" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "Спілкування" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "Малювання" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Торент" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "Емулятори" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Сторінка Flathub" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "URL проєкту" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Відстеження пОПиНОк" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "ЧаПи" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "Допомога" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "Пожертви" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "Переклад" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "Звʼязок" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "Початковий кОд" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "Долучитися" #: src/bz-share-list.c:325 msgid "Copy Link" msgstr "Копіювати посилання" # https://slovotvir.org.ua/words/taimlain #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "Часоряд" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "Встановлень:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Світ" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "Від 15 квітня 2024 р." #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM встановлень СагаНОП" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK встановлень СагаНОП" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "%'d встановлень СагаНОП" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "Лишити користувацькі дані" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "Надає можливість відновити налаштування та вміст у майбутньому" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "Видалити усі дані" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "Назавжди видалити користувацьку дані цього застосунку" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "Встановити %s?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "" "Оберіть версію Đ´Đž встановлення. ТакОМ ПОМо бути встановлено додаткові кОПпОнон" "ти." #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "Можуть бути встановлені додаткові компоненти" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_Скасувати" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_Встановити" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "Видалити %s?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "Оберіть версію Đ´Đž видалення" #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "%s но ПОМна йудо користати після видалення." #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "ÂŤ%sÂť має висОкиК ризик" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "ЌоК застосунок має пОвниК доступ Đ´Đž Вашої системи, історії оглядача, збережени" "х паролів, тощо. Він також має доступ Đ´Đž " "мережі, що створює КОПу можливість надсилати Ваші дані стороннім ОсОйаП.\n" "\n" "Оскільки застосунок є закритим (власницьким), то ноПОМНивО перевірити, що " "він робить із цими дОСвОНаПи." #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "ЌоК застосунок користує застарілий сервер керування вікнами X11, що дозволяє С" "астосунку записувати усі натискання клавіш, отримувати знімки екрану, та стежи" "ти Са іншими застосунками. Він також має доступ Đ´Đž " "мережі, що дає КОПу можливість надсилати Ваші дані стороннім ОсОйаП.\n" "\n" "Оскільки застосунок є закритим (власницьким), то ноПОМНивО перевірити, що " "він робить із цими дОСвОНаПи." #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_Встановити попри це" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "Не вдалося завантажити віконце операцій" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "Усі застосунки вМо встановлені" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_Гаразд" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "Встановити %u застосунок?" msgstr[1] "Встановити %u застосунки?" msgstr[2] "Встановити %u застосунків?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "" "Усо зазначене йудо встановлено. ТакОМ ПОМо бути встановлено додаткові кОПпОнон" "ти." #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "Буде встановлено %d розширень." #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "Крім того, будуть установлені розширення." #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_Встановити всі" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "Завершено Са %.02f сок" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "Розширення застосунків" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "Середовище виконання" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "ĐŁ черзі" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "Готово" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "ХкасОванО" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "Помилка" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "Скасувати дію" #: src/bz-transaction-tile.blp:436 msgid "Show Error Info" msgstr "Докладніше про пОПиНку" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "Звільнено %s" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "Помилка дії" #: src/bz-transaction.c:344 msgid "Pending" msgstr "ĐŁ черзі" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "_Оновити всі" #: src/bz-updates-card.c:211 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u оновлення середовища виконання" msgstr[1] "%u оновлення середовищ виконання" msgstr[2] "%u оновлень середовищ виконання" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "Керувати СаНишкОвиПи даниПи" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "Користувацьких даних но СнаКдонО" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "Користувацькі дані" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "Пересунути користувацькі дані Đ´Đž смітника" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "Користувацькі дані %s йуНО пересунуто Đ´Đž смітника" #: src/bz-window.blp:70 msgid "Refreshing" msgstr "Освіження" #: src/bz-window.blp:88 msgid "Curated" msgstr "Підібрані" #: src/bz-window.blp:100 msgid "Explore" msgstr "Огляд" #: src/bz-window.blp:127 msgid "Search" msgstr "Пошук" #: src/bz-window.blp:212 msgid "Main Menu" msgstr "Головне меню" #: src/bz-window.blp:223 msgid "You are running a new version of Bazaar!" msgstr "Ви запустили нОву версію Базару!" #: src/bz-window.blp:224 msgid "See What's New" msgstr "Огляньте зміни" #: src/bz-window.blp:231 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "Ви маєте зʼєднання С мережею, аНо переглядаєте кошОвану версію Flathub" #: src/bz-window.blp:276 msgid "_Donate to Bazaar" msgstr "_Пожертувати Базару" #: src/bz-window.blp:283 msgid "_Refresh" msgstr "_Освіжити" #: src/bz-window.blp:288 msgid "_Preferences" msgstr "_Налаштування" #: src/bz-window.blp:293 msgid "_Login With Flathub" msgstr "_Увійти С допомогою Flathub" #: src/bz-window.blp:299 msgid "_Manage Leftover User Data" msgstr "_Керувати СаНишкОвиПи даниПи" #: src/bz-window.blp:304 msgid "_Keyboard Shortcuts" msgstr "_Клавіатурні скорочення" #: src/bz-window.blp:309 msgid "_About Bazaar" msgstr "_Про Базар" #: src/bz-window.blp:316 msgid "_Quit Bazaar" msgstr "_Вийти" #: src/bz-window.blp:341 msgid "Log Out" msgstr "Вийти" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Базар — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "Не вдалося запустити застосунок" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "Ви но можете видалити Базар у Базарі!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "Наразі цього но ПОМна зробити!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "Встановлення" msgstr[1] "Встановлення" msgstr[2] "Встановлень" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "Навігація" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "Відкрити огляд" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "Відкрити бібліотеку" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "Відкрити вікно пОшуку" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "Віддалені сховища" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "Освіжити віддалені сховища" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "Загальні" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Налаштування" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Показати клавіатурні скорочення" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "Закрити вікно" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "Вийти С Базару" bazaar-org-bazaar-b6e9a65/po/vi.po000066400000000000000000001376061522167256300170420ustar00rootroot00000000000000# Vietnamese translations for bazaar package. # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # Loc Huynh , 2025. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-02 18:34+0700\n" "PO-Revision-Date: 2025-12-10 18:23+0700\n" "Last-Translator: Loc Huynh \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Gtranslator 49.0\n" #: data/io.github.kolunmi.Bazaar.desktop.in:3 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:5 #: src/bz-window.blp:234 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:4 msgid "Add, remove or update flatpak software on this computer" msgstr "ThĂŞm, xĂła hoạc cáş­p nháş­t pháş§n mᝁm Flatpak trĂŞn mĂĄy tĂ­nh nĂ y" #: data/io.github.kolunmi.Bazaar.desktop.in:10 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;TrĂŹnh quản lĂ˝ gĂłi; " "KhĂĄm phĂĄ; Pháş§n mᝁm; Cáť­a hĂ ng;" #: data/io.github.kolunmi.Bazaar.gschema.xml:6 msgid "Hide EOL Entries" msgstr "Ẩn cĂĄc m᝼c EOL" #: data/io.github.kolunmi.Bazaar.gschema.xml:7 msgid "Hide EOL entries and entries depending on them" msgstr "Ẩn cĂĄc m᝼c EOL vĂ  cĂĄc m᝼c ph᝼ thuộc vĂ o chĂşng" #: data/io.github.kolunmi.Bazaar.gschema.xml:11 msgid "Show Git Forge Star Counts" msgstr "Hiᝃn thị số sao trĂŞn Git Forge" #: data/io.github.kolunmi.Bazaar.gschema.xml:12 msgid "" "Whether to attempt to detect and show \"star counts\" for projects in the " "full view" msgstr "" "CĂł cố gắng phĂĄt hiện vĂ  hiᝃn thị \"số sao\" cho cĂĄc dáťą ĂĄn trong cháşż độ xem " "chi tiáşżt hay khĂ´ng" #: data/io.github.kolunmi.Bazaar.gschema.xml:16 msgid "Only Show Free Software" msgstr "Chỉ hiᝃn thị pháş§n mᝁm miễn phĂ­" #: data/io.github.kolunmi.Bazaar.gschema.xml:17 msgid "Hide proprietary software" msgstr "Ẩn pháş§n mᝁm độc quyᝁn" #: data/io.github.kolunmi.Bazaar.gschema.xml:21 msgid "Show Only Flathub Content" msgstr "Chỉ hiᝃn thị nội dung Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:22 msgid "Hide applications which do not originate from Flathub" msgstr "Ẩn cĂĄc ᝊng d᝼ng khĂ´ng cĂł nguồn gốc tᝍ Flathub" #: data/io.github.kolunmi.Bazaar.gschema.xml:26 msgid "Debounce Search Inputs" msgstr "TrĂŹ hoĂŁn tĂŹm kiáşżm" #: data/io.github.kolunmi.Bazaar.gschema.xml:27 msgid "Add a delay before searching to prevent instant replies while typing" msgstr "ThĂŞm độ trễ trước khi tĂŹm kiáşżm để trĂĄnh phản hồi tᝊc thĂŹ khi đang gĂľ" #: data/io.github.kolunmi.Bazaar.gschema.xml:51 msgid "Global Progress Bar Theme" msgstr "Cháť§ đề thanh tiáşżn trĂŹnh toĂ n c᝼c" #: data/io.github.kolunmi.Bazaar.gschema.xml:52 msgid "Describes the look of the global progress bar" msgstr "MĂ´ tả giao diện cáť§a thanh tiáşżn trĂŹnh toĂ n c᝼c" #: data/io.github.kolunmi.Bazaar.gschema.xml:56 msgid "Saved Window Dimensions" msgstr "KĂ­ch thước cáť­a sổ đã lưu" #: data/io.github.kolunmi.Bazaar.gschema.xml:57 msgid "The window dimensions to be used by the next Bazaar window" msgstr "KĂ­ch thước cáť­a sổ sáş˝ được sáť­ d᝼ng cho cáť­a sổ Bazaar tiáşżp theo" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install applications" msgstr "KhĂĄm phĂĄ vĂ  cĂ i đặt ᝊng d᝼ng" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A new app store for GNOME with a focus on discovering and installing " "applications and addons from Flatpak remotes, particularly Flathub." msgstr "" "Một cáť­a hĂ ng ᝊng d᝼ng mới cho GNOME táş­p trung vĂ o việc khĂĄm phĂĄ vĂ  cĂ i đặt " "ᝊng d᝼ng cĂšng tiện Ă­ch mở rộng tᝍ cĂĄc remote Flatpak, đặc biệt lĂ  Flathub." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:14 msgid "" "It emphasizes supporting the developers who make the Linux desktop possible. " "Bazaar features a \"curated\" tab that can be configured by distributors to " "allow for a more localized experience." msgstr "" "NĂł nhẼn mấnh việc hỗ trᝣ cĂĄc nhĂ  phĂĄt triᝃn lĂ m nĂŞn mĂ´i trường desktop " "Linux. Bazaar cĂł tab \"chọn lọc\" cĂł thᝃ được nhĂ  phân phối cẼu hĂŹnh để mang " "lấi trải nghiệm địa phưƥng hĂła tốt hĆĄn." #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:29 src/bz-application.c:661 msgid "Adam Masciola" msgstr "Adam Masciola" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:54 msgid "The home page displaying Flathub apps" msgstr "Trang cháť§ hiᝃn thị cĂĄc ᝊng d᝼ng Flathub" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:58 msgid "Nucleus app page" msgstr "Trang ᝊng d᝼ng Nucleus" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:62 msgid "Search page" msgstr "Trang tĂŹm kiáşżm" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:66 msgid "Category page" msgstr "Trang danh m᝼c" #: src/bz-addons-dialog.blp:14 src/bz-full-view.blp:668 msgid "Manage Add-ons" msgstr "Quản lĂ˝ tiện Ă­ch mở rộng" #: src/bz-addons-dialog.c:90 src/bz-full-view.blp:505 #: src/bz-transaction-view.blp:212 src/bz-window.c:1125 msgid "Remove" msgstr "Gᝥ bỏ" #: src/bz-addons-dialog.c:95 src/bz-full-view.blp:277 src/bz-full-view.blp:492 #: src/bz-transaction-view.blp:186 src/bz-window.c:1102 msgid "Install" msgstr "CĂ i đặt" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:50 #: src/bz-full-view.c:385 src/bz-full-view.c:392 msgid "Age Rating" msgstr "Xáşżp hấng độ tuổi" #: src/bz-age-rating-dialog.blp:40 src/bz-age-rating-dialog.c:790 msgid "?" msgstr "?" #: src/bz-age-rating-dialog.c:139 msgid "Cartoon Violence" msgstr "Bấo láťąc hoất hĂŹnh" #: src/bz-age-rating-dialog.c:140 msgid "No information regarding cartoon violence" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ bấo láťąc hoất hĂŹnh" #: src/bz-age-rating-dialog.c:143 msgid "Fantasy Violence" msgstr "Bấo láťąc giả tưởng" #: src/bz-age-rating-dialog.c:144 msgid "No information regarding fantasy violence" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ bấo láťąc giả tưởng" #: src/bz-age-rating-dialog.c:147 msgid "Realistic Violence" msgstr "Bấo láťąc tháťąc táşż" #: src/bz-age-rating-dialog.c:148 msgid "No information regarding realistic violence" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ bấo láťąc tháťąc táşż" #: src/bz-age-rating-dialog.c:151 msgid "Violence Depicting Bloodshed" msgstr "Bấo láťąc cĂł mĂĄu" #: src/bz-age-rating-dialog.c:152 msgid "No information regarding bloodshed" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ cảnh đổ mĂĄu" #: src/bz-age-rating-dialog.c:155 msgid "Sexual Violence" msgstr "Bấo láťąc tĂŹnh d᝼c" #: src/bz-age-rating-dialog.c:156 msgid "No information regarding sexual violence" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ bấo láťąc tĂŹnh d᝼c" #: src/bz-age-rating-dialog.c:159 msgid "Alcohol" msgstr "Rưᝣu bia" #: src/bz-age-rating-dialog.c:160 msgid "No information regarding references to alcohol" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến rưᝣu bia" #: src/bz-age-rating-dialog.c:163 msgid "Narcotics" msgstr "Ma tĂşy" #: src/bz-age-rating-dialog.c:164 msgid "No information regarding references to illicit drugs" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến ma tĂşy" #: src/bz-age-rating-dialog.c:167 msgid "Tobacco" msgstr "Thuốc lĂĄ" #: src/bz-age-rating-dialog.c:168 msgid "No information regarding references to tobacco products" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến sản phẊm thuốc lĂĄ" #: src/bz-age-rating-dialog.c:171 src/bz-age-rating-dialog.c:358 msgid "Nudity" msgstr "Khỏa thân" #: src/bz-age-rating-dialog.c:172 msgid "No information regarding nudity of any sort" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ cảnh khỏa thân" #: src/bz-age-rating-dialog.c:175 msgid "Sexual Themes" msgstr "Cháť§ đề tĂŹnh d᝼c" #: src/bz-age-rating-dialog.c:176 msgid "No information regarding references to or depictions of sexual nature" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p hoạc mĂ´ tả tĂ­nh chẼt tĂŹnh d᝼c" #: src/bz-age-rating-dialog.c:179 msgid "Profanity" msgstr "NgĂ´n tᝍ thĂ´ t᝼c" #: src/bz-age-rating-dialog.c:180 msgid "No information regarding profanity of any kind" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ ngĂ´n tᝍ thĂ´ t᝼c" #: src/bz-age-rating-dialog.c:183 msgid "Inappropriate Humor" msgstr "HĂ i khĂ´ng phĂš hᝣp" #: src/bz-age-rating-dialog.c:184 msgid "No information regarding inappropriate humor" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ hĂ i khĂ´ng phĂš hᝣp" #: src/bz-age-rating-dialog.c:187 msgid "Discrimination" msgstr "Káťł thị" #: src/bz-age-rating-dialog.c:188 msgid "No information regarding discriminatory language of any kind" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ ngĂ´n ngᝯ káťł thị" #: src/bz-age-rating-dialog.c:191 msgid "Advertising" msgstr "Quảng cĂĄo" #: src/bz-age-rating-dialog.c:192 msgid "No information regarding advertising of any kind" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ quảng cĂĄo" #: src/bz-age-rating-dialog.c:195 msgid "Gambling" msgstr "Cờ bấc" #: src/bz-age-rating-dialog.c:196 msgid "No information regarding gambling of any kind" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ cờ bấc" #: src/bz-age-rating-dialog.c:199 msgid "Purchasing" msgstr "Mua hĂ ng" #: src/bz-age-rating-dialog.c:200 msgid "No information regarding the ability to spend money" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ khả năng chi tiĂŞu tiᝁn" #: src/bz-age-rating-dialog.c:203 msgid "Chat Between Users" msgstr "Trò chuyện giᝯa người dĂšng" #: src/bz-age-rating-dialog.c:204 msgid "No information regarding ways to chat with other users" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ cĂĄch trò chuyện với người dĂšng khĂĄc" #: src/bz-age-rating-dialog.c:207 msgid "Audio Chat Between Users" msgstr "Trò chuyện âm thanh giᝯa người dĂšng" #: src/bz-age-rating-dialog.c:208 msgid "No information regarding ways to talk with other users" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ cĂĄch nĂłi chuyện với người dĂšng khĂĄc" #: src/bz-age-rating-dialog.c:211 msgid "Contact Details" msgstr "ThĂ´ng tin liĂŞn hệ" #: src/bz-age-rating-dialog.c:212 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "" "KhĂ´ng cĂł thĂ´ng tin vᝁ việc chia sáşť tĂŞn người dĂšng mấng xĂŁ hội hoạc địa chỉ " "email" #: src/bz-age-rating-dialog.c:215 msgid "Identifying Information" msgstr "ThĂ´ng tin nháş­n dấng" #: src/bz-age-rating-dialog.c:216 msgid "No information regarding sharing of user information with third parties" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ việc chia sáşť thĂ´ng tin người dĂšng với bĂŞn thᝊ ba" #: src/bz-age-rating-dialog.c:219 msgid "Location Sharing" msgstr "Chia sáşť vị trĂ­" #: src/bz-age-rating-dialog.c:220 msgid "No information regarding sharing of physical location with other users" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ việc chia sáşť vị trĂ­ tháťąc với người dĂšng khĂĄc" #: src/bz-age-rating-dialog.c:223 msgid "Prostitution" msgstr "Mấi dâm" #: src/bz-age-rating-dialog.c:224 msgid "No information regarding references to prostitution" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến mấi dâm" #: src/bz-age-rating-dialog.c:227 msgid "Adultery" msgstr "Ngoấi tĂŹnh" #: src/bz-age-rating-dialog.c:228 msgid "No information regarding references to adultery" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến ngoấi tĂŹnh" #: src/bz-age-rating-dialog.c:231 msgid "Sexualized Characters" msgstr "Nhân váş­t tĂŹnh d᝼c hĂła" #: src/bz-age-rating-dialog.c:232 msgid "No information regarding sexualized characters" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ nhân váş­t tĂŹnh d᝼c hĂła" #: src/bz-age-rating-dialog.c:235 msgid "Desecration" msgstr "BĂĄng bổ" #: src/bz-age-rating-dialog.c:236 msgid "No information regarding references to desecration" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến bĂĄng bổ" #: src/bz-age-rating-dialog.c:239 msgid "Human Remains" msgstr "XĂĄc người" #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ hiᝃn thị xĂĄc người cháşżt" #: src/bz-age-rating-dialog.c:243 msgid "Slavery" msgstr "NĂ´ lệ" #: src/bz-age-rating-dialog.c:244 msgid "No information regarding references to slavery" msgstr "KhĂ´ng cĂł thĂ´ng tin vᝁ đề cáş­p đến cháşż độ nĂ´ lệ" #: src/bz-age-rating-dialog.c:307 msgid "Does not include references to drugs" msgstr "KhĂ´ng đề cáş­p đến ma tĂşy" #: src/bz-age-rating-dialog.c:309 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "KhĂ´ng chᝊa cháť­i thᝁ, ngĂ´n tᝍ thĂ´ t᝼c vĂ  cĂĄc loấi ngĂ´n ngᝯ mấnh khĂĄc" #: src/bz-age-rating-dialog.c:311 msgid "Does not include ads or monetary transactions" msgstr "KhĂ´ng chᝊa quảng cĂĄo hoạc giao dịch tiᝁn tệ" #: src/bz-age-rating-dialog.c:313 msgid "Does not include sex or nudity" msgstr "KhĂ´ng chᝊa tĂŹnh d᝼c hoạc khỏa thân" #: src/bz-age-rating-dialog.c:315 msgid "Does not include uncontrolled chat functionality" msgstr "KhĂ´ng cĂł chᝊc năng trò chuyện khĂ´ng kiᝃm soĂĄt" #: src/bz-age-rating-dialog.c:317 msgid "Does not include violence" msgstr "KhĂ´ng chᝊa bấo láťąc" #: src/bz-age-rating-dialog.c:352 msgid "Drugs" msgstr "Ma tĂşy" #: src/bz-age-rating-dialog.c:354 msgid "Strong Language" msgstr "NgĂ´n ngᝯ mấnh" #: src/bz-age-rating-dialog.c:356 msgid "Money" msgstr "Tiᝁn bấc" #: src/bz-age-rating-dialog.c:360 msgid "Social" msgstr "XĂŁ hội" #: src/bz-age-rating-dialog.c:362 msgid "Violence" msgstr "Bấo láťąc" #: src/bz-age-rating-dialog.c:564 #, c-format msgid "%s • %s" msgstr "%s • %s" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:752 src/bz-full-view.c:375 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:782 msgctxt "Age rating" msgid "All" msgstr "Mọi lᝊa tuổi" #: src/bz-age-rating-dialog.c:846 #, c-format msgid "%s has an unknown age rating" msgstr "%s cĂł xáşżp hấng độ tuổi khĂ´ng xĂĄc định" #: src/bz-age-rating-dialog.c:854 #, c-format msgid "%s is suitable for everyone" msgstr "%s phĂš hᝣp với mọi người" #: src/bz-age-rating-dialog.c:857 #, c-format msgid "%s is suitable for toddlers" msgstr "%s phĂš hᝣp với tráşť mẍu giĂĄo" #: src/bz-age-rating-dialog.c:860 #, c-format msgid "%s is suitable for young children" msgstr "%s phĂš hᝣp với tráşť nhỏ" #: src/bz-age-rating-dialog.c:863 #, c-format msgid "%s is suitable for children" msgstr "%s phĂš hᝣp với tráşť em" #: src/bz-age-rating-dialog.c:866 #, c-format msgid "%s is suitable for teenagers" msgstr "%s phĂš hᝣp với thiáşżu niĂŞn" #: src/bz-age-rating-dialog.c:869 #, c-format msgid "%s is suitable for adults" msgstr "%s phĂš hᝣp với người lớn" #: src/bz-age-rating-dialog.c:872 #, c-format msgid "%s is suitable for %s" msgstr "%s phĂš hᝣp với %s" #: src/bz-app-size-dialog.blp:43 msgid "--- MB" msgstr "--- MB" #: src/bz-app-size-dialog.blp:53 msgid "Download Size" msgstr "KĂ­ch thước tải vᝁ" #: src/bz-app-size-dialog.c:55 msgid "Of the size of human DNA" msgstr "KĂ­ch thước cáť§a DNA người" #: src/bz-app-size-dialog.c:55 msgid "3 billion base pairs" msgstr "3 tᝡ cạp base" #: src/bz-app-size-dialog.c:56 msgid "Of the Linux Kernel" msgstr "KĂ­ch thước cáť§a Linux Kernel" #: src/bz-app-size-dialog.c:56 msgid "linux-6.17.tar.xz" msgstr "linux-6.17.tar.xz" #: src/bz-app-size-dialog.c:57 msgid "Of the Apollo 11 guidance computer" msgstr "KĂ­ch thước cáť§a mĂĄy tĂ­nh dẍn đường Apollo 11" #: src/bz-app-size-dialog.c:57 msgid "Total ROM and RAM" msgstr "Tổng ROM vĂ  RAM" #: src/bz-app-size-dialog.c:58 msgid "Of the original Super Mario Bros" msgstr "KĂ­ch thước cáť§a Super Mario Bros gốc" #: src/bz-app-size-dialog.c:58 msgid "On the NES" msgstr "TrĂŞn NES" #: src/bz-app-size-dialog.c:59 msgid "Of the size of Wikipedia" msgstr "KĂ­ch thước cáť§a Wikipedia" #: src/bz-app-size-dialog.c:59 msgid "Without any media" msgstr "KhĂ´ng cĂł media" #: src/bz-application.c:556 msgid "" "This functionality is currently disabled. It is recommended you download and " "install Flatseal to manage app permissions." msgstr "" "Chᝊc năng nĂ y hiện bị tắt. Khuyáşżn nghị bấn tải vĂ  cĂ i Flatseal để quản lĂ˝ " "quyᝁn ᝊng d᝼ng." #: src/bz-application.c:638 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:639 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:664 msgid "translator-credits" msgstr "Loc Huynh , 2025" #: src/bz-application.c:788 msgid "Performing setup..." msgstr "Đang tháťąc hiện thiáşżt láş­p..." #: src/bz-application.c:817 src/bz-application.c:826 msgid "Set Up Flathub" msgstr "Thiáşżt láş­p Flathub" #: src/bz-application.c:820 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub chưa được thiáşżt láş­p trĂŞn hệ thống nĂ y. Bấn sáş˝ khĂ´ng thᝃ duyệt vĂ  cĂ i " "đặt ᝊng d᝼ng trong Bazaar náşżu nĂł khĂ´ng khả d᝼ng.\n" "\n" "Bấn vẍn cĂł thᝃ dĂšng Bazaar để duyệt vĂ  gᝥ bỏ cĂĄc ᝊng d᝼ng đã cĂ i." #: src/bz-application.c:825 src/bz-update-dialog.blp:6 msgid "Later" msgstr "Đᝃ sau" #: src/bz-application.c:1225 msgid "Synchronizing..." msgstr "Đang đồng bộ hĂła..." #: src/bz-application.c:1364 #, c-format msgid "Receiving %d entries..." msgstr "Đang nháş­n %d m᝼c..." #: src/bz-application.c:1369 msgid "Checking for updates..." msgstr "Đang kiᝃm tra cáş­p nháş­t..." #: src/bz-curated-view.blp:11 src/bz-flathub-page.blp:19 #: src/bz-full-view.blp:54 src/bz-installed-page.blp:15 src/bz-window.blp:183 msgid "Empty" msgstr "Trống" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "KhĂ´ng cĂł láťąa chọn" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "" "KhĂ´ng cĂł thĂ´ng tin chọn lọc trĂŞn hệ thống nĂ y. Bấn vẍn cĂł thᝃ duyệt ᝊng d᝼ng " "trĂŞn Flathub" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "Duyệt Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "Ngoấi tuyáşżn" #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:40 msgid "Browser" msgstr "TrĂŹnh duyệt" #: src/bz-developer-badge.c:131 msgid "Developer information not available." msgstr "ThĂ´ng tin nhĂ  phĂĄt triᝃn khĂ´ng khả d᝼ng." #: src/bz-developer-badge.c:137 src/bz-developer-badge.c:151 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "" "Quyᝁn sở hᝯu ID ᝊng d᝼ng %s chưa được xĂĄc minh vĂ  cĂł thᝃ lĂ  gĂłi cộng đồng." #: src/bz-developer-badge.c:155 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "Quyᝁn sở hᝯu ID ᝊng d᝼ng %s đã được đội ngĹŠ Flathub xĂĄc minh tháť§ cĂ´ng." #: src/bz-developer-badge.c:161 #, c-format msgid "" "The ownership of the %s app ID has been verified by %s on %s." msgstr "Quyᝁn sở hᝯu ID ᝊng d᝼ng %s đã được %s xĂĄc minh trĂŞn %s." #: src/bz-developer-badge.c:168 #, c-format msgid "The ownership of the %s app ID has been verified using %s." msgstr "Quyᝁn sở hᝯu ID ᝊng d᝼ng %s đã được xĂĄc minh báşąng %s." #: src/bz-developer-badge.c:172 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "Quyᝁn sở hᝯu ID ᝊng d᝼ng %s đã được xĂĄc minh." #: src/bz-entry-inspector.blp:5 msgid "Entry Inspector" msgstr "TrĂŹnh kiᝃm tra m᝼c" #: src/bz-entry-inspector.blp:76 msgid "Serialize" msgstr "Chuyᝃn thĂ nh chuỗi" #: src/bz-entry-inspector.blp:80 msgid "Convert to JSON" msgstr "Chuyᝃn sang JSON" #: src/bz-error.c:68 msgid "An Error Occurred" msgstr "Đã xảy ra lỗi" #: src/bz-error.c:89 msgid "Close" msgstr "Đóng" #: src/bz-error.c:90 msgid "Copy and Close" msgstr "Sao chĂŠp vĂ  đóng" #: src/bz-featured-tile.blp:88 msgid "App of the Day" msgstr "ᝨng d᝼ng cáť§a ngĂ y" #: src/bz-flathub-category.c:78 msgid "Audio & Video" msgstr "Âm thanh & Video" #: src/bz-flathub-category.c:78 msgid "Media" msgstr "Đa phưƥng tiện" #: src/bz-flathub-category.c:78 msgid "More Audio & Video" msgstr "ThĂŞm Âm thanh & Video" #: src/bz-flathub-category.c:79 msgid "Developer Tools" msgstr "CĂ´ng c᝼ phĂĄt triᝃn" #: src/bz-flathub-category.c:79 msgid "Develop" msgstr "PhĂĄt triᝃn" #: src/bz-flathub-category.c:79 msgid "More Developer Tools" msgstr "ThĂŞm CĂ´ng c᝼ phĂĄt triᝃn" #: src/bz-flathub-category.c:80 msgid "Education" msgstr "GiĂĄo d᝼c" #: src/bz-flathub-category.c:80 msgid "Learn" msgstr "Học táş­p" #: src/bz-flathub-category.c:80 msgid "More Education" msgstr "ThĂŞm GiĂĄo d᝼c" #: src/bz-flathub-category.c:81 msgid "Gaming" msgstr "Trò chĆĄi" #: src/bz-flathub-category.c:81 msgid "Play" msgstr "ChĆĄi" #: src/bz-flathub-category.c:81 msgid "More Gaming" msgstr "ThĂŞm Trò chĆĄi" #: src/bz-flathub-category.c:82 msgid "Graphics & Photography" msgstr "Đồ họa & Nhiáşżp ảnh" #: src/bz-flathub-category.c:82 msgid "Create" msgstr "SĂĄng tấo" #: src/bz-flathub-category.c:82 msgid "More Graphics & Photography" msgstr "ThĂŞm Đồ họa & Nhiáşżp ảnh" #: src/bz-flathub-category.c:83 msgid "Networking" msgstr "Mấng" #: src/bz-flathub-category.c:83 msgid "Internet" msgstr "Internet" #: src/bz-flathub-category.c:83 msgid "More Networking" msgstr "ThĂŞm Mấng" #: src/bz-flathub-category.c:84 msgid "Productivity" msgstr "Năng suẼt" #: src/bz-flathub-category.c:84 msgid "Work" msgstr "CĂ´ng việc" #: src/bz-flathub-category.c:84 msgid "More Productivity" msgstr "ThĂŞm Năng suẼt" #: src/bz-flathub-category.c:85 msgid "Science" msgstr "Khoa học" #: src/bz-flathub-category.c:85 msgid "More Science" msgstr "ThĂŞm Khoa học" #: src/bz-flathub-category.c:86 msgid "System" msgstr "Hệ thống" #: src/bz-flathub-category.c:86 msgid "More System" msgstr "ThĂŞm Hệ thống" #: src/bz-flathub-category.c:87 msgid "Utilities" msgstr "Tiện Ă­ch" #: src/bz-flathub-category.c:87 msgid "Tools" msgstr "CĂ´ng c᝼" #: src/bz-flathub-category.c:87 msgid "More Utilities" msgstr "ThĂŞm Tiện Ă­ch" #: src/bz-flathub-category.c:88 src/bz-flathub-page.blp:110 #: src/bz-flathub-page.blp:143 msgid "Trending" msgstr "Thịnh hĂ nh" #: src/bz-flathub-category.c:88 msgid "More Trending" msgstr "ThĂŞm Thịnh hĂ nh" #: src/bz-flathub-category.c:89 src/bz-flathub-page.blp:116 #: src/bz-flathub-page.blp:176 msgid "Popular" msgstr "Phổ biáşżn" #: src/bz-flathub-category.c:89 msgid "More Popular" msgstr "ThĂŞm Phổ biáşżn" #: src/bz-flathub-category.c:90 src/bz-flathub-page.blp:165 msgid "Recently Added" msgstr "Mới thĂŞm gáş§n đây" #: src/bz-flathub-category.c:90 src/bz-flathub-page.blp:122 msgid "New" msgstr "Mới" #: src/bz-flathub-category.c:90 msgid "More New" msgstr "ThĂŞm Mới" #: src/bz-flathub-category.c:91 src/bz-flathub-page.blp:154 msgid "Recently Updated" msgstr "Mới cáş­p nháş­t gáş§n đây" #: src/bz-flathub-category.c:91 src/bz-flathub-page.blp:128 msgid "Updated" msgstr "Đã cáş­p nháş­t" #: src/bz-flathub-category.c:91 msgid "More Updated" msgstr "ThĂŞm Đã cáş­p nháş­t" #: src/bz-flathub-category.c:92 msgid "Mobile" msgstr "Di động" #: src/bz-flathub-category.c:92 msgid "More Mobile" msgstr "ThĂŞm Di động" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub chưa được thĂŞm" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "Remote Flathub khĂ´ng được tĂŹm thẼy trong bẼt káťł cĂ i đặt Flatpak nĂ o" #: src/bz-flathub-page.blp:48 msgid "Flathub Unavailable" msgstr "Flathub khĂ´ng khả d᝼ng" #: src/bz-flathub-page.blp:49 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "" "KhĂ´ng thᝃ káşżt nối đến Flathub. Bấn vẍn cĂł thᝃ quản lĂ˝ vĂ  tĂŹm kiáşżm ᝊng d᝼ng." #: src/bz-flathub-page.blp:52 msgid "Search Apps" msgstr "TĂŹm kiáşżm ᝊng d᝼ng" #: src/bz-flathub-page.blp:261 msgid "On the Go" msgstr "Di động" #: src/bz-flathub-page.blp:273 msgid "Apps for your Linux phones and tablets" msgstr "ᝨng d᝼ng cho điện thoấi vĂ  mĂĄy tĂ­nh bảng Linux" #: src/bz-flathub-page.blp:284 msgid "More Mobile Apps" msgstr "ThĂŞm ᝨng d᝼ng di động" #: src/bz-flathub-page.blp:319 msgid "More Mobile apps" msgstr "ThĂŞm ᝊng d᝼ng di động" #: src/bz-flathub-page.blp:379 msgid "We ♥ Games" msgstr "We ♥ Games" #: src/bz-flathub-page.blp:392 msgid "Games and apps to run your favorite titles" msgstr "Trò chĆĄi vĂ  ᝊng d᝼ng để chấy cĂĄc táťąa game yĂŞu thĂ­ch" #: src/bz-flathub-page.blp:426 msgid "More Games" msgstr "ThĂŞm Trò chĆĄi" #: src/bz-flatpak-entry.c:574 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Trang Flathub" #: src/bz-flatpak-entry.c:595 msgctxt "Project URL Type" msgid "Project Website" msgstr "Trang web dáťą ĂĄn" #: src/bz-flatpak-entry.c:599 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "Theo dĂľi lỗi" #: src/bz-flatpak-entry.c:603 msgctxt "Project URL Type" msgid "FAQ" msgstr "Câu hỏi thường gạp" #: src/bz-flatpak-entry.c:607 msgctxt "Project URL Type" msgid "Help" msgstr "Trᝣ giĂşp" #: src/bz-flatpak-entry.c:611 msgctxt "Project URL Type" msgid "Donate" msgstr "QuyĂŞn gĂłp" #: src/bz-flatpak-entry.c:617 msgctxt "Project URL Type" msgid "Translate" msgstr "Dịch thuáş­t" #: src/bz-flatpak-entry.c:621 msgctxt "Project URL Type" msgid "Contact" msgstr "LiĂŞn hệ" #: src/bz-flatpak-entry.c:625 msgctxt "Project URL Type" msgid "Source Code" msgstr "MĂŁ nguồn" #: src/bz-flatpak-entry.c:631 msgctxt "Project URL Type" msgid "Contribute" msgstr "Đóng gĂłp" #: src/bz-full-view.blp:21 src/bz-window.blp:126 src/bz-window.blp:380 msgid "Toggle transaction sidebar" msgstr "Báş­t/tắt thanh bĂŞn giao dịch" #: src/bz-full-view.blp:44 src/bz-window.blp:403 msgid "Main Menu" msgstr "Menu chĂ­nh" #: src/bz-full-view.blp:58 msgid "No Results" msgstr "KhĂ´ng cĂł káşżt quả" #: src/bz-full-view.blp:59 msgid "Try a different search query" msgstr "Tháť­ truy vẼn tĂŹm kiáşżm khĂĄc" #: src/bz-full-view.blp:65 src/bz-window.blp:193 msgid "Content" msgstr "Nội dung" #: src/bz-full-view.blp:211 msgid "Support" msgstr "Hỗ trᝣ" #: src/bz-full-view.blp:231 msgid "Repository Star Count" msgstr "Số sao kho lưu trᝯ" #: src/bz-full-view.blp:261 src/bz-full-view.blp:516 msgid "Open" msgstr "Mở" #: src/bz-full-view.blp:274 src/bz-full-view.blp:489 msgid "Download & Install Application" msgstr "Tải xuống & cĂ i đặt ᝊng d᝼ng" #: src/bz-full-view.blp:289 msgid "Uninstall Application" msgstr "Gᝥ cĂ i đặt ᝊng d᝼ng" #: src/bz-full-view.blp:304 src/bz-full-view.blp:531 msgid "Install Other Version" msgstr "CĂ i đặt phiĂŞn bản khĂĄc" #: src/bz-full-view.blp:328 msgid "Size" msgstr "KĂ­ch thước" #: src/bz-full-view.blp:433 msgid "Downloads /mo" msgstr "Lưᝣt tải/thĂĄng" #: src/bz-full-view.blp:550 msgid "Stopped Receiving Core Updates" msgstr "Ngᝍng nháş­n cáş­p nháş­t lĂľi" #: src/bz-full-view.blp:564 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "ᝨng d᝼ng nĂ y dĂšng runtime khĂ´ng còn nháş­n cáş­p nháş­t hoạc vĂĄ bảo máş­t. CĂł thᝃ " "trở nĂŞn khĂ´ng an toĂ n khi sáť­ d᝼ng." #: src/bz-full-view.blp:735 msgid "Tags:" msgstr "Tháşť:" #: src/bz-full-view.c:301 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-full-view.c:308 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-full-view.c:315 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-full-view.c:325 #, c-format msgid "%d downloads in the last 30 days" msgstr "%d lưᝣt tải trong 30 ngĂ y qua" #: src/bz-full-view.c:357 #, c-format msgid "Download size of %s" msgstr "KĂ­ch thước tải vᝁ %s" #: src/bz-full-view.c:390 msgid "All Ages" msgstr "Mọi lᝊa tuổi" #: src/bz-full-view.c:402 msgid "Age rating information unavailable" msgstr "ThĂ´ng tin xáşżp hấng độ tuổi khĂ´ng khả d᝼ng" #: src/bz-full-view.c:407 msgid "Suitable for all ages" msgstr "PhĂš hᝣp với mọi lᝊa tuổi" #: src/bz-full-view.c:409 #, c-format msgid "Suitable for ages %d and up" msgstr "PhĂš hᝣp tᝍ %d tuổi trở lĂŞn" #: src/bz-full-view.c:440 msgid "Unknown" msgstr "KhĂ´ng xĂĄc định" #: src/bz-full-view.c:443 msgid "Proprietary Software" msgstr "Pháş§n mᝁm độc quyᝁn" #: src/bz-full-view.c:447 #, c-format msgid "Free software licensed under %s" msgstr "Pháş§n mᝁm miễn phĂ­ theo giẼy phĂŠp %s" #: src/bz-full-view.c:455 msgid "Free" msgstr "Miễn phĂ­" #: src/bz-full-view.c:455 src/bz-license-dialog.blp:135 msgid "Proprietary" msgstr "Độc quyᝁn" #: src/bz-full-view.c:475 msgid "Adaptive" msgstr "ThĂ­ch ᝊng" #: src/bz-full-view.c:475 msgid "Desktop Only" msgstr "Chỉ mĂĄy tĂ­nh để bĂ n" #: src/bz-full-view.c:481 msgid "Works on desktop, tablets, and phones" msgstr "Hoất động trĂŞn mĂĄy tĂ­nh để bĂ n, mĂĄy tĂ­nh bảng vĂ  điện thoấi" #: src/bz-full-view.c:482 msgid "May not work on mobile devices" msgstr "CĂł thᝃ khĂ´ng hoất động tốt trĂŞn thiáşżt bị di động" #: src/bz-full-view.c:493 msgid "No URL" msgstr "KhĂ´ng cĂł URL" #: src/bz-full-view.c:511 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "" "ᝨng d᝼ng nĂ y cĂł giẼy phĂŠp FLOSS, nghÄŠa lĂ  mĂŁ nguồn cĂł thᝃ được kiᝃm tra để " "đảm bảo an toĂ n." #: src/bz-full-view.c:512 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "ᝨng d᝼ng nĂ y cĂł giẼy phĂŠp độc quyᝁn, nghÄŠa lĂ  mĂŁ nguồn được phĂĄt triᝃn riĂŞng " "tư vĂ  khĂ´ng thᝃ được kiᝃm tra bởi bĂŞn thᝊ ba độc láş­p." #: src/bz-full-view.c:519 msgid "More Apps" msgstr "ThĂŞm ᝨng d᝼ng" #: src/bz-full-view.c:520 #, c-format msgid "More Apps by %s" msgstr "ThĂŞm ᝨng d᝼ng tᝍ %s" #: src/bz-full-view.c:527 msgid "Other Apps by this Developer" msgstr "ᝨng d᝼ng khĂĄc tᝍ nhĂ  phĂĄt triᝃn nĂ y" #: src/bz-full-view.c:529 src/bz-full-view.c:629 #, c-format msgid "Other Apps by %s" msgstr "ᝨng d᝼ng khĂĄc tᝍ %s" #: src/bz-full-view.c:631 msgid "Other Apps" msgstr "ᝨng d᝼ng khĂĄc" #: src/bz-full-view.c:633 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d ᝊng d᝼ng" #: src/bz-full-view.c:972 msgid "Show Less" msgstr "Thu gọn" #: src/bz-full-view.c:972 msgid "Show More" msgstr "Hiện thĂŞm" #: src/bz-hardware-support-dialog.blp:6 src/bz-hardware-support-dialog.blp:47 msgid "Hardware Support" msgstr "Hỗ trᝣ pháş§n cᝊng" #: src/bz-hardware-support-dialog.c:69 msgid "Keyboard support" msgstr "Hỗ trᝣ bĂ n phĂ­m" #: src/bz-hardware-support-dialog.c:71 msgid "Requires keyboards" msgstr "YĂŞu cáş§u bĂ n phĂ­m" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends keyboards" msgstr "Khuyáşżn nghị bĂ n phĂ­m" #: src/bz-hardware-support-dialog.c:73 msgid "Supports keyboards" msgstr "Hỗ trᝣ bĂ n phĂ­m" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for keyboards" msgstr "Hỗ trᝣ bĂ n phĂ­m khĂ´ng xĂĄc định" #: src/bz-hardware-support-dialog.c:76 msgid "Mouse support" msgstr "Hỗ trᝣ chuột" #: src/bz-hardware-support-dialog.c:78 msgid "Requires mice or pointing devices" msgstr "YĂŞu cáş§u chuột hoạc thiáşżt bị trỏ" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends mice or pointing devices" msgstr "Khuyáşżn nghị chuột hoạc thiáşżt bị trỏ" #: src/bz-hardware-support-dialog.c:80 msgid "Supports mice or pointing devices" msgstr "Hỗ trᝣ chuột hoạc thiáşżt bị trỏ" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for mice or pointing devices" msgstr "Hỗ trᝣ chuột hoạc thiáşżt bị trỏ khĂ´ng xĂĄc định" #: src/bz-hardware-support-dialog.c:83 msgid "Touchscreen support" msgstr "Hỗ trᝣ mĂ n hĂŹnh cảm ᝊng" #: src/bz-hardware-support-dialog.c:85 msgid "Requires touchscreens" msgstr "YĂŞu cáş§u mĂ n hĂŹnh cảm ᝊng" #: src/bz-hardware-support-dialog.c:86 msgid "Recommends touchscreens" msgstr "Khuyáşżn nghị mĂ n hĂŹnh cảm ᝊng" #: src/bz-hardware-support-dialog.c:87 msgid "Supports touchscreens" msgstr "Hỗ trᝣ mĂ n hĂŹnh cảm ᝊng" #: src/bz-hardware-support-dialog.c:88 msgid "Unknown support for touchscreens" msgstr "Hỗ trᝣ mĂ n hĂŹnh cảm ᝊng khĂ´ng xĂĄc định" #: src/bz-hardware-support-dialog.c:192 msgid "Mobile support" msgstr "Hỗ trᝣ di động" #: src/bz-hardware-support-dialog.c:193 msgid "Works on mobile devices" msgstr "Hoất động trĂŞn thiáşżt bị di động" #: src/bz-hardware-support-dialog.c:193 msgid "May not work well on mobile devices" msgstr "CĂł thᝃ khĂ´ng hoất động tốt trĂŞn thiáşżt bị di động" #: src/bz-hardware-support-dialog.c:198 msgid "Desktop support" msgstr "Hỗ trᝣ mĂĄy tĂ­nh để bĂ n" #: src/bz-hardware-support-dialog.c:199 msgid "Works well on large screens" msgstr "Hoất động tốt trĂŞn mĂ n hĂŹnh lớn" #: src/bz-hardware-support-dialog.c:233 #, c-format msgid "%s works best on specific hardware" msgstr "%s hoất động tốt nhẼt trĂŞn pháş§n cᝊng c᝼ thᝃ" #: src/bz-hardware-support-dialog.c:240 #, c-format msgid "%s works on most devices" msgstr "%s hoất động trĂŞn háş§u háşżt thiáşżt bị" #: src/bz-inspector.blp:5 msgid "Bazaar Inspector" msgstr "TrĂŹnh kiᝃm tra Bazaar" #: src/bz-inspector.blp:33 msgid "Background Task Info:" msgstr "ThĂ´ng tin tĂĄc v᝼ nᝁn:" #: src/bz-inspector.blp:43 msgid "Enable Global Debug Mode" msgstr "Báş­t cháşż độ gᝥ lỗi toĂ n c᝼c" #: src/bz-inspector.blp:50 msgid "Active Blocklists" msgstr "Danh sĂĄch chạn hoất động" #: src/bz-inspector.blp:67 msgid "Active Curated-Configs" msgstr "CẼu hĂŹnh chọn lọc hoất động" #: src/bz-inspector.blp:85 msgid "All Entry Groups" msgstr "TẼt cả nhĂłm m᝼c" #: src/bz-inspector.blp:93 msgid "Filter..." msgstr "Lọc..." #: src/bz-inspector.blp:134 msgid "Decache and Inspect" msgstr "XĂła bộ đệm vĂ  kiᝃm tra" #: src/bz-installed-page.blp:19 msgid "No Flatpaks Installed" msgstr "Chưa cĂ i Flatpak nĂ o" #: src/bz-installed-page.blp:25 src/bz-window.blp:298 msgid "Installed" msgstr "Đã cĂ i đặt" #: src/bz-installed-page.c:395 msgid "Choose an Installation" msgstr "Chọn cĂ i đặt" #: src/bz-installed-page.c:398 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with? " msgstr "" "Bấn đã cĂ i nhiᝁu phiĂŞn bản cáť§a ᝊng d᝼ng nĂ y. Bấn muốn tiáşżp t᝼c với phiĂŞn bản " "nĂ o? " #: src/bz-installed-page.c:402 src/bz-window.c:1101 src/bz-window.c:1124 msgid "Cancel" msgstr "Háť§y" #: src/bz-license-dialog.blp:77 msgid "Community Built" msgstr "Do cộng đồng xây dáťąng" #: src/bz-license-dialog.blp:176 msgid "Get Involved" msgstr "Tham gia" #: src/bz-license-dialog.c:115 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may not be able to contribute to this app." msgstr "" "ᝨng d᝼ng nĂ y khĂ´ng được phĂĄt triᝃn cĂ´ng khai, chỉ nhĂ  phĂĄt triᝃn biáşżt cĂĄch " "nĂł hoất động. CĂł thᝃ khĂ´ng an toĂ n theo cĂĄch khĂł phĂĄt hiện vĂ  cĂł thᝃ thay " "đổi mĂ  khĂ´ng được giĂĄm sĂĄt.\n" "\n" "Bấn cĂł thᝃ khĂ´ng đóng gĂłp được cho ᝊng d᝼ng nĂ y." #: src/bz-license-dialog.c:124 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "ᝨng d᝼ng nĂ y được cộng đồng quốc táşż phĂĄt triᝃn cĂ´ng khai.\n" "\n" "Bấn cĂł thᝃ tham gia vĂ  giĂşp nĂł tốt hĆĄn." #: src/bz-license-dialog.c:135 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "ᝨng d᝼ng nĂ y được cộng đồng quốc táşż phĂĄt triᝃn cĂ´ng khai vĂ  phĂĄt hĂ nh theo " "giẼy phĂŠp %s.\n" "\n" "Bấn cĂł thᝃ tham gia vĂ  giĂşp nĂł tốt hĆĄn." #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "TĂšy chỉnh" #: src/bz-preferences-dialog.blp:23 msgid "Content Filters" msgstr "Bộ lọc nội dung" #: src/bz-preferences-dialog.blp:26 msgid "Free Software Only" msgstr "Chỉ pháş§n mᝁm miễn phĂ­" #: src/bz-preferences-dialog.blp:27 msgid "Hide proprietary applications when browsing and searching" msgstr "Ẩn ᝊng d᝼ng độc quyᝁn khi duyệt vĂ  tĂŹm kiáşżm" #: src/bz-preferences-dialog.blp:31 msgid "Flathub Results Only" msgstr "Chỉ káşżt quả Flathub" #: src/bz-preferences-dialog.blp:32 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "Giới hấn káşżt quả tĂŹm kiáşżm vĂ  duyệt chỉ ở ᝊng d᝼ng cĂł trĂŞn Flathub" #: src/bz-preferences-dialog.blp:36 msgid "Hide EOL Apps" msgstr "Ẩn ᝊng d᝼ng EOL" #: src/bz-preferences-dialog.blp:37 msgid "Hide apps which are no longer supported by their developers" msgstr "Ẩn ᝊng d᝼ng khĂ´ng còn được nhĂ  phĂĄt triᝃn hỗ trᝣ" #: src/bz-preferences-dialog.blp:42 src/bz-window.blp:313 msgid "Search" msgstr "TĂŹm kiáşżm" #: src/bz-preferences-dialog.blp:45 msgid "Delay Search Results" msgstr "TrĂŹ hoĂŁn káşżt quả tĂŹm kiáşżm" #: src/bz-preferences-dialog.blp:46 msgid "Improve results performance by debouncing search terms" msgstr "Cải thiện hiệu suẼt káşżt quả báşąng cĂĄch trĂŹ hoĂŁn tᝍ khĂła tĂŹm kiáşżm" #: src/bz-preferences-dialog.blp:51 msgid "Application Details" msgstr "Chi tiáşżt ᝊng d᝼ng" #: src/bz-preferences-dialog.blp:54 msgid "Display Star Count" msgstr "Hiᝃn thị số sao" #: src/bz-preferences-dialog.blp:55 msgid "Show the star count of an application's source code repository" msgstr "Hiᝃn thị số sao cáť§a kho mĂŁ nguồn ᝊng d᝼ng" #: src/bz-preferences-dialog.blp:80 msgid "Progress Bar" msgstr "Thanh tiáşżn trĂŹnh" #: src/bz-preferences-dialog.blp:81 msgid "Choose a theme for the progress bar!" msgstr "Chọn cháť§ đề cho thanh tiáşżn trĂŹnh!" #: src/bz-preferences-dialog.blp:116 msgid "" "Bazaar can fetch and display the star count from an application's source " "code repository on a remote Git forge. \n" " For projects on GitHub, rate limits may cause them not to appear." msgstr "" "Bazaar cĂł thᝃ lẼy vĂ  hiᝃn thị số sao tᝍ kho mĂŁ nguồn ᝊng d᝼ng trĂŞn git forge " "tᝍ xa.\n" "Đối với dáťą ĂĄn trĂŞn GitHub, giới hấn tốc độ cĂł thᝃ khiáşżn chĂşng khĂ´ng xuẼt " "hiện." #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "MĂ u nổi báş­t" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "MĂ u cờ LGBT+" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "MĂ u cờ Lesbian" #: src/bz-preferences-dialog.c:35 msgid "Transgender Pride Colors" msgstr "MĂ u cờ Transgender" #: src/bz-preferences-dialog.c:36 msgid "Nonbinary Pride Colors" msgstr "MĂ u cờ Nonbinary" #: src/bz-preferences-dialog.c:37 msgid "Bisexual Pride Colors" msgstr "MĂ u cờ Bisexual" #: src/bz-preferences-dialog.c:38 msgid "Asexual Pride Colors" msgstr "MĂ u cờ Asexual" #: src/bz-preferences-dialog.c:39 msgid "Pansexual Pride Colors" msgstr "MĂ u cờ Pansexual" #: src/bz-preferences-dialog.c:40 msgid "Aromantic Pride Colors" msgstr "MĂ u cờ Aromantic" #: src/bz-preferences-dialog.c:41 msgid "Genderfluid Pride Colors" msgstr "MĂ u cờ Genderfluid" #: src/bz-preferences-dialog.c:42 msgid "Polysexual Pride Colors" msgstr "MĂ u cờ Polysexual" #: src/bz-preferences-dialog.c:43 msgid "Omnisexual Pride Colors" msgstr "MĂ u cờ Omnisexual" #: src/bz-preferences-dialog.c:44 msgid "Aroace Pride Colors" msgstr "MĂ u cờ Aroace" #: src/bz-preferences-dialog.c:45 msgid "Agender Pride Colors" msgstr "MĂ u cờ Agender" #: src/bz-preferences-dialog.c:46 msgid "Genderqueer Pride Colors" msgstr "MĂ u cờ Genderqueer" #: src/bz-preferences-dialog.c:47 msgid "Intersex Pride Colors" msgstr "MĂ u cờ Intersex" #: src/bz-preferences-dialog.c:48 msgid "Demigender Pride Colors" msgstr "MĂ u cờ Demigender" #: src/bz-preferences-dialog.c:49 msgid "Biromantic Pride Colors" msgstr "MĂ u cờ Biromantic" #: src/bz-releases-dialog.blp:5 src/bz-releases-list.blp:26 msgid "Version History" msgstr "Lịch sáť­ phiĂŞn bản" #: src/bz-releases-list.c:128 #, c-format msgid "Version %s" msgstr "PhiĂŞn bản %s" #: src/bz-releases-list.c:153 msgid "No details for this release" msgstr "KhĂ´ng cĂł chi tiáşżt cho bản phĂĄt hĂ nh nĂ y" #: src/bz-rich-app-tile.blp:137 msgid "Stopped Receiving Updates" msgstr "Ngᝍng nháş­n cáş­p nháş­t" #: src/bz-rich-app-tile.blp:154 msgid "Get" msgstr "Tải" #: src/bz-search-widget.blp:105 msgid "Search Apps, Games, Software" msgstr "TĂŹm kiáşżm ᝊng d᝼ng, trò chĆĄi, pháş§n mᝁm" #: src/bz-search-widget.blp:149 msgid "Categories Unavailable" msgstr "Danh m᝼c khĂ´ng khả d᝼ng" #: src/bz-search-widget.blp:150 msgid "Search for apps using the search bar above." msgstr "TĂŹm kiáşżm ᝊng d᝼ng báşąng thanh tĂŹm kiáşżm phĂ­a trĂŞn." #: src/bz-search-widget.blp:234 msgid "No Applications Found" msgstr "KhĂ´ng tĂŹm thẼy ᝊng d᝼ng" #: src/bz-search-widget.c:241 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "KhĂ´ng tĂŹm thẼy káşżt quả cho \"%s\" trĂŞn Flathub" #: src/bz-share-list.c:64 msgid "Copied!" msgstr "Đã sao chĂŠp!" #: src/bz-share-list.c:116 msgid "Copy Link" msgstr "Sao chĂŠp liĂŞn káşżt" #: src/bz-share-list.c:127 msgid "Open Link" msgstr "Mở liĂŞn káşżt" #: src/bz-stats-dialog.blp:28 msgid "Timeline" msgstr "Dòng thời gian" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "CĂ i đặt:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "Tháşż giới" #: src/bz-tag-list.c:96 msgid "No Results Found" msgstr "KhĂ´ng tĂŹm thẼy káşżt quả" #: src/bz-tag-list.c:108 #, c-format msgid "Apps Tagged \"%s\"" msgstr "ᝨng d᝼ng cĂł tháşť \"%s\"" #: src/bz-tag-list.c:109 #, c-format msgid "%d Applications" msgstr "%d ᝊng d᝼ng" #: src/bz-tag-list.c:124 msgid "Search failed" msgstr "TĂŹm kiáşżm thẼt bấi" #: src/bz-transaction-manager.c:1132 #, c-format msgid "Finished in %.02f seconds" msgstr "HoĂ n thĂ nh trong %.02f giây" #: src/bz-transaction-view.blp:94 msgid "App Add-on" msgstr "Tiện Ă­ch mở rộng ᝊng d᝼ng" #: src/bz-transaction-view.blp:119 msgid "Runtime" msgstr "Runtime" #: src/bz-transaction-view.blp:145 src/bz-transaction-view.blp:171 msgid "Install Size" msgstr "KĂ­ch thước cĂ i đặt" #: src/bz-transaction-view.blp:199 src/bz-window.blp:346 msgid "Update" msgstr "Cáş­p nháş­t" #: src/bz-transaction-view.c:139 #, c-format msgid "Transferred %s so far" msgstr "Đã truyᝁn %s" #: src/bz-transaction.c:336 msgid "Pending" msgstr "Đang chờ" #: src/bz-update-dialog.blp:7 msgid "Install Now" msgstr "CĂ i đặt ngay" #: src/bz-update-dialog.blp:10 msgid "Updates Are Available" msgstr "CĂł bản cáş­p nháş­t" #: src/bz-update-dialog.blp:11 msgid "" "The following applications are eligible for updates. Would you like to " "install them?" msgstr "" "CĂĄc ᝊng d᝼ng sau đủ điᝁu kiện cáş­p nháş­t. Bấn cĂł muốn cĂ i đặt chĂşng khĂ´ng?" #: src/bz-update-dialog.c:134 #, c-format msgid "" "%d runtimes and/or addons are eligible for updates. Would you like to " "install them?" msgstr "" "%d runtime vĂ /hoạc tiện Ă­ch mở rộng đủ điᝁu kiện cáş­p nháş­t. Bấn cĂł muốn cĂ i " "đặt chĂşng khĂ´ng?" #: src/bz-update-dialog.c:142 #, c-format msgid "Additionally, %d runtimes and/or addons will be updated." msgstr "NgoĂ i ra, %d runtime vĂ /hoạc tiện Ă­ch mở rộng sáş˝ được cáş­p nháş­t." #: src/bz-window.blp:66 msgid "Inspect UI Entry" msgstr "Kiᝃm tra m᝼c giao diện" #: src/bz-window.blp:73 msgid "All Debug Actions" msgstr "TẼt cả hĂ nh động gᝥ lỗi" #: src/bz-window.blp:107 msgid "Tasks" msgstr "TĂĄc v᝼" #: src/bz-window.blp:163 msgid "Stop Active Tasks" msgstr "Dᝍng tĂĄc v᝼ đang chấy" #: src/bz-window.blp:171 msgid "Clear History" msgstr "XĂła lịch sáť­" #: src/bz-window.blp:187 msgid "No Tasks Yet" msgstr "Chưa cĂł tĂĄc v᝼" #: src/bz-window.blp:258 msgid "Refreshing Store Content" msgstr "Đang lĂ m mới nội dung cáť­a hĂ ng" #: src/bz-window.blp:273 msgid "Curated" msgstr "Chọn lọc" #: src/bz-window.blp:286 msgid "Flathub" msgstr "Flathub" #: src/bz-window.blp:330 msgid "Sync" msgstr "Đồng bộ" #: src/bz-window.blp:466 msgid "_Donate to Bazaar ❤️" msgstr "_QuyĂŞn gĂłp cho Bazaar ❤️" #: src/bz-window.blp:473 msgid "_Preferences" msgstr "_TĂšy chỉnh" #: src/bz-window.blp:478 msgid "_Keyboard Shortcuts" msgstr "_PhĂ­m tắt" #: src/bz-window.blp:483 msgid "_About Bazaar" msgstr "_Giới thiệu Bazaar" #: src/bz-window.blp:490 msgid "_Quit Bazaar" msgstr "ThoĂĄt _Bazaar" #: src/bz-window.blp:499 msgid "Open Bazaar Inspector" msgstr "Mở TrĂŹnh kiᝃm tra Bazaar" #: src/bz-window.c:844 msgid "" "The ability to inspect and install local .flatpak bundle files is coming " "soon! In the meantime, try running\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "on the command line." msgstr "" "Khả năng kiᝃm tra vĂ  cĂ i đặt táş­p tin .flatpak bundle c᝼c bộ sáş˝ sớm cĂł! Trong " "lĂşc chờ đợi, hĂŁy tháť­ chấy\n" "\n" "flatpak install --bundle your-bundle.flatpak\n" "\n" "trĂŞn dòng lệnh." #: src/bz-window.c:966 msgid "Can't do that right now!" msgstr "Hiện khĂ´ng thᝃ tháťąc hiện!" #: src/bz-window.c:1095 #, c-format msgid "Install %s?" msgstr "CĂ i đặt %s?" #: src/bz-window.c:1098 msgid "May install additional shared components" msgstr "CĂł thᝃ cĂ i đặt thĂŞm thĂ nh pháş§n chia sáşť" #: src/bz-window.c:1117 #, c-format msgid "Remove %s?" msgstr "Gᝥ bỏ %s?" #: src/bz-window.c:1121 #, c-format msgid "" "It will not be possible to use %s after it is uninstalled.\n" "\n" "Settings and user data will be kept." msgstr "" "Sáş˝ khĂ´ng thᝃ sáť­ d᝼ng %s sau khi gᝥ bỏ.\n" "\n" "CĂ i đặt vĂ  dᝯ liệu người dĂšng sáş˝ được giᝯ lấi." #: src/bz-window.c:1286 msgid "Resume Current Tasks" msgstr "Tiáşżp t᝼c tĂĄc v᝼ hiện tấi" #: src/bz-window.c:1292 msgid "Pause Current Tasks" msgstr "Tấm dᝍng tĂĄc v᝼ hiện tấi" #: src/bz-world-map.c:523 #, c-format msgid "%s: %'u downloads" msgstr "%s: %'u lưᝣt tải" #: src/gtk/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "Chung" #: src/gtk/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Dialog" msgstr "Mở hộp thoấi tĂŹm kiáşżm" #: src/gtk/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Preferences" msgstr "Mở tĂšy chỉnh" #: src/gtk/shortcuts-dialog.blp:19 msgctxt "shortcut window" msgid "Refresh" msgstr "LĂ m mới" #: src/gtk/shortcuts-dialog.blp:24 msgctxt "shortcut window" msgid "Toggle Transaction Manager" msgstr "Báş­t/tắt quản lĂ˝ giao dịch" #: src/gtk/shortcuts-dialog.blp:29 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Hiᝃn thị phĂ­m tắt" #: src/gtk/shortcuts-dialog.blp:34 msgctxt "shortcut window" msgid "Quit" msgstr "ThoĂĄt" bazaar-org-bazaar-b6e9a65/po/zh_CN.po000066400000000000000000002553261522167256300174250ustar00rootroot00000000000000# # <>, 2025-2026. # msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-06 14:13+0800\n" "PO-Revision-Date: 2026-05-09 19:20+0800\n" "Last-Translator: <>\n" "Language-Team: Abkhazian\n" "Language: ab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 50.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:45 #: src/bz-window.c:374 src/bz-window.c:375 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "添加、卸载和更新此电脑上的 Flatpak 软䝜" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "新窗口" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and manage applications" msgstr "发现和管理应用" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and addons, particularly from Flathub." msgstr "" "一款专为 Linux 设计的快速且现代的应用商店,致力于从 Flatpak 远程仓库(特别是 " "Flathub)中发现并安装应用程序及插件。" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "排队安装多个程序,同时继续浏览" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "轻松地检查应用权限" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "登录 Flathub 以管理收藏项目" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "直接从GNOME Shell中搜索应用" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:30 src/bz-application.c:758 msgid "The Bazaar Contributors" msgstr "Bazaar 的贡献者们" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "展示 Flathub 应用程序的主页" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "展示应用页面" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "库" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "搜索页" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "分类页" #: src/bz-addon-tile.blp:49 src/bz-installed-tile.blp:64 #: src/bz-rich-app-tile.blp:140 msgid "Stopped Receiving Updates" msgstr "停止接收更新" #: src/bz-addon-tile.c:155 src/bz-favorites-tile.c:157 #: src/bz-rich-app-tile.blp:172 msgid "Uninstall" msgstr "卸载" #: src/bz-addon-tile.c:157 src/bz-favorites-tile.c:159 msgid "Install" msgstr "安装" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-full-view.blp:606 #: src/bz-installed-tile.blp:101 msgid "Manage Add-Ons" msgstr "管理附加组件" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "无可见附加组件" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "您当前的过滤偏好设置隐藏了所有已知的附加组件。请尝试调整它们。" #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "附加组件" #: src/bz-addons-dialog.blp:202 src/bz-full-view.blp:404 msgid "Downloads/Month" msgstr "次下载/㜈" #: src/bz-addons-dialog.blp:229 src/bz-full-view.blp:440 msgid "Stopped Receiving Core Updates" msgstr "停止接收核心更新" #: src/bz-addons-dialog.blp:243 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "此应用使用的运行时环境已不再接收更新或安全修复,继续使用可能存在安全隐患" #: src/bz-addons-dialog.c:330 #, c-format msgid "Add-on for %s" msgstr "%s 的附加组件" #: src/bz-addons-dialog.c:344 src/bz-full-view.c:568 msgid "Show Less" msgstr "显示更少" #: src/bz-addons-dialog.c:344 src/bz-full-view.c:568 msgid "Show More" msgstr "显示更多" #: src/bz-addons-dialog.c:394 msgid "Download Stats" msgstr "下载状态" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "年龄分级" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "卡通暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "无卡通暴力相关信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "幻想暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "无关于幻想暴力的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "写实暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "无关于写实暴力的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "暴力描绘流血场面" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "无关于血腥的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "性暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "无关于性暴力的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "酒精" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "无关于酒精的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "毒品" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "无使用非法药物的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "烟草" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "无关于烟草产品的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "裸露" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "无任何种类的裸体信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "性主题" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "无关于提及和描绘性的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "脏话" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "不含任何种类的脏话信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "不适当幽默" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "无关于不当幽默的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "歧视" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "无关于歧视语言的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "广告" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "无任任何广告信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "赌博" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "无任何赌博内容" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "č´­äš°" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "无关于花钱能力的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "用户间交流" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "无关于与其他用户文字交流方式的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "用户见语音交流" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "无关于与其他用户语音交流方式的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "联系详情" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "未提供有关分享社交媒体用户名或电子邮件地址的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "识别信息" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "未提供与第三方共享用户信息的相关信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "位置共享" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "未提供与其他用户共享物理位置的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "卖淫" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "未提及有关卖淫的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "通奸" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "没有关于通奸相关信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "性化角色" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "未提供有关性化角色的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "亵渎" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "没有关于亵渎行为的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "人类遗骸" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "没有关于可见的人类遗骸的信息" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "奴隶制" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "不含提及奴隶制的信息" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "不包括对毒品的提及" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "不包括咒骂、脏话及其他类型的强烈言辞" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "不包括广告或货币交易" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "不包含性内容或裸露镜头" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "不包含不受控制的聊天功能" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "不包含暴力" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "药品" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "粗俗语言" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "金钱" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "礞交" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "暴力" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "所有" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s 的年龄分级未知" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s 适合所有人" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s 适合幼儿使用" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s 适合儿童" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s 适合青少年" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s 适合成人用户" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s 适合 %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "系统文件夹 %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "用户主文件夹 %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "主机系统文件夹" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "主机系统配置来自 /etc" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "桌面子文件夹 %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "桌面文件夹" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "文档子文件夹 %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "文档文件夹" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "音乐子文件夹 %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "音乐文件夹" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "图片子文件夹 %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "图片文件夹" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "公共共享子文件夹 %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "公共共享文件夹" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "视频子文件夹 %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "视频文件夹" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "模板子文件夹 %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "模板文件夹" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "用户缓存子文件夹 %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "用户缓存文件夹" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "用户配置子文件夹 %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "用户配置文件夹" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "用户数据子文件夹 %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "用户数据文件夹" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "用户运行时子文件夹 %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "用户运行时文件夹" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "寚 %s 的文件系统访问" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "未知文件系统路径" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:52 msgid "Download Size" msgstr "下载大小" #: src/bz-app-size-dialog.blp:53 msgid "Amount to download from the internet" msgstr "从互联网下载的大小" #: src/bz-app-size-dialog.blp:73 msgid "Installed Size" msgstr "已安装占用" #: src/bz-app-size-dialog.blp:74 msgid "Size on Disk" msgstr "硬盘占用" #: src/bz-app-size-dialog.blp:121 msgid "Open user data folder" msgstr "打开用户数据文件夹" #: src/bz-app-size-dialog.blp:131 msgid "User Data Size" msgstr "用户数据大小" #: src/bz-app-size-dialog.blp:132 msgid "Caches, settings, and other app data" msgstr "缓存、设置和其他应用数据" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "已安装运行时占用" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "运行时下载大小" #: src/bz-app-size-dialog.c:204 msgid "App Size" msgstr "应用大小" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:104 src/bz-rich-app-tile.c:304 msgid "Verified" msgstr "已验证" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "已安装" #: src/bz-application.c:737 msgctxt "About Dialog Developer Credit" msgid "Adam Masciola " msgstr "Adam Masciola " #: src/bz-application.c:738 msgctxt "About Dialog Developer Credit" msgid "Alexander Vanhee" msgstr "Alexander Vanhee" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:761 msgid "translator-credits" msgstr "Shinsei , 2025" #: src/bz-application.c:771 msgid "Special Thanks" msgstr "特别感谢" #: src/bz-application.c:829 msgid "Logged Out Successfully!" msgstr "登出成功!" #: src/bz-application.c:968 msgid "Performing setup…" msgstr "正在执行设置..." #: src/bz-application.c:1054 msgid "Set Up System Flathub?" msgstr "在系统配置 Flathub?" #: src/bz-application.c:1057 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "未设置 Flathub 远程仓库。Bazaar 需要在系统 Flatpak 安装中配置 Flathub 才能浏" "览和安装应用程序。\n" "\n" "您仍然可以使用 Bazaar 来浏览和移除已安装的应用。" #: src/bz-application.c:1064 msgid "Set Up Flathub?" msgstr "注册 Flathub?" #: src/bz-application.c:1067 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "此系统未设置 Flathub。如果 Flathub 不可用,您将无法在 Bazaar 中浏览和安装应用" "程序。\n" "\n" "您仍可使用 Bazaar 浏览和卸载已安装的应用程序。" #: src/bz-application.c:1073 msgid "Later" msgstr "稍后" #: src/bz-application.c:1074 msgid "Set Up Flathub" msgstr "注册 Flathub" #: src/bz-application.c:1291 src/bz-application.c:1778 msgid "Checking for updates…" msgstr "正在检查更新" #: src/bz-application.c:1411 msgid "A backend error occurred" msgstr "后端发生错误" #: src/bz-application.c:1611 src/bz-application.c:3655 src/bz-window.blp:69 msgid "Refreshing…" msgstr "正在刷新……" #: src/bz-application.c:1775 src/bz-application.c:3653 #, c-format msgid "Loading %d apps…" msgstr "正在加载 %d 应用" #: src/bz-application.c:1833 msgid "Failed to open file" msgstr "文件打开文件失败" #: src/bz-application.c:1918 msgid "An initialization error occurred" msgstr "一个初始化错误发生了" #: src/bz-application.c:2339 msgid "Failed to check for updates" msgstr "无法检查更新" #: src/bz-application.c:3373 msgid "Could not find app" msgstr "无法找到应用" #: src/bz-application.c:3406 msgid "Failed to load metainfo" msgstr "无法加载元信息" #: src/bz-application.c:3657 msgid "Writing to cache…" msgstr "正在写入缓存" #: src/bz-apps-page.blp:86 msgid "Show All" msgstr "展示所有" #: src/bz-apps-page.c:229 #, c-format msgid "All \"%s\"" msgstr "所有 \"%s\"" #: src/bz-apps-page.c:478 src/bz-tag-list.c:91 #, c-format msgid "%d Applications" msgstr "%d 个应用" #: src/bz-appstream-parser.c:303 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub 页面" #: src/bz-appstream-parser.c:324 msgctxt "Project URL Type" msgid "Project Website" msgstr "项目网站" #: src/bz-appstream-parser.c:328 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "问题追踪器" #: src/bz-appstream-parser.c:332 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-appstream-parser.c:336 msgctxt "Project URL Type" msgid "Help" msgstr "帮助" #: src/bz-appstream-parser.c:340 msgctxt "Project URL Type" msgid "Donate" msgstr "捐助" #: src/bz-appstream-parser.c:346 msgctxt "Project URL Type" msgid "Translate" msgstr "翻译" #: src/bz-appstream-parser.c:350 msgctxt "Project URL Type" msgid "Contact" msgstr "联系" #: src/bz-appstream-parser.c:354 msgctxt "Project URL Type" msgid "Source Code" msgstr "源䝣码" #: src/bz-appstream-parser.c:360 msgctxt "Project URL Type" msgid "Contribute" msgstr "贡献" #: src/bz-bundle-install-dialog.c:240 msgid "Installing" msgstr "正在安装" #: src/bz-bundle-install-dialog.c:254 msgid "Installed!" msgstr "已安装!" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "过去 30 天内下载 %d 揥" #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:389 #: src/bz-context-tile-callbacks.c:406 msgid "N/A" msgstr "N/A" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s 运行时" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "下载" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "大小信息不可用" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "%s 的下载大小" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "全年龄" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "年龄分级信息不可用" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "适合全年龄段" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "适合年龄为 %d 岁及以上" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:284 msgid "Unknown" msgstr "未知" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "根据 %s 许可证授权的自由软件" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "自由软件" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "专有软件" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "特殊许可证: %s" #: src/bz-context-tile-callbacks.c:281 msgid "Free" msgstr "自由" #: src/bz-context-tile-callbacks.c:287 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "专有" #: src/bz-context-tile-callbacks.c:289 src/bz-license-dialog.c:135 msgid "Special License" msgstr "特殊许可" #: src/bz-context-tile-callbacks.c:309 msgid "Adaptive" msgstr "自适应" #: src/bz-context-tile-callbacks.c:309 msgid "Desktop Only" msgstr "仅桌面端" #: src/bz-context-tile-callbacks.c:315 msgid "Works on desktop, tablets, and phones" msgstr "适用于台式机、平板电脑和手机" #: src/bz-context-tile-callbacks.c:316 msgid "May not work on mobile devices" msgstr "可能无法在移动设备上使用" #: src/bz-context-tile-callbacks.c:396 src/bz-safety-dialog.blp:31 msgid "Safe" msgstr "安全" #: src/bz-context-tile-callbacks.c:398 src/bz-context-tile-callbacks.c:400 msgid "Low Risk" msgstr "低风险" #: src/bz-context-tile-callbacks.c:402 msgid "Medium Risk" msgstr "中等风险" #: src/bz-context-tile-callbacks.c:404 msgid "High Risk" msgstr "高风险" #: src/bz-curated-view.blp:11 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "犺" #: src/bz-curated-view.blp:15 msgid "No Curation" msgstr "无精选应用程序" #: src/bz-curated-view.blp:16 msgid "" "There is no curation information provided on this system. You can still " "browse applications on Flathub" msgstr "该系统未提供策展信息。您仍可在 Flathub 上浏览应用程序。" #: src/bz-curated-view.blp:18 msgid "Browse Flathub" msgstr "浏览 Flathub" #: src/bz-curated-view.blp:29 src/bz-curated-view.blp:33 #: src/bz-flathub-page.blp:30 src/bz-flathub-page.blp:34 msgid "Offline" msgstr "猝线" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:39 src/bz-flathub-page.blp:49 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "浏览器" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "未验证" #: src/bz-developer-badge.c:210 msgid "Developer information not available." msgstr "无法获取开发者信息" #: src/bz-developer-badge.c:216 src/bz-developer-badge.c:230 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "诼 %s 应用 ID 的所有权尚未验证,可能是一个社区包。" #: src/bz-developer-badge.c:234 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "诼 %s 应用 ID 的所有权已由 Flathub 团队手动验证。" #: src/bz-developer-badge.c:250 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "%1$s 应用 ID 的所有权已验证为是 %3$s 上的 %2$s。" #: src/bz-developer-badge.c:257 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "%1$s 应用 ID 的所有权已通过 %2$s 验证。" #: src/bz-developer-badge.c:261 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "诼 %s 应用 ID 的所有权已通过验证。" #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "完整发布说明" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "正是有了像您这样的用户,Bazaar 才能顺利发行!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "我热爱开发 Bazaar,但我一个人的力量有限。如果您愿意支持后续的开发工作,请考虑" "在 Ko-Fi 捐助我:" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "向 Bazaar 捐助 ❤️" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "看看 %s 更新了啥" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "发布于 %B %-e, %Y" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "选择和安装" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "您已安装此应用的多个版本。您希望用哪一个继续?" #: src/bz-entry-group-util.c:80 msgid "Cancel" msgstr "取消" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "仅适用于当前用户" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "当前用户" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "所有用户" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:50 msgid "Details" msgstr "详细信息" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "复制" #: src/bz-error-dialog.c:56 src/bz-share-list.c:62 msgid "Copied!" msgstr "已复制!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "收藏数" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "无法更新已收藏" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "登录 Flathub 以管理收藏项目" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "登录" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:360 msgid "Favorites" msgstr "收藏" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:144 msgid "Install All" msgstr "安装全部" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "加载中" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "无收藏" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "您标记为收藏的应用程序将在此处显示" #: src/bz-favorites-tile.blp:70 src/bz-installed-tile.blp:78 msgid "Support This Application" msgstr "支持此应用程序" #: src/bz-favorites-tile.blp:119 msgid "Remove From Favorites" msgstr "从收藏中移除" #: src/bz-favorites-tile.c:357 msgid "Failed to remove favorite" msgstr "无法从收藏中移除" #: src/bz-featured-carousel.blp:31 msgid "Previous" msgstr "上一页" #: src/bz-featured-carousel.blp:54 msgid "Next" msgstr "下一页" #: src/bz-flathub-category.c:93 msgid "Editing" msgstr "编辑" #: src/bz-flathub-category.c:94 msgid "Midi" msgstr "MIDI" #: src/bz-flathub-category.c:95 msgid "Mixer" msgstr "调音" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:96 src/bz-search-pill-list.c:77 msgid "Music" msgstr "音乐" #: src/bz-flathub-category.c:97 msgid "Player" msgstr "播放器" #: src/bz-flathub-category.c:98 msgid "Recorder" msgstr "录音" #: src/bz-flathub-category.c:99 msgid "Sequencer" msgstr "科学" #: src/bz-flathub-category.c:100 msgid "Tuner" msgstr "调谐器" #: src/bz-flathub-category.c:101 msgid "TV" msgstr "电视" #: src/bz-flathub-category.c:106 msgid "Emulation" msgstr "模拟器" #: src/bz-flathub-category.c:107 msgid "Action" msgstr "动作" #: src/bz-flathub-category.c:108 msgid "Adventure" msgstr "冒险" # 不用“街机“遵从 https://flathub.org/zh-Hans/apps/category/game/subcategories/ArcadeGame 的翻译 #: src/bz-flathub-category.c:109 msgid "Arcade" msgstr "游䚐中心" #: src/bz-flathub-category.c:110 msgid "Blocks" msgstr "方块" #: src/bz-flathub-category.c:111 msgid "Board" msgstr "图板" #: src/bz-flathub-category.c:112 msgid "Card" msgstr "卡片" #: src/bz-flathub-category.c:113 msgid "Kids" msgstr "儿童" #: src/bz-flathub-category.c:114 msgid "Logic" msgstr "逻辑" #: src/bz-flathub-category.c:115 msgid "Role Playing" msgstr "角色扮演" #: src/bz-flathub-category.c:116 msgid "Shooter" msgstr "射手" #: src/bz-flathub-category.c:117 msgid "Simulation" msgstr "模拟" #: src/bz-flathub-category.c:118 msgid "Sports" msgstr "体育" #: src/bz-flathub-category.c:119 msgid "Strategy" msgstr "战略" #: src/bz-flathub-category.c:124 msgid "Audio & Video" msgstr "音频与视频" #: src/bz-flathub-category.c:124 msgid "Media" msgstr "媒体" #: src/bz-flathub-category.c:124 msgid "More Audio & Video" msgstr "更多音频与视频" #: src/bz-flathub-category.c:125 msgid "Developer Tools" msgstr "开发者工具" #: src/bz-flathub-category.c:125 msgid "Develop" msgstr "开发" #: src/bz-flathub-category.c:125 msgid "More Developer Tools" msgstr "更多开发者工具" #: src/bz-flathub-category.c:126 msgid "Education" msgstr "教育" #: src/bz-flathub-category.c:126 msgid "Learn" msgstr "ĺ­Śäš " #: src/bz-flathub-category.c:126 msgid "More Education" msgstr "更多教育" #: src/bz-flathub-category.c:127 msgid "Gaming" msgstr "游戏" #: src/bz-flathub-category.c:127 msgid "Play" msgstr "游玩" #: src/bz-flathub-category.c:127 msgid "More Gaming" msgstr "更多游戏" #: src/bz-flathub-category.c:128 msgid "Graphics & Photography" msgstr "图形与摄影" #: src/bz-flathub-category.c:128 msgid "Create" msgstr "创造" #: src/bz-flathub-category.c:128 msgid "More Graphics & Photography" msgstr "更多图形与摄影" #: src/bz-flathub-category.c:129 msgid "Networking" msgstr "网络" #: src/bz-flathub-category.c:129 msgid "Internet" msgstr "互联网" #: src/bz-flathub-category.c:129 msgid "More Networking" msgstr "更多网络应用" #: src/bz-flathub-category.c:130 msgid "Productivity" msgstr "生产力" #: src/bz-flathub-category.c:130 msgid "Work" msgstr "工作" #: src/bz-flathub-category.c:130 msgid "More Productivity" msgstr "更多生产力" #: src/bz-flathub-category.c:131 msgid "Science" msgstr "科学" #: src/bz-flathub-category.c:131 msgid "More Science" msgstr "更多科学" #: src/bz-flathub-category.c:132 msgid "System" msgstr "系统" #: src/bz-flathub-category.c:132 msgid "More System" msgstr "更多系统" #: src/bz-flathub-category.c:133 msgid "Utilities" msgstr "实用工具" #: src/bz-flathub-category.c:133 msgid "Tools" msgstr "工具" #: src/bz-flathub-category.c:133 msgid "More Utilities" msgstr "更多实用工具" #: src/bz-flathub-category.c:134 src/bz-flathub-page.blp:116 #: src/bz-flathub-page.blp:148 msgid "Trending" msgstr "飙升" #: src/bz-flathub-category.c:134 msgid "More Trending" msgstr "更多飙升应用" #: src/bz-flathub-category.c:135 src/bz-flathub-page.blp:122 #: src/bz-flathub-page.blp:178 msgid "Popular" msgstr "人气" #: src/bz-flathub-category.c:135 msgid "More Popular" msgstr "更多人气应用" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:168 msgid "Recently Added" msgstr "最近添加" #: src/bz-flathub-category.c:136 src/bz-flathub-page.blp:128 msgid "New" msgstr "新应用" #: src/bz-flathub-category.c:136 msgid "More New" msgstr "更多新应用" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:158 msgid "Recently Updated" msgstr "最近更新" #: src/bz-flathub-category.c:137 src/bz-flathub-page.blp:134 msgid "Updated" msgstr "最近更新" #: src/bz-flathub-category.c:137 msgid "More Updated" msgstr "更多最近更新应用" #: src/bz-flathub-category.c:138 msgid "Mobile" msgstr "移动应用" #: src/bz-flathub-category.c:138 msgid "More Mobile" msgstr "更多移动应用" #: src/bz-flathub-category.c:139 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:139 msgid "More Adwaita" msgstr "更多 Adwaita 应用" #: src/bz-flathub-category.c:140 msgid "KDE Apps" msgstr "KDE 应用" #: src/bz-flathub-category.c:140 msgid "More KDE Apps" msgstr "更多 KDE 应用" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "Flathub 未添加" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "您的 Flatpak 安装中未找到 Flathub 远程仓库" #: src/bz-flathub-page.blp:35 msgid "Flathub returned an error" msgstr "Flathub 返回错误" #: src/bz-flathub-page.blp:41 msgid "Retry Flathub Connection" msgstr "重试 Flathub 连接" #: src/bz-flathub-page.blp:57 msgid "Flathub Unavailable" msgstr "Flathub 不可用" #: src/bz-flathub-page.blp:58 msgid "" "We could not connect to Flathub. You can still manage and search for " "applications." msgstr "我们无法连接到 Flathub。您仍然可以管理和搜索应用程序。" #: src/bz-flathub-page.blp:61 msgid "Search Apps" msgstr "搜索应用程序" #: src/bz-flathub-page.blp:200 msgid "App of the Day" msgstr "每日应用" #: src/bz-flathub-page.blp:264 msgid "On the Go" msgstr "随时随地" #: src/bz-flathub-page.blp:276 msgid "Apps for your Linux phones and tablets" msgstr "适用于您的 Linux 手机和平板电脑的应用" #: src/bz-flathub-page.blp:287 src/bz-flathub-page.blp:322 msgid "More Mobile Apps" msgstr "更多移动应用" #: src/bz-flathub-page.blp:378 msgid "We​ ♥​ Games" msgstr "我们 ♥ 游戏" #: src/bz-flathub-page.blp:391 msgid "Games and apps to run your favorite titles" msgstr "运行您喜爱的游戏和应用" #: src/bz-flathub-page.blp:425 msgid "More Games" msgstr "更多游戏" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "无结果" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "尝试不同的搜索关键字" #: src/bz-full-view.blp:41 msgid "Content" msgstr "内容" #: src/bz-full-view.blp:105 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "这是一个本地预览,部分细节可能与已发布的列表有所不同" #: src/bz-full-view.blp:108 msgid "Preview Store Appearance" msgstr "预览商店外观" #: src/bz-full-view.blp:234 msgid "_Support" msgstr "_支持" #: src/bz-full-view.blp:454 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "此应用使用的运行时环境已不再接收更新或安全修复,继续使用可能存在安全隐患" #: src/bz-full-view.blp:541 msgid "Trash Data" msgstr "垃圾数据" #: src/bz-full-view.blp:681 msgid "Tags:" msgstr "标签:" #: src/bz-full-view.c:180 msgid "No URL" msgstr "无链接" #: src/bz-full-view.c:198 msgid "" "This application has a FLOSS license, meaning the source code can be audited " "for safety." msgstr "该应用程序具有 FLOSS 许可证,这意味着可以审核源代码的安全性。" #: src/bz-full-view.c:199 msgid "" "This application has a proprietary license, meaning the source code is " "developed privately and cannot be audited by an independent third party." msgstr "" "该应用程序具有专有许可证,这意味着源代码是私人开发的,不能由独立的第三方审" "核。" #: src/bz-full-view.c:206 msgid "More Apps" msgstr "更多应用" #: src/bz-full-view.c:207 #, c-format msgid "More Apps by %s" msgstr "来自 %s 的更多应用" #: src/bz-full-view.c:214 msgid "Other Apps by this Developer" msgstr "该开发者的其他应用" #: src/bz-full-view.c:216 src/bz-full-view.c:315 #, c-format msgid "Other Apps by %s" msgstr "来自 %s 的其他应用" #: src/bz-full-view.c:225 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s 未安装,但仍存在 %s 的数据。" #: src/bz-full-view.c:317 msgid "Other Apps" msgstr "其他应用" #: src/bz-full-view.c:319 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d 个应用" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "硬件支持情况" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "键盘支持情况" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "需要键盘" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "推荐键盘" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "支持键盘" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "键盘支持情况未知" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "鼠标支持情况" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "需要鼠标或指针设备" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "推荐鼠标或指针设备" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "支持鼠标或指针设备" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "鼠标或指针设备支持情况未知" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "触控支持情况" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "需要触控" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "推荐触控" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "支持触控" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "触控支持情况未知" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "移动设备支持情况" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "可运行于移动设备" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "可能不支持移动设备" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "桌面端支持情况" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "大屏上运行良好" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s 在特定硬件上运行最佳" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s 在大多数设备正常工作" #: src/bz-install-controls.blp:62 msgid "_Open" msgstr "_打开" #: src/bz-install-controls.blp:77 src/bz-install-controls.blp:134 msgid "Uninstall Application" msgstr "卸载此应用程序" #: src/bz-install-controls.blp:87 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "_卸载" #: src/bz-install-controls.blp:121 src/bz-updates-card.c:161 #: src/bz-updates-card.c:180 msgid "Update" msgstr "更新" #: src/bz-install-controls.blp:144 src/bz-installed-tile.blp:114 msgid "Remove" msgstr "卸载" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "搜索已安装的应用程序" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "清除历史" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "未找到应用程序" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "在商店中搜索" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:111 msgid "Library" msgstr "库" #: src/bz-library-page.blp:128 msgid "Pending Updates" msgstr "等待更新" #: src/bz-library-page.blp:155 msgid "Downloads" msgstr "下载" #: src/bz-library-page.blp:198 msgid "Recently Uninstalled" msgstr "最近卸载" #: src/bz-library-page.blp:249 msgid "Clear Finished Tasks" msgstr "清除所有已完成的事务" #: src/bz-library-page.blp:334 msgid "Sort By" msgstr "筛选" #: src/bz-library-page.blp:348 msgid "Name" msgstr "名称" #: src/bz-library-page.blp:354 msgid "Size" msgstr "大小" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "在已安装应用列表中未找到与 “%s” 匹配的项目" #: src/bz-library-page.c:193 src/bz-updates-card.c:426 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u 个可用更新" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u 已安装应用" #: src/bz-license-dialog.blp:94 msgid "Get Involved" msgstr "参与进来" #: src/bz-license-dialog.blp:111 msgid "Learn More" msgstr "了解更多" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "未知许可证" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "社区共建" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "此应用由一个国际社区以开源方式开发而成。\n" "\n" "您可以参与进来,帮助它变得更好。" #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "此应用的许可证未知" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "此应用由国际社区开放开发,并根据 %s 许可证发布。\n" "\n" "您可以参与进来,帮助它变得更好。" #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "此应用未采用开放开发,因此只有开发者知道其运作机制。它可能存在难以察觉的安全" "漏洞,且可能在缺乏监管的情况下进行更改。\n" "\n" "您可能无法为本应用做出贡献。" #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "本应用基于特殊许可证 %s 开发。\n" "\n" "您可能无法为本应用做出贡献。" #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:53 msgid "License" msgstr "许可证" #: src/bz-login-page.blp:5 src/bz-login-page.blp:42 msgid "Connect to Flathub" msgstr "连接到 Flathub" #: src/bz-login-page.blp:32 msgid "Something Went Wrong" msgstr "发生错误" #: src/bz-login-page.blp:43 msgid "Connect your Flathub account to Bazaar to manage your favorited apps." msgstr "将您的 Flathub 账户连接到 Bazaar,以便管理您收藏的应用程序。" #: src/bz-login-page.blp:110 msgid "Finish" msgstr "完成" #: src/bz-login-page.c:664 #, c-format msgid "Hello, %s!" msgstr "你好,%s" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "选择元信息文件" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "元信息文件" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "选择图标(可选)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "图片文件" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "预览" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "偏好设置" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "正在使用计费网络 - 自动储存数据同步已暂停" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:258 msgid "Refresh Manually" msgstr "手动同步" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "内容筛选" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "仅自由软件" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary applications when browsing and searching" msgstr "浏览和搜索时隐藏专有软件" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "仅包含 Flathub 结果" #: src/bz-preferences-dialog.blp:40 msgid "" "Limit search and browse results to applications only available on Flathub" msgstr "限制搜索和浏览的应用仅可从 Flathub 获取" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "仅显示已验证结果" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "隐藏未在 Flathub 上验证的结果" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "隐藏终止支持的应用" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "隐藏开发者不再支持的应用" #: src/bz-preferences-dialog.blp:55 src/bz-window.blp:126 msgid "Search" msgstr "搜索" #: src/bz-preferences-dialog.blp:58 msgid "Delay Search Results" msgstr "延迟搜索结果" #: src/bz-preferences-dialog.blp:59 msgid "Improve results performance by debouncing search terms" msgstr "通过防抖搜索词提升结果性能" #: src/bz-preferences-dialog.blp:64 msgid "Progress Bar" msgstr "进度条" #: src/bz-preferences-dialog.blp:65 msgid "Choose a theme for the progress bar!" msgstr "为进度条选择主题!" #: src/bz-preferences-dialog.blp:89 msgid "Vertical Stripes" msgstr "竖条纹" #: src/bz-preferences-dialog.blp:90 msgid "Display flag colors from left to right" msgstr "从左至右显示旗帜颜色" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "强调色" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "骄傲色" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "女同性恋骄傲色彩" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "男同性恋骄傲色彩" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "跨性别骄傲色" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "非二元性别骄傲色彩" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "双性恋骄傲色彩" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "无性恋骄傲色" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "泛性恋骄傲色" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "无浪漫倾向骄傲色" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "性别流动骄傲色" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "多性恋骄傲色" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "全性恋骄傲色彩" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "无浪漫无性恋者骄傲色" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "无性别骄傲色" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "性别酷儿骄傲色" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "双性恋骄傲色" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "半性别骄傲色" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "双浪漫骄傲色" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "残疾人骄傲色" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "伪娘骄傲色" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "中性骄傲色" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:152 msgid "Version History" msgstr "版本历史" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "_版本历史" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "今天" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "昨夊" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d 天前" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d 周前" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d 月前" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d 年前" #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%e %B %Y" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "版本 %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "未提供变更日志" #: src/bz-releases-list.c:263 msgid "Get More Information" msgstr "获得更多信息" #: src/bz-rich-app-tile.blp:157 msgid "Get" msgstr "获取" #: src/bz-rich-app-tile.blp:185 src/bz-transaction-tile.blp:296 msgid "Open" msgstr "打开" #: src/bz-safety-calculator.c:82 msgid "Unknown Permissions" msgstr "未知权限" #: src/bz-safety-calculator.c:83 msgid "Permissions are missing for this app." msgstr "此应用缺少必要的权限。" #: src/bz-safety-calculator.c:96 msgid "No Permissions" msgstr "没有权限" #: src/bz-safety-calculator.c:97 msgid "App is fully sandboxed" msgstr "应用已完全沙盒化" #: src/bz-safety-calculator.c:103 msgid "Network Access" msgstr "网络访问" #: src/bz-safety-calculator.c:104 msgid "Can access the internet" msgstr "可访问网络" #: src/bz-safety-calculator.c:106 msgid "No Network Access" msgstr "无网络访问" #: src/bz-safety-calculator.c:107 msgid "Cannot access the internet" msgstr "不能访问互联网" #: src/bz-safety-calculator.c:112 msgid "User Device Access" msgstr "用户设备访问" #: src/bz-safety-calculator.c:113 msgid "Can access devices such as webcams or gaming controllers" msgstr "可以访问网络摄像头或游戏控制器等硬件设备" #: src/bz-safety-calculator.c:115 msgid "No User Device Access" msgstr "无用户设备访问" #: src/bz-safety-calculator.c:116 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "应用不能访问网络摄像头或游戏控制器等任何用户设备" #: src/bz-safety-calculator.c:121 msgid "Input Device Access" msgstr "输入设备访问" #: src/bz-safety-calculator.c:122 msgid "Can access input devices" msgstr "可以访问输入设备" #: src/bz-safety-calculator.c:128 msgid "Microphone Access and Audio Playback" msgstr "麦克风访问和音频播放" #: src/bz-safety-calculator.c:129 msgid "Can listen using microphones and play audio without asking permission" msgstr "无需请求权限即可使用麦克风收听和播放音频" #: src/bz-safety-calculator.c:135 msgid "System Device Access" msgstr "系统设备访问" #: src/bz-safety-calculator.c:136 msgid "Can access system devices which require elevated permissions" msgstr "可以访问需要提升权限的系统设备" #: src/bz-safety-calculator.c:142 msgid "Screen Contents Access" msgstr "屏幕内容访问" #: src/bz-safety-calculator.c:143 msgid "Can access the contents of the screen or other windows" msgstr "可以访问屏幕或其他窗口的内容" #: src/bz-safety-calculator.c:149 msgid "Legacy Windowing System" msgstr "过时窗口系统" #: src/bz-safety-calculator.c:150 msgid "Always uses a legacy windowing system (X11)" msgstr "始终使用过时的窗口系统(X11)" #: src/bz-safety-calculator.c:156 msgid "Arbitrary Permissions" msgstr "任意权限" #: src/bz-safety-calculator.c:157 msgid "Can acquire arbitrary permissions" msgstr "可以获取任意权限" #: src/bz-safety-calculator.c:163 msgid "User Settings" msgstr "用户设置" #: src/bz-safety-calculator.c:164 msgid "Can access and change user settings" msgstr "可以访问和更改用户设置" #: src/bz-safety-calculator.c:170 msgid "Full File System Read/Write Access" msgstr "完全的文件系统读写权限" #: src/bz-safety-calculator.c:171 msgid "Can read and write all data on the file system" msgstr "可以读取和写入文件系统上的所有数据" #: src/bz-safety-calculator.c:178 msgid "Home Folder Read/Write Access" msgstr "主文件夹读写权限" #: src/bz-safety-calculator.c:179 msgid "Can read and write all data in your home directory" msgstr "可以读取和写入您主目录中的所有数据" #: src/bz-safety-calculator.c:186 msgid "Full File System Read Access" msgstr "完整文件系统读取访问" #: src/bz-safety-calculator.c:187 msgid "Can read all data on the file system" msgstr "可以读取文件系统上的所有数据" #: src/bz-safety-calculator.c:195 msgid "Home Folder Read Access" msgstr "主文件夹读取权限" #: src/bz-safety-calculator.c:196 msgid "Can read all data in your home directory" msgstr "可以读取您主目录中的所有数据" #: src/bz-safety-calculator.c:204 msgid "Download Folder Read/Write Access" msgstr "下载文件夹读写权限" #: src/bz-safety-calculator.c:205 msgid "Can read and write all data in your downloads directory" msgstr "可以读写下载文件夹中的所有数据" #: src/bz-safety-calculator.c:215 msgid "Download Folder Read Access" msgstr "下载文件夹读取权限" #: src/bz-safety-calculator.c:216 msgid "Can read all data in your downloads directory" msgstr "可以读取您下载目录中的所有数据" #: src/bz-safety-calculator.c:229 msgid "Can read and write all data in the directory" msgstr "可以读写目录中的所有数据" #: src/bz-safety-calculator.c:243 msgid "Can read all data in the directory" msgstr "可以读取目录中的所有数据" #: src/bz-safety-calculator.c:258 msgid "No File System Access" msgstr "无文件系统访问权限" #: src/bz-safety-calculator.c:259 msgid "Cannot access the file system at all" msgstr "完全无法访问文件系统" #: src/bz-safety-calculator.c:266 msgid "Uses System Services" msgstr "使用系统服务" #: src/bz-safety-calculator.c:267 msgid "Can request data from non-portal system services" msgstr "可从非门户系统服务请求数据" #: src/bz-safety-calculator.c:273 msgid "Uses Session Services" msgstr "使用会话服务" #: src/bz-safety-calculator.c:274 msgid "Can request data from non-portal session services" msgstr "可从非门户会话服务请求数据" #: src/bz-safety-calculator.c:322 msgid "No Service Access" msgstr "无服务访问" #: src/bz-safety-calculator.c:323 msgid "Cannot access non-portal session or system services at all" msgstr "完全无法访问非门户会话或系统服务" #: src/bz-safety-calculator.c:331 msgid "Verified App Developer" msgstr "软件开发者已验证" #: src/bz-safety-calculator.c:332 msgid "The developer of this app has been verified to be who they say they are" msgstr "软件开发者的身份已通过验证,使应用更安全" #: src/bz-safety-calculator.c:341 msgid "Proprietary Code" msgstr "专有代码" #: src/bz-safety-calculator.c:342 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "源代码未公开,因此无法进行独立审计,可能存在安全隐患" #: src/bz-safety-calculator.c:352 msgid "Auditable Code" msgstr "可审计代码" #: src/bz-safety-calculator.c:353 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "源代码公开且可独立审计,这使得此应用更可能安全可靠" #: src/bz-safety-calculator.c:493 #, c-format msgid "Use the %s System Service" msgstr "使用 %s 系统服务" #: src/bz-safety-calculator.c:497 #, c-format msgid "Use the %s Session Service" msgstr "使用 %s 会话服务" #: src/bz-safety-calculator.c:501 #, c-format msgid "Use the %s Service" msgstr "使用 %s 服务" #: src/bz-safety-calculator.c:511 msgid "Can see the non-portal service" msgstr "可以看到非门户服务" #: src/bz-safety-calculator.c:513 msgid "Can talk to the non-portal service" msgstr "可与非门户服务进行对话" #: src/bz-safety-calculator.c:515 msgid "Can own the non-portal service" msgstr "可以拥有非门户服务" #: src/bz-safety-calculator.c:530 msgid "Global Menu Integration" msgstr "全局菜单集成" #: src/bz-safety-calculator.c:531 msgid "Can display its menus in a global menu bar" msgstr "可在全局菜单栏中显示其菜单" #: src/bz-safety-calculator.c:536 msgid "KDE Settings Integration" msgstr "KDE 设置集成" #: src/bz-safety-calculator.c:537 msgid "Can detect when KDE desktop settings change" msgstr "可检测 KDE 桌面设置何时发生变化" #: src/bz-safety-calculator.c:542 msgid "KDE Global Settings" msgstr "KDE 全局设置" #: src/bz-safety-calculator.c:543 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "可读取 KDE 桌面偏好设置,如字体和颜色" #: src/bz-safety-calculator.c:548 msgid "Secret Storage Service" msgstr "秘密存储服务" #: src/bz-safety-calculator.c:549 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "可使用系统密钥管理器存储和检索自身密码" #: src/bz-safety-calculator.c:554 msgid "Desktop Notifications Service" msgstr "桌面通知服务" #: src/bz-safety-calculator.c:555 msgid "Can send desktop notifications" msgstr "可以发送桌面通知" #: src/bz-safety-calculator.c:561 msgid "System Tray Integration" msgstr "系统托盘集成" #: src/bz-safety-calculator.c:562 msgid "Can display an icon in the system tray" msgstr "可在系统托盘中显示图标" #: src/bz-safety-calculator.c:567 msgid "KDE Connect Integration" msgstr "KDE Connect 集成" #: src/bz-safety-calculator.c:568 msgid "Can interact with devices paired via KDE Connect" msgstr "可与通过 KDE Connect 配对的设备进行交互" #: src/bz-safety-dialog.blp:7 msgid "Safety" msgstr "安全性" #: src/bz-safety-dialog.blp:63 msgid "App ID" msgstr "App ID" #: src/bz-safety-dialog.blp:73 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:104 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "此应用使用了过时的软件平台(SDK)版本,可能包含无法修复的错误或安全漏洞。" #: src/bz-safety-dialog.c:227 #, c-format msgid "%s is Safe" msgstr "%s 是安全的" #: src/bz-safety-dialog.c:232 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s 没有不安全权限" #: src/bz-safety-dialog.c:237 #, c-format msgid "%s is Probably Safe" msgstr "%s 很可能安全" #: src/bz-safety-dialog.c:242 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s 可能不安全" #: src/bz-safety-dialog.c:247 #, c-format msgid "%s is Unsafe" msgstr "%s 是不安全的" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "屏幕截图" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "上一个截图" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "下一个截图" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "复制图片" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "重置视图" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "缩小" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "放大" #: src/bz-screenshots-carousel.blp:5 msgid "Screenshots Carousel" msgstr "截图轮播" #: src/bz-screenshots-carousel.blp:117 msgid "Open Screenshot Viewer" msgstr "打开截图查看器" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "筛选" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "_已验证" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "_自由及开放源代码" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "非已中止支持" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "筛掉已中止支持的应用" #: src/bz-search-filter-popover.blp:57 msgid "Categories" msgstr "分类" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "搜索应用、游戏、软件" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "搜索筛选" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "清除搜索" #: src/bz-search-page.blp:192 msgid "Categories Unavailable" msgstr "分类不可用" #: src/bz-search-page.blp:193 msgid "Search for apps using the search bar above." msgstr "使用上方搜索栏搜索应用。" #: src/bz-search-page.blp:219 msgid "Browse Categories" msgstr "浏览分类" #: src/bz-search-page.blp:361 msgid "No Applications Found" msgstr "未找到应用" #: src/bz-search-page.c:247 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "在 Flathub 中未找到 “%s” 的结果" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "视频" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "办公" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "日历" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "通讯" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "绘画" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "模拟器" #: src/bz-share-list.c:123 msgid "Copy Link" msgstr "复制链接" #: src/bz-share-list.c:134 msgid "Open Link" msgstr "打开链接" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "时间线" #: src/bz-stats-dialog.blp:45 msgid "Installs:" msgstr "安装:" #: src/bz-stats-dialog.blp:54 msgid "World" msgstr "世界" #: src/bz-stats-dialog.blp:68 msgid "Since 4/15/2024" msgstr "自2024ĺš´4㜈15日开始" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:125 #, c-format msgid "%.2fM Total Installs" msgstr "%.2fM 总安装量" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:128 #, c-format msgid "%.2fK Total Installs" msgstr "%.2fK 总安装量" #: src/bz-stats-dialog.c:130 #, c-format msgid "%'d Total Installs" msgstr "%'d 总安装量" #: src/bz-tag-list.c:78 msgid "No Results Found" msgstr "无结果" #: src/bz-tag-list.c:90 #, c-format msgid "Apps Tagged \"%s\"" msgstr "标记为 “%s” 的应用" #: src/bz-tag-list.c:103 msgid "Search failed" msgstr "搜索失败" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "保留用户数据" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "允许恢复个人设置 & 内容" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "删除所有数据" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "永久删除用户数据以节省空间" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "安装 %s ?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "选择你要安装的版本。可能还要安装共享组件" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "可能还要安装额外的共享组件" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "_取消" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "_安装" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "卸载 %s ?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "选择你要卸载的版本" #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "卸载后将无法使用 %s" #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "“%s” 是高风险的" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "此应用拥有对您系统的完全访问权限,包括您的所有文件、浏览历史、已保存密码等。它还能访问互联网,这意味着它可能将您的数据发送给第三方。\n" "\n" "由于该应用是专有的,其如何利用权限也无法审查。\t" #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "此应用使用传统的 X11 窗口系统,这使其能够记录所有按键、截取屏幕截图并监控" "其他应用程序。同时,该应用具备网络访问权限,这意味着它可能将您的数据发送" "给外部。\n" "\n" "由于该应用是专有的,其如何利用权限也无法审查。" #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "_坚持安装" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "无法加载事务对话框" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "所有应用都已经被安装" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "_好的" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "安装 %u 应用?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "下列组件会被安装。可能还要安装共享组件" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "%d 附加组件将被安装" #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "此外,附加组件将被安装" #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "_安装全部" #: src/bz-transaction-manager.c:784 #, c-format msgid "Finished in %.02f seconds" msgstr "在 %.02f 秒内完成" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "应用附加组件" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "运行时" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "队列中" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "已完成" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "取消" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "错误" #: src/bz-transaction-tile.blp:310 msgid "Cancel Transaction" msgstr "撤销事务" #: src/bz-transaction-tile.blp:434 msgid "Show Error Info" msgstr "显示错误信息" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "%s 已释放" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "事务错误" #: src/bz-transaction.c:344 msgid "Pending" msgstr "等待中" #: src/bz-updates-card.blp:22 msgid "_Update All" msgstr "_更新全部" #: src/bz-updates-card.c:208 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u 个运行时环境更新" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "管理遗留用户数据" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "未找到用户数据" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "用户数据" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "清除用户数据" #: src/bz-user-data-tile.c:144 #, c-format msgid "Trashed User Data for %s" msgstr "已删除 %s 的用户数据" #: src/bz-window.blp:87 msgid "Curated" msgstr "精选" #: src/bz-window.blp:99 msgid "Explore" msgstr "探索" #: src/bz-window.blp:219 msgid "Refresh completed!" msgstr "刷新完成!" #: src/bz-window.blp:238 msgid "Main Menu" msgstr "主菜单" #: src/bz-window.blp:249 msgid "You are running a new version of Bazaar!" msgstr "你正在运行新版本的 Bazaar" #: src/bz-window.blp:250 msgid "See What's New" msgstr "看看更新了啥" #: src/bz-window.blp:257 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "您已连接网络,但正在查看 Flathub 的缓存版本" #: src/bz-window.blp:302 msgid "_Donate to Bazaar" msgstr "_向 Bazaar 捐助 ❤️" #: src/bz-window.blp:309 msgid "_Refresh" msgstr "_刷新" #: src/bz-window.blp:314 msgid "_Preferences" msgstr "_首选项" #: src/bz-window.blp:319 msgid "_Login With Flathub" msgstr "_用 Flathub 登录" #: src/bz-window.blp:325 msgid "_Manage Leftover User Data" msgstr "_管理遗留用户数据" #: src/bz-window.blp:330 msgid "_Keyboard Shortcuts" msgstr "_键盘快捷键" #: src/bz-window.blp:335 msgid "_About Bazaar" msgstr "_关于 Bazaar" #: src/bz-window.blp:342 msgid "_Quit Bazaar" msgstr "_退出 Bazaar" #: src/bz-window.blp:367 msgid "Log Out" msgstr "登出" #. Translators: %s is the title of the current page #: src/bz-window.c:377 #, c-format msgid "Bazaar — %s" msgstr "Bazaar - %s" #: src/bz-window.c:586 src/bz-window.c:624 msgid "Failed to launch application" msgstr "启动应用程序失败" #: src/bz-window.c:825 msgid "You can't remove Bazaar from Bazaar!" msgstr "你无法用 Bazaar 卸载 Bazaar" #: src/bz-window.c:1110 src/bz-window.c:1144 msgid "Can't do that right now!" msgstr "现在还不能这么做!" #: src/bz-world-map.c:603 msgctxt "As in, \"100 Installs\"" msgid "Installs" msgstr "安装" #: src/shortcuts-dialog.blp:6 msgctxt "shortcut window" msgid "General" msgstr "一般" #: src/shortcuts-dialog.blp:9 msgctxt "shortcut window" msgid "Open Search Page" msgstr "打开搜索页" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "打开库" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Refresh" msgstr "刷新" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Open Preferences" msgstr "打开偏好设置" #: src/shortcuts-dialog.blp:30 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "展示快捷键" #: src/shortcuts-dialog.blp:35 msgctxt "shortcut window" msgid "Close Window" msgstr "关闭窗口" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "退出 Bazaar" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "其强调支持那些使 Linux 桌面成为可能的开发者。Bazaar 设有一个\"精选\"标签," #~ "可由发行商配置,以提供更本地化的体验。" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "Nucleus app page" #~ msgstr "Nucleus 应用页" #~ msgid "_Donate to Bazaar ❤️" #~ msgstr "_向 Bazaar 捐助 ❤️" #~ msgid "_Synchronize Remotes" #~ msgstr "_同步远程" #~ msgid "Synchronizing..." #~ msgstr "同步中……" #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "正在接收 %d 个条目..." #~ msgid "Indexing Data..." #~ msgstr "正在索引数据……" #~ msgid "Close" #~ msgstr "关闭" #~ msgid "Copy and Close" #~ msgstr "复制并关闭" #, fuzzy #~ msgid "Open App Library" #~ msgstr "打开应用库" #~ msgid "Installing .flatpak bundles is not yet supported" #~ msgstr "安装 .flatpak 包暂不支持" #~ msgid "Download & Install Application" #~ msgstr "下载并安装应用程序" #~ msgid "Install Other Version" #~ msgstr "安装其他版本" #~ msgid "Keep Data" #~ msgstr "保留数据" #~ msgid "Open App" #~ msgstr "打开" #~ msgid "Refreshing Store Content" #~ msgstr "正在刷新商店内容" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgid "No background tasks!" #~ msgstr "无后台任务!" #~ msgctxt "As in, \"100 Downloads\"" #~ msgid "Downloads" #~ msgstr "次下载" #~ msgctxt "shortcut window" #~ msgid "Synchronize Remotes" #~ msgstr "从远程端同步" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "退出" #~ msgid "Toggle transaction sidebar" #~ msgstr "切换事务侧面板" #~ msgid "Install Size" #~ msgstr "安装大小" #~ msgid "Ongoing" #~ msgstr "进行中" #~ msgid "Finished" #~ msgstr "已完成" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "目前已传输 %s" #~ msgid "Tasks" #~ msgstr "任务" #~ msgid "Stop Active Tasks" #~ msgstr "停止当前任务" #~ msgid "No Tasks Yet" #~ msgstr "当前无任务" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "%d 个更新" #~ msgid "Updates Are Available" #~ msgstr "有可用更新" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "以下应用可进行更新。您想要安装它们吗?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "%d 个运行时和/或插件可进行更新。您要安装它们吗?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "此外,%d 个运行时和/或插件也将被更新" #~ msgid "Update Now" #~ msgstr "立即更新" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "检查和安装本地 .flatpak 包文件的功能即将推出!在此期间,请尝试在命令行运" #~ "行\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "以上命令。" #~ msgid "Resume Current Tasks" #~ msgstr "恢复当前任务" #~ msgid "Pause Current Tasks" #~ msgstr "暂停当前任务" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "切换事务管理器" #~ msgid "Show Animated Background" #~ msgstr "展示动画背景" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "是否在首页展示动画图标背景" #~ msgid "Keep the summary shorter, between 10 and 35 characters" #~ msgstr "保持摘要简短,在 10 至 35 字之间" #~ msgid "Main Bazaar window showing Blender" #~ msgstr "Bazaar 主窗口正在展示 Blender" #~ msgid "This flatpak is verified by the original developers of the software." #~ msgstr "ć­¤ Flatpak 已由软件原开发者认证。" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore" #~ msgstr "Jill Fiore" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "Bazaar 未被提供精选内容配置。联系您的操作系统的支持频道寻求协助。" #~ msgid "Apps Of The Week" #~ msgstr "本周热门应用程序" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "过去 30 天的下载次数。点击查看此应用程序的下载统计信息。" #~ msgid "Remote repo name" #~ msgstr "远程仓库名" #~ msgid "No Flatpaks Installed" #~ msgstr "没有已安装的 Flatpak" #~ msgid "How the application looks" #~ msgstr "这个应用程序看起来怎么样" #~ msgid "Appearance" #~ msgstr "外观" #~ msgid "Show animated background" #~ msgstr "展示动画背景" #~ msgid "Type to filter" #~ msgstr "输入以筛选" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "排除有专有许可证的结果" #~ msgid "Advanced" #~ msgstr "鍘级" #~ msgid "Match using regular expressions" #~ msgstr "使用正则表达式匹配" #~ msgid "Hide filtering and sorting behind a crossfade effect" #~ msgstr "隐藏交叉淡入淡出效果背后的过滤和排序" #~ msgid "Debounce input to prevent instant replies" #~ msgstr "消除输入抖动以防止立即回复" #~ msgid "Share" #~ msgstr "分享" #~ msgid "Open this link externally" #~ msgstr "在外部打开链接" #~ msgid "Downloads Over Time" #~ msgstr "下载趋势" #~ msgid "Minimize Lower Bound" #~ msgstr "调低下限" #~ msgid "Maximize Upper Bound" #~ msgstr "调低上限" #~ msgid "Removing" #~ msgstr "正在卸载" #~ msgid "Halt the execution of transactions" #~ msgstr "停止执行事务" #~ msgid "Browse" #~ msgstr "浏览" #~ msgid "Go Back" #~ msgstr "返回" #~ msgid "View curated applications" #~ msgstr "查看精选的应用程序" #~ msgid "View the latest on Flathub" #~ msgstr "在 Flathub 查看最新的" #~ msgid "Up to date!" #~ msgstr "最新!" #~ msgid "Confirm Action" #~ msgstr "确认操作" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "您将要卸载以下 Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "您确定吗?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "您将安装以下 Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "您确定吗?" #~ msgid "Resume the execution of transactions" #~ msgstr "恢复事务执行" #~ msgid "Pause the execution of transactions" #~ msgstr "暂停事务执行" bazaar-org-bazaar-b6e9a65/po/zh_TW.po000066400000000000000000003012301522167256300174410ustar00rootroot00000000000000# Traditional Chinese translations for bazaar package # Copyright (C) 2025 THE bazaar'S COPYRIGHT HOLDER # This file is distributed under the same license as the bazaar package. # Automatically generated, 2025. # # SPDX-FileCopyrightText: 2025–2026 Shihfu Juan # SPDX-FileCopyrightText: 2025 Peter Dave Hello # SPDX-FileCopyrightText: 2026 Kisaragi Hiu msgid "" msgstr "" "Project-Id-Version: bazaar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-26 02:45+0900\n" "PO-Revision-Date: 2026-06-25 22:43+0900\n" "Last-Translator: Kisaragi Hiu \n" "Language-Team: none\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Lokalize 26.07.70\n" #: data/io.github.kolunmi.Bazaar.desktop.in:2 #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:7 src/bz-window.blp:46 #: src/bz-window.blp:202 src/bz-window.c:373 src/bz-window.c:374 msgid "Bazaar" msgstr "Bazaar" #: data/io.github.kolunmi.Bazaar.desktop.in:3 msgid "Add, remove or update flatpak software on this computer" msgstr "新增、移除或更新此電腦上的 Flatpak 軟體" #: data/io.github.kolunmi.Bazaar.desktop.in:9 msgid "GTK;System;PackageManager;Discover;Flatpak;Software;Store;" msgstr "" "GTK;System;PackageManager;Discover;Flatpak;Software;Store;套件管理;探索;軟體;" "商店;" #: data/io.github.kolunmi.Bazaar.desktop.in:16 msgid "New Window" msgstr "新視窗" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:8 msgid "Discover and install apps" msgstr "探索與安裝應用程式" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:10 msgid "" "A fast and modern app store for Linux with a focus on discovering and " "installing Flatpak apps and add-ons, particularly from Flathub." msgstr "" "為 Linux 打造的高效能現代應用程式商店,著重探索與安裝來自 Flatpak 遠端(特別" "是 Flathub)的應用程式與附加元件。" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:15 msgid "Queue multiple installs and keep browsing" msgstr "將要安裝的應用程式加入佇列然後繼續瀏覽" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:16 msgid "Easily view app permissions" msgstr "輕易檢視應用程式權限" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:17 msgid "Sign in to Flathub to view and manage your favorites" msgstr "登入至 Flathub 以檢視與管理最愛" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:18 msgid "Search apps directly from GNOME Shell" msgstr "直接從 GNOME Shell 搜尋應用程式" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:55 msgid "The home page displaying Flathub apps" msgstr "展示 Flathub 應用程式的首頁" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:59 msgid "Exhibit app page" msgstr "展示應用程式頁面" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:63 msgid "Library page" msgstr "程式庫頁面" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:67 msgid "Search page" msgstr "搜尋頁面" #: data/io.github.kolunmi.Bazaar.metainfo.xml.in:71 msgid "Category page" msgstr "分類頁面" #: src/bz-addon-tile.blp:64 src/bz-installed-tile.blp:55 #: src/bz-rich-app-tile.blp:142 msgid "Stopped Receiving Updates" msgstr "已停止接收更新" #: src/bz-addon-tile.c:168 src/bz-favorites-tile.c:155 msgctxt "Install Controls" msgid "Uninstall" msgstr "解除安裝" #: src/bz-addon-tile.c:170 src/bz-bundle-install-dialog.blp:148 #: src/bz-bundle-install-dialog.blp:162 src/bz-favorites-tile.c:157 #: src/bz-install-controls.wdgt:29 msgctxt "Install Controls" msgid "Install" msgstr "安裝" #: src/bz-addons-dialog.blp:14 src/bz-addons-dialog.blp:21 #: src/bz-addons-dialog.blp:70 src/bz-installed-tile.blp:96 msgid "Manage Add-Ons" msgstr "管理附加元件" #: src/bz-addons-dialog.blp:80 msgid "No Add-Ons Visible" msgstr "沒有可見的附加元件" #: src/bz-addons-dialog.blp:81 msgid "" "Your current filter preferences are hiding all known add-ons. Try adjusting " "them." msgstr "您目前的過濾設定使得所有已知附加元件皆已被隱藏。請試著調整過濾設定。" #: src/bz-addons-dialog.blp:88 msgid "Add-on Page" msgstr "附加元件頁面" #: src/bz-addons-dialog.blp:204 src/bz-full-view.blp:411 msgid "Downloads/Month" msgstr "每月下載次數" #: src/bz-addons-dialog.blp:231 src/bz-full-view.blp:447 msgid "Stopped Receiving Core Updates" msgstr "已停止接收核心更新" #: src/bz-addons-dialog.blp:245 msgid "" "This add-on uses a runtime that no longer receives updates or security " "fixes. It may become unsafe to use." msgstr "" "此應用程式使用的執行環境已不再接收更新或安全修補,使用上可能存在安全風險。" #: src/bz-addons-dialog.c:333 #, c-format msgid "Add-on for %s" msgstr "%s 的附加元件" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 msgid "Show Less" msgstr "顯示更少" #: src/bz-addons-dialog.c:347 src/bz-full-view.c:657 src/bz-section-view.blp:71 msgid "Show More" msgstr "顯示更多" #: src/bz-addons-dialog.c:397 msgid "Download Stats" msgstr "下載統計數據" #: src/bz-age-rating-dialog.blp:7 src/bz-age-rating-dialog.blp:31 #: src/bz-age-rating-dialog.c:736 src/bz-context-tile-callbacks.c:186 #: src/bz-context-tile-callbacks.c:193 msgid "Age Rating" msgstr "年齡分級" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:88 msgid "Cartoon Violence" msgstr "卡通暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:90 msgid "No information regarding cartoon violence" msgstr "未提供任何關於卡通暴力的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:94 msgid "Fantasy Violence" msgstr "幻想暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:96 msgid "No information regarding fantasy violence" msgstr "未提供任何關於幻想暴力的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:100 msgid "Realistic Violence" msgstr "寫實暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:102 msgid "No information regarding realistic violence" msgstr "未提供任何關於寫實暴力的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:106 msgid "Violence Depicting Bloodshed" msgstr "含流血描寫的暴力內容" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:108 msgid "No information regarding bloodshed" msgstr "未提供任何關於流血場面的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:112 msgid "Sexual Violence" msgstr "性暴力" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:114 msgid "No information regarding sexual violence" msgstr "未提供任何關於性暴力的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:118 msgid "Alcohol" msgstr "酒精" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:120 msgid "No information regarding references to alcohol" msgstr "未提供任何關於酒精相關內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:124 msgid "Narcotics" msgstr "毒品" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:126 msgid "No information regarding references to illicit drugs" msgstr "未提供任何關於非法藥物的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:130 msgid "Tobacco" msgstr "菸草" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:132 msgid "No information regarding references to tobacco products" msgstr "未提供任何關於菸草製品的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:136 src/bz-age-rating-dialog.c:475 msgid "Nudity" msgstr "裸露" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:138 msgid "No information regarding nudity of any sort" msgstr "未提供任何關於裸露內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:142 msgid "Sexual Themes" msgstr "性相關主題" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:144 msgid "No information regarding references to or depictions of sexual nature" msgstr "未提供任何關於性相關描寫或暗示的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:148 msgid "Profanity" msgstr "粗俗用語" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:150 msgid "No information regarding profanity of any kind" msgstr "未提供任何關於粗俗用語的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:154 msgid "Inappropriate Humor" msgstr "不當幽默" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:156 msgid "No information regarding inappropriate humor" msgstr "未提供任何關於不當幽默的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:160 msgid "Discrimination" msgstr "歧視" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:162 msgid "No information regarding discriminatory language of any kind" msgstr "未提供任何關於歧視性言語的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:166 msgid "Advertising" msgstr "廣告" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:168 msgid "No information regarding advertising of any kind" msgstr "未提供任何關於廣告內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:172 msgid "Gambling" msgstr "賭博" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:174 msgid "No information regarding gambling of any kind" msgstr "未提供任何關於賭博內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:178 msgid "Purchasing" msgstr "䝘貝賟財" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:180 msgid "No information regarding the ability to spend money" msgstr "未提供任何關於金錢花費功能的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:184 msgid "Chat Between Users" msgstr "使用者之間的文字聊天" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:186 msgid "No information regarding ways to chat with other users" msgstr "未提供任何關於與其他使用者聊天方式的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:190 msgid "Audio Chat Between Users" msgstr "使用者之間的語音聊天" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:192 msgid "No information regarding ways to talk with other users" msgstr "未提供任何關於與其他使用者語音交談方式的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:196 msgid "Contact Details" msgstr "聯絡資訊" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:198 msgid "" "No information regarding sharing of social network usernames or email " "addresses" msgstr "未提供任何關於分享社群帳號或電子郵件地址的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:202 msgid "Identifying Information" msgstr "可識別個人身分的資訊" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:204 msgid "No information regarding sharing of user information with third parties" msgstr "未提供任何關於與第三方分享使用者資訊的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:208 msgid "Location Sharing" msgstr "位置分享" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:210 msgid "No information regarding sharing of physical location with other users" msgstr "未提供任何關於與其他使用者分享實際位置的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:214 msgid "Prostitution" msgstr "性交易" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:216 msgid "No information regarding references to prostitution" msgstr "未提供任何關於性交易相關內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:220 msgid "Adultery" msgstr "通姦" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:222 msgid "No information regarding references to adultery" msgstr "未提供任何關於通姦相關內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:226 msgid "Sexualized Characters" msgstr "性化角色" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:228 msgid "No information regarding sexualized characters" msgstr "未提供任何關於性化角色的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:232 msgid "Desecration" msgstr "褻瀆" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:234 msgid "No information regarding references to desecration" msgstr "未提供任何關於褻瀆相關內容的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:238 msgid "Human Remains" msgstr "人類遺骸" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:240 msgid "No information regarding visible dead human remains" msgstr "未提供任何關於可見人類遺骸的資訊" #. TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:244 msgid "Slavery" msgstr "弴彚" #. TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ #: src/bz-age-rating-dialog.c:246 msgid "No information regarding references to slavery" msgstr "未提供任何關於奴役相關內容的資訊" #: src/bz-age-rating-dialog.c:424 msgid "Does not include references to drugs" msgstr "不包含任何與毒品相關的內容" #: src/bz-age-rating-dialog.c:426 msgid "" "Does not include swearing, profanity, and other kinds of strong language" msgstr "不包含髒話、粗俗用語或其他強烈語言" #: src/bz-age-rating-dialog.c:428 msgid "Does not include ads or monetary transactions" msgstr "不包含廣告或金錢交易" #: src/bz-age-rating-dialog.c:430 msgid "Does not include sex or nudity" msgstr "不包含性內容或裸露描寫" #: src/bz-age-rating-dialog.c:432 msgid "Does not include uncontrolled chat functionality" msgstr "不包含未受控管的通訊功能" #: src/bz-age-rating-dialog.c:434 msgid "Does not include violence" msgstr "不包含暴力內容" #: src/bz-age-rating-dialog.c:469 msgid "Drugs" msgstr "毒品" #: src/bz-age-rating-dialog.c:471 msgid "Strong Language" msgstr "強烈語言" #: src/bz-age-rating-dialog.c:473 msgid "Money" msgstr "金錢" #: src/bz-age-rating-dialog.c:477 msgid "Social" msgstr "礞交" #: src/bz-age-rating-dialog.c:479 msgid "Violence" msgstr "暴力" #. Translators: Age rating format, e.g. "12+" for ages 12 and up #: src/bz-age-rating-dialog.c:686 src/bz-context-tile-callbacks.c:176 #, c-format msgid "%d+" msgstr "%d+" #: src/bz-age-rating-dialog.c:711 msgctxt "Age rating" msgid "All" msgstr "所有年齡層" #: src/bz-age-rating-dialog.c:747 #, c-format msgid "%s has an unknown age rating" msgstr "%s 的年齡分級未知" #: src/bz-age-rating-dialog.c:753 #, c-format msgid "%s is suitable for everyone" msgstr "%s 適合所有年齡層" #: src/bz-age-rating-dialog.c:756 #, c-format msgid "%s is suitable for young children" msgstr "%s 遊合嚟獼" #: src/bz-age-rating-dialog.c:759 #, c-format msgid "%s is suitable for children" msgstr "%s 適合兒童" #: src/bz-age-rating-dialog.c:762 #, c-format msgid "%s is suitable for teenagers" msgstr "%s 適合青少年" #: src/bz-age-rating-dialog.c:765 #, c-format msgid "%s is suitable for adults" msgstr "%s 遊合成人" #: src/bz-age-rating-dialog.c:768 #, c-format msgid "%s is suitable for %s" msgstr "%s 遊合 %s" #: src/bz-age-rating-dialog.c:862 #, c-format msgid "%s • %s" msgstr "%s • %s" #: src/bz-app-permissions.c:160 #, c-format msgid "System folder %s" msgstr "系統資料夾 %s" #: src/bz-app-permissions.c:162 #, c-format msgid "Home subfolder %s" msgstr "家目錄子目錄 %s" #: src/bz-app-permissions.c:164 msgid "Host system folders" msgstr "主機系統資料夾" #: src/bz-app-permissions.c:166 msgid "Host system configuration from /etc" msgstr "來自主機系統 /etc 中的系統設定" #: src/bz-app-permissions.c:169 #, c-format msgid "Desktop subfolder %s" msgstr "桌面子目錄 %s" #: src/bz-app-permissions.c:170 msgid "Desktop folder" msgstr "桌面資料夾" #: src/bz-app-permissions.c:173 #, c-format msgid "Documents subfolder %s" msgstr "文件子目錄 %s" #: src/bz-app-permissions.c:174 msgid "Documents folder" msgstr "文件資料夾" #: src/bz-app-permissions.c:177 #, c-format msgid "Music subfolder %s" msgstr "音樂子目錄 %s" #: src/bz-app-permissions.c:178 msgid "Music folder" msgstr "音樂資料夾" #: src/bz-app-permissions.c:181 #, c-format msgid "Pictures subfolder %s" msgstr "圖片子目錄 %s" #: src/bz-app-permissions.c:182 msgid "Pictures folder" msgstr "圖片資料夾" #: src/bz-app-permissions.c:185 #, c-format msgid "Public Share subfolder %s" msgstr "公開資料夾子目錄 %s" #: src/bz-app-permissions.c:186 msgid "Public Share folder" msgstr "公開資料夾" #: src/bz-app-permissions.c:189 #, c-format msgid "Videos subfolder %s" msgstr "影片子目錄 %s" #: src/bz-app-permissions.c:190 msgid "Videos folder" msgstr "影片資料夾" #: src/bz-app-permissions.c:193 #, c-format msgid "Templates subfolder %s" msgstr "模版子目錄 %s" #: src/bz-app-permissions.c:194 msgid "Templates folder" msgstr "模版資料夾" #: src/bz-app-permissions.c:197 #, c-format msgid "User cache subfolder %s" msgstr "使用者快取子目錄 %s" #: src/bz-app-permissions.c:198 msgid "User cache folder" msgstr "使用者快取資料夾" #: src/bz-app-permissions.c:201 #, c-format msgid "User configuration subfolder %s" msgstr "使用者設定子目錄 %s" #: src/bz-app-permissions.c:202 msgid "User configuration folder" msgstr "使用者設定資料夾" #: src/bz-app-permissions.c:205 #, c-format msgid "User data subfolder %s" msgstr "使用者資料子目錄 %s" #: src/bz-app-permissions.c:206 msgid "User data folder" msgstr "使用者資料資料夾" #: src/bz-app-permissions.c:209 #, c-format msgid "User runtime subfolder %s" msgstr "使用者執行環境子目錄 %s" #: src/bz-app-permissions.c:210 msgid "User runtime folder" msgstr "使用者執行環境資料夾" #: src/bz-app-permissions.c:212 #, c-format msgid "Filesystem access to %s" msgstr "對 %s 的檔案系統存取" #: src/bz-app-permissions.c:214 msgid "Unknown filesystem path" msgstr "未知的檔案系統目錄" #: src/bz-app-size-dialog.blp:26 src/bz-app-size-dialog.blp:60 msgid "Download Size" msgstr "下載大小" #: src/bz-app-size-dialog.blp:33 src/bz-app-size-dialog.blp:81 msgid "Installed Size" msgstr "安裝大小" #: src/bz-app-size-dialog.blp:61 msgid "Amount to download from the internet" msgstr "從網際網路下載的大小" #: src/bz-app-size-dialog.blp:82 msgid "Size on Disk" msgstr "磁碟上的大小" #: src/bz-app-size-dialog.blp:133 msgid "Open user data folder" msgstr "開啟使用者資料資料夾" #: src/bz-app-size-dialog.blp:143 msgid "Your User Data" msgstr "您的使用者資料" #: src/bz-app-size-dialog.blp:144 msgid "Caches, settings, and other app data" msgstr "快取、設定以及其他應用程式資料" #: src/bz-app-size-dialog.blp:165 msgid "Cache" msgstr "快取" #: src/bz-app-size-dialog.blp:166 msgid "Temporary cached data" msgstr "暫時快取的資料" #: src/bz-app-size-dialog.blp:176 msgid "Clear Cache" msgstr "清除快取" #: src/bz-app-size-dialog.c:99 msgid "Installed Runtime Size" msgstr "安裝後的執行環境大小" #: src/bz-app-size-dialog.c:99 msgid "Runtime Download Size" msgstr "執行環境的下載大小" #: src/bz-app-size-dialog.c:111 src/bz-bundle-install-dialog.c:185 #: src/bz-context-tile-callbacks.c:104 src/bz-context-tile-callbacks.c:393 #: src/bz-context-tile-callbacks.c:410 msgid "N/A" msgstr "N/A" #: src/bz-app-size-dialog.c:226 msgid "App Size" msgstr "應用程式大小" #: src/bz-app-tile.blp:57 src/bz-developer-badge.c:98 #: src/bz-rich-app-tile.blp:106 src/bz-rich-app-tile.c:443 msgid "Verified" msgstr "已驗證" #. Translators: As in 'The app is installed'. #: src/bz-app-tile.blp:88 src/bz-context-tile-callbacks.c:135 #: src/bz-releases-list.c:206 msgid "Installed" msgstr "已安裝" #: src/bz-application.c:786 msgid "The Bazaar Contributors" msgstr "Bazaar 貢獻者" #. Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 #: src/bz-application.c:789 msgid "translator-credits" msgstr "" "Shihfu Juan , 2025,2026\n" "Peter Dave Hello , 2025\n" "Kisaragi Hiu , 2026" #: src/bz-application.c:799 msgid "Special Thanks" msgstr "特別感謝" #: src/bz-application.c:857 msgid "Logged Out Successfully!" msgstr "已成功登出!" #: src/bz-application.c:995 msgid "Performing setup…" msgstr "正在進行設定…" #: src/bz-application.c:1087 msgid "Set Up System Flathub?" msgstr "設定系統 Flathub?" #: src/bz-application.c:1090 msgid "" "The system Flathub remote is not set up. Bazaar requires Flathub to be " "configured on the system Flatpak installation to browse and install " "applications.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "未設定系統 Flathub 遠端。Bazaar 需要系統 Flatpak 有設定好 Flathub 才能瀏覽與" "安裝應用程式。\n" "\n" "您仍可使用 Bazaar 來瀏覽或移除已安裝的應用程式。" #: src/bz-application.c:1097 msgid "Set Up Flathub?" msgstr "要設定 Flathub 嗎?" #: src/bz-application.c:1100 msgid "" "Flathub is not set up on this system. You will not be able to browse and " "install applications in Bazaar if its unavailable.\n" "\n" "You can still use Bazaar to browse and remove already installed apps." msgstr "" "Flathub 未在此系統上設定完成。若無法使用 Flathub,您將無法在 Bazaar 中瀏覽或" "安裝應用程式。\n" "\n" "您仍可使用 Bazaar 來瀏覽或移除已安裝的應用程式。" #: src/bz-application.c:1106 msgid "Later" msgstr "稍後" #: src/bz-application.c:1107 msgid "Set Up Flathub" msgstr "設定 Flathub" #: src/bz-application.c:1626 msgid "A backend error occurred" msgstr "發生後端錯誤" #: src/bz-application.c:1826 src/bz-application.c:4024 msgid "Refreshing…" msgstr "重新整理中…" #: src/bz-application.c:1990 src/bz-application.c:4022 #, c-format msgid "Loading %d apps…" msgstr "正在載入 %d 個應用程式…" #: src/bz-application.c:2043 msgid "Failed to open file" msgstr "開啟檔案失敗" #: src/bz-application.c:2141 msgid "An initialization error occurred" msgstr "發生初始化錯誤" #: src/bz-application.c:2535 msgid "Checking for updates…" msgstr "正在檢查更新…" #: src/bz-application.c:2591 msgid "Failed to check for updates" msgstr "檢查更新失敗" #: src/bz-application.c:3735 msgid "Malformed Link" msgstr "不正確的連結" #: src/bz-application.c:3736 msgid "" "The link used to open this app has incorrect capitalization and may stop " "working in the future.\n" "\n" "This is most likely caused by KRunner sending incorrect app IDs" msgstr "" "用來開啟此應用程式的連結的大小寫不正確,可能在未來會不再能夠使用。\n" "\n" "這通常是因為 KRunner 傳送了不正確的應用程式 ID 所造成的" #: src/bz-application.c:3744 msgid "Could not find app" msgstr "找不到應用程式" #: src/bz-application.c:3775 msgid "Failed to load metainfo" msgstr "載入 metainfo 失敗" #: src/bz-application.c:4026 msgid "Writing to cache…" msgstr "正在寫入快取…" #: src/bz-apps-page.blp:97 msgid "Show All" msgstr "顯示全部" #: src/bz-apps-page.c:214 #, c-format msgid "All \"%s\"" msgstr "全部 「%s」" #: src/bz-apps-page.c:462 src/bz-subcategory-list.c:89 #, c-format msgid "%d Applications" msgstr "%d 個應用程式" #: src/bz-article.blp:86 msgid "Failed to Load Article" msgstr "載入文章失敗" #: src/bz-bundle-install-dialog.blp:21 src/bz-bundle-install-dialog.blp:27 msgid "Bundle Installation" msgstr "Bundle 安裝" #: src/bz-bundle-install-dialog.blp:198 msgid "Additional dependencies may take extra space" msgstr "額外依賴可能會需要更多空間" #: src/bz-bundle-install-dialog.blp:232 msgid "" "Installing this app may require adding a new software source. Other apps " "from this source will show up in Bazaar.\n" "\n" "Only add this source if you're sure you trust it." msgstr "" "安裝此應用程式可能需要加入新的軟體來源。加入後此來源的應用程式會出現在 " "Bazaar 當中。\n" "\n" "請確定僅在信任該來源時才將它加入。" #: src/bz-bundle-install-dialog.blp:412 msgid "Successfully Installed!" msgstr "成功安裝!" #: src/bz-bundle-install-dialog.blp:437 src/bz-bundle-install-dialog.blp:522 #: src/bz-rich-app-tile.blp:199 src/bz-transaction-tile.blp:298 msgid "Open" msgstr "開啟" #: src/bz-bundle-install-dialog.blp:447 src/bz-bundle-install-dialog.blp:532 msgid "Show App Details" msgstr "顯示應用程式詳細資訊" #: src/bz-bundle-install-dialog.blp:498 msgid "Already Installed" msgstr "已安裝" #: src/bz-bundle-install-dialog.blp:544 msgid "Installation Failed" msgstr "安裝失敗" #: src/bz-bundle-install-dialog.c:168 msgid "Unknown install size" msgstr "未知安裝大小" #: src/bz-bundle-install-dialog.c:171 #, c-format msgid "About %s to install" msgstr "安裝需要大約 %s" #: src/bz-bundle-install-dialog.c:214 msgid "No special permissions" msgstr "無特殊權限" #: src/bz-context-tile-callbacks.c:68 msgid "---" msgstr "---" #. Translators: M is the suffix for millions #: src/bz-context-tile-callbacks.c:75 #, c-format msgid "%.*fM" msgstr "%.*fM" #. Translators: K is the suffix for thousands #: src/bz-context-tile-callbacks.c:82 #, c-format msgid "%.*fK" msgstr "%.*fK" #: src/bz-context-tile-callbacks.c:92 #, c-format msgid "%d downloads in the last month" msgstr "在過去一個月內有 %d 次下載" #: src/bz-context-tile-callbacks.c:132 #, c-format msgid "+%s runtime" msgstr "+%s 執行環境" #: src/bz-context-tile-callbacks.c:135 msgid "Download" msgstr "下載" #: src/bz-context-tile-callbacks.c:155 msgid "Size information unavailable" msgstr "大小資訊未知" #: src/bz-context-tile-callbacks.c:158 #, c-format msgid "Download size of %s" msgstr "下載 %s 的大小" #: src/bz-context-tile-callbacks.c:191 msgid "All Ages" msgstr "所有年齡層" #: src/bz-context-tile-callbacks.c:203 msgid "Age rating information unavailable" msgstr "年齡分級資訊未知" #: src/bz-context-tile-callbacks.c:208 msgid "Suitable for all ages" msgstr "適合所有年齡層" #: src/bz-context-tile-callbacks.c:210 #, c-format msgid "Suitable for ages %d and up" msgstr "遊合 %d 歲以上" #: src/bz-context-tile-callbacks.c:243 src/bz-context-tile-callbacks.c:248 #: src/bz-context-tile-callbacks.c:276 src/bz-context-tile-callbacks.c:285 msgid "Unknown" msgstr "未知" #: src/bz-context-tile-callbacks.c:253 #, c-format msgid "Free software licensed under %s" msgstr "䞝 %s 授權的自由軟體" #: src/bz-context-tile-callbacks.c:258 msgid "Free software" msgstr "自由軟體" #: src/bz-context-tile-callbacks.c:261 msgid "Proprietary Software" msgstr "專有軟體" #: src/bz-context-tile-callbacks.c:264 #, c-format msgid "Special License: %s" msgstr "特殊授權:%s" #. TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis" #: src/bz-context-tile-callbacks.c:282 msgid "Free Software" msgstr "自由軟體" #: src/bz-context-tile-callbacks.c:288 src/bz-license-dialog.c:133 msgid "Proprietary" msgstr "專有" #: src/bz-context-tile-callbacks.c:290 src/bz-license-dialog.c:135 msgid "Special License" msgstr "特殊授權" #: src/bz-context-tile-callbacks.c:310 msgid "Adaptive" msgstr "支援多裝置" #: src/bz-context-tile-callbacks.c:310 msgid "Desktop Only" msgstr "僅限桌面" #: src/bz-context-tile-callbacks.c:316 msgid "Works on desktop, tablets, and phones" msgstr "可在電腦、平板與手機上使用" #: src/bz-context-tile-callbacks.c:317 msgid "May not work on mobile devices" msgstr "可能無法在行動裝置上使用" #: src/bz-context-tile-callbacks.c:400 src/bz-safety-dialog.blp:79 msgid "Safe" msgstr "安全" #: src/bz-context-tile-callbacks.c:402 src/bz-context-tile-callbacks.c:404 msgid "Low Risk" msgstr "低風險" #: src/bz-context-tile-callbacks.c:406 msgid "Medium Risk" msgstr "中度風險" #: src/bz-context-tile-callbacks.c:408 msgid "High Risk" msgstr "高風險" #: src/bz-curated-view.blp:24 src/bz-favorites-page.blp:46 #: src/bz-flathub-page.blp:19 src/bz-full-view.blp:30 src/bz-full-view.blp:41 #: src/bz-library-page.blp:67 src/bz-user-data-page.blp:30 msgid "Empty" msgstr "無內容" #: src/bz-curated-view.blp:28 msgid "No Curation" msgstr "未經人工策選" #: src/bz-curated-view.blp:30 msgid "" "There is no curation information provided on this system. You can still " "browse apps on Flathub" msgstr "此系統未提供人工策選資訊。你仍可瀏覽 Flathub 上的應用程式" #: src/bz-curated-view.blp:34 msgid "Browse Flathub" msgstr "瀏覽 Flathub" #: src/bz-curated-view.blp:47 src/bz-curated-view.blp:51 msgid "Offline" msgstr "離線" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-curated-view.blp:57 src/bz-flathub-page.blp:61 #: src/bz-search-pill-list.c:67 msgid "Browser" msgstr "瀏覽" #: src/bz-developer-badge.c:94 src/bz-developer-badge.c:98 msgid "Not Verified" msgstr "未驗證" #: src/bz-developer-badge.c:213 msgid "Developer information not available." msgstr "無法取得開發者資訊。" #: src/bz-developer-badge.c:219 src/bz-developer-badge.c:233 #, c-format msgid "" "The ownership of the %s app ID has not been verified and it may be a " "community package." msgstr "應用程式 ID %s 的所有權尚未經過驗證,可能為社群提供的套件。" #: src/bz-developer-badge.c:237 #, c-format msgid "" "The ownership of the %s app ID has been manually verified by the Flathub " "team." msgstr "應用程式 ID %s 的所有權已由 Flathub 團隊人工驗證。" #: src/bz-developer-badge.c:253 #, c-format msgid "" "The ownership of the %1$s app ID has been verified by %2$s on " "%3$s." msgstr "應用程式 ID %1$s 的所有權已由 %2$s 於 %3$s 驗證。" #: src/bz-developer-badge.c:260 #, c-format msgid "The ownership of the %1$s app ID has been verified using %2$s." msgstr "應用程式 ID %1$s 的所有權已透過 %2$s 驗證。" #: src/bz-developer-badge.c:264 #, c-format msgid "The ownership of the %s app ID has been verified." msgstr "應用程式 ID %s 的所有權已完成驗證。" #: src/bz-donations-dialog.blp:74 msgid "Full Release Notes" msgstr "完整發行註記" #: src/bz-donations-dialog.blp:108 msgid "This release was made possible by users like you!" msgstr "這個版本由如同您的使用者支持而變得可能!" #: src/bz-donations-dialog.blp:116 msgid "" "I love making Bazaar, but I cannot do it alone. Help support further " "development by donating on Ko-Fi." msgstr "" "我熱愛製作 Bazaar,但我沒辦法靠自己一個人獨自完成。請到 Ko-Fi 捐款來支持持續" "的開發。" #: src/bz-donations-dialog.blp:131 msgid "Donate to Bazaar" msgstr "捐款給 Bazaar" #. Translators: the %s format specifier will be something along the lines of "0.7.6" etc #: src/bz-donations-dialog.c:227 #, c-format msgid "What's New in %s?" msgstr "%s 有什麼新功能?" #. Translators: this is a release date label, like "Released February 9, 2026" #: src/bz-donations-dialog.c:243 msgid "Released %B %-e, %Y" msgstr "於%Yĺš´%m㜈%d日釋出" #: src/bz-entry-group-util.c:73 msgid "Choose an Installation" msgstr "選擇要使用的安裝項目" #: src/bz-entry-group-util.c:76 msgid "" "You have multiple versions of this app installed. Which one would you like " "to proceed with?" msgstr "您已安裝此應用程式的多個版本。要繼續使用哪一個版本?" #: src/bz-entry-group-util.c:80 src/bz-rich-app-tile.blp:233 msgid "Cancel" msgstr "取消" #: src/bz-entry-selection-row.blp:17 msgid "For This User Only" msgstr "僅此使用者" #: src/bz-entry-selection-row.c:112 msgid "this user" msgstr "這個使用者" #: src/bz-entry-selection-row.c:112 msgid "all users" msgstr "所有使用者" #: src/bz-error-dialog.blp:36 src/bz-error.c:69 src/bz-error.c:88 #: src/bz-safety-dialog.blp:98 msgid "Details" msgstr "詳細資訊" #: src/bz-error-dialog.blp:47 msgid "Copy" msgstr "複製" #: src/bz-error-dialog.c:56 src/bz-screenshot-page.c:408 #: src/bz-share-list.c:364 msgid "Copied!" msgstr "已複製!" #: src/bz-favorite-button.blp:14 msgid "Favorite Count" msgstr "收藏數量" #: src/bz-favorite-button.c:388 msgid "Failed to update favorite" msgstr "更新收藏失敗" #: src/bz-favorite-button.c:434 msgid "Log in with Flathub to manage favorites" msgstr "登入至 Flathub 以管理最愛" #: src/bz-favorite-button.c:440 msgid "Log In" msgstr "登入" #: src/bz-favorites-page.blp:5 src/bz-favorites-page.blp:56 #: src/bz-window.blp:335 msgid "Favorites" msgstr "收藏" #: src/bz-favorites-page.blp:17 src/bz-section-view.blp:86 msgid "Install All" msgstr "安裝全部" #: src/bz-favorites-page.blp:34 src/bz-user-data-page.blp:19 msgid "Loading" msgstr "載入中" #: src/bz-favorites-page.blp:49 msgid "No Favorites" msgstr "沒有收藏" #: src/bz-favorites-page.blp:50 msgid "Applications you mark as favorite will appear here" msgstr "您所收藏的應用程式將會顯示在這裡" #: src/bz-favorites-tile.blp:60 msgid "Support This Application" msgstr "支援此應用程式" #: src/bz-favorites-tile.blp:109 msgid "Remove From Favorites" msgstr "從收藏中移除" #: src/bz-favorites-tile.c:353 msgid "Failed to remove favorite" msgstr "移除收藏失敗" #: src/bz-featured-carousel.blp:32 msgid "Previous" msgstr "上一個" #: src/bz-featured-carousel.blp:55 msgid "Next" msgstr "下一個" #: src/bz-flathub-category.c:95 msgid "Editing" msgstr "硨蟯" #: src/bz-flathub-category.c:96 msgid "Midi" msgstr "MIDI" #: src/bz-flathub-category.c:97 msgid "Mixer" msgstr "混音" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-flathub-category.c:98 src/bz-search-pill-list.c:77 msgid "Music" msgstr "音樂" #: src/bz-flathub-category.c:99 msgid "Player" msgstr "播放程式" #: src/bz-flathub-category.c:100 msgid "Recorder" msgstr "錄音機" #: src/bz-flathub-category.c:101 msgid "Sequencer" msgstr "音序器" #: src/bz-flathub-category.c:102 msgid "Tuner" msgstr "調諧器" #: src/bz-flathub-category.c:103 msgid "TV" msgstr "電視" #: src/bz-flathub-category.c:108 msgid "Emulation" msgstr "模擬器" #: src/bz-flathub-category.c:109 msgid "Action" msgstr "動作" #: src/bz-flathub-category.c:110 msgid "Adventure" msgstr "冒險" #: src/bz-flathub-category.c:111 msgid "Arcade" msgstr "街機" #: src/bz-flathub-category.c:112 msgid "Blocks" msgstr "方塊" #: src/bz-flathub-category.c:113 msgid "Board" msgstr "棋盤" #: src/bz-flathub-category.c:114 msgid "Card" msgstr "卡片" #: src/bz-flathub-category.c:115 msgid "Kids" msgstr "兒童" #: src/bz-flathub-category.c:116 msgid "Logic" msgstr "邏輯" #: src/bz-flathub-category.c:117 msgid "Role Playing" msgstr "角色扮演" #: src/bz-flathub-category.c:118 msgid "Shooter" msgstr "射擊" #: src/bz-flathub-category.c:119 msgid "Simulation" msgstr "模擬" #: src/bz-flathub-category.c:120 msgid "Sports" msgstr "運動" #: src/bz-flathub-category.c:121 msgid "Strategy" msgstr "策略" #: src/bz-flathub-category.c:126 msgid "Browsers" msgstr "瀏覽器" #: src/bz-flathub-category.c:127 msgid "Chat" msgstr "聊天" #: src/bz-flathub-category.c:128 msgid "Mail" msgstr "郾䝜" #: src/bz-flathub-category.c:129 msgid "File Sharing" msgstr "檔案分享" #: src/bz-flathub-category.c:134 msgid "Audio & Video" msgstr "影音" #: src/bz-flathub-category.c:134 msgid "Media" msgstr "媒體" #: src/bz-flathub-category.c:134 msgid "More Audio & Video" msgstr "更多影音" #: src/bz-flathub-category.c:135 msgid "Developer Tools" msgstr "開發者工具" #: src/bz-flathub-category.c:135 msgid "Develop" msgstr "開發" #: src/bz-flathub-category.c:135 msgid "More Developer Tools" msgstr "更多開發者工具" #: src/bz-flathub-category.c:136 msgid "Education" msgstr "教育" #: src/bz-flathub-category.c:136 msgid "Learn" msgstr "學習" #: src/bz-flathub-category.c:136 msgid "More Education" msgstr "更多教育" #: src/bz-flathub-category.c:137 msgid "Gaming" msgstr "遊㈞" #: src/bz-flathub-category.c:137 msgid "Play" msgstr "遊玩" #: src/bz-flathub-category.c:137 msgid "More Gaming" msgstr "更多遊戲" #: src/bz-flathub-category.c:138 msgid "Graphics & Photography" msgstr "影像與攝影" #: src/bz-flathub-category.c:138 msgid "Create" msgstr "創作" #: src/bz-flathub-category.c:138 msgid "More Graphics & Photography" msgstr "更多影像與攝影" #: src/bz-flathub-category.c:139 msgid "Networking" msgstr "眲衯" #: src/bz-flathub-category.c:139 msgid "Internet" msgstr "網際網路" #: src/bz-flathub-category.c:139 msgid "More Networking" msgstr "更多網路" #: src/bz-flathub-category.c:140 msgid "Productivity" msgstr "生產力" #: src/bz-flathub-category.c:140 msgid "Work" msgstr "工作" #: src/bz-flathub-category.c:140 msgid "More Productivity" msgstr "更多生產力" #: src/bz-flathub-category.c:141 msgid "Science" msgstr "科學" #: src/bz-flathub-category.c:141 msgid "More Science" msgstr "更多科學" #: src/bz-flathub-category.c:142 msgid "System" msgstr "çłťçľą" #: src/bz-flathub-category.c:142 msgid "More System" msgstr "更多系統" #: src/bz-flathub-category.c:143 msgid "Utilities" msgstr "工具程式" #: src/bz-flathub-category.c:143 src/bz-flathub-page.blp:437 msgid "Tools" msgstr "工具" #: src/bz-flathub-category.c:143 msgid "More Utilities" msgstr "更多工具程式" #: src/bz-flathub-category.c:144 src/bz-flathub-page.blp:109 #: src/bz-flathub-page.blp:141 msgid "Trending" msgstr "近期熱門" #: src/bz-flathub-category.c:144 msgid "More Trending" msgstr "更多近期熱門" #: src/bz-flathub-category.c:145 src/bz-flathub-page.blp:115 #: src/bz-flathub-page.blp:174 msgid "Popular" msgstr "最受歡迎" #: src/bz-flathub-category.c:145 msgid "More Popular" msgstr "更多最受歡迎" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:163 msgid "Recently Added" msgstr "最近新增" #: src/bz-flathub-category.c:146 src/bz-flathub-page.blp:121 msgid "New" msgstr "最新" #: src/bz-flathub-category.c:146 msgid "More New" msgstr "更多最新" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:152 msgid "Recently Updated" msgstr "最近更新" #: src/bz-flathub-category.c:147 src/bz-flathub-page.blp:127 msgid "Updated" msgstr "已更新" #: src/bz-flathub-category.c:147 msgid "More Updated" msgstr "更多更新" #: src/bz-flathub-category.c:148 msgid "Mobile" msgstr "行動裝置" #: src/bz-flathub-category.c:148 msgid "More Mobile" msgstr "更多行動裝置" #: src/bz-flathub-category.c:149 msgid "Adwaita" msgstr "Adwaita" #: src/bz-flathub-category.c:149 msgid "More Adwaita" msgstr "更多 Adwaita" #: src/bz-flathub-category.c:150 msgid "KDE Apps" msgstr "KDE 應用程式" #: src/bz-flathub-category.c:150 msgid "More KDE Apps" msgstr "更多 KDE 應用程式" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:419 msgid "Games" msgstr "遊㈞" #: src/bz-flathub-category.c:151 src/bz-flathub-page.blp:479 msgid "More Games" msgstr "更多遊戲" #: src/bz-flathub-category.c:152 src/bz-flathub-page.blp:425 msgid "Emulators" msgstr "模擬器" #: src/bz-flathub-category.c:152 msgid "More Emulators" msgstr "更多模擬器" #: src/bz-flathub-category.c:153 src/bz-flathub-page.blp:431 msgid "Launchers" msgstr "啟動器" #: src/bz-flathub-category.c:153 msgid "More Game Launchers" msgstr "更多遊戲啟動器" #: src/bz-flathub-category.c:154 msgid "Game Tools" msgstr "遊戲工具" #: src/bz-flathub-category.c:154 msgid "More Game Tools" msgstr "更多遊戲工具" #: src/bz-flathub-page.blp:23 msgid "Flathub Not Added" msgstr "尚未加入 Flathub" #: src/bz-flathub-page.blp:24 msgid "The Flathub remote was not found on any of your Flatpak installations" msgstr "在您的任何 Flatpak 安裝中都找不到 Flathub 遠獯" #: src/bz-flathub-page.blp:30 msgid "Flathub Unavailable" msgstr "Flathub 無法使用" #: src/bz-flathub-page.blp:34 msgid "Can't Reach Flathub" msgstr "無法連線至 Flathub" #: src/bz-flathub-page.blp:35 msgid "You can still manage and search for apps." msgstr "您仍可管理或搜尋應用程式。" #: src/bz-flathub-page.blp:41 msgid "Search Apps" msgstr "搜尋應用程式" #: src/bz-flathub-page.blp:52 msgid "Reconnect" msgstr "重新連線" #: src/bz-flathub-page.blp:202 msgid "App of the Day" msgstr "今日精選應用程式" #: src/bz-flathub-page.blp:265 msgid "On the Go" msgstr "隨時隨地" #: src/bz-flathub-page.blp:277 msgid "Apps for your Linux phones and tablets" msgstr "適用於您的 Linux 手機與平板的應用程式" #: src/bz-flathub-page.blp:288 src/bz-flathub-page.blp:323 msgid "More Mobile Apps" msgstr "更多行動應用程式" #: src/bz-flathub-page.blp:381 msgid "We​ ♥​ Games" msgstr "我們 ♥ 遊㈞" #: src/bz-flathub-page.blp:394 msgid "Games and apps to run your favorite titles" msgstr "用來執行您最愛作品的遊戲與應用程式" #: src/bz-full-view.blp:34 src/bz-library-page.blp:78 #: src/bz-library-page.blp:82 msgid "No Results" msgstr "沒有結果" #: src/bz-full-view.blp:35 msgid "Try a different search query" msgstr "請嘗試不同的搜尋關鍵字" #: src/bz-full-view.blp:47 msgid "Content" msgstr "內容" #: src/bz-full-view.blp:106 msgid "" "This is a local preview, some details may differ from the published listing" msgstr "這是本地預覽,一些細節可能與發佈後的頁面不同" #: src/bz-full-view.blp:109 msgid "Preview Store Appearance" msgstr "預覽商店外觀" #: src/bz-full-view.blp:236 msgid "_Support" msgstr "贊助(_S)" #: src/bz-full-view.blp:461 msgid "" "This app uses a runtime that no longer receives updates or security fixes. " "It may become unsafe to use." msgstr "" "此應用程式使用的執行環境已不再接收更新或安全修補,使用上可能存在安全風險。" #: src/bz-full-view.blp:540 msgid "Trash Data" msgstr "將資料移至垃圾桶" #: src/bz-full-view.blp:603 msgid "Add-ons" msgstr "附加元件" #: src/bz-full-view.blp:638 msgid "More Add-Ons" msgstr "更多附加元件" #: src/bz-full-view.blp:649 msgid "Links" msgstr "連結" #: src/bz-full-view.c:181 msgid "No URL" msgstr "沒有網址" #: src/bz-full-view.c:199 msgid "" "This app has a FLOSS license, meaning the source code can be audited for " "safety." msgstr "" "此應用程式具有 FLOSS(自由且開源)授權,這意味著其原始碼可供審查以確保安全" "性。" #: src/bz-full-view.c:200 msgid "" "This app has a proprietary license, meaning the source code is developed " "privately and cannot be audited by an independent third party." msgstr "此應用程式採用專有授權,表示其原始碼為私有,無法由第三方獨立審查。" #: src/bz-full-view.c:207 msgid "More Apps" msgstr "更多應用程式" #: src/bz-full-view.c:208 #, c-format msgid "More Apps by %s" msgstr "更多由 %s 製作的應用程式" #: src/bz-full-view.c:215 msgid "Other Apps by this Developer" msgstr "其他由此開發者製作的應用程式" #: src/bz-full-view.c:217 src/bz-full-view.c:317 #, c-format msgid "Other Apps by %s" msgstr "其他由 %s 製作的應用程式" #: src/bz-full-view.c:226 #, c-format msgid "%s is not installed, but it still has %s of data present." msgstr "%s 並未安裝,但仍保留 %s 的資料。" #: src/bz-full-view.c:319 msgid "Other Apps" msgstr "其他應用程式" #: src/bz-full-view.c:321 #, c-format msgid "%d Application" msgid_plural "%d Applications" msgstr[0] "%d 個應用程式" #: src/bz-full-view.c:537 src/bz-user-data-tile.c:144 msgid "Failed to Remove User Data" msgstr "移除使用者資料失敗" #: src/bz-hardware-support-dialog.blp:7 src/bz-hardware-support-dialog.blp:31 msgid "Hardware Support" msgstr "硬體支援" #: src/bz-hardware-support-dialog.c:62 msgid "Keyboard support" msgstr "鍵盤支援" #: src/bz-hardware-support-dialog.c:64 msgid "Requires keyboards" msgstr "需要鍵盤" #: src/bz-hardware-support-dialog.c:65 msgid "Recommends keyboards" msgstr "建議搭配鍵盤使用" #: src/bz-hardware-support-dialog.c:66 msgid "Supports keyboards" msgstr "支援鍵盤" #: src/bz-hardware-support-dialog.c:67 msgid "Unknown support for keyboards" msgstr "鍵盤支援情況未知" #: src/bz-hardware-support-dialog.c:69 msgid "Mouse support" msgstr "滑鼠支援" #: src/bz-hardware-support-dialog.c:71 msgid "Requires mice or pointing devices" msgstr "需要滑鼠或指向性裝置" #: src/bz-hardware-support-dialog.c:72 msgid "Recommends mice or pointing devices" msgstr "建議搭配滑鼠或指向性裝置" #: src/bz-hardware-support-dialog.c:73 msgid "Supports mice or pointing devices" msgstr "支援滑鼠或指向性裝置" #: src/bz-hardware-support-dialog.c:74 msgid "Unknown support for mice or pointing devices" msgstr "滑鼠或指向性裝置支援情況未知" #: src/bz-hardware-support-dialog.c:76 msgid "Touchscreen support" msgstr "觸控螢幕支援" #: src/bz-hardware-support-dialog.c:78 msgid "Requires touchscreens" msgstr "需要觸控螢幕" #: src/bz-hardware-support-dialog.c:79 msgid "Recommends touchscreens" msgstr "建議搭配觸控螢幕" #: src/bz-hardware-support-dialog.c:80 msgid "Supports touchscreens" msgstr "支援觸控螢幕" #: src/bz-hardware-support-dialog.c:81 msgid "Unknown support for touchscreens" msgstr "觸控螢幕支援情況未知" #: src/bz-hardware-support-dialog.c:160 msgid "Mobile support" msgstr "行動裝置支援" #: src/bz-hardware-support-dialog.c:161 msgid "Works on mobile devices" msgstr "可在行動裝置上使用" #: src/bz-hardware-support-dialog.c:161 msgid "May not work well on mobile devices" msgstr "在行動裝置上的使用體驗可能不佳" #: src/bz-hardware-support-dialog.c:166 msgid "Desktop support" msgstr "桌面電腦支援" #: src/bz-hardware-support-dialog.c:167 msgid "Works well on large screens" msgstr "在大螢幕上運作良好" #: src/bz-hardware-support-dialog.c:201 #, c-format msgid "%s works best on specific hardware" msgstr "%s 在特定硬體上可發揮最佳效能" #: src/bz-hardware-support-dialog.c:209 #, c-format msgid "%s works on most devices" msgstr "%s 可在多數裝置上使用" #: src/bz-install-controls.blp:58 msgid "_Open" msgstr "開啟(_O)" #: src/bz-install-controls.blp:73 src/bz-install-controls.blp:128 msgid "Uninstall Application" msgstr "移除應用程式" #: src/bz-install-controls.blp:83 src/bz-transaction-dialog.c:230 msgid "_Remove" msgstr "移除(_R)" #: src/bz-install-controls.blp:115 src/bz-updates-card.c:168 #: src/bz-updates-card.c:187 msgid "Update" msgstr "更新" #: src/bz-install-controls.blp:138 src/bz-installed-tile.blp:109 msgid "Remove" msgstr "移除" #: src/bz-install-controls.c:638 #, c-format msgid "Install %s from %s" msgstr "從 %2$s 安裝 %1$s" #: src/bz-install-controls.c:640 #, c-format msgid "Install %s" msgstr "安裝 %s" #: src/bz-install-controls.wdgt:32 msgctxt "Install Controls" msgid "Cancel" msgstr "取消" #: src/bz-install-controls.wdgt:35 msgctxt "Install Controls" msgid "Cancelling" msgstr "正在取消" #: src/bz-installed-tile.blp:80 msgid "Donate Button" msgstr "捐款按鈕" #: src/bz-library-page.blp:32 msgid "Search installed apps" msgstr "搜尋已安裝的應用程式" #: src/bz-library-page.blp:50 msgid "Clear search" msgstr "清除搜尋" #: src/bz-library-page.blp:71 msgid "No Apps Found" msgstr "找不到任何應用程式" #: src/bz-library-page.blp:90 msgid "Search Store Instead" msgstr "改搜尋商店" #. Translators: . #: src/bz-library-page.blp:100 src/bz-window.blp:113 msgid "Library" msgstr "程式庫" #: src/bz-library-page.blp:129 msgid "Pending Updates" msgstr "待處理的更新" #: src/bz-library-page.blp:156 msgid "Downloads" msgstr "下載次數" #: src/bz-library-page.blp:199 msgid "Recently Uninstalled" msgstr "最近解除安裝" #: src/bz-library-page.blp:250 msgid "Clear Finished Tasks" msgstr "清除已完成的作業" #: src/bz-library-page.blp:277 msgid "Sort Options" msgstr "排序選項" #: src/bz-library-page.blp:336 msgid "Sort By" msgstr "排序依據" #: src/bz-library-page.blp:350 msgid "Name" msgstr "名稱" #: src/bz-library-page.blp:356 msgid "Size" msgstr "大小" #: src/bz-library-page.c:180 #, c-format msgid "No matches found for \"%s\" in the list of installed apps" msgstr "在已安裝的應用程式清單中找不到符合「%s」的項目" #: src/bz-library-page.c:193 src/bz-updates-card.c:437 #, c-format msgid "%u Available Update" msgid_plural "%u Available Updates" msgstr[0] "%u 個可用更新" #: src/bz-library-page.c:203 #, c-format msgid "%u Installed App" msgid_plural "%u Installed Apps" msgstr[0] "%u 個已安裝的應用程式" #: src/bz-license-dialog.blp:87 msgid "Get Involved" msgstr "參與貢獻" #: src/bz-license-dialog.blp:114 msgid "Learn More" msgstr "了解更多" #: src/bz-license-dialog.c:127 msgid "Unknown License" msgstr "未知授權" #: src/bz-license-dialog.c:130 msgid "Community Built" msgstr "社群打造" #: src/bz-license-dialog.c:203 msgid "" "This app is developed in the open by an international community.\n" "\n" "You can participate and help make it even better." msgstr "" "此應用程式由國際社群以開放方式開發。\n" "\n" "您可以參與貢獻,協助讓它變得更好。" #: src/bz-license-dialog.c:206 msgid "The license of this app is not known" msgstr "此應用程式的授權資訊未知" #: src/bz-license-dialog.c:212 #, c-format msgid "" "This app is developed in the open by an international community, and " "released under the %s license.\n" "\n" "You can participate and help make it even better." msgstr "" "此應用程式由國際社群以開放方式開發,並以 %s 授權釋出。\n" "\n" "您可以參與貢獻,協助讓它變得更好。" #: src/bz-license-dialog.c:220 msgid "" "This app is not developed in the open, so only its developers know how it " "works. It may be insecure in ways that are hard to detect, and it may change " "without oversight.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "此應用程式並非以開放方式開發,因此只有開發者知道其運作方式。它可能存在難以察" "覺的安全風險,且可能在缺乏監督的情況下變更。\n" "\n" "您可能可以,也可能無法對此應用程式做出貢獻。" #: src/bz-license-dialog.c:226 #, c-format msgid "" "This app is developed under the special license %s.\n" "\n" "You may or may not be able to contribute to this app." msgstr "" "此應用程式採用特殊授權 %s 開發。\n" "\n" "您可能可以,也可能無法對此應用程式做出貢獻。" #: src/bz-license-dialog.c:356 src/bz-safety-dialog.blp:101 msgid "License" msgstr "授權" #: src/bz-login-page.blp:6 src/bz-login-page.blp:45 msgid "Connect to Flathub" msgstr "連結至 Flathub" #: src/bz-login-page.blp:35 msgid "Something Went Wrong" msgstr "發生問題" #: src/bz-login-page.blp:46 msgid "Log in to sync your favorited apps across devices" msgstr "登入來在裝置之間同步您收藏哪些應用程式" #: src/bz-login-page.blp:113 msgid "Finish" msgstr "完成" #: src/bz-login-page.c:665 #, c-format msgid "Hello, %s!" msgstr "您好,%s" #: src/bz-metainfo-preview.c:84 msgid "Select Metainfo File" msgstr "選取 Metainfo 檔案" #: src/bz-metainfo-preview.c:87 msgid "Metainfo Files" msgstr "Metainfo 檔案" #: src/bz-metainfo-preview.c:141 msgid "Select Icon (Optional)" msgstr "選取圖示(非必要)" #: src/bz-metainfo-preview.c:144 msgid "Image Files" msgstr "影像檔案" #: src/bz-metainfo-preview.c:231 msgid "Preview" msgstr "預茽" #: src/bz-preferences-dialog.blp:19 msgid "Preferences" msgstr "偏好設定" #: src/bz-preferences-dialog.blp:25 msgid "Network connection is metered — automatic store data refresh is paused" msgstr "目前的網路連線為計量連線 —— 已暫停商店資料的自動重新整理" #: src/bz-preferences-dialog.blp:26 src/bz-window.blp:235 msgid "Refresh Manually" msgstr "手動重新整理" #: src/bz-preferences-dialog.blp:31 msgid "Content Filters" msgstr "內容篩選" #: src/bz-preferences-dialog.blp:34 msgid "Free Software Only" msgstr "僅顯示自由軟體" #: src/bz-preferences-dialog.blp:35 msgid "Hide proprietary apps when browsing and searching" msgstr "在瀏覽與搜尋時隱藏專有應用程式" #: src/bz-preferences-dialog.blp:39 msgid "Flathub Results Only" msgstr "僅顯示 Flathub 結果" #: src/bz-preferences-dialog.blp:40 msgid "Limit search and browse results to apps only available on Flathub" msgstr "在瀏覽與搜尋時僅顯示在 Flathub 上提供的應用程式" #: src/bz-preferences-dialog.blp:44 msgid "Verified Results Only" msgstr "僅顯示已驗證的結果" #: src/bz-preferences-dialog.blp:45 msgid "Hide results that are not verified on Flathub" msgstr "隱藏未經 Flathub 驗證的結果" #: src/bz-preferences-dialog.blp:49 msgid "Hide End-of-Life Apps" msgstr "隱藏已終止支援的應用程式" #: src/bz-preferences-dialog.blp:50 msgid "Hide apps which are no longer supported by their developers" msgstr "隱藏已不再由開發者支援的應用程式" #: src/bz-preferences-dialog.blp:55 msgid "Progress Bar Theme" msgstr "進度列主題" #: src/bz-preferences-dialog.c:32 msgid "Accent Color" msgstr "強調色" #: src/bz-preferences-dialog.c:33 msgid "Pride Colors" msgstr "驕傲旗配色" #: src/bz-preferences-dialog.c:34 msgid "Lesbian Pride Colors" msgstr "女同志驕傲旗配色" #: src/bz-preferences-dialog.c:35 msgid "Male Homosexual Pride Colors" msgstr "男同志驕傲旗配色" #: src/bz-preferences-dialog.c:36 msgid "Transgender Pride Colors" msgstr "跨性別驕傲旗配色" #: src/bz-preferences-dialog.c:37 msgid "Nonbinary Pride Colors" msgstr "非二元性別驕傲旗配色" #: src/bz-preferences-dialog.c:38 msgid "Bisexual Pride Colors" msgstr "雙性戀驕傲旗配色" #: src/bz-preferences-dialog.c:39 msgid "Asexual Pride Colors" msgstr "無性戀驕傲旗配色" #: src/bz-preferences-dialog.c:40 msgid "Pansexual Pride Colors" msgstr "泛性戀驕傲旗配色" #: src/bz-preferences-dialog.c:41 msgid "Aromantic Pride Colors" msgstr "無浪漫傾向驕傲旗配色" #: src/bz-preferences-dialog.c:42 msgid "Genderfluid Pride Colors" msgstr "性別流動驕傲旗配色" #: src/bz-preferences-dialog.c:43 msgid "Polysexual Pride Colors" msgstr "多元性向驕傲旗配色" #: src/bz-preferences-dialog.c:44 msgid "Omnisexual Pride Colors" msgstr "全性向驕傲旗配色" #: src/bz-preferences-dialog.c:45 msgid "Aroace Pride Colors" msgstr "無浪漫/無性戀驕傲旗配色" #: src/bz-preferences-dialog.c:46 msgid "Agender Pride Colors" msgstr "無性別驕傲旗配色" #: src/bz-preferences-dialog.c:47 msgid "Genderqueer Pride Colors" msgstr "性別酷兒驕傲旗配色" #: src/bz-preferences-dialog.c:48 msgid "Intersex Pride Colors" msgstr "雙性人驕傲旗配色" #: src/bz-preferences-dialog.c:49 msgid "Demigender Pride Colors" msgstr "半性別驕傲旗配色" #: src/bz-preferences-dialog.c:50 msgid "Biromantic Pride Colors" msgstr "雙浪漫傾向驕傲旗配色" #: src/bz-preferences-dialog.c:51 msgid "Disability Pride Colors" msgstr "身心障礙驕傲旗配色" #: src/bz-preferences-dialog.c:52 msgid "Femboy Pride Colors" msgstr "女性氣質男性驕傲旗配色" #: src/bz-preferences-dialog.c:53 msgid "Neutrois Pride Colors" msgstr "中性性別驕傲旗配色" #: src/bz-releases-dialog.blp:5 src/bz-updates-card.c:159 msgid "Version History" msgstr "版本紀錄" #: src/bz-releases-list.blp:27 msgid "_Version History" msgstr "版本紀錄(_V)" #. Translators: something happened less than a day ago #: src/bz-releases-list.c:122 msgid "Today" msgstr "今天" #. Translators: something happened more than a day ago but less than 2 days ago #: src/bz-releases-list.c:125 msgid "Yesterday" msgstr "昨夊" #. Translators: something happened days ago #: src/bz-releases-list.c:128 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d 天前" #. Translators: something happened weeks ago #: src/bz-releases-list.c:131 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d 週前" #. Translators: something happened months ago #: src/bz-releases-list.c:134 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d 個月前" #. Translators: something happened years ago #: src/bz-releases-list.c:137 #, c-format msgid "%d year ago" msgid_plural "%d years ago" msgstr[0] "%d 年前" # 會變成 "2026ĺš´6㜈25日"。(%B 是漢字數字「六月」,%b 是前面有空格但裡面沒有的 " 6㜈")--Kisaragi #. TRANSLATORS: This is the date string with: day number, month name, year. #. i.e. "22 March 2026" #: src/bz-releases-list.c:155 msgid "%e %B %Y" msgstr "%Yĺš´%m㜈%d日" #: src/bz-releases-list.c:196 #, c-format msgid "Version %s" msgstr "版本 %s" #: src/bz-releases-list.c:251 msgid "No details for this release" msgstr "此版本沒有詳細資訊" #: src/bz-releases-list.c:264 msgid "Get More Information" msgstr "取得更多資訊" #: src/bz-rich-app-tile.blp:218 msgid "Uninstall" msgstr "解除安裝" #. Translators: If you can't find a short enough translation, use "/" to use an icon instead. #: src/bz-rich-app-tile.c:383 msgid "Get" msgstr "取得" #: src/bz-safety-calculator.c:87 msgid "Unknown Permissions" msgstr "未知的權限" #: src/bz-safety-calculator.c:88 msgid "Permissions are missing for this app." msgstr "此應用程式缺少權限資訊。" #: src/bz-safety-calculator.c:101 msgid "No Permissions" msgstr "無權限需求" #: src/bz-safety-calculator.c:102 msgid "App is fully sandboxed" msgstr "此應用程式已完全沙箱化" #: src/bz-safety-calculator.c:108 msgid "Network Access" msgstr "網路存取" #: src/bz-safety-calculator.c:109 msgid "Can access the internet" msgstr "可存取網際網路" #: src/bz-safety-calculator.c:111 msgid "No Network Access" msgstr "無網路存取" #: src/bz-safety-calculator.c:112 msgid "Cannot access the internet" msgstr "無法存取網際網路" #: src/bz-safety-calculator.c:117 msgid "User Device Access" msgstr "使用者裝置存取" #: src/bz-safety-calculator.c:118 msgid "Can access devices such as webcams or gaming controllers" msgstr "可存取如網路攝影機或遊戲控制器等裝置" #: src/bz-safety-calculator.c:120 msgid "No User Device Access" msgstr "無使用者裝置存取" #: src/bz-safety-calculator.c:121 msgid "Cannot access devices such as webcams or gaming controllers" msgstr "無法存取如網路攝影機或遊戲控制器等裝置" #: src/bz-safety-calculator.c:126 msgid "Input Device Access" msgstr "輸入裝置存取" #: src/bz-safety-calculator.c:127 msgid "Can access input devices" msgstr "可存取輸入裝置" #: src/bz-safety-calculator.c:133 msgid "Microphone Access and Audio Playback" msgstr "麥克風存取與音訊播放" #: src/bz-safety-calculator.c:134 msgid "Can listen using microphones and play audio without asking permission" msgstr "可在未詢問權限的情況下使用麥克風收音並播放音訊" #: src/bz-safety-calculator.c:140 msgid "System Device Access" msgstr "系統裝置存取" #: src/bz-safety-calculator.c:141 msgid "Can access system devices which require elevated permissions" msgstr "可存取需要較高權限的系統裝置" #: src/bz-safety-calculator.c:147 msgid "Screen Contents Access" msgstr "螢幕內容存取" #: src/bz-safety-calculator.c:148 msgid "Can access the contents of the screen or other windows" msgstr "可存取螢幕或其他視窗的內容" #: src/bz-safety-calculator.c:154 msgid "Legacy Windowing System" msgstr "舊式視窗系統" #: src/bz-safety-calculator.c:155 msgid "Always uses a legacy windowing system (X11)" msgstr "一律使用舊式視窗系統(X11)" #: src/bz-safety-calculator.c:161 src/bz-safety-dialog.blp:31 msgid "Arbitrary Permissions" msgstr "任意權限" #: src/bz-safety-calculator.c:162 msgid "Can acquire arbitrary permissions" msgstr "可取得任意權限" #: src/bz-safety-calculator.c:168 msgid "User Settings" msgstr "使用者設定" #: src/bz-safety-calculator.c:169 msgid "Can access and change user settings" msgstr "可存取並變更使用者設定" #: src/bz-safety-calculator.c:175 msgid "Full File System Read/Write Access" msgstr "完整檔案系統讀取/寫入權限" #: src/bz-safety-calculator.c:176 msgid "Can read and write all data on the file system" msgstr "可讀取與寫入檔案系統中的所有資料" #: src/bz-safety-calculator.c:183 msgid "Home Folder Read/Write Access" msgstr "家目錄讀取/寫入權限" #: src/bz-safety-calculator.c:184 msgid "Can read and write all data in your home directory" msgstr "可讀取與寫入您家目錄中的所有資料" #: src/bz-safety-calculator.c:191 msgid "Full File System Read Access" msgstr "完整檔案系統讀取權限" #: src/bz-safety-calculator.c:192 msgid "Can read all data on the file system" msgstr "可讀取檔案系統中的所有資料" #: src/bz-safety-calculator.c:200 msgid "Home Folder Read Access" msgstr "家目錄讀取權限" #: src/bz-safety-calculator.c:201 msgid "Can read all data in your home directory" msgstr "可讀取您家目錄中的所有資料" #: src/bz-safety-calculator.c:209 msgid "Download Folder Read/Write Access" msgstr "下載資料夾讀取/寫入權限" #: src/bz-safety-calculator.c:210 msgid "Can read and write all data in your downloads directory" msgstr "可讀取與寫入您下載資料夾中的所有資料" #: src/bz-safety-calculator.c:220 msgid "Download Folder Read Access" msgstr "下載資料夾讀取權限" #: src/bz-safety-calculator.c:221 msgid "Can read all data in your downloads directory" msgstr "可讀取您下載資料夾中的所有資料" #: src/bz-safety-calculator.c:242 msgid "Can read and write all data in the directory" msgstr "可讀取與寫入該目錄中的所有資料" #: src/bz-safety-calculator.c:266 msgid "Can read all data in the directory" msgstr "可讀取該目錄中的所有資料" #: src/bz-safety-calculator.c:281 msgid "No File System Access" msgstr "無檔案系統存取權限" #: src/bz-safety-calculator.c:282 msgid "Cannot access the file system at all" msgstr "完全無法存取檔案系統" #: src/bz-safety-calculator.c:289 msgid "Uses System Services" msgstr "使用系統服務" #: src/bz-safety-calculator.c:290 msgid "Can request data from non-portal system services" msgstr "可向非入口(non-portal)的系統服務請求資料" #: src/bz-safety-calculator.c:296 msgid "Uses Session Services" msgstr "使用工作階段服務" #: src/bz-safety-calculator.c:297 msgid "Can request data from non-portal session services" msgstr "可向非入口(non-portal)的工作階段服務請求資料" #: src/bz-safety-calculator.c:345 msgid "No Service Access" msgstr "無服務存取權限" #: src/bz-safety-calculator.c:346 msgid "Cannot access non-portal session or system services at all" msgstr "完全無法存取非入口(non-portal)的工作階段或系統服務" #: src/bz-safety-calculator.c:354 msgid "Verified App Developer" msgstr "已驗證的應用程式開發者" #: src/bz-safety-calculator.c:355 msgid "The developer of this app has been verified to be who they say they are" msgstr "此應用程式的開發者身分已通過驗證,確認與其所聲稱的身分相符" #: src/bz-safety-calculator.c:364 msgid "Proprietary Code" msgstr "專有程式碼" #: src/bz-safety-calculator.c:365 msgid "" "The source code is not public, so it cannot be independently audited and " "might be unsafe" msgstr "原始碼未公開,無法進行獨立稽核,可能存在安全風險" #: src/bz-safety-calculator.c:375 msgid "Auditable Code" msgstr "可稽核的程式碼" #: src/bz-safety-calculator.c:376 msgid "" "The source code is public and can be independently audited, which makes the " "app more likely to be safe" msgstr "原始碼已公開,且可進行獨立稽核,使此應用程式更可能是安全的" #: src/bz-safety-calculator.c:516 #, c-format msgid "Use the %s System Service" msgstr "使用 %s 系統服務" #: src/bz-safety-calculator.c:520 #, c-format msgid "Use the %s Session Service" msgstr "使用 %s 工作階段服務" #: src/bz-safety-calculator.c:524 #, c-format msgid "Use the %s Service" msgstr "使用 %s 服務" #: src/bz-safety-calculator.c:534 msgid "Can see the non-portal service" msgstr "可查看非入口(non-portal)服務" #: src/bz-safety-calculator.c:536 msgid "Can talk to the non-portal service" msgstr "可與非入口(non-portal)服務通訊" #: src/bz-safety-calculator.c:538 msgid "Can own the non-portal service" msgstr "可擁有非入口(non-portal)服務" #: src/bz-safety-calculator.c:553 msgid "Global Menu Integration" msgstr "全域選單整合" #: src/bz-safety-calculator.c:554 msgid "Can display its menus in a global menu bar" msgstr "可將選單顯示於全域選單列" #: src/bz-safety-calculator.c:559 msgid "KDE Settings Integration" msgstr "KDE 設定整合" #: src/bz-safety-calculator.c:560 msgid "Can detect when KDE desktop settings change" msgstr "可偵測 KDE 桌面設定的變更" #: src/bz-safety-calculator.c:565 msgid "KDE Global Settings" msgstr "KDE 全域設定" #: src/bz-safety-calculator.c:566 msgid "Can read KDE desktop preferences like fonts and colors" msgstr "可讀取 KDE 桌面偏好設定(如字型與色彩)" #: src/bz-safety-calculator.c:571 msgid "Secret Storage Service" msgstr "祕密儲存服務" #: src/bz-safety-calculator.c:572 msgid "Can store and retrieve its own passwords using the system keyring" msgstr "可使用系統鑰匙圈儲存並取回自身的密碼" #: src/bz-safety-calculator.c:577 msgid "Desktop Notifications Service" msgstr "桌面通知服務" #: src/bz-safety-calculator.c:578 msgid "Can send desktop notifications" msgstr "可傳送桌面通知" #: src/bz-safety-calculator.c:584 msgid "System Tray Integration" msgstr "系統匣整合" #: src/bz-safety-calculator.c:585 msgid "Can display an icon in the system tray" msgstr "可在系統匣中顯示圖示" #: src/bz-safety-calculator.c:590 msgid "KDE Connect Integration" msgstr "KDE Connect 整合" #: src/bz-safety-calculator.c:591 msgid "Can interact with devices paired via KDE Connect" msgstr "可與透過 KDE Connect 配對的裝置互動" #: src/bz-safety-dialog.blp:48 msgid "" "This app has a permission that indirectly allows it to grant itself any " "other permission it wants, bypassing the Flatpak sandbox.\n" "\n" "It can therefore do anything a normal, non-sandboxed application can do, " "such as accessing all your files and connecting to the internet.\n" "\n" "Viewing the other permissions may still give a better idea of what the app " "is likely to do." msgstr "" "這個應用程式的其中一個權限間接允許其提供自己任何其他的權限,並繞過 " "Flatpak 沙箱機制。\n" "\n" "因此它可以做任何非沙箱化應用程式能夠做的事情,像是存取您的所有檔案或是連線到" "網際網路。\n" "\n" "其他它所明確要求的權限可能還是值得參考以得知它比較有可能會做的事情。" #: src/bz-safety-dialog.blp:52 msgid "View Other Permissions" msgstr "檢視其他權限" #: src/bz-safety-dialog.blp:112 msgid "App ID" msgstr "應用程式 ID" #: src/bz-safety-dialog.blp:122 msgid "SDK" msgstr "SDK" #: src/bz-safety-dialog.blp:156 msgid "" "This app uses an outdated version of the software platform (SDK) and might " "contain bugs or security vulnerabilities which will not be fixed." msgstr "" "此應用程式使用過時的軟體平台(SDK),可能包含不會再修復的錯誤或安全漏洞。" #: src/bz-safety-dialog.c:278 msgid "Safety" msgstr "安全性" #: src/bz-safety-dialog.c:344 #, c-format msgid "%s is Safe" msgstr "%s 是安全的" #: src/bz-safety-dialog.c:349 #, c-format msgid "%s has no Unsafe Permissions" msgstr "%s 沒有不安全的權限" #: src/bz-safety-dialog.c:354 #, c-format msgid "%s is Probably Safe" msgstr "%s 可能是安全的" #: src/bz-safety-dialog.c:359 #, c-format msgid "%s is Possibly Unsafe" msgstr "%s 可能不安全" #: src/bz-safety-dialog.c:364 #, c-format msgid "%s is Unsafe" msgstr "%s 不安全" #: src/bz-screenshot-page.blp:5 msgid "Screenshots" msgstr "螢幕截圖" #: src/bz-screenshot-page.blp:61 msgid "Previous Screenshot" msgstr "上一張截圖" #: src/bz-screenshot-page.blp:71 msgid "Next Screenshot" msgstr "下一張截圖" #: src/bz-screenshot-page.blp:87 msgid "Copy Image" msgstr "複製圖片" #: src/bz-screenshot-page.blp:150 msgid "Reset View" msgstr "重設檢視" #: src/bz-screenshot-page.blp:161 msgid "Zoom Out" msgstr "縮小" #: src/bz-screenshot-page.blp:171 msgid "Zoom In" msgstr "放大" #: src/bz-screenshots-carousel.blp:6 msgid "Screenshots Carousel" msgstr "螢幕截圖輪播" #: src/bz-screenshots-carousel.blp:104 msgid "No Screenshots" msgstr "沒有螢幕截圖" #: src/bz-screenshots-carousel.blp:128 msgid "Open Screenshot Viewer" msgstr "開啟截圖檢視器" #: src/bz-screenshots-carousel.c:301 #, c-format msgid "Screenshot %u %s" msgstr "螢幕截圖 %u %s" #: src/bz-screenshots-carousel.c:303 #, c-format msgid "Screenshot %u" msgstr "螢幕截圖 %u" #: src/bz-search-filter-popover.blp:18 src/bz-search-page.blp:83 msgid "Filters" msgstr "過濾器" #: src/bz-search-filter-popover.blp:35 msgid "_Verified" msgstr "已驗證(_V)" #: src/bz-search-filter-popover.blp:42 msgid "_Free/Open" msgstr "自由/開源(_F)" #: src/bz-search-filter-popover.blp:49 msgid "Non-_EOL" msgstr "沒有終止支援" #: src/bz-search-filter-popover.blp:52 msgid "Filter out End-of-Life apps" msgstr "過濾掉已終止支援的應用程式" #: src/bz-search-filter-popover.blp:57 msgid "_Mobile Friendly" msgstr "行動裝置友善(_M)" #: src/bz-search-filter-popover.blp:64 msgid "Categories" msgstr "分類" #: src/bz-search-page.blp:58 msgid "Search Apps, Games, Software" msgstr "搜尋應用程式、遊戲與軟體" #: src/bz-search-page.blp:70 msgid "Search Filters" msgstr "搜尋過濾器" #: src/bz-search-page.blp:100 msgid "Clear Search" msgstr "清除搜尋" #: src/bz-search-page.blp:209 msgid "Browse Categories" msgstr "瀏覽分類" #: src/bz-search-page.blp:245 msgid "Categories Unavailable" msgstr "分類無法使用" #: src/bz-search-page.blp:246 msgid "Search for apps using the search bar above." msgstr "請使用上方的搜尋列搜尋應用程式。" #: src/bz-search-page.blp:364 msgid "No Applications Found" msgstr "找不到任何應用程式" #: src/bz-search-page.c:248 #, c-format msgid "No results found for \"%s\" in Flathub" msgstr "在 Flathub 中找不到符合「%s」的結果" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:72 msgid "Video" msgstr "影片" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:82 msgid "Office" msgstr "辦公室" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:87 msgid "PDF" msgstr "PDF" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:92 msgid "Calendar" msgstr "行事曆" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:97 msgid "Messaging" msgstr "訊息" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:102 msgid "Paint" msgstr "塗繪" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:107 msgid "VPN" msgstr "VPN" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:112 msgid "Torrent" msgstr "Torrent" #. Translators: Search suggestion: the english text will be used for the #. search regardless of what you put here, so don't worry about the string #. yielding poor search results. Focus on correctness and friendliness, #. etc #: src/bz-search-pill-list.c:117 msgid "Emulator" msgstr "模擬器" #: src/bz-share-list.c:58 msgctxt "Project URL Type" msgid "Flathub Page" msgstr "Flathub 頁面" #: src/bz-share-list.c:59 msgctxt "Project URL Type" msgid "Project Website" msgstr "專案網址" #: src/bz-share-list.c:60 msgctxt "Project URL Type" msgid "Issue Tracker" msgstr "問題追蹤器" #: src/bz-share-list.c:61 msgctxt "Project URL Type" msgid "FAQ" msgstr "FAQ" #: src/bz-share-list.c:62 msgctxt "Project URL Type" msgid "Help" msgstr "幫助" #: src/bz-share-list.c:63 msgctxt "Project URL Type" msgid "Donate" msgstr "捐款" #: src/bz-share-list.c:64 msgctxt "Project URL Type" msgid "Translate" msgstr "çżťč­Ż" #: src/bz-share-list.c:65 msgctxt "Project URL Type" msgid "Contact" msgstr "聯絡方式" #: src/bz-share-list.c:66 msgctxt "Project URL Type" msgid "Source Code" msgstr "原始碼" #: src/bz-share-list.c:67 msgctxt "Project URL Type" msgid "Contribute" msgstr "貢獻" #: src/bz-share-list.c:68 msgctxt "Project URL Type" msgid "Manifest" msgstr "Manifest" #: src/bz-share-list.c:326 msgid "Copy Link" msgstr "複製連結" #: src/bz-stats-dialog.blp:27 msgid "Timeline" msgstr "時間軸" #: src/bz-stats-dialog.blp:46 msgid "Installs:" msgstr "安裝次數:" #: src/bz-stats-dialog.blp:55 msgid "World" msgstr "全球" #: src/bz-stats-dialog.blp:69 msgid "Since 4/15/2024" msgstr "2024ĺš´4㜈15日以來" #. Translators: M is the suffix for millions #: src/bz-stats-dialog.c:126 #, c-format msgid "%.2fM Total Installs" msgstr "總安裝次數 %.2fM" #. Translators: K is the suffix for thousands #: src/bz-stats-dialog.c:129 #, c-format msgid "%.2fK Total Installs" msgstr "總安裝次數 %.2fK" #: src/bz-stats-dialog.c:131 #, c-format msgid "%'d Total Installs" msgstr "總安裝次數 %'d" #: src/bz-subcategory-list.c:78 msgid "No Results Found" msgstr "沒有找到結果" #: src/bz-subcategory-list.c:100 msgid "Search failed" msgstr "搜尋失敗" #: src/bz-transaction-dialog.c:154 msgid "Keep User Data" msgstr "保留使用者資料" #: src/bz-transaction-dialog.c:155 msgid "Allow restoring personal settings & content" msgstr "允許還原個人設定與內容" #: src/bz-transaction-dialog.c:164 msgid "Delete All Data" msgstr "刪除所有資料" #: src/bz-transaction-dialog.c:165 msgid "Permanently erase user data to save space" msgstr "永久移除應用程式的使用者資料以節省空間" #: src/bz-transaction-dialog.c:190 #, c-format msgid "Install %s?" msgstr "要安裝 %s 嗎?" #: src/bz-transaction-dialog.c:195 msgid "" "Select which version to install. May install additional shared components" msgstr "選取要安裝哪個版本。可能會安裝額外的共用元件" #: src/bz-transaction-dialog.c:197 msgid "May install additional shared components" msgstr "可能會安裝額外的共用元件" #: src/bz-transaction-dialog.c:200 src/bz-transaction-dialog.c:229 #: src/bz-transaction-dialog.c:274 src/bz-transaction-dialog.c:576 msgid "_Cancel" msgstr "取消(_C)" #: src/bz-transaction-dialog.c:201 msgid "_Install" msgstr "安裝(_I)" #: src/bz-transaction-dialog.c:218 #, c-format msgid "Remove %s?" msgstr "要移除 %s 嗎?" #: src/bz-transaction-dialog.c:221 msgid "Select which version to remove." msgstr "選取要移除的版本。" #: src/bz-transaction-dialog.c:223 #, c-format msgid "It will not be possible to use %s after it is uninstalled." msgstr "解除安裝後將無法再使用 %s。" #: src/bz-transaction-dialog.c:246 #, c-format msgid "“%s” is High Risk" msgstr "「%s」屬於高風險應用程式" #: src/bz-transaction-dialog.c:250 msgid "" "This app has full access to your system, including all your files, " "browser history, saved passwords, and more. It also has access to the " "internet, meaning it could send your data to outside parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "此應用程式對您的系統具有完整存取權限,包括所有檔案、瀏覽紀錄、已儲存的密碼" "等。同時也可存取網際網路,代表可能會將您的資料傳送給第三方。\n" "\n" "由於此應用程式為專有軟體,無法對其如何使用這些權限進行獨立審核。" #: src/bz-transaction-dialog.c:259 msgid "" "This app uses the legacy X11 windowing system, which allows it to record " "all keystrokes, capture screenshots, and monitor other applications. It " "also has access to the internet, meaning it could send your data to outside " "parties.\n" "\n" "Because the app is proprietary, it can not be audited for what it does with " "these permissions." msgstr "" "此應用程式使用舊式的 X11 視窗系統,這使其能夠記錄所有鍵盤輸入、擷取螢幕畫" "面,並監控其他應用程式。同時也可存取網際網路,代表可能會將您的資料傳送給" "第三方。\n" "\n" "由於此應用程式為專有軟體,無法對其如何使用這些權限進行獨立審核。" #: src/bz-transaction-dialog.c:275 msgid "_Install Anyway" msgstr "仍要安裝(_I)" #: src/bz-transaction-dialog.c:330 msgid "Failed to load transaction dialog" msgstr "載入作業對話框失敗" #: src/bz-transaction-dialog.c:547 msgid "All apps are already installed" msgstr "所有應用程式皆已安裝" #: src/bz-transaction-dialog.c:549 msgid "_OK" msgstr "確認(_O)" #: src/bz-transaction-dialog.c:565 #, c-format msgid "Install %u App?" msgid_plural "Install %u Apps?" msgstr[0] "要安裝 %u 個應用程式嗎?" #: src/bz-transaction-dialog.c:573 msgid "" "The following will be installed. Additional shared components may also be " "installed" msgstr "將會安裝以下項目,並且可能同時安裝額外的共用元件" #: src/bz-transaction-dialog.c:574 #, c-format msgid "%d addons will be installed." msgstr "將會安裝 %d 個附加元件。" #: src/bz-transaction-dialog.c:575 msgid "Additionally, addons will be installed." msgstr "此外,還會安裝附加元件。" #: src/bz-transaction-dialog.c:577 msgid "_Install All" msgstr "安裝全部(_I)" #: src/bz-transaction-manager.c:795 #, c-format msgid "Finished in %.02f seconds" msgstr "於 %.02f 秒完成" #: src/bz-transaction-tile.blp:129 msgid "App Add-On" msgstr "應用程式附加元件" #: src/bz-transaction-tile.blp:158 msgid "Runtime" msgstr "執行環境" #: src/bz-transaction-tile.blp:182 msgid "In Queue" msgstr "在佇列中" #: src/bz-transaction-tile.blp:206 msgid "Done" msgstr "完成" #: src/bz-transaction-tile.blp:230 msgid "Cancelled" msgstr "已取消" #: src/bz-transaction-tile.blp:254 msgid "Error" msgstr "錯誤" #: src/bz-transaction-tile.blp:312 msgid "Cancel Transaction" msgstr "取消作業" #: src/bz-transaction-tile.blp:322 msgid "Show Details" msgstr "顯示詳細資料" #: src/bz-transaction-tile.blp:437 msgid "Show Error Info" msgstr "顯示錯誤資訊" #: src/bz-transaction-tile.c:107 #, c-format msgid "%s Freed" msgstr "已釋出 %s" #: src/bz-transaction-tile.c:360 src/bz-transaction-tile.c:363 msgid "Transaction Error" msgstr "作業錯誤" #: src/bz-transaction.c:344 msgid "Pending" msgstr "等待中" #: src/bz-updates-card.blp:23 msgid "_Update All" msgstr "更新全部(_U)" #: src/bz-updates-card.c:215 #, c-format msgid "%u Runtime Update" msgid_plural "%u Runtime Updates" msgstr[0] "%u 個執行環境更新" #: src/bz-user-data-page.blp:5 msgid "Manage Leftover User Data" msgstr "管理殘留的使用者資料" #: src/bz-user-data-page.blp:33 msgid "No User Data Found" msgstr "找不到使用者資料" #: src/bz-user-data-page.blp:38 msgid "User Data" msgstr "使用者資料" #: src/bz-user-data-tile.blp:74 msgid "Trash User Data" msgstr "將使用者資料移至垃圾桶" #: src/bz-user-data-tile.c:150 #, c-format msgid "Trashed User Data for %s" msgstr "已將 %s 的使用者資料移至垃圾桶" #: src/bz-window.blp:71 msgid "Refreshing" msgstr "重新整理中…" #: src/bz-window.blp:89 msgid "Curated" msgstr "粞選" #: src/bz-window.blp:101 msgid "Explore" msgstr "探索" #: src/bz-window.blp:128 msgid "Search" msgstr "搜尋" #: src/bz-window.blp:215 msgid "Main Menu" msgstr "主選單" #: src/bz-window.blp:226 msgid "You are running a new version of Bazaar!" msgstr "您已更新到新版本 Bazaar" #: src/bz-window.blp:227 msgid "See What's New" msgstr "查看更新內容" #: src/bz-window.blp:234 msgid "" "You have a network connection but are viewing a cached version of Flathub" msgstr "您目前有網路連線,但正在檢視 Flathub 的快取版本" #: src/bz-window.blp:279 msgid "_Donate to Bazaar" msgstr "捐款給 Bazaar(_D)" #: src/bz-window.blp:285 msgid "_Refresh" msgstr "重新整理(_R)" #: src/bz-window.blp:289 msgid "_Login With Flathub" msgstr "使用 Flathub 登入(_L)" #: src/bz-window.blp:295 msgid "_Manage Leftover User Data" msgstr "管理殘留的使用者資料(_M)" #: src/bz-window.blp:301 msgid "_Preferences" msgstr "偏好設定(_P)" #: src/bz-window.blp:306 msgid "_Keyboard Shortcuts" msgstr "鍵盤快捷鍵(&K)" #: src/bz-window.blp:311 msgid "_About Bazaar" msgstr "關於 Bazaar(&A)" #: src/bz-window.blp:317 msgid "_Quit Bazaar" msgstr "退出 Bazaar(&Q)" #: src/bz-window.blp:342 msgid "Log Out" msgstr "登出" #. Translators: %s is the title of the current page #: src/bz-window.c:376 #, c-format msgid "Bazaar — %s" msgstr "Bazaar — %s" #: src/bz-window.c:596 src/bz-window.c:634 msgid "Failed to launch application" msgstr "啟動應用程式失敗" #: src/bz-window.c:843 msgid "You can't remove Bazaar from Bazaar!" msgstr "您無法在 Bazaar 中移除 Bazaar 本身!" #: src/bz-window.c:1127 src/bz-window.c:1161 msgid "Can't do that right now!" msgstr "目前無法執行此動作!" #. Translators: As in, "1 Install" / "100 Installs" #: src/bz-world-map.c:604 msgid "Install" msgid_plural "Installs" msgstr[0] "次安裝" #: src/shortcuts-dialog.blp:5 msgctxt "shortcut window" msgid "Navigation" msgstr "導覽" #: src/shortcuts-dialog.blp:8 msgctxt "shortcut window" msgid "Open Explore Page" msgstr "開啟探索頁面" #: src/shortcuts-dialog.blp:14 msgctxt "shortcut window" msgid "Open Library Page" msgstr "開啟程式庫頁面" #: src/shortcuts-dialog.blp:20 msgctxt "shortcut window" msgid "Open Search Page" msgstr "開啟搜尋頁面" #: src/shortcuts-dialog.blp:25 msgctxt "shortcut window" msgid "Remotes" msgstr "遠獯" #: src/shortcuts-dialog.blp:27 msgctxt "shortcut window" msgid "Sync Remotes" msgstr "同步遠端" #: src/shortcuts-dialog.blp:33 msgctxt "shortcut window" msgid "General" msgstr "一般" #: src/shortcuts-dialog.blp:36 msgctxt "shortcut window" msgid "Open Preferences" msgstr "開啟偏好設定" #: src/shortcuts-dialog.blp:41 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "顯示快捷鍵" #: src/shortcuts-dialog.blp:46 msgctxt "shortcut window" msgid "Close Window" msgstr "關閉視窗" #: src/shortcuts-dialog.blp:52 msgctxt "shortcut window" msgid "Quit Bazaar" msgstr "退出 Bazaar" #~ msgid "" #~ "It emphasizes supporting the developers who make the Linux desktop " #~ "possible. Bazaar features a \"curated\" tab that can be configured by " #~ "distributors to allow for a more localized experience." #~ msgstr "" #~ "著重支援讓 Linux 桌面成真的開發者。Bazaar 提供「精選」分頁,發行商可設定以" #~ "提供更在地化的體驗。" #~ msgid "Adam Masciola" #~ msgstr "Adam Masciola" #~ msgid "Nucleus app page" #~ msgstr "Nucleus 應用程式頁面" #~ msgid "_Refresh Content" #~ msgstr "重新整理內容(&R)" #~ msgid "User Data Size" #~ msgstr "使用者資料大小" #~ msgctxt "About Dialog Developer Credit" #~ msgid "Adam Masciola " #~ msgstr "Adam Masciola " #~ msgctxt "About Dialog Developer Credit" #~ msgid "Alexander Vanhee" #~ msgstr "Alexander Vanhee" #~ msgid "Synchronizing..." #~ msgstr "同步中..." #, c-format #~ msgid "Receiving %d entries..." #~ msgstr "正在接收 %d 筆項目…" #~ msgid "Indexing Data..." #~ msgstr "正在索引資料…" #~ msgid "Close" #~ msgstr "關閉" #~ msgid "Copy and Close" #~ msgstr "複製並關閉" #~ msgid "Toggle transaction sidebar" #~ msgstr "切換作業側邊欄" #~ msgid "Flathub returned an error" #~ msgstr "Flathub 回傳了錯誤" #~ msgid "Retry Flathub Connection" #~ msgstr "重新嘗試連線至 Flathub" #~ msgid "Download & Install Application" #~ msgstr "下載並安裝應用程式" #~ msgid "Install Other Version" #~ msgstr "安裝其他版本" #~ msgid "Tags:" #~ msgstr "標籤:" #~ msgid "" #~ "Connect your Flathub account to Bazaar to manage your favorited apps." #~ msgstr "將您的 Flathub 帳號連結至 Bazaar,以管理您加入收藏的應用程式。" #~ msgid "Delay Search Results" #~ msgstr "延遲顯示搜尋結果" #~ msgid "Improve results performance by debouncing search terms" #~ msgstr "透過延遲處理搜尋輸入以提升結果效能" #~ msgid "Choose a theme for the progress bar!" #~ msgstr "選擇進度列的主題!" #~ msgid "Vertical Stripes" #~ msgstr "垂直條紋" #~ msgid "Display flag colors from top to bottom" #~ msgstr "由上而下顯示旗幟配色" #~ msgid "Open Link" #~ msgstr "開啟連結" #, c-format #~ msgid "Apps Tagged \"%s\"" #~ msgstr "標記為「%s」的應用程式" #~ msgid "Keep Data" #~ msgstr "保留資料" #~ msgid "Ongoing" #~ msgstr "進行中" #~ msgid "Finished" #~ msgstr "已完成" #, c-format #~ msgid "Transferred %s so far" #~ msgstr "目前已傳輸 %s" #~ msgid "Tasks" #~ msgstr "工作" #~ msgid "Stop Active Tasks" #~ msgstr "停止進行中的工作" #~ msgid "No Tasks Yet" #~ msgstr "目前尚無工作" #~ msgid "Refreshing Store Content" #~ msgstr "正在重新整理商店內容" #~ msgid "Flathub" #~ msgstr "Flathub" #~ msgid "No background tasks!" #~ msgstr "沒有背景工作!" #~ msgid "_Synchronize Remotes" #~ msgstr "同步遠端(_S)" #, c-format #~ msgid "%d Update Available" #~ msgid_plural "%d Updates Available" #~ msgstr[0] "有 %d 項更新可用" #~ msgid "Updates Are Available" #~ msgstr "有可用的更新" #~ msgid "" #~ "The following applications are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "下列應用程式可更新。是否要安裝?" #, c-format #~ msgid "" #~ "%d runtimes and/or addons are eligible for updates. Would you like to " #~ "install them?" #~ msgstr "%d 個執行環境與/或附加元件可更新。是否要安裝?" #, c-format #~ msgid "Additionally, %d runtimes and/or addons will be updated." #~ msgstr "此外,還有 %d 個執行環境與/或附加元件將會更新。" #~ msgid "Update Now" #~ msgstr "現在更新" #~ msgid "" #~ "The ability to inspect and install local .flatpak bundle files is coming " #~ "soon! In the meantime, try running\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "on the command line." #~ msgstr "" #~ "檢視與安裝本機 .flatpak 封裝檔的功能即將推出!在此之前,請於命令列執行下列" #~ "指令:\n" #~ "\n" #~ "flatpak install --bundle your-bundle.flatpak\n" #~ "\n" #~ "。" #~ msgid "Resume Current Tasks" #~ msgstr "繼續目前的工作" #~ msgid "Pause Current Tasks" #~ msgstr "暫停目前的工作" #~ msgctxt "shortcut window" #~ msgid "Toggle Transaction Manager" #~ msgstr "切換作業管理器" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "離開" #~ msgid "Show Animated Background" #~ msgstr "顯示動畫背景" #~ msgid "Whether to show the animated icon background on the home page" #~ msgstr "是否在首頁顯示動態圖示背景" #~ msgid "Calligraphy application page" #~ msgstr "書法應用程式頁面" #~ msgid "Download graph for Blender" #~ msgstr "Blender 的下載圖表" #~ msgid "This flatpak is verified by the original developers of the software." #~ msgstr "ć­¤ Flatpak 已由該軟體原始開發者驗證。" #~ msgid "" #~ "This functionality is currently disabled. It is recommended you download " #~ "and install Flatseal to manage app permissions." #~ msgstr "此功能目前停用。建議下載並安裝 Flatseal 以管理應用程式權限。" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Ahmed Najmawi" #~ msgstr "Ahmed Najmawi" #~ msgctxt "About Dialog Translator Credit" #~ msgid "AtomHare" #~ msgstr "AtomHare" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Azenyr" #~ msgstr "Azenyr" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Goudarz Jafari" #~ msgstr "Goudarz Jafari" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Jill Fiore (Lumaeris)" #~ msgstr "Jill Fiore (Lumaeris)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "KiKaraage" #~ msgstr "KiKaraage" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Lucosec" #~ msgstr "Lucosec" #~ msgctxt "About Dialog Translator Credit" #~ msgid "LĂŠane GRASSER" #~ msgstr "LĂŠane GRASSER" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Marcel MrĂłwka (Microwave)" #~ msgstr "Marcel MrĂłwka (Microwave)" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Pietro F." #~ msgstr "Pietro F." #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shihfu Juan" #~ msgstr "Shihfu Juan" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Shinsei" #~ msgstr "Shinsei" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Vlastimil Dědek" #~ msgstr "Vlastimil Dědek" #~ msgctxt "About Dialog Translator Credit" #~ msgid "asen23" #~ msgstr "asen23" #~ msgctxt "About Dialog Translator Credit" #~ msgid "renner" #~ msgstr "renner" #~ msgctxt "About Dialog Translator Credit" #~ msgid "robotta" #~ msgstr "robotta" #~ msgctxt "About Dialog Translator Credit" #~ msgid "Peter Dave Hello" #~ msgstr "Peter Dave Hello" #~ msgid "Constructing Flatpak instance..." #~ msgstr "正在建立 Flatpak 執行個體..." #~ msgid "Reusing last Flatpak instance..." #~ msgstr "正在沿用上一個 Flatpak 執行個體..." #~ msgid "Flathub is not registered on this system" #~ msgstr "此系統未註冊 Flathub" #~ msgid "" #~ "Would you like to add Flathub as a remote? If you decline, the Flathub " #~ "page will not be available. You can change this later." #~ msgstr "" #~ "是否要加入 Flathub 作為遠端?若選擇略過,將無法使用 Flathub 頁面。之後仍可" #~ "變更。" #~ msgid "Add Flathub" #~ msgstr "加入 Flathub" #, c-format #~ msgid "" #~ "Beginning remote entry retrieval while referencing %d blocklist(s)..." #~ msgstr "開始擷取遠端項目,並參考 %d 份封鎖清單..." #, c-format #~ msgid "Received %'d entries out of %'d (%0.1f seconds elapsed)" #~ msgstr "已接收 %'d 個項目,共 %'d 個(耗時 %0.1f 秒)" #, c-format #~ msgid "Waiting for background indexing tasks to catch up..." #~ msgstr "正在等待背景索引作業追上進度..." #, c-format #~ msgid "Completed initialization in %0.2f seconds" #~ msgstr "初始化完成(%0.2f 秒)" #~ msgid "" #~ "Bazaar was not provided a curated content configuration. Contact your " #~ "operating system's support channels for assistance." #~ msgstr "未提供 Bazaar 的精選內容設定。請聯絡作業系統的支援管道以取得協助。" #~ msgid "Apps Of The Week" #~ msgstr "本週精選應用程式" #~ msgid "" #~ "The number of downloads in the last 30 days. Click to view this " #~ "application's download statistics." #~ msgstr "過去 30 天的下載次數。請點選以檢視此應用程式的下載統計資料。" #~ msgid "VCS Forge Star Count" #~ msgstr "VCS 平台星星數" #~ msgid "Remote repo name" #~ msgstr "遠端儲存庫名稱" #~ msgid "No Flatpaks Installed" #~ msgstr "未安裝任何 Flatpak" #~ msgid "How the application looks" #~ msgstr "應用程式的外觀" #~ msgid "Appearance" #~ msgstr "外觀" #~ msgid "Show animated background" #~ msgstr "顯示動畫背景" #~ msgid "Type to filter" #~ msgstr "輸入以篩選" #~ msgid "Exclude results with proprietary licenses" #~ msgstr "排除具有專有授權的結果" #~ msgid "Advanced" #~ msgstr "進階" #~ msgid "Debounce input to prevent instant replies" #~ msgstr "對輸入套用去抖動,避免立即回應" #~ msgid "Share" #~ msgstr "分享" #~ msgid "Open this link externally" #~ msgstr "在外部開啟此連結" #~ msgid "Downloads Over Time" #~ msgstr "下載趨勢" #~ msgid "Minimize Lower Bound" #~ msgstr "降低下限" #~ msgid "Maximize Upper Bound" #~ msgstr "提高上限" #~ msgid "Installing" #~ msgstr "正在安裝" #~ msgid "Removing" #~ msgstr "正在移除" #~ msgid "Halt the execution of transactions" #~ msgstr "停止執行中的作業" #~ msgid "Browse" #~ msgstr "瀏覽" #~ msgid "Go Back" #~ msgstr "上一頁" #~ msgid "View curated applications" #~ msgstr "檢視精選應用程式" #~ msgid "View the latest on Flathub" #~ msgstr "檢視 Flathub 最新內容" #~ msgid "Up to date!" #~ msgstr "已是最新!" #~ msgid "Confirm Action" #~ msgstr "確認動作" #, c-format #~ msgid "" #~ "You are about to remove the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "即將移除下列 Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "是否確定?" #, c-format #~ msgid "" #~ "You are about to install the following Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "Are you sure?" #~ msgstr "" #~ "即將安裝下列 Flatpak:\n" #~ "\n" #~ "%s\n" #~ "%s\n" #~ "\n" #~ "是否確定?" #~ msgid "Resume the execution of transactions" #~ msgstr "恢復執行中的作業" #~ msgid "Pause the execution of transactions" #~ msgstr "暫停執行中的作業" bazaar-org-bazaar-b6e9a65/screenshots/000077500000000000000000000000001522167256300177715ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/screenshots/bazaar-dark.png000066400000000000000000006465701522167256300227000ustar00rootroot00000000000000‰PNG  IHDRcśLůZsRGBŮÉ,gAMAą üa cHRMz&€„ú€ču0ę`:˜pœşQ<bKGDTTT3cÁő pHYs  šœtIMEęžŐ IDATxÚěÝwœu˝˙ń÷̜˛˝gÓ릑Nč ‚€Šˆ….˝ökš^ťxýÉEAĽ‰€¨ˆˆ˘ -Ô$@BŇIŻ[˛ý”™ďď9çě9۲ťŮž×óńϞ9sćĚÎ ›Çyűů~žhĂâŔ0cóÁYćU8cqŕ 2ŕÁŒ5„>ŸŔtĆôŃś˝Ę¤Ÿk “ßtéçýő{(c ˘ĎłŃq€ĄÉôÁk˝Ş?CŤë­Apź`č0ÝXoşš^Ő_áFWŤďşş˜ź§×őG¸ŃĐĹęĆűâw§ťý_L~îĘó^Ő×FW‚—Ž„1TɀÖöWٲżŸťĐôšž 4öŹtśŽ;ĄL_˙`đčJż—΂—î„2}ČXý°ĎŽ„.]}ÜßqĘ0‡†ž|şÚ°ˇu“\×QEŒQתe:;Ž.;ĐʘŽVĂtôźő’źŘźżőgľ÷ Oű›žÚ¨%SH`,e/ŚŐ{;Ş|éő*™ž†1=­†é(€I˙9yÂZ?vˇ™/žö×´×kç1=ŒńÔy0ÓŃgڇ0VDz_= 2şÄt%„I.VŤŸĽś!ŇÖČń€Ą/=ńZýœş(ígŻŐĎ…25˝2lŠť•11]†”ź8j?IŻŠé¨— €Ô~o˜ôޘö‚W~ĆĐzűŽ|VëaJݶԝ0ڧALë G™!Œ“ś$­ßk‰!JŔ×^uJú’ Yâ’b‰G7mąŐʸ­öáuđyVŤŸ{ČhϘöšövÖ Ćig Jʒœ1cÖńápřđ@Ŕ™cŒ5Á˛TŹĚaIűăŁjË2›ăq÷H$˛xőę•/ĘešÉ&™]¸jКąŐ~(ÓşoůZ=ŘŽ+=b҃˜dL íç`âçěüüüâ‰+΃çĆăńŇx<Žx<.ĎódŒáöÝfY–lŰV H.•ąXěÁM›Ö˙ąŽŽŽZR“ü&Ś– ™xÚĎ]iöŰ^™ý†] cö7äyg:Žó…††Ž:PąXLápx^IɈ­{÷îZŻöűĂHÝlĐť?Mmus•śżÖĄL0??ż8++üĹŚŚ&Ž6ššš”•ţb~~~ąZfNĎ5¤–"ŠűyIv­ł ™Ö?ˇ×;&4qbĹyŃh´”“Ŕ`Ẏ˘ŃhéĉçI )3ŒI/<é(i/3é”ÝĂcľ:ůšő°%GR8 žFšĘ`PI4ô=WRX-aLë>šIÝ_Złđx;šâ:cˆŇŒłŽ‰ÇăTŀAÇu]ĹăńŇ3fŁö‡*ĽçRC˜¤@7śílšëŽ^ˇ$9ĄPčˆx<ÎŐÝâ8ŽÂá°BĄ€lۏ<Ď(+*‰č@ @âń¸BĄĐ’žSŰj)3˙HŸeI­ÖďWGaĚţžŽ‚—öĘxœ`00ťš9ÂşÄqĺćć*++Üîëśm) * *//WÍÍ544ô8”‰ÇăĘÎϖ_Ó^ÎѓŚÝםRÓ^O˜ö^k˝.ĆcMđ<; ěWvvśňóóşőžŹŹ°˛˛ÂŞŤŤWOfröřî\† Çq¨"Śľüü<9ŽÓÓˇw%ÓčqćŃW+˝6ÝÓţ”––ę÷żżWsćĚV8ćî`ĘÍÍ,űlÝ ˇ×hcuq]Ÿ())Ńý÷˙NÓ§OÓúőtŐUŸáî`ˆq§ĂY“DVVř@Şc’z=űčíʘ~ b~˙ű{5cĆt­_żA^x‘öěŮË Ŕłż‘.Żźň’~ó›_Ѝ¨(ľŽ°°PˇÝöK˝ňĘK´ď.ęŐźĂč—áHéb>BĄP§ŻoذQóçĎÓ­ˇŢ˘˘˘"ꗿüš.&'ąKHRPRŃ…GźZSłŻ×žőĚJŸţôĹÚ˝{w1Cˆă8űnÔS••Ur]ˇKŰjéŇ7Ž–T#)&)*)žXÜÄâĽ-&í19*ýgŠŮ—ěĄ|ąŞŞŞtŃE—j͚ľŞ¨˜˘;îř w0CŒëşjnŽôú~››#]bú“=Ô/XeeĽ>ýéK´|ů;]•ŔĐŃĐĐ0$öŮĂá‚UVVꏳ>ɝ Ŕ庎ęęꕟŸ×+űŤŤŤ”U1Ň0¨ŒĂCSS“ęëźšĽžžAMMMƒö÷$ŒƒFccŁęęę{üţşşz566ęß1ŔeƒISS“˘Ń¨rss••îŇ{š›#jhh´C“ŇƀAÇu]ŐÖÖŞĄÁQ8V(R m[’$Ď3ŠÇăŠFيD"C"„I"Œƒ–ëşjllôCşƒž1ýˆ0 Ćô#€~DЏcúa @?"ŒčG„1ýˆ0 Ćô#€~DЏcúa @?"ŒčG„1ýˆ0 ƀƒ†ç55E´sgĽšš"ň<ÓďÇ@‘HTcǎŃ)§ź_cǎQ$í÷c Œ Ďó4fĚ(IҘ1Łäy^ża @?"ŒčG„1ýˆ0 Ćô#€~DЏcúa @?"ŒčG„1ýˆ0 Ćô#€~ŕ`01Ćp†Ë˛8 ĐC„1PƘԂĄÇ˛ŹÔč ˜ Œ>5şHU˘ŠyYĘqziÔÜ­÷÷í_QßîˆŁëim}łžŘYĽ‡wV+ΨGč ˆ2GşcÁTMĎËâd Q9Ž­ů…9š_˜ŁO)ŐgŢŢ J—óűĂ˙•ţżé\Ww,¨ ˆFfćgëöůSdšqNěď{1§ýÉOç+#ˆ†fćgëÜąe2Ćăd@'cĐŻ\×Ó# 9ĂÔ#‹äş„1ĐÂôĆ$KšTĹ WÓň˛$Y̎ ŒA?3Ę 8œ†aĘżś1Đ€~ÄÔÖč [98ŻšeY}˛ďď~÷Űşč˘ ;|Ýu]ŐÔÔhűözńŗôŕƒÖ֭۸(*c ;Žă¨´´TsçÎŃg?{ž~ú)]pÁůœƒa €a/ëűß˙ŽN8áýœ ŽaJ†…%K–Ś~./ĄńăÇgźnY–Žšćj=˙ü œ,Š0ŔçşŽÎ9'sŇÉ'Ÿ¤_˙úV9NËě]sćĚćdp„1†ĽgžyVŻžúšŽ;îŘ´ľí7ž7oŽÎ=÷luÔQ*/ĄP(¤ęę­\šRO>ů”üŻr]7ă=_üi}ç;ßęňńüđ‡?Ň=÷ܛą.++KçwŽN9ĺdM:UĹĹEŠD"Ú˛eŤ^yĺUýáԆ ;ÜgOŽű‡?üžÎ?˙źÔóˇŢz[çœsž>˙ůôÉO~\#GŽÔwÜĽŸüä˙¸‰€>B`ŘĘËËËxžxń’Œç–eé›ßü†.˝ôâ63?•—Pyů :ńÄtŮeëĘ+?Ł]ťv÷ڹ͘1]wß}‡FůG9Đ̙34sć ]tхşńĆëžűîďÓăţú׿ŞË/ż”č'4đ0ŹX–ĽńăÇëŰßţŚćϟ—ZFőӟޜąí5×\­Ë.ťdżSpϚ5KżůÍŻdŰ˝ó'ł  @÷ÝwO› Śľ@  ď|çtňÉ'őŮq—––ę ™i čOTĆňÇŃúőŤ;|}ýú úć7żĽwŢY‘Z—••ĽĎ~öڌíÖ­[݇~DÍÍÍúÔ§>™ŃcfŢźš:î¸cőâ‹/I’6oޢ˙ű™6ŸeŰś>đ3‚’ĆĆÌĆÁ—\r‘ĘĘĘRĎ]×ŐC=˘eË–Š˘˘B—\r‘–?Ď×^{ľžyćŮ^9îÖƏ—:†7J˛ÔÔÔÄMô!ÂĂښ5kuď˝÷iŊ닋‹őđÏ¨ŹŹLeeĽĘĎĎׅ^¤}űj%IO>ů”^ýĺŒPeîÜ9ŠPăšçž×sĎ=ßćóžţőŻę¤“>ąîßřŸŒŢ/ťwďÖĂ?˘#F¨ŹŹTO>ů”nżýÎÔëÁ`P_üéÔó9sćȲ,cř¸Űłző]}ő5Úşu7 Đc kÓ§OӍ7ţ@ŸűÜ şúękRŐ1;věĐ÷ž÷ƒvß uĚ1GˇÔşMk§Ÿţ!]uŐëîż˙ýíoOfŹ{đÁ‡ôŕƒľť1cĆhÌémŽ' )‰ôÉqőŤ_'ˆúa €!Ďu]]pÁEŠçYYY:účŁtĹ—) I’FŽ,×wüZúĐGTWW—Ú6ëĂ>] .Ќ34fĚh•——gL‰ÝS§Vč'?ůqĆşĺËßэ7ţo‡ď™>}šN?ý4rČLMžŻˇŽťąą1cř€žG`Xh=SŇK/-Җ-[ôŁý0ľnäȑúřÇ?Śűîű˝$ż’ĺťßývF˙–žČÍÍŐŻ}›rrrRëöíŤŐő×NąXŹÍöůůůşéŚëƒ<ĽGŸ×[Ç-ůa €ţĹlJ†­ż˙ýmÖ-\x¨$ićĚşĺ–Ÿľ 4Ö­[§G}\ßúÖwťTÜtӏ5eĘäÔscŒţëżžÖáПýč‡m‚˜††˝ôŇ"ÝqÇ]zčĄG:üŹŢôĄS3ÖÝqÇ]ŠŮZ+..Öi§enűíwę曎x<.IşňĘË;üźŢ:n‡ĘĂRII‰žýí˙ił~űö’¤ńăÇgŹţů33Śg ;jĎqÇŤ/}é ë^ý ýô§?ëđ=ăƍ•mgţé˝÷ŢűSAŒÔR˝ÓžŢ8n‹ĘCžă8züńż¤žçććjܸą ƒmś}úéI’ęëë3֟tŇtüńďÓÚľë4kÖ!úÖˇţťÓĎ3fŒnšĺć6 s-ËŇ/~Ń6ŒyýőĹş÷ŢűÚ|Ž$]ýľşëŽ{8:ďźsŰTÚ¤;Đă0đc sćĚŢď6Ď?˙‚^~ůIŇ+ŻźŞ~ôŒÔk#F”éwżť;cűĆĆĆŤLޏâ2ˇY桝}$•$mŢźEۡoט1cRŻ]pÁůşŕ‚óSĎ”››Űî~ô¸ <†)8(<÷ÜóúÜ瞘zţ裏ˇ™)ÝíˇßŠUŤŢíđőîN!äşŽžűÝČuÝv_ŻŽŽÖ÷żc‡ď?Đă0đc KMMMÚ˛eŤž|ňďúĚgŽŐW\1Ä'ę˘‹.ŐM7ýTŤV˝ŤĆĆ&íŰWŤˇŢz[_úŇWtÓM?íłc{ć™gőÉOžŁ§žú§öîÝŤX,Ś-[śčĄ‡ŃgœĽ;vtřށóvŞjIJ,n~ƒJCC“Ž:ŞĽ˝ŔkŻ-Vnnś$Ѝ¨PK—žq´¤I1IQIńÄâ&/m1i&ů8ígľúY•1ýŠ0 Ćô#€~DЏcúa @?"ŒčG„1ýˆ0 Ćô#€~DЏœô/K•oďTŽŐ79`łeTżiƒ‚áŹ>ŮÜrU°śZÁŚXŸě?Šnűm§oößܨ˘ĺť2VŸěżŢó$YÜć@7… ĘUńÁĎŞtę1’¤Ęľ/kÝż~ĽhÝNŔ0Dƒ~f´;îjR°o˜:ۨžŚZ%#G÷ÉţS 8W…M5}˛˙ÚÂ<Ő{ŽJú(ŒŠŻŠ–m•őQłŰu%ns  ,' 1 ĎTqő*3KĄź’Ôkĺs>¨Â‰ Uˇc•Ş×˝Śío>!ăĆ9iĂa úçK‡eÉ#˒ś¸1M űäs*mO{wôYÓ`GĽŃ…*ÜŢ7aLeiĄă•B}˛˙š˝ťs\•y}†m‰ÇeY-ן/”N?NsĎűžžoËr˝yĎľ5˙ÚzęőzéŚ÷ęç˙őË ľT^ŚjUľöe­űç-Š5Ő É˙>Cy%šôţËU:ýX˛ Ô\˝];Ţ|BŰ?:`ŔŘ#?ŠńǜŻ%w]ĽXCľŽţü#ÚňĘ´íőG†ÇßD' yüTœëp›p~ŠÂůďSŮô÷Šěľě/Ëx2Ăa ú÷ ˆeéůćfŸ•Ó'ű_Š)öÎUĚ^Ř'űßjíSxá$_˛ŠoŽ˙)Š4ŐŠ"+żOöżfůbe…âšë›0ě…HŁ,Ťo[QŐlzK‹ď¸,őüĐKĽmo<˘Ý+ž‘$šŃŚ>ż7˝xŻöŹzN’”U8JźN3Ďú––˙ńŤCîżÉpÁH-źü׊Gęľé…ߊšvňGĎĐÄ÷_Ž‚qsľň/ߑLďU;Íţä÷äyŽV=úýNˇŤßšV•Ť_”ičŐß÷Ř/˙U˙s§v,}b@Ďű˜C?ÚiÓZńäĂ4záÚžř1ţ!cĐŻ,ËÖóшžaŒœ^ޜđ$­ ĆdŢzC<ű Ůvď†ƒś¨N:bšŽťűŮ^ďÇńl[ËgO•ŰPŻŮ˝|~ŒçiíŰoČ ĆuŚzż{wÜ=Ę 8}zš‘Őď\Űň{W‘ş=ëúZ¤śĺó’sÎů‘œ`śÜXӐúorÚé_TŹąVoţîšŃfIRŐşWTšöv՝*]~Ź*×,ę÷ăÚˇy™öm^6l˙–TŮý÷L9’0`˜ ŒAżŰkI6ÔëSy˝[ýńz8Ş}ś‘Ş÷jŮ+ĎjÁq§ôęţ×Z•ŞWL^IžV8KłŸ]ŃŤűőČšŞÎϗéÍşVPÜŤűsŃżUWS)ŮŇâpTGFzw(ÔĂőőŞ´$gÝoc<[ă9WĄźRŐnyGŤŸř‘šŞw¤^/›ţ>M:ńrĺ”NTsínm_ü¨ś˝ţ°Œńşüž—1ތqSëF/řˆĆ}ޞKĆ)Z_ĽoţU›^źO’”?fŚťňŽ6űŠßšN‹ď¸T’T8až&Ÿx…ňÇ̔qăÚóî‹Z˙ô/ÔK’˛ŠFiňŽVIő˛ƒYÚˇi™Öýë—jÜłQ’4ócߔe;ňb•Ďý 6>{‡śžöçŒĎ 喨túąZńŕ§‚˜–cY­ľżYĆk99e“5őÔT8aތÓŢ5/iýÓżL Ď5˙ÚtâZ˙ô/5ĺäk.(WíÖz÷Ż7Şšf§ŽžáAe•$œ{Ş–=đe5VnŇџ{XŤűĄ&žďbs‹ľčŚÓŰff;!Í<ó*Ÿ}ŠâŃí|ëďÚđěR⟡7”iÁĹżTݎwľőľ‡tĚţ"IšqĆ×4㌯酝$/Uٌ÷iŇ —+§l’˘ ŐÚąô m^tżŒçvz.‹&Ş)§\ŤźQÓä6×këŃćďÝď˝.(WţŘٝncܘv-ZŁćXÉąůcg+”?‚ŚžĂS[Łß${ˆ8ŽŁŰęjŐŕy˝śďfËč_ّÔóŸř“˘‘ŢŤPˆÉŐŰÖNϒń,˝|öąŠfő^˜Ńë§'×XňŒ­g*÷*ҋç'Ňܨ˙ö`ęůż˛›ązݞ§Ţót{cÇɸÖ-] ňY'ęÝÇnÔ˛ž˘P~™f|ôŠ×‹§ĄŮçܨ]˞Öâ;/׆g~­I'^ŽI'^ŃĺĎČ)›ŹŠ^Ť]Ëţ)/őƒ†y§iÚGž˘í‹Őâ;.ÓĆgďĐÄă/Uůl? lÜłIoţĺÝÇ~ ăšÚšě)IRvÉ8-¸ř5ěŮ 7ďšVďüů›*ž´@SNš&ń“ŁůŸţšÂ#´üO_כż˝FƋiÎŮ7fۈ™'(ÖTŤ7űí\ö6Ǟ7jš,ËVőĆ%íţnۗ<ŚŞuŻřÁM^‰^v›â‘z˝uďőzçĎßTNŮ$Íťđg’ŐÁ…óJ4böÉZţÇŻjńW(•§ég|M’´äîŤUóޛŞŢ¸D/ß|ŚŞßkůÜ Ç^ uO˙BKĂs=ḠŠÝ­%w_Ľu˙řšĆ,w˙!pĹ?›Ńʎ=ž˝SţsWFŔÎ/UĹ)×ň Ŕ0@e Äž Ł/UíŃŻJËx¸’ą¤?ĺ6ŠÎn /jkŞôč˙§łŻűćW22zŃޢϕ‘䊜(OO|ţ#úřMđp%cYş˙‚¨&?WžgÉŠ:לoŐ%cÇđp%c<=ţŰ[TżŻşĺüŰFä5ęŇşÜNd=I_­ÜŁ}Ž=čŇ]c<-đŠ7ŐJ’6=fžĺW9ĎŐÄ÷]Ź­ŻýY[^ý“’ěݤ#4é„+őŢswwXá0íô/jęiŸ—%Ér‚ŞŰžJ˙sgęő]ËţĄš‹ŠŰ›Úď˜ĂĎRá„yÚ˝âßrcMŠ!8v ¤i§}^•kiëŤ~`ÖTľUŻÜrvFÄŽwţĽ˛™ďOübŽ–Üu•ŒKU´l}íϚŃ- ć*Ö¸O’Ô°÷=mxćמŸ`vĄŒëŇĐŞą‡\ńh“Vţĺ{ŠJ”wüşŽůÂŁ*vtËP&ËÖężţŻÜhŁ$ió˘űuČÇż-Y–bűk¨’皊ÖWľ nWŐşW;=†Úm+ľâPڐ IDATńšťýßm÷9á\MűĐ´ń?w´Šěiď^ˆÖW)ÚPĽhCeęó'źďbí^ńŒ6˝řťÔ~Œf}âťÚôÂoSU?­ĎenůŮÁ°öŹüš÷íTóžzíç¤*—:“œžş#Ő—hËŤjţ§o–egţ3]:íţ Œş'9Ť’mŰz-׏kŞôâ҉7–ôל&­ ĹÚźśnśú÷C÷čƒç\Ö㌲FFoX;´Iu2ƒńü0Ćx–Ö͝˘g/ţůŒőśăhÜŃç*Ô4eUţ¨éŠÖďMż¸qČI*7KŮĹă”7jj"Ü §6iŽŮŃéů‰5í“ĺťÔë&oÔtŐnY– b$)Z_ĽŚŞ­Ę==Ƹ‘†TăoS-ËČv‚ŠĘĄö4×lßďőŹÝş2óů–ĺ˛ƒaeSýŽu=şGňGĎĐŽĺ˙ĘXˇoÓ2Yv@šĺSUłéÍvĎeލÚóîóZpémŞŮđ†Ş7˝Ľ˝ŤžďRcZM˙nˇ[ ~@tíć ôçhłśíÝĽ›JF(ˇ›,͖Ńs›´Ş &é˙<Š}U{ôąË?ŻP8ť[űÉŐ ömQŒç‡$ţbÉ$B“7NY¨ĘŇB}ü7W¨9Ú˝ăĎ ëţóĎĐňCŚúűWÚgČfžŻŞŃžX\——tűř#͍zěîŸkÝňĹnł(+ŞjÇčüúl…M÷B”zĎÓUîŐË^LÁ>šŞźŻyń¨6ţçNíYőŸśAN'łřDëŤŐ¸ˇeF­eü/ű…GU>çdm{ý?ćM:ńríXú„ŞÖ꤭•[4ńřKÚěgÔükäźiéÝ×d|‰/š¸@s/ř?U­Y¤ŞKŐüöS*7WŁœž€Štؕw)ZżWťW<ŤĘľŻČ¸qÍťđ§Ýť†;×ĘOœÓŢ5/ľy}ĚagŠyß.¨R'!›1sýŒşpĎö l K:ůŌъ?Sůcfޤâ(•M?NSNžF+ţ–öŽ~ŠÓýW­{55dM’,ŰŃŘĂ?ŽKy#§*˜[Ş)'ľ?\Ťrí+üă0 Đ3ý.˝r" ęăéC;ˇęţşZĹťđ­ÎXŇŇPT7ÖwÄ$­yűuÝöÍkőĆžĚhFÚńw,OŹj=ćŹŃfS'ĎSbąüž.‰çŽ‘\ciőüŠúŏŻŇk'/”×…@Éؖ6[?üŻ+ľěŠr_mă%*bďIňŹTŸ˜äđĄTőJ˘ż‹ń¤úźl=yŢIzáÔ#5óÍušž|˝JöÖŞ°ĆćRST ĘŇB­<¤BËfOUu~?$Ék١1-Ô2ŞpL÷żŽŚ˛[ç§Ţ6z<§IĎe5ë‚ “:=˙—>őŚŞl[Áp¨×§'ďo›^şWsĎű‰"ľ{UšöeeÖ´Óž¨š÷–čÝżţo‡ď ŒPިiţŃpžF-8]áüŞ\ëŐiÜťYĽÓŽŐŢŐ/ɍ6hܑŸRNé„Ô4؁pžćœsŁölPýŽľ*ç‡ ĆóTˇ}•+7iÔźŠtĆűÔ´włŠ§ŠQ >"ˇš6ľËv4ćđO¨rí"唌WĹŠ×÷čŹ}ęg:ěŠßháwhëk)RťGů٧kÜŃçiďęSÏś/yLcŽř¤9ë´ůĺ?)Î֔“ŻQĂîuÚۍjHí^O9Bš#&ŠšfWˇŽ5ˇźB“?pĽvŻxVš#ŚhĘÉ×hűâÇäĆü~15シ1‡ŸĽúŤŠŰŁąG~*Ľ¨ú=*7Gű6/SăŢMÚźč>Í=ď&5î}O•k)§t‚Śţ%m_ühŞ_L{ňGĎĐü‹oŃşü\Ő+§t‚ ÇĎÓŽv%ˇ=ťUż}ĽÂ3ŽoȌ;ęěŒŔ+]íśw˜I €0čšdď˜ôçĄPP5qKťŚäkהާ˝ŢˇĽç˙Ďz]MĽ–<÷”–<÷T§Űĺ™ô¤%„Iö‹ń!LKPăWĚÔćkŃ ‡ęĽăMźĎJ{_ËśmöiŇöŮj]z1LWż§öŮfżçż&P(h÷š5Uë^×;ţˇ&p™&pšÜhŁvźőw˝÷üݝžoâń—¤†šŃf5ě^§ĺüŞvűÓJŻţŰ˙ӌ~] .şEńćZm[ňWU­}9őţâŠG)ŤxʞŠÇjá塧֝Ńf˝řăS´ýGĘ-ŐĚ3˙[’ĽŞuŻhË˿ט…ţl@ ť7hĺ#ß֔SŽÓ¤/WÝöwľáßżÖěsněö9ˆÔîҒťŽŇ¤.Óä.W Ť@MŐŰ´ůĹű´ő‡Sc"u•zóžë4őÔt輡&Śś^¤őO˙"ŁĚţl}őO*;K‡]}Ö<ńcŐl~ťËď}ď…{ý÷^q§âŃíXúWmxöŽÔëŸ˝CĄÜÍüřˇoŽ×Ś~—QQ$IëţyŤf|ôk:bîŠzíśóý{ŕĄojň —kŇű/S´ĄJŰŢř‹6/şżÓcŠŮôŚV=úM8îÓŞřŕőŠ5Őj×ňjĂîčŇďRšţ5•ś c$uÄHRőú7řÇ`¸|'îÂz+íyňg;í1š8‰%XB’‚’Š.<â՚š}œmd0í Ir]WżžęčNß÷—–őůąúÍZ‚O™U,iĎ; \’5‰m\/-pi̤B™dߘ´°'šý¸_}­ßŽË'Ţ?ŻÓׯ˝óŐÔÖC=Œě_' yü´ËMzŤ7,Ö˛?|EƋsňPCC“Ž:ęđÔó×^[ŹÜ\ż˘ş¨¨PK—žq´¤I1IQIńÄâ&/m1iéÍÓżđśůňKe îËHŤę˜ÁÄőZ‚7=@‘2ƒYíTĎd1ŠuíUä.~Ŕ“Ř(ńš;4Ž%€Ž3n\Ëř˛F/VŻęćÝÚ]żY[kŢіʥjŽR} %ƋkűâÇ´}ńc ĺPĹ)תtúą’¤Ę5/kýżM€aŠ0j0TDŽKŸZP¨Ů‡){dXŠ5Źx@ďĆFés> f;ŘŞyof?dąZ=o5|I­*d”Y!“Ţ$xz4O§6”kN<_śńgRyŠLܓ‰{r➠"ĺ„ 4"żBÓG¨ˆçę˝˝KôΖǵˇöÝ~ż†L´nV=ú}NŔA‚0ľqyÝpĺĺNÉń‡ōLÔSA–ŃąššňÝ=ú#ÚY<"sHRr‘Z.ň§ťnŠ‚IŤ‘Ő˛.ýý‰×ËܐÎoŻšnĄäXţ‰kdKĆąäٖœ˜'ĹýŮwŒ$Ďv4ąěp*=L›+—ę­őżUcón.0 B„1r*FőĘ~Ëҕg—(gVޟ˜ÄЊců–”W*]ąíIݔsƒYU-Íw[ő†iz”ÖCĆtźîČćb]ԗŽV™>–=^VŔň— -+dËJUÇd‡~P“¨„ą–_ɓśŘ–%[~ELňŃĺä:…EQ8ç°así`¨#ŒÁAgFžĽ˛šůRÔHQOŠř‹‰z2q?‘ë7ČUźeęę Ľő:|窴ŔĹX܌&3tq=Kžke„0ž+•yYş(<Ů•X,Ç\젝˘äd1Ž-ËöĂËśdŮ~b+5ÂĘL_ĄL^Éy˛Ľ\|cppÝđĆŇńGĺË$*bLÄó—hb‰xRÜŻ’1n"˜I„3žkôńŘbYŽiU Ó~ĺK*„qÓŤiüpćB{œ˛l;˜¤’”d0°ý &ꤧ+JüŹÄ{”zH=i]Żb[Y }ŠĂwSN&Ǎv”=*$Ĺ<ż*&-„1QOŠľTČXQ#ĎőĄŒ$WĘϊęĚ͋Z…0‰ ŻučŇ̸Éuž4ÍËÓť0cÖĽÔ/9{’'/âúSZ{&ąR}ld˙“ţ4É´zžx=5[V¸‚›a šŽŃěCó¤d˜¨ç?F’ĄŒ‘ő+fóäĹ=şëVU2ŹVQS]ťĂ’•/mÖĽő‘9Í+k= “Ŕ¸žÂÄJÉd’MuÁ‹'żOK˛š%ŃGĆÄ=Ýřš^(œŤ&+”Ö'&­‡LF(#Zō‘•%Œz-AŒkRSY§Śą6~ŁŢÔgťiAŒ—Ć“hm“V)“ĚšJTĎXĹÜ0ßU9Îć91…ƒTÓ^9–ü$¤%đđŤ$ iËď~›ę“űă÷ŽqŹ¸‘—d ÜFłĺ9Ý3öTć˘TeŒ•Ę´TČŘK1ă)Ů$ĆH Ä<Ůn˛*ƖeűǕdRł-ůŐ1n"„ioIVÉřŒI ]JţěÉ(Śđ°żîÁ° YĘuBʲl§eZpte)îšjö\5¸QŐƛU‹ôÉGeŮŮ Ű9 ŮaŹ€+ŕ¤CętYrM\qWԋ(â5ŞŮkâ>@ [yžŃ„bËďăH–ëO’-)˝úD‰éŸó@c$ŻĽyŽĺIžçɊ+QĄâ÷Žąâţë§4/×S ‡i[¸4U “ŮСĽÁoÜEedäůeÉľ,Œ%Çľd[žd[éYLbF^˘ş%YýK{Œyé2i•2É`FJô—ń‡ŤňpŽĘĂy [Nć 1=gŒ–­<ÇVžÔČPŽ"ĆŐîH˝vGzgVŽź@ňœ9 śúh3O—‘-G!ËQČ +Ď)Ť˜ęÝZŐÇkšŸ ‰0ĂŘĄŠČq-yĆögP˛ĺ—ŔŘÉ~1‰‘@JL#-?Œąź–áJĆM&”˜†Zž¤¸'/ŃC&čĆuéć§őƒ)d IJΠ”>ŁR­çĘą­ÄĚFţŽ’A‰mYţ$Oƒ•ţĺNiý^Ú Z’Ă•˘Uʤ-~v×:Ç j|v‘ňœ 7~?[ŽĆgŞ8˜Ł-M5jtc=ÚOĐ Ť(Xސ5źŤľUč”*ŰÎSMŹR1á&8ČĆ`X‹iDŽ‘‰H–ăQ2vbx’hؒ˜`ÉJ>&“|ôÚöŽ‘›čă%fVJ4ó]ŕnÔW×üL;s:ŹŔ— NgůĹ7Ž%9–Qܲä$˘śaŒü@&˝L2”i _źvB˜´>2ňvÜŞau­‹ƒŮš’[BőËČs‚:$ż\ŞTëŢPœl;OĽĄň!YýŇS!+Ź‘áąŞŒîV“WĎ p#ŒÁ°cÉh~<*M IrL˘WŒRC€<Ëo“ b”Şd%Ć%ĂůĎ]vĽd…Lňšĺúu“fE´+ťĐ ՁćŘ9ńţtÓ˛äʒc,9–Ä؉ &˝6Ćř5;‰ś5-=`’•1ńÖ1^ű2Éǰˇ{Ř\ëâ`śŚäÄ $c4%§XŐĺ@&ŰÎSIpÄAÄ´œ.Ł’ŕUĹD p#ŒÁ°3ľ>˘\ÇHŃDăƟĘÚöŤbL˛An"wI”1˛ŒßČWž?DÉJ WRjV#IŽ—jč›lę›—&U7kcIv‡Ç‰ŽS0ëp?ˆ1ɞÂFŽąd[ţ€)[JÍňd”lec’ß2;’é LŤ!KńŒj)Űl×9Ç R3ˆLÉ-ŃŞşÝű˛´Â]EL{JCĺÚ‰1d ŕ Eƒa%äzšČ8–Œ-YŽ%“¨ˆńe4îő{Ƥr˜D0“ŹˆiŠŽ1ÉJ×kiô÷Ő1ž< ŚďiЖ°âŽÝîńŢŤÔěš ZŽ\ËČITĆؖ‘ düĎNUë(1=śüĄFéÕZEj3ÒçeDůĹML;#Ű´˘ţu5¸~˙–OŒź\vëŠŃVÖ/ŃĘúĽţqeMŐôźyĘwŠő"ÚŢźQď4,V̋vë÷Ëscc€A wę$Œ)ĚĎU$•çe~ᚻŁNVĚ]Œë%†(%›÷żgŒ•ś”čÓR{’L>Źd“mbˆ’?N(Ń´7Q!ă%fTňűČ˜Ô KV\šľŚJŻĎ/o˙ a|Łb‘•Їń÷ËA•¨ŽIZňLŰ@&˝‘Ż_Ó6i=l)7ţŽ ĚćĎŤmŰ**ě<äˆÄă~Ă wđešł ćKӎW ĆłtÚČ隑7Bžd˜ÎŒž^ŁÖaLŘÎŕßŃÖ´œŮ’¤EU˙ĐŽč69V@§–­\'OŁÂ´ľy˝ž­|,ă}šNN+;GFFۚßSČknţ’¤Ľľ/iCă*e;9:šô* ŽĐ¤œéÚŘřnˇŽ-lçĆĆŤśąIŁLQfyHë׹UVTزb´ôöěÁő{„%ďt‹ŰŕˆĘ{ün#ŠŽĄyŔĎkŽęö{&ćwű=㳋äȒŰAH´l:Í^kŠ+ fŻIWI’šÜF˝×´Z3sh\xrˇĂ˜Ÿ Y6§ƒM,‘˙—x°ŠkhRĚř™j˛l§ŰďiˆGť˙/Úa#ůĚęD_˜+&Ąë+ŽŃI#*”ç„´˝ŠVť"őÝţĚQá|5z–Ö7TŠŮÄuxŃX]7ĺŘ6Ű]5éHínŽ×žh˝Ść–čËSß§‚ ˙…ţýĽ“tőä#5.ťPëęö*ęĹőžŇIúÚ´juîÎ3[ŮNP››j´'Ú ĘhKsçW*7kg¤Ž×ŽQŔřěßřý4*<^Gž¨SG|JŮNžÖ7ŽÔŽČÖ6Űç8yš˜=M’´*Ń+&?ŕ{űb•wGM´R’Tě~đ7Î úa ĽŞÚ†nM‹žĺŁęÚúAq,„1ŻTmîö{^ŢťiżŰüć˝×ôjŐyFš_0Z珛ŻĎ>MWO>RYv÷ż`‡í€n^ű’îÚô†~śv‘§]“! IDATŒ‘Ść–hBvQĆvďXŠŰß{]?Zýœ*ŁĘ „tTńxٲtćVĄ?o]ڟ­_¤ď˝űŒŞc••§cJ&fěgeÝn}}Ĺ?tÓÚ´žĄR÷l^â ą&ývób­­Żěľkäô8pHü°Ź^ÚN* –jbö4ĺ9…jtëTŻiˇ¨fFî|ٲľ#˛Y5q˙\-żďML™_ňyĐę~ĺ–CpĐ!ŒÁ w]UČc…ęÚzĹ]oČ˙ßv­ŇŠÚÝ]ŢţÝú=zlçŠýnWęîMočËË˙ŚŰß{]/WnRĚótDŃ8]0~Aˇsw¤^;Ő(ۚ÷iOÔŔĆdeÎB´lßIRÔsľ˛nwj›âPś =uďó+=š˝¸ŢŮç÷Ž™œ›ę,ŠŮÖŤ˝búBňčŹ^ÚN’V׿Ľżěź[ĎU=Ą€Ôü‚c5=/ózeŮٚ”=#q?ź™Z31IRP™ĄKňyĚDůƒ€ý"ŒÁ ŐŠĄ9‰`őMÍjŠÄÍńĽyžnݰHŻVmŮďśKkśë–u/+ću>ÎĘ׊#§é˜’ jtcZ\˝U÷l^˘ßm^,Iš_0*c{+­bĂąŰ˙ÓkˇŞęp’łúXŚĂ}ĆťИĚýǍ×o×Č5;WĐ Ť,8ň˙łwßńQŔ?{5˝š„ŢA:iţ¤÷.)˘`Ă"bÁ‚ €4Q¤"Jď %ô$$@IH%ÉĺĘŢ>\räR/ír!Ÿ÷ëuťÝŰ237;űÝŮYx)Mă&aÄcÝ#Ü×›ňSe9ÂS=çç!äˆÔ…#&Ă#ľ“DÓŘ<îĘr•é‰\OôqůŢś’N""""˛=cČŽi´:htz°‹LÉHŐé‘jGH5l܃$aUŘ9lx3ÇyEcyči¤ź×á(SbXĺ&x͡%jš˜NĨîT MŰN­h:ŃŽéTr ‰k…l—éŁrAÍ´ď×vöB9•#ŕ&Ńbžvžžš ÜLË OMDœNƒƒiĺ–îUrĽ†îŚä(0Śg‚źČóČPŔ€CzĎ!C I€`ĘižŒdNxŃŤ?ţç5Ţ*SÚČźU•Ňś9Ů<ŻJć€NŚG–ßJ+&Ý#m8 ’2'ó<Žr'Ôp4=YëAjhĘ&ƒ1DDDDe oT'ť'Š" ˘ 2A™L`‚Ř€$I00ŘÁ€˝™%‹:¸Č•>ąßńč&RD†Wij^D‚„oaÇŁ›V/+$%7ŸDفŤ7>ŠÓq: T2œŚmŰŔ4.KĎ uQĂŮß4ę A ËĄ×Ć¨ÇäZ/ŕ^jj8zB€€ŰIń@“ĹÓŰbşůÔÁóá­r†›R$Q‡€Ř{0BÂöˆíŰß{MÝ+ĂÇÁĺTŽx”š„SąšƒóXŤ . >ŽŰ {âjbdň(3Q •źpO R *<çX ľA%S#Ts!)7‘"ć=Đđ1áŠwQĹĄ:yöB’12'(5 ’ˇ’.›ç­ăÔ A‰ÇşGˆÖ=Ę´ЏžtM]ۢ…[Ôvj 'š3‚ńú„jó˝_:#{•5 ĆPŠa”$hRő$ ™ r™ 2… ršÂ% Fƒ˘d„A4B¨•ö[5$RQAĺ\¨eŠFŒ^ƒ Ő[CVß;‹€Řů^ÎO!'ŃŤB]´ô|ĺ•Î0JF„$ÇâßÇ!ćAƒo>‰Â_×Đͧ6œĺJ\ˆŔľ'‘˜P˝u–ĺĹęR°/ę6V2=§ý\ÜŹż)Ë|?‡Á°ĘMŕ¤P!(9<¸d~lőą˜Pč$Ý}ę ŽŤRENƄaKÄ5čňčU§OÁĆWĐŤB=ÔtňBUGc YŽ5ŚŔEî–ďeĽ˙ş[{ţ•Tž O;tÖwnŠzNĎăĄödéˇk Čą#]@üaÔsn _Ç:p–ťĂ éŽ ĹäóH0Ä”2%j;›Až™|1ŰĺÜIž Q‹şNMŕ˘p‡Î˜Š{Ú \{rFä˙Ö/­1…ƒ1D%I€Ţ`„C$‘$)íÖ´:=RuúR=°Ź]TrTJ8¨”PŤUpPĺÜëDk0Âş!R‹1Ł×B+‰PňVšKńř1č?Č!Ă­¤č-CgąíáMl{˜{š}‘ˇą/ňśĹggⲿćtěý<ÇśšŸ9‡sœž×2fŢ:˜ă´ĂŃÁ8\ŕtŐJ"őY{z¤5Ą‡ůëՔ~űQuuH0"B†”›%j86ŔsŐQŮĄZ†$çňi„7“/ćd˝Qm‘kóÜŽ0Ím„inş<‹Đ#Ő¨aEDDDDTÖÎØd_$<ъpubJŘŁ¤Těaüž(mŞ:¸z9}t3ĺž79–1îrŻ|/S#&#,5wSn Y|şühÝC\LTŁŞcMÔvj7EšŇ÷›YhˆˆˆˆĘ cČ.‚I’ @BŠ•=ąG )ó8+B ŢĽM†§ŇŠŔcÇPńHőˆŇ&ç<ݐG™ T‚őcǜŒ?ˆh]8$)ű  ^Ň"$ĺ&îŚÜByUE%ąÔ¤—NŇ"ÉŔ` QYÄ` ŮAĽAƒ*L ;t7:‚`aťŻ‰GW@*ýOÚ:Ž ˇć:O’A—ç<%üăĹ}M|žłĹëcPA]%ÇŕJfQZëĆň‘ !Z÷°TŐuń:öĚ""""*Ťřhk˛łB§Â(ńQÖöĆh”p÷ąśD{Äd”"ę’ˌą!ÉąHó~ ş^Ň"FUćÓ+F˝Ä§(•U ƐÝŃ€Ëa L;s14Šű ’Ĺé5I‰řD­’#I‰CœŢúAh5Ć$ÄęŁí&°gŰ䫏†Ć˜Ä˛CDDDT†1Cvu’ršÇcĄŐ‹L;ĄŐ‹8š\n‘Wö NŻÁÍ'QH˛˘W­$Q›O˘ňˆI§1&!R]ꢓ´ˆÔ†3CDDDD Ɛ}ŇK2l:uŸˇ+ŮI’°ůô}čŒöۋ!EÔ#0)÷S •Ä+nZIÄýÔ&E[ukRÎżs-˘uHc âŮ Ś‰Đ#AŒA´.‚ˇ&ŕKv&ýŠJ2™ aąZl?÷ĂŰ×Č:“Ę&$IÂśł“ …BiÎ#{ĽMF”6nJ5Üp–Ťŕ “C!“?ý–ЏوTوdQ‡DC*őEPH2$"ɐ™#Ô2'¨dj(ä‚Âę~íŠ% ’:ŁZc R–#""""˛Ŕ` ŮoáT(p6$‰)ˇńF÷pPą¸§Ě§ź+ößƝČd(•Ľë҉zm‘ ¨řĽ5 \QŮ8ße˝IďJĽw˘4˜ąá,zˇđEŰşŢL b&INFbËéPhEÁ"#p \"""""˘Bc0†ěRƀŒ\.‡A’aKŔ}ě˝p_jQ!EźaŠđ$@/ŠĐ§Hˆˆy‚?N†#Y/AŠTB.,ň„ˆˆˆˆˆˆ Á*A€JĽ„Ć`€ZМĄR*á v€Vo€Vo€Ng0˙­Ő‹ćż˙>˙2YŮŤÚh4âס;e›.é镬Ő[|ŽMiMDDDDDDŃÁ˛[{Ç<ýLÎ™•4ôz ŽŽŽËËf0FůN/Ae›DDDDDDT4řhk˛k™ƒ‚ áţădŤżŸj€ He8ý Ÿ^ Ä-cČîe ‚ '#­ţîýXmś==ĘNÚ.˝ˆ!"""""*z ĆPАgCbq;"1ĎďD&ę™$ZPĄT˝ŹÝ§‚Ś1DDDDDDŃÁ*5҃ …żşŔˆ„ç KĹŠ (Ş—Uŕ†˝Ľ‡5űPôb †ˆˆˆˆˆ¨řp_*UŇő•d üz(u+š˘ąŻ;Ü•ĐëED&¤ŕfxîÇĽB­VgůnYHŸt?ÎOz1CDDDDDTźŒĄR'=X vp@Čc-n? 7A€BĄ„ƒƒC–ůËj:I’AŹJ/bˆˆˆˆˆˆŠƒ1T*=˝eIžícŤTČ>-ärär5ӊˆˆˆˆˆ¨1CĽƒ L+"""""˘Ň„řŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6¤`ĺM¨Őj¨T*Čĺr(r‚`Óm$ ƒQĄÓé Őj!I3‡ĺƒĺ¤ €ťR„‹B„ŁĚ•L‚B›ĺ 0Q€Ć(C’AŽ˝"‹F™ŠXǰ|1™ÇŹ;ˆě ƒ1Dš@Éĺpvv†ƒƒÚ.ČJĽJĽ"m{\‘šŞErr2DQdf•ńňÁrbŸĺFxŤ đR‰YślƒJ’š8Ę%8ʍ(§4@pŁ“#ZŤ€FdGŮg˝n`ĂňĹüełî ˛/ ĆĺŔĹĹNNŽv˝j88¨‘’˘ARR3ĺƒĺĎTvĐĂG­`ŰŔ‹ľ$IB9Ľĺ”Di•ˆHU2ÓĘXÝŔ:†ĺ‹ůËXNJ˜ŁÜ_GĺĆRłÍ>j=\"îiTě%SëÖ1,_Ě_ć1ë"Űc‹‹(ĽR‰rĺÇŃŁÇr]g§N1gÎWŮ>Ý($$ďź3qqqšcd2žűîtěذaĂF,^üËمäd üüZ™ßœƒłłŠˇš‡‡;.\8Ű@<=CÚKL{3ź¤ ˙§،#Óߌc;łĘ˛ĚW%ó2jÔ+ć@ĚęŐkđĎ?Űáě쌏>ú-Z4Gűö/ M›6°Ť},ĚM–ü™0áuŒ=ĘüŢß˙UŔ˛eË+VČ÷2őz]Ú VâââŽ#GţĹôéÓ3g~…nÝş˘jŐŞ(WÎ...Đéô,'6ŕŽóŐH?¨Ö,d?Ź;¤d>›`j¤FÇ%ĂËĂ Ÿ,:‚ÚϕĂ[/ˇ@“Ú>3ŕyü˛őR–eunĺ IŚ-<ŒŕűqćĎËš9`Ö¤N¨ńœÖĚîgń˜x Ÿ Ĺ㎠ZqR-Iܕ"bu|˛Eaë†tÆ EÆ qęÔi´lŮ*•ŠçŃľk×PšreL™ň!öíŰoŃCĆÉÉ Ë—/E:ľ­^ϝ;A˜4ém$''[|ţŐWłŕăăC‡ăɓ$Ť–ŐźyS 4׎]ÇîÝ{x,˛łň5qâđöö†ŃhÄoż­ĆŠS§áć憷ޚ„ÚľkačĐ!Řźů/Üż˙ Ëw[´hŽ-šăÁƒpěÝťmg$?ţx*|}ŤB’$üóĎ6\źx •*UÂčŃŁŕââ‚éÓ§áäÉS9Ţ.íîîŽ3ŚCŠTBŁIŲeËŠ>}zŁGî¨Ył&Ţ{ď̚5;×í~ď˝ẃ˜Ă‡ŕ§Ÿ–°l1Cd’Ţś–‡‡Ŕ`0ŕ—_V™oIÚ°á´hŃ WŻžiA™‰?˙ź ˝{÷IJeËQŻ^],Zdşr•ą o^&MzăƍŹZľÚüyz0fßžýءo?d;ËIńqQX[bľJîčÚŚ:Œ’„ďWŸÂľ hth^n.jDD=Á”‡°áťčßš.bâ5Řy,CťÖGjbßÉÜdŮUŰĹÉT>ż˙%ŤˇÁËĂĂş7€(IŘź˙ŚŐűČ`Láë†téŮůó@­ZľĐ¤I¤Śjđ÷ßŰđöۓЧOo”/ˆ‡ćďôčŃuęÔĆącÇv/ď˛V͝:uDϞݱeËßćĎ˗÷BĺʕđďżGńŮg_X˝Í5kÖÄúőkńüóM ŒaS|ĺëھ눈ˆŔŁG‘ŘśműÓߎ‹ žúj&A@… r Ì?… Ć0í'ŤV}:uŹ_żK–,3ĎöěYÔŠSŕŕŕc0Śwď^ć[Ť/ţ ˙ýŕÜšó¨RĽ 7n„=şcѢŸĚ˝cŇĽ_ 4h †9műŻaÖŹŮęá²E Ć=Łäňü`>|=zt‡BĄŔ+݌ŔÖ­ĂĹĹC† $&&" ŕLŽYÇĐĄĂÍӚ4i‚Ÿ6,CBîbÔ¨Ń:t>účóvˇ+°Ž)ůňľyó_ďe2jŐŞ‰—_xüř1nܸY*~ĚăÂçqŰśmÍóíÚľŻ˝ćîÝťÁŰť<°nÝz;v<×őůůľ`şE1c.ý!7‚ hÓŚľůbP:ŁŃˆf͚™Ű°<ŔÔŠÓ <Ë1CôŹţůŤŕ;Ž/żœ…ńăÇâíˇ'áíˇ'™§œÁ˘EŚą@ň’~UáÚľë€îÝťAŻ×gŰĐ=ţoŁJ•ĘčÜšć͛‹ţýY}• żűH…Kť]ťvăľ×üąlŮÓ{˘wî4ő‚‰ŽŽĆ믿‘ďe–/ď… *˜˙~ü8ŚPóąœ•ĚúŤ|MëšňćČŮ{P*d˜ývg¸9›şŞŤ”rřVtÇó ăůřÁ€Pth^MëT(’í˝u÷1ŔËÝąXö‘u1ÍJ6­fϞ…Ž]ť0 rŕŔAŹXńłEÎÇÇÇ|‚[ŠR%ó˙é@TTTžHŔüľŸ<ŽQŁş9p2~üXóźĐ¸qc̝ű-žűî{‹6™UŹX™ĺi!!!YćËČĹĹsćźm.cÓ§Ď@aĆe٢gŸWIeš ů< (ĐŞUK‹KşúőëĄYłfy.ăŇ%ÓŘ=zt7ýe2téň?\šr5Űů˙‹˙„O>ů׎]‡ŤŤ+źźźŠmŠpi÷Ë/Ť°jŐoxôč=z„_5˝€Ÿ^†S§ţĂŃŁ‡ąxńBÔŹYÓŞeśmŰgΜĹŮłçŕççWčůXNаAŁhySÄA%ÇÜ÷_2bŇ]š‰ř'Z‹Ďî?25`˝=KĹ>˛n Ś™ý¤•\.GłfMŃž}űLÇŠŘşu3śn݌޽{|}}͟mÝş>>>ĚßRšÇ...ću´më‡iӦ㥗şâç@Ł1]Č{ď˝wŕŕŕăr]\\ K RRž~ćęę’eúL†—×Ó^yýúőeÝA”6ąˆňáĂßGż~}ĄP(°dÉ2źôR7ôď?'Nœ„ťť;ŚNýÝťwËuŃяqďŢ=tíÚršmÚ´†§§'.\¸˜íüJĽŽŽŽhܸ1ŞWŻ†Űˇo#""‚™a§ VŽüƒ Ĺ ACńË/ŤĚO41M= T*Zľj‰ß~űĹŞ€LťvmqęÔiœ:uíÚľ-ô|T2ŇoAquRÁËÝ)ËtŸrÎć[ŰzśŻ‰Ułú`ÉôžL8"˛Ú矉:Ăß .\¸ooo|đÁdóţčŮĎăŒăŔŹ^˝ǎ‡F“ŠS§NcŊLƒ‚7mú|ŽëHJzppČz!ŔÉéégŮ .“ÉeKfذĄhٲ3Ž( ĆOŽŹäęęŠúN:ß_Fƒččh|ţůćƒßđáĂr]Ž\.ÇącÇáááć͛Ąsç΀ӧłÓŰoOÂáðrĺr$''cîÜůůÚn>Đ6ĺjŐŞ…Ĺ‹âčŃĂ8uęż,˝`&N| íÚu@ˇn=ąsç.¨T*|đÁäÜ+i™ -[śŔ™3gpúôi´nÝ*Űű§­ĺ¤hň1œJL‚éŠä٘dźýíŢ,ŤîâWŻôlxąU5¸ť8ŔAmş›8:NS*ö‘uƒ˝oˇŃ|Ęš\Včýfcť´EwîaÌĎ͟Ľ÷Ć€ţýĄ]ťh׎~ýu ŔüYťvđđáCćo)Í㌷(ßž}Űâ{ÁÁ!íڜ…““ë"cˆ2œdŹżÚŮŮ2™Ě|ĚźcÚcbÓGŸĎ‰ Řż˙  UŤ–hÝş%BBîâîÝťŮÎżiÓfLœřŚM›Ž” –.]ŒúőëË>RÁÓŽV­ZXľj%Zľjiń”„ězÁ$%%aŃ"Ә2Ď?ß$×ĺžúę(¤¤h ÓéĄ×’’‚‘#Gx>–“˘Ľ3Zß}úr ŠŃÚĄyU$Ľč Ď&ĘQ>ív$•ŇňdůňČRąŹě[tôc$''Łm[? ţ2ěoŐkҤ‰€Đа2—fö^žœœœ°gĎ.ěÝť 3g~‘ĽÝbnđËäüM”‘<žrĺé`ďMšXś1š6mjţ;ăŰ2;sćLÚ2ečŃŁ‡EśOŸ^ć ÉŮłgł|÷Ÿś!44AAÁX˝zmZP§"Ţ˙=–-˘L8€/•i˘(BŠ´îg…ˆˆ‡¨\šÚˇC‡ÁŢ˝űŕě쌷ߞľÚ4ţĂšsy?éâΝ;¸{7;wB•*U°|yÎO։ˆxh~zŇsĎUÁťďoÍp IDATžƒöíŰăÖ­@Ť÷‘Šż||đÁd¨T*ěŘą‹ý„¤$S×]Lžü.úöíƒ>˜Œwß5ő„yňä‰9X“›qăĆB­Vaßž§Â?~Ö­[_ ůXNŠ–Ć(ƒŁÜşŽ#ĎÜEŻŽľĐŐŻœÎ>řę׸ Śř›óMg”$Ěa~[í#źn°'FŁ?ţ¸Ÿ|ňqžOŒîÜ 2?Ţś iFE_žRRRކ ˘GîHMMĹńă˙ÁĂĂcÇžfž/§'=ĺ6“}äńéÓG•*U0nÜÄÇÇăüů hÝş%ƍ¸wďnŢ4=}ŠGî˜1c:‚‚‚đÖ[ď"55ťwďÁ˜1ŻÁŐŐď˝÷.ÔjBCďĄwďžhܸąé˜vđbbbłloúĂ)`͚ľčÜšęÔŠ~ýúâčŃc8qâ$˃1D€N§ƒƒƒÚęFěěŮs°`Á|8::⣏>°xô4›ďÇÍˁđĆŇhsœŻcÇđńńłłştyÉĚÉĎ>Rń—&ML“Œŕi/˜ž}űdésůň•<ťßΘńüýGŁV-SݚťXłfmçc9)ZI9Ę) VÍ{ďa"ö AŻöľ0ăőöPČł9Ô ´kúœĹg{ţ ƃČ'Yם˘ƒłŁ 5Ťx"$<ÎŞm¨_˝< 6Q“Ż}¤‚× 9„ŹůŸŢű2sľpâÄ ÄÄ|„ .ZŒEQ4Łâ)_ß}÷=–,Ylž:ý–ętçΝĎňhätŚńęVáÁƒđBo3ŮG‹˘ˆ/żœ…… ˙ÎÎΘ:ő#‹y“““1sćWćöGŻ^= T*Ń AÔ­[WŽ\E||žţú[̞= ŽŽx˙}Ë[ŞCCCąpá˘<ˇŰ`0`ö쯹jŐJ( |ňÉ4Œ5‰‰‰,[D ĆPY§Őj¸Z=˙ĽK—ńĘ+ŻbôčWáç×>>>0  ť‡Ă‡`óćżŇ–™ˇýűMÁ˜ë×o <<ŽŽŮ?-ĽeËhٲŒF#"##ąző;v<ŸűHĹ]>Ň{¸d ĤˊĚĉoĺšÜ'NZuÉÚůXNŠV‚^ÁI°úžöŐŰŽŕ9W4ŠcݓJŽÜŽÄšW˛öďů0ôíXó>|)ßŰ}äL¨• zc {ěČ|sç~ƒŘXË Zăƍ””„ččhŚÇ OŸ>Í<ýĽ—ň—×éóűí\‹1@ÂĂĂ'''Lš4ŐŞůf{´uëß8yňTŚGůşs'ŁFůĂß˙U´k×>>>Đjľ š‹={öbűöć[Šł ĆäôćoéÍăë×o`̘ń;ö5´iÓˆ‹‹C@ŔŹ^˝ááOąmŰ4jԁˇ-z]=z ožůüý_E“&Mŕęę‚G"qäČŹ_˙‡šm“÷śßÁÚľë0nÜX”/S?ÂçŸɲE@°âs!ĂűôżeţOÉÓ^Š´— €€G‹­OćůňDĹÉÍÍ­ĐW8íUjŞ6_W¨ŕĺcůňĽ$ “&˝] éÖř嗟ѨQĂ\çšví&L˜ČrbCžN:Ť{ǀB.ØĎŁÇ 5!ËᑝFIž˙‚ąfLjböĽB†‘˝ŁSK_x¸ZW‡Ĺ&hp( ›܂hĚűöŞX˝÷RTĚä"ۀářńăđúëărŠRŃŤW_¤ŚŚňXÄś ó—íO–-zŚ$'kŕç×Ęü> ŕœMÇ=<ÜqáÂŮśâččŇ^bÚ˘á%eř?ý€›ńodú›Á"ŔôT /ŻrĎäžĹÄÄň^Űg¨|,[öš5k–ë<.\ÄŰożËrbCŽr#ęšä˙dľjE7tńŤŽŚu*Ŕ§œé)Qą)¸|;îf{k’­&9@#r̘˛vě่ĺ‹ůË?yMśSťv-âöíYe:uDpp ŞUŤ–íűœźúęHbűö­L`ś‹­Ýčç×’$! ŕ,ęÖ­cNŤć͛e™÷óĎg 88ě-˛í9ňtëÖŐüţ㏧ŕŘą#,źÄ` ‘˝š0a"†‰éÓg ..żţú3^ye†ŠÔŽ;1pŕ‹×ăǏłVČ2VÉö"&&;ś‡ŻŻŻĹçC‡FTTt‘Žëűďçă˙ë­Vk“}ť{7Á AC1}úg¨_żV­Z ™L†ƒÁĎŻ=Ž\šĘBPÄ<<ÜŃľëK8vě? <JĽŇŚëďÜšƎc~ĎźśOÆ ō7€AƒŮ2ű5BÆ ™Čl7‹_ě„Ó§,Že1115ę‹ůÔj5 ˆČȨ"]˙ȑ#Đ˝{Wf•*lůS™vîÜyœ;wűöíÇťďNßnƧŸNƒ““# |ůňX¸p.]:‡Ë—ĎcéŇĹć “&˝‰›7ŻÂŃŃ4oŻ^=ˆĄC‡”J%Ž^˝„?œlž‚1~üXlܸ7n\ÁŢ˝;ŃŹYÓˇmĐ ءo7nŢźŠƒ÷aĈ—-ŚżúęH8°7o^ĹĄCű1xđ ó4ggg̛÷Ž\š€sçNcذ!Ěě=ąĹŐŤ×,^ƒ<ěŧŸ~‚k×.aĐ P(˜2ĺCœ:ő._>_ý5jT7/+ŻéT4oăÁƒpŒ9Üü™ 1âe9byĽ-Ż<Éë÷řńÇSpňä1Ů_éž7ď;lŰśŐbz˙ţýpřđ~\ştţţŁŃŠSGěßż7n\Á˛e?™ë°ě¤ŚŚâęŐk¸rĺ*öî݇_]…jŐŞĄRĽŠYÖ_ľęsXšr9Ο?ƒÓ§Oŕ›oćŔŮŮ9Ë2ąeË&ěŘńÜÝÝX€˛1`Ŕˆ˘ˆ9sž†§§'şuëb1˝fÍذanܸ‚öâů矷˜^ľjU,[öΟ?ƒŤW/bůň%(Wޜůä&88ož97ŽÇ­[×°wďNóUűyóžĂ˜1ţ¨RĽ2‚ƒŃŤW‹źţŕƒÉ¸qă \\\ĚëwîÜ GˇřěŕÁĂčÝť<<Ü͟őéÓJĽóć–vyĽÇącGĐ A}s˝•ąWـýpňäq\šr3g~Á _Ä` ‘˝úý÷ prrBŤV­ V­ú5ÂoL¸qPŤV-ŹYł …ű÷€JĽBŰś~€:¤ý˙ UŤ–prrÄţýÍË=z-ú Æ˝ŁQÂ÷ß—ívtíÚóç={öbŕŔ!řűďđő׳1`@?@“&ńŢ{ďŕ×_WĄgϞ؜m;ž˙ţ[4hP0k֗čÓ§7ŚO˙ cÇžŽž={p\;U­š/\\\0zô9ň/>ýt^ye8ŚOŸ—_~‚ ŕ?ÖĂÉÉ ňœNEwR´cÇN :Ä|űP‡Śž2{ö쳘7Ż<)Žßcűöí0vě,^ź3f|‚×_‡ˇŢzo˝ő.ţ÷żáď?ÚŞĺT¨ŕƒž={ŕɓ'xü8&Ëô… ˙žž1bƎf͚˘gĎó888`ĺĘĺpqqÁkŻCBB" P6†ŒŁG!88—.]ĆË/łč­Zľ>>>;öu|ńĹLLšôŚĹ÷ß˙=¸ššÁß,FŽúőëaΜYóźůćXştştéŽ[ˇąlŮOđőőŜ9ß`ďŢ}EíŰwƑ#G-žˇiÓf(•Jôęő4oěóç/ ((ÝťwĂ÷ß‹őë˙@˙ţƒpôčqüňËĎšžRţ˝ôŇ˙Pž|yěۡťwďAíھџyóB-ó嗇!&&çΝÇîÝ{Ńż_888˜§ůĺç4hžřb&̇îÝťZÜF[šreŹ]űBCC1pŕP̛ˇÓŚMĹřńcďžűúőë‹?œŠ>}úCŤŐ™§ąÝřě´óĘg___TŤV GłŘŽĂ‡@’$sŔ FŽŽƒBŻ×›?Ë+íňJ!C†!>>'OžBűö‘¨XąÚ´iƒ÷ß˙k×ţŽŃŁGĄWŻžŹlˆÁ"{ đň*‡-šŁQŁFřęŤ98sć,Οż€/żœ…Úľká…Ú"88!!wÍW;thUŤVŁ}ű :th‡âÚľëćĺoܸ 'OžÂőë׹aèUŤfśăDřűżŠK—.ăÇ!0đ6–,Y†€€3=úUŔŐŤ×ĐŚÍ Ř´é/čőzÜťw‚  víÚPŠTčۡ7ÖŹY‡]ťvăęŐkř裏!—Ë™Á%dĚ‹{͗,Ydž–ššŠĎ?˙/^Bbb"^~y–,Y†˙=ŠŔŔۘ>ý3x{—Ç˙ţ× …"×éT´Á˜M›6ĂĂĂ˝{÷Lk@ŽŔšsçjq[ž×ďq͚u Æ ĄP(°gĎ>ăߏâîÝĐ\{K5hPß\Ož<?ż6˜<ůĂlo“...pqqAPP0z÷î‡-[žŽ;ĄT*ąlŮO¨UŤ&üýÇ 66–…'ŚŰC`űö€mŰv }űPĽJe@˖-PľjU̞ý5ÎŕÔŠÓX°ŕG‹e|ôŃTŒ台°0čőzDD˙|&ۍĎXť1Ż|~ńĹN CXX˜ĹvĽ¤¤`׎Ý9rA@ýúőĐźyslŢźĹbĐúźŇ.ŻôˆŽ~Œ‡áŃ#ÓËh4ôz=žürΜ9‹ůó >> 6`eCvCÁ$ z*ýjPLL *W65’ƒƒƒÍÓo€yÚÁƒ‡ĐĽËK¨^˝*VŹ€eËV`Ĉá¨_ż:vlY,?..ÎüˇF“j>™EŃbžĘ•+ă… ŸÝž}ÝťwřřxcöěYxá…vˆŒŒ2ŸĘĺ2xzz@ŠT"$$ÄüÝřřx‹u“mmßž+W> 61ńiρ¤¤$sţ—+ç GGG̘1ož9!K™Čk:Ap˙ţ?~/ż< ǎý‡.]^´iÓ-ćË+OŠë÷˜œœć§N§3OE1×nŘZ­C‡‡ŤŤ+6lX‡Ýť÷fšš™10uęGXťÖtuňĉ“˜3焆šÜ遪ˆˆÄÄ0““1cL=•–.] QÍ'9Æ ŏ?.B… !!wÍß ąXĆđáĂ0qâpuuEhh\]] —[ćóƒáN‚4ˆŽŽ†UŰř矛°xńBTŞT }úôBJJ vďŢhذ<==pÂ<ůňĺ-ś— ÇŰť<şty)íx#í˜.ǰaC0{ö×HNNÎ÷2ťuëOOOřűĆ¨Q#͟ϟ˙=ţţ{ʕó„Z­Ć;wĚÓbbb,ę§Ę•+ÁÍÍ §NˇČűôŕí’%Ëáŕŕˆ9sž‚—W9ܸq?üđ8vě8ۍĎPť1Ż|6ݢt,Űcéü‰!CŁM›ÖčŃŁîÝť‡S§N[Œ‰dMÚĺ–%$$Ŕ`0X;3ö´!b0†ČŽŒő ’““qöěy4jdäŽV­ZÔ­[Ç|âű÷ÄoźŽ~ýúâ̙łˆĹɓ§Đľk4hĐß}7Ż@ŰńđáCÔŹYÓâłşuë˜×űŢ{ď ^˝şčÔé%ÄĹĹĄrĺĘ8~üĹ´Uűě óçK—ţ„ĄCcѢŸĚW×ëÔŠű÷ď§ý]ËâDý›oćŕ믿ŪUŤsç~ƒ6mZg:N<í)ăááDEY7H恇‡ž=ťŁwď^Řž}4ů¤ÎÝÝcÌłřNN'@”齌ƎG"Íůšpáôë×7nĘ÷2‡  QѡďӓŢ×^#†ŁFęˆˆxQQľjUótWWWxxxdh< 0˘řô¤V’L˙?yňsçÎĂ̙_ĄjŐç0sćXşt1š5keqĚvcén7ć–Ď2™ ~~m°nÝúlˇíâĹK¸qă&zôč†îÝťaÝşőŇ P†íĎ+툞EźM‰Ę´V­Z˘uëVčŮł–,Y„áÇá믿…FŁÁ… qăĆM|ńĹgđókƒ6mZ㍯žDppNž< ¸t颢˘1~üX9ň/ŕȑ1fĚkxň$ gŹÚƒÁQѰaCxxx`ÝşőhŢź>ř`26l€ˇßž?ż6Xż~ӕľÚžžUQż~=‹Ç¤ęt:ěÜš ţţŻ˘_żžhҤ1ćÍűŽćR@Ż×cÝşő4h Ú´iwww 2›7o„››{žÓŠč>|?Ć´iSńĎ?˙dš•'Ż<Éďď1((˘(bʔáç×&źŽŚMŸ/śý[˝z-?ŽÁÔŠe™&—ËqüřżXşt1ęÔŠ ™LI’đäÉómŹĽĽ˝|}}ŃŻ__ôčŃ=Ëş č‡Aƒ I“Ćřż˙›ƒÁ€;w0őČ+_Ţ ­Zľ„ŤŤkśÇĄ-[ţưaCńüóM°qăfó´ľkG˝zu1tčxzz˘E‹ŘźůO´lْ\D†‚'NâŘą˙ĚedçÎ]¸~ýşy|Ąôú§eËpppČň>Ł * C‡öX¸pąEš›7oôz=^~y´Z-vďރącÇ k×.¨S§žýöks;řçŸmHIIÁ´iSPąbETŤV ˖-ÁčŃŁ˜מwď.´lŮÂü„°””‹e°ÝXúۍšĺłŸ_Čd˛\ˇý?ţÄkŻůĂŰŰý•őëÖ¤]^Qż~=4jԈƒôƒ1DĽÁʕ˱qăz|ýől¸¸¸`ěŘńć{äF#ƍ{7nÜŔŠKąrĺr„„ÜĹkŻ3_í‘$ ‡‚ŤŤ+>b>¨zx¸ăȑłt#͉(ŠXłf†Œ‰ßŔţý0eĘ4ôěŮ[śl A1cĆřűďm€~řWŽ\ĹÚľżaŊe8tč°Ĺňžüň+ěŘąsćĚÂŇĽ‹ąsç.ÂŞU+ń駟`ŢźĚóFFFá㏧ŁGnŘľkúôé…;˛–‹ĺËFż~}ąaĂď¨TŠ"Ţ|ó-ó7nÂ͛ˇđűďkЧOŻlˇuӌͨWŻ.nŢź…ëןŽ[ąwď>L›ö)€mŰśbúôiزekގˇQţ´lŮ5kÖ0ă3ú믭hÚôyÔŤW—/_A@Ŕ|űí´o˙B–÷–ÁÁ˙ücšĚřřx:tƒ›žŢ÷ůç3ąoß~,X07ŽÇ‰'Í=sÓ­oţţcQŠR%lܸK–,Bhh(ÖŹY˜={.]ş„eË~ÂΝŰŕää„×_ó™ ƔŐvcnůÜšs'œ5÷¤ËÎśmۑ’˘Á‡“u°xkŇ./‹/ŤŤ+ślů“O™¤RC°âs!ĂűôżeţOÉÓ^Š´— €€G‹­OÇÇ'0ľ‰ˆˆˆŠ˜Z­ĆWđ駟™O ‰ŹĽP(,NxϟŔúő°`ÁB&ĺéŔ˝Ř°áüöŰ&•*ÉÉřůľ2ż8ggÓŁç=<ÜqáÂŮśâččŇ^bÚ˘á%eř?ý>źŒ#Óߌú—Ů@DDDDTöź˙ţ{čŐŤžřb""bđŕđđđ°úÖ˘nÝř¨h˘‚b0†ˆˆˆˆ¨ úý÷ xîš*řńÇđôô@XXŚNý§O0qˆˆŠƒ1DDDDĽ˜VŤE­Ző˜”o?Ɣ)ӘDD%€řŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC ĆŮƒ1DDDDDDDD6Ä` ‘ 1CDDDDDDDdC [ʤz•JxâęÂÔ&""""""˘‹ç*ř˜ß‡z•CďrW7W\¸PüŰ`“`LXč=$ÄÇ3ljˆˆˆˆˆˆ¨D%Ľha~…”' w›loS""""""""˛!cˆˆˆˆˆˆˆˆlˆÁ""""""""b0†ˆˆˆˆˆˆˆ,Ućl IDATȆŒ!"""""""˛!cˆˆˆˆˆˆˆˆlˆÁ""""""""b0†ˆˆˆˆˆˆˆČ†Œ!"""""""˛!cˆˆˆˆˆˆˆˆlˆÁ""""""""b0†ˆˆˆˆˆˆˆČ†Œ!"""""""˛!cˆˆˆˆˆˆˆˆlˆÁ""""""""b0†ˆˆˆˆˆˆˆČ†Œ!"""""""˛!cˆˆˆˆˆˆˆˆlˆÁ""""""""b0†ˆˆˆˆˆˆˆČ†L"˘’#AĘös‚Ĺ´Ěďóúź 2.ËÚőĺôÂnWa—[”ŰbMz綎âJŁÂ–ƒâ*SÖîŻ-ĘtAö×eş¸ňÎVż5{Šlő[+Ę2]ő‘5۟ݲe]oÎieúL°h˜ĺ4=űmËi›˛ßלŚç'˙2okvëÎizú÷­ÝöŹŰ•žţ§ËÉë{ŮĽ`ʓ‚ŚUzžć–VٕĺźŇęQT,|ŤU3Ďv˙!*ú”ƒ$nnޏtă*ƒ1DDv×@Ë|Ÿ˝ô´f@2fŹěsŹ1˝1—Ţč!׎‘™çĎižŒÓóűž°ë,Č6ćwJKş”śź+HްLłLłL?űeZ Ȅ´“)­{˙Óĺ@$Azf21’ČäŞ×¨˝zĄQăĆpuu… “?ݤžŚŤé,Ńň3)SP kţfÎŻěʃ < Xžhf˙ݧßËţűůŻÇ,ŁtÖîCĆíxšČe;sŰ˙ŹëÎí{™×cž¤–Cţ垗RĆeŽżŮœ~o9 ŹýÝf—ˇ/sdÝ')ŰňcM“yýéyS}i™çČąüćç8”[úĺUo ‚€C‡ţE˙ţ˝ÍŸUö­‰Ž]^4I lŮţƒ1DDv„‘˛ţ­P*áâęŠÚuęŔ××*ľ*ˁۚF_N€ŒÓ26Zňłüœ——˙eXťüÜž“ŸíÍŠATŘĺç–îM—œÓÚ˛ĄTŘźł6?Š"݋:m‹*Ýsj¤UŢe™Î|˛Q\yWÔi[\y—]cźŕi[°ú#˙ËËýdť°ë˛E}TŘă€NŤCXX‚ďÜÁ“'O`ĐëMËJďóŒd$Hţ “ hÓś->úx*žŤę ľZ ™LV$啈JNŕí Ô¨YÓüžjŐçаQĂՏ Ć Í"#ČdPŤŐh޲%^ó 4hĐ*•ÚÔ0Ítľ ä68ˇŕEÉo[vWKlž%YśĄ$ÓNú`qĽ2óČŹ÷ż –5_ŸĺźĚ쯞"‡ułLgw…°ÄJ’Ý”ikňŽ$ŇĹ~ˇÍžň.­^2:ˇnÝÄ/+VâšsĐjľŒFËjĽ´Ç(¤§˙+• TŻYN™‚ÚuęŔŃщm!˘g„RŠ„JĽ˛xŻVŤmş ĆY× }ÚFKk¨ŠŐjôĐďN~žĺĘóJŮÉXi{:— ,űDe€ƒƒZˇńC͚ľđÓ˘EŘšm;R5˞7(˝˝c2ë%N.ÎčÖŁ;ŞVŤĆ@ 9cˆˆŹkĄĽŸ)‚é^Җ­[á÷ރWyo(JŚŠ(Š0 Чwý/%Ň1 … …ršź KAzŻ˝(!I+Á JpR pT ĽÇDD%,íç]žź7ޙ<#Âpę4 ĂÓ ĚłĐ;&m\7774nŇÄćWˉ¨l`0†ˆ(Ď&YÖ[7\\]1nÂë ÄP‘0HMM…VŤ…Ńh,•ű KťmĎÉÉ)˙˝d҆`ŇŒ8ŚÇš0-RtFTt—ŁC-ÔôV@Îh QÉ 3ô~Q(đňňÂŘ×Çăúľëˆ‹7_ŹH?n–ęącŇűJĽň˙Ů{Óç8Î;Ďóóü!ż~ëmJĹ2““Süň—żâüŘ8'Nœ¸­m—›xĆ‚ \q–ţŁÜ@†(-bŒpő 8Ž/›+&I’şąż4dG)ŐĚWÔŘĆň¤Ësş4˶֗ťTuçÜŞďöZk‰˘ß÷›ß{šßŢH\ŹÂSÇ'b˛ćÁjlyďt•Îůlč0Íś.îŤ[-_ľvI˙Bę5´źË5Ú˙i+ý\n wĎy¤y\¸Q¤16Vs [k)•JDQ´DXĐZăű>š\nI˘ŇŠ0 äíˇŢŇóÓÝBEźöÚkŒŒŒđĚ3ψWŒp›‰1–™ŮÖ­[ÇŢ˝1;;ǁÇóŸ—됈1‚ ×Y”ŠÇÂű~ ášO¤.Łřó˙÷/ČĺrüŤßűd~ŽČS_ţëÖőáyI’P­VŠVŤÍ.A4_;çšÂN’$cŇ*`+ÜŃn„Me2™UO4Vƒ.5™‰˘ĎóˆM”¤Y; `”Â:(U#*G¤%eOŸ>MWWWłmßv+ěÇRŠÄ?ýÓ?ńňË/Ł”â‹_ü"_úҗhoo_˛\š\ŚZ­AŕűţŸS˘("ŽcÂ0ü”šz„;ibU*•¨Ő"l˛ ô/ Ěfł—<†ÖŻ­řY­–†2 …%ŰQJ5Ĺ×ćuňV*u÷ˇß~›|Prʡçy#Iç“O>桇ćÝwßĺ­ˇŢâ˙đ9qâkÖŹáŕÁƒ>|˜Çß÷ń<—^z ­5;vě T.Ţ2×`cAî"D‹n$Żýę Μ9‹çyźţÚDQÄ믿ÁŮłgůŸ˙íŃÖÖĆää$ß˙ţ÷9sć ­­­ěÝť—7ß|“?üĂ?¤\.“$ arŕŔjľJ)Ž?Î3Ď~󧘓žüôSřžĎO~ňSÖ­ëăĉ|őŤ_ĽŤŤ ĽŐjľ)jTŤŐڈ4??Š‡dłŮćwçóůkz7Ű9ǏücŽ=ƟüɟP­Vůя~ÄťďžËă?Ţ4XgggůáČ{ď˝GGGßűŢ÷hiiiŠ3a6sełYŹľÄqŒďűMďŁl6ˋ/žHąXäńǧťť;ő֓Ó]ˋ/žČ+ŻźJ'M%Äó5_ůĘWřâżxÉu¤"ěřř8ů|žbąŘ[㋅‡ťy¸)ĽxňÉ'y뭡؞};ů|^Ąp[ß ń}c ĺr Ď󚥞{{{ٰacccőe*• ǎŁłł“JĽÂşuë8zôˆtڈ1‚ ‚pgłeËGĂ÷}††63:6ĆđđN>ó™‡Éd2Í|…BĎ}îslŰśóçϓ$ ÓÓÓ|ôŃGLLL°yóf^yĺ˘(bxx˜‘‘~üăłyóf|ßgvv–ţţ~Nœ8ÁÔÔ$}”pěŘ1†‡‡š˙ţűŻŠFÇ‹%Nž:͏ň3žđĽ§y¸s§kÝL•ňÜťÁçKŰBţŞľÖZŹMÚ*• ###üěg?ŁŻŻŢŢ^Ţzë×lßž c §OŸŚĽĽ…­[ˇň˙řlÝş•bąČđđ0ěÝť÷š‡źóÎ;|ď{ßcýúőXkš˙ţű9ţ<Ĺb‘ÖÖVœsĚĚĚ055Ĺ}÷ÝG&“avv–ßüć7ŒŽŽ˛fÍvěŘÁĄC‡˜žžŚ˝˝0 9yň$CCC?~ĎóčííennŽš_wďŢÍŢ˝{ĺĺ]<ązôŃGŮśmÖ.xšŁ›bĺĺŽĹFčÜěě,ß˙ţŁ­­•ŮŮYžţyzzzšË]Ô ä.đ†YŒďű c­ĺĺ—_ćů矗P%áśÁĂƍƒÄńcXk Ðçž{Žçž{Žééičěě$—Ëqß}÷ŃŐŐEoo/ÖZúűű™˜˜ §§‡ŽÎvÉ#bŒ ‚ ÜŮŹë_ÇúőýAŔŕĆAúÖ­c×đ0ša„’ {>ŸÇZËěě,GŽáÜšs”J%ÚÚÚH’„l6K&“Á÷}:DOOçϟ'›Í222B­---źňĘ+<đŔ×öGš…°Š¨Q)ÎŇ×z‚}†}{ŸdM{†ŹŻ8T_&Ž´Nx˙ŕ!~řa<ăÓRhĺ_ţĺžň•Żprä${ÝˡÇ8yň$ǎăßü›>Ž?Á“_ü‡ćđáŘż?ż˙ÝßGŤk?qĘĺrŒŃ××G­Vcjjꂜ…B;v022ŠS§Xťv-?üáéëëăüůóň˝ëűß~‡]ťvQŠV™Ÿ+ňށßđüóĎS‹jŕš\žŔyőŐ_°wď^9PîbΞ=ˇ~„łŽŽ‹(´†Ý{vÓŐŐuéCqQ¨d†tuuňâ‹/ňůĎžé5ˇšpĘť‰FˆÖŽ;Xˇn1Âm7~[Z[¸÷ŢÝXç0ZŁë7[ş×t5sŃĺr tuu ´Fmí­őmljnO1FAîH˝ˆĂ‡ŁľfëÖ­ôőőqöě9˛ŮšÜó€L&COO[ślarr’RŠÄ™3g˜˜˜Ŕó<˘(˘­­ąąó8çčîîfppƒây'Nœ@kMĽRA)(•ŠXk—ć…¸vć ]ŻJćŔ9Ú[ňźůć›ô|í‹2Ś>ůSœ9}šƒżyŸúEľ155Vœ˘ŁŁ“|žŔÔdú^ĽRĹZG{[ƒƒń<ŸżýŰżĽV܈6\ăę/O>ů$?řÁ8yň$•J…×_'žxb‰ÇĘüüů„o~ó›<řŕƒlßž#GްqăFzÖöbŒGKK 7n¤ŻŻBĄŔć͛ůÎwžĂččhę-SŠ'…Bg‘;ów1Î9^~ůe^xá’xĄ’’6đěłĎňĽ/}é’BŠçyc°ÖŇŮŮÉwżű]Â0¤VŤŃŇҒŻőŞJ‚ ‚ˆ1‚ ‚p×đЃPŤFh­xŕ{ikkgÝş>ÚŰ;0^šœśP(°gϞćDĚó<žzę)Źľlßž}ÉdŹŻŻŻ9ÁRJŃߟ ËEç\3OĚľž+îyĎëyz{zٲe ýýýôôôđĚ3ĎĐŇ҂á•fϞ= ďDŠ´­›7oÂ9^rˇ~hh­5<ňÖ&ő÷}}˝$‰ĺĽ—^"—ËńČ#\áBŠ´Ôďŕŕ ýýýÍś 6“Ł6–fűöíÍţokkcçΝő-ižöľŻaEĄ–”/衇šű- I@9†6oŻ…ťĽ_ůĘWxęŠ/c“†Z+<ßťěŘhTIŠŐjřžOww÷Ű_\ĄMA1FAÔĺŘľ{;‡w6'řJ)ZŰZQ* öAĽŰi„ő46Š”şlŇ݅őŽŽ‹ŰśšmĎ3Ď|uI›•RŹíéŽoŔb<…6Ţ*ˇëЊfě{m _ůęÓüÖWž\3(wÝöçb‚ úOk}YAȰđ€r˜ú6”‚t—™+G{ Ð ¸°´üjŽI­5š\­5ľz˛ěĆv1—+-‚ \"Ć‚ ÂÍž{ZkŹľŸ˜łŞJFË']Ť _‹‰üâ0†Őloľť+ÍUqąeo”Xąš}đi۲|’-ŸćYNĂ.—Ëáű>Q5ĹĎóđ}_„A„km˙I‚ Â͝DyžG&“ĄRŠ\RšŐG†xž'" ܆Ç/¤iK<ťäxA¸>ˆ#‚ 7‘ĆÝçl6ŰŹvÔ(!{;L‚œsh­/¸{~ť´_„ĽÇ3ˆ#‚p#1FAn" ‰XžďßvŐJOŢ$„FAauˆ#‚ 7‘K݉žTRÝ[MěXœX„AA„K#bŒ ‚ ܢÜ.˘†jVřFAa5HZtAA>5"Ŕ‚ ‚ \9"Ć‚ ‚ ‚ ‚ Ü@DŒAáš!ž2‚ ‚ —GrĆ‚ ‚p͸TŇaAî ĆÇÇQJřF:CáS"bŒ ‚ ‚ Ť&Š"|/#!‚đ)‘0%AAAA„ˆxĆ‚ ÜD$¤CA¸YHŽ'A„›‡ˆ1‚ 7 k-ÖZ’$†(ŁÔÂëkůÂ÷.m]_ßĺoĆwJżÜžý"űNúEöÝ-Ů/Ćó0ZŁ´8Ę ‚ Ü DŒA¸Á¸8ĆV*päĚáØŃQ° …Â-yžŔ–^ô9PŹj˝ËÚč,čW˛˝ĺË]ěůJÚŃü}WÓçpji?-ßÖŞÚłx;Ë÷ă•üŽU´çŠÚĹʓ˛+íëúJÍś]m{Žf,|Ú}~Ůö,ęű+Óע=—ÚΕĂ+ÝWkǕloń2WÓWkǕno5űüŚŽbŸ_‹í­¸žR¸ž^’Ă¨Ą!t&ƒňdZ ‚ bŒ *ÄXK<7‡úĺ/đŢ|5?Ö^ýOAAX-JáFFP‡ŢÇ>ň(vßç0­­Š÷ŒpçŮKl EăŽŔMŰÝnQSá.FÄA„b÷*l’W*đŢü×~ĺ˛1wú~Ż?Źt… ˇÖě•$čbýúkT[Zq?ŒÉd$léŽŰŐŽţhŘ# ^‘‹Kš,Ît%ůěV“whůöœ[Đa$o‘p7#bŒ 2†ŹĹNMá> ވ0wËž—.áÖź0MPóóx"Ú˛ÝÓ#bĚH”8Ś‹1cł-CgާŐ\ŠkŠsîS‹'qbŠD–s3Î:: í9ϤăMDánDÄA„bó:\’ĚĚž;+BĚݲ߼ A¸UQ`q(çĐçΑĚĚ`şşPĆČÄřN˛=œžŹňßŢ-stÜxŽŻ ‡<˛) ZáV'`L*ĎÔb‹ŻëˆjŘ›¤šíŒďĄLúđŒÂ:p <­H’4_“ŻSH)…§ĄĹĚU,żř¨Ä/%$vö*žýP ­9Łeź w'"Ć‚ Ü ŹľŘ(‚JE:CA¸É(+T*بvEá)Âmb{8Çż*rčléÍpv&ćՏ+äLÄ٢á3CfJ1'&÷o9;]ćÜlĚýë|ΞbnäAyŽ(śÄĆĂäó[ťéîëdcO–÷NGô´(Ö´ź{˛ĘŚNM!빤ʎƒďiމUĚ?ŒŘܛ%JŕGk<:Xb熌žü”Ô9‡ľvÉuÎĄľĆłâň‡Öş)0.ߤ^9şîśx˝Ĺď Âő@ÄA„‰“1‚ ­vmr"ÄÜqťta&q„ł†$qX›†MGľ˜8ňŔŞŐ q \˘)NM1óń9Nžs;>Cd5ó: fBj&$2Ö/“KŹ-l \Şbł>Îj˘j—’ŘŐj¸Ä#vš8ޘg-ÎAâ ą`ťę@ŠjľĘšsç8{ö,Q …b`p€ xsÍÍÍqöěY<ĎŁżżŸL&ƒľ–ééiŢxă şşşčííe~~žîînşşş0ĆE###8p€‡zˆÁÁALÂuCÄAAA„; ç Çă[BÎMĎqf<Áژű=v śą=ŽÉç:ň>ë[KčŮq֍ü†ŕČQl ‘ˆuHÍST”ĄŚ=ŞÖ#‰5ĽÓó”‚ivoiĄˇ+K6ôřě=Y|ßÇ3Š'śBxFӚR¤9;3Ă{çŠXŤŘŐłžŤŤ.˘¤Ő.EEźđ‹źüŇË(­ÉfłŕŕŤ_ý*=k{ĐZăHCŤćfçůł?űĎ ďÜÉ׿ńőtâëyÄqÂG}ĚŚM1ĺr…żűŰżăţőż&fÉd3X똚œćƒ>dp`#SS3>|˜{îŮž=ťń;‡‡Q(6ŇÚŇFľRcnnž™é~ţó_°qăFÖŻ_O.Ÿçž-[ŠTŞźüăŸňĆŻłgĎn:;;1F¸fˆ#‚ ‚ ‚p‡áœ#Iâ¸F%śžiŁŁ-"‰J‹e”ŇÇčŠ ˘Ÿü3œëጏ §Vieˆ•G¤|Ş: ŞĘÎăŏJÉßÜăQ šx{ť8pXÇébHd›](ň1:\’óĺŇárŽ(ŞqâÄ jľš\–L&Ëěě,ţçΞ}űxď˝÷Řłg6l Z­ňú믳˙~*Ő*>đ_˙ú×y饗ؾ};ƒƒƒ‹Eţâ/ţ­ĺr…gŸ}–|>Ď /źŔž}ű8wî,QTăěŮłŒł~ýzXÂ5Cd=AAA„;„FZk-ĽŇ<ĽůYBĘ<¸ŽJ{&&Ž•¨”‹TJsD§ăýô‡řǏ˘ŞŐ´Üů˛Z€‹E™Xj: ęĽ9dć#ĹO?rüÍţ*§Ć‹‹ó”Ks”Kó”ËséŁ4OšńÉđ…M1íYˇ @ŞT„aáßU„Ď~óYž~úi’$ĄqŔů‡ď{8ç0ưsx'•Jß÷ůw˙îĂ9‡ďű<˙üó|ík_#“Éđ§úż’$­<ţýż˙?Ň$ÇID&“Á÷}††6óŕƒbŒ!›ÍňG˙Óa­% SŽ)"Ć‚ Âľ˜ŠšúƒTˆąÖbëÖ­9ąĹ‰#ˇ×I .ś,1ŠgŒQ* {XxWŒ×ó<ňy|.ťd•ŽŁ|>Á{a’Ë喆BšĹŠ]QRJŃÚÚşäA¸Vˆ#‚ W5S8Ň*Ö9,ąsDIB $(’Ś öň —7Cˆ‹Œ Ün“`ĽĐuÁĹ8…xZa´BĄŃ ”Sˆ›ŒpÝĆŕ’+ ´g-_ÚR"çCPš&¨˘<‡ó ]ą˜8ĆKb<፞öńm•81„JcŃŘXÁDLrJÓŞTŚ.úÚ)”s”‚€*Š_œ0~kkD[& YÚÝĄpő0%…rjy—KW\•wŮBʒ/VŤ_OŽ"Ć‚ ÂUZźÎAâ,‰łTŞ6¸ţőC›1…–TtiŘrőťç &ňĽHCLφ‡ÍĹ*N,ĽŒ5Ť]÷RË^Ëu/ÖÎ+ůžů]Wđ}‹öő•÷˙§Ůw‹?żšßy˝ű“žk5ýrą‰ÓÍÓ+żŻÂÎÍQ9ň úěYÂ$Á‹Gš0C‹#\WܒÓQąŚČx “9ŒCy ʁá ą‹đm ßzř‰G  ‰őHľŕŠ1ö¸%3â‚Řtăşî…ŁRQĘxŤšŸ~ě‘ `ß`D{ÖQ‹Ö)r~ŇlžÜoDŒAáĘMÝz’ÄÄYjÎRv ÷ěŚí™oŕľw€ç§bŠr IeëŽb&ž1×aZ˛X$Y.˜\é˙+0rU€EC,ŠŠMŽ3ű˙@é7ĽĄî;#áJ aŚ˘ůŐH†Ç+´Ůt„ *pč’ĐA”ŕE5ë[ÄzŘÄ`•Ië)UŞ‡Ę˜Pˇ¤‘=ő|1Ú)t]”‡VYJJQtŠźďS‹áŮá‡Ç=j‰âń„@ťÔłô&ŽńGœÔ„›„ˆ1‚ ‚pUÜk扉Đ$ýëé|öˇńşşÁ™˜ßdŹsT*â(ÂÚ +v8ˇ*˙¤ŐOŔëłpŁ5A†a:”ş@ŒîÄóiu˜ć€PhĎ'ě]Gűo˙ç'ڍž:…ÁA}"ÚČăDČŽ#š„Żm+‡+ćIÂ,&˜C.ÍhÄ›DÄşVb4‰…¸TŚt´ˆ™ÖřäQƁKKa+çФyc¸P.Ŕ…U4G'ĽšâţŢž†@ł?iíŻĹŽb͒4Gl!ë§!Ö9j x: źôAިYË\Ĺňćń ďŸIčmŐܡÁgSˇOŢ7\*nęJüW¸:\䪢–mXŽ"Ć‚ ‚pىWš¸7MŇὝ0í(ĎkޡÖ6+=7–$ŽŠVŤőęK˜ĆÄ7Iâ8Ć9‡çyWľŸ”RЧT]€ń|Ďóšó%ăÇ9â8&I|ßGkÝ\qe‚~“sçšăÇ9‡ÖşšŻVZŽąOľÖřž1ĺyxídwď$>}*Mň Ídż‚p˝‰řYC_‹% ť¨ĺ×ă'ĐaŒŞ9ˆ*˛čHáUk‰&qŠ(N`fŠřt 5éđUgbp6}`Óđ$\úš4TIŰFȒنTkŽR Ҥš}- WrŚMě?ѕ×td5ľÄŇŰę1_sB˜­XBŁąr˘X…–ŒÂ:˜)[ÚsŠ\şŔT"ÇĎ>¨ńëă5ë˜,)NM'üÎýš{ÖčUK*Wn1\NâFÄAAVo[)WcŔj…×ݙ 1‹¨VŤŒŽŽ200 e1ođ$ş11ž”×ÁÄÄ'Ož$IÚÚÚ"IŞŐ*Ćx8gÉçóŤE{ÚXkWôĆYźěéÓ§y÷Ýwyä‘GXťv-ĆJĽ333´śśâœŁĽĽEvć͜ÄĆ1GŽĄVŤáœŁ˝˝ŢŢ^‚ hމ†S.—›Ë)Ľ‚ -—ëů(ăc:ť¨éôNžkŚđ9F¸ţĚŐ ΅ä‚*Ů\âšÇÉÎ}‚ŠfPąƒ$AE(Lě’*ľZDetšĘČ,śâatgbŹKKK+×`ę¢sh :uüJEkńđđcEœŔąYÄ)Öä´NŐJĄ—Š&ĽšĽ-Ł8p:˘%ŁřpÔ˛ąKsl<ڧĹ0]JĽÎŠrĂ!Ńqôźĺą!­gfŽœŠÄó÷ŹńxçTĚéé„-k<Žkú‹ňĘ]pŁ@1FA„KZU ë4ˆiZZÖZŞŐ*ăăăźńĆ´śś’Ďç ĂPşî1Ë=Lš6ď˘ tľZĺĉĚÎ΢”bjjŠöövjľ¤łłk-(ĽČd2M/šuë֑ÍfWÜörafĽö•Ëe:Ä_˙ő_ÓÖÖFKK ů|ýű÷377GGG“““lŰś ­5ĺr™ ‚€ůůyÂ0$ŽcÚŰŰYłf͊ŢÂŐc­eff†bąŘôŒYłfÍËEQD­Vă“O>Ą\.ăy;věŔó<<ă”N}$dM¸Átfcžś-NŤ)C5ŰĎůÁ߼uäřöĘú$6!˛Uj.a~ŚĚĚä,ľ™í4~ lę ăphş.(6Kh;×e–{δ%Z3†‡ 5ŒŚYMiľaJŠŞâxdcŔ/?ŠâkĂ菣żMóÁلîźbŚäě„ÄÂń‰Sż÷‘XhÍčzž&0Ęb´Ł-Łî3>—¤íP w}Ľ˜KjŻrţ1FA„O!É,<&YI’pâÄ 8ŔÁƒÉfłěŮł‡7J§]kűV-Lp/ ńYŮýŰŐóÉDQÄúőë ‚€ńńqĆÇÇŃZ366ĆącÇhmmellŒîînÂ0äüůó žńoÍf?ľXtćĚNžĐě\çc- ÷)櫎=ý>yM!„É˘ŁˇUÓ]€8q´ç4óUKKF7#E{[5[ÖxźwŞĘĄs1qëŰ=ÖľńSDŒA„ŰY”i^d=ĄĄ!Z[[‰˘ˆ/|á d2é¨ Ě,eVΝŤ”˘P( ”b||œŽŽFFFxâ‰'˜ŸŸgǎœ9s†L&ƒ1†žž´Ö8çČfłÍu?m{zzhiiáÉ'Ÿ¤˝˝ŽŽŽŚ7UEtttÉdXťv çΝc~~ž­[ˇrúôiślŮB&“Ą\.Çąěôë(Ä(Ľđ< pÎáűţű])ŐôLŠ˘ˆçž{Ž(ŠĐJ<–„›O)Ň|2áѝ‹ÉůŁNg‰Ű 1ü#˙;ÎN’X‹˛ “ř8 Niœv -j(;t’žWŽéą˘eQX´KPÎŚ–P ŠýŒ†łó†jŹXßcÔęC”|ŁŘ˛ÖÇhęö°nAfWó<Šuí­šT|1 ˘Ä`ôBÚŽ\ ůňސÖŢ;łś ydłĎ†]÷‹šF |/ąp#١œDŒAá1+M¸}ß§ŁŁƒ‡~xŐyG„ŤŸCCCÍďn|n¤r×uA)…1†­[ˇR­Vhii!‚ – ‚€(ŠnŽCß÷ńü´ź˝ťƒüaż_ĆÜíCg. Sň‰N:‹+ oúSĚÉ˙ˆQ˘´NËŻk‡R:ővQĽ˘´ tTdQ6Aš…#"­¤ÔQ \úĆ)Z[|6ôűhĺx°Ż–Š$ZĽáMŤ>SaE‘ŽŤ—­ëęŠIU˘ôšž^°ěK´†|hřüÖ,ŸÝ’.ăkĐZ]˛’ŽŐ•˘żŒbăVq}DŒAáÉdŘşuŤ^×Y„YnÜ6”‡0­D>Ÿg׎]‹ uݜ„Ż$đŹFčil§áIłŇňZk:::řć7żš¤­aŽ8Ům´cĽœC2śŽŁąěy 4÷A#lyŸcČĺrÔj5Źľčzyó4_Ě 3ąŰybßٙ&,.e€Ü&”jšĂç}śv×h ݂¨ 4č IëƒĐ˙?`쟡ŐžŠë‚ŒIÓŠşĄ@Í% ‰­ËŒ\R/ëŢČ“ŠžV ?ÚCžEƒƒăÓ‘…­]ŢžśÔ2qć‚ĎÔĘ Ż´ŹQ`ŽŚWąü’ Öjńyaľj bŒ ‚ ŤłÇĸşa‚Ěňžö<L&CE7,ijCT ‚ŕ˛++ĺyšX9kG7ŐĺăI˝Ľ<ĎkŽE•ĆNÜqIbÄCˇ ľD3^Ô ś+\¸l@* &OŇţ8ÎkĹ;úbô(JǨzi$Ľ h•Š4XÔźƒ„EL=ŒKP€o íĂ]toĚŕi&™ŮŞ˘–¨zl{u‡Ćr”ë}œŠŤ]uYłE^8Žńي˘Œd™şS1FA„;f‚Ř˜/ÎőĄľ& Ăz™éë;\< —ęFw b ěwáVŁ#óĺ{b´}ąái˛ŘÂ.jƒ˙ ţČ˙…śG@ŸFDn]U˛>šđŠĆŠ]=5|ý)m‹fůÂ4ęFĺcR€kxźŠ…w‹n°ŕűâę"QúXégŞzhW=rý­´U3ôjIąmw›˜cÂŞ1FAX2‘źÔ˙ˇßäHöŠpcǃ1‚ ܊X§ˆĂ^ Ę+`[f.qäG˙ OĂPK=c…*5ţWĘÁœƒDĄL€ëĎSxî^ň÷tăgź%çĹŘ6ô„FśuĽ?˘W‹°ŐeíBŕĎ•:şb hcŔ3h߃ŔĂ ZŐŖş ă‘ƒr-ĄZsDʧíŤWĄr ĄĽ~ó€´,¸§žŻÉřšŹŻŇJPKźeä:s§ bŒ ‚p)ŤLş@áŞ'ÂkíUQI¸˝hĎ$<ą)a‰SÇĹŽüJá­ÔZb&ś´˙řî4ZY”ą bPŽž¤(­ َô>˙ŮĄ d 9ŒYc´‚]kŁf)ꦕáVik8‡›-ăfçqŐlšsĆÝ@SĹÖ{ĎzUČ Ú 4ĘݧrJ9qŒÍ&ĚT’„%ib.›ăŚ.Ö(,ĄŻXS0´ç žFî0݁ˆ#‚ Źdď¤FEÝP°Ö.M*ç.óÜŘHă˝ oĺ÷~aC.\wĽĎëˤąěşšźx*‚psϧŽjľJTŤ.ş}/7–éŠć­ÓYčŤŇ™‹/ž7Ś>fľ1řŮV’ö‡-“˙Ÿ“ƒ2͐%´‚LHźŚˇí1‚#סŽ0›ÁoŠu[ÂÁ{Ł!ľDq__Ő㍔]… âp•vr’8bœK]m’eęn' đLĂxÁEIj F_‹#:}Š’ŮFT‡AiS8Ëč\Â\ّÔC¨Ś‹–ĂçbŹ…š…Ąn  ałÖA”Řş‰ŁĐ*ő†!rœąd|E.HßDŒAîx!&}NœĽV,c犨$šzűĺzŰJáÂżľ€ő¤~r3I„›K’$DQ´Bn ÖA-ç,ŐŘ%ŠĐťt~8ĽŔŸLžçbVŐhý{L4چö<Ľ*ސÁ+˜ Ýčő]Š=P‰°ŸĹyÓہ*dšƒ´4ˇIo޸¸.ÚÔU*WçRFá,P­A5†ÎĘč4)q¸b՚ĂisP3e›†ƒŐťř—GjäE[V“T‡ĎĹŹk3x˘ÄqfÚrj:ŚŻŐprÚ˛ĄĂcC‡F+°‰cl.aC‡‡62–EŒAîA&5–*3sŘŃ ¨TQÖŢú W ç*•*Źí"‚zR=dA„ť“؉iŇç-Śⳃ°śpÉKiý9­H—o]K-|Šů֝ŘňYâę<6QÄś€ ťńňÝtĺó„™Ě’°¤%ZŠƒń˘âýłŠFіŃlé´4łÔ^Î.‰b¨Tq.-Šu¸‰9ě;Gq3ĽÔCG)ěČ8ᡣ TŞÇl]‡›+cOO ×wcĎNŚaN•řčkˆß9†Ę˜Ą>Ül‰äĚzM+x;9Ÿśáô$ŢÓ÷Ą Ůf“]œŕj1Ę7$&‹›,öS”jŽ{×űŹk÷8?—př\„u…a˛˜đË#Uœsd<Ĺ|Ĺr~>a]›Ć7ŠlTŠAbŠ˙/ˆ#‚ ÜÉJ Î9˘Z ;>Ĺ2jy¸Đâç[ ˝ áJ•XÜÄ ĺlˆßю2Śń‘¤ŔAîŽK:đá¸ćŸ?ĘВóůőل(Šňôք(Qäü´ uŠŚČç•H‘ ,Ö)Ş1ä|EMľP ˇ’Ém ŠZ Y_QsĆóĐžf6Ňx ĆQŠ4žvĆQŒ4sřÇ<ŠI€żz7âß>féZílÔĽŒŞ‡P+­P-YTg nžÖ˘Úň˜=ƒŠ0c>ş§řĐ)toŽŁťŰpÓ%¨F˜Ą^ěůYÜt •X”ď“:Ęámě!>tşZ0›{ \K“őޅśDÝq@-qŤţ9qby˙tĚÚ|tŢŃjJáâ3 űP|ęDŒAîĂ Őr [0Ëó˛ř>*B‚1Š4Î^¨z,Î#łœ‹~ćHË5,˙l‘Şb-nn*•cȁJ’™"ś˝œŽßxS˘Ĺ‚ wJáP5 4ý!Ž˜(Ő87o81ĺóđú2łUÍń)Ÿűú*œ/Ê{z+ŒLŠ‘fxMÄŃéŁ`K§ÇŃIśŒ#&|4°ž5FË{Ł[ťbBĎą˙lŔžžˆJ oŸńéČ$œžŐěđ¨ĆŠCń٪˘+żĘ+łÖŕ\œ¤Ő›HĹďÁ!bŁqł%ĚîAĚŚžÔFP. CŇ:őpq¤áE“sÍMÚůşíŕ›ÔSŚTEuˇ@šŠšGwäqžĄŸć„qÓÍbHi˙ÖZ7Í™ŹŻ˜­,UOb çf,Óĺˆr䈒´Š’EŃݢ93íĐ*MďúŠŔcINŸŐ$]DŒAî IF[{a]ĎCoÄűᅨ޵ź+źŒ,żásá  +j#Ľ2ń_ý ÉĎ^ÂÍĎCҸäę>˛'ݏW띶ŘÍźńÚI‡ ‚ ÜâúKZ^Ľ°’IJĽŒZŽŻ26›đ@ôˇĆôb˛ž%ç[:2 ßąž-bm!T6uÄÄVxŽ­]ցoĂkc”J=`öôÖ0Ęákx°Ż†oFÁgÖU ˝ôőŢ ŽŮ Ź-(ŽŒĽŰ´‰Łԯ卸´(Ďŕ2!Şš€KRąĹhT'~W;_AˇçSϕşĄ ظŁ@…~ë'¨ľm$œ†Ö,şż´F…>f[?Ş#Ÿć‰’4°VéşÖbśöŁŒŠ—äŽ—Ľö<đŇ|1FAg^s~ޒ,ş^ÖbÇŁ1;ű '§,ĄQ(ĽđâŢ ť×ĂLْőSárd…‘XkcA„ť˜ŔGmĆű˝oa¸|˙ć†*9 ńžűmČdH~ř#ÜÜÜjí:a‘řbU)­őńţĎľÖŇa‚ ˇ ľZ•óăăléč䚝–÷ÇbvvÁŢ y!œ"Vgţ°ţÚ÷\˝X3xžkúĽz~ýľ‚źďšŰČ 1ZôÂëVőż3ńÖIKd{Ö%äL•RŃŇÖÚ„—ţ1F§‰rKŐ´$QCěP ˛:ôš D”§Ą=×ôŽ­_ôP‰Ĺl[my”oŔ:ĚîATWçTŕąÄýEŠTiiÍâęšiTÝ#FˇdęËŤşˆ˘čÎ&Š q= đł÷fńÂÓ°­×áiU[ę!W@k&]?04űV+đ˘§Ĺ["Î"Ć‚ w JŃčńžó-Ěý÷B˜še|fU[+Ţó߼HţáÇ0=ƒČ1ŤgjjŠC‡1::F ďfý†őő*ćéNŽă˜ˇ÷żÍđđ.ňů\ZEBŠúŁ^ŠsGA¸—íÔ;Ć:ÇěĚ,aŕ1Ô2Oő ”K—K¤v-?OÝ`;š h 9_ӑ3„ž„)ÝŠˆ#‚ ŹÂĘ`ö=†ŮűđoąK‡1¨Öźg~ wü$ÉĎ•†q;1^V×}† xýľ×ů⟤X,ńĘËŻ†!÷Üs'Nœ`bbœýűß!Ÿ+055@ww7Ĺb‘Ą-›8uęŰśm#—ˉ #‚p‹ 3´ˇw23=Íüü,Ĺbé&…›j!Ä ĐƐËć1~Ȇ aŘř/żŹ.ŸAg}\5•jőÍŢ˝{™ŸŸgzjšóçĎóîťءﳟůć|!z‚ŃŃQ†‡‡Ľ3áBľdş%×yĚ)E†lÝş•łgNáy!APÂŮF葻d ˇ+ý˙JŽm4ů\5=˝ôőőŁľˇ¤PăĹô"Gşă´AeuZL`­P×㈎—äžŘˇ+­ńtVú=î˛-[œ´7őF•1}'"bŒ ‚pYX‹‹ă´˘Ŕ&ٕ×b]ľô=k!I°V“Ž­5žďăžç1??O{{;ĺr™ÉÉ ÖŻ_ďűŒœadd„ůůYZZZČç źúęŤ|îsŸ# CéLA¸žďŁpTĽ+„„R c …BŹíé#Žâ‹ˆ Ľ™Ż´î`ÓXě¸á.Ô.Ÿ+@)ń š\ĎóĐzAÚš”çNs)ľTšu÷ÁڍŽx_ w&"Ć‚ —6´œ#Ž#ĆNžaâ÷ęŢ2Şi„-~}Ąšąôł•Ö[ɨS‹îŮ­´ ˇÄÍWĄœĹŤTX;>A—ě˛%mł˛VHjźďű›7o¤Đ’ăńĎîĺ?˙…–Ÿyä‹ű <ϧľľ•ÁÁÁÔHđ<ślŮB’$Xkń<G÷>J’$Ôj5Ž9Âç?˙yÚÚڤÅŤŤ+Í;ç@^ä 7ĺ[íńt˝sĘ,o‡x}w3"Ć‚ K ąe“ëq}înÁé„|kąI";p#wšçÁrŁŰC6›[ň˙ĺ¨VŤ<đŔtuu‘É~@Ű IDATdnˆ/2y„[ď˜ů4Ű_|]Z|ó@î&DŒAVi9ĽnÄîJÜ띪וäňŐÝ"wœĺë^l–nZlšŐʋKS§˙'uCxqÜţĹś•>G__oÝ˝ÜÖóő¸eëɤY¸Ô˜LÇKc"ś0LŐ céÂ1بź"⌠\żëōھÇÂ݈ˆ1‚ Â53Ž´nN÷qNaíÂÄJ鋬ět}vUŸ€á‹Ň4cÉ3ç.[ĹRXÜľ+xÄ,ĎÚç,Ćt}~Ú;”Zk1¨…+Ÿ ÂĘâחĂZ[Ďe•ÔÇŹŒ9A¸VÇäÍČg$^1Â݊ˆ1‚ ÂUăű>7đŰżý,;wnăŘńüíß|ŸĂ‡>Ä:Gkk ÝkşĐËcĹľ˘ŻŻ›|! &&Ś9ôţŠĹš\†Ď}n_ýęÓ ŕĽ_ág?{šš˘xŔʊ‹' mx"X›z´ŁI’„ŠŠ)Ęĺ2ľZ$I.™gŔZŰoŰěîľUDaU“/Ľß w—ÍsÔŔÓLđÇ­Y2Ař”W[ź:‘ Üiˆ#‚ \5íím<óĚWyđĄűȄ>­mťH’„łg˙ÓÓÓ(ƨzůĘ´J/CAŕœĂ÷}´ÖhĽŘ˛eˆď|ç[´ľˇ€s|ë[Ď12r’ýo q—Ë Ó¨ŔtWOw/:Ą]Z5#Čž={–żüËżdlt”÷ߟRŠÔěCľ$ý¨[’ˆTi Îáů>ż˙űżĎwžóňůźÂe&}+'ń\œçčrë§Œ¸Ę Âmueş U›áVEÄAáŞéěě gm7žgĐZĄ”ŚŁ­ľkÖ073‹r ĺŠ^—°ľŘÄŚď×ʁVŠ{śl!› Roa°yÓFź{ëěʓ5ľXŠ÷™KM‚ž1 ƒąsŁĽâýď091Ů\NkÝ oj,ßxÝř ŕȑ#T*ršÜ OȸبżŃŐ@„k3A[Čse•_$ÄAnżk "Ć‚ ׀™éĆÇÇŮźy#Z+’Ř233ÇÔäÎY../p*­ŢtâÄqţöŢ,FŽ,˝ďüťĆ˝ą/š3“™Ü‹UĹÚKÝ]KwŠÔínKd÷Hƒ™†m <@ŔŔ°Œý2/z= ćmŒy˛Ç€4c¸muK˛¤vŤťş[*ŠÔľąŞH™\“šgFDĆv×3q3rc’,2™,žČĚ7îrî9ßůŸoé´;ؖEÇt:>ˇnÎ!cľţ0Ð .`­V+™ŕĆ˝ëÝKÚ.Ćô_Blw<ĎŁ^ŻŁiNĂ0Čd24›MLÓ¤Ýn“N§1 #ŮŻŚičşÎĘĘ ĂĂĂÉ~4MCÓ4â8&ęUĚjľZd2 Ă@×uÍf˲đ<]×Éd2¤R)VVV‚ ɋÓ˙\2_­Vą,‹(Šp'9f!–eÝИţ9[–uW§÷7AŰŤú—BĄP(_&”ŁP(Š/ĚęęňÇ˙™\.ϙ3§˜ĺOţäOYYYM&ó{ašćŽmQóŮgůĂ?ü#~ý7ţ.ađӟüŒĎ>ťH†IQ%Ĺţě?ąíŠ'Apůňeęő:Nç OˆŰí6.\ Őjaš&™L†vťM§ÓÁśmVVV˜˜˜HfłIąXdrr’7nP.—Y]]ĺňĺËčşN>Ÿ§ÝnÓl6aIJ,ŠĹ"GŽáâŋ,,,P(đ}ŸRŠÄĐĐ•J…[ˇną°°@&“Á˛,„躞-‹‹‹´Z-Ž9‚eYTŤU¤”čşNE„aˆëşÉ1œ8q‚BĄ ׁľQ…BĄP(ž|(1FĄP(_˜0 špé ˙űďý˜ŚIt:a!€ÚF“f{[ľ”nĽ¤+ł7śx\ARŇjwřÁ˙”˙ňăwˆăĎóť"šłÝƒaIƒy96C;zĺézś„a¸g؇”ÝjWBƒlZâŘ­śEŤŰ57MÓp×ui4´Z-Â0$•JŃéxd2Yćçą,+ht]§ÓéžçqëÖ-––V( ŹŻß Nł¸¸D&“&›ÍâyŤŤŤŒŽŽ˛˛˛’$^^^Nœţqt:<Ď#Ÿ/†kkŤLNN233CŤŐ& cęőů|ŽL&ÇŇŇ Ÿ VŤŃlśŠ×AŔČȨc Í*ŠƒçA†ý†gů~Ďç°öCw:ŸÇĽďü2œƒc …BqhˆcI‡Ôjőƒ. ăx_™íDQLŤŐJÉ*ź!Ô-Úíőía#›ŰÉóg=ž÷›5ţŕY~úŽł#ŞmŰLNN˘ë:Íf€Z­t6×jœ:UĄ^ŻS(äBŕ8ŠTŠršĚçŸÎČČŚiS*•đ}Ÿ\.KąXŔqt]§Ýnáş.†apîÜ9˘(bhh(ů×uŃuŃŃQRŠžďcŰ)jľ:ŁŁ#d2YZ­6ăăăT*CčşN*•BČĺrH“Ď( =¨CĹdłYՈ ۍď(ŠˆăĂ0”0ŁP žçáyuóŽ jöƒ™ŰˇĎĽĹ΁߲L씍mY¤@SI|ĎŁÓń’Ú]yŰfMÓ°SŠ”}¨ÂQűyŢşâhk"dÓ4I96Śy¸űÍ0ˆńźžçoćüÝ%!ÓěľŰÜ×.QbŒBĄP(ŠC+śěg´lőŽŮĺ0ńŞé˝˝Z׸pĹd˝fnzĹ ěƲ,†††RR,˜˜˜¸Ť ůŠS§’óßňzš\ÚQCÁŘŘXňżmŰ[>S,) ťŽĆ ~ďök6xĹŞ2ĘŻÝö'„—/_抧žR‚ŒBq@“üzƒj­J§ÝéyH~ąýšŚAĘqČçňäň4M;gšŸkŹş^§Ůlây^’kěnB`§lŇŽKŠTÂNYźŠ˘ˆvťMľZĽŮláoTÓ4q›Bą@&sp×űné IëkUÚížďoY  Ă$•˛ÉrdłŮ$ˇŰnăłc …Bń¨L'r™Š_BÖśLŇŽƒbǂ’Řö÷Ýźöŕö!@JRq„Lj |â[ČnFË^Űąť-7*‘.]ľ¸r=GÄťT´Ů­Tń–ﻏUŽ;‰!wUúŰ=‚öÚ˙öăV<šIÇěě,ǎKň)Ї7IŽVŤÜž[ îyąöś÷_ď˙=؇î÷\FQ„çůÔku&™ —ĎŁë÷Y–R†!‹ ‹ll4ˆ˘8ŮE1QbšćŽccI…I’÷°Ňjśh4šLĎLašć–ʁjńII§ÓannŽvťÝ˝?QLÉ-6Z†x^‡FłÁŘŘů|ţĐxöôĎáöíŰtÚAî‰î&đďz Ö7ę9r„B!˙Ľ_üPbŒBĄP<~S탞ٓ˛mŢúŐŻsîĺAh;'1ĐŽM"ˇü‡ŠýŔŽÄO[nž?yŻÄ1zŤÍÄţüíć:=flzzôd-šťpąósÝßž/ˆc MŰý˝}ُżňŐétĐut:M†t:RŠŚin ƒÚyA „ ÝnŁiétz‹¨†!Bˆ-Ťhw:–0 q'ŮŽë:aEAÉd”đ(zś^ŘÜgŸ}Ć'Ÿ|ÂÔÔĎ=÷œş0 ĹC¤Ůl˛´´”„ň„aČÂÂŮl˲X\\dhhĂ0X[[CŃőéy î7Î,..cV7ÄS<ꊈQłśşN˝žAË-âŃňňŸ~ú)Żžúj2†!ˆ˘ˆFŁÁ§Ÿ~ĘĚĚ ĂĂĂÉŘăůËK+ŒŒŒ íŔÍŠŽˆą°°€çyČXĐl´ů裏XZZBJ‰ëşœ8q‚™™„Đ ƒ˜ĽĹel;E:íŠ6+Ëk´šÝâˇoßćĂ?Ä÷ý$Yţđđ0O=őT׋5–,--c[6éŒűĽ~ţ”ŁP( ą”Ä"Ą ó€V ݲžÇŽÍpâ+ŻŔaœ Ę6„żüŠšĘŽÝvϑąÂw§]ÄqL˝^'Žť9V|ß§Ńh`š&őzß÷i6›†AEDQD:ÝMĚŰ/s-Ľ¤Őją´´ÔKüŰ!ŸĎă8­V‹FŁ‘ˆ0şŽăyŽë’ÉdvËňň2abŰv˛"'Ľdii‰t:ÍĆĆRJRŠžç144¤Ä˜ƒîăâ˜FفŽëŒŒŒ i­V‹t:­BĂî@ÇÄR˘ ~ Ĺög.đ¤ě ՗.]âç?˙9Ď?˙<žçńŃGńöŰoÓét8ţ<šŚqöěŮ$OW,‰Â(+úÉÚűbťďűTŤU2™ĚC5!‚  Z­őźFşß{ĺĘ>ýěSŚ&§¸uëgϞ%NÝŞů—ÉňĘ2sˇć˜%NóíoŰś‰Ł˜jľFŠTŢSěŘc÷ĆƝN'—Z­ˇnÝâÔÉStźŸţ9/^äw~çwĐu˝ç…âŃnˇqœÔĄč;Ű퍍dÜ]\\$Žă$Ż\Űü|ˇ""?`ee…tfęŽöŒc …Bńđd ’’ĎÖëü‡+Wů_^|ś'ĆLȒM×0 ă¤(Ž‘şNŹiDŞšě+¸ ŽĘ~y*ŃŐŮ4 „ą)ś ţ}ˇhš†eYA$ń-•J‰J>Ÿgii‰fłÉää$N'1Ükľ…B(ЍŐj4 ,ËJViłŮ,N‡z˝žxSŘśMÇA@*•Jž~Ůěľľ52™ Žă°źźLĽRÁó<šÍ&ívť;™ˆ"|ßß3żŒâáł°°Ŕüü<Ůl–ŮŮY …ŽëŞ sÂXňťż<Ďo8ÂéBC娸Ť‰~×KŃ#–1 őú͘‘‘šÍ&Žëâş.ëëë\ştŠ'ڈ¤­Őj\ž|™cǎ1;;‹ëş‰—ÍłĎ>ËččhŇGA@EčB{h‚LłŐ" úŽža2;;KĘNńÉ'ŸP,1 ƒ0Œ0ŒnHR.—c||œvŤÍsĎ=Dž‹ /đ„axŔâ›÷Čó|d,“˙ƒ Ŕ˛,fŽÍ°śśĆ… X]]íŻč×’z˝F>Ÿ;bLľşNF‰]˘iccc<űěłŘśçyřžď{Ég˘(Âóý/ýs¨Ä…BĄ8äÄHü(â—ËËüÇŮ[ü“ł§0“8ŕĂlr?ČÉŹšZ܏ˇ=OËŕk›Űd/qž¤RŠAJd‚vZm‰Zď}bÇžˇäa[ż#Úí6śmă8ΖŐȕ•˛Ů,šŚŃl6ąm›(ŠĐ4bą˜|—ëşřžŸxĘô'–e‘ĎwŤ0ůžeYIě|_ęG*•J’ŻŽŽbšÝJ Śi&űč݆aJĽ”'Ć#@Ó4NŸ>͉'’6ĽÂĹöÇŇ5žwę(˙úӋüćą)^ĆŇ44Ą=ŕ~XńeŁ/Z#ťýeY?~ŒĹĹœ”ĂĚĚ WŽ\I’Ż —.]bjjŠjľĘ|@ÇüčG?â™gžáňĺ˔ËeĆĆĆNň–ě}„A@ź-Éřř8çϟgrr’8ŽůĹ/~Á믿N>Ÿ§Z­Ňjľ( čşÎŇŇů\ß÷qgÓ‹ťcăÁŤ1€ě-šH‘\ˇĺĺe~řĂ>###ÉŘŮĎéŕyţ=Wą|Xxžż% ţ=2űćzSbŒBĄP(ň¤>]Ťňç7çůŻNL3Í˘đ $ăüŮîě: JşFJ„FÔ­QřŚ; 5‰&% äÖď¤ŒÁó TÉ{ďJÚÚEœŃ„ŕ•s—ŽD˛OciUçňu8֑rgâÜ~bÇÝʆ !Čfł¤Óé¤dt˙óĹb‘l6‹Žë‹Ĺ$f|ťűąŚiäóů¤”tßŕÔul6›„#m7֏ł_]i||œ8Ž“˛É}Af||<•ú?ť%xT şŽŞr˛šLgłü×'fřáő[8şÉs•˛bwőźú֊5ɏ&Űq˛Ůlâ%ŇIă8ŚRŠpńâEĘĺrvšÉd¨ŐjÄqœ<ĎÉ~˘˘ŃO´ŰŻžÔĎ3::Ęúú:ǎăĂ?$ +ŔŻŹŹ0?żŔüü<ĽR‰Ë—/óôÓO'ÇŽu]FŮ3%’1QËĺ( X–…ëąşşĘ׿ţőăsĘś͢BĘśé´;[ŞZ]˝z•fł‰ŽëÄqĚęę*Ď>űěŽgţe•ŁP(‡^Œ‘4‚SÓHé:ŰF ň<˘_ź‹\XčĹŹlł¤$‚Ď2YŽ;)b!čzŐ 4!’•Şí•DďľÝŞ' R<Î6›Ă˝çŽ‹& 0Œ|ŸřóËŞÁܧ8#ŃXŽMĐňjäŠ9âP’Jw‡ŐŐŹ­­Ąë:•J…Z­†ßs!v‡›7onšoƒ uˇ‡L zŽěghő˝#Eqy1úűÜÇnß­DĹc÷üöÚmJ7°4FĐŤR˘Ú˛bŸ>Ń0 씍ś!ˆ{ăi_$w]Ó4ĄT*ń+żň+źóÎ;X–ĹkŻ˝†iš¸ŽËÔÔóó󌏏'9N<ĎŁ\.ôůÓ4Ńő‡›7Ncšć–J=ăăăźřâ‹,//SŻ×yóÍ7ÉfłÉ‚Á‘#Gh6›\ťvŃŃQŠĹ"“““×HÇ0ôGăŸ+–e"4 ˘n˜O&“áĺ—_ć'?ů őz™™&&&v,BäQ5ĽBąHŁŃ$ęĂŃŁGY[[caa!Yyć™g8rdr‹`Ű֗~ŒVbŒBĄPr4!xa¨L;ŒřĂk×I›“™ Ś&ö.‚†Äď@üáGť~_ŒŕśmóăáaŽĽSHň[& iŽŻózľŠ3$pŕ ťJNâĄńčV°śť ËX°^/Đhů´ź!Â(¤ŃZòšV§RŠĐét=ŁĘĺ2qcYV’ßennnÇýŢŻÜôýLô>”řňxˇaE7ďÍFƒď_˝ÁËĂ^*¸÷¤â1ľ/4l6C˝Vëć&‘ÝPĽçŸ>Ńßxă$LôčŃŁ‰ŢĎű166śĺY|ńĹoÇž@`Y&…bnG1ƍiY‹E:n՞BĄŔŤŻžŠă8¸Ž›$qďŸC6›ĺĉÜž}›RŠ„a=z”´›Ń˝>…bĂ4śşĺŘýä 9ÖÖW C)ť‹ ÓÓӌŒŒŕyŮlĂ0Ďšsç’Dž–eqâĉ-ÇkY•ĄĄ/ý3¨Ä…BĄx ƌińúř)Cç._埞;‹Š™w˘Ă@Ŕ”Iˆv?…ĆĹlŽy]Ç%đ`ă”ëŢw\^\YÇ Â}"9(Ĺ<ÁşĚ~'›$‚ë×oRŤŐ˜_XH*eÄqĚ/ůˤÄôââbREóóó˝/%n(m{?Žřˇ—ŽđćřŻ ă†Ę˛Ľ¸k\×exd˜…ů%‚ HŹnCúĚv1gżgŇ4MFÇF$ˇŚ …N‡Z­„TišśE´č_>Ÿ'“É$çÝ IĂ0p]‡JĽŇőčyD}šŽëLLLpăĆM:m/9Î~rĺÁű¤iŚi244„՝CŸ¨ë:ĺr™ h4H))—ËI˛üţýé˙6M“ŃŃQRvJ‰1 …BĄ8“ ŔŃ ž6:ÂWGGxŘfAW̸űźj\uښ@#đT ’eËâšc“‹<Œ}ňčuíľjžß„ľűwW8;}ęožů&WŻ^% C]ď&Ç˝äźÝ’Jƒ†l’Ȱl›Ż}í5U†XńĐéˇßî/šeۓˆ­éü‹Îu'nŞ’’â>&ĘÝDćľjŽ×!Žâ/4‚ @ÓuR)›Bž@6›9™~XŃČČ0ŚitËv‡a/)ýÝcš&éL†bą€mۏţˇm&aeu•NťC8PRź˝u]ÇśínNś\.ŠŞt(ěMrlĆĆFYYYĄÝé „’ śEŰś)úmć˟„\‰1 …Bń˜  q Žç}#ŒcD/iî'FŔœb>ewM°‡0xjH!ů ŸçLŤĹw˜ptÓúĆ*„aWfđww{ˇügĄXä_ţŤ•T_¸ŸzşĄoМĄP<,úeyťŠQÄí‘ehý*+Şz’âţčć‰)Ëu“ôŢKž˝ź/t]Ç0ŒÎ["XśÉČč0ĺ°DF]ť` `Ň_Č­ O˘W€ 쇥_Ń4 7írÄI†aâľÚżţý÷üőžűű˘iÇM1qd<9‡Áţ|÷6#÷÷ž_‰1 …BĄŘ•v D1™ž‰żűđ m]çf*EŐ0‘âŢ}št:˝oŃ ‹WLłŮäúőëxžÇčč(ăăă4 ććnsâÄńű Ézmgqq‘……,ËâŘącd2™ÉţÍf“RŠD†!HĽR{^Ű+WްžžN6›ezzÇqRRŤŐđ<‘‘%Ć( …âË=ŮÉš)ÜăGYoa!RĆ˝ź0ý ˛ ücńC ę~Ť6”CŰĂkĂĐ4ŠvŠœi˘ďRšSqŻ“ÝÝŽÝ~Űîôş¸Ç÷ďˇMĄP(_xt•’›7obŐjo‹'ŹĆÔÔ/^Ä2MfŽăŇŋMcbb‚ęú:ívÓ4™žžćĘě Ý T*qőęUjőßúÖ7ŠÓétxçwxńĹŠ×ëź÷Ţ{8ŽCŁŃ RŠëëëœ:uŠÉÉI4M;tFƒŮŮYňů< ‹,-.Óh4°,‹óçĎcšłłW(—K<˙üóVŐ0Š"Ž]ťF*•bee…t:ÍůóçŠ×7xć™g¸xá"vĘŚT*ńчqúĚiÖ×֙ššâÖ­[¤3i&Ć'8˙Éyœ”Ó=v]pýúuŇnšŢ˙Ă0šví:†Ž3==ÍÇç?ćĽ_B7t<ĎăčŃ)%Ć( …âKc–%ˆ ĆŇéŽa"AŠÍŠąÜńŠ öúBŃŻ'"”ŁP( ĹݎŤ=/…ÉÉIÂ0äűß˙>ožů&–eńáSŤÖX[[gmm…‘‘Q<Ďçʕ+ U†¸xń“““ř~ŔĽKŸSŻ×YXX ^ŻóőŻ ‰ăGëŮ(Ľ¤ŮlrůňeŽ=JÇüěg?#›Í2??ĎçŸÎĐĐŚi211q`BĆ˝Ď癞žć˝÷ŢcllË´™ŸŸg||œgŸ=ÇĽ‹—¸qó:?řÁrîÜš;)ťĄÎ§N˘^Ż3;;ËýŃqęäięľ nܸÁ /źŔĘň*?úŃák_{ C7šqă&###\źx‘Ŕš=7O6›eccĂÔĽ\*sĺĘUÖV×Y]YĽZ­222ŠĄ›üÍßź‡”’o|ăÍÇúŮSbŒBĄP(śd[Ŕ1°*ԏ×Ý.ŠśsŘő? P•J…ršŒ‚ŠŠŠCZZ­Őj•™™jľ:™t–™™2™4Ž›&—ËaŰĎ=wî@Ĺ$]×q‡÷ߟ xá…h4d39&&ŽP(X\\ä…^ŕ;ßůsssd2Ęĺ2WŽ\!›Í222Â_˙ő_“Ëĺp—tĆáâĹ‹ŹŻŻ3>>Îđđ0ž×!Năş.Žëâű>A`ZÖcýÜ)1FĄP([ĺ‹-ÉCÄ>bÇa<ţ]ˇŞŤP<ŽýĐ}źŽP(îmB}ćĚ<ĎĂq2™L’“ŁX,ńkß|]׉ăŰśIgN0=sÓ4)—KDq„”۲čt:IůâŽç!„ŔqœGz~ŽëňĆoŕş.Śi233ĂącÇX__Çu]NŸ>M­V#—ËÚž%—ËńôÓOăű>NĘé ډn躎Œcʕ"śmč9†Áɓ'Y__OĒ×^{(ŠHŮ)˛Ů4ŚeacăŁřžźě IDATŐP†‡+ŘśŚë?>Ă+ŻžŠ›v0 ƒ^xŽă`ĽR0а- ;eńţ/ÉožžěëqE‰1 …BĄ¸CŇTš—Ý?Őj•[ˇn111AťÝfyy™§žz ]סtaŇh4ĐuL&łcRő ˙ú˙úżq\‡gž~†O?ý”bąˆëşŹ­­!‘üÁď˙xžÇňň2oźůďüôΞ=ËÜÜĺr™ľŐ*7oĚńŮgŸQ­V9sć ׎]ă×ý×ůŮĎŢá{ßűoďŤmIŠĘ[+ …Bń¤Ű›Â>Íçs|ăođoźńČÎ[Sˇ^ĄP(Š']×9yň$ŽëňŐŻ~•fłAŁŃ Žbâ8&—ËQ­V‰˘ˆńńq˛™,ŐZ•VŤ…eY4MFGG™žž&—Ëńâ‹/bőňřžßM4˜ÉÇ1ögĆôô śBJyĎ? …BĄP(_”gŒBĄP(O0B,ËâÔɓLOϐN§ŠŐę8ŽĂńăÇIĽRTŤUt]gll MÓz• <N:…mŰ=z”ĹĹEŽ]ťĆôô4ŽăP(ČĺrŒŽŽŇjľřůĎÎo˙öocšĘüP( …BńdŁŹ!…BĄP(žpt]çľ×ž†m§°m›\.ƒ Ć'ĆŘŘŘ ŸĎŁë:íÖ ě”M˝^Ç0 ňš<ăcäóyžţő7iwÚźňĘ˸i—S§Ov ĂŕâĹ źöú׎ 4ţڏ3ŞtľBĄP(žě(1FĄP(Š'MÓ¨ mVÎJţvÓ.ĺňf‡\ŻRFĄOśĽ3ÝdźĺĘÖJĹb7p†źýkżJ:NźbTؑânŘ­lhߣÄ…BĄP<.(1FĄP( 5Ů%Žă‡ H¤ěNű%9Ł(R°ű´Éݡ÷Ťg VŃPâ‹BĄP(W”ŁP(Š-ÄR˛lýiŽ.4҆AÚ4şĄťÜO#h…9ËÄэ: ¤$–M´ť<&Ĺnßnr\]ג˙ď—{)MŠPÜš]n–­ďţí¤ěЇq,H‰S…b×vDŽ~›Ŕk˘ üůŠ'ƒƒS”ŁP(Š-óFđď.]áßĎ^EC‚œeńÚč(˙řQ&ŇiLíNĹřşŸi†żů*|ý˙ôÜSź6:†Šßíŕ&“É×^Ünśřl˝ĘT&Íą\S [îă çŔnՈ„Äqˇb’ŽkÄqÄíۡŠŐjÄąě݃-ŸŘeŰćkşŽ111AŠTR“cĹĂ4‘{mY'Â-m}đo…âÁ!ƒ:Ň[Cb!•ŁPáúFƒš°Ä/—Öh!ŔĹߙçWLpťŃäß^şĚŐúӏ#"wž8ćWođÎíůžcňÓGys|”Ťő:pů*WëcŽĂ˙đôSdL‹^żÉť‹‹lŽaňňp™Ż ńłŰ 4ƒ€w—‰¤ŕ>Ćď_žĘĽjXJ*ŽĂ?żÄd6ˑŒËß.Ż ÄHŢ_^ć?Ě^'cęœ+ůd­Ężżr—‡Ę\XݞÚńxĄRaąŐćƒĺU~xíoŽóĂk7Č[ż61Á‡Ťë\ŠÖř•á!Î \ŞÖ9‘ËńՑ ,ŻňWóKœ*ä9S,đŃę:ŽŽđüPA哹Ă=†î6‚ Š"˘8B]1%ŽAFŃÖŹŞ„Ą#ČH@ϓĆ÷}â8î}.ŚŐj†Q/ *Fʘ\.GłŮ" CâX⺆Ą'ĄMqܝ\7 \×EÓ°öÇ1Íf“L&ƒiDQ´%oˆE1AĐjľÉĺ˛[rŮH)ŮŘŘŔóâ8ćúőÜşu‹ršD*•B×u\7ͅ ŠŐj‰řpěŘ BlŰf~~ž IĽR¤R)1M“JĽÂúú:…B?ţ˜“'OpćĚi—¸uë““SĚĎĎ344„Žë|üńÇlll066ĆĚĚ kkk”Ëerš,ń?abb‚fł‰”’\.‡a|ňÉ'źôŇK´Z-Nœ8ď{ܸqƒL&Ă_ýŐťźőÖ[\˝z•7n066ĆéÓ§ŮŘŘ@Ó4ĆÇÇ9ţ<–e1;{•ršŒçyŘśÍĘĘ ĂĂCŹŽŽqćĚ|ßăłĎ.ŕyĺr™VŤĹÔÔľZL&CŁŃ`llŒŤWŻR*•đ< řôÓO9~ü8KKKčşNÇhšĆÜÜ'Ož$ŸĎ=1bŒ[EĺŁ8˜QQľ3…BĄÄ…BĄP<ěÉpşcČq(Ů6Ż ńTŠÄËk $śŚ÷ćĺHA(%˘÷9Chˆţk=ă5–ŔĐ4BSqRQŒGü›Kłüěö"“Ů ‘Œ0´î{G]‡ď:Á{KKŹz-ţÍĽţß+Wů__>GËm@ăŐá!VOx|˛śÎ‡+ëüxn‘§oů—/ŸĂ5 ´Š,OäýÜs˛şsťfK˘ëdľšăâyq'űi^XŔË9¤ŚK´Ž-[ĹĎói44 LÓDĘŽçI­VŁŃhŕű>A0==Íŋ—HĽR¸ŽKľZĽÓéŕ8Ůl!F€ Čd2čşÁÚÚ:KKËĄqţüy\×eee…ńńqňů>ÎG}D˝^gllŒ\.—xŘ,//EőúétM6ę jľWŽ\áůçŸç•W^á… †WŽ\!Š"jľív›FŁÁĘĘ ­V‹őőuJĽ###,,,0>>ÎÜÜů|ž—_~ů óŠŮ:A~đ%ŮŠ=Z›jk`ŒR÷IńhĆ%Ć( …âQZFüă3§řÚčpw&łiŇŚÁnÍń|eˆóŤëT›‰´ËT.ÍF“ż˜ťÍíBž‹ŐZ7‚s•Ž.óáĘŽĄóÎíE6ü€˙ů…gř›ĹUŇŚÉ[c\ŠŐšVo‚čVdšk6yşTd(eó˙\şĘş×ažŐA׌&¸Ýjňy­†A; y}l”šçńƒ7™­×đăW w÷Lě…TŹ43G'ét:Ôj5<Ďë +’j­ĆJ˝z‡ĹbIąX ›ÍB„ MLL†ľZvťÍŘŘ(ívMŒŒ !Śiŕ8BˆD¸‰ăˆ\.G&“ŚP(`Ű6š\–ĺĺeŽ=ŠŚ ŁűšB!O*eS,™˜˜Ŕó:”J% ĂŔ0t*• š\–őő*ŽăĎçąm›ŃŃ4M§RézŹ,//säȢ(ě 69&&Ć)•Št:ĘĺŮlŽl6CĽRauu•ééiÚí6…BĎóI9(ňäó9 CG×SŒ1??OÇLLŒÓlś C§X,öBĽt\׼X,&%Č'EĽR&ŠB2™,Ůl7dëË4áí šŚÝEWĽźoBÇ1QF¤jkZ€Źü}[CŢwß1čńšë~vł¤ÓÓÝ×˝|~3öĄ}ţŽ÷cˇĎßëůÉ/řů‡ô}B%đU( ĹCŇXşyśĽ;ŢhôÉ†äÍń–:mţfa…wWH›ß9z„3Ľ"–Ąąćuřéíy>[ŻuK` ‰&ŻpŤŃâůy>^]#g™|kjœ1×ĺĺá ?_Xä?Ě^Ă5 şN/ŚŚ!ĽäĎnŢ&ˆc‚(捣C—;Óűź¤\.vŰoŻ-?űě3)pś&€ź6ĽR‘‰‰ń-űššbrr T*•äô…ĚĚezzjŕœwVůéçľBcll”Ńёßˇ˘ĂččȖóú˛1žçqíÚ5Ž?ŽĘ¤+)q,ń|Ÿv§C$ÍC#Ć|Ńš÷Ą8VşŽŁkšŽ#z 7RČű4¤”ÝœgQDÜtżü2•Ëč!]Yí`Š(1FĄP(ž¤ÁĽo ő šmYC p oNNp˘çD>ˇÍÍfůŢÉăź62B; )X3šEŰâéR‰ßyú,ˇ \ÓÂÖ46‚€ăů,EŰâż9yœ—†J´ŁˆŒipŚXŔ2tž{|š‡ĘqLÎ2Ů –͐ăđ['Śye¸B#q él†×!oYü÷ObąŐĆÖ5N˛ü“§NqłŃ –’źeqşXč…LŠÉÜ ÁşUŘű˝NŰśiľťĄ2őz=Iô;77×kPbWł{ű$ú‹TşŮM,éŁëĐŘľŮMôx÷ ˙=_&!ĺÁL~cÚí6Ÿţ9SSS躎ÄĹ###–Wjdó똆q_ß˝uyWąy°żîz+ˆ­}n/ɰÜ}Ôß|mŸůűŕ÷ߋăƒŘăřŀoEňZŻÂĄn¤]‹L:EʲťĎ{ďÝw;nK)‰Ľ$ C<ßÇóÂX…ŃƒcÄŔŮí˛–œéĂÖGz•亥ąJŒyhúÁČ$JŒQ(Š'F‰‘Ä€˝•'ĄíÅK×9[*ňTЏŤ)dj‚ÉLš#™Lbô&G7xŞXŕLą°Í@ěţ5â ťŁ;Œ­#™4G2é-‡Ó˙îŹi1‘Θ˜1´ŠńLŠÄÓĽžŠ*bNrœ,äÎG*ˇň} Ů˝­ę( Ń4‘$¸íçuą,‹‰Z…ęĘŽBĚvŃĄ?ÉîW5ÜžßDť˛˘őź¤śś×Í KwłŸí•ŠśKß[ça J\¸łsůňeŽ]ťĆ•+W8{öŹş(ŠG†ç…|ryĺ†Ą?¨•ňžˆ"wFÄn Č@~4­ű‘ô#b@ü”;Bh;ú@)şůŰäĎĂm}ĽŘ˝—ŰXlůnĎĄuEfŰ2ф ٤ę-ÝürٌɉŁy&†r8N Ă0öSąvˆGQŇîxtB ÓÁDÇ蟜ÜS›ÚűöČ;¨KťŒobŔÝGĆqWlbwukťŇťťÉ;+]şŽ“ɤťwF‚”ń@UA5Ć<.ă´c …≙u‹ä—†2Ţ&•ě>öď4{6Á˝Ţ%îřß@8‰źÓçśZ+›ŻiťîŠí܇bö50vľ7zł”1FŁ—d}}FفeY,.-őĘXďnŃFQÄęę*qă8N’$wtt”Z­F˝^'“ɐÉd’ĐÇq°mť7éЈ˘ˆjľĘęę*…BFى”03s”0 ń}?É)ÓÍc ëzŻ<őŚđŇétX\\ĞʤőČČČ@ÉęŐj•8Ž1 ƒl6Cš\NÂŞÔEőîUżD¸ŽëřžmŰʃHńH"ÉFÓĂŽwĐĐJš”ÚŚ ł§0Đ ‰=ĄC žă„;ń<Ůöş”Ý™XöźjäÎ`ť ĽDxľě)-őBŸ5 CŁRÎQŽ1tzmƒĽĽu:žOK SÇśş}tËit:aD!cbZšŚ%ĎűÝxTĘ8&ˆB:~Œž*Ą™4!xŕJ˝‹Ól6Řh4pR)Â(BZOlŠ“Đ¨ąąąŢ7ö=nD/LW×tRN–(Ščt:x^ˆa8)Ë2ˇŒ÷’ƒKq°(1FĄP(ž´‰¸”]ϘžVŃUdŻ’źă睍_ńS–w-üě%ËHvô ź;ÜÇL&KŠT"ŠťÂJŤŐ˘Ýn“Ëĺ|˙ŽIűĽŞ=ĎŁVŤáű>šŚ%ešËĺ2kkk,,,ŕşnb$Z–EłŮ$“É$ՅÂ0¤Z­öňÎčDQÄňň2KKKhš†eYŘśMťÝ&›Í266–ä°,+ŠN”Ë刢ˆt:M˝^Çu]šÍ&žç%šşÇě'ůiGÇ\ťv›7o2==ÍÇL*•âčŃŁęâ(IŸůĹű„(Ƀ5){#;GźîkÉH}ÇqSl&ąJĆŮžGŒ –]o˜¤ď–[Gbší3;žQ$šÜ&Ä 8€hšAŠXŕřą)żƒ”’ńń –mqýĆxt]çôéÓĚĚĚ Ľě†:(Żœ2D†őr‚ȁP›nhÜˇ_O]śˆ(˝đ$Ů]ÎŘžšedŢ[ —[$¤E•M­]ÓŽ”ˆŸŮËWŸéŁGÉç3˜–”’ĄJ–ĺĽ:C#cÔj b {^%÷šçEr0ÉzűלRŠ$‹ śmŁëaQ.—ąl<ÄĽďŃ9x}„ÄqLłŮä˝÷Ţ#ŸĎséŇE˛ŮL2žůAŔĽK—ŘŘŘŕÖ­[źýöŰ*„I‰1 …BĄx4łoˆ%|źşĆccřQĚrťC,Ąęűä-‹wř•‘ÚaDŞ7‘m…>şĐw]Ş~ŔĽj“ů,A€Žf3qL' q ƒ•އ­kŹu<†œ)Ý`ÝëĆ ëÎÍůľuŽŐ7xk|œůV‹‚máč:ŚŚŃCb`Í (§,ÚaˆĽiÜj6Yl­rŚPÄ1u‚(f4í`j `ĄŐ!ĽiŹvÚhšĆ‰\Žvąîyä-‹”nP|ŠśMŐóp ƒőŽÇHÚĹ5Œ'ˇa좘éŽI+řŕłó\úü†aŕyşŽŁé-ą‡2hBvUşmŽě}Ä4ÍÄCƲ,,Ë"—Ëáyśm“Ďç ĂnŮčţçú9t]'ŸĎăşn×°ô}4MGÓ42™ ŠT*1T'캎oqsOĽR˝ĘG]#4 CŇé4RĘ^)k­çI†Žë(ƒőŃo# Ĺaę"Ľdo‘bÄ[›“ćmŻ$jĆŚˇ‹Ř–4¤ëŇëŒĺće_řônŮ+ůK’IFö˜^/rŰ9ěxş)źÄ=Ů-_#ŀ0!D7ÔT×ôîáĹ˝ó–’8îţH 2î…ßlËçuJś6őî"Œçy´ŰmLÓL’‹ëş˛{m‡‡‡1-]×ðJ40}!ĄN‚ ŘĹŰF&ýŚŽëŘśľĺFQŔ/~ń Ν;§že%Ć( …âŃ!ˆĽdĽí!?ŠXétXíx2ĆĐ`ąíąîyĚ5›XšÎRťĂń\ŽËőß$˝IţfżÚö´‚ÍńjsˇÝĚjbS@Ů KŰÎL Cm 6âNĘÔćľÉyv÷! K+ äÔ™Ó %†Šqűö*žç…!ó +LŒ k×n.áů>śĽÓ=ęűuš}ř%ž›Í&sssT*Z­aâ8VŻ TľşŽŽ‹<Ďےđţ‹˘ë:•JeK>~5ĽL&ĂWžň•Ţ‚‡IąXHrŻőó´}ë[ߢ\.Ť‡Y‰1 …BĄx”ÄB)ń˘ˆNâE#ŽËű+ŤdLK×Yëx\XŻs$ăŇ FÜ×66đăKd ‹…V‹Élš‚mpľŢâh&M'ŒšŐ¨ňĘĐ0?m̓łrŹű>AH&Ř,M§œ˛ˆ%ŘşNÁ˛9żVĽ˜BÏ"Žn4˜ĘféD!9ˢćÍfp “vâ:ąŒůd˝JŢ28™Ď"Ľd&“ĺƒŐRšÎPĘÁéyé4ü´aŇ bn7ŰŘşÁ‡+kÉd(Ś,Ţ]XfČIQHŮčr üç“ÜN:ÍëË]s/ŠťBĚŕjjŃşľŽGawľö.D‘;ýwööĂI”óO˜•ŚxxjĚ]ˇ?Ř* ôšÁv){"ĚŢĺrş^$qRň$§˝$žÚ^zßě^ ˆe’vÇwöňcI)“&šWr~š)ň9XŞş7vĒZ­ÉĹK×(sčşNŤŮbaq•(А–WkŹ×›hBŕ!Rƀ~ho˙ŢĽÓéÄ#&›Í}ďƒ0 qœabŰ6ŠTjÓsćC?Źwł-‰^ČŽƒŽws×čz?tJO"*• Ĺb1Šf¨PbŒBĄP(!5?ä?Í^'o›¤tĹV‹ŔC &&mčBK†şůWD7ÜČď0šNńW‹KXBă;ÓGЅĆXÚaŽŮ"k¤ WÖ8‘ĎsłŮŕr­Žch؆ކ†Db !‘ i!9Ë$eŒ8)2ŚŽ.tţfi™r*…Ľël]#kYÜj´sjžŽéHŕzىŁ l]Ç1 ľL~š˛ÂÉ|f'ŕT1ÇOo/đtŠČŐúF/Üęáş9?ô ÇŽńŘ=ęŮę[ÜŹ{Ť˘Q÷šičWwxČ%ĄŠý&L Ĺ#Őmî”p…­aAbŔťełHőV}%–r—†Ý-ťűęČ­#Y/„H|nđ d?ďöDžńnĎXßÓfŰq&˘LˇZ“„,,ʞśVë…ěDÝrĎ=‚0" ٤:”ŘötHŮ;„R`í’uřA÷IťUBě†őšd2F’tžż˝˙™) )”ŁP(Š/bLč:˙ݙý…04 ’’Ż˘ϔJ ᕡáÍAřľ#ăÝŐ8!xk|œXĆpŇƒĽ˘{ůezÇ.ˇ)3I$žďwË0ýTú[ź:Žý‹Čť]ő~)çÝĘ{†ƒÝ‹`rç÷>:1¸” ­Ä…BĄPrt!С Ř÷:š`ťKq,ťBĎh:…Ľkű–ž,żŮUv6ť—vcĂźCDS =z”ßýÝßí–ç IÚĹ`Ý^ÍĄŸtwzzzĎÜ, ўK)ŐĹPěÄWö… š™˜ˇŸde›÷˖ńN”’îWJúzyX6ß&{ĺšă$‹tE!{žŹťË˘'uh‰83P;IţŰ;†^b˙x šo˙˙AľŁV%]ydw1gó{%ÝښčîCëeŢ)Éä|¤† vťÍĽK—'“É$Uü<Ď#Š˘$Ą|?šťŚiĘ{DĄÄ…BĄP<žčš`2ă&ɏÝ!`||œŃŃŃűŢKż*‘š$+&Iĺ—8&Žť“S…âZ^R Iěxe°uâÜBß71˜Kfˇ v›e§ăž—J$%qź)”@O„]QfËqôrĹ1ŕiŇl´%DĘžďĘf˛Ţţ÷Ų[ő(îULŹaÝÄ´ž3¸Ÿ3F“˝$Ă˝p% ”˝đgŃKƒÜ–zףúôŕ’ď şŐňŢ}÷]fŚ%ůSç˙gď͂$ťîóÎß9wÍĽ˛2ŤŤz_Şťą@$h"i‘”†śŹąfB!YŠ˜p8&Âáe†ŠĄ,Sv„Í šy°Â/~r8b&‡g(CâČ#)(‚ś( +EtčľşkËőŽçĚĂ]ňfVVٍęŽĎG6Ş*—›7Ď=÷ÜsžűýżŻFšŚôú}Z­ŁáŃh„R óí6gϞăȑĂF]bpÇaČƒ]™™IĚÁFQZdîěűńFLٚąÇ`ď ¨üŸÜţXŚ UÖ%K2ńR=šů fgLh”Ö!ŁĹ–——†žU…Œ.b˛sŠÎ<˝TĄĚŠl{s]1"<7đŐrjłOQB焌žü>ůvdž-INú(Đr{]ܰÉö?˙Šw7ŔPJÉącǐR2 iľZAHŒˆ˘˜$N°m‡4„áĘ KKK,--šëŸÁ‡!c Ć>/e<ęgÇ q*‡(¤ě{ľLÖĂĂÜýŽČ˜ˆ™"VÄÄP9&*ƒćÁRxś(­QŞ(ŇcBDgţjՏ+U+‚˛ěG–c‚¤ZBUl_kAŠ.=bT• Š8řNŞX˛˙ü“¨źŚP÷LN"÷o‘š˘§š:U”PéÝÍ0ô}Ÿ/|á %I›)6ÉS›@ˆœ*ŇĽý\-cźÎ î c``````@ĽŹ\ G)J'ŐŰ*ČŤˇD)#­)ó;§w°zĨ# öś¤MëŮżWÓŹ‹°ĄLĽ˘ÇĺB ŇâĹŞř‘:™I~áߕmťđ‰Ió‰)KćCS)‡R˘¤WԄ‘oĹpXÉY!*aPhtfć›ďŚĚ÷ł(ŸB钐zş0IŁľľk孖eݖwYńڃp Šúľ|4`Čúݘˇ_íŇRĆžł” UNƒ°A}ÎĆődůŘvěí&“ˇ3Ů4Ţ4w}\%}‡Ö˘|NTX=sDŐĽoVšT(c&u‹—ž0…Inž^zŹ„AŁ•)dL)_(U7j&?ŻęQœmC”׼NŠź dţýľ%łżÇ×1Ńjĺvy,/ĘĹDĆwő›Ěúšă­Ďü;߆ŘŇ{vÜ×rŔÁG†Œ1000000 ‰*-5ňĽä}§ňq­5:™,ţOӔ8Ž‘R2đ<ĽZkjľÚDĨĘo gąÚ˛ŹÝO’ŰśËT§ę{Ň4%I¤”¸Žkîě=ů2-oŠ/Tȓą¸DĎ|oe#mZI3RR˝•t.ˆ*ČČMweĄLAB„*ěłÇ”Ră%=eęËd)ŃY ňŇ"]Ą*¤˝¨>‘łDRe„Lń}…Î ˇŤŞËěĺťK0řž‡çyH)>BýŇTŃď÷ !cČƒŠĚÓÜ ŸL‹ń´{ëäM¨#Ö˘5ęÔ9ŞkĺÔ])Ĺęę—/_ŚVŤ‘$IIş¸ŽË‘#‡ËŘQ˲X__GJIĹ ‡#lۢŰíŇl6éőz´Űmâ8ćĐĄCôz=Ň4%MSlŰćÔŠ“†Œ100ŘýE0”ž*ՅńäH˜ýWU^[}ŘŽÔ)˜•‚)J“Ô˜,Qz*3[1×é" c\)R„hBj„Ξ/ˆ”Ź4)Sͨę~Šń÷,˙`œ|EŹvu7ňŤCA •l”ČůŠÜ;Lg%K˛ŇÓQ×ĺç~hÂ"ó‚ÉR”䁝&lŽ˝@'YsHŽ„…†ÄłŇą°,›4Œ2Ԑ1Gq4#L†Ă>ŽmăyţśZ…bEŻń\úIĎsŸ>\>!ďźó.WŻ^Á÷kœ={– .`YI’ŕ86ŁŃˆ Ξ=Ë`0Ŕśm67ť\źřçϟçĺ—_ŚŃh0??Ď`0`}}ƒĽĽ%^|ń%†Ă!išrčĐ!šÍ&'Ož0ÇĐŔŔ`)™bą/&üN ĄH"*ӊň˛1•˛´ˇš.U1b\ŞT)-*>ވ‡."¤äéEYŠš˘FP1™:ŚŘDާ• 6¤ü^żŻÂŒćVm’ÇB)ƒÔČ|[Jdż——˜üł˛ÍŠmČ­ʊKVA؏˖ĆĘJČüe gúXH)ŻŇ°>Hů8âů !ŁXŃŽŰÜ{Äaą)9ˇhńŕQÇfÚĚŔ1wwąĄQvť .˝ƒß^D,,!¤FY)ł4 !А˘˛nő˜Kjo„ĚСVó°m‹FŁĆőëר×}l;›z´Z-ćççYXXŔśm”R\ťv !$Žă°śśFEœ>}ŠFŁN‡X–ÍĄC.]z—8ń<ß÷ËÉśÁďĆœŇ`_÷OʘéBQ"*šŞBÄž/UŇBTů ĝAi¤[ÄY—ž.Zƒ§ÝiĄ =Lfœ›'Q3…JE•-…Li\GšçWFÄl-J­şŞL¤Fĺż 1EbˆŠ˛§œ”)“”rr'SđLXřî>ÁĄŤŤŤ\şt‰vťĎóđ}Ÿ7näŠĘSlnn"Ľ¤ßďcYsssܸqƒĽĽ%FyÍÚKąćĎŢ řżŸďqłŸ˘´ä|Ęăo>VĂuúƈv]pzÁ1'˘!c >Ş„Lsź„x÷]úíaÝ%ö-R­ŃžíŐp<Ysš&7x>yˇŚSďL,˘}ßçÁäţűďx_ϘăǏÓnˇą,›ĽĽ.?řÁ¸çžó|ěc!ĽäôéÓ!p‡§žzŠ8Îźd,ËF)CĆ|P˜|ŚiĘh4˘Ńh˜ăj°ß†Č˛œhŇX7K0Ňj\ 4V.L‘Œš‰Hv]’rBŁ”Ę+GÇŢ-eœ{%UI‰ÂŔˇ`CĆBG1A$鱟Mnš;ÄÓyuR5'‰’ŠŠč*DČö-gj´`ŹŽ)ÎÉ"Ć܊2ŘzźM˝7ăIQ"ë8.ŤŤk4)ď˝w)/‡ŐÔë úý~YV;?ßââĹw8yň/^äÜšsĚÍÍݑŽu˝›&+@%iIj.řŽähK˛>Pœ^0§ !c >ŞŤaZCˆű˘7?OœĆŹD×xă\ŸÖ…~ěăQcŢęd­ĆĄĂÇ86lă9ބ2(eŢZkšÍćÄ$yz‘íyŽëĐh48zô0BˆŇČ×qĆw-ËÂ÷)—B8fŃţÂp8äťßý.ŸűÜçpsl î>S–˛ädLa€+Ęç3>AiMŞ2RfěÁRŒ{•l%1Yč”oĽ4íUZ•ę›1ß3vk) ÍĽ˜ôąŃ9ÓSúˇˆĚ4wˆĘvŤ¤Đňh˛”h “¤ÇĆźşđ†A$ĺŘ@XëÜôˇ(y•Ҩr_÷†Œń<ĺĺejľ:žďă8FŁôB”Ş™z˝N˝^çčŃŁ(•˘”*Ż?{ KÂ#'žťhgŚÍJóꥀóK.ž“pm-ŕÉ{çţ™”űĆ˙ŞDĽ˛œ3ü$ů†Œ1000000(çŮ˝~ŐÁ€@H67n°Öx[_ágüe<ĺŃŠ/pĎąą=Kú&‚÷8團ëW'^Őß ŚXŘLO¸Šż-K`YrË6Ś_7ýYŰ=>ëďęk§›H<™Aě”Rܸqƒ••VVV8~ü¸iƒť>.d‰ÎŐ EůPaŽ[%cĘHęŞ:F4ĚXŮ2IÄ0áá˘*ĆÓdL9–R$'&źĹřĽ**œj2Ň8ÖşJ UŸŻ>˘g(x˜ ç9Ů#Šń3'x”ŇIŢ^…%Í´mďŒŮe¸ŽËáٗŮÜ\vC`~~>?▤Áâââ{\[đä9Ÿ†+xíJD€-5Ż^QwŸşˇÉbÓ:ا‘ÖÄqLżßgss“nˇKšf†ýśmÓhĚ1??OÇźţúëźů曼űîťŹŽŽ2¨×ë:tˆÓ§Os˙ý÷óŘcą°p°ĺB†Œ1000000@ŠJšřÎ_ňĂź„R ˘nąţ€Ă⺏çĎłmp˛ľŔ|뽤Ď_ňGzsj.l!=”Rôz= S˝lnnâ8ív›~żOˇŰĽŐjQŻ×QJ•օBRŠ~żOżß§ŃhRJ:TŢaÓZ—ńÖE$ö´ébšŚôz=,Ë"Š"Â0¤Óé0p]ß÷šyó&N‡0 évť!p]—N§3ĄĘ1ŘŰɺ֚őőuŽ^˝Ę`00‰!űŚoRĆMgD‰ŇL¤ž2ŠŇĺď…J•‡3^&ȘąaďŘ`W”ę=5bâ•óŠŮÚďŃz’řŃłŠ‘“ۑ×UâZŠ1‘S5–yŞRő#˛R&˝g$Ç´ićľNŔű%7ÝiXśú¨!c .Ň4ĺ˝+—ęAAÓćfÍăÓĂűšçĐ˝ôF=ÚÍnFŤ<{ůżpá̀όÎâ´ěmU)I’0 ŘÜÜ,eŕĂáĎóŘŘŘ`uu×uŃZÓjľp‡ đ}ĽƒÁ€7n”)Lý~ŸN§Ăćć&h­q×u ‚€FŁÁĄC‡J´ëş!ˆă˜(ŠĘ&Čaˆçy ‡C˘(b4Ç1Zkęő:sssĽœÝ`ďź?úяxóÍ7ąm›^xĄ,300¸;rěCA(=6č­.:/1Jő˜X)ŸČ$ĹĘ[0& Âc’ˆ“ž4ůďşJčˆ)ĺĘ-HŤrJ•Ę Ë\]ő†)M /§­ž1Šr¤âŸ,Aş&7ň%…tË}ݍqDĺîÉmÜv$8î,ŞFĎL}:Hs‹Ë—Żđă˙׹óřqßlnnňüóßçŇĺË–´üZYśü~xá…xá…xüńÇůŐ_ýUNœ8XɊ†Œ1000000ČŚČRœŇD§ZzČȏƛ\J/Ń]ŮŻő^cŐîq}°‚Zm0ě-rÝžĆňás“ÓÇÜď%I’$ĄÝnÓëőHÓŹ_Q5§N"Š"l۞PźfŽľZ hľZŹŻŻ—D‹)eI°H) Ð$I&ďÜJ‰mŰÄqŒeY ćććp‡(О ‘mO;…b§řƒ˝‡”’x€x`˘ÜýÁqʌ)JˆŠ´¤*™’ęq‰’šd*}ylú;ą`ŐŐR¤qɒ.ʕ&„Ećˇ"Dc]źĆ9S%m s_QUȈJŚţ_e TI×LŤc˛mIDFé"UК¨¤Kł_Qm×=8˝‹ëÂ^ř˝Ü}2ä`އZkFŁ!ؖƒc;X–Ĺ…‹oóÝżx­Çg‹ś2ňćvŰú…^ŕĹ_äďüżĂĎţěĎ2ĆŔŔŔŔ`› ŠY\|´ŽçT ýA^qśďRK|Zل}(Ž`”&ŮÝXŠi*wá4"ľXkô!žHkŘâ¸hLLžŇ4%Ié÷ű?~œz˝ŽeYôz=Ž=JE$IBłŮ,‰“z˝^–*u:™\šŃh09qâśm377‡çy%ŠcYVůž,ei<O’¤$bZ­Žë˛°°ŔúúzYŢtčĐ!Z­–e•*×uń<Ďtó;yFUH´&#*AÇb_ś˝ÁV.&3ë÷ëDU1Ç-/üdŇ w"Š(cf¨K˛ÔčqI’Ňc%KY~¤E-­EFŒČ˘éqŒuF„K,K ĽŔś,ę5—šďŕşҲ¨ű6ś-ŮŘąş1dŁDié3ŃCuůc’Śbź[ôh•c’!óHëüA•ç( @’3IbWτą]ÎŘ,vZÝ86ĽźvL“łÎ‡ťŽLeLaЛąe}úŻźĚkŻ˝6îmşŇŃ> ”Rü›óoX]]ĺ—ů— c````0uArlp]Lc읇-ţęąĎĹ1J+D5Ő T•ů¤Zi…@`Ë,^Úu˝‰I””’N§SţÝhŒ‰šZ­†ďűe‚Ĺv“]!FŁ|oužďăg‘JčYfŰś9räȖď\;iO†¸“äĚž€ë"ňŤ!eŚĆFÍD”u‘r”/"Ś0ő-Ťĺńđ¨f/$+&čĹgdcłŢf-Ž(ÚM#‡çi4|jžKÍwiÔ<ĎÎ|¸l‰ď9xŽ…mK,iá:– F!ÝAÄF7ŕĆڀőnŔz7`8  Qœ’$)išďEŐXlbʔ< e%úťZęU1’g÷ĎŚńFťÝ.ׯ_Ç˛Ź’\‚×uévťDQLŤŐÂó\ƒ!śöýţ€ZÍg0°´´XŢ ŘKŢiiš–ʐâšVÜÄ8¨R–7O^yĺ^ýő-ž0E_˙°‰JßřĆ7!cČƒ;ˇş@4š¤K‡ą77M{ěťEĄ’Fmކ?işXL’D•ZYZT}>Čbťjš xcřj`pűH—#šM„e™Ć`’ű/ŠÇŢ1…gLŞ™đaQŞx˝˜0ÔU#í6cT}—üPń]Š4ş|Š@0ÂÓ]"áܑ“9ÖaĄ=‡ë8Xś…eI¤ˆŞúCŔóó5Ž“+^ňňŤ0J¸šŃçĘJŸwŻlrmĽÇzoHkŇT‘Ś UFwW}Lti؛Ľ'em ľČĘśdfę;Áœä¤Î^ÚRJŽ_żN­V#Š"ćććÈz˝Á•+W8|ř0++׉ă­5śm3 ‘R–eľľZFüď%R$ %I‚ëşÄqœ§ eţfQŃnˇ,!cŰ6GĽŮlňƒü€W_}uËő:KS(!ŠŐjšüúĆ7žÁĄC‡ö}ɒ!c î,Ű&iľˆďšëĘeDPÜeČ,›Y1qÔń0ĄŚ92^śˆ’¨š=rf7ď8šťúű}q/&—úÜUuŒ”hß'ž÷^ä|;űű#["öÁ 4¤yTłŞ$*Ľšœ|Фiň˛%56đ%+ËՑ3÷y)z€‚FݧŐpi4\ćç|‚ !ˆŇD‘*Ew˛˛6,˝W¤Ö$*euuÍőźőَń\żćњkŇYhł´ŘáčŃ#>źČÜ\˒ tYb¤ŤN1"Ť&ň|‹c‡[>4ÇĂ÷!ŠR‚0a0Šč÷CV7FÜXrýfëC†Ăˆ4U ŔΡĄ‹äŚź=„ŠŤž7˘ôљe&ź[ׂFŁÁă?N’$8ŽS–ĄÚśÍéÓ'q—4MÈ$I"SIĺŻ7oŽŇjÍoQpěŇ4ĹuÝ<ćšÁ`0"I2ϲ0Œ‰ăôŔ’1EÉqaĚ^”ˆíZM’–,÷?,ţíżýˇÜ˙ýűÚÔא1wčB„ea5›$ŽëbY˛4u/^kŰŮrşjŸľSŒçy%7“*'] űEфJŚ:‡´Źƒ}^Z–ĹóĎ?_~Ÿâ;OŮśDişüű˙ďůęWżjČCČdé2,"úŮ/’œ<…űúkX׎e–ň>ŮĚĽn>y)ó%ÇŻßćĆę–íM˝N†‚bĆÂAÜbĆŤŠ÷ÝŢm}F.kžŢçYmůŒ]\ŘźßöŠçK)6šT+HR@ —TkHÓq$¨Ř2żżĽóű=żĂ5ÄśĺýĹd°¨KOӄúœÍ}ś ’Ź‘ĹmŹuv7k~ÁĄHSS*d°÷ČJ&&˝ö/“Ý˙׎ ŮâݤÂB‹Šä1E6Ýr >QߏěÉMÇĽD;NřŔ¨űîÇi6ą,)˛2sW›:÷‰AŁt5ňYb[dĺB2#ą¤-ą- KJ\ĎÂą-:ó>‡—ć8ÔŠstąIŤéăçţ-ŮŔŹP:…4͝—kh™Z#„ĹĘzKĘźĎW8ž‰řë|ľ&ŒałąŃÍćR"- Çąé´[œśmSŤe„Kh­óŸăůŮĄC‹tť›ÄqR>fŰ6JeĒçš4›™‘źmŰe2 eYĚÍÍqýúőňűĹqŒ”ăr›FŁQĂűžO„aH­VŁÓéPŤe¤XŻ×c0EB\×AAŤŐ*IŸƒŠţđ‡\¸pa‹/Ü,Ňf7ń /đňË/ó裏2ĆŔŔŔŔ2ŰóśMňř y4ť €?ƒýłÎ*–8>™ĽâĆććÄÄr7ȕCĘd}ď–+Ĺ,—C‚;§ßg17kq—m|„Śܑє§ŔŇŔŮsxżńżýťô  ¤Ŕ˛mlÇÁsœ,U,_|›3xň)5&`tŽtńm‡fłĆb§NkŽĆŇBƒfÓĂ÷l<ĎÂś$ŽKŠfČCƒ˛ś ŠJPq…8ŤÝŢ-Q† aӞob[ŕ؂(ޘĺÉNZWłgÁTe*š4IX‰bnŽŽóÚk?Ć÷=ęő:žď˛°Đâřą#œ>u‚…Cź\dLn$I’'ĽFłyöiޘojšçxNĘú㈠L˛˛*U|˙,HIçž1J匿ť<˛,‹N§ĂÜÜ\N$eÉyFŁô+IÓ4WhdĆՎc#ĽdĎIKĹw. ĺ'IĽLS”ÂTÉá‚Xp]ˇlťbŠç‹Ďp‡N§S*bß!°íƒďĺô­o}Ťl÷Y*ĆâąB1óŐŻ~Űśů×˙ú_Óëő>Ôg˙ń˙ą!c ˜ÉĘüŽ‹ÎgS…Ęb'érvw“3Á6000řɆ`\¤ĽU˙LÂ÷–Ou8wĎYÚó jžEłááű6ś“•9śÄ˛s剨\oľš(Ë)Ӗ”&Iâ8f4Š GôűCş›}ÖÖťÜX]çúő5VnŽ2Œxྒྷüżţß!eöĽĘ¤b,\n˝…™^ü*@§™'ŽFِőő.śmqőę .\¸Â‹ľ×8ł|‚űî[ƒ˛$'Šífj‘¸ü>QĄ”Ę|YdVöŁQIŁ4JhĄRVb°§Qíz_ĎóđˇÍžďŰn_ŠsĐuÝmöíŕbmm_|ń}żS•ČĘ|}Nó•Ż|…őŻţՇ"d^xáÖÖÖXXX0dŒAËś‘zrⴓ ƒÁn,VÍľćÖhÔ\ž|â,>tĎu¤EĘŘü6[DŚ$ŠFŤĚë%NR’$SśÄqÂp8b4 čő‡ŹŻwYßčrĺę Ž]_çĘŐŹ­oŇë ٘T)@g‘Ôž`XÂ.•6Zi@Ż•¤ĽI‚f’P˜ĽL($1 q×u˛rkĎĽÝ>„çş(ĺŠSŹĚ#Fĺܔ¤^ÜWşŰýP̰ç7ß|s‚œîŸĹĎ4MY__'F¸ŽË?úGżÉżřżĂ™3gř˙ŕđőŻ˙s666Ćýš raD]ü§?óYÇ1dŒÁ­'Íw+)DoI?0Î3{ŃĆfĄd``ˆƒý‡8Žšpáożs•őő V×6¸vý&×WÖ¸šśÉĆF(LPiF0d ĚÂŇML”2QhĚE B?•š\žš˛Ž%ćÜůŕ ţż?ůsž˙Ă1Ů5QˆŒiX¸‡môu…5Rh„ –+@ ŇP!ԘÉ\`Śn´TJ‹śccÂ0$ISjRŕز\}jľ•XŃy,vőR2MÂTýcśžwż—=‘>ČlŃ<íYR¨hâ8‹îőG4ç ‘1J#ČJą¤P(kr+ZkҢÖj9ĽFƒfł‰‚(Š˜›k†!ŽëŃhÔčőz8ŽĂŇŇ"ŽăŇínŇlÎáű5’$Ľßďăş>ss­Œ(°Źr›ť… ŃüŮ[!ßykÄú0­řť?3Ď_{¤Ž-áĎŢri-ážĂΞ=WŚç/˝^—7ß|ƒˇŢ|ýč-Â0$ ’8* ›‹kťËś¨ůľÜ:WÍäý°ŰíňO˙éoóôÓżËéÓgřú×˙9_ůĘ˙ź 39ˇdfĺišRŻ×qX–M’¤w}Œ4dŒÁOĐbáƒLfâ8Î&ƒ9c°ű ¸ânj1q6k§jewi“$%MՇęĎ{ )%śmăyŽăÜő~z;Ÿo ägˇŸëť´ÎŐ8rzˇaă/Řř –+q›.מ_Çöm´R´NÔq6—žłĘĺďÜ$ĽcäV,ƒ`Ś†ŇYRQ’$ś-ËçcÜ _]%aĆdőłýÍJľ‚eIFAŔĆzšyÂhĐŠBH‰´$Zé,"]ĘÜPXÓiwĘňŸ0J2o)idNHIHPšžF+ŞDsďV’˘Œľś, ­5Ng˘Ń-K2??Ö:›?~´˛#şœ÷T㪠…Ě´ ň=oŞqHŚ ŠVxR` M§Ŕţ$c ăÝ7V¸vý*ŤŤŤŹ­Ž2ö FB€ë8ؖ…Ş×ǝ´rłEVoź%qÜŞOˆm۲(WĘă˛ôRiY8ŽWŮgEˇťI­VĂśď%bČƒm‰˜ ‚`ËdäĂLÔ§ˇń“vçśPůžO­–ŐŚW'wăv2¤LľÍ’$!BƒĄY0ށčô]NٰŘy_ă˜4Mń}ĎóĆƨwi‘´“óŨňfCJAkŽAËŻqěsm,ÇBŘ`×’0Ás9öd‡ZËcă˝>"…ţŐ!˝ŤTŞ&Çô[>zűăF1I’äDŸœ$Zr_™1ľ2Đ8ţ=áIłš¨xŇŘś…%%*ÍJG¤%š2IJ-lŰ*˗Š÷%Š]öł8É˝`”FUm<´F(BĺŢ1y™Ň­›âĄßďÇqyu§Œw]­5śm“Ś)…ZľÚöYuFv ‡C”RÔj5|ßg4ĘLfă8;>…NkçyÔëőmc°ˇ,Č%üÔi‡—ßsyűFZňĂË!ÇçmšŽ&ˆRŽÍűűöZkęő:qŁrĽŽă0 Bć7J<â8.ßkYĂáŃhTŞY…¤iJ†ŒF#Ň4-/Jˇ<ĎŰ1ăڂGNzüÓżfsŁ—’&B…cÁçŹă9’ý§T1/꓎XŇÂś˛›MľZ0+J˜ŠžÄ¤zLO1O?ýťœ9łĚĽKďńľŻ}őőľqO)U0)dŚÜ’r|žĺ˘ŤfłI'lln27×â§?óNgÇÇȐ1w I’†á– Ű´zăĂLŠß‹m~Ô|ŮMăş6ó󭙲XS&0Ů‹ƒü.e˝^CkĹĆĆ& w­_dĂß÷ )¸KÄV%‘x`ŽőV2ŚŮl˘đç|üśÇú…:҄ÛIOsóľÁZŠ`KNsaPz[M+J#`•fĽJBdĽCeššŁˇ/[1Ř:ŠşÜnÜĚĚTS’8Ź[÷•EqĚ`ÓlĽyrNć]٧ĆuĽňąJ_­Ô¸}vi(ˇ,‹ůůyZ­ÖÄ~OĎC˛çE™Uő×b\ĘT1ŐmlGl}E\§!™ŻÉ-nt–%śU3í—qĂóĚú}똰U8kܖĚĘŐqčú7Ł Tš@kÍ~TÇH)Ëň­~ż?ž÷ä„ČÂÂ/^œHězżńŠÝnóôÓżËňň2ďžű.żő[żU*b2™“^blř[ŸŇůÉOâ8ÎDIJľmŞ“LĽň'ĘŮłË<řŕƒ3 ’zđv‰™˘MlŰĆ÷}†ĂŃžYl&IÂłĎ>‹ëş|úÓ…ď˙EćççyčĄóśœ!ÍŽLđ÷ó‚yoÉŽěü}ůĺ—iľZ,..ňń|ć3ŸĄŮlNô/•OޟyćžřĹ/–fœBnŢź‰ÖšĽĽĽ eUAř^¸pk׎ńéOúŽËŇ óóťĽŕ2%}n‘ŮhÔIú)+ßYEUBd$Œž\¤k‘G?çőC…NF~ť9‡"ŞŒ„Üş/\Œ‚”ÂłĺÄľL‹Rw2CَnOLţ,úĹôcĄ´šŃĽßíf~5šQo˝áÓhř´ŰóšR§˛ßŇψG Je‹qĽłr¤ŞŻMőÚŹňżő.ˇť]~˛7çňîĐU{qžŸŸgqq‘ ‚ ČűEvÝ;zôč„Ęu's§Ÿ~šłgĎrńâE~ó7“19%–Ö™A/UFWĘDƒRá-…dii)3äv]šÍćžPĹ2ĆŔŔŔŔ`&iđAďč|ĐEśeY,..277Çőë×Y^^ćľ×^Łßď3??OÇlllđŔ†!ďžű.RJΟ?Öš7Ţxƒ^ŻÇ… XXX`mmË—/“$ išňŘcńŢ{ďąśśF„<őÔg˜ŸŸżŁ“5Ľž_CJąm;T'&ťľpŇZ°šŮĺć5Nž<É3Ďü!çΝçľ×^ŁŰí˛źźL†lnn2 x衇Đ:#iÂ0Żźňƒź­.\ ŮlrćĚi^|ń%:<účŁ:tčŽ÷™ý˘Š)Ĺ×_ŤWŽŃškóö/°°ĐÁ˛$—.]Ś^Żą°°@ˇŰĽ^Ż—FÎív›S§Ní›(ä[‘`{5ć¤iĘťďžËáÇŠŐjźöÚkœ={–ˇß~×uiľZœ?ŸőŮ0 yîšçx衇xőŐW‰ă˜ĺĺežyć”RüŇ/ýWŻ^ĽŰíňđĂ#„ŕĺ—_ćć͛!xâ‰'Ę´—;Ů7ĆýTcîEĆš ݎŤcsŠ"›ňEzS¤KţR1Ë8WƒbFÜ4ŠŒ”JqœlŤË˙V`Č=côLőĆ­"­g=çšs-ĽCs™!jţa…AjV*2šĽÇ\N"j!Ľ5Rd J"Oa*I)& |w“k8hdQQ6űşŚ÷ńy’•r}ţóŸgqq‘gžy&+Q˘(GĚϡšqcĽ<‡Ş˙fˇ xë­ˇř'˙äŸL1“MĄË˙ŠT†Q’*5Ńď;FťÝ.“î ˘ß1ű’yżëݜŕŰjˇ;9r”(Š9}ú4đČ ?ŕÄÉźţúëÄqÄ{ď˝ÇącÇřŃ[IgĄCż7`eeËśpl‡(Œšxń\ÇᇯžĘSŸyŠ^ř>asĺňe: žó˙Â'>ń‰˛†üNśŤmż˙‚{/&ZkFÁ(/Urxă7ůło}›ĺłg¸té2kŤk,.-â86ßřĆ78{öžçŇíöpťŒ7_]]ĺŐW_çúľëüÂßřëü‡˙đůű˙ďޕ oaX,>îö¤ťPmœ?ż˙űżĎŃŁGI’„K—/ąžśÎúĆ?˙ó?ÇłĎ>ËŠ“§ˆă˜ľő5~áŻ˙u3ćä~JI’’$)qœ°žśÁţÁ7ůň_ű2oż}Ë—ŽpĺĘΝ?G„ ‡#._şÂ… X_Ű(ŁĎ˙ňG?ćĎżűç(ĽGtťÝ˛ʒVž8źóßoź00טƒ!z Ťťg@]!dr˛Mż?Š0í R%F&ÇÍpffł–(Vëe’RAÂźßb}Úădű13OSru׹ˇě´Č ™ńggŰO”ĘĆJ— âL(˛ˆk‘El ])ÇQ{ç…R˝Ĺ—i˘ŞJ°íöŰA˘4›Cş˝đڕĽ5 ‹cm›NMpϒá9Iݕűr )Ť Üwß}SFÉ­gΜćƍ•óKąĺş‚ř˙§ łßńqą§5R‹ňšÇI’nńޓRrĎ˝÷`ŮČ̔9‹1ß'D–f fMLîâä '›'NŇi/přđažôĽ/ńŕƒbۧNćĚéeFŁ€••,Ÿ9ËącÇ3uA>Ĺł¤ĹŁ>ĘŇŇaŽ\ž‚”{čaőâ_ţƓ˝ťcŔ§”ŚßďÓhÔů[ëWéőzX–Ĺ#„0Œ ‡?~œ}ěc\ž|Ľô׈˘°œ8 ‡#Ţ|ó-šÍFŠ8ŞŐę<ů䓴Űíť´ˆßçÎ#|œĽĽ%Ţxă úý>IœňÉO~ŠĎţĚg9wî|xߊbfőÝ˝Ü?!śeąšŃec}3'LRZZ°zs›7WétŽ=ΑĂGH’”ĹCK|ůżů2gN/síęuî˝ç>Nž8Ĺݒ÷séƒ}=ĚH‰˘ZÖ°M,´ĹâRߒ„Qĺ?F ŚđʐožĐ 4ŸvřŠS5ţüíŤ}ľ…źŘoČJąýň_­VŁŃ¨Ól6Y^^ćĉĽŻZŚnľó˛ń1!–ŚŠ4MĘ9Hv<˘LőĹĽ_Q'„aÄp8d0ÇÉÄ5Ťřœcǎ1??ĎúĆQaYžżb2ĆŔŔŔŔ`_1–%q]×up]—zĂgŽŐŕŢűÎóŢĽwřöˇżÍg>ó|ßC)•×­×xꊧřă?ţcŽ9BłŮ¤Ţhäw>šÔjujľsssܸqƒ?úŁ?˘×ëÝľ MEh­˜•NąwÇ\Çáŕçţçh4?~Œ—^z‰˙çßŕ‰ÇŸ@ xůĺ—X[[çńŠ×kü§˙ô RJ>ýéOóđĂó˝ď}¸Ÿ÷ŢËJÄćšMšÍúm™ď.Á”Ľ}ěĂqęő:­V‹_űľ_ă_ţËÉňň2Ď=÷‹‹‹|ţóŸç(ăT[­ÍćÜž"bfŐóď%ĄPÄÇ~â§>Ářżţ#Ď=÷O=ő­V !ßüć7iˇŰ|éK_â[ßúĎ<ó óómććć h­9|ř0gΜá›ßü&çϟǶmžýíoó…/|/~ń‹üŃý­V‹cǎíŘ|ˇ(ĆŻĺ@_iĎĎcY—Iăd’´¨źFŒx'4…ę‚ÂnWL& U˜”íƇٕjG’Ş•Śš‹BˌœÉ-âśĎ÷­Ÿ™Q@AEC0čđk5RÇ­V Űs°mťźŃŕŘNć‹$$:I3ňFgß6‹.xŞIâ'K!Ţýń%Žc._žĚp8¤ß0$IŠS'xűíˇ‡8ŽW–ŒÚś,ˢOŸ>ÍÂÂÂ3`O•ć­k Ł Eäţ9Ÿ8éplŢÁśŕŢ%—ŢPĂÂÁ˜CşŽ[śk•|řá‡YYY™ęwâ}ˆÂIös|Ęd}5›艱śđ ‹˘ˆvťÍęę*őz˲pg_ë2ĆŔŔŔŔ` cYÖń™$c,žxüqžxü š_ů•_)ŸűŰűoßb6)řžPüQ>ü7~áÁŻýÚŻąššÉřC677P*ĽŃhÜqŠoáÁ˘”şăƂ}âQűÄŁĺߋ‹‡řú×˙Łáˆ÷ďţO~ćłOńÄ?UŞ4>űٟ™ŘĆ/˙ň?ÝđüôO˙•=™Dďd‘ŠsÔ]Y\ςçyü˝ż÷÷rwNÁÓO?]>÷‹żř‹ĺďżţëżžĽ÷łŔ^—€w0Ϟ=Ë?ţÇ˙8'ÚR.^|‡ĽĽEžň•Ż”çË#<2ńŢĎ}îsęSŸŕóŸ˙üÄăO>ůä]mďbÁj™{adž=‡%e™b¤+fź˘˛ Üڈ ]đ4Zl‰zžŽYŽ’2‰# G(ĽpĚ°´ˆôľt’“ˇ&bŚ}anu^kĹi;ś‹ăř8žÇB­S–I ƒáßóčvc––ŽF žă`ÉBIŁĐŞČŃÖeŠbLZiA´Kiĺb=›Çt:r•LFĆX–Ĺ}÷ÝÇęę*–e!JĽĚĎĎăű>Zk666X\\źsc„<|Ňĺ[? ĚTižť8ädGâ9‚7.őůÂc3“t“dĚÜ܏<ň/żüň–r˘éyčväĚôk˛šŞ˜(EK’„0 Y^^ŚÝnSŤŐ¨ŐjX–U&J2ĆŔŔŔŔ`_BJ‰ă8Äq|çĺő‚Ű_(‰[-Ž4BjćZ Ν_ćúőë<ţÄOŃlÖďxš’‚4Őtť}ÚűGŃáş|ţŻ~–vť}›wđEţqGďYŒyLż?؟ \ążÉ•L¤ŤÇńŽśŻČdřBÂŇáCüÍ_ú›HküřAlËba˛_’; >Řqlˇ›HË*ɔŹ@HrËŮ^„ZOřšäę‘÷ťFL.>EÉ[ †#R•âšER‘B P$YLӇ8MgŮĎuđ\—Ѩë:šH‚ďšÔ\ :¤ťŮŁÓ9ÄhąrmóçŽc' I"KSŢjŠR§@h 2'Şö`Č,‚śĂ‘#Gś}îŘącwôœumÁc§=~ĺ“Mţë_ŽHRĹć0ĺ[Ż÷YlÂŁË ćýƒAćn—dU2gϞ% CŢx㍉ǧI™Y׼÷ťn%IRŚ×9s†ĺĺeZ­Žë–7šćçç÷ÍMCĆĚź¨9Žs÷™=ř>śmsâÄ Nœ8qW¸Bƒž—•´ě‡šm[Ü{}F˘ě5“Ś)››Y]żQě>ǙZŢůD!sss<öŘŁž=mŰĆqÓGň5DBťÝÄ*Ë!*1ÔyI‰Ĺ •ňŁňuӃŮôß5ó\ËƟ‚ M<Ç͍sJ+â$DYë6ť×LNĺ:eŰR€ ŚYĎúŻç¸€[–%ĹI’— ÂÜ\ƒZ­†đlÖdH˛ŞsSít†ď”Č”<+g$Jď/ÂőN_›Ľ€VMđß>Zăçňň´óŹ˝™‘5ÓIŒűužUUĆTűZ1 !řřÇ?Ž”’×_=+mË ĽÔŽ|ĘŞŚËĹż$É|f„Üwß}œ={ $b 2ŚŐjíŤŘsCĆlA!ĺTJ‘$‰i]"(,Ë"IbÖÖÖPJŃl6÷ŐóBČÜÉ$Ł0 ŮŘŘ`4 Jă?ƒÝ'cŚçŹIľÁΈ˜BoÚńCC{ţ}p9GŁÇ'ÍŘ>F‹ăÄ$•S–.m7žęœě ‚Ě4˝nĄTš•ť ĐE9qfěťUŢvýŻúŮRZh Ž#Â4ÍĚE™’%QJĺĆŤ2O†Űd08qę(66AŁÔdŸŻŞíJâGŽâ'ýʰ„Ŕrž#oűŘíˇůN•Œ)öťč/Eßůň—żĚââ"Ď>űlŮ7,Ëzß4ĎYmR(şľÖ<řŕƒœ={ś$-˚đ’iˇŰ†Œ100008ÓFŁÁ`0 MӉ;if1ńÁÚ4“ďÚ¤iÂÚÚƒÁˆFŁŽďű&tՉVfÄ8č÷(•bYv9Á:H“ÔƒÓćúŔ-öË9^ŒŽăPŤŐJĽŃN˘‡ öéqŐ0?ßBZr‚PŠ$fEKŒYĄR^nTUÍŃ×әKĹ6ś2d~,I˘p=+WŢ(4™‰ůn„ăN°2ßÉ4MHă×ő° )–-B˘44 ´Ö\šrasüř\W'Š$MKďšj l9žä~1ŠPűNcđáŕyޖČđB3 8věO>ůd9ˇ|ýő×YYY)Żë!łÓ=…ŚÓéŕyŢé3AţĺŞKCĆBŚŐj†a.“NÍÂěC"ť;”% ŒF#ƒAž ¤&ŇvzŒfŰmˇŰ}ýNˇąWűXÜŐ*~Z–…m;Ś4É`_Ÿßžçe%Ś”” QÓwÚĹÚíVŽŃ)fŇjcÚX"3AĔ„ĚÔŚC݈ IDATű´˜|b˘ŸEÇ$iŠëXůu)"v1°4ř%+qÝnŁžˇq$ľR)I˘BRó}~ę/ű’*R•…u‹Ţęľ­ş0–2/żš‹§Ävĺ˜ŰĚź˙XŻ×'Žĺ†!Ăá'N°źźĚŸţéŸŇétřô§?͏ücŽ_żÎúúú‰sŤś×ZsôčQîťď>~îç~Žď}ď{ŒFŁň}…§ú÷~S$2ĆŔŔŔŔŕ– i!žçáyI’LÔč|¸ `ľNzVťN“ťĄJÚIŠÄn•S|ŘýŻJÚgÝáÚIâÂű)şvňšÓ.;ůÎ;m—ŰÝż~睴Ýnő™Ň'vă¸ěô5ďˇoŰ˝ŚJN÷Óé ƒƒ‡zÍÇőÜźhĘ7†)ŚŹAӜNfzž—é\8ŁŃePUa“ůÎ ˘0&Ž#,)qm+ó\Q ÂÚÁXPMUúć,jhLEQLŻPoÔH“ÇőHÓ\ő`Y8śŕĚBs†J‚0%ˆb˘8’Ős˘÷Î>Siéިďâ8ćúőëh­ ‚Á`X~ďNgáp@FÜźyĎó8wî,›››$IJŤ5Ç`0$IbŇ4ĺüů{hľššówv´šŘńëˇG]×ݒ¤ľ&Žcęő:‹‹‹ôű}z˝ [ ľäȑ#t:jľ\˝z•~żO†ĽLĄ8lˇŰ9r„……,ëťVŤmQă(Ľ&<ЊRŚi˘Ü1űĹ]j !c>=1Š]}4xiúwƒƒŘ‡ Ǣ٨çĽGcţbÂűĽBFäŁ}ţÜT “G]—ޘIĘf‚Ń91…RhlTš˘u (’í¤%ˇ"23¨(śšÜ†”١ŮlăćqϞççs€ńulvżÎ˘™ËRŹ„&‚ĚƒFh•Ś{rܢ("Š"Ţyç=‚ ŕȑĂY‰•RlllróćÍŇ[d4 ˆ˘ŰśISEEy‚Tš—ƒí=1’Ś)QMܜą,Ť,˝ŮËqi'DĚŹůĘŹż b¤řťřgŰ6Ífß÷yë­ˇĐ*Ų$iްr/"­5ˢ>}š ¨Őj3oĆŘśÍh4" ĂRSýŹjŒ{ńţb[Űݤ0dŒÁYL˜ĹĹiKƒ& ŃúрëÚ4›ń˘ľ¤Yrň%?ĚZĹÝyĆľGĹ{„(˘œuIĘTI˜íŽq†!Mł^ĂuCŇ8ÉIž­dőÖ›ŮŃÚŰ-ŔĽ”ĚÍľXXXšý5jť÷k­šGZ5íFkBăŘŽí”m%ĺî{x8ŽĂšsçňI>A0âÁ,Űë̙3yűLĆnowŢNżćÎÓDHDŽaˆeYÄqLżß/˝S&íöüŽ2ŰíĂvÄ]•„™&dŇÜÜšşĽžďO¨!+Yk44 úý>/^D)űčEĺq)Ú˘?]lżšśT}Îśíœ8S3÷ľ dęőzY>MĘ2ĆŔŔŔŔŔŔŔŔŔŕ#FƲőŕĂśmęZŽqÉd-Z§DÁ$Ž&”BÚHÇÁőXśĂ´~FW÷EíR^LTjhĆKÄěˇ8QDa–lčŘ­Bk6…đ­K §í‚ UĚÖžY–…Vź\vŽ$ĐyěuJ'ÄqśČś,Ť’Ô–m+IÓ|Q,ˆc ťL\*•Š[¤”ĚĎĎŃl6X__ŁVŤ†Q^Â˘ąŹŒŕH’$OTUć¤ĚôśŚÉš­ăŸâć͛YęœëVTcb‚đ)ÇqŢö֖Ď+~w]—őőu‚ (Ă&¤¤žKĚŘcŽ^ŻAůwAČçG•šS¤Œ!c î2śsň7¸ó‹ŚńäâĂˑ vű<)ääłď\íĈÖŕ΍if<ťőxżŸÇ@s=š>hE‰E­ôŒ‰Ł€8N(O„™ŮJž˜L˘PośŤŒ´Ö…ďdRڊ)‰™ĘÇ H’”0Œď;H Pi Ť;„@Ľ‚4USăeNéÉ í[â˘ČŠŠzŚôËŠ˛TŠœą—LšjR•˘ľB)=Aô(5&e¤”H!÷¤LŠ@EŒFAîU’yŻ4u¤´Řśă8„aˆëşřž_úś8Ž‹)žŸ)VşÝ.žďcŰV™Ä$Ju1oŰAŇh4°m‡'NĐívŠŐjĽĚtšÍ`0Ŕ÷}z˝JŠü5ĐhÔq{GăË,o—i˛eÚĎeú5!U”ôŘś+Xś–)UŐ%Ueűë´Ŕó|â8Ş$†‰- cĹ|L)ľí5˝hkĎó¸|ů2Ýn7'ol--RŤeĺRB:Ľď`0ČI31AxůžÖ`Y2÷ˇq c```đ“´8™žŕě-ŚkŻŤÇhúPM߉1¸s‹ĂéߡKPš&]ŞwÍ îŢqŰÉXhŒŹďîqŞ.Ě yš…‡ÉΒfŁ–)ZҘ8 rJŚx‘–Ĺüü<ŸúÔ§xńĹYYYɔIL…¸nmlâ+ôdôő”đâNeЉ Ph|×Ćs$BşF€ĘĄÄ˛˛Ň" AĹ%A2IˆL_ăś&C%JY˘“ŽÖT1öŸŃeĚv68Ž•§CeęĄTĽ™•/ć…ŘÚ*Ű*I… Šö&jŘq”RĚĎĎ3ŽH’„Á ëşůO§,Mň}Ÿ8ŽhˇŰĽ’˘:f‹ű‚ˆň}oâó ˘ĽÚśB CNů<ëôýĚ 9I:Nů9BŤlf{óÇśÚg %KAŚsžio—‚đ¨žĆĽFŐ¤Źä˙gďMƒě<łűžßó<ďv×Ţ74 4@ŕ¸‚äl”gą\$G§ŮąŹ’eŮ·¤\Ž$NUĘŠJ9•|ČRVŖě¤,{di$–‘-iFÖp†ĂáN‚$‚Ř—FŁ÷îťßű.ϓďŇ÷6şIŽsOUŁŃ}owżďűlçüĎ9˙öźżťú%Š˘ěgRđćÖ3Űds5ˇÔVĹXÚvBÂśę’ěżfg~–4@ #M§ÝA,š”rĘčŽ÷j¤q@ŠuĚm“fű{aŸ[ĺŽÓ}7›&mŰŃŁF„A†HaĹ­9;ĺ°ŃHŠߘ¸ĹE޸eHĐlwŻŰ‚ŕt>h­i4}ęĆ@jl;‡Öq%Žă¸ˇŤt:MlŰĂqA¨éř>QßťR ‰ŠŸˆŒFÄHR)ŹÜ;uF †††˛Żăś˘-+—ËŮóřHĚýwÓśžŽÝîjśî1îŢ{ťŰÓJ–î6¤hIĄř`şAóôg!ŽJŻ% cŇć0 nŠTížoˇÜßvY˛mgÉn*OĆÄײ,ĆÇDzVŁFŁM„IrFi(Űś˝%+o ÚhŒŮ“6'Ę_}0Śo}ë[ß>Y–X–Ľ°mŤďř~ČN1’ ł`¤Ű J丟\őe¨?ôą2D‘ŚÓńą,ë–l~úIO¸ÓEt¸Ĺiđnángžoź§g†Q˘¤˘2>ˆíUfŽcő8ćďuœúcöŁďŠ’̝Îý„=Ľ,ő×vh‹(ÉŞń ­fÇv‘r‹dc0B é&ďMůbśŔ´X&…ÔL&™˝ßčHÓîřDFhÁfS ­žnÓhV(ć%ś @HƒDe:ŃÓŢ­t'ł•B ď‡ĚĎ/Ól:?‘چź—'çy ÇA ’ÓEIĺŻN@ŮDž:%jU ~ƒH ”‰0NŒÎ°Ę>JűĹ­ŕĹîטžAV8 n÷^ŰÝVÔ]=š'JŠŹG‘€)AĆò]-)U!J+xş!A°şşĘňňJÖňսǛm„|b<Ś{~vƒ1ŰŤ'SŸ ý-Ë&Š4ÍV\™ŚŁHdTĚůc%Ŕ“H*ÁDźnńć|0ąĆô­o}ëŰxČĆY ~$ ŚˆÜY'ĚqlZ­vOv¸ť"&Ťţóý(ŒU,ja˘‚@śŽÂ0¤P($ÎŐV–ëĆěíÖÓíËšömťŹn܏Uڒ°ŐBŚăî]´Çě¨|\­ň¸9NL4š‚d}@Ś{Ţmń­¸žăŘXĘ&čšďaňƒü€|>ĎĂ?Ěćć&Őj5KôKšU cv'[ Ěöúc ‘Ö´Ű>:!ç #M‚HPëHW6*ť 9×Á˛ăŞ)$R ´yűuąÇDH‰@˘ Aˆď'< 2V ą”E†T*•Lž8—÷J†(2XR‘ł,찃n g"š–MNk:Ž‹Q —óŢm×Ď'öœťý­lIÁ”´Z%áŇĎÝ>M*ůœ‚)éZO)eęřžŸi5M*ѝ‚6JĹäËJI*Ő*׎^eii‘ĽĽ%´ŢNźađ­ŕçvëžĆî5Ń]՗Ëĺ3îŸ-ŁŢ˝Ź€J+€ş?şŠŇ÷öÁ˜žő­o}ű˛éÁáy^?Hřˆ9?śmŃju2&-ݍ3÷Ü"ŁŘˇsŹl|?ŘĘú&ëĘqœ‰ď|p֟ˇ~¤­Q¤{8â€_d*!ˇóLű<&ď˙˜Y–EťÝé1;Ě˝4‰âšŽkŁ,;ćIÁςźfłÉŸ˙ůŸsěřńŒ{@H‰TVĈž6:ş(dLO*eИĆľĚ16: <ĎÉ*l7‡íäƒA7ńjMJšĺ’G>ď`Š(k‰ÖZlSX˘K9p›Ň’#bM%­ –R„Ą&Œ Ŕs=JĹb;quŘÂĂvˇÓF>ů0 ’ŠH)j*Od4ží Eü\,)ŃBýXέt~íÔ&˜‚'ťľĆíÓ[UťÝŇÜiuK†ŮçôĚLÁ›ÔßéömҏN§“;qőM˜okŤŤŹ­ŻŇnˇp]bĄ€Á°˛˛B˝Ö`mmĺĺeĆĆ'Č÷ŕŠž˝4a˛˝Eu;˙ÍvŔ¨űů¤Ď.őҏneŤnĐ4U¨JŚť•vëŰŚX*ôÁ˜žő­o}ű$şqĐbY2sxŇt˜1!śČFˇgHz3ĐŮĎ bâżwd{ř(†„¸­Ë1„nFźŻYł˜”.şĺŔ ´ç—9’ň™Ţ{élűB|T†Š{$>ÄŔqëswO{äóĽŰ ${2sI1lˇŃ´š†ńts\D>*‘I°ą›lœŮů™Ä­A–YMAi˒=rˇç×ă”kŢ\‡ęDěDę(”ĘˆĄ„eßŔôÇi÷yŤ”DëcŹ>ŕ¸mŚr×uđ\7ć8ąÝäyEY\ŤŐřá3Ďtíűe9X–݌(ÝrÖÂdˆŒIĽۖěá‘ŽđÄŁ÷łßƒEŰ!—sCř8ÂRY§ŸÍ ÍÂĹy†ËŠńń<ĎÁľm˘( şÍ­çĎö?!ď5Éů‡Œ!­falá…b!Ÿâß+čjíj¨ńQ´ňš­VE@eRۚŔhGža~Ěć•ďű4›Íl˝ …ŹâłÓéĐnˇ3đ P(ěJ*œú—Ý•†)Ń­p”Vžuˇb§`D nÄŔM@Ľ˛IłŮ¤VŤá¸ľZ•••eÚÍ&F“z˝†eY Điľh4›ŹŽŽRŻ5h4Z4-˘ŽĘ’̇MIŹŮňůnˇ1éľn݌ Ă0dşď­”Úţţn Ś„‘¤%)s ršĹbŠĆô­o}ëۏÁœJŚGRššÚ:Œâ2é˜ >¤Ztüřk%Ž Ľ"ä<…ĽdBˆůîén2ˇTҰÝn'*ď˝­Şťô=s’{ZohB cE‰”ĆŇĆôäO> `{勹sđCÄĄucZ(5ˆVÖô<_#c9Ń],uŹş“Čď8NićVJI.—{GĐÂĐĆĐ ëMMŮä‰â#ÝZę|űnźI㏠|üľUÂkWč\żN¸0ëk˜v;vĐJ%ÔŘ8Öô ÖĚ>œ™YěRaY1Tö.ÖĂöňńݔ†vëíę۟Eúűť_OÍÂXmwŠog¸˛q5ńş 77ĐöMäŻ@ŕ#to$˜8ú3”":pâŤ˙9ÖĚŇMĽ,źŰ3Šo=A\fŠ<žç"„BŮ.ś1~;dL’é¸8^> @w˜ƒ W…m[”Š&'†Ůťgœýű&9t`š™˝ )óH)étB–V6¸zm)V3üŽak_qsy„Éáxy°É՛xv“rޢwni‘Ţ­eIŠ051˙K8śĂääʒXVŹÖąB‘m+,[b[‘Ń!Qž‡čřaąƒDH‘ý ĽŽăŕ9w^š& ä],ě[­VśOşŽKEIŤÂNäăçÜa}}ÁÁAFFF’ö×÷ś—A@ĽRĄP(PŻ×)•J¸Ž‹Ne[­N×uł1„XĄhmmőőuöî݋”’BĄpKŰO7'L†YőGjiËQ7!s÷yÔ]yív›ŤWŻpíÚUjľp Ł… ~ťƒRŠršŒRŠÍÍMÖ×6¨Öęńߎ4~ÄŐ4]¤Á=‰Ĺ—Bzb7ł›Ú^ĘIăűţ-ÜcŰçuĘwăşn˛Ž=ňů9Ď#—ó°mŰś°,;ă’ů ÎĎ>Óˇžő­oš“—T؝Ľ.ÓĂśŐš>ďsö‚áÚźĄVt:iPŠEĂôÜsěŸq),„Ün ˘ľŚŃhđŻ˙őż& #fffřěg?Ăĺ˗™˜˜ŕŔťfeşڝěňĺ˜?ž/|á ™šÁJ-ä•yŸs‹A‡Çmœą™˛˛’í­rń=%ť[ĽłćGdL,/ęű›h˙{ ×ŃšŸÄv÷Ć`œéM˛Ľť˙ՍMţâ/žË7Bđ䓟caa/ůË;:ŤŤŤ|ç;ßáŔ<üđĂŘś˝ŤŒ$@.­źr-ŕúFÄp^rτͣűKđaĆśĆô<žłý5­5­ĺ%šßýÁ+/]ť‚Ů\G„aVm‘r&h% \91Agî.ěÇ?‹÷ĐŁ8ĽꋞúĽĽ%žzę)–––8zô(Ÿ˙üç{Hß.‚€7Ţx!G̀ŃtÝůžĎ÷ż˙}N:ĹÄÄǏçć͛ĚÍÍą˙ţwý|ˇ_ϝ2śg4Ó1źEPŁű}]ÁB´ąFří?ŔýŁ\YDDáVuŒ1`"DŤf¨WžŁÓiţ—żŒ56ƒgďy?Hœł˘¸ž ŁÄ|Lk“¨˛'c$B(l7‡Š(ôŃ:Üjő eŮ(ÇE¨­3- ÇĆsmĘĺăcƒ˜fv߇ćf˜™dh°”´ôi|?`cłNĽŇ`e­Ćš+뜿˛‰ß‰É弐ąLBXŠÖ(ËB9^\ŃgçŠW7hm4ńjuĘ…źƒJwŰ”Ľâ+)Čç]¤´“ށTŕŘ Ű‰9źlŰĘ䁼”ŕÇ׍Ni"žĆxa#‰É~…ąüőűk­YYYAk͍7hˇ;‹EŔ066ĆÂÂBĆw“&”R,--ąśśĆsÔjuŽšç=+Ľ ‹”’ľľľ IAß÷ŮÜÜdppĎó2pEkMľZĺüů󌏏Á-k)Č$ĽĚڐśËY÷‚7ŚGć:nÚí6`hľÚTŤU^~ů ćőęt:4[MšQ‘s]ĆĆÇq;űűžřńç0 ‰ÂřžşŤW{÷˜Ý”obRp3ýÜM&Üét‚ ´Ů)!!•DIIŠT¤Ë>t:mŢzë/^âÉ'ŸĚł‹˙éL‹z[c,lDŁ™´i•ˆ1˜^Đ÷{DîH ł]2~-" ڍ?Ćłž|:­1¤DZyŒČŹ-ɼ㕴[-.]źĚŘř Š4őz“Ë—Ż°˛źÂäÔ$arăĆ <ČŮłońĚ3Ď200ČľŤ×š>ýűçČç=VVV3ՄƒçRRiiž˝Řáĺk>íPăHÉr5bπd˙¨”™¨aăŰ͡>ƒ‰""ß§öúIšßümÂÓo`6ÖbyŐdAŠî>(‘t”uÚčZ…đÚU˘soœ{“ü_ţ îô^¤e#2Y权w­5ßţł?§Őnrß}G9}ęMfföáy׎]ăŔ qóć"7oŢäŔý ręÔ)ÇĄÝnsůŇ”Ľ˜Ý7Ż/ĎĺŢ{ ”âôŠ3źüňŤ<úč#ĚĎĎó˝ď=MF,/­°źźÂý÷ĺ­ˇÎaŒĄT*RŠTđ;÷˝………Œ€S I˝ŃŕŽSŻ×8wîŒsŕ"—[ĺŚ(Џté2WŽ\%—ó˜;p€ąńą 8{'ŕj§ď#X­Gœšésa%äŕ˜Ĺ‘I‡Ń˘ÄR%TFôœK}ۚ~€18ś…—K¸Š„Ŕ ąÜĘőşömCř‚xO7€ĐˆDU,﹕źN+[śIwˇżlVčTĽPŹ„‹Cĭ٤ÍÄÇśŒq¸Ó­šśmł˙ţäďŞŐ*ǎݏ1GŇěě,–eő´ůc8pŕ@"ÜŔ÷ƒ]×˙í^Ăčč(Zköîݛq›Ľ€IąXĚ*^ş u…LOO36Ë5ď”@1ĆĐnˇŠŐj!ÎνîJß÷3 Šť˝'ýlŰv2Μyƒ……ë”JeĘĺr RDšz˝ŤŽyێ[—G144ÄČđ0‘Ö4M–––Y\\ŚÝiĄťTś'TŘŽ1=;é5Ś÷ĐýZ†YUŃÖ÷ˇË‹JĽĂĂĂäźš\Űś˛Š˘”˜;atćŸú€FŁŽm;}0Śo}ë[ß>ŮNYXoőED Μ­ó[ż/X^•áîŮó´˝Ń´Z‚7 ŻöůĎ~ŞĹĂ–plŤç¸{ťěŽçĺxěąœ;wž_|‰ĺ夔ü›óÜ}ř666yůĽW8ó曌ŽŽđ‹/ąoß oźńAňéO?ÁÓO˙€ááaĆĆF9{ö,śíbҌ°ÖМ]ôŠ45–<˛ĎáÜrČĽ••JČř€…Ňr‘”çýĆŐNň‹: hVž~˙‘“ IDAT§lý$ †(ü6íú~ Ľ{@Z‘¨2ňœ]ď[ęĆvť1šÍ Ď?÷"íV‡Ó§OóŘă'8yň$łłłüöoýé ?*•*˙ň_ţ:Gᅬo~óřÚ×ţ:Żžr’ˇŢ:Çßţ…ż•ýúĹjÄkó:Ą&o)ž˜sxńšĎÉyŸ˝ĂJ~˜Űۡšě6&AťMĺOŃü7˙ }ő2DQdކ´˛sý*áÍÔŽ]%ü;üĚ,VYçNˇŃhpýú|˜'Nđďssa‘ŻýßłžąÁwŸú>?˙ó˙ß˙ŢÓä 9”RÔj5:í6/źđ"ŽëqĺęÂ0bbbœK/Ńj59uę­VÜŽő•Żü‡ßuG3×oˇÜLŃ^źŠűkuń$„´<¨DóeĽÁ°É¤|‰śŞÉě•EŹßţWąTŽR„Ół´ţť˙ďÓŠ'ŘšeŽĎ=ű—/_&—÷xőŐ×ř_ű9FFGnÉđn˙śW Ëo65ż˛Ák×;„ÚđÚuÉܘĎßx¸ŔžAĹGOBŚĆôĚ K:kcp‹źhÚôś“Čç"bĐB*E!ç2łw‚ƒű§Ůˇw’}łěcxpBÁĂum0PŠ5ŘÜŹłQŠÓh´ ŁŰV4›ÍkŸŤ7ŰŹnĄ&:¤•6v§sÎs=Œă&2ÁaÄűޞ°-—ŃŃi -—ćú&׍XŽ`` O!ďöŹ”ŒW*‰ŁěždŽÉÉdâ5¨Ł˜äumŁĘúFJSPkFQĚŠ# ŽR‰BSWĚX–˜ˆN§sÇ%­Óv$Çq8xđ ’ĘŚ-2řö\.n™*ň=źqďĹRu˘í׼”"ŸĎ'gx"îyŮäóůŹ}I)ľŁđCL^+śdŽc2îv67ťÉӛÍfĆ c[­fƒ›7X]]ĄVŤĐ¨×(—ŠTk5\×ÍȨcŕ&$Œ´‰ø F´ýdŽÄ­y#Ł# yJĽ<š|Ž'Aľý|ž¨éôRޜ”łŠ›&}-ćÚÉS((”(äóär9ňůśW;ĹŐ¤2Ť6ËxjŒ! ăVľ0Šb˛ů´ýŰÄÚ}0Śo}ë[ß>ůŽ^ĎEšvŰđÂ+~÷[.ŐZœô5ŕ¤_ă0E‡‚Őu‹Ż˙ž¤ŮŞđřكäsŠwŠĽ„DZłšYĄRŠd%ĐFŽ?ÎŤŻźFÇď†3{÷ňŮĎ~š yć™r÷ÝwÓnˇYZZ"|>ó™Oł°p“ŠŠ)f÷Írúô›ŮýZ2î“/ş‚GgsTÚ͐Š%cgÖ|ŒŇłFhżŇBXů¤ Aô´:ľ›Ťä:ßD˜fęrಀn˙;ZęŕäŚPʎۓžœˇ ŇĚZ„a„*qÂGî=ÂččÍf“7np×]w1<<ĚţýqŤŮŔŔ>ú0/\¤Ůlâ¸BH†‡‡łš(Xîw˜˛yîRŠŔ’1ŃÝÇěL˛^QDĐjRůÁ÷ŠýżżóW!Qšx§2€[Ŕ­ăƌW^ ůČż˙ČMNĄg×ßĺ8B –WVhˇ;<÷ěó áş.=v‚S§NsöěY,ËćąÇNđüó/pńâEîžű0<ň.\Œ3œQÄĽK—đ<ÁĄňů<–Ľ(•K,--łžžĆćć&—/_Ą!Ü- e˘‚帝,ŻXáĺĘŐŤ´ZMĆÇÇiśšěۡżö×~–ďďćäúőœ›ăšgŸcdt”ÉÉIΜ~“ńń Ö×יŸżÁŕ`#$›-MĂ7ěPL(ŤšşoŘlęţř1ŮCÚžŃqGŠ”GČxŤPJâşcĂĚíŸćĉű8ńđ§˜Ý;‰TŠ´KÉhƒďŹ­WY]ÝäÚőEŞŐ&AМŁT,P(:\şžÁšË+,­5‘˛L&`‹eRáX‰F ˆ°ˆŒƒŃš0蠍Ćqllžöń˘6^äJ‹H*VKcDŔfŕǀŽeŁ”¤œ$ԓll.ső­+L—˜ž! âľŐnŃéřllTYYÝäâĽ\žśÄĽ+‹´|(ŽR( ăx„tp,éƒ1>QŻM!Dú; WI€1p`şÉ”ś#*ď ‰÷÷FŁIĄĎxqŢ+ň^€˜î÷îôóÝ˙ď&­MůPŇם_‹˘řľ0Œ2š4铒źo)ؑľVšŽ‹ďű=RŐËKŤÜźy“z˝žN‡0ŒŰâżŃfss#ƒ @'71‡Rúu+%m^Z,ŰÉŞŠśsńĽÜ,ŰýߔŁ/–Óö CÇľĎąÁ¸Bˆ˜Ó-öŻôÖď3"ŽÂfŤĺ?}>AMŠÔwÚŚťćÇɄDňZŒé[ßúÖˇO°m•nŠě€:ŃçOž/¨7ä-§vŘŽéń=zÇnkuŕĎž+)—Zý™'Ř7;CľZezzšááaććöłźźĚää$Ĺb‘_üĹ_`ccƒ‰‰ ŞŐ:—.]b}}}űöń™Ď>AŁŃ`hhˆĹĹE”˛8p`?–ełgĎ$űo˙MŽ]ťĆŔŔăăălllP,Ÿ#—ËqđĐĂĂĂ:ÄĐP™œçâ:IŁŐbłRg}­Ććf-㝱-…Ł;ŹmÔxëŠC­ihˇuRý˘‰´ZŘJŕX2i_Ő&Diƒkň‘cB¤$ćőAMË@ËĘŁÝ!$#:ŮŔlŰM*]B‚¤ B(†Čy:a‹+‹mV+xó‘‘‘ ŐŽB´\„er˙D×üíĢ(ćÚą”…JřŚŇ=$•NÁ‡0 ü66IŰá6ÓĘÔ0 ŠTŞŸ8Rj!Ȟ_Úf“śËĽÖ)ŸJš đ<×uŠT*\šr…͍|ß§Z­R­ÖśüPâqs‡ąŃ"­QJ Dœ¨óý•J5!&ŤTٞŕHů^ş ƒ{™.?Ş—äW ĽŠ Ł#xž“€.%$RH ٍDŸÓ]ë4Šb˘m­uʘ¤'Şş}ŕ´'666X¸qƒVť3<đ@Œé[ßúÖˇ'‡ołđÂIÍüMI˘Z™¨˂‰qÉčˆd~!bqY#eL‰0:"™Qllj—4›š0ŒÝÁŇ*<ű’fvĆgtÄCě䧇öC=Řóýn5–´/ŕŕÁšž÷•JĽě˙‡Îţ×]wíxż#ĹgIŽLÚh 㼘,Đěâ||”ü̉:řŻ}‹üŠo˘Ä2ňÚ3pĺNí"͉‡ńŤZË›ç;¨…}TĺăäĆV)Í]Çđ–ˆš.Œ&§Ÿ§QݤŢÚGYĺš˝YyőNćş.űöíËždpp°ç=SSSLMMe_—ËĺěóäääŽăšš­sc6Sƒ›MÍ@Nłe –}ŒŔ˜@‡źzó4×NńHčs ŸRP(`Ýó)œGGLďƒb ¤Ć —°Z§k† .#t;^p˘+‹':ú~ĺ ŹŃű8=`O÷x:t¨çOOLL011‘}===Íôôtś<úč#„aČŢ˝ÓLNNfżoddä–{íÇt=Ś­gÝÖ˝> …BĎkÝď칏ˇ'żs&ý2 ⱙ8„řÉ˙Ęcpĺ$œţ.fă&GŕŽÇŕŘ@HĚËĎ"^z– PBœř<ř8üő_€ˇŢ€ďý)"đQÍĆŰgRJNœ8Áđđśm333ƒ1&!$wřéŸţŤ4[MĘĺ2{÷Nó׿öst:mœĂqlΟżŔŔ@9)—ƒˆŠŧşźxĹçÚzÄ=“÷ďuŘ;ÔwÁ?.űˆß‰ƒź\ŢĺÉĎ>̉‡>EŠ\¤\.b'°AŇîřŹ­­RŠÖŮŘŹŃh$$ŚZƒ0T+UVV–XY]ĽR­Ńń#P#„ÖFĒِđľBGHBTôÚĆ'‚RĐÄ6BZ*‡P˓DÚ&2iM¤##ŹDÍIę(†*´ÁH‘e˙E×z°/W@됖ߦąWäXvĚK#ݸm9 C”"#ů•I•BZýjb¤“€"ݒÍŰŐ}âu§î¸šŇ;Š<~<ŃsoZGW§|*ÝŐi˘%mSZ]]Ĺ÷}0ąĚsĄQŻ7ŃF٤DH…´mňůŢśą(Šh4Ôë üvă’ů(Ý\Cݝ鸧DÂٚ’ôTót˙xx˜ĄĄ!rš\—ď'bŸÁ¤S9%ݍÁ–ë¤@Q6/ˇž_7'ÖšVŤEŁŃŕěŮłDaóÄĐQH­Vëƒ1}ë[ßúöăbA šx9ŕÜCœ@Kzˆ•ŕž#ŸyĚĄX¸´Ú†v'U‹ׁ|NŕĐh^xĹ祓ivJ†půšäÍs!'Ňärň#qĎBF‹Şpů űtgHG!ĽkäŸ˙M”_×"żú"łPőçż~ÚŤŁ„›*x)ž ršźĹÜ˙„áý×QžF(eZÄE•°6ˆ˛ a—?°x—ťĹł“eÉǃÉLC­Uç7ţ‚ęœÍÔ%šĽfď ˙ĘĎâ~ů+\b‚ď^ˆ¸|^c[‚ă3GxňSŸaL}ŽţoXŐ˙ÚO MJ$Ť­ËtVżEX>„“sz‚¸÷:vŁŁ#|öłŸšĹü°ćűą&Ól޸örý:Âr_ţ˜ž”…Ů{/o>yę7ŕúY8|¤‹řżƒxíĚż Ÿ˙+0˝ňELŽ€ř˙ž ľą g^%úܗPšů#lŰćȑ#>|wdvĺ‰ÇAë­l>’`zŠýű°oßžě5™”ayśŕ‘ýGŚšČť‚‚#qŹ>QîÇŒéř!‘Ö8ŽĂŢé‰D–X!ŐjőÍ*KK돎Uiˇ;XJ’Ďš¸śd˝śÉŋ—šxé2›haŰŽcă8ga Úf„Čx Á6HĽCĘAi4R@Ĺ.Z.ŐÂĆ#2€Ř,G˘Cƒ2V,Š4ív­5–mĄ„B%\p–WđőHGAŹäćKIP+0脧$ć/ą,7Ťjˆe–Ľ’9ű%1ZK"ÇĆkEĆź1‰”t*÷mŮ=Ąwh˙ŸTy°$!Ő7ÁÉák‘ Ďˑó<"ŤÍĽ*)8†!ëëX–˘÷(—cŐ¤´š&ÚzŤ—ŇýOИ ˇŐjBÂcł]B;]3ˇ´iůzFo]×Ögm;”ËelŰώŁÖi˘D› lŮ„dŕˇŰ¸÷´.š\ŽË—/Ój5ˆ•ĽÄu˝l(ű`LßúÖˇž}ˆN^úšŐŽ8)duĂJZb˘ÔŃÁĂÇmöLnĄűžˇó!ăyP* Žľšš¤™żĽ#TŞ’ó—B>uOˆçЎ ¸śŤ&lĆލsóNéö—vjńř Á‡Ű/Đ~^řŹő5„€…’>alIIžf<řu6ë—¨5ˆŠ„Ú5ËŹvZ†{˙ę34{”eČËFEíú'vť>Ă÷:&ďôó˝ă˙ŁÍííżw§y÷>Ž0έ]âtí*шĹsw—Ůťćă¤Á´—ĂţĚO ćçůúY‡ßz9`šŽ Âx*|űŹć÷^“üŁ/ŢĹw˙Ÿč3 §ý:čvŇܔ>Ł6Şń2aóś7°Ł2SęŢîÜŢÉÁý°÷Šěďů>&Œ€FöÄ*5J! #˜\Ff`˙qğýKLaÚÄŔúżůŸ‘G†Ą¸Ş~3: B"˘üXUźMđÖˆědÝ/ugó•?EďŽ"p-kIF ĺéÎĘ ’Îi?đéř|ß§Ůjłź¸ÁÚz…j˝AFxŽ…ëڔ ŤK7šzíkkk4›MڝtΉD˘ŘÂó–÷nŠ šÍfv0şŽűށbYćáv‚Jß÷‰˘hG Ç;aŠ![.ĘRčz•`s,Y,ÇŐPI[ÚČČwß}7/žř"őz3‘~V´Ú Çśńź¸jKI…ňâ3*‚Ě/ô<!Őj˲{™nŕ$­Žą“סˆ†%‘(sEŤ~ b)+S€J×O÷ř`Öo\,yꊧ˜ššB)ĹáÇc‰ÁB!+AmľZY˙íŘŘ ĚĎĎóŔP­V)‹Y–$ÍŔu›çΝăʕ+?~œŃŃQ´Öllld@A§ÓĄŮl2<<Œă8T*:ĺr9ťŽfłÉÚÚĺr™\.G§ÓÁu]jľWŻ^% CŽ=şŁĚĺíWR‚ťpoŁ„Œw4ŔŒ*Č9 „qÝÄȁSäöţ_źţüݰpöӈ@Ń:ýiđŠŻüĘőM Ó1ÄÜBEDÍŤ˜áGwĺ/ŽŐj|÷ťO“<řŕqZk ‚€Z­FąXäÜšs„aČC=Ô¸|ó›ßdjjŠVŤĹáÇɜ jľĘÜÜš\LŘW.—X__Ď2l§NâŢ{ďe``€őőuőc ‹‹‹üţď˙>|őŤ_͸jž˙ý§iľZ1ĄěÁƒLMMfDłĺrůŽs„aČůÚUBa"Ăü Ăs‡ĘLmŒ’ü’y†řćŤ6šf7܍ůuÍŻ>đüľĂ¨ÁĎĂň7Ý%=.á&ş˝@¤5Bޞ! ÐłgĎňěłĎ266–ń€ŕĐĄC †!ŤŤŤ P.— ‚€o}ë9qâů|Ž‘‘ęő:ľZ‰‰ *• Zk …BbÔëuhľZX–•Źšš\ŽÍÍ ˘(b`` [G###cxýő×ń}ŸĂ‡344DľZĽ\.ăű>ŤŤkÔj5^}ő$Ÿţô§9{öM|đ.˘; ȈÉC˜Á ¨.ŔüÄoücĚĎýpđѝ[Œ# IDATX]­]…ďü+xč§I+„™Ú‡üˇ˙=ćĄ'ŕ¨7ŽÁ˙óĎOý)„!fhć#mçmďz˝Îňň2J)†††Ţvnvƒ¤ÍfÜ’Ďç{Ţ˙Ł}ťýlETŤU”R”Ëe*•JśOŠ>Đt‡÷‘ˆľľu~řĚËĚÎîax°„$bu}…ŤWŽsńŇejŐŘVRĄ,•ÍŽë&Ŕ‹G>—ĂKţďy.žëຎëap脒ľŞO3°°Ć|+AÜänľI”% u„6ŽăŃhŁ "K ”!a!,—ČZÍ&Ž\§ëş8śŠ9_Œ!ŒtҒçâ&mu–eé(Œ_„Čp×kT7 4UĆÇ™˜fxpÉąQîÚ?ĘŁ‹Užőç§9ýÖ"Ae@śLř<Â0¤ăˇšS=Jie…1Ďó20 ]Oq›Y\ńŃpwKFÇď'ŤvÝUKËÚj'ÂqA)Ź‘ ˘NÓ¨Ő6ˆ‚€Đv1BŃ #öLNphnŽ×O˝Ał' ,Ë¡š­6–Š ĚÇÂśŽëáy^ň˝¸'>ę´>Tą:VĚ;#łj˜Tn;őű¤”()ёĆ÷; ĺň–mc’¤ďűٸmß˙L2GˇÇ ´€IŸU7ˇMJpŒŃ ĺŒ Šâ5ĐcúÖˇžő퓿ěĆřM˝Ą0:AúeLĚ;9.ł˛řFĂpăfDĄ ™šˆżE°ź˘ŮŹjŚ'Ľ’@I‘Œ)VV5&‘űk4%­śÎší–ËĺřÜç>GŤŮâřÇq‡Ë—ŻpăĆ Ž=ŠďAHłŮâäŤ'9xč`FjŒa~ţWŻ^ĄT*qéŇe&''đý€+WŽRŠl˛źźÂ#<Â͛7DëˆC‡e×Ňnˇ™ŸżA„?~œvťĹŇŇRJ<ĎŁZ­%$™šűîť8sć žď311Áý÷ߏ֚3gޤZ­ŕ8SS{X\\äŢ{ďĺäÉרT*Ď=÷Üó#hbyŃĐH°Äچ|€qÚś sy6ZűŠwŚhtö˛č î¸H!:W^ż—ńĂĎSzd)L;mú×[Ąäč°w,ˇMÉîFFF˜ĄŮlňć›ob Ap_šrß÷9věśmoő Ĺc=Ć믿ÁÚÚ:§NfϞ=LNN°žžA]`zzš×_ű￟łgĎf ÂŮło111ÁkŻ˝^Žcǎá86aąşşĆŘŘxZBťÝfppááa<ĎăÚľëŹŹŹ°žžÎWžňSwŒIU&–ý„ĐĆĐQš÷ç8zÝchQc?t‚K›pf!"Đ]™gśQř!üŕbÄrłĚtá8RüNÜ2Đ%{-tĄ73nÁnłm›ŁG˛źźĚĄC‡ç‡?ü!•J•ĺĺež|ňóźöÚh‘Ďçš÷Ţ{q› špážç1<źĆââZGÔë b^7¤¤”źţúëüĺżü“œ>}ŠĄĄa666Ł\.óÖ[gQĘbrr’ůůy …BŚÄUŻ×“Œ~cǎń /đĽ/}‘k׎QŠTÉĺrALfxúôćććŢW0ĆŰG4ş3˙:"hÁé§nóľ “‡ Ý€vsăâďC(áÜiŒaeß ×ŕßţsğ š5ŒčąIĚÁ{IeÜnëęüůó\šr%Q„s2iďîě.+++ĚÍ@)Ĺüü<žp×][{ZŁŃd}}ńńq<ĎëiWËĘéՏn~šÔnÜXŔq&''n!ÓüáŸexx˜Ç;ÁŤŻžĘącDz1˝gSߜ椲,šÍWŻ\ç\§ÍęĘ"őFŔ÷ŃƐ/°“*×ułŔ5Ÿ/šœC.cJĹ"ĹŇM_píF…ů 5Ş ŸVG†0Ôas~°Ő $\.éGw@ž0™ŃńۉňŒÂQÚD´[>‘6 E Çş9śíb[NB˛Ťńý:*Š’YťÁ˜€F3JŔ&‰i0˝…äě:9w“ůů%JĽcكĚÎěa˙ţ=Œ ąwj€GOsîÂMęő62 ÚĽHĽ°l‹|FŘŞAčřďżGk6›üáţ!arđŕÁŹĘSA ęő:őz=KůžO˝^π c řžă88ŽĂĄC‡Čĺr™š™&Âv›,Ë"*”Ń^Zľ‚ëظś:zs™ƒ#EVF†šąźFFD‘Ć÷cŔÉś-ÂČ Ú ™´Řś…ăŘ‹EŠĹ"ÓÓ{céóV‹Z­ÎĘĘ*zƒJ­'%P/‚ đRJŀĽJÁŸÁĄň…"B|ßÇ÷ý TN÷Ęԇx; ş÷őÚ“ČdşťÁ˜ŘWH˛^ĆdR×ƀeő+cúÖˇžőí“ ÇěŔŐiAvóŔěŒDČ­Ş˜ç^ňyăLČŔ ä'˙’ËžIÉęšćťOwX\ÖÜ5gńWžä ”ˆ%U§%oa|°„‘$Œn#“@|ř­­­łźźÂĺËWFkƒ1‚—_~•={ŚxđĄ{úskľ–ĺpĎ=Gřć7ŸRЄֆĺĺeŞŐ/źđ"÷ß? ‹T+U&§&{PŰv˜™™Áu=nŢ\¤Ůl°şú˙ł÷Ţ?–^çççœ7ݜ*çÔ9°ŮÍL*™¤%‘”fdaÉc 0Ř1v˙€Áţ<ż,fƒĹ,Ö Œ!Œ­Ăز=Ś"EIT3´Ř cĺtŤn~ăŮŢPˇB7›b“j[őîşU÷Ö˝ď9ď9Ďó=ßçű]ĽŮ ÝK*• ŕŰţäó9LÓ˘X,Ńnwđź$şví:Ď=÷,Żžú”ŹŽŽpŕŔŞŐ Ęĺ2š\–T*őъlÚШ LÚämŞkc>ÍrŽW/|™›Ő§°Ő _F5ËĄřôŃ´›Şł=x4R` ČřЖ ˇQĘż§d ĚÍÍăűkkkôôô°¸¸„‚ńńqšÍ&ŠTz[vłŮćťßýš\ž™™in\żÉĄC™››§Ó邹šyJĽ"kkkĚÍ-`Űz{űF×M~đƒrćĚ Ă`ff†B!Ďĺ˗cee•k׎sřđ!2™ Ÿţô§¸}{–……EŞŐ*J)VVVyă7xńĹL lßAů>JřŔjVňĂCym6čëfá=‰ŻöśPW]_{žĆ\Íd$;€ąɖŤ>ByI+Ŕ6ę˙Ĺ]č†5Ćľk7h4šüĂß˙N=üPd5>Fš\ŽĆnßwšző*€ƒ‡đć›oqćĚ:6‹‹K,//á8/^Â÷ÚíKKË\źx‘ĽĽ%ňůşŽS­V9qâ8ŠT*J|M&&&q]—ëׯsűv*lll˛śśN.—KX8ccŁ |Źú?F&Gsě!Ôť˙v\ŢqöŻŕůĽĄ˜ůÉ_Áţ÷¨–€áŁđďţ=œ~¤„łŻ ţú[PŤ†ŽWş7<Ő?„¸ Ë%^dž††9~üžŻxĺ•S­V9xđ ů|ž×_ŢŢ^lŰćÝwßĺßř˝ČŽ<Ô`řŢ÷žŸ„ƒƒƒüä'?ĺů矣VŤQŻ×1M“ńńńˆ]vœwŢy—\6NŸ>ÍŋŠVŤĚĚLóĂžBĽ\á_~ýkIkhÜZvůň:ČĆĆ K=ęÜ}Ÿ}@fgx>l4$B‹EŠ<ĚTŹ0|M L#ăMY1đ’ÂJĹ@L†T*C€Żt6}ć/­°žŃĄVoÓluÂÂV˘â7ˇď-]םnáÔ¤ MĽ\!𤆡¤Ź Čđś°,|Ö"Ÿł(—r^ŔÂrŐjƒfŤƒăy8śî+‘F‡&5„ $e˜_„­ >ŐŚF]Ó0›–`n6X\m1ˇTăĆÜ #ĂC ,Ţ|gŰ Âœ&Z?㖓¸ŕGě]Lčâ6ĆJĽ)č86š\~ŕ™N§Ń4 ×u"ÜCă˘?•J%NDšŚą°°@&“yŕĚG%ś‹+Ľkë HesQŢŁ0u•ÉQn68(ö{lÖ긞‡ˆ€ˆ°5Őíj?¸^čŚi2y\× ƒ|>GŽëbŰ6őz#ÔKęŘÉőu]Ďuń„Î)†ŠÓŰ׏Ži ť:fĎěu­ť[Ďśî IŹw HouôŠ. &Ô*Úfą­T”×*” ś41hłĆěÇ~ěÇ~üú@4o4áŚ28 “œ$`n!dŔ8ŹW†%›ľ€•ľ€Íşâ揿­eŠŻ7dĎx~˜ű„Â{wń °”’ĽĽ%JĹ"ét:qń<—#Gް¸¸@ľZŲ,´h#UJąşşJ­VĂśm Ă Óiă8.CCCId™&ËËŤœ8y"aihš†i˜ňŹ”…çzźűî{<öŘŁ\šrmx3™,2ŇÝ{óŰ躝bh˜ŚÁĘĘ JärYΟ?ĎÚÚ›››ô÷÷ߗqR<[GŮ&"0 ÝĘ7PxíĘźzĺ Ƥň膅…‡%|,<ŒŔĎĽ]ő%AÖ5”ô!p ‹  ďÔĽ‰Î嘘gxxˆ—_ţ.ƒÉľĎfsLMe8wîO=ő$8Ž8ɈmdqňäIzz*XVŠ|>O:śXdłYLÓâŇĽ‹<ôĐ ŢxăMX]]Ĺ0t|ßĂ4 ňů<ăăcŘśM*•BJÉüü?|Š7ß|“ˇŢ:ÇńăÇřîwżÇŠS§Bpűö,ĺr‰žžŢD“dvv6iujˇŰôôôűz;9Tôßůa‹×'aŇw0ľą+Ržě,Lc›ŻK÷A9($ŕwľ))ZôřAł-—é•Ϣ6=IĽ§‡ŃŃŃ0qNĽĐ´đgWV–I§ÓH)1-‹L&KĽRaii Ë {űĽ”ř~ŔO<ÁwžówüÎďüľZŠŠIŢ}÷]fff°m›‘‘˛ŮlÔ:‘IZBm§6­V‹ŠŠILÓLXKšŚ#蚎ëzčşAŤŐ˘Őj‘ĎçX\\d||œĹĹEŚŚŚ>ňÝ%a˜ŁŹ 4×#Ĺl t#d˘~ rýĐňÁvá…?@̜„t*¤ęJ „R!+&›Ă?pŒ´iîŇóé“âDüÍ7ߢZÝŕřńc‹%VWWyĺ•óŘcą˛˛Ę ŸÁm'ĺJÜž=Ë3Ď<Í­[ˇY\\btt„z˝ÎůóďÍf˜Ÿ_ˆ„\ ĘĺŐj•Ó§OńÚk?çâŋźőÖ9ňům[!: 50uÁj˝ÍÜĘo_ÜŔötęMßWX†…ř(?;€ľ%âű|-ËâË_ţň.ő¸Čď›Á­'NěpҒvęršœ´Ű<ˆƒq>ĺű>N‡\.aböL 5ôLŽL*ĂpŽČi‘âő×ßH4äś@ž­VŽđłG-FšŒr]'Í5T*íQ=ą%â­f‹ŽÝÁóB "ĽZbĆşjńď ßFˇč}Ź?N¤;´Ě$Âë"b¸~ ?ŘĄ‡”ńűŰ ŇÄkí>łűąűńkRH#€ŔB JEšĽJ!`r\cnÁ§XŒ …Éů@ŸFOYRoř> Łi[‚u…œ@Č­ç뺟čĎÜ)4MăĐÁƒ ENž<ɛožÉŠS1::ŠmŰ,..rňäqž|â1.]žÄšsç8qâĂĂĂ!`’ÉđÚĎ~ĆמöŐ$‘ń<ĹĹ%žôĽ—(äó”+%t]g` Ÿ?ů“?áw÷wI§ÓôöőÎ¤˘Ŕ€ÁĄAΟ?ĎńăÇą,‹bąˆe™<ţŘ#ĚĚLSŤŐ¸qăăcĄlĄPäÉ'žäěëg9věSS“8ŽĂľk×xâ‰Çčçňĺ+´Űí;ŠÓŢ+ ăÇ$đt¤çC`"°˘QmZŹ5<ěl ĽűčZÓ×Éx×őąé´ŃŠ˘5Â3PM=-T[ ÚJä¸Űé`*•bjj’ršŒŽë<óĚ3|ď{ßc żrĽ‚Śi\şt‰/~ńó”ËÖ××yůĺď144ș3§Ń4G=ĂääDb#yôč,+l‰¨TĘQ+KJĽ‡çž{–żňcFGG¤cŰ´Űmţđ˙€łgĎrôčŠĹЊűk_ű*ßýîˌŽŽ2::J§ccš&żńŸăŐW_%Ÿ/đŇK/°°°Č͛7yá…/&˘żq˛Űl6)>šľˇ’Œ2ˇő–+ a ž}şŔ‹ 7˜ě9…a€ăŠ”Ůč HYŠ™š> R YôĘ‹ž˛°’Äp/0ćŔ”Ëĺ„ýbš&şnP,–řĂ?ř}^ýÉŤ‘†L… đ9yňx˘ýó™Ď|†Ő•UJĽĎ?˙,?ýéĎp]—Ç ŰścbbœZ­ĆčČ0s.\˜çsŸű,##ٜ;wŽfłÉää$Ůl–t:d‡éşÎôô￁ĄĄA†řşEM¤Řě(„#CAT)ĐDŠrĆĂ25Ňé<=˝yňůľ–Κ÷¸97Oťă&Ŕş”:BH4ŠĄ˘Cą­înӈ—ŁřÔ>t¤!˙6@ăؘ†‰aşŽeé ôć9yl„“‡†č)§IĽ LCC×d ĂćŚÇúÚ&“#=ĚLVřÍĎáÇgońÓׯ˛žŃˆŠf°<űěo$'JÓÓSHM"…äŃGĺGŻüˆŃ‘Q„äó9rŮ,SSSf˜ŕ”K%‚ˆ’,ĽFŁ^§Z]硓á8.GĂ0ÍP˙¤ˇ—JĽ’$J)ĆĆF“k'B[oo/Ǐż/kĄ"<ˇršƒ'0—Ž˘ąšŒ¸ţxŹ jůüčۈ7˙š ę6|ýßŔđ8iÁĽw‹óŕűa‹RßúĚáíżkÍMÓ(‹dłY Cgp°ŸŮŮŰ\˝z•ááa666xď˝wčëëáŔi^}őU666$›Í`Y&}d2Ą&Ś…˘âš\Žz˝ÁkŻýË29rä0žďĄë}}Ňé˝˝&&&¸ző*?řÁ÷9qâNsöěYJĽ†a099‰RŠŃŃQžúŐŻ˛žžÎüü<Žk“JYźúęŤ<ńÄwiĹü€ĹmßÚzĎ9ˆpĎCJü Ŕs<¤ÔФ`ĽŽQm nŻ7)ÚvVÇŁÝqńźĽ4 tĹb‹}'„¤ťŐą›­aŰv˛Ç !$–1Őt‰ięä2•RšR1MOž‘Ą2ٔN6­ňŃd‹ůů†GɤňśáůĎĆffËŚŮ^ÄątĂŕá#eŽxœ‹WWšpe‘šĹ M!dhwí(4ś-I)Ń5 =• ?ƒá5ŇHXžë#E@ ‚¤ő))xťÖG]×ɤł]lĂűqŔłšóúWË<‹™ąţ‰‚Í͍d=‹EźcśqźĆĹ L7ÓÍ|ĄV;ĚĹ —pœ°ÝQÝ!3Š!5?Ç!œBn9Žç­”‚ Px~7ťE$SżcŰt:N¤Ó#ńîű„śíGÝö֚Žc˜)+…ŚëŃőą 7e|ßßƀš†čs‡šŸÓpŒŮý؏ýxŔ˜\F2<¨X­‚ď‡gHÍVŘăŇ=ĄŮRä˛+:öŁďY)A6€FSĄĄ€o@ť­w&)Ąż' X¸űéN\„ŰĄBjw>5’šĆsĎ?Ÿ|}xa\šř(UĘźřŇKÉ×O=őÔś _ŢŁo_űÚW’$dë3iŰŔ–ťzýRcĽ‹éŠAęéqňë‹HÝ'ôČ `lĽÎ_ĺď>ÍZÝ'ĐŰ8čŕ ´äƒMŽ˝Á€XAlHČ: T]Ř7‹,ŽÇ<ÜťŽSœ*hşĆnÁCš-•:třĐÖó5šű“iťSáäk-1{Úö=…ÚEݖRbYť…ď>iЎŚi-Móýĺłʋ@ÁˆĘĎ?Źüœ“gřú#łŢTœťíăx*aH9Kđ›Gu~űŒŽ˝ú˛óáľá q˜şé`ô#RcwtŰHŔÄčdOíHě3 TŃiyě̲sţÝmnî,şÓďZéŰĆćă´Ňž—ľP‰ŽřŸD˝űw× E{_ůÓ°ÂĘÂ埂–E}ő߂#á­7ŕ?ý˜: Ľ^Äwţ V—˘•tŽ&—ËoÓLÚ ěÓ4Ó§O'_ňĽ/˝´ígwÝGăăăÉż= Ŕɓ'8věčśç=ôĐÉm_ONNđÜsĎđšĎ}`Wť×ŕŕ ׎]K,ČłŮ,ßřĆ7"0>ËŘŘO<ńžďłśśśÇš¸˝ léRȨČsńŁÂ°ă(ZÉĘF#)Ă?ąthEQ+ąÖ}űŰŔÁx­ ‚Ę)ÓŔ˛L2)“bޢż7OO)CoŽJ)MĽœĹî4¨TĘlŹWi67 ­Ł ¤Ôk 6ÖŤäsyÖŤ,-Ż˘ëA” †‰SŤ(t*Íă§9z°Ÿ W–xóüm–Wktlç…íEń>Z*GşˆKő°ŕ–şŽÂVß÷đşÚƒâ{OÓ4D䎲îcŤë¤Rf˛V󁬛íßŮ[ ńɁ1ńŻbëëřýx^@ŤŐÚ҃érŠ™Č1č çvë˜ułeÇIÜ2ě1\Çĺúő‘fÜ˝źĎpf _l¸Ľ”]@˘Ř}PK­HۆHŤĎ­-4FtíĄ[Ěą t#şĄnƒmŰ8Ž˝ ŒŮ‹Łś(…ż2¸mŒŮý؏ýx"ŸÓ˜™Ô¸xŐ§ŮŇq]ĹOĎş¸>Œjčş V‡w/8™ŒŔĐžŻhˇś'Žęň ׅŮyŸ7Ďš8NX\šFŔ䘤TŇ>0IPř*ŔW7ISt%şÔЅ|ŔG*Ljҕ˟:DăOŽĎťh@x Ýőůtę ٌĎ­CÜô†iŤĺ2nŹrşt…“Ĺ díĘş‚M% üvŽÍŢI˛ĺĄč$u/§€­Ü! P O¨;Ś÷ˇ(“4)ф@> 'éĄ(¤äôŕ1 WłŹzöśŐWUťĆˇŢ˙+ţčDš˙ůكźzYç͛K5…!a˛WňäŒÁgy\_ů>'Ť˙Š:QVź5o&ž9–™ú€™Ž ]Iî6Z÷sŽJšĄçou2R">ŽoŚ‘n;'­ÎÁwţO8ň4âŮ?‚ƒO˘2e„őÜ×áý_Ŕßüň[˙7tÚQY¨@“¨ÓO"#Ü;ÝO;‹Œ?ˇ—đú‡+°~9€DÓ4FFF>$“RňŠmĎń IDATO}jßŢúc*Ž}?@ TМȄ…›Ý,ÎpQ1ď†BŔ !"-Ž-]hşÄ2MŠůăĂ9NŸbzźŸţž,íVNŤĂÂÂ"ÍFĺĹ6R‚mw˜%“ŁZÝŕĆÍYtCçý÷/ŃŰŰĂňJË2`n~žVłĂŔ@?N‡l6‹ď4›-fçćâŮgđŮ'rö7ůŢŤXŤś|•hr„axč!#„Iƅśďăů~biłe|ßO˜¤E+T[˝OcĽ"‹ůttMď˙úôńĎ7uÇßkĄC‘ă8‘ČłÚnm…Fƒ ]–i6›t:ňů|ć!xâ‰'ń<ŸŤWŻ&n^÷´6Ćďą p ­ö"۝bÇ"Áv6XéťěÚ ˘ľmw{iř9]×Bŕ-0ĆĆó\<ĎíjďŰ:ŒŮĽŻĽöޏ?ŠutŒŮý؏ýřŠ”ÎÁiĄóWojř>\źęąQSŒJÎčŘśâ÷˝ŁƒŽ ü\LFGŻ¸rÍçú-ŸĽ•ßOŽzĘ>GI2ăŽi\¤nzmĎĹ üŽäP$}ť[Śż{œ;ż§śýkłýč%uŠ‘Ő RŇ@"ďC¸ŚúŔßďßFʢđ…‡Xůˡ6jhŕ{H_qOčט˛VX1JŘBǔ=Ú&}f•tЁv¨ŞŹ ŻŁmTPŸĆĘW'­;Y:z* éŰ´}'DT„ n4V÷Ň}ż—@°şŰXE?/…$­dőP+GüŠî›*NÇ{FxŞňłđ#Ŕ{ĆŁď۞Åęţßóßâ ӟĺ+<Ƨ§¨ľš€ž|€ŚÍńňp¤őˇdS‹áçzřZ $žVÄÉ>C1Ó{‡b_á+EËwhxü@DsMjw‰Ý×]ÝÓv‡cJœfĄIq_[î÷xn%ú’Ôŕ$­žƒ[?GÜŹÝB)ȖÁH‡vĽRC+ČĽh5Áő ””¸ŮÚÉGš~Os'jľKKK8p i'q]šš9Š…Dí^A°´´D1:żÓë/..’ËĺÉf3Z{BJyOBÖBˆ(Rž/ţ{Ç9Ą|´ˆľ%„žąşn{ť…˘*jľˆĆSh ¨cDĚ´lƤż7Ď`_žJ–ţŢ…œ…!Ň)ßsČZ.şŚX[[…ŔÓý…~ڝ)Ëbyeĺ•U„ä YršLMOŕű=• śmS,ěŁVŤłşşŽi8ŽÍäȝN›LÖ˘XĚ#„OĄá3ONshŞ—|寽qŃa‘D…°łÍ źÝÎhčbŢŞ ¸B uŸŚŕŤDt1KÔďť Pwl>iP3ş.1›%“É$L—6ÎÝî}1ó%ÖPńźp-ět:4dL …BâĐ??ŸĎńđçđ}ŸŮŮYÜŽ÷p7Ŕh×ú˝cçŠßŽżĎ=ö6şX‹;GdGÎ[a‡“Gi)ŮśC,&íűžďmî_v1;5rş÷đbą¸ĆěÇ~ěÇ~üş2ş.™ˇ8zČavÁĹśM|Oą°äł˛pţ˝P ąÝQŃ)ب„ŞéŠżýMS8x^,vŚ0 ŸCÓ.‡0tyÇ#P5ˇCĂë0_[ĺőŮ÷)Y9=BÚ´şœ~šSáť=W)p;đ(‚Œ4HÎEüţ5]Łgj„Őß’Í˙XGT}˛ů6š)Ŕ“-ŔІ´ƒZ=/ J!ÝĄ4”+˛$Ž›ĂmW¨Ÿ>„yřz*u×ë hř5§Íz§ĆĎnžƒŻ>5ńĹt.ěÝ'jyšĂ•Tb‹™´˝$‹Şť€„­?9=…śe˙ńŔ„’Ź™ć_úÁőëýĚÎÎą^­Ňétvw[GďvDpŻkß6Ŕ¤+Q ¤DuÝgĄuv؊ĎÉđÚxQj[KŇ^ŸG×tĘĺ§NÚcöc?öc?~}Čd,žz´ĹŰ—Žš8NxÂáŕ¸;6)B‰¤ŘVž Ó ś9B†TgĹčĂgž’d2fdGšwţŇń=ęžÍŐľ9ţňr¸oœ…Ć/_=ËhĄŸ‡†płşFK}J¨Ć1ítžśJĆĚPJenĹĽŐŰôfKœ›żŔçŚ iË2t”đĎ÷xkáOŽmßĹúݲ$¤@ˇL&žô8W/-Ŕű^P#›m˘›RóŔ ZZ€AHQ’*´Ţ%ü;;ƒăőјÂ}üiz‡†‘w9ĹBŕůmßćÖć"˙őÜw9Ü?ŽĽüĂĺŸ3˜Ťđš™3\^˝‚Ą|OX ˆFîGýäśç˛ÜŹ2œďIlQ›N‹K+sT2yrfŠrŚ€Š* nˇXiTé˕)§ Ôź)Í@ }ËJúŞ35Mcr`œŻŽ?Ëšőn3¤$'ɘ ßełSçfm.iç S9|ib‚ć;'Eĺ I 4JŔ@ž!÷n#q†gÓôţ÷}‹ńr?=š"go˝ËÍl™Gǎ#…âěí÷9=rRG‹ĆH)EËíŕ+Ÿb*őé+j&Ővśk3U!ŸĘŕů^Ԗ$ą}‡×g/đŠÉSÝWR#Ľ™,hş0L䣿EűÇ˙ŠĆŇsślŽ×n¡˙Üž ˘€řoŠş=‹rě­é'^ވó•o˘§Rp‡{ig TŔ͛7™˜˜äúő븎ËßţíwĐ4IłŃdhxˆsç~Áëoœĺ駟ĄŮlRŤŐšví:WŽ\Ľ§§‡Ď}îłüŐ_ý%BÖwzź'đéxçć/slpŠÇǎqiĺwńg<öä1źŔçęÚ,›WŤsÔ;MĆJ”Źď,]cşw”ďź÷*e+ϋǞć —é˖¸şśŔ‰Ái^ž|–“3œ_¸‚Ž˜ä˝ĺ›4í&ď,^ĺĚČat]Çö=-ˆŘż’Ѹ§ńŇLě`…Á?x–Ľ ÷‡W°× 2ů–ĺbHŠű ¤ &×1°7s8v™ö‘ę/|ŠŃÓ'0-sĎÓÄîDËÜŔçőŰ868ÉéáĂ؞ß˝ý]&J(W×f‘Bňł[ďPNĺŠd dŒWŞsŒćű¨wšüčę9^<ö +­*)ÍdŹÜÇŮŮ÷˜é&k¤đý€M§ÉS'˜Ż­raů&nŕóôÄ ŠŠ\ŘŚ mńiPj;ŕ^“ąű}OI)I›/ű Ž7fůţŇYŐmßšEQ(lßI’˛´ řb‡ă‡´ O…Œ?‰Ťň,[żOďŘgRŰóţRJá>Nŕqöö;Œ—úřÔäĂ^ž|6ťD€íšüđę[¸ĎrcĄB‡{ÇyůňYz3Ešn›ëŐžxäI.-ßĆ \†s˝,5Şl´käSYŢ[źĆz{“ÉňšÔ¸¸z‹ŸÜx›§ĆO K/pƒ€”ä7ÍB uƒüč kżńo)˙đ?‘޸‚p~ů>Ź/ÁŸýPWĐaw9ŞJ‰›/˛ňĺoPúĚłMżçö ¸č€°daa§Ÿ~ŠÁÁAţüĎ˙!gΜćđáĂ|ç;G:beeÇqříßţ:ńÉĺËWHĽRź9œ]žüןňĘ+üń˙ťVŘܕßߌwWˆž‡çš ĎŁn­ŽpŢĘČéH’ĎYLö1>\ft°DOOš”Ľ“ś –——Ń‚oż}žŢ|ß§ˇŻB!—gldˆÁ>fçŽ^˝EĽRbnnžršBĘĘ`ŰÇqČfÁq]Jĺ"NĎ÷™žždu­Š•˛Đ5jľJ.—˘XĘóČŁa™:ş>‚ĘJŃé8¸ŽOłŮaiĽĆÍš*ł ŹŽ7ŮŹľiŰŽ#đ}‰aÂC ÷ZŢľö[–•XW{ž›XuKęă1Š4Ë |ĆÇý›ƒšŚ100@>ŸÇ˛,<Ďcxx˜N§C&ś DăŚ%‡Uív›ľľőÄ)-ŮËÜâćáXt°,‹N§“ˆvC(jŽëFrb›gß’Ö¤ŹhˇŰI{SąXLڑâü!ֈĐĺ0fĺřžmŰ!Śëř~@oo…Ď˙ćó8ŽĂĘĘ*++ŤÜźu‹z˝žĺźt‡}~'óDt+ Śűubéˇjî˛čî҅š“&•˛˜žšâŘąc ôaYĆ'˛Äěƒ1űąűążbŚ{3Ň4ÉĄ˝|ýKËüĂ÷ë\ž‘Ćqô¤)IV" &ëqâř Ú]ړbŇľŠN\ße˝eó×ď˝BĂnq¤‚÷—nđÔÄ Š†Ý˘nˇxzňţ‹—yţŕăÔí6ëÍMú˛eŽ Lsľ:˛(šUjŠ)”ÜŽ­đóš Œäűhšf7—ů⑧xíöťáŠ„%üJNî9qÍރ#ü<ŐÁöËqćÖ0¤ixh†‹.ýˆQ¨@#$žmâşiělö“#ˆőٟ=I&—ŮFíޙ4ěš3"dH|çâO¨wZ zY¨­mű™óóWřÚÉĎqłşšsč\ZšĹ“Çé_-cűŽçň꾡ůÓĎŕă>ď,]Ð:şŚóăosmmŽĎNŸáęúÜöŠ(ö Ֆ+Đ%Z{˘Ł —ů˝ăż…ë{źśvžş×LŇźmom ™aÜňyĄÜŚ×P(! ›FŇŚŸz拔gžiŚąĺ]÷XW÷VÓuČXž{ůu>RjT[ >Ěá™&G{Ég R–Fą&e,,ʞY[‡ŔÁó}††Đ5‰iĽ¸ukŽ‘áafgçČçsÔj rš<++k˜–AąXÂîŘQˌA§cÓŰ×C§Ýfh¨Ľ ŻŻ‚í8ŒŃj6IĽLňů…b6iQQJᚍŚMŤăRŤuX\ŮŕúíU––›ŹŹŐŠŐ;´:Ţ0rŤ‘RGH‰ŔŒ!i–Fź–ŠŽ4Bmč•!ĹŽ6ژ9ƒ ä}[Kňů<ů|ţŽűPŠ´{˘‹E*• JŠ„ĽňI„a´Űíd­‰[!BÝ(]ßX…@—Ol†łg„Ű4Źb°&fĆď)Ľ0 ß÷#ki•€8N'š~RJňů<…BÉÉ Ž9ĚüüˇnÝbm}=ŽlťďŽöĽ.á{§ö\v.ť~.^Tü˙îvĽŽö^]×Éd29r„cGR,â“ËYöÁ˜ý؏ý؏¨‘RbpâXŮĚ?úY‹w.lÖRřč˛8ÜQď RĄIE>ksä Ăgž28|°}łŤˆ^K—CÓ™Ş óó[ď˘i•L‘…ÍU>=y*,ŽdŘ3ľ2ôeK(iĂbľš.5ʙ77Ѥäfu‰B*CJ7Yin3ŇT[5Zn‡MťÁtĎšÔ¸ž>OÚ0‘BF-ÚRˆ/!f&ĹŕÉŒb–ŐCCŹ÷}̡çIŻśíđQˆČY@选“KŃ>TF<5E꼣  űÓĽ¸c"Óý¸”MH&Jƒübţ2vŕ‘6S؞ËLĎh˜ó ‰.5҆EoŚÄb}´arłşČrmƒĎĚ<Œ,Öךąž@ËľIéľN ?đńEËiâřS•!֛5ëk šI"łĺŇ#čÖxîÖ1ůUžB$`&džń‡ü ˛ďŚůţňYš^ ?*$şOĎ$đtÁćἇŃec­„NK ĐĘ˙™‘ŻÎ–ĂeE|[˘%$şĐ810şžő?*ôҰđ}ú{ĘšŽăščR#ge(T¸¸r‹”aá>׍ î§nwpý€+ks¸ĘŁ']Ŕń]<ĺłŢŽ“ŇM.­ÜŚ/[F×4–U4Š%śĄ2ú,˙tBęVe€Âg~›Ćŕ kŻţWJo˙ fł ŇGÄ~oB 4 /“cý‘OÁWżIćégIŠHMűP:ƒ?~!ŕÖ­ŰčşĆÂÂ"J){ě1†††›ŮG9ƒă8Ôj5 Ă`ii‰‡>ĹđđGM4NŸ>Mš\âʕŤw<Őݏw_Ö4 ŠéHAŕí9Ÿ¤P” ‡'rG˝Vgddˆz=ü[ʰđö× [ůň…ƒeĄ}ľçű8ŽO§nSo´Yßh2ť°ÁĽëËܸšĆňÚ&ŰĆÔM Ý@Óő­vÚěaőŽÂ —{ĺřj[QŻI‰fę]Ž9^"vœ0M„ŘJdîˆvG˘\w˘śOzž™Ś‰iš `r§ýż<îtB 8T˛Ůl" ěşî.'˘nMšř{ńšÔnˇq]—L&C.—CÓ4Z­N‡N§“čě‹z{{8zô0kkë\ť~ŮŰłlln`ŰvÄ8UŰôƒî6. Ŕtż†ÚMŹŮË )j…ŰÚÚŐŽźWČ0çŕĉ:x0ŇĐQZh}ŒŮý؏ýřg’ôʼn€aڧ*T*NiňÖů.^KQÝČĄ” ˘cn!CˇRśÎé6§ĘppŚ@ĽœFתBz{l¤ĽAÖ°898 ŽWçI/yŠáB/Á™‘#˜F“…T–ožyrşŔ×N~–Œ™B—uťEĆHńŘŘati K‰‡{GȚi÷M II%gŚg!Sĺ!,Ý ai„Îż˛qřŕqÚI˝ŐuŢą!˛_+QâľKs,_œĂż´Œ\Ş#œ%”Ň0ŃCúřĹCÔ&űɔr膾ë´đŽ›ˇ”XšÁ‰iLÍŕÂĘ-Ľ8Ô7Ę‘Ţ ‚GF L”*ôRLgńŸŁ}“ř ä*|ĺř§15ƒÇǎĐń&JCüîĂżIŃĚ⌅nŽçӛËstp’śă`j:•t]HŇŇH´}’ˇ,î$}R N7ĂBAĘ´81z„JśÄąË3|űňßs͞ÇW~wţ†&`Ę xžěSÔ4T p1ŠŞ3ČţŻ’ď?™.!w´'íül!uRšÁpĄ/˙4—VnaJÉdyˆăƒ3Xš.5žqú RYŇFŠ/͑ˇ2|ůřg04IÎĘĐr ŠńĐČ4 ČęéČÖÜ'­›í%H)¤4 @!¸ij†ÔîhăůaÖ¨ű>ëžÇ¤”XŮ<úɧé Ną:óÖ?ţ_”gßGĂ ç›Ô¨Žąń/ţˆÂżBjtÍJ…§ř÷˜T !0 ƒÓ§N~~z:Ô ŰF“Ô6çĽ33ÓQŃ)xä‘Gv]łžžžO4ÉߏűUŮoÍYM“‘ˆžżăŠzŁĂĹKł4uczrˆ“'Ńi{œ?žž^:• ÄÜěš|]7ąm›l.K ‚Đ]ÉĐčt:ŒpóÖ,éLšŃą!*•2Ę÷1M‹žŢ–e„śŇR˘i*ČDş/–‹ăv¨7lnέqĺĆ ó Ź­5i´l×Ç÷\?@Ó 2i#Kžëbj2d”mŐU×őpAyř4„0"Ąc/iɍ]rD$([š& ę@ ëa>Łş/¸řH Ë^BÚ˙d@čÔĽŮî  4›M ĂŰÄbçĹH8v’2lqp‡VŤ•0ebQ|Í2™L2VńkA@ŁŃŔ4Múúz)ň;z„ëׯSŤŐX^^aeuĎ Eţ÷bř~ ;fÇ>őÁ&;’TWňîVАÁXâȑ#a+Z6K§ÓŠŹžu4MKôzöÁ˜ý؏ý؏_È™Ţž ůœÉ™,Ë+-nĎŽ17°Y8ŽÂ4Ĺ, ꌎŚ$›ŐHYƞ…ýÝ6@MHzŒ R)=Ěáţq Š“6,´¨Ŕčɔś=ç@ĎXXddˇ,űłĺ¸ôŘQ˜†{â@nkk,Śr‰ţ†$Ł[d4ő˛ó 2Ýv˜[Ť;šÎě•či†Fś%•MSš ďé#¸ő6^ŁCŕ‡ŸĹH[šf>™2ĂDz§Ó„ř`FŽŚ$-…°ŕäŔ&ËC( gŚ#{kč̈́c҉đfÝ'}Óĺá]ŽĆtg”‘ )ÓIF3ČëÖŻLŮçn ™ŘăšĆNă˝#|-˙ENOœŕ•‹ŻńŁů7¸Ů^ Ř(˛ZŔç{ä ”0čy6üźŇłT†&•D7ĚˆŮ9fŰ' lçŒ4BHŽô3QŔő\҆…Ľ‡ ´3=#Ékä"'“b:ťuu?ŹćkND'ÚSÓ)4>Y ࣴ§Ĺ‰R ŠéŠ‘ÇüÜ׊eţo˙3ƒ?˙{¤ X=ńţ7˙z:…YěIœ“bśá/[}4ůOpç‰Öľť¸°ýÚă2jËŞ7d ÉfÓăęlÇuŠ×[T×k?>MА§T.ráÂzń\ŸÁˆQ%# ę9RÖëkëôéúúĘ,--sâÄ2) Â4uŇ醥'­‘10ÔîřŘśK˝ŃałŢćö|•›sëܘ]ĽşŃ Őöp=*b5Ć IÄHIÄý%¨Hä5lŢáŢ•śAŕGëŞB!…BGˆ4B¸ b!^ľ | éş ňHÄ×q쎢Y}äu'vśú8€äâN˲B%vŐ!˜%žç%mi1 É÷} ĂH!ËËËQ+Ľš‹QÓ˝Ć×4•J%Żíş.Őjçŕ¨ľľ5nÝşÍÚú:­f ×uCŤ÷ťhĚěÂ|˜=EípKŒ˜îC)%š\–ŃŃ1N:EŠT"e™[KĐétpÝhŠŤ}0f?öc?öăŸ×zGĄOq‡˘Ü˛t,K§RÎpř`O˘/„ˆýméŚUîi%y/'ĂQQŘkĺț)ÜTŰ'֊ѤD—:)atą•E¤Qüńôîîb1ěÁxů0,™­ MK…4ç• ‘Úă5ďFCţ °4Cfə)zRŮŽJńqJ´!0ĽŽ)4’Qwżś÷3!ŽŻáöÖ;ś%\{ŮÝßϧs>ÄáÁi~Żůn-ĚňîâenŐć‚&Oô–)˛hN$ٗ¤ IDAT“ŤĚĐ×?„aÄŔ‰LwG‰‚”ş™&mxŚżĺäpáĂÝ%ň/WX›BÇĐ5´OŘɀ[UߝÝîá^•š†™ÉS9ţ­‘Ü<óĘńčyôSôôô€Ś!ĽÖ5OÄ'ĘĆú§^ÜmÎű×kŻ}*œŰA°ĹňPŕ*¸Ž`nŐĄŢňk†ŔČzľÎĂbb|„|>Ëťç/âz.Ł#̌Œ01>Ęęj•TƲLR)‹TÚbrň87Žß„Ŕ'ŸË’ÉZĄö‡‚ŔŰńčt\Zm‡Z“Őő&s \žžÂŮu66[¨$7¨ ,ĘĽÖe-M(ń"ş–p …ş.žďă8n—NN|kčşŃĽőBŘž¤JYa‰Š„đ€ iąTä-I‹”÷O—%25ŘÖőĎéť1>öżUj{NfYŠÄĆ; …BjľN‡t:mŰ ‹*śľ‚€ŢŢި‰Ů3ń܎5ݚ3ń~ďŠńsMÓLZĽĘĺ2łűąűń §uݛÚ΍öŽ'ěÄ'Kâ.Ľ›řŔן—H,a`é÷Q´NÜĄĘd{ť‚čĘ3b&ŘůCcB´óąťŕ|@Oú@I°Dř(`E îXh˜łËĂ^CůaOÎw&Ĺi)¤ZwÝrĎűęÎ`ÎÖ)™Q08’Ér`r†@…:$zôšB„ZBČm- {ąÍvˇ(u#E!O"%tĐtÔ':Vâˇß  ę6Ňř0ë.@E„ĽoŚXaüł/„NVRn1•vrűŔ½EČ"¸łöѯ펾hhÉÜÚÔô=)5‚Íf@çśÍF# ăʰYëp`fˆc‡'řô§çćÍŰ\źx™‘ŃaŚŚÇ0-ƒt&Eš\¤ŻżL:m‘2Mž‰ŢƒÄvBG'Űv٨u¸~{• Wšvs…Z˝CÇvq˝PV7P EbŻ13B)… žç&,A!DĆ ŘĆJQ$,)š&ńýPŃťŸ+‰ "^ҎdG  X(ĄMT2 ¤‘u¸ Rh{,žżěús÷üçA™ßą‹Q7{Ľ›ábۥ圎똌šk] ™+!ŕƒ1(d€„ş/1SŻ×ŠŐj¤R)2™ ů|>ůÝ1˙žř54-l™KĽR8Ž“°ešÍ&AN§›˜-Łi›››!( œ1çť}0f?öc?öă+PŞŃm‘yOEȝKrî[˝„Ř*ăřȕăΡ§îüvťM^@äWQhřžiklÉÂuOěł˝×BfH4#Ԛ /l7KëWéäőŕďI[Žëştá]űŃuűJ!“yľsƂúšŚ¨ĺ‡f@G˛¸PoşlÔ͐%sâč$CCƒ”JEę&čap¨Ë4C‹ŰőétÂçmlśY]o0żźÉüÂs‹›llśiś:´;vHŠĐšYˆ b°ˆ$ÇPJ!…  K=B†m —Í"ś żn1!5@)RÉ­ľNtY'…´ źH¸Ţŕ˙gďMƒěČÎôźçäzˇşľU@a_Kw˝ws8C6ÉRĂ!ǚU ŽlK#…dKV„˙ů§#d‡Ăv8а#ËĄK#JĂ!9$5Ă­6{ďF/@فn4ÖÂV(ÔroÝ-ˇsü#óäÍ{Ť Kcé-?tUŢź™yNžsž÷źßű ĂĆ !$=V„!ĎííxQŃnˇ‘RâşnOٍžˇNÇ#ŠbQábąˆL@(€bą˜ˇr ZüVqy‘ ĂÄĄ­;ĆéďkľZ´Zqyfhh]˜l„aˆe™ËŔ ÍZŃ?×cńŘŘXjcÝjľRQ^ €čg¤Ů.ȉ˘X[Í÷}ĺr9ýŹpÂ0Lď­Z­Ś ŒfٌQʞuÇVÎ]>ËĚĺšó-š&N'-ŸZyĚV×`şÇĽ:q–ÉČčŰwîbűöm‹ĽäúşĎ§Óé`Ű6žď§@LŠTşŠňÖŒÉ#<ňřÄ,| LÓÂ÷CL3²ŒU“řO n=Á˝îYo÷Â\\űW=÷~1aâűÝéxńI˛ŁäcŰÖM-ČîZ,îLóÜô5¨;ßFzĄ*Ľ˘Ůlőě솁eYt:m,ËÇu›JĆď‹Bô/!UH#ÄGŢzwź˝:NşčÍ ”‡aH§ăQ(¸7üĚW>Nd´(ň¸ő1Đ\fٜÇĘósżŽ˜R1¨”D†%$R„‘¤íKęí€zÓca1döěŢĚĆ ëP"Í BIťĐiÔŽ.4¸tyéKó\¸Tçҕ:ľĽaĹş`I;™Ś“°8#”23ŔeŻxŠę+ŰB$ şLŚi¤îcËK>ăyQƒHFŠlúnKýCCCi›śZMöěŮCľZ˝Ľk‚€šš99wîĂĂĂLLL`QĽlŒBĄĐSúćyWŻ^ĺÜšsěßż?ľŘÎöÁ<énčsjqiÍŽŃ/ƒƒƒŘśś.WŇ@‹išéZ§{ţxęyN'vŮéůžlÉR?ťfhh(ţ.ßĂ <U|&śŹaŰÖ-xő€ůšŽ\™ĄVŤÓh4đ}ßRݟlI“R˛@ĚĚŚi`Y6ĺr‰RŠĚځ›'Ö0ž~NŠ€éŘȤd2)ŤŠ]ŠbŔĚuÝ[ŕr0&<ňČăc ĆtkoŰíXľÝ˛ĚU|˝?_é|}×âS´ Źâ›–âÎ҉ƒ ¤Ýn#„‘Šŕé?–eEF“RИÚAć‰ĘňŚw°Űé…XźË'÷ŮEŠNđmŰN“×unĘNsľd? ,ÜěůVť—[=ÇÇ9YŐ!Ľ˘ÝŽGŰvzŔ˝[ëyą`gĄŕŢ} 3t^‰˘0yŻb˝Ť\ggĽ1NĽ]V',NXŁŽMn˘'e`&Ú( ” —çj Éb#˘Ůňhw|îżośíŕ‡! ľ6ďp‰ŁÇ/qâôk­řˆŠ6̸f?`&bGEDa„”ъɤNŔu‚­x @F’HF‰ŽÔuDžEěDŁÇĺX{$JĆ`ýŽëąÓˆŸ‰Htw1B °‘Ş€!|PŃŒÖ‚˛1ĎHgCCĂH?žç111ÉĽK—’’›XP8Łn蜝%‚¤,gů¸ż CŻcÚHA‰ŐćŠÁsĂ ÓéĐjľ(—Ë Ç!‚´ÝLÓÄqœ”٢Ů2šÉR*•Ø1ÔnˇS§%ýY}oz˝”-“ ÐBĄĐŁcŁPDNÄ‹L˜kQmEłŃÄ‚M7°}ۖԆ˝Ńh #Éb­Ć­V )%ÍfƒĽĽQaš&kĆÇEŠT˘Z­211ă¸ $ď RbŃÜEüĽćĐQyťX"JJћÍf i€IŻs0&<ňČăSĆhM‹ XZZJęąÍä˙VÁŸ†݇$ŻRńÇśc{Đ~˝˝X /i+c٢éF“ëOsbŁ„@Üą~ť|ČÄÝòœ”nŢż3 ě´ZmÚív*:yˇŢ‹ĺťćIś{#6žŸ’ńMßrźkĽ‹ýţ÷JƒiqÂĐLDcVAwŒ=šfƅ*Ěs’ŠH† EOycܟľ¨iW¤ˆUœ\ĘeŇńӗ;4[!ĄşČ•EÉâ’ĎĽË‹ĚÎ7h4=:? C B`"a–\.1ŹŘş^[ňö‹ůëłgěTdć6E…H)zúB”VRőŒs1›BŻadâ6•°kč– aÄó„Éź[c+e!ĽM$ÍŰ^ľiY6;věHž‡ &'×R,–veüFF†B01ą6ĂxRˇ,ŕ*„ P(°cÇLÓdÝşu} ÜxHƒŐf†•ä8ĂĂÇďű醐:5iÇ%íČ$ A'ęĐŚMGľg ;˛ąK6Vb!­Ů; ÖÇđĐ śí066š˛‡âžkžçQ,)‹é=čgf¤Z0n BšŽƒoYŘÓČĐĂh/6k1ŔÓj3492ÂLôÇúKžr0&<ňČăS’¨dwô„ŚwŞbQËnţv+Éë'?AČ܋JőđoǙ3‹YeZŽ‘Şč÷/˛ťmUŔ˛l˘¨k÷šüZŻ}Ÿî\\Ý1ĺ!J˜ŚŘI÷'ŒŮňýwüNĹÚ2ýîwŁßö÷áOę—ö­šĽÂɉłG–Š.s,ć.ĚEÝ1Đ0L')OÉ˓Ž9+)c}Žút* Ő˙™$áÁœ…A$—ç|ćë—ŕ­Ëx~˜–]tKNLLË@Jłc$}ßŮđfôŠôĎłBŽq ’šÚ”˜é‰.L~§Z1(¤VŘýZ2úťĽŒľ T”‰]ŹĚw‰D¤?.ŤŠE~¤a!qn_GëřX֍*wÂ<' dôĎ–e÷8ý龥‚ôQo Ľ€XZk;f-Ź5h´xŻH4[E÷›Ź ’fšjś‰._ƒŽFÎJĽRŞą§™/Yh %Í Aƒ.#bKÄŔŻÖč ÐRŠ„”2e !hľš8Žƒë:Řś•ş@Ź]ť6˝f׍™MŮgĽŻ+ ĂŽËSĄł´TYŞâ-ŐĄYc°RĆh-5kĽ Ęv1MòîÚŹƒ1yä‘Gw`PË@= /[XĺqÇŰ ż-VÓęÉ.8 CŚ ›<î^ô'?ײŽÎ&”zљż[w7iŐÉŮj6ăŮ6ÔťÂy[ÝývZm ĚcĺçeZVŹt"ŐjůOÄe1É36ăÄUťŃ˜Ś™ş~Ĺ,’Źľxœlk ˆËˆÂ$YΖŁtż+ž“„!b‡"ÓŔT]7%]vąLKŠD4?ë„ÔeĹÄe5ËśąmŤ§Ü°g,NÎaÝ´2 C eŸJd4ß2ě–KĹ@ąöm¨wÉuAˆa8˙~eZË@ ”şŽŮƒ˜uKú̧ššŤ)366Fš\Ćq:Žă¤ýDƒZ¸Yný FłŮ¤^Ż399™–éňŞ0 Š×ëH)ŠT*=Ľ<ąp”`XWƒŤ4Ă› ›‰Čľv˛›'Đý]ŠTJE‹Űí6F#Őľ1 ƒŃŃŃ`)‹´Z­t]ŚŚBĄ@ŁŃŔuÝô~S›  ŮjašJCĂiů–)Ŕťzsö{tЍ[[ç‘Gy|ęż+-†óäîˇÁJÉýjm‘e^dkłó¸ťmw­dqU{éüýúHÚi5Ťř•šěkŢVwŒÉăúĄ’˙A ČÔöŮXÖżł,†6ʔžt™+ ĂP}şTNčݤ1LeˆXŰ%Vúݎ´3™č3iÓżK ˜&%”Z G[Wk`Hł1ôRĆ@GŚĚŚÇUŻk0… ›¤ÇeO SFvsŁdżm€Fفçٟg°^=.Ý˙4 ‘č<ĎĂ÷ý´ŻiŒÖžÉ2¤´[’‚z˝žö­5kÖ ĽL,ŮMŽÁÁÁԁ2Ť5S*•bń`"Ú˛'=lełš´ ˘Äj]u]Œ4+2Ť?”ŐkŃýO—ă8ŘśŠíęßeŃű’˛4ú<ív×uSĄŢHJDR˘çŽN Ç1d„ô:˜^#cňČ#<>u‹ş>G†¸”B—)ĺ‰ČOBŇĽ ‚yâ?y;ÝíÄQ/Ş˛”îkEˇüOő8Ÿ\żóç}Ťmľ’śŇj‰ż|ěڙfýŔłq˝˙^őŠnňsˇúűŰ}ž[˝˙ţc{˙—hćĺIׂ"éíŽI¤ťőýs{:×$šgYĐAł˛ŕH˙ř#26ÚÝľ‚JϕM^…ÖUKO"R†Ič0’’Ďn"i"¤.ΰx2 ťH.Fłf¤RˆLiJVtWeÜâ”č:ßÄÖŕZOĆXĆĚҟż=mŐxoU€÷ăÄhqĺŹzŠTNK­”uŇnˇSŚ,0—uéRłŮLĘKÝÔĐ`šţL–ɤA ţ!hśšH!i›m,Ű•.Őb•Ŕ böMŘu]r]—vť2Z˛÷ăű~ şh-™jľšęúéw.kîşî˛űÓ,Ý´ąÖ™Éęěğ5QÂ@ ۲Ý"śqwĆĹŒÉ#<ň¸ăLwBíZôÚŚiŚ“eŻśE˙żł éţcVúűV–2Ť}ÇJÇÜŠëYéó+]G˙˘EŹđßj…ăc Lť†š˘uŠvˈ˘0úuňý¤BRŞ”b˝˘ö˝ŽK–ebYö‡H2s4ćVŰ*ŚłG)~ľĐZ1Śi,ł#żýɌ¸‰cV;ţZçšŮď¸ŮăÔ*cއyÝqQJ•ó´Ž žĺÁ2KśôhYٗZ>Śd­Ľ5 “ýŹţł`LˇĚB¤6Šşl$Ë4IżMő2M´ó˘žë˘(ÖąM 'ŃnŇÇe™ ­U“€wF×!¨_‡F JŚżú÷†ˆő9Ó÷Ţ0Śčźnc|Źqż=:)$Ń`D­VKşußłm;ިT*ŠŘş.MŇ6ÖŮÍ*Í¤Ń J*r, 4Š…5TŒś[vńÚ^Úˇu{8Ž“.Y@N[L벊z˝žÚgAL˲ŇR&ĽN‡ĽĽ%Â0L‘bGŹŽŽŽçy´Z-FFFzúŹEłĺç˛, u—úPĆä‘GyÜy8&]ŘęÁ_–Ůďö.´oćߍý}+€ ×9§¸ ×#Žs˙׺îë}żŒtâ"ä÷ $Ć`MźŕČu>ĘE'XV,¨Eűľ~4¸ťNŹŽtíD+/Ať]IB…řž—ŠTfŰBƒŃŽc÷ěęćqˇŰIašž×;ćíąrôŰ ëŇŁ, Żg<Éěô3?4%+ޚ-݉Ř>(~‰ŇąĘ0ťě˛4ą…G ^v` ʤŒ‰äŽEŇăßgY7=ŕ]R•$2 Ekg"Ă00̄ý’\Ť˛%U¨ÄčzP'›gĽŒzXRQá8Nâ(h222’ęI)ŠŐjŠ›vlҌ“ŹŰ’E4¸Ą×CZ[&uU’>5oĂ6(eJ%,ÓBFńwúžO­Vc`` =§î[žďS(Ňs´Z-šÍ&Őjľ¤ÔbĂÚÉ) îčr:­Ól6{ŽŐśm†‡‡S@'[~ŐĘčçw7™ę9“Gyäq&Ě,ŽăfDűňřH ˛d‹Ýy„a„e‰ž<Ľ…‚{M-Œ<îlˆĚÎlźXŠ]˛ &Ľ$ž×Ą\.§Ž$Ůč›éy|řvę>sm›*‰˘°{iírĄ˜)=ËăδÄą%ŽĚă•@%€˘żŻęgśRéQ\śÓfVŢí+=ʖPŹôZ,â%6â÷OĄ˝ĽL);!jbaáQ’(RŠ`pé”Ht` ‘0fô;_Ťě"ÎzKőłMťk˘¸œI)…Œ˘´dęöÍú>oëĂÝwĆ˖ovíču˙ɎĄó<ݧDzbw;ĎóRW"Ă0R˝™ŹćŠ#4h˘ŽÁ(аl ‰¤#Ű\ńŻ0ęŒB p .Fâ¨'T*Őj•vťMťÝNmş=ĎK-°őćŠÖtKőd˛šbśm÷°cłPú÷RJZ­–e1;;KąXLmÁƒ HY?zý Á-ěşnęHĽ]Ľr0&<ňČăSô뿣(ÄqěL‚™ÇGˆ¤;<~ĐÓfRFéŇľ/•ößV˝{Ÿ7'’Ů[Ú/z!ď$ËŰĚu]fZĂŽÝ%lŰéÍVJ˛ďcżŘf6ůˆŻzŕŠqHŢ&×dôżăW™.ŹőÚ0śmćB˛“6ÓmĺűqŮŚi˜Ÿ~7ö›CˆDä“݌z‰,C&)žI˜1=âž}ÚJý%ĚýZ4+–*ó™2b ÔÄ0ťçîeş–2i€&dzp=üIĽşKĎoeŽ[ö|Ţ+[Ú÷_ˇčŠăÁíƒ.]’bŃ˝ĺJ⿏ýëÇ^ Ą0Œ¨×—’ţ`ôl>h†‹f~d[­•J%9Úí6­V+ՊénNuzú§>§ďűXśE,EK4Ł&“î:T¨p\§§TXƒĺr9=´ˆîââ"śmÓétBŕy^j=22–•"ú:4cFř˜ľqďŽLNNbŰvĘÎŃ,6mƒťnĹ`hôďƒ Hľhr0&<ňČăSČčIĘ4 ëűněRŻT×ţQFźˆéô$řńä.ŽßŽÉbT˘$íkě˘ő>_ľârďF&>ƒoBĐÓVaR,–WLîŻ%Ť˙Ž˘(q‰E*L#q˙0Ítˇ/Űrëöí, ź?˝ŮçדüfQłL#>í˛šł×Ç=,ˢh<äLĽĺó•PýVWŹźŃ㊡Ç#-źj,ŽÍ~> &Ç,%c#3˂ČţĚČŘ ëď73ʘ^š”ĽŁ1˙ě;ŮS6eˆ´Šß˝÷şx’*Bi—§ţ˛ˇ˜’RĆȆi×ԗú0ď ë:jœůhÇzJŢtëçż§fĘr‰A;ťÇ]Š_äVťiŔ%+š[ŠTR€Dƒ3žçaYVZB§Ů(RJ„)h„ –Â%Ęf‰qĆ1•‰á şş.Y;í´/&ç+‹‹ĹôښÍfʞ)‹éľérŠě9łýS˙;“ű~Qjń-„ P(P,Sç'€vť”’BĄ>ˇl˙Ń"Â9“Gyäń)c˛;^%ríkT};iŤ/˛@\sB Ao´h ôGŸ@ö×ýßPŊ’ °Ílç4mYgĐ\GŐÇ6m a"’éęß˝đ"2̌YÉ ę‚ůpł| †žRźŹĆĘJĎQJŐˆdNłŒ­ˇ8E2ľŤÎ‚<Ůž™ŤÓr˘d’ÂĐÁ`šÓSŚ•űß͞˛Š>íŐOCëĘdőń"š"“H(0„‰ś—!Œën|\*îŽ :Ą×@{FŘśŐóNjđB'â˝6ĺ eŻ…¸4#˖ź]ďžv€ŠŮžAŕ§cÜŔ@×u{˜0˝}D¤ě(­†ąPsąXH™Y€..Ĺ.†!ĺr ÇşÓé`˜^äá ?ôY[\Kŕ8vr>aڌ čf-ŕűmŚľ ŔÚľkRM¸ršÜ#Ź?Ł-¨ÉގA¤"˙ŽëŚŹf˝6ĐŒŻŹK”îZ#GŸ ň2Ľ<ňČ#OaRr=°%`mj78ë؅lQčóÔϟ“““ěÚľ3™üťťŰAôŘeNOO٤bó–M];ĚU˝× Ç/ůšŕ˜‚ű6ŘlˇąÍşl+ŽËžŃD1KC"ŸłĂný –(ĘjŒ1{+kíŒ¸ëqʆ0“?şn_s*Y'˛‹]'q}ŕL/,–QŘoz‡^%‹Đ.s)Âýřě’gË Ő™LŮă}?Ţ)<ňîqžóýŸńćáŁĚÍ/PŻ7čtźtfŰ6ĹbĄÁÖŽ]ӟ”Żő‹l˜ZăXX–yĂďÝâbĂoFĄ¸˙ţűpÝBşĂŮßN+•Qő?ƒc‚żR9ĹJťřŮÄďZ÷Ń˙™PE„2—ČgÎŤ1-!„`ب0ę R°]\ĂĆ&Ů$8CŻóŘ´žÍ[ožM§Óf×î]ŒŽŽŽXNŇßOž÷8ۡoť-ăóÝľ…r™™Aď ŹŕśˇŇxŰ3gt)eĽńy%0VU=ŔK?;%=ňi˛ÚQ/O„őÝI™h’íœd¤čúžS–a¤ ´ž~˝šMvłĎE˙éÚf‹DšŐÉĄ[^ŒAˆR’ŤWŻŚĚjľÚÜ7Kt:ĺr9eqč’Ę R`òL––H)Ŕql ĂÄuÝëźÓjůE^s ćĽÚ'J šÍfĘΈ݂{„uă{éŚňš%Ňjľčt:Š>‹BÂ0ě™s4°Ąď4€˘×}­v+ŹŹˆĹNR…{(Ëééżú™e™ĹÝpżG“F‘–(e„‹Ĺbę|”s …BzݐŃÂĎZH:‚”é˘Kœ˛@vHŇ ¸ˆéëń}ŸFŁ‘^ŻÎÁ˜<ňČ#ĎҢ/Ť-Ł$żƒTŰ´q-'ݕş‹{Ľ$ív›óoţ-_˙­żĹëŻbaá }ô‘tbťpá"?úáćŢűîĺ™gžĺË_~’ ç/F!ëÖOŚ“cś†WďÖ ‘‚ˇŚ}ţôĽĽDđĎŕ…S>˙ŕ‰űÖť˜âăÖ×_ăƒ#ÎÇ(ť™´IŹúNé?—gŽđŻţäßńďżóc:íhFT’¸čf˘–×džÖâÔôe^;ôßůŤŸđßüĂżËßúő/0ťršL˝^OďYż3śmsőęU,ËJ™;AP*•hˇŰÉóňR‘^×uiľZ=VŢY ' JúžŸÚdkWŚ(ŠXXX T*Ľöß9“GyäńYe€VŁÉ˙1˙# –Í”ă+Ă+W‘ š^„ʘ Ž%(ťćuiž×K´pŕÄÄľZ )%˙é?}‡ééi@qđŔźţú\›cúÜy~đƒrŕţ´Zm~úӟńŇK/ăş.üÇ̟ýٟŃnˇyôŃGxňÉ') „šî`…e ÖT f/ŸöŮťÎůD& E3¨3œÇW2^t E$bJł"ó4üW9źIŃŤ0˛´‰qk ŁÎFĘÎ Eيk–° aÄŠŁ’¤‚‘+EŤŐć駟ćĺ—_Ą\.ówţÎ299A˝^ÇqůŢ÷žĎ7żů[ Q.— ĂĎóŇ:jí¸P.—1-‹ R[ÎÓ÷łkşâŔQ iЙźdô`´¸Ž.cŃl p›ÂHÇNŃ­Ÿę‚&]K¤Ǩn‰TňŚŞ¸L(űőkĚôMY†Orĺę)ŐWIžËó<Ú­Nú|Pk,ńÁ†!Űwlgpp0óü$(AĄčŚŽR¨Őj\¸pJĽÂÄÄDĘÉśÝJqęÔiZÍ•Ęë§&S ćkEťÝfzzšz­ÁÖm[\VBĽŰ*臍Őj*¸›íWşäH—â螌 ^Hł˛}áÓňŰí"EQDIIaĐEJÉŇŇRř˘Y+şŸj—$]r5‹EƒEú:tYU@QJQ,iľZ §`ŽfŹĚĎĎ'˘ă~ę ĽË¤ŠĹbڌ+t˛fÄhëk Bi}mƒ3cňČ#<>‹ żdwËë´ůŻÔ#¨ ^`ŮA„Œ"$‚ŽÍsěRˆÇ2ŮžĆâ {‡pĺe 7ł /Ö"NŸ>MťÝâʕYNž<ÉýѡřÎwţ’óÎóŕƒš˙Ŕý<űĚł|ůË_âô™3,..pőęĆĆĆč´;œ>ÓőˇlŢBĄP$ (ĽbŽ e×`ӈE).ŤˆËő(-Čú¤ľ•’’Zgžšŕ Ąčj "ޛBĄ0…xtd“E1ĂéđUœN‰A1Á˜˝•1g#ö%k„˘UĹ6, ec°2ŤĽŐjqîÜyśmŰÎřř8N‡7Ţx“÷Ţ{ĄĄ!&ÖN°¸°ČK/žL<ţřăLOŸgff†ąŃQÖŹ]ĂË/żĚž=÷đŕƒR4-暒§ßó˜o†Ř†‰mŔá {×YTK&†)>mŇefhQáűŻź~„˙ĺ_ţ[^űmĎKz›ąbżÓ;ˇ†Xś‰e˜aˆI.Î,ň'ö}jľ˙ý?ý{Ź›Xƒe­.z*ĽäŕÁƒœ=sŽ_ţňEJĽ"{÷îÁqlN|ř0ĂĂà ިpúÔi‹‹5Ć׌Ţ0ó /06:NĄč28X]őŘŘ)¨“0€$ĽRŠÇâ9 îiĐ$Ű?űĹuĽ’(CєM:˛Ă3„-lT¨0m—0Œ zčR#힤K˘˛çÔĽIŞVŤiűč>Ż›ŹKR–ÍŁÁ Ś4T€ˇRФż×ŽHŮľ€fœjĄŢ,@Ł”ô56›MJĽRĘ>˝[,ĆŒÉ#<ňřX%1’ ÓĞ}…Bg„BaB´™Đه4 D%JÉÄ于đ‘Q@dX)ť%ž€ľú~ˇ~vőÉE¤Î žď†ĹbŃŃž{î9‚ `ëÖ-ź˙ţ ._žDe ĚĄ7ąaĂšÍ&ăăă,..26>ĆÔÔÖŻ_Çů ç €űŞ8–âŔ”ĂSÇCŽ6"^ě<ôŘVç#§îk]‰¸nŔA)ůăG>—ZçiKż›ĐĽ‚‹Zď"]ďŸŇŠ‘čŕ‹sĚ8ĺżDŮŚbŒ1`ŻaÄÚŔ”{ƒ…5˜†ľlq[*•¸÷Ţýœüŕ$ďjľÂwżű}žôĽ/1=}Ž+3łř~Ŕşőëxö™_Ňjv8{ö,•Ę|pŠG~ˆ>8ĹמöŐtńrŠá’ą˛ÁԐEÓS\ŞG\\”ě[÷ 2éęé÷Ŕ÷}Žź{‚˙ë˙ýK^{űA¨ÂZĺݤ|rÍďÝÁÖM“\‡ĹzƒcďáíwOŃęxü§ď?Cš\ćŸýŁ?d|lxŐ$D)8}ú4WŽ\Ą:XÁqރLOO366Ćěě,žďą{÷.Ξ=ËéÓ§A)lËÄś- ×up]Ë2?e.ˇ˘]ĽˆĹ•O5/ň˙Ě˙”Ÿú‡iŞ›Ą‹ÇçX¤ÉŸˇžg6\⟌|ŠŇšDŻéÚ×xńâEΜ9˛ĆjLOO37?ÇÎ];ٸq#'Nœ ŐjńđĂÓé´9u꣣cŠŽešTŤlÝşgžy†/}éI …BîPô b˛÷‹čöƒÁ]˝˜•ǨTˇ=Ň/PžZIR.[§ú.=ÖňÂ0S`9˝ĂŠőQ̸îůnC¤29Ů됪K̖ÂýĎ•ŽAúőq˛Ľ"Qa ŐW ű!ßqí1(ë&݉V˛’îm4˲˜˜˜`ëÖ­ Ýđ{„!ľĹ“““7üŰś™˜˜dćňöîÝłŞ0˝.łq'e‚˜ŚI˝^GAŠTJÁ ÍTрœ.CŇ%=–e€Čˆ˜ëĚ3RĄ¤ĘXI‘§éš‰Ë’”]ŃぁÔ‰) Cp]7ëtŸŸŸO-ŤłeLşźH—Đi†ŽIô÷hö‹f׆‘ş2AĚŞ×ë ô€9ŮĎęséçĄ5u´ĽöÂÂăăă)P“ulĘÁ˜<ňČ#Ď ِQˆĺ=ŢŔ jń‚GxKĺq<{Œc÷m°),ÇÂó%v ¤Ëěě vÓ2qlËśĆMęiűxŮ˙v›ţĎ˙Q$)—KlÝş•˝{÷2;;Ë<ŔÔÔzÖŻ_‚ýű÷ą¸Xcrr‚uë&)K,,ĚS(âá‡Â÷}FGG@° Áƒ›,ꛎD • öNÚÜŕް@ńÇŞ˝t˘çŰgńŁx!˜u‡†H˙ŰH3`ˆD˙C(B!dx4d“Yq+4)‰.ˇNđůń?°—'ŕapőę,–e1;;ËĺË38ŽĂŇŇAâ:.J‘ůľp\Űś(– ¸Ž‹0CCCLMMĽ‹Ňuƒ&eWF‚Ś3K–!Ř0lňÉkž.EyŠŃäĎţă_óÂkGńtC­˛ü(lÓdëŚ ţđˇżČ÷í¤T*ŕ‡EÇĺňĚUžzţ?üéË\ođçß}š-›ŚřÖď ÇąW\źY–ĹĂ?ÄŮłg˜šÚ€mŰlÝş…ÁÁ!6oތ”’7°uëVśmŰ Ŕć͛řŻ˙ţÉÔÔkÖŽĄT*2šn×u?cۍɈšˇÄż]|ŠűoÓTdvË{™Ľu& ËäŔ E]ľř˙MŠ‹˙Ôü:cćđuíŻ÷îݛ&iSSSüđMŠ\bűö­lذXĐ9|vďŢM„Ź_żŽbą„mYqů¨i$;Ž’uëÖąaĂĆˆůԁ3ąřm˛Ü#PtĆŽ {Šˆ•˙Ő@˜•ŽMő9’˛!#uř}nˆ*eËdÁC ÓL]ËA ˜ľ"QŞ×z[ëéâ˘Řɨ¸JE}ĹŞ::B„Ÿ%Ö ůp֊‚„•C”aĹĎCĘŘ5Ż^Żá8?ţRF %ŠĹbĆ!Š`ó<ŮŮxžýüç?mŰÔëu|ßghhhUŚK,,,°oď^!D `é~é8NZ2­Ů*Y—$ Śč>ŽďA)EťÝĆ4MŠĹbúy ÎA€ďű=#Ú)* éďÖÎUív›áááÔŇúzĺg9“Gyäńé„bđ[5Ź™×°‚V*Â'”Äi_ 5ó. …]é")Íęő:FľĘĹé ,ĚÍcŰ6nÁĹ-¨”Ë8‰PÚj@ŒŚ˜~îsŸëŠýaŰś­éqĂĂĂé$§[ˇnÝ2ˆ{ďÝżlQhX[5ůíű+xaźř+ŘąćÍ'1OQ(–:u.zÓ$"})ó%Ö B%€L˛ří)e")e XŁPH!KĆçäŰxž‡cz`J)Ęĺ2ű÷ďçȑwřÜçžŕ‘GᑇĺőCŻsŕţűŮ´i#SSSD2âמđk<řŕLOOsćôśnۚî¤eéč#eƒ'wů›wڜ[0<´Éfȅi|2¨ˇKÂ0â­7Ţç{˙ů-O/ŰYmĹ/„bhp€ü÷žÁΛyö…ˇxţ•#xa@šŕđ;_˙Užőť_% ŕ/˙úEć›üńs~ő‰lŮ´~Ĺ]LÔŻ[ˇŽçYˇn ůšJԛ6mLYťv-J)&&&PJą~ýú›˛đţ$ŇíĐçŻ_ă12a´Ŕ˛ęËÄtłö%s č(ŸŸtŢbŰâÇýbF°t{^Ă`hhˆÇ{4mƒ<ŔĐŕ;vnOuFF†{‘ńńąeÉrłŮ˘T*ńťżű;ŒŽŽäSÜ'ég4 #WdΈ>gŁ.¸Ńko–ěd4b˛Â¸Ý% 2Ź Î(ča§ô:8ĽÔ—ž‘Ż{Ţř˜řşc™XBĽ;_-ÓąŃVÖÉƃvĘ–P­T}ÜëBĽ@ĹöŰśebj†Mö™Ť÷ăkTąÜfźV[äíÇŠ 022BťÝN“ö}űöĽ ‹eŔpńÖ[obšƒƒƒ)ä^ŻóšĎ}nŐëń}ŸcǎQ,– ü€‘‘Î_˜fÆ)&''Wűęő:GĽŐjąvíZfggcŰśm+<ťĺemš]˘ŻS3IÂ0Ä÷}\×M•ʰ¤–(šE\UŔ6ŹDÂHâşNZň•uČҀŒŢpĐĎK‘ ‹E¤”Š›RŹŁÁ!}Y‹iýeŃíœuüY) …ťvíB%fJ•J?Ł\.]sÜfϞ==çqg™öP֚şX,% HזşŮlöŘZëқZ­Fř ŕa˛d.1bŽ"˝ˆŇ@1öGǢŮjS,şČ(Äfú ľđ­.őŃĺOÍf“Z-ÖŮŇZ2†a°´´Äěě,ĂĂĂ4dýjĽĽC`Ńş/şÄ* CJĽ333Š śJĽR śdĐrš[r'÷Ýh4˜ŸŸÇ˛,†‡‡YZZ²,ĂĂĂ)ƒŚŃhôô‡ťĹÉÁ˜<ňČ#I„a„Q;ƒŮ™C”ʐŃ7@AŮťBŐô¨âËńd˜DAKMÂ˙ý_1vî,VŃFTLßĎÂűË˙H#R ţíżîŠäÉÁíH"%'—NᇑJ˘ c$ÔC Т-I(Eʘ1’Ý<Ă “F$ßâlmiŢłť*R@ćZ ˜c:7u?†ÇŒUcçÜ.1{BJÉŃă§yíĐ{(‹_^óţ AÁuyěá{˜Ż3ˇ°Äo~ĺ1öîڌm[LŽ#R‚×ßú€ßţęălß:Ĺš Wi4;źřĘť|ý×…r9wž…v وW:'8^$ŒBÄšá˙tyşŽĐÎWJĄŒ^‘ć4Mś Ė ĆĂk0Gl¨ŔˆK$$gÂ+źŘ:ÎDq۸ńĺoŹcŢ40¸Ňű™Ç'/ ŽĹŚuÔ*YWĄ!_şÚ)ŞO‡D,Çr=L—´˜')J뚖>ń14Ů_ęů&!ĽÄ[*@i{ĘĚÂK )Ҍ—€Ú)!ůcÍ\Á:s&ůŒJ5Bľ:ňđQÂo|cŐ]ZMežž&늼^@ Y\\d` Ęâ⸎ËĚĚ ĽRŠGĚ-­V‹0Œ(—KŤ2>ě3ět:,--Q­VoťhfK… ™clPۘćhM"#H¨Ý ‹IscÖ8ľpĽpž–ąDhy(%eJCJ„ęŇŹĽ˜ĘfŞ´;@Ěă&ۉ˜2ýüËďĐń#„0Ż[ješŁCUvn"đB,Ăbdd0}gLĂdtdç‡ Vb;Ě0â셫źę<[7ŻÇdy›ÍĎĎS.—S[ńQą°°îŢČńsss˜Ś™Zu^ŤOˇŰmÂ0L)Űw}üSŠżÎńÎyꪍ2@ľ"”!;ވaQľEĺ$÷)đ"T3DÔ|˜óQ3m˘ż:‡|ć2ĆţaŒ/L"§fľ8Ú9˓Á}”­â5Ÿ[­VŁVŤ188Čŕŕ`úź•Rxž‡ďűŠž@ąXźíĎŤŃhP.—ŻkŮžL46ŰŐJßüÂ=lÜ4•lŠß}š˜_Ë%,[ŇŰ=nyin Ędě˘SŕĽßyiĺYqݚžnIŇjŇ,ËşPßqú;Žĺ}¸ěy$óœJ€"!ŒžóڎÍpľÄČ`‰BRFsł}YƒŸĹAˆÖP˜*Ţ…2o Ţ)„(pwG ÍČŸ÷r.S”…\őŒýĎ9WůŒJt´™”Š.;+ěŃ’ —Œ˙2ÂPVBŢ"RˆX˜9q„“JᇱӕďÇ@•ÔĚŞLTšĺdą “T2Â2 "ŻŚIÉdmˇšT*”BАČ3bfXŇůŁHkŃ@Šs˜c"݉Eć˛÷H*Eď1R1¨i™V˘C220”а… =Šś‚`%%aœ.š—@3žŒťĘä`Lyä‘ÇÇ!yLŠĆń4 ĹŹ †Á¸„‘(ž~… Q¤„0Š÷k•R­f,k˝źRˆ €N'ĽÚöşÎt'í0 ůůϟâž{îáâĹKlÝşĽGŁ˘á/„Ŕó<Žy‡}űöńŇK/ąqă&ö칇_ţňyyäaŞŐjęć”Ҥ•â… t:śmێë:Ër+ąw˛ G–ž]ř…aÄŠS§Š×ęěżwßcI%™k-0îL0RŁ5™óg™í\áJ8KŰlQ´Šř{†ö˛ŘY`ΟĺJç";g9§> 4˝Žă’ę.ZĽ€9Čäŕćaă~Ć(’= AVŸ§ß˝âzýŽW´ąWs ű|ľEfÍ~Ë ěoŰk}öfŢ#}ÍańÎńsHBX†ĘŹąEO"¸ŽĹ7~ă16m˜ŕę\ Ă0X\ląníJ ‚0b~ĄIŃu) ԛŘ•D(ćć—8a)C cšďáĂGءoo ŠŹDÎ>ë•Ú/ C^ýu>˙ůϧTę˜:ŻŇs•$;ŚÓĹ_yĺŐŘÍl` §>űĎÎÎŇh´|ŸFŁÁ˝÷í_öžŽTúpŰß)$WÂŁy˘$ýŰ0ţh[\Ž´ŚC˘lĽĚ< ć}˜i#Ď-ĄŢŤĄŢŤýň2ňއspŒŔŠ8]a6ŹąŽąűš”’ĽĽ%^|ń%*‚0dßž}ŒĽ‰ÍŐŤsĚÍÍQŠ”Ŕśíž11śŇU=Z4łżżw“kzŹ}—–âđ,˜œ=—î Ôją[KśOôÓ9PóáŁTtŘľu’]ť7á:NŇNę#š–>^ĚMÔęc÷l`šŚa`ĂřđnqZ‡Ä4MÜ($’RuYGꆴgşWŚ”ú„őÔŹžű]~›Ć őŚŢ~h~ˆkrV„°ÔľJ‰űş˙2-÷eÎX+3|+Ĺƒ?r0&<ňČăłÄ”ŔQÇä/  śEŠßlL Dj× IDAT„ŠC§}^<ŐáąmEîOf%Ő§\IL{Íčüޚ Ç5éŠZm‰ýű÷qôčť=ú.—.]bϞ=üâĎąk×.^|ńE …">ř›7oJ“ƒ'Nŕűď˝÷>ƒƒƒ´Űm.^źĚšsÓÔj5<Ďcbb’Í›7ńüóĎSŤŐŮ´i#ArâÄ8ŽĂúőë°mĎóX\\äžűîăđáÔËe.^źČ=÷ÜĂîÝťPJqäČ;œ&ś™Œx÷ÝŁŒ311ŃřËǎcçΝضÍÂÂŻžúľZŻ}íkT*好•v곌˘VŤĹôô4ăă㌌Œ¤Iëj ܇¤R´;Žĺ€JćRöî2'˙ď8&=¸‹o|ő1†˔J.ë'GůéłoE’‰ńŽ?Ă[GOóëżv€ĽF›sć C4; ľć˛çŚďe~nĎóÓú…^¤Óîpŕŕý=zŒ'Ÿü5.]šáâŋ4›MZ­…B‘ÇŒçŸĎÓÖ×çřÁ~ˆRŠ/|á œ9s†S§NłnÝ:ŚŚÖóÜsĎq˙ý÷sđŕ>ÂĄ×ß`óćM=zŒz˝Ćć͛q]—S§N˛uëVöěŮĂ{ďŕ­ˇŢfűśmœ8ń'>8ÁşuëظqGŽźCŁŃŕK_z’ŃŃŃ;Č(Ľˆ”d>\b.Zęv{×D<0 sÔÉ%xľ\đQ0ŽŤ+ˆáĆD ąšÇ0CŐ<8×Dž‡ 0ÉŐ¨N-lŽBjvŕĄC‡X3ž–-[7óĆoréâ%ž{î9JĽ2AŕłeËęő: ŒŽŽňóŸ?EĽRĄT*ąoß>Ţ|óMšÍ&kÖŹá‘GĆ0 ž{î—ÔjőTçŔu&&&°m›ŠŠőüô'?cßţ}źýöŰLLL „`ppĽĽ‡˝Áđđ0ÜϚ5ăĚĚĚđ‹_ü‚Je)%ďż˙>_ţň—yó͡˜˜XËÔÔo˝ő6k׎áŕÁƒ aš9óĄ!b‹yÇÁuěüÜî盔SÝа €Ú˜Ęú*y|źŢýŒÉ#<ňřl‚3ŔSśÁ–/`A(v˜㠂H2żđ‹÷aë¸Ë[ç=F̈R¨°ŐľŠľ×űVĽőZŸýěçt:[śláęŐ9<Ďgzú<6lŔu]Ö­›`ff† bÚöřř8/˝ô2{÷îáŘąă>|˜;vĐé´YZZ˘X,ą˙~žűÝďáű>kÖŹall Ľŕ…^ŕ›ßü&óós:ô&›6mâüůóÔjľDôÔbff†bąÄđđH*dxůňe Ădll”—^z…8ˆišźđ lذjľJŠTęQŽFÝDÖ@Űëpxţ;łDDœç9jžOŮ*2n˛Łź#ű,%‹C3.'+ظRČČ&"ŒŠÎ"FĚ !P†ÁúŇ6lcő’–  ‚€]ťvrĺĘ,gΜáÜši<ĎçěŮł\ž|™˝{÷röěYî˝w ˆ­_ż>ôŤ×ë>|$qm¸ĘěěUŽ}—G}„ 9věccŁH)ůöˇżÍˇžő-vîÜÉěěUÂ0äňĺÚí6•J)%ív›wŢyĽ÷Ýwďż˙>Š]gĆe6ۡoăęŐ9Ęĺ2 ‹œ9s† =z”ŠŠ)‚ äěŮł<řŕƒŒŽŽ|¨63ü˙ÝďđÔ/đłçsúÜe|?$LŘ$Šk‚M›ĆůťżóEÖMŒâ8Žëđ…_9€ăřÉ/ޢśÔdbl˜Ż=ů ›7Nđ§ń —f—PÂB˜ŠH)üP&ʈ€Ą„ŰwڌŻá7Ţä̙łœ9s6u蘙™Ą\.łgĎ~ň“Ÿ˛aĂzčD¤ĐŕŃGáäÉSźúęŤ\ž<(ž}öYžůÍoŕş6oŢ ŔúőëŮźy3Őę —.˝ÎO<ÎéÓgi6Œąyóf Ă Z`óć͔Ëe6l˜âŢűöóěłĎâű>|đRJ>žđk7Änş@ŚvhËNĚSąe.oĚŁţýId­ ‚Hv‰ Füž(Ë@š&Ɩ âńľˆűGáŔ(Ćţa„m Ěř#¨C+ňŽy333Üł{ĽR‘JšLÇó8ţż÷{żÇńăǙžžŚRФ"™.\ä÷˙÷8}ú4/žř".\ \.sôčQ|đA@ĐnwŘşu ó7?ć÷~ďw9věçΝctt”5kÖpćĚYÖNŹĄŐj3>>Îĺ˗iľZ<ýô3üöoÓ4qœXťbqq‘Ë—/ó+ż˛3u9)Š4›MöďßǏüS<ŻĂĽK—Ř´i#ƒƒŐԚřvľŐg*!KaÓ0nkImwŚ/fŮyäqk)cňČ#<>ł`LśNX?‚ďjňJPÇ)UůŁÇřwŻ´ů?QcËń) vďynö›×e׎ݟ˙ţűŹYł†ššŤ´ŰmîĂ.U’4^iĚqٟĂń˘ľ Áef9ךfŘ`rxr™%j‰ ›ýˆČbÁźJ€O(”Bŕ„%ÖƉ˛!Œ­úšŮśMťÝ˘\ހRąMăüü<őúoż}˜'ŢgíÚ5ź÷Ţ{ěŘą3] úžĎwżű]{ô ––,,Ô( LMMńWőC<€eŮ:ô&<ňĽR)ľäâľ×^gçΝ8ÉNq†źđ ˜ŚEłŮäůç_Ŕu]ž{îyî˝w?çÎMłcÇ&&&řяţšíۡqöě9Ž\šÂř˙áŰ<öŘŁœ>}†RŠÂ|ŔţýűřöˇżÍ?ů'˙řÁ1†ÁÖ͓lœZĂď˙öçxů“|˙ÇŻđîű¨7Úa„m›”ŠűëżÂƒvPtí”8362ČoýúŁüÖW#’’0đšşŘŕ?;ÄOž;BӏśJť*›Ť‚ĄŹjľZĚĚĚđć›o˛fÍ8Ží`&­V ˆKS*‰pllŸ\(EĄŕ244LľZĺęŐ9ŚŚŚŘľkgRc044˜:v‹Eʕ ŽăbY…BӌK¤(—Ë1Ľßu)‹ŘśÍŔ@…LÓ˘\.sđŕAŚŚŚRkć˜IŚŕ‰.šş-œ,ŁuâNŽR’jK+Á–2b]QpâgÝ Q—[ČęˆŮ6ňľŤ¨çg[*˜żłăńľP´Rš űJżS†a°}űvŽžű.űöíen~žőë×S*¤RŠPŻ×Ă0e9ŽĂčč(—.]ŚÓńŘ˝űvěŘA…Řś…”qťUŤąžVš\Jma}ß§^ŻŁ yŸ źöÚëX–•şY–…m[ŠŤÍÔÔżńżÁoźEEŹ]ťŰś(‹”J%FFFŘťw/Žă066’ŒÍ…Ô^b7˜Ď˘sׇOđÉË˝îôşG­ Yó1yňřŒžř9“GyäńŮ řu/˘aD4 Á–H˛; 1ĽäřĹ6Ż4: řß~Răü‚âĘUT↘ŐôXÇa÷îlßžÀ( (—Ë9r„ŃŃQ™˜XËđđPjkŰFąwď=Œq˙ý@Q.—ĄPpÄuśü˙ě˝y\×ućůť÷mš/ľď @a'@€ .")R$EQ‹ľŰ3w¸5á ťűw8䞞°{‰Ű=퉙é{l-ْmYś(QśľP)@ˆ ÂJlU(TjÍÚr{˝?^fVVĄ@¨÷EdTUVŽďź{ß=ß=çűş;ٸq#űöíĂó<:;;yüńÇŘżŚiňŔť!‘ˆ“L&9räŚirîÜY˛Ůşťť1MPŒŽŽ’ÉLŃŃŃÎ}÷ÝÇáÇB°{÷nlťˆiš;vŒ–––Ňk&( ´´´N§ßsÂxrö™b‘˘çˇŽ Ň-š(ĄČ ĐEˆ‚SD ­Ô†Stm&ěIšŰétť)äňL§S—˜QÓä˝őz#‰PMjW]#ĚÍÍ39ŮO__íím€/Â:44ÄÔÔ4­­-Ü˙ýźúę^ß ¨šiIź‹Ĺ" őŘvŠąą1z{×ĐŃŃΞ}o055ͅ CŒM †UIŢNž<Ĺ˝;îe``żřóżäˇţŐ˙ŔÂÂSD›0 ÇqIĽRœ??H}}]ĹV´LŐ×דH$ˆÇă(Ľhll˘X,’™žářą“444UlRod1.„Ŕ˛L,Ë䉇6s˙ö5œ:}‰WŢ<Áš‹—čhЧš1Í÷Ź%lYč†V|ô<_ƒčüđ'Î^bdlš‡ĎpřÄ ŮŹŇÍJy˝Ąë„ÂÖ×néš$Gösöl„žž°m‡x"ÎCďáľ×Ţ ‹ŃŇŇB"'‹ŃŮŮAOO7ĂĂůůĎÎşuëhiiÁ˛,RŠ$}}ë|]œţŁÔÖÖŇŐŐAccCĹĹ'ŃŇâ×śśV>B[[őőőÄăą )YWWËČČš.ihŹ' ÓŃŃF[[+ǏçȑĂ<üđĂž‹ĆÂX–E.—ŁŚŚ†ááavíÚőŢç=!k!a–ˆO :ˆ‡›Đś×˘t‰ĐKsœ[jí”e‡`"‡ŰŸAš@]Ěâž0ˆX—DÄ}ÂP ˆ ‹°f]1Q“R˛}űv^zé'ěÝű őôôt166Še™ÔÔ¤1 ßUÓôŇqďÄ0tjjҤRŰşH?ét’îî.„𨍍%ÓÝÝI$ĄąąX,Ι3g8~ü8ÝÝ]ĚĚĚrńâmm­„ĂajjŇ|üăĎłoß>jkkٲes%'Ož$‘ˆÓŮŮÉĄ_ŠÖÖÖB$aëÖ-9r„t:M*•ä•W~ĘSO=śožI[[žçŃÓÓ\hü"ć˝Üyçţ*îŻ22Ťü.Ť~–oeď?˝t3HÝťĺž}3™Lp´pW˘Z_@)…’Ď~áóüΗżL8˛:7 ˛Aą˜'‘H\&ŠŤ”˘X, ëŇk¨HŠq]c\ =Emą@v.ǗßŢÍK ÷˘Ě$!ËŔÔ%˘0ĎşwÂďůK’!‰5‘Q-f MÂĽœm÷ůżeY+ y1Vd2łX–…&u\ĎÁuB!ŤÔ"*+…b˙§˙oxyě Ž˛K–U …çŰR kŰŮTłžśHőá4 3F&?Ă×O˙ ç ƒ´XM´E[i 5'‚( Š^x$Άć ÄBą ŠPý|͘cǎÓŢŢNss…Bď|ç6lŘŔŔŔ †Ą“JĽŘ¸q#_ůƟ°gĎz{{Đu?,‹ěÝťË ałłsŹ_żŽŚŚFţţď˙ÖÖ6lťČääťwßÇOú =ö!Z[[9~üĂĂ#ŒŽŽ2==Ĺżü—żŽŚiœ8q‚éé ŽăĐÓÓĂůóçq‡h4ʉă'éěę@×ulŰƲ,tÝ`vv†x<Îää$}}}ŒÓŢŢÎńăljĹâhšdçÎ{—1J)ććć‘ŇŻ ňŤN˛ĽĘ*UŃ1˛m›LfŚ"‚Z9|J PĚĚů•(‡Ž 2:5Úöś­oÇ0üž–š…<‡Žň—ßÝÇޡNbŰžËĂrŐ@)ÉXˆßţOó/>ó!4]ŻT4c ˛ŮśíV„ş‹Ĺ"†ĄUâRž˙lĎáčěyţ`âŰě÷Ţ-e{0’E gaÎöoyǗ45ˆś a_äˇŕâ˝=…š. ?Ԍ¨ľ0ĐŘJ˙śáłěH­[q\-žcżxI˘çyĚÎÎů•TšÁjŒÜ\×%—çţŕůŰoţ ŞT…xľc{7]ď=ĽXŰŰÉúżÍŚ k—ˆÍŕƒÎ’hÉ5ť `EŔ)ÝÜŇÍŤşŠŞŸŐ&ZՋ†ËśLƒĘ˜¸Ż@˝§¨őTEdÔŇĎ+VƒN`š~Ņ˝ ŁGăčÇŐĺjňÁĄźŠp•ÇÄ C ădťâ†„PH„/Ä+AáđfćGfOSc$Š %Š3S¸žËéě9•ç´{óů‹čB'ĽÇH)ş"í<ďňEgŻ@Ā߂˛~ýzÂáPI`Ňŕ‰'ž@QŠşˆD" Q__O_ßz†††*-şŽóŕƒ266^ŕŐ‡CčşÎc}ˆP(Äěě,}}:étš§žz Ă𗠽˝kH$ôööTÚ4McýúőLNNâ8.„ĂĄŠśĆŮłçčîîFJICCŮl)ýD|ff†-[ś Ľ_ĽF ‡ĂĚĚdhllźĄ„Îo9Ń›š™Ł˝)ŽůăĽ<0jÓ \×cۆNÄŠ üŕăÔŐ$ioJ1>=Ď /żĂ‹?}‡ó§pŃA/íC)ľd}%uşú$­Í5>ŃI@Ŕܤ4é)Zľ¤+p…o…˘& ˆżDőOú‡?Ş# ¤Ŕ+ş¨yÇטI˜ČÎÜ[‹¸§ÖÁ”U ^­ž:-šš”|Ůl @€Ü|dL€ÜĄdLšüJřŽŐ;ŰĂhíʈŻ; ¤$; “CŹ\ #JiĹľi…ďžTÖz\Y˙îfÓ;eŰ'Qr}’TŰ5ßiđ<ůQĆó ]*mI˙w)@xŕ…-l°™*Îs.;ŒŽoßé ×okÂE!ŠĚ9Y.Ć):6ťęv\ӒV×uRŠĹ¤RÓ4ęëë–<Ćq”ňřČGž$ŇŐŐYŠňŃ4p8LGG{ĺX—w„H&“UäO¨ňťiš´ľľ^ö™LÓŹčĘTżŽiš<ţř‡¨ŤŤĂ0ŒË^ŻŚŚŚň{YtšśśŚ˘SrĂcH Ç叾ń ëťxâžőlčj"2ŃużÉ0­a‹X,̙Ńiż€‚˙ë[ݰďíłŒMΗxe$UÎÜRhtCŁłľžŢŽFßęz…Ń"*fgjŃjuY’/nĺdRŇcÜšŐpAÚJ°No&‘3#s(*˘Ă}uˆM)D… •Ú•„đە˛ęRut÷ÍqÄń ňŁmđL˘ĘE(á…Ůdu˛â•ö˛ŤÍnşMy‹ąšěöeî^ĺń´n @@Ć @€÷J”’9Ÿ°X$WĘ+uŻ’đ-O-÷ﯝEˆŇ+ĺœ"ónŰs/ŰVU÷ˆĚMŞó‹rÂ!¤Ä: =Œ!äť]tNĎ 3™Ëb{­Q"b¤đ!„,ýď&p=…‹ć‰’¤+?ž,}‘4Ň$Í$Rțbó™L&ń<ÄbąËÚ}źŞś‚rťHšíŚ-4tý†+\Ţ!hkmÄulţňoóˇ?ígko3żöŃűŘłľËԑĽďnšÉD”Ůůoô_ŕ‡ožĄ`;xUm ⲑU"â!vlꤚĄöŠ”ŠBQt]ćÜ<§ˆţyŁ*ŸtYkLéuÔ #L VźĽç ŔŇ ÂşIDW$!Ţo”?“Šě őňĂě;ô‹ ńqîŻCx %DI,Y,9śÂůĄf˜ÎŁ^E„%JAťVÇá>šɊžsŞ4§ °ńČÚň^W•çQľČŔ]Îu­j^\é~e˙?MhÄt‹°ô{ƒŞœÜ řî~Ş" ´ÔdL€¸sľEyМ_,_ő şŽgčx×ŇľQ࢘wňLç™-dY(äBE15MjĽýü+_¸ËŐŐ˙WJU%‡+ĚłĎ>[y-Ó4KvĚ:ŽăTt>Ž7Ń~?zR ˘‘0_xj;‡˙ěef {109Ďű7ľĚç ´ÔÄ1M‰Ě<Nňɇ6óˇ/˝ƒ-%žž4Ą_úŤ_]˘KAks-Ů˝‘e^vƖI–œk3]̒),0[˜őI3LÄaHßíÇ+‘+k˜¨JŇžt\ůçžD\^FQ"×\ĺRô”&Ş™%îȊ‹ň÷^›hçÉ™Í ¸cL Ç˙ĘşDů’ž—Í/(…ŇAYŠÂ§ťš¨T—hB’ň"Ѣ|2Śě´TzŒŹ$܋mM‰‚”Ľ1܀i\Ű&ŘśmΜ9ËŋCD"Qz{×°wďkÄb1Ůşu Žăŕ8.Ÿüä'§ż˙(ĄĹĽK٘ŚEwwcccě߀xúÜł ’ĎŻŽŤ8xđ ™L†X,Ćŕŕ kÖôpâÄI ä˝˝ţţŁ477Ł”â̙ł8ŽK8ftt”P(Ě_ýŐ7xâ‰ÇoČbúý&eążúô.Ćóű9pvWžűÖr śv5 €T2ĆĽŮ/žÜĎŹ'QVČ/iQËĆ!ţ`“†äšüŇŁ[|‚j…˘č9䜧&Î3š™ŕ[E)ĹţŁ d.ўn˘ŕůťĂ/ńhď˝ĚäćH…ă´$ęé=K܌s Ld3ÜÓ˛ŽĄĚ8 °a2>?M&ˇŔžŽ­\Z˜Ćő\Ňá8†Ś32;ÉOíç?<őëŇŔQ.śrą„qÇĆ |{éÚD _*<ƒ3鱗S䤍WLžIÍR’Z"ˆz!ö8kůRĂÓ4'ę翕fá)óvŃŮINŒçš  ExůĚ[ť4ŔŽÖő\œçěÔ0†Ś1Ăd 967­a 3‚Ť<˘f˜í嗷?ÍđĚŽrI†Ł9MWş‘ńšÖ7v06;Ms˛ŕÂĚX‰ŔŠĺ‰Ţ¸Ľó&¤Áe1@€ďeő‚§<”ňJ-Ë> …¢“íTŽWŽëĄ”_É"ĽBá–ZmÇY˛&RžByĘ[źPşŽ‹ÇőJ•Ą‹ŽĄĘóπŒ  @€;RJrů"˘čbz KĹ˝ĽtÁó”BVi}”ws=ákĘxB”Dp%ÂSDěGÍP°ĺ5íF•ň/ş“ŮYtŠńłło3™Ą1QÇÄB†îšVl×a|~š‹łăŹŤkçOžÁÎÖ>öăÁŽ­d˛sÄCa&ł %b…p<˘kcťƒÓŁüă‰× [š×0:7Éśćľdí<Žç—ązĘťs/šRŁ>‘ćÉčœ&Tš IDAT.öä6qivŠĄůIfĆ873ĘéšQ†í óp•ƒ‡đ+fĘäL•(gYcF0Đi°jŠÖŹrĄâ?ĆqźŠîN*&‹aYĄJ+’^iâĹu}{fÇqJ.H˛˛@“Râ8B\wńž\.G2™$—ËÝ}ôŚşĆÖŢ6~ő‰ćěw81‘#ç)žwx€ƒ“Ô'",䋌NgÉmjSHŠ]1nžňp•ËĐĚ˝őíźvîŽňЄ$ďp<OšĚsœ@“Ç.çÁîÍüŕä>ś4­!‰“+ć™+dy{ř$ă Óô5t6, ŽÍD6Ăw˙”úxÇsé­kÐ:yŰ'Šę‰âNW†őŰż4újťřMů1â?će÷=‡ˇ˜^\qT’¸cńaśđ+őąśśS3Ž:–ō=ĺ‘s ›Á™1Ţ=sĆXšáŮI<ĎoĽ,:6.ăĄîmź3rC7xkčńP˜Mk˜ĚÎPt‹œŕěôEś6ŻĹvŠŽĂL~ž—Ţ=Č\!G]4E&?ǎ–ő§¤Ó%/¸(ŕ=Ż+kŇ)’‰8ŚščŇ¸ąŻ—=rk×tHÄKkIC} éT˘˛~BLÄ1 Łâ¨ ëMu(ĽĐŤîŻI'‰DÂDJNžłĄ¤ľš)ĺ]łĄ1𠆲ĂM>ÚMfđűDBxN%őP(<4&œ-äě¤QŞt”mS˜ŸGzŇv P„ĐBÓđŇ5$śożF{‰@‰&%M‰ZNŽ ĐQÓD[ş‘Ÿž~‹=][ĐJ˘˛RHj" 67­á•s‡¨‹Ľčkędtn‚°iQIrtôÝ5-LĺfÉ;Yl×EĄJŐ4 65ő Eš0=JM$AŢ)VD)äo#˘iąhŒp8L{C3÷ÚšbžŮb–KÓź;>ÄáÉóź›cÜ] ˆŢń^ßQ „đФAW´…ˆYŐű'“ úúú8ţ<›7o"NÓסžX,JKK3†a i7öąyó&ćç#Ž088H{{;k×öbŰ6ŹYÓCGG;““tuuqúôiÇĄłł“ááa>űŮOóîť§ąmŤJÔöŽXŒ AIJxtëZL]ăżž|œwFłŘ\Ę9Œĺgń(!Q†ľHN.SÄöV1žßŘČŻ=ś•öŚ:4)Żrş tĄah›{řłßĺĂëv1WČ3šÁŇLtĄa+ ŠŇ™nb|aOyěîÚLśX`&ż@"çäŘyÖÖľ#Ľ o14Çsą=GšěîÚČĽŮiO‘ů-1‹Äƒ?Ćďt"ڞ@ŐtÖÖtđ[ćÇŮ<ÖÁßçöqÚ ‡oe­V b¤’˜JcmĄO…îçŃĆí4ĹęЄś*2Z&5bf˜°aááąžĄBąXj[Ź~ŇĽĆşÚv†gĆAŔúĆ.ÎN\ŔĂÂQł…Ző8ރíÚ\Cęlnî&Žńúů~’á(猪›’ $-x/đľ["%÷Âę9°wM=Ý— öG#á%•B`Y&Śi\śŠ–ÜŤ§Ôp8\rK\Ô&ó XŽ€Œ  @€;4Y”~u‚”’ô†‡™Lw‘ÉLBŮͨlł˘hz˜ˆnÔłÓÂÚąţë×ő[j”B”.˛ĄXŒĆŽŽ+ťä”ZgšAX3ŮŇŇËŘ|†Ÿ:Jńü–GčH5RtŚ›H…cX†IÔ óhĎ˝ÔFR LŇŰŘN:g˙`?{şˇrxř4›zˆY!r9>ąéQ !ŮÝľ…˘cłšą›ˆaqjlçúĐ:IX3ĐT•>Ζ$V˙.ĽÄB†E<ĄÎKљnd{çz>ZČ3>=ÉŠą ?ĂŃÜ—ÔśňwוP8€†‡iFX—hÇ4ŒĘNŇU/ŢşNWWg•5ľd÷îűBH$R˘”âţűďCÓ4âń8 ĽžđÎÎ4ÍONzhOĺ; !řČGžňŰDjk*çdssBvîź÷ŽߍnRB‘ˆ†ylűzšÓ1ţď—óĘp‚ăâxĽŽ$żđeюşź˜ kASDňš-üŇ›hŽI˘i˛2Ž*ç…*iœżŞM–0čH5ó܆‡řŰ#?F)ŘŮÚÇ=-ë04ßnüĄîm´&ëŠ 'ŘŐŢGwŞ•Ą™)Zq64tqběš˝“-=혆šÄ-bŠťĎĺC´ŕ9dě<ˇPq ¸â1_žŞ~ ‚Cj$aŠßöxfł9lŰ­TT‹E CťŚ3WľžŻy pńČ-d™˜šb4;ɸ;‹DPŤĹiŽÖQ“ND}B“Ľńšę÷VĺÁŸrJ-^ „ťd ,Žâe˝$)*Ď +ÄŠňY–˝–CÓIęai oŁ›’çyĚÎÎašşf°šÂ×uÉeçůŁ?řCţö›ƒ*ľĎŽ–üşÓŻ÷žRôööđď˙Óďłqă†Ň9ü‹@š,?koőßnOLo] V¸_]áńj•´Ă !áXj7l 8Ľ›[şyU7UőS]ť,AeL€ź}őďe˘çjšâßçJ•˗Fai YqňnqQł@á ßÂő“@`J4ЄD ßąŚÜŽđţ\ÂĹŞbWMŞ•ă¨-K°5)ŠMĽI&lę^Ë\.ËČĚçf.‘u‹ěné#^ć¤síŘ^ßYą<öWJ–îž$ęęçwő}š”ĢžÜš™ëć852Á‰ąy.Ě™.@Áő"š¤>,éJYliJÓÓROŘ2ąt!W™l–LÎLŠ‘6Â䤆­ÜŰzd Ą’†ÔޡĽËßV\ך*‘%Í%‰ GiS­xĽö.ż˝H–Ź[ĺő“„ň™)$5F”œ0(*§Džů{ż>łĘ¤F]×ńĎM! ISj‹Ň2łH ͈˘[qtË H€n*2&@€nsŇ¸źˆ¤œĚW™kíâŢ$čňÜČwţ ĄŇôĹ\Bąč$sŤĄ|!âËš[üćKŽť¨ŽXzÇ´Šœ€Ô4tM#d˜ÄÂQškęŮÁ†“Ôĺ,V:eŊ1źVŹ*šaHȤ­ž†G‡BĄ@ĄPŔu}]׹B–e!ĹŇ˙jÉž/’[՟ŻüäŰŚ~˙˜zŢr…T×Ô+šŠUt ¤źâöZÄóŐ™ňYĽ!‰!Vˇ |Ľ//.ęő̃ˇ9`~¨îôƁř`! cŕv%ÂĐôlĚ%âfŤMîoWbť$¸­â-%˝!üdDܞýaŰśKńŠN—ZA^OÂĄ˛<ĆŤx~€+'řŽëĄi‹ şŽkäóůŤśž\)šWJaşŽ‰D.ű5°š-ю)ľĄÜďGœÜ’EęŇvß­ku ˙Œ‡›7†ÄHńŢŢövWƔÔüů*˜gŕv cŕvĺBĽ…ŽŻ™ SvćXž *ĽnŮűßiip‹mxUÉ&źP(–ŽOuՃŹÄęŠâÇ×8ޡ*–ż¨đ<l6ˇÄ"Ów"ÓÉçs˜ŚyÝ-*Wľ;^ĄĘâzb*”/Ź~›N”ňINĎó0 } Šĺ8śmcĆűLśXœ %—ˇŕŘ ŔíBŕ› @€ˇ…c•ÖÇqYXČâ•ÄzWzÜ­¸Ý=ŮÁíIşĘIH6›Ĺu˝%B˝ĺXyž"›ÍâyjUU1nmҘËĺ|‚L7*„LŮ}JJšššRŐĹľÇâňvŁë!oŽJČ,7›P <ߞžZHřVßŢďXŮv‘l6‡Śi÷Žę˜ełYÇ Ë;€ˆńç@]7îžëE€ÜĹ*cŕ/WŇJĐ4 Ó4ąm›ůůLÓ¨¸1U™&]ç‚úňç\­ äJ_üœ7ţž7ó3ÝČ{Żţ~QŮ ö<…išKŞ-ŔßÁ/ÇjvvË2Ńuíş?Ďő;7ďř\ďšt+ĎŁkŸŤNçš‹E_Ŕu˝Ťdܢ´ąŞJI×uLsĺ6¤2y&„Ŕu] …" Îe:2nmŹĘ ˘ŽëX–qYÂXŽ›a•˜bŃ&—Ëăşn0Žn[ŹüÖ>)%†a`YĄ“űň¸˛, ×uq‡|~Ďó‚ąu‡ÍŕÖ" cŕ6/‚Áß–RâyĆÓZđ‹ƒęv•r –kˆ”cĽiZĽŹ?ŔíU9QźZ …RŞBř-f^0Žno´bĺX­łňă4MĂ0Œ%ą ô–îŒ90@€ÜZdL€Ü\ËÎrŠĺIG„ÜžddĽxT'őˉŸ<ó‚2ţۘ,^iě\O\ƒńtâUČQ¨%"°×rśŞXż ¨eBć´—˝s`@Č Ŕ­G@Ć ŔMLŻ”.&‹ Üĺ1ŤMƒEňőŁú؎䐳üďĺ;ÄŐ1 ’űŰłë!b–Ç(ˆ×mŠŞâFśÚŘVŃBPÉâuóŻMKçżŐ́ŕÖ# cŕ%ýWJ’>‚[őźRJs AS!DĐ&sCqY<ŽžđĺbâX.ŐŻ&`–—í;ŽSzN,ŢÎxA™ÄôŻnŠ&kĘăbąLQś2ZŒWÉÚhq4qíʋëyÎj^ď=ĽŐKž×Í{ě<÷ňǔǕR~l4MrE‚şż˛NĚňąTf܊ąÄ’8-Ćqĺ90@€ÜzdL€ÜôĹďʋYĄK…„Yꤤ‚ń[‹Ť%ŽëR,ÚK,wcĽJ žW‰U–Ű?ŽĘ?}ç—"JQą!ŻNŢ=ĎĹó< CŻú9ůŽçí„ç)ŠEĎsĐ4˝ƒĽd´ë:čş/ä[=&ƒXÝÎ1FÉŠĚŽˆ/מ¸}ßŕ&ăjŁžçťť†ž˘#Ě՞ŕĆbqĺhšÄ4u<Ď­8ď”ürőRŮŇ:Ëű3ŽŞE|-ËüJĽj˛Ćó<ÇŽ¸Ă,>w‘ˆQĽĘłj~Nš$ˇfq)–e 8Ž˝äŽëVˆĂ0.“n'|},Ó4*s`€¸×Ëŕ ŔMXŇŽ˘uE)…ëşhšDÓVˇ8-Ýú„żě–TmƒěďÜť•ňýŰuޏvź,ËÄq-ĆËmdž“’~x)J´ŒľtŒ]íŕúĄëzeŢ[ZmĆŇěFÇSŸ÷>žĘâ䚦áşnĽÝ/@€܆ëdpŕć,jŤîĺIFu’ŻëÚu%îŐ˝ü+˝v€Oć“FƒbąˆRz%NeWĽŐŠ’Žć˝‚ž÷qVnĽ¨NîÇ!‹ŹŘ꧔˘Ź¤UR;Y6ŽV3žŹ~L•ö?×u+•€ţ¸%Ľ{í•bśŇŘ âv Ž“ĎŢ3I @€Žcî A€ÜÜdq%ĘĹ\wU ÝĺŽKŐ¨vYÉăÎ^HŤ›BnÜŹX-&ŕşŢ’Ö—Ý^’4:6v!‹çRGGš†D{ĎUe›íEńÚE§”jAŰjビěŤ%6ăŐÉţŠq.v˘ę4ŹnQR,j:-}.Čk­wúńşÝŸw%"ş|.ú祋”úuÇüJYË-č—ĎĂ׳j‚ŻŹ_SÝFľü3]Ďą˝Ňçń<đJçž Iąô\˝M1óĹ͗ŽŤwď<šxłDřüz_Łüü÷Ő×0)eŠĘÎŤŒË˛ćލ'đ\!—^—o~äd€€Œ  @€ťŒšRRr˝‹řjw‹ędÄś …ŚiTtŽ•ÝD̝EČŹî3ßŘçUŔěđ)2/ţ{ŒáŸâę1ôOý9 vƒńŢ‘Žë2??O8Ć0 fff1M“bą@,Ç0tŠĹ" ¸ŽG$&}`49”ZNRŽĎěě,étÓ4ߗďQ,™™™AJt:MąXd||€x,F*•ňÇß ŽĽ<.‰DHĽ’Kž˙ÂB–|>O:•B7‚t9@@Ć Ŕ]ˇş’ŁŇjD‹–Żţâßq=ćr Nrćâg†&élNłŽ=I{s Ńp¨" źÜúwľÉÂÄÄ ŘśM6›%‹­j!6;;‹ă8$“ÉwŤ<Ľ˜Í{Lg=ň6ÔD$ЈÄĐňŽÍkŐ{ŠżëÚ,\x5v€˜˜AÉ,÷ý5Ý[‘şqՄőZ˜˜˜ŕ[ßú;w§‡?řƒ?äK_úůęWżĘ˙üo—x"ÎkŻ˝Î믿‚ľk×ňÜsωD>Ŕť|âŠD@ـy1ąW؎ËDÖćœͻ™çg.ĺ<˛žDâ’0$-uIIg2D{Ü 204y]ăĘu]&''ÉçóX–E}}=šŚĄ”"—Ë‘ÍfŠ­­˝%ąq=EÁö˜\Pd‹SR„L Ë棛EĐ܌שŢݡm›B>GĄÇó<4ЁˆRaů˝ŠĹ…b]×1M󲖛Ť}ŚrŹ^řÎ <řÍ--ôŽéáÂĐ>ýéO‹EÉfł„Ă8{ö<đ†Ą“Ďç‰ÇăX–E&“A)E:]ƒműÉd8ćâĹažő­ońťżűe4MĂSÉzüĂŰYŽŰŘüě´dĎ‹GzĂÄCÁn|€CĄPŕÍ7ß䥗^Ćq4ŠńkżöŤ´ˇˇűë))ŘŐd˘”˛2ŢŘťw/Ď?˙óRФ˙?)0M#8ÁdL€ÜńiáýŤŮYŻĽôŸçkńu~óˇ~“ŃŃQŽ=Ęý÷ßGCCĂ5‰‘‘ňů|)ٗ•Ş˛˝đ\Ţĺ‡Gsœźd“É)Ö5<ܢˇÁŔÔ?xI‡RŠb>Oqô$Úü"ä"5 ÷ü~˛™qĚh˘˘[r#‡ĂÄă Μ9Kfz†––6bŃů\žbŃfvvŽŸýl/Ď<ó4=zŒůůBĄ0š&îęqľrűŘ՝xTŐÍSŠů\žˇ.ĺyeŘćÍI›ą˘ŔöJç¸ň[T „ƒ%Ą3”ăŃ&“=-aúę"˜şŽ” ĘĐUŢ;ŸĎóÎ;‡9|ř„Đčë[Ďc}ˆP(„RЁAě“_ůďžxÍ*‹r+Ëňo§ÔJc\THݟäŮwÎáҜKsBcW§Ć˝ôeď÷^[çŽTx=sdőëyžG.—caaÇś‘R ůžRÉQnąńuh‰çšäó9 ĂŔ2-?ů\Ĺg*“Ţëׯç‰'ĂśmΝ;OĄPŕčŃcLMM‰Dă­ˇŃÔÔÄáÇIĽRtvv`š'Ož$›Írß}ť(mŽ9L"‘¤ŽśŽBž€mŰ˜Ś‰Ťŕ؈͉Q‡šź"b$pp Čş“x(h pcp]—ŠŠ)\×ĺ‰ÇŸŕ…^ŕő×÷ŃÜęëë ‡ĂLLL044ę3ghiiĄŽŽžŁGűŮ´içϝ§ŁŁƒů…yFFFxîšç8yň$gΜáąÇăđ;‡™œšdǎ=zÇqXˇnŚi200ČŚMŮťw/ är9fffhnnćž{îa~~×uyäŃGٿﯞú3ślŮÂđđ0˙îůwzëmžůo˛óޝ ŕwŢatt!uőuxŽG6›eóćÍ‹EŽ;†Śiôőő‹Ey÷ÝÓLLLpňä)š[š™ššâç‘ĎçXˇn“““ŒŒŒ0==ÍŠS§¸xń"mm­lÝś…p8´ňȘ¸Ű’H?‘\]YžçyţÎýÔ4??z–ˇ/8 ,$-4 [!T ˜ĆLśqÉčâĹÁ ޝĄăŘ ś5KîÝÔEc} ŚĄ!ĽśŞČq\:ĚÂÂSSSœ??HKK /żü ů|žőë×aŰ6gϞeÆ œ?žl6dž }‹EňůůꟴÄb1>ôĄGhhhŔqG/:źv:Oх!9;nŁIhNéws3´b*IäüsŽFŞůŠ"‡™8F+ăă$Zz*ůű$ŔĄPˆ5kÖđöĄwčď?ΓO>i™(%p]'—Ăó\Ňé4şnĐÝÝE(ú[/ŐY1.ž‡§2 źp.ËŤ#sPt=<Űg–żBAŔ†Ď;ź59Ë3E>Ô§&l"J€ŕĘäk(˘Żo=ǏÇ4,şťťŘż˙çΝ§łł)5N?ÉŔŔ ű÷ďÇó<xŕFGG9vě‰D‚††ććć¸té;wîäřńă8ŽËƍ}Œ ’ËĺČdfhjn˘PČóŔťijjĄ1•őřÁń<“sŚcs/rékQ“Ü,nîfşŽ•ÇĐÂÂ< (Ď­"[ Ÿj-Œj{lQJ”ťˆë¸D"Q–ëŻüy}bëâŋé?J}}=žç'ˇýýGÉç ärYZ[Zhnj!•J100ČČČ…B‘‰‰ fgg‘RŇß Ă08sćů|Ý÷ß_ŃĽ*Ďą9Dž MQS02ë‘Éz,˝ŕ˘ŕ=ĂĐur9Ÿ”ô<—W_}•ááaîšg?Űť—‰‰ ršťvíŕĐĄCÔÖÖňłWĆÇ?ńqöíŰO<–ŕŻ˙úŻŠŤŻ#ŸËóä“Oň˝żÇůóœ9s†śÖV¤ÔˆD"8Ž‹m;üŕ? žžď˝ř"‘p„wO˝Ët&ƒ”’üŕ‡|ěcăŕÁƒ444đÝď~72“É008ŔÇ>ö16oÚL}}ŸúÔ/ńÂw^ŕÜšs|îsŸ+9ćtvtâŘŻżţłłł(Ľ8đćö˝ąx<^úŽ÷páÂ~řaΞ=‹eYŘśÍoźÁž={řîwżKSS™L†…ů,ßüć_ł߁ŇF–ĆG>ňJ)†‡‡ůă?ţcÖ­[ÇŮłgI$Źí]‹iim}2&@€îÖÔq1ÇęŠéĚ,?ţŮ>޸ dÜ$„k!d˘<—ěôťŒüęv|ŠXű=ˆD;Ă^g'8ś0Ç˧˛ŤÉĺ™GwRS“B_…Нçy yžň•?annË ąďœx;LĘó˜Ë™JmCkÝBA‚í)2Ó6Ůy›.×}OŽ%şŽÓŃŃÁž}űšték{× ëůBŽ#ýG*;œ˙üĎ˙Lss ccc|á ŸçîŃęššđ”‡ă).ÍdůóăóüdÄaÖ. §^}Aí.`ťŠˇmÉć(:.ĎŽIľ 4 ÚUâ¨ë:őő $“)BĄšŚóă˝DŃś9tčO<ńa …Żżţ:,Œb IDATţźdÓ­ąwď^žzę)Ξ=ËÄÄ$ăcôöŽÁ4MršgΜarr’Lf†Í›7qâä)tĂOžNž>ÁŃţŁěŢ}?çć GÂ)Éç DŁQ"‘ĂĂĂhš$‰ř9–Ĺšsg‰D"äó„ds9ćçýöO!íi¨%™^PĹԂGkN*¤ Ŕ{ĹŋÉç ôôtsßý÷1>1Acc#<ňöŐ?Ł­ľD"AoďZÚŰÚůÚמĆÔä46l •L#…FĄP¤X,ŇŃŢI4Ľąą‘Úš:Nž8EWWýýý¤Ói>óŮĎ …FG{mmm|ó›M!_ŕĄçćG?üO?íˇýéŸţ)ŽăáŘ.ů\ÇvQhšAWW{öěÁ4-ŚŚŚş0Ć ™˜˜ä•W^a׎](ĺ‘Í.0==M>Ÿ/iD tÍż&nÝş•ţđ‡|ń‹_äk_űĂĂ9wî_úҗ˜ŸŸçßřMMM´´´đěłĎrřđaÇadd„ŚŚ&ŸÄޚ‰=ö'Nœ ›Í291IO÷šťKú.@@Ć @€+-ţ/żšŰŽĂ˙úG˙Gë>ŹíŁD)Ż0ĎÄńď3źďŤhŃ(VSz8‰Đ ”^Ď,u,ĐÁéóďňłŸüGţĎ˙ýC†B—ľ-­Ó4ůҗ~sçÎóĆ˜›Ÿ§Ł˝ƒÇŒŃŃQ.ŃÔԈŽD"aÚŰŰyĺ•W‰Ĺ|†™™ZZš—}GhNI_„!00ĺŃQc`hĚՌë)ŚgPŃzźt’˘8ŽÂsژĎÉfłÄăń~})%--Í<ôĐ6oÚLm]-JÁƒ>ŔŘĽ1"‘0Ÿ˙üç8~üóóó<˙üÇHĽ’Ť:>h¤gŮ%ibžŔ_œœăÇĂ6sEO­~_łźîś=¸˜Uü§ Äe†'zkьë!}-!Ă4ŮóĐC˜ŚŽ*šéär9ÖŻ_Çúő}$“I^|ńEşťť˜˜˜ X( [ŹYÓĂŠ“§9}ú őőňy”R´ľľRS“ŚŽŽŽŮŮYrš\ĹŇť-­Ą A*,ątÉů)M´Ľľ;2^e͊ٙi4J9SňĂĺVĽe„L™dÓ¤FĄGÓ5LÓźj ŠŚilٲ )%­­-€ŕŃG! óËżüćććYż~=­­-œ={Ó4řđ‡?Ěŕŕ}}}466rčĐ[är9}ôQzzş¸paĂ0ظqRňůŹ˙^B°ąŮŕĈÉ;CEf ɰ`g‡IC< cÜ8¤”˜ŚIWWŸ˙ü¨­­ÁS.ąh”D"Imm-=Ý=ŘśaĢ1şşş0M“LfšO|âă(ĺë[ĽÓiÚÚÚIĽRäóyRŠ4<ň0˙ôO˙Äşuë$ ÓŐéoÔD"üq~˙÷ţ?ţ8ú60|q˜ţţ~,ËdŰśm´´´Ďçxő՟áş.áp×uŃ ­$JŻ“Ëfůя„ŽéLMMQ__O,CJɋ/~ŸńńqvîÜIMŻÍdY&ńx‚T*E2™¤śś†h4J:fŰś­ô÷÷S,Ůšs'Űśmăűß˙>DA"‘ ‘H000€ahšFmm ŽăÉd°m›m÷lŁ˙H?ž§‚Ľ @€ôäqa!G.eŁkH^Ą<—Ba”ńƒßĆ)d™8üO¤ś”pl˝oŤ$.ŕ*Ł`n~ĽVWňnY&-­Äb1Ňé ľŹ_ßÇK/˝Ä‹ß˙ۡo§žž–T*ɖ-[8~ü8őWĹ}÷íÂ4- …<Ÿů̧ůťżű6ľľižřĹ/úɐlmŐ98`0:ç ýĹB‚­m1ëF(łžXt˜œ˜"âIĄI<ĎÁ°BäóĆ'ڈFŁ•6‹!ń Ă`׎¸Ž‡ač(Ľřâ?_YŒ !hllŹhyü˘- +•fJ‘+ŘěšĺÇ ĚÎGŸŤ00UđJ7!ăó‚˙v2Çúş9şjâ+Ú/YléÉdÓ4ijjf˖MźńĆklذ]ťvŽX466rôčQ8Ŕ3Ď<ÍGžzš?ýżJ<gMo7u–I"™Ŕ´Lރ“›EMJŐcY1” ‰*Űâ …Śů$ˆŽë•ńą’–”’mŰś.3÷ďŢu™u<@Gg{…ôŮśm šŚĄi=öJ)4McÓŚMôőőUĆăłĎ>ƒe÷'ˆ˜’OďŒđh_ˆÁI—ľ éˆôí­¸AhšFoo/ ´´6ĹXČ.°k׎RĽ^Ďüc:t]×éí]C$ćŮgŸ!›ËŇťś—|.ĎGž~Š5kÖđŤżúßóîéwYÓŰCWW'őőuDcQ:;;‰Ĺ˘$’ ë‘R :–"‰pßýťhkkáŸü8ű÷íÇSĎ}ě9jŇ5<ýĚÓ\ş4Ć'?őIš››*äąišHMŇŢŢΓO>Éť§NŃŢŃƞ÷ËĺxöŁĎây÷゚{wěŔ ™ĄŘžc;słsÔŐŐńĚłO‰DxřᇈĹb44ÔsđŕĎŃu{śßC<ÇuFFGyţăĎłĄŻŽÎöî݋çyôŽéĽśśŠI˘Ń>řƒ<˙ńqĎömč†ćkŠp Vqż¨úťüťŹúYžiĽ›^ş™€¤îÝrĎž™L&8Ú¸Ť“şŠÍ´”|ö ŸçwžüeÂ%›ŇŐź†ëşäóy’Éře‰[ő{m‡Żüٟó§L;?‡’‹źšrŠä/˝Ë‰˙ňKgưęťXűëB¤c+šfR–¤J1˙Îwyžö˙ć_ý–i-j.\ç÷^ŢFUžďJí—˝‡ňâĄi‡c#“ .šuÖ7šDLyG$„ž§˜™™Ĺ˛ŹŠŁ„ë:„B֪ۉ”ňK-Ďcrrœ7źEcc“ŸkÇq™›Ÿgzr’†ş4[7o" ÝT’än˛]~/ßqnnĄ˘PyM§“—ŤJ)ŠŽÇšÉyţóÁI^WŤ&'ýsšdŁ˝äźV†„Ovjüë]Í$Ă&r•„×j4‰ŠE›×_ŠŠi2™ ›7obǎí2a兛(Պ,~v˙ý “ó8Ÿcf&㻗T‹B€r S#d†Ž‘›ş„r|ˇĄéÄęۨíŢJü˙gď̓+;ĎôžßŮďžß ŕbkFďŮĹ7Q”8˘=#qFÎ,.k*•ńÄIUœe*ŠT%•x*ą'NĽ§Ęů#v*qEilIcí”H‰âŢdď+ş4öĺ¸űzÖüqî= 4ť›MŠ’¨Ń}ŤPž¸g˙žď|ďó=ďóô!Š2öVKlŰƲmüţŕś>÷Ię+N›~%ü űUŠTFU~Ěł,‹F˝Ę_üăÂ×˙Í×pî˛˙u‹śi9ăťĆůG˙ó?fßţ}hšöks []Š$IÂśl,Ű] QĹŤ6Lđ,Ú;ŽG>gw܉\W&Iňśíźď,Űu@’e×Éqm-Ç˙ţĎţ9™t†żóű_&“Iťă°Ž{@‘ ž=|¸ěôɨ鎃:ŚiB¤q‡VŤŐ¸eďź;ó+ÇvŸ™( (˛‚a8Žƒ,ËŰܜ@Ŕ˛Lďř6LŤĽ#.›N”Dďďóí0ŽźwăoV¨Ş|( fűÇj˙Ř[~œ-˙:wfŔۖvŢ7č2cşŃntăŰ­¨áŔŢÝŻ~[vpDgű(ŽiHÁ”rH0ŽŚbËŕ*qŢůŽą1ÍĄ'ryŃ>§ó˙d‰dc2˝Q7I’DYţĆ Ę:Žc蔦Ď\|ŸşŮîEPüśI°ź†ž:C+ 5ԋϗýŘŰQ7ś‡aŰźť\ćJŃĆś°śX[ú— ¸vë˛(ôËěŠk †Žl´¸˛ŮŔ°ÇÁpŕ'ŤŸ[+ql8 ÂÁaóŒdYćȑĂĚÍÍ …č÷’˜w5កRÄ'qjÔç•[IŸŕž§ë:VŰFwۏăP__`sć"‹3Ő<‚cš`™(QĘoŇjTésLÂ=;$¨Ű ”†ŚiŸHвŰuťńqžTUÝö™(‰ˆŇvëŽÍs'|>ß’RuŰś÷‹p8Ěů_ýŕ8CAŻ˙Ţ˝ďË[y÷uÜ}Νë˝×9mÝÖď÷ßuü÷/˘ţ}ŽÝčĆĎÝV֍ntŁŸ¸ŒF†ń×Ö°Gźă âŕŕř$äp‚qĐT,ŮÁ‘lĎFp,”ę2ăŁ_tnĹő^ÂÂ|Číî ܀|Güáűš{ۇýě“Ć8˜z“üŮďÓ;÷M• š?‰¨Şˆ˛Ő( -Ř´łÔ#’Î~¤kéhkt&şö]+ҝďle7=H+ă^ĎđAĎő^ŹŽ­żß­ŰqŻc]úÇ Ýäg‹uŞ:86.{ĚqÚü–;\Apiž˛é€ĚŠţ ÇűěIúč ČüŤËyŽmÔq,GÇ(4L^]ŹsdŔB¤´Řk•$‘X,F,űXî$ň‰/}ŮŞcŰś>uî™Ń¨P]ťÍęÜMŠ+‹(Š„Ď§á86­F‹bąŒn™řĂq´`5’~ŸĂ™ˇ˘˙€sčh uJ’:ŸmeÓÜŤ_܏IxżżyLËm}e;HvŻ6s÷>>¨wŁżĚüď5şŃntÁ˜ntŁÝřÄ& wO˘EQ  3ÖgŞ´Œ˜DčŘS ś*!E“îwƒŸ‚-Ů8˛cťş2N-OÜG,nOî?ŽéĐů;ç´ľüęƒ&úD§łBľU e{ŇńÁűŘĘčЏ;4ćÎůuÎéÔřܝüü04ÇŚQ)Ó¸öâR˙Ć>AD’DŸ€í˜´ę"ků"őŐYě=ÇÚ÷äÕMlnnréŇ%OŕŰßţ6$“IĆĆƁ7ŢxƒŮŮYAŕôéÓ oKˇębthŘʸ{ßmΞ=ËŔ@?çΝăšçžó(ďmíĄőN,ËâÇ?ţ1­V‹ááaz{{Ńužž>˜Ů:Ůß lLOOsţüdYćäÉž=¤ TŤUVWW= “”nݏišŹŽŽríÚ5FGG`zzšĽĽ%öěŮCOO–eńîťď˘ë:GÝĆč”$Ü}~ßkľ:ëôőő˝˛üq$’ŕę‘lL]BŽ-"F,Űşƒƒ™‚ŕ rcƒĘŇMôF_0‚ ÝœťW¸Z) ‹†N4ĽVŤá÷ű1M“ĽĽ%ŞŐ*Ÿýěgąm›k׎1<<ŒŽܸ1ÉŇŇ"cccŹŹ,388Čŕŕ .\ P(pęÔ)šÍ&׎]gfć6ąXŒp8J˝^çúľëH˛ÄŢ˝{ …Bض͙3ďŇh4čď T* h4œ={żßO,#‰Ç9ţ<\ž|…H$Ž;¸ys’z˝ÎO<ńąƒc–eąźQ˘č¨Xś8ś[Ě# ˛ŕŠĽîŠk|yO‚Óƒ!ü˛ˆaۜ]Ť3Qٓôc9óĺŚea;‚#`aă °aŮ(VúďOń?{ö,Ůl–T*Ĺúú:ŞŞ’H$îÁ4şSj¸•1ŃIěˇYîßÜ+Ý ŽmeL8ŽĂĎ~ö3vîÜÉŕŕŕ'>QßĆô`Ë˝qŔnŐŠUËŞŸ‰g˙.;÷Bőůq, ŁŐäć•ý\ů/Š” ÍÚś{°.} 3ĆśmJĽKKKŹŽŽąžžÎúú:–e˛°°Č͛“LLěĆq666Čçóœ>ý8F“K—.’Éô0::ÂÜÜžúŐĂ /ź@  R)“Íff~~žŠŠivX,‹ĹštéĂĂĂÄăńîK´ÝčF7ş`L7şŃnt㣂1šŞq`ßnôwĺŕ§é,j;‚€ŁŞˆą …˘8>GpÄś‹ˆeÓ\ŸaüČ 'Hű0aWŽ\ĺţčštéׯ_§Ż/K4ŁŃhxâ}˛,ăói”Ëe"‘˛,łšéZO ‚$9h˛Meú"ő|Ő@řŽJ~żŸh4ĘÚÚš\ŽÇ;Ĺôô´W˛”Ëĺčďď'#Š"Ÿţô§h6›źőÖ[|ţóŸăŤ_ý*Ď?˙yŚŚŚšvíŞŞFůÚמĆŕŕ‘HÓ4iľtΞ=ËČČjuW\UUU8€mŰźńƛ<÷ÜsÜşu‹jľÂřřN–——ąm‡ŐŐU–——Ń4]ť&¸téRŰ*Ôdnv۲ůń^á?ţ˙ă Úĺ&Ť5Ű´°mŤ]˜š żĚá/N$x´7ˆOh˜ˇň žvŁČţ”§‡]f™íŔ|šĺ2cŔą=ŘÄĐ[2ƒśÓöa~Ű8ţ/˝ôň'ÂÜÜ<Á +üm&šŚšŚb˛,cÁ`Y–iľZ”Je$I" ’ĎçŰ}ĐOłŮD’DŻšŚIĽRA×u|>ÓÓ3ĚÍÍqäȑ_‹ąĎŐvikřlł’pK5eÍÇÄ_bϑcȲ‚(I ËČŞĚžGNՙ3÷ebŮ%Ţ,0<<ĚĽK— üîqD‘‹/‘L&y÷Ý÷ED"I(ćÇ?~™ąą1dYáňĺ+ &'oňřăŸâ§?}•ÁÁAÇ& ńýďŸçŸŢľZßŘ`~~žÝťwłgĎÇĄX, gϞă‰'>M4#›Íňć›oąoß^Μ9C(âęŐkÄă Ţzë"‘ďźóŠT’ýű÷w_ ÝđXSpżĂŹz˜1v+‹ëƒúęVŘ}ĎżŽaY–'&źľŹś3׹mۛ+H’´ýÚŮ˙GŐnŮşŻę\xżýŢďzžąďî2Ę­ÂĆŢ<Ł}ß; ä5śr6ŚmŰ躎,Ëú~ß]6ý RĘÎâۇ}Žşç?/óôaŰ|ŒéF7şŃß Ś^Œ ˘VżB KVď$˜š„ƒB$Šăo ř 6 ŕˆ&Bi…ąĄýŢ$ěƒ^ڝ—ŠŽ”JeADnłŮlđĘ+?Á˛L˘ŃĄP;wňŇK/ńđnh˜ä7 är9ü~_űÚ_ąk×.t]'“ɰžžĂ0t.^źD:fllŒ;†˝cW*52™0M Ă09wî<_ţň—‰Ĺ˘ŹŹŹRŻ7(—Ť:t˜bąH ¤ŐjĄŞkkëźöÚkX–Ĺđđ0ů|MSY_ßŕsŸ{Ž—_~Ľíaâ|̎”ŢÄŃr¨×lVôĆzĽŽhśÝÚÎ<š„R4 TmśmÄŠ#I‰D‚ľľśm{ŕ’Žë†A4eyy™L&ă%č{öěA‰Á`xĆĘƊˇŸ{}=G6ŰĐvěSJô\`ÜçóšÎ—ż‚rŢ.ӍntŁŸŔE‘p(Ŕ@TeŠž‰ÓÎAcq׼(r5cD71 ťV%)$"Ą‡~u˘ŐjąşşJ8&OP­V)Kd2 àѨÓlś¸rĺ ýýýHmwŁ=1[_ß ŻŻp8rä0WŻ^ĽPČcYWŻ^cϞ=ěÜ9ć: l DQÄ0 Z­KKËD"aüţÍfAˆup(—ĽĐ.%X[[# …ŘÜÜddd„őőuVWWéÉdŘ`?ů—_ŁVŤáói3::J.—ŁŮl277G*•B–e˘Ńˆ×WÂá0{öL03s›JĽB$ĄP(`Íf“D"AĄP •JÇť`Ěo@ŘśMąX¤ŻŻfłÉ¨ŞĘđđ0׎]#‰´`—đűýěÜš“[ˇnŃh4P…ąą1677š|ů2šŚ122Âľk×q›S§Naš&/˝ôýýý†$Id2.żąąA<gϞ=ž ÷…B4›M˛Ů,WŻ^ĹśmNžů$łłłô÷÷322BĄP`qq‘jľęŸ}}}ܸqQéííevvI’@Ó\ůP(D0äʕ+ř|>nܸ,ËX–Ĺ… hľZœ:u UU9sć ˘(2??Ďúú:Á`]×)•JŒŽŽ˛źźěé썍ąZŐľq IDATąąÁĘĘ {÷îĺęŐŤ>|˜Ë—/“JĽŘ˝{7@˲˜™™áľ×^#°źźŒßď2/-ˢżżŸJĽB˝^Gt]çȑ#ř|>Ţzë-oLíééA×Ýů@˝Ţ`bbĹb‘÷Ţ{cǎ133CĽRa||œŮŮYŽ;FľZĺöí۔ËeĆĆĆČĺrÔëuYYYÁ0 BĄßýîw9}ú4>ŸJĽB&“ĄŃpÁqUŐxă×ůíßţm2™ gΜ!›ÍRŻ×i6›d2FFFh4\ż~Ó4b~~UŐƒƒA.^źˆŽëěŢ˝››7o>Đ]Ź ĆtŁÝčĆßŔŘ*dŠŕŕÓTĆłićóËٝo("„Łˆ B0ˆ­JžŽ‚#8ŘŐuă~B퐇ľŰ•$‰h4ĘŁ>Š,Klnćyýő7đů4Ž]ťF*•" Óߟĺ•W~—żü{w„%ŰŤEĽR‰bąHŁá–ĂX–E6›eccƒńńq.\¸Čęę##;Đ4žž ŞŞŇӓfjꯞúFƒąąQRŠŻżţ&>ŸÖfôpŕŔ~üăÇ‰Ĺ˘‚Ŕúú:kkk(í$JnO˛dYĆď÷SŤŐ¸xń˘Guý8@Œą-SGośX\\Dö‡0٧)$ tDł…$"čŽHՐ)×Měb™Ľĺeî݅„ƒŹ(’„(>€Śi>ú’ä–fíÚľ‹t:í=Çcǎ‘ĎçQ…d2閿iG& đř㏠…ńűý(ŠBš\A×[¤Ói,Ë$“I#n Ěg>ót ‹!"ŃhÄ[ĺJĽRŒ‰DĐ4bąč­p*Š‚išœ={ŽcÇ%đłsçX;Š”CœKłŮ$śÁˇôřqWDťRŠz@Ëőë7Čĺ։ĹbŒŁë:­V‹t:…$I„ĂaĆĆv˘Ş*˘(˘i*O<ńšŚRŻ7Eh4Ć3ĎőŠO‘ĎçŠT*źýöŰ:tˆ\î´Z-âńxť¤Vâ…ó bY–eąąąÁíۡ9pŕ 4 †††řéOJOO`éşŢ^ÔťŠ(ŠÜşu‹;w‰D˜™™Áq‰śm“N§ńů|ĚĎĎ3<¤t6+Ć-Qp*ë ĹCž{Zß÷… ËüŃýĄ—ĽÓ)žzę dYĄż?‹$I¨ŞĘúú:CCÄă1ö{äčaFFGĐ4•@ H0čçčŃŁ¨ŞŠßďDzĚ6 #î‘?nÝşE,EÓ4bą§O?NĽRAUUbą‚ ´iţápˆH$B(t”bą„mۄBAÂá0śmsęÔIŞŐŞ›´)2ŞŞá÷űxńĹ/ ůěgŸmŰĺĘŰX?cc[&ÍľiŒëß'_n˛śBMôƒŹá¨AtEi'yR;ą3ąšMŁ‚Ź4Ů\_çć7˙ORQŃá]„÷?ĺ%’ uÄ: ŮĘ ‚÷јeI"L$pUUÚĎ;šĺ›Ę6:p§Mt>síŇdIćo˙­ˆDŁ(˛ [’č@ŔĽ 7›-NžiiCĂvLL`­bąViy7K•Š-°ądÁ[LËáĆf ŰvÚĽNw4™ŃaH3ˆ„‚đ*xęŠ'P5•d2ÁWžň÷…ÜťFŁŮś‚ đˇţöeĂ0ˆDž†ÂŘŘńxź ˛EřÝßý]4MăđáCLLŒ{“Oˇ=Äxúiwňߚߝúü_‡D\E Ý@×[m†ĘvŒ(ŠSYĹOyî"ůé÷(*`c›&’Ş‘ُëAÜĘŚIš\A| Ť[ĐęO4EEęĚ%–——=‹išłT*Q.—=`DÓ´mŰšs…‰‰ .^źHĄP  šŒ9]GĘ岡€UŻ×˝ůŤŰU" aYáp˜@ ŕąsćçç=4ˇ&wžR.—ÉĺrŢ8 šs™H$Âőë×B–]-žÎ>:Z:ńż#„/I>Ÿ@ €ßď§Z­z/A}EQPU•T*E­Vă;ßů{÷î%`ŚirâÄ nßží•ČvžUçš"‘Á`˲¨VŤ(ŠB,CÓ4Z­†ax:@Š˘PŠTźë ‡ĂŹŻŻŁë-oALUUZ­.\  {÷Ő0 OŤĽRŠn9UąX"p¸ápQ‰ÇăŘśÍŔŔápŘ[d …B„B!‰Ífł˝HŁ^ŻP*•ź÷H0¤żżŸ÷Ţ{l6KŤŐ˘P(xÚ<ýýýŒłcǎ6#ŹËŒéF7şŃßěɔ(˛#@›źFS˛plŰŇl[‘{°| şUC$ÉeVPÍ3Ú'ŕ{x‘ÚŽ˜Z:ň’śŁÂq"7É×ušš9{ě14íNrF˝Ő'€“'OŇŰŰóž2ŠŢ^_Ű٨Ćřř¸ˇĘ%I’çşłuż§§g›kSgŇ9çN’‰„ …‚Ű@ AHĽ’ídDۖpýźá2blŹf•úť˙Ţř笗bŘŁ˙R˛QpË'ÇÄöżímmÉŃÓԙüÖżÄŇ X{!F2Ä&NxǸ/X×Čëü<¤ÎÇ%—ă8˘ ˆxš÷C#4͝ţ˛ťmł}ŠĚŁ˝~ćçLtóţw eÂ?}{™×ĘüO2÷ŁÉ"–ăp}­†eŰXöíEQâxOŔ+ם_DcŃ-TîLť-‰Çď<ăT*ĺUŞm˝O~żžž^ďłNb­iŃhÄkӝ‰ąťç×Îć¸3řü~VW—éííń4Sî”3ʄb‰ĎĐŹhVň.Œ c8‚„ƒkižŒŠŐjŹol0<<ňĐşŽ€ŤŃőaúă˛ ’éÔ–Ł  ;÷…ę¸Ówœ÷wTI’Ţ7.vŁ UUŮż?ÍfAŁŮl"Š˘ěÚľ‹`0HĽRi—žE9}ú4ŽăxŕĹáÇ=1ţx<îiůý~dYćĉ´Z-ü~?~żŸ§Ÿ~UUŃuÝc\†Ăa:ä[ŇŠŃŃŃmžąůžžžśXyČsP”e™D"á1SŠŕtúóĐĐńxœĹĹE@ ˇˇÇ+]ĘfłŢ9'“IŽ?N @×uqńöŰo“N§Éd2T*’É$Ď<ó ápŘÓmé€7Á`'\F§˘(ť§sŞŞ˛cÇ"‘Ńh”t:͉'źů”ĎçŁ^Żł¸¸Č‹/žˆŚš šD"A(â+_ů étY–ŠVŤŢBˆ$ILLLĐ4JĽâiNućEfK:&ó{ż÷{p&îťbxx˜‘‘řý*• ńxUUyńĹI$Ž9B˝^ÇśmvîÜI(Âď÷ ůÓ?ýSâń8˛,óůĎžÍîťSr•Ďç˝űć–hşL×çŸ˲čéé!‘H ( }}}„ĂaLÓ$ Ňl61M“‘‘Ţ{Žs>÷œeYŕÜi{Đ) ŤVŤÄăqLÓôî—$IŒŒŒÍf ‡ĂÔj5Ea``ŔÓáH$=z´­ÓŐcşŃntă72: C*#ىL•7@‘Šü‹˙ [×ăI¤á1—ޤţÚwLˆüg˙=’ éčôF2ȲôĄiŰ6•JEq™w'>Ÿ#GŽźOš~Ť˛żă8=zôžŔ‡ă8hš†aŢĘFge⃎{%—Ďî•dýB“QÇƨ°ç^Ăl4hnäwPÓä šh Jŕ¸Ě, Áj!5|™Ĺ7h•rčacc†ÖâeĚąG% AČ؎éŘ4mݲ\A|ٙŸ’PD M”‘ńĄ<żxPŕţ–Ĺ>Eć™1~˛œŁ˘ť öý˘a[źľPâ?úv‹˙đh§‡cÔM‹É\Ó˛=f €, ű žK =Dť˝űH’đĐýň~B§AUUřüU0wƒav rŮ]KKKŒŒŒ´ËkśťĄ˘ˆ?–ĆIşŕ‹eťâŘÜqÝč1­V‹ůůy,Óňž—XśMÓ1ŃMĂs`Újˇýńö[ڄ â”vŠ˘đ‹Ăşń72$I"™LbY–÷ˆ˘H,óúÁVFbż'xÝaYôöö"śßEčÎ{){,VÇqČfłX–ľmĚęˆĆwÚq§dvŤăÎV×#EQčééńÚ}ş$Ëü˛mŰc”J%O÷f~~żß‡m۞hq4őƅŽ(îVÇŚVŤĹ‘#‡Ű%şű÷ď÷ĘfA ‰ls€ęA€wŽŚsM– @$yßŘ\ŠTxüńÇ ‡ĂžŤĎçó€Î~\ĺÎv6ŹŚiŢ÷îŽXܓ  †<öOgMEĆĆĆźď¸`t›{S‡ĺ˛wď^ďœßćóyĆÇÇÚĆĘŰÚÖ:çî˛}ü^™ďÖűى*î\cç™nVś:=ŠŞJooݎÝVqäÎ9uúI‡mÚcşŃntă78DQ$JŇÔ¸žšŒŕ÷cŹÎaUËHľ ęĐćň<ćÚ2‚¤a–Öąý!’˘AO&…źe2ô°Ąë:Żýěuú˛>|ř#%ÖúŽ+¤i2==Íüü˘(˛sç;věřőK:›fîJń&-,Ă śřq Ąt )ťAK h!DYÁv,0먕uœÍyŒ[ďQ™žÁŞŠƒčŕTs˜Ť70š5¤@x[Úw7(ă8-ۢlś¨ču–J€Co$‰*)H?Ô:˙ýBADd"ŠUTřd<š;Œ¨­€€*KČ&x˘7ĎW§›śđŔ=4l‹ëUţŃĎZ<6PÄr&Śĺ2.Üc€& üÁxˆţdQ%íײ,–—–éíí% ~2žÂGźçĹˆĹâlnŽŁiZ{Őҡ}lŮúcŰ.Mi ˇU'fvv–••†††Ű`Œto­ěví™e[ŁAŽZ¤aśH˘„4˙/ü ÔDˆâ# *ېš.(Ӎˆvn$I$ ąşşŠă8Çˇą[;Ŕe.—óŘkkk8ŽC<î:Ŕéşî%čŐj•X,ć%­ĎÖÖ֐e™l6‹Žëř|>O/DQŠĹ˘ČttÖ××iľZ °ąąAĄP ’ɸ,ÂÎ˙EÁqt]gaaĂ0Čfł^ ‘išŢuuJž;,ŸNŠb"‘Ŕ˛,Ďq,—Ë‘L&äöíŰDŁQ†‡‡ˇŮ.;ŽĂňň˛wŢŽN“rßűß1î|żŃhl[܁ţţ~˛Ůěűě­caąX$ y×ýQÇâűmë‚ŰÇλǚÎ}‹FŁ^yRGŤęîc‚€ßďçäɓŢ5Üë؝mlŰŚŃh ëúűʔď~Đľ¸çj`ŰŰAΖO§Ô÷ƒîUąX¤T*188řKłşî‚1ÝčF7şń ŒÎĘR<g@2Ńß~ísżƒ˙+˙‰ťú[ؤő“˘~vDzâQô×~LşšAOćŮý"鸹LMM#ˆťšpá‚ xV@€L&Ăââ˘W nY&ssó8ŽĂřřNnßvÝúúú0 \nÝŤSÖ4×Igii™;w˘ë:33ˇńűÜşu EQdrň&Ą`]ץ­§Ešqă:ŽăŠŐ5 –——=Ęí/ĺĹŮq=rŔ2uœš—‘Š#J Ęśí •çńßZF]ü‚EP‚Hš ˘ä4 UÄŽ×( Á"¤9„Ă š(͛ؕߎ$şöĺw­" ‚€éŘTĚ&ËŐMޜ˝„i[ȢÄR%G*g"=Čz­ˆ€@ÔtKŠĄ}ę`Ú65˝AHóť`MłĹF­„_ŃPe… âóŔphš:ŐV€ę'¤ř‡„&#sgâôŤJˇ–÷l˝_’(Šřya"Ăľü"óMóƒ÷WlüpjÓłCś;Z1AUŕł}2ŸŰ?„"‹ˆ˘đ@ň˝÷ŢĂ4MšÍ–— ôôô0??OłŮ¤żż_ăöíY"‘ŠT’™™ŰH’ä9YlllÉdH&“\šrAŔŤ“W5WöąXĚ+kšŸŸÇ4,dEćȑĂ?ˇ ň/ŔéˆL Q(X_Ď!Š™L†PčÎ n‡Ĺçl)#rÚş>śgç>;;Ëââ"Á`;v´¨N;ˇ1śăP1[l6+\[ťÍÔć"ŞŹ %8Ú?AË4hš:a-€,J€(ˆíň(Ëś¨´ęÄüa\m%Ă4ب—ń)*śm“ Ć<0Čm[ĽV HŁT&Š*´Î.ӍşŽsůňŻEŁŽpőÔÔ§OŸć•W^áńǧ§§g[Ň=99ééŁ8p˲X[[ŁżżŸ—^z‰S§Nxűíˇ‰Ĺbœ?žçŸŢ+3™™™ńsßzë-‚Á {÷îE’$^~ůe&&&Čĺr?~UUą,›ŰˇołźźL8ćöíŰäóyY\\l— ťâžÇ÷Ę| …“““9r„ršĚĘĘ étšď}ď{ xăĂčč¨ÇŞ(—ËźýöŰ<űěł4›Mڧ§Éĺr ş L‡I355E>żÉž}ű˝’˜FŁÁůóço[  ‚ž6eY˜ŚéM­V‹—^z‰çž{Î+‡Ú:öú|>Tę°6ς^EZ­çΝă‘G!‰xĺ;šáVfeY“i띯#ÚÝъ錙šŚyâ˝>ŸĎ3m ˜Îś—/_fdd„ŠŠ)Ž=JľZE]ąrEQźëߪ)ÓŃ+s]tÝmƒšŞĄjŽmSoԙ›ciy‰Ó§O#‰†éęČhކn8Ž"+¨šę†ž>˘ă.HtX5ĺrŮ˝ďëó@° .]şÄńăÇńi>Ő=ßÎÜʲm4MEÓ4KKK‚Ŕ~ô#Oç¨ ĆtŁÝčĆohtÄ$ dÉüőż'gę¨ç+ąƅ÷0oŁF^@zä´ęßüÚĎ~ŔÁßý2™ôŇńˇc î Օ+W™˜˜@–%–——¸qăűöíçüůó;vœĺĺ$IŚ^ŻsëÖëëœ8qŒÍÍMAŕüů‹D"TUâÜšóDŁLÓ¤^o°¸¸ČŽĂ‹Ĺś“R—/_öěKĽ33î¤čęŐkœ>}š÷Ξeßž},,.půĘÖÖV‘ۡg‰Çă věöh´żčdÓiŻśŘŽEŤYCZ{AÖ „z“P*‚ä˜Čś‰Ül!V H€Ź€(;  ˜&¨‚@@‘ŹCvH@ €(LáTŚą“ŁˆŽzߒ#ÓśhÚgŽSmŐ8Úż‡ďÝx‹ĂűqäFnERPD7QLb„ľS› dBIňľ"WnńÄčQ6ëeRÁ’(ňúěcbţ˛ QÓěÝIąYĺęÚ MŁĹžŢQüŃZމĺŘH‚ř+bî%Xłő\4UáĐ`Šż[¨đ\,rłda9NWť78週寂# Š  đФÄ͒ˆĽnw7oŢddd„łgĎňŘcŸbee…Š)ˇ˙H’ÄĽK—9~ü7n¸ ĆĆĆ&çϟ÷]w­ĆggçÚËiŞŐJێ\$ růŇž~ćIffnˇű#ř|.]źĚś­ôţâ°JgۊćG)S’$×~˝żżŸ……9677ą,‹dŇ ! ‚ס–8ŘśeŮčz‹ľľ5fffXĎ­#J"ű÷ď'™J~ŕń­6ł^+p~ů&GúwÖź2u–T(ƁŢ1ÖŞy–Jë5""é!ć Ťčś Ŕ&ßăKŸ˘Ą7i-bç—n’&Šśęěëcž°Ępź—€ŹńŢŇ$şeő‡HŁčŽEË6QEĽű"ěĆG7EŚ\.ÓÓÓC<÷,Ť]Çľ†aÜsÎŃąŽD"´Z-QŠT<@ Z­ †\Áíö~ś˛Ei[Ť8Žß$rýúu&&&ś6ׯ_çȑ#Äb1ž˙ýďS,IĽRTŤUt]÷\p:ĺ#Ł^Ż{`FŁŃđܗzzzřŢ÷žG:ćŔŰŔŚFŁá zw\ŸąXŒ\.ÇŔŔąXŒo|ăěÝťĎcÔ\ž|™ţţ~Ν;Ǒ#G¸ukŠĹĹEO<śRАĎçG}”ůůy^}őUÉd2‹%rš5z{{9pŕ†apćĚršœW^%Š"}}}Ź­­‰DŘÜÜô,ęϝ;GłŮD×uyěąÇږЉ8–ey, ‘‘677éëë#N355ĹÚÚĽR‰Z­ĆłĎ>ËŮłg‘e™ńńqVVVđűýžłÖ§>ő)†‡‡] @–‰ĹbÜźy˲¸|ů˛'ş[,yîšç8ţźç|tĺĘęő:‰D‚ÍÍ<›y‰o˝ý‡fǎavMLPŠTyç3ŹŽŽ˘Ş*˙÷żúřô§OSŤŐY]]!s˜\aăÄ0 Ν;ĎęĘ*ťwďŚT.Q.•‰D#ňydYahhˆtއRŠČ“TŤ ů˙ú˙ý˙xôŃGŰý˘‚ϧ177ĎŘŘ(ÁPˆ]ťĆQU…ááaڧ§i4źűîť]0ŚÝčF7~Ó'T˛,óԓOŇ2LţŮ˙ő/Yř'ˇ˙ዐN˘~áˇa ‹Q\Ăü˙ńéküÉď˙>ż÷Ĺßń„q?L†ÁoźN:Ýă: ČŽ{R6ۇŚiô÷gŃőWŻ^% ˛{÷nnÝşE˝îNň>ĚťďžGOOżßĎÔÔ4étŠd2I˝^§VŤny.—ŁX,’NgxůĺWđůü8ۄňúűűÜUţ•ĺ ů§N=F8ěґUUáÖ­i._žâ‰ţýRbl só&~ë6NŔBQĄ×ń˜Cł ś ‚ĺx✶ ‚‚- KK@"ă Eä ;HŇ őňUó1ĹďšÂÜ}].#ŔŚÜŹQ×u.­ÎŻ—q›BÍu%¨ľš(˛ÁOgÎóÄčQfó+Tő}Ą-Ă 'œ ięÔô†eňď.˝Âg'NŻ—ˆúĚl,óE°›…Â˕M&ŇCäjEĆMÓ$ľ çWTŚó°ýČqÂ~ĎEd†zvšš€n;(ÚÚ^Ň% âžě‘ř§Ř;F‘DWčőÂçóŃ×ׇ˘¨mË+++ěÝť—ÁÁjľşg%>99ÉÁƒxć™Ď099ÉkŻ˝ŽŞŞŢ îĆĆGŽfss“ŐŐŐö) „#aúűűÉĺrT*UˆĹâ\ż~ý—~Ż`Ž3îu˜s…ü&ľZŰ^§RŠ ńű}hšIą,Ă0h4äóy/ńĐuMÓŘ˝s7;wîDĽ‹b#`;îjs]o˛^-°RŮäjnŰą™+Ź`96-S§ÔŹđćě%>=z„sK7(7ŤLĺ—Ů™$ŠPÔkř$™Šň:œĘźq IDATŤ•M‚Z€błJÔ`ĽźÉzľHPół\Ú`Мă`vœ››ó쟌gÚv÷%؍–ÜÉ2ƒƒƒŹŽŽ’Ëĺ°,‹h4ęiłm]€é0ú$I"“É`Ű6SSSžžRç˝jů|ž`0č$###žvĘÖ2@ ŔţýűYYYńtśvîÜÉŤŻžĘČȈ§AÓĺď0<: jš\ŚŮl’ĎçiľZŢ÷ˇ–¨ÔëuÖ×]űřZ­ć•2†á‰ĐvŔšÎut´ęŞŐ*>ŸĎcŕ¸,œ;eS—F×YYYŮŚŠ×)Cęďď§X,z×÷ío›˝{÷śměÓ˙šĎ¸Kx÷a“˘BĄŔĐĐ_ü♟Ÿg}}AŰVŠATUm;$YXX —[ÇçÓ¸qăׯßŔ4-öďßÇO~ň|>űöíĹq\'#Űv$IôĆď~÷ť4›-žţyLÓŕúőkí—ŕnż§˘ďóih>•“§NňÖ[o!Ї˘X,rëÖMvďžřĽ1ŽřŤƒm5!÷ ˛Śťśâ6(Ś€Ş„€–śî`›îf˘, k˛O@PIŔj˜p3‚¨:Rő=lý÷°üIÄť’ÇN˛+Š"‚㶏Ţp‚KkS8śÍńĄýŹW íďvRLŠf(7ŞěíáFnŽŮÍ%ţŢŁ_@‘d–ĘëLm.˛ZɡKr, *Ťĺ<~YcgfˆbłÂŽx/5˝á‰‹ŢA§~őń áXA%ˆT~ëčNúƒ"˙ë™U.”%†ĺÚ];wyŢ´•E„¸&ň…~‰?>6ĚHŸrÇvůƒÚ^G˜1 ŕóšýčŕÁƒÜş5ō7<גóçω¸ Ĺůóďb:ťwď&—ËqóćMdYć‰'žŕ[ßúkDQdttŸOCUe­MˇVI$â\ž|Ó´PŮŁq˙˛Çąş­›8ůŘż?׎]ŁZŠśŠđÍfË2(‹mú˝EŁŃ$żšÉćfÓ4Đ4ŞŞđ%™+—ŻâóűČöÉdŢĎreA%‰¨?DľŐ`ž°Ćç'NńW_Ć-ćÜ2EÇb(ÖĂĚ暪‘ 'xíö9ž°űSh˘HÓ283Óą™H #8n‘[Ëҙ-lĐ| G{XŻMd)5*ۀ!QčNŃťńŃÂśmršďžű.˘(211áiśtţţĘ+Ż022J6ë˛'‚Á ››œ={Çq…‚TŤxŰ(ŠÂĚĚ ’$‡Ůż_›ĄWőt`‚Á ;wîô€Ô×_ééi:D:&rŮ4׎]cppp8Ěž}űxőŐWŠŐj<őÔSź÷Ţ{,..ĄŞnYô;ŚiŘśÍää$řý~8xđ …BÁ+ăL$LNNrúôi–——Y\\äöíŰ=z”h4ĘŘŘ_˙ú×Q…çž{Ž3g\f† důáˆ(Š<ýôÓĚÎÎ200€a$“I>Ěęę*‹‹KLMM1<<Ěää$CCC„B!|>Ÿgý­( ›››źţúë|úӟF–e>űŮçxíľ×Čfł<ţřă,//“Ďçéďď÷ŠÇáńÇç[ßú€WśÔƒƒAlŰf~~ŢsŹ ȲěšužŮV§ŁÎů…Ăa˙ößţŸűÜç°, EQxä‘G˜ĺŮg?Í7ř˙Ůťďř6ęűŕ/ÝiK˛,ďŰąă8‹$Í ‰Ca„MYmĄ-Ľ”QĘ(-#-e–/Ľe ”Ť@ ”„‘&„ěá8Î÷ŢZ֖î÷Çé>–źb;‰HÂűůŔÄÖ¸;ÝçNşĎ[ŸĎűŸŸĎđj4 ¤§§ă“O>Abb"–,Y‚ýë_ÄDžjľuuuزe 233ŃÚڊ`0š\ňň28XŽp( V‹`0‡ÓżßĽR šœ'“ÁçőÂëóAŽPŔçƒO:–]{y˝„‚!¨Ôb0^&är~ż^˜LF8N„l6źľçMźţúk˜tťěđ‡ý8ˇx>9°MşÝôx\¸tÚb|źg=Ć'gĂáëE0D×‰…㌣ÁގC °č0/g*2ŒIPq XT(ă8MI8˝,‰˘4LÝl6ĆTúč|°i- …ŃŐcǚ˛j|VďEĽ#€NwŢ €  6…‚t ŠZ9&™8\XhÁœ˘\čő‘;ƒä¨Íq>Ô’ţŰÜ˙žśśv466Âăń@ĽRböěŮŢ+Z[[ŃÝ݃žBĄ ćϟwLrĆî˝Ün‚ÁËA 柒CŁQťŸ¤éGҰüîînđź *Ľ‚ Žćóű}đů|ŹL­Ďçcy ¤iáp­“'OCQQۖţB‚€ž€;6TďBeWŹz3ŞşšpIÉ"äXRŃâčDƒ­ UÝM8wÂ<ěl:“Ö€ęÎ&ôź8-o:ž¨ÜŒŠi…ŘŐ\ ¤”|Ôuˇ˘$=[ę÷bbň8Tt6 Řš™ŒCYŰ!¨ĺJ”¤äaVÖDČe<,JT|ü’c ‚ř¨TŞF|Ź„B!xÜ.<ţčcxďíw!DF÷äăáó>,_8xäQ”L*‰Ix{źc¤sA}"ĺ4‘Ę%K#FöíۇI“&AŤŐÂëő"đC&ăXB\qʓ‡ƒuÚe2JĽ<ĎŁŤŤ ápVŤ^Ż …ršœ•”…BPŠTlj‹BĄŔęŐŤą`Áčt:śRÎi*Žôţ.Mâ8Žu’Ł÷•§;ýý“ĎnŰś ‹/ř|>ôöö˛ęsRi›ĽĺĘd2ěۡÓŚMĎóđů|,ˇŠÇ㍌Čó´H× Ňô'éúAÚҲCĄŤnĽŃhŘc¤ü*Ňg™´,ŸĎš\Î!ĽiaŇň¤`™Ävš\(//Ç´iÓXéoiZ–4ÚGŞŽX rń˝ÚÍî—öżt}+•š–ö‡BĄ€RŠd éË:Šý”J%ÖŻ_wŢyáp(˛l>ň9-N+•ŞTIŁ—ÂáPä6@Îó0$$ˆšîB!bĺHi_÷ťapĎśYʓĂqâzŻžú”––" ÁçóbăĆM˜?´Z]ä3EŹ0%ĺż ƒ°XĚsŘř#?ĄČO8ęGˆúWˆúZ'úƒ\ ` !„Á˜Ă•pŹó …ŕóűQ[W˙÷ö;Řź};ŚL,Ć/ż&AĽR !B8Ž~0&,„Đ]_ŮŚAáo†Lô]ÂâÇľ,4Lېńâ'§L%ƒ ú>e9‚29ü“_AbÁ™ŕĺ|$č C€'@ˇĎ…ŐÝM aŒˇdAI, ‡YY^ö:#Ł?Ą˝bÂQ–ÔW&ćżbűRő 9ÇC€€PXĚ#çx¨xŒ 5TźJLŕ‹ř$đ=\0&:H0X`C:CĄ0ź :z¨nˇĄŞÇ‹Ž^?zƒap2Œ*)zŠľČIľŔ¨Ó@!çÁs˛H ńřw8Ľjd‡UB€ÜÜ6M ú1^Ż đűý?~<ű†ôťxďôxźc ĆD—ž ƒ°Űí°Űíb‡G&v|‚ ?Á ‚Á@¤âGěJ­Áĉ“ŘţŹÝÂŕaó÷ÂîsŁŚ§='Ć%Ś!YgfI°ĂBaA`%ÍĽŽť „Ye-éś0ÄŰ8ČbŽÂe1Wę}ç™FŽ„ŽWAĎŤ[2‚1Œ9Ň×čršŘ¨Šą,G œHď/ýlˆšFßż#^§ô~]nűp()đ áóůźGľé5Hď7 l}RđE:ŽŁ_óńÄĺrÁívǔˇévF6BĄPĚ´śąXšňcź÷Ţ{c~~ ŕgŁ;yţč|™p饗₠–Áď÷ĂápŔlNĎsCž#*•â˜ch $!„Ä‘4uäđ“ ČpZÂń¸ĺڟciM ˛˛2‘–š:č ČľdýşKšĘˆNăՀßBÉ"ľr1°"cŽnx–ßCü/rAĚFˈ ŒšŹaˇƒ ZN ™ĘƒBƒ4˝%2Œ7ú€‰îöőď ƒžŽ¨ $„Ôˇ~^ĆAÍ+ á‘dŞń=ޢGĽ יlŠ—t›\ÎC/çĄS%!75 Ăaƒ„BáČýrČĺ|ßT¤¨“ďsL&“AŠT`âĉĂ>FŁŃ °°đ;ďđ >ęçđç^ôsĽ!úIII0™LpťÝđzÄŃ6áp(Ňi#ƒ!B86ąŻ @* X,IĂv.8Č âä0+uPóJX4 , ꌃ†W@ĹÉÁƒŁ7crLÎK)KJJ ôzýĺwR*•,ŻJWWŠ‹‹ĄP(ŕńxXÂބ„„˜çHš=F" ˛2ŃŇTáÔ××C§Ó!)) <ĎłjJĂéčč€Z­fů\A€ĂáˆŮÎîîněßż'Caaz{ÝČĘƌßéQě/ľZÍFŐŐŐ űyˆ‘ňá8Řl6¤ŚŚĆT܊~Ź4Šg¨÷Óľk×Q č›fĺóůĄŃȏř¸x÷ÝwĄ×ë1qbIäzAôőů|>¨Tʸ´c!$žÝ)6ÝfäA~‡¤$ Ěfűćb¨iI#™F@bă%}űq¨@ƒ% Šy×# ‚}ˇ=lŸMč‘ há8¨4zpüŔQ1ŃadĐp ¨9yä[y!NűI LđŇą&‡ ^íÎDlÜŠ˙ôşÁFÂDŸÎ ŽŻ#ĚóŞ!ĎÁž<9'îˇţßEÇoŕq9ş`tô~–ňUHßtyĚ 3s2¸|Ó+ƒ NšLŽ0 ŽÁ1Đ)űNĘY BüÎarl…B!ttt žž<ĎC§ÓÁăń@ŠT˘  íííhhh`Óo1ďG{{;Ün7233ŃŃŃŸĎFš\ŽŽŽ.X,äĺĺ!ŕĐĄCPŤŐذafϞP(„ććf:tľľľpš\HMMEBBęęę V‹š ‚Á ***ŘtĄŢŢ^dggĂfëß€N§ƒĎçƒËĺB €ĎçCss3T*ŇŇŇĐŇ҂äädÔ××CŻ×#==ŐŐŐhllÄÔŠSaąX°cÇ8ËĺHKK‡Ëĺ„Óé„Á ŽPvš\pš\ČĚĚÄŽ]ť`0ŽŽ.¤§§ÇŠ‹‹Áó<***ŃÖ֊ŒŒ ř|>ôôô !!MçQŤUP(”čîî† ČÍÍEmm-AŔôéÓ‡ąk×.¨Őj–Hš¨¨p:HNNfÉl5 t:Kü›ŽŽÔŐŐEŞW*ŃŢŢ­V‹˛˛2dff"#77¨Š+ěIŐ´œN'T*ĐĐЀÔÔTdff˛jXN§mmm‡Ăhhh€ŐjEkkŤ˜}„B!”——#;;ľľľP(ČĚĚÄÖ­[aąX`6›ń׿>Κ„„Říbő?žçŔq<äržUů ‡…Č—,bŽťÝžçĄ×ëřaˇŰĄT*ĄŃ¨Áq<\.'‚Á’““#ďéü~19ł´ĎÄiJĄ¨)m„Ă!üß˙ýnżýX,TUUçyäć梟źƒYYYŘ˝{÷€)ŔŒ!„“¤Ă …Ŕq˛1wćÄůŻňA‡řRql‚Áŕ€Ŕ‡x7xGŒW(Ą•+VqāŽ‘ó—œ &ëté˙Bt×:žŁb‚Á ú.°¤ę9ý;ôÏĆ\Ąóld¤ŽP˙ăYʝ0Ň},[ŃS!Ćz~¤ý¸Čč5NdÜ÷c„J(¤cű$ Ćx˝^47ˇŕŔý())ANNşşşšš ŸĎŚŚ&ÔŐŐaΜ9ččč@vv6:ŽăP__ŚŚ&¨Őj˜ÍfTUUĄ˛˛‹2™ 999,“BĄ@CCBĄ ŹV+1ÉŹ8EŃ­V‹ŽŽ|űíˇƒčîîFaa!ÚÚÚ`ľZąyófhľZ477#11VŤ{öěĎçÄ ŕvťńůçŸ:;;ątéRx<lٲ]]]đx<˜2e2x^ÎrEŔîÝťQXX—Ë…ŹŹ,ěÚľfł:„ĂáŔ̙3YŁÎÎôöşą|ůňHrđ !Mý1›ÍčîîÇq0XˇnJJJĐŘ؈––˜L&ŁĽĽŔěŮłQWW—Ë…úúz´´´ ¨¨°yóf̙3]]]ČËËCSS\.jjjP]]ńăǃçyěŢ˝vť3g΄×ëEff&PQQYłfa˙ţýhiiN§ƒĂa‡R™ÇŚwÖŐŐÁl§X~ńĹČËËCII l6l6ŞŞŞ˜˜ČF´ˇˇ#`Æ ˜;w.śoߎîîn$$‘””ƒÁ˝^‡ĂÁ86› ›6mÂňĺËńĆŻŁ˝˝ĺžéŤ„äD(Br˛~ż<݆Űílj9ž’’,čęę†Ůl‚Ăá@b˘vť€€ŽŽdddŔďŔnď„Á`@WW;’’,‘<;@8‚ĎçCWW',–¤H OœÚÖÝÝľZ Žă`łŮđŸ˙ügu6n܈ÜÜ\ƒAěÚľ ĽĽĽŘľk׈FaQ0†BNČ`ŒŘi”Ś?I‡‚:G)¸5ď=zjřý~(ň!§ť Öa<™‘?řť)f$‹tVAˆ­Ş$;ömĺőú “őĺ&J!{˝^v5ňœ‡O2MFŚ‹=‚Á AˆÉA"“É ‰ %Gš›¤˙h§#­Ö4ˆŁ85Mˆďö]źg‹&˙¨ž“ă;SSSĂ:˘rš‹…uЁžj&“ áp‰‰‰8pŕ’““ŃŢŢ…BÁ§z˝ĹĹĹ0›Í‘Ęˆ6‚çůČč=KŕËq\äŰ4-- ÍÍÍHMMĎóŹDľ ČĚĚD}}=A@QQ’““‘œœ ĐjľŹm¤|;RŽŹŹ jľšĺŕß×ÄŠÁâžV! ŁĽĽ•%ːKŁYĽă8ÉáŠT…RŠ•)#íŹ=9ŽCoŻ›ľÔţ'ƒFŁ…Íf™–´˙>̝;™™™˜:u*ŇÓÓąoß>Fttt !!!nU)C!GůBz°‹÷č„oĄP>Ÿ?R˛pôoöńîœĚ¤ŞbU%ť; VéA*/śÓ2ă|L ĚF' źăě—@ Ż×ÇÚJ œ‰nˇęHÉËÁˇ–Ë;qô’×ëgŠ˝ÄŠax˝>¨Ő2ČĺüČ×pÇűűgźˇOze*b‚ŇäĤP(PTT‡Ăźź<6u$ş|ň”)SPPP€ääd˜L&hľZ̜9“uÚóňňPWWÇ>˙Î>űlřý~Fđ<ĚĚĚH`5“É„‚‚h4šHŽ' ‘äädFäĺ女ł“MyŇh4(((€N§ƒZ­†×ë…Ůœ“ÉľZYłfą€nzz:ŚM›†îîn¨Őj˜L&ƒAäć梾ľ•ĺ”jllDjj*R#yôN=u,–D„B!h4L›v Ťb”’’ @żß‚‚Ftvv˛é;ůůů1ՊÎ=÷\477ƒçy¤ŚŚ˛ÉâŋĄŃhŕóů‘‘˝Ţ‹ĹÂö…TUIj)ÇqX˛d ŇÓӑœœŒ„„””L‚ÇăF(BJJ ’““!“É0wî\řý455B­VłXNN˛˛˛ ×ëYđ§´´N§‰‰‰ŕ8sç΅ŐjE8ƒ%KŕőzŮô'łŮ •JƒÁFĂ*™Íf‚ĽR —Ë•Jł҈l“ÉÄ5Ëĺr$%%aéŇĽ8xđ ´Z-Ôj5‚ÁäňžŇ艉řâyq?H_lů|>pÇrý(•J( čt:„BA(•*¨TbŇ÷ÄÄD8N6"6Âd2AŻ×G*O‰ąôľř“˜˜žçYu/ž—ĂçóańâĹ,(šhŃ"¤¤¤@§ÓEŞEŠâöÉy¸ŰК!ä{m$ՔF’›EJ*) ËJß S‡1~FąƒG*˛D†"÷ĆH߸~pĽR“K&}&ę!rÁ××Vb[ÄǤjeҡbINŽÎŤďŕÜ;P!ömĺáÚJŠ”ƒăx œĹíóŹ/‘źô ÁóŠQc¨šŇÉ!şźp´ŞŞ*Ô××#??ŠŠŠGäC4 đrě⅀ŒuFd2DžAá\LqÇŚQ„B!HňŘ蜢F;ÖüžaÎ2(ʘ ý“ťJĂߌĆѨÔNÇţü’ąó 諄1Xç*ş­ü~ńÚVz$ńjŤžéâ{ œŚ)}Otwwł%’üü|äĺĺQ #šßď‡ßďg…p8 ÇĂ~¤R҇+E}]ĺ÷űáőzĄÓéĆTž[ š¨Őę!Ă­ßăńŔëőú|ŁŃˆ9sfł\%#át:ŮČ!)KVVf͚ĹÚa°Ńs‚ Ŕívł@ˇĹb°Nš\Žääd,^źxŘ6 ƒ(//G~~>ŒFă ÷ű|>čőú÷566şL)Ŕ]Y+úóŔh4˛QzR%Ăp8´ľľĄšš™%ľZ­hjjbšOĘËËqÎ9ç šš™MéęęBkk+ŚL™Â:Ɂ@ůůůĐh4IHÜĚŚ^Ůl6´ˇˇ#33ÝÝÝHKKCuu5ŹV+ŒF#***——Çr€Ô××#77@ HOO‡ÉdÂĄC‡`łŮP\\ ľZöövÔ×ף  MMM‘)M)°X,¨­­…Z­Frr2ššš “É`2™PQQŚŚ&̙3:fłĐétŘ´iňóóYNi›ü~?ŞŞA.W 55•-O•"ĺliiiBĄ@]]-ŇÓ3 ŃhŔóŸjľééé0 ,pYY+ •Ň6›ÍƒŘż?ňó °˙>pÇŚ—) h4čt:Lž<7nD{{;ěv; Ň`ŁBşťťĐޞ§Ó‰¤¤$pŤŐ ‹Ĺ­V ‡ĂĆĆF 8NdffBŻ×C§ÓĄŁŁ€8ĹMŻ×ą Qâ ÇɠՊŻWÚG€”ŘÝ)oŸŘĆaBß^ršfł‡Rn+™LŻ×ÇŞ ‚řĽ‹˜`Y€×ë‰Éí§Ó‰”BĄ0d21˜'k:‚ ŔĺrÁăń°–TÖŰçóyÚc!ä8é<öÎD'M†|ˇúÚ‹Ę m1šRČtŽ_¤‘€Ô6„;<Ď#-- :&“ ÄâŋĄVŤQQQ’’$&&˘ŞŞ >Ÿ‰‰‰ŹŠŒÉd‚JĽ‚Z­Ć¸q㐛›‹ĘĘJLœ82™ ČĎχÇăaů=*++Y5%Š’PNNŒF#RSSŧ\ÎF†äääŔď÷cîÜš0™LlŞ˘N§Ç´iÓĐŢގžž6˘äĚ3τ^ŻGnn.:::P\\ ¨ŤŤĂŇĽKŃÚڊńăÇŁąą%%%HKKƒZ­fS!SSS!—Ë‘™™‰ôôt$$$ ¨¨3gÎDMM Ěf3Ěf3t:ů3}út444 ššăǏGb˘X•é?řŇÓÓQWW‡@ ŤŐ …Bžžôöö‚ă8œ~úéläsNN:;;‘œœ ›Í†ÂÂBđ<ŒŒ ôôô° LSSşşşœœ FƒÂÂBčt:h4$&&˘şş“&M‚ŐjĹŚM›››N‹şş:¤§§CĄP`„ 8tčP¤’™3g";;rš‰‰fhľZâČŠŽŽ,^|: *++QXXˆÄÄÄHa fΜ‰ŒŒ TVV"-- ÉÉÉ¨ŽŽ†Ů,.G Y­V¨T*(•J̛7Ÿ}ößČ(ŸDVZZĄĂíö )) ƒ8őHĽę+}  “qlĸ4Ĺ-55M[R*•p8Ä ’LƁçĹQ4N§:&“™ĺ#âyąÝ55k‡p؅p8Œ„#?0ôX¸p!L&xžGaa!ŞŞŞP\\ ŸĎŸ>Ăn§jJ„ęŒcřjJ„BČ÷ US:~_C(by¤˛ÄŇh)爔/٤¤VŤuŔ4j@Éŕ÷űĄVŤYÂ\•JĹĹz<8NäääÄL7ěŸOZž4Ęa° FŃŐ ĽDěRđGÚviJtżFŁaUÁ‚Á ”J%Ëń&Mƒ lČĺň˜Š‘RU7ŠrôXĽR‰Ď?˙Ó§O IŁ<¤˛ŰR’)nYY&Ož ŁŃ“FZż”Ř\Ú~iôEt%Šh@t•&)żŠBĄ@  ˇĽe(ŠČş‚„p¤LuĄP˝i_żúꍸđÂeHH0Ć´…´°uDˇMtűIšŚBĄË÷â÷űń“Ÿü2™TľMs<ˆÇ‡PH,8$`d21áűĺ—_ŽůóçĂd2 {|Űl6Ź_żďžű.ü~?Ű>1ź4‹y)Ví"ˇKăđňËgŻ›çy6=LĄP@&45US"„“5ŔCß B!äh’‚ R°C§ÓąŽŠ8­HNNFrrň€Î¸TMÂlę‹ôAŘT#Š"š^݇Őj°ţč¤ĐCU˙‘ CŃh4ŹúŽL&ƒRŠdÓ]¤őKËč?Ľ$:řpA4)'$şüôŮgŸ=ě~î_ŞZŠTbÁ‚śc°ő‹ƒ†î†÷ż/úďčőFß.ŽŤď>…B…bŕ:n¸á†ĂC# ř˗/‡FŁÇqđx)^;Ľ­'„1đűý‡GdĄ*<„BNFRN’ž<Ú'ÇC›tuu˘ąą[ślÝngՀA@oo/ęëëąeË–sCddd ĄĄ---hmmŎ;PSS˝^łŮ §Ó‰ 6 11ťĆv'Áó<ź^/”J%ŒF#öîÝ˒ڶľľÁĺrAĄP žžľľľHL4łmĽ/ŹH‡+Vüa@ ćdDÁBőuuđů|ÂtA!äűG đůüh¨Ż‡˜—2şćůÎÚ%RŚ9##:*• ăƍCgg'BĄ+é,%™ĺyjľľľľP(hmmEJJ2 0›ÍhkkĂŢ˝{a0pîšçb÷îÝđú|čęęFggT*ŒF#T*ěv;ŞŤŤQXXˆîîn6ÂĆd2A§ÓA­VĂăń°mikkƒÓé¤F#1žzę)ÜvŰ­())9é_+MS"„Ă‘EŽ3!ƒ,rÁYuč**ŕłfA,$G „BžG~¨¨8€ŞCUěóQýšy’6„pƒA9~;wr9 ĐŐŐ…ŹŹ,˜Íf´ˇˇcîÜšŹěľL&C~~>T*Âá0–,Y‚p8Œźź<¨T*tuu!'' ĐëőĐëőP*•HOO‡×ë…ÝîŔţ}ű‘€’’$%Y P( ×ëÁqŃŮŮÉňÔHIv­V+ƏˇŰÍE'J•*­­­8pŕ ž~ú/¸íś[ńôÓÁž}űbsĹWž4Ż—‚1„râ%ŚĐ“—Ó‰W_~ůůůHJ˛BŠ6@!„œě‚Á şşşđżż—Ó)Ö˛í÷šy‚~ŕłA>2A,ńkˇ;"ĺxO <Ď#11‰‰‰ě6ŁŃČ~×jľČËˋyNVVVĚßRŁţύžÍh4BĄPŔhL`NÇ“M' 5ijŇž}űđôÓÁľ×^ƒ{îš÷¤}˝Œ!„Q] ÉA@0Äö­ŰđˇgžÁ/oý,+dAĆŃB!''!,@€€ŽŽN<ű—g°mËVA1ôr$ň•ž|Aäő8”ď-Ăô™ÓĄŐjéˆĐétĐj´bЊrâ‘#ÔÓÓłŮŒ ŠpŕŔAvűž}űpĎ=÷Âd2aüř‚Ľ§ý~?*+Áfł°Ż‚1„2Š 4!˜ńů|XőŃJ475㆟ý&CŠTE.Nއ+Rńë=ŠŹv˙ňÚqݒëböĎńźmÇCŰ}§[ÂśAÚ/ßĺţ9Üqs/O†Ď|@@ŻËĎWŻĆÂE‹ RŠĄŃhč‚‘Â<aČŃąnÝ:\xá…xđÁcn—Ś# ĀRŠDAAśmŰFÁBůDd!˜‘‰ßz˝lův3ö—ďCţřäää@ĄTޏ“!´˘VĐ˙âť˙…řX.Ěű/Ga˛,ŹˆëęŰOŇďc˝€ě[ÎŔ}1ś}+vęp˜ĺ­ý>üž=üžî5 G¸/Đ/`ƒ~űftÇtôkřşúíŰŘĺ ×>Ăď÷ŃƒGsß›cşď5 ˇoßváŰȏéĂ/#z?Š>ű~ű1=˛};Ö÷éѷݑÓ#o7żĎşş:T:‡Ă‰` Ŕž ‹ę¤Ÿ,ŸőÁ`••řóăOŕÎťďBVv6”J%8ŽŁ!„ôm:ß{ďý áp .„Ĺb°<…BpXŔ7ß|óźyóćEîŰzc*Á xoĎůMÁBńő™ ‚LˆdÄ P‚zzşąmËVlßşULř' Ş3*öÍ^zĚh?Ôc˘ďíßGşÎąlăh_ɲ_N´śKŰĐ1MÇ4Óߏcšă˘‚ŤR^•˜€ÎÉœč +ţ Řşů[Üw÷Ý8ëœsP2i2 d‘€Lt SÚ‚Đ7kKú[ t‰Ë “ Ů šá‚býď‹^ŽpŘŕšôűPĎ?\ yŕýŃí/ xîČśC܆ţű)z;űŻ7zű[÷pϸžčŕíŔöëߖѷIĎíżýƒ˝Ţţ÷÷ßC%‰~9Ű/vű†~~ôžďüîř‹9["ϗÉŘíöaCíÅâ_|ń%źřâKîÇ °Űí1kęv łžčű÷ď+püIűH.—ÇéýćđˇG׊“~ç˘ţ•~řȏ<ňŁ `š1yÚˇöx.!„ô'HŁčKę;ŕoB!ä$Á/˛S‘NĆQ"R J Ě(” hľZÄÄľŇk>\°#ş+z¸ŕB˙N_@l`gťÇš° 6 &c‹Á:ŮC *äţĂ˝ŚĄ.CÝ}ŹI÷žŢŘűcbťĺCÝ?řśŽý†ş4í×[‡ 0 vżôü‘nűŔíŠ=~÷ź˛}{‡ˆžDoĐ ~żœ}Î9ШՃF/Ü˝nŹ^˝zđ(Ě`˜¨uN)™4dűęő|¸ň?sŘř#?ĄČO8ęGˆúWˆÚ a¸ˆŒ!„1^”ĆŒ’‰ž0áŢv !„ćĂn`0Śßý2œœÓud‘ŃݞČčżßżĎž˘ż€!„ˆ\Nç1Yî†uë0cć̘j]ĐŰۋíŰśy˝•+†źĎd2ĹeŸQ0†BĆ|*`„~e˛č+XšRN!ääűĘC!'ŘĹ€ž’˜ô!„“烎ďóîűřň#Łd;–ďőű„ě„;ŻÇrßŃDÁB9Ş×Ť4"†B9)?ßé‹BČQDÁB!„B!ú⅐Á΋l{‡ý§‘16„B!„B+Žăh[GťtŘB!„B!dŹäźœśu”(C!„B!„1S*´­ŁDÁB!„B!„Œ™JŠ˘m% ĆB!„B!dĚä<ľJ}Üo§ZĽ†œç‹mĄ` !„B!„BŽˆNŁĽm ĆB!„B!äˆČy :Ăqť} :Ăq3* ` !„B!„BŽZ ˝VwÜm—^ŤƒF}|MŁ˘` !„B!„BŽ F{\IĐŽË)Tr:T!„B!„r´hÔj( ôzÜđúźßÉ6¨Ujč4ÚăjjR4 ĆB!„B!䨒ó<ŒzqTŠĎďƒ?@0D8>&ëă8r^ĽB•RuÜaŘţĄC„B!„B!ǂœç!×hĄÓĐžˆF9c!„B!„B∂1„B!„B!qDÁB!„B!„8˘` !„B!„BHQ0†B!„B!$Ž(C!„B!„GŒ!„B!„B‰#yű ;vě„ŰíĆÓO˙ĄPˆv!'¸üău466Ąłł/źđRÜÖ{Í5WăWżú%~őŤ_bţüyÇĹ6B!„ď'9íoŻ˝öţđ‡‡ÉÉV\qĹĺřĺ/žça2ąbŃřŮĎ~°Ůě¸ôŇ+h§rŮ˝{.\LŰD!„Bžˇhd ůNľˇwŕ™gţ†gŸ}žÝśxń"6:ćňË/É;=MiîÜ9xá…gąiÓ×8x°ťvmĂ{mŤŻžjĐéLx䑇ąnÝWŘżż ;vlĹß˙ţ"fϞ5čś-X0/˝ô<6múű÷—aÆľxňÉÇb|._~QĚöMœ81f×\óØ9VkqŠÖx%>řŕ=ěÜšĺĺťńé§+qË-7C§ÓĹ,căĆőlW]u%~üăëąyó7¨Ş:•J5䞝7ďTźřâóزe#؋˙ýďK<÷Ü_źŢč}üé§+ĄT*q÷ÝżÁ×_˙ĺĺťńÁ若t഍ÜÜüőŻÁöí[PVśO?ýg˜LڎýSO=ÉÖű›ßüůxíľWP^žëׯż—^ ČĘĘÄ3Ďüvě؊˛˛řÇ?ţŽźźq1ËâyW\q9Ţ}÷-ěÚľ {÷îÂę՟bŊ‘››3äzxŕwHMMźŽÍŘľk^|ńůĎ€qărńČ#cýúľŘżż ß~ű Ţz럸č˘eËĆľç̙ˇŢú'ĘĘvaëÖM¸ăŽŰ —ËcŽ— /ź ć9ĽĽ đĘ+/aóćopŕŔ^Ź[÷ţřLJ••5˘}:Ň6Ţ˙řÇ+ČĘĘÂŤŻžŒňňÝŘśí[<őԓHKKň8üůĎŠSO‹O>ůěņ kqçw {<ľţ÷Ţ{;ć>“Ɉ;}ś eeťPVś ~ř/,_~Ń çőH^ó’%g Şę`ĚqsĂ ?FUŐAÜqÇm‡Ý&Ł1ˇß.mÓNěÜš˙ţ÷ű¸îşk´}ô~:ëŹ31}ú)x÷ݡPVś›7ƒř=›z}ü^~ůĽxë­bűö-8x°[ślÄË/ż€ŇŇôAA!„r˘‘1ä¸đÖ[oă–[n†L&Çq8í´…x÷Ý ůř+ޏ?ź"ć6ƒÁ€3ŚcÌéX¸°?ýéMpƧă/y jľš=^ŠTbѢӰhŃixůĺWđ裏łű~ýëŰ$ńLOOÇE]ˆóÎ[Šťďž}´ŤWŻÁŠ@Ł“Ÿ~ú"ěۡ/&°Ô×IۄŽŽN(•JźňĘK8őÔš1Ë/**DQQ!.¸ŕ|\qĹŃŐŐ5HÇs.Î>űŹĂîĎoź÷Üó›˜Ű˛˛2‘••‰łÎ:Ď>űžzę/ž§P(đ§?ý]t!ťmÚ´Šx啗qÝu?Ćƍ›ˆÉY?üđ} ěqçŸ˛łłÇ”×'++ožů Ved¤ă‘GFO +V<3u­´tŢ~űMœuÖRŘl6p‡çŸ˙N?}qżŕ[> ňqŮe—ŕç?ż˙űßşë5đú믢  ŸÝvĆ‹1}ú4œsÎůčěě̞= Żźňkg°Z“`ľ&aöěY¸ä’‹qíľ?bÓčÎ8c1ž{îol_hľÜ|óMHL4šî¸ă6Ü|óM1ˇeffŕĘ+ŻŔœ˙řFlŰśý¨ˇšŃ˜€ˇßţ' ž¨Őj,[v>N=u.–-ťmmížsĘ)Ópǡą×—žžŽ›núŚO?W_}Âáđ˜ŢrssđĎž†ôôô˜Ű§N‚ŠS§ŕňË/Ĺ5×\żßDŻy4rrÄmĘȈ݌)S&cʔÉ8˙üĽ¸îşَˇwŔsKJ&âG?şž%'×jľ¸öÚŤQTTˆţđZöţôç??ŽóĎ?/ćš‹‹/ÂâŋđčŁOŕĺ—˙N„B!'CŽ čěěŠ | yĐrîžűNö÷Ž;ńűß?ˆgžůë¤IHIIÁŸ˙ü8 Ä8NŹZő 8Ցý fΜÁžˆŠŤŤĂʕŤĐÝݰř#rssĐŰۋ/żüŠ=6:  Ńhbž˙裏#î[Y Ćăńŕő×ßŔ믿ŽąăŸ—7nČ*DgŸ}‚Á öî-Guu ëĚőďŒţć7w°ż×Źů<ň ¤Ŕ/~q˛˛2í _pÁůŘźyKLP‰ă8üęWżdß˙}1˜ŠŠJŹ[ˇ%%QX8~ÔíżtéšHL4ŁĽĽ…Ý&“Éđâ‹Ď!%%mmíŹmąÜůœXśě|śßŢxăŸxěą'PWWÇÚ롇t˝Ë–šdűm IDAT´´TŹ_˙5š››Ů퉉‰¸ćš˛íxôчY Śźź>úDL°pΜٸđÂel}üăb‚R[ślŎ;q啃Oš;í´…1˜UŤ>ÁóϿȎQN‡§Ÿţ3”JĺÁŹąśůÔŠS P(đÚko`ýúŻc‚Mwß}× ë;ăŒÓQQQ‰W^ů***ŮíłgĎb#šĆâ駟bç~(—_~…ožŮČîŸ9snźń†QżćššZźřâŔjl/žř2śnÝ6ě6ýĺ/Oą@L(Â_|…Í›ˇÄŚ~÷ťßúܛnúœNţ÷żupš\1űiΜّ€MIL 棏VâŢ{ďĂ|ČnťóÎŰG5ęŒB!„˙hd 9n¸\.62b¸Ž‡^ŻGBBBTÇőSźő–8­`çΝĐh´¨­­Em­Řżä’ĺĐëőŹ3uéĽW˘˛˛<Ďăý÷ßŔ)“‡QZşŰśmÇő×_˖]__óÎ[ˇŰƒŒŒtŹ^ý)4 Ôj5ŽşęJüéOâŁVâźó–&M*Ar˛íí˜7ďT6mĂăń`őęĎĄVŤc:ä÷ß˙>üđ߀ˇß~Ÿ}ś pÖYK`4&ŔnwÄźvťÝŤŻžűöír˙ôôŘpőŐ×!== Z­Ží›UŤ>Ĺ7ߏc†ââb444tÝwßýxçwĎ>ű ‰3eĘdÖ6ŃŐfžüň+üěgż€ (-]€ücôßŕű|>,[v1*++Œvxňɧđüó/bܸ\ŹZő ŞĺççG]wݏ‘žž†ŽŽnkooǟ˙üq„É`űS\|ńĺ¨ŹŹ„VŤÁę՟˛`Ŕ”)SŘ>šíś_#== iiix˙ýápˆË™;w6˛łł#ęb|đ8}N:ŽŁˇîšç.ÜxăOźţýč:öű|ˆťîş7˛˙ŸÇš5â6ĽĽĽĄ´t>žř⍣ÚćĄPW]u ŞŞŞ/źđ,–,9pć™g@­VHś][[‡K.š^ŻZ­ŸţRSS\pţ°ŁÚ†2cĆtLž<)ćܐŽĂßţöüä'?,X0Ď>űܨ^óš5ŸăńǟĒ%g°ŠJ˙űŤxüń'GľM<°ożýŕÁďgť‹.Z†Ç{6›-ćůuuőXśl9z{{1aBV­úˆUlš:u 6múééąÓÁ^zée8pď˝÷>žýv :;;Q[[ǎ9B!„BÁBŽ*)`"v.{†|œĂá@UU5ëŒß˙}¸öÚŤąwď^ěÝťß|ó Ź`Ÿ>ýöűÁƒQYYÉ:Ążţőo T*QSS ŸĎ7ŕń_|ńÜn ŠŠ;věÄźy§˛ŽŹ[ˇ===0›ÍÉdXźxŢy罘)JŸţÜn7ŚL™ó:ŸxâQ<ńÄŁ^#Ďó(,,đ­ýʕŤ† ÄHA­-[śÂd2aÌéřéOo@zzú€ź!C˛řď˙Ë~_ˇn= ƨT*(•JŒ7.fÔLJţ‡ĐYż~jkëÍš2œĘĘCŹ]žúꍘ`Ě'ŸˆŰSSS‹C‡Ş0iRIĚöˇľľŁ­­ŮŮ٘2e2nšĺfdddŕ´ÓöőFŻ×íö`˖m,‹ÁĐŔŰ˝{öď?€3Śă —!##ĹĹX &zůŃ9…ŕ˝÷Ţgż˙óŸoŒ‘Ž%¸řâĺ¸řâĺƒî§ & Œ9’6/+ŰË1âąú% Ćh4dd¤ÇÜŤWŻaˇŰƒ7aůň‹ fĘ×hLŸ>=ćďUŤ>ażżđÂKřď?CUU5 Jéq~¤Ű´rĺ*ŒQ(˜2e2ÖŻßóřőë׳éKD[[ Z @yů>( ŔÇ˙ű÷@yů>ěŮS†C‡ŞbFmB!„ ĆrÔX­IHJ˛°żŁ§Ť ćöŰďÄßţö4ë çćć 77'2Bĺ7Ř´é[Ü|ó-°Ű0›űňt47ˇĆ,§şş&ćoľZ“¤˙vD˙mą$˛ÎúŞUŸ˛ŽŮ˘E§áwŢĂi§•˛Çţç?âĽčmMpJbˇŰGôÜ[o˝?ýé 19rFĘĺęË}=5GDOO÷ilGąŤŤkÔÁ)Á`lůňčmƒžŤŃhđÔSO`ɒ3بƒ‘ęŸç#z]ŃËZ˛ä üáŌxŠŮÜ7ŞËăńÄäţinx\÷?ćF{Li›÷qŃŢ›#Ćh4ö8ŒÎ+3Öé4Ńůt\.WĚ´žîîn6MđhçcŮ&§Óő^ű^"˝ u. u|577ăž{~‹+„N§Ďó˜4Š“&•ŕňË/E8ĆoźÉ*ĐB!„ ĆrÔ\uՕŹs‡Mś­źźK–œƒü`&ć̙‰‹qĘ)ÓX°cîÜ9¸ăŽŰńŔŌ˛IOOYNQQ!ôz=jjjŃÝÝ Ż× ÇĂ:Çý+ĘD˙ÝŐŐ×9ü裕,3kÖPP””œřúëo`Ŕ4†éÓ0`ę̑şč˘e,żK8Ćżţő6oތňň}X˝úÓ#^~˙Î{FF:öě)cG‰‡ř=ÎRÝÝ}çŠ^ŻŮoVkŠŠŠP]]ƒ––‚p̏óÁśÉ`0°€LZZě{IôűÁhýç?ă‹/žÂ‚ó0cĆ LœXŒŠS§@­Vƒă8\ýľŘž};>ýô3ú° „B9IP_ňJJJÂ/ů‹˜äĽk×ţoĐ .’””\sÍqď˝wăŠ+.Ă_˙ú,nźńç˜3g>víÚÍ7~|1Áo_đĽăNj fyžÇŁţ ď˝÷6śn݄ß˙ţž?ýôEŹ“œžžÓńŢž}ű}çΝ¨ŻŻ$$$ÄäYľęVe§˛˛’M{€sÎ9›ýn4&ŕx×_-N=uŔźyób‚DżýíďđŃG+áóůJ›UWWł×ˆĺ˝Ľ@Ú˘E§hôČŃ4ţŠě÷GyO=ő4ÖŹůjľę¨,ÖŹ™,ÓŇ҂ëŻ˙ Ţyç]ěŮSĆnŃjjjcţ^´č4öűyç;č:˘ƒYýŤeÝyçřĹ/~Ž3ÎX<`TŇŃhóÜÜ6ľG.—ÇTŇrť=hllđœ%KN‡Ĺ"ŽdKMM)}.%ôíŸ\úpӅvěŘówtRŰoźŻżţ*6lX‹•+˙3ć×˝M#)ĂÝ›–.=7Ş-—˛ß@LŽFII nźń'¸÷ŢťP\\Œ?ţńO¸ęŞkPZş8fĘôžE!„BN42†ÄÝő×_‹‹/žrš|Ŕô ťÝß˙ţÁaŸĎó<~÷ťßB._ŤŐŠO>ůFŁ‘`1ź˙ţ‡řéOo€^ŻĎóx÷ݡ°ví˙PX8'łÇKŁ^{í –&''üoěŢ˝ ĚgŰëóůXÂĐčá-ˇÜ 1IzĽ)JRçöý÷?Ŕľ×^ xčĄP\\Œžž,]z.K.Z[[‡3Î8kLű×ăqłßç̙…ĽKρRŠPŞ{Źl6;6lřšĺdYźx>űlZ[ŰX…˜xŠn]tхčęęFnnnťíWG}ůÉÉɸöÚkĐÖֆË.ťd@šc@ĚłăvťĄŐj#˘?bÖŹ™ŕy9–/żpĐuźńƛ, ˛lŮůĐé´Řłg/ć̙Ĺ*o…B!œ~ú™ƒŽ¤:Ň6ýőWąiÓfäćfnjrY˝zuL@@bąXđŮgŤ°gOŚM›ĆňŸHçtvv@¨ťëŽ;aľ&ĹäЉś}ű”•íe szč~”–·Z­Fié‚çéX^sGGË5ľlŮů0›MXšň|ńŗ#ÚŚ+@ié|čt:̟ß ú÷ż?󈠟źq¸çžťbŽą]ťvٍ¨0&`T^^N„B!'Cžƒa@ ŚśśW^ůC´ľľ űÜććf<üđŁě[îŮłgaŊńë_ߝN@üvţšç^´ľľá׿ž‹%5pá…Äb^}ő5VŽöŤŻÖ˛çJĽ‹.şII∏@ €{oUkęë„~<`[kjj|cţřăO˛Ń7ršW_}nšĺfˆq:¸óÎť-[=ŤV}Šp8 @œVőĚ3OăÉ'C8B{{ÇQiż+†ÍÖ7}Ľ  óçĎCEEELIěxřřă•ě÷Ůłgáĺ—_Ŕ}÷݋ݻ÷•ĺoŘđ5ëhó<řž{5kvîÜ5ŕń.—+&ż‡FŁÁUW]‰Ë/ż+WފU$ů˙ěÝy\OŮ˙ŔńŮ÷]Ö0b„QHىa"{˛Ý˜ŒąQ˛L˛'!!ŠěR ­ •ĽČh0ŁbQhńűƒ>ú´~2MłüŢĎÇă>ú,çŢ{îšçž{?ďî9÷̙ł8::)Ţ÷ěŮCéčďßżgůň•Yž„Tűüć͛|„G“œœĚ˗/šté2cÌÇŇrľŇň×­[ϸqßrá‚ńńOINNć×_ĹÍíƒUü÷?ŻŔ‹ťűą,钒’9r4˗[rýú ^źxIrr2>d˙ţôë7 ŰůŞ bÚ´ܸƛ7ořă?8uę ăĆMä͛¤Ůw111ĺÔŠ3<ţ‚¤¤$Μ9Ëřń“x÷.šP둽ýVÖŽľá矐œœĚożýƎ;Y´hi,˙ĺ˗Œ1š źHHH 11ńă#Đ'p÷î˝lç9tȕ)SŚqíÚ5“říˇßpttbɒ˙)ĽKNţ4 ńŠ–L™2 _ž>}JJJ OŸ>ĺ̙ł >Š}űœ˙’}ţćÍ[LMÇáí}Q1ďąc <4Ç ĆÝť÷3f<ˇoß!99™Çe˖m|űídE€ŔÜ|.nnLj%%%…ňĺËç:Čňƒ1ôďoÄćÍ[¸wIźyó†›7o˛`Á"FŒ0QÜŠó9ŰźoŸ3ŤVY}Ÿˇoߒ˜˜¤¸Ă.ˇşŢż˙@6ośWt3LHH ,,œ+,1Â$Ë@Đůńţý{f͚…Ĺ|ƒxţüŠŠŠüţűďřú^fÖ,sfϞ+' !„Bˆ˙˜"*|^$Ăűô×E3üMŸÔ>NĹ>N%€â@ĽÖ­u2ţ]!ţëJ”(A­Zľˆ‰ůtU­Zľ¸|ů˘âý!#¸víZĄçÍÖֆűşâ 62Ďyüü|cälŢź[Ű ˛“…B!ÄNĽJ ÖžÉŔ; ĺă”úqJË0˝Ďđ7˝{CĆ×dz Ș1BQ J•*Ĺńăn4l؀˘E‹âî~œŕ૔*U’áÇ)Ň=zô˜°°0)0!„B!ţ’`ŒB 7oŢpčĐa~üńŒŒ`d4@)Mbb"ććsł?F!„Bńß'Á!„(`;w:ÁčŃ&´n­MŐŞU?Ž­ň˜K—ްs§CžU !„B!ţťdĚ!„B!„B oĚyš’B!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`Œ(Tjjj„„qďŢʔ)ŁŇ3ŢęžŢU {÷n¸şşpëVçΝŚS§ŽJŰ˜ĺ¸‹ŽŽ¤L™2¨ŠŠáęęÂΝŰßkjjrçN}úôβţš5kpďŢ:thŻřlńâ…DGGR˝ú§vâŔ}Ź\ů?Ľ<ŤŤŤIľjŐXľj%ŃёJőŻ}űöœ!$#ÄÇ ßŠáí탟_Ż^˝Ś_żž9ڎ´\M׎̝kž~Gâââ4Ȉĺ˗áě|€ţýXˇn=ß}7CĂ~Š _‡řűĐŁGofΜ͸qc0ŔÓ§Ď2j”)ǏâŰo'eťîĽKcd4€ĺËWĐżżŢŢ>ŘŮm¤víڊ45jT§_żžLœ8…)_ž<––+ß÷ëׇիWrđŕ!ŒŒŒ9|ř˖-ÉłœÚˇ×çáĂGôěŮ'§ýŘÚZcnn†šš˝x÷î––Ëé;w˝gΜgĐ !XY­aěŘŃ,X0_‘fɒE b̲eË16Ćłgż3iҡJë57ŸĹ”)“XšrFFƒ9ޓ;ś*ýp­QŁ::ubʔé,]ú)ß|óáÇő€ƒ™6í;z÷îŷߎĎvűÔÔÔŘłg7ęę5™2e:C‡Ž %%{űŸ2˜zPˇn]úőŔŕÁCŠ\š;”.äTI“Q÷îÝXźx!66ëéھۜí䧟6PŻ^],-Włi“ŠŠŠčëwÄÎΞ"EаcÇVžúŞ%łf™3b„ ńńń¸¸ěĎR2–Kú|͛k1eĘtFŽ4!))‰C‡\˛ >}}ýŽ<~ü+‡š˘Żß‘Ó§ĎR˝z5ÜOBB#GŽfúô™4nÜGGĽ‹őŢ˝żćůóç 27ˇcv̚›ĎÂŇr ˝ŕ§Ÿ6Pşti•ćMMMeîÜĐ×ף_ż>)R++KΞ=ÇéÓgł¤ăćÍ[téňŠžuęԑäädĹĹvٲeiÝZ‡ ź•ć‹‹C_˙C[ۍčëwäíۡŠďgÍúŽbčĐÄÄÄ`gˇ1Ç1Ťňj_˛[ďŃŁnüňË/čëwÄŇrľJő&óž53›Ă—_6eǎm*ďŸÜÚşě¨ZŸňs<ŤÚžä'ßy•M^ĺ{÷î]ÂÂÂłŒ1p`ÜÜÜIMMĽS§ŽlŮb‡ťűq ÄÚľ6˜™ÍdöěYJóLšô-+WŽbĐ !9nόS9sć,=z|͖-ŰřńÇhÝúC ¨hѢěÜš &OžĆřńŃ××S :fŚĄĄÁž}{ˆŠŠbذ‘LŸ>==]~řá{•×ŤŚŚ†ŁŁľk×fҤŠ|űíd:wîL›6­óŐäU6oţ‰%J`ddĚ ACiĐ@ƒůóČń˜ĚĎńĽŞźÎĹÝşueÝşľ¸şaŕŔÁĂŻżţĘŻżţJˇn=HHHŕéÓ§Še>ţ"Űu/\¸„ *đűďż`ggĎÔŠ“iŐŞ%żţúŤâ"{ţüź~ý€­[ˇakkC‘"Ex˙ţ=&ŒÇÝýۡď 22Šš5k`a17×rzüř1ŽŽGŘľË ‹9¸ššsďŢ=\\)cŚOŸĘ‰§ŘźŮ^ąž÷ďßłaƒ-?ýdGJJ*Æ aáÂ%œ:uF‘Śe˖4hđá›2eJ3aÂxfÍ2ÇËË[QŽ_}ՒѣM¸té˛b›ż˙~ž˘,ÓÝ˝{?\ţöŰo;ćAűöúŘŰoÍöGú ACHII&11 €Ýť÷°wŻ#•+Wć?ţŕÝťw,^ź”ÔÔTž˙ţ._žˆž^;üýTN“Q˝zőxńâ^^Ţ$%%áâr“'O)ś'>ţ)OŸ~ŞkúúzčęśĹŔ 111XXĚçÔ)Ǝ5eőę5ٖ‹ž^;žúŞ%;wWÔĄšsçáççËŔýqppTĘ×ۡo‰K||üÇéĂúMLŚđúu"ććsŰ8eĘ4Ž\ńĽk×.Š}uď^4k×Úř1ťnÝE—ŠUŤŹ02@óćZ*wӈ‰‰aÍk,˜O•*U¨]ťvŽPOĎ |óMoŹŹŹŠYł&uęÔfǎ]tęÔ 7ˇctě؁äädüüü•ćKKKSěť§O?•_şůópţź'‹-ÁĎď-[ś 00(Kňj_˛[oĆIŐzcb2*Ëž6í;´ľ[ĄŚŚŚř,ŻĄšľu™eˇÎěęS~ŽçrĺĘĺŮžä7ßy•ŽnŰ<Ë÷đá#̙cÊ–¤¤¤Đźys7nĚ´iß)ÚÍÝť÷°k×nĹ~VWŻÉěŮflŘđi0T[||rçăčQwNž<Ŕž=NŒ5‚öíŰpx7 IDATz ]Ýśhkˇ˘[ˇž<|řđăď9\žě“ëqÓĽ‹ąąąŠĎ<ŁGáíŰw9“ů9žTţŻbçâɓ'rüř śmŰĄ¨ŸŐŤWSܝ’“jŐŞ) Ř °i“˘<ň{^Ë|~IÄţý úŽ\Ž­íz“T:_´hчŹ[ˇ—ƒ9n—ŞűŔÉiWŽřpäČQtuŰ2qâ<=/¨”&żí“ŞůĘíź4räž={Š…Ĺ¤ĽĽ)Ž%]]?ż MMM4ĐŕË/›r˙ţĎDEÝĺěŮs¸¸ěçĘ?ƒ8sć\ŽŮy˙ţ=::Ú´k§KŁF ŃÔlŒšššŇíŮ Š“ĺ‡ Ď3Š+F‰%xűö-Mš4áđaWĽĺćšîŒŕiii¤ŚŚňâĹ Ľî%J”Pş;vĚCiÁÁ!+VŒŚM›’˜˜HńâŠɔ—ŏĽFQştivěŘŞTNĺ˗WŇˇ9ťrüíˇß”Ţ?{öŒćÍľr-ß>}ú ­ýŠŰt3–ď;‘JżýöńńOiÚ´‰"ТJšŒNž<…ŠŠ /zâë{ ˙@ΝËů‰R-Z4'..^qᔞ÷ŤWŻŇ˛e‹ËĽeË”*U /ŻsJË+_ž<őęŐSš6oŽEhh¨Ň6ĆÇ?ĺÁƒZ´hŽřńüčŃŁżä¸Í¸_Ÿ={ö1pW&_ËطϙqăƲlŮ&Nœ’cŕÂ/fϞEŐéÜšĄĄ×¸|ů 7~x T—.¸rĹOéŽUƒBŸŽŻÜe˖ýŹöEŞÔ›ěöí“'O8sć‰ĘëÉo[§j}ĘĎńܰaƒ<ۗüć;ݞQĽ|=“–-[ĐĽKgzô0ŔÂb.3gšáééĽŇ:śmł§iÓ&ĹŘx0M›6AGG‡-[ěňýŸă]ťčׯ/Ó§OĽIM 2ÂČh`—ď–-[0ŔiÓŚĐ´ižůŚ7˖-a˙~gž?Áëׯqq9Äüůôíű M›6aΜŮJ ‰‰‰888˛bĹ2 űѤ‰&#GŽ`÷k׎@ó{˙ţĎ¨ŠŠ1z´ _|ш= ”N—’’̆ ëhٲúúzlܸž°°p‚ƒŻć+MF#F gß>GşwďFŁF 11Iĺʕ‰Šş |ľJ•*hkˇ˘jŐŞĘćÍŃ××CKK +ŤUÔŠS'§˝9nc``ׯß`űö­tčĐ-­f,Z´;ťMTŽ\Yĺ˛rv>@šrĺXˇn-͛7§];]śnľăΝ;\źč“ď˛/_žZZ͔ŚĎ}šHhč5ŇŇŇXľj%ZZZöcňäIY~›˜Œbɒeœ?ďI@@ ÖÖVšţ‡đÂ/úôů0ŕoú1{ń˘ăǏĺƍ0ŘOى‹‹Ľukžř˘Ńg×ĎźÚU¨Ro2îŰ-šŁ§×;ť 6”wďŢĨQ#éÝťÚÚ­°ąYŤ4e^mÝ_]Ÿ•Ú—ĚňĘw^eŁęqČłgĎX´h§NRŒW`oż…QŁF2uędš6m‚Awvîܖç‡ňëŇĽËÜ˝{;ť05ÇĆfMŽAîű÷٘ž={ШQCÌ1eČă|­÷Ęnݺ͌McX­_o˛7IśmeʔÁŃq'˖-ASS“Ö­učßßPŠţe>&ó:žŇť°hkˇRtKHH iÓŚÔŹůyA›]ťv3dČ`ƍƒŚŚ&ýúőĹÔÔäOoĆ|Šr^Ë|~I§ĽŐ ss3š6m‚Ąa?,,ćâěěBRR’ĘçËô˘-ĄĄ×ŘşusŽw"ŞÚĆ >#Ł4i˘ÉôéSéۡbŒ%UŇäˇ}*ˆś÷Ŕ*WŽ„ÍZ´´´čÔŠ# Ě'))éłŰ|UŽ%UŇ|îőDf˗/ĹÎnÚÚ­hÚ´ cǎ!11‰‡˙šîĘB ƈšţýű‘”””í ˆ7n„ńË/żdyęEn,XăءĎGÇ]“ž}żÁÍ͕… çłoß~,-­iVŽ\…łó–-[ÂŃŁ‡ŠZľj–؞}'sçÎĆĂÝ)S&ňż˙­Čń‰ Ÿ+22ŠYłfcjjÂącG™8qBśƒĎ_Ĺß?GÇ]lßž…˜˜_˜8qŠŇ%ޤÉČŢ~+..‡Xşt§Ny`j:šE‹–(~ˆ^źčÉ'Ůťwß?‡´´4žýv2ˇ°łŰČÁƒÎÔŽ]‹#L˛í֔îÓ|Ź_oĂŃŁ‡iÝZ‡QŁL•ú‹ç%..žáĂGQąb%\\öąe‹?˙ü€1cĆÖďťt鄇‡ťŇôÝwŸ×E 66sóš´n­ŤŤ C‡łjŐ§:WŽ\9ÖŽ]ÍŽ]ť űđˆú%K–ĄĽĽĹ„ ăr\ŽżĽK—ÂÇçSx_*T¨ Ó$'––V´mۖ“'gy´mAľ/ŞPĽŢdܡěcóćMÜť̈́ ËYˇn=ţţŹ[ˇ{{;Ž^ áÚľë*ˇuu}ĘOű’9X™[žó*UË÷ďßăęz„ƍżŕđá#YÚÍŠSgĐťw/ÜÜ\Yłf§OŸQzJ\AHIIaěŘ <{ö ‡89}8˛<:Ýž}Î89íc͚ոşB[ťŰśmĎ×zSSS™0a"<`ǎ­ěŢ˝“Ë—/T`ۖ€‰É6lŔáĂppŘAllÓ§ĎĚń˜Ěëřzńâ%ŽŽN,]şX0Ůśmß|Ókë5Ÿ•O,^ź”ącMńđpcěXS,-W˙éíϘ/UÎk™Ď/éśoßI͚59zô0‹/ŔĹĺ kÖXçë|™qż›™™SŹX1lm­ł |ŤÚĆ-[ś‚#†sü¸Ćƃ™7o>.xМ&żíSA´˝=f̘ńÔŞĽŽŤŤ ˗/ĹĘj-/_žüě6_•cI•4Ÿ{=‘ŮŹYć<|řˆ­[íqssESł1ăĆMP<,ŕ‡,đńńBńďPD…Ď‹dxŸţşh†żé“ÚÇŠŘÇŠP¨Ôşľn@nƒ6 !DFÖÖV”)S†3fýŠ4Bńw+^ź¸âɀéöďwâÖ­ŰůßíÚérŕŔ>ZľjĂŤWŻţś|ůúzłsç.œœöýcĘŞnÝ:řřxѧĄâŽŃĎI#ţŰśm!>>ŽE‹–Jań'TŞT‘ĐĐ`}ŕ9 źR>NЧ´ Óű ÓťSd|MŚ×€Ü#„Bń—Nœpgůňe4i˘IŁF ™:u2şşm•,ţ:ƒ ÄÓó,_ݓzőꢯŻÇ…?řˇb„ř+|ńE#|}/KAń/!OSB!„ř $''3gÎźÝb(WŽ÷îÝcöě9švUÇĂă$ľk×ĆÂb.uëÖáŐŤW\źčĂęŐkĽpÄŠššľk×RéŃíBˆéŚ$„B!„BtSB!„B!„řO’`ŒB!„B!D!’`ŒB!„B!D!’`ŒřĎ)]ş4^^ç˜9sF-ÓŘx0!!˙ˆĺ”(Q‚UŤVríZ0üýĂœ4é[˘Ł#łŕĂ#0ŁŁ#iŇDół×QˀĂŢźy“$B!„Bˆż•‹‹C_ż#GşńË/ż ŻßKËŐJw÷côécČýű?Óšs'ěíí8sć<ƒ ÁĘj cǎfÁ‚ůJËmß^Ÿ‡ŃłgoœœöckkššććôâÝťwXZ./°z ĄĄÁž}{ˆŠŠbذ‘LŸ>==]~řáC—¤ÜöéŹYßąqăO :‚˜˜ěě6f ´äEOŻíÚé2nܡLž<úőëâః˘EĽ9B!„BéŚ$ M``ű÷ (čwlllYšr9śśëILLbĐ !¤¤$“˜˜ŔîÝ{ػבʕ+óÇpď^4k×Ú(-÷éÓ§¤¤¤˙4Űőš˜ŒâőëDĚÍç*ÓŚ}‡śvŤ,wŸ¨ĘÍÍ???bc㈎ž‰ÉHÚśmÉ'élllńńńÍq9‡aîÜŮ,_ž’””žúŞ%_|ш)SŚeI›––F|üSĽ)Ł#GÜ8tČUń~úôМ8qŠÍ›íˆŒŒâýű÷lŘ`ËO?Ůńüů ?~ŒŤëvírŔÂbnnîÜťw—CycŞUŤŚ°7ÝŚMvlÜřS–´111téb@llŹâ3ôęő5üńGŽűtţüœ?ď Ŕ˘EKđóťD˖- Ryß)R„Ůłçňöí[fÎ4ÇËëzzí˛ ć !„B!DA“`Œ(47•Ţ߸FŠRĽĐĐĐŕöí;ź˙ž>}ú ­ý4kö%%K–TĚóčŃŁ|ݎys-BCC•î4yňä gÎ<ůSŰŁŽŽÎđáĂĐÔÔ¤A žü˛)÷ď˙Ź”&Żüzxœ`áÂůtëÖOĎ 4ŤWCřůçůÎĎăǏ•ޡhќcÇ<”> ĄXąb4mÚTŔČIKK#55•/^(>{űö-%J”ČuÝŮ ŕŸcúâŋ1aÂ8´´šQż~}š7×"...ĎmŒ‰‰QźN„•-[6_ĺtëÖmE &}™Ďž=ŁiÓ&ŒB!„B ƈlŊĺřžJ•*¸ššÇɓ§ńöö!%%…Ýťwţéő)R¤Ŕç™4i"ffßqđŕaźźźřůç̘1-ßëIHHŕěŮó ÄŰű"††ýXłĆć/ŰďßżWú[Pň3€oťvş88ěŔËË?żŽuGGG‡!CřöfˇUýL!„B!ţ˛ßÇR˘°ččh+˝oÓŚ III|+VâŔ}lŢź‰{÷˘™0a˘"™™9ďŢ%łwŻ#‹-ŔÎÎ^)(réŇeBBBqu=ˆśv+,XăءĎGÇ]ÖŹYŤë!´ľ[ąmŰö|íÓěÄĆĆan>—Ö­ľquuačPcV­Ęş­WŽřáďˆŁă.śoßBLĚ/Lœ8…´´4ʕ+GőęՕĆ*B!„Bˆ‚TD…Ď‹dxŸţşh†żé“ÚÇŠŘÇŠP¨Ôşľn@aţ'^üóřúzłsç.œœöIadcÌi ä믿‘ÂB!„BˆżIĽJ ÖžÉŔ; ĺă”úqJË0˝Ďđ7}ź…ŒŻÉô1c„ř[ŐŹY“ŚM›0vŹ)śś¤@„B!„â˙ Ćń7š9s:††ýpw?ÎĄCŽR B!„Bń˙€tSB!„B!„ đş)ÉžB!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1B!„B!„…H‚1â?AKK‹­[7sőjaaĄ<čLϞ=ţ_—IÝşuˆŽŽ¤IÍÓlÚ´'§ÝşĚźäwkk+6oޔăűŠńăÇâí}^ĺíř§ř§ć+łV­žÂß˙2;w’FT!„B* ƈ˝Î;áęęBńâĹYşô̙ó=wďŢeË;ŚL™$ôѨQ#ńóóUúěĘ?.^ô)Ô|ô:łŰ.!TńäI,çĎ{ňË/Ľ0„B!DĄ*&E ţÍJ—.ÍÚľV¸ťgÁ‚EŠĎ==˝ˆˆ¸ÉňĺËđöžHTÔ])ŹlOdäMź˝Ďóő×=sÝŽşuë`kkCp°?×Ů˝{ššŞw­*Y˛$K—."(ȏ;w"8tč@Žó—)SššsÍńőőćöíp<<ÜyLŻ{žžŢ|óMoźźÎqëVÎÎ{Š[ˇŽ"MąbŘ?߂  ?""Žcišœâŋçëxhß^ŸˆˆëŠ}V¤H&Ožˆáá×qu=Hˇn]óľ˙Ň뙭­ 7oŢ 0đ sQSSË3?ăǏ%$$°°Pěě6QľjUĽĺΘ1 gç˝DEÝBKŤŮÇü4Vä'$$ľkWSŠRE čĎíŰá”.]Ząœ3gNpáÂ9ĹűRĽJqëV††ý¨S§6ŰśŮ~đđkŘÚÚ(ś/óńlmm…ľľff3 ö'<ük׎ŚdɒŠĺŤŠŠ1gŽW¸yók׎ĆÔÔ$×îdB!„z-. IDATBH0Füă•,Y’#†3iŇDjÖŹ‘kÚ-Zpűöž?‘í÷ţţ´lŮBĺuwęԑ-[ěpw?΀ƒXťÖ3ł™Ěž=KĺeTŤV —ý<{ö”!C†3sćltu۲cÇś<H?|řˆž={ăä´[[kĚÍÍ07ˇŔŔ ďŢ˝ĂŇrůg•ŠĽĺj6m˛#55}ýŽŘŮŮç˜vٲ%Ź_ż‰ş°eË6ŹŹ,sçsˇ53sóYXZŽÁŔ ááüôÓĹîîÝťąxńBllÖÓľkśmŰÉO?m ^˝şŮn—šš{öěF]˝&SŚLgčФ¤$co˙S>ňc†S§ÎŔŔ wďŢcËťK—.ĆČhË—Ż #ź˝}°łŰHíÚľijÔ¨Nż~}™8q Sž|y,-W(ž_˛dC†łlŮrŒ‡ńěŮďLšô­ĘynÝZ‡íۡ°rĺjÜÜÜĺ:eĘ$VŽ\…‘Ń`Ο÷dǎ­Š1RTÝff3 Ąsçî̜9#ŁŮý2:ŰľÓeܸo™†Üż˙3ŐŤWăŕÁý$$$0rähŚOŸIăƍqtt@MM‹}PSSCOŻUŤVĽQŁFÔŤW—Zľj)Ö[ŹX1|}/°yóO”(Q##c Jƒ̟ŸsŢżůŚ÷ÇŔĎ`ŚMűŽŢ˝{ńíˇăß[XĚÁÄd˗ŻŔŘxąąqLŸ>Mn!„B‘/ŇMIüălÝş™.]:`jj‚‘‘1ż˙ţ{śi+VŹČü‘ă˛^źxAŊU^÷ôéSŮ˝{ťv}`6:ú>ęę5™=ی TÔÄd$żüňyó~$-- €9sžçôéhiiqëÖ­lç{üř1ŽŽGŘľË ‹9¸ššsďŢ=ŕÝ>ŸŒyőęńńOyúô)ńńOsMë䴏+Wü8rä(şşm™8qžž l[3[ˇn׎]`Ő*+ŒŒĐźšW݆PŻ^=^źx——7III¸¸ääÉS$$$dť]ƒ !%%™ÄÄ$vďŢĂŢ˝ŽTŽ\9×ú’Ž~ýzDEEzíc d%K– 555Űô .ĄB… ŠzjggĎÔŠ“iŐŞ%żţú+E‹eţüź~ýúc=߆­­ EŠĄlٲ 6„… —pęÔ"#Łhٲ% ÔĎ3ż-Z4ÇÁaëÖ­ÇĹĺ đán Ć3k–9^^ފúüŐW-=ڄK—.Ťź˙ƒŘż˙AAżcccËʕ˱ľ]Ż(ă̊)ÂěŮsyűö-3gšăĺu=˝vřű|Ź_n:䪘gęÔÉź~ˆšů\EYO™2+W|éÚľ ^^Ţ_ĽK—N\źčCçÎ BMMÎ;rč+]ťv&((˜—/_PŻ^=Nœ8Itô}FĂۡďr,Ëťwďąqă‡ŔÝożýĆąc´oŻ˝ýVJ—.ÍčŃ&üď+űéΝHZ´hNƒŇx !„B ƈ§zőę*1𡋁AwE"ť`K‹Ís\^Ŋyńâ…Ęë×Ók‡ž^;†ŞřŹ|ůňT¨PAĽe´hќV­ž"44Hé‡iúüœąąąŠ×iii¤ŚŚ*ĺýíۡ”(Qâ/ßJďoÜŁwďŻ t[3űíˇßݟ={ö1˜đĄëŘɓ§055áâEO|}/áďČšsšw y˙ţ=}úôA[ű+444hÖěKĽî&šqttbűö-œ={Š+WŽpéŇŝ9­OGG›vítiÔ¨!ššQSSSZ_BB‚"đôé3Š+F‰%hذŋ'$$Dišycš5ű’cǎ‹ŁŁ“âóFQştivěŘŞ\Ľ×çôŸŞű/"âf–:QŞT)444¸}űNśůşuëś"ĂłgĎhÚ´‰"óřńcĽyš7×"44T)č˙”bhѢ9^^Ţxz^`Ô¨‘Ŕ‡;ŮQSSŁS§Á˜Î;ăě|@1˙ćÍö̟?=  ĆÓóáá*ŐĹôúŘźš–R™†„„*Ľńó `ŒB!„`Œř÷zöěw•Ćpyřđaށƒ‰'PŠREž?AĽJ11Ĺńă<|řˆöíő¸x1ç'í¤˙đĚđ°ľÝŔ™3gł¤MHH \š˛y.ŕüyOVŽ\•ĺóœîđ)(Ůĺ%ż2SRźxîÍÄ_˝­Ďž=ŁOC:thO‡úL™2 ‹š :œGgI_ĽJÜÜ\‰ăäÉÓx{ű’’ÂîÝ;U^gPP0]şĐ­[WôôtYťv5ŃŃ÷=z,)))YŇoŰfOÓŚM8xđ0nnîDFFqäČĄ|ďˇĚűO•ýŠĄĄťűqěOďŢ˝8{öœŇ÷ćůóçJŸ%'§äk˙+Ś\2żWľ.ćľ=š}˙ţý{<=/°hŃjÖŹI‡íŮťw?đáŠZęęę4jÔOO/Ĺ|Žœ={ƒî´k׎C‡&âŕŕˆľőş|×E5ľ]ŹRR”ďJMM‘Ć[!„B䋌#ţQ™6í;~űí7^˝z…••5A9Ś÷ööá÷ß˙`Ţ< ž?AíھٴiŚŚ&4lؐŁGÝ>.ű5ĺ˗§TŠR~Č*ßuN:ľyôčąb*]ş •+W&55•ׯ¨QăÓX6ՅwÔ­[—ǏU,ăŐŤW4jԈwď’ °Ź^S˝zőOsѢԍW7ĎłyŃÖnĽôžM›ÖšŢýđWok͚5hذ!žž—°˛˛Śoßţ-Z„ž}űdť]zzşÔŞĽŽŠéxvďރ——wžÂmܸ1ĽK—âřq.\‚‰ÉtuŰ*îČ¨rĺĘtďލ… cggĎŠSgˆŞPĚKtô}’““ißž˝ŇçíŰëç9ďůóžĚkÁŽť°ąYCăƍ¸˙gŢźyC:u”ęs:u(VL-_űOGG;ShCRRÄ䘯f͚)ÝÔ°aŞTŠ’c]‚wŕččč(ÍS­Z54ĐŕÖ­Ű<|řˆťwď2t¨1%J” <<‚đđÔԊ2lŘîÝť§ŕŞŠŠĄŁŁC\\<{÷îgćL3VŻ^øqc>Ť.>xCJJ ::ĘLjŽn[iź…B!DžČ1âçňĺ+tęÔMĽ´III̛÷ŰśmĄFę=ꆟŸ?#F ㍯Zbm˝ŽČČ(BCŻ‘––ĆŞU+ٚӁF2yň$ĽĺŮŰoaǎmÄĆĆáí}‘:uę°tébřá‡üńÇDEÝ凞ç͛7”(Q‚)S”—ąż3ŁGÂÚz NN{)VŹććf¨ŤŤÓ§a•S@@ŁF$"â&ąąąŒcŞô”™ôŽ)ÚÚ­xň$–¸¸8ŞTŠ‚śv+>|¤č”ŮđáC‰ĺÖ­Űôěكž}ű0uęŒl—YŰ:bÄpFÁüů ‰‰‰ĄS§ŽTŽ\Yń¸ňĚŰu˙ţĎ¨ŠŠ1z´ ^^^4hЀ ć+-3!!/żü’ 4xđ &Ëűĺ˗Rźxq,-W“””Ę1Ś$&&ńđáŁ,ů{ůň%OŸ>ĹŘx0ąąq”)S–ďż7W9řđúők\\1žϟ˙Atô}úőëKăĆ_đîÝť\çMďŇccc‹–V3śnÝĚ ACHHHŔÁÁ‘+–Qźxq˘˘˘hÓŚ ‹/`áÂ%¸ššŤź˙´´šannĆŠS§ŃÔÔÄÂb.ÎÎ.$%%嘯ˇoß°qŁ-›7oĄlٲ,\ř#aaá_Íqg瘚ŽfÝşľěŘá@ٲe˜7o.wîÜáâEE:OO/&LĎŋ>Šąn|}/3~üXœ]éʔ)ƒŁăNNœ8…ŁŁĺ˗ŁCE›_/_žÄŐőóç˙@bb111ôěكśmŰđęŐ+iź…B!„ĘäÎńŻçë{™aĂF’––ĆŠ˙ĂĘĘRńĂ(ăŘąąq˜›ĎĽukm\]]:ԘUŤŹ˛,kęÔôîÝ 77WÖŹYĹéÓgXşôÓŔšffćź{—ĚŢ˝Ž,Z´;;{ĽALăââ6l$+V`ď^GöěŮÍŤWŻ05—m—ĎľnÝzüýXˇn-ööv\˝Âľk×ßżxńGG'–.]üqĚNœ8ÉŢ˝{řţű99.wٲŒ1œăÇÝ06ĚźyóšpÁ+ŰeĆśÚŰoĹĹĺK—.âÔ)LMGłhŃŏóĚŰĹŹYł155áŘąŁLœ8ľkm”–éârˆ˛eËŕááNńâĹłźŸ5˜‡ąuŤ=nnŽhj6fܸ Ův˝JMMe̘ń4hĐw÷#XYYâč蔥kP^VŽ\…łó–-[ÂŃŁ‡ŠZľ*öö[Už?5533sŠ+†­­5EŠÁÖvۡďdîÜŮxx¸3eĘDţ÷żЧ-Šş˙śoßI͚59zô0‹/ŔĹĺ kÖX皟+Wüđ÷ÄŃqۡo!&ć&Nœ˘žd'..žáĂGQąb%\\öąe‹?˙ü€1cĆ+#ăéyŠ+ŕëűŠ âŋ>T¨PAQWӃn&&chذ‡ŔÁaÇǧÍüěú¸lŮ </’á}úë˘ţŚOj§b§@q RëÖş9=zXˆżĘ˜1Ł™>}ýú Čń.ńIÝşuđńń˘OCĹ]'Břúzłsç.œœöIađa\555Ľ`Ő̙3čŐŤ'ýű’B!„ř—ŤTŠ"ĄĄÁúŔs x¤|œR?NiŚ÷ţŚßŸń5™^rgŒřsrڇž~G Ä! ĚŞU+qrÚMëÖ:ÔŻ_Ÿ~ýú0nÜΝó”ÂB!„*“1c„B­[ˇž9sfłqŁ-ŐŤWçɓ'8::ąyó)!„BĄ2éŚ$„B!„BtSB!„B!„řO’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒB!„B!D!’`ŒřWkٲŃёŮNÝ d›6­ÇÉi7uëÖ!::’&M4˙’í)]ş4˙×Ţ}GEu´a–Ľ#{%š{ďXP“XŠ6ťbEąb76EcÁ.` @P,ˆŠHł€(č’5*ňJ)űýĄlXvE‘óüΚgďÎΝ;wî\<ű:3ëďďƒ9sfń斳qăĚpőjŞUŤVĄĘ"""""˘Ż2›€žÓ§ĎŸţ)•öřń“2)űúő`hii•ËudeeÁÇÇwîÜĺM-g11÷áë뇴´´ U}}ŒĄŻB||‡Ë—}$ďŐŐŐsC‡‘Ű>őë×ĂÖ­[vŃѡáät͚5“şţ͛m1sćtDD„âîÝHěÚľCj Ž"y Sô˜ţýőŕĺĺ{÷îŔĎď&N%Ľż˙t`ÖŹpq9Џ¸´hńŁd:ـýáćvQQˇącÇ6hkkcíÚ5 ťđđLŸ>MRŽąą""nJŢ׍WűöíFTÔ-DEÝÂÖ­[Pšň7’Ďťví‚Ó§]q˙~BCƒ1gÎ,I˝ —%`a1—sçΝÁ A?K]ç‡űnŽ;ˇ#*ę6BBŽcʔI ÷S"""""b0†č“ŠŠŠaôčQ˜:u jŐŞůŮĺ­^˝Ăąví: f€€€+Řľk;ęÖ­ čׯ/VŽ\Ž-[śĄOŸţءď vîü Ô/śÜÜÜ\xzzÂŔ@_*ÝĐPˇoßÁŁGdŽquuGÝQŁFuIڀzPQQÁŮłçdň 8°-[ś€…ĹLŒ3™™™8uęŞUŤ†ŔŔ+ …čÚľ  ZľjhҤ 4¨:uęH‚ĘĘĘ ş*7 tř°j׎ ‹™1b4rr˛ą{÷NŠ|ôGýúő1dČp@•*:pt< Q$Oa%ÓŤWOěŮł žžg1|¸!ěěś`îÜ9˜7ĎRŞœ‰ÇĂÓó  Šřř?$é&&F°˛ZˆáĂ Đźysxzş#!!ţ‚UŤÖ`Á+tęÔQnÝvBUUĆ04FÂÚz  J•*pt<€7BĐż˙Ϙ3g&LáÇĘ-ËĘj.,,ŚÁŢ~ MpćĚYlßžM&˜2kÖtx{_B˙ţągĎ>,]ş:´˙Ź~JDDDDD§)Q…łwŻz÷Ö˜›…1ţúëŻbńńš(őţíۡh׎`ůňUřć›o$eěÚľÓ§OCŰś­ńěŮ34hĐŻ_ż†ż233qâÄIœ?oßž-ąŽ§NšaęÔ)hٲ%îÝť <vv[äćżzőRRR0lŘP8::ôő‡ĂÇÇoŢź‘É߼Kg´iÓşşý$ő_°`1‚ƒƒ Ż? ŽŽÎ GďŢ˝xşş=qóf(„B!tu{âÔ)7ô飋ĐĐ0šĺçććÂĐĐ99ŮČČČ89ĆѣΨRĽ ^˝zx˙ţ=VŽ\ÜÜ\Ŕ…KpíZ şví‚7BÎSXIÇ̜9NN‡qčЇ”E˘xÔŽ] óćÍĹożí@^^ŔÝݧNšÉ”ďârOž|X;ČËëÌ-)ëÂoXYÍC›6­ĺN)jĐ Ν;/™ţff6YYď5kրşş:.^ôĆłgĎđěŮ3ôíŰ_nŸŃÔÔŔ¤I°nÝxy}¸ĹĆĆĄ^˝z˜={&|}ý$yOŸöÄů󇁊éhtďŢ‘‘ˇ>ŤŸƒ1DEjĐ ž$|˜*˘§×nnîĹWxßü/÷ ‹Ńž};téŇMš4FłfM! ĄŚŚ8ţĚÍÇ"0ĐAAWqăĆMřřř*Tßřř?pëÖ-ęăŢ˝{ĐÓëUUœ;w^nţÜÜ\œ>í ƒáptt†ŽŽúôéI“ŚĘÍßşu+¨ŤŤĂßßG*][[ 4řů]†ŠéF’„„Ü„P(DŻ^‚1şşşpq9^ä5ˆĹb 4íÚľAÆ ńăÍ@Ň>đŕAŹT›>ţÉÉ)řá‡ď%EňVŇ1]ťvA׎]0jÔŠk€ožůŠŠŠ łxsž/%űŮŮŮxóćľÔçYYYPUU•{ʃĂnX[/F˙ţz ƒŸßeDEEâââŇ%œ8ń;Ž_Ć͛Ąđöö‘iҤ 444&•SÓŃPRR’•ž?.•çĺ˗ĐŇŇüě~JDDDDD ĆéĺËż‘‘MMMIZţȆâƒ"E/ŕťoßnüđĂ÷8yŇžˆƒťű)Š/źƒ EÝŃŁG7XXLŢE 0bÄ(<}úg‰çvuu‡•Ő<ŘŘl‚ĄĄ>ź˝/ű+:ŽŽî˜>}žűŽ şuëŠÄÄ$ß(2rr LLFʤ§ĽĽK‚1+V,C­ZľĐŁGw=ú;ŔÔt j׎&MĂĎĎ_nŮUŤV…‡‡’““pţüE\ANNœœJĺSQQ‘9VEEšÔyd?/ţ˜ŹŹ,lÝúź˝/ÉäűŇ#Bqé’ôôúĄK—.8uj ąył=Äb1fΜƒÖ­[Ąwo]ô﯇E‹`Μš2m-ĘčŮřź~JDDDDD׌Ą %##3fĚĆóçϑ––[Ű͸y3ô“ËŤRĽ úőë‹ĺËWb׎ݸpÁÉÉ)RÁžZľj˘qăĆ ş [ŰÍĈĆPUUETT4˘˘˘!*aäHkëĹČČČÄÇŃŤWO˜šŽ†ĽĽ•Âu*M?%"""""cˆž¸˝{dŇ,XOĎł7n"ěěláééŽÇŸ`˖­’Ÿ†ţđ…/”””°ző ÔŽ]Ož<ŊŤxEŚĚׯßŔŮůVŻ^‰5jŔÁa€ ůÂŢ~[‘Ł\ şxń"ěěl^쓟ź}–.]‚ÔÔ×8sć,śnýMnyööې––†Ĺ‹˘f͉â1oŢ|\şäŁpJÓO‰ˆˆˆˆ¨b(.(đ>_ŠŔkţ&ü¸)ÜT¨ĐéĐĄsHjękś6}ľ:vě€ăǏAWˇżŞk۟ٚšš˜5Ëňłň”Ĺ1DDDDDD_’ŽNeDF†u Ŕ{9ˇÜ[^M\ŕ5˙ć îŁĐ>ŽŒ!ú,ZZZhŢüX[/Ćůóžş@ •=.ŕKôú÷×ĂŃŁÎHOOÇúő6l""""""*§)ĄüŚ)qd Q9b0†ˆˆˆˆˆˆˆ¨1CDDDDDDDTŽŒ!"""""""*G Ć•#cˆˆˆˆˆˆˆˆĘƒ1DDDDDDDDĺˆÁú׍QŁ:lm7"44÷ďGÁŰűLMÇH>oŰś nܸ]Ý^_Źđ÷÷Áœ9łţńö8xpD˘X™ÍĹĺ( ~ýz‰bńý÷Í>ůeQ`Ü8ł ×§*Ňýü\'ŽG@€/˙PT@ŞŞŞŘ¸q=nÝ ĂńăÇţŃşŒg†ŤWP­Z5Ţ"""˘r Ě& ű—™ăÇGzz:V­úIIIčŇĽ3VŽ\†J•´°˙Aźx‘__?<~üä‹Ő#++ >>~¸sçî'—ńÝwMŕăszz?!!!áłęt ›7o‘JKOĎřäňvě؆œœ\̟żđżçŚŚc0{ö ôčŃťBßO˘’Œ5C‡ĆěŮsńäɓ´.11÷áë뇴´´ ÷Ě}ŒĄľ^˝z˘aĂoŃącWźyóy ŮŮŮčŮłöď?ˆÄÄDŹZľć‹Ö#//śśvŚ]Ţž}ƒ˜˜űě _Éý¤ŻSíÚľ‡  Ť˙x]ÂĂ#Á›BDDDTN8M‰ţŐrrr ¤¤„ŞUŤHĽ:ä„I“ڐ?ĽfذĄđőőƃŃ8yŇÝťwƒH‹Úľk6ośĹćÍś˜;wÂÂn *ęěěl ŚŚVd] NšÉ?gż~}áćv11wáăs˝ző”{ʁÁpřř\řűűŔÝý@ ŔÂb*/#&ć.Ν;ƒAƒ~.óvěÜš~˙ýîލDDÄMŘÚn„śś6 ŔC† †žţ0ˆDąčÝ[Wr\÷îÝqţüYÜżŸ‹RSÁŒqSę<]ťvH MMMIšŞŞ*6mڈ{÷îŕćÍëX´h„BĄÜzÚŘlŔşukPŤV-ˆDąXźxá'ľ“ƒĂ8;’JSSSÝ;033•šŸĐ´éňş ; IDATwpr:„¨¨[ÂęŐ+Qšň7€áÇáţý(hhhHň{{ŸĂĺË>’÷ęęꈉš‹ĄC‡Č­Sýúő°uë„…Ý@tôm89Błf÷YEú¤˛˛2Ź­!44ŃѡąaĂZ¨¨¨{0eĘ$ěŘńîލ„‡‡ęŐŤ‹qăĚxŃѡąu먍Ť+Ô_ţn;sěÜšQQˇrSŚLR¸Ď€P(Äüůsr÷î݁ ĚÍÇJMš˜6m Ž\ńGTÔm¸šDßž}JußŐŐŐĽîťśś66n\đđDEÝĆáÎřńÇćĽę×AA˜5k\\Ž"..-Zü(„‰b1}ú4´oß"Q,ll6”Řƍ3ĂíŰá2‡vÄΝŰzň˙6Ŕ×ב‘a2×UÔ3_Ü3˙ ­^˝ĄĄÁxđ §N—ęĂDDDDÄ` U`jjj=zŚN‚Zľj›78řnßžOOw,X`…víÚBIŠřnݡoŘŰŰÁÍÍúúF8yŇëׯ•É÷Ë/?ü˘m„3făçŸÂäÉKu-VV–ذaôô~BTT4vîüMę {ž‹/ÁÔÔ0j”)&Ožúńř𰰘{űm044Á™3gą}ű6 8 ĚÚťaÆ8vě0âââ0rä̜9]ťvƒ%FF#qóf(‚ƒo [ˇž¸q#DrŹĽĺllßž#FŒFBBvíÚ.hQ„…ĹT<ţFF#°vízŒ=K—.‘›wĂěŘą ššščÖ­'víÚýIíäęęŽ=şŁFę’´ô ˘˘‚łgĎÉäŻ^˝:Nœř/_ŚŔÄdć̙‡Î;áŔ}€ŔŔ+ …čÚľ  ZľjhҤ 4¨:uęHž°+++Ë! qř°j׎ ‹™1b4rr˛ą{÷ÎRőÉUŤVŔÄÄkÖŹ…ąńHź|ůŚN\â=022ÄáĂGЧOüůç39âŒöíŰbÔ¨19r şwď†É“')Ô_ň͚5Ţޗп˙@ěŮłK—.A‡í.cѢů;Ök׎ƒąńH$&&aćĚ2ϗ…ĹTŹ_żFđőőÁ{‹\*˙ž×ŹYŁŔ}ď/šďěE›6­aii…ŃŁÇ"99'NüŽşu떪_Oœ8žžg0hĐPÄÇ˙!őYRRşuë‰Ó§=đřńctëÖ6ؔŘΜ9 555ôďßORVŐŃ˝{7¸şş•ęY˜:u2ÖŻßCC9ýAö™/éČ?ˇžžŚOŸ=˝Ÿđđá#ěŮłŤČŕ*ѧ)Q…łw݃äbÍÍÇÂŔŔýő—Üź9993Ć ăƙÁČČ3gNGbbœœĂŃŃ ššš2ÇL›6gϞþ}ąąq¨QŁşd”Ež‡aűö_‚ž?Ž3gźĐ˝{7ěŢ˝Wákąˇ˙ ˇnÝlÜh ƒáhٲ…Ět€ŹŹ,¤¤¤’“Sšúšš˜4iÖ­Ű/Żs’şÖŤWłgĎ„ŻŻ_‘ç2d0† ,•fjjŽ›7Ceň&$$ wo=$&&JŇźźÎ᧟^˝z…””äää"99EęXkëe’zŹXą ÁÁWŃşu+šç)ʝ;wńŰo;$×WŠR%ŹZľ[ˇnCFFŚTŢ´´4$'§ %%ER—Oi§ŤWŻ!%%Æ …ŁŁ3@_8|||%ÓÝ ;v ?~‚Ĺ‹—"//0ţB\źx-Z´@LL ÂÂÂŃťw/^ŽnOÜź ĄP]ݞ8uĘ }úč"44Lnůššš044ANNśäšœăčQgTŠRŻ^˝*ąOVŞT #Gš`ůňU¸pÁ[Ň­[ˇFŁFß{ 8rä(Ž?†É“§"11 ‰‰I¸|ů2Ú´i­PÉwú´'Οż8|řLMGŁ{÷źUb03‹_]'š–bŃŞUK4jÔ°Ŕ}ŸKK+řűD˘x´iÓffcqőęľbďűĄCNCC}É}ďÖ­+:wî$ľnÓ˘EÖ¸pÁ ăǛĂĆf“ÂýÚÝݧNšÉý,//ÉÉ)R[ž’úŻŻôőő%í2|ř0$''ăÚľëĽzślي+W‚äÖOŢ3ŻČ3đíˇ ‡ČČ[ƒƒk ŚŚ*÷ď0ƒ1DHƒőĽŚÁÔŤWzzýŕćć^ä1ďßżÇÁƒŽ8xĐ 4ŔđáĂ`i95Äňĺ+eňˇjŐ^^çĽŇ ŽöČ÷üůsŠ÷/_žD˖-Ju=ËxůňĺÇ/‘ŠiҤ 444&•SÓŃPRR’|)*LŢž˙ű_ыŤ¨(cҤ hŃâG|űíˇhٲ’’’JŹcÁ…†?ä×ŇŇ*UÝşuGę}DD$ÔŐŐѰaCÜż˙ŕ‹´Snn.NŸö„Áp8::CGG}úô–Lm“×gÚśmƒČČżƒLđíˇ ?żË’_ńęŐŤ'BBnB(˘WŻÁ]]]¸¸/ň:Äb1 „víÚ aƒŠ1§¤×'7nDDHúBBBJ Ć Šdgg^ż~S XřŞŞŞĽę/ňꪼĽŠPů÷4?@”/88DŒÉĎsŕŔ^ź}űV’G[[=’{ßw}:ä„jŐŞAWˇ&L˜,šĎIIÉRýZ,#<<­[ˇ*UżţóĎ??éo`IýŔŐŐNe¤Śž†Áp¸ť{ //OĄg!ßÓ§OKU/Ežgç#Řż.]ş€ëׯăęŐëb=""""cˆJđňĺ_ČČȐ X”ćWFžú÷×ß>“äŃŃŠŒ6mÚŕŋŁJžˇŒ˙ý/999hßž-?~,÷9˙ďŢ˝C˝ző}Ż@[v)vÔGBBÂÂÂńóĎŃŤWOŠűš5k AƒR÷Şcǎ¸vízŠúő§P¤äĺĺáôiO ü ŞUŤŠĐĐ0I•ĺߌÂς"Ď@ÓŚMńöíœ=녳g˝přđQ\źx-[śŕĎÄ1CÝľk×ŃŤW_…ňşššcěŘ1pr:ˆcÇ\žžŽ.]:ĂÂb*Žs‘ťVÁĄCN°ˇˇC\\Ž_żďżosóą˙řu''§ //={ö@vv6ž={gç#°ś^ŒŒŒL<|ř˝ző„ŠéhŠ/ąĽ•?ĽŁ]ťśxń"ńńń04Ôǀý^˝zÁÄÄŻ_˙=Ú 11 ={ö@ÓŚßáŮłç '2ňňňň°qăz<čˆ&McÚ4Ůi@͛˙+Ťš¸pá"š5k†Ĺ‹ÂĹĺ„äËhaIII¨Zľ*Úľk‹'Ožâĺ˗ŸÜNŽŽî˜9s:ęׯ‡%K–™ď÷ß]`ffŠÍ›7áȑŁPVV†•Ő\ÔŽ]ƒ •äóóóǤIxEňĹ7(č&N—E–˙„B!ĚĚĆÂßߍ5²eÖĽşŻééé8q⏭!5őD˘x 2M›~‡÷ďߗY?U¤ż|noŢź››;Ź­— ## 0 ?:uꈴ´´A‘ 8::cÝş5PQQA\\:v숕+—aůňUđđđ,öžĎž=uëÖł‹$饥aˆˆˆ„ƒĂvlܸ oޟŸqf¨WŻ.Ž9ZŞ~ýimŤX?psű0ŞŤN:’EŹ?´If™ýÍ(üĚ+ň Ź]ť***ذÁ™™™7Ιxňä)˙a#"""*„żŚD˙jqqajjŽź<16ośĹĄCű1hĐϰˇß[[;šÇxyĂʕŤ1~ź9źź<0~ź96l°ůÇŻĺíۡXˇn#ćϟ‹ß? °ˇß†ańâ…8sć4ŒŒ 1oŢ|\şäóÉçyýú œ`őę•07‹cÇ\päČ1lÚd7ˇSh׎-öíŰ_(€ĺˆ´´4xyyâçŸ*üeÎĘj:th7ˇ1Â7ÚĘäŰšs7jŐŞ…Ó§]ąrĺ2œ8q›6m.˛ÜŔŔ+8wî<Ž=Œ… çV;]źx5Ä­[ˇńôiŃk|$%%cäČ1¨\ů=ęŒĂ‡––só RŁŻüü.Łrĺo$Ußožů—/űY~ll,-çÁÜ|,Μ9)S&ÁÎnKŠďíúőáârkÖŹÂéÓŽ¨V­ZŠœV„"ýĽ,ĘXłfźźÎaăĆuđđpCăƍ°żô´­­[Ăţýą`Á_ŠŔkţ&ü¸)ÜT¨ĐéĐĄsHjękś6U***’…JkX?~ mŰţý?ďDôţă$@(Jťć̙…Ÿ~€aĂ>o=#uuuÜźy˗ŻÂšsçŮŘDDDD$ĄŁS‘‘aݤČđ@ÎÇ-÷ă–W`x͟ë]p…öpd ýęĂĎď€ ęŁ[ˇŽXž|)BBn2CTAlܸGŽ8ĄC‡öřöŰo1dČ L˜0>>~ŸUn›6­ąbĹRźz•úY#̈ˆˆˆˆ>׌Ą˙/Żó¨[ˇ.-Z€úőë!-- W`ccÇĆ!Ş ěíˇaţüyŘž}+jÔ¨/^ŔŮůö|r™uęÔÁɓ.HHH€Ľĺ<ŠŃqDDDDDĺ‰Ó”ˆˆˆˆˆˆˆˆŔiJDDDDDDDD_%cˆˆˆˆˆˆˆˆĘƒ1DDDDDDDDĺˆÁ"""""""˘rÄ` Q9b0†ˆˆˆˆˆˆˆ¨1CDDDDDDDTŽŒĄ˝5ŞĂÖv#BCƒq˙~ź˝ĎÁÔtL…¨ŰćÍśppŘńŐś}‹?B$ŠEíÚľ;vlÑ#Nĺ^úőëA$ŠĹ÷ß7űŹr&L‡ŕŕ Üş†Ę•żŠm‡‰b1}ú4IZTÔmˆDą2ŰŇĽKŠźNXZÎF@€/<ˆĆľk°ś^ MM2}žŒqłČ÷DDDDDĺA™M@˙fŞŞŞ8~üw¤§§cŐŞ_‘””„.]:cĺĘe¨TI ű÷d#•Łë׃ĄĽĽőĹĎłcÇ6äääbţü…eVfłfͰrĺrŹ]ťxýúÍ?ޞóçĎĂôéÓpěŘďpp؃ʕ+cҤń8ţ, ŒńäÉŠüsçÎÁĽKžHHH(śÜŮłgÂŇr6~˙Ý{÷†FŽ4›ŰIL™béŕDŐŞUŃŤWO\š$•ŽŁSýűë!77Wć{ŕí}I*íĺ˗EÖÉĆf=z÷ÖĹÖ­ż!.î!7n ++K|˙}3Lš4•}UŒĄľ^˝z˘aĂoŃącWźyóáËsdä-dggŁgĎ Ɣł“']˙ľuŻS§ŔĹĺ8˛łł˙ńú´mŰ3gNÇ…‹áéyV’~ń˘7\]OŔÖvƎ'IúôOhh¨ĂĆf=ƎąX,ˇÜV­ZbîÜ9X´h‰TšçĎ_€˝ýflٲ ýú ”jƒŤWŻaÄ™`ĚđáĂđôéŸrĎóâE"bbî+t­ZZZ00Ї…ĹL\žě/yŽ?~ŒuëÖ zőęHIIáFDDDD_ NS˘ľœœ())ĄjŐ*Ré‡9IýozĽJ•°aĂ:„‡‡ 22 űöíFÓŚßI3b„1.\đBLĚ]\šâ™3§K>˟chh__oDF†,,Ś"0đ2îÝťƒ3gNcŕŔR媊Šaýú_†¨¨[°łłššZ‘×¤ŠŠ Ź€ű÷Łŕĺĺ!UŚąą‚‚Сo^FLĚ]¸şž@ŰśmJ•GMM ŤWŻ@hh0<ˆĆŠSÇŃŹYńÓ|LLŒqů˛îߏ‚‹ËQÔŹYSęó‚ÓHŠkłiÓŚŕĘDE݆›ŰIôíŰGŞœŚM›ÂÉ颢n!4466$ӆ|1dČ`čëƒH‹Ţ˝uĽŽ … šŽ3,¤Ň;vě‘(M›6•šŽ€_89}zŮÖĆĆFˆ‰‰‘ ˜Ŕťwď°eËV¨ŠŠB[[[’ž——‹­[ˇŁk×.5jD‘ĺŽa‚ű÷ď˔+‹acc‹ZľjAWˇ—Ôgžž~0@:::RéFF†đöžeĺϋë‹Ĺy‹Ĺ¨^˝šTzXX8~ůe¨T ڤçI‘gˆˆˆˆˆÁ˘BÔÔÔ0zô(L:ľjŐ,6opđ Üž}žžîX°Ŕ íÚľ…’’tˇ8p`/Zśl ‹™3f,233qęÔ TŤöá˟ĄĄÖŽ]—ă6ĚööŰ0{öL :DŞŹŠS'cýú044XYͅ…Ĺ4ŘŰoƒąńH\¸pťvmGďŢ™íׯ/`üř‰Xąb$wm|ŤWŻ„ÁpŹ]ťÆ ŕ víڎşuëJňTŻ^ ÓŚMÁ´iÓŃŻßÜ˝…ŁGQ§N…óXYͅžžŚOŸ=˝Ÿđđá#ěŮłŤČľA† ›ő8yň ŒáęęŽ5kV•x?eŰĚSą~ýFÁ××ě•jÔ¨Ž“'Çۡo1fŒć͏ćÍŔű>FâćÍPß@ˇn=qăFˆÔůrssáéé }ŠtCC}Üž}=’ŠŁ‘ŃH,^źĐłg”|öóĎ‘šš “Qđđ8#Sż™3ç iÓŚpvv”j;míoĐž};Â̙s0wîěŢ˝ÎÎG ŤŰ>>~Řąc444äś[ŤV-qă†üľLŽ\ ‚‰Éhź}űśŔsŁŽS§\qűöX[/.ňŮ)ŽÜääˆD"´jŐR*ýÚľ`ź{÷úúĂ%i͚5CëÖ­pöŹ—Ě3WZ™pv>‚őë×bÓŚčÓ§7ÔŐŐĺć-îyRäY'""""b0†HŽ˝{°aĂZX[/‚ŤëIT­ZľČź9993Ć ťvíF˙ţzpw?…k׎`ęÔ)’/Ć]ştF›6­1iŇTDDD"66 ,Fvö{čëxxx˘oßţ8vĚ"Q<ΞőBTT4:uę(už-[śâʕ $$$@SS“&MŔŚMvđň:‡bąoß̚5Ož<•s˙ţŹXąQQŃ8sĆ gÎxĄ{÷nE^Óň占Żo ??|ëÖm€‡ÇÜž}GfqÚÂD"233eŚ2 2-Z´ř¤ëŻRĽ úőë‹ĺËWb׎ݸpÁÉÉ)RÁŠü JëÖ­¤/mŰśÁýűÎÓ´iShh¨ăěY/,_ž cǎCçΝвĽüşÇĆƢGééUĹMˇ’'>ţź{÷őęՓşőęՃ˛˛P,hßž˝Ôú+ľk×ĆčŃ#ĄŞŞŞpĐăÜš ĐŇŇBϞ=Đťˇn‘S”>%HR¸~ŐŤWGŁF ?9ř ťűi´hц†Ż}óřńcÄĹ=D›6­‘žžŽ¸¸8šÇfggcéŇĺ¨QŁ:ĚĚLĽ>suuÏ?ţƒáRéK—Z#11ąČŔ‡ŤŤ~úi~úi |}/ËAó) 菘˜ťRë"€śv%@ffŚBĺ(ňŹUCÎľk×ŃŤW_…ňşššcěŘ1pr:ˆcÇ\žžŽ.]:ĂÂb*ŽsAnn.nŢ ĹíŰw°˙^lŢlÔÔTÂĚĚ?˙<oŢźH~ýúÂĎĎééi?ŢMš4.öËuţ˘ŁÖ֋‘‘‘‰GAWˇ-Z ‹™ˆ‰)ýľżyó)))066Bbb45ľ°pĄ•Lđáýű÷Xąb)śmہÔÔ×°°˜mmmœ8qJá}ŠŚM›bΜYˆŽž‡ČČ[ ľ™"ĎúۡoQŠR%´jŐąąq2ď+ÂϚƒ1DZ\ÜC˜ššcŢźšŘźŮjjjxüř1ěíˇÁÉé0 //“'OÒ% ąmŰTŽ\11÷ajj.Ybٲ°ąŮ€cǜńúők?~%žßŢ~ŇŇҰxńBÔ¨Q"‘––VŸüĽ<77ăĆM„-<=ÝńřńlٲUć§y322°yóVŘÚn@­Zľsó HLLT8ĽĽ–-łĆŢ˝ťńÍ7ڈŽž‡ &᯿ţ’[ˇ‹/ań⼘5k:,-g#2ňVŹX…ăǏ•ęˇný Ż_żĆ‚k}ţü9~ýu<<<IIÉ5Ę˗/Ĺńăǐ••??ŘÚn’ ľmŰ^^žXśl<<ÎŔŮůVŻ^‰5jŔÁáĂZ&§NšÁČČööŰĘl QÁú8q ďßż‡ż6l°)rńăOeoż qq1~ź9Œ ‘——‡{÷b`a1S˛6Mq6ośÇ€z2#NvěŘ‘('އ‰‰ ŢżĎBXX8FŒ]l255>>~čÔŠ#Ž_.öÜłf͐™ęwę”–.].“7++ cƘaÁ+,Y˛:::HIIˇ÷%lßžCáQ-Š<ëWŻ^CDD$ÜÜNÂÜ|‚Ěű°°pţa%"""˘/N @ş Ŕűü}ĽŻů›đăŚüqS @§C‡Î!e5œčżÎŘŘ˖-Aǎ]?+ĎAǎpüř1čęö“ TÉŁŁS‘‘aݤČđ@ÎÇ-÷ă–W`xÍ˙ŕ‚ű(´€#cˆč+¤ĽĽ…ćÍ€ľőbœ?"""""ŞP¸€/}uú÷×ĂŃŁÎHOOÇúő6l"""""ŞP8M‰ˆˆˆˆˆˆˆĺ7M‰#cˆˆˆˆˆˆˆˆĘƒ1DDDDDDDDĺˆÁ"""""""˘rÄ` Q9b0†ˆˆˆˆˆˆˆ¨1CDDDDDDDTŽ ƈŮTDDDDDDDDĹR(~‘1DDDDDDDDĺˆÁ"""""""˘rÄ` Q9b0†ˆˆˆˆˆˆˆ¨1CDDDDDDDTŽĘ*Ă_["""""""˘Ż]™Ä?”ĘŕäⲏQ$/ţńIąĽ/T1"""""""˘ŻE™Ć;”ž@e!""""""˘ŻE™Ç>”ž`E9}‰ˆˆˆˆˆˆˆţm Ć3žHLCŠ *WÜç ÄŃż"1OŽy(•q%‹ŞHď#UpEĹ/JŠ{”JYcÄĹTP O,Ć+@Ŕ[JDDDDDDD’@ €XŒWř)Ű(čł2Šc ˙dSI?áTxnUŽ@ ~ʤ¤Ä;KDDDDDDD’’’ńcš(y-ÜŇĆJ¤ĎUDziçEIFÁzČÍÎΚ§ŹŹĚ;KDDDDDDD’˛˛2˛łsîA:#/ÎQĐ'­+Sšá*EP\Ěçbšďßżc0†ˆˆˆˆˆˆˆ**eeeź˙> ˛#cň)QČçÎ*<%)?Z”żĺȎšĄŹŹüR(ňîQ…" ĄŹŹü266ć€l|ˆgŒo^?ćłÖůÔ`Œ¸˜ýÂĂxrdeggŸTUUĺ&""""""˘ EUUŮŮŮ'dáď@LQӓJľ>Œ<ŠcäH\Ä~Á çcŢ'$ˆN¨ŞŞrt UBĄŞŞŞ/D'ź‡ô¨˜üřPt¤ÔÁ™â‚1âRŚŹ ĚTĽˇoßžz÷.k›††ď4Ux÷.kŰۡo_Aţ%ŕďŔ Púx‰Œ’†Šäě JČ#(b_œ’’řżš5kURQQi“Í;NDDDDDDD˙MMMâc÷îÝq çă–?¸$1ßÂӕ Ż!S*Ľ Ć|/€t°(>(#‘”ô"źnÝúu„Bá ČŃ?ASSĘĘĘgďލ´Á‡@Ě{Hb /ŕ (ö+K%RdEFÇČKČyŔ‹ώתU[KMM­Mnn.Äb1{}qBĄZZZÄÇ bňî-¸őkJŠŒŠ)6ĐQÚ`LÁ÷Č!SřqĄ÷yr“’^„UŤV㉦Śf;%%%MąXĚ  }BĄęęęĐĐĐx™˝áŢ˝;‡¤ăď19ř„É#/SŘ'ýÔľŕňÉńRxS*°/üř^šŔžĘÇ} mmí* ~7FEEeTNNNľœœäää //Á"""""""ú$JJJPVVÎß^fggŸLH˙¸Xo&>ţčţžšTpšR~ڍ‘1Ŕ'ţ˘’ 4×!g_рŒŇÇM(gS @ĺ‡Z誊ŠuRVś‹ß ¨Ĺ~›ˆˆˆˆˆˆˆňÄbźďsrrŁł˛˛ÂcccŽâCŕĺţţŐ¤˘Ś&}ą@ đéÁ˜‚ďĺý‚RqA™ü Œź2>g”ĺ[Ňt("""""""únÁ-?’ƒÁ—üiH…/ß+„S‡)—ň"ĺ­“"A'̓t %˙˘ň1ů^pMţhĽé€ü€ ýˇ äRň źĎ+”^ř“Š Ŕ”i (]0&żŕâ2%É+?+pQ*P~á5(ž""""""˘˙Ś‚ąˆźBűG¸ŇA˜‚ű%`™š$ď}ą>5˜ĄČĎX7uФľe çUPš‰ˆˆˆˆˆˆčżĄ¨`HÁŃ1…_™†¤ČH˜Ď ğČł//Sř˝źŔ j’ ˜z3 CDDDDDDôßP\0¤p0%OΞ"ÁyÁŕ땧,‚Ÿ:JFŢgňֆQ’sÁş"""""""޸Ä%¤ST`FŃL™†)¨,ŠŽ’‘—&oż¸éI‚r¸"""""""Ş8Ä ¤5]Џ`‹źŔK™†)¨ŹƒŠŒ’É(GŢkIőf@†ˆˆˆˆˆˆčë"Vđ3ń'ź–”G‘:”Ę—\ˇž‹ŕ3_KŞ71DDDDDDD_'ą‚éâĎ|-ŽĚ2ń%ƒ‚ö ҡ_^×ADDDDDDDGiŚ+Ü+đYqűećK1J3JFŃýňŞ;UlŠ.č[Ô~š†)¨<‚Rź˙œŸŻfp†ˆˆˆˆˆˆčë&.ĺ犎x)ˇ@ P~ EFś>á"""""""" äQ2Šź/*­L ËąQJłŢ ƒ.DDDDDDDTâR¤‹KYF™*ŕ |FDDDDDDD”Oü>+S˙TŁź×a0‡ˆˆˆˆˆˆčßA\Îĺ‰Ëű˙é …ŕ_TW"""""""ŞŘÄ_(o™Ş(Zˆˆˆˆˆˆˆ¨<ˆ˙é TÄ 3DDDDDDDT–ÄŠ2˙†Ŕƒ3DDDDDDDTb6ŃżĚ˙ Ľ s^nHIENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/bazaar-light.png000066400000000000000000006475431522167256300230670ustar00rootroot00000000000000‰PNG  IHDRcśLůZsRGBŮÉ,gAMAą üa cHRMz&€„ú€ču0ę`:˜pœşQ<bKGDTTT3cÁő pHYs  šœtIMEę0!Č´ IDATxÚěÝy˜U˝7đďŠęęmöL&3Ů'űž°%@ ěŤl˘÷ŞWEŻđŕĘ"ňÜűžzEP.ˆ^ß+ú *("B @€„„ě!űžÍ>ÓÓ[UóţQŐ=Ý=ÝłeŚgÉ÷ó›ŤňĽ×ŤdzĆô´&W“ú8ąĂ2ďťŰ̗ˆˆˆˆˆˆˆ†ŚÎšöĘ,÷ŠaŒDÇÁLŽďL aDŽméTO‚ŒŽ1] a7‘ńhŇ eůńl? ~Š!ˆĚxœş ĺąĚxœ+”ÉÔôʰĽîVĆtÄtuRjđ˘#{ “Z“Ť— ˝7LjULś Ɔ“1džż+ߕ9LŠ[ÖşĆô4ˆÉŹpёÂč)7Ă˝Ďüʇ(‘#[uJę-˛XL÷ŢNših eěŒuČß'2÷(9ޞ1ٚövÔ FĎr3ř˗ŻX2{öŒS‚ÁÂŮ^Żgœ”Ş é҈ˆˆˆˆˆˆˆ:#5M4ÄăÖžp8´qăĆ-Ť—.]˛N(uď!L"ť°ŃV5Ł!{(“ŮŔˇG|EŢו1ŠAL˘ ƓňŘp–.]Zö䓿˙lUUĺőRŞrž/DDDDDDDÔŰ4MÔ9rôéoźáË—/oŔ˜hŤąRwĽŮoś2†3] c:žÔYsŢÔ ĆƒśĄHÁuëÖ]:kÖŹo1„!""""""˘|Đ4QˇiÓŚ‡ć͛÷7a´ aJ cJ2]mň tłĄow؎Şb˛ő†ÉÄřjjjžURRz#O"""""""ĘˇŚŚĆ'+**‚S!Eö@&1t)W• Ѓę˜Î˜îTĹd›))Â$îý‚MMM˙ŻŕĄ'""""""˘ţ‰„˙ZRRňŸp*dŒôfż™31wuLwšăfkڛxžúZj(“Zcđ×ÔÔ|‹A őˇ@ xEMM͡ŕN,'żHÍ3Rs ă™žť<ăsOg*ƜjşŁž1ÉŞ˜ľk×^ĆĄIDDDDDDD4P”””޸víÚËŕ2Š“%n™™˛<ÂŃÍe"e}™aŒqöŮg—Í™3ç›<ĚDDDDDDD4Ě™3ç›gŸ}vÚfNÍ5€öŐ1™şşŹăťqŻČؐl•0:ÚĘ{ź 8xóˆ#ţ‡˜ˆˆˆˆˆˆˆšcǎ=6fĚč˙Đ §oŒ‰ö˝c2úš{ÇdíÓÓ0&WăŢÔŚ˝‰>1>%–e˝Â)ʉˆˆˆˆˆˆh Ň4Qçńx.Đ †öS^§ÎŹÔŐFžYĂí8ˇ5××iC”–/_ąˆA  TRŞň+V,BöĄJŮzĆô˜§ďíŹ[pŽY–ôYłŚŸĘĂJDDDDDDDÝeŰ6bąLӄmېҤit]‡ađů|Đuý¸żkúôé§XŽÎgMR)÷ČXŢŠ\aLg OŽŕ%sÚ'@/((šĹӇˆˆˆˆˆˆˆşĘśm„ĂaÄbąŹŻK)!Ľ„iš‡Ăđů|ƒÇĘ͂S“-çčI“őőŽTĆdöŽ9^Ë\– cź^Ď8)Ď$"""""""ęT4E(ęÖgbąbą á÷ű{ô˝gŇĂ wöĄ2^WY^ËJë…}”ŤJ&™"IŠĘx*QgÂápˇƒ˜TĄPáp¸GŸuó‹Ě1š†+ő˜ÖKű*×öö÷эF{¤¤ ‡ĂˆFŁ=ůhŽü˘łÜŁWž¤+şŇWFäă`Ő××ăóŸ˙nžůßyć BśmWELŚP(Űś{úńŽd=Î<úŞbĽ×Ś{ęL}}=nšĺŘşu+âq“g/Ń Ô1˝´ÎĚ^¸˝îxĂŃĹe}˘ĄĄˇŢúMěÚľ ăǏÇü˜g/Ń “˜žşˇĹbąăŠŽIčő죡+cňÄÜrË7°sçNŒ?=öß(//çLDDDDDD4ČtÄ\tŃeřöˇď@SSSrYss3nżý.\tŃeÇľî.ęŐźC녍ČËp¤T bˆˆˆˆˆˆˆ†Óě¸íČřńă°iÓ&ÜqÇÝhjjBss3îźóűXż~Ǝs\ëî†lů‡8žu´vśi° o~óťŘšs'&Nœˆ_üâ1DDDDDDDƒ\GA >÷ß/F‰={ö`÷îÝ1˘÷Ý×qӕu÷‡AĆ!x–`<ź^_ňša0 Ď üY]óĐC÷cҤIŘľkžöľ[Q[[Ë3’ˆˆˆˆˆˆhÓ´Žă‰††ÜqÇ÷°gĎŒ;cǎÁÁƒ‡pçwŁĄĄá¸ÖÝ/?ď`;@eeexôџaҤIŘťw/žţőŰČ bşŽwřú÷ż˙ŸŘťwƎƒűďż÷ß/Ǝƒýűŕîť˙ă¸ÖÝ´ÁxČ †atřz˘wěý÷ߋ˛˛2”••áţűďĹĉąk׎ăZwčęlJ™3*őŰlJŠ2gVúůĎĆđáĂy "śmw:ܨ§ĘĘĘşUsœł)!ă10fSĘÜĄ<ňSLœ8{÷îĹwż{Ď`""""""˘AF×uř|ž^_ŻĎçă0Ľž0lŘ0<účĎ0cĆ x˝Ď`""""""˘A( Šuö†A=L‰ˆˆˆˆˆˆˆ†Žh4ŠP(Ô+ë*,,„ßďďöç8L‰ˆˆˆˆˆˆˆN~żżWŞY‚Á`‚˜|aCDDDDDDDF0Daaa?_XX8`‡'%xx˜‰ˆˆˆˆˆˆh ńűý0 ápąXŹKŸńů|ƒ˛ao&†1DDDDDDD4ŕ躎˘˘"ƒAÄb1˜Ś Űś!Ľhš]×aƀ5)†1DDDDDDD4`éş>ŕ‡u{ĆĺĂ"""""""˘ŃQĂ^ŰśqdËF”?ýřęŽrg Rşe"pô G"śn_˙ETMŸ]×ŮЗˆˆˆˆˆ¨wőľD0Ł”‚R G@ůӏ3ˆB|ľG1ěŠÇqěĐÁäqN=öDDDDDDԆa őşŽ.ŔĂá0ŒކŻîwÔăŻ; Ďű+‡{tn(ĆPŸĘʐˆD"đ­_Í3DůÖŻB$Éz쉈ˆˆˆˆČÁ0†ňF)˲hŞç΢u°,› QĆPŻĘ6}uę2)%<śĹ5Dyl RĘĎ"""""˘Ă"Ę+3DDDDDt˘ăÔÖÄ pęłcŢWSY?đŔOńĚ3Ďć|]Ó4”–– ˛˛ §Ÿ~*ŽźňrŒ9’…ˆˆˆˆˆVĆѐ#ĽD}}ślقßţö \ý xîšçšcˆˆˆˆˆh@`CyĂęëţÇq˙ýbĺĘ÷ypˆˆˆˆˆ¨ßq˜ĺő˘œĚ‰yĚűj¸RŞšsç$×ÖÖáĐĄCíśă‰'žÄ˘E yˆˆˆˆˆ¨_1Œ!˘AOÓ4üęWżH[śbĹ;¸óÎťaŰvrŮ'ŸlăÎ"""""˘~Ç0†ú+`(Ű9‘ ™„%KcÁ‚“°jŐGž—[ślĹ /źˆ>Zƒşş:˜Ś‰’’bL:˖-ĂE]]×Ó>óĚ3Ďâ~ÚĺíůĆ7nĹg>s}Ú˛X,†çŸ+Vź‹ÝťwŁŠŠ^ŻŁFÂ)§œŒŤŻžăƍ˹Ξl÷ü<˙ü ÉçłfÍÂŻ~őţß˙ű5^~ůÔÔÔâĆoŔ׿ţUž´DDDDD}„a  Y­­‘´çóćÍI{Ž”ÂĂ?ЧŸţSť Śśśľľuxď˝÷ńôÓƃއŠŠŠ^Űś;wá[ßúŽ=–śÜ˛,ěŘą;věŔ3Ď<‹Űnť×]wmŸn÷#<†§žzš' Qž°/ )J):t=ô06oޜ\îőzńկޜöŢ'žxO=őt§•\ŰśmĂíˇRĘ^ŮƖ–Üzëm킘L–eáÁ†+ŢéłíŽŻŻÇ_ţňO""""˘^zélÝş5ůږ-[°jŐjœ~úi€QŁFᏳgݖwß]™”ƒAœqƢäó?ýéÔ×7$Ÿkš†Ë/ż łfÍŔîÝ{ńç??˲’Ż?ńēX˛dqŻlwŚĂ‡t]Ǹq㠔‚ßďăIEDDDDԇĆѐ6qâD\ýľ˜6mjÚňĆĆF\zé%hh¨G}}BĄVüüçُ¸°lŮš¸ä’+ŇB•-[ś&C3ÎX”°$<ňČcxç÷ҖÝu×i˝_**†ă˛Ë.E]]-ęëqŢyçছnLžnš&žyćŮäó­[?IöÜ9ŢíÎfҤIxŕcäȑommő#G`šfť÷ž}ö@AAAÚňwß}|đ!&L¨ĆśmŰńӟţw‡ßyäČQÜsĎ´ V”R¸űî{Ú˝ţü“đéO_‡Â‚vŻýć7Oŕ†>ۖxîšÚUΤ:Ţí&""""˘ţÇ0†ˆ†„­[ˇvúžE‹NÇŠ§ž8唓ńÚkŻ'_ŤŤŤÇmˇ}+íýÁ`0g•É˙ř4›Ú-˙řăuYßďó9rGŞŞJ9r4ůÚsĎ=çž{žKß{źŰMDDDDDýĂ”ˆč„pĆ ńĂţßäó‹.ş°Ý LŠnşéFLž<)çëŠ}[şőGWÓđíoš–ýĎoii žő­Űr~ţxˇ›ˆˆˆˆˆú+cˆhHňűý(++ĂěŮ3qÁçˇk¨ëőzńČ#?ĂSOý ˙řÇ?qŕŔ†cǎĂu×]ƒ /<7ßüď}˛mK–,ĆŻý+üîwOâă×ĄĽ%„ŠŠ ,X0_ůĘżaďŢ}9?۟ŰMDDDDD˝CtašHyžxŹĽÜ'nş{ó¸7/@iYż%loo€1űdý1Ÿ-‡öĂĐôžY4ŒŇ GáU}˜†McĆKÔ]‰gÖD°éóˇeö(×, 4Ŕß'"""˘Ąˆa 卹& QŘÔÜ'ßѢ)„0ŹrdŸŹ? ž˛”DűdýÍ%…IĂú(Œ 56@ Ăű(Œ‰ĄëŤaˆşŔ’ ďěˆcÓaűęm4EdňľU{ăŘv̸a:f4pćd/<݈ˆˆˆ† †1”B(ĽŕńxĐRZŇgaL&Ž=ÜgaLŤF– äP߄1uĺ%[1 óxűdýľGaę6†ËžůŻí‘ŇRézň˜÷…őM<öV(çë“*<řîůEXš+Žg×FđŔ5%˝úýˇýŠ1K%ŸřćŒňâş~řgCSDâĺQŹ;`"l*Tj8s’gMéżŕÍm1źś9Šť.*Bą_Ă÷^hĆů3|8gŞoHüM´¤ÂŁË[ąőˆŮáqŮpPbĂAk˜¸ui!tĘ c¨W%B—\ź^/§MÁˆ˝űűäűˇxM˜?¤Y údýD| Ş1öŁ˝}łý3&"iÁ$QŸŹۆŐđ{-L3žš¨Ÿ>Ă}žNϑă1e„w_\œ|ţŔ?ZpÎ4NçX~ŁďÃKfű1Źó}ő­6žYÁoߗřúمƒîwś!,qßß[đ—Í  $ °żÁĆK"ŘYcáK‹ Л{ôßi…Ś_<Ł Ă÷-Ó1ʁ@/Ď۟kÂsX<ÉŰŻűýÝńƒ˜L[˜xgg gOaщŽ˙úLâ˘;őâŰď÷C-\ŐUŔfĂÄśWAJŮëëW؏ě8u dT HMÆY“ąĽ5ŮA Őăí—Ű×­ÂfÂěƒă-…€Zx|)aLśsŕx ąezňŚi@I@K>Ż(ěű?kĽ)ß7oŒ×.`ăA1S şßÓ?Ž ŁĐ'pç…ĹX<ً9Ł \2ۏoœ[„5űăŘpĐě—íš\áÁ§OÂЇćМ͇ťż_ˇś@DDDDC+c(ż'œÇƒĘŮ3°wÚToÝÖŤëţĐG“Ś€†ZŹ_ůN:óź^]˙vQ‡LČa…زt&f˝ąŠW×˙ţisĐPT7ąśĽ'—őęúמű:Zë Xí‹ă´XďVě1 #ç̆Ç3°ţŹźńI ˙ŘEKLabšŽ]T€ň‚śŔfĂA]ÁŃf‰Ň ŔŮSü8wšÝɏ4! i@jďâ÷vĆńĎO˘8Ö"QěX<ه‹g9Ľ÷Ö۸÷ŐöCőƔęřţ%NŐĎöc^ÚÁŢzM`îhŽ[DŔëlX]ŤÄ ë"ŘrÄBĚR˜RáÁ5 Uâ űíĘ0¤RđęŔ‡{M\97€eÓÓŤ*š#™ř÷ł áó¤˙Ŕă†éřÜŠéU1‡›$žYƎ †.0g´×Î$‡g­ÜNj˘¸nYAcDaBĘ>żçŻM¨ 9Qŕ‡{â¸ui!ŞJtÜýB>ż(ˆW6:ÇéĄkKł3łlŕ‰÷[ązŻ żWŕŒ‰^\>'ş“m(ÓCݎ`|šŽeÓý¸óš&Ŕ“´âÉZńČőĽ0tőMź¸>‚#ÍE~ ‹'yqŃ,?™kŽ}ší¨…ż|ƁF‰ !pÖ.íďôÜiŒH슡;ţ[ЧU{ąrW‰ˆow…ĆˆdS_"""˘!€˙Žň&QQQQşK/†eôŢP™¨PřG –|žâŧEzmý&lŹG ¤€’ď]wâţŢ 3˘>^=ďLŘJ@* ˙ŹŤEŹŤ{bŃ0Vźôtňů?QÄDďUq˜†úK/FyyyÚąîoĄ˜ÄÚýq|aQn9ť‰'ŢoMžžů°‰_źÂéŐ>|ďâb\=?€—6Fđ↮Ÿ;‡›$ţňq§W{“UďďŽáŤĂ8k˛w_\ŒOÍ ŕĺQŹŢTiřÎůEÉŰĄ `áD'D¨ IüěŒ*ŐńÝó‹đ•ĹŘ~Ěšđ[żŃ‚ĆˆÄW—ŕöó‹ kŔ˙źŢKçăý& |§Oh˙űśżÁ†RŔÔŮ´%nĽ ŕô/yđőř oŸçlÓá&˙ýfśL xlŹÚk▥E¸ë˘"DL…'?tśűŽ ‹0u„ÓŤ ÜwU ŚUľ}ď?śÄpÝÉAÜuQqÎ}ýږ(†h¸ăÂ"\rďěˆ'÷IgJüîťĘ vޘŔ}W•ŔĐ66ńˡC˜?֋;/,ÂľóýXž-†gք;ܗĄ˜ÄŁËC˜^eŕ—ăKgŕÍmQ|¸7Öéś<ł&’ÖŹ7›+ćpĹź@ZŔבxvM„˙˜ ʌĄ> ]}cS—y<Ě^şŤ>ن…{â8‡ä(w)‹ Ľ€R@ƒeá‡ŕ_G…vœÁ†R/<ţ0BM mušÂď Ăř|KÁq'˛JŹ9˙\œt֙Đu=í<Č fňŇÜź¤…nĺĆĺsřÍĘVHhxuSËŚűpŢ 'Š*ö˘aŽÂ‹ë#¸|N g…ĂSŤĂřӚ , T—ë¸r^ ůú >̨2PâV0T{ńÖövÔX8eź>C`r…óç×´ţôQsG{qž[šRQ¨áżŽ,IŤ€8ľÚ‹ľű0G׀;/'ÚĚ IDAT,†Ž!YŃrî4~öFĄ˜LţźU%Ž:)s˙„ă  đuĄ/ˊ1x=_<Ł Y‰ňľł q×óMŘtŘÄ\7´‘ ř—ÓƒÉŢ=Íňăń÷ZĄú4űľäвÄo\9/€ŮŁ:hŤËu\6ÇůyF—ęˆ˜ŔŸV‡qĹÜ@ťĘžlçBI@Cą{K|˙+›˘8eź—Ěö'× üúÝV\:ť­)sćž<Řh#n+,ëEYPCYPĂ//IV.u$1}u.ÓŤ ,›îÇ#ËӃ.ŘtŘä?2DDDD cˆzԔ””`§ŻĆú†Ě}ďƒ2J F°ŮŰţeÇŚľxýĎżÁůŸţ„čYä  °JĆ^´@)%‹M%v̙ˆ7nXŠeż_!{şýšň\ʟ>J HJR›CaźxôލŃăC)‰üéql_żŞÝk[ /#¸"@O‹d”XwĆéwý5())é—ŔĽ#^-LΟT€i)ř mÇ,l;f᝝ńä{"qgg´ĆeÚgS]2ۏSĆ;ÁI(&ńâú~ôj žqŠüÎgÂ+vÄp¨I˘ŚĹƁF•ĹZÖ`'WřćšÁ´ĺś^ßÁ5!űëm”R‚-kö™Ř]gĄŚEâ@Ł3ěĹJšx//čxŠô WŔ’@ĚT2űęmLާÍćSĐ0˘HĂžz+Ć˝ZZĺ"Ÿ[–­:ě˙2ź ˝~&”§˙“5šÂƒ¸­PÓ"1ŚŹgÓÁqZuúđ­ÉĂ=°%p°QbjĽ–u_Ž*ŐqŇX/x˝3*=˜RiŕäqF—Â˜ĚŽČšţĎĺ%xfÓ4ů ‹‚řçÖhˇüâŹLfĹLuu5˘˙z#Ţ/.ŠŻ/‡ÇěޅGT(üą ‚-Ţܟ[őćßĐT_ƒ+żxźž@ˇÖoÂĆŰÚ~ěG ”tBç& ÜĐdŐy PW^‚Ť~ů2źŃx÷śßďĂď>{6̘ěŹ)ß'˜yŤž5Ś…1ŹŰŰ‹†ńü݆Vç|Ďťţ8t…φđŠî…(Śa`Ő˛s0ęę+0a„Ź0)˜ÉĆĐޘŔ‚qF– "w8Pě×P• V4|}i!ž÷|3Vď3qÎT^ŰĹKŁX<ɋyŁ=QäĂ+›˘íÖłrWě1qűůEińۏYxdysG˜Ve`áťjmŹÜĺ i‰Jüřď-( h8yœłGĐđČňPˇ~ţąe:„śł’Ă‘R­ŘGi@`ÎhŞ;éBÉĚlťŇčşG9ŁHœÇżĺŤK °ˇŢĆŚC&6Œăůu|eqA2˜ĘeÖH#9dÍů9€ˇśEńĺĹAl”hŠ(üu}$çg‰ˆˆˆhđcĎ곌+ŻMŸ> Ó?ŢúâMŘ1{&d.ޕÖxăřII¨Ă &aŰşń󻿆Uoţ Ş }X”’Ř%đźž űT ¤„{NO÷š­[ |2o2ţűÇ_ĆË@vaH”ŇVŸ< ?ü~ĆdŘĘš“nEŒTÂYć~ÇúŚPˇˇĂűËńË˙¸ľĂ &ała⾒źëwi–%%öNž„_¸3žp#ŚOŸÖíă>PT—ë¨Ű(/Вˇ˜ĽŠ)tgÂ,C0t$gSZš;†s§ůđ铃8}‚†{ИŃ#ä@ƒ?Ž ăÓ 7,˝ęâŁ}qŒ.ŐńĽĹX2ًéUÂńśĎoŻąĐ–řĆš…X6݇šŁ ô¤8Ť8 aÎ(/Ź‹ fĽŻ`ƒ?Źj…tăŒńĂt쪾Ҟ§9"qŹEbü°nTĽÇi°§>}6Ą56źEÎďĎŁĐœ˛Ÿ•jC˛ĂŻ7LǎšĚőZĐ5`TIîß稊°ťÖÂřa:.™íÇ7—aÎ(ooďźgĚľ )Ă´Żoáů#^¨áń÷BiN % ×,€ˆˆˆˆ?VĆPŢ™lŐ1J)TUUaŮ5WaűÜ9xuĺ˜ąţ5”‰Ŕąŕ‹8Ią€ą UAü~ďngÖ¤n‡šńÚÓżĆĘż?Š'†ÉsNAYů—9 g›ęĐX{Ű7|„më>Dńýˇ9C’¤Hö‰I JVݏý]”B…üí3çâí NĂôľ;0uĂN ŤmFIŁ3cNci1ęĘK°yĆ$ʟ5 EĹΐ$ŮśnĽÚ†)ĽUá¨îoKc]ˇöOHSx!ÁrŸWÝáţß4{ŞO9ç̜żßß.h,U1€ÓĎ乡B(ńk˜3Ú@]ŤÄӍØVéÁż,,ČůšĆˆÄţgXP$ްrw M‰šcœŞ…Şb6tú¨ř 7?‰âhłÄXw(M$Žđ?+BUŞaL™rÎŹLŐĺ:*‹u|°;Žuă¨*ň`óaď튣Ŕ­žŠ,Ň!°|[ sÇxQÓbăĎkÂ=ÚŸ=5ˆűţނ˙˝ËŚPŘß`ăő­QĚăĹÜŃNŁę%“}xs[ żyŻçĎđ#f)<÷qcĘtĚěFľFi@`Ë Gš%ĘÝ;Gö×ŰxqC Ćzq¸ÉĆs‡qÖd/źnż˜i•ŢŢĂřa:JŢ܃igťjLLŽđ ŞXĂEłüřůňŞŠ5ĚmŕX‹§VGpö_˛_L6űęmüô\r3ŞœĎíŞľ°p‚ˇ ű@Cő0ëĘvĚŸÄrk†{8“âŽ0˝&„€ĎçĂŹY3QPP€}Ą•8:ą(çz›ö÷źanKc>Zţ >ZţJ‡ď+TŠ!I[“č#ÝŚ-¨q*fKŠđîŮóńΒůîçDĘçÚŢŰn*eËR‹aşşý=Ő¤)XÔáţŸţy¨Ž!D—›óÔ`fÖH_]RˆżmŒŕoŁđ '¸|nÇŐ/oŒâĺÎ°#ŸG`tŠŽŻŸ]˜œVúĆӃřÝaüěŸ!˝Î´ÖsFľ}~Ó5!‰šp˙k-Éĺ>Ŕß.ĹŇ)>4G$žx? Ľ€ŮŁ \8ӏwv8UŁKu|yqž]ë ‡?LÇŐ'đË­ÝŢeA w]T„—6DđŇúÂq…Š" Ď `é4o˛’¤$ á;çă™5a<řz ]`ö(×-đ§ő‘éĚů3üŘS׊žŇŒ›N `ňˆŽ9—Î `w­‰űţŢżW`ÉdŽH9VWÎ  9˘đřĘ0†ŔĽłýˆ˜é/Žēśâכđ./ÁŹ‘n>Ť/­wŽiĄOŕŹÉ>\ě6ôÍejĽ_<ŁŻnŠâŮľ˝§U¸|ŽżK?ËĚQÖl_Ů×Q…ÓĚ*ţ“MDDD4dŽ—ť°\¤qĽ2‰ÇJŠv•R8rä(ś=uO‡ëűËŰëű|›Ť~ůƒś E"˝Š%ĺyÎŔ%QQăžÇ–)KF0“ e}cRžÄűÇqń›úČŇʐ˙™úMfĺĚ@şhˇe[pb§(@zđ‘Ľz&=ˆI.ËV “¸8OJ`÷5{`ťŽžQÇ<šŔ­K ńÎÎ6ś°§ÎBSF_Ą’€†ęrfôŕĚI>1DDDDCé˙rP>.Ü3űÄd.sHS°- Ľinő‹H†#mł*e.)ÁŒĚn”Ę\¸´Í˘$Ú"U[̊cj8ˆęłF‰1^€-Bf Ńc8ڇążn ˘ńŚź×ÎzĹ0¤!ĘM׀ł§řpö#ĎŽ‰`ăa§RfÎ(WϰG ŃĹ0†úUG}eňŧ \{R f\Š@Ľ°Z7ý[Í*ź:űD5#Łyoz'dĎ3†/!ŁBé2ŠM‚§Ć qAëĚśŠ )gö(Œ(‡˛$”%Ą[%z)‚ŢbTMÂÔŞĽˆI{j?ÂĆý/ śykޏ!ŸŇ€†;ł€;‚ˆˆˆčÁ0†ňvÁޕĐ%ßöc =¸őKăP01č ˛T\˘ŘŻpŞyÓ7˙ży)Ž”U¤IJ #BFŕgşëś*˜” ˆśeПw_n{ńŮđXĚąK]8żî›•­ tĽ HM@7%`J:KMÇřá§ ŞüděŤ[ƒw>ŽpôXŸËŢ|щ†a ĺ]śĄJÝšxŸ4˛´WśC_şn‚3 œÄÄtS]8÷(,ţíŕßđ“ŕç6üiU-iÍw3zĂ´ =Jé!Łr/;-Z†›˘ăđx á´ČvWŽ,• b4á„:şRđ¸ÓaKŘB@WŔčaó1Źř~¨ý=ZBŤúěf{Άˆˆˆˆˆ¨sŒNB\Ä_2ۇ‚ş47ü‰MB@((•řÔş@JĺN5- Íwá!Ň Xdrˆ’Óř×N,SďKůÜáJ|96AŻͧ;ˇ€ÍŻCó{ |ŸáŐĄy5Cƒfh !ŕşpÂ%]<ş#+žˆ˛˛+‡Ô1#""""" XC'¤ 0ńÜ2HKA(ĄœjĽTj“BsK˘bŰ>(¨LŸŠZfLE-÷˘­ąob™iϕŽ4ĆŕS…ŁĄůtŻÍĐ! Ѕ[ÓVŁ„ô ŔVş‚Đ%4KAšrď…‚ŚœűҒ aĘ8BMŻđ  ʌĄźÉUIŃœZx`*¨¸‚ŒK(S9=clg:ié†3 š&ńŮÚN5Œ¤íޤHžm™Τ?b8Ž Œ…đçfh^ "Yăćó8A[ #<ŠäIšiB@ƒS“¸wF99NIéĽđOňǔˆˆˆˆˆh°`C'œiEĂçqÄ%sn*.Ą,'í4ȅŐ6uő¸ňN9˛%%pq;-„I]l) m‘ÂH.ý¸É7Áĺބî.šĄšC”ôô F× 4'Œš€ĐœĐCCr„•sŸzsC™ÂaŸć)çÁ'"""""ĆЉuÂ+%§Aš1*&[Ü˝Ĺ$`9U2Ęvƒ7œ‘śÂUćj[eTÂdŻ|I†0vj5ÎÜ _ӒI2II3Í bÁKjş÷1ÜĎ y—|’Y—˘ ?|Ľ×ň """""׌Üt"9s¤Ž@•0ĽS“¨¸Ěś WśtC6PäăŠ}ďf„0n…ŒĚ ]ڂ;ąLSd!fk%ił.%ŸČÄěI2f;SZKĺžÉ>6Pî˙¤>MPĎÝ×=ţYžI< ˆˆˆˆˆˆúĂ:ač łć‰1qéÜÇĄŒ‚Œ;30%¤%éŽ3ŞdÎń|‚ŇHKÖáG‰Ę—vËRúČ\$‡gNĂä0śtBSBFm糥Lgš˛ĽĚ$oh›jmyN"ˆI]ćÁ•ÂĚášSŁ @”ć„R ŠŁ”œ@&ŃT× ^$œ>-‰jˇŒ˛$Ž €ˇKć "ź)}bRzȤ…2@‰đŔR Â%eÄe[cŤäTÖÉiʕӍ7ůÝvJ#SÂĽÜÖ6)•2iÁŒ‚ ˇzF”ńÄ """""ęĎkUîĘćę&|†'Ů´ş€“„´Ň]8SH §űm˛wŒ;öÇéc+KAşLąƧ÷/ÇoF_ŕĚ\”ŹŒ)ĄL[…Œć0•D˘IŒŕ1%4;QŁAhÎv%¨älKNuŒí†0Ůn‰*'QÉĄK‰Ç &|Cţ¸Ťp Ç "q nAٲmZpę! t đz ^ čƒöÍ9k1 ™ˆ‡MX1ŇRN@:¨v—ó{îńéđ ř řŠ žGDDDD”†a Y…Ra\™púŔ耰áIФVŸŔţٝZ)ČśćšBRJ n…ŠÓ;FXÎëçE7ŕ•Ö“qĐWžŹ†IočŰÖŕ×R q((H'°śđ(ÝЄ4‘šĹ¸ëSnuK˘úĹLš7ej…LJĽL"˜Üţ2ÎýŐÔ ŮĐ 3ů Đ[”‚˛lŔ˛ŤŽÂg@++J zĺ+ÂőQ„j"0ŁöŘ] śŠ`›ą‰–c€á×QX@p˜Ÿç`CCŘ|Ä ŰRiÎ Jœ-Ń/Ć wi8aŒmՔ2Lȝ†€%!Ý2†máóű^Ă&~.mHRbĽÔ•šĽ ]îĚFÎŞA‰&„3ɓŠwHé÷’%hI WŠçŞ”Iš9ALlčĺŃ8TMłPßďď˜ űH#Ds˘˘ÂďíŃzâa ͇[ íđ̌ÚhŘB¸!†â‘đůO/щŽ˙†¤JÓDEPAĹĄ;C””ćOŇ܆-îK"qď&$*q/Ű÷ށíöŒ‘îĚJn3ߓěݸ}ŰOq$Řńpáů6âĆ8HáßŘЅ‚%t7Jľcŕ2Š=`ĄL[ř"ł„0)}dŕ<Öíú!uŹesęH#‡!őŽA퍅¨*…VěÖgĂ 14î şaHÇ#2QťŁ Ľc ,óń"""":1ŒĄ!G@až‡ŠťC’tĺöŠArN٘dƒÄP%áŽ1J„1pžŰÎěJ‰ ™Äsa;ua3c­8(q†Bĺ5C÷ŒuŚ›†€ ] č b47ˆI­QNÍŽŰśŚ­L˘2ĆĘŹˆ‘Ů+d÷>ylČkن:ÜŔ“ž?)u¸čr nˆĄa_Ë şťTňgg CDDDtâbCCÎäP şâncÙĘZsŞbT˘AŽ›ť¤ŢC)ĺ4ň…t†( w¸’ł°e˛Ąo˘ŠoT7Dą{X çśĹâ;`řOq‚•č)Ź +M8Ś4 9˓B˘•J|}ŰěH*G˙˜Œ!KVZľ Pť‡ĆEm4îTÄĐŔ8GĄźžN‡,ĹĂ÷‡NřýŐ¸?ä6ůĺ?ĂDDDD'"ţż@RźśÄäx JP tĺVÄ87¤5îuzĆ$s7˜ITÄ´UǨDĽŒ-Ű˝XŇ­Ž‘Î L­iĹţ,]Ëş}f| ˘Ň†!tŘBAw+c4Ą %结Ő:p§Ç†3Ô(u¸RćP¤v3,I™öÜVŠímCă⿌™C“ÔQP5Íc‡wřśćĂ­Ýš$-…Í/ďƁľľˆˇfď-ă x0z~f^Z ÝĐÉîRh>܊á“JxĆЀc+˝ƒĄ>BÓ ¤ĚúÚ̆0ź–„Ň„Ó´× c„&œenó^@´őŒsď\!9•JśUȤ”Ľ8}c¤3D vʰ%KÁ°f aøâW`-ˆÇ7CzgÁVş4ˇ2F@ľMň„”YžR†)I¨´áJ‰ŚźÚWÇdW˛”BPnƒpÎ}Ťi˘ă ăű=ďšZŮŹw  áĐԚs–Ľp}´ŰÍzˇźşťŢ9Üá{â ťß; Ľć^5iĐěŻXČD¸>ĘY–ˆˆˆˆN@ chŔąMş7÷Šé÷ˆDŰ_ˆE-Œi‰9Ðô””4ĽIw:k7lM|ś2ˇ EÉÄLJp†'ŠDă.ˇĘ˜´{ {¤ť+‚˛˙ Vd9lĎLŘn5Œ.´DăΤ$ĐV9Đ6ó’jČXÕŹ,ÓR‡,°ßëpßű˝1ąŹĆȆÖîć`ěwˇ@i^čÓÇB_4€€˝j;䌽PĄ8DE1´?ŽÁÜOMrdŠJ*ěYy{>8†ÖÚ0<^SË0óâń¸ý[^úŢ{VöʝiçĹ´óÇ9ŰľŚ;ß>ˆPMހUłË1ă˘qđřť÷Ďj¨&Â0†ˆˆˆˆa Q˙‹[6ź„1%EˆĹă2ý‚iÎáÓ ]”-Ý!J‰ć˝Ęé#ÜaKnϘśÚ“Ä՚H4iq–şC”œqBnÓ^ˇBFş3*9}dTr†%a3ˇŐăĂyŮ/慵fl3,ď §qŻÎ*ˇ:&ši‰MRí™ÔFžNeLű@&sŘRľĹj_ÎýŞiJK ;<61Ëę÷óC…cPąîUWȃu0Ÿ]é 3€Pöęíjœs"Ľ °:Öóů`|ęôNkĺ'°ß˙Ä9ŽE([BíŻ…¸‘†ŽnmŔčyĂqÖ­sÓ>×ZÁ?Y  jN9â [_uBÍy×LĆřÓ+mŽá­‡×Łé@űVĂřÓ*ťľmąĂ""""†1DýŹ9A•*íđâĐŁk^šŇřr$°nÖŔú9|ĆvřŽŸ÷Íčń§€–Öh˙ç‘x÷?s´ŠűŸŠi¤„“čeyÝ´ˇ‚BxÝ ičKf@›7ÂýœőćŘď†>"´Ńĺ˝vŒr5Ĺí”čĺ÷h>ԊýCkmÁ2 ‡űĄˆv,?eKTÎ( ÝŻ IDATC‰ŰłĆŠ:ÇU÷ĽéK<ˇzЧÇű†ˆˆˆˆ-†14 YśşŚPJg]ęO Í!Xś´ŰďY4 ÚřŽ÷oŃĆ ‡çĚ靿1ŕƒqńřnžĆe§@Ÿ9Đ5g˜Đ›şŸ;”$ŤQ´áĹ%A€ŞkIżđŸXĺźßđ$.U×ŐZ }ę(ç=>´jg،:RŸžžŠ#{ˇWLŸHl ęĽ÷S΃Ëď]„Ĺ_›;ncĂ_wcÇ[éAUŹ%Ž˝L=ˇmŔabś$;ٚ%ńÜă×ůƒˆˆˆˆ:żćŕ. ~šź_Fă&ZŁ1îŹ~ŠDéÂěE]9Ś˝rîč=řłĽk0Ž<ÝŠbéěâä‘đ\šĐ™˝ŞžöG;`oŢř hSFÁsá|ÎČ]G2>ňXćś2ŤÁďËŘľ*ő󉐬Kű?ă=š–ˇc¤yú7ő1#6ęw7ŁaoKr‡M(ƨšNőĎŃ­ iďßůöAHKbř”R”o›Rťh„3”Ťůp8­šŚéPŤűz°ű˙{˙Н`ĆЀ‰Ĺ‰›`‰L˙ˆĆMDcŹš¨ˇ‡}Çu ĆE  /œ–ű-ó'¸ěOţ4Ć,Xoo†őÚ:ČCnʼn¤;C“0Üíô8÷ňH˝Ž(šçXÖUŞĆÖä4Űň`T‹Ű;Šź8í}rË÷$;ąŽň"ˆ"?Pŕ4龡93Џ•ü>QUÖńĎäfĘV˝~Œ<žžUŒ$2&•š_)´Ƙő}ŠçrsďübVü|=jv8ĂžŹ¸Đ@ ¸­ŻP(Ľ Ľ„eźĆ˘"ŕ… ÷°bJ8C–DŔ€ľ|S[%ŠôÓ§ÁłhZ×W5˛ ÚŘ Čý50Ÿ~˘0eŮ@ԙíI_0  {őv¨#ˆ?ţ˙Ůťďđ(Ş5 ŕď̖l6!R …Ţ{ U @š  ˘˘^ô‚í"J 辢RźRDAĽI ˝ƒ ¨iŇK¤%„„ôms˙Ř찛şi› yĎ3ϖ™rÎŮ33ߜ9łÇIP*ó bčցčď év b/Äj@ƃm6D_†éj¤ä4sÇ˝Žj(Öʎ `Ř}†§aş )9RJowˆjźMnć€LFôŤ…˘]]ˆľü‹•Gš6MŤ*ńă­őéÜ:•€ŤżÜ‚.À 6~¨­ˇKĄż­âďŠęÍ|qëTŽ|sî~dŢ×AŸa„B%˘n÷A—ˇn˜e„O-řÖöĚąJ4ěŠ3›ŻâÄşK¸rč2’ł`Č2ÂłşBŰý‰ej-kMDDDTŮ0Cĺ{b-vwÔk’$ddę!I”˘…(BTŠP Д„Q’`2˜`”L0M.*e‘ňĐĄ´.@Ž>TŠJѲ6„*Zčˇ$ Ş>-!6(z'żĘÁí`üăLoAJN7?Î:ŔŠ5ÍýÇCŞAŮľ1 їL=ÄzCý ßv,×üDW(Úօá×sćĎőŞCŢ<×tŞGŰŔpđoH™zŐ} ęŃL~lľ˘YM*% Ç.Át3P)Ąh e×&@!ů*TŃ@ńHS˙źÓ­{ďŢŠŒ6wpÄĹ]…”;ĹŤ#ŕŘOçqçě=˜ŹZí\Úw—÷߄_Coů–!Š€Vt­Ÿję7q#úŇâ3ĄtQ °Š/ô†G`v˝Y\űí6 AxާŻÓľ:ÔŽJ\>t ińPš*ÔŞő -Ömt.î Ć1CTŽDQ„ ć_,%IĘžuF‡,™:}…îXÖ)*…ZZ54ęN *ˆbůŢÝ(h] ¸¨ •đö)ąNTCĂŁ1¤jńÖEĽ„˛SC SÁý*Úօ˘m]Űđ†yˇRA]Hß6˘Ÿ'ÔOwË|!óPę‘yhUĘVľ‹Ÿ?.*ycި Ň( /âӆ¤ěX_ěéD˘€€&žíŕ…JDĚŃ8Ü>¸ł:& ˆíŠJőÃP?<˙´Qş(Ńďý°B×+¸­‚Űú•¸<Ť4 ¸Ta0†ˆˆˆ¨Ň‡1 ČY‚Q ¸hcÄ ‰jW(˘ă[Ăä\o7łűf)Ń|Šůčf*8oňă^Í÷Žýé5‚ÚřĄVX\­nIŞZÇúŒ:¸u2W~˝…”Řô —^îŐ\Yhˆˆˆˆ*!cČ)XnWR*•PşzŠ Ć8#•Ö …BÎłrăéá~FńűŽĄ˛ůk]Ďüƒ1Z ŇďeŠď˜öŁ˘j]Ď|˛ĘUĐţmďř+ÉĹ{ÚV9qqWAëŁaÁ!"""Ş„Œ!ǞŹŇGŒZ­F•ŔşHťÇÄrBŐëÁĹĹĽĐ|´5•ëÉHΓwFƒĆ<§–œ)ÇܸM0&Ż>Ţ9–ńpŚiÎäLLź‡ęąťóLKzĽeémžŢ­jÖ ľÉźŢçĚ3""""""˛ƒ1TŽň źäg9ї$ ŽŽŽ0 ˜ƒ’…S(Ôᅦž%G^-ââîŕĚĘ}EJ/WWW9}ěiĂ@ QŃ0CN%ggž92*•• ťk×ü´>~PŤUý­5ÖidýY­V9˝T*eˇ%1řBDDDDDT2 ĆPš+¨ELΧ,šşşB¨ZRš}Á…Fí Őj $TôŕBÎ@Œľ˘ŚWhcszĺLöCDDDDDTzD&9ƒÂú"ą´ÔpssCP‹n0h| §[Ő tčů¨9 ‘ŁĽ‡ő`˝ŹŠ4äˇŢÖßiľZÔhލéŒ=űËÁŤÂZÂ0CDDDDDT< ƐÓČŻ’œAĆĂľqoľŐň—śj0Ú÷…ƍç PXżĎ+¸Q‘ŇŤ @Œĺ˝9˝" IŻ´ď˙,7nœgšôžˆˆˆˆˆˆŠ†ˇ)‘ÓĘŤs_A P(ĐŁW~Żâ…›çţb/AH˝Q4BăYžőQˇeGtčĐJĽ˛ŔÂĂÔgL~ŰŁT*Ń=ź7~w÷Ä­óć™^őZuD‡ P( ÄQ Ďwíř^°úly/Z˝ZEö ĚÔTźt:ý&55°×gË{Ëk\ÜÜźyŠŠŠwwwÔ¨Qţţ~ůöŔBAéWXzŮˆa`†ˆˆˆˆˆfjľ* @=̏§50f&ŤA˛zľœ|YżGŽ÷ćóŞ|–Í` 9m@Ą q *㣭 ›Ś°ta †ˆˆˆˆˆ*Gcx›9Ľüž°d(č֜‚‚k@Ą t)NZ1CDDDDDT6Œ!§•W@°/°ßüJ2ŢŮäŐĘ%Żt*ęśUŚQy`0†œZ΀Œĺ; ˙`D^Óu\EIkůĽSIӊ"""""˘ŇĹ` 9˝ź2–ď‹;ż‡50­ˆˆˆˆˆˆœœČ$ Š 4‚‚ TŠŕBim'1DDDDDDeƒ-c¨Â(ĘíIyýŽéĹô""""""r ĆP…Ă`Ӌˆˆˆˆˆ¨"ămJDDDDDDDDÄ` ‘1CDDDDDDDä@ Ć9ƒ1DDDDDDDDÄ` ‘1CDDDDDDDä@ Ć9ƒ1DDDDDDDDÄ` ‘1CDDDDDDDä@ Ć9ƒ1DDDDDDDDÄ` ‘1CDDDDDDDä@ Ć9ƒ1DDDDDDDDÄ` ‘1CDDDDDDDä@ Ć9’I@T8I’ Óé ×ëa0`4!I’C×A( (•J¨T*¨Őj‚ŔĚaů`9ŠLF˜Ră!e$CĘL…¤ĎL‡•AQ AĽ q‡ŕę Ń˝* *˜7•¤n`ĂňĹüełî r˛˙…ß VŸ-ďEŤWË Č”Ůƒ€ €—N§?Â¤ŚŠČ`0 33™™™Nš~J%ăŞ,,'Ny •SŇM˜’cîZˆž˝j@pqcfUÂşu Ëó—yĚşƒ(ojľ* @=Cö`ĚLVƒdőj9ŕł~ďÍÇbůŁĺxĎ` U:iiiČČȨëęęę 77žLą|°œ8ăÝ+0&^ŻëŞđ †˘ZmfZ%­Xǰ|1™ÇŹ;ˆl9"Ă0$QƒŠŠŠ0 f322 ×ëáîîÎŤ ,,'ĺLĘJƒ1öXNʉ”‘ Ăő*caĘLáú HÉĚČJX7°Žaůbţ2Yśˆ‹Á"ŤŔýű÷+t犒$áţýű–-ű[ˇnƒ čŐŤž{nT‰ňĆh4bäČga4š°|ůwpuŐ°œ”)+­XOMʸy Gś"őâqîÝDjŸ¸×k Ÿ°GĄ ¨YŽŰeLźŃßúV˛}÷E,_Ě_ć1Ë‘c°tSĽ—™™Y¤é“’’ńóĎëqôč¸sçT*BBBĐłgwôéÓ …ŠśÍÝݝ™ěŔň‘Ÿ;wÉÍnׯßI^|ń_v˙Ţd2!==÷îÝÕ+W°mۤĽĽ&OŽÄŕÁƒPż~=x{{ĂÝݍĺāLI7‹6˝^‡[ëç#ń÷í@ŽŚé™ą×{ żl€O灨>če ežó‰ŰśIÇ÷@?Ńfœ[hcÔ|q:Ú*%Ţ6…}frÔ ‰‰‰Đét6ßůúúBĽR9dýĄ×ëěšÖŰŰ...Ü9qůş˙>Ö­[ŁGG\ܨŐjÔŹŠž}ű {÷nÇ•,ÓŇҰfÍ:üúëo¸{7îînhҤ FŒ†:ujŰľĚ .bíÚu8wîRSSQ­Z5tíÚC† śyő‘#GńŃGŸŢxă?čŐŤ§ÍvNš‰+WŽƎ} ôgŮ" Řń˝`őŮň^´zľ ŠěA™=¨¨xétú#LjrF’$!!!ĄHŻo˝5 ńńńyŽo׎-ţűßiezĐSTžžžNľ>sůĚWşVŹX‰˝{÷zöěgžy ÷î݃Á`D||<"#߆§§~řa™]ó|ë­I8ţB‘ÖŁaƘ=űS–“2ÄĄżôŤÝ÷ű› z\ýz2ŇŽœx4í]ü-dĆ^“§Qş{Á˜v’d‚{˝V¨őŇ'ydnmřń‡~ÎwYŽAuQ{ĚŹdA€Şng@T0ŻKX7X¤¤¤âÝwßDž sSŠ”xůĺ1ˆˆčgÝrĺĘU¤§§ş ­V‹ÚľkĺyEůüů ˜5ë3ÄĆĆٽ΢(˘oߌűoˆbńîpgSvĺ+.î&Mš‚„„Ä<ÇŘcĆźÄcJ”Ç÷îÝÔ)Ópóć­\Ó* L™2;†¸Ě#GŽâÓOgĺyUhh(ŚO˙^^žcL&ŚO˙Gţ2d0F~e‹*ľZ €€€!{0f&ŤA˛zľZżGŽ÷ćc>&3Uf9ŻJćçŸ×ˁ˜'ž†ž}ű == ~ƒS§Nă?ţÄńăĄuëVNľ%š˘ÉňQ4+VŹÄÚľN×Ž]xţůgwďŢ-ň<-WĘÝÜÜŕéé‰Ŕ@tîÜ óć-L˜đ&8ˆ[ˇn!))iiiPŠ”,'ŽˆĹ¤ĆŠăĹŰëż@ڕ“P¸ş#ä١ĄtóŔŐE‘松ˇ?ôIwQwÜȸ~×W}†Ô‹ÇqkăBÔúZŽyÝ;ś ÔˇÚŕ­WôÉ ¸ňŐdܸ„3ď ą-KžŐŕÓž/ü"ž`G€E’$˜Ră!zř3łKX7XlŢ… .˘mŰÖ8qâ”ü׆ "66_}ľ=ztˇi!“žžÉ“§âęŐŤv/§V­Z˜1c:´Z­Í÷łf}†řřtíÚŮćĘvANŸ>ƒ­[ˇŁAƒúďÉ}‘“•ŻeË~@BB"DQēOŽ@›6­‘’’Šďž[†k׎!*j+ěęŐŤçúíŠS§qęÔi˘GGxŹńäń‚ qóć-‚€~ýú iÓ&ˆ‹‹Ăڵ둖–†yó mŰ6ůśÄKIIÁœ9óa0 ŃhđÜsĎ 88ťwďÁţýƒ%KžĹ[o/p˝—,Y*b:wî„ýëy–-"cˆ˛OZôE{ňIrr˛ůŁTbäȧä[’† ŒS§NîßOqşmäNĚ1ĺ€Ü"föěO!I&NŒÄŢ˝űđüóĎâňĺ+xűíw˝z…Ű=ĎO?Ž\ xęŠň÷–`L÷îÝĐ˝{7Čs:–“˛#e$Ű=mćí+H8ş‚ "ôů÷ŕ^ˇ%’˘÷– —jÁ¨÷ÖBœžŇwŹĘŤŞu{qťW ńˇMđí4 W2Ćts]siÎ+öçsň]ÄíZ(Dř÷~Öţmd0ŚÄuƒĹ;ć€ěŘącƒłgĎÁĹEƒ~ýúŕťďžÇîÝ{‘ˆ€€iž˙\˝z:t@ppB—qăĆM9rűö@˙ţýäď‡NÂ0yňDť×9&&Żž:˙}śŘÁÖ1eWž6ʇ€€jđóóGŸ>ZUĽĽĽbÖŹ˙A’$Ü˝Ÿo0fĺʟкuŤc˜żÎ“ǡnÝ‘#GC‡Á /Œ’§oٲĽÔÍĘŇĺŒŮ˝{Ÿ|kőżţő<}´/ E‹ćˆĂšsçą˙AŒý/šuŒ…ĽËÖ­Űąqăćěőoˆ ĆŤ… Ë1Cô*jö]ştĆţýa0°aĂFôë×éééŘşuŔÝÝ­Zľ(đ`đÍ7 ĺqgϞĹĉćŤăĄĄ!X°`˘˘ś`áÂoäiT*%jŐŞ…_ü7nTfŰHĽ“vƒQîÄrěáĺĺ…zőę˘YłŚxö٧‹4żĂ‡Űdąw:–“R ĆdÚ˙řÍÄŁŰI‚W›^pŻŰYq1HüÝ\wčďÝÁí¨EPşy˘ĆcŻÉ…&+á&’˘÷"ń÷m¨>čĺ\óUj4ýtŤÝëzń8Ž,œˆ{ě˛?“ÉGŒ–Ő˙ĽC‡öčĐĄ˝őiLžÓ%%%€ć͛:ßÓ§ĎŕȑŁňďŹë%puu-ŇzşşjKĄNdSVi5pŕ›Ď&“ 111Řźy ŔÇÇőęŐŤ˙ ćqÉóřŘąhyş^˝zbőę58pŕŒaÆ ,ŹCË;~ü¸y#ŠčŃŁťU E@Ϟ=pîÜyH’„żţ:!_ ’÷K˘§OŸÁ×_“}Ěˆ˙ţwjąűĂbŮ"cˆRFŁąHӇ…uŔĉăąrĺj,]ş K—>čóŁUŤ–xńĹÁÓÓłĐůÜž‹sçÎŁaĂ€AĽRBŻĎ˝ĂiŢźęÔŠŘŘX>||đž˙ţ[ťŻuŠdi׍W8VŻ^ƒ)SŚÉßőîmnăëëƒĎ>›Yäy&&&ĘWÓáăăS˘éXNJ1َżƔ ÇŢí"`ŇëpiÁ›0Ś™[֘ YČź}ő'.~˝ŕÓž’˘÷"őüąRY_mÍ&ćƒŰűńe˛ŹˆiVži5cĆl:ô sß ÝşuèQ#ĄŐ>ŔĹÇ'Čˈ‹‹Ë~˝ƒ¸¸;ň4UŤúéĚ_çÉăë×oȁ“•+’§€sçÎᣏ>Á믿jÓÂ&§;wĚeĄZľŞšžÖXłf¨ŐtšűžJKKšß~'oă´i“áááÁşƒˆÁ˘'Ečë0GçOœ8-źXťté2ΜůĄĄ!ÎŁiÓ&8}ú öď?ˆ† Ŕd2á—_~EŁFpňäŠ\ÓwčĐƒL˜0çΝGbâ=”É6RÉŇnäČ' PˆŘłgŻœ1b`âÄ)8{öT*7nŒ˙ű_ -tžŃŃÇŃŞUK˘Ł˙˛yJAqŚc9)E&űŻŘé“́2SV.Í}UÄX¸×keo›ď,ˇ&éîÝŠŰČş˜fΓVFŁgΘűłłnYńÖ[su{óćMŒýoůó’%‹ŕďďÇü­€yœšš./#:ú8Ţ~;-[śŔéÓăÓOg"33‹‹îÝťĺ{aĎň´F&w+:F“k:k‹-Éd’?ďŘącƟȺƒ("“€Č~‹-ĆΝť`4ńÂ Ł°fÍOřţűoŃž};¤¤¤ŕË/âŔÎĂÇÇ5jÔŔĄC‡`4qüř $%%ŁYłŚyNo0葑‘‰sçÎáúő¨]ť–M_ä\”J%ž~ú)|űí7řöŰo0rä“ňM,÷Jëőzœ8qoź1111…ÎóĎ?ŁŃśmk´iÓǎ+ńtT^Ěůoȸ}Rî–)ú{ąňŁŽ~݄żß†sŸŒb˛‘Ý&Ož€×aţüĎŃŹYS$$$âëŻËý™ŃßÇ*ՃM#F CXXh4´mŰŁF™o‘ÎČČŔߟÍwnnć[ł˛rˇŒ´~$ˇe:k&“ žžžr_2QQ[ňźŘHD ĆPe?5*BGbŠŠiŘž}' M›ÖxüńĄpuŐŔ×ד&˝%?˝făƨçc2ÖÉÉ÷qúôš6mZç9ýŇĽË0|ř“˜0a ´ZWźöÚ+EZo>Đ1ĺŽ]‹Á´i˙Ő!Ă1`Ŕc0ŕ1 2ÓŚ˝‹˜˜̜ů ˘˘6`ŐŞĐťw/čőz,Zôm!ĺń'N˘UŤ–hÓŚŽ?‘g“]{§c9)í˝¨ý LU^Ő.žŐŃpę˛\ŤN<ş ąŰż`~R’!5 ŚŹ €ÚŰŻBl#ë'/Ž˘y˝‹Úěßd2–xťYÇ8.­ jŐŞ…)StŇź˙ƒ Eß˙-˘˘6 *jFŽ|Đşu+ůť¨¨ EjĂüuŽ<öö~p‹r:ľm~gÝzŰŇAo^ŞU3ďŻîÜšk|€˜˜ŹŚËťœ|ôŃűřčŁ÷ĄT*!Ić̙‡ôô ÖD ĆŮîĚ앞ž.7ťĚů;…BA0˙RR îěR’Lx䑮€'Náĉ“ ApppžÓ83g~‚ˇßŽ„ŤŤ+ŚL™†K—.—É6RńÓîÚľŒ?~üŽ” IDAT'Nœ´yJB^­`ÜÜÜ0zô €ż˙ţťŔůŽ[ˇZ­+T*5”J\]]ą~ýŚbOÇrRĘÔ*ÝÓVŠß˝ m*uŽiô١#™tY6ßť7hS!ś‘uƒsóńńVŤĹącÇąqăflßžÓŽáűď—‚ƒƒ*]š9˙ąIFŽ…§žzłg˙/×8 ëŰFřŸx¸ó¸qă†ňwgϞł™ţ̙­aüýóoeÝşu+yžűö°:†•°gĎ>9HҲeó\żíׯ‚ƒƒPłfMů6í;wîbńâoYśˆrŕĺ.ŞÜĽŇî^ÚŤVőE@€?bcăđÇ"*j zôčŽôôt,]ş:ТEáOş¨]ťBB‚qřđaÜž+7ÍK@€żüô¤ŰˇcądÉRüţű¨[ˇŽÝŰHe_>-Z ˝^ˆˆŢ=úy¸ššŇŇҰxńRěÚľ‹}‹éÓß7Ÿ\ťťÉÁš‚üřă*čt:<őÔ3ňw+WţˆaÆk:–“RTh܁Lűgďö(~ـÄߡÁ'ŹžÓ$ŸţŚeYȌ˝ú`‚ߏ–ď6Rąëg"Š"ţýďј?˙K|ó͒"ýśV­Zčׯo‰ŇŒJż|iľŽđDž ą˙A¸¸¸Č­oW­Z-OgîOŹlיœ#Ű´iŔŔÜž‹Ÿ~Z OOO4oŢ ýu?ýdžžF¨WŻ.`˙ţƒ˜;wjŐŞ…O>ů...ďUŤV#55 K–,…^ŻCPPöěُsçĚžŽ]ťÂŰŰ;×ú6hĐ@~?bÄ0>|WŻ^ĹΝťĐąc´kזe‹ˆÁ"@ĽRĺj~YĐAěřńăđŢ{ ## ~cóčiŔÜĂü¨QĎŘ5żnÝşaŊ˛ßwÍwşŁGG||<ŇÓÓńË/żÉÁœ˘l#•}ů°\}˛ÄZÁěÚľ;W+˜ĆÚü62rÖŹY‹k×ţ$™›?ńİbOÇrRʁ WO éś]Ójj§ó@$ü˛זL šqŚŹ $Ÿ8hóo—ÁpńĎÝŃłB[ÌTdÜź×ö=ś6ýÚs~{řmŠŘuC~ňę”R’ĚWśsÖ íۡƒ‚‚jŘ5ďęŐńÚkŻäşE0w*ޤIœ;wYYYvÍĎßß͚5-ŃI똲+_Żżţ "#ßFjjvě؅;vٌoѢ ço›5kŠ‘#ŸD```‰×™œ# &LxďźóŇÓÓńĺ— sw´˜0aź\ĎěÝťz˝.\ĕ+WѨQCxxx`ܸ×1cĆldffbŃ"Űŕmpp^zéť)ăÇ˙ož9ƒóç‰ ćĄJw–-"c¨˛SŤŐEšžI“ĆřňËůXťögDG˙…řřx(•JŐ@—.0pŕťçŮ˝{WŹXń4¨€€ddä˝S>yňNž<QQ­ZU<ńÄp„…u(łm¤âĽĽ…‹u Ć"żV03g~Rč|Űľkk×U${§c9)]˘{U‚`÷ÓŞzYq˙ őâqťŚwŻ×Çä9ÎťmâŽĂĹ˙˝\äőöj×Çž@Œ @tŻĘŒ.Ĺ˙KHˆů–ÔéÓ?———͸óçĎĂÍÍ žžć>ââî`ţüňř_~ůľH˲L˙úëŻÚô€ŔŔ¤§g`ٲĺ¸qăfž'@ýű÷CŰśmĘ=ÍXž VŤV-,X0kÖŹĂącÇľÚ!!ÁčŮłúôé Qó Ćä÷ćoĹÍă ęcîÜĎđÓOŤqüř ÜżžžhÝş5žxb<‘łOŸœ?uęÔśiuÝącfÎük׎Ăٳ瑚š ?żjčÜš3†}L>ś)LíÚľ0|řăřńÇUHLLė_.ÄäÉXśˆ`y´CÁß VŸ-ďEŤWË Č”Ůƒ€ €—N§?¤&g•ššZâ+œÎJŁŃŔݝˇ8˘|Lš A0cĆÇĹoˇŢš„óç/8MÆ 1{ö§,'dŒťŁ­c@2pkăB$ţśIn ‘;"¡Ë`“ŤŁ_ “^‡¸mKq/z )‰v-[ĺY>íűÁ/âbá÷á+źĄđŻĎL.Ĺ}‡N§ĂçŸĎÑ#GshýýýđňËcäˆ$Iřâ‹/ągĎžbÝĽT*ŃłgźţzŢżŻ\ůVŽü)ßßť¸¸`ĺĘeů>ţ–u M˜ż<ţd٢‡•Z­ @@Ŕ=ł“Ő Y˝ZŽĐYżGŽ÷ Ć€Á`@RRŇCšm^^^ź×ö!*SŚLĂéÓg œŚYłŚř䓏XNHĘJƒţڟEţ]fě5$ţž ŠçAw/Îźă÷ö‡{ƒśđíĐ/Ď[“MUł-7fr%Űwp_ÄňĹüełlQeÇ` ‘ƒ¤ĽĽ!##ăĄÚ&WW×n´ă{vŕK•REęTœą|°œ8ŸŠÔŠ/;ë­Üuë–/ć/ó˜u‘->M‰¨œ dff"33Ó)×OŁŃ@ŁŃđj,Ëˉ“’˛Ň`Jş Sr,$IrŞu˘gDŻź-Š’Ö ŹcXž˜żĚcÖDyc0†ČYN¨$ :z˝ƒFŁŃá'V‚ @ĄP@ŠTBĽRA­Vóţb––“ŠÂd„)5RF2¤ĚTHúLŔdpX9•TwŽžÝŤ˘‚ySIęÖ1,_Ě_ć1ë"cˆˆˆˆˆˆˆˆœ’#‚1ěŔ—ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆĘŃącŃXž|$I*÷ušuë.\„¤¤$fĚCŽyMDĽ)++ Ýşőđ#G™Dvb0†*Ľľk×!,Ź‹}ľ)k–áΝ;L'9 aa]đĆoć—˜˜ˆŽť",Ź víÚS*˙Ç#G~dž ›Ą×ëśm–Ąw8q2Ž_ż¸té26mڌ۷c ×čŃcđŢ{°ŔÁ´iď ,Ź ćÎý˘ĐicbţAXX>|¤T–}řđüôÓ*ůsQňšçÚľ„…uA§NÝrĘ>‚°°.¸qăFžŸółnÝĎ ë‚çžÍćqc™7FG‡ hÝşŽ\š*§ŐéÓgrMűůçóÖ#FŒ,ľő]ż~8(^°`!† ĆÂK Ć9ŤŮłgŕ믿DdädxzzŕÍ7'bƍL*U˝°téb›ÁÇÇ'×t&“‰‰ĺ$||źqôč¸yóŚÍ÷[ślEŐŞžĽşŹW_‹uëVA­V;dۂƒƒĺr8uj$.]ş‚ńă'Âd2Ą[ˇŽŘşu35jČBPĘîßżC‡~EXX{lŰśÍ!Á7kGŽüŽUŤÖȟ™×ÎiÓŚ(ÔŻ_žžŘž}GŠĚsóć­ kóçĎă…‹Ld7–‰ß~;‚6mZŮěË||źńóĎëmŚÓétŘśmŞUŤZŞË˙ůç8xđ3‚*c¨RkѢ9Z´hŽ=şcúô1hĐ@̛ˇĚWÁßyç]ôęŐáሌœ&ˇhřţűĺčÖ­'233{÷îGXXDEmčőzôčŃ_ý|ăÇÂŘąŻ˘[ˇžxęŠgqćĚßůŽŰśm;đä“Ď [ˇž>ü)lܸÉfüşu?cĈ‘ňř-[śÉăŇÓÓńá‡ÓŃłgúöí/Ż•oo4jÔĐfP*•X°`!FŒ‰šsż@÷î˝°mŰv |őŐ×0`0ÂĂ#đć›äV OĽŁNÚŔúőţw’$aÆÍčÜšłÍ´…ĺIa˙Ç bĐ !ňžŇýá‡Óńüó/ڌ߱c† {˝zőÁš5kqřđ<ńÄÓčÖ­'ŚL™*×ayŃh4r9ěŃă<ýô“¸qăââîäZţíۡ1aÂ$DDôC˙ţƒđńÇ3žžžkžééé=z ž}öÜżŸ(ۡď€(Š?ţ $%%ăŕÁ_lĆ˙óĎ?xĺ•×Ń­[OŒ12×ţáÖ­[˜2e*""úĄgĎLž‰{÷îÉ'7aa]°|ů Œű*şv큧žzVžj˙á‡ÓąjŐjÜž‹°°.ŘťwżM^/Z´ÝşőDZZšźź-[ś!,Ź Ž]‹lÝşO<ń4y$Ď=7šˇ"”ŁŃˆíۡă‘Gş˘sçÎظ1ŞÄóź|ů Ν;‡çž…ęŐŤcăFۖ˜>ýS„‡G "˘6l؈Çóć-§9sćoŒó şwCGয়VɡUfdd`ÖŹ˙aĐ !čŐŤƍ˙Pď“*ëqŁ=ů|řđtěfó]—.]°{÷^›ýÂŽ]{ ×Đşu+›i JťÂŇcȐa¸xń˘\oYˇ*Űž}'| ={F`öěĎyዌ!rVÆ Ezz:ţúë$IÂřńqîÜ̚5ŸţŽ^Áţó& şw:ǎEŽýđűďNœ8‰ŒŒ <ňH7yţkÖüŒŃŁ_Ŕ7ß,„(ŠřŕƒéyŽÇÁƒ‡đţű"<ź–.]Œţýűá“Ofbűö€łgĎaɒĽxúé'ąrĺ2ôéÓ}ô1.^ź˜5ë3ěÚľ‘‘“ńůçŸaďŢ}HNć ’3şqăŇŇŇđĹsŃŠSG̛ˇ6lÄÔŠS°hŃBH’„ąc_•O€ OĽĂ`0˘OŸŢˆŠŠ‚N§“˙Ű7oŢDϞÝmŚ-,OĘâ˙řÇbΜŮ=ú̝űVŽü3f|ŒO?Ž_=Œ5kÖŮ5ŸťwďbϞ}pwwƒŻoîÖZÓŚ˝‹ääűřúëŻ0gÎ˙pćĚßءożÍ4YYYxë­IHKKĂźy˙ƒ‡‡ P6oފŽ; 44Mš4ÁŚM›lzoź1wďĆcîÜ˙aҤˇđý÷Ëm~˙Í7K’’ŠůóçbÁ‚y¸xń2fΜm3Íňĺ?ŕůçGaőęQŻ^L™2 7oŢĸqŻŁGG Š"6mú;w´ůÝŔ`0lňvűöíhŢźjÖ ĹţýđŃGăńÇòeKŃącźůćÄO Šč~ůĺW$&ŢCÝŢWŻ^ĹŠS§K4ĎM›˘ŕăă-š#<ź'vîÜ‰ŹŹ,yügŸÍÁöí;0qâ̝ű98ˆťwďĘăccăđúëoČ-ę^~y ,Xˆü °dÉwŘľkŢ˙],_ţ=Ôj5VŽ\ĹăƇ츱°|žyó&nܸ‘G0ŚA° îlذÝşuRŠ’ż+,í KĹ‹ż†§§ÚľkƒM›~–÷Cqqwpüř_řŕƒ÷0|řăXťvöěŮÇʆŒ!rF–Ű’’’qęÔiœ?ož9­ZľDóćÍ0q⛸víţüóBCC‚#GěLŸ|ň üńǟ$ ż˙ţüýýаayţ=6íÚľEƒő1tč`ÄÄÄČ'zÖÖŹY‹&MšŕĽ—FŁNÚxţůQhŐŞ%ÖŽ5Ÿ`5jÔ[ˇnĆŔ TŞPŁF H’„ŤWŻA§Óa÷î˝1b8z÷GŁF ńîťďŔh42ƒËÉŞUŤmî5Œœ&Óh4˜2e"š6m‚*UŞ`ÓŚÍxá…çĐŠSGÔŠS‘‘“‘ˆß~;ƒÁPŕx*=&“ ƒDrň}ůŔmýú hѢ9‚ƒƒlN˘ ʓ˛ú?>ńÄpaȐÇ`0Ţ5k†˘S§ŽĆ?˙äeúâŋrY8pŽ˙ ~ř~žˇII’„ÔÔ4¤ŚŚ˘fÍPüđĂ÷čß˙Qyź^ŻÇ”)Sƒůó?‡ˇˇ7 OΟż€‹/""˘7 oßŢřăcr-'OžÂ­[ˇäýMŰśm0věżmćńîťď`Á‚y Ş•J?\ştĹfšAƒ!,Ź9ƒťv큇‡üüüáďď???¸¸¸Řü.00íÚľÁśm;ä ÝącÇ1xđ@ć+ę;wĈĂ‚ąc˙ęŐŤŰ\Y§’‹ŠÚ‚:uę víZhßž||źsľd) ˝^;v <<˘(˘oߤ¤¤bďŢýňř;waذÇѡo5jˆwޙfs\˛}ű("ŚNŒZľj˘wďpôë×›6mą Čꐒ’*˜5k&OžŔăƇ𸱠|>|ř‚‚‚dóWWWôęŽŸŢI’péŇeœ:uôđ ÓúÂŇŽ°ôđőő…ŸŸ?üüĚuœ(šOqU*&N|­ZľÄË/§§.^ä­zä<”L˘îލx{{!66PłfMy|:ľqqćqÝşuĹĄCżŕúőë¸{÷.ž{îlܸ —.]ĆŃŁ k׎6ó÷ňň´9 ˇœĚ)•śĹŘŘ;hŢź™ÍwuęÔÁńńń˜9s6ţü3žžž 1ďüŒF#’““Ą×ëQłfˆü[OOO›e“cőéÓĎ<ó´üŮÝÝÍć˝ĺ !)) ™™™˜3g>–-[a3¸¸ŘBÇSé‘$ čĐĄ6oŽBXX{:ô+Ţ~{ŞÍt…ĺIYý]]Íő‡ő§…BĄ€$ĺß [­VcɒEHIIÁ+ŻźŽđđšŽfZź˙ţ;řň˅7Î|u˛]ť6xă˙ 88ä@U@€?1X˝ÚÜWKdäŰEQn&ľ/˝4ZŢ÷„†>('5k†ÚĚcÓŚÍřţűHKKEPPŇŇŇs5ˇ ôˇ9 ŞZŐWžwaŒiÓŢA\\öěŮ WW ÂĂ{fđ.!))>:Pž>1ńBCƒ™šĽ$!!‡ý čÔÉÜ2Âd2!*j Ţ|s´Zm‘çyđŕ/HJJÚ5kąnÝĎV˙ëŃŻ_$%%A§ÓĄNZň8›ú)66))Š0`°MŢ[‚ˇĎ?˙,2331cĆ,Üť—„úőëc̘ó­SxÜX1 Ëçß~;œož2[ślĹ_Ŕž}PŁF ´mŰĆŚO${ŇŽ ôČŻĎ5OO›´Ňjľ0xq’Œ!rJëÖ­‡VŤE˖-pţüŔľk׸zőŔßß|ŔűČ#]ąbĹŘšs7Zľjooo´mŰÂŋńÚk/k=ücóݕ+Wäĺ.^ź—.]ÁĎ?݆——ůŕ×_—w jľWŽ\“{ďŢ=$%%3ƒË‰——7ęŐŤ[čtžžžÇĂsĎ=c3NŤŐBŠT8žJߐ!!2ňmlٲnnZ„‡÷@BB‚ÝyŚP(Šô´4fddĘßĹÇǗę6…††Ęĺńĺ—Ç`áÂE¸pá"ęׯ—kÚ   |đÁ{P*•¸pá""#§aćĚ٘?. $$ďź3Żžú̙3&ŒgĄÉA§ÓáŔƒhŢźŚL™$?yňTDEmÁčŃ/ŔĎŻZv=ŐŤW—ß[Ÿ¨üń źńĆëxňÉ'}ô Ž˙ËfY—/?řMrr2âăěî$ł[ˇ.đňňÄž}űą{÷>DDDČ';ľk×Ćýű)˜;÷3›ßXŠdśn5ˇ2š3ç3řůůeççźóΝؾk7TäyFEEAĄP`ůňďŹƒkąaĂF\ż~ţţţP(¸qăAG劊Š6ˇ§XĘćwß-BĄżŕîîŽ×^{&ŒÇíۡ1kÖgˆŒ|ťwoĎ0ŕqcĹ=n,(ŸM&˘Ł˙°açšnM›6A˝ző°oß8pÆ •ˏ…żż_ĄiGô0âmJTŠ8qRŽÔGFNĂŚM›ńĆŻCŁŃ YłŚ¨WŻţ÷żšˆŽ>ŽăÇ˙Â̙Ÿ!44mŰś‘w0UŤúâÇBç͝;wÂŞUŤáîs˛ü(•Jˆ˘ˆóç/"99?>§OŸÁ˘E‹qńâ%|÷Ý2DGÇ㏵:ŔĎ­[ˇqéŇe̛7_ţ^­VŁwďpŹ]ť;wîĆŮłçđá‡Óö¤*>•J…ÇŠmŰś!:ú/¤¤¤b˖mx饗‘’’Rčx*}]ťvAŐŞžř⋯зoß\˙ŁÂň¤¨˙ÇZľjBE|ůĺWˆŽ>Ž+~Ŕߟ-łí{â‰áđńńƗ_~•kœŃhÄŕÁC9 WŻ^Ëî°S€ťťťŠÍ›ˇâěŮłxěą'˙ÇĂĺ˗ľÉÉ÷qňä)źřâXœ[ťsçŽý/˝4ÚŚÜ˝üňżĄRаqcÔj5ÂĂ{`ŐŞ58xđŽ^˝†?ţTnqýúőVŤĹ‚_áΝť¸qă&&OžŠľkÍ-mŚM{O=ő,Nž<%?!LŤuľ™+ţqcAů|üř_0™LŽűĐĄƒąző$$$ÚÜęjaOÚĆÝÝ /^ĆůóŘI/UlC•Ú„ “Uаa̙óÂÂ:07˙Ÿ3g6ć̙‡I“Ś@’$´k×ăǏ“Żö‚€.]ş`ƍňNľS§ŽřôÓYčׯÍU¤‚ˆ˘ˆ#†cýú Đh4xýőWđß˙žeËV`Ŋ•đ÷÷ǔ)ŃŻ_Ŕ˜1/"!!Żż>žxéĽŃň=ŕđÖ[ă˜1c&ŞTŠ‚1cţ˜>q§"7î5¸şşbŢźů¸?!!!xíľWä+Ľ…§Ň%Š" ˆĹ‹żĹ!ƒ‹•gEů?V­ZS§NĆ×_ƒˇŢš„Ţ˝{!""˘Ě:JŐh4xá…ç0{ö爎>n3NĄP`ćĚO1oŢx鼹P(D„…uŔřńărÍgŔ€ţ8}úo|úéLÔŠS Ôgá‘O˛7Łzőęšn!čÔŠ#||źąiÓftě†Ď?Ÿ…O>™‰ńă' $$Żź2'NTŤV oż=ß~ű֯߀víÚ wďŢrǟŁF=‹;w⯿N" 3f|,÷á0hĐ>|Ż˝6&ŒĎłÎůd<<Ş }űv6Ÿťví"˙nëÖí$ }úDŘĚĎÓÓ]ştÂÖ­[1věK˜4i Ţ{ďC(• źňĘXœ={Nž>00óć}Ž/žřcÇž 77-ÂÂ:`řps+ˆńăÇaîÜů˜2e*RSÓФIc|öŮŹ‡6SY ĘçǏ˘uë–rKşźôéyó cÇđńńÉs{ JťźúÉÉiôčđńÇ3đâ‹c°bĹ÷ŹX¨Běř^°úly/Z˝ZEö ĚÔTźt:={–$"""*:ÝşőÄÔŠ“1hĐ@&IÎ>HúôyC‡Á˜1/1q¨P#FŒÄĐĄƒĺ[(‰jľ* @=Cö`ĚLVƒdőjéÚú=rźŔ–1DDDDD•Ň7ß,ÁŢ˝ű1qâ›đÇ֭ۑœ|ßî[CˆVŻ^ÉD *&cˆˆˆˆˆ*ĄÇ‚ۡoăż˙}ÉÉ÷„wޙ†6mZ3qˆˆĘoS""""""""ĘćˆŰ”ř4%""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""ă™äu IDAT""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆH鈅Ä^ű&Ł‘ŠMDDDDDDDNKT(˛‡c‚ƒŞ’‰šJDDDDDDDÎKpĚ DźM‰ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆˆˆˆˆˆˆČŒ!"""""""r cˆˆˆˆˆˆˆˆˆÁ""""""""b0†ˆ¨$Ib"Q‘0CDT‚ 0ˆˆˆˆˆ¨H”L"""""˘ÂąE,QĽř§;d) Ć•Ó興ČŮĺ×´2ś ľŢoŰłç~ž¨˘V|ŽY ƒ1DDeppfďX~Ó ‚`3.ççž/îˇe^ö./żß”t˝J:ßŇ\{Ňť e”U•´”U™˛w{QŚ‹ł˝Ž(Óe•wŽúŻ9K}ä¨˙Zi–éň¨ěY˙źće śH’T`ŕĺaĘX§‹Éd˛ůž°źĚk4ďn&b0†Á"˘R Ŕä ÂŘwĹŹ ƒlÉŽ Miž´ÚsĹ/ç÷ůýڤëUŇů–ćş”4Ę*JZĘŞLŮť˝Ž(ÓĹYž#ĘtY坣ţkÎR9ężVšeş<ę#{Ö?ŻyYaň ČX‚8k@&çţÝŒ1™$ťö÷ůˈȚĺ</+ Ćó8Ż4I‚Őű˛mÂ\Ú-ŹŞ ›oÎi {-î:”džĽľNĽ‘îeľe‘.ewÎVyËtIćW™ËtqÖą´Ëki–éœÁAäďA€( •"¨` ÄXöń–Œů˝ &Éţ}=U°`Œ¨`0†ˆČ™Î 2ň+$›é‰ˆˆ*"Q! ˘”1™›@Ž(ŠňűŠ ÉyK’$I0M00šŒ00™¤ěW÷ńDm˝Ç` ‘Ó¤Y_%“$Čd&É$_-3mŻ–ń@ˆˆ*îI‰(ˇˆEQΈ˘…BI2ĘA™‡ĽľŒÜúĹ$AŻ×Ă`4Ŕ`0Â`4ďűMä}˝őSW$ÉÜ'̃WKËŁœßçÝwŒőáB^Ó[ĆçümÎĂ Ëxëő„|—ß|óZ'{Çç\炶ɞ×Âć›ßřœărĘoźŁÖаüËů}^ËÎoźőňěYw{׍ ßVf‹“VymS~e2żß5JŢŚDDä˜ź‚1FcvŕĹd„Á`>Hłźéő†2ë#€ˆˆČ‘,…BQ T*ĄPX1 Eö Ižž"er^p1MĐôĐéôČĘŇÁ.ZO¨5ZBž'vö§iÁ'˜Ĺ™OqćQż/(ĐQ”u(îoK˛ě’ÎŁ4ňŻ$éç ů˙°–?GŐa ĆŮq€Ř6Y6 0 Đë ĐéôĐLPšh (\ &ä솽ŕŽ-{ÁęłPč8ű;M,h~v§BżÉoţŠ×˝”} +eďh…|Ö!˙ůžŢB!énĎ| [§œiŤíŠ‘îśó3ŔEĚŤ‚ŇJ*0-Š6G”iäł,ű:-<ďŹË`é”é˘ý— .×y˙Žđ2]´´Í?ďr˙?Q†eşheđÁ|¤ŚEQŇV*Ăt/n=-˜EIoQ4XŒF=˛Ňł RŠPŠ”0ŠLPš”P*•D&ˆ˘čđšŇŢç›L ó>>##P¨ŕăQáQ!ň" 1CDTÖd9Ÿ¤` Äč zčődfé (Ôđ „ÚĹ‚|ď|IOŢJe ň=A-ŮÉIé­[ÎN$Ë+Ÿmץ<ÓV'“N–lƒ9ƒČă$ލßĺ?Ϝĺ9ďćőË´ÍIťsˇ%8ó ‘3ŹÓ§xËf}TŔú)Dh´UP­ş+âŽ#++Uî+FĽTe×R… ÄŘޢôŕvdƒŃ›'J9CDTZŒ!"˛ó@íA1Fčtz@Tg7[VŮœÄ źdFĹ`4ł›Ĺë+TxK FŠTf÷%Qœ–­nôF ŠY F ZŽ*˘ đJ4‘Jřúăî­+ČĘŇe÷'cîÔ×d’ä€L…ÝßKćV°D¸h´DV@DTúŒ!"˛çŔĚdŐtŮ`€Ţ`DŐęš1DĹa2™™™‰ŹŹ,˜Lڊyr&ŠpqqVŤ-úI˜dž Bg0áĎ=ţŒÉBşÎ„OşÔŃ v5%ŒĆ•űžĐňߢB O_Äßş˝^oîÔWTTČۓňŞ“-aPH‹˜´´4ÄĹĹĄf͚6ýĺ9w—™™ ]–’$ĄŠGšSn˝^掻•*%á⢍&Ł pѸČzSń0CDT„ƒ3s§~F¨\\ĄRť2Q¨T deeUčN!M&˛˛˛ RŠ VŤ‹öcA‚Ţ !úşˏŚÁÍE@€‡OdâĆ=F…ięŤbA!*C–Űtôz= L&sgź–VoyTj ”j FóSŚ ČŤŸ8ëĎyMŻÓéË—/#$$„ÁŞ@űl#n\ż‰ľk×B­VcôčŃĐjľ0¸qăţůç´k×Z­;wîBÝşu‘––†Ö­[#==ŃŃŃhööŢěIŽëž÷üœsrŠ­÷F/@ŁMp§D˘D‰Z,YeZ˛hËö˝Łšz˜˜ëˆyđźÎÓüq}ďÓ8ěq„^Y–­…&EҒ¸I$A7lĽŃŢťkÍĚsć!ŤŞŤFƒŘß'"ťŞł2ł˛NžĚüoţ–ýűŠEUśoß&^áŸcA6hœ9\ói™6iŽšůWŁĹqźŽŃiSę5ł2d§Qvśń4ş1ľöÍŐ9]Zëĺ{ilkŁŒ´´{„ďűÍďÝČůĽŤpđtĉé˜l yp$¤[Ţ=Sĺýs>[ťLs_[Űęf+ŁŰ¸F´śs#|c­ĺű˙I~C뱖k‘\Gšç…ÇĘóc#ç°ľ–RŠDE+<ô´ÖřžO.—[†˜n[Ł­EÍűäBEźú꫌ńőŻ]„ác,ó ólŢź™caa‘ƒ255…çyŒ111Áž}űpÎ133ĂÁƒ9zô(wß}7KKK<÷Üsd˛!ň'L>Ÿ—űˆ1‚ W׸]Ëصւu ¸ĺ]ą…›k ľäŻ˙ßż!—ËńÇň,‡biąČ—žüE6oÄó<’$ĄZ­R­V›Oł‚ hžo„ŰYkI’c Aƒ¨FŘT&“Ůđ@c-1h˝ÁLExžGœh˘$M^ĹĽ°JՈJĹ!ZkΜ9COOOsßżíf8ŽĽR‰ý×套^B)ĹžđžřĹ/ŇŮŮšbšršLľZ%‚ Ŕ÷ýËž–4<Â0ü„šz„Űi`U*•¨Ő"l˛,ô/ ĚfłëžĂËë×ÖüŹVKC …Bs;Î-ß/ćUr;ߝsüöˇżĺĄ‡" Cé„­wÝHŚŚŚřřăxřáGxçwxóÍ7ůÁ~Ŕɓ'Ů´i‡âȑ#<ţřăřžçyüâż@kÍŢ˝{)•‹7Í=XÄA„;@˜ŮČŔYŽ6ŻţúuΞÇó<^{őu˘(âľ×^g||œ˙ýżţottt033ĂsĎ=ÇŮłgiooçŔźńĆüŕ? \.“$ arđŕAjľJ)Nœ8Á׿ţu2™LsŕeŒ!Š"ţéŸţ‰;wr÷ÝwÓŃŃAWmpŐđú‹żř žň寰gß~zTHw&¤ż3ŕätLOŢ0ŘŽů荟cNeřňWž„ďűüěg?góćANž<Éמö5zzzPJ5äď"ŇŇŇƤž5ŮlśůÝů|ţŞ>ÍvÎńӟţ”cǎń—ů—TŤU~ň“ŸđÎ;ďđřă7 օ…~ôŁńîťďŇŐŐĹ÷ż˙}ÚÚښâL†ÍBŮlkÓd˘žď7˝˛Ů,/žř"Ĺb‘ÇœŢŢ^Â0qřćĹ_äĺ—_!‰šĚ<_óŐŻ~•/|á ëŽŰö a§ŚŚČçó‹Ĺfßj$_-<ŹőŕâN@)ĹSO=śožÉÝwßM>Ÿ—N(ÜRý7B|ßÇCš\Âóźf˜ńŔŔ[ˇnerr˛žl@ĽRářńătwwSŠTŘźy3ǎ•Ć1FAnovíÚÉącÇń}Ÿ;w019Éčč>>őŠGČd2MŻ­BĄŔg?űYöěŮĂůóçI’„šš9>üđCڧ§Ůąc/żü2Q1::ĘŘŘ?ýéOŮącžďł°°Ŕ–-[8yň$łł3|řaÂńăÇ偸ŞqS,–8uú ?ýŮó|ţ‹_á‘î휩ő2[ĘsßVŸ/î 9ô+¨ÖjÍźMJAĽRallŒçŸžÁÁAxóÍßp÷Ý{0ĆpćĚÚÚÚŘ˝{7?ţńŮ˝{7Ĺb‘ŃŃQڧ§8pŕŔU-xűíˇůţ÷żĎĐĐÖZxŕΟ?OąX¤˝˝çóóóĚÎÎr˙ý÷“ÉdXXXŕwżűlÚ´‰˝{÷rřđaćććčěě$ CN:ĹΝ;9qâžç100Ŕââbó¸îßżŸČĘ;x`ő裏˛gĎŹ]CŒŃMąňRçb#tnaaçžűŸtt´ł°°Ŕˇżýmúűű›Ë]Ě dĽgĚíßćžď3::Šľ–—^z‰oűŰŞ$Ü2cŘśm„8~ k-aňĚ3ĎđĚ3Ď077Çđđ0ÝÝÝär9îż˙~zzzŔZ˖-[˜žžŚżżŸŽîNy@)bŒ ÂľCî1ÂÍŔć-›ÚBŒlapófîeëđp3G‹sŽjľÚ°çóyŹľ,,,pôčQΝ;GŠT˘ŁŁƒ$IČfłd2|ßçđáĂô÷÷sţüy˛Ů,cccÔjAĐÖÖĆË/żĚƒ>x•OŽĺ°Š¨Q).0Ř~’.}–'<ĹŚÎ Y_q¸YÉ,Aë„÷ć‘GÁ3>m…vţýß_ŕŤ_ý*§ĆNqŕŃ>r˜S§NqüŘqţËäĉ“<ő…/räČŽyŸˇŢz‹?ýޟ˘ŐŐ8ĺr9&''¤VŤ1;;{AΎBĄŔŢ˝{ăôéÓôőőńŁýˆÁÁAΟ?O!_ŕđ{G°ÎńÖoßćž{îĄR­˛´Xä݃żăŰßţ6ľ¨N‘Ëĺ üW^ů%ĺf||œ>řgÓĚ-i5Řď~zzz.qŸ[RÂ0¤§§›_|‘Ď}îsMŻ9ń ]‰R ß÷Ůťw/›7o!F¸ĺúo[{÷ݡëFktýaK咽f.ş\. „ž.”Ö( Łł˝žíÍí "Ć‚ ÂmÉá÷säČ´ÖěŢ˝›ÁÁAĆÇϑÍćČĺśŇd2úűűŮľk333”J%Ξ=Ëôô4žçELNžÇ9Goo/###:tĎó8yň$Zk*• JAŠTÄZŰ|ޞ9ˆBŁP e†Îś_`v&WŠTąÖŃŮŃĹČČ6<Ďç˙ńŠU#FFśĄW9áčSO=ĹřCN:EĽRáľ×^ăÉ'Ÿ\Ṳ´´Äää$š\Ž“'O˛}űözööv&&&™Ÿ_ ťť›Z-"I,ýƒlŮ2DľZc~~……@ąyó6męĺÔŠÓr’Üá ÓŮم[ν‹6ĐŃŃąĄYƒRŠÄää$O=őMWEŻM6›%›•ęŠÂ­'ĆxžďBo×ĽŞĽlľˆ1‚ ‚p§łT,˛´TŹç@)R,™›ŁX,‚shm( ŒŽŽ˛iÓ&úúúčîîćŃGeÓŚM<řŕƒXkéééĄŻŻƒŇŰŰKoo/Üu×]Íź2…Bb1MĚ733מôĽŤţ›´ŃÍőF’၁Â0drr˛™ƒa÷V+œ9s†ŢŢ^ž|ňIFFFšŐ{ě12™ A000Ŕý÷ßOąXdhhˆÁÁÁfâÁĄĄ-8çxâ‰'ŇÜ2×Ŕ¸}ŕčďďç˝÷Ţ#—ËńÝď~—7Ţxƒßýîw<üđĂh­éďďg˙ţý|üńÇ|ë[ß⡇âîťďćčŃŁlŰśţžŒńhkkcŰśm R(ŘącĎ>ű,ЎLĽBœD yœEžĚßÁ8çx饗xá…HâĺJJÚŔÓO?ÍżřĹu…Ďó0Ć`­Ľťť›ď}ď{„aH­VŁ­­-=_ëU•A„Ťd7l`žjůżń^ˇź6&SŸźú>ĐéJç_[!Ó ‚ Ü4âç“$­:Ĺ•J•RЌňômَÖFž W<ˆ*•J”Ëĺu—;řÎA~ýë×ŃZń{ż÷e:::Y\\¤łł‹\>MTťşäsŁ7ĘÔŽŐW×*‹˝z˙ybËŽG&“!—Ë]ň)zRUăg?ű9ýLOOłeËúűű™žžŚŻŻžŢ´ŇÄqL’ÄÍrňJĽáƒŤË:7ŇߜÔç§Ë'‰ĺůçŸçđáĂüٟý˝˝˝éSAĺŽÉľ#Žă澝>}š8Ž›0–*O’dEűˇp`EĄV”/O’¤y,Ň㕀r( ڈç|żŞVŤÄq‚M×ĐZáůŢ%“;[k)‹ÍŞI ę <[“^§yŞ"&ϜŔEe˛Ů ařĆŒŃşfÜ,×áĆľ2ŽjQRŠL-ś´÷ ‘+´ĄľT,„;‰ đ怨q}Ję“m™\Ëkă"ÚúÖpĹ1FAÄáĘĺ2ĽRiÝĺĺ¨üVĄAĄšwęFXZń˙ú\(\|šK}Ţc6˛|ăkÝçVaĽńţrĘäŽ÷[ZĹŚk9HźXu™ŐżérhăÖm­Ţ†\‹îěëHëÔÚVç,ZďSŠT¨Ő“e7śÓđˆÉfł+x‹#‚ˆ1W&ĆH˜’ ‚ Ü`<Ďkzt\ŒtpséÁŔęĎFBWcŔÔư‘ím4ŹćrsU\lŮë5(ÜČ1ř¤ű˛z-ŸäYKŒ0ƐËĺđ}Ÿ(ŠšbŒçyřž/ap‚ WŰţ“&A„;ˆň<L&CĽRYWšŮG†xž'" ܂ç/¤i+rĂČů,‚pm1FAn §ĎŮlśYíčrÂrn†ý×Z_đôüVŮAVžĎ Œ Âő@ÄAA¸´&Ţő}˙–ŤV˛V>Ě ‚ ‚ Źˆ1‚ ‚pYďIôzI^o6ąŁ5ĄŹ1‚ ‚ ë#bŒ ‚ ܤÜ*˘Fk$AAáŇHZtAA>1"Ŕ‚ ‚ \>"Ć‚ ‚ ‚ ‚ \GDŒAáŞ!ž2‚ ‚ —FrĆ‚ ‚pŐX/é° ˇSSSchkËIc‚ |BDŒAAaĂDQD’$8—•ĆAř„H˜’ ‚ ‚ ‚ ÂuD…Źćr]SœsŸX<‰K%˛œ›pÖŃUđčĚyx&ío"Ęw""Ć‚ \›×ᒄd~žđܸ1wĘq—&áfEĹĄœCŸ;G2?ééA#ăŰÉöppfŚĘ˙|§Ěą)Kŕ9~4äÓŰł žŃhqƤňL-śř°Ž¨M°IšŰÎřʤ“gցSŕiE’¤ůš| @J)< Ő(fąbůĺ‡%~uސ3ăE綅̗bNÎ8Ř2>WćÜBĚ›}ĆĎ̲8vŽ źH[băaňyŠí˝ôvł­?Ëťg"úŰ›ÚŢ9Ue{ˇŚőxkŹĘŢ~ƒďi~;ޘ;ąc K”Ŕ/Őxt¤Äž­m}é!ŠskíŠ>ęœCk1fÍĺ“Öş)0ŽŢ¤^9şîÖş^ë|A¸ˆ#‚p=q’#FA¸ŮîMN„˜Űî.Ď$Žp֐$kÓ°é¨GXCľZ!ށK4ĹŮYć?:ÇŠˇĎ`§ć‰ŹfIÔLḦ́D&Âúe’b‰žÂVĘĽ*6ëăŹ&ŞVq‰!‰Q­†KЕ÷j/ĄŚŘ<ö;‚ŁÇ°1D: Ö!5OQQ†šö¨Z$֔Î,Q ćŘżŤž,ŮĐă3weń}Ď(žÜ AŕM{J‘f|~žwĎąVqOoĚPOO]DIŤ;­GEźđ‹źô‹—PZ“ÍfÁÁמö5úűúĐZăHCŤ–řŤżúŒîŰÇ7žůtŕëyÄq‡~Äöí1ĺr…úÇâĎ˙Ó"fÉd3X똝™ăý÷?`dxłłó9r„ťîÚĹ˝÷îÇó<ń–Ž"Ć‚ ‚ ‚ ÜŚěěĎňgZ>>=C_WžĄžůŒ‡Ö8pqLś˛ČŇK˙ÇÇČڀ’—%ҊDy$Ę#Ö5íĽŢ1Ú'ś§•XPYžîRhĽhËgšßŮ^ČÖß): Y Öň‡t˛÷Ä4ÎZśoî˘#ďŁŐ˛R ĽÔš^ZI’P)WŠŐbž÷˝?aűöm(Ľčěěä7żů-qłgĎĆĆNqţü$[ślĄ¸Tb~~ˇßz‡ đŮ7:ŠB12źöśŞ•‹‹KĚĎÍó˙ńKśmŰĆĐĐš|žťvíŚRŠňŇOÎ믿ƽ÷î§ťť‹ááac„Ť†ˆ1‚ ‚ ‚ ˇÎ9’$!ŽkTbˑůş:"’¨DąXF) qŒž&úŮżÁŮI°Îř8ŔĄpJa•&Q†XyDʧŞŞ* ě<^ü0Ą”,ň­{= Ąc9oŤˇ‹‰uœ)†DVąĂՈ"ŁĂ9_Ö—sDQ“'ORŤŐČĺ˛d2Yřëżţkžxâ Ţ}÷]î˝÷^śnÝJľZĺľ×^㭡ޢR­ňЃňo|ƒ_üâÜ}÷݌ŒŒP,ů›żů´V”Ëž~úiňůó™ĎđGßý.ů|žçžűašC'ŽÉfł<đŔd2Yîťď>öěŮłf˛`Ař¤ˆgŒ ‚ ‚ ÂmFÇ‹K8hÇ`Á˜Ô[ĹY‡ŞUČţ ţŃ÷qą‡2ĽÓ<3 ęţ-.eŹR$ZkŞóŠY¨Ô?űHh͗ďŠČ7ćƒ>ŔZťâ;<Ďgűöí ŃÖÖÎŮłă$őDĂAĐÝÝM„ä ršœ„( WcA᪣–mGç.´HoĆ=VJ› \ăkŠQĽ \sśîé2S6üljĂúňĎĹdÎ~Dfě0ĘVŃ4E‚vvŤH'C;‡rŕ”BG]U Ő~ň‘Ą’ŔˇöEdý֐Ľëŕ­s>ŐXq`kß@œDX㜾ä}Č9¨ŐŞüć7żalě$÷ÜłŸ0 yńĹ_p×]w1;;Ë /źŔččhë Žšţr=÷”RŠČO~ňSúűű8}ú;věŔó<”Jď‹a’$1G?>ĘŘŘ[ˇn%éZÂUAÄAA¸šŚoŞŔԇ[Ž9ěşŮĽke€(WĘZçůrľ˜ăBA¸F÷ ×|mÍżŇZ WčĘ:4WÉ}SÇŠíŒK0¸ôľů‚ç @gg'ç˝g/Oó›źüĘ+|đáűÜ˝wÝ=ôôvS(čéíbűöz{{čî餯˝˝=ô÷022ĚGČ}÷ßË7żůMڧ§číífÓŚFFFx睘˜œdrr’ááaédÂ5˝gŹžŻZţoź×-ŻÉÔ'Ż>€tşŇů×ŘŔI&‚ps Nm=ů%I˘8˘RŠR*•ŃAžž-ŰŃÚlČŁŔ9G\ŠPýŕ} ÷˙Ą*iŕŰVˆIˇĽĹ ţ¤Ű“&„[ĺěoFX¨şŮœÍŞ.žÔç*uˇŔMą÷Ů,‹Ďţ1™=wăe2—źŻŁľŚťťƒŠń1\T&›Í†`ŒÁÖú–đşkäWą6 ŠE5JĽ2ľŘŇŢ3DŽĐVŁšuÄk-Őj…ééI–(Ĺš˘8BW#?ůŻ?ÓU’%ERö)ë,E?OÉËSôó˝ÖŚóŒ1dłi‚`k-AÉd$oĚBxs@Ԁ¸>%őÉśLŽĺŐľ˜qn=łN%§ůńŸĽŞâî‰ýTąMŚaJ WĚĆĂx=Ď#Ÿ÷Čç˛+ÖXë<ĘçóĚ Ă\.ˇRěq­ů_ěšn J)ÚŰŰWü/W cAáŠ` GZÂ:G‚%vŽ(IęOIÓ;tu…ŠK›Ą ÄEFnľA°RčşŕbœÂ<­0ZĄĐhĘŠ›?~Q¸uűŕŠ; tf-_ÜU"çCPš#¨M <‡ó ]ą˜8ĆKb<፞öńm•81„JcŃŘXÁtLrZÓŽTŚ.úÚ)”s”‚€*Š_ž4~owDG& YÚߥpő0%…rju—uÎ+š‚ç'=/WÎpkśŘ%ׄŤ„ˆ1‚ ‚p…Żs8Kâ,U Ş nËÁΘB[*ş4lšúÓóey=ŇЇeÓłáasąŠŤçŻ•ąfŁëގěŐ\÷bűy9ßw=żë2žŻĺX_~ű’c×úů•üÎkݞŹń]i—‹ œntŸ^{~ĎŻ°‹‹TŽ~Œ'Lœąx¤ 3´¨1Â5Ĺ­¸kŠŒ:YÄŘE”— |P8|›ťßÖ𭇟xڐX$ŃX ŽcOX2 !.ČŐ3şî…ŁRQĘxŤšŸä‘ ŕ‰‘ˆÎŹŁ+ŹSäü¤š{ňźA1FA„Ë7uëIgŠ9Kفžw?_˙&^gx~*Ś(ˇœTŚąîĆaâs †%­"ÉjÁär˙_C€‘§¨´tą(Ś63ĹÂżü Ľß˝GŢZ”†şďŒ„+ ׅůŠć×cŠĐacĐ*p¨ŔĄHBQ‚ŐŹGl=ëaƒU&­§TM¨.cć=BݖFöXWcş.ʀCŤ,%Ľ(:ĹßóŠĹđôh#SľDńřpB ]ęYzƒÎ×ř#Nj BÄAA¸"cÎ5óÄDh’-Ct?ýx=˝`Œ Ěo0śžĚ1Ž"Ź˝°˜€sňOÚřź> 7ZaŚ}@Š Ä8ávźV‡iv…ö|ÍtţÁr~z–ęéÓÔ˘ü1N„<áҕKřý=%ăpĹSBÍ8|•Ç™œM'lžT/&ŁHC•´m„,9*aHľć(Ő !Mš;ؖp9WÚÄÁ[§"zňšŽŹŚ–XÚ=–jŽB Kh4ÖA.PŤĐ–QXóeKgN‘ R˜Jäxţýż9Q#ąŽ™’âô\Â> šk“ް¤růĂĽ$aDŒAa㶕ru1ŹVx˝ÝŠÓBľZebb‚ááa´ÖŇn×qÝŻçu0==ÍŠS§H’„ŽŽvîÜI’$TŤUŒIKŸćóů —ąoĐ(•ťŢ˛gΜáwŢáӟţ4}}}c(•JĚĎĎÓŢގsŽśś69˜7rÇ=z”Z­†sŽÎÎN‚ Ů'BLš\n.§”j–Âő=e|Lw5>ÉwÍŢ"ÇמŚá๐\P%›+PÜô8ŮŏQŃ<*v$¨HŁ…‰ARĽV‹¨LĚQ[ŔV<Œ.ŕLŒuiiiĺL]XtmA§Ž_ŠHc-~ʈ8žŕ‘8ĹŚ|‚Öé9°Q "ôRѤTłtdĎD´eLXśőhŽOĹôˇćJŠÔ9[n8$:Žˇ<śÓGkÇŮů„Łçc*1ä|Ĺ]›<Ţ>sf.a×&u-ĎɋňĘ]đ @1FA„u­ŞĺušNÄ4--k-Őj•ŠŠ)^ýuÚŰŰÉçó„a(Mw„˜Ő&M›ˇe]­V9yň$ (Ľ˜Ľłł“Z­ĆĄC‡čîîĆZKWWJ)2™LӋfóćÍdłŮ5ˇ˝Z˜Yk˙Ęĺ2‡ćď˙ţďéčč ­­|žŔ[o˝Ĺââ"]]]ĚḚ̌gĎ´Ö”Ëe‚ –––Ð8ŽéěědÓŚMkzkWŽľ–ůůyŠĹbÓ3fÓŚM,EľZ?ţ˜ršŒçyěÝťĎóđŒhP:ő5á:ӝůý=qZĹHŞŮ-œů#ÚÇ~ˆoOŁŹOb"[Ľć–ćËĚĎ,P›ŃNă'ĘŚž0‡FĄë‚bł„śsMQfľçLG’Ą=cx¤PĂhšŐ”6Ś”Ş*ŽOo řŐÇU|m˜XpléĐź?žĐ›W̗#ݐX81cęĎ> í]ĎÓFYŒvtdك†#ç’t?”Â][)f]íUŽß"Ć‚ ‚đ $™ĺiy•$ 'OžäŕÁƒ:tˆl6Ë˝÷ŢËśmۤюś}Ť–¸†řŹíţíęůd˘(bhhˆ ˜ššbjj ­5“““?~œööv&''éíí% CΟ?OĄPŕ›ßü&Ůlö‹EgϞĺÔŠSTŤUN:Ĺđđ0;väŃZsţüyfff˜™™Ą\ŽPŠ”I’„l6ËÄÄI’4­[ˇŇÝÝ-^W×ęüvŽééi–––pΆáаˇĆ2I’`­%IţůŸ˙™ĎţóŠ×œ­{fáhsˆ#\oŞąć؏ǜΈBNűDůíĚm~‚0ů;´>E˘b"SIjžEeÁ^bp.AU.NŕPŘşłÜł•réüşŁz´!hĆ ą…‘Îď2ç­čÍňfßfkatPąTuܝŧ;Ż)„0St ´kz 'ŽÎœfŠjiËčf¤č@ťf×&wOW9|.&N`¨Ócs‡?5AÄAA¸•E™ćMÖóŘšs'íííDQÄç?˙y2™Œ4ÔufVŠ2kçÎUJQ(PJ155EWWccc<ůä“,--ąwď^Ξ=K&“ÁC?ZkœsdłŮ溟tűűűikk㊧ž˘łł“žžžŚ7UEtuu‘ÉdčëŰÄšsçXZZb÷îݜ9s†]ťv‘Éd(—ËÄq,ý 1J)<Ď#œsřžÁqWJ5=“˘(â™gž!Š"´%áĆSŠ4O{ôćbržĂ(…ÓYâŽIL˙č˙…ł3$Ö˘ŹÂ$>ƒS§h‹šĘ¤×U…kzŹhgAY픳i…%…‚bď– FĂř’Ą+†:bŒÚxˆ’oťú|Œ†˝Ö-ËěŞqGąšÓĄ•˘+—Š/FA”Œ^Nە 4_ŢŇÂťgbú šOďđŮÚĽë~1W)ď: 7’}ËľAÄAAŽ‚łÖ€Ű÷}şşşxä‘G6œwD¸ňÁójaćb‚ˆçyěßżŸcǎ177ÇOžŸ–ˇwˇ‘?Lw‹ŃKÔźQÂ)@gq…Qâí˙'ćÔèPZ§ĺ׾C)zť(ƒRQZş*˛(› \‚‘VRj„(.ýăím>[ˇřhĺxh°–Š$ZĽáM>SaE‘ŽŤW­ëęŠIU˘ôľž^°ęK´†|hřÜî,ŸŮ•.ăkĐZ­[I ÇĆJŃ_Bąq¸? "Ć‚ ‚pČd2ěŢ˝[ Żk,ÂŹ6naJ­!Lk‘Ďçšçž{Z uÝ„Ż%đlDčil§áIłÖňZkşşşřÖˇžľb_Ă0löWç i|~šű"\ąěy 7A#lu›cČĺrÔj5Źľčzyó4_Ě#ą[y`ßÝ]ÁŻŹ[…RMsäźĎîŢíĄ[”!iśü/űWh5†§âş cŇtGŞ.D(P @ÉBbë2Ł—ÔËş7ňŤ˘‡ŻŁö“oÓŕŕĜGdawO„w™—-ľJœšŕ3ľöÂk-k˜+ف+X~EkŐz]بÚ#ˆ#‚ ÂĆě11ŽŽ› łş­=Ď#“ÉEŃuKšÚU‚ ¸¤ÇĘZy^.VÎZúэccůxRo)Ďóš}QĽąˇ]’Őâu ÜÔÍTQ3ŇŠp᪊4˜3}…uoĽő×´"]ž˝Zř%–Ú÷aËăÄŐ%l˘ˆmöâĺ{éÉç 3™aI+´SEĹ{ăŠFёŃěęś4łÔ^Ę.‰b¨Tq.-Šu¸éEěŰÇpóĽÔCG)ěŘáwŁ TŞšÂěތ[,cĎLهząă3i˜S%B>zŰ&⷏Łrfç nĄDrv˝Š<YJ÷áĚ ŢWîG˛Í]vq‚ŤĹ(ߐX˜):lŇę˙Ś(Ő÷ ůlîô8ż˜pä\„u…aژđŤŁUœsd<ĹRĹr~)as‡Ć7ŠlTŠAbŠ˙/ˆ#‚ ÜÎJ Î9˘Z ;5 Ĺ2ju¸PëëM°żËáJ•XÜô<ĺlˆßՉ2Śń‘¤ŔAîŹ[:đÁ”ćß>ĚЖóůÍxB”TůĘî„(Qäü´ uŠŚČç•H‘ ,Ö)Ş1ä|EMľQ w“Ém%ŠZ Y_QsĆóĐžf!Ňx ĆQŠ4žvĆQŒ4‹řńűĹ$Ŕß˝ń_łôlt4ęRFŐC¨•V¨ś,Şť ˇTkQyĚ˝#Š0c>şż“řđiô@ŽŁ{;ps%¨F˜Řó ¸š*ą(ß'9|”ĂŰÖO|řô´avôCš–&ë ź m‰ş â€Zâ6üsâÄňޙ˜ž|xŢŃjJak‚™ĺc(>u"Ć‚ wˆá†ƒjš†­F˜ŐyY|• ! Á˜ Eg/T=ZóȬ梟9Ňr Ť?kQUŹĹ-.AĽ˛l 9PIB2_ÄvśƒÓőoJ´AáÎA)Š#”fKWH #ŚK5Î-NÎú<2TfĄŞ91ës˙`…óEĂdŃăށ cs†b¤Ýql.Ŕ(ŘŐíqlĆŁ#ăȅ N ľÇhcyw"`wOLč9޸ˇ?˘ĂoĎúteÎ,hö{TcĹábÂBUѓßŕYkđ .NŇęM¤bŒ÷ĐNbŁq %ĚţĚöţÔFP. CŇ:őpq¤áE3‹ÍMÚĽşíŕ›ÔSŚTEőśAšŠ]BwĺqžĄŸć„qsÍbHiűÖ'­›ćLÖW,TVŞ'ą…só–šrD9rDIZEɢčmӜsh•Ś÷}Eŕą"§ĎF’. "Ć‚ ˇ‘$Ł­˝0ŽçĄˇŕýçďĄďŮŢeŢFV?đšđĐeí#Ľ2ńßýÉóżŔ--AŇx~äę>r$/ťUëÖęfŢxď¤AAnrý%-݌RXIbŮŐ ',ÇĎW™\Hxpś´Çôb˛ž%ç[ş2 ß1ÔŃWH•í]1ąUžcwO„uŕÇh_ŒRŠĚ˝5ŒrřŹá‡QđŠÍUB/}`ŤcĄ}ĹŃÉt›6q‚ú˝|ˇĺ\&DUpI*śÚҍßSŔ.UНůÔsĽn`¨Bśőa¨ĐOc}âŐ×AňţhϢˇtƒÖ¨ĐÇěقęʧůc˘$MŹUşŽľ˜Ý[PĆÔKr×ËR{xižŁ ;Ż9żdIZŘńţDĚžAĂŠYKhJ)|ُokŔţ!˜/[˛~*ÜŔrb€l 0k-bŒ ‚přč;đţä;˜ďßżąĄJCźď}2’ýˇ¸¸QťNh_lŁ* ľž ŢżńšÖZLáĄVŤr~jŠ]]Ý<łĎňŢdĚž8°5"ď/çS¤ÂJăĘÖßűžŤkĎsMżTĎŻżW÷]sů !ćC›^~ߎ˛žâG#Ţ”ˆň4tćšŢąő›*ą˜=›Ą#ň X‡Ů?‚ę)ŕ<ƒ W`S˙ƒƒ[ĐÚ[Q¨ńbz‘# ÝqÚ ˛:-&°˝P×⌮—äžŘˇ+­ńôÖú=î’{֚´7őF•>};"bŒ ‚pIX‹‹ă´˘Ŕ&ŮĺWc]ľržľ$X+áI—‹Öß÷ńƒĎóXZZ˘łł“ršĚĚĚ4CCCřžĎŘŠ1ĆĆĆXZZ ­­|žŔ+ŻźÂg?űYÂ0”Ć„‹ŕű> GUšB¸N(Ľ0ĆMu>n IDATP(ŢF_˙ q_DźX.Í|šu›ö@Ťă†ťPťh|ŽĽ4Ć3äry<ĎCëeig=ϝćRjĽ róƒ‹í˘şěc)ܞˆ#‚ Źoh9GGLž:ËôŰďÖ˝eTÓk}ĄšąňłľÖ[˨S-ĎěÖچ[áćŤPÎâU*ôMMÓ#‡l…AŰŹŹÁ…’ó}ßcǎmÚr<ţ™üň?~IĄ­Ŕ§>ý:ÄŤŻţŠí;Fزe(ŽŃŮŐNWw{×_ÝťwKƒ WÔW×ę›”ÝjĽ~ŕy†j3…ÇÂőé{J)ÂL†ŕ‚yëův˝ÎąÖÜcRŹO¸1FAXĂBŞż¸Ô@ŤUküô'?㥗^YSrŠ›r-˙ť |vŠe×űŽ•ŸiçČYËłĺ2ŸwŢڋÖ˟A&“áé§ż‰çů´ˇˇ322’ žÇŽ]ťH’k-žçńčGI’„Z­ĆŃŁGůÜç>GGG‡4¸pE}uížyűœČ-Ž‚pCÎąžO×:§ĚęýŻáNFÄAaĽ!śjđ`#ŽŔÝM8œĐ€o-6IäŽaäŽöşŞŔp€Eišąä™s—Źb)´6í1ŤçY›ŕœĹƒŽŔOú„Rk-ľpýsYXi})Źľő\VI˝ĎJŸ„ŤuNވ|Fâ#ÜŠˆ#‚ \1žďłmŰ0đOłoߎŸ8É?ţĂs9üÖ9ÚŰŰčÝԃ^+Žƒƒ˝ä Yp0==Çá÷ŽR,–Čĺ2|öłOđľŻ}üâŗyţůX\,Š̆¸x’І'‚ľŠG‹1š$I˜Ľ\.SŤŐH’dÝ<ÖÚŚxÓŘfoo/ííí"Ę|)Őú4Ü]2ĎQcL3Áo[´fE_áŢ5nňęD‚pť!bŒ ‚pĹtvvđőŻ‡žŸLčÓŢqI’0>ţߙ››C)0FŐËW.ŁUz ‚çžďŁľF+ĹŽ];yöŮďĐŃŮÎńď<ĂŘŘ)ŢúíAwŠÜ0 Lwôp÷˘ڕU3ҁěřř8űˇËäÄď˝÷ĽRŠŮ†jEúQˇ"ŠŇœĂó}ţôO˙”gŸ}–|>/'…p‰AßÚI<[ó]jýT€W9A¸ĽîL7 j“ ÜŹˆ#‚ \1ÝÝ]ô÷őâ{­Jiş::čŰ´‰Ĺů”S(×HőŇZÂÖb›ÎŻOʁVŠťví"› Roa°cű6žsëěڃ5Ő*EˆűĚzƒŕ†gLĂĂ`ňÜFivîÜÉŰo˝ÍĚôLs9­u3źŠą|ă}ă3€ŁGRŠTČĺr×=!cŤQ˝ŤWg€śœ;ćň*żHˆƒ Üz÷ ADŒAŽósóLMMącÇ6´V$ąe~~‘Ů™Yœł\ÜGE]^ŕTZ˝éäÉTĘ ŔZKĽRăôŠ38+OÂŻqóţűďăyĽRŠ9Ŕľőön„%­cŸ)ĽVˆ;Őj•……´ÖT*<ĎŁP(P,ń}ŸršL>ŸÇóźćvľÖc˜šš˘ŻŻŻš­5Zkě˙ĎޛĹH–w~żs׸ąošWfeÖŢŐ {Én6EľČ!G@3´dŘÄĚŔÀ^ćÁ€aĆ̋_ô`=~óŔO3@˛âŒHI#‰C‘MRjŠĹŢŞťŤŞkŻĘĘ=3"2śť?܈›šTVUWeeUČĚ7îrî9ßůŸo‰"Â^ĹŹvťM6›Ĺ0 t]§ŮlŇjľ°, ×uŃul6K*•buuß÷“ź8ýĎő'óľZ ˲ĂÇq’cB`Y‡ĆôĎŮ˛ŹťŞ8Ľ¸ż Ú^Őż …BĄx’PbŒBĄP(ž0kkëüٟţgňůgΜâʕ+üٟý9ŤŤkÉd~/LÓÜą-Œ">űěüÇÂoüć?$|~ú“ŸńŮg‚ )Ş¤ŘŸý'śąxâ>—.]˘ŃhĐívżđ„¸ÓépţüyÚí6Śi’Ífét:tť]lŰfuu•ŠŠŠDiľZ”J%ڧ§šqă•J…ľľ5.]ş„Žë :­V+F,ˢT*qäČ.\¸Ŕââ"ĹbĎó(—ËŒŒŒP­Všuë‹‹‹dłY,ËBŽë‰Đ˛´´DťÝćȑ#X–E­VCJ‰Žë„aH¤ÓéäNœ8AąXTëŔÚ¨BĄP(OJŒQ( Ĺ&Î_źĚ˙ţű˙Śiâű>ÝŽK… žŮbłŐŮV-%Ž”tůʍ! ß@Jڝ.?řáŸó_~üQáş^,¨9Ű=1–4˜—c+´ŁW˜Řł%‚=Ă>¤ŒŤ] r‰cű´;í.l×Ü4MĂqŇé4Íf“vťM¤R)ş]—l6Ç–e%Žëtť]|ßÇu]nÝşĹňň*Ĺb‘d2–––Éf3är9\×emmńńqVWW“ÄĂ+++‰€Ó?Žnˇ‹ëş E‚ d}}ééićććhˇ;ADŁŃ¤PȓÍćY^^$““SÔëuZ­Fß÷WbĚ´Y…Bqđ<ȰżĂđ,ßďůÖ~čNçó¸ôOÂ9(1FĄP(‡†(’DQ@˝ŢŘ9č2ŠöőŮNF´Űí$‘ŹâÁBýТÝ^ß6˛ľM€źxÖĺ{żUçă§ď:;ҨڜÍôô4şŽÓjľ¨×ë@œ°š^ßäÔŠ*Fƒbą€ÇqHĽRT*>˙üsĆĆĆ0M›ršŒçyäó9JĽ"Žă ë:N›t:aźđ „aČČČHň=ét]×'•Jáyś˘^o0>>F6›ŁÝî099Iľ:‚Žë¤R)„€|>”…B‘bąŘˆş„aD.—Sč˛ÝřÐ(Š0 C 3 Ĺâş.Žëâ{aœwmPłĚÜž}.-vü–eb§llËz$šÂPâš.ÝŽ›„ĐîzĚŰ6kš†˛HĽěCŽÚĎóW<ô‰ÂáDČŚi’rlLóp÷›áş]\×ŰĘů%â%!ÓěľŰÜ×.QbŒBĄP(ŠC+śěg´ {Çěżr˜xŐôŢ^khœżl˛Q7ˇźbvcY###H))•JLMMÝՄüÔŠSÉyLNN˝^Š”wTăB011‘üoŰöĐgJĽĹbq×Ő¸ÁďÝ~ÍŻă`˘XUFůáľŰţ„đŇĽK<óĚ3JQ(h’żŮhRŤ×čvş=É/ś_Ó4H9…||!‹Śiň,÷sŐ6´Z-\×MrÝ Bě”M&Ś\.c§ŹGŢ…aH§ÓĄVŤŃjľü`‡7Şiš8ŽMąT$›=¸ë}ˇô…¤őNĎ󆃄Ă0IĽl Ĺ<š\.ÉíśŰřŹÄ…BĄP<*Ӊƒ\fꗐľ-“LÚA ącAIlűűn^{pű %Š(Č"„<ő-d7ŁeŻm‰ŘŔݖ•H ŻZ\žž' ˘]*ÚěVŞxčűîc•ëNbȝD•ţśA ˝öżý¸fŇqĺĘŽ;–äR(o’\ŤŐ¸=żHÔóbí'lďżŢ˙{°Ýďš Ă×őhÔL3EžP@×îł,Ľ$–—ŘÜl†Q˛= #Â0Ŕ4ÍÇE’0 ’$ďA3 ÝjÓlś˜›Á4ͥʁjńIIˇŰe~~žN§ߟ0" 名ŽŰĽŮj211AĄP84ž=ýs¸}ű6ݎ‹ď;B˘ăţąjcłÁ‘#G( Oüâ‡c …âń›jô̞”mó_ű:/źú2mÇá$ÚŔąIäĐ˙w˜ÚěJÜů´ĺÖű“÷j@Ąˇ;LýçÁßđhŽÓcƖ§GO֒ť ;?˙öűŒO>ů„™™žôĽ/Š ŁPýôS^ýőd B†!Íf“O?ý”šš9FGG“ąÇő\V–WCځ›ąˆ˛¸¸ˆëşČHĐjvř裏X^^FJI:ćĉĚÍÍ!„NŕG,/­`Ű)2™ôĄhc˛ş˛Nť¸}ű6~ř!žç%ÉňGGGyć™gb/ÖH˛źź‚mŮd˛é'úůSbŒBĄP<&DRIeˆ&4ĚZ-Äe}›ăė_ƒĂ8A•l6 ~ů!R5•] şíž#b…ďNťˆ˘ˆFŁAĹ9V<ĎŁŮlbš&FĎóhľZ†A†„aH&'ć헹–RŇnˇY^^î%ţíR(p‡vťMłŮLD]×q]—t:M6›Ýq,+++A€mŰɊœ”’ĺĺe2™ ›››H)IĽR¸ŽËČȈcş‹"šÍ&şŽ366†Śi´Űm2™Œ ť~I‰.ú]x,(۟9ßó‘2Ş/^źČĎţs^|ńE\×壏>âíˇßŚŰírîÜ94MăěŮłIžŽţXa"Vô“ľ÷ĹvĎó¨ŐjdłŮ‡jBřžO­VďyÄß{ůňe>ýěSfŚg¸uëgϞ%“ÉqŐżżţëżfeu…ů[ó\šr…L&áżýmlŰ& #jľ:ĺreOą˙aÝ›››tťÝD\jˇŰÜşu‹S'OŃuť|ţůç\¸pßýÝßE×őžŠK§ÓÁqR‡˘ďětşl67“qwii‰(Š’źrým qED$řžĎęę*™ěĚí%Ć( …âáČ@(%Ÿm4řŁËWůŸ_~ž'ĆLȒM×0 ă¤(АşN¤i„Şšě+¸ ŽĘ~y*ëlšBH„Ř[˙ž[4Mò,|ßO’ř–ËĺÄĽP(°źźLŤŐbzzšnˇ›îőzbąH†ÔëušÍ&–e%Ť´š\ŽnˇKŁŃHź)lŰ&Š"|ß'•J%Ożlöúú:ŮlÇqXYYĄZ­âş.­V‹N§O&ÂĎóöĚ/Łxř,..˛°°@.—ăʕ+‹EŇé´ş0w ˆ$ż÷Ësüö‰#œ.–0„P~ŠťščÇ^Š.‘Œ­×oFŒŃjľH§Ó¤Ói666¸xńbOLI[Ż×štéǎăʕ+¤ÓéÄËćůçŸg||<éŁ}ß' CtĄ=4AŚŐnř>}WĎ ¸rĺ );Ĺ'Ÿ|BŠTÂ0 ‚ Ä0␤|>Ďää$v‡/}éKœżp>úO žu\×CF2ůß÷},ËbîŘëëëœ?žľľľŢńŠŢx-i4ę ůC!ĆÔj„A˜Ř%šŚ111ÁóĎ?mŰ¸Ž‹çyxž›|& C\Ď{âŸC%Ć( Ĺ!'Bâ…!ż\Yá?^šĹż8{ 3‰>Ě&÷ƒœĚŞŠĹýqŰó´ žśľMöçIŞĺ¤DF čtĄÝ‘ĄőŢ'vě{(‹ţß÷ét:Řśă8CŤ‘ŤŤŤär94MŁŐjaŰ6a˘iĽR)ůŽt:çy‰§L2`Y…B\…Éó<,ËJbçűBP˙8RŠT’Dxmm ӌ+5˜Ś™ěŁot†A*•RžMÓ8}ú4'NœHڔ ŰK×řŢŠŁü›O/đ[ÇfxedKÓЄö€űaœF_´FĆýeY?~ŒĽĽEœ”ĂÜÜ—/_N’ŻŽŒŒŕű>/^dff†Z­Ć|@EüčG?âšçžăŇĽKT*&&&Mň–ě}žO´-Éää$çΝczzš(ŠřĹ/~Á›ožIĄP VŤŃnˇ)‹čşÎňň2…|ĎópgË‹âąńŕŐ@öM¤HŽŰĘĘ ?üáń}ąąąděěçtp]X>,\ĎJ‚†ĚžšŢ”ŁP(Ї<ІO×küĺÍţŤłĚćrh<(É(ĎGvşťˆ’ŘH Ńă…_` °ÓPӑhR˘BŻ@ eŽ JŢ{WŇÖ.âŒ&Ż˝ŕrńrH1Ňu5–×t.]׉")w&Îí'vÜ­l¨‚\.G&“IJF÷?_*•ČĺrčşNŠTJbơťkšFĄPHJI÷ N]×ÉĺrI8Ňvcmđ8űՕ&''‰˘()›Üd&''QŠ˙ł[‚GĹÁ ëúĄ*'ű8  Ál.Ç}bŽ^ż…Ł›|ŠZQBŒâŽž7CŽX“üh"¸Ç!—Ë%^"}‘4Š"ŞŐ*.\ RŠ$a§Ůl–z˝NEÉóœě÷!*ýDťýęIý\0ăăălllpěŘ1>üđC|ßb~uu•……E(—Ë\şt‰gŸ}69v-v}dϔHĆDA>Ÿ§X,bYéôkkk|ýë_ß1>§lűĐ,*¤l›n§;TŐęęŐŤ´Z-t]'Š"ÖÖÖxţůçw=ó'yËć¸î¤ˆ„ öŞhB$+UŰ+!‰ŢkťUO¤čťœmľ(zĎ]M@4`yŃç—TƒšOqF˘ąRŸ˘íÖɗňD$•é29 kkuŚŚŚX__G×uŞŐ*őzŻçBě87oŢşoƒ uˇ‡L zŽěghő˝#Eqy1úűÜÇnß­DĹc÷üöÚmJ7°4ŚßŤR˘Ú˛bŸ>Ń0 씍ś)ˆzăi_$O§Ó˜ŚÉŘŘĺr™_ů•_áwŢÁ˛,Ţxă LÓ$N333Ă“““IŽ×uŠT*}žŔ4Mtýá&ÁÍd2˜Ś9TŠgrr’—_~™••o˝őš\.Y08rä­V‹k׎1>>NŠTbzzzŕé†ţhüs…Ŕ˛L„ŚA‡ůdłY^}őU~ň“ŸĐh4˜››cjjjÇ"DţUS*–J4›-ÂŢ9=z”őőu“çž{Ž#GڇěŰśžř1Z‰1 …BqČф॑  䏯]'cLgł˜šŘCşxbL˝˙чíú}‚۶͏GGš–I!ČxlŮ  ľąÁ›ľÎ@’ŔƒŒ•œÄCăŃ­`=.lw–‘`ŁQ¤Ůöhť#a@ł˝Že 4­AľZĽŰ=Ł*• QaYV’ße~~~ÇýŢŻÜôýLô>”řňxˇaEœŔ÷fłÉ÷ŻŢŕŐŃ*/”Ü{Rń˜ÚšF.—ĽQŻÇšIdŞôâ‹/&"úמöľ$LôčŃŁ‰ŢĎű1111ô,žüňˉˇc_ °,“b)żŁăƒĆ´,JĽÝn\ľ§X,ňúëŻă8ét:IâŢ?‡\.lj'¸}ű6ĺrĂ08zô(™tD|}ŠĽ†i ťĺŘýŠyÖ7Ö)ăE…ŮŮYĆĆĆp]—\.‡ažĄ‚TĘ!í8‡Ć3ĆIĽČfłIő¤BĄŔ /ź$ňľ,‹'N ŻeYTGFžřgP‰1 …Bńˆ1YÓâÍÉ1R†Î^şĘż|á,Śf>܉CRB(!Ü=ţ8ryt/ŔƒSnHxßIóňęŽěkÉA)ć)Öeöó8Ůş@ \ż~“z˝ÎÂâ@R)#Š"~ůË_&%Ś—––’˘0 YXXč­x)qCńhŰűÓ(ĐxQČżťx™ˇ&Çxmt”´a¨,[Šť&N3:6ĘâÂ2žď' Vˇ!}fť˜łß3iš&ăă’ˆ[ÓĹb‘nˇK˝^HBŞ4M-úÇW(ČfłÉyÇ!I`é´CľZ=zQŸŚë:SSSܸq“nÇMŽłŸ\yđ>iš†išŒŒŒ`őD§ĂĐ'ęşNĽRÁ÷}šÍ&RJ*•J’,żúżMÓd||œ”RbŒBĄP(Á$ptƒŻŽń•ń1śY‹w?€×,ƒŤi‡Ž&DČ<ˆ„dŲ¸ćŘäCcŸ&Ęq"sz­N×í…ŃA é:Š”MąP$—ËHČL?ŹhllÓ4â˛ÝAĐKJ÷˜ŚI&›ĽT*bŰöŁĆm›é#GX][ŁŰé ”ď_o]׹m;ÎɖĎ'U•…ÝĄ RŽÍÄÄ8ŤŤŤtş]P˛ÁśhŰ6ĹbżÍ<ůIȕŁP( šâzŢ×1‚(Bô’ćŢqbĚŰ)R6Ql‚=„ÁSC É…gÚMô0şĂ„#N늆]˜Áßńö¸ügąTâ_ýëT_¸ŸzşĄUÎP(ý˛źqjńT{dZżĘŠŞž¤¸?â<1Eňů8Iď˝TáŮËűB×u Ă8ŕź%Ąe›ŒR ĘAŰ“ţB/<‰^‚ţą–~EÓ4ҙ4GœA$^ŤýëßĎÁ_ďťż/š&pŇ)ŚŽL&ç0؟ďŢfäžăŔăŢ÷+1FĄP(ťŇ‰€0"Ű3ńw^ĄŁëÜLĽ¨&RܛGÍ˝ äɕ´Ă’es´Ű…;LöĂ0¤ĺÔÄdOad0žź?ŠŐD잝6÷ú=AH„=Ϥ~|˜ŘÖbÄďóÝ}î^ţL }ˇß˙E÷sˇÇš×gzßNƒón÷#îńő{˝Î÷˙<ß[;ŘyMÂ0ތĽ*_ąKU(îŇ;sĺ&AćNÇq؅˜'ľ}”ŁP(Š]ĘbÖa3íŕŐ6éz.M×Ý6IDB°fŹF<ÜcL)™ßlrŁą‰>$ĆÄIdlÝ ˛q-“LŠ€ĐԀżżAÔŻz1^¤ĹaĽ/Ŕ ôqţ#eä+÷GÔŤF¸[˘Ţý&˙ű úšŹx?a‡Ą_ŮëžČy=Čc‹zůĺîtĂůęîÜ.Cĺö:ß'%Ć( …bŁI’2 F§ÇYÔ@ŽE¸žOD8]-řL]Ł ‰}ö ŮţŰśéÄysş€–źcëˆ" d&EfŹJАCBŞU˜}Ě̞ĄłÝ`{܅aAn÷;š×ëťíWî8žťŰŚxj[ěŽĎłTĎšBqŸxžÇ•+W¨Őj¤R)ž}öŮ}sŚDQD˝^oŠĹ=÷ť´´Äččč# ÚŘŘŕŇĽKčşÎéÓ§Éd2űö}Áŕ°xĹ´Z-Ž_żŽëşŒ399 @łŮd~ţ6'NżŻŹŃv–––X\\IJ,Ž;F6›Ý‘ěżŮlŇjľ(—ËA€‚T*ľçľ˝|ů2är9fggq)%őz×uSbŒBĄP(žěÉN>"}ü(˓m,?@ʨ—Ś?A. zč!Ańˇj#y´=ź6 MŁd§Č›&ú.Ľ9÷:ŮÝíÚíˇíNŻ‹{|˙~Ű …Bń…GW)šyó&†aPŤŐp‡v]pýúu2é ź˙!†aríÚu ]gvv–Ď}Ě+/ż‚n踎ËŃŁ3JŒQ( Ĺc–%ˆ &2™Ř0‘ ĹÖÔXîřÔ{}Ąč×J€Q( …ânÇ՞—Âôô4AđýďŸˇŢz ˲řđƒŠ×ꏯo°žžĘŘŘ8ŽëqůňeFŞ#\¸p‘ééi<ĎçâĹĎi4,..Ňh4řú׿ŽďDŃŁől”RŇjľ¸téG%Š"~öłŸ‘ËĺXXXŕóĎ?gddÓ4™šš:0!ă^( ĚÎÎňŢ{ď111‰eÚ,,,099ÉóĎżŔĹ šqó:?řÁó /Ř9H‡:Ÿ:uŠFŁÁ•+Wř“?ůNŸÇś-žôĽTLŇuÇqx˙ý÷ń}Ÿ—^z‰fłI.›gjęĹb‘ĽĽ%^zé%žóď0??O6›ĽRŠpůňeršcccüíßţ-ů|ÇI“É:\¸p &''Ĺuťd2Ňé4étĎóđ}Ó˛ëçN‰1 …BĄ–/†’‡ˆ}ĎĂxüťnU7VĄx\űĄűx]ĄPÜۄú̙3¸Ž‹ă8dłŮ$'GŠTć׿ů6şŽEśm“Éž`vî(ŚiRŠ” Ł)%śeŃív“ňĹ]×Eă8ôüŇé4_űÚ×H§Ó˜ŚÉÜÜǎcccƒt:ÍéÓ§Š×ëäóůCۡäóyž}öY<ĎĂI9ąašč†ŽëČ(˘R-aŰöžƒaœŁVŤqćĚŽ]ťĆoüĆo𳟽Ă÷ž÷ßŢWےR•ˇV( …âiˇ7ŸűTSˇ^ĄP(Ч]×9yň$N:ÍWžňZ­&Íf“(Œˆ˘ˆ|>O­V# C&''ÉesÔę5Úí6–eŃjśgvv–|>ĎË/żŒŐËŕy^œh0›%Š"ţâ/ţ‚ŮŮ9l;…”ňž …BĄP(ž”gŒBĄP(O1B,ËâÔɓĚÎΑÉd¨×8ŽĂńăÇIĽRÔj5t]gbbMÓz• \N:…mŰ=z”ĽĽ%Ž]ťĆěě,ŽăP,Éç󌏏ÓnˇůůĎÎďüÎď`šĘüP( …BńtŁŹ!…BĄP(žrt]ç7žŠm§°m›|>‹çű”ŠE&§&ŘÜܤP( ë:ö ě”MŁŃŔ0 ů“S žţőˇčt;źöÚŤ¤3iN>†Á… çyăÍŻ22ZEh*üMqgTéj…BĄP<é(1FĄP(ЧMÓ¨ŽlUÎIţNgŇT*[ň˝JĹb!ٖÉĆÉx+ŐáJĽRœ8Ţţő_#“É$^1*ěHq7ěÖNś 4ƒďQâBĄP(”ŁP( …šěEŃCH$RĆä~IÎ0 U,Ĺ>mr÷íýęƒU4”ř˘P(ŠÇ%Ć( …bˆHJ6}ŸMß§?ÍхFĆ0ȘF<şËý4}Ÿv’ˇLÝx “đPJ")ф@ťËcRě6ń“ă꺖üżÜKiJ…âÎírŤl}ü[ ´W2ŁH>1%N‡°F×Áw54MCůó)O5Ś(1FĄP(CóŚďóď/^ć?\šJlz ň–ĹăăüăăG™Ęd0ľ;ă‹?Ó |ţŕŇUţôú-ţĺ ĎđĆřŚ~ˇƒ›L&_{qťŐ泍3Ů Çň9L% ÝÇAρݪ !ˆ˘¸b’ŽkDQČíۡŠ×ëD‘ě݃ĄOě˛më5]טšš˘\.ŤÉąâašČ˝śŹăűÁP[ü[Ąx0„Hżt]¤Ś!•ŁP<%CÍÁVbŒBĄP(ś&ńÄ+Ň^Ňô|žqd‚1Ç᣾ ~4›bĘ⟛E°ĐîĐöCŠśÉXÚÁÖ ‚(˘áy,´ŰDRŇö:A€†QˆOÄBłC+)Xcé †ĐˆdDÝóXjwO§(Ú)ÚAŔr§KÓ÷É&SY‡ ’üĺ­yţýĹËź11Ę?ž›ăT)G'šÝjJÉHĘĄę¤0…öԅĹě5!í 3ť1??Ďď˙ţďsăĆ Â0n{Lrˇ†Áwżű]žűÝď’ÉdÔäxčhšF*ŮŻâáőĽ€eDŘF„Śí&R+Š'öá?”ŁP(Š='îߞ™áľŃ ?ž_ä˙üčŽo6šŃlň׋ËüryśPJYüƒ™I~íȡ›-ţÝĹK\ml’5-ź($”Q,đD?¸zƒwn/ôēߜ=Ę[“ă\m4řĂKWšÚŘD˜H;üĎ>CÖ´řáő›źť´ÄŚď“6L^­đĺŃ~v{‘–ďóîŇ ĄüłÓÇřƒKWšXŤIIŐqř§'OóĽjý)cÚÍ#fˇ÷\şt‰üŕ,--†a"´Üío€ŃŃQžýíoă8şŽŤ‡HńĐúڏÝAœ—hg[T(pOzpł3…BńÔ Ä…BĄPě9‰ďŽË…ZH RşÁť‹Ëüéľ[T‡×ÇŤüřÖmţäúMŽdŇüäö"?_Xf:—ăH6Í߯Ź"DHŢ_YᏎ\'kęźP)ńÉz˙půŻŽT8żQc­ëňRľĘRťĂ+küđÚ Ţšœä‡×nP°,~}jŠ×6¸\Ťó+Ł#œ)šXkp"Ÿç+cU>XYăo–9U,pŚT䣾 >\[ĺő˘2Ąďp!žŔúžďű„aH…#S˘dgU !@†zž4žçEQďsív‡ {aPRFäóyZ­6AE’tÚÁ0ô$´)ŠâÉułŮ$NŁiŘ {Š˘ˆVŤE6›Ĺ4 Â0Ę"„a„ďű´ŰňůÜP.)%›››¸ŽK>ŸGÓ´D8ň}Ă0BCÓšśĘľ˛˛F>Ÿ‹Ë{wş8N Ó4Ń4ŃËa"ń<Z­F>Ÿ'•˛ˇ.V˛šžu|ívMln6ÉdŇdłŮDhŘş7$Ÿ˘ˆľľu¤ŒŤT™Ś™lŻ×똌IąXxŠÄˆţuG%„V€Łźb …c …Bq€ćç˙öŢčBF’ńtšgJţ~yŐN—˙ńĽg9S,ʐż¸y›ËőM~š˛N7 ůggŽs"ŸÇđ—ˇˆ¤äŻnŻŕE!o™áÍĺb­F'хƷ§pś\ŕ“ő:×6›řÜl6ńوPJ–Ű]ŽÖ[|m|Œ7&F¨Śmć[mţüćţřc677™˜˜`nnŽőőu*• ů|ŽżúŤŸ055EŤŐBJI>ŸÇ0 >ůä^yĺÚí6'NœŔó\nܸA6›ĺoţć]žńopőęUnܸÁÄħOŸfssMӘœœäÜšsX–Ĺ•+WŠT*¸Ž‹mŰŹŽŽ2::ÂÚÚ:gΜÁó\>űě<ŽëRŠThˇŰĚĚĚPŻ×Éfł4›M&&&¸ző*ĺr×uń}ŸO?ý”ăǏłźźŒŽëDQ„ŚiĚĎĎsňäI …üS#Ć1,Â(ĹÁŒŠŞ) %Ć( …âaOv€ÓĹ<#ŽCŮśycb„gĘe>XY!ą5˝7/×@ )˝ĎBCô_믑”†ŚČˆŞ“Â#ź(äß^źÂĎn/1ËĘC‹ß;žvřŢŠźˇźĚšŰćß^\ĺ˙˝|•˙őŐ#9  hź>:ÂÚ —OÖ7řpuƒĎ/ńě­˙ęŐHÚ@E–§ň~î9YÝš]ł ˆ$፠rZ ÍIăş.Q%űi_ÄÍ;¤fË´Ż­ĂbŒëz4›MšÍ&Śi"eěyRŻ×i6›xž‡ďűĚÎÎráÂERŠétšZ­FˇŰĹqršBšÍ&›››,..’ÍfŃuƒőő –—WBăÜšs¤ÓiVWW™œœ¤P(ŁŁŁ|đÁtťŽ?A&“fff†ĹĹE*• žçąşşŠeY >ţřcŞŐ* xžŔŇŇ2łłł yŠĹkk&''ů裏h4LLLĎ盕•Â0¤ŃŘ$“É  ÁfŁI˝^çňĺËźř⋼öÚkœ?žŃŃ‚ äňĺ˄aH˝^§ÓéĐl6Y]]ĽÝnłąąAš\fll €ĹĹE&''™ŸŸ§P(đꍯ>e^1Ăä_’]ĄŘŁľŠśöĆ(uŸflQbŒBĄP(ĽeÄ??sŠŻŽĆŤĐ$0Ë1 ~tkžŤ#œ[Ű ęŘLeŇĚäłÜhśřŤůŰÜ.¸PŤÇyźP-ňáÚ ŽŽă:ďÜ^bÓóůŸ^zŽż[Z#cš|cj‚Ëő×-qEŚůV‹gË%FR6˙ĎĹŤl¸]Ú]tM`j‚ŰíŸ×ëx!t‚€7'ĆŠť.?¸q“+:^’VĂÝ=šU+ĂÜŃişÝ.őz×u{ФVŻłÚ¨ÝaąXR*Éĺrřž$!CSSSO˝Ţ Óé011N§ÓEÓccŁř~€i8Žƒ"n˘($ŸĎ“Íf(‹ŘśM>Ÿcee…ŁG˘iÈ?W,HĽlJĽSSS¸n—ršŒa†NľZ%ŸĎąąQĂq …śm3>>†ŚéTŤąÇĘĘĘ GŽ! ƒž`“gjj’ršDˇŰĽR)“ËĺÉĺ˛TŤUÖÖ֘ĽÓéP,p]”㠁bą@ĄÇ0tt=Ĺää DQÄÔÔ$­V!Ŕ0tJĽR/TJ'NS*•’䎓˘Z­†ŮlŽ\.Ůz’&ź}áOÓ´ťčŞ”ˇ‚âáMȢ(ŠĂ!% U[{ĐĚ`ĺ?čŰňžűŽAĎ]÷łŰ˜ő žžčžîĺó[°íówźť}ţ^ĎO~ÁĎ?¤ď*ŻBĄP(’ĆçYŘ6–îx  Đ&C’ˇ&ÇXîvřťĹUŢ]Z%c|çčΔKX†ĆşŰ姡řlŁ—ŔMޜăVłÍ; |źśNŢ2ůÖĚ$é4ŻŽVůůâtĺiȍ^4LMCJÉ_ÜźEřaÄWĆGxŽ\dľŰĺTŠČűŤët€zę óíď,,#ä “ptšŹiŠÉÚŒŕ]WelÄjšNĘN‘Ëĺ8{öl&đŮůóʟű`O‹%NsâÄń-ŁXŇË˙ç<Ů=Djg~•ř-21´!ÎĺŇ?ţ|>ĎÜÜěƒ>Ÿ?Óűź¤R)Ĺíˇ×–Ÿţš8Ă `ŻMš\bjjrhż333LOϒjľšœž‚ššŁĚÎÎ œóÎ*?ýź6BhLLŒ3>>śăűďVt:Ż'Eˆq]—k׎qüřqU&]ńH‰"‰ëy@ˆĐÄĄcžčÜűPŤ]×Ń5 M×˝…)ä} RĘ8çYőÝ'ßCF r=¤+ŤL%Ć( ĹÓ4¸ôĄžĄ#ˇ-kŽĄóÍé)N œ(äˇŮC‚Łšß;yœ7ĆĆč„EËb.Ÿ§d[<[.óťĎžĺVłIÚ´°5Mßçx!GÉśřoN畑20$kœ)ą ďŸĺĺ‘ ~‘ˇL6}Ÿ˘e3â8üö‰Y^­ŇôCg6—e,íP°,ţűgNąÔî`ë'‹9ţĹ3§¸ŮlIIÁ˛8]*öBŚÔdnĐ`ö~oˇŰÁśmڝ8TŚŃh$‰~ççç{ JějvoŸD‘J7ť‰%}t]Úť6ť‰ăôżçIRĚä7˘ÓéđůçŸ333ƒŽëJŒQ<2ü dsľ…ĐEoÎ{ďß˝uyWąy°żŽ˝ÄpŸŰK2,wőˇ^Űgţ>řý÷âř ö8~1ŕ[‘źÖŤp¨™´E6“"eŮńóŢ{÷ݎŰRJ") ‚×óp=Ÿ „AřŕĹ1pvťŹ%$gú°ő‘^%š84V‰1M?™D‰1 …BńÔ(1’˛ˇň$´c¸`é:gË%ž)—v5…LM0Íp$›MŒ€žŃäčϔŠœ)ˇˆń_ciƒŃôřcëH6Ñlfčpúߝ3-Ś2š3B ‘15ž+—yśÜ3UEÄŠbž“ĹÂŔůHĺVžŻ!ťˇUš&’ˇýź.–e1UŻłX[ÝUˆŮ.:ô'ŮýŞFƒŰ÷›h÷CV´ž—Ôp{ÝŞ°t7űŮ^Šhűąô˝uś Ä…;‹1—.]âÚľk\ž|™łgĎŞ‹˘xd¸nŔ'—6hu=dô &˝=Eî"ŒˆÝühZü‘ô#b@ü”;Bh;ú@)âümrČóp[_)vďÇĺśCßMâŮ"´Xdś-M‚ LŞŢÉŃç—ËeMN-05’ÇqR†ąŸŠľC< ƒ€N׼h˜ö&:F˙ääžÚÔޡGŢA]Úe|î>2ŠbąIˆÝŐ­íJěî>$ďŹtéşN6›‰ďŒ)ŁŞ‚jŒy\Ći%Ć( ĹS3ëÉ/ d´M*Ů}ěßiölƒ{˝KÜńżpy§Ď [+[ŻiťîŠí܇bö50vľ7zł”Íf Ł—dccƒfł‰eY,-/÷ĘXďnцaČÚÚQá8N’$w||œz˝NŁŃ ›Í’Íf“ĐÇq°mť7éĐÐZ­ĆÚÚĹb‘fł…”07w” đşí4ť]ü ¤˜51-MӒçýn<*eá‡]/BO•ŃĚ,š<đĽŢĹiľšl6›8ŠA˘ ­'6EIhÔÄÄÄďű7˘ŚŤk:)'G†tť]\7Ŕ0 œ”ƒe™Ccŕ˝äŕR,JŒQ(Чm".eěÓÓ*ú˘ŠěUC’wü|źú}0ey×ÂĎ^˛ŒTaGŇŔťĂ}Ěfs”ËeÂ(VÚí6N‡|>ďywL˛Ř/Uíş.őzĎóĐ4-)Ó\ŠTX__gqq‘t:‰–eŃjľČfłIuĄ ¨Őj˝ź3:a˛˛˛Âňň2šŚaYśmÓétČĺrLLL$ů,ËJŞĺóyÂ0$“ÉĐh4H§Ó´Z-\×Mr ÄÇě%ůiGE\ťv›7o2;;ËÇL*•âčŃŁęâ(IŸůĹű„0 w ‹”=‘#^üZ2RßqÜ[IŹ’qśďÁ!ˆdě “ôÝrx$–Ű>łăE˘ÉmB̀ˆŚ”KEŽ›Á÷şH)™œŹbŮ×o,ŕű>G&F) Ü^ZceuƒÍVDŰőɅ˜÷>†I)ˆ¤†ŠĹ9âä˝÷`?…QČüíŰ\˝z•ÍÍMFGG ‚ŔÇ$I„ă¤ř­ßú­¤şŢƒ ?ƋšŢ9JÂHŇlľšqăëëëäó9Ž™˘T*aš&HI×uš~ý:ÓÓÓd2ő+1FĄP(F‰‘„QHÝó)[6ž”lz.EŰĆčš.wBǰö6"#‰Ž î×i šF’ĺv‡ÇÁĐ´}íŚPFŹv;dM‹´a˛—C‡…Q„­ëhBSÓé;ąűŃévYXX`î؆a$‡˘(˘VŤą0Ś´s˙Aŕű>–e%!AŚibÍfÇq1ŚďŃŇ˙_Ó4rš¸Sż<śëş!Čd2ŒŽŽ&ž1śm“N§¸ď%#„ •JQ(0Mß÷ ‚€l6‹išqéi-vé÷<Ë2ą,ĺĺ}đčşÎéÓ§™››CJ‡:(ŻĹÓ2D†őr‚ȁP›8´GîŰŻ'‹.C"J/;ÇĹĎ/bŽë˘ë:šnŕŰ{$‹&dŹŇmsdď‹ Śi&2–eaYů|×uąm›BĄ@ÄeŁűŸëç ĐuBĄ@:Ž KĎCÓt4M#›Í’JĽCupÂŽëú›{*•ęU>ŠĐ Čd2H){ĽŹľž'M@„¤ÓŽ2Xý6˘PŚ.RJö)öHźľ5iŢöJ˘flyťˆmICbď”^g,ˇ>(űÂÇ wË^É_’L2˛'Ŕěôz‘ŰÎaďŔÓ-á%ęyČ}ÂHˆq¨ŠŽéńáE˝ó–’(ФőÂośĺóşGĽ‚[›zwĆu]:Śi&ÉĹu]_ŰŃŃQLË@×5‚ ˆC‰Ƣ/$Ô ďűťxŰȤßÔuŰś†Ža†üâżŕ…^Pϲc …BńčDR˛Úq‘€†ŹvťŹu]|ah°ÔqŮp]ć[-,MgšÓĺx>ĎĽFo9B(%Ý(ŕęf“Vŕă^1•v¸XŤ‘7-–:]jŽÇxÚáfłIѲ˜Hgxwy™0ź95F(#6=él†Ľv‡ŚrąśĘt6CË÷M;źżşĘń|Ž×VuRËçYlšŹu]jiM@F˜:Œ:ţzi™‰´CӋXîtRŕ…76›ÉŚšRßd2ăđáę:gË%Žnn2•Îŕ†!Ű"m˝°-ňéŽNv}‚zaętÝ.ľ•Ձä•Ąé¤–1ӝ›kČpg2Mӆ\˘űŢ1śmý'tprnš[qđ}Ošť1bu]'Nďúz:íě˜T)!FĄPlMwĹ]Oôĺ@|Œ”{ăöËĘ8ôç„Ěń!éMňˇúÝĐś' lW[ť3Ť €Ú KŰÎL Cm 6âNĘÔÖőÉyĆ{ńý€ĹĺUFFNręĚiĂÔ¸}{ Ďőƒ€…ĹUŚ&ÇĐ5k7—q=Ű҉ú~]n~‰çVŤĹüü<Őj•vťM8ŽƒŐŤUŤm ëĽR×u‡ŢQt]§Z­ĺÓéWSĘfł|ůË_î-x˜”JĹ$÷Z?Oۡžő-*•Šz˜•ŁP(ŠGI$!7 é†n2–NóţęYÓŔŇuÖť.ç7ÉŚi>cé×67ń˘Kä ‹Ĺv›é\†˘mpľŃćh6C7ˆ¸ŐŹńÚČ(?m.ˇňlx›~@Ö÷Ůô},M§’˛ˆ$ŘşNѲ9ˇ^Łř˜BĂ CŽn6™Éĺč†yˢîůÍeI&0 mčD2ⓍËŕd!‡”’šlŽÖVIi:#)§çĽÓô2†Iۏ¸Ýę`뎎s$›Ľ”˛xwq…'E1eŁËňŸOs;éú´ŽŻÄć^ĹBĚŕjjŇžľ…AźZ{˘Čţż;{űáŠ$J„yŒ'ĚJHS<<5ćŽŰ (}f°]ʞłwšœŘ‹$JŞ‘ätŁ—ÄWŰŤ"PÝK!‘LŇîďřÎ^~,)eÂ$÷JÎ/ˇD!KU÷ƎHRݎ¸pńĺR]×iˇÚ,.­†!RÂĘZF M9Ë䗫Ťœ,iu}N•ňüôö"ϖK\mlö­Ž›óă@ßpŒÇ~čQĎVrłî­Š†ń5ÓĐŻîđKB+űM˜ŠGŞŰÜ)á ĂaAbŔťeŤHő°žIšK ĂxËîţ:rx$ë…ÉĎ ~ěgŕݞČ7Úíë{Úl;ÎD”‰Ť5y~Ŕââëëő^ČN—{îá!A&ŐĄÄö°§CĘŢ!”k—ŹĂşOÚ­bÖk’ÍIŇůţöţg¤(¤PbŒBĄP(žˆ1ĄëüwgNôÂЀPJž:1Ž>ˇ% MŔˇgŚcˇ/Ÿ˜š†|}r|hu\s…\˛ş(zŰ%đLŠ„&UÇ楑roÚSëŁi'NœŕÍ7ßäöíۄa˜”uŽs%얐°çEÔ{M×u^ýu˛ŮŹJ¸ŞP(ž*ᥟ |W79 ]ˆ EJdâĺőúŘžâK}ݘaŠD …DD[=ń€ß Bô™ŢKżRӖ"vŸ”˝|1rŤĎœôĂ`Šč^~™ŢąËmƌDJëyqf ŸJČŤcŕŘżˆląŰUď—rŢ­ź÷`8Ř˝&w~ďŁƒű÷G ŇJŒQ( Ĺ!G}ۀ}݁Ą śťG2zĆ3),]ۡôô`ůÍX ŘiŘěv\ÚŒ ó> ]L%pôčQ~ď÷~/.Ď9’´‹Áş˝šC?éîěě잹YŠ= –RŞ‹Ą8؉Żě r+1o?ÉĘ6ńN”’îWJúzyXśŢ&{嚣$‹Ä"Œ=OÖÝĺѓ:´Dœ(ˆ$˙íC/ą4Üˇ˙˙ ÚŃŤƒŽ<2^ĚŮú^‰F\B[ń>´^ĆᝐLÎ÷Ajčt:\źx‘ÉÉI˛ŮlRĹĎu]Â0LĘ÷“ťkšŚźGJŒQ( Ĺ㋮ Śłé$Ąâą›b LNN2>>~ß{éW%R“dĹĂ$ŠüEDQ<9U( ĺ%ĽÄŽWKP'Î-ô}SƒšdvŤ`ˇUv:ęyŠ„RE[B ôD‹2CÇŃË#§IO°Ń”)űž+[ÉzűßɸęQÔŤ˜4XĂş˙ˆi}9f )p?gŒ&{I†{áJ){áϢ—š/,őŽGúôŕ’ď âjyďžű.słÇ’ü)Žă†!›Í&ů|žNťM§Ó!Š Ĺ"ssÇUŢ%ŠG‰1 …BĄx 2boúĄEjuPqčű1œUő=Ї‡Dő~î0&U†6ËD%zŤŢý˛ł%H")cAFŠoOúzČČ~™ěžЌszE}Ϝ}o•šî 1˘ˇ˝—ŔWjێ1ţ–HȞ #‡Ď§ˇ­ˇ/žčÔśĘ^÷lâăďý–ś€ĄŚiLLL i­V›|>OˇëŇívđ<ŸŔ0 “0lŃuť¸ËˌŒŒ02RUăŸâŔů˙Ů{óËŽűžósÎ]ßRoŠŽŢŮÝŐÝ\%Š”LĘb"Z–-ÉyÉŘ‚qĚü  Ɍ‘cČ1â蟘ž B€Aţ2ÄČ /E<ęmΎ§“T‘KŮ vk™Ź5†‡1¸÷‘ 3CŹˆŠĄrB>”Í)‚%÷lQZŁT^2¤'„ˆNýŐĘoW¨VEُ-'Iš„*߾ւ]xĨ2ASrđVą¤˙ĺü“(˝&W÷LN"óo‘™˘§œ:•—PéÍ0ô}ŸĎ|ć3I›*6ÉR›@ˆŒ*ŇĽýL-cźÎ î c``````@&Ź\ F JM&ŐŰ*ČˡD)íÍE)ł;§wązĨ# öś¤Mëů?—ÓŹó°ĄTĽ˘'ĺB ’üĹ*˙–:ŠI~îߕn;÷‰I˛‰KęCS*‡R˘ WԔ‘oÉpXOČY"JaPhtjć›íŚĚö3/ŸB邐zś0IŁľľc孖eݑwYţÚýp )űľ|0`Čú݈ˇ_뎒BĆ~{)ޘŽƒŐדĹcŰM°ˇ›LŢÉdÓxÓÜórN–”ôZ‹â9Qb]ôÜUžiiRތ™6ÖÍ_šűÂä&šYz5Rč‰B Tސ0Ł|ĄPÝLŠe˜~ż˛Gqş QD\>ü9¤˛6Ůç×”LŸ\ ÄTŤ[Řáą@ý’DŃď÷ !cČƒňĚÓĚ ›L‹É´{ëäM CÖĂuŞT9˘+ĹÔ])ĹÚÚ:—/_ŚRŠÇqAş¸ŽËáNJŘQ˲ŘŘŘ@JIF ‡#lۢŰíRŻ×éőz´Z-˘(âŔôz=’$!IlŰćĉű c``°ó‹`(|UĘ ăé‘0ýW•^[~ŘŽÔə•œÉK“Ô„,Qz&3[ä1×)é"rc\*R„hBj„NŸĎ‰”´4)Uͨň~ŠÉç,~a’|yŹvy7˛ŤCN l”ČřŠĚ;L§%K˛ÔłQ×ĹűžoÂ"ő‚IS”äžť&lŽ˝ą"ŠÓ㐠‹5‰g ¤caY6Ie¨!c >8+Žü.hJ˜ ‡}ŰĆóüm'´ Ŋ^çůäť<–œĺA}¨xn<xçwšző ž_áôéӜ?˲ˆăÇąFt:NŸ>Í`0Ŕśm67ť\¸đgϞĺ•W^ĄVŤŃl6 llt8xđ /˝ô2Ăá$I8pŕőzűî;nŽĄÁ.R2ůb_Lůä$BžDT¤ee?b&ei;os]¨bĤTŠTZ”żUGH ČҋŇR%2E 'bRuLž‰DĎ$*ĺlHńšJ~_šÍÍÚ$űŒšRŠ‘Ůś”H..1Ů{Ľ›ې[ď˙X嗬œ°Ÿ”-M”•úËäÎ칐RŢ5S_Ľacđ˙}oÄ çF‘˘Uľyŕ°ĂR]rfÉâ‘#.ŽÍ.ľ™!c îíbC+Â8 čv\zżľ„X<ˆOdĽLÓ(„`¤^ żÇ†Őc!Ž”źRCßJĹĂś-jľ ׯ_ŁZőąítęŃh4h6›,..bŰ6J)Ž]ť†ÇqX__' CNž˛ârMvx!~‘´Ľ]mO-˘}ßç‘Gᡇ¸ĽgĚącÇhľZX–ÍÁƒ]žűÝďr˙ýgůđ‡?„”’“'O"„Ŕqž~úi˘(ő’ą,Ľ óA@nň™$ ŁŃˆZ­fŽŤÁ^"‹r˘icÝ4ÁHŤI)ĐDš0C2jŚ"ŮuAFČ)EŒR*ŤxˇqîĽT%%rߜ ™Ĺ‘¤'~6™iî$OgŐIĺœ$ *ڤ˙)5"ݡŒŠŃ‚‰şŚx8#‹˜Dp+Š`ëÉ6őîŒ'y‰Źă¸Ź­­SŤ%\źx)+‡ŐTŤ5úý~QVŰl6¸páîťď8.\ŕ̙3,,,ܕŽu˝›Ä)@ĹnH*.řŽäHC˛1Pœ\4§ !c >¨Ťa툇>DŻŮ$J"VÂkźqŚOăü?ňń¨Đ´ÚDƒYŠpŕĐQŽ[xŽ7ĽŒ ™ˇÖšz˝>5Iž]d{ž‡ëşÔj5Ž9„˘0ňuœÉA˲đ}ŠĺŽY´€0ůÖˇžĹ˙řă8ćŘÜ{ŚđVÉȘÜWϧ|‚ŇšDĽ¤Ěă%÷JŮJbşĐ)ŰJaÚŤ´*ŢsÂ÷LÜZrCs)Ś}ltĆôţ-"5͝ň˛Ą´Ý2)´…<š.%ÚÂ$é‰1ŻÎ˝aDJI91Ö:3ýÍKžDŠ4ŞŘ×Ý!c<Ďcyy™JĽŠďű8ŽC­V+źĆ„…jŚZ­R­V9räJ%(ĽŠëĎnÒđŘ}Ď_°SÓfĽyíҘł]|'ćÚú˜O<°°˙ϤĚ7.˙*•BČbÎđĂ4ć2ĆŔŔŔŔŔŔ ˜g÷ú=ÖĆB˛ŮšÁzkĚŰú ?ć/ă)vu‘ű>‚íy\ŇŤ.rÂ9>%×/OźĘ?ç$L^Ł?;áʡ,eÉ-ۘ}Ýě{m÷řźßËŻ}l*ńdqd°{PJqăĆ VVVXYYáŘącŚý îů¸˜“%:SƒäĺCššn™Œ)"ŠËę‘Ó0eË4ԇ‹*Eϒ1ĹXJžœ”›đćă—*ŠpĘÉH“Xë2T~žüˆžŁŕa&œ[ddČÇόŕQJ#$Y{ĺ–4łś˝sŢd‡áş.‡Ľ^f é fł™qSŇ`ii鎍=Ž-řÄŸš+xýJČ8[j^ť<˘ę(~ô:KukŸFZEý~ŸÍÍMşÝ.I’öŰśM­ś@łŮ$Š"Ν;ǛožÉŋY]]e8P­VYZZâĉ<ôĐC|ôŁeqq˅ c``````€•p᝿â{ß}ĽbDŐbăa‡Ľ ĎoŇ ;Ü×X¤Ů8@/îóW\äpoőĹ-¤‡RŠ^Ż¤Ş—ÍÍMÇĄŐjŃď÷évť4 ŞŐ*JŠ"Â:WB!PJŃď÷é÷űÔj5Ćă1RJ8PÜaÓZńÖy$öŹéb’$ôz=,Ë" C‚  Ýn3p]ß÷Y]]ĽÝnÝn!ŽëŇnˇ§T9ť;Y×ZłąąÁŐŤW &1Ä`őÍń<N§ĂÚڎ뢾ŚŃhŕ8ăńß÷QJ1 ¸qăF‘ÂÔď÷iˇŰlnnŇétĐZă8Žë2ŠŐj8p AťŽ‹‚(ŠðHa‚ôŽixžÇp8$ CFŁQĄľŚZ­˛°°PČŮ vÁűýďŸ7ß|ŰśyńĹ‹2ƒ{Ó)K19A˘ôÄ ˇD¸čŹÄ(ŃbĽx"Sä+oÁ„Č i"FL{Ňä„P™Đ3ʕ›:Sĺ*•9–šşě S˜ç^N[=cräĺHů—,Aɟ&3ň…tÓ}݉qDeîÉűmÜv$8î<ŞFĎM}ÚOs‹Ë—Żđƒü׹łřqßlnnň ßáŇĺË–´ű•˘lůVxńĹyńĹyâ‰'řĽ_ú%Žß_Ɋ†Œ1000000H§ČRŸĐ„'Œő‘2Œ6š”\˘ťŇŻ÷^gÍîq}°‚ZŤ1ě-qÝžĆňĄ3ÓÓÇĚď%Žcâ8ŚŐjŃëőH’´_Q5'Nœ Cl۞RźäfŽ•J…ńxLŁŃ`ccŁ Z„H) ‚EJIÄq<}çVJlŰ&Š",Ëb0°°°€ă8„a˜Nˆl{ŠÜÉ;ůűě>¤”<üđĂ<üđĂSýČŔŕŢŽşPĄä%DyZR™LIô¤DIM3Ľž<1ýZ°ęr)ҤdIçĺJS"ő["ąÎ˙~Î9S&mrs_QVȈRŚSţ_E TA×ĚŞcŇmIDJéDh ľŠÉW’$ÄqĚŇŇý~ŸcǎQ­Vą,‹^ŻÇ‘#GÐ8ŽŠ×ëqR­V‹RĽv;•+×j5†Ă!ǏÇśmđ<Ż u,Ë*ţ&MYšLÄă8.ˆ˜Fفëş,..˛ąąQ”78p€FفeY…ŠĆu]<Ď3ÝünžQ%íƒIĈRбؓmo°•‹Q唣’ŠŽ*™ăćç~2I‰;‘””1sÔ%ijô¤$I鉒Ľ(?Ңˆ–Ö"%Fdޏô$Ć:%Â%–%R`[ՊKĹwp] iYT}ۖt6GŹu†tză0)źĺ3çƎŔTړ!î&9ł'ຈlÁjH™™ąQ—É–I˛R’{ź”ˆ˜ÜÔˇxŹt”'ĂŁšż,™ éM0]P4ľPU­şÇáCMj5ŸŠďRń]jĎłS.[â{žkaŰKZ¸Ž…%ƒQ@wŇ鎚ą>`Ł;fŁ;f8 cÂ(!Ž’$ۋ˛1°ŘŔ*y@ËRôwŠÔŤ00.‘<;6M6Úívš~ý:–eäúxŕş.Ýn—0Œh4xžË`0ÄśSžßPŠř \*ně&rď´$I eH~MËoběWH)‹›'Żžú*çΝŰ⠓÷ő÷›¨ôŐŻ~`_2†Œ1000¸{Ť D­NrđöćŚiƒ=ˇ(BRŤ,Pó§MóI’ČŁRKK‹˛ŻŔ{Yl—M"wbo _ îÉÁCˆzaYŚ1˜ć>&Lo=ńŒI4S>,JĺŻS†şjj¤ÝfŒĘŁŻł’Jž+e‚F/FxşKMĜ9|‡śYl-ŕ:–maY)$˘ŹţГpłYá™â%+ż ˜ŐNŸ++}Ţ˝˛Éľ•˝!A¤IE’(TÝ]ö1хaošž”śÖ"-Ű’ŠŠďs’‘:ť5jK)š~ý:•J…0 YXX BŞŐWŽ\áĐĄCŹŹ\'Šb´ÖŘśÍ`0DJY”ŐV*)ńż›dHž4Ç1ŽëEQ–6”ú›…aHŤŐÚˇ„ŒmŰ9r„z˝Îwżű]^{íľ-×ë4}LĄ„¤RŠźoňëŤ_ý*Řó%K†Œ1000¸K°l›¸Ń ş˙~Ź+—ă1EŃšÁ=†LłI‘%GO˜Ń3jš “e‹(ˆš;#gvňŽŁšŤo°×÷bzŠĎ=UÇH‰ö}˘@6[éďŘą÷Ľ!Q“ĽšK­ćŇ\đcĆaL+ĽčVև…÷ŠÔšX%Ź­­łšqƒˇž˙6žëŕW< uڋ-.ľ9rä0‡-ą°Pò$]”é˛SŒHŤ‰<ßâ襇,đčC‡ Äq3…ôűk76†\_íqccČp’$ ŘŮ6tžÜ”ľ‡Đ uŮ÷F>:ó̄węZPŤŐxâ‰'ˆăÇqŠ2TŰś9yň>Ç%Ib‚ $Ž„HU’yůëęęFs‹‚c7$ Žëf1Ď5ƒqœz–AD%ű–ŒÉKŽscöźD,o×rz”´daź˙~ń•Ż|…‡zhO›ú2ĆŔŔŔŕ.]ˆ°,ŹzřąÇ7;¸/żŒ0ĺJ{––#ÇĽrŸ;Xb –-H•öf!gp×F×I/ÜŤ$ÂTňŒ‰ë˝Ţ5Ď#xěqâ?Š[ŠdF°ćü-uŞ")7íM2ULţ{ŽVIŐ"™DĽéAR€eI\Wâ96Žka[6şKŤQĄRqi7*T+ՊMšq‰ëH˘8UĄÄ‰B%ŠsoŻňŸţâ<*)—ţ¤DŠ#‚ d06સc[xžG˝^ŁąP§ŐZŕĐáƒ_âřŚâŻł=֚ TaD§ÓMçR"- ÇąiˇÜwâ0gNŸäŕÁ%jľ*Žë⺊z$/obËBYŕyŽkąPó8r°Vôď8I莭ô¸tľËŢYĺڍ^q­T3diZň%Š6Ţé^§”˘×ëŃď÷ąm›J%%\Ćă1Zëěűd~vŕŔÝî&QŮśR)ąäy.őzj$oŰv‘ hY \ż~˝ř|Q!ĺ¤ÜŚVŤĆđžď3 ‚€JĽBťÝŚRIIą^ŻÇ`0 C„¸Žƒ‚FŁQ>űßűŢ÷8ţü_¸y¤ÍNâĹ_ä•W^áńÇ7dŒ!dśç!l›ř‰'>öxzA1~{g•/q|RKĹÎććÔÄr'ȕ÷Cʤ}ďŚ+Ĺ4—C‚ť oą˜›ˇ¸K7>† ӏ îĘhĘžS`iŕôź_ů߈ţ=úR`Ů6śăŕ9Nš*–-žÍ<}Ȕ_˜LéâŰőz…Ľv•ĆB…ƒ‹5ęußłń< ے¸.…š! JŰ^Ä$*FE%âŹdt›{ˇ„QDÄQDŤYÇśŔąaT2Ë͓´.%fĎ?‚‰JU4IłFŹŽmđúë?Ŕ÷=ŞŐ*žď˛¸ŘŕŘŃÜz !3ťřU€NR%NŌF]lŰâęDŤ IDATŐœ?…—*Żsjů8>¸Œ%eANäŰMŐ"QńyÂ0D)•ú˛Č´ěGŁR’Fi”Đ %B)¤,Ĺ`3IŁÚńž.žçáyŢT{l×ĎÓ×xä&Ęeľ]ůçí”Ĺ|n›}É˙nť}ÉĎA×uˇŮˇý‹őőu^zéĽ[~Ś2‘•úúœä—ů—ůW˙ę_˝/BćĹ_d}}ĹĹECƤ°lЧ'Nˇ3a000000؉ŪšÖÜľŠË'ž<_uÓ.’’"eb~›."âDŁUęőĹ qœ*[˘(f81éő‡lltŮčtšrő׎opĺę Ö76éő‡aD˘ ÓHjO0ą„](m´Ň€š,^KIKÓÍ4Ą0O™{ ÄqB Gtm—úB•Îf ĄQ2˘Ź| Ž#@ă8Žë¤ĺ֞KŤuĎuQ*ĚR§4XŠGŒĘ¸) ĽýÍď+Ýë~(ćžĺŸçÍŃv’(Ůn[:+UÜŻ~N/żüň\ÂĽÜ7óç˘(b<óĺ/™/|á Üwß}üĘŻü _ţň—Ůœ“D*JľBlߏ^zé;üäOüdZV(öB3dŒÁž› ߊŒ1);ľĐ3דŰh7Ro"5ˇ­ĘŞĹxŇéô¸zíoż}‰w.]ĺwްąŮ§ß2Š9kfĘ&IćEę@`IÖéŇ;G¨D!ĽŔśd–]Ô$1á^tń}ž2&?ŢeTy<1ń$:AŤ„p<¤×YE‰cŰxVj$ë8–í#„Ć’Ғ€D‰ëŘ!ˆ˘I śÖ‚DčÂ'FCĘĚdKz—CĹn§ŸßΊPnˇ|>v§çĐÍ^/fü˘ňfI}œôž•8żůć›SDŕl˙Ěż'IÂĆĆăń×uů'˙äWů˙âˇ8uę˙čý#žôĽN§Ó™ôc@d&Čšuţ8Ľc#„ŕ;ßůŸřяăy>śöŃ,qŔ1ˇ?aŘišŞ™ŒěÜxşWK ĚX˙É­ ×áhĚf§GgłÇćfŸľőkŤltşŹŻwčőFŒĆ!ăqČ8  MžďcYžďS­Vw°Ľß/v.o$ŒĂŔąuOp˙!‡şˇĎߋ/˘”šň*÷Š<™*I’Ěü8=~++×ůľňŤüö˙ţ°źźĚoţć?ç×ý‹t66ŚŹźürJ=4Ł~ůo˙íżrćô)Ç)âĂ˙ú'?…ă8†Œ10000¸ů¤ů^%…č-éĆyf7ÚŘ,” c°÷E—Î_ĺíw/ł˛˛ĘÚz‡k×Wšž˛Îęú&N0ˆQIJ0¤ ĚÜŇML•2‘?NŮř]ÄźK€Ö0B’X!ÝTS,™ŇDë‰"fBŔl˝fO~œßGórĽôľY ”RxžœQ҈RŹaŮg< đŤ ˆE˘tZš”•U !K„‹@ @É´”i‡O­5ŤŤŤÜ¸qƒńxLEtť]<Ď'Š"ęő:žď†!‹‹‹\˝z-KU:€şH­R*ĄŰí2‹XěűďżżHJÚ ( —;żű­ßž0Žľmţú™ íšdc˜đ×Îúřöţ™'$IBEŒĆ#Ο?ĎúúÝn—(ŠŠńRd'„&íki:•Ä’VŃśÍMžřĹ_ăˇ;%džyćžřĹ_gccmҝçĘM=$X[[csłƒm;8ŽĂh4&Ž#CĆlż@żŰźšdv’8PNRHIšyW˝›EŹn—•<ďqq“ŤŤ.=_ţΜ}ŰüźÝ6oöYć˝ß~Ţéý™HvłéşYČÍíƒĆ\Ô`?ôS™ÉĺË ){áZbΝ÷ŽÁpĚţÓoňď˙čOŮÜě§×D!Rb¤fá˛Ń×:ĐHĄ.XŽ%H…P$u™šŃR*-ڎ ‚€8I¨HcËbőŠŐVbEgąŘĺKÉ, SöŮúˇ“ř˝ôé”ôAŚ‹ćYϒ\EEŠr¨×Qoć4:%c”F–bIĄPÖôV´Ö$y­Őr2J)jľőz!a°°Đ \ףVŤĐëőp‡ƒ—p—nw“z}߯Ç ý~×őYXh¤DeŰÜ)Œc͟żđoŘ& ˙ŕǚüĚcUl ţ֐Kë1÷röěš2;éőşźůćźőć9ž˙ýˇ‚€ Gaa؜_ŰĽXśEĹŻd&Йj&ë‡Ýn—ßř_ç™g~›“'OńĽ/ýs~ů—˙×m˜éš 5+O’„jľŠă¸€Ŕ˛lâ8šçc¤!c ~ˆ ďe2EQ:̈ƒ_ŔĺwSó‰łY;•Ű(˝KÇ I˘ŢW60ŘmH)ąmĎópçž÷Ó;yc ?żý\߼qŚÂâŃnÍĆ_´ń=,WâÖ]Ž˝°íŰhĽhŻâÖl.ýĹ—˙b•x”Lh›ą ‚š>J§IEq#Řś,žLp§L|u™„™ýĺkĚö7G(Ô –%Çt6’ÔFƒNBJ¤%ŃJ§éRf†ÂšvŤ]”˙aœzăčTI#3BJ*@‚Ęô5ZiT)š{§ę”„EŹľeYh­iˇŰSnY’fł‰Ö:‹›;v¤´#ş˜÷”ăŞs…ĚŹ ň{=o¨IHŚ1‰VxR` Í8J€˝IĆäĆť7nŹpíúUÖÖÖX_[c8ě3\ÇÁś,Tľ:餼›-˛|ă%/‰ăf}BlۖyšRš—Ś—JËÂqźŇ>+şÝM*• ś}ď(CĆlKČÇcĆăń–ÉČű™¨Ďnă‡íÎmŽ,ň}ŸJ%­M/Oî&ídH™r›ĹqĚx0 ͂ń.,@gďr…Ĺí÷Ő(ŠH’ß÷ńŰ犈aśmÓ^l°PľnkÓR _錘ɦNŤ.ˇ7S3Մ8ŠëćýD§eFa1FÔI–œ“z×č™q]Šll‡ÂŔW+5iŸĘ-ˢŮlĐh4Śö{v’>/Ф¨˛żŽ“RڜŒ)oc;bë˝(âÚ5Ił"ˇ¸ŃY–ŘVÍ´WĆ Ďó%•Sš@Ś@@ĽZĺúĘĘÜńeE=„$4[M~ëˇĘDĚŻÓétB~2y9’,Ę›Ä ى˘)$Ż˝ö:q’đä“O˛´´tOU‹†Œ10000Řv!œËng/˜;ąŕ-_Œ……Zd<3‹ đÂÂÂm×ńꏎ>7čs]ˇ¤î•6M'nšZ­şíçÚ­…PŒév{ŘśMĽRÁuÝ۞„äňlŰśq]÷Ž,Öś›°ĺđ}ßĆ…Ŕ˝F’$ĹÂŰśÓXT˲öT?ź]aËDyUyZIꉑ•7DQ!ť]t]÷ŽŽ(Šˆ˘čŽîVďTżˆ˘¨8çďu"žÁ’1‚z­BÜUœ˙O+xU—îľÉ0!ěEŒ7ct’*UŚ uE)iHluĽeŇAK˙ŮW uę%éľÍą­âqQč J‰M3Ç~Bƈ"áŠü˝LÜä$MŮe4ă{“E˛R  Š"Â(ÂśěTů˘–mSŤ. Ľ…F'ŠBD“EykÁěU'ßó˛gĚűď­şˆOžw>Ěűy똰U8oܖĚĘÔqďéú7§ T’@kÍ^TÇH)‹ň­~ż?™÷d„Čââ".\˜JěşŐřÔjľxć™ßfyy™wß}—_űľ_+1ŠŒĚH/11ü͉O IĽ†a˜öŐŃp„_­dFžÎž c````°eń0KÄěĆżź$I8ţW$L”’ręPވH’„+WŽđꍯrôčQÚí6gΜ™šD•“"rÓÜťMĆH)ńýĘmľĺÎ-˘4/^â˙đhˇŰœ={†üă8Ž3U’Rn›ň$S)şţéŸqúô2<ňČ\‚ä˝ŢźSb&oŰśń}Ÿáp´g›qóÜsĎáş.O=ő×řÎw^˘ŮlňĄ=’ľĺivi‚ż—ĚťKvĽçď+ŻźBŁŃ`ii‰żü˿䓟ü$őz}ŞŠlrýěłĎňŮĎ~ś0ăB°şşŠÖšƒN)ŤrÂ÷üůó\ťv§žzęŽËŇsóó{Ľŕ2%}ďo‘YŤU‰ű WŢZA•B¤$Œž^¤k‘E?gőCšNFć~ť‡"ƌ„Üş/Œ\ŒĆcP ϖS×2- ÝÉuŒŢş=1ý=ﳏĺ„Ňf§KżŰMýj2ŁŢjͧVóiľš™R§´ßŇO‰G JĽ‹qĽÓr¤˛ŻMůÚŹ˛ßőˇ{]~˛;çňÎĐUťqn6›,--ŃétÇYżHŻ{GŽ™RšŢÎ\ç™gžáôéÓ\¸p_ýŐ_ĽÓéLČ)!°´N z)“0şT&:.ŢRH<˜rť.őz}O¨b c````0—4xŻwtŢë"۲,–––XXXŕúőë,//óúëŻÓď÷i6›DQD§Óáá‡&Ţ}÷]¤”œ={­5oźń˝^óçĎł¸¸Čúú:—/_&Žc’$áŁý(/^d}}ń8ŕé§?IłŮźŤ“5Ľž_AJąm;”'&;ľpŇZ°šŮeőĆ:÷ÝwĎ>űGœ9s–×_nˇËňň2A°ššÉ`0ŕCúZ§$M€ŕŐWż›ľ•ŕüůóÔëuN:ÉK/˝Ěâb›ÇœÜő>łWT19ĄxîÜ9Ž^šFcĄĹŰ?8Ďâb˒\şt™jľÂââ"Ýn—jľZ9ˇZ-Nœ8ąg˘oF‚í֘“$ ďžű.‡˘RŠđúëŻsúôiŢ~űm\׼ŃhpölÚgƒ ŕůçŸçCúŻ˝öQąźźĚłĎ>‹RŠ_üĹ_äęŐŤtť]}ôQ„źňĘ+ŹŽŽ"„ŕÉ'Ÿ,Ň^îfߘôSaŒš÷#¨×źbÜ.Í…ŠlĆoTäéE̐.ŮKĹ<ă\ Š9qÓ¤¤Ćx4FŠÇI¸şřˇěCćŁçŞ7ni=ď9ĎuXhx<°˘fo–¤ŚĽ"Ó{PxĚe$RŽRZ#Eš $˛Ś‚”‘bĘŔw'š†ýF@ćeóŻkzŸ'i)×§?ýi–––xöŮgÓ%ňrtAłŮâƍ•â*Í;năń˜ˇŢz‹úO˙é3ÝşřO%Š  ƒ€DŠŠ~ôčQZ­V‘t—ý†Œ10000ؓ„Ě­"Źwr‚“oŤŐjsřđÂ0âäɓüáţƒţ€ă÷çÜšsDQČŋ9zô(ßëŻh/śé÷ŹŹŹ`ŮŽí.źƒë8|ďľ×xú“Oóâ‹ß!"Ž\žL{ąÍ_üĹĺcűXQC~7ŰŐśo˝ŕލɣ֚Ńx”•*9źńƛüů׿ÁňéS\şt™őľu–.á86_ýęW9}ú žçŇíöpťˆ7_[[ăľ×ÎqýÚu~îç–ß˙ýÇ?ü‡˙ŕžLxsŔ|ńqŻ'ÝšjăěŮűůƒ?řŽ9BÇ\ş|‰ő 6:~ú§Šçž{Ž÷ Š"Ö7ÖůšŸýY3ćd~JqœÇ QłąŢáţđk|ţg>ĎŰoŸçňĽ+\šr…3gĎ0 ‡#._şÂůóçŮXďŃçőýđÍo}Ľ4Ăáˆnˇ[”@YŇʇw˙óMćłŸ „ V­`ĺc÷ܨK„LFśé[“ łž ebdzlŃ GAj6k‰|ľ^$)ĺ$Ě­ëł'ۏ™Yš’ăPŤz¸Ž˝e§EFČLŢ;Ý~ŹTş0VşX§Â@‘F\‹4b[čR9ŽÚ=/”œěÍoźĚUe‚m§o„Ü bĽŮ*ţü­1Ż_ QZłXł8Ú˛iW÷t8° ŠşrOŽ!šbuqq‘|pĆ(YŁľâÔŠ“ܸą2g~)ś\×Ađ˙ń˙2eö;9."%ö´FjQ\3˘($Ž“-Ţ{RJîŕ~,Ű™š2§1ć{„Č2ĂŹÁź‰É=܃ládsüř}´[‹:tˆĎ}îs<ňČ#ضÉ'9ur™ŃhĚĘĘ –OćčŃcŠş ›âYŇâńÇçŕÁC\š|)->üĄGŠUkˆť|ů›LöRš~żO­Vĺo˙í_˘×ëaY}ä1‚ d0rěŘ1>üásůň•Â_# ƒbâ4Žxó͡¨×k…â¨RŠň‰O|‚VŤuń{ďÜy챏pđŕAŢxă úý>q”đń˙(ŸúąOqćĚY’XŃëőGlvş:thĎŠbćőÝÝÜ?!śeąŮéŇŮŘ́”?ôŽíráÂ;Ôë <úᏀŹ­ŽłşşFť˝Čh4ćč‘c>t˜8NX:pĎ˙wŸçÔÉeŽ]˝Î÷?Č}ÇOpŻäýĆ\z_SR˘‚(—5l -dž¸Ô7%aTń%ĐԌGɔ˛”V8ś˛ČčܓCl-1ʡqłžˇ÷IJžh¤Ëś ˛T)ú–‰Ö„aB˘ Qš0Œ‰ăxJk˘XMElë™ýš<jŹP´ÖŒF#VVV † ‡#Ö×7ˆ˘ˆk׎qéŇ%Ž]ťFŻ×Ł×ëąąąAˇŰ%‚šť‰(.Œů7ßěó‡ŻůÚŤczcÍ'~äD…ož=b­Żś{ i)ś_|U*jľ*őzĺĺeŽ?^řŞĽęV;+ŸbI˘H’¸˜ƒ¤Ç#LU/aTřEQL„ ‡CƒQO]łň÷9zô(Íf“N‡0 ą, ßß;1áFc````°'Č˒¸Ž‹ë:¸ŽKľćłĐ¨ńŔƒgšxéžńođÉO~ß÷PJeuëž~úiţäOţ„ÇSŻ×ŠÖjٝ:•J•JĽÂÂÂ7nÜŕ˙řéőz÷lB†!Z+ćĽSěŢń×qxřá‡ůéŸţ)jľǎĺĺ—_ć?|őŤ<ůēŻźň2ëëüżń7¨V+üÇ˙ř,RJžzę)}ôQžýíoóđĂqńbZ"śPŻSŻWďČ xg Ś4ícݐŽăP­Vi4üżówř—˙ň_˛źź ŔóĎ?ĎŇŇŸţô§yřᇋ8ŐFŁA˝ž°§ˆ˜yőüťI(äńąű‘ńű˙ďżăůçŸç駟ŚŃh „ŕk_ű­V‹Ď}îs|ýë_çŮgŸĽŮlą°°Ŕ`0@kÍĄC‡8uę_űÚ×8{ö,śmóo|ƒĎ|ć3|öłŸĺ˙ři4=zôśMÁwzbüZöőU‘V3őGI˘xš´(˝FLœx§4šę‚ÜnWL' •˜”íƇٕhG’¨•$™‹B˔œI-âŽĎ÷­ď™R@ăń˜0tę˜A„_Аč”8n4؞ƒmŰōÇvR_$!Ńq’’7:ý´iltÎSM?i ńΏ/Qqůňe†Ă!ýţ€ŃhLǜ8qœˇß~›ápˆăxEɨmˢ,úäɓ,..Ţ5öDiŢş3'ˆĚ?çc÷9m:ŘÚćP]Ňë Š´žVŤšĹ‡î^ŸGN‡Ż|ĺ+ ƒBYŤŠ’5Íůóçyĺ•Wśí˙Ű̞ĺĽÔT)Z’$AŔňň2gϞĽRŠPФ)J§Nâ~á ř[KO B Ξ’ěK•žtéť.MJőě,ˇ ٌ10000˜‚”Çqˆ˘čîËëĹÜkŐ-ţćfúfš…F3g—š~ý:O<ů#ÔëŐťžŚ$„ I4ÝnŸĹĹÖŢQt¸.Ÿţ‰OŃjľîpá$˛˙ç›Aîf[†aDż?Ř%uwÚ÷>fI˜ťÚž"¸ ŕ~ńÖäńýؖš\~Ż$wźˇăŘjՑ–U)iPz_ZĎťŒÍúšdę‘[]#ŚŸ™/0ŽHT‚çćIE B§1Mďă4?fK<×Ás]FŁ>Žëd 1žçRq%č€îfvűŁQČĘľ Ξ9†ÇÄą,LyËĽJEœ6Ą5ȔĐڍŠF °>źísG˝ŤçŹk >zŇăřx˙öW#âDą9Lřúš>Kux|šFÓß7ţśK˛ĘɘӧOoźńĆÔăŰ17{|öů8Ž‹ôşS§NąźźLŁŃŔuÝâFSłŮź' Éí`Čƒ-5Çqî!ł ŸÇśmŽ?ÎńăÇďéWÁ`0ŔóҒ–˝°@łm‹x`ÇH”Ý&b’$as3­ëĎ%ňŚdçPž|Ż"‘…,,,đя>žďŰÓśmÇ1}t?_C$´ZuŹ˘˘¤ÉJJ„ӡ ćALœĚf¨šçZZţ4I’Ďq3ă\ŇŠ(P–ĆşĂî5{nĎ*glŰB DÔŤi˙őp‹˛¤(ŽłRAXX¨QŠTžÍş ˆ×tfޝĚń‘ś›V„Díą Šť}m–Á˙x…Ÿú—Ľ§íĺȔŹŮK ˜›ÝůœŤÜˇĘ㥂|ä#H)9wî\Zږ2JŠŰň)+›.ç_qœúĚ!xđÁ9}ú4@AÄädLŁŃŘS*ECĆleYT*•L˛›Ů!‚²,â8b}}Ľőz}OÝ1/„ĚÝ,c ‚€N§Ăh4.Œ˙ vžŒŮŽdÂŃŢ9SŠTЉżiÇ} ­ć-pGŁ''ÍÄ>FOjÄ4•“Eo#Ż3˛g0§ŚéU Ľ˛˛ !:ɗóL*$nˆšŮX.Ľ…˘($H’tÁœ—)YΙ IDATĽTfź*łd¸Mƒ1ÇOÁĆfG(5ÝçËjť‚ř‘“†řa?+,!°çČ;>v{mžS&cňýÎűKŢw>˙ůĎł´´ÄsĎ=Wô ˲n™ć9ŻMrEˇÖšGy„Ó§OD eYS^2­Vː1űăbZŤŐ ™ßÉäNšYLźˇ6Mĺť6IłžŢa0QŤUń}ʄΠ<ŃJGŁýţĽ,Ë.&Xűi’şÚ\ďťŔ^9ÇóńŃq*•JĄ4şčaƒ=z\54› ¤%§•ic=)ŮĚ˒ČăóŚU3yôőlćRž-„ „1qŹp=+SŢ(4ЉůN„ăΰ2ŰÉ$‰I˘×ő° )–-B˘4Ôj5´Ö\šrá8âعøŽ$Šq’*cRrGn%#EĘ%Bí9eŒÁűƒçy["ĂsĚ`0ŕčŃŁ|âŸ(ć–çΝceeĽ¸Žç„ĚíŢčÉŐ0ívĎóŚHŸ)ň/S]2ĆŔŔŔŔ`ß2Fƒ 2™tbfďéÝĄ4i`4&wůם´ďóíśËîßí~ćŰiťę3ďĽOěÄqšÝ×Üjßś{M™0œí§ł%űՊëšY!Ќo 3LQƒ$f9,,0óKɄ3™ŰŠ)…Mę;(ƒˆ( ą¤Äľ­ÔsEĹë6Ƃ˘hŞÔ7çQCÚ( #z˝1ŐZ…$Žq\$ÉT–…c N-Öç¨a$ŒĂˆ0 ądůœČĂ˝Ó÷TZA˛;ęť(Џ~ý:ZkĆă€Á`X|îv{‘áp@„ŹŽŽâygΜfss“8Nh4 †ÄqD’$œ={?FýwţΏ6ˇýúíĆQ×uˇ$$i­‰˘ˆjľĘŇŇý~Ÿ^݃c ´–>|˜vťMĽRĄÓépőęUúý>A^0šâ°ŐjqřđaÓŹďJĽ˛EŁ”šň@ËK™f‰rCĆěyäw5\×Ývákp[KsĘs€IʄiËŰ!f60؏}Ř`˙Áq,ęľjVz4á/Śź_JdD6ÚgĎ͔0é,Aˆ’*fš˛™âEtFŒ„AˆŰ•$h d;iÉ͈̔ʋ­Śˇ!eşŔ­×[¸YÜłçůŮ`r›ßŻ5‰Ň“RŹ9„&‚ÔƒF¤Qó*Iv帅aH†źóÎEĆă1‡JKŹ”˘ÓŮduuľđĆ„a„mŰ$‰" Ă,A*ÉĘÁvŸI’„0 §nÎX–U”Ţěć¸t;DĚźůĘźßsb$˙=˙˛m›z˝ŽďűźőÖ[h•`Y’$QX™‘ÖšĺĺeNž<Éx<ŚRŠĚ˝cŰ6ŁŃˆ  Lů˝ •Wć)#„(śľÝM CĆě›Ĺ„Y\ě\›šś40ř`­ ¸ŽM˝^›,Z š%#_˛ĂŹßgR{”˙y”ł.H™2 łÝ• C‚ @ ŠW+¸n@ĹÉł•ŹŢZb3?Z{ť¸”’……‹‹AnÚîďľÖˆĚ#­œvŁľĄqlÇvŠś’rç=<Çá̙3ٍ$ŸńxÄ#.\@)ůč…ĹqÉۢ?ożœśT~ÎśíŒ8Ss÷5'dŞŐjQ>KĘ2ĆŔŔŔŔŔŔŔŔŔŕFƲu˙ĂśmŞľJŚqIe-Z'„ă!qN);„´‘ŽƒëŐ°l‡YýŒ.-îóÚĽŹ˜¨ĐĐL–ˆéOQŹƒ4ŮĐąZ)„Ö lr+ŕ›—ÎÚ窘­}ł( -yšÜž’@gą× QEé"۲ŹRR[ş­8I˛Eą Š$ě0qŠTŞn‘RŇl.PŻ×ŘŘX§RŠaVÂ˘ąŹ”ŕˆă8K<ŒąmŰśłDɄ8N2~‰ëş$™9ńh4Âó<'M÷ËÓ'sŇ '+lŰ&‚, SJm{MĎŰÚó<._žLˇŰÍČ›—¨TŇr)!ÂŔw0d¤™˜"ź|ßGk°,™ůŰ8†Œ1000řaZœĚ^p vłľ×ĺc4{¨fďÄÜ˝ĹáěĎŰ%(͒.ĺťf÷î¸ÝÎXhŒŹďíq*/Ě yš…‡ÉΒz­’*Z’ˆ(g ”Tń"-‹fłÉţčňŇK/ą˛˛’*âˆ0 pÝĘÄÄWčéčë3ŕ-ĝJă`ŒBăť6ž#҅$Tv %–•–Y˘0*’iBdöˇ5*/QJtšŚŠ‰˙Œ.bśÓů‹ŔqŹ,*U%*IÉŹl1/„ŔÖVąŘVID"a¸;QÎ㠔˘Ůl2Žˆă˜Á ëşŮw§(Mň}Ÿ(ŠhľZ…’˘BŠlć{óäÇśÜgr%KNŚäsžYo—œđ(˙ LJĘIYqO˝žŹ~I’¤ř›œźŮzÍÖE_MÉ-k˘K{ÍTşä­IÉ>ollđć›oâş˧NĐl6đ|­Ň8í8IżŸ;÷:ßúÖˇř˙Ů{Ď ;ĎěÎď÷OŤŮ˘ŐjĽ˛ÔZ+TŕĄ,!$lŤ.I˙ŤwćgIÔ T´š-„†Ţ‚C!c˛ąbhŐö^…­B (•Џm’l'ěs˝Üu˛ďŚsB'm; ­U ÂHü -đƒ)̨•GH˛YäCšH#Dhƒ€ Ž„0¤Dˆ(赌(hˇLó}™ßaĆ.Ś)+Őj5M­VŁP(PŤŐp'Ýť ăF*uÄťÚßęz^•ˇó[śžVg\˛&÷Ý~nśWť´“×&íGÉĎ$×ڙ ÚÚ×ßŐó<šÍ&RĘTA)ůýí`ÍŰUłjôŽgűn‰Ę­{ ˜›ťŠe™LNNĐŰSÄql‚@ŃlśâűÖ4›MNŸ>Mä˛Y˛šŽăbfTŠ•09ŁQZ“Ífş`L׺־Ž}\A€$‰JuušezÇú;|˙-ŚípÍ7r[Š7ďžE‡sňVäpIŸťaČՅí1‹Héw:|Ôb šćžÉť˝×Ť­ ŕöLŻţćçG}-ŢČ˝ˆ]žçÎëf7mkŹ4RŠśŔ@ßÄ{{ˇc÷qĎßđŹ[IvƒRË2Éd3­mŐ†iňŮĎ}–ŠŠ˝üéWţ”­gŒŽÁÝ}l[:‚í qTC43iBĆjJŠĄ^ÇÔ4[+á°QHiÄž…‰ÖQ‹‹4˘–!Ag°Ýžnw ‚“ů ”˘V÷¨Öh A °Ź JE•8śí UÔŽŇjŐą,Űř˘ĺy„Atď†a 1˘'"­R„4 ĚܛuF úúúŇŻŁś˘-+‹éóčééš%ćţ;i[OÖn{5[űˇď˝íí‡I%K{R´$€ĐN|0í yňłU%×isř×UŞśĎˇëîoť,Ůśłd7•'­Łżkš&ĂĂCiŤQ­ÖÄ÷ƒ89Ł•J ”-Ëڒ•׼Z‰ô ŠH›cĺŻ.ÓľŽu­k/K,Ó4°,łëř~ČNÖßŇ`¤Ý J䨟ÜčĘPčcĽ CEŤĺašćuŮü đâžpťčp‹Óŕ8ÂíÎ|×xWĎ.ÂXIĹHů śW™ŮśŮᘿŰqęŽŮ{ß%™›!ű1{Ji ęÚ6ŽeÓ1P’Văiő&śĺ ĺÉ(ZŁ…@ŃNޛđĹl!IąLŠéT2{ žQĄ˘ŮňľŔW‚Íş@™9<Ő¤V/‘ĎJ,!A€‰‘V<¨XO{ˇ НĚ2 ¤x^ŔÜÜ2ő†ŚŐňbijČşY2ŽK.—Ăśm¤R ŁbÂ0ŽüU1(ËW'D­†‚œW#TC‡h;ZĽŘeˇŇ~q=xąű5&ŻűžŸ‚vL†Űž×śˇľW&Ŕ‰ai%Ž"Sü”‡eťZR˘B”Tđ´5B|ßguu•ĺ啴ĺŤ}×ŰůÄxLűülcśWO&>Aú›ŚE*ꍨ2M…!*‘H¨ˆónj'W‚‰xÝâÍů`&bŒéZ׺־𐍲ź' ŚˆÜ\'Ěś-fGv¸˝"&Ťîó˝Ć*’G5ńý VA ]WAËĺbçj+ËővcöVëéĆĺ\ťś]V7j‹ˆĆ*iIŘj!SQ÷Úcv T>*Ö­g“qlL+ŞĘ‘B"•@éˇ^ŰyL„”$Jƒďx^Ě"#Ó0 ‚€RŠ”Ęg˛.Ň0MjLi1MŹ …jú ŁCęŚEF)Zśƒ6 <nĆ}§]?ŰsîFöˇv°%S’j•„K>ˇű4‰äsŚ$k= ¤”)¨ăy^ `$Ő4‰DwÚFDžl’RšĚě•+,--˛´´„Rۉ‚w" žüÜní×Řž&ÚŤú2™lĘýłĹaÔš—ľPIPűG;u@ňŢ.ÓľŽu­kŁC698\×í ˇ˜ócY&F+u`’ŇÝ(sĎu2Š]ű0ÇĘÂóü­ŹoźŽlŰޑńćgÝ9p#ŕGŇꆪƒC řEŞr#Ď´Ëcňţ™iš4›­.łĂÜK’(Žcă8†iE<)xiWŻ×ůîwżËŃcÇRî!%Ň0S Ft´ŃŃF!Ł;ÂP ŚńŃ8ƒ˝†űA€ëÚiE€ĺd°ě ßËâć"nĽN!Ó XpÉfmL#L[˘•Ű–hSÜŚ´$A‹HSIЈ3'Ačř>ŽăRČçc€ÜŽŞ Ä4[8­&Â÷Č>Ą4 ƒŠ‘%Ô Ď˛‘"z.Ś”(aüPέd~íÔ&˜€'ťľFíÓ[UťíŇÜIuKéçäĚLŔ›Äßi÷m’VŤ•‚;QőM‚okŤŤŹ­ŻŇl6p—|.‡Fł˛˛BľRcmmĺĺe††GČvŕŠŽ˝$a˛˝Eu;˙ÍvŔ¨ýů$Ď.ń’veŤvĐ4Q¨J~Ś˝•vëlË"_ČuÁ˜Žu­k]ű8şQĐ`š2ux’t˜Ö!śČFˇgH:3PéĎ "⿡e{¸HMLÜÖćÂ7#Ţ׏YDJ^wŕG„‹ďíů%DŽ$ź@şó^:„ŰžˇĘ0ľÄ‡8n}nďi÷}ŸlśpCdGf.Î"Í&ŞVƒF‚ šnśƒČf1rydlěŚŰgv~&Q럟fVPÚ4eÇŁÜíůu8ĺJĄ6ץźa;‘:J EDßÂ´Ž `şă´űź5 ‰R!Z›]ŔqŰ Â(Cî86ŽăD'–?Ż0 €+• ?xúéś}_`˜6ŚéB;#JťœľĐ)"ŁcAieI&Ƹ˙îC<üŔöí٧7mŮd26 ń}[؀@&šŢ1ßcÓo2aŽţ˘ÁđpŽkăXa˜ÝúúógűŽ“÷ęř|ŒBƀF˝†Đžđđ}Ÿ\>ƒOŃďT•f@9Px4˛™­VEŔHĽśžçÓ }\'D˙Í+Ďó¨×ëézËĺriĹgŤŐ˘ŮlŚŕA.—Ű•T8ń/Ű+  ˘]á(Š|koĹNŔˆ܈€ŸRi“z˝NĽRÁvl*•2++Ë4ëujľ:ŐjÓ4éééĄŐhPŤ×Y]]ĽZŠQŤ5¨×„m•%Š›Xłĺó]nc’kÝ^A Č´ß[;(ľýýí@L;#HSRČgČĺrd2ňůBŒéZ׺־†9‘.Lޤ$sľuE}Ź|@š*hyŃ׆Řňq LCƄ˜ďܑn'sK$ ›ÍfŹBđîŰŞÚKßS' ž§őš"P0”—H I,­uGţäBśWžč›?Ä@ŒV!JľĐşaô"¤™‚5ĎWËHNtKŤvç$$˛;ŽS’š•R’Éd޴ДִÍz]QtY[bqKŕCח:߸Żă9Ž}om•`ö2­ŤW ćç`} ÝlFZĄ€14Œ9>‰9š{r ŤPD˜f•˝ƒő°˝||7ĽĄÝĆzť:Ĺög‘üţö×góVŤíNń W:Ž:Z7Áćę[!_|ĄÂh#AGџÖ`„Ów žôŸcNN“l*]`᝞I]ëâü Uäq]! ËÁŇßkƀŒîŕCB"mŰÍĆčs0檰,“B>ÇčH?{†Ůˇw”ÓăLNŒĐۓ§Ď"Ľ¤Ő XZŮŕĘěR¤fx-ÍÖžâd˛ÁvłA+ ¸VbÖ$—ľŻk‘Ţ­eIŠ0Ő˙KŕűؖÍčč†)1ÍH­ "…"Ë20-‰eş„ZĄ…Äp]DËÇ |Ŕü$BŠôo†c۸öÍWŽ ‚ n‹űFŁ‘î“Žă†aÜjc`ĹňĆŃsnąžžNoo/qűëťŰK}ß§T*‘Ëĺ¨VŤ ÇAń˛FƒVŤ…ă8éB¤P´śśĆúú:H)Éĺr׾ý´sÂAV$–´ľ2ˇŸGí•'žďÓl6šrĺ2łłW¨T"Ŕ%T Ńx͆aP,1 ƒÍÍMÖ×6(WŞŃßžďGŐ4m¤Á‰Ĺ—B‡zb;ł›Ú^ÂIăyŢuÜcŰçuÂwă8NźŽ]˛Ů ×%“qą, Ë21M+ĺ’ů ÎĎ.ÓľŽu­kš“WĂ蝥.“ĂśŃ ¸:çqćźfvNSŠ Z-l ňyÍřÜqě›tČĺL„Üh ˘”˘VŤń‡ř‡AČää$ŸúÔ'šté###LOOi?hw˛K—.qîÜ9>űŮĎŚj+•€—ç<Î.úř!ś¸gŇbźĎLKśˇĘeÄ4t”ěn•Îę÷ČčH^Ôó6QŢ÷A­Ł2?ŽĺLD`œîłĽť˙ՍMţńżÇľk×Bđ裟f~~ž/|á ;:ŤŤŤ|ç;ßazzšűîť˲v•‘đCÍĹ5Ÿ—g}Žn„ôg%wŒX<°ĎĆ6flŤu'Áăہ1Ű_SJŃX^˘ţ˝ďŕżü"áěeôć:"Ňj‹„3Aßq‘##´fnĂzčS¸÷>€](Ŕ;(Ť_ZZâńÇgii‰Ă‡ó™Ď|ڃ4ń­‚`ß÷yýő×BpřđáM֝çy<ńÄœ(w”ľš¨J‰`ö áŮ7đĎžAöÇžˆ3>4-D*ËźsđŽ”âŰßú.fťî:ĚŠ“o09š×u™ezzšţţ>YXX`zz==˝œhm™¸™˜›J4ÓÉ`8nŰž-#_íé ŤŠe]‡{âáăwňŔ}w0<؏mY!Óźƒçů,Ż•˜›[aii/(äŽ-6yáäZ\i#Óv#iË‚–ߢ٪†!ŮlŰvp‡÷€żŐ`nu >ËÔ Ýoś IDATÄ@ ú\Ÿ´B¤­„–e295ň‰äuRٲM޸˝ýełTC%*…B`Ć\"z0(Ćm&–eŁľÍÍnÍľ,‹}űöĹGS.—9zôBDISSS˜ŚŮŃ棾fzz:–GŽáyţŽë˙FŻappĽ)ˇY˜äóů´âĽPWÁřř8CC‘\óN ­5Íf“JĽ‚‚ţţţôÜkŻ„ńGĄŁżżŸŒ›!“É`YfZQ”¨%E ŒJýSŻĺSŤUą,ť Ćt­k]ëÚÇŰÉ#% 돞 Áé3Uţük‚ĺU‰ěž=OzĐkuAŁ!¸ś yő”Çö îť§€m™ÇÝ[ew\7ÃçěŮsźđ‹,/Ż Ľäţ菹ýŕlllňҋ/sú7ŕů^dďŢI^ýu|?ŕ‘GćÉ'Ÿ˘żżŸĄĄAΜ9ƒe9č$ăŹŐg=Ju…iîßksv9ŕâJŔJ)`¸ÇDIšHŒóţc7OŮj'ůEúÔKĎQ4˙#’M|›fušÂ M´ˆU)yÎŽ÷-˘LcłŮDkĹćF‰çž}fŁĹŠS§xđĄăœ8q‚ŠŠ)ţâĎ˙’ý쏂RŠĚďţîďsřČ]<öŘßđĺ/˙<Żź|‚7ß<Ë/ýň?Kýb9äŐš­@‘5 žąyaÖăĜÇDż‰!?̈í­Ű\vżŮ¤ôÔăÔ˙čPW.AĆ@ć H+kŔ÷ĐWŻ,\Ł2{…ŕWţ9ŮÉ)Ě6˛Îţn­VăęŐ9~ú§XŚĹŇâĎżđśmń§úgüËů[üÎďü“<÷ÜsôőőóÚkŻą˙ Î_äŽ;‘ÉfřęW˙šFفF1;{•ů‘G9sćM<ČńăÇyřá‡X˜_ä+_ů3Ö76řŢăOđ‹żř_đÄ÷Ÿ$›Ë`•J…VłÉóĎż€ă¸\žr™ ć⅋4uNžŇ0Če&'FŘżoœ˝Łěab|ˆţŢ^r9Çą@CŠRcsłĘFŠJ­Ö$C,Ë ^oQŤˇX+y\Yh˛şáă ßo‘TÚX1 œĚ9×qќˇží;†‰e: Ž“k8Ô×7šZŢŔ´==YrY§cm$dźŇŘ†Ő‘Ě">™t´U‘źŽm”YߨRŞ *ő?Œ8uDŐBFŹĐD3Śi uHŤŐşé’ÖI;’mŰěß? ˆ¸˛i‹ ~§} “‰ZŚršloÜťąDhűu†A6›ĎđX:ÝuÓ1Čfłiű’a; ?D䵒ÁÁA`Kć:"ănŚsł<˝^ݧÜ0–iҨ×XX˜guu…JĽD­ZĄXČSŽTp'%ŁŽ€›€ ôQ:$˘*Ńôâšľć Ëe)˛d˛™ŽŐöóůz ŚĐKxsUŁv~˜äľˆk'K.—ŁŘS —Í’ÉdČf3XfTíU“Ę´Ú,ĺŠŃš ˆZՂ0ŒČć“öohwÁ˜Žu­k]űřťzT*šMÍó/—řŤo:”+QŇWk€ˇ“~ÂV×MžňגzŁÄCô’Íź],%„ TŠÍÍĽR)-ÖJsěŘ1^yůUZ^‹ 𙜘ŕSŸz?xúépűíˇÓl6YZZÂ÷=>ůÉG˜Ÿ_`llŒŠ˝Sœ:őFzżŚŒúäóŽŕŠ ĽfČF=`ŹÇƐ‘3Ť?BéY­|”Wi"Ěl܆ :ZšőU2­Çşž¸8ĚŁš˙†ń[ؙ1 Êړbžœˇ ’ĚZřAˆF섺óƒƒÔëuŽ]ťĆmˇÝF?űöE­f===<đŔ}\8z˝ŽíŘ!éďďOç˘`J¸}Řf˛Ďâً-¤ڌˆî>`gœő CüFŇSOPůćŽ@Ź4ńveׁ3JE•/?O=ô˙â_‘ðí]—mŰ)X^YĄŮlńě3ĎŃß߇ă8<řŕqNž<ř3g0M‹<ÎsĎ=υ ¸ýöƒÜ˙ýœ?!Ęp†!/^Äu]zűzČfł˜ŚAĄX`ii™őő5677šté2Ş"w}âN^~ůëë8ŽÍ}÷ÝË믿΁űÉd˛|ű[ßćîťďćĐĄCŹ,ŻpôŘá”ßŕâĹKär9ŻSŠz?ÇKk7ăŤ˙ĆĺçA0Đc{}ÇaŁ őZČ ďťîGKoźŠ8wÂíşŕfaa1{šűgQżýżŕĺ 8wCě  iü  P(00ŘO˝Vçëßř&WŽ\áŔý8ŽËK/˝ÄŃŁGY]]ĺĐĄCŒŽŽđ7óuŽ9ĚÓO=ÍĐđ0żúŤżB ÉՍ€k›°MÁDŸdĄäse=ˆÁ˜ŽÝĘŚâLšÖÓ4Éĺ2@ÔíÐؖI&ăPČgęăŔô8ˇŘËäř0S“Łôö0M#m{j4=––7(•Ş”ËUő~¨1Lƒ Ԛ°°Xf}łBŠęă?ŒNӐ(­Q*$ }Licȸb%n˙“čHPř-˛aaKPNŹ]@)¨5ŤT–Js z Y\ÇƲڪh5i%A†~€çE×_­ľX\ZĽRm1ż¸FľĐô†Óƒ҈+T đź) Ź8ČB`Ґ¸öÍQ™LSZĄŠx{â*žNUŸÝ“0íßK@”¤Ľr§ÖĘ÷’ě1M“L&›kUÇFíSfÜZ$Ú…śZv"Ig'/Ľ$!DÚžÓjľ°,‹ h6›Q%Œi*Ĺňâ" ‹×¨T*4 |? ŐňĐš&ľj-j1‹ž×BJçűiX'˙PLÝeÚ‹˝X–ľCEöő×;4AŕyŐj5–†i•w.›ĄXˆHvmÇ!—ËƄť9¤Œ•§člϊ>Tźn"¤ ŃJÄÜAíž•ŕƒkŰě‚1]ëZ׺v‹1ZkZ­Ż4řŤoZl”Žď ; ĘUÉ_}ÓAĘ*ޗ#—3ß҅‘RŇ××ˡżýzÄOa˜dłYÖÖV9zô0őF‘á!ćř‡üŽă05ľ—“'Oây>ř +++ôôô`š&ožy†sçϓɸiś­/+š}Äâ̂ĎËsM*ME֖L™ ôą˛Ä-íGĢ•EüKß@öc?Šk(żŠ‘߃‘BIP~ם ÚCk‰0$B‡dÄię•?ŚĽ'3Š0ěHu‘ÝNNÜřž=9z„Ç?Á‰Ż10ŘOĄP T!SS{™™™Śˇˇ—fÓcxx˜Á~Ś÷íc~~ž^xĂ4Čĺ"uމÉqVVV˜žŢ‡‚á‚äc'ććK!­Ć &w[ȏPŚ5:¨9MĺŤ_A]8ť{￀iJœžöu§#­ŮÄźňċT˙Ăď#ĺ7ɌěŮŐąˇm›‡z'Ÿz’ÁÁ! Ĺ>ô §NäĹ_drr‚#GŽpęÔiNœ8ÁŔŔÓÓÓźúęŤ˜ć ”Rô÷÷Q*•8tç!|ĎŁPČ322ŒeYÜ}÷ÝüůŸ˙ßřĆ7ŘÜ,qđŕíôőöR( ŸËŇ××Goo/äÔŠS´Z=üśmGüaHąPdhhžž"÷Ţ{/ľZ•ĄĄĄ]IĄßŻńR^Âşřx¨*._@|ţŸÂ˙[´°śí #ă`Zˆ„äwń˘U‡áńhOýOżýďs—^ăâ›x/>IxđŚí첟"…—ËWŽĐhԌިłwď^~ög†'ž˙43Óűšzőűgfxö™gdtt”Ó§Ţ`xx„őőuććŽŃŰ[D ÉfCQó4{z F{ ËŠŞ§ŮŹŤîřŮCšž‡VQGĄEČhŤ0 ‰ăŘ ő÷0łoœăÇďâř}Ÿ`jbi$]JZi<Ďgm˝Ěęę&łW)—ë …b†B>G.osńęg/­°´VGĘ"~ƒ-ŚFJŰÔH†€“PŰhĽüJ+lŰÂBŕ*7lↁ4 ĽÁjaˆŘô˝Đ1- CRĚö¨Q66—šňćeƇ ŒřQ€Úh6hľ<66ĘŹŹnráâ5.Í.qńň" Š˝ƒä ýŘn!mlÓFz ľGFkSƒţvĚUâ#Dčv2ĽíˆĘťBc˘ý˝VŤ“ËeS^œw ¤ź Śý˝;ý|ű˙ŰIk>”äőö×Â0z-”ƒ&Iú$$ď[ v¤­UŽăŕy^‡TőňŇ* TŤŐôhľZAÔý&››)ččű>*渉8”bĐŻ]‘(nóRJcZvZU´‹/áfŮî˙&}‘œśGx؎ĹĐĐ`tŽőöDBDœn‘Ľś~ŸQ6[-˙ÉóńƒhJ¤ž“–0ŐF0oŰv*Œ â׺`L׺־Ž}ŒmŤtS¤Ôš ÷„ Z“םÚb;şĂ÷čpۭтo}OR,4¸çhvW—(s”á7~ă×úűf˙ţrŮGf~~žžž>úűűY\\˘VŤ˛o_ź'AüŘŘăă{Á˛,úűűҲٴTW>ą'ę?ˇěĽžwŽYm@LňďM Ď}‡ŕŘ ř:Rpń*Ť„Żü8מJíŔŻŇĐ#Ř ß§iBćŘŻ! żŐB”O"ÂŘ”vä¨ -Ȫ穔l6Ť‘Ícç`&ˆÝ9~zzŠ|ćŃOŃÓӃ‚™™}üÜĎý Ĺb##ĂüÔO}‰ĺĺeöěكă8iďôžé)řÜç"BĺÉÉńÔ IœŞŢŹÁgfČűĚm„ ä f†,&bNŸJĽ”˘Y)łôˇ…qötzí)Ů1h×ĆĂčéAˆź%d¸‚P>š0–ś& …4ĐóGëőĚž_ò”?fťZÉ#Ÿ|˜˝S“”ËeĆÇÇéďďgffËËˌŽŽ’ĎçůŐ_ýe666Ą\ŽrńâEÖ××Ůťw/ŸüÔĂÔj5úúúX\\Ä0Lڧ÷aš{öŒňKżôO™Ľ§§‡ááa666Čçó  ‘ÉdŘ`†ţţ~öďßĎÔÔ^‚ `jjŠ ¤”xžGąXdxdˆ|>Ď˝÷ŢËÜÜ˝˝˝ žď`Lűž N! C˜› ÓBß÷%Ä#żhD}Šƒq›Děxk CPڀň&ÂÍ">÷ÓčŮËč?ů÷ˆj•°ˇŸpPő-ě¨ÂĚu]Í&žĐߟĂóZ<ůdÔîĺş.w:ČłĎ>CŠTâ×ă×xîšçYZZâŕ퍳ň0Ůo0\Ź”–Ą˜ß é1™0šľZ‚ô;ý8Ŕđź­BŰbr|ˆűď9ČŘČ 3ÓLŒ0<ŘG__‘ŒëŕŘ6I­Ń`łTe}­Âćf%坱LCh´jąśQáÍË6•şŚŮTqő‹"Th`Űt‘qűŞŇŠ€Pií“ =l %ŻGJ+fĺô!h!PńfYN\éŕÇUB@.×GĆÍŃ \^l˛Z:Ďç—ľÄfˆ(¤é ä ŁűFÚćo{ î†׎i˜1ßT˛‡$Ň ř„>ž×¤Ő$n;|oó0ŠL ‚€RŠüą#Ľ‚ôů%m6Iť\"ađŠ$É×uq‡RŠÄĺ˗ŮÜXÁó<Ęĺ2ĺreË%7Űś T Ă%ę>Îřřxş<đŔýAŔÄÄ8ŁŁŁéď¸î^;Ć1YIëYťľŻĎ\.×ńZűű{{{;îă­ ŔožI݆ ýhlF ~üż†â\>§ž‡ŢX€üÜö ý,‰~éċOĂŇ<ä ˆăŸ†{‚Ÿ˙exóuřţß#|Ł^{ËŕLJÉńăÇéďŔ˛,&''ŃZDŽä6?őS?I˝Q§X,211ÎĎůçhľšěß?ƒm[œ;wžžžb\.c=ěwxá˛ÇězČŁ6G&l&úş.řGeńZQç:6~ę>Žßű Ĺ<Ĺb+&€őý€fËcmm•RšĘĆf…Z-&1U „Ś\*ł˛˛ÄĘę*Ľr…–‚1@`ĄE$™ 1_ Tˆ$Ŕˆƒ^K{„BPđëxÂBMĂČ éJBej•"T!!fŹć$UAJŁĽHł˙˘m=Xś‹›ÉĄT@ĂkR[‹*rL+⥑NÔś†AJň+ă*…¤úUGH :EÚ%›ˇŤűDëθéjJo§ňřŃbDÇ˝)Bč#dTEœđŠ´W$‰–¤MiuuĎó@G2Ďš\HľZGi…!%BHË"›íl ÐZ­FľZĂkśĐŠŇÎ5ÔN°›Œ{B$œŽ)IG5Oű˙űűűéëë#“É´ů~"YPŃL2•ŇÝ|QIšNĽórëůľsŇ(Ľh4Ôj5Μ9CřOŒT*•.ÓľŽu­k?,ćűŠ —|Ξ×D ´¸‡ŘÜuČä“ÚäsdžFSÓl%j1ŕؐÍ<j5Íó/{źx"ÉN ‚.ÍJŢ8pü^E&#o‰{B0˜7:—˛O÷˝8C* ¨-͒}îO1ź8&ŮŐŽ€Œ‰QÍqî+łT^$Ř41üG‘âaBťN~úMf>÷wôﻊá*„aač9qß[%¨ôbX?°ŠXźËÝ⚂Ѣä#„Á¤Ś´ŚŇ¨ňŐk˙HyĆbě˘ËĚR˝ó{zČ~ńgpžđE.2Â÷·\:§°LÁąÉC<ú‰O2d|Žüo˜ĺ壄"!’Uć%ZŤß$(ŔÎŘAÜťťÁÁ>őŠO^ç@~XóýƒX“I6UĚžŽ\żŠ0Ä~ĆďĂDOÜ š^ÄO˘˙c¸zé ţă_"^}ýš/Ágţ Œď…lÉ!~ëßŔsclŹÂéW?ýyŒĚÎü–eqčĐ!ź= 2ŰÇňřƒ÷ŁÔVś÷î1=ƒ}űŚŮťwoúšŒË°\Kp˙>—Cc6ődAΖŘf—(÷ŁĆ´ź€P)˛ŽÍÄřH,KŹđý€ršĘúf™ĽĽuV×Ę4›-LC’Í88–d˝˛É… —¸pń›(bY6śmaŰ69{a šz€Pť ŔŇ!HŠŠ~ ŠR@É*˜ĺÜZ |-R€ŘL[˘2R, ÍfĽŚeb#ć‚3­¨‚Gë°Cę8ô#ő '[ˆƒZFĹ<%‰i:iUC$ l`šF<ç#ż$ @)I¨"âŘh­Čˆ7&–’NäžMˤŁ3ô&í_âă*'„Âę&Ř<ĽĐŇŔu3d\—PEjsI…JŽAŔúúŚiËş‹‘jRRMmŐKÉţgnŁQ‡˜Çfť„v˛fŽkR*őő´ÚşŽ­Ď ˲)‹X–•~?GĽ*T„ą„7)زÉ6Ŕoˇqďh]ň}2™ —.]˘Ń¨Óß×) J‰ă¸ŘPvÁ˜Žu­k]űźäsŁrîbŔꆡ EDЃ‚űŽYěÝB÷]wçCĆuĄ;lą°¤˜ť&#”Ę’s>qG€ëopmWMŘŒ˝çćíŇí/íÔâńA‚76^ ź<˙w˜ëkC&†ô€mI ňĂţďłYýuÂĆ"Ě(MX/˛vĘĆohîüÉżĽoę MV6ĐFˆßüwiĺšë3|ˇcňv?ß9ţďmno˙˝;Íť÷q…qví"§*WLž˝˝Č̇Ónë“?‚úé_ä+glţü%ŸĺŞÂ˘Šđí3Šż~UňŻ>wwßţ˘N˙3ěćk šqsSňŒšľ—ęװܞ•™đFçöNO}`ĎóĐA„0°'RŠ1 Dn)ÂŔ$ě;†řÖď˘s=Đl!zúP˙Í˙Œ<|ôôEU5€ôščÁQŕE2¨â-‚ˇö@d'kŠ=›o"ĺ§čÜUŽ)pLÉ@îV>‘nŽŹđÇéœö|–×Âńlę&ˋŹ­—(WkAˆë˜8ŽE!głş´Ŕ•ŮYÖÖÖ¨×ë4[ɜąDą‰ëşd2.Ž›!—qÉds8śƒ_ ™[¨SóÂv …ÉŞÓsĎH´QľIKe ˲ •ú4[ ,´– ˘ Řq]b‘§´bF‘Œś`ŤE$™űQۆ‡ďGíf š$ňöbŰŢe’Áž,{FňěŔql6ËMć6™˝śFŁé#¸Žƒ!e¤ž¤Hƒm˲’í:ž’TăťkoqşBhş˜Ja˘‘ şQ!ČіƒF`´Ĺb‘ŁGňÔSOQŠTh6›†eš¸ŽE>Ÿ‹ŞBt6ú)Yp´ß LÓ`sŁ„ŠçF{ëOű~˜TžŘśÝşh-‘‚Ž žäŒÉçs†‘Vá´WÖ$UWi˛ŠÄzűyúV•œíŐXí>J>Ÿcdd„B>ƒm;)yr!Ÿď‚1]ëZ׺öĂâě•Ę!Ż( mƒśgL&Ćĺ ĹBŔ؈äöŰLVVĄV‚PseNąś2ĐżspŻ”˘Z­âyŚ÷nŠ hęőzz0:Žóś˘ďűićáF‚JĎóĂpG Ǜa‰Ďă?ÎŘ؆apđŕÁHb0—KKPFÚ;44Äüü##ŁÜsĎ1jľJ)z{{ń}ŸJĽB>ŸçěŮłAŔ˝÷Ţ۸<öŘcŒŃh48xđ ŠT.—™™™!“‰űŠĹëëëi†íäɓÜyçôôô°žžNoŹŢŁľfqq‘Ż}íkôôôđĽ/})ĺŞyâ‰'i4ĄěţýŒŚDłĹbńŚsAŔšĘ˘CÍ\ŻÍłŠŒmú ů’ěç~œ9úxě•u˝îĆÜşâˇ÷ů?~ö Fďg`ůŤ€j“ˆ`՜'T !Ž! ‚€3gÎđĚ3Ď044”ň€ŕŔô÷÷ŤŤŤôôôP,ń}Ÿo~óo9~ü8Ůl†ŞŐ*•J…‘‘JĽJ)rš\ bTŤUzzzh4˜ŚŻš™L†ÍÍ Â0¤§§']Gh­yíľ×đ<ƒŇ××Gš\ŚX,âyŤŤkT*^yĺ<ňgÎźÁ=÷ÜÝÁEtł1zÝ;ĺy˜;řăţš˙ö?ŠŤ5Ëđ?€{ˇBčą˝Č?ůďŃ÷> ˇF‡-¸6 ˙ĎżC<ţ÷čžA˜9ˆ´ěˇ źŤŐ*ËˈA__ß[ÎÍv´^ÚA˛ŮlÇűßKСŰφaHš\Ć0 ŠĹ"ĽR)Ý'EhşÉűHČÚÚ:×Řłg˜ţŢ’ŐőŽ\žĘ…‹—¨”#`ې†i¤`łă81đâ’Ídpă˙ťŽƒëŘ8Ž‹í¸hlZd­ěQ÷MLŰBߊřך[íAÔ*DiÇvA+”VřĄB i „0Âa:„ZÓ¨×iľ<Źř:ÇÁśŒˆóEk‚PĹ-yNÜVgš&Ą ƒč5A€ Ö¸vľBy3G˝Vfx¨—‘‘~ú{{äś}ƒ<°Xć›ß=ĹŠ7ńƒ0˛eĚç-ŻÉÍęQJ*+´Ö¸Ž›‚ÉzŠÚ̢Šö€ť]2:z?iľ›hŻĘ¸,LsŤŰĂŔ!lľĐľ2aeƒĐ÷ ,- AȞŃĚĚđÚÉ׊ף$išxŚO˝ŃÄ4"sŰ6ą,Çqq]7ţ^ÔƝ U5@‘:VÄ;#Ój˜Dn;ńű¤”R˘B…羊ĹLËBÇIĎóŇqŰž˙éxŽnŒh;“<Ťvn›„ŕ­bĘAFk  Ćt­k]ëÚÇ~ŮŒńZŠjÍ@Ťé—1ďč°LËâk5Íľ…\N26}? ayEąYVŒ CÂЀdxČ`eUĄcšżZ]ŇhŞÔ‘Űn™L†OúÓ4ę ŽÝ} Űśšté2׎]ăđáĂxžďÔë Nźr‚ýö§ ZkććŽqĺĘe …/^bttĎóš|ů ĽŇ&ËË+Ü˙ý,,,ĐŰۋR!HŻĽŮl27w ß8věÍfƒĽĽ%¤”¸ŽKš\‰I2/pűíˇqúôi<Ďcdd„#GŽ ”âôé7(—KŘśÍŘŘšóÎ;9qâUJĽžďqÇwźgM,/#j | ŚŘTőŃś@YA&ËFcŐÖľÖ‹Ţ4UŰAęŃršüڝ |ŽÂýsˆĐ@7“Ś…ś š*ŹËm˛ťŚŚ&Š×ëźńĆh ===řžŸܗ/_Áó<Ž=ŠeY[ýăÂŕÁäľ×^gmm“'OągĎFGGX_ß Ď3>>ÎkŻ˝Ć‘#G8sćL "œ9ó&###źúękQ`áf8zô(śm!ŤŤk w¨%4›Mz{{éďďÇu]fgݞ˛˛Âúú:_üâOÜT0&Q™Xö"BiMËPź°/ĂáŤ.}‹ ëŢă\܄Óó!žjË<łˆ‚Ŕ ੠!Ëő"ăšcHń—QË@›ěľP5„ÚLšŰͲ,>Ěňň2`xx˜üŕ”Je–——yôŃĎđꍯŁTH6›ĺÎ;ďÄś-|?ŕüůó¸ŽK˙‹‹K(R­Ö˜ŸŸxœ(’RňÚkŻńc?öăœ:u’žž~666˘X,ňć›g0 “ŃŃQćććČĺrŠWľZ3úŽ=ĘóĎ?Ďç?˙9fgg)•Ęd2|?"3ľzƒM!“`6"z' ČXU2Î&ssK †{™šÜĂž}{čďcbʇŽsöüŐjíR ¤a`Z&ٔ°UPŃß—VŻ×ůú׿Něßż?­ňBŕű>š\ŽjľJľZM“DžçQ­VS`BkMOOžçaŰ6śmsŕŔ2™Ě-37“DŘN`“iš„š"ĘÍQ)—pl Ç2ĄVEm.ł ĎĘ@?זׂ0Tx^8Y–IjŒfL&-–ebŰů|ž|>ĎřřD$}ŢhPŠTYYYĽV­QŞT˘¤D ęůžŸ^†aD€Ľ‘€1˝}=dsy„xž‡çy)¨œě•‰ńV@uçë;ľ'‘Ętˇƒ1‘Żg˝´NĽŽľÓěVĆt­k]ëÚǎفŤ#T‚0h瀊I‰[U1Ďžčńú逞^ɏ˙¨ĂžQÉęšâ{OśX\VÜ6cňO>oc"’T—źyNŕŃÁ„’ źLŃᡜśÎňň —.]ŚżżĽ4Z ^zéöěăž{ďéčĎ­T*˜ŚÍwâąÇžFĄP@)Íňň2ĺr…矁#GŽ0?żHšTftl´ăľ,›ÉÉIÇeaa‘z˝Ćęę*ľZ¤^ŇßßρřŤżü…BŰvčééĽŃhHtńâ%>űŮĺé§€Ö‚ŐŐ8ŔĆĆ&˙?{ďkŮuži>kíxň97§şĄrdąŠ™T (ZIْşeˇaŮm3h 1mĚüŸĆüî?ƒ`€1čÁx€îÚvŁm-K-*R´DC‰ĹP9ޜν'ď¸ćÇ÷ÜPd‘*[÷#/ęĆöZ{­ď{×ű˝oĽR!ŸĎaŰöÇ+F°î@K Â(i“ˇŞŽî hVňźzţˇ¸Q} G Tł‰ßÉMAť™Ľ:݋@`ŕBĂK@6€ś˝RÁ=%c X[[cff– YYYĄˇˇ—ůů„ŒÓl6ąíĚŚţěfłÍ~đCňůűöíĺúľÇá˝÷Ţă[ßú˝ŘŽ<Ň`řᔄCCCüĂ?üœçŸ˙"ľZz˝ŽišŒÇě˛cźűî{äsYpęÔ).\¸@ľZeßž˝üä'ŻĐSéáŸóikhŇZvéŇe<ŔÚÚss 9âŢ}Ÿ]@fkřŹ5$Íś€ĐE*Ó.’aŕ IiDbźś•/6–1Yl;KˆA tćÖf/.ąşÖĄVoÓlu˘˘Vââ7ˇMî-]×SnáÔ´ MĽB–°đ1B|vMÖC”Y×P2€ĐC4,B@ŢŽK)Ë311ÎČČ0/żü‡ŇkŸË噚ĘröěYžzęIÖÖÖp]'>q’1ŰČâĉôöö`Y6…BL&jąČĺr˜ŚĹŋxčĄăźůć[ ˛źźŒa聏i ĆÇ÷ŕ8śm#Ľdvvއ>É[o˝ĹŰoŸĺŘąŁüŕ?ääɓ!¸ukšJĽL_ŞI2==ś:ľŰmz{{É ˝­Î*ţď܈Ĺ“0¸˜šM⊁'[ ÓÄć+ÄŇP. ]mJ …˙ö Ů†ËNÄô*Šq›ž¤§ˇ—ąąą(qśm4-úÝĽĽE2™ RJLË"›ÍŃÓÓĂ–őöK) ‚'žx‚ď|çďůßůjľSS“ź÷Ţ{ěۡÇq%—ËĹ­Ů´ő!ŇvjÓjľ˜ššÄ4͔ľ¤i:ŽéxžŽ´Z-Z­…BžůůyĆÇǙŸŸgjjęcß]†I8ń0ĘĘBs5VĚöÁ0A7"&ÚĄ§ ?­^řCÄžą#ZĄn ¤@(ąbry‚ýGɘć6=Ÿn0)IÄßzëmŞŐ5Ž;JŠTfyy™W^ů=öKKËě߀0 ÚtRŽTČ­[Ó<óĚÓÜźy‹ůůĆĆFŠ×ëœ;÷.š\–ŮŮšXČŐ R)S­V9uę$Ż˝ö:.\ŕíˇĎR(XXXddd„rŠ”2mę˙|ŔÔÔ$™L†ë×oţŚ"b7î_ÔÖ\Vć=L-@ˇ ”‘ÁĘĐĽ‡Ž…äłůœ…m›q+‡…iŮiŇvKuÉěb“™ůuÖëNW˜}Q;‰tę.Ř-¤ŽĐ4‰R>žď!…Dj‘˜¸`ƒŐ`葻‘Ąkdł6˝= déëą(2:\Á÷‚ `yŐá˝Kóüňý›ŹŽľé8‘Ö› j71ŁfŤ ř†s’ ڎBt@j`ę‚ĺz›™ĽŢš°†ăëԛ>A ° ? PA1vD=jCÄ÷c řZ–ĹoýÖomQOŠünąŮÜ:~üřç -m§ŽT*iťÍƒ häSAĐétČç#&aτaRCĎćÉÚYFň%N ›7Ţx3ՐŰy6Zš˘÷ˇi2Î!D|d<×tl;ďQ˝ą!â†!­f‹ŽÓÁ÷# "ĽZ b&şjÉsE/Ł[ô>ьIžOŹ;´̤Âë"f¸„!A˘ˆœĂ ÜÄD‡”ÉëŰ Ň$kí.łťąťńkR†H#„ĐB Ę%šĄJ!`r\cf. TŒGÉů`żFoERoÚŻŁi‚uĹź@ȍż×ő ՟š]hšĆÁ(Kœ8q‚ˇŢz‹“'bll Çq˜ŸŸçĉc<ůÄc\źt‘łgĎrüřqFFF"Ŕ$›ĺľ_ü‚o|ăëi"ăű>óó |őŤ/Q,¨ô”ŃuÁÁţěĎţŒßýÝß%“ÉĐ×ßK&kÇ'€!CĂCœ;wŽcǎaYĽR Ë2yüąGءo/ľZëׯ3ž'˛“-K<ůēœyă Gejj×ušző*O<ń8ƒƒ\şt™vť}[qÚ{d\ŁH蚄žŽôM–4ŞM‹•†“ŤĄô]Ëb:Y_ây–ë Ý6:U´†BřŞ) ˇ…j T[C‰ŸŰ˛–D§ę˝˝=Ôj5:6===čşÎää>ú(ív‡z˝–ş›”J%úúúҢißž}<ţřcAČĹ ÉĹ#I‘äş.?üá1ÍH ëäɇc‘sW7ć>†şEMظáĘHU 4aSÉúXŚF&S ˇŻ@ĄPŚÖŇ9űÁ7ffiwźX—RG‰&5a|#6ŔÝmÉr”œÚGŽ4Äâß(p]Ó01 C׹,Áž'ŽŽrâŕ0˝• vĆŔ44tMĆŔ0ŹŻűŹŽŹ39ÚËžÉ~ăó‡ůٙ›üü+ŹŽ5⢙,^dZ‡aˆ C<ĎEH Ă4R'ÇóńCčř R„¨.ŽĄŽiH]•"ÁÖF=čjý3Ÿ’÷ĐNĺJÝÂö;­şŽ366ö@ÚdGnD*ľŹ^YY!ŸĎG‡^qűj2o’˝5 Ăˆ˛,‹cǎŇq^ýu<×ŰYcE)\ϏŻZtHşŽ!ŽăĽť]çŃr­i˜–‰Z>QĎ÷đĂčPŁŮlŚ:1É|WJ$¸J|ÝUúyň})7^G"Œ)ƒ,ŒÍ ˆ€™tŮ |éţ^ní2cvc7vc7~mr=A.§S)´Xt ’^i]nĘyňQƒűtЁmEť].'řĆWmj EĽ´Ů9@Óş$F…˘Xđ)äŹ;jshšĆţýűŇ'}îš/¤'J{÷N!5‰’Gy”ŸžňSĆFÇRP(äÉçrLMMa˜Q‚S)— cJ˛”zju•‡N<„ëz9zĂ4#ý“ž>zzzŇD@)Ş=cé5JĄG=ÍĘĘ*ŤŤU Ădrjӌ’ׁÁ~žôĽßHÝjyäôŚ×˙řăÝÁć­¸ŘGúiľ{)Ť:"ˆNîU( Đ8=đ>?×OŇp$pńü6Ą2Ŕ—‘PŻ×Ś/3CŸ1^Učk€ďÁZ:ňEiÜö5Y–ĹÄÄDzM˛Ů,/˝řbTˆI’˝{§br‡ŕ™gžćÚľë˜Fô˜šÔ8qâDÜ'ĐuÁĄCQJ1Đ?ľ‚JĽ'J‚BŗžüĺŘACDEm˙čČ(ý}ý!ČŘ6/žđR‹4INjƒ0=™.äói‚ü™gžIÇşP(Đ×ۇBńôÓO011ÎřřžčuHÉc=šRđ{z*)KG×uöěŮĂČČH—SšÉ—żüĽM÷RŠŃёmď­ŻŻ€cǎݗľPŠ[ů"ͥ㘠WPĄ‡X_D\{ö?Vľx~ú—ˆˇžMužůŻ`dœĐ´ŕâťČůY‚¨EŠ}ߥÍĎľƒć€Śi”J%rš†Ą344Ŕôô-Ž\šÂČČkkkź˙ţťô÷÷˛˙^^}őUÖÖÖ"—ËbY&ƒƒýdł‘&ŚE˘âů|žz˝ÁkŻ˝Že™>|ˆ đŃuţţ2›žž&&&¸rĺ ?ţń8~ü8űěĺ̙3”ËE Ă`rrĽccc|ýë_guu•ŮŮY<ĎÁś-^}őUžxâ‰;´bŢeqŰľśŢqN†"˛•F3Âßő‘RC“‚ĽşFľ-¸ľÚ¤T i;5ZŸvÇĂ÷C”Ň€ČOˆ ö’îVÇnś†ă8é~œ0„XfĚTÓ%ŚŠ“ĎZô”3”Kz ŒWČŮ:šŒ*@“-fg—"k"jà €ľő:͖Cł=ë¸č†ÁÇ+Ý˙8Ž,sţň<3ók4š.BČČîÚUh"j[’R˘kşŢƒH!A#eař^€!ĄÓÖ§´ŕíZu]'›Éuą ďÇWÂFä>Îë_-ó,ar$ú'BÖ××Ňő,ńNŘĆÉ—€2Ý@L7óeĎŘ(ľÚ!.œżˆëFíŽę6™QŠaH躸.Ń|r“Čq2oĽ„ĄÂşŮ-"úÇĄÓqcA„tß' D¸i?꜡ÖtĂ´°-M×ăëă†^ ĘA°‰s;6 ńűŽr>5Śá.łťąťń€1ůŹddHą\… ˆÎš­¨Ç5˘{BłĽČçV|8Ä?łlA.„FSĄ‘€oBť­Rw&)a 7¤TźóéNRDŰĄBjˇ?5’šĆŸ>ýúиr đQîŠđâK/Ľ_?őÔS›6|y6žý|ă_K“÷¤m[îtęő‘Ć*N3SCÔ3ăVç‘z@ä*aȞĽ:_z•żŸű,+ő€Poă˘C Đ:P×92ü&ƒb ą&!ç‚QuIčtź˛4žđpď8NIŞ éŰĺŚTęृŻÉíďL۞ §_kŠŮÓŚŸ)Ô6궔ËÚ.|÷iSź5MăHy/?ZO??rä'NœŕčŃ#›ţNlúzrr€/~ń‹<űěłŰÚ˝†††¸zőjjAžËĺřÖˇžƒń9öěŮĂOđ÷V #%ňŔăféľ#qŇę |ç‡ĂO#žűc8đ$*[A(P_ü&|đKřŰ?G~ű˙„N;. huęId,€{ťűik‘ąő÷v^˙pÖGH4McttôŽ ™”’Ď|ć3ťö֟PqaÜv-2e!$Ĺf7‹3ša\ĚG{ox¸ŽŰHˆX‹cC—Eš.ąL“RÁf|$ĎÉcSě` ?GťU§Óę077OłQcqž”ŕ8&öŒ‘ÍîĄZ]ăúitCçƒ.Ň××ËâRË2dfv–VłĂŕŕN‡\.Gŕ‡4›-Śgfćšgöóů'pć—7řáŤçYŠś•jrDatč!c„I&…vŕAjiœ°e‚ H˜´E+R[˝OcĽb‹ůL|Mď˙úôÉĎ7uŰç5ŒČĄČuÝXäYmˇ6ŔBŸFŁA†Š.KČ4›M:…B!s„<ńēř~Ŕ•+WR7Ż{Z“×ظD€ÇF{DíN‰c‘`3,Œő]śíńÚś˝˝4zŸžç‘@đăŕűžďuľ÷mĆlÓ×R;ďǟÖ:ş ĆěĆněĆnüŠ ŰÖ9°WgřœĎ•AŽřŹŐăc’űtGńî~ĀŃA×AžŚ cŁ‚0P\žpífŔÂRHD'W˝•€Ă%ŮŹqۍ4)R×ý6Žďá…AWr(ŇžÝ Óߝ έ?S›>Űál?~H]jä4[Hä=c÷oĂTw}žd˙6l‹â—béŻŢFŹ9ŠA¨Aŕ#AÖS<Ą_eĘZbÉ(ăSúôjëô›U2aÚ‘Ş˛r50tüvžśŃƒzřVĄ'uŇşĽŁŻBšC;p#ADE”ŕĆcu/Ý÷; Ť;UüűRH2šAN´rÄŻčžš[q:Ţ;ĘS=ńˇs?‚¨g<ţšăťœŻ^ć˙>÷mžź÷ó|í‘Çřě!›Z[  č-„hÚ /_˙1‡[GΞŢ§ĐŁÇ"% ´nîJŮžŰűŠ@)ZKĂ0ژkRťĂHlżîęžF° 8ŒÁSęä5 MŠűÚ pżÇs#їŘC“´úPj˝#x-Xš‰2lČUŔČDvĽRC•z sĐjBé()ńrE´ 4ýžćN†Ôj5ŘżÚNây>333”ŠEˆŰ˝Â0daaR,t~ťÇŸŸŸ'Ÿ/Ëe?´ö„”ňž„Ź…S¤|Wü÷śsBqá¨!„žąşn†;ťE˘*nľˆÇSh)¨cÄĚ´\Öd ŻŔP‘ţž}yŠy C†dlƒŔwÉYşŚXYY„Ŕ3Ĺڝśeą¸´ÂâŇ2BH Ĺů|žľľ5ŚöN>˝==8ŽCŠ\bp¨ŸZ­Îňň*Śiŕz“Łt:m˛9‹RŠ€Ĺb–Ď=š—ƒS}|˙•‹źöć5T\DGE~Âî&€Dđv3ŁĄ‹yŤB‚ Ző„ĺyŚŕŤDt1KÔmďť0Tˇl>mP3ş. ›%›ÍŚL—­6ÎÝî} ó%ŃPńýh-ět:4tLŠĹbęЕü}Ąçá‡OÓÓÓx]ŻáN€Ńśő{ËΕź\-y;ěmtąˇ>G dÇÎ[Q‡“Ok)9ŽK"&>Aŕoî_ś1[5rş÷đRŠ´ ĆěĆněĆnüş2ş.™ˇ8rĐezÎĂqL_1ˇ°´rîýH ąÝQń)8¨”Ş„Šżűž‡Ś)\|?;SFŔÁ˝‡ö1tyŰ#T!5ŻCĂď0[[ćé([y;LĆ´şœ>ÚŠđţV)pC'ôŠ‚Ź4HÎEňú5]Łwj”ĺ?x’ő_GTr…6š)Ŕ—-ÄĐC†ľCZ=/ J!˝Ą4”'˛$Ž—Çk÷P?uóĐItŰžăuQ4—šŰfľSă7Ţ%P!Ÿ™xˆR&őÜćJ*ąÁLÚ\’% ՝GŔ ŁÖŸźnŁmŘ<0!…$gfřçżÄĎćßbYU bǎÔŢŰmóöâ\¨^§ßţ˙8Ú{=Ĺ!ßăňŐk\^ťĘa}‘oŽŢŒĽz%sN!GîĹř2šfď ž!húj^›†çđúÍ÷Š9 NŽ`ŹÔCYEx‡kž4;ˆMpYb“vŰ1Ž‡Ä Ł„ź ŹřäZ}Źů˙‰ßcRbf 4~nžŮX$f.Ŕ˙ő?Á _üď˘wřł—˙ţA]š€ˆ­^‚PÓŠ9Mžo`ÇȝŘ*žpöě;\šr™RŠLoo/J)Z­Żýâ5<JĽ"žďsîÜť=z„ĄĄĄM_÷š÷ţű05ľËE׾˜š˛ Č켖$:ŞëP‚”I\z’vˆ´MCl˚ąA4]ĂśtLC’ą † ŒUŹ00'cJrśNťŐ@Ó4nݚÁ%|ßĂó2´Ű‘“™ëF €fłA­ˇ(Uk~ˆçť.`lĎ(}}=hşF>Ÿ% Cn\żĹÂÂ"ĽR ĎsÄq|/ ˇˇŒe–­g~šŇäs}=ŮHŽ[J”ŠX?Ýí™Iąť„ŮTčĘ.Ńâ˜Ĺá8ű:‡7ŸľľľŘý­2D"-ÁŽ_żA___\¸ŠöJŁŃ “ɤc™Ř\-łťĺH cFĘ`‰Dz#םžXœóúľÝ .qƒ H˙mˇŰŠ7DşDžçĽ-މžËŔŔO>ů׎ 0==ĂjľJ§ÓŮjÜi˝ÓÁ˝Ž}›“ŽD1”ŐuŸEÖŮQ+Z2'Łľ3đ˘ÔŚ–¤ŢŽéT*eNž<š ĆěĆněĆnüú2ÍZ<őh‹ëˇ|.^1qÝč„Ă ÁőślR„ią­A§nr„Œ¨ÎŠąa—Ď=%ÉfÍ؎rçüĽřÔ}‡++3üŐť?áP˙8s^žr†ąâ ďçFuŒ•ű C•RÚélm™Ź™ĽlgSnĹĹĺ[ôĺƜ=Ďł{‰hË2r”đĂ?đy{î"Oî9ځ‡%ôşeIHn™L|őqŽ\œƒ˙ňKü°F.×D7}¤ćƒ"ľ´!È˘$Ud˝Kôo(5:N×ď§ąoďń§éAŢá_ř´‡›ëóüçł?ŕĐŔ8–nđ˝KŻ3”ďáŮ}§š´| !Åި<ˆűÉßcąYe¤Đ›Ú˘6Ý—fčÉț6•lS3UHÝiąÔ¨ŇŸŻPÉŠůlÍ@ }ĂJúŞ35McrpœŻ?Çźů^3˘$§É˜ÂCÜŔc˝SçFm&mç CSš|ub…˘ć“8'Ĺĺ I(‹4ĘČ`Ą!wn#ńBŸ†ďĐô]ţן~›ńĘ˝ůgnžÇ\…G÷C ř[pjô 0¤Ž‘RŠ–×!P%ť÷é+j&Ővśç0Ő3JÁÎâ~ܖ$q—7ŚĎó™É“ßWRĂÖĚ H5]„@&ňŃߤýł˙ť1‡ôÝ ›ë•đ—˙nÝQDü—˙„ş5ré'~ž„űľßGˇm¸Í˝´ľP*äƍLLLríÚ5<Ďăďţî;hš¤Ůh2<2ĚŮłżä7ĎđôÓĎĐl6ŠŐę\˝zË—ŻĐŰŰËłĎ~žżţëżBÁh4šĚÎÎňýďŸů/˙œ^văA„¨6\]ÔŚŸl°D Phš† şu]’͘dł•JއŒrhß {†KŘVÔędY&š„wΝçęj•|>O_o…÷b™&FƒVŤÍűç/Q)÷Ňj5"Ň ň\Ÿjľ†ačärY.]šctd˜\6GĄX`mmĎóhԛ,,,3>>ĘęĘ }}=”+Ľˆą‰żÄíXíśGťăRk¸,,5xçýŢż8ƒÓq!Ö 3 =›ŇD&^_ÇA×´ŘyjCpUÄEu䤁12ą%&đńľŤÂ0¤Z­˛°°€çy VVVPJŃÓÓĂţýűŠ×t:NÜvľˇÔj5šÍľÚ:–eS(äŮż?SSSŸ3&rŮÓ1 ƒVŤ•2[’Ö¤híŘpâBŚě–n`$a×4 lŰŚRŠln‹5VjľZIJ˛í ŇčgppVŤÍěě,gy6ž&ÍH7č.L™äΐwČaîŔÜiLđłűx*úY"ˆ­vfŮ$MץÓVˇ‚BąŔ#<˛MżkŒŮÝ؍Ýř' ĆD;ÂČp‘—ž_ŚVo0=›#ocżš护úM€Ń„ ô´ůڗ}Ć÷ ܙ/Ŕ :žËŮŮKšâń=Gš¸t“żżđ {ň(~peešőNƒ+Őę&{ʃ”­<ď.\eoßßy˙U*V>Í/ç.џ+seeŽăC{yůŇN îăÜÜetÍŕČŕ$ď/Ţ é4ywţ §GĄë:NŕjaĚ>ř•ŒĆ=—fęä†zúĂçXXsń~rgĹ [haY†ô‘z€!JސQ*đ\g=ëTh¤ţÂg;uÓ2wVžđŻŠüäOÉŹÝB„a4ż‚VŕĎ˙7¨+h€pşUĽÄ+”Xú­oQţÜsMżçö ¤č€¨dnnާŸ~ŠĄĄ!ţâ/ţ!§OŸâĐĄC|ç;O&cł´´„ëşüöo“˙ú_˙ŠK—.cŰ6/Ćg—.ý Żźň ň'˙f‹öwĺw7ăí"aŕÇ›í¨ťľ:˘y+c§#I!o15ÖĎřH…ąĄ2˝˝lK'c,..˘… Ţyçý}˝A@_Ĺ|=ŁĂ ö3=3@pĺĘMzzĘĚĚĚRŠô`[Y§ƒ@âş.š¸žGšR˘Óiă{÷N˛źRŲ-tM§Z­’Ď۔Ęyô!,SG×G#PY):Ď h6;,,Ő¸1SeznĺŐ&ëľ6mÇÇuA 1ĚBřHl_ËťÖ~˲Rëjß÷RŤn)"}bF‘f™‘€oĘř¸sPÓ4) X–…ďűŒŒŒĐétČfŁ–ÁĄĄÁxÜ´ô°ŞÝnł˛˛š:Ľĺc{ůOZÜ<‹–eŃétRŃnˆDÍuÝHŻQbóaښ”€ív;mo*•Ji;R’?$1š&ʜ p'Ňt éëëáKżń<Žë˛´´ĚŇŇ27nޤ^Żo8/ÝfŸßĘ<݊Ĉé~œDşÍ­š¤Ű,şťtan§ÉcŮ{§Ś8zô(ƒƒýX–ńŠ,1ť`ĚněĆněĆŻ€éތ4Mrpßüę"ßűQK×3¸Žžś#ĽÉJŒÁD'Éa|ڔ$; ]˜ÚÓć+Ďů?6„v‡ö¤„t­âÓ/đXm9üÍűŻĐpZ˜ŕƒ…ë<5q…˘á´¨;-žž<É_üňež?đ8u§Íjsţ\…Łƒ{šRXÍ*ľN ĹJ nՖx}ć<Ł…~Z^‡éőEžrř)^ťő^t*Ą@ ż’“ű&ŽŮw`”đOž§:TÄyůîĚ †t0 ÍđĐe1 j„ĄÄwLćj+›~çÜěežqâYnTçcw‹K7ybňËœŔĹő=^˝úżsę9Bü0ŕ݅ŤRG×t~výŽŽĚđů˝§š˛:ły*Š€Bľá tˇDëOt4ƒ‘ňżwě7ńŸ×VÎQ÷›išˇéĽm 3Œ[/TÚô %$"eÓHÚ PĎ~…Ęžoašv*śźíëęŢjz.Y+Ë.˝"@JjŤ„(nčłŘ¨2ëáÜěe2†ÉJkŒa!…äp˙kí~ŕss}ZťIŃÎŐVż|÷G<ŕQ~|őm† }ôçËiÂßÝQ2úˆIŠÝÎRţâﳞ+áüâŰ䧉îÔ6ŢCüŢ6ÜR%žaŇŢw˜öWžIţ7˙fĄˆĐ´ť‚1JE˜gΜaxx8b4ꘌĹôô őz=‹œĂ÷}úűűZ­vtŻ;‡Žë”Ë%Úí6çϟ§T*aš'OžäěŮłT*e …ƒ-˛ŤÄ..Ó]Ćó#´Ř‰nŤsšŚI 9‹‡phß “c}rśĽQ*f°-ƒššeÖkŤşřAŔđđ ş&1-››7gazz†B!O­Ö Ÿ/°´´‚i”JeœŽˇĚt:}ý˝tÚm†‡P úű{p\—ńń=´šMlۤPČS,ĺŇĽžçÓh:´:ľZ‡ůĽ5ŽÝZfaąÉŇJZ˝CŤăođcˇ)u„”Ě’&ei$kŠŘâJ#Ôf^)RlkcJ˜3(Jޡľ¤P(P(nť•ËŰ'zŠT˘§§ĽTĘRů4Â0 ÚívşÖ$Ŕ­‘n”ŽoŹ" + 1ĂKŘ3BˆMV X“0c’ď)Ľ0 ƒ bki•‚8N'˝~RJ …Ĺb‘ÉÉ >Äěě7oŢdeu5ŽÂ`łďśöĽ.á{§v\ś.Ű~/^Tň˙övĽŽö^]×Éfł>|˜ŁGŽP*•âÓËYvÁ˜Ý؍Ý؍¨‘Rbpüh?šě?ýE‹wĎŹ×l‚PtYnŠ÷HŠĐ¤˘s8|ŔĺsO:ЋžˆŮVďĽK‰ĄéLőŒđúÍ÷Đ4žl‰šőe>;y2*ŽdÔ3ł˛ôçĘ(Ăbšš†.5*Ů<7ÖćѤäFu˘ĹÖM–škä ŐV–×aÝi°ˇwMj\[%c˜H!ă íŠÄ]ÇK™ľ:ąŁ”cůŕ0Ť?řóY2Ë-d;:A"vP:`âćmÚ+ˆ§Ś°_:ÂĐ‘Š¨?]ŠŰ&2ÝߗR˘ ÉDyˆ_Î^ }2Śă{ěë‹r^!ŃĽFưč˖™ŻŻ’1LnTçYŹ­ńš}ă‡!óőUŽŻÎŃňlݢÖi„A¨hšMÜŔgŞg˜Őfůú (…&dšČl¸ôş5žťuL~U…§ X†ÉŃáƒü˙ŒÜ{~´x†Śß"ˆ ‰îÓ3 d<]tx¸ŕctŮX+ĄÓRƒ´ żIvôkdr•¨@ŮBߔh ‰.4ŽNńŸŢţo űh8.˝ MÇő=tŠ‘ˇ˛ {¸°t۰đÀkŐ9 ŒSw:xAČĺ•<ĺӛ)âž Xm׹u“‹KˇčĎUĐ5ĹFMjŠm¨†ŒßË?žşŐ3HńsżMch+ŻţgĘďü-fł 2@$~oB 4 ?›gő‘ĎŔןěÓĎaKHMűP:ƒƒC;v !ŕćÍ[čşĆÜÜÉČČ0GŽI5N:EĽRćňĺ+ˇ=Őݍw_ŽX:ş.CÇů$…˘RÔ84‘çąăƒ ö˛´´Ę͛7hőö08ŘG_†Ą‘bm­ŽĄ›üň—ďR.—™Ÿ]&›Éáy!JI Ăd~a‘l&ƒeš,/ŻR(äŠ×ꌎSŻG˙JŢAčăyQ+_Ą˜gp¨‚ ˛Żöƒ× čÔę6ŤkMŚçÖ¸xm‘ë7VX\Y§ă8˜ş‰ĄhşžŃNƒ"Şţ"á#ĐQXŃrŻ<Ŕ'$„@m*ę5)ŃL˝Ë5ÇOŎSډ‰ĚýŃîŕHt×u'nŰů´ç™iš˜Ś™&ˇŰ˙ťÁăN'‚@%—ËĽʞçms"ęÖ¤I~–ŹIívĎóČfłäóy4MŁŐjŃétčt:ŠÎNŠT¤ŻŻ—#Gą˛˛ĘŐkטž5ÍÚúŽăČSľI?čNărwŚű1ÔvbÍNnHq+ÜĆÖŽśĺ˝BF9÷ŕŕ Ǐçŕą†ŽúĐBëŸDŚšĺvă "ţ]˙&ZüĄÇ&`eŐZújwóٍÝ؍\‘ôAÔcëůŽCŤŐFš9F§bw…ť/ŘÉŠšă´)‹wÜh“ßY[ďpĺj“ˇĎ5¸pŐŚş–G)#ýI‰¸•suöďmsęĄ,öĺéŠdĐuąŁŢÖMIŮ#Żx-ŞíçćŽp­:Kư8С‡Cýă ëí:ßE“•L[k T2Eޝ:YÓF—u§EÖ°iş-ti K‰Ž×&gf¨9m4)éɨś‘[ŕ1Ő3‚&$e#G^7SÚO#”RŹ­Ő°, MÓ‚€ °m3u¸S ”"đÚ­6őŮejgXť0CpqšPG¸!J(g`˘—ĚąQJG(O-çэřÄńNăÔý\„T˝6Ťí—oq~é&ĄRěăpßYÓfĽľŽ@Pm×.öŃtŰa€ëű„ z™ŤŻ`jŽďŇ \&ĘĂLז(™šX 7ÄóúňځKŰu15žL‰œn‘ŐMĘf ąă ؝“ޏ~_6­¸4RqžžňŚSˇîĎW/đ™­ÎóĘĽ×ůËKßĺŞ3‹i˙¸ Ś€CvČ˙<Ůât!• &UN#žNaŕfڌŚéwľ •˘ę6Šů.,ßäâŇMÚn›ÉĘ0džö‘73*äfuž˘#cŘT[u V–ĽÖ†&É[YZŽ‹!5Z~›P…äôLlkŃMš^” cŘH)hş:žĂáţ‰Řýʤld>–ÓGťfł…ďXąľ´ă8†N&cßuœÓĎŸŔ÷č,ÍQ?ű#Źď˙TŚ?@[÷˘6Ľ–F˝gk˙ě)~ĺkŘc“h–YdKyϖÖÉs&ż—|ÝMĹßpUS›œsş Đ ííĎŮmçú íwľZ˲ѤνL“ČFŘcqć:Ęk“ÉŘX–‰i˜1€!ˇ1HÔH,‘śëš´Zm.\ĺO˙ߟrcśŠç@˜›ÝďMjĐ[48žˇÄŘH‰C÷°wrŰ2č´}>¸p™ţţ>:=˝enޘ&_(°0żŒah8ŽG˙@íf‡rO‰›7ŚĺĆÍiöďŸBАžž *0M M“X–ŮJK‰Ś TľŔA0^@˝ápcf…Ëח˜[ceĽIŁĺâxAâ‰Ř)é¨P˜šŒ€Ěރ‡íă(BhaÄBÇ~ Řl¸ä$"łÝŽŒÉýŞC×éŻäůďç4cC˝d34MnȖߍŃćű´]—F3ÄĚ ˘é˝˝•M÷Ů?ťwĽőzƒvť%­|IîcĂ0°,+fri›ŔĎóČd2¸Ž›>^ŤŐJŮ3ÝzVÝk[˛&"ÝNÓ4ąmÇqp]—k׎QŤŐX\\biyߋDţwÚGîʎůvÓŰ’TWňöVЈÁXćđáĂQ+Z.‡ięąŐw¤ăű>{÷î}X<Ŕüř#ˆ?ÂŽŐőoˇ°”Ú~üŮu`ł[níĆněĆnwJČÄ×4qÂďĺ…Żpjâ8Ż\xŸÎžÉöíĐ!D‘ÓBžÔë˛?o „A',°ěĂ/?GĎČĂŘš!tĂÜÄEg\w IDATŢˆR‘ŔvŢČ „äp˙8ĺA<ß#cXXzdU*…ĆžŢŃô1ňą“I)“۸şVó5/â4ŠéTŒě6Đěӏş&!5!5˛Că˜Ď~“úřf˙î?0ôúw‘2důř#ż˙?ŇűĐIĚRoęœôa­żűń4"ä?'^×îŕÂöëJmXőFĚB˘!Yoú\™Žăzőz‹ęjcÇöR.(WJœ?™ÁÁ>|/`ph0fTÉ؂zŰfue•~˝‡ţţ ‹?~˜Źm!P˜ŚN&“Ç06@ŕČ]1 Ý pzŁĂz˝Í­Ů*7fVš>˝Lu­AŤíăů TĚjLʟcFJ*î/AĹ"ŻQëô÷ž¤â ƒx]ŐA(¤đAč‘AT"Äťán?SW‹ľ‚XÄ×u-őëÇ[wgŤj`L÷ű‰nľéŔ(:Źhŕű~ږ–°‚ Ŕ0ŒPB°¸¸ˇRšŰ5ÝëarMmŰNŰó<ŞŐ*ÍÁýű÷§.P+++Üźy‹•ŐUZÍžçEVďwИšs/{ŠÚ▘1Ýî^RJňůcc{8yň$ĺrŰ2cś– Óéŕy LÓLŤO:vÁ˜Ý؍Ý؍O9Ů˝Đ§¸MQnY:–ĽÓSÉrč@oŞ/„HüméŚUîh%y‰ˆˆ‹Â>+OÁ´ńě"Ÿ´=N˘SŁI‰.ulatą•EŹQüÉôîîtb˝Ulîn—m+@×54͎hν*"ľĂcމ†|ˇ°4Cćț6˝vŽŤ€R|’-BLŠc t”ĝŻíýLˆE×IëĆ÷ؔpíTdw˙źÉslä ‡†öň{ÍŻqsnš÷ć/qł6C6y˘W°H‰ys/ůž}ô c p"SÓçQށ 0Ľ†nfČžšÁÄá‡ŰKäVX›BÇĐ54>]ŚŮöÖČDôT|ä{Ujfś@ĎąÇhîçĆé—PŽOĄˇˇ4 )ľŽy"î ë×bgę˛lŢ˝^;ďS‰ŰVnĄŞpHĆňrŰś°,Űś°3““Ǹ~í„…|ŽlÎŠŘ Â×§Óńhľ]ÖjM–W›ĚĚ­qéÚ×§WY[oĄŇÜ@˘Â¨(—Z—ľ4‘Ä‹›[ Đ"]— p]ŻK''š‡5tÝčŇz!bĂ(RVTbŞ!|6‘Ş0Í[Ň6–˜ĺxŸťín éAÓ[ó‡Ű囀6~ײěÔĆ;öu­VŁÓéÉdbFbĢJl­Ă0¤ŻŻ/j’–Ľdn'śÚݚ3É~šěŠÉßšŚ™śJU*9pŕŐj•k׎3;7Gľľ1%@ßíľ^>úuÜü˜]‡eš†eYôT*?~œŠ˝Sؖ•Î;M“é{Mt{>-ם]0f7vc7văSNëş7ľ­íZ=Äm{ŞŐŽ%ۇb6ŽH,a`é÷Q´NÜŚĘdł›čĘ3&ŘúKŸ`B´ő{w>ŔšKOú@I°Dř8`EîXh˜Ÿ°ËĂNCůaOΡ&Çi)˛ˇě.şĺŽ÷ŐíÁœS2Łhp8›c˙ä>Béčńc ĄEŹ qűv—Ű%ÓbRń$lĄƒŚŁ>ŐąŸşĺřNUˇ‘ƇXˇ*"*}łĽĆ?˙Bäd%ĺSi ˇ ,Ü[D,‚ŰkýÚîŘq‹ĆĆşą3¨ř>Rj(ë͐Î-‡ľFHÇ]b˝Öa˙žaŽšŕłŸ}œ7nqáÂ%FÇF˜ÚťÓ2Čdm*•ý2 Ű49th_ü$Ž9:9ŽÇZ­Ăľ[˜ż<ĎŐKÔę:އçG˛şĄ-{M˜J)T¨đ}/e !"0Á&VŠ"e1H)Đ4ID€ŠŢýˇ’Ř@ ćŕśśNĚP€…aŘD…Ó@ ŰYGk°@ …śĂâůQן;ç?ĘüN\ŒşŮ+Ý lj,ˇu]Ç4ÍmëZÄ\‰ˇLŘ@$Ň}I€˜z˝N­VĂśm˛Ů,…B!}îdŽ'ϗ<†Śit:lŰĆuݔ-Ól6ÓśŚDç&aËhšĆúú:BŠĹ"'NçÔŠ‡Y^^azf–k׎ąśVÝ˜şÖůŽĄßŞ­uˇźa{›]@Œddx„‡:ÁĐĐ0ůB-ž'¤¸Ž›2†ÇAA˙§ć|ˇ ĆěĆněĆn|jJÔâQ@5¸K/ô˝ęn­˛îC‚Ń%ž*n |¤ę=ů\Ýţĺv›x$”čO#!J6Žľ ULëŐ?h°Ó˜Ý/fÓ߼Ć?âÓoˆŘŽÝ[Ľ˙aŽÉíÇ*ŇCHNŚ“HĆ\.wŰ{f' 3šÇ,ÓÄÂL{ÍSC|4€sƒľFŞś'T—ËԎ7Ă' ˆü* D{)ÎŇÂ5Ň1ź——š}-h†D3ôčÄ=ĺ…mgiý*źü=iŁŔń<.źk7şn_)d:ŻśÎĂDP_Ó4B˘‚Č ¨ăJćWBęMľšKŁądŽ™dxxˆršD˝ŃDƒƒ˝ ÷ó˙ł÷ćArw~ç'óuvő tݸI€7ŠŃŒDI3’G#ÍzN;4Ţ]{ě°wíuÄţˇn„wccwcĂáˆÝńzĂ3keFŇHňŒ.˘x“ŕHgăj4ú¨ęşŢ•šź—Ż^Uw㠐 맀vW˝z•™/3ßüţžßœëĆ, ^ŃnÇď[Şś¸˛PçÂĺ*..qţR•Ľj‹FłMŤíŀ¤ˆ­™…P ƒE¤{ ­5R”[Ú)ƒ4t1\b6‹č~í0!b ,­"¤ĐH-;sČX§‰t„Va"\ď ¤ƒ!=V„ ‹çć<Ł'Ś”"—˭АBĐn{DQ,*\(R­@€BĄĺŒř­*Œ~V†‰C[gŽ3Ÿ×l6i6›ŠĆ €ëş+ކ!śm­/ kĹüÜĚĹcccŠułŮLEy bÚȰ] Eą•šďűÔëuJĽRú^ŕ„a˜~ˇJĽ’‚2†e3>>Fe°ÂśŰ8{é ł—fi,4iÔ´Űí´|jő9[_€éźÎômŢśaÇŽÝěŘąBĄ˜Ü_§}Úí6Žăŕű~ Ä‹ĹŰŞëŐcúя~ôăśm|%–eăű!–aŰrÍ$ţúˆžŕ^óŞ7{c.ŽţŤŽď~1aâűéxóIr˘äă8ö mČn[,nM÷Üđ=č[ßGfŁŞ”ŚŃhvěJ)ąm›vť…műärî %㷌E!zˇş ¤âcď˝[Ţ_ív;ÝôŚĽFR†!íśG>Ÿťî6_ýu"ŁEя>ZwŒŕîÇŃN+×ęŹ[K j­PĄB …Ň’0R´|E­Pkx,.ŀ̞ťś°izZ€Rš T´ZíV@­ŢćĘb‹—™š¸Ŕů‹5.^ŽQ]n†QŹ –ô“eš ‹3Bk+\v‹—Ʝ=!D’ Ť”aŃŢU{ăuQI¤˘Tě8}ś•iŐY›„DH°¤&Ö?ľA8ń\ˆBuŻoÁ ÐӧOECCĂH)ĂĎóČĺrT*ęő:łłłřžĎĐĐPÚ§Ífƒ={öPŠT>Ň=AŔüü<ƒƒƒœ={–ááa&&&REQĘĆČçó]ĽožçqĺĘΞ=ËţýűS‹íě1O:ćšĆĹͰkŒĆËŕŕ Žă¤}gʕ ĐbYVş×é\?ާzžGťÝŽ]6GFş>/[˛ÔËŽŠ?Ë÷đ@DeŸ‰­ëŘžm+^-`a~‘Ë—gŠVkÔëu|ßĂ÷ƒT÷'[Ҥľę3ëƒeIlŰĄT*R,–X?gËÄ:Ć7NăóXރJJćĐ ’˛ŞŘ•*ĚršÜGŕú`L?úя~|bÁ˜NímŤŐ$ŸĎcŰ֚€L÷ĎWť^Ĺľř'vQJÜZ:q„´Z-„ŠžůcŰ6QQŻ7( Šd?QYŮUâ;ł‹O9ăä>ť)5 žă8iňŸËš7d§šV˛ŸnôzדĐ}Z“UĽ4­Vœ8:‰łŽi?sZëyą`g>Ÿťý@f?Ňu%ŠÂ乊őŽú:;ŤÍq:efuÂâ„5ęŘä&zR+ŃFŃ A¨š4P­+–ꍦGŤísß˝ťq? YŹśx˙ƒ‹9v‘ă§.łTmĆ×2ŚÚkâZ˝€™łJ˘0BŠhŐdŇ$ŕ&Á–RƢ­€Š‘Š]Škˆ|‹Ř‰ĆĚËąöH”ĚÁćY7s§ŒŰD$ş;„HR4Jç‘ÂÝ2Áh#(3ńd"8ŤFŠxţń<‰‰I.^ź˜”ÜĂÂńőсΚš9‚ HĘrVÎűŤą0Ě~1fʉ”Xkę<—’v;v[*•Jäóy\×%‚´ß,ËÂuݔŮbŘ2†ÉR, Ø1ÔjľĐZ§eM02š2YÉ\+ŸĎwéŘh4‘ąČÖztKÓ¨7B°yÓ4;śoMmŘëő:*R,UŤ,..Ňl6QJŃhÔY^ާ.QëĆÇMąX¤RŠ011ëćHž” <˘ů řËUŹĄ˘ŇNĄH””˘742“ŮöÁ˜~ôŁýř”1FÓ"–——“zlk…uęÍHˆîävJż‹¸u"žZ‹ÔŇqœz#fł^ŇWrĹŚéz“ëOsbŁ…@ܲqť|¨ÄÝöݔnŢ{2 ě4›-Z­V*:yťž‹ě¸Íş)q=6žŸ’ůÍ|ĺř$ÖN7ű˝Ď•Ó℡‘ˆ(vě űqťŔŃĽIae\¨ú‘i'Ľ‰THF]ĺńx6˘Ś‘j v Ôqr)ľmŃö43—Ú4š!ĄžŔĺ%ĹҲĎĹKKĚ-ÔŠ7<Úm? CB`I‘0KŽ˝–Hۊ?3 Ó×fK+M‚Ů5wj2k›&ŠB”]c! JkĽťćš˜MaĽâĆąŰTÂŽĄS~$„Œ× Ą’u=˘ľR‘˛nzŐŚm;ěÜš3iALNާP(&ěʸFF†B01ą>ĂxŇYŔUA>ŸgçΝX–ņ z¸ń!Ť­ +Éu]†‡‡9xđ ů|lĐť˙ˆűDt4Faş Ž27ĺDĐaÂMĎóLŮ:ív;ĺ5 !s ß÷Ó+ uj2ŽKƑIHA;jÓ˘E[ˇg 'rpŠśe§š6阆‡q—ąąŃ”=­Xó<BĄ@ĄPHżƒi3™jÁäRŇĘšřś3<‰ =dk™°Qžf‹ĄÉ)PV˘?Ö[ňŐcúя~ôăS’¨dÔfNŞbQËNţöQ’×;?AČ|ęáߌ+g6ł۲‘ŽLUô{7ٝžĘcŰQÔąű\yŻWżÇOw.Žo™ň‰­%–ĺŕ$vŇ˝ cśüĹü?SąśLŻűÄíˇ˝cřÓ_DŁ;'áR’ËĹĽ}ŤfŠprâ쑥˘Ť>sÖ˘Î(Ľ…ë&ĺ)ýň¤ŤŽß:Ă*Y­„gľ’a$ź1˜Ą‘DJpiŢgĄvŢź„ç‡iŮE§äIJ%Jé˜Ł@ö|fŔ›Ń§2?Ď šĆ%HÖZKbf\$ş0 řjĹ A‘Za÷jɘĎV*Ö‚Ň S&vą–™Ď‰H\V‹ü(iŁpoŢÇčřHlűú•[až“2z× ŰvşœţĚŢĐAfh†R@,­ł64Fź×$†­bĆMÖÉ0M ŰĔŻAGŁĆçĹb1ŐŘË [h4-4 N&9\FÄ(śˆ_ŁŃ†!ĹbĽTĘBĐl6p]—\ÎĹqěÔ `ýúőé=çr1ł)ŰVćžÂ0ě¸<ĺ 1KK—PĹ Ţr UË%ds™¨QEËh'‡e9HŰžmŤvŒéG?úяŰ0č ŒY„WlŹúqËű ˇ/ÖŇęÉn8ĽTéĆŚˇ/z“ŸŤYWgʎm˙ŮşIŤIÎÖ˛ĎöĄ9î÷Őíď§ľćŔ~ŹŢ^śmŁt,ěžFţßqYLŇĆVœ¸7˲Rׯ˜E’ľ“mفqQ˜$ËŮr”ÎgĹk’"v(˛$–î¸)™˛‹úXZ'˘ůY'¤+&.ŤQ؎ƒăŘ]ĺ†]sqr KvŇĘ0 ‘Z_Jd4ß5*ě[1PDl}ę]Er_A"Ľű‰W–eŻi PšËY]ˆY§4ŹĂ|šŸż’‚1ccc”J%\׼Ýnăşn:N xa„› ŕÖ j4 jľ“““iš‘)Ż ĂZ­†RŠršÜUĘ 'LҖ\ ŽĐ›lÎoF$"×ŘÉž@çwĹb1-nľZÔëőT×FJÉččh ° šÍfş/3S>Ÿ§^Ż“ËĺŇď›j܍f;—§84œ–oYź+°ćÎpF§ˆň}kë~ôŁýřÔm~WŰ ÷Űߍ%÷kőE–y‘­ÍîÇí흍%‹kÚK÷ŸŻĽŸÖ˛Š_-‘Ëž°öűęöƒ1ý¸včäqŇ(S&Wv-Ȗň˜˙–Ćh(SzŇaŽh¤Ô=şTNč>¤‘–DKkť$ŔJŻŰ‘q&=&mćw)`cÓ¤„Ňˆ~ëj 6†iĽT tdĘlş\ő:S:Iz\ö¤ą„DĘěáF/Č~Ó7őzĎs>%Î`Ýz\fü@" Đyž‡ďűéX3,Ł=“eHˇ$!ľZ-[ëÖ­C)•2X˛‡ƒƒƒŠeVkŚX,ĆâÁD´T Oy8ÚaKq3D‰Őşî¸VdV(Ť×bßů,×uq'Ű5żËŠ÷:$ehĚuZ­š\.ꍔB$%zšŃ ôŕ8RE(ŻĺŐű`L?úя~|ę6u=ŽIq)…)Sę'"ˇ> I˙•nާÝM?ĹúýtťGłŠĘRşŻň?Ýĺ|rí~îˇ÷GíŤŐ´•ÖJüŕcÇÎ4ëžíŒký÷šwtƒďű¨żżŮ×ů¨ßż÷ľÝ˙ŽK4űĺI×nÁ´čîIOë{×öt­I4ϲ ƒa%dÁ‘ŢůGdl´;{^+›ź ŁŤ–^D¤ “Îýʤ䳓ČcYeŠ€3,žLÂ.’›1ŹĽ5"Sš’ÝŐˇ8-:Î7ą58€Ń“‘+˜Yćý7§Ż:ďGŕý¤1F\9+†^,–ŇRk e´Z­Ô) ĚeçcSşÔh4’ňŇ\ j0Íź'Ëd2 „4š ”P´Źśc“S9*… Ä웰㺔ËĺhľZ)Ł%ű}|ßOAŁ%SŠTR]?óĚe-ĂsšÜŠďgX:f,!bŁ3“ŐىßkĄ…D Çś sy{ćĹ>ӏ~ôَ€é,¨‹ŢXÓ²ŹtąěÖśčýwv#ÝűšŐţţ([™ľ>cľ×ÜŞűYíýŤÝGďŚEŹňßz•×Ç@˜qŇZ”uú*"ŠÂDč×íč!RJ§ëUľčv]˛m Űv>D’ŮGc>j_Ĺtö(ĽŔŻF+Ʋä ;ň›ŸĚˆxÍZŻżÚunô3nôuz9ďĂ´Ag^TJgÄ<ík‚gý`‹%[z´˘ěKݜS˛ÖҐɞ×˙Y0ŚSf!RES6’eš¤ŸŚť™&ĆyŃŹuQk‹8–›h7™×e™ŁU“€w˛ăÔŤC#(­R_ó{)bdsÍôš—Â݀×MŒĎƒ5w˘K'ŀ$Œ¨VŤŠ@ˇ{Žă¤@Őââ"ĺr9[7ĽIĆĆ:{Xe˜4DIEŽ4‚Ő°ŠnƒlIrĽ^ËKÇśé×uSŔ% Č‹iS6UŤŐRűń,ˆiŰvZʤľŚÝnłźźL†Š#RěˆŐŃŐń<fłÉČČHט5 hśüÜBśmŁoÓęƒ1ýčG?úqëá˜tck&!XażŰ˝Ńž‘Żő÷Gd¸Ć5Ĺm¸qďľűžÖç @Ś o™$ż[ 1kâ G_WáăÜt‚mǁF$°WëǀkąëÄÚ:@WO´ú%h7+Iˆ˘ß÷R‘Ęl_0ÚuŽSÝ~Üî~ŇX–ÄóşçŔ~Ź˝öÂŚô(ËÂëšO2ç˝ĚĂ@ɊŤfKw✊˘tŽ’V‡]–&śĐĺÔÍŒ•”1‘€ÜąHzüű,ëŚ źKŞ’D†ĄhbăL$ĽDZ ű%šWeKŞĐ‰Ńő* N?nlžU*ębIEQ„ëş‰Ł ĹČČHŞW¤”˘Z­ŚnvĆąÉ0N˛nK1ŕ†Ům™ÔUIůT˝%¤#)%ŠElËFEńgúžOľZe`` ˝Ś[žď“ĎçÓk4›M•JĽ ¤4bĂĆÉ) î˜r:ŁÓh4şîŐq†‡‡S@'[~Ő Ę˜öťLő>ӏ~ôَaÁĚŇńAăşšŒh_?>ˆ,Ů ĆbwaaۢëOkM>ŸťŞF?nmˆĚÉlźYŠ]˛&­ž×ŚT*ĽŽ$ŮčýřđýÔisc›Şˆ˘pşiăra€˜ë)=ëÇ­é3ˆbK\ŐOŒWa´ŠKtÖĐÚ1mśZéQ\śÓfVŢí)=ʖPŹöXŹâ%6âçOŁQÝĽL);!jbaáъ(ŇŠ`poé”Ht`4‘0fĚ3ߍę"ÎzKő˛M;{˘¸œIkŠ˘´dęć­ć{ŢÔ'†Ű-ßěŘћń“C 0ćy^W)ŽmÇîvžçĽŽDRĘTo&ŤšbŔš˜Ÿp#Š"lÇFĄhŤ—ýˌşŁrů2qÔĘĺ2őzJĽBŤŐ˘ŐjĽ6ݞçĽŘćpĹhşŒĽz2YM1ÇqşŘąY(ó{ĽÍfŰś™››ŁP(¤śŕA¤Źł0஠ÎĺrŠ#•q•ęƒ1ýčG?úń)HúÍßQâşN&ÁěÇǝˆ¤'<~ĐŐgJEé ŇŐ/ľńßÖÝgŸ7&’Ů]ÚozĄ?HVöY.—Ł^o¤5ěĆ]ÂqÜ.Đlľ$ ű<öŠmf“ř÷şkž‡ôű䚀Œůw|âŞŇľŮ@K)pŤ/$ű é3ÓWž—mZŇúôťąß@HăÄŇŁ“S˛‰ß%Ĺ7 3ŚKܡG[Ў„šW‹f5ŔRgž˲Rf@ „ZHŤsínŚ i)“hb@Ś;7ӟҺóśôúvćžU×űĽXÝŇž÷žEG‡ nt‘č’ š[PŽ$nńóŘťěÖ ÈZm9˛ëđÁ0\ ó#ëüŘl6(—Ë)ČŃjľh6›ŠVLçpŞÝ5>Í5}ßÇvl‚0`9ZŚ5˜Ěm@‡7çv• đŁT*Ľ ‡Ń]ZZÂqÚí6B<ĎK­łGFFb€ÂśW‚T‹ŚĆôŁýčǧ1‹”eĺ?Ń9öí8Ľ^­ŽýăŒxÓîJđăĹ]\ť_’ͨB#H(ÚW9Eën_˝ęvďz&>ƒOBĐŐWaR(”VMîŻ&kţŽ˘(q‰E*,™¸XVzڗ}kŽí, ź7˝ŃöëJ~ł¨Y&‹Ÿ€~YËŮ드mÓJ4úLĽŐÖ+˝Ć,˝rž1óŠ4ó‘^•+…kłďςÉ1KIŽ`dfYٟɌͰů|+ÊéĄIY:óĎ>“]eSR¤%H˝6čÝ÷-SŕIém\žzËŢ`J)[ K‰%ĺUőĽ>Ě3˜ËšjžůxçşJŢL›öŸS+ešÄ ÓĺŽÔ+rk܇ ŕ’Í-—Ë)@bŔĎó°m;-Ą3lĽÂÔĂ:Ëá2%ŤČ8ăXÚBştG×%k§ŽĹäz…BBĄŢ[ŁŃHŮ3…B!˝7S.•˝fv|š§`ň}c†_”Z| !Čçó …Ôů  ŐjĄ”"ŸĎ§í–?FD¸ĆôŁýčǧ ŒÉžx}œ`ČŐďQ÷œ¤­˝qČ ×sĎ sĐ&1č?ě­űżŽŠ­@kÚa‹šö)ZŞĆ ľŠ;Žc9Ha!’ éڟ˝đ"2̌~ŹöldÇŤfnä:aŃjľ9yú ‡ß>Ęű'ÎpĺĘ"m/>­Ť”ËLNŽłçŽÜwĎ^֏a;všŕÜHҝWŸ%íĄŢžęU>JÖŇatĘ"ôU€Ąo´Ż˛ÚY ęÎJu:O÷Ą˜U&jč*ĹËjŹŹÖŽJé.@$s™l˝ŐŔ™(RŠ]uäɎÍěZ–%‹lƀ’•NO™^î}6ťĘŚzl´×<ĽŃ•ÉęăEjU&‘Đ …„DŰK y̓k/ŝ9Á$ôhĂÇąťžI^˜DźŰŚ”ęś7€acdْ7ëŮ3P1Ű3"ütŽ(“Ë庘0ÝcD¤ě(نąPsĄPH™Y€..ĹΆ!ĽR  ËşÝn#-‰yxÂĂ}ÖÖxŽ“\A…)#ÇşY ř^›iٰ~ýz€TŽT*u ›÷F‹j˛ómŠČ.—KYÍfo`_Y—(3ŒFŽů<@ő˔úя~ôăS˜”\ lIŘD[Ƥň:Wýťń- }žüů“ `rr’Ýťw%‹çt;‚.ťĚ™™´ŇlŮşšc‡šJ˘jNăځćŘEŸˇ/¸–ŕŢi‡íăŽőq—mĹuŮכ(fičAäsŚ~˜ĂÍżĄÍ2y™§¤ÇsśąŢÝÁHn#ŽG +ůcęö ÷X “Íq"ťŘqâ×ÎĚĆb…ý†Oču˛ í0—bŸ‡ IDAT!ÜOÎ)yvš2Z›É”}˝ďÇ'…oż{Œď|˙gźqřó ‹ÔjuÚm/݀9ŽCĄghp€őë×ńÄçáë_ý"ÓSq]ŰśŽűš[ZŞrř­Ăh4÷Ýw/š\>=áěí§ŐʨzŰŕ“˜ŕŻVNąÚ)~6ńťÚ÷č}O¨#Bᫀvä3ďUYˆ–B0,ˌşƒä9é` ‰E6 NŕĐk4›Ńłyóˇhˇ[ěžk7ŁŁŁŤ–“ôŽĂ'NŇn{  ńäSOóšĎ=ƎŰoĘü|;çAcĄÜĚĘ`NVëŤÍˇ]óqV@W“2QV›ŸWcaUÝźô˛SŇ닎w,řkě¨W&ÂćŰ)•h’ăœ$Stó˝S–”)­k\Ż…f“Ýlť˜?Űl‘€(uqč”#A˘ľâʕ+)3¤RŠt÷őú2íśGŠTJYڤ2‚ذm‹ĺĺ:J)p])-ršÜ5žéŐŘTWۃyŠö‰Ö‚FŁ‘˛3bˇ Á.aÝřťtRyĂi6›´ŰíTŸĹ!av­9Ř0Îw@1űžfŤVvÄRťĘ@ąĚˆ3‚4Žív_ÓfYfq§ÜďҤB¤%JYáBĄ:eÁœ|>ŸŢˇdŒđł’‚ eş˜§,d’ ä$.bć~|ß§^ݧ÷kąű`L?úя~|–6}Ym­hűm”V8–CÎvÓSŠ[ąš×ZŃjľř7˙ćßňőßú[źöÚ!ç‘GNśóç/đŁţgîš÷ž~úžüĺ'8îa˛aădş8fkxÍi BixsĆçO_\N˙$ϟôů١1‡%>i}qíݡҚF¸Ě‰úafŐ Š˜îksž™čM¤').łÎŢÍ´}/ůÝó%,aÇ´n™čä'”‚l*$ŽraĹĎ80`Řő5Ť_" Ë^Äы>ăeÉŚ÷”ÝHÚ$Ö|ŚĚŸKł—ůWňďř÷ßů1íV #*I\LˇQHÓk°PmrrćŻz‡ďüŐOřoţáßĺoýúŞ\—řŹÖš?ýÓ?ešVGHÉ ĎżÄÔÔFĘ|ýˇ~3MVĚ&3+Jh~gNGĽé†ň“ 8 ąś€ň‡eŞřQ@=hňŇň1~´ü*ݍ,ëVÇĄFCExĐÚÎ×ËňpĺnÝ2‰›î˘…¸*C͔ť=ůäSüäÇ?crĂGŢ}—o~󛌌 w=Kڟ”R|ď{ß§X,ńŕP*ůĺ/Ÿgii‰ŃŃŃ.ąÉ;K§Çtľ„ŽH:ŕ‹FŠnĐd-&ÔĘr ą&Ř­Ł3–Ůş‹Ń°jFbą]’9C*M:Ľ”1@Ł×ŘҌOÝľÇHŸ_˙,R ‘č’ô~śs˛Ú8ćw†‰Đëř”e­đÜh' :ÖݖeŃl6!ă¸D‘˘V]Fi•ąçy>AáşNźF*-ŐŃÂP‘Ëĺ“ç^áy>BHÂ0Z÷öŠé“¸ßŻď[zžŸ24 Ă ŐjÓnˇcĆU˛F›hł^Ôj5†††R°ČĚmŽëŚ€‰yżh˛?7z/Ĺr‘+­y@łŽ´Žv˝EMTIKŮrš\—Ĺş´ …Bzxg$ß÷ŹÎŔŔš\.mťRŠD­VKżłyfÇáʕ+Řś2w‚  X,Ňjľ’öňR‘Ţ\.GłŮě˛ňÎ=YPŇ÷ýÔ&۸2EQÄââ"Ĺb1ľ˙îƒ1ýčG?úńYe€f˝Á˙ąđ#ňśĂ”ă+Ă+UP^„ޘ Ž-(ĺŹkŇ|Ż•áŔ‰‰ ŞŐ*J)ţÓú333€ćŕűyíľ×š2?ĎĚŮsüŕ?äŔ}h6[üô§?ăĹ_"—ËńÇüÇüٟý­V‹Gy˜'žx‚|!OÁĄ™6RhlK°Ž"™ŤGźtĘgď÷ŽL4šFPc68‡ŻUźéšHĔf‰& ÔýW8źAÁ+3˛ź™q{+Łî&Jî Y!gąĽqę¨Ul!şV4›-žzę)^zéeJĽçďü!““Ôj5\×eqq‰ď}ďű|ó›żĹĐĐĽR‰0 ńMżEÁ)P´Räs(ĽX^^î_ kŌSă’dĘ}ŒPŽaą°Č܇)ŤĘ(Zk …Íf“áááĚ1Œ•………DtÜO]ĄL™TĄPȔqŀN 1Œc}m@(ŁŻcl°ű̘~ôŁýř,nü’Ó-ŻÝâżŇكxƒĺ*ŠPž?şŔы!Z\ŰbÇ:›/ě"'W–5ÜČ)lźY‹8uę­V“Ë—ç8qâôGßâ;ßůKΝ?Çäž÷ńĚÓĎđĺ/‰S§Oł´´Č•+—ŁÝjsęTL×ßşe+ů|0 'Tšů”r’Í#6a¤š¤#.Ő˘´ ëNë+­ŐöóÁeBŃѐ">›BĄą„x´Uƒ%1ËŠđÜv‘A1Á˜ł1w3#ÎE{„‚]Á‘6R;HVgľ4›MΞ=Çöí;§ÝnóúëođŢ{ď144ÄÄú –—xń…—€Ç{Œ™™sĚÎÎ26:Ęşőëx饗سçnxŕ –Í|CńÔ{ GZ8Ÿ÷ŘťÁŚR´–¸#ú¤ĂĚ0 ŁĆ÷^~ímţ—ůoyí­Ł´Őj˙ţŸţ=6LŹĂś×=UJqđŕAΜ>Ë/ůĹb˝{÷ŕş'Oœ¤T`bb=ď˝÷>÷ÝwwÝuO?ý gΜ# î;ŔŃcÇزy/żň*a…Oţ”•'j/SLŚ\Nâ DŇNŮ-ńlÔ÷;őłk/."uNđ}Ÿ0Œ(ňŒŽŽđěłĎŰśmĺý÷séŇEĘ%˝~ˆééiăăă,--16>ĆÔÔ47nŕÜůsaŔ˝÷ŢĂ\[s`ĘĺÉc!Węu/vzt›űąS÷ŽDÜ ×᠔üń#Ÿ‹Ís´”ßIčRÁEŁ÷‘Š÷OéԚH´ńĹY‚óœô_¤$‡)Ë1œuŒŘÓLĺîf0żKÚ+6ˇĹb‘{îŮωNđŢą÷¨TĘ|÷ťßçK_ú33gš<;‡ďlظgžţ%ÍF›3gÎP.đÁ'yřĄůŕƒ“|ík_M7/Ť^ +Iچlžćb-â’b߆;ȤŁOdžß÷yűÝăü_˙ď_ňę[Ç Bö×č$ĺ“ëF8xĎNśmž$ŸsYŞŐ9úŢiŢz÷$ÍśÇúţӔJ%ţŮ?úCĆdž×LB´†S§Nqůňe*ƒe\׼28ŔĚĚ cccĚÍÍáűwÝľ›3gÎpęÔ)ĐÇśp›|>G.ç’Ëĺ°mëŽ(sů(ÚUšX\ůdă˙ĎÂOůŠ˜†žşx|%üyó9ćÂeţÉČט*ŽKôšŽ~.\ŕôéS)kliąĘĚĚ ó óěÚ˝‹M›6qüřqšÍ&=ôív‹“'O2::–ęٖEĽ2ŔśmŰyúé§ůҗž ŸĎ÷Šî` &űw݈n/ÜыY}ŽJĹq{Ř#˝ĺk•$ué˛%ŔqŞďŇe-/ŇJĺôűH ĘčŁX)pÝőŮR¤śĘŮűPşC̖ÂĘŢś@§{^}œlŠHEXB÷”Â~ČçD\}Ęş Ĺ{˘Őʤť;Íśm&&&ŘśmCCC×ýaHuŠĘäääużÇq&&&™˝t™˝{÷Ź)LoĘl\×M™ –eQŤŐBP,SpĂ0U gʐLImŰ ’óíFJ#u ;)ň´rVâ˛ä TGôx`` ub ÐĹĹErš\:י1ž°°ZVg˘Ly‘)Ą3 ’˜Ď1ěĂŽ‘RŚŽL3„jľ]`Nö˝ćZŚ=ŒŚŽąÔ^\\d||<j˛ŽM}0ŚýčG?>3@ŒFE!ţĺ÷X|;¨Ć!ńÚ JăxÎťĆîvČçm\×ĆóíVTŽššYÚ­6–má:9lÇaxx˜\ROŰťÁËţˇë:üóţψ"EŠTdŰśměÝť—šš9îż˙~ŚŚ6˛qăF„ěßżĽĽ*““lŘ0IĄPdqq|>ĎČČ=ô žď3::ĘŔŔB€-lśŠľ>¸1T’ět88ťnâOTĄhGmÎľÎŕGńF0ë%¤H˙[ڌ"Ń˙šPDuŐ`NœĂ-Šb„KÍă|~üÎĘ< Ž\™Ăśmććć¸ti×uY^^&Brn­I„üš¸9Çą)óäÜB †††˜ššJ7Ľ-J9A >Ě.GŘR0=lqçuO‡˘ź\ođg˙ńŻyţŐ#xŚŁÖŘţ4ŽeąmóřŰ_äţ{wQ,ćńȂ›ăŇěž|î?üéK\Y¨óçß}Š­›§řÖď ×uVݟٜÍC=ș3g˜ššĆqśmŰĘŕŕ[ślA)ĹŚMÓlŰśíۡ°eËfţëż˙_255Ĺşőë( Ln˜$—Ë݁sŰőż6RUo™ťô$?öߢĄŰ¨ě‘÷ KëL–Ɂ5ššnň7ţ–\ţŠőuĆŹákÚ_ďÝť7MŇŚŚŚřáţšbŠČŽۘžžf` tŸťîş‹ ٸq…BÇśăňQK&'ފ 60=˝ŠÄ|ęŔ™Xüś7Yî¨NcG=EÄę‰˙Z ĚjŻMő9’˛!™:üˆ7D˛e˛`‹iYŠ+˘`%łVZw[o˝3S\;őWЍŻXSGG°âŤÄ$ÎZQ°rˆ2Ě ¸=”Š]ójľ*ŽëňŘcŁTD>Ÿ§^_ŚP(d’ş6Ď󘛋×ŮĎţó8ŽC­VĂ÷}†††ÖdşAŔââ"űöîĹób]’(ŒRđdľPJŃl6i4ěŘą]ťvRʤ Ájmčş.ŽcĽ, -S2nC†1’čÍ:9ރŻ|ÚQ$ŒćFÄ’V:~˘(Äą"ĽŽDQĽ€‡‘‰˘ˆfł™śƒ"°Ě¸t]7-™6l•ŹK’SĚ7ßAkMŤŐ², …Bú~ÎA€ďű]#Ć)* ™Ď6ÎU­V‹áááÔŇúZĺg}0ŚýčG?>P ~łŠ=ű*vĐLEř„V¸­ó4gße1ż;Ý$Ľ˘y@­VCV*\˜9ĎâüŽăËçČĺó”K%ÜD(m- ĆPL?÷šĎuŐţŽŒŒ°}űśôuĂĂĂé"g^ˇaÆ.÷ܳŌP X_ąříűĘxaźůË;ąć͝˜§h4Ëíź‘ž”ůëĄ@&Ůüv•2‘”2‰ŹŃhše9ĎYőžďáÚůŽ ˜ÖšRŠÄţýűyűíwřÜççáGćá‡áľCŻqŕžűŘźySSSD*âמđk<đŔýĚĚĚpúÔiśmߖž¤eéč#%Éť üÍ;-Î.XÜě0=bcÉ;كşÇˇ" #Ţ|ý}ž÷ŸŸ§ŢôĚśľvüBh†řÇďěÚš…gž“ç^~/ (ĺ]~çëżĘˇ~÷Ť„üĺ_żŔÂRƒ˙ď/~ÎŻ>~€­›7ŽzŠi’ú 6t=#6L$?×é†zóćMékÖŻ_Öš‰‰ ´Ölܸń†,źďD@şúüőŇŤ<í˝CCˇb F% ŒXÖ=™˜é֞dNmíó“ö›l_šŕď䞘,]ŞWJ†††xôŃGŇ>¸˙ ąs׎T'add¸+[‘,7MŠĹ"żűťżĂččH‰ťă˜ŢyĆ2jUćŒčq6ę€ÝöÖiÉNF#&+ŒŰ)Q2 ĂęŕŒ†.vJˇƒSJ}éšů:׍_ßwŹ#K¨tÖŤ:6ĆĘ:9x0ŽQŮŞŐޏť]¨4čŘ~Űą-,ðɜšžžy?žG+mĆŤŐ%Ţ:|˜ĘŔ###´Z­4iߡo_ʰX Gožů–e388˜2LjľŸűÜçÖźß÷9zô(…B‰ŔáÜůڧ§˜œœ\sîŤŐj9r„fłÉúő뙛›cllŒíۡŻŇv+ËÚ ťÄܧa’„aˆďűärščĐÉţ1ĐËz™‚U §ó8ŇNy!Œšœ›–|e˛ cL{™9rqq‘BĄ€R*uSŠľÓâ×pČ|ŹĹ´y†˛Nž–eQ­VSŰj#:lŔ-SžĐnˇS ¨Ńh`Űv*lܙŒ8o­VŁRФď7BĆý2Ľ~ôŁýřŹ@0]ľťęĘqrËgÁJě “ˆ$š|ˆ`tĺŃő驀mť„A„WŻÓź0Ëȟ~›ÂÂVÁÁ.şŘĹÁŻ|‘đ‰Żŕ$ľÇkšz˜E´÷g&VŻ­XRPĘA)wç÷]¤gk'YÔuo„-a6EŚßČ0bDҤŕT\3ŻcPF ńfÔ҂‚?€ľnuۜٺu ›7oB+íŘ0“Ö!ĽÄśl6lœě˘Â ą˙žt̆ŮóږäŃíyönĚńŢlČXY˛iľĥćÓ=žă¤ešŢŕ˙ţó˛\oŁ"ŕęš!–móŔ={8pďnžüĺ̜Ÿĺżýű_gtx'/đł_žE>ŸăKżz—çÄ鋜™šĚ~ú˙ŕ[ßH7Ľ˝÷cœĆVV>úóöi˜Iđ–3ÍKü¨uˆU'ň#Xôár}b=ŰBÍ{?™m‰pa$‡ŘX„-e¨¸ˆœ„œ…°J*ćYć'ޛ<ŢŘĂćňŽX{űŰ;>üđĂh­ş\ŹŽŐO1`Zä+_ůňuť™őăNbô  5f_dÜÍřŹ`qő)1/Q‰ŰQ<Ćş_c˜‹ŚŮŘűö&ç"“ŔöŽĎli“^1WvĈă”!%vRÎblŽ;RťYQcŃŐBÄ]٤<űÝł–ŢńÚ<Žm32<@ąŕÄ÷"ô ëÝYR"„BŠ(qŕ]‡J=řJé„MâűRŠ.{ꏨ°&~íĂ?’jŸ˜~Î:ţŹů|žÝťwŁ3Ľrš„ŒQ*Ż:ď łgϞŽë¸ŽťB{(kM](P¤cKÝh4şl­MéMľZ%|†‡Gđ0 Yś–ąFQ^Dq  ű#ŽkÓhś(r¨(ÄVچFř֔ú˜ň§FŁAľël-)%ËËËĚÍÍ1<!†˛zŤ=(– Ło€†’w™ŠĺQ$W(Ĺ ´ˆ‚–„˙űżběě삃(ťXžž÷—˙‘z¤üŰ;=é'7#‰TœX>‰FD:و&@ŒL¨1RËhщ–Œ"T"eĚČä4OJ‘0iDbńm3!îĆ1–ć]§Ť"dŽ‚š–{CßG pmÁXY0Vvďŕ~‰ŮJ)Ž;ĹŤ‡ŢCëXüňŞß_ ňš>t7s 5ć—ůÍŻ<ĘŢÝ[p›ÉőcDZđڛđŰ_}ŒŰŚ8{ţ őF›^~—Ż˙úŻ0P*ő]?Bż…QÄËíă/F!âlđ:Œ:UCç+­Ń˛[¤9M“m‰ŘZF>´ůĐ8bş #9"Ą8^ć…ć1& #8ňúˇżąŒuCß%kéۏ;;ň9›Í†Éť˛Ç}Tx^':*Ý:$b%–#čbş¤Ĺ)ŁšŃąlŔĎBdâ‡Ut–ŽA@Ł­ë¨w ! \ĂÝŃ@3jŐö^ ÂeОPk^ąˇ“yq÷čDG+PIّÂ.} •yÉüŻ",%!ŕ-Ą„ˆ…™G8Ľ5~;]ů~ T)ĂŹJŔDmXNRĆ.LJ#U„-%‘×Ë"ŠT˛ˇŒű\iZŁuHäɘ– ţ(2Z42usĽ ňQd­xŽ”ÖA܌‘ŽAM۲"P‘Dj J㉠= ކ`­a\.ů.a|ÉŰĘôÁ˜~ôŁýř$$)Ő8^ć#Ą™“°(%ă F˘xů:D+P Â(>ŻŐZ#›XÖ’Ý źÖˆ €v;ĽÚvťÎtí0 ůůϟäîťďć…‹lŰśľKŁ˘wă/„Ŕó<Ţ~űöíŰNj/žČŚM›Ůłçn~ůËçxřá+Îńˇ IDAT‡¨T*Š›SJ“ÖšóçĎÓnˇŮž}šœťb#ˇ{'›pdiáٍ_FœÄ=šŤBXújĽÄ=Ă…–ű gŹŐžĺÂőÁ}0ŚýčG?>k@Œ0I q-ţ"ďR—°=Ňüf#`J‚ Ô:ĺóÂÉ6n/pĎx˛*éĺJbÚkFçwÍ=ŽI×TŤËěßż#GŢĺȑwšxń"{öěáżx–Ýťwó /Ďxŕűٲesš?~ßxď˝÷¤ŐjqáÂ%ΝĄZ­ây“lٲ™çž{ŽjľĆć͛‚ăÇ?Ŕu]6n܀ă8xžÇŇŇ÷Ţ{/‡ŚT*qáÂîžűnîşk7ZkŢ~űNœ8Á–-[áő×_GÉŚMÓ>ü6…B={ďž%ýd,­_ž=ċ /“łrŒ;#L9“Ü_ÚJŢÉÓh× TŔî‘Ý  QŠT˜fĎß˙Ú)jłËĚŞóh4–€(ó„dLnŚT(Żšń6 ăÜÜlŰâWőWyůĺ—řĆ7žą*¸Ň ¨˜×Ä6“ďž{„ńńq&&&:`ăčŃŁěÚľ ÇqX\\ä•W^ĽZ­ňľŻ}ršÔ%´ˇÚI}–QÔl6™™™a||œ‘‘‘4i] „ű° €ŇšV;Ŕľ]ĐÉĆ\ŠîSćä˙]×âŃvóŻ>ĘĐ`‰b1ÇĆÉQ~úĚD‘bb|„ˇćÍ#§řő_;Ŕr˝ĹŮóó@œ 5Ú‹ŐÊv3ßea~ĎóÓúůç_ Ýjsŕŕ}9r”'žř5.^œĺ… 4 šÍ&ů|Ç{”çž{Ď3Ö×gůÁ~ˆÖš/|á œ>}š“'OąaĂŚŚ6ňěłĎrß}÷qđŕ~›CŻ˝Î–-›9rä(ľZ•-[śËĺ8yňŰśmcϞ=ź÷ŢqŢ|ó-vlßÎńăpüƒălذM›Śyűíw¨×ë|éKO0::zË­5‘V,„ËĚG˝aŸł÷Â|}b^iĄ}t;Œëęň1œGN[ʰi ë1tՃł Ôá˜.ƒ%P(ŽD5ŞacUҰ:ÄşńőlÝś…×_ƒ‹.ňěłĎR,–Ÿ­[ˇRŤŐX\\dtt”Ÿ˙üIĘĺ2Ĺb‘}űöńĆoĐh4Xˇn?üRJž}ö—TŤľTç —s™˜˜ŔqŚŚ6ňӟüŒ}ű÷ńÖ[o111‚ÁÁA–—ë:ô:ĂĂĂ8pë֍3;;Ë/~ń Ęĺ”Rź˙ţű|ůË_ć7Ţdbb=SSSźůć[Ź_żŽƒ244„eőÁ˜ [Ěťîéú÷‰oߤœęf€†ÔÁŇö¨ôă“őě÷Á˜~ôŁýřl‚3Ŕ“Žä[â Xš–d\C)–~ń>lĎńć9+˘j}ujíľ>UkM­Zĺg?ű9íśÇÖ­[šreĎó™™9Çôô4š\Ž &˜ezz ŰśçĹ_bďŢ==zŒĂ‡łsçNÚíËËË EöďßĎwżű=|ßgÝşuŒĄ5<˙üó|ó›ßdaažC‡Ţ`óć͜;wŽjľšˆžÚĚÎÎR(I… /]ş„”ccŁźřâËÜ˙A,ËâůçŸgzzšJĽBąXěQŽFÝ@Ö@Ëksxá(ÚsDDœç8b˝OÉ.0n˛ł´#ű, %›C+.'Ë;äÚy­Q‘CDSEŒ˜I!ĐR˛ą¸GŽ]Ň!A°{÷.._žăôéӜ=;ƒçůœ9s†K—.ąwď^Μ9Ă=÷ěOą7Ś‚~ľZĂ‡ßN\Ž07w…#GŢĺ‘G&BŽ=ĘŘŘ(J)žýíoó­o}‹]ťv17w…0 šti–VŤEš\B)EŤŐâwŢAkÍ˝÷ŢËűďżĎÄÄDj׆q™ÍŽŰšrežRŠÄââ§OŸćŔGŽajjŠ 9sć <đŁŁ#ŞĎ¤€˙áżűžüĺŰüěŮÜ:{ ß 6Ię†`óćqţîď|‘ ُŽM.çň…_9€›Ëó“_źIušÁÄŘ0_{âślšŕO˙âi.Î-Ł…°4‘ÖřĄJXŤC 3"śďt_Ç믿ÁéÓg8}úLęĐ1;;KŠTbϞ=üä'?ezz€ź?)”<ňČÜ8q’W^y…K—fÍ3Ď<Ă7żů rš<[śl`ăƍlٲ…Je‹_ăńÇăÔŠ34uĆĆĆزe RJ*•ślŮBŠTbzzŠ{îÝĎ3Ď<ƒďű|đÁ(Ľ8|řmžđ…_ť.vÓGdša›–jÇ,1[ćňúúߟ@U[hˆT‡˜ ăçE۝ł[ˈÇÖ#î…ŁČýĂG˘­ř-ő¨M3ňŽú=fggšűŽ=‹ĘĽmĎăÜšóüŢďýǎcff†ršœŠdž?ß˙ýßăÔŠSźđ œ?žRŠÄ‘#GxŕAŤŐfŰś­üÍßü˜ßű˝ßĺčŃŁœ={–ŃŃQÖ­[ÇéÓgX?ąŽfłĹřř8—.]˘ŮlňÔSOóŰżýM,ËÂuc튥Ľ%.]şÄŻüĘŽÔĺ$Ÿ/Đh4Řż?ţńOńź6/^dóćM VRkâ›ŐWŸŠ„,„­ŰŔűŹ‚]7űz×*ëG?Žo0őÁ˜~ôŁýř̂1Ů:aDüžw¨ÁËA ˇXáŕß˝Üâ˙üE•­Çšüa¤É;ÝךŃOvs9vヒ÷ߟuëÖ1?…VŤ…çĹjůĺr™RŠLťÝŽs!)qÝív›|>GĄçÝwňřăqôč1 vNjUâf+Ýń6)m†‡‡ĐZáű•Ęǎăţŕhˇ=Ţyçm^yĺežň•/“Ď8xđ GKĆ­ĆśmJĹ"…|>ľ]ĚZš×}Ř  N’ĆËőy.ůóřĄF!^T§ÔšÄg›3 ŰLOްD-Rf‹ż Ů,ZWđ E€ )nXdă`œ(K!WÝ´švs‡VŤIŠ4ÖąMăÂÂľÚ2o˝u˜ăÇßgýúuź÷Ţ{ěÜš+Ý úžĎwżű]}äq–—ë,.V)ňLMMńWőC<€m;:ô?ü Ĺb1ľäâŐW_c׎]¸n<ŕÂ0äůçŸÇ˛lĎ=÷<š\ŽgŸ}Ž{îŮĎŮł3ěÜš“‰‰ ~ôŁżfǎíœ9s–Ë—/sŕŔţĂř6>ú§NŚX,óÁ°˙>žýíoóOţÉ?ţp`Œ”lŰ2ÉŚŠuüţoŽ—^?Á÷ü2ďžžZ˝EF8ŽEąŕňˇżţ+W–ęüŕg‡řÉłoÓđ#”cƒ6ŽĘ֚`¨ŤšÍ&łłłźńĆŹ[7Žë¸X‰EłŮâҔr"Ű'çó@“ĎçŚRŠpĺʨ!ćZ¨WŻ Ÿ›El-cýÎVäcëĄ`§:j ö•yڤ”ěŘąƒ#ďžËž}{™_X`ăƍ‹)—ËÔjUÂ0LY`Žë2::Ęŋ—hˇ=îşënvîÜI…8ŽRqżU*ąžVŠTLma}ß§VŤĄ!yžňźúękŘśşŮśăŘŠŤÍÔÔżńżÁ믿IEŹ_żÇą) ‹EFFFŘťw/Žë266’ĚÍůÔ^b7˜>°p# >ýrŻ[˝ďŃŤhÖ|‚@ž~|Fü>ӏ~ôŁŸ˝ŔŻ{uQ—‚­‘âŽ0ÄRŠcZź\o3<”çűI•s‹ú˙gď̓ä8Ď3ĎߗgÝGß÷…и ŕ‘I‘"i‘”dÉ:ě]…'<Úđ†=óÇĚăŮŮđěLÄîěěnŹ7öyÖÖڒ-ٖe‹e[E‘I„hœÄŃÝht7úîę:óúöŹŞŽn4€ĆI€Ę'"ŁťŤŤ*ŤňÍďËď}ň}Ÿ‡ÉéĽ1 OŠ510WŇc1 ƒőô÷÷Ą(ŕş6Ńh”ŁGR__O2™¤ĽĽ™t:Uľ5ôm#Slٲ‰††îť/H˘Ń(őőu„B&ÉdÓ4číífóćÍěßżĎóčîîć‰'çŔý†ÁC=Čřř8‰Dœd2ÉŃŁG1 ƒóçϑĎçčííĹ0 @211Áüü,]]Ü˙ý9r!>ř śmaǏ§­­­üž JĽmmm¤Óé›NOeÎ3oYXžß:&(nŮE IQ€&B” E¨¨ĺ6Ëľ™śghmî¤ŰíĽT(2gÍ2)/ą ç(zľfĄ$Ş˘^u°¸˜eff:;;_„utt”ŮŮ9ÚŰŰxŕxýő}žPk˲x[–ESs#śbrr’ţţutuu˛˙ŰĚÎÎqáÂ(““ÓtÝŹ&o§Nćcť>ĆđđţgÁď˙‹˙€\.Çôô,‘p„ććt]Ăq\RŠCC#466TmE+ÄQcc#‰D‚x<Ž”’ćć,Ëb~nÇOŃÔÔRľI˝‘ŸÓ40Mƒ'?ž•vŽăô™KźöÎIÎ_źDW[#­Íişo=aÓDÓŐŞŕŁçůDCcӜápˆś6źvt´säČQ:::hll$UIɆ†zĆÇÇQ5…ŚćF"‘0]]tt´sâÄ Ž=Â#<âťhär cš&…Bşş:ĆĆĆŘłgĎÍĎ{BVMBÂ(Ÿ h iAÝYÔ„VžăÜrk§RqˆŚ ¸ƒóČĂÓȋyܗF’ˆ¸O 1aVÍ+&jŠ˘°sçN^yĺçěŰ÷&MMôőő099iÔŐĽŃußUUľňqďF×5ęęҤR;˝Čŕŕ ét’ŢŢ„đhh¨'ÓŰŰM$Ąšš‰X,ÎŮłg9qâ˝˝=,,d¸xq”ŽŽvÂá0uui^|ńöďßO}}=Űśm­ĆŕÔŠS$qşťť™žö+Ő::ڈD"lßžŁG’N§IĽ’źöÚ/xúé§yçwčččŔó<úúú‚ m€_Ĺź7@€ťďÜ_Ăă5FfŐߕšŸ•­âý§•7Ё”ĚOíGzÁŃ Ŕ=…ʝO×őp]Űą)Käó#JS{ďšç*z–U$‘H\&Š+ĽÄ˛Jˆ#ßÂźô&2’bJS™R͞¤Ţ*‘_,đoŢ{WrCIBŚŽĄ)ˆR– üœ?<ú$C ZÔ@‰¨1ĹP)]ZŔŮq?‘˙řď1MsU!Ď_uřĺ˙LÓDU4\ĎÁuB!łÜ"Ş+%ŤÄ˙=řן:yWÚeË*P„çŰR Ť&;›ŮRˇ‘ŽH á4 #Ć|qoůk†J#´™-tDŰiľ'‚°–W"‰łŠuąPŹJ*Ôţ_3ćřńtvvŇÚÚBŠTâű߉M›61<<‚Žk¤R)6oŢĚ׿ţÇěÝť—ţţ>4ÍO -Ëbßž}˜f]×Édٸq--ÍüÝßý=ííŘśĹĚĚ,>x?żřĹk<ţř'hooçĉ“Œ311ÁÜÜ,˙üŸ˙ŞŞrňäIćććq‡žž>†††p‡h4ĘɧčîéBÓ4lŰĆ4M4M'“Y 333ĂŔŔSSStvvrâÄ bą8ŞŞ°{÷ǖ‘1RJł(Š_äWä˕U˛ŞcdŰ6óó UÔęᓉdaŃŻD9||„‰ŮÖu6ącc'şî÷´,ćŠ>1Â_ü`?űŢ=…mű.+UEŒ…řW˙ěţŮ>ŞiՊŚ`lA>_ŔśÝŞPˇeYčşZKeţł=‡c™!ţÓô÷8ŕ}P 6Ňö`<ËâíoEǗ4Tˆë6Ma_äˇäâ˝7‹œ+Ą|˘Qo Ł˛.ţmÓo°+ľaŐqľtŽýę%‰žç‘É,ú•TŞÎZŒÜü9ŃfňâŇ.‡0MĂŻřRUTUš˘ƒßÝx ¨´:Ž‹e[äó,ŤH2a ›A5Q€żR,‰Šž\÷ 0؀8ĺÍ-o^Í&k~֚hŐ..ťeTĆ ŔÝx =I˝'Ť"ŁŚ*xaWŒ=ą:´pĂđ+.윆Ł—ŤÉ‡ň–•ÓšFsSäťę†„(_ˆW‰Ă;óÇ9š9Cž¤!”¤ÁHáz.gňŁd‘3фFJ‹‘ÖSôD:y8Ţă‹Î^ˆżeăƍ„ĂĄ˛Ŕ¤Î“O>‰˘Zu‰DĽąą‘ŒŽŽV[*4Măá‡frrŞ,ŔŤ‡Đ4Ç˙ĄPˆL&ĂŔ€F:ć駟F×ý%C˙:‰ýý}ŐvUUٸq#3338ŽKss3áp¨Ş­qîÜyz{{Q…ŚŚ&ňů<Šâ'â lŰś EńŤ4˘Ń(áp˜……yš››o(‘ó[NT&g3 člIŁŠţxŠ Œút×őŘąŠqú?~ű uI:[RLÍeyéŐ÷yůď3tq ´ň}()—­ŻMĽĄ1I{kŸx07E(´h)ÚŐ:Wŕ ß EΔ7‚œńTCč*(Ďr‘YÇטI(Ý1řX=âž:”°†RłŕUéRiP“kIÍWĚĆ Ŕ­G@Ć Ŕ]JĆTĘA"…ďZ˝ť3ŒÚÁŒřşBQČg`ćbU]ýäi‰ďžTŃz\]˙îVÓ;Ű'Qv}R¨ľkžŰŕyĂŮ ŚŠ9,—j[’Ŕ˙] †ađÄŸ ĄĄ]×/{żşşşęďŃĺúúşŞNÉ !Eŕ8.˙ůŰŻąą§‰'ďßČŚžÂ!MóۑtCĐ6‰Ĺœ˜ăЉ !ř?żűűß;ÇäLśrŔŤ#Šzć–CŁé*Ýíôw5űV׍ŒQ5;“KVŤ+’|q;'“˛ƒŕS¤Í´VĹ0 J‰@F4¸żą%…¨3‘Ąrť’~ťRŢA^* Íáž3…81ňkđl˘ĆE(á…Ůbv‘2ăŐö˛ŤÍnUşMzKąšěöeî^•ń´n @@Ć @€R”“9Ÿ°X"W*+uݚđ­L-–îß_;‹ĺw*8Yˇ„íš—Ý–5ˆĚMjó‹JÂ!Ch$´0şPîÚ{іëpfaŒ™BŰSPËqe"F~ „đĽ˙ÝŽ'ąqQ=QƒôˇĘó+ŇI=MŇH˘ĺ–Ř|&“I<ĎąXě˛vŸŠ¸qmťČ­n+Đ4í†+\nŽƒt´7ă:6ńă÷ř›_ ˛˝ż•ßţľűŮť˝ÓĐPĘßÝ0t’‰(™l‰ˇ/đ“wÎR˛źrkÍeçm͙‰‡ŘľĽ›ÖŚú+R*‰ĺş,şEJŽ…ţy#ŤŸtEkLů}ä*#L V}|ľ× ŔTušADŃŻHB|ب|&CÓŮęç'ů÷°đq h@x)DY,Y,;śÂĺ­0WDž:ëË*”‚Nľ‡Â„UƒU}çdyN`㑷K= WVćQšÄŔ]Îu­i^\í~e˙?U¨Ä4“°â öU9¸đ[ňdUćj‹ňr9żXšę hžŽáŠęľv€‹$뙾˛dJyrĽŠ$BQ UGUÔňýü+_¸+Őľ˙—RÖ$‡ŤźV‚tláâz)=ŒĄ¨weť‡çšĚsdÇUŤU. QE­ëxbĆóŤfW)ťX—‰Ľâň$Ŕ:MFÉPb™‹Ň•Rž‘Uuˆ˛m×u1MÓ4ń<ď|ç;€@U5úűűŮśm+Žë i…BŸţôg<ó̧0 ƒ‰‰ Ž9ÂsĎ=W}/Ă0ĘvĚŽăTu>Ž7Ńţ0zŠ"ˆFÂ|ůéůÓWɔöex&Ëů×őd‹%Úęâ†Ćô|–ƒg&řěǡň7Żź­(xÚň„~ůŻ~u‰ŚÚ[ëůԃ› ™Ćegl…d)¸6sVžůRŽL)ă“8F˜ˆBW|ˇŻLŹŽa"ŤIűňqĺŸ{ âň2Š2šćJËsz˜¨j ¤¸++.*ß{}˘“§ś2ěN2#˙+k җô˝l~AJ¤ŇTPBQř|/BŐęU(¤źOč›Y—jC˝âŘňÉËu˜ąr,–r̕‘RŇ ˘z]ՖWŠU-Ér­9Pŕ“ě!]ŰEę!"BG˝CÖŞřˆŽĽď"W™k*íÁ‹‹Y†F.ŇÔXGC}]ľjŐń<­źfŹÜ¤ńĘ× UU.{_Ľć%’§ânŠŞÁœ1p÷3/pĹ;ßÔȪ˚qéŽmőߪJiă&2őóxmÄŽ’”<‡ŤČXfšŸœ>ČXf CŐšŻm=››{h‰70_Ȣ* ép|ŐĎ7_\$¤™„tٚČNććë&ă™iÖŐw Ő$B<é12?AWŞ™˘g“sUt%tW†FU5ÚĂő¤EŒœ;‹+|vE^š"Ć'Z¤OĆTœ–ĘĎQŞ ÷R[BA AJŇnÂĐŻmlŰ6gϞăâĹQ"‘(ýýëءďMbąÍÍÍlßž Çqp—Ď~öłLMM18xŒPČäŇĽ 䡡‡ÉÉI8H<'‰P*YĚÎÎrěŘ1\×eÝş~FGGéííedd˜x ęÖs7bĽýwČĐyx×F}÷ ?>2FŃň¸8_äOţé]>šŤ8pĂԘ_,°ľŻąš,ožžˆg˜ŕÉ+W8” ľHHăĹ˝lčmĹДĽäşćł¸xä\‹ŒUŕĺSű8?= úęÚŮŮžžžúVT.ĚMљjŽtľ‹é‚]“Q#„*RzäŹyŤˆí:ÔG“„tsäâ12‰žt+.Y§„.LEżŤ§żˆâ3ő181ÄOÄ ŽB•FúVňĘŞCř gŘ??˝2ifH˝rĎŚ÷ keKgąú´ëJIÖ-‘ąňź=2ČÁ‘ăH)éŽoĽ;Ý̞ŽM”‹˘m‘ ĹĘäĚ ˘TzLfgi‰7TŤ-Çb*ˇ@X7p=—ŚXz‰Ôeń˘OüÔG’děšPЁQ€nŽëqirš…Ĺ˝]m„Ă!¤”źuŕ0ßúöKôővňűżű[475"ĽäâĹ Ůşy=Š"đ<ÉüüĆ&h¨KÓŃŢR^ƒ8\›Ŕu=ş;[1 żŠôŇÔ ăSt´5QWçkľyžÇŠ3ĂčşFogP…1p׌’H ˛VŁ œů áßY•”*ýâ!Ęi‰,30KČDş.N4†“ˇń sŮ]Š•C‰¤äŮXžÍń‰sDtƒßÚő c Sź9t„śd Ń4GÇϐ)娋$p<—şpœ˜a43ISźžˇ‡ŽŇKąšŠ— ó—H…ăŸ<ώÖ~ţâÝó/ů"'/ a¨]éÎώ’×Ͻǿzô˄tËsń¤ŸWÝ-—ěĘÝnSÓyźs %ÄąŮ.,N3šŸaÚY$/-\é!„‡‡5„‹WN˝jɘ !# ($CiÚ#KíoBŞ\p3Ť<é!ĽWnYöQ*•–œěl§z˝r])ýJEŃAHÜrŤłí8ËÖDғHĎCzKJ×qBŕ¸^š2tÉ1T–J2& c஄˘(ŠÂr1<‰ŔĽęŢRžŕyR˘Ôh}TîćzÂהń„(‹ŕ*O9x9š@ÉVŽjĺZš¸şžÇL>ƒŚ¨źqî=fň 4'˜ÎÍÓ[׎í:Le縘™bCC'˙pęmvˇp`ä8÷lg>żH<f&?ĎÁ‘cDĚŽçaš6śë027Á?œ|‹n˛­u‹3ěh]OŢ.âx~Ť'˝ť÷˘Š¨4&Ň<ÝĂŢÂ.efÍÎ0ź0Éů… Î,N0fϓĽ„+<„_1S!gjD9+3B€ŽF“YOc´n ˙9ŽăUuwRé4ąX Ó U[‘üóJ­/ŽëŰ3;ŽSvARŞ 4EQp!ŽťôXĄP ™LR(î=zStMe{_}2Ǣý>'§ <ɏ spd†ĆD„\Ńbb.O޲ńT VŤ¤žŻß$Q]áɍ üî§ď§Š>uU‹{Oz¸Ňeta’ţĆNŢ<Wz¨BĄč”p<Oş,ZNOŁ**Ç/ ńpďV~|j?ŰZ֑ŽÄ)XEKyŢ;ĹTnށŚnÂşIÉľ™ÎĎóý#ż 1žĆń\ú:Ѝ˘í„zUőDrˇ+Ăúí_*ő=üžň<ńéŸńŞ{œy­€ˇ”^\qT* qÇä“lăˇg}}†Ş_uʈ{ŇŁŕ”(96# “|pöÍą4c™<ĎoĽ´›ƒŽóńŢź?~]Óywô$ńP˜-Íë˜É/`š§Ś†97w‘í­ëą]ËuX(fyĺƒC,– 4DSĚŮŐś‘’că”uşŕŕĹÜôş˛."™ˆcK.›úůÄŁ÷ł~]‰Dźź&QhjŹ#JT×B’‰8şŽW4MĽĽš)%ZÍăué$‘H˜HŮéŃw6ThomBQ”Ŕ> cŕîM@TUĽíe~äGDFxN5őHĄ ÂqĹUÂľŻ•sŻu[­üŹljyÓʛč@Jć§ö#†?@€÷źrIĽëz¸Ž‹íŘ‹%ňůŠĽŠ˝÷ŞwÄW.ô}ÁŐ"‰D˘zw ’TŞěü"3ČÍĎ@Ĺͨbł˘ęxZO3AQ—˛éůLąŽëˇÔH‰(_dCąÍ==˜‰řę–Éĺ÷)J‡™b–‰Â,ݜ>ā‘c %/l{”˝ÝŰAJÎώąPĚbę˝é6\8Ά†NŢ=IO]épœ#ƒÜמ#cghNÔ3Cä ¤„Tœca96;Ű7pnvŒ‹ó“¤Ă1îŮAX3‰ë!ŞY&eîВEJćç3˜Ś‰Şh¸žƒë:„BfŐşňź•ŻŤýÝó<\ĎĹvrĽ"Ss3œžźŔኳ+ŒsI.bKWzHák’¨x´…ÓüÁÖ_gW×f UżćÝ#˙źtŤçJU<üťa•ĎŁŞjőůľů0nuąTqTRĽ,ÂçUj•÷­źîC]^–ĹEE×u<ĎŁPȓN§Ž˜ŘKOâz.–ăprč"˙×+GxmŹDÉqq<__ T* k„ĂĆU…Ő%ż:ŢW7ó]k_{§ŽŮÍîó¸â÷[=Á—\I‹đęßOŹxwyŮă~˝\AÔ>_ʏŞĘ˞u7ŽĄ¨D7>Ě6`Nys˛WłÉšŸň ^dL€Ü%dLmďl%ŠŻôÔĘrËB,‘1Bʏ„-ŰÁęÓ|E—DYş#žjRRĆô]_r¸”uO$žJđŻĺj×ňÚĎx˝k‰š—iB%ŹÄőşPďč üľ’1Ť‘0ËâWţé• 1Y‰˝ëY\äüĽQޝ<ËŃĹ ŒŘsdßąjWއ?|đ7IÄă¨ĘÚ Y{^űó—ť]­üŤ=~ˇ%Rk!cV‹Wes=l.Ď/Ţ?Íߟ˜bpÖfÁv(ş`×ČĨĺELD‡ú°ÎŁ-!>ťł›m}şąĚ-â2rsĹ!+yóv‘’[Ş:P\ń˜‹+-Ůn,AP„‚ލ$őaEťăńź2Śúť,ĎĹxryŚgg™ČĎ0ĺfPÔŤqZŁ ÔĽÓD#Qż‚ĺńšę÷–•ÁŸurĺ/Â]śWń˛^–Uć„UâTý,+ŢKŽj$5“°˘ŁÜA7Ľ€ŒšcŮÄR „#Ń2IţŤ@šŹ•&™H°Ľw=‹…<ă Ӝ_¸DŢľx°m€X4z™“Îľc{}gĹĘŘ_)Iş÷öŽ~~×>Ś* ąh„§voe׆ENOsr2˅ŹĹ\ Jއ" ˘*4†zR&ŰZŇôľ56 LMC(bmÇŠlrf(*i=LAQąĽ{GŒ.TBŠŽŽ¨Z‹Ňĺť×uŽ*(eÍ%-'ŽŇ!ŰńĘí]~{‘Rśn˝ś>Öj§>3˘…:=JAčXŇ)“gţ˝_ŸŒYcR#Żë€řçŚP):†˘.JwË̢¨¨z͌WőˇŕV! cŕ'+‹H*É|•šÖ]Ü[D]žůÎ?!4BŞś”KH–œdn7¤/D|YBs›wžě¸‹ÚŠĽ›8Ś5äŒUESUBşA,ĽľŽ‘]lZ5I]YÁ`ľSVŹĂkĹŞŞůV‰„ :ëxÔq(•J”J%\××YŃ4 3dbš~˜XĽ˛lubS– Ěňs¤Ÿ|BĹĐĂŢ“Â.W@•1q­A˝šŤXmžś†ńx]ăG,U* 1=ÄÚî_éˋË_z=óŕ˜Şť˝q @€>ZȘ¸SÉŁđ4}'c™¸ŮZ“ű;•Ř.ËŽłúâŚ3Ćrň%ýŒöŽěŮśír|jĆĺV×“đ_F¨ŹŒń^ŕĘ žëz¨ęR‚Ži*ĹbńŞ­/WJ躎ŚiD"‘Ëţ_KŹ%FË´cĘm(wEDŇ'ˇl‘şź˘ŔwëZ[Â#ăá֍!qăRÜÜnďteLĹIÍŸŻ‚y&@€î2&@€îT.T^čúš gŽ• ˘”ňśí˙8HËó€ŰlĂ[Ń (•ŹňńŠ­zPŞąş݃Ľ €ˇ žçůšM5™ž™FąXŔ0ŒënQšŞÝń*U×S!) 5˙ę5H铜žçĄëÚ2RËqlŰF×ő™l °4––‰€ @€ŰŔ7/@€îÇ Ş­Žă’ËĺŤÁŤ=ďvl÷Nvpg’ŽJ’Ďçq]o™Po%Vž'Éçóxž\SUL€Ű›4 Ÿ Óô*!#„(˙ޞ¸¸XŽş¸öX\Ůnt=äÍU ™•f„ç;őÔ ßîíΕ]@ő…\՚8ů1Ëçó8Ž–wăρ.šŚß{׋¸‡TĆ Ŕm ^ޤ• Ş*†a`Ű6ŮlĂĐQUľź0Ž<ďzԗżćj%WzţŇçźńýŢĘĎt#ű^űă˘z7Řó$†a,Ťś˙~%V™Ě"Śi ięužë;wnÝńšŢsévžG×:>W˙œĎsą, Ď“čşŞŠ(J(ŻŞb&Žc“Íf1 MÓjĆađßćYŻC)%Ľ’ë:ž3ϊż2ßY–ŹÎşnTăt#óÄ­š?n÷ÜuľyöV~‡ľÍ +ç@ó˛90@€dL€ÜSXˆŠŐŃ4żíĹś}Ťl×őV­’ p›ŇÚ*%MÓ0ŒŐې*ä™×u)•,r9ç2™ˇ7V•QÓ4LSż,aŹÄM×őj ŒeŮ E\× ĆŐ‹•ßÚ§( şŽcšĄU“űʸ2M×uq‡b1[ľp÷́ŕö" cŕ/‚Áż;Ź( ž§ß5­żŠ1¨mWŠÄ`Ľ†H%VŞŞVËúÜŮXUĹŤľPH)ŤD€ßbćăęÎF !VŐj1ŤŚ€jűŸëşŐJ@\‰˛ƒŇ˝÷j1[mlqťŽ„@Ó(K7M’ @€ë˜{ƒC @€ˇ6Y\M„réŽťŚ…îJ׼ZÔşŽŹćŒqw/¤ĺ-!7nUŹ–’Fp]oYëˍŢ^–4:6v)çXEC GŞŠ‚zÓU›í%ńÚ%§”ZAŰZ㣓ěËe6ăľÉţŞq.Ÿv˘ć4ŹmQ’,i:--(× Zďöău§?ďjDtĺ\ôĎKEŃŽ;ćWrČZiAżržž˜Ő|ýšÚ6Ş•ŸézŽí•>çW>÷„UËĎŐ;3_Ü|ů¸ pďΓKç1˄ϯ÷=*Ż˙0P{ SĽ\eçUÇeEsďƏxŽ‹P–_WŢü ČÉ @€÷!sĽ¤äzńľîľÉˆm;”J% CŻę.\+)ş;ˆ˜ť‹YŰgžąĎ+ĚŘić_ţĐÇ~ŤĹĐ>÷g4mzô›[DşŽK6›%Łë:  ĂŔ˛JÄbqt]ò,ršŽë‰„‰FcM)W’”Ť“*Š\vúyB"<¤ô°\’+ą]‰ăz @SŚŚ`Ş şşÜĹé^Yœ/ŻZöŸ;ň=V2gÍóŔeNŽ‹e۔JĽŞ SUSHLÓôçĂrE΍$ąů|ž\.‡Ă0B‡–Íłžî‹ŽëkÚOĽ•ŽP(‰DŞíž„œe3‘ń83岊EŁ%Ąbhʇ@˘ŐÎŃîu2&›Í˛°°@"ž žˆ_׺ŁX,’ÉdH§Ó†ńĄ|˲XXX@QTŇé4–e155@<#•JůăďNJ”—&'‰D"¤RÉeß?—ËS,I§Rhz.Ș¸çCWrTZë‚hÉňŐ_ü;ŽG6W`tb†ł9;:Cwkš I:[눆CUaŕ•ÖżkMڧ§ijjÂśmňů<ąXlM ąL&ƒă8$“ÉUďVyR’)zĚĺ=Š6ÔER](wm^+o*ţŽk“ťđ>rň 1ą€Tň\Ü˙ˇÔőnGŃôŤ&Ź×Âôô4ßýîwŮ˝{7}}}ü§˙ô?óľŻý7|ăßŕżűˇ@<çÍ7ßâ­ˇŢFÁúőëůô§Ÿ#‰|„ďň‰+ćĽÄ^b;.Óy› ‹6̗Ę8\*xä=—„ŽĐŃؐTčN†čŒë$B:şŞ\׸r]—™™ŠĹ"ŚiŇŘŘˆŞŞH)) äóyęëëoKl\OR˛=fr’źĺ1ꣂĄŔŠůčV4ˇâ}jďîŰśMŠX T*âyŞ˘‚ˆrae_–U˘dYhš†a—ľÜ\í3UbőŇ÷_âĐĄwimkŁ]F/đůĎžX,J>Ÿ'Ž022Ěšsçy衇ĐubąH<Ç4Mćçç‘R’N×aŰ~2‡šxqŒď~÷ťüÁüTUœ0Ÿ÷řű÷ňłą=xăŒÂŢu&ö‡‰‡‚ťńn ĽR‰wŢy‡W^yÇqP•ßţíŻŇŮŮ鯅 ]K&*ŠRoĂĂĂěۡ^x††ÇŠVŁT„ž+—­!Ó4Ťz^†a`ŰžxˇŽűmŔB4MĂuÝ*‘jŰö˛÷Š•ĽR‰ď}ď{?vĄ¨|ö3ŸÁó$ßúÖˇˆD"D"aŢť—G}Ó0}jĎŤ^ś…~ŋPPQv čş^]Sĺr9ţřëĚîÝťyöšgŞŸËśm~yč]Nœ8ÁžđRФ˙?E`zp‚Ș¸ëÓÂ+,ú×rg˝V”Ňóüddq1ËÉsŁÉňÎ.› ţ1¸pśĂgŘݟd[§Éću$“ɲVƒXÓgŞěłX,ňÍ?˙ż÷űżÇÄÄǎăî§ŠŠéšÄÎřř8Ĺbąœě+ŐU{áŢËOŽ8uÉfž ŮФóHˆţ&Cűč%RJŹbkâjvrQTwčůů)Œh˘Ş[r#‡ĂÄă Ξ=ÇüÜmmĢŠ…"–e“É,ňĆűxöŮgčîîâŘąădł9BĄ0Ş*îéqľzűŘ՝xdÍćIIśPäÝKE^łygĆfŇŘ^ů—~‹ B‚p0čxŹĹ`o[˜††ŚĄ( *ĐUö],y˙ý#9ň>B¨ läńÇ?A(BJÉđđźĂoýW_šf•EĽ•e巓rľ1.ޤî/‡‹ě?ďpiŃĽ5Ą˛§[ĺĄţڊýÝlëܕŞŻgŽŹ}?Ďó( ärYŰFQŞ૕•_‡F€Pđ<—bą€Žë˜†é'ŸkřLŇ{ăƍ<ůäăŘśÍůóC”J%Ž;Îěě,‘H„ŠŠIŢ}÷0---9r„T*Eww†aręÔ)ňů<÷ßż˲9zô‰D’†úJĹśmcŽ„ăă6''‹’ˆ.P€CĂš ⥠U(ŔÁu]fggq]—'Ÿx’—^z‰ˇŢÚOkëp™l)ą~ĂzNž<‰ŚilŢź™Ó§? ­­•d2Éţýűill$3==Íčč(gϞĽ­­††FŽd˖- ˘ŤŤ‹l.Ëřř8Ÿţô§9uęgϞĺńÇçČűG˜™a׎];v Çqذa†a0<<–-›ŮˇoMMM hmmĺžűî#›Íâş.>ööäő×ß`ŰśmŒńďţűÇáwßă;ßţť?ś$ź˙ţűLLL „ ĄąĎőČçólÝş˲8~ü8ŞŞ200@,ĺƒÎ0==ÍŠS§imkevv–_:LąX`Æ ĚĚĚ0>>ÎÜܧOŸćâŋtt´ł}Ç6ÂápĐĘ cŕ^K"ýDrmeůžçůwîgçřĺąsźwÁa8—`˘Ô„Hl‡P +?‡‘ěŕ’ŢĂË#Óź3ą@×ń“ěhUřؖšë0tEQה9ŽËáĂGČĺrĚÎÎ244B[[ŻžúĹb‘7`Ű6çΝcÓŚM ‘ĎŘ´i˲(K‹~Ň‹ĹřÄ'ĽŠŠ Ǖťčđć™"– !]áܔŞ@kJťŤČ˜[ĄSM"ł‹,:*ŠÖű°D2pôvŚŚŚI´őUó÷I€CĄëÖ­ă˝Ăď38x‚§žzĂ4RŕşNĄ€çš¤Ói4M§ˇˇ‡P(ôś^Ž+˛j\<OJ.Ěçxé|ž×Ç.Ŕr=<–ÚgVžCIŔYƆޝÉđl—Ĺ':ăԅ D™\™| …B läĉşIooäüů!şťťP•“'N1<<đ<‡zˆ‰‰ Ž?N"‘ ŠŠ‰ĹĹE.]şÄîÝť9qâŽă˛yóăc ćçhimĄT*ňĐCŇŇŇBe6ďńăEf= &=^9í2Т>ŚpŤ¸š[é:VCš\–\.‡ôܲe‰đŠŐ¨ľÇĺDÉą-\Ç%‰˛R/xőĎë[/^äčŕ1ńőЧ‘R266ĆýŃąaĂΝ;G"™`}˙z S%hë 1pŻŚŽŤˆ9ÖśPĚÍgřŮűyű‚`\t1ď&!\!éšäç>`ňĐ_Ó°ësÄ:ďC$:óZ¸˜™ćxn‘WĎcO‹ËłíŚŽ.…śĄ;Ďó(•Š|ýëĚââ"Śb˙Ű9uú4étšÁÁcôöö ( .Œrňä)~ř!~ţóŸSWWŽëüô§'yä‘GĐ4•Lf‘ŚŚ&< ƒc.Ž'iM¨„ •LŃăä„CŢňHG>zw˜¤çąX´˜Mí@mßFIۓĚĎŮäł6=Ž{SŽ%šŚŃŐŐĹţý¸téëűץi:ĹRŁƒGŤw8˙éŸţ‰ÖÖ6&''ůň—żÄ˝ŁŐskáIǓ\ZČóg'˛ü|Ü!cW„SŻž ö°]É{6Œç XŽËsëŇDMUő*qÔ4ĆĆ&’ÉĄPUŐřŮO_Á˛m>̓O~’RŠÄ[o˝ĹĄCż,ŰtŤěۡ§Ÿ~šsçÎ1==ĂÔä4ýýë0 ƒBĄÄŮłg™™™a~~­[ˇpňÔi4ÝOžN:Mcc#ŠŞpbÂeą$‰…­ •ĹĚĺ=N]ry8ŚÝuób…ˆÉçó,..‚ô|ĺbşž0óňRĄ•bťŠ˘`Ű6…Bp$|MŇH_kŚłŤ“;ďò,lŰbjjšcƒÇxđÁÎŽ„ŠBąX"‰DCU"‘ˆ_‘cšœ?ŽH$BąXB(‚|Ą@6ëˇ !čLkDM…šœ¤äHfsíuАJ€7‹‹/R,–čëëĺţîgjzšććf}ôQţôJG{'‰D‚ţţőtvtňÍo~“Ů™96mÚD*™F*Ľ’…eYtuvEinnŚžŽS'OÓÓÓĂŕŕ étš/üĆP„JWg|ç;EŠXâă/<ÂOňSžyĆoú“?ů\ÇĂą]Š…"Ží"=PUžž>öî݋a˜ĚÎÎ1za”M›63==ĂkŻ˝Ćž={Ň#ŸĎ177GąX,kD 4Őż&nßžŸüä'|ĺ+_á›ßü&cc9ţ<_űÚ×Čfł|űŰߌĽĽ…śś6ž{î9Ž9‚ă8ŒÓŇŇâ“Ř5óQ"‘ŕńÇçäɓäóyfŚgčë]woIßȘpĽĹ˙ĺWsŰqř˙ó˙Ćą†ĎŁÔ÷㠁@AJŻ”eúďŰ˙ ÔhłĽ-œDh:Rk$C9ş83ôoüü?ňüŻ˙J(tYŰŇj0 ƒŻ}íw8~ˆˇß>Čb6KWgO<ń8\ĽĽĽMӉDÂtvvňÚkŻ‹ů: ´ľľŽřŽĐšR8rBş ŹĂđŹGWŽŽ~4W3Ž'™ËäŃFźtK8ŽÄsfÉ-ňů<ńxü†ß_QÚÚZůřÇ÷˛uËVęę‘~ř!&/M‰„ůҗžČ‰'ÉfłźđÂó¤RÉ55Ňłâ’4-ńç§ů٘͢ĺáÉľß×ŹŹťm.ć%˙ߙqež'űëQőë!}-!Ý0Řűńc˛ěŚS(ظq7L&yůĺ—éííazzŤT"6YˇŽÓ§ÎpćĚYš)‹H)éčh§Ž.MCC™L†BĄPľôîHŤhB +˜šÂĐŹŞ :Ňę]݊fEfa•ňÁ_IĔý°DĽUi!S!ŮTEĽT*˘j*†a\ľ…TUUśmۂ˘(´ˇˇ‚Ç{”H$Ěoţć—Y\̲qăFÚŰŰ8wî<†ĄóÉO~’‘‘ahnnćđáw) <öŘcôőőpáÂ(şŽłyó!(óţž„`sŤÎÉqƒ÷G-2%dX°ťË )1nŠ˘`===|éK_ŚžžOşÄ˘Q‰$őőőôőöaŰ6şŽ‹ĆčééÁ0 ćççřĚg^DJ_ß*NÓŃŃI*•˘X,’JĽyôŃGřÇüG6lŘŔČČ‘H˜žn˙FM$á‰'žŕß˙áŕ‰'ž`ÓŔ&Ć.Ž188ˆiěŘąƒśś6ŠĹŻżţŽë‡q]MWˢô…|žŸţě§hŞĆěě,Äb1Eáĺ—ÄÔÔťwÎ×f2Mƒxýü§ŠK×ńĚłĎpéŇ$ŸýÜgimmŠ’Ç†a ¨ <őÔS|pú4]ě}x/…Bç~í9<Ďăŕcťva† „ěÜľ“ĹĚ" <űÜ3D"yäăÄb1šš9tč—hšĆ};ď#ăşăźđâ l Ťť‹}űöáyýëúŠŻŻGQ˘Ń?üĂ#ĂźđâóܡsšŽúšb܈5<.jţŽüŽÔüŹljyÓʛč@Jć§ö#ƒţ×Ü[đʋy×őp]Űą)Käó#JS{/Š˘^—ŤJąX$™Œ_–¸ŐęXśĂ×˙ôĎřóÓ‰Ý_D*Kźšt,Š—>ŕä˙ţëX “˜=Ź˙?&ŇľU5¨HŇ)Éž˙^¨żŔżţż‹i˜Kš י ­lŁŞŰ­ň/÷´’ (k$źÖ˘IdY6o˝őłłsĚĎĎłuëvíÚY%V_¸‰r­ČŇg÷÷ó#ŁŁsi…m˙?{o$×ufůýޞűZ™ľWĄ6ö H„@J-Q˘ÄžnIݚéVwLwŘî 'ÂăĽm‡ĂvŘî°cĆă°Çăđř{śĂš–:FRˇvJ¤Dq v  ľď•••űúV˙ń2Ş@)Š˘ZůEdTUVž—oš÷žű{žsb~iWßű嵙Z­ŽiZ+ĽŮl˘(2~żďŔ™mÓhÔ) Ž{É.`QŔąLšš Ť7¨çśpL×­EdBŠ’#G ÷ !Š2önKlŰƲmüţŕž>÷Qę+N‹~%ü űUąXBUßۘgŰ™ľEŁŽßďCÓTTEmSâűœçßn+ŚiĄ:ľZÝ´‰$„Â{ô×>ęç˛ŰĽH’$lËƲÝĹEQ\ąjĂϢ˝íxÔžgv۝HŔue’$oŰöóβ]$Yvˇś2ü/˙ü_NĽůťđŇé”;ëş ‚ŕŮáËvŸlƒšî8¨cš&´@Çqh6›-€[öŽť=żrlŰqEEV0LÇqey›X–é}› Ólę‚ËŚ%ŃűűxیŁďřŰŞ*Ÿ €č€ŮzY­—˝ëĺěúéܙďYÚyÇ ĂŒéD':щ@쾢†#÷cźô]lŮÁ˝Ł¸Ś!cPĚ Â8šŠ-ƒŤÄyçłFvŽcOäţň˘ď~Lďĺďd‰ôĹdz˘n’$‰˛(ü­”uÇĐ)ÎM\} ŸzŮîAPüśI°´…ž9O3 9ԃĎ×÷ˇŁNě Ăśyk˝Äľ‚m;`!ě°vő/ApíÖeQ é—y$Ž1V¸–mrm§Ža;ŽƒáŔO7>ťUäÔp „‡Ăćɲ̉ÇYZZ" 30Đď%1îjÂ=ĽˆOą̂Ď+ˇ’>Â}O×uŹ–îž—ăPŰ^agţ2ŮŐyŒJÁą\°L”(ćvhÖ+ô:&áî}’ ÔíJ Ă@Ó´$hŮ麝ř ŸŞŞîyO”DDiŻuŰćš>ŸďIŠşgŰűE8ć?ú˙Cp‚Ą ×ďŢ÷ƒ€ĺÝßy÷yÜ}Ěíó˝×1íŢÖď÷ßőýďÖ˙{>ĆNtâN+ëD':щ\F#CƒřŤ[؂Ž#Ţqqpp|r8 HÁ8h*–ěŕHśg #8Je‰Ń/ş@ˇâz/aaŢăv÷n@ž#ţđŔýÜ˝íĂž÷ŃcL˝AîÂčYúár͟DTUDŮĆŞçŃVňěŘ}Ԏœ"’ę{_çŇ^ĹmOtw˙žű3ťŮMŇʸ×=|Đ}˝Ťk÷ďwëvÜëťßÍ.ýƒŠşnňóŐ—=ć8-~Ë.‰ ¸4_Y€T@ćLÇ{Húč ČüŤŤ9ndk8–#€ăäë&/­Ö81`! ŇťÚÇ?ěšJ’H,#‹} ×@ůȗžě֋ąmŰŸÚ×̨—Šl-°š4CacE‘đů4ÇŚYoR(”Đ-8ŽŒ˘FRďp8óVôp mĄvIRű˝Ýlš{ő‹ű1 ď÷żöko_Ů ’ÝŤÍÜ˝wëߝč恀˙ F':щӉNt˘ŮäîI´( D"aĆúăĚםÚôhÁÁV%¤hŇýl0‚ăS°%GśqlWWĆŠćčűˆE­ÉýťĂ1mŠvű˜$éá,ąŰŰZ–ĺ­P파ďM:Ţ}ťmúq›ĆÜ>žö1˝—Ÿť“Ÿ_††ăŘÔË%ę7~J\ĘŕĎnáD$Y@ô ؎Ił&˛•+PŰ\Ä>pŞuMŢ[ŮÄÎÎWŽ\ń4žóď000@2™dll AxőŐWY\\DΞ=Ëđđđž$pˇ.F›†ÝڌˇËó.\¸ŔŔ@?/^ä™gžń(ďím>žç\îŚÝČţ2tmlÇĄRŤs=g˘›˘[ş" -ĚŇnëÂ"" #1gÇ"<9" Ť"š$bÚ•Ś…Őę#nŚîĐ4Žěč4uEň?°mďNčś_}PÇŻƒfĐî2‘whđ86z9K9ťÉöÖ&Ş$4r”ŽáIË$ťş@cnŠ\f“Ôö:Ąî,J¸ë ‰Ý*9˝WéLť-OMMqăĆ-žüĺ/˘ë:ßřĆ_ńěłĎŇݝöĆŚÝýç~€ËîëŢž˙íž•Ďxíľ×ŘŮŮ!™Lđä“gyă7yúésH’Œ(şűťző*ŘS6´{˙ŚiréŇ%čëëë€2čD':Ńc:щNt˘żH‚€˘*=¸Ÿk›3řŇ}ŠÜĘIlME Ç)Ÿ†- ’ŘŚž˝ŔÄž~|>í=iÚüä'?ĄŮl2<_űÚżćšçž#P.—čëëcxx˜ĺĺefgçŘż’BĄH,çʕ+ Ç;ŃNt˘č€1čD':щ÷ ĆhŞĆ‘CűŃ˙Íy”ŁŸ ˝¨íŽŞ"Ćş@)ĹńŠ8˛€#ś\D,›Ćö<'=Aڇ Ă0¸ví:ôG_ĺʕ+Üźy“ŢŢ>˘ŃőzÝď“eŸOŁT*‰De™×zňčŃŁ„Ă!˛ŮŹÇ˘EÉľŤ-•ƒ/Z[[ăľ×^ăŘąc\¸pAČd2,//säČΟ?ϑ#Gxíľ×" ńć›oröěYü~?Íf“RŠ„(J­żŽUŚ, )•JdłYćçç‰FŁż0ĆÁe“d.˝ˆ‚Žˆ›´ťŇnné"H’ƒ&۔ç.SËeP}„÷(ré÷ű‰FŁlmm‘ÉdřŘÇÎ077ç•,e2úűű‰Ç㈢Č'>ń Żżţ:ŸűÜgůÚמƳĎ~ŽŮŮ9nܸŞŞDŁQžţőŻ388D$Ĺ4MšM .02˛jÍWUU•#GŽ`Ű6ŻžúĎ<ó ˇoߌR)311Îúú:śí°ššÉúú:šŚńČ#“\šrĽej˛´¸„mŮüäÇ/ňďţĂđÁ­r“ÍގmZŘśŐ*LM†„_ćxˇ/O&xŹ'ˆO¨›ˇsuž~ŤŔá.Ÿv™eśËĽŚËŒqÇö`Co’ŻË ÚNˇůmcjęĎ?˙<ögĆŇŇ2Á`I’0 MSMS1 Y–1 ƒ`0ˆ,Ë4›MŠĹ’$ Éĺr­>č§Ńh I˘×MÓ¤\.Łë:>Ÿššy–––8qâÄŻĹŘçjť´4|öXI¸Ľš˛ćcňܗ8pⲏ JČ2˛*sčŃ'‹Ęüůű2ąě‡oćʕŤ~÷{D‘Ë—ŻL&yë­ˇED"I(ć'?yąą1dYáęŐkäóyڧgxňɏ󳟽Äŕŕ Žc †řÁ~ŔłĎ>ëZ­gł,//ł˙~8€ă8 yAŕ…‹œ;÷ ˘Ń}}}źöÚë:tóçĎ …¸~ýńx‚×_“H$›ožIWW’Çw đXSmpżÍŹz˜1v7‹ëÝúęnŘ}ÎżsŽaY–'&źťŹś=׹mۛ+H’´‡ýÚŢ˙űŐnŮ˝ŻRHş}ü´řţÝe”ť…˝yF뺡ČďilĺţlLŰśŃuY–ßóőžťlúAĽ”íš÷z_tÍQćéĂśůӉNt˘ż!@LźD­|„&–ŹŢI05 )„HÇßđl@ŔM„âcC‡˝IŘť=´ŰS]7(K‚ˆÜúÎFŁÎ‹/ţË2‰Fc„BAĆÇÇyţůçůĂ?üC7 4Lr;y2™ ~żŻýŻxä‘GĐut:ÍövĂĐš|ů ŠTŠąą1öíöžť\Ž’Nw300€iZ†ÉŋS|ĺ+_!‹˛ąąI­V§TŞpěŘq …@fł‰ŞjlmmóňË/cYĂĂĂär94Me{;Ëg?ű /źđbËÂÄů€)˝‰ŁĺPŤŐŮ)×é‰u#JŃlš;´œy4 )¤`@ąR'lۈďQ7F’$‰[[lŰöŔ%]×1 ƒh4Ęúú:étÚKĐ8€ $ ‚Á ńx‚D"I>_dg'‡m—¨ŐętuĽąm›xď:čőôôL&I${@ƒjľĘőë×9v옡 ő°űo6›{łaüěg?c˙ţýěۡď=ťalll ( ŠTĘ{ŽëşÎÖÖ‰Dżßď•i ćççyâ‰'ú;666źýÜëűˇˇ3ôőő´ű”‡˝÷ů|Žó寠œˇĆt˘čÄG0DQ$ 0UYŤí „Ă´r@dÄXÜu) …\ÍŃM ÁÂŽVHʉHčĄFíh6›lnn‡‰ÇT* …"étĂ0¨×k4MŽ]ťF?R˝ÁhMĚśˇłôöö'Nçúőëäó9,Ëâúő8p€ńń1×e!Š"†aĐl6Y[[' ă÷h4ęBŹCš,…V)ÁÖÖŃh”P(ÄÎÎ###loołššIw:Íá#‡ůËżü:ŐjŸOăčŃŁĚĚĚ| Ž%wĘBllËb3“Ą4xŠpoUsAĎĄ6ËȒ‰¨Šč˛˛ĽÜÓKAb-_Ł×vPZŒ€‡=8QéëëennŽžž>4M# ąžžŽ ôőő‘Éd¸víŽăĐÓÓÓ˛ř”źÉR__>Ÿx™é\“ΙË5ř“c]|qŸ""–ă°RŇŠę.¨łŰłLŠř€dIâŠsOńÝď}`0K8B’d&''ŮÚÚbll”ţđGH’ÄҒÍĐĐP‹9cŮĘĐՕÄđaYÁ`€G}”Őâĺ˙ IDATŐUúúúšyóFŰśŠT*hšĘO<Áĺ˗č'™L|`BŔF4š pEŢľŇ*⋥ †WŠn/I¤‘$Al ‚;ÍzÚö2Áh-šz‡>’ač†ůŔ2%AˆĹbȲ‚˘(hšĆđđ0Š"HĽş<6S0Ŕçó‘N§ZIHšŚ222Âüü<ˇoߌŃh˛˙~şşş°m§u_]{ÜTŞ‹t:E(D× ‚ÁŽăL&<÷™ŃŃQ2™ FƒĽĽ%şşşe™h4âő•p8́“ĚĎ/P.—‰D"äóy Ă ŃhH$ČçótuuÇ;`Ěo@ŘśMĄP ˇˇ—FŁÁĘĘ ŮlUUćƍD"‘ě ~żŸńńqnßžM˝^GQĆĆĆŘŮŮáęŐŤhšĆČČ7nÜÄqlΜ9ƒiš<˙üóô÷÷c’$‘Nť@~6›%sŕŔOűȑ#„B!}}}\ż~Űś9}ú4Fƒ……Nœ8AľZő€ů™™śśśčęębtt”ۡo300Ŕââ"ĄPˆţţ~nÝş…Ďçc``˲Đ4ŢŢ^DQ¤Z­’Ďçš|ů2Ď=÷~żŸ™™jľ]]]ž5ööö6ů|żßO"‘ X,aY&šŚŃ××Çíۡq‡ŢŢ^fggéííejjЧžzŠĹĹEúűű!ŸĎłşşJĽRńŔĎŢŢ^nÝş…(Šôôô°¸¸ˆ$I  iŽ|(" ríÚ5|>ˇnÝB–e,ËâŇĽK4›MΜ9ƒŞŞœ?QY^^f{{›`0ˆŽë‹EFGGY__÷töĆĆĆČfłlllpđŕAŽ_żÎńăÇšző*]]]ěßżŸ@ €eYĚĎĎóňË/X__Çďw™—–eŃßßOš\ŚVŤ!şŽsâÄ |>Żżţş7ŚvwwŁëî| VŤ39ů…Bˇß~›S§N1??Oš\fbb‚ĹĹEN:EĽRaaaRŠÄŘŘ™L†Z­Ćŕŕ †A(â{ßűgϞĹçóQ.—I§ÓÔë.8ŽŞŻžú żó;żC:ćüůóôőőQŤŐh4¤ÓiFFF¨×ëÜźyÓ4byy UŐƒƒA._žŒŽëěßżŸ™™™ş‹uŔ˜Nt˘ř[ť…L|šĘD_ŠĺÜ:Bßžö§@ÂQÄ@!ÄV%OWÁěĘ6ƒq?ĄÖ ČĂÚíJ’D4ĺąÇC–%vvrźňĘŤř|7nÜ ŤŤ‹H$L/žřSžň•ßż#,ŮZ-*‹ ęuˇƲ,úúúČfłLLLpéŇe67ˇهŚitw§QU•îîłłˇy饗Š×댍ŇŐŐĹ+Żź†Ď§ľŘÝ9r„Ÿüä'Äăqbą(‚ °˝˝ÍÖÖJ+‰’[“,Y–ńűýTŤU._žěQ]?Ćcl ÇÔŃMVWW‘ý!ĚčYJ Ńl"‰€ş#R1dJ5ťPbm}ŁAÂAVIB@Ó4Ç{IrKłyäRŠ”wO:E.—CQ’ɤ[ţŚiœŮčb‚H4ńVšşşş˜˜˜ ‰ i…BÁ[áTÓ4špá"§N=F ŕg||Ź•TJƒ!NŸ~›LŤŞę­îď-}_ý ×Ah0B˛ˇ]'%Ŕt~śXäŇV•î€L@ÉÔLĘM›˙ú\ż5E“´‡[Ů:öFL˅I@Ŕ'X¤#ĸI’D(âóŸ˙<ßúÖˇ˜œ|„Z­F&ă-ÉdŸćc`p€ ’É$šŚaŰ6˝}˝llnĄ¨2áp¸Ĺn€íí,‹‹‹†‰(ş,’P(D˝Ţŕ•W^Ľ§§›`0ˆačyńŢÝQŤŐ…;6łm@Fń‡ ÷“_şNfú-‚ÝŁbIljĽ<Ľ9ĚZ‰řĐ!č.°´ľšÝh>p E‘‰‰ Al1MlLÓŔ>űŮĎĐh4‚-°Ä-}üqWDť\Žx@Ë͛ˇČdś‰ĹbLLL ë:Íf“TŞ I’‡ĂŒŁŞ*˘(˘i*çΝCÓTjľ:˘(ĆřÔ§ž&“Ů&‘H0>>A"' đÔSOĄëM‚Á`ˢXe` ß[ ŽÇă{˜1>Ÿďb™uâ×+Úí}aa€G}AX\\ÄśmŽ]ťĆéÓ§™žžfzzŰś‰D"ŹŽŽ244DĽRÁqŢ~űmâń8ËË˃AŠĹŠ˘Ëĺ(Šâů˝˝˝źů曆(Šěěěx ‹ÍÍMLÓäŃGĽŤŤ‹ţđ‡¤R)ŠĹ>ŸH$Â[o˝ĺýnyl“FŁái$E"ŞŐŞÇě¸}ű6‚ `ƒƒƒ\šr…t:í-<8ŽC˝^§^݇=‘úĽĽ%‚Á WÎ+IóóóŹŹŹđÜsĎą´´ÄÖÖGĺ­ˇŢB–eęő:ŠTŠ›7oz@G  RаşşĘŕŕ †aP,ą,‹‘‘š|ů2O=őÍf“×^{'Ÿ|’JĽBOO[[[Ž]ťĆ—žô%ŠVŤĚÍÍqčĐ! WCŞRŠpđŕA’É$˛,322ÂććŚ< “Ífi4üčG?âŤ_ý*ľZ MÓ<@+‘H Ş*׎]ăÜšs˜Śé•FĽÓiŻÔľŻŻĎÓŽŠÇăœ?žÇQ) |ó›ßd˙ţý(ŠÂ•+WřřÇ?N.—Ł\.óĆopěŘ12™[dłYšÍ&ńxźUR+qéŇƒƒƒX–…eYdłY8rä+++Ôëu†††řŮĎ~Fwwˇ`éşŢZÔťŽ(ŠÜž}›ńńq"‘óóó8ŽC"‘ŔśmRŠ>Ÿĺĺe†‡‡ŠT\vhĽRaee…Gy„ééi$Ibßž‘ÖsÔŕ‡?ü!Ţç<Đc:щNtâ7€š_"Š) ÝüxyQś˝ĺx‚>¤T-VŒ[˘$ŕ”ˇЇ|÷´"žďA–ůŁ?úŞ—ĽR]<ýô9dYĄżżI’PU•íím††ˆÇcí÷ÄÉ㌌Ž i*@`ĐĎɓ'QUżße™-FÜ#Üž}›X,ŠŚiÄb1Ξ}’ršŒŞŞÄb1AhŃü Âá‘H„Pč$…BŰś …‚„ĂalŰć̙ÓT*7iSdTUĂď÷ńĺ/‰`0Čg>óé–]Žź‡Őń‹16śeŇؚøůrĽ[Ůj˘d G ˘+J+ɓZ‰‰Őh edĽÁÎö63ßúßéŠúˆ?BřđÓ^"ů0Z[ŹS"á0‘Ý *xY–$bŃ(ÉDPUĽuż“ť>ŠěĄˇŰDű=×.ÝA–dţÎo?G$E‘eؕD.e¸ŃhrúôăD"”Öőčéšłâäo ß~Đě6Ŕ˜ŠGé•V˜34lÇÁ´ÁśĘ[ĺŚwąTI`ĽĐtŰA\°Ĺ´níTąm§UętG“Y†4ƒH(řŻ2§Ÿ>‡ŞŠ$“ ţäOţ>Ą[bWŻ7ZV°~űď|YV0 ƒH$ěi(ŒÇ[ [„ßű˝ßCÓ4Ž?Ćää„7ůtŰCŒO~ҝüˇŻwť>˙×!EC7Đőf‹Ąr‡#Š"ÁŽ>ĹOié2ššˇ)(`c›&’Ş‘9ŒëAÜĘŚIŠTA| Ť[Đjßdg÷xœÔî ŠŞîűáPĂ09÷‰ł˜–…ŚŞƒABĄĐžö!Ę"ŠŹěiŤÝé´Ű˘1dĺ÷ťÔy—AvKtú^eťűëŢ~˙a­đv⣲,3::Š \şt Űś‰FŁ8ŽĂŃŁGYZZňDÔÓé4étšk׎Q­V=đ6S,qEQ<­ˇś>G4Ľ^ŻFI$-fWŇcaŞŐ*###œ>}Ú{î8p€­­ şŢdaaÓ4[ŒZˇćr9˘Ń(˘(zŔP{.ąžžîąXLÓô˜Ĺb‘RŠä#šŚíŮΝ(LNNrůňeňů<ĄPČeĚé:‚ P*•źŹZ­ćÍo\ÝŽ"ĄP˲‡Ăłźźě áp¸4šó”RŠD&“ńĆąPȝËD"nŢźÉĐвějńľ÷ŃÖŇi˙m!|I’đů|ü~?•JĹÓxi ę+Š‚ŞŞtuuQ­VůîwżËÁƒ †iš<ńÄ,,,x%˛í{Ő>§H$B0IJ,*• Š˘‹ĹĐ4fł‰až˘(”ËeďüÂá0ŰŰŰčzÓ[SU•fłÉĽK—…ÂŢu5 ĂÓj)—Ë€[NU( \n8FEâń8śm300@8öŮBĄĄPˆD"AŁŃh-ŇŨŐj‹Eď9 éďďçíˇßŚŻŻfłI>Ÿ÷´yúűű™˜˜`ßž}-F؇3n ńž°ëďöď⮟í—ÔzÉ­— (@ĚŠmżcwFĆNt˘żVŃÖ°Zv¨†iĐh4ݕK5HşäĄY íUĘFŁA4žor´[¸Ž^ŻóâËŻđ_źrƒĆs‚cŰؖŽ`;č3W(ţë˙Đs„ďēH‚„ )˛?˙kţQÄßűíύ„˝ Πťkˇ¸5Ŕ7nÜ ˇˇ—îînے`jjŠŁGŢłLĘu6ŞR­V=ŞđÝÂtw~ˇřŰÝÖÖťŻŮîăßm7ťűî%ägŰĹbÉí /Éł-Ěz‰âOţźú/˜/Ƙý{'ž Oá‘dA¸#´gš&őZFľJĄP łľAň'˙3ăZžŽÇčúę?!6ůÄCƒhwĘq>ôĚňjkp÷a†|Жâm!— x}%Ţóžç*uţű§ůć’IŐp8!R%‘'úCü7O 2÷ŁÉ"Ýâßţ›ŰźşZFˇvľ#ŠÄr4ŔŸC•ĺűŠDînˇíűÚÖ°ŮŰśÚZľ{EďĘźťĎŢËMéîëýŤcjľ:Śiyz%n=żěpťŻmŰĚḚ̌¸0ÇÁƒ=懧ÓŮph”ó4Ę9H FPƒ1AÂÁľ4ßm•]*•˜›cxx„ńńq|Đ5i÷Ť÷Ôłœ;bŢkמGŹŘš˙ů HďׯŠĹŞŞ=4+ͽƙľEŁŽßďCÓTTEm‰â/ý¸?ČóoˇÓ´Đ Z­ŽnÚD’BaDQâ×!,Ë"ŸĎÓh4<ĄÔFف(Š@"IÁ`ršěŮlÇqđűý$“Ięőş'Əǩ×눢ˆßďG–e*• Ífżßßď'“É Ş*şŽ{‚eY”J%oá —ËŃh4ZŽbw„}ăń¸'Ćďj/…(—Ëž"‘ ^ŻŁiů|pÚs+WŽxÇ800HOO7Őj˲<}Y–ÉçóT*şŽ{Œ‹7ŢxƒsçÎľ´/přđa|>ŸHx ŠT*ř|>J%—ݍFŃuÝ[´¨Őj¨”Ďçi6›$“IÇÁçóQŤŐřÎwžĂ—żüeÂa h6›čşÎÚÚŠTĘťĆ.›F’$JĽ@€fłIš\öŞí…Ó4Éfł cš&š\ÎÎĄ vĺEż?@š\f``€ĹĹE‰@€FŁA­VĂśm˝Ô֝Y]]ettMÓX[[kąűÜqckk‹\.ÇĆƇn•hşL×\Î-YďîîŚRАJĽ<ÊišƒAŚiz€˛Śi”ËeLÓôĆ˲ź˙˲L­VóŽA0ŤT*čşîí+‹yףŮl‡ŠVŤ^9jűÚ$“IĘĺrK[/z( ăŽĺ˜€ŐzŮť^ÎŽŸÎÝÓ´űňfL':щN|Ł=‰ďŠĹHk"łĽ,(2ĺůßaë:b<‰4ƒç—ŸŒÝ߲اČ|j_ŒŸŽg(ëŽęśĹë+Eţď4ůˇNvsv8FÍ´˜ÎÔ1-ŰcĆȒŔ°ĎੱŇC´ŰťŻ$ Ý/ď'<Ů.GPUŐ>ՉďÝ Ó{ƒ\v—ŔÚÚ###­ňš˝ Ş Šřc)|‘¤;űľlW{(Ű1šÍ&ËËËXŚĺš‹˝cŮ6 ÇD7 ρiˇÝö;Řďj‚ˆOTPZ żđ+Ń:ńë’$‘L&ą,Ë{ˇËQDQ$‹yý`7#ążżß[€ił,zzzźE6 Ú~.…ĂaĹę8}}}X–ľgĚj‹ĆˇŰqťdön°š=n(ŠBwwˇ ´ZÚ@¸ĚŻ6p&IĹbŃÓ˝Y^^Ćď÷aŰś'ZF˝qĄ-Šť{§ŮlrâÄńV‰ŽĹáÇ˝˛YAˆD"ďXěqľńŽîn;ŽăąL"‘Č;ĆćršĚ“O>I8ö\…|>Ÿ|´÷ă‚(wśkƒZšŚyŸť;şşşźßďĹCű§]Â%Š"cccŢg4Mó˜TíëßfšŸ­­-Ç!wŕt]÷ôJĽB,ó’Öö{[[[ȲL__şŽăóů<˝EQ(  Óf oooÓl6 ›Í’Ďç‰F٤ÓiAđţnłhu]geeĂ0čëëóJˆLÓôÎŤ]ňÜ.Qj—*& Ľě8™L†d2ÉŔŔ DŁQ†‡‡÷Ř.;ŽĂúúşwÜmVćý˘-bÜţ|˝^ßł¸%ýýýôőő˝ŔŢ= BĄwŢďw,žßś.Čąwěź{Źi_ˇh4ę•'ľ‹w‡ řý~NŸ>ý&󽎫ÍjŐuýeĘw?Çßí\Üc5°í˝ a[˧]ęűnתP(P,üĐŹŽ;`L':щN|Ł˝˛ÇLô7^@űěďâ˙“Ď]ýÍďĐüéĐÎ~ ߎe!ÄŁč/˙„T#KwúÓďůAŇvc™C&'÷séŇĽ]Ľ @€t:ÍęęŞW nY&KKË8ŽĂÄÄ8 Ž[@oo/†Ą“Él{uƚć:鏭­3>>ŽŽëĚĎ/ŕ÷¸}ű6Š˘044Čôô Ą`ČĽýśô˘ą(ˇnÝÄq\ąşz˝Îúú:ĂĂ̌ěűpœm×#,SÇYz™˘Şě–žhĽeüˇ×QWŒ D” ’&ƒh#9uh°kUňyC°iá0ƒ&Jcťź‚ă›Ä‘DמüŽUDA0›˛Ů`˝˛Ăk‹W0m Y”X+gč ęL ˛]- ő˝2/WsHLŰŚŞ× i~L@ a6ÉV‹ř UV*>|‡†ŠSiÖ¨~BŠpHh22Â=ËÜ>Ü>Ă;ĘťÇAş"~ž›Ls#ˇĘĺœEĂ|÷ýę?šÝńěmçŽVLPřLŻĚgĄČ"˘(<„|űíˇ1M“FŁé%ÝÝÝ,//Óh4čďŔď×XXX$‰ĐՕd~~I’<'‹l6K:&™LríÚuŻN^Ő4^úůËÄb1ü~˝˝=,//c˛"sâÄń_XůĂpÚ"ӃCCä yśˇ3ˆ˘@:&şł‚Űfńľ˛œV×tu}lĎÎ}qq‘ŐŐU‚Á űöík%Pív*îblÇĄl6Ůi”šąľŔěÎ*ŞŹ%8Ů?IÓ4h˜:a-€,JnÍž śĘŁl,ۢ܏ó‡pľ• Ó [+áSTlŰŚ+óŔ ˇm9›Up +Ľb4PTĄtv@˜NźˇĐuŤWŻym,u…Ťggg9{ö,/žř"O>ů$ÝÝÝ{’îééiOĺȑ#X–ĹÖÖýýý<˙üóœ9s†@ ŔoźA,cjjŠgŸ}–p8ŒišĚĎĎ{‚šŻżţ:Á`ƒ"I/źđ“““d2üqTUŲlX__'ł°°@.—cppŐŐUDQôÄ}üqŻĚ'ŸĎ3==͉'(•JlllJĽřţ÷żĎŔŔ€7>ŒŽŽzʊRŠÄoźÁ§?ýisssd2]ŚÍ¤™%—ŰáĐĄĂ^IL˝^gjjЉ‰‰–r@ čiÓX–ľ§ŒŚŮlňüóĎóĚ3ĎxĺPťÇ^ŸĎçJťKPŰô˘(Ňl6šxń">ú(‘HÄ+ßiĎ w3ƒ,Ëň˜LťŸ}mŃîśVL{ĚÔ4Íďőů|ޘ ěaŔ´ˇ˝ző*###ĚÎÎrňäI*• ˘čŠ•+Šâ˙nM™ś^™ë⨠ënÔT UÓpl›Z˝ĆŇâkëkœ={I”0LWGFS5tĂŔqlYAŐT0ôôwA˘ÍŞ)•JŽč}oŻ‚ełYŽ\šÂă?ŽOóĄ¨îńśçV–mŁi*šŚQŻ×Y[[C~üă{:G0ŚčD'~CŁ-&yd ô_˙ SGýť‚‹a\zsu5ňŇŁO@ł†ń­ŻŁýü‡ý˝ß%N˝§Zýö ŐľkיœœD–%Ö×׸uë‡fjjŠS§g}}Irktoߞe{;ËOœbggA˜šşL$AU%.^œ"`š&ľZŐŐUöíŚP(´œ”şšzőŞgŸX,™Ÿw'EׯßŕěŮłź}á‡beu…Ť×Žąľľ‰ ˆ,,,ÇÉçóěŰ7ěŃhŮÉŚÓZmą‹fي´ő‚Ź;ô$ĄXÉ1‘mšŃDŹä]15DŮÉ-(6MP€#}}CZDa§<‡EtÔű–™śEĂ6¸°r“JłĘÉţý88|˙Öë<1|‡AneQ$EtĹd FX 0ťłB:”$W-pyă6çFO˛S+ŃŒ ‰"Ż,^c0–&ć! U˝Îўq  סćiMőŒâvÓtL,ÇFÄ_)s/ źÝÇ˘Š Çťřă|™˙őr™˘…ĺ8m\íŢŕ¤ĆŽ˙ Ž€(‚*ŔǓz˛D$€,˝{ť›™™add„ .đą}œ fgÝţ#IWŽ\ĺńÇOq떛`dł;LMMy ŽťV㋋K-‹ĺ•JšeG. šzĺŸüÔSĚĎ/´ú#ř|Ž\žĘ‘#GöŹôţň°Jgϊćű)S’$×~˝żżŸ••%vvv°,‹dŇ ! ‚×w—8¸:O6şŢdkk‹ůůyś3ۈ’ČáÇIv%ßőű­ł]Í3ľ>ÉţGk^œ˝@W(Ƒž1ś*9֊Ű5""“Š!–ň›čś Ŕ§ßćKGŸŚŽ7hMbSk3ôE“Tš5őŒąœßd8ŢC@Öx{mÝ2ˆúCtŁčŽEÓ6QEĽó ěÄű7EŚT*ŃÝÝíiŠ(ŠŇr\ŤcĆ=çm[áH$BłŮôŘĺrŮ*• Á`ČÜníg7ËAQ”–ĺ°ŠăŘřýA˘Ń(7oŢdrrr``sóćMNœ8A,ă?ř…BŽŽ.OóŁ­)Ň.iƒľZÍ3ęőşçžÔÝÝÍ÷ż˙}RŠGŽŮ6ŐëuOĐťíúTŻ×‰Ĺbd2ˆĹb|ó›ßäŕÁCŁćęŐŤô÷÷sńâENœ8ŔíŰłŹŽŽzâąĺr™\.‡ <öŘc,//óŇK/188H:ŚP(’ÉlŃÓÓÑ#G0 ƒóçϓÉdźň*Qéííekk‹H$ÂÎΎgQńâEşŽłşşĘÇ>öą–%t™D"ŽeY hdd„z{{IĽRĚÎβľľEąX¤Z­ňéOš . Ë2lllŕ÷ű=g­üă ť@,‹Ĺ˜™™Á˛,Ž^˝ę‰î žy挌Ś<çŁk׎QŤŐH$ěěäŘÉćH$źţĆë?vœ}ű†ydr’ršÂ›ožŒĹ. IDATgssUUůżţŐ˙Í'>q–jľĆććą˜ëŔäęĹ8rä(†ipńâ››ěßżŸbŠHŠX"Ďĺe…ĄĄ!R]Ý‹nݚŚR)“Ďů˙Ÿ˙Ç{ŹŐ/Ęř|KKˌ …xä‘ TUaxx˜šš9ęő:o˝őVŒéD':щßô •,Ë<ýÔS4 “ţüŸŹü“ŰČ˙ř?GH%Qżđ;0ЇQŘÂü—˙ńšüŮüż˙ĹßőěßK†ÁŤŻžB*Őí: ČŽ{R__/šŚŃß߇Ž7š~ý:ĄPýű÷sűömj5w’wüřqŢzëmşťÓřý~fgçHĽşH&“Ôj5ŞŐ*ŕ֙g2 …ŠTš^xŸĎăÜŠáu] z ÜUţő ňšťBĚÁvlVň[Ź—w˜L ‘Š˜0 ÚŇŚ–cáâGšuá8ażĆ玍"2Ď?ť°ÍRU@ˇ$Đşˇ¤K@Ä/ <Ő-ńĎ pp …"‰8qÚ>ŸŢŢ^EĽˇˇ—FŁÎĆĆdpp€jľćY‰OOOsôč>őŠßbzzš—_~UU˝Ül6ˉÇŮŮŮassłuˆáH˜ţţ~2™ ĺr…ÁÁbą87oŢüĐŻő/̾ǽ6s.ŸŰĄZ­aŰ۞¨˘+ëC’D,ËĆ0 ęő:š\ÎK1z‚‹kˇ(5*ĚćÖOŇŠPĐŤř$™ŮŇ6›ĺ‚Z€BŁBÔ`Ł´ĂvĽ@Pół^̲VĘp´o‚™eĆĹŻé™vÇř˘ď3š“eŮÜÜ$“É`YŃhÔÓfŰ˝ÓfôI’D:Ćśmfgg=}ĽösŐ0 ršÁ`ĐHFFF<í”Ýe@€Ă‡łąąáélóŇK/122âiĐ‚ŕéż´…hۂۍFĂ[m~w‰J­Vc{ŰľŻVŤ^)“ažmŹiŸG[ŤŽ-žŰfŕ¸,œ;eSm—F×ŮŘŘŘŁŠ×.Cęďď§P(xç÷ď|‡ƒślěS=z”^xOúÓźńĆë|á _đ4ZÚĽKšŚą˛˛‚ßď'•J‘Ďçšxń"ţçÎK/˝ä]ÝÝÝ4›M677) ”J%XŤ×댎ŽzÂŔ?úя˜˜˜`rrŇśĺÇ?ţ1ápŘcśœ9ó1^}őFGGéďďçŰßţ6O?ý4ů|žÁÁAýrüřqţâ/ţ‚/ůË\ż~gžy†ĺĺefffĐufłécÉd’ýű÷Ól6ÉíäI$‹Eęľ:Éd‚W_}•żţ›osóĆ …‚ť׺߯źúsŞŐ*Śi’Ďĺ‡ĂD˘Qϰ]2崘<Ąpťľ˝ŚižvLw:Şi9r”“'egÇzOĽSؖÍŕŕoźńŐj•#G\gąRąD,î~W›=Ôdî€1čD':ńŔ´'J^ŠR4Ęď>÷ş ţâř§ĚýĹŠřţĘłĎ!nŹcýÓ˙’Ţ­ ţł˙ŕóšĎ~†Ŕ]Âť›ĺóy†††řâżČňň2ŰŰŰ‚زR ˘Ş.•łŤ+ÉĘĘ ™Ě6>ŸĆ­[ˇ¸yóŚiqřđ!~úӟâóů8tč Ž>Ÿ†mťŽ’$z ă÷ž÷=&Ď>ű,ŚipóćÖCp?€;I ř|šOĺô™Óźţú눢ŔącÇ( Üž=Ăţý“㊿:ŘV2/"kşk+nƒb ¨Š@8X`é`ëśén&ʲć űŹ&ˆ —1#ˆ€Ş#UŢĆÖ˟Dź+yl'ť˘("8nűč '¸˛5‹cŰ<>t˜íJžőŮvŠ CŃ4Ľz…ƒÝ#ÜĘ,ą¸łĆßě (’ĚZi›ŮU6ËšVIŽ…ă@ž^ał”Ă/kŒ§‡(4Ęě‹÷PŐ랸čtęWŽY‚h@ĺó'ÇéŠüç7šT’¨–kwÝrÁáŽó’E„¸&ň…~‰?=5ĚH ŸrÇvůÝÚ^[˜1 ŕóšýččŃŁÜž=Ë­[ˇ8~ü8Ůl–ŠŠ‹D"nB15ő†Ął˙~2™ 333Ȳ̚sçřöˇ˙QÁçÓPU™@@kŃ­U‰8WŻ^Ĺ4-EöhÜö8ö~ˇu'‡ćƍTʕޠѨaY…BĄEżˇ¨×ävvŘŮÉaššćCU5ţ˛$síęu|~}ý¤Óéw˛„\ŮDDdI"ęQiÖYÎońšÉ3üŐĺp‹ůˇLŃąŠu3żł†Śjô…źźp‘/ě˙8š(Ұ Î/_Ătl&ť†ZŽcMKg1żC@ó1ífťV`4ŃGą^Ţ ‰BgŠŢ‰÷śm“Édxë­ˇE‘ÉÉIOłĽý˙_|‘‘‘Qúú\öD0dg'˅ p‡P(HĽ‚ˇ˘(ĚĎĎ#Iáp˜Ă‡ľzO& 2>>źň sss;vŒT*E(ä˛inܸÁŕŕ áp˜C‡ńŇK/Q­Vyúé§yűíˇY]]CUݲč7ß|MÓ°m›ééi&''ńűý pôčQňůźWƙH$˜žžćěŮłŹŻŻłşşĘÂÂ'Ož$266Ć7žń Eá™gžáüy—™áA~ôŁ!Š˙?{÷ßFy˙üswÚ˒ĺ˝â•8Î ƒ@ „0CYeĎÚĺW:č˘ăE”.ZÚ2ŰR Ľě•śŒ2’@iČىáŘą-OٲľŹ}wż?N÷X˛ĺÄq‚IÂ÷ýÂD–ĽÓÝ=wŇ=_=Ď÷ËcńâĹhnnFII âń8œN'fΜ‰ŽŽ.´ľľăŔ˜0aöíۇ˛˛2X, Vú[ŤŐÂăń`͚5X¸p!4 Î?˙Ź^˝EEEX°` ŁŁ}}}(..fŠdYƂ đĆo›ś¤&6›Í0›Í$ ­­­ĐjľŹÔśFف$I¨ŽŽfm–ZéH]?ŤŐŠp8ŒeË^Dž^QĄŐjqꊧ˘šš睷{÷îEUUKŔk4aľZQTT„wŢyŮŮŮ8ďźóđúëŻPů ´´´`ÓŚM())AWW‰4-ęęvaďž:H˘ŁÉ„D"ŔX,NFĎqˆF"ˆDŁĐhľˆĆ”ŕ“Ůlb×^‘HbB„Ţ ă9ĐhÄbQôôD`ˇg)U¸ź^ź´ó<űěß1}Út”—WŔáp ŽŽ;wî„ÓéDgg'Ţ~űmTVU˘śv2D)mŰśĄłł'Ndĺą?őĎËQÜOĽ­ !ŸŰ šń.mŠcŠŽK,žŔŢ}űńëßüëZ\ÖLŠi?fŰłpĎ÷ž‡YłfB§Ő¤&ޤşJjňË#YˇL0Vî˜}úpšLËL]ף鎶´ľZŇ:äéKĐÖń˜Ňђ9H2䈌Qó‹ŚDF;ű2™“=>[V1€˜ąńŠ/ÁwZz™”uˆK"<ń´xťđfÝǰ•‹\w°WLY„b{6śÖA#ŘŢąLš‡FO;Bń(ú‚>Ĥ.Ž=ďě]§Ń†žýá ŽžšoíüóĘŕ !%Đ `QĹl¸|nčqÁiśáĚ 3Pœ•=Ż…So…n§)Ś´őĐ &kťd(ÁÓďÊ]Mxż5‚˝Ą8"  Yi ­˜ľ< LLłó¸|’ójĘaą$sědČQs$ÇůH#H†ŽóĐżuwťŃÖ֖,óŞĂÜšs‡˝WtuuĄŻŻýý^ˆb œůŠäŒ9Ü{0şŇ֙ö“úţŤËďëëƒ pĐë´0 ee4_,e%aŐoiŐźę4I’`4™1}úLÔÔÔ°uJ”eôÇCč ű°şi;<.äZhô´ăŞŠç`‚łţ^¸źÝhěkÇœĎÄśö}°›ŹhęmÇ@<‚ł+gテ˜Q8 Ű;ö#!‹˜–_…–ž.L-ŞÂŚÖݘ’Wý˝.ÔćNÇńŘŐ}Só+qzéh8Nzaü’cSi듧´ľ$Iě\PGŸ¨9MÔrÉꈑúúzL›6•3ŽÇcŕ8ž%ÄUŚťyóf,^źF100ŔŞĎŠ9HÔuV—Ëqęëë1sćLVrZÍ­G’#ň”<-ę5ƒ:ýI˝~P÷…şlQYu+ŁŃČŁćWQ?ËÔeEŁQh4ö7őRŚ.O –ŠAě`0ˆşş:̜9“•ţV§eŠŁ}ÔęZńxFŁ‘-# ążŤű_Íŧ–šV÷‡VŤ…N§c őË:ľýt:âń8>ţřcźňĘː$1šl!ů9­L+UŤTŠŁ—$ILŢÇąRÓA€ŐfSr݉"Ľr¤şŻĎa #É"úZëŔ­˙2´ąpr|0č")לxˆśŔ Ę''§ç käÁOYžC‚Ó 6ýidWŸA#$Pé. 2ÂR}Ń úĂ4őľC”%Lt–Â’L,*J+ËËś39úCIŘŤ$eI}9%˙… ‘}ěŤŐƒ4ź2DIÉŁáč-˛´č˝’Ŕă“Ŕ÷pÁ˜Ô AŚŔ†”E ‘x=ý~4š˝h쏠g †„žăĽoѢ&ۄ Nd™Đj<—,!΍ű9ŚV#;p ˛ ”—O`ÓR‰Dŕrš‹Ĺ0qâDö égŃÁ ‡#c Ƥ–žM$đů|đů|J‡‡S:>‰xńx ńDńx‰D Ę}<¸´Ťp.íJ}đ<3jt0 zXýaKŚS0†‚1cÝVőß`0ČFUŒe9jŕD}š`@Zr}ĺý;0ę×T߯SËmćşM BDŁŃaď‘#˝†ş ęűÍfcݧ_Ô÷üÔm>žƒA„BĄ´ňÖŁ]ĎÔŔ†(ŠiÓÚĆâíˇßÂkŻ˝6ćçÇă16şSŽÍ— W_}5.˝ô2Äb1řý~8Ů~ÄsDŻ×~ęÁI!ăH:rřÇqĂ2<ĎĂh0`ŇÄj|ăÎŻaéÁƒ(--AaAAĆ0ˆkqCşKÍ> ˝Y7ą 8ˆŕ¸d­\Y ŹpŹąĽÔ†gů=”˙’Äl´Œň8Ić‘e,=äúńŕ`âuŕôVXľFZœÉaźŠLjˇoh7Pθ])+’!„4řúÇĂ haäľÉdŞă{źĽŽJ9Tg>Ó/ő>F€E#ŔŹĎAyAI‰8DQJţ]FœŠ”ŇbębÇűă8:SŚL9äcŒF#&Mšô™wř2ú9üš—ú\uˆ~NNěv;BĄ"ae´$‰É ‡IR‚!˛”žŘWN ľZ-œÎœCv.xpĐó8tfœF Hށăa´Đóŕé͘|*祚%??‹ĺ¨ň;ét:–WĹăń śśZ­áp˜%ěľŮliĎQs{ŒF"‘`e˘ŐŠ:‡ŇÚÚ łŮŒœœ‚ŔŞ)JOO Ëç"Ë2ü~ÚzöőőaϞ=ŕy“&Ő`` „ŇҒń›"}űË`0°ŃF---‡üźH Ĩůpü~?ź^/ Ň*nĽ>VĹ3ŇűéG}tT`pšU4ƒŃ¨9ęă>ăŐW_…ĹbÁ”)S“× rĆí‹FŁĐëuăŇfŒ!„ńíNąé6Ł éœpȲŒňňr477C–e̞=’$aűöí0 ,‘rMM ÚÚڐ——Ç’ŮF˜Íf–řˇŹŹ ===hiiIVŻÔÁívĂd2a׎]())$I(//GOOT*ěŠŐ´ôz=l6\. PRRÂŞatwwC’$¸\.äć梍ŤKIˆ>y2DQD]]ĘĘĘĐÜÜ ­V‹’’|ňÉ'p:p8xěąGŮ1głŮÇáó)Ő˙”s4Uů’$9ů%‹’ăĆçóAX,fÄă1ř|>čt:đź€`0€DBD^^^ň=]F,Ś$gV÷™2MIL™Ň‡$‰x衇p÷Ý߁ÓéDcc#A@yy9ęęę`ľZQZZŠ;v ›LÁB9I:ü˘(‚çš1wć”ůݚŒC|Ѓ86‰DbXŕCšˆËÜ´:˜4ڌÓ*Ž:БP8d{r/+ÉDÇu:ƒú9ľk=žŁb‰úްÔę9C;ô‡1&)¸BçŮ訥ĄÇłš;a´űX=ˇR§BŒőüMűńÉŃkź püçc„Š(&čŘ>‰‚1‘HŘťwŚNŠ &Ŕăń   Ńh íííhiiÁźyóĐÓӃ˛˛28p<ĎŁľľííí0 p8hllDCCœN'8ŽĂ„ X'­V —ËQL 77€’dV™˘†ÉdBOO6l؀D"žž>Lš4 ńxÝÝÝČÍÍĹƍa2™ĐŃсěěläććbç͈F٘řý~̙3‡U0ęííÁŔ@W^ye29x‚ÎP§ţ8ôőőçydeeaŐŞU˜:u*ÚÚÚĐŮŮ ťÝŽÚÚZtvvaďŢ˝˜;w.ZZZ ŃÚڊÎÎNÔÔÔ6n܈yóćÁăń ˛˛íííƒ8x𠚚š0qâD‚€;vŔçóaΜ9ˆD"())ËĺÂţýűqúé§cϞ=čěě„Ůl†ßďƒNWÉŚwś´´ŔáPŚX~đÁ¨ŹŹÄÔŠSáőzáőzŃŘ؈ěěl6’0Ăív#cőę՘?>ślقžž>ŘlYČÉɁŐj…ĹbßďgŻ×‹őë×ăĘ+ŻÄsĎ= ˇŰÍrß VB @Eäĺĺ"‹A Ę´^Éń•“ă„ÇÓ‡Ăżßěl|>?===(..F,‡Ď× ŤŐ Çœg2Ď I"˘Ń(<ž^89É@Ÿ2ľ­ŻŻƒ<ĎĂëőâ7ŢŔ\€uëÖĄźź‰DۡoÇ… ą}űöQÂ˘` !„œÁĽÓ¨N8šuQp!eŢ{ęÔˆĹbĐj5#NwÉÔa<™Ń?řł)fÄ%;Ť˛,§WUâ>ýśŠD˘ŕ¸ÁÜj)äH$Â. FŸĎĺđIŚÉ‘„éŇχD"Y–ÓrpQTJŽ67ÉĐŃNG[­i”Gejš<žgŘgńž­tšbG”đßÁ˜ƒ˛Ž¨FفÓédt`°ZŁÝn‡$IČÎÎĆŢ˝{Ç‘——ˇŰ ­V˧‹ľľľp8ÉʈKđk0`4𐕕•ŹžŁä_1™LČÉÉA?ŹV+rssaľ*#9ÔŇYYY(//G~~>ěv{2‡ƒQ֚Íf”””ŕÔSOeU™˘Ń( `2™Ŕó<úűűӎa­V ‡ĂNťÝŽÖÖśRŮJ’N‡É“kYe˘H$‚ÎÎNÁd2AŻ×Łľľ.—+YÁȂââb|ôŃGhkkƒÉdJNmŃ#;;;™`])Ěqôz=jjj0eĘ˜L&„B!đ<ĎŚpĺććbǎđűý(**ÂţýűaˇŰŮg›ŃhDWW-ZN‡˛˛2ź÷Ţ{˜>}:ŚL™‡ĂŽşşz6‚PÉŰ$Ŕbą°ž<Ď'ĽM ŃŃс‚‚‚ŔJT˲Œ’’´śśB–eÔÔÔ //yyy“ÉÄÚF͡ŁávíÚƒÁŔrđ)ďkĘÔ`e_ë!Š:;ťX’aĽ š:šU=ŽĽd?1YJ§TŚLś łöäy!Öjűó<ŁŃŻ×—6-iϞz̟?%%%˜1cŠŠŠP__ŹŹ,ôôôŔfł[BJŕK!#KßLš^R—Ç!Š čtşdÉBşđýŹŰXŠĆ‡6™tRmCQ“Ł-´ŹźdŚNĚÉÖ1;žƒfńxĄP˜u0Ô6E1Y}B€!YňrXϚŒŰ%Ľ,‰Dáp” O+IŻ 4vÝqđVu9’ |”Ŕ÷ř“H$ŕvťá÷űFát:‘Í:ő˛,Ăăń  Ą¨¨ąXŒ`Q;í:---l”Mmm-bą˛˛˛›ŤŒlhoo‡(аŰíđů|(//‡FŁA"‘@GG"‘ŠŠŠFÁó:::  ‰Dب!ŁŃČ*şY,Vää8 …ĐÔԄH$żßšsçÂď÷ƒçy6ŁąąEEEˆÇă°ŮlčëëG8‚(*š° Áqşşş‹ĹŃŢކ%K–€ă8ô÷÷َˇ’$Ábą°ŕFŁA @vv6’›› I’pđŕAV1*ŁŹŹ ĄPVŤ999$‰Uǒe:Á`z˝ž9ÔŠ[~żŸ­›FŁANNš››ąoß>üă˒çQ69+p8ÂŞf‰bąXœ}ąŐßßĎFđ‚ˇŰ ›ÍƉ &bV§Rő÷÷Ą´´ńxvťUć’e%ࣔžVžŹAÄ .šä̟kӎŽäçç#°’ávťŞ)BȉŒMnőbOţŞ”-TżŚăřveHR˛"Kň˘NŤŐąoŐÔśRJBĆŔót:mZ.™ńřœb1HVćl+Ľ-҃cŠÁ3ľŤĄójźĎ-Ľ%˛o+×V:&Ľ“KíőéÉŤďq˘˜€ hٔ ÜÜՔ2]ëç˙566˘ľľUUU(((8ęŠjŠÔŃ+C§,éń’ú…ČXłÔ Lc9f†N/Vőőőaűö((ČGuuő¨ö_je§ÔvŮ´iŚL™ÂrnjôźÔý˜)H××ׇ]ťvĄ´´•••Ť×Šę¨‘öyŚőřÍoŔîÝťč9˘(" ˛QB˘(" ąQ3#m‡^݃N§gŁłŽÔ´iÓpĎ=?<äct: US"„“ăx°ÄcęđŘh4–ü• S?äSl(ëŒp’ß Ă.ŚxžgÓ(Ôoó•乊mEöiwđ‡9sĐjui†&wU‡ż+%S/PŠ>ýó‹cç0X #Sç*ľ­b1ĺÚV}$ăŐVƒÓ”÷@ MSúœŠÇăčëëCA˛2ŁŞŞŞ •••GčHĽŒBą€‚$I‡ĂěG-%}¸RÔŠ×UąX ‘HfłyLĺšŐ ‰:úćHAáp89Ňfř󳲲0oŢ\–Ťd44 ŒF#ËßRZZŠÓO?ľCŚš˛,# ą@ˇÓéöšyyyXźxń!Ű4‘H ŽŽUUUČĘĘĘř÷h4ü—°ˆ IDAT ‹Ĺ2ěommm—ŠXR+kĽ~deeąQzj%CI’2cÔí8Z#­ëxŁ` !„| şC?,Sďăy>ůÍ˝V~Uý„|şmŁţŤv3uSsǨAő[Sj§ńĽśOjŽ˜Ą’ęmuŽźÚNň8V™"ĂĎŤLüƒĽĹ5Éċ2ľŐqĐV„9y$ ôôô ŤŤ EEEhmmEII t:+aląXĐŮŮ @†N§Ç››‹ŇŇRôöö"‘H ¤¤DEEËESUU…P(„îînLŸ>ĺčˆFŁčîîFGG›r’››‹ööv–ű¤ŽŽ]t:::`4Ą×ëáńxĐŐՅSN9…u’ăń8ŞŞŞ`4 ™¸~ż•••đz˝pťÝ())A__ ŃÔԄÜÜ\deea˙ţý¨ŹŹd9@Z[[Q^^Žx<—Ë…˘˘"Řív8p^Żľľľ0 pťÝhmmEuu5ÚŰۉDŸŸ§Ó‰ććf äĺ好˝ÇÁnˇc˙ţýhooÇźyó`6›áp8ĐŰŰ łŮŒőë×ŁŞŞŠĺ´Q×)‹Ąąń4- ŘňÔQ)jΖÎÎNhľZ´´4ٍ¨FŁ‚ ŔëőB§ÓĄľľ555°X,¨ŻŻGss3ňóóałŮŕt:aąXĐÜ܌ěěl6şi͚5Đét(//‡^ŻGss3ěv; :::‡ńŸ˙üW]uöíۇÜÜ\8´´´Ŕjľ˘ššńx‹-B0D[[ ŕőzárš ×ëŃßß­VŤŐĆŚůý~ zřý 6zRĂqü~2ą6›~żF٧\‡…Ă!X,Ödp/Ё ŢƒA˜LĆd^9fł Z­’$&BR27IRFh644 ‰ ˘˘&“ Á`űöíC^^Ë­CÁB90™1ŠA˜ÔaşjYję„|&-6ŞŠVCK†óŸ“Ę*Çc-Óy6RG_ ĘĐš5ţít¸ŃŠí§ś‘z^Ľˇ•:}óPÓ87ĹspZâŃ-gč˛Ćöž“˛ĆřŁŮ'ÇŽ­Č‰I šFěŮłfł˗/ǜ9s Ë2<ƒÁN‡X,QY5ž††ěÚľ ,@cc#:;;‘““ƒUŤVĄŞŞ hjjb#8Ԝ$jŮĺÖÖVäççcϞ=đz˝˜9s&€•Ľ÷ů|čďďÇşuë°xńâäHĆ8‚čěěB$Ann.BĄ ĆDŁQlßž………čééA}}=JKKąiÓ&`ÓŚMp8زe ć̙—Ë…šš$ ôöö>üđCdggŁ˘˘[ślA(ЧžŠŽŽÄb1„Ăa477#776lŔÁƒ1ţ|´śśB’¤dőĄ&œ}ö"tvv˛’Ůjyďx<Ž––477c„ ,Ÿ‹ÉdbU{<ˆéÓ§Ăív#Âçóąź7‡ýýýŹ]‹Ĺ Óé°|ůrTWWcâĉضmKĚ\WWÇ*-Y,öeĊ+0oŢ<´ˇˇc˖-¸ćšk ŐjńᅪŤŽşk׎Euu5|>VŹXsĎ=ĄPˆiţóŸ˙`ÖŹYhhh€ p8čěěDAAÚÚÚŔó<úúúĐÚęBqq1ÖŹYŸĎ‡ělź^/œÎl6rH”ÄÁÝÝnV‰)@aaQÚű‘ÍfCss3ňňňĐÝíFvśÁŕ6› &“|éíő ++ ‘Háp<Ď! ˘ˇ×ƒ’’’d>‰„Č‚\Á`^Ż/Y:<ˆ>úĽĽĽp80hjj‚FŁÁ …(C!'bgdh'q¤cęZş >1ڗÚéłŮďŠçĘHsĎ3Uś}U%r,ƒf‡ ČԖě$äŘĐétÉňżVş8PJ Ť÷éőzFD"”——łDźj’ٝ;w˘ťŰ FĂ* Ŕď÷ĂnˇĂăńŔëő";;›HĚÉɁÓé„Ífƒ×ëE0„Űí†ÓédÓuÜn7Ün7:;;Y5#QTňLdeeąőSŢ#8$ Fäççł*m999Řšs'L&z{{1qb5ÚÚÚ‰DPXXN‡x<Žžžx<ô÷÷ŁźźfłZ­–ĺ)ąX,ÉJ}˜L&–äXI4Î!˘˝˝˝˝˝pšZ100Ŕ’ËŞÉŽ­V+&L˜€?üűöíĂěŮłÇaľZŮ!łŮŒH$đz˝hooG4…Á`@QQŹV+˘Ń(Š‹‹ąk×.–V-Ľíp8H$°gĎTUUcϞzđ<ĎŚ—iľZF˜ÍfLŸ>ëÖ­ƒŰí†ĎçcAlTH_Ÿnˇ @999ŕyšššp:0™LđűýhkkƒŐjE @II , Ěf3zzz(SÜ,3ŤĽ|đ<“IŮ^uʨ­H$ 5oŸŇĆdyđ /F‡Ăżß5ˇÇqˆD˘Ź˜,ƒ%‡dD"á´Ü~fłRAI%pœĚS5łŮŒp8 Y– ‡YK-ë­Ÿ0ÉH™Š—Ŕ7ÓĚ } ÷ýä_ĄůڄÚQHF”HˆˆÇŕĚ68.ó—ÔNÇĐŕĚЄsôóŮýÉq@eNţhK!ÓĎńw. śŒeäxűœ”0đRZ­’ëAőŠŽ>Ť$Ë2ĐÚڊM›6ąœ˛,ُ¸.— čęęÂÖ­[qđŕAX,8Ź^˝ŮŮŮđű|ȲŮá÷ŕrľAD"–8w÷îÝčďďÇŔŔşťť ĄŐjŃÚڊććfdg;ŘşŇVd(żßűď˙ů°@ĚɈ‚1„r˜‹Mő_ƒšb"–,ÇG„B>X‚V1>8j”ă)s´K$Aqq1Ěf3ôz=***ĐŰŰ QY%5ÉŹ 0 hnn†VŤEWWňóó`łYáp8ĐÝݍݻwĂjľââ‹/Ǝ;‰FáńôĄˇ×˝^ŹŹ,čőzř|>455aҤIčëëc#lěv;Ěf3ŤÂ¤ŽKww75Ió‡?üßţöˇ0uęԓ~[iš!„†ra)'GĹpĐh„ÂÄcaƒ9Í !„Ďx,ŒD, ŁAÇJY~nžˆŸőĂ×]ŮŽ¨s§Ń şşĽĽĽp8pťÝ˜?>A@aa!8ŽCUUôz=$IÂyçI’PYY ˝^Çƒ ĘałŮ`ąX`ąX ÓéPTT„H$ŸĎ=ő{`łŮ0uęTää8“%…-ŕyŮŮŮčííeyjԊ5ššš˜8q"BĄ éőz:‘ÓŐՅ˝{÷áá‡Áˇżý-<üđ#¨ŻŻO{Ěu×]Ňl/c!ä0gŠybAPĘjđöv"ݏź@ò !„|žHb>O74Â`iŘ}ş’şÎjé^Aŕ KR˛T ‚ ;;ŮŮŮ잏Ź,vŰd2Ą˛˛2í9ĽĽĽiżŰlśŒĎM˝/++ Z­YY6P1›Íě1eeet’#ŚNMŞŻŻÇĂ?‚[nš?üáNÚíĽ` !„ŒââŒç9Č2 ŃHĐé´G˘čsˇ!;Żź ŁE!äsAăđtť Ć#0čuĐj5x!Ä8ąGŨӒ5 b ąhFł•=…Ůl†Éh8ŞIŽ^?&OŽÁŢ˝űŘýőőőřáťÝމŤĄÓĽ_kÇb144€×ë=aˇ‚1„rˆ‹35'ŒA™'Ż“!IâŃôt4ÞS­ÎŽç“eŹ€VŇz$ŠŻŁ>'Ó}ęc‡.3óßeśC/8S7ôš#=nčsľž#m[Ę˝HÚ5šçęuF{_Śý7üqň°śí>šCčPűĺHÚîpŰp$ű`ěËTŰ,˝íFóÜc}LüşGßvŁ=ڇˇgúk–m7üœÝ~Ší2ӟÖűŃŃî—#y?é¸ú4ŽéĄës¨cúXżfżŒđÉÄÎyedˆ2J$ ĂŰŰ)Ąbôz4‚†bNôDžƒ#ayđČ€fŤZžÇQşM´(CŽUŤVáňË/Ç}÷ݗvż:Šşzx t:ŞŤŤąyóf ĆBČÉzÁ1ôMŁŃ° M(!ĄŻŤź …$)ŽŁKî›ú.C bh'ax§aôÔŠŻw´ËŕFąüąŹëHŻu,–›iýpˆí:–Ë;VűýpűŕpŰp¨żËGš/2ľWŚőí1}¸çŒ´ßÇrśíä1ƒÇrß~ZÇôHçްíˇ­Ł=ŚGťĎŽäýčhÎÁ#١Gű^r$Ë8Úcztű›ç•Š;’‡A#đ0 Đj5Đj´Míúšyâb’Ÿő‚z˝ 1NŽ‚-Fk q„Œęšvô–-[Y–ąhѢ´éuęňôz%łvíÚ´çyć™Éżíu%I¤` !„œ8h< \˛ZÇq<ŻeDQ„”C%H’ňC!„œđ],ž§Ń@ŕ9čzjž^Hb¸´@̉>2FxÖM’2˘ŃúÝ­ĐmĐ-Hš(7¤C8Rňˆ×™ƒŕăůüŁëˆýľS_˙h*[rGš˙q Ö˙Dn˙Áç'ń1=?‘HŕĹ_Ŕ‹/žńQ˘˜€aËE1ybL댸íăőţEÁBŅ™:ěgӐ”7nžW†1KĽĚľ„QţĽ˛×„BNÍŕčXYdŽ Ĝ ՔÔĎvYV*€ đH$D$bA„˘S>ăeY:Ĕ°ôÎjŚ)cCŸÇşć–3tJńHÇáS šdĐhä)ľ™–;tŮGň÷Ămӑţ{¸ĺŽô÷‘ŚFŽôÜ#Y×cąN‡kżĄ÷gzí‘ţžięâĄÖ}´ë5ŇóâŃđˆcH7#ü] Ó0îÜô`L<†H4‚x4”1<–iœnękú=í#ś/ǏϔD ĆBČ^¤ŠA Ěđ<ς/ę$K#^¸B!'Ňgutč`ŕ%5?Œúˇ=™ëĐ`’ş !Q!ŠDlôŤ,SB@ř”Î˙††ý˜8q CÚý‘H űÇüş:ÍČç.Ď ă˛Ď(C!c¸PSoŤÁŽăĄĆ]Rƒ2„Bȉţš7RâDÎs¸ĎůÁ‘°$IÇi!H$AJű҅˘4ŸN#đcëÖÍÇüuM&ăČď42†BŽď ľÔŰéŽ1„BNXJő¤áŸ{#ý{˛Ö+Óą$đ<YŇžpĄĎ{Bü VmLŤŃâü§` !„÷iCçĎfš7L!„œčŸw#}Ž}^2ęH™ÔĎ~ Ä’ržđ'Ö{ćP#j(C!'օÚh.LéBȉňŮ6R"ŃĂ}֝ŹűäP‰n ůź’tbœ<Ż$ ů„§` !„œpŽÇęq„Bȉôův2o?x%äđ˛Ź6x}žf]yNSikB9ąŽD !„r<ŁĎ­Ěűö !ՖÁë÷0ëz<c¨!„|ŠoŠ?„B!„œŒŚLŽĄu=BŒ!„B!„BȘ>g­ë˘` !„B!„BĆŹ° gÎ;ý¸_Ď3睎‚üăb](C!„B!„ŁrĺeKÁsÇoˆçx\yŮŇăg}č!„B!„BČŃ(,ČÇmˇŢpÜŽßmˇŢp܌Š(C!„B!„c`ń˘¸ö‹—wëuí/ÇâE ŽŤu˘ŇքB!„B9&.ťäBX­üíٗ ÉŇgş.<Çăś[o8î1c!„B!„r -^´ľ5ńĎ7ßÁÚ ›>“u8sŢé¸ň˛ĽÇŐÔ¤TÜ(îçR~Woó)˙Ş?BňG“üŃа˥ž řŒ#b„B!„B_]ÝŘ´yę÷­~ŕ˜˜á96›Ľ%E˜2š§Ď™5ö ǃ3ĺÎŕHţˆÉ)ĺGNůWN.%ő6†ÜV^f¤—r›‚1„B!„B9šS0†řB!„B!„Œ# ĆB!„B!„Œ# ĆB!„B!„Œ# ĆB!„B!„Œ# ĆB!„B!„Œ# ĆB!„B!„Œ# ĆB!„B!„Œ#ÍxźˆŤ­’(ŇŢ&„B!„BČq‹„qyq Ć”OĄ%„B!„BMS"„B!„BWŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!„B!„BGŒ!Ç˝žž>ěÚľ˘(ŇÎ ä$ŃÚڊ††´N„B!äsICť€Œ‡+ޏ ]i÷ ‚€œ'JKKqÁçaɒsa4Ósđ`3nżý …púésđčŁÓÎ<ÎÝ|ó—ŃĐиęŞ/â{ßť›vĘçP[[Žşę:öűc=ŒÓN›xç÷đ‹_ü ˛,ăk_ű|éKˇ|ćë{<Ž!„B9yŃČň™EÝÝnlŢźżüĺ¸ĺ–ŰĐŘؔö˜;v  6oŢJŁc9 lܸ˛,'ooˇ×]śěxꊿኧţ6ěu?Ťu"„B!ŸOŒ!Ÿ ‹Ĺ ˝^ŸvŸËĺw~===ěžĹ‹ĎÁôéÓ`2™đŐŻŢAhçr‚ťîşkQXXˆělnšĺŚq{Ý×^K Ć|r\Ź!„Bů|˘iJdÜ]{í5¸űîoz{{ńĆoá™gž…(ŠđűxđÁß㡿}`łŮđ׿>A;“Č”)ľř׿^§u"„B!Ÿ[Œ!ŸŠœœ|ĺ+ˇžzęo€5kÖĄ§§šššxë­ˇńŤ_ý†=~íÚUltĚćÍ[đúëËPWWŻ×ƒAĘĘJ\pÁy¸üňˆ˘9x°/˝ô 6oŢÇƒAéӧᦛnÄŹY3‡­Űƍ›°lŮ?°gĎ^řýdg;0{ö,\ýu˜8ą€’gâç?˙%{ÎsĎ=ƒI“&˛ß—-ű~÷ť‡<Ďăíˇ˙§Ó I’đĆoâwŢGkk bą8JJJ°xńٸţúka2™Ř2.˝ô ¸ÝĘhĄ{îů˘Ń(ž{îôőőăă˙N—qß~ňÉfźöÚ먍ŤG DNN&Ož„ŤŻž łgĎbKÝÇUUUx晿âÉ'ŸĆʕ+áőúP]]Ż~ő6̛77mů.— O<ń$>ůd3  œď~wôůaîťď~ź˙ţ Ŕ-ˇÜ„‹/ž=ô0śo߉ělnżý˸䒥čěěğţô6n܄DBČÓq÷ÝßBYY[–$Ixë­ˇńŢ{ËŃŘ؈DBDAAA˛˝ŽAiiiĆ×˝úęŤpóÍ7ŕ‘GĂćÍ[ Š"f͚‰o~óŽ´ç¨ŰűÜs/bóćÍđxú`ľZPVV†K/ýÎ;ď\h4éo§[ślĹSOý {÷îƒÁ Çe—]ŠŻ|ĺ6,Xp6{Ě˙ýß˝¸č˘ Řďë×oŔëŻ/ĂŢ˝űX›Í{:nšĺFvŸŽśÍS÷Áźy§ă?ř|đ÷Řşu;ŒFć͛‹;ďźůůůĂ˙ý߯Ąśv2yäq´´´ŔéĚĆœŰo˙ňˆÇăHmĘ)Óńä“fóűýxůĺWńß˙~ŒŽ.%ĎTEEžřĹ+pŃE€çů#ŢćUŤ>Ć=÷ü8íy/˝ô2^zée|éKˇŕk_űŸĂŽÓ+Żź†>Z…îîn’’R\tŃů¸ňĘ+ŇÚ>u?ýú׿@NNüOhh8ƒAĹ‹ă˙÷Ž´s\’$üűßď°ă7 ĂfłbʔZ|ń‹WbţüyôaA!„BÁBŽ˝+ޏ O?ý dY†$IXż~.˝ô #>ţ7ŢÄ<˜v_0˜ŔΝť°sç.Ź_ż>řpřřăŐ¸÷ŢűFŮăcąÖŽ]ľk×ăĆoŔ7žńżěoO<ń$ţţ÷çҖßŐՍwß}+W~ˆŸüäG¸đÂóqÎ9‹đŕƒżG$Ź^˝&-łví:vű´ÓN…ÓéD,Ăwżű}|ňɖ´ĺ766˘ąą˗ŻÄO<ŽěěěaŰ˝iÓ'řčŁU‡ÝŸ/źđ"üĎi÷uvv˘łł}´ _ţň­lÝ1ä IDAT¸ăŽŻ{^<Çüďžű>ťŻŽŽßůÎ÷ńČ#` XŰÚÚpűí˙ż?ŔˇbĹhkëS^ŸÎÎN|ýë߀Çӗü˝ żüĺ°ŮlxđÁߣ§§7%`ąűö}/żü˛˛˛ IîšçGX˝zmÚ2›››ŃÜ܌ˇßţ7~ó›_áŒ3ć{Ý`0€o~ó;hnnf÷­^˝ťw×áĹŸcm°mŰvÜ}÷÷X;€Çӏ§ŰśmÇż˙ý}ô!\˝z îšçǐ$ ‡ń÷ż?Ż×7â>ČtĚuvvâ7ŢĊ+ńĐCżĂŒ§ó6÷űƒ¸óÎťĐÝíDŁQź˙ţ |ňÉfüýďO#77wŘsvďލżü寏­ťşşńěłĎc׎ÝxüńG†LFËĺráßř6şşşÓŻG}}=Ţzëm<öŘĂ,ŕ3Öm>mmmřĆ7ž=,ůž={°gĎŹXń}ôĄ´ŕŠjßžý¸˙ţ_"BĄ–-űšššđÇ?>Ęޟîťď~ŹXńAÚsűúúąfÍ:ŹYłwÝu'nşéFú  „B9‰PÎr\p:ČÎv¤>F"IţřÇÁŘôéÓpĎ=ßĂWžrë¤)ĽsîvťńłŸýœb,3Î;ď\TWWłeźřâKŘącgňškÓ:Ĺ%%%8˙ü%p8ě,`ńë_˙.— &“ gu&{ěš5ƒÁ—H$‚-[śąß/źđBŔ“O>Í1ƒ×\s5Žšćj8JÇżľľż˙ýCˇýŁVAŁŃ`ňäÉi#C†vF˙ô§ż°ßĎ>{!žůÍŻă´ÓNe÷ýýďĎĄłł3cÇsůň•˜5k&&Mš”śĎŸ~úöűţđpZ ڞ˛óçĎĹţýűŃÔÔtÄíżrĺ‡čď÷"??Ý'Ë2~đƒĄ§§šš9i#.úúúąbĹJŔňĺ+Y FŤŐâꍯÂ]w݉’’Ö^>ř‡ŒŻť|ůJ¸Ýn̛w: Gô÷{ąlŮ?Ůzüâżf˜ššÜuםiÁÂ-[śâý÷—§´Ô@ ̚5Ó§OĂoź™q=Ö­[Ÿv̝wŢš¸ő֛Ů1 …đӟއX,vĚŰźžžńx×^{ ćÍ;=-ؔzžĽúřă5¨ŹŹÄő×_‡ĘĘJv˙Ö­Űđďż3ć÷Ÿţô~vîó<łÎ:3mvě؉_|ůˆˇšŹŹ 7ß<<ĚÍ7ߔqT\Ş{ďý Ĩë”:Ęh÷î:<ôĐŁŸűÜs/ŔjľŕŒ3ćÁl6Ľí§-[ś˛€Mj ć ĎÇO~ňC,]zqJ îŻđů|ôAA!„rĄ‘1ä¸a2™ŮČŸĎ?âăÓ:ŽW\q9`Ú´Š‡Ă(++CiŠŇ÷Ý÷10 Tdýë_PQQI’pűíw`Ϟ=ŕyë×oŔŒ§ŕŐW_cË...ĆóĎ?ŁŃˆÎÎ.\ýMˆD"ˆFŁřç?ßġžu.¸ŕ|Ź\ů!`ďŢ˝čííENN6mú„už -: Ńh˙ú׿Řňż˙ýďbéҋ(ŁƒŽżţ&tńűý°ŮliŰnłYńÇ?>ĆŚIebłŮđÇ?>ŠŽŽnD"aśo–,9—^z% 0ěۡ………Ă]?üá÷qůĺ—~ôٟ°‘8őő{’măÆ ƒŐfÎ:ëLüöˇ€ă8Ź_żwßý˝#n{N‡gŸý**ʇv¸óÎ;pë­7ĂĺrᦛžÄ‚jÍÍ­€9sfăŃGBww7ěv;Î:kA2Ŕ—ƒŸýěçŹăžir‡§Ÿ~ĺ‡Ă¸ţú›X0 žžžíŤŸ˙ü>tuuĂíîĆŇĽĂjľ˛ L{{{˛S݀ĽK‘œ×7lýŕąÇţ„_|iŘöżňĘŤěöŇĽăŢ{•)5_ţň­¸îşŃŐՍîn76nÜÄśďXľš řóŸ˙ˆ ”ŕŢ=÷üŤV­ü÷ż#Kś]ZZЧžzz˝áp×^{›šł|ůĘCŽjÉΝť°gĎöű~đ]v>ňČăxůĺW(Óżüĺ[h›Ď>{žţőŻaŐŞŃÚŞ77Üp=žţőŻy~÷ť‡°lŮ?ďżżwÝu'˛˛˛Ňž_\\ŒgŸ}&“ 4â替Ä*6Ő×ďÁœ9§˛ŠXŞ›nşŐŐUřÂ.ÁěŮłí@YY);ć!„Bc9ŚBĄvŰnĎńqVŤ&L@KK ŕxŻżţOLž< 55“0wî\TUUŚt¨v˛ŰUUU¨¨( |ËýłŸÝ‹X,ޞ˛R6ňb׎ş”@ÍF@aaŚOŸĘFľěÜš 0ţ<ŘíYđz}ek׎Ăe—]š6JfѢł`2™°gĎ^€Ÿ˙ü—i9gRƒ"MM1s㌴űĎ;ďźCbŔl6cÖŹ™đů|Řšs^xáEtušąuëś´ÇĹ㉌Ď_źřvűŒ3ćł`L,C,CkŤ+mÔÇĹ_ĚŚ[̟?ĽĽĽpš\GÔö•••Ź]Î:돴`̒%‹Y ˘˘{÷îeëšššČÍÍE{{;ęë÷â駟AggÖŻ_?d{ăĂ^ˇ˘˘‚˝ŽŃhÄŹY3ńŢ{Ę—`p€'SŚÔ˘şş ;wîÂűď/Ggg7öł@Lęú8p í5žđ…ĽěöUW]™1łsçnvűwŢĹ;;q?54ČŒ9š6Ÿ˙ü%,ÇQ_żgXn—ůóçąéKŐŐUČÍÍaAŤ`P (×ÔÔ@ŤŐ˛ăóÖ[oĂĉ1iŇDL™2iŁś!„Bc9f<úúúŮďŠÓU2š˙ţ˙Ï|/ë ť\.¸\.Ź\ů!üϘ3çTüęW?‡Ífƒ×ëOYnzţ‹ĄS}˘ŃhZ^‚‚ôőČĎ/`ˇűű•őK– vĚÔ`̆ Řc/źPIŇęőzG˝O2˘,ŁzîSOý Ď?˙bZŽœŃ2›Íƒoí°ż´ß‡vűctşÁׄôٓZmę߆—6D"¸ďžűąjŐj6ę`´L&cúbĘöŚ.jŐŞńŰßţ.mÄËH|žÁýc0Ňr˙dęT=ć}L„Žy›ŰléÇTNNNÚď~ż˙ˆž“:}íH¤ž§fł)í8t8p8Çô8Ë:Y,ƒŰ——7äąžĂ_Z­nŘńUP˙ř‡xđÁß# AEěÝť{÷îĹ[o˝ žçqőŐWą t„B!„‚1„3˙úכŹ#ÍóüaŤ‡ÔÔLÂŤŻžˆíŰw`ëÖmŘż?vďŽc˘Í›ˇŕ/y ß˙ţw`ˇNMéîîI[NccPZZ‡Ă˝^ƒÁŔ:Ç]]î´ÇwwwĽuU\p ĆlŰśÍÍ-ěđělN?ý46aŊw‡M9Z。œUŚây—\˛łgĎÂäÉ5¸îşŁO:tşDggjk'łßSG‹Œ‡ßýî!ü÷ż'ƒV\yĺ˜<šąX?ýé}G˝üśś6Ü{ď`ž–šsOĂ9眍‰'âá‡ĹŽ]ťGě€G" °ŔBŚźCšř%Î>{Ѹľy[[GÚďCŰ/Óńy¨çŘlc›N“zž „Ňö›ÇăAccĘĘʐŸŸŽă>őă<Ó:ƒAqťÝC›5ć×šč˘ °pálÜř vî܅}űöĄž~˘Ń($IÂŤŻž†SN™ŽsĎ=‡>,!„B(CČŃëëëĂoź…gžy–Ýwć™ó3VpQšÝn|üńj¸\íčëóŕ˙ţď^h4$ ÜqÇ×QW§L3RɞrĘ)XˇnC2ř҈ƒ›YΘ_üâ×,'Äľ×^ƒťďţfÚT¤5kÖâk_ű* şşşÓŚ0rĘtv{úôi(..F{{; ^ye0ď̒%K؈ŽŠŠrFV]壏ţ‹Ë.ť€2áĎ~ĺĺe¨ŹŹÄěŮł2Ž9œM›6Ľ‰~üă{ǤÍ&L(ĎólŞŇťďž‹sÎYŽă°víşQ9–>ůävű›ßź —\˘L :šD˛ŠśoßÁ1ůůyxä%š˛$IčííöřĄ%ą×Ž]óĎWŚÜ|đÁ‡_cʔZ6˝ćż˙]•ŒůóŸ˙ŁŃˆŞŞJ̘qJĆŕČŃ´šËĺÂÖ­Ű0{ö,$‰´JZFŁ……ÞłzőjÜqÇW ˇŰ 6˛żŠSŐŠkŞ‘’žO镢VŽü€ĺgyᅗYΘ‰'âůçŸÓ6§ŽÓáÖ'Ó:}đÁ‡lR“îjľZL™R;ŚăkßžýŘźy3\ŽvŘíYřöˇżÁŢ/żü*śžĘô/ ĆB!„P0†1zőŐ×đÎ;ď ‘‡Mϰُřţ÷ż{ČçK’Œ‡~ ‰„’ ÂăéÒ%‹á÷ŇňUÔÔÔ.žřB<˙ü PŚÜqǝ8óĚ3pŕ@Řă-:‹eÔ`L[[nšĺ6L›66ldëŤÓép啗Ľ­×…žĎ*ĽVÍšč˘ Ň:ˇK—^ĚFŃ<řŕ°˙ŘíYXšňC–\´´´Ż˝öҘöŻÁ082cëÖmřŕƒ˙ ‹ +›îÇSęöžűîű°ŰíhkkÓO>}L–Ż×ŘíŢ^^}rrrđöŰ˙VîÎ8CÉ )SŠ~őŤ°mŰvˆ˘ˆ÷Ţ{?ăk\}őU,óţű+ …P[[‹­[ˇ˛cQ,[öJĆ`ĚŃśůˇžőœzę,¸\íiŁ\Î9gQZ+U__˙˙łwßq9î˙Ç_M!Ąa‡Œc;Ç:˘ĽBĘHdďN!3˛Ň ;2’=‘ŽŽă82˛)*ŠÓ‘yŹCËďtŸn­;ßNgüŢĎÇăztĎ}]Ÿu­w×őšč×o őęŐĺÚľëŠńu2#íĐ××GMMMqĹۊÁ<}ú”Ν;ĺřhD˝zőÁŃ sćĚYŢ˝{ÇéÓgł­§ŸRfCCĹXS‡ć÷ߟӮ][,--TÎÓŮłź~ýšˆˆóYÖ}ťlW˝ŠęŢ˝x‚‚V*őą† ësçNŹRŔ¨NĎdç!„Bń"ś‹WŻ^g ÄłjՊlc1|ŹB…ňŒëŽř/÷ŋ‘ĚŸżˆŕŕĹ p5<8ă 6ĺʕcÖŹŠG_źxÉwßV ÄôîÝKń¸Zss3¨ř.>>žƒ)Ć´ŃŇŇÂËkJś+ :thŸ-ŻĆĆĆJˇđ¸ť Qن¤ŚŚ˛gOëÖmPbtuK2kÖôlW¨Ş}űś¨ŤgŹÚ&1}úL||üĐĐĐŔĐĐ PÚoüxĽŰQââ∈8O5”‰]ěěÚ)”OœčI`` Ô+”ů›š~IéҐ´´4- dęÔéDF^ŚaĂŮҗ,YRi|ˇo߲wď7ěß˙­RŰdemmEŻ^=ďúégVŻ^ŁÄ¨ŠŠ1~üŘlOB*Œ6ŻS§*Tŕ̙Ľ@ŒĄĄ#Gćü´Ą6m,yýú żürFiŒ˜ć͛áŕńt°Ě‘3ĹĆĆś/ĎźřřĚTŒŤ“––Ə?ţ¤ˆiÔ¨!ö˙ä2[[˙yĹŃ˗Ż8rägϞË3OžžłWĽĽĽqüř Ľ@LÆ ţ§ń\ÚľłĹĆŚâýá,Pl3Óä4płB!„`ŒŚĄĄAšrF4kÖ//O6o^Żô¤źôčáĚŞUËąśśÂĐĐMMMJ–,Aƒ pwÁşuŤ)Sڌ"˝ĽĽ7ŽŁS§ŽTŹX---J•ŇĽeË*n Čäć6ŒĽKcaa†>ZZZT¨P{{;ÖŻ_“GŕE9őޘL:::ŹZľœńăÇŇ AôôJĄĽĽEĽJ•čÖ͉-[6ĺx’ŻŞ&Mž`Ţź9ÔŻ_ŸbŊQŚLilm­ \¨t•Ç˙˘J•*Ź[‚­­5zzĽĐŃŃÁÚڊŔŔ…Jî…Áƒ2j”ĆĆĆhiiQž|9ú÷ç¤B™ŠRĽ^‰……şş%)Q˘ŸޘĽKcbb’ăo:wîĂ4jԐâŋSž|9zőę™íŞ/MÍ?/N7n ĐŞUKôőË˘ŠŠ‰ž~YŹ­­X˝z%ÝťwűKÚźX1m–/ÄĚŹ•âˇWy…dĚ7SőęŐYśl ľk×FKK‹Š+0hĐ/^ lš={&ööv”+g„ŚŚ&Ż^˝Ęseccc6oŢŔŕÁ111Ąxńâ+VŒ:uęŕĺĺIpđ ŕ:ŸRćîÝť1vŹ;ŐŞUC[[›âŋ+Ž°ËŤŻoÚ´ž!C)ň¤Ť[’zőę1nÜ‚ƒW(ž˜ô)ÔÔÔđóóaÌi4mÚ=˝RhhhPślLMżÄ×w6>>޲ĂB!„řQSásľ,ď3_Ťgů›9i|˜4?LڀP&99ĺŒTľâ˙“ääd’’’¨RĽŠâł‡âčŘ]ń~͚`ĹUREÉŰۇC‡ž2nĹ Y•ďoştqR J=xđ@Ü܆I# !„Bˆ˙$mm-Sŕ9$ŠŚ´Sz–é}–ż™˙yĚúš^2fŒBŞwďŢ1p  ¤§§cooÇçŸ7ćÝťwěŰw@‘ŽbŊ4hP_*L!„Bˆ˙‡$#„…¨Xąb8:vbٲ@Ćc§żűî°Rš%Jŕă3+Çńc„B!„˙}ŒBˆBÖˇoęŐŤGhčŽ^˝ĆłgĎ?ŒgSž–-ż¤oß^ůT-„B!„řď’1c„B!„B!>(Š1cäy!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$Á!„B!„Bˆ"$ÁQ¤ŇÓÓißޞV­,xóćJż‰ŒźDŸ>°˛˛ĺôé3˙ęňßž}SSs’’’ţöźěŘą“îÝ{I§üyřđ!îîciÓŚ-ÁÁ!…:ď &1cĆŹ\żŸ1cŁGýWŐW~yNLLÄÔԜŘظż4ÉÉÉ̙3ví:0b„ťt䏶/oßžĹŮš7ëÖmřח+4t]ťvçéÓ§˙ĘüOž<˙€żťqă&:9rölÄߖżœÖY''gBC÷i_Úśm;ŚŚć9N9ĺëďäëëĎÔŠÓdŁ“‡śmířîťĂEś.$â˙7MŠQ”΍@]] *pâÄIěííňýÍÔŠÓ033cúôŠÔŹYăÎĂ˝{ńôę՗ĐĐTŠREE(ěÝű 6lb˙ţ˝Ëň—. âĺËWRąb…"]v‹ÍUţS|œg‡Î¸š ŁK—ÎEšýűżĺčŃcřűűPĽJeY‘>˘­­••%őë×űחĽvíÚXZZ˘ŤŤűŸk'CC,--Š\šRĄÍł°×ɢěKĽKëą|ů˛˙ĚţE!Ä?cD‘úţű#´jeJ‰%ůţűďó Ć$''óüůď´oߖ ęKŠ˙´¤¤G˜š~IŁF ‹|ŮEŔř/ĺ9)é5kÖ U+SéÄ9PWWgôč‘˙‰˛|ţyc>˙źń˛Ę•+Çäɤ/} ĄĄAíÚľdBń×íפ DQy÷î'NœÄĚĚ 3Ξ=—çĽŢţţXZÚ0věxĽŰ{§_żAXZÚŕäԃ7+ýöâĹH\\†aiiƒƒCgÖ­Ű@zz:ß}w˜^˝úŕěÜ›Żžžă˛˙řă‚ƒCprrĆŇ҆]8qâ'Ĺ÷ááqrrćřń8;÷ĆŇ҆#ÜILLTšĎáôčŃKKFŽÍŁGňŹ#__ź˝} Y‹˝}'şvíNDÄ9.\¸ČŔ.XYŮ2lŘyň„ŠS§acÓ{űNěŮ–gż˙ř!UúBbâoLž<›öŘŘ´ÇŰۇ/^äšNŞş~ĺ&k_Ru_üý÷GéŮł/Ö >’óç/ú-Ăyí×rŰżd–ĹŰŰ++[:łre0iii*ď/?vţüÚ´iËÁƒ‡>i—Ů""Î1t¨ÖôčŃGi~ޤů”í“*ůĘkżpőę5Ĺ÷=zôáňĺ+ůś]~}R•uI•4ŞOä՟“““Y´(‡ÎXXX3l؈<űƒB‚1B|8đ=EZZ­[›Ňźy3tuKrôčą\Ó{xŒfďŢÝ̚5ƒđđ}rđŕ!ćĎ_DˇnŽlٲ7ˇaŹ_ż‘#GŽ)|Ǎ›HóćMŮľëküü|Řšs‡ÁÖ֚•+ƒX˝z%K–,ČqًrčĐaƏ÷`óć ´nmĘ´i3ůíˇ‡Š4?áčŃŁ,^<ŸM›ÖóęŐkćΝ§řţčŃ˜3gŽŽŘ°a-:udÁ‚ĹůÖÓůó¨TŠ";wnÇŮš›"83{öLvďţmmmć+ҟ=§§ÖÖVlذw÷QěŢĘŇĽËi/^ʁ˜0a<ëօPŚLiśmS>p Y˖-ŰđđÍƍ밲˛`âDOĽ×ǏŸpölóç0aÂ8ĹçǏŸřp˛łŽ€~üńGśoߑcůŇŇŇ3f‹ÄÄD<ymërRţ¤ęúŹęöĽ ůÎŻnňŤ_“ęÔŤWC‡žWZîáĂG°ˇˇG]]ˆˆsxzzaoߞ͛70j”k׎'$d­Ňośműšqăư~ýš\ËłaĂ&Ú´iĂîÝ_3hЖ-[ĄĽ§§3a‚' X°`‹špá˘RĐńc÷ďßÇÝ},5jÔ $dsˆŒźÄňĺŤT^nZZcÇNŕˇß’X´h>‹/ä̙ł\šrľ@ۀüú‚—× RRRذa-ëօŸ  •šŽ“YżT•ßžř—_NăííCçÎlܸŽ.]:3oŢÂB=žÉoż–Óţ%Ӛ5ëhܸß|Šżż/‡&(heö—Y“'OĹĂc4ţ§m܂‹6̕ýűĂĹźysŮ˝{&&&Lž<5Ď —âŸKnSEćűďż§ukSŠŰ% IDATJ”(@›6m8tč={öČ1}ɒ%ŃŇŇúpŇc€hѢFFFTŤV•°°˝\ž|…vílyňä)ďŢ˝ĂĆÚ ĘSĄByÂÂv+îńϜ>zzz9.{ʔIź|ů’˛eËŕâ2˜Í›ˇrăĆM*T(ŻŘůN›6UQžAƒŕííĂű÷ďQSSăëŻwbooG˙ţý¨Ył?fĺĘŕ<ëŠB… tęÔ€ž}ű°jUÇwŔĤ:ŽŽ]řsǜqeH[† ¤XŽšš3gzóŐWƒŃĐĐŕŰo0eĘ$lm­?¤Ć­[ˇHHȸÂć?ţŕëŻwâç7sóŒÝúsăĆMBC÷в嗊2Ϛ5#Űx ŐŤWÇŐŐ€ňĺËcggDž }FŃV&&&ŒĺVč묛ŰPĹ-SŁGâťď­ňmUŞTÁÝ}˖ńüů3>ü-×(€……ǏŸŔÝ}IIIüöŰoôëׇˆˆěí툈8‡ŚŚ&-Z4Ďřɨż˛Jő—iÚ´ŠXYYŕé9‰Î¸u+ŠŚM›dËC~ۗœ—ŤÜnŞô›œÚvŢ<Ž_żIZZšâłźäˇ­ű˜ŞýŠ ëóëׯóÝž4ßůŐÍĽK—ó­ß.]:˛zőƍƒŚŚ&QQŃÄĹĹ1ožż"Ńťw/úôé­hçǏ˛–aĂ\y1bXžˇŸ988(úFϞ= ŰÇůóhÔ¨!—.]ćúő넅í˘RĽŒąX|}gÓĽ‹SžëMXŘ.ʕ+§řŹ}űśüřăO*/7"âwîÜaďŢÝTŹXQĽĺć$żžđŕÁ}ÚľHľjUXąb)ŊËu,ČúU@H^űâ-[śag׎ú+ö‘OŸ>Q\’›§OŸ) Ř ŕęꢨ‚î×>ŢżdjÚ´ Ýşe´Kٲe1€€ů îJńâĹUÚ_ÜşŸq>ܕŽ]ó诪ľAϞÝŰڎˆŒźĚöí;°´´P)MAˇOŞć+ŻýRXŘ>ʖ-ˌÓPWWWKşş˙äúPe]R%Íŋ‘*Oä՟ýő5kš(ę`ňä $''+Ę+„`ŒŮźxń‚Ó§Ď2kÖ ĽƒËýűż%!!ccăÍďŃŁÇěŰ÷-qqqÄÇß'&&†ŞU3kÔ0ÁÚÚ 7ˇQ|ůesš6mB›6m 4࢚š׎]'2ň2ńń÷ˆ˝Kzz:ďŢýůߕRĽt;K}ý˛¤ŚŚ’’’‚śś6ąąątéŇQižÍš5ÍwŮFF†J'{”*Ľ—ĺÄ]‹””?oˆŠŠĆÎŽŇ<žř˘1ŠŠŠÄÄÄ˘ŁŁCJJ 7ʖ—Ě“Ľ{÷âyűö-'z˘Ť[R‘ćՍט˜˜(•9§z,_ŢH齞~Y˘˘˘óŹß~8Îľk7¸?;wb”.ŻUŤŚŇ iůňĺ10Đ'&&FhQ%MVśś6ěŢFˇn=hŐʔŚM›ŇŚeŽůŒŠŠÂĐĐ@i g555>˙ź1ˇnÝĘľ^nݺŝwďčŃŁˇŇü^˝zÍýűżŞÜŁ˘˘hÔ¨ĄR 066ćÖ­(ĹÉsŊĺ˙’őś|ůňYÚT Ŕƒüvďލ;CY¸p ‹ÍĎ5 `iiÁš5ëxüř1çhÔ¨-[~Éôé38s&‚/żlŽtՋ*˛n_2¸ó*G^ŰUŰ-ż~“Sۖ+WNéÇÇ'äť})hžóŤUęˇ]ťśqúô,,2nűkܸ‘˘##/y‰ýű÷+­Ÿ/_žT|–@É;€ŽÜfe˖á͛?y50ĐWšŽŽ 6Č7Ŕ°cÇN˘Łos˙ţ˘˘˘144Tyšąąą*N 3—[Đą×ňë ..ƒ ZÉɓ§hŇä ,,ĚŠWŻî'ďż?E~űâœö‘Í›7Ďwž9 ૯_öÚŻĺ¤N:Jď4¨Çťwď¸˙ľk×RižˇoÇ0xđW”+gDŻ^=˙§c¨Luë*ˇcÆő9qâ„Ęi>ĺXL•|ĺľ_ŠĄQŁJ‰† PŹXąOŽUÖ%UŇäx"ŻţÜłg&Mň¤wďţ|ůe ZślŠiK9ŃB‚1BäîřńIIIaúô™Ěœé d\˛ —ŽçôŸŚÜlÝşľk7ŕčŘsssŞV5fƍJ;ˇšsýšyógĎFpňä)VŽ\żżć*-cňä)ÄÄÄŇĽKgěííŠUŤ&_}5´ŔĺÎ,cnď˙N9eeăĆu”.­|˛ŹĘč âŮłg¸¸ ĂĐĐ[[kĚĚZĄĄĄÁ¸q•ŇĽŚŚeűíÇăP¨’Fů@ZŸíŰ7sîÜy.\ˆd˖mŹZ̚5ÁJQŞ´—ššZžĺ40ĐgíÚŐŮ>ĎzUĐţSĺ˙=}*{~“““yóćľŇÉnnj׎E… ĺ9ţ"çĎ_ eˌÁŒßž}K||<çΝWşź˙ݐßöĽ°Ú­0śÝÖeĘŤxůĺ;żşQĽşşşX[[ńý÷G03kÍŃŁGqs–%¨­›ŰPŹ­Űäpr_ŞĐž,–ŰUNymW##/1nÜD,,ĚhÖŹ)öö¸ví:,PĚŠž {Ôťw/ŹŹŹ8uę‘‘—Řşu;˝{÷däHˇżlý*¨ôôôlő­Ę~­ řŞş_ËI^ű5Uç{˙ţ}ěíí8tč{Ž˙1Ç~]Đ6ȞŻÔĽ)čöаś˝9wĺŐďó[Ž*뒪i cűۤÉěÝĘ/żœ!2ň~~s¨V­˗/ESSNë„řˇ‘kÚD‘8|ř5dűö-lÝş‰­[7ąmŰf,,̲ÝןŸđđCôěé̸qc°ˇˇŁAƒú<~üç8oŢźáúőÔŤW—Áƒ˛bĹ2ĚĚZś÷ĂN/ďů?ţœS§N3eĘd\\ckkž~YĹUUłf .\¸¨ôŮůó ˝nëÔů,Űu—/_ESS“š5kP­ZU´´´˛-űüů?Ç,¨Z՘bŊ‘˜˜HŊÓoż=$-­pďCŽŒźĚÇ ¤wď^˜››ĺxwçÎĽ+‘âăăůý÷ÔŽ]ť@i˛zôč ÷iŐĘw÷lۖ1Đńąc?äx@Tˇn]?~ÂŻż*_ÍrĺĘU>űěł\ËřŮgŸńűď/ĐÖÖVŞĎ;wb t)qÝşušzőşŇ˝ŕOŸ>%!!Ď>ŤýˇŽÓŋ—ŕŐŤ×Jő˙ńŔŇ+VSŽ\yć͛Ă…‹xřđažó577çŇĽË\źIŤV­ĐÔÔäË/[đý÷GILL¤uëVi@!żí‹Şí–_żÉŠm“’’ءożâ?Ţ::Ĺyüř‰ŇIeÖy桭+Šţ¤Ęöĺcůĺ;żşQu˝ěÔŠ#?˙ü çΝçőë7ŘŘX+žŤ_ż‰‰•Öϡoßńüůď…zšż‰‰ II”ŠMIIáƍ›šţćŘąăÔŞU_ßŮtíęH‹Íyńâe–[ŤV-?~˘4hřü‘çr?%Đtőę5 pvż/cÌbçÎÝšŽ“…ą~}J\˝z]éłK—.ů~-ˇíÓőë×?ęÇWĐŃŃÁظŠĘűK++ f͚Aż~}ńő“ç€ŽŞśÁľk×>:ޏB­ZľTNSĐíSaôZľjqőę5ĽŤ†Ž]ťžçŐIů-W•uI•4Ÿz<ńą¸¸ťź}ű;ťvL™2‰+‚¸té2ŃѡĺdC Ć‘]RR—.]Ś_ż>Ô¨a˘4 2˜ű÷ďčązőŞœ:ušŤWŻG@ŔâăăßßşĹĐĄn„†î!>>ž“'ćʕŤÔŹ™q€ ŻŻşş:çΝW4-“žžúúe ?HLL,WŻ^cʔi>@ďۡGŽcăĆÍÄĆĆqđŕ!Ĺr Ó A8|ř›6m!&&–ăÇO°pá"şusBOO%Jŕč؅  •;vœ˜˜X‚ƒC”J”(AŸ>˝X°`GŽ#66ŽožŮÇر㉌,܃ÖjŐŞ’žžNhčîÝËhŸŹO‡É¤ŠŠÉ̙ŢÜźy‹ .2mÚ,ęŐŤÇ_|^ 4YíŰ÷-ŁFćÔŠ_ˆgďŢoxţüwjÔ¨dܲńěŮsŽ_żÁÓ§OiŇä 7nÄÔŠ3¸pá"Ńѡńó›Ëoż%Ňłg÷\ËŘ´i4¨ĎĉS8wî<ˇoß!00/Żüţűď*ו““#Ż_żÂŰۇ¨¨h"#/áééEíÚľó Jäćĺ˗ܾ}GiúÔ§‰d^ >wî<˘ŁosäČ1ślٞ-řś—É“'`eeIłfMńő“ç-,Ěřá‡M€Ö­[ąsç.ęׯ§¸,='††F\šr{÷â?šćˇ}Q…*ý&kŰŢşĹŋ‘xyÍ`ßžŠŰ°š5kJXŘ^Ž˙‘ë×oŕăă§4€r~Űşżş?en;ňŰž|,ż|çW7ŞŽ—Íš5ĽL™2,Y˛ [[ĽŤŇČ޽߰yóVbbbůůçSŒ?‰={öęöŽeË/111aÚ´™\şt™¨¨h||ü”LΊĆĹĹńÓO'‰g÷îPÂĂĂ ´Ü-šSťvmŚM›Idä%nŢźĹ̙ŢčččZŮţřă<<Ćłpáââîrőę5>B͚5s]'ó[żJ–,ŠPdŢ.V˛¤.ˇoÇäű4ÂÜôéӋđđƒěÜš‹¸¸ť9rŒÝťĂţçňg͗*űľ÷/™˘˘˘ YKLL,GŽcĺĘ`œœş˘ŁŁŁňţ2óřdäČá4lXŸÉ“§*=}ëSśqűöŕťďÇƍ›9vě8}űöV9MAˇO…ąíurrä÷ß_0{ś/Ńѡ‰ˆ8ÇŇĽAyöűü–ŤĘş¤JšO=žřŘüů ńňšÁőë7ˆ‰‰eçÎÝ/^œŠ+Č ‡Œ"ťŁGĄŁŁ“ăÁ~ýúő¨\šr‚S§zRľjÜÝÇâá1##CĚĚZ){{Ďä›ožĽ˙Á̟ż;;;†Ď”QWW—qăưzőF“ăAMPĐR0dˆ+ţţôě錞^Š•ŰĆŚ 3fxqŕŔA rQ rYŘLM[ŕĎącÇ2ĕĽK—Ń˝{7<‘áSŐŹY??öěŮË A.lßžƒ‘#łŽ÷ůçiÖŹ)ă™4i ĆƕY´hžRPL•4ŽşvudѢ@úőÄŽ]{˜:u˛˘oš™ľŚ];[ÜÝDzjUęęę,^ź€:u>cÚ´ >’‡#8xeގ5eíC‹/ nÝ:̚5—Ą\šr••+ƒ”îϏĄĄ!ŤWŻâŋŒáΔ)^T­jLPВOş}ě̙ Ź4­_żé“ÚŃČȈٳgqĺĘ5\]‡óíˇß* „Œ]ýüćЧOoĹ“&M :::ĎÇo7k֔ˇoßѲeKĽ>ţňĺ+Ř&šńđÍĺËWčßPśGŰÖöEĽŤ ý&kێ9/ŻéTŻ^ŔŔ?Ÿňâć6”ć͛1{śSŚxńů獕ĆÉo[÷W÷§‚l_>Vć•ďüęFŐőRMMÎ;r÷î]:wî˜mť9oŢŽ?ńa;?k&M_¨Ű;MMM–-[Œž~Yƍ›ČčŃcŠ_żMš|‘ëoşus˘Ggüüćŕę:œë×o0`@ż-WCCƒŔŔ…T­Z… &ăá1ž–-żĚqĐęOĽŤŤËŠA$$$0tčpƍ›€‘‘!~šŽ“ů­_zzzôęՓ… —(côăřńăřřř}R>ۡo‹§çDvíÚĂŔCŘ˝;Ti˙řОćK•ýÚÇű—ŹóIJz„‹ËP–, ÄŃŃw÷Ú_fÝöřůůššŞôőSˇq&x°oß~ r!<ü;f̘–íö˘źŇtűTŰފ+˛lŮ>LÂŐu8óç/bôčQyżĺˇ\UÖ%UŇ|ęńÄÇüý}¨\š“'OaČWâââXştąâa˗ŻÂÉŠ‡œ|ń/ĄŚÂçjYŢgžVĎň7sŇř0i~˜´- LrrĘŠj!„Ş|}ýyóć sçú˙Oi„â’˘x2`ŚQŁĆPťvíB ˆ‚ˇAdä%FŒpçرÊŤqţNNÎôë×gçî˙˜şJLLÄÉŠۡoĄF “ON#ţ“&yb``ř—üóOˆ˙o´ľľLç@  ¤~˜Ň>LéYŚ÷YţfFÂłžćŁ×€\#„Bń—taţüEÄĆĆĎćÍ[‰Œź„••…TPřîťĂôěٗ'~"11‘ .˛térš5kúˇb„ř+Ü˝Šé—RBüKȰŰB!„---ź˝g°zuŁFćőë7TŻ^_ßŮyŢŞ$ Oťvś<|ř•+W“˜˜ˆŽnIZľjĹčŃ#ĽrÄJZZ>¤yófRBüKČmJB!„B!„ČmJB!„B!„˙1ŒB!„B!„(BŒB!„B!„(BŒ˙9oßžĹŮš7ëÖm(´y†‡ÄÎÎá1Ÿäädć̙Gťv1ÂýoŻďmŰścjjžăŔ455'66Qó€ŒÇaO:MV!„B!ÄßJžŚ$ţőf̘…††ŢŢ3ĐÖÖĆĘʒúőëý'Ëť˙ˇ=z ŞTŠüČSéŇz,_žě/kS!„B!„ř/‘`ŒřĎQWW˙O?˛2)é5kÖ U+ÓLž444¨]ť–t>!„B!„PĺźUŞ@''gBC÷ŕí탕•-Yš2˜´´4EšÄÄDź˝}°ˇďD›6mńđO\Ü]Ĺ÷žžţx{ű0gÎ<Ú´iˎ;éŢ˝GŽăĐĄď155çôé3JËËwńŘŘ´ÇÁĄ3ţţźxńBąÜœn155ççŸOĺZŚÂé×o––689ő`ăĆÍJe155çŕÁCôěٗöííłý>.î.ŚŚć\˝zMéó7ÓŠ“#éééJŸ'%%ajjÎćÍ[šzőŚŚćřű(ĘťqăfFŽ™™ˇoßŕäɟ8ĐĺCŮ°a“Ň|3ë4$d-ööčÚľ;ç¸pá"ş`ee˰a#xđŕAĄö‡K—.3jÔllÚcg瀟ß\^˝zk›œ?žţýciiCŻ^ý8{6Bń]Nˇ€]ź‰ŠŠ9oŢźQú|ǎŘŮ9`cÓ/Żé<}úTVR!„B!„cÄϚ5ëhܸß|Šżż/‡&(h%iiiŒ3ž¤¤G̟Ŕš5ÁhjjâééĽ4ăÇOPştiÖŽ]˝}Ö­[M“&_ТE3ÂĂ÷ŃźyłlË}ňä nn#ŃŐŐeĺĘ ||źšs'†‰=?š,bţüEtëćȖ-qsĆúő9rä˜RşmŰžfܸ1Ź_ż&۞>}ڰ7“ŤŤ ŽŽ.ŮŇVŠR…°°]”+WNńYűömůńǟ(SŚLŽm:mÚTŹŹ,đôœDçÎNÜşEÓŚMTnť÷ďßăă㍶ś6ţţłqvîÍŋ‘9ó„B!„˘°I0F™:uę(˝oĐ ďŢ˝ăţýÔŽ] 555~řá8׎Ýŕţýî܉2ž”ŠbĹň^nTT5Tbʕ+§ ř=fßžo‰‹‹#>ţ>111T­ZU)MĽJ•ňœGťvm â—_NciiÁÁƒ‡řüóĆ8?•*Uř¨ÜŃŘŮľSúě‹/“ššJLL,Mš|€‘‘Ąâ{uuu444(UJOń™śś))Šy.;§|őőËćš>--;v}›ű÷ĄĄažeĚZ/™°‚^óŮgľČéë—%&&F‚1B!„Bˆ"!ÁQdRSS?z˙çU)Ϟ=ĂĹe††ŘÚZcfÖ Ć›ř?/÷ýű÷…ţ›­[ˇąvíť`nnNŐŞĆlذąŔËŃŐŐĹÚڊC‡cf֚ŁG2jԈ]ŰdßČČKŒ7 3š5kŠ˝}Ž]ťÎ =_9ľcNMű)}D!„B!>•cD‘š~ýşŇű+WŽ ŁŁƒąq~ůĺ >ä믡 ŁŁd >[ęÖ­ËÁƒ‡HOOWŒĂ’””ÄéÓg°ˇď ¸-ęńăÇÔ¨aď€ľáá‡čŮә‘#˙źeęń㧔-Ť_ŕüuęԑI“ŚpćĚYŢ˝KĆÖÖŚPĘ]§Îg\ž|…Ž]Ÿ]ž|MMMjÖŹńˇőƒcǎSŤVM|}g+>űĺ—3˙ó|‹/ÁŤWŻy÷îŊËľŁŁŁINNV\“ŔłgĎŠ]ťśŹ¤B!„Bˆ"!řŠ"MHČZbbb9rä+WăäÔŞUŤJzz:ĄĄ{¸w/ž“'fٲ*Í×ĐЈ;wbš{÷^ގŹ899ňúő+ź˝}¸u+Š‹#ńňšÁž}ĐÖÖŚL™2Ô¨QƒĺËWqůňΝ;Ďüů •ćQ˛dI^ż~Ă­[Q¤¤¤P˝zUN:ÍՍ׈# `ńńńůćőăů4k֔2eĘ„­­"8ôż4h‡aÓŚ-ÄÄÄrüř .\DˇnNŠńbŠBɒ%Œ`Ü˗/Š^˝*qqqüôÓIâăăŮ˝;”đđđľiN5j€şş:sçÎ#:ú6GŽc˖íŮŇéčč0cĆ,n޼Ņ ńňšI˝zőřâ‹ĎřţűŁôîݿП %„B!„™$#ŠĚ€ýHJz„‹ËP–, ÄŃŃw÷Œ[rjÖŹŸŸ{öěeĐ śoßÁȑĂUšoßž˝(Y˛áĉ“Ůž744dőęUźxń‚‘#Găĺ5ęŐŤřgŔĹĎo6ZZZŒíA``..C”‚"ŚŚ-iÔ¨!C‡şqýú ŚNő¤jŐ*¸ťĹĂcWËň>óľz–ż™“ƇIóä he’“SÎHU˙˙ćääLż~}pvî.•‘ƒ7sđŕ!víÚ.•!„B!„#mm-Sŕ9$ŠŚ´Sz–é}–ż™ƒQf}ÍGŻ3FˆżURR11ąěÚľ›áÇJ…!„B!Ä˙Œâo´~ý&Ž=J‡čÜš“TˆB!„Bü? ˇ) !„B!„B|Pˇ)ÉžB!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1B!„B!„EH‚1â?!:ú6žžSéĐĄ#66í>|$?ýtň˙u$&&bjjNll\Žif̘ĹčŃc užů)č2˙ žžţL:-×÷˙;vě¤{÷^*—ăŸâŸšŻÝ¸q“N9{6B6˘B!„˘HI0Füë=ŤëpRRR˜8qłgĎÄxV_Ň IDATÄĄ)SŚąeËVŠ öîý†.]œ”>kѢ9ff­‹4…˝ĚœĘ%„* °´´¤rĺJRB!„˘HiJˆłˇoßâëëO‡vxyy*>ˇ°0§^˝:̛ˇ333jÔ0‘ĘĘA—.˙_,Sˆœ”+WŽÉ“'HE!„Bˆ"'WƈľS§NóěŮsÜÝGdűÎŃą ŐŞUăŔƒ„‡ÄÎÎA)Íŋ‘˜ššóćÍĹg'OţĚŔ.XYŮŇŁGvěŘIzz:űm:ŚŚćüüó)Ĺűťwďáá1›ötéâÄ…KxńâEŽĺđőőÇŰۇľŘŰw˘k×îDDœă…‹Šź 6‚(~ăääLhčĽůŒáβe+˛Íßß?€yó’”ôSSsVŹV,7óv’̲EDœcčP7,,ŹéŃŁĘł >ĽŹ/óÔŠ_:Ô KKzőęGDÄ9ĽßěŮF÷î˝07oC÷î˝8qâ§<˕˜˜ˆˇˇööhÓŚ-㉋ťŤrżJNNfѢ@:caaͰa#ňüýüAppNNÎXZÚ0p ‹"™}ĎÉəăÇOŕěÜKKFŒp'11Q‘&55•ĺËWáŕЙ6mÚ°€ÔÔÔ­çĎ_ M›śŠ6{˙ţ=[ˇnĂÉŠÖÖípuÎ/żœ.Pűeö3ooŹŹlqpčĚʕÁ¤ĽĽĺ›Ÿ;vbg瀍M{źźŚóôéSĽůnܸ™‘#GcffĹíŰwˆ‹ťŤČžžsů9|ř––6ź}űV1Ÿ>}ĐŁGĹűwďŢaiiÑ#Ç>ô…ߘkÖăççĂĺËW˜8Ń3ßéJ•*˛sçvœť)‚3łgĎd÷îŻŃÖÖ& `ţ'ŐŠ‡Çh\]]PWW'<|C† Ě5í‚‹6̕ýűĂĹźysŮ˝{&&&Lž}€={ö˛~ýʖ-›cÚ/^PştŠ\缧WŠ/^Şźě 6Ńťw/úôé @ľjUyüř1!!k6ĚUĽy„…}CĽJ•™>Ý uőŒxçěŮ3éŰwŃѡůěłÚ9ţŽB… tęÔ€ž}ű°jUÇwŔĤ:qĽO@ŔźOŞÓ’%Kb` ĄĄyŚíŮł;-Z4 cG"#/ł}ű,-- ­ŹssJŁF =zß}w˜¨¨h>˙ź1żţú+zzĽ°°0CGG‡Ž]iŰÖ]]]€Ëľ~}ššš/^€^˝z2z´ϟ?§L™2ůćç×_PłŚ‰"O“'O 99YQƏM™2‰—/_*úŠ‹Ë`6oŢʍ7ŠPĄ<iiiL›6•%J0hĐź˝}x˙ţ=oŢźáŰo0eĘ$lm­¨YsˇnÝ"!áAžů˝u+Šqă&0|¸+]ť:Wë|ýőNüüfcnnŔ€ýšqă&ĄĄ{hŮňK•ŰŻiÓ&të–1.Oٲe1€€ů ㏽˙o´ľľđ÷Ÿłso.^Œ¤yóf888Đšs'Ĺo6oŢJ‰%˜={‚ƒséÜىӧĎ`nnĆ_|Ι3´n݊łgĎѴ餼ĽqŽÎ;qúôYš4ů‚RĽ2ś ܧ]ťTŤV€+–RŹXą\ë˛ző긺şPž|yěěě¸páƒäíۡ„†îaâÄqŠvŞUŤ&QQQÄÇߗˇB!„`ŒřwJLLTb2Ţ˙ĆŠSż(‚ك-zDEEç:ż/^˘§WJĺĺGF^"2ňű÷ďW|öęŐk^žT-¨sëÖ-nܸAűööJ'Ś'†żć 022TźVWWGCCƒRĽţźâG[[‹””Ôżź ęÖ­ŤôžaĂúœ8q˘PËúąňĺË+^ëëë(nłľľa÷î0şuëAŤVŚ4mڔ6m,󜟚š?üpœk×np˙~wîÄ(Ýn’w@Ş“&yŇťwžü˛-[śŔÔ´ežËťví:‘‘—‰żGlě]ŇÓÓy÷î"MŠRşŠ@LF9˒ššJJJ ńń ¤¤¤Đ¸q#Ľů6kÖ4ß`ĚíŰ1 üĺĘŃŤWOĹç÷îĹóöí[&NôDWˇ¤R611)PűŐŠSGi™ ÔăÝťwÜż˙€Úľk嘯Ď>Ť­ÄTŠR}ý˛ÄÄÄ(‚1•*UPúMTT5Tb2‚msëVććfXX˜ś€sçÎŃŹY3RSSÁ˜3gÎŇ­›Łâ÷..ƒ ZÉɓ§hŇä‹ăIŐÍŁ/)˝××/ŤŘĆdÖiNí$Á!„B!ÁńŻUştiJ”(Ą4†KĽJ•ňÔaűöŻyńâzzzźxń‚°°o°łkGŊšpá"­Z™ćúűĚĎ?Ú¸š ĹÚşMś´ĽJ•RĘWn󰲲ŔĂcLśĎUš*ăďöń8%ů[ňW—U__ŸíŰ7sîÜy.\ˆd˖mŹZ̚5ÁTŹX1[úgϞáâ2 CClm­13k…††ăĆMTy™Mš|ÁŢ˝ĄüňË"#/áç7‡jŐŞą|ůR45ło6'OžBLL,]ştĆŢޞZľjňŐWC˙ç˛çĐľ˛š˙>ööv:ô=Ǐ˙˜­ďnܸŽŇĽ•oăËěPĽý˛÷‰´OĘűű| ”×÷jjjňkI``IIIœ?gçî@ĆSľ’’’ˆWşŠŤwď^XYYqęÔ)"#/ąuëvz÷îÉȑnnĚ[ʞ֐cŸB!„"/2fŒřG)Q˘ţ”/_Ž’%Kŕî>‚ŚM›äšŢĚŹeʔfůňU@ƕ2‰‰żáĺ5“ĐĐ=ÜťwŽ3ţë_źx ^˝z­tľBÖqęׯGbâC*Vʍ˜Ţž}ÇóçżŁŽŽŽ¸%ăńăÇšÎăłĎ>ă×_ŁB… Šy”,Y’ťw良ĽUhuĽŁSœÇŸ((ţúëŻůžĚćçÚľkJď/_žB­Zš]ýđחőŃŁG$$ܧU+SÜÝG°mŰ&ŇÓÓ9vě‡Ëy™‡HďŢ˝077+đ@¸qqwyűö-vví˜2e+VqéŇe˘ŁogKűüůsN:͔)“qqŒ­­5úúeyóć•—W­ZU´´´8ţ‚ŇççϟĎ÷ˇVV̚5ƒ~ýúâë;G1ĐpŐŞĆ+VŒÄÄDĽţüŰoIKK/Pű]ż~]i™WŽ\AGGcă*šć+::ZéJ¤„„ž={NíÚš_-Uˇn]Ž^˝Ž4ŽĚÓ§OIHHP\ĽSąbELLL8pŕ ÉÉÉÔ­[‡şu됞žÎţý011QpÓŇҸző††8;wÇßߗ1cFąsçîOę‹UŞTFSS“ŤW•ëăҼ˲ńB!„"˙Î˙8_~ق}űÂT Hč0cĆ4&OžĘ“'qpp yófěۡŸ›7o2r¤5kÖ QٍŤŤ3wî<úöíĂ˝{ńlٲ]i~ƒdâDOŒŒ 13kMbb"‹ŇŹYSŚOŸJ™2e¨QŁ˗Żb„b$''łeËVĽytë֕={ÂđńńŁgĎ¤ŚŚ˛†‡ą}{á ôŮŹYSÂÂöR§Îg”+WŽÝťC•ž2S˛dIʼn´‘‘!<{öœë×oPąbĹí@۷FÔŠó?ýt’cǎ3oޜçYeݡď[ÂÂö2mÚTŒŤqŽçϧFŒvý¸\ŐŞU%==ĐĐ=XXXŸí S%Kę}‡„„Œł˝Ÿ?!ŠŠŠxxŒAGG‡]ťB)^ź8+VȖ?===ôőË~###ŢźyCppHŽăËä¤D‰8:v!(h%zzĽŠ^˝GŽýŃÎóˇ™Ë9r8ŃŃQLž<• Ö ŤŤKŸ>˝X°`ŠŠiÔŹYƒ+WްxńRŚL™LŊTnż¨¨hBBÖbkkCll+Wăäԝ|ÖÍY <ˆ7oŢD˝zőřâ‹Ďsý““#ťw‡âííCż~}yóć +WSťvmZˇnĽHgiiΎ;iÝş•˘üŚŚ-ŮšsNN]éţřă<<ĆÓśm[z÷îÉŤWŻ8|ř5kÖü¤žXŞT):uęČňĺ+(^\ccc~úé$—/_ĄD‰’˛ńB!„*“+cÄżžŠiKVŻ^‰şş:óç/`îÜy”,™16GÖą!ŒŒŒ˜={WŽ\ĂŐu8ß~ű-cÌĘ6Żyóćpüř † qĹß.66ÖLš4^‘ĆĎo6ZZZŒíA``..C”1544$$$˜—/_âî>†1cĆQ˛dI–/,ÔŰÜ܆Ҽy3fĎöcĘ/>˙ź1 6P ôęՓ… —°gĎ^ĚĚZÓŽ-îîcYľ*$×ůN˜ŕÁž}ű4ȅđđď˜1cć9Îł(Ę:hĐşvudѢ@úőÄŽ]{˜:u˛âäüărŐŹY??öěŮË A.lßžƒ‘#‡+Íłk×.üńÇ ô)))ŮŢűűűPšr%&OžÂ!ŽÄĹĹątéâ’VWW'(h) >ô™zöt.ĐXEńÄŤnݜX´h1..Cyöě9ƒT}cŽŽŽŸŸŠŠŠŠ‡J˙ţ} aŕŔ!lŢź‰Ç)žś¤jű Џ¤¤G¸¸ eɒ@s|œ|V-Z4§YłŚxxŒgҤ)WfѢyyŠ Y˝z/^ź`ÄwŚLń˘jUc‚‚–(ÝdiiÁ‹/iŮňĎq|ZľjĹ˗Ż}@WW—+‚HHH`čĐáŒ7##Cü>š?N˜ŕAťví˜Ď!Ž$$$Đż_Ů !„BˆQSásľ,ď3_Ťgů›9i|˜4?LڀP&99ĺŒTľ(jĄĄ{ذa[ślĚő*ń§ÄÄDœœz°}űjÔ0‘ 899ÓŻ_ĹŘ,˙ß˝˙ž´´4Ľ`Őşu8qâ$›7Ż— B!„řĐÖÖ2ž)@2úaJű0Ľg™Ţgů›9bÖ×|ôŰ”Ęłsw9BŞ9sćq˙ţ}FŽtC_ż,7oFąk×nzöě!•#„B!T&Á!„BE#F #8x 3fĚâɓ§Ńłg† $•#„B!T&ˇ) !ţŻ˝űŻůzŕ8ţND* ‚Z)ĽśQIDBcS5B5ŞZťF+öŽ=bľ R?ZUUŤö,ETS4j†DĆďr››Ü$7Dšęçő<ßçŢű˝çž{ž+žűqÎůŠˆˆˆˆˆČ™1LIřŠˆˆˆˆˆˆˆd"…1""""""""™HaŒˆˆˆˆˆˆˆH&R#"""""""’‰ƈˆˆˆˆˆˆˆd"…1""""""""™HaŒˆˆˆˆˆˆˆH&R#˙j§OŸÁĹĹŐäňĂ{2ä;FŽü˜ž}űŽ‹‹+żţzńšlĎÇiٲ- .ÖÁÍdÁÁëyë­Üźy3KŐ%"""""/+íyLœ8ŽÂ… ­+\Ř)CęŽ^ý "##3e;Ź­­ŠSǝ×^+§ƒšÉJ—.ťť;šsçÎRu‰ˆˆˆˆČ‹GaŒźJ”(AńâŞKÝM›úfÚvXZZҡooĐ@ĺʕ¨\šR–ŤKDDDDD^<Ś$/ź0gÎ<üüZâîîI§N]Ůľë{Ł2ë×o E‹6¸şzТEŁ÷Ç2|řˆdőĆĆĆҸqSžřb™ŃúcǎăââĘŋ—’}fřđôď?Ŕh]tt4őęyą~ýüüZźŢđţýű÷?~5Ć˲!C†qéŇeBCˇăîîÉÇ ĺŰľëHŤVí ŻŁ˘˘pw÷dűö&÷Oxx8ŁFĆŰť ő hÔöŔŔąŽeɒĽxyyăééĹ|h4ǜ2I™ű™Ýť S§ŽÔŠSV­Úązőâââ ďűůľdɒĽôîݗڵëđË/ç ĂÉž˙~7Ýşő¤nÝŒů1÷îÝcҤ)x{7ĄQŁĆ,]şÜPOHČ6ôI´_ţ`ȐaxzzáééŨQŁšsçŽáýŸ>L׎=pw÷ÄÇǗ… ڕ´Žřřx–-[ŽŸ_+ÜÝ=éŘą ;w~g´~~-Yˇ.˜#FRˇn7nĘʕŤĚ>OEDDDDDaŒČS‹ŽŽfÓŚÍ,_ž‚7n|„S§NłiS°Ąý<_ߡřć›í´mۆ*U*óÓOűyóÍZěŰw€jŐŞÇţýđőmÂŢ˝ű¨ZľŠÉúłeËƢE󰲲"WŽ\Oöekúö ŕÖ­[ä˗€ěŮł3tč`˛eËŔG YłüüóaŢxăułË$•Ög/ţ‚śmŰĐŽ][Š/ßţÉźy čŃŁ––ód|}›$ŤßĎď-Ă\B^^őŮ´iłĄŽzőę2wî|NŸ>mrHŃŐŤżŃ A'Ăđˇ™3?'GŽDDÜ$** OĎş*TB… ˛aĂ:“ç̃X˝z-öÇËŤ>ÎÎĽżĆâĹKŠSÇÝPÖÇLJ ęĐşu+6lŘĚÁƒ‡¨XąÂ3§"""""˘0F$Eááᆠćńë?ŘłçGš4iœęç’Nŕ›đ#Ŕ‚'NrřđQÂÂ.ó믗ˆ‹‹#**ęɏrOÖ­Ű@óć­¨U˅jŐŞááánV{‹+FŊŘş5”W_-Ă?ě!:ú Ô7YŢŇŇoďFlÝú mŰśáöíŰěÝťiÓ&›,ć̢˘˘hŐŞ­Ńú{÷îóŰożŕćV› 6pŕŔ^ýubbb aĚO?íŁyóf)nƒ……;w~ˉ§říˇ+œ?xÜC)Á+Ż8€‚ boŸŸ .‚sĘ$•Ög>ÂáĂGřňË/śŕîÝťä͛€Â… ™Źż@FÁOîÜƁTŽ9ˆŽ~dňł]ťv&(hťwďĄjŐ*¸ššRŽ\YJ•*IÝşuđ÷5Ţ ZľŞxxx˜ F._ăáÇT­ZĹh}ĺʕذa#qqq†óľPĄFe^z)‘‘žů<…1")ʛ7/666Fw/Jz—$SR›ŔwȐa\¸đ+M›úâííÍ+Ż8óîťÝ ďçϟŸ•+—rŕŔA:̲e+˜={óçĎÁÉ)í;2ůú6fîÜůôë÷Űś…âé遭­mŞĺ—.]ÎĺËa:tGG‡Ă {űü,X07ŮzęÔqçłĎ‚¸~ý:˘eËlܸ‰ëׯ†ťť›Éş˙úë/şv큃ƒ=őęŐĽvíZd˖•‹‰‰Mö٘˜˜t—Iţ~꟱śśĆßż;uëz$+gާOFjŰś uęÔaϞ=>|„ĺËWŇśmkz÷öÇ‚ńăÇrúôöíŰĎîÝ{˜5k.cǎĆÍÍŐ¨žřřř iĎłž§"""""’uhÎÉRlll˜0a, ŔÖֆ>}zQ­ZŐ§ŽďÖ­[ěŮł—aÆеkgęŐŤKţü/zܸqƒ+W~ŁV-úôéŊ_ǎ;ÍúŽúőëů€}űöłwď>“Ăe+Z´(•+WbǎěŘń-ű`aaa˛l™2e¸}űÖÖÖ899–óç/zS899Q˛dIžţz ŃŃє-ű*eËžJ\\_~ů5%K–L1Đ:|ř(׎]#(č3ÚśmƒŤkm“Ęůóç =‰Â¸}űĽK—NW™ôÖűÚkĺżf´íFqëÖmŁŢO-66–ăÇOŕŕ`O˖-;6~ýŢc͚uDFFrňä)ʕ+Kç͘9s:ľk×bƍÉę*Q˘89sćL67ÍŃŁÇ(]ş´ŮŰńŹçЈˆˆˆˆdę#YNŐŮźyCş>séŇ%Ła5 ŔÎΎüů_"$d ŽŽŽDFF2gÎ<ŁŔ›7ņ 1b8/ż\”ýűpëÖmJ•*•ě{zźœBBś˛~ýV­ZfčâîîĘęŐkxóÍZ†msqŠÉš5kńó{+Ĺú‹/F\\ÁÁëqss#,,ŒéÓg&˙CaeĹG˘sçwˆŒŒäłĎ‚(WŽœŃśšS&˝ővî܉Áƒ‡âčč@íÚoΔ)ŸńúëŐRÝoĎęÁƒ ¤~ýú´mۚ{÷îşgggΜ9KŸ>ý8°?5jTçňĺ0Ž;ގˇw˛şrĺĘE›6­ šIŽ9qv.ĹţýűŮ´i3ŁĚnSzÎSQ#ňÜ%˝ű<žčÖŰť!AAŸ8Ž.]şQ¸pazőęÁŋ ĺŢy§#qqqL™ň7nÜŔÉɉáÇđ曵’ŐiggG›6­™S™ŒřŒˆˆˆˆˆČófmÝ¸<˘˜'Kě“%.ŃŸč1aÂČÄĎIňPĎ‘gÉůó šIƒő^¸ FDDDDDD2ž&đyťwďĄOŸţŘŘä˘˙žÚ!""""""’& Sy"3†)ŠgŒˆˆˆˆˆˆˆH&R#"""""""’‰ƈˆˆˆˆˆˆˆd"…1""""""""™HaŒˆˆˆˆˆˆˆH&R#"""""""’‰ƈˆˆˆˆˆˆˆd"…1ňŻÁ˜1ăńńńĹÝݓví:˛qă&Ăű§NŚI“fěۡ˙šľááÇ´lٖ… ˙ăűcĐ ÷qqqMśôęŐ€đđp\\\ůő…ńő* IDAT׋OýQ€Ÿ_K‚ƒ×gšs*+ĎgľzőZ´hŁ?YPtt4ăĆM¤AƒF†ëóŸźžˇŢjÁ͛7u`DDDD2•vüŰĚřű÷ÁÖ֖÷ߌƒƒ=‡aÚ´éÜżŸŢĆÁÁwwwŠ)üÜÚammM:îźöZš§Žăňĺ0Ú´iOpđjŠ-úLíqqŠÁ{ďő6Z—+WΧŽoäȏɖ-ŁF}ôó7ąxń|ůĺĆ,}>žxxÔg„O‰‰‰IőŘűůľdĺĘU|řáGxzzŃĽKwÂĂ˙`Ýş`üüZááQŸQŁFeÖů’PçşuÁŒ1’şuиqSVŽ\eö9ÇÜšóiܸ)uęÔ#0pÁÁ덆\ĹÇÇł|ů üüZQˇnşuëɏ?îM×qŠŠ2:î÷îÝcܸ‰4jԘşuĐŻ_żür>]絟_K–,YJďŢ}Š]ťŽŃç‡0×qqqeéŇĺ?~WƎćyźžúő&ű;ÔŻ_#FŒ4ëZHřŰ´eË6Zˇn——w˛íJéšOíH¸†ŚLů _ÜÜęŇŁG/ŁsXDDDDĆHÍŚM›Yž|7nÜHľlőęoPž|yştéÜ9ó8yňqqqŠ~ćÇ÷2jÔh|}}X˛d!M›ú2qâädĺžývK–,d„ą|÷ÝwŹ\š:]Ű2oŢBúőëCpđj^{­,#FŒ4úÁž ^˝şĚšŔÜšł˜6íÓ'ĎçłlŮ zőęÉâĹ hÔ¨#G~ĚŽ]ßgŘţţíˇßčÓ§?ĽJ•bŢźŮL˜0ŽĂ‡0cĆl.œKŐŞU¨^ýuBB6óĆŻ>ť`Á"şuëÂźyłyůĺ"|đÁ‡FA‹9–-[AÁ‚X´h>`óć/ še˛l@@_şu능Ľ%!!›éŇĽÓSí'_ß&8pˆˆˆĂşďż˙GbđňjŹü͛7ń÷ďMţüů™?cÌćčŃc <€7ßt!66–Ÿ>l(ĆŐŤWšvíšá{ll,..5’ŐKż~š~ý“&M`ţü9XYY1tčé:'§NýœŻżţšAƒ˛pá<ňĺËˊŤŇ<!!ŰhÝş6ŹĹÉŠ ýú ŕĉ“Ě›7‹ůóçpđŕ!Ă÷¤už$Xźř <</˝ô’éŘʊٳƒ^OHČ6–,YŠŁŁmÚ´˘]ťśd˖Íä˙† ĐącœKqóf„Ą—E‚%JĐ­[W ,HÆ 9tč;w2{[üýťSąbúö}­[C9{ö\˛áÖÖÖŘŰŰ`oŸ;;;îiЇ‡ťa¸[b6l˘pá"|řáXZ>ΰ?ůä#ÚˇďČšsżPŚLiŞTŠĚO?íçÍ7kąoߪUŤBllű÷Ŕס {÷îŁjŐ*&ëϖ-‹ÍĂĘĘʰÍmÚ´ŚoßnÝşEž|ůŇ<'ďßżĎW_}ͰaďSŻ^Ý'űĄgΜáʕŤŠƒÚľkQŠREZľjIŻ^}˜:uŽŽŽ8::âęęĘŠS§Ě:_řřřĐ A=€'AĎfŸŔěž#—/‡ńđáCŞV­b´žrĺJlذ‘¸¸¸䘚Ŕ7ľ ŒcccY˝z çÎýÂoż]ĺěŮs888¤ŮƗ_ţűüÓľ} *T¨`ôşRĽJDEEńŰoW͚÷ćiö“ĽĽ%ŢލغőÚśmĂíۡٝwÓŚM6ůgΜáÔŠS†!đx8ŔŐŤżSŚLiÜÜjłaĂf8Ŕ믿NLLŒ!Œůé§}4oŢ,Ĺí°°°`çÎo9qâżýv…óç/ IIíœ ťÂŁG ĄJ‚×_Ż–fS ŔßőfϞŔ(4ʑ#=J×ůR¨PŁ×/˝”ČČfՑpLMmKB“PfđŕĄäÎmk(sďŢ}J–,™bâí݈-[Bi׎-7oŢdßž|öٔ'Îâŕ`o4ś……•+Wâ̙3é:Ż .ôTÓ:š4iĚ AC¸sçvvvlÝú >>ŢXZZšu-üÝžôMhnÎ5Đşu+Ţ(mŰv FęÔŹY—šú‡MDDDDaŒduyóćĹĆĆĆč}z~4.\˜.]ŢÁÉɉѣÇ0hP@˛2qqqÉz̘ęAóOKřĄó4Ň3ďáĂG0`0nnľyýőjx{7âĉ“|ýő–LŮŚ¤ëŇťÝOťŸ|}łtér._ăĐĄC8:: ÁJŞN7ú%[ŸĐkĽNw>ű,ˆëׯsđŕ!Zśl<žűÓőë× ĂÝÝÍdÝýő]ťöŔÁÁžzőęRťv-˛eËƀƒ3`Ÿgě1̈ó%­:Bƒ¤×Ľ•Uň˛–,YHŢźvf_Ďžžůâ‹e\źx‰ýű÷S @ĂqOí\˛°°x.×jzσęŐßŔÁÁž;vR­Z5~ůĺƏĚĐv<í5Pľj6n ćÇâđá#Œ3Žâŋ3cĆç&ˆˆˆˆÂ‘,ÂĆƆ Ć2věăÉ<ťty'Ő!/Ÿ>ƒ˝{bĺĘĽF˝"#ďceeeň@ɒ%9~ü¤Ń‚#GŽüă۞ôˇ^‰Ĺə3'G3ęrôč1J—.a]˙wěř–W^q&0đĂşüé™ë͕ˆ{÷îEŽ9¸z5y'N˝>zô(9sćä嗋šőŁři÷SѢEŠ\š;věäĐĄŸiÜŘ'ĹÜeʔa÷î=*TČPćΝ;œŇqňäI(Q˘[ˇnĺűďwS˘DqöíŰOHHyňüÝŰŔÁÁ‘réŇeŁ!-ŠŠXą<–––Œ?‘öíŰqůr˖­LVîüů ̛ˇ€ző<ůő׋̚5?żˇ ?F“˛ˇˇçŻżnqňä)œœ ‘?ţ§ŢOžžY˛dááá|řáđË5oţë×o`ôč1´n݊˜˜ć͛ϵk7XšňďIeÝÝ]Y˝z ožYËpÔd͚ľřů˝•jGpđzÜÜÜ cúô™é:Ž6664k֔  YŘŮĺĽD‰âlßţ?.]şLöěÖvžšsž˝Rʎví7iĐ }úôgöěyĎ´Ÿ<=ërĺĘ*T(““S*?L˜7owďŢĽOŸ~ôë7[[[fĚř̨÷•ťťwîÜĽfÍżçɨUŤwďŢĂÍÍ5ĹúK1fĚhÖŻßČ;ďteĺĘŐôîÝ3ÝÇ6  /͛ű1eĘTşvíÎ_ÝJׄÓć0ç|Ɉ:  AƒL˜0‰.]şqĺĘ:thoTŚgĎîtčО9sćŃŠS–.]ÁŕÁđńi”ćqżző*•*U4 ,--™:őS^}ľ #FŒ¤gĎŢ\ťösćĚ2œćž×OĂÜóŔÉɉňĺ_ăʕ+xzŸăő7#é5oÎ50věhŠ)̐!ĂčŇĽ/^äóϧŚ8ťˆˆˆČ™…ë-˝Nxn™č1aÉödąz˛Xف|Ńя~ŇŽ–ŹäŃŁG†‰JáńІ^˝ú°cG¨Ąçˆˆüsâă㉍5 ť.\ĚŽ]ťYştŃ3Ő…/Æ 5ÜńIDDDD$ľuvŕđˆbž,ąO–¸DK|˘Ç„Iü?'És@Ôä?hëÖPćÍ[@@@ß'ˇc '(hŻż^MAŒH1nÜD~űí7z÷ö'ţ—8}ú,k׎ŁuëVĎTďéÓgŘźů+ěěňâááŽ-""""˙őŒ‘˙œ˜˜–/_ÉÖ­Ą„‡‡“;ˇ-ľjŐ˘oßކť‚ˆČ?ëć̙͛3Ÿýű÷qGGG7öŚK—wžz"Úk׎ѪU;Š)ÂG \š˛ÚŃ""""’LfôŒQ#"""""""ňDf„1šŔWDDDDDDD$)ŒÉD cDDDDDDDD2‘‘L¤0FDDDDDDD$)ŒÉD cDDDDDDDD2‘Âů׋ˆˆ`̘ńřřřâîîIťvٸqS–h[`ŕX†ńÂîű_~9‹‹+ׯ_`äȏéۡڎ#<<W~ýőâ3ŐłfÍZš6őŁAƒFÜšs'KěăíŰwđîť=Š[ˇ^^ތ=ưżŹXąW–/_aňó..ŽÄĆĆ­˙öŰ]tď§ŢŢM>|çĎ_0*súô\\\iÚԏ¸¸8“í>|..Ž,]şÜ°Žnݸ¸¸&[ŚOŸ™âv>zôˆ ѢEÜÜęŇŹYs‚‚fńŕÁƒ ˝žBBśĐ°ĄOŠŻEDDDD2ƒ•vü›EGGăďß[[[Ţ0ö>|„iÓŚs˙ţ}:tx[;)UŻţ‘‘‘Ďý{FŽü˜lٲ1jÔGVçŋ—˜6m:ö§RĽJŘŮŮýăűsΜy,]şœ–-[ĐĽK'îÜšËęŐkéĐá–,YHᅍĘϟż:-Z4Őz-Zň$řhN§Nxř0Š/żü’nÝz2eĘ$^˝šQůżţşĹž}űŠUËĹhý;wřá‡ɖ-[˛ďčÜšőęy­Ë—/oŠm?~"?ý´ž=ťSŞT)˜7ożţziÓŚč⑊ÂůWŰż˙WŻ^%44„¨Ył:_}őu˛0ć›ośS¨P!“ßS°`J—~ĹŹmŒŒdëÖP&M››Ťá:.R¤'Nćć͛äϟ_˜ˆˆˆˆź04LIţŐ˛eËF\\ˇnÝ2Zߎ][Ł˙Mż˙>ăÇO˘QŁĆxyy3dČ0.]şlô™ŻżáíˇßÁÝÝ?żV,Y˛Ôđ^Â0˜-[śŃşu{źźźˆgٲĺřůľ˘Nztî܍]ťž7Ş7::š >ĹËËOO/ǝâ6=xđ€9sćáç×wwO:uęjTgHČüüZňă{ńók…ťť'ÝťűsęÔét•‰ŽŽfʔĎđńńĹÍ­.=zôââĹKŠîﯿĄUŤv¸ť{Ňťw_nܸaô~âa$ŠíłĺËWŕç׊şuĐ­[O~üqŻQ=/^" ` žž^řřř2věðĄ-Ú°}űśműWöîýÉčłąąą4nܔ/žXf´ţع㸸¸šÜĆ-Ú07ˇş´hŃư=ŁFfܸ‰xxÔgőę5ÉÚ×°ĄăŒ†5…„lĄiS?žűn͛ˇŚ~ý†,_ž‚đđp „§§-[śMÖvă}˝…2eĘ&9rä wďžDGGsďŢ˝ż˙˜[ZŇŁG7~ţů0_~ůUŠő~őUĽK—NVŻ……}űžÇ˛oß~Ł÷ęÔqg÷î=Üž}Űh}HČ6<==ˆ‰‰yŚëŘ ţúë/ŁőUŞTfŐŞeFALZד9׺ˆˆˆˆˆÂ‘$˘ŁŁŮ´i3˗ŻHöc?ŠęŐß |ůňtéҍ9sćqňäŠds[ÄÇÇ3xđPΝű…I“&0{öLrćĚIţÜźy€-[ś1iŇš7oƲeKđ÷ďÁ˘EKŘž}‡Q]+VŹbŔ€~,Z4€šsçłlŮ zőęÉ…ó¨Wσ#>⧟ö>łgĎă áóϧ1dČ`věŘɲe+RÜŚ)S>cŰśP `éŇĹźůŚ #F|Ä\3”‰ˆ¸Éňĺ+™2eëׯáľ×^ŁOŸţ†Ţ攙;w?ü°‡‰ÇłnÝjJ–,ɐ!ĂSœä˙ŰɸqiÖŹ ‹/ I“Ć|úéÔ4gŇ}6oŢ–-[A@@_–,YH:n <ÔDDDŕďߛܹs3kVŁGâüů <€… çRľjŞWÍźńĆëÉ:ooośn 5ZżeË6ʗ/Oɒ%’ľqṌů_~š… çŢűöŰ]ä͛— ćâíÝ(YűƏËŋ—čߐџ,wďŢăĉS,X0‡ńăÇ2ţ"† űÖ­[ąiS0uę¸óá‡ńđáC“űí̙łÉ† %¨U˅ůóç;wîD×MM›úRž|y‚‚fŚxí¤VŻ˝˝=ŋç̙łIŽłęäČaMhč7FŮéÓ§iŘĐ ˆŚk>WŽ\´n݊ >e̘ńěÝűQQQ&ËŚv=™s­‹ˆˆˆˆ(Œ1ačĐáL˜đ)3fĚŚG^Éţˇ<1+++fϢk×ÎěŢ˝‡wßíAłfÍYž|…á‡ńáĂG8uę4S§N˘RĽŠ8;—âăGbeeĹ7ßlŔǧëׯĄE‹ć/^Œ† PŽ\YŽ=fô}˝ző V-Š-ʃX˝z-}úôĆËŤ>ŻźâLǎ?~ EŠü=—GéŇĽ6ě}ʕ+KŁF^4lčĹÁƒ‡RÜŚaĂŢgń⸚šR˘DqşvíL\\\˛^-ƒ  TŠ’8::ЗüůółyóWf—ůý÷Ť8;—¤bĹ *T!Cąté",-M˙YXľj ŢŢ éĐámœKáăÓ?żfiϤűlŐŞ5Œ9‚:uÜ)^ź;v N7‚ƒ×°aĂ&lllř䓏)[öUŢxău&NKťvm‰%_ž|88Řco˙x15¤¨iÓĆ\şt‰łgϏ'‡Ýšs'žžŚ'j͗/ŸĄ÷…˝˝=ůňĺ3źW˛dIŢ{ϟW^q&oŢźÉÚW­ZU>ýt|gΜ!**ŠV­Ú}îŢ˝űüöŰď†×7nüÉćÍ_qńâEÂÂ~ă… +VĚč3‰'L˝|9Œ‡RľjŁ2 s^$(ZÔx’UGGCH`Š……'Nœäđᣄ…]ć×_/gÔSŔÚÚÚ¨‡‡……ĺʽʅ Ě.Óşu+Ţ(mŰv FęÔŹY—š)śë×_ĽiSăăR‹´öŮŕÁCɝŰÖčX”,ůřGýŮłgŠXą‚Ѥ°  @fŸGŊŁbĹ lÝĘŤŻ–á‡öýˆ ę§űœtr*hôÚTűěííyůĺ—9sć,ŽŽľȓ'7šrĺ2 4ňäą3:> Ą™)yňäáömă;:uî܍sçţ>wŚM›L͚5ŒĘ”*U’wŢéČ…‹ŮšóťdőÚŮŮ%Ť7ąŰˇď`g—ÇDŔՄ7qîÜ/źňŠ3ĄĄĄtîÜ)ĹzLMŕ[ŹŘËŠîkOO<==¸sçßż›… —püř -šgŘ_Š]Oć^ë""""" cDɛ7/666FwäIzǘ´~řwéňNNNŒ=†AƒžüXÎςs“•ˇąą`ůň,X°˜f͚âęęJąb/łxń’Tż+>>ţšěƒ!C†qáÂŻ4mꋷˇ7ŻźâĚťďv7*—ěű“ÎۑV™ŞUŤ°qc0?ţř‡a̘q/^œ3>ÇĘĘĘŹm~Ú}°dÉÂd˝3ŒÚŻžž™;w>ýú˝ÇśmĄxzz`kkűĚőŚÖž”&Í}e˞ʥC?­;ö˘˘˘ůóĎ?é×o€áü5„ěŘń-ÓŚ}FϞÝÓŹ7ADD—/_ŚlŮW“˝WŽ\Y^yĺBCˇsűömîÜš‹—Wƒ۟ž |“˛łłŁI“ĆÔ¨QŚM›sřđ‘dĄSJŇşÖEDDDD˛ S’,ĹĆƆ ĆR°`lmmčÓ§ŐŞUMąüçŸĎ mŰÉć9‰Œź••VVV”)S†Űˇď`mm“““a9ţ‚aHNHČ6ZˇnɀýđönHůňŻń矩Ď1Q˘Dqrć̙l(Óöí;8wîˇ~Ĺ1 oIDAT—§Úţ[ˇnągĎ^† B׎ŠWŻ.ůóżDdäƒdĄJây=bcc9uę4ĽK—6ťĚŋ—xřđ! 6`ذ÷™93ˆ#GŽŚŘvgçRÉ~ħ6ÜʔbĹ^&GŽ„‡‡‹?ţ¸Fllܓ° ,ǏŸ4:Ś×Ż_góć/Sř8Šúőëů€}űöłwď>|}›dPH’ź}7oŢäʕ+”)S:ĂŽ…&M|8wîœŃÜ7EŠĄTŠ’œ:uœK™ülöěŮ1b7Yż~“Ń{žžůĺ—_’ÍŠOPĐLR >|}}Řľë{víڍťťk†Ýţűűďwăîîi4/ŇăëřńyŸ3gNłę1çZÉ Ô3F˛œ5ŞłyółĘúú6fƍ ¤E‹ćŘŘŘpäČQ–-[Aóć~XZZR­ZUʗÁƒ‡ŃťwOňĺËGHČVÖŻßŔŞUËȓ'%JcϞ˝¸ššbkkËÚľÁ„……Ľú?űšrĺ˘M›VÍ$GŽœ”*U’}űö1kÖ\&M˙T?Ěíěěȟ˙%BBśŕččHdd$sćĚKöCŇÚښĎ>›NݰłłcůňÜťwŚM›˜]fҤÉÄÄÄЏœ9s˛vm0šrĺÂÉÉô­ŠŰˇoÇ|ˆłł3îînœ9s6Ůú´ŘŘŘĐŽ]>ýt 11ą8;—âŘącLú9Æ ÁÉéń<4ëÖ3jÔhÚˇoGdd$łfÍ!..žf͚ŕŕŕȁšté2 8z꜃!C†q÷î=ʖ}•Ď?ŸĘK/˝d˛mžžŒů‹/eáÂĹT¨PžaĂާWŻ>éÚƞ=ťcg—‡9sćqíÚ5 (ŔŕÁđńiô$hq`îÜŮ|ţůtz÷uv\]]é×ď˝DÁPN:E§N]>|(ŢŢ iÓŚ5“'O#"âŚa._ß&„„lĹßżG† !JÜž^˝ú=ťŽŽľéßżŻŃ<2ÁßżĽJ•bíÚulٲ ‹Ç˝?&Mo˜›&5˝{÷ä‡~HÖă¤[ˇŽ/^œ5kÖňő×!X[g§J•Ę,X07Ő2oŢźÔŠăĆŃŁÇŇ6´dÉRŁŰĂ'#†%+kmmÍěŮA̙3Ÿ™3gqçÎ]ňç zôx×ě^-ć\ë..5ŠXąÝťűôY˛×ډˆˆˆˆ¤ĆŒő‰^'<ˇLô˜°d{˛X=Yʁě@žččG?iW‹dŒ-LŸ>ƒĐĐ-ĎTćżŕŘąăřűżÇŚMÁéšXDDDDDţťŹ­łťˇ€G@4ód‰}˛Ä%Zâ=&L0™ř9Ižę#"/ ČČHΟż@PĐL4¨§ FDDDDD˛Íh("/œÝť÷ЧOllrŃż_íÉR4LIDDDDDDDä‰Ěڤž1""""""""™HaŒˆˆˆˆˆˆˆH&R#"""""""’‰ƈˆˆˆˆˆˆˆd"…1""""""""™HaŒˆˆˆˆˆˆˆH&27Œ‰×ŽI•Yů‰zƈˆˆˆˆˆˆˆd"…1""""""""™HaŒˆˆˆˆˆˆˆH&R#"""""""’‰ƈˆˆˆˆˆˆˆd˘Œ ctˇ%yŃeHţa™_Ÿ‘ ɂLĺO•…X>§†‰ˆˆˆˆˆˆˆź(24ď°|Q #"""""""/Š Ď>,ŸcC5|IDDDDDDDţmçĎ%Ӱ̀ƥöž‚ůˇ1'ÓxęĚĂ2ƒ™RCâtEDDDDDD$‹K)żH+÷H—ŒcâSi`<giiń—ާˆˆˆˆˆˆˆdeOň‹8’g‰=s cN“ô–MiÝÂ)éŘŞŘčč˜0RÉĘbbb€XҞ 7˝Y‰‘”˜ôŽ‹2ô‚IňÄŢż÷¤ЈˆˆˆˆˆˆdewďŢ=‰qc*çHěŠć•IĎ0Ľ”ž0>•÷ăŘ“'ĎĐ!‘Źě̙3HŢ3&99ˆY,Ě|Ď"ŃcŇĹ2Ńcś'‹Ő“%;Čł5..Ţ^‡VDDDDDDD˛KK‹+++oŕ6<bž,ąOS=e’Î-“搼§Ŕ7>•çIťńÄQüqm­ˆˆˆˆˆˆˆdEOr‹(R]¤k~SĚ cL}Q| Ď78!Œ‰~űíöŤ---"txEDDDDDD$+ą´´ˆxűíöŤhţcçr’îp&ľ0&>ë70ă0ćŃŽ]ťţ:~üř4bÉJŽ?>m׎]ńxhRâ0&qÎaîݕR[¤>gLŇ÷-L<&ž3&ńź1ü=oL6Ď“°˝qăĆŕźyóuĐĄ‘Úíۡ–;::Nîó8ŒId拉Çx蒩áKéę%ó4wSJéŽI`zž˜¸'}jēĄI÷xœS$ž…uBďS!LRéîć…1OÓ;ĆÔ0Ľ„ Š~˛Ü­\šňćúőëżuýúőY eDDDDDDDäyą´´ˆ¸~ýúŹúőëżUšrĺÍŔ]ţÎ(’1IçˆÉ°^1öž)•Mi2ßÄK҉}&÷MşdrŮżűnˇ[… ĺްąÉ]ÁÚÚŞX\\üK¤ż÷ŽˆˆˆˆˆˆˆüˇĹYZZüyďĉ§zx¸íćÉ|śü=IoJC“LMԛ4ˆyę[[?m“řľé eBSĂ+ŸľHĽ """""""ňß’Ň †’) 7Jčý’4xIüÚÜ&ľ›ĽÉ*iaâuÂY¤đĽq) •Ä$lxâ4 ˝a,­ӁŒˆˆˆˆˆˆˆüˇ%Hß)áu\’ő‰‡"%˝kRjҞ9ˆô…1 §Ȥ%.Qů„%qŕb™¨ţ¤=jH´>‚‘˙ŚÄYD\’ç‰{¸€q“ôNĐńf.A <}˜‘ڐĽ„ÇԆ.Ľ5ˇ &-ŇřnůoH) IÜ;&éŁ9ÐĚé óLA <{a‘ĘsSaLŇ׌‚0=4É"•v+ůoH- IŚÄ™xnNřb*Œ§˜Ź×”Œ1žś—ŒŠ÷LÍ ciâ{,žÓśˆˆˆˆˆˆˆHÖŸĆş¤=cR fĚ `2Ź7Lb`˜ŰKĆÔ:SĎSžd‘ Ű#"""""""YGźëSŽ”ZŘb*xÉđŢ0‰etxaN/™„G 3ʘzLŤÝ dDDDDDDD^,ńfž˙i•1§ éň<‚‹ÔćsąxĆÇ´Ú­ FDDDDDDäĹoćúřg|L­Î ń<Ă ‹4ž›Ҥö<łśCDDDDDDD˛Žô WJü<ތ÷R{žažwˆ‘ž^2ć>ĎŹś‹ˆˆˆˆˆˆHÖf)=Ď´Ţ0‰eF a‘Ž×Ďrűj…3"""""""/śřtžon—L b ó szśX<ĹgDDDDDDDD í^2ćźNi]†Ę–‰;%=ó˝(t‘ôˆOÇúřt֑Ą2;ô°xˆˆˆˆˆˆ$ˆďe¨*äČěů_戈ˆˆˆˆˆü;Ägr}ń™˝˙tHań/jŤˆˆˆˆˆˆˆdmńĎŠl†Ę*‡‚É ń˙t˛b˘`FDDDDDDD2R|VjĚż!řP8#"""""""éŻ] """"""""""""""""""""""""""""""""""""""""""ň/óăzG¸%´ŁIENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/categories.png000066400000000000000000017324031522167256300226360ustar00rootroot00000000000000‰PNG  IHDR˛ŕ~ßčë´ĘIDATxœěÝœTĺůöń{;KďE@A¤ˆŠŠ"ŠŠ˝÷nbbLÔ$*ś¨ąˇŘţžIŒ%v5Ć^° ‚݈Šbě"‚" *} Ëîžs=ËÎĚÎĚÎî”=3űű~>‡™9Ógžsv˜çšű.4 ‚,‚,‚,‚,‚,‚,‚,„bCž(0ÚŽzCÎ#üźŽä?Â3iFŕ˘ĺxí@<„\Z€0Frx@Şˇ4€Flź. ÓśD!°‰×d–5nđ€ŕhÓĄ–śâČćs',@îËfȤMZÚbŔ"ϙ  ČDř¤MZÚR#]ϕРHVş‚(m"ĐŇVBŠ<ĎL˝FbŽLGRšÝźł´…0EKžcŞŻ !ň_ŞÁ’–\?ŻĂ,ů¸ČF€Ľ5_?Â2ÄךćŢ7–5ň5 ќ畩˦ăz 8ZiÎő2uٜ‹dŸSk].]Ç_śCÉŢ_k].'ä["]Ą“dn'—Ú€Ôd˘]P}Šç7÷r—OáŠTĂ'­nI÷ő@óĽÉth%ˇŸň!8‘ÉK*Á—ć^_:ޤdâźć\&°r=d‘JˆĽšëS9/•Ë€ÖќPHşĂ)Í]ßÜËR.*ZÚ (Óë›:/×éђđG6*- ´äd˜%WĂé ą¤˛.ŃúdĎO!R—ŽpGK$ői^—h}˛çN.$ZR ĽĽa•ÖŽŇ‚!“ŐW2hÉŠ0KŽ…+šiiXĽ%—ij}˛ç€ŕČd–t]&ŢşdÎ ”\ U´$RćÓŠŽkÉe@ë¨oáeZş.ŐÓńÖ5çüV— aŠTŤ°dútsÖľä2 ť2bÉôéxë’9ŻŐ=H‘ÎKKĎKćtsÖ5ç|}-Šl’îKKĎK´.™óZUƒÍ ą4çtk‡[šs>ČžtY2ZIGľ–dÎk5A RdŞ Ks's^˘ó›ZßÔy u´$8IwpĽĽá–xë’9/낤HW–Lo*¸ŇÜŞ,Yžć?šZWoé Ť¤ŤZK˛çeUP‚ŠTaI&ВJh%Ůę-Ń׋wkĆů űšÓZ¨Ţ’ ˛DO%ÜҒę.‰Ö%s^V!H‘É*,-9ż Éë5őŘâ­KćźTŽ´%™ _¤Z•ĹTILIt™–Zrś:Kk†š[­¤Ľmš ­x ăÜNa‚ŰOŚB‹5c}˛ŤĐ´TCőÍXŸl+ĄşfŹO^Iwë!kćůŃZˆtWaiîşX”Xᕦ‚+Mľ8Jg…đ -ג`F˘ KS-}’ śÔŸLsĂ+ͩԒĚédĎˈl‡#2Y…Ľ9–xĄ•čóŁŤąÄ ˛4¤ąç€ŕkŞ*Kź I˘ K]‚Ë'ŞĚ’‰J-ąN[3ĎO›l†*ŇbiN`%ŃatEx%Ţń–VciÎëMŕ€ĚiN8#^+ĄćTeŠkâx˝5ŽĘŇŇĂŚÖEuښy~Zd+,ќVBŃëŇXńĆ ¨DFW\ięq4ő˜Ł'Bˆ€ĚK6œ‘l•“Ś‚%‰*°Dú×§é0ŃńDë’9/-˛˜hNˆ%ŢéTĂ,ń*°$Z˘ď7ŮJ-Ń׋ľ.B,dOsĂ,MU=ŠKâxt %™Ĺ,ľj-ńÖ%s:ŮóR–éĐD:C,ńÂ!ÉYb-ţę+…Q×KT™%^Ŕ%úźX§)YȞT‚,ŢéxA–DA”čj+u1Ž7j‰w˜Lˆ%a–b˜–†XŇY}ſΠŤřC+…1Ž“l‹ĄčŔKôůѲ<Í ˛ÄZď?Ż ęňń‚,ŢĺźĐJ‘ĹĹÔ[d8&Ţc(đ6u~}ŒÇY`ŸGźçœčź”d*4‘íK2UXü•BkşJ‹˙°ČˇÄ ÁXÔő,Éőąf óšƨKr˝FŠó_ë[ꢎ—¨úJ]—3ł”Z%:ët˛çľH&- ąřO§^ńŽG‡U cŹhń‚+%ś6źŇTŔ&^ŤĄh-y˝ ľ>- _$şNŹVBfń#^ ĽĆÖ[bX˘×ĹšL˘űmI¨%™Óɞ×lA ˛´4ÄŇT–č *…?ÔRj o˝uěŘąSż~6l׎݈ÂÂâ!……60tV߂‚‚.Ą÷˘4k՛TŐ××/ ýžŽÎćÖŐ­žUUUőłó>_ąbĹňľ—saZVYüđJt{Ą:kş:K:+´Ä:ěy͖îFk†Xbľü‰ŐFČŤ¸â?ż,´{—íÝť_Ż^˝zîTVVścčäXH‹úwŞŤŤ_]´čÇW.\°ČֆTV‡–j‹ ŞÄŞŘd‰n=d–Ăa–tYŇbńގ4ÄâŻÂRdą[ yëUĽĚťĚХáęĐĄăA………ťű‹­^]kľľľĄĂŐVWWgőőőáŔŻ   źZqqą…‹".WWW÷âʕ+ž˜9sĆťś6p˘0Ë*kdń‡Wj˝›đ-fÍłÄ Ž´j˜Ľ5‚,MOś…řĂ)ŢéXmƒŠ˘ÖŤúJť5ë]€ĽS§NÇřŤŻŹZUc555.źB`¤JÁ…ZJJJŹ´´ÄwNý;˗/żŰhQPĽĘŞ´řƒ,ľżýYă6D-i9”ěńh ˛d˛ĽPôńŚB,Ń–XUXb)čŐŤ_ďuÖébQQÁ~şşşzŤŽŽśUŤV^ŁPKiiŠ•••YaaC˘śśţéロÓ˘E ZC0Da–XŐY˘-ɄYZŇj(úxŹÓɞ—”LYŇbP%^ˆĽ0΢‹‚,n8jĎňňvç‡^Ăr…VŞŞŞ]ˆ ›fi׮̅[Ě *++ŤŽřü󏞷†`ˆ‚, ´ÔĹY…Y’­Î’č0úxŹÓM­OZ‘ĽŽ%ŐXâZâ…Yb…Xüa–ŚB,zžĺÖb)ÜtÓѧ—––œ:^˘BŽ…@śŐÖÖZMMZQQaIIIńν{÷íđĂ ŢąľŮ‡ş7áĎaÔÇ8ŻŢ’ËpÄťÍdĽ\P%“A––VcIt<:ČŻPŹKIǐ6ÚôŞÂÂB×J¨˘˘ŇŞŞŞh#Z•˛ łÔŐŐ[II‰Žęۡ˙đ+–ýwŐŞUj%¤üCmŹŤŽ9L6DRĐÄń‚&Žď2i‘j%ŐX’ ł$S…%^ˆEí„JzôčÓ}ýő‡\SPP°umm­\š’*, PŞłŹśââb+,,Ô˝{ĎÍkjjߏŹ\Ymą+łxWü§=‰*{$bÉzU–LYŇU%VKĄDUYŠ,2ТKiǎ;Żżţżlśzu­k%TW—¨â@ëPuç(**VŤĄž]ştľbŲWW­ZĽŠĘEx•Ybľ ŞˇřUZľjTeI%ȒÉj,ńZ ™5ŻD/^ˆĽ4´”éôFmzĽ*ą(ĢJ,´AćľRe…Yşwď5řűᅴb ™TÁ#şKŁ›ąŘáłä˛fYŽĘ’ K*ŐXâľňŽ{ßbŃRZĘľnÔ¨ÍO˝ĄűŠ*ąbšB•YŠ‹K\›Ą^˝útřá‡ďßą†l„Ş˛x!˙Ą?ÜRu~<-­Ę’vŠÜAsŰ Ĺ ´$[%ş˝PŹ*,ŢĄB,Ľn¸É^ĺĺíţ˘[ž|…ë#´†˘˘"+++ľ’’Ż4´düű? ďčNJúábmíj÷ëÔęęU|÷ €ź§˙SvęÔŃŻŹŹşčóĎ?ž:şJ'­Ą2KmÔĄńŞ˛ÔEúĂ/ąN›E`b­‹uşŠő ľ´"KkTcń‡YŠ˘ŽůÎw-…zőęŰťGž7„Ž—TTTş„mĺĺĺÖącG÷…ciiŠ+ ]XHˆh)m;چ´-i›jßžÜJJJÝzž@žR ťŽŽŢý8"´l˝zuí3+Ş,2ŹâŻž]‰ĹN‰'QĆ#Ţ咽˝¤ľvĽŠ0KŹ*,ąZ y‹Z ľ×ńĄC‡ŸUXX°ŃŞU5VUUe@6•••Y—.]Źźźűĺ€Ěń*••ľ }š_G…ä%}Î-,,R…Ď’Ž;uůᇯYCîC‰îXŐUW˘Ď‹—őČştY’m+ԜÖBą-^Ż‹ˇNŐXJ6Ř`ŘVĺĺĺ§+‘TQQá’I@śtęÔÉ:věŕŞFČmsíڕš/÷W­Ze@žQ˜E• CŸ}‡učĐńßţé;‹läńŞ˛Äjä?Œ—óhęźdÖˇH&˙'ݜň2ąž|tő•xA˙ĺd)čÜšóŃZYUUíŇ÷@6¨*D׎]]­GŰ śEŞ! ß(Ą,„ŹÉF(/ĄŹ„—ą0‹_D$VAżćU2VľĽ%A–t=˜d_˙ůą^TŻ­P‰7Ř`ؘĐęąę U]]m@6hÂ\­„JKK @ëÓś¨m’0 ň˛ĘD(ѐ‘X›™°Č,EŹ˘!ń47ÑŹfßN:+˛4ˇÝPźó ’¸LŹËëM)čŘąÓ:ƒ ˛I턊‹™0‚DۤśM ßx™ˆŽ;hžĚ„ľmŤÚf+++ (**˛’’ˇč¸–ÂÂ+(hˆ2¨âI]]˝ŐÖÖşEĄ-:kłc•™XąbĹrkČPÔYdŚ˘nÍa˝5ˇŹYÍż>Ţe2"]A–Śz$Ľ’܉WŠĹ˙˘[ßžël¨ĂŐŤki+€Ź U [´Ídhť ­]ť˛ĐçÂvVR’8.Ą@KQ‘EJÂ-ekjV[uu•UUU[]]ľ&e#”‘Ph[™‰Żžúň]k\ÄĎ[×ŇP…wÝdÂ/-–íŠ,ŃŇQšF?y)(/o?T'‚”~@ţŇŻőJKK @îĐ6Ťm—ď‘Ú}lßž}8Œ’ `JJ:ššĆTVVYEEEŤ~žÔ}7Tt™‰i֐Ą¨ąÔdľK´BËžŚz-5n‰ŐZČ ‹6Đ!m… eeĽ ÷°í´- °ôčŃ=-!–hşMݜx /3aq2 Dç5 œŸ™¨ČŇŇ'Qä}Y÷&Ú@ŃÚĽ{Đ6¨:€ÜÓ°íŇ^ ß[§Nšl!”;vpm,—/_žőâ^FbMf"œĄ°ř‹Xm‡źă-ŠÂ’öę-­Q‘EZv)H°>´öŃ ő€2­¨¨ľťvh ś]€ü׎];ëŢ˝[VB,ݗîS÷Mk3.3Ť˘Š'9ŒĘf%SOĐÝnAAAd@6ľÖoĤ‚m żľo_n;w˛Ö˘űÖcČ/#áe&,ĂٌlhÎ'öć>¨‚ Ÿušzk"Č€l}IhrŰ.@ţR€¤cǎÖÚô˛fY›‘¨÷JÁ43k‘ąó[|ůtÔŃI÷ƒoęśbőrň˜:ŘN;íhŰlłľšĄ Đß:wîěÎ[śl™Í;Ď>˙üs{ë­ˇí•W^ľŠŠ ­cÝuÚřńămŤ­ĆXďŢ˝B‹ëčm ţZŮťďNł×^{Íýý€ PKŸ „X}Ú6ĄƒÚв<´Ô­9î-uk–Őkëcz‹EöŻKthqN7ľ>B‘%/A–dĂ,ţP‹ˇÄ[WŚăýúő?N7RUUmZWiiŠM˜p˘]wÝ?l‹-F[IIIŇ×Őe7Ţxc;ę¨_¸_Qh’ŹŽŽÎäMţďąÇvćۂ 짟~2 ŠâX>(**˛ÓN;Ĺ.źđ|[wÝu“ž^˙ţëŘţűď窏éď5-ż‘KVޤ @>éŇĽKč˙6…DĹĹ%ŻĘ˘ďQeÁ‚ď°Č*kD‰T1‹ ˜ÄʆdľCN:Z ĽCAÔńŁU“şuëf7Ţx˝ť•ĽB–NřƒťN˜`?ţřŁČ}m´‘=ńÄ#nâ\Tšé¤“Ną 8p€1Â>ýô3űîťď ČG*u}啗ۘ1[ZKÚGfëŻ?ŘÎ;ď[ąb…@6ľoß>ô]bP˘éąé1°zŹ\F:[ľXŢ͖†Wź1lŘPťóÎŰluÖitž&'OžbŻžúšÍ›7ßž˙ţ{ˇžoßž6`@Űi§mˇÝvľ~ýúE\oôčÍíńÇąßýîxűꍯ @ëxä‘Ýöč÷ţűÓíđĂaÍQP`á‹lłÍ6îtmm­ÉŢ{ďi˙řÇß]iâUŤVل §ÚK/˝l@>Ńś/ÄňÎ;ďş1˙á‡٢E Ýş^˝zŰf›mj;ďźSŁŔŞnCˇuúégn{rŮŹY3,›† nšD˙ŻéŘ1řŐ2őŤŤŤłő˙ĽTr(ľŮœ'LkĄXǓi-ÝN(ú°ČÖś*ň-:ÝY‡ŁG™Ş^˛dŠČžş‰nUWđSېkŻ˝ÁžxâÉ&˙ŁŚ˙x|đŽ˝.~óçgxˆýüóϖ ľ?řŕƒiÖş˙?ţĂčý÷ßąŽ]ť†O˙ůĎçÚc=n@şÄű⏚_pŠzĂťďžĺŞ7y:čPű裏-]bmçÇ˙G{ůĺW’˝ ›8ńqW=ĆÚQĺŠ=÷Ü#|úńǟ°łÎ:ÇĐś¨MV.;ýôSCăú°ˆusćĚąŤŽşÚXŮtÓQvŢyç4jEôĐC„ţî_g™6`ŔŰe—më­Çşlˇn]]čLŸfĚřŇg_ýŒ÷ĄĎE )@ěyŕí†ţimÍ…‹ dIŹS§NV^ŢÎrAee•-_žÜ2Ąk×.îpúôiۄÔ§}ٚĂZßRç[§Ăú‡ÍmEäžÄ;nIŹĚ&QrJYY™ÝtÓ B,/źđ˘ížű^ö裏%ők]ć‘GłÝvŰËUońëßwj9 w(ŕŚ/Ý´<ü𬮮ÎŢ~ű݈ËlˇÝś4‹ýuš Oä—áÇ١‡ąN­ăŽűC“!ŃeŽ=ö÷î:~‡vˆ 6Ě2Ľ´´Ôp|đßöÇ?ţŢUˆéÓ§ˇ[Ż6I Ö¨ÂŰW\f÷Ýwˇ ÜČOúąLŽ„XDUMkW‰V@@žůĂގ‘#7ŒXwçwŮI'b•Ö\ę{ 쎝î‰XŻś'Ÿ|’ČţvD[l1Úžůć#.łíśă,h.šä2›6í=ŤŹŹ´ŠSßśË.ťŇ€|rŇI'F|ŞJ,çœsž­Xą"éŰĐeuożý6źNˇyŇI'X&(Źň׿^íŞČř[”Ĺ3hĐ ťţúkĂűůĽ]ť2Ë5šř˜­2Ĺ)čŮł§üąë^|q˛kKP_ßź–Şj'tĚ1GŰĄ‡ěZ€œsÎů6`@÷Ëjîëᇹyóć[şL™ňrčöć5yšüÉÄŚĘ+^h%ş O´7ß|3â´&™Űˇ/oQđ-SćΝkGy”ůhŕŔ.ę§żŰÍ ąxt]÷ć›o ŻŰjŤ1śîşíŰoçZ:wÜąîśýTĺiÌś`Á÷Ž"ËĐĄD´.SřĺŇK/ąC9ĚőŁrMŽľúÉŚ˛˛–Wc™:ľáť‰~XhűŰßýč&ږ[núŽňlW5ZśŮf;k =ć }˙TŮ ˛¤3ĄSľhE&œš€n>ýý÷ßŰgüšY!ľ7P@eżýöľââ†˙ڌ?ŢMNéś&Ožd}úôqë5!Ľ 0^x‰ĽËC=ě‚3H˝‡zď´ íˆUy%Ń8p ;­–aúBčő×ß44ćUžHŚE[şh_ťjŐ*C~Úa‡"NżóÎťIľŠç˙űĐŢ}wZDČdűíˇł˙ű?–.Ú:耈uóçggőgűúëoÂë´?ůŐŻ~iż˙ýńáu=ztˇ=÷ÜÞzj˘ĺ"Uš)((Čę>:ýĄ¤$ő¸ƒZ•^}őUv饗šçŲőÖcÝeôĺTé1ëągáó}Śrş­ćýząr­"KA’ëd*(rČA뎽öz×(š¸V(e§vt4~?ţ„;\šrĽ]wÝ v啗‡Ď;đŔíŞŤţ_Ň÷“n=zô°É“Ÿˇ.]:‡×ýç?Ú\qšňňňĐ€ŸłuÖY'źîŃGłłĎ>Ď?úč_ŮĹ_>ďóĎż°}÷=ŔýR^-”śŰn;ëŢ˝›-\¸Č>účcť÷ŢűÜDaŞĘĘĘBzťŰěoƒ˛Ţ˝{ť×rÁ‚6uę;ŽâÍŹYłc^7ú1żőÖTűőŻqUsô^Ž1Ü=ďÝwß+â64 ˇűîs?5jWÉGżŒ˙îťďěíˇßuŻßŒ_ÚýŇéż82|zܸq ˛ÜxăőnâŰŁ}ŇYgÓäő4žŐVEűˇvíڅĆřWćîťďs­[˘ 6Ô&Mz&|Z_d 6ŇmK§Ÿ~ZčvF[׎]]xďֆô噶§]wÝĹ6Ţx#WBÂE‹öĎ<ó\h?5%f¨0úš]sÍuvË-ˇÚąÇţÖ;ěPWIcɒ%6v윥}üÁö˙ţßU×ß{ďýânŻjWó§?>­ÖLşíËŃUM^zéeK•ĄţŰ3fLZƒ,ýű÷wWüîźóΈ‹ÔÔԸք[ląED¨NĄŮxFŽéś§Í6ŰĚ}‰­Ď$?ýô“}ňɧöüó/¸żuMě°Cě˙ţďʸç+řsà ׆&łˇŠXŻĘ-C‡u‹~=ß}÷ŰWüŸűŇůďż˙}+"Ȣ/†rÝÎ;ďdˇÜrc¸‚Šh˘Y‹öţóšöěłĎ5y;n8Âzč7‘ËŚ›Ž mSׅËűŠĘ–}öŮŰUÉ8ńÄ 1'ĎŁ]}ő•vĐA6Z?iŇ$ťä’ #öő ÁÄ ˛ěťďާ5‘Nˆ%xź*gžTŞąx4ŢüúőëkéT\\Ôh]aaQÜË_|ń%Ą/Ľť†OLJú;¤ŕ¨śĎhýúős‹‚šÓ§úRűâĐß˙Ÿcކ>Łzč!Bšú[žńĆťĺWż:*´ÝţÓ}ŚiŠÚ#ÝrËMŰ]ô}N˜p’qDăÇ­ę3=zŒuż=úč_ۅ^䂲MQćÚk݉řr^Ď_A˝_|Š˝ţúEŞA–›ožŐÎ9çĎáÓúżü_ţr‰;î…YƏß>ôýß_Ý×]wÝmŠĐíUUUâ+4hĄmśqzňä—6ß|s{éĽěşëމb•ţ÷Oźę6§Ly9ꞡąÖôŕƒŮ|>­˙ěžţšáӚHV ÄďŠ+ŽrUâéÔŠ“{mü!–hşÍNřƒľ„~aýČ#6 ąÄ˘ Ńő×˙ŁÉËuíÚ%49fÜóUľć‰'mb‰ŚÉ?M¸ŠL+ÚU8đď/âęŐŤ§ĺޞ={š0ˆ?Äâ§°˜śoUjiĘyç7Ģ* ÷ßOĚK´Í6ŰÔî¸ăÖ&żÜ3f‹˜!QßîI“žXçŻćýŘTaĆď‘G3OôśŚJ>ŠZ¸paÔ}ô˛tRuŁčę"ŞśÉ&›ÄźźB'łgĎ/?üđCŁËčW•ąB,Ńň¸á†ëcn—gŸ}–Ťdb‰Ś*Jgœń'xkĘ)§œ7Ä"W\qYĚK4í'^¨ÉÉĺ×^{ÝŢyç]ó?Nľš8ń‰đ>ˇÝvœkŤ §ž:!˘oŽÚ¨<ůäĄ÷á˝6oźńŚkǰlŮ2ůýďsíz<&œşßglîÜš–,MˆýăxLŞ|˘VGďż˙uëÖ54)v¸ ˛~ř|MVyä.´Ú1Ȓ%Kíĺ—_śüÉľAYš˛ĄíÓĺ—_1áŽŇŤˇÜr›M›öž{,ú•÷Ż}TxđŔ÷ˇ)SŚ´ZľdÚ_|úégŽm†h ( ŚöšhüříÜĄÚp(xWXXŕś!ďů‰žŁŞíśŰž1[ţˆö'ăĆmă*Siż§vĺĺímŢź†íý‚ ΋˜ŕVëëŻ˙§ýďšjUj5äŃiŐăxúégâ>öíˇoxěß|3ÇíôŤ0M\{{ě ×bČŁ°ĘŕÁƒľtŮwß}"N{-U<ńĆ_*TŠ;RzżŽÓ¸TE#čJa™ŰnťŮfÎüĘý>}şk”Ě/ŐŃű˘×äÉ'Ÿr-yÔúnÔ¨Qö›ßü:ÜÎhđŕAöÇ?ţÁţţ÷kÂ×QĽ•čq?eĘKîqŞ- Ş1üqŽ]—Gá›čRĺ~ző™Dű€ŠSßvëŰľ+wA9ôЃݯBýÔśLűNíW7٤á1yŸMôůAÓN˜÷>÷Ţ{/w¨Ę-Ÿ}öšŤę˘ý˙3ƒBŐňá_˙ş=|M,éöoźń&K–.?pŕ€ˆu§œrş˝đ‹áÓú5ÉÜ1ńŽöHúO}˘IOUŚ9î¸?¸0‹ßŕÁƒB“c{†OkR<Ú>ýôÓđ:Uĺřîťď"Jšj˘ KŰ öBţńśíśšd‘řOÄśŽ]jŐąĎ>{…× <ČśŘb´ źÄłxńb;ꨣľďQFżÓD˝Bgë­ˇž|ňŠ6kÖěđeSĹ+ľńŒ;&aEîż˙űË_.YUKaíƒýű]ľˆťéŚ[".§ýźŸZ¨d"0Ô)t¸îşkQ „(x”Šž=#Ťź,]şÄŇM­yÖ_}×^ËO­x´üöˇżqkhyíľ7ÜßTýýŽŚĎŞćwÍ5˙ˆhűóŃGťżoˇÝvK8¤sŔűš ‡w›+WŽpA˛őÖ[×m_}5+"č˘J0z­ožůŸáuëŽťŽ ŠÄjSäŃßÓ N mŰł=î_˙úWë>űě3;é¤SÂá…hôŮAŐf<›mś™ 4ČăâQYő{ď˝/|ZŻówŢjS¸– @ö͚5òiȐᖠô’tđÂ,§žzrř‡Vą‚&ŞÄ’Ž‹¤ëąˇPK˛Y˙Ď=­…´˜÷+e~}ĎńÇŻ­pŢyÚ÷ßď }řiâ7Ť!éÔŠŁÁő×ßŕž‡G“ŻQˆĽá>÷8ýüó/D„X’1bDäŻiⵁ҄B%j!ŕ>|XÄDžŸ&ĆbM¤ÇşĎýöŰ7Fë‰ţű“aƅ&4ä7U%Ń6¤–8ҧO†˜=űkË5ÚwUTT4Z˙ÓO?Ůôé4kűMśŞ3Š2Ël`ýúőľţýűťJj-âoťó¨˝Xź‹çńǟˆřuÚFmäŞ<͝ŰP‰+ş‹Úź(°ˆ`Ňx3fËđé]vŮ9ĺjH;ďźsÄé>řŸe‚ÚâÝsĎ˝Ží×ŇoôčŃŞŽ‰Úęœxâ 6tčPťřâKĂ_Jo°ÁˆËŠ"Í_ţrIĚűóoť˘mNíƒbéŮł‡Ťd˘mQĄU_ń_<‰ˇÉ˙ý/öký¸ő÷úŁ>ŠyŮ3Ďüł%Kćb‰ŢűŰůFßËé˙ Ń!­‹ţ12/‚,đ€€Ząb…•••…OkŇ&Ö/¤;î؈Ój'tÁ[QQĄ]vŮĽáőwÜť‹ôéů äĺËWXşüíĺ—_ą–š2ĺĺ¸çŠâŒ&ݒ‘¨˘Mô„p—.]\ŸŢdn[O;wŽXçŻ"ă§Éě ž˜,S¸ ý:>žX׋žěާŠ_Ť#?¨R‰Â,ăÇŻ­Ä˛ÝvŰćdeţüď➧ś<ţÉpMš'RUU™đ|Ue8昣m=vw"RŐÔý‰žßŰożcŰlłuxîß ęůŰ'É#´–Pë0F_ôŞšX&UWWťżÝŢßďîÝťťś]ăÇoo;î¸CD/{UARxGmw$Ö6¸ëŽťX2şvíqş}űöŽ}ßÁ3LÓUUŐ1×G?n}nˆŽâÖŤV­jÖz b…NZJáţK/˝8ćAtçwŽű˙÷Oů4mÓř˝@[4dHú˙—ęęę­¨(őĎČú‘ĆE]bńăŢ:ýüĚ3˙ä~݂ł%ôؑXڃ,üď Čc_|ń…Ť ŕQ@%şeŞą4hP(ĺôÓĎLŘÚBˇí÷ůç_XPœuÖqĎűóŸĎ°)SŚ$ŹśâéߝĐŔ‹bžѓdK—.MşŇKeeĽŤ”ŁÉĆľ÷ťľ‰î_-JüZZ>ő‡Ú&›Ź=ý÷ż˙ĂnşéüԂĆOA‰dŤ IźmJ ˆŹŇ rĹ-Ą°ˆţ}Ş^ż'Ÿ|Ęľq™7ož{Ý.šä˘ŒYžţEwŰ^xOůŰߎq˙ŻŐ˙Á˝ót˜ŽĘ,Mľ÷Íúr"c‰œÔŢŮř°mŔÔŠoGœŢmˇ]\ÂÓŻ_?Űoż}â^_żR>ĺ”Óm—]ö°?ü(îĺt›ťîşsÄşˇŢšjA ‰Ü_ţňČđi…7źV˘Iž‹/ž0ŠŰęĐĄƒmťí6ÖkŇz÷ÝwX§j8Íü‰žxö¨ý‰‡ß_̰–˜9sfÄič đh|-Z´vRYăo*Gl˝ő؈°˜§WŻž6zôćëZZQJŰ­űÁŘ1ÇúíŠĐ¤ůœpř'Q•¨T(÷ÜsχOëË;=ˇwqšGyĚ|_~ůeŁPz?ďźóv×*¨)Ú§ßqÇmöí W}öŮg–n={ötmƒźE{c•ýöŹłNżˆÓţv=_ŮžLÁŻDUŃ≮´˘ś‰ˇß~‡kѤ‹D˙MMĹW_}qZmâýmUĽ˜űîťÇ…Ď~ý룜 rQŞa…XôyŮ˙˙l…ÄŻźň˙\PE•WŽşęęˆŕ¸W™E×MEžY<Ɇd*Č  xĺ•W­˘˘"|Z%ü=ôŕđiľŔˆ51¤–ż˙ý vŔť2˙Mýçí°Ă˜€Ń}žţúÖÚôÝ+ޏ,b"íÖ[oˇ›nşŮ–-[^ˇçž{4 âÄsîšç4š ×ëč˙şL™ňrÄéčV%Ń­yžzęéˆÓ Źěľ×ëTYáěłĎŠX7ţwöŢ{ď[KLœyŸŞŞŁű6xđ Đ}źm?ţHč˂ËíčŁń%ň›ĆîŰoG†âśŰnœĺMV_xáyŐR´o¸řâ‹\ŕĂ/zűM–*;řiűŒŢöŐę$^P-}42¤˘öB›n:*|úÓO? TĹ,$vĂ 7şj$~Ş0róÍ˙t­yԎgđŕAn|kŃq­ťá†ëBëţłĽÎvŰmúű˛§ĽŰG}qzȐ!îKçčíBŰÝ~űíë?ŤŁiÓŢs­ˆ<;wv{˘iŰ˝÷Ţťíß˙žĎţň—KÜezőęžŸčĘ‚ ÝĆŢ{ďeé˘ĘKŃUY&L8)ô÷ť]Ä:}FÚÄ6Ř`ˆ+“~â‰'¸żń@>Iľč)§LhÔNHÁë Xa]G×MUL›–éÖBňXEEĽ+ÝŻ_úzN=őäĐňžł•+WÚě^Ż˙ )Ř j%_~93éűĐ$QôU}Ŕ I•~Ő­IŸŚÜyç]•Ž=öˇí;Ô>čÁ˛ęęj÷<˙ô§ÓÂç]zéĹ6uę;îuIdذĄ6iŇÓöřăOş0̘1c…`tű'NŒXˇre…uëÖ-|úż8"´n…{­5ŠŹ×ţü˝ ¸śĹÉľ×^cŰo˙„ŤęĐľk7;üđCmýőGÜŽZEO”'K÷­VS^[(ýG˙Žťî°ýënWÍG&UŢřýďu]‹&Äœš÷Ţű mÇ˙űVĤóśŰŽsěé”ĚvŽ€ÜË/żb-uČ!‡&Ž7°É“§¸@‹Âb#GŽŒ¸ĚŹYłmúôŹ%˘'Éő 0mˇ/źđ˘Ť6ąĹŁí‚ Îk4ąŸN "ŞúË AëšÓѓ˙TcÉ-ÚŸţ…vůĺi43fKˇ4—öő‡2iŇó–./ž89ô÷âx×NÇŁm@cf̘a?ţř“ľk×Î?{ôčŢčúţę3úú´ N Ż;ţřăl˝őÖł—^zŮľď8p yäá.0#úű¨Žţ>{ˇĄE˝{Ż}<ţó™ö÷ż_㪌őěŮĂöß;昣-]tŸ÷Ţ{ŸqßÂëô9äž{îvçő¸ľĎ‰Ž†§}Ž?ČäƒTĂ ŞúčńÚ ůC,ożÍ˙ş-AĽiA˛Đ˘¸ţóŚĐäíAŽź˝¨rĘ5×üŐN8a‚˝ńƛ6nÜ8{ꩉv÷Ý÷¸ś;ÍĄ˙^sÍß"&­V­ZeˇŢz›ĽS˛Ő ôW/Č2`@˙F›üăZ2…5&Q{%Qľš3Ď<Ý.˝ôň¸ˇŻ ̏?.r“P'tBÜË]ý?Cc^Ä:ľfŇcňŒšĄ{í{ěńĐÄÚš.řsúég„&îîłŇŇRwUË9âˆĂÜËóĎżŕ‚9ŠĐ}?ýô“á÷P•bN8án‰Eóüó/2´-oźń߈Ójo˘ö8+VʰtIf;WxŹĽA–×_ÓśÚjKĆňW(ńÓ$ôšçžńKŽć˜<ů%תL“ő˘í骍Žp‹Ÿ?h’ ÚŻœqĆéÖ7„ěž6ämggœq– u~řa ŰőĢńŹ˜ÚěxŐ´2fQëŹ .¸(ô7đŐET5eă7Nx]ý=Ógżř ęř<ťďž›[âůë_˙ą_Rhí¨Ł~>­0ŮD1UůEŰjşZ =účăĄ}ÍVmR÷šAÚŤŻţäókjV‡ţOZäAu}׌Ď÷ńč;AýŸWߌbY”ÖBĘb´ě×kY@k!)ŃönżýΈuj5qŢyç¸øqۇ&PţÚ˘ËůçŸŰ¨ÉmˇÝáÚi´6ľđO¤)HâŻDPYYéJúýęWGŝŕýă´ÓΰŸ~ú)îeÔşHK´›ožĹÝg´Í6Ű,|\- ;ěH›7ož5EeN9ĺtK•žËAęŞ84Eëżř•}őŐW†śĺű£ٳżŸÖdřV[ą\2{ölWŮ"ޗQUUU6aŠIm ń,^ź8´_='á^SŚźdˇÜrŤe’*RÄ ăčKżĽK—rĆÔu×Ý`Çó;{çw’şŽ~ą¨śDÇ÷к䒿DŒM/̒Î6CŸ|ň‰xâűüóϓşźžhžëŽ{ě˛ËŽhT]L§Ď:ël{ňɧšźĘĘŞĐßýËmҤ"ÖßyçżÜcJt˙zm–/_nétŢyŘĂ?Ňäĺćϟz˝Nvbťf͚‘Ő%—TWWYKmłÍvnŮoż†X<şŒ.ë]ŻĽRyĚm ­…¤ě–[nsĺöőKdĎoűW!äO:ŤŮm€ôŤeU‰ąL›öžŤÓÚöÝwŰa‡ńáӚ Ó^ô$ŮłĎNrżÔö~í­I˝+ŻźÜöß˙ ¸Ńj;˛ß~Ů)§œä*HtďŢÝUjQPćž{îumwbQű C9ÜU:Q@żŃÄšÂ-Şź˘_˛Ë'Ÿ|j{칡íšçîvŔűŰŕÁƒ\[˝Gj[˘öGšűęŤY–.?üđƒ ¨¨]ĚÁhn¸ĄőíŰÇýŠ^óŸ~ú™kĺ ÉqJŤś]j/äomĽń’J›ŸÖđä“݄ń‰'ţŃFmíڕšŕݛoži˙ú×=­ÉZJű•/żüĘľ6Űf›­CŰo/ˇ}ϘńĽŰ†TE頃´LRđH"„ĐV(÷͜ů• TöďßßľâŇßUZëŐŤ§ ˜-^ź$4ĆżuÁČ×^{Ýć̙žŽBTrÉ%e´2Ë_̍˙ßŰÖ[ľqăśqŃîÝ{XçΝÜߐ%K–şÇřÎ;ďşż-‹-Š{[şźÂśÚvöŮgďĐvťYčšörĄ>™3ç[{÷Ýwí‰'žtˇM—?ţń¤Đ6w@č3ËŽnڐŤŞ°č3‹Úä鹤›śůüă:{ꊧCŸ)öuUŹzőęzÜ\eŠ™3Zű=÷Ü󎒐ŻÔfWŸßs‰3š–l랂$Ď+Hâ° Îio)ôzKњuEQ‹ÎëŹĂŃŁÇźĽŒőŸJ™×­[ˇĐDĎ#6pŕŔˆő 1\ýĄ ÎG›,›Š /…+Î:댈vB˘É`UöHT­$×}ôŻ\›žăřń;Dń~•5dČđ˜ç7ľ>š*9ÝzëÚ š&b÷Üs_C0]}ő•v衇„O÷ÝwśĂť´¸mRŽR‘´-űĂ,˘qqá…ç\8 ůMAa€\í*)ńţßT:u˛ňňv– †OwĹFO׎]ÜáôéÓƅôŸóekkŁ–ú5‡užĽŢw˝XœÓ‰ŁGk˛ĽY¤…*kü öŻÝf돳Nx˝~É}Ĺą N°É“_rżž7ož-Xđ˝;ż_żž6`ŔW}dˇÝvąž}ű6şm<~÷ťăó*Ä ŇÔŠoť*Ş $C‡uűU˙@°(t¨Š3~>úx› ą śx•YN;í‚,ŇNU†s%ČŇÜŞŐmAiŁ űď°Ýxăőáv:ž~ýúš $Zšcúôě„&؏?ţhň×ʕ+íŁ>v-2<Æm@% ´OßrË-]hQmßüm Ôşäţc€'V˜Eż<Đ|šV!%ŰTzŊ•ŽŐfé16U­kdVšä<ć˜cíä“O˛ă?ÖJJJŹ%41zűíwŘ 7Üd555 u˝˙ţtŰb‹Č*ď˝÷~Ěó“Y‹Z1Â>üđC{ĺ•Wí­ˇŢ6Ă/y¤íťď>1Ďťůć[mŃ"†ˆ¤0KuuľvÚŠśzu]~ůU™ J'eeeĄď!ƒ¨ŠYM5–f*HĂĺ bOtXç´ˇú˝ĽhÍş˘¨EçuÖáčŃcŢŇ .Y˛ÔĂŔí<Ţößkßž<Šëč?uO=5Ńnšĺ6›7ožĺ3U§šřâ çŐBiüř ‚D5Ţ{ďmëÜšsŁóžzęi;돳ŰěŻĘz÷îerÓ…‹ ůC­ŠťwďfAôóϋ];ĺLęÚľ‹;œ>}ڸЁz˙.[sXľÔŻ9Źó-őžĂčĹâœNt}6{ö×6hĐzÖŠS'ˇßţřăO졇ąçŸÁhm Š,[ś<ôc' =ŚL‡XňY€ " ť¨ČŸTşcǎ+VŹČÚöň­"KĄhśúú&ż{@lťůKÁHZ[6C,ůˆ Đľľu ÷°íä7HÔҧľčž ą¤ŚŘ4[míj+..2šEŰ.ň[UU•­^˝Ú:uęd%%ىEÔÔŹśĺ˗ťűEj¨Č´@MMČ=lťmƒ%‹/ś+VZŚé>t_„X҃Š,@ TWݞŽ @ŽŃś €śŁ˘˘"ô°ÚÚˇooĺĺí,*+ŤÜí×ÖÖ҇ Đú˘rŐŞ+--1šAŰ,“ m>ŞíĎʕ+­]ť2++k×â–Cj!T]]eUUŐVWWgH?‚,@ éW}Y€ÜĄmm—‚'•n)**˛’’ˇč¸–ÂÂ+((p—­ŻŻ]žŢ…`´¨EĽ‚Ń™GhĄĘĘJ+//ˇââ"lŤW׺m/ RUUe–BĐb*M řŘV€Ü@HZ•TVň > Č´ŇVČ Y€-_žÜV­Ş1ÁŁmSŰ(€Ü@HM”Ż^]k‚CŰ$! ˇdŇ śśÖ–.]Je ´-j›Ôś wdŇDćK–,ąĘĘ*Đz´ j[$ÄäžbVje˛jŐ*ëĐĄƒ€ěP+Ą•+WZuuľČMY€ ĐDş–ňňr+++łŇҐj#¤í­˛˛Ňä6‚,@ib]KQQ‘•••ZIIIčxqh)´‚‚Đ<őőőV[[ZV[M,Ťh!ä‚,@h˘˝˘BŐ"¨@<…AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABąhS ­¨¨ČŠ‹‹Ýń†ĽŔ CKŮV__ZꏎŽ>´ÔšeőęŐV[[ëŽh;˛m@IIɚEá•"‚Dę‚‚˘ĐgŐĆçŐŐŐZMÍęĐRăů §\)--u ŤÄ.+ÓRćNŻZľĘ-„Z€üDČ3íÚľ }É_Jĺä%/Ź­J-ŐŐŤŹŞŞĘä‚,@ž(//wżRUYv ß)¸­ĎŔ rWWW[eeĽČ}Y€§_Łśo_n…´5 r{U +**]Ű!š‹ ŁŠŠ~ZRRb@[§`w‡\Đ[ŐYjkk @î!Čä ľjßž˝ˆ¤ ˇ–ŠŠ ×r@n!ČäXdŸ>7ŤŠĄ-rA G6”J/.ćc< ŔfYšrĽŐŐŐ€ŕ+4§/ß;uęHˆh&}†Ögi}Ś|Y€€óB,……|ń´„>KfrA ŔźKAÝ€Tč35a řř6¨ÂÂBëŘą! MôŮZŸąőY@0ńi¨:ĐNH3}ĆÖgmÁD öíŰ[qqąH?}ÖÖgnÁC˜˛˛2ˇČ>wÁD˘˘"~ d‰>{ë38€ŕ ČHyyšČ>ƒÁBˆŇŇR+))1ŮŁĎŕú, ˛Ńž=żZŸĹ€ŕ Ȁʙđńh ú,N‹! řŚ€˛˛2ĐzřLA •ľk×Î @ëŃgr}6ĐşŠ @Ť*++ľl[wÝumÇw°­ˇŢĘz÷îm}úôvëřaĄ-\¸ĐŢ~ű]{őŐWíŰoçĐVčłyUU•h=Éţěł Éó ’8,ˆsÚ[ }‡ŢR´f]QÔ˘ó:ëpôč1oé—,Yj@Ž())ąŽ;Zś 2Ä&L8Áśß~ť¤.˙îťÓěúë˙i_|1Àś`ŊVSSc@ŽčÚľ‹;œ>}Ú¸ĐA]hYść°6jŠ_sXç[ę}‡Ń‹Ĺ9č0úx´Dç9´ZQiivŞąٙgţÉ|đţ¤C,˛ŐVcěŢ{ď˛3Î8Ýݐď˛ő@lY€V”/É;uęd7Üp­yäáVPlQĆľ íż8Â݆n ČgY€ÖUlZ…Ú ešŞ¨\}ő•ޞJ´ˇß~Ç&O~Éţ÷żmá…n]ďŢ˝móÍ7ľ]wÝĹśŢzlÄĺuş­“O>Íjkk 4a;hĐzÖĽKˇ˙ńǟlŢźyVWWgĐVéł:텀ÖAh%ٲœ~úŠB,ß|3Ç.żüJ`‰6gΡ<ůäDŰlłMí ϳőÖ[/|žnë´ÓNąż˙ý–m;v´ 7aƒr“­ĺĺ폺z•-_ž"ôœžą/žřÂ~ţyąa­ƒ>ČÖ]w -^źŘîšç>ËŚ>}ú¸J>žgŸ}ÎfÎüʐ:UVÔ˝ÎÚ6´ŽŞŞĘ-ZچżľĎ>ű<´}T‚§¸¸xÍžl°őěŮĂ:tčŕÂ#+VŹ´ďžűÎf̘asçÎłlŃcŮi§#Şh,ÝvŰmA ődZIIIf?Ž1Ü?üЈuď˝÷žyćŮĄ ÓM^_A—cŽ9Îţú×˙ł-ˇÜ"źţˆ#łgžy64ŮúĽe˘1[ÚŘą[š `żňňrˇôîÝË=Ć?üČŢxăMŞ€&Ç#OoH% 4Öwß}7ëŮłgŁóˆĐ2hĐ 7n›:őm›>ýCp <ČvŮeg>ňSőŹîÝKCK7Űxă\ đ…&[EE…eҀýÝxňÚέZľĘ- .ô Úć͛oK–,vՉŽP0ĄS§NîWäăÇooýúőłI“ž'ÜëŻ?8ôţíŢ÷˙ý÷ŽzÎʕ+]5”nÝşÚĐĄCÝqío=ôQu”L5jT8Ä2eĘKöÉ'Ÿ ö×úLĂßP ű˛­Ŕ›ˆÎľ“‰n)tůĺW6+ÄâQ˜ĺňËŻ˛Űoż%źNŐQÖ]w]űöŰo-“Tu ą,[śĚľ<úůçŸ]ŽsçÎn‚_Ő*† j_~ůĽ}őŐ,CëPEUʑ×^{ݎ8âP74bÄ*„´ś…}öŮ;źďP렷ޚÚh›V(Aaˆ]wÝŮ"†Ý t™íÜű€ÖŁ÷mçwrŰÁęŐŤmҤlÖŹĆű(˝O;í´“Ťh¤ę,[o=Ö^}ő5˔Ž]ť¸ĂĽK—b€´˙&Čd_ĄČşč9éśăŽ;Fœ~űíw\Ť –úŕƒ˙Ů;ďźąn‡śˇL9rm{šgŸ3Ä" š<óĚ3ቆ‘#74´ďő˙ůçĹöĂ?ŘźyßEŹGóíśŰ.áýĆ˙ű–˝řâä˜Á´úúzäzüń']‹QĽ˘X­ˆ=ë­ˇn¸Z>Ĺ ąČŞU56yň[źxą;ݢ+Ýźj,+Wfś…äŞLfŸÄ€Vŕoů“ [o˝UÄéɓ_˛TŠí„*ąxtüžűţm™ÔľkWwXSSă‰,[śÜ^yĺUk׎UTğ”Ő/k7Úh¤k}ŁÉý’’bŤŞŞvm>>˙ü WÉEa€DÔŇhă7r•GT5Ą´´ÄľĚYźxIčú_šĘľľľ1Ż{ęŠ'ťÉc…‹5j“ĐăŮČľQ;˜ýënĚńSřM7ĺ*íč¸&Utľ•ůřămáÂE– ľ]Úb‹ŃîqwîÜÉ.\čBNjٔeeeŽŽx“ő:Ôc×ë­Ş9M=^˙k¤euÖą-ˇÜÂúőë몌(ŔĄń Ç­ÖE™žĎúëŻď‚şžÚ$ŐÔŹv•,f͚íÂ^^p$ÝԒŚOŸ>îřœ9slÚ´÷šźŽĆłžłÚ ‰ĆĎK/˝ó˛ƒ˛#†ť6D#ť+VŹt-ź>üđC[´čǘ×SŐ§qăśqÇŻżţŸn\Ş‚’ś­Ž;¸p„ś)so{иÓ{ 1¨űR‹°yóćšçď~˘Ťś˝ž}űZyy;÷üřănťýôÓO]$żM6ŮÄŕî_4ćΝkďż˙{?3ÁۗÉÜšó^VČí‡ćϟo<ň˜kw6zôćĄ1ŃŰýÝxńĹ)îyűi;ßlłM]ű:˝‡zjĽ1űŃGŸ¸í @~ËôgvądZAŚżďۡOÄéTŞąx4Qď§ ÔLó&o5ůŠđH˘€Š|üń' ĎďÔŠ“íż˙žá bn[!-š |îšI.˜˰aĂÂm[üTmA‹&Č7ŮdcWŁŠÇťďž{ې!C^FA—wܥјéÖ­›[t_zo^ý„Mt|đ.hâŃšZŢ}wškU“*Mj{“ä^{'î´ÓŽî¸&Ş.LžUŠbŰÓĽKˇč˝Hćš§z;zöŰo[o˝ő"֗•šIp-Ţ{ŻjP*6Üpm%›×_3éë}řáGá_’WV6ĎĂƒjć§÷Ż{÷RŇRčKĄŠŚö!چĐu<ÚŢvQ@۔îGŻŁśg˙őôú+˜đĚ3“löěŮ1o_IďßđáĂ#Öë=čßżż[Jxć™çâ†ŢƍŰÚÌŽBâńś%dÔňgćĚŻ,ÝüAľóQ€,…2…Ë´?Đ~(:l˘÷[ŻŠ‚> Mšô|ÚBj–ŕą*œ˘Ç¤pHŹ K˙ţë„ßw]nŔ€1ßëAƒƢnOĄ-?á4^ýĄ Q3-Úľżœ8ńÂJDUŠvŘa|ÂË ĐßľŹSČĹOaB˝îZ´]hżAŰ dZA X&őěÔX´hĄĽ*zâľWŻŢ–i_ý›ä–=÷ÜÝľR€–ĐdäGnď1{ö׎zŠÂ&špWŰU¤Đëěo?ühŁŞ*š¤ÝkŻ=ÜD¸_|1#ôżv!ňňö6bÄ0†Ń„ë{ěfO<ńTÜÇŁűӄ¨*¨’„Ş(h˘×8ĐÄźWQCŐ Ôůá˝őî>žĐŽ&e5‘úĆąC ěłĎ^î2Ş|Ą÷˛  aŇYŐ ô|8P…—ożýÖRáľŇóńŞ` ‰eUDQĐ%ى_UOP(kɒ%öîťďŮ÷ß/]ŻŢUŐĐăŐk ç^__—0ŕ‘ęíěźóNáKC%†Ým)¤÷[ŐN4Ž4é}˙ý˙Nű¤śżüôÓOnI–ĆŻJąč=?đŔ\• ŃóŃřúńǟÜŘîÓ§ˇ_šđטITľFa+Uay˙ýéŽBŠŞ(ـȰaC](AcY‚zýTÉBA˝~z~……En›šóÎťbVęPF+Y´h‘Ť6˘ę)z|ƒ˛ĄC‡şíř ƒ°|Ř=?…śÚŞĄ˘”Ž§ÇŠĘ@Ú+ôĄq }Ä{ě+Ľ“Âz]őşoˇÝśîuN%ô¤@‡^;ŃśŚ×T­źÚľ+sĄmןڗ=őÔĈ0ËţóyYžŁŽúĽ;TŐŤ‡~$|íg˝đbźËč´wŮůóżs!>…•źýŁ_tL­–˘ƒ,şžŞŇíů÷őÚž9ä ÷~‹śCíőÜŢŃőFÚŘ˝‡zmîžű޸’„Ń{ ë*ěĽJ@şoŻ“hťPđOăR!$UjQ‹´ŐŤkŹ{÷în›×xSľyőŐäĂyrKŚ?łˆ Đ "ČŹzKˇčÇ\…ďőgĚřŇM†+\˘‰Ęßţö7nűË/g6YŃ š&ă5Ş VU]ˆnYĄI|U ŃĽŞ—čpúô".ٰƒ&<ëęj]H%şEˆnsˇÝvq­‚4qŤvAń&ÄbŃŻůăM€j˛tŰmÇšăšpU+ ľĎX{_3Ýă;ôЃ]CĄľqŃ$|ŹűŇÄţý÷?ŕB%ţÇŤ@‚˛éŚ›¤dŃóU(@˘ŤZhŇYA–†ŕÁŕpŰĄDtyMö+Täo‘˘ç˘ ’&šu™Í7ß91b’^c@ŻůnťíęZť(DĐTë˜ćИőŞč(h”.zœ ŤˆcĎ<ólDpKă@ďáŻ}” Bi{HdŃĿƗż-–ƧÂcڞôúhťyôŃÇ#nGŰŔřńۅĆďh÷<tŠŽŹ¤}€bŃĺU!Ć˙hÜ6ËľˇQA™‰ŸŽ¸ /p ńŻ ‡čń̙ó­ýâG¸çŞPLźPKéuŃmŞ%›śÇ_ýęnŹiüöŰšÍ ?éőđB,zďž~ú™ˆëŤ"ĘÇęĆľÂBzíď˝÷ţp0ÄżP(HŞćhÜÚiy—ą5ăkdŃëŻ÷;şĺŽ‚+˘qĽ}šwÚO×óŞŸD‡\óB,Şýţh;VpNA$U¤‰5Ž< Y-X° ´2f+ކę?ťš‹Ć‹öőţ×L÷ĽŕBS ?jl)č’l‹7š%óŸŮÄÂ'q d8fHGő”^˝zFœ^˛dŠeš&gŸzęi7I(šäÜrË-엿<Ň~˙űă\uŻň@"š¸1˘Ą%‰&ףC,M{•Z‰Ś MMÖ?őÔ3qĂ ÚxÔę"ž+V¸Ę$ńčţ˝=Ď?˙BDˆĹŁÉřɓ_r•TY Q{—_~5"ÄâфŹWĺcŕŔ–  œ/žř"â<od6ÚВőňËŻD„<Ş’0yň7F´=ŠĽH&nGáo{UŘ!Ökü駟ŮC=l7ÝtKZC,˘ąë‰őţľ”B1ˇŢz›kůó /6Ş>$ÚTůB2Häíˇß‰ąˆ^Ó÷Ţ{?|ZaŚXaUÉń(”MŰź(bńh|)Đ"ëŻ?ŘľŒňS;QEŁXă@ۀŢĂ[nš-í!ĎÔŠoťm^cN! …3Tç„ţ:Üßmó š4e‹-^UoRë X!ďľ˙ţ/SfÍZ<‰Š´o_nçööŰďşCUEŃśĺ翞˙öDďÉíˇßéžoź÷GÁGŻJLSăUűÍX!Qť7Ż}є)/Ĺ ŞÚË /Lżö ÁČOTdZY€<ôý÷?„[4Čć›oęŞI¤B?üR˝˝dibňŧ¸J Ş ĄIFZ~u?Ü- H̘1ÓMŚŤmH´ĄC7ODxí2bѤ¤&áŮfk×6˘{÷n.$â§IÍX› @1žůóçǭ ö+z̢ʉ*a¨ Á˝÷Ţg‰č5œ;wnÂŰčŃŁ‡ŤŢ 6šho o˛\ŻYtĺ…ÔŢD•$ÔŇHŐüm”bQx'QUťŃëÓż˙иXßM:§űvüá=?•bľ,Y°ŕ{Ë/Ě$ąMźsĚіČM7Ý1yŻă €$âgŻF<ń^_˙öŘĐŤ1=/-ÚŽŁďGÁľ'mť‰ÂZzoźÖV E(¤ĺQpLUŽ čďcľő‰Wm$¤SŕBű2U QŕF-ĹTqF‹*Giß ĐKŹ×TBí—$ŢXôh_śýöŰš×UűI…Ý2Eďł^S˝śŞFőÎ;ď†ĎóÚ )č¤c:T`GŁüÁ?íDˇŠm‹zíŃxŐëY^Ţ.îet;‰Ú: >Ô*ČĽŠ7ńč|ŻĽRŹ 3 ĺ˛yHŽ­ś>­Öj‰’Š]wÝ%âtt۝LSŰýŠţĽ—^q•NÖ]w ›řTKU7PeM żůć=655ź_ŰÇâWtíÚ8Čâ§ŕGϞ=ÜíŠL—.Ă-PD”xâUUPđZl¤ŁÂ‡&nVŹXÖĐ$pK‚,šĚőŞIDWcńhb]A˝_ …$ ‰YMQČG ôšĹ {¤r;•ĄÉó. q§öV ¨:‹Â/M…qRĺFyc"ôR¨BA„N:ş÷RU4´I˘ą,ńB6ţqŤę‹Ç uEߏŰUh#Ńśë ^řĹŁąśË.;ťmVm}žúj– V)ˆ+ü–IÚŐG‹ÚqŠ’öe |(¸¤qx衇¸q§Ÿ˙uóWŹIN˝Ś Ăl°ÁˇŸĘ4UQŃřé×ŻŻŤ’ĺľ2ňB•ŢăŐĄÚŻůƒ,şź×–,şK,zčŃűܰďíâÚeyۈö1ń$ ˙ˆW=ŚŠń&ŢöŻĐ˘ĆVSˇ ’CČCŻžúšrʄđéącˇrm+š ÄŁj,ţ`Œ&§_yĺUk šœUŰ -j1ĄĐ‡B,cĆlé&CǏßŢ***\ż=KSU+übýŞ_ľ›m6ĘV’iŇţÇŤJŠJbI˝…"ü§=ţÂ&›lŇäxŹŹŹ°Śč˝öču‹¨HővŚLyŮ=§aĂ†š ‹Şihžůć›Đ„ü' CO-ĺŻă˙J{îšç­ßzëąá ľľ‘€ô~č}1b„ (ä4ţç|Ŕű'}˝čĘ.ü‰[§}ĄBz/ľˆ^ăożkŸţš;Ě&UҢę1ĽĽ%ŽâԘ1cÜ{ŚđTC덾‚üŻGŹvcџˤZm)łgĎvűam+ @͜ů•[ć̙>l˛ŹmeŚă^Ő,ÝN, ŠxUšpĘTťŻ’–‚kÍű{QN€4!Č´ 25 'šŒUkMÚz.¸ŕÜФÜqIM~úuîÜÉ]×oÚ´÷ś\Č&MBż÷ŢűnŇô—ż<҅YƍŰ&"ČŇŇ×:zbäȑśëŽ;EüÚ_á…%KŰŇĽË짟~rŐ9ä`K—l„PRĽ×iƒ 6ŸVkŚŚh˘^Ő%ľiňˇŐiÍ˨5“B"g ¨úŒť‚ zZS… mé¤ “*[h\ŤâD< m‚ˇ]ŮtÓMB˙vsU=ü•=l8ôЃÝd˝G÷Ł÷CcYmS.\¸ŚŇŃpk-éÚvEÁˇĎ>űÜ='UéۡŤ@ä…á´¨RˤIĎ'Ź“)zUľHű˛C9Čúőëçö9ďź3-fŤdř÷™ü›#Ş|¤@˜‚ z}ő<Ô˛LŻŻǡß~ë.§CV0EľtŇ6%ş~Ź6]˝{÷˛< ˘]›ś ľŇx]źxąŤŞ´÷Ţ{Ś0L瘐űrásř_6Đ ęëëB“eMOާâúë˙i÷Ýww¸ †ÚVüíoWۙgžt˜E!–żýí˙…[Cˆ*˘ÜxăÍ4 ¨ǨQŁÜDfűöĺŽ-ŒxU-ôků›nşĹZBí+ź‹Şuźţú›6kÖŹpű O:Ş´řŤp¨ÍKĐ ş F4×ȑ†^Ç7➯׼):u ÷żn™¸ľˇŇ"š´VB­’FÚĝŢvŰq.Ě4{öזNj/ŐĐڧŤ¤Éűdč1ymR˘ŻłÝvăÂ!Ţ}÷](ˆćU-i-ţ÷âţ~ý[Jᅍ´hßŘŁGwˇoÜlłMÝ8ŃëźíśŰ¸íťľ¨jŠŞ)ȢP…Ć™d‰Ü7trŐ\ńĆľö} de’&{UHáŻÚʀýÝá?üŽr¤C…¤úôé:€w4\ţëŻco;{ ąč>ŚM›füiłC™ÉŇkŹý¸*ĂLœřŒhŰô™@ödZA]]˝ůşŹdČ_ڃ>쪔xśŘb´ÝsϝvůĺWŮôé$źžÚ Š‹?Ä"oźńŚ}úég–iúţvŰmçŽĎœ9ÓľiŽ‚‚ľ/đO?5Lâ+lќ €ßzë­ŽÄ2eĘKŽrC,eeÍtDÓDŞ&{Uą a‚÷턗ׄźF­Ĺk#¤IćŰoż3˘MO,żűÝ1n˘xĈáöć›˙űŘ5‘ßÔs8°aꞞ2f[ĄtގŸÂóćÍwËW_}e‡~˜[Ż6=é˛¨Šˆ2~üvöä““şžŢ/`4gΡç <ŘŞËłĎ>÷6Úľ+łÖämťŇˇoߔƒ,~ Qhůä“OíčŁĺÂzÓdŃŘ;đ@ľE*p՛^~ůŐć\=˘Bˆ‚R…@ľBŇőź ɏ?ţdŮ0kÖ×.ČŇĽK ęßżáţżůfNÄĺTŃKAŻżU^ű+]?šnKűmůđÏ쭷âďľĎL•ĆœöOoz ŠĆ´múĚ ű2üŐ9€X˛:¸îş\‹!?SnťífťéŚěŕƒ´ő×ěZ?hŃq­ÓyşLtˆEśß~;ŰgŸ˝-ÓT9Ażęײů曇+ËÄŁ {Ż˝Şř+|ůĺĚđqľ€IDżŞ˛ĄV.~jAâQ;Ąx† bŠŇřP• Yg~ÖŻ_߸—U•ŽOüŁ{ßźö٤qă…@ćΝŰdˆEžřâ w¨ĐŔ AëĹ˝œŢӍ6÷|]כ,Jőv4Ą˝ńĆŮřńŰÇ˝žZš(Ř"™~¨J…*X4<ÖAśŐVcšźŽ&˙ľ­ŠĆÓG}qžpI4–u…%Z“*y¨Ú’¨ňM˘ý€Ţ+UůńW×…† j;î¸CÜę< /-ZÔ’‰ŢöSĽ×_÷Ť}™Ć’Ţ›ŚčyxÔ6ÇŁ wz“M6˝G%qocĂ 7´ňňrw\ŐŞ˛aΜ9áśL돳ŽŰIt+:/آó˝–Yşž×~Č/rß?„¨}wK*CEóZti˙4tčЄ—>|˜ ă$Óž @njÍ 0ЖdZAśž×ÄŕŮgŸgożýNŁó4~ŢyçŘĂ˙Ç^{í%ˇč¸Ö%š(×DňĹ_ń0‹Úya… öŢ{ݏ̚VC]˝E-(źÉIMţjB<Ţíěťď>ś˙ţűÚ1Ç19šdÉÚjĽ‹&ŞÇŒŮŇŇA­Eź á˝öÚłŃäźh‚~=vs-d&IŚ’HşŠę‡W1â‹/’›,˙üó/ÂÇU˝!‘íśŰÖU牦ĐÂŽťî⎫bÂÇœ‘ŰQ @çŤBQź0Œ.Ł÷@Tá$Ýô¸&OžˌˇkľkLˆ‚XGyxxR˙ż˙}+ܚĆăgMţÇŞbĄçŁűHG0 Uďż?Ý*´ľŰnťĆ (ě ÇťűîťŮąÇţ6â˝îŮł‡Ű¨}Ú?ĹŇŁGźՓtQ%QU§Ř/\a$š^ďÝvŰĹ–DAžč*4ď˝÷ž;THeĎ=÷ŒîQľ“wďŽ+ԗ윋גH­ćš˘1Ş@›Œ1ĚxTĺČ byôź´žĄÎpˇNUƒź1îˇlŮŇpUU&Šő|őŘôާƒţîxŰË.ťěăDÓcŃžů°ĂÉJ¸@ë Č´Z ­ Öd]ڍ˛ÉЧţ)´LMnŃde“hú˙ŐW_ˇvŘ><ě…Y$Q[’T˝ńĆŽ‰&C5i¨ö>úeż*'¨ęŠ&ružBŢóRŕÝw§5ş-ľóP‹MţďźóNnňT--rQ@ŚwďŢ.äâŢzkj8H"jáĄÉMśŮfëĐÄww›5kvh2śĘ:thoƒrżŢWľ„x“ÔÍĄĘ ¨ˆîó׿>Ę>ůä“ĐđBӜnŻ^=ÝăőBÓŚ˝çZ¤d›W9BŻU˘Ş(~‹/qٚl_ýAî9Ä á|óMCű‘#Ž8Üľłúîťď\‰˙>}zŻŠFѲPĐ!Q˙TnGĄ(UńŃQ EcM­ƒŞŞ&áUĹČŤÚ  ˙>ř°ŃýrČÁáj9÷ÜsŻ{ţÍĽ÷öšç&š sm‡żŞ1wî<×ŽŚŞŞ:´tpT4^< 0xA?UhŮmˇ>î9uÔ/\ĐBێ‚ ~¨rˆnGă0ă9zŹ včľVpJŰźÚ-éąiťďÚľŤmşé(WHT}Ä˙>Ο˙-X°Ŕm˙ş~—.Ý8đś}­×óő*h[Š6věVnť——^zšŮ­ÎtyUŒŇ8ĐëŠíYď—şo˝îzž^`Oű8ľ1‹ŚÇ>dČú.°¤×DĄ;ÝžÂI%%ĽÖżĂóÔ{é… ŞŤŤ­Ľôú)äŁý°śŮłgťÇŤŔGŹ ^m ď×úî´*ŃíytZë5Ž˝*VŞ<ËŞU5n_­ËŞJŘá‡ę^ƒĽK—šVnŢű§}*ByĆ–ŇßççŸÁ=ô`÷^zč!Ž}Ř7ß|zŻ*Üë ý€Şüx—Ÿ:uŞČOŮüĚ`-‚,@+đ$˛u×\s=óĚsvňÉ'…'dŃDŁ!7ŢxKhŇř3Ű}÷]í˛Ë.Íj˜eٲĺöČ#šŞ#šHŐäŠ&˝ ÄhłfÍr“Ěą&m”xđÁ‡mżýöąž}űŽi{ąNŁËiböÍ7˙Űh˘ZëŸ~ú;řŕƒ\€fذanńÓDň¤IĎŰQGýŇŇaúôÜŠZ˘(l1zô蘗SŝXUw2Má/ä ÉkMź'KA…K4ŮŽ@†WąÂoůňĄ×ŕŽ‚…ŞčÄŞ¤Ł×HŸDRšUłĐűŽJ= Üh2ÝŤ á§ ôgŸäÂŃźśE Bľ$ÄâŃküĐCťĘŞN˘J8^ű­hÚć5ŽUŮ'ź€Â]ŞXM××y­d‘gžyÖUÇŘhŁ\pEUibQˆeňäČđ‡öezoôţ÷ęŐ+Áś_kŻżţf¸”Ÿ÷ŠÚç4—öO=5ŃvŢyGW…(Ń{' éyÄ §i_î˝ ĹŞ4ŁíQá'ŻOK}đÁ.هËY˛ä!H‹Ś€ŸÂ‚žx­÷oKßńźüň+î=Đ>Gűo-~ ‘iߍ}eŞAQť°G}Üm÷ş˝Xű{QI÷Ű!BّíĎědZ&55iŞIülúň˙vňɧšv";ě0ŢƎšěăÚp蹨˛ƒ~uމËW^y5bôŧ¸Ăl‡Y–.]j?ü¨ ´žŤh 6šX,--qU(4˜7o~hňyŚ›|LD—Őm <84źĄ› ×D˝&)2P…„˙ýďCwŸąh˛ňŢ{ďwmfT AȚÖuőÚ* ŤíI*TBďƒ*NhŇ[ít LčyôŃG Ť‘d’WE h˝^ŞňŁq§–=ą‚,ňíˇßÚţ󐍈ѿ˙:ŽB‚ŢÇďż˙Ţ˝WM˝ç鸽Îwß}Ż{45nJJŠÝřSxI÷ >Ĺ ň(€äU QŠT齞˙ţ•`´ýj kL(ŔĽ*%/ Şčů%˘jŞŽĄ`‚‚íڕ…nc•Ť˘ąŹç˝ÓN;ZhŸŠ`ÇÇj›l˛‘ á(XĄ}BDŞň駟şÇ‹*SéýW CA8Zô|kjVťíW—´­ĹŰöťukó¨â’v-ĄPšöŁ )Ą SzŢăXš˛ÂľŕQ Oc*Q; ďőĐűÜUÄŇ6¨×LˇŁ*:ńŢť–Ň>AŰ˝WýHűŢöíË]…mgŞŚýVs|r‹>ŤÓZhi¸\AŒă‰ âœö–Bߥˇ­YWľč<ŐL.=zŒűéܒ%éýâČ…1źš$ş2‹čKţsĎ˝ŔUCRuęŠ'ťÉmMħ2ŚŇu;ŠP@äČ#wǟ~úYR@î9é¤\E(…P^{íuä?D–rA׎]ÜáôéÓTśU‰ěekkŁ–ú5‡užĽŢw˝XœÓ‰ŁGKtžShZ…~9Ÿ‹TQŕ /Ž(ľŽŞgœqşˆäľ¤QŘkîÜš†ÜŁĘ# ąHKÚ rSŽ~Vň­…€V’Ë_ŽÇj3TUUi"uëÖdQ #Zä&Ż­Â{ńZňA ődZ‘&śKKK-)ĚRUUmgžyşű˘˙ŇK/7‘zôhA|ó •cëł6€`"ČXmm­-_ž‚0 "}ŚÖgk}Ć\Y€€óÂ,´ZFŸĽ ąš ź0ËęŐŤ @ňôš ;˛9˘ŽNĽĐ—[uuľhš>;ë3´>KČ Ĺ §TTT¸_“śoßŢÄŚĎ̈́Ŕ€ÜCČAúB^%ŇËËË­¤¤Ä4¨ŠŠąĘĘJZ 9Š ŁôĹüŠ+Ź´´ÔÚˇ/ˇ‚:‡ íŞŻŻłŠŠJ[ľj•Č]Y€§/꾨:KYY™ĐVÔ×םŠ…ŞÂ ÷dň„ž¸×ŇŽ];+++ľÂÂ"ňU]]­UWŻ˛ŞŞ*?˛yF_äk)))qm‡´ůÂŤHXSScňA Oé‹}-+WŽtĄ–†Ľ˜J-Č)ŞźRSł:üů@~#Č´ţ/ý ­¨¨ČŠ‹‹Ýń†ĽŔ CKŮV__ZꏎŽ>´ÔšeőęŐV[[ëŽh;˛mŒ71ŔŻYASh@d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ d@ €¤”””¸Ľ¸¸ŘŠŠŠÜRP`ĄĽŔ{ęëëC‹Ymm­[VŻ^m555ni‹ßéÁ¸ŠÄ¸J/ĆW$ĆWf0Î"ľ•qĆű‰ýKŰĆö‰íŮŔv‰í.6ĆI¤ś:N‘Ř_ă4ă´mb;Y€ÚľkgeeĽVZZĘŤ<Ł÷Soiaaq胴v…en˝>`­ZľĘŞŤWYUU•ĺ3Ćwú1ŽW™Äřb|eăŹmŽ3Ţwö/X‹ííŮÇvÇv— Ć ăDŒƒ\Ŕ8eœ‚í@z$ű¤ Éó ’8,ˆsÚ[ }‡ŢR´f]QÔ˘ó:ëpôč1oé—,Yj@*”Ö­ňňňĐY>dľeuuőVYYé>P)5œß­q…Lb|!gmď;°–ž|­¨`{˛‰íÉŕó „ýrăČĎżŰ@këÚľ‹;œ>}Ú¸ĐA]hYść°6jŠ_sXç[ę}‡Ń‹Ĺ9č0úx´Dç9Y€5”mßž˝učĐހh+WV„ţsQáţ“‘‹ßÁĸB&1ž Œłś‰÷X‹íČ>ś;$ƒqa 0NÜ߀ Čˇ ­…k(u׹cG’ˆKĕ&_ąbEΕźc|㠙ÄřB60ÎÚ&Ţw`-ś űŘî Ć „q€\Ŕ8r{;9YĐćuęÔ)ô˛MŃňΝ;YII‰-_žÜră;řWČ$ƲqÖ6ńžką=ŮÇv‡d0N ŒäĆ)›Ű€Ě"Ȃ6K=;wîúŁČf€ćŃôââb[ślY`{72žs㠙ÄřB60ÎÚ&Ţw`-ś űŘî Ć „q€\Ŕ8rc;…´Aú#Ř­[7>lĄĹ4v4†4–‚†ńťWČ$ƲqÖ6ńžką=ŮÇv‡d0N ŒäĆ)ěí@ödA›Ł?|]ťvĽo#RŚ1¤ą¤SŒďÜǸB&1ž z/ťucœľ5ě_€ľŘŮÇß!$ƒqáď4rű+ ˜Ű€ě"Ȃ6Eeďř°…tň>Lilľ6Ćwţ`\!“_Ȇ‚ĆY[ÄţX‹ý }üB2'ţN#°ż‚ľČ>‚,hSÔť‘[H7)­ÖĆřÎ/Œ+dă ŮŔ8k›x߁ľŘ€ěcťC2'ĆrăÎv ű˛ ÍčÔŠ˝‘1[c­…ńŸWČ$ƲqÖ6ńžką=ŮÇv‡d0N ŒäĆ)ĐúŰ€ÖAmBťv폟ź™¤1Śą–mŒďüƸB&1ž Œłś‰÷X‹íČ>ś;$ƒqa 0NÖŰ´‚,Č{ęyÚącG˛AcMc.[ßm㠙ÄřB60ÎÚ&Ţw`-ś űŘî Ć „q€\Ŕ8˛żh]Y÷ÚˇoO˙FdĆšĆ\ś0žŰĆ2‰ń…l`œľMźďŔZl@öąÝ!Œ㹀q d;Đş˛ ŻY‡üQCviĚiěeăťma\!“_ČĆYŰÄűŹĹödŰ’Á80 §@öś­ŻŘ€ýôS;ýô3­žž>|š 7ażţőŻlóÍ7łN:ŮâĹKě™gžą[o˝ÝÚ2ĆYŰÄűŹĹödŰ’Á80 §@vś­ ňZyyše҉'žš¤:*îů555öóĎ?Ű7ß|cŻźňš=÷Ü$ˇůŻ}űňŒĘÔřîŃŁťMœř¤şIك:Ô~řᇤŻŃEŘ^{íéŽ?ůäSvőŐuLJfůË%ÖľkWťá†CşĎZKŒłĽ]ýľîřÓO?cW^ůÖVč=ĎŐqĺ‰ŢoVVVŮžűîoIßĆžűîcçŸnÄş#<Ęć̙cA˘ž­W]u…m´ŃH{ţůěŻý{DĐ!hňa|Ĺ2věXŰmˇ]lă7˛Ţ˝űXIIą-[śĚfĎţÚŢ~űm{öŮIśdɒ¤nk˝őÖł[nš)´ë^×Лˇ0â˝Ýe—ÝţNűQ0UUŐáÓÚOžzęÉś|ůňĐ~óRűüóĎ­-Č忏žŚ>˙éůýôÓOöŐWłě…^´7ßüŻŐŐŐĹźěwÜćöąÔÖֺۚ?˙;–z饗í˙űĐR}|ą<ôĐ#víľ×YŚäëţeë­ľŮŐ˝‡Úż…ö/ËCďýWöÎ;ďşĎţK—.ľLş÷ŢťmčĐ ÜńÝvŰÓVŹXašî8ގ9ć7îřĽ—^ćţ†ć“|Üćóçš|‘kŸKÓ-˙­9Ÿ?R•ŻŸcsyœdę{œŇŇR{íľ—ă^OŸWő˝ç˘E‹ěż˙j“&=o ,ˆyY}núÇ?ţ>}Ď=÷†ţou›%óܞyf˘;ŽĎU{eRŽ˙žě˛Km×]wą–zýő7ěěłĎ5[[řťKŽĎ|üż[kĘĆv őŃZyK‰ĚÖîáXRRb}úôq“hçœóçЇ•ťÜ$ň_AAAF“ë™ß?ýôł›|==öŘ=éëęKŽńăˇŸÖ—žßýîşëZçΝíŒ3NwˇćŃ{žŤă*žňňvśűîť6ë:ű￯ĺ‚}öŮËśÜr ÷Ťƒ:Đ6ÜpC ˛|_C† ąýëöĐäüßCďĹŢîďŻĆ[qqąuďŢÝ˝7&œd?ţ¨űňÄ:‰çĚ3˙ąč […éžzj˘[<ęÓŤżůŢí͞=;tO„ö‡/Ř+ŻźžÜŸţtšuéŇĹ `ÇŹľšü÷1Y:tpďvŢy§Đ$ŔUvÓM˙´Ţ˝{[sŠLŽţfŞşĎĄ‡b7ß|ŁÝvŰÍśţúƒ-×äŰţE_>Ţuםn2fď˝÷ ď_ôŮ_“-cÇne§œ2!4ô˜ýň—Gň™ňq?˜ĎŸçňEŽ}.Mˇ|üT´t}ţHF6>Ç*(:uę›nŃdg6äň8ÉÔ÷8MŃçŐ^˝zŮȑ#ÝXxđÁť}L2~őŤŁÂşAŇţż‚ôŃgo_Ľ)dK[řť†–9űěłÂcRÂ|–éí@0P‘yŤŹŹÔ˛IżýěłČ_Ą”––ŘŔl‹-śpgƒ ˛żýíjűÍo~׏_Ť!7i ŞĺDŚn;“ô âmśŮÚßsĎ=ěŢ{ďKęzŰn;Î}&óçϡ>ú8|ž&s˝/Gtź-ý0ry\Ĺł˙ţű…&ű&&uYMn˛É&– TńĂŁ}ţ÷ßoA—/ăKű/ý긏Ź,źNď*[č×ýúőu_ěëKJMžéËń7ŢŘ.¸ŕ˘¸•Óôď[ŒvÇŤŤŤí˜cŽuż<ŒŚńŠ_=˗_~iżýíq1 Ťń1jTĂXž5k–ľ%ů´‹ţü§ź‚&v6Ř`ˆ 6Ě­ŰtÓQvÝu׸1ŁąĎ̙_šĘ+M6jb`đŕAÖ­[7ˇNăëÎ;oˇóĎżĐŢzkŞ5E‡?˙ü‹&/÷ÁXŚĺËűŽĎ:W^yšŰ'xźý‹~%ÜťwŻĐç˙áI“Ož`Çw•E2őËxä>ĎĺÎçš|‘‹ŸKӍĎé“ĎŸců'ň{?}ŽyđÁ‡#Öéó>űč˙Iş ţóŸĎtcN'…`Î=÷;î¸ßî3R.ýAÁŚX;ěđ.}ô1Ť­müşˇľ˙›ć˛|úť–ě˙[Ÿˆ–Éí@0dAŢňšœ S§N ý'ńţ˜ç)ĚróÍ7š”ś~ą˘_†?ňČŁ†ü–É1˜éń­R*o¨ÉŘÁƒš/Ă4!ŰýjĘŁę~ˇß~§}űíˇĄ/ŘşÚłĎ>gh™\WŃô%Y˙ţýÝ/BőK,Mâ6eżýÖţz÷믿qă3¨ŚM{/4yލšah›zÓUđş|_C‡ąĚ›7Ďí^~ů[˝zuřrúĹŞ*%pŔţvguFÜve xUƋb‘îÝť…k ÄűRöŒ3ÎrŸT’=ßÚf4%Ÿöc˙Ÿ˝ł€—›čÚřšˇB[ ĽTxq)´@q÷âîîî.îîîîźHq‡ww×E*PŁ’oŸš7{“ě$9›Mvł{Ÿ˙ŻŰťÉœIf眑̜ĚDő˙† "§v˛YÎĚ;\}ő5Ą×:űěs䣏>.9A~L0`ť•9çœÓ8GŔ‘b=öŽm›_~ůĺĐôU›FĐűŔóůœX~üőËľfľ%oýG9Ô/[ląšŠ7ÖXcőB]ôł‘%°?W?ýšFĄűĽiĂţGz4r?–ă8áúÄ6B—\rŠ5 ýSŹÔăÖďXÉŇM <#ÁĄ+nľŐrűíwJž¨g;ŔŠ:aŤęl˛ÉFEGlůýďż˙ Š_Š]ËÓs+Š/ŞmŤ„ęĂ­…HC‚e˝ó´„7š/şčââ1–'lś˜6Ő°o<Ě>ýtŰ>Čk­ż,-ŢžÁD›Kp@ šóλ̀IF=ŰU lšŕ-Ţ8°˛Ő:ë´ěŰýĺ—_Ęü!yç­ˇŢ6ăß}÷Ôőn_”;î¸cŠN,ďžűžě˛Ëîňä“Oů&™ëÎ<ól9ůäśU0đśôŞwëĄ &FŚĄM.ü­ ęŢu×ÝćMĹöśJC#ŐcQź÷Ţ{>Ç(lë ŮÂ*& P_îśŰžĹUX`ăG}T˘ëՊz×;ŠPż¸eďźónĄ~ŮMžzęé’úeĈrá…ËŮgŸ[\nǡ—ţýű !€ýšúęĎ5 őÖ/Mö?ŇŁ‘űąÇI昄ç<[}ňÉ'ć+ şj¨ü “ß~ažďžűn2`@ÉíĽž ő 픐ěĘ!$?pEҐäąńňža;ăŒ3–„tЁ˛ĺ–››ď˙ĺ—_d‡ś—•VZIúöY>˙üs3Ëšb˙Yź!:óĚ}eâÄ …¸ż&:^1K;1€ńČ#JϞ=ÍŔú:ëŹ'ŁF.šî{ě.;ůŽIźq×zôчĚśźXo˝ eäȑ>,‰żŮf›˜‰Á~ýú™ˇ4Fcn1čńż˙˝ Q@—˜X:t5™kŽ9Ľ[ˇn2fĚłÜ &&ŸyćY3Ácăć›o4oŽ?AV]uh!ţ\˛ÓN;Č"‹,bVÇšíśŰĺŇK/—,AúĂśŠ¨äšŐúŮhŁ–• V_}u“WQƒT+­´bqrKBâíL/Xí{uƒťîş§0Ás‘ő:ĐÍ&›l"+ʰź™đA‡ôűᅲűď&?üˆhŠÄvź”[ĆŞA=ە,‰ á1,}÷FĐňË/WÜ^oż/šäĄ˛¸ćSOľź…„7ƒwŘa§PYˇŽŤŻž–ő­ą$uY9iđÚYßž}óžĂ‡˙,ŻżţŚÜ{eďżHľ¨gűZmľU‹şDۆíWâçŕ`7×\sËśŰnmŽ÷Řc7yíľ×Í÷ÁƒÉ5×\Ug‘E†˜ý†]°ÚËŞŤŽR"ˇëŽť˜Ë&›lnÚwŕm÷<ň˙|^`GxăuľŐV)Ř^˙BűÝĂŘŢgŸ}&O<ń¤ŠËâ&đFîf›mZ¤^Ćly‚IDÔ]ď˝÷<řŕƒŚ,V›FŠÇâp—öFۆU:fžyć˘ ”ËřńăĺÄO–;î¸Í\ožůć•e—]F^zéeŠęYďčO`E0jÔ(Sż„˝eě‚Il+„ţaP/ž¸ôMf8&Ą\yĺ•dîšç6ĺuśţxë­wL;ŕNö$%>5śNZk­uM˝„ß‚:OĐéwß}oúiřÄm‰­/śÜr ÓöĄL`ň [dÜrË­ĆQC%y–‡gŔţ\|ÎKĽ}{˜ü䌭łŻsĎ=Ť8iŕ‚ 9 ¸ŕƒÁŁ>6vo ^pÁšž´ó4 ˛°ĹjŮ÷‡~h:ČŘ :ÞÇt c5źËŃ>&IX|ńĹ̖ čř{ÁRĺřŕĂkĎa¤a;IËX5¨gť ‚°ľ×^ËčŽQo€y—ĄöŮç ¸ËJ5¨´.‹"ĚÎńÁ>֘ŞÖ–től_^šîşëKÚĽ0°Üú†Žoěu &YżúŞö{/ŁN<őԓ‹m­ Úę˛- 6tŹ™t° ÂÓN;Ľ¤^E=‰ĎÚkŻiœyÎ:ël3ÉT-Š‹ƒ˜€ÎúƒIY&ęoźńF9ôĐCĚ1ęĎzrdŠg˝cŔÝĺÚkŻłpÚ¸ďžű šCĚ÷ţýKß6Ʋ˙§Ÿ~ŠŮšĹ žđA„vŕä“O5“ţIHŤO‰w n^uŐĺćŻ Vᔂ&:0Š6h§Á}÷ÝÇ÷–'ÚÂe–YÚ8‹†mďć%Í<ŤŐ3`NߟŤÔ†1‰qöŮg§ /ôF›O‹cĹQfľĽ sÎ9‡œţyťďă;ö!řl¸á†rŕ—l=[?ŕ€ýĚdIđíflAŒú’xÎ:ꨣeܸqbv}Ţyg€\ŕžŐŽ˝özŠ”4Ę9ęËŁŽ:Â\Ëĺ“1řœwŢů…¸ľYŃýŕ…>ŚwÜŔĄĺe zźőÖŰä˛Ëސ¤tčĐlœşwŰmßy8sm´Ń†ćv˙ĆoJžŕ8Nrpoď8hŒŤ<ţř“…özs3ś‚çŘ\9//eM{Š/˘ŔK6gŸ}†Ůž× äđ“&­<ňhĹ6VMŚ-öŽäžˇĄéŁĺŠ[+h§mŔÁ}˝óÎ;Çg7p´8ů䍞ŃG…“ V‚ň‚9ôՆ*{qÔŞháě §,/č‡âƒzΤ‡rxĹŤěĄ|ěż˙ž%+ˇĄLáÇHŹŔ†—1âŽ횊’XÂICâ0Éč ¸Ť››ăˆt Ё‚ÇëkŻ˝aŢöÄ*.;眳ŠƒčDc5t^ştéZxXŘ ta°čď7tއALxŔ‘`‚+˜ \ŕ-5<`<Ř,QëĹťERpo ăŢříDÁŕćË/żb~ËlłÍ*›nşŠTÁ@çO?ý,W\qĽ/>:Ž˝ö*óŕařšçţgœ€đ°„‡m<ă÷â‹/, ŽěúÖ}§NĺŘc˙Ď Ęŕ-ű?ţŘtž4űˇWJśXMűĆžşnçoX† €ŔącńĹ[ěůŢĺlľŕÁžânçĐx3Ť@ç°ź‚ˇŁHĂv*-cYSďvĺ‚|{úégĚÄ€#AŘÄVDqˇ|AŮĹ*=͚Jë˛(´v†|Â~ăxË顇–ŹŠWűB>a"  ŽÇ›WZđö)ęw˘íYđ†čńǟhÎőë××÷ƕ{Œ=ĘÄXžÝ}‹Űy'•FŇ9Ö N\xáůĹźĂ×xcŤąĚ2ËóV9ÖđĆăĹ_PčgěZ|“Íśuţůç݁ˇćą­&É0)‡ˇÖ0Čg–iŚélV˜¨Ri@?Ęe„ńR)Ď?˙BĄN8¸Ő!yqŠ'ęUďčC™´Ô/ĎŠă˘ÍÚrËmŹa|GůuŐ0ţä“O›ž Ę&V܁Žńý„Ž“ŻżţÚÔĺfŸ6‡6ý>ź÷ŃG™ÁI´Ď¨OŽ 8úŢtÓÍ%ń7ÝtcŮoż}‹Çř=˜ź;śĽNÂmQO…‘fžŐň°?§ëĎĽaĂÇlщ63lŘCŚżŘ lßĎ<ótŮf›íĚj.°%´ÇH;řěłĎ żďńÂuţ0+­Žżţşf‚oŽ9f7V{칡ďm<Űc’ŕ<^*yűíw mö¸B{ţŸBßccϰۃ>PN;팒<€ÓÖe—]RlOđűPýţűˆâsŢOĂ!ľŇrđcŽůżâ1úBŻžúZ!Í˙Ëů`œŔkű-ăSčb倖° Ś c`Ř(ž?đěß=óÍ7Ćé9 xq öňůç_˜zĺN,›nş‰™,F_öśĹ[W9ťéŚ[ä‘G3ö'/€ čË/oyÎŇ:ŞWÇq’şDmł 9ŘŰůç_(W_}EŃéuä_ý%y =Ő6`×^{uŃ!m„űí7éŐkłŠ2&ŐáěbqÔa ˝ĂJ¨0îvmođĽI éŁŐşű /™UÝp˙ƒ: x-ď8A5ś^kďvęeÚiť=˘>ĂxVÎĂ*ťî*Q‡vˆą7ԏč3a|ö8돳§z´°÷c=Ś0öłŻÔ´{衺Ž%h?_xáłĘÚ 3ô2+ ˘á™čĚ3O+ŘäŽĹ2„—ë ;üđcs=ŒŃŁŒtŔÁ§{÷f[î0ńšŠ’čČB’ź4^đœ…CČN;íh&¤(ăVo@‡ËŽaů5X†Ń¸@‡k˙ý2ƒ€^ŕ1{ć›Î6Ä0 ězŸŁCNmK9#­č¨ ă‚ÁtäqżRG–ś¸AG¤Ńítab÷–[nó…?ôĐ#rÝuW›‡ v^ý žˇ#<źř0r÷Ý÷ČE]â{ŔŰóhÄCŢbŰuם Œ‹ 8F`˔Úް˒z xôŃÇeˇÝv-.Ĺ}öŮçZHąĺ…›.<Ä-ľoă˜cŽ.:ąŔžŽ;îßŔĘÄ9çœYĚ # ŰŠ´ŒeMŁ<¨˘Žxýő7Ě[í¨gཏĺemNpbr롭Fš+­ËâŽíÚVÓ8ŕ€ƒKě K‰âVŘفîoœ%âśĘŠ”zľ/8šË¨â˝ÜAîwŢy§čȂ•p–v=1Pŕ:˛`ë‹0§T<¸ťŽ,‰s^ľÝăŽ;ژo°ť+ŻźĘW—áLŹÁŮ K|¸™Ř„s'ۢśĂȍPż|ýő7ęŐXâŔ›tŽCœ$áLćmC°Ő ?°Š œg7ŮdăĐţniöŠ1ـ•+vÝuă â‚RŹÎˆv ŔaËw{ď'ŹÄâ‚e­1ŕđŸcŽŮÍD’ĂH3ĎjůŒŘŸÓőç*ľa´qîóś›Úi§}[ëbivw uęZk­eVĄpAűč:ąŔć°j‹÷ţ˜đÂJ)hű1Q2hĐ 30†•^žżą]opBůž{î1Ë˛Ł˝Ŕ„óe—]^˛ő/ňŔuJ@iđ>oá9 oť/ŤTB%ĺůçkl#tůĺWřdđvď%—\h&bjűb&ŸÝ—đĆů~űxŽ˝ßLVŸ{îŮćhë­ˇJěȂ‰_”ąłÎ:ÇgŘnćć›o0ŕXehčĐU‹[Đxˇ˜sËîSO=“¨OŽă$Ç}ąŕE0Ü7öQ_⼠ŹÖ…:äĐCŽŞs}íÝA㎠Ɲ°z\.žř3aŽghôšN8áXŮyçÝB70Ö 'Fl{ĺä4}´Z÷qá‹ňČudÁvlŐŹŤYÚ@ôŁ>–Ă;Œ常ý<čů”SN2ăź{⦅o+5Źşƒą÷)ŒąÇç˛u6ěÔí+Æo¸á&ŸĚ­ˇŢ^č+^lśnCálâŽá¸NÂpŢĆŞgöč:˛xÁ8Ň.ťělžcźcđîËY.č×bť?ÔÍxů 5A—F|Ž"„ä‡ęŹíDH•ij’ރÉ-ěƒéý<ó̓…Aš‹ŒcÎđ0†‰¤80@ćĂNÍ6Űl]<>öŘă­+ Ü{ď}ć;&łÜ4€=ÝN&_ç˜cv_\ź5ŕőűęŤ-ě“č“lXĽ`‰ZoG`nxÚÁ$Ěá‡Uč4íVĐÜŔ÷Pí.Ż 0ˆŕƒäáiěN袃†§0Žšćښt¤˛°ĹjÚ7´Ü$ŘQ˜Ék´m‹g­rÁŰ`čDűěUtŇÄäeŔë¨ĺŕÚXnšĺ ŤF~0I[-ęˇ~iŤâś-ôS°Z ŢFFßÄֆÜ~űĹďŢ5dѧĆŢęÁ~?ŔVą˜ôǖ^ÖZkâ[ÚhOqŻ řöŰQxI;ĎjőŒŘŸ‹ďĎĽaĂXĹĚĺƒ>(qXÎ!čËyXÜ4¸źôŇK%÷Ço9í´3ÍŔýĐĄkXú‰kŻ˝ž™PÁX€mU8׸ŤČĄ˝ŔÖY^0ńç:>3ŚÄ‰´<'S˛2[R’–sô=ŕĚ0éy饗•äŢÖ×l!–ě´ÔÁ°uźY ťą˝Œ1)÷Ů+šÎœĺ‚‰ÄsĎ=żÄP^˝؋.ş¨ä Žă$NŒmÔ6.ľ˝Ÿwl_ĺ: ťÎőy ˝Ô6Pżc-€rŒş"8‡çPlľíޏ€öËOścL<ΉĹ%ޏ–§>n­i;ľÍŤ?/żüBěuŕ(ĺubpńŽś‡žźN,ŕƒ>ô™Ě5לRmđlg°ÝwßË8€XĘÝÝwˇm;^îóĄ œT]çëŽťÁę ňÉ'Ÿ˜2î˛íśŰD^łŃžŤ!ůŽ,¤!iĘaë…(,Gˆĺtă°M–şŔC؝˜Âޡčh…/]ƒp.K.š¤/Ě]Ľ+°źűnKËËÂsŮÎ9ŢŐ3‚`ĐÎ Á˝öOĹä[pQä“ ŢŞ rť cęzăaÄ]ňÝĆ˙ţW7̃da‹Őśoźŕ‚}:ƒ`˛uÁ[œšđ`ŠĽŁËeĽ•V*~ŕaĄÎ¸~ÔŰ iŘNZe,KÁŽź÷6ěÁâ9źŠÜŰo`值†˝ YSI]…×ÎŢ˙ߤGźAˇÎ:ë› J÷żŐPŻöŐĽKŰ śß)ď`‡wOßZG—ŕ„šźE‹I38RĺV[­Ľ>ĀŢ=÷ü7ôŘŢŔ˜C]î]†>KĽłĽoAŁŢ:ëŹ3dĂ 70祟˝—آÁ%j@u V°ˆúTs{˘zŐť71‘œ&Řve4ĚÉ [ŸšD9-ŮȢOýňËŻZĎĂĆą-…KďŢ~‡@o_i o "O˘H3ĎjőŒŘŸ‹ďĎĽaĂ^ç3Ôwś (ôᰁm; oü5×\Óˇm† ńḁF‚`ÂN¸~Q6ťĘ*me["…Ů=Ňţä“Ń+żjIZÎW^yĺâ÷°sZŽ˙JŮۤĽű-Ŕ!ŤŹ`;ë0źv‰US’€rI7Ÿ|ňYń;V/ĘÇŃ''l…ŐFŻšćŞâłž1˘žq˝ů:Ş.‡~hq[ŒZҨő…†ŐWok1FÖö ŽšăŽ;‹ÇQăbč㕳^T-O}ÜZӞí4œƒmϰďy86Ű𮷹ŽšŐö†şĺ.ŒJžV^qĹG5´ŃwÝuw¨,1î°MV: ŁŃžŤ!ů[ ’čc@Î ď°âÉ*ŤŹlV=Á߼—^şđPv„y¨ #č9ěĹÝîźőVř5ö-ĹފŔ’­ts×^|ńe9ôĐCĚw8ޏ<ĚşoÁŤÝíÄÁKƒ"îœwK"›# Vpßđ…—/–şƒƒÎ{ď˝o–ZŒšđţFL&F=hxHą§ĺoźi•‹ĘS lś‚ ,ÉŮłgߛŒ˜pu;Œp2)g2ßĹűŚă;ďź) ťt—H ’†í¤UƈóĚ3ˇďŮ:hłţg“ˇ"Ż4𠕐´œť}ä§w{ŘŇĎP$iö?`sX…Űčá™N -´Y‰Ĺ+“„h[jsł9ˆ‘ĘČbN+X!ŹÚ|ŇI§H9 p¸ÁvTplÚw߽͊¤6ř۞ˇ#eß|ł­ĎˆíăÂ(÷eíŘx­ű¸$ŕźńŮg_DĘL]OEĎyűzaă=˙ţŰ6öf{‰­ îĆVýű÷7m4úŢmX“´Ď¸–ëtˆ­łâĆąą˛Ű€-ýKź :ŢŸŤ!YAGҐŔӶڞ˜đÎĆö6ŽťîúÂŕ×î˛ĂۛŽÂI'(›ožE˘Ľ˝oŞŒń[Źüˆ#ŠD3ÍÔťřć&ŕżúękłč"‹,b:ö˜0sŃ0ȌĺŕЙAƒl‹-śXёĹ}{[ŘаVŔ>˘đzÇ$~?>Đ áŐ{ß}”<,xăI' Zzôč!y#쭀JŻYMű† `°űa˘ƒźĘ*ŤČý÷?P _mľU‹ß“.Gëő Ű$jI˙4l'­2–%`WAđ†)&>&:܉L`_o€7wƒƒYSI]…×Î~˙}„ä‰zľ/oݐdk oœjŽúőŹ['a°9‰#“÷ŕĘ+/WÇíŃ#ťIz/XŮŔj7—]vyäj{Ip÷ŤQözĹWĘÍ7§ˇLĽÔŤŢ˝yœöÖcĐĺşëŽkŢ`Ĺŕšż%‹>uԄxÎŔŢęœxćˆ"nűŚ,󬚰?OZ6|ôŃÇĘ駟jœY0 'e×Q[%`€ţĄ‡śŚ +WzčárĘ)'™—Tŕ §z׹Ťą`…‘˙ţ÷>ë–kŻ˝–™ Ĺ6ĺŕ­ďńŚqHK$)ç˜đi뿌Šu N+­ĺÂţG x{5V—ľÖZÓLWPJ‹ŠSÓĎďjŔqœdŕšĺ駟•óĎż Ńvšçœsna|ňVSOÂ)ď‰'ž2’ľ˘˝Ô6üăbŃmÚuôíPTkuĽźôqó@ŁŘ)ćňôÜZK0WłŢzëúŞ+›íŹŇĆťŞP\ůn‘iǸwɢBňYHC‚ś+OĎč _qĹU˛Ŕ Čâ‹/fŁđé]ę3 š6Úß÷g śBçÎ5X+ ¸*ŘNĹőȅˇ:"ą@úńć#ŔҐa“lxH~ńĹeuÖ6+Ń`ßFLŁ3ŒAg|śÚjK9ţř}ƒ†I;ËQKë׊,úQľ°ďÇ{Ě € úş pp8p>óŤ÷`{•J‰ÓTxÚśSiˊFą+/xcěC2]p¨Ăďx›“h>úhM’ÖeZňöźUŻöőý÷?ĐđF0&šÜ˝Ö5¸m¨ĺŠ$°Ťśş,™2ü×(jľĽTÝ~űž48ĆÉńŘ/űJ§ ŢÄÂŔĆËąóZSŻzÇJný‚ˇĐ‚o5'“ęçwvŃÉ`âőŮđáĂÍJ˜Ŕšě˛K˝˜Ďz >MMMáż5ë<Ť&ěĎœ– c’mĎ=÷1ŤŕYfŃE5ŤNlŸ‹ôვFą•cpľ3<oąĹÖfƒVXŢLüť“a˜`€S wđËő×ßXŒ<ńÄă}[˘ř駟 öúłq€˙â‹/Í3ů–[naý-;v*~[1!ÎI,K0Qî–9ÍĘľJ+ű-Ű%\vŮĹž•0ŚóÝwߛ—˜đńˇÚj‹˘cZ{ƒă8áxí źă…L†Â)đďż˙–¤ŔYNŘXIő˙˙ý߲Ýv;ÖĚ!ŞŰé$h&ˆ]™j9?4ҸqĽĐN‹Í6ŰT>ř@ßs œţůgÓüꍯděŘq…ţę˙IhʡżΧaЏ…Ć†Ž,¤!ÁƒTssţĚű‰'ž4Ž,`žůćMäČňÇmŤUŕ°8úöšř=řÖśÚi§Íw ćÁ‘T\°"Y01ˆÁHŹŕâg˜čôţi<ŞńÁŕ˙źóÎ[ˆ?Äě›>Çł›ĂÓN;E6ß|ŤâoóţĆ­ˇŢΡGe˝‘d›Í5ŤmßXŽƒ 3ĎÜÇčĎ”^iĽ‹2•źĹă}óvľŞI”7zś“fˊFą+/˜0€ mąĹćf ËŃŁŽtßŢĹĂŐC="IˆäĐź˜¤.‹ž^yvVMęŐž`ChÇĐÎâĄčĐUÍŰŃđvśˇ>CťW+0ąÇlˀ‰¤­ÜUYp ,݌ÉvźIžÎ:ëKŢh”zŹ+ž`ŤJLÔőŞwŹ,€‰llł‰6jŐUW•űîť_KŸŸ~zËňú˜<ňȖAGÔS'Ÿ|BŃ!ăÉ'Ÿ’[nšUžţú›ÔŢ(ËKŸuú˜řďŐ+ž^ {ÓŻyVM؟‹'MĆ˝_}ő5óx9ۧ`ŰHŹ–âŚwŸ}ö’ /ź¸$>ꁇ~Ä|ś'€C V5ŔvV°ĎÝwßÍŹzú /ô]'Lô^|ńĽfő–ŕJ;ďźchş˝+ţÍ0CŻÂ$ĆOĄ˛č;Ô ”iü.Źžƒţ ň#ĘaŠVie˙CĚJ“Ž˧Ÿ~*—_~ĽŮĘ2X/c2­˝Âq;°‘K.šT˛äŢ{ď7ŤÁqő,œüx`˜Ô‚Fl§ľxŰ_l‰‡UžÂ@{Šž¨Ö˜X#WJ{śÓZ5ÄXÉ g؊ŐubÁóÓő×ß`úŃÁů˘śŇŇŕ]m4ŻăŢĺ’E9 „ä‡|ż˘DHBňÚxyßL(wIaď[âŽSL茏űËcďîŕž‡´p÷ůÄC-śGq—.vřVdAžb2xĄ…,t˜6ç10őĘ+݉tÂđfĎmˇÝ.;찓ŮS`?SźŮ悭:\°RL=“ŐEľŽŸxâ óƒźË-ˇŒůžŇJ+xŸ”¤ŕMg—8ťöޚ$ ŰIłŒeEŁŘUaĂ,~_qĹĚjQî*QŘÂ,jŕ>Ȅ m[ˇőéîü„Är—ĆÔÖeQxí,ĘŚ&ţ0!P-ęŮžÜÉ%°Ë.;G ˜xr'Fżřâ ůňË/Ľ–`R`$nƒśUÜúE źŃ¨őXÖ@Ÿ;î¸}ń¸ŇŐýŞM=ëÝť…莝îŹŢҁč+ŕƒC\°˛‹ť˛ö„?ᄓĚxĐ!Łk׎‰WÉSŸÚí륉çŽ(ÂÚĹjäY5a.ž,mĎÁŘň´ÓÎ(:˜ďę)QŔŚąŃARčŢa­„\N>ůTóźdŰncşéŚ˝Ď/żüZü×'ŔÄo-qӊ Íůç)[Ť´˛˙Ńf—x^:đŔC䭡ޜ:Â)Š˝ÂqœÚ6ýôÓĎ*Ú$ú˝]şÔfö\_”3^ąÄKXăeI#W Űľęŕc wţđ:}”Ë2Ë,S|†šýö;ä†n˛n+YiűŒgŇńă[~Ď A ˜g§(Ü~<đ–˝úPa’ä–Ş ú׳}=ýô3Ǝ&üO9ĺä؇|ÔŰnťuńřškŽ“ZóÔSmőÉvŰm*‡ Ý;0ýhÉŇ˛Č —mśŮJ˘Ř~űmÍ*3Ě0ƒT‹F­Ç˛ÎV§œrRсâă?ŠéęAI¨g˝cőďż˙Ţ|GY.Âú+.ŘndĂ [VDÂd‘w•¨Ž]ۜڱRKîJIČSŸÚŰ× kS°ĺjäY5a.ž4lĎš;ě°˝œyćéŗ6‚`Ő×!*8˜›Ü{ď˝äŘc–0Ţ~űíâwo|ď÷0›Ĺär”#´wT<'šo˝AÔÝB¤V`k&—Í7ß,TŤÓbŤÎZŔţG›]ţő×ČĐm`°őÖźóÎ#ľÄë¤ŘÜ\Ý­ 8ŽS[°şĆ7ŢdžăYnťíś+Ůň­´çúÂ;žľŃF…>ScŇÝűŹY­qą<őq˝ţÔŐŽŤŰľęŕ]ĹÎSnß6ȚkŽ!IŃôAÜłŽżý,ţE}ú -ĎfčW†moéŢË}1 /ń ţ‹äÚ,! YHCRîüYƒ•L°g6ł]^xá%I:#XŔĺÔSO–Ůf›­D[šKÁbŻdw/Ü î`:K믿Žůî]ĹĹ=ˇŘb‹˜%ŇÁ‹/ÚCË^śGěşë.…AŞJdŕ€e˜]°7¸ & °ä2˜gžšĺ„Ž3+Á2И¸Ăç–[nŞęŠZ˛°ĹZŮ7Ţ:ĤŔţňÔu;ĕl+°'łť7VPŔ@spr.8ľ§mś“v˂F˛Ť ÆľLp NÚgŸ˝ÍwźšŠ7fËoýşyä%uœ[Ž8âđĐř•ÖeQ”ÚŮIV;CŰąţú뙴ŕÍďęEYQĎö…ˇ0N=őôâý°ŞŇu×]ctܚe–YäđĂ•“O>ŃS—=ᛄŠpdq^ą]ĘBpŽ:guş™ĂŔ˘wë€IwwŮ×M6ŮŘę̂kî˛ËNćú§Ÿ~ŞœţšR-šK´{Xbý†Ž+ž‰ŔN?ýŒşŰNĽžőŽÁ1oý‚7ÓŽ˝ö*YuŐUL9ô‚úíÎGVÜŢn1{›ť Ţöý*[?vţůç7ËKGíN\°m—<őŠńĆ7œăœŕŹ×ć™gÓVžĺöçâIÆWYe•‚˝íiśŇ8č ­úŔwËj°/‡­xwŘa;łMú„AĐżŘtÓśóŢřŢU˜ŕ“Gu„Y]- L4ťŤŘ ĐßüĆ`Ÿ×9öŘcLż´–<öŘcEDťeË/l{â‰ÇÇný™ě´Ůeż~}­ŤüŔYóÔSOŠůĘVn›ÜUPŤÇqjśÎrW÷ŘhŁ *ÚŽ#)íšž@ťóüó˙3ß1FwƧ•8ł íAż ý7€•Mß|óMŠyęăb<Đ}&ëׯŐm•íZu€ƒśmčotĐ%şĆ‹—QŽź ęŮÍŰoD?ĘÖc|}Ň(4íçwÜY\ĹŤÚœc0zôŃG˝c˜yƒ6KHcĂÍîHC‚Ć ČjŽŕ-Ş™fň/-ץCłykošË`LPĄƒŸ”˙ţ÷^ł71tŰm7§tŞĐqÇĘ*ÎW”żŕ‚‹Ěś'6°mźŐƒ4n˝őVćͰ+ŻźĚ Z~öŮçF/˜Ź]}őՊŽ ď˝÷žYÎÖË駟Yxp˝Ńź5‡Ž &#ńőÓO?‡źYç]Ţňúëo”QŁFIžŔoÍꁢÚöí‚- Üe÷ݡePË+&q2rĆgôx­y†žďťďŁsLÄbO^Ź›šűî{Ěa¤a;i–ą´iDťň‚U$đ@ˆAź üÉDo`Ý{ď}Ň1ź1•+0°ňűďęĄYƒöVFýcŰF*ş, ŻaiŇ(;Ûüçž{žuŹ4iűÂśyÇ{źqBC}‚7Żđó;vœŮ'í˛7=hçÎ<ó,ÉpRŔ_|Ą™ oY1e%yíľ7d̘Ńf€ śíŽ„>&É˝`Â׸đÂóÍ5öß?ăőŇKŻ`ţ26‡2ŕ:Pa㢋.–jĐčőXRţď˙Ž*L4|\<Ć ,$›cŽŮ}Ν,Ĺ6îęCőB#čoĄa;›“N:ÁÔ/łĎ>ťœvÚ)Ś~“Ę˜1›íę0`čMœ8Ž˝ÖżÚś5yĺ•WÍ;ôŒ6J˜8ŔĘ# .8ŘL6Ą{ŮçÁ?ţX\Rý¨ŁŽ4Ťô`â[ôŠń㥗^^°ÝR8ŹźňŠ…zíuS/Ď5לŚMœ8ń_ł] iƒ¤•gy€ý9=•Ú0ž°2҂ř˜đzöŮç寿ţ,<Ť÷4ťnBëşëŽ÷Ý˙úëosÎié`•ž•VZÉô÷PîџŔ5Ýgý1cƘűš<ôĐ#ŗYöÜswłŇ#žżńü„•‡V[mó–+VCu_ ‚4Á‰îňË/5xÓwȐ… żášB™řӔ8ÔĄ]G?RťÍeüřăO…şîză8D~Áżĺýo8Ł|˘ě#ďŤ ű-<řŕòß~ű˜ô^rÉEŚÂ‹%°/lá›Fý ˆj;xóňö‚öářă-L^˙Pčăţ]xÎť_˛‚ă8ůĨ˙ŻžúĘȗ™˛‚ő…ČYgcƉ{÷žą8F‡öđÂްş­ťĹ ě餓N1mVľČKżcDŘRN?xţF?Ą[ˇnrĹWfúâA#ŮŠm^Ĺúůľp¨€mß˙0ó"Řx㍠öľ˜ź˙ţű…çóńŚ/ ›Cxšĺ– ]­9ęŮ ý8Ř(ŽĐGşéŚ ý˝gÍ jx‘iŮe—6Ť4GőĆ&ݕ}wŰm3Ž=vě?ňÉ'Ÿšţřüó/LŸ ýS8äŔY +GăywʔÉ2÷ÜsË2Ë,]´´#Žs[ŢČŞBňYHÂA˛j>ě sď:‚D'ěĂ] h ?üH㋁,LPľLÖú˝gáĺ 瀨=oŃá~ó͡Šű$c" ÇAžüň+3áëžĺ…cwyuW\qUáabFăAŒüĹ'–q>ę¨ŇešńfůnťíaVŕŔŇĂčÄyW´qAGKŽŢ|ó-’7˛\ú´ÚöíűĹ 4tęžÉ€YLşVĘW_}-|¨Ń9šńŕ‰IW/XőoxF9˛¤a;i–ą´iDťň‚<}≧dÓM7.žĂ„V0x€ÉŹŚ0¨€ee]0ŃôŃǙˇ¨´.‹BkgĐ Ú Ź°‘5b_/źđ˘ěąÇ^rĚ1Gˇ•‚#€űśX0]ˇÜrŤŮ8Oűęb0ăŔ6“äpŠĹ ›mVúĆ6)`Gpn‚2€kŕ­ZŘ?œVl+˙¸N/ŢUŒ˛¤Ń빤`ňŸ( ÓłĎ>ÇL֍˘wLú`ţcŽ9Ş Ż9Í9Ô/óÎ;ŻŘ҅íʰǚm`Ťę\vŮ%Ś\bB ¸ĺ&Ĺᘇń0§ lW´ÖZkšAĆE]Ä|ĐnşŽ,yęS?đŔ°Â ~×Âęž&˝˜ őN’" p(D0Œ4ň,°?§§R1b„qÄQf€í)lgçw,‰ç™łĎ>ˇäY/o\xáErŔű›‰~L”Ů ůĺădč$ʓ]t‰ěż˙ž&.&đńňČ#šÉ„C9HÂŔÄÂ˙ýß1f%LDĂÉŽÖ^žyćYšóÎťjęČЧBŮsó/ÂW5<ďźóÍ_ľYŘ˙hoaăe+8@áů[nŕゲ„ l觖Ž,¨Ďo¸áĆBŸ~wÓf¸ŤĄŒeéČÂqœügŚ{îůoäśYÁú˘ĽŹĄý=űě3L?Nö޺Ž-GQ}'ű<őq/ťěrÓ÷„Cœg\šÇ<Ó|i$;ŐÎŤŔi¨V+ƒ M‚ ^FxiĘťeLÎ9ç<ăČFÔłćhĐß;÷ÜłÍó%Ʋ‚ۤůĺ—rţůĆ*/ ˝˙áDŒtâ:îęźp‚vYĘîéöSąJ›mĽśťîş[.žřRÉ+ľŘzŽR]čČBźÍWët–ńf&Ţözç÷ ƒKϘ §4@#}â‰'›‰}tÔáů­ &ďäW^yĹx Ăů$ ʎ,|đĄo :/čě¸-q[/ŔoŹ˘3†%ďŕ1 /~€‡ xřÂK“aŕwěşëîf0טcŽŮ1Ž°ˇŢzGîťď>ůá‡%Ŕłźv-ě+TŔCƒ^.i.G g€-ˇÜĆlكˇŽ°|6řöŰďĚ긗;iEś“fK“F´Ť Æ +N|``ż’Źđ†Á‡~,›ožŠŃ!œ¤ ?Źžqë­ˇÇę/ş, ŻáŹŔ;ĂK;xť˙ľ×^3ľŐZń§‘ě ;찓ysľŐV3oÇôé3“ŔE]†Ľ×_ÝL á-˙<‚:qłÍś4m/ŢÚĆJ,=zt—ŃŁÇ˜•gü 3ő–Žąůć[šÁź7ă1ů‹śoľbö‡É‚jŃęą4Ŕ›¨p2Â[[čŸ=óĚsFďőJ#é“ÓŰoż“é?ŁO4hĐ ł ŻQ–Pż`0ŹĆŕ.AmuĎ;ělśßXuŐUÍjř#FünÚ) ¸ť[„EĽŽŔťě˛łéď`•Ĺŕ˛éyęSß~űf`“R -´Ů6ihOą˛Ô‡~XÜşŃFy–؟+JmŽš›ož•ŮjýŘ ú„¨c[ú[ŻâßÚ¸ëŽ{Œ}a !LNa”5´Ç˜´xńĹMyˇ ¤Ăšoë‘E)´Á˝ŒŁś ‚s&˜ŁlŢ}Í­ˇŢΤašĺ–1+şüć‡~¸ţŒsB­AŸäꍯ1ă(§X…oěc˘Ť~ @˙ Ť2Uö?ZŔ8Ő1ÇgÚ/ô1Ýg$´_Żşíś;LŰRmG#p4˙ůçáćYnŽšć.ôă;šŐ}đfzTűZ ÇÉW]uľYmÍ­óŞë‹लëŽ{˜nĐţ˘ýÄ ŽprÁĘ'O>ů¤yąküř R ňŇÇĹ3÷ž{îcœ8ŃîĄNEĄýËґ…vZ]đ|Žç.ŒŻ˝öšfuN8€ŕeßG}Üôëź[و{vC;źŐVŰçôY1>0&€ąGôIąš_č‹vŘ…çŐíd5†ƀú›sÓNŰ­DýT´„ă žÍđLűË/żšç2ŒGÂy&ĎdY!ů@ť>X“2ŹIńˇ)äŘý4{ţşŸ­ç:>ĂëZ͋.ş„ŮqÔ¨l—Ü'ő:×ÍÍőšź<ŠoĐAÄö%YBűnLędî8CťjżĐžH5`űŘ>aýBHŹIV`[Ę+ŽhycŤŕÝź‚ œÝwßŐ|ÇŰÇY/WĎvˆh ŔvšÔŹŻŠN9 ¤ÁŞÜŕwŢÄęXxLëß)ÓúwŞçăxţ?rő7ř=Hě|ÍBH“÷e2Iă‚ý1ł†öÝţ¨†ÎiWíÚŠlŰ'Ź_iƒő I–†Ç[ćQĚ7_ŰŠx“śV`őˇ¸ˇ¸ą „ śeĘśCD턶Ӥ`}Em”öYHCƒĺk ŠŐ°=ÚwűƒvE˛„öEŞíŹ}B˝ŇË)l‰¸÷Ţ{ĘÜ+W^yšĚ:ëŹrsÍ5—ě¸ăć;śŽy饗¤Ú` …O<^îšç.9ăŒÓ¤[ˇnVšŐWjśĂ‡˙"_~ů•d ËŃ@;!€v@ęÚ)!´QBÚ …fʔ)f˙\Ű€„dlś—5´ďöíŠd í‹TÚYű„z'¤ –R.“&M2"ÓM7ůÜzëÍňÜsĎËÇ"ăƍ“f˜A Z@–_~9innyW큆ɏ?ţ$Őćďż˙–ç3éXf™ĽĺŢ{žzZžýö;c“}úĚ$Ë.ťŒĚ?˙üFŰw\yĺUĆń&KXîˆÚ ´RĐN Š^9 „Ôí&wMʰ&Ĺߌc÷Óěůë~:´žëř Ź;ţ.şčŻŕ‚ŁFBź455Ɍ3ÎČ=IUŔތţů§”Ť´ďöíŠd í‹TÚYű„z'¤ –’”Ž;Ę!‡$oźQ¤BŕÄrŢydîFďŢ˝ĺ”SN’!CŽ”ĂRđ\p‘<ôĐÒ%,wDí„ÚŠh§„TżRoôěŮĂü}ç7—-üÁƒá˜ÖżS§őďTĎÇńü ~$ä8ęođ{Ř‚ÜAtTӑEëÜâžĂĆťMýú Řœ0a˘ƒ8q{4’˙ýLžV‰yôŃÇäÓO?3éčŇeł=&Âţúk¤|ńĹ2lŘCrĘ)§Éűďż/YĂrG4ĐN z€vJHmĘ!őD—.]Ěß_~~´8ŠLcŠÍ ĽćpEŇn˜~úéĽk×.BHVŒ?Á $ÖÚwăBť"YBű"ՀvÖ>ĄŢ iƒĺęĂrG4ĐN z€vJHmË!őBŁ­ČŇ,„´ĐŔMšDOM’ °­Zv˘hߍ íŠd í‹TÚYű„z'¤ –BŞËŃ@;!€v@ęÚ)!ľ/„Ú@GŇŽ3fŒŮC4MÁśj íťą ]‘,Ą}‘j@;kŸPÁň@Hőaš#h'ĐH=@;%$?ĺ€R}čČBÚSŚL‘QŁFąÓERű~ĂŚ`[ľ†öÝ8@‡´+’ʎH5 ľO¨wBÚ`y ¤úäąÜ!M$_°~&€v@ęśk„äŤBŞYHťcňäÉ|8 Š9r”ąŠź@űŽ\'ÚÉÖ[¤ĐÎÚ'Ô;!m°<R}ňZî&–ťüŔú™ÚŠŘŽ’Ďr@Š.td!풖N×HîíHہ ĺąEűŽ_hW$Kh_¤ĐÎÚ'Ô;!m°<R}XîˆÚ ´RĐN Éw9 „TJš&eX“âoSČqÔ§Ůó×űÁšiđˇ_żťâ‚&LB4`I˛ &HsséÔŠŁ˘eüř 2zôč\/ĽHűŽ?hW$Kh_¤ĐÎÚ'Ô;!m°<R}XîˆÚ ´RĐN Šr@H^éŇĽ‹ůűË/ĂŻ+üA!šŘú7ř‘ˆsšŽ,¤Ýóďż˙ʔ)S ŽÎŇÔÔ$„„Ľěţţű7nœÔ ´ďüCť"YBű"ՀvÖ>ĄŢ iƒĺęĂrG4ĐN z€vJH}–BňFŁ9˛Đ]’ăA;v”:˜ú`ěˆŐ'č0a•:xúâ3yňd™4i’ů´hßéCť˘]e í‹öU hgíÓΨwÖ/¤ ––R}XîXî4ĐNh'€v@;¨h§´SÂr@I:˛˘„,idhß$ hW$Kh_¤ĐÎÚ'Ô;!m°<R}XîˆÚ ´RĐN !„$ĽY!„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!$W,¸ŕ`YmľUeúé§B!„B!„B!„BHű˘ŁB!9á¸ăŽ‘vÚÁ|1âwŮlł-ä矇 !„B!„B!„B!¤}@GŇnéŢ˝ťźű2SŚL‘‘#G&ÔGČK/˝"<0L>˙ü !ůŚcǎ˛ćšŤËꍕÁƒËĚ3Ď,;w’ŃŁGË7ß|+ožů–Üwßýňíˇß ÉÓM7ě¸ăöĹă>}f’-ˇÜBÎ?˙B!„B!„B!„B!„´čČBH:tŢ˝{›Ď , ťîşł\wÝ rÖYçÉ'C‡Ž&'œpŹôďßż$lĆg4Ÿ%–X\öŢ{Oy衇ĺ”SN—żţúK˛âîťďĹ[´x|ŐU×ČŮgŸ+¤” &Č?˙üăŰRč?ţB!„B!„B!„BHűĄY!jŕزÇťÉ~űí#$rČArŐU—[X‚455ÉŹ/š˝öÚCn˝ő65j´|€ŐröÝwokظqă şeś‚3’—úËu×]-믿‘Œ?^HmyńŗdčĐ5…B!„B!„B!„Ň>Ą# !xŕAyöŮç|ç:vě(çwśŹˇŢşĹs]ťv•Ĺ_Lž~úY)‡Î;Ëż˙ţ+$]ć™g9üđCKÎß˙rŐU×ʗ_~iŽáIJňĘ+Éa‡"óÎ;OQnŽ9f7[ ţ…BŞ VĆA›4i’B!„B!„B!„BY‰۝œuÖš>GЧĎĚžăË.ťXÖZŤm%‰óĎżHŽźň*łRČć›o&łÎúł*ČRK-ç‹7Í4Óâ­!n¸q¨čÓ§YAä—_~‘W_}]îžűůúëo|qŕ¸ńřăűÎí˝÷~ňä“OůÎmşé&röŮg?˙ü Ygő}2ÍÍÍňÎ;oČôÓO_ŮlłM é_Rúőëkä˙ůgŹ ţłźöÚrűíw˜-a˘čׯŸlťíÖ˛âŠËËěłĎn~űȑŁäÓO?•'žxĘ8žLœ8QĘĺŔ÷—N:ůΝqĆYríľ×űÎM™2EžyćYyó͡äÎ;o“ů曷śíśŰtx…őţHďúëŻ'‹.ş¨Ě4So“îżţ)Ÿ}öš<űěłrď˝÷tć_ÍĺÓO?4ŽKAöÜswóW]uMA?ç–Č,źđB˛ĺ–[ȒK.aňÎż˙ţ‡źűîťĆŮęůç˙'qŕ; 2DfžšO!˝™x—\ršüú믅4ß][¸(ć™gË5×\g˝ÖÜsĎ%[ląšY:ěÖ­›Œ1Âčéyâ‰'CőööŰŻKϞ=‹Ç[nšąçƒ:@V_}5cď>ú˜pŔÁVů#Žř?“żażą’|‚~6ŮdcYe••eĐ ůÍ}q‘#GĘG}\(OO˰ať!„B!„B!„B!„T:˛˘ŕĎ?˙,9÷ÇÄĆ;ëŹÓeă7 űě%űď ź˙ţ˘÷_cĄžs/˝ôr‰‹—1cĆČůç_ W]u…ď:pŒxă7}iťč˘ ŒóN>}f28šěłĎ޲ß~ČŰoż#•€•IŽ>úČB^îPÁ5Żżţ†xŕÁĆiĂĆţűďkEźôíŰWśÚjËB^­.[o˝hŔ 6Gu„ě˛ËN%aŘn Ÿ•VZą`‹?ňŕůä“ObŻŮ­[WšóÎ[eîšç–¤¤‘OóĎ?PŽžú éßżIœuđY}őĄĆéh=ö–ďż˙^!„B!„B!„B!ŮÓ,„X0ĄíeěŘąňňËŻDĆYb‰Ĺ"XYdˆÜsϝ%N,6vß}Wšřâ |çž{îyß1ś: ˛ä’~ 8˘,žřâ‘ńƏ/Ż˝özńŤě´Ó%N,AŕôpđÁĘöŰo[GˆsÎ9łÄ‰%ȀýĺÖ[o–˜_´,ťě2ćŢ^Žťî†ŘxĎ=÷?ŮwߌŠűÁ*8.Ř>ęć›o´:ąCË 7\+˙ůϤŕÔds΂4ÝzëM2Ýtӕ„!݃N,^ŕ uá…ç›UeâÓsąŐ‰%~÷˙{§,¸ŕŕXŮ]vŮš"'––tU–OXyvfsb ‚Őhnşé:™vÚi…B!„B!„B!„’=\‘…0éżćškČ˙ýßĹsXĺ˜cŽ7Î,QʰÂňćďwß}//žř’L˜0Ąčȁ­Y.¸ŕ<ßÖ3ŘÂčż˙˝WŢ~ű]éŐŤ§Ů2eŽšć,†cŰ"ʍqçw™ăçž{NvŘĄmeAƒ0Ť]¸[Ü`’Ţć$ƒ•[°˝ŽKБĺĺ—_-ngŹăĹŹƒß5óĚ3ËŢ{ď)m´A1NwÜq—ů=N)GqXÉ5°}Ńďż˙.sÎ9§YőÂý­ř çž{śŹťîâ8ŽÄ1ß|óůŽ‘öW_}-6ôřřăO„†Ăy+ظLš4IŽžúZŁKäńb‹-*‡~ˆŃ%€ŁĂ^{ínllťífŰŚťîşÝw]ŹÚân'äuœŮnťmdčĐU‹ÇříwÜqg!OŰÁý°bťzœA;ě9ńē‹q óC9¨äˇ<ýô3Ć9ŠG˛Ůf›˜ŐHâ€CRЁ덯ž.üžťeÔ¨ŃĆnp-׉śrŃEçËzëmX˛Í’ˇ\źőÖŰfĺäŃO?ý$ZŇČ'\+đ¸ Ţi§)O=őTÁ.ښ•ŒN:éSţuśÚj •ƒ!„B!„B!„B!¤2čČBˆ‡kŽš22ü˝÷Ţ7NزDœ5N>ůÔâ–@.l°žo[ pŔËOuęů⋯̶GpNpŮcÝ¤S§NĹăG}źđ[*:Šźűî{ňÔSOËă?lcś;Ze••}[…ѧOßńˆż§“J“Ĺůç_dlđšńƛäţű‡Ă?ţřcłM“wőď 8ďźóŽů Ç8W¸Ŕ/Č/8y9é¤Sä–[n+ă:ŘöŤř¸ů çŠ /źČ8–€7ްD_§žzşÜpĂMĹă믿Qîžűv™gžy$ \Ż˝öđƒíĂ9Nŕžű^zI.šä˘˘ĚlłÍ&돳ŽqČ z?äĂĺÁ’rI+Ÿô;ň`KŽŰożŁx Ĺö[Xö ť~ď˝÷„B!„B!„B!„’=ÜZˆ%X=˙ü3V%˙ŰożYXŔ†Žď;Ć "^'€-~Î:ëß9l˝ă:žüűďżňĘ+ţ퍼N)K-Őć°'—Áƒ_p˝ž}űĂŕdŕݲ÷§Żc €3Ëá‡%×\s­<˙ü˙ŠńpŸĄCWóɞţ%+­Œ3ĆçŒVYe%ŃĐĽË4k–4€CĐe—].‡rXA_›řœX\\§—gœQ’ç"Ż`;p‚ =zˇ´‚–[nšâńkŹî“˙â‹/ĺĆoöC^Ÿ}öyRNzŔ™gž]ň{áđ§/ŢŐyl<účc‰œXléJšOAťĆDŢŐwâďşë…ß}ŽqÚůć›o…B!„B!„B!„’=\‘…ؖ[‹¸tîÜI:vl)&ýúő3Űěŕsíľ×Ëgœy-ldsbúˇĂó‡7ß|Ëla„mk\°Z ÎŹXâuYtŃEŠß˝+Ż`ŤŸyç×8–`喅^Ř8Ď,ś˜5–O>ůD~űmDńřűďż—ŻżţơĹŃîťď&ŰlłľYIĺ“O>•?ţÄŹVńÓO?KŹĐ\!äŕƒ+ޏ‚ď8¸eP&LôwďŢ]Ň+{`{™yć™Űl×[@~.ˇÜ2š&IBа2 śéąánÍă{xä‘GÍ÷9ć˜Ý†­rlŰ3a{$8Ju–žţůÇŹtbăŮgŸ÷ŮŇEĐńĽŇĘ'l­ĺu&Ău{ěału҇~hěúŁ>6Ťň¸ŰlB!„B!„B!„BŞYń°ß~úśłijj2ŰëěśŰÎĆyĂÎ,żţúŤo˖ &Œˇž‡ó@ĐŮbřđáVY8ÂüňËŻ2÷ÜsĎšŰﬞG¤ ˛°ůŢť÷Œ&Ý.pŔ=VžŘęŽ,‹,˛°ď~pJrŘaGȍ7^ośŃqcÍňË/g>._}ő•ɏťîş§č<áMŤËşëŽ#zőꥒűý÷žă™fšÉ8ë„9•VŹŮa‡íełÍ6•ž={HVôí›<Ÿf˜Ą%Ÿştéâsxß}÷ƒ5ś^úő×ßJ_ÂŇ[Ÿ:uŞUvřpżô†PÂśw?~‚$%|X[Wa+&/(gřlźńFć+Đ<ţř“rŃE—Č?ü „B!„B!„B!„ěáÖB„D‡ ŹJrÜq'Ęý÷?ŕ Ű{ď=KśŘŠŽÓ 1âwłŠŠËôÓO_˜ˆŸ[–Xbńâ9ʰ‚IxďJpdC† ń]ŰëÄăňÁĘÚkŻgśp5j”„űžvÚ)rńĹÓčMkšL3Í4*šĎ?˙Âw ‡ŽĽ—^*6œ]ÖZkÍÂokű`ŐlӄU:ŕ´tb]üřăňÚkŻK:TžO6[œ2erhź0G“JӝW˘÷˜ŤKRźöýÁAëŔ‘wß}׺j €-aŤ¤G&‹,2D!„B!„B!„B!ŮĂYQ2lŘCŕŔŒ3Î(łĎ>ť|ůĺ—RŘŇĺďż˙6N'. °ĘÂ٢_żžžsżýö›ďŤ¨ 4¨xXmŰmÁŚaŰK-ľ„Ż|vëÖMN>ůYý…B!„B!„B!„’-\‘…%={ö,97ýôÓI>ýô3ß1ś9ą­€‚ŰĹ|öŮçžăŕ**˜ŒÇC./žř’ůűÎ;ďĘ?˙ü#-éž^ÖYgmß*Ď?˙żĐ•)ś ša†Ě (÷ÜsŻü‰˛ŢzĘ[l-'NôÉ.šdËFXÍĆëԀű ń;˝ŤüxA^{ Úgš¤•O.Xq+ =F^xáEšě˛ËeĎ=÷–Ľ—^^yäQŸě ,PR !„B!„B!„B!éCGB`ő•ŘŻäüĎ?˙,IŔę.^ంŐ=źtíÚUŽ<ňđŔý†-\°Š VSqYd‘…Ł€c &čÁäɓͪ,.Űlł•ď:śm…6Ř`}ůďď’÷ßť÷łJIpۘˇß~§dĽŒącÇ˙Ż{衇˜•f‚œqĆi…´>'W_}…rȁfe -^xąů}^N>ůD9ĺ”eÖYg-žĂŞ"pşëŽŰKV’šéŚ›e„ ć{ţ­„ţţűăčâůŕ]Ą'Œ)SŚřŽmÎĐË´é[íľ×%rXmĺᇇÉă?\řÍç8š<˙ü >ů•VZŃؖäÁ!‡$Q`Ş SĚQGa?źŹťî:f &/<đ dEů„•ˆŽşęryîš§ eç]yâ‰GŠ[mšŔž{îyß9ŘWĐa‹B!„B!„B!„’>ÜZˆ›ožŠoâżS§ŽŇżYnšeÍö"^ŕPÜ:G˃>d&×˙óŸYŠç.źđ|Ya…űĺÝwß-LĐ÷’-śŘLćœs_źË/ż˛dŐ˙ď˙“Í6ŰÔcĺ8šüůçŸĹcŹş˛ĆŤ›ďŘČ[ţ`›– ˆ‹mˆ\VXayšôҋĚ;Ç˙"˝{ĎhV>ńŽ^^ýâ÷kŻ˝^V_}hŃyeĹ—7Ž$ˇÝvťüđÏf‹›6ÚH†mYŮcŔ€ţf•×^{C´`•˜óĎżPŽ8â0ßůmśŮÚ|ŕ„ň÷ßcĚ9ŢUh\°ŠČ•W^]<ţĺ—_}áHăqÇ#W_}­q¤˜{cSĐIÄĆüé;ŢpĂőԄ  úů° ď÷ŒłËľ×Ţ GŐć¸tđÁĘ\sÍ)<ň˜YuŰXí˛ËN2ß|óšđyć™ÇäÓíˇßYŒóŔĂdűíˇ-ĂŮćÚkŻ2:ŔŠ<Ýťw—­śÚB–]v™Č4c Ą+ޏJN<ńřâ98 vŸü÷ż÷ĘčŃŁ öł¨l˛‰ß‘+đ<ú裒iäœQzőęĺsp‚cËyç]hĘô”)“Ío=âżň/č,E!„B!„B!„BI:˛âÁuňˆ“ágžyś$[Ó|đĄ…Éő[Ěę[¤lšĺććcăńǟ;ďźËöěłĎYźŔqĹü‚5ţkŻ˝^Ü.ÇËË/ż"O=ő´qDqYk­5Í'Œ'Ÿ|Ę\ĎŽ]t‰o8Çxd‚ŔYÂťzŒ†ŤŽşFzőę)ťďž[IVîŔÇĆ7ß|+;o ¤~řAŢ˙YxᅊçvÚióńňÝwßËěłĎ&Q@돳VńŰš+íÜpĂM&Ŕľ×^'Ë-ˇŒqrÁŠ8ř„íĆŒS<~ď˝÷ 6u‡qŢqVp5Ą/žřRzôčî[Í%Č-ˇÜ&Ë/żœ şZńx°2‹ ”‰ƒ:´`Gă%KŇȧSN9ÍŹ4änKǖSO=)4~ĽĺB!„B!„B!„˘‡[ R&ŘreĎ=÷): $ń7ß|+ůé§ř퉰˘Ćţâ‹/™UU‚YvŹ^Ž0aŔ9+Čā•aî˝÷>k:/ťě 9î¸}Î"a׸ńƛĺ裏“$œyć9˛ß~”l‹cŤ{ÜsĎ˝˛ŃF›Ęˆż—„~ř‘žŐl‚üř㏅ź9DâŔ*)aN9îPż}=ö–;î¸3öšp9ě°#ĺţű‡•„zę‘Űűüý÷ßrčĄGČ_”8öÝ÷ălňbłÍś’>řP˛&|ÂJE;ďź[!ţŠ˝ĆŻżţ*ťě˛ťql"„B!„B!„B!„dWd!$L†cÂű믿–gžyÖ8 Œ;VŇ࣏>–5×\GÖZk ŮpĂ dŽ9f—>}ú˜ŐQ~ůĺyőŐ×ĺîťď‘ŻžúZ˘Ó8Îlçƒ4\fLŘůß˙^(nťâňÜsυ^{„ rđÁ‡ÉM7Ý"›nşą,žřâҡďĚ2í´ÓšU.NlgO>ů$ô:X)ůˇńĆš­^ú÷ď'˝{÷.äĺ8>|¸I˙wŢ-_~ůĽTÂc=!O?ýŹŹ˝öZfť˘Áƒ™•G°úśžůţű ůúšü÷ż÷Œ0žţúYcudˇÝv1ée–Y¤C‡ćBœŸĚ*5Řf¨{÷écÓ‡8Měźóޞţúët<§L3Mg“–?˙ô;RŔŃçŘcO0Űŕlşé&˛ä’K˜źĆ–@ŘÎŤÇźřâË&/GŽ´;˘`őC=\yäQłĐ A ˜|9r”Yaç’K.5+ÉŘŇ[éœzęéF/X)h饗”~ýú™U^FŒaŇ3l؃ňřăOšűV‹4ň ÎE+­´Şlžůć˛ňĘ+ĘÄ|fEäœ|>ýôSł‚Ń}÷Ý_ŐßF!„B!„B!„BH{§)š&Ë÷¨żM!Çî§Ůó×ýth=×!đAXwü]tŃ%^ÁG-„B˘yůĺ˙Ißž}‹ÇXIÎ/„B!„B!„B!„ú˘gĎćď;ďźšláĎÔÂgLëß)ÓúwŞçăxţ?rő7ř=HT˜+˛BHŃšsgYxá…dńĹ“O?ýŹd{)°ŕ‚ƒ}N,ŕ›ožB!„B!„B!„BŠ5td!„[K]s͕ƙ`Klôä“OËᅬ^˝zÉRK-)ű/Ţťďžkœ^!„B!„B!„B!¤Öpk!Bi:tč wŢy›,şč"ę8˙üólťíňŃG !„B!„B!„B!¤ţh´­…š…BHC0eĘŮ}÷=ĺ駟QÉőŐW˛ăŽťĐ‰…B!„B!„B!„’¸ľ!„4X•jĎ=÷‘!C–6ÚP]tˆ 0@ڟ~z;vŹüůç_ňţűČłĎ>'?ţ„q~!„B!„B!„B!„ź@GBi@Ţ{ď}ó!„B!„B!„B!„z‚[ B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š€Ž,„B!„B!„B!„B!$Б…B!„B!„B!„B!„ä:˛B!„B!„B!„B!„\@GB!„B!„B!„B!„’ čČB!„B!„B!„B!„BrY!„B!„B!„B!„BH. # !„B!„B!„B!„BÉtd!„B!„B!„B!„B!š ŁBRÁq!„B‚455 IŰWB!^ŘŽVŰUB!^ŘŽVŰUB!^ŘŽ’.td!$÷„&„B’×~¸8ííA‡í+!„$°]ľĂv•BHŘŽÚaťJ!$ lW I:˛ MÚ)|č!„ĆŚ’‡ŰŽ×h4l_ !„haťŰUB!ZŘŽĆĂv•BˆśŤ„T:˛ŇJđĽű }ĺ?“ţs ’űĎ)=z÷—nÓ÷’Žť eą\Ŕ÷Ç~’/–0kÚ$'ô@‘žČND$Őo,9=Őć(Ż8Y~ž;ńńĘI‹›–řxúóٌúűßâůznWťuë!ƒ‡Ź#ó ZMúĎ2¨x>ŞżŠ ?­čżŘNĆ=WhdÂŐÝ& 2 …\~&ĺ-Ďię*M=ycłĎqTşJCeé BšFtbi+/%07ĺĹ[^ěĄÉ_­\œô:ˆSTj=(u5úĎOĺן—Ÿž}\&ý;Ś^ßĎŤdƒőú˚ŤĎ, îQ<Ěo•|WČőjýî¤s݆v¨śN´ry˧¤)ňiŢŤő ^uRM§‹¨ŇTKüńőhůńÍß䛗†Ëż˙L*žŻˇv•䇞=[ú2ďźó沅?čđŒiý;%đqZ˙Nő|ĎßŕGBŽŁţż‰ 3Б…´[ź,Ýgě+K­łƒ,˛ęćŇbVvčÄMŇßI'–đˆjýӉĹ&"éŚEĽĹ^Ž=fYţ#„*śssĄ=ÖH˙-AŐmŕ‰˙ëŰ÷ĘOŻÜnViqÉűƒŒˇ}Ĺę+ťí8ˇl˝Ĺö7 â OĘxtb‘ä$Í㜧7Ő¸q¸ ‚]čÄ"uTO¤7aäëŚÖN,ž¨Sšőąďĺšűž2Ť´¸ÔSťŠŐW–^~˛ÄŚ…v՟î¨ţŚ"(ü´ś˙˘ís9z™puˇ ¨LB!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨ő@W°˙ż~@žůô.łJ‹K}=Żv‘]vœ]śÚ|űj+!zM"ÔŤőť“νčĢ“SéD+—ˇ|ŞAš"Ż‘ć˝ZęU'Ő´q:ąˆ*MšŃI!đŤg’OůNĆý5Ąxž-¤\čČFGRxZ–Ý`7Y~ă=ͲËŃĽÉąôţ ‰'ĄB‘%Ô)łt;aA1ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUˇ pO9?źp­üřҍĹSy}ˆńśŻ{ď6Ÿěż÷Ŕđ%1ă OĘxtb‘ä$Í㜧7Ő¸q¸ ‚]čÄ"uTO¤7aäë&ON,žžR!Ż/źýsšěî/‹çęĄ]]vĽeůUv+q`QýMEPřim˙EŰçrô2áęnP™„BŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘PëĄB]™‰ˇoŻ?šĽxŽÚŐ˝v›CöÝkŽâóŞďňɡcdÄ_rÝŽöí?P6ŢęLźđÚÖôEő7Aá§ľýmŸËŃ˄ŤťM@e 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡t…çŐú,"3ő]JţőĽLœđgžŸWçď.ˇ°Źżn:ąä%MŰŻšN´ry˧¤)ňiŢŤő ^uRM§‹¨Ň”W ]í3˙ ҡđĚ:ꇿe¨‰škWIžéŇĽ‹ůűË/ĂŻ“˚Řú7ř‘ˆsšŽ,¤Ýŕ{hYv]Ůü‹¤ű }­–/ž-ÔҨ†ˆHDôЈŞëZNÄĆsě„ińĹ-ów҉%<˘Z˙tbą‰Hşi‘Diń…—cY–˙ĄŠíÜdh5ŇKPuۀ¨ú¨s÷>2ó dÂČá2nÄWĹóľ~ˆńśŻŹűšú’e¤ďĚ]#"H2”ńčÄ"ÉIšÇ9OoŞqă:qťĐ‰EꨞH#nÂČ9ÖMžXźôąŤlšĆŹňăŻăäłďĆĎçŠ]´đÚ˛ůöçI÷î3ŰeKž”Dö‘BOkű/Ú>—Ł— WY›€Ę$rtb —Ó4wąŮG'–Č“i”—HO`źŽŹVčÉMyąŖ{FhňW+§˝bÄ•€ZięŞ@—Ž3ɀ9דqc‘F]<Ÿ§vuýuűÉ/Rx^íŇî• œ( +S.¨Wëw'{щE'§Ň‰V.oůTƒ4E^#Í{ľÔŤNŞiătbUšęA']{u‘9V c/Łü§xžÎ,$:˛D‡Ń‘…äďC˒km'kîxtK…ďD—H:ąD“ôw҉%<˘Z˙tbą‰Hşi‘Diń…—cY–˙ĄŠíÜdh5ŇKPuŰU}Thťf¸’LůwœüýóGŇvş61Ţöuçí疏–¸ÂSa<:ąHr’ćqÎӛjܸN\Á.tb‘:Ş'҈›0rŽuS/N,.hłÖXڟŒ0EŢýl¤ď|-đ=ˇ.ťľŹšţfőPŤlɗ’ƒ¨ đÓÚţ‹śĎĺčeÂUÖ& 2 …XÂĺ4Í]löщ%ňdĺ%RĆŻ+ŤúErS^,AąĺŞšüŐĘĹéA݃1E% ÖCšşň ÍšyŔ 2eňxőçÇĹŕ<´Ť;m7›œpôü智î• œ( +S.¨Wëw'{щE'§Ň‰V.oůTƒ4E^#Í{ľÔŤNŞiătbUšęI'h?ű/ÖG&žW˙üzt1œÎ,$ :˛D‡Ń‘…䎠Ë*[Ü]éÄMŇßI'–đˆjýӉĹ&"éŚEĽĹ^Ž=fYţ#„*śssĄ=ÖH˙-AŐmĘ­zÎąT͝Y‚N,G<8&‚$ź‘NŒN,’œ¤yœóôŚ7ŽWA° X¤Žę‰4â&ŒœcÝԛ‹—™IƎŸ"ď~^;g– Ë*k.[ňĽä ˛zZŰŃöš˝L¸ĘÚTjUČщ%\NÓÜĹfX"OŚQ^"e<ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\œô:ˆSTj=¤ŠŤšű.Qsg– ËáĎëKjÉw'"ŹLš ^­ßtîE'œJ'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞK˜yЌtf!j͑ĽYi`‚Ű щʼnçÄ×RI'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUˇ HZÍśÚţ2ÓŕľZŻŃÖŢUƒŕvBtb)˝DŐâU).XÖŔ†SˆßPúiƒN,’EÜzvbqůż]VžĽĺ5lWąXJTÚPČщ%\NÓÜĹfX"OŚQ^"e<ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\œô:ˆSTj=¤ŠŤ9÷Ôź ď-ýf[Łĺ\ ŰUl'D'…\5ÓdąýšëD+—ˇ|ŞAš"Ż‘ć˝ZęU'Ő´q:ąˆ*MuŠϗˇœWf]Ś_ëőŤŰŽRKčČBoeŢwöůeÝÝOl (m´|ńlĄ–F%DD"˘‡FT]×r"6žcč$L‹/n™ż“N,áŐú§‹MDŇM‹$J‹/ź{̲üGUlçć C{Ź‘ţ[‚ŞŰTZÍ˝ţ12]żůZŻU‡ßdŰ=ĺ̓‰ o¤Ł‹$'iç<˝ŠĆëÄUěB'ŠŁz"¸ #çX7ŕÄâĆ=çŔ!2xîž-‡5hWűö(ënrl¸lɗ’ƒ¨ đÓÚţ‹śĎĺčeÂs¸M@Ľ…XÂĺ4Í]löщ%ňdĺ%RĆŻ+ŤúErS^,AąĺŞšüŐĘĹéA݃1E% ÖCšş ‘ žźÄ‘ҽן-aľx^żťœ~Ň _şJž;aeĘőjýî¤s/:ąčäT:ŃĘĺ-ŸjŚČk¤yŻÖƒzŐI5mœN,˘JS]ęÄ"ˇřnƒ¤×ěÝ[ďCgŇ> # iHź8žŻžý‘ŇÔÔlm´|ńlĄ–F%DD"˘‡FT]×r"6žcč$L‹/n™ż“N,áŐú§‹MDŇM‹$J‹/ź{̲üGUlçć C{Ź‘ţ[‚ŞŰ¤RÚś9Ö8´¤Ýˊŕ}Ž;ráčĽ,“&EN,’œ¤yœóôŚ7ŽWA° X¤Žę‰4â&ŒœcÝ4’ @›vâƒkÖŽŽžîa…ť”…ě!(ÉPĆŁ‹$'iç<˝ŠĆëÄUěB'ŠŁz"¸ #çX7ćÄâ2dŢ^˛ß–óV˝]]nĺ]¤˙,ƒě2%_J˘‚ÂOkű/Ú>—Ł— ĎŮ6Uî+äčÄ.§iîbłN,‘'Ó(/‘2žŔx]Y­Đ/’›ňb Š-/öŒĐäŻV.NzĈ)*ľŇÔUˆ\Tr{̰€ĚľŔUoW÷Ţ}NYhp[’JňĽ$ŹLš ^­ßtîE'œJ'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞKÄČÍ0g™ƒ9ŤÖŽRkčČBˇňĆßî3ö•ĺ7ŢÓÚhůâŘB-EˆˆDD¨şŽĺDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUˇ Ȣ>úϊťJçî3űÚŔ´ń^ť_ßn˛˙Ţ#„%áMtbtb‘ä$Í㜧7Ő¸q¸ ‚]čÄ"uTO¤7aäëŚQX\Úz>éßťkŐÚŐî= Ď­Ťěf—+ůRr~ZŰŃöš˝Lxnś ¨r\!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäɕšŘIştŤćójŮwŻšŹI ćKIX™rA˝Zż;é܋N,:9•N´ry˧¤)ňiŢŤő ^uRM§‹¨ŇT—:QĘÍżá\Ňu†.™śŤ„ä:˛†dęÔŠćďRëěh–ąŒŞĆéÄMŇßI'–đˆjýӉĹ&"éŚEĽĹ^Ž=fYţ#„*śssĄ=ÖH˙-AŐm˛¨ MÍ2Ë2ۚŻn˜îľwŰqžđ-…b+ĹŁ‹$'iç<˝ŠĆëÄUěB'ŠŁz"¸ #çX7îÄĐĆížÉ<ć{5ÚŐĽ—ßśe+ÜQýMEPřim˙EŰçrô2áŮŢ& RŤBŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘Pë!M]…Č)’Űr [âΡ•9ŽFťşËŽsŸW`ZBôšD.¨Wëw'{щE'§Ň‰V.oůTƒ4E^#Í{ľÔŤNŞiătbUšęR'Z9üWhăć]{s.Ëv•<@GŇPx=ťMßC]mó’FË'o ľ4!"=4˘ęş–ąń{D'aZ|qËütb ¨Ö?Xl"’nZ$QZ|áĺŘc–ĺ?B¨b;7ÚcôßTÝ6 +'÷wÎźŘ&ŇŠ›géä˝ń˝×ęŐłłlłĺ!‚’đ:1:ąHr’ćqÎӛjܸN\Á.tb‘:Ş'҈›0rŽuÓœX\ś_g6éŐ˝s[”ŒÚŐn…ś{‘%7-•)ůRr~ZŰŃöš˝Lxś ¨rY!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉőúĎ\Jçişˇ…eöźÚIśŢb–’űóĽ$ŹLš ^­ßtîE'œJ'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞKhĺ<'ć\u™fúNž´9!YHĂáz ^~‰2q:ąD“ôw҉%<˘Z˙tbą‰Hşi‘Diń…—cY–˙ĄŠíÜdh5ŇKPuŰ€ŹXZh–™ZÇ|ËÂß˝ćĆĚf_%.ąa(ăщE’“4sžŢTăĆuâ*vĄ‹ÔQ=‘F܄‘sŹ›öäÄĐÖmşęĚ÷,ŰŐYˇd5–¨ţŚ"(ü´ś˙˘ís9z™đloPŠF!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉ-=UhëúĎž–ůšeťşáúLîÓ˘×$rA˝Zż;é܋N,:9•N´ry˧¤)ňiŢŤő ^uRM§‹¨ŇT—:ŃĘÓThëf]n€9ćŞ,¤‘Ą# i‚‡—.[Ҥ‰ľą‘ˆčĄU׾œˆçŘ#: Óâ‹[ćď¤KxDľţéÄb‘tÓ"‰Ňâ /Çł,˙BŰš9ČĐk¤˙– ęśŐqbiaƁŤîw•x‚×Xs苐$ź¸NŒN,’œ¤yœóôŚ7ŽWA° X¤Žę‰4â&ŒœcÝ´7'—ľ—ëAť:ß Őüá%_J˘‚ÂOkű/Ú>—Ł— Ďľ6UÎ*äčÄ.§iîbłN,‘'Ó(/‘2žŔx]Y­Đ/’›ňb Š-/öŒĐäŻV.NzĈ)*ľŇÔUˆœ"š!ĺő™Ź8ĽÉĄhJžWWŸŮw˙`ž”„•)ÔŤőť“νčĢ“SéD+—ˇ|ŞAš"Ż‘ć˝ZęU'Ő´q:ąˆ*MuŠ­\Hšú/>łřŇÁUYHBGŇP¸u÷úJż9´Ëˆc;éýOB…"›Gy]ˉŘxŽ=˘“0-ž¸eţN:ą„GTëŸN,6I7-’(-žđrě1Ëň!Tą›ƒ íąFúo ŞnPM'œ˜Ž˙ŇšűĚ­÷ŽťŠ÷Zýúv“…ěźm‹ęÄčÄ"ÉIšÇ9OoŞqă:qťĐ‰EꨞH#nÂČ9ÖM{ubCćí%ý{wm‰žAťÚ˝G_é?Ë śó%_J˘‚ÂOkű/Ú>—Ł— Ďľ6UÎ*äčÄ.§iîbłN,‘'Ó(/‘2žŔx]Y­Đ/’›ňb Š-/öŒĐäŻV.NzĈ)*ľŇÔUˆœ"š!ĺĽĺlć—.ݲ|^í" ölˇ[üĎsö]!ÔŤőť“νčĢ“SéD+—ˇ|ŞAš"Ż‘ć˝ZęU'Ő´q:ąˆ*MuŠ­\DšzÍŮCşÎĐĽ5]Á\ ¤1 # iHfqëy:ąD“ôw҉%<˘Z˙tbą‰Hşi‘Diń…—cY–˙ĄŠíÜdh5ŇKPuۀj;ą¸˙÷˜mQɊ%ďmťmů(ăщE’“4sž^+™čĆŠ ntb‘:Ş'҈›0rŽuӞX\–Z°ˇdĹŹs´ľŮQýMEPřim˙EŰçrô2áŮŢ& RBŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘Pë!M]…Č)’R^ügg˜iˆdĹ‹ÍĐvŰâžă°ď š ^­ßtîE'œJ'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞKhĺię=p!¤‘Ą# iŕmč~@ż9•Ę”4ibm,BD$"zhDŐu-'bă9öˆN´řâ–ů;éÄQ­:ąŘD$Ý´H˘´řÂËąÇ,Ë„PĹvn2´Çéż%¨şm@­œXŔtýçoMƒżmLBđ ęźm‚‹ęÄčÄ"ÉIšÇ9OoŞqă:qťĐ‰EꨞH#nÂČ9Ö XZâ.Ő M‘×Hó^­őŞ“jÚ8XD•ŚşÔ‰VN‘&ôšŁľíKĄ]%$Đ‘…4 Žô0gŕŒcóţ š’„ 9ŃIĐ]×r"6žcč$L‹/n™ż“N,áŐú§‹MDŇM‹$J‹/ź{̲üGUlçć C{Ź‘ţ[‚ŞŰÔ҉tí=‡Ä_- ŽĚ=Ww÷kŇK¨ ‹$'iç<˝ŠĆëÄUěB'ŠŁz"¸ #çX7tbi‹;ĎŹÓIVíęL}ćŒěo*‚ÂOkű/Ú>—Ł— Ď­6UŽ*äčÄ.§iîbłN,‘'Ó(/‘2žŔx]Y­Đ/’›ňb Š-/öŒĐäŻV.NzĈ)*ľŇÔUˆœ"š!ĺĹޖM×}vŃĺTšžW眮$_‰řސ ęŐúÝIç^tbŃÉŠt˘•Ë[>Ő M‘×Hó^­őŞ“jÚ8XD•ŚşÔ‰VN‘&7ŚďŸŐó*!ů ŁҀôčÝżřN,Ń$ýtb ¨Ö?Xl"’nZ$QZ|áĺŘc–ĺ?B¨b;7ÚcôßTÝ6 ÖN,`šý$+ôďŸŘ0”ńčÄ"ÉIšÇ9OoŞqă:qťĐ‰EꨞH#nÂČ9Ö XüqgéÓM˛˘{Ďž%÷ &<"(ü´ś˙˘ís9z™đloPŠF!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉ )/ámY×ig–ŹčßżK¨^Kž+ä‚zľ~wŇšXtr*hĺň–O5HSä5ŇźWëA˝ę¤š6N'QĽŠ.u˘•S¤É›ÝzwB:˛†¤Űô­Ë?—4ibm,BD$"zhDŐu-'bă9öˆN´řâ–ů;éÄQ­:ąŘD$Ý´H˘´řÂËąÇ,Ë„PĹvn2´Çéż%¨şm@œX@§n=%+fč5$"îGśB'INŇ<ÎyzS׉Ť ؅N,’yzéÄ"ÉQÄĽKiÜşw–Źč6mŻČŽPDPřim˙EŰçrô2áŮŢ& RBŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘Pë!M]…Č)’R^œH™N{IVôęŐŮzߒďŽÄĘőjýî¤s/:ąčäT:ŃĘĺ-ŸjŚČk¤yŻÖƒzŐI5mœN,˘JS]ęD+§HS0:OŸÝó*!y€[ ‘†ŔťďžvěÜEčÄMŇßI'–đˆjýӉĹ&"éŚEĽĹ^Ž=fYţ#„*śssĄ=ÖH˙-AŐmňâÄš:uńĽ§Ň=ÇŰž‹tíŇAĘFy{:ąHr’ćqÎӛjܸN\Á.tb‘ĚÓK'IŽ".XěqťNÓ!łvľc§.Ą7ę#…žÖö_´}.G/ž+mŞœSČщ%\NÓÜĹfX"OŚQ^"e<ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\œô:ˆSTj=¤ŠŤ9ErCʋ+ÓÜašĚÚŐ.]šKî[ň݉óD^ĂóĽŇ{щE'§Ň‰V.oůTƒ4E^#Í{ľÔŤNŞiătbUšęR'Z9Ešl劚ssjí*!y„+˛Ć¤É2 ki,BDŹB‘ŐżŁźŽĺDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUhND˜-^őQ1<Ā˘ë€ĐŠČŠij*óÚq?Ň˝nq­‘Ĺő_˘jńŞ—N,‰k`Ă)Äo(ý´A'IŽ".XÂă–Ýö•AS1ç#údÚţ—ś˙˘ís9z™đloPŠF!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉ )/NźŒxŰžôA›í„¤!˜arA˝Zż;Ń×ĐދN,:9•N´ry˧¤)ňiŢŤő ^uRM§‹¨ŇT—:ŃĘ)ŇVž˛|^%$Б…´,EˆˆUȉšśęş–ąń{D'aZ|qËütb ¨Ö?Xl"’nZ$QZ|áĺŘc–ĺ?B¨b;7ÚcôßTĄ=:aśxÔGĹđJjUG™:ąHr’ćqÎӛjܸN\Á.tb‘ĚÓK'IŽ".X¤ň2[}2m˙KŰŃöš˝LxÖľ ¨˛W!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉ )/NźLd@ú8ÁďND˜çŔ‘9‹y&šXtr*hĺň–O5HSä5ŇźWëA˝ę¤š6N'QĽŠ.u˘•S¤IUžiPčČBKc"brbŽ­şŽĺDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUhND˜-^őQ1<Ā’ÚcŐQ&†N,’œ¤yœóôŚ7ŽWA° X$óô҉E’ŁˆK'ŠźĚŚHT)ô´ś˙˘ís9z™đŹkPeŻBŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘Pë!M]…Č)’R^œx™Č€ôq‚ߝˆ0ρ#1rNô5´÷˘‹NNĽ­\ŢňŠiŠźFš÷j=¨WTÓĆéÄ"Ş4ŐĽN´rŠ4ŠĘ! LłRç8Йč Ý)ůb ‰¨şŽĺDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUhND˜-^őQ1<Ā’ÚŁI0ůšxOUe4:ąHr’ćqÎӛjܸN\Á.tb‘ĚÓK'IŽ".X’Ç͢]ę#…žÖö_´}.G/ţkÚTš¤ęLjć2úęÝI*cé“ĽŠŤ4őä ŒÍ>:ąDžLŁźDĘxăueľBżHnʋ%(śźŘ3B“żZš8=ču#ڍÔzHSW!rŠä†”'^&ŕX/ŁÉU]'ř݉ó8#çD_C{/:ąčäT:ŃĘĺ-ŸjŚČk¤yŻÖƒzŐI5mœN,˘JS]ęD+§HS9ĺÉ-éř!9„+˛ĆĹŇX„ˆŘ+{‰Ž¨şŽĺDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUhND˜-^őQ1<Ā’ÚcŐQ&†N,’œ¤yœóôŚ7ŽWA° X$óô҉E’ŁˆK'ŠźĚŚHT)ô´ś˙˘ís9z™đŹkPeŻBŽN,áršć.6űčÄy2ň)ă Œ×•Ő ý"š)/– ŘňbĎMţjĺâô ×AŒ˜˘Pë!M]…Č)’R^œx™@€&˙*Á ~w"Â<ŽÄČ9Ń×ĐދN,:9•N´ry˧¤)ňiŢŤő ^uRM§‹¨ŇT—:ŃĘ)ŇTNy"¤‘Ą# iL,EˆˆUȉšśęş–ąń{D'aZ|qËütb ¨Ö?Xl"’nZ$QZ|áĺŘc–ĺ?B¨b;7ÚcôßTĄ=:aśxÔGĹđJjUG™:ąHr’ćqÎӛjܸN\Á.tb‘ĚÓK'IŽ".X¤ň2›"Q}¤ĐÓÚţ‹śĎĺčeÂłŽM@•˝ 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâešüK 'âŢÁ< ćo¤œâ^tbŃÉŠt˘•Ë[>Ő M‘×Hó^­őŞ“jÚ8XD•ŚşÔ‰VN‘Ś¤ĺ‰F„Ž,¤aq4aNyńlhd\'",(ćŘ#: Óâ‹[ćď¤KxDľţéÄb‘tÓ"‰Ňâ /Çł,˙BŰš9ČĐk¤˙–  íщłĹË >*†‡PR{Ź:ĘÄЉE’“4sžŢTăĆuâ*vĄ‹dž^:ąHrqéÄ"•—ىę#…žÖö_´}.G/žumŞěUČщ%\NÓÜĹfX"OŚQ^"e<ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\œô:ˆSTj=¤ŠŤ9ErCʋ/Đä_Z8÷ćIXX0#ĺ÷˘‹NNĽ­\ŢňŠiŠźFš÷j=¨WTÓĆéÄ"Ş4ŐĽN´rŠ4%-O„4*td! ‰Ł sʋgkD#ă:aA1ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ¤›I”_x9ö˜eůŞŘÎÍA†öX#ýˇUhND˜-^őQ1<ĀRłÇŹQސN,’œ¤yœóôŚ7ŽWA° X$óô҉E’ŁˆK'ŠźĚf…ś˙Ľíżhű\Ž^&<ëÚTŮŤŁK¸œŚš‹Í>:ąDžLŁźDĘxăueľBżHnʋ%(śźŘ3B“żZš8=ču#ڍÔzHSW!rŠä†”'^& Éż´¨ŰIw­\5ÓdąýD÷RĘŠt˘•Ë[>Ő M‘×Hó^­őŞ“jÚ8XD•ŚşÔ‰VN‘Ś¤ĺ‰F†Ž,¤]á”|ą„…Dt˘ƒCOÄĆsě„ińĹ-ów҉%<˘Z˙tbą‰Hşi‘Diń…—cY–˙ĄŠíÜdh5ŇKP…öčD„ŮâePĂC (5{Ěĺ éÄ"ÉIšÇ9OoŞqă:qťĐ‰E2O/X$9Џtb‘ĘËlVhű_Úţ‹śĎĺčeÂłŽM@•˝ 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâešüË 'ä{PŻÖďNô5‚ş •sti˘‹B'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞKhĺiJŁ<҈Б…´œ’/–°ˆNtpč‰ŘxŽ=˘“0-ž¸eţN:ą„GTëŸN,6I7-’(-žđrě1Ëň!Tą›ƒ íąFúo ŞĐˆ0[ź ęŁbxˆĽfYŁź!X$9Ió8çéM5n\'Ž‚`:ąHć鼋$G—N,5Œ›đڎBÎQDŒęSheÂ~›€*‹rtb —Ó4wąŮG'–Č“i”—HO`źŽŹVčÉMyąŖ{FhňW+§˝bÄ•€Zię*DN‘ܐňâÄË´úĚ'ä{PŻÖďNô5‚ş •sti˘‹B'ZšźĺS Ňy4ďŐzPŻ:ŠŚÓ‰ETiŞKhĺiJŁ<Ҩ4 !uŽŁxzwJžXÂB":ŃÁĄ'bă9öˆN´řâ–ů;éÄQ­:ąŘD$Ý´H˘´řÂËąÇ,Ë„PĹvn2´Çéż%¨B{t"Âlń2¨Šá!”š=ĂLĚ:eg@)tb‘ä$Í㜧7Ő¸q¸ ‚]čÄ"™§—N,’E\:ąd7őv5ę–Úţ‹śĎĺčeÂSÜ& úU 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâeZ}śÝB“ăş8NČ÷ ^­ßčku*çčŇD'…N´ry˧¤)ňiŢŤő ^uRM§‹¨ŇT—:ŃĘ)ҔFy ’¤]%$ŻpEŇđ8%_,a!čŕĐąń{D'aZ|qËütb ¨Ö?Xl"’nZ$QZ|áĺŘc–ĺ?B¨b;7ÚcôßTĄ=:aśxÔGĹđĘÂ3Ay}:ąHr’ćqÎӛjܸN\Á.ľpb ­{÷mjJ7”ŒËX$9›¨ nŞńÚcÜ´nŠíżhű\Ž^&üçˇ ¨˛H!G'–p9Ms›}tb‰<™Fy‰”ńĆëĘj…~‘Ü”KPlyąg„&ľrqzĐë FLQ ¨őŚŽBäÉ )/NźL @ŤĎ,pBžőjýîD_#¨ŤP9G—&:ą(t˘•Ë[>Ő M‘×Hó^­őŞ“jÚ8XD•ŚşÔ‰VN‘ŚÔĘ! YHCă”|ą„…Dt˘ƒCOÄĆsě„ińĹ-ów҉%<˘Z˙tbą‰Hşi‘ĐžŚŞl`fŻ{̲üGUlçć C{Ź‘ţ[‚*´G'"Ě/ƒú¨b@YŘc&(ŻO'INŇ<ÎyzS׉Ť Ř%k'–˛|&”˛śk6Id\včÄ"ÉQÄĽK ăŚuKm˙EŰçrô2á?żM@•E 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâeë)%‚y℄ó7RΉš†X”r*hĺň–O5HSä5*ź—ăTŽ“ŕ°l­tRM§‹¨ŇT—:ŃĘ)Ҕ¤<Ĺ݋F„Ž,¤aqJžXÂB":ŃÁĄ'bă9öˆN´řâ–ů;éÄQ­:ąŘD$•´8vŁH‹/|j {Wx‚JE˙ŠŰcŮyžĄ=ÖČ[‚*´G'"Ě/ƒú¨b@YŘc-Ą‹$G—N,‰“çoqCo=U’QaŁ7i=[2.;tb‘ä(â҉Ľ†qÓşĽś˙˘ís9z™đŸß& Ę"…XÂĺ4Í]löщ%ňdĺ%RĆŻ+ŤúErS^,AąĺŞšüŐĘĹéA݃1E% ÖCšş ‘S$7¤ź8ń2€Šő”Á:ąDžLŁźDĘxăueľBżHnʋ%(śźŘ3B“żZš8=ču#ڍÔzHSW!rŠä†”'^&PąžR"˜'NHX0#團kˆĐ‰E)§Ň‰V.oůTƒ4E^Cq/łÚŠć^­ië$čŕâ>ŸŇ‰ĽĘ÷ŞAšęR'Z9Eš˛(O„42td!‹Ł:ĺ t˘ƒCOÄĆsě„ińĹ-ów҉%<˘Z˙tbą‰H˘´LuÂäŎąÇ˘.›ôż1p"u{,;Ď3´ÇŮbKP…öčD„ŮâePĂC (•ú(p".=YB'IŽ2.X&Ďß2âú˘„4”uIŽ2Ž›NŸCKĆ鼋$G—N,5Œ›Ö-ľýmŸËŃ˄˙ü6U)äčÄ.§iîbłN,‘'Ó(/‘2žŔx]Y­Đ/’›ňb Š-/öŒĐäŻV.NzĈ)*ľŇÔUˆœ"š!ĺʼn— Tʧ,čŐú݉“R]…ĘEŘmŮrŐL“ĹöÝK)§Ň‰V.oůTƒ4E^#â^>çÍ˝ZŞĄŻcMŃŠEě÷Ň椚6N'QĽŠ.u˘•S¤)ëňDH#BGҘ8ŞSž@':8ôDl<ÇŃI˜_Ü2'XÂ#ŞőO'›ˆ”Ç)/oiń…—cŽç÷[^OݍüGUlçć C{Ź‘-śUhND˜-^őQ1<ĀRŠ'âғ%tb‘ä(ă҉%Q`ňü-#nQÜŠ,ž-žRA5…-§’ŕžŢ•cÔ[%¸'X$9ЏtbŠaÜ´Đö_´}.G/ăHź€*‹rtb —Ó4wąŮG'–Č“i”—HO`źŽŹVčÉMyąŖ{FhňW+§˝bÄ•€Zię*DN‘ܐňâÄË*ÖSÚXĚÎú]#çÄ\C„N,Jšŕý*’Ë[>Ő M‘×°ÜËşeć^­ľĐ‰;l\âĐR†NŞiătbUšęR'Z9Eš˛.O„4*td!í'&Đ)'ޞĄpJœřxN|ăă”|ą„Ůâ9ŠkZNŞňĆň;ó‘K¸%@­:ąŘD¤Ź´¸ŤĺäMDZüio M˜Z˙×˙ŠĘ„PĹvn2´ÇŮbKP…öčD„ŮâePĂC (•ú(p".=YB'IŽ2.X&Ďß2âQ{UFüň łŐÁĽŘ„%đFq‹ŸSŚ3K•ň8ݸ #ç¸ěЉ%۸MŐheľýuŸ[/ăHź€*rtb —Ó4wąŮG'–Č“i”—HO`źŽŹVčÉMyąŖ{FhňW+§˝bÄ•€Zię*DN‘ܐňâÄË*ÖS8ÇÁüu˘äœ˜kˆĐ‰E)ź_Ery˧¤)ňS îŐzPz}'>MžĘJż÷=Č&Ń뤚6N'QĽŠ.u˘•S¤ÉZžRź! YHĂăÄ:ĺÄU6N‰€ωo|œ’/–0[Ňb ˇ¨őO'›ˆ¨Óâ}Đ)'oœ–4ęʆ’°đˇÖĂőářź|—“ ěąě<ĎĐkd‹-AÚŁf‹—A}T i@RŠ'âғ%tb‘ä(ă҉%Q`ňü-#nh—4§œJY‰~ýXǖ`=î¸ń¤ŹxaЉE’ŁˆK'–lă҉E™˝ 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâeëŠ 8śďND˜”ę*TÎQÜK+WÍ4Yl?Ń˝”rÁűU$—ˇ|ŞAš"ŻŃúŸ'§ş—S™NBƀÍWˋƒÚß?ľőkĹŰĽhătbUšęR'Z9Eš**Oĺދ„Ž,¤Ąqbrâ:aA1ÇŃI˜_\'"ĚĎQ\ÓrR•7–ß™´XÂ-jýӉĹ&"Ş´8Ž2-Rš.EZ|áĄöŘĐäYľ%>ßëÓQęöXvžgh5˛Ĺ–  íщłĹË >*†‡4 ŠÔGqéÉ:ąHr”qéĒ(0yţ*ă:eX7N:iN×{ďŚ'ÍŇxnœňďYźŸő’œŠâ&Œœă˛C'–lă҉E™˝ 9:ą„ËišťŘěŁKäÉ4ĘK¤Œ'0^WV+ô‹äŚźX‚bˋ=#4ůŤ•‹Óƒ^1bŠJ@­‡4u"§HnHyqâei•—,qlߝˆ0)ŐU¨œŁ¸—Vޚi˛Ř~˘{)ĺ‚÷ŤH.oůTƒ4E^ŸŠ1׈şW°‘ĽN÷rO4¸Ť´$Úv(E§‹¨ŇT—:ŃĘ)Ҕiy’Ňü%¤Ą# iXœ˜@§œ¸NDXPĚąGtŚĹ׉łĹs×´œTĺĺwć#-–pK€Z˙tbą‰ˆ*-e:ą8–‚–Źl„ŰŁÓŞ|„5…L˙”čß7…^3:-!× œĚ…=ÖČ[‚*´G'"Ě/ƒú¨Ҁ¤RNÄĽ'KčÄ"ÉQĆĽK˘ŔäůŤŒ[ŽKŹK ^Ůž­ňÚí€|N-˘‹äőëôŢ3:ąHrqéĒmÜŞ8ąXp'ŁúZGâT9 ŁK¸œŚš‹Í>:ąDžLŁźDĘxăueľBżHnʋ%(śźŘ3B“żZš8=ču#ڍÔzHSW!rŠä†”'^&VyÉÇö݉“R]…Ę9Š{i媙&‹í'ş—R.xżŠäň–O5HSä5đIâÄłőTW'žtˇ$˛¤Çć˛Őč.E§‹¨ŇT—:ŃĘ)ŇTÍňDH#CGҐ81N9qˆ° ˜cč$L‹/Žf‹ç(Ži9ŠĘËďĚGZ,ᖵţéÄbUZĘpb ¤´Ű†Ľ\ÖÔ¤Ň?îŰáůď;aŰjČŻ(;Ď3´ÇŮbKP…öčD„ŮâePĂC Hc!ÁĄ'Ɗ—2tb‘ä(ă҉%Q`ňüŐ\ZU ¸˛ş„8ޤ–Çś[F:ˇ8mőo“ ڏ:‹č ‹$G—N,ŮĆĽ‹2{rtb —Ó4wąŮG'–Č“i”—HO`źŽŹVčÉMyąŖ{FhňW+§˝bÄ•€Zię*DN‘ܐňâÄËŞV^*Ŕą}w"¤TWĄrŽâ^ZšjŚÉbű‰îĽ” ŢŻ"šźĺS ŇuŠN™÷ňnůc‘ ӉSFšlżż)*MžxžôáUŠăČÓ#—˘Ó‰ETiŠŐ]u˘•S¤)ŹcŞ6N'QĽ)¨“D÷J9M‘×(GN‘ŚŞ–§ŕ B:˛ö]§;'bă9öˆN´řâ:aśxŽâš–“ŞźąüÎ|¤Ĺn PëŸN,6‰M‹Â‰Ĺ‰˛§ĺqec*dŚN‘ŠSŚ ÖŽtđ)ťÎ1˜Äkjn.<´>ͤŮ|ďౝÖo– âę,ŽÝŰżż5n"{,;Ď3´ÇŮbKP…öčD„ŮâePĂCTęŁŔ‰Jň<ÝO™šŠKT-^•â҉%Q`ňüŐ\ZQ D9°„‹S"?ľ0ň†śÎüĹ[hNKŰçë6aͅ/ÍÍ­ŸÂ÷üˇi˛ŹŻě˝ŁÍĹş:‹­ÎuJăӉE’ŁˆK'–lă6Ew\2ĂQœŒęShe"jŞâŐĎTČщ%\NÓÜĹfX"OŚQ^"e<ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\œô:ˆSTj=¤ŠŤ9ErCʋ/¨ZyI 'âž%ߝˆ0÷{„Ý–-WÍ4Yl?Ń˝”rÁűU$—ˇ|ŞAšÂÂÔN,Ž{ݰ<(‘sœŠżűl–&ozšÂtth‰Đ›äŘU_iĎ5%îz9ą“ZŚ)L'eÝ+ĺ4E^Ł9EšâĘSš÷ ĘŇČБ…4>NtîDœˆçŘ#: Óâ‹ëD„Ůâ9ŠkZNŞňĆň;ó‘K¸%@­:ąŘD$6-•:ąL s'ÔŚN™\˜Đ›bţ:–}Ď}ŕŘ"RřL™dŒCK‡NŇĄc'š›ěŰ áMQÓx ôš÷[D"NćÂkd‹-AÚŁf‹—A}T wě‘SŠ'*Éó4iňÝ´\”™Ť¸DŐâU).X&Ďߘ¸*G;ąŰÄŸÉSŚĘäÉSeŠqZ‰ŠŕEh*FůŚ´c€°ĹĄĽI:vhö9śx4ƒi shi ŽËŸN,’E\:ądˇVN,šű9 šäĎmŞŸŠŁK¸œŚš‹Í>:ąDžLŁźDĘxăueľBżHnʋ%(śźŘ3B“żZš8=ču#ڍÔzHSW!rŠä†”'^&Pľň’&!i+ůŽ‘‹°Ű˛ĺœ˜k¤™&‹í'ş—R.xżŠäň–O5H“-̡ŠIÔ˝\g{9Ż÷™´gj˧˜ [Â]9ă0â´>Ť4ľ<şńđ˛Eáá´Ő‰ĽÔąFBVX™ęĂźż˙ÂV̖ś|r$dŤĄ€\h˜ű˝ÝŐě^5HSPʼnî•rš"ŻQŽœ"Mśň”Ő˝˘äiDčČB'ş"w"NÄĆsě„ińĹu"ÂlńĹ5-'UycůůH‹%Ü Ö?Xl"™‹˛K;ReĂqě¸âZáA ,S&ÉÔÂÓŇÔɓD&M’ţż})łŽřVfńôó‡ô?JŚűwźt(ČüŰĄŁŒę2˝ü1݌ňCŸ9ĺ‹ţóˏ}ç‘ćNÓČÔÎ]¤cá/[|÷ą8Ľ¤neçy†öX#[l ŞĐˆ0[ź ęŁbxH’J}8QIžgB˘ű)3Wq‰ŞĹŤR\:ą$ Lžż1qU“JS˛ă;­•Â'MžRřL5+Ž8ąL™TřLč(SĆN#ΔiĽCç>Ň­ĎÜŇÜą›ŒöœĚ¸úÚ2ňˇdäëoČäą# íZł4÷ę zu”Î}:IǙ;H§…ďÝ:JǎÍňoÓ3x‡–N…Osł´ć‡ÝĄĹęĚҚžĐí†Ú~\iF×ĚFÎqŮĄKśqéĢü™ 9:ą„ËišťŘěŁKäÉH=8NźŒ÷kĚ6{ńş˛ZĄ_$7ĺĹ[^ěĄÉ_­\\™Ńë FLQ ¨őŚŽBäÉ )/NźL =ĹĘdˆőÝQČ9Ęëi䜘k¤™&‹í'ş—R.xżŠäň–O5H“-, 'ÇÇ̓RÇÇ<ŸNRř;yŞwčśä"NÉßśŔɁ(͚̪ŮřŰ'Ď}Ý(J~ťDl;äӍŇIÉVC!rYčŽf÷ŞAšbÉî•rš"ŻQŽœ"M6űÍę^Qr„4*td!‹]‘;'bă9öˆN´řâ:aśxŽâš–“ŞźąüÎ|¤Ĺn PëŸN,6‰LK%N,ŽcM‹Ďeň$ăŔ2yňD™:qźĚőòءďČŔ៧•0:O™,} |ř,đŰW˛Ö‡OĘÝzÉóW×ć[N&ué.]Śë)M;Ň|ŔąOöš_źOBśpËÉ\Řclą%¨B{t"Âlń2¨Šá! H*őQŕD%yž ‰î§Ě\Ĺ%ŞŻJqéĒ(0yţĆĭĉ%ҁĹÄ™řďä˘˄ “eňŘ2ĺ—nŇôs“L;ýÜŇcČÂ2ý J‡é§3qţy˙#ůáœKeҟIĎ!Kɜűď-RřŒűňkůóéçĺŻ'Ÿç‡ 2ŠyŠL) ţŰĄYĆÍÜAd–fé0OGéĹ*ĄĆyĹ]5{Š˜mݛ rÓ†P§ďÜ,=Ś™Śc“LSxöěP˜UěĐܲ¨cĆqEţ-ČO*ÜtR!îč=ё1™č´ČMíPhů'ľÜÓ8śtÄ*˘ÍćŰMMS`;w§őÓÔzP˘;σhX>†}Ť˘ťšÝŤi*ŃI’{ĽœŚČk”#§HSUë¸9B:˛†$n`Ŕ‰8áÄĹsěˆHqŠSňĹf‹ç(Ži9űK„œřxUK‹%Ü şŽ9pÂĂlń¤%2\BMJ/4=NviIىĹűĐ–)“ “r˙Ž—Î˙.+~ţŠ,óĹŤŇkühIJďq#ełw”•>QnYv;ůžĎě2m>ŇqšnţėxńűYŮcŮyžĄ=ÖČ[‚*´G'"Ě/ƒú¨Ҁ¤RN¤Ş˙šĄĚ\Ĺ%ŞŻJqéĒ(0yţ–7ôÖe8ąxˇ‚Ó XĆO˜$ăţž*šVšŢœ$]Ě)=W_EŚŰzaięäßţnÄ÷Ęowţ×|ÇĘ*żţŚô^oMÜmžšĚ§˙[Ë_O>+>ü˜LţýOłŸxóˆBŰőÇTi~˛Lî>E&ÎÓ,2_a°ąOGéÚĽŁLÓŠƒqn [ĄĽ¸4tÉo,ufávB’E\:ąd—N,ƟАŁK¸œŚš‹Í>:ąDž,ŐSiĆÚŽÓ˛-śŐ Mś°JœXœ{9îś<­ňXqerë‹pb™ôďéÚAdćnMŇƎ2Ý´ÓČÔƒăřÉ"ăŚ6ľüuŕřRhń)|ožŇâG‚Ö´š0ÓŘąđěÚŠp< Ł#sNâzͅ;Žţg˛ü{žú"ĘíҒů%üŇßüţę%ߏŽyĆŚw˘T™¸ĺűœ|p.†÷UGđ :pc0ćcŒä4‰…О%ĆĆ>Ι@RŠÖ˙ČDąp’šÝl5‰%ż|U’–á ‹ˆŔâHĂ~XŤˇąąŮBcÉ@ůąޏ51~ďíŘńŻßŒâžÝaűV g~ó÷ąüŮ/t÷ďœÍćăOÂŞ7Ť”űşůń1Ě˙­ďÁÎď{ –>ńi\zçťAëîC?ÇĚŘ0PxŘţűˆý°ń€ýŔđf…ĆŤEŒÝZܧđZ<ăVp/™…Ivąřť1H%Q[Œiź…űŽ&ądkŤI,ЧР§I,|=•éNZ|šÄ"ŒäŢK)ԃó…3i eľşbÜ+ő­<…ŮeŢ_´ż°­J_PՓՃźż(čšÄ"0NŁž¤:@ěKˇ(BÁc`˝c’¤E$i¤éŁíÇĘKQ/˜_"˝­VN#đ‰…ĽMb!O‚Îm­K`i™hľ,4ë&Ś „ă %ěœCÍĘárřNĂÖ]éܗ8;9żţ1şÇÝôsŢźœŐ]ěż Ëč蹶Ί,%ěž/ářBŮž˝¸ÚÄçŰ8łfߣ–ó(¸[ŘzÝż>B‹§î‚u؏ëÝŻłśňé śb”'Wo ´“QűŹ‹,ÇMbQÓÓ˘eťŠ&˛hšŞ„$ł#ś! Œd …ˎŇdDJĎ1¤DrťĄůÂŔ€Rşn€řË.†/BÜ&ĽfÇő‡˛ó%E‹w KłŐDcsćć2^ůÔxĂ#ŸŔx‹ż}PÉŰoŮŢö÷š/0žtâ•0väQ,ů} ‘Y‚`ăŒČ-ŃGÔ;PÂöHŒe—ÁxÔÇ9H*ăQ "Őú™(ŽBCł’­&ąÄ㗯JŇ2<"‰Ĺ4 őV–hݍ>ÇÄó&Ćîž ;ţóßFaa'XŇ^YĹ żúk¨=ů´ű…¸o:j›Ř|ě LÜq[ČÎČç1ű–7`úUŻŔâ{?ˆĺ†iv -_ጁâYí˝„•;›ŘXhar˘„‰ą˘ťíKÜ$Ćę, 2KŽő"ř6RIÔcoឣI,ŮÚn)‹jö¤ŽC+(Ś‚ž&ąđőTŚ;ińi‹0’{/%ŠÓlšäÍýłcł>†Ĺú1wžĚĺ Ü<)˜OhrdśBđ\äęô˙“čHôŇŞO Ĺč Şz˛>#ď/ :€&ąŒÓ¨'ŠűŇ-ŠPđ˜Xď˜$iDŃ#IiúÄhűąňRÔ ć—HoŤ•Ó|baRKŕú€é„ÓëÎPΖ?MÓ%°4ęŚ{żxlg ‡U°fż"|vĂŔӋOzť+˜8Šôˆ+ÎmcÎfu;WßÎoĂYŃĽm¸÷“…rw'źŇFžżŇŔcçšXľąR5‚ł%nĐâ!¨ËÂ`•çŁCŻsŤĄ@y2ąŔÁ(Űɨ} ¨e:îh‹šž-ŰY4‘EËU#$ˆ ™ą I`$›H(tŔŔXv¤&#RzŽ!%’Ű ÍΔŇuÄÇXv1|âŕ6)5;Ž?üƔŘ ‰%˜7ÓŽ{hyVaiŐ7PßXž˧đÖ/˙%,žAÖâěďúĂßx?.LíÂłš<Ćgw#_(1u{˝ řrŻ3ßňůţŇí'ÂÇXvQÚăˆÚbJŘI€ąě2ú8gIe< D¤>D W!‰ĄŮ ÉV“XbńËW%i‘ÄRo˜¸˛\CmÍÂřĂETŸ°Ü•WvüŤCůşkŔ‡Äňü˙ůďŃxá´ýŔ.V°Onó[l"KOÜZ~ü­˜ş÷\üßAëěů‘%7 ´”ÎçPü(ĐMbFrďĽęĄŮŘpmîšý˝ö‹<ďzč—]ňhĽ:Í̄íů>ç&aŽ[Šż0 ia„J_PՓőyQĐ4‰E`œF=Iu€Ř—nQ„‚Ç$ŔzÇ$I#ŠIŇHÓ'Fۏ•—˘^0żDz[­œFŕ K“Äâý€°Ý´ěůŻúf†eáĆÝ%LíÇłk>ť8XiĽˇ;kĽQwŇs>„€ˆëŻ4 ŹÚ™NĎTđ] Źo´ńĽg7qq˝…ňXĺJÁ%ľF÷dŤ­Xč/0ŠP9‰/A=œŻÇĚ'[ľŒÚ§€ZźźRöI˜F=Ÿ†:ĆŠę+E‹–m&šČ˘ĺŞDĚŽŘ†$0’Í:``,;RH“)=ǐÉí†ć gJéşâc,ťžqp›”š×ĘΗ”H,äšárö$Ż­^†Y[Ă[ů8^÷řgâUWŢÎë'?÷Gřw?řĄąś„ą™ĎĂHňßEi‘Ë<Ăö8˘śŘśG`,ť ĆŁ>Ι@RŠÖ˙ČDąp’šÝl5‰%ż|U’–á $–ŢxçÄŻŽ7peІÜĹf>_DŽf`âMoÄÔ˙Œ˙śË]‰ĺ_˙*š§ÎřI,Ć༜ôkß~ *R>tű˙ăŻ`ńďĆúÇ?ĺ[™ĹýŮiUžÎŁüBëwľqn˙:f§Ť˜ž,‡ˇBZôďGŢ#łđĆ%R ł$j‹1ˇpßŃ$–lmˇ*‰Eux$‰AŽ tš zšÄÂ×SŠOińi‹0’{/ĽŘ_Źv mł‰#űžëh}Ľ†|žŇŚÓĎŰ`ľÂ°šD†Ó_´ż° BĽ/¨ęÉúŒźż(čšÄ"0NŁž¤:@ěKˇ¸Ź+çXĐn#ë‘$4}b´ýXy)ęóK¤ˇŐĘi>ą°´H,ŢgŻ–}?ŰŘlcs­é>˝ó`Ĺń2Y6°vɿꊓ^˜„Ň=Ćŕ/  â˙ę,Ag˘KuűEĽ}Ďüú›ŚPŰlâKĎ6pţJ Őą"*ăEä 9ge´^9ëˇ_Ţgťם?_Iić5Ÿ‚ĺ+Ż”}ŚEOÁ§ĄŽqŞzÁJѢeŠ&˛hŮöB‚’ŮېF˛šƒB ŒeG i2"ĽçR"šÝĐ|aŕ @)]7@|ŒeĂ!n“RłăúC#ó%‰ĽÝŹcső"fV.á'žř§8|ůŒB*‹đśOýwüŮwýcÔ7–Q™ŘŃÇú+­xÎÓ÷R•`ä2ϰ=ލ-v „í‘Ë.ƒń¨s&TĆŁ@DęăŃHDąp’šÝl5‰%ż|#ŘrłŽHbšpyëëmŒ}˝ˆę“9äĆÇąăŸü,Ę7ݑ8$–S˙WÄ✉á!€ ÎĚ0ÍgŸƒŐh"W.A&FąˆšŸüQTŻť‹ż˙‡0Z­ńÄ0úK0 “Ÿ-˘~m—oŤŁŢlcavŹł„s`Ţë TFFä}„<éĹMbI%ĎŤÉv+ŻÄ•ké´;PP:M=MbáëŠLwŇâÓ$a$÷^JążXfŰĹwMż€ą1ËN˘ŽńĘeÔZ{ÜŐB•YÔëŞ{^‚iP“XÄz˛>ŁVrŃ$žqő$Őb_şĹ•`]8ǂvY$i¤éŁíÇĘKQ/˜_"˝­VN#đ‰…Ĺ!ą°Ň÷>{uśÚXmÚĎ;۸qOÓłU|c9‡Í ŁO`qt#‘T<„Q¸qäŰj(H q6˙[lŘáBŻżŠˆ‹K |öé:–k-ŒO•QŞ;~wɤÁó7Źś^˙˜şĺ î‚é Ó@ŠyŔ§€ZŚăŽ&ą(ę+E‹–m*9hѲ…$ł#ś! Œds…ˎŇdDJĎ1¤DrťĄůÂŔ€Rşn€řË.†/BÜ&ĽfÇő‡˛ő…UnÄΛzúKłśŽőĽł8rîiüňÇ˙ëČH,ŽfŁ…ëŸzĹú&ĚVÓ~!gő\†˙ `ĘH+z™gŘGÔ;PÂöHŒe—ÁxÔÇ9H*ăQ "Ťńh¸˘X¸ I ÍnHśšÄ Œ_žŠśÂń#‰Ĺ™:NŸ_ĂĆJ“Ÿ, ňíŠ{÷`çżţçR‹šžŽS˙ú? yęlwűŸœK"鬜’ëÄő~ÎË5狺gžE{ŮXř?ţ)ňSSnşšîVCîßîňŃĺ'ó˜řLKmœš¸ŽvŰňŁwUOtăřɅľĹ˜Ć[¸ďhKśśšÄ˘xš zšÄÂ×S™î¤Ĺ§I,ÂHî˝T„ţŇhmŔ$Żšáă{~ÝľpI,Ćz„şň´BN…h‹XOÖgÔë@˘Ś0(×CšuĹŃSp—Ó_HŽҨ'ŠűŇ-ŽëŠqůÚ9´ŰČz$I#MŸm?V^ŠzÁüémľrO,,m‹ƒoŹ5ątaS9 o¸ąŠ Ľq|ćRŤ-ĂšĽ´çB÷ÖŇݚ§wl’˙˜g)ĉqrˇ=âÚt}ZlćP™¨âm/Ŕó9Ź,ÖíçÉ5˜ .P6V°\<ĚŤ;Ëk„­ŰNFíS@-ÓqG“Xő‚•˘EË6MdѲm…$ł#ś! Œds…ˎŇdDJĎ1¤DrťĄůÂŔ€Rşn€řË.†/BÜ&ĽfÇő‡˛ő%‰%é%ąÔÖ.cső^ý̗ńöOý&ę•´Űm÷Ľ}€7|ĺ=n\łžîoĄó§äíČś=ލ-v „í‘Ë.ƒń¨s&TĆŁ@Dă‘ěÓĹÂUHbhvC˛Ő$–X`üňU´M‹ÄŇnNŸ_Es‰0ůĄ<Š ”ÂÜ?˙'(,ĚCčƒiâĚŻýš§Ďř&.‰%×!´ä ĎŻKhi<÷<˘JéČaěü—śOós}RLo›ĄÎ - r˙h­ËÎ^\GŤeőĎ6TÁňˆBfIÔcoឣI,ŮÚj‹âi*či _Oeş“Ÿ&ą#š÷R őĐšíükˇöüŰĆužěăˇţŞýŤmcuWÇ÷ŽŻŸQ¨cŽ”Čpú ’övŁUé Şz˛>#ď/ :€&ąŒÓ¨'ŠűŇ-‘pÎÁw,hˇ‘őH’Fš>1Ú~Źźő‚ů%ŇŰjĺ4ŸXX$wžëę9[ ­\ŮÄÚbˇěÉcf×ŢwĄŒ“†:Iâ83g)Äą‰-$%Ă8ˇ¤—[E\`?rKĹ~pŰĆâ9ű^ľazʍ|eFŹňôTŤîHÔś@;ľOľLÇMbQÔ”“-ŰQ4‘EËśDĚŽŘ†$0’M:``,;RH“)=ǐÉí†ć gJéşâc,ťžqp›”š×Ę֗„$çE Ä˛z Í5źőÔýř/˙5r–‰QŠYŤ÷o|ćŤîj,ΖGD­ D.ó ŰăˆÚbJŘI€ąě2ú8gIe< Dd1ÉÎ1}Q,\…$†f7$[Mb‰Ć/ßśQň‘XÎ\XC{‰0ńšUĽăGąóŸý2r“É…ßţÔżő„oŕ\Äb -ý_—ĐŇ|ţâHaĎnĚţ‹ŠÂÜŹŸÄŇŮÍȕź}Տh-vÎÍl“ďœťř/%ľĹ˜Ć[¸ďhKśśšÄ˘xš zšÄÂ×S™î¤Ĺ§I,ÂH¤\:ŠGß´:Ű ÍMžÇäTŤ?5śJaĹMÚ"ËgĎH”Ő Ás‘ŤÓ˙O˘#ŃKŤ>)xŁ/¨ęÉúŒźż(čšÄ"0NŁž¤:@üëŔ„xǔ˘IŇD$Í+X¤ąňRÔ ć—HoŤ•Ó|ŚÁËK‘ÄŇ;nˇL\>ˇj´qď‰2žeŽă+‹´(­•TR´cuđ 4ëfÍRo˝} Ś ,^ÜÄćFÓS6(ľňôŠĹ´ „1âv2Ÿj™Ž;šÄ˘¨'('-ZśŤh"‹–í/œ €ŠFlCÉ& 00–)¤Éˆ”žcH‰ävCó…3ĽtÝń1–] _„8¸MJ͎ëeëK $oš‹çШ­ă—O~w}ţ}šŘţś"ËôŇ÷+ń°ţ#HV^I,őÍ.ŸÝÄŽ1ˇŻâC‹UœŤçř„0'NbŹŘBQČ0$%Č´-WŹ2^uí8î9˜Ăę•:֖já2ó”y¸^ ž?~,XÎ[¤DÖfRÉ+eŸ„iDŃSđi¨cœŞž œ´hŮ΢‰,Zśˇp&Śą I`$›,(tŔŔXv¤&#RzŽ!%’Ű ÍΔŇuÄÇXv1|âŕ6)5;Ž?”­/ 3M ‰Ľśvív?ţŞ}8ţú—Â(—1j1›-éŮ•L:ő¸ë´Ůnú•ƒ7Â&^P†ÖGÔ;PÂöHŒe—ÁxÔljmœĘxˆČb<’czBţżI2Žk;Š<#ŘjK,0~ůF°ĺÍ"břżäęœĺšĎ]Ú@sÝBĺĂä’XňÓS˜˙ßţrăIăůS¸ôÇŢ_…EféŻĘ’ü:„–ÚgςZ-ĕüžÝ˜ůĽ_@Ž\âę8çTú˜‰†}ŽÎšZÝ}Č˝c>k<ć’YľĹ˜Ć[¸ďhKśś/: AíA:í”NSAO“Xřz*ӝ´ř4‰EާpÁ#o‰ĹçžÔŮVč–ÏSĆK~Ώ5ŃYYŤ†Ý“b1„ţ€¤ý…ÝhUú‚ŞžŹĎČű‹‚ I,ă4ęIŞÄžtËBźŽh‹š^0żDz[­œFŕK“ÄRŰhaéR ‡fěűĆŮ*Ţsś‚Íś1úŐWŔ&ĐđI5ŐYd¤šełˆƒť'đÝ×ĺQ[ˇĎýâĆ ü<ËŞˇź˝ĺgQ˘şëĄŒŇ§€ZŚăŽ&ą(꩔“-ŰT4‘EËöďŐ Äƒ9…HnGň ‚B ŒeG i2"ĽçR"šÝĐ|aŕ @)]7Ŕż(eÚĹđEˆƒŰ¤Ôě¸ţPśžHH,ěK}mÍUüč+öá•×Ď"ߍQzÇ˙ cÇ F)ÍZřĺŃӏš­vź˝Sƒ‘[˘=ލ-v „í‘Ë.ƒń¨Ű8•ń(‘Ĺx$;ÇôEąp’šÝl5‰%ż|#ŘşŞ¤nĎs—ë¨ŐM?e?^[ľ}Ęçąăţ ssćßnăÜ;~Ë%˘x‰,2KŽOZń’WrÝxw; Űąö…KH"…#‡0ńăo űçŮsöš?ÝF˝fâĘb™ŽŇ‹ Š +~ž[ŃV“X˛ľÍŒÄ2¤‰6ţ˝Ç@AÉU=MbáëŠLwŇâÓ$ad¸žÂKźź:IĹIbÇÄEĚL…紝“‹(ć׺ÄͰ3äţąŔŤ5Ÿ §Ň†Ó_´ż°­J_PՓőyQĐ4‰E`œF=IuĺKˇa]Dݒ’č‘$@DŇźÂc]Œźő‚ů%ŇŰjĺ4Ÿx˜ÄÂČ+ˆyI,›kM,_ŽáúyëUMbF†ë)\°Ä˛ŁÓjn:KŞáŽ_bĆFŽpç‘űÝź\]O"ÁV(›Y‘Ăé/ HÚ_؍VĽ/¨ęÉúŒźż(čšÄ"0NŁž¤:€&ą Ü~’ćëb伨Ě/‘ŢV+§ř$LC”—÷Ă:FY{I,ëŤ Ź,ÖqË.OçĆńŐĽRŚŤŻ0Ӂ<.ŠĆł: Ç߆eßOLâ‡nĘŰĄM,_\÷„ČWśď[ƒugQŒşóĽ ^Źc•v˘Ş7Ěţ¤’WĘ> ӈ˘§ŕÓPÇ8U˝ĺ¤EËvMdѲ­…dąľI`$›DˆĐRH“)=ǐÉí†ć gJéşâc,ťžqp›”š×Š/$éA‹ŮŹĄśž„ŰŽNá{^ş+¤oĚĎŁüß~ šť_ŽaKł^cžCesî™vŠ÷‰ŰšȰ=ލ-v „í‘Ë.ƒń¨Ű8•ń(‘Ĺx$;ÇL„,㸜ŁČ3‚­&ąÄă—oŰž:Ĺłďy͖‰ĹĽpĘDţ›Ś‹”ŽĹô÷žšœü–Şqę ß÷A‡żŇýńČ,šţöBLr‹ýk_Lś"KOŚ~âmČÍî@+†ţISżŻçžŃąĎ}Ľá–ˇL„ÂëUëL“XRÉój˛}1“X„ÓŞôšf  äŞ‚ž&ąđőTŚ;ińi‹02\OႥ@žB‹;Ÿ‘ť­eľqŰąŻƒ'w˙”ťőPËŮ^ČąłřŰ őň%ŮMLŻž3ď/ HÚ_؍VĽ/¨ęÉúŒźż(čšÄ"0NŁž¤:€&ą Ü~’ć,ŞXy)ęóK¤ˇŐĘi>‰ŇpŸňň X‚yˇZłďMŻžÖÇăkĹD䒡l5ˆÜ-…xçÓ˛rh–§đˇnÎŮϢ-,_Ţ\:HHAQën˜ídT>Ô2w4‰EQ/fÝiѲÝDY´l[!FlmÉ& 00–)¤Éˆ”žcH‰ävCó…3ĽtÝń1–] _„8¸MJ͎ëeďK…Něü‰Ľ ąXfËqpg?óšýÜ7FľŠň˙ýoPřąÁ°ÄńąľšÉÄňí†OĎ˙E9Ĺ(ó ŰăˆÚbJŘI€ąě2ú8ąSYŒG‘|Ů*׹$'4[Mb‰Ć/ßś*yËVcéĹ­Ź6ŃjXČÎěD8[ ýěOş[ ŠČĺ?ýK mČ+čZD+łôVeÉĺ<¸}lŚDdɍaćďţDž#źŹËbťřšZ5Âňjƒ[>ž°• ‚4‰%•<Ż&ŰűJ,˛üIAAÉU=MbáëŠLwŇâÓ$adč^JÄÂ(`ďl+äl4=v ;gÖŔ“ÝłěůśfëZ‹ó‘§B:S§¸˛\ÔRĐń$ÔčQđ(F_PՓőyQĐ4‰E`œF=Iu€-EbĺGźc=’¤ˆHšW°¨b弨Ě/‘ŢV+§ř$LC”ƒÄB=/‰ĽY7ąrĽ†Cӄďcxf٘˜\ҏ#0l8qJ+śPTb‹u– M‹ěűăňŢrá–ÍÚ˘çFň“N‰Wîţ?Ž„Vef;QŐfRÉ+eŸ„iDŃSđi¨cœŞ^ĚşÓ˘e;Š&˛hٖB2ŒŘÚ$0’M :``,;RH“)=ǐÉí†ć gJéşâc,ťžqp›”š×Ęޗ$– /dľąžt“cyüü T”źÜł_ÎţgQügż ‹ČZÚľşťľKZšBçŔ`źnŠ\ćśÇľĹ”°=’cŮe0őqb§2"˛"ů˛U$ŽcINhśšÄ Œ_žl“ćÝQí(Żo6ąšŮ†ńĺhŃtǧ‰ű^ƒŇţ˝•U$R{âIŹ?ř{Bíîj,Î?ŁěU|[ š–.™Ľn_şŒ´¤|ăő¨Üv+úß´;˙ő‰-č[–,ЃMÔěƒNYxË&$‰ÚbLă-Üw4‰%[[MbQtUAO“Xřz*ӝ´ř4‰Eéť×$vá/ßŕa [íşwÇ‰Ż eűÖÔ°pËĄ/ť‰´Üź űÓôťČ.@_=ĎËŤă;@2bôU=YŸ‘÷@“XĆiԓTĐ$„ŰOŇź‚E+/E˝`~‰ôśZ9Ŕ'aÎϒ¤áɋ8z­Ś‰ĽK›Ř3N¸PĂ7VʑÉ%#_}Ń4ƒ8âžc“r¨LOᵇľÍ6Wƒň >÷>Đdą(ë ł?Šä•˛OÂ4˘č)ř4Ô1NU/fÝiѲ]EY´\Uœ,źÉ& 00–)¤ÉˆŚ:ś†/ œ(Ľëˆąěbř"ÄÁmRjv\({_’XČű@Öž#sVb)ć,üĂ7ωTĽđÝoFé×~˜œD–ŇÜŘŕb|Š{.§›Ě UA›Ó$–Ę–ű8ąSYŒG‘|Ů*׹$'4[Mb‰Ć/ßś!3bŰŤŹĆâ|Ĺ˝śÖFsŐ~DöÍV'˛RÂÔ|w•™\zç_űH,FďŘýkxśňZ2KÎłĽPďgĽHdqdúm?č’K;_ŹQŸŔ2(0;î› ´V,Ź­ˇašá‚ňŠ#\ś>˝H€DśpßŃ$–lm5‰EŃU=MbáëŠLwŇâÓ$adçœ˘'öžŮ\ ‡,ŇnŐ`™mÜyěkÉ='>ănAÔj1îťé§,B÷ĎŹ“ďů軏WŇŞO Ĺč Şz˛>#ď/ :€&ąŒÓ¨'АÄ˘hC4‰EM/˜_"˝­VN#đI˜†ó‘XzŤ­Ňé˙íÎÎ}éňĺ:Ş9BÓ~ćúĹĽJ< 6HN8‰Cl‰ľŐP`u–^§<&qӜý|zĽ‰f˝ VÝÔëÎ" ľ(ë ł?Šä•˛OÂ4˘č)ř4Ô1NU/fÝiѲEY´\5œ,źÉ& 00–)¤ÉˆŚ:ś†/ œ(Ľëˆąěbř"ÄÁmRjv\({_Ň$ąŘGľľ+0Ű üôköáŔÎ1D•üíˇ˘ňűż‰ÜĄƒČBڍŹv›‹_Ÿu˙:_ť÷%r™gŘGÔ;PÂöHŒe—ÁxÔljmœĘxˆČb<ŠŰG*q]Ir C°Ő$–X`üň`›4ďzÇ`}˝‰śł%З› v‡čáŹĆ’ŸœP"˛4^8ÍǞđŹÄŇş+˛ô†o•–Á6Bžż]˘‹šş†4Ľ¸w7Ć_yπÄâžű€ĐâţmŮňŹŁešŘ¨ľ|eÔ ÄMbI%ĎŤÉV“X]UĐÓ$žžĘt'->MbaGöI!3$l"ȓGžtH)Śiaźz łËÉÁš“vZ ŰŚ VÍżěťMęýĹIÇ" ŐZz<ŠŃTőd}FŢ_tMb§QOR`˒XD9ůŽIA$i"’ć,•Xy)ęóK¤ˇŐĘi> Ӑĺ ąőźĎ^Wë0[&î&|ôʄ˜pBq‰")Ů@@ŸTÓ!´ó^ˇJ¸ýpÓe +Wę°şŤrSŕ8ëŽWQęŽ_G`֝ďXĽ¨ę ł?Šä•˛OŽ Ťœ†:ĆŠęĽPwZ´lGŃD-W…' o€F˛I€B ŒeG i2"…i†­á gJéşâc,ťžqp›”š×Ę֗Ŕƒ˛đ…ŁoHH,Í4këřţ—îÂíGgWŒ}{Pţíw ÇíHUlkëB•łÓóîß\žťĹPä2ϰ=ލ-v „í‘Ë.ƒń¨Ű8•ń(‘Ĺxˇ-ŽT⺒ä†`ŤI,ąŔřĺÁ6JŢ*Ťą˜mÂFÍDkŮ=ÖꤓËcňM÷š¸Ęj,‹ú˜/q–EĐbôd–\{Ą.ńĹů5ę f iĘĚ|ˇ{zԙč}$tóŃÚË66Ť˛ôĆâŕüŁôf6fĺnឣI,ŮÚj‹˘Ť zšÄÂ×S™î¤Ĺ§I,ž ‘6˘Ô7Ďl?[­îśBÇžfĎŁň‚.ä,ÜrđA÷¸Ýnřňőe# ŸČć>n]Ĺ]­E GÁŁ}AUOÖgäýEAĐ$qő$Ő4‰áö“4ŻĐp'/E˝`~‰ôśZ9Ŕ'aÝ˙HŚđg0Ĺ ćƒÚFÓ~öÚĆőómźëâÚe’A„—šD…ě’|ő‰{>Š[ÄŢr}Ď`ZX[Ş÷vbÎŻ*í¤óĄ‡źî¸éŠäŃ'Ą^ZýI%Ż”}ŚEOÁ§ĄŽqŞz)ԝ-ŰU4‘EËś—ŕdá ŔH6 P老ąěH!MF¤0ÍĐÁ °5|aŕ @)]7@|ŒeĂ!n“RłăúCŮúÂ*7bçO,ňßH9­Ć&ękKxů‰źůö$–É w›ĄÂ~?Ғv˝.\Ĺ‘gö_ďţÍJ1Ę<Ăö8˘śŘśG`,ť ĆŁ>NlăTĆŁ@DăQÜś8R‰ëJ’S‚­&ąÄă—o[nÖ" u;Ţf˝…śýĚ|¤ŃYĹţWyÉ-(ě˜Q"ąXőV?˙E&ơ6<˜á_őĹÄ[kéŽĘRX˜ÇŘíˇ‚EbéŻĘŇśĐz´ć’XjÎźJ1Ɲž‰&ऒçŐdŤI,ŠŽ*či _Oeş“Ÿ&ąt„Đ ¨×Ch+!ݧŒű6äl+T‡iľń’ă_‡’Řƒř]Ç?×Ů^¨šŮOĎâUçŚßˆPW^âOG’bԁޞŹĎH›šâŘŚI,|ă4ęIŞh Âí'i^ÁR‰•—˘^0żDz[­œFŕ“0 •źú÷[ƒx–^ťĺlĺŢÂÎjŸŠMbŠ•ŹL’QDF:H™TŁäŻuçďFiî=ÔFŁf˘śŢôÔÉ 1YĄú"őşCŠíDUo˜ýI%Ż”}ŚEOÁ§ĄŽqŞz)ԝ-ŰY4‘EËś–ŕdá ŔH6 P老ąěH!MF¤0ÍĐÁ °5|aŕ @)]7@|ŒeĂ!n“RłăúCŮůŇ{€(đ%‰Ĺl5ąšr GvUńăŻŢ‡Ô$ŸGń—ŢŽŇ?ý%÷8‰87Ö7„:íb ľŮ˝îąaäťv˘4˝ ŰăˆÚbJŘI€ąě2ú8ąSYŒGqŰâH%Ž+INaśšÄ Œ_žl“ćÍłŤŐÚ0Ű]"K÷AăřŤîq1•m…ÖzVŁ)ʂ‰ Ć r÷B§ŕg|ÎĂşŐU¤-SŻ{U÷<{yH,˝k‰öŁMűĽ …ÍZ+a[Œiź…űŽ&ądkŤI,ŠŽ*či _Oeş“Ÿ&ąŔw˙łD÷#Ź2ö‘GÜě-wžŻ,c˙Â%¨Ęą]OŰś-Xf°ÉHߗqo‹$䉌Ý_D÷›ŇţżTőd}FŢ_tMb§QOR U‹bRą„xǤ G’4Ió c1ňRÔ ć—HoŤ•Ó|ŚáŐĄxyy ”ëK űžÔD{,‡Ç×Ë "ɀȑˆ\BCZI%Š ˘hŤł4)‡]󓘫˜¨o´ÜmYuGĄ:!f; ŐcZíDU$iDđ) –鸣I,Šzi՝-ŰX4‘EËś•ŕdá ŔH6đS老ąěH!MF¤0ÍĐÁ °5|aŕ @)]7@|ŒeĂ!n“RłăúCŮř °°|‰Cb!ËÄĆĘEĚNđ o:ŒB>ýé$˙}߅ňüˇö[ĂqĕćĆŚýŇę\ŹNĄ2î|]ß9‡-ŃGÔ;PÂöHŒe—ÁxÔljmœĘxˆČb<ŠŰG*q]Ir C°Ő$–X`üň`'oŃśB=ŹŃ4á<ďj>Ó­ućÓ\ĽŒĘ×)­ĆâČÚW¸ĺ›Uű}žGq˙š$k@.éLČŽžľšîŠ,ŽŒÝv Œąą~xI,˝×w´j˘ńlÎű=§Œúţ÷Î%8ąĆ'MbI%ĎŤÉvےXşB2„]UĐÓ$žžĘt'-žŤÄź˙ŒQx„‘Aú$ňŻ{čn+dYxÉąĄ6kw¤˜oáş˝ťé´Z †kŻoSßRh@Âúdˇ´ż°óTŠU=YŸ‘÷@“XĆiԓTHŸÄ˘˜^ńfĄI,’4˘čmľrOÂ4Tó˛ü™Y˝ÚZ FGv4ńĄ+Ó +“D#ŠřâŔ°áÄ%#œdI†zV¨ŠűŽÚ-űůőjsPwžŠŚ8u—V;QŐfRÉ+eŸ„iDŃSđi¨cœŞ^u§EËvMdѲ-%<€ł/R‚F˛1ŸB ŒeG i2"…i†­á gJéşâc,ťžqp›”š×J߁…ĺK‹ƒo,_DŃ0ńö7Âdľ€Ź$÷ň;QţýßDî@ô_Č~ŮÚؐę=6wůBůbIŠĚÝM4‰…Ľ˛%ĆĆ>NlăTĆŁ@DăQÜą1„SâfœÄá!ŘjK,0~ůF°MšˇČÎy`謆b>Ůěσĺ›o@ŽT‚ŞŹă›ýDŠ7Đ`\čXzÇ˝ůŰÍĎęleŕţľ(DfąÖ֑śĹĆożŐˇ*Ëŕםž°_ě=Yw}Ş7ÚŃ3Ń$–Tňźšl5‰EŃU=MbáëŠLwŇâÓ$ĄžŹ|„–…ŰMh•”^ZÎ b­šý×ÄíGž‰HbęwŸ¸ßžçL´›5n™ôsö9DŕÝ'öçp°Ň ptHÜ)xŁ/¨ęÉúŒźż(čšÄ"0NŁž¤:€&ą ě7%Ě+XąňRÔ ć—HoŤ•Ó|Ś‘R^ý LÂćf%ĂÂCÍqŹśs äĎ6;áJ*QlŸ@Ă'ŐtĘ`Ł2‹›f[hŐL4ëmfP°î×sžč-IÎĐ$5Ÿ†:ĆŠęePwZ´lWŃD-ŰSˆ žļĐcّBšŒHašĄƒA`křÂŔ€Rşn€řË.†/BÜ&ĽfÇő‡ŇóĹóňKŗŕCżA=úŻ´B$[6×.Ăl5đżźá öÍU‘ľ8$–ňo˙:rˇŢÉŽąžúʁ%_>t‹ű7_âŸËĐÚăˆÚbJŘI€ąě2ú8ąSYŒGqÇĆ>L‰›q‡‡`ŤI,ąŔřĺÁV%ďHœ‰€n˝aş›Ď4úókůĆë}:˘•Yš/Ą˝˛: °x˙§Á˯ދ-‰…ş$˛­Ţ -Ý)żŮB2vˍ>ňJĎWŻ­çîËĆފ,Ęâýú-AÝDËńEÁV“X˛ľÝî$ž .z”\UĐÓ$žžĘt'->Ň$‘υţAůY‰%”Iţ˛`š&*ĽeÚsQĺÄîoÁ´L;ś'mVvźĆđ—ü~{Ď8z}’D‡ÝhUú‚ŞžŹĎČű‹‚ I,ă4ęIŞh Â~SÂź‚E+/E˝`~‰ôśZ9Ŕ'aŒźXÜCň==ŸÍŔh}ľi?{51;ÝĆVĆ#’GˆMĂF™p"őMÍ&y:än1tӁ Čž&Ř\o ę$PCm'Şz)úPËtÜيĺ4Ô1NU/ƒşÓ˘e;‹&˛hŮćBŒŁ°ŠļĐcّBšŒHašĄƒA`křÂŔ€Rşn€řË.†/B̢ćĂ×JÇ%\ŐćrČTH,e´jřĄť÷ঃSšLOĄü_ţ# oyŁ’zťĺ0îëR˝ZЌ‹űŽŮ/#sů"SghíqDmą%l$ŔXvŒG}œŘĆŠŒGˆ,ĆŁ¸ccŚÄÍ8‰ĂC°Ő$–X`üň`›4oŸ‰;—öĚ;ŚýôËŮV¨}ńąjőW#);ʚ,ęϞô<(ë¤Ţ™[{ăyH,`}Kw%ËęX+ľ¸Xł‰,děŚëÁ^‘ĽK˘qţ-Yh-śáěÜç”Uçě ӈ˘§ŕÓPÇ8U˝ŒëN‹–í(šČ˘e 1ŽÂ*˛žB ŒeG i2"…i†­á gJéşâc,ťžq0‹š c\(™/˝‡z˛‡_X٨—ž‰ĽŐŘ@}}ݏ~÷ݲC—bĹńOPüĹ_°g/ţôĺxŢXYŠ|}×QTwěBžŕß*˘÷•=u݄3l#j‹(i{` Éb<ęăÄ6Ne< Dd1ĹCř0%nĆI‚­&ąÄă—oۤyŤŘ5[•FZ/Ôű$äó(îŰëń&ĐęĎ=ď&Ţ_šzú9ˇ7ĎöžĘóŻÄŇ%°tĂý-†ş_™ťx+Ćś> RZ˜Gn|ä#ڐĎGç¸}şé++ĄhK*y^Mś[ŽÄ’é$KácRĚRAO“Xřz*ӝ´řH“XDzÄH7HÜ`7śł´­pŰjľv´‰ŰŽ>Œ8âäóĘk?k§Ńś_$n0tŢŇ1l˜ŤŹďľ˝ét¸dˆ˝ôë°­J_PՓőyQĐ4‰E`œF=Iu€7‰… I,$I#ŠŢV+§ř$Lƒ“'ŻŢ˝ĄGQż 6×:ŤąĚL´đČz5á•IXä —\B|rIfá9‚{Žm2pbWÉžśPŰlyę„říÄwĎŸëXĽ¨ęĽŘvj™Ž;[ąœ†:ĆŠęe\wZ´lWŃD-ŰTˆqV‘ ô:``,;RH“)L3t0l _8PJ× cŮĹđEˆƒYÔź`ăúCń|éŃE‘}áíÇÝń3PÎÖŕĺš7ułŐÄćĘeŰ3†ˇ˝b/âŠaäěwyűW@Îţ+ږ'…ţ”ţÝ˙ cŹÂěë°ÚjŰ|čČËPŞN˘Xa‘ÚŁç<"ˇÇľĹł=†Ë.ƒń¨Ű8•ń(‘Ĺxwl áÔ¸'qxśšÄ Œ_žl“ćíŞ’ź3ˇÍÎŞúůV’ÂÎ9…|8 Ž4Ż,zžÜ˘>‰Ĺ;•‡ˇ˛úŤŽôČ+˝Ÿ‹Y˘K+›YœůŹ|č|Ť°g5–n¸vŽ“ŻŹ¸B¤T^a;ėŒm5‰%[ŰŤ‹ÄÂȈłTĐÓ$žžĘt'-žŤÄ"‰$^ş˘z`ÜďvgO†_"ą8ůŇ2Ű(ÖptĎ)ĕkö>án/d™­~ţ̌QŻą>B •CG äsąú‚ŞžŹĎČű‹â9) ˛ţIG˘'ď/˛^!šNHŁž¤:T/Űś$‰Źą‡qL ażšz¤–—Ô'•źő‚ů%ŇŰjĺ4Ÿ„i¤™W7ŕN-ÝŐXňhă ăl E%ŠČWg‰DRŸ\—p’%f9?ëçęnŮ6zŤ˛ ł¨ęĽčS@-Óqg+–ÓPÇ8U˝ŒëN‹–í,šČ˘e[ Ů@OĄƲ#…4‘Â4CƒŔÖđ…3ĽtÝń1–] _„8˜EÍ †1Ž?Ý—ŕ  ž¸KsAŸ㍳‚mŞsä<ÜXžˆůŠŢţŚC(䣑OršŠĽ2*Ő1űWEŠ\ąe”íż¸1‹ĽH¤–ü˝÷ ü[żc÷._źĺl)´žĄ”ĆâřV÷ž€‘sś*ŔűjjhíqDmąĹhŘZcc'śq*ăQ "‹ń(î؇)q3Nâđl5‰%ż|#Ř&Í;Š]ťÝ›YŁ;çćfĄş‹#–;yV1<¤bXü[őČ+˝tů.+).̃ˇ˝PĎçú….‘Ľ-ÜcVÎî;šÄ’­­&ą(fŠ §I,|=•éNZ|šÄâ?9™„Â3ńޛz ÄšgĄP]őţśŰ żíčבĎÇďēĺ ŢůwÎ3]2 gîgœďCß˝=ˇЀ # Ĺč Şz˛>#ď/ :€&ąŒÓ¨'Šđ˘'ą…XÇ$Ŕö›Ť'÷$óI%/E˝`~‰ôśZ9Ŕ'a)äe€Vßlš[ MŽľđŕę›Ŕ¸äâ’K†˛’J›Řç>Ÿ&ĺpbWŃžF°Đ¨ľźśď:ÂWw1ëÎs ˘ÖNTő†ŮŸTňJŮ'aQô|ę§Ş7ÄşÓ˘e;Š&˛hŮśB@6¸S老ąěH!MF¤0ÍĐÁ °5|aŕ @)]7@|ŒeĂ!fQó‚aŒëEóĽ÷˛ˆĄĎ úň˛…ÎzÇ#ą8[l,]Dš`áío:‚ąrQÄ!¨”+U .Qʼn/‹.ĄĹůŤ*Ćą#(˙ÎŻ#wýu] ľ•U勷÷ž“óP,űWcľGÁ+ŹčíqDmąEl`$ŔXvŒG}œŘĆŠŒGˆ,ĆŁ¸cc–âgœÄá!ŘjK,0~ůF°MšwT;ç—#֒Ů_$7=Ő1őSř ľ76üď弄H)‹weÖŞ,ÎÜl5ł#˛fwpˆ,ü]ęäĎ]‘E“XRÉój˛˝zI,ƒü”˛TĐÓ$žžĘt'->MbA ŕ^ăz™dŽŢÄęŠ+ ¤×nŐí€mÜs[Ą+„{ŻűŒ‰VŤćɓ˜eŐ? ň§PëˆEÜB[f:˝łŃTőd}FŢ_tMb§QOR`¨$ĹŹ ąŽI€!ě7WO8î Hć“J^ŠzÁüémľrOÂ4$y î˙ŕϋˆiă,VݎíšĚÄS2œoŇ Š„ś"’§9š$1á$ŕ[ŰČĄ]™Fcrőńy´‹Ő˜çśŮ,NaGĄ Ët>Ř´Řő NÝąŽUډŞ^Šm7 –鸳Ëi¨cœŞŢëN‹–í*ŃŢHjŃň"˛ÁB ŒeG i2"…i†­á gJéşâc,ťžq0‹š c\(š/D‘} -CLětCvÁŁĺKöKł&ţţ[c÷Ž2TĹ!§8+Ż8ŤąxĹ4Mœ?-ű\ľZĹÂŽyÁĹ!žäry4uľ|ćfQţÍ_Có˙y6˙ú}°Úm%ťZŠ‚/})vW'P(őăŠë{'@Ą-ƒx/ą"ˇÇľĹą="€‘cŮe0őqb§2"˛âŽ!<ˆÉ o’ħ!ŘjK,0~ůF°MšwťŢCFŤîY ˇSĺ‚+˛ˆˆ,VŁŐG}˛vŸƒÝ9ǝkœńÁÎ:47œźçť8bT+ƒ•aş× !RK­ç6kR ď“/[¸ďhKśśšÄ˘˜Ľ‚ž&ąđőTŚ;ińi‹0’xi˛9Oő9k™ ¸b “FiYöý` ĽÂ:Ží{IĺÄîoĄmśa´@‰÷†G ďć›Řýz}ŔWHޢÖplƒƒPđ(F_PՓőyQĐ4‰E`œF=IuMbAŘoŽžpܐĚ'•źő‚ů%ŇŰjĺ4Ÿ„i¤™W7ŕ ˇ[–{˙9]lŕ=Ťs˝ô\çéj÷Ö´s,ˆ+ÎkƒÎÓ96˜8ŰFŒGśąýĚQÇasÇnĐě~P~đŁód8__CőĘł(67äçˆóć]3ЏqŢ—.ę›mT'K]gě’čÎľÁú #ľU˝aö§ÇMbQÔbÝiѲEY´\=BňÁB ŒeG i2"…i†­á gJéşâc,ťžq0‹š c\HÝ;Ÿd~ĺEětĂŃđĹŻQ[[DŤą‰ťw?ŽŰ7 Uqś9ŰËɓ/ŕŁţžţőo˘ĺŮall ÷Üórźĺťß„;çܸ|>ď’`TÉ,(‘űgż ĂΟż_Éä}GKÄb Ż=ލ-v í1ʞ%ĆĆ>NlăTĆŁ@DăQÜą1„1YáB’ř4[Mb‰Ć/ßśIňföĹńąóEœýjŞŮY}ÄpnŮssŤŽäÇÇ:iĘüčdŐyč†n^öi ¤yőŇ"WŸúqľ–ť|H-gaŠ•w§’Î<3ř …8&Ţ%„ăÜť¸MŸ\i\<Mˆcç˝ë0˝–˜•IŹď˝ăçž@ąąTă9čŹe?ë6QŘô$ř=y§žvbHډç`Ëô§ÇMbQÔfÝѢe›‰&˛hš:„1)0T ŒeG i2"…i†­á gJéşâc,ťžq0‹š c\Hݗˆ$VÚ!_8i÷ĺfľŹFm UÜwËNźúĆYD‘˘ýĚKbyď{>€~ŕĂ0Űlnnâoţć3řâżŒŸţ™Ç]wżĚwČ,Î6Cí–|ë˲ĐlˇQúÍ˙š_˙mÔţčĎěÓá?¸ŹJřôą—a×Ü+m…TÚŁÁx•E]„%‰űC1n[ě@ÚcXeKŒ}œŘĆŠŒGˆ,ĆŁ¸ccb˛Â…$ńiśšÄ Œ_žl“ć­bÇë3Ô{ŃÔ&÷˜<+ °Č,Ź­ór‘ĽKˆ 9ŇűbŰ@hѕŢÓʞ †ęýç&›!‘…˝­{!´şăŽ÷Ľœç|=ĎüůtuśpßŃ$–lmŻz‹j–¤p}¤čşĹ§#Ńë0ŽÉTŻ•(şŽčzKŞăĽĹ§I,žâփC¸hˇë.‘%hL^{†1›Ä>śXţtĽŮŘtWčźőčŁHGŻźţ3řóű­f ĽňÄ ?ůÄ잯dŻáúdÍ+é“ąb‹›¸‰|Ž€\ąâO(PšÄ›ą2č3ňţ˘ h‹Ŕ8z’ęێÄ"ʏXÂ~ső}ɛA˘§’—˘^0żDz[­œFŕ“0¤y)ŐIŤeĄŐśđ¸YqˇÄa‘1œ—\‚¸+ŠP7ÎHuő ř:gŤůÝǁéyĹžžŘ\¸“§˛‹˛Í_8eJŒŻŮX鵛uÔVŻŕúřÁťö Š8”|~0ľźëŻŢƒ}đŁRťZ­†ßý?p}źűž—ťqÎ6CŚý RôĹťƒ5›­ţcťÂ?~;ĆŻ?ÍůošŰ.üŐ5wclţJՉNž‡~žÇ†ĄV˙ăDť-v í1ʞ%ĆĆ>NlăTĆŁ@DăQÜą1„1YáB’ř4[Mb‰Ć/ßśIóNjgtż$s_ŞuÉVŁÉ$v8dJgî JaÇLˇ_3g17:„Ăüí¨ç!ę÷u2˛!˛8çdÖęB2‹ă„•ď8Ň'ŤÄ„śpßŃ$–lm5‰EQHáúHÁwŮľ˘ڏ:Œk2Ők%ŠŽ#şŢ’ęx@ińi‹0Ň śŰ űŔÄŃą˘\ZÁĄ˝Ď`fÎěźéą Śf–;ŻĆ‚÷Nű{?l˙×jí|E °Â 9[ Ž9pÚΧ$O0/ß:÷e×~Çv=Ó gĂö#oŸéHgdlľěű`Ęšeś´\řó{ąŢމÇWż×V) ŻřŹTú‚ŞžŹĎČű böνĘ¸•ćŘĆы5fš‘$× iԓTPžtÓ$h‹˘OšÄÖ"bĄc^˜íUsźĐÂ×Vv„ˇ‚yĤ/Š“­Î"$Đ Ľ­†œŐźwGNFbéĽQ(˘>ľ ĺĺ3á|ĎąaäqxÚ•E‡üÚFľÔšV 3…Ű>UډŞŢ0űSŠăŽ&ą(ę łî‚‰hѲMEY´loaL •ŔcّBšŒHašĄƒA`křÂŔ€Rşn€řË.†/B̢ćĂ×ĘÄ)‰Eđâ[…Ä➐3ŰŘXžˆÝ3eüÜ"Ÿ“|NBa°—éˇ} ţĐǔmü˙č˙?œ¸ćx›!'˝VŤÉľi6‹ţďňrozĆĆćß};ŹőuvqbŸ=röí:ˆBy,Üy{”}($îs Ÿžt „í‘Ë.ƒń¨Ű8•ń(‘Ĺxwl áALVxِ$> ÁV“XbńË7‚mŇźÓ°sŚ>ç 8ӞŇrőyÄÜŘä;R9¸¤Ř9{ӏŁmtĂÎAˆĆ☍|6D‡˜ÓśçNËKÖńŹÄŇűľşw‘îÂ0IH,Ń.3üśqEÁV“X˛ľŐ$E!…ë#ße׊>˜âę0ŽÉTŻ•(şŽčzKŞăĽĹ§I,ÂČ^0—ËŁ^[Ç9ëţöÁ˙;S¨Vv˘¸cšĘPwu†"NżiÉ *ŽĽ1i#pŢqí™)2WçHňmŒú)9+˝ľ7@fÍËW°kí<&ŚŻĹ_=óŤh™MT*UŸžJ_PՓőyAĚţš÷QˇŇŰ8ząĆ,7’ä:`Xc›&ą„ýćę ú’7/‚DO%/E˝`~‰ôśZ9Ŕ'aićŐ xg Ëcبw>ĆkZ-ŹľsűCáIW_‘ŮP7Ř6žíƒ‚qžtD¤űäŞ{#?ŁFbéI{l Kgăd5ӲώŐYMUwţUQ1/şţ”⸣I,ŠzĂŹť`"Z´lcÉnMj-ZF-ŒIĄ8``,;RH“)L3t0l _8PJ× cŮĹđEˆƒYÔź`ăúCŃ|!RňEHbé~éĆÂB/٨çe ü]= ›ËQľ_Ü˝ýM‡P-E{Řčl­ó|•ţîw˝Oů%^Oęő>đţ÷ĂůŸoŮjľÜnL_Ž=ń˝…˝ŢerřÍ[ż S ‡Pž˜ ľGďÖŘÁűŕŇW˙Œ=ŇC2˘śŘ"śG0`,ť ĆŁ>NlăTĆŁ@DăQÜą1„ąh]l8’ħ!ŘjK,0~ůF°MšwZvš\‡UŇ. ćŃśý2əsz?™ĽrčÄ[ô Vté‡-‡4b ŽżŢ\í##"‹“GăÂĽžźí…ĚîÇŕçgzţşÇÄY qŚB3Űďp#A ˇěťĘŢă(F$ą¸ĺ”/%?ÇňröźëRŽÝNTő†ŮŸTňJŮ'aQô|’ő§4óڒu'ČK‹–í(šČ˘e{ Ép 00–)¤ÉˆŚ:ś†/ œ(Ľëˆąěbř"ÄÁ,j^0ŒqýĄhž¤EbaˆĹząFa/˝ŰÔV.ŮŰř…7ĆŒÚWl^ń~ewćĚY<÷ÜIđŻ|ůk0Íî>ă†áîľ”vťíţ„˛cŐżĽWtś*úÂţëpnîföƒ‘ď­cdŰGÔ;PÄöˆFŒe—ÁxÔljmœĘxˆČb<Š;6†đ &+źQHŸ†`ŤI,ąŔřĺÁ6iŢAQáHđˆ…\gŢiĎäúódłGîđPźż Tîw—+ “@,O B‹EL˘Ě Ďn8ƒ­…zçR?Áç'ëgÎvćĎbqŕ‡ĄşźĘî;šÄ’­­&ą( )\)ř.ťVôÁWG~?ÍŚč:˘ë-ŠŽ”Ÿ&ą°#Y÷Ż=ą'ŐŠé=X\Šá7žřcřС_Ćň&ęaľíF›Ťh]>…ćŮ'Đ8÷Źľ‹ Ć&R2‘Ĺ+e"‹ÓžĚ¨šÚ´Ż/6í˛¨ŻŘoŘęh­×°üäi4—7đîG߂ßýŇ÷ałÖ´ËÖžŽ€hőPvăNŁĎČű böÎY¨Œ[iŽm˝Xc–Šř|RŇń€iĚ|=Ćy%۲“‚)¤ÇhűąňRÔ ć—HŠOŠ•Ó|Ś‘f^݀,/ŤÝšß{ş1Ř>.H‘ER#œŔKfĄ@\|RCbŠî?ŽŇŽč$–N´•ÎGtŽŤǞrÝ­ťvËä׉瀅máţ¤’WĘ> ӈ˘§ŕ“´?Ľ˜×–Ź;A^Z´lWŃ[ iٖBŞ8EłŐ$žĄRşn€řË.†/B̢ćĂ×ĘÄ.‰…Â…|éäM”ş„o|ďŘýúÚ~°ŘŽ×ńŻÝ‡{ÇGršÁËŹgŸ=‰¸Rˇý8{öŘßM׀éyišš­–Úë2ǧ_˙Ďřđßű?đžÝ7cář­(V'ťŕ€ÄbpöBíhy°(íqDmą%l$ŔXvŒG}œŘĆŠŒGˆ,ĆŁ¸ccbQË|’$ă!ŘjK,0~ůF°Mšwv†űŠ˝Ói 9ŁaœρžkŰý͞‡V×Đ^^A~n–Ihqć@ďĘ^šJŐŁ‡ąůô3L˙œe˘ ƒÜœţě.MƒŐÁD+ššúůôˇhpϧÝF͞ĂůŤątť:ˇ‘ĹbD?śpßŃ$–lm5‰EQHáúHÁwŮľ˘ڏ:Œk2Ők%ŠŽ#şŢ’ęx@ińi‹0RTĹŇŽž¸§_xúöp~m?uÇť`žZDe~ʼnj§ÜZu´–ÎẘE*“îDFe‚ůƒ˛8i[m¤.dÚó˘ýú-ß7w^o7Ü-ƒ`Ő߁ŰÎ×.,cóü í"~끟ĆăŽcÇÎ#Řľű&_š¨ôU=YŸ‘÷Äě/œ{•q+ÍąŁkĚr#Iކ5ś]-$„ƒ~O$itRÉKQ/˜_"=B*>i äyu˛:!łs”Ł6ž]Ÿ ĽëćĺŮŇÇ şł‚BœĎÚČkˆ ăÎU„‘hKŁź}Ÿ;ą˙8*qI,N:›k.!%—ŕßŽ1ŕěŞ=-7MűÚ%ß­sroĘ{ub(´ĂšeúSŠăŽ&ą(ę łîyiѲEY´\uBĄƲ#…4‘Â4CƒŔÖđ…3ĽtÝń1–] _„8˜EÍ †1Ž?ݗŕR†/2‹ť˝€ýÂɲÖ9ֈiA!_‚/ÇÚ͚ý,qݏ~ݏniČúÚ:’ˆß~đjÉyYŘh6TżůvĺO?ô>źűLď:ˆńŮ}ƒOđyí‘ń‰>łţä—QľĹŁ=bk}œŘĆŠŒGˆ,ĆŁ¸ccbQË|’$ă!ŘjK,0~ůF°MšwjvےKÎhĄx° úJŁ?o֞~Ĺ3ž•XrÝUWœă|€\2qó Řxę;Ą<\K/H]BK7Ň%łŔ`*yFÁ/ÓXŇ;‡ÍgOÂŹŐý¤k°ĽP/ŽrhĚľ+E!˛lឣI,ŮÚj‹˘Âő‘‚ď˛kELqu×dŞ×J]Gt˝%Őń€ŇâÓ$a¤J=š~)Şc3xđ,pamożű0sif˝‰ňě”ď~Ëhľ`śaŽ-şƒqŽ:…üŘ4ŒŇŒBQ„˛ ą¸ Ű?gˢˆsŻťÍ‘e_G´şäNZÍ66N]@k˝óvyýĆý?K›sŘ˝ďě˜=r…ëcD=YŸ‘÷Äě/œ{•q+ÍąŁkĚr#Iކ5śm5‹˘;‰…‚Ç$ŔzÇ$IŁ{@i伨Ě/‘!Ÿ4‰Ąźˆ‘v° źFËcĐn[Ýź›¨Yěű+çűDŁ›ž*yDH8qć\ ŕœ¸A„şq†:Śű×!ąL<Žęl|‹{śtÁ-‡¤çXÎwjÂꕻ' ďÁ‹Ž?Ľ8îh‹˘Ţ0ëN%/-ZśŠh"‹–ŤJ(tŔŔXv¤&#R˜fč`Řž0p ”Ž >Ʋ‹á‹ł¨yÁ0Ćő‡2ńEHbąŻÚÍśýŔŻÝtËŐ"űĺ™aafĚ@Éž*/ű ĺBgwŢ1ě_1gŘdžýüÍ~UĚšlőjŃšĂXe טFZR.—DJĽ°˝ťľCSq%–Ž|呓řŕ—žĹ̞cX8ţ‰e cx÷Ę$„’ Eť-v „í‘Ë.ƒń¨Ű8•ń(‘Ĺxwl áA,j™C’d<[Mb‰Ć/ßśIóNÍ.`[,䐡çӉCcŘŹŽ˘Tď€ő§žÁĝˇ…śr~Î\\•eňćpţÝď¤o8[y6ŕqă:]K7L˝ž“Ο|şD–ŢyŹ<řM˙Š3ŒŐXę3ćöVěr2l7ôvBŠŮmS[MbQR¸>Rđ]v­čƒ)ŽăšLőZ‰˘ëˆŽˇ¤:PZ|šÄ"ŒŒZ;NŘ÷„“8}ňkřŸůGřš—ý)NĐs.™ĽşkŒB™–ł‘ósĽhĎ53.Š%WŽ‚dw‚Yl+ÔŤé8$ÖqɟmŔYuĽ]S"Ö4WÖąyú’íş…GÎ]ß˙ęŰТI:örTŤsţäšů"˛žŹĎČű böνĘ¸•ćŘĆы5fš‘$× ĂŰ4‰%ě7ńôH’F÷€ŇČKQ/˜_"=B*>i äyuŞuŇęnqS3ĹóuóNq>ńVR ÇÉWgéÇŮ>ĺmݏc< ‰Ĺóň)Ps3†ża<ßݡmRo!q;é)! glĄţ”⸣I,ŠzĂŹ;•ź´hŮƢ‰,ZŽĄĐcّBšŒHašĄƒA`křÂŔ€Rşn€řË.†/B̢ćĂ׊ç qŽPĐťŔ&ŽłňJłśvc;*&î8:Ž[M`n˛ŕ{yGČžajˇŰ(âM ĄŚ'űöďC\qÎĂkOÝt›Íf˙XEN_Ä;ţěsŘą÷8v˝FžĐKâýĹ}ް #yŸc(Ćm‹(f{ 00–]ăQ'śq*ăQ "‹ń(îŘƒXÔ2†$ÉxśšÄ Œ_žl“杹Ă֙N+ĺڧJ¸¸?‡OYîŻÍ‡ýčßćY‚Ť˛LŢzłűőśórŞ7 H,=RKçA Ń ;JŽŽÁ|\$ĹYżMűŔ%˛|őëœŐXœ[:7äql˛„JĽĽK߉G”ŒűŽ&ądkŤI, ˘z}¤ŕťěZŃS\Ć5™ęľE×]oIu< ´ř4‰Eˇ&§wăč5ŻĆóĎ>€˙úĽŸĹŢú>źâЃX?u•ůI”&ĆÄĺîقČ~ë„üXg ˘\uƒWUą2$˛¸$+”Ż|Ë ^r„Ís—ѸâŹDJř蓯Ć_?úf”Ť38rřĺö=ů˜_j×]iôyAĚţš÷QˇŇŰ8ząĆ,7’ä:`Xc›&ą„ý&žIŇčPy)ęóK¤GHĹ'Mb<Żn J˜íÎÜą¨8šß8vm…Ž.áŇKâúöÂ[ŤłÏ^œłËܥ㘘KFbi/žCűŇiäŒtÎŃ(–}uÎŞ [¸?Ľ8îh‹˘Ţ0ëN%/-Zśšh"‹–ŤB(tŔŔXv¤&#R˜fč`Řž0p ”Ž >Ʋ‹á‹ł¨yÁ0Ćő‡†ë‹ópŐ~É´šr yjŕ{nہ{Ž™ABîJH,K(ňŘ?~ 3;f°ź´Œ¨rÓÍ7Ú/ÇĘđúäX˘řś˛^Ăżů"79oß4݄|Ą›^€Äâ+ŔPaŃÚăˆÚbJŘI€ąě2ú8ąSYŒGqÇĆĢ–ů0$IĆC°Ő$–X`üň`›4ď$vî*\$’ĆäD íŁeXOnş˝ęĎ=ćeűĺŰÂ<—ČŇ[™Ĺ‘ÂÄ8&nşkß|4äoo{!ď`F7Đ pÜtôňśôHoK!çW?wë="ŽřVhą=É]Sv‰>ղ­$!>Ń6㞣I,ŮÚn+K†­JҚÄÂ×S™î¤Ĺ§I,ÂČDő@pWe9vÍkqęůŻáOžńC8šx?zŰűPż´ŤŢDiv†Ęę^fËÝ~Č݂Čů|lůę4rŐIűÍTÁžWÎh[!ĎšŔÉ#_ęlë뎺RnÄłÖŔĆ ŃŞˇŃ˛ňřý/ż ˝ S3{ąg˙mö‹şB(kŽOőd}FŢ_âŽ[œ{•q+ÍąŁkĚr#Iކ5śmiKÄ>E(xLŹwL’4ş”F^ŠzÁüéRńI“X ĎŤ ‘Ô'rx˜˝ËŚú–zÔIŢý›Ýę+aÜgßvof}z…#Ç1•ÄŇZź€ĆٓLKÜsŹçŤvŮľ÷á=%Ů +žƒžśĎ¸ŁI,ŠzĂŹ;•źzZ´l7ŃD-Ű^(tŔŔXv¤&#R˜fč`Řž0p ”Ž >Ʋ‹á‹ł¨yÁ0Ćő‡2󅕶cľZX_:Uŕďża?f'˘íŽ*š_x;/Áœ‡z†F>ŸĂ[ŢňFźóĎ˙*RÎËŽďúî7őĂfťíŽcšę_×5[müę˙8ÖŹ*ö} Ľj‘XâjňęŸe7˘śŘśG`,ť ĆŁ>NlăTĆŁ@DăQÜą1„ą˜ežŠ$ÉcśšÄ Œ_žl“杹ÄÖŮ^¨TĚaöš ÔžZĂŘ"š_YŻ}éŤ(}ß[úĕŢj&N¸÷ˇ÷sdÇÝ/ĹęC ťîJgŹ0zÇÔeąPŸŔŇ#łpÝë> 5RZ‘ŝ˼}Ę~ˆj…Vbńţ6äąpp ŐJŢžf´φIƒéu ÷MbÉÖV“XŇMbáëŠLwŇâÓ$adH§7gŠÔƒČĺ‹8xä.œ?ű-|ţ¤K›;đ÷_ţg ľڛ—PÝłšb”ű[ňmA”ŻŒJ“(8CE¤ţľ‡“Łý‹ꫝ"°Zˆ+Ë+¨ťâ.ÜrĹ.‡_˙ÂOáÜÚnĚďž;ŽApkA•ňí ŠžŹĎČű böνĘ¸•ćŘĆы5fš‘$× ĂŰŽVK(NšúŽăž÷Ü=•źő‚ů%Ň#¤â“&ą@žW7§NĚîóĘu+úÇ äÚwţz‰$Ä휝ĆŢůYŒŰs§iOJË+Ť8{á’ý֌ąŐĐ`u'ΚŢ}ä8Ś’Xę—ĎĄ~Î!ą´ŁzŽÎßŕę,Îßşs­`Ďĺ”÷°cœ?œ{ń-۟Rw4‰EQo˜u§’CO‹–í(é­I­EË 00–)¤ÉˆŚ:ś†/ œ(Ľëˆąěbř"ÄÁ,j^0ŒqýĄdžEöĽGb™ŢţĆ˝™‘XÉ'üÂŰ!ôä oź×\sQ侯{5n¸áş~¸^ŻŁŐRPčďďüĺçńĚĹŽż•‰ƒŽ^˝ ĄáßjČ öƒŔÄ}ŽĄˇ-v ¤íQ€ąě2ú8ąSYŒGqÇĆÄb–yŚ’$!ŘjK,0~ůF°Mšwjv[ßÂ\łŤ°kžŠŐk }bÇÚ§ď÷­ÄŇ#Ă=ŮqĎË`őˆ!öĎňlŮcůţv$Vw…büÜ<şöiŹČâóß~`yĺŸíű"ąXG”k×°{gŐ.›˘RůƒŒm5‰%[[MbIO4‰…ݧ2ÝI‹O“X„‘‰ęĄc9ěŮw öşßžt~őÓżˆ ës.róĚe´V7boCg66amŽ šxŃ݊ČÜXľjj•Ç=r +ÔśÓn,U šaϛMIJçŮľçÎaóěew^ýօř7ŸřE\Ü܏‡_Ž ×">‰EŽ'ë3ňţ‚˜ý…sďŁ2nĽ9śqôbYn$ÉuŔ°Ć6Mb űMŕ ú’÷Ü=•źő‚ů%Ň#¤â“&ą@žW7ťNşă3ö~ŹÎvďBKďŻ÷ŘW.•đę—Ţ„WßyNڋ˝ťćp`ωĽvé6ΜtďCyKÎŃg1âZ”GÁčÜł÷v°Ö !żŐúSŠăŽ&ą(ę łîTňbčiѲ]EY´lKń^p€Ř8זÄéň"…i†­á gJéşâc,ťžq0‹š c\(S_‚éťíŘ~š´ą|弉Ÿ}ínLgGbç ň¸Ňnˇú/đœUYţ×ňpB‘Ěrď˝÷ŕ'~ňGűáVł‰Fł(ňžżů>űđYĚš3ť%f<íqŔŞ78[ IŰc°|FÔ;PÂöHŒe—ÁxÔljmœĘxˆČb<Š;6†đ –Q™'’$‰ÁV“XbńË7‚mŇźăŘq§4E[gűœÓe”ŻŤ 1÷ĹSă…ÓŘ|âŠĐÖB!¤G é;R١ă'ŽyH!V€ÄbůÉ,]‰Ĺř‘‡c“]xI,Î߼Ż}͋—˜Ť°ôüŤíĘaöř&íkgڤĺז+*ů&°MŐn›ÚjKz˘I,|=•éNZ|šÄ"ŒLTéűqřřÝXŹďÁüĚ/âásםńĹUwĽŠłŐ­1 w’eĎÁľu´VŽ štíŐ˰迊ˆK^1 Ö:P_śß(ŽšŰ=[wEľč[9$•§^@{­fˇ)ůöŤńŽĎ˙4Źü.:ţ*ŒO.ÄŞU=YŸ‘÷Äě/œ{•q+ÍąŁkĚr#Iކ5śiK÷Ü8ĺJA=Hôm?¤§’—˘^0żDz„T|Ň$Čóę’ÖI‡`‘왏“žˆpR,đş—Ý„…ŮiŚ}ÁĆo˝áŘŤLńŰi2I☢­&ąÄă—oۤy§f׾Bڜœ(áЁi,Ý^î“L–Ţ÷‘„Ehé;çßđÚ>9ĽżÚ‰e1Wfé[x?w~šDݟ=_/žëýlKĎoűßĘÍEÚ7閉¨|˝‰ ›qßŃ$–lm5‰%=Ń$žžĘt'->MbF&Š殺˘âۉcמ(Íăwžüăřŕ÷šv˝…Í3íŰßf´ÝrœUĘěiŘjÖŃ^[BóĘY˜ËĐvś#˛ŤŞŮŻÉĚ:Č!­Ô—ě›Ů ÷ţ›w†Š>@8óöćŮ+X?yfËNÖĘážú#x×#oĆäĚ>:ţJ”JăJuŕΧôyAĚţš÷QˇŇŰ8ząĆ,7’ä:`Xc›&ą@čƒď˜ôm?¤G’4"čóK¤GHĹ'Mb<Żn jPŕZ¤çSĂJžęŚ#ŹUHœßm×ĆÔxUhë<˝ńš#8r`Ÿ â%Ť°Č%ÎJ,GŽŸŔ΅d$–ľ‹ç°rú¤ťÂ‹lu•ŐW|qßóF‡˜ęĺĎž(úSŠăŽ&ą(ę łîTň’čiѲ%ˇ–Z´lE!Ľ¨F‘’bNš\; Çn _8PJ× cŮĹđEˆƒYÔź`ăúC#ńĽąąâ’BţÖ38ąwYK!ŸŇ “}Ш7PŽTܰł2ËwϛńŚ7żO>ů4N˝pMűádľZĹŃŁ‡qôŘߋ.ç†nueĹýŤ*ϝšŒ˙÷O>‹™=G0{ŕ:ärľöčÝű”$$ďÓԾŔ°=’cŮe0őqb§2"˛âŽ!<ˆeTć#“$Ž)ÚjK,0~ůF°Mšwjv[ďt†ű:~ X.ĺąwaß9TÂćî&ĆÎ[Řřúè=ű<Ǝv‰ ÎÖ[Ľ“ž?<˙†×ŕŮßţűŠ™éfćäŐ{喭ó ÓY­×—{ž’÷wtŁČÂZIfő‘ǰúÍoőçÝŕJ,î–JÇ ˜:4†…šŞ}˝coÉDˆöâŃ+÷MbÉÖV“XŇMbáëŠLwŇâÓ$ad˘zŕéśyuČ.Žż…b‡ß‹ł/<„>ţzœ[]ŔĎźôÝ(‰ÚŮ+(ÍL 4=!ŸX\Xí=łÝě_ssšb yl˘?ů*Š;w÷&rQ^ő6N‡YkÂYÇeĽ>ßź˙'qry?ćw_gżč;Ńqžü¤OœT8c~ ČúŒźż fáÜű¨Œ[iŽm˝Xc–IrF=Iu 6fńőç5¤ą-K!Ţ1)č1Ú~H$iDĐ ć—HŠOšÄy^Ý@šuŇLń›s'I‡´‘ë‹yß§N2šńšĂŽÝs/œq˙ć<éć<]ąçąkNœŔ|BËʅsX>}ҝ›sȧ{9ĚŰëË7^\ÝáŹ:Žť…ˇîŒaö§ÇMbQÔfÝŠä%ŃÓ˘eťŠ&˛hٞBJQŒ"%Ŝ4švŽÝž0p ”Ž >Ʋ‹á‹ł¨yÁ0Ćő‡Fâ‹ŮjÚĎŘ82kŕžëf‘𤰭W,ËDŁ^CąTâŹřră×ť?ŽýBÍY‰ĹąW•ĺŐ~ĺw?ŠÂÔ<ćÜ†|!¸rÍŕő kK!Ľö¨I,jv žôqb§2"˛âŽ!<ˆeTć#“$Ž)ÚjK,0~ůF°Mšwjv1m{ďŢŚ&J¸öŘűGďôŹŔ‚ĐŠ,ŚŐڍEÜudcœŐXśpßŃ$–lm5‰%=Ń$žžĘt'->MbF*×C€˜Âԑ¤ŐÓq>>ŘčNTĆŚńő3ÎŻĎăďůcĚTWŃ\^‡Yk ˛0 #/xągÄyég\š"ŹMŐJ¤ű`wĚ#‡˜ĘœÚ\ZÇć™Kým’žž|żőĹżƒö öź“Óť;ŠQęŔé!@Vňţ˘ h‹Ŕ8‘Ž”ŐˑĢčrl!Ţ1)č1Ú~H$iDĐ ć—HŠOšÄy^Ý@”:!ŸJˆą˝žDœŐGœYbçôd˙ůŹŞÜtÍa÷ďł™…A$é]\wÍ ,ěJFbYşp‹/œěXşqŢ|źÇ}Üö)Gü¸žM7Λćʆ…ĘtďC–DnO†Do Ž;šÄ˘¨7ĚşSÉK˘§EËv˝ľ–ŤBDƒş&ąđ •ŇuÄÇXv1|â`5/ƸţÇ {_ZÍMűů˜‰—É~%GJ…ř[đ¤ł2KÍ>—ŚÝD,ŠnłŮpI,íśúžăőډű{ÁŚ1‰Ý'^ŠB9¸D&‡ÄŇo™WcIÜçŠqŰbJŘI€ąě2ú8ąSYŒGqÇĆÄ2*ó‘IÇm5‰%ż|#Ř&Í;-;wč'V<˙Ľ•x[äŹ@r`ď$ŚUąrSÉ]Ľdă`ă›ßňBźŰő;_˙ęŔÖB˝-…ŹţŞ'îq‹ĄÁj(ްeuôrĽhŰ z}qćŮŢńĘC`ýŃÇ=Ä+DdYžŁˆ˝ěyvaÜ~ři„ËŠű2ü?ŸůYÔiu,KxĹśžT§ Ęű‹‚ I,ă4ęIŞh‹$}ß1)č1Ú~H$iDĐ ć—HŠOšÄy^Ý@uR0Ň'˛ôŇ.ă}ĎîYŽÜÇÜşÇůăúkO`wBËâůs¸řüI´Aj[QŒm…ǍîǍ,˘čVëO)Ž;šÄ˘¨7ĚşSÉ+‚ž-ŰQ4‘EËśŃ@ŽI,|CĽtÝń1–] _„8˜EÍ †1Ž?Ä1Hŕ‹ ’}žPçĘÚ4[˜o]ššä él+Ēśýp°^ŤőI-NŘy‰ćüuČ+őzkş˜:‰Ĺ)ĎßřłOáäbťßŽňŘt@C@b1 _™ I,†Ÿ^?ěśŘśG`,ť ĆŁ>NlăTĆŁ@DăQÜą1„ąŒĘ|d’Ä1E[Mb‰Ć/ßśIóNÍ.‚-ó â'ʸńš9l\_D}>çÎA—ţčh7\‹—02uĎːŤT\˘ˆKFq#V˜Ŕ҉ďýzÄÄQ‡ř’S\‘ĹIßë‡ĎżVg˙ŕO]˙űžČ,›ňhŠŕ†ł¨– á˛ÚÂ}G“X˛ľŐ$–ôD“Xřz*ӝ´ř4‰E™¨Të _§;ŠLNíĆąŻB xÇý?ƒű_¸Ăw꬝_BýňjřœӈD#W°M/ó¨Ů˘.şˇo­×°úôi´V6ěyÚ°9üĎŻý ţřÁ@ub/Ÿx5Ę剞y 5Ÿ‡< •>#ď/ :€&ąŒÓ¨'Š I,ńćĽI,j>i äyuYŐIęŤSG•ZqĺćkăčÁ˝~‹=_ÝxÝ ěٝŒÄrůÜ9œ;ym"6I ’ #ÎTˆłşq…ÎÝLďC-۟Rw4‰EQo˜u§’W=-ZśŤh"‹–m-˘\“Xř†Jéşâc,ťžq0‹š c\ˆc0D_rÎb&.-Ž!k ~]•8/ĘňŠCfi5î_łÝypčźPsˆ,Qä/>ú žôÄ%ě:v;ĆŚw…pn™H,B;Mb‘Ű)řŇljmœĘxˆČb<Š;6†đ –Q™L’8ŚhŤI,ąŔřĺÁ6iŢŠŮ%´5(\ {&pěđ –^^eżkž:ƒĽ÷~D¸KĐ‚b;^yW—ÄB}2‹ŸŔBžpPbő‰%ƒYědžĽ’ĐwK ™&x|ůŸĆĆSßé§M–gĹ;ĎvĹŔĘe\wls3Ľ2R–ŒëU“X˛ľŐ$–ôD“Xřz*ӝ´ř4‰Eť #Q]1WmąŠĺI9ń*TÇ÷áüAüßř8/ʈrh­m v沝jé Ąˆc8[řĂó™UŻŤ5‚ž˙śWdöŻ]XÂúsgaľÚ.‰e˝1Ž˙đ™ŸĂýĎ݉šůŘř.äóŞzČ'Ś(וÂj-]PŢ_łżpî}TĆ­4Ç6Ž^Ź1ˍ$šNH¤ăeő I,bńćĽI,j>i äyuYÔIo*ČE˜‹˘Ęŕ54šŃW!ëÉÍ×Áą.™ĹY‰ĺćëO`_BËĹsçp&@bQY}%éŠ,†ýź˝Đű Ó0śnJqÜŃ$E˝a֝J^|Ңe;‹&˛hŮś"ż5‰…o¨”Ž >Ʋ‹á‹ł¨yÁ0Ćő‡8ĂőĽ`?`sn îř$˛'ëRÄí R÷ÁnK-űĄ_”‡‡_řĆwđÎży ;ހÉůýť>ߒ˃cßj, ‹÷Ajâ>ÇPŒŰ;PÂöHŒe—ÁxÔljmœĘxˆČb<Š;6†đ –ĺ0 I’š˘­&ąÄă—oۤy§f°ĺ˝# ŽÖŐ˜ńůź[ŽŰ‰‰˝e\š§ěÎ_KďůjĎ˝ \Ľ÷›{Ăkş$ËCfĄÁĘ+˝•Pz„–ŔĎK2á­ČŇ#°}éůÓűŰZßŔů?ţ‹Ţ팜üěBXşťŒů=c¸îčŽ>éUVFź˛őéeÜw4‰%[[MbŽČŽ}0ĹŐa\“Š^+QtŃő–TÇJŤO“X„‘‰ęA˘ÓżżRŽŤŽCř8přĺŘ9Ÿ{îeřľĎý,6[ew…‡(˛qęÚëľxŤąŤěI‚œmŒü –8ŤŠľZXűÎYÔ/,vĎÁŔÉĹýřןřEűďaě=řRĚďžŃ—O [śřŽaŒTúL”:Ş) ĘăVšcG/֘ĺF’\'¤QOR`{XĎ!Žx“Ö$5Ÿ4‰ňźş$ubˆ|ęňC ‰,ŚIřć3g‘DnžöŽڇŰn8{’‘XΟ=‹ž}ŽCbƒp!E']ĹĹsl´ę¨”{D–ŽC[­?Ľ8îh‹˘Ţ0ëN%Ż>iѲÝEY´lKßšÄÂ7TJ× cŮĹđEˆƒYÔź`ăúCƒ”|1 5_l˝\ą„Ruż°ˆ?đmd!ŚiĄXČs_6 Cœg űĄĄóRNUžzţ"Ţńç÷cvßqűw9çŚ ‰á2’X<_ť-v „í‘Ë.ƒń¨Ű8•ń(‘Ĺxwl áA,Ë9`’$sE[Mb‰Ć/ßśIóNÍ.E[Ă7Ÿtţ:ź^zË.´”°rsfł…óďř]´67…Ű 9Çnž•C<[ř H-=b‹eYž­}ü?ËĹ˝\y@BíĽĚĎK` ’kÎ˙Ĺ{Ńź˛Ř'ÎxótČ,+/)ĂŘWöš–Šy_8ed ćľCĆőŞI,ŮÚjËpEv­čƒ)ŽăšLőZ‰˘ëˆŽˇ¤:PZ}šÄ"ŒLT=Ŕ0˘Ő•`ĺ KsŘľ÷&ě?pžłx ˙ţSoDžő9ťž:Ż뗗Ѹź„\Am›=W %šŔ#Pośf‡˜˘*N]lœ˝‚öf˝˙ůŔÉ[ńŸ>ű÷°iîÂĄă÷brz/x–]vFÄş2Ä:]PŢ_tMb'Ňń€˛zĐ$uŃ$5Ÿ4‰ňźş,ë¤÷ěҊż`Š’<ô38uqIÄŮfč`BËš3gqňٓ0ť÷žŞ+ŠÄY}ĽcpÜŹŐěkˆÜÖíO)Ž;šÄ˘¨7ĚşSÉ+‚OAL‹–í(šČ˘ĺŞMbá*Ľëˆąěbř"ÄÁ,j^0Œqý!ŽÁ(|éź ŞŒOcçţëđďý2~ç]÷ă…s‹HKÚöƒş?ůЗQ,–WœiÎv@”ŕ‹¨ö——ÖđďţűÇQ™Ýƒ‡oAÎY˘Y•ÄX[“XÓ—’‘Y’ČšsçńĚ3‹łI_‡\B]R BŤł°â¸Ťłąem˝aşáY&g ő§ÇMbQÔfÝŠäÁ§ ŚEËv•´hšJD“Xř†Jéşâc,ťžq0‹š c\ˆc0 _şâŹĘ’+`já ę›řâc'ńšožÂd5c{gqdß,Ž;˛€ëěFŠm(?}a˙ů?‰‹Ë5üÂ[‚rßOť-,.^r_Œ•J%ĚÎîDTiľZî‹9UŠŐ›ř•ßű(šůiě;~' E˙ĂHź"‹DbńDťţ;PÂöHŒe—ÁxÔljmœĘxˆČb<Š;6†đ 6‚9 SI’§˘­&ąÄă—oۤy§f'ąu§HL×Î}GĄ4ŽށŐő&žm‡sÍMŕS_@ů†k1őŞť‘ĎwV0qćJç¸GÉŮ/ŇŚď{Œ˙ńg°j57͏ ôI˝°ČOGÓ˛źYöĚZšĽG|ń÷~‘ĺĚďý1ŹfŤs.ÝžnţöŻžŻ€ľ;*¸ůÚYÚ7ĺ+ż^ąVŞ‘ !>“EĄMhKśśšÄ2\‘]+ú`ŠŤĂ¸&S˝V˘č:˘ë-ŠŽ”VŸ&ą#ŐK‡5šŠęĘŤOĚVHĘ@ľjßű5Nü2~ë‹ëćO໮ý< ;v¸:Î eĽB­M{^5Y÷–vžÎ–BŠßjÔaT*JŤ–ć'*¨ľĘřű˙žşt;掸+ÉŢ-óż|Ădńő™|EyQ+Mbá'Ňń€˛zĐ$uŃ$5Ÿ4‰ňźşaÔIĄ˜Gła!WˇďţŢśď ?ú•'đ–—_ýó3ڜ9{O?ýŹ;ƒ9s\ď {ę“űĎčłpv\˙ŘN4Gœˇ¸ÜÂÄlhW!öą îz— šÄ˘ćÓ°úS$˝a֝J^| bZ´lgŃD-W…h ßP)]7@|ŒeĂ!fQó‚aŒëq FáK@ě+â|Ą„ůƒ7 29‹ľË§ŃŘ\šÎÔđč 'ńŢĎ=…źŃƑ˝38~`'Ž;ź€kďĆŽŠąpÚvâϞž„Ü˙8žüř94Z-ěŘu /œ_ÄĄ=łˆ"ÎËŽĺĽE—ÄâHť}íËŢWäęyďřÓĎŕ쪁}×ߎRe˘ě唽ƒ$_şĚXC€1ěRŞ˙”°=’cŮe0őqb§2"˛âŽ!<ˆ`ČT’äŠhŤI,ąŔřĺÁ6iŢŠŮ%´ő’Uܰ€ôâĹnť~ŤkMœ}aǧ7qéţ ĺăGPŢťŰGbq,ýăR ;^÷J\úŕ'ş‹9Ž1xÖ€ îIćŠ˜oű!â’XœßĘżŠľż ?Ľ“oc!‡ĺWŒáĐţIÜxbÎwνâ‘m)Ä|ńG/ [™hKśśšÄ2\‘]+ú`ŠŤĂ¸&S˝V˘č:˘ë-ŠŽ”VŸ&ą#ՃH'@NńęçWo"ĄVhňń‹U>ö*œ=ýŢóč›pjy˙ű­O ě9ś89słînůçsŻXŽ´•ŽłB™}ƒkŰÉW.u’}ďwžO^:‚…]×cn׾˝T}› 7Ÿvs–öyQĐ4‰E`œHÇĘęA“Xâ ąŽm?¤G’4"čóK¤GHĹ'Mb<Żn`Xu’Ëwč3y Sů&VÍřŤgŤČ(Č,§ÎžÇ“O>kĎoäΟ| uă:s]G b î"áćöĺCw{!Ą%‘yJqÜŃ$E˝a֝J^|ĽĄEËvMdѲíE“Xř†Jéşâc,ťžq0‹š c\ˆc0 _úČY9\ÁŔäÜLěŘ Ól˘ąą†fmÍţťŒşý{~ą…ç.ŸÇÇżúLűĄŰΙ*v˙ŽĄŐ"lÖřΙ%l4 ĹRĺŠĚĎtî”đčÓç"YÖÖVĐh6ú቉ŠHö΋´FłéĂě?ţŕřÚSW°çÚ;16Ů]ýĹGbao)Ä"ąB˘Š&ąpí|éăÄ6Ne< Dd1ĹCxÁŠ$ÉSŃV“XbńË7‚mŇźSł‹`Ë$¨P3ŕÝęÎŤË|gs9÷žt?>óĺpń5vř“8÷Ÿ~űţý?Gab‚š"‹óŰńÝoÄĹ~Â}YćցAźz˙ N*_tÉ ŞD–Ţqť^Çš˙ń§vžV|ěgÍš–_5†]ťŤ¸ëś=îšˈUžţ°čĽ[ Q°Ő$–lm5‰%ۨ٨ďW‡qMŚz­DŃuD×[R(­MbF&އÔëjĐ ůD#”RΞwÝ˝ďf÷xŐ8ƒBé逑üXFĄ€v­îVś‘+ŔČGěIM{Žľíœ-‰Dâxů†;žĆ#—ކęř|ĎÚ÷ǐ}x‘AŸQ݉šÂ  NlăTĆŁ@DăQÜą1„ąĚ™J’<m5‰%ż|#Ř&Í;5ť!Úúśň˜:_ĺ’YNáĘěřO]ÄĹ˙ö?ąđO~Ážł >KďWŘł ă7^‡őGwÓ1˙ůĆ.ƒăŞł"‹ˆČÂŰ^čâ;ߋćůKýóč­ĆŇڑĂŇkÇ0ˇPÁŤîÜאôÁˆ4{{Î#Îj, uŁI,ŮÚjK śQłQŢ)ŽăšLőZ‰˘ëˆŽˇ¤:PZšÄ"ŒLTŞu՝‰‰xČ*δ㾔âo/Ş'ł´ŐÜÄôŽýřĄ{˙škŸ+Q,äaÖjv ‚¸bŐëČWŤŇIěřÁË(Ú÷ç–ĺŹ6Ú;Ďđ6ALéţűĐ1ÔWHĽż(čšÄ"0ÖŘŚI,ń…XnjśŇ#Iô‚ů%Ň#¤â“&ą@žW7Ztç0ĄOÎβݏfĆ Î˘`C“aYNž>Çž<é[‰Ĺ9m••T:[ VgQł Çym°žâ–łˇ=†DOĽ?Ľ8îh‹˘^ZcaZyEđI”†-ŰY4‘EËśMbá*Ľëˆąěbř"ÄÁ,j^0Œqý!ŽÁ| |ŽT˙žĎÂRKçŘ{ŃMűEŮ*ă;€ůýîWÖífÝ~ČWˇ˙ÖÜýšýŇŘ$ î˛ĘeŃjŘ7GMŽ<öĘ(L/@&Î*,kkŤýpŠTÂäÔ4TĹńšŮlEz ö­gÎâ7ţâKŘą˙Ěî9Ţ!ąôŇs˙g§ĆÂ4‰Ľ‹e0őqb§2"˛âŽ!<ˆ yŐUbI’˘­&ąÄă—oۤy§fÓś?Ľ ăŻĘâ†1Ŕ˝XŠ”Çkď>€żš˙y,žÎ~ůőéG˙Ë÷aö­?ŕ[‘ĽG*qČ,3ßuÖţ–›PoĚ2:˙A<'Qçks"‹—ÄR?sWŢ˙Q;ÎżK{:Ľű&03_Ćk^žß~—÷œŻ˙܃ĺ,ť€›ńEÁV“X˛ľŐ$–lŁfŁ:źS\Ć5™ęľE×]oIu< ´ 4‰E™¨RŻ+f+ô]dőd™&LŤ‰Ÿę9+ŠŚć:Ű ŮoU AÍFŁCf$PČNězĎ.Ţ殞šĎ•‚ÉpӏŞ'Ťő:¨) ĘăVšcGOÁ]N!šNVŃ$–řBŹcFŰé‘$zÁüéRńI“X ĎŤUä‹ʕ<6—íűąř<ĚȒ%™ĺŮÓçńČĎÂ9sçi.“\Ň˝ŻÇuVgé~‡1H§ű…‰,Î{|öÂ&vÍWÝtsŹ­…†ŮŸRw4‰EQo˜u§’WŸ„i@‹–í-9hѲ E“Xř†Jéşâc,ťžq0‹š c\ˆc0 _ÂbœPáǍ>YĹůĺ‹%Ť¨NĎar~?&vîÁřĚŠĺ1WĎąłě‡y›Ť—q¤ýmüĂćűĐúć‡!“śŮĆňŇb˙žó•ůĚĚŹň~ăîvBŚűMUÎ_YĹŻţÁ'QÝ‹‡n´o0ş öëƒłJK'¤I,.–ÁxÔljmœĘxˆČb<Š;6†đ 6ä9@VW‰%IŠśšÄ Œ_žl“杹]BŰ(„Jƒˇ,J+ó¸ď‡0ťPÁĘë'qéKŸÄęý_q 'ޟiż„sţŽÝy ;;„ŤK>q‰'] ççŕT, Őj…Ňćýœi äyuIë$8Őąô Oţç˜@Ą˜svĺZ˜Ě51lI“Ěňí“gń5‰ĹĄŸŠČ%ź83×'´€O\[ň­:Ť-TĆJ(”+‘˝?Ľ8îh‹˘Ţ0ëN%Ż> ÓFhѲMEY´\5B‚HRąŁpŹĐŽŇLĹΔŇuÄÇXv1|â`5/ƸţÇ`žhÉŽ=źm`đ`,܃Íz˜ó•˜e™xÍŮżFš˝Óž’7ö…üC3?ť=,-/Ú/ĂĚ~ş3;fQP|čź@Ť7ˆrUŐn[řO˙ó¸´YÄŽc/Aš::Żřnţ ďľ ťş‹W…ˆ_˙(a{$ƲË`<ęăÄ6Ne< Dd1ĹCxň ŢĂF ŠÎiK,0~ůF°Mšwjv)ڊ>—m“cp^&9ąîĘ,wÄÎů*V^]ĹŠ?ú]˜W]RgĐ2ńš{›œčݐâ#´p–ť" ¸üľ6k¸ôGŃ'Á8i´Ç Źźac;‹xÝÝ0V)úÎŐ0äçĘ,Ť`9EYEĄ^5‰%[[MbIÁ6eÍűj:Œk2Ők%ŠŽ#şŢ’ęx@ih‹02Q=¤^WĚVčWĄŔ\ĂšU6[˘ČuŸ_lă|)”†óĄGžZAž\ŽžR˜-–}żL‚U.™88˙LG×]9†#äŸ7Ó¨ő:¨) ˛ţIG˘'ď/˛^!šNVšŞH,ŠçGźçF< á2˘„zÁüéRńI“X ĎŤŘ uâlsc„˝“y\nV1 IƒĚňä çńŕă'$ŠN8‘Ű0VgĂ~ű g—°0n?ĎÎČ:D–~Ýyž-űŸśwÓęO)Ž;šÄ˘¨7ĚşSÉ+‚OÂ4‚Z´lcŃD-W… ’Tě(+´#…4Sń…3ĽtÝń1–] _„8˜EÍ †1Ž?Ä1…/Pň…őâˆ_gůŰ#űŠu!gE”vłŽjk ˇœű’ý‚‹ě‚öƒ6ű`ă™`^řvČ|umÍćŕK€ÉÉiűA]2q^¨5 ×6ęłÂ?|˙—đč kŘuěT'f§â{ęČ ęxn<ZšÄ˘I,)ř˘I,ńEŃ9Mb‰Ć/ßśIóNÍ.[%2 ąuƒŤ”xáb1‡×ŢuóóU,ߕĂsż÷P­îbĄĽO>ą_ŹMžń5}‚‰—ĐÂ˙‘“pořĘť>€ćĹËî5@ŸÄňŚ)Tw–qß=1^U'ą„Ę@“Xś­&ą¤`›˛ˆć}5Ć5™ęľE×]oIu< ´ 4‰E™¨ŇŞ+ĎüéżS M"ŇzęÝËYÎJ'śůžšÓoó œ-…ŰĺJEäŤc.ą%Џstť%đřžîöBĆz'NBŠĽžĽ'ŔŞŤäËĄäý1ű çŢGĺ˛TEG˘'ď/˛^!šNČźżôÔT*ŠŤÇ8Ż!ŒmńëŮ ŁíSđ˜XD˝`~‰ôŠř¤I,çŐ d^'=‚„ȧî0_*06YÄôú&vćk…$!ł|űůóřŇŁţ•XXäᄻb ‰-űgU2̃O5°wĄę,Ţf_2äľ§Đ#z•ţ”⸣I,ŠzŠĺ”JÝŠäÁ'aŸ´hَ˘‰,Zś˝ ’Tě(+´#…4Sń…3ĽtÝń1–] _„8˜EÍ †1Ž?Ä1…/ \ń˛LźűČëMŃ‘1 Ÿ˝3[ ÷áÚľ—żgŤď–•GË!›4ě—]Í&6żů.´6VܗlŽllŹŁś9Řç{l|ccc‰iŰÖëu—ŔŇK'Š|ä ߇žô vşłűúšçŘ;˙(íą{Ç1ěúď@ Ű# 0–]ăQ'śq*ăQ "‹ń(îŘƒؐçY]TÓ$–X`üň`›4ďÔěFe°ă‘Y V,äđšť`aa Kˇ´pňućíŢË-‡h2ţ†W;O,[YňJEá–BÎϙƒ[ç/bĺßěŻňbŽX{ÓĘ;K¸ď01ŸÄ"*§H˘`ŤI,ŮÚjK ś)‹hŢWÓa\“Š^+QtŃő–TÇJŤ@“X„‘‰ę!őşbśBżJ„zj:Ű Ů÷ąo¸éă\]ĂČŰ÷ŽňUC|…1ű%Vąˆ(BÍ6,ÓäâÇö<íŽă’nBĆ ŐƒzHÔY‰¤#ѓ÷YŻż\' ŤżhKĘÂhű<&Q/˜_"=B*>i äyu[­N ĺŞc%슭#7”Ö8d–ÇŸ?/<ňl—\’ćę+ź8ňŰ œNĄžŠr˝…ąŠ2ŠĽź[şţ'ěœă´úSŠăŽ&ą(ę łîTňŠŕ“0 OZ´lWŃD-ŰZHI*vŽڑBšŠřÂŔ€Rşn€řË.†/B̢ćĂ×âŒÂÄňŇsÚ#oďí ÖnŐíHˇ<÷´Lmű×Úl ]ŤĄU߄š| ­‡˙őÍuŹ­Žbmmľo[*•191ĘŚ÷ešłúJÍ!°4Âe—˝’Ë(ňČwÉ*>ö<~˙˝_Ĺěţk1ł÷¨ŸÄÂyƒć+óť\4‰%…öHlăTĆŁ@DăQÜą1„ą!Ďj=mD˘čœ&ąÄă—oۤy§f—ą-— Aěů5• ŹĚŇłu¤Cfُ=ťÇpĺĐNžó÷}DçoarÂÝb¨C6ąú„я칓E^éÍż˝<.˙á_ŔŹwćełŹžq Ľ%źţžý˜´úĎŐsŽ $ƒšJ_Ÿ) őŞI,ŮÚjK ś)‹hŢWÓa\“Š^+QtŃő–TÇJŤ@“X„‘‰ę!őşBw%Ͱfo~!Ćý[p{Ą^=9ńfťé’DŽ=ü0ĹšżË— ,vúćúޝ.!ĘňĄÔlpYĽÜĆîéÓn:[ůŒ<يîCšő^ŮEŠ Mb፿hKúB‚p°Œ(Ą^°Ż%Ň#¤â“&ą@žW70Ş:ńI`łB1‡\80NXŠQ2˘ ˜–D!ł˙°‡Ä1 % bK8Îż:K0‡ž^Çnűž¸2^Bž\PŻ;Ζ€‘úSŠăŽ&ą(ę)–S*u§’WŸ„i|Ңe;‹&˛hŮśB‚HRąŁpŹĐŽŇLĹΔŇuÄÇXv1|â`5/ƸţÇ`žp"%„ŠŽ0^ńßuşÎłŢ—asľsČ;ÄŤÓ*˘ećŃZß@{míőM´.><˙YlÖ+ąä읨rĽŠzفşýBŹVŤť¤•šŽC`iľZŐWŸÂ8ţ ”Ë‹%”Ęeœž°Œ˙đ‡ŸĆÄÂ!ĚşÁÎłŔ9GďNĎŇËŞ$ żţ;PÂöHŒe—ÁxÔljmœĘxˆČb<Š;6†đ 6ä9 Ž/CĹü5‰%ż|#Ř&Í;5ť!نŚňb|2Kńm3Đ-rxőËöcďžq\œ:‰3}gŸhŇűMď`š[,PŸĐ"úÁóš7oxă+ßŔúƒßtÓ´ĘÖß<ƒňBŻĹLM”}çŞI,W§­&ą¤`›˛ˆć}5Ć5™ęľE×]oIu< ´ 4‰E™¨RŻ+f+ôŤDŹ'ËęÜÇîÝq“œm…ňeöÇ ąÚ&֟ů֟ţ6Î,ĄąÖT2jOÁŚ}˙˚윘ďťý=ŽăíֆçDB!‹Đó_Vęu QSdý%’ŽDOŢ_dźţBr0Źţr5“XO=ąPđ˜XD˝`_K¤GHĹ'Mb<Żn Ť: ě­NzŰ U ˜žŤb×úfr ŒRTČ,‰ĹY‰…Đš˛‰DRƒÂ‰ł⟍łxó)´j8sf{vĂ(Čç§ěsp˙۔(u'ŇSiťŞzŠ> ӈ˘§ŕS–ý)śŢ0ëN%Ż> ÓPôI‹–í(šČ˘e[ "IŎ±B;RH3_8PJ× cŮĹđEˆƒYÔź`ăúCƒQřą/‚n=[ƒÂ‹’ÁŘOť w4üxČ˛÷ěShŘĎęÚfMűçümŹ7Đ\YłËh7LŹM^;řŞ;—ĂřřrîÝšK:w2‰~‰äx”/äQ.—Q,ĺÜhʓó˜Ů{ÜÖ)Ă÷ ٌb—šBył‰[˙(a{$ƲË`<ęăÄ6Ne< Dd1ĹCxňחĄˆbţšÄ Œ_žl“杹ݐmƒŤŠřąp‰ćXŰ Q ­Ž8Ę^őŇ}Řżw gÚăôŢç# ”ć1ůĘťě—užUWżćlEÔó+řsĽŐĆĹ?|gg%–’őˇĚ °PĆëîŢŻI,ÚÖMbIÁ6eÍűj:Œk2Ők%ŠŽ#şŢ’ęx@ih‹02Q=¤^WĚVčW‰QO­ćŚ{úڛ>É6ČíůGíŃfk}Ť<ŠĆĹËý¸Ć•uʟYľó0 ´:‹iÁröéeČľű‡ŐnÁ´Yôő:¨) ˛ţIG˘'ď/˛^!šNVŃ$–ě…‚Ç$Ŕ"ęűZ"=B*>i äyu#Š“Ŕ‡Œ˘:)V ˜˜*ă@c—Ě* !áŠˆĚâ%ąxĹK"‘ݤ’`Ť!nšŤĂô/O>ť‚]yÂÄ\ĽrçĂÉéČ{,iO˝…ç¤ý)ĹqG“XőË)•şSÉ+‚OÂ4}ҢeťŠ&˛hš:„1pTÂ3˛ĚŽŇLĹΔŇuÄÇXv1|â`5/ƸţÇ`ž@ÍQĂs`x¨Äą3BŻ%<Ëš-ˇlöŸzMŤˆŚéŹĆRpíVľĽU4×jhÝôˇAĽÉŽ5aÜh —K>Uäóywĺ•RąÄ|!x`Ď,f\çŽţâ;GĆů‚KOű—y4Ë/ť4‰%–/}œŘĆŠŒGˆ,ĆŁ¸ccbCžâú2QĚ_“XbńË7‚mŇźSł•­ŔÎđmЋóہm†ź¸Cfš÷Ľű;d–ĽpááOůVQŮůÖďsTYäţ,ĆŻ‡ĺĘĽĐ ,Ţßĺw} —` lźyy‡Är×>ĚLUüţŚHbQ[MbÉÖV“XR°MYDóžšăšLőZ‰˘ëˆŽˇ¤:PZšÄ"ŒLTŠ×łúU”úœwĹÍΟvťË4qÓĄo3ÔsöÜT”ŚjϢhœ?‹ľo} fŁňŇjśąöÂ46,ľ6ç|b…5ŤĺvL\ěPMOţ\Çä:]P˝$j ƒ€ŹżDґčÉű‹,‚×_HކŐ_4‰%{Ąŕ1 °ˆzÁž–HŠOšÄy^ÝŔVŠĂăxŚélĂ^,çą0SÄÂÚ*fňuŒZXd‰Ľ'NŹK.ƒpIü[¤Ť¸ŘB(Ř×Ď>żŽă*EĘáŔšu€Ť¨ęĽŐŸTő|jRŐS,§TęN%Ż> ÓPôI‹–í,šČ˘eű c2਄gd™)¤™Š/ œ(Ľëˆąěbř"ÄÁ,j^0Œqý!ŽÁ(|A4_7.aEbUÚOŐ`mąÓ}\lˇ`8ŤŻXe´Ě˘ýˇ„VËţŰ.Ú ČÝów€šĂ}ËÂł<ô'0N~ÖžkŠ!ŽäěwĽRŮţ•„„˜é‰ Ć+ĽNÓôśĎŔů¤Zć,ť”ęż%l$ŔXvŒG}œŘĆŠŒGˆ,ĆŁ¸ccbCžâú2QĚ_“XbńË7‚mŇźSł•-ÉWq‰"Ą8řňBœ‡’ŻzŮÚ?“/|ŸşżO>)ďݍÉWžÜ~Řfš_žó~ž+—™Ű 9żÖš‹¸üž€ňŔć[v °§‚×ßłł3Ué“X”VcQ¨MbÉÖV“XR°MYDóžšăšLőZ‰˘ëˆŽˇ¤:PZšÄ"ŒLTŠ×łúďoó¤w9˙`˝m…ć§Îar*¸ Šm—/IWQ1[ Ź=ńmŹ?÷|‡`âćcŕƒßzŢ˙č]îJ,VwԆý‚Ž~eŇDßuP :§ň˝ˇýľ{"ÍĆĆŕźŔ¸OPęu QSdý%’ŽDOŢ_dźţBr0Źţ˘I,Ů I€EÔ öľDz„T|Ň$Čóę^uҝ*ĘcĚ,ŒáŔňŽ´ÇP2LŒZźd‰Ĺ+A’IúŤŻtśâ‘e{z {ě{ăŮ]S(U‹Ëďî~†Ť?ŻDŞ;ďqŠăŽ&ą(ę łîTňŠŕ“0˜>iѲݤ-Zśł0&ŽJxF–Ů‘BšŠřÂŔ€Rşn€řË.†/B̢ćĂ×âŒÂÄňĹezKQÖ ßůŢtĐa ;2žśˆ†}œ7Kö…zÔî$ę<ˇ›zýĄtók9>ö ˜Ď|͉ XŸAţ…az°űvĺI¨ˆť Kwű™Ÿ,âÔ˛i?°4‘ËçŘń×÷ĐűŕŁŢ˘äźaˢţ;PÂöHŒe—ÁxÔljmœĘxˆČb<Š;6†đ 6ä9 Ž/CĹü5‰%ż|#Ř&Í;5ťQŮzěş;é1Ĺč*ř^\QŘĆÍËÜ9~ŝű샳xîÉ÷ĹćźÄMgöGž ‹<ŔüĘŰ+fŃ~ŘŞyŇÔţ™˙ń'hç[hźqů=eźćĺ{ącşâ?ř}ő…5‰eŰÚjK śYˆę ¸¸]ĎrŁ)şŽčzKŞăĽU I,ÂČDőz]1[Ą_%A=ľZm…ŢxËÇĂ lK!;˝ÖĘ"֞zÔÝf×ů4dŁYĹďů‡đđ™cnÜ—oÂĎßý—˜.ŻŰéZëu´kMTŚQ(ü>eĎՆٲŸŞúďwo<ř(Źű[öK5Á¨KŒX8zęu QSdý%’ŽDOŢ_dźţBr0Źţ˘I,Õ`Ç zÁž–HŠOšÄy^ÝŔ0ëÄ{ďçĂzŁNźFÎ˙ÎG“%ěž*`nc ľŠ š!Łá‹CfůČW‡ýŘjWkq4ÝSďžfŽçÎâ q˝ř>ŽçüJőuœ>WĂ]öíđÔ|ĹrgŁ&ÖŽÂnÝ|wëN¨—⸣I,Šzi…iĺÁ'a1}Ңe;Š&˛hٞ˜ 8*áYfG iŚâ gJéşâc,ťžq0‹š c\ˆc0 _˗>îÜźXáK“^LđĺXżţoŃzd÷âÝžŃpđŠŐËhç ° ű žm‚ ä~Ů=qŰ˜ză÷m›O<€ĆÇ˙ĽŠ ”67aVŞ(T–‘ť|FîCČď<cď­0ćóĚ7X9#‰ÄâČüTÎ%˛sGäY‚ŤÔ¤\ćYÔJŘI€ąě2ú8ąSYŒGqÇĆĆ<Äőe(˘˜ż&ąÄă—oۤy§f7*[†‹Ěbřđ.™…ř6R2ËKöbjź„Ó/|KöŻ'•t¸ă–ŕ|–ń5,ékLßp/Pž÷Ć 9źüÖ]˜ž,÷Ą8$–žpüŃ$–‡­&ą¤`;]0ŻÉTŻ•(şŽčzKŞăĽU I,ÂČDőz]1[Ą_%F=yçOłÝ„iśqĂĄ'}6†‘ˇo8ů3űßÚéS¨9ŰőĂpI*_8Š˙ţŐÁZcťö^箔öôů ţĹGţWüÔďĂ]‡v= ÓÂćš%wL :Uď­FŰő%—Ď÷ă&ÇŻ.błľŰ%á„Č6Œz`m˝;(_¨čšÄ"0VŃ$Ăô$XFÁą‚^°Ż%Ň#¤â“&ą@žW7°U뤡°gHĎ,gU–"ćöNŕĐ—ń‰Ă˜É7°l–1j1MB\qĘČY)ĹI!2IĹ.—lq9;§Ż>ą†C9;÷L œěŐoĺv˘Ş—VRŐSđi¨ýIU/bżË<Ż> ӈé“-ŰU4‘EËöĆdŔQ ĎČ2;RH3_8PJ× cŮĹđEˆƒYÔź`ăúCƒQř‚XžřđŢUqgŚm˙ឤţ{é8+œ8ĐŚĎÂ̗ě°ŤUľ*GöcĎOü\˙Jźyö$ßů_Q°jhŻ×`NŁP­ P)ŁPČťŰĎFŤ÷o^‡ËwbĎü *Ľ<ňöÂăwâ{_÷RD•cšÎýšŐFeŮ(”y˙…\°Ěł¨˙”°=’cŮe0őqb§2"˛âŽ!<ˆ yˆëËPD1Mb‰Ć/ßśIóNÍnTś;ń„…‰Ľˆ@fĄÎńÍ×ît_˘ť¸UW;„1{ęŤď¸q>‹űrxä˘P7šÄ’­­&ąŒŘ6i–‚‹ Ńő,7š˘ëˆŽˇ¤:PZŒšÄ"ŒLTŠ×łúU֓óqƒC¸€ŠŠćpȤö=-oî°ęuŹ=ő$Ú›0ĺ\"Ë{}=>ňí{Q*MâŔĄŰPŸsńęŘ,Νyż÷ĺˇâŃó×ŕ§î|? š6r†…ÖŇ:Ź:ĆöLńók6ŤT=“"áťo}/ŢőŕĎŁŐÜ@Š<É\ŮLVęu QSdý%’ŽDOŢ_dźţBr0Źţ˘I,*†éI°Œ‚c˝`_K¤GHĹ'Mb<ŻnŕĹZ'Îął*Ëô\ť&óء´ˆł;vôÉ//fqüď­Î’ó”?ŘЃBÜúĽĐzűě[â™Ý(V:ŻAƒˇˇC%B¨ę)ú$L#Šž‚OCíOŞzĂŹ;•ź"ř$L#ŚOZ´lgŃD-ŰVHŁpŹĐŽŇdDF÷…3ĽtÝń1–] _„8˜EÍ †1Ž?Ä1…/ˆĺ‹÷*vďNxś†ł—w ,EŮOśłć#Ć׎ í,Álľa˜m'çqâü/ȕ;+§´WVpć÷ţ rÎś%l=ŤľŠBaÍžŕ/"_śš‚ýPĎٞČÂrŤ„÷›7 ľÚęőM4j똪řůˇ˝qd~şh˙ߙf`ŻtĂsŠžUZ8_Žyţ0%‹úď@ Ű# 0–]ăQ'śq*ăQ "‹ń(îŘƒؐç€T}I[3Ń$–X`üň`›4ďÔěFeŤ`gđžRl32K÷żŢ˛Ó7]3çţÜdeO"$¸Áa–hËŐkŤI,#śMšĽŕâBt=ˍŚč:˘ë-ŠŽ”Ł&ą#ŐCęuĹl…~•ęŠŮÜtËロ?îŸ,ňeÎ &„Ć•‹ŘxćůÎýŻ›źKë;đŰüN-ďĹôĚ>ěÚ{3ršbߏR݁ĂÇ^…‹Ç/äńÔĽCř…ť˙GçNš¸ŮlcíůETć§P ?B5,[§Ń@žZíŸří‡Â_~ĽśŃp‰,]güç~Á¨×DMaŐC$‰žźżČ"xý…ä:`XýE“Xx:ŠG8u:VĐ öľDz„T|Ň$ČóęFY'ž]„üţžŰzWeqď-ť+t÷ÔĘŐ"Náŕ#Wpybš’MÚŻóœósfkçŒű„ĎłpQœw%֊-ĺV ?ˇ›s&ćöNvWWëęőÜ{ů€O^ĚIŕč!B;QŐKŤ?Šę)ř4Ôţ¤Ş—ÖX˜V^|Ś‘‚OZ´lGŃD-ŰRHŁpŹĐŽŇdDF÷…3ĽtÝń1–] _„8˜EÍ †1Ž?Ä1…/ˆĺ‹gľGÖŢ]؉e} ŽŔKľÎC>9ÓDۉ/ÚíÚ ĆŞ¸é—ţJł3$[m<óŰżÖĽu” ewËž[°ň9Xí6ĚzyŁŽ|ÎBŢÎs-7†˙4ůèĚĆüŽC¨­.Ą\[Á˝rŞ•"âČŽéĄfđŕÉË<đ3‹úď@ Ű# 0–]ăQ'śq*ăQ "‹ń(îŘƒؐç€džČj:DHZ“XbĘyj 2÷×K:áŮF"ł_§—–›sîç;Í%°0ˆ8šÄrőŘjˈm“f)¸¸]ĎrŁ)şŽčzKŞăĽĹ¨I,ÂČDőz]1[Ą_%N=1&Ĺś}Ďęl+tóŃ'‘ÎGÁ­zląě{ٍgżƒćâRׇÎVB<ţäëßoßO`÷ž03{ĚŮÇČcמ›1>> gĆŻ~úďă{oř ž˙†Oťn:rÔ/­˘=^BuvF.†éŹxÚBŽĐyÄ:9ąja ÚŮŮ^y˙š F˝$j ƒ€ŹżDґčÉű‹,‚×_HކŐ_4‰…§ŁX0 …DÇ$× öľDz„T|Ň$Čóę^Ěuâ{ş™™łŸťnâȕKxb÷^LĺšXľ˘m徕Ĺę–O’ŐWźÇ%˜řć“+X°ZîĘßsŚěË‡Ž•w[ Oyo›yuZÍPk'Şziő'U=Ÿ†ÚŸTőŇęwiĺÁ'a)ř¤EËvMdŃrU …Ń ŻI,ęţ0–×âŒÂÄňҋÚcđĄ^đ":@fĄ }G༌ĘŰ›ŽśCQĎpí÷żS‡÷vllÝÇ~ďĎąúä9TKcvL –}ÁďY¨mÂĘçQČٝ9 §K;ń{S߇Za'ťÍ}đçxR(•ńŚ—@\Ů˝cĚö岝ľĐ ĚĂŤą°ĘŐ >ć+f ~ýw „í‘Ë.ƒń¨Ű8•ń(‘Ĺxwl áAlČs@2_d5=Ń$–X ržšÄ‚Ěýő–q`Çż°Ž ™Ľ?O‘OǍŁpz^!Ë+O‘dEbQ[MbÉÖV“XFl›4KÁŅčz–MŃuD×[R(-FMbF&އÔëŠŮ ý*)ԓ Űóž3ŻN_ÁĚtîŹaäěůŠJŹšşŠgž†ŐhvŁ 4Ě"ţčÁż…ŻžpŞc3Řż˙%(•'řţt&ŚvĄRšçĎ<Œ÷ë>Ć(ž¤śP?{›§Nőýsŕ“‹űđťź —kó˜?‚ůÝ×űVD ůÓ?ęĚ…âöž KWNâŠóü‹ü2~úĽďĂË<âę8Ű>ʟ[Fif•éŠ/ŤQ‡QЏséÇž†÷~ý'Ń6ę.‘EVęu QSdý%’ŽDOŢ_dźţBr0Źţ˘I,<Ů(’žPđ˜˜'@HIÄi¨ú¤I,çŐ źXëħ¸ŻtŽĆ'ËŘ{to_ÄFš‚JÉ]-Ě"őűăWg‘­žââÝ{i縜´Š+Wj¸•š˜Ů9†™˝“ýUTúˇÉŢ@@ÜRďëÁÇĐ*íDU/­ţ¤Ş§ŕÓPű“Ş^Zý.­ź"ř$L#eŸ´hَ˘‰,ZŽ ĄĐÁ č5‰B@ÝƲăúCƒQř‚XžřđHí‘˙°Ż‡‡Žzúd…ví˘}Łăźłą‡>řyÔÖ×Qťp'?ůJ• ÷Ť€†Ů†ić@ůŠhڝŐQ,<7ś€ížŤůiT&g1đ&…Îq–ŮrŰÜţŮdK[:îÎMp~Őš3í›2˙šĚY+¸¤T˙(a{$ƲË`<ęăÄ6Ne< Dd1ĹCxňĚYMG4‰%¨œ§&ą sEe,$œŇŁP›Ěâf%zR!ĘÇ÷Y¸?/ĄŽ/^“X^춚Ä2bۤY ..D׳ÜhŠŽ#şŢ’ęx@i1j‹02Q=¤^WĚVčWIĄžź°ißťZö}é­GžŐ‰l)d6Řxúi´V׺ůçÜSŢ˙ŘëđÁÇ_‹\qűÝfżř[Pč/Ź‚003wĺꌻŐĐoémxřđľřŠ;ßçŽTš3,4—7ĐŢl`l×Tç q÷Ë{ű^Űš7.”0=šŠr~mÚŃm‚•Xć×xý…sďŁRŠu•ŹżČ"xý…ä:`XýE“Xx:˛Q$}Ąŕ1 0O€’‰ÓPőI“X ĎŤxQŐIŕƒEď=c`:˛şvîĂvšĆň•:Ž;ߋŁ/âé˝{Q,Xhľą-š:‹]9OărÍž=˝Žűšö^˜8pý*ă%i݅H,Œ;*ďT­ÜNTőۓ0(z > ľ?ŠęEěw™çÁ'aiúŘ˝§ěn+tĂG‘Ë9+…–:¤›jĎ=‹úĽKÝźí™Î |ăô řŁ5s {oŔěÜ€9VëôÂŰx$—+`×Ţ[0>ž€ógĆŻ|âířŢ?‹ďżáÓŽŽłľCýŇZeTwŽťŤłXÍr•*^~ěKřČĂo…ŮŞ.‘ĹŸâďčIĄžMbŤżh OG6Ф/<&ć RŇ#qŞ>i äyu/Ö:!Á%ϧRľˆŁˇîBăŤç`^ź€göîA1×F;ůăŘ-)Îy÷VgĄî/ükϱϝYĂtťăí:ŽÎ`j×`K?_1‡Ž‚uÎßwŹŇNTőŇęOŞz > ľ?ŠęĽŐďŇĘ+‚OÂ4Ňô)xňZ´lCŃD-ŰV؃9…Ł‚v¤&#R˜f考3ĽtÝń1–] _„8˜EÍ †1Ž?Ä1…/ˆĺ‹ŇYőďš'†~8sbM˜ÎÖB°`ćňö6ç+ą" űnÇ4My ‹ăÓ8špKă3îĘ,ŽÝXuăÓ ČĘý<ƒŰ$8_œ91—–6TvN:ÓRV—Č’¸Ď1ăÖJŘI€ąě2ú8ąSYŒGqÇĆĆ<$ó%BăÎP4‰%¨œ§&ą sŁ–ą”Ě"Xm…Eféd×LŘvRĄpš*ihˋßV“X˛ˇUé‚éć͘ĺUŻ•(şŽčzKŞăĽU I,ÂČDőz]1[Ą_%…zňÁśýĘ4[¸őŘŁ@žěÎSíőul|ç;h×jŽŞEö]­•Ăť}3>ůô+PŽNăŕĄŰQŠÎ¨ĺĹ)QůNLíĆĄĘ$Οyď˙ÖëńÔĽĂřűwýŚ*ëî8ln6°qډę Ľ<ĚFsÓËö}wÝöˇŘ;Á~zęu QS”ë!J]Ét8ząĆ,7’ä:`XýE“Xx:˛Q$[ –%}ěk‰ôHœ†ŞOšÄy^ÝŔ‹ĄNBŤ˛ꎝ“Ď0˜ĆÔl‡Ž›…őŘeÔK%œŮ˝ůœ ŞŰżmśÍPOœŐYúēîJ,NYšuœş¸Žńv׾j˜™Ăîăs}e‰Ľ'ž: Üřz͔ۉŞ^ZýIUOÁ§Ąö'U˝ý.“ź"ř$L#MŸyiѲEY´lKĄĐÁ Ř5‰B@ÝƲăúCƒQř‚Xžřđ(íQT˙Á­ B ůŠ&—TöĂžRŮýrŒŚ}՟‡‘/`yn.MĚĄ66 3Ÿwoz ö˙ĺąIT&gÝŐXúçéÉÓ{yŸ+8Ë=çđĚŮeűć‚ě‡uńoœvM—ě˙7;KJ{ý÷ž§ĄPžu˜ČN8$l$ŔXvŒG}œŘĆŠŒGˆ,ĆŁ¸ccbCž’ůÂoܲ6ŚhK,P9OMbAćţĆ-c.™…z8cŽŘuVUłKh8ž˛ă5‰ĺĹnŤI,ŮŰ˙uc–W˝V˘č:˘ë-ŠŽ”V&ą#ŐCęuĹl…~•ęəłŹ€SÎ<č̝ă•ĚÍ;6Đ8'OćTűĎůľř˝~ gÖö`fî öÜ䮜Až<ŠQĹŇ8öšKWžĂ“çóřWű%üěËߍŰö|Ű˝Ďv>ß<ˇ‚Ňô8ĘÓ…6^{Ý'ń™§ţ6Z͚k?(_¨čšÄ"0VŃ$žŽdQ,ˇ¸,Kű8Ř×é‘8 UŸ4‰ňźşkřôŒđĘÚ>Ÿź7žG˝ťOŰóŠ=O~ç"ÚĽ<.ĚĎš[ĺ6[ösŮíIfqNÝť:KŽQĂů˨´MÜPŰĤý<ůĐ­ťŘ$O.†@pH,ýc•v˘Ş—VRŐSđi¨ýIU/­~—V^|Ś‘ŚOŒź´hŮŽ˘‰,ZśŻP8 Ř5‰B@ÝƲăúCƒQř‚Xžřđ(íQĽţ˝WäŒ  ŕ×ŕ†áYŞhŽÍ`˝4ZĽ 3_r/Ö]=ËBĄXBylÚţ[îž˝"˙yrŢž9i E\ićđígĎă†c{WŚĆŠî_ËłľPđäź_ÚeQ˙(a{$ƲË`<ęăÄ6Ne< Dd1ĹCxňĚ~㖵4E“XbĘyj 2÷7i‡ŚE âČ,vÄf­ ӊHféŚă̇“ă%e3MbyńŰjKöśĂy @.n.şžĺFStŃő–TÇJŤ@“X„‘‰ę!őşbśBżJ őäƒ=zm… źţ–OŔ°3Z{ňI´––şj97óO=sŢőțmľ ě9p#Śf0ĺäĹ)•ň ě˜;ęŽţráěĂřőĎ˙$^qř!üÔKßg?`5‘3,4W6ĐŢl şk÷ű´Kdiˇę(Çý÷˛ŹÉ–ę Đ$ń°ú‹&ąđt$وbšĹ•T‰Şz$N#Xż\=ß)\„[Á'aićŐ źŘęÄ˝ő˛8zž•Wœ˙z$‹žŽçžŇQľşŕţłöÜb?;}ţ väé˝ó° y”×jhY9lWqĘÂŹŐ°fŸç„ŮĆ 똚,ŕŘ{\2Ď@Ďcd îœB$–`úހ˙;ѭӟTő|jRŐKŠßĽ–WŸ„i¤é#/-Zśłh"‹–í)ˆvMbP÷G€ąě¸ţÇ`ž –/>ůbŐńi|â'Y öMG'M0ϓoÖ˛¨˙”°=’cŮe0őqNF{”ű‚ô|Ń$–ĚE“XbĘyj 2÷7­2î“R+ő˙„śÚńWańúÇł- śšÄ’­­&ądoŤWbQ›î¤U I,ÂČDőz]1[Ą_%j=q>„ŕՕłĽ ťĆžĂâCŔ~C×U3°Ů,ăžúV ÓH3ŻnŕE['2RD0!Žž7™C7ĚĂr–)9uE{ÎäŠyś‘aˆëÎsĂ,'ˇLRŐSđi¨ýIU/­~—V^|Ś‘ŚO’ź´hَ˘‰,ZśšçŽɬّÂ4Cœ(Ľëˆąěbř"ÄCţ0–×âŒÂÄňŇ3KĽţ]1¤iö–l&g+!ËBŽPBŢţ9—ÎśAţď=î;O#ěAŕF PŹ TÄç~˙Ë61^U˙*Ü+Śé_‰ĹűĹx¤ú78ËN8$l$ŔXvŒG}œŘĆŠľG`R_ž/šÄ’šhK,P9OMbAćţŚ^Ć[éŞ,ö—7áLůóďEÎڀL&Şmăg"‡óÓ?ęďžëçÁô).ůĹ…rŇ$–lm5‰%{[MbQ›î¤U I,ÂČDőz]1[Ą_%…zňÁ^E”Čtď‹ˇÝ8§?>~á8ţÇWߊľć4v_ƒšů6řڜ˝¸IŸÚߟÖ`á\CĄ^!_Âîýˇcbj7Νyżň7oÇßňqźńÄ] gu–ńÚI”Œ4h§ťu’Ńő;´ )Ô I,ăaőMbáéHFŐzHIˆsěk‰ôHœF°~šz‚r&Ž?"=.–OÂ4ŇĚŤxąÖ‰\/ü|׉éŻŐxVŰ_™Ĺ–#7/ _ʃžš‚‚iá™ăąšs ĹőhľŃŮúnHŃjbiŁ jˇąPŻăčú†ťĐŃ;ö"WäŹ@cÜq‹ş¸'Š+[Ś?Šę)ř4Ôţ¤Ş—VżK+Ż> ÓHÓ'I^Z´lWŮžëŒiѸdjĚšŠtqCœ(Ľëˆąěbř"ÄCţ0–×âŒÂÄňŇ3KĽţ2;çaą4†ňřŒK6qVOqI,Îx[ĺč̋}Á~.‡BuFu'>ţĹÇWž?żÚÉ)°Çy¤úr#"śG`,ť ĆŁ>Îi@ŁhĂCxňĚţŕ&k™J’Ě_lśTÎS“XšżYXdŰđ…ŢLŰŰMČ@ qĹ "šÄ˛=m5‰%{ŰQ=ę'n@MŃuD×[R(­MbF&އÔëŠs­éUIĄž|0CĎ˛Ú ű­ÜÎňӘżŘĄ¸PxüőxÇç˙.j´€ƒGîÁ΅kĂ$Q^œ‚P)_U˝ńŠ=8tě^”Ť{đ}~ískŠÔ!ł\;óE×Ŕ4›Ü´Âů„G#Mb፿h OG2ЍÖC Bđç,#YÄi뗫'(gâř#Ňăbř$L#Íźşkxポťú|â­Ň?ö?ëě/˜m˙\;‡#7-`aq ˇ|óIŒmÔĐšŽ˘˝{ ĽRĐÓ—`ĄŃl`qŁĂ4qduÇ×ÖącĄŠc/M@bńGq#śLRŐSđi¨ýIU/­~—V^|Ś‘ŚO’ź´hŮ΢‰,ZśŠçŽɬّÂ4Cœ(ĽëˆąěbřâůĂâ’řCƒQř‚Xžřp†cŠÔ BiŤB˙Ë/&î¤á˝BďŚČ`ź|sn꟧őn§ ”Ę˜˜Ű‹Ý˙¸ňž A˝ 9Ă3Ě˜Äą[÷`Ňjâ–o<…ůóW€J›íšs×8 š 7/Ą6–M4Ű-TŰ&nšźˆ˝:ŽLăđm{`äXŒŔ3güČŮÇ)ś'aQô|jRŐKŤßĽ•WŸ„i¤é“j;Ѣe›ŠŢZH˜юI,ęţ0–×âŒÂÄňŇ3KĽţž‹o^ŰđDˆ!ź‡ËXľá݁źşŢ< ”ĆŚpálßřö ¸ăúƒˆ"Śeዏ_ŚÇQ,Vů…%‹úď@ Ű# 0–]ăQç4 LŰŁ˛/HĎMbž$ÉüĹfKąAĺ<5‰™ű›5‰…1pĎCŒŐS(i}˄ř+ĂxýŕŮĘD“X˛ľŐ$–ěm5‰Emş“‡&ą#ŐCęuĹšÖôޤPO>˜ŁçܧśŰ wťÚg?N݃?˙Ć[Đ´Ćą{ßőŘ1wž‘Pŕ[*¨”o'(ďä9÷#š…k06ąçO?„˙ň…ŸÄ›ŻßwýG01–ÇF˝ĺŸkIĄžMbŤżh OG2ЍÖC,#â`‘őHœF°~šz‚r&Ž?"=.–OÂ4ŇĚŤxąÖ OŻż-˧Ŕś´Î‘áI‹z xގÜôş+|ÎîĂŘä~<óčœxüYĚ\YĹÉĄ9S9]AáňrKőţśD[UňFëm mËDÎ>š˝Ťë8¸źŽR)‡=×-`v߸§ I,[Ł?ŠęĽŐďŇĘ+‚OÂ4Ňô)b^Z´lGŃD-ŰRDcˇ&ą@¨ű#ŔXv\ˆc0 _ËÎp,•úD$iNȨżÂKč%[÷F ôΝ븁besűńţĎ<™Čr˙C'ąÖ*`şĐŮúˆü„Ü5źĆŮŝ&ąHŇäDd1ĹCxňĚ~ăŽTW)Š‘4ƒ›-Ĺ•óÔ$dîďV\‰%+a’Q2>WMbÉÖV“X˛ˇ‰E%/RГ鈮ˇ¤:PZšÄ"ŒLTŠ×çZÓŤ’B=šp­)ĐłěUĽŇŚ*+řôó?‚Ď=šůb‡܁ryrW_ ž?ý##V ‚†POtÚŐę,˝—Î} ŸúÎ$ž_9ćŽŔ4ŽšçšsśŃ‰gű…A@ŠTu$zňţ"‹ŕő’ë€aő—˙Ÿ˝÷”ä¨Î…żžšy÷nŢŐćŹU–PI!@€@&˜lŒýŒąą1NĎ Ű8ź÷œžmţçřŒąýlc‚AB ”ăf펤ÍÚź{÷ć8őwš™NwWwϝ­#.ŰÝç;U_ŐŠęéîůŚÚˆXDĹY„š‡,ÚGLŕKŒcň2˘ůâ$ýĚ|d8Ą/NŇ2tÖĺďĚ֜¨pÁ§˛ą2‚BßéŕkA\ŕ—Î?ÁFtĎéÄĽ7ŽÄŃ}çP=r żwG6ŻĆŃKVajő|`U?:N˘ăä0fjň:mVĽ†Q8ŻâsZ[Ăźą l:usíĎÎ9Kz°ęŇĽnűę}űAHVK|łÜůDĹ8:Ÿ¨8]óNW] 8IËĐÉ)a]ÌľŤ!‹ą ƌˆRÄNjňa‚€2¸ —ŸCLKţ#¸qEžŞÁŐY¸íŒÜ 4o"ő㏠Ş]˝čˇOî݇c§ĎcŒů ŘČŘ$>őէСärt÷ö+űĆâIä‘>˙ž+ăxd/.‡óQĂ/@…G)čăbD,‚Ř-Kł-–Ľv’ë4"äΡH‹rUI¸Ľá˘LĒj5B?KžąFĒŹąĐ>î”ÝaD,҃™ň =W‚kÍ DCžBnEœ1tXUŒN÷`ĎÁË0oÁ<,^zą'ř-Ÿą;×9 âTypüŐj–ŻžƒG°˙ô~L÷ośu„0*3"qpQóňXDĹY„š‡,ÚGLŕKŒcň2˘ůâ$ýĚ|d8Ą/NŇ2tÖĺďĚ֜(qNe[šžú˝dă¨#Ú`‚!•jŤ/]Œš‹{ńâžłčÚwKŽÁÁ+ÖáÜęŘ^=S+űQ=3†ž“C˜ ĘdŠľŤ†ń*0YąPsPŤĄgr kO `éč(:ť;°dí",^;ßž.hŢĺ"bąZh>QqN…Î'*NןÓUWNŇ2trJX—1cílFČbě‚1#bÔAç#ńńâ„|˜   .HĹ%äçӒ˙Čiœâ×nźĂł |ŐPý?8ýíúbľčĘ-ţŞ,} Wákßۉű- Ř_|ţ! Mwc埼ΗGŹ źü[’_çIĎÇ#“řxq9œ~Á*|/Nȇ Ęŕ‚T\B~1-ů ĹńďͤA–%ˆŤ‹Cjľ˜ĎŠŠ]ěýŽî>ô-ź÷<ň4>p×Mčę”Ô|ţŰĎŕţgcő塢ŇŐv&ąŒ)FĢ(Sp óQÚscĚőü‹xp§ĺSşeáTF,Kí$×iD,ȝoŤŠXŹČ{ĎC0Ťb˙˙ ŇŘäL%RBu&2B[ˆ%ßX#bÉ?ś%D, R`É1˛ë-%&ŕTv‡ąHfʃö\ Ž5ƒ y š泣ŁŰą8f5΄ň˛č'ÜĎA×Áß ˙ƒťÉ-/ęŻ×ëź6I„‰›eD,’ŕ˘ć‹ąˆ0ŠłHÂ<äbœ‹śŁs’ťM))ƌˆ…R—ż3[s˘Äq8E^‰ă"B7áD_oůO†ýG¸VĹÂE`ţŇ>?xŢ]…eޓ{ąęŮC8~ÉœŢź“ýݨ-čĹÔK€ńiTΌŁăÔ0:όbz*Ú˛äćWXg“ößL§…™Šĺ>cvV”ąŚkXx~ËÎ aÉč¨}-PEϢ,Y3ý6çPßŔˆX’p*t>QqşćŽşp’–Ą“S†şŒkW3BcmoFÄЃÎGâăĹ ů0A@\ŠKČĎ!Ś%˙‘‰ĆcýA“đá´3ôş!pĆ#窴TŞčęíÇůÎůřĆCťq×ŤŽ‚ČŢś˙řŐmXźört;Ťą„ Ňő3‹×Ž1ŔˆXe äq>J{nŒůŁž‚?˛qŸÜŇň)ݲp*#–Ľv’ë4"äΡLKěÁᛐj˜™&ŚťŃ×1ФćTqv´ÝNYVⶆžß#ÄKžąFĒŹąĐ>î”ÝaD,҃™ň =W‚kÍ DCžBîř cü^’§Ć+e#—ů÷§ÍŻŚŹĆ?Á2(×qŞVŹ€hYAą‹+şą‹Ş1BžŒˆE\Ô|1"FqIb§2&ŮgÜm&/#š_!Ž81"÷‚9IËĐY—ż3[s˘ÄI8…VQáá"?„p?ţ~.ŽĹE2Ýsť°îŠĽžÄéŁCč<9Š۞ÇÔÓűpzĹbœ¸t6-Ă̜.ĚĚíĆ̚~LĚ0XӀSš„5:eďĎŔšŠĄ:=ĘT –#HqęŞTź?‡‡óš űž´V­€Ůß>Öęꛙš˙/ĂÜá1,9uˆŃc1ű>śŠîE}Xźrž'`ąâýTo˝˝‘. ű…‹k”ÓBó‰Š#p*t>QqşćŽşp’–Ą“S†şŒkg3BcmmFÄЃÎGâăĹ ů0A@\ŠKČĎ!Ś%˙‘ŠÇcT•ÁŠĘ˙úŠË ř+Ź‚îžy˜wŃZ|úˏâę-Ť°nŢt× ÇńG˙ň ć.Y+ˇÄʉĐĺě¤ĎżçĘ8™ÄNjËá|Ôđ P)ăąŔscĚőü‹xp§>”mY8•ËR;Éu rçŰŞ+ą-ş*KOwFF§qbt)6Ě;ˆ$ć< Ÿdxa`-.[ ĚííŒŐE竆KžąFÄâ[Ž}œ.ŽcĘjŒězK‰ 8•ÝaD,҃™ň =W‚kÍ DCžBnáfřK6e92k|žńËŁô/ǸŐ7.ôČ̈XdÁEÍ#bag‘y vąc‚í(î6“—ÍŻÇœ8ýŇ œ¤ečŹËߙ­9QâœźeV$¸úk†˜0¤‰Ť5çkcí@œ#hYľe1–Źš‡łÇ‡1pjŤĎžÇĘ0ő˝šß‡3Ť—b`ő" Ž\䎤ÂćwŁfÇš+uĎ0Ż@›*AżŹîď›D˙š!,8?‚EƒŁč™AĽŁŠJwsö`ţ˛9˜ť¨źžiޘV?ŚIĂšOTe<9Ÿ¨8]óNW] 8IËĐÉIWţkC3BcmkFÄЃÎGâăĹ ů0A@\ŠKČĎ!Ś%˙‘ZĆcPśž Ď]A ŤŠË ú˜çŤT:0wń* Ÿ:‚ýńńŁw݄Wß´óćôŕŒ}Óň‡ŸĹîݍęœ%XśéúpE&bą đńâ¤ç€Œă‘I|ź¸ÎG ż`•2 <7ĆüQ_ÁŸٸˆOnYÎĽZNeIJÔNrFĂÜůśŠˆĹ}ÎXŁĎíëÂäT /NlŔźńA,î9'ŏ…É^ŽAŹDý°ˇ;Ůí]ô{@)Vä¸PĆaÎąFĒŹąĐ>î”ÝaD,҃™ň =W‚kÍ DCžBnU˘?•CŠKĐ”ţĽâTy ç@#œČyЕ+ Ž@W0_˜q5_ŒˆE„QœEt΍ĆŰQÜm&/#š_!Ž8qúĽ8IËĐY—ż3[s˘ÄQ8ů˙Z™…‹łýŹ_ŰÖBĂ?@ôy8Ö,˘{N'–oZčžvhřÜΝľ˙G×Č8í>ŒÚÎC˜ąă†çÍÁČÜŒô÷`l^/&şť0]ípW\™ŠTÜ×9+łT&ŚĐ19e˙;m˙;ŢáqôNŘă˜;>‰.guëśłôÎďĹźĽsĐż¸ŐÎ ˇÍĄUYę"‹{¸řůDĹ8:Ÿ¨8]óNW] 8IËĐÉIWţkS3BcmiFÄЃÎGâăĹ ů0A@\ŠKČĎ!Ś%˙‘úÇŁ'cg’ Á× qŁ‚ŻbáăŐj–]|=Žď}s÷Vü͗Ÿ˛W`U;QíčFw˙r,ľý¨TbĺĹš(D,a¨`D,Š2ň8Ľ=7ĆüQ_ÁŸٸˆOnyđ)IJ(#–Ľv’ë4"äÎw6ŹÄ´ŕŞ,ÎGßâ=Ř´n1v¸óGĎĄżsĐ“ÖjńO-ďÄ;ŸŠƒÓó04š×]ž úťcuĐřŞ!FĒoŹąäŰŞ"F<Čd×[JLŔŠě#b‘̔íš\k!ňrSó{Ÿ2œƒáwĽŠ8Uč9™Y‰E\Ô|1"FqŃ9_4lGypˇ™źŒh~…8FŕÄé—Vŕ$-Cg]ţÎl͉Gá=ĐŞpš×Wf‰”a0 _ô•D>ÁŒ#.™ť¸Ďýs~Ë8>2é ZFΏctp ‡GÝ?§ç\çœNôöwĄw^7ć.ěEGw•ŰOÁˇű…ÚĎy^’ö°pŰŁeDKśş ŸwşęJŔIZ†NNşňoĚX›˛ť LuQĽŒc ?ÇA*×Ýab/.Š?ĆGâăĹ ů0A@\ŠKČĎ!Ś%˙‘ÚÇc°OŇ.‘ŰNŃńľ­JŐŽ^,żä& <ˆŃó§Q›™r.} .Âźݕ[ĺ„x7+E,Á›I狢LÁ<ÎGiύ1ԗCŸç—ńÉ->…XeIJÔNrFĂÜůÎ6KÝŹČ+.Ű´#ŁS83PĹÄĚIhr´żyíŹ_5/V6ŻbD,ůĆKţą­źKĚ(ŸíLsP>î”ÝaD,҃™ň =W‚kÍ DCžBî¤ůŒˆYHc+ş•"Tœ*ôČ̈XdÁEÍ#bagóEŁ1Áv”w›ÉˈćWˆcNœ~iNŇ2tÖĺďĚ֜(qN\tá˛÷Ŕçg“Ĺ+_řăĂŚř%Tź}°gn—űˇdÍ<ĚĚ0LŽMŮӘˇ˙ě홉űxÍőŐęŻrVćŽÚöÓŰJՎ şz:ěżNtőÚ˙övÚχ+Ňö‡+‡pVxe–&œŸ#bÉ˝ŽÂ睎şp’–Ą““Μ3ÖĆf„,Ć.c’ƒŒÇ~ŽƒTŽťĂÄ>^\ .RŒÄNjňa‚€2¸ —ŸCLKţ#´GY;ƒ75 <<Wg ů˜ LŔŞXʏóWl†ĺÜ-¸KIVĂ+ąpęŤď˜•X80Á*e<xnŒůŁžú<żü‹Onyđ)IJ(#–Ľv’ë4"äΡUE,‚›KëŹÚŸ/˝f9Î ŒcpxŇ]EfŐjó퇌 çu#YY0Ę8Ě9ֈXň5"Úǝ˛;ŒˆEz0S´çJp­„hČSȝ6Ÿź{QU9‚ސ÷ŻEÄŐ7ĺ ˘ç@fFÄ" .jž‹Ł8‹$Čą‹ľ“đŕn3‰ńü q’~f>2œĐ—'i:ëňwfkN”8 'Žńš!÷ŕëƒ"ýä|âŐb1MĺJ¨Č€F¤V‹×ĺˆSQKˇýרDÔ,˘DQľŸťú mä´?&vaá˜hyŃFĒ­ŽÂ睎şp’–Ą“SN91fŹÍYŒ]Ć$%Ž)üŠ\w‡‰}ź¸\¤ţ‰'äĂepA*.!?‡˜–üGhÔ>Ü%ńâ撚¤ĄÁ›ŤÚGˇ’&˙$Kă’r3ŽG&ńńâ¤\ŠKĂ/@ĽŒÇ$c1)#bÄ"1ŸB, 2bYj'šN#bAî|gëJ,Ał\)C8Öy͐ó§ŽSP&e5Ľ’ĹˆXň5"–ücˆ…öq§ě#b‘̔íš\k!ňrëČgă›,&/GĐá]KäH‹bIrŔłŔ˝­j‚#AtćJ€#ĐĚŚĆD™0§*WFÄ"Â(Î" ň@ěbíĆ$<¸ŰLâC<żBœ¤Ÿ™€ 'ôĺŔIZ†ÎşüŮš%ŽÂ‰ˆƒŞ.ןuI˘ž†8%ZWŕó6ÚOÁ[ȏ/'ŘvĹ3’1\C䊘 E,–äŮq¨ýÜĂĹĎ'*Ž2NXó‰ŠÓ5ďtՕ€“´ œrʉ1cíjFČbŹíI2JSř9Ršîűxq)¸Hý1>/Nȇ Ęŕ‚T\B~1-ůĐ>“öšcź%*q‹ŻĐ]\˜Y‰…   RĆcçƘ?ęËĄĎóËżřä–ŸB, 2bYj'šN#bAî|ŰAÄRŻÓŠźż2œĐ—'i:ëňwfkN”8 '*ÎßiüćPŔÉýG$N/ńˇCž đŁ?§WJą5÷Hî\ţˆPxeX–4wQ~ő VŻ$ę‹°ŠOŇ2’ŕœ OTœŽy§ŤŽœ¤ečä”SNŒkg3BcmmLrQâ˜ÂĎqĘuw˜ŘNjKÁEęń‘řxqB>LP¤âňsˆiÉä€öń˜¸Ď{Š/Ô˘}|ĺ.ł„žXœeIFĢ(Sp óQŞąČóG}9ôy~ůŸÜňŕSˆe!PF,Kí$×iD,ȝo;‰Xę–HĚ"€%ąČ FĒoŹąä;ŤVbáS`„@Ęǝ˛;ŒˆEz0S´çJp­„hČSČ]@>YčŤ/+U¨8Uř~‹€‰ĽšŕHšŕtó…Š1GQóňXDĹY$ó|ᗕ›Expˇ™Ä‡x~…8I?3Nčˁ“´ uů;ł5'J…­ĚBź_xýýa"ăŤ+( TÎŤ+&p nűQ_¨áËĂą&_nţłώ댈%{űŠ8]óNW] 8IËĐÉŠ€œ3֎f„,ĆÚÖ˜ä ŁÄ1…Ÿă •ëî0ą—‚‹Ôă#ńńâ„|˜   .HĹ%äçӒ˙Číă1qŸsĆŁ`ygYŸ×Pa.V’‡“J.Ć#“řxqR.HĹĽá  RĆcçƘ?ęËĄĎóËżxpçÁ§ËB ŒX–ÚIŽÓˆX;ßŮ$b ^œ”ÁЏ„übZň9 }<&îsĹxT(úEqAQЍ÷,˙ëKPˆş –ÄŸq<2‰Çe&äŇđ P)ă1ÉXLĘňXąĐĘG›eŠŁŒX–ÚIŽÓˆX;ßv\‰%jVăŕ´‰O°bceeˆŐ׌ąFĒŹąĐ>î”M2"éÁLyО+Áľf˘!O!wůdŃ­9 âTy ç@SMp$ȃÎ\ pş‚ůÂԘˆŁ¨ůbD,"Œâ,RÂ|ÉbL˛Í “á˜˘ ŔˆX(uů;L…kќ(qNTœ‚ťe59)ëâÜSFs\ńD˜“č+„¸líw›Ćˆ"„-ş,4ďœ7Hý„ěœ OTœŽy§ŤŽœ¤ečäT@NŒkg3Bc†q>,!ˆIIĺş;LěăĹĽŕ"őÇřH|ź8!&(ƒ Rq ů9Ä´ä?r@űxLÜçÄńČQô'ĺbqžZȔ#bĺ6 <7ĆüQ_}ž_ţŃťh>Ú,KeIJÔNrFĂÜůÎVKhU–uĆ*N,Qł3獴شu^čąFĒŹąĐ>î”M2"éÁLyО+Áľf˘!O!wůdŃ­9 âTy ç@SMp$ȃÎ\ pş‚ůÂԘˆŁ¨ůbD,"Œâ,RÂ|ŃiŒˇÍ$>Äó+Ä1Z]Ź9IËĐY—żĂT¸͉GáDĹ%Č÷UC˘şx‚–hĂĐźŽŽ…‚óÍ]°^iűď3’ĺ¤q@ľę‹„S.ó‰Š#p*t>QqşćŽşp’–Ą“SÁ91fŹ­cĆÚÝ8ˆÄ$¤rÝ&öńâRp‘úc|$>^œ”ÁЏ„übZň9 }<&îóăŃRˆQRs‘ř¸qFÄ" Ęm<xnŒůŁžú<żü‹wŃ|´Y–:ʈeŠä:ˆšóí+ąX‡éęDzc.3"–|cˆ%˙ŘŮ,ba_Łňë-%&ŕT6ɈX¤3ĺA{ŽךAˆ†<…Üä“EˇR䀊S偞L5Á‘ :s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłH óE§1Ţ6“řĎŻÇhuąä$-Cg]ţSáZ4'J…—"wî=• .'Ŕ}-¤ušĹ˛fі¨<'îv¤žm'âäđ5"–ĐNaó‰ŠÓ5ďtՕ€“´ œ Ή1cíjfEcímœ Db’@Ršîűxq)¸Hý1>/Nȇ Ęŕ‚T\B~1-ůĐ>÷y†ńظ‰`š¸H|Ń8˒ŒˆEQŚŕ€Ö9—”‹ąbĄ•OKX~icYj'šN#bAî|/„× •kD,ůĆKţął}%U݌€Ł|Ü)›dD,҃™ň =W‚kÍ DCžBîňɢ[)r@ĹŠň@ρ&ť ĄäAgŽ8]Á|ajLÄQÔ|1"Fq)ažč4ĆŰfâůâ­.ւœ¤ečŹËßa*\‹ćD‰Łp˘â2ćÎyLę.žM­+đŤîk‡8ušőÜVóŐˇÓśżžŠLŕ ,'Q’eç$1ŽŔŠĐůDĹéšwşęJŔIZ†NNçĘąv6#d1֞&8š aLYLĚA*×Ýab/.Š?ĆGâăĹ ů0A@\ŠKČĎ!Ś%˙‘ÚÇcâ>×4‚¤ć"ńńęc˛r3ŽG&ńńâ¤\ŠKĂ/@ĽŒÇύ1ԗCŸç—ńŕ.šOKX~icYj'šN#bAî|ŰIÄzĹPÂŘ,ő-ş‹ąäkD,ůÇ íăNŮ$#b‘̔íš\k!ňrOÝJ‘*N•z0ŮMXđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłH óE§1Ţ6“řĎŻÇhuąä$-Cg]ţSáZ4'J…§)wîő°Ż™¨Ž `$\Jî,+UN`ëJĂ ÚOĹ8:Ÿ¨8]óNW] 8IËĐÉŠäœ3Önf„,ĆÚÚĹÇĆ2bšîűxq)¸Hý1>/Nȇ Ęŕ‚T\B~1-ůĐ>÷yăąţ­XMŃoH™˙úÍ “•›q<2‰'ĺ‚T\~Á*e<&‹Iš‹ Zů´„eá—6–Ľv’ë4"äΡWbI$fŃÜV#b)6ֈXň5"Úǝ˛IFÄ"=˜)Ús%¸Ö B4ä)ä. Ÿ,ş•"Tœ*ô(`˛›°ŕJtćJ€#ĐĚŚĆDEÍ#bag‘ćK^Í ăůĎŻ'éç`] 4œĐ—'i:ëňw˜ ע9Qâ(œ¨¸rç\[~ŮÉsçł@PŽšŤ“•á$9iüÖąsBĹ8:Ÿ¨8]óNW] 8IËĐÉŠäœ3֎f„,ĆÚÖĹÇĆ2bšîűxq)¸Hý1>/Nȇ Ęŕ‚T\B~1-ůĐ>÷yŽăŃ9TĎŤD Şü—şä‚ąÇ#“řxqR.HĹĽá  RĆc’ü'ĺbD,‚XhĺÓ–…_ÚX–ÚIŽÓˆX;ßv~oA3jlšz-NgKžąFĒŹąĐ>î”M2"éÁLyО+Áľf˘!O!wůdŃ­9 âTy ç@“Ý„Pň 3WŽ`ž05&â(jž‹Ł8‹”0_ň˛h^χx~…8I?ëb á„ž8IËĐY—żĂT¸͉GáDĹ圻 %m]Ń粁JqŠž&ŮrgY’ş¨œxŰşrBĹ8:Ÿ¨¸ šËĽŽœ¤ečäTrNŒkW3BcmiŒâc cą\w‡‰}ź¸\¤ţ‰'äĂepA*.!?‡˜–üGh‰ű<ÇńČăů֌1qg0žÂĹseLâăĹIš —†_0€JIňŸ”‹ąb‘˙x,Ú˛HËR;Éu rçŰÎ"–  WgŃŘV#b)>ֈXň5"Úǝ˛IFÄ"=˜)Ús%¸Ö B4ä)ä. Ÿ,ş•"Tœ*ô(`˛›°ŕJtćJ€#ĐĚŚĆDEÍ#bag‘ćK^Í ăůĎŻ'éç`] 4œĐ—'i:ëňw˜ ע9Qâ(œ¨¸sçXđGŠë âx— 'KQ^ĘÜpiٜPq”Ü9Ÿ¨8]óNW] 8IËĐÉŠäœ3ÖÎf„,Ć.(cą Ÿă`”rÝ&öńâRp‘úc|$>^œ”ÁЏ„übZň9@ŠÓÜÎÂĆ#•KP2/X:2 ϕq<2‰'ĺ‚T\~Á*e<&ÉR.FÄ"ˆEţăąhËB"m,Kí$×iD,ȝď…"bŠ[luMmčCˆ%çX#bÉ?śíD,cĺăNŮ$#b‘̔íš\k!ňrOÝJ‘*N•z0ŮMXđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłHK̍&hOl›‚“ôs°{h8Ą/NŇ2tÖĺď0ŽŕöSs˘Ä•0ž¤e¤Ź‹űÚ!J]9rRĺIJ2ÔĽ™“´Œ$8'9Ÿ¨¸„šË˝Žœ¤ečäÔB91fŹÍYŒ]0Ćb?ÇÁ(ĺş;LěăĹĽŕ"őÇřH|ź8!&(ƒ Rq ů9Ä´ä?r€§š…Ç’ňďš2ŽG&ńńâ¤\ŠKĂ/@ĽŒÇ$ůOĘňXąČ<mYH¤eŠä:ˆšó˝ĐD,AsŇ9ąVĘŞ™XźŇ¨C›ĘfŰ8Ě9ֈXň5"Úǝ˛IFÄ"=˜)Ús%¸Ö B4ä)ä. Ÿ,ş•"Tœ*ô(`˛›°ŕJtćJ€#ĐĚŚĆDEÍ#bag‘–˜/ů“m3ŽĘă´Y„úrŕ$-Cg]ţSá n?5'J…×"škŹl⡿Őr\y%u]ş9Ą¸~*t>QqşćŽşp’–Ą“S ĺĘąv5#d1vA‹müŁ”ëî0ą—‚‹Ôă#ńńâ„|˜   .HĹ%äçӒ˙ČRœćv6KĘżçĘ8™ÄNj“rA*. ż`•2“ä?)#bÄ"˙ńX´e!‘6–Ľv’ë4"äÎ÷BąDcU‚nŹą”kD,ůÇ íăNŮ$#b‘̔íš\k!ňrOÝJ‘*N•z0ŮMXđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłHKĚýĆ$űŃü2Ž)Ęđ7”u6Šá$-Cg]ţSá n?5'ZĆ ×jšŤo^×S$§°ĆăZ6'TSĄó‰ŠÓ5ďtՕ€“´ œZ('Ìľł!‹ąś7Űř9F)×Ýab/.Š?ĆGâăĹ ů0A@\ŠKČĎ!Ś%˙‘¤8Íí,l<–”ϕq<2‰'ĺ‚T\~Á*e<&ÉR.FÄ"ˆEžăQ5ó°,uŚeŠä:ˆšó5"¤7BŹąäkD,ůÇ íăNŮ$#b‘̔íš\k!ňrOÝJ‘*N•z0ÂE89:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłHK̗üEˇ™ÄWßfŠ2ü ŚŞ+°ÁP 'i:ëňw˜ WpűŠ9Qâ(œ¨¸V˝¤.çÎv]X+\wVNĄňŃ9Ąâœ OTœŽy§ŤŽœ¤ečäԊ91fŹMÍYŒľľąŘ†ŔĎq0Jšîűxq)¸Hý1>/Nȇ Ęŕ‚T\B~1-ů Ĺinga㹤ü{ތă‘I|ź8)¤âŇđ P)ă1Iţ“r1"A,ňŞA˜‡eŠ3m,Kí$×iD,ȝŻą ˝bˆ%ßX#bÉ?śÝE,B#^WPŻ?ˆE~PvÝŤpŞs%¸Ö B4ä)ä. Ÿ,ş•"Tœ*ô(`„‹prtćJ€#ĐĚŚĆDEÍ#bag‘–˜/ů‹n3‰ŻžÍeřLUW`ƒĄNŇ2tÖĺď0ŽŕöSs˘ÄQ8Qq­–;J]O€bÄ|NÁŐFŰ*'TSĄó‰ŠÓ5ďtՕ€“´ œZ1'Ìľą!‹ąś5Űř9F)×Ýab/.Š?ĆGâăĹ ů0A@\ŠKČĎ!Ś%˙‘¤8Íí,l<–”ϕq<2‰'ĺ‚T\~Á*e<&ÉR.FÄ"ˆEžăQ5ó°,uŚeŠä:ˆšó5"¤7BŹąäkD,ůÇ íăNŮ$#b‘”]÷jÁœę\ Ž5ƒ y š Č'‹nĽČ§Ę= á"œœšŕtó…Š1GQóňXDĹY¤%ćKţƢŰLâŤo3EţSŐŘ`(†“´ uů;L…+¸ýԜ(qNT\ŤĺŽRW œfeN¨8§BçWdî(u%ŕ$-C'§V̉1cmnFČbŹ-Ĺ6~ŽƒQĘuw˜ŘNjKÁEęń‘řxqB>LP¤âňsˆiÉä)Ns; %ĺßseLâăĹIš —†_0€JIňŸ”‹ąb‘ďx$rŃjY*JËR;Éu rçkD,Ho„X#bÉ7ֈXňm9KQŹÔĎrâő§ąČĘŽ{ľ`NuŽךAˆ†<…Üä“EˇR䀊S偞LvÄۛ•“´ uů;L…+¸ýԜ(qNT\ŤĺŽRW œfeN¨8§BçWdî(u%ŕ$-C'§V̉gĚX;š˛k{cŁĆ ˝\ŠKČĎ!Ś%˙‘¤8Íí,l<–”ϕq<2‰'ĺ‚T\~Á*e<&ÉR.FÄ"ˆEžă‘ČĽe,-I–ÚIŽÓˆX;_#bAz#ÄKžąFĒŹąĐ>ŒˆEzPvÝŤpŞs%¸Ö B4ä)ä. Ÿ,ş•"Tœ*ô(`˛‹đŕJtćJ€#ĐĚŚĆDEÍ#bag‘–˜/ܢh…i0&Úf§Í"œĐ‡x{łr’–Ął.‡ŠpˇŸš%ŽÂ‰ŠkľÜQę*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9QŕŒkW3BcmmLâ`Ô8#báA — Rq ů9Ä´ä?r€§š…Ç’ňďš2ŽG&ńńâ¤\ŠKĂ/@ĽŒÇ$ůOĘňXąČw<š´ŒĽ%ÉR;Éu rçkD,Ho„X#bÉ7ֈXň5"Úǝ’–ąHĘŽ{ľ`NuŽךAˆ†<…Üä“EˇR䀊S偞LvQqEćŽRWNŇ2trjŜ$Ŕ3֎f„,Ć.,cň{řbƒ‰}ź8&ńIt>/Nȇ Ęŕ‚T\B~1YŸ“Ű9@ŠÓÜÎÂĆcIů÷\Ç#“řxqR.HĹĽá  RĆc’ü'ĺbD,‚Xä;“r)ŰŇaŠä:ˆšó5"¤7BŹąäkD,ůNjˆןFÄ"?(ťîՂ 8Őš\k!ňrOÝJ‘*N•z0ŮExđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłHKĚnQ´Â4[°J#bş.‡ŠpˇŸš%ŽÂ‰ŠkľÜQę*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9I€3fŹ]ÍYŒ]8Ćä'öđĹűxqLâ“8č|$>^œ”ÁЏ„üb˛>'ˇ1r€§š…Ç’ňďš2ŽG&ńńâ¤\ŠKĂ/@ĽŒÇ$ůOĘňXąČwYt+E¨8Uč9PŔdáÁ#”<č̕G +˜/L‰8Šš/FÄ"Â(Î"-1_¸EŃ ÓlÁ*ˆęşüŚÂÜ~jN”8 '*ŽŐrGŠŤNł2'TSĄó‰Š+2w”şp’–Ą“S+ćɸ3ÖŽf„,Ć. cňóyřbƒ‰}ź8&ńIt>/Nȇ Ęŕ‚T\B~1YŸ“Ű9@ŠÓÜÎÂĆcIů÷\Çc-‚˛,yœ” Rqiř¨”ń˜$˙Iš‹ 9đŃËĽPK[?Kí$×iD,ȝŻą ˝bˆ%ßX#bÉ?ֈXFźţ4"ůAŮuŻLŔŠÎ•ŕZ3ѐ§ť€|˛čVŠPqŞ<Đs €É.ƒG(yЙ+Ž@W0_˜q5_ŒˆE„QœEZbžp‹˘ŚŮ‚U Ôuů;L…+¸ýԜ(qNT\ŤĺŽRW œfeN¨8§BçWdî(u%ŕ$-C'§VĚ ’q7fŹÍYŒľż1ůů<|ąÁÄ>^“ř$:‰'äĂepA*.!?‡˜ŹĎÉmŒ ,í´,y܅*b‰^ĽůýÔđ1݌žN }ößŮњ}˜Ů_ŽXü>•rœ ą‚”űx$q>.FÄ"ˆE|ôr)ÔŇÖĎR;Éu rçkD,Ho„X#bÉ7ֈXň5"…Ż?ˆE~PvÝŤpŞs%¸Ö B4ä)ä. Ÿ,şEĘŕ,.”ł ^L|f `ÔfD,âŕL˜€S•#bag‘y Ÿł0-ç-bÂ3˜ą@]—żĂT¸‚ŰO͉GáDĹľZî(u•ŔiV愊#p*t>QqEćŽRWNŇ2trjŜ =wcĆÚьĹX{“ŸČĂLěăĹ1‰Oâ ó‘řxqB>LP¤âňsˆÉúœÜĆȁf}ő:X`Žp"i;­ŕŞ!öśĹšŰą¸ MÄâ?”ořëíwúĆÝöűˆyyxĎKűqçUs]÷áłSřäˇĎář`ÍëӀ˜ĹˆX4p1"A,r࣋‹jç`iŤdŠä:ˆšó5"¤7BŹąäkD,ůNjˆןFÄ"?(ťîՂ 8Őš\k!ňrOÝRćŔď…ăD[î–ĺŢťYą˘h÷>0PŻű3†ĆɅ/ˆI7_­ äAgŽ8]Á|ajLđ pŞň`D,"Œâ,’ ôs–ŚĺźEű,ËbFÄu]ţSá n?5'J…×jšŁÔU§Y™*ŽŔŠĐůDĹ™;J] 8IËĐÉŠs‚ô܍kW3BcíkL~"_l0ąÇ$>‰ƒÎGâăĹ ů0A@\ŠKČĎ!&ësr#šőůu°>úÚ¸dy7tٙáüĆO7-,¸’Č…*bąűů§n[€[6÷† ˙úČyÜłc´QÁë{đŚŤç6ükuâCݜßťűŒÝ•†˜ĹˆX4p1"A,r࣋‹jç`iŤdŠä:ˆšó-RÄňsżwyćTÖQľĐ?§ kVöă†+.Âoۈľ+úSŐŠ´œc‹ą MŕŽýGěřcŸ}Ÿ26K˝­kD,ůNjˆןFÄ"?(ťîՂ 8Őš\k!ňrOÝRćŔ}÷Ľ¸ôâŢâŸ˙ý4žŘ:jßşU|¸ŤË°,]\ĹoţüĘXüďţé‹8ufĆ´XĄŞÓÍA+(yЙ+Ž@W0_˜q5_ŒˆE„QœEä~ÎRŔ´œˇižd1#bş.‡ŠpˇŸš%ŽÂ‰Š‹TöŠO>Ž=;N‡ŽÝůŽKńŞ;6(ëžÄď˙⽈Ú/˙Ám˜ż°ˇĺÄçNŕo>ń=­ťˇűă×Ĺę*3'e÷“cƒv_}áÂ}ŐŮӁ÷˙ţëôĎ'*NןÓUWNŇ2trjŜ =wcĆÚٌĹX{“ŸČC>#báA — Rq ů9Äd}Nncä@ěŽŐü?h7VłşUŞśˆĹ˙§ŮĎq\­ĆÜ uđšEŐfíâNWCĹ~ ŤjD,ĐŔňXąČOŔ2qaĘ8햶2–ÚIŽÓˆX;ߖZ‰%`Ó3 ç'ÜżmϞĆ?ţçNź÷͗â§č%č¨VôՙsŹY‰%ßX#bÉ?ֈXhڤeD,҃˛ë^-˜€S+őŐ؅!bń×źű;‘˙mo\ˆώb|ܚ׳Â+˜:ńNŹ}XŤU¸ńî}"sb+ţĘ.ä@nFÄ".jž‹Ł8‹$ČýœĽ€i9oĺ/b‰×ČŮć´Y„úoŻÇZŹ.‡ŠpˇŸš%ŽÂ‰Š“p‡Š‡ .aźŽqBĹĽh?u呓íĆđůqíŇWbŢâ9ňşEőŻňŞŤđy§ŤŽœ¤ečäԊ9îÌľŁ!‹ąś4Fő ˝\ŠKČĎ!&ësr#˘cĂýů" íJÖx0g_3BȢĄ˝Ďóȿ璌GżŸ]”+VŠq°5Ďçżfhç‘Qźíúů!ȎĂcΓLWä”gY–€‹ř i< Pîă‘Äú¸‹ 9đŃŅ)ă´[ÚĘXj'šN#bAî|ËąXöšżz^ lœdjî_­6ýĘłŘúěiüĺoߎžîŽ,•ĺÝÖ ą‰ăŹXŐžtąYę-1ֈXňm+KŽŽĘ˘ˆEzPvÝŤpŞsĽžťpD,Ě}sŻWŤÍxŸÇ›;§Šˇ˝aţő‹gQŠTüqaĹkś?Çšľ„Ž; °RÎÁ˝%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0ŠłH‚<ĐĎY ˜–ó–ą´D]ţSá n?5'J…'ŕŢ]u„áYz;űIuYVüGyŽU­.n]ĄmJN¨8bűťŞńUÉ+ÎyĺdÇC‡qâpřž˙˘ő BB–Vč§zđúŞZĎˇŽœPqşćŽşp’–Ą“S+ćz¸3ÖŽV1c…/6˜ŘNjcŸÄĄ,—ť“…”ÁЏ„üb˛>'ˇ1r€I˘j ą…^Ťą€@ć]‰ĽqČőxďOŔkŢj-nŮ;ŽŒáoď=SƒS›ŹáÁ˝ƒřż÷„'g‚ü[!œäDă˘óĆ]!’r|˘ĺë-ë!yAţCMŻ9îŰußŢ~Ö=ćüŞĄRu~MůuC€/ ´Iʅł’ żĎšâŢĺúŽ' ‰Ö“d<Ś8Ńç?“űŁ>iţĹI|˜Ä—Š‹řäV]\˜2NŤeЈĽv’ë5"äΡŐD,ďźëĽ¸ăUW6ö'§ŚqâÔ xäYÜ˙đîć\´:áźîîű^Ŕ_ą×_yRYÎm5"–|cˆ%˙X#bŃdFÄ"=(ťîՂ 8•]ĚÔWcڈĹ_‘…ŠW7}Ďۖŕ}ň(f\˝Jó5Aî=bM6źÎw !ý™žŸĄDyŕßă‰ÝŒłgIt8‚űPéQńL‰8Šš/FÄ"Â(Î" ň@?g)`ZÎ[FÄŇuů;L…+¸ýԜ(qNTľ?SrB’2eĺŽk䤣˙ʲĂů Zٟx} ˛Ě9ĄâtÍ;]u%ŕ$-C'']uéäÜkc3Bc„…/6˜ŘNjcŸÄĄ,—ť“…”ÁЏ„üb˛>'ˇ1r@gš˙97…ÚĚ´ý7ăzÜŐC|Fü_ˆ˝pb GĎMÚâ*Ž@ÂůĎůÍ١ŞŽř˘ůŤ3Ż Ć°ÔůŘÇŹúŽŽń;7iœ#Fq≠”éA™ű°a~\*ÚyŘ&,ńŘF]Ń9č?Üd‚;&Ć%şâËíĂJĹóľ”ÇĽńĐ3Đ,ĐŚ¨`'^g¸MüqÎĺ2^żĂâśżąéóp뉈ň8Ńç?“űŁ>F,7rÄ‡I|ЏˆOnĺđŃŅ)ăZĆXj'šFĂÜůśâJ,+–-Ŕ5WŹ‹óëŽĹýíÂŻţĎĄV˙|sWhéÂżľ/%çśś”ˆ%‹ľčř7"–ücˆE“‹ô ěşW &ŕTv1S_]˜"–únó?™]´¤ wÜ6˙uď }{ÄʎÖědN}ţŠœďüăgFpZˇćNę÷~A|řĎÝoÜż5_ü‘Kó˙­§86Ô'Ě+ŰăËěŁ:#b‰ ľÍ1Ž@WQœEä~ÎRŔ´œˇŠą„kon0‘ńąÂd8Ś(0"bűŠ9Qâ(œ¨8jjŕ¤,#°Ń š“Ď3'PŐŘ(ŞŸdó)j™sBĹéšwşęJŔIZ†NNşęŇÉ ůp7fŹÍYŒľ˝…/6˜ŘNjcŸÄĄ,—ť“…”ÁЏ„üb˛>'ˇ1r@çO\€'6°*…ű(ÎY•Ĺ˙W$dqV^ŠTź•B˘ˇŹŞ'nąËßÍóńęËć†âţćţsxňŔ6-íWĎĹűßţž öŸÄŸÜsÖ+ƒ5óŢYaxŮŚ^źdm7Ö,ětąÎwvƒă5<=‰mG&đčóă˜bő6!$Tq„$ż÷Ö%Xľ°ů‘09Íđ˙tĚĹ-[Áޜ‹+WucńÜ*&lßéá<ąßŮ3Šá „Ë u˛˙ŕŇ&´iY'^}i.]х…sŞn/Lă=#¸o×`CÄɆ[bý!ăK7ĎÁÇîXBězqż˙•Ӎ:űĂw.ÁꅝĄ6ýČßżčćbio˛űöę5^›ߊĄ<úÂîŰ=ŠÁ xÄŤ8ÄĹ)żć˙{Ýş.Ü~é\|‘—Ł‘ †NMâ[;GđŘţ17âwŢş—Ż ż/ő7żt ĎŸ†Uk–ŸÇůˆ>˙™Üő1bš‘ƒ$>LâKĹE|r+‡..L×2ĆR;É 4"äΡe_'4c~Œěmî;Ÿ‘Î{Ć;çăś[.ǝŻy žú­§ţ<śý”´Č3ăřÚý/ŕ‘gŽa˙‘ó´?誕 ÍďÁĹëâ•7ŽÂˇŽGwWUXĆ}ÂŻýé÷˝ż­Żťu~˙çnŌý™řĺ{ŸĂ}o?Äčř”[öK.]†ˇÜž 7^ľźYP¤ŸţřÓOŕ ßŘ:öĄw^…˝ăŞ0Џűâˇ÷á>őxČőŞVăé•ČjŽ@čűOĹößö}§qúÜFĆŚĐ×ӁŐőăʋ—ŕ57­Áu—‹ECC¸ă'˙#Äyăęůřě˝ cÓřě×÷ŕž÷ăȉaLM×đ7żů\w§<Ĺx2"–ücˆE“‹ô ěşW &ŕTv1S_]Ř"š Ma^ó^íŽŰâÉm#8y:ÁŤ‚|Lô'î˙۝ßŮÉpÓľsqŐĽ˝XľÂžOśďAűä!ű^ö}źsďfÓÓŢ=ŹsŸX°|üc+°ryW¨ä/ÝsßřΠw/¨gýšNüĘĎŹaˇíĹ_ýă)—]ó7( }˝Ŕ˙ţÄÚŘB ůé“Řś{Ü×ɈWąDĐÚć‚G ŤŔ(Î" ň@?g)`ZÎ[FÄŇuů;L…+¸ýԜ(qNT\‚܉ŒZ7.°ýľĎîÂc÷ aŢüž+pý+Öb|t }k?žÝvgFÁfć/îĹĆËăŚW­Ç˘‹ćÚ?eßg=őŕaěyćN˝8„éŠĚéďĆşK—ŕeŻŮˆEËç€bŃş†ěűÁ]˝ˆC{ĎâÜÉaŒ Oşžžţ.,^Տőöýî–ë–ŁwNü5AŰ<„ű>żSX×çţ⻍í%+űńî˙ţrî؝œœĆž'ěűř'pöؐ˥b¸öŘ–Ř÷™k/[‚Í×­Dľł U?ÁďŤg9ŒŰOŕœ]ތÝW˝v_­Ř˛WÝśó—ŠűŞĆŽ–ůDŠ+'i:9éŞK''äĂݘąv5#d1ÖÖžxgb/ŽI|‡˛\îN>LP¤âňsˆÉúœÜĆČRœłá Oœ‹^ćˆX*ŢÚ'Ţ*"Îűşgěorf¸ĺTœ8ű,ëžöƉőaeů+rxŻÓ‰3a3Ó¸nm~ňŐKÜ×™1§.…'ţĘU]řŕ+ş"Ѝ-™[ľ˙zqýú^źó†>óČy<ň‚ýpŹRićŏřŤĚ­ęŹrbżv]/~ú5‹ŃŐŃ$ŇQľ0§ť‚u‹;ńÚ+úđ÷žĂžÓÍOŤĹ8˙Uíżź|nť4|qßŃeaó˛.÷ďe›zđ‡w…Ô‚esÝ^ş4jńÁQušmˇé:ť?>zÇtÚÔéˇiý’NźáĘ9řÓožĹžăÓ ŃWŻWžł<śsĎősŻ]„kÖö„ę˜×ká%ö1çďž]ĂřëűNsĹ9.?G ĺŹÎă+kWă˙>ƒ>˙™Üő1bš‘ƒä9'ňĽâ">š•ĂGőšąeŒĽv’ŰaD,ȝoˊXŤŮçę™áxńSgěšxő-—……,ś ŽĚŕüĐć÷wNJűˇŻ>‹żúĚ3˜œ ‹T§íϏc§GÜżď=qý™­řÄĎނ›Ž^ŠEÚę=~áîÇ3ťĂbš“gĆđÍşˇżt ~ë#7ŁŻ;ĺ­Zç€űNăwţúa´ćEmČ~Ŕş{˙Y÷ď ß܋Ť/^‚ßúđÍXťź_\`„óčř4>ú÷aŰŢÓPš˘˝FĒŹąd1÷BÓß4"ŮAĘuO&LŔŠěbŚź3"…}ëţcxű››‚çó˝o[‚OţÝqçćˆ68GźUSk¸|K~ä]K0wN\tşxa‡űwíUsđÖ7,ÄçżrÖ´ đJŁmťGcB–Íëşq›X÷׍ú.ŢżžŘźĄÇ}^ŕÜťłŔ˝÷Ćő=ą[ÚŠi†ÝűFÝ2k áW“ç Sc"Ž˘ć‹ąˆ0ô{:Učç,LËyˈXZ˘.‡ŠpˇŸš%ŽÂ‰ŠK;‘QëR–!ń|q˙ň˙=Ąóă!ߙ#îߓß=ŒWžůbźü› ătřůłřҧˇbh \Îŕšqlřv=~wýČK°zÝPůN۟c|ůY<ýŔAűyź%NŮÎßţ§đýťŸĹKď،^ť1U?E‚qí{ěű>ł­! Š›óÔ{ęě†ěżýێăŃŻîÁ-oťÜ´ČrwÜžŸýÎ?oĹH¤Ď‡ížŰ÷ŘźđäQźň‡^‚ĺk–¨h6ˇKťZ漎œ¤eč䤍.œwcĆÚŮ*0fŹM-|ńÎÄ>^“ř$ešÜ,|˜   .HĹ%äç“ő9š‘¤8gŁţ: Ë•ł˛Š˙J Şűo§ťâJĹœJ+ëŕęqnç8ëé`řąW,ŠˆXŕŽăZÍĐ8‚–;ŽěĂĎ˝n1WÄľš6ć'n[ˆˇ]7×-Ă[ý¤ć­,ĂÔ8˘Ő -|äľaKÔć÷Vń w,¢>xĺÁ/Ëą8‘ßś &b‰Úe+{ń“Ż^品řţ/çÜ˙ŐąÉLŹoqÎZťM{}XÄkS_żzçb,îłí€˙ú#GÄŇUeřÍť–ÄD,QťýňšxťÝß\žNż×ęý$ină˙>ƒ>˙™Üő1bš‘ƒä9'ňĽâ">š•ĂGőšąeŒĽv’ŰaD,ȝoK‰X’ĆN`q?OlZu%A›ą¸ýúŸ~ţOOy"ËQ˘Ú_LUz=Ţ1ŤŠ3öĂŹŸű÷á_ž˛›_w‡}ţŻŘŽŐćŸŐ1Ÿř‹‡=‹Łt­vŰEőúö[•.÷ Żű=ěŠ]fjń[óml_řĎ.WŘGóbxgľš,ö€ýŔî'÷۞ˆĹî ‡ˇe÷Mł-˝Ţžűó śí;űÍoŘřÁxaV‡ß†ć:űńO_ŮéĆYîĘvvY˝žĎá4Ř0"–ücˆE“‹ô ĺş'&ŕTv1S^ ÁN™Ŕ“[τŽm^ߋ›Ż›cßs‰_;+¤Áš"–ן˘?ýŁqE,Qs0?öŢĽ¸ëŽůŢ˝qÍť×Ţś3ţ™ľq˝} ŕÜgú÷žőú.޲ôőV°ryGëÝwo^Ç>ťoăÓnťýքţ ľ3"–0ZŰ\ătú=*ôs–ŚĺźEą$›Ý)ŒÓfĆŰfâíâX‹Őĺď0ŽŕöSs˘ÄQ8Qq)s3B]¤p{ŁŻ#.ţŻLvă3ąÍů š˙î˝řΗ÷ Ű˙â|Ö)g@\ÎĚ4ĂW˙i+ŽTó…'bů÷żx OŢ€+b‰ÚÔÄ ž÷Ü÷…]ĄňćtőƒjÝ=¸ş=ýýřŻż{2&báŮřČîű—­xüë{…š;yp÷üí1KМgßűĚVœ>ĘďŤVťZ漎œ¤eč䤍.œ?wcĆÚьĹX[Zř❉}ź8&ńIĘrš;Yř0A@\ŠKČĎ!&ësr#HqA/bq—vÄ,Îk*ďő@Îżö8Ž`…g–‹žÚ,ËŻˆ÷€î×,@wgźL÷A™ýP͢\ś˘ ďźq~ě×\Η^'ÎOâŘš Lsn îzI?nÚĐÝxżL^żüˇW,vW*ń˜Š­ˇŤ‚wżtžűĐŻ!`'bq^%tăĆ^Pěć-ópĹžŕ…ŐËž~ž(§ćŠMܕk8°żm šMŢ&O SóĹ?ďżyžűş'ŠýŕM‹ą2đzŁ&י†đGôľEÚó}ţ3š?ęcÄr#Ď9â”\Ä'ˇrřčâ˘>7JýEKí$7ŔˆX;ßÖठ>súDü ýáŮ×ţlúÔśáއy–Ş#ZérE¨‹OÝżŠw̸ÔXń/OťŻ ŠóúîŁĎšŤš8–žŢ9Ř´~/rŘ9=]ńDOĐňÔŽ“řôw ‘0ůOœĹo˙ŐC˜rˆsĹ7Ý>ď 6Ź]†kŻÜ€-ôűŞł´ţî_? çsçGńßŢç•í‹{¸ŁQŃ^#bÉ?ֈX4˜SŻąHŞŽ{2cNe3ĺ՘ą­ŻŻŠ˙üڑX˝őÎŘۇ†0…ţůďÝ+^şšo{ă˘Ř}˛ó:ź“§'pü$˙>ůÎ×,Äő×ô6~đńüŒŒ†Ĺ°}˝U,ż¨#t/í[6oŕßď:+ľx÷}^[œ[\ź!ţcˆgvxŻŮmü8H0_˜q5_ŒˆE„ĄÝÓI1ž“~ÎRŔ´œˇŒˆĽ%ęňw˜ WpűŠ9Qâ(œ¨¸”š‹YŠş°Ž{žźçĎy‚Ššö‡äZűžŤˇŻ›[ŢCß|÷ž•?=UĂ~z+Ś&ůŤŠmzş†oÚ÷ÇRžţö_ك#ϟáćĚíĹćKÖ`Ăć•č쌯4şíűqp÷éFyN{VŽ^ęţ‰Źî_˛laˆÇĄ=§ńđÝĎƞ;?h\şl–­X„ŽŽ¸¸őéo=çý{ů`¤ÓWŽĐĹyĺ’Ęfěžzč?ˇI1e]-ó‰RWNŇ2trŇU—NNȟť1cíjćŐBĆÚیˆ…^.HĹ%äç“ő9š‘¤8Q;OÂŹú2Â5ć~šĹDńÝ×yx+°j ź#›w7ł|'’8géóŘsƒ8=8…ŽÎŞűĽ‘󀍝ZÁ_ľ(Vë÷vĂg<†˙[_Wošqîş!|đŽçáÉýcŽčĽţ+2^Ă7/ďĹţ“ăřçďÇŢcÎRÇ5\ť~.~ü5Ť1ż/üńqÝş^ôvœĹŘLÍćUqŰĺźRčí7̋•ëÔôő§Ná›ŰÎÚ\§ąraŢ~ÓRܰi͍‹>š ^ż×¸>Ż^?{˜x›śŹčĹ 'Ćđ÷ǧMvĚőćâ'_ˇ ć„Űtƒý@˛ˇó ĆŚ˝/ň—őWđş+⿡orţíűÇńđŢ{ŰŽge>đĘĺXť¤]œ>đţ}”ö|DŸ˙Lîú(7ݜƒiç\6.â“[9|tqQŸĽţ"Ľv’`D,ȝo;ˆXœ:|â@ěp˙œ,˜géTó~­ľűů3řÇ/îňEÍsöeöCˇ}č ¸âŇŐîťś||/ţüďîÁ™sÞ°ĽÚcŒLâw˙ňa|á˙ť sz;őňlbŇye]7~řŻÂ‡Ţwz{źĎűǞy˙Ł/```ÔşŤ”XřçŻěÂ{Ţx‰Í— ž,(7ŸůŻÝŤy"”\˛i>ńó?ˆMë–5p÷=¸żţGŸwż8tWmąűjűsg°÷ŕ9lYˇPZďŔůQ7畎NźôÚ͸沾čéîÄůĄQ,œßKâlD,ůÇ‹>ŁToD,b\&LŔŠěbŚź3"Žn˝=8vb?qˇÜŘ\’ß‹źăŽEř‡;%}­l¨ żăťíËźsI,ěÁGĎŕ _9bŽL{uôTđŚ;VŕÎ׆_řö;ăŠíCîXÎç׎݃xéő CgE•ť÷řÎýáꕝv[ř?lšxSîűţyç­ôŮQŠaÝžĽyVľĚŚĆDEÍ#bah÷tRŒď¤Ÿł0-筄"âřHcL˛­ŸÉpLQ`D,ÄöSs˘ÄQ8Qqr5j]˛`tĘ~ ÜŐՁ˙‰7ă寸Ňý|œąŸ{~űOâŸ˙é›Ţę݁úžóĺ=řŃ_ş9TŢSß?„ógFceŻXšďzďíŘźe ڧg°őé}řÂgżƒĄ1¨( MbëCÇ+• ŢţîŰđú7ߌŞ˙Ăϑá1üĺŸ˙;žÝy „ÝöĐ!Ź˝Ěť¸âúuxýmŻtˇ˙7>…űĂ?ů诞W^ĺ˝6ilz {Îîtˇ'ÇgÜ× E;ďeݏoĎk0oÁ\wtt_˙ʃřÖÝ…pÝý,Ö]yŞţódűďŮGařlźŻ–­XŒˇźëvlźx &ížÚľuîţÂw0r~LÚOeŒ]-ó‰RWNŇ2trŇU—NNȟť1cílFČbŹM-ţ‰­źŘdŸÄĄ,—ť“…”ÁЏ„üb˛>'ˇ1r€—C;›xzÇÜCâ__>ţÜyüő7ŘĆŹąš‹s3ŕü*ůÖ-}XĐWá˙曇]]43:Éđoß?ćŠN^yyóÜ⚸zUž:4!]áäÔ ýĺÜżż€ĆŰěp=7„ą‰ƒřř;6…°Î*'ë—t`×qűá űk2ŕęľ]˘öŻß{_zü”űëm§Ě}ÇĆđG_>ˆŸťs n˝tdVŤ‰{<, âăNžŸÄÇ?÷‚+6ńĚÂ#ű†0jˇéwŢoÓĆĽŘń˘óŔÓű…Üí—öĹ^ůäÔô?żřž90ěŻÜcáń燰űčţôă˘ůń/ ëŻ`r8[œňҜčóŸÉýQ#–9˜vÎeă">š•ĂGőšQę/ŇXj'šFĂÜůś‹ˆĺÉ'đĺoďľwÂçá_˛ŃűŹňí˙}i—}–ď‰XÖ­ZŒżúƒ˙†9ţ/Ýş:;ěkWăâËńŸýkL֝Uér_3t÷w^Ŕ{îźDŢVŤŠˇžń|ôÇî€űš23ćÖyÓK6áO~ó‡đăżřwpöißzč Ţţş‹‘›%ěŢwżń*ÜpÓ­8xä,>…#ÇĎá÷~éXśxžÝ$ť=lĆ]‰ĺö[ŻpŰőČSĎů‘–ťŇĚŢžEZŻ…žŢ^üďß|?nźfc˜îĎŠaČŁ“~píB9ObˆEŸQŞ7"1.&ŕTv1S^ ´îŽ÷÷?żú"n¸f‘ý]S rĂ5ýxäÉ!ěÚ;ĺzEî}św_őŇkçbţźđcÎ'ˇžĂ§ţeheÔŃq†Ďéć÷wŕ֗6E4‹vâĘKúđ̎!ˇŢ­;ăB–‹7ôâťÂůI‚łb疍s…Ôślěs1–/dYżśŐđôȋc8sn Őj—÷źŔin䑉ڭÂDEÍ#bah÷tRŒď¤Ÿł0-ç­ÖąëäÔĎd8Ś(0"bűŁéNŁp˘â4ä.jÔşdÁ*čOüÔ]¸őĺWbھߚžž´ŸYváőoź“řěgî aîŔéă#Xź|NŁěm‰•šdÉ<|üw~ýóšŻo˝ýu×cÓćUřÚś)Ű˙×Ů]Ňĺ.ŒžŽá苧qüčiŹß´wţŔ­˜ąyŽL8ŃčÓ‡wźçvüţo~:TΙ#Ţ}ÓO3ľŒO7ËçT:>ăů'fš¸g?ŠŃÁ‰ô%7^ŠýЎ¸ĺNĚL¸˙öôvťÂ–Ąa<ň@s•áqyö”+fŠ×ť÷Ńx_-˛ďwá7sűű¸—ß~˝ÝŢUřߟŕ÷UYcWË|˘Ô•€“´ œtŐĽ“ŠĺnĚX;š˛kOcŇݸ‘Љ9”ĺrw˛đa‚€2¸ —ŸCLÖçä6FârhgĎBOüUqçG§ńWß8ŒéZ•Şó€ĎjźÚČ7Źż~ç?;á˝ţ xu‘űÚ ŕ›[O‡„,Ž]ľŚOuš0Aç~kŰYWÄRŠtŔ_„Ć]yűáQ=;ŽU‹Âż&[ĐWqî<ŔlΊ(Wʊ?Ôs„$w?yÚk—ózżc˜}ƒóO÷ĂËśĚw—~äYÚď2ƒö­g\‹ĺÔď~Őe˙gÍ`ëÁ93ŽŐ‹ămň–yv*Öp5çtí;gěřJľÓYîťi‡ĆgÜUZ>öŚľq"˛ń–â|DŸ˙LîúąÜČÁ´s.ńÉ­>ş¸¨ĎR‘ĆR;É 0"äÎwś‰XŽ‹'›Â†ŠéNžĹw;‚/~sfĐkÔŰŢx]śăRzú¸ýaž-úÉ~ ćtπěŚG˝/•:ćaăęŐxënŔçď~´ Žtă~ť>gő™9Ÿ?ńžŰí§i'Ŕ&ŽĄ!ŚéčÇ՗lŔM×nÂcO?čŔă;Nć'dI‘›Uk6bŐćeŔMƒ3öőÄĐ.űßŔűĂ; 3ş|łýšn¸ŚŽ×z˙k=ËÔ Ý˙ĂvˆýE #4ŞMËC‘ôƒ‹hĘy‚{aŠXĘű”5"1.&ŕTv1S^ ľŽŽ**ÎçÂů|íŰÇńś;W†üď}ŰRüîŸpEľĹ[Ńý×ĐžäĘř}ňÝßxąńz@o5U˙łÂ>ôíď Yťâ’>wU°}÷°űCŠJŕţtóĆ>÷óťćŻČ˛eS_(~Çîó¸ň˛ůîöźţ\´Ź'OMťŤšnáźVč郍{}—VňXB{…Î1.őy+BRGčç,LËyˈXZ˘.‡Špˇ?šîÔ8 '*NCîdF­KÇł•+—ŕeˇ\ŽŁCűq~âŒcaQĎRÜńƛđĺ/=ˆąŃ°˜ăŔžÓސĹ){ld'ĹĘ}ë;^…î9U>˙œ':ą˙ëUëVăś×\‡oăq>WŸpOw7.šň*ĺňf;ŽĹŠŃăNVíű¸ ‹Żn=:4Ń见‰łîŸłËX|%îăĂG1}ć\˜‡ÓÎíńW żń-/ÇŮą38:|S5Uű~˙˘žĺxĺko Y;b÷ŐÚ+/rˇÇíž:{,ŢWwžíUčěŤâšťŻŚźžšß=+׏Ć-ŻžßűVźŻĘťZ漎œ¤eč䤍.œP,wcĆÚՌĹXۛňB‘%Œc ?â7’ݸOȇ Ęŕ‚T\B~1YŸ“Ű9@ŠËĄM3áŠXŹŞˇ"Œ'Œą°Ůß!˜Œ Yz;ź‡yŢâ%5ŹZ_‰äńçÁœ˜şĹŻßYnůÜř´ű ŁËVĹ@F´Q› ŁžžtE,•‚šMĺؚɘĽŻÓrE9–ĺ YÖ,ގéÁ=çíň:}ŃQŐ­şâŹtcÇ<ňü°+jŠȧ=Ńç?“űŁ>F,7r0íœËĆE|r+‡..ęsŁÔ_¤ąÔNrŒˆšó+ą|ákŰđ…Ż>Ĺw:_ UÂbŠ;oż/˝z)ب'dyţóJ8+ô!ă,|ËőkÁFöÁ]aÄĺc˙MłwÇpŰ͗†…,věîÎ+?Ť6ŻżČţüľ֍ ;Ś†ě˜çqë ‡…,vFöż8Š\,enŘÄI—ŻóZ%ŤŇăŽHĂFbxxÇNŕÔŮQ91„§vÄOžtĹ+AŤĄ“TĎk_~9ؐÝ˙Ó͇ˆŞ!aD,ůÇKąfD,b\&LŔŠěbŚź3"N„é¨Ö€ÁđűNá֛cْć}î⅝¸ăŐ q÷=§15SVä;†ÚĚ ÷ľ=ŸřďW ‰-]ŇŮHęČč ž?0‚‹ŤŽ8źćĎŤb`Đť>¸xcSČrâÔ8žÚzś!dqýzpâÄ ËrӆŢX}[w y"fKtŻĐš ĆĽ>oEHęČýœĽ€i9oKKÔĺď0ŽŕöGӝGáDĹiȝ̨uQËÚŐ×lÄą‘œ8Ŕ1œ?é>[˝üňőxň‰=Ą˜s'Ćĺ>_ŃŇyÎyŐuđÂŔnűôtƒŔ™™Sލ庡p…,A’3öłĎö Űž7ě˛˙z:z0:=ŠĂ/bđÜ8FĆíÇÜú÷>ů"§(âgÄ99yx †ý_˙’Ř虦hŕ8żŻ.˝vvŸőűĘ'prô†§FpŐő[řB÷Â睎şp’–Ą““ŽştrBąÜkg3BcmmĘ –0Ž)üˆßLHvă>!&(ƒ Rq ů9Äd}Nncä).‡v6ńô ň  ŒN{b‹j§ý0ŤĂYĹsÔf0§ÓBOgYm^oާ“ÓpE,_óӜXː螎¨{ý‘cGÎNşmj´Í)ŻVĂLÍ~pWcxńěDLČÂČ^ť&gŕŠXÜŐSœ69ż°ƒ'ŚáśÉ-Ďn™ŰtwÄű~˙Š o…żLçńŁĺţJ›ŹáÄŔ$V,솒rŠó}ţ3š?ęcÄr#ÓΚl\Ä'ˇrřčâ˘>7JýEKí$7ŔˆX;ßYű:!÷sɊCŐ_eĽéťüâ•ř՟ý°ÉcÇOĹÄ-‡^ë "– ŐĆąaEä‹(›îř$ĂšÁq,š˙ÍĽd˙­ZžČ[‰%ëÚĚV-‹Çž9? í–%73“îßŮÓ'đőďďÇcۏăů#8y6ţ^pŤÂů쳪 Ř’>ű‹˝‰Ŕ/ᜍˆ%˙X#b)֌ˆEŒË„ 8•]̔WcFĢŔɚmVIq^'đϟ?Œ_üéÍ!̡-ƏœĹĸd5.çŐž÷ęëłď“ťłß'÷Ďń“şż.ˇůmÝ9˛8śq]žÜ:ŒU+ş0wNósmßóCxţ@ř °MëzńŔĂç˘Ř´>źzËđČ4ž?8n÷AgsUŐČŻÚCfD,a´śš ĆĽ>oEHęČýœĽ€i9oKKÔĺď0ŽŕöGӝGáDĹéʝŔ¨uXFÔ-ą4cΌŔ˛ĺń×´ 7ďeG㟣óçĎÁXĺ\HÄR/{|zsőAĹ×yö;:5Œűďŕł§ą÷éc8yxgOŒ`zj*ł"ĺńśyőÖmlt“ăň;)61Ň색áxyóěžŔšˆĽÎctj ö‘ř–:ďtՕ€“´ œtŐĽ“Ęí'cĆÚ͌ĹXۚň˘‡%Œc ?â7’ݸOȇ Ęŕ‚T\B~1YŸ“Ű9@ŠËĄĘ:IVAĹyE#ЍÖ_żăŒ zŽL:ëďć–\é8Ş~ËŞy<1ť"LĹ{}çë §(wŐËŰéŹĆ1ăS5ŻmVŐ ’ĺŠcœ/ ŹĘ Ć&3śO•§ú˛ÍîJ7Îż˛ęÖ-ú×íyÖ]ĺ…3<á‰cŕ dź™ÎĘ5Ž0Çé?çC+ §lĽ8Ńç?“űŁ>F,7r0íœËĆE|r+‡..ęsŁÔ_¤ąÔNrŒˆšóľ"Çě/P•Żňᬊő޷݌ŸţŃץ“ $Ƨœ/ŽÂ=0ˇŻ˜>/,oNW`ŮćÝ Ć'řŃęĽ÷v;âÍ)NŹg}]qŃĘä”čWč%˜Ď÷ßžţ,ţús[1>}8Y_ŮĆ˙•=Q´Â3kj VŻ‹¤\DťP΄X#b)֌ˆEŒË„ 8•]̔WcFĢŔQfwżišŤs>ťo?~7߸¨áďě°p×KńOŸ;$,Ă̓}’ęÖđcˇÎNËçć|şT°mç ŢqWřnnÓú<ńĚ .Ţśî}aűŒbr˛†Ž.Ďć }îkt—-é ‰^Űj—Íj–}Yń??ˆĽ¨sSČpފÔ‘ú9KÓrŢj]‹Ź~Ćó!Ţ^!N’űRęňw˜ WpűŁéNŁp˘ârČ]¨ź@˛şD‹‹šżË€ÜŹŽ!'çŹÎłâ˙Çz§J-ţ`o_7ÎO4 ‹–0QŻ Ğ?;†Żýă38~`iM8Ƹé =÷Ę33ľFđúŞťˇÂq2~_ľĚźÓUWNŇ2trŇU—NN(ˇŸŒkG3Bcmiʋ–0Ž)üQŸäÊ'äĂepA*.!?‡˜ŹĎÉmŒ ĹĺĐNYIފă-é[XÍ×ŰLMńYüâ?=ëú‡ĚjŠTź*†ĆűEíňœw‘ĎŔˆ&ťcrżŞxtœŻ‰ľ…#>™‘´ĆŻ‚3v'9wisş;üśy_r1WÄRóęą˙úzŇéEąú/ëÜ_ďťý_ÜŽ8§Ţ&§‹&k|OWŐžůł\ü_Ňy Šť22nćM sr~x< bÓžđĂŕ™¸ĂyFş|Ĺb,[žŤ×-ƍŤđţäsŇňDíĹôtóď•ű? Ępl Ó8#îvwwźŻĆFÇ1=3‹Ťo‹úŠWWáóNW] 8IËĐÉIW]:9ĄÜ~2fŹ]ÍYŒ]Pýˆů$Ś*—ťCˆňa‚€2¸ —ŸCLÖçä6Fâ4ˇSĺłdqÜ`˙Á™ťřE˜ŸÁä´ý/đŠç¸óúššű€ŽÖˆqËfŹ1–˜_\}QďažÂ,OđážľĄţę÷˜8¤ţk„óŁ3X˝(ě[˝¸Űó…1üľXœ×,–ż‚§ŢŽ´Ćę‚WŔb5’`Éž c^܈Ý÷ź|.ß…“#Í_á;ď7÷ʲܟ-îďkD,ŠšˆOnĺđŃŅÉă2ž´Kí$“4"äΡD,ýŕëńţźU œ<6;wđTŁ^žíÝ:vlńÂţ_ž N@dƒĂăČl~˝“S3řż˙žÍ°Tœ‡†^ ßôš—ŕ˝ošŻżČűňϡ˝/G&S #bÉ?ֈX­Î„fD,b\&LŔŠěbŚź3".é” 9FF§đš˙<Šž]Ă_ŠXxÓë–all&&d ÚČčth%—‹MćäŠIű_oUŃčK štďɜ•C˝ŐEÝŐ6Ý{^ćrŰşkŻžuI#rÝę^űΛá‐eph/ž˜tžťö 5„,N1›Ö÷býÚ°eŚĆ°}÷pCjD,(x.ˆqş ížNŠńôs–ŚĺźeD,B\‘uů;L…+¸ýŃźŚĆQ8Qq9änţ‚đŤĐŰšő^ýśuÜqËŰłíD,śŤłÝ}¨ąiéÜ8zř ŽÁR.'góČĄř}äź×ţůq1ĺĐŕ(F‡&Ń;7,ܨ}ň˜Zœąőƒ1Ëűţő?ôZ\}ífôőő4ĘU–ŢPăzçôş?ü˜œ ܃Ű× K—/BŐ]Yœ‡ř|Ÿ™°ŸxB–ž~Î]ěž™D÷œ.ngŞů˘„y§ŤŽœ¤eč䤍.œPn?3ÖÎŚgíMcĆfE?b>‰ƒŠĘĺîâ„|˜   .HĹ%äç“ő9š‘¤8ÍíĚäKrÁácß‡8ţÂĘšYşlM?Źj‡ű*˘ŠýoĽŇáţëëěěĂţn˙xŐóU:üŐV,BĹăQf‡ĎÄżXťaă\Tœ7+¸‰Ž‹lźí%ýŘtQ/ä\ŇůÄ úxœša8u>ţڇk×ö5Ä;ž^&Ă%+z0§ťĘ+6Őůˆ>˙™Üő1bš‘ƒiç\6.â“[9|tqQEŠÉN)™ŒĽv’I rçێ+ą4ÍYŘ~˜53 LŢ 6~źIşiÝBtw…+ÎŇÂ>uTXúw;;vůĹŤěϡfůźţ=ufŰ÷œćévÁw?;žqí’ß9˝ń_ˆ=wđ Dś}>1ÉŽçĎ`hĚy ĂÁkáM/لßţŘŰąeĂrűȌ×ç“gŔF퇚çĎ"ľ)†„ąäkD,ČVgB3"1.&ŕTv1S^‹—xĘř+˛Xő{TŤ?1€]{Â_Ý|Ă"ttČÖ8őD)ŒE‹ÇĽĎo–_é ýuÚ_~-˜ßÓ¸ś\ĄfĽ!ŽqřáYv†ůtvVpŮ%}ĄUZśďtW>­ ę T‚Ʋě{~căŹQCóŐBÍfąH+…Í׃ 8Uš4"†vO'ĹřNú9KÓrޚ"–F%œqŰf_}[’űh[ ŠËßa*\Áíć55ŽÂ‰ŠË)w›6-CÔNžÄŁ÷—aŰš“ŁxčžýąŘ ›W„ĘfŕÚł;^ÄÔÄ4—ÓĐůqzáT,fůʍíe+úC?8pcíNÚť5,Ž Vżďiń}dwhOü~ď§?öƒxŮ­W˘ŻˇăÓăœŔɑcŘsl˛ç™ĺŻ„R_ÁäɆb˜ˇżô"÷ÝÚî8WÄŇéŠXœ‡roźv1ţężmÂ˙ů‘řů;Wâ-öƒŔՋşŻö‘-Ż’FÄbůeî8WŰ/éďÄ]×Îłď6jŢ뎜ĽœÝŤŻ>đňĹŽČEĚ%OĽ,×ďw‡ÚŽŁń6˝ţšX8Çţ8­1ˇ=ÎŐdÍŢśěßő˛Ĺ’‚ɇ“Í #bÄ">ş¸¨ĎR?ż¸|ŒĽv’y rçŰV"–Šł`ƒOEţžÚ6˛lâ˜}~Ž+UvUgpë["…ZřżŸŰŽ‘ąŠXuűŸÇ—ď{>vüś[.ľËńŁEVÁŸ˙ż§Ü•M˘öĽ{ŸĂó‡âďżéšľ!žKĆřřśĂxz÷ÉŘńÇśǃOBZ›žż^i`xĘ_‰ĽiÎŤ„\áĘĐn°óŰě÷ş"–‘ăx芐‡KţąFĂěŸ; j5"1.&ŕTv1S^‹GÉCÔ,XM1‹Uu…#νě?á¨ű*ĄşutT0§O˛ ´ż˘ÉÓ;ÎÇ\oyă TŤUW¤âţ¨Ă˙q‡SׯZ†?ű˝Kń'Ÿ¸?óÁľxóK°jyos•÷_ ť÷Žbj*ü™xű+–„öˇíjˆ_ÇůĄć5ÄŚ s°nUXČň̎ÁF ˆ}ifD,´śš ĆĽ>oEHęČýœĽ€i9oÍ"‹ žŘ6#ŕĄyq`ďYüăŸ?†ą‘řănšĺ L×fâ"6:<ďÜ˝Ëéž˙ÜťoslóĽ+¸Žž*ÖŹ‹pţĆsœ •çŘąƒçąăQţ}d79żŻ]|Ń||;N?ƒ=gwŕŔůçplř(ś=śO^^ 'çfdzr&†›ŽMăę.‰aůú.ŒMšBš1űoÜ˙sśŸźo7ţáă˙…üíŻăŤŸzŢł'^<ÓŕŃŮ[ĹĘ5ńžÚf߯ MĆĆÉéCçąď ů=wáóNW] 8IËĐÉIW]:9Ąuúɘąv5#d1Ööýˆů$Ś*—ťCˆňa‚€2¸ —ŸCLÖçä6Fâ4ˇ3Ü4ú%ƒŹĎĹđ'pt}w÷ F&Â7 —­ęĂĎżq–ÍëjńÖŘźŹŹVCÍţsVíüč‹qíş>rńZ憹b‘]\ÔçFП_\ Ć2šëfD,ȝo{ŻÄBŠ3˛?3ŽţÁ[P >-łˇÁG~ç^<˝ë¤+<Â7żůÝ{1ůh[´`îşýRˇpů§Ş…íϝĹG~ď^<šó‡'qčŘţúł[ń‡˙˜íŻŕĺźóűľ7o ťrËEœr+řŮ˙yţöóŰđčścŽ€ĺ“˙ň~ţďw_§ ˛î.ţŤżű„ˇňŒóúÇ/Z€čúî#;pĆůuÝLóWđçΏăWţě ˆ_y”ÖŒˆ%˙X#bAöϝ$ƈĘЧN 8#b‘Cż* Ÿ,ş•"T%PaʊżjJ§ĎLăîoPV náÁGĎa$ňĽÚ%›çâg>¸˖t6€źć‹đođÄ( tâÚŤúńÖ7.ÁÜžŠO ˙Ç LMť÷…WYšîę…M6x§˙š ‡?łcśďlţřäĘK祧'üYű̎ĄX&Ü,&lĽČQÔ|1"†vO'ĹřNú9KÓrŢĘIÄBGiÉśÇĺąëňw˜ W$'Î8LŁp˘ârÎ]ĽgozÓMˆšócśo}y/ţčWîĹçţîiWŘňĽ˙ˇőťßÇ?üéŁ8;‹Yşl^úĘ-vƒŘťďîţ—í8qtcö˝éąCçńEťŽżĂn޲ó—u7ʡďŐ^ńę—ÄpCçĆńoŸ|{Ÿ9î Zíýgž˙ţWcfF>Qď‚óbÇďžç>œ?‹ćÝ4;9Ů÷Ô1<ň}ňš˙ ˇ/ţÚůíîw_ď3=1áÁćësŻ˝e úćô„°Çž?‹o~úŠĐkj6‘ŔSßxÎÝÇÁ'đä=űěr›âÓŃé1źě•ńžrđ÷üő#8dßk;‚–a{ďC‡pď§GMŇW…Ď;]u%ŕ$-C'']uéä„Öé'cĆÚŮ:`ĚX[ôC ć“8˜Ş\î!Nȇ Ęŕ‚T\B~1YŸ“Ű9@ŠÓÜÎpÓč— ˛>4Cœ\ÎRÇ#“ ÷íńą7­ ÁŻ[?Çý;3<Ń‰šűŞžŢŽřX[áŮăΗKéD,Şžą|Œs˙ů‡OáCŻYĂ˝áęyî_ÔÇŚ1Ż7ď&ĹxŒ˜÷KÁŠŰ[[bç‘\ą:ü‹ř5‹ťđďZaóŸÁÄ4ĂâšŢ+”üńQą,#ž#ËX”Ć2bš‘ƒiç\6.â“[9|tqQŸĽ~~q%Ë䮛ą wžFÄÂ;XĂ›úń#ďzţásßkś:ąű…łřŠO|Űí7Öü0vž`6aöîoýüŰ0ˇË~8ŠĐmô÷÷bx¨†­{NăĂż{oŘiyŻü Úżăĺ˜Ű= ~źwŮŚEXłj1 źNČţâlrz ˙Ĺ‘2+xĺ͗ăGĹË8;ÖŰ݁ůóúp~0źęŘŻ}ňűîgŮűîź ýĄkąiÝ2ĚéíĆČXłĄ'Nŕżx7Žżü",]ԇSöĂÂGwŘ÷ěŒVUţşŔ¤fD,ůÇ ˛îh6Őýƒę~'ćʀ3"i1ôËĄňɢ[)r@ĹŠň Îóšę­~ gĹÖáŽŘyĎ}§đŇëbőJĹg‰ż˘‹}j>˙đo‡đ3Ü‚\sEżűwöÜFÇkXź°˝=ńűäťG°o˙¸ËĂš§usďŻăź^čęËçq)<`ÄŽ›šŤÉ8í°oŮąu× ^ţ˛E\üÉÓ8~rĘŽŚË_÷3°JŞą„ŃÚć‚G ŤŔĐîé¤ßI?g)`ZÎ[FÄ"Äąëňw˜ W$'Î8LŁp˘â ČÝđä~đŻÄöíűńÜsqÉŘČv>ŠbvuvŕŁ{;Ćj繜˘6gn/F†Ç°íá#îŸĚœĎŻw˝÷v›kó‡xÎĘ%ˇźę2|ăkâôŠđ* çNŽŕË˙tʜšî˝ëˇŽz?mžd5žÝq0äť˙KŰąűɃX˛zž›“pćŘ0„Ći˙JűžsĎÎđ*'Ďm;ęţšţ͋p×OżÔ™ęĂč.üíŸ!„?´ë¤ű7wAşz;1tvĚ}=SÔ6]ą롏ÄŘô˜[žÓW×˝â2|çžGqöt¸ŻOŕţ˙ďŤz~¸M+rŢéŞ+'i:9éŞK''´`?3ÖŚfVd1Öśýˆů$Ś*—ťCˆňa‚€2¸ —ŸCLÖçä6Fâ4ˇ3Ü4úe‚ŹĎĹ͐ú.÷döƒľ'öâ?=É uDް‚'b9zvsďI°¤_ Ç@]ÄRŕwďŽóxtßyPlűĄa|o×95H=ѸR˜ű+9˙sö_Gš+Í86ݎŠĽýW$}öĄ“ŘwlŠx˛lcQˈĺFŚsٸˆOnĺđŃĹE}n”úůŕ`,“ťnFĂÜů‹Ä5q?ńţŰqű­—7:ç|W°RńżČ‚ˇbŠ{Ěë͊}˛˙ȏžˇÜ°Á}˝ŽĘ6Żż?đúíbş˝ňÝz,÷u=ŃWö\{ŐzüŘť^a?™‹|.Nŕ×~ćbË-[•n݌úŻťíí•+–ăÇŢ}ÔVĂkn˝"~ŘnŻłˎçNťťÎăŢű֛Ăűšdht ÷?q_řĆ^÷_GÄRíčÁ;î|)t™ąäkD,ČţšŁŮT÷Şű˜+ΈX¤ĹĐ/‡ Č'‹nĽČ§Ę=ő{]Ë˝óYĹ?~ö°"Vă?W|bÇ<˝}_ţú1.zŃÂNŹ^ŃÍąźx|Ÿú×íOÄfżY×YŘśSü%Üöúk…üűuf˙íxvÄý…>ϞŮ>č_Xá÷'K­m.ˆqş ížNŠńôů˘€i9oÍN‹¨Şh[˜Çe6Xuů;L…+’gŚĆQ8QqĺÎYedxú4~ă7~—]śilÎÜüňŻ˝ë6.ĹŔŘ)a]Aťý5×aőšĽ Ř]o˝ë.^‚‰™ńPyĂ3řéŸ{;÷ŐHQłěűÜű‰ť¸ž`?Ýüę+\ÁKÔNÄ·`×#G"–+_˛Ë.Z(.3°}ÓË/GUňîůÓG9?=~W^1ŢôśWrąÎĘ)g qE,ËW-Ň>ňnťŽjhœœŸŔűťŻ:i}őŢç÷UĄóNW] 8IËĐÉIW]:9Ąűɘą66#d1֖ýˆů$Ś*—ťCˆňa‚€2¸ —ŸCLÖçä6Fâ4ˇ3Ü4úe‚ŹĎe‹˘4Bü‡[–˙îoŤÚa˙UńĹÇÎŕOî>ˆĄąi(9؅}˙Ůóř­?dăg",97nßXbŇő~•Şű@ńĎż~ßŢ.˙‚ďůcřßwđ°"ĺCi2X˛TřÝ_ŕ{m:=\ĂŻ˙Űó8|f2{dß >÷ýăJž"G–ą(eÄr#ÓΚl\Ä'ˇrřčâ˘>7JýüâDť9Ë䮛ą wžm!bɓďĚŞÓ'ńżńüěÝa?°ň—˙Ż‹YŞ}öżÎŸłÄą×› ôáĎ>ń~|ŕŻFíĎ/65~ůĂoÂ-7\jÝc–÷Ů˙öşŤżłôę[/ǟýöűmN§âĺΌâ†+Vŕżđƒčî Ž`fšĺ¸ĺÚ-[‚OţÎĐß=Eâő“?ôJŹYš8tŘÇT{ńěaďőB3cřńwżo}ýőTĹĹX•.OSíBOo?~ç߅kŻ\fD,ůÇ ůsGłI߉š2ŕŒˆEZ ýr¨€|˛čVŠPqŞ<¨ť/|v÷^ŻS˙áF‡űwŕđ8î{ढË{eŽóyäÜŻYřň='đÉ˙ű<††i÷É?q˙ăϞĂĐČLƒýĚX§œ97ŁÇř÷Űvű"ŇŞ+bŠŘcă Ďíáâ× ÁÍQý߈X"hmsAŒ#ĐU`h÷tRŒď¤Ÿł0-ç-#b☢ uů;L…+’gŚĆQ8QqçîôčQT{fđ۟řaź˙‡_ç S(ćœë_vËĺřĂ?ţI\~ĺz|ޝmÂüŹŁł‚_řďďÁ˛‹ ˯؟ďx׍ńŽ÷ź'FŽ„Ëł7ΌŸÂÚ KńËżţ>,\4OZΏ|đMŘ|Ů*> @Ҳűácżň>,X ~Uźc[.]‹Ÿř™ˇťŻö“×؞ť´ď˙ŕ›…b–Éńi žő~4菠rhđŢüƒŻÂ‡áÝ\aMÔńɍˇ\…_úí˙†Z÷4†&‡CNÂŠőKń§m %}eŽżűG߄ő[VIëË}Ţéš' 8IËĐÉIW]:9Ąuűɘąv5ój!cíi,Ńaî‹4Vňňa‚€2¸ —ŸCLÖçä6Fâ4ˇ3Ü´ŕUť÷ŕŒkÎŻąě˙,…X‘__…qż˙pŽ.?t—-Ž2<}` ?ű齸ő’y¸vĂ<Ź[ڃ}nčđř NNbçĄa<¸ç<ŽLť­ŽŠżü˛ŕÂŁá­ŽbY͇Œ–˙K9ţ7őUK꿊óOÖŚţöŰÇqßös¸ăšE¸bÍ\,šŰ‰‰é^<;ž={ž9ƒi{_dÍ›2‹ŐxŸ9dâ+ZŽW6ăÄx°ćŤ…ŕˆˆě/üŽŘ2?úé}xŮĹý¸ýĘEXť¤‹ű;16UĂÁSăřśÝÖűv8ď„ĺtç•CźaáK9yţ¨ˍL;ç˛qŸÜĘᣋ‹úÜ(őó‹íć`ő‘ËÔ0‚ rçkD,DŘř1W¸áźÎç Żž_ýÖSxěéçą˙Đ) šŤŻ,˛ĐmٸˇŢx Ţxű5čéîƏÚOĎiő˛itąWóľ{ŸÁÝß~Ď8ŃŃ ,Z8×\śo}Ăő¸é%›ě2‡Ŕ†ůbH6vŘ­˙ĘKWăßżöyę9œ8u335÷ľCŻžůrź÷-7cnŻ…#ű€b {§đĎţa|ö+ă{=‹ƒ‡Oc|b ýý=Xł|Î Žcɂ^TŚNá×ć-xĂm×ŘüŸÂÓ;âěšawĽˇ‹–ÎÇËŽÝl×} V-_€oÝű şbE~Œˆ%˙X#bAś:s0Ů=[ČEpFÄ"-†~9T@>Yt+E¨8Uš~˙žPxżž/kŢó9Ť˛Ô`Ő:đ_=ŽkŻ^`wqÂëb÷ĆÓ˝×ő’׉­;‡ńËż˝/˝a!Žšb>ÖŽęĹüyî—W##Ó8ufťö á‘'ÎáŘÉIWŒYŠř÷Üţ°šŤ:Ż Zľ"ü…Ľ#–9xxÜö{Ť˘9w5—›ó:˘!lŮţro|˘†=Ϗš‚Ťž*KcéˇF űV &ŕT u#bah÷tRŒď¤Ÿł0-ç-#b☢ uů;L…+’gŚĆQ8Qq%äΙ%G÷aĺźÍ¸ë^†;^=}äYlŰú<8ŽÓ§1aßGuT+˜7ż+W-Áe—ŻĂ-ˇ^áŽH2S›Á‘óű06="ÎÄěüĹ=ř_ô!ü××ÁcďĆɓ¨Ůe-YşW\ľwźáF,_š§Gcdj(žűYćᥰů’KđúaÜwď“xňŃ=8rř$Ś&§lŽsqŮëđ†7߂5k—aĎń]™S晱“زáJüţŸţ4î˙֓x抽8qě FíűçŢž^ŹÝpn~Ĺ5xé-WbČžgŽINTAϙńÓ¸ůś—`íƸ÷žÇ°o÷! œtď9űćôb嚥˜™šiän`Üţ,ďxW]ˇż÷çĹíÄögöáČĄnÄ-śűę’+6ŕ†›ŻpWcŸÇ g_`nŽkŘ?đ.Ţr >ţGĆ÷żó$ś>žǎx}Ő?o..śszűˇŘ\–aÇą]¤vĺ2ďt͓œ¤eč䤍.œĐşýdĚX;áwíJœĹٖýk öë•ŔżőżŞŹůs|Ž,˛rÝu7>ä80@{……ąöąZ­ůĺˇsaâü}ŕ“ÇpÂs:Sřż™ěĆ}Läc‚€2¸ —ŸCLÖçä6Fâ4ˇ3Ü4Öřך°unfڧP›™DmzÚÍŤű¸ŽÚJ‡ó0ĚţŤv4…#ĚÓŰ;qľűozÂý—Őź_ší::Puޗ]­zK+×_?`Ç:K3{Ě37ŢŽĎţsĘröëă?jîŇĚî/ĂŞ/GĚRńř¸1v3.iˇMÎq÷WpŐN÷ĎáQB˝ŢÚôdďó❇ŠŽXĂćZ›™ ńtnžźguţƒĘЎ ł;'œ6ÖËŹ÷ŁÓÎŻź}žľšS˙”ßgĚ볪Ç×YĆ-ĆÁĚLš˝_ł[ Œĺň ´iFĐ&çíŢŠŁţÝ˝W÷´ăö{ó×ňV]ĚS.vű˙âƒ[°~iřçGţáŽ:+Jťm ć8ĹXůŁ>F,7r0íœËĆE|r+‡..ęsŁÔĎ/Žť{đ/_Ńü…§o•J˛…řxŸŻűxŤ:PőÁ᛹ wží&bąú6‘_DM›8ĄŒĽšŐ}Đ˝ʅ+™ýů2z@(bšď‰łřľ?ý^čđľWŹÄß|üev;6Ří˜/.{ę˜ťĘ‹Xŕ‰ŽE°z×6?s˘m­M‚<çöť5/ňÚ Šóśďů_8_¨őoń_5űs{`khó_c׿Bs>çţzΆ°kě¨ý-މp˝ ŽŽqî)#b) ֈXčqëčî\>WücĆéP†>uzdŔ‹´ee‰r•1Ÿ,ş•"Tœ*őţeőűeűžlĆš/ŤMš÷FŽšŤŽt˘ÚŃĺݛú+“¸ňE÷^ąćΗP,›qť÷ˆîŠ-ţý§ł"˜ďÖéÜŻÖę÷iÓn9î=2ď>šţ# żprô(N“椡s.ÖÎۄŽúŤm9í?:t6×˗ź$ëˆpvž~:TfOÇl˜żÎ3YANFچńÂŔ>lYtyƒżçgŘzňIn_,îY‚5ýëC7,AÜÎÓŰ1a?Ëúćw/ŔşyëQ­tđƒťgÇĎâŕŕAĚ8Ďtădn×\lšż‰Űś:ćŔůƒ8g÷ŐľË^ONšOžx<FĂâęŇÉ ­ÝOÇţű72Žk[°Ŕ{ćřÔSß¸:űA˙ߙČó˙­ţXŕßčű˛ŁŰQ“ů\3+˛ť Œ)äY$ůáĆ1‘Opőƒ2¸ —ŸCLÖç‰ÎZLâSrQÄ&îó0’ůŤŚ¸BćWź‡gîő‚űŹęŻ^[Ž ‡óŔŤ^–ëň†Ąâiú‚Żýq—Lv(ř!ŽüĂYşŘr9ËłZSČâük~ç/u\ą4–ŐźrŤ>?νTębŤ!4Šż'Ü—°z=Ěť0ň^%ä?DtW0ađ‘éôę¨Uě‡xU÷aCŕwwîŻâ| ˆ[G•ÁďGŤą7JýüâDťĺ‘ˆą wžf%¤2W3yVçbűNЍö¸ŸŽŮ_Œ9Ż×Áôy`ę,¸BĺĹSÍ‘t-†e˙šÂ§|§ěéa°ÉÓîj,Jł9˛éXÝK=qűKp;ë3öĂźŠť'á 9+Ý >ő§Á†öxĺuÎ÷yUź2jăîu jSn=äő‘Ăż:×öůAí˛Ž°‡Ÿ˛ˇm] Őő ̈Xň5"dŤ3“Ýł…\Ôé‘gD,Ňb”•%ĘUĆ|˛čVŠPqŞ<đüŢ˝TĹť'„÷ëi÷~. 揮ĘâÜżYőVÇ|!‹włí­PŠjHăţëÜú÷Ź35G8Ró>{ýĎěú}&ę˙?ŤţŤá÷Z¸—vžXžđĽęÝ?×ŰÁźňěRo×˝omâ]Žƒ´˝•拹ˆ0´{:)ĆwŇĎY ˜–óVą"âđJmŃś0ś%šś•Épşęňw˜ W$'Î8LŁp˘âZ"w gƎăěřIôw.ĜŽůčŽöĄÓůAŁ}Žw~ˆ8cß?MΌť+¤ Ú÷O“žđB™cŽMŘ÷yϟۉŽËŃoßguUťÝ皎(fhrgÇNؘqeNF§†ą÷ěv,ěY†ůÝ mÎ=î+rŚěűQ‡§#„›CŐâmĺ돳çě,˛Ë›×˝Ŕ.ŻŰ’8BŽŃŠœ?c˙őÎ2L]^}ăĚŘi›Ď–ö]„š]ývżz+łšĺN†VPŤÇŸŔöÓŰl.‹íśÍGŻW„O„ăôá ÝWŸQťÁ`áÉal;˝Ëz—Ůýľ=ÍžšÂą‘cn9•ŽŘxśQןÓ5Op’–Ą““ŽştrÂěč'cĆÚՌĹXŰS85Vň^ź°â‚T\B~1YŸ“Ű9@ŠÓÜÎpÓÂH毎âý Ëńuş¨ęqŢńćŞu1K#ÎIԘ'qlY5/ŽxWv…óË,WŻ\_łQsęŞ?œ‹üڌ9ĺůŰÜňüŐOšâË(ŸżŸ$ˇüŞ'ŕh,Ůě˝~Ç)‡ĄĂŇ4ęje*žˆĽůz$wuË["şf“ŻTš_üYAᇳĺ–ěk_tă dŕ?xtú‘5Ęą"ŤţţԚÝ÷Uć>ÄŹĎšşŕĽŃ&ćǢŢ׍VŰԧ؇W/ęÄ;ŽďÇ%+ş°´ßűÝqx˙ç›Çq|`Ęoł×„őËşđ‘×]{§ëcĎŮ7Pp—ŽŽ÷k˘šaD,‚XäŔGőšQęç'Ú-ψDŒˆšómW }icŐËŚŔ&ŽŰO ůŻöŃ"˜<f˙%Ž ZmÂî“#jĚŔS|_´^çKÂqťÍăÇĄ4ű(›–c&ĎŮm<'Ż×М ó3"–ücˆŮęĚÁd÷l!uzdŔ‹´ee‰r•1Ÿ,ş•"Tœ*aż…Ć+Zíű)GZsD,uahý‡V%$ q‹bő؊˙?˙ţU?ńÖ@­4„.  ü8÷GćRiŹđâŽěÉĆNÜ×U÷­×ýÔ9YŢýšS—Ë­Zqš4üuANŕžŃŞ˙°Ţ=h5ŰíÝłVCmöťPءZ0§j¨‹Cť§“b|'ýœĽ€i9oľ™ˆE’S–ÇeDdŞËßa*\‘œ8ă05ŽÂ‰ŠkąÜ9Ť NœÁů‰3ĐɉgÎ Ö'G^t˙„eř˛œĚŘĺ8Ż rţDeĚŘ÷iŰN=Aę§éÚ NŽs˙dœvŸŮžhŒ;‚šCƒĺÎůĚ?=vĘnŰŠDu Ëłó{|ä¸ű'Â9–Ǐ=!Ż Đ7ďt͓œ¤eč䤍.œ0;úɘąv6#d1ÖÖĆF•|€pă˜ČÇepA*.!?‡˜ŹĎÉmŒ Ĺing¸iŒës%Ş+˜pÄÎ#2W×Rf5WUi”R_YĽą”ą#Ęh.C‰ş% đUîǝŞ#TŠŮ—gôâŚÎ%¸:K“óë÷1Výá`˝]ő•Ję˘_¸ă–[ux–§óń K ĚőxžŠŰđ KŤţźŻůŻ>p™/ ˆ]ÜްXłá˝ĚÉŤŽŇÝ8"灥űK7Ö¨§Ń&f…ÄHnLŐ ‰‘x4‘wfhWŻéÁźŢfŰŻ\Ӈżůą8xzǧĐaÇ,›ß‰ľ‹ăďqŸœŽá3ž ýr°ŢT‘ÉĆbĚő1bš‘ƒiç\6.â“[9|tqQŸĽ~~q˘ÝňŒHĈX;ßvą´JŹvŔl‡9ÇKţąFĂluj6ŮuL*LFœąH‹QVVd>Yt+E¨8UD~ď>ŤćݓU*sźŐXů¤yżĚCXăHR+ŞŔšÇmţ`˘)bŠßŢJgĚł8ąđ_ďa×řqݜz]¨ŻÜâÔďŽÄZ ”ááßsú?7ń_{[As=–ú=-BőľŇ|1"†vO'ĹřNú9KÓrŢj/‹ŹžĐ6#ŕ˜˘ŒČLuů;L…+’gŚĆQ8Qq­–;J])8‰ŹP!Wb?‰p…Î'*ŽČÜQęJŔIZ†NN­˜Ěž~2fŹÍYŒľ­1…ƒQc% Ü8&ň1A@\ŠKČĎ!&ësr#HqšŰnű‚_pbc=áB‚‘˜ĽîţÄĚ% ¸úIœK¸nˇ*ć Z˜§ęh”S÷5… Ígžßsů;űę •Xœ˜z]1‹óo5Đ?u>6űˆyJ™pL(.ŘNŔ8\"ýŤţŠ#Źłů&ćŠUźW1…ëňúČ źĘ)(ĐńřybžŢ­‰at˛†?úÚqüÖ[W ŤĂ ˝~iˇű'˛é†ßűâ!>;Jgę™´c1ćúąÜČÁ´s.ńÉ­>ş¸¨ĎR?$ç¨Ďׅ‘ˆą wžFĂôFˆ5"–|cˆ%˙X#bAś:ó0FtS§GœąH‹Ń›ŤŒůdŃ­9 âTyű˝8÷źÎ˝Şˇ% ř€Đku8Yţޞő×…îq\…%(>iފRőô%ą^Cý‡QKăďXőŐK-桏ŮNŤ~¸mÜ_FęöĘjňnĽůbD," ížNŠńôs–ŚĺźeD,BS”9Š.‡ŠpErâŒĂÔ8 '*ŽŐrGŠ+'‘ SĄó‰Š+2w”şp’–Ą“S+泯ŸŒkW3BcmiLá`ÔXÉ7މ|LP¤âňsˆÉúœÜĆČRœćv†›ĆÄžş5ރŔ/°Â>~}Í_kšb‹ŔCŕC¸lDĆc=ž†¸¨Äâ<Ě ţj-Ŕۍłř_°új(AĄI`+Ç|uA ‡G˝­Ź.$ ńő˘š}ĺdĹW? ôaóéM|pŒ;ţGĆđKŸ9„ŸyÝ2lYŃ Š={tűícxî䏎ÎÊ,ň~ î0š?ę“83Ď &ńĽâ">š•ĂG&K|>’ř@÷i7beFĂÜů Ň!ֈXň5"–ücˆŮę,Ád×:\WœąH‹QV–(Wóɢ[)r@ĹŠň ÎAý~§~ zŸĺÄáÍUVXăGŕ–ŃˆbˆÄ6ďÜ ăÖŢÜ —ŁÁ8÷œˆ× _Tä˘"PÔ|1"†vO'ĹřNú9KÓrŢ*YÄBoi‰śÇeDdŞËßa*\‘œ8ă05ŽÂ‰ŠkľÜQęĘČIfm•*ŽŔŠĐůDĹéšwşęJŔIZ†NN­˜Ěž~2fŹÍYŒ]8Ć9Ů \ 2މ|LP¤âňsˆ1Iš‘¤8Íí 7‰}Ü8‹ű ‰ çZŞü×W~a~[!–•źĎ-Ĺ8€˙… đQŽGËâ´32ŁýJ!QM Ďéż>ÉÂĄ3řĽݏKWtă–-ópéĘ9îë„ćöxŤƒŁÓ8;2…퇆ńÄ CŘvhÔ}ŻşU­z˙:Ëc#°jKc‡ÉýQS´Qp0íœËĆE<¸Ëᣋ “Ç%>I|ź8ŐŇeÄzŒˆšó5"¤7BŹąäkD,ůÇ Ę㛵JęôȀ3"i1ĘĘĺ*c>Yt+E¨8Uč9pĚĂdá#-BLäţ3Ó|ą$źCKhĺ5˘ć‹ąˆ0´{:)Ćw&›/˜–ó–ąqLQFä@ŚşüŚÂɉ3Să(œ¨¸VËĽŽŒœdÖV9Ąâœ OTœŽy§ŤŽœ¤ečäԊ9Á,í'cĆÚ،Ĺ؅aœ“˝Â*ă˜ČÇepA*.!?‡“‘Ű9@ŠÓÜÎpӘŘNj˕‹Ä—€‹çĘ8™ÄNj“rA*. ż`ĺ>U`*Ţ{֝եw›Ŕî#'źžŽ›úëĽě+ŐN7ÎŞv¸K\ĂyGźS€RÄÄäţ¨/‡>Ď/˙âÁ]úxĚÄE=Ľ~~q˘Ý¸O5tą#bAî|ˆé›VpűÍńŘ×^>836´ŠmśaBŹąäkD,(oÖ*ŠÓ#ΈX¤Ĺ(+K”ŤŒůdŃ­9 âTy ç@“]„Pň 3WŽ`ž05&â(jž‹Cť§“b|g~ó…[”’ŽůBÉA\ŹĘˆX ććŠqNT\ŤĺŽRWFNďřá—ă'>ôśĐńS#/âäč‹í•*ŽŔŠĐůDĹéšwşęJŔIZ†NN­˜ĚŇ~2fŹÍÍYŒľżqNö¨Œc"”ÁЏ„übLDncä)Ns;ĂMcb/.W._.ž+ăxd/NĘЏ4ü‚”÷xôދ索ˇTtĹ}UƒĹjîk‡Â{ďZˇ|ъ+bq+qk&÷G}9ôy~ůîŇÇc&.ęą(őó‹íĆ}Ş ¤Ëˆő rçkD,Ho„XłKžąFĒŹą <žYŤ¤N 8#b‘ŁŹ,QŽ2ć“EˇR䀊S偞LvQqşćŽşp’–Ą“S+ćł´Ÿ˘kC3Bcímœ“˝Â*ă˜ČÇepA*.!?‡“‘Ű9@ŠÓÜÎpӘŘNj˕‹Ä—€‹çĘ8™ÄNj“rA*. ż`ĺ>Ý× 1E–ŠťYą˙cVŐŢŽľZٟëqîj,u‹+‚q,Ţ*,ő•Z„\ŒˆE‹|Çc&.ęą(őó‹íĆ}Ş ¤Ëˆő rçkD,Ho„ŘĚ€Š°óO%ËRç,Š5"–ücˆĺńÍZ%uzdŔ‹´ee‰r•1Ÿ,ş•"Tœ*ô(`˛‹đŕJtćJ€#ĐĚŚĆDEÍ#bah÷tRŒďĚožp‹RŇ1_(9H‚ËÂU Ԝ8ă05ŽÂ‰ŠkľÜQęŇÄéŘđAź8tNł2'TSĄó‰ŠÓ5ďtՕ€“´ œZ1'˜Ľý=hĚX›š˛k_ăœě.PÇD>&(ƒ Rq ů9Ę$ˆÜĆČRœćv†›ĆÄ>^\Ž\$ž\^œ” Rqiř¨°ńč Pœ>őD*Îż°sˇůqŽđĹÁXĄW Iš‹ ůŽÇL\ÔcQęç'ڍűT¨`3"äÎ׈XŢąf%–|cˆ%˙X#bAy|łVIpFÄ"-FYY˘\eĚ'‹nĽČ§Ę= ˜ě"ş¸¨Ç˘ÔĎ/N´÷Š&PÁfD,ȝŻą ˝bˆ%ßX#bÉ?ֈXPߏUR§GœąH‹QV–(Wóɢ[)r@ĹŠň@ρ&ťĄäAgŽ8]Á|ajLÄQÔ|1"†vO'ĹřÎüć ˇ(%!ó…’*Ž8Ó§o›I|ˆ÷­Çuqx•Î)A?)qNT‘ť´Œ˘ë*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9Á,í'Θąv5#d1֖ƒř% Ü8&ň1AĄLîN.HĹ%äçc’ r#HqšŰnűxqšr‘řpń\Ç#“řxqR.HĹĽá  RĆcŕ R|y źUZxćŹÄy™&÷G}9ôy~ůîŇÇc&.ęą(őó‹íĆ}IÎG˜ą wžFĂôFˆ5"–|cˆ%˙X#bAy|łVIpFÄ"-FYY˘\eĚ'‹nĽČ§Ę= ˜ě"QqEćŽRWNŇ2trjŜ`–öSœ1cmjFČbŹí wä'y& ĄLÎRœćv†›ĆÄ>^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍűRœň4#bAî|ˆékD,ůĆKţąFĂrú7g“]+$Á‹´ee˛ëŇT ŽEˇR䀊S偞Lv^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍűRœň4#bAî|ˆékD,ůĆKţąFĂrú7g“]+$Á‹´ee˛ëŇT ŽEˇR䀊S偞LvÄűVˆ“Œłčřf*\‘œ8ă05ŽÂ‰Š#r—–Qt]%pš•9Ąâœ OT\‘šŁÔ•€“´ œZ1'˜Ľý”‚“1cílFČbŹ- wäçwŮ€ąĘä Ĺing¸iLěăĹĺĘEâKŔĹseLâăĹIš —†_0€JIňŸ”‹ąb‘ďxĚÄE=Ľ~~q˘Ý¸Oóů(ËZaÚř,ő–KŒ3"¤7BŹąäkD,ůÇ ĘéߜMv­gD,Ňb”•ÉŽKSa$8ÝJ‘*N•z0ŮExđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0´{:)Ćwć7_¸E) é˜/”PqŞ\‡hvă̙Ř6“řęےqßL…+’gŚĆQ8QqDîŇ2ŠŽŤNł2'TSĄó‰Š+2w”şp’–Ą“S+ćł´Ÿ2r2fŹÍYŒľˇ1énÜÇD>& ”ÉÝÉÂЏ„übLDncä)Ns;ĂMcb/.W._.ž+ăxd/NĘЏ4ü‚TĘxL’˙¤\ŒˆE‹|Çc&.ęą(őó‹íĆ}šĎGšXÖ ÓĆgЎŒXbœą ˝bˆ%ßX#bÉ?ֈXPN˙bł˜ěZ! ΈX¤Ĺ(+“]—ŚÂHp,ş•"Tœ*ô(`˛‹đŕJtćJ€#ĐĚŚĆDEÍ#bah÷tRŒďĚožp‹RŇ1_(9 âTš"Ńěƙ3ąm&ńŐˇ%ă,:ž™ W$'Î8LŁp˘âˆÜĽe]W œfeN¨8§BçWdî(u%ŕ$-C'§VĚ fi?eädĚXťš˛k_cŇݸ‰|L@(“ť“… Rq ů9Ę$ˆÜĆČRœćv†›ĆÄ>^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍű4ŸtšŠ7ľĽĎRoąÄ8#bAz#ÄKžąFĒŹࠜţ%Äj3ę4â^;ŠűJv !ĹD™0§˛[™ňj̈X8Uč9PŔdáÁ#”<č̕G +˜/L‰8Šš/FÄ"ÂĐîé¤ߙß|áĽ$¤cžPr@ĹŠrE˘ZŒIöŁýĆD8Ś(#°ĂT8ڍK''Fh?GáDĹšKË(şŽ8ÍƜPqN…Î'*ŽČÜQęJŔIZ†NN­˜ĚŇ~ĘČɘąv6#d1֞Ƥťqů˜ €P&w' ¤âňsˆ1Iš‘¤8Íí 7‰}ź¸\šH| ¸xތă‘I|ź8)¤âŇđ P)ă1Iţ“r1"A,ň™¸¨Ç˘ÔĎ/N´÷i>i7•Ľ-#KÝeÄ㌈ékD,ůĆKţąFĂrú—ŤÍ¨Óˆ{í¤î+Ů5„qdœĘneĘŤ1#bQŕTy ç@“]„Pň 3WŽ`ž05&â(jž‹Cť§“b|g~ó…[”’ŽůBɧĘqˆćb,şÍ$žú6S”Řa*SÔĽ“gŚĆQ8QqDîŇ2ŠŽŤNł2'TSĄó‰Š+2w”şp’–Ą“S+ćł´Ÿ4r2fŹÍYŒľ˝1•‰|L@(“ť“… Rq ů9Ę$ˆÜĆČRœćv†›ĆÄ>^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍű4ŸZŇŇÎŇĐ2b‰qFĂôFˆ5"–|cˆ%˙X#bA9ýKˆŐfÔiÄ˝vR÷•ěBЉ82aNeˇ2ĺ՘ą(pŞ<Đs €É.ƒG(yЙ+Ž@W0_˜q5_ŒˆE„ĄÝÓI1ž3żůÂ-JIHÇ|Ąä€ŠSĺŠznËĂXt›I|őmŚ(#°ĂT8ڍK''Î8LŁp˘âˆÜĽe]W œfeN¨8§BçWdî(u%ŕ$-C'§VĚ fi?iädĚXťš˛kkc*ů˜ €P&w' ¤âňsˆ1Iš‘¤8Íí 7‰}ź¸\šH| ¸xތă‘I|ź8)¤âŇđ P)ă1Iţ“r1"A,ň™¸¨Ç˘ÔĎ/N´÷i>ľ¤Ľ%œĽĄeÄ㌈ékD,ůĆKţąFĂrú—[„ÉŽ)źC꾒]CH1G&LŔŠěVŚź3"N•z0ŮExđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0´{:)Ćwć7_¸E) é˜/”PqŞ\QĎmy‹n3‰ŻžÍev˜ ÇuéäćŠqNT‘ť´Œ˘ë*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9Á,í'œŒkg3BcmkLĺc"Ęäîdá‚T\B~1& "ˇ1r€§šáŚ1ą—+‰/ϕq<2‰'ĺ‚T\~Á*e<&ÉR.FÄ"ˆEžă1őX”úůʼnvăž<ĎG­biIeiLąÄ8#bAz#ÄKžąFĒŹࠜţ%Äa˛k Żd×RLđ p*ť•)ŻĆŒˆES偞Lv^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍűň<ľŠĽ%•Ľ1eÄ㌈ékD,ůĆKţąFĂrú—[„ÉŽ)źC꾒]CH1G&LŔŠěVŚź3"N•z0ŮExđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0´{:)Ćwć7_¸E) é˜/”PqŞ\e΁&c’:CےqßL…cŠştrâŒĂÔ8 '*ŽČ]ZFŃu•ŔiV愊#p*t>QqEćŽRWNŇ2trjŜ`–ö“FNźqiĚXť™˛ť ,úö1A€üÀ wqLâKÁ%äçc’ r#HqšŰnűxqšr‘řpń\Ç#“řxqR.HĹĽá  RĆc’ü'ĺbD,‚Xä;3qQEП_œh7îËó|Ô*––T–Ć”KŒ3"¤7BŹąäkD,ůÇ Ęé_Bl&ťŚđŠűJv !ĹD™0§˛[™ňj̈X8Uč9PŔdáÁ#”<č̕G +˜/L‰8Šš/FÄ"ÂĐîé¤ߙß|áĽ$¤cžPr@ĹŠr•9šŒIę mKĆYt|3Ž)ęŇɉ3Să(œ¨8"wiE×U§Y™*ŽŔŠĐůDĹ™;J] 8IËĐÉŠs‚YÚO9ńĆĽ1cíhFČb삱č@ŘÇň&Ü!Ä1‰/—ŸCŒI‚ČmŒ Ĺing¸iLěăĹĺĘEâKŔĹseLâăĹIš —†_0€JIňŸ”‹ąb‘ďxĚÄE=Ľ~~q˘Ý¸ŻŔsci––FúeÄ㌈ékD,ůĆKţąFĂrú—[„ÉŽ)źC꾒]CH1G&LŔŠěVŚź3"N•z0ŮExđ%:s%Ŕč ć Sc"Ž˘ć‹ąˆ0´{:)Ćwć7_¸E) é˜/”PqŞ\e΁&c’:CےqßL…cŠştrâŒĂÔ8 '*ŽČ]ZFŃu•ŔiV愊#p*t>QqEćŽRWNŇ2trjŜ`–ö“FNźqiĚXťš˛ť ,úö1A€üÀ wqLâKÁ%äçc’ r#HqšŰnűxqšr‘řpń\Ç#“řxqR.HĹĽá  RĆc’ü'ĺbD,‚Xä;3qQEП_œh7î+đÜXšĽĽ‘…~ąÄ8#bAz#ÄKžąFĒŹࠜţ%ÄćmLy€sŔŨ W]÷dĆœĘneĘŤ1#bQŕTy ç@# RrtćJ€ŁÍ)^ÁL‰8Šš/FÄ"ÂĐîé¤ߙß|áĽ$¤cžPr@ĹŠr•9:MPgh[2΢㛩pLQ—NNœq˜GáDĹšKË(şŽ8ÍƜPqN…Î'*ŽČÜQęJŔIZ†NN­˜ĚŇ~ŇČI6ŸŒkG3BcmoŃ€° äL¸Cˆc_ .!?‡“‘Ű9@ŠÓÜÎpӘŘNj˕‹Ä—€‹çĘ8™ÄNj“rA*. ż`•2“ä?)#bÄ"ßń˜‰‹z,JýüâDťq_çĆŇ,-,ôˈ%Ć Ň!ֈXň5"–ücˆĺô/!śpă^;1F]–ęş'3&ŕTv+S^‹§Ę= ˜ě"&0á!ŽI|)¸„übLDncä)Ns;ĂMcb/.W._.ž+ăxd/NĘЏ4ü‚TĘxL’˙¤\ŒˆE‹|Çc&.ęą(őó‹íĆ}žŁ&űŹÔŁ&0á!ŽI|)¸„übLDncä)Ns;ĂMcb/.W._.ž+ăxd/NĘЏ4ü‚TĘxL’˙¤\ŒˆE‹|Çc&.ęą(őó‹íĆ}-rnĚŐŇVœ…pąÄ8#bAz#ÄKžąFĒŹࠜţ%ÄjÂëu_ÉŽ!¤˜ˆ#&ŕTv+S^‹§Ę= ˜ě"Vm:5Î1u_ÉŽ!¤˜ˆ#&ŕTvS^‹§Ę= ˜ě"?ŮŹN2΢㛩pL^F4—B…gŚĆQ8QqDîŇ2ŠŽŤNł2'TSĄó‰Š+2w”şp’–Ą“S+ćł´Ÿ4r˘Î'62 cĆÚٌĹX[ÚČšcĄ}#b!”É9@ŠÓÜÎpӘŘNj˕‹Ä—€‹çĘ8™ÄNj“rA*. ż`•2“ä?)#bÄ"ßń˜‰‹z,JýüâDťq_‰çĆéĄăČˎWLľ´qeĹ㌈ékD,ůĆKţąFĂrú—ŤŠ;rz yŮđŕqż*u_ÉŽ!¤˜ˆ#&ŕTv+S^‹§Ę= ˜ě"ŐÎńßNaĚXť˜˛kK;|cۈXerâ4ˇ3Ü4&öńârĺ"ń%ŕâš2ŽG&ńńâ¤\ŠKĂ/@ĽŒÇ$ůOĘňXąČw^\Ž\$ž\^œ” Rqiř¨”ń˜$˙Iš‹ ůŽÇL\ÔcQęç'ڍűZŕÜ8yr—űY¨ó}¨őĎ×mϞSŸ$D–6ŽŹXbœą ˝bˆ%ßX#bÉ?ֈXPN˙bŠq[_8—Űçę靤u Ńť˜iœĘneĘŤ1#bQŕTy ç@“]„Pň 3WŽ`žĐŽĄË˜/FÄ"ÂĐîé¤ߙß|áĽ$¤cžPr@ĹŠr•.qg3:ôlnŸŤ÷ˆ˜ÄĆ7SᘟŒh.…8ÉŘg>™pNT‘ť´Œ˘ë*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9Á,í'œŅ̌™#Ú?Wk%ë€1cmh'ö=#b!”É9@ŠÓÜÎpӘŘNj˕‹Ä—€‹çĘ8™ÄNj“rA*. ż`•2“ä?)#bÄ"ßń˜‰‹z,JýüâDťq_‹œǏ>ƒźě‘§O!•ŠN.­KŒ3"¤7BŹąäkD,ůÇ Ęé_Bl’¸‡wŸF^věČÓŇşe×RLđ p*ť•)ŻĆŒˆES偞LvśÍ;w›ÉˈćRˆ“Œ}&ŕ“ GáDĹšKË(şŽ8ÍƜPqN…Î'*ŽČÜQęJŔIZ†NN­˜ĚŇ~ŇČ)í|šzţ,Œkg3+˛kK8Žł‡v†rNňQcÂB“řee†übLDncä)Ns;ĂMcb/.W._.ž‹ ‚Ň÷š4NĘЏ4ü‚TĘxL’˙¤\ŒˆE‹|Çc&.ęą(őó‹íĆ}-rnœ<šľáüŢ9~ěäśî>—(FyriľXbœą ˝bˆ%ßX#bÉ?ֈXPN˙b“Ä=óÂ^<3†źlÄţĚvWeĄ^_Qť˜iœĘneĘŤ1#bQŕTy ç@“]„Pň 3WŽ`žŻĄK˜/FÄ"ÂĐîé¤ߙß|áĽ$¤cžPr@ĹŠr•.qg36ô,Ś&N"/;wjöœŐß"_´˙Ľ8Ś(0"–˘ë*ÓŹĚ GŕTč|˘âŠĚĽŽœ¤ečäԊ9Á,í'œŇΧ™ĂögŢůq3ÖÎf„,ĆÚмǚ‡ˇŢŰ<Ä9ÉG wqL┕ňsˆ1Iš˙?{ď0šQލ?Ú}űőî;Ÿ{Á ° śą)Ąc Ą„@(ňĽçKBzH˙’|˙„’JB %$´PB SŒmÜ{šćëwďÝ[w÷ůŻ¤ŐŽśh4zfFÚŐűűŮ{ďJO•FŁŃŒ~;ÓłCËÎňqv'ËŮ9ÍE!ːK(â#ů9WÚ)s!Q.myÂTČő˜ĽüłćK‚-š˝rIż•ňÁî’6űeCto\ź˙ ­-ÓI†>?ůĹ=ú&i7—ałŐ´‰…äа‰Ĺ­-H,îmAbĄbÎŻ†mVťsŻNT!BŸÝ÷ŇJG÷ł%˜0ő´ręÓH,)ziĺ _)jއđřr°YV zé&ÔÍgčę H,I:z}:ĽNK莞 t•šú˘Sşzie%+ƒ~á ?Ç~ŠőÍ]ťzóWíMĽ˝ÁݛýßY!ŁţňNÔS\űœ‘žNNşzšš+}䍀œF˛Ltő4rĘľ>éęĺYv:ą2ä¤ôa3§a,Ńód1'“úTť5jó°ŹP^€Č”•JçRŽÖ‚ť˙›k6L<đ&ß NÜаc…,a§Ęg—|@bŹ0Ň>ƞZv–łűĐ8Y6ČÎi. Y†\B'ÉĎšŇN™ ‰riË. BŽÇ,ĺŸ5XlÉíőh”Kúľ¨”v—´Ů/Ş{#ÓÉ;?lÇ×Eˇ‘Y1¨}ýO>D´G;)!Š°Ő´‰…äа‰Ĺ­-H,îmAbĄbÎŻ†mV;ż­űŕ—ă:lWď˝ý]ýŐ3„R§G`¤ŚžVN}‰%E/­ôË EMőߣS6Ë*AO#݄ú˘ů ]@}‰%IGŻO§Ôi Ý՗ŽR˛Q_tĘ@W/­ŹdeĐ/äÇŁ=źďSÁw—íę7>ł+ˆŐ{}s÷f˙wVȨżźő×>'äc¤§““ŽžfîJyÇ* §‘,]=œr­Oşzy–NŹ 9)}ŘĚi˄Fô5héĆ]Áś­v†¸˘RÂżo/žÎîCădŮ ;§š(dr Eœ`$?çJ;e.$ĘĽ-O¸€ šł”Ö\@bI°%ˇ×ŁQ.éעR>Ř]ŇfżlČîóˇ}˜ ÇÉsHÂ÷}9śDďůđjĹ´›Ë°ŮjځÄBrh؂ÄâÖ$÷ś ąP1çWĂVb÷ŽĎ=D‡g—œˇŤ ÇčŽ[?”œŽî)fK:1aęiĺÔ§1XRôŇĘAż RÔTáń=:ĺ`łŹô4ŇM¨/šĎĐԐX’tôútJ–Đ]}č*5!őE§ tőŇĘJVýÂ$?Gö~”jËîűŤ'/ÓWţkĹóŠç4đ;+dÔ_މzŠkŸň1ŇÓÉIWO3wĽźcÓH–‰ŽžFNšÖ']˝<ËN'V†œ”>lć4ŒeB#zž,ćdZŸ–oŘE|rŮiť ĂY€RÂóÂKűŽĎż+œ•%œ¸ŃˇŮ/c…,a§Ęg—|@bŹ0JÍ5a‡–ĺăě>4N– ˛sš‹B–!—PÄ FňsŽ´SćB˘\Úň„ ¨ë1KůgÍ$–[r{=ĺ’~-*ĺƒÝ%möˆîŢČtüŚ öEm  Dž˙ţ˝w'ĎʒvsQĄ[M;XH [XÜڂÄâŢ$*ćüjŘJěü6îíż'ŒCťzëwŢ3¸ßŞ{ŠŮ’NL˜zZ9ői $–˝´rĐ/ƒ5ŐCx|N9Ř,Ť=tžš5ŸĄ ¨/ ą$éčőé”:-Ąťú2ĐUjB6ę‹Nč꥕•Ź ú…I~ü6n˙#ďžçŃŽ~öƒ÷7¸ŻÜ~g…ŒúË;QOqíÇcőž#ąžNNşzšš+}䍀œF˛Ltő4rĘľ>éęĺYv:ą2ä¤ôa3§a,Ńód1'ăúÔ<¨Ĺ/Ţ|uŮŽŔ0W8Px=ÔCsîč>şőÓ˙0PŸ7ú6űeʐ%ěTůě’HŒFŠš&ěвł|œÝ‡ĆɲAvNsQČ2äŠ8ÁH~ΕvĘ\H”K[žpr=f)˙Źš€Ä’`KnŻGŁ\ŇŻEĽ|°ť¤Í~ŮŢO|űÔ8ńh ßł@ËÔžîÝ?Oů/wŇऄ(ÂVÓ$’CĂ$ˇś ą¸ˇ‰…Š9żśRť?˙Đ]´çĐ|níęÉf~óˇţ™T9Ś=÷ëĄЧ•SŸĆ@bIŃK+ý2HQS=„Ç÷蔃ͲJĐÓH7á™[óş€úK’Ž^ŸNŠÓşŤ/]Ľ&dŁžč”Ž^ZYÉĘ _¨:äż“–÷çÖŽ=°@ŸzĎ}]9 üÎ ő—w˘žâڏÇę=Gb=œtő4sWúČ;V9d™čęiäÔ{œ–‰Ž^že§+CNJ6sĆ2Ą=Os˛QŸ–>×lăŽ-8iW`Ř" Pôw\ÂËűśO˙#~řś.'nômöËX!KŘŠňŮ%+ŒRsMŘĄegů8ť“eƒěœć˘eČ%q‚‘üœ+픹(—ś<á*äzĚRţYs‰%Á–Ü^Fš¤_‹Jů`wI›ý˛!ź7.ᅢfżó/Á÷^ž›Á0ĆŰţőNşůŽ#=I Q„­ŚH,$‡†-H,nmAbqo  s~5lĽv7Ýw”ţâĂw‡ńslWoţÖ;č࣡ӠӞ{ŒubÂÔÓĘŠOc ą¤čĽ•ƒ~¤¨ŠÂă{tĘÁfY%či¤›đĚ­ů ]@}‰%IGŻO§Ôi Ý՗ŽR˛Q_tĘ@W/­ŹdeĐ/TňÜěôčCď žçŮŽţ÷{î:֗_ďů(ŁţňNÔS\űńX˝çHʧ““ŽžfîJyÇ* §‘,]=œzρÓ2ŃŐËłětbeČIéĂfNĂX&4˘çÉbN6ęSý‘c´řůű‚ď.ÚU6€Č” ƒXř>žýܞޚˇáPlöËX!KŘŠňŮ%+ŒRsMŘĄegů8ť“eƒěœć˘eČ%q‚‘üœ+픹(—ś<á*äzĚRţYs‰%Á–Ü^Fš¤_‹Jů`wI›ý˛Ąź72űƟß\˛đ“ÚסźőfâĽß\T(ÂVÓ$’CĂ$ˇś ą¸ˇ‰…Š9żśR;˙Vű˙zKż€vő†/ţ)ńż”ďlć4ŒeB#zž,ćdĽ>5láŁá0 °R" P*$ąđěş“žőžßék8›ý2VČvŞ|vÉ$Ć ŁÔ\vhŮY>ÎîCădŮ ;§š(dr Eœ`$?çJ;e.$ĘĽ-O¸€ šł”Ö\@bI°%ˇ×ŁQ.éעR>Ř]ŇfżlHďÇţçiůŔ]Áw—,ü¤öőÖťŇ›˙řF#íĆäÂVÓ$’CĂ$ˇś ą¸ˇ‰…Š9żś&vżđ7Ń÷ ˝]Dťz¨ŮŚíóĐޟöÜcŹŚžN}‰%E/­ôË EMőߣS6Ë*AO#݄gnÍgčę H,I:z}:ĽNK莞 t•šú˘Sşzie%+ƒ~aÚéŰ}÷ŸĐü‰{‚ďE´Ťťî=Nď{ë­Á÷ŢóĎ˝ď;+dŃwĹľŐ{ŽÄz:9éęićŽô‘wŹrÉ2ŃŐÓČŠ÷8-]˝<ËN'V†œ”>lć4ŒeB#zž,ćdŤ>-ţÇ­ÔŘ}<ŘĆl,ŔJAUSĎӔy˝„mŐ§ű˙řű&ýżŰˇŸúßáÂÂ"@ţýŰoźŽîš‡ęKó´í1Wő=Ͱž ŹŘŠňŮ%çţ˝Ź0JÍ5a‡–ĺăě>4N– ˛sš‹B–!—PÄ FňsŽ´SćB˘\Úň„ ¨ë1KůgÍ$–[r{=ĺ’~-*ĺƒÝ%möˆôŢx↿Ą“ˇ}$ř^ŠÄŻÂ΋ëLÔžŢyß1š[¨Ó“Ÿ¸5“}ęÉ…­ŚH,$‡†-H,nmAbqo  s~5lMěţŕ}wĐť?÷`đ˝ČvőČÁ{ŠV›§í§]9XQç™JG'&L==œú4KŠ^Z9č—AŠšę!<žG§l–U‚žFş ĎܚĎĐԐX’tôútJ–Đ]}č*5!őE§ tőŇĘJVý´ӡ§C{>|/˛]ÝóŔ,--4čüË7 Ě˝ď;+dŃwĹľ/ëŢs$ÖÓÉIWO3wĽźcÓH–‰ŽžFN˝çŔi™čęĺYv:ą2ä¤ôa3§a,Ńód1'[őiů“wÓŇ ŰE´ŤŔč`jj*řťwđňYlýíýbßĐD tđoŘÝÓ1{íÎËÁo É,ç_ՖŞj$+Xą3­–sߗÎ+ŒRsMŘĄegů8ť“eƒěœć˘eČ%q‚‘üœ+픹(—ś<á*äzĚRţYs‰%Á–Ü^Fš¤_‹Jů`wI›ý˛!˝7ú$–Ů›Ţ|ďíź„űěOş§j_oźíp62KڍɅ­ŚH,$‡†-H,nmAbqo  s~5lMě|ËßâŢŕű0´ŤöÝJőAdg*˜0őôpęÓH,)ziĺ _)jއđřr°YV zé&CP_@bIŇŃëÓ)uZBwőe ŤÔ„lԝ2ĐŐK++Yô ÓNŸOb9đČ‚ďĂĐŽ>xÇQZöÉ,—męĘ˝ď;+dŃwĹľ/ëŢs$ÖÓÉIWO3wĽźcÓH–‰ŽžFN˝çŔi™čęĺYv:ą2ä¤ôa3§a,Ńód1'[őÉ'ą,~ů`;Żv]€Č˘–Č )şÉ,'ďŚ?•HÁRěmŒúd ;Ój8÷}él°Âˆu|ŘĄegů8ť“eƒěœć˘eČ%q‚‘üœ+픹(—ś<á*äzĚRţYs‰%Á–Ü^Fš¤_‹Jů`wI›ý˛Ąź7r°œPŇL,>ňeáw“YŮ7GĎşöuü´“ R[M;XH [XÜڂÄâŢ$*ćüjŘJíü[­żœPŇL,A^ľŤ>™ĺäń=´óŹëÂř:ĎT::1aęiĺÔ§1XRôŇĘAż RÔTáń=:ĺ`łŹô4ŇMxćÖ|†. ž€Ä’¤Ł×§S괄îęË@WŠ Ů¨/:e Ť—VV˛2čŞŮ'’řË %ÍÄ⣨vŐ'ł~tž.~Ň֐ôÓę-Ë>Yô]qíÇËş÷‰őtrŇŐÓĚ]é#ďXä4’e˘Ť§‘Sď9pZ&şzy–NŹ 9)}ŘĚi˄Fô0 Đ YÔ2Y€ĄŔŕˇ×ľĚĐŢ;žBëwœOÓëú=ŢŰőÉvŚŐnîűŇŮ`…ëř°CËÎňqv'ËŮ9ÍE!ːK(â#ů9WÚ)s!Q.myÂTČő˜ĽüłćK‚-š˝rIż•ňÁî’6űeCxo\Ţůď_ŁĹ‡oś‹čź¤ľŻţ2C_řúŁtášëč”-ÓýŞi7&¤śšv ąś ą¸ľ‰Ĺ˝-H,TĚůŐ°•ÚÝtßQúą?˙&ýĎ-űƒíalWş—v?ô5Ú°ů<šYľ%Ś=)ubÂÔÓĘŠOc ą¤čĽ•ƒ~¤¨ŠÂă{tĘÁfY%či¤›đĚ­ů ͖tb´r‰%IGŻO§Ôi Ý՗ŽR˛Q_tĘ@W/­ŹdeĐ/TňÜěôđmżEłGžlcťę/3tǡЎłÖŇşÍáKžŢ˛Œc×wĹľ/ëŢs$ÖÓÉIWO3wĽźcÓH–‰ŽžFN˝çŔi™čęĺYv:ą2ä¤ôa3§a,Ńód1'őŠţČ1š÷wŠ~÷Á`$@ ˛¨e ˛Cƒ´ÎËÂńƒôŔ  6śœsy[żˇ1Šƒ;Ój6÷}él°Âˆu|ŘĄegů8ť“eƒěœć˘eČ%q‚‘üœ+픹(—ś<á*äzĚRţYs‰%Á–Ü^Fš¤_‹Jů`wI›ý˛Ąť72řö;ččçŸs‡Y‘—´öu˙ĄúŔǢFóűUßÔŃOť1Š ľŐ´‰…äа‰Ĺ­-H,îmAbĄbÎŻ†­ÄÎoŸŢúĄťčçţîť´˙h8~0Ěíę|łíż÷˙—íLŰv\6xVQÍç.ç–H!ĺi $–˝´rĐ/ƒ5ŐCx|N9Ř,Ť=tžš5ŸĄŮ’NL˜V ą$éčőé”:-Ąťú2ĐUjB6ę‹Nč꥕•Ź ú…I~ü_‹xřôȝDľĽĂÁžanW^¤>˝+8 ł/Ů@ń<ăÇŘő]qíÇËş÷‰ő8ĹG=Íܕ>ňŽU@N#Y&şz9őž§e˘Ť—gŮéÄʐ“Ň‡Íœ†ąLhDϓŜŒëSó –>w-üű÷ˆg‹ďŻه˛YtŻň<‰,ƒH+ŐÖžjĎǗ­ő˙^~ů_ó=zŒ żCĹÜ˙HÓhtöÍŹ?….xúkčěk^FI—;+vŚŐjîűŇŮ`…ëř°CˎSävjçË R˜śSćB˘\Úň„ ¨ë1KůgÍ$–[r{=ĺ’~-*ĺƒÝ%möˆęŢČ4ۇéřM˙FśeĂŇyŃi_ˇoŚ7žâ|ző÷Ÿ)Ď/íŚfh ÉĄa ‹[[XÜۂÄBŜ_ ŰŹv~óôŽĎ=Do˙ř=´çĐ|{˙(ľŤ3ŤˇŃ%—˝ŠÎťřʼn˘ĘSŚńÜ)¤<Ä’˘—Vúe˘ŚzďŃ)›e• §‘nÂ3ˇć34[҉ ÓĘ$–$˝>R§%tW_şJMČF}Ń)]˝´˛’•Aż0ŠnŢűQÚ˙Čűiyq{÷(ľŤëˇLŃÓ^z6]ýü]DQîňÓëaŔ÷ץXS|dŃÓĚ]é#ďXä4’e˘Ť§‘Sď9pZ&şzy–NŹ 9)}ŘĚi˄Fô5hů†]´řĹű‰-´e ąYą~ýşŕď7~ëšćŸFósźőˇŢóáÖßFěĂąż˝JŘVýíýŢ •,ˆ,ŔŠŔŕÎK éęŔLŽZGg^ńB:őąĎ §_Óhš,ëWëoŃTśœąfłB–šKŠ­Ćqv'ËŮ9ÍE!ːK(â#ů9WÚ)s!Q.myÂTČő˜ĽüłćK‚-š˝rIż•ňÁî’6űeCro\Ú-Ţ˙:yç'¨ąpź˝PÇĹG‘ÝöuĂş zésĎ ç=e=ţ ¤´›šĄH,$‡†-H,nmAbqo  s~5lłŘ}÷žŁô‰oíĽ~ů!:<ťÜŢ?ĘíęäÔ::÷‚çÓig?6o˝¨ĽĄrLé:-…”§1XRôŇĘAż RÔTáń=:ĺ`łŹô4ŇMxćÖ|†fK:1aZ9€Ä’¤Ł×§S괄îęË@WŠ Ů¨/:e Ť—VV˛2čöęĚĎŢIÇ~‰ďűՖËŃ_]ľvœžř̝tÉľŰč´ó×Ĺě{­|pŠő8ĹG=Íܕ>ňŽU@N#Y&şz9őž§e˘Ť—gŮéÄʐ“Ň‡Íœ†ąLhDϓŜ¤őÉ_B¨v룴tă.â“ĂÝ_F ˛¨e ˛C UçĹßÝ+›^ m=÷rÚxÚĹ´vŰŮ4ła;MŽ^O•ńiBʖeJĚž/ VeŞŐʐĽć’bËJ“~H,ƒTHa>ŘN™ ‰riË. BŽÇ,ĺŸ5XlÉíőh”Kúľ¨”v—´Ů/ËűŢčďŤ/Pcţ(Őf÷Qíȃ´´˙vZŘ}S×ě+>ÂJđ­/Î0t^˛śŻţ,-Oşt =î‚ tޙkhç)3´qÝ$MOUş%팖˜žH,$‡†-H,nmAbqo  s~5lÁľ°X§Cł‹´ëŕ<Ý˝ëÝ|˙úúťf_ b—Ź]őgi9ĺÔËhÓ֋hý†3i՚ShrjUÇŚÂcŃxn‰RžĆ@bIŃS6g)ƒ5ŐCx|N9Ř,Ť=tžš9]§G`ٜRuˆ´Ý@bIöU\}č*5!őE§ tőŇĘJVą;Śß5Šś|”–Ľ…šinöN:qäćŽŮW|”­]]ˇeŠÎ}ěFÚyŢzÚzújÚ°mŠV­ ąÉJ÷˛ô­/ÜçuŔw=Nń‘ESbĹž MŹrÉ2ŃŐÓČŠ÷8-]˝<ËN'V†œ”>lć4ŒeB#zž,ć”ZŸü¤—Ä'—¨qdęž úŽf{ßáŽŮW| {ť ?@dQË@d†Qç„{˛ÝŒ|( IĚ{Q§eX:/h_€aÚU°´Ť`ŁÔŽͲYĆVâ7úÁŻŐ`m=éĽ@~óÔiŁźÝácߣ}† hWŔĐŽ€=Œzť yD`E"˝hľuťŰ ŽŮhŁť=ÉÖ ö=ÚW O ] ´ÚşhW ] ´ÚşhW”˝]€<" °b1¨`­žˆóAŕ ńśjT:.h_€aÚU°´Ť`ŁŘŽ€k€ČŹxČ;0ŕe`ÝŁ}†hWŔĐŽ€=`öHˆ,CźÁčíź 3¸@o'ĽŒ´Ż@^@ťŠv°´ŤhW{X í*Řˆ,€Ź :6Ŕ ¤ľ'+­Ă‚ö0ÚŐn ]L€vľhW ]ť‘4‘6ĺ$ h+úömD?ĐŽR čÚU@ ´`YŔş Řůĺ:&vö`eíŞ] ]XŮ@ťjhWV6ĐŽ@~‘r6°´Ż`hWŔĐŽ˜ĄB0‘ €Č @d† ˛CY€Ąˆ,ŔPD`(" 0#Ź€™ záyr }â@ťj´Ť@hẀvˆí*Řˆ,‚¨C‚Ž AZűupVZGí+ ÚŐÁ@ť H€vu0ĐŽ ]ť‘zŕ74ś;)čô”&Adžż˛uhĐžş@ťš´Ť€.ĐŽŚí*  ´Ť@d€z;,›NŮN^öD:÷’KhçŮçҖí;h͆495%hT—TWŚű!ˇő lMcÔ‘síؚĵf[`lŻÄőÉľmŚŰć¨Ţ÷ôíýöfqafŁťĽÝ÷?D÷~ď.şă;ߣCűöˇŰ¤2tdzŰ×›ŤtŐEtéyătŢÎ1ÚšĽJ›ÖVhz˛ŐTBcgłÓö›“Ź([§ÇÂŮmKwrśM• ĘDËoޞ2Ĺ ä\@Ě!’iŘúíĚ|čĐ|ƒvkĐ=‡ętÓŢeşaWöĚÖKÝŽŽÓôôtó3EăăÍĎUŤŐćqV5ňÉ˝¸ Đ3Záߞ­IÜ2Řzś&q ˇľ[üÜ=|u9O[ŸĐrĂgžD_ţŘgiöčńöţJe´^HĹŰ× k+ôҧNÓőWOŃĽçŽ'99Ęś9Ȋ˛-ôXr*W~‹ˆéĘŻÎŔ‹‘_‹˛"bZws,W~ ŒyÓž}üîEúŰčČ|Ç`”ŰUŸ¨˛fÍZZ˝z5MMM2äKdáVLĘ @ĺ"ą Žç.śž3{13Œ"ŮzIšĹ˘i˛´´Dóós47w’ęőNŰ4ĘíŞˇf’&ž|]yUĎŮD¤€3 ÄęŹ#ľyߡqlVňáŒd Eă‚ЇŞ›ŮŽ˜Ĺ>´‘6ƇŠvănŞÝđń‰ĽöţQkWáÁúő낿7Ţř­kšüžă­żőžˇţ6bŽýíýPÂśęoď÷^¤VY€‹x‡ĹŸ}兯y=ëeŻL`<š´j1[Xäś ąČmAb‘Ű‚Ä"ˇ‰ĹŘÖX˙ě>Fű—˙fi‰0ě™xűęĎžňŚď_EŻyÎtó’Hš(œż8eŰdEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&ŽüILż]}×-‹ôwߚfi‰0JíŞ?űĘƍhíÚu€@bą+Ÿ˜jç ąŘĽŠ97w‚Ž› fi‰0JíŞ?űĘÔőŇř3ÎĂl+  Î,ŤłŽÔć}ßĆąYɇSýh‡ac{çXŐżÍěGGĚbÚHwĚâ§ŮĐÖżü-~úî`–– ´Y"‹Z" 0ˆwZ^ü†7ŃËŢř“Š)ťLZľ˜-H,r[Xäś ąČmAb‘Ű‚ÄbĎÖ_i§ÁôÁż}}řŢŰŢ=Ź˜xűúÓ/]E?˙CkÂńŔÂ_brŠź`YQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żCXžÜüď­_ŸŁżşaž˝{ÚŐ 6ŇŚMř•8ŘH,öcĺSí$űąôb2;vœfg‡6Ńxť:ńý—ĐÔK  dgˆŐYGjóžoăŘŹäĂŠ~´Ă°ą‚˝sŹęßföŁ#fąm¤;ŠüPĐč.}üZţäí] łYP6"K•ô'‘E—Üí›ô˙nß~ę|‡ ‹IˆŻ{zö…ŃĎ˙ɟÓuĎ!H,Ăl ‹Ü$š-H,r[XěٜμßF]|ĺăéń×>‘şë~:zŕpť-–uSăíëcϧżűĽ ôâ§NƒÄ˘#+ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺwHËӟ!ěęÓ&čigNĐíj´˙dc¨ŰUé SNŮNk׎%Ě‹ýXůÄT;‰Ĺ~,ý˜^ĐVMMMÓňň2ŐëőĄnWŤgm¤™Ÿ} M\{H,œY VgŠÍűžcł’§úŃĂĆ öÎąŞ›ŮŽ˜Ĺ>´‘6î(ňÓBłmޞż…Şo#Ţu”řŘÂĐľŤŔp#Z~xďŢ=˙DáUśŘúŰű!ĹžĄˆ,ŔŠAźÓňä罐ŢüçK›ś˘˛ ƒhŻ ąČmAb‘Ű‚Ä"ˇ‰En ‹=ŰçrăśÍôô?‡öďz”žçŽjÁ˜xűúâ§LÓ;~mmßÔzÄ,ü%&Řć +ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺwĘó”ŐzĹ%“ôđąÝy°łÔĐ0ľŤkÖŹĽ;vĐŘŘ`XěÇĘ'ŚÚ9H,öcIbVŤUZľjŐjő€Đa˜ÚŐńkϢ™_xU6ÎŔ™bu֑ڼďŰ86+ůpŞí0lŹ`ďŤúˇ™ýčˆYěCiăŽ"?ý¨ŹŸŚęľgœŁĆîÎJ$ łi‘E-‘JÄ;-׿ęGč żň›)7|“zł‰En ‹Ü$š-H,r[XěŮ*ÎĽßt]ńŒkháä<ÝsËąýĹtbâí돞pýÁ×v~ÔVřKL6°ÍAV”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘď•§ß~>çœI:šĚtăŢZ×ţ"oWׯß@[ˇn%ě$űąň‰Šv‹ýXf1=šžžęŰŇŇRgď´Ť“Ďť€Ś^w%fa€ŹŕĚą:ëHmŢ÷m›•|8Տv6V°wŽUýŰĚ~tÄ,öĄ´qG‘ŸdříçŘĽ;ˆkÔxŕp×~Hˆ,jˆ,ŔĐĄ—ÄňŞŸýĹ4 2ˆÖů ‹Ü$š-H,r[Xäś ąŘłőôlwÍ兓YzI,żţÚ51ašąkŘć +ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺwDËó)gLNfé%ąlŢź™°XěÇĘ'ŚÚ9H,öcىÉÁ ”˘É,˝$–ÉW^NdgˆŐYGjóžoăŘŹäĂŠ~´Ă°ą‚˝sŹęßföŁ#fąm¤;ŠüčT/ÜJ´X™ĐBو,€Łw9!XFŔ$š-H,r[Xäś ąŘłŐ$ąDxŐ/ü(=ůúg„ŇX{—z—‰%ƒŹ(ŰB%§2q塈˜ŽürŠRYęĘHÖÝËĕß/Ď_żn˝ř‚ÉPT`ťę/' ŘH,öcĺSí$űąěÄěŻ[ˇŽfffZ>‹kWýĺ„@b8ł@ŹÎ:R›ˇÇf%NőنěcU˙6ł1‹}h#mÜQä'›ÁÄK.Ąą+O÷ćÜŽ@‘‘(-â7ół/źˆţ÷o˙AšDë|‰En ‹Ü$š-H,r[XěŮf$ąDřńßű?tÖEç…Z9ubâq{Î8ýéO­‹ ӌ]ËŘŔ6YQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+ż%)Ď?}öjzěÖąPĽ€vŐ˙ĺÔśmŰ;‰Ĺ~Ź|bޝƒÄb?–˜ýĆ6l¤‰‰‰–ďüŰŐęYiúO"2‚3 ÄęŹ#ľyë°qlVňáT?ÚaŘXÁŢ9Vőo3űѳ؇6ŇĆE~dŻ}UN_JAfV@dJ‰ř Ü˙ţş_úő”ŠśLnř1[Xäś ąČmAb‘Ű‚Ä"ˇ‰Ĺž­Ä˜V†^üĆÎýn?ó˛Őtéy㭝iFŽeœ"/XV”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéʓéŇSĆčgŽšÉ˝]ݸqS{-kĚ‹ýXůÄT;‰Ĺ~,;1ŐĆţŒ,k׎ͽ]üÇRőœM@pfXu¤6o6ŽÍJ>œęG; +Ř;ÇŞţmf?:bűĐFÚ¸ŁČĐ śŤzćšxŢ˜‘X1‘(˘›ˇ˙wÓ)ŰéeoüI•6Dę|‰En ‹Ü$š-H,r[XěŮZ ąDxŮOźşŮćmíjm#î{Çć*ýü­i Ň ]Ë8E^°Ź(ŰB%§2q塈˜ŽürŠRYęĘHÖÝËĕßҕgGá篚Ąk*šľŤccă´i^ś€ €Äb?V>1ŐÎAbąËNL=ăľk×Qľ:–[ťęmZES/y,œY VgŠÍۄcł’§úŃĂĆ öÎąŞ›ŮŽ˜Ĺ>´‘6î(ň#4°küú ÉŰ0ă´]€aˆ,@)Ńh4‚ż/|ÍëK ™ÜÜcś ąČmAb‘Ű‚Ä"ˇ‰En ‹=[‹$–Ŕ]ł­{áë^|Ú@ˆ|żéűW‡34ţS݃W˜Ź(ŰB%§2q塈˜ŽürŠRYęĘHÖÝËĕßҕgˇ‚ßĆ˝é Ť‚ďy´Ť7n$Ě‹ýXůÄT;‰Ĺ~,;1őýv՟•ĹGíęÔőaI!ČÎ,ŤłŽÔć}ßĆąYɇSýh‡ac{çXŐżÍěGGĚbÚHwů$řđǁ'žu~đÝeť ĂY€R!>hąfýzzöž2I“ ˘tž‚Ä"ˇ‰En ‹Ü$š-H,öl-“X"<ë×7ŰžľOG|ăž6Ź­ĐkŸ;=/1ő;x…ČŠ˛-ôXr*W~‹ˆéĘ/§(•ĽŽŒdÝÍąL\ů-]yVxíă&iăt§ŃvŐŽVŤUZˇn`XěÇĘ'ŚÚ9H,öcى™ÝxŐŞUÍ6Ż‹ďŚ]őÖLŇÄ3Ď#4Á™bu֑ڼďŰ86+ůpŞí0lŹ`ďŤúˇ™ýčˆYěCiăŽ"?BƒcO9‹źŐuĚĘ” ˛ĽCÄ@|ę ~ a6“zĚ$š-H,r[Xäś ąČmAbągëˆÄâŰúmŢS^ôĚ`Ë?ňů˛§Í4ĂKKÇą,c/oYQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żĽ+Ďä2ń[ş—^8lşlWýĺ0H,öcĺ3啦ŐŘzÎ@bqχ?DťjŐęŕťËvuňşł1 č‚3 ÄęŹ#ľyߡqlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇6ŇĆE~„:>šmÝř“ΞbV Ě‘( z.ŽzĆłi‘A„ÎWXäś ąČmAb‘Ű‚Ä"ˇ‰Ĺž­CK„Ťž}]ˇÄÂHlŻëŻžJ1p-ËŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘ3˝LŽ?w˘[ä ]]˝z5 H,öcĺSí$űąěĔűq§§§{öŮoWÇŽ<ƒĐgˆŐYGjóžoăŘŹäĂŠ~´Ă°ą‚˝sŹęKeöŁ#fąm¤;Šü 2eő˛Ýű1+ PB€Č” эzÓ)ŰéÜK×+%9bś ąČmAb‘Ű‚Ä"ˇ‰En ‹=ŰH,>Î}ěcšmŕÖPâ`Şć›Ťtéšă Er,ËŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘSŻL.=eŒvŹ ‡M\´Ťccă455EČ‹ýXůÄT;‰Ĺ~,;1ĺĆQÜńń‰`I˝pŸývŐŰ´ŠŞçl"RŔ™bu֑ڼďŰ86+ůpŞí0lŹ`ďŤúR™ýčˆYěCiăŽ"?BƒŒEY9syfÂý ą%ˆ,@)qŃĺWôě1š‰ÇlAb‘Ű‚Ä"ˇ‰En ‹Ü${ś9‘X"\tĹcÉžtńd˛Đů‹ĘŒźźeEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&Žü–Ž<ł•É“N W˜™™!d‰Ĺ~Ź|bޝƒÄb?–˜ră޸. œăn#RŔ™bu֑ڼďŰ86+ůpŞí0lŹ`ďŤúR™ýčˆYěCiăŽ"?BaQVĎßBPf€Č”ţFôńqÎŗĥ$GĚ$š-H,r[Xäś ąČmAbąg›3‰ĹÇ9Ÿjô´˘(=>Ÿ4‹ó•;xyˊ˛-ôXr*W~‹ˆéĘ/§(•ĽŽŒdÝÍąL\ů-]yf/“ÇŸś}.ÚUĚĆ2€Äb?V>1ŐÎAbąËNL“vŻßÄÄdKfż]­žŮX@ Î,ŤłŽÔć}ßĆąYɇSýh‡ac{çX՗ĘěGGĚbÚHwůeőŒ ĄÜBť ĂY€‚é´sÎm7ńÓH,r[Xäś ąČmAb‘Ű‚ÄbĎś‹çžAćĺ18îů§ Ú­2ą ËŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘSP&MœżąšŽ$7_湛íĘ XěÇĘ'ŚÚ9H,öcى)7NŠ;>>fäW‘Ş;× ŕĚą:ëHmŢl›•|8Տv6V°wŽU}ŠĚ~tÄ,öĄ´qG‘ĄaQVśŻ!{'†c%Ėí;Čě泉En ‹Ü$š-H,r[XěŮDbńąeÇVr…[ŞÝ;œż¨ĚŘÁË[V”mĄÇ’S™¸ň[DLNEđrž,çvhënŽeâĘoéĘSP&-ůÎľî~˙žĚ@ ąŘ•OLľsXěDzSnʊ[­VÉ*›WŔ™bu֑ڼďŰ86+ůpŞí0lŹ`ďŤúR™ýčˆYěCiăŽ"?B EYلĺjrŁ&@)ąfĂF’#Ö4€Ä"ˇ‰En ‹Ü$š-H,öl $ąřXłÁÝŻĐ6Ĺ_ć9Q™ąƒ—ˇŹ(ŰB%§2q塈˜ŽürŠRYęĘHÖÝËĕßҕ§ LbňMSîˆ,._ć@Ů‹ýXůÄT;‰Ĺ~,;1ĺĆiq+wmŸˇKö@8ł@ŹÎ:R›÷}Çf%NőنěcU_*ł1‹}h#mÜQäGh`Ť(WO”XZ(âţ×IńZ㹌$š-H,r[Xäś ąČmAbąg[0‰ĹÇäôT×ŕĄéšăďDӓéX‘eěŕĺ-+ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺˇtĺ)(“ůô9kW=C2 XěÇĘ'ŚÚ9H,öcىiŇÎĽëxžťv•&@€.pfXu¤6ďű6ŽÍJ>œęG; +Ř;ÇŞžTf?:bűĐFÚ¸ŁČĐŔVQúJăUkí* #0# PJxžä­lě‹Ü$š-H,r[Xäś ąŘłK†'.T=ßÎ_Tfěŕĺ-+ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺˇtĺ)(“r‡Í*‰Ĺ~Ź|bޝƒÄb?–˜rcý¸V4ÚĐgˆŐYGjóžoăŘŹäĂŠ~´Ă°ą‚˝sŹęKeöŁ#fąm¤;Šü le¤„ś(9@d€ąŚ$š-H,r[Xäś ąČmAbąg;$$çpţ˘2c/oYQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żĽ+OA™čČČ ąŘ•OLľsXěDzSnŒŔ3 ÄęŹ#ľy°qlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇6ŇĆE~„śŠí.°‚" Äďú ąČmAb‘Ű‚Ä"ˇ‰En ‹=ەBbQÁʋʌźźeEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&Žü–Ž<e˘# W€Äb?V>1ŐÎAbąËNLš1H,0dŕĚą:ëHmŢ#l›•|8Տv6V°wŽU}ŠĚ~tÄ,öĄ´qG‘Ą­˘Dť Ź0`Af`äa6¸ł‰En ‹Ü$š-H,r[XěŮ%‰eĐ`ľd TÓĆʋʌźźeEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&Žü–Ž<e˘ĺˇg—ËvXÄĘ'ŚÚ9H,öcى)7śu~ŃŽ€%pfXu¤6ŤŠcł’§úŃĂĆ öÎąŞ/•ŮŽ˜Ĺ>´‘6î(ň#4°U”ʎm$P&`F`#v3‰En ‹Ü$š-H,r[Xěَ‰Ĺ)Źź¨ĚŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘSP&Z~Č ąŘ•OLľsXěDzSn,‹Ćœ€3 ÄęŹ#ľYŐm›•|8Տv6V°wŽU}ŠĚ~tÄ,öĄ´qG‘Ą­˘dą%Œ4@dV(b7xXäś ąČmAb‘Ű‚Ä"ˇ‰Ĺž-H,–^Tfěŕĺ-+ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺˇtĺ)(-żä XěÇĘ'ŚÚ9H,öcى)7‰† œY VgŠÍŞnăŘŹäĂŠ~´Ă°ą‚˝sŹęKeöŁ#fąm¤;Šü l%‹-`ä" °ťÁƒÄ"ˇ‰En ‹Ü$š-H,ölAbąô˘2c/oYQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żĽ+OA™hů O€Äb?V>1ŐÎAbąËNLš1H,0dŕĚą:ëHmVuÇf%NőنěcU_*ł1‹}h#mÜQäGh`Ť(Yl Ľˆ,Ŕ Cě‹Ü$š-H,r[Xäś ąŘł‰ĹҋʌźźeEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&Žü–Ž<e˘ĺ€<‹ýXůÄT;‰Ĺ~,;1ĺĆ ąŔ3 ÄęŹ#ľYŐm›•|8Տv6V°wŽU}ŠĚ~tÄ,öĄ´qG‘Ą­˘dą%” ˛+ą´‘6î(ň#4°U”,ś€ŇĄB0âHřˆÉAb‘Ű‚Ä"ˇ‰En ‹Ü${ś% ąH^hŰhżĚŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘSP&Z~őeNŰUX!‰Ĺ~Ź|bޝƒÄb?–˜ră1ŐÎAbąËNLš1H,0dŕĚą:ëHmVuÇf%NőنěcU_*ł1‹}h#mÜQäGh`Ť(Yl Ľˆ,@IťÁƒÄ"ˇ‰En;ä$–lƒ‡ůĺäĺŃŔě6ÉĹAÜá°ľ${ś ą¨Ąýâ/c/oYQś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żĽ+OA™hůČ$űąň‰Šv‹ýXvbʍAb€!gˆŐYGjłŞŰ86+ůpŞí0lŹ`ďŤúR™ýčˆYěCiăŽ"?B[EÉbK(=@dĘ Xäś ąČm‡Ä"0Ě9gĹL,˝ÇLlĹşh!6H,ölAbQCűĹ_Ć^޲˘l =–œĘĕß"bşňË)JeŠ+#Yws,W~KWž‚2Ńň+ H,öcĺSí$űąěĔƒÄCÎ,ŤłŽÔfUˇqlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇6ŇĆE~„śŠ’Ĺ–°"" P^€Ä"ˇ‰En;d$ćɑsÎ—Š„vH-ŁX-ĉŞ-H,jhżřËŘÁË[V”mĄÇ’S™¸ň[DLW~9EŠ,ue$ënŽeâĘoéĘSP&Z~2ĉĹ~Ź|bޝƒÄb?–˜&cH$PpÎ,ŤłŽÔfUˇqlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇6ŇĆE~„śŠ’Ĺ–°b" 0iJf ‹ÜvHH,AÂş63’Xú"ÇĚ—ęň@r\'@bąg ‹iÉ‘{qęŔśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺˇtĺ)(-żb€Äb?V>1ŐÎAbąËNLš1H,0dŕĚą:ëHmVuÇf%NőنěcU_*ł1‹}h#mÜQäGh`Ť(YlilŁY€r"Ӌ]“;}ÉlAb‘ۉĽ{€Đn\ýÁGý¸m҉!‰%n噍ĐRT]´${ś ąČ‘Ö™š§l =–œĘĕß"bşňË)JeŠ+#Yws,W~KWž‚2ŃňkY€ ąŘ•OLľsXěDzSn  8ł@ŹÎ:R›UÝĆąYɇSýh‡ac{çX՗ĘěGGĚbÚHwůŘ*J[›Ŕ¨D`…ĂäN_2[Xäś% ą1‹KÓŁÄl}2 ô­g_T]´${śĽ#ąä؋IëLŽÜ‹Sś…KNeâĘo1]ů弲ԕ‘Źť9–‰+żĽ+OA™hůľ,@ XěÇĘ'ŚÚ9H,öcى)7‰† œY VgŠÍŞnăŘŹäĂŠ~´Ă°ą‚˝sŹęKeöŁ#fąm¤;Šü l%‹-M`" °‚ar§/™-H,rŰ%ą TĚůÚL™‰Ľ7ÇÁĔä¸éłłU-ĉŞ-H,–Beěŕĺ-+ĘśĐcÉŠL\ů-"Ś+żœ˘T–ş2’u7Ç2qĺˇtĺ)(-ż–e(‹ýXůÄT;‰Ĺ~,;1ĺĆEXr˝=Ŕ¨3 ÄęŹ#ľY_m›•|8Տv6V°wŽU}ŠĚ~tÄ,öĄ´qG‘Ą­˘dąĽą Œ*@dV(Lîô%ł‰En[0‰Ľp0Ý6y@1çkS°œP<÷œ˘;đ5hv–˘ę˘…Ř ąŘł‰ĹR¨ŒźźeEŮz,9•‰+żEÄtĺ—S”ĘRWF˛îćX&Žü–Ž<e˘ĺײ %@bą+Ÿ˜jç ąŘe'ŚÜ$2pfXu¤6뫍cł’§úŃĂĆ öÎąŞ/•ŮŽ˜Ĺ>´‘6î(ň#4°U”,ś46€Qˆ,Ŕ „ɝždś ąČmGˆÄ’>˜ôŇ@'Áń&-'äé34˜-=›n2KQuŃBlXěقÄb)TĆ^޲˘l =–œĘĕß"bşňË)JeŠ+#Yws,W~KWž‚2ŃňkY€ ąŘ•OLľsXěDzSn  8ł@ŹÎ:R›őŐĆąYɇSýh‡ac{çX՗ĘěGGĚbÚHwůŘ*J[›Ŕ¨D`…ÁäN_2[Xäśe$ąˆF6Ş™X吲œPúňAԥ뉉 ÝqóˇgXlڂÄb)TĆ^޲˘l =–œĘĕß"b lŰ͕´L´mÝČ2ŽÔWÂş›c™¸ň[şű— L´üZ– H,öcĺSí$űąěĔƒÄCÎ,ŤłŽÔf}ľqlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇6ŇĆE~„śŠ’Ĺ–Ć&P€ČŹ ˜ÜéKf ‹Üś`‹Ž­Ö bkV›q•,'Ô5ÚĄXNhđňA}Z;OÄf)¸N€ÄbĎ$KČŘÁË[V”mĄÇ’S™¸ň[DĚ𞙔–‰ś­;Ů >lbÓXşş›c™¸ň[şű— L´üZ– H,öcĺSí$űąěĔƒÄCÎ,ŤłŽÔf}ľqlVňáT?ÚaŘXÁŢ9VőĽ2űŃłŽ’8qĂŔĐŔVQ˛ŘŇŘĘY€“;}ÉlAb‘ۉĽ{€5tú„J[-’ăMZN(Ž’F0‰Ţ(&čŠÉ,ŹŠ§ś•Áđú‰Ĺž-H,0œ/ć‡ÂśĐcÉŘéĽó“łßlł­¨dŁUWz›}w4ÝďĐÖÝËĕßŇÝże˘ĺײ %\’X’f#v‹­O€Äâ6ž˜Ů€Ä@Î,ŤłŽÔf}ľqlVňáT?ÚaŘXÁŢ9VőĽ2űѳ؇68qĂŔĐŔVQ˛ŘŇŘĘY€“;}ÉlAb‘ŰŽ:‰%ĹVđQpźš3ąôćĐ=řÇqĹH!ŃG˘mf\'@bąg ‹;ŒÜ‹Sś…KĆN÷(Ÿœü&ź#KľK–qŠ|d)r%wt$ënŽeâĘoéî_‚2ŃňkYŚ#€ [$=?ÜŇĽœ{}“1fŇńxŚ@‰Ĺm<;1ł;‰€œYŽ.zźfĽl°ql:Ş:ď98UClŹ`ďŤúR™ýčˆYGÉ œ¸aŕGh`Ť(Ylileˆ,@Éar§/™-H,rېX|Y˝V§FŁÖÖkÔë]ÄŻR!u|Áń*Ž;ՏÔüx܈Öt`ގušŤJĽÚÜŽ6˙V4fgáš × XěقÄâ#÷âԁmĄÇ’ąÓ=Jç'ż›M㘂ŃĂ!>ˇ}ÜŃ‘Źť9–‰+żĽť ĘDËŻe™ŽV0LI,ŮěšeC9!öúĆbĚř1{ŠĆ$ˇńěÄĚî$pfÁ`5 uÖ‘ÚŹŻŚÇćCW5IĎk Yfž]Ѹ ôĄęKeöŁ#fąmpↁĄ­˘dąĽą ” ˛%†Éždś ąČm‡€Ä˘cŤ"ąÔk5ZZ\l~m$ęű ľŻŹ1úš%a.ľĺZKîQ˝ů_mšŮ€ÓřÄD’apź˛);qĺ0,cXěقÄâ#÷âԁmĄÇ’ąÓ=JçÇąßÄfÎ &Ť” źž<ŰŽÝĘ2ü\OćÜ6Ç2qĺˇt÷/A™hůľ,ӑŔ †´Ď(łkľ˛šŐÉŘë‡1ă?‰÷[AbqĎNĚě@b g kÔ3֑ڬŻŇcŞ&űŕŽĎ0 +Ř;ÇŞžTf?:bűĐ'nřŘ*J[›@Y" PR˜ÜéKf ‹ÜvHH,Á>N‘wí ţԖ—iöčQZZ˜§ĹƒÍżÇgiynęő:m۰ž&§Ć‰D‡§ý‡…d—Śi˝ŃfDi4ý4ę FĂ'†ř˙UüăQĹ˙ŰpŤřłšô}Złźx•đ{%ŚW źtŮűçşâë6˙ciőŞUô˜3Ď Ë ™Ďí÷Ýä061N•™iŞŽ_Cc3S´jő*šš™ 7ărBÉł˛\'@bąg ‹;ŒÜ‹Sś…KĆN÷(Ç~MI,œ(c#żŽdIůJ .W÷Úş›c™¸ň[şű— L´üZ–éČ`CBF‘˙X‚[ö”bŻoœÇŒÇŠž‹;ƒ™â ”Z=^=g ą¸‰gˇˆ˜°Ŕ’žŤ– ë(eCÖc3TU:áîÍ6źţ]iŽ ěcU_*ł1‹}hƒ7 ü l%‹-M Ě‘ş`ŇJ Ą-H,rŰQž‰Ľľoqa=ú(-Ľ…GöQ}i‰ yĄŐë šÜş‰VMMşÇŽŁĽcłmY¤×Ůg7ńÉ'>9%üëËűDä•4÷ČíýĄľˆ-Őć߉fZë׎iŇx­oźZh~‰¸yLKkWÓüúŐ´vĂúćguČ,Ý‚Ůfe)¸N€ÄbĎ$7(Ӌ\ŰB%c§{”Ώcż KËDąťYźo‰ĺČÁC´|ř-<˛—ęľˆ˜Âm‚ w˝ĐęěďŐK"ą„ł­x 2OApéŐé•Uúîúü4÷UfORĽy'*ĄlőşľÍiô­{ "łtË Ž ąŘł‰ĽŒŇ‹\ŰBĹâ ×°Ç~ł’XRNJTeŇłťď%žĹălˇaç6žž—ĹŽ!\j(Mnl›^&ÖdŽü–îţ%(-ż–e:rXÁ‰Ĺ~ʤ˜Ů‘-ž*śËXöcfE2Ž™ÝH,`M…çÔ.•žŠé ˘ę›ČG/<ľÖ Ă)îRóÉZH˜ČâGGĚ:JfŕÄ ?B[EÉbKcCC €ČĚX†Ę$šíˆĚÄHF ő:<>Kő…ZÜľ/؎)ö¤ƒPmš,;´jŐLЯ١ďízdOk !ţßœ’h9 Š– ˘ÖËłh!Ş´—ęč„2Š+˙î/1D-–MěűÚľkš/ȸóŚo ňß°qyÖN g|™_$>š@ó“ó4>9N“ţ 3}Ë ™g÷ö ‹M[XŠÁ(˝Č5ą-ôX2vşGéü8öŤKbŃO‰•Éŕ™ŃtlíČ8žţˇÂ6ńeXÂ9НĽe`“[hÝeĄ@ćĘoéî_‚2ŃňkYŚ#€Œ,¤6~ŁÍ-?”bŻoœÇěŔŞ6žLggQH,öcى)7  \`5:UBůŒËŠ*NęÎą‰}dTfeWçWĽ˜ę)łŠT}ŠĚ~tÄňóŤ íA—,~„śŠ’ľw ü85€‘ˆ,`tłB[X䜣Nbi훟› 䋏˘z­, ä/ËsĂמC>đH[ýśďÝIÌĎćË÷oÚź^úňëi͚ŐÁ ŢÄÉyŞoXCó'çB"˨gei8Lľ‰Ĺž-H,Ĺ`”^äšŘz,;ÝŁt~űľIbé&^Îxn{Ÿ‚vO5NՒy Ÿq]íÉ͜^'9–‰+żĽť ĘDËŻe™Š-” ąŘ•%Ś|vNńKĄç $7ńĚăć*°‚Ŕ*1H§§ňĽÜńÉ:tŽMě# ¸Ç7H#ŐĽ-›ŤçÉŢŠVőĽ2űŃłŽ’t]2űŘ*J[›ŔHD`…Ăäf?„ś ąČm‡Ä’i0Śťź´Ř.=ޞ‰ĺűî"ąŒ21QţŕýťčË_üv˘ü’KΧŠéÉŕsƙ;éŽ;ď',,,’_xŃ/×j‹‹4śj*Ă`kď‹HťżpKľ‰Ĺž-H,–l-†r!+ĘśĐcÉŘéĽóăŘŻK ŤG ‹—%Č㏠IÍ]4KË öPgŠĄÄÉМ^',´Č\ů-ÝýKP&Z~-ËLm ä0_"¨ż/ę˙řŕűžţTşćšŤhçΝ455A@ŘŻÝľk7}ĺ+_§Ď}ţ‹Íţű›œušÄb?–˜rcX`ČŔ*áë¤ÍtÖów ÔfőÓ96ą .ş–üÜĺ[Њáśö”¤ú*ZPőĽ2űѳ؇68qĂŔĐŔVQ˛ŘŇؤĎÍ+°B" °ar‡B[Xäśe ąôŘĆŁŮXüŰąjcďžôoޚ8#ËŢ˝”öî?H[OŮnűČ,N˓…v™+żĽť ĘDËŻe™Š-”YűŽIúţţĺĺ%Zˇv-ýŇ/ý,~úitcjj’Î=÷ěŕó´§]Gň'Aǎ Č,ƒ‰ĽŞ`¤ő…É"ôœÄâ&žyÜh܌• xݛJ5„mÝâ4ÇôüčˆYěCœ¸aŕGh`Ť(YlilŇgˆćXA‘Xa0šĂĄ-H,rŰ!'ą¨{vPRÜh6–pr7O7‹ ‹tűm÷’7}çÚő𣴰°@'fç2ŮƗj4bâńÁ˝oÔL˜,†e ‹=[X,ŮZ ĺBV”mĄÇ’ąÓ=Jç'żi3Śp‚ĚoGć–­öÄ ÜH´RěŐćpnçŔÉRZ˝ă„~[´§=V‘_­q=§× í2W~Kw˙”‰–_Ë2S[(9l‘X|ÔjËÁ@bŃÙgžNo~óĎŇoţÖďç.if–ÁdušÄb?–˜rcX`ČŔ*ŃHšŸSę?ŹŹ6ŤŸÎą‰}$é'těƒîzň€`túź´qN[nˆÓÇpmcU_*ł1‹}hƒ7 ü 4|h…aąĽąIŸ!šW`…D`Áä?„ś ąČmK8KđťżwĎČBC‹ƒ˛ÍÄÁźk´, Ž ąŘł‰Ĺ’­E ăËƑ{ œ 4lçvŘbf°ĺY˝9Úuŕř2_œ˘ŮS_@'×]Jßťévz×;?BGŽčö•Ż~˝é'ß@*źým˙Dď{Ď) ô§żKOşćŠDšßŽ˙ďýşóöťTnhŐŞz×ű˙‘6nڐ¨sřŕazőý(ÍÍÍ+}]xńcčožUwlďWP}ąámÚauĹq>‚2ŃňkYfj %‡ÍY<ëőzĐ<óOm“XüY4˙ĺŸßOŸý̗čđĄŁmÚźžůŹ§Đźţĺ466YžďűžJŸýě‚sX­V5ź¤źŇ´zoÓs‹›xćqóŒ‰FXA°Aô𥠹pĎßnaÔfőłqlVňáŘIčqŘb­Ä÷ś—ĆM\úÖ˙G6Ă™ŽŠT}ŠĚ~tÄŹŁdNÜ0đ#4°U”Ź˝Sŕ'Ł!šW`˘B°"`r‡B[Xäś%%ą ‚˙Ťr×K ‰h6˙W~Ę:Ń3kě\–H,ölAbądkĂř˛qä^'( Űšś˜=ňžŰť†_ŸÄrđř2[š¤Cç˙4Ímx"y•1zÜ口g<űşDóž˙#´{×Rá5Ż%mܸŇđ×ń÷TožÜKBĽRĄŸţů7)–qňäýăŰ˙EŠłqóFzÍë^Ii¸ăśiŚ6¸”baJ~Ůa|¨+Žó”‰–_Ë2—~ ô‘T6F=ř{íľOjďű×w|€>𾏂ÄĂĄƒGčýďýHpn"<šuΙUƒ{_Z&ę‘Eč9‰ĹM<ó¸yĆDĂ Ź °Ś ­Z4’ÇӃO­AőĹejĚ/QcŽő9š~‚íÖߓ1y[Ďŕ37賘°?!öœágžo>áÓ̧îçß×óé/0ŸůďΚ9í´°N/ľH,öcى)7‰† œY0 ‹˙OĘh,ՈęîLbgpÂÇ*28´Ű?¤<ŚÎ°Jěź4Ď)/ׂs×BOíŔj$lë|ŞúR™ýčˆYěCœ¸aŕGh`Ť(SŻMŘhżŃź+XZ(9LîđCh ‹Üś$ŐŻŽ >v/-Tž§ŽĽ…Ř`:H% Ë${ś ąX˛ľˆa{Ůhb[čądětŇůżƒĆS˘vqa9Ü^Xé@W>™ĹÇ?đń>ŮWżü úÖ ßĄ+Žz%áy/x6}ě#ŸL%—üË?ž›žńʧ)—zÓOźžžňĽŻÓźbY żÍ˙ŤˇžŢö÷š8ƒ‹żtÁ›~úŃoţňď‘ ţŠ{ŕć``ŻĎ.ŢóÎąŠœË“…v™+żĽť ĘDËŻe™KżPHű‰şvSS“í%‡wÎÍÔÔTë›úśłƒŰzXěDzSn  8ƒ@đź=n׎ĎQen‰Ž9ś@—ŸX˘íK5š@USbŠŮ4îŻŇˇWÓ7ÖMRmj‚ĆÖ̐?těe}?ďđÚ:爵Tf?:bűĐ'nřhřĐ ĂbKc“>CÔy`…3˛%†É~mAb‘ŰŽ‰E=(¨7"ąÔ#Ć~ÉÍĆâŢqëŮփłą=ƒÄbÓ$Kś1l/Ml =;ƒ\Š2W~‹ˆ™ ךa ]Ťý¨L$šůd–—żň…eoűóżK]č§~NoY wü㻕:›ˇlŚ~őRnťőúügŐżzżî)×( 8z/ŐÄg§×‰ĺ˜+ĽŽ [™hůľ,séJ€"ěĐőŁ„ü‘!m<,BĎH,nâ™ÇÍ3&N`3 ’ŐTś`wƒiůđ Z}t~n×1zńĄ9:c$řç茥:˝ôHóÜí>AkŽ-R­y.ýs:řŢŚ1“š­óŽęKeöŁ#fąmŘ‹ˇŃîhřĐ ĂbKc“>CÔy‘(+LîđCh ‹ÜślË ĽiĞȻfdѰ]}Εtę ~•Îzí_љŻüSÚö´Ľ‰őŰSíüŠ˝ž×XŚ?Ž/Đ;–çč/—çéuő%Z§1ň1==E?đâçŃďţáŻĐ_źíéw~˙Ítý‹žM““Šś^‹Ä,Ô‹ťf3Â–H,ölAbądkĂö˛ŃÄśĐcÉŘéĽó3ä~{_Üé4Ď~ÎS’Yzđúȇ>Ą´˝äąŃÓżď:JĂÇ?ú)şëÎ{•:?ôŞ—Ń)ۡQŢţś˘…ůĽÎOţěŠ:VĽ4pʸžęüĽŮ‚ÄR@Lă|e˘ĺײ̼_(Ę8cçĘH,vb‚Äb7&î'Ŕ BV +ÔH,ţ?őăóTY\Ś7Kud8ušNo÷Úű鿤š‡ohęÓM~Ťś@—p§SľĄ™ëé͘OmÔč-cSô°7˜3šqĂzúĺ_˙™ć š­í}ë7ŹĽ3Ď:Žžú‰ôGř—tbö%ŚM^‹¨ÓKÓI?WţŔmň/ŕ Ë ${ś ąX˛ľˆa{Ůhb[čądětŇů2ż˝cEKŸĚrôř~ú›ży{×ţ={¤FM=şu|n?ÝűĐw•:~ťtôČÁŚŻł“•šmŢţĂ4}ÝĽôuäÄfZ\X ‰q1´Ův?đČ-´´´” đÄÁ—jź ĺΟž[v„ ÔÇůĘDËŻe™KżP˜’X@‚) ^xĆÚdXěDzSn  8ł “z´ťą¸ÜěŞ1]{|$ đÉ,W_˘ŻNŒçś25ŢZžĎóAŞžTf?:bűĐH,ýd4Dó m`Fhäu‰E˝×LSd[vKltaĐ@˘ż+>#‹*žO`é%ąD¨ŒMĐögý­Z?Pţúúb‰%ŸĐň+ľOˆýă?őş.K§žƒ~ôŻ"˜CKHԉb\'@bąg ‹ÜV| ˆ—&ś.dÚś;ÝŁt~ ňŤœőCj—€—˙ŕËčMoúąööégœA?öŚ75ŰËJâçö;oŁ|ŕýŠžŕĹ/ĄŤŽ~’Ň×;ßő/t÷ÝwĽúúĺ_ůZˇa˝Ň×ďýŢď(H,]}/5‚vWł<žqA˜@]qœ L´üZ–šô %@ž$T*{PŸKXěDz3OBI1Qǁ ‰EŐRT8Ÿláă ł‹ŘÁN†ý^^Œ–Öč¤r˛(T}ŠĚ~tÄŻI 8qĂŔĐ@ÇV[›ô˘y€.€ČŒŸFěۂÄ"ˇ]á3ąDčZZHŃAÚđřë•~*ăS´î˘gôíŸićö̆ú—;š:W şœuöéô˜ ÎUÚ^vůci{ŃĹGDb ‰:>Âc,bŔ$Ëś ąČm˝ú;Eźl4ąu!ÓśÍŘéĽó3„~’/t|Śŕ•ŻřĄö÷ßú­ˇĐää¤R˙-żő›ąśj0ŚŚŚčW~őה:GĽżřóˇR.žřúĄWźRŠóŐŻ|…ţűż?EičťëČë›ÝfQšÓ2auĹq>‚2ŃňkYVTLŒ‰ĹŸe¤ ;PŸKXěDzSn  8ł ł:Çţúłąř•rŰ2fcą…íţšlžSng8ŘÇy<˙ŤúR™ýčˆ5.2SpↁĄ†­0,ś46é3Dó }ŔŇB0Œ/'Ab‘Ű–”Ä’}БŰË Š^žUŚVKĽarë9}űÎnć4Žq|çqƒžÖS.çœ{&éŕěŚŢŢ˝űĘüYÂ[”5,'XěقÄ"ˇ‰Ľ™śmĆN÷(ŸQóŽ ’išöÉOŚç>ďůJ|äĂtĂ7žAiřПţ:őÔS•:üG˙—Ž9Biřßý=ŞVŤ‰ňz˝NoyËo’̲Űt8u3š!L Ž8ÎGP&Z~-ˊŠ #‚"H,ސq’Ç]?ô˛Çź˙ 4 H#ł¤—Kţ喪e-Ľ ŁHĆ1ł;‰ĹM,9pfAş:§Œ­7Âo“ !nžça’ńřóNďŰ×ţéI#äX"˘Zsčřѳ؇68qĂŔĐ@ÇV[›ô˘y€‘Xá0iقÄ"ˇ]á3ąô.Ż'ąx 'Ç3yć4Ůą1řĺĎČâçcĹ3Čǰœ@bąg ‹Ü$–bdÚś;ÝŁt~FÍď€2‘ÔŸ(ňŰżóťJ……úżđű”†;vЛ~ü+uîžë.zďż˝‡Ňđ˘}?=é꫕:ď|çżŇwÜAşđĎOŇíŮo{Ű/éX­ K1ó”‰–_˲˘bŔˆŔ&‰E—xÁ¨? {•­oZÖĘ5Ă(’qLÉŘ  ˆq’~€Ć×n!÷ßߡďAŻJţʢi É}Vą{čÁGHޟü+ƒpɤÖŇI4ř—ç]/ŘkdÔ﹉Ş-H,rŰ>K˝Ÿ"^6šŘşiŰfětŇů!żÁ‹7E™T*a[UŤ×é䉔†W˝ú5tá…)uţöoţšvíÚEiřÍßúmšžžVęüĆoüŐj5ĽŽż<ŃŻý†zŚy˘?ű˙ţĽá‚ /ěz/űÚő˝žń—Aň`˙ {˝juĽŔ|e˘ĺמʍ˜0"ś™X]ä_nŠZÖRĘ0Šd3ťXÜĒÇ€‚Ŕ™ƒŐ˛žpר$˙ľisđƒĹhťŠçumű]Žh?Q÷>˘Á?vdęĚvÝţ2…]čp°§-otÉ:Š{JŇ~˘nűţ˝ŮŸeŽĽ”YWúŘ+‚´#˝q`U_* XWĚbÚŕÄ ?BƒŹu*“’ŕŘl´ßh@ Y€ “ÖÁ‘-H,r[Xl}RF%•˜qô–OЖ'˙H˛×ĺE:vÇçűöŸlşý\eŒžÓH~ąśˇ˙ŻżŠšďŢ鞻ď§óÎ?;Ńöć›o§Ýť÷%ĘC" 3łh†XĽŮ3H,6mAb‘Ű‚ÄRŒLŰ6c§{”ÎϐříşýŤĆbeÂô>ţ_Ÿڔ[ž{;I$–JlŸŻUi[ź‰ĹëöÓ!˜xíĺw+ôšBKđ,á…}č5íJóż6eĽé0ҋbľŸ?âӀˇ–ëá`Ź:~*:?—đí#ŰřŞ´Qkú—ĎUt~Sľ˙1ëŠYěCœ¸aŕGh 3üO`ąĽąIŸ!ÚFHˆ,Ŕ „IëŕČ$š-–ęłm÷Z$–JĹK\ZČÇŃŰ>K“[ĎĄľç?šß}™ö~ţŻŠvâđ@ŰŽNŇiÜ ‹¸żëuŹű˙5ĺËŢŕź˙öm˙Bżň?C[ˇnî“ű/íţńďŢM*„K ŠgdI†A§$ťś ąČmAb)FŚm›ąÓ=JçgÔürŠRs÷ÜĂc´°Ľé+š=Źss㊞*•*MÎnjůĽöi‹ż8kˇ˘É§t źëĺ§8HęŠă|e˘ĺמʍ˜0"(ÓL,öHůŔĺŠçm˛7=-kǓaÉ8Śdl… 7‰† œY VďSIú•Fâ$–J4öŰ&˛T‚~X5˜q4NfĄ6Ń$tҟL|ö֕JŤoĐ&ŞpH4a/Fr \…ű˘YZÚyR‡€âyĄĚkf¨˝/Ôé&Ú6ÔÚÇmô|Óî¤RBçÖŞžTf?:bűĐ'nřHꔶ’ŕŘl´ßNĘ ĘY€“ťş#[X䜘‰EiŰ&ą(– ͙ýÂß5_~ÝBë.ţ>šŘp*qm‰ć÷ÜI‡żűQZ:˛;ŃtąůyËŘ=ˇ^٧rś5}hƝэŇŤătDřĐĄĂô–_˙zţ žü˛}ýúľtäđQúÖ ßĽO~â󴸸HĘŁćFëÔmTÄđ\ƒÄbĎ$šm$\˝l4ąu!ÓśÍŘéĽó3j~egš{`źůďşŕ?ĚĽČ'iGó“ŽĆ‘t_kč,ŇÁÂŃ4qZOç’ć5˙š’ÂÍř_ďwŠž˜•%ľ\X!#ť2W~Kw˙”‰–_˲˘bŔˆ`XH,ŞřŸŹgdá֌,şçĐđ\ƒÄbĎ$š-H,ĹČ´m3vşGéüŒš_NQŠíŽP‰ß¨ ţ .i=Ą4ăÖ@ă Qƒ‚ÁĐĚ~QWç#(-ż–eEÄ,¸™€,pIbé÷Ýządň“Ÿyo&ýç=땴Ґ~Ž“ZÝ$]1u‘aÉ8fv ą¸‰% 3 Äę´Á‰~„ęTv%ÁąŮhż”” ˛+&wuGś ąČmAbѲmO5YńěL‘8d,ŃŇB=§bĐ/ز î °‰Ĺž-H,r[XŠ‘iŰfětŇů5żą2‰rőŽFđř€nĚ/5‚Ďĺ:ÓXĹž÷‡D”Öw0+Kjš°BFveŽü–îţ%(-ż–eEÄLˆeZNč3ąŘe'ŚÜ$2pfZ=ɌÓ~†Ç]’PéZZ($ąT}"K%š•%üYˆZ$ŻMfńá ŠäW‰‘Xáě+ěu-­ZźFgF˙7 ÁdŮ­™[Řë,)‹fz cő[:3şŽ2KčĂ -‚~&ˇsľ˛ĚÔÎëŮśŃa`]1‹}hƒ7 ü 4|h…aąĽąIŸĄ“r€rD`ŔäŽîČ$š-H,Úś!‰Ľ2pĘČ2 $°p03Kú‰áš‰Ĺž-H,r[XŠ‘iŰfětŇů5żœ˘ÄýŰ•ł­4A˝ŮśúŸ…ĺF0Ţé“YŚĆ*ę%¸Óë’u^|z^˛Ę§śĚ•ßŇÝż4ëIfż–eEÄLˆ ą” ąŘe'ŚÜ$2pfXu¤:CăŃrAí™Xźöě+]$f–Ö,-íe†Z3˛ôö ‡;3ąxÁě+Ą%č7GK U:K 5|ű€gţâ!ňĂ=‡_ZˆŰqťI-]KIî"ł„łŔ´ú™R2‹­ű“Ş/•ŮŽ˜Ĺ>´Á‰~„ĆuJĽ”çuĂżm,°Â" Pr˜ÜŐقÄ"ˇ‰%“mDb ?T:„K ľfdQj&\×Ń/ÇÓlAbąg ‹Ü$–bdÚś;ÝŁt~FÍ/ˇ_ŻQŰ損ffćéÂ‹îĽ /ź—śn9DkVŸ¤UŤç’—ěɈłŤhÜ[˘ĺ…qš?2CËG§i‚Ćiy‚izźBăUŻV–Ö€ĺŔśU5ȇşR`>‚2ŃňkYVDL;U rÁ¨“XR— ęmW†˝skéä€Äb?–˜rcX`ČŔ™bu­qK&íĐŃrAíż^´ŻClŠFĖJ¸ä|gy!ęëłĎ­™S*­™VˆŁe„¨őÝŁzŁô9ýąŘŔ.˜<Ľ.5äĎćŇ:ő„âË qWţݤ–´BÝł|S˝xÉ,iŸZEç=űuÁě0 GöÓ_úqÝ'ŕDžÉ ŞžTf?:bűĐ'nř×)•’ŕŘl´ßNĘ V@dJ “ťş#[Xäś ądśíZZ¨„ż4ÖmĺFJƤw ąŘ´‰En K12mیîQ:?Łć—S”c/Ĺvœł™fĚŃěá9˛…5kNŇ3Ÿő%şâŠ›ŠZ­‡;+Ó䍭nŢ+օŰü&Žůi´FšľŻümýfŽŁ×–ľlšX݌ăcrő2Ńćš`ŕđÄžŐtđĄő49?FWŃĚDŒü“Z.éebMćĘoéî_‚2ŃňkYVDĚ´|`ˆ0˛$–’Î`čŽMŻŔ@bqĎ´Á‰~„Â:Ľ§$86íˇ“r€•Y€’ÂäŽîČ$š-H,"ۈÄâyúż2ç5ăÔ8e’źĽUvĎŐôcnŢźśliž´;q’öěŢ.ůىÓN­ŇŚU:p°Nť÷Öľl:K 5‚ŽS? Ď5H,ölAb‘Ű‚ÄRŒLŰ6c§{”ÎϨůĺĽ[K vá6Ú}÷:qxžlŕĘŤžK/xá§ibb9 ŻTŚN'or;…]şfŰÉőfťXkţ­ßĂO­ýaťŠçuéÔ:6ĆŔŘţŔäšíł´jë :r˙&Úło5m\]ĽŤĆÂąWęÜęťf‚z˘ĺמʈ˜7łĂLbÉ77 zĺ‹›xćqóŒi~ Ú#Î,ŤłŽ4ă ÷Âҙť#¨Ä˙ś÷ǖjĎÜMÝł˛D3˛DËq{V/XZ($ąT‚ĺ†( ˇp×rCÁřl`GÂIŒ BÁwj킡fqéi¤ßˆúŠ™YşÎGŒĚ˛vz]ůŞ7Óşígۓ“S´¸¸@4˝žŽŰv}y˙]ÄKľf?ZřZ4ĘÇŹ+fąmpↁĄqR) ŽÍFűí¤œ2 `ä" tÁ䌯°‰En ‹Řś{ÍTőEČkÇi镧SýŇ ­ŽŕÍ×hě{iü3*ßşs;˝îőŻ ó/8§˝ďđĄ#ôžűÝđUaéňÇMĐOţŻŐtúÎNst߃5úŤœĽŰî\VÚƗŞ-,…ÇŃ91<× ąŘł‰En;l$–4ʍ—Ŕ J…ćcQ6j~9EIĂśâŮ_Z¨Ň@4ó]ńôü~šŽšö›ÍIŞŹşź9𶓂äۄŸ€ Y y¸|<ŻóÝđ6RŠ2m:ď Ď,ŃĄű7/,6­JčRrűŸٕšň[şű— L´üZ–Ó°~@žőĺ„t°öőŚ˘°řÝ÷ŃâMďŁŃ†^Äâ&žyÜ´Á‰~„YëT&%ÁąŮhż”Sż­*Pv€Čm˜Üňś ąČmAb‘ŰúŒüÖl,áŇB ďŤÇiáÍo™ěŢ?=FË/=hă$żďၜ§îÜAżů–Ÿ§é™éŽý7m Ÿřé˙EŤVÍĐç?÷•śW?q’ŢňKë¨ZíŢΙcô˙~{ýę拏oM&łtfda:qô8mń÷ŐŁĺ¤`ƒŠ ‡Ż.n ‹Ü$–bdÚś;ÝŁt~FÍ/§(ĽŮśä3˛Dż”3ő}ý ?CW_űMňĆ7QeÝ5äUŚÂŮU‚YTšƒpźHź|˜¨~"œ]Ľľ„P÷_Žm‡Änosř7a6–AX{ęńŔěČƒAÍuÓŐŽa>npWs—uëô6ť¨+ŽóÔ-ż–eEÄňfâX $Ŕz‹›xćqóŒi~€ÄŒ 8ł@ŹÎ:Rauˆ–Šfd‰V ňÚËuĎĚRĆ‡#’KL§++űpܚq%ŘžWBňIČa dáŒ,Qů%Ďj-OÔň.7ä…ý?jQW˘YYZKľgy ÄţŰL uYY˘oëŚWÓ?žöÍtńŽ3ŰÇSŻŐččą#Ążćńßżť9ś˝qyŐhŚ҇Ş/•Ź+fąmpↁĄqR) ŽÍFűí¤œú…hU•Y €É-_a ‹Ü$šmëÜu–R/˜°üý;úH,]ň§oĽĘwSőž}˛×żá}$–8^ůę—Đwoü9rŹk˙Ô¤G?˙ăkúH,ƛ­Ó/ţďľôúŸ9LľúŕsŸ‘ea1š‘E˙%\?3ąŘ´‰En K12mیîQ:?Łć—S”zvw ˛÷Č<3˛ř ˆ4ßOźň;tőľ7$–ę†g>ƒXüߡ-í'^¸żů÷qŸXťó8-œ Ł‡ÖĐĘGÓă­ălň hPW ĚGŻžd÷kYVDL“| g€Ä’"2ŞĹżRЋ‹›xćqóŒi~€ÄŒ 8ł@ŹÎ:RÎlŘFoűÔ&°PkŚ–B ŖňźJ{YĄ>"KűSĄ°5ăś$ ¨´&ţlű­Ÿl´–ňˇcł­řKŔGy˛’U8ň[~(Šë“V˘ßaF#ť™%Zf( ÖPg‰ĄtĂ´fr†ţţ5żŘMbŠ×iďžÝT[^ĆĆ?óŻFSŞál/YŔ¨ęKeöŁ#fąmpↁĄqR) ŽÍFűí¤œú…hU•YŔ薯°‰En ‹Ü6ösç s-+”ôŢ|˜Ż]š‘ŇPżjs‘eëÖÍtŢůg+í&&&čŠ+/ŁO˙÷˙tíżěq´a˝úĹŢ)ŰŞtń…c‰ł˛4áŻĚÖ˙˛˙ tĂs ‹=[Xäś ą#ÓśÍŘéĽó3j~9E)Ł_3˛TZ~ĽžW­>AĎťţSárBëŸÚü;N>‰…y‘ÇžAź´ŠĆŚsӞĂÓtlŽB“k+ňSł• łałQ–şâ4A=ŃňkYVDL“| g”‰Ä˘C™}Njiá9xŚĐ‡^Äâ&žy܆ÔĐ€D­œşâ4A=ŃňkYVDL“| g`& z‹›xćqóŒi~€ÄŒ JHbéE4űJđ˝ER‰öĹŠ.Ń;Ë u“/˝Ö˜T4ĎJ{†Ÿ´âqkŞ”U›űĆcč™>!XŇ'Â3/|"}ńîď҇žű•p|‹ĂŔ'ǖ č(­YZíďdüx?Pű{‡HC_rˆiľ?ËŤ‘.é%ąěÝMK‹‹]$–S7ŻiöŠ3ΔŞęKeöŁ#fąmpↁĄqR) ŽÍFűí¤œú…hU•Y€ “[žÂ$š-H,rŰΌŒ]íĽ…’ îÍ×Ő/"œŹ÷íš;9G:˜;9ߡoö¤Ţ1ž8‘LP‰/-d0ä‹M[XäśVI,9tiVÔKŕĽBóą(5żœ˘$ô둃Ľ…ÂUÉEž§gćč˛'ŢH^ľ9ŕ6šł™{-Řß8öőd‹?ś¸Čš˜%đ×<Ÿđ(ËjHŤˇ§“o¤“‹Dk&+ý“Ŕi”I0+K;MżVeEÄ4ÎGPO´üZ–Ó$Č ąéĐéÔH,Žâ™ÇÍ3ŚůE 02ŕĚą:KĽ+”zÓKRé’yݘŽĐ^ŤM H'ář˛żß'ŔœžńúËŽŁÍŤ×ˇőăŻŐŸzţeôíď˘ÝG7;•Üę“DQüŽ*ˇ– — ‰âSU*mfŸ2Xšˆ[­›×öćvîŤ'fčďËYÔ›~ݡ‡úH,­BƒÇvtFŰ})Ăź°Ž˜u”ĚŔ‰~„ĆuJĽ$86íˇ“rę˘UV"@dV(Lnůʡ r[ÓŘBŰ Ă$‡†-H,rۄs.+TQ/-´Ü ę]ÇŠ~ÁZRaěÖc}ű~x7=rœÖoPŰŢ|óm}űžű˝%ŞŐ™ĆŞÉ•fq‰é–Ű–ĺ% ˛°pŔˆ)óş¨q[#”đÚ‰En;J$v(Ď[Śm›ąÓí<‹˛QóË)J~]ĚČRiýÚMâű1ŢŐ|kŢMNŃ2zţRBƒ–ŞkĐÂ}uŞlꙐX"4ÓŰXĄŠsŤ4ś!ŃRŠŻ?I4ť†k šďŘpƒűGŰB…Ó•RWœć#¨'Z~-ˊˆiږ@ŽXÉ$–O|ú=d‚÷źë?šŸ˙¤ňCŻŔ@bqĎËţG÷ŇÂü|ĐW‰EĺÇŔŠvǸNŠ”ÇfŁývRNýB´ŞŔJˆ,Ŕ ƒÉ-_a ‹Ü$šműа­?KDfQ]Ł•NŇäßÝGKŻ?‹xŚűeUőţ“4ńö拳úŕ_ýň7iŐŞUôCŻü~ënRžůéŸţá݉q˙ůßNĐä„G/zîtWçÉçĽ|ŕŁsôŢŠ—. ,ŃŻÔ) $›ś ąČmAb)FŚm›ąÓí<‹˛QóË)Jbę̚rޕ;hrőeÁÚ-3Á'+6oÚ×Lj˛yŸ§`YĄć‡—véÔg™fo {'ßL‡W]­íť6ťDw~ůaĽÎw~.]xîďŇŐőŁ´im…ŞëÔç§2Πś\׏E]qœ žhůľ,+"ŚI>3V ‰Ľ˘‰kč“ňŐó‹›xćqóŒi~€ÄŒ 8ł@ŹÎ:RŐ!X’‡:đ^RKHhĄöx]$h)­1TŻEvim$ĆÚ˛f=˝ňĘgҚŠŢ>m{PşkÓ˙s횏íó3VŁUS´°źŞä—ÖŇE­Dƒ™Ĺ[>˝ ľî>‰ĺo^ůstQŒÄâăŔţ}47w2 ąüŸúszŢŹ‰ĹłP`Ź+fąmpↁĄqR) ŽÍFűí¤œú…hU•Y€“[žÂ$š-H,r[ĹL,m•Ö/ĐŽ€úB­Ţr”Ś~ýŞ?q#5vL-5hěîYŞÜv,5˝Oę ôíoÝDW>é2Úşe38q’nšůvş÷ž”vő:ŃŰţi–ţëÓótíU“´iC…lĐWnX GöÔ) ţ˛BŮgdaXlڂÄ"ˇ‰Ľ™śmĆNˇó|,ĘFÍ/§(YŠéi4w~éĘ Ďz ňŞ) ąřS*/ŚŢ¤çďcúč?FÎnmnÝGY sź{ONŇvm¤ëď;BŤ/ov+ÓTYsy`[ŸýQcž­[lMqƒ=q™řË")ßý•ĽŽ8ÍGPO´üZ–ÓU>ŕ+Ä˘Cö¸ţ9ŻŚ˛ÂœŔŁW` ą¸‰g7ϘćH,ŔȀ3 ÄęŹ#ÍĄ:tVZŰÜłM­ĺzB’FH‰ţí÷×IúŹÍ§ĐK/*MŒMPŇÁx}’ŒŇŤ=ˇ´HÇNtČ*ąĺˆRMŒÔˇF´›ňՓÓôWŻřYşhǙ]~}Ëɓ'Ë/üó_Đ-Gvяž"Ÿ‰%mŚ=?:bÖQ2'nř×)•’ŕŘl´ßNĘŠ_ˆV@dV Lnů [Xäś ąČmSfb‰ĐYZ¨˘EŢđćę4öĽ$ÁáCGčS˙‚z˘ĺמʈ˜Žň‰H‡^Äâ&žyÜKgƖĐnőä ˝őĺ?ŮGb9|蝘=Ö&ą|ďČ.šÜ´VČťφXWĚbÚŕÄ ?Bă:ĽR›öŰI9ő ľĂ ůV@dJ“;šÂ$š-H,rŰ $–@=XV¨˘ľ´Đ("œ‘…5fdaXlڂÄ"ˇ‰Ľ™śmĆNˇó|,ĘFÍ/§(9ˆ9Źí$3˛ř7Ţ™Ë˜ŽÎmwšwľ9(¸jŞJuž âQ°¤_”OCߑj\pĽÔ§ůꉖ_˲"bşĘ$}|üżßMyáĎ} M<ţĺ4~éQVœř——]čH,nâ™ÇÍ3ŚůE 02ŕĚązęŘcş’ÄC„„îđí˙Ą…ĺE:|r–nßóžq˝ţšç“2ßf"wí¸k_4R­z]ď/'ôÖüIş`ű]ű9DǏ‡$–_|Ç_$–p&–ŒPőĽ2űѳ؇68qĂŔĐŔ¸NŠ”ÇfŁývRNýBí0h~Y€ĂäNŽ|Ó!ˇ5-´Í0ü@rh؂Ä"ˇÍHbńá/)ÍĘRBK{F– ł–8ĘÂXNČŚ-H,r[XŠ‘iŰfět;ĎǢlÔürŠ’Ł˜ţ”ÉÇQDĄ~âˆGă”ÇD2§Ź›ĐĘg PWç#¨'Z~-ˊˆé*pXB”m&ŃŢă1+g=[XÜÄ3›gLó‹$`dŔ™bu֑ڬ*ÎCגAáŹ*>ĽŃ#ő|ŠJsľ-k4÷‡´ŸĘâ5÷WÝĐW8J¸ń˜SN§_v]‰%zĽţÍn§OÜzC0.Ä´~f ˝ęŞgSľZU&˙ॽtbaž˛Ŕ'ąüéË~˘Ärôča:vôH@bůĽKŚvÖWĹrB~„ĆuJĽ$86íˇ“ręj‡Aó Ź €Č”Ž@b‘Ű‚Ä"ˇ )ę”Őś{iĄň1Y"K@hxxŒ™XlڂÄ"ˇ‰Ľ™śmĆNˇó|,ĘFÍ/§(ú m6XĽ2Œí¤?ë ×;ß{WÎŤĆŤZůťăç7>ćĂÜýBoĽÔ§ůꉖ_˲"bşĘ Ü$–ä@e]ţVĎń,@bqĎáiÁ˛BÝ93őÂÍťîkos+÷čżAđI,ňҧ N9Łkż? KDby󿼍n=ş' ą°Şo4Yő•~tÄ,öĄ NÜ0đ#40ŽS*%ÁąŮhż”SżP; š_`…D肢‰En ‹ÜV0KŰÔóbŸtýuÍ'˙'sv6˙.7ˇo­TčŰ^•/ĘĆ×nĽ5ç\IckśR}qŽćž‰ć÷ŢI:hœ>CőK7Ż#ďŘ2UoĹ@ď<‚Äâ&žyÜ,'TőŞ=ďîô᛾B7>|O;f4“Ę%§žMWŸsIOÎLˇěžŸťăŹŽ1ÚűîĽă sÁM†#?Äí{ˇ?LŤ&§é^üĆ>ˉłt¸EbůŐwţM0Ë䌾Á 1>™W[?â”öSł€uĹyçbŕÔFťc\§TJ‚cłŃ~çr̀Äiß@P´ ąČmAb‘Ű’X-KÚĆ6üĄśŘEb‰pNSö–Śl%ü4b|Œ™XlڂÄ"ˇ‰Ľ™śmĆNˇó|,ĘFÍ/§(ĺtţ*~›9DŸŃ (5ÄětŸCď‰Rç“tnľd&śŁÓ8A=ŃňkYVDĚ˘î‹ ŔJ!ą¸Œé7SĂđq˝“‹›xćqóŒi~€ÄŒ 8ł@ŹÎ:R›Ő!ƒŻöl+íR:ă˛F‹<҈ž7?>™ĽŃ–7蹗\EkŚVˇRˆ>ťůkô‡înτíëúv[Vݧ—\v]Gą•ż|С¸ŁŻqźmĎ'ąúí!ÜÎAűË ýńËɓ'čĐĄÍqç ýúťţś=‹<Çmń°Ž˜Ĺ>´Á‰~„ĆuJĽ$86íˇ“ręj‡Aó Ź``FPľ ąČmAb‘ŰZ ąřśÝK %_ĚŻŞ/*ƒÓ›•§7jôéĘx×~ŻRĽOz9аúě+hzŰš4˙č˝ÝŮmœ ĺ§oUÚ.?çűÂ~ňNÔĘŁY8`ŕˇx™ ąŘł‰En K12mیnçůX”š_NQrł—Śá #żŸëÄÍö7ü‰Y?q$÷œSňI=ď^Šíq}D–úkƒĽ…”ov´Î_CՏ ‡$–pV–€Ě‹=[Xäś ą#ÓśÍŘévžE™‘<6°,ó(űH%÷Ÿré 5 …Ó>÷"˙œŐůDđ+zWüS˘,uĹi>‚z˘ĺמʈ˜EÝ@Xú1”ÍŻe :FÓrékkĺžô5ŻĽě@bqKÓÎÍ$@Î,ŤłŽÔću,8śh Ą@ŤEZń‰*W‚Wăţ˙źÖró Ň5ÂĽ…ü>\Ł5Ť{ô´Ç\ÚéŔě‘`6–Z#ěďEĎ.3Sô#W?6ĚŹĄř řűěŚýú§šúuÚžnSWž‹ËKMGű— ˆ4Łô啞›ĂÂÂ<:x 8Žß|÷ŰéŽăűhÂ_NČ?6ŻE^‰4ĎAŔćńŘÝ=†uĹ,öĄ NÜ0đ#40ŽS*%ÁąŮhż”SżP; ÚM‘XÉP´ ąČmAb‘ŰZš‰ĽíŽEb fdI(˜)ňůřéńV č TƧIՉ™ž}<]%¨ô"K°Ţ+ëůĚPÂk$šíАXrčĺŒä‹ĘŒnçůX”š_NQ*ŕüU†rF–h)ŸÖ÷äžsJ>ƒm äeПĆůꉖ_˲"bu_@béĆJ °¨`rü˜‰ĹM<ó¸yĆ4ż@bFœY VgŠÍëŘŕŘü×ŕţXođ|á…[ŃŹ,ÜÚď“XüŁßsó‰/ţwŸĚRin­›šĄóśžÖę“ßť–ęą™ą›>ÖLĎĐŽ˝žś­ÝŘĽţđáG響ú ZŽŐ‚ýk§VÇę9ÓÁ“Ç‚ĽŒâ9‡#םĺç¨ŢŒť°°|ćNžô~ó=GwŰC×´f› -8vęlwŕŕƒuĹ,öĄ NÜ0đ#40ŽS*%ÁąŮhż”SżP; ÚM" °BĄh@b‘Ű‚Ä"ˇľLb \ś—Ş$–ÍlS0×ṳ̈ÄÝ3`¤méř٤ƒĺz•‹¤•^´´P@h7ßƤƒSÂk$šíJ!ąŒě‹ÓŒnçůX”š_NQr3ä žˇŚ]îľó4ڃłž| Mާźŕ˙ŽÎŁZű{/.|îé$ÁŇÉÝ˙彔iů 0Pˇ´eŠ+NóÔ-ż–eEÄ,ꞀÄbţň@&đ—Š/4J‰ĹM<ó¸yĆ4ż@bFœY VgŠÍëŘŕŘBň‡×‡ +ܚ%|M.3.'ä˙ôŻîm-3DtŢśÓBHÔOn~ö;Hˇí} +ÖٛwĐ+Żz&­™ěţ‘âžc‡čžü1ZX^j?笛^Օ˙RmšuDŃůăžchĄ9Ž[_\˘˝{v‡3n6ú­÷žî:śŻMb‰ďßGŰńYYŹ‚uĹ,öĄ NÜ0đ#40ŽS*%ÁąŮhż”SżP; ÚMhD`BůŚCnk[h›ařäа‰Enë€Äâ#š%ř›`ĺwţ§RĽç7j¤Â*ýÍEmö Íď˝“Śˇ_hÇˋ4{˙7űöWď8NŢąeâuÉ/+űŠrď‰Dy8# ˇ-”ĂW— ˇ‰Enť’fb‘†w!ÓśÍŘévžE٨ů弟Ď_LŚłLĎîŇşSW)—쳆'5?ţ žß>ě›~âȑf)+üśsvĎźlY˘”|şuějý‚.Iޞ5–Ó8A=ŃňkYVDĚ˘î‹ H,îŕ<­ ç|Đ ą¸‰g7ϘćH,ŔȀ3 ÄęŹ#ľy[8ś` !nłtr{;œŠÄ'­xíŮXB2K%řQB¸DŹżŹĐćŐkŠ7ňˇş;˜AĹo_Ďظž|îăčq§Ó÷ŁC'ŽŃŰżôQ:š¸@{öčm–×L­ 孛@tt‰%šĽž¸L?ű˙MŒŃŐ<ž.;çú䡿BwßGă×´f` W¨zĄ•Öż/ŸˆĚb Ź+fąmpↁĄqR) ŽÍFűí¤œú…ÚaĐn@@dV­H,r[X䶎H,ëÖl,ÁŸbď˝Ő ş´Q§ ~>V§;˝ÁK÷ě˙Ň;hçüU'W H‹i˙×ŢMőšcý˛ĺMžóAZř‰s‰Şýšy5Śńw>°ň“Đ™‘EsyƒNbd†^› ąČmAbIďBŚm›ąÓí<‹˛QóË)JyŸ?îžőé,ÓӘg:˘ Xڇ?çMĂÇ^ş;;‘%‚Ö˛Dœ-Ÿpđ0öWŰď;2ˆ™§LËVPO´üZ–sĎ$$sMVQA•›í˛‰ĹM<ó¸yĆ4ż@bFœY VgŠÍëŘÖąőX”gb zkXâd–h™Ąpö”^ňÉs/ž’Ž=çbš™˜˘ŠńÉţ8Mýăó'čożř:6˘kżĹÖ ,6­ZK§ŽßLťh]×L,-T&ĆhbËZŞ/Ôč‹wßL_¸íŰTY=MÖÇt{fV Ćźƒţig‰ĄPŃRaąŽ˜Ĺ>´Á‰~„ĆuJĽ$86íˇ“ręj‡Ať }‘XAP´ ąČmAb‘Ű:$ąî˝J{Vüĺ…~e|†~´žH×6jQVŽ5í>P§OT’gMY:˛›výçoӖë^G3§^Ôî-ßOżö:ńŕwm+ˇŁÉˇŢMËŻ8;§;űšŁ‰{ˆ*ž$|KöÂáŤË…Ű‚Ä"ˇ‰%=ź ™śmĆNˇó|,ĘFÍ/§(ří[*HÓŽCů˘,´ŤľF&ű“Î=ç”|B49ˊˆiœέHć4fZ`čH,ŮŃŰŽ˝á†ŸŇ˛űî?|“nüÇoŇ÷^ü ˛Ç~čIdŠAm´ôš‰ĹM<ó¸yĆ4ż@bFœY VgŠÍëŘŇąq{†“Î;Áżˇ—ੴd>qĽĚŇŇ!łřÚ'—ƒżńz:VŁ 3ëZ1ús;6’ŢţĹÓÁÇb™wäţL-[VŻďĘőľW?§ióQ:|ňx{ŸGÝGěU*4žz†6lšŚÓ7nĽśŇDuŒžýđÝôĐĄ}Ą>‡v^k€[łĎD$–čœč,ʂכÜđ€o %3pↁĄqR) ŽÍFűí¤œú…ÚaĐnŔ@€ČŹ(ZXäś ąČm“X|č,-ÁďNüYu’ţž2A;››ĹŚĹĂ^…ꔎĽc{i÷ý_›Ů@ăkˇPmá-7÷éŒZTęďÝFźe’xí8ŃŃ%ŞZ"4‚ŮZ˛œ?_פCSÂk$š-H,éá]Č´m3vşçcQ6j~9EÉQĚžÁąhp‹ťÉ/í DŘB2Ks°‘Ł–¸żE֚UE˙\Í/7ŸšŸZ{v4u>ŠÍŹJ^–úiœ žhůľ,+"faů¤€~€Ä˘‡ažmĹzWç:‰ĹM<ó¸yĆ4ż@bFœY VgŠÍëŘÖąQřZ<"q„],/\V(XNȧŹtć^‰F„+Nƒ¸ŐÝôČ˝ÁŇA=-SbĚ}ÇŃŰżü1::—<+čűŚ N9Łkßś5éWŸ÷júî#wÓÝűvŃÉĽů Œ?ăËęŠ)Ú˛f=m]˝NYˇ‘ÖOŻîĘŕY]A˙ďżßK÷ÜěroPű¸Cjľż[ëŠYěCœ¸aŕGh`\§TJ‚cłŃ~;)§~Ąv´›Y€E+‹Ü$šm$– Œçľ?¤9Hx˘Šw'UI‚Úܑŕ#w`1řdAŔž×űžş\¸-H,r[XŇĂťiŰfět;ĎǢlÔürŠRŢçO![âEšŽLÓP! DIw'/ç aÔ'ą,,7RóIEBľôd*;-™+żNóÔ-ż–eEÄ,,ŸŒ×9Ä˘‰•Fb„´s‹›xćqóŒi~€ÄŒ 8ł@ŹÎ:R›×ą­cëľćŇŸ•„[?Őŕŕßđ{4‹Gܢś4Ç~÷=DŸžýzÖEWöÍbßňÉ/߸˙6účÍ_Ł…šú‡‡ßzđNzÎĹWŇtϲDţě*WyQđ|ԝs˙AJľRĽËÎ8Ÿî?¸—˘iY:KuŻ{­ÄžĂZ~UâŢo %3pↁĄqR) ŽÍFűí¤œú…Úa xţ€Qˆ,@ÉĄ¸‰ƒÄ"ˇ‰En›‰%ÍĆâU 'Vu _].Ü$š-H,éá]Č´m3vşçcQ6j~9E)ďó—r]:HgMŸNŽ16ą@;ν™N=˙ť´nËnšZ}”&§OĐâüjZ8ąžŽíßIťďš,f‘üŰ2ĎB랔ĎÜÜ4ń"­;6FÇLi哈˛Ô§ůꉖ_˲"b–OÁí,0’‰Ĺ.ţ骡iéE?Ţx܇Ż&HăŘäQÎ ą¸‰g7ϘćÁđ’XĐĆ=ŕĚą:ëHm^˘śŽ-nÉá+ň€źBYYüż>ń¤ĚËâŁě÷g-Š7÷?†hZü˙?zÓ×č{ť g_|˝y;­šœ ŹŽĚÍŇÇĽťÝE7=rÍ.̵ɗí&2ÖXFýŇšĽEzߡ>GŻťúyJ˛f˙ę=ý{"ě>r ľÜ#Żp°-3zඎčÔ˛Ž˜Ĺ>´Á‰~„ĆuJĽ$86íˇ“ręj‡)ŕů F ˛%†â&‹Ü$šmŽ$‰Ĺ˙ťÂ™,(áľ ‹Ü$–ôđ.dÚś;ÝÎóą(5żœ˘”Óůkaľd]kgˇ–Ť2ŐjíŤÝBgÓÎ~!>1}‚.şöŁtî?MՉ*ycš ľ˙KľuÍńĹIš?JÓŤŇ†S¤3÷-ŸOž´PW>cË}ňŐkÂ)٧Ö.ŃćÓćHü Q–şâ4A=ŃňkYVDĚÂňI ý‰Ĺ=†e—¤<˜‡íޑaŠ€—( ą¸‰%‹içÚ‰3 ÄęŹ#ľy‰Ú:ś8–˛×ZP¨ttăd–¨ĹŠţF„–Ň ű쌿ýŸÝá!›ýË -ó"›Řňťg˘Y5y óó–]÷Ó;žöIzĹĎ ™‰ÉÄü’Yźđ˜ÂÉWôĺ{oĄď‚z˘ĺמʈ˜…ĺSp; Œ$@bq‡QZ‚¨7×b‰-F‘ x‰‹›X˛˜vŽSX¤8:ëHm^˘śŽm 3$ľ„łłhÍÔ=Ű6ş–Šl¨˝/0ń÷KɆłś:wŇmý$­]öŷţřż÷ŃÓs=ńŒÇĐęÖL/*ÔuÚ{ěí>z€v9bĚé:[‡˜ciĹ~ŹBąs  ֳ؇68qĂŔĐŔ¸NŠ”ÇfŁývRNýBí06ŸżĐź%ˆ,ŔĘH,r[X䜐X‚°­ŮX2 ­4„]23ű’Ů‚Ä"ˇ‰%…ž¨ĚŘévžE٨ů弟ĎßY÷@ŃĚD…ć–ętéűčß÷ŢB_:¸HWnź”ŚŤÓdŒćŔßĹ×}.|ň‡¨˛ú"ŞŹş¨šŻJDá/ČB"Küߒ7Ç7‘7ś† ťˆ¤´Bô˛ÎČŇÎç?ýiۨ2s!yÓç“WÄÁŔeđŠ5UOŁf"Ԙxq7e^RȤĚ<ŽßTŁ91eřęráś ąČmAbIGĄ/*3vşçcQ6j~9E)ďóג%ŽcEňŚÂĆUctöÖ1úžKnĽĎÝJôÁÝťiűÔ6Z?ś†ŚÇŚHЧ=ëčÂëžH•ľWPeęěfĂ<Ţ čwżZśŽ’×l§šáĘůd‘:y“ŰCńÂJ˙ˇż“˛çó?ÍđST]w yă[CbM´Ž¸OŹićÄÜlťá`aeú,âąuԘť‹üYc´Ů$#Ë2W~ć#¨'Z~-ˊˆYX>9 PĽH,€."R‹űk&Ă(’Í—(šÄ”ƒÄâ&ž~LÜD€pfXu¤6/Qǖ˘_Ő'"ąt–jdhY!ŸäQiý"˘¤x­Ńţ(d›#˝Ddbő,ižâÝÁžă‡iďńCä) ĂžwűěmĹßÇąűN§ˇŸšUőYŠë)HGÉ œ¸aŕGh`\§TJ‚cłŃ~;)§~Ąv›Ď_h^Y€•Xäś ąČm $ąáŰK UHU *Mń/˙ĚZúž'w^ÖÍL{ôÔk&éš+'č˙ţůqúň7OUhágϧĆŮŤ;OMPíş-TżlMţŐ=Tyđä@ÓmÍcű˝ÚmĺÎŻźýßż˙`c‰Žm,ÓoŒMÓáĚSIۨËEhڂÄ"ˇ‰%…ž¨ĚŘévžE٨ů弟Ď_ęmąó›-ż™ŠV‰%ř5\Ă_ם~|b‹? č/?TŸ%^>˜ăŰGn!]DůřDšęş'7SŮćăk‚YbüÁIŸXS ř4Á`eĹ_ö¨™ÓŘZŞĚœ×"łÔՁŇĘĹ6ÁĹÄś°:&¨'Z~-ˊˆYX>9 PĽH,vËŇAŚ1,žˇ„– ŁH6_˘äSn ‹›xú1ѐ=ŕĚą:ëHm^˘6ŽMS5ZNˆşfLéYr¨Ĺx‰tŰ$ŻŁ~‰dĄ?jéŘhĄ9e؆{ŠË6ęł{]íŚëŃGË ejWYWŹčŔÚşn8qĂŔĐŔ¸NŠ”ÇfŁývRNýBí06ŸżĐź+ ˛ĺH,r[Xäś“X|Űh6–Ě’Źůϛî"ąÄ1>ćћz-ÝuďaÚ°˙ĺŐŇËOď"ąte°zŒ–ŢxM˝ĺV˘ĺî% üt~Ą‡Äǎfţ?[_¤ˇdú%üđŐĺÂmAb‘ۂĒŽB_Tfět;ĎǢlÔürŠRNç/úŃŘ@ŠÓômÇŞ=ĺ1kč[÷Ÿ¤ ŤöĐľŮ č-ÔŤĄY#9…HćŻSŁZ§WýđAňŞ“Áň=á ,•€0âůđĘTs|°ÎÂÂ-YëˇqáĎޏ7ą¸v”‚Éźř _ţŽ›Žö 9N9>ßLŽZŁW˝öP8óŞÇ’7ž1$°3ÄL„9ůÚţŒ+ÁO÷|bM­›OŹáĘLSő”Ö2C PŒó•Ś~ç#¨'Z~-ˊˆYX>,łV4@bąƒˆÔaźôk2LŻ 'Ś÷Ľœ9TpŚÍ—(şF1ĺĆ ą¸‰§ )ĐÎ,ŤłŽÔöm8›ŔHľËŹ5+KřÚd”¨­ Üś–ŠĎhŇזQߒEÔ"Š ŠĽ_ű|w^řsß÷NRƒ-,=9ýÉhŠsč#pↁĄqR) ŽÍFűí¤œú…Úal>ĄyV2.Ź#Xäś ąČm‡€Äâ#$ąTÂĽ…xÉ V)ĺS“˝ŕ9ý„žŠRíęMJŰĆŚ Ş_şĄo˙c¸Nç'X"<žŠszŠŽ=”đÚ‰En K: }Q™ąÓí<‹˛QóË)JyŸż ç ođ­)›™¨Đ“Ď_MnŸ˘ľÓÍöłJ4=^ŁéąZS~Ś[Ÿŕűxř™™ ˇ+´DcŐeşę‰Çir˛AŢĎÖl'ńüéN–Š3ł‰"iŸřR]“(žlć5Ë­ýńsšXň[˘ŤŽš óŠŽ&oę4ęf:ÄňĆŠPÓKŹŰŘT™¤ĚH8DO!Ł4™‰mauLPO´üZ–ł°|r JXěŔx&ŻÓ>ĺKąíÍF“aÉćK”\bʍAbqO?&R œY VgŠÍKÔĆąeŹË~=䎿Ü&|Ä÷ůh4˙†ŸFđ—[żi´Č$;ŚÎłwu÷Yx˙—’XşâđÉńí,Ë i‰sč#pↁĄqR) ŽÍFűí¤œú…Úal>ĄyV 0# P^€Ä"ˇ‰En;$$– ŻŇY^(ĄP׏ŠĐś-éœĆóÎîo.xçLó…Vúŕ[ăôiŞ~Ť{ßY ˝c<§ŮÉzŘsÍš,áľ ‹Üś$Ç˝šB_Tfět;ĎǢlÔürŠRŢçcł˛ @4Crš­żĚĐ9Ű&ƒßTŐęŃ@Z\=6ĐÖ—Ł}Çj´Ču:űâp9 Ď_(˜âÄ_2Č˙,‡łˇKůĆľÎÇ× >Ö˛C­OľŮÖ֎ LűŠç‡3˘m[7Öu,ŃŔ棳Í|u:ç’p=rorGL‰ƒx܌í5Zۍ˜,öá΁úÄnô/7(ztĽúiœ žhůľ,+"faů°ĚXщEögi;ŚĄB”“‚Ň9Ö ŁH6_˘äSn ‹›xú1ѐ=ŕĚą:ëHm^˘ŚÇćˇ#}c¤I“ŒfQĄŘ2Aí69ęôöÎÎ[F¨]Çcł˛Ä—Ĺë"aúd“öŇ>ýM˘6‰ĽG§=ż› X~)B}NÜ0đ#40ŽS*%ÁąŮhż”SżP;ŒÍç/4ŻŔ ˆ,Ŕ …é]ßĞ3ě5ÓقÄ"ˇ"‹řŇB‰ĺŞI(i4účLRÓt˙|VÂk$š-H,fîĽ2mیnçůX”š_NQĘűüižƒŢáŔ`@/Ööa|ýńj|ĺŽ$Ţú_ç—41ćŃäšyŠř—ž?ÓI°„PĽů˝5@é“X‚™Oüťŕ.é‘Z"ҋO*i„K%`Ź•[;ÇöŕžGóË oÜܴĐ·üUŘ'ĘԃĽ¨Q (Ů_F(ČǏżÜɃ¸ő7ĐŠLNfç´,őÓ8A=ŃňkYVDĚÂňÉa€(@bq‡ŠW˙;eEí–§Ú÷˛Ű9ƒŠMë F‘lžDÉ%ŚÜ$7ńôc˘!zŔ™bu֑ڼDm›A>e„‘VZęÝ?˜Ě¤Ń˛‰ú”qĹ÷ᅌ•ÖŁ4w“_ˆŰdŠí‹’dęCKđWÜţ'ŔÂR˜ĎL,Ż2úd/ŕÉřƒ–ä“XÚ?krrńój-Ô&Öԉ’ÚooP>Ş\2ĎŔ6O™–­ žhůľ,+"faůä0@ ” ąŒ6˛.á#.ď\É,F‘lžDÉ%ŚÁËH/ÁœÇ4żF@bFœY VgŠÍKÔĆą ó &ţ7ŻÇwőqƒÉ@IofżťZ‰\rËoďţ0HĚžiNźŽŰŞQžLöľ›¤ŇŻŰ‘ĹŽŒ;ú‘/Ÿż\RWńĽ•C7 ü Œë”JIpl6Úo'ĺÔ/Ôcóů Í+°Âáz˝2˜ŢőMě9Ă^3M‘-H,rŰ!$ąřh/+ä/1¤°~˙GćI…“sLýô…:}qżŇś˛wĆn>Öˇ˙žfNˇTÔMĐ7*c´×ŮÔŃ%ź6Ab‘Ű‚Äbç/*3vşçcQ6j~9E)ďó'8ƒšěŢ\^Ň÷fK|ŮžZ#œ˜é,ťĂő“Ěpâ/Ĺ|ˆƒĎ|řŠ/„űŮ˙,5÷-E$’€ÔR‰0)ř(ÄŃVýż$’˙wbU,Ÿ€¨˛Ô"¨4ăq˜ľ>a^ aĚ6ą&šĄ%"Ř$œô8g–ťwwΟ7ZőÓ8A=ŃňkYVDĚÂňP§ĺ ” ąŒ6q‚Glo|öP⾙LşČ 1[?ć‡ă~B§Á'ž/ Ó´śC ˇcŰmˇt-Yg)ĄŽî!Ätfu‰“_˛˝ţo %3pↁĄqR) ŽÍFűí¤œú…Úal>ĄyĚČŹ$˜ŢőMě9Ă^3M‘-H,rŰ!%ąřgcЍ—jâSŸ›§óάҋž7Ó'›_`úÝ?=FG6ڎh75śOQý˘uýń,ÓÄßݗ¸|џU§čw›/ĚN§~ß÷{úëęšA ŻMXäś ą˜Áů‹ĘŒnçůX”š_NQĘűü)d_˘Ąsżyű×ió}Âqň­ý%ř|Yu"¸~‚ŘoÍÄâĎfâĎĆRé9ˆpś“pyĄˆ4‘MüĎ" >ˆÖ­ŸŰ˙tçÓúI\u2žĎÉаŇÜ×đ—Ş3Źp´Ô‘ߡfeiĎĚŇÎŁÖ"Ö$ä?$Ű2W~ć#¨'Z~-ˊˆYX>Âę´|R$–|°đîLWzrI^Č0Šdó%J.1ĺĆ ą¸‰§%ĐÎ,ŤłŽÔć%jăؒT=çÎĆΞýŕ˘ki „e†ź–mđ׏íym_Á˛CĄóö~‰!nu¨ƒÝąÔ#ŐvN<€l½K uĎźBD1Í ›řRCbAV2 wç'M/hž${Ró…ÚşćńićűŐ拾OVĆi™\ „×&H,r[XĚŕüEeĆNˇó|,ĘFÍ/§(ĺ}ţ,œƒAc„ń傂í8™…;úÝ$—îĽ‰ŞąŢ/&Ż2,ßĂŢ…ËňT:‹q$ZF(XÂgšš+œ ş…ës¤>őÉčʧvŹ~< ąÄŸŔäÔYę(ü]4K‹Xăçmü[”ů(džŔNÇož2-[A=ŃňkYVDĚÂňa[`Ľ$–~ô.Ç7 ˆ^âeľN¨ňęY^ÂćK] ٘rcXÜÄӏ‰ĆčgˆŐYGjó5:śVÔB>áămÔžůý7ŻłZlĐď ăDívřˇŐĽnY¸üżŤE\ají É/ŃOźŕßJřˇůĽľälHˆéM.úڙŚŃG\é<űôĎŹóŃ"ŻÄu-UŸľEëüőE¤dDˉ~„ĆuJĽ$86íˇ­úÍjĄv›Ď_h^  Y€Óťž‰=gŘkŚ)˛‰En;ä$Á’B­ĺ…t~Áöőo/I*c_=|˛Âö͗jţÇ&V†]/ľN†´œAb‘Ű‚Äbç/*3vşçcQ6j~9E)ďó§yΜҳÝEfш×oűçî%†ËL•j‹¨R;BŢřĆŚÂD@f ‰#Ń"@-ăŔI|”Zl”ĽäPiI÷çCÍ|hlM‡XÓEd‰çRo}˘%Žjíĺ†8ČŇXęäŇןŽRý4ÎGPO´üZ–ł°|Ҩ2 ô‰ĹŹN˘˝™ćtr­ĆÉҘÚN#ťXÜĒŴs‚ĈŔ™bu֑ڼDm[Ś|ŇŰź8Y3"°ÄűŚ ˇş|qÂKĚ6ř0ľga |…ŢÁĹköߎ›ľ7fä3Úîu%NHiÇďşét?Ť ž™ĽăťĺŐ2‰Ĺ8qĂŔĐŔ¸NŠ”ÇfŁývRNýBí06ŸżĐź@@dJÓťž‰=gŘkŚ)˛‰En;D$ŐŻâÚłą`f*ĺľ ‹Ü$38Q™ąÓí<‹˛QóË)JyŸżŒç ‹Ě˘éˇˇ]흚Ľ‹ĚŇő=œÍĹçTŚ"żuâĽG‰Ć77ýś–ňz– ýĽ…:d–öR>ľ””x}śŃ>FoŔ/ŕÚsŹÄň fdŠÍ’WnnŐÚ3ÄtwY¸5KL›TăZ ą`çń<ľź0™–­ŕhůľ,+"faů¨ÓňJ XěĆŞŐj46=nÚź<|ŸŸ_  ƒÍ›7śż//÷ÎMÚ_XI]|X†-ŚyE‰pfXu¤6/QÇŚęŤ&­_›Éyl֕`łŸÔ‘Y.?ÔEváŽe†"QÉßQ‰5D^ż‹×{P69Öyî%ž´%=7žíĎK˝$™č{÷ňED'Óœ¸aŕGh`\§TJ‚cłŃ~ŰŞOŹj‡ąůü…ć" ôÁôŠGwŻ™ŚČ$šíˆ‘X|Ԗk4>1NFƒV­ZEe‚\ńwbѤ3žę§ŕK,u쇴œAb‘Ű‚ÄâV^TfětKeŽüӕ_NQĘűüY:}d–Ţ&‚ú˝o™ĄžŮ]â6Ó:ąŔ´{×m˝tžźjw{ĚfâϲR™lúâŔ)ÇfcI˘­3íÝ=M§n#šk (ö´Săhęí~d’ś^śĐOýd3^­šoMŤmŒľ}AčÎňBž^°¤5Rň™Ą[šqÇ*ŁU?óÔ-ż–eEÄ,,6°ȀR$}¨–śTYîžç>şŕ1çŃÚuk‚%†Ţđc?|€Á8~l–îţ˙Ůű9Ž*í×3ł9hmKś%˒sNrśą1Ć&Ǒsüšƒ;r:r†Žp`˛#š Ć9ă(ç,YV˛,+‡Íťł3őwuOčžîéŽđŞ{ÂűěŃÎĚŤ÷ž ]]]ŐßTŻ~¤V‘˜î7ůƒD,f¸Ô8qN&$b!(I”“3+ć!ŞSśňD‘Ő3ˆĄXóŸ2ž’›-°šżÍŤćoŠEŮ9‚ÍGŁr1Ćí>•HĄlă7ÖńʢÂ4Úů1P6ĄEABÁQƒI|Ť—RɗD,ęžM"bŠ˝Iǡ$ž;oŽsą~ČaĂ}÷> ­‚šs‡ü_d2î4żĹRZÓkĐv&‹ş/‰XĚĺFĽä¤[Őf*nœŚâ˛˜DI×rTĆÉ:~ŢGU}<7ěXýÝ]\!KöLőÂô†1čZš ɓ˝ŕX˜ć<^¨¤ŔŹdHźOo(Ân›g;Logřăy~ĆěüěžěąÓóSœVœśÇĎN;/9÷QCN.ʏ:*?Z¨ ”Ÿ]6Ďţœˇ#âq†"튲ÁZjǗB?Š‹lKƒ3ľüČ.PkÚ-ąŕsy9‹…"Źźű^8őԓĄŻŻő166îÔ˙!J|›œaŢDőĐâTw&‹>qN 5`ŇĺäLĊyˆb”MdŠŢ;ˇô~(é]ڧg ťŤš ;–ŸţBŠĹŘ{Ě{ňÖżŔŽŐwƒILĺK;žúˇ ­´“ÚúąŹî8ŠÚ}**‘BŮ0ĆoŹţ͢Â4˜×_eŁ!šĐâ ! PÎŸI|Ť—RɗD,ęž "b‰ţĺ[8VŻ^+ć 9 a˖/†łĎY˙¸eeěÂXŁcöœYpŕŇ*Ÿ§§ŚĄ+çŢ Ëdř ´¨;aqhĐc“D,ęž$b1”•’“nU›Š¸ipšŠËb%]†ę ň7pŹÎc†řěůWČ#äě/sý}=°mľűŰÔŐA$  ő´×ßśŽĘ8<\3’Ë„N~ěĄąŻˇ×ÎĎŽ:ůaĽÝVŚ€AĎfqůyÜÎOOtfŤůąB¨ĘÍ1‹XWçää<üđŁpĐAÂŕŕ tvv–ćm>7Ÿžž†‘‘aXťvŁSW˘ KŁqęw´vą$zę%˜“6('g"VĚc Łl(ůa°wlşťfA3`É9/‡ƒN|ôôHů=łyěsĘ ab×Űą Ladl"ř%ÖqĂę~ЈŁč Ý§˘)” cü6ŇNAŁ0 ćőFŮhL%´HČB 8Đ9ă3‰oőR*ů’ˆEݡIvbŠçűŔ}ŔqÇš\‡ł+ËigžGs8lyfLًeGu8 ĚphžÚ¸ ž\ťŢžQWt9ÇsPtŸ]ʡ˛tŢCŃů‘6ł˙Š|Wąýi÷ţô2€ă?˛ňůÖ[WBqŚhOˆşíW/íž]{`ŃAűUĘmY:"–ŔˆEݗD,ć€rŁRrŇ­j37 NSqYL˘¤ëĎp„îŞâůł°:bţôłzr°Ď`Ű4sŮ˝Çćԇ•:ů8ŤvÍĺ łĐߝ-ń[t|Ô´íű äŕąÍ"ůQ[”rňłs.˛_şĂoJZq•ĐtǗB?Š‹lKƒ3ľü0 _Ą%@"|.?§;:ÎĚ̔žc°gĎ^†ńńq˜˜˜pţ jÂÎfG6›…ŢŢ^čééqţňú)“ůňŻĆ#@"–FăÔďh$b!4 ˜´A99ąbSeÓÉOÍDuűčĚěˇ×uł€…ą‰)Ÿœ†Xq{6 .9Ö^űľœ5`ˊŤr!çÄÄ8LNş“ĄĂN‡uýĄ3wěíž.ŔÂĚLśr!‹÷ŠşXuV÷ƒFEí>•Hm˝@ ,ô­X´Q˜óú Łl4ŚÚ$d!´ÎřLâ[˝”Jž$bQ÷mt‹grÜ­ĹsLMMÁ˝÷<'žtŹ+,)şBĹíďź?pńţĐßßçxđÄqá ˙žü*űT_QŸŁÓĘböĐ,8đŔE•Ď|w™°=>5š˜˜´Ë;ą¨˘QŰYĂW‡ˇ|IÄb(7*%'ÝŞ6SqÓŕ4—Ĺ$JşţŞßaˆ_EĚÂź>bű}g΂9ýYČ[=đô†8 ş—á-:NŽ™Mëť ˝0ˇ?ÝšÂr~ě˙şěüĚíËÁŁ#(ĆUš'`ˆĹ —'NÇ& A LÚ œœ‰X1)Œ˛ %ő˙l"x^gÎcÓYÁN{­s×Č8Ěę×řў{GÇĐűâ“w_ýűůĺ':ůěéísv^s֖uáBe˜ąŕ:1÷Ůłő){Ý׿ćgňhB~˝˛{tv–Ä5VÖ ĚQƒU+X׏î9`Œ;Ú}**‘BŮ0ĆoŹă”E…i´óƒ\6S mÚ˓ĐćĐ9ă3‰oőR*ů’ˆEݡÉwbńb÷ŽÝđôŚM0>6žxg.ĚůXôźjE*qŸĂE,<– đIÎüůCö_ľşňO´IĢîŰö"ƒł”•’“nU›Š¸ipšŠËb%] ׁůœ!ŰÎÂ|,_ÜÚGlĎîÍÁ ťáÁ˝saÇ*WěĄÝ%m˙É'f`çj Ţ3ݡÓŮý%,]-x~߯ Üm ?Ťěü욇íS??ľ Ž‘KG˘6!_…~"ٖgjůaž 6BK€D,ř\aœĺGmذrXˇ~ƒó7ěńK´KŁqęw4ąšLÚ œœ‰X1)Œ˛Ő&Uҝ0ÇŃęrçVuu:kŤSůgW‘é™éŻkŃÝŐSvóuן~›šÝá…Ń‘aç/ßu…˙Đ2ŸŸ†Ba& bÉŘóĹ'o˙;ÖŮéŘŹŽ\Ä3mcPw)YŁM0Ćí>•HĄlă7V˙fŃFaĚë/Œ˛Ń˜Jh3Ў,„6†ÎŸI|Ť—RɗD,ęžM.b ťçZťn=LNÎ@G.öDˆŻ"LLLŮ7ÍÄälßžĂÝҸôh ĘŁ‚*ߕ;Tz_„RşŇنxÖ+ďˏ#RżńőŔýT>ŽÁLĄŕL>ř–šsć ÂŔ@/ěÚą;"F˝^4h;“ˆEݗD,TB~’6SqÓŕ4—Ĺ$JşţRރĐÇ yü´.Î/ыŐo˝iř=§Ľóť`ýŽ)¸o×\8eŐ(ŒĚ@ďQ9{Ń ¤Áňîă{F7[pÎN,/讌ßn~ źćé÷-•oé\;?ۧá>Ű˙ŔÍĎ<;?Ë<ůžŒŞą ëKS;žú‰P\d[œŠĺ‡iř*Ř-ąŕsŐăäÎáżŔ^ż~ěŘšćΝ „xl߹ÎłőÎΊźq!`ˆĹ —'NÇ& A LÚ œœ‰X1)Œ˛ićǝ“˛JœLW§ňđČPŹž€!űť{=tĎČ8ě‡ÉéřGĐyqŘâý ŤÓüÍěs^&°÷Ťœ— –.Zú= ŇOmtŰeŐß Cöş1Ç3öëĄY=ŔŸ„ËëÖ %M ŤűA#Ž˘ƒvŸŠJ¤P6ŒńŤłhŁ0v~ËFc*Ą ABB›BçŒĎ$žŐKŠäK"ußą$î…á˝Ă°Ă#ü˜űĚ6č,MdFí‰ĐČđ4 &Ć'|u°{÷wö„ŤŢ–šr[m6čąI"u_ą@jPLůIÚLĹMƒÓT\“(éúKš=b–ż€˜%$Ž÷QDY žuř \ń ƒŰw.€ă‹;ahçt/ÍAç⌻q řVŇÓŠ0švöNtŔ};çAGgÎ:¤ß‰1ů)—Ť’ŸĂŕʇ‹pűv;?ÍüŒŰůŮ1:;ěü,ë‡\IĹR{UwLnşăKĄŸĹEśĽÁ™Z~˜†Ż‚Đ  .—wÎZ3—ë€\G.˙ە0ôę—Áœ9C@¨-[śÚuutŘăk.ç_Ž-‹Sý0;÷%‹.5NœŽM"‚˜´A99ąbSeSĘOí “ů?ÚóŤě@Xóűŕ—ăÓđ6{=t˙Œâ."6v Á~óšs Ţşk/č`SĄ˙ge ;ŻßŠSˆ­Ç{Ü€(0Ćí>•HĄlă7V˙fŃFaíü —ĆTB›‚„,„6„ΟI|Ť—RɗD,ęžM°K} óŮęţşź•!=ŸkĐv&‹ş/‰X 5¨ &„ü$mŚâŚÁi*.‹I”tý5H{VĆNÁü„É–gýą3kÁů‡ ŤF`ĺîů°dj–Řď;ž,@Çü äěWśŸoműuÚąŚíŔ)€Â(ƒüś"Ěě(B>°nllë‡Áî,œsČtwdBó•×r~Î;ln\mçg‡Ÿ~;?y…üŒŘůąóӓ…s%ócIä7›ŻB?Š‹lKƒ3ľü0 _›ˆĐđ  >—'+úa÷îÝđŁ˙ N;mœ|Ňq044ÓÓÓ°uŰvXšň>¸íś;!cß`›=›ßlŹN ĂE,2?0HÄb†K§c“ˆ… &mPNÎDʘÇFŮPňăN"k×r­lzŢF‡'ákĂpz! ‡ŮcC—Â3‹řău8ř.ז•ŃS’AÁÎ뎽Ł0%šű Ç´ýzĘ~]kűŢĘe4ÔýKçdýsWéz`u?hÄQtĐîSQ‰ʆ1~cőomŚŃÎrŮhL%´1HČBh3čœń™Äˇz)•|IĢîŰ"–P8łœ"˜ŸÜ”ŸÉ](![şŘ睢pZ﯏7ŹŰ;śí˛'̗ľţ>8xůčěŹ5ţXU>[c ťŁJ–˝ŕçőľb!ÁbÜۙD,ęž$bÔ *˜ň“´™Š›§Š¸,&QŇő×`íiE˜[Ń'faÁýÝxΑp×ÚqxzO6OôĂţ=#0jśÔ_ÍwŔÖŠ>xzź˜•ƒýgçŕ¤%˝Đ"‰zr^mYúť2pÁá°r˝ŸáYn~zíüLĆägÚÎϤŸą>›ĐÎϜœźŘŸŸZ‘Jč˜Z§r­¨ŠHńřRč'Bq‘mipŚ–ŚáŤ`ą$bÁçŞ"î5kFF†áöŰďr^bńŁăŚqƒ\”Ső!„îŔŔԊX가ä+ŠD,f¸Ô8qtą”Ŕ¤ Ęəˆó˜Â(›HŇČa’‹ŃqěľÎŢŁ÷‡‰U[ŕÖńi¸ľÇ^_Ý ˘ů)ŽO+źij –ŘŸů#‰Ć&§a|bĘţ;ů™4 :ě1p°Żz{ěżÝÎ#…xţFěuăđÇZ ˛ýÝ>xW36Úł=ĐsČ>;ą„řׅĆÁˆ1îh÷ЍD eĂżąú7‹6 ÓhçšlL;ĐÔ ! Ą sBgßęĽTň%‹şołŠX"|Ë7Ö˛9ľgj?ţŘZŘłk/uěĄ0>6kV݇%K€ŮsáűƒÁ>8ň˜CŽÝvş§7m Ăm›žz–|€óyłnýşMpđňĹĐ×ß ?° †ě˜‡v0ÜĎ#öeN8ń(ČuČM]==Ľ˛g‚FßJ"SËmgą¨ű’ˆRƒĐAÉIˇŞÍTÜ48MĹe1‰’ŽżFkϒ­îŽf,|Ňs‹ţo˝éşr8cY?ŹÝ>kśMÁś™9đĚƒ.+ݙăţƸŁÝ§˘)” cüĆ:6Y´Q˜F;?ČeŁ1•@ ! Ą] sBgßęĽTň%K ž-&bń XX~şzAg}"ěÝ3â\ŐďłĎ\Řoá<čëéą§áÜóVŔŕŹ~Řžu'g„ŮsfAOo7LŒO†ćçŔ÷Ť|>ôđƒŕ€ĹűBOO7LOçáœg ƒCƒ°}Ű.xö…gŔôTĆí8|űHYĚZ0Űů-ŢiĐv&‹ş/‰X 5Ý”œtŤÚLĹMƒÓT\“(éúk´öŒY@ôÚbá*›™űăŻe şŕ€9°aÇ4lÎĂȤŹ&j‡ź ŔÜ^ öě„%s;Ą3'žłIŹ­”/ž1Úň}şŕŔšv~vćíüLŰůétóĂý‹5ůéąó3`çg^§óˆ"oŹZNY‹ňhôřRč'Bq‘mipŚ–ŚáŤ`ą$bÁç ăŹ˙řŰZXĐÝÝíźDů̡ĄX|őlXJ|^Îđmfv%‹.5NœcŸD,%0iƒrr&bĹŔ¤üłDwîŘăěŠ255 y{ÂÓŮŮĂŁăŽ-gĺ`Çö=vîËhÁ?˝řŮ0:< ÓůꖔüŮŢsç̂§žÚ3Ľ_ ŒŒŒC—kŒÇ˛2ÎÖÉ;śďvl{v8RąôĚ€!{Bgç™˙ÚĎ7!ąÂf0˛0čK"u_ą@*žń'9éVľ™Š›§Š¸,&QŇő×híYÇV^Cě•ĺÚyÎWžŸĐů×Ńřn(‡ěŰíźĆ§Š029S3ů™"tŘś.{f6Н…ŢŽ Čä7ě’FdmĘÉĎ>]ÎËÉĎTŚěˆź=nwdíütŘůé ćÇŞSćqB[ĚŽ2¨6!_…~"ٖgjůaž 6;ĄáA"|Ž(Nq1‹_í¸ÂâÎ \uS ÓʼnK$V‘JIIÄŇ(œúljXĚđ €I”“3+ć!ƒQ6”ü°š8!J—ÚŻĘ‚OI ţ Tž3sveéYž<đÄ6x€ŐŐÍ'žě sŒžą'ĽYű՝ ‡ ÓŰé§Š÷ĚŚÚâ‡ýČBVÄţAăŽvŸŠJ¤P6ŒńőŘŤoŚŃÎrŮhL%* ! ĄĹĄsBgßęĽTň%‹şo‹íÄâ_ěăŮ™Ÿ€…‡-…ݏ< ˛(Ú#žcŠł ižšŽŠa¸@Ś6?OmŘě<ŇÇň>oÔv ÄvcšwóžXŽ€E^Ăâ`î҅N™{úëLHŞu&˙X!ƒíL"u_ą@C‚ބŘĎf*nœŚâ˛˜DI×_Łľ§F~,nŽÜĚ Y‹Ź„´˙éí´ěW‡4g]Ô፾×[ˇęíĚ8/¨ăÓąŐąD]ŽZ$bQłĽÁ™Z~˜†Ż‚MÄNhxˆŸ+ÎčŕUnŮů\=Žř8xĺ•XE*%ĽÇ 5 §ţA@"3|`ŇĺäLĊyČ`”M'?Ţ_B01šĐGčyżôeŹĄ› 7§z–/€ŠMť 81L*V Š\l+—ŽyýĐľh¨…%tMÁÂ"–˜źXŢ Ŕw´űTT"…˛aŒßXý›E…i´óƒ\6S HČBhačœĐ™Äˇz)•|IĢîŰ"–Ŕ/Ţjf7|W’ÁĄ!X°hß=ŹŞ‘ČU)?…d/˘ś9ý0˙04oČŮEĆŤŽB?áƒíL"u_ą@C‚ބŘĎf*nœŚâ˛˜DI×_Łľ§@~B=žőFËYd '°Âůjâ˘ÚjěQbP´ŠˆXDâ˘Ů„|ÚD(.˛- ÎÔňĂ4|l"vBÃD,ř\˘œzť˛Dűá–W,XcŠXđv}ŠĺTƒş3‰XĚđ‰sâžDHÄŇ`ŇĺäLĊyČ`” %?,"Ž;łŹ5׳”âyÝ=4A" röú)ĹçEĄ|Şqʰ"ĚŹ^×Tg•[YÝrŔw´űTT"…˛aŒß¨Ç^}Ł0v~ËFc*@„–„Î I|Ť—RɗD,ęž-źK-˛š,,?ň0čŸ7 vÚgú™\kîY6ۋyČÍę…ĂN8 ş{zB&%ţ:ł”¤÷Jš‹6“ˆEݗD,А`7!6Ŕł™Š›§Š¸,&QŇő×hí)‘ŸŔĐQă[očácN`܉ZäkÂş -cÉwš*­5Z m"ٖgjůaž 6]_BC€D,ř\˛œňť_†óŠpcpásJŹ"1wl$KŁpę$b1ĂG0&mPNÎDʘ‡ FŮPňĂR 0X=CůűŇd,jŘ`ĺQ/Ä]ˇ‡"„‹EsW˘ĘĆa‹X,ĆÇw´űTT"…˛aŒßXý›E…i´óƒ\6S „PЎ,‚Lâ[˝”Jž$bQ÷mBKőWm"dž_ŚĎ}spâY§ÁCwÝ“ăĐß× Öܘ›€™éŹöű<łYHĽŸˇçí7ĂŁăÉ¸7Éşć Řĺ逮Ţ.č™=™^Čdspô1‡Ăěysƒ“•5Ô ś3‰XÔ}IÄ xb<›Š¸ipšŠËb%]Öž ůŠ ąu|-¨ż†WšŠÇř˙EaÎčüTcF/PV큟ŠuÄw›‰ă$‹[œŠĺ‡iř*Řt} ąŕsŠrĘí̝Ž]D,Ń ą$ËŠˆĹ Á˜´A99ąb2eCÉŤĆŠL)"TŚĹ:Ç2a Á—)fěŠ\ˇk-ŔFçǡXo2nŐ͆ôŘęĽ ‹śKŔŤłhŁ0v~ËFc*P$d!*`ßęĽTň%‹şoŠXâ|CCÄ,˝ý˝pÜé'úǞ€]ŰwBĎ`Eä+P[môŠ;ŤđÎňj],čé끼‡/‡Ysf×ىŠřÔĎB`NEÄř’ˆEݗD,А`7!6Ŕł™Š›§Š¸,&QŇő×híi*?P]窿NÄc‘3Ž×]Ťż WŸ¨žÝÇ]×w=çŤéÚSĄŸĹEśĽÁ™Z~˜†Ż‚MחĐ  >—.gyěˆn›čŕí bŠűĂj Ŕâňyh•SݙD,fřÄ9qO"$bi0iƒrr&bōž5 ƒ‚–: ź‰âĘ$ş”ęĚ*(jî žŤ ÷'>Q°â0őőpŒqGťOE%Rh7ŒńŤłhŁ0v~ËFc* ˛uń!Bg0đ%‹şo ˆXäśf.ÁšŰVô|tct÷ô@÷˘?K˝ [KuaX­ĚŐ_|łť÷;r[–Ż(Żâîîiřęđś‚/‰X !Qoą¤ÎWÚ6SqÓŕ4—Ĺ$Jşţ­=‘ň*f ń­Œ,ŹN‚ˆŻľlŚâFŘ, _ąHÚŇŕL-?LĂWÁŚëKhˆŸËgpw–řŕń;•ˆB,ˆIK˝Šh}N™;‰r ‹.5NœƒŽD,%0iƒrr&bĹUOĚq×íRq"ĚžľÚxń‰ŘďIÄ" ŒńŤłhŁ0v~Ë†5ŚŇĐKhq…Đć`ßęĽTň%‹şo ďÄâE¸Đ……>fČąÔ¤ Uń[~ŸĐ*ü˛ÎŠY0áô"ŸŻ2b|IĢîK"PĆŻcęބŘĎf*nœŚâ˛˜DI×_Łľ'r~j6>‹ôľź7"klQ~˘6+Ćîű ąţ,_ąHÚŇŕL-?LĂWÁŚëKhˆŸË4§;/cÂńE7ŮŹOŒHýńIH ŠpN™;gň™&‹.5NœNF"‚4ϙ2əˆóÁ(J~XlÇlŕ5kÔđÜď"wű s“ÝÉşňH\„A“‡P}œÇ$^!˛RPPƸŁÝ§˘)´ĆřŐżY´Q˜F;?ČeĂSič%´HČBhc0‰oőR*ů’ˆEݡĹD,qť˛ří5w•đXeżčŻŹĐ;RŞWüe˙xáI¸™)‰XʋŠęˆń%‹ş/‰X@&E,˜Ô×Z6SqÓŕ4—Ĺ$Jşţ­= ĺ§făł:ž5ăŻĎ&śž$,‰°[6Ç$PJ—¤5—#*~R6!_…~"ٖgjůa1vd›Ž/Ą!@"|Žd8ƒó=ŒśŹ;?É“ż—W'’xJ_Rrů:#‹.5NœNF"‚˜´A99ąb2eCÉ‹˜HÂrbŻ!ÜŃ7Ž1ŹjśJkMšƒŚpÝŠlŇRă‚dîąhšąú7‹6 ÓhçšlXc* ˝„6 Ym &ń­^J%_ą¨űś˜ˆĽ 11K1Ěab– ŁWcU]9‹špT%1 ŠťŔhUţQ€Áv&‹ş/‰X@ĆE,uĐt7N[$.‹I”tý5Z{šĘOÉ^÷ą,"€çkŠrŹ[ĺKNANąHÚŇŕL-?LĂWÁf2.!1ˆŸ+ÎđŕŐ]Cë§Áâ ¤B+ŻÄ*’“T˙ÇRZĺTw&‹>qNÜM"–“6('g"VĚCŁl(ůaąqBÍab–Č8e‡˜ç•Lň¸ ‹ƒPA‚ucYńeІŔ8Ëj>ˆEË%ŕ˜Č%‰Xhč%´HČBhC0‰oőR*ů’ˆEݡEE,˘ţuĹ.ÁçyLĽ-ž!ŃżT3łű븝ÚÎ.˘ˆŠ-ą¨ű’ˆ”A"=[łĹe1‰’ŽżFkOSůŠą†×¨Ež6ë+ĄăljůQhĄ¸Čś48Sˏâu#žă ‰D,ř\ÉpFŻr[Jţ*i“ąXȜňHÄb†Kç # A LÚ œœ‰X1Œ˛Ąä‡ĹƉ4{ç'ŐçŹđďĘ$ü$ö:kMőÎ uç1Ořą*ď"ՅÄ"ŻŻú4cÜŃîSQ‰ʆ1~cőomŚÁźţÂ(֘JC/ĄÍ@BB›I|Ť—RɗD,ęžm bŠż+ Hu~>ÎÜ"C>ó‹ĹţřÂ⒈GYAHÄŇ ž$beˆEĎÖlqYL˘¤ëŻŃÚÓT~"ěĺa‰%Ů&ŚâjrZ*÷!ÖB›ĹEśĽÁ™Z~¨ńOH $bÁçJ†3:¸ˇčä ĽĹąˆĺD,ĆАˆĹ Á˜´A99ąb2eCÉ‹ƒWě¨H–' cLKfx2ËĚv˝qHĢípÄ:ĐY´Q˜óú ŁlXc* ˝„6 Ym&ń­^J%_ą¨űśŃN,AĄ Hă3z\‹ťšřăGm#â ŤÎŻ |I„NjˆÉ3‰XÔ}IÄĘ ‹ž­ŮⲘDI×_Łľ§Šüů˛đ ĐÚ¤ŻD>é/ľ:Pč'Bq‘mipŚ–™j›É¸„Ä@"|Žd8كăr‹KďqBÉpápŞ;“ˆĹ Ÿ8'n‡&K €I”“3+ć!ƒQ6”ü°Ř8Â4ĺ„V=G™†Ý3,)B ×MÔAë׈A2ËűA#ŽŽƒvŸ* ŠGŇŤłhŁtRrٰĆTz m ˛ÚLâ[˝”Jž$bQ÷m#KUĄ ‹Lă0Ô]}°żĎxE-2ya!| A.ÁçX?°,ą4œ/‰X@$bŃł5[\“(éúk´ö4•!_Ëłř¨´ĆÚ$}Ųęۄâ&Ř&B~Bq‘mipŚ–cGś™ŒKH $bÁçJ†3:8‰Xđšp8՝IÄb†OœˇC“ˆĽ 4 QKÎDʘ‡ FŮPňĂbăӄ%ôÍľ´Ä~ÔÇÄůBśË;n[J1¤ň‚q˙cÜÁhĘş‰ʆ1~cśS„QŤ?IšlXcŞâtš@h…Đ`ßęĽTň%‹şoŠXdýĂ-,x܅ bňԐíŠĐ&Bq‘mipŚ–ĹUˇF<ljXđš’áŒN"|.Nugą˜áçÄíĐ$bi0iƒrr&bĹfHĚ×ň§ş3‰XĚđ‰sâvhഘ´A99ąb2eCÉ‹#LŁŰçjwŃ)_ÜuťTłâ! B?şĐ(ƸŁÝ§˘)” cüĆęß,ڈן$`” kLEě*B3ƒ„,„“řV/Ľ’/‰XÔ}IÄ€˜˜…ŽťZGýfň7ŢY™Źżó/¨A`¨ęŤĂŰ ž$beˆEĎÖlqYL˘¤ëŻŃÚÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُęÖl}…€ ąŕs%ĂœD,ř\8œęÎ$b1Ă'ΉۡIÄŇ`ŇĺäLĊyČ`” %?,6Ž0 FŸŤM˘˛‹fŎPAÂuŁ8Gŕş|˝rŔw´űTT"…˛aŒßXý›Eńú“DŒ˛aŠ]…@h5…Đ6X~uř’ˆEݗD,uý¨!&tąžs 'łëK˜ż Ÿ˜o”7aá%‹ş/‰X@$bŃł5[\“(éúk´ö4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(Žş5[_! ‚D,ř\ÉpF' >§ş3‰XĚđ‰sâvč4D,‰žîŰLÚ œœ‰X1ŰŁl(ůaąq„i0úœL™˘Ö0‹˛Áę@¸nbćZkšž8á4â(:`5%SöÔv 8bőomÄëO0ʆ5Ś2%Đ˛ ! Ą- ąüęđ%‹ş/‰X„´0‰ ĕ÷7´#JTwqQEŒ/‰XÔ}IÄĘ ‹ž­ŮⲘDI×_Łľ§Šüů&Ř&Śâś\{*´‰P\d[œŠĺGqŐ­Ůú $bÁçJ†3:8‰Xđšp8՝IÄb†OœˇC“ˆĽŔ¤ Ęəˆł}1ʆ’G˜ŁĎaŐąłd‹̉mŽ}'C*/á4â(:`5%SöÔv 8b{Fźţ$ŁlXc*S2- ˛ZË _ą¨ű’ˆEeA‡Ćrč!š:ó‹l ň’ˆEݗD,  ąčٚ-.‹I”tý5Z{šĘo‚mb*nËľ§B›ĹEśĽÁ™Z~Wݚ­ŻPA"|Žd8ك“ˆŸ ‡Sc…ă&˜qNýƒ€D,fřÄ8 R`ŇĺäLĊپeCÉ‹#LƒŃç°ę8îş]*ŽˆYqŽ V÷ƒFEŹŚdʞÚ.G#í4âő'‰eĂSč*B3‚„,„–?ąËíË 3ř’ˆEݗD,ęž˙żzđ‰/§œoAw‰1ČK"u_ą€2HĢgkś¸,&QŇő×híi*?Bž ś‰Š¸-מ m"ٖgjůQ\ukśžB@‰Xđš’áŒN"|.Nugą˜áçÄíĐ$bi0iƒrr&bĹl_Œ˛Ąä‡ĹĆŚÁčsXuwÝ.GÄŹ8GŤűA#Ž˘VS2eOm—€Ł‘v ńú“DŒ˛aŠ tĄYABBËBbůÔ!ŕK"u_ą¨ű†wľÂđ…ă”óčÇl+ą¨ű’ˆ”aĽ•gC”iÜllʧLĂ7![œŚň#ä›`›˜ŠŰríŠĐ&Bq‘mipŚ–ĹUˇfë+TˆŸ+Îčŕ$bÁçÂáTw&‹>qNÜM"–“6('g"VĚöĹ(J~XlaŒ>‡UÇq×íRqD̊s°ş4â(:`5%SöÔv 8i§ Ż?IŔ(֘š@W!š$d!´9t†_ą¨ű’ˆEÝWđš˘á;šX‹Ęúu-V‰öŐá­ ą¨ű’ˆ”A"=[łĹe1‰’ŽżFkOSůňM°MLĹmšöThĄ¸Čś48SˏâŞ[+Ő-A$bÁçJ†3:8‰Xđšp8՝IÄb†OœˇC“ˆĽŔ¤ Ęəˆł}1ʆ’G˜ŁĎaŐqÜuťTłâAŹî8ŠXMɔ=ľ]ŽFÚ)hÄëO0ʆ5Ś&ĐU„f Ym Ą@Ŕ—D,ęž$bQ÷Uс”}KP“¨’ëúŞ"ƗD,ęž$beˆEĎÖlqYL˘¤ëŻŃÚÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُęÖJuK‰Xđš’áŒN"|.Nugą˜áçÄíЍ%bĄÁU XőÉt“0‘DrŔ(J~XlaŒ>‡UÇq×íRqD̊s°ş4â(:`5%SöÔv 8i§ Ż?IŔ(֘ŠŐUhX%´8HČBhSčœÝ|IĢîK"u_Kňţ ęK"u_ą€2HĢgkś¸,&QŇő×híi*?Bž ś‰Š¸-מ m"ٖgjůQ\ukĽş%HƒD,ř\ÉpF' >§ş3‰XĚđ‰sâvhą´°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ç2`u?hÄQtŔjJŚěŠíp4ŇNA#^’€Q6Ź1ŤŤ`őqĄABBBçÄ.ŕK"u_ą¨ű’ˆϗD,ęž$beˆEĎÖlqYL˘¤ëŻŃÚÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُęÖJuK‰Xđš’áŒN"|.Nugą˜áçÄíĐ$bi`Ő'ÓMÂDÉŁl(ůaąq„i0úVÇ]ˇKĹ1+ÎdŔę~ЈŁč€Ő”LŮSŰ%ŕh¤‚Fźţ$ŁlXc*VWÁęăBƒƒ„,„6ƒÎ‰]Ŕ—D,ęž$bQ÷% ž/‰XÔ}IÄĘ ‹ž­ŮⲘDI×_Łľ§Šüů&Ř&Śâś\{*´‰P\d[œŠĺGqŐ­•ę– ąŕs%ĂœD,ř\8œęÎ$b1Ă'ΉۡIÄŇŔŞOŚ›„‰$’FŮPňĂbăÓ`ô9Ź:Žťn—Š#bVœ#ȀŐý GŃŤ)™˛§śKŔŃH;xýI"FٰĆTŹŽ‚ŐÇ „& Ymť€/‰XÔ}IĢîK"<_ą¨ű’ˆ”A"=[łĹe1‰’ŽżFkOSůňM°MLĹmšöThĄ¸Čś48SˏâŞ[+Ő-A$bÁçJ†3:8‰Xđšp8՝IÄb†OœˇC“ˆĽ€UŸL7 I$Œ˛Ąä‡ĹĆŚÁčsXuwÝ.GÄŹ8GŤűA#Ž˘VS2eOm—€Ł‘v ńú“DŒ˛aŠX]ŤM˛Ú:'v_ą¨ű’ˆEݗD,xž$bQ÷% (ŁŮD,qHă†bSŢ8ež ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(ŽşľRݤA"|Žd8ك“ˆŸ ‡SݙD,fřÄ9q;4‰XZXőÉt“0‘DrŔ(J~XlaŒ>‡UÇq×íRqD̊s°ş4â(:`5%SöÔv 8i§ Ż?IŔ(֘ŠŐU°ú8ĐD ! Ą  sbđ%‹ş/‰XÔ}IĂçK"u_ą€2HĢgkś¸,&QŇő—jHڌű&Ř&Śâś\{*´‰P\d[œŠĺGqŐ­•ę– ąŕs%ĂœD,ř\8œęÎ$b1Ă'ΉۡIÄŇŔŞOŚ›„‰$’FŮPňĂbăÓ`ô9Ź:Žťn—Š#bVœ#ȀŐý GŃŤ)™˛§śKŔŃH;xýI"FٰĆTŹŽ‚ŐÇ „& Y-ť€/‰XÔ}IĢîK"<_ą¨ű’ˆ”A"=[łĹe1‰’ŽżTë@ŇfÜ7Á61ˇĺÚSĄM„â"ŰŇŕL-?ŠŤníRˇ„PˆŸ+Îčŕ$bÁçÂáTw&‹>qNÜM"–V}2Ý$L$‘0ʆ’G˜ŁĎaŐqÜuťTłâAŹî8ŠXMɔ=ľ]ŽFÚ)hÄëO0ʆ5ŚbuŹ>N 4!HČBhQčžÔüIĢîK"u_ąŕů’ˆEݗD,  ąčٚ-.‹I”týĽZ’6ăž ś‰Š¸-מ m"ٖgjůQ\uk—ş%„‚D,ř\ÉpF' >§ş3‰XĚđ‰sâvhą´°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ç2`u?hÄQtŔjJŚěŠíp4ŇNA#^’€Q6Ź1ŤŤ`őqĄIAB!AD,ęž$bQ÷% ž/‰XÔ}IÄĘ ‹ž­ŮⲘDI×_Şu i3î›`›˜ŠŰríŠĐ&Bq‘mipŚ–ĹUˇvŠ[B(HĂϕ gtpąŕsápŞ;“ˆĹ Ÿ8'n‡&K Ť>™n&’HeCÉ‹#LƒŃç°ę8îş]*ŽˆYqŽ V÷ƒFEŹŚdʞÚ.G#í4âő'‰eĂSąş V'š$d!|HĢîK"u_ąŕů’ˆEݗD,  ąčٚ-.‹I”týĽZ’6ăž ś‰Š¸-מ m"ٖgjůQ\uk—ş%„‚D,ř\ÉpF' >§ş3‰XĚđ‰sâvhą´°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ç2`u?hÄQtŔjJŚěŠíp4ŇNA#^’€Q6Ź1ŤŤ`őqĄÉABĄAD,ęž$bQ÷% ž/‰XÔ}IÄĘ ‹ž­ŮⲘDI×_Şu i3î›`›˜ŠkÓ{S²ÄýôňŁĐ&Bq‘mipŚ–ĹUˇvŠ[B(HĂϕ gtpąŕsápŞ;“ˆĹ Ÿ8'n‡&K Ť>™n&’HeCÉ‹#LƒŃç°ę8îş]*ŽˆYqŽ V÷ƒFEŹŚdʞÚ.G#í4âő'‰eĂSąş V'Z  4(ˆEݗD,ęž$bq091ťˇďß HĢîK"P‰XôlÍ—Ĺ$JşţR­I›_žĐŕÜd­|.˝bă˛:ń*1Câ|\[„˝6żaś"˙›ÉÜĎţ›u?30ܞ ýD(.˛- ÎÔňُęÖ.uK‰Xđš’áŒN"|.Nugą˜áçÄíĐ$bi`Ő'ÓMÂDÉŁl(ůaąq„i0úœČuhíŤn„ ŽĹ9‚ XÝqš˛~"…˛aŒßFÚ)hÄëO0ʆ5ŚbuŹ>N ´hGAdP ‹ş/‰XÔ}IÄâ෗\ W_ö(‹°˙ŇĹđŽOöŮĄo$bQ÷% (ŁŐD,QhŚœŚâ˛˜DF9%mipšĘOˆyÖbY1|в,GŔaAÍî#!1ąGĺ= ͏Wţ^yČAŽżJVTn4;ĺö\b°˛í {އşú&ö@ášĎ[űȔ*'PGÚíŠĐO„â"ŰŇŕL-?ŠŤníRˇ„PˆŸË$'RqVšŤç~ĺ‰)ˆvŹćą°:ťšYȜęÎ$b1Ă'ΉۡIÄŇŔŞOŚ›„‰$’FŮPňĂbăÓ`ô9‰ľß8ěź/'•Ď$\7Šs°ş4â(:h÷ЍD eĂż´SЈן$`” kLĹę*X}œ@h!…ĐćHĢîK"–P|íCŸ€‡WŢ[×ţŚźÎźř߼äŻx“#ň¨‡ď]ő{ččě1¨•űî›nƒď|ęKžď=ö(řĐ7>/Ő{ĺoţäŢh´_›Ön€ů[đŸ˙óĹJšŃ˝{á/z}Ŕ÷Ç7üŃ}C"u_ą€2ŹĆ<˙Đ‚Œ¤­ŮⲘDF9%mipšĘOˆ˝źčW´ßdžű Č쿢ŽkńŚĎAqŐß cŸěę=J§,)ö΃܍˙l÷íúZ~p6X…źó>NƒfŤc݈XdÎ˙ˆßśöf(ţíƒŐľÝžů{Î'˛Ľk…ž!Č^ôYČ˙ŕÓŁ1KŸ°=jQŚŃŽŰ48SˏâŞŐm[ƒD,ř\&9y{}ĺ+_„“O>)2]ĄP€ńńqŘšsŹ_żîšç>řÇ?nƒ]ťv•Ć6Q‹XAšYÄÂëőg?ű tĐŸőď|Ü˙ýŕ­/ą˜áRăÄ9čHÄB¤°ę“é&a"‰ä€Q6”ü°Ř8Â4}Nŕ:“'ß;ńpĆźC|毎ú;ütĂ-P] C¨ áşQœ#ȀŐý GŃAťOE%R(Ćřm¤‚Fźţ$ŁlXc*VWÁęăB‹-Dhc $bQ÷%‹2nżöFá´wÝps¤ˆEWߛ֮‡Ź}0eí‡ü•ł_›ÖŹňu@"u_ą€2HĢgkś¸,&‘QNI[œŚňaç"–béqB‘Xö\ç:EĆB5Tąđ7K/ˆąpŘ÷ţÜGx^ľluě•|ۅ+ÖąJr^CVE,etô\čđZ[Œ-‹B?Š‹lKƒ3ľü(ŽşQÝś5HĂĎe’łÜ^"í–Ífa``–,Y çž{źď}ď†ßţö—𥽆†fK´˝XşfąÔăe•k ŒăWݙD,fřÄ9q;4‰XZXőÉt“0‘DrŔ(J~XlaŒ>'’„•&faiíďYůšŻƒŚpÝ(Îd 5эŁč€Ó” ż GŇŃH;xýI"FٰĆTŹŽÂ¤=„ś Ym AD,ęž$b‰D—•ső^O<đ0ěŮą Dpçu7EĆâ/ąßĚéŐYG&ksů_öKÄ7 ǜxźű¸Ž;ĺDŸ//aXšIĢáK"P‰XôlÍ—Ĺ$2Ę)iKƒÓT~ęŘËW¨Q qx‘Yx{ćş>ubrKÁ”YţˆCU…#ž5Ćę/vň|ę”Éš¸gśŽ69ěO3˛fvŹ÷ץv{*ôĄ¸Čś48SˏâŞŐm[ƒD,ř\&9Ť"ő?ttäŕâ‹/‚Ÿ˙üÇpꊧD 8JŹ ‚fąřMV'C¸ď¨îL"3|✸šD,-ŹúdşI˜H"9`” %?,6Ž0 FŸş- î/1BŇđÉ-ł üˆQ¸nç2`u?hÄQt@hĘú‰ʆ1~i§ Ż?IŔ(֘ŠŐU˜´ĐV ! Ą !0(ˆEݗD,Úŕ ƒw\wclş­›6ĂĆŐkA[ßG,źăĂď…}öŰzűzáĚóυw|č˝Đ~ÇW‚ž$beˆEĎÖlqYL"ٜ’ś48MĺGŔ—U%1¸čqمŽŕƒ ?j× [P|Mqŕ@ČĚ? âP(–oX .˛ރęN2îŽ,aö󤛆Ńß˝fś<,?ůMŔčeď63Uő‰[7-‹B?Š‹lKƒ3ľü(ŽşQÝś5HĂϕ 'Ci;žSËżř98眳b9B+Żx <‹7&ŤËUą¨Ťg˜D,fřÄ9q;4‰XZXőÉt“0‘DrŔ(J~XlaŒ>'SŚŇ2lLq橎ȥ”PÂuŁ8GŤűA#Ž˘VS2eOm—€Ł‘v ńú“DŒ˛aŠX]Eˇo#¸Žmł:‰XÔ}IĂËţďŽko‚çžüőénżćFČxŽ×ÎΘžÎƒťžóĹœ˙üç:Ż2Ś‹30=3j ~ ą€2HĢgkś¸,&‘QNI[œŚň#ŕËqîîĚ̄n4䚌ď˙°šMÄʂ.ÉrĄßV˜+ŰˆĺěřlńŤ’ŸĐl˛ Íˇů˜d„íţő p‡ž×O‰”ď|6óôƒ°ç'Żsʛą/.rťn˛™Šƒe‰—ōé͏B?‰łS_Ń´)ŽşQÝś5HĂϕ 'óěĘ´>ýôÓđ‹_üşňšŻŻć͛˖-ƒă?ÎüżăŸ?úŃĂƍOÁşuëíó=ę;éÇ筟⁰E," bă§,Ÿ”§˛k’œú‰XĚđEsŇŠŹúdşI˜H"9`” %?,6Ž0 FŸ“)~y<)F &ş•Äęź÷~eŐ1FřE~o‰¤ŻÓnőćĆŢď‹1~Âi‡úi_ĄÍ0ĆoŹţ͢xýI"FٰĆT…ŽR?1b˙&Z$d!´Îę$bQ÷%‹9âpXýčc•Ď›ÖʃÍë7ÂÂ%ÖőYyýMŕ=h—Ű1}ŕ!ô疧é›g™‚^ű†!řLł<Œy~!nЎ-}IÄĘ ‹ž­ŮⲘDF9%mipšĘo醰Ęn#ľ˜Üüt/<şň9;o9ŔĐR(î]™ŹÂ*ůß öŤťFČ2ůôĂĐsŕńP{áč,12Ϗ™y֍YČ"ĽUJ\>X1 žxŢĺďŔóX1‡ŠUâĚ؄ű•ąnţ™˙ľjĘQËíŹ=˛đňXĽĄei´ă6 ÎÔňُęFuŰÖ  >W2œńÁ˙đ‡?Ă˙ř'pÎÜ5ăÖźyóŕ]ďz<űŮçű|şşşŕýď/źă˙a§+űąČ<°šń‹ŁĘWĐŤŸ^ŒĎă ő.~ĄDíśRľĹ)Y¸™@ÝTÓVů "/U„ÇV?IĂĎ%Ή! 2°ę“é&a"‰ä€Q6”ü°Ř8Â4}NĽLB׎"cJ_ćýŕďçNTŤüe)~œŕ#"^VíťÚĄŰ3qŒőŃC|`N\ϏŐäÓňü+őÓžÂA ÜXč[-°h#^’€Q6Ź1Uq:žXł`˜çtĄABB›@ŕŹN"u_ąhăˆăŽń Yř ¤ŰŻšţĺ­ŻMż~ŐjŘşé']%ĆąGĂ#÷?b¨ć{ďŽÝpŰU×ĂĂ+×o„ą‘QČf208{XvĆ XqŢŮĐŃŐđĹ×Ý 7˙í*Ř´vLŒĂŕĐ,?úp8űyŔ'[×ďî›nƒď|ęËžď=öHřĐ7>rćšhߥ|ŕöťaĺ ˇÂúÇ×Ŕîť P(@˙ŕ,\r~ÂŃpćEçĂŹ9ł@Mr\“ˆ”ŃN"–(čÜdlŚâ˛˜DF9%mipšĘŻX˜ŘxOČ‘9ôšPźó;Ľ_N[•˝9™Ą1z<"óSޔĽ´Žęě€ŇżX‡>2ʘ˝ŹŽ€™ `Ł;€myŠOŢֆŰ+‹pVȢ/ŢŔž9ć%Y|Xłöw°á-P\s#ďţ?`3Ă ;XŚwß~UŔ4ůŐÎӗĘĺđ¸@1×m—ĺB°–Ź€Ě‚CÁę˛g–Ŕ&G€í\°é>(>~5ŔŽőލjwi‰ÎS˘ś48SˏâŞŐm[ƒD,ř\Ép2ĄďѢ}˛wĎўŰNö5îΝ;ŕă˙4lŢź^÷ş×úüŽ:ę8é¤áîťď÷gŃÁA‹—ďĐC…ç>÷8účŁaá…ĐÝÝŁŁŁđĚ3[ŕţű€ŤŽşž|rm ?ƒ+VŔ—żü_DžkŘ?˙óKaϞ]ž€ĂŕČ#„ď|ç[5~EŰďe°{÷.Ď߂ ŕâ‹/„“O> />úűűabbvěŘ?üÜ|óÍpÇwop׆Ë}đÁKᢋžÇ{,ěż˙"číí…ééiŘşu<öŘcpýő7ÚÜwB=nŢ7ßűŢwÁ‹_üĎžďżň•ŻÁŸţôçQPŻzŐËᬳ΀}÷Ýršœ]ďĎŔʕ÷Ŕe—ýžzę)cĘyIčô$b1ĂÍI¤°ę“é&a"‰ä€Q6”ü°Ř8Â4}ÎDWщYŹéś:ŕ ‡s÷9Üfwö9?|Ř95 o‚[ś­‚ËŸšŚŘŒźŽř 2§ŕ3źsçç,8 ŽŸ˝ću@ż=GŸ™‚ă;áÁÝáŞ-ÁĘ]Ľ1žhy†`wÂ=ÔŃ˙¸ŕ“žđkFśŔ?ÝřßГí„×-= žż˙ńp@ď<čČdá ˇ_+w<é¤űóšď‡eűTü& y8ńň8ű÷̅7,;NŸěgĎSšíéń]pÍ3Áeî€Ýů1¨+Úń3LŮSŰ%ŕˆuěąh#^’€Q6Ź1Uq:žXł`44Ú$d!´Îę$bQ÷% –qtvuÂôÔtĺť;Żť ^ü–×97Őjyůه25ßzœ}cî§ €jžŻţÝ_ŕ÷ß˙äóÓžűľĂ^@ăŻűn˝~˙ßĂ[˙ó=pÄIǂ 3¸äł_{nžÝ÷ýî;áŽţáźN<ű4xó‡ß Ý==`ÁvÚöô3đO~6ŽY°íŮšŰy=zσđçKžôđ˘7˝˛š,ČĄIŽką€2HÄâ˘ŃnpšŠËb唴ĽÁi*?Bžâýaę釀ًkVŽŤň]Ç!Âäßuvs.ďBÂőř+ˇü9“î8ó­P??ĽˇĽuU'îń݇Ü)oČvřÓwöƒ5‡ż–@ćˆŰů$Žů X;Vů ĚĎţ÷¨CîŹw;â/xœě)o°c=ňż}Gčî/ĺź ­ĹzîU¸|!dĎţw°şé­ŢŮÎ 8ŕÔ7BńŃ+Ąxݗ!33éˆ˝_F}Ĺ §âŞŐ­Ě)Śĺ@"|Žd8ĺ‚[Î.\–oŢÉ۞‹YřßüŕÇpÚi§ÂňĺË}~/|á `ĺĘť!¸› ƒ{n÷źÎ?˙źßŹYłœ×a‡ ŻxĹËŕ˙¸žüĺŻÁž={*iîşë.Řľk̙3§ňôÝYgůËßji䖙×éŮgŸŕťëŽ•N,ˇŹŹ"\}ík_ o|ă ŁĂż4Úßß编,Y ĎţŰví:řü翍W? ü`Ž˜ç}ď{7\tŃsv^oœ—ż¸ýńÇWÁ'>኉jĹ>nźP8č ĹđoüˇłŤŽx óúçţ'řя~—^úłőѲ€$ôzą˜á‹ćlăAPXő)r˝.bĹlFŒ˛Ąä‡ĹĆŚÁčsÖU sćƒgÍ;žpÜËńJ-Ůs7ţş`ߣá=‡]_|äĎpů3÷;;uúĹ'ĽxößcgŸ?öĺpP˙ü@źŽ8rÖţÎë•KN‡űwo€Ü÷Ř0ął4ťe•|9[ ÖÂţşÇĘÁO}+gĎm}ŕŰĽYčd– ]˜ďYű ˙}ňk Űó(ŕÎLg-‚Ăí׍:Ţ˝ňgpďîőĽyś܁Ŕ„żTˆ#éˆuěąh#^’€Q6Ź1Uq:žXł`44Ú  Zguą¨ű’ˆ͡`Ď0Ž:Ţ/Ů˝uŹ~đ‘€/˙EŮÝ7Ţęűś`ö;¨ţcˆjš‹…|÷Ó_†_ű‡0“ĎۃY+9ç•-˝2ÎwÜ6źk7|íCŸ‚+óGÁeßťÔąřăg*ąů$†ŰżůŸŸsňT >ÉŐřuZ5‚+žź^ű̀ĎW\U9žůŸl6 Ÿýě§ŕ˙ýżˇD,aXşô §<§ś˘ÄJŕy˜?|ď{ß ą„‹}~üăďÉ'ďy\Qľźačí탯~őË‹ź}ßúÖ7ĂŰŢöVĽžN"|.qNü‰XUŸL7 I$Œ˛Ąä‡ĹĆŚÁčsXuŒÇ#byĂAgáO~c¨ˆĽ<͗üÇňç+¸ăMeb[{ΝüԞۆ‰XÂpÜěĹđŤ3˙ękű+qœĐ…p!Ë[>/(bqĘĹą +۟ŻăÚˇ/|íä×úD,ľ˜Ű5ß]ńfŘŻkVčšOý´ŻĐxĘíÍBßjEńú“DŒ˛aŠŠÓéđĚŁĄ™Đ† ! Ą…!pV'‹ş/‰XÔ}CŽť‰é)8Ń^ó‚/ Ţqí~_ŤîöîŘĺK{üŠ“`jfbšKřóO +oüGE`’)‰JÜ_ӕ3čţćoyËaß}ÝÇ-ěÝťÖŹYă<Î) Ż}íŤář㏓ęó$bÁççÄ?¤!bItˆIXőÉt“0‘DrŔ(J~XlaŒ>‡UÇXq<"–Óç.‡÷~q`Gď+ÂĆѰ~dä‹ÁţëňgĂĹűSÚÝÓ}ń~ťo× |é¸W:?:ôgÁ{^ťrŰxzlg ŢŹÎ^g¨ˆPXy"H;§ť^yđ wRě `BęëSÇżşJ?‰’^ôwtĂŽ|ž›Ćäş ţR!ޤc"ljXT§Óá‰5 ÖĘă'z´ĄE!pV'‹ş/‰XÔ}ëw|W”ăN;ŕëţďďšé6xő;˙rŐIÂ×ÝŘţ÷Űw:?Í]ÂúUOŔĺż¸Ź˛#JşŢđ˙ ‡qä§ópĎíwÂĽßşvďÚ ŕ^,{žP„}é›đşş{{! {wďąď÷38ú„ăŕĺo~,>x ď†›Żž~˙ł_UB]ŃHŽüő႗źzűűy…Âȗ~ĺ;0şwÄ){Ë;Ţńá÷Ŕâeî‚ba&7]}üđë߆ɉI§Žxú›/żÎńŰ(rç›&9ŽIÄĘ ‹‹FźĄhôć(ÓđMȖ§Šüů*´‰ +Ű kn¸ŕCžď;–Ÿă7Őîâyűe9kjŮC‚ż–ž|ňÍuDg JůG@ljŻő'° ÷Ţř-ťçˇöŕ?ĺ|•™ľ†žűač^zş'C==őß pĺÇ*Qš0&wÚ۸'$_ˇÁđ-?„âŽuí ˝Ç˝úVź˛ 6ŻĹp{eą4ŢćN >Niâá+aďß˙ ŠĂNDfeađŮÓýĺÎűO0őKěş-:ץ‰Ę$Ś- ÎÔňُęFuŰPCnŇ  >W2œŃÁ㸝Gë]S~Ÿ‘‘Řśm;ěˇßž>ż<ŔyôN™˙Ľ/}sĚŃž4ťwď†ĎţżŕÖ[oŤ¤;öŘcáă˙OX´hQ%ßů„?ĘçOúłóů‰'ÖŔš5O:•2¸ĐĺŒ3N/‰\ŹĘŁ‚ř+Lœrýő7ŔôôtIp„=×}őŤ_éKĂçĽßůÎ%đťßýŚŚ&ď.Ü>řÁ÷ĂŠ§žZIDž;|ţ¨ń§ńTëńĽ/} |đQ˝W_}-üđ‡?†7œ9łG6ńÝRxY˘5k>üáŔűŢ÷!§,ŽĐ´Î–j]]]v9Śŕ _ř/¸ňĘŤ´Ůlţĺ_^ ď}ﻜÝXĘŕąţő_ßj—ëí•Ď‘Ľ‘>†őzą˜á‹ć4w˛"‹NŃ$L$‘0ʆ’G˜ŁĎaŐqÜuťTˇŸőe:áóÇž jVřÇľwÂWď˙ěœq>tvĂێ¸Ţr„'Ň÷ţ<¸vË#0ͅ.|l°Çœ×-9 :ş}éÝő|čöŸĂ{6—˛ŔŕÂŽ‡ŻŸő&ßÚëąsĂ!űÁęţCŤîő朮~ç/˙QĹ­Ď<÷n& 30ÔÝ;&‡=Î ú;o‰“Ÿ/Ţó{¸Ç:çügďw$|rĹ+`^GŃgíw dť`¤8]Z#ؙđ— q$Q˝úFźţ$ŁlXcŞât:<ąfÁZyü$b@;˛Ú$bQ÷%‹şoÄ5ńĚô ĚZ0–,ó˙:kbd^yOĺ3üÎ}ˇÜáKâŽZqf őš=řűŻţŕ(ô˝“™EîŸůŸŻÂ‘ǝŽ˜äŹ ÎƒO}óËĐŮY˝aÇ'#ťöŔ-W\qŕя=éřä׿hÇ=ÚyüŃÂÁ+Ţü:řˇ˝'6?5 w]KhžCƒKâéuáÁ;îńM¤ćďł>ý?_vD,E›łŔ öýÁœwńđ–wżÝCg9ú.fŠ&9ŽIÄĘ ‹‹FźĄhôć(ÓđMȖ§Šüů*´I ™\'‡ˇ@~űžď­ŽAČxjuGČBDzskâarÝm`Ĺ<"¨Xڍ%sÂkœÇëxąçşŻÁč?kfÚůe÷> ť~÷>˜ŮľÁ—6ťü<(vVvD)v Aviđ&ÝġŔŽ_ż fž~€_8@açzšî`ϕ˙qp~^§âXůĹÓŘ× SW|Ćţôżůű0ůČŐ0ůŘő°çŸ˜äQw—ľŒpäşo›óŲz† ŘˇW2œŃÁŐ¸­’¸Ĺxń?\R‹ţţ‡ßݍ% ŻxĹË}v.y÷ťßˇŢz+¸ůtă=đŔđŢ÷~ffüoý§z/żW^ܕ…?^ecžď˸âŠ+=ŸźęUŻô 98žůÍ˙…_üâWŽřJť”nŢü |đƒ˙ 7>ĺK{îšçŔŹY^QÁç|ŐŤ^°\uŐ5đń6lXďôż;wÁO~r)|á _ ¤ĺ˘.ę >Z)ˆĎ}î‹%ąsڎ?Şéˇż˝ žűÝďŇuÔQ°xqücŠIĂĎ%Ή! 2°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰeâ°Ňľœ=y|á˘`~Íă`Żyęřđ?ƒS#|×yä'á+÷˙ ţ´öN_ÚýzgÙóęÎ) ţoí-đöŰ~_}đ/đ‡ľwŔĘmOŔŰoţ<1üL%żn¸jă}pű3˛xÄŔBĎŻ%XÝëÎ {ŽüF{NůÖëż ß}ř*¸tő đ‡/‡ľ#ŰÜë’:~Oî„×^ó XiĎőólڊ3v™ď‡ţăŇ@ÚÎLŽ˜u@) 8ŻPh7ĺŚfĄoľŔ˘xýI"FٰĆTĹétxb͂ľňřI €„,„ö‰XÔ}IĢî#ź(f`ÚžČ^QóLo~ţŔíwU>?ńĐŁŽ¸Ĺ .>éěďƒBÍ"`řN+ßyO`[ÉWźĺ ĐŃÓ{ó°szÔ~ÁČĚ,Zr <ű…űŇrß{kÄ4A¸őőŚwý퉌w vçÇaź0 ç]üXzČň@\ţŸŘşVąpÜsór?ďĽ/˛ËÝ {fĆ`W~vŰwÚG “pö…çA_Ÿ‡Ö˛ëŽŢc•šä¸& (ƒD,.ń†˘Ń›ŁLĂ7![œŚň#äŤĐ&pą"ż5žęú€-ťäLgwžśfíwŹ#nńbj㽓{ő2QŮ%Ůę´ăůˇD.NĂŘ˝żsëgçĄúâw˜Śaôţ?űĂq̧8˘ţ‚…Ç„1œsřš˙†œ}Žę°ătdݏ;qď żíIˆ…P›0(Ú •ůÇŽń[~Ăü ˙ţƒƒ˘Í łšů+›)ŐC!äšÄ^ -?Ž(vąúŠŚMqՍęVř\Ҋ  >W2œŃÁő¸Ë"WÜöxšî#<ÂŮQċŰożV­Z ŐGUămذVŽźŰ—ž 5ćΝSÎ=\uŐŐöŘěß:ě”SNvvGŠ–Á˘EűĂAäK÷ôӛၪ|îčč„ÓjçËwšůýď˙X*'řąÄwrůË_ţęKĎ)'t˛Ë#(aŐ{upÔQGzĘ傋|žő­˙-qfœG•ů/żüďÎ#jÁĹ:qmʏÄwyŠ>Şű7żš,´O:éÄĘŁ—ę•Eú=‰XĚđEsš;Y‘ˆE'Žh&’HeCÉ‹#LƒŃç°ę8îş]*Nů=sśÜź`ߣÉžűĐî-Ť"<á“c>>übŐ́ôgÍ?´"bá˙?=ž nÜňüčńëŕ#wý^{ýˇ`ËÔ0Xö$°ü*Ǜ.烳;űKň‰.ó7ř+Üše•+çNšŘîđ\ż~âł×sÝźd+ůšmËă°vď–@úö|Ÿďđ{ ̄żTˆ#éˆzěŐ7âő'‰eĂS§Óá‰5 ÖĘă' z´Ą˝@"u_ą¨űŠěNČ˝mżVœ{üćÇ?óŮťçĘű‡ďž/°ÝďéĎ:Ű}ŚŠ@6Ÿ^ˇŢŮůÄť ߲ř¸'ÁޙIĎĽjŚě‰Ď +Š3O‡ż˙Î{s͂ŤÖ8yßz؍ąßţ‹`ż%Řq'*^F.dá7˛N;÷LXťÚ˙‹ř-žSX˙řšŔ–š—ţď÷áGßş$ôßhĚÔÜ0ÜůĚśČMr\“ˆ”A"–x¤uCŃčÍQŚá›- NSůňUh“Xŕî‚2šúZ˜ućŰ|śÜ§Ŕ$ŰěxŹřNŹşŚ´‹JýßT~°6Š˝čÖĺłeşaчî)ĚZäŠXxţć0çˇÚăčŢMЙu…$ĺašPz6úäę cÁÁőă ´‰•qƒfěŠqD7ö—Ef•löwýs!3¸Xű‚5ű@č8ôYéU´GÖ xšŇRČőő~"äŤ`3ˇŃňÓâ  >W2œŃÁqšô÷÷žœœtlĚ?ü°€ýL{.yǡ€ řc}vîÜéŒi|‡.vYąâ”Š˝ŁŁN?ýT¸îşJÜ|§”°ÝXĘ;’¸ăöŇĽKœÇîx100ˇŢz#Č`Ѣ…uëSü‘FľxěąÇaǎ>ńŒűCs^Ś"ÜtÓ-°lٲš8‡—ćáüSxîźÓý!L5n|י{îš7°{͒%K HĂĎ%Ή! 2°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâx>0w9rö¤¸řĂ ƒúćšcŸű9ĂTIÅ"ĺu2‹?ž¨ö΁}şgÁ˝sá”ůËŕźý Ä˔łłN~ņ{+âWŒâň:3Q÷W#Ą~Ť÷lފi2ĽEP{žĘňöšđČvX:Ë˙xÄžšůz(˜đ— q$Q˝úFźţ$ŁlXcŞât:<ąfÁZyü$$@BBű€D,ęž$bQ÷•Ü=dÁâE°tů2XűDő×W\<ą{űN˜=.÷Lçą8"ŘľuG@Ě1oÁ|(veUÔňŐX{mţâE8ÓSÓ0˛g/ ÎŞąT}÷_r ŒŚ “Ĺ<,\œTěŢڰŰ.{-ŠTŕuZ{Ť˛hßs˝ä˘IŽką€2Hď´n(˝9Ę4|˛ĽÁi*?Bž8m´œ5­]ë żutěshŖ™ľXŻ=&ŽnƒžýOô‡˛ÇČŠUך?ZƒJž°ĆŮöôĚŽüβk1łc-ä,w–\šlĽËgodžúą%ڄÇs´g—mÁÁĐqäŐ]t4dš`§fËę¨x•XHÄbČŚ¸ęFuŤÇŮä  >W2œŃÁąE,üžŐěŔÜ`xxÄwěkć}÷Ý004Tćq…˙ű•>! ÄĎľ×^ď¤áÇpŘc…Žźňjđ8űěł/``ÖŹ!Šô<ű쏛őë×WvL ţ@$ëÖ­ř”ë8Ş}ůN4ŐÝXĘâŻ=řă‘ڝtŞyIčx$b1ĂÍiîdŰn7"°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâÔźˇ;ÝPŽWL¤ƒŮ}ţ9Ą= 0{R8Żk^°˙ pş=—^6¸/ěŰ#8.2(ŹČâo›ŤĂÝQĹ*íS PŹď7aŻ5;"Ç/Sšó-W30Y˜ĎRé‡,Ą“TŹó—rSłĐˇZ`ŃFźţ$ŁlXcŞât:<ąfÁä „– Yíą¨ű’ˆEÝWRÄÂ1U,Ŕ9Ď=ß'dá…Ő>'œy*lXíß^ř¸'Cç@Ÿ# ÁĚTđ½ˇżŚůŽ.ĺ|× Űœüđ˘MOՊTüž=˝=ŽŚ:zťßĺ§ŚAb픟 Šjœ_ÖCdŔĎ$ĂŽ}IÄĘhZK‚˜4n(šŠËb唴ĽÁi*?Bžxmâ2¸Ů~3ńčß}BŽĚÂă!żćFČ.đ˙rzjÝí“{Ę? §, yÎMa„…C'żšN'Ž#ťĚvLť'˛,gˇ”Œçfˏ…Y§‹…]ŚŽgrG=T.rœ207ĺőŐ$ˆrVł™ŠŰůQ\uŁşŐălrˆŸ+ÎčŕŘ"ŽţţX°`AŔşqăFç/sşşşţńîć›ońńqčíí­|węŠ+ět]Î# ̃Ăóç<đ #ŘČ88pë„? ]]ИďoOO°nĆĆří}ܒßßľűŃÝÝ qƒřää„ç1IîwŐř &&&>|§šÚWIĂĎ%Ή! 2°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâÔ|UúŽ;ƒsËŻ+ŰčČŻ_vźë°çBwVd,ʃ¸“`ÖýŠ#b)‹YŔo[Îz{řh•ї)íâRŢú%1nÖË ÖůKšŠYč[-°h#^’€Q6Ź1Uq:žXł`ň„BKƒ„,„Ö‰XÔ}IĢî+y§źKJŕ´g? ~úířžţÄCÂĐÜŮP˜™ođł/8?ôšŁőĐí(žĚovţţƒŕŽŤUo.9BVŢ%̅#Ląđ˛Sž1x&(ö´şúK;Şî˜âFœďěżÝĚ$Hƒťäž÷Č.?7Ô^Řű vn„™íkabÝÝ0řě˙€ŽyK‚A˘°mipŚ–ĹU7Ş[=Î&‰Xđš’áŒnBÄÂqÚi§:¤ő‚‹K6lŘXᜠůáŔď~÷¸ě˛?ԁzň[cˏ*Ď{§§§ŕ†n‚ç=ď˘JZ>=î¸cœÇčŹXą" ᝸Tżs‹7ňىľk×ÁţçG=é9ôźw˙3:6?ކű&?řٚźĺ, nÜż ô ĹŠĹŕŕ,(—ŮĘXžţn9SŞEmۑˆŸKœ˙B"d`Ő'ÓMÂDÉŁl(ůaąq„i0úVÇ]ˇKĹŠgc01ţcNjţňçWîn%~§ĘK×*=>(Ďw3ŠlëeÁŤ:>tä CcďžƒľĂ[`Ýđ6¸ßžŽX°^°ôP‚UžÜ–E,eU&ÄLĆK•t%Ś'bqËü>4ą8”›š…žŐ‹6âő'‰eĂS§Óá‰5 &OH ´ň8̙Ď)P Îw<9öôS`Ş’ßř|Ď]0?đݎmŰarbů$ß÷ÓÓÓpýő7ĆěmŰÂóˇaƒ7–Żüuęϛ8lŮź.X˛dIÍ7–SeÎĽK řđ8eąK=,_ž ܛwáC<äĺď¸x¨’[éăH˙Ŕ#‹žhNs'+ąčÄMÂDÉŁl(ůaąq„i0úVÇ]ˇKʼn6ďąçŻüQ:Ţ]SřmĂčv(ňń–V“ˇăfÜ]MŹŹ+háč´˛đ‡^ŕűÓÚ;áŇU7ŔŞ=O+ľł'…‡ĎŢ”ay)`y§ˇž ‡ůAĹÇš~(;ZŃă&ĆVh7ĺŚfĄoľŔ˘xýI"FٰĆTĹétxb͂Ém ­ ą¨ű’ˆEÝWSÄÂ1Uœs.|śĎĘĹ$Ýű ďťSÎ:ÞIdţQ8`éG„âEąP€ożťŽĎ}ˇŢřnŮa‡¸ ţŢíö"ŰúŐOÖľß}ˁďđîŽY—ňítĐ!ËßÝsĎ=°{fŹîkí3kž%KŤű’ˆEŸŞ)oT2 ߄lipšĘ/r›T`•Ä,îŁx&ýťĎÚ19t.^áűnň‰!S˜Şě¤"‚ÂŽ'Ą‡ €\wäl^ţęŕŻlőŐŮ;=}î猛?÷qAîB\qÇÚ˛dć,.˙ˆŽôčˇ"˜˝@ŮYgQđH|ƒ8ëŔ“ś‘›žcˇ^ Ĺ˝[*;ÂdKu”é!P_Ń´)ŽşQÝ"œKš$bÁçJ†3:¸ KyLyó›ßxtǟţôgđ TV­ZHs ÇCU’ źć͛šŇgݐĽ,Bq?ßwßý°uŤ_ rĘ)'9öO<Á÷=Qůą=eđPk׎…|Ţ?6~řaĐÓÓ[Ă]Íďŕŕ€óHٰź‰]¸ ó裏,œ{ď‡&Ě#ěąŕŹłÎ ř<ňČcąź§śÂ.SOh_Ÿ7oyäď×­[ďć@ú8Ň?đHÄb†/šÓÜɊD,:qD“0‘DrŔ(J~XlaŒ>‡UÇq×íRqâÍĚ^š|t÷&ŸĎŃNŮwšťË \O.ëye ŁłćőšŸł% Ÿ;;~5ëčđ˙ňśg‡ßţsx|Ď&w3”RzţcŒÁÎ^Ё[J9¨Ÿöř”›š…žŐ‹6âő'‰eĂS§Óá‰5 &OH ´ HČBh3čœäŰėD,ęžĘ"?¸JţÄ3Oƒnďs´Y1 dŠ>VH<ߙŽ,œxjí֎üé'ż‚Éńń@úÍ럂›/ż&đýŠłĎ°óY„(đęřőˇ3ů࣏n˝ň:Ř"r9ę¤cŤÎš(Ě|ŸO:ëÔ@šëţ|%ěŢľ vYj_O<ş ŢóҡŔż=ďŐđ_ďýü撟ÂCwßjHđ¸& (ƒD,úTMyŁ’iř&dKƒÓT~„|‘ŰÄg—âLőQ<ů57ËOxd {ą_´1őŘŽHŁ|óJ€ě˜ÓëýBP+×ý§žÎ{TÄ,ö‡ňűçfżózÓeĐ÷źOC÷‰Ż€lĎŹĘÎČů§îuŽjŃuŢ{íĽĘŒ#8á×ÎŽ(ö?'ź˛sƒřM0 zfl3;Ö9“I^/šŹűâďť<˛ó‚°™ŠŰůQ\uŁşE9—4+HĂϕ gĚ-MŒ{cŹü*–vä˜;w|ň“ƒ×˝î5ô?ü°ł#‹Uůĺł<đ łĂ‰Ç{ œ|ň‰ĄB‘ţţ>¸ôŇĂľ×^?řÁ%đţ÷ż.žřš‹Ů3č^qĹ՞؟ÔٍehČ?F]qĹUPĎ@%vžWúŇvuuÁk_űę:B >őŠOÚůť~őŤ˙sęâe/ű˜5ŤĚW˙Š —ă`WćÁ‚]ťvůŇdě~ďxÇ; śŻđżĎ{ŢĹvůÄ˝ńƛ ƒƒƒđśˇ˝ĽňŮŰď˙ýßߟťďž›D,¸Ä9ńO $bAV}2Ý$L$‘0ʆ’G˜ŁĎaŐqÜuťP >Ág§πíy+Ip:!sĆ˝kŸ~0ćG]ě<&‹Tœ?ł™Ęß7z.üăŸ…ž˙)řßÓß o;ü9pđŹ}+#ÝěŽŕ.ŢOňLK*â1 ëţíď쁳!P.„Z=ŞŸöř”›š…žŐ‹6âő'‰eĂS§Óá‰uű¸ąÄBK€„,„ÖDčz‚ÎIžM|IĢî‹$bŠDěĘÁ žăJţ_| Í‚ĂN:Fć˛ÓhźčU/s͟؜i3|ů=‡U<ůé ˙ýOÂŞű†ą‘QŘjópŃĚĽ_ývŕWí]ÝÝpʳΔŽËŽšfʸ÷î Džă ǁ‡.…#;ڗfdď0üם>Ťô˙Bîáťîƒď|ň+NӎŽÁŁ÷<˙ŐáÉGV<<ŽIÄĘ ‹>šňF%ÓđMȖ§Šüů"ˇIź;˛df&WęĄ8ž f6ÜUŮ%ą-qud7íÄĘ˙ ¤éł{Îz;d{+ń2݃Đ}ÁG ˇô GH“™ť:ޏ:Îx›=pO—D7vԉ=0šúć@̎ƒNƒÎŘ~Ç@ĄłŠC‹!{ö@÷yď!ÔŤňĘş(ƒÂhđąF}Ç˝2ٜťsŒĺž:ö;†ţĺ  ĘŠe3ˇ!óُęFu‹z.i6ˆŸ+ÎčŕşÜ/zŃ?Á?ýÓ ě×óá…/|źň•/‡wźăßŕßřořÝď~ çŸ^Ŕgjj žôĽŻúvLáČçgŕ˛Ë~ďKËm_üâçࢋ.„ŽŽ\eŹ<ŕ€ýá+_ů’#–áŠ#Ž8ţůŸ_Ď}î…5evăórşěWżú•žď¸XäŽ;îň<ţ§,ŠqoěýęWż ”ço|=źímo…ÁÁY•ÝVúűűáCúœ~úŠÎÜyɒĹvޞo}ë›az:ďɃ[ľ8óĚÓ]álĆÝAľP(Â/ůŤ@ş .8>ýéOÂâĹ:źsć̆׽îľ6÷űiůc”žxâ ™0żüĺ/ƒ|äΆ—ĺĐC…Ďţłpá…Ň>ôĐð~ýS’LŇ?čIÄb†/šÓÜɊD,:qD“0‘DrŔ(J~Xlź›îÚ !ޏëvĐ7Nžs0œ4ç 8yöR8ič ˙köApâě%Îß9Ľ]PěóůÖß ĂÓţ,žź`üďoúçAů—\Řňڃφwţ\'Íž=CpţÂŁá]‡_Cĺ]Uěž}r$ˇó÷?ćň8ˏ"âăXĎüďYo…Y}_72PŤGőÓžŸrSłĐˇZ`ŃFźţ$ŁlXcŞât:<ąfÁä „śC„ś€ÎIžM|IĢî‹,bá˜.ŕŹçœ7]}]ĺ;ËCtĆłŸy(€,xIž^üš—Ăď~V]Hă7Č6Ź^˙ő Y…3kyˇdśŕß?ň>ČőtAž˜ät~‘ÇĹ1˙őžůl>[üEŻz)töőŔdLÜZpĚŕŹY0źwŻďűď~ęŤđ={2őœ—˝^öŻŻsvŻůžŢ÷ơĂŘčX%[6> _zçÇ``Ö Í›#{öžťKeϔęÁœůsáÂżäŕqM"P‰Xôє7*‘MY’6ăžČm‚Ęm-žnǸ„9;ŽôqQhúÉÇŽśÇ‚bĺń>ΞÉ,*~ůŃEöXţÔ=0v÷o ď¤—űRtŻxŁ˝ŠřZ(î}Ŕ›2CűdƒżŽÎßńcgˇçsÇę‰[.îĺgٲž´š%+œW-Šă{ Ó;u!°Ä/ ňO=ľżÁë:äLČ˝ăPŕżö›…Ěźƒ wŕńŽ'&dýk'ę+ęýDČWÁf*n3ĺ§@"|Žd8cni"p/Z´ĐŮ E…B>ó™ĎÁÚľëGyNçţeđӟţÎ8ătߣˆúúúŕcűOxßűŢ [śl…ÎÎNX¸pżŔ|ÇţÁ~TůĚÍŢGílܸ}ô1GôR†űxĄ*Žşęçx/ď¨â‚•bYpĎ=÷Âe—ý^úҗxx,xýë_ëˆbžyf‹ť^…î\ÂËÇwvń‚űđÇyÁă˙ËżźV­Z o~ó˙sžűĺ/gžy&wÜąž´Ď~öůÎŤœď0đyőç>÷EY|ŕiůŽ,ĎţĹÎ+ œó;ßšDđ1I/ЉXĚđEsš;Y‘ˆE'Žh&’HeCÉ‹ƒwÓ]ť!ÄwÝ.ˆW|†óÁ{îů9\˝ůçý^{ůŃť~ ß:ó-ž4ĎÚďHçőĚřnśÓ,ę›ýšî@Ź[ś>÷đGŰZîüwľ=wÍOBG5íBŰ÷Š‹?+ˇŻ-“{Ěé …ž\gtFĽŤĹŕůëüĽœEúV ,ڈן$`” kLUœN‡'Ö,ÖőP‹ šB=Ў,„6€Î™źM|IĢîk@ÄâFfpřIÇÂě9łCíg]đ,G좂ńÂ4źüÍŻƒÓÎń>sŰmđŰoθ"Źg[gţ‹˛×üë›ŕ¸SO†ÉâL,Ďą'Ÿç^řěJÜr¤Lé—ę^yÜ1đ’׿ŚâւˇŕiĎ >?œpüqĺ]TfXfď;ŢőńúŰTÎߝĺŠ'×;"–ŒGÄÂÁĹöÁĎ~†fÍq$x\“ˆ”A"}4ĺJdÁDSց¤Í¸ormâˆXŔ}ä7ßMdfÝPŰšÖ}ŹPu7–˛=βˆĹ٥Ď?~ă7arííÁ´™df™š…ŠXŚťŚJ;şTcÚ;Ÿ„ákż"(Ží‚=×}Ť~Á… ^ޙ÷Âô†{)˛C ĄóČçBç‰/ÜâKqd;LđĂ 7Üä{lOů=ąřÎ#űاŕé§7ü{zzࠃ–8â™ZÁ?NżůÍo9ťƒËfUxţţ÷+#óXŢľĽ*°ažÇńסžőmgw“ZđÇńb–,Y*bšćšëŕżřu o×_ch^¸ĐgůňeŽpÇŇáă˙”# C=Ëčč(|ä#Ÿ€;vř{To1âřS]ŽZ\zéĎŕŢ{ďń… ýD,fř˘9͝0HĢG4 I$Œ˛Ąä‡ĹĆŚÁčsXuwÝn•kžŇn+×>ó|űĄ+BÓî×;ľ0TÄÂôᕿ¨~a‡ĎOÁOWÝH;ŘŮç/:^}đYÎN.\ÄÂw˙媛!<“ &ô•BĄôȁŒóŞąpAÍGěŘSV˜B›pŸWźĺu°đ€Ežď3NY2đÔęu•Ç &áÄ3VŔW~ř-X˛ě JÚršË݌GÄr葇מ÷ X~ÔĄ0Q˜1$x\“ˆ”A"}4ĺJŚá›- NSůňM°M€w}÷†Xů‘=|ǕÉÇŻ ¤›Ůýˇ>ęHœG AÜĐ_˝ŠÇÓ縘…ĺaďďŢĂ7}˜€X“ďŔ2zÓw`ôŻs ÂOSüfUŚôh#>žNÝókŘsŁÍÔ“řN,;őnço8ÄÂ'BľyG.{?Loz8ҧ°w+ěüůżC!„—×{]P_Qď'Bž 6Sq›)?"ö‰Xđš’ጚĽŠĚ­6Íçóđ—żü ^ńŠ×8Ëʄˆ)ދ͛7ĂŢđ溏ZlÝş>üáŔď˙Gß÷ŒŐƸöÚëœü„a͚'á‰'Öx„5 jGon›™™÷ž÷đýď˙Đy‡‰‰I¸ä’Ŕ'?ůéęÎĽžŞźá†ě׍Ąž\ăîNăćcűöíđŚ7˝Žźň*ßŃĺőŻ3Ź\yˇ§\^^?ď}ďűaÓŚ§ëĆ-‹v™žßýî÷ÁŰvяŇ?čIÄb†/šÓÜɊD,:qD“0‘DrŔ(J~XlaŒ>‡UÇq×í&Q,­Şňóš3ŮÍŔˇšŢ~Ó÷`÷Ô¨€;ƒżŽż^qÝ×aהť“uIęÄűÎŁWÂo×Üc˛‡Ýö3¸{ŰĐúŞ+>‰4Ÿ—€#ęąW߈ן$`” kLUœN‡'Ö,˜<Ą´‰@h%ĐŁ…- 3y›ř’ˆEÝWYÄ"Îë<^čÂó᯿ýƒďűł.8Oúń;ľÜc…iGźń˘W˝ Î~ÎůpĂ߯‚VŢ ›Öo„Ń‘ç×cłfφ%˗‰§­€sě|tuw9ťšL îšRdE°şrđń˙ţ\ůUpĂ×ŔĆľëarb†ć̆Î>.xáĹpĚIÇCžÍŔޙ PE×`|ĺG߆Ë/ű#ŹüÇđôƧ`jr úúaŸý÷ƒ‘=Ă0kîlçW#… X¸řřꏿ ÷ÜvÜqÓ­°ćńŐ°cë6˜žš†Ţž>˜3qěŃpĘY§9;ËđËýá™qÁËţką€2HĢŚźQÉ4|˛ĽÁi*?Bžřmâ0*żŔöŁôŁěĘăú2YűFŮôهž_ĺK;őؕ%‹ĺěÔĺ¸ň¸u. sÓWŃř€ &o˙L<řWč9úůĐuĐ)Đ1o)XüyâöXĎĹ&ůíOÂôş;aňáËÁšÜYÎ™Šˆb8œYěŔEžß{۞řôžü č^v:äfďď¤)ěÝSŤo†Q{ń°8ž:ĎŠŸ×қŒUżů$gˇţH^{öěľËżîşkĽł ĚŢ˝Ă5B÷Zƒ˙墐|äăpŃEÂsŸ{!,_žÜŽ3ŕ”“‹tşíy´›×yjj >ůÉĎŔ/ů+;ýsᄎƒE‹xÝô:ś­öź”?Béúëo€[nšľR§e1LőQŔő•‹‰^óš×ÁŤ^őJ8ďźg9ťŕdł9xć™gě2ÝżůÍď`Ł=gŽŻ”ĄГˆĹ _4§š“‰Xtâˆ&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰëÁŞůŤ gœŕ˙łÇ:Čeŕú-Ŕyţ<ńIpŕ°Ů‹`^÷ ó#ž˝ScđÔŘN¸cË*¸|ĂݰfdXś•-=>ĐrgżĚţ[´çٟXůkř뺕đ⼧ÂIű,sâđtόí‚[ˇ<?]u<5ź.ćťuÖĎ 83ŰşóP+ź.ʗVdáýö¨ô›˙:FĘÇ }ŤmÄëO0ʆ5Ś*N§Ăk ëz¨E†\A˘ggKĐf üľę|ŽüŕĎóˇüʖžËÖź¸m˙=ᄓoăůd“Đ^ŕ‹eđÉ<ýęž;@:Ł@ů’ˆEÝWSÄ2+× ™ŹĎ263 !┾l'ôÔW2œŃÁոݹŠ 7řcWůßňńWĺ N˝â‘ęリB ďㄪůcPž;ú_őĘVűŘ/‡żěĺXĺr”šŞ12Î؞ŠÉoX]ÔËŁXţźqËyňĆ*şá>~Îby° ԏżŢkëĽĚůž÷˝^ň’ńyţŕ?r^Ő6 -Y ő-ú=‰XĚđEsš;YaˆX¸ČËĸ:ôŻ-`Ő'ÓMÂDÉŁl(ůaąq„i0úVÇ]ˇGř0>Ż,€ĺů‹OÝsźg Ům¤ô ç.ZIxR €łÖéNȏĹÇţˇPę3a¸ô 'NÖyoEČâNđl˙™‚ÇŠ–Ż *ĂŤNÁŞĆĚšq 5StĘ^ž°ZŮŹĆNߑuËU™ŘzęŠçĂyKun|{"]á)Mv+uËÓrŸRž,›§ĎeJ嶄„•ęW }ŤmÄëO0ʆ5Ś*N§ĂkLžPŘ4ţżiŤ„ÖÁĐĐ,çď˝÷Ž<Ü3čpéoĄćĹJ‹žóü­}AĎQkß×"śgЎ,‚:ƒQů’ˆEÝWSÄ" .ОL îˆ"Â=QČ;ݙčp)”ŠüęܞJ¸!˛íSĹźB Üb|§żË~ĺJ ‹üf¤đeřß0_đźî™wꪳôh$Ť”.@á7̊ž‰˙n÷ĚtfrĐeĺ*˛Jř\,ÄóĹë†ď#Z^uHú’ˆ”A;ąčiŘMů ٘†oBś48SmOsmRZƒs%ćv}ţ9[PXŐ5?Čňő/çY@ÎZ87Ă,÷Ń@>ѧą,gg>2[Ľ5Ř2Wś”ÖĽXŽęžŤ8\ËĄ8k~(‰nJ‹h`ůňěˆYĘ;ÁXŐý_*;˝dÝřËś8kˆĽÁ*ĺÇťW^c,ۜGeŞ—4œ?˝ÁĘq‘ĺ։ĺ)s×B+ôĽ˛x2e!N9ˇÎ€‡7W[?5m՞Ňö–ꝊŤnTˇć8›$bÁçJ†3:¸>ˇ_xâîŇR}–žsf2ĺ4~ńJ­ˆĽœĆ˝çćÎÄĘ/žsI˝{fUAE9žU÷>RU°Ľ1ĆťűJ5Nř#xĘ\呫“}ayŹ-Ťżüq˝>Ő|ůÓWo,Të§|1Ťw˜hˆyve ‡ż­jËfŐ…A˙ '‹žhNs'+ KĂŤ>™n&’HeCÉ‹#LƒŃç°ę8îş=ĽąËřÝşŒĺ™Äyē•Ů–ĎŻ<™,ďŢĺüÉ8VËčĘ9Ÿ…#•óii•Ä,ŽŚú¨>V,_âó YœźXŐIĄź4ԕr]ɔ3̝ƒ[ĺ‰iŠŹ–;)ßőŤŠŤJOüňó€3Uńgy‚ě|Îňq3[ş(Ĺđ=?¸Ţ8ĺŚfĄoľŔ˘xýI"FٰĆTĹétxb͂ÉJ›„V Y„ tF&ň%‹şŻÄ5mŔ׃˝3“ ŠűN׎éřç˜rBÓƗ™ <ř#ƒ‚Ż/.ř˜ňqű}š`Ĺ÷8¤Čşdţ¸Ĺż</LÁ8ˆƒ‹tŚaŚA úZľí֗ušřüÓ hŘ•LĂ7![œŚň#äkŚMŹęZUUÄÂE!ĺÝJJ"”˛ Â˝—Í”…$|ťäŇÂXÎî%™ŠđĽĎśçJ'bďfc~‘ŒU9ÝTb3w7”bĆrIžß DŤ”?g;ƌUZƒł|kü÷NžKë‡<^!ců~I|ĂŹł~XţĺYŠĘĺrÖ ľCűfZэ])OĆÍOumӍ›ľ} –ż)+ź•uKŤÂ Ľ2eËk…ĺ_őŠŢ3k›žŤ¸xEç!sœMąŕs%Ă\Ű˝"ОĐ$j’ęN,eŸr,ˆ=@E`QNc•Çšň í˗_°áÝ]%*OŐ2xËŞ‹„ć°"f)‹XřŘ^ÍęäĎ˙×ó}ďŒ}Ě˙hĂ Ĺ ­Ë Ť›ÚżU{źˆĹŞis¨šßhâĄГˆĹ _4§š“‰Xtâˆ&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰŁŕ Uá‰ĺ<“Ŕ=a[Ě?NWG;?—Už0–v%sţ–…aš;ŸXĺ_%xwIaŹ:RzÄ0VE cyĆ)˙32ţÓG>ąő mj3cy2ě™V&™LE<ÂóŸ،ŕ)ey7•ŒUżŽ[Śz=Sâś2ĘăŸó˜%p'˛ŮęâA™ÇĘÔżŽ @ů¸aĄoľŔ˘xýI"FٰĆTĹétxb͂ÉJ›„V Y:Ł@ů’ˆEÝWâš6ૅl+A :o+ř’ˆ”A"łhŘ•LĂ7![œŚň#äkžM2ĺˇ’Ł´ôćYŸł*;‚T~˝]ęÝ˝š,fUÖŘ2ž<Ž/_ls~ŃUJëŮQĽ,bńţzĚ峗ý¸Oi÷—ÚP^?/§7NľXŐxYV˝qVŽă–ÂSEĚ]ó+Ű+?<+Ýlt~ŠWŽ”o>şKƒ~QŒSĽń9i= “ľźNvjâUęŢ[?ľh—ž˘ÚO„|lŚâ6S~Dě ąŕs%Ăƒť*.Š` ţÎ'eAI­¨¤žČ$ŒŻZ.żČџŽ6~TěňÎ"Őńź\חmźąÜXźąŤńâóÇbň5âŸęűZĄű]ýşńŠwDQ+Tá"Úrű׌ ‡ţG"3|ќćNV$bщ#š„‰$’FŮPňĂbăÓ`ô9Ź:Žťn„3ťs~PPŠđĄIu„ŤĂĺŞY ˛[‰wě*=ĎŐŒp÷lH[”Ç™Ę˜XţěIČJbV„f"┳Zćňơü×ViŢ^ŮĘłź{‹W¸â+Şĺ SŔ̓Oë-yŘ,ńąlŠnkňëKĺŚfĄoľŔ˘xýI"FٰĆTĹétxb͂ÉJ›„V Y­Q ‰|IĢî+r1[ĎW -ŘV$bQ÷% (ƒD,faꌥśiř&dKƒÓT~„|͡IůREŹ’Ď %Ř‚A@l’ÉBéYäŐ_eYž¸ŠUń +oc Á‡7.T…)ĺG˙°LÉŻöFRy᭖Ż34^ÉÄjH}7ĽJYŒŽOy*v+˜V-{š,ž2XV §'^ůo°čţźFĄmúŽâ❇ rĆ9§ąŕs%Ă“ŰwÓȊć,Ű˝;€¨qVî"AČĐWWÄąäĂjĘáßqFľţaőRżüŹnžjÓ֊aü"˘řşßmLyř÷Tý.ú‰XĚđEsš;Y‘ˆE'Žh&’HeCÉ‹#LƒŃç°ę8îş]îăojĆDć$ÇđĚż|ăF`ز*‚–ň¸ä/™+ţ5‰J’˛f&,ޞŹqg9çť,ÔSKďCŠ[§xë*Ö;Šgţ^ĎXŐv“˝ĆQnjúV ,ڈן$`” kLUœN‡'Ö,˜<Ą´‰@h…ĐćĐšČ׳@“(oęžÜjkvzžїD,ęžV­՗0ÚRÄ’ŕ §aoT2 ߄lipšĘormR]„+ś‚ś0ą Ť J*ik8kE>^€şc]ŮćĄxă†ňylx•Eź`<ßbIÄ^ţ…'ŸęßTsžg!ĺˇęsD×OŰôŐ~"äŤ`3ˇ™ňëçœ>HĂϕ gtp\îr0q ŸËéükŐ甇_„";irZĺŽĘ°lYŁÓ‹qFäŚtˇQŽMő<ą˜á‹ć4w˛"‹NŃ$L$‘0ʆ’G˜ŁĎaŐqÜuťTđhýçlVţąDÔXç5Ő;ß{EQc}ÜýË˙Śîđ♏ű¸ęĚwC–1yd!ťľ„ęNkĘž܄/”›š…žŐ‹6âő'‰eĂS§Óá‰5 &O(m"Ú$d!´1tF&ňť5śş/ˇň"^ĘůnD_ą¨űZľT_ ‹Y4ěJŚá›- NSůňM°M‡UÇq×íRqj`…™cć˛k׹sd‰˛EÍů„ňŢcÔ÷ŠZż í†1~Ł{őxýI"FٰĆTŚdŞ“Xł`ň„Ň&Ą@BB›Bgh"_ą¨ű’ˆϗD,ęž$beˆĹ,öF%ÓđMȖ§Šüů&Ř&Śâś\{*´‰P\d[œŠĺGqńŠęÖ gœsú  >W2œŃÁIĂυéîlJÄÂÁţŐŻ~ žň•˙ö¤ľ ă<>"˜\B°nÚ sâvhą´°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ç2`u?hÄQtŔjJŹóĆřm¤‚Fźţ$ŁlXc*VWÁčăň„Ň&ĄÝ@BBBgh"_ą¨ű’ˆϗD,ęž$beˆĹ,öF%ÓđMȖ§Šüů&Ř&Śâś\{*´‰P\d[œŠĺGqńŠęÖ gœsú  >W2œŃÁIĂυéîln'ŐÇ1XNzœ6—8'ţ „D,ČŔŞOŚ›„‰$’FŮPňĂbăÓ`ô9Ź:Žťn—Š#bVœ#ȀŐý GŃŤ)ąÎ_㷑v ńú“DŒ˛aŠX]ŁËJ›„v YmQ ‰|IĢîK"<_ą¨ű’ˆ”A"łhŘ•LĂ7![œŚň#ä›`›˜ŠŰríŠĐ&Bq‘mipŚ–ĹĹ+Ş[ƒœqÎéƒD,ř\ÉpF' >§şłI‹ĺQŞđ÷Őó‚UůÎRłč$b1ĂÍiîdE"8˘I˜H"9`” %?,6Ž0 FŸĂŞă¸ëvŠ8"fĹ9‚ XÝq°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´‰@hW…ĐFКȗD,ęž$bÁó%‹ş/‰X@$bIŠŢ¨dž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝäŒsN$bÁçJ†3:8‰Xđšp8՝MďÄRFYŹâŠY@ú‰XĚđEsš;Y‘ˆE'Žh&’HeCÉ‹#LƒŃç°ę8îş]*ŽˆYqŽ V÷ƒFEŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m"Ú$d!´ tF&ň%‹ş/‰Xđ|IĢîK"P‰XŇCŞ7*™†oBś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9Ű$AˆŸ+Îčŕ$bÁçÂáTwNZÄÂQ,˛Ŕw˜\Ą°nÚ sâvhą´°ę“é&a"‰ä€Q6”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜¸eu?hÄQtŔjJŹóĆřm¤‚Fźţ$ŁlXc*VWÁčăň„Ň&ĄÝABB@gh"_ą¨ű’ˆϗD,ęž$beˆ%=¤zŁ’iř&dKƒÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُxEukSąM‰Xđš’áŒN"|.Nuç¤D,ľœâ=./g’|✸šD,-ŹúdşI˜H"9`” %?,6Ž0 FŸĂŞă¸ëvŠ8"ćŽGYÝq°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´‰@ …ĐňКȗD,ęž$bÁó%‹ş/‰X@$bIŠŢ¨dž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝäTl“A"|Žd8ك“ˆŸ ‡SÝ9-KR\jœ8‰X̝ŹŇą$6Ć`Ő'ÓMÂDÉŁl(ůaąq„i0úVÇ]ˇKĹ1'p=Ęę~ЈŁč€Ő”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMÁ Y- Q ‰|IĢîK"<_ą¨ű’ˆ”A"–ôęJŚá›- NSůňM°MLĹmšöThĄ¸Čś48SˏââŐ­ANĹ6I$bÁçJ†3:8‰Xđšp8՝IÄb†OœˇC“ˆĹHÌ˛Ąä‡ĹĆŚÁčsXuwÝ.GĜŔő(ŤűA#Ž˘VSbż0Ćo#í4âő'‰eĂSąş F—'”6I!Šą•@H $d!´(tÎŢMäK"u_ąŕů’ˆEݗD,  इToT2 ߄lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn r*śI‚  >W2œŃÁIĂυéîL"3|✸šD,ć@"`” %?,6Ž0 FŸĂŞă¸ëvŠ8"ćŽGYÝq°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I I­BŠ ! ŕƒÎ™?a_ą¨ű’ˆϗD,ęž$beˆ%=¤zŁ’iř&dKƒÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُxEukSąM‰Xđš’áŒN"|.Nugą˜áçÄíĐ$b1?§A.ŹúdşI˜H"9`” %?,6Ž0 FŸĂŞă¸ëvŠ8"ćŽGąúƸƒŐ”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMR0;t ˛čœůö%‹ş/‰Xđ|IĢîK"P‰XFoT2 ߄lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn r*śI‚  >W2œŃÁIĂυéîL"3|✸šD,搘ˆĽ~¤R‹$g"V̢b+(ůaąq„i0úVÇ]ˇKĹ1'p=ŠŐď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’Bęc+HČB 8Đ9Ů'ěK"u_ąŕů’ˆEݗD,  ą4.ŒŢ¨dž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&Č  >W2œŃÁIĂυéîL"3|✸šD,ć@"`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ÔÇV!Y…@Đ:Ů'ěK"u_ąŕů’ˆEݗD,  ą4.ŒŢ¨dž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&Č  >W2œŃÁIĂυéîL"3|✸šD,ć@"`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ÔÇV!y…ĐćĐ9Ů'ěK"u_ąŕů’ˆEݗD,  ą$č‹HĽmcž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&Č  >W2œŃÁIĂυéîL"3|✸šD,ć@"`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ÔÇV!…ĐĆĐ9Ů'ěK"u_ąŕů’ˆEݗD,  ą$č‹HĽmcž ŮŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&ˆHVŔâ0–x!!T‰HÄbŽ ŸS<‰XS˙ ‹žhNs'Ťöą(đ1Ý$L$‘0Ž”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ŻGe€Őď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’BDOz¤%’ Ym Ó{ž$bQ÷% ž/‰XÔ}IÄĘ K‚žˆTÚ6Śá›- NSůňM°MLĹmšöThĄ¸Čś48SˏââŐ­ANmŇÔp F"3|ć¸Ĺ‚‘ˆĹ Ÿ>o’œú‰XĚđEsš;YľçN,’`şI˜H"9`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ˆ>Ţ#-  ˛Ú:§÷„}IĢîK"<_ą¨ű’ˆ”A"u_ĺóŸ<žiř&dKƒÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُxEukÓ@›45܂‘ˆĹ Ÿ9ną`$b1çϛ$§ţA@"3|ќćNV$bÓMÂDÉăXAÉ‹#LƒŃç°ę8îş]*ŽˆYńzTXýcÜÁjJŹóĆřm¤‚Fźţ$ŁlXc*VWÁčăň„Ň&)Dôń&i …ĐfĐ9˝'ěK"u_ąŕů’ˆEݗD,  ą¨ű’ˆĹŹ- NSůňM°MLĹmšöThĄ¸Čś48SˏââŐ­ANmŇÔp F"3|ć¸Ĺ‚‘ˆĹ Ÿ>o’œú‰XĚđEsš;Y‘ˆEL7 I$Œc%?,6Ž0 FŸĂŞă¸ëvŠ8"fĹëQ`ő;ŒqŤ)ąÎ_㷑v ńú“DŒ˛aŠX]ŁËJ›¤ŃǛ`¤%Đ@BBAçôž°/‰XÔ}IĂçK"u_ą€2HĢîkZÄbŮPł1 ߄lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn rh“چ[0ą˜á3Ç-ŒD,fřôy“äÔ?HÄb†/šÓÜɊD,`şI˜H"9`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ˆ>Ţ#-€ ˛Ú:§÷„}IĢîK"<_ą¨ű’ˆ”A"u_ą˜ľĽÁi*?Bž ś‰Š¸-מ m"ٖgjůQ\ź˘ş5Či MDě 7ă$b1ĂgŽ[,‰XĚđéó&ÉŠˆĹ _4§š“‰XŔt“0‘DrŔ8VPňĂbăÓ`ô9Ź:Žťn—Š#bVź•VżĂw°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I }ź FZ$d!´tNď ű’ˆEݗD,xž$bQ÷% (ƒD,ęž$b1kKƒÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُxEukÓ@›ˆŘnĆIÄb†ĎˇX0ą˜áÓçM’S˙ ‹žhNs'+ą€é&a"‰ä€qŹ ä‡ĹĆŚÁčsXuwÝ.GÄŹx=*Ź~‡1î`5%Öů cü6ŇNA#^’€Q6Ź1ŤŤ`ôqyBi“"úxŒ´‚…ĐâĐ9˝'ěK"u_ąŕů’ˆEݗD,  ą¨ű’ˆĹŹ- NSůňM°MLĹmšöThĄ¸Čś48SˏââŐ­ANm"boX¸'‹>sÜbÁHÄb†OŸ7INýƒ€D,fř˘9͝ŹHÄ"Ś›„‰$’Ćą‚’G˜ŁĎaŐqÜuťTłâő¨ °úƸƒŐ”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMRˆčăM0ŇĆ@BB Cçôž°/‰XÔ}IĂçK"u_ą€2HĢîK"łś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9 ´‰ˆ˝aáfœD,fřĚq‹#‹>}Ţ$9őą˜á‹ć4w˛"‹˜n&’HÇ J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘7ÁHK  Y- Ó{ž$bQ÷% ž/‰XÔ}IÄĘ ‹ş/‰XĚÚŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&"ö†…›qą˜á3Ç-ŒD,fřôy“äÔ?HÄb†/šÓÜɊD,`şI˜H"9`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ˆ>Ţ#-`$d!|Đ|IĢîK"<_ą¨ű’ˆ”A"u_ą˜ľĽÁi*?Bž ś‰Š¸-מ m"ٖgjůQ\ź˘ş5Či MDě 7ă$b1ĂgŽ[,‰XĚđéó&ÉŠˆĹ _4§š“‰XŔt“0‘DrŔ8VPňĂbăÓ`ô9Ź:Žťn—Š#bVź•VżĂw°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I }<šă†@hld€@hrXÖ=3ž‚/‰XÔ}IĂçK"u_ą€2HĢîŤxţS+Ľ|„n2 ߄lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn rhťĆÇU)¸'‹>sÜbÁHÄb†OŸ7INýƒ€D,fř˘9͝ŹZQĂ>Ž d‘‰X1‹ŠqŹ ä‡ĹĆŚÁčsXuwÝ.GÄŹx=*Ź~‡1î`5%Öů cü6ŇNA#^’€Q6Ź1ŤŤ`ôqyBi“"ú¸îqcnîI $ڑ…@p 3ú(ř’ˆEݗD,xž$bQ÷% (ƒD,꾍:şiČ4|˛ĽÁi*?Bž ś‰Š¸-מ m"ٖgjůQ\ź˘ş5Či Mt}S…›9ą˜á3Ç-ŒD,fřôy“äÔ?HÄb†/šÓÜɊvb‰`ö˜ˆł¨Ç J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘'wÜÍڑ…Đ’`R3u3ž‚/‰XÔ}IĂçK"u_ą€2HĢî+ł9JąŚ_…nüą{ŘŇŕ4•!ßŰÄTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&žqîéÁ͉XĚđ™ă F"3|úźIrę$b1ĂÍiîdŐ*"“çs‘ő`&bĹĚ#Ćą‚’Ÿř‹aŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘+7ÉM „T@BBÓ#l›ŹéÉIƒÎI^Á—D,ęž$bÁó%‹ş/‰X@$bQ÷•<˙MONžĂÚŞy"ďů tӐĹŘŔ–§Šüů&Ř&Śâś\{*´‰P\d[œŠĺGqńŠęÖ §6ô(MXă*S^td%HU"ą˜ăÂçD"–FăÔ?HÄb†/šÓÜÉŞľvb ĆB{´Đtä˜CŹf‹gĐJ„ĹŚĽ™ŻŽăŽŰĽâˆ˜ŻGe€Őď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’BDW>nňÁ4ŇŁ…­˛ZĂťw ¤Ň}|IĢîK"<_ą¨ű’ˆ”A"u_éółÇŔa0…ŁĹ2MT 2‘oBś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9 ´‰„ďÎ)s; 3 7s$b1ĂgŽ[,‰XĚđéó&ÉŠˆĹ _4§š“Uk‰Xxlsă*ŒÔ˙acĚ_$‘0Ž”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ŻGe€Őď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’BD×:nĆŚ€@he…Đ’ŘžyKL ŃGÁ—D,ęž$bÁó%‹ş/‰X@$bQ÷Uąplz;˜ÂŚ]EÁ,ĆŢś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9 ´‰¤ďŚqs7Üffd…,nćHÄb†ĎˇX0ą˜áÓçM’S˙ ‹žhNs'ŤVąp ćĆŐâöńĐďcÎř"‰ä€qŹ ä‡ĹĆŚÁčsXuwÝ.GÄŹx=*Ź~‡1î`5%Öů cü6ŇNA#^’€Q6Ź1ŤŤ`ôqyBi“"ú¸îqĂv‹>‚@hN…Đ’Řô亍ÎčŁŕK"u_ąŕů’ˆEݗD,  ą¨ű*ŠX86­Ůڰzˌ@XŒ˝lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn rhßŐ#я)ĐÁÔÔ´Dj7s$b1ĂgŽ[,‰XĚđéó&ÉŠˆĹ _4§š“U+ŠX8 săjá齁ďbÎř"‰ä€qŹ ä‡ĹĆŚÁčsXuwÝ.GÄŹx=*Ź~‡1î`5%Öů cü6ŇNA#^’€Q6Ź1ŤŤ`ôqyBi“"ú8ĆqSÜ:B+ƒ„,„–öüۓ?Z'…ÎčŁŕK"u_ąŕů’ˆEݗD,  ą¨űjˆX8Ö>źĆ 1Ÿ‡Z_xj:& ,ĆŢś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9 ´‰˘ďťóĆĆŐÉÉ A7s$b1ĂgŽ[,‰XĚđéó&ÉŠˆĹ _4§š“UŤŠX8ňůicăjaíß÷1g|‘DrŔ8VPňĂbăÓ`ô9Ź:Žťn—Š#bVź•VżĂw°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I }ë¸)>ľ}\% $d!´$šűސouF_ą¨ű’ˆϗD,ęž$beˆEÝWSÄÂńČ]‚)ÜţÄtDęԁę Gś48MĺGČ7Á61ˇĺÚSĄM„â"ŰŇŕL-?Š‹WTˇ9 ´‰†ďíŰó` ăăăŠÜ̑ˆĹ Ÿ9ną`$b1çϛ$§ţA@"3|ќćNV­,bᘚ27ŽN?śľň>ćŒ/’HÇ J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘c7…'wĐĘ ! Ą%ąsËVXóđ#žotF_ą¨ű’ˆϗD,ęž$beˆEÝAIJćÁ5°ó™` ›÷ŕţů,ÔŠŐŽ&lipšĘo‚mb*nËľ§B›ĹEśĽÁ™Z~ݍn rh ßűw`óDLaff&'ŁžiîfŽD,fřĚq‹#‹>}Ţ$9őą˜á‹ć4w˛juK>?ŢšG ącÎ ˝˜3žďą´A+id›B8”fź:Žťn—Š#bVź•VżĂw°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I }ó¸aOíśGt—OĄ9ABB ½xç57”>ëŒ> ž$bQ÷% ž/‰XÔ}IÄĘ ‹ş/‚ˆ…㎍ďT (7ćĺLŐdĄN¨Ţp4aKƒÓT~„|lSq[Ž=ÚD(.˛- ÎÔňُxEukÓ@›čřÚśË7—w"37ŽŽBÝ ˆĹŸ9ną`$b1çϛ$§ţA@"3|ќćNV­.bᘞ.Í% ŽŤů•#Ň0ß`+(ůaąq„i0úVÇ]ˇKĹ1+^ĘŤßaŒ;XM‰uţÂż´SЈן$`” kLĹę*}\žPÚ$…ˆ>Ž}ÜÚRzG"´.HČBh d2ŐCšü,¸›ţrš=!ÓůőœÂČE"u_ąŕů’ˆEݗD,  ą¨ű"‰XX‘ÁMşŃ éy.ŞwŒ”EŘřzŮĘ1{|e‘yIüć¨Á›˜č6ăž ś‰Š¸-מ m"ٖgjůQ\ź˘ş5Či Mt|™kţÝ÷×m&ÇŐ˝{÷xĆUOHÄbˆĎˇX0ą˜áÓçM’S˙ ‹žhNs'ŤvąđąnbÂ}¤žÉquę–'ëT(óýAĆą‚’G˜ŁĎaŐqÜuťTłâő¨ °úƸƒŐ”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMRˆčăčǍ=ÖĺďvśXă*Đˆ #šĐ’ŕçí‘={ášßţÔ 0r‘ˆEݗD,xž$bQ÷% (ƒD,ęžH"Žk~} ŒěË ŸÇŢ=ĆŕgˇMÖϋĆMCt[œŚň#ä›`›˜ŠŰríŠĐ&Bq‘mipŚ–ĹĹ+Ş[ƒœÚDǡdűŮú)Ř5͌Ť…B†‡‡ ‹>sÜbÁHÄb†OŸ7INýƒ€D,fř˘9͝ŹÚAÄÂ155Ţůq•LAţş'j,Ě÷Ç J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘›8n wl6–7:Ž˛Z–ĺÚšô˙B~Ý…‘‹D,ęž$bÁó%‹ş/‰X@$bQ÷EąđÝXţú㿸a-s—wĺؗ\?ů#ˇP$mKƒÓT~„|™˘Ÿ‚ÍTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&:žŹúç’Őĺ_›WwíÚYšˇş  ˘ƒ“ˆŸ ‡SݙD,fřÄ9q;4‰XĚ!  ăFGÝGé%1ŽN\ţ¨§ Ě÷Ç J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘9nřn,7>éź59Ž: -ŤFzČ?îܲ~ɏ@ #‰XÔ}IĂçK"u_ą€2HĢî‹(bářýw~;ŸŮPá[˛ü°ńuóž|ýę1ÎbŇś48MĺGȗ)ú)ŘLĹmšöThĄ¸Čś48SˏââŐ­ANm˘ăëą}ýń ؉XĚpŠqât$b1w˛j Ŕřř8‹ÉŤlçLýń!¨”ł¨Ç J~XlaŒ>‡UÇq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘›:nfŽ}؞ #ă*Đh ! Ąeœ¸¸‡÷ďż˙XóđŁF.ą¨ű’ˆϗD,ęž$beˆEÝYIJćÁ5đ‡ďţŢ ]ŁÂ7ł0čr|óšQ¸ă Äf1i[œŚň#äËýlŚâś\{*´‰P\d[œŠĺGqńŠęÖ §6ŃńőŘîß]€oŽ ßĹ为sçN˜œœ‚dŕš}W§ˆ\ÉpF' >§ş3‰XĚđ‰sâvhą˜CZ"–™™<Œš?‚Hr\üÓCPxr'nQ1Ž”ü°Ř8Â4}ŤŽăŽŰĽâˆ˜ŻGe€Őď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’BD7uܰ§ö@ţZ÷z&ĆUĄŃ@BBK!L…Ďńă/|5ćC #‰XÔ}IĂçK"u_ą€2HĢî‹,báúÉgݝÇLŞđ덯űĂ^;Ž7ĽlipšĘ/SôS°™ŠŰríŠĐ&Bq‘mipŚ–ĹĹ+Ş[ƒœÚDÇם^lż˙؃ĺGř“%1ŽṇۜZ`ą˜ăÂçD"–FăÔ?HÄb†/šÓÜÉŞD,œkddÄůœĆ¸:ńӕxĹĹ8VPňÂbăÓ`ô9ÔúE&\7Š×Ł2ŔęwăVSbż0Ćoă}Ű5âő'‰eĂSąş F—'”6I!˘;něÁuú;oi7Bť€„,„–B=ţşÇVÁ%Ÿü\/…‘‹D,ęž$bÁó%‹ş/‰X@$bQ÷Eąp|ďc߅uŽsĂTá×_Ú4ďűíp¸ E)[œŚň#äËýlŚâś\{*´‰P\d[œŠĺGqńŠęÖ §6Ńń­ą˝ďţQxhťŰXăęÔԔa1‹çöM\"r%ĂœD,ř\8œęÎ$b1Ă'ΉۡIÄbé‰XFGGœÇçq¤1ŽÖŢÚŔ8VPޞĹĆŚÁčsX‡SÜuťTłâő¨ °úƸƒŐ”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMRˆčă&›üeBńé˝Î{ڍ…Đ.Č Śłm–Ŕ_ŤÎç¨WĆó×űâßuńżűíˇčÍ<`r[ńšÎłQíAaĂę5051ǜvŠÇŞ0ZˆEݗD,xž$bQ÷% (ƒD,ęžD,żüę˙Á5żžĆyŸÉx/ŻÜɋé Ly|}ló Œç-8űÎŞ醢°- NSůňeŠ~ 6Sq[Ž=ÚD(.˛- ÎÔňُxEukÓ@›čřÖŘ>˙čüßşIç}šă*łpôôô.Ş&‹9.|Nń@$bi4Nýƒ€D,fř˘9͝ŹÚMÄ2>>fż&œ÷iŽŤ…{Ŕš.@î¨}A Ç JŐłŘ8Â4}ëpŠťn—Š#bVź•VżĂw°šëü…1~i§ Ż?IŔ(֘ŠŐU0ú¸<Ą´I }ÜäqSřű㐿}ƒó>q•Đ<čîîvţ>óĚfž;?ÚŚJk_ń]À„,„–?aű#dU&/ŤxŘ#fQč‹$bQ÷% ž/‰XÔ}IÄĘ ‹şŻ!Ëß~ň7ç}íäĹýÓ˝¨ńőžőÓU1KTöMŘLĹM#?BžLŃOÁf*nËľ§B›ĹEśĽÁ™Z~ݍn rhßą|˙‰qç}#ŒŤî?<1K•‡D,ć¸đ9Ĺ‘ˆĽŃ8őą˜á‹ć4w˛jGËŘؘóžĆՙ'śŤ‰Y0Ž”Şgąq„i0úÖáwÝ.GÄŹx=*Ź~‡1î`5%Öů cü6ŇNA#^’€Q6Ź1ŤŤ`ôqyBi“"ú¸ÉㆋXŚozŇyŸÔ¸Jh^%ÚFBBƒÂ/fŮžy3œtîYr*Eą¨ű’ˆϗD,ęž$beˆEÝYÄŠ ž÷ŃďÖ݉šLT…ďł<ľŤĎ9˛ B飊Śj37üů2E?›Š¸-מ m"ٖgjůQ\ź˘ş5Či Mt|˝ëĹĚ}œP˝X8ŇWš˜…?ŽĄŻŻôP-0‰XĚqásŠ"KŁqę$b1ĂÍiîdŐ^"ćt9ĚY0â–ßčôßfôEŕ& ž/‰XÔ}IÄĘ ‹ş/˛ˆe̓kŕk˙ńUxŕ8ŸÓ˜źÄŻ=3×=>Gě× űÎňü ŞhŞ6SqÓȏ/SôS°™ŠŰríŠĐ&Bq‘mipŚ–ĹĹ+Ş[ƒœÚDÇ×cťwŢz×ܸ5ď|nÄq•?fˆ˙˘/Dĺr9GľŔ$b1DžĎ)ˆD,ĆАˆĹ _4§š“U;‰Xffň°wď^˜žžvžkÄq•?fhćţ͐=p6dćDěz†qŹ T=‹#LƒŃç°§¸ëvŠ8"fĹëQ`ő;ŒqŤ)ąÎ_㷑v ńú“DŒ˛aŠX]ŁËJ›¤ŃÇM7ěŠ=0ýÓ{ °jťó™D,Q%ÚFBBĂ nň˛gÇN¸áu>~ŇńőOř$bQ÷% ž/‰XÔ}IÄĘ ‹ş/˘ˆ…ďÂňűo˙žóáoÞí{œďҜźÄŻŰ†‹đëť&ě÷œş´Sýô×71ŃlĆ}™˘Ÿ‚ÍTܖkO…6Š‹lKƒ3ľü(.^QÝä4Đ&:žŹúçëOŔťďm“EçťFW … ďužëééń‹ŒjeˆĹ>§x ą4§ţA@"3|ќćNVí#ba0>>nUĂP,6ţ¸ĘöL8gŕËšĂwgÁ8VPޞĹĆŚÁčsX‡SÜuťTłâő¨ °úƸƒŐ”Xç/ŒńŰH;xýI"FٰĆTŹŽ‚ŃÇĺ ĽMRˆčăFŽ{°ššö ˜ţőýŔFÜűÝ$b!ȠՄ,˘Gy’B–0ŃJśô]śćĹmƒüď 'œ|¸gĎ^ źŕ*˜=2{rUýnîžűŔ ßđj¸ŕe˙ě?ů“ˆEݗD,xž$bQ÷% (ƒD,ęžH".`áúë˙;ŸŮQůžQ&/"ăëÂĄ,üëšýđşSťƒť7GUw\S°˛÷eŠ~ 6Sq[Ž=ÚD(.˛- ÎÔňُxEukÓ@›čř2×üłőSpÉęq؉XĚpŠqât$b1w˛j łřÎaŁŁŁ G3ŤÖœ>čyŢĐqţ2WЂqŹ T=‹#LƒŃç°§¸ëvŠ8"fĹëQ`ő;ŒqŤ)ąÎ_㷑v ńú“DŒ˛aŠX]ŁËJ›¤ŃÇя{Ě*Üąň7>éˆ.Ë  ACCłœż÷ŢťňtűżH.ý-ÔźXéoŃóbžżľ/¨ó9ęoíűZÄö˛Úá“Çâ›Ŕ Řüœ^ +.x,;úˆJ fPGZžÜ$bÁó%‹ş/‰X@$bQ÷EąđGÝuőpӟn„‘Ý#•ďĂ&.eŠ“ŃńuNŸ/9Šžwtw@Nďň•5Í¸/SôS°™ŠŰríŠĐ&Bq‘mipŚ–ĹĹ+Ş[ƒœÚD×?BčňÍÓđť °kşš°™ÇŐl6ƒƒCĐ××Wůľ•7m5F€D,fůp8ĺˆĹ —'ÎAG"s'ŤVąäó30==ăžąŠ™ÇUk şÎ<r'ŮĽsiĹ ,6Ž0 FŸĂ:œâŽŰĽâˆ˜ŻGe€Őď0ĆŹŚÄ:aŒßFÚ)hÄëO0ʆ5ŚbuŒ>.O(m’BDÇ z:Źř*d d3îËýlŚâ6gm"ٖgjůQ\ź˘ş5Či M|šyÂ^~Ů9U„MăEX=R€vçáöíyßî+­6Žň]Zz{{AKgg§ó9“É&PŽ`IÄb–‡S>‰XĚpŠqât$b1w˛j%‹;ĄP(:šËç§aj*ĹbÁ—ŽŐĆUžKKÇá ˇtd Bf^X]9ŃÍĐtrG˜ŁĎaNq×íRqD̊ף2ŔęwăVSbż0Ćo#í4âő'‰eĂSąş F—'”6I!˘+7|ŹÉŰóŇą)`ť'Ą¸uŠOíÂ“;}ťŻp4ú¸Jh|%ÚFBBCŁ<9augł~E>@ iĄžňžŁ…ŮŮG1{î~Ź­ö÷¸şw¨ˆŰˇ—qÓś2ŽŒ•p`¸ˆíE8О*Áśö_/qHîéŹ =ČŇ­‹qIv}Ҕ“ĆŢȝRôł ŽÉDŠ.\÷*Jᓙ˝eR c˛´O&ÉΧăŘrn{2ň‰ˇŤgVż‹&NT›x´ZÇ7VęřĘJ §jţW÷LăOż7ÝxGŽÄţ}ť°cű†‡ĎőÉ%÷óĐž˛ó1ó1ómm>w\]]DžŮ9?qÁ2RÔąÚV%ú’ůâ"i,ĐÖąš_âĚú’Ăuœt.‰ś0żŽâJ.K^ÇÝąäz.Á2’âR—›^ÄbTMhŔdΓÄDşr҉XLă?:~Ž;‚šě‡đO§˙}ü#î,-޸Őë72ÁńUĚžňĘ[ż /şöĽÎřڊ; K̆Ž# %űDFĺčŇÖN“Ü^ρl9¤mAĆnže{Ć8ČŢG&bą.ÉőŘ9ĺ‡Ň†Ž+óȈÄ7KÂu™ČapMi9,ęQÍaޏĚűfę8ÓőÍÎ9Śś_‰Ig;zÝáŠÇ?†Çü;w––­8ފŮW~ňČ~řŔ Ší7ťdKhë`]”ß=-´>śetâcDą q)˛, ňóŃśk7⢇{ .ŠIÄ3ó›/b ™nâuŻ5ďѸÔc„^Ē„†+îööéQüŸů5|ŕÜ*NŐ\Ý3ŸxÝwá[ŸűJ7Ő/ô ƒÁ0…PŠíçßńăřü—áˇ~ë÷qĎ˝l™q•ÁČ,da\’Ţ´źń‡Ÿ‹7˙čó#ËąˆEz.JąŘľ˝ÜÇ6.’ĆmŤů%>‹Xlâ’Ő[̟E,şăî~ˆăŇą¸űíöż‚{ÉîáĹť_ˆ˙sě/ń—Oýľ›/ư^˝‰ ŽŻŻžíűđ˝ĎřA_Ŕ"Ŕ"–,9(œ&š˝žŮrHۂŒ9Ü<ËöŒq˝‹X’ŰӎƒŒ8LxYÄâí˜÷#󞙇:Ît}łsŽ`^E<ü8ü"<|˙‡đ؃vóˇĘ¸úć#CřŠ+‡[’ŸŻśÖ@ůÝÓ‹XL|i2*'ś]ťĽ8ÜqIMz$ޘ™Ÿ`‹‘yĆĽ#:ą„˜œç¨?09ŒďŸÂďŸ[Á]XqóˇĘ¸úŚ7|~ę-?äžÇ“'Ŕ`0 ĆŚBŒGűö]ŽßýÝ÷ŕĂů?ńűď˙˙Üü^WŒn€…,ŒK ÁuOŻ;şżü–W´—BřfÝŰŢÄÉöe>í|Ňúłˆ%z<űsiűËHQÇj[u\”čĎ"–`žŐš$Ú,ba‹>}ĄúUŘ'Çáí§ąó… ĺű~nÝv3ţűc‚G—wobziÝÔŕřzůŽ#xݡžGfÂS2łˆ%K §InŻç@śŇś c7ϲ=cdďĂ"–äö´ă #^ąx;ćýČźoćÁĄŽ3]ßěœ#”ç÷ ąSŔ•×|/Ś÷܂oŢý,\|ʧÇŐë'ËřŐkGpóT)` ?_=)ě`]ő,‹XL|i2*'ś]ťĽ8ÜqIMz$ޘ™Ÿ`‹‘yĆĽ#˛ą}ÄýꛧGqçŘŢyf ÷­Ő{z\˝îÚ#řŐ˙z^BˆÁ`0=‹ˇ˝ő‡ńźç>˙á?ţ!î˝ď‘žWŒn‚e\ŒKÁ›–Wžđ&|č^Ď"Y\˛sQúłˆĹŽíĺ>śq‘4hëXÍ/ńXÄb—ŹŢbţ,bŃw÷C,b‘Ů?‚߸ń×đ­ÓĎiŰoŒk›‰`ßzŐóđßýŰ,bɕƒÂi’Űë9-‡´-ȘĂÍłlĎŮű°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}"l5šížyç;ąçŔˇśŽ÷ŕ¸úŞ}ř›ogKZ{‰Ĺ&ļȲ4ČĎGێ݈‹R¤&=WĚĚO°ˆĹČźGăRůˆX‚Ë }đ˛)źbb¨e҃ăęw~Çóđ7ůą0 Łç!Ć*1f‰ąK WĆUŁŰ`! ă’@đKţÇžçYř͟ýî őbđfÝŰŽ˛}™O;Ÿ´ţ,b‰Ďţ\Ú>Á2RÔąÚV%úłˆ%˜gu.‰ś‹XXĢC_F¨~öÉqxűًXźOńkˇ7}^žďemżÍ˝‰ –˙Š›žozÁO‡–rm@‘4”׍,-ľĄ„ăHĂAÉ>‘„Q9™rP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żO(Úßš'źţś7âЕ/oĺ÷иúşĂCxύŁK šňóՓÂiNŸB°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙m|)Â9ŸĽđ‰;ççĂ"őĄ˘SÖoěǏnn™öиúÚűNüöoý4˙šÁ`0[bĚc—ĂX̸ÁBFß#*bůٟüöŔAo‡E,ŇsQúłˆĹŽíĺ>śq‘4hëXÍ/ńXÄb—ŹŢbţ,bŃw÷C,b1kž~ä˛Ţt1KTÄňšg˝6nФĄźndiŠ %GJö‰$ŒĘɔƒÂi’Űë9-‡´-ȘĂÍłlĎŮű°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}"šý^÷Ă8t¤wĆU!bůŧ G äçŤ'…Ҝ6…>"`‹‰O"MFĺ¤ńŃśk7⢇{ .ŠIÄ3ó,b12ďѸÔcD÷D,AüĚŽąMłDE,żđłŻƒÁ`0[b c1 ăR Y}črB,bQÄ%;Ľ?‹XěÚ^îcIcśŽŐü€E,6qÉę-ćĎ"Ýqw?ÄÁ"łćŰ(ă5—ý0žłIË E—bKr,qP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żO˜ˇ˙Ńë_łiË E—bKö#ŠMˆK‘eiŸś]ťĽ8ÜqIMz$ޘ™Ÿ`‹‘yĆĽ#6GÄâágŚÇ6m™ĄčrB,ba0 ĆV‡Ëx™!ĆĽ˛0úÁ/óëŽîĂ~ÇŤ˝ąHĎEéĎ"ťś—űŘĆEŇX ­c5żÄ`‹M\˛z‹ůłˆEwÜÝq°ˆĹŹůâ1˝ńĘ7ŕňąËŰ|Ýš‰ –sůŽ#řwĎ˙Џ (’†ňş‘ĽĽ6”pi8(Ů'’0*'S §InŻç@śŇś c7ϲ=cdďĂ"–äö´ă #^ąx;ćýČźoćÁĄŽ3]ßěœ#”ç÷ ‹öoăÚ[߀‰ŠÍWݟ,ăÝ7ŒF äąęIa‡4§IĄXÄbâ“H“Q9i|´íڍ¸(ĹáˆKjŇ#qĹĚü‹XŒĚ{4.őąš"Ďţ{ĆpíPš•ľ ăęu×Áťóm`0 Ł Ć41ś °˜…qŠ€…,ŒžDđ \ě˙ň[^ąąjđfÝŰ~ßËöe>í|Ňúłˆ%z<űsiűËHQÇj[u\”čĎ"–`žŐš$Ú,ba‹>}ĄúUŘ'ÇáíoŽˆE싱íÇ.˙ąŘ¸—˘ĺźî[_ďÄţs’E,YrP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żOX´0ĎWŻşńÇ7m\ýŐkGP,„ƒ˛.ÝÖ!ÍéQč#ą˜ř$ŇdTNmťv#.Jq¸⒚ôH\13?Á"#óK=Fô†ˆ…ÜH řřąÍW˙ýë7ž3 ƒąĹ!Ć41śuk\e0z,daô-Á2RÔąÚV%ú’ůâ"i,ĐÖąš_â°ˆĹ&.Y˝Ĺü °ăWřĺ}.Á2’âR—Ë"#żŒE,Ţ~S<¨űʛqaý<ŠĹ–N9ë_žÇםcÓř/?úÇĄŮXXĒ%…Ó$ˇ×s [i[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+9Z˙~öŸŢ„ľŐ{‡ŠřěˇMmĚĆBňXő„°ƒuˆÔQ,b1ńI¤É¨œ4>ÚvíF\”âpÄ%5鑸bf~‚E,Fć=—zŒč=KđЋš€SőFWĆŐ믝ż÷{ďƒÁ`0ýЎźĺm¸çŢrW[SS“îçמöĺoq>šÎśĐţlD6j6>ŁiÝgt?ŠÄż8yFF_BÜ´źîűžĂ"–h\˛sQúłˆĹŽíĺ>śq‘4hëXÍ/ńXÄb—ŹŢbţ,bŃw÷C,b1k>ó˜ÄX÷Šýßáî{c`đ¸_yëŤYĒ…Ó$ˇ×s [i[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+9<pŮŃ?yd˜E,iě%>F›—"ËŇ ?mťv#.Jq¸⒚ôH\13?Á"#óK=FôވE@D÷c;GÝýnŒŤ?űłoƒÁ`0ý oŹËs\e0ze0}„ŕTZŰ&GđCßq{řfÝŰŢYÉöe>í|Ňúłˆ%z<űsiűËHQÇj[u\”čĎ"–`žŐš$Ú,ba‹>}ĄúUŘ'Çáí÷–ˆĹłáîᯎ}‹ľĹv™”™?8žŽăĹ×˝4P>…mýi¨ÓRJ8Ž4”ěI•“)…Ó$ˇ×s [i[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+9ÂŘwů‹đŘBu=ßquŰ@Ż98čA°„­ƒuPÖQ ,b1ńI¤É¨œ4>ÚvíF\”âpÄ%5鑸bf~‚E,Fć=—zŒčm‹‡˜ÂűĎ-âbŁýF^ăęśqÜńôƒwĂŘ˙É­Ľýí3÷a>ćc>ćc>ćŰLžƒ{şcŢŋŮ߯2˝ž‘…ŃwđˆŻzŃ-/nąHĎEéĎ"ťś—űŘĆEŇX ­c5żÄ`‹M\˛z‹ůłˆEwÜÝq°ˆĹŹůěcŸbĚű֙;ݜ<ÔřçsŻ~? ‹X˛ä pšäözdË!m 2ćpó,Ű3ĆAö>,bInO;2â0áe‹ˇcޏĚűfę8ÓőÍÎ9By~Ÿ°h%‡ěx{Ţéîĺ9Ž~÷ţĄÖl,$U [ë ŹŁXÄbâ“H“Q9i|´íڍ¸(ĹáˆKjŇ#qĹĚü‹XŒĚ{4.őą5D,âí+§†Ýý<ÇŐWżęü"Á`0}1։1O€geaô3XČÂčPänó%w^ßŢc‹ô\”ţ,bąk{šm\$Ú:VóK|ąŘÄ%Ťˇ˜?‹XtÇÝý‹X̚/ˆĹĂí;îBĺ:E”ăŽ#Ďn—Ώ^cђe‘Äl(á8ŇpP˛O$aTNŚN“Ü^ρl9¤mAĆnže{Ć8ČއE,ÉíiÇAF&ź,bńvĚű‘yß̃CgşžŮ9G(ĎďíŻäPűěڗ˙¸úŇ=ŇúH&‚Ň„Ž¨ŁXÄbâ“H“Q9i|´íڍ¸(ĹáˆKjŇ#qĹĚü‹XŒĚ{4.őąuD,^46ŚČc\}ÉłÁ`0 ĆĽ€č˜—ŸĘ`ôXČÂč+x_Ô{vMáĆŤ÷ƒE,Ÿ‹ŇŸE,vm/÷ą‹¤ą@[Çj~‰Ŕ"›¸dőóg‹î¸ťâ`‹Yóu&bűWŒÁŽÁíňƒG;ƒÇľslWÎ\ądÉAá4ÉíőȖCÚdĚáćYśgŒƒě}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJ˝Ďřś#Îo\Ý;TÄ͓%X3Ű:¤ ]QG-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1ł…­'bĆ7 •ą§ÜZ6!—quĎ4nşń*0 ƒq)@Œybě` Ł_ÁBF_âöƒE,Ÿ‹ŇŸE,vm/÷ą‹¤ą@[Çj~‰Ŕ"›¸dőóg‹î¸ťâ`‹Yóu.bńđ´ÉkŽÝ=XĒ%…Ó$ˇ×s [i[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+9`Äąm:żqő™;*ŇXľ°u°.Ę:jE,&>‰4•“ĆGێ݈‹R¤&=WĚĚO°ˆĹČźG㒍™-lM‹‡§ /ÜţŒëÁ`0 ĆĽ„Űo籏Ńß`! Ł/ ԆŢ&pýU6n’‚wV˛ýŕ ~ä8iýYÄ=žýš´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđöˇ–ˆEě‹YYZq„ÇĆ4ˆr\1s4|Ü˙'†:-ľĄ„ăHĂAÉ>‘„Q9™rP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żOX´ż’ĆŰňWoœ*Ă śE§ UQG-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1ł…­-b¸n¨ŇĘÎc\˝á( ƒÁ¸”păő­ą/‹q•ÁčE°…ч \yŮ.o7˜ßŢŕGŽ“ÖŸE,ŃăٟKŰ'XFŠ:VŰŞă˘DąóŹÎ%Ń` ‹XôqčËŐŻÂ>9oë‰XÄ?űFöGŽdí)(ŻYZjC Ǒ†ƒ’}" Łr2ĺ pšäözdË!m 2ćpó,Ű3ĆAö>,bInO;2â0áe‹ˇcޏĚűfę8ÓőÍÎ9By~Ÿ°h%Ź8Ć&ňWŻ/٘ŰŇŰCQG-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1ł…­/b82XBnăę•Á`0 ĆĽ„ÖؗǸĘ`ô,ţĂ`l 웙 wËöƒ7ř‘ă¤ňq÷YÄ=žýš´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđöˇŚˆE`zpyaz|WŹźČŽ4-ľĄ„ăHĂAÉ>‘„Q9™rP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żOX´ż’ÖC#ůŤ† [D°ƒ­}ŔGîĘ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚúCÄ"°Ż’ßďj÷ďŰƒÁ`0.%đŘÇčw°…Ń—Ř>9ś‘Ţ8Q4E,HŒEWnçŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰßş"ń1^™D^˜žŒ]cą!‰_̆Ž# %űDFĺdĘAá4ÉíőȖCÚdĚáćYśgŒƒě}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJ¤â¨ L /l0x™G°ƒ­}ŔGîĘ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚúGÄ"°­”ŸeÇö)0 ƒq)Ç>Fżƒ—bô‚랉ÝáÁJ;4Š|˛ˆEÍ+-‹E,‰ü q‘4hëXÍ/ńXÄb—ŹŢbţ,bŃw÷C,b1kžüD,Łpťt¸ćřĆžĂ]T^7˛´Ô†Ž# %űDFĺdĘAá4ÉíőȖCÚdĚáćYśgŒƒě}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJ¤ć(”sW'dą-*MhŠ:jE,&>‰4•“ĆGێ݈‹R¤&=WĚĚO°ˆĹČźG㒍™-ô—ˆE`XÜßć5Ž‚Á`0ŒK běËj\e0z<# Ł/Q($˝Dg cQĕ۹´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđöˇžˆĽĹoř; ŠëB––ÚPÂq¤á dŸH¨œL9(œ&š˝žŮrHۂŒ9Ü<ËöŒq˝‹X’ŰӎƒŒ8LxYÄâí˜÷#󞙇:N“zĚŁ‡ňü>aŃţJtÄQČs\ŐQě`k𑻲ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1ł…ţąňV[σ ƒÁ¸„ŔcŁßÁBF‚$űÁüČqRů¸ű,b‰Ďţ\Ú>Á2RÔąÚV%úłˆ%˜gu.‰ś‹XXĢC_F¨~öÉqxűý!b Úä JHKm(Jö‰$ŒĘɔƒÂi’Űë9-‡´-ȘĂÍłlĎŮű°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}¢ý•ȜŁ+°-4MÚóc‹‰O"MFĺ¤ńŃśk7⢇{ .ŠIÄ3ó,b12ďѸdcf ý)ba0 ƒÁ`0lŔBFƒ"Ÿ,bQóJËbK"B\$Ú:VóK|ąŘÄ%Ťˇ˜?‹XtÇÝý‹X̚Ż{"– m „´Ô†ňŕ dŸH¨œL9(œ&š˝žŮrHۂŒ9Ü<ËöŒq˝‹X’ŰӎƒŒ8LxYÄâí˜÷#󞙇:Ît}łsŽPžß',Ú_ɁĚ9şŰBÓŠ=?ą˜ř$ŇdTNmťv#.Jq¸⒚ôH\13?Á"#óK6fśŔ"ƒÁ`0 C iEfŁçĄ\ó"Ÿ,bQóJËbK"B\$Ú:VóK|ąŘÄ%Ťˇ˜?‹XtÇÝý‹X̚oóE,iÖG•ůPBZjCypXĆF†ĺdĘAá4ÉíőȖCÚdĚáćYśgŒƒě}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJdβÍh\UaJ {hϏE,&>‰4•“ĆGێ݈‹R¤&=WĚĚO°ˆĹČźG㒍™-\"ŮwW^ă*ƒÁ`0— xŒdôxFF‚"Ÿ,bQóJËbK"B\$Ú:VóK|ąŘÄ%Ťˇ˜?‹XtÇÝý‹X̚oóE,y ňXÄ>ĐQrHۂŒ9Ü<ËöŒq˝‹X’ŰӎƒŒ8LxYÄâí˜÷#󞙇:Ît}łsŽPžß',Ú_ɁĚ9şŰBÓŠ=?ą˜ř$ŇdTNmťv#.Jq¸⒚ôH\13?Á"#óK6fśpiŠX ƒÁ`0 XČÂč_ođ)œ{ŕÚgKôxöçŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰď_Kp?/A‹XÂ:ŠŁSi[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+9;G.°-$MPŠókE,&>‰4•“ĆGێ݈‹R¤&=WĚĚO°ˆĹČźG㒍™-°ˆ…Á`0 ƒÁˆ‚…,ŒţDđŸÂůąžĄ}ąDg.mŸ`)ęXmŤŽ‹ýYÄĚł:—D[€E,,bŃÇĄ/#Tż űä8ź}ąt2ČcKř@GqtĘ!m 2ćpó,Ű3ĆAö>,bInO;2â0áe‹ˇcޏĚűfę8ÓőÍÎ9By~Ÿ°h%rçČś…¤ Jq~-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1łą0 ƒÁ`02°…ŃÇ` cQĕ۹´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđöYÄŇ Č E,áĹŃ)‡´-ȘĂÍłlĎŮű°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}¢ý•ȝ#Ř’&(ĹůľŔ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚXÄÂ`0 ƒÁ`¨ŔBFŸ‚E,HŒEWnçŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰż4D,Áýź-‹E,áĹŃ)‡´-ȘĂÍłlĎŮű°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}¢ý•șCư H†âüZ`‹‰O"MFĺ¤ńŃśk7⢇{ .ŠIÄ3ó,b12ďѸdcf ,bÉOž(ĄtęĎ|ĚÇ|ĚÇ|Ě׋| ĆV Yý ď“$ocŸE,ŃăٟKŰ'XFŠ:VŰŞă˘DąóŹÎ%Ń` ‹XôqčËŐŻÂ>9oŸE,Y#Z‹XÂ:ŠŁSi[1‡›gٞ1˛÷aKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+93‡Œa& ĹůľŔ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚXÄÂ`0 ƒÁ`$…,Œ-ŇÝ­’äohŸE,ŃăٟKŰ'XFŠ:VŰŞă˘DąóŹÎ%Ń` ‹XôqčËŐŻÂ>9oŸE,bŹ, ‚|”Çbś Ǒ†ƒ’}" Łr2ĺ pšäözdË!m 2ćpó,Ű3ĆAö>,bInO;2â0áe‹ˇcޏĚűfę8ÓőÍÎ9By~Ÿ°h%rć Š›—ń¸Şw„=ç׋XL|i2*'ś]ťĽ8ÜqIMz$ޘ™Ÿ`‹‘yĆ%3[`KĚ<ŁqőĐžŇŔűĺ{Zćc>ćc>ćcž^âK3Ž2˝ ˛0ú$yŕÚgKôxöçŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰżôD,dúŔ;%(šŚ„ăHĂAÉ>‘„Q9™rP8Mr{=˛ĺśs¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żOX´ż’9sÔŚëH€âüZ`‹‰O"MFĺ¤ńŃśk7⢇{ .ŠIÄ3ó,b12ďѸdcf ,ba0 ƒÁ`0LÁBF‚$|Cű,b‰Ďţ\Ú>Á2RÔąÚV%úłˆ%˜gu.‰ś‹XXĢC_F¨~öÉqxű,bÉMSÂq¤á dŸH¨œL9(œ&š˝žŮrHۂŒ9Ü<ËöŒq˝‹X’ŰӎƒŒ8LxYÄâí˜÷#󞙇:Ît}łsŽPžß',Ú_Ɂœ9HjÓu¤ @q~-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ=—Ô¤G⊙ů ą™÷h\˛1łą0 ƒÁ`06`! Ł/{ŕÚgKôxöçŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰgKŢ`Kř@GqtĘ!m 2ćpó,Ű3ĆAö>,bInO;2â0áe‹ˇcޏĚűfę8ÓőÍÎ9By~Ÿ°h%rć ŠMב&ĹůľŔ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚXÄÂ`0 ƒÁ`؂…,ŒţŠöYÄ=žýš´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđö/mK0?/°ˆ%| Ł8:吜s¸y–íă {ą$ˇ§q˜đ˛ˆĹŰ1ďGć}3uœéúfçĄ<żOX´ż’9sMŚ@ĹůľŔ"ŸDšŒĘIăŁm×nÄE)÷@\R“‰+fć'XÄbdŢŁqÉĆĚXÄÂ`0 ƒÁ`¤ Yýŕ‹XbÇł?ń‹XÔǑx.,bąˆKVo1ąčŽťű!ą˜5‹XBičÓR›%űDFĺdĘAá4ÉíőȖCÚdĚáćYśgŒƒě}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJäĚA6]@šç׋XL|i2*'ś]ťĽ8ź qQ˛‰u…>Śö$M°ˆĹČźG㒍™-°ˆ…Á`0 ƒÁH ˛0úÁ)ąÄŽg.mŸ`)ęXmŤŽ‹ýYÄĚł:—D[€E,,bŃÇĄ/#Tż űä8ź}ąä ą„tG§Ňś c7ϲ=cdďĂ"–äö´ă #^ąx;ćýČźoćÁĄŽ3]ßěœ#”ç÷ ‹öWr gŇŰČ ČiĘQœ_ ,b1ńI¤É¨œ4>ÚvíF\”âpâ22PbFşr V…˜‘łÂŮ>}ďőHŰwZF*˛ünűX#eśrۤďbƒŃ[ ŕ=Q{Ÿ(›Î›5ƒÁ`0ú,daô'‚ąˆ%v<űsiűËHQÇj[u\”čĎ"–`žŐš$Ú,ba‹>}ĄúUŘ'ÇáíłˆEśŸ'(!-ľĄčq˛ă%Ăr2ĺ pšäözdËA22ćpóöĺF2l}XĒܞvdÄaÂË"oÇź™÷Í<8ÔqŚë›s„ňü>aŃţJäĚAzYy M9ŠókE,&>‰4•“ĆGێ݈‹RÎ1.›>I‰6ęł öZŠąX8§Łď˝.ř°ˆvЎzŸÜěÓú0Œ\Đ/B•0ŚP0_ ƒŃÓ`! ŁżÁ"–ŘńěĎĽí,#EŤmŐqQ˘?‹X‚yVç’h °ˆ…E,ú8ôe„ęWaŸ‡ˇĎ"Ů~ž „´Ô†˘ÇɎ— ËɔƒÂi’Űë9-ÉlȘĂÍ#ؗɰőaKr{Úq‡ /‹Xźó~dŢ7óŕPǙŽovÎĘóű„Eű+93ém™#MÚŘXÄbâ“H“Q9i|´íڍ¸(Ĺáâ"Kű´>É$ Śmű¤×e$M°ˆĹČźG㒍™-°ˆ%3ƒ‘ .ĹŮO‚ç̢ƒÁŘş`! ŁÁ"–ŘńěĎĽí,#EŤmŐqQ˘?‹X‚yVç’h °ˆ…E,ú8ôe„ęWaŸ‡ˇĎ"–č~0/PBZjCŃădÇK†ĺdĘAá4ÉíőȖƒd6dĚáćěˍdŘú°ˆ%š=í8ȈėE,ގy?2ď›yp¨ăL×7;çĺů}¢ý•șƒô6 ŽĚ‘Śml,b1ńI¤É¨œ4>ÚvíF\”âp†q‘Ľ˝Ö¤Ëőĺíôf‹XŒĚ{4.٘Ů‹X2óa0ŠŔK÷ÄÁ˘ƒÁŘş`! Ł?Á"–ŘńěĎĽí,#EŤmŐqQ˘?‹X‚yVç’h °ˆ…E,ú8ôe„ęWaŸ‡ˇĎ"–č~0/PBZjCŃădÇK†ĺdĘAá4ÉíőȖƒd6dĚáćěˍdŘú°ˆEߞd[n°ĺC†"p=¤ç sƒkJËA6‰ćýHזůs¨ăL×7;çĺŽéÎ93ém=ml,b1ńI¤É¨œ4>ÚvíF\”âp7ÚĹ Œ ‰űľž2.Ťw[¤Ď.ČĚü‹XŒĚ{4.٘Ů‹XL|zr|e0ś8X´bŻŽXĐÂ`0[,daô7(ňŠÚg‹ĺš´}‚e¤¨cľ­:.JôgK0Ďę\mఈE‡žŒPý*ě“ăđöYÄÝćudÇ"–Œ8HfCĆnÁžÜH†­‹XâyÍHEÚqZ>Ćő,hyYÄâí˜÷#󞙇:Ît}łsŽPžß',Ú_Ɂœ9HoŁŕč hcc‹‰O"MFĺ¤ńŃśk7⢇ťq˝$ĹEňď4kĐŸ ąw]eP{+Ä|XÄbdŢŁqÉĆĚXÄbâӓă+ƒąą•ŹĘětƘŹ(,ha0Œ­˛0úůTíłˆĹň\Ú>Á2RÔąÚV%úłˆ%˜gu.‰ś‹XXĢC_F¨~öÉqxű,b‰îŤüň么%#’ِ1‡›G°/7’aëĂ"–VEۊÔ>úk„Œ8"–ţ^!ř’p=˜ÄĆ"(úfę8ÓőÍÎ9By~Ÿ°h%rć ˝a›El-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂƕöZIĂrŞŻ`šŚŻť(řIž‹XŒĚ{4.٘Ů‹XL|zbÁ2RÔąÚV%úłˆ%˜gu.‰ś‹XXĢC_F¨~öÉqxű,b‰îŤüň么%#’ِ1‡›G°/7’aës)‹X(ÖJ’űČŇá<2âĐńúqľ3 ’ďš$?p]&r\SZ‹zTs˜÷#󞙇:Ît}łsŽPžß',Ú_Ɂœ9HocÇŚ@[ ,b1ńI¤É¨œ4>ÚvíF\”âpqťżë)ŃD‘=źaPH[Ǒď͂IôĎÝPʒsťS Ÿ¸s~>,blű–ľ129žOŒ-ŠŹ…$ýş Qđźl…)<; ƒÁ`ô.XČÂč_PÂ>‹X,ĎĽí,#EŤmŐqQ˘?‹X‚yVç’h °ˆ…E,ú8ôe„ęWaŸ‡ˇĎ"–螪Ýň么%#’ِ1‡›G°/7’aës)ŠXŒ^âSÂqeq˜đ†Ç„¨ Šď™$ŽHtfה–âŐćýČźoćÁĄŽ3]ßěœ#”ç÷ ‹öWr gŇŰĆą)PÄÖ‹XL|i2*'ś]ťĽ8ÜA\ĆŽž=%š„2Č"8j9hQˆö1Yśó Š[ƍDxŹ-¨ł‡…Ľđ‰;ççĂ"ŘÁśoY#“óč‰ń”Á؂Čz)ŸźaZNŇŇBYˆIҊZúUäĂ`0[,daô'(aŸE,–çŇö –‘˘ŽŐśę¸(џE,Á<ŤsI´XÄÂ"}ú2BőŤ°OŽĂŰgKtߤÝňF´,ądÄA22ćpóöĺF2l}.‹jÖ š=Ëuâ…‚yšÁ´ćzˆžjśą@Ń7óŕPǙŽovÎĘóű„Eű+93ém ăŘ(bkE,&>‰4•“ĆGێ݈‹RN—•!Q̏óŞŻčß5hĄřďË|÷‚„[r$çv§>qçü|XÄ;¤šü{uŒ`01dą\N˛ĎźaZŽŠ@Ĺvś^jˆÁ`0z ,daô7H˛Ď"ËsiűËĐÚ,ba‹ú8ôqÉę-ćĎ"Ýqw?ÄÁ"łćc‹-˘eąˆ%#’ِ1‡›G°/7’aëÓŻ"˙Ą…O(Mšă¤ë#$çĐůl(ę<’ÔQhLDüşŒ§’űŚqFŘ_›ŢŽy?2ď›yp¨ăL×7;çĺůýʢý•ș#Ą˙Ćą)PÄÖ‹XL|i2*'ś]ťĽ8œ2.7j&Ű4S\„”‘řŞJň˝WЈS<-jkX.$R‚Î6°đĄ>qçü|XÄ;hÇ˝OnöŸžOŒ-†NÄ"i'[uŰóľ´đĚ, ƒŃ;`! ŁA’}ąXžKŰ'X†Ö` ‹XÔÇĄKVo1ąčŽťű!ą˜5_Ÿ‰X‚9!Z‹X2⠙ s¸yűr#ś>ý&biFœ­Ę ŚŁŐ˘R„óMçm^˝QCłŃpsŠĹŠĽ Š…˘Â§ĹŁ śWäÉűw0ˇ€xÍj8 Ž)-Ř$r˜÷#󞙇楔ĺvČĘóű„Eű+93ém ăPĺĺ El-°ˆĹÄ'‘&ŁrŇřhŰľqQŠĂ)ă2u LBŚ ’÷gÝřÍ÷gLż˛n×wŇ{,ŔċI:‹™_V&?čö—'‚,ڄRřĝóóa ě #ô>šŮK|ş>v2}€4â‰nůčů I~ś“˘˜.'d:ă ĎĚÂ`0˝˛0ú$Ůg‹ĺš´}‚ehmఈE}ú¸dőóg‹î¸ťâ`‹YóőŸˆ%h“˘ü,bɈƒd6dĚáćěˍdŘúô‹ˆ… Ż ăömZś]`ŻŮl Z_ 6šuwŤ”‡\Q‹ oT€ŇzôÂ9GôřĆOć (X÷Mă:Œ°ż6˝óś0ď›yp¨ăL×7;çĺů}‚2ŕ@Τˇ1ŒC•—+ąľŔ"ŸDšŒĘIăŁm×nÄE)§ˆËô…–ô~9T´Ý÷bĂ!l‚ÉŠ(*đT”#Z@ź¨*ś?KNFŠPˆŮ1’<čÓžÇh§•ďÁ"ăœŃë2‹6Ą>qçü|XÄ;hÇ˝OnöŸŽ1ŠÇ—•p%ëú;v2˙öĐ Q’D*‚/K! ÷ćŰL>c+ƒ…,Œţ†˙`„E,vçŇö –ĄľXÄÂ"őqčă’Ő[̟E,şăî~ˆƒE,fÍÇ"[DůYĒÉlȘĂÍ#ؗɰőé‹ô%™aą<ď…Š}ô„Zł†ĹĽ ›lâČ5Llo=ꘟmŕŃűk˜Ÿ[ÄŘŘ”‹-ŻňzŠ:’D- ׼@3ômTHě›V}ĢŐćýČźoćÁĄŽ3]ßěœ#”ç÷ ʀ9sŢĆ0U^ŽPÄÖ‹XL|i2*'ś]ťĽ8œ"Ž,D,şďšŕ÷ŞŽÔŠő­Pű;O|VËe4œ1ł^rśĘ€łUPŹUQŽ7PnÔPqĆÝJuÝm‰bAźÔrĆâvb\+[–r!<ĆdąyK <{š“{Ź 8ą@–ö•™E›P Ÿ¸s~>,b´c„Ţ'7{‰O.cƒŃÇČk ^§ÝrB&K ńŹ, ƒąů`! Łá?Ĺ`‹Ýš´}‚ehmąl  5 Éq”"”qix•qĹ}ô"ŠqŻąP’ŸżÇ"“˜´Çc—t˙‰X˘`KF$ł!c7`_n$ĂÖgŤ‹X”/É ăpóHÂAj}ßv^œŐ׹´|Ó{›¸á™CĄ—]Ó{JŘšť„ťż°†ł'.`tt*ĺÁŻ;b&\ąFŽł@&"–(oÓ˙ś,]S˛<’°ż6˝ó~dŢ7óŕPǙŽovÎĘóűeŔœ9Hoc‡*/W(bkE,&>‰4•“ĆGێ݈‹RN—É;3ĺłÄżg<ŠřךänŢl(Őa­PÂ܎ÝXÜ>ƒő‰í¨NîDsŰĐđ(ŠĹ˘ű*ú"Š<LuĽ‹Pžż€AgťxgO`´śŠJłˆRąŐZb––Š+l)řqbçRpŁ*(ú­ˆżP€ś~CźŃ† >qçü|XÄ;hÇ˝OnöŸ\ĆKÚ×@xż|OëĎ|̗љXt|2aŠČ[^^uî ‡Ý1ΔO˜5MÔj5÷S,kŤĂńS-žý{™d‚|6P J˘|ž™X–ˇä â•JĹý4EVˆY¸0ßfň1ý˛0úţ۱؝KŰ'X†Ö`KoŠXZ댓EYňŠXŕ\Vv3ąěü„‡‹XL//ąŔ(&íqŠćoވ%ҍs‹X2⠙ s¸yűr#ś>[YÄŇÔ]Ť&qŠmHáƒŕb<2ń"­‰•ľ%”+„ëŸ1$]‚@ä]˙ŒAüË߯cU؎VœĚ𯾛˛JR–I{çFż.ľŽŤŢ Šďśä8 l9Ěű‘yß̃CgşžŮ9G(ĎďćíŻć@Τˇ1ŒĂÔ&S(bkE,&>‰4•“ĆGێ݈‹RNW'"R;뎳Ź4۟ëÎçěä.Ěí˝Ť{/C}÷~”œU%w*]‹ˇy/ źOňÇ<टóoŰvçó TýsN;[áÜi ŸxŁ'ǎSOb¸ĐŔ ó"Ěas-bóžďŰěąs’ ZÄű¤÷a­q4’aJáwÎχE,°ƒvŒĐűäf/ńÉeŒ`0ú6‚•íĘƚ+DńÄ,zŽýőő*ŞľšqyÁ1s3!+_>ÓJëł)ţŤ7QŤ×1PŠ`pp@éĂ`0ŒŢ Yý ąXžKŰ'X†Ö`KďˆXˆ¨ƒśßz"]˝Q`'öŤđ<Î%XnĘëX^,‹XŒüXĢäÎ ,bɈƒd6dĚáćěˍdŘú\’"ŮĚ+1›`9ĐڇóZ{ëľ5w,ßs¨€b`)䋳Ťîçśí­“ĽR{qüçEžă300˛ÁDfĺ46dü베Ľ¨úŚ÷‹týůGŇd`“ČaޏĚűfę8ÓőÍÎ9By~Ÿ0¸ţ93ém ăPÚČ 3‚;;ƒ˛ą˜ř$ŇdTNmťv#.Jq8E\Y‹X(`â XÄ ,΋şŐ:anp_…ĹŤníŘĺţĘz \ƈł KŮůÂąąˆO¨EˆX|1K{k4¨;/˝ŁŁ¨ď?„ŮúłpniC?€ń‡ďÁÎs'0ěŒÇB,SnĎŇ—˛„ĎŻ xÖRHĐH>&§öÎůů°ˆvPŒ_&>šŮK|r# †R8"ĆŞă'ΠRŔĎ˙ÂđÎ_˙7¸0;‡}{gܙG6ü㾋‹Ë˜[XÄłřÚŮ]8ž4†ĺZqÇ7-˛ćť{cW܅Ž–kŘ?ąˆŰfÎá˛m‹˜œÇřř¨tš ¤%„x‰!ƒÁŘ<°…ŃŸ`‹ĺš´}‚ehmąlžˆ…š$ńż´E,ńëxăŃhAÚ,bŃÇĄ/Ă?w}rŢ>‹X˘ű‰íŚŠ˙źŔ"–Œ8HfCĆnÁžÜH†­Ď%%b!2o_’÷[YzÇlůzmÔ¨cf˙ƃÇĎ|âqÜýľăÎřÜpë<çů—šůť÷•đäƒuw)˘Ę0|:BA_nä3$jŃ]—Á™hT˘É5ZnHćƒx;hm9Ěű‘yß̃CgşžŮ9G(Ďď”rć ˝aJ™aƐÁ"ŸDšŒĘIăŁm×nÄE)§ˆ+I˜@ŠÎ§űR|Š[Ý5çEÝZىĽjçgaöşŰQ;p90TЏ"ą ńЎy3˛D…,Á­…ś ˆĹۄ˜ĹŰjĂèMmÅënĂůóg0q×çąý‘ű0^$Œ”KtĘńgh\Đş ԏVĚB0yľč×[xÇ]đa ě żL|rł—řä2F0}“™Mt6gÎ\pgUůßý{|ń wăÝżů!źńM/ĂšsłŘ˝{§ŇďâĹœ›Ç§ŽďÇ×ĎÍ Ÿ!žˇ-ŐđŔě<čl7OŸÁsGÝߡMM¤ł0 csŔBF#xăGńü<ą„ĘĐÚ,bŮ\KxötĐöý-b‰öI˙×pţyłˆE‡ž Žą q??K¤K繤ä~ç’1‡›G°/7’aësɈX(Ú"ŸĘďôXšä--ţĽö‹łňar{ëölîâ*îůú)Œťßw÷Üu×ß2ƒŠmØÜVBe¨†fľá.ICĺ„ĘU[˘ß5ţ/ĂcŃĹ}üs)„ÇQÝůŤfg!‰ąýľŽ+5G‡ýƜCgşžŮ9G(Ďď”rć ˝aJ™aWŔ"ŸDšŒĘIă#§a‹ęű%pČ[Ĺ ,‹ľşł.ěťł7ÜÚsŔ° ;›řŹ(„,bóD)A‘ЎDPÜâÍâ288čîť3˛8cs­Vk YœOoŤ ay×,<ăš˙úçąíÁť1NuŒ”0,Ä3íŰżB佹PVOŇ÷fď°¤×j˛ńÔ]đa ě żL|rł—řä2F0}ŽNE,ó ‹XY]Ç×ď:üűOšy˙ôŃĎᦛŻŔłžu ć旜œÉ˜ßÜü˘ť] "–(Dm~Í9g1Öž°|ʝľfb|L)fQň°Đ…Á`06,daô/‚7~ĎßČcK¨ ­-Ŕ"–Íąř3°$‹QYíźvÉ ŽB]ÇÍŚĘ?Ţż Đń+ü4çâ>8Ľ‚ž×°Ž;šŽĺ؈ĹȏE,FĺäjÇBŇ#Ę4ÉcŁ\9(œ&š˝žŮrĚ†Œ9Ü<‚}š‘ [ŸKBĢAóBŸńjŮH“ŚÜ`Ë;˙ÔëU7˝cwřEÖöŠ˝˜šÜĺî_œ?ăç ›é™Î<ç…ZŐy‰7$)Ă$[ěa]8F/şĐl-QސcÁ¨íš ůĚ,şz4Młˆ%5G(Ďď”rć ˝aJŇűäą˜ř$ŇdTN9 ‹XLž_jŽÓR­yg››Ř…3Ď|>š{/sĹ%bńé.'łxłŠĄIp™ čĚ+ADgjńfo Îć22ŇZÂ/$dŠVÝm݉eĺy/ĂÂMw`Űç?ŽmeçĺXĽŒŕě,Ąď“V"*h‰‰Y$ýQőęŒ>Fč‚‹X`Ĺřeⓛ˝Ä'—1‚Á`(…"żVŤcnn g—ńžßţߥăđű…ŁG÷˘ěŒAľćˆ;>z\Őj Ť+k8ą8Œť.1K_=;ƒŤˇÍ9KŹaČýť˘ƒÁ`ô>XČÂčOoü(žż‘Ç"–PZ[€E,[SÄB޸’ŽcE\¤Ąhâ’Ő[Ě_—ŚŢ|5ŒŸýgŹĚŸÇÔ@㕒+b‰ŽŁ^](Ĺ,Šú•óDw,ĐąŔŠńËÄ'7{‰O.cƒq €(]Çđü.^œG­Zǚٞď^ĺÎÎ٨;÷’ő*šÎöԓç°szć0=˝ąÄĐňĘŞűů•łÓŇŽš´FX­‰#ýŇq Ž06˙N˙Úš8˛ë VV×\!‹íC<+ ƒÁ`t,daô-b•)ňÉ"–pZ[€E,›#bi—J:—@>%ŕt'Ä>}\˛z‹ů`ǏŔšnœ€ęĺ˜ę\âË A.žR_ÇňS,hťű!Ž‚„ ,b1‰I{œ˘ů˝*b) /AEÖ>sP8Mr{=˛ĺ ™ s¸yűr#ś>}/b!’¤ľí)›í$–&ůľIÇkşÓm›Řš{ ä{Ý­ƒ8teÉÝŸßśMďvŇĽuÔßV …P™ˆÄ"]Ö'rqzĂW8ţřg!p"„$y¨'żŽÂă¤ýľšQŚľO0Ýaż2çPǙŽovÎĘ \s gŇŰĆĄ´!˝O~PŒÝśA¤ :á6ńÉÜ^á“H“Q9i|ä4ÝAë2:ą§>ćDĂ’ŽĽ]JČٙŤŐ1ť^ÇÜŢËqúY/ĹŔÔ6Œ š"‘Ąö§ˇ‰—Gž€Ĺ[ţÇűôfe ŠXÄgIĚ´R,šK K%+zś-żŕl,A‹÷)–+ ~ăY__÷gˆY;r Nď˝ KŸ˙$ÖżńEŹŐ›Ř1čř ‘‘ÚŤ‰˜Ľ čޏy˘ß{Vč‚‹X`Ĺřeⓛ˝Ä'—1‚Á`¸ÎęŮÎ[ZZqśUlŸž ݏţ*źâ•ÎÚ¨Ąşś€ęęjk‹îţŇĘÖÖÖ°˛˛âxľ~đP]Żş<ÇÇbüž\ŔJsýˆ‘âŽŘ;Ę{jaÔýŽZ_Żúy,Na0ŒŢ Y}‰ŘCĺčSxą„ËĐÚ,b‰źl1˝^¤\0>[‹q\I×qB\áăĐÇ%‹/ć_°äWŰ6B|Śőš(ggaKčúPs°ˆ‰ű[_Ä"éŇ?žčÓ1…Ó$ˇ×s [’ِ1‡›G°/7’a볕E,F A[Sßvj!@ ĺýő†óPŃyÉ6ľ“œaED°x(— Řśƒ0Žé.MT. „Ţ|Ec‹ {(ňâĚű7Řě™üşŢČoĐĚÎßNncŢ7Íű‘yß̃CgşžŮ9G(ĎďW”rć ˝aJŇűäą˜ř$ŇdTN9MŠXtniD,gÖjXlNßđl,Ţü, ť›°x›ŒQ‰XÖGˆVħ'`ńD,bcűŘčĆÇ'Ü%Ä6<2ꌙ%¨ „.+ŤŤX]^r?°¸¸ŕ T‚łąĹ,B¸">˝bź%ŽDžŘÖî|1N¸ ő˙÷wX_YĆŽá ř˝ó.„ę" fń˙FыY‚u¸™×˝ÖźGăR_Ă,b1ńÉeŒ`0.$ÍƢąˆ%….ĚÎc`h Ó3WjyœŻłrĄćÎŢR­nsƧ˛3ÖľxVęáĽtÎ;œÖ1<֟B– ók˜vnŰł,×[?i6ěۃÁ`0›˛0úÚˇ,b •ĄľXÄŇű"–äóFč:&ًe\¤9E\q˝ˆ…,řĄ\(z.ŢL-Ž Ĺ Oúmßéu,/–E,F~,b1lÄǃti’ÇAšrP8Mr{=˛ĺ ™ s¸yűr#ś>[]Ģ|!$Ç˝OąĚ;Ӊť–mř„Ó/SťŰť&ÄîÚú2jőuLď„-ví)áěÉUço†Śó2mTR.Ü7aą:’\Sń_‰Gŕ.ť ~É.~Y^öTöŠŮY˘Ćö×ćżľO0Ýaż2çPǙŽovÎĘóűeŔœ9Hoc‡ŇĆâşě l MdÂ5l⓹˝Â'‘&ŁrŇřČiXÄҲ'‹jł‰SŤ5,ăŠçźŘwŁm‹'dŸB "„+BX˛xqݎcÇNw›˜˜pĹ&6™ąŃQwŰ8Âââ˘óŇđ<Ο=‡ŐŐU_Ä"6Qś÷)â‚™¨˜eőĘkprű.ěřçżFíô1L `ź\ôë &f‰ LI-fizţ›xÝkÍ{4.ő5Ě"Ÿ\ĆƒáB'šÇ.\˜sÜ\vƒ{O–„ŁK8šPpýffvlp!ě;ż¸Œ~=8ż°˛DëŔĎçYY ŁgÁBF#úf‚E,á2´ś‹Xz[ĢżťÍv†ęADšśˇ¨ăŹgb‰Ć] ýšxçß´čËro\ܸXÄŹS5‹X¸Ď"#ŸŽ9(œ&š˝žŮrHżsɘĂÍ#ؗɰőšTgbĄ6c­śîŒĂ€\€˘ę—n:*ăh4ZSOďI~ ĹŽ}ÎËşŻÂŐeŁ!Ţx^šň™XÂVQÔ^śĄŕźŔŤ úËBŮ[¸P„=ÍűŚy?2ď›yp¨ăL×7;çĺůýŠ2ŕ@Τˇ1ŒCiC Çť ŰBÓ™p ›řdnŻđI¤É¨œ4>ršKOÄ"ˇWˇŹ9cÉɕ*–ơăŠç7Ę;vľfO YÄ&Ćą<‚XF(*b™˜˜t^ÎÍ`űöŽ%KˆűF!ŠŰáË.ÇüüNŸ>óçĎůĺ{Bo3łŒ…foYqâşđĘBăŸ˙ÍÇ@s°„ÉJŮŻB¤žbË i†Q÷,хk’E,°ƒbü2ńÉÍ^â“ËÁ`0´đîă—ą˛şŽÝ{ŽÁŕи‘oĽŘtƛ9ŹŽmsýUß͗¬#z‘Pň h*N˝0 F÷ŔBFBúvE,Ą2´ś‹XśśˆĹ˙CäRcţ qéĘ Ć=žýrB…˜m3pźă ź kOĽ´HĘr*fxËO‘E,F~,b1lCą„Ň$ˇ×s [éw.s¸yűr#ś>ý b!Y='ÄAmżĺ•94h7ršţą$šŢ>˜ľÚ"–ćwîʼno{5†Śśů"ďS,Ůă‰WźOO@26>Ca|Üěe^˜œœrˇĂ‡/ÇńOáÔŠSĄ%Ä&D7Ţě,BÄ"Ä5Ţ6÷âWŁţ™÷~Ĺ]NiŰ@@ĚúŠ‹Y‚}ďżFëÂ5É"ŘA1~™řäf/ńé™1‚ÁŘÂHšqE•ˇž^ĹĘƚsßľS;ŔŁĽEÔWJXqĆT1Ť™[UřŢŰFńďžmÕţgŹT żóńy|đÓsV~Q V Ł7ŔBFĂ˙[E,Ą2´ś‹XzWÄB mď‰5BeřĹÍöŹ#­yG ’¸H7¤q彜Řoş.Ívě^ä‘k;°_P\ǢŽ”łłřBĄe†:šŽĺ§Č"#?ąśĄţźłéŇ$/›rĺ pšäözdËA22ćpóöĺF2l}ú~&÷Ÿx;ˆOą4Ďâň ~đľ7cמ10‚ž‡&ÝíéˇďĹţë]XZ:ŃŃţôÖŞv(DĆŰłó‘ŚYǚ#”ç÷ ʀ9sŢĆ0Ľ %ď6l MdÂ5l⓹˝Â'‘&ŁrŇřČiúWĢs•ÝóIEĽVęMœ\­áâžËpúšŻÄĐř„3ŽŒşâOÄ"f3 ÎÂâ}Ž ŕi×\‹Ń‘Qt‚šĂW@ˆYW.?|ě?ˆG}çϟ• Z„'f)¸Kó°|硣9ŕźDüÚżş\ޘ…ădQ1‹§~ďYĄ >,b ú–Ę'7{‰Oό Ć%ŠĽĺg<)bbě.̝ú(P=ă毯:ť+­gąM4@őş;{fqů +§PvĆ"jNah`J;߆ŐŐ5­ĺ'ďœč‹ŔČ@ŻwÎ郟>!=¨¤•…Á`0Ý Yý ˙ćˆE,Ą2´ś‹X6GÄbr.: Ĺâj8/ćÜŠŽĹRíăŃë¸čüľî™Ű+|i2*'œ†E,Şďk ŠŐ:vXźO׎-bń6ąźĎŽ™dšů‹˜žîŒKĚźrőŐWc~~7~äa7fOÄ"6q)Ä,âźbMqǧ€*JTŠeiY˛¸ ’ăŇšž($ÔĄäüľFÝÝÄ/ä…‰ľƒĘ”v:ń‹_Ž9ń7›°Ć…U4ÖjhPŁ5C‹SˇƒĺT •żWrŹĎQđ×nň븐ň:–Ÿ"‹XŒüXÄb؆,b ĽInŻç@ś$ł!c7`_n$ĂÖ璘‰ErÜűŹŐœ—OÎ8yÓí{XÄb!fyú3wă+_¸ŕÖaš2ě‹öm÷CňS7óžiޏĚűfę8ÓőÍÎ9By~Ÿ  83ém ăPÚPÂqƒźĚ†<# Űr2:—DšMŞ3EúYÄbkŻú~Š;ßăb&–Ľ‰mxęšß‰…ˆE,} 6OÄ"fa9zŐŐŽ($+ĚÍÍczçŽL~~-–şő–Űđďăĉă­{×Ŕć‰Y‚Xz΋P\[Eáá{[Ü"FËłšmA7îSýż[š)BîBŰłˆvPŒ_&>šŮK|zfŒ`0.udĐoˆ¸óÉŹ—Đj¸\_ ƒŃs`! ŁÁ"–PZ[€E,[_Ä"f-YŤUąZwÖë84…ąëöbäňi NK×ő\ż¸ŒĺÇÎcéŢSX{č˙rĹ_VG—ěxŇŇG&׹áŹ7ëźbăˇěĂČŃi ͌ÉăżŕÄ˙Đy,~ý Öî?ľ*†Ęƒ* :KĄ¸ ’˛Ü‡„bI„X~ŕ¸ôšeKň>‹X˘ű‰íFŚÝĹüźóE”d“”ść pšäözdËA22ćpóöĺF2l}úIÄBA›(‘ÔG Z[w?Ż˝yv¸ů֖Ľ˛řˆ\^ů!}šE,Š9By~Ÿ  83ém ăPÚPÂqƒźMEš€ŽaŸĚí>‰4•“ĆGNÓß"{ô~YőýŇh‹XV†Çđ䡽CSŰÝ%„‚"q_ë XźĎÝť÷ŕŕÁCŇ{ŔN°˛˛Œu‡_ˇÄ‚ D|‡_މÉI<ôŕƒîě,A1‹(ÇłxyóĎĘ+K(ž|{‹e 㿄§ŕČiĐöYŚ-,}XÄ;(Ć/ŸÜě%>=3F0}•0"i6Fo ¸ ‘I>ƒÁ`0˛ Y} ą„ĘĐÚ,bŮ<KŇš˜ŠXÄ &sŤKXiŹcüćC8řÜŤ1°#yýđÁmŁźuŰo=„úŇ:ÎýËØý×G0Ô,c¸2čÎr"‹Kw§"–UçeâŞ˙ćpًŻÂŕ´AüÎ9ŢáÄďřԝř?ö.üżÇ1´žŠÉÁ1WÔí…ČšD—˘ŘyfnI¸Žĺ§Č"#?ąś!‹XBi’Űë9-ÉlȘĂÍ#ؗɰőšTgb î‹O1‹h€ť’ÇFťvšuHí: ýT<~yůűäm#ţ|żąˆ%5G(Ďď”rć ˝aJJ8nˇŠHPÂ5l⓹˝Â'‘&ŁrŇřČiú[Ģ5#˝}0űěZkÎßůÇîx *ŰwşÂąybo&ą‰%zŽźň(śo߁Ź!f*"™ľőľĚ„,v8ńŢtÓM¸çŢořb˘,O°ă-?tî…߉ÁżüÎŹ,bßpĽöř¸1+Këßŕý¸drłcßn\“,b㗉OnöŸž# FşďYß%ÖYcÂ`0ý˛0úŞˇŇă,bŃ7Œ‹ýYÄĚóÎĹ}ŔĽ8é=ÍřřĺÚ*Î/- ź{‡żűYÚ;…4( bĎËŽĂŽ—\…ůçA⚕§÷S• MNĄ\Š ĘăNüŻž;ž{OýĎťpúţłŘ>0‰‰ÁąXźˆý~ŇŤtrË/3ąůąˆĹ° 7WÄÉË#›´5…Ó$ˇ×s [’ِ1‡›G°/7’aësI‰Xˆ|šîÇŕßŮbČŤ3oĆďWińËË>Í"–ÔĄ<żOPșƒô6†q(m,ŽKUŢŚ"M@ ×°‰Oćö ŸDšŒĘIă#§é‹M›âťpžÖŔr˝‰7> Íý‡16<ě X‚"o&–z˝ŤŽş“““ČâţVŒUkŤk˜œČžŒááÜtăÍřĆ7žáž16 1‹8wOČŇÜśg^đJTţöĎq~˝Ž]Co!Ţ ČŽGJx9ׅk’E,°ƒbü2ńÉÍ^âÓ3cƒq‰"ĎŮX¸+ĘÁłŞ0 ĆÖ?ąeô7(ňŰg‹ö¸a\”čĎ"–`žw.YˆXćזp~y۞~ű^y ĺ:EŠTĆśíŰąäđ.-.˘ĹÄÄD&7;FpĹŰžgţáAœúđý¨5Ř1Ü~PéˇA…H7˜y%`ëîşB—˘˛˝ĺ—‹XŒüXÄb؆śç#H^٤­9(œ&š˝žŮrĚ†Œ9Ü<‚}š‘ [ŸKy&/mÂË0ľk´Ńl őXDŃ]"A1óJŕaĄşoš÷#󞙇:Ît}łsŽPžß'(äĚAzĂ8”6”p<‰cłż$ҔŸp ›řdnŻđI¤É¨œ4>ršţąhM#ŠęŢkνëězwÄÂuˇű"o+—ËîĚ%ŢL,BÜqÝu×ad$żŇVW[?ÔX[[E^ÄM7ߌťďşË=/1ćy›'fłÎˆméŔaœ˝őY(}ĺ3XŞ70îÜË{ľY|‡ 2˛ńƒ X^/,b㗉OnöŸž#2Ŕ“':{&ÖŠ?ó1_6K EůΝkĽwďDj?]Ŕ… çŮhŒNœiŐkľYR<‡nÝłzíĄzVmű ›űóm&ƒą•Á#ŁA‘ĎŘ>‹X´Ç ă˘DąóŹÎ%ÁVˆX.,/b×óŽĆţWߚ‰ˆ%ˆąŃqLNŚ›ÝĹžœÉlUđŐĚËŽÂÁ×ފšÚÎŻ^ŒŐq°Żwr˛‹E,F~,b1lĂtm‘ "1˛ÍÓÖN“Ü^ρl9HfCĆnÁžÜH†­OżŠXꇀV圼íÉ0Gľśęlk¨××QŻUQsöŤŐUÔęU§z›žŮ5B`KzŽPžßŻ(ä̑Đ ăPÚPÂń$ŽÍţ~HS~Â5l⓹˝Â'‘&ŁrŇřČi.  YÚG5œók5Ź âÄߎĄáa ů"ą/fańśÖrBWĺ*bđ,B@“'ĘĽ2n¸á÷ӛqĆŰ<1‹ˇ­Üú,,ĚěĂĹő&֛ň/źŘwšÉ—— ,}XÄ;(Ć/ŸÜě%>=3F0—lf_ĄM˙c´˙ŔuĘ`0[ <# Ł?A‘ĎŘ>‹X´Ç ă˘Dąó‚ç"›]E&°đ>ý?˛ŰËÎK˘Ů•%lťărĚźř:ä1=˛Řś*śËA4Wę8ńgß@šPĆÔŕ„ö:ö– ßh—ö1YÓ!Ř\,b1ňc‹avvŢYƒ ň´i˛ĺ pšäözdËA22ćpóöĺF2l}.əX"ݔڀѨš†ý;–0=ľ€JЉů•!œş8…ZcÍfĺň Ĺđ-g32…óF[Š˝řwžqşĂ~eÎĄîďéúfçĄ<żOPșƒô6†q(m(áx鏝€4Ĺ&\Ă&>™Ű+|i2*'œćŇąh͛Q÷ř÷Ąř\¨5°î؞¸ö”'&}‹řŒŠXjľŽ\qeh9Ąľűž‰ÁËŁ0<„,ąžćÍȒݐE RŔu×߀ťďţş{žŢŹ,bÖ2QőzÝÝÄůŸö‹1úá?ÁĹj3ƒ­ev7FDtŁí7ą?&ŮkűŤÂÇ)ű°•Ű&|÷Ě‘!ík ź_ž§őg>ć“Át6–'ŽC|ŢábŁcŃĹžÝMç>°kÚ˜ŸĂÁž™†;&ďŢÝݗzťŃöítFî̡™| F?€…,ŒţŠöYĢ=n%úłˆ%˜gu.ۨˆĽÚ¨š"–Ąý۰÷ĺ7ÁgϞw˘}ĂyŠÔ") ¸éŚ1=˝ýŽ/¸+_ÄÂçOa°8€árű(ľ^jb×vű[Âu,o.ąůąˆĹ° {KÄ"٤ ŇřÔ>N“Ü^ρl9HfCĆnÁžÜH†­ĎĽžœÔ&°źŸjY†ÍŐYTOü ~áŐ_u,~~mŐľóčÍX\Ýďź°›tţîh=ŒQ÷Mó~dŢ7óŕPǙŽovÎĘS\ӽѿ!ĘöűÚ¨G2Ó}G菝€4Ĺ&\Ă&>™Ű+|i2*'œćŇąĽ}Ô¤ćÜo.՛XœÜ‰ĹŤnÄx[źâmbü YöěÝë.kDiß^<úšŸŔĺďx ŠĎ¸ Yaľ-`ń–2j-…—„`ĺꍎÁ}÷ßă–U*•üÍł!Km÷^Ě>ífTî˙VMŒ”âqE—r—*@Úď_ŤY^/,b㗉OnöŸž# †Y΢ŁĘr‚lŠühałe˝rN ƒqŠ‚…,ŒţŠöYĢ=n%úłˆ%˜gs.QۨˆĽIMĚŻ.Ł^ \ö}Ď@Ądöđí}ż÷~œ;w!”÷ŮĎ|żú—öýČMxŕžó˜[\FĽXAšPňëÚŘgp{ĺ—‹XŒüXÄb؆,b ĽInŻç@ś$ł!c7`_n$ĂևE,Éí)óa¨Q;ýEŹ?ţ F•ŔކBÄŇŹ.ĄX_ÂŃŠ“¸üş/âSOž÷Ě>ƒƒŁ(WÂżŹßhKó~dŢ7óŕPǙŽovÎĘóűeŔœ9Ho“c˙6âˆŇőďˆ4&\Ă&>™Ű+|i2*'œćŇąčěăÄż˝Ô\ľj8vŰó084ä.Ľămîl(Bź!D,b)Ą}{÷NJŤLMběĹ/Ä=Ż;žöŠ`ŕmoŚ&Ń)źĽ…D´ëëk]™ytjŰöíۏ“'O¸bOĐâ {\!‹łÍß~'&}óľ5  (ZŰk_›uĄíYÄ;(Ć/ŸÜě%>=3F0ŒrYőŚKýS<Ă~ϻއąąQüä_‹­Š0 F,ŒţFđ5ąčĆE‰ţ,b ćÉÎ%ř+pˆ%ÎEXŠŽc­QĂÎg_‰Ác0(/*bł´ôî=YÇ˙úâşóYsÓ×ďŤŕGoÄ5{:ŽJƒ%ěůާáôťKŐL Œ!ž„ĐĆ~ěĄ!)M۟,b1ňc‹afwŢylŇ$IíCá4ÉíőȖƒd6dĚáćěˍdŘú°ˆ%Ţ?ÝĎŔň~MtŁÇôŞÇ>ug‹Âą7Ԗ0\œkŹGąŃ–ćýČźoćÁĄŽ3]ßěœ#”ç÷ ʀ9sŢ&E˙Ľ)áxG$ŽC¤)0á6ńÉÜ^á“H“Q9i|ä4,b1ą÷LVMŹ;cěů=‡ŃœŮďŠW‚łąx˘ !bu{ĺ•G•/v˙Ű×ŕ؇˙ßüťăčWžŽŸ|-JŻřöÔ?o´—ňń°śşÖľ%tş óssX[_ ÍĘ"ęǟflnşĂ_ü$–jL”b<ĄYYÚㆬ:Ü|Y –mĎ"ŘA1~™řäf/ńé™1‚Á`tÔĽţé‰Xţď_˙˝ŸˇUÄ, ƒÁčmä;&ƒą™ţĄĆ"ýqø(џE,Á<Ťs‘؆/­¸—Ťë b;î< S˜ŽÉşŮřÔC5źĺCKřâ5ç<án_xź†7˙Ĺ2>ýp bűPÜ9€Őzf34ŰMřť€—JŢgKt?ąÝ(šœŹĎ;âehÓ$IíCá4ÉíőȖƒd6dĚáćěˍdŘú\*"Šľˆw€ŰSVC ‹Ř>úŕľřř㡣20Œ—…miޏĚűfę8ÓőÍÎ9By~Ÿ  83ém ăPÚPÂń$ŽH ]˙ŽHS`Â5l⓹˝Â'‘&ŁrŇřČi.= )2tłąeŠKľ&Ş ÂŠ§Ýš…E|Š™HEgŹYžîVŹ9cć˛S‡MĹ÷Ą:3–>,btí•ŕ“›˝Ä§—ÇăREŻ=›ŐAŤXĆţˇ~ý˝!ËÜĹů-un ƒÁč]°…ŃŸţÄ"ýqø(џE,Á<Őš˙+pťśqŻ×ŤîMŔŘľ{P@?aqÍšéůç4šńcu§Î~Ó9ś´Ţá óqę΃nŽÔ[ëŁÇŻŔ 9Q!‘˙I}ąůąˆĹ° {[Ä"éŇ$IíCá4ÉíőȖƒd6dĚáćěˍdŘúđL,Éí=^Ÿk zşŠľ'Öą~lÝÝyÔ܌žŐ{°ąüÓ×ŕŁß⟤+IE,ÔlĆňŹŇö+suO×7;çĺů}‚2ŕ@ΤˇÉąqDézĎOS`Â5l⓹˝Â'‘&ŁrŇřČix&ű ‰˜‰ĽÚfwíÍěu,žˆE|ÖŰ3˘Çđđ0ڧ§ůěÇľß˙*<ś˛Ž‡–ÖŃźëTü ¨˙ɟ9w&X]]ÁšóçpňÔÉPţ…óçqöě,..†Ć¤ź022‚˝{÷…Ä™Ű+|i2*'œ†E,Ą>ťÖ6úIđĐâzuÇřäUˇĆD,bć‘őőu6’ŁW] S\öKoÇń~›uÓbTŠýɟ˘ţ™ĹŔ;~ ĹŤŻŠů,//áÜšs˜uʓĎě)fhyâ‰ÇÝýbŠ„ÉÉILď˜ĆÔÔTę勒pčŕ!'Žłn=”Ëeˇ.ÄŹ4˘žDýˆşZźńé¨Ţó%,7Ťx÷íŤRv SÂňB–mĎ"ŘA1~™řäf/ńéĺ1‚Á`ČŃK‚!bů“?ţ3?ýŽŸ˙igl/H—"ď¸ ˙ňŠO ÜůÜçƒÁ`0—XČÂč_°ˆEÜ0.JôgK0Ďę\m˝2Z QsfQ‘0rp'T8{ö<îžű!…źî×äýhřBÜhÜtӍ˜žŢnâëOŹ$Ú|íńՎ…,ƒŰFPšDó| j˘T(†Žăč?Š<ôj˛‰GfĘŚ ^,b1źěYĢł ڛŘć ŇĽI‡Ú‡Âi’Űë9-ÉlȘĂÍ#ؗɰőa‹Ü&ô}L„$ŽĐńšłłˆm鎔§J˝~#× ŁPÎçEW/!˝ˆĺň"ƒt‡ýƜCgşžŮ9G(Ďď”rć ˝M‡ý[ňľgÇ ÄÄ'S¤!O¸†M|2ˇWř$ŇdTN9ÍĽ+b! ű¨‰˜AÓ.ą42†úžCi Y„H#8‹Ř&'§02<Üü{żOüĐëݙYŽŽ ‚y ëoxĘŻzĘŻű1F†°´´„ăǏaaaÁ†Mç>űâ쏝  aďžŘą#űűa!˜Ůˇo?Ž{2T'ţŒ,˘ÎFF1{č(†ý&VëMŒ”Űiwášd ě żL|rł—řôňÁ`0ÂčĹAÄýóŮ3çüô?|äcΡoo˙šˇâÝ˙ůwC3ąźěĺ/vgbQ‰X ƒÁH˛0ú,bŃ7Œ‹ýYÄĚK:7U~ ĎÉF…Ö n~iÇ(J•Txßď˝çÎ]€)ţúĂËűěg>_ýżˆnâüœ˛čhž›[rţD§<<‰őóçQkÖP*şÍşĹŠź‰ Vx&C?ąś!‹XBi’Űë9-ÉlȘĂÍ#ؗɰőaKr{ŞŻ›bšĄůĎ,béë+˜ř–1w––~E:ËÍĆ"–ŕ؛žoćÁĄîďéúfçĄ<żOPșƒô6†q(mLúˇŽ#ˆ‰ĎŚ#á6ńÉÜ^á“H“Q9i|ä4—ŽˆĹÔ>źÄęƎ\ˆĺpÎîżĘŻx›'fYYYńEűöîƒ-FožW˝ŕ9¸˙cŸ‰YĐh ţ—ƒĆg?Ůů>ßľѓËO8Ÿ#n,ĽrÉވXÄŹ,KˋX^ZöďÁW×ÖđčŁ;÷Ôgpůá+008ˆ,ągĎ^?q<$d1ëíÂŐ7`ćŃűÝYY\! …ÇMwVŃŕ˝ Ifeąl{ąŔŠńËÄ'7{‰O/ ŁťH;˘ĹZˆS<ъřźëëßŔ‰§|;ą0 #/°…Ńż đ~ôiř8‹X¤ő•WB\$Ú:VóK|€›‰…,Ę ˇ{ľŃššr@-ä7%6"ÄŹ.ÝĆĺۛřŇÉ& Ţô¸xŘxd{üŚŤyď}¨ýĎ‚îšĎMn¸•ýAŻ}šŞ(TŽ™Ŕú—Ďc˝^ĹĐ@ä$IwÍĹ"#?ąśa>"–ŕ~Ö ]šäeŤ}(œ&š˝žŮrĚ†Œ9Ü<‚}š‘ [ąDŻEŠľ§ ‡ K \üŘ<–ZĂöo›@q¸ˆ~‚˝ˆĺiV"– Ň÷Í<8ÔqŚë›s„ňü>Ap gŇۤíß@Şţł‰bâłéH¸†M|2ˇWř$ŇdTN9 ‹X¤u•tÍľ3V\! pţđÓ0dˆM5mሔŒŒŽ" Žţö;qâŽc~i%,faœ>ƒmżő{(Ţx-Nžę堉1ěÚ5ƒťvaxh8‘[,?tţüyœ>sŐőˇ˜ŐĺžűîÁ‘+Žt—Ę b™Ľ˝{ö:/˙6Ä,˘~‚uVŘ{+#c¨Ź.ŁŃ$”l—: |żšx˛ˆvPŒ_&>šŮK|śôÁ`0z Bœł¤ątkI –Ó0 F˙ żž¸2(ź}`>Î"i}%ŕğIcśŽŐü`K.'ä*ä%3 ­ŐŞ­QűÔţ˛Z?u3Öa}ć•ă¸xö)iŮ"oîě1Üqt"”ßřäg°ţćŸAó‹_­Ź¸[ó _rňގƿüŤ˛ŹĘeănÝŽ7ëež(áŚi’÷‚ƒE,F~,b1lĂE,]ęÂIP’M(Má4ÉíőȖƒd6dĚáćěˍdŘú°ˆ%š=M8Ň@ŒK­ŕ؟ŸÁÚŮ*úiD,˙Ä"–\úw(Ďď”rć ˝M—űwĚ&ˆ‰ĎŚ#á6ńÉÜ^á“H“Q9i|ä4,b1šý#EĆzƒĐtępnjJSŰP.—C˘ OÄ">§§§‘…Jˇüú/ů1…˜ĺĄĽőÍäÝ÷áŞwý>n8~2ą”ËěŢ˝7Ţp“ëW*ľJi8q?ôиpĄó‹!Ęj6›nxőÉćâáŁn‹ŮnʐCŰwZF*JčŻ k¤ěĂVn›đ]źĽÇƒŃU˜j%=1‹­Á3ą0 #o°…Ńß řÓĐ]‹XbÇ)џE,Á<Ťs‘Ř’*.ˇ-6ŒÔ~€51€~Ä-—Oâśœ?ń֖A΃=j6°ś˛čć=ăP7\˛,.˘ú[ďu§“ŽÁyXý­÷KËҲŠĂe÷ĺ#Ÿ *^ˆl4—L”~•Ä"°ˆ…’ËÉ埃űÁń#GP$AI6Ą4…Ó$ˇ×s [’ِ1‡›G°/7’aëĂ"–äöTqŚ}M Ƒş3Ôńjmą†'ţżSX>ąŽ­ŽlD,ÚeKjŽPžß'(äĚAzĂ8”6ý[Ë ĸÜÍDÂ5l⓹˝Â'‘&ŁrŇřČiXÄbbOˆŒ›ŸőFëŚęÜîCžˆE|ŠMĚ>â‰5ÄŇŰśmG'˜zŃópř–ëý´LĚR\^Fý=ďĂúĎüčÔiŘ@ĸg÷\sí îRDâG=öćć."+ˆ:š˜˜ô>buŹť —…sGŒŐćĆMk°ŠbăÁşíYÄ;(Ć/ŸÜě%>[zŒ`01lƏ Ub•wüÂŰđĘW˝ĚMżôĺ/b ƒÁ`0r Yý Š?0 ßůłˆ%zœýYÄĚł9—ÖL+€Q\‘ăâVÓyYÖl:‰ÁTŢjľ::E­VĂfŕwüÜ~xN>Š“~ĂŮîÁ…âŽË‡đ;?^*¨ţš/ËËj˛Ĺ%4žđ%ůą’óŘŻTpţ‰z•˝ĄĐ>ĎÄbäÇ"Ă6Ě_ÄĚĎIP’M(Má4ÉíőȖƒd6dĚáćěˍdŘú°ˆ%š=Óp˜ (bŸ çs˝ÚŔĂ:ŽĽ“ŤŘްąŒÝđ㎈ejrfvńL,Yr„ňü>Ap gŇŰĆĄ´é°łˆ%#{…O"MFĺ¤ń‘Ó°ˆEgOŠţÍX3‹8ĆçgşŒRŠä‹1<‘†Ř„ˆĽ`ťDŽOű/ďÂČŕƏ;db1kçúţ$ęţNÂnV“áĄ!\sÍľŸwÓâ^ţŃGĆęZvcźXúț•ĹűôęÍíڋjąäü­QČĽßłˆvPőŸÜě%>[zŒ`0[b,ŰŰߌ_řĺˇă?˙Ó,ba0 Fî(ƒÁčCH…Ą<ąDS˘?‹X‚yVç’hŰ*#(vń–şńLÄł7*4QŇë/œĹŕРŰÝÔś ŠýÜŅPZ̄˛žś9Ë#LŒ”ń'oş_{l_ź×­—OâŚĂńŘ׿ţD%ćÚ×îĆč ž˯םzÜ3Ż˘î<0hO-C…€Č ŕ~śÓ˘m ĄCčĽ ‹XĚ.{ąčlƒöĆśˇĎIP’M(Má4ÉíőȖƒd6dĚáćěˍdŘú°ˆ%š=í8dG吉Xütىű>t7ţč! Mm­Ô҈XĆo~#Ś&˙ŚŚöúömiޏÂ邦oZŚ84WĽ,ˇCŽPžß'(äĚAzĂ8”6Šűw; ĸÜÍDÂ5l⓹˝Â'‘&ŁrŇřČiXÄbbO âw ç> V,Ą°}ÚąxŸAĄĆÔśmČ•ŠI|í÷ă˙ňżüňŽ˝öşL9;věpĹ1žĐGÔQ°ţ°°s7†Îžtg˝*iî~I(-‹X`Ĺřeⓛ˝ÄgK cKAˆW^ňҢ—‘ÁPÍ`0ŒĎČÂčoPäÓÝgKô8%úłˆ%˜gu.[ŠĆĽ8^÷–Ď™r^˜ŠˆjŻřŽoÇŇâ .^˜ m*Dí„ďwžęĺŘLˆe†^űüî&ąʜŸMäY=/_Ëź^Ť˘¸oĐ­ŕZłîŠTä͕<K3ô˘ŽE,—=X̎ ÚŰRÜ>wDÎ;­HS8Mr{=˛ĺ ™ s¸yűr#ś>,bInOő5#i_2˙•śVÄâ-3´RĂ=ýšŽöȎVÄ"­ˆE×7óŕPǙŽovÎĘóűeŔœ9Hoc‡ŇƤë8"—ť™H¸†M|2ˇWř$ŇdTN9 ‹Xt}J™/1ŹśďMçśÍ 2P ‰XħgˆMÜoMŒ# ,--bń™ˇ`çž]Ą|ŐĚ,nč<Šő7üjż÷~ĐęLQ*q呣îůŹŹ,ăĚiťĺŠ”ÜNýŒŒŒřuäÍČŹżó{šśë ůxĺýřĹ,b㗉OnöŸ­7FđfŁWŔ˝‘Á`0˝ž‘…Ńż Č§ťĎ"–čqJôgK0Ďę\ÚůĄe… ˆKń Bř֭傊ťF fl\sž A†×ţÄkÜ-ń`ěořiŠýG?ńalE4Ž\†Ćż„’Bb/ڎn\qE,żéţbžŽÂţA§Žœ—ŽuˇŽ=oV–šY4MzĚ"–äřăe˜Ä¤=NŃ|ąDm2GŹÎc‡$i §Sq [éw.s¸yűr#ś>,bInO;RÚDa"bqóíâ‰e<úŮ3¸ňÎÝčut"b ÂK#"–BÄIéű•9‡şż§ë›s„ňü>Ap gŇŰĆĄ´IÝżŰéH ĆĺJ9ş„„kŘÄ's{…O"MFĺ¤ń‘Ó°ˆĹÄ>ŢäߙŐFK zvŰnWxQ,ÝOą‰Yx"‘aç>śTB8ţÔSnC?ýo1đŽßđcPÍĚâ˘Ń@ý/˙Ď}•Ÿy+JˇŢ  âŕĄËđŘŁ¸é§N`zfĆštŠÉ‰)œ=wߑE XóťZbŃŞ+ş•ÔŸeŰłˆvPŒ_&>šŮK|śŢÁŻÍŒnƒşţÇ,ƒÁ`0فgdaô'(ňé%zœýYÄĚł:—DŰ@žŠhF$wg ĎŽŚ‡PŠ `nţ".uŒ=ăé81ż$}'ňN,8/Űî¸-vlqaÁý…ŰŔÁqWěRmÖ7üüĎ Ń˛éB/UXÄbvŮłˆEg´7ś%˝}^ ƒ<ŠěQä€˛ĺ ™ s¸yűr#ś>,bInO;’rČ`#bńöüĚ),œ7˙Ő÷f KKkÇź™÷Í<8ÔqŚë›s„ňü>Ap gŇŰĆĄ´IÝżŰéH ĆĺJ9ş„„kŘÄ's{…O"MFĺ¤ń‘Ó°ˆĹĞ,|źYΏďđĹâSlžˆElcÍĆ˛źź„…ĹÖ´Ĺ™]¸öž+fŁ›™E€NžBőm?‡ęř5`~&Řšc§zçΞA˜˜œôgŹńęʉ:Äönő7Üeˆ#βë^ÓV,b(ôa哛˝ÄLjbâRdE, ƒÁ`0 [°…ŃżŢ5ąˆ%vœýYÄĚł:—DŰ@ށüz˝ážD+ďn=<bŒKcˇÜ<ýV<>ˇ€ĹjÍ­ą-VŤxěâ G~ű1űőľ5TŤ5 ‹ŠN“•öŻ;/¨ĘH7¸űĄ—*,b1ťěYĢł ÚےÚ>ňľ’;H™ŚpšäözdË!ýÎ%c7`_n$ĂևE,ÉíiÇARҊXźĎc÷_ŔŐÇ÷`Çţ1ô˛ąřˆ‰XäßłĘt‡ýƜCÝßÓőÍÎ9By~Ÿ  83ém ăPÚ¤îßít$ărĽ]BÂ5l⓹˝Â'‘&ŁrŇřČiXÄbbO)|šíş-oYÄ˝§'dńśáĄ!dŮ‹łţž˛Üôťż†Oüŕë1:°v™Ą6čâEÔŢů.<őČyěý÷ĄRRżôšœœBe`ľjŤŤŤX][uÎŤ3Î S/ĹbÁŻ'!h YD]ŽŽM``aÎ  ëśßeÖŻňştMjűŤÂÇ)űŠ•Ű&|o˝1˘{"–'OtśŒY§ţĚÇ|AȖô‰ćÓÇN–BůçΕÜĎ˝ť'Nqţ|Ն"ÖÂĽ'ř8qŚU5j}ul_™MÁ˛î¸0ßfň1[,daô7XÄ;N‰ţ,b ćYK˘m  YťHňë͆ëSŘ9Œbš5‰ÖđđNœ8ŽI灥é DžłłÎƒ˛Úky“ól}­Š­ŒŇÄ8Žúă÷aékwcéî{Üźą›oÄŘM×KíEŽŽřéž!Đăk¨6k(+ţŁ!ň”űbE'/ß}č7ßF˝{öÉ݆E,&1iS4ŸE,ń˛ťRŚ)œ&š˝žŮrĚ†Œ9Ü<‚}š‘ [ą$ˇ§qt*bńňď˙üI<ç{Ž˘Wˆ%ţçĽ ‘tô8:ěWćęţžŽovÎĘóűeŔœ9Hoc‡Ň&u˙n§#—+ĺčŽaŸĚí>‰4•“ĆGNĂ"{ęŔ§V,Ł<8ŕžĚńD,Q!ËĐđ:Ĺęę ęíbˆ&xâ˜Ń›nŔŐ/ź÷}ôS11Ë‰ŁˇâĽ—ŕ;ż˛Žš]-¸ç65ľÍ_Vhq~Ąc!‹ŔĂ‘%X—scS˜\˜C­I¨6Ć[˙÷ŽQW,6~ŐÖĽkRŰ_>ÖHŮWŹÜ6áťxëÝą0 ƒÁ`0ú,daô/XÄ;N‰ţ,b ćY‹Â–‚ż SˆXš‰ÂOOęőŚ{žĽ™‡âW[ĺR gΜÁĚîÝH‚xöŠďřv|řŻţÎ፝ybyďůŢďD?@,3ä.5¤ÁüüźűŤš‘€Ľ¸ ´fźń źLB/Ux&–äřăe˜Ä¤=NŃ|ąÄˎďçRŚ)œ&š˝žŮrĚ†Œ9Ü<‚}š‘ [ą$ˇ§qd%bé‡ď>‹gźě0G*ŘlŹű$VĎ=čź܋âúš­|ŠE,ˆzL­!ůUš}!‡şż§ë›s„ňü>Ap gŇŰlZ˙n§#—+ĺPŰdŠ„kŘÄ's{…O"MFĺ¤ń‘Ó°ˆĹĞ,|‚‡źĽYŤ• KpóÄb‘RŠłU͍.ĚnĚĆ2&~ĐŔ•żýŸpâ /ĹÜübĚW'fqE,ˇ˝V?ýâ:îźr‡śŤco YœS_^^rrfĐ)ʕŠ;s¨÷ (bŸł•arňÝg,~˜ËË ÁŠńËÄ'7{‰ĎÖ#ş/b9´Ż4đ~ůžÖŸů˜OÓY<žƒ{ĄübCĘaƒ}ť›¨›˜žv¸á`ßLŤž÷ěi}gVť˛öídFî̡™| F?€…,Œţ‹XbÇ)џE,Á<ŤsI´ ”!k¨ăŞ6ÚË˙L‡6îőڟsgԌBˆYŠcŁxÚĎ˝Ľ[o=y Ç˙ď§ńŽ?îŠXŞ Âobżű=cJIŰ7łŒcpţÂ9ŹŹŽ¸ł˛ Œ`ppČŮÝŮbŠEsáNŮŠŸľŔě5Ń:\Š´8M˜ƒE,°ƒbü2ńÉÍ^âłőƈî‹X ĂĂ%¸bƒÁ`ô-XČÂčod_–Ç"–dţ„¸H ´uŹć—ř}#bńř j?ď\ĹŇBâ×lťÇ„x¸ľmj;zčA\sÍ5îƒ3Fâ×{>ř +üłŘ1¸Óy:RBs•܏ĹB{Ů%D–ňöy&Ă˞E,:Ű ˝ą-ŠíU~y”i §InŻç@ś$ł!c7`_n$ĂևE,ÉíiÇAF™‹XڏÜ{vӄ,âĽŘÜŠob˝´!ćłł­W›¨]áĘ,Ɨ>ąŒ^óĂ"–B$ätp Eřť×Š#ÉFÓßÓőÍÎ9By~Ÿ  83ém6­ˇÓ‘@ŒË•r¨mň„QYśĽ94őQ9i|ä4,b1ą§>A4¨ő%¸Zˆ÷ŞţR9’7IľZ sósX]YĆęęÖ×W­jüŤóI™“/¸‡oť~ĺnŠĎř[_ňK_܊ofĘGoÁĹ˙ą˛šűx˙pď:^v|)˘rE¨ËËËî† 6âÜ140ˆĄ!Œ chdŘMĹďً%ů4+ž ĽVđË3‹X`Ĺřeⓛ˝Ägë,ba0ś ˛Ö{PŕG‚ ƒÁ`d˛0ú$ٗ屈%™?!.’ĆmŤů%>Ŕ%7 Ü×äţ’›Ę ďGƒƒĹýßźW˝Úý%X–"RÉbţâ ^Ş‰ĺŽ˛„x@úĐC8çPPÎZSŢ7zdŐ ”Ёć$żíZyz‹XŞ{Ç"“˜´Ç)šĎ"–xٲýî<4 Č^ô{´> éN9HfCĆnÁžÜH†­‹X’ŰӎƒŒ8/ŔČӆ103€Ňp•–O­áÜ˝ 8˙Đbj‹ř<öŘlKŮĺçyâ!â쩇P+Nůybź­VŤîśžžŽĽňuŽý3ąL<ý§˛ś‰-7Ôaż2çP÷÷t}łsŽPžß'(äĚAzĂ8”6Šűw; ĸ\)‡Ú&O•ePšHS•“ĆGNĂ"{ŠšŚˆËë7+EýŇyĽrü~˛RŠ`zç4jŐɍ™Wœ1iuuŐ]VĚ̢ľK]űţßĆégżËëŐŘą]w<=”Ţ;UÄĚD§ćĂsüÁżŹáöË*Ř9/Ădڎ˜AŚćŒłƒőÎ&îKŤĂCsŽ Gf“Q-ťä˝ÜŞ_qż™ôˇDŞż5ştMjűŤÂÇ)űŠ•Ű&|o˝1‚E, ĆĽ 1v˝ç]ďØóŹú'ßřZ0 ƒ‘XČÂčOd_–Ç"–dţ„¸H ´uŹć—ř[VÄBMÉq„R p÷aU Žz˝Ńz%–*ĘňˆĽ…šMÂýßź‡_íۡ# NQ~ˇ„,˘ź,…3‹‹‹xôŃGœ‡¤el›ÚŚ6Ü?<˛ŠŐQqţSÍIJąßĘOî6,b1‰I{œ˘ů,b‰—-Űg‹ü;—Œ9Ü<‚}š‘ [ą$ˇ§qxŘńíṢ4RÂÄŁîśóŘ$îű›ăh,Ő­E,b[süfĎ-cǎ伳9ĺΞ~ ľâ†Öą‹ˇ--Żcą6‚ŃęS‹X˘˘•ŕ/ńÔ}Ó2mÄĄîďéúfçĄ<żOPșƒô6†q(mR÷ďv:ˆqšRsŸŽĂ6€4ԃ˝A~>rą˜ŘS ‰çVٰ$şD5ŐT0)f9™˜ ĺ‹I…dŐ¸Źb}u͝ÁEBÜ2œĽńQÜřłoÂçţă{bǖ{#{wűéĺ*áÂRœGä˙ţżŹâW^łeâšJeŔ]ęHĚž2Ô^ZH,7$fe1ůEşŽ~DyőŚYyĄY‰YştMjűŤÂÇ)űŠ•Ű&|QôÔÁ"ăR…'bůżý÷~‹Y ƒ‘XČÂčoPä3´Ď"–Dţ„¸H ´uŹć—ř[|&R?ˆ0ˆŤÖŹťťĹ]ú™V&&'Ü_Ľ=účØÝ†šësŰbÍy@x×׿Ó§Îş/ধwâć[ŽÇřÄ8ňD–劗t'N<…łgĎşË MMMiíKű‡Ps*ťÚŹaĂ퇓Áoq1D30MŚźůYÄb“ö8EóYÄ/[śĎ"ůw.s¸yűr#ś>,bInO;2â0ĹäÁÜřƒ‡đĹ˙ńęŤaąJ’ˆĹË;fąkB! ={ ÂH(/&bYZrˇęúve<K,Ýaż2çP÷÷t}łsŽPžß'(äĚAzĂ8”6Šűw; ĸ\)‡šO×a@š€ ęÁŢ ?9 ‹XLě)…ŠÄűŤłQ­űâOč|4š ŘBĚ|"f Î8zěŠ'űĹSî~­^SúÎüŕ÷ŕŔ?Œ§~"”˙Ůßű3Ürĺu¸lf‹Ť5üň_CľąCĘńɇjxÁŐ5<űŠđl3ľęFšB°ríľ×ÍҢCĂšőD?Á%™ź­QŤ%rđrB°ƒbü2ńÉÍ^âcDŃSc‹XŒ~‡jŮ ńăÄwýĆ{ń÷ů¨Ÿ7wqž—b0 F&`! ŁA‘ĎĐ>‹Xůâ"i,ĐÖąš_âô×rBí¤{NʸÂţjÖCÁÂŽřZÚQŒškvĎÎÎâ߸ ;věÄôô.W̑„•ĺüٟţ>ňˇu_l!Ě}ŰóŸƒ{ícçôd‰,Ë]]]ÁšsçœíŒ{“´szĂCÉő6|hŤtEzżůôË E÷[Ö,b1‰I{œ˘ů,b‰—-ۗŸwÖ ČEÖ'!Ý)ÉlȘĂÍ#ؗɰőaKr{Úq‡*O…ѝƒ¸ňůťńőż}2,V1ąˆĎóç–qňGÝůŰaöě 4 ‚V!bńÄ+޲BËËËîśşx{Ž~^Ç"™ŔÓOKúUAÂĄMőMuO×7;çĺů}‚2ŕ@Τˇ1ŒCi“şˇÓ‘@ŒË•r˜űtś¤ Ř ě ňó‘Ó°ˆĹĞRřčHŠíďýJm+ńEpF1ťJܸˇ[[]ŐÚŢř‡ż3/ú^T­{źšŠ˝řĎ/Dýç>Š};Gpúâ*jő&&vÂԞ#RŽ÷ţżUÜ| ŒŃkmmŁÜ‘‘‘ŽE,âĽPmÝ'âŕL˘ĆčŇ5ŠíŻ k¤ě+Vn›đ]lDŃSc‹XŒ~ǟü÷?ř3gńŽŸ˙igü <r˘÷žű}!ËK_ţ"üĚĎżE, ƒÁČ,daô'(ňÚgK"B\$Ú:VóK|€žąŘÄ%ŕ Y÷LŔBȲ{÷n,--cnî"Ο?çŽ?>11áTŹLĄ8^BsŠőňąThůQ{ĄB[L°!3Bű¸lŸE,&1iS4ŸE,ń˛eűÝąDKˆ~Ż‘Ö:!Ý)‡ô;—Œ9Ü<‚}š‘ [ą$ˇ§q¨ň’°˙ŚřćgNbţüŞ•ˆEĚÚ˛´¸ŽNpîÜy|ţ‹_Ɨżú5œ;{fgÝľvî؎ééi<ăś[pŰ-7:/şjh6~AągbŰ5ťŞŘöŒt"–(ĚűŚeڈCÝßÓőÍÎ9By~Ÿ  83ém ăPÚ¤îßít$ărĽć>]‡mi6¨{ƒü|ä4,b1ą§>I$ŢÝÖP}sN§‚o÷râĎfˆźNEĂĂłł,:ă—•}{qý~/žúśD,×ý(ŞíY\ž:ˇěŰ-œ}Ňý”‰YÎ;÷‡üš5źĺšĂrĽńt‚zٞxőçmEOČ"yČ3ąŔŠńËÄ'7{‰EO,ba0ś2L´&BÄň'üg~ڳȖ"–¨Ř%ˆůÔ'î|îóÁ`0ŒK,daô/HśĎ"–Dţ„¸H ´uŹć—ř,bťb=ě†óđŞRŔŔť‡dccŁÁšzŹŹ`aa.\đ‹™ZžŤŤkřĺ_|'žzę8†G†”ĹşÝ ‹ř÷żřëxßű߅™™it‚rO8‡Üe‘dh6š˜Ÿ_•ťzaŝVÚCŠTĆĐĐ &vîÄĐđp*ľůŔ0÷Ż8/ëß¤Ë aăń Eö[p:˘%| çŤ.ąÄö)šĎ"–xٲýnŠX‚ĺ†wHg“”î”CúKĆnÁžÜH†­‹X’ŰӎƒŒ8LyeCĚžëśăÂ'Ÿ˛ąˆĎ•ľ*Ňŕüů řÓ~˙ü‰OşjÉ3ĹCÁbű…×éÓ§qĘŮîžűřŁ˙N¸ůŚđ˝ŻţWŕâ‰XźYX˘"–}㍸éEŻGŐiĄĂ~ĽîßŃ´şż§ë›s„ňü>Ap gŇŰĆĄ´IÝżŰéH ĆĺJ9,|ĐeŘ˜&@ƒz°7ČĎGNĂ"{Já“Lâ܇ľďťFëUÔju_°âmŢÄ&îKG†‡Ń ĆFG]N1ś-//Ą^ŤĄ\Š(ížă-řŇÝÇńĂĎŇ.E$Ä,…b “3‡cÇţúŽuźŕŞ ŽŮÓzt:77ç? ČëkëîO‚B–ŕ6°ÚŢDď˜YÄ;(Ć/ŸÜě%>F=5F°ˆ…Áčwˆńýě™s~ú>ň1÷ŮçŰî­x÷ţÝĐL,/{ů‹Ý™XT"ƒÁ`0Ҁ…,ŒţÉöYĒȟIcśŽŐü oD,ţú๸‚׆‹‹ŮXÄga&8Cźmr7/žşx€çäďŰ{ŔÍű‹~O>ń&&ǜ‡gúá`p¨‚š‹‹řŁ÷˙ţW~@”{ěÉ㘜sF&•;?ˇQîĚîÝhŠ—‚ő:ĘĺR&Ó9cŸSGm!Ë@ic)Ń"<‹Y&1iS4ŸE,ń˛eűúóÎ Ńď5ŇŮ$Ľ;ĺ ™ s¸yűr#ś>,bInO;2â0ĺŐaçáqÔ?a'béŚuIŔż~ţ‹řwýŽ+B);㼹”ÜȲĽč˙zŽ)^ ՈSÖמ~7îš÷~źîßüŽyÚQ_Ŕ"6ą”'b™^Çs^öZäż⺿ЗůČ8’l4ý=]ßěœ#”ç÷ ʀ9sŢĆ0ĽMęţÝNG1.WĘaáƒ.ĂśŔ4ԃ˝A~>rą˜ŘS Ÿd’ź1hŒX[] 0Ä}š7+ËúÚjÇB1ăćä䤝”ޏˇ=á˙ăŁ^âhţôcÎýx#63‹¸E×ÇWńß~h ëŤ+îrś•ĘFGÇĐ)Äýšć úő%ęNäůB–…–xŚT,řuŽ[NHůč Kפśż*|Ź‘˛ŻXšmÂwąEO,ba0.ˆq\ˆS<ъřźëëßŔ‰§|;ą0 #/°…ŃßđoŚXĒȟIcśŽŐüŕœ‰…”ÇkőşűYœE7âŰŘظű€LA>üWÁČČĆ'ĚÂ5M|îł_r—šŮ˝ iŕ—;:ŒŃ1łsŤ×ęĄrˇoێšů‹Č bF–šsń­;/ÝšoÄ4ν`ĄŮ^÷E,0ŠI{<Ö XÄ/[śĎ"ůw.s¸yűr#ś>,bInO;2â0ĺMÂÔ̈ľˆE|KvôţňŻ?‚˙ň_˙ť+X)ˇga/ą\1‹+hiýr[œ„“…ŚRBźňűď˙^ů/Áϸ%$bŸ“U<ď?’4Šţ …4}†ęţžŽovÎĘóűeŔœ9Hoc‡Ň&u˙n§#—+ĺ°đA—a[`š ęÁŢ ?9 ‹XLěÉŔ§€*ÍÁB{v†’uglńÄâSlž0ClkkkČ;wLťBÓgNcffˇöGÕţđ'ŽĹží Ţň‡_Ś󔜪e†;ßŔż˛Ž;śŸđóvěؑîÇ&Ź,Ż„ęIpëQĚdş}}¨8˙űËđÂ]ş&ľýUác”}ĹĘmž‹(zjŒčPÄŇő–Á`tq/ł¤ątkI  †iƒÁ`ô˛zÉ`ô ü#ą$ň'ÄEŇX ­c5żÄč/ Ĺü'Ĺľá×rŽ5î~aײÄŕ`‹ď›÷?ä>PœœÇĐŕ€Ń655áţúí‹_ř*ŇÂ+wŰ6ór'#ĺ :7$Ů _ĂÇÜ_˛‹YL//ąŔ(&íqŠćłˆ%^ślsD,тH}(9Ý)ÉlȘĂÍ#ؗɰőaKr{Úq‡)Ż GĘb=+‹ř4.ăó_ü Ţ÷ţ˙ÖúĹľXj -Z[PĐ"fi)—‹ţL-ŀhÁ˙ßŔ]wßš‰e¤\Ĺ żă‡ż ˛†şoZŚ8Ôý=]ßěœ#”ç÷ ʀ9sŢĆ0ĽMęţÝNG1.WĘaáŁ;˜lËH“A=Řäç#§a‹‰=ĽđQ‘4B„˘sUâ‹ĺE_ŔÜ<ĆĘĘ ˛ŔÔÔ†Ű3ŽV××]1‹ žyd_x×sńŁ/ť %Íř'Ä,s§‰ĺ˙Ďϯၭ%~Ä+4Y`ai1$d÷źÁú[\XÂ4ZË"‰ĽœXÄ;(Ć/ŸÜě%>F=5F°ˆ…Áč'˜ę=<1‹­Á3ą0 #o°…ŃŸđoŒXĒȟIcśŽŐüŕ’ą¸ç™ÔöíO!Şp§Ţ;ŽŹ –ńŠ´×đÁÖşń‰Q măăŁÎĂĘîžë¤…_îř˜yšícźrĹCžJv/ŕĘŁ(lp—}¨ˇ§œNî6,b1‰I{œ˘ů,b‰—-ŰOą÷3GŹÝb‡’ӝrĚ†Œ9Ü<‚}š‘ [ą$ˇ§q˜đÚž* ­D,ÂvbĘlI…sçÎă—ő?;´zťř%™x‰č~ !K{•–ˆĽä [ŠOĂ 1‹Ăńż?ôˇÎ‹žłŽˆe PĂ ^ú=@ÖP÷MË´‡şż§ë›s„ňü>Ap gŇŰĆĄ´IÝżŰéH ĆĺJ9,|" Yš™`_@š€ ęÁŢ ?9 ‹XLě)…O2I ŃWTewLšłłJ!‹§–——üĽw;‚SŢŢ}üäÉÇąj8ۋˆóWžç üăzŽźlŻŇN&fŠ9ˇˆőȌ[-ÓťvšKe…ůyˇ~óE|ŰłoĆó_ňJ‡Ël9A¨úf!j“”6ę›ęţžŽovÎĘóűeŔœ9Hoc‡Ň&u˙n§#—+ĺ°đ‰$ô=l& ƒz°7ČĎGNĂ"{Já“L˘Ć€óâjÝšo-Ÿ9á.!+6!Ŕđö…ŕĂť]YYÎd Ëúœ;{ ‹ nY<üŽšćZWb‚+÷ŒŕcżrŢ˙ąăřżşŐő¸FśĚĐc #řڅř‰[" aĎĘň’;ۨ+Ju61fëqőô) 1†G9cmLƒ‚(Ąż*|Ź‘˛ŻXšĺĐ“|Œ(6!.EXÄÂ`0Ä&Ţöö7ăÚ랆˝ä,ba0 FîŕY} ą$ň'ÄEŇXqĽ<ą´ý(ü¨Ţ¨ťÉâîěD,ÍćĆ~ŠŇúúo6šĆ3Ł´8šIHźrŠi^Ž÷ë˝pšŮ>)hMQ]k//-ac_/T P$E,ą}Šćłˆ%^ślß\Ēmďƒ ň”i’7ć ™ s¸yűr#ś>,bInO;2â0áMűăđŚÓmD,…R{ „,b政ű‡ůŃR;Ć+.ż Ł#Ă(•K˜™™Áää¤;cK]ź,tĆqą/D°bźlů´?[4¸˙ÁÇpýÍĎÄÔÔ6d uß´LSÁŔGÝßÓőÍÎ9By~Ÿ  83ém ăPÚ¤îßít$ărĽ>‘„ŹÜMEš€ ęÁŢ ?9 ‹XLě)…O2‰íĺ^w.žÇĘƚ/Âđ6O !śůůyd…Ë/żÂ[żË[]]ÁC?ஹ6xËöă‹ďyžyĂîKš(d3ł|äńi,ŹgóUԇ¨nŻ~„ŕ'XwľZ ĺăOĄŕ E^&ޏwéšÔöW…5Rö+ˇúc’Ĺ&ÄĽČ‹X FBźň’—ž°§E,,Ża0Œţ Yý ƲGŽłˆ%œGŇXqĽ<—~ąPôé‰4.R–UmÔ[qí2[†ŔőFŐßżňč٠ó4Úćf\ßËŻ¸ iá—ëp™–+bŒ–[ŤŐ‘%*ű‡—€MԚ­Ů_äÍĎË ™Ä¤=NŃ|ąÄ˖í÷†ˆE2M“ü¸1ÉlȘĂÍ#ؗɰőaKr{Úq‡ oG+ÉXÄ"ŇWŮé.”„O~úsh4š-!ЏŢÚ━AgŒj RĹrAĺJš%bŠ7Üφ+fi ZÄqĎĎ´ˆc÷óaä‚űs¨ű{şžŮ9G(Ďď”rć ˝aJ›ÔýťŽb\Ž”ĂÂ'’•ťŠHA=Řäç#§a‹‰=ĽđI&ŃC´LĽýë0­aavÎ`ČÄ,só‘Ä,&GޏŇ ,.,âoއęúş ŚF+řŕO߄ßËs1>_Ň7*fYrčß÷Šdóçυ„>b–`ÝÍĎ/`zîŹk;P˛xtŰĽkRŰ_>ÖHŮWŹÜrčI>F›—" ,ba0úV|0 ŁÇÁK 1úÁ›XŠço么%˜GŇXqĽ<ž‰E_V˝Ůp_>e=#K= ţ¸éĆë°˛şŠłgÎă˛Ë÷cǎ)­ďĘĘ*Ž=y kkëxúíˇřů>ř@âŻëÄ ¸›nş)TîŠgpŮá}˜˜ĐO/˝0ż„“'ÎĆĘmÔŤ(Nm‚áƒX,´ë^dˆ‹´\BH˛œcS(¨„,b‰íS4ŸE,ń˛eűiD,ÝyAŚi’7ć ™ s¸yűr#ś>,bInO;2â0áMş’P*‹XÄçu7ě3âýĚžĄˆëÎůç̙3ŘżŸłßDľÖt—Ú3ą¸/đÚ6-!ˆ Ľ´|öó_ÂwżęĺČö}ŠţMŤű{şžŮ9G(Ďď”rć ˝aJ›ÔýťŽb\Ž”ĂÂ'’°ýNČi2¨{ƒü|ä4,b1ą§>I$îđBföbÂÍ핪gNĄ~hŸ/fńśÖ˛9ŤU,--al,›%îÄěd—_~=öˆ;Î-//ăŢűîÁÁC—a玝V\/˝y;ž˙žâú >ňŮœ1´á‹.3ô‰kxÁŐ5|Ë夅Ťçć.úu#ś`‰íÂésxjŽuÓˇŒ˘]loR\“ÚţŞđąFĘžbĺ–CLň1˘Ř„¸Y` ƒÁ`0 cłÁ3˛0úÁ›XŠço么%˜GŇXqĽ<ą$ÇUsţ‰‡[ƒ{âż ëNŤkŤîi9r؝Ů䮯އĺĽ H7ń0ňŤ_şŐj ĺrOúÍ.‡ˆqqiąEŹŮŞŐľXšëëU|őË÷:ŸëĘr××Öđ•/ßăţâţ$žůŔƒxôą'p÷Ý÷`uuľ5K{Fo‰!13KŁ-b Z×ńă'‘'ěűý;šV÷÷t}łsŽPžß'(äĚAzĂ8”6Šűw; ĸ\)‡…O$aRnW‘Śpƒz°7ČĎGNĂ"{Já“LGAó2{¸XÄhĽ„ĘąÇÜ{ť¨ Cˆ4Ę岝]˜˝€,ącÇ\yĺQ§ŒÖŁMqßúŘŁŕţűďĹÜŋţľ&¨WWđćo-â?źzśO…—ŒÎĚň;˙o+U¤Ć… \1ŞW/b‹ÖŰŇO`GĽˆvŐ'jY(ĹŻęS\“ÚţŞđąFĘžbĺ–CLň1˘Ř„¸Y` ƒÁ`0 ŁŔ3˛0úąäůdK(¤ą(âJy.,bIŽŤŃlŔ]Ý{Ź‚Ęř˛„XŠ`vvűöś~ţ֟zţíkßę–űéO}W9€Ë.?€mŰ'Ptž‚-,,áÉ'NâÁG­Zs|çń‹żüÓ¨TZż>›››CłŃ0*{ÖyXˇoßţXšŸüřqĺU—šłłLNľ„;sńÄăÇńČCOş#eĺ–2œĹCy˙g—QmÔ0TöřőB…B,ŻžľĽ˝Łć` ÷YÄbźŒź@Śi’7ć ™ s¸yűr#ś>,bInO;2â0áÍBÄ"04R6ąˆíškv;/ÚFxĎ:㝝…ř¤ĐÚ…ŚűbęÜů (9/ ‹îVp_€Ǜ xĽánä>wyÁž@ŃżŁiuO×7;çĺů}‚2ŕ@Τˇ1ŒCi“şˇÓ‘@ŒË•rXřD&ĺvi 7¨{ƒü|ä4,b1ą§>2’čýŒ­ý`Š€b8°|ÇĎ]Äčč¨+ĨVŤţć‰5ćçœc{œűşd…ŠŠm¸ćÚëńč#`eeŮÍ3ż<ôđƒ¨ ¸Ç'ĆÇ1<<‚A'-ĆQ1֊WWW\[q)öŽžţŕĆđżż6Žüę4ę­Pgf9łŘÄ>żŠ7ݙn)ŕÓ§O…D,˘Ž‚"–ůšŒ?őF{Ň“e…ştMjűŤÂÇ)űŠ•[ý1ÉLjbâRda+‹Xž<ŃŮł˘Ný™ů‚ *ŁyÁôą“ĽPţšs%÷sď.¤Ć‰ÓEœ?_tžuf˙uŤâęV]Ô¨őYP(Aƒí+ł)X*Hš0ßfň1[,daô%bČ)ňÉ"–PIcQĕň\.u‹{ţ q‰›“zŁîćw§{(ڃř{~vťwÍ ä<0ťĺśđĆ7żď{ďĹŘř(~čyřXČGÄ˝śś†ĹĹźěĺ/Äw}÷+Úů„'îßřőO¸/Ř&*cŇóZŽŻ˘Öl`ůGnÁîďÝ--÷űÃß|̸ÜÓ§Ocűö)dâžA4žśěÜČ4В…oHˆ‰T§Ě3ąÄö)šĎ"–xٲ}ąD3)b™ÄáćěˍdŘú°ˆ%š=í8ȈÄ7+‹ŔÎ=cF"ąÇ3ó.ŻÖQ*”Ý% ‡łĐťmÓ=‡˘+ti Y ­×‰ŢDaKk™!o†––J6{Ř÷県úŚşż§ë›s„ňü>Ap gŇŰĆĄ´IÝżŰéH ĆĺJ9,|" “rťŠ4…ԃ˝A~>rą˜ŘS Ÿd{{1 •œ6+;Ÿ‡JM<řÔqTˇmž0òq‹7ëHkšźČĂCøöÚëpĆšOΜ=ďţJ͝šŮ ŠYob˝Zsćđc?ţƒxÓ[_ç󈇄Ç>ń€ŰśCĺA˙4üsiWÝ`qŐĆN˙ë“8vG6ĺV*ů(’Ž`Î;/됉X˘űÓ‹X$Çc݀E,ń˛eű‹X‚űy‚Ti’×úÓ$ł!c7`_n$ĂևE,ÉíiÇAF&źYŠXŢn$b˙Ý|ý~c^"–BELŻ‚BÓů6hĎČŇ:‡JÔúl6fdńjIœck!§ÔFKȲ!fibçŽ~ĆgżI:8x*}Ôý=]ßěœ#”ç÷ ʀ9sŢĆ0ĽMęţÝNG1.WĘaáI˜”ŰU¤)Ü ě ňó‘Ó°ˆĹĞRř$“Ä!^ţHďă%)1=XĆđScőúk044f şłkŠŮ6ç.Îb÷î=Ž€#Kˆqq÷ž=˜ž™i‰WΝu—â3…˜%F,U´{f7[÷ˇGfJřد܁?üŘ ź÷ĂwĄşśłźűăŤřo?4†rŃüMŮɓ'ÝşđD,˘N‚u%–ŕ­=ú0ö{éVŻPžˆ3iÇ>Q{mUřX#e_ąrËĄ?&ůQlB\Š,ôƒˆĺĐ>łYƒŁđ~ůžÖŸů˜OÓY<žƒ{ĄübĂj™<öín˘RlbzÚá˙vŃzF‘­Ů9î›iŐóž=˜Ř•ľo'3˛p˙`žÍäc0ú,daô7b^XÄĚ#i,ЏRž /'d×ĆIÔ5wŞăŇnłel!*žuę=sťœ‡|ßý˝ßç>ďYř?ţa|úÓ_ŔącOšb’={fpÇłŸďűţWáđáƒ>ÇüÂ<ůĆXúÚYÜš˙fěšlýLqĎ­-âëÇÄcŸżŁ##•{ęôIěŮ˝y`x˙8杷„5÷ĺ#Ą¨8„óƒB{G}łˆ‰ű,b1‹_]FŢ UšäÇľ>Á4ÉlȘĂÍ#ؗɰőaKr{Úq‡ ݉ˆĹśßě?´ Łƒ¸pqY)bKíß?…íŰĚÇófQ,Ą×tzľŸŹoÄ'ţ. ˘űéÎĆ"–ßjĘ֌,íYYbbÇpďžlý…Ź ŃăF}SÝßÓőÍÎ9By~Ÿ  83ém ăPÚ¤îßít$ărĽ>‘„Yšśß MQő`oŸœ†E,&ö”Â'™ÄĚžŕţÍIíý0ÍPąˆĄRçÎáÁ§Nctlëë뮀E| řł˛áƉ'pčĐ!äą Ÿʈmum‹ó X^YÚŘ_Z }qlŰćŒçcc˜ŸpâSžzý‹öáűŸľ ořŁűđĹ{óĹ,áţâkëřÁŰĚ~„"îĂ˝ŮX„˜El+++n‰MYŽ?…É“Obz Ź_V(ҎFďŇR´˝śż*|Ź‘ňš´rËĄ?&ůQlB\Š,đL, F˙Ă]Ć60`LNŒaéÂ:úâƒhY1 ĆV Yý Š|˛ˆ%”GŇXqĽ<ąXÄŐţËđ4¨‘˝Č ;śďŔSǏa˝şŽbZgç&fçôźé­˙ÖÝt¸pá{řa<ůĄ{ąwxŰĆQB ŞëX,0éŘě݅ű˙ę íM]îO<ŽééČknČbšˆâĚ0pŞćźřk č<8Œ6[ôĄ-ĎÄ"9NŃ|ąÄ˖íg(b fćRĽI~\ëL“̆Œ9Ü<‚}š‘ [ą$ˇ§q˜đĆŽ‡ĐĎËŐyI(– ¸ýY—áďţöĽˆE|îŮ3iĚš¸˛Žĺ}ŠmHŃů§YuwKTh/+Tp<ÜĽ…9W!`q>Ýňۂ–†ł/d1…Üůěg"7Ⳙ_Şűw4­îďéúfçĄ<żOPșƒô6†q(mR÷ďv:ˆqšR ŸHÂŹ\™UNHS”A=Řäç#§a‹‰=ĽđI&éÜžĐÖU;căáÁîř›X=´7$bń6!Üh4˜ŸżˆĽĽíGžK‰ÍĂ˝÷~ĂŽ”J%\yĺUĆ\SŁ|đ§oÂ?Ý}?űŻúb–˙ńů+ń­G°ިőŻ;ç}âřq_ŔâÍPă XħXZ÷ĚÏăYë ¨ a°¨XVˆZÂ"+¤h{mUřX#ĺ5iĺ–ĂuŸäcDą q)˛Ŕ"Łżáݛժug|Žřů;ˇM`Ľşˆő:a°œĎłÖ͂8§“Cî9Q­ÖŔ`0Œ­˛0úůdK(¤ą(âJy.,bąˆŤýéţjÚŮ/N ˘<\A^íŚwMťë“Ż,/ăŔƒŐ˙b\‹'?tčě:žśď2TÜ_ëŻăRĄˆ+Ć÷ăäŇ9<ţg÷Ż)Z—;;;‹;wş@óDůŔ ę§j¨5ë(—6Ú@ޔ…ŕáýőeĚ"$Ĺ,~uŃ:ȤJ“ü¸Ö'˜&™ s¸yűr#ś>,bInO;2â0áÍc&– žýÜ+đOťkËuЈE¤›%<~â‚PČ YDĄÔpĹ*n?§¨ŃDą=Ką¸ąŹPk݇VëŠób ÎʂÖRE…Ę0î|ÖmČÉĚ+Ń´QßT÷÷t}łsŽPžß'(äĚAzĂ8”6Šűw; ĸ\)‡…O$aVŽyîiŠ2¨{ƒü|ä4,b1ą§>É$(tP†g6Z.b×@űĎ=“'Ď`xd($bŰŘؘ/f9~â8Ž:zuW—5ł“zB–ÁĄtKůžäĆíxŢť_€wüéƒřČgpóŢýĎWă˝ß3Ś•–;öDm…,‹‹‹ŽxElâž÷䊳ŘńäŘ7TÁxš5­|ŹzştMjűŤÂÇ)űŠ•[ý1ÉLjbâRdaSD,]^ Ć.,,aďôśPŢÁ™qüŰ?=Ý%çŻĎ;_ľ›_üëY#ťZ8˝ĐŔá=ń‰^˜_ƒÁ`0śXČÂč_ř7F,b ć‘4E\)υE,&qşÂÔu÷ł¸{yŁäź,s^‡šËőĚßw/Ć'ưmrť;ľ˛x¨&(Š_†­­­ŕâĹ9,8v+g–đä_އƹF›—" ,ba0.-÷J|ĺŽcîąˆĎ;ăŠYîÝŚĺ9}~˙ë#_vĆĐęÎ8‹f­5֕„ ĽˆAMç!5œńPĚÖ"^6#çŕŒçŽż°§‚˜‰Ľě~ŽŒNŕM˙ćŐČćý;šV÷÷t}łsŽPžß'(äĚAzĂ8”6Šűw; ĸ\)‡…O$aVŽž˝3Erƒz°7ČĎGNĂ"{Já“L’}ĐĚť+—qpxűÎ<Ž'żW]˛xb–Ś3–Í^ź€ŃŃQLmۆn`( ^ ŠZŇâś+&đ…ßşďúżOâ7˙ę<ó˛ë15žWąDnpfq?î Yźíń'Žcňńq…Sb6–śfŐG!PáĆË Ľh{mUřX#ĺ5iĺ–ÓuŻó1˘Ř„¸Y` ƒą5ĺ3ĐůĹ‹X‚y$EWĘsa‹E\’zk!‹łż2Ô@žňÄL'bÖő k¸ď?‹bĽ„műv``|Đ–Ôk¨ž]FcІbą„]ĂŰqýŽ#݌ íu<^Ĺł÷܈{fÁŇpćĄQ.˘23‚ĘĐű°ŽśTĹźóâoe~—}ç5˜~FëWz"ćŮ ącg~ż*Ż ľ^ 6IՔaá÷+7őiłˆ‰ű,b1‹_]†Žň@ôť‘t6ş4ÉlȘĂÍ#ؗɰőaKr{Úq‡ Ż=´BŽăđ~UŢIËüźůwâ—ţÓßá‘'·D,Ţ -żöĹ{ůŐ’‹T/:Ň~ô?ü9–×ܨęg,,5QrÎĄŃ,ĄX*š"–bĄę YÜÍ˝pƒB–‚{ÎBĚBޘĽľĄ4€ßúĺ‡éSČÁď(/]PôMďAlRO×7;çĺů}‚2ŕ@Τˇ1ŒCi“şˇÓ‘@ŒË•rXřDfĺęŰ{ÓaPöůůČiXÄbbO)|’IÔpĹ(űčŹ,1ZÚ`ż~Ţ9XĆĄĺœ|řĚÍěđ,A!‹XbČł?ń††G044ˆźŻ u0#K?óĘCxő3×đÉűçđŞŰ6îäĹGyôaç/bçż´´„ŐŐU_IJ´¸„Ó>‚[ćNcďśa GgcéŇ5ŠíŻ k¤ě+Vn9ôÇ$#ŠMˆK‘ą0—źű°ŸšCą\ÁíC0ŐEny8ß?O9Ďž<>ƒÁ`l=°…ѧ`K0¤ą(âJy.,bąˆKVoB–ÖKŠeT[ËéłżŁX\\v”-odT‡k˙űk*T0Dƒhw¨aՏQźˆÚ><ýc3Ř;şłý믍s)´÷ ‘—Všë|ĐyąvŰÎkpvuO-ÁĹę"ÇVŃpĘőÜF0ˆň@'ţţa όběPëŕ˛óPt`păăcČâ—qŤŐ5”°ń#|áeBçȏ.?dŢ}YÄݗűąˆ%”ŻŠƒ<ýn$.M22ćpóöĺF2l}XĒܞvdÄaÂŰ͙X‚Şŕ?ţÂËđÎßůžzĎSąe†žv˙qüČŰ˙~ęß<ĎşőrŰŘ˙ŃĎ=ˆ_ůŻ˙ˆăgć|ž&Ѝ‡!D)%q‹•ęNş‚bł !`)¸łą.`—˛ŘšĽ-f)”ĘřĹ7ýží[nBžŽ{^:š)ŻwuO×7˙˙ěýź-YY&Œ?ľ÷>9ܜcßÔ};ŃÝtÓ l@E1!Œ˘#˜ćSfţŁŽY盿fFQ% ‚ HNMčDçpsž÷ÜtrÚ{ż˙Š{WXŤVŘUçœ{ú}úˇűÖZë}Ÿ÷]ŤjU]őěUs$ęZs‚ ŕ@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^Üüý˝čĐsƒň|Ä4,bŃą' 5IQöNËŘiÍ-§%xńVŮ5ЍSgá™gˇbxĹjľ_ŔQ­V[Ÿžž>_Čâ};|řöěŮ‹ŽŽr_%ëŌP¤ĹĂŽ ˝ţ'‚×݃‡b~nŽőJ!ďă X"K´ýĚ3G°íčÓŘŮ[ĂĘŽjňš"%ŻłéŐX„?Ô'Ăg“¤˜ŻcX“FnĽ÷r-ŠEČKRą0Ďmx×§gNMclš°eu7z*¨U”¸řő˘Ŕű›¤îŢ[Ÿœ%œ¸8‡ł—ŚýžG­tłÜƀÁ`0– XČÂXž Á6ĺľłˆEŢe_XĢ΍uťO4n)˙fłńą1ŹXšEbff—/]NÔţŕwŃ5ExÉöú×&ćŚ0SŸó‡˛ťŇ…ÁŽ>_xĺçxË/ZÇNƇü^ÖšŸzłŽńy7ncÎ“ŽŞˇÖ.7ţ}çÁĄż{ ×üÂmč^Üź|iÔ˝ ؅žžbľ7::ÖJš}{6JYň:!éáŔ"(ˇYĢ—ż<†| JüöMÂMi°L"ŇćđëćqSŚ>,bQďO3ŇâĐá],K„üáoźďűСńţ?€F#š2ËÓÇFđóđŹZُ͇qćÂ8ΏNalbZČ×@TqđUj¨5gÝjó ÷oŞzŻއŚÖ™B‘Š'dń-ƒř˙~űçđâ;nŔBB>żÓeů|ˇ››s$ęZs‚ ŕ@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^\ĘĺXthŒƒšAy>bąčؓ…š¤{ńźHţÝéýcs_śOÍáüŃ'qlýěÜš9!bń>Ţ*%Ţ÷9÷úC‡b÷ž}¨UŤ( ^ÜZ­ őú|!ŻĘĂáÇ059á÷Ѱx˙zýŒÄ+‘˜ĺôŠł˜ćIlšşŒ]kĐS VcqŇ_HuaąďsçŤÄÇ–Ǥ‘[IÇ}žĹ"ä%ŠÂRą,…Ë*ƒń\ÇřLÇ/zݜoŔ‡=‹ĹŔŁ'úaƒÉó>2 c逅,Œĺ Jý+Üf‹źĘž°ˆĹ ŻL| -‚×xbO(Ҙ­cllýýţĚE Qoŕüȅ–úÜť1vös1}t ÷nš=Ő ÎŞŢaa_Ň+ąDő”hts'öř­ć>¨[Ő3–BŃAč{ŰşkńĺSŕŕűÁžŸ˝Őîšß‡‘s°qÓ÷Fd17:ççć1îŽ9š‰49%ęĂü2+´Äű¨ËŰfKz[ěÇ"–D=iŒS‰ :a™D6¤Íá×ĚăŚ*L}XĢޟf¤ĹĄĂŤ#bIŔ{ĽG­sńW­ZÁ›~ü|ď=×ŕ=řţĺž§QŸ Ä,Ńę,§/ŒářČeżŹB°îJšž˜´î>đ#żŚBs¨6§Ýż(™żŰ/ďĄŕ˝ôü‡Ÿ5ÖŻĆB ńŞ ÔĹ\7ĺóÝnnvΑ¨kÍ *€%sPžÍ˘ÍﰜJD;ސĂŔ'UЋKĆ q07(ĎGLĂ"{˛đQ“čŰË´Ţi˝ˇ#'œ7NÂ'Z•Ľß˝&^3܃s#§đĐ3ĎbxĹ@FÄâ]+źOôă_ĚrđY\uŐîž‹Đ×׋™ÇĎŁ ř+Ě9ě~Ÿőű}ęőş/^™ššjýëýâŮ'ŕşÓ‡ąo°+ş‚œâ"ӕU̒UĚW‰1,I#ˇćŁĘG‹bň’TE, ƕ‹Ó箆ă^;˝•ťýkčÜv÷ZqŁżí}ćÝkŒ'ŇœŠŽaşoÜżćDuŔ`0 ƕ ˛0–/(őŻp›E,ňv(űÂ"ƒźDă–ňŻUş0ߜCýÂ4h;02r7Ž÷ż”toÉfŤŮl?8lgžqˇo¸+{†’Š›”™ž şy‰Ü× ľä-1ľGú•=ŽDá?“s˙ńVešuĂőřęŠqâŸÁöŢď~ysüžœ9őÖ0>„‘ üý272~÷Îa­R sŞ$şä´ú!~PGŠ›šPnłˆ%˝-öcK˘ž4ĆŠDF°L"ŇćđëćqSŚ>,bQďO3ŇâĐá-b%*xŇlßźđk?ˆˇţ܋ńšűžÁCOŔwŸ9…‹S¸46…Ë“Ól>8ŹĄŮş÷  îƒ@Ô1Đ׍kWbŰŚľxÉí×á{_x6Ž[‰…†|~§Ë­+iAsłsŽD]kNP(™ƒňm4óÚXĎﰜJD;ސĂŔ'UЋKĆ q07(ĎGLĂ"{˛đQ“cOÂBžÄbCOvtcęä“xb`ˇöeD,Ţg`` !f9pŕ\uŐôöťúfo%§¤wxßQ:€‰‰‰„ˆĹŤ÷„+‘ˆ%ú<ţŘłŘ~äIlqęŘŐ?€Ş“?Wr_+Dq; bžJ|ŒayLš•tÜçůhQ,B^’*°ˆ…Á¸2 Bƒíöź=vúz˙}™O5řwşî^WćÝOŐý „יƴ_ĎB–|”ő7ƒÁ`0Š YË”úW¸Í"y;”}a‹A^˘qËř;čvż€LĎĎaîÔp3PŸŻű+Ź_żÖoŘŔi¸sss­şúČ4}üQ\łj;ś mHţô.ú”×`;žęŠÖqŒlť÷ÂVď×jí°ń‡üÉťp+şqËÚŤń­‡GßÖ!Źżc›ß477ďŻ2łvÝk1‹wSńÜŮó¨ĎŐýňÄąQôcŔ_%&-<ˆ‹XâőHőAú˛ˆ%˝-öcK˘žÔăo/¤Q',“Ȇ´9ü:‚yÜT…Š‹XÔűӌƒ´8tx)v˝"A˙u8â×wďzĐŠ02ŽC}řWß˙<˙ł\Qo4çĹâq—Ďwc17łĹĚ+*€%sPžÍ˘ÍﰜJÄfn˛ˆĽƒF•ĄAy>bąčؓ…šÄÎ^&Ę÷Ž5ŰVe|˘‡pž(ăşá^œ97ŽÇÇÓC¸îşÝ Kôéďďo‰Yźď­ždŰśíBŃčí텦ÔĂłł38xđ ćÝďó^ŒčuB ÷Z‰XâŸgž>ŒŢCOcĂŘn\3€ŢjřJĄ§v–ű>wžJ|ŒayLš•0U>Z‹—¤ ,ba0–Á ĄĺĆC៭`¨G˝Ęh‘›+îťş)XěÂ`0‹‹Ĺť0eƒňśYÄ"o‡˛/,b1ČK4n˙pYĺjˇ˙NńĘąi̍ĎřÍŢŻŇΜ9›˘čÂ{]ΙÓg}ŽfęxöoŔŚžU¸vÍŽŒˆĹ ˙‹÷Ĺ[}E&bńo>"v#Ňߎ´xœĐ?ÝíĐ9ś¤Ű“"ďűÂだ¸fĺNœüäŒ={ĄÝ™Yœ=sÎľ˜ÂŰÓçÚcëĆ}đ˘żŮ[íÍćLy‡1‹X Üf‹^ţňň1X‹¤S&‘ isřuó¸Š Są¨÷§iqčđj­Ä’şŮ¤âđ@1Ě0==)™ßérxśuœ‚ćfç‰şÖœ 8P2ĺŰ,ÚüËŠD´ă 9 |R˝¸dĚą Đsƒň|Ä4,bŃą' 5I1ö$,ˆć$áwLďCˇ­ęÇúąôyĎ>sÔýţ6“tLNNúď5žÄűT]żŁGăÔ铅?ěócôő˘H\ştO>ů$ ž€Ĺű7ąD}Œú|řĐ1\|ö vž>„ýC=Xף~•’t5JŰ)@Šů*ń1†ĺ1iäVŇqŸçŁEąyIŞŔ"cécAD‡xt¤źWĘđŘمÉ`0ŒĽ^‘…ą¤÷nNőÖz°Ş6ˆ‘GOaӋvůMóóuœ=3‚> ŁŤ+˙Ôí XĆÇÇ111•¨Ż¸A~ŕô̸7ˇ_‹Šă$rI÷Ĺń´Ž‚ńňo˘9˛1ď—čBŃ/÷ÚCč´nÂ5c“‘b˘ęŤW^…ąůIúŕŘ˙‹ˇĄgUol|Îa`°CƒƒčęîRŽĎŘ؄31Žéc¨^ ÔVÖüYT" '•ŤţôeKz[ěÇ"–D=ŠÇ)Ţž 2‰lH›ĂŻ#˜ÇMU˜ú°ˆE˝?Í8H‹C‡×öuBIÝŚƒtv—Ç.ŁŻŻ }Œ\I”ýqvŇç=ů|ˇ››s$ęZs‚ ŕ@É”oŁ™‡Ô†í*ŽT"Úq…>Š‚^\2ćXPhŒƒšAy>bąčؓ…š¤{‚_‘ˇŤŁUŃňœ7ôváƕ˝˜?sOuőâ`WťwoożŚŐ[Ľ3üD+łxmŢ*i—.^ÄôäślÝ^ŘŤ†Š|ľ'\9~â8._şä~GďňWa‰>ޏ&źW;Ä;Ţż'ŽŸĆą§ᆣa[Oű{[ßdŤą8˛'ű>wžJ|ŒayLš•tÜçůhQ,B^’*°ˆ…Á`ÄQ¤^ćËG‚űą7Ź›/}eoőO8óĺŁ^Ló1Š ú;€]a0ŒĽ ˛0–7(˝Í"y;”}a‹^^ţ ˝¸(Cę欄ú°~p|ó1ŹÜż}ŤBň…)ŢÇjôőö˘ÖUsođUÝ?śÉ˝‰ÖÄü\Ý˙Ešhuďňł˙r3'Ćqď֛Ń]éjĺšîKpŁL0ĆŢ *–ÇqňćE´uűAb@Œy\Đj/[í­ôróÚý˜<ýţí#¸úß܂jO­=>ă“ţ§ŰŸŢp|ź_óy"fłáĎŒ;>ó˘ńqý˙ăÓŘŐˇ C݃ɜ“É're‹N ąčĺ/!őž( ¤S&‘ isřuó¸Š Są¨÷§iqčđڊXň8źk QgϞǺ5ëPŤń/˝tŕý˝qâ䊰T‘Œ{ň(pRćs3[QĚź˘8P2ĺŰ,ÚüËŠDŠ˜›Z>Š‚^\꘣ThŒƒšAy>bąčؓ…š¤`ű„ř O\Ěâo íŁqxu× őá‚ű]ŒN<ÇŤ5ďîĆśm"ďă˝ćĎűôőőůBď3??žĆʕ+ąiÓ÷ű] ×Ętž8őĺ˗püřą€Óýî Yjľš/`‰D,q1ËŠSgńěĎâÚÏ`Ms/X;쿂ɃLÄ"‚ÓţŹĎs"Ĺ|•řĂň˜4r[Đă^XÔň)Ü^âŁÜŻKîÁ`0ňĐú$°ŕŻ!ŇEĂ˝Oů…Ă}ţg9‚_%Ä`0K ,da,_Pz›E,ňv(űÂ"ƒźDă–ńĎćýŇju÷06őŹĆŠO>‰?vŞÝÉSľ'Ę7|•ÎčĂgpćžĂ¸}ÓuXŃ3Ř^%ŸœL_œpŐJß,Ł–Ľň8AtĂÎI<ň ÄD"͸gĹ÷čŞtáůëŻĹWO=„#ť^ˇ?s#Ňň˜žjčÄçŽŔšlظֽ™Xmĺ+âh˛Â äŠXĒŢűąˆ%QOęq’Ĺ( ¤S&‘ isřuó¸Š Są¨÷§iqčđ–!bńŠ•Šƒf8wn7]ÄşľëůƕőF'NŔČ9oĺˇ~8•äuX5ßíćfç‰şÖœ 8P2ĺŰ,ÚüËŠDŠ˜›Z>Š‚^\꘣ThŒƒšAy>bąčؓ…š¤{Ú×Ĺř6‘sükc\ĚrÇŞ!LŸEóřcxŹRó*ťvmˈXź÷JOâ Z<áŠg;66ćŻ:şÖ˝NŻYłĆšŘŔťfu˛şËĺKqćěY_Đé‰W˘'bńňž˜˜h Yâb–'NăŮ'âšĂbŐÜîY;„žJVĒÉ7Ő*ąä‚óUâc ËcŇČ­¤ă>ĎG‹bň’Tኹ,čŕÁ¸ňąţŠQT=§{˝ŠÔj¨TÝO­ˆ>Ý C×Ü,úfç0?3‹ůúźÝŹĎ7Ü;nŠŕ]ˇú;s‚ţŢĎ`0WXČÂXž ô6‹XäíPö…E,y‰Ć-ăßÎŤő 6Š˜Ü/ î’ë×íÂŽ<ˆ“Ÿz[_qűeĹţ—g“Oŕđ'Ç kŽÂśÁ ™\“Ť˛D,1[żŢŕ8Ś6ŤżíýŰ<äĎZ|c§˝ÝŽŽáŽ!_ĚňÍGż‹Ł˝5lĺ^ë™Fžu'żrwlź }ľŢÄńĺcy‹…b[€E,Yą‹Xő¤'YŒ˛@:eِ6‡_G0›Ş0őa‹zšq‡ŻęxđŽ!ÍĚ(!ń´-Ăáˇ5QŤőřŒ'9‹Žż sósîMÂj°6YĽę ]ářšăĺéĺŃ˨ť7HŸ|ň˘;ÎýčŞý_ ÖmżđßÖMÂĚÜtd~'ęZs‚ ŕ@É”ołhó;,§ю+ä0đIôâRÇĽBcĚ ĘóÓ°ˆEǞ,|Ô$ĹŘÇּ͜Č^Ób–ôФ"ۚűuÍo|îÜŽ=öžp۞q˛íݡ#!dńÄ őzÝ˙xbĽM÷Ą÷ń̍Œœő?kÖŹő?^}Ůđňň^stöÜY7‡9_¸â‰l"‹'ś™™™i}âBďsěčI~úö{Ť§Ćp÷Ú÷;­řű}reÁß ’})ýk…óUâc ËcŇČ­¤ă>ĎG‹bň’TE, Ć҂îŠ**ťÍ^†Óă~çęé†ă^wPŤzżČÝk”ű…ä^#1;š]¤Œ řďłÓn¨ţn,(ڊyŤƒÁ`0Ž@°…ąź<ňmƒE,R~Ŕ"“źDă–ňo˝W\Á?ŘՏŰ7ďÇמzGŚÂöW߈ڀٷŻ7çď;Ž“Ÿ{†7c˙ęŤ2ąD"–ĚĂ&jó™Çâ.śoÇ5íţĂČřk™<ë(ča¤űŮС7Żš÷űQÔÝo3W˝úTűĚ.iÔhâägŕä׏ăÚŐ{ąŢĺlÝŹ%ůĄ…pýéË"–ôśŘE,‰zR“N_ʉĘ$˛Ą|ŸtA'ƒĚ}XĢޟf¤ĹĄĂ[äJ,‘¨2~\vuőşĽfđäŁpňÄeŹ^˝M÷!ÚÔÔ$&§&0çÝŒŕ8’Ű€b—ŤL};QŸýăäƒ,GҒÝHU 2ÔˇÚcżNóĐőôDťüëńéÓcxüńqlÜXőÇĐC|\“[í óšŮ9G˘Ž5'¨”ĚAů6‹6żĂr*‘N榑OŞ —:ć(ă`nPž˜†E,:ödáŁ&)ƞ„͇_űÚ×Ű4z܇n/]ˇŸ;7Š=„§ęóx˘^ÇŐW_ĺ X˘O$dń„+Ţ'ZĹ­Dő.œÇČČ9ô÷`ŐŞŐîřľC‰.š'(o˜K/ŕňč¨/lőřŁ<<K$ŽńV]™u˙^H YźúCăô‘¸öČcžĹÝk‡°Žťýäp%Ə"I1_%>ư<&ÜJ:îó|´(!/IXÄÂ`\9P WŇŻrźëFo/fqzé:‚:N™ű°ˆE˝?Í8H‹C‡ˇŹ× %g•ƒŢžč[‡˙űŽŻŕ×ţ+°cűZ0ä8qü"ŢűŢű10°Ĺ}¸¸ŃšÉəďvsłsŽD]kNP(™ƒňmm~‡ĺT"EĚM-ŸTA/.ŔQ"4ĆÁÜ <1 ‹XtěÉÂGMRŒ= Ůď=q´˛I âžńr˝U/Y7Œ/ŽŒa˙ąGđLłŽ‡&gpő5WaŊ¤%.féqŢyŻď‰„$‘ˇBĘŠS'pň$ĄÇ}Č7Ř?„ţÁôőöůöşđ¸<ńÉääDđz ŠI?˙@ĚŮÝZĆ+G‚šÉÉI_ŔąDŸąąq<őÔa̜=‡Ž>ŠĄši_IJĄGOĒyĽäś‘bžJ|ŒayLš•tÜçůhQ,B^’*°ˆĽŁ';´uęĎ|̗†L°"ŞOóŒĺUîőŹâ~œŢpUďúV m˝ŐXćŞÁk×=‹{}DŁÔťÍ'ĎVpáBóMĎž1Čô\Ϝ% ÷VĐ]ňÓĹ9ˇ+c3Mˇ;ŝDNž­ú÷Îç)ť˙âo)dáůÁ|‹ÉÇ`\É`! cyÂ˙ۆE,ňv(űÂ"ƒźDă–ńo畹éGYዯÎoś­GWž{ö.ţ.|ő†Žß€Á]ŤŃ˝z]ý5…šo`nlÓÇĆ0öčY̞DOľ Ď[ˇťVliĹő%ř˛ƒĚx9Çq|őd7[ŰţCţ؊*@ÖśGÄWnIůĹ-Ű7šýěÁ“—ŕÔGâĚżĹęç­ĂŕžUč^ՋŽ÷F!5ј'Ě]˜ÁÄąQœŕ ęçÝ/[˝¸vílÜr'E,Ů\ŘkDíémऎĹ~,bIԓzœtúR&HT&‘ ĺű¤ëę8ydîĂ"őţ4ă -ŢÂD,NňúăÄÇ2ü%\Ĺ˝nܰ‡Ž\Ć˙Á?ŕž{ŻÁM7oĂĘU]`˜™™Çąă—qß}ńŮĎ=ŽîŽAl޲Ç˙"ćéýzŠlʘ߉şÖœ 8P2ĺŰ,ÚüËŠDŠ˜ßZ>Š‚^\*€caA”ç#Śa‹Ž=Yř¨IŠą'a!šş—Œ*Ýć$ݞb1‹űéŻVđýëWŕŤĆQ9ö8NLăŃŮYlŰąۡoj‰WźĎÜܜ˙Ż'‰Ä,ŢÇŰöVE‰Żäâ}.^ÂĹKü×y1ťÜďҞđ$XQĽćż’śáśyúnBşËíĆđVcóÚ˘OˇËď‰VâŻŢËÇşx˙zŸ¸%úwäÜ<őÔ \:‡ëO<Ąćź˙ZĽ5ą§}&"–đ}bžJ|ŒayLš•tÜçůhQ,B^’*°ˆ…ÁX­ŇŐÍt;î˝a÷ŇÝĺ‹Yü× u…ßU˝W UBßzNÝľ›Ťę LUƒŸFŻË­€ ›Žž°äâäâŹ’Ň *|Bb0Œ+,da,S°ˆEŢe_XÄb—hÜ2ţĚřƒm˙áKşşgîÚú<<{ń8NMœGýáK¸ě~3ĘôĹ[dóŔZě[ľ +ş‡¤ąŠDܢČ+q3¤ŚáżĄ“ZQ%aKńZŇ+ˇDŔR~!ßúţ5îÂÁŃc87uă÷]Ŕ˜űÉä>esoAbíŔě[yúj˝a{VĂD_Ô‰äp°ˆ%˝-öcK˘žÔădş/ЉĘ$˛Ą|ŸtA'ƒĚ}XĢޟf¤ĹĄĂk#bI?NS­ÄŇ*…OÖ*N;śÝ‚§Ç׿z_˙ʑ Çěܤ{ĂnŻ~í5Ř˝WoՖŃŃIüŐ{F}Îqş f‘ŮŹň[H÷8ŁŚű@mĘ˝×ŮÄĎţÜ-yö<>ü‘§PŤvĄŤť?I^GűűÖ`ĂĆëÜb5¸ţĺ=?ńćŚŕy\HžŘĚďD]k̨”ĚAů6šyHmŹçwXN%˘WČaŕ“*čĹĽ8ÔąAy>bąčؓ…š¤{4˙Ž”ÄȳĜťÜ‡jßłvßş8‰ęČ OâŮú<ĆF'°k÷ÖÖj,‘`ÄŽDbOŔâ‰Yź˝ˇJ‹'\ń„,Ţżń÷}şîňg[ Łdx˙öxżrw˙ Y˘'`‰„4qqM$b‰ţő,““8rč$Ν=-gbŰČ1ʍ:¸gý0bŤ†šŠXň~ôíö éY&|ŒayLš•tÜçůhQ,B^’*°ˆ%‹[ěŹGż|ˇőg>ć“AgEß`ŸƒšŮ:.÷Ďa RƒSŤ–HĚâ‚fÝë‹'ŢœŻťOúj JľőÚĄËsŘş‘°b°ŠÁ&şç1ç6†Ü1ŘşąË÷Ź_ßČ\c˝żâűوYx~0ßbň1Ë,da,_D_”)[—ŘfKňŚśŇŸE,˘vŃqć#ď?7K˝;'š*KxcÍű×ű%™SĂţ5WaĎŞm85~Ś/cr~óŢr‘üp}ľnŹîĆĆţľîćýŇž´_!”cGq~ňăX<„هüAK‚#žKĘO&hqë{Ť=¸nő^ě^ągŚÎăâĚeL7ć0ߜcV0Pëʞ!lę߀ŢZo2?’ß_iŮ8rÁ‚“xÇ"–ôśŘE,‰zR“éž(™ó˛ł“D>é:ʡQrš‹X$6¤h—Ö‘‡ďÂźN(ůúş¨ľć^Gwl}.žĹčřY÷áÔ´{O°ś“˙@Źć>Ú~Őjčâ…QĚĎ9ţ%$.bIŻ\–Ě5šGtNű´ř(âŻřg97ö… —ľ…,Wí\ĺŻRÝpűÝEmćŠ{C´Ť§ƒƒë14´ĄľK<şlnŠű§WŽ8Œ| šTJć |Í<¤6Öó;,§ю+ä0đIôâR ƒhŽŽĄ y>’łQ^ŁqŒNěÉÂGŸ¨3{˛đQ“cO‚äaÔ‰×ľíbĘÚWÝÂ × bM÷,˝ŒžCâŕĚ><4:M›×bǎÍ-ш÷ńÄ+žh$.bń>Ńk˘W˙DŻŠ„,ńO"OÇI|<áŠ÷oôÚ"/fúGq!K\Ěrúô9>tľÉ1\üi Oa[7nYяžŠXĒgą¤}JłřhQ,B^’*°ˆ…Á¸2 ZiEVŸŽëďëĹÜěćqäŮčÍ *€%sPžfRëů–S‰hÇrř¤ zqŠŽürŃ Ž ĘóÓ°ˆEǞ,|Ô$Ĺؓ°˙wdëR*ˆĄłPňRˇ÷ęŻęÁšž*îż4…ŢcâüĐZžÝó#—ąmŰ&lظŚ%`‰>yB–č5@ŃżqĄJ˘ëD-ąK´‚Kü5E‘ˆE$d‰Vi9?r ǎÂÔŘśœ?­çŁĎíéu+°g GąúJ0z~FŠů*ń1†ĺ1iäVŇqŸçŁEąyIŞŔ"㚁žžLLNa|c—Obułä^ŤÜ‹”ˇ\¨oă˝*ĎŻóŢ×NíĎHw“;ťýďwĂÃţ,îŮv=˝ ĎUx×Ő;ˇ\vˇ6ř"![ \ caÁBƲ‹X`Ôąä%ˇŒ¸˘ %oŕĽýĎÖb7óâÇVź˝őDz_Oš}qŇ?Űô% ’XE‹Xüí(˙Yűnf|˜ŇŤł$9’_â.Äť˛’ĺˆŻ“ąw2yˆúŇ^)†E,émą‹Xő¤§NöEˆ;‰:Á”•ý:ʡQrš‹X$6¤h—Ö‘‡ďBŹÄ/EçüVŤwÍkRxÎo_ť)lŤ×çü×őlÜ\… ŽtŹő Rëć‘9żĹVA1;Ž(łjŐn4ju=6;^mlŢRÁé3ŢĂźy?÷d}KŞĘ¨lѨkÍ *€%sPžfRëů–S‰hÇrř¤ zqŠŽüň‚Ă&‚|Ä4,bŃą' 5I1ö$,h>É‰!łPňŠG1{Ÿ2ŹXŰ]Ă˝ëńÝŃitM^ÄĘC—qbí6ž™ń…"›6ŻĂćÍëÝrł K\ȉXâb–¸%úq“+ľÄ…,Ţżžx%.f‰ YźĎ…ó—ýź&Ƨ°vlל9ŒúŹŰ*žˇb+ťŞŠąoÇÇJgœ…¤˜Ż",ŕ1iäVŇqŸçŁEąyIŞŔ"ců@gU–ŐŤV`ăĆuřĆŮCřŢš~ôÎťóf* Fx§Ô˝&yrŻUŢÍŚŠŽĎŽĹó7íÂ*׿Z­  7lŤâö‘c¸ň:<ńÂľÇqӎŞ?ÝÝ]‰6§0 ĆŇ YË,bQ_XÄb—hÜ2ţĚřĹŰŢ*)ÍźvO˜WX¤ˇsúâÄęÓÇqűŐCPÇói‡żˆ ěB‚#ýÄ^9”×ćkg™M)OH"xČOńüĹöԙŖlłˆE§”~ǡInoŰo1‹X2<”oŁä sąHlHŃ.­#-ŢąnRŞ/űŤťÄjęÍyľ!Ëôô,.]t°nM]ţ+핎Vbq2•U/ćÜ ÎŸŻ`rr=ĐÁś-5<đŔœż MüźÔŽ+Ď3>Ž2ĄKó;QךTJć |Í<¤6Öó;,§ю+ä0đIôâęĎo9‡¤,r^ŘÄ-ČGLĂ"{˛đQ“cO‚žˆ%ý)Œ˜…’âĐ( |ź:ďbąčؓ…š¤{ôE,qźÂ×ç*Ä,­Š°rCO—żBˁÉY™šĂЅcŘzá8N­ŢŒłS›pćôôôtcÝúŐX˝z…{Ýęk˝J(ýjĄHÄ]—dB–čßôŤ…ŚŚfpůҘ/`™˜˜F­QÇÚËgąĺ ×çĐSq°y × ő˘7őę"ą˜ű”f/đѢX„ź$U` ƒqĺB´ňJźM…Z­Š—Ü{;žřĽoăKObÓĚJl›YƒŐô4ޘmLáj’běIX0ąÄ=óB‹ÚebŠ•Ńţú‡Ş{­šz°Wő÷ŕčԜ˙ž| ť.žÄĺî>œ^ł“qâxˇ/TŔʕCěG__/tIżR(ý *ýz!o啩ŠYLMNáňčĆÜĎü|•f+&/aßĺłX?~}žHԍšąż{z0T“żFHVç¤kÂ~k?K#Ĺ|•řĂň˜4r+é¸ĎóѢX„ź$U` ƒąźĄóŠĄţţ^źřŢŕ‡žpŻO“xgöŃKr7ť×ÇľŽwŻ…˝.G#iăňÝxĂ^tuŐ0pô$öă(áҎ\ žĎŽ[ÝDčˆĎń×áőkšóŔaçÎÝţ 5:"–bąčؓ…š¤{ěE,ş>™× !+f ę’vŠK0ş+ööઁn›šĂńé9ô5fąîÂ1ě9†Ë}ƒ¸Ô?ŒËcŤpüâ 4cŻňâőôvűŻU¨ů+ľ´WfŠ×h„+°ĚÍÍczjÖßr" LcÝäeŹžĹę™1ô¸×ROźŇUŤbKovôwŁżšýőşŁ(Gă ł<ÄďPžE xLš•tÜçůhQ,B^’*°ˆ…ÁxîB$fšëE7ă̙ó8qňFG'ükXww—/ćÜźi6n\‹c§ŞR>ďsÝľťąyó:=r .ŽbvnNşbŒ Š.Py׊˘ĎšŞČL˝~öötű+ˇíÜš+W é‹E ƒą¤ŔBĆňF늋X7ľ•ţ,bľw*bÉŽĘâdl˝Íhu”Ě .ö%ĂŤ—Ş5œLŢ@^Řüv›âőN˜Yô ‹”‡—÷‹rŠŠť/ȉňc'óŕ-o›E,Yą‹Xő¤§˘÷EHĎBś§ę(ßFÉAć>,b‘ؐ˘]ZGZ:ź‹ž‹wm&ÇݛU™ßoE7ݏ÷kď çĎŕÜš9_’7ŃüX\‘łŔşľîĂłŽ^qá9)Q—śÉ”cö™1ČöżVëuÖÍâěš&üh`E9ɇůWŤ]nŸ7†œE‰X ĹĄĺќĐÜ˙š(™ƒňm4óÚXĎﰜJD;ސĂŔ'UЋKpHʒýP:lä#Śa‹Ž=Yř¨IŠą'aĄ‹ußóÄ,ńů&\Á%ĺ[s+v ôřŸńůNÎĚăÔô<úç&ąŮý4.BĂeëîÄ{ݝp˙îęĂLw/f+UÔ+54ÝŠŹdViÖQm¸ŸfÝő9ʜĆ@}ƒsłX1;‰š{­Ż†"T׍{ş°ľŻëťk~‚|3ý‡hÜXĒö)Í^ŕŁEąyIްlE, ~e0yŻŠÚuüźňŚMëüeüuz˛˜ŤVcŐMĂÂś´O$ŒŮžš"P_|źŇ|âUVň9ňętÚ ƒQXČÂXžˆţćbKňŚśŇŸE,˘ö˘Vb ^ŻC‰XśqAK"?ś§_18ŽËą$mÚwýÄą× …Ȃ_űf"¸ě¨óh›E,YŐ~Ë˙$‹XĐaN‰cťX=(&ůP6¨ą‹X$6¤h—Ö‘‡ďB‰XҏĹ(ĺ Š!ź¸×ţŐ~Đo|őff'4Ć1ř˙šŐťŃ׿ZОě„ůń­ŒŸCă͎SE_ßjôîÁż|ţh.G=˝CŘ´yUâ†_çsł˜W%ęZsÂâܔá@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^\*€CR–ě‡Ňa° 1 ‹XtěÉÂGMRŒ= ňXâl¤đ‰Y"9GâÁœ€&˝:Kdŕ˝ĘçšÁŞ˙ęĄËóu\œk¸Ÿ:.Í7Đ=?ľîS—>&đÂwUąşť†UÝîż]5_H#ë_:†#ĺ͊Xtž‰ąˆ…ôC‹bň’TE, Ćs2áIëGÂ6„mrÎ8T?jůą1Ś\ÂD<â¨ŽŐ [Ş0 ĆŇ YËŃßQ,bIŢÔVúłˆEÔ^ôë„,b‘ؐ˘]ZGZ:ź‹ţ:Ą°źnäÜpíŘzs‚—lVU!Ę­(9ҕŽ“ĺäĺ˝ŢhŤ›żˆƒZTńsąźo˘š™/b)f~'ęZsÂ`˙K9P2ĺŰhć!ľąžßa9•ˆv\!‡OŞ — ŕ”%űAVWlČ ň‘Ÿý°0y‘EóČKh˛Dňʘľ š_,ű!şfŚžŐŻĺÓŞo}H2d-Ôćń‹‚€ŢˇľáZŐýxĽšqt9Y§°MćĂ"ĄOiö-ŠEČKRą0ËEˆY<č­Ź˘žśĹ9mňYHčŠIL, ƒÁXú`! cy‚E,ɛÚJąˆÚËą´nvQL´QF_âÔŞźhńE,ńí`՚vşű‚œ(/‹X Üf‹^ţňň1({_”űĺœeżŽĚ|HÄԇE,R´KëH‹C‡w1E,­_{ˎŠÔÝ˝¸MâÁœ` ŒVQ‰:ádĎyÚeÍy•›WŞRd“= ’™:ĽˆĹQrŘÍ őţWs dʡŃĚCjc=żĂr*í¸BŸTA/.Ŕ!)KöƒŹnQa“Ć> Ŕ"{˛đQ“cOÂBš"–xR˜:Ą‘ČN´:KP/öI?‹"“`^~űźg^NN G6îą”e/đѢX„ź$U` ƒÁˆ č ZD×MJŢĘ'6\ń‹Bî5;§‘Wca0ŒĽ ˛0–7Hążš“j'ĽżŁćOÄbK~ޒźDűúyŠc-Žˆ%ޗÖę,(°/ńŠźI,qŘňE,ń‡üŢ ŔfŹEĚQžˆ%ČŔɉ-Ůf‹2N)ýŽo“ÜŢśßbądlČ̇AL}XÄ"ą!Eť´Ž´8tx—ÂJ,ŢuŽ™g/š Hcóc3Ú sŸxšĂyĽĎ!Ď3=7ý›ŤBŽx™E,ÔGŽőüËŠD´ă 9 |R˝¸T‡¤,ٲşE…MBű(‹XtěÉÂGMRŒ= #bIGSÍ7Ů/ąŤłD>sˇ| RÝu1Š"q¸ÍÉ÷cK9ö-ŠEČKRą0ĎčŽp˘#V‰‹,tWMÉťć-…W´Ą% í@Ŕ˘kĂ`0ŒrÁBĆň)śă7wRí¤ôgKźÎ¨/JŰX Ń~~^ęX‹/biߘsÂzÂB‰XüUF$íâ° +b‰ę“BJľ—#biżâˆE,émĺ~#uœRúß&š˝mżĹKSIJP7DaXĒÇÁ"–â8HŸƒÚ×zÇ|bOÖH@f~lFdî/w8Żô9äyFăE,*ʡŃĚCjc=żĂr*í¸BŸTA/.Ŕ!)KöƒŹnQa“Ć> Ŕ"{˛đQ“cOŠX∯ÎBŸźWľž˙ U*”‘]‹“4_Ŕ’ń׹#Ĺ|aI#ˇ’Žű<-ŠEČKRą0Ď=˜źŽÇTř҉ř"Uq}Y÷ :ѐđ*+ ƒą|ŔBĆň)śă7wRí¤ôgKźÎ¨/JŰX Ń~~^ęXKGÄßv¨˅ K˙8vZśňăXÜĹĹąˆl‚Ł„˘E,ńۏ–ă6ęÜŔ"RÇ)Ľßńm’ŰŰö[ĚÁ"–LĺۨĘéąÓăȞźŒă"š˙Ęá`Kq¤ĎĄqLeęâOÖ ĆQZ^f"ÇňŐH6ó;Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,Ů: ›4öQąčؓ…š¤{OÄĎ Šá#[ĹóqçÁ-“.ĺýÝ,AJŰŠ”A+)˝~°ˆEÇG‹bň’TE, ĆsŚb–6>qPÁ7Žl5!EkItĹ)EŰ1 Ł\°…ąźA‚íř͝T;É|Zێ˘=‹E,ůyKňíč祎ľ4E,éž8)Ą°Eq;Â}peŠX’_ł* щ(‡Côŕ--\‰ołˆ%˝­Üo¤ŽSJżăŰ$ˇˇíˇ˜ƒE,™:ʡQ•Óc§Ç‘=yÇEr˙•ĂÁ"–â8HŸƒDq%GŰRž‚‹vů9-bq„ů>’şÖœ0Ř˙R”ĚĄ8f4óÚXĎﰜJD;ސĂŔ'UЋKpHʒý Ăąŕ°I@c`‹Ž=Yř¨IŠą'aańE,‘iđMm›YEŕ#|íP: ´{ŹÄCP2—<8˘/š2ŰT R[ ó2‚ĺ1iäVŇqŸçŁEąyIŞŔ"ƒa#–Đy后żDWÎ6]ĆdŹYÄÂ`0K,da,_`;~s'ŐN2ŸÖśŁhOÇbK~ޒźDűúyŠc]"Q,'“‹ř8vTyIÚĹa—žˆEśKZ˜âÄěL]^<ऎ•űÔqJéw|›äöśýs,}KÜŚhˆ¸YĒÇÁ"–â8HŸ#ç˜R˝b(Ţ˝>'K*ăĆ˚"–xŒxť“ŞÚÄĘMŒÖܔçq2q՜,bąçČąąžßa9•ˆv\!‡OŞ — ŕ”%űA‡cÁa“€Ć> Ŕ"{˛đQ“cOÂÂŇąDzŽÖę%yśi аyFçîC˛x {$íIm•Ä“Fn%÷y>Z‹—¤ ,ba0LVfIűĹQ„E$ŕĐŒ%‚)ZDbĘÇ"ƒÁXZ`! cy‚Űń›;Šv’ů´śE{:‹Xňó–ä%Ú/ĐĎKëĘądۋ=ŽĹaŻ‹œĂ\8!-Ůf‹ć>d :ĚIz,IćňB€E,y,b)Žƒô94Ž)§57)7ÁxŤ‘¨E"b‘‰V2ó*ąÔ4! ň<ýqtD>yĺŹC1óĘ`˙K9P2‡ę˜ĐáČąąžßa9•ˆv\!‡OŞ — ŕ”%űA‡cÁa“€Ć> Ŕ"{˛đQ“cOÂÂŇąÄá@ƒ&4ˆ??R=K LHEk…(.€"ŸôđŤňF֞ô,>ư<&ÜJ:îó|´(!/IXÄRŽžŹ˘tęĎ|Ěg ď;ŘąSľ‚Ä(ÁżEńE(ŞżńüŠDŃ!Ť3y!ĄÄÍI{¤rc´b9>{ҡnůĂň˜4r+é¸ĎóѢX„ź$U` ƒÁČC§Ż ’ńĽq%˝BHŹ¤ÂŤ°0 ĆŇ YË$Úf‹˜ ĺôEi‹!Ú/ĐĎK‹E,˛vqXąhůąˆEs˛ˆć$=–sšL°ˆ%ƒE,Ĺq>‡Ć1%Žs2ÎćÇf´Ać>ńr‡óJŸCž§ÝÜd uđcc=żĂr*í¸BŸTA/.Ŕ!)KöƒÇBÁ& Ć> Ŕ"{˛đQ“cO•!b‰ĂąńIŻŇbŘ*¨˙Ęç\9qXÄŇĄ˝ŔG‹bň’TE,ĺcǖlýňÝ֟ů˜Ż,>ÁIŃů9Q)”ŻÓüҢ“ĽĆ—ó1ßbň1Ë,da,oÄoîP˛>}s8ťÍ"–xQ_”śą˘ýýźÔąXÄ"k‡e‹–‹X4÷!‹XĐaNŇcI1—ËBÇ4Ă SąHlHŃ.­#-Ţ+YÄŇŢíGjćÇf´Ać>ń2YřXqČó4Ÿ›NŠşÖœ0Ř˙R”ĚAů6šyHmŹçwXN%˘WČaŕ“*čĹĽ8$eÉ~°á(6q4öQąčؓ…š¤{Ž<KÁJfćé9­˙…aUÇ\ý7úś$Ž“cOf zLš•tÜçůhQ,B^’*°ˆĽCă9Š˘Whé$‡˘V-)šŻÓ< ƒą´ÁBĆňEüć%ëÓ7‡łŰ,b‰×őEi‹!Ú/ĐĎK‹E,˛vqXąhůąˆEs˛ˆć$=–”syá@†ĺôŘéqd;lÉýW‹XŠă }c*—#1NNy¤śÉ+'*MĘáĐôIčçî sA]kNě)JćP#šyHmŹçwXN%˘WČaŕ“*čĹĽ8$eÉ~°á(6q4öQąčؓ…š¤{ŽlKÜ'yőŐó‰CöĘ;é>÷Kp´‡7á“ćTŘçÎW‰1,I#ˇ’Žű<ŰcĽP{‰rż.Ä~”řĄ˝MŒR| FBtą_ ´` ƒÁ`\Y`! cy"~s‡’őé›ĂŮmąÄëŒú˘´Ĺíč祎Ĺ"Yť8,‹X´üXĢšYĂs’KĘšźp Ărzěô8˛6Ž‹äţ+‡ƒE,Ĺq>‡Ć1•Ë!GGě<›ęŘGž§ŢÜtrŰő8˛ČÎ ƒý/ĺ@ÉŞcB‡#ÇĆz~‡eĹń ĂË"–4‡ˆĽ@ŘĐkěŁ,bŃą' 5I1ö$,,KJA‹EăgUöE+)ćŤÄÇ–Ǥ‘[IÇ}žĹ"ä%Š‹X:ôa0ˆ„,nÉ‹W ăĘ YË,bsĄœž(mc1DűúyŠcąˆEÖ.Ë"-?ąhîCą Ăœ¤Ç’r./Ȱœ;=Žl‡ă"š˙Ęá`Kq¤ĎĄqLĺrhŁ#ßßÚ"Gš/ŐĐŕ­ćҔrČÇсn6ó;Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,Ův"–aCŻą°ˆEǞ,|Ô$Ĺؓ°°d :ĚIz,)ç˛8F Ărzěô8˛6Ž‹äţ+‡ƒE,Ĺq>‡Ć1•Ëa0Žr2÷‰—ÉÂNJCž§ÝÜěœ#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,Ův"–E†Ć> Ŕ"{˛đQ“cOÂÂsOĒöqÄŐIóór,|âöšóUâc ËcŇČ­¤ă>ĎG‹bň’TE,ú0ŒGž¤hĄ O ƒa˛0–7({s8ťÍ"–xQ_”śąŠv2ĚK‹E,˛vqXąhůąˆEs˛ˆć$=–”sYc!@Šrzět|XÄ"ą!Eť´Ž´8txYÄmšOźL>Vň<íćfç‰şÖœ0Ř˙R”ĚAů6šyHmŹçwXN%˘WČaŕ“*čĹĽ8$eÉ~°ăą,24öQąčؓ…š¤{XdžhDŠą(GŰbßçÎW‰1,I#ˇ’Žű<-ŠEČKRątčĂ`0 ƒÁ`ÄŔBĆňeogˇYÄŻ3ę‹Ň6#ŐN†yŠcąˆEÖ.Ë"-?ąhîCą Ăœ¤Ç’r.Ťc”R”Óc§ăĂ"‰ )ÚĽu¤ĹĄĂË"–hƒĚ}âe˛đąâçi77;çHÔľć„Áţ—r dʡŃĚCjc=żĂr*í¸BŸTA/.Ŕ!)Köƒ)9ű(‹XtěÉÂGMRŒ= ,bŃ2ídÝ ´ďsçŤÄÇ–Ǥ‘[IÇ}žĹ"ä%Š‹Xô|ýşĘ`0 ƒÁ¸bŔBƲ„ZřáýE,ń:Łž(mc1Ríd˜—:‹Xdíâ°,bŃňc‹ć>d :ĚIz,)ç˛:FY E9=v:>,b‘ؐ˘]ZGZ:ź,b‰6ČÜ'^& +yžvsłsŽD]kNě)Jć |Í<¤6Öó;,§ю+ä0đIôâR’˛d?Řq’cÁĄą°ˆEǞ,|Ô$Ĺؓ°Ŕ"-ó%š—ěüĆ"=-ŠEČKRąčů,úu•Á`0 ƒqE…,Œĺ ĘŰfKźÎ¨/JŰXŒT;楎Ĺ"Yť8,‹X´üXĢšYĂs’KĘšŹŽQHQNŽ‹X$6¤h—Ö‘‡/‹X˘ 2÷‰—ÉÂNJCž§ÝÜěœ#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,Ův¤äXphěŁ,bŃą' 5I1ö$,°ˆEË|‰ć%;żąˆEĎG‹bň’TE,z>‹~]e0 ƒÁ`\q`! cy‚ňśYÄŻ3ę‹Ň6#ŐN†yŠcąˆEÖ.Ë"-?ąhîCą Ăœ¤Ç’r.ëÇ($¨ …Mśœí°)G˘Ž4ąÇAúÇT.‡Á8Ę9ČÜ'^& +yžvsłsŽD]kNě)Jć |Í<¤6Öó;,§ю+ä0đIôâR’˛d?Řq’cÁĄą°ˆEǞ,|Ô$Ĺؓ°Ŕ"-ó%š—ěüĆ"=-ŠEČKRąčů,úu•Á`0 ƒqE‚…,Œĺ Jołˆ%^gÔĽm,Fޝ óRÇb‹Ź]–E,Z~,bŃ܇,bA‡9I%ĺ\֏Q6HPA ›l9ŰaSŽD]i,b)Žƒô94ŽŠ\ƒq”sšOźL>Vň<íćfç‰şÖœ0Ř˙R”ĚAů6šyHmŹçwXN%˘WČaŕ“*čĹĽ8$eÉ~°ă cŽŇĄą°ˆEǞ,|Ô$Ĺؓ°Ŕ"-ó%š—ěüĆ"=-ŠEČKRąčů,řu”Á`0 ƒąlŔBĆňĽˇYÄŻ3ę‹Ň6#ŐN†yŠcąˆEÖ.Ë"-?ąhîCą Ăœ¤Ç’r.ëÇ($¨ …Mśœí°)G˘Ž4ąÇAúÇT.‡Á8Ę9ČÜ'^& +yžvsłsŽD]kNě)Jć |Í<¤6Öó;,§ю+ä0đIôâR’˛d?Řq1GéĐŘGXĢcO>j’běIX`‹–ůÍKv~c‹žĹ"ä%Š‹Xô| ťF0 ƒÁ`0ž“`! cy‚ŇŰ,b‰×őEi‹‘j'ĂźÔąXÄ"k‡e‹–‹X4÷!‹XĐaNŇcI9—őc¤ˇ‹ *Ha“-g;lʑ¨+ƒE,Ĺq>‡Ć1•Ëa0Žr2÷‰—ÉÂNJCž§ÝÜěœ#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚQ:4öQąčؓ…š¤{XĢežDó’ßXĢçŁEąyIŞŔ"=ŸÂŽ ƒÁ`0Œç,XČÂXŢđż ąˆ%^gÔĽm,Fޝ óRÇb‹Ź]–E,Z~,bŃ܇,bA‡9I%ĺ\֏‘Ţ.”§.g;lʑ¨+ƒE,Ĺq>‡Ć1•Ëa0Žr2÷‰—ÉÂNJCž§ÝÜěœ#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚQ:4öQąčؓ…š¤{XĢežDó’ßXĢçŁEąyIŞŔ"=ŸÂŽ ƒÁ`0Œç4XČÂXžđż ąˆ%^gÔĽm,Fޝ óRÇb‹Ź]–E,Z~,bŃ܇,bA‡9I%ĺ\֏‘Ţ.”§.g;lʑ¨+ƒE,Ĺq>‡Ć1•Ëa0Žr2÷‰—ÉÂNJCž§ÝÜěœ#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚQ*ȤšE,:ödáŁ&)ƞ„ąh™/Ńźdç7ąčůhQ,B^’*°ˆEϧ°kƒÁ`0 ă9˛0–'ü/H,b‰×őEi‹‘j'ĂźÔąXÄ"k‡e‹–‹X4÷!‹XĐaNŇcI9—őcäٗ‚Ô؅UŠrśĂډşŇ8XÄRéshSšă(ç sŸx™,|Ź8äyÚÍÍÎ9u­9a°˙Ľ(™ƒňm4óÚXĎﰜJD;ސĂŔ'UЋKpHʒý`ÇAĆ~¨˛DˆĂąˆEǞ,|Ô$Ĺؓ°Ŕ"-ó%š—ěüĆ"=-ŠEČKRąčův`0 ƒÁ`0ŔBƲ‹XâuF}QÚĆb¤ÚÉ0/u,ąČÚĹaYĢĺÇ"Í}Č"t˜“ôXRÎeýyöeŔîĄhśĂjŸœ8Ľq°ˆĽ8Ňç Ć0Ő`zL´9ČÜ'^& +yž:ă¨g ŽD]kNě)Jć |Í<¤6Öó;,§ю+ä0đIôâR’˛d?Řq1‡_'Ş,âp,bŃą' 5I1ö$,°ˆEË|‰ć%;żąˆEĎG‹bň’TE,z>…]#:ŔѓUt‚Ný™ů˜ů˜ů–"ƒq%ƒ…,Œĺ 2Řf‹"oI^Šv2ĚK‹E,˛vqXąhůąˆEs˛ˆć$=–”sY?†Ě>^W6HYÎvXí“§4ąÇAúÔÁŚL‰6™űÄËdácĹ!ĎSg•ălÁ‘¨kÍ ƒý/ĺ@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^\*€CR–ě;2ćđëD•%BŽE,:ödáŁ&)ƞ„ąh™/Ńźdç7ąčůhQ,B^’*°ˆEϧ°kƒÁ`0 ƒ YˤŘf‹"oI^Šv2ĚK‹E,˛vqXąhůąˆEs˛ˆć$=–”sY?†Ě>^W6HYÎvXí“§4ąÇAúÔÁŚL‰6™űÄËdácĹ!ĎSg•ălÁ‘¨kÍ ƒý/ĺ@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^\*€CR–ě;2ćđëD•%Ŕ ă@œ‹XôěÉÂGMRŒ= ,bŃ2_˘yÉÎo,bŃóѢX„ź$U`‹žOa׈°cK6ˆ~ůnëĎ|ĚÇ|ĚÇ|̡ůŒĺ˛0–/HąÍ"EޒźRíd˜—:‹Xdíâ°,bŃňc‹ć>d :ĚIz,)ç˛~ ™}źŽl˛œí°Ú''Ni,b)Žƒô9¨ƒ1L5˜m2÷‰—ÉÂNJCž§Î8*Çق#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚáבڦHˆůYĢcO>j’běIX`‹–ůÍKv~c‹žĹ"ä%Š‹Xô| ťF0 ƒÁ`0°…ą9qJă`Kq¤ĎAŒaŞÁô˜hsšOźL>VňŠ‚^\*€CR–ě;2ćđëHmS>XĢcO>j’běIXXZ"Ń9C™áŒ1‹X`†œóŚĘ§4{Ĺ"ä%Š‹Xô| ťF0 ƒÁ`09`! ců‚Ű,bQä-É+ŐN€Q^ęX,b‘ľ‹Ă˛ˆEˏE,šűE,č0'鹤œËú1dö˛ö…eĘŮ“Ň'‡ˇ4ąÇAúÔÁŚ̎‰`“×éJ,ăDóĐQîKçaÂAŇvqTŽłG˘Ž5' öż”%sPžfRëů–S‰hÇrř¤ zqŠIY˛ě8Șï#ľMů`‹Ž=Yř¨IŠą'aaéˆX˘óĽć‹^÷˘Ë #r.17ß|!öŁÉ\XĢăŁEąyIŞŔ"=ŸÂŽ ƒÁ`0 †,da,O`›E,Šź%yĽÚ 0ĘK‹E,˛vqŘěĂî?<úžźŞîÉj ›şűq]˙*Üłr6vő â72ż=vo?ůX‚c˙Jü֎[Ršąˆ%łMéządc‹śYÄb’“ŽmY L9ŰaRúäđ–ĆÁ"–â8HŸƒ:ĂTƒţ1AžxĹ+Őpýő+°gď06lěÇŕ` ŐZ3ÓuŒŽÍăŘŃ xv O<>ôľ5%cstă攵8HÚŽ3ŽĘqŚü1óЌíđHÜCŠżŁXĂćwXN%˘WČaŕ“*čĹĽ8$eÉ~°ă cżÎp~—ąčؓ…š¤{–žˆĹ;Ç÷ţŢŰQťůŽ„Íě_ţoÔ?öţ–˜%á\`nQ“L¸˘9b śďĹ.K_ĒgĘ*ĺ˜@q.Őń)Ü^âŁÜŻ ą%>dhoŁŸÂŽ CŠńষ9¨7“őo¸ƒđGŻÎ÷ýŢ˙<{.r Îk7n>ńKůőW?ŕŕNÖő¸OůÝĽ7Áç÷Ýżš5ń3/pđűŻƒÁ`0–!XČÂXŢh}igK~ޒźRí奎Ĺ"Yť8Źřaˇ.îŔŽŐçÝĎ(žžĹÇ.ĹËWoĹOŽŰJÎŻĐÓHćĆ"–Ě6ĽëYĒ-Úf‹IN:Ç`Y L9ŰaRúäđ–ĆÁ"–â8HŸƒ:ĂTƒŢ1ţß{P×WĹ÷˙Ŕf<˙śľ¨VłmťüĎćÍý¸ă…ë166Ďî$žőÍóđŸî„sŽtâ*ĘZ$m×Gĺ8S~ÜjřţďÝk ĆěS˙r:8ZçvƒýŸŽ[°sĺŰhć!ľąžßa9•ˆv\!‡OŞ — ŕ”%űÁŽƒŒ9ü:Ăů]XĢcO>j’běIXX:"–hĂą4I|ţđŰ\ي÷]Ę ł/87ŻÉ‹]{ŮŤáŹ^Ű>ŸşÁę_ügĐé“íؖ1 ó!™ËŇąDőTíB÷Oź1c<÷ţżtwvĂßv1lň’ľ| ˇ—ř(÷ëBěG‰ÚŰÄčÄgŃŽ Ćs C˝ŔMۀű&ëżsÄ;WÉ'ЅIŕŔšěŮýńS8Ćă•á;GłuˇîtżSwÁ`0ŒE YË­ođ,bÉĎ[’WŞŁźÔąXÄ"k‡•?ěŽ ¸§ňIĂťYůOŽű˘–ßŢ~z*ľwe0{‰đcĺĺDyÝf ”Ű,bŃË_C>,b)”)g;LJŸŢŇ8XÄRésPc˜jĐ;&‚UXdhoŁŸEťF0ĎYîŢçjłŤ´Äqß!ůľęžĂŇ&|GŇvĎ>~tČ`0ŒĹŻČÂXž`‹"oI^Šv2ĚK‹E,˛vqX;Ë+öďÁ=ťśľlç œŸšĆˇžÂ7ĚÜ üňčiÜ˝bŽXŠäf‹ Ňő,bÉĆmłˆĹ$'ýcPóJ`‹Ä†íŇ:ŇâĐá}nŠXĐą ŻŹáőo؃ZM|Óí̙ œ>5ąąYô÷wa×îUXł&ű“ś­[đŠWnĹÇţá|íż?­œVÔlN˘?/śkÓ>š‚ööß0şýOEN¤Ď "˘†/fÁk󮳎SÍĺH—˛óĘÉń)bnRžÍ˘ÍﰜJÄhNd8 |R˝¸T‡¤,ŮvdĚáבeÜ2@×lӄȢ٦Óç%4Y"yeĚZ…%,b gLS"$‰Úýů!ř !yľËĆq„Üh­ Ó äžÚČ󯐓]1D1o…ńsĆLءđüF>ů5ÔŤŽI†Ca$€čźŠ:Âź˝č‰UMqŻÚë§ăżúMĚŃšűÄܨ{‰˜†E,:>‹v`0žă¸ikÐ÷J 8ž}ÄÁK%+Ťx+˛Čđ­Cň×}ëHöę˛vĐÁţ 0 ƒąŘ`! cy‚E,Šź%yĽÚÉ0/u,ąČÚĹa5vKnlęÇuÖfü^şg'î;r˙ĺ‹÷eX}îŇ ěX)Œ“›ĺu›E,PnłˆE/y ů°ˆĽx¤~dŽ˝r˘Ž4ąÇAúÔÁŚô‰`Ë[1ä5?ź}}ŮŻ8§NŽăC|ž˝ˆäÓ1Âő7ŹÇëęz v'|^ř˘ řú×ÎâÜȜ?ł"ˇôő“DلE§ő'‰“Ę•˛>ńŜçAÄŹ…’6ÁŤÚ|^˙@“‚Wd+˛4šu׎ę?Xl‹zŇy…˙§Ôh$ćUC¸…Tވ9d>”ołhó;,§1šŸTA/.Ŕ!)Köƒsřudć#âXT˜&DÍ6.8/ĄÉÉ+cÖ*,]KťŠäT„–ˆ%°sÂU;ÚNęoqߍ˛íŃĺ+zd˝R¨@`!\ĆkŁ`ŮhOd‘xš_ęÜA’ó@">e÷ˆĚß ż§‹Ž‚­<A\’Œ rĆDsNśĆ>Őw'–OPnˇG+îxb•†$N=üű#č3Ąâ8ÂąRBq.Őń)Ü^â#Śa‹ŽĎ˘]# Ş•^´ť†Ď<^OÔçˆXra8pNÎ÷Ř)ÂÄ,0ؓmqŢľ§ćž)YČÂ`0ŒĹ YËń/ý”ŹKnłˆ%ÝN†yŠcąˆEÖ.k/bńĐŻcúąŃv…÷ÜŠ§ŠęŞnźpçÜť{žpŕHÂçąéKÂ8"ÄÇ4ßlłoŽÁŁ“qlfă9ĚťÉúŤ]ŘÜ=€}}ŤpűŠŘĐݟâsđ‘‘gń™ Gą6š>żťëEŮŘŢv¸˙ž|é>xߪŽ^üţŽť[7ű˘ŽÜmą(mInoŰo1‹X„Ű$Č ĺĘł8*ƒE,Ĺq>u0†Šýc‚ZŻ˝Ůş­W_łi

đąăáśç™ÇÓÝĺŕŽ[×âyׯœÍýŹÁÓÌš9=6‰GžźŒošýšŤSLKä07)ßfŃćwXN%RÄÜÔňIôâR’˛d?Řq1‡_G–q— L"‹f›Nœ—Đd‰ä•1k–žˆEl˜­j‰X†V`ŕŻ˙9aSŕ>LýÁŻůçđĘľ7Łű•ŻCu˙¨ ŻtżŽ˘yâ(ćżđ)4žü8őz‚łö?ŒĄ_üaőŰţWkťqřYLýŰ7ŔI_űźóźzÇ]¨ÝőRÔö] gőZ85÷z3ćĆ?vőďޏůů$pé‚ďďĺ<ç]űz~áßťš˙H‚{ň˙#ę_űjűo@ϏţkÔŽžÎĘU¨?ú&ýŠŰĎáż˙tÂoţţű0ů;oőcTŻż Ý?ô:ÔŽ‹Éń٘űü§Q˙‚;&óu?™ÜUkźŃ_ˇ]ß÷ ÔnyŞŰvŔÍLŁyá<ęO<ŠůŻ ďÜää´ÇĆ üćŰĐ}ď÷B†MŸţjk{ö>€™wź=ł˜@q.Őń)Ü^â#Śa‹ŽĎ˘]# Fjŕî˝]!Ë#'3ó@oę-şŢj,ńéÖßí`ŽA¨‡Z”F3Źźřęä¤użr>s6;Qďö_+4F&€?ŕŕËĎϞ#\žvŕ-ˆşvŘżřţý„z^6Ç8žt€đťšźţźń…„ˇýpň2đ§_tđ—˙Ôh Đ<úŸíN&˙÷ëŔ|2{űýW~ćE`0 Ʋ0–/â7K)Y—ÜfKş óRÇb‹Ź]ÖLÄ"úSžęM÷ĆŮ|Ş}óçfP]ˆYŇB–‰ú<ĆóŹvIyő”Íď+—Oáƒç`˛9ŸńŻĎáiď3u ˙tń0nވ×o¸Ýďá`Đç­Řœ˛œž›Ä™ŮIlěHA{œ˜8“‰wűđą„>r>‹~ǡInoŰo1‹X„Ű$Č „ĚńŻWNԕĆÁ"–â8HŸƒ:ĂTƒé1ᕽUEîxá:¤17×ŔßźďQĚş÷ŕŞîőÍqŻ9ţŻŁĂŸVŤ‘4qâä>ýЃxí_đßí*ĐGŽřż„öŞV#źůç÷açÎĄDKđs Ťřą×íÄ-áˆ'>ń>ۡ ŕ%/ބGť„ż˙ŕaLL6@„Rqi_ýĘ­řžť6ř™4VŻęń?7\ˇŻ~ĹV|ęł§đŮ/œ ÇĚŰiMäü>?ŰÓpĚźţPŹî†ýĂxÓëwch0{ˇríę˙óü›VăG^ľď˙č|󁋁Ć ú”ˆ‘ÚČß˙”ołhó;,§)bnjů¤ zqŠIY˛ě8Șï#˸KŚ ‘EłM§ ÎKh˛Dňʘľ W˜ˆ%Ă;ÇűBGÉš§ZőWôčűЎ ďG&ŃVYľĆ˙Ôn¸—żSüŔĹt‚×Ů\kŹ(Rőˇ˘żqÝíM[Ń˙›ŒęŽ}ŸĘęľţ§vÓmč}ýĎa棇šż}*Ţź„ŘCźňŠ×ŻĘ/Áŕoţü‹k"—`ôŞ5ÔÝö˙ô[Đ˙? á˜Üx ę?čŽÉţčˆ/qRýőss+ťôč{ĂĎšwk“×Sg`Uďł}'z~ŕUh9ˆÉ˙ö64<ݲńÄŁâľŐÄh†ă b´ŽdĹšTǧp{‰˜†E,:>‹v`0 Üľ7[7ď^Ö>ÜqU˛ţžCÉłřŢőLĎ{"•FĚxqňë.î?*žŞ˘ŘŢý5˙ő3ŔlK_Äő.ˇ'.Ÿy"°yűîÚ#qż/żÓÁůIt OóGŸĘ^Ý~ęv°ˆ…Á`0Ž TŔ`,GÄo–R˛.šÍ"–t;楎Ĺ"Yť8ŹŠˆ%˙v“ˆŁqqCłUĄýtŁ‘ń“§š?"–$…Ż IŐť×ŇÚź6#bIŁşď:ôýÖEłRő)u˘ěëďňđí›a.žäŇšńV žý˝BKľ.ôz‚?|;Ţj-ĄŐăi_{R!1ôÖßNˆXüz˘XŠVŤčzĹk3"–LJW_‹ţßű/hşöžW[÷j}żýÇčű™_ȈXD¨î܍á˙ůPší…ţ85šA˙LĎŇŤI Фů¨ňÓ°ˆEÇgŃŽ #ƒŤÖ4ąuUöńÝwgm˝YâŘľŚ‚Ť7$˙Nů–ŔďŰG˛Ëx"˜CÉ× y×Â_|żƒˇýS\Ä"‡ˇjËţ݃w}EÜ^­ŠîK×đë.FÄâ b~ńď˙úÇ=űjřĂ× ş—„n0 ăĘ YˉДnđŔ"–t;楎Ĺ"Yť8lů"–č!˙%ď…}Ý5őýĘr?41‚J­¤âĄËýb˛{íěß°C=Ů/ GgĆđ‰ó‡Z|sçfq2vNŽ´ă‘“Š}&“ó5×cx2ę ‹XňlăöÚś$ˇˇíˇ˜ƒE,Âmä$ą/™ă_ݜ¨+ƒE,Ĺq>u0†ŠÓc"ÚăžXdĺŞn „|w$ąTj.ťâ>XŤ†˙:n}ŐŠůŻ­ăĎßńţěĎĆ;Ţń°żýŽw>Ž™ŮFđĐŠľICC]¸űŽM!ŮřÎđƟڍű26““Ţë&06–]şyĺŠnźůçöÂqš­‡oŃÇ[aeĎîa!ßł/ăđ‘QĚĎgó˝÷Ž ŘőpKœsńŇ NžžÄů ÓÂ>œ™ňóól.Î#CńĐľű†đşځô[ îÓ>ĎďôŮIÔëŮ~če[qűÍŤZ}IĚ_­šIů6‹6żĂr*‘"榖OŞ — ŕ”%űÁŽƒŒ9ü:˛Œ›Ăą 0MÍ6ý+8/ĄÉÉ+cÖ*,?‹6ŚpĽÁďŹ\ÁŸţ嘃|ýÚŢý¨˝ě5ţj%>ßřćÂÜуRŻÍłŠŸ:ŢZĆłŹZƒţßř#8YÁhýü9×ďšS٧^]Ďť=o~k¸ KGƒÄszŕGާŻ_˜W$öh+î˜ ýě/ľ+ňĆdŸ;&?đj4@áßÁÇ+÷źáß űÎ{3>4;ăöď0ęgOgŻuađˇţ°qKŤősç0äć={ćOŔœ×î~Îű<Š…(ÎĽ:>…ŰK|Ä4,bŃńY´kƒÁƒę¸goVđń­#ÉGz&˝Wü$mŽZSÁţÍÉżU; LĚ&íž#˛xb/vďýៅ˛żˆźëŇ:xEžöl÷CǸ<üě_ă3ÉzO óçŻďsż˙Ďťý›ƒÁ`0Ž đŤ…ˉДnđŔ"–t;楎Ĺ"Yť8ě‰X<˙Ž?Ĺĺ}s¨m܌őżöxAű}N_úŢôŒ˝íˇýţ˝óaîĎߎş;{>ýüĄ7ţ(jőytš řŸJűX–ՊsŠŽOáö1 ‹Xt|íÁ`0rĐÄ]ű*x˙ˇ“ľ#˙‡Őđž^ĹĂ5ë÷;cňĚîýžŕţ#î=ÓđőB3óŔ#'˛“öPŚ]˙”{ŰőoĚÚݰĽŠßye7nŢVÜ{ ÷óOÍămŸœĂČxűž˛çőÖ9řâż# eż˛'pč|ŁżŰÁËŻŻáꍁ`çě˜W? x}|Ëß:8r!YżfĐÁ_žŠĎÍĄî^ÓgŔ`0Œ+,da,OˆîžÄo:嶋üYÄ"oG~^˘qËřłˆ%ŻÝßNpˆíEhˇˇ=1y_9™ą˝qóz÷†Y6†ŠŰťaöoŽ~.Źjŕäĺ1œwż84ń+÷ÜîŢTŹ 1Q÷ß×]íŻâőĎ>˙ôALϡ•ý9\toέéžŃT/5qێ­řĆĄŁ‰xŽŕűV$b_œŸĆŃÔk…úşşpÓʍ˜9;•°UołˆEiKr{Ű~‹9XÄ"Ü&ANŠ<Š–uT‹XŠă }ę` S ŚÇD›Ł˝š‡'–Hczz>¸ţxŻÝqâ"§ľF•JđDɉ­şâÍ˸đ…„Ů˜sďÜýŮ;ÄSO_ň}*žŸ÷z§ęÇ˙ޗlIŘ{B“ˇ˙ďďŕřą ÷ϓ †w$8pŮ­żř{w'^t׋6ŕŤ_?篧ée0;SÇ˙ÓGąa]6nčs?ý8rt Ÿú̿ލźžLM5đĄxżű/LÄßžu ;żĎN(Ú÷Íë URăçúžčk°r8šÚÚw<ƒżxď#ÁxťÉzŒSÓ ź˙#OcŊÜóÂö8ŹYՃ÷ŻŔƒúśAoĹţď…ĹŸßa9•HsSË'UЋKpHʒý`ÇAĆ~YĆÍáXP˜Ć&‹f›ţœ—Đd‰ä•1k–Żˆ%NI’ 0ůľĎcä˙ý-üÇ\ă¸üá÷ÁÂęŸxSÂśkßuţŤwœF#°÷.OŽxüźúŞw5pÚKG{)TvěF÷ îLŘÖϝÁÉ˙đĐԔőđ(=áÇŘg>á^Slř÷ż×6vŻGÝ/ű!Lżó´:'˛‰Ż~g˙óďşőTĂ|jnBĹO|ĺ 8÷Ÿ~;9&˙>TąćőŠ1šúZ4‹v`0JÜš‹ükAüŢŞ*OœvpCřŐęžCÉ3y—{¸zű}k 2ž÷vpďŐAĹĂǁůä„Đĺ^$nż*ůÇ÷?D™Wôě^WÁß˙ź' b÷tŻšŠ ×mŽâ˙çdâőCޢŕzxSňr.Ä—÷Ż~śŰRŻT˘Śžĺ÷ţŃqÇ#Y×íŢ*ř?oô8=ži0 ăĘżZˆą|A˘mą¤ŰÉ0/u,ąČÚĹaËąŒLOăœ{nÄ˙ĚâÔÜ›źˆż<ó ţřŘCÂe‘żĎU z&"–ě˝z#^tŐvźîćëńŤ÷ž˙ţ%w˘qĄŽń.büŃQL>>Šąű/böôŒ{30{鿐xźsçgqď‡&Ďfb?0~63w¸yĐĹFĆ6›E,J[’ŰŰö[ĚÁ"á6 rRäQ6HQNԑž9‹XŠă }ę` S ŚÇD›ƒZŮź‡@]ÝŮkËôT=^ÄWa‰‰X˘r`ă„+ˇTĂŐ[jí×ů"ükăÇ˙ńY<ýĚĺŕľEžŐąxnWíÄĐPRđńŘc#8vlź-°ŠT|_Ż|ćÜžxň|Â~ë–—Łžˆü_Ç7î;ƒ˙ĂAüď?˙.>ńŠĂ~\§ő#ૠŢaîĺăÍ_ÄR ĆÇqÄ_ Ű} ?áoČoyޚŒí?üÓAŹ|ŽJŘŻpe›Ď|ńhĆţ†ý+áÖܤ|›E›ßa9•HsSË'UЋKpHʒý`ÇAĆ~YĆÍáXP˜Ć&‹f›ţœ—Đd‰ä•1‹]3̝5aŕC>Yg;Œ~čŻý‰ľpEZřűřße˝këŞ5áf ńľĽ^OPqůBŒđku÷‹îÍŘ^ú‡żóE,žĐĉD€câsŸBs2ůÝî[_ź^ˆÂW â×/]ę˙üť¨¸ßťÜkV-\­¤ćž;&|ŸŸŻ'zńW“ 0Łů{ˆĆÄ{ESđ* ÷ÓՍîŘ +ăc¸üńűœž Ći O0?‡ŃO},ĹYA÷ó_ŒcÜV€Şg$„2(ÎĽ:>…ŰK|Ä4,bŃńY´kƒÁĐÂĘţŚżňIÄžZ}űpň<~íćŞ{j`¨ˇŃZŐ$BüUB^ăsëÎ*úťŰę–Ůyŕ›Głü­ßßăň{ßM'AÍ1÷3înOcďz?y{öŐň˙ü˜ŢßP˙ó'ząm•÷}Ţĺ› ?zŻúËoó­lýŸźŽˇî¨¸9z?x䓃Á`\iŕYË$ÚfKş óRÇb‹Ź]śs‹ěĎďOŸ8ŠOă(tń=ťwŕúŐ˜Ć„0Čň sš>0ŽJŸűĐŹżć˙ëaĘ­­ĎáŇü .¸ŸłsSxčČĆgł_@œZLŒĐ ěíY…5ý}¸0ŐVʝuyŚąşŤŻ•ÇC‚× Ýł{ćŽĚĺďŞÄ6‹X”ś$ˇˇíˇ˜ƒE,Âmä¤ČŁl˘œ¨#=sąÇAúÔÁŚL‰6G|tƒíůšÔOÉ\ôš×$rœÖ*"ÁŞ'Yâ`啨T V)IÇuc<â™v˙g݇AU_ô Hüě\ż;†2ö7޸˙ç/~&X˝ŚcăSíˇ ‘'ŠzoCBôKn/Ç5kú°jE7VŻî ^Kô‚ ŽJԕp9j_ R‘Ü\ôúDAßü1đގ_WmĎöëGăgv1Ź_Űë?Y¤J°'ă EGĽę¸Zřů–S‰17ľ|R˝¸T‡¤,ŮvdĚáבe\ŽRaŒ,šm:Tp^B“%’WĆŹU`‹‡ú‘žÂ{AëRâ^‡ć/_BszĘý.؟tčˆ.[ţ×ňšd}qŒ' …jW_›ą]÷ć_ó?ş¨nÜâ>ź˘Ě×ő8&ďű ޞˆ%–C…Ú4rö˙üĄƒ-qˆˇ¸™wyŽť˙Ώşcâ­ӟƤ˛}œžždžCĂŘ÷šo•ÍÁĎňŤąČVž‰ňʆŸhE›ŒľÍy°¤ů¨ňÓ°ˆEÇg)_#lqôd Sćcž˘ů÷Ârëś.|÷Dňűî7TđâŚćgĎ%—KšmG Ć<Žtđü­5ţ˜o9ń1W2XČÂXވßt˘td[ä°ˆĹ$/ѸeüYĒ×îo'8ôE,ŚŘłv5~áÎçcLŒ<ÄŔ7ŚţçÄŠ‹řćŘ˜žŒ“3˜jÖĄ…Z%ĆëŢř™ĂÝ{ŽÂÇy"aöĐř9źtőßĆľ›M´oY1ŒmÎ&š“ >ů6‹X”ś$ˇˇíˇ˜ƒE,Âmä¤ĚŁ\˘œ¨#=sąÇAúÔÁŚL‰6 mŚź;x)ôőuĄVőŽ/ąš#ÇđqœăE,ޘăăuTŞ]ţj.Áę%ŚZÇęՊ—kbh ęů~†ţß7ŢJ*M\{íZ<˙ć5Řą}›6ôŁŤKsŃM Ĺ#ˆ^+$˝˛ŠăŻ 3Đ_Cooç7V†ťÂ›”„ö#QGxTގŤ…Ÿßa9•HsSË'UЋKpHʒý`ÇAĆ~YĆ5ŕ(ŚÁȢٌCç%4Y"yeĚZąDđV,ńu9á+}(ĐRú‹kÍĚx*Ҥƒă´ţń_:G˛YD+Ť4ĂkTeý&t §V ăR›ć…‘Ö*3ŐđŐ<•PŹŹä"_ˇÔ“Z¸‹?ÔúŤ4ëŽIZČ^|Č˝–W7lD¨ŹXŐŢväËoG"—J(xa‹^Ÿ\šEĚ+ˇi ‹ Fďˇmwđžű’őOŸ ÎuOžMž:ČĂmŰ*-ßçoŻáožÓ•xż˙8t°oƒgÎeăÝžÝýÎIíďÖgÇł“výw͛C]đ%ŚŮlbűŞfŚ~ĆĽźě^WőAŠuƒfffR"}4n?}GfgŚŃh4Ŕ`0Œ+,da,_Äo:QşN˛-ňXÄb’—hÜ2ţ,bÉk÷ˇĺˆXźXŻş~/~ę–A똝×ćN?€Ÿsżdüő™'qßčiťÜÂ;}‘ďüŘ<îÚł##důîäYźdőűą3š{öíÂĚŮŮXžČŮf‹Ň–äöśýs°ˆE¸M‚œ”y” R”u¤çcÎÁ"–â8HŸƒ:ĂTƒé1Ńć ŠÍŮsŮw]{gśďÂąŁÓž˝“;ŽÁqEҔٗ‰XˆVbŠúž‚GE ÷Ś˘ƒîîbŢćÚ¨„űÂ[qĺg˙őuŘľs6D1@ë’ŸÇůŻ ˘ =ę~w—ćC]şÝ>ű†„ŠÔĽ0żĂr*‘"榖OŞ — ŕ”%űÁŽƒŒ9ü:˛ŒkŔQ*Lƒ‘EłM‡ ÎKh˛Dňʘľ ĎQ‹Ä'zmM5öúďS—8´Ž5“ gđ–?q9ŠwMvzŠƒ˘Ť;ˇŮ˙v(˘Š…B–(r(ó7DŐP¤ÓďÓôVt‘;ĎčÜŃ)¨Nww < —ž‘s% Už˛ˆE‹Ô؇ ímbtⳔŻbÇť‡ŐŃ/ßmý™ůĘäŰźŠţp05מDG/5ąa=áÔ3É3yopÝFŔű]ĄÇˇv]ľš×éőŮŮ&n]œKúŽpp÷ľu÷šÖ68—ý.ť˛زÁLj'őL}^XżfMŰVÉWščvsßśIýĄţ^ýď˘ďúĆ~˙Uš?˛ ÁÇó-'>c9€…,Œĺ‰řM'J×IśE>‹XLň[Ć߁żÄŻěžÄc¨ň’´‹Ă+b1šŕýJl §[V âúëqŘ4<ˆĆDӇ&’|$ç=€˙?'Ãç„ök°yx[VŽŔľ×áý<‚ÓŁcŢŘvÓÁę™ě[żϜ;ߪ?'‡k—ů߃1z)7GßÖč ˝j‰ń(ĆĐkŻ8ÉŐMZă#ęSü3›íßěáƒ8ů{żî dÚâ´Vrń×1 sj ‹&'Zű…˘ 9}•&&/jůn/ńÓ°ˆEÇg)_# †]Ő:îŘUÁžjóV9ŕŢ}ňLëĚď㶝5÷şÔn ôÔqÓś*î?Ňö}üT{ÖgżŁŢľťę^K’˘žî$ż‡ąBޤŸWq•żüFßťßÁ]{ř$Ä`0W*XČÂXĆ`Kş óRÇb‹Ź]váD,?ó‚çá5×_¨q̝šÁěąÉ̘ćq§9ź×ĽE,ŢŤ~ôŚëq玝X;؟đűŔƒćs‡űoöÜ,îŮł+!dńüL]Ǝža›JžV茭[Đ;ć`ŠÝĆ"ľ-Éímű-ć`‹p›9)óˆ~%G9 ź:ۨĘjąÇAúÔÁŚL‰6 mœđŐž8Ľéŕ‰ÇĎăśŰ“Ż xá‹6á+_>ńq ľń߆e˙őîçyĎ[ŤŻ^‘đŸÇ¤÷Ú˘œ_U‡ÉĞč%‡‹—f2ć癳Óp|! ŤDŻü!Dż^Żřv'XńĹ{`vĎ]2"–ËŁłřű<ƒGť€ŠézHĺ˝(˙@Šžůđ¤5•˜ńřäź/féîns{cč‰gšŠyâ?§ŕÁ[ĐßgN°Š÷:ŚH(“>ŁŞŽŤ…Ÿßa9•HsSË'UЋKpHʒý`ÇAĆ~YĆ퀣P˜’“EłM ÎKh˛Dňʘľ ,b!V8ĄČÂ_5%Ü.‘3čÚą+Q×CýÄQ˙şDаţő3źˆR”cĹńp1DŤ°8†˝qÂUNDă@­fdˆ†š>r6ÓÖđúwěˆ/ő2ŠkV|y×V_tă i÷[tĄ8ęřn/ńÓ°ˆEÇg)_# F¨ťöö&„,¸—§N'MďÜSEŁ1ŸôÝӝ˛|öW}`0 ĆˆbÖšf0–XĒn'ĂźÔąXÄ"k‡]8‹ž}Ó}ˆ4×DcĚ}řtb “]ĆěŃÎD,Ţö““—26?rÓuxő×ú"–ćlóŁó˜9=ƒÉ§Ç19+_&’bűŻ1ÓŔmë6Ą§–Ô\>;sOM^hýÚ.Â÷ěّ݅šüÝĆ"ľ-Éímű-ć`‹p›9)óˆŔ"Ó<¤6¤h—Ö‘‡/‹X˘ Ęľ ÚOÔžţőSH٧§Š˙É˝¨uÁŘ֌žn…Ÿ@ÄŇĚ5]xéK7gü~řźż‹JÇ ;g˝şcÇĆ3–Wď[ˆXœJ äp?•ŘgŊ~tuuľë|K%|4qÍžá 矾óa|óŰg|KKHâţ;0 ‚NˇDóʏ#ǓýňöĹţŤĂ~ĽúăTk~Všý úˆX˘1 ÇiďKᑺćwXN%RÄÜÔňIôâR’˛d?Řq1‡_G–q;ŕXTEłML}ČÂd‰ä•1kXĢež1ćž}*S7pÓ­ž0Ľž¨+üDŰ˝ëÖűŤ°řuĄˆ%§T¤{śŽń!˜?|”zCßŐעŤ 蟛YW%öqëz††ŃíśűýŽýzĺę1ʄ š‹Jš*1 ‹Xt|–ň5‚Á`¨qĎžě•ęąÓžœdwíI[îܝôő„&O‰„,ű˛öšîu'őSřşűýř‹OÉŻœŸy"[wăVď‡ĺž>ú ýxÇë{3×ô3cŔüŘB^é ƒQ$xEĆňĽţ•mÇoTĹoj+ýYÄ"jg‹,ly"ŮW€úĽ9LÜw>‡CÉůZź‚ŠŐěťF7cćŘćFf}ńLd{pú2.MO šă"–ČžrЉ[ˇoĹ×iľœ˝„ązr ćáž^\;¸''2ímą(mInoŰo1‹X„Ű$ČI™Gą˜ć!ľ!Eť´Ž´8txYÄm–O$€8rdO>yű÷ŻIŘîۡżřK×âŁ9Š'ŚüëM{5ÂóŸżŻ|ĺvôő%ż5„/ĺ”/t ^”^Í% //ď—Ń­ăV<{` ““óhżöhďžUŘÍ<óěX°2IëWŰ„îž ~ď7oE 'NNâČą =>‰o}űź?$÷ŕ@ökÜéłSp*•Pôâ„ă×Äíˇn’ćšX›Fréîr0=ƒÄŸ?^ßxxűvŻLŘţŤWîÁSo˙nKHăýçýŕÝł|ĹKˇâÇ_{.^šĹ!ˇO‡ÝϏ\ÂÉłłź‹I™tăR’˛d?Řq1‡_G–q;ŕXTEłML}ČÂd‰ä•1kXĢeNâŠ9§ŕt÷ )p™ţú—0üoJÔ żę_ać‚3z)o„×]ľŤŻÇ꡿ÍÉ ÔŸ}Ęý<‰ů‡žƒúĂ߹˚DřšĚLcúţoĄ˙ŽťÚő==XőoŔÄ{ßĺż6¨­,ž1WţÖŰĐű‚;P?~ óO?‰ú3nżđ8ccÁľÝ!H/ę=ÝžpĆk‡ÖaPŇ|TůˆiXĢ㳔Ż C{×5°qŘÁ™ąöÄúÔŁÁ+†" ÷×m&?™ô˝y;ĄżŰÁÔ\ŕëýű/'ŻťÖV°uE#3o{jMÜľť Ÿ:)şüďŸî˝J˝éö™łŔžƒ ~ŕzďűköţqQřĄťąj€p÷Ţ*~úÎnź÷ëÉQ~ňŕ{÷Ż˝ ƒÁ¸ÂŔ+˛0–/HążQżŠM*ąˆÚYÄ" ťđ"óȏ‘ß°žŤ’}Hvěň(FćŚý‡Rъ(Ť†ú3vŸôŚNN%D,ÇgÇńîSâ× ‰D,fĎĎáž=W%lOŽáÉŠ ‰ş;wďÄÜȜ#Řf‹Ň–äöśýs°ˆE¸M‚œ”yDďç˛AŠ ’ľKĘjąÇAúÔÁŚL‰6iř„sŃqÂ×ďTđÁ<…™™ě ˛mŰń˙üęuxëżť?ůúŤđŞڂŸüÉŤđ[żu#~â'vch¨+ăóŮĎĹŮłSąľˆĽeé I‚QMžtbąčř,ĺkƒÁ0Ő}‘F'/''Ú wŐ܇}ŮsWľŽ\•ô=;žô˝{ŸŰN dŃŔ_Đí‹*ă8tř‰w;řća÷䆟ţńaŕ'ÝşŮT küŘ­ůŻťí›†ÝűbÍI÷o”iüćË{ü× Ľń;wÜ1ƒÁ`0Ž0đŠ,Œĺ RlÇoTĹoj“ĘŸE,˘vąČÂ.„ˆEž ƒ˜COÄâa]ooš3:~ăĐ×}ä/o˝ 7 ŽĹŐk×’vß=ż3:†]}+ĐWéÂéš ˜žœy,çÖśű@mO×JŹčDžÉŕa˘Ç19Ÿ|€w×Î]˜;0'ć`‹Ú–äöśýs°ˆE¸M‚œ”yD`‹iRR´KëH‹C‡—E,ŃiűŤ~xŻçЏn\ź8÷źűźů-7ůB46mę÷?*<úč>ýĎG\úZđKo…=‰*ÂIţŠcˆ~‰íýďŔĄQ\ˇuÂîuŻŮ‹Űnوc'&ý3ÉŽCزy*´Ď=Žwý’Ż-ú‘Wďň?>öéăn.'ü?˝&§x×űžŔŻ˝ĺy ű[Ü~zŸ nŸ&§ęXçöŠŻ7{ăňáÇ/áéƒcđ&ĚAu\-üüËŠDŠ˜›Z>Š‚^\*€CR–ě;2ćđëČ2Ž5A5˙KY4Ű$lęC&K$݌YŤŔ"­–y…‹”ůŁ<ŕiôŢü‚„Iß żÇ˙x˜ôAŒ˙ú/ř×ߊđŸü>6ýůűQlŮלíÄŞ?yšcîwĚ çQYą•Ők3ĄçG0ő‰ëî݃ޞâýĽ2÷Ý0úŃ`Ĺ˙XÂ`č'C?ú4ΞöE)Ő-[áÔ˛ÂŰÉży/hz:\Ą.ş˘;î÷ăgĐsÍľ [Oďăbú}ďĆÜűŢŹ$ ”4U>bąčř,ĺkƒÁ0EwííÁ‡ŻjrçďŞâýĐ ő݋¸sw _zZęŠ{/“Ź]RVs°ˆĽ8Ňç Ć0Ő`zL´9ČÜÇTŻđ VfŠ˘Z­áŔłŁxŰ~÷ÝwRřşFFŚđßűˆűyőzŔ…đ=…J&JÎéÖk~*5\8?‡ˇýńˇp˙ƒg ƒ gđ§ń]|ńË'}N§őŘËÁřd˙ăOÂĺŃŮ\ާŸ˝„wźűa4›ÂTĂL°{žrß|ůë'Ľ|;śB_ SńÄCU|ä‡ńßţěAŒOĚAr÷ńWżużó_…8˘#u)Ěď(ßdKsSË'UЋKpHʒý`ÇAĆ~YĆľć`‹­=Yř¨IŠą'aE,LôšvüáĚ˝~4OҎ˙'ИĹ„łq‹żí Yźlsßú*Nţâ0{čYp˜}ňQœů•ŸÁěrą@Çdß{Ŕç}jž˜Ľ>łżţŤ¸đ˙BřJ 4ý Œ}ęĽŐ˝WłˆĹ҇ ímbtⳔŻ ĂkęŘżIü8oÝPĹ˝/+‰îßŘpďËŠŻ€7oݏ÷jĺמŚ{˝nş×ŠżxC/ţăö [ăküĺĎôáďíö_÷łĐ'jNăW^څçmÍŢÓţo˙âŕÉÓ`0 Ć~ľcy‚ŰńUń›Ú”ăăołˆEÔÎ"YŘĽ!bňc$ĆéíŔž1ŐŔŢĄUř˙^ór|âń§ńŘéł™˜rov51ÜÓă R<żúXƒłţđ߇Ż<ŠűÇá‹1>;ëŢtŹ`ˊ¸mÇV|˙ţ=čĄ*šłœ\Eů+§ťąoý:<}v$aß]­âůëˇ`îŠé‹X”ś$ˇˇíˇ˜ƒE,Âmä¤Ě#‹XLóÚ˘]ZGZ:ź,b‰6ČܧUv|O4â‹OB›)÷:öˇó$>ů‰¸éć ¸úęŐزeCCݨV+nűůhÖćî˝î#BĘ˙ÄÜÜŹ˙ň[ž§Ż˝Ľ üΞv gĎ6qy:xUĎşÁŠ/´yéţ*~řć.ôuťuxź¤h†ű7ÇŢţă˝řÁ˙5‰é͚ؐéüę|â—HK”Ă`0ŒĹ…ćˇö\;G°÷Ż#)ˇ<Đţ7úTĂşjęăľyィÜrËmßđ/_㹅fě'ŚŢŻ<˝ĎŁżńga’˙˛ˆ%§ůy‰Ć-ăďŔŒ_âWv_â1TyIÚĹa^Äâm÷îFmew‚cîč$ćNMĂVÄŐU‡jčwůŞ“ąőVJ™|"X•Ĺ˝Kˆ׎:XňzhÎ61ńÔş7ôĄgCOÂfüą1̏×ů}ŽôVđދâÁăÉWźh×NüÔÖ1sv6aŸ;Ž”ŽgK6śh›E,&9éƒĹ‹Xźßó­—Öcw¤˝ň&]_˙MĚ!˝r˘NČÁ"–â8HŸƒ:ĂTƒé1Ńć sŸx9ü_tœ6Šá‹7ˆšîżu˙}ŮŢś÷ÉgNKĐ᭜â‰+E\Ä„h6çÝçHőłîÇňć˜'zŠú—.ß× ĹŃžđsj9ľskřsŒ„Ě]ÇçŞú˙VÂí ŤnżÂžŸ†#Gď˙ńůß ÇĽŔüÔB1I­Ĺëĺäý:žáöÓçôók†cT ÇŚć珀ă„ăíŽEÓó Ća.™ă(|MSÔœ+Őp՚ř˜açwXN%RÄÜÔňIôâR’˛d?Řq1‡_G–q­9™şg>űúRŽŤî^—‰•ŇŽ„QgödáŁ&)ƞ„ÍŰa%÷ƒ,|˛Îj3oxŤoĚ7˝Oó`™Ł-ŠÔ*ÁJžmÝý_ÝľksÂłóDž]ˇ{ěWHŽŘʜőżňÖ|ۀˇÖş&…ÜĄmĄ¨Ä_}Ĺ˙Ŕ˙AD-ŒáePó÷rjxW§fđşŰ4<űh•Ľ“đ_/źw‰ â6[|ˆú_iA5ä@8nÍXžŢ¸Íűó7~t…}ěrÂ1 ďUv͖O3´÷ÇÄi‰“F8žü´‹ Ń>Ť…|Q+­ď!ëí—FŘ˙fkčÓËŁŠx҂#t ‹iXĢ㳔ŻiӛN)ĺşzř™‚ Žž Äđ;ś4P˜ůĘâs*ŢëcE+gťs 9žËçT† ţűÇűî'~m†Ďévçm/Ô `%ˆĹăŤŐjŘşŠÇ(íםżTÁÜÜ6­ËžĆW6^AńxóńÇ|W"ßUű^Ńńu•ą|°rĺ ˙ßü΋|m ˙m¤>ţی}(öoúI9ďßôvĘż$YsČXžČLąČۑŸ—hÜ2ţ,bÉk÷ˇňXň9:ąxđ^4ńČ(z6ő˘şÂ}@×Ső‡Ś9ď>ÜŞSŰŢÝlÝk{ĐľŚŐ÷AW—ă_ňęÓ Ě_œĂ외ĎŰĐ-Œ-Ť oş‡Î_@÷ěޅٓs űÜ1˘t=‹X˛ąEŰ,b1ÉI˙,GÄR*2sHݜ¨r°ˆĽ8Ňç Ć0Ő`zL´9ČÜ'^nU†Šŕ= Šůe_źďaM$d!_’¸uç;9-ŃJ ‰ś+­UUź§_ţŠ/×ůŠSxŁ z‘čœ>ňD ŢF3¸ąĐlzÜ͖Ŕ„â?…ă&sІ‚řą*ŢWĘJĐO_ â=h¤@㴄9AîQŽ„ča¤Ó°8Ą¸Ä缪˙3ŕV‡ŰĎhÜ c*aŽ•Öë–‡PĄšŰ-ď^%żP‹ô,xŮşĄâ b‚Ufcą¨çŚŘ‡ ŕ”%űÁŽƒŒ9ü:˛ŒkÍ!ąˆxKY4Ű$gęC&K$݌YěšaîŹ ˛đÉ:ë#1BoJŹŽŠX*ţ9›|aƒ÷Őť;¸Ä6Ą"8k‡×]j‹a˘ M´í+ĄŔ"q_d–źKI•ŕŻ>FN,'XEĽ]ŸBżÎ_Ěý„yEł6zýžÓĘ3čKü•Çźţ5ŃŤhRk…• ĐśCűrq$Ž rlšNĚ/şÖSđo$ZŠP 6AÚ>6&žO57•3ˇÜĹ,Íđ:NŃŤƒÂÔ"žV?c9yő^<ŃQ%˙ÄţNІýi­Vą¨|ČĐŢ&F'>Ků‘1]° +ƒąüŕýřŔ˙n˜Ž‡zŐĎĆ ×KrʘBsŽý|(hńފń+IřCÔŻ]xŻ Ä,ÉżýœJŻžh†Á`0‹˛0–'(ő/‹XrڑŸ—hÜ2ţĚř%~e÷%C•—¤]vqE,ÓOŽ ü:ąDŰ͙ŚOŚęlţî˙ćFf1;2+ŽC“˜<4™ą‰Űzż^;77…=ƒ˜m6đŠópyzqlY1Œ]Ý+1јlĺ”;Ž”ŽgK6śh›E,&9éƒW ˆEGUNԑȆE,Ĺq>u0†ŠÓc˘ÍAć>ńrf ÚqźŐ>šŠ+|aE°jI%˝G 1QFĽ%ńAœX Ç_AÄ{ČDNěo§ÚžDy¤s‹8šžpĆĄö 1MŠEˆž˘y¤Úů´9hź•L(|pE‘č$6 NČÖʓĐl}‚§e_˜RIÄő]zýqk&~ îsĹÄ5Q 2u ĆÄ/ąäýżŠUڂ˜P@Ă"–l™tăR’˛d?Řq1‡_G–q­9XÄbkO>j’běIXp …’űA>Yg=ą Uꅆ'v'I%qT[×Ńđű°ÓşœřˆÄ•Ř:N´ŒrŕăTœÖő(Za%ˆÄ„/Áűě!…'bŠ$Ż5mHx}Bŕăˇ5á_KŰ"ÍvĽ%đ@ěuBxĹ_ňšâ .‚ŠÄ!ĄikĚÂĄh­ ďK,;o"–ś¸§â$cľĆ„ÚˇT#LČď•}Şw  /Ÿh‹Ž˘ŤŠ„"š yňűZsËńuŕ*ą>'Ä;ąžkŁ cXLĂ"ŸĽ|Č˜úšçaƒ‘͸§öXĄé­Ü=Îá]œfƒ×Y˘^÷Vő´ôOÁÄD5ǸŮZІÁ`0W&XČÂXžˆß¨ŠßÔŚt{z›E,˘vąČÂ.ވEĚQœˆEź-ą¨śÉLxđĚäEźó䃉LJiźúć0;2×Ę)7J׳ˆ%[´Í"“œôÁrE,TâA2,'ęHdĂ"–â8HŸƒ:ĂTƒé1Ńć sŸxY:ŽNëŸŕÁL5|ĐUAüő:IŽPP°ÍíŤP´şIĹçóŇUü>D+´„Ž#ČËi5ľÖŞ%ţž¨Ś{č„í1q˙m†cĺľľrĄ0k§ĹßąˆEP&ݸT‡¤,ŮvdĚáבe\kąŘړ…š¤{4˙F*šdá“u6÷ D…ŢÁžBȉŽhŻF❗Éa׋j(ˆ^iĽ´Ež8„BK›7šDŰœVLňĹQ¤~ŢÍĐ?ÄP\šó÷ʼn5űĽp5ľfĘ/ž‹“ăhu•HLC“P´âÄŽŁ­1i١ëZ}#ąřÄ_é Á 5~'vRN˝ÓÚ§É#;ęsĽŮ^­.Z'\6NH+Ú(čÓtW>dhoŁŸĽ|Č˜úĺ}We0 ƒÁ`,?°…ą<żQżŠMéöôśŕ‹˛ÔVîCJGÂ%˛ĹHľ“a^ęXްE,˛°,bŃň3ąx1™8—i‹ăÖŰpë†-¸ôđ(XĢaKr{Ű~‹9XÄ"Ü&ANĘ<",K¤('ęHdĂ"–â8HŸƒ:ĂTƒ2W)™űÄˤă­öA­'^‰ETü˙%}ÚŻr2ă_íáďľ)öŞő "É9¤ÍáÄ2Ź&8Ň>"Έ'Şuü^šÁk‚¤q{ˆd×'9FΤĐ­!Žżc˘ý  †ö8§Î…‹6żĂr*Ł9‘á0đIôâR’˛d?Řq1‡_§5ż‹ä`‹­=Yř¨IŠą'aAóo¤’űA>YgsŸčźÜ~]O›Ž˝ęIxˆfˆÓ˛K_Oâ×Áŕő=ůö*ˆÄŮn ý|îpő‘0„čď‹}Br(*Ą°$ˆKBdňA[D’î#91Š†=œX{2FŔÓţţBńŽ:‚ţA~TGŽ‘0)Đ9<%ÍG•˜ĆQÇąń!C{›ř,ĺkDĆ4ü›“Á`0 ƒÁ0 YËÉ;",b1ČK4nfüż˛űĄĘKŇ.Ťń°;ÁÁ"˝ÝüşíńŠóáśŰđ wżS§Ŕ" [’ŰŰö[ĚÁ"á6 rRćE,ů Ÿx™íŇ:ŇâĐáeK´Ać>ń2™úDjbăü˙%mœ ‡(Ďś€$+@I‹Mňň cÉ8NĚF='Â_„ű+Ť”Ăô'x`•='ľ|bOóҜŮ<$㜊(ç8GÚÇŚőüËŠDŒćD†ĂŔ'UЋKpHʒý`ÇAĆ~ńüî”COÄ"Šł íJ˘ÎěÉÂGMRŒ= ĎmK'ľá¤ÎîĄ1áŕd„"Ůމ}̧-žĚZ9)űřu%ą2™ĚO0^Y˙ÔŐ-gŒ…}Œ%ĺč؇>yGc2G'Ůń4ˇ ”Í!ř'gߔ4U>bGe`ÇƇ ímbtⳔŻÓđďVƒÁ`0 Ă,da,S8ɛÚŃvü Wb›E,˘vąČ²ˆEËĎBÄâa˘1ŤVâÔä&fçĐts¸ˇ{׭ŋö\…›śnĆĚĹ9Ě^˜ĎσŇő,bÉĆmłˆĹ$'ýcpáD,ńú2@Šr˘ŽD6,b)Žƒô9¨ƒ1L5(s•ršOźL>‰˛ŁÉ!Ď3GъŒ#‚Łçќˆ[9 ™%ßG/t{ZŽâ(+ëcÓz~‡ĺT"Úq…>Š‚^\*€CR–ě;2ćđë:œßć,bąľ' 5I1ö$,h><-šdá“u.ĆG4"˘s™Ž`BŰ^ŕŁô“œßœj’běIX`‹–ůÍKv~C‡"–Ž}rΛ*ŸŇě>Z‹—¤ ,bŃóYĘ׈ŒŠżÁ"ƒÁ`0 †=XČÂXÖ`‹A^ń‡RąäľűŰ ąčížd OŔRŸŹŁÚ_EĽVńë›ő&ęăǔĚbîR=?J׳ˆ%[´Í"“œôÁĺ#bIƒňęHdĂ"–â8HŸƒ:ĂTƒ2W)™űÄËdácĹ!ĎSg•ălÁ‘¨kÍ ƒý/ĺ@É”oŁ™‡ÔĆz~‡ĺT"Úq…>Š‚^\*€CR–ě;2ćđë:œßć,bąľ' 5I1ö$,°ˆEË|‰ć%;żąˆEĎG‹bň’TE,z>Ků‘1ő7^Ärôd Sćc>ćc>ćcžĽČÇ`\É`! cقE,yĹHýYĒ×îo'8X̎ű˛95ç cOŽKísó t=‹X˛ąEŰ,b1ÉI˙\‹Ő CP^‰lXÄRésPc˜jPć*ĺ sŸx™,|Ź8äyꌣrœ-8u­9a°˙Ľ(™ƒňm4óÚXĎﰜJD;ސĂŔ'UЋKpHʒý`ÇAĆ~]‡óۜĂNÄ"Š[Š‚^\*€CR–ě;2ćđë:œßć,bąľ' 5I1ö$,°ˆEË|‰ć%;żąˆEĎG‹bň’TE,z>Ků‘1ő7OÄÂ`0 ƒÁX~`! cy‚dŰ,bľłˆE–E,Z~,bŃ܇,bA‡9I%ĺ\֏!ł×?_ÄŻ/”Ú T+Éěľ9>ń2)ÚĽu¤ĹĄĂË"–hƒĚ}âe˛đąâçŠ3ŽĘqśŕHÔľć„Áţ—r dʡŃĚCjc=żĂr*í¸BŸTA/.Ŕ!)KöƒsřuÎosŽĽ-bÂ&¸ŠY˜,‘ź2f­‹X´Ě—h^˛ó‹Xô|´(!/IXĢçC†öfDĹŘ'Ďy,ba0 ƒÁ` ˛0–7â_žXÄ"lg‹,,‹X´üXĢšYĂs’KĘšŹCfŻ ˛ˆ%ŢJ2{m…OźLŠviiqčđ˛ˆ%Ú sŸx™,|Ź8äyꌣrœ-8u­9a°˙Ľ(™ƒňm4óÚXĎﰜJD;ސĂŔ'UЋKpHʒý`ÇAĆ~]‡óۜŁ‹(Ň`Ěԇ,L–H^łVE,ZćK4/ŮůE,z>Z‹—¤ ,bŃó!C{3˘bě“ç<ą0 ƒÁ`0Š YËń/_,bśłˆE–E,Z~,bŃ܇,bA‡9I%ĺ\֏!ł×?YÄo%™˝6‡Â'^&Eť´Ž´8txYÄmšOźL>VňVňda˛Dňʘľ ,bŃ2_˘yÉÎo,bŃóѢX„ź$U`‹žڛcŸ<繈…Á`0 ƒQ.XČÂXž`‹°E,˛°,bŃňc‹ć>d :ĚIz,)ç˛~ ™˝ţ1¸4E,ńşR™‡A‰Äfâ:ŰäúÄˤh—Ö‘‡/‹X˘ 2÷‰—ÉÂNJCž§Î8*Çق#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚá×u8żÍ9XÄbkO>j’běĹűƒE,ZćK4/ŮůE,z>Z‹—¤ ,bŃó!C{3˘bě“ç<ą0 ƒÁ`0Ę YË,bśłˆE–E,Z~,bŃ܇,bA‡9I%ĺ\֏!ł×?YÄŻ$ą™¸ŽÄ6š>ń2)ÚĽu¤ĹĄĂË"–hƒĚ}âe˛đąâçŠ3ŽĘqśŕHÔľć„Áţ—r dʡŃĚCjc=żĂr*í¸BŸTA/.Ŕ!)KöƒsřuÎosŽňD,˘Ü ŚÉ…‰M‡KČ+cÖ*°ˆEË|‰ć%;żąˆEĎG‹bň’TE,z>dhoFTŒ}ňœÇ"ƒÁ`0 Ć€…,Œĺ Jý+Űf‹a_~e÷%C•—¤]–E,Z~,bŃ܇,bA‡9I%ĺ\֏!ł×?ŸŁ"–Dźv‰rŰSu$śÉő‰—IŃ.­#-^ąDdî/“…‡yÎc ƒÁ`0 cáÁBĆň)śYÄb؁_Ů}‰ÇPĺ%i‡e‹–‹X4÷!‹XĐaNŇcI9—őcČěőAąÄِ°VRG0÷‰—IŃ.­#-^ąDdî/“…‡d :ĚIz,)ç˛~ ™˝ţ1xe‰XâŰe€ĺDYřÄˤh—Ö‘‡/‹X˘ 2÷‰—ÉÂNJCž§Î8*Çق#Qךű_ʁ’9(ßF3ŠőüËŠD´ă 9 |R˝¸T‡¤,ŮvdĚá×u8żÍ9XÄbkO>j’běIX`‹–ůÍKv~c‹žĹ"ä%Š‹Xô|ČĐތ¨űä9E, ƒÁ`0ŒĹ YË$Řf‹a_~e÷%C•—¤]–E,Z~,bŃ܇,bA‡9I%ĺ\֏!ł×?YĂ~Ęł! Ÿx™íŇ:ŇâĐáeK´Ać>ń2YřXqČóÔGĺ8[p$ęZsÂ`˙K9P2ĺŰhć!ľąžßa9•ˆv\!‡OŞ — ŕ”%űÁŽƒŒ9üşçˇ9‹XlíÉÂGMRŒ= ,bŃ2_˘yÉÎo,bŃóѢX„ź$U`‹žڛcŸ<繈…Á`0 ƒą¸`! ců‚Ű,b1ě‹ŔŻěžÄc¨ň’´‹Ă˛ˆEˏE,šűE,č0'鹤œËú1döúÇ ‹Xň@yu$śÉő‰—IŃ.­#-^ąDdî/“…‡yÎ+YIJ VƒÁ`0 ƕ ˛0–7˘/G,b1ě‹ŔŻěžÄc¨ň’´‹Ă˛ˆEˏE,šűE,č0'鹤œËú1döúÇ ‹Xň@yu$śÉő‰—IŃ.­#-^ąDdî/“…‡d :ĚIz,)ç˛~ ™˝ţ1¸Vňđ ĆX˜ĹRKBIhoő"uˇşűőňŢëˇow_*Ś2Ť*+–s"NDfÖ­[÷üŇíĚ8qâ?‘ądVý/+‰ƒŽ'§ƒýœŔaŘĘ9qýIh˜Ců}˜ő }’çw7mU„ĺˆ(c%xqU Dš¸i*šŁ°UœßńŰäM,ąP .) Š-ĂôWhBD,,÷!­ľž‰ˆ…W†Eą ő"L "^éGTżšćŽˆĺú#‚Ţż|O-/|Â'|Â'|Â7Œ|Á(@„,‚Ń„ˆX"ۂ”kş-zŒP˝ˆ|<ʈXXĺDÄÂź†"bŠu"ÇRp.ócPţü1("–X(ëDQů›˛ŒqŠĹÁáKďDŗŃÓ*ĄL]ON?ű9Ă°•s"âú“Đ0‡ňű0ëAú$ĎďnÚŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9†KĂŮ6*Á%Ľňąe˜ţ Mˆˆ…ĺ>¤ő˘Ö7ąđʰ(6Ą^„ DÄÂ+Ł"ýăˆęń7ןŃą@ Fc lqdYřCăĂtĺ拈ED,Źn‚NB>ŚMD,Κ˛í"bqccç"b‰Š ŽžˆE?/=˛Č(=e”u˘¨|MYĆ8ĹâŕđŠˆĽw˘âËči•P&‰ƒŽ'§ƒýœŔaŘĘ9qýIh˜Ců}˜ő }’çw7mU„ĺˆ(c%xqU Dš¸i*šŁ°Uœßń[CÄRçžĘ‚Jpa” “ÔăŻĐ„ˆXXîCZ/j} Ż ‹bęE˜@D,ź2*Ň?ލsÍËŔ÷U@ F˛G F ňFÁčB˙C™6ó\D,śoŁmŃc„ęEäăaEÄÂ*'"ć5 TŹ9–‚s™ƒňçÁí!bŠĘ:QTžÇŚ,c‡bqpxEÄŇ;Qńeô´J(“ÄAדӏÁ~Nŕ0l圈¸ţ$4ĚĄü>Ěz>É󻛶*Ž‹rD”ąź¸Ş"M\‡4ÍQŘ*ÎďxŽ!ą`™ƒ„JpIŠslŚżB"baši˝¨őMD,ź2,ŠM¨aąđʨH˙8˘züÍ5oxD,@ y#‹`$ŃRÚß˝‡'ý!J˙ łŁžůšˆXŔ›ŘDÄbô)Í!"ž‹ˆ…W:Ý"bĄëŃĂÖą¨¤o=x(¸šŒ§IČ'mŠĹÁáKďDŗŃÓ*ĄL]ON?ű9Ă°•s"âú“Đ0‡ňű0ëAú$ĎďnÚŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9†WĢPz *;ŕkZýIóWhBD,,÷!­ľž‰ˆ…W†Eą ő"L "^éGTżšćmވĽŐäžÚŕł°@ ĂŮűٞś<°×d-Ż­šŚëkšţfG}ósą€7ą‰ˆĹčSšCD,< Żţt şDÄBף‡-$bi˙m¨e°Q׍š××WŒxv|ŸMYĆ8ĹâŕđŠˆĽw˘âËči•P&‰ƒŽ'§ƒýœŔaŘĘľ%âú“Đ0‡ňű0ëAú$ĎďnÚŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9†üM,­ǧŽ}uŠĽčž,҅Q&LRżB"baši˝¨őMD,ź2,ŠM¨aąđʨH˙8˘züÍ5oóßIJŒřÔśŻ.­€@ Ű ŘŢ'?-$%ˆE0’8żtš˙đ¤? é avÔ7? xó›ˆXŒ>Ľ9DÄÁsąđęOÇ ű@D,t=zŘZ"–ËëĄ),Ž\4bëq}6eă8‹ƒĂ+"–މŠ/٧UB™$şžœ~ ös‡a+זˆëOr@ĂĘďĂŹé“<żťiŤ"ě¸(GD+Á‹Ťjŕ ŇÄuHăPŃ…­âüŽçnK~PŤ— )œ[Sx†‚ TB™0I=ţ Mˆˆ…ĺ>¤ő˘Ö7ąđʰ(6Ą^„ DÄÂ+Ł"ýăˆęń7ןÍąä8ŻZĐΞť@ l'œ=×ÜçŔÁ0@„,‚‘ÄąËç:'úC”ţfG}ósą€7ą‰ˆĹčSšCD,< Żţt şDÄBף‡­'bÉą°ršÂĹůÓFZ!> KŤ@>iS,݈Xz'*žŒžV e’8čzrú1ŘĎ †­\["Ž?É s(żł¤Oňüаă˘eŹ/ŽŞƒH×!CEsśŠó;žcřE,ů[Ëg )<żŇňT„†J(&ŠÇ_Ą ą°Ü‡´^Ôú&"^Ĺ&ԋ0ˆXxeT¤Q=ţćš7"–Ç7š˛<ě@°đüąć>†"dŒ$žsaŐˆďƒ ˆ-ĂôWhBD,,÷!­ľž‰ˆ…W†Eą ő"L "^éGTżšć Ÿˆ%_ó>ˇ˛ Má3ő@°đ™ĎČŢ'mČY#‰ćĎÁC'vS"bą}m‹#T/"+"V9ą0ŻĄˆX bČąœËü”? n?ËŮůŻÁâjsż ~yá4œ8ó„aS–˛Œh>iS,݈Xz'*žŒžV e’8čzrú1ŘĎ †­\["Ž?É s(żł¤Oňüаă˘eŹ/ŽŞƒH×!CEsśŠó;žcë‰XZ—žľ|šÂ‰Őź˛Üľ4ˇŻž˙O‚@ Űý=݉}U ˆE0ëĺŢoÁýŃ×ţ˛ý „|ÚŽ?pç"bo>b‹Ń§4‡ˆX x."^ýétˆˆ…ŽGŁ!bQŞGO?Đ)­ý.ŞžGĆŰ_úúGŠýUYžúu°NŃ´iS,݈Xz'*žŒžV e’8čzrú1ŘĎ †­\["Ž?É s(żł¤Oňüаă˘eŹ/ŽŞƒH×!CEsśŠó;žckŠXňFŽ˙DqÚäžúžS‹Đ"üUĐŔ@lŚżB"baši˝¨őMD,ź2,ŠM¨aąđʨH˙8˘züÍ5oxE,ůᏗŠó&÷Ő?x߇Íσ@ Aä{]žçĺ¨k_†2˘#‰|Ýž°ź˙ő‘Îĺƒ–ţcœ‹ˆźůˆMD,FŸŇ"bŕšˆXxő§cĐ} "ş=Œ†ˆ%7šâ䊠Ř2L…&DÄÂrŇzQ뛈XxeX›P/Â"bá•Q‘ţqDőř›kŢđŠXrüţň\hŠć÷Őó—á?ţç˙ @ Œ2ň˝.ßóšÜW‚a€Y#‰,ë íßţňAľO>Œsą€7ą‰ˆĹčSšCD,< Żţt şDÄBף‡Ńąä_~őřďu˛ćnďzÜőđ–˙ĘMżÖ)š6m<݈Xz'*žŒžV e’8čzrú1ŘĎ †­\["Ž?É s(żł¤Oňüаă˘eŹ/ŽŞƒH×!CEsśŠó;žcëŠXň=nůčŸçƒŘWóůyă­,XżE#ś Ó_Ą ą°Ü‡´^Ôú&"^Ĺ&ԋ0ˆXxeT¤Q=ţćš7Ü"–üôwć/çƒŘW˙Ýoţź•E #‹|Ë÷şMîŤÁ0@F¸`dYŇĂ<ůÂü9ř/üŠőФ~."đć#6ą}Jsˆˆ‚ç"bá՟ŽA÷ˆXčzô0:"–˙÷°´zĘQág5ČňąýőňÂiřԃżg\ëM›6Ő˙Żâ–!ŇƟŸÎĄř*śýV:˘i_FOŤ„2It=9ýěçĂVŽ-ן䀆9”߇YŇ'y~wÓVEŘqQŽˆ2V‚WŐŔA¤‰ëĆĄ˘9 [ĹůĎąuE,9VŸ~¨ĺłŰWOŹśŕן_Dë‚6(„Ř2L…&DÄÂrŇzQ뛈XxeX›P/Â"bá•Q‘ţqDőř›kŢp‹XrüŰĹyxĄľ1°}őř‰Óđ˙ځ@ Fů—ďuMěŤÁ°A„,‚‘űŕŇUáńOáĄÓOwŒúƒ”ˆX<\n‹#T/"+"V9ą0ŻĄˆX bČąœËü”? noËمŻÂŁÇţc‡ĹRá7óÁ`'Ƨü}8qúq­N&ÂĽŹ3e9úËiĺĎOçP|Ű~+­>A_FOŤ„2It=9ýěçĂVŽ-ן䀆9”߇YŇ'b\˘>VEŘqQŽˆ2V‚WŐŔA¤‰ëĆĄ˘9 [ĹůĎąľE,—ž„•§ţ°8äžú˙<ˇÎŻ›Î â[†éŻĐ„ˆXXîCZ/j} Ż ‹bęE˜@D,ź2*Ň?ލsÍ~ËĂëkđ˙ocir_ýľóťđĺ@ F ůޖďq9šŘW‚awTgĚźŒq̈tďoL;öţĆťśqë/Ď۝ď˝÷ţOĺ„.\ÁöEţJ-ýՑJľŠ¨;^˙ĺí˙°=ˆzbą€7ą‰ˆĹčSšCD,< Żţt şDÄBף‡Ńąä_~äŃżç/TřúLţđR× ľż^yŕfx×[˙°oĆa)ËŃ_†H+~:‡âs¨p /‡bř9T|=­Ę$qĐőäôc°Ÿ8 ›6ŻŞs@ĂĘďĂŹé1.QŤ"ě¸(GD+Á‹Ťjŕ ŇÄuHăPŃ…­âüŽçŘÚ"–|Ż[üÜ/ÁĆĽ§7e_˝kÇü÷ť÷uţe‚xĖaú+4!"–űÖ‹ZßDÄÂ+â؄z& ݌Šô#ŞÇß\ó†_Ē'čÜřęúÚŚěŤßú–7ÁĎ˙ü߁@ F˙â_ü x˙>Účž*ŘÚŘťwOqüâ?÷ęö!˙ăKÝă†ő§şÇ–ö§´ŁýDÚw´Ďmď8ĺ,‚‘ĽÂôĚłđ?ń;وX<\n‹#T/"+"V9ą0ŻĄˆX bČąœËü”? nw ŔçŸţ煈Ľ`jP…OíŻ'Ď> üĺŻy )ŻŹ3e9úËiĺĎOçP|ŽáĺP Ÿ ‡Š/٧UB™$şžœ~ ös‡a+çUÄő'9 aĺ÷aփô‰—¨Uv\”#˘Œ•ŕĹU5piâ:¤q¨hŽÂVq~ÇslqKűoĺŤ˙Žąä،}őá…uř…§.ă !ś Ó_Ą ą°Ü‡´^Ôú&"^Ĺ&ԋ0ˆXxeT¤Q=ţćš7ü"–˙äň…BĒc3öŐ<đQřЇŢ@ Œ>ôá÷"–ň6ÁvÁ#†|ÁÖUřcc´Z ţä‰ĎŔţŮÝđ÷î˙óL€őÎEĂ÷W¨^D>VD,Źr"ba^Cą@Ĺ:‘c)8—ů1(ţËCĎ˙;8zćĂE:ßët4ńđBíŻ<ůq˜›Ý Żż÷=F}űő6ϔi ”!ŇƟŸÎĄř*ĂËĄ>A_FOŤ„2It=9ýěçĂVÎŤˆëOr@ĂĘďĂŹé1.QŤ"ě¸(GD+Á‹Ťjŕ ŇÄuHăPŃ…­âüŽçŘú"–ŐŻ˙.Ź˙d‘ŢĚ}őO-ĂţÉqřůkçřd âŔôWhBD,,÷!­ľž‰ˆ…W†Eą ő"L "^éGTżšćm Ë˙ľpţdiŠ8ßĚ}őW~ő×ŕôŠçáţü’eŸ96^Ż?˛u@ř„Oř„Oř„Żnž_ůçżżů[ď+ÎąŻ Ăy#‹`äŕ.ÚYš°˙űŻ|ţŐçţ ŸĽˆŔzç"bqěŠôŐęEäăaEÄÂ*'"ć5 TŹ9–‚s™ƒňçAąä"–ÇNü~‘îěqƒů`в”űëçţđç_ü§Œ˛Î”i4ÚHٜ´ňç§s(>‡ Çđr(†OCŗŃÓ*ĄL]ON?ű9Ă°•ó*âú“Đ0‡ňű0ëAúDŒKÔÇŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9FCIJrôéaŘWëŘüóçq`ú+4!"–űÖ‹ZßDÄÂ+â؄z& ݌Šô#ŞÇß\󶎈ĺ?,ĚçðŻć_üĺ_ @°áŠXDČ"Ř>!‹`$łüâ_ü6´”Â?띋ˆĹą+ŇWŤ‘‡ ŤœˆX˜×PD,PąNäX Îe~ Ɵ?ˇťˆEÁçŸţgąĐÜş˜ĺŕƒůŻ‹ß#ďÔľŐ˙/я”ÍI+~:‡âs¨p /‡bř9T|=­Ę$qĐőäôc°Ÿ8 ›6ŻŞs@ĂĘďĂŹé1.QŤ"ě¸(GD+Á‹Ťjŕ ŇÄuHăPŃ…­âüŽçŘâ"–vcWýˇąĐÜŚ˜ĺ矼Œśł„73Ý_Ą ą°Ü‡´^Ôú&"^Ĺ&ԋ0ˆXxeT¤Q=ţćš7ü"–<ůK—/ \ÄBs›b–Ÿůű˙Ňxk‹@ Ì|Ďú™Ÿ˙—"blkˆE0’ČoßĂ˟<ńiřĄ?ţxřôÓćƒZď\D,Ž]‘žZ˝ˆ|<ʈXXĺDÄÂź†"bŠu"ÇRp.ócPţü1¸˝E,gž yôoY?'ä>ź4ýÁ oÍfčżź˙ďÉ3CŻĺ‰~¤lNZůóÓ9ŸC…cx9Ă'ČĄâËči•P&‰ƒŽ'§ƒýœŔaŘĘľ%âú“Đ0‡ňű0ëAúDŒKÔÇŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9śśˆeăғ°řš_˛~Nh¸öŐ?<˝ ďxč<<8żîVŚżB"baši˝¨őMD,ź2,ŠM¨aąđʨH˙8˘züÍ5ořE,ŻŻÁ;cýœĐpíŤďű…ď|Ç߅/?ř@0ĚČ÷Ş|Ďzß~´HoĆž* DČ"Y„^=ű źëO~ăËÜQă÷ŔDÄâŘéŤŐ‹ČÇʈ…UND,Ěk("¨X'r,ç2?ĺĎƒŰWĒMřČń߁>úSp~Ą#Ů̇—Đţzňě“đťď˙yřôƒż[ěŻúľ´NI›“VţütĹçPá^Ĺđ r¨ř2zZ%”Iâ ëÉéÇ`?'pśrm‰¸ţ$4ĚĄü>Ěz>ăőą*Ž‹rD”ąź¸Ş"M\‡4ÍQŘ*ÎďxŽ­+b)ŢÂňÔ‡…Ďţظôtać}őá…uřއĎĂż~~ąāéŻĐ„ˆXXîCZ/j} Ż ‹bęE˜@D,ź2*Ň?ލsÍnK~ú‹óđĂçÎŔW×× Ű0ďŤ=üuřŽďý{đýë˙$ogÁP"ߣň˝*ßłrˆˆE°1Áَ›&ůĂ @ŤŐąýť/˙)üŃŸ‚żq×[ŕűn{c;0>íôŘDÄBćăaEÄÂ*'"ć5 TŹ9–‚s™ƒňçÁí)bɢçŠÓ_=ţ{°´zŞĚ†‡Îţú™ůúÇŕĺw˝îyŃ[Úšfô BiĺĎOçP|ŽáĺP Ÿ ‡Š/٧UB™$şžœ~ ös‡a+זˆëOr@ĂĘďĂŹé1.QŤ"ě¸(GD+Á‹Ťjŕ ŇÄuHăPŃ…­âüŽçآ"–v#׎}–ţ ¨ĺłeţVŮW˙Íó đžSKđăGvÂ]1Í˙ZS%¸Š~â 3QF%”q 7WFD,Ďş*Ә?R†Eą ő"L "^éGTżšć ݈%?üţňüÎüexĄľQćo•}ő×ţÍďÂźďĎŕ'~ü{ŕ ßř Áf"ßłŽ{ ţŮ?˙ux襯–vąś;DČ"yĐ/š]0/,œƒ_ýŤ˙żńĺ?‚ďźĺľđćëŢŘqíӋëě!ů"bĄÂŠˆ…UND,Ěk("¨X'r,ç2?ĺĎƒŰOÄrvţkđüů?‡Ł§€•őKĽ{p)Ř7éᅳż^^8 űŤß„Ď|ů÷ŕŽ[ޡ^÷j¸ňŕ­Ľˇ˛8´ňç§s(>‡ Çđr(†OCŗŃÓ*ĄL]ON?ű9Ă°•kKÄő'9 aĺ÷aփô‰—¨Uv\”#˘Œ•ŕĹU5piâ:¤q¨hŽÂVq~Çsl=Këғ°~ęł°rě ÖćËź­¸ŻžXmÁ/?} ~ýů žűĐźe˙źd‡çc,(4!"–űÖ‹ZßDÄÂ+â؄z& ݌Šô#ŞÇß\ó†SĒ˙„ЇW–ᏗŕBŤO˛÷Őă'NĂ?ůĺ߀ë~çŕďüô߄ógvĂK_r@0(ä?!ôţ> đžĂůó—Kű°íŤÁfA„,‚müáĽČ)ÔřĹ/ ľ˙saeţý#,ţޚŰ÷_}ÜyŕF¸yĎa8źăě›ŢłăSĹż*‹ˆXÂç"bąĎƒ×M…ă4Ňný\ŃţŠíĆ9DÞ+¤NÁzô°…D,í j–×/ÂÂĘI¸¸tÎ-| N]|ľˇŻ ĹJ‡ËĆf?źp÷׼•Ëđ…Gţ¨řŰ5wŽšú.¸ňŔ­p`ďľ°kç0;˝&Ƨ´śˆˆĽw˘âËči•P&‰ƒŽ'§ƒýœŔaŘĘľ%âú“Đ0‡ňű0ëAúDŒKÔÇŞ;.ĘQĆJđâŞ8ˆ4qŇ8T4GaŤ8żă9†WÄRÔŹľjő´–Ď@kţŹ_ú:ŹűŞńö•Ł°Żž_Sđ[ÇŠżŤ§Ćŕ•{ŚŕžSpëě8i§÷OŽÁLĆű-i…&DÄÂrŇzQ뛈XxeX›P/Â"bá•Q‘ţqDőř›kŢćŠXZm‡ĺśĎyՂă-xr}Y[Ď­Źo_É1 űęłĎ‡ŸůŮZäžúźęUwĂKîž n˝ő:¸ćČp`˙^˜–/@„âłŃĽ8{î<ě<ńÄłđŕCÁg>óP!ŞÔ1ĚűŞ@°ŕŽřŒ™—1Ž‘îýiÇŢßx×6nýĺyťóă˝÷Ţ˙Мđ…‹ Pč=¸ĐżŞĘWL @°™ ”÷9z-Ăňđ"űŤ@ †˛Ż @Pd_ >lĽ}U0ÜŘťwOqüâ?÷jČőɗşÇ ëOu-íOiGűˆ´ďhŸŰހÉYŰ ™ń/˝ąůŃ{ĹdáQú%ýK+@ ˜Čˇ§ţ•|‡O}/űŤ@ † ˛Ż @Pd_ >lő}U $DČ"ؖ?Ŕ^ĽŻšO(­,@Ŕ†šŸÄ=„lő˝ě݁@ $d_-źJ_ŮW@P˛Ż^ĽŻěŤ@ ¨‚QßW‚A@„,‚m lPŹ'‘Lă@ ƒžWm•Ů_@0ʐ}U ‚ú űŞ@ őa+îŤAÓ!‹`Ű#ýF ‚f0 Ş{Ů_@0,}U ‚ú űŞ@ őAŢž"Đ!‹@ Aß0ě‡y˜A°RFńĄEöW@  ˛ŻĘž*‚ú űŞěŤ@ ¨Űa_ę„Yąˆ<؁Ch?Ůn,˛ż   d_5!űŞ@ Ş@öU˛Ż   d_ę…Y&Bݜ” H !Č^áBöW@ ¤Bö˛Ż  ˛G¸}U А=B ¨˛Ŕ݈D/Ł y0Оż Áö†ěŤőBöU@ Řސ}ľ^Čž*Ű˛Ż ƒƒY‚@66@ ę‡ě݁@ ÔŮW@ ¨˛Ż @ TÁ@ @ @ @ C˛@ @ @ @ †"d@ @ @ @  DČ"@ @ @ @  ˆE @ @ @ @0!‹@ @ @ @ `( B@ @ @ @ ÁP@„,@ @ @ @ ‚Ą€Y@ @ @ @ C ľ@)@ ŘȲ éýU :d_­ŮW@ CöŐj}U :d_ę…Y‚z$ň`"‚„öŢÎv{БýU )}‡ěŤ@ HěŤ8d_A d_ę…Y ůFS÷CŠ<ôÁhŁĘĂöYÎ7j4˛ż € ŮWÐ}U \Čž†ěŤ@ ŕBöU`p!‹@ЅýŔ˛óŞ=päŢŕŞťŽ}7]ťď…Ů};`|zŇŘTŒG…œ*sRhAÍTüÇ*ٍ:ۖŹ(ş{í™cCN-{†8ĐíŁúŁ0ąÚ—ůýŃöýĄŒƒcĎ˅Ż+V4ĂíŢkÝ-׳Sϸ1íŁüľąßž„덍eÄœúf„]'ÁěaGüąąŒööGđşjväZ÷ „ŻŸŮ÷üö1Żľ“Č˜ăVł+üF;<ˇ׺kך=Ľ}Z™˜öQ×ŰŰžŔľn;ľÖVacᏞ? Ť§ŽÁâsOÁâŃÇ`íâŮrO…{Űű‚}ŔÎÝ{`nnŚŚg`l|ÜlkďÁŞBŃcŁ"W×R—–ÇăIŚd.9šŞF.vzç(NĄˆ §B…"–Jď`o!jĎIá2Ď(ľTä2Ź5p•9l.ĹráŃń¸xž|.żwô ÖxŚejľ6`mm V–—ayq._ź—.^€Ő•ĺ‘ŢWŻžújxůËÜs'Ü|óÍpäČaءoĚÎÎVhŤ6o“ć}ZŹćcvœZă2gë&ÄŹ'ngNž(„.=lĺ}ußž˝đßń6ř–oů&¸çžťĄ~Xó-iI‹Ő|L˙zYoXŰŚˆYjik…ť–šÖí(6EÍŁ@ .V8fŁ“y›ˆY”w0ąĘTă1ńűeŰúČ#_…~ôcđţ<ĐţţRißĘűęŘܘžçU0uÇ˝0q䆎Ńúrűb҄ |‘ÜőąáB`űŤ€AăéćĄtąbOŰkłx….O?ÓŞ™×ł;Ÿ4!ţtۍţa´VŹĚăh{ĺńă”i`ütó\xĆOYš^Ԙ'….é Őľëţ‘ăÇĘkdühyěńÓ͋šďYäřřůŢŻoüĐ1€lűڊĄŹś/|őœűř“pöƒĂÚĹĺŇžŐöUÁđ`ďŢ=Ĺń‹_üܫۇü†çR÷¸aýŠîąĽý)íh˙‘öísÁ;Ü xn%Öšď˜éޟYţŔ’ż}ĺž÷źîúŢűűŠGŐ;XĂ_'ĄmU€~÷‚?v˙“ńü [FŘű$čJ "ËĆěěš"íóú#׺0łŽ_FŘőÚg$DÎeƟlŇŹöúmwhˇ•Äú#fŽRsŰ{­™ý‘Řžä덬#á5 łóçv˙áövÁ Ÿűœů‹ŔúĹłĽË°?ČŃö‚7ßöb¸ţŚ[¸˙˘@D,ń\ÖŠÇć  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷ú¸źŒŃ\žÖVŕrRš kW`ôÖČĹçăÄčšĚpS§J|ѓĂJ*8uâöŮâ--=lĽ}5űʏţČťá~ŕűü—zÖ|KZGŇb5Óż^Ö–Ç&"–¨’ÉKsńđ¸ÍĆ2c&V7˘w0ąĘTă1ńűe_Řü_Ž˙÷÷ýřO˙é÷Ў´ô°•öŐüí+sŻy3LÝ÷z|_ýr;ﱌ(Ž})MĹŠ,F ž˜íćŐ"Fđ´]Ä,X ¤>ĆĂ#Ô5~œ2 ŒŸnž łřë$bݎň1ś‚˜ĽcRpú…ăżűĺâ--=ˆ E ˛řó2Ć1#Ň˝?˛‡ţĐr˙˝^ů“ßhî\Şw°†ž2NBۢNz.ěţ'ăůśŒ°÷IĐU@D,–ŮŘ5EÚçőGŽuaf]żŒ°ë*´ĎHˆˆ˔?Ů>¤?Xí ôÚî,Đn+‰őGĚ\Ľćś÷Z3ű#ą}É×YGÂkfçĎíţ!#ě}[ţᙏý!œýÄ—ća}ˆŃ÷×[nżnťă.€˜/ÚDÄĎezLaž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9Ę@ŰŁć{9~ ~žwbđÇߑEŒŸŽ9 \+ł°;F-ťťŰÚý˛#°ç•×Áâ×ĎÂÚŮĹĄŰW͙™™âxâÄń߂ÎmÝJ÷h˙Ç64!‹`Ű@hÉĹ+ßńkWz‡Œ°ťśţi†8ŃŽ÷íĎß°e„˝O‚‘ő˛ _äÔ˛gQţeoť-{iË;왧ÝĆAK0űťŚHűźţČľ.ĚŹë—v=@…ö ą c™ň'ۇôŤ}ţ@۝Úm%ąţˆ™ŤÔÜö^kf$ś/ůz#ëHxÂěüšÝ?d„œDďtb÷>Ř{ß`íÜX9ů\™żŮ1úţzäşŕŻ{ĚĚÎADÄĎezLa$É̊ć gÇw¸âZ™Ł¸Łů*u˛ĺ^——1šËÓÚ \NŞ"—aâ ŒŢšř|ü=—nŠăT‰/zrx’fjjzޏępű3„eXZčżşy˜öŐďxۡÿý_‡ŤŽşš…ŐSIëHZŹćcú×ËzĂňŘDÄU2"bi.ˇŮXfĚÁÄęFÔâ&V™j<&~żœöŠ+Áw~Ç[áŘńđőŻ?Yڇi_şű•°ëű˙6ŒľŸ­ńďiů_NfŽqŚžĽżŐ´ŠRş†ggd‚hfř"çAűŐ"˛Ťšá…2ĚëE5*H$Ďtʨ*şßĺ1‹[ŠęT*ʈYČ8Qó=‹?"fÁœ‘îž:´˝őŰrâ2,=yVŤŤçú  B–P^Ć8fDÚ÷'BA%č-/{׍á˙áŰÜMŤüމ˛ťśţi†8ŃŽ÷íĎß°e„˝O‚‘ő˛ _äÔ˛gQţeoť-{iË;왧ÝĆAK0űťŚHűźţČľ.ĚŹë—v=@…ö ą c™ň'ۇôŤ}ţ@۝Úm%ąţˆ™ŤÔÜö^kf$ś/ůz#ëHxÂěüšÝ?d„œ„iďÜíşý>PŤí/ݞűz™ľY1úţzӋ^ wßűrˆ†ˆX⚏S)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'IpľˇĎýÁĆĆĚ_şÔ7Ážú×ßóĂđKżôPŤ§’Ö‘´XÍÇôŻ—ő†ĺą‰ˆ%Şd2DÄŇ\<./c4—§ľ¸œTE.ĂĹ˝5rńůř1z.3ÜÇŠ_ôäđ$Ă\ůĎâmś˜ĹąüÜĎý=hVO%­#iąšé_/ë ËcKTÉdˆˆĽšxxÜfc™1ŤQ‹;˜XeŞń˜řýra_ůĘű7]Ěb‹XćŢüŽ^MLG4É˙r2#x #ő}(ý­ŚU”"Đý3<;#D3łŔÉ8ęÜŻ‘]ýËí /„”a^/ŞiTAjü yŚSFUŃ5ř.żˆYÜRT§RaEĚBƉšďYäř1 ćLt÷žW\+bŁ&d`„a˙œˆXúžČŠeϢüË2Ţv[öҖvŘ3Oťƒ–`övM‘öyý‘k]˜Y×/#ěz€ í3"bAÇ2ĺOśéVűýś; ´ŰJbý3WŠší˝ÖĚţHl_ňőF֑đ…ŮůsťČ;8 ӞšööÉĄo~'ěşç5ÝŘýýn°NHD,|.ÂÄă˛N=Ś0O `˜3Ž“T\´Kzç(nÁhžJlš×ÇĺeŒćň´ś—“ŞČeXَُF.> FĎe†›â8U⋞ž$Ÿëş›nW\Ő)ľ‰űjţsB"bi&^/ŤŢ°<6ąD•L†ˆXš‹‡ÇĚ:)"–ćâőLM„ýé˙ĺ˝đ–ˇ|s'Ä&îŤSw˝ćţÚ;,ü3O#I|ćeúgŒ5/ó<ëk>D–GYőąxŒúhyřóÝvEđŕČč1M´÷ĎügÝśă™V}ČźžůĚŢńgŒOőś‡—TĎř) ާL㧛ç"ó݉HŰńí‚nťwü8e?V^#ăGËcŸn^Ô|W‘ăâç{żNźńCDzí*bü”fć~Ń÷ţű[ßžůEÝzv_6"dŒ,ôĹüŠŰĂ7ýoßElÖůAD,Ś]D,Ž‹˙FÂąło†i‡ˆXœţŔÚŹ¨śIvűâćva‹e‹^‡r Aíŕ$L;.bé᪡˙8ĚžĄ[‡Á<ÄčqňÁţŇWź ˘!"–x.ëÔc ó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ćh.Ok+p9Њ\†5Š+0zkäâóńbô\f¸)ŽS%žčÉáIĆsÝtۋaÇŽ]ä&ěŤwŢyüĘŻü24Ť§m&1‹é_/ë ËcKTÉdˆˆĽšxxÜć×Ç~ĚÁÄęFÔâ&V™j<&~żÜĐ(-ţűńŕĹ/ě—nzœ‰ŤŻƒo{ůy@żĹQžÔô圈YH.‡@Ä,<ă§448~œ2 ŒŸnž łřë$bݎň1€lű0‹Ynú…7ŽŰuë)bÁö€Y# }ĎĎßđ oçuaĺćMŮ][˙TD,fRD,F’}H;DÄâôÖfÍ@ľÍH˛Ű7ˇ łˆX,ťˆXô:”kj'aÚý"–u‡žőÝΞ×ě8w˝ě>ˆ†ˆX⚏S)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'™Ć•żúú›_´iűę/ţŁ0€WD[=Ő\󀜏ĹôŻ—ő†ĺą‰ˆ%Şd2DÄŇ\<ƃ_ßǏSځńÓÍs!bD̢ŰQ2mF1KžŻ~çˊt“űŞ@0 !‹`¤ +g÷ÎÁÝßwż–Ů;ˆˆĹ´‹ˆĹuÉ;xƀˆX\ťˆX|7řŹö‰ˆ%ýz#ëHxÂěüšÝ? VÄŇk۞űß ăs;ľz K€Î55=7Üt ťŹˆX¸ŹS)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoęg\qř0LNNöóÚW÷íŰ ď|ç÷Cs°zŞžfc5Óż^Ö–Ç&"–¨’ÉKsńđ¸ÍĆ2c&V7˘w0ąĘTă1ńŽĄQęĎífżăo‡˝{wköföŐąš0uď,‡Ţ‰ˆYlŁ>Zţü bÇÍşî€Ú­ţa´=ź{ĆOihpü8e?Ý<"fń×IÄ,şĺ!cŮöał\ńö;`rĎLß6˜`ŕ!‹`äĐS Ţţś—ő˙U[š)‹ˆĹ´‹ˆĹuÉ;xƀˆX\ťˆX|7öŹö‰ˆ%ýz#ëHxÂěüšÝ?lŽˆĽwžű%Ż/ΚPă÷8Ż˝áf`żED,ń\ÖŠÇć  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷ú¸źŒŃ\žÖVŕrRš kW`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7šŻşş86šŻžý;żŁÁˇąX=•´Ž¤Ĺj>Ś˝Ź7,MD,Q%“!"–ćâáq›eĆLŹnD-î`b•ŠĆcâ]CŁÔŸŤeç{ݡ}ۡçMîŤÓwżßW­ĎJňů[ĆJŠ˜Ą"fÁc őA¸0üú68~œ2 ŒŸnž łřë$bݎň1€lű°‰YňĎfžĺśâTŢĘ"eˆE02°‡ˇźůÎnFď "Ó."×ED,FRD,fžˆX,ťˆXô:”kj'aÚkątOvŢń ł\ Ÿ’ÚW_s-ŤœˆX¸ŹS)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoÂyöőďŤcť÷ĂřáÉĎ9:νłŘLb–Ý/=Á(C„,‚‘@Ž6ěýĺ¸ňÎk:vąXvą¸."b1’"b1óDÄbŮEĢץ\CP;8 Óތˆ%7ĺoe)έ˝16Gđm,"b‰ç˛N=Ś0O `˜3Ž“T\´Kzç(nÁhžJlš×ÇĺeŒćň´ś—“ŞČeXَُF.> FĎe†›â8U⋞žd5Žž‰Çłs×îŽwűę=wß őÂęŠôŞFÇj>Ś˝Ź7,MD,Q%“!"–ćâáq›eĆLŹnD-î`b•ŠĆcâ]CŁÔŸËzÇí/îúÖżŻNžÁĚg~Ék˜†AÄ,h Eđŕ1 Š…ńŕסÁńă”i`ütó\ˆ˜Ĺ_'łčv”‡ŒdۇE̲óö+şőŠžŻ Ă˛F öß|ˆˆĹś‹ˆĹu‹‘‹™'"Ë."˝ĺ‚ÚÁI˜öćD,ůŚr`W‚‚]{öx˛•ćY5”˛"'ËZ aâqY§S˜'P0Ě×IŞF.Ú%˝sˇ`4_ĽNśÜëăň2FsyZ[ËIUä2ŹQ\Ń[#Ÿ?Łç2ĂMqœ*ńEOO˛WßÄç™Ýą˘ă˛ ŕ–[n†ú`őTU&b5Óż^Ö–Ç&"–¨’ÉKsńđ¸ÍĆ2c&V7˘w0ąĘTă1ńŽĄQęĎe˝ńŚÚWÇFŹź/y “ăĎ#ˆ˜Ą"fÁc őA¸0üú68~œ2 ŒŸnž łřë$bݎň1€lű0ˆYfoŘçsśl˝ţŰ|M_D,fRD,F’}łH;DÄâôÖfÍ@ľÍH˛Ű7ˇ łˆX,ťˆXô:”kj'aڛąä˜ŘsšÂÜÜž!"–x.ëÔc ó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ćh.Ok+p9Њ\†5Š+0zkäâóńbô\f¸)ŽS%žčÉáIVăę›âxڧg )9ręŐSIëHZŹćcú×ËzĂňŘDÄU2"bi.ˇŮXfĚÁÄęFÔâ&V™j<&žŃ54JýšA_}4…ą= ćsnf"fąyŒúhyřs‡ˆY7ëşjˇú‡ŃöđŇí?ĽĄÁńă”i`ütó\ˆ˜Ĺ_'łčv”‡ŒdŰ7[Ě2}Ő.F"dŒ$f÷íč'°M×ŮěEÄb&EÄb$Ů7)€´CD,N`mÖ Tی$ť}qsť0‹ˆĹ˛‹ˆEŻCš† vpŚ˝yKŽńšÝĐڰ/óDÄĎezLaž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9<Éj\}Sü$›˜œ„ڰoß>¨Ť§’Ö‘´XÍÇôŻ—ő†ĺą‰ˆ%Şd2DÄŇ\<@KQÇćnď˛LďeÖĽ DÄĎ(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dÝ"őm 0öŐhX=•´Ž¤Ĺj>Ś˝Ź7,MD,Q%“!"–ćâáq›eĆLŹnD-î`b•ŠĆcâ]CŁÔŸ›4Ëü:" A)bđÔKÄ,nŚU2Żg1 ĹeđtíľŒŸnž łřë$bݎň1€lűڈY*=S òFŘćęlę"b1“"b1’ě›@Ú!"§?°6kŞmF’Ýž¸š]˜EÄbŮEĢץ\CP;8 Ó>XËŔD÷"b‰ç˛N=Ś0O `˜3Ž“T\´Kzç(nÁhžJlš×ÇĺeŒćň´ś—“ŞČeXَُF.> FĎe†›â8U⋞žd5Žž)a’%ÍËAÂęŠFëKĚÇĆbú×ËzĂňŘDÄU2"bi.w0 ˆXš‹×354JýšCťOfŔů‚RÄ,੗ˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮöMł# ˛FÔ&llT؍bÄ éOlŽ"bŃʑí6ZBD,nBD,čXŚüÉö‰ˆĹ´‹ˆEŻCš† vpŚ]D,1\Őřđ…&ç"L<.ëÔc ó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ćh.Ok+p9Њ\†5Š+0zkäâóńbô\f¸)ŽS%žčÉáIVăę›&YŇź$Źžj´žÄ|l,Ś˝Ź7,MD,Q%“!"–ćâáqłĐ‰ˆĽšx=SCŁÔŸ;Ěű¤őƒk×Mź/y ň’"fAc(‚‡ˆYđH}.Œżž ާL㧛çBÄ,ţ:‰˜EˇŁˆE°ĺýćľůvƒq#Bú›ŞˆX´rdťƒ–‹› :–)˛}"b1í"bŃëPŽ!¨œ„i.KĘeDÄĎezLaž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$ăvm]űj<‹Ĺ ‚˜ĹôŻ—ő†ĺą‰ˆ%Şd2DÄŇ\< FĎe†›â8U⋞žd5Žž)a’‘ËH҄mVO5Z-b>6Óż^Ö–Ç&"–¨’ÉKsńđ¸ƒYĎDÄŇ\źžŠĄQęĎ–íĐw艘ĹÎS`ůxŰ.b7ÓŞ™×ł‹˜…â2xşöZĆO7υˆYüu1‹nGyČ@ś}3Ĺ,Á¨@„,‚Ń…łi‹ˆĹLŠˆĹH˛o6i‡ˆXœţŔÚŹ¨śIvűâćva‹e‹^‡r Aíŕ$Lűh‹XT)"–xž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ ŰŹžj´ZÄ|l,Ś˝Ź7,MD,Q%“!"–ćâáqłž‰ˆĽšx=SCŁÔŸťëbvëYŰu°Mź/yéf>ý@M_n‹˜…ärxDĚâŔ3~JCƒăÇ)ÓŔřéćš1‹żN"fŃí(ČśDĚ"Œ0DČ"M8›ľˆX̤ˆXŒ$ű&vˆˆĹéŹÍšj›‘dˇ/nnfąXvąču(×ÔN´‡ˆeĐâ–(ˆˆ%ž'P0Ě×IŞF.Ú%˝sˇ`4_ĽNśÜëăň2FsyZ[ËIUä2ŹQ\Ń[#Ÿ?Łç2ĂMqœ*ńEOO˛Wߔ0ÉČe$iÂ6Ť§­1‹é_/ë ËcKTÉdˆˆĽšxxÜÁŹg"bi.^ĎÔĐ(őçnĆşXGë™Űu°Mź/yéf>ýY@M_n‹˜…ärxDĚâŔ3~JCƒăÇ)ÓŔřéćš1‹żN"fŃí(Čś7-fF"dŒ4Œ ťŒ¸Ń ý‰CD,Z9˛ÝĆAKˆˆĹMˆˆ˔?Ů>ą˜vąču(×ÔN´‹ˆ%ąÄó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ćh.Ok+p9Њ\†5Š+0zkäâóńbô\f¸)ŽS%žčÉáIVăę›&šŒ$MŘ`őTŁŐ"ćcc1ýëe˝ayl"b‰*™ ą4;˜őLD,ÍĹ뙼ţÜÍXëŒf={ťś‰÷%/Ă̧?¨éËmł\€ˆYxĆOihpü8e?Ý<"fń×IÄ,şĺ!cŮvłi!‹`dal<؍_Ä éOl"bŃʑí6ZBD,nBD,čXŚüÉö‰ˆĹ´‹ˆEŻCš† vpŚ]D,Aˆˆ%ž'P0Ě×IŞF.Ú%˝sˇ`4_ĽNśÜëăň2FsyZ[ËIUä2ŹQ\Ń[#Ÿ?Łç2ĂMqœ*ńEOO˛Wߔ0ÉČe$iÂ6Ť§­1‹é_/ë ËcKTÉdˆˆĽšxxÜÁŹg"bi.^ĎÔĐ(őçnĆşX3ÜĄ)b;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮöćÄ,ÁčB„,‚‘„ąá`7|7¤?ąIŠˆE+GśŰ8h ą¸ ą c™ň'Ű'"Ó."˝ĺ‚ÚÁI˜vą!"–xž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ ŰŹžj´ZÄ|l,Ś˝Ź7,MD,Q%“!"–ćâáqłž‰ˆĽšx=SCŁÔŸťëbCĄÜ!*b;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮvłq!‹`ËCĄ;…ˆX̤ˆXŒ$ű&vˆˆĹéŹÍšj›‘dˇ/nnfąXvąču(×ÔN´o‹Jř$2Ľ Bb&!řB“Ƈs&—uę1…yÜq¤jä˘]Ň;Gq FóUędË˝>./c4—§ľ¸œTE.ĂĹ˝5rńůř1z.3ÜÇŠ_ôäđ$ŤqőM “Œ\F"VíF÷UŤ§’Ö.ˆůŘXL˙zYoX›ˆX˘J&CD,ÍĹĂă6ˌ9˜X݈ZÜÁÄ*SÇÄ7ş†FŠ?wÖĹúöŐ °ĎÄÜĄ*b;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚq˙ČńÓÍs!bD̢ŰQ2moZ̢sł$ "dŒ.°źˆ ҟŘEĢ•#Űm´„ˆX܄ˆXĐąLů“í‹i‹^‡r Aíŕ$Lű‹X߁CD,ń<‚aθNR5rŃ.靣¸Łů*u˛ĺ^——1šËÓÚ \NŞ"—aâ ŒŢšř|ü=—nŠăT‰/zrx’Ő¸úŚ„IF.#IśX=ŐhľˆůŘXL˙zYoX›ˆX˘J&CD,ÍĹĂăf=KsńzچFŠ?w3ÖĹ& b× ŠŻ§Ŕňńś]Ä,nŚU2Żg1 ĹeđtíľŒŸnž łřë$bݎň1€l{­b`„!BÁhťą‹¸ ý‰ÍPD,Z9˛ÝĆAKˆˆĹMˆˆ˔?Ů>ą˜vąču(×ÔN´ˇˆ…p,DÄĎ(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4a€ŐSV‹˜ĹôŻ—ő†ĺą‰ˆ%Şd26CĒ˙ ÔVKGüŻĺÉK˙ŁbÖ=ÂÝö)DÄŇ\źžŠ™°uŢCU‹5ˆ˜ĹuCękç)°|źm1‹›iՇĚëŮEĚBq<]{-㧛çBÄ,ţ:‰˜EˇŁ FĎe†›â8U⋞žd5Žž)a’‘ËH҄mVO5Z-b>6Óż^Ö–Ç&"–¨’ÉhBÄ•Ô+ž7ąřęZoÜÁŹg"bi.^ĎÔĐ(őçnĆş8ˆ˜ĹuCękç)°|źm1‹›iՇĚëŮEĚBq<]{-㧛çBÄ,ţ:‰˜EˇŁą˜vąču(×ÔN´‹ˆ%ąÄó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ćh.Ok+p9Њ\†5Š+0zkäâóńbô\f¸)ŽS%žčÉáIVăę›&šŒ$MŘĆ!"–bé^ľ­s `¤–¨iݎb`Stgv‚`%>n3˝ŠˆçăőˆXš‰UŚ‰ot Rî&­‹â1‹ë†Ô×ÎS`ůxŰ.b7ÓŞ™×ł‹˜…â2xşöZĆO7υˆYüu1‹nGyČ@ś]Ä,˛Fř}ƒ@ú›ˆX´rdťƒ–‹› :–)˛}"b1í"bŃëPŽ!¨œ„iK"b‰ç  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷ú¸źŒŃ\žÖVŕrRš kW`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7%L2rIš°CD, ÄŇ˝j ZçŔ I-QÓşĹŔíŐŞ$Z‰‹ŰĚ@Ż[Äâňăý#"–fb•ŠĆcâ]CŁÔŸťe×E/=@Ä,ŽR_;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮvł.DČ"MDÜ(ƟŘäDĢ•#Űm´„ˆXÜÄ6ą´T§"Ý?UžŰ”"b1í"bqíüšÝ?l# ÁŃDÄĎ(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4aCỏˆĽXşW­Aë\$Š%jZˇŁB÷#ĺŰFZP'8"槊R˙Z-ꧏęŸXş ED,ÍÄ*SÇÄ7şfÂÖyU-–î6ˆËę˛"fqݐúÚy ,oŰEĚâfZő!ózvłP\O×^Ëřéćš1‹żN"fŃí(Čś'‰Y‚†YŰÔ ~c"b!ýľrdťƒ–‹›QKOœ˘‹UZ +ŞůŤŽ?ĐţdűDÄbÚEĢץ\CP;8 Ó."– DÄĎ(ćŒë$U#í’Ţ9Š[0šŻR'[îőqyŁš<­­Ŕĺ¤*rÖ(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4a!ľ›žQ~5ŕ˜ţő˛Ţ°<6ąD•L}k˙TN}Ä'(é fę|ëK?.™ŔTAŻ­˝Xƒ€ˆXš‹×35śÎ{¨jątˇ$* ˆY\7¤žvžËÇŰvł¸™V}Čźž]Ä,—ÁÓľ×2~şy.DĚ⯓ˆYt;ĘCƲíąb`”!BÁȃşŔo(@D,¤żVŽlˇqĐ"bq#&bé‰OŠ€ QjˇnČJq Ua‹c‹^‡r Aíŕ$LűÖąTőCD,ń<‚aθNR5rŃ.靣¸Łů*u˛ĺ^——1šËÓÚ \NŞ"—aâ ŒŢšř|ü=—nŠăT‰/zrx’Ő¸úŚ„IF.#IR‹ ˆůŘX›üëe˝ayl"b‰*™ …ŢÓc„vy…!ޒĐ|"^ů4a‹îZ÷mü1š*-î`b•ŠĆcâ]CŁÔŸťe×E.B‘^ڈY7¤žvžËÇŰvł¸™V}Čźž]Ä,—ÁÓľ×2~şy.DĚ⯓ˆYt;ĘCƲí"f:!‹`¤AÝŕ7 "Ň_+GśŰ8h ą¸‰ątĹ&`Ŋo_Fű+-Žž'"Ë."˝ĺ‚ÚÁI˜vą!"–xž@Á0g\'Ššh—ôÎQ܂Ń|•:ŮrŻËËÍĺim.'U‘˰FqFo\|>ţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ ŠĹ†Ä|lŹMţő˛Ţ°<6ąD•L†ÝĎ´@ƒ{ÝxB­(bÁ9cŰŞĘrMBD,ÍĹ뙼ţÜ-ť.ĆBÄ,îCŢ"őľóX>Ţś‹˜ĹÍ´ęCćőě"fĄ¸ žŽ˝–ńÓÍs!bD̢ŰQ2m1‹@ BÁƒÚřń 鯕#Űm´„ˆXÜĈˆXta‰+ž}‹aěÄ‹m‹^‡r Aíŕ$LťˆX‚K FĎe†›â8U⋞žd5Žž)a’‘ËH҄…ÔbĂb>6Ö&˙zYoX›ˆX˘J&Ă|KˆOŒZŰăŢPâsÓN¨Î?ú'Œüńb€•ÁD,>˙: "–ćâőL̈́­óŞZ,ÝmŕŰiPÄ,îCŢ"őľóX>Ţś‹˜ĹÍ´ęCćőě"fĄ¸ žŽ˝–ńÓÍs!bD̢ŰQ2m1‹`ťC„,‚‘ľáă7 "Ň_+GśŰ8h ą¸‰ąXśˆXzyy(ˇ@¸}"bŃýzÚGe#Éş~"b1Ń ˆ…ŕ­"b‰ç  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷ú¸źŒŃ\žÖVŕrRš kW`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7%L2rIš°Zl8@ĚÇĆÚä_/ë ËcKTÉd„áotňibZPŇ•4şŠœ˝&^܂˙t’ňú׹4Żgj&l÷PŐbén›ś–Êńč>ä}"R_;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮvłś3DČ"M°o@D,¤żVŽlˇqĐ"bq# bą?xłbš/QÄŇOt˙8í‹vč×3Đ>j,IÖő‹‰-*b4|zIŞkŕ"L<.ëÔc ó †9ă:IŐČEť¤wŽâŒćŤÔɖ{}\^Ft=ô9WţŤp;ŻűE ˘SŃmôŒ’(ŽŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4a=a‡Ä|lŹúţő˛Ţ°<6ąD•LFKŒx{+JLŹ:PEÄBs†E-GݞĎ`Ö ą4Żgjh”úsˇěşXeD̂ńč>äý"R_;OĺămťˆYÜLŤ>d^Ď.bŠËŕéÚk?Ý<"fń×IÄ,şĺ!cŮvłś+DČ"QˆˆĽ0i7¸vą$ˇĎHŒˆˆĹśiąBíëęMĘżVˇO”Uj,w8цÂ'uC‹ś˜ýź~"bd ŻQ˜?ˇűą éĄĐ™Č‡s&—uę1…yÜq¤jä˘]Ň;Gq FóUędË˝>./cwďâ˙ mOkőĄËâTt*şžQĹ˝5rńůř1z.3ÜÇŠ_ôäđ$ŤqőM “Œ\F’&,vK€˜Ußż^Ö–Ç&"–¨’ÉHąÄżÄ.ď-ܟÄĎ ńövł˝t[ůţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ Kđ%×nŔ ćcc÷Ż—ő†ĺą‰ˆ%Şd2RE,~Îp˝B?'ÔysJŤřËĎ766ŠœrcĆ1ëEÇ AËő͏ccc0>>˝âMގ?ÇÇô/ţ ƒCď~k×j<&žŃ5śÎ{¨jątˇĄÝ3‹_€ň3łžŠ´ŰţY7Ó˘0üű\f ݔľË("ˇNZ+ŻL"őuýłâ>)CxŒXZ} 7¤žvœžׇě_(š˛>N ­>Zۋf:\tŰűţtęą:ë'^_‹ş]•š<@\óţőĽűШOčzYmďŔÇ)5~3íVŠ“-÷ú¸z…ZގÚţ2n}˝ó˝šˇ×ŻüKŞń BSŞű´,ęÓĎ(‰jc`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7%L2rIš°ôM%@*ăAĚÇĆ*î_/ë ËcKTÉdđűYŰŠ=…¸[<“‹Tú•RŔR'ވX|ďľůŢž “““055Ůýr{6R‘ű6 ą4Żgj&l÷PŐbénCłgć |ĄŞďó"fąá# őľăôýé/äűţ"fÁchőłD'hăljя%b,č­íěńÓÍ1‹@0ş!‹`$A=‹ˆöĚÓnă %˜ýĄ0şŒ°ţZ<#uý2ÂŽ¨Đ>#ą‰"ť}ĽSćöÖćÝőFľÍHZńčöe„ˆ ƛXô›ięúu¸ň;¸1×nůj‡.2Ď@’XÄĚUjn{Żu†¨Ť}Üëí¸!ëHxÂěüšÝ?d„œ„iĎ\{đZwâQţĽ ëoť]§m]ťvpJ‹DźÍ: Ťˆs&—uę1…yÜq¤jä˘]Ň;G1,>3íVŠ“-÷ú¸Š"ŞEîQ‘L°^ˆXZčŸ×ťřůśĎDP̢čToJuŁđcžQŐĆŔ譑‹ĎLjŃs™áŚ8N•ř˘'‡'YŤoJ™d”9‹äKŽÝ€AĚÇĆ*î_/ë ËcKTÉd8/#;^1|üyş0ellź´Ż­­ÁĘƊVś#j)ŢžréLœ>pć$LŸ;Ď\š†ß<đí°^–ç|ş?ˆŻÇČzßéŔxűŮu÷Œ‚[ö­ÁËŽZ;Ç`nnŽř+\Ä,ź7ˇŘujJ‹;˜XeŞń˜řF×LŘ:索ĹŇ݆iĎ,„#ô Ců…Şžß‹˜Ĺ†GŒ€Ô׎Ó÷§żďű‹˜ĄŐDĚ5~œ  Œ'F?–ˆY°7~´śłÇO7OÄ,ÁhB„,‚Ńś—śŒ°÷Ë+”7ëežČŠeϢüË2Äýˆż}a‡€=ó´Ű8h f(Œ.#섿ĎČc]żŒ°ë*´ĎH$ŠXZHpޟ9ś¨öđçB´ÍĘÓýXŠˆGśO!΀ŒeăőĎřľFďó ꏇőÖ>m,úç¤}˘őGĚ\Ľćś÷Zgh€şÚǽގ˛Ž„×(ĚΟŰýCFŘÁI˜öĚľŻu'ĺ_š°ţđśŰ%qÚÖľk'aŽ" 2ąŠ8aâqY§S˜'P0Ě×IŞF.Ú%˝sĂâ3Ón•:ŮrŻ‘Ť˜ĐŠÜƒă¸Zí/ë–aÇě,üČťß ÷ÜyLNšlkkëđ•G…ßúż ‹‹K05=C|aĽčşNwW —ajc`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7EňxŠˆˆEł6Vq˙zYoX›ˆX˘J&ŁŠ7ąô+ůĎĺű^.Héý4P/nţf’ńńńBIJ°°ŮĹ 0ůüQ˜8s&́™‹ç`úŇE˜X[5b<5w|mjl5|öŔűš‚7^s ŢrÓi8°wěßżżĚˇ÷ć*ofKsńzŚfÂÖyU-–î6Œ{Ś*Ţ^HŢ8”_¨ęűžˆYlxÄH}í8}ú ůžżˆYđZ}@Ä,QăÇ ÚŔřqbôc‰˜‹qăGk;{üt󜍘E eˆE°- "Ř3Oťƒ–`ö‡Âč2ÂNřkńŒ<ÖőËť BűŒD R5ËwŁý!^k}˛özăíöě§Ş}N`o\Ń Tی¤ĆŰĘ˙5\ţ/Çó=§ĚPob!mEąĚź[Ë/|b˛8b}š@`íÓƢNÚ'ZÄĚUjn“}яe¨Ť}Üëí¸!ëHxÂěüšÝ?d„œ„iĎ\{đZwâQţĽ ëoť]§m]ťvpĆř'âmĐ™XEœ‹0ń¸ŹS)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[î5rŐ%béňŹ./ˇ÷Ô řŮ_x/Üxýu¨k.lšďĽ÷Ŕţ}{á˙ň˙Ń.ś Ó33Ěr˙TtUBcĚůrĚ3J˘ú+0zkäâóńbô\f¸)ŽS%žčÉáIVăę›"y f.^€ö/,\u–Ú{âňĘ*|ä‹pͧ?Úä@ Źľ2řđł{ŕŠK3đ/9UôÉÁƒ“+”ĐED,ÍĹ뙚 [ç=TľXşŰ0ĎHł(OŒˆYŔŰvł`1 NŒ ń왚†]“SŽ‹o%q>ÁËüŽ™'ĎŕiăÄňe÷'EĚâ§Ć•×ČřŃÚî¸ÚžĹ,Á(C„,‚‘‡ˆX `Ď<í6Z‚Ů ŁË;áŻĹ3ňX×/#ěz€ í3͊X ׾őÎ[IZë06>ŮX¸}N`mÖ Tی¤Ć[|đ¸śÖů0˛oěşuë×2ŤŕŇBö„úÝÚF Ö[Ť0>=]|§ßL+‡ʛĂ`ű¨ţ^?­?bć*5ˇÉžčDz°ŽŁ}Üëí¸!ëHxÂěüšÝ?d„œ„iĎ\{đZwâQţĽ ëoť]§m]ťvpĆř§Ú˝)@db˝p.ÂÄă˛N=Ś0O `˜3Ž“T\´Kzç(nÁhžJlš×ĂĽ˙źľ÷b*ˇfÝĄ~řđU¤ˆEGîs¤í{⅓EŮ,ÓĔČ2g ńÖŤŹžęÇóË˙p˝5rńůř1z.3ÜÇŠ_ôäđ$ŤqőM‘<ž""bŃŹUÜż^Ö–Ç&"–¨’ÉHyK§5F;öĹĹEX_]ą“/ŔŘé“0vö$Lž= ť.œ…éü'‚´ˇŤźpăpvç°çÜ98rě!Ř 3´.xâIx~ńRÁUyüt󰶋˜‹qăGkťăhťˆY‚сY# ą@ŔžyÚm´ł?F—vÂ_‹g乎_FŘőÚg$šąŹ-.ÁÚŇ źýđcđŚ+žƒ?;y=źďé`fď.˜œ%ŰçôÖfÍ@ľ ŹvôÎsËʼ˰w|Üźë˜Ÿƒ;ĆĄ§ŻÉşO™ŐśŢʈۚ-mÝcŽŽż´˛_9ý0œ_8SťwoŁĄćvY?ýNmwh78íÖc‘s’´g9ŒŮ34ëú1Úǽގ˛Ž„×(ĚΟŰýCFŘÁI˜öĚľŻu'ĺ_š°ţđśŰ%qÚÖľk'Ą´xdť7č€LŹÎE˜x\ÖŠÇć  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷ę\ć—t8cţF•\XŇËmmd0>1~–Ńă)üŠ2×^s¸¸îÚŐĽř—ě…0E‘őÍO‹7¨iőĘĹ/ůO7Pőę׿(ŁÖ|Ń[#Ÿ?Łç2ĂMqœ*ńEOO˛WßÉă)""ÍÚXĹýëe˝ayl"b‰*™ ú>VycůD,ŤŤŤpţüyČžö\÷Ń?…ńĺ%áĘŻ~ö<~˛™öţů˘ÎOě\ZoÁZ ł{r &jgĐŘŘhÁÂňŹmlĎĚÓS07=i|Qń•ÓsđŕŠyxĹô ĚĚŹŔôôt%1‹ˆXš‹×35śÎ{¨jątˇÍX“#‰˜ĹŁĂ#bđś]Ä,X ˆ#TXŹŘ㇉žx >Ôţë‘ËĎ Ůţ‘ăÇĘkdühmw\m1‹@0!‹`d!"Ř3Oťƒ–`ö‡Âč2ÂNřkńŒ<ÖőËť BűŒDóobY[Z.ěß|ĺÓ0ŢŽâˇ]ý|éÔ8zi Ć&&alr ŕôÖfÍ@ľ ŹvôÎóŸZ™Ÿ‡™lnßw/ŒŠ18źw^vÍŒeĹ}T~Ěë[ž8Ś]xCuÄ)ŞŐ9śT痎6ňóVÖąľ:_OtÎ×fÚç÷ÂgO~ VŰ1Çvď)f(łćŤ} ‘‡Ýî˛xć$iĎsłăOˇuľ{˝7d ŻQ˜?ˇű‡Œ°ƒ“0í™kgÍUąÄ‰őšË:ő˜Â<‚aθNR5rŃ.靣¸Łů*u˛ĺ^+$bÉĹ$kë°žąű÷탗żěîb/űěçż—/ϡż„šAžlęóŹ÷„,W_ \šęŠ˘ĚFťě˜ľ˘ľmď­++˰{×.xĹË_Věџ˙ŇWŕěšó01>ăăm۸Q/ťí˝ˇ˘Ĺő}`ôÖČĹçăÄčšĚpS§J|ѓÓŹĆŐ7EňxŠˆˆEł6Vq˙zYoX›ˆX˘J&#őM,ňŸ Ę˙N> ëíýńś€%bÁ",ś$˙ňě"éxz^˛w†Ëí~¸pyŮč땵 X\^ƒý{fŰĎĎýű„=ťîżćbń&›\Ȓ#ć-,ĺŢżyWDwmHHű~žŃ5śÎ{¨jątˇÍX+G1‹'F‡GÄ,ŕmťˆY°'F¨0őŮă'€žˆĽń@ś]Ä,X ˆ?ZŰ—@ŰEĚ"l}ˆE0’ 왧ÝĆAK0űCata'üľxFëúe„]PĄ}F˘y‹nĎúQß}ÓcđKŢ+í/Ćföí…~ţŔÚŹ¨śIŤ?×W;Ż}žrîZËoňÚP?ťK+ôYodéޖ9odÉËkŞŁýáäÎkŕčü“°ž˛łł`?e9ík)p~RęŕőÓú#fŽRsŰ{­34ëú1Úǽގ˛Ž„×(ĚΟŰýCFŘÁI˜öĚľŻu'ĺ_š°ţđśŰ%qÚÖľk'Ą´xáë:H 2ą*8aâqY§S˜'P0Ě×IŞF.Ú%˝sˇ`4_ĽNśÜŤs…D,ëëë°ş˛ ““đ˝ßőíđ–żöF˜˜č#‘(bQřM•ďúa_ţ_ˇk^sĹ đŠ3×ŔÄň LĚL´şFŚř0 kłf Úf$=íSůOt?LĚ?˜;{y jG–uţ%ŮښV•~3Ĺldv[IŹ?bć*5ˇ=ךzš­Ť}É×YGÂkfçĎíţ!#ěŕ$L{ćڃ׺ň/MXxŰí’8mëÚľƒ“0Ćđşč€LŹ ÎE˜x\ÖŠÇć  sĆu’Ş‘‹vIďŰřĚ´[ĽNśÜŤqa?Ľ`[VWVŠż×žęđÎď{;ěŮ˝ŰČυ#?óÓ? ˙ŕŸţ*,--ŔěÜNăseĹ:pp?pqp˙žNZ._qŢŢŁ—–affţŢOýÍRĒ#­źí-ßßřÚWĂ˙“÷Çţěc°19UţŤołŐĐ]ťşŤWđƒ’Ŕ荺ŽŒ™ĹâăÄčšĚpS§J|ѓÓŹĆŐ7EňxŠˆˆEł6Vq˙zYoX›ˆX˘J&يˆĂŇŇR!ź|ů\źp.^şë—/ÂÝü/,ĂÂÎuŐĚÜ´ĂĽŒľ÷;vMĂVĆŇň(OgŻŹ­ĂF{ßďţːVűyćÜŇ8ě˜R°žž“Ý7ąĆüœůĹ}#PeÜAĹ*SÇÄ7şfÂÖyU-–îśëbĽPŘG+"fńÄčđˆ˜źm1 "ÄŐŔ?J‹IŒ'F?–ˆY°1~Ěś;.śź˜E aŒ@0˛ĐžÄÄsEŹń"bąlĚţP]FŘ -ž‘Çş~a×ThŸ‘¨ bAC]żüf“â†6ŢyĂ×aF-ĂęÂbńöť?TˇźCOöE?–"|{Çńö]9ž9ţ(l¨őNąüNŞNp—/˙ßĆĆ:Đýkľ7îü§űöâŘWü‹÷VĄd1ůň˙ç›VűËŸú‰żWtßŢbcçÎđžw~/üo˙čç`zj˛ÝŚeŁíŘÚ§źß˘FoÔudĚ, FĎe†›â8U⋞žd5Žž)’ÇSDD,šľąŠű×ËzĂňŘDÄU2œ~îŹůaDž…8yň<ňČ#đéOý%|ĺ+_gž}.\8ŤÝ7zć˙řáôę\\Ç˙ÎŽnŔ¨b˝Őň;¨Î›Yt\^éŽY*PÖŚÂ6ďFŃŤ' ÖŽŐxL|Łk&l÷PŐbén›ą.6RЌQĆú<Ş>ÂĺúăĎýŚ)óÄŕÖ ˙LÚHRmˇęޓ8ŸIŕŸo™ţB`űgnv íříÝvEđŕ ?˙ĄÚŽűgžű^(ێgZő!ózvŤ>¨?cü0Ç)>ę{ütń€.bqI ‘ńÓÍs‘Ař1š^ԘW5~œ2 Œ+Żţńcś_jšď*ó=Nş<?ßűuâ:†@0Ú!‹`ä!"­Ůnă %DÄâ&Şź‰ŠqýúŸqőËm˙Lń׺đő"˝sjžýşga}e Vőß7E ÖŻ!č+Á5tOĆĆÇajÇXXŸ‡żzäXXźÔQ–C˝Č?č\XźŸ~č°´ž“;vö’Ą{˝ąś8ăĂŰn+‰őGĚ\ bçĎíţAD,î)OÄBTŠ 21>ÎE˜x\ÖŠÇć  sĆu’Ş‘‹vIďĹ-ÍWŠ“-÷j\œ7ą?›°Ąŕ]?đÝpËM7B/ťçŽâ (ů—yëí˛9_.BŮX_o§×ÚůżÄnÁŢ={€‹={öśËl?m´ÖćČšŠŸ(j“ç1V×Vŕ;žő›ŕe/š;ȕˇáÝďüžvyU´­Ój /Żo!Ş D€1łX|ü=—nŠăT‰/zrx’Ő¸úŚHO‘Ąą$V!ÄŞÝX=üëe˝ayl"b‰*™ŒşßIJ˙‹6NzĄxŽĂżYĺ ‡ćŕŐűgż×˜ƒ{÷ÎŔ¨bŒń>lŸ•ŢO ŞśyŤ|Űы€ľk5ßčš [ç=TľXşŰfŹ‹ŐţrRÄ,žžđŢ$bŠËá1KÍŕŽŸŽ? :ń´ďąŔäéÚk?Ý<"fń×IÄ,şĺ!cŁ ůi!ÁˆÂł¨nH¨Í’ś‹ˆĹu‹‘ěÝđY ŠąäDă‡_ĺřžĺšgáĎO\ §ƋŸŸ@ŰÜűGtYFˇj‡"ě㓓°÷†ëŕÔŁÁÇ}Ź\ž\ŘßńĆ˙Ľ“h`˝×$˙ÁG~˝8NîÚŐ6ŽÁĄ[n/böęß¨Ć^S+‰őGĚ\ bçĎíţAD,X˘¸ŹS)Ě(ćŒë$U#í’Ţ9Š[0šŻR'[îŐ¸8"–kWŸ˝ôî;€‹ďűîˇÁăO> _{üë0ŐŢđÇĆĆ áIţ­oşáz¸ýEˇŔää$›/÷}ë7ż}ě xţÄ Ĺ>?– QZkĹŰX^|Ű-đ}ďř6ßKďžłhÓĆF‹\óu˜?o˝Qב1łX|ü=—nŠăT‰/zrx’Ő¸úŚř•›^F¸HžÄÚ%V!ÄŞÝX=üëe˝ayl"b‰*™ŒşD,Ś€˘sŢ źyd˛˝o왇ä/*ů…%XjšőÉwĄwLÂľłüýs3035 óK´0eb| &ÇÍo¸ą‘żĄĆmőóBşˆe0PZÜÁÄ*SÇÄ7şfÂÖyU-–îśëb=ČŔxĆÄ>r‘ŸňÄčđČĎ ˇíň3CX (ŰîüLL͍ŸBÄrźű&lü˜$ĐČřqbôcÉĎ a1€?ŘÜŃÚî¸Ú>Ň?3$Œ DČ"YˆˆE+GśŰ8h f(Œ.#섿ĎČc]żŒ°ë*´ĎHlޛXĘö­-tŇcůďë§ămˇ¸ů řż}I;{ ŚsŃ ýŃ5ô>÷3ďĺ2˛аç ČÇňÄĚ ěżé¸řěó‚Ýłă°kĆú3ëŐ§ÓçăSS°űÚkabzşl„ʐ;t@ƇvCkű:IŹ?bć*5ˇ˝sZĽŽÚ>ˆËF’œ—fŹđ…ŮůsťČ;8 ӞšvÖ\A Qˇú€Čİ8aâqY§S˜'P0Ě×IŞF.Ú%˝sˇ`4_ĽNśÜŤqqE,ņÚ}Í˙ŇŇ2ěÜš8‡ŸţÉ…ŸűĹ_.öť×žęp÷ˇĂí/žćfg!?üÎď)Ž‹‹Kđčׇ‡ý*üĺ§> “słđwŢűcEL.ňśäPyűň?Ć'#ŢáJˆcfąřř1z.3ÜÇŠ_ôäđ$ŤqőMń+7˝Œ$p‘|‰ľKŹB:ˆUťązř×ËzĂňŘDÄU2u‰X‰ľv].ŹoŔQĽKkC.d™œƒšéIX$޲˛{Ç4ň¸ Ý-â•~~§Äŕ ´¸ƒ‰UŚőźc™š xŘFëb˝9)bĺ‰Ńá1 xŰ.b,Đb„šACÄR:Š˜ĄŐ§îńcĺU?ŘÜŃÚî¸Ú.b`ë@„,‚‘„ˆX´rdťƒ–`ö‡Âč2ÂNřkńŒ<ÖőËť BűŒÄˆXňü‹Ovr§öAśűÚŇĺeÎÁÝ{ÎÂ#󝷲LNYCçź+Ë2˛ |íë÷˙̞=0}×nX:bqh×$\ąŰúŔąűژ+HÎîŰ׿+ĂŽ7v­ľąčŸ“ö‰Ö1s•šŰŢšŠ?ĽÖŐ>j,Ir^šąÂkfçĎíţ!#ěŕ$L{ćÚYsuTE,M>Ĺ ¤ç"L<.ëÔc ó †9ă:IŐČEť¤wŽâŒćŤÔɖ{5Ž(KÎ‡O} :\ěŰťţŐ?űeŘ97Wź‘Ľ.ĚÍÍÂËď}Iń÷žü>˜_\„ÝLMO?ý”ľÎ(Ć'#˝Pâî{(Ž ‹?Łç2ĂMqœ*ńEOO˛WßÉă)""ÍÚX=üëe˝ayl"b‰*™Œ­(bÉ13–Á7Úkˆ’%ßfơƧř{vLĂÄÄĚ/­?ĺ—ßJLĂŽš)˜Š|KŽÎ><ČkŚĘ¸ƒŠUŚ‰oẗ́ <lŁuą.˜ˇŽá/'E̢<1:<"foŰÊŀ1B5ŘăçcůĎ =E8Š˜ĄŐ§îńcĺŐ?~Ěś;.ś‹˜E Ř!‹`{@ĄŰˆˆĹś1űCata'üľxFVa§a×ThŸ‘¨IÄŇmXřú™cKż5;xPřá[‡đů}°2?ß~ô¸Čžčä+ŞÁÓ>eڍ/ţ(2OžZ.ţ tďž2ýÎ\uÎQÉč=jˇ•´úžœ“¤= Ěa̎?RísĆ }Ôő6’äź4c…×(ĚΟŰýCFŘÁI˜öĚľŻu'ĺ_š°ţđśŰ%qÚÖľk'Ą´xáëjˇŻá§Ĺ2ń‰jáóŻA|>ĺM2ł˘šÂŮq\´Kzç(nÁhžJlšW㊹Œľż4ŰhĄöÉO~ îť÷ž¨7ŸÄ Lb‘ dbcä?_đůŠb=›ĐÚŔűɈv5‘)."Š_ôäđ$ŤqőMń+7˝Œ$p‘|‰ľSACđŒ˜ĆÂú×ËzĂňŘDÄU2M‹XňŸť[[[+śĘ1Ď-éçĎ/Áńj•Ă3pëÎ)œż˝ÇLNlńOęŰŐß13 ;Ś'ŰýÔŮ7Ť~ůĐË úFiqŤL5ßčš xŘFëbÝ1 ÇĘ+“"fAcˆ˜€5~Ŕ˙…ź.F@ ׆ĽůsB”ŁˆYđZ}ę?V^ĘřÉž>Ěś;.śŠ˜E eÔ÷O‚a…Bˇ)‹mcö‡Âč2ÂNřkńŒ<ŹÂN;2ÂŽ¨Đ>#1˜7ąbťO”}‹Úţďů':‹/8WÎ-ÛŽ>ë+k°žźŹTdی¤]'礗Ě;ĐdL욇#űŚĘ?ĽĆŠzĚv(üZkcŃ?'í­?bć*5ˇ=ךz*UˆM;ôëhëzłŽŸˆXLˆˆƒ‚ ƒ›2ń¸ŹS)Ě(ćäs…łă¸h—ôÎQ܂Ń|•:ŮrŻĆ•"bÉ1>ŃyŁŘ—~ Ž>sś:ň6|ůĄŻçăÖżwđ-䆛ň!Á˜Y,>ţ@ŒžË 7ĹqŞÄ=9<Éj\}SüĘM/# \$_bíTĐ0ˆˆĽŮ˜ő´ľÂ]Kő›M‘kßž˝°wď˜œ˜.žĺ6ZP>ő˝!o\ZoÁâţw1˙‰ í€,Ö)b”w0ąĘTă1ńŽ™°'€m´.6e=˙÷3(ĎdT.wę!\Ž?ţ9iĘ<1¸u˘ŰŢߓ˛@ŒOxă|†fúăŸ;šţ㖍úŒU/Cˇ]<8čϋ¨śăţ™ç>Ęśă™V}ČźžÝŞęĎ?ĚqŠ‡úđŔń§ŕCǟ†äńă”i`ütó\dţušîŢůŽ jü8e?V^ýăÇl;ž>Ô4ßUäřřůŢŻoüŁy#‹`´¸Ń 6AÚ."×ED,F˛!KŮýăŘ ĘőŽŸ„Oş–ç'a|jşř×]ŞäȌśYĚfœ“^˛ŤÖűN)r,ÇâŠňg†Ü›4ô4CĆ9$Ö1sUD,ˆ?ˇűą¸§ŐD,DUkGZtpS&—uę1…yÜ|Žpví’Ţ9Š[0šŻR'[îőqy-KžĘßŔ’ďľç.\‚Ďţ‹póM7ĂVĆžđĹv[.ĂžűaŹÝśîVۇńO‰Ł7Şď3‹ĹLjŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4a žÄÚŠ a Kł1ëik…ť–ę3>6›˘ZŹ|Oœžž†ĂGކsgĎlëëë0?żcÝ7°Œľ}Ţp`ŹôW×(ďű‰ S+xšö߁ИÝ"?/TDÄŇ\źžŠ™°uŢCU‹ĽťmĆşŘ4Œ[WĆż´—7ł(OŒź™źm—7ł`1 Ξ€{ >xâé^M yü8őj`ü81úąäÍ,X (玼™‹ĄÇF"dŒ.ş-ˆXlł?F—vÂ_‹gäavڑv=@…ö‰Á‰Xzńt"ó°šÍf'Zđ˝7<żóäí°ś¸“;v ÁĆlfłNÎI/™vËVáS—ňg†ĘťşVqłŚtî,ĂŻ5dôŔŚŽŐ÷Ę% ŘłŔĆěřS¨BlÚĄ_OrŒűěÖř]żn™đ…ŮůsťČ;8 ӞšvÖ\K]H‹ƒnĘÄă˛N=Ś0O `˜“ĎΎă˘]Ň;Gq FóUędË˝:—ů6žˆĽ‡‰É Řąs'üŧ>íMo„ƒÁVę3§áŸü4ĚÍÍ„ö6kňC ­–űC43‹u-ů1z.3ÜÇŠ_ôäđ$ŤqőMń+7˝Œ$p‘|‰ľSAĂ@ "–fcÖÓÖ w-Őf|l6EZŹâOXAîť÷epúô¸pá\źx–—aMľ`cl Ć[-Č˝nn,îыë-ř…%2˙Ş™ xٞE`kd§Ë[űmőZôă&V™j<&žŃ56đ°ÖĹAAÄ,H+ŻLŠ˜!bÖř˙ň(Č~䣹obzƏSŻƏŁKÄ,X (玈Y°ÁčC„,‚Ń„"î‘DÄb٘ýĄ0şŒ°ţZ<#Ť°ÓŽŒ°ë*´ĎH §ˆ%Om˙L§ÄÜAŰ{ ĘűĆĂ'ŕ#ǏŔs‹0>= ců—QF,ô݌ˆĺŘyDűR˙´Đî™ńňŽN˝ß"w܀Œr IŤďÉ9IÚłŔĆěřÓ§BlÚĄ_Ď@ű¨ąl$ÉyiĆ ŻQ˜?ˇű‡Œ°ƒ“0í™kgÍŐm$b!ę\ŇčŃÁM™x\ÖŠÇć  sňšÂŮq\´Kzç(nÁhžJlšWçŞ*bɑ‹>ŚÚűíŃgĂŁ> Żý`+"ŻűÓĎƒ}B–y›•Ś0řď{:Ŕ…>YaĚ,ÖľäÄčšĚpS§J|ѓÓŹĆŐ7EňxŠlKb Ł!"–fcÖÓÖ w-Őf|l6E˝Ł ËĆŕĐĄCĹ_ŽŰn{œxá$~řUB~#ôî[ƒ_ţň}°ś¸Óťv•ąşt}R펉n_FŘŰ-ŰH X&ПRî šŇóÚ’ö -°Œ­úš'ZÄĚUjn{ç*ţÔŠ›včדă>ť5ţÉyiĆ ŻQ˜?ˇű‡Œ°ƒ“0íœ1‹ŮEÄRŇčŃÁM™x\ÖŠÇć  sňšÂŮq\´Kzç(nÁhžJlš×ÇE1nll€Zß(öĘąąüoœě›\°1>9 GŸy^[󳄧Ž> ăSÚ­AwÓ5R Z­Vń—/„ŮřxńóJĽOTß3f‹?Łç2ĂMqœ*ńEOO˛Wߔ0ÉČe$iÂyÓ ľS~Cb ůáUç–\D,ÍĆŹ§­îZŞĚřŘlŠšGBˇŤýLš˙äĐošNď?/žƒK—aĎŇě]Y‚ŠÖ†Sćěô#1,obé,{ńŻĆ—Ď›d“săÓ`ăEű.Ă+ž†/\˜€ńŠ)˜˜žŃYuŇîÍşe/“Úݤ2oFl_úݓóÓB™{єq§—yƒ´úžœ“¤= Ěa̎?m*ÄŚúő ´ËF’œ—fŹđ…ŮůsťČ;8 ӞšvÖ\Ëćܔ‰ÇezLaž@Á0'Ÿ+œÇEť¤wŽâŒćŤÔɖ{=\JS’ÚĹÖ××Amlô!?ÝŘhA66cíżLűŔc}m VVWáőŻ}5źóžŻňgŤŤ+°ź´ŤkŤ°Ţć]ŰX‡V.ŞéÖ7=6>“ă0ŃŢă§&§`fvŚŚŚĄ Ţőƒď„ óËđŠĎ|&&ĆabrŞŰĆ·h­ö—Œ*°hPÝzĺopQčţA˝•…1łXג?Łç2ĂMqœ*ńEOO˛WßżrÓËHɗX;ĺ7$Ö0"bi6f=m­p×R}`ĆÇfSđąŸ ťŘeŚŚ&‹7ł}z ._uM×_ľ÷Ü ˜^Y‚ó—`çŇ<ě[]*ţÂĂW^çÖ6 !é7}n¸x ś;:ÂƒZ™ŠˆeÜAĹ*SÇÄ7şfžśÓş8°˙2YÄ,H+ŻLŠ˜!bÖřńԙُ. KűŻŞÁńŁqÎÓľ‹˜Ĺö?VkühsGÄ,X `4!BÁčCD,–Ů ŁË;áŻĹ3ň° ;íČť BűŒÄ0‰X\{çŔvOš>;ކl˙âę=ˇ>ţŐX_„ńü˨ŢoŰí(+eAý.ą8dśÓUD,9ěŸ‚´:2>¸C˝N]Ç^9zN’ö,0‡1;ţ”Š›včדă>ť5ţÉyiĆ ŻQ˜?ˇű‡Œ°ƒ“0í™kgÍUąl.ĐÁM™x\ÖŠÇć  sňšÂŮq\´Kzç(nÁhžJlš×ĂE‰XrűĘĘ2ĚLMÁťŢůýpĎ]ˇĂůóŕӟý"|ü/>‹KK0>1QˆYňżőuXZZ†7ăëáGř’˙eôŇň,\ž …`$T÷ü(š€ÚĺzČżčŰącěÜšťśÄ"Łü÷ţĚÍÎÁG>öçSämmŠV!âŮŘX‡š™YxÓ^ßđʗĂţ}{áÁ‡…˙ř{˙­č—éé´ýޘ…1łXג?Łç2ĂMqœ*ńEOO˛Wߔ°ŃËH⌼hc4Łňk8DđŻ—őśÇ&"–¨’ɨ[ÄÂAžÎˇZ*ëEˇŢěoď­‹=oaq–`˝˝ß\Üą .ś}ŽuKěÚ1×ěÝçΞ…ONMÂą“ĎÁóçťoqYDßâ2’č^Đţ›XőM…w0ąĘTă1ńŽ™°'€í´.zc1 řëÄ#ˆ˜!bÖřńԙُ}#ąy"ŐÂÚ§đţČď_öż¸Ř3łßvísđGĎÝŤËË0™#ĽŔř2ÉlŸv•i˘DĂĄŞˆ%ţÓB`˝…@‹ţ9ŠtopK{Ě\Ľćś÷ZăO— ąi‡.ÂíŁĆ˛‘$çĽ+źFavţÜî2ÂN´Scvąl.ĐÁM™x\ÖŠÇć  sňšÂŮq\´Kzç(†ĹgŚÝ*u˛ĺ^Ÿş˛ ë+ëđł?űÓpËM7śÝťvÁő×] ßýßŸţěçáCů<óÜóĹś´śśŻ~ĺ˓D,Ş}0ů2\źxžÍłU‘ `._žTüMNNž=ű`çŽÝQőĘ}üŻ˙ ,.-vŢĚ29^,~yűżĺÍolˇő~˜šœ,ý_÷ęWÂŐW^˙ř˙° +0=3ˆŔ˜YŹkɈŃs™áŚ8N•ř˘'‡'YŤoJ˜dä2’4aÁ÷Pͨü†Äüëe˝í㱉ˆ%Şd26CÄâ‹Űy+‹ů6Żýű÷Ăž}ű Űęę*ĚĎĎĂÂÂb!pÉËÝpĂőĹ~–ăÁ‚;vŔ‰öyŤ+čoďŮs‹—a×ü%ŘÓ>î\^„}íżVőÇŇĄB.œM^‡“э8ÖúŰxL|Łk&lŕ `;­‹›ľąŠ˜üubˆD̂Ć1 küxęL‚ěǎˆĽ÷&–ĄŽńŁqÎÓľ‹˜Ĺö?VkühsGÄ,ÁčC„,‚Ń…ˆX,ł?F—vÂ_‹gäavڑv=@…ö‰á~KYśkhy¸Ă2˝˛]×@ßqýÓđ‰WÁŅq˜˜š.~Ą÷/Łéöuo”ČëŠŐšž'秅@!7˜™g IŤďÉ9IÚłŔĆěřSĽBlÚĄ_Ď@ű¨ąl$Y×OD,&FGIJiök`œx.ëÔc ó †9ů\áě8.Ú%˝sˇ`4_ĽNśÜkäęnŹvąüç„ÖV7ŕ Ż˙†RĢ#pźá5ßPü=uôxŕĎ>çΞƒ÷ţ蝣E,óí/Ýňažżĺ¤ ä˜3gNÁů çÚ_(ŢŇÂEޖŸú‰Ë—çazjŢňÍo‚{ôżĺć፯{5|ü“Ÿ†ńvćovąáýŕÍđř1z.3ÜÇŠ_ôäđ$ŤqőM › šŒ$nPŠ6F3*ż!ą†C˙zYoűxl"b‰*™ŒŚE,ÔĎ őLxžBíîĎMĄ—ż‚{îš Ž?çϟďźÉeaÖÇÇaqn,ź Nś}r1Ěââ<štœ>} †v36V.ƒZ[„Öú ŒÁŒŐřó? 7ďl˙wşď Ýľu ‹Ąľţ6ßčš xŘNëâfoŹ"fbł 1DĚŔ?˝:ÇŠÓĎwE,áh{ĺńăm`ü81úąD̂ŀrE mˆE0š‹ecö‡Âč2ÂNřkńŒ<ŹÂN;2ÂŽ¨Đ>#1Œ"ĺöGďUÂyj÷ ëř$p˙Cęźĺ řšÖaj×ÎÂŢęŠYĐąÜ9ąěŚÍř RáhrQţœŽŢŰ‰ ép‡dđúiă#fŽRsŰ{­ń§I…Ř´Cżžä÷Ů­ń¸~˝2á5 łóçv˙vpŚ=s폚*"–Í:¸)Ë:ő˜Â<‚aN>W8;Ž‹vIďĹ-ÍWŠ“-÷ú¸|Œëí/Ŕڧ'ŕűżűmÂM7\ëÇŢSě§c"–\`röĚIX^^.ŇŠ?EÄEkcΜ>óó—áŔ+ĘŮÂDűËÁ_üű—]żw~ßŰáӟýŹŻ­˘B–róö@D,¸…Ëĺ&ŤqőM “Œ\F’&,uÓLgEqUęľ!„˝Źˇ}<6ąD•LFÓ"–´¸Ú/CĚâłĺ8räpń×Ë^+~Ţo ćşosY€cǎÁÁő‹°ŽĆ` X_†ÖüÉö†ŰłZŤűWŽßŰů Ľ|oúžĄ\[˛Zëoă1ńŽ™°'€í´.ËĆ*bđ׉!F1 CÄ,ŹńC|žę…ĆŐąďř) Ž'hăljя%b,”sGÄ,ÁčB„,‚‘…"´=‹ň/Ëű:j/ma‡€=+÷[<(Vߌ°[§ ŁË;áŻĹ3ň° ;íČť BűŒÄ𿉥¨c÷wĆ{ölj'Äâ•Wœ=žž0ł3uż`ęq÷> ăŠXĚLęţĎ é@ŽŠ6Ÿj)ă.Ď˝~WĚ\Ľćś÷ZăO‘ ąi‡~=É1îł[}Ĺş~"b1!"–ú€nĘÄă˛N=Ś0O `˜“ĎΎă˘]Ň;Gq FóUędË˝>Ž˘ˆjĄĹÖVVacŁßó]ß^ü”1"–ĹölgϞ*ţEuó_D™XY^†Ž?ű\;vňî%bę˜÷Ů;Ţţmđ_ţŰÁÚÚjűËś)-ˇ{/ÓŃ" náršÉj\}SĘ$ŁĚ‰”˘ŃŒĘoHŹáÁż^ÖŰ>›ˆX˘J&c˜D,}! /–O¸˘Ű{śVŤo›l?×Nś÷ŸÎžÝą_sÍa8~üřo§áüÚ4‰ü ,jţ4y~hvvLNĂÄřXńC:꿗čí×0Xëoă1ńŽ™°'€í´.nŇڇEg‡ˆYŔ_'†AÄ,h ł°Ć$ě[Ş÷sBGAŻłˆYŇvď|G×1˖łŁ ˛FŠHĐö,Ęż,Cě稽´e„öŹÜgń X}3Ân*Œ.#섿ĎČĂ*ě´##ěz€ í3›!bŃnhQg¤?6o˙L'wî Œí˝8Čo~~äÖŻÁ/|~/ŹĚĎĂĚŢ˝f7Bcn0ŔÇrů˘r?`D܃(NČŽtqěąuD=ĆO"QőՋéă#fŽRsŰ{­ń§G…Ř´Cżžä÷Ů­ńϸ~ĺřŻĄ}"b1íÚÁI(-^řşÚí ÷Y߁ܔ‰ÇezLaž@Á0'Ÿ+œÇEť¤wŽâŒćŤÔɖ{}\>Ć|ÉVh{|Ë_{#4óçÎÂĽKť)˙ šĐĺâĹKpîü9XČ˙…ůŇ"ŹB›ÎżČ‡Šé)Ř1;WˆRöďß{÷ě ~Ą•÷—˙ÜĐÚę*ěÝżęơ~ӛŕƒţ8œżx&&z˘ĆĚb]Kţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ Kß4CBí”ߐXĂ!‚˝Źˇ}<6ąD•LĆ E,=á‰/n–)r)jÂŽčązč|°ďčěě,ěŮłîŢy ţüü­ŕĹĆ ´.Ë7^Ŕ1śăJę’lŹĚżM߀żôŕ%ŘľëpŃŽ¨űžŕĽťśd1´ÖßĆcâ]3aOŰi]Ü̍UţEr‘‡™,b$Ž•W&ÊĆ1 @hü8> "–çâbłŕ@Úîďčz"fقb`”!BÁhCĄ§–=‹ň/Ëű8j/ma‡€=+÷W<(Vߌ°[§ ŁË;áŻĹ3ň° ;íČť BűŒÄÖxKałf¨?ü*HÁ5ť—áuW€ż8u Ź/ŻŔÄô´ž{#¤Ěš°ąl‹XüíˆGů3CÚO écŃ?'ím|7ĺřÎsł3űkŁ}ÔX6’äź4c…×(ĚΟŰýCFŘÁI˜öĚľłćވXL ú ܔ‰ÇezLaž@Á0'Ÿ+œÇEť¤wŽâŒćŤÔɖ{}\˝B-…÷ŮĆĆzqzßËî&~'ůžyîěXX¸ Ąď‘ć/ĎĂsǞ‡“'O y^ţˇ¸°§ĎœŁG˙*ýŠ+Ż€k\;wů߸réň…öwv°ďŔÁZ˙5wŢw/ż÷%đá}˛čSŹ/íˇ˛ˆˆˇpšÜd5Žž)a’‘ËH҄Ľoš!ĄvĘoHŹáÁż^ÖŰ>›ˆX˘J&cĐ"–>ˆöľX>Á •ç{;‹ţ&\řŇŠÓÜÜěŘąŻ˝ň<|ůœ[§ßĘâqŒôKŤ.ZKgŰ.uţ€‹üm,Żš~ćfgŠv5÷6ˇîÚ:ĹĐZ‰oẗ́ <l§uq6V"fIŽÝö2)b4†ˆYBăÇńń ą \%ˆYp m÷Îwt=łl11‹@0Ę!‹`tĄĐS˞Eů—eˆýľ—śŒ°CŔž•ű*ŤoFŘ­S…Ńe„đ×âyX…vd„]PĄ}Fb¸D,˝ΜţŔÚÜăX8Ů9Ÿ˜lzÄŕ]ˇ<Ÿ;uVç'`br`l ěŸ*? ̐1€ˆXú6âúE˘˙3C˝~/h$°ë§UVśź4ě ód9ŒŮń§Eěúi‡~=É1îł[㟜—fŹđ…ŮůsťČ;8 ӞšvÖ\‹ |ÍjčŕŚL<.ëÔc ó †9ů\áě8.Ú%˝sˇ`4_ĽNśÜëăň2vĹ—c*˙ňkXlJążL:î ,.Î{ý/Ď_†'žxΞ= ŠX[_‡cǎ€[o˝vy~BhĄ]§|ŠŘŕ‹ŸŰć;f‹žT­đ—{"bÁ-\.7YŤoJ˜dä2’4aÁ7aŁ•ߐXĂ!‚˝Źˇ}<6ąD•LĆf‰Xüq­'D1K'Ž2bâ"ť>YaŰťw/\wř|×ĺ/ÁZSx&Ś!ŰwDŁľ°şMbçä|÷M/ŔľGn(ÚcŁ>QKwmČbh­żÇÄ7şfžśÓş8k˙ËIł¤Ö‰n{™1 CÄ,ÜśƒgyŕŘQxŕůgJOšË3~JCƒăÇ ÚŔřqbôc‰˜‹ĺÜŮvb`„!BÁhBĄ§–=‹ň/Ëű6j/ma‡€=+÷S<(Vߌ°[§ ŁË;áŻĹ3ň° ;íČť BűŒÄVx ŕmÎŃűh닝ŁőűŘě˜jÁwÝđ4üî“/†ľĽ%˜˜ŰÔł ´¨âOE„w4Ɵ*ďҔ;$ƒ×O1s•šŰŢkÍěôşfž1îł[㟜—fŹđ…ŮůsťČ;8 ӞšvÖ\‹‰Œ°7tpS&—uę1…yÜ|Žpví’Ţ9Š[0šŻR'[îőqéŒÎ—eZ˛ˇĺ<ţľÇaeeŚľˇ–aŕ~ytáÂ9XX\ꓥ\@óďĂsĎ=çĚŮőő X^^k×g­ű– čkM3ƒÉÉ ˜šž€Ů™)˜˜/Ë悘sçÎÁľ×] ˇŢrKű–żgČë6>>{öîƒ8mÎűîńŻ=˝›öď\ Nňbô\f¸)ŽS%žčÉáIVăę›&šŒ$MXúŚj§ü†(žÄć4 ˙zYo•yl"b‰*™Œaą¸ÂňaxăŢ;vŕo3ᾙdqać/_Î?BFó—áK~ćç/܋KŤmŰŹŽŹux––Šż••UŘčžĺd|l ڧ§`nvśřťĐśMOMÂÎ]ł0;;U~iřě3ĎÂůsçŕĽ/yiŰ>‹ÖăňĺK095]üdAžś/,ĚĂÇ?ńq8úěó:z…,á.äÄčšĚpS§J|ѓÓŹĆŐ7%L2rIš°ŕ›°ŃŒĘoˆâKlNłđŻ—őV™Ç&"–¨’ÉK}‘Š?–OĚŇËďÄPNL,/ë}1Ńľi‡=˜jďmŻ{íkŕӟţ,ź{ć‹đřĺýđčüUp|y,lĚŔ:ŒC2Ôԉ‰1;'Ö᚝Ëpǁ¸m˙ěÜš ^ýęWĄ?Ó#ZÉźßlÁ€žÜë:Čx=S3aOŰi]Ę˝˛˙夈YRëDˇ˝LŠ˜!b§í(Ěú”"ƒKÄ,xŒ~,ł`1 nühmgŸnžˆY‚ć!BÁČB ą`ta'üľxFVa§a×ThŸ‘Ř*"–2ŤËgzöÖÉ/tJĚ€lĎ ‹ąv¨ż~ë×ŕWżrŹÎ/Âôî]˝€QŃž(‹˘iB°ZČ?'í­ r§ŽŽ) Ěa̎?*ÄŚúő$ǸĎnő 9/ÍXá5 łóçv˙vpŚ=s폚*"ao čŕŚL<.ëÔc ó †9ů\áě8.Ú%˝sˇ`4_ĽNśÜë㲍/ĆŽü_:ˇż(:{ţ<|ös_‚…ůyxÍk^ GŽ\ăřrž /żď^Ř˝{7ZŸ‹çĎśËMĄ_–qÚ~ěŘóđ—ůIxřŃÇáôŮó°gď^Çż ,ooź‚ ţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ KßTBBí”ßŗ؜fá_/ë­2MD,Q%“1L"–Ü7˘P~˝{UĹňąÝ0ь-ąë’‹R_óšWÁĂ?ă/œ„›fNÁŤ=w^8Vú´Ú÷Đ˙dîíđ_§^l0|őÜ |Ó5§ŕęë°sÇlń4˝ŢtíĹ'aßžƒp÷Ýw•oˆŤ˙m,Ýľu 뛵ţ6ßčš xŘNëâPî•=ôżœ1Kjčś—Ił 1DĚ€^/@ęÜö1D,ЈYđýX"fÁb@ÜřŃÚÎ?Ý<łÍB„,‚‘„""bÁč2ÂNřkńŒ<ŹÂN;2ÂŽ¨Đ>#ą5E,şŻm;xWǖĽ˙ ˛ť]‚{ö…‡/NŔÄě ŒONvbô^Űlß HĒĂůiĄ ď÷úiăĂ;WÍť>ą`vţÜî2ÂN´gŽ=x­;ń(˙҄ő‡ˇÝ.‰ÓśŽ];8 ĽĹ _Wť}áţŔë›öŚ€ĎKÂÄă˛N=Ś0O `˜“ĎΎă˘]Ň;Gq FóUędË˝>./#:×;Ć\Č137ŸţÜWŕâĹyX^^†ťďş^ňҗ–?ÍÓÚŘ :.^<[Ôű)ą|ö󟃍nxçĎĎĂÂÂ2œ:sž9vVVW`|l˛ąü_”OÂd{Ÿk6Öű™Ő*겜śZüäĐů6ç™sçŠ}~ýáÅf׎9ŘżWńĺÖĆĆ:|îóŸ‡űď9ěAÄ,y]s1ˁCWBz´Z-xđË_†‡ţ |ţKŔ#_{]yLśű˛ě[}Ďe]Kţ@ŒžË 7ĹqŞÄ=9<Éj\}SÂ$#—‘¤ ž ͨü†(žÄć4 ˙zYo•yl"b‰*™Œaą”wˁ7ŽčŕZň{ێ(Ĺz’ę}aˆWL>[Ě2;;WěO?}ž}ö9˜xáIƒsŹÝ†ť7ŽÁ…Œů?FĎZđÝ7ž€“ë°kçnă'ţ0ËX{żŸ™†Ýť÷ŔUW] ‡$šÓ~BȎzn°ÖßĆcâ]3aOŰi]LÚŕ€ČЉ/fE̒Z'şíeRÄ,h ł ×ËÂĎ=ŁýœViŤ>N -–ˆYp m÷Îwt=łˆ˜E ŘˆE0Ú0öšŒ°‘č–!öeÔ^Ú2Â{Vî—xPŹžaˇNF—vÂ_‹gäavڑv=@…ö‰ąčÁťšunęÚ_‚?‡§ňcˇ=˙ë§÷ÁÚü<ŒíŰgV Żř0ÓĚڍ7FÚľˇÖ×!ĺO uŰÔzŽý…™őAĄqýş7˘Ľ=fŽRsŰ{­ń§@ďő+‘yƸĎnr^šąÂkfçĎíţ!#ěŕ$L{ćÚYsUD,&2ÂŢ T”™G¤źš|ž@Á0'Ÿ+œÇEť¤wŽâŒćŤÔɖ{}\^FWţ˙Ő˝ËđČă_‡“gNĂââ2œ>s ^űÚ×?˝Ăą,..?„­§‹‹‹đš/|Ąąll(8sú\¸4?ő4\nďÉ“E=fw섙™ăË/Ź!š°$Ýäq—–ŕą'Ÿ„§NËnşVW×áęŤŔřřXą‡éK_†WžâčĎ ­ŹŽÂŇŇbń…Ÿ˝>ČŰňÉOţ9<}ôYřř_|śáěŢťvě¤~’ ŕÄčšĚpS§J|ѓÓŹĆŐ7%L2rI܈<6šQů Q|*hŘř×ËzkČcKTÉd łˆĽ‡1KĎżC‘1Mĺ-ŤÇwß“Á5ׁš;ŕěĺ 'Ÿ…JYöNŻÁ•űŚáĹ/žŽżţş˛žŚ%+W:ßÓź^ąř„-n^7â@–3úş"^ĎÔLŘŔŔvZ“ƒ`ć!ˆ/fE̒Z'şíeRÄ,h łQ°ƒXź‰…ŽłŢvł`1úąD̂ŀ¸ńŁľ=~şy›*fF"dŒ.Œý-#ě@$şeˆýľ—śŒ°CŔž•ű$ŤoFŘ­S…Ńe„đ×âyX…vd„]PĄ}FbôŢÄŇCëäçM–=7A6{bqpÇ|óľĎÁžżƗ–a˘ýe™SR‹@űň›ĺľt!‹ýÓB­6W65އ):>łîV {Ëź“ŁŽuǔć0fǟţx×/óŒqŸÝ˙äź4cáöřö‰ˆĹ´k'Ą´xáëjˇ9n‘śáöÁ#ž T'‘Ś0O `˜“ĎΎă˘]Ň;Gq FóUędË˝>.Šą÷1ÜÝmŐţƒ‡`rjΞ> úĄOŔë^u.^źßúmo…;v‚7şĘĘçúĽRţö’/}ůËĺĎ ĺ"–Ó§ÎĂńNĂăOm—mÁž˝ű`×îÝ019IEp,š°dśýĹÜěÜXßł—/]‚Kíú~ńĄGඛolďĺ ŽšöPńóIyžň•‡ŕݏČ@ťěE˜™™ ţkxŕ÷Ă_? ţŠ/ŔÚú*8t¨¨{Ż–ý†ĐőĘţęÇâÄčšĚpS§J|ѓÓŹĆŐ7%L2rIš°ôM%$ÔNů Q|*hŘř×ËzkČcKTÉdlKąb–^™Z-Ўř/ň†–Œ-fɅ˘9.îŘ•˛äßĹÜyç07GďŠÔJŽPžat#d9łÖßĆcâ]3aOŰi]L:Ŕ=Ő¸)Đżœ1Kjčś—Ił 1DĚhÁ\ÄŇű9ĄÚĹ"fÁ´Ý;ßŃőDĚ2Œb`„!BÁhÂŘ×2ÂD˘[†Ř‡Q{iË;ěYš?âAąúf„Ý:U]FŘ -ž‘‡UŘiGFŘőÚg$FPĢĹťę•Pžďć'áĎO\ K 0>=m|Śţ”ăkßúň2lŹŽÁ {o.íą(Z:w|7ďťžşřTÁ=ŢŰh7ž˝$yĎ읫1vf ×5 \WúzIr^šąÂkfçĎíţ!#ěŕ$L{ćÚYsUD,&2Â^{ˆEui ó †9ů\áě8.Ú%˝sˇ`4_ĽNśÜëăň2FsŠB1=3 'Oœ„?űÄgŕ5Ëkđ=ßł#XryiTŤ…~ąôřăÁĺ˗;TçM,GŸ?O}Žk : Sí˝ŘW/ŇÚÍĘ0ű(ފrúÔIřęOÂj{_ĎŕşëŽ,ÖßĹvŸ|ę)xŃ­ˇ:\šĐ%oC.Šń!;ÍWz >ůW_€ÉÉ)¸ęđ˛îŞÜł!şm˜[ô\f¸)ŽS%žčÉáIVăę›&šŒ$n8ž ›0m˝†(ž˙Ÿ˝˙“$šŇÁçŠ3+ł˛˛˛tŤj­ĐÝ@70ƒŒŔ 9œĄÜĺ’Ç]j.—Ă=’¸ĺ.‡b7ˇw{ˇKň¸Cޒű9rwˆŃ3Ŕ@tC5Ѝčęîę.ŃĽ+K¤!ěÜ=„ťš=3f枕ů^}YöěŮ˙ĚĚ홙ť˙á.r7@Ěóeą5¤Ą1‰ĹޤłÜL$–ŽĐ^„űÄË #6•ĚŇŐíŢ5 žTŒ˝°Öˆ_ ŘjÝ㺤nF¤—H‰%/­ÔQĘďĚ­[2ećßŇ}â ]9nsÎvŇźčěôŹŠĘ^4š9Éd×:éŰŢK2™őÁdYŇ$ŮL_çtۙ̂ůH|1™óvă'ŐvňřéäÝ2 K˙JXXúX˜Ä‚Á˝Ć>ĺOĘĂ*Ź´#ĐčÓ<Ú'%ú›Ä'—>ˆ˙`ý řĘĐ@ňčŰЏץž˛š¸t ąˆf6—W`´:wLݕd:Křś™;aŹ6áͿȇŇ˝˙”Ň}؞Řčq rŽkÎńFtíc‹,LbŮ ąwĽë$­*'§`>&+?ŰKoâŢ9‚ZĐĎŤ“3ćĹa­ąt Ő‡`vß\űsďéWĎ+ŤKíđĚü-./ÂÉSÉk Ž][†SgĎÇ$–ąń1Řŕ‘Ä]Üg˙ts~„uŕŕ!…ă'OÉÓgáňĽëńÓ[˘'łœ={6Źë Z׸ 9őĹĚě„Ůš˝fKŽĐ˘u,ĚĹČ Ď:8 I?ŹDĺdÚiÄ)`Á°NakPXá‰\Ĺ ó|Yl ihLbą*é,7#‰%-ŃZA}bHÖgRVhąq{5żűľżţ6€Ůő5đ— z$š6wľQ…zŁ?M~úXç|9ë°{EtćÖ-™Î2óoé>ń…ގ9g;i^tvz×TÍů´ąI× ńëͲ}@¨W満 ×IľÇŻgČŞŔŕƒZ'}ۓľ3ČńŃĆÉ_k)×Zđëv˛}€díÂvr-XßvĄÁÁE]K×vÜ>0ěçĄ×v<3Sm^WŸŠĆ>&ą„ÚńC§řxH‹aüô%ŽĽL 㧓§J`žł‘śă]h t}¨”)jüčŰ^ĘřIĺ‘ÇO'Ď*ޅĺřŘŇëż,,7Z˜ČÂҡÂ$ ŽI,Rňf"ąÄ_+íż‚Śîœ‡#c‹ĐX[‡VxqυÄÉĆĘJ\ţÁšÇĂ m•‚vR*a}Ű÷˘ ‹}›UŢŸi_i=Čő–b;ý: ăąfKş˝9Ճ’őŞ'Ĺ*“Xda‹~ŕäZzaĺgŰaéMÜ;GP ZăyurĆź8,#˘–Čč-á ¨č 'O=ůx.Ććć&4ÛVňďŘąˇĄűKđőőM8{ţ2źűţIŸ‡˝űö‡ËşşŚ'„ý( RvJů3Ÿ }‚“œ‡ľľ ¨†účľBďż÷>Zר Q[ňäé'? SťwÇO Á¤Eęú@´Že‚™ yáY‡!釕¨‚L;8,˜ÖQ˜Vx"WqÄ<_[C“XŹJ:ËÍNbIK—d˘}ŎĐű3•Ăô&2Ëúúzü}úýˇ  ôˇŽštuĽoĽÖIŸ¸¨ĐžŻĘžśI,%řJçî¤yŃŮéÖŽŠh7äťzý4D™ˇ˜ĚH^˛†ts›tͅÉ,=ľŔqôűzčľĎĚÔG›×՛ÉmË)Ä ›d2 †ƒŽŸNž*Lf1׉É,,,7‹0‘…Ľ/…I,“X¤äÍFb‰Răă?ž†"$şĆőďyZő ŘX^U 퍯­C}u îÚ}/L N‚hŞ7ľĆ†*0;Qƒ=ă5ŽŃ—čŮHmî}š›P_Y麡‹U]l5“XŇučÍ!¨”„Źg‹ÜŽüţŔëË$ýŔÉľôÂĘĎśĂқ¸wŽ ´ĆóęäŒyqXFÄnüš‚Bóڂ´śŐjď&ďťçnȓľ5éf]÷oqić/Ď÷ěćçŕŘń÷atl öĚÎ)821Ĺ0J„Š\"‘‘ŃaxëăpîÜĺ˜ŕ‘YŽ]ż+ᚊŐyƒđkőűďť7śm!}ʍ ‹KîŤ'„C,ĚĹČ Ď:8 I?ŹDĺdÚiÄ)`Á°ÖˆÂʰš ×{ˆyž,ś>44&ąX•t–~"ąd%Kj1‘X°r:źŹű^­Vâ5}uh6j°Q€•ęœŹÍŔWk÷€ľTĚoiż˛Ü>'îŽsŮWí„:SŇYaËřJçî¤yŃŮéÖŻ í>˘ÝOěuX”ë†Lf$/YK şšÍd-–‚°mÉ,ż{:Mb!Œ&ł 8čřéäŠÂds˜ĚÂÂr3Ȱ°ôłänrťI&ąHIÍĚ$W‹čf)śŠ>ă+ݎćšÚ9Ł{ 2uА[Ś7ŕC{/ĂwŻ Bssރƒ=yík5š°š´ťjpxňśöë2ĽvŔĚř@ÜŃßŘp.-Ôa­Ţ"ÔN„7›phâ\Zž—W/Cep(źnXƒř]–ŇcšS˙ĽôńďăąnÉv=˝fěŁý?&ądôŞ'Ĺ*“Xda‹~ŕäZzaĺgŰaéMÜ;GP ZăyurĆź8,#˘5Vűą˙QľÂq,…˙5ÂőŹQŻĂíˇÝ###š(ëő tM9u2yĽĐĘęźóţŠř{ôjőć”\ŻTŽŹ5LA ĎQzfv.ž?o˝ű80 ““ăáâŔšóç᎝îR0667`Ě2::‡€“'OÁćĆTŞŃj­ĚíÚ_)AˆÖąL0#/<ëŕ0$ý°•Ci§§€SŔ:„­Qa…'rŽ-öó|Yl}hhLbą*é,ýLbQ%č­{BC.UJJ€ĚęÓéî÷ńńńřďűž€oMŒÉœőüÖĺ‡ŕíŐ9°Ž}eŔŘ36áÁ#ŁńYŠ"ąĐĽ3ˇnÉ䕙K÷‰/tĺ¸Í9ŘIó˘łÓ­_Aeďz;9íDťcŁKhÔĹČţ@¤÷ďÔG×>Đ>m1)“ŕÄ* V'Ő>U'ÉGZ]/Ô:éŰŢKjú2őŻó!8’ŻT}%3¤žY?‰}rÜőmOŐGń‘ŞOŞíč2´=ą×÷a­RŸźý ĆŻ´ÓŤ,pş†.KIď MĽ/YƒçňÚœYY†Ł“SŁô ŹßÔöÔ č~=úYk5TCÝřé)J?ŠÓƏâ#ńŐ~Ý!ŕ‚´Ýďč|ŇľGúPŠ!Ţ3mOćĘ<'/Â<'/MŚŰN?–'Ldaé_čWd?h×WTßÓ=äčƒŢş‡;Ĺęhô™Żƒ 4z}Ɵ”‡UXiG Ń§x´OJěœ'ątżT<eȟťç-xĺë{`ci FwďŠo3őëęŁ~‰ě٧ŚöĚŻŻÁmťÚ Ľcq‘ޤšFą\ß܀ľőNF`2 .HۍńŽÎ'Ŕd–Hfaaéga" KŠ@ż"ű@ťŽ˘úž.Đč!GôÖ;Ü)Vß@ŁĎ|\ ŃkěSţ¤<ŹÂJ;>íŔŁ}R˘ßI,["ÚhżŰ[„΂J Š’ńačÖ÷áWOŢ ›Ťk0Đůőštą,ŹGň  ~ÍOc}ŘóŒ ŒĆOgÉĘĚx ŮR…7ś*l$zzĘ@ľî}ž{ćťP_^†Á‰‰nľÔM_tĄ2¨ {Bů@z´5vĽxü˜Ä’ŃޞŤLb‘%ĐčAŻľí†‹Ž“´Ş|œœ‚ů˜tŹül;,˝‰{çjAk<ŻNΘ‡eD´ĆĐŘÜ / 6ŕŔţýáßĚLMÁž™Ý0ťgö„{Ăż•ŐŐ\¤z˝ŽŢ\ş~íz›äíYÇO~ăáÚ5ŢDKK`ž2ÚÓęۤ­:˜Bš†††a4ôýÖ;ďĂ]Go…Z­m—–`j×.ŔڔGdůŠ˙Qřc?÷Ópiţ \ž<—çŻÂ|ř}ţÚ58wţœ9{˘çÜ *ő3Špˆe‚™ yáY‡!釕¨‚L;8,˜Ö!l +<‘ŤpmąƒtăŢ<_[“XŹJ:ËN&ą¤ýŠ?TĐ F\ÁžÄ’ő{ǡÁíˇßÚóńÚkŻCpňÜ2üřőˏÁ‰ľ IÎŤ…ć—›ąĎfŤ)-ôAŚžŘwL˜Ä‚/t%RsîNšnÝ j”ÎňĘd–üÜLf°"#ä´˝h2ËKçáďžđR_Y^żz%ţŒÉ,ŚqšéxĺŽSŠŢ0~zŠǏⴄńŁřH|1™ó˝yƒÉ,,,ŰS˜ČÂŇ×"´‰öF]ˇž˘úž.Đč!GôÖ9Ü)Vß@ŁĎ|\ ŃkěSţ¤<ŹÂJ;>íŔŁ}Rbç=‰Ľ+­ŤÇÚVĂť&@‘ňSˇ_:{Ž­TĄ:4˙şşwńOj_­F6WV`fdöMňJĄŃÁ ŒWŰŻđ^w°^`'"ţ…řîѸeúV8˝p*~R%Şgoě č‘RtąŽĺî5ŔÜҎŸîxƲ”ÔĆĽě ×çezl'FJBÖޞŤLb‘%ĐčAŻńĂE×IZU>NNÁ|L:V~ś–ŢÄ˝sľ 5žW'g̋Ă2"ÚÖK´`s}ĆFGŕóíż„ŰnŃŻ§ŃŤň¤Ů”oRuĺň•ůŢ÷őľM¸rő:LďŮŐjrúĺObIK÷†şîVŤU‹ŸÂ˛śiĎLűqÎ 055Ľ 5š|wĄŸĄpŽ^1ýeĺÄÉÓđ˙˙3,ŻŹÂŕđí Â!– f‚bä…g†¤V˘r2í4â°` XkDaVXá‰\…k‹=Ä<_[“XŹJ: “XpŚ'ŹPmŇObIlEo}Œt?üě?°^zéeřŮŕexáęřúő;…3çG#9D–+ËíóăčÖVl_)Ä$–’}ĽswŇźčětëWPŁtś×LfŃßäMTLfą"#䴝É,zŮ 2‹Đč1ŒŸž˘ÄńŁ8-aü(>_LfÁ|@oŢ`2 Ëö“›{ĺca1ˆĐ&ÚtÝ:Šę{ş@ه}Đ[ßp§X}>óU`pFŻąOů“ň° +í4ú´öI‰Kb‰¤˛÷‘ř/(˜ÄIľŔŸ˝çMhÖëńÓVŇőKŞŇŢđm..B5ü~˙ěĂaş…v䞉ZOŸîýh3¸°JšA–‘č"dłwĎÜ ĂŐŘX^B/ öb;S§–ńXcWˆÇOwź cYJjăRö…ëóĆ2=ś“@Ł%!ëUOŠU&ąČhô ×‹Îřżá˘ë$­*'§`>&+?ŰKoâŢ9‚ZĐĎŤ“3ćĹa­ąÂ5lc=~ÉöŸüQ#‰%’ě+€0iľšńM¤ěßb¸VvĺĘľč <ř ި!xüF×kŔ˙¨ůŒ|†u¸téJř˝VWWWĐşˇ ŞfČybËmˇ˙ӟţńŤ›ę+Â!– f‚bä…g†¤V˘r2í4â°` X‡°5*ŹđDŽÂľĹĺˆ(ş>44&ąX•t&ą˜ýu×$“dóUű •‡BŔŢŮ=đÉůa˜žž‚;Ć.Ckń @} Œ~s^-tuľÝŽfę|5ĐÔÓçi,Lb)ŮW:w'͋ÎNˇŐ šHď|?Đć%’s}3ÎŁ\_Tݧ¨ö†Ř*~MD_'Őż"ŤƒjômOÖÜ ÇG'Ś\ŁŃwéZľŰHĘ5d}ۅ§+]2ËFӞ$š-$ŐöˆĚrbiĄŁOéăBęÂ8ĹÇCƗ0˜tŽťÎ‡÷řQʔ0~:yŞćšiť1ޅBׇJBź‹/NœçJ?Š<ňřéäĺĹťlo9~XXúP˜ČÂҗbZl˜Ä’ŃkV&ąl/K$­ëÇă?ązʐÇçáŢékP_߈Ÿş‚mŹ˘'ąDŻcx`öQŞĄd’ŠŃ0ŻĂ-Î\x[XkBŁ%ŔEڌńÝ˙hűŠ0™%UĂΏěrOT¨ƒA“X2ú@Փb•I,˛0‰E?pr-˝°ňłí°ô&î#¨­ńź:9c^–ŃäĆ0Ѿ ѡ‡¸ň¤RɏŤVŤýĎ쿕ĺĺžÍüŐk0YŞÉŻ@ú‰Ž!`” Ç8˝W›n#a·@+A%&łl„ë=V÷áĺă?ÔîăŚáé˘óEëX&˜ Š‘žup’~X‰Ę!ȴӈSŔ‚)`­…Ya…'rŽ-.GDŃőĄĄ1‰Ĺޤł0‰…î/Đ˘#ł݆ Cj `pp|đ~xěŽŮĐ´ ­ĺsáÇ&h%ç‰, ëí_;7-o6ćs˛yšuK&ŻĚü[şO|Ą+i”šswŇźčět[­ ŞôÎű™Ě˘dU´›źzržv˙ËdԇĐŕt…É,)Â8ĹÇCƗ0˜tŽťÎ‡÷řQʔ0~:yŞ0™Ĺ\§›‘ĚÂÂŇżÂD–ţeĂĚ$)ŠYP™Ä˛}H,i}0´+ţƒQ ˆ¨o‚•„Uůó÷ž˘Q‡ÍťԍŔ6ŮŁšąőĺŘ7ąöŒíў•jxÓof|ݧ5CŒ…5‡§ąô¤ýT–ÉĄI¸cúhŽŻC#ü }KçQŇ(Rv죯QęšMt„I,˛žI,r;ňűŻ/“Xô'×Ň +?ŰKoâŢ9‚ZĐĎŤ“3ćĹa­ąÔÖć=Q$’Z-˙‰,ŃŤŠâĚüml&kđÂŇJLŠ(żŕN­łú*EÝUáX‘ďč),WŻ]ëÔ%€zىÖ=nSŽPúŚFčădŽÎ1˘ˆ ”°ń…ޤQjÎÝIó˘łÓmľ‚v$˙ć$“Y˜Ě’͐ą1śÉ,ŢÂd-–„ÓŃ2~:yŞ0™Ĺ\'&ł°°la" KОAf‹”Ô, LbŮf$–@>ŽÍs/Hbő˜dăü)¨_Ÿ[ůS÷ź#ÁÔWÖzłš´ÍzŢ÷a¨VĐW Ő*05RIş1HžŽ7Z°˛QĐ VX§JőČžGcKD°‘nşŘ<‰Ľ—ę/ćĐăĘ$YĎ$šůý×ˇX‹Ś$Ńu’V•“S0“Ž•Ÿm‡Ľ7qďA-hçŐÉóⰌˆÖX¤ÖzI ů'ɧ\A %UEŃY.ÉŠĚî ąj5&ąTş¤JýËáË3A1ňÂłCŇ+Q9Œní4â)†€ő[Tá"&Eisƒ“ž†ÓИÄbUŇY˜ÄRŒ?Á#ҧýęŸÄŕ6Đ^‡Rü”˜Č˘ŤrÎë…ć—Ű$ÖVŤŘ›ŒÝ:3‰Ľ_éܝ4/:;uŻmůc‰É,(„ŽN,&ł€Ą^Lfń&łhą$œŽžńÓÉS…É,ć:Ý$d–>&˛°ô˝0‰%Ł×,œLbš$ź¨bP=đ”ôŒî“,և`ĺÝWÂ66ÁF†řw˝ ÍÍM¨ŻŽBc}ękkpëŽŰazx7Jb‰dďD­}Ô6żäóJĄŹˆ¸ăƒăp×ôĐÚŘ븖äf;śŁ†“M‘-ŒW&ąČz&ąČíČďźžLbŃœ\K/Źül;,˝‰{çjAk<ŻNΘ‡eD´Ć2´–ˆUŻ×smtO4I?ÍĽ6T38O­Vm4ëçĚĄÚ`Ä2PŤ9?‘esÓňő…iąL0#/<ëŕ0$ý°•Ci§§€SŔz„-Şđ #ęŘ5VRřNCc‹UIgaKąţ°uĘůI,ŠtžÄ22:׍žĘŇZ×0Y.-´×Éb‰,šu+ć¤ěü[şO|Ą+i”šswŇźčěÔ˝ś[3~#a2 ĄŤ“‹É,`¨“Yź…É,Z, §Ł/dütňTa2‹šNLfaaš‘ÂD–ž&ądôš“I,۟čeąą˙Ac (ňŻßšŤË°ţÁq°•OÝzöŹŔćň Ź/\ƒŃQ8şűńk|ÔÚO Wat°W;ţ%wˇKĂυľl4Š>Šj“Yn›9 ťÇĄžź ÍfęŐEŮW ľÚ5KJ'_HǏI,=ޗhQ‹mäư ˘´­ŁO}( Ý mnÎďźžLbŃœ\K/Źül;,˝‰{çjAk<ŻNΘ‡eD´Ć2´śŁh6óIž˛FPé<‰,ó784Ôłlť-}m­Ú˜3zŃů§­œšď‘Ukh݃Jţ)"ĽoĐ>ąL0#/<ëŕ0$ý°•Ci§§€SŔz„-Şđ #ęŘ5dx%Źá44&ąX•t&ą”ç/ëˇMpIíę5ObÁ¤Z­FV09”YŤëxJLrńz{Ôí7LuĂë*”§Î”'™ůˇtŸřBWŇ(5çî¤yŃŮŠ{mˇbüĘ.ňoN2™%˙7“YŔP/&łx “Y´XNG_ČřéäŠÂds˜ĚÂÂrŁ„‰,,}+LbÉč5 %“XnKüš|6ţk­_Š|őĘ=đúő}°vęXXfl$şHö—îűŹ/.Äd–‡ćžˆ_E€Ý„‹ŽłĹOcÉęŁ:‡ćז‹|KJƒ„|4ôӄͥeČžb(ů Ţří¤ăMËRR—˛/\Ÿ7–鱝|0‰EýJšŕ‘m_~ŕő˝YI,ô¤U°hó1éXůŮvXz÷ÎԂÖx^œ1/ˈhehmJqţü9ȓz=ýŞV*€˝šgb|˘g39:;oľšxm­Ú˜3z5ŮÝ_„OOOö+Ł##hÝŤAţ)bƒĐ7J ‡X&˜ Š‘žup’~X‰Ę!ȴӈSŔ‚)`=ÂUř…ˆÇuě[)Ö I,V%…I,ĺůĂýŇ|aŻjYچ3ku'˛9OdšźŘ^'ÓOdĄ<ń —ÎÜş%sRfţ-Ý'žĐ•4JÍš;i^tvę^Ű­ż_RŠÉ,(„ŽN,&ł€Ą^Lf! aœ2™2%ŒŸNž*Lf1׉É,,,7B˜ČÂҗÂ$–Œ^ł@2‰ĺć!ąDúĘĚ}íżń@‘ńš9řgď~˘{MËďź śr×ŢMx|ď<Ü˝ç˜œh?‘Ýc5¨Uƒř0t{´űT–+Ë h”vŢýT–či1÷ěž'źĆ¸5ůi5ÉCȰĽÂ%=[&ąČz&ąČíČďźž7+‰EőMPŃ ˛ĽV~ś–ŢÄ˝sľ 5žW'g̋Ă2"ZcZŰQtď!}őŤ_ƒŤáE2“Ź,/CžTÂ_ŘŤyŚŚvőlŚŚ&ă'˘´2ë¨nÎ×KÎč5dˇšÍ¸GöďëVFÇĆŃşWĚ7ç"Y^1÷MÔˇ_ ű8’ SuëX&˜ Š‘žup’~X‰Ę!ȴӈă bX°E~!âqDťćĆ ­ŇLbą*é,Lb)Ď_$ęÓIü|u‰,űÇ38-œ¸)óYć—Űkžđ~ľPgnݒ9)3˙–î_čJĽćܝ4/:;uŻíV’XĐó&łŕş:i°˜Ě†z1™%Or“Y´XNG_ČřéäŠÂds˜Ě²Ւ•’…ĺfă™Ńk6ŻLbI•+Ť}Rb‘XČí ¤J´Žü ýehŠDfߡ._żżyéař™Ę+°qů Íůó_†/œš§sóMíĽJ3cŐä0Dü•N•ëu€…ő’žĆŇ?ĺ֙[ŕâĘ%¸ś˛•Z Ş5‰‹’)Ňk‰€ä[ę#)h<ŽÇ™Gp=0‰%koœť˜ÄŇ՗.‚¤˘dK/Źül;,˝‰{çjAk<ŻNΘ‡eD´Ć2´6Ľ¨ B}sžýÝď…7ÁLMMĂŽ]“066ăăá_ř9ŽÁęZţŤüŞ•*ԑ_XĎÍÍÁ[o˝Ÿ™šŤĐ‚î˝,Ń]|z`ů’3zs&Žři0˘Îő˛vMM%̞”T ŻZ]]ƒFŁË++°şź[–ĂϕđsaaŽ_żßúÎ+ąm-Z“síƒDPŒźđŹƒĂôĂJTAŚFœÖ¸đx„-ްš :žc×ÜXĄUšI,V%…I,ĺůĂýŚvő1Á÷mĘč8Mgü„ë'şJç<‘ĺÚj{ѧźĘP/šU€ÇÓ\ě|őRĽĎƒřBWŇ(5çî¤yŃŮŠ{mˇ”ÄŇs ˝Sü$r‚N0™ěőv˛ şN—ţ1—\Śsa,Ťé­wďdńŃľâóTzeœXĽÁÂę¤Ú§ę$ůHŤ‚řÉČŚ~ĚŻ“ží˝¤Ś!S_"šŚ‡ ů¸KfH}ł~űÔőYmŰSőQ|¤ę“j;:† mOěń>ě’Y~ńŠ'`¨şý~żž_ȧ™%ŠČ['&•ă†+1˝ţ1ŤśtźP{Ăřé)J?ŠÓƏâ#ń홴ۤíĆxG瓮˝ć˜ÚĆ{ŚířxÓˇ]?ůóiü¤ÚN?źźx—íuŠ…Ľ?„‰,,;BDᅩž§ 4zČŃ˝őwšÉ2¨>óU`pFŻąOů“ň° +í4ú´öI‰~'ą‡öŠ>?ŘţŹE††`ňŔ~ř?.|>2}‚w_ƒÚô\xÍ­F*Őáb룰wä\\ʼn3ł“5*AŻG{C üriysk.ZˆößĂű‚Żx6——`hr*Ü v~%—žZĐ E€ěœ9Ţ-Ń9‘PműĚŘʏKŮŽĎËôŘN>”„ŹT=i,3‰E–@Ł˝^¤ćEt}‘"H*ZaAśôÂĘĎśĂқ¸wŽ ´ĆóęäŒyqXFDk,Ck3ŠčFUt3čÄé`}cnżíLMŽĹĕů×ŐGŽÜ÷Üs7˜¤ámŞ1:;ťk°šY‡ĄĄA˜…Ľ•őřAô:"Ăá P­^Z9ýůŒlćöîŃŃářŚZ5lëŽÉ]荱*á‰,—.]‚—_ţޤk[VáÚÂź÷ţi8ń2ě?p(~jYěƒDPŒźđŹƒĂôĂJTAŚgŽ+…!`=ÂUXáĺ>Xŕ3)mąĐęÇ$Ť’ÎÂ$–ňüá~ÍžL䕴t‰,Ggk2Ść‰,yD–ëkmŒ–óY:së–L?™ů÷L”4JÍš;i^tvę^ŰBbé9äĆaţÍI&łčoň&*&łX‘rÚžłČ,vd„׎Îǟśd–žMQd&łŕ‚´Ýďč|Lf)ŠĚÂÂŇÇÂD–žŃű/ŁďérôAofňD§ ŞĎ|\ ŃkěSţ¤<ŹÂJ;>íŔŁ}R‚ŸÄ˘ęT í; `xzš&ü‹Ó‡Ďßů›°vň-;úŠôŮŐű`ysě˝WÖć !äQ#ľ LWĽQÖÝV­l4aucŤgŮ~ĹĐpm^żđ&Ô××apd,kÖ;zťpt 9ÇŐăx#óŽĎËôŘN>”„ŹT=i,3‰E–@Ł˝^¤ćE}‰g4‚¤˘dK/Źül;,˝‰{çjAk<ŻNΘ‡eD´Ć2´Vƒ˝>`fϸxůjřw-ŒżöSdžk0:2#ŁĂ0~n6|ěcςI*• T›dэłĂ‡Ă{ďż§o=´žě=¨×ë088d Ó ™iPiúŤŃ¨Çż(䁝Űpáߞ°ýäŠTüj!ÂYŢ=ţźöĆ`uu5ü[‡ĺŐ5Xߏˇ_OԹٽ{‘ÄB˜łtsľÎČ Ď:8 I?ŹDĺdÚiÄ)`Á°a‹*ŹđOĆ+fRÚbĄŐI,V%…I,ĺůĂýşűĘ\şkßŢŠa*›ńşŮvŃ~˘Y¨”ËWŒŢÖ+1~Ó靚uKڟĚü[şO|Ą+i”šswŇźčěÔ˝ś7”ÄҕÎ6łóёü›“LfŃßäMTLfą"#䴝É,a2 2o{QăGń‘řb2 ćěĆOŞíäńÓÉc2 KxŽ,,},˘÷_FßÓ=äčƒŢúƒ;Íä‰NTŸů*0¸@Ł×اüIyX…•v}ځGű¤“XT} ľož{!ţk]?‰ĘT`×áƒđÚúQřöľŁ°~î=h,]Í-ťŇŘ gVˆżGůŽ˝ŻŘ읬i7s—Ë~Ľę4şŘxhň̎î†úĘ24ë›IvKЎ_öx ŐČůx#óŽĎËôŘN>”„ŹT=i,3‰E–@Ł˝^¤ćEý֞ÉWKAśôÂĘĎśĂқŞ!ÁLP sĚź:9c^–ŃËĐÚŹąńq˜™Ý#Ł#P o`UałŢˆŸ&rćěExă­ă𾯿›››'ѓ΢ ™żŁwŢŐł™›†‘Ą!¨‡>„ňëlÝ(07˘EčÄČWäsz×$Ü~ËĄ¸çŁűöíGë\%<ľmccžúőoĂë?xNŸ˝WĂ>‹ú."Őj0öéoÇĆrěƒDPŒźđŹƒĂôĂJTAŚFœL뜨 řdźb&Ľ-Zý˜ÄbUŇY˜ÄRž?ÜoqžŇ7g&ÂýAľ’˝N„˝(´Ščɚ+ő ÔŃŃlëٙ[ˇdúÉĚżĽűÄş’FŠ9w'͋ÎNÝk{cI,„ëČ5VŐ>Đć)žLǖtýR˝^ŁÚÎ󅊃_sŃ×IľÇűQVĺ÷c~ômOÖô ÇG'@š¤?î26Ćś„m*ĺľžíBƒÓ•.™eŁšU?2´ÂńJľ="łœ\ZDěőq!őaœâă!ăKL:Ç]çĂ{ü(eJ?)Á$UŻ'ąD˙U<˙UŚŽ‚ NLŔÔáƒđżž~V5Xy÷U0í@[˘ ÇŸ M’ sťF–at`5I†7ŞjŠ%$HţŽŽ4`óFœ(‰ö¨zhßĂ1ń:zĹPü+űîqMˇšs÷O$EA{źSw 72ŕúźąLíäƒI,ęW&ą!ÂŐR-˝°ňłí°ô&‚jH0TĂ3ŻNΘ‡eD´Ćҡ6 ĆÂđČ(ěŢ3 sű÷ÁÇ`ßÁƒ0ťovĎÎÂÄŽI¸ś°gϞÍĹŠÖÚŻ+ĘţMOOĂţˆ0ґűîźDł ›Hě %-ď–HG!ąDÉŘWł?ô̇ڪĐńÔÔTLäÁę<@ ˛œ9sŽ/.ÂÄä$잙…={÷ž`Ř{ĂöFObÉAéĚZA@1Ë~Őĺ‰Ď:8 I?ŹDĺdÚiÄ)`Á°a‹*ŹđrcČݘIi‹…V?&ąX•t&ą”ç÷[’ŻpIŞŐj0ĺ§č^/črŐ0:/Ž$zĽ_ŹË(šuKڟĚü[şO|Ą+i”šswŇźčěÔ˝ś7–ÄŇÂu&łŕş:i°˜Ě†z1™E¤íšÇ‹É,Z, §Ł/dütňTa2‹šNLfaa)S˜ČÂҗ‚/”Ŕ$–Lĺ$Ő§x´OJ0‰E՛I,ńÇÚĺößćŘHt“h,ź)ˇ:şţÝŮCcé:ʟ_kzĺaXmNeQŕČř{ńˇčU{Ć:Úö]Kł)zěś^ÚŻŞ ÂCűˆŸČR_YĄż(Ý0ścYJŽ_"Lb‘…I,˛25(z0čˇöD†îB“Ä,kŹül;,˝‰ ĚŐ0ÇĚŤ“3ćĹa­ą ­ÍĂRˆIč‰"ƒCC0:6ăă044Ǐˇ×>“T+Őř•ňď‘Gí˝Ž`fzퟅĆfő:ůf ČţQú+´‰|467áÁűď‚űöBŤCîźő–ŰŃşFőŹ=}üý÷âžűj4îłŢ+„°šĘĐçymČ/a1xŒxÖÁaHúa%*‡ ÓN#N Ś€ő[Ta…G|2^1“Ň ­~Lbą*é,Lb)Ďîˇx_]üî+÷Fň9桾_Ynß8lľ(7…T—r%3˙–î_čJĽćܝ4/:;uŻíś ąôę@¸^@¸9Éd–üÜLfC˝˜Ě" ŇöÜăĹd-–„ÓŃ2~:yŞ0™Ĺ\'&ł°°”%LdaéOÁBÍf”I,ŠreľOJ0‰EŐç“X⯠ń4VÁJBŒęđ0LÝrž8˙źť<Ť'ބÖÚbşXß ç×îBakM˜š‡Ýcፎn\Zl@ł%ŕFJôk÷ƒ“ű`n|/lŽ­*ŻŠmâ˙ÔÁŞËŘLbą9Đö‡ąÝ*ˆŇśŽ>őĄ$t'´š9ż?đú2‰E?pr-˝°ňłí°ô&‚jH0TĂ3ŻNΘ‡eD´Ć2´Ö+{Y(Š^5408ß|áEČ˙5@m –°:SSÓSpgęC÷Ţu LNŒÂúÚZďÚr Ě…śĺŒ{=\çöîgžz,&ąˆVű•BůŤkđ4–čfÜ7žń Ôj1ń'[n-(—"(%,¸Ď:8 I?ŹDĺdÚiÄ)`Á°a‹*ŹđOĆ#NJŽ=X’ĐjĂ$Ť’ÎÂ$–ňüá~ƇŚâ˜ž˝Ž H~˜ŞC(FCd9m#ţĈ,i˙ńSDÁ|\EaA™KŸŕđ…Ž¤QjÎÝIó˘łS÷Ún KWzu!\7`2 ĄŤ“‹É,`¨“Y$Aڞ{źlÉ,şńĂd?źśöźąú œÚx7<ůZӔę´6źY÷ĐÜ}P ű7zĹP<(tÇO¤żŞFÎÇ™Gp}ŢXŚÇvňÁ$ő+“XŠş aLłŹąňłí°ô&‚jH0TĂ3ŻNΘ‡eD´Ć2´ÖKI‰öŤč)_gÎ]„3”× tžĘ‚źŽçŃG…ééö“΢_{?ţĐ]0:2 kŤ+Đh4Z@G ÚhŐŽbŽ­.ĂÔÔ.ř‰űĄ¸ŃM´ŃŃQ¸őśŰĐ:ĆOc0ߐ‹äěŮ3páŇĺčŽHOZąL0#/<ëŕ0$ý°•Ci§§€SŔz†xő!đÉxÄIÉąKZm˜ÄbUŇY˜ÄRž?Üofî° ¨Pň"‰ÖÂČdz¸{Ł/\çFg#ÊŚ@ՈwyąŞÄUŠVşÁHśĄdÁş’FŠ9w'͋ÎNÝkť­H,]éՉpý€É,8„ŽN,&ł€Ą^Lf‘i{îńb2‹KÂéč ? ůżř3đÎąˇŕđĄC9˜Aü”’ču>Y‰~áýěł?ż˙űżëá:Zƒ'ť^~ý]XXZááa¨ŐâľTWOĘ ‚č]ä}} öÍî˙ôÇ`(ôŐ /VFu¸çžűzŻ9ĘĘŔí= §O˙ý?řoáúg˙ŢzűݸŽľÚ},ĚĹČ Ď:8 I?ŹDĺdÚiÄq50Źg¨WŻŸŒGœ”{°$ĄŐ†I,V%…I,ĺůĂýnM4ś ëpp˛o\›‚`h2\ ‡őržČ2żÔ&Ť6´7 ;sŤ™*Ô=ŻdćßŇť_čJĽćܝ4/:;uŻ­›Ď-Za#7q(uöů}/:6q0ęqD|őKh|¤p: şÄ‚Frœě;¤š UgĹG×>ş§Ý*mU,ŹNŞ=ޏr™°N9ý˜_'}Ű{IMBŚž:WZtíÎwÉL7~Ry‰}rÜőmOŐGń‘ŞOŞíč2´=ąÇű°Kfůŧž€Ąę ţ};ŇöÜă•j{Df‰ä։Iĺ¸ë|HNj0NĽă…ÖÉ0~zŠǏⴄńŁřH|ľ÷+€ ŇvcźŁóI×éCĽ^văG2Óőa&Ż”ń“j;yütň´Ç‹…Ľ…‰,,}-Lb‘ Čę@ŁO;đhŸ”`‹ŞôöšöUvߓQ˜o:%0IÔFÇ`בCđ+ď> Oí~*Ç_…ÚÔ'áZó6¸ź~›ëKÁYxŁşÖKú.‘ĺüĆu¸Ţ\‰ćrľ2WkópބJŤ3Y˜Ű8ű7ĂŽćTŻl+üwľ~ÎÖOŔ™úI˜ßźÔmWDp9˝ńœßü>˝ëÁžšú”ščCű&öńýpnĺbx!r(źÉ8ÔŤy︌wŠń¸@.OtLç×xůq)÷’î¸2‰%coœť3 ´/ ĚQŮöĺ÷^ß@Ł˝^¤ćE˝zŹ3_oc’˜e•Ÿm‡Ľ7TC‚™ ć˜yurĆź8,#˘5–ĄľXŮTôꝍ5hԛđšĎ~~ţ˙TL998ŤŤŤńMLR­TĄ´â×řdebb~řŸ€?řŇă§°Dd–?rź}ü8}î"45¨ †ţ*ĘÍŤźŃ¤ˆŹRß܌I8Ţ{'|äÉGĂúĐl5cźűx†GFĐň•pmS^„HÔĂCðgfţîßţřŐ˙đřőßţýřÝP¨ŒWąBšË,¸Ď:8 I?ŹDĺdÚiÄq50Źg¨WŻŸŒGœ”{°$ĄŐ†I,V%…I,ĺůĂý"ńY #B„•e€{f|q~o~Ą"˕ĺö“XDj_TÚ'ĄĺJbŻrŞtŸřBWŇ(5çî¤yŃŮŠ{mˇ#‰ĽY˜ż9)Űçߜd2 ޏr&łX‘rÚŢ?düşWśíLfťńŁ8-aü(>_LfÁ|€ÝřIľ<~:yňńbaé_áW ąô­0‰E. Ť>íŔŁ}R‚I,Ş>ĐŰkŰ´ –ţŤäßtRƸů™Ů0˝ţ×Ó…Öú*,ž>ď/}H‹đ˝ŕ |ćáöáYť -8ž~-ŰŞ´ŕňŕExcâeřŇĚŕww˙{xqâđ;Í˙żrőŸÁo]˙wđ˝•ďŔe KZŐ:|eęˇŕj0¤čŚäű  őĺĽÎEĎ ~őPb%1č Ç™GtǕI,{ă܅œÉĽ}á¸fۗßx}ôz‘š=ôęąÎ|˝A"ŒIb–5V~ś–ŢDP f‚j˜cćŐÉóⰌˆÖX†Ö°pR…čföR]Ťh˝X[YÁÚü×˙ĺ_„?ţs?Ó#wÜqçQxó7€"ľ¨mŮżˆňŠOýhLúˆ¤ZŠŔ}wÝO>v Ő`}m 6c2J#~ AôjŁV =q%̋lĄmD`‰ĘNŒŔOýŘÁ3O=ˇŤŮl…[…*<ôĐ#091Ö)ú‹ž$C‘×ßxî8zGťî!î˙ŁţĎă/ĂpmÖÖVz7•kR ŰšĚbđńŹƒĂôĂJTAŚFWCŔz„-ްÂ#>8)9ö`IBŤ “XŹJ: “XĘó‡űľó•%¸¤ÓúďÉLWéŹK§iëbs>~uľŹžZ¨­OŻńrށ'Ű'P˛ŕ ]IŁÔœť“ćEg§îľÝÎObŃoאkłŞ} Í“p:zýtJšî‰ď—e{ÆiťôůuRíń~”Uůý˜_'}ۓ˝@ăŁ“żw \;ŇwcŰwčk†:mÇőiá× YĽL 㧓§ żfČ\§­|Í K˙ YXúR˜Ä"PNĘP}ځGű¤“XT˝#‰%”ćšâżÖőă@ucőUupv9 /,Ü /];ÇŻ>Ţ8Ă/Â] VáˇĹŘ?8#•AÔćÄúeXu ČĘŔ*œ9Ťűۅ÷ŒÁČmc0´wŞŁUížL×´]ƒ0zÇTĆŞđձ߄:4Tť°ÁľĘ˜Ä˘~eË֊0&‰YÖXůŮvXzA5$˜ ŞaŽ™W'g̋Ă2"ZcZ끕MEkĎćĆ:LŽĂç˙ć_…‰đ“űďżž˙ÚkđĄéŸ`֕řF˜¨fH‰LNLÂg?óđĘ÷^†ˇß>ŰEćfŕĐţ˝°śžóWŽĂüŐX żŻ­×ĄŃů5wm  Ł#C016 {gwĂĄs!ŢD9Ÿâíž>|î¸ăΰ.ĄžŐŢMť<ůţk߇x͋ž4óßü­żăďü=XZ^ááa9&Ý\Ś3ňÂłCŇ+Q9™vq\ ëjŕŐk„Ŕ'ă'%Ç,Ihľa‹UIgaKyţpżš™ĄCLOcŃI+}âŇąÖĹáĄ!ŤnŔRsÄ ˜ŸČ˛¸Q‰ë˙ArEOÉ+ˆ\%ŰP˛ŕ ]IŁÔœť“ćEg§îľÝÖ$–X‚žO™+ =EĘŚ1€Œ}üš!uÇŻPڝĘKě“ăŽoűÎ{ÍPr|ő}˜ˆçk†R8šă‡ďR},@pđ9¨ÄńŁ8-aü(>_üš!Ě؍ŸTŰÉăp K? YXúT䕀I,ŠreľOJ0‰EŐz{ÝfCd6xËgÚ5žŞdáEŁ őŐUŘ3wŽě˙\…w`Ďć›Đ\[‚ęČDĎî đĚĂ&Ü><‹{יִ‡ĂŢ›mѓYâ§ł8Čňä"ź\˙<ŢxŚ˜äEd–űçî —`sm†jƒí ƒ„ą,%‘“@ćÝqeKĆŢ8w!g,@iĺ¸fۗßx}ôz‘š=ôęąÎ|…sâ"ŒIb–5V~ś–ŢDP f‚j˜cćŐÉóⰌˆÖX†Öz`IŠh hEż’nÄ}ŸüĐcZK$łł{áő×^ƒëׯ+O%Á¤ż–(]ŕkdu  úЇáčwÁ+/żgϞéܰjÁČđÜrx?ÜvËÁř†Zű/€J¸Gke}ĆOThXZ˝Ë+{ÂzŢbŽÚ×/Ĩ/V^ťv –––ă§ÉčdbbžúđcđĹŻ|=îӁČełčć2QžńŹƒĂôĂJTAŚFCŔz†xő!đÉxÄIÉąKZm˜ÄbUŇY˜ÄRž?ÜŻfGfAb1ĺwż üÄ%^oÂ5z‚Bdök›âj˝Ŕňz&G+Đ ĎG#ŰŽ_W’ ŕ’™KŸŕđ…Ž¤QjÎÝIó˘łS÷ÚnKĘeçf_üUÉĐݜ”íóoN2™ďGš “YŹČ9mg2K0i{—̢bĆ!ŢĽú X€ŕŕsP‰ăGqZÂřQ|$ž˜Ě‚ůťń“j;yü°°ôšđŤ…Xú^˜Ä’*WVű¤“XT} ˇ×í;°ţˆ~2˙lŒNÁÚˇš˛;Ţ÷x|ëjp6`‹WŁ÷+Äfß .ĂëÁ5Ť ÁށIíZ}.5a;ÉűÓÇáƒĘ‰”Ś{@ŰŻzčŔ}ĐŞoBcuĽŐ˝™2͎ü¸L “Xda‹ŹLÍŠ zőXgžęőĽŠ0&‰YÖXůŮvXzA5$˜ ŞaŽ™W'g̋Ă2"ZcZk‰ŕS‰”ˆžČ™Cž<ţÄđâ‹ßŞDklDBŃ˝Ö'úŰ== Ÿüä§ŕ'ňspôčјŇ}BKň׌É*Íîgôę fň=ňqŕŕAxúéÂă=FŸŃ´ŠĹEʨÍO<‘˙$šńą‘öĽ™Vţ>%Ŕć^E,¸q´CŇ+Q9™vqœő 뜨 řd<â¤ä؃% ­6Lbą*é,Lb)ĎîWł#łđq%ë3"šFkhŁŃ€F˝Ţţl4:ŻjÂD-˙u‚‘ÔŞćş]Zˆ°ë°šYĎźbˆVW{ÉĚżĽOpřBWŇ(5çî¤yŃŮŠ{mo‹äšŚ))אkˇŞ} Í“p:zýtKš.Š_íqšLf/.čuRíM']]U~?ć×IßödŻäřhăäď-(זôÇ]@ĆĆŘö÷šĄäřŇb'÷xe^3t}są'Œâ8ĹÇCƗ0˜ä´Ý{ü(eJ?~" K_ “XRĺĘjŸ”`‹ŞO1iłöšöĄýÚ“‡ÁF°ö5Öץ^¨ť}ę(ŒŐĆ żŞ +ÂáÖóP_ş çŚFáKâlÜä#C{´Řﮟ‡í&уcž3ůU˜Y˜ƒQ1*‘đŕžÉ9˜˜V77A 5!¨Víwôhč П\a›lăXŚÇvňÁ$ő+“X}Š"ŒIb–5V~ś–ŢDP f‚j˜cćŐÉóⰌˆÖX†Öz`)Št˘Ăvyďř{1iÄôޝ]ťŚ`ffŢ>v îžç H%ţőu+÷ćÔĚĚnxúéŔ“O>ó—/ŋ`qa—–a#ź­aŃEéčWâ###01>ÖgĚÎéÝäWuŸćB•cÇނ˝ł{a×ä¤Ń.ęťăaś}äŕG]‘sMÎę€ç@ëŕ0$ý°•Ci§ÇYß°žĄ^˝F|2qR"á9vł˝Đ1‰Ĺޤł0‰Ľ<¸_͎Ěâi+yöQ^#z:i}ęę:"œlllÂäŔ&Pd¨Ú‚őş~Ýťpm öO X]Y…Ćŕ Ôj088HZ‹í_/”í (Yđ…Ž¤QjÎÝIó˘łS÷ÚŢt$HUŸĚ˘­s'Vi°řÉ,HqÝřIĺ%öŠëÂÚśó“YÔĚ´ÂîÉőÎ+T{Âř!ÄťT |*qü(NK?ŠÄ?™óvă'ŐvňřaaéSa" Kß “XRĺĘjŸ”`‹ŞôöÚöuv††v_ĽZžÓ6ž…ĘÔí`%˘ وn†…7Ԏ„ĺ[ńÓWÚ~Ö*3°(nŃľ“đk“— žłĚ LŔdœňšÍŤ°ÔZ‡m)Cxnôˇá3+DٙG{Ň{ćμő5K˝z!ľĄ”’¤ăÇ$Y˜Ä"+Só˘ƒ^=Ö™Żšöé΋aLłŹąňłí°ô&‚jH0TĂ3ŻNΘ‡eD´Ć2´Ö+ZG[B@a^—rňÔpěíˇŕž{ď“<řŕĂđ;żóŰ0ťwvÄä‘Đq‹p RŠÂŢš}ń_‘Ň^Ţ*šoűI˕+WŕwޅĎ~öłšśQߝ8q:ţ÷ŠÎ‘€ŢM9}oXpÝܨŃPąÔ¤V˘r2í4â°` XPCVx„Ŕ'ă'%žc7ÓĽťă¤9b‹UIgaKyţpżnžl_)´žžëĐh6a1<•=ż\……5€fSÄůŃżF}ęa€ÚŒ ć_2 vÁć€ţ†ßk—Â: ĂĐľ ™nŔ‰ nŔŘؘóë…pÉĚż[2wŠŞ’FŠ9w'͋ÎNÝk{ӒXş/łíuśťâĘyş›“˛}ţÍI&łŕý(—a2‹!§íLfÉZ’tă‡ďR},@pđ9¨ÄńŁ8-aü(>_LfÁ|€ÝřIľ<~XXúP˜ČÂҗÂ$–Tš˛Ú'%˜Ä˘ę˝˝ś}ؙgb^™{˘ű ʤĐŹoĆŻPŘ7şj•AĺŃ˙—+Âńąăp­RÓjÓ(\S4áÄúPô`ĐŤÇ:óUÓ>ÝYbQ"ŒIb–5V~ś–ŢDP f‚j˜cćŐÉóⰌˆÖX†Öz`))ŤZ­ĆOóşxů*|ýůoÂíˇÝŢ`Ňżf(ú%ő3ý(|ó›_‡űąÓ5 IDšé\ˆpęjé]Lą˜˘_Ťó›ßˆŸ˝îČ$ëëëđüó߀‹óW`bb*aŸ˘˘›ËtFybÄłCŇ+Q9yí4â8Š ëjŕŐk„Ŕ'ă'%ޖ+Í“XŹJ: “XĘó‡ű5ŹÂ.Ďôšž……EX\\€7.Őŕ˧§ŕřőa|ž’Š Čí°ŰűýŐđďí$ýčŢeřŮŁó°Ď&LMM‘Ÿ¨–őI-™ůˇôš _čJĽćܝ4/:;uŻíMObéJT%&łhëœĆ‰U,&ł Ĺuă'•—Ř'Ç݊ŒÓv&łd-ÉşńCˆwŠ> 8řTâřQœ–0~‰/&ł`>Ŕnü¤ÚN?,,}&ĺŻF,,ŰD˜Ä’uŕŃ>)Á$UčíľíĂÎ83ć­Fü'DȒj_ôJĄHćĆ÷ÇOeÉVfy`^m?e%şŮ6\Š!őpbăÔĄŰ]^{ψžH3}(ţڊޛÚęöCfN ?&ąČÂ$Y™š=ôęąÎ|Ő´OwvX’§,ÜBXY{aéMՐ`&¨†9f^œ1/ˈheh­–’Ňa…'ýƒńŁţkđożŻžú=ȓ @-,óÜמ ͦŚ´ý[ü_ذ˜˘×=˙üs0P­BŁ™żŢG}öoż aĆĞŸ÷ŻzŁ<1âY‡!釕¨‚L;8,˜Ö3ÔŔŤ×OĆ#NJ$<Çn.K˜ÄbUŇY˜ÄRž?ÜŻaE°ô:űHńâ%¸8ţŐkťá˙óÚ~x÷úŘâ}sGžwiţíŰ{amm{uL××N2óoésžĐ•4JÍš;i^tvę^ۛúuBZ}€›ô„ëČľ]ŐŢź–|™Ćéş)~í@ś7ĚwHۅ¤ĎŻ“j÷ŁŹĘďÇü:é۞{$Sßü˝ĺړţ¸ ČŘäŒSýE|éƐĄíBƒÓ•.™eŁŮ‚â$0œß€Łjڌ“{ź2mÇí ă‡8Nńńń% &9m÷?J™ĆO'O•Ŕźž m7ĆťĐ@čúP)SÂřÉä•2~RyäńĂÂŇGÂOdaŮÂ$–ŹöI &ą¨zW‹Z kޚŁ]łá€]ˇBŽdÚ'â›mŒTĆPóăĂoCłŇ>Ii…Ľ6DF‚ÁNŰ÷ĽV[pnó:Ü ŇiÁš•ŕ@ópťşĂ'lĚŢąÝpré47ëPÝńn3Łí&Zw\™Ä’ą7Î]Lb‘őLbąĂłĂқŞ!ÁLP sĚź:9c^–ŃËĐZŹl*čüŇE'Ńë|FÇĆŕÂůsđĺŻ=G…={f%›ˆ°rňÔ xçíˇăWî,,.A˝ŃŠ -űŘÇ ~=Ŕ“čZô´™×ßx3&Ľ\˝vfff஻ď†[oš-~‚MZćç/Ă|ő9¸xů Ěí߇?E:ڟcQ+‰~Őj¨XjŇ+Q9™vq X0Źg¨WŻŸŒGœ”HxţRĄÂ$Ť’ÎÂ$–ňüá~Ý}Q_)}^¸p —Wá_ź1o_…í o^… +Kp¸V‡FŁa|ň™úô)7c % žĐ•4JÍš;i^tvęcŕ 7v­”$ŞŠöWđíëoŠIO‘š>×ŃËöůż´ç'łŕý(—á'ł˜Ći>™E;ÉńŐ÷a‡ŸĚvăGqZÂřQ|$žřÉ,˜°?ŠśŁă‡…Ľ…‰,,}/LbÉ:đhŸ”`‹ŞôöÚöáťwĚź2÷8؊|ľ+řÔn蔔>˝1wď‡jg§Ů-xgíôá'áŔţ°śş §N„wż ëëpćÜřÁŰďÙ3ç ŢxÚŘ܀Ąáax2´żŮÉ,Ń>á;ßůźđݗŕwżř<´ZM8tč ÜĎ0?^yůe¸óčpË-ˇÂČč(œ;^üîwŕŗ^ƒ‰]“PŤ ‚ru*3giv@Ż$úUŤĄbŠI?ŹDĺdÚiÄqv7Źg¨WŻŸŒGœ”HxţRĄÂ$Ť’ÎÂ$–ňüá~svx=eţĘUXY]_9śwېXşrayO5b˘lŢ+üpÉĚż7â@”6JÍš;i^tvę^ۛžÄŇÝĆ3Öˇo*&=~sRśĎż9Édźĺ2Lfą"#䴝É,Y@K2‚nüâ]Ş‚>•8~§%ŒĹGâ‹É,˜°?Šśk§)–>&˛°ôľ0‰%ëŔŁ}R‚I,Ş>ĐŰkۇďÚľí[8!ëFö@0¨qˇŇ'BÖÔW5ĂË‹’îzs^_= 3ľńřXĚ7–aSÔáf’ĹÚu€MU?ÔíƒěXŔNZy¤}ą”Ť===ś“@Ł%!ëUOËLb‘%ĐčAŻŠů@уAŻëĚWMűИ”#Â) ˇVÖ^XzA5$˜ ŞaŽ™W'g̋Ă2"ZcZ끼¤R‰ˆdbş1反ĂĽĺexţ߅ÍÍÍ1esłď? oż{–×Ö Z€ą‰ ¨×7áŤĎ˝#ƒC°ąžĎ<óŹňĒ›E˘× }ó[߀Wž÷*|éŤßŠŸĆ2P…K—ŻÂ… —allîšóXZZ†7Ţl?!.~zËw^ÍFöÎL¨DžĚœ…},¸nnÔh¨XjŇ+Q9™vqœÝ ëjŕŐk„Ŕ'ă'%ž˙„T¨0‰Ĺޤł0‰Ľ<¸_?_Ůľ\—ž~}–áwOě†W.Ăv“ՍzÜ/Â)ĐĺsQ&ą”ă+mvCćEg§îľíK›<Ňţ– •´0™E_ç4NŹŇöŁZ'ŐďGš “YŹČ9mg2KВŒ ?„x—ęƒ`‚ƒĎA%ŽĹi ăGń‘řb2 ćěĆOŞíÚiŠ…ĽĎ„‰,,ý)[ލ¤˝ŠŹ 4úĚWÁ˝Ć>ĺOĘĂ*Ź´#ĐčÓ<Ú'%˜Ä˘ę˝˝ś}řnÝŘžůWdA…:…™ýx˛žVŞË€Ý$Yu8ťy nViTqâMT V„zŤ­îăšIÇ/ő$–ěfŮ8–鱝|=( Y¨zŇXf‹,Fz˝HÍŠ zőXgžjÚj˘Šs™"l-„ž–ŢDP f‚j˜c&(FDĚⰌˆÖX†Öz`))[Ź0œ˘_DĎÎí…÷N…ůŤ °onŹŹ­Ăšó—ĄŮjBĽRńń ‡áᑘüqńüYř?řԛ hÔëđą˙PLš™$"ä<÷ľŻÁë?ř|ń+ߌ_4ˇď@ÜŢőő5X]Y ?×á•×߂×Ţ|˜ƒŃ‘a8˝Žaiöíß?Fş"Ľ›Ë$ą8HF<ëŕ0$ý°•Ci§ÇIݰžĄ^˝F|2qR"áůOH… “XŹJ: “XĘó‡űőóE}ĽĐňň \ťvžsažtz śŁlnl„˙˝tćńÎ9,“XĘń•6ť!ó˘łS÷Úö͓X:—kh7yť;-œ(€ßœ”íóoN2™ďGš “YŹČ9mg2KВŒ ?„x—ęƒ`‚ƒĎA%ŽĹi ăGń‘řb2 ćěĆOŞíÚiŠ…Ľ„‰,,})ęôćwąPtFŸů*0¸@Ł×اüIyX…•v}ځGű¤“XT} ˇ×śëöFE5N`‚ą9°‘fxÓ)ÂmŹŽĹéĆúZHőSƒ›ëŚU‚Vf™ëîî:ín’vüřuB˛0‰EVŚćE˝zŹ3_5í 5ŃÔšLśÂĎKo"¨†3A5Ě1#"fqXFDk,Ck=°””K˙TŃ5ˆ_3łgއ7ŔŢy˙tŹŽ“ťâ'śt˙ÁDú}űÂŮ3§á‹đÍĐf–W~ž}öă°{÷ Ü rĺĘ<|ýë_‡ËóWŕˇ˙y¨†mÚč`LřŒdxd4ţk6°˛źŤŤŤpćÜĹ8/š…vĎĚŔ@ö•BȜĽ>Ĺâ€ëćF†ŠĽ&ý°•Ci§ÇIݰžĄ^˝F|2qR"áůOH… “XŹJ: “XĘó‡űĽů˛yB fťąąŽióđîľAřoďí*n=Ÿ™KŸŞđ…ޤQjÎÝIó˘łS÷Úö‰Ľ+Qí˜ĚÚś3™E|´q˜Ě"űđ%łŕóŒ>v’ăŤďĂ4“YŔnü(NK?ŠÄ“Y0`7~RmG˅Ľ¤( % Ë6– 7Ż+"¤T"Đč3_hôű”?)Ť°ŇŽ@ŁO;đhŸ”`‹ŞôöÚöáťóüöĐ<÷Bü׺~hRAڍßÄnŔ`súMFęŠ_šIcź˙r>Ťď%•.b‹,Lb‘•Šů@уAŻëĚWMű@M4u.S„­…đÁłĂқŞ!ÁLP sĚňˆY–ŃËĐZ,%ĺ‰ÉŘřěݡڧwĂ̞=°ďŔAŘ55Ý#ąDŇ˝čT*ĄÍŢ8,Ÿ}öcp ´ýýß˙=xűŘ1ŘîrěŘ[q]:Ď<óąX7=ł§GbI_YŞTarj ćöďÉ+SaěÝ7Łcc2¨n.Óĺ‰Ď:8 I?ŹDĺdÚiÄqR7Źxxô!đÉxÄI‰„ç?!*Lbą*é,Lb)Ďîˇü¸ŠÎqëő\¸p.,Wá_žą"€›EŇçčFŇmĎJ|Ą+i”šswŇźčěÔ˝ś}GbQöŽřu;Ů(ŔMz Âu ӝĞ} Í“p:zýôMšÎŠ_kí s$Ňv!éóë¤Úăý(Ťňű1żNúśëŽŠŕöaŻBšVĽ?î269ăT?F_ş1dhťĐŕtĽKfŮhśŔEôd}ď?Zěä/Ňľ4Âř!ŽS|Tʔ0~2yĽŒm K ?‘…ĽĎ…I,Îí“LbQő~$– e›ßžvšę§ŔFţ÷Ÿř*Ŕ7/îjE}Ë;0ŻĂ&ô“ÜÖ¸ ŐŻo6 D˝Q‘nÔé6ĹşăĘ$–Œ˝qîb‹Źg‹ž–ŢDP f‚j˜c&(FDĚⰌˆÖX†Öz`))–üTÄů5ŻeŹ9&›‹x?ö(Üsw{ÍŮżo?|ëŰ߂S§O‡?üdLúŘNrýú5řÎw_€…k×áŁ}nšĺ–X˙řăÂŠÎĹŻLŠ^/”HşÍŒŒŒČ€ş'RvxNŽčćF†ŠĽ&ý°•Ci§ÇIݰžĄ^˝F|2qR"áůOH… “XŹJ: “XĘó‡ű-ĆWޓZ˘őřŇĽ‹°¸đËŻĎÁZٟ~ˇ—™KŸŞđ…ޤQjÎÝIó˘łS÷ÚŢ(Kéc8—~/˙rˇoŰ(&=…|ĐŐËöůż´ç'łŕý(—á'ł˜Ći?<™E}‡>v’ăŤďĂ4?™ěƏⴄńŁřH|ń“Y0`7~şmgaécá'˛°ôąúy\HŠD Ńgž .Đč5ö)RVaĽFŸvŕŃ>)Á$UčíľíĂwăůí z7€D})ţƒć:¸Jמ‰ć= {!€>’5w5’unnÖZrâǏI,˛0‰EVŚćE˝zŹ3_5í 5ŃďEŘZ<ű Ş–ŘY‚ZĐOPŒˆ˜Ĺa­ą ­őŔRRXî"ŕs–)ŐlnBK´ŕ3Ÿţ‘žîĐá#đŮĎü8TŤUřßůmxů•—`ccn´Duxéĺă:ŐŞ5řě˙dÄÉgĂ6ˆV+lSzŸ ě¸daKGĺdÚiÄq7Źg¨WŻŸŒGœ”HxţR!ŇÝ_0‰Ĺޤł0‰Ľ<¸_;_ŽŻjľDü:Ą•ľ:ü‹7ć`~­Ÿ^››™KŸŞđ…ޤQjÎÝIó˘łS÷Úö-‰Ľç(űżŽ'¸IOA¸Ž\Vímž„ÓŃë§sĘuWüڃlo¸ˆ´]Húü:Šöx?ĘŞü~ĚŻ“žíşk,¸=?™ĽŤď ?™%eC§řxČř“œś{ĽL 㧓§ ?™Ĺ\'‹'ł°°ôą0‘…ĽO…I,Îí“LbQő[Db‰oüdúcáTűom|¤Ť¨~ŒŔ“búB‹™-}$lŤźĚuăuimľ}s­RIôş“llËôŘN× ×ƒ’őLb‘Ű‘ßx}™ÄBv•béMՐ`&¨†9f‚bDÄ,ˈheh­–’ňĒ´ÝŹŔt1 ;g´ ŮhÁÄŘ(<ýä’ĹřÄüȏ| >ţąĂéS§ŕ?ţÇ_ƒ—^zVWWaŤe}}^{íűđë_ř58uň<őÔÓđ‰ů$ŒKvyňĂńk•ÍfçaNÇćXdą8HF<ëŕ0$ý°•Ci§ÇYܰţááŃk„Ŕ'ă'%ž˙„T¨0‰Ĺޤł0‰Ľ<¸ß­‰ŤČçÂÂuX ××_y{N, C˙Hfţ-˝Kń…ޤQjÎÝIó˘łS÷Úö=‰Ľç0ű•v“5é)×7˜Ě‚Cčę¤Áb2 ęĹd5SĆÉ=^LfŃbI8}!㧓§ “YĚub2 żZˆĽ?EťŔJŠ“XÔ“XT˝+‰E-ßžTšŽž˛ç(Bęő:ԆđźĎŔX›đF°7Ť„÷Ꭻ÷Ŕmân2'ľÝÔĽđbgt.¨Tľ›_ÝqeKĆŢ8w1‰EÖo‰EӖ­aLćX{aéMՐ`&¨†9f‚bDÄ,ˈheh­–’rĒ_1¤™ű"˘†H˘7›Ýl4âĎO|ě¨ ŕ§U†Ÿ˜Űďźs ŢzëđîťďŔ‘ĂGŕśŰo‡ýűdžXRœDm;ţœx˙}8ýÁi¨ŐjđŔƒÁ]wÝż6 “Zm>ůCĎÂoü٬+vRM $–¤mɀ熤V˘r2í4â°` XĎPŻ^#>8)‘đ&$Ç#s„žůˇÉÁ}ŸR@mý[I~ËYýHbŃ=Š%RŻ­­Âââ|űü8ź|q úG2óoéžĐ•4JÍš…:Ýćó˘łS÷ÚîKĎ1H÷6ů5C m;żfH|´qř5C˛ű× Ém—Çhʆ_3„›ä´Ý{ü(NK?ŠÄżfó㇅Ľ…‰,,}) Š.Đč3_hôű”?)Ť°ČB}ځGű¤“XT} ˇ×śßukŰםa†÷‡¸zŹýehcűÁU† !fÂ}›şD§Ńn…â<\‚uÍkˆśŤˆ5.? w´î‘őŠďőzćŻ_˜Ű[ú {œ˜Ä" “Xdej>Pô`ĐŤÇ:óUÓžPăńžQg3˜̹öÂқŞ!ÁLP sĚňˆY–ŃËĐZ,%ĺ‰Ő%ł˜ÖrÉžgÖţżŃyĎłýą\Dš˙ţŕîťďăǏñcoÁ‰“'`ddŽ9űö퇹š}088>˛šš /^€óçĎĂœoî­Ářř<öčăpÇŃŁ00ę÷ěG>żńť_„FŁ!YĐYE7—0‰ĹŤ­v X0Źgx€WŻŸŒGœ”Hx’㑚B_ŒüŰd`ڟK: “XĘó‡ű-?jâľ;ˢKK˰˛!ŕ׏JrÇGęüŚô.Ĺş’FŠ9ˇP§Ű|^tvę^ŰGbéU27i7yť;4œ(€ßœ”íóoN2™ďGš “YŹČ9mg2KВŒ ?„x—ęƒ`‚ƒĎA%ŽĹi ăGń‘řb2 ć,Ć K YXv†é#•4úĚWÁ˝Ć>ĺOĘCÖĚîZ›H Ń§x´OJ0‰EŐz{műđÝv~űđţˆnŁsíDŐďF×S'ŕëçn‡š }žűúˇaxxŽ]żożývźÎOMOĂîéÝ019 ťÂżčŐ?ľpę‘P˘§ŞŐ77ăĎĺ•eXX\„Ľđď꾍pýÚľřÂĎÚúź˙ţiXßX‡Ď|úGŕÎĐgĽB{Łěîév[Ňs`€öI’ÔwŸĹA2âY‡!釕¨‚L;8,˜Ö?<)Á$UčíľíËôG´1jЎ)â-ŒÔžěĆ0;q˜vŁ,Of†Ż@˝š F+ź1Ś'ŌUř0ě‰˙|ĽŮl›×ƒö z[”' ‰Ľóšźś—›}b(:,U¤{ü$Y˜Ä"+Só˘ƒ^=Ö™Żšö€š÷:{ĆdŽľ–ŢDP f‚j˜c&(FDĚⰌˆÖX†Öz`))OŹ´6€r‰˝őĺŕÜšspçwEž˙ýWáëßü.źúć;P q_~őM˜Ú5ss3°n/Ě잆ąŃa°‘ŐŐu¸|ő\¸p·7ň—ă×EUŽžČ2;ť}ô1VԖŽŕ×d suĎDsAH'F<ëŕ0$ý°•Ci§§€SŔú‡‡GŻŸŒGœ”Hx’㑚B_ŒüŰd`ڟK: “XĘó‡űőó%ˆŹKb‰d}}ZáyćWŢ\„Ľ•5¸™d~i4^/›ÍVJ›™KŸˆđ…ޤQjÎ-Ôé6Ÿş×vÇ=‰%Ţä›opwĎz!0ă(&=~sRśĎż9Édźĺ2Lfą"#䴝É,Y@K2‚nüâ]Ş‚>•8~§%ŒĹGâ‹É,˜°?,,ý%LdaéoŇG*hô™Żƒ 4z}Ɵ”‡Ź‘Ýľ5‘@ŁO;đhŸ”`‹ŞôöÚöáťëüöĺôG¨hž{Ąm9ş*SGÁG>vŕđëď}ء:ʖj­ ű‡ßƒsëGu]WˆHOPééÚ˙5~pö\˝ţ. ÍMĂŔĐpę,‰I,˛0‰EVŚćE˝zŹ3_5í 51ď4f%‹0&sŹ˝°ô&‚jH0TĂ3A1"b‡eD´Ć2´ÖKIybIÚNV÷CFAŽoD×ç˘űOĎ=÷ěÝłöîÝ 2Öo~ţ2|íšçÚmĂŽ1‰œ‚L;8Îֆ€ő^#>8)‘đ&$Ç#s„žůˇÉÁ´?#–t&ą”ç÷ť5Q“&ąDë^´v_]°źş7›4›Ů§ŚÎŒ‚€I,%ůJ›ÝyŃŮŠ{mw‰ĽW&łdÔ˜Ě’ő“Éë%™Ě‚ú`2 iüâ]Ş‚>•8~§%ŒĹGâ‹É,˜Џ–>&˛°ôŻé#•4úĚWÁ˝Ć>ĺOĘĂ‘…4ú´öI &ą¨ú@oŻmžŤÎo_şňËđN˛zŕ)(JćĆćážécp|ţ8:łAĽ|2˞ńE¸źą 1ˆoƲ’í8dŻ×VhŃôfˇ^(üţŠK0ő=Ő: ŽOBP­ö„Ž ĆąLíä#ĐčAIČú@ՓĆ2“Xd 4zĐëEj>Pô`ĐŤÇ:óUÓžPăńÎô‡n@.˜̹öÂқŞ!ÁLP sĚňˆY–ŃËĐZ,%ĺ‰%i3Yf2‹ču’íô@­­:|çĽWax¸ˇß~Gü䓑‘auežţyřňó/ŔĐĐ잙‰Ÿ ˝N¨^߄ő X\\€úf=´]†Ă‡Ŕôtţ“Ř>8}*Ž]ôš˘č•DCĂCPŤ vŞŮ‚FŁ đÜ °{÷|îsŸ‹É/YŮŘ؀×_ Ž{ ^xńŐxF¨ ¤;Gę†Ěה™ćNŒxÖÁaHúa%*‡ ÓN#Žľ!`ýĂãׁOĆ#NJ$<‡ ÉńČÜĄ/Fţm˛G0íψ%…I,ĺůĂýnMÔ¤I,‘4řóäU!śŚEŠLd‰ęŸÚϗŢ|Ą+i”šs uşÍçEg§îľÝ‰$)šâ„ůwű+í&ow‡𛓲}ţÍI&łŕý(—a2‹!§íLfÉZ’tă‡ďR},@pđ9¨ÄńŁ8-aü(>_LfÁ|>~XXúXh/KgašŮDHŠD Ńgž .Đč5ö)R˛&v×ŇD>íŔŁ}R‚I,Ş>ĐŰkۇďŚóÚäöGŇą~EúƒćřČł‡žľëđú…‰đBŕ&”-Ń ť##oˇ"Ǹť)K˙){źKÇ6˝É]Z]‡WŢż ×çaaé$ŒîÝŐÁĄŽ‘ţI,ć1Níä#ĐčAIM=ěĆ2“Xd 4zĐëEj>Pô`ĐŤÇ:óUÓžPăńÎô‡Ś}ŋ0&sŹ˝°ô&‚jH0TĂ3A1"b‡eD´Ć2´ÖKIybIZ+,ĸłČTŤP„Óç.Ŕ—žö|˙űŻÁoüĆŕo˝ ­VňŞ€ˆ(ňŐçžÚ| ÖÖ7`fvVzľ]D<Ÿ˜€Ýťg`ĎŢ9¸rőPĺĘľk0ťw/LďŢctI,q5ĂS˝Ý{ö„>×áËĎ}ž{ţš¸.]‰ęŐő _ř5xńĹáK_ý|pö< †mŠÚ–nŤv.Ëë+‚)9ţXjŇ+Q9™vqœ¨ ë˝F|2qR"á9LHÂ:ăF }1ňŻş=‚iF,é,Lb)Ďîwk‚#Kb‰¤Kš°Đ„›[2óoé]Š/t%RsnĄNˇůźčěÔ˝ś;öI,€CF#é^˜@ܤ§ \AŽ-ŤöćúJžLcštÝżv!Űn“"mGŚlcT{źeU~?ć×IßvÝ5Ü> ě}(מôÇ]@Ć&gœęÇ(âK7† mœŽtÉ,Ňëóp,'RŁŇóäřŇb'÷x‘ŽÍĆqœâă!ăKLrÚî=~”2%ŒŸNž*9OŠCÚnŒwĄĐőĄRŚ„ń“Éó?,,}*üD–ž݉‹ns [„z'4şM Ś×,~Lba‹ißT˝ĂşÍśoíŞ  @PW‰~UńÓG žtęăđ™‡ŕöŠ °o˛•J ʒńńŒm\ƒ•Önła`ÖNŁ{RŻ7ŕÝóó°¸9חÎÂőëÇ`xf†Śv÷PzÇ5ťŇsl[ÁőŠ2ýÁ$ő+“X¤ŻLbĄLՐ`&¨†9f‚bDÄ,ˈheh­–’ňĒ´,őŠ,Fc-ż hϞ˝pţÂEřľßú2ÜϰşşǎƒĂ‡ĹóËéÓ§ŕ•W߄S§ĎÁ܁}ń“\iAź˜ż|¨2?%Žw üL)ˆ§•Č×îŮ˝pňôyř桞 kŤŤpäČ-ąŸ́…ë×áŐ×߆7ßz7\ŢŘ3;ˇŠŰĆl7}wĐňg†¤V˘r2í4â8QÖ?<óU`8FŻąOů“ň^QYhôií“LbQőŢ^Ű>|÷ʘGĄVz[‘Óéöuˆ-ÁôP´A ~ôÖŻÂÜŘexîĚGáäőAŘ?qöŽ­C­@5¨BĽR…(F8<~Ž-î†"%ěZXŻoÂúf——áĘň&lŠ4Ì+óŻŔęúEÚ5 wŞQŃ×öţPĂôŘN>”„ŹT=i,3‰E–@Ł˝^¤ćE˝zŹ3_5í 51ďLhÚWźc2ÇÚ Ko"¨†3A5Ě1#"fqXFDk,Ck=°””'–¤%`%d–œŃ+ ˇ>ŒŽÂŢš}pýÚUxóŘ{püÄixäÁťáÚľk1Ěąwރď˝~,~ËČČhÖa/ˆ˝Üh…˗€*.^nĂDe|˝ęh÷ě źđň÷ał^‡ë q;Oœ<ß{í-ŘoÁÔÔ4 w_‹Ä$–ŽĘ!ȴӈăDmX˙đđč5Bŕ“ńˆ“ ĎaBÖ7J苑ŐíLű3bIgaKyţpż[y$–8ˇŐ€›Q*™×-tű7°ZTm_čJĽćÜBnóyŃŮŠ{m™Ä’Hź]—ćÜíŻ´›źÝNŔoNĘöů7'™Ě‚÷Ł\†É,Vd„œś—Ifé^w ˆÇ*VŁöúŘIŽŻžÓ8LfťńŁ8-aü(>_LfÁ|@*vXXúW˜ČÂŇ߯AňUŇgž"k|o•˘}Ɵ”'đşÉę@ŁO;ŔÚAlŸ”`‹ŞôöÚöáťćüöevľˆ-¤~ýBZ´řÁż sC P†‚_ƒŸƒx]ü$_zޡBY˛ŮŞÂé•öˇÜ}–ČÉĎÄÉ lnnÂŇŇű°źv&Ţ4ŽÎ}ڛŃ,‰%}8Œc™ŰÉG Ńƒ’őŞ'e&ąČhô ×‹Ô| čÁ Çă:ż} &ĆăéÜ8)I„Oś°16˜Ş!ÁLP sĚňˆY–ŃËĐZ,%ĺ‰%i-°şFÓzăP"ČÜđX^Z‚ĽĹExůŐcđRř×u<ľ{7LLNń*áúÔ ZpęÔ ĘÉÓÄu¨tŸŚ™Ť&&&ĄŐlÁëo˝˙ĹUŤÄŻoß< sYJ˜Ä’ŐV;NԆ€ő^#>8)‘đ&$aqŁ„žůWÝÁ´?#–t&ą”ç÷ť5Áa"ąDëUűUz+pűŽşrŕf['ŰŻú4ŽĽbˆ-řBWŇ(5çęt›Ď‹ÎNÝk{óXJ Ř:Đ$ă„ůwű+í&ow‡‡𛓲}ţÍI&łŕý(—a2‹!§íe‘YŒ‘Œ i;“Y˛Ć†ńÓS”8~§%ŒĹGâ‹É,˜o–>&˛°ôŻÄó|•ô™ŻČÚŢ[݁hŸň'ĺ źn˛:ĐčÓ°vŰ'%˜Ä˘ę˝˝ś}řn9ż}9ý´o(źůÔÜ܄ôÎĎÂGŚÁp°żÎ@Ż˜ÚĄ‡*‡éĘ4lT@Ł: `<ÔŘá`n!ΉĽYXj]ŠÓŮ sB›€¤ë˛c+ŢXˇ %ęĐlÖĄ.VÂTZ­T‡‡atv.~KŰ6ŸÄ’}‹DbI՗I,˛>őĄ$¤ńŻm7ň5Ý÷ćö!mĂő ×‹Ô| čÁ Wu捌}šńo<ޙţĐ´Żt>ŮÂĆŘ`"¨†3A5Ě1#"fqXFDk,Ck=°””'–¤ľÂęDuďI)™:ę°:kZDV /Ň-..ÄŻń‰bvt|&wí½Ľđ*•6ĺ˝÷OÁŐŤW`÷î0Idó~hŰ++ĚMÝ55•°YŤ++ą]ô¤–ɰž•čUB>ŻgžŚšŤš°Ł#žup’~X‰Ę!ȴӈăDmX˙đđč5Bŕ“ńˆ“ ĎaBb•+ôĹČżŚöŚýą¤ł0‰Ľ<¸ß­‰ʓXjľ¨V88لýťáüő›çCSăCđŔžëńZ:8čöŞ`:Á_čJĽćÜBnóyŃŮŠ{m™Ä’qh’qÂ|ƒťý•v“ˇťÓÉřÍIŮ>˙ć$“Yđ~”Ë0™ĹŠŒÓö2Č,•Ť=_LfÁ|@ŻíLfÁ|$ž˜Ě‚ů–ž&˛°ô§Ä“w|•ô™ŻČšŢ[ՁhŸň'ĺ źn˛:ĐčÓ°vŰ'%˜Ä˘ę˝˝ś}ř.9ˇ}ŃŻĽ…@íăíJś}Ať/‚J†GŕÂđřÂőšŒQť ę;Čm‡˘čÖ´“ĽëŒÄš•Áˆ~1wşŻ.HJP„ąÜţŔ_uhF&vÁđôL؝_ŠçźNmƒel'FJBÖޞ4–™Ä"K Ńƒ^/ú…ÄRěEb́Oś°16˜Ş!ÁLP sĚňˆY–ŃËĐZ,%ĺ‰%i­°Ő4ő„4RlEOGŠVajz:ţ3yČâń’PŽ/-׿üexúé§a˙ţ፺Şd×l6áüůsđíoŽ-­ÄOƒ‰^hŞ^wWjR “X2*‡ ÓN#ޞ!`ýĂãׁOĆ#NJ$<‡ IˆUŽĐ#˙šÚ#˜ögĒÎÂ$–ňüá~ËőŐ]o)$–ŽěŢ˝–Â5óÜú&ü›÷n‡+K°Ýe×Ř üÜm'`×Ôm0Ů'˙Z!|Ą+i”šs uşÍçEg§îľeKZş×ˆ„ćFr7ažÁÝţJťÉŰÝńáDüć¤lŸs›É,x?Ęe˜ĚbEFČi{Ńd–FŤ%ůb2 ćzmg2 ć#ńĹd`aŮQÂD–>•îĺú”ä+˛–÷Vs ڋN™Œ0‰EŢ­éÚ§ôÖć”B×6)In_ ˇ×śßçˇ/§?Đv˝ĚH?s÷ݰvő*ˆFS:˘W7!•ÓľCŻOýđŁŐl€o–ľZ=ŕ:’ ߍZľŃ1¨ Ô$=i,÷¤˘äEý‚¨†¸ŐĄáP.‚‘Xş‡_¤UI{˜Ä"ƒ(mëčSJB˙Úv#_3}olŇ6\z˝HÍŠ zőXgžjÚjb<ޙţ°i_‘"|˛…ąÁDP f‚j˜c&(FDĚⰌˆÖX†Öz`))O,Ik…Ľ7ŽÖ˜x-¤J÷˝•]WŤŐ`s˝Ďóť°žžŚ˝Š­ůßyůľřőƒľpíşj$%|Ţ3”` Ť­vœ ë˝F|2qR"á9LH˘@Źr…žů×ÔÁ´?#–t&ą”ç÷ť5ą #ą¤IĽi]ô4˛ŰnťNœ8 iř=xsa7œ^ƒFłBlM)ŐľŽ×űG×ŕáŠ`dxî˝çnĹ+ç.řBWŇ(5çęt›Ď‹ÎNÝkË$¨7űd‰ćÜíŻ´›źÝNŔoNĘö†›“={&ł`ý(—a2‹!§íE“Yda2KŢ8e2 ć#ńĹd`aŮ1ÂD–žĄIÔ › 4z˝č”Éúx…du Ń§`í4z0č™Ä˘ę˝˝ś}řŽ8ż}9ý¤ú#hoP†‡ab˙t…öu~ÉŚÁՏ›ˇ7kb8×îpĎ'üxi}0. úNq‘V%íAŰLbÉčSJB˙Úv#_3}olŇ6\z˝HÍŠ zőXgžjÚjb<ޙţ°ißаÉ%ÔUPľÄv jAk 8řTâřQœ–0~‰/&ł ˎ&˛°ôĽMB Ýd ŃkěE§LÖˇŔ+$Ť>íkG ŃƒAĎ$UčíľíĂwĂůíËôG‡”’ÖĽ>:[¤?˘r™_ƒ÷°˛}=$Vgě!#˝nvމ=˘KôšţTZŽĎlĚ$}ˇ\*`„€tAŒÄ’>"]Ł ŁĎ4„I,Š>őĄ$¤ńŻm7ň5Ó÷Ćöi4“XnŒ›\B]UKlˇ ´Ć#"fqXFDk,Ck=°””'–¤ľÂĘ˝™lěWášXŠ5SžěŇľ¨Âî™=°pí,,žŻľlŞŐźÓ9ĄÔÁd–ůÚ)hrÜđ‚ÐôĂJTAŚF'dCŔú‡‡GŻŸŒGœ”Hx’(Ť\Ą/Fţ5ľG0íψ%…I,ĺůĂýnM,PH,ş§˛DşÁÁAřŘł…sçÎĂŐč ŚiJŁŃ/éĺw׎]pđŕřI2˛M€” ˜Ś5_čJĽćÜBnóyŃŮŠ{m™ÄBőfŸ€,Q@“7ůJťÉŰÝ (~sRśWëŤÚ3™ëGš “YLă”É,˜T}€É,VăGqZÂřQ|$ž˜Ě,,}/LdaéoČW™˝Ć^tĘdÝ ź˛:ĐčÓ2y)ąŐë™Ä˘ę˝˝ś}ř.8ż}9ýśťKBAڝ"ÁH>2{ăî÷ôŽś^ Ő đ=˜ńXűCÓ>óqĹőAęuB š´[ÚšDb`KFŸúPŇŘĚ9ŽŇ×Lßۇ´ ׃^/Ró˘ƒ^=Ö™Żšö€šw6†&ąŘâ ŞaŽ™ 1‹Ă2"ZcZ끼¤<ą$­VÎčŐdăOgÉwŒA'íôřř8 …7ćÖ××C“VƆ‡†a`pPďŹw‘…pUC3—É7Ę,:V77j4T,5釕¨‚L;8NȆ€ő^#>8)‘đ&$Q VšB_Œükj`ڟK: “XĘó‡űݚXH“XĚdŃ|9p`ü§ĂhëEĘoy‚żŠ/ĐŘ%řBWŇ(5çęt›Ď‹ÎNÝkË$–—97yłŢ]hąÚ_i7yť;Bœ(€ßœ”íŐúŞöLfÁúQ.Ăd+2BNۙ̒”ŰžŒŔÇŠnüâ]Ş‚>•8~§%ŒĹGâ‹É,ŔÂŇ×ÂD–ţ|˜I ŃkěE§L֝Ŕë Ť>í “—ň'[˝žI,Ş>ĐŰkۇď~óŰgčÔÓUHý!䲽 séţčE~éÝm_öQČ퓺tşS'ăą&öz\ƒ^=¤}Yf,ŤzĘń“Ž,`ş]Ť ŁGb[ÓfÉ7Ş%!ëUOËLb‘%ĐčAŻúăjŽmőXgžjڗ=Ź`NXľoëÎ`„MŽŮŘ`"¨†3A5Ě1#"fqXFDk,Ck=°””'–¤ľÂĘ˝Źä†[žąO!‹=ăÚŕ`ü§‚!ű ̈"ššŒI,vXmľSŔ‚)`ýĂãׁOĆ#NJ$<‡ IˆUŽĐăÖżŚöŚýą¤ł0‰Ľ<¸ß­‰…4‰…"ڧ˛dumüŹ>ţZ­ňÚ§ŠY`°ĽéÍyřBWŇ(5çęt›Ď‹ÎNÝkË$˘ëœ›źŠYœĐßäMžŇnňvw†Š…ßœ”íŐúŞöLfÁúQ.ĂdÓ8e2 ć#U`2‹ŐřQœ–0~‰ŻOfaaécŠ K?Š@ž Ě$Đč5ö˘S&ëNŕuŐFŸvÉKůˆ­^Ď$UčíľíĂw˝ůíËé´ÝžŻĹęŰyeNÚWŻQ^÷ôíÞÄŸG'žČżśž˘ćˆ SRÖľOîÓÚJOo;–Ľd÷K§BꋤLŇ™v‹L{%=ۀä#ĐčAIČú@ՓĆ2“Xd 4zĐë…ţ¸šc[=Ö™Żšö€šwŚ?ŹÚčĚ a“K¨” j‰ ԂÖx‚bDÄ,ˈheh­–’ňĒ´VX9Ł×Ť˝ŕ‰,(ţľ/łŢkąˆ.“ĺ5`‹%V[í8óÖ?<óÍýkj`ڟK: “XĘó‡űݚX°%ą˜„F=żÝľŽˆ§Ą¤ą0K€žŻRëL|Ą+i”šs uşÍçEg§îľe‹…g´ †kŔ˝„ţPňżžˆá衄ë-H}U{s}%_ŚX!]ĆŻ‰Čö†9 iťq)Ř5şŹ=ޏ˛*żóë¤o{2ć‚mœü=ĺšZ޵ʔMÎ8ՏQėn Ú.48¸čŻ_ęÚ.ˆą.Áb˝Wm^WOšćG?ÄqŠ‡Œ/a0Éiť÷řQʔ0~:yŞćő iť1ޅBׇJ™ĆO&OŰ?,,}&LdaékŃ-˝aaŻY¤˜ÄÂ$ÓĆ\ŰžĚ+p°vyí *m2Gś ¤}šß—ý$EŸ7–ťíKÝźË'éÉPö%ąhb;ů4zP˛>Pő¤ąĚ$Y˜Ä˘*™Ä˘7TĂ3A1"b‡eD´Ć2´ÖKIybIZ+ʜŃ눼ť!fMbÉ1#"Vú+^‹ÎĐ͍ KMúa%*‡ ÓN#N Ś€ő^#>8)š…‰G4řOnK‘sÄľDAóś‚ß`+Éo9ă…I,mÉ#rŘ@Úë[Ú/–h)öv˝ł‡NžÎ§ŽŽ& ¨äUQÚ(5çęt›Ď‹ÎNÝkË$‡ U1\ î%đkňWÚM^ÔD¤ę‚čEN}U{s}%_ژa2‹Á‡œŻCLfA} .LfÁ} őA°0üř–8~”2%ŒŸNž*;™ĚÂÂŇżÂD–žÝ"Ń;áöšĹ‰I,Lb1mČsŰ×%gÚÝą@ڗÜ!™a›­ˆ’%ˇÄdU—č+@űEx§Œ¤Żŕú”?\_‘››wüč`iÚÝëĎîÓbŇzMlŚ‹ FJBÖޞ4–™Ä" “XT%“Xôf‚j˜c&(FDĚⰌˆÖX†Öz`))O,Ik…•3z ŔJßŘşH,s#Ώ,5釕¨‚L;8,˜Ö?<_qó”Ő§°ˇäuBAŇ̎I–”‚ëƒ$i‹n3™Ő÷žžb㋪L}=( Y¨zŇXf‹,LbQ•”“Ä­aLJčľÄśjAkä|íb2 ęChppa2 …áŕǡÄńŁ”)aütňTa2 K?YXú^z'ÚM%˘×,>Lba‹iĂMjŸŽ?˘D`şÁŸę‘hşşömýë„ ç¸zodw› ý/6ľl“Xd}ęCIHă?÷¸fۗßx})Ç5ŤÔWslă'“ůíŰ>$ LI"ŒIB ˝–ŘA-h'(FDĚⰌˆÖX†Öz`))O,Ik…e6Ţj †Łý•7)–áWâ ŸË őĘqk(e†¤V˘r2í4â8ĂÖ?<8)š…‰G48NnÄć”'…ŹçöŚýą¤ł0‰Ľ<¸ß­ĐEXşB#€ˆžßr_%”řęĽ4Ít­‡Z_čJĽćÜBš7"€Ř–pvę^[&ą” ˝ŞšŻ5ölL{ÔĚš†ƒßǏRŚ„ńÓÉS…É,,,7Ť0‘…Ľ/Ľwâ Ý<"zÍ"Ă$&ą˜6Ö¤öِXŇ_‚ ôžĐbÜeőřć6{ŹerKYŇK dťŽ.€Ź>M6ÁČ*=OЊŽˇî$Đ>Yßńß!°híĽăÄ$ő+“X¤Ż;’Ä"@ß@s)’–ŘA-h'(FDĚⰌˆÖX†Öz`))O,Ik…e6f‹ĆČ Ď:8 I?ŹDĺdÚiÄ)`Á°ţááŃk„Ŕ'ă'%ˇ0ńˆÇɍ؜ň¤őÜÁ´?#–t&ą”ç÷ť5şHKWĚd‘ňŤ–+–Ř’™EąžÔrřBWŇ(5çę´Č˝Äś„łS÷Úî$Kąc‰â°űĹ| ŞgcÚŤfÎé1#éƒ0Ő)ŔM2őÍęEN}U{s}%_ژc2‹Á‡œŻCLfA} .LfÁ} őA°0üř–8~”2%ŒŸNž*Lfaaš…‰,,}*Lb‘’Lb‘ón‹Ô ůB2C7KřŚ–ü¤’”ƒ˘Úç|źu'śíë‚Ň}Č$YŸúPŇřĎ=ŽŮöĺ÷^_&ą¨Ęíň$Őż›‰ ĚŐ0ÇLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlĚ$‘žup’~X‰Ę!ȴӈă kX˙đđč5Bŕ“ńˆ“’[˜xDƒăäFlNyRČzn`ڟK: “XĘó‡űݚ]‰Ľ+8AD¤üŇ1Lú˛ą+Ž$cj[VUŇ(5çę´Č˝Äś„łS÷Ú2‰Ľ@yz󵨞iϚ9ˇÇŒ¤k Ć:¸IŚžY˝ČŠŻjoŽŻäË{Lf1řóľcˆÉ,¨ĄÁÁ…É,¸¤>†ƒßǏRŚ„ńÓÉSĽ_É,,,ý+LdaéOŃn˝fQa “XLiRűŠ ą¤mťŻĂ Ť“ŽGbéöSLŞäۧpEÇŽ%!ë™Ä"ˇ#ż?đú2‰EUZ’X4؅‹p5TC‚™ 㘠Šł8,#˘5–ĄľXJĘKŇZa™™Ä˘1ňÂłCŇ+Q9™vqœL ë˝F|2qRr hpœÜˆÍ)EâšDáÎÁ´?#–t&ą”ç÷ť5şLKZ҇Hů-_ţ“mŠô‰“`đ…Ž¤QjÎ-Ôi‘{#ˆm g§îľeK "ňôćkR=ÓŢ5sŽI׌u p“L}łz‘S_ŐŢ\_ɗ)™Ěbđ!çkÇ“YPBƒƒ “YpH}, ?ž%ŽĽL 㧓§ “YXXn&a" KߋnR7-&Lba‹iMj_Ń$–´Yô_÷ #iŇfo<Ö}@b@é‹XoŰÉ“XÔŻLb‘žŢ$ |ą"\MՐ`&¨†9f‚bDÄ,ˈheh­–’ňĒ´VXfc&ąhŒźđŹƒĂôĂJTAŚFgRCŔú‡‡GŻŸŒGœ”ÜÂÄ#'7ZsÇQüŃíLű3bIgaKyţpżĺú’}nŻŽÇŢSQśÂ—”* ™ć'šŕ ]IŁÔœ[¨Ó"÷FŰÎNÝkË$–âĽ}m€v“WJ˘öLfŃ/c”ëÍúň‰=“Yô>Ú8ć1ÚśQÇ\6Ád–žšë !Ö{őŃćuőLfŃaI8}!㧓§ “YXXna" K_‹n27-"Lba‹iăLj_Ů$Eß9QÇČ-nŒoS‹ŇŽJű 4şö!Â$Di[GŸúPŇřĎ=ŽŮöĺ÷^_&ą¨JW‹ćŠ(Ž&‚jH0TĂ3A1"b‡eD´Ć2´ÖKIybIZ+,ł1“X4F^xÖÁaHúa%*‡ ÓN#N Ś€ő^#>8)š…‰G48Nn´ć8އ-űú™ögĒÎÂ$–ňüá~ˇfüŢKâ7RŒŻ^ĘŁ™´zâ ]IŁÔœ[¨Ó"÷FŰÎNÝkË$–ň¤wN,Œw 48ę4‹_“PęŁĆqDN}łz‘S_ŐŢ\_ɗ)&™Ěbđ!çkÇ“YPBƒƒ “YpH}, ?ž%ŽĽL 㧓§J‘YXXúX˜ČÂҡ˘›ôM‹“X˜ÄbÚ0“Úw#H,˜>­SČ-PŸbŇyeQF×{•QŠX‚ę!ĺŐWä<} ô×tŻ’ôôŘN>”„ŹT=i,3‰E&ą¨J&ąčÍŐ0ÇLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlĚ$‘žup’~X‰Ę!ȴӈSŔ‚)`ýĂãׁOĆ#NJnaâ Ž“­9ŽăaËÄž~Śýą¤ł0‰Ľ<¸ß­ż7šÄ’•ě+ŠđŐKY6Óž.řBWŇ(5çę´Č˝Äś„łS÷Ú2‰Ľ|é Łä]› Ž:Ýâ×&”ú(…q‘Sߏ^äÔWľ7×WňeŠM&ł|ČůÚ1ÄdԇĐŕŕÂdÜR ĂÁo‰ăG)SÂřéäŠÂd–í.LdaéKŃMöŚEƒI,Lb1m”Iíێ$EOěÇö9odó§mˇeű˜Ä"ëSJB˙šÇ5ŰžüţŔëË$UšMI,T­Ś?ňÍŐ0ÇLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlĚ$‘žup’~X‰Ę!ȴӈSŔ‚)`ýĂãׁOĆ#NJnaâ Ž“­9ŽăaËÄž~Śýą¤ł0‰Ľ<¸ß­żŰÄ‚I–LB'–dć_Q4žŮ_WUŇ(5çę´Č˝Äś„łS÷Ú2‰eë¤wŽ,ŒwÍ 48ę´kžÁÝŤRÇ9őÍęEN}U{s}%_Śe2‹Á‡œŻCLfA} .LfÁ} őA°0üř–8~”2%ŒŸNž*7?™……ĽŸ…‰,,ý+ŘâŽY,˜ÄÂ$Ó™Ô>&ą¸oÝfż€ö1‰EÖ§>”„4ţskś}ůý×—I,Ş˛‹Ć_Ů"¨Zbýľ 5ž 1‹Ă2"ZcZ끼¤<ą$­–Ů˜I,#/<ëŕ0$ý°•Ci§ljÓ°ţááŃk„Ŕ'ă'%ˇ0ńˆÇɍÖÇń°eb_?ÓţŒXŇY˜ÄRž?Üď֌ߛÄ’'z d)E‘Ut‚/t%RsnĄN‹Ü@lK8;uŻ-“Xś^zçĘÂhy׎@ƒŁNżćÜ˝ú(…q‘Sߏ^äÔWľ7×WňeŠU&ł|ČůÚ1ÄdԇĐŕŕÂdÜR ĂÁo‰ăG)SÂřéäŠÂd–í*LdaéOÁuÍ"Á$&ą˜6Ƥö1‰Ĺýxë6ů´I,˛>őĄ$¤ńŸ{\łíËďźžLbQ•Lbћ ŞaŽ™ 1‹Ă2"ZcZ끼¤<ą$­–Ů˜I,#/<ëŕ0$ý°•Ci§ljÓ°ţááŃk„Ŕ'ă'%ˇ0ńˆÇɍÖÇń°eb_?ÓţŒXŇY˜ÄRž?Üď֌ß~ ąäůęĽJ÷‰/t%RsnĄN‹Ü@lK8;uŻ-“XśH„NE'#˜×M&łč—;Ęui&ł’—Œ9&ł`>„&łŕ>ú X~|K?J™ĆO'O&ł°°lGa" Kߋiq` “XLbRű˜Äâ~źu›űÚÇ$YŸúPŇřĎ=ŽŮöĺ÷^_&ą¨ĘâH,ˇĽ‰ j‰ԂÖx‚bDÄ,ˈheh­–’ňĒ´VXfc&ąhŒźđŹƒĂôĂJTAŚFgLCŔú‡‡GŻŸŒGœ”ÜÂÄ#'7ZsÇ։}ýLű3bIgaKyţpż[3~™ÄRžżŽŞ¤QjÎ-Ôi‘{#ˆm g§îľeˋЊčdóúÉdý˛Gš>OF`2‹ÉGÇÚźŽžÉ,:, §Ł/dütňTa2 Ëv&˛°ôľ˜&ą0‰Ĺ´&ľI,îÇ[ˇŠ/ }Lb‘őŠ%!˙Üăšm_~ŕőe‹Şd‹ŢLP sĚňˆY–ŃËĐZ,%ĺ‰%i­°ĚĆLbŃyáY‡!釕¨‚L;8Θ†€ő^#>8)š…‰G48Nn´ć8އ-űú™ögĒÎÂ$–ňüá~ˇfü2‰Ľ<]UIŁÔœ[¨Ó"÷FŰÎNÝkË$–r|š¸čC‹ź2ćkZ ÁQ§eó î^}”Â8ŽČŠoV/ręŤÚ›ë+ů2Ĺ0“Y >ä|íb2 ęChppa2 …áŕǡÄńŁ”)aütňTš É,,,},Ldaé[1-Lba‹iLj“X܏ˇn3_@ű˜Ä"ëSJB˙šÇ5ŰžüţŔëË$UÉ$˝™ 㘠Šł8,#˘5–ĄľXJĘKŇZa™™Ä˘1ňÂłCŇ+Q9™vqœ1 ë˝F|2qRr hpœÜhÍq[&öő3íψ%…I,ĺůĂýnÍřeKyţşŞ’FŠ9ˇP§Eî ś%œş×–I,ĺř"‹ĐŠčdózĘdý2Hš^OF`2‹ÉGÇÚźŽžÉ,:, §Ł/dütňTa2 Ëv&˛°ôĽ˜&ą0‰Ĺ´ń%ľI,îÇ[ˇ‰/ }Lb‘őŠ%!˙Üăšm_~ŕőe‹Şd‹ŢLP sĚňˆY–ŃËĐZ,%ĺ‰%i­°ĚĆLbŃyáY‡!釕¨‚L;8Θ†€ő^#>8)š…‰G48Nn´ć8އ-űú™ögĒÎÂ$–ňüá~ˇfü2‰Ľ<]UIŁÔœ[¨Ó"÷FŰÎNÝkË$–r|ĺKy7¸{çÔşęˆ4VŢşĘdýrHšnm>Vm{Í ^Š íş “Y3ÝřIĺ ČŘäŒSýE|éĆ“YTběHýCh;>2ž„Á$§íŢăG)SÂřéäŠÂd–í LdaéOŃLţLba‹iĂKj“X܏ˇnó^@ű˜Ä"ëSJB˙šÇ5ŰžüţŔëË$UY"‰ES˘DPľÄzjAkÚźŽžÉ,:, §Ł/dütňTŮĆd–>&˛°ôľ0‰…I,Ś -Š}Lbq?ŢşÍyíc‹ŹO}( iüç×lűňűŻ/“XTĺV’X4';…Š Šh%Ő0ÇLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlĚ$‘žup’~X‰Ę!ȴӈSŔ‚)`ýĂãׁOĆ#NJnaâ Ž“­9ôŢv9žbďŐ´?#–t&ą”ç÷ť5Ł’I,ĺůëŞJĽćÜBš7"€Ř–pvę^[&ą”ăËGÔŠĚ|ƒťw-L€ Žyýe2‹~٤\ß6Ťś=“Yô>Ú8ć1ÚśQÇ\6Ád–žšë !Ö{őŃćuőLfŃaI8}!㧓§ “YXXśZ˜ČÂҡÂ$&ą˜6˛¤ö1‰Ĺýxë6崏I,˛>őĄ$¤ńŸ{\łíËďźžLbQ•[LbŃÔ­8$­¤ 㘠Šł8,#˘5–ĄľXJĘKŇZa™™Ä˘1ňÂłCŇ+Q9™vqœ ë˝F|2qRr hpœÜhÍĄ÷śGQ™Oű’EÍŰV~ƒ­$żĺ(&ą”ę1ĺwk|őR7hż\Ň(5çę´Č˝Äś„łS÷Ú2‰Ľ_Eˆ:Ľ™opçžO Çź3™Eż|RŽs›UŰ^sƒW*CťŽĂdÄL7~Ry269ăT?F_ş1Äd‚;R˙ڎ‡Œ/a0Éiť÷řQʔ0~:yŞl?2 K? YXúR˜ÄÂ$Ó–Ôž@bi‰H‘8"Œe)I:~Lb‘…I,˛25(z0č™Ä˘śĎp2Z˜’ŠVRP sĚňˆY–ŃËĐZ,%ĺ‰%i­°ĚĆLbŃyáY‡!釕¨‚L;8N††€ő^#>8)š…‰G48Nn´ćĐ{ŰŁ¨‡Ř;1íψ%…I,ĺůĂýnÉ dK‰ţşŞ’FŠ9ˇP§Eî ś%œş×–I,ĺř*RÔŠÍ|ƒ;÷źZČ8ćő˜É,úe”r˝Ű|ŹÚö†›ˇHۍK“YT3ÝřIĺ ČŘäŒSýE|éĆ“YTběHýCh;>2ž„Á$§íŢăG)SÂřé䊲ÝČ,,,ý+LdaŮ"Í9ŞOěSŠ“Xä“Xä/K‡(F:äH‘GśœÄŮľZń—™‘!ŹV žáÓJ×IĹ` (›c}O…ő‡ąÝ*ˆŇśŽ>őĄ$¤ńŻm7ň5Ó÷Ćö!mĂő ×‹Ô| čÁ g‹Ú>ĂIh™Bô)¨­ńňˆY–ŃËĐZ,%ĺ‰%i­°ĚĆLbŃyáY‡!釕¨‚L;8N††€ő^#>8)š…‰G48Nn´ćĐ{ۣ薊iF,éîŰo°•äˇœĹ$–R=ŚünŻ^ŞtŸřBWŇ(5çę´Č˝Äś„łS÷Ú2‰Ľ_Ţ"4*IäŰ3™Eă#ú ÝďęőË)ĺşw>É,&mómۨc.›Řžd–‘Ř;:ŒŘç&ł€ĆR ĂÁo‰ăG)c7~˛8čřéäŠÂd–­`aéwČŚŐ'öŠT‚I,r‚I,ň— ‰%Ci?őDƀ ˝Ů ş0HÄľ'‰%šer ţćG€ăŁĐl řŐœ€˙đƒSmh‘Ş‹ÍńÖmž…Ž:=“Xş JŰ:úԇ’НäÚgúŢŘ>¤m¸ôz‘š=ôřÉX~ű˜ÄR¸} jAkŹO ƒHŰŐń`Ž“qüH>ŇŞ }˝—0~p?™źdĚá}™ú †1Úń•ŞŻ:F”v§ň{Ú8íŐGń‘ŞOŞíč •ůŃ{áÝ};TBĚ÷Ž/ÂßţćKđÁŇJĘ>ü´Ż×Šôey¤^rŰĺ1šŕčb'9žú>”ę“wź2ÇŸƒă‡ďR},@pđ9¨ÄńŁ8Ľ]ě ăGń‘řҎŸTĽń†xGçĂř\ĹÂŇOÂD–ţ‘Ç>ąO}¤F=“XT} ˇ×śßýĺˇ/§?Đv9íÎ$ąţh%ˇP†ÂÍĹĂ{gŕą}łpŰŽ Ř54ăƒ5X­7`acΆë/\†WÎĎĂJŁŮC`ÄţĐ´#ÚXEOcůëOŢ“X"ŠVřăÜo_žßżźlźlގR&ąČÂ$YŠçrb[=Ö™Żšö€šwŚ?ŹÚwcI,šŞ+D'‚ZĐOPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlLšh.:FCáÚúĐ÷Ác<ˇ9 ť&'a|lV×Ö`aq Νż/ď5xĺŐ×BÝz\&Đ^Ľ˘U]PŒˆXů%HJuÔ#žup’~X‰Ę!ȴӈăěgX˙đđč5Bŕ“ńˆ“ ĎaBbi­<&JsQÇqU‚˜ögĒîžý[I~Ë96Lbą“Ę˙ň˙‚ĘńcP”ˆŠÝĐřŰ˙ü%3˙–ÔĽľ˙ç?€ŕâyI×řĎ˙´nż“¸_p˙=TQžŇfĚ4`+LbŮ.>ˇĎZKTäf_ŹŽ˙ëjĚ7¸Ű*ÚMŢîNTăYőĚ4uNőęÓ 8ĂM^Š>šúfő˛}~ť™Ě‚÷cWţé?OÚ ˜üýç߂˙xěąN2BŞž?}×AřżöřšŸů)˜œœPl&'&âżĂŔ“O<këëđ|áˇá÷żôhĆrŇf‚bDÄĘ/!çTŤUřéŸř1Ĺę?ţćď@ŤiŠëŕ0$ý°•Ci§ÇŮϰţááŃk„Ŕ'ă'%žĂ„$ ÄŇZyL”梎ăŞ1íψ%Ý}ű ś’ü–sl˜ÄŇ/’™oD3EiŁÔœ[¨Ó"÷FŰÎNÝkË$–r|•"Qľ˜Ě˘šdę›ŐËöůíf2 ޏSĂ5řđiĐÉgŽîkYČu"t7äAĆé'2KD\ÉʝӓVdËÄ|ę–CŽóĺľuř÷OeJ3™%ožc2 ć#ńĹd–r„‰,,ý)";•}bŸúH% z&ą¨ú@oŻmžŰËo_N írڝIbý‘XƒR Uí‰Ă–9 Jô.Ď˙ôÁťŕ‘˝3đýöŤĐčî÷:;ŸbH,oîZŃ˙­&źyé<0—ü2 :yíÂŐ¸ĐsG8ŢJ˜Ä" “Xdej>Pô`ĐŤÇ:óUÓžPăńÎô‡Uűś ‰ESçB„ˆ-¨­ńňˆY–ŃËĐZ,%ĺ‰%i­°ĚĆTKľRżňç˙,|čńG€*#ĂĂđ'˙膇ź~éü§Đh6;dú@#"V~‰Ěń‹Ú]­ŔĎţôO*–_řÍß óq{ČńGskEÖX‰Ę!ȴӈă¤gX˙đđč5Bŕ“ńˆ“ ĎaBbi­<&JsQÇqU‚¸Żďţm`Kyţpż[3îŠ$ąT*)Aŕ‹—];ĄTÁꋯĹEˆ˙Ş(_iłf°&ąlŸŰg­D%Ş“YT“L}łzŮ>żÝLfQűńSˇďŸ~­“Ç÷OĂÜŘ\\ٰ¨ŒÖwzxHń'˙ȲČ,ď/,)ÇŻ-*>MŒĂŸ˝˙.Iýć•k‘Ľí‹É,˜赝É,˜Ä“YXXŠ— °°ôĄČSx˛j ƒąPtF=“XT} ˇ×śßĺĺˇ/§?Đv9íÎ$ąţč<‰%zeĎ_xä~+KZž›żňřýaű[ţ…‘XbŹž€˙űó߃kőœ]X†üÜ+đŢŐťă­T€I,˛0‰EVŚćE˝zŹ3_5í 51ďLXľoXˆ"“Zo&(FDĚⰌˆÖX†Öz`))O,Ik…e6Ś’X˘ż˙âĎţ)+KZź˙^ř î?í`ľh…ĽŠÖƒÚP"sü˘Îé´ľŽő"&ښplę†Ô|°•Ci§ÇIϰţááŃk„Ŕ'ă'%žĂ„$ ÄŇZyL”梎ăŞq_ßýŰŔ$–ňüá~ˇfÜń“XĘów#}1‰Ľ_~>ˇrž>o’y$sž/ŠĽ&ŕ×dU ośqĚëˇá|ž—ŔŻ(őQ ă8"§žY˝ČŠŻjoŽŻäË4wŽ›UŰ^wĐś—Fa9~ zâŠůşpt˙ůÓwĚe)uҡ=7"3őš)×őÇ]@Ć&gœęÇ(âŤ3†N..ÁŢ; ×76aŁŮ„×çŻÁož˙Aś UŞŠn°Z5ś]c˝§&ĆşCˆő^}´y]=ĺ(eüĐć9|†ÓÉS%0ŻĽHۍńŽ[“t}ČÂ҇ÂOdaésa‹îäCˇA4mLíۡsH,ĐjÁ{Śá™Ăű!+őf žqň4üŕâ<ŹlÖa×đŮ ťýÔŞ2Ÿđ#‡÷Á—Nœ7ćŻC+zĹOâNmŸxűz´ßTű‚ eŔ•ľ řű_~1Źv3śŻ„ř 2”ĂqßTkˆŔę=5‘úPiТ•)d‘Ä"2ˇˇş lc5eßR(‚ďíǔHŰ:úԇ’НhäÚwűŐç՗I,Ş’I, ­‚ 㘠Šł8,#˘5–ĄľXJĘKŇZa™Š$–Čđ{>őa%ż^oŔˇ^řźőö;°ź˛ ť&'áŽŰo…g?ň4ÔjňiĎÓ~žňÜ7ŕÍ‹kfü¸ 4ŐzPJhúżÝüd–6ÖŢą!xd˙”d{ňú*Ü:5*é~üŽýđż˝vÚĄNúśçFfŚž7ű“YŽŹoÂ+ŻÄ]šźŞîI†"KĽ˘ń‘řâ'ł`> ×v~2 ć#ńĹOfaa)N˜ČÂŇÇ’Ź’čT.¤T"ĐčÁ g‹ŞôöÚöáťşüöĺôÚî §Ý™$Ö˘WńřĆŇ9YYÚ؄żő;_†–AŽç{đož÷üâ§?‡vMHe~ř–đÚĽkT@ÝuŸţ‰oÝq zš´.ˆ‰ńăŽ+ŃIfľăŁŇž‰hŽwgđľş,9‹0E\ˇ [aéľHɗîM§öŕ;›C!oúĺ ¤•‘}Šřƒľť•ř‘QúDPôú"˝ŁÄÇr{ă)ĐvwÇAŻ×ö “X2u` ŚWۧ›ť’ŻAN;nŹ‚Ƥ֛ Šł8,#˘5–ĄľXJĘKŇZa™m.ÔGOPůŘ3O)úĺĺřüßű‡đÁŮsJěüĘż˙5řď>˙_ĂÁ2Ůôă}Ţxó-0ö#—c3őhi”#şöŚJŮîShâšÎj…űöÓe*˙SgĹ­TwĂ(ŇÖAcŢľÂéővqœô ëœ큅k¨Xx’(Kkĺ1Qš‹:ŽŤÄ}}÷o“XĘó‡űݚqW‰%–ƒ‡Ł÷ áyÍ&Ž?r;ŔţƒhVUtcě$ťž@ɲ•sEq{(__iłf°&ąlŸŰg­Äż‘ íj3™E5ÉÔ7Ť—íóŰÍd– ~ŇJśř÷/.Ŕh­“\şrçîq¸mj N\_q¨“žíššŠďÍLfšśśż"čŽđşz-܋\^[‡cńÓĆńńŁCۙ̂ů€^ۙ̂ůH|m-™……Ľ…‰,,}*Éęˆn[„ô‘J=ôLbQőŢ^Ű>|7—ßžœţ@Űä´;“Äú#]žój‚[wMBVžřÎ{đÁâ •jBéĚůŐuřĺ^…ż÷égĽ2wLďjot"Ü HZŘݢŠôÎ톏Úžřě‚ŮŃářÉ.Ťőœ_Z…7/_‡Żşú]ílŕäăĽ˙§Ÿ|ŽLK~?˙/Áó‹ÉŚL¤ (CáIÁÇoŮOÚˇ†ew ŐâW\_ŻĂńŤKđňš+đÜÉK°×˝S4ŐިMţ‰ŁđwË-˙úďžďĚ/Áđ@~úŢCđôá=ph×h\‡Ë+đę…kđ›ÇÎÁé…č‚fŤÓ$V[í›|‘ďœ‚go…ťg'ÂĹa űg%~Ňźvaţŕ˝KpęÚ@§vĂLDŢZńç]3c𩣳đŕţ]p`b†Âş.o6ŕÂŇ:|˙Ü|éřex˙ęjť˝ęOâ;íUzcىe. sTv,}^}ôz‘š=ô™ł(őŤŚ} &ĆŘÎô‡Uűś'‰EӄRE4&ľŢLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö ËlL˝hŢ~K+îő[Vňżô•ŻÁ™łçâ9=¨t׉ö1şrő:üËýoáďţíż!•šýś[ {9÷ýěOĂO}öÓRţ™sçáo~ţăď:Ż řô|ţôŸüŁ’~ţĘUřŤóó‹AďIfŁĂĂđ‘§? >p/ÜrřLŒĂĐĐ`LšríüŕŘ;đí^„÷NžĘ:‚żö˙|äɁNţÝżţç˝ďżóű_†ýoUŞs—42ł{>ţĚGŕáű÷Áčč(lllŔľë×áíw߃ďźř źúú›˝ş+c*Ô˙˙ý߃Ăňîľk×á?˙Ťż/}öíƒĎýÄgŕĄîƒ]“°°°ßyů{đż˙Ç߀Ľĺ ëĂO< ?üě3pôö[all Ž/,ÄOÓů˝/}Ţ}ďDěíw×Yΰţá!ĚŮX¸†Šĺç0!‰ą´VĽš¨ă¸*ALű3bIwß~ƒ­$żĺ&ą#đ+@ď„˙7šPEËÔAln€…¨źú?x ‚sg X^ŒŸö#cĐÚ;âŽ{Ąőřӓ“V€ŕ@ĺľW rú$ WC? ƒC ˘§ĹÜz4ÄţC€ľÍKÂşWŢü>TŢýp`e ‚őđÜ}p`bZ‡oqďĐźďA㍠&ą”ăËĎçVÎĂ7ÂçöY+MÂdĐÔ)SM}łzŮ>żÝ;ĚňcwŞŻúŢů…đÚí Dd‰äłwîƒňâ{ä:훆Ÿżď0|ô𠹍ćůĺuřjx-ö{ý$,…×)óäˇÎÁ˙íKşľp˝ţáóehśÔcű˙ţÔăđôÁ=’îOýÖˇŕí+‹J}áĂ÷ÂĎÝs‹d{ěę"ü'żýM…Œ0RŤÂ§o;OíßwŠđź8zÝĎŇfN,,Á÷.]…/ž<§—ľăçGöĂ?zćqÉß÷.]żřĺoÇÇęˇćS°{XîóŽÜ29ßúůŸęĽ˙Ö7ž ϟť€Xpwxţ“‡ÂŁł{`nt&kP×ň˜8ž ăüx>źQď<=•É,YcŸƒôm—ęC˜çv,™……Ľ…‰,,ý+BYţzúÔG*hô`Đ3‰EŐz{mű\nt'uÔÚŁírڝIbý!zď|ˆđZ”ˆÉYŮh„Š"Küęžj×=ÁĽTŕó×ŕí…d“ęęŃŻŠÓƒ!&Ę´ýě‚_xňA¸cˇJš™7Ň3ťŕŽđďg‡çN]€ń˝w`š.˙ŽúݍčPşOqĂś=şţúSáMŠáAĽĚÜx5ü†™…?ýčđżźř|íäe€č‰/"AŠ ňJ¨ßžĐýĂ}$<)‘ň"BKô÷cw€ţÝăđ[oŸďmň‰čÝ$Ü7>ç‡îƒťöL(~&‡j0šˇ÷Ÿč0|ůř%ř'ßy–6šŠ }煚ˆ¤3RŤŔőŃŁđĂw¨žŢ5\‹˙"˛ĚĎ=|žyň üχë]<PžL#uvw(!;P ĚEaŽĘŽĺ@ŁĎTAŃÚŔ$–ŒŰöéćŽäkůs”k D4&ľŢLPŒˆ˜Ĺa­ą ­őŔRRžX’Ö Ël,,ą´×ŠZM}íŔĆćfź†FkŤDd‰IĄ~đö;đK˙ă?‰uAL  Ńlônî}íëßRˆ,‡ě‡űçŕ\xAŤ˝D¤ćŒ‰őŠ=ŽÔ%ŠžŇ#ą„ëč'?ńqřůŸýŒ)öťvMơßz üď} ^zĺUř§żüŻ`uuľÓr°î÷ěÓN˘ŞîÇ?äg~äSŔŃđb\ô=ąćNŸ9 ˙äŸ˙áĊӝ˛AŞÍB9pĂ#Ăq_<ýáÁ_ý NŸ™Ů ŸýсGzţö÷cŇÎĐŕ üWĺ/Ŕă>$áĚî™ ˙ž†g?ňüű_ű˜üŇŢĽçjÇYΰţá!ĚŮX¸†Šĺç0!‰ą´VĽš¨ă¸*ALű3bIwß~ƒ­$żĺ&ą‰ßBŰëÂľ°Ş)ÓŇź*/+•ăoCőW˙Ŕₚšź•ˆÔňţťPůƒßÖţ$4?öÉ\ĚŕÚřˇ˙‚NŠykŤœ őá_ĺ_ÖŁOBăg~`pŠčÇʉă0đkżÁüEÔ7„ŐK፴—ż Őš}P˙ŁÄ>őőĹLb)ǗŸĎ­œ‡o„ĎíłVR„É, ŠSŚ>šúfő˛}~ťw*™ĺĐŽ¸oVžýî{çŻĂ‰!řČá)ď3G"‹ŚNřŢCđ O߼\{ŽžęrŰ#ˇÁO„×M˙âď˝ yňÂŮ+1ᢖzšÚČ@î Ż3ż5ż őa%ěä‡÷N)Íí†cWňÂĂ{§Űožš”6‰˙˙ŠŁ‡ŕŻPWVŐG ňÎŰ`zl$&ąT"2Ku ţŤ ÔÂżh„•o}pž}ć<|óô…đűExůÜ%iˇŰ%ąÜ?ł ~éG>Œ’X0‰žžň>ń8LÔڕÝWáCtlÚý™X>w÷!řo?ţ0JbÉJtň ĎÜňĄ[ŰOH NŤ‰ża,< űűŸzX!ą¤e ź)ů—žşžú˙ł÷–\W÷Š×=9çIٜeĺ`Kśeă`c’I Ë 삗°°ťdĂÚää ĆŘŒs’,[V´$+§ ŇhrÎą{:ÜŻÂ UuCÝŞzŐÓÓóűI=ďŐŠ[çÜ{ë† ˙WuÎâö“iT§bş"–ŤW̓?{ۍF‹‰×_ź\>řÖkdÁŒQăŞ[ ѡHIJlö´ĐßľF‹‰WžżDţćÝ×ɊšÓ2ĺDǎ‹Ăž;kŇżZĘˆ1‰łoçęŁTů&šˆĹR–&P—ŮžLů$ňôŮ?_NĽ}9J[לTÓWĆZʗ;ąŞę+üş˙Ŕ-Ĺë_{ť,Z¸0ą‘ ĽŐŠ…¤żąą1yč‘Găżo>ţ…Ÿ>ńt×éśíŰeý 4żˇÜx˝V’ŽˆeŃÂrŮĽkëîž÷ţîüÍ/ßőöˇĘ˙ČE,&nşá:ůßżúË2}úônŹ2•Ż$5?†ß[aüÂĎţ”|˙÷|—&b1qî9gËo˙ƏĹ'ą7•ýË3sĆ 9oőjů/˙é'­ţW­\!?ňß yáç~Jउ„+ßűŽwČíŻźľż[Ž*8:lýîĄÜŤkř2[|}ŐđWa@R}ôeMUc toZą]5@őyź~ą4ĎwbÚ]Ó"CÄTÜú´î˝KţöOÍ"–Axƒkŕ‹Ÿ’Á|HdĚ.’imX/ƒň{F‹1ýăÉ´?˙ƒä‰-yJ–3xa ţݟE,ĆôťvĘôżţ€;ˇeĂöu—ú¤÷a¤‘˛ b™,1'rěŻKöZš9Ůtł2ű2^;é¤qĆéůqĎóŽóţî‚ů‹–mcłUßź]äWOďÎo&–kŒńşŽîŢWIzŰ]d1–Ý9…*sűyóĹşŕáĹÇd߉“ňÍ­űe,×(Ϛ7SŽYž@Šňô}W­–˙ńŞË? ě=íĺßx˝Ětßî›7}P6:ŽŮŻ_ąHkŁ—/™/ł§éçwˇŹZ’N3;<źd‘~=öĐđHŚ ý§ë/“˙yëŐFKžHHóÖ Ď‘ż|Ă+’˛çöǂéúÓV˘yv˜Ţňżőš`Ì^&CΚ3[>üĆۍ"ѓZŢ˙ĘWȡŻî=ÉMyöőnúî?~}Ç=ڈř]+ľ÷•Nă1Î)óĆŮXʑ¤ ě™üdýŸSúÜk Ź1”ÉO{Nŕžű e7Ae˜˘ d)‰k˘˛Ř&[ł‹n?“E,É÷Gˇé \>wś|𭯓w^qĄŹœ7;ö´ZÉ_[؉Z‚HŘ2=ˇÄö =ú˛ŚŞ1Pş7­ŘŽúˆĘ}ökÜ.ĺĄ^ck(n3űKŁSqëŹ_#_ř÷äBĆćăÝÖłOČŔW?oŢćČ!řč˙Kž|RÂg°k‡ ~ěĂŮź¨rľŒÉ´O}<Üh1/ ĎGoşU‚ËŻ 'ŕÜůţАLű—t+K3ąęŜČqřTĜȱż_ fŃ76űQůÍŰUA~őôîüfbšĆšÓDĚňĂk…ֆ׏•m‡‡dÓÁă†mV:ëńâEsĺ}ݏT|8{Ţ,yçeçˆ+żűN ÇOSÉsӪŒżßqăĘEFW×,_Ř­ĽNúŤ—-ŒĎ˝ÓDOŁytçžnÂŰĎY.?ň˛ 5ŃuĺmGËŚđ:óńQýőH—/^ ?qőĽŮ€ě>1$ť ?:íŽ?>Ôý;‘Š^)ßşíŚř‰,y†çЛŽŸŔ’ĎJTţ_žáşđuO`ƒ˜%b+†˛›Ç ‚˛LAxľœ˜¸mîśÉÔ4)Ű&w“KvÝąDiż´ţ%yóĽȲ9YńĂ™3䇯˝"ţŰ~ä˜<ťç@xŇpPžŮ˝Oö†ž"?4šë‹X’cA÷×Ď?}Ă2Fö‰(ŃSC>öřóňĺ5/ÉÁđ űŹůsĺ]×^&oźěüLşĎZ*W…'Ďě>˜ˆI˘_¨™Ęß§Sɗ0öĚđFßĎßzĽvřxçÚMňˇ>+űO$BŽšÓĺűn¸LŢs}öÄęÇnźXܲWNĆńÚűŔĐŕŻXąH8)y˙3ňŔ†rüäˆ\ś|üÜí×Ę幓ŚĹłgČő+ČŁ;˘Ç]&Ż`ŠĘôóŻźT{bLT?˙řĐZůÜÓĺŔńa9{á\ů›.‘ˇ\un&ÝËĎ]"׏œ/Oí<’d1<zĎËΖŤWeůřýŻ<)ź¸łűZŁkĎ^,˙ýÍׅž{ż˛ż`ńůŽËWČgžŰžĹ´R†”T›EĒľ#bѡˆĹ‘ČÓg˙|9=–öĺ(m _ÚRM_k)_îÄuE,Q˙ňWż&ozýëdéŇ죙.˜/ďýžwĹ;vî’çÖŽ—ľáßłkÖĘžýű“ƒÎœ<|[ÚŻ˙‰z÷ý>,?öCߟyuŃů箖ĺ˖ʞ˝űăôŞ+|TrëËoÖ˛w×Ý÷&ŮOňŰ+n‰Ÿ“ćĹ ĺ7~ű÷ĺčŃŁ]ŰUW^.˙ó—ß'łgőžNöÚŰ_)˙ô/Ÿ”“ĂĂňý„|ř#—éÓ§ÉÇ˙ńCZܟý…_‘Ńđ&YŤ-–^ąĺńâ ϗw~ç[2i٧Ó|äŸ?!_řňr2œsŁěŽXžT~ú?ţ˜Üp]ďI)3Ăă—ď˙žď–ţŮ_uëÉś/ťäbŮ´y‹|ús_”Ý{÷ɅçŸ+ďůîwĘźysťi˘źý]/Ég>˙eŮwŕ€\tÁyňîwž]ćĎĎţ‚ońâEńož_ˇ>Ţ[APr|stŘúÝCšW×đeśřúŞáŻÂ€¤úč˚ŞĆ@éŢ´ŇDĐŽă3Ď-ŤÇŽ×ŘŠŰĚžAÄŇhÄTÜ>Î{ƒŸřÝáźůŇzÇ÷Jpőu˘Â˙›7ˆúôżˆÚź1“lŕî;düŠkD{~ĆżŇçŘŃŹĎhŢ|ÓŰDn}­sç‰ÚžĂ}ĺs˘űf&Y°ńE¸÷.{ÍěÇţ˘íƒý91ęŹŮüě/…w{ç§ÁÁ˘ţę";ˇ÷l;ˇI+,ëŘšI˙đ?HďĂH#eAÄ2YbNäŘßoâ#÷n\^3dĘS.?–üćíŮôĹĺ>S^3tQx-đÂEú8Úv0ţŒžĘ˛fďQ-͛.Z!đŔúä•{†?}ӅńSŞóŹŰwTžžiˇě ŻUΝ6(7ŽZ$ŻZ˝T–ĚrĎ]0K^=ý%Ç}í)ůěÓ%yřXKś8.żÇăńşź˜ĺő-—'vŽË?ţ˝çÚŐZń“ĘşÝG’˛KŇžóńKŸ|HţńÇ^żľĂw^šJ>ý̎äŚ"–‚ž;;ŇżZĘˆ1‰łoçęŁTůąh1—ŮžLů$ňôŮ?_NĽ}9J[לTÓWĆZʗ;ąę‹Ż ~’Čoţţ˙…‘ČÄDô*›čďőŻyUź=Š$zúÉ]wß'CCCńŘÜťn‘ôďc'NÄŻzőmŻČřŠžźňŮ/ޑĚĚí1}é’%rÉEdҏśřŃLîWŽĐE|ĎýĆ"–Žh5âšç×ʇţţ#réĹĘŚ-Űdkôt•í;ääɓqščbkŹ ľýZ<ÁŞ”Vâ ÇwźE€üÝ?ţł|ţ‹_IĘŇžč˛k÷^ů÷@ţř˙ţޜ˝jU7í­/ż)Ě×9zě˜$ýŔź_˘'ťüŇ˙ř >§{ęég䉧ž•ž˙ˇd0÷¤–HđňËżödääH7íŁ?%üż­˝šhĹňeňüÚu"ˆX<|ŐđWa@R}ôeMUc toZi"h†(+†ë´~Ö ]Żą5ˇ™}ƒˆĽŃˆŠ¸ýĄ‰HňŻ ç‡ÖĎü˘Ť’óč¸Ű\x™?ó+˘>ř›áG|Nw÷2úĂ?Ů5ťśKëů§ľXÁťH‚Ű^Ó[^΁áv*z…Á#dóuď×d앯O֕$ءG7^xI,b‰n^FçĘёIká" ~đ'DÝ÷ľđ "źÉ¸ňěp2\%c3gI˙đ?HďĂH#eAÄ2YbNäŘßĎ@bź9‰˜E,yĘĺǒ߼=›ž¸Üg‚˜ĺ-ëOcŮ}lXÖí=o]W|xë~ykîŠ- gN“Wœ˝Xî߲/t“­ÇhÝkÎÓĎw×î;"yjsr}7L"ź.űĺwʁĄ“ňöKĎgąÂü>łçP,ŹI‹^†×^ϝ?[6>.Éůgňä7Ź\,íć7ZÎóěŢCÉŤ…Úą˙ěŃľrűęe˛,ź~źtÖĚč¸|ríćř‰,GGFă×ČGB;7V.•ŠůváŒé˛<ÜnÇą˝ŮhˇĄH|22nÝ౑‘î÷‘îľyzĎ~ů˧ž—óć͕ĽQ^gΔwî’uĹ×î‡Ćƺ⢇vî–o_}vĆďe Jžď fÉ'Îú1Aö˛gňă1Î!f8˝AČS•ůH-ť8ěˆXt{`Oo-Ÿů菸|őa,wPPîܢŠ>ĚÇ']{ç %žąÔíGŽËĎî.ůëސ7_vQFÜ`âÜsĺGŻ˝LŢ}Ņň÷OŹ•ťˇě”n[kż6çgë7Áś<"_^ť1~EBôËëÎIaô4‘~lÜzŢY˛éŔaŮxŕˆl ÓŽŰ$y­P*×6âŰTcărŰšşxćŁßZ#٧ĆHrđółOż˜˛DÜžŒ=¸e3Ţc[vÇ"– ,KçƢj)9<<&_[ˇUŢvő™ôKfÍHD1*9đ{Őyz>7‡ĺýüł›CŸƒqýtˆ.~řĄőňŞ‹VÉĆđÄoCôˇ˙˜<żçhűQс\šrž,šýĂC/…',ť'žZ‰0&9€“͎ɡ6î‘W\Ř;˝xé\Y#qFĐ˙Ĺ卟ŞŇˇĆiZ‰îÄ*d‰^]˜<ľ¤łMT'7\wu&]$HůâWžÚžË#_mÁ¸œ /ôÝy×ÝňŁďýţŒßk^vĽÜ˙ĐĂÉnąěÇ/|éŠĘŢńÎ}7o–uë^+ݏ,“ö‹_šSFGRiC§›ˇl•ç׏“ŤĂXić/˜×ž.ŁÄűꌣĂÖďĘ˝ş†/łĹ×W $ŐG_ÖT5J÷Śĺ'‚&çŐjęçKsńĚqoEИŤ1ˇO?ĄŰ^ńęXÔ12rRĆƒ§ŁEOúœ>MZoý.˙ť?ĎŚ_÷lxW*œƒ§%çu­g >Wœ%Á­ˇËččHü´2Ő>Î }žýݢ{(zŒY/ýŃ#l|AÔE~ŻxČĚ>C7ž¸NF6ź cŤz7ŁřÓĎ^-Á÷˙X/]Xż­áĄä×úľń?HďĂH#eAÄ2YbNäŘߙĂĆŢÍ@Ä,bÉS.?–üćíŮôĹĺžęb–7_˘_ť]ť÷¨ě;~˛›§§vÖ$‘¸%˛Äu”ŞÇč)+ů×őDYřüş˛űؐźpŕ¨?9&Ó[rÎüYńf/ŻĂޘ3S\ĹÚ}줏ÝwXn;'+’šnů˘ś%zĽŃźXTŇ!Š˝ć¨Cô´–[ł%Žřđ<ôň%ó3ž˘'§<¸mݤŰ{”îé=3év†ĺx~ß!Oćۨ¸W,YnÍyŮkę‹fÎč YŠ>˛ko}á ý)5‘°číťłĆv››60ćëxü׹G‚˜çö”Ý'zńŁ'áÜźBż&˝röěžĂôu ădď;˝6çîë?ˆYÄ9ÎMy1 Ŕ! L]Tć#ľXěâ°#bŃí=˝ľ|棲âňԇąÜAAšs‹Śú0—čöśP":˜DNŒĘ‡~Jţĺ‰çĺ5ž+7Ż^%WŹX?ÎĐĆÜđÜĎÝň˛XŘňOżĐ‘ĽÄ‚K/ĐŇsÓöč.—´˘w‘˜Ľ}ƒ/ ě91"ßűO_LpâW $éVFT|Ó-h_źd‰÷/ŢómR†Uóf‹WÝü™ętĂžśˆe ÉgĚx"TŮzđ˜–~ö´řŚă¸ÄďB’Ë—ÍÓŇܡag*,űŔ`ř—”=*[+ô°˝íŻďˆÓĹ" p§ĹőŘ>řť|Ů\Íßm­”{ńíR†łć͐ýCÇŁ{ƒą˜E‚œ¨Š }fÚá•oˁŞ˂f ,vąŰUj<Đěâ°çΆôŻ–ňé'ńú†őQŞ|§ĄˆĹRžţŁJ™íɔO"OŸýóĺôXÚ—Ł´5|iK5}eŹĽ|šŤ~ůj‹Ł1=şyu|h(~şČ'>őYyÍ+o•›n¸Nޏě’ĚŤň̝3'~…Î9çœ-˙ü‰— {Š!Č<őôsńkˆ–,îý˘ěâ /ĽKËŢýÚz”Üfx­Đ×˘× IţTűz“O?+ŻíŤ3é.žčů›?ý <űüY÷âyiăfŮđŇ&Ů`§ ]KçÉ^ńE— Đ.dvŤ&ź(ŘR­řł3Ÿ–qúôéZů?őń2Ź/ÎeöĄamŰą3Ésű)/ŃÜÍÔť÷î•+%+dŮš{&ˆ„¸ťBűŐůruŽoÚZřz!G‡­ß=”{u _f‹ŻŻţ* HޏžŹŠj ”îMËO6ĽzS?GˆXš‹gŽ;1­hވX"Z[7iśŕe×ÇO)K^ń—Ř"aGôú˝—‡łÇ`8÷ö~YŒŽJ°c{÷őB­-şOyŮu2Ś Ďß;DsŇČȰL›=W‚ó. OV×eó孂E]|y|ž›ĆČĐ üÓߓŐçÉřůÉřYŤEuŽŒ,_)ay˘˛F7ÚÔxr~^˙ƒô>Œ4RD,“%ćDŽý _ë,ôn"fKžrůąä7oĎŚ/.÷Tł\ľ|^,$ÉóčöƒńÓR:éŁë‘Ďí>,ŻÎ=eĺu,“™ƒńÓ>Ňb–K—č×'w’5űŽĘc;tkrääxü”–áöĎí9b˛tĘp|dTžÚuH˛Ü°j‘|výś8öšW˝?žsżœ5wVrM6äÚÔŤˆ.]<_fäŽyoR Ĺ.;"ÝŘÓ[Ëg>+._A}Ë”;ˇhŞóńˆn’XA¤oډ5ăĄýpxńŮç_”Ď<÷‚ †Ë—,[,W­X"׏Z./[š<9°ÍńŽËΗőűË[wǍ"ş=r1ϖCGńEG¨Ń=ř/tˇş5×˝YgnÜś‹{ôŤôđ&Řźé2kZý)bÁĚiąçXĂb ˝’)ľŚuŸžËTÚërq6Ǔ§œ„ŸËçęőły˙ąXÄŐQ$މž˜ÓŠę3R•DőŃ~úJ”ĽV3h×ḏ˜k?á+UöYӒW9 ¨¤}¤)hŸ™ö_8FĺŰr`ąç˛ Ů‹]ěv•4ť8ěšł ýŤĽ|“8űvŽ>J•‹UĘlOŚ|yúěŸ/§ÇŇžĽ­áK[Şé+c-ĺ˝XőŃW,Qy-ёFcĐąŁÇä _žS>˙Ľ;ÂiqP.žč|šňŇKă§{\uĹĺ2Í0Ÿ˝í-o” 6Ƀ<ھƒ<>9fîžç~y×;ߖIËM7ÄO2‰Ö/[śT.şŕüĚúčŐEë_ŘÎe˝ Vá˙>ü-Yťîšěҋ3ég̘.7\wMü×áŔÁCňĚłĎË=<(O<ůŹ´ÁŇvŐ~ú[`­œÔÓX’c‚čőGý`ţźyŇ˝¸dŮEcἚ<Śýú˝–ŰÇckü*ĹV÷ţxűuĆôb/ś–ĐbŹß=”{u _f‹ŻŻţ* HޏžŹŠj ”îMËO6ĽzS?GˆXš‹gŽ;1­h*‰X‚ÇÓŔ!Í>ślYFĒf4œ$/ľ{gÖ×Áý]!Kpđ€žaôʞ”ˆ%! =ĽeúŞłDĺ„,­CdL*°`Ż}ٍťž” Ή›7Ę@ô׹͘)ăç_(ăW]/ă×ݘˆtjăŢ‡‘Fʂˆe˛ÄœČąČDŚÄJłó”ˏ%ży{6}qš§˘˜Ĺô4–#'GĺĄmű3鏅śGśԄ,łä5ç/•Żź°Ť#łœ5OÇDŻ+Zł÷°(Cž6:.[ÚOTŃʑ[üćś}ňŽť@ڧŽMw_%&¸ĺŹěšäSťĘľ+ÉĽ‹“FOˎ^)=ćšeú+ˆÖ싞>3œŠĂ#'G⿋ŚÍ“ŰW/—Ť—-’‹Î ŻAűÍsÓÚ×ob„ 91‚” L|2<‘Ý?4,GGFäőŤĎ’Wľ"Ěç|9gîëKŇ´˛O1KnĚĘ'Îú1Aö˛gňă1ÎM]1 ŔÔ! LY”śXěâ°#bŃí=˝ľ|棰âňԇąÜAAšs‹Śú0‡XěA÷4‹„7°˘CEżšn…7rÚ’0͚˝äůÝűä_ŸZŤšß|ůňƒ×_%ÓłŞőďťęBšóŽ$^¸íŒAýI.Ç#Eô´•ö+ ZńINt“KE˘Žr$ňŃ^1î:ŕîÔ[¸Ý ÇÓcĘ?…Fَ ŰÄŻCh—ŁŐV­GŮUá?A˒Ívů›a3§éy=ÖOçi4qůŰŻƒˆO߃Dt4Ţńjß(lwDS}Waz+H]0Đ ŕ1RJ•‹Ui•9Y}_˝äýóĺôXÚ—Ł´5|iK5}eŹĽ|š÷SĒöľüH„˜LsÉÓ:â§z¨H<1&ëÖ˝(kמ ŸúÜdöěŮňĆ׿VžďÝ߼=äÝßőąĐDľçƎäk!Kô*ĄĎůÎř‚Á­ˇÜ¤ĺ-zKöŐ>Éņń1%żőűŸţ?*ˇ˝âqąháyő+_˙­]˙˘üɟ˙ě=p@:@ąĎŚÝWĽćů†G(WaZç¢cŇ{‚L'‰XŐ60¤•Ŕ~ąÉ§Q::lýîĄÜŤkř2[|}ŐđWa@R}ôeMUc toZ~"¨šyÔĎ"–ćâ™ăNLÙJ"–˜“ĂFóř´֘Ńkgé7űZŁ#ŇŐTŽč~Çľ×ý¤ŽŰ˘ăŠú‚ý•>ÄŻúÎw…“j8§~őK™§Çh Ikísńßŕ]_‘÷ü°Œ_p‰TÇ˙ ˝#”Ëd‰yúýÖP†›“ˆYǧ\~,ůÍŰłé‹Ë=•Ä,‘őÍŻĐ6›7}P>öî›Ĺ—ď¸deWȒÄdśáúäѓŁrěä˜5OťŽ ‰ť ۏžˆ_tĺŇŢ+Vϟ?-%ŠŃľˆÄâ“'w”W<Ú˛DD–ŻŰ)ׯX¤…{hÇ^ĎÖűŒAů•W\)ßqŃŮÖóZ˝>ˆ*G }"CŒpăĘĽňë/ż>~úJ-,}1K>q֏y ˛—=“qnjŠYŚ.Y`J˘´…Ŕb‡‹něé­ĺ3}—Ż >Œĺ ʝ[4ՇůřĂb’'˜ä˛kŻ# FWȢâÔăcă’č)Ćĺxxąí“OŻ—MűÉ˙zSö•ç̟+ËfΐÝÇNĘáQý7_sfLi?i%ąt^= ÚO‰2ÜÉ[üëč nŒÇ8IešFýţůޏARŔö&Iœq•ÚQí×>ŒĆý¨(f’÷Ä_+ٍjßärf3ţghDݟš3Śľ_ÔůuxŰŤ˝ŻŁÄv~ƒŽ-~‘ëűßŰ Ÿ||cű‰1AŚěăíýŰ9íhöœˆ~Ý7 ĺ;őĄ-dÚá•oˁŞ˂f ,vąŰUj<Đěâ°çÎzôŻ–ňbLâěŰšú(U>D,ĽńŒŻ|6(YD,RËWĆZʗ;qS"–4ńŘ “_ŹŠř•sÉͧ¸c*9qâ„|ús_”Í[śĘŻţĘÍlöYŤşŻ ęř‹ćӝťv˚uëĺňK{7.ščB™ÎÍC'†äćŻËř‰n Ýsß˝š,H˝°(ü~|č„üÁýš\pŢg御żJŽžę 9ďÜŐí'‚™šě’‹äW˙Űűä—~ő˙ČČHűfWP˘RŁůlXżŮŐĂďţá'ÇQ&ssyúŠ(A[¤{ü¸ç{Č;˘ŢnâśÄ™´AŠg>çptŘúÝCšW×đeśřúŞáŻÂ€¤úč˚ŞĆ@éŢ´üDPsó¨Ÿ D,ÍĹ3ǝ˜†3ĺD,!&.iGŽžÔbYcšŤŇé ŰĆ>{Kúö' |– š_Łă…7żCäÖŰEyPÔóτóKŃ;!ŹŰ‡Ęô˙Ľ ˙§_ľâ,)˙AzF) "–ÉóôűĽ(¤áć$bąä)—K~óölúârO1Ë g/”esę˙€ŕÖsÇOľ>4Ô:Ž:Ó´Vf‡jyěç˜é˛ă<ˇ÷pFČ­şjقřőE fôž’˛ńĐ198<?•ĺMŽęÚo\šXžşq§\ľ4űD–˝'†ĺš}‡ľ6ú›ŻžF^{î cÖ˘×öě;>,ť…ńŽĘ.8K–Κá(‡ĎůŁĄOhžôö˝2衿źý˜,#áľă=á5}áߎăÇăVü†sĎ.ˆ!‚˜1‹9F/b;Y`jíAďkĆ.;"ÝŘÓ[Ëg>ę*._A}Ë”;ˇhŞóq‡Ĺž÷žËΗw\z~&͗_Ř,~r­­äŐ:­äŐ5ń;ŽŁżđBÖŁ[wËhř}0wpźxćôđÄáxÜHö;!ç-šŸYîÂy"›v%Á[ŠźśgľdHIŃţ6ČáĄáXБ~:It@ľ= ,ö,ˆXrۡˆĽ4žń•Ď%˂ˆEjůĘXKůr'nJÄÍ5ď~ÇwČŰžăM™őw|őnůČÇ˙U:O‹ÓˇŸĐ?Ľ%œ{ňéäRî‰c‹-”˝űöKW€Ňx|íîű2B–HtrĹe—Čú^ŒE-i}â)9přH8ĎtĹ⇀'O{ióyé#˙ç)z:ĚçŸ+_xĄ\uĹerăő×iOPYľr…źúśWČ]wß+öAČVi"ű˘rĺ8rô˜lŰž=•Ď łQ:D<Łľ˘ZM‰WűdŢńÔšžŇ>$ą%ϤJ7ćN–­ĆúÝCšW×đeśřúŞáŻÂ€¤úč˚ŞĆ@éŢ´|ťŞšyÔĎ"–ćâ™ăNLي"–Ř˙ŹŮŃ#Ĺ"5fvĹŽ" ™79)ęŔ^ÝעŽ……KDvlËŹvďč¤Ô}FŚ[uűÂęŻí‹„ŠŃ1Ŕ`TŽoŤá_üž]ŰEśl ďž(ęéÇĂÉúp~CźűůŢ•rř¤÷a¤‘˛ b™,1O˙ą?ß"FˆL†›“ˆYǧ\~,ůÍŰłé‹Ë=Ä,oşxšôƒÁđźë ,—{ž7WŐŇe^7dČÓ9óg‰“ö6яÜşOŢuů9™ŞˆžÄ˛bNöşčúýGă'ƒ?śë œホčÚ eţôi˛2÷ŠöčľB{ÚO†édńęe 5ËX˜‡ŻmÚ)Oî> ‡r?ÂxýůŤ¤°^vË if›lűů˙Žš\ąl=rLžşe›l>|4ÎwÇ핋‰–žƒ˜%Ÿ8ëÇ<Ů˞ɏÇ8‡˜ŕô %S•xLz_3vqŘąčöŔžŢZ>óŃVqů ęĂXî  ÜšES}˜7,öv<Őžá˝;óÄP|›ţťőœ•2->¸Dƒńk€ZƒŇ ˙ÇY çk"–ˆ‘đf[§‘ŹŰŁżĎűĺŤWJÚ/é˛EOsůŘťn—˝ý6ůŐŰŻ–÷^{ĄÜxÖbëžĘ’´˙¨Œ/ě=”],]söň8ß­čf]XŽčObÁĆ4™>mš,‰Ţ:”ľ+b ‚â*ýgŰěůđD*Ď+/X‘Ü S’íŰá÷ĺs§ËgčVůçďťY~ëWʏßt^XŸ‹âƒĹč)6kwŇüÝpîŇ’ň vĹ*Ńň’yłeZXţVŤSƒIúN٠ʗi˙…cTž-{D,šmŒĺ›"K‘›Á3˜ňŮ dĆąH-_k)_îÄMŠX˘…ýĘ´pîI˙˝üćâ18y˘J+Äíq;´­ZšRąDŒŽŽtsŃšŽÝ<ô°öD“—]qš\wÍŐ٧Ž„Üőő{aH+kď<“Źłnîœ9˛léŇx•uë7Čžr§ź˙ƒ*?őŸ1~Lž‹/ú˛ŚŞ1Pş7-ߎ”ßÂR?."–ćâ™ăNL[™Ş"–˜h˛Y}fn=÷¤u“ÖšgŁ =kœ&˛*ő ésuŸAäSžDr>,˛eŁžîÜóĽ:*>î>zXFwl‹_‡O°ŤÎšĺ•"ßóĂüúűĂť}×k[śśn’rř¤÷a¤‘˛ b™,1O˙ąßÉö¤żLRçŐśŹĺÎż3f‹/űůy`Ż•őŁžœ×ş ćk6Z~´Í~TA~óvU_=˝;ż™XŽ1Ëëşź{_%ég=š˛ˇÂ1ü/“~ń—ŽĚäkËáăZšH¨rţÂŮĆŐÁăLVőöéË—fVEyű‡ç×ËK‡ŽĆOd9|rDv;!ë–###⍥ď(ĎžžqăŃ×;~ÜcŠˆßľW{ßQé4ăœ2oœĽI ʞɏŃAÖOń9ŞĎ˝;űźŁL~Úët÷\j(ť>'L=x" LMlÜśIĐ4™Ú&e“KvÝň$–ĐüÚűŮ]úŻž—Ξ)żpË5ň§ßz6<čOBF7ƒĆ[Ý´™7kšüÂí7jŰEŞř­‡ŽvóůŔŚň×_žIsNx˛đ–KΑ/˝¸=žÁ˙ =ĘKx@ý˝WßtZƏţn:kŠÜ9}š|kË^íÉ)Y‚öţNţظCŽZš8“â˝7].OńĄř‰,ńĎĚťőĄäťŻ>_~üćKeďą!Yˇ÷°Źß{DîßźGś:‘Ü„+8qPéE`QŘś ůžwɏޒ}gřęEsäm—Ÿ%Ÿ[łS˘‹“J$zĺDT??tíęřzáňš3âżWœťXž¸fš<řRň+ž§ś”ĂC#2fď1š×œłDn:o™<śíPňʢžŒHfOkÉßż÷V™7cP^ŘsTÖě>"kÂĎŻŹÝ“\˜Œ xŒEˆX2_ąěž"KšűŽgĺłAÉ<#b‘Zž2ÖRžÜ‰›ऎxnÍz-]ôz ˙üS?.ń˙>,CCí_pGó­’řuóć͓ŸűéŸĐśç„mŰvŠtGuŐm´b?=ň¨ÜţŞ[ťéŻşârY¸ ű„´C‡ËcO< ?:˘•NnŁW˝ç]ď”sÎZ%ŤĎ>+~úËî={äg˙듹Ńń¸ŐEŻÔ‰ććȓO?#+W|›hĽŽćîŔ=nϘ>]Žç^ qžxęšé†ŢŤ˘'Áźëß)űˇOĺžĘ’äĺ}?÷ÓrýľWËśí;äĹ ĺŗ6Ę˝÷?$G_ű×ˆXĘřŞáŻÂ€¤úč˚ŞĆ@éŢ´|ťR~ Hý¸ˆXš‹gŽ;1meJ‹X$™g‚koőš̚Ö#HpËŤE•{|˙đ ÜůÝŐ/‰YĆŰB•kŽůĘg˛iví”ÖĂ÷ËřË_•ÎB\âÁ/:zw`6ýÜy2~ţE…•ĄĆtqĚŔ=_•ÖŚ%cöĹ>NžďWE-]Ţ~Ő`"Ŕˆ~qÝÍɓY2x܄KÂ3YF) "–Éóôűy2‹ˆéâBËOg ((ť–$—ßź=›ž¸Ü§ë“Y^ąz‘,L];ěđOl‘ç÷Éf=Ǜ/^.Ż9?+˜¸fĺY5oŚěˆžnóäŽCń5âVŽqţ⭗Ęţň“É+ŢSyúžŤVË9ó\Odɖ}ĎąaYłďHć)/—.™/+R?čˆÄ+kĂ4QúCĂ#ń÷˗$çÄѓÇßyé9™CŁcňĐś}’ßďËgëůÚú^ˇ˙ˆě8v"ŢŽĂľ+Éüz˝–Â֎ۘ^ľŸ9Óă§ă¤9|ňdü:ĄŽ_4žÁŢ|ăRsxç˜"’ď;<™%Ÿ8ëÇ<Ů˞ɏÇ87žĚ0•á‰,0EI‰:(ă×Ô"ÝŘÓ[ËWĺFw/ÖôĆrĺÎ-šęĂ||aąfű¸’-፬ç÷čb–—ŸłBţę­Ż–˙ď†Ëĺ çŸ%Ż:{…źá‚łĺ§ošJţ毓˗-ÖśůÖÖ]rbdT:Ż9Řtđ¨<˛e§–î'ož2âÄаÜtýľrÍËŽŒE,˗-“Ÿ˙™ŸŠĹ5ąřĽý´–K.žHn}ůÍZ_|iSŚś†‡‡ăW$ĺy㡿NŚO›.óć̑9ŃEÂöPó™ĎIKű=ßýyď÷ž;ĚĂÜśřFÂmćČOýÄĘ ×]ç霳ϒ׼ú6ůţďů.MŽTęß~€ˆĽŒŻţ* HޏžŹŠj ”îMˡ+ĺˇ0Ô‹ˆĽšxć¸ÓVŚşˆĽË͡J0/+D%ƒ÷§Ňzâ‘đ.Y8wJëĽő2íC’zEP›hn}ý[bÁj‡ńŤ$¸â-ęŕg>!w}1źKu8ôŚßłKŚ}üĂ2đřĂZÚŕuo”ńü]…iÓľt­çžJ4ÝůZĹyl=÷´űö$ëÂJö‘IĆ ㎅ĺ o” …ËęwęąĎ9Wüđ?HďĂH#eAÄ2Ybžţcż<™Ĺ| GˏśąŮ*ČoŢŽ ňŤ§wç7Ë5†Mŕ“YŢr‰ţZĄáŃqYżď¨1}š§vÖlQÄ7_ź˘ťÍŽ#òfďQ-]ôԕ?}ËurÝʅ2Ć œżpŽüüË/‘˙zëĽRLÉëc;łOŽĄ^¸pnw9šě=‘üX$:ďýfűé,^snśÖ8?­¤KubéŻIşbÉ|Ů|řxFÄrɢyň›ŻşVŒ”NÚ鏎čąWΙ%7­\ Z–ϞٜŻ §‰D8Q]í ĎďńP?]ýgŻ˝JŽ]fŽňěë]łg_ϸńčëÝüX×uě>×bí}GĽÓx”]™7ÎĆRŽ$eĎäÇč ë§řœŐç^ž}ŢQ&?íu:ĺŸĚ0•á‰,0eąM†f;"ݎˆ%kˇˆXTďËß<ü”üî_%3§e‡ÖšÓ§É/ŒŒŒČG?ţŻ˝ŸľçŞäľt‰(ĺ™g×Ȟ˝űdŮŇäâTôj˘ůóćeü|í÷vŸlŇ;Âh˙z(üűܗî˙áČlsŰËo–›o¸N6oŮ&G“%‹Ĺ‘<‡‘{î@łoظI.ščŒíż÷]ń_Ä'ţýłáßgâ<=óÜů|˜‡ď|Ëťi#űťŢů6yçŰŢ*ť÷썅1+W,—ÁA}.˙ˇOž÷”›*Ě6KúŮfuý)űŞRž”{u _f‹ŻŻţ* HޏžŹŠj ”îMˡQĺˇ0Ô‹ˆĽšxć¸ÓVÎKČčŕ4üÁ˙(ň×Čd 8zD?ţáöB`Í\$bQŃŤ„Nö~Q>6>.ß˙c"ď˙őđŽVęWň‘ýÎ/Ć.ŸrţĹ"Ż}łŒŸÎÚ/Ő^AÔzŕn™ńŕ7D˝ZNţĚ/%yşýŰEžřVć)/Áî2ýƒż-jů QóÂóÎĄŇÚžľ÷™nÂ0_Ńö…xî,՗‘Fʂˆe˛Ä<ýÇţ2đd=ĎéDÝüt†‚˛kIrůÍŰłé‹Ë}:=™ezx ńŰ.ԟƱvďQyhëAŮ}lXß(ĺ벼sĺŽ9'ůń]Šď¸dĽüýă›âďűŸ”;6ě–ËĂ´ů§˛ÜzÎâř/Ďą‘1™3­čľ<˝˛kűţřÚntÍÓÄÓťe^´vďaŮs|X–ÍžaL˙|¸ţŔĐÉlʰâ_<¨ rŽ_ąX>ů]ˇËÓ{ʑ“#rÁ‚šńkZă<ŃÖNSŤó†aěü“m˘ďúşWt—˙Ó]Ęăť÷É@¸_ˇ9ç%UůłoťUÝľWś=&sĂkŕ7­X&KfÎ7Ž'kXúOfÉ'Îú1Aö˛gňă1ΝîOf˜ŞđD˜’ŘŽ+™íˆXt{`Oo-_•Ý˝ŒŒËŢýˆl>t,D“H\}‘ß˝ëáđäÂüîMŰ1ÍĆý‡ĺ÷<Ń.‡¸m:Żč~śäţMťĺŸžľĆ˜|ůܙrÁâšFËŚGĺî~şŰđ•3—ml}Ֆ6ÎjRGűNœ”˙őĹGĺŘpšúٰ÷ˆüÎOˇÓD厞ś2 cĄßßřÂă˛ýţ>ÚYá á‹çČYK”­?ůĆ:yzűĄîrfĽö5đŁňm9°ŘsyŃlˆXt#"–ŚP†oŽDž>űçËéą´/GikřҖjúĘXKůr'žH‹´ŸśiÓfůí÷0~uNFFFĺƒöײeëŽDŮ}’JŠ“\aˆž¸bcý dËś˝Wô)’”ö+w~-~EQžiÓŚÉEž/×^}•QÄrüřqůÝ?ü#9q|¨-Ýl˙ţÝńŐťĹĹçŸŰ'ŁżřčÇäą'žŇŇEœU+WÄńM"–űřŚ|ćs_j÷” Ě6W°ś~÷PîŐ5|™-žžjřŤ0 Š>ú˛ŚŞ1Pş7-ߎ”ßÂR?."–ćâ™ăNL[9“D,QĚąč|úň+%xű{ÄzőޖšŤoŕ-ß%Łš_~GݘUsÁ?ňSá Ýěr>٧šüČOĘč¸á<˙šŹž‚[EÚO5“łĎ Ëó=ćtŃ+Ž^X+­­›"–ŕß'ăç](n^7xzďç6—/N~Č•ůîđ:AŢÇ@˜Ż[V.“w]|žźéźsş"–oîŘ-nx2‹9†!?_&?ć1Č^öL~Œ˛~ŠĎa}îíŮçeňÓ^§Ă“Y"˛ŔÔĆ6ə&Kۤk˛#bÉŽ;“E,m×Ńk"ÁÉł{öËĎ~úNš˙Ľ­R†gwî•÷}öëňŔ–]ą˜"-bIţäéÝäż|ęëň˘ń`^çkëˇČ/~îžXŐŽ‚öÝ,bqHœ‡đ/źÉőŽ“_˙â7ĺĐPń ĂH)|׺­ňŸ?}ż:‘¤ďœ'˙#:új`Ëdâ­SOa>ŸŘ~PţăÇî•őť‰w<żM~ö_ż)G†Gťb$ôę{űáaůšWžžn‡—ż]‡OČűôcňďOl1”ĂôKć+"ƒ˝ŞˆĺԞÄ(Ă7G"OŸýóĺôXÚ—Ł´5|iK5}eŹĽ|šO¨ˆĽMçľ?ĎŻ]'?˙Ë˙S|č)ĂókÖÉŻüÚ˙ŽĹ%ńt×ĘÎM'Ťíyćë÷ÜĎm&îşť÷4k‡ŰţÁýyü„”“'ý„7Ď>żFţŰoü–Ź]˙BW`ڙ÷âW}ăůę׿aÝţÂóĎëć&J?::.˙ç÷ţP>ú/˙f|-QžĄáaů§˙›|ŕOţŞýčätŮĚÇúݐĊýI,Ýäč°őť‡rŻŽáËlńőUĂ_…Iőї5UŇ˝iů‰@ů-L*÷YĂS˝ĆÖPÜfęKŁSq'&Vw)u ˝f'xݛ$ř˙ާżfČÄŕ o{ˇ´ţĂĎČh¸ýx^"‘ő¤¨K.—Ö/ţşČęóċëo‘ŕ}ż&ă iâ˜8§×Ţ(ý™o@śśmNžŽ…Űžć "?úÓ"óŠK–Iđc??Ĺ;• ńBőe¤‘˛ b™,1O˙ąß ë5Ŕ#=b}cłUßź]äWOďÎo&–klkPĚňfĂk…˘WŇܡiżŒ)GŚÚž‡×"Ůfžžű–KVtżŻßTîßźO>łv‡öʛ4ѓXţńŠMrhŘ<_˜'‚0ýHx-Ű,LŮpŕ˜ě8:”ą“'-×]ˇ>ocâĐЈüóseë‘ăâ"ĘĎGžÝy L>Ď1Îa&{˝ďčȈ|ţĹ­aYěą_śtQ÷űcťöÉg_ÜÖ÷¸¸ˆD,÷m÷!f1Ç0äÇŕËäÇ<!f˜Şđj!˜şŘ&7Ó$i›lMvD,Ůugňë„:žă§‚´?Dv–ßűĆĂröcĎĘM笔ëÎZ.+ç͕ů3§ËœéÓÃń9<4,ťĂƒ÷'ÂŢGˇî’—–``PZ­đo` g´_s mżŃáóŽăCňsŸţşÜ˛z…źę‚łĺ˛ĺ‹eŮÜY2-Lp"ôťýĐ1yfÇ^šsýfŮxŕh"F‰.ꉿđ’^ć×âÚ7ʔ$7öDÂmŁG/(yhËyďGž"ŻťřyĹů+ĺÂĽ dńěaւXŮž3ůâł[eĂž¤~ZƒÓâüJ\GaÜńXÇ—ýxxÁđ×>÷¸\şěyӕgË5ç,–sΑ93Ăú“džeÍÎCňŕ†=r׺č¤2ˆ÷c§<Ý{›Z×BĒůŠˆĹ`Ż.bąTń  ߉<}öϗÓci_ŽŇÖđĽ-Őô•ą–ňĺN<Ń"–žX¤•PÂďŃkţđ˙\V­Z)7^{\{ÍËdĹňe2/œsç̞-'N Éá#Gâ×ç<őĚsňř“OËĆM[Âé#ˆçšV{ně>Ľ,ž"ŰŽ]{bŃ̕—_–ÉO$JšďÁofžÄ˘ůˆr$ƒýřż~Jžř•ŻĘk_u›\ý˛+ĺÜsΎó= %Ęăţýĺ™çž—G}<˛D˘ĘV{^ęĚ'Ş- >˙üŻ˙Nzř1yĂë_żfhţüyáMŽ19tř°źřŇĆĐď@|Ó,zMáxk<>ˆř×˙ŒÜőő{äŰ^óęřI0ŤW‡y˜;7ˇDŻ1ÚźeŤ<ńÔ3ňőoÜ'GŽK„A[x’d aĚSłt’%ó^Đľ™Ó˝Ă‚Îëœl˜Ÿ×›úˇľ^łVĹIź}ŐđWa@R}ôeMUc toZ~"P~ Hý¸ˆXš‹gŽ;1mĺĚą$DB”ŃŃźü*‘_żČˇž)ęŮ'Dśm9Ţp‹NÚfĎYžJ‚0MpË+E, ˇ“Ń‘cź(ĆČÉa™žd™´Ţ÷k˘žJTôşŸDHžž2cŚČ’Ľ"]&ÁMˇĆ‚5ŽâíLDŻ,š‰SyPäŃEEů;Ţ(›6]dŃQ#Ł˝ňŒœ”ÁënuŐľ<ö°¨ľĎI°ĺ%QǎŠ %OŠ™;O$zúĘĺ/“ŕe×ǝH€3n˝™ćšłT_F) "–ÉóôűűŻŇóœNÔÍOgŔ((ť–$—ßź=›ž¸Ü“ů5C3[ňš –hiօ×7<Ńsc­Ç$Ol; {Ÿ”ĽłłŻzëĽ+ĺOÚ×rôăť5{ŽÄnÖě="ˇ­^,—.™'‹gM‹ÓF‘çCű=›öĘţ'eIÎW&Ź1O<°uŻüŔË΍Ÿ:’fížĂąĎ|>´}ŻüřuĆŻ\Oł&Lżďİą÷”mGNČ_?ž^Ž[ąH^ślaü4–č)ߑ@gox˝űš}‡BßűäPxůęe ůďäYŠŽĽ^ůßxč¨|čéurӊĽrŐ҅˛|öŹ8˙#áş(Ţţ0ߝlo8tDÝľO^ ˇšeĺRšháËr篕úěü ´mšżh]ôÓŒÖ 7Üż@ţŕAż_âĂÔ!}B čŃß;?ůÇ=[:qw‹něé­ĺ35—Ż >Œĺ ʝ[4Շů¸ÁbĚvŁMš˘żńŃŃđsLTxS(~|qô×VâŤTş§cŃÍ´ yHç (É÷Vź.Nů/ԍ‡>Ł?Őů‹ýŞŽËśďžČ#ž50ŘóŮă|ŽËXx‘.Ęk´ßL ăF“$}[•—k,w<^NWZŚ>‚TYb1Nť,‘€&Ě”ç(fäK:e"!I”~Z{›öIИjÇMęTľă†žâ|FŻ@č”+ކńńn˝ˇë^:uŸŢWńÍIénűj%žÚwFŰţĆşeWq~ÇŰyPŠ6tË-훡ą¨&.R´şg™öŸ;>5-dŰr`ągAĒŰĆXž3@Äţ3ü‘ˇk7Ö[­râ3ÍŻßţď´ŚW†oŽD^ b‘Zž2ÖRžÜ‰'ZÄŇńÓÓŁĎńxœ?Őxw>LbŢÇéW終 -I>ťëťůIbEóŢXç—ß÷srˍ×gü}ăžĺOţâCáßŠűVžżuň4Ž’y7ÎgűXAŰa{ä Ú›ŽĐŚíť[ă‰ĎdŽKŽ’§Äuśm—1ľęn7Ţ-[ŚŇľšź3ŸK[Ű+W4.$uߋĺłŐ>îhľŸ§:ĺîüI2ždŇśRiŰeęîĎö>IҤ=˝‹<őť‡rŻŽáËlńőUĂ_…Iőї5UŇ˝iů‰@ů-h<őČ7™WŸ|âaŠ "–ćâ™ă6+sbbľ#Śâö™3giśááĄxţęFvČúŮ´éÓ%đ¸| _ĚO.Ɉúń´i3Ú?Ţp‰=G nRMó˙ĹŔɰŹéžÍiÓŚM— (Ž‘ˆĹţ45ϝĽúђ*Œˇ•ƒVĎ-"–fbůÇőuűkŢŘČź:đŢO%G3ŠY´mT*˝8Ň+łŮâ˔Żî#gœžŸŔáËä'Đ”#FGŮqç7o׎”;(Čo&VŕŘő–ý”ŘWIú$ÍuŤČŞy32ë˘'ąÜľao,r̸ąřš?s@^yŽ.ˆ‰žj‰bŇy:wÁlš|éÜö9T.Oaš“áůŢŁŰÄ"›ëWeE ťËc;¤ŇK&O+çΔëV,l‘=džĺѝRm.ÉËâYÓĺćU‹ľô‡Fb‘‹­NϝoXąH̜–ˏĄpÎ{l×Y=–Źž—}ŕC;öÉÁá“Ýô+ć̐k—-Î8804,ěܗrœœgG"”W.‘ůÓłą;ě8v=<4ž^†­ĚÜŘj†çjczċ-á6‘˜&Ÿ DOčěˆ?ŰÓLG0ů/x­@Dô”śČ×@â+™;Ü SÖČçŘ؉^yÚ獝cœčżX:6Vđ:@ϝĽúђ*Œˇ•ƒVĎ-"–fbůǝ,si§#‹ŘnNňd=ĎéDÝü¸ę1ĺGK’ËoޞM_\îÉřd–čA$ËçčO>Ůw줌ŤŒ˝=ô8<4&ÇNŽĘœéŮ[tg͛™˛$ž6:.ť Ëů gËŇ0öěi‰€rht<śżtਜ 珙ƒ3Č=O{ÇżsějdÚëöžN/vë0ŹD˘î\Ú ö–älÜü¤“áľÚč‰+ŤćΊĹ3ógL‹&Qú¨v’-‡Éh<ŘĚ֋ íš oĐÓˇŸŹ1ÖÍĂ;öĘ9ófˊٳdnXçƒaěčšzôş¤ă!lť m;z<~ŠĚęysdÉĚ2kp žä•!ÓDOe‰>#qN6?îö×Ofąd:—ƒ/1ř1Aö˛kűËŁýÖüŚü´í§ôÉ,S„,0eQĆD,ş=°§ˇ–Ď|”T\ž‚ú0–;((wnŃTćă‹=0Ű]ű:ş˜Ö9Şlľ…$ŃŁüĂl­řFI÷—âÉRr;§ó$InÔ¨öľx{ôŽRŰG qE0˜ą„â™ĘLDńÍŁŽ¨¤sQŽ}ƒ)>aľ ­ÔĹž +¨IňŸÄł8 Ňž™¤Úż(—X̑ڳÝWmáĚ@7nT–XŒ3Ţ~ňKtf4ÖŢśŐŽƒxť źDEŽÓˇâWü$ţ{ůěTŻ–ş%]ŃOgŽěˆX’j0"aŤôśMŽe$[ďA2Ż$7éRi=mçŘŠł?%5gwŽ_L{׋‚ÎZŻYŤâ$ŢžjřŤ0 Š>ú˛ŚŞ1Pş7-?(ż…Ó D,ÍĹ3ǝ˜ś2ŐD,CC'´XÝĽ1Ł×ĺ9uFĚÓkçÉŁý Éߨu}žŹŐĘÓő杬ţn­0ŢVZ=ˇˆXš‰ĺw˛ÍĽ7'Eł fɚ3ű×˝Ż"˘Ëƒwź°GŹäĘŽˇ‡÷lÜoĚS×E*OCŁcńë…dŻŮWdÚulXžüÂ.)“§čŐ;wlčlŁrŰôŹI›K~Hń՗l1’/6qD´¸ýč‰ř/9é3†“çöŠ˙ŒăKť í:6$wŰŃKăh§ąP4Üћ‹˙ŹéŰŰDMĺÄ訏;{űCn_E–;7mëœŇŚ‚Šc BĚR4Î!f1ĹčĹBĚgY`J˘Œ ˆXt{`Oo-Ÿů訸|őa,wPPîܢŠ>ĚÇ{`ś;÷uť\Š›U‘J$ş1ÔR­äQ”nŰ}´ŤÇPA*ŸůÉŠ'1ćQľçÚ賕”ŠĽŇžŤÎ…ŻŽ %yÍ^Žvꊽ}:ž& RN•ˇ‰gĺ ЎMi;önނ|ڎϒtÖzÍZ'ńöUĂ_…Iőї5UŇ˝iů‰@ů-œV bi.ž9îÄ´•Š&b1Ĺę.5Ó|0ÝP+uŻíkPOg})k…ńśrĐęšEÄŇL,˙¸“u.m_ŃɜdA̢ç9¨›W=ŚühIrůÍŰłé‹Ë=ŸĚb}M•Ąěz{pçÉŮ~21ŇŚ ýCKŠ‘'{Ů{mÎ\‡ůžS(ŽČíw˝ŠhĺN­ëĽ÷k§šĄ ě}#8ʎ˜ĹCşeGĚbŠŃ‹…˜Î$˛ŔÔŚ;ć#bŃí=˝ľ|棢âňԇąÜAAšs‹Śú0XěŮîÜ׌ö‘ldnnľŁV:]ęŕ,sň&˝Í2 ąŘ#9ŞQ§~ŒçËŃóĐhôntwƒ#ľ‡JďŮmşĺëŘăĚÉkŒr™ëě§nYÚqS†Ňž!›zLJ]˙íšéˆ?TňúžŘgę))ăĎ´ˆ%ÝÎ:eéÔO\žtĽtbt|äŽř2ű;% ŠŸL30¨—;ěkŞP™öŸ;ţ4-dŰr`ą‹=żŇŰKڈˆĽ)”á›#‘§Ďţůrz,íËQÚž´Ľšž2ÖRžÜ‰'›ˆĽCОkâ'šuœf„Ľi_U˜’ä)yŞË7\ŰómŕÁ‡‘űżůˆ´Ú"LGZQ˝|śs2v˙1—Ëâ+í/™ÍžLŻ:ęîLţAvě <ę)ł.5×ç׊öąí‚żńULĘ\-ˆXĘřňč}ôeMUc toZ~"P~ §ˆXš‹gŽ;1mKsń:چZŠ{m_ƒz:ëKY+Œˇ•ƒVĎ-"–fbůǝ|sięĐT¤čćd´1‹ˆébEËŤS~´$šüćíÚţB̢ť°ľŸLŒ´ 1‹Ť"f1ĹHĺGł”j?ZĐڏŁ 1 œ) dŠKwŹGĢŰ{zkůĚGCĹĺ+¨cšƒ‚rçMőa>°ŘłÝšŻő‘ţs;¨ rb•ÎS;šÓżfË×Ý4Hžň’?T’;˘ÍÝčîÜŕSŠc9ÉŽ3–/-ţHhŚü‚––g•öÚ>{ ×˝Ií˙sé3™6ôíî ĚöÁ\ŰUś>ăAžUä$ŻiÉ,ĐËg,Gá~͡ĺŔb/Ęo`ą‹ÝŽRăf‡˝LťM—#cgßÎŐGŠňĄ"KőeřćHäéłžœKűr”ś†/mŠŚŻŒľ”/wâÉ*bé$ë ˙ĂW …Œ'Łá×_cMňŔ7–?ú‹żŽŸ†Ň꟯@ĒűÚΧgžL$_ćňžňu•xđ÷d„şŚJOëăWÓUžÔż%(čŹőšľ*Nâ퍆ż ’ęŁ/kŞĽ{ÓŇ­Ŕąyy_“D,ÍĹ3ǝ˜ś‚ˆĽšxSC­Ô˝śŻAË5+˝Eĺ Ős‹ˆĽ™Xţq'é\Ş$w˝Šŕćd´1‹O8‚\~\ő˜ňŁ%Éĺ7oĎŚ/.7bs=fˇAĚâj§ˆYL1RůÄ,ĽÚ´öŁĹčĹBĚgY`jŇăąčöŔžŢZ>óQPqů ęĂXî  ÜšES}˜,öŔlwîkĎúč”#',I(ĺÓćžş÷wî—ÔżéXÎrOŔDL+ňO*‘T<%šm ö_VźčIňűÚxĂĚޡ{Ś@Żç~՝he ĘěżŔcżćË]\ćüťŘíŞÝŒvqŘő}űj)_ Ć$Ξmh㌏ËwćŠX,ŐÔ7”á›#‘§Ďţůrz,íËQÚž´Ľšž2ÖRžÜ‰O‹3‘Ťń¤˝Ě;[6ź´IÎ=çl™7o^,X9tč°Ź]÷‚|ýž{ĺą'ž–VŤ˙ާąŘĆF‹ĽL”keI_=S…NfŤŽ@Ž[ż{Ô¨5ŽďíĎsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüN+ą4ĎwbÚ "–ćâuL ľR÷Úží籑‡“˛[TZ=ˇˆXš‰ĺw’ĎĽJłdĐýd’YňœNÔ͏ŤS~´$šüćíŮôĹĺFĚbŽÇě6ˆY\í1‹)F*?‚˜ĽTűт6Đ~´˝XjběNY` ƒˆEˇöôÖň™~ŠËWPĆrĺÎ-šęĂ<˙[ěŮîÜמőQą|•÷ˇ–‡ˆĽdůl"ˆŢG`ą‹śľşÝŤ-{ˆXLőá,ˇîD+[۞úĐ2íżpżćËW\ćüťŘí*5hvqŘő}űj)_ Ć$ÎýŤRĺCÄŇĘđ͑ČÓg˙|9=–öĺ(m _ÚRM_k)_îÄgŠˆ%ěđ‘Łň;řÇ2>>ޡtzšŠŸ:Öą´’× "ɚ+Ž@Ž[ż{Ô¨5ŽďíĎsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüŞů;E bi.ž9îÄěuD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?îd˜=P‚˜%ƒî'“Ě’çt˘n~\ő˜ňŁ%Éĺ7oĎŚ/.7bs=fˇAĚRJŒPPvÄ,y‡Ů˛›Ç öăŃß3ů1řƒóÔ`űт6Đ~´éXS—–LIąčöŔžŢZ>óQOqů ęĂXî  ÜšES}˜ç}‹=0۝űÚł>*–ŻňţÖ2€ˆ% "–Ź15hvqŘő}űj)_ Ć$ÎýŤRĺCÄŇ<ŞŇ*sňţůrz,íKžŮ ţž´Ľšž2ÖRžÜ‰ĎDKBü=mĽýú Vř˝ŐȈXâőí?›?UŹTޔkeI_=S…NfŤŽ@Ž[ż{Ô¨5ŽďíĎsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüŞů;E bi.ž9îÄěuD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?îd˜K ő óuŃĚ&–ëÂŮmRçóJéłŮâË2”‰XŽ_fˇq_;‹}ú3_+ŇňŁmlöŁ ň›ˇkűŤ ÜŞ ż™XŽąŇë~€{_%é7“ ew ¨’íÇâK•h?ćŮőÖ6äŮwÜm4Iَšü‚}ż+ÉĽ)h§ö6jˆekCޞ+‹3AÁ˜’ó#ś1ČžĎ{űׯďî/ŻkžíÇłšŰC.–r$)({íöŁmÓ@űiŻ8“@ČSŰ$ë´#bÉŽCĒł#bIçAIn›RĺCĒ-Gq}˜ó‹ˆE7"biUi•9y˙|9=–öĽ ßl_ÚRM_k)_îÄg¤ˆĽýt•DŔҊ…+Ńß@+üVü×~" "ƒšâäč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄšżS"–ćâ™ăNĚ^GÄŇ\źŽŠĄVę^Ű× ý<6ňpRv‹ĘAŤçK3ąüăN†YąZ)¸9­BĚ∑ʏśąŮ*ČoŢŽíŻ‚r#fąŸ—öLţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßۏśMí§˝ŕL! L]ŹU;"–ě:D,9;"–t”äś)U>D,Ůrׇ9żˆXt#"–SJÉL b‘Zž2ÖRžÜ‰ĎDKz‹Hœ’<%­ݧ°$–Ţ+…ą¤ÍG G‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ }đ7q bi.ž9îÄěhD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?î)š+ásÍŁŕćd´ 1‹#F*?ÚĆf?Ş żyťśż ʍ˜Ĺ~~Ú3ůˇsŒězkBĚbŒĄ,~Ě f1Ç0äÇŕËäÇźl?Ú6 ´Ÿö:€3„,05ąLěˆX˛ëąäěˆXŇyP’ŰŚTůądËQ\ćü"bэˆX˛vÇE“&Pe“+×ĘJ°íç˛~ôo6ƒż/mŠŚŻŒľ”/wbD,mJü)É+„RŻžÄb0Wę°âę°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠm˝ˆXš‹gŽ;1űKsń:چZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄň;ńs`-rçŢi{ś$7'ŁUˆY1RůŃ66űQůÍŰľýUPnÄ,öóԞɿý˜cd×[Űbc eńc1‹9†!?_&?ćýŰ`űŃśi ý´×Lu˛Ŕ”Ç6É&“5"–Ě:D,9;"–t”äś)U>D,Ůrׇ9żˆXt#"–Ź=°U_3” †ˆEjůĘXKůr'>ÓE,iÍJ`ü+çŻtçp,ÖóŐ3Učdśń¸ęHăč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠm˝ˆXš‹gŽ;1űKsń:چZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄň{*zUżř\)¸9­BĚ∑ʏśąŮ*ČoŢŽíŻ‚r#f)žÁ˜EůB̢ŻĚĺÇşŽcGĚbó•ńÓś÷Ľý´×Le˛Ŕ”Ć6š&“4"–Ě:D,9;"–t”äś)U>D,Ůrׇ9żˆXt#"–ŹKŰ\ڏţÍfđ÷Ľ-Őô•ą–ňĺNŒˆĹ’¨–żŇĂąXĎWĎTĄ“ŮĆăŞ#ŁĂÖď5jÍŁă{űó”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śő bi.ž9îÄěcD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?îŠčUýäs-¤ŕćd´ 1‹#F*?ÚĆf?Ş żyťśż ʍ˜Ľř7bqä 1‹ž2—뺎1‹ÍWĆOŰޗö0ĹAČSۤšLΈX2ëąäěˆXŇyP’ŰŚTůądËQ\ćü"bэˆX˛vD,msi?ú7›ÁߗśTÓWĆZʗ;1"K˘ZţJwÇb=_=S…NfŤŽ4Ž[ż{Ô¨5ŽďíĎsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüjřŤŘÖk€ˆĽšx渳ą4Żcj¨•ş×ö5h?<œ”ݢrĐęšEÄŇL,˙¸ ÷މsçäi{6 7'ŁUˆY1RůŃ66űQůÍŰľýUPnÄ,ćz̚üۏ9Fv˝ľ !f1ĆP?fł˜cňcđeňcŢż śm›ÚŔ! LIl“i2)#bÉŹCĒł#bIçAIn›RĺCĒ-Gq}˜ó‹ˆE7"bÉÚ'PĢDĘCÄ"ľ|eŹĽ|š#bą$ŞĺŻtçp,ÖóŐ3Učdśń¸ęHăč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠm˝FpD,ÍĹ3ǝ˜}ŒˆĽšxSC­Ô˝śŻAűyläá¤ě•ƒVĎ-"–fbůÇm¸WMäŘçsm¤ŕćd´ 1‹#F*?ÚĆf?Ş żyťśż ʍ˜Ĺ\Y“ű1ÇČŽˇś!Ä,ĆĘâÇ bs C~ žL~ĚűˇÁöŁmÓ@ű˜˘ dŠ‹iňCĒ]‡ˆ%gGĒ΃’Ü6ĽĘ‡ˆ%[Žâú0ç‹nDĒľűœ\Ÿ:ąH-_k)_îĈX,‰jů+šł•kąžŻžŠB'łÇUG‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUl뉢!bi.ž9îÄěcD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?nĂ˝jĆ'űqŒĎ5’‚›“Ń*Ä,ŽŠüh›ý¨‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßۏśMí` ‚Ś&ŚIKv"–œK:Jr۔*"–l9ŠëÜ_D,şK֎ˆĽm.íG˙f3řűҖjúĘXKůr'FÄbITË_ɝ­\‹ő|őL:™m<Ž:°8:lýîQŁÖ<:žˇ?ĎAŠZ7ŠŃ*n~ĹńŻm÷Śĺەň[¨áŻb[Ÿú›7D,͂ˆĽšxSC­Ô˝śŻAűyläá¤ě•ƒVĎ-"–fbůÇm¸WMÔXl=wŽţńšVRps2Z…˜Ĺ#•mcłUßź]Ű_ĺFĚbŽÇŹÉżý˜cd×[Űbc eńc1‹9†!?_&?ćýŰ`űŃśéWű˜ş d)O2ů"bÉŹCĒł#bIçAIn›RĺCĒ-Gq}˜ó‹ˆE7"bÉÚí'ӖjPąH-_k)_îĈX,‰jů+šł•kąžŻžŠB'łÇUGG‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUlëB󆈥Yą4Żcj¨•ş×ö5h?<œ”ݢrĐęšEÄŇL,˙¸ ÷މ‹­çĐŃ?>×L nNFŤł8b¤ňŁmlöŁ ň›ˇkűŤ ÜˆYĚő˜5ůˇsŒězkBĚbŒĄ,~Ě f1Ç0äÇŕËäÇźl?Ú6ˆY\ d)M2é"bÉŹCĒł#bIçAIn›RĺCĒ-Gq}˜ó‹ˆE7"bÉÚą´ÍĽýčßl_ÚRM_k)_îĈX,‰jů+šł•kąžŻžŠB'łÇUGG‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUlëB󆈥Yą4Żcj¨•ş×ö5h?<œ”ݢrĐęšEÄŇL,˙¸ ÷Ş ‹éœÓۏo|ŽܜŒV!fqÄHĺGŰŘěGä7o×öWAšł˜ë1kňo?ćŮőÖ6„˜ĹCYü˜AĚbŽaȏÁ—ɏy˙6Ř~´męľ€Š B˜˛$“-"–Ě:D,9;"–t”äś)U>D,Ůrׇ9żˆXt#"–ŹKŰ\ڏţÍfđ÷Ľ-Őô•ą–ňĺNŒˆĹ’¨–ż’;[šëůę™*t2Űx\uDqtŘúÝŁF­yt|ožƒRľnRŁ7TÜüŠă_ŰîMˡ+ĺˇPĂ_Ĺś>!ô7oˆXšKsń:چZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄňŰpŻ:cqÄ,ö8=?ĘáËy}¤ťŕžÁÝ͏śąŮ*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţm°ýhŰÔh?S„,0%I&YD,™uˆXrvD,é<(ÉmSŞ|ˆX˛ĺ(Žs~ąčFD,Y;"–śš´ý›ÍŕďK[Şé+c-彋%Q-%wśr-ÖóŐ3Učdśń¸ęˆâč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠm}BčoŢą4 "–ćâuL ľR÷Úží籑‡“˛[TZ=ˇˆXš‰ĺˇá^u ĆbÄ,ö8=?ĘáËy¤ťŕžÁÝ͏śąŮ*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţm°ýhŰÔh?S„,05AĒ]‡ˆ%gGĒ΃’Ü6ĽĘ‡ˆ%[Žâú0ç‹nDĒľ—ąXęšIąH-_k)_îĈX,‰jů+šł•kąžŻžŠB'łÇUG‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUlëB󆈥Yą4Żcj¨•ş×ö5h?<œ”ݢrĐęšEÄŇL,˙¸ ÷ŞS0ŰAĚbÓóŁžœ×Kş îÜÝüh›ý¨‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßۏśMö0AČg ˆX˛—K꣗ςňUŢßśƒž>”K֞úĐl…ésuď,ŸĄlfťŘí*5hvqŘąčĺCÄRD,RËWĆZʗ;1"K˘ZţJîlĺZŹçŤgŞĐÉlăqŐÄŃaëwľćŃń˝ýyJŐşIŢPqpó+Žmť7-ߎ”ßB Űú„Đßź!biD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?nĂ˝ęŒĹĹ fąÇéůQ_Îë&Ý÷ în~´Í~TA~óvm”1‹šł&˙öcŽ‘]omCˆYŒ1”ŏÄ,ć†ü|™ü˜÷oƒíGŰŚFű˜b d3D,Ů ŠË‡ˆ%őŃËgAů*ďoŰÁ^ʇˆ%kO}h śŕÂôšşw–ĎP6ł]ěv•4ť8ěˆXôňMM‹Ľş‹Ôň•ą–ňĺNŒˆĹ’¨–ż’;[šëůę™*t2Űx\uäptŘúÝŁF­yt|ožƒRľnRŁ7TÜüŠă_ŰîMˡ+ĺˇPĂ_Ĺś>!ô7oˆXšKsń:چZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄňŰpŻ:cą†5,b{œžĺđĺź~Ň]pßŕîćGŰŘěGä7o×öWAšł˜ë1kňo?ćŮőÖ6„˜ĹCYü˜AĚbŽaȏÁ—ɏy˙6Ř~´mj´€)B˜ň bÉnP\>D,Š^> ĘWyŰňúP>D,Y{ęC[°řŚĎŐ˝ł|†˛™íbˇŤÔx ŮĹaGĢ—o*‹X&ć$‹Ôň•ą–ňĺNŒˆĹ’¨–ż’;[šëůę™*t2Űx\­ĂŠŤĂÖď5jÍŁă{űó”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śő ĄżyCÄŇ,ˆXš‹×15ÔJÝkű´ŸÇFNĘnQ9hőÜ"bi&–܆{Ő)‹­XĂ#fąÇéůQ_Îë(Ý÷ în~´Í~TA~óvm”1‹šł&˙öcŽ‘]omCˆYŒ1”ŏÄ,ć†ü|™ü˜÷oƒíGŰŚFű˜" d) "–ěĹĺCĒúčĺł |•÷ˇíŕŽĺCĒľ§>´Űoaú\Ý;Ëg(›Ů.vťJš]vD,zůąÔ‹Ôň•ą–ňĺNŒˆĹ’¨–ż’;[šëůę™*t2Űx\­ĂŠŤĂÖď5jÍŁă{űó”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śőĆQŇďź!biD,ÍĹë˜jĽîľ} ÚĎc#'eˇ¨´zną4Ë?nĂ˝ęŒĹ…Xł˜Ĺ§çG9|9ݧtÜ7¸ťůŃ66űQůÍŰľýUPnÄ,ćz̚üۏ9Fv˝ľ !f1ĆP?fł˜cňcđeňcŢż śmö0…AČSD,Ů ŠË‡ˆ%őŃËgAů*ďoŰA]ʇˆ%kO}h śÝÂôšşw–ĎP6ł]ěv•4ť8ěˆXôň"KÝ÷˙)w‚ ^műšŹý›ÍŕďK[Şé+c-彋%Q-%wśr-ÖóŐ3Učdśń¸ę`áč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠmý4Kł bi.^ÇÔP+uŻíkĐ~y8)ťEĺ Ős‹ˆĽ™XţqîU§`,öÚÄ,ö8=?ĘáËy]ĽťŕžÁÝ͏śąŮ*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţm°ýhŰx´€) B˜’ bÉnP\>D,Š^> ĘWyŰćúP>D,Y{ęC[°ŕŚĎŐ˝ł|†˛™íbˇŤÔx ŮĹaGĢ—K}TĽUŽlűšŹý›ÍŕďK[Şé+c-彋%Q-%wśr-ÖóŐ3Učdśń¸ę`áč°őťGZóčřŢţ<ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠmÝćsƒˆĽYą4Żcj¨•ş×ö5h?<œ”ݢrĐęšEÄŇL,˙¸ ÷ŞS0‘\;ńťÉk?'ńťžˆ˜Ĺyä¨G-?ÚĆf?Ş żyťśż ʍ˜Ĺ\Y“ű1ÇČŽˇś!Ä,ĆĘâÇ bs C~ žL~ĚűˇÁöŁmăŃ~Ś YŕŒ‹ÍŽˆ%őŃËgAů*ďoŰA\ʇˆ%kO}h śŰÂôšşw–ĎP6ł]ěv•4ť8ěˆXôň!bi”JąąÔńÓ]ŰG_ţţ<ƒ*݈â…ň٢De8ý•ÜŮĘľXĎWĎTĄ“ŮĆ㪃…ŁĂÖď5jÍŁă{űó”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śőţťiD,͂ˆĽšxSC­Ô˝śŻA=ŠžL在´zną4Ë?nĂ˝ęŒĹž$šńťÉk?7ĎůHŮUŢG7˝%?ˆY1Ä2äGĚůÍŰľýUPnÄ,ćz̚üۏ9Fv˝ľ !f1ĆP?fł˜cňcđeňcŢż śmö0Ĺ@ČgˆXlvD,Š^> ĘWyŰŢúP>D,Y{ęC[°ĐŚĎŐ˝ł|†˛™íbˇŤÔx ŮĹaGĢ—ďĚąXvCsT ˆˆĽŽŸîÚ>úň÷çTyE/źÚw‰Ępú+šł•kąžŻžŠB'łÇUGG‡­ß=jԚGÇ÷öç9(Uë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUlëF7ő}5 "–fAÄŇ\źŽŠĄVę^Ű× ý<6ňpRv‹ĘAŤçK3ąüă6ÜŤNÁXěé\9e×AĚbÓóŁžœ×[ş îܙýĺQvUßź]Ű_ĺFĚbŽÇŹÉżý˜cd×[Űbc eńc1‹9†!?_&?ćýŰ`űŃśńh?S„,0ĺAÄbł#bI}ôňYPžĘűŰvĐևň!bÉÚSڂí@ś0}Žîĺ3”Ílť]ĽĆÍ.;"˝|ˆXĽR@D,uüt×öїż?Ď Ę+˘xáŐžKT†Ó_ɝ­\‹ő|őL:™m<Ž:B8:lýîQŁÖ<:žˇ?ĎAŠZ7ŠŃ*n~ĹńŻm÷Śĺەň[¨áŻb[7şŠďŤIą4 "–ćâuL ľR÷Úží籑‡“˛[TZ=ˇˆXš‰ĺˇá^u ĆâҘΙSvÄ,ö8=?ĘáËyÝĽťŕžÁŮ_eWůÍŰľýUPnÄ,ćz̚üۏ9Fv˝ľ !f1ĆP?fł˜cňcđeňcŢż śmŸý05@ȧ=A`?CÄbł#bI}ôňYPžĘűŰv°Ö‡ň!bÉÚSڂíś0}Žîĺ3”Ílť]ĽĆÍ.;"˝|ˆXş9s̕•ˇQRD,uüt×öїż?Ď Ę+˘xáŐžKT†Ó_ɝ­\‹ő|őL:™m<ŽÖaĹŐaëwľćŃń˝ýyJŐşIŢPqpó+Žmť7-ߎ”ßB ۺэÝW#ójIą4 "–ćâuL ľR÷Úží籑‡“˛[TZ=ˇˆXš‰ĺˇá^ŐŕXÜ÷yŐtź9ÎŮs>Rv•÷ŃMoÉbG ą^ë‹Ußź]Ű_ĺFĚbŽÇŹÉżý˜cd×[Űbc eńc1‹9†!?_&?ćýŰ`űŃśą ý>÷8• d) "›K꣗ςňUŢßśƒ´>”K֞úĐlŽ…ésuď,ŸĄlfťŘí*5hvqŘąčĺ;ƒE,–}ŇW*Ĺ@ÄRÇOwm}ůűó Şź"ŠĘg‹•áôWrg+×b=_=S…NfŤ Ž[ż{Ô¨5ŽďíĎsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüjřŤŘ֍nęűjD,͂ˆĽšxSC­Ô˝śŻAűyläá¤ě•ƒVĎ-"–fbůÇm¸W‚ą¸6Śsč”]1‹=NϏrřr^‡é.¸opgö—GŮUA~óvm”1‹šł&˙öcŽ‘]omCˆYŒ1”ŏÄ,ć†ü|™ü˜÷oƒíGŰĆ1&L˛Ŕ”DwFsD,ŽŻň!bŠžżmg}("–Ź=őĄ-ŘX ÓçęŢY>CŮĚvąŰUj<Đěâ°#bŃËwŚ‹X,;Ś(ŠčK?Ýľ}ôĺďĎ3¨ňŠ(^(Ÿ-JT†Ó_ɝ­\‹ő|őL:™m<Ž:8:lýîQŁÖ<:žˇ?ĎAŠZ7ŠŃ*n~ĹńŻm÷Śĺەň[¨áŻb[7şŠďË;f…;żˆXšKsń:چZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄňŰpŻęóXʚ|”ů`=s.˛ë fąÇéůQ_Îë1Ý÷ îĚţň(ť*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţm°ý䡹îk€ŠB8í1=&kěäˆ b灌WůąTßßśƒ˛>”K֞úĐlŞ…ésuď,ŸĄlfťŘí*5hvqŘąčĺ;ÓE,!câĺ˛Oj“ň bŠă§ťśžüýyU^Ĺ ĺłE‰Ępú+šł•kąžŻžŠt´ÇU|YýUĚ]Ag­×ŹkěQĎAŠZ7ŠŃ*n~ĹńŻm÷Śĺەň[¨áŻb[7ş1´ƒńqÍÖŻyőĉ!)"–fAÄŇ\źŽŠĄVę^Ű× ý<6ňpRv‹ĘAŤçK3ąüă6ÜŤ‹‡†ôšŻoŻ2œ ĎŠSvƒgÇš|ÎGĘŽň>şéÍ fqßŕÎě/˛Ť‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßŰOÚW|/4—;^-S„,0%9yřhoÁqňa;hľX¸hl“­ÝŽˆ%kGĢŰątœhekŰSڂíľ0}Žîĺ3”Ílť]ĽĆÍ.;"˝|ˆXb†ISœ.š"–:~şkűčËߟgPĺQźP>[”¨ §ż’;[šëůę™J7@űx\ŗŐ_ĹÜtÖzÍşĆő”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śuŁłŻŃŃiŠx§EÄŇ,ˆXš‹×15ÔJÝkű´ŸÇFNĘnQ9hőÜ"bi&–܆{UCcńÁƒÍŻĂߌsë”ÝŕÉqNŸó‘˛ŤźnzKśł8bˆőZˆXü¨‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßŰO{Ýؑc0•AČS’{ö'_'śƒUŰ…ë@Ć6ÉÚíˆX˛vD,şKljVśś=őĄ-ŘL ÓçęŢY>CŮĚvąŰUj<Đěâ°#bѡˆĽËąÝŇCÇO”HˆĽŽŸîÚ>úň÷çTyE/”Ď%*ĂéŻäÎVŽĹzžzŚŇ Đ>WńeőW1wľ^łŽąG=ĽjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠmÝčĆîkääIiŠíŰwxĽCÄŇ,ˆXš‹×15ÔJÝkű´ŸÇFNĘnQ9hőÜ"bi&–܆{UƒcńΝť¤1˘sá‚ܙsě”]1‹=NϏrřBĚâ:ţGĚb‘]omCˆYŒ1”ŏÄ,ć†ü|™ü˜÷oƒí'dtďA˜Ę d)ɑ­;œ'śƒTہ„ëĆ6šÚíˆX˛vD,şKljVśś=őĄ-ŘH ÓçęŢY>CŮĚvąŰUj<Đěâ°#bѡˆ%łxxł4ĹąŁG,MńȡłŽCÄŇ,ˆXš‹×15ÔJÝkű´ŸÇFNĘnQ9hőÜ"bi&–܆{Սŏ?ţ”4Ĺxţ\1‹nśř˛ ĺâ{“7łhLď¸~Ó]pßŕÎě/˛Ť‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ďßţˇŸăk^€Š B˜’ í; ‡^ŘÔ3(űÁ¨í€Áu b›DívD,Y;"ݎˆĽăD+[۞úĐlž…ésuď,ŸĄlfťŘí*5hvqŘąčĺCĒ]l×ÇţľáLs”:áx* "–:~şkűčËߟgPĺQźP>[”¨ §ż’;[šëůę™J7@űx\ŗŐ_ĹÜtÖzÍşĆő”Şu“˝ĄâŕćW˙ÚvoZž])ż…ţ*śuŁ?_'Ž“‘“'Ľ)vîÜ)O?­?•Kł bi.^ÇÔP+uŻíkĐ~y8)ťEĺ Ős‹ˆĽ™XţqîU4?÷üŮ˝{ˇ4E GçÄiłčf‹/ː.ž7y3‹ĆôŽë8Ý÷ îĚţň(ť*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţí_űÚ°MF÷€Š B˜‚$ƒü·O•ý Ôv ŕ:@ąMžv;"–Ź‹nGÄŇq˘•­mO}h śÎÂôšşw–ĎP6ł]ěv•4ť8ěˆXôň!bÉ.öę#ŘzŸHÚO_I|îپðK?Ýľ}ôĺďĎ3¨ňŠ(^(Ÿ-JT†Ó_ɝ­\‹ő|őLĽ }<ŽâËęŻbî :k˝f]czJŐşIŢPqpó+Žmť7-ߎ”ßB ۺэżŻĂ÷ˇż57ŻŢůŐť2VD,͂ˆĽšxSC­Ô˝śŻAűyläá¤ě•ƒVĎ-"–fbůÇm¸WMŕXüťďmkn^ śŢo8ÎA̢™-ž,CťřŢäÍ,Ó;ŽçtÜ7¸3űËŁěŞ żyťśż ʍ˜Ĺ\Y“ű1ÇČŽˇś!Ä,ĆĘâÇ bs C~ žL~Ěűˇ?íçŘŁĎfÓLA˛Ŕ” Őę5ĺÎťŕś~ăAQăĘzđi;@p˜Ř&MťK֎ˆEˇ#bé8ŃĘÖś§>´ہfaú\Ý;Ëg(›Ů.vťJš]vD,zůądSőîœń—îLŹŠ÷˘ŚçȲ˜ć×í[6‡ĄT&'śý\eřf3řűҖjúĘXKůr'FÄbITË_ɝ­\‹ő|őLĽ }<ŽâËęŻbî :k˝f]czJŐşIŢPqpó+Žmť7-ߎ”ßB ŰşŃM‰z Ň{“§œ59Ż~öłŸ—ńńvtfŻ~=˝ú7Řă6+sbbľ#ŚâNLŹîRă1Í]C­Ô˝śŻAűyläá¤ě•ƒVĎ-"–fbůÇm¸WMŕX<>>._úňń÷&çU+Ñ2bÝlńeâĹ÷&ofјŢq]§ť`żÉ›ÉśąŮ*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţ­Ů~ÂJ?t_ňŞÚ~ÍŤ“Z4LI˘qűä‘c˛ĺŤ÷Ś­†‰@2׉m˛´ŰądíˆXt;"–Ž­lm{ęC[°`ŚĎŐ˝ł|†˛E bIądí§HÄńâD†Hŕ¸^Q—ČwôŠ…í[6usbŰĎĺP†o6ƒż/mŠŚŻŒľ”/wbD,–Dľü•ÜŮĘľXĎWĎTşÚÇă*žŹţ*掠łÖkÖ5ö¨ç T­›Ôč 7żâřל{ÓňíJů-ÔđWą­ݔó‰XFGGŸW<$ŸřÄ'ą4 "–ćâuL ľR÷Úží籑‡“˛[TZ=ˇˆXš‰ĺˇá^5Ácń§?óy9tčpăójtNÜzń‹ń˛~܃˜E3[|Y†zń˝É›Y4Św\ßé.ŘoňfňŁmlöŁ ň›ˇkűŤ ÜˆYĚő˜5ůˇsŒězkBĚbŒĄ,~Ě f1Ç0äÇŕËäÇźŤˇŸĂw?"cG7:ŻL˛Ŕ”$’ŚýâçîlĎ ˆXlߎ W/"ëATʇˆ%kO}h śËÂôšşw–ĎP6ł]ěv•4ť8ěˆXôň!bÉ.ćÚ~ô‹ł5˙–Ź š;źëřŢřÂú$Ś)‘’’(Ă7›ÁߗśTÓWĆZʗ;1"K˘ZţJîlĺZŹçŤg*Ýíăq_VsWĐYë5ë{ÔsPŞÖMjô†Šƒ›_qükŰ˝iůvĽüjřŤŘ֍nĘůŠć¸=;śÇß'b^ýđ?|$Œ9nIUżŒ^ýlƒq›•91ąÚSq'&VwŠń˜ć‰ŽĄVę^Ű× ý<6ňpRv‹ĘAŤçK3ąüă6ÜŤ&x,ŽžĆňąýkü}"ćŐńčÜXYŽsłčf‹/ː/ž7y3‹ĆôŽë<Ý÷ îĚţň(ť*ČoŢŽíŻ‚r#f1×cÖäß~Ě1˛ë­m1‹1†˛ř1ƒ˜ĹЃ/“óţ­Đ~ŠŢ˙Ľ{’5ˇůajC ‡)C“F‹CűČ Ÿü˘aŕ—ŒÁub›ívD,Y;"ݎˆĽăD+[۞úĐl”…ésuď,ŸĄlfťŘí*5hvqŘąčĺCĒ]Ôë#xîŁ"Ç÷h*ü ˛|Óü:W÷ÎňĘfś‹ÝŽRăf‡‹^>D,ŮEøş­¨g?–ŹÍŠđ›š0˜ÄxiýZ9rđ ä2Xeřf3řűҖjúĘXKůr'FÄbITË_ɝ­\‹ő|őLĽ }<ŽâËęŻbî :k˝f]c*?cľnRŁ7TÜüŠă_ŰîMˡ+ĺˇPĂ_ĹśntSŢ׉cÇd÷ömń÷‰œW˙ćoţVžyćŮԚúő`KŁSq'&VwŠń˜ć‰ŽĄVę^Ű× ý<6ňpRv‹ĘAŤçK3ąüă6ÜŤNÁXüÜskäţńŁń÷‰œW幏I°ăÜ1‹fśř˛Lâ{“7łhLď¸îÓ]pßŕÎě/˛Ť‚üćíÚţ*(7bs=fMţíÇ#ťŢچłc(‹3ˆYĚ1 ů1ř2ů1ď_żö3ôŇ6Ů˙šŻ'K ĚŤ“ „,0Ľ0Šđ#žýđÇłł§6ˆ÷śÝŽˆ%kGĢŰątœhekŰSڂí˛0}Žîĺ3”Ílť]ĽĆÍ.;"˝|ˆX˛‹†úˆ^ďóč_$kTáŰć׾Ď>•äIII”á›ÍŕďK[Şé+c-彋%Q-%wśr-ÖóŐ3•n€öń¸Š/ŤżŠš+čŹőšu=ŞüŒŐşIŢPqpó+Žmť7-ߎ”ßB ŰşŃM…ň…ęöÍ/ĹßOĹźú;żűţö+†ę׃ D,FLŝ˜XÝĽĆcš'ş†ZŠ{m_ƒöóŘČĂIŮ-*­ž[D,ÍÄňŰpŻ:cqôJĄţџĹßOĹź*EçĘĘqŽŽ˜E3[|YŚń˝É›Y4Św\˙é.ŘoňfňŁmlöŁ ň›ˇkűŤ ÜˆYĚő˜5ůˇsŒězkBĚbŒĄ,~Ě f1Ç0äÇŕËäÇźÝí'~îG?›xkp^˜L d)…M…řĽ-ňĚß|$1jâ}`mˇ#bÉÚąčvD,'ZŮÚöԇś`;p,LŸŤ{gů e3ŰĹnWŠń@ł‹ĂŽˆE/"–좚>‚G> rŕ…$Eƒ*|ŰüzäĐ!YóôReřf3řűҖjúĘXKůr'FÄbITË_ɝ­\‹ő|őLĽ }<ŽâËęŻbî :k˝f]c*?cľnRŁ7TÜüŠă_ŰîMˡ+ĺˇPĂ_ĹśntSÍ×öM/ɉăÇăď§b^}ţů5ňżń›ŇˆX˜Š;1ąşKÇ4Oẗ́íç1T˝Xéd}™ĘmQ9hőÜ"bi&–܆{Ő)‹#~ď÷˙ŻŹ[ˇ>ţ~*ćŐč\šőČ“ďÖsuÄ,šŮâË2%ˆďMŢ̢1˝ă:PwÁ}ƒ;łż<ĘŽ ň›ˇkűŤ ÜˆYĚő˜5ůˇsŒězkBĚbŒĄ,~Ě f1Ç0äÇŕËäÇźíeßó÷˙.Ûś'žx œ! xŚ <ןeŮő×J}Ś˙"یčsŐŞłźJN^š>éĚŻG5>.‹–.óŘJžŮ ţž´Ľšž2ÖRžÜ‰ąXŐňWrg+×b=_=SéhŤř˛úŤ˜ť‚ÎZŻY×ŘŁĘĎX­›Ôč 7żâřל{ÓňíJů-ÔđWą­ÝTóľkŰ١gwüýTÎŤŃ ż'NČ­Żxšô D,FLŝ˜XÝĽĆcš'şfÂöóŞ^Źt˛>L在´zną4Ë?nĂ˝ęŒĹů—’Ď|ćóń÷S9ŻĘÁ—¤5>$jĹőí™é.ٲÓMí–ĖՁ5F÷‘űšß (ČŻVBkúŔîĆâ˔ŻŔ\ą6‡Vז”]tÔŁ–mcłs6ŒÍĽ÷+ˇŤšh Öćho§A‰}ĺl?Ým‚"“3OÎöc4Žâ™'wكοΙ”F?Ł­™š ŁśS[W1nl,ŚťěĹ1q/[–Ő†čž}=ëĆ]‡™ü׼Œś˘yöL˛ťvOaű‰ zýŸü˛şűářűИWáôać̙ńçŽŰ˙V’ƒżáögţOśIB˜rDśĘœ!ݓ—ƒë7$b–ŤŻHVŠ^šĚ˘í&‡fěém7$ąäěžőQą|fťÇţÖ2€ˆ% "–Ź15hvqŘő}űj)_ Ć$ÎýŤRĺCĒľOËřš—ó'/‰­˙ÝsÍŻ‡ě÷ł(Ă7›Ąe_Şé+c-彋%Q-%wśr-ÖóŐ3•n€öń¸Š/ŤżŠš+čŹőšu=ŞüŒŐşIŢPqpó+Žmť7-ߎ”ßB ŰşŃM5_‘ˆeĎÎń÷É0Ż>ůäÓ}ł bi4b*îÄÄę.5Ó<Ń5śŸÇPőbĽ“őid*ˇEĺ Ős‹ˆĽ™XţqîU§`,ŽˆD,˙—‹żO†yUö>˜E1‹1} îl šKďWnWsŃŹÍŃŢNł66.12)~2F[3s&0F)l§śŽbÜŘXLwŮ‹câ^ś,Ť Ń=űz֍ť3ů1ŽKmEóě;™(ewížÂöz–ý˙öe9pÇ}ń÷‰šWáô!‹{]ŕńX–]Y &Y1ËО}˛ě†kÚ*Ť9šOň\öŔžŢvCKÎîYËgś{ěo-ˆX˛ bÉSăf‡]ß×šŻ–ňbLâÜßšú(U>D,Yű)ą„;)zíI,ńVŞÂϊY†‡ŽË’+EżDŁ ßl†"”}ŠŚŻŒľ”/wbD,–Dľü•ÜŮĘľXĎWĎTşÚÇă*žŹţ*掠łÖkÖ5ö¨ň3Vë&5zCĹÁÍŻ8ţľíŢ´|ťR~ 5üUlëF7ʨŃë„lOb‰8Uój$fŮśm›źîľŻŠKŁSq'&VwŠń˜ć‰Ž™°ý<†Ş+ŹO#Sš-*­ž[D,ÍÄňŰpŻ:cńřř¸üîďýĄőI,§j^Ĺ,ÇwŠ:ű’žĄ™Ë¸oNŠ fÉŻÔrd]gphumŮAšĂözÔňŁmlöcÎ†ą šô~ĺv5mÁÚíí1‹acăbP#“Ňč'c´53Wac”Âvjë*ƍĹt—=°ř1&îe˲ÚÝłŻgݸë0“㺔ŃV4Ďž“‰âQv×î)l?’ĚŢ{?üI9ô ó“Xâmx ä@Čâ^x|–e×B(…yŕ2ŻÚűÄ32ďÜŐ2sńBËIž8ě=˝í†"–œÝł>*–Ďl˛‹^űKD,Ycj<Đěâ°ëű:÷ŐRž@ŒIœű;WĽĘ‡ˆ%k?ľ"ŮżVäţßŮůhźx*N^Šć×č5Cűö쒹óȌöAsş Žvŕ‡˛/Őô•ą–ňĺNŒˆĹ’¨–ż’;[šëůę™J7@űx\ŗŐ_ĹÜtÖzÍşĆU~ĆjݤFo¨8¸ůÇżśÝ›–oWĘoĄ†żŠmÝ茟ŻǎÉć×ɑÇâĺÉ8ŻŽ[÷‚ÜsďýrŮe—ČňĺËĽ ˆX˜Š;1ąşKÇ4Oẗ́íç1T˝Xéd}™ĘmQ9hőÜ"bi&–܆{Ő)‹Ÿ{nüĎ_ýßňđĂߊ—'ăź˝f(Řńˆ /™ľÄr/2÷ÍÉŘŁŃnIlYmż1ä}äžć7@Ěb‹‘ˏśąŮ9ƂćŇű•ŰŐ\´ks´ˇSÄ,†‹AAŒLJٟŒŃÖĚ\… ŒQ ŰŠ­Ť76Ó]öŔâǘ¸—-ËjCtĎžžuăŽĂL~ŒëRF[Ń<űN&ŠGŮ]ťÇŐ~†7n•ńOrü™őń2"đ!‹{]ŕńX–]Y 4E'/ĂÉśoÜ/,şüÉ7sóÉ_´Xěbż!ˆ%g÷ŹŠĺ3ۃě˘×ţCĒK֘4ť8ěúžÎ}ľ”ĎwŒJÉŐGŠň!bÉÚOˆ%~ ËsőĐ˙ töÇśSyňR4żž–[6Çօ‹—tĎ5]íŔe_Şé+c-彋%Q-%wśr-ÖóŐ3•n€öń¸Š/ŤżŠš+čŹőšu=ŞüŒŐşIŢPqpó+Žmť7-ߎ”ßB ŰşŃM9_ŃźşgçvŮúҋ2:2Ű&óźşwď^ůÔ§>+j\ÉM7Ýŕ•'D,FLŝ˜XÝĽĆcš'şfÂöóŞ^Źt˛>L在´zną4Ë?nĂ˝j‚Çâč),˙÷‘ßţ÷Ëž}“˙|5>§~é+ÉUeW[n âž9{4Ú-‰-Ťí7fƒźÜ×üˆYl1růŃ66ű1gĂXĐ\zżrťš‹ś`mŽövŠ˜Ĺ°ąq1(ˆ‘Iiô“1ښ™Ť01Ja;ľuăĆĆbşËXü÷˛eYmˆîŮ׳nÜu˜Éq]Ęh+šgßÉDń(ťk÷h~ÂÉęŕçż&ťţî_eěБ؄ˆĘ0Մ,ž­źp*Ë}w}–ĺΟI´2Đś äţ˘uóŁĎn¸ůČáÁƒ‡ MtĄRig*<ŃęŮf.Y,|Çäěoť=y§j/YnŤŔbű D,9ťg}T,ŸŮd˝ö"–,ˆX˛ĆÔx ŮĹa×÷u|“8÷wŽ>J•KÖ~ŠD,ŃÎyń ˘Öü›Čń=Ýt“ĺäĹg~1s–œwŃĹrÖęó˛YVR6š}ŠŚŻŒľ”/wbD,–Dľü•ÜŮĘľXĎWĎTşÚÇă*žŹţ*ćNš őšu=ŞüŒŐşIŢPÁ—5UE_ś–oWĘoĄ†żŠmÝčŚD=…遽{dώí22r˛k?ćՕ+WʏţČ{ĺ{žç]í|›üˆ-‚4 "–fbu—ižčš ŰĎc¨ząŇÉú42•ۢrĐęšEÄŇL,˙¸ ÷Ş ‹#˧?óyůŘÇţUvďŢÝľŸN󪚽LZ—ż[Ć/zk|ƒTżˇhŠĂĚ=GĽŮ šąß3r>Rv㕠G5ůÍř‰Ó‹#˝2›-žLůę֏3NϏűĆłrßWvÔŁ–mcłŰ˝f-N †ôĹĺ ň›‰8v˝eż%öU’Ţ1fĘŽˇwžœíÇâ+(Ń~Ě1˛ë­mČłď¸Űh’Fosůű~׎l´S{5IJŽAö˛?f”‡ .+đěë7}˝›뺎=—czöăŮNÍí!Jɑ{’_žGFěšą@Y.\>öŘ#ˇ…ăáßáöçXîOľ?ÇS*ő™˙˲ë3˙=k]ŒoK<ןešó‡úŽůä%^“9™>oŽœőŞ[eůÍ7Čü ĎĎĽÔoHv•-n` i˝x;첧W™Ţ6&ť2nšú’:Œ7_ť˛ŘłÝZ˝Xůý*ŸŮd˝ö"–,ˆX˛ĆÔx ŮĹa×÷u|ÚŠ°aÂú(U>D,Yű)ąě_+ÁÖűdüĽ;E†tӘN\â­Náɋďü:mú4YuΚ˛lĹ*™ˇ`Ą”Œb_RRËWĆZʗ;1"K˘ZţJîlĺZŹçŤg*Ýíăq_Vs§Ü†zÍşĆU~ĆjݤFo¨ŕËšŞ˘ŻâMˡ+ĺˇPĂ_Ĺśntăç+z…ĐáƒűcËččh×~:ĎŤŃ…Šˇżý;ĺŰ_˙mrőŐWĽśˇz–&AÄŇLŹîRă1Í]3aűy U/V:YŸFŚr[TZ=ˇˆXš‰ĺˇá^5AcńsĎŻ‘oÜ}Ż|éËwČĄC‡ťöÓy^•ó$¸ŕ ˘Îy•ČâKłIłčf‹/łĄĆ§çÇ}ăY9n$‹łľüh›ýůÍŰľýUPnÄ,ćz̚üۏ9Fv˝ľ !f1Ć,~Ě f1Ç0ä'e~i‹ü9üŔŁ2vôxwődœWáô!‹{]ŕńX–;Y \'/‘9żnćâŲřŠKdţ…ȜłWĹOm™6ož´ŚOďNŽkgˆXňvĎú¨X>ł=Č.šęCË"–,ˆX˛Ćvű7ÚĹa×÷u|Ú)°aÂú(U>D,Y{“"–đŸąa‘Ąđ¸ĺŘîđprł¨}kEí~:óô•Ř[ĐyĚëäWńeőW1wĘm¨×ŹkěQĺgŹÖMjô† žŹŠ*ú*Ţ´|ťR~ 5üUlëF7†v0>.ŁŁ#2rň¤ 8!'Ž•هÇËiŚÚź=Ľĺڛޗ—]u•\žťžuÖ*Y´haü8á hI?ęݝß̒LˆXš‹×15śŸÇPőbĽ“őid*ˇEĺ Ős‹ˆĽ™XţqîU}‹Łšfhh(žÎžsç.ٸq“<żf­<ţřS™§ŻDLľy5~JËňŤE–\ŢuX-2gš¨á Ąú×̍gĽŮM1í7’s>Rvă•!Gľ"f1ף–mcłŸ  żyťśż ʍ˜Ĺ\Y“ű1ÇČŽˇś!Ä,ƁŏÄ,fÂ9'˘sŇ2YN^˜_`˛Ăź Đ?˜WúÇé4ŻÂäfŞ Yŕ "=ЛO^‚ÔťĆ{'9óË+8S‰Ś§Ţ¤|ę{ćW˜L0ŻôćU€ţqşĎŤ B8#)>‰SuÓÚÁÇ ”!0?OÔsŰÉŻžg~€‰„y5NŐMËź u`^SuÓ2Ż@Śúź 0 d3Ó źÎD‚”hŒô\uşœ¸0żŔd…y 0ŻôÓq^h„,pĆSý Ś‚ęžů& ĚŤýƒy đô;YR¤'ŒüÉ '3Đů“”ŠxŇÂü ó*ó*ôćUćUčgÂź ĐO˛X(;pb&Šć“3턅ůęŔźš…yęŔźš…yęŔź Đ_˛xRôČI& (‚šB‡ůŞÂĄĂź UaŽĐa^€Ş0GÔ! @ |'"ÔůSNLú ó+Ŕ™ ója^8ła^í/ĚŤg6ĚŤB€ €‰  ˙0żôćU€ţÁź P–L˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤! L ˛Ŕ¤ŔWȢ ^ڞȓ„,0)”É Ż4č“Z‹ÁY`R€&M Yx%ŔÔĽmHÓOdAĐ0uhT ÂŤ…`R0(“žęPŸIŻÁŕ‰,0)@Č“‚S%d)ű¨^/PÓBŤ1(S„.p&3%´źZ&Y`Rpş Y”§ ŕLă´×UL”ĽŸ•˘rĐ”ŽbB4źZ&§BČÂST&?Žńŕ‰,0)衐…§­œ9ôU+2(“‡ŞC<PMCĄdi/&ËŤ…Tîű¤Ş$€)„I›1)t-dQžśô:-ő)Ňa”ŐuôSýDߎKV ”W!v€3™´†Âô7^ŇĎ)ĄBUs}ŮX6 b81i(LŻęWœŞë )#d)L5ź>—.Š˙ ˜ęô4‰fBJk-[_9ýDžZ¨Š'ŚÄ~•R‡˘O„,p&ĐŃHt4Ұ6c"˜H!Kš*T{ř7ž+Z@Čg=DŹ™p˝F¨Ÿ:FiBČRľ Ęó/Ÿv<ú—-ъVëTis&ŽŽF˘­™čj(ÄŽą(Ňc”Ľďb—SĄúP†eĺXŸ'_éăąq|ě…čsppPŚ:DG3!M…ƒź^C9ÖO§úń%ý(đXäçĉă룅˜ęt4mÍD¤Á“úL¸x%Mż„,EďXŞSH›â'ŁÚšsűóŃçŕŕ@ęPSHi$":š 1żZ¨CWuśOÚÖ×b˘ŸČâó !Űť˜ĆĹü>§hyěhH¸řPä€× ŔTڧP%š‰ři,&M…IkaťtđŃw4BY!K“™óyגʥíüFĆáááoDŸÓŚM€ŠJGŃŃJH˘0 T|´MëAźię‰,Şäú˘ĺ"˘1ž{÷žxçLŸ>× Ŕ”$ŇDDڈˆśV"zâĘh.YÓڍFÄ/ůj!UÁž~ÔMç/żżZ(úÜłgçžńńń;˘§OŸ.SŽ&b||üÎH+!)í„č eXŽ˘á˜ú)dń-LŃăkĘ<â&~$ú[žĎ˙ŁçÜ˙ÉÝťö7§ĐżœĎwÂńńq˜şŮlvąěěĚĂzž˙Î;?ý˙đ˙0Ůéňäřxůƒ×^ű“ĎŸÇ,‹°\.Ĺ,ŔäĚçó"–÷ß˙Í=~üťß‡ó),ĎÂyŔ’Ç*ĺŠ,!TOg)ď…Â}YĘÚ(ŃĹŚ!K4ÖT–Ś#†ęÖÖűń2?<üôٓ'řÎëŻßůŤxĚĐŢŢnX­ÖgA Ŕěîƒýełłă„îÝ{÷ż?ţÝăÓ­“p~¤PąäŻ|*Ků8ĄŞé+uË$ŚąDc†,U{uSYň÷ÔŠ-)?Ť(ţŃâd–ĺýű~űÍ7ďîgYöůĹbqú‡Ÿ›Î\Şx”Đ+ŻźnÝÚ;ť_.—_}űíŸţßŃŃQœŔ'ąTE,ʼn+UkmG ĽÄ,UkŁEC„,ŃĐSYň÷ňó뚵Şď/[^ěg|ôŁĎ|ć÷‹Ĺ?ĎçŮ"ÖLg˜ÎlŮŢŢ^Řßőě(Ąf‡‡‡Ďţ÷g?{ű+Ἁ8 çËŞćUŽXBxyBKq-îC¨Rś>%;dŠÚëłÔ]ŻKĎŽžYÖO.îç=řŐÉÉꛡ_˲Ů狝°ť{^5­VŤ0–Ůlv°ě‡ÝÝĹŮýršţĆüö?ýë÷Ţ ç}C Xž]\çÓXňëŞI,!źˇäĘSXĘKÝ{ůşę~Pł0œÔ˜Ľíşî¨ĄŞëěâ:+Ü×ňgçĽőÓ×­‹őŮg?űšź}űöœ^ţSţˇăăăprrâŘ!`c1VŮŮŮ ‹Ĺâ,^ynýăO>ůäK÷îýň'áy¨#–8°ŁŚ”–bČÂËKSŔ’Ż4E-!q/Ůe„,ĺűş),]–rȒßĎ ĎC–|=ž)´—?ƒ–ýýƒϲěß żK89Yž;Ł–8­%†-ů  (+ů+˲łxe>Ÿ_ôÜjľúÖ§Ÿ>ůz!`‰Ż8ĺ(ź<…eUxf™E¨YBH Wڎę2er!KŰ÷mrÄPטĽŻďË!Kžc–üŮ7ß|ëΝ;oüëŢŢŢż§´lfýăgϞ}ďáĂGßýřă†ç‘Jœžň,<SĘ!Ků(Ąâ}Ý#–Ś÷ňuŐ}ę^'C‡,mß9vĚR~§łdá帼˝Ä -‹Âz888¸ýÖ[ţwˇnÝúŰ,Űůë, qşuw6›˝vúw¸Ćů?ŽŚuł§ëőúńéĺýŐ*üfľ:yďéÓ§ď~ôŃońäɓOž?wŸ‡ó ,ĺ8Ľ­ƒ•rÜŇçĄÉE,єB–â}טĽj­jKUźRżÄ‰-‹‹÷yhnŠűY¨×ç˙[(Ăé^4}fUzŽ-Y^źŽCőĕň1BUG ď›~nŸˆ%ĺ>uŻłą"‰M§˛Ż7‰ZʁJŐÇ Ő=—żĎ ŻŞ#ŒŠęB–ŚŔĽLź`t]"ŒUâzՑ?ËÂkUú\Ýt•âD–ŚçBvËĽE,јÁÄśc–ü˝)j)Ne áĺĽ*d™ľ|Vú}ëţÝŠ˙×"؞Ôcݰ^Ü[•žŻ;ꧨ÷Ë{刼éűťź7]WݧîőśĆáYâ^ń>˙‡Î ëĹ÷˛śý˘UéůâwdĄú[˛”÷Pńlq-! LQאĽ*ö¨ YŠ{M!Kńž|]÷ -ďMÁJÓżŁé>uo#ۈ&úNf)Ţ9Ľ%őUţšYÂuĘďŰFČŰłIČRľśJ¸.G')݆›ž2Ɉ%ÚV4Ń%f)ŻmąT˝W…(ŠG Ő}oŰď\žn"f€ńuXÚŽŰ"’ś#†ŠďĹëő@ďM×Mk){ƒŘf01븟łT­uÖR QR'Ż4*łĐč´łŔxşDuÁGÓ$“Ś#‡ęb•Ş ,}ŢŰÖĘ×U÷Ąăţ śK łŻű.QÝ–â^yżîůşŸ*ö€é[ˇŹ×Ĺ#)QKӄ–ŞŸ‘ʤN ÷Ąăţ`.+ŞčrÔPJÜŇwbK~]ŽT˛†çšîCĂ~hx6…úëc4E,]ŚąTÝGŤŠgşF*]ڰ¤Ü§îâ2ăˆ1§łŻSc—Źć{˛†ďo Yę֚ÖS‰Z ÝŚ!FŰ4–şľş %ZuXrňĘd§°M!ˆz:KńşĎţ,ńsmż[ÝZĘŢ&D.Ü$c]'•T…")ŃIŸÉ*]b–”űÔ˝ŃM%zč|´éSžî3ÍĽËgŤ>W÷Lč°l_—i%ë6ĄĽ|˝i!Ę&GĽ7Š{[1ľbĚé,C\§„,)k){ŔĺŘtKym“hĽĎuĘ}ęŢVÍĂôl2Ľ|żÉu•u¨/ŠD)p=ô‰>ŞÂ•”ă…šö†XęÖRöśnĘńĹPÓYĘ÷]%ę{_ˇÖeŘž.G Ő­ušďśôšOÝť4SœČR4Öt–.{)÷Ŕő1DČRľ6FÜRu_ˇ–˛wŠŚ˛DCĆ,cÜwYŚoÝó™Ąc–>÷uk){—î*„,QŸ#z.3XI‰X„.0]cĆ,Ukc,)ű—,šM§łT­ őLŰzę>0}ă>ńJßgęÖRö&媅,QטĽn˝oŔŇg˝m˜ś>ĄHęúŚąĘľˆX˘Ť˛D}§žŒq\Đ6&°ˆ``sCDcNhé˛Ö´žş?9W5d‰†ŒY†\oŰň3Ŕ0úDcNi點ş?IW9d‰f<3t Ň%D­Ŕôu‰AÖďő XRŸ™¤Ť˛D›Ä,cíőy˜žÔHdč°ĽmŻË3“uB–ܘAKĘ~ę3c~čnÓřcˆŔäF,šë˛DCMI#ZŠŔŐŐ5;néóÜä]ˇ%úȟŠ!$Œ€zێ;†ŽNn\Ä]ǐ%ęyŒőěŸŚŁo4Ňĺsc={%\א%ę\Ľă‚Ä1Pď2#1Ž!â3“wC–Ü6‚–Ą?Lߌ1‰€Ľä&„,Ń&aÉXQŠŘŚkŹ`d“ď˝ÖKtSB–h¨pD€¤*>šöKt“B–Ü!Џ#6šKî&†,šmĆ'B¸úś•ܨ€%w“C–œČ˜Š°ä„,/ľŰvŁă•"!K5A 06K‰%°ؔpĽ…Ľ?q PG´Ňƒe"¸ţÄ*˛\ân2QÉ5 ~`˛ d`„,L‚€I˛0 B&AČŔ$Y˜„?˜z€ŮŠIENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/flathub.png000066400000000000000000015561721522167256300221450ustar00rootroot00000000000000‰PNG  IHDR ˜@ţ2ľÜÜAIDATxœěÝ`$eŮđg“\ŽrGo ‚4•" *‚‚ˆ;ˆV,ŘPQlXAQP{ýlX°€ ŹéŠŔq´ë%ĺŰw’ÉÍnv“Mß$żŽťSś$—ŮňΞ§% †–€̨IŔ €š̨IŔ €š̨IŔ €š̨Š-˜*JÍŁ;˜ô„’Ɔß+Œ?ĄśQ&5|~w0yŸ ƒTcüž`ę:„ŕTm~/0ýœU¤Şä÷šő¨ň;ę›ÖałéŽϟ]ˆ Fßx†żŚeĐl:ŸĆâg €ć3Ą°i4›NÁ¨ŃúY…É`ň­€Ř´šM—°ÔH~Îąú Ş@ăĆ*Đ5’űň!łérÎĎ8ŇߋđŒż‘ž†sű)2›ĘA¨ń–MäďOˆ €Éd"ƒXC}lAł^S5¤4”ŸkŹśŰő 7Ô5”ۍն“ÂT >5ú3MÔvŁEh €ÉdźĂW>ŢDm7)LľŇh…ÁšŸÉÔNښąh{Ů=ÂőCÝŽéMĽĐÓHCa:íŰŔT0ҀÖX‡ÉFăţ'…ŠhË`ŮHiCݺѨ*6놲MӚě᧑„ˆş|$ëF˛-Đc(a­Ń uůPˇiJ“9č4ܖ–c˝|°uŁy˜Ş†ĘŕŘpƒf“2d6YCMŁ.ɲ–7şžÂgLEŁşn°Ť{”— ´źŃőMg2—†S9l¸!˛‰ŽjÔ6–ŐĘĆ2h6ŠBf“-ô4Ô×pCdĂŮf°ĺŽęˊeŁľM˝eŹk*“%ě4œĐVi”çGşl8Ű=ş‡šÍp—tžŢ˛ĄŹŸp“!ä4ŇŞec=?”eĂŮŚťą —ő|˝eŹ›pÍpÍpŮp×52?”eCY ŻŘh‡Ë†ťn eŹ›PÍpJ¸l(ó:Ęz`tfc&ęfŹ›0ÍpŤŞeC˝ŢČşÖś|°u@áłŞƒ`Ł(nčŹŢ˛F֍ťf 8VŐ˛ąş>X l¨UĚĚ`pC d śŹ;F/D6ZŐÍ]7ޚ%ŕ4’ŞeÍF&k´ÚYőíęmCX ­Efw40Ťž>’ĐŮpŞĄ ´Ź‘uă˘NcYľl8ëK Ţn°çVoY#ëFBh €‰4VĄ¨‘V1+Č Œ ´Ípƒf“śšŮD†‘†ZÝk¸í- “ĺZjŹhůp[f´źQBdLF# KuayŁ-1ť†°| PŮhˇĐŒ!ŽTíŞeC]V+(V+T6X l°VŁ0*`*N`j €Ů`­) œuŐŘf¨Ą˛ĄT6kdžŃucbźCKcYľl(Á˛za˛ęőŐŐËęĚ ¸EőŔĐ VĹŹ^Ŕk €Y×ŰTÉl,*›Őš!Ž5ăvípŮP‚d]VW0+†Ęę]nő˛ĄüžјN†šŞ×s(UĚşšŢýŤ˜ ÷r°eŐ×kÍÇ׏Šń 1 Ľ%fő˛Ń ’/kÇŞ/Ť+” ö<{ÎŐ×"\ŔtÔhhŞŃŞ`ƒžŞXV}YźŢ=J—]hY#ëFĹx™†.Ť7?ҐY˝ŠeMՏŰhełęŰŐZ6á2ŚłĄ†ĚŤÖŐŔőę Y#SÄČŞ›Ő[ÖČ|ŁëFlŹĂLŁ.ŤÚj4`Vk*V+kŠşÝ@•ĚęĎŞ×Őz>ƒ0`:IŔ,ŸŻ0( V]ŹŤĆőÁÂfő. —5eČŹ-ĆÎpĂeŁY­Ź¸,‘Ăd-5nÓhŤĚę Zőújf0¸ĄĚj-/Ž+Um_/`–o—‡ÉZŁvX­;*CkőžCŠp9ŘúîĎłýŽz?ó@ëFdŹÂLă.k¤jY18ÖƒW5+^śŚzá´¨ş]4¸ź!3ŚŁĄ„¤ş\ž‡Äş ë; SWŐíŞVÖŐŔv1˘š]Ż5ßčşa‹ ÓpĂeĹů‘„ĘňëŐ!˛–ËkÍň@ٌX*,řVŻefľáüž…Í˜Ę†Šč6ľZbFÔrĺAł5ą6pV+XV}˝ŤÎ6=îpÂfĚ7şnȚ)`6ÜpŮ`UËŞ+ŽľDý°Y{ôËňĺąß~ű­óÁ~pÇíśŰîQóçĎߌ˝}ćĽRlZ*ľ,(Żž`ĐĚRŕjeww×CÝÝq÷ęŐŤţłxńâ›˙ýď_ '\wŢyç-)l—Bb)hś:ę‡ĘŞŰdvĹŕŐĚFł˘Y­ůF× Ůh‡Ł&2\VŤue­v˜y…˛âú™ĺŠ-ßöýď˙FŻ{Ý랶馛?ľľľĺ LI]—ß}÷˙ţôŐŻ~őüO<ńŢXë(OŤ˘2@VŤÂYuŔŹş…fÄ$™fŔl´Âeůőá†ËŠUËZŁv‹Ě|yŞX63ßćüăžOxÂ^/looFÓĘęŐŤwůĺ—ýt˙ý÷ż"ÖÁRČluô˜Ce˝wŃU˜"†2Ť(›ĐŮDĚťŢh+̤Ëçkľżl­ZžŞ•Íę]ž˞ô¤˝_ĽZŞš]rÉEß*ÍR€leôT5+Ě:Ł~͈ţí4‡Ó:łŃëŐF%`ÖŁc,[cV_,\V ™ľćóëŠbٜ4˙Ţ÷žw“_˙ú×ÇnłÍśÇ´´”Ŕ´—˛DxÄ#:öŘc7ďîîžî˘‹.ZQ^<Łwu nUgšşŁ2ŰTkťî^–j CÉm ËhU0+5¸|¤á˛¤X™ŹV¸ŹýĂfů”Ş–Ľś˜Ľż˙ýďĎÜa‡GWž>;j[qĂ ×üą}ěoŁ'$–ÚeŚjf]uŚî¨ß*łŃjf]V_Ż5?Řň†FŔl8ŐËęÍę…Ěj…ËŠ!łÁÂeŠzY —ĽaËý÷?đöyóć Xşté÷×_˝ĎEO@lMô„Ě:ŁąYwŐT2Ť&(XÖhŔl°uƒj‰ąSdž¸l°ŔYq~ pY­€Y —Ľ*e3öŰoży˗Ż8Y¸ Š”9JŮŁ”AŠžBW)“”˛IŐyĽ˛MŐˇ"j抸Uf#ŮŹQŃ#3ŐËiŮHŐ˛tYýÖWšě5ŻyÍúgžyÖ)­­­{Ŕľ´´luŘa‡ďúż˙ýď˘kŽšfUôd”şŞ6K9ŚîŞůÜ@ŐÄ — 'H6˘đŮH“kĽ—ôĂ,KŞ“}U++ÍR¸ŹýŠO}ęüßţöÜϖ˙w €čęęşö™Ď<đúӟ—gWGOťĚ4K-3ťŁvëĚb{ĚFZeÖj›YźŹž^k~°ĺƒIŔl,Ť—UϡDeŘl )—ľGOŔŹuůňŸnkkŰ7FAGGÇsćĚ>6zÂd)`–‚fyČŹk)Š›EÔšEŐ˛ˆÚałZ󍮫Ť%Ć^#=@k-ŤŐo´VŸŇˆţÍÚ˘'\Ö˛hŃýo.FSĘ$ĽlRŹí´ŘýóMľ;6ćje¤"†Ÿšum1úm›Yky˝_Vułę€â”–§ęe-×^{íłćĎ_簘D:;;cőęŐȩ́lęęęŠîîaWކiŤT*EKKKäÉŚöööhmm €Ń’˛I×^{íőťě˛Ëo˘'ł”Ş—Ľ SąÂXŞR–睺cmŞXÉ,WŞZVŠÚ•džş|؆;ŞÚh{ĚZ×ëľĹ,^Ż7ĺ˛ÖŞë­…őéjć{Ţóž=ôĽŸ/_Ÿ“Ŕʕ+céŇĽą|ůňXłfM4,ƒ‘IűPڗŇ>•öąŢLRŕ `4l´ŃĆ{•ÇĎšřâ‹S›Ěźf$‹×óËÁ ”˝Şˇ]Ł÷×°á–H­€Ů`!łZĺáŠ×ӔĚň֘sÓő‡zčĂłgĎ9(š\ ź,[ś, Áă#U2›;wnVŐ `¤VŹX~΂ >=á˛e劣÷zgďÔ•áłâőîŞëľBhŐ׋—]Ż6ä3Ű[bt5Ús Ú`)ťbđŹ:t–Ş•ľœ{îš{ —“AŞXśxńbá2giŸKű^ÚF*e•Rf) ڍoŞ—›*.ŹŔ×@ˇhů°ŒvłáśÇl¤zYu岟zY~™W/k]ąbŐç[[[žMŞŤŤ+ ˇttt0ąRťĚůóçGKËhŸ‡L']—Ďž=ó­ŃSą,Żb–W/ŤŽbVŹdÖHłzŐˆZĹl\*˜V­ŃD]q}­Z6ËŤ—í!\4ł.{衇„Ë I¤}1í“iߎ”YJŮĽ¨ŹbV]˝Źş W=CÍV5jČ÷3š§ćŽ´=f>_j`›Zۧ”Ň“Ÿź÷ó ‰i‰ Í'o™ 0˝ŮĽž,S ? 5Đ61Ŕü`ˇl<{?”†ąźX­Ź:ŃׯUćąÇťQ{{ű3 I-]şTĺ2hRißLű(ŔpĽěRĘ0E!ÓgŸŤh6ć˛ÁŒUŔl¤%܆ú h+O-GuÔžФVŻ^+WŽ  yĽ}4íŤĂ՛aJšŹśĄÝręŞ1  5`6–ɡÁĘťçŤű‘f˙›oţp3 i-[ś,€ćg_F˘aJ™ŚęœSDcŠąÎi5l¨)š‘¨hqy­ŠĽę˛¸źuß}÷×ÚÚň„hBŠ*RgggÍ/íŤiŸ5kV㣍Ť+ÖŹY“MiŒ.MÝÝÝٔ”JĽljmmÍŚ3fdSKËX5pž”aJYŚ .¸`Iôd›ş˘2ëÔŐ{ŮýCgĽŢĺՊËëm3&F+`6XŻĎ‘$ęęU6+ţŇăýď˙ŽФ´Ć„ÉEŔ Ć^ •­Zľ*›:::Ü6›ĺA´|Ü˝­­-fΜ™MÍ6KYŚ .¸ŕŠč_LŤ(_6ܰX~ŰFBiĂ6ŢĚŞF)ˇÖt?;í´ÓvЄŇYVƒ}1šKÚgÓž›Î„FW ‰-_ž|TNÎNcyiZślYvŇčœ9sš"h֛eş2z˛MkbdĆľbYľ‰˜ Ö3t°ĐY­™ąÎ:ëlMhőęŐL>iߝ={vŁ'ËŇ4R`-M)d–ډTČ2ŐĘ:u pÓęV˜•á˛q›EŔl¸UÉJ NŐŰf˙3fĚÜ"šęe09Ůw`ô¤ńśĽK—ŽË¸[ °ĽHç͛—ľĐœ˝YŚžlSÔĎ>ŐjŸY+XÖ¨Q MT=¸á„ĐJ,/ľś–6 €&$¤““}FÇŞUŤâÁ×1ˇôXé1ÓcO„Ţ,SupŹh4óScj<fcőf÷[*ľ,€&ÔŐŐŔäc߀‘[ąbE,Y˛$&JzěôĆ[!Ë4Ś™Šń0”€ŮPŸTiŒ×Wo7+šPw÷¨V˘Ɖ}F&ť–-[-=‡ ™ĺYŚĄf Ćjý°ˇ&ŁŁý䝯Z=I‹—ŒĄô%üŠ+ފkŻýkÜ|óÍqĎ= űćΝ›nşIlłÍ#cçwŽ=÷Ü=fϞŔÄřĎţ\pa\~ůąpá˘ň´0[žńĆ—§ ă OŘ3öÝwŸŘb‹-FSjMŮ á˛\z.---1sćĚ'ľ˛MĹi´ÎpěžFüXC e5Ú´ÔŔe­X>ľÔ¸lë˝LSkaJóë¤ëŤWŻš4šĐ˘E‹b*xŕâĚ3ż˙ýcĺʕ ÝfÖŹYąß~O—źä,x“͆n“Ń-ˇÜ_üâ—⢋.ihű=öx|źĺ-oŽvŘ>`¤:::âÁŒf´îşëF[ŰhÔä\{űŒ'–/:ËSęÚŐ{=Ÿşz§ŽŢËî—ůUóĹe]FůÁ–Wď€Y#!łb°Ź*0&ĽÉ0[łfMüđ‡gÇO~ňÓa—Ÿ1cFźčE/ˆ#Ž8,ť“…€ŮŕŇkÜĺ—_×]w}źđ…ĎĎ*§łł3N=ő qöŮ?rŤßt÷!‡Gýćhmm Ž.K!łf”Âe)d6 ˜Ż× ˜EÔ—KŔl|âxƒ+U]/…–—nńâĹq 'Ćß˙ţ‰<¤öˇżý#>üáăĆíË;0śn¸áĆxÍk^—Z’űî[ŸřÄÇŁÝu×]qă˙ŽvŘAEEŚŹ%K–Äűß˙¸ňĘżÄptuu•߯ˇÜrsœxâÇbuÖ Şĺ˗7m¸,IĎ-=Ç9sćD“Š•—ÍVšĂÖ,łd¸Ą2A4€1pŰmˇÇ‡>ô‘X¸đŢ~ë6ŢxŁxâŸ{îůřŘd“McĂ 7Ȗ/Zt_ÜsĎÝqůĺWĹĽ—^÷Ţ[Y˝íşëŽ‹ˇ˝í˜8ţřÄ#ąeăuŻ;Ş_pôq{l|ĺ+_ŠĄHՑňpYň—ż\TR¤fňÇ?žţđGłÁĂöööřřǏ§÷šST2¨˛×^ă;ŚpŮeĹd’ƆRxŤŮĽç8kÖŹńÇIjÂĂeÉhˇČŹu˝‘™ĹŠĽĆĺ@-2ç§K-2€f5[dŢ}÷=ńŽwź3xŕÁŠĺm´aźüĺ‡gŠűâţđ‡?Ćwžó˝,xV´É&Çi§}6,X#ątéŇ8řŕ—Ćp¤Çß~űí˘˝ä%/‹Ĺ‹—ôÍżóoxz0ţŚj‹ĚzĄC°LűůłŸýÜxđÁ‡ú–}ó›_‹w|TŒ–T‘逞Uąěä“?{ďýäFď"^ůĘ#ă†n蛯Ó˝ď}ÇĹůç_Đ7˙œç<+>řÁă&“SN95~ôŁł+–=⏈÷ż˙=Y°l ýëßâă?)î¸ăŽŠĺ‡ú’ň灣cŹý÷ż˙-f8ŻütyVm0}ţ˜9ł=Ö[oýxÔŁś}÷ݡ<=%kaBĽęׯĂ{YÖâ;fKcś+WŽŒÉ Ěć͛cЎEfjwš8o‘Ůľ[d֚"n‘9Đőh`y…ć:€ —ÚYüÇű…ËöŢűIńŐŻžĎxĆ Ő•śIŰŚŰ<éI{UŹťçž…q ŸČ ˜ô‘řż˙;;fΜa˛ľŹO# k=ó™e—m´aźůÍo,ó>aŔíSěĎ}îóq÷Ýwgóżýí91é97Ó8VłŻ€Ůh&çJUŁäĚ3Crn¸AVůg(á˛TaäÇ?ţżřӟ.ŒŽŽŽlŮUW]•4>öŘwfÁ•E‹î˖ŻYł:~ôŁÇ[ßúć-ĎzÖ3ű^žôo˜ţíi‹ĘÔQŤRY=›mśYŕúß˙ţ—Í§ÖˇŠÝ`ƒ€ÓUŞŐÝÝ­­­1^R(§˝˝=˜š.¸ŕŠů'ó™OĹÖ[oŐˇ,˝ž|ď{gƗżüŐže÷Ýwů Ášńüç?/&ىx éűN><÷Ţť(Ž?ţăŮXňӞśoÍmŇxóG?zb6žăŸc•wJ÷Őcl˛U0+5¸ €!Zšreüţ÷ŹXöŠWŃđŮ[˙ü翲6Wé€t:pZtŔOĎ.Ó}qÄáńšĎÖˇîö11RéŕűŸ˙|qœwŢůqç˙˟Ϟ=+;ÓoçwŽg>óąĹŻyŰęçźëŽ;Ç'>ńń¸ä’Kă쳡ÜrkösőŤgTÜGpI•čÎ?˙ü¸á†˿ÇbÌąńĆeĄ†ôűŰjŤ­‚é#ľÉüŮĎ~Ţ7ŸŞ)5SŔě}ď;Žü÷zAßüsžóŹŹuď`Žťîúřć7ż•ćVŽ\•U[LÖC=8ţđţűUÚg;ěĺ}ói`ň’K.ĚŞ0}ůË_ÉÂz=´8ŢóžwU´ N°ßýî÷YˆçúëoČöŠěÝ`ƒ b§vŒý÷ß/öÝwŸšaßęŸí ox]źň•/3Ď<Ťź˙* ţ͟żNüú׿Œ_ýę×q 'VÜţűß˙NlłÍ#kýřĺŸýŰÁžÔbô׿ţE̙3'h—_~EĹüӟžŒTú›+ĚŽ¸âĘQ ˜Ýy睱t鞊eŻ{ݑá˛$˝ˇźúŐŻ,8řKEkĚ믿ąü>Zűž˙őŻë˛ Ş×\smů={aö™$íK}ěNĺ÷ÄăIOzb ćÖ[o‹Ÿ˙ü—ŮcŚęŤË–-šsçd­GÓëÝóžwPÍęŤĂ} (>ćŐW_S>˜˛0ű\˛`ÁüŘ~űíĘTžš=÷ĄEoźńßŮëW:Ł?ýŽ7ÜpĂŹEđᇿŹüýˆmiœr$ŇřE?MŇřăÉ'ŸRţ^Ř{ďýäŠí.ťěňřřÇ?Y.›7onŒDzîc\){Ň睴Č sůĺWVT/KĽÁR§ $]tIüřÇ?‰˙űŚšŰ¤ƒĂ)L•{Ć3žßűŢ÷űޘĽ`[:€[=P0^Ö]wÝňÁëWĹi§}ĄoŮoűťěŕq1$uÖY?Ź—-X° ^űÚWxߡŢzk{ě{+˘ßsĎÂlşč˘‹ăĹ/~Qy䫆}v\úěcŸČBlEŤWŻ*Ŕ~(; ý“Ÿü_|đ‹˛ôTKI!—SN9ľîúČ;ńÄOöŤj•Îôťýö;˛é—żüU<÷šĹë_d´ľz˜Şf)Œ2ŮĽ}ô=ďyö:—ťăŽ;˛éżře|ŕď<ȓöÓ7źáMą|ůňšëSć¸ă>wÝuwżu)–ŚţÝi§â¤“>V~mŢ(󱏝żţőoű-ßoż§Ĺg>óšŠçrţůŞ0ŤďˇßS…ËšĐÝw/ʘIő˛Ü.ťěR1×]÷ÄhęěěꡏŤŤłîöÇ˙á,˜•Ťőw˜Ţ‡N;íô,ě^펝îĘŚÔś{ˇÝvNřH:Ťu§žú…ěsMuX>äHŐÓôÝď~?Ž>úÍĺ÷×Ç`{ HůůĎ1~řĂő[—Bă—^zy6}ë[ß-@9>vÜńQ1˜R{ŰێŠ8¸“~ţ_ţňœň~ý‡ě÷šĎ>O €Ń4ҀYŁ=őÔĎ÷ͧ1™O|âSńž÷˝ťoě8›–U?ÖË^ö҉q˜Mzú[ůë_˙Z1˙Ä'î5`đéşëŽ‹#|Ců ý'ë†Ë’TuŁx7Ýgşď˘T]c"=ëY–ŘîŘ7ŸÎ+Víšűî{â'?ůYĹm^˙ú×ĆüůóëŢç˛eË⤓>ÝŻBKQ Ő:ވTYé˜cŢÝ/\VKjYšţłxńŇřú׿Uwý’%K˛փľLLĺS糟=5˜vß}ˇŠ×‹›nş)îťďž˜ŹŇs˙řÇ?Q.+J•ý>ôĄd•ÍsÚiŸŻ,šíśŰă-oy[ÍpYľţóŸńÎwžgĐÁÚkŻ˝śf¸,I•"ÓkrŃyçý)ę=ˇ[nšĽbY ŽŇ|Ş÷ľTŠj¤RČźhѢE1š6ŰlÓ~Ő¸Ňűną=oQúńČGnÝ7mşi˙ęaК_#ďŠ)|ő–ˇź={ŸŽ–ޡĎ>űÇýÂeŐRŐÁ“OţlV…u0˝$ď˙j†ËŞĽ°é›ß|tVél =ô`ź÷˝ďŻűZ‘‚ýýč Yu7€ŃToĽQiŒö oxmE÷tŸéd×T˝=čœŽWß9âˆĂâĹ/~aŒÄHŸűt0UN#Ö&`„ŞXîšçîuˇM_¸O:éäAĂMi0 Ö—ű=öŘ=Ťr•ťůć[c´¤Š;Š]ç@ŇăŰSŚçyôŃoĘ8çƒ ×\ó×ě@wÚ.U\+–\ßmˇ]b˙ýŸ6ŕc俛Ç?~×xÎsžóćÍ˂YŠőd §äž˙ýĆSŸúԚËëI•ćŇAđâsJ•ÂRu¸”KA°ßüćˇńŸ˙üˇo}€IĄ“Ôž˛ž›ož9ť\gyY{ĂTÝ-UlI-7“T&U_Ë͙3;=ôxĚc“lżôŇ˲×üŔ|:đžÂ„UŽń“–;ě°CđŔÁԗĽEW\qELVЊß[ßúڊei_>昡g—˘ .řó€÷ő†7źŽ_°$Ia­řLA“N:1ž˙ýo× äΚ5łbţÁޟŇkXڏëľ8N›¨E)´Z”öŰœÉĽű¨ú!kÓM7ޘśÓ×\sMĹü–[nŁ-˝Wœ~úiqÔQŻůó׊šMj{’* ~ň“'Ç ^pp|÷ťßŤxOîyŽ×fŐĎriH!Ëj;íôčňëÔă+î;Żř—l˝őVYŘű}ď{wœqĆéá˛\­jj<đ` ¤Ţk@őóNŇëNőc<íiűfݞüä'fĄąNř耟Ńţđ‡W„Ë’Ž;č çT,ť÷^-2€Ń5š!­2K'Ő;Ům4ĂeÉĚ&…ŠŇ"€q’ˆć­˛ĂŰ÷ŤÖěŇAÝ7˝é¨řČGNč[VŹśŐV[ŐlůYKj/Y+,’¤ś_)źVë1‘Z{U{ré÷Ÿŕ§v\ko{[ÖrŹ–ÔŽk‹-ŢĐcţéOÔx)>^’*­Źˇ^ýƒáL ЊWńď-'RHi¤•”&ÂnťísćĚéˇ|ýő×ĎöŤTE,w×]˙đžvŮe—hDj_wűíwdűč…÷”ď÷žř×żŽŤ¨ —T‡kŞĽç×ÚÚ:ŕ6Šĺ_Ş4˜ďĂŠJÚ]wÝŐל﨏^ö„'ě‘U'¤9ĽV¨Š c.ýű=ďyύ‘řăĎŤ˜OŐżĆBjç˝ěe‡f­œŻ¸âĘl˙*śĄĚĽ*m§Ÿ~FV™óřă?ŇwáŚ›nŞŘ.˝ö¤jƒľeIú<“Ú`֒*ÁĽĘ_wŢygĐNĎ)=żjƒ„¨÷PýźçΝSˇâÉ'*ľăŽ;Ô\žÍ6[WĚŤŢ4ŁT-:}÷Ťţޕ–Of|L†€™Úűă Ř|đÁŐ}ó÷ß˙@ÖJ˛ZązYręŠ_ČÚ\ĽĐĂi§}ĄoůÁż(ęšďžűŤ{vŒ–~ôCŮÁöáJ­¨ęyŰŰޜ oD ˘Ô“*ž-Y˛4:::şďUŤVĹŇĽË*–ŐPIU‡6Úhø㎵ęS+ŻzŞ+%UˇKK.¸ŕÂhÄâĹK‚Š/UöÚyçÇfՆr)Œ1f›nşYÝuŠ˝d1`VýzVm ý*ůÇ?ţ™ľŻýӟ.Ě**T­ KŐRĆt˝ęŞľĄ¤Tń°Ă^–]/śM:č  yĽö‘_ř—ú毸⪏ŠYŞn9)H^ ŹĽű§>ußKŠęćţű?-›’űďż?kš}á…föŇ{d.ľoMďŐŠ}drď˝ýߟŞ[źÖóŕƒU̧ĐŐ/~ńËřÉO~V3ä6ő^ŞŸ÷ĆoRˇňŕP´ˇˇi9ŔhŠŽ /üsVͺ։vé1>űŮÓĘă(ýŞ´W˝Jiă¨éłQ*˜Iƒ\ŰćéîťďîWÍ*Uą*+’+Żź*^ţňĘVŒ›ožYÖBąžT)§h 0Çx¨˘Ç-ˇÜ;î¸c4˘ŤŤłîşÎΎ˜(Qî}őęUÁôŞéUĚ>řĹ1Ů T%ŹÖYłĂőƒü0 éÖÚ/S˛mśŮ&{.ՕŽFC çf^xQ0KŐĄRŦ܂ócŸ}öš×[l{îš{,˝xâ'ăë_˙r͖ÇYźxqvۢÝwß-śÚę1žRH;UKS z}ô;Ɵîî[˙łŸý˘/`6’÷ľ5kÖëS;ç׿ţMuƒeŠ-ejłůç?_ŁAű˜ź.ťě˘ żŃ ˜wޟâä“OŠŸÉOČɗĽÇ9ýô/ŌmńŒg#ŐłŚ7Ö3˙“ÄÖ[o×]w}ß| ŽUˇ^LŐË$ŘtÓMă=ď9vŔ*龋ŞŰ6M¤o~óŰu×}ăߌ'>ń V'ËĽvZiŔŁÖďá˙Ť Ř­łÎź†+ŁĽ*/ŠÚܲeË+Ť–ôř÷Ţť¨bY*-?éŔzŃŤ^őňxéK (ÚsĎT=đ‹}óW]uuĂŐůšÉÝwßUwÝ˙ţWŮłzßhT qvÚ鯊)$ôŹg=+ó˜Ggí*Óďíä“?;&ł§=mßň}ŚďľäŸ˙üWŹ\š2.žř’Ší<đŔŹ:Íí-oysůuůČžöԞö=ďy|ň“'62Ká˛t›bŔ*˝‡˝ńGĹhK-ZoźńĆžů}÷ݡîYç)@—ÚSŤ´Ű6o´QĺűZڏN;ís1T_řÂ+~öôŢ|Č!—ďo,`—Z_§ ţ3Ÿ9:ýŞŸwj—]ďsŔdN–褽F¤ ďŸůĚg+î'…żŢüć7fa˛Ď}îó}ëŇĺhU2KĎ} H­1;›iŹž­ –L2Ő­´.šäҊ/ň÷Ţ{o\pÁŸëŢ~ťíś÷˝ď=YŔvŘžîvqŮe—W=ö.Ń Žżţ†řŐŻ~Ó7żÁë—jŻmő™‚_üâ Ý׊+âškŽéˇ<…I.˝ô˛Še)”7|ä#+ćS•¨Zţú׿eĎŁňśĂ ó=â•ŐkŠaDČmťí6Ů~“K'ăßJj͡téŇ~ËS‹ŮÔҲča{x G r_cűŘÇÄŠ§~6žőŹł@MĘ[śliŒ…ÔJsżýöë›Oí9˙ţ÷dŻýEĎ}îs‚ćˇýöŰĹK^rHŲTqô5Ży}Öňr0i›#|Cżm÷ŢűIńčG7Všs(Rř9UÍ˧3ĎüÁ€!îźł2ôYlťő֕ďk齟ŘRłQţse‚NřhźţőŻÍ>ĽpY2P•ÓĄÚnťí*ćÓ}×űˇzýëßGńŞřČGŽď~÷{q÷Ý÷@łiH+=ęS'găÇštÎ;Ţqt K•ĘŢţöˇVœ˜“W2KÁ´‘˜"łÜ˜dśœ@&Uč˜={vßü˘E÷Ĺď~÷‡žůŸţô5Ř>úя.đü`|ţóŸ‹}÷}Ę _ĆĎ=÷÷Ů}çŇc>ţńťĆDKŠU]ń÷K^rpźôĽ‡Äźysű–]tŃ%ýrő|őŤßˆe˖U,űŮĎ~ˇß~GŲT­RĺŔęŐk*ćŸö´§VĚ˙ío/?ŻĘ–]ŤV­Šo|ă[Ë6Ůd㏽×pT?ć•Wţ%{ÜjwŢůżňďí°xŰێÉÎ(üĹ/ΊbjKg”>ţńťU,Ť€lf)č‘΀-VKŻ é ÚÄ*zĘSžĂąxń’ŠůM7ݤ_;†‡z¨_EąŃTKšŠ’Yn‡vČÂĂLo}뛲ę]EŠ"×ßř–ňşˇeď?ˇŢz[öž”Śt=-KëŇ6ľZCŚ÷ź_˙úˇ1Ú÷¸ÇVĚß|óÍYxŞŘŞ;IűÝ/yN6m˝őV}×SľŐb%Á´o}ç;ßë÷˜ŤWŻÎZzżěe/}č#Ů6 .ě{œĽK+߯SťďjĹúHíşë.ąńĆU,űüçżŘ/~Áf’áoűťň“3˛jƒÍf¤Đżň•Żök‹™eĹ˜ľBfé6_ýę×b$ToÜäęOŔ˜IŐ@8`˙,”űŢ÷žŸ…ĆRěźóÎď[žžp?őŠűf-ŤRۨFĽƒŚß˙ţ™Ëöß˙iÁś‘J˙ň—ŤÝîE/začČýß˙ýŹ˘ĺV:Xýěg?+űY>řEń­o}ˇo]jŁľóΏôyßvŰíqÔQo.˙Œűe-Ęţţ÷żÇe—]QąÍŒíąß~OŤX–î7ľ*+ţLiYú]§ dŠľÝxvÖN+wŇIŸŽ§?ýęxôŁ=´8Î=÷wńß˙ŢYqż‡ú’~–FĽÇNńóöŚiŕć¸ă>\ţ=>?Ťî’unźńßYŐôÜÓtĂ 7ĆN;íĎ{Ţč´crHaŐb85ýÍyäŤc4ýô§?ëˇ/UŰkŻ=cgţJ~őŤ_gœô˜‚fç÷§Š–~IŞě—* G |ĽpW Ńěťď>ŮëqŞ@˜BšŐA´Ń”B>ŠZZ,úńRąţšĎ}v0y¤€÷‰'~ŹüÚüÁ¸üňĘ`g §i¨ŇkýÇ>vbvýŮĎ~fŒ–< ;pPlńœ^7Î?˙‚xÔŁvˆ 7Ü QĽ÷•űîťżßí>řĹ}×ÓűĎa‡˝´˘…ćWžňľ¸ýöŰł÷ß dăgőŁ,Ȗ¤÷űž{á Ÿßwé1.źˇď>>ůɓă]ď:&śÜr‹X´hQüüçż,řNŒ–ô˜ŻxĹYÜÜő×__^öšxţóʞ÷?˙y]żpÝnťí:¤Ď^ăe¤!­â÷żź-f1\–Ë—ŰeÖúî8fƒkö€™V›ă( ýýď˙ŘW=#UKeÉ?řÁăb÷ÝwËZ7Ľ0Ô ^đźŘ`ƒ †r×ٗýO~ňÓ_öS¸ęCŽŃÔhľ¤âČf)¨ő˝ďUß^ůʗ÷ ,źđ…/ČB^ŠĽW’~/ßüćwâMozCÝűOľőÖ[?;˜ýƒü¨îvGń˛Řd“M*–ĽŁĹđŘ-ˇÜ’ý;pŔÓăď|{6{ď{wżűýąfÍęl›T]=7›jImÎFHýć7Ý÷o˜;ÝŇTKzžGýć`zIł˘Ôv1UKš;wnŒ–‹/žtĐmRĺÁáĚR8íškţ˙ú׿˛Š–9î¸÷Vœ1;OyĘŢ1sćĚŹÚ`’Ş+}üă'eSQ16R‹‰3ÎřJżĺííí5qinóć͋SN99Ť„őŁ=`ŰÉZŇßs UŚś•yőÉą™Ľ°űŘńYľËbŰÉźUë@RŮ}öyJŲĂ?, łƒuŠbjšę9öŘwfáďÜ3žńŒ,XŸKaő—˝ěˆŠŰ¤÷ö´ĎŚ–ŮŁ!ĺ.żüŠřóŸ×V!Mű{1,W4wîœxßűŢÍ(}§Lß÷juÁŠ 6X?^÷ş×ĆSŸşOÝmҘE{űĚŹrŮHĂeé9w|g”ĽŒTw4)ĚčłîşëfUɊaŤK/˝^3 “^Rkŕę6C‘ö§Ţýđ‡?Zˇě>űěiŇ~>VR`(U{Şţ9SČhţüůÁä“*™Ľv!)§vzČĂö°ňśËB§ŔÄÚkŻ˝c<]vŮE1Y¤ďNĂ ˜ýöˇç iű@(„Ö¨ôœœ€=ô¸úęk+DŠÝ=÷ܝj;ËT -U.Ť>Ŕý˜Ç<&^ö˛Cc˘ĽśtW]ľśmX^~˝úŕu yœsÎŻăoű{6Ÿś§2ě_řÂ粃ůľląĹĂłőgžůƒŹ˛Zj]™ŞŸlżýöY¸vztÍŰĽ6˜§žú™řÁΎüăńŔfՄRŰź4@“ÎŞKśŰnŰřęWż”U>9˙ü?e-1Ó{łgϊ6Ú(kăůĚg>#kď5Z6ÜpĂ8ůä“Ę#WÇţp~V]-ľ[łŚ3,X'śÝv›ň Ű^YřNiůé+U1ËfIjÍ7™fI Ÿ<üá‹o}ëŰYŕdĺĘUąéŚ›Ćž°gůľë%ąůć›ÇH=ýéűĹ6Ű<2ž˙ýł˛jI÷Ýw_ś§×€zţóŸżůÍoc,Ľ@` UˇT|îsľśěŇ{Äç>wJÜyçqá…Îއîž{aÜ{ďÂň{XwւqŤ­śŒ]vŮ%k{] §–ŮÉX‡ĚR;Ěo|ă+ĺĎ—g• SkŘűďż/k ›ŢCňç˜öťTA5ý˝Ö“Ţ'S°;ĺÓűőŐW_S~ş7–,Yó篓_Óý¤ś˜)ŕY-}ž9ăŒÓłĎ<)`—Úh._ž"{ßŢc=╯<"ťŃ–öůcŽy[öš ľ)OŻéßhéŇeŮóŢ~űí˛ŸÔś;ýŒÍ,…ľR%űÉDŔŹ1ś ,5¸ŽÔŔeŠÎ|>ľ.óŠľwYkՔ֥S)[VŻ^sI4Ąž™l/^G}Lů@ôÝË7Üpƒ8찗ŁP7T•K˘Ď;ďOńÍo~Ť_™ňTľ,UÂŞu€w˛J…żřĹ3úćÓĎřío#˜ÜR n*ŞwŚm~FlőúÁ–WKa–wżű}}ó[o˝uœuÖwƒć”*¤ĽŞŒšÔ>ř˙ţďěfiÁŞŽd–¤ż‹ÔŢrżýžӑ f[ştiŹ\š2&ƒtBďźyób,ľˇĎxRů"•Ž_Ü{ŮY5u÷^vŚîÂeőu溏ž^mĐ֜*˜ĐOj‹öя~(>řÁÇ…÷ö-_´čž8í´/ÄYgý žřÄ˝bĎ=wM6Ů4 žĺëSĽł+ޏ*.šäŇlžZ ^üGŚT¸ ¨´űîĎŞňä-R% … X}ˆ‰‘ÂŔyeĆÜA=G¸ŒL˝JfŸűÜŠfÔ4gΜI0KϕĆ˜PSj•ő…/œšUśŠÜ{bWš†bÇwŒř8á2˜âŇŕ܎;>*k-™ťĺ–[̚Dj˜ZŽťî‚ŹÚ\ąijÁ—ZBŽVČlćĚY0]MśŠbă-´–Ɔ–/_Í,=G'Ř5NŔ €şR%łüřřţ÷ϊŸüä§ąf͚Ž3Úăŕƒ_‡öŇňőLŹÇ=îąý‚Ł;ďü¸šëY^ËóžwPÜtÓÍąÓNŽ'?ů‰YU3šĂOúłŹőa-ŻxĹąÁĽŮŹY3ă”SNÍŢÇ?řÁ÷ԓÂ[ŤWŻîŤnßlRĺ}ŐˆŚ4 ەj\č˛Tg>ŸZ —ůÔÚťŹľjJëć§ËŐŤ×\MhѢE1Ü}÷=ńŁç÷§†KœĎž=;žö´}ăĐC‰M6Ů$ڞTÍí‹_<Ło>ľýöˇżLnn¸aŔT’*P=ó™Ď‰%K–ö[÷Ěg>#>ôĄ8{ą.{đÁŁĽ)d6ÚŰg<Š|ŃUž÷^vVMÝ˝—]…ŠťpY=Eů.ŤŻWh]F3˛éŚ›ÄŃGż%^÷ş#ăĘ+ŻĘÚŤÝ|ó-YđlٲeŮ6sçÎÍśŰf›GĆ.ťě{ěą{̚Ľ@łX¸đŢŘrËGÄ˙űŸXştYŹłÎźŹéóž÷ź, 0R€ku։%K–D3IĎiźÂeS‰ fclŞT0ƒéH3ž+Vô <ŃŇ ŇŠëĆxš*ĚÔťcĽRŁçöÍÄž #“])Ř5Ń&"\6•˜Œą–_˝`2˛ďŔČĽ`WjM9QŇc —ŒŚ˘cŹ­­-:;;˜\Ňž ŒÜ̙3Łľľ5–.]1ŇřŢźyóŒó§âŒ1_^ar˛ďŔčIăm뎝n̙3'ĆZzŒôXĆřF‡ß"Ŕkooe˖0š¤}])ü5kÖŹXž|yŹ\š2FSşßt˙--jn&3€1–Ę~§ł¤ĆŤě70riŸMű.0úR,ľŻLa°UŤVeÓpÇĐÓX^jÁ™&Á˛ą!`0ŇYSK—. `rHű,0śR löěŮŮÔŐŐkÖŹÉŚÎÎÎlęîîÎŚ¤T*eS:14M3fĚČ&Ą˛ą'`0RXeŊŮb šĽÁ)3_)(–W"ŁšˆđŒ“šsçĐüěŤk ˜Œ“öövU‘ ÉĽ}4íŤô0Góć͋śśśšOÚ7Ó> ŔZfălţüůŃÚÚ@óHűdÚ7¨$`0ÎZZZbÁ‚*™A“HűbÚ'Óž @%#§ YÖ]wݘ5kV'íƒi_.¨ÍéňhŢźyŃŢŢ˖-‹ÎÎÎĆGj‰9wîÜl˙ >3€ –.iZšre6utt06R;ĚTľLő@€Ć˜4‰<ô’*™­^˝: šĽŠŤŤ+şťťšRŠ”ľžLĄ˛4Ľ gŞ\@ă̚L Ŕ̞=;&ZK@ fÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@MfÔ$`@Mm@]ĽRŠbžťť;Ś 3€ރeŐ˧CĐLŔ `>řP,]ş$ť>oŢ:ąîş bş0¨’W)Ká˛Ĺ‹ę[ž_O!ł´ÍTŻbÖԔW.lŮTĽ‚@]]] -›ŞT0 &3j0 &3j0 &3j0 &3j0 &3j0 Śś€!čîî&ŻRŠĐ(3*LmƒĺCĐ(0›ćĘ(ŞÎ“œMofÓĐPCeBhSS#áąbvDŘlú0›FęĹ  ™L-),6Ôv™ůö‚fӇ€Ů4Pë…` ‡ŽŽŽ`jŤ•iiiŠťM1T&h6}˜MaËŇ|­eŢß@˘Xő`ő–W&JŰĺŰÖ • šM}fSÔ@á˛ü… Íwvvfóézqyq;ŚśźrYKóézşlmm­Xž˛%ľZg ™MMfSĚ`Á˛4ĽPYGGGßňâeńöőŽ7ú¸LœÁ_ľ*‘ĺËóÂDů6鲭­- ›ĽYu ­x‚fS‹€ŮRŻŐeÚáS ,ËҔ/oi™-m3Ëó­Ńѕ^JŃٕBf˝wPÜ×í÷S^ʆľś¤ĘeÝŃÖ’Ş’uFWÇŞčęZŤWŻÎÂc)d–Ś8Ť42›:ĚŚ€zUËňjekÖŹÉ.3Ľ–hk_'Vw´Äގň|GĹ­€é+ĹP::Ë˙׹:ŤHԖM3Ęím]ŃąfIVč(Ÿf̘ŃWŐL5łŠIŔl’ŤUľ,ËŇe –Ľ)͡śśGKŰÜXžŞŤ:śŚ#MŠZق˜3ł;ş:–Ĺš5Ťł˘G)d–Ś&Ť42›ÜĚ&ŠZÁ˛|J˛UŤVe)Ń4ß>kÝXžŞ5K–ŔH¤GóbÎĚÎX˝ňÁž.{3gÎĚÖ§@Y>%Ş™Mnf“P1\–_ĎŤ–Ľ5…ËŇeűĚ9ąŚkvy§UŠŕьȖązŐň,ż’BfŠef^Í,)̈́Ě&łIŚ:\VœR;Ě.ëŠZ6żźĎ+Yë̘sfľĹꕋcŊYČ,ľĚLłťf¸Źž8KAł#^|püńwçF3¨—‹‘iNf“€`zZxĎ=ńŚWż:žýľŻĹęŐŤc¸:;:âŤ_řb4™˜ÉA‹LhB7Ýxcź÷ďˆűߺ7Ţ$xöłăqťěŰî°C̝7/ÚZ[cŃ}‹âö[nż\qE\đ‡?Ć=÷ÜÝw›ëÎŻ¸K/ş(NűôÉąjőŞx÷qˆ˝ö~r@ľŇ(lWŞq} ËRů|j)\ćSkď˛ÖŞ)­Ků-ŤWŻš$&Šę4fąä_WWWßÔŮŮ˗/+_™›SSŞ\öĆWż:î_´¨by –őöŁcŸ§í­­7/LUËţxîšńťßü&ZZZâMďx{lľő#łu˝úę8ö­Gǚ5=UŃ6Üxă8űœsb,u­şŤü%ĽR)›ŠŞçÇSţŘwÜqGÍő[nševYŻ[{űŒ'•/şĘÓâŢËÎŞŠť÷˛Ť0u.Ť§¨3?Đeőőjƒ–‘SÁ šČʕ+ă¸wžł_¸lżžÇ~ธ5{vC÷ÓÚÖĎxÎs˛Ščś[o‰źűÝ}Ფ%&.ČEs0€&r桞ľÇ,:ä°Ăăo;zÄ˝Rhí}o?&–.^ܡ,ÝçQo{[@-fĐ$îşóÎřá÷ž[ąlßý÷•pYŞŒöcťďú_Ĺňמéń´žPKKĐ´ŞűłÖë× ŔÔpÖwžŤWŻm]šńƛÄ{?ôá‡Ë:;:ăŁď_\÷ĎV,î _‡˝ňU1ždb&Ě&;Ŕԗ*Œ÷űßU,;ęíGÇŹŮłc¤Nýô§ă˛‹.ŽXś×ŢOގ{lL™˜ÉAŔ šŔĽý9–-]Ú7żÉ&›Ćžűí#u桞żüé˙U,ŰaÇGŇ>öńhmk ˆ€4üíoóOÖł˘ĽĽ%Fâçž_űҗ*–mşŮćqâgN‰Ůsć fdŔ¨¸áŸ˙ޘÜŽťÄH\{őŐńÉăO¨hE9oţüřÄçN‰ő7Ü0›_šbE֚ę0€&p÷ÝwWĚoťÝvó—_|IrĐAŮtџţ4Đ]ĹmˇŢ|÷ťc͚Ő}ËfĚh}ęSąŐ֏Ěćý‹_Äóž~@zÜűă†ëŽŻ¸Ýs_ř˘8앯ŞXöŕƒTĚ/Xo˝€ZĚ  lźŮ&ó˙šíŽŠů˝÷Ý7Ž;ţřş!łS?ýé¸üâK*nł×ŢOގ{lżÇşőć[*ć×ß`ý€ZĚ  lťÝöóW^viżmžöôj†Ě>öĆ/úŰî°ăŁâCűxĹśšk˙ruĹüŁó؀ZĚ  ěńÄ'VĚ_đÇ󢳣ŁßvľBfŠĽfŃŚ›m'~攘=gNżŰwtŹékŤ™Űĺń¨EŔ šŔnťďłfÍ꛿çîťâçž[sŰZ!łÜźůóăŸ;%ÖßpÚˇ=ďÜßĹ}÷Ţťvűu։]̨CŔ šŔŹŮłăŮ/x~ŲŻéŒXşdIÍík…ĚfĚh}ęSąŐ֏Źy›t__>ýôŠeĎyţółÇ†ZĚ IzřŃÖ6Ło~áÂ{â3'}˘_ Ě\ ™}ä'Ĺ&›loźI|¤źíÎťíVsŰŽŽŽřĚ'NŒű-ę[6sćĚxÁK ¨§-€Ś°ń&›ÄK_ţňřŢ7żŃˇěOż˙CŹťîzqôťŢĽRŠßmöŢwßlH ¨}á”SâOřcĹňWydlşéfő¨`MäUŻ{mě°ăŁ*–ýěěłăřăŢ_ˇ]ć@–/_z÷ťă§?úQĹňíľCzÄ0€&ŇÚÖüŘÇcƒ6ŞXžŞ˝ö°ĂăˇçœƒŢOggWśí+yI\tÁë6Ůtł8ń3§d)ÂvĽ×ş,ՙϧ–Âe>ľö.k­šŇşůérőę5—Ä$UÝ#7ͧÎÎÎ첣Ł#VŹX]]ÝŃ2SiB€ŠěŽŰn‹ˇżńńŔ}÷ő[ˇńƛÄSžö´ŘcŻ˝b‹Gl Ö]7şşşbéŇ%qËM7Ç_Żž&ţřťsăţE‹úÝ6×N9ýôŘrŤ­b2śŮvťxÜŽťÄ^{?9fĚ~ĺłŃ¤Ećäl‘Š‚ŔQď ěd6‘Í*ĆRp,M0ÖĚ&™$k†ŕŐx<‡Ššh&iŒ§z ĆI ˜LŁžf^ L~ůPő˜L !-&‚@0gă*›*„xŁ/o‹YC*ŽĂŸP$`0E4[ ÍŃ`0`lTť‡ 3€qÖČ`Ýpb€Ń&`0NĆ˘Ş˜’4*?AąŃ1%'4˜Œ‘Ń “0\Ă ‹UG œLOfM ÖĽşá†ČFz{ŚŚĄV-+Ţ3€Q6Ř`]˝őĂ˝]Łë˜^F;(–?  L/fŁh W#°ŃÚf\ŒÇó0X 0dƒU-, 6X,ŻŚŔô `0 F,écLYŞ˛ MŠ4h°l°qŚęíj…ÉT3˜>ĚĆHف°aˇžž h€°W˝ X#1a2€éMŔ `j…ż†đvUëşC¸ €Ľč ~ǐŞÂ`őBbĹ1Šá´Î>˜ú̆a(!ąęe U6k P6-[fŠyUełęąŁ:í1k…ĹzŹ|ťRƒ6&?3€1TkPŽTg0ŻpŁĘŮaT+>˜š[Ę6ޞmf j˜Ť^°Ź^ ­ŤŤŤćö]3€iĽŢhP˝Šbľš,ĘjU6kiiéă*ÍťŻÁ‚nL.f ¨.Ť:ënŹjYq~¨2-2ڟz­îzŰő^Vßn  gŊf}Ëň YwßĆuŰrVÜŽÎ8•ŕŔä!`PPďLϢząh 8–ÔŤT–.kÝWÍZÔiË Ŕ”V]IŹŢşžW>~TčęŽQiŹX…ŹßýÔQ\_Ż˘“›€@ŻFŞŒŐZ—éŞ_aą:Ë ”őmßß@?SĎ@­ę W1pVę.­m_YU],‰ĺSő ÷[ę˝ß´n€*e*˜LfŔ¤1–ƒNł —×WWCëŽ"‹ṎîŽoSóů6đ3 LśÂ,Ü âvĽĘz‚a-Ľ–ŠűËĆąjÜŽ8+^ömS +˙×]xŹęq˛â%“‹€0íŐ;ò‘0W/ŤSľŹzY~=›/\/ŢGżíňÇďî_!­úš5ë3€É` V˜5ˇŻ뽒]´´´dËş˘ŤrŰŢĐY6&VużiĚ)Ýn°ą§bŕŹ4JťMš“€0iŒĹÔPZMÖjgYkűZ!°b°ŹŤŤˇ:Yo°Źož*PVŤbYww˙vœőžoŁ?Íg¨ă`łč_Í,é.C•ZZúoŸŽˇŹmŁ…6šŮíŞĆĄŠłž*g˝cVĹ`\u‹ÍęűŞ÷3Đ\̀IcźÂeľśŠ—C^ŀXÝJd…ëyűËtťěśuÂdĹ6™ő*šEU+‚Šç:ŔĎ@snŔ,j´¸ěťžţK!łÂ}§°XTľżĚ–÷V4ëŠx-2ťzďŁV+Ě4nVę黙-Ť7UëçSá  9 ˜ÓR˝ eÝőÂZTŤŽT–ëęěě[žÂb}łŽŢ뽗Ů|Ô¨v•ŐĚę=Ç~Ďuˆ?7Íg8AŤRpY:ŤŽh–ÄRČŹ+…ťz[hfcP-=ËÓ‘ĆŻŞÚ]&y Źß˜S*€V2kôç2h>fŔ´ÓÝ`ĹŻęŞeŐŰÖ —ŐšO˙uĂdUÁ˛žŔYoč,Íwö†Ó’Ź’YwjjCř[@snČŞxťž YK)ŤH–ĆZÖV&K˛$KăOŮú<ÜŐ[Ľ,KjíiŮ׳ŞĹfŽŘ3ťž‡ĚzÖźM=BfÍEŔ ˜V†.ËbbUŻşUĐ -3Óŕ\ąf~=-ĎBdĺeŮÔÝ{=„ëęJg‰–˘łŁłŻÂŮ@ĎšîĎŔ´•ĆšŠÁ˛bŔŹľľ5ÚÚÚz–ő.omi­Ř&1ĽíRŸĚ,ô•ĆšRĹłŢ1°Ňáą4Ś•‚k=Ýžˇ2hfŔ´Ő]Ł2Y­`Y’˜ĺŰÔŹTÖËĂh)@–‡ÍŇőźMfVĄŹ7TÖ3­ÉËfÎl‡?lłXoÝubÖŹ1Ł<¸7Ł­Ľßs€ĄHCKÝQŠ5k:b鲕ńĐâeqç÷ÄęŐŤűNxĚĂf]-ŃRžŢ4ëűJëóĐYKU;ͤĽˇ˛YR\ŢÝ[ĆŹ”=‡¨ŘŚň9 ”4+3`Účîz°Z÷Q3`–ˇšŹny™Ęş:űgkÖŹÉîZ[J1oîĚŘpĂMbĂőçÇŹ™m偺|`.Ý{)Ťbf\ €‘Čş^–Ç­fśˇ–§šąÁzscŤ-6ŠeËWĹý,‰E÷=+VʊĺËWg!ł3fDW[[*KAłRĄýe$K˙ëę Œĺ-5Ťb5ĂbYëĚRďŐîACfBgÍAŔ ˜ň “ 'hVQľ,;ýłťŻíeE¸ŹŤŤŻrYş\łzu.ë.Ďo´áşąńF b˝ë”íJýî; ů­]0ŞRn+ü˜ŚÍ6]//Y >÷Ü{6>Ֆ*óϘÝ­ÝYČ,-KᲞńŤÖŢűé.U.ďU ‡Ő ‰ˇ/Ő ž ™L<3`ÚŞ—ĺaąězTśĚŹŽZ–ˇĚěŽ –uĽ@YďőŽÎŽžůŐkVÇęUŤcöě™ńčY¸kďŤViF[kVaÁ:sâa›o˙źţ–Xšre6î5ŁmFtˇuG[k[veʕu—J٘WOő˛Čގô.+śĘLú‚cY“ÎREł"A2€ć%`Liľ*”5şŹŢýőm[#tVÝ3ľÂLí1Ső˛Í7Ű śŮjӘ5kfyůš:fŃYŐ˛śÖX0ż-öÜmű¸é֝⎝ď‹îŽî˜Ń;–Zfć'^&}a˛RôÇş í4óű-Î÷.Œ|4ŽÔ@ŘLř `b ˜SÖPBc}JĽľŮ•ĘŞdi›˗§Je݅V™)XÖąfMŹZľ*k‰ůČ­6‡mś~yŽéěÎÖ~­/{É&Śf­vŠ>P“Qń@WŠp Śł_WţŻ‘ÍAŔ  J1<–Ď÷]楲îŢŞey{€˛,Kałt6gggGlľĺŚYĺ˛|@m°˛ęőă9 6`ř JŢN0)8€ÉF•Xţ]oŁ Ömůđ¸őöť˛ąŻö´°­­çűaw)#ëęm•Yž-]ĺ­ýĆ×'ó™ ů˜SҐ‚uZaö ™ĺÁłčŽŹhVž::;˛pYŞ`–Ů6ßlƒxŘfë—ՆşČĎěĚŞ uvŽ{ËŽ4˜Z¤Šxv)@ľź=pţz•ŽCóKžd>ĺď{Iń˝Ďű ÓUőxTúlü°Í6ŒeËWĆ˙îZ-­=cHyĹţRW)k•Ů]čBgQ”ŐşĎŢëŤb6”çĺó:Ŕř0¨a  Yß|o,—uöV/›5Ť=śŮjÓň ŰĐš–/_^ÔČĂfă0K“`ϧ4?gΜ(Ę_Żň€Y6ƒÉ¤x0jöěŮŮô¨„ĽĎ3f´ĆvÜ,Zź,V­Z­-­ŃÖÖÖSšŹÔŇSĹŹźmO*śĘLŞŤ’e÷-0i˜SĆH‚XŠĺeń~ň)xĺ­0ó֘}Sw×Ú*fYk̝ťM̜9ŁźŹö(Yq€.ŒÖXľjUÝíÇCţźň[.]OÝӀaô>çŹÝAůyçŐ^’|žzŔ0?“hĹţâ™äŐűtőŕZśbŊěőŞî™ç0 Ľżë•+Wfďué=oÌ}Ó}z÷íz`˛*ﷅĎ缏˘a^-Ľü™žęwšëîn][LĽTů}ęŠőYąř9˛8.TŤŞ×D)~OŹ'­›={fsbď­Ű{ZiÖ/Ţ }ň“óň뵌×É >NŁŰľ´”býuçÇÜ9łâÁ‡–őľ˜ďnié ˜NJL˙ ,`R0Ś…Ą”ć/VĺĘ[áôŤ^V›Ľęeĺià ׍ňń§A# ´ĽĘ(“íŔtţ3§ÖaéĚÔÁśÍžçƒŠŔÄ+î›ĹýZ­Zň mz˝‚é ŸKď[-˝ĆRKŘôž7kÖŹš€I$ŤžŇ+;"ÎżqeœqáŠX´´ł÷œ“RĚŹ8ZŇłŻéꌕĺׂ[uĹťŇ/Úefźú‰łcýšicƨ­şľzu˜Şgyśĺ¸ž¸P|ƒ=ćŕĎ)U9ëŽ 6X7|hiV¸şŠY)× ĺd%U̚VKLq†ËŞZb62ŔÖŻ=ćšŽŹŞ×†ëĎohP0…5ŇŔ[Ńd:s3=÷2ŤţŠŠíĀć1Đ>Yýú•ď멂YĎ:ű5S[úŰÎ+•ĺúҔBféŮ`áj`2莳Ż^§ż"-éˆÔ&łTęě}oKSKĹ4ŁüšĐÚRŠÎTŮŹť#~ń×ĺńůó—ÄC+ťUkŹ(˙Z5ž'.+ń–4–¤ďŐ÷ßč8[­eNčh>*˜TɲŇŔXTU,‹Şu)€Ńs–fÄŹ™muď/o‰Âeé@u­mš]ń9Śśa3gÎŹy°˝úě\ƒ‚ĐŠűfuHŹú ű$ľňMűzaŤŠmaŞŞnۓ–Ľ}!…ɁI¤ť÷üúR ƒuEKŠ3ÎůŰňřćĹŤceGϲôÖÖ+ëęý˙–č,őTßm-uôu‡Îß5×tuÇů7ފůs–Ć1űĎ+/iíi™Š45ÔŞ/UWĆ­Uý=m“ĆœŇçŃ<Ŕ•Oůúô5ŸŞO–(^ĎoSý˝p$ßďŇígĎj/?vËÚ“Šch…ßCÖ63]ď=ŠŁú3w­JoŐż'';L,Ł"Q?0Qł-faęęî9;óa›o­­ĹÁŔRżşîŢ@ÚT‘Â')d–Ź$­ż˝Á@˜<˛ęŒkč‘fłgĎŽ¨Ć‡ÇÉá–ű:ăťWʊĺŤËűoŠť/5–öęŽRK´–§őç´ĆA;Ď)_ŻZKŞ*•Ľ›Ź)œ˙ńŐ+c÷-ŰcďmfGÉK ĘÇEŞXyŕŞ8n’Ć\Ň Šé2Ż VKZ_kIă4iJłbˆŤ8F5š!ł4ö°Í7‰Űnż+óŞřŒÜŕý4^T=Žf\ `â˜Đ4TB`2ň…&ąŢ6—ĺ!ś~ďAC)şm[čŰ`ýĘuޝMůŮłĹÁĂô˛č-&‡üsLڏŤ?Ó¤eSçő F*ŻĄŠL.yƒçT°ě˘wÄÝvG{kŞDśś*YşśÁÜśŘ˙Qíńę'ώőćΈTäĺ÷˙ZKVŽŽyżĺOýq֕+cĎ­Úcf‹öšT*VŤV ™%yŐą|],KS˝ ^ő*ǧe+WŽĚNŽhooď šĺëj9ŇńítűőÖ]' ˜Ľ“0óű-†Ůz6ŹüÔŹXÖ;N@srn ăŽ^˜Œü=CóŤľOV ŚEĺŔZĹöěĎÝ=÷1ł˝­wóRaŞ ˘ŚpYޒ`*č  td׋żˇę|^ĄyŐ Ř&Síő F"?—ňĺć€É!űT^ęŽWtÇľwvdAłŽtđşj7Ţ{ťöxăžłăĘŰ;ă–Ei}Ş$S˙đIzˇźţžŽ¸îŽN‡Áč§zŒd óϖé;؊+bɒ%ŮçÎü~ŞĂXĽŢ“ő7ŸRĐ,ÝWşĎâwťâçŮâ}ä3mŮɗŮY,‹Ęąň|žúůöű†ŘvژŔř0`Ě Ţ0ůť‡‰7šű^qPŹťˇňYĺ~žZ´GO[̖ČĂeŐŻS1`–WdóZͯށZgž§}Ű~ kĽý$U‚*Ŕř[ş˛+nżż3 –uu•˘úŘuggw|úÜqâo–ÇKËűů ďÝŃŤËƒ˙uW‡÷KTŹ.V˝,I'îĺa°ĺ˗gëň–˜y˜,˙.7؉|ŐëÓý¤űL÷ŁÖ÷źęąŤĄžŻĽíŰÚZ+dő.{gúÝ€ÉAMwƄ/PŠVe`b4ň5ôphy0­5U9čęw?ŐˆSí=r*ľü„é Ń× ü€Đ#?ЗÔj+ 4§Ź Jw)–ŻéŽű–tGís=şă[kOéĘúž—bŕCŇú{—ŚvńĺűÍŢ3Ď@âxP1`VŹ–‚ciL%ÄŞŒ+Äe,Š:ÄUŹn–ßWbKf̘­­­Ď'~ĂűY#Úg´V>×AÚpÖë6С]Zďó6@Ó0`T9ƒé—v`l4úV,[;WĘĆ˝ť‹â@âtRÝ2˜Xő>u[ۖâĆnŒ+Žź";ě°ôŞÝp˜Űoż=ţüç?Nj^ü˘˜3{Nt‡ÖĄÓM÷ Č&îúĎ;…p.\šę/ąhѢ˜3wNĹ #9ČĐlʇNâ†nŒď}÷űńŇC_­­=íŒůńnťíöřŢ÷žĎ~ösb˝ˇóú6ÝÔ=đ5ŠŹ}îş#TźéŚ›ăôÓOż˙ýďفǜśąŃFĆË_ţňxŢóž×[ŐŠWú=´4ÇűźďRÓ[gGW\|ńĹqÖYgĹwܑľ˙JĎ[ZfĂőćÇ֏زü7üĘŘ}ŁTţ;ooéŒUÝ­ĺżÝZ7ÝY€Źť7*–‡ËJ}ů˛Ęż÷ÖňűJwyjŸŃ­y3ľŢlɃfľy˙˜~ęÄ“ˇŻĚ+—őčŽřŽ2ZŸuň1ŹšßéxR&Ŕd"`ŔˆŒĆŔ˜Á5&“zŻ#ůâ+hăgŞżçTŘUW\˜nŇkߝwŢ_>ăŤYp&9蠃†ôš+?ł˙Č#Œý÷ß?^úŇCcý ÖóٍIŚç3B:¨˜ö‰O|âńˇżý-; YŤSžÝI'”MiY:šÉ&›Ä+^ńŠxćłŒYłfĆDĘ[–+f0}¤żÉsĎ=7>őŠOĹŞUŤ˛ż‡ô7š.×ttޅ÷Ć}÷Ţ˙řçőqć™ßŽŮ37‰ ćΈťwGíďéď¨;jU ŤUŠxuŠ+f—§ÍćˇfŇşZĘęË÷Üĺ#7ŔčéŁ÷řŇÄU$Î?Ľ÷ąęOí1Çë{E~ÂDzĚôž9gΜ/}'jĆĐdgÍEŔ €aîj¸™ŠŞ˙އóĹ×f˜xľŢٚžRYyŔ5Ujx衇˛–VŠrC:Ȗ̜93ÖYgŘhŁbÝu×͡żĘž´wڇŰnť->öąĹ=w/ęm;Ó2ĚĎiQ>´*~ó›ßIJĺË⨣^óçĎočśő*ÁŐ{cůž“bĽ)ikkË* çL=ĄąţóŸńŽwź#–-[–ý­Ľ˙Zm&Ť˙nóƒĄwÝuW|îsŸ‹ÎŽŽxń‹_ÑßW~} j‰ľž[zΊZՅ^íííą÷Ţ{Çf›mfŹaššôŇKűÂeéo#}ŢÝvŰmcöěŮąd鲸ĺć›ăŒU+VĆ/~ń‹8äˆ×ÇVόťŻŹŃɲ[mĐŰm\>\ŇRŠőçśdŰ_Ľ0ŔŐš:îúßÝ ĚŇëěüă¨~n˝ţn°Áąçž{fA‰âóéĎđ—żü%ţđ‡?d´śÚjŤxń‹_œ™ҟĎĎńó,Œ>P›˘bČŹ–t@ňűß;3űűŠUíi0?ýéOűnyĚcb×]w­ůxŕřŐŻ~Ő„;đŔł}#=ţ7žńřőŻ}ŚIŰ˝ň•ŻĚ2=Ü˙ýńŐŻ~5;0ŸN HGŠĘd ̝;7–.]˙üç?âëßřV\˙Żë˛ż•—qD;ě°Ře—]úm“ÖĽŕXzěô\Ósß}÷Ýc˝ő֋5kÖÄÝwߝm—ާíňŠhC•çöŰo›nş)›O•_÷Řc•ýšÜ5×\˙ýďł§Ôśő¨ŁŽę *Śż•ő×_?ö~ň“˛(ŘI'~2î]x_\~ńeąĎŽOŽßüľwÜ×ÝÓö˛ďťă쫗į˙ą2eĎĘűHy}wKĎß^ůodĹęîčękŸŮ[IŻkUú„ ăö뮊3žôľ˜Qţ“éč8̜šsŚőéďţq{\o5żÎ ý{KĎ!˝\{íľ}áÓmśŮ&śÜr˘JRŐĂn¸ĄŻ%Ü^{í@ë{ÍąŃćgMßOŇg˜ÜxŽ'˝ţ§)÷8tńgđ˝Ó9@S0 aC9°Ńčśh3™ §-ćPžű coČďCMđž•tĽ$Ÿ=ĺłq}ů Iů˜TvPŞĽĽłfώóçg­1Óŕi:5…ĎRu‡4Bťté˛řŮĎ~×_}źýíoĎZC¤iBfŔT•żžu—ú§ŠcŠúŃÚ#Výz¤oŮoIzííiłŮ{ $zÚ7ňryČ,UBKĄ‚\z-NŻăk7ŒŢm*ŰŠTţZŸŢ7Ňű‰×ţé¤ÔWľ,lĺm´ÓßÖ>űě7Ţřď¸íś[űn‘6ŚĘ`)ŹSüʐ_Ďî§%ÝçĐţŽŇíҁŐ|_(>Ç\žŻŹY˝&:ť:{Ÿww´”Z˛pČa‡>ř`ůg˜ŸU6›=kvo]Š!ţVĘ÷{饗Ĺi§–=úV[oguć8ííÔöÍzŇëW ŚĎˇéß)…qˇŰnťřß˙ţ—}ö͂źĽôšxf<ć1ŽmśŮ:Žźę8ű‡?ŽĎîń¸xůžłăłç-‹ůÚňçćUQž:˛Üdk |u§×Ȏ,–mŃ÷"Ü3Ę/˙íśněłÝź8çĆśěńşłŰtg˙t)4P|˝MĄŚzŻáf,?Í+VĆO˙bÜpăŮţůŽň÷„ž€ŮPßxĆűďśÔđc_|ńĹĺýüóŮżĂV[mO|â˝BÓ*łuÄśŰn•űůČ? /X° &ZzíI'zäŸĹŞ*›¤íRËçĺ˗eßeŇç Z–/_žřç̙ë­ˇnÍ÷—âă埵RŔl´ŞŔöşš­7Ô 0Š ˜ĐŃ ŒtđĆŕăi¨áŽFgĹ3Ü§Œ|˙Ęű\ö_Ą­Ŕx OĎ5ţýď›â+_ţJÜpĂżËO ËR•…–ŹÍÎ>ű<%ó؝˛ƒĹÝĺu ďš'ţőŻş˙üçŹ*Aş}:jvĂő˙ŽSO=-Ž:ę Ů9Ż3Ŕt°ďžűěßüĆľ!”Ş/ĽuUG?Ž8∏-ŰPĽ×ؗżüĺď9ŠmçŻýŰčXӑ…ËžöÔýz旺˛|ÂzëŽë̛Ÿľ`[űœÖ^I˙側zďA=Ž˘ňöůĎU}•ŰĽĐPşqWÖžŚ÷ T_őžáĘg`ĆWú§IÇ˙ŃŞĺ=՚Š˙dŁ˙ďWĘ>ĎôżďîlyV˜,[_ęÝZ˛żŘ˝ŸźwěşËnٖóćÍíý[$°UęŽŘť{÷‰îŽžçЕ…ƒŇ|dSó^†QşŐ÷UkżÎŰ+Ö[?]¤Ÿ=oąš¤°@:ŘţŢ÷ž7ŽžúęžďĐűîťoœp 1wŢ:éVqëíˇÄ…—\Ď|ÎsăÁĺĽřŢU+âĄĺ×šě­ ˝ÖelŮ}ve.˝s•ŮߘŮVЧnßG>inBŰq‡mă¨7˝śđü"~ţł_dĄäô\Ňgíô\˛ƒ÷ĽžPňN;í´ößźÖëđ`JC}=Î_ďűË˙îÓß|úŰ_ťŸľĆPęßeŠN€ť{ížYŕŽ'Űßťz~)¨š~ĆîÎRO=şĄěÇĽáUJ†&í–°6Učn ˇ:Ě>ńďĄyáę1ŠZŻI)\ö™“O‰oź1öŢ{ď8üđĂł1Ÿ|űtŰTľů{ßű^\tŃEŮűÎťŽ}gl°ÁúýîŤÖ )ě–ŢGG#đœĆÇҸS^ËÇĐFÂw€ć"`Ŕ  ­`™Íd°żÇÁžŕv­ŃƒlBfИŠü’ŸašţžőÍoĹő×ßĐHá˛g?űŮń’—ź$6ÜpĂHŐtR0 ĆIĘҔZJýŕ?ˆsÎ9'ťMşíu˙ş!žý­ďĆqx_Ý3`šôú}Č!‡d×óĎuéŃď~÷‡,`–*ۤƒEéľ: ŔdŰ­=Řôß˙Ţ—_~YÜyçŮÁ¨ôZ˙ŘÇ=6vÝe—h›ŃÚ÷}ʡ˝gá¸ŕ˙Ů{@I˛˛Lű;™w­˝ŞşihşišĽŮA6•„AADQÇĹYÔQőg—q܆MYdQ6„f“}“}í˝şÖťdfÄůăýÎůNœČ›ˇęVÝ[UˇŞŢ˛ď­›‘‘'NDFdÄyâýţů˝ščƒ”Ş+ޏBžç{ž' 5㒙%šáqőŐWkŇ%ŞŹüÚvŮí.Mĺ•ńüç?˙yŠ™hH„p*ža”°űęWżŞm›Ő”),Ť-Ů?ôĄɡžő-M“BâJ(Ţóž÷šůYć[ßü–|ä#MR@ňë+^ů*™žšR)Čp톂~đƒşmăóďOˇžő­uűżŕ‚ :ežĐ—Ż~őkRR!J‹˘ŹçťŢő.Myň“ŸŹóÄźđs~~^Köţůĺç;ߊB*Ţű–] Is<7íű|!ľĺç~îç´Ä#@aŸ Ďi^ł<´(EłÝ=ńł˛s[)őŢ}r큊f+˛83§‘Ęfş˝ I÷É.hŽžrZž~ď)Ů>$ŢK.šTŢű#ţ¨ŚŹ‹/žXžň”§4mžMR3DŽ÷ž÷_ä;ßţśžçío{ݖŢţöˇËWžňĺf{ž‹<îqKÉ}űöÝ,˙ň/ďkŽ_ÔeÂqઍî&÷žĎ˝tťĎˇ K)<|hAŢńŽwʗżü%Ůż˙@łm‘ŰÜćbÝŽĎ=÷Üôů~Ç;ŢĄÇl—J)cžđ ĺ{ż÷{ĺć›÷Ęűß˙ŻÚ×8 Œ,RAqn‘żăspŐUWé{ăœĺŸţéŸôX‡ăRćp ˜ŸŸ“q™mřĘWžŇ,ßżhŮSźďű€Ü_ӋBJbűšWžň•éw”řĹšĐ;ßů.ůĚg>ŁËymÁgóÂzŔňäŸs¤žę˙˝Joôúł,J• P.÷ř@ł\ßhś™‘.näÁ1tűŽ­aýńFČi„ĎäĐ(—ůS›i–śh ß­°ßG‰_üÄ>çĎ|Ö3u߅ýöß˙÷˙ţßć¸ň^×—žôĽ˜vśkâü&%ŘŁM›ľ<řZż{ňú9!„œ(˜B9"ë•ËĆ/ۅ鵼–Óń‹şă'ľGÍ(™rr˜t!ítŔ’Ň^ůŠ˙'Ÿüä§CéŸćâ~ŢőŽwUš ƒ(a@ÉÉhЖňÁt¸đˆLˆ`ąÝÉżýŰÇĺo_ţJyÎO>[!„´`šŽę´Ý(ň’4uťđÓúkÁRĽüýo|ŁüŐ_ýUz˝Műş×˝Nns›ŰČóăůÍţg(ĂŕĐ>đŻňűż˙ű:Ŕď5Š),ĂüŔčąÂŽ9(WÁŕw÷wu ˙ÎŰúŠWźB˙řÇ6Njçčß üÍßüŠř7d žçËö˛—˝LE4đˆGň}ţéOşJfłłÓÍŕë˘üĺ_ţĽŠő&ÚŘň˝úŐŻVQäw~çˇeÇÎíň…/~A^ô˘5ŰóÁ´˝#Ľđ˙čTN‚ôJˆ:_ţÇ˙ř:h;ćńó?˙óňčG?:őËňň@ţř˙(}gťÝín'żńżĄóÇ4÷ş×˝TÎDÚú ¤)ôyŢHŕÂçüÔO=Gü<Ď %$îAĘ;xŕ°îg 9A,ĘA?A2„čŠß1ý…ŢRˇź^ٓďżÜÉĽťĎ‘—_}Xţĺó R•ąÄĽ@4‚ Űü^@č7Ӌ\˛§”ŸzŔŹÜű6}ÁöëWنąkŸ$FśbCř˝ő-oUŰöŘgC@(YůřÇ?^“Š?ýéO7ŰŢŻ&ŃĐxŐŤ^%—^zŠüÎ ˙Wł\¤ăxßżź_~ý×˙gJČ&ŕ˜ňüç?_î{ßűęv„ϏóĎ6p€ ů oźIßÇ|6 ňĄääg?űŮ4ˆ_żř‹ż(xŔä/xîKpźÂ|ßň–ˇČŢđů˝ßű==/ąíŇß_˙ő_ËË_ţň× qŒyć3ŸĄEžÍٜ­Ńí˙ď˙­ç4č[cozӛĺNwşŁüáţĄŽsHás~ ÍŸCĚŸ;ČoŠŃ˙8ÖŮą-­ľć5Ż}íkuóżů?墋.âgÓ|^k9ć´Č„×ÁZžďŮł[sˆť˜ţÝďyˇ”́é§~ę§ôyěC˙ůŸ˙YÇž űa|ç?ůą Çěîo !dsAÁŒBČşXí$h\"ł‹Ă¸{wź”ŘŞ'Rx ›‘UNjÇĺ2\¸Ĺŕ  „m0†( !Gă+_ţšźńoJűO‘s˙Ü_/8âĎ×\sa@ű A,Ă`%HqQHKKKqŽľÎó!yˆÜö˛K„BÎtÖr†¤ĎźčE/–+ŻźRĹ}­_żŘ‘ĎĂRgL~IóvĄlöçФÇ~?G‚úë7Kô‘ö‚×B´xéK_šöó˝^_̰LH‡Á<´\ň˜'ŕ‘Ü‚věÜšŁy„ÔČÉxĂß(ó[ćľT($]ťvéqÇÄ$3ś ˜Ÿ‰8đ‡xc˘ٌ„OĆG?úQ]OH÷piĹؐô˛ ,..jؤůîßż_ˇ}K׳v€|[˛ďFĂa%o~ó›UdÁßśl٢il(MxÝu×išŮ'?ůIůĽ_úe•0gŚgcbX&ńš~ż§Ÿź6 ´úćłöUfđůřLaŕŸS¤’a~űˇ[:¤i…ŘćmqŹß^ň’—ČÍ7ß,333ú<– ޡĎ4ćž/4Ý ŸW,;Ţóž÷ťo’LĎfě |ż=tđ+şúł?ű3yîsŸŤ)`ř~ŒuąýŽí }†çîxÇ+dTäÍoz“|ŠYŸ|ä#䗿˙Rů‘ű\(˙ö˛|óÚòŠßL#Ň/›íĄÉ-wĎȝ/čɝ.ěÉśi”R-ÂĺŞU> NÚmt­B-ö—HÚÂśŠöcnŽE˙őżţWݧc Ba[@Z öłŘ&ëˇ^ żüË˙]S‹5=í#Qé űmlĂ؞!R8°żéŤkt[ű•_ůý Üýîw×繢ŸL.Ć{@ÎÂ~>özj+¤°ˇ˝ímúůÄëĐ“ŃßHƒ‡ś˘Ýř\ˆ~Đ~ögVۅu)Ç:ô>HDżáóŠ×ýŐ_ý_Ylćń?ńl} –)ßWüɟü‰Jn8ÂsX6<żýéŸţŠü—˙ň_TÜD[°›Ď9°~Áç}ĎΟĐ>ĚmšímoŤë}ýőŻ]S!‰ţŸ˙óôď„Ó ě7˘8Ź˙<ľĺnąŻ?>éfHěÇPű'ˆd˜ §Ç¤šŮk‘ŕřÔ§>ľyÍźŹĺĚÇžŰĺŇ!„r$(˜BY•ă-{9~÷˨IŐ\čVCYn.:Օ×;éóÎsĆćăăŔ‹Í˞vvÇź`—WŠýŠS&gÓKWč ƒ7!• ĚÖJ´óď´EşËjóY) M쓬ăŒßÍÚ^„n/JĆfčmrgóÍڞ&÷ŤŸ>NlƒŹěçŹEéßŢwŰĐś=k÷„ůNěˇrjďÇŚOoíV8]í:‘ńvtúŽ;ßń{‡óőm›bšvŹłĂzď[3ŽÝŢ 'Ľ+¤hŚŚú2Ő ęᎲ˛ěuJ̏dF cçtM,eyţáޢ:9ۡo“+ŻźŁ–ŰAHÍk^óůÇüGݏaw šüĚĎüŒN;ď‘:€P ÇęfíÍ˙ ˙é?˙œpܟrśáÇÎGpÜŔŔ4L Oa€ůÄ˝ˇ_qŒ˛ďĄ#,Éá(Q†ňbôĆŕ=Ě @HAŽ•ŕDZd €t¤‡>ôĄrŸűÜG˙‘6ƒtKĆżSBźÁŕ9ţށřg?űŮ*+ŕ|î­o}ŤŚĎŕXƒÁ,¤ę@VxřĂŽ)eŔJŮň@p°ň?HZÃßc7/!•nżnű8g١ożĘ _űÚ×T4ĂşD‰ÇË/ż=öyŔ÷• –…ä§Ł˝/J!BʂԂią>űŮ?Ţ|fTŕtƒ$2lës >ďyĎkž;ý“üýß˙˝ž?¤“_ýŐ_UŃ Ÿ4 ˇ7ń<„›ç<ç9šz™Bž{ĄŻxĹ+U|Âsi‘ă9ú˘%žÇg}‰÷şÓî¤ířš¸¸ ßŐđíă˙Dú\á;܎;(iJŘţ‚őc?öcň[żůÝN°ÂzC?AŽ‚ü„›*Žżţz} Ä- ¸ďlúđďz§üńŸţ…Ž?ČÄOzŇ›íűńrţ%).›‘-Í źJ|Zβ˝€ďă•m˘ĹŞ~ŮQ-ĆŽÚ`_ŽŽ~đƒU^Ä6€e@ş—mĎH{⟨Ëí/ţâ/ôuŸýĚgĺ}˙ň>ůá'˙°n‡(űŠÄ1l+÷ťßýä‡řÉÍśśG?Ë/~ń‹őIĺ8!˜ýř˙¸öÄ)$Áὐxů‡<¸iǎK`3ŽءCÚ|ýë_Ż˘äÍ{oÖcÍýĐişRאţ…cö#(™ ! Š—ř,â؂ś`ýü‡˙đtůqî‚y˘­˜öľŻyÜű^÷’Ťî~Պ}äf´Çj|ţ‘ˆ÷Ât8vĄl*>cąń9ľĎ9Ţ’Ţ ŸsôŽŸÚđ<Ň ÂA@Ă1őw~çwtŮŸSŹ+Ó9ąŕóďÂăeŕe])d^ňĐëąřT2~łÇZŽ÷â;Ăłžő,Ý_Z’™ý´ëŰ~đCä™Ď|ŚNŰ\é™8ŸŐnúŸt !„2 f„B&˛^š ŕÄd8\–Ă K˛ź´,KƒĄ FUĚöa ÜŐv÷~v€Š¨„V5xŞĘGŮĚé 7îâ-‹0˝ÝÝďupÜKÉIx ÓôâôůIšž?î€ÎҤŠćéĘ2Î[Âĺ>LĘ x ­€@$ą El‡-{łĚuTё}‰ÓÇůşŹqŕ¨Ň4ˇL†‹íÖGGŠ“¸|­‡§mŮZń.ś;śĄ#Tĺr^śžjM—ónĎڝ‰qŢÚP[O"–ő_.ŢáĄŸ}ęCońŐv—m_ŘsAr¨C9 ‘VčŠëF%ü/›oŰߒś#Ű6\ś|ŁQ§ohëźlűŮúóĹôu”m”ńaëÜúٖą÷ďőJÝöđ˜ž*uponvŚ™f:݉LɌr,\wíľ:XœkްąŇMH E:íoMôĆߐč€ăSđ+eű“/~ń rýu×Éůˇ8O!äLű>-/úËË]ďvgěďHM„rݾ׍$‚ćůý+ĄUüőľ~'†Œ  ×ţŕĘĹ_ŹÓ …çßřŚźímoUY bĹ÷}ß÷i˘ ÄKFš8-^‰óvŽ{Ž„eýă?ţc}-žŻB23„ąly°¨"ü1OH{A⤠Â#}óřŕ?¨Ż…¤aeŘČć›ŕWżú5>žçž÷”~ěcňîwż[˙43ŹÓŤŽşJ.ťě2Ů8™ć5×|WĄŤ]‡đéf#mKřŢ™2˙ĚnÝşM…. &˙á†T'œĂAƒ° i볟mËBFťë]ř•pă'ć I Kł|ň< řŔTrĘÁ矗˙üŸ˙łĚÍ͆›í$|ć!âKUęY^^R‘ď‹÷‚ ˇcÇN~–2 \Ýźwż–:Äžűo< űŽ‹äFm?ű™ĎÉ_˝ř%˛€T-Rďuď‘é™Rö\–žđwĺ›_˙–Ţ öěg?Kž˙ű&^÷ÓŘ_ű(m.=đý—~é—4•Íś­~đ*’a9 A!•Ű– Š•HÝű­ßú-ž>đŤĺą{Ź.+DşÇ?î zműjÁűő{ÜăŠ&Ň÷°}AÎÂůŽ!vüŔžü.wšëX[8F<ěaS‰ m…dbŽaş~ř‡¸yżsőx†uëR$.źDd[_ء<ăĎĐĎ$Ŕűă3őš×źV?łďyĎ{媝ß=%hÄ4|ĆŃvˆyĘđ;^‡ăÚˇsçÎÎ炆Ib–hň5>—čźóEŰ^řÂFąŽ–ťř9$äDƒĎ*öWť‚ŮńJÖíK'ýĹe,š“ü‘LOMKŻšH‰ ąÇ+™BÖƤ véß.ämę jşK°} ĘíÔé _‡°rk㠙m‰?vgŞ×ůŮë!äl’’ŽžúC2՟Ѥ/ČWHŔšîÚä’K.•_xŢ–mۡˆt"‚7p_šĘqb Ĺm i6lˇň5řyŰŰ^šĆ! X)4 ÖŰwIˆ&—ˆ Ő äƒô˜¤ VaŕʛA,‚Ŕ`eűÚsˆZB͝*!-§n-˙úţj’ÚÍMßţűQJ°ĐA.AÖ9ľĺˆČęÜűŢ÷֟ŘPöŔÁƒ*7a=C`A)mgÚ¨ď J°Č„äjHq2i~ҀlČ W_}ľ~VŢřĆ7ŞP ąŰᥗ^*[ślďˇ’üœÚŢBĚ7żů- 7úšĘKTB”üŸ¤ćeŚěźű˜Ůši=/Ĺe ńáťڅĎ&>ÇřźAEŮAě,Ů 2J;â:iˇ?ʇÇ?Ṳs×yéßź´éűokßău…ýÚ­nu+M¸Â6€„­—ýíËĺßřšÎg÷n¤Ńý„ÜňÖˇjŽ”Ň/űrÓ 7ɡżý-7ö‡8ˇď¤ŔŹátÁĄÝv<߆ąÝÚ~`‰ĺY\XÔcŰxӛޔä]ź(fƒeE:ŮpPI1ߓ];wËüܲl>Ç×_CłĎ˙ź–yÄg Ç=#/;ë:וŽ|^„ĎŮ­/ž•”=L[Ëöí[őx ńÚÉ-nqěŢłŤéťJŻYţy*tá󜟏A¨Äďh?QŢ9_$†áúډĎC…şĽç-eœO­ruř<ÖzNƒĎřüü\óš]ĐśXyΰœăëB˛ëq…ŠĄŠąý ÝӟţtÝ7š\ŤeCˇĚ…ëS„Ęę%†Ăľčăgó\ó_žľH^vSľ•Ď˙.ś–ë:śŻO7ąS.#„rŒP0#„˛‚#TM.ĂĎápďJ\ƒ‹CYâbœ `› Ŕ\ž ÓąŞZFU›^fBW/ŔR2KLąĘ$Ś”\–§SĹů‡„Ź ŮĹŻ2Îż(]„|&R™0V$Š+Ŕb;jßIKI])ĺĚ䲐–Ŕ´_bJ–“Ô'’‰Z––ć‰Tš\ÖNűÂľËh c&S…‹ć­`ÖJ –˘V¤‹oöŢmŇY&Ĺš6uÍ::őÄŽş˝0oýĄžŕŘňĽőĽ.[.íg›Ţg)gU”ŇěÂr§?Ú42ێňtť"K”łíŁŽ_ťÝEQ1“!ť…~ŽÉeާźvžŘ6DˇXržůۨ9é_ZÉŇŕP3ŕ°Ü hĚé€FQ̤ővŹ’4BÎ>€Ż}íëÁUHH¸ÁŔŚĽÄ``Ä$2ěĎřŔ¤}Ć 7ÜŘ řýňËo'çžwŽBČŮö›(ĹőŽwźSËpa_ Ą’’aPú ƒä§â{öӐźŢé3Ç€•Çł„1<s/h˛Ňe‰8ă@TÉeŻpţ6Ô÷Cú J˘” „ľ<íRűŔťß_‘ ôo˙öqÁ­"HnBů6Hmđţâ‹/žŘ˛š@ÚÖ+ĘÁÝűŢ÷R ˘’í`gçX'$!!hŇ (d-$O­uŕsjŞŻĽd‘úĘÁŽ´$ßżńßőܲ&R‹ Ľ tŕ‘°÷Äžçzv^Œ}Gd¤&ř .5ŸŸblY ­Öf$SýÁüţ톌†e‡ôŠ>ÁkQRóDއÓěQĘńÎwžR>ńńOĘ׿ţf,6ëeN.šäšË]î˘ű=ěË^őŞWé~Î^÷„'ü  DŘö°ŢŢöśˇŤ¨eIXy’㉖Ke7˝ţ~čđĄćzÂP˙r`˙-ÇşÚńň˜}Ƿғ(Ÿl hů~űHÇ4ŰďŸ üK{ÉK^Ň án?ąepLÁqʒĘěVá6ć&Ěă| î/p.…÷úú׿ŽéœHÄqřÎwžł|ß÷?źů|>„×c9 ] ž†~­÷łgˇ ‹N5ÇťÁw’—żüĺú}Ý]űŽŽżá8€4HČďÇÚî×!„Ź f„B֍]‚H3 ĺđ¢ě?pH^”Ľ$RzS˝XŇ"&BE+—ĹBŕU^V1K ËËFşVđŃR—Q. ŇZ|”YMńI Şň°"+G™Ę†Ň&^ůX&ą(,éŹč”şô>ŃLҒ”ęe6–w´śű,m­ĆěŽĘV*k—ĎĘQśw,ľ c>‰OŢÔŹ-Ež\fI]’ľ#kˇ%‘Ĺ'鯓Z6ގîśŕ31/ tą´h.iľÂŘX˙‰KŠeŠď2š,É|ąŃu(vÇyœg•oKmZ˝ÄíŽNíHËX´)qeŃŢŃ5Ţw*Ε.{ ŹŰ¨GßH‹CŠF#}/çJm;ĘqôސdF!ö}ÜcäÝď~OJeű÷‡¤ Č˜Ä8ޢ,&ŔŔ?űí`¤x`ĘŔߐ(đ˜Ç>šű!BČY‹!ľWËÖb߁ó&ě;đ9Äąńýďż|泟҄4K}4xEČƂ};„p+ekeޏ_03źl†+žŻŰw‡+ĺYHJ.Ëű}‘'ć™`×&—ŮöѕáňuX!aŻM “Źôh˜!Jk,.Cˆ4ŻÝŻĺ"0`WfĺěĆ/J2Ō’ƒrh}ěcšÁąż×›`€ Œ8ÂŔDłŸýٟ•Ÿů™Ÿ‘źä ~ÇI$`Ä5ü|ž _|ąBČŮöť÷ěÖt$ ęSŸRáö×~í×Tć7rd‚ČI;úýžlŰś5íŤQŞŇD; ĽŃÂ÷yüő&đ;$źI,H‡˛ďŒËĐ֊/áďPB9° Vˆ~`ŻCšĚú§JbFţ‰PŽůîľ*3|ôŁŐÔLť}ű6} 9}ŔfÁƒ”á&ąö\ĹÎ֚(śŹTwűďvűĘ%­ŐËeĺm’%’;PˆD"KéƒXöÇüÇú=ĺßóž÷$Á,/ÎEŰDlăŘ7X: J¤‰Y[𹁄iŻ…„ĎŁĽć× ĆĎá‚Dçő5ř.‡6!Ő ’’můAßű i6˛ßĎX´{k=—‚Ąę/ţâ/t˘O‘h†ýęďţîďÉ/˙ň/kYĹ˙őżţ—~Wؗ>÷š?Ë>ž°ŽwěŘŠŰ^؟nW‘ŔžłŰśJHútl@YIěĎ톔_˙ő_×m ż[Zĺ¸`ĆEƒđúß ˙ĚHćł÷„Üő”§ľŚ?ôdg߁CróEћpŠRú˝2” tmÉĂVđiĄ:Ée’‰WQđąd/žŞ ĽťÉeÚÂ$FUQmâU[ž2—ž|'Ź-iżcbœ†ú Ée.K.łÔ°|Ţy›W&—ei]ž-Ł™'—šź˙VK.síÝOŠ4Ś–¤lŰŤKŚe,˛×HjłŹ!š,ľ˛d/ÉÓÜşĽ+s-Ȅąî>mĹľ )gyšŰ˜\ćĹwäĂ<šĚ$ˇ2]|tqm|Űä2—’ÜR;|6ߢ˸ő3‘o§ÍO|zÍ˙Şć÷ň°–‡ÂŕÚŁ˛—L(BVű‡yÚSuŕčSŸútÚoĄŒ^É,ߟ0CY ¤äé¸#řÉOy÷A„ł Ţ˙ĘŻüŠÚ@†şăď("§v_9ĺ˛Ën§ÉIH!ƒ°…”5 $Až\A ěˇCJn\ŔŔĐínwť$Ÿ]}őŐşŸżÓî¤çlH)Ăq Ĺ뀤Hvv“•űĂ12×1Mž°`Ďă}Ńoř×ę@<¤$ Âc^#Nf9~>÷šĎéś6>Čië JJĺéIDN7!ĚűçđŕÁňçţş,X†'=é‰ZÖŸ g¸>ôĄ鴐lyń™3 ŸA"Áç ÜôVĘ=ďyfP÷}úo|Ÿ‚„ŠR™x††ţč§ľ¤˘u?žWŁd'Ž1Ďř‡P‘ Ÿ#$WÝéNW96p}דP^ţŻţęŻŇö›1ž˙üçëwă?˙ó?—ßřßĐýŇśń_úĽ_ŇtƓÉ$ąŕŠ+ŽhöŁ;TŞBB$Rľä…cöÉ˙řÇ5™  ˝Ď|ć3tŸnÉwX^,}ĎGšGlŻ“Ŕ´Ř~-9đškŽiöéËzŒĚDžN˛]ťÝUU+*šÄ‡íŽ×+Ri!Ű>:%VMlÄ´ÍĎ|֏ɋţňĹňůĎALŔ@äwżű]š˙ýďŻ3|ÂţáúëŻ×ň.¸ĐŠŔŇ8đŔ Ő3~ěé:HE!g3HýúéŸţéLŞ‘S¤ČbtGB$”ĚĂ@Jţ}ůË_Ö}9$ źŰ’j ŸAň‚(óâżX.˝ôśzCÍÚ—ü†§e!´ŕ;é›ßüfÎ @Vƒ¨ÖŚGľe íľČ0H!ŠKöwH8#ČćéýéĎčç˘Ďo˙öoŤŘ I eó ôló÷ş×˝äX°>Ćçý˘‹.Ňvbٞ{Ü㍒…–cÄA"\ÖďČŘgÚţňÇ~ěÇtÝa ű¸ß˙ýß×}#žŸ™™‘§>őŠ*#žěăŔ¤)”)~čC*/ůËU{éK_ŞŰ0$9$Ýa;Á÷´2qQôôw”pĹžűű?ýÓ?•ťßýîúzœ`Y'ţ°óđîwż[–—Í6}'yôŁ-'ló¸đyĹg ‚>?Hđüú׿ĄR4Žeřü˘\o~˝Č°k;kńÂťŸó}ú9žě˛Ëä1yŒ.;>ǐ¤ö‡Xn|?Ŕůnč ďWŤŘÁk1„œxňtŻ3"Ťfaiż277Żű+ěĂqÍçiO{š&Źâ5˜~ć3ŸŠÇ5|/ÁţŻYü˝ě{;KdBČÚٲeŤ8°ĹßÎ(˜BY–^vhaI:,‡2ňNŚúeçDŒšRڔoK*V’ƒń¤&—¤DRŞX˜˛R–•ŇŚđŽAbʲB╤R—y™Ä Őmr™Ľnĺ Y&—Ő­¨ĺ­ÍS˝ÜĘtśźÄ¤2Ůü]Ʋ$2“’\&uĺ)g“ËZéÉem řnş˜ďŚ‹Ľ6dwŤ×őJIËĽľ4ێ´f˛XXĆÝôQ‡T}Ô)\áœs÷ČłâYň‚˙Ź%HsÉĺ.||ғ~HîqĎŤŇ2~Ď÷|ŚŔXIKźâžťÍmnŁâ¤$Ƥ4čćťňCň@G˘ Ó_˙ú×§ăÎ÷˙÷kz‹–ô­`fýtë[ÝZӜ :ä}ţ‡<˜Ç˜MF]çĺŰĎĆoţćoęw…ńőe˙Ć #ĘŮŮżmŰHRŒĎNÝÖwúŒ4çl2:j–H:gĎîoĎYëçOřôä'?Y%-lű&‘ReĺąÝăwHD÷šĎ}ŇënűËĺŠ+îĐ| Úűß˙Żú9şßýîß,÷-äž÷˝_3ßoÉK_ú7*Ý@üüŘÇţM\vţŃňż˙÷_’íŰsŠŇĹ>™Ň†~ĘRÚ ađ"Š <#=鑏|ÄÄ;äÉQhş×JÉC´Bb_†$HœƒŁ?!iA`8ŻĐ÷>P÷řÇ6×|j‡p™˘Ö‡Ś´cŰ@Üß>KuźÎąR0Ă>ţéĎxšÜxÓőÍţ˙íÍĎä-oył”Íßq,Âr•E)|Đýĺńý25ÝkŽť›e|˜źěe/“ĺÁPţíă“O}ú:íy睯Ó"‰+tQŰd;H—ş 5ßpĂ ňŚ7˝Qöíťů„ fWŸőŹgé1 ŸY¤4ă'֕ĘĐMŰ Ěýˇ˙ţ_ĺĘ;ߊš&3ŇžŹęaźnŽăÔžjה ÇTWXę|+ŸA,Äç’ŢÉ řœc_€ýŇ żň•Żčg"é‹^ô"]ŘoX‰čÇ?ţńzź$„œ`šď×ďhöU/{éKǞ8ŢëŚíĹs¤}=üa;Śďí žWY9mű^3ţ+gçÎň‹żř ͸Ëa•ɍ%u<ބ›G°˙ÎO>[~č‰OůšyŮąsňMăâž%šňš4!„ۇîŘRß çËěogĂő f„BŽĘjée¸ W7}–šœE9xhYEœ˛?•ąLč2ĚĹÁúş6šĚƲä˛LLŠÍĘä˛ĐLŤ R1m*´MŇźť‚Tą˛”Ą_YnSç+mŠUĽ'ďrAJڐž˛čˆh­@W'ÍÔ:%4'Čb>+ŮĘT+KnúŽÔŐ-š™Ÿ†>ŠWI.ËJhúnĘYíťĺ<ƒ0fK㪺[úS/đ岘´ÉežÎSŔb;Š6a,—ÜŞş+Zg—E7-ŹCIóE ]ž}”$ˇXžłŮFGŁ:“ËDKrŚ’Źq˝Řś1^r3lmrYJsĂ´IŕË×y; ‰Ć⾸ źÜ Đn>3S˝E™VÁŹŻ&]PŕÝą„ĂöÇĂ~÷w_(˙ď˙˝Z“0„}0˙šc˛IÇɑh~Á J(<ôĄ‘g?űÇľp>_B9Ó0ńCE)UşýöˇżŁ×ÇZžŔJh—“ÇrŃžëApŘšk§J/zĂAż76ČĽ—^*/zń_hy7”ő;tpAŸ+›ďĄ—\rM/Ŕ€yhG­'-pBlŢţöˇkj @BŮsžóMeŒŒ>@šőĘú=ďyĎS)bÚxÎ9çČ3žń -ą†AxĚ Ç‘ń:8Â=J™ŮšÝ\ —_~{!›|[†\ŠëŐĘ,­>?ś=NśŸ‹(Tlű˜혟Ÿ[ĽĄAşAůo‰çŻ–äeiTťvíŇi°Ýťx>Ićţŕ4˝Ű­ĽöađŰ%’Lą~Ŕ˛˙ęŻţŞ %öšíŰś7ŰzŠË333Ý|~T.ťěśZ"Ęh4lŢŻ§ďý°f úGôi1-¤=?ßłgW<3ôé\o⢺đٽÎĐÔY-‰qXFĘeǁŤUÂ2Á} iŔŘl!A>Äwhpńš‘g>óǚţޙ#Žopďˇ}űśfýďÖŁ§}‡Ď[ˇm•=çěŃ÷Zíó‡íâW~ĺ—5â/J{b{Ŕö„m%Ň Î™„QěGŸţٞeëyík_ŤŸY<‡„ă˙ř˙Ł ĆV*ŮÁ hĄżú°‡čďŻyőkĺć›÷˘SY\ě÷!„áóˆżĺĺ&ńáÄ2†Ď*–ˇť,ÓÍçBn€Á<ě’.ď¤)k/ů›—Čűß÷>=Ażă¸xű;\.?ů“?ŠâĽś3.÷y睛@|F‹˘{\F;ŹLn¸‘Ďëś07?#żţ?Mţň/›Ďů'?Ľóƒ”j큀ľ—żěĺňŻřWÝěx„3l?ß÷ýë.;!䄱ß>MěÝH°Ŕ|7ؗčÍ"žOuÁ~|×î]ú˜H|ŽŤ•ĹL“Ćă‘JĘńť Ž„BŽ |—śďÓgkEpk|έá§[ĺßö(˛Ÿö(ăßĘąžŰ†ŸƒÁđrš2IÜČv2ƒ;et€ť˜ž…BČFr¤A‘Ő3ěŸƒĺćÂÓšîĆ}˛ołresR2“”Éě÷›ÇTŠ)Rӝ řŒTôńí]ԒËTÝRŁŞ|L¤2šĚÄ5“´BÉM?&)é,Aáů*JAĄ >JFáÂtžtfIdí|Űv`€žg‚™„ť(UżŞcšVŹëŘ)ĄYśI`“ŇČZ­HËç˘]֝Ö'‰ • -BoĆš'ŤMIhSÎÚA1IBܸČç\VB3ÖМ´^ÔÂsÝt6ßIk×KmIgd;\;×ŇŚ–0†e̤żVšhĺś6lŹÔe\‡^L.‹‚YĘyÚźĘBR_›l‡žUíö$qŰC°Mcű.C]’-iÍ曒ç˘hWWažĂa-K 8ŚdűÖŮćbĺNŮľck3ߊI>~QáHňĹB“Žeă%ÚTšxˇŚřNF>]HˇŹc ĺ:‰ŐŁj¤Ç@ý˝ůŽŽÄ<ńđ{­żŐg×űšľRžţľoČűŢ÷~ůҗż$×]{8pPď„E[0Љ. Š`pć|€Üć’[ohů$ `PŒű"BÎ lŸ…AwK?<Á;ʋ mň×ŃRŽ."ţÚŻýš&ĄtúçIă7€ü˜aIb“R™Ž°ßÇ=řą/ÇkL ŃďœúáőX(“‰}4JUćË;ţöć…TĚ×´íquG”€𲗾\Ţđ†7HHű-ĺšĎ}Ž<ć1Ö$™Ó}2l™M˘8ńľ“źŕZŘvˇŚ×Ž}§Bâ>_Ý×űŠtĆEű[ţ>.^"ĆgÂJwÚďůőœ÷ŐńF{=žĂß÷ď? BžŻáűĐîÝ{Ň`ęřçĎÎG1-ĘdB:Áç ‹&QĹö…ç÷鲐|L /kƒˇŤwŞKçÓřŒCpƒD„×Ajů/˙ĺyňŘÇ=öŒů lnŢťOţĂxŞŽ+l7˙íżý7-‰2Ş(ůjâä§_˙ő_×4H۞7˘ĎÇÓţ,I->'˙,Mzˆ‡Řžń=۝ÉQ“Ś5ŮÓC6Ŕ6: çÜÄ6á;ŔâⲞnnvvĺ{čK˛żů|xǒ ăąśN/ˆŻí~öěÜ ˘4ŃvœťŕŘ5.łZ?ŮąŇ$íńůĺ"íř1 Ççx˙ž;ʞ&NôősŽŮ`g€Ďă7Ü }äšÝ25=-!ŔrÂń…–‡Găűƒ_ř…_'>ń‰r*Ěluřđ!MF]íű˙‰|ŰWBt[íqŹóÄaě-˙xu3Ď˝N„cTŃ|ÂwĄ~Żß\'/âő÷2^7/Ňą/żž–§™tŁĎ¤vBNęĺkôźmvv.Uřąóľü‘łY>瓮ŠŠŠţ}Eď”ńg5öđńg=|ösü!ŤüűH?Çç¨ Â3B!Gd5šĚ~Ż ż66ƒëà ޸$Sń zőÄEZ1Њĺ -šĚ^3.—!¨[ÚçăÉeľoKbśÓśiZ&—Y;ęÔIrYÜ ˘¸ ‹ůXz1JDÁËĂě¤$‘)\$ŽS‰Dk‡ĘTĹxYW3᪈˛˜Ka]™ř•­‡ź.O›oœ:ĘeE6ßśÍuöI’rmr™­Ă´ţň“)š,ŽC‘LěŠâZۊü–Ú,Y‰ËöĄRW&Š´B\ŃÚuÓ q­HhâaÚîŞ6šŹ•ËşIg–\frYž}q2Š|śXrYm%–şŰ]PMëZç]˰ůšˆÎ˘X–m‹K2šŸŃłüó5~Ą—'ɄĂ.â¤űŇŰ^"ˇšäb<ťń†›äृÍEĘĄ pHiŘŚŞťcĘGˇ´÷+„3¤˝ë]ď’o~ă;" ŕű+R… ׏—ľ ’Ť%؀T8W¨3QĆéŔ›&IeŤ Nj#Oţd ż˙űż—›nÜ+ŸřÄ'ŁPSËĽ—ŢFÍě\l.PâíŸ˙ůŸ5˝Ź#߯›BǓžô¤u}XÓŔ ďŢě” Î™DŻ Ôíľ‚ně:Cţ¨˝É7źçd­DŘ sö |ŕy$ü_™tţśj˙†Ó]ůěg?+ďxÇ;ä;ßůŽ|úӟNbĐĺ—_Ţěkî~ôůU™ž™’ťÜĺ.Z }ˆT;lűŽP>`żúŸţÓ’{ŢórÄňŽëdR ÝŃn"_çąOĎYmť°ëTçwž‰Őě ¤T5—W­6ŁxÓáQ§[y3Ž˝/ΐś9ţœ=Ÿ˙=÷&1ţĎçai={ÎٝŚÇńSçĺÂ~d~~śyÜjlžőŰEŮXđ%ź7|fq|=ŐŘž"Ö`0L;™ÇzťćoЌůţÜ7BÎÎćó3 f„BŽ\\ŠęJËYAěŠwž¸Źeƒ2É'J;!é)ČVVjĐD*e#“˘/–RŠĘ(jUˇł’Ššˆ6^’Ň’ĹÚҎ’ÚQ8Yľe­âZ\pďËtmű%śĄ•şÚĺ m‰bY|mŃ|lŢ­\֖˜L}ĺ$I"•$)ݰ˛ŸŮÉŕř…ňź˝ö{›ŇłRŇj…ą¸Đ>´ˇŽR^í}Ť­e‰]vIŃ'é/ĆÄućߑËĆ3ťoÝ97–śćSŞŞ-…jmČËŹúąíŽŞłÄ<—mŁ!fŹMˆŤ%ÎťMPÓA"›ˇˇ¤:™¸Ý‹yaŢľć˛Őžh>?Ígh8ĐĎď†%„+ůŕ „+•ßk/mIꕢ!„œ‰`?wŃEéŕÔË^ú ůÄ'>ĄÉ/ů~p-‚M‡Áv”Ö{ÂŸĘ†oťV“|wßě\›źŹ7š"öŐňx.|ŽEB†ŘŒ2ÍznĎkP^%‘˛&k,—HN.W\q…&eýŢďý^§„äZŔw ˆU(ĎúČG>˛“t2žWŹ&™´çОęwü\wă˛X˜vőí÷HŸŤľJa˜ćŰßţś&ÁĺégHD™Ă[DA”rŮńIęяy”nçĐDGČešž“R°żBŞ™÷’n`dˊĎôÚ>ßnňŻńćźřŮHŽĽÜľ}.×łŻ˘\FČIÂŐrˋ.ĐljáÔ_Ĺ>Â>/¤ŸŠrŘxďՒ0×Ł„rfCÁŒBȚ™”fV[9Ęîö›ŠŠ[yrYФ?ŤXúP/ěȘP%vA8$S2šĚŚEYÂ^áÄŽ!i6h=&˘I.Ą4§s*hľrY(‘˜ŚÍd­üÎfkkľrĄ+śŮî•AmŰmăMÖĎ)],n+"]90ntŠ A.Ť“|ˆ>PůĐ×âö„tąQĆb_§„ąVl´¨ÖŽ” – “A0łeŒĺU˝ÝÍžłíż(W&¨byNťx]4Ó5•jT'ńcü3Ƌ–„ľ0žÂA3ۧœěr „˛Y°ý „˜_üĹç­(ľˇ™ËžOo6:Ҝ~ß>Îý˙Ş/k— iˇźĺ-ľ”!JZ Őéя~´ÜůÎwŽý̛'6+—\r‰üɟü‰ž“äç™k%Oł{6œą™Nҏ,‹š‰.ËřňŽ ŸůžĄ˝EĘţľÖ%ľWâ3PČj(´ÔEÝJۊ4-$T=ůÉO–+îx…őuyŸűÜ[~ú§Ÿ+ŻzŐ˙“뎝VK‘a0Ä2ôu(ąÖďFî×ůýűhíqěýw´őˇÖ›mŽ&˘rÝBÖCž/Á÷i”í]ËM/ Ž…HŽ´s#B!d­P0#„˛ęIÄŃîČ ?!ڌškŚ^寲WF §+âÔÎĽ61,%Nš•éb&ř$ĄŞe Űä˛VÜą2šš¨e%#“PՑŁęNŠ•ĘkŽMZß&YŐŮ|U.Kʒvů˝ďcqŇ =ék˘fÓJ&˜YrY'}Ť˝Œ–ä$ß=ůt™čÖ^ÜϓËd…,ćÄuLŤ-őÍOJ. ýáóÔ˛lť°é’˜'Yb˜•Ż´>‘,ľĚľŰQUwĽ.Ć 7Ţ×Q„3 ĚgňĄä‚ k—Ď2ˆk>­›˘l“đ¤ÓćźmŮÔ2+w™śiRџͳŽ|¸"A͒Ël—ĽL5׹}Ő\DĐô˛v9t1sŇsŃ989ŸŃ|pt<‰ăDď'°ŻłäBČé˙8ŔdŤćKi*óՖą÷ǨĆdy˝×şŁěç×ŇŻŐ÷mâQH2[+áX!áun’ÎӝrŮŻýÚŻIŻ„ŹąSKŽšpâŃ)+xŚp&, ÎYÂ9]ÖľrĽíź­–ăyíÚE-ťmGŢDWżÎąâßžó5ͤťńůŘyôÚpńfŹŁ|›~żęîw“ţîoKż××ä?¤‰¸ě|œƒžÇÝtńčÇ'ŽŹŤáÖ2‡c|˙Ţv"׹—ŮŮšŐ­.ZńwŽçޟüóyńmn­•dŰű|řcüűfÚút‹BNŘÇä7Ú9WHҔ$™ŮsůϜ\ú—ÄňżçÓŰ{áű;n Á{ŽžĎókşšBČŮ 3B!ëČžJ‰r™%ŒIšş­­e+—ľç۲‡Ý$0K2šL|Hô‚8ä!“|˛ô¨ÂĽ,‚Ş:+šé\'ń*,ŠO‚Y["1źe‘Ľé´K9ú\k“ŹŹlŽ~…ĺ ÂZď0E!ݔąř{ë”.&Yş˜“$ƍ‹nöť‹‚Xž—K`őxBœO.‹}R‡ś›t×Ękݔ:9š\&m‚š—Lâ‹%Sƒ°•InŮząžŐícTˇ}â,QÎĽ;ź­´te5ś}Œm*֓ä˛VžÓšŠO|ÖmiNônŸĽëH‚I K~łyëňĚ$mׄ3ü˘ IWgš´a" 9=Č!Žôˇ˘8†č+BÎđÁ \ţoă!„BČ$ň1ű9.~…›Ś‹$™”Ě´çÇĐĆĎَ&•ĚײńH.Ă÷Y$™™đ–ß<ÁÄ2B!Gƒ‚!„‰édeҀTŻ(Ű‚^béGŻĺ2\Jţ*˛ä-Ľ¤đEÉG“Ć҉“hT[š0$X"”ĽoáďEŕś´)qšH•ÉCD§ ŐMšňY2•IMAbŠS'š,ÎßŃÄRĐbŸ¤ÖŠvFž&ą .+ИOBQ?AJ ƒř’ĽiĹţđ2&IWśsÖn?!šĚˇĽ3c{ĚuňÄ??ŻrŽGĺcŤIeGz_B!g7Ě!„Źˆ‚¸Rž|*3ŕÓs*ů”–đĘ/ŚrƒYŠ•Řü eĺ ĽM Kĺ+;‰PE[vÓdŞş›ŠŚňPťR9/Őǂřf béQ˜<ä‚čVä]ÝF™ZQÎ'­,.K”‘|l?ڔ§tY_˜|UK[:2O sQş˛ô7‘<ľŹ-ŁŮ&—I'˝ĚÚWg% ­ďlŢšä–Ëy]šŹ}MJéš —Ľ„6‘ŽÄW{§<ƒÔť^ióôąŸW&Đ!Lűš2ĄĎşľoU׊ j­ĺ(CYĚ$ˇŮö—ÉvAT̗1žĐ›ˆ–D>e1ßĘb1šĚŇőŇô"IÜ댞EÉ2v°nŁľDůPX‰ƒ3œź]4r›ĆĹ4B!d f„BŽŸ<‚9ţ´t§4`Ĺ­2Ś<•… `Ë\śÉeá5­fҎ AľşÉeĄte>m|bňVž$ĘeAsYČŞî‰ëő¤ßœlÍL—23U4'^ÍŁ’ŸNN é)ÝTpŞ‚œ4Š Gř/˃Qóű°yďQóšŞy›X3.I1–f]ľ(‹eýę\+ÜM*ç9.ńŠČd*™\ÖĘ_*>ĹţČĽżjEM‰ĽÝZš,¤¸‰öĹJšĚu˝šő0ŹđúRŚ›žžę5ôws˛ŰoúşůV‚Ÿ˝ž%ŻľeB1oô3ÂÍĎŚ{ľż—ľ,-daiĐ<7hŚ5*‰ŠI䋥[MôŤ“xXˇÉv)š,HfęşĐî ¸Ő´:•Ëz…n×mYŘLÎK qíşvŮGg<álü3E93ąRCěČÎp‘2O0Ë/ŽŽ— `FČéEH.S‰BÎvňrBV҈Ç6B!„˛ěş}J_(¸ÖJZŽ4Íl0d7ţ¤ş)‰q1 R™‰eöaě ˝h-×ix-‡BČ8Ě!ä,gŁNBX—ŠL’'—ľe ŰD(é”'\‘\ćňҎK ĘÄä2—•L‰Zą$Ś•UôąÔĽÓ”łRú=NˆœF*C_ښ­ŮéŠć„­×ü,šç –š ˜őBĘV*c)–˜…śC. ‚ŮPe§ <-/W˛4(›żTx5A˘+\Ď˙\:ô1ľ,ĽœÉʔłnr™¤R“šđä:Ée–fćǒË$NŸ'œĹö`ę:UIĘšÚ&—%ÄuRâD­,ooâCňEĆ ™‘˛éϞ̠ż§ńs}ý˝´\ËâňPf‹ć÷Bâyn¤ňC'uZÖPF3lŁVF3‰ÎJhé˝}ÚćÚíÉëhÉe&ŠősüŘt‰Żň"–ąt&!›ťPhŸOK1;S°‹•`Ň~čXîŽ%„œVűlâořŒc@ƒ3B!„B6ŽVłöL4Ăyš%šÍÎÎę?UsťY_ÇâAřފG¨ôR¤çÍł˝É˙č×k(–B™݌B9*ă'ăÔŇĘb>Fcš(|•E“ËŠ$ů˜˜dÉe)Ěš$÷¸í%m)Ă<šĚ¤0o×-•hňP+TYĘ~ӎi™™ž–Űú˛uK)ósH-+Ă|J†$•S IcĄ)ů9VH4 2ÔôÚ袘U4ď_6ďßSŮěđb%U˛ŻB˘Ů°iOópU+ˆ‰œ%š,źQřOG̋%4“„ć%íڒžeLKÂX&˘ĺ‰Z+’Ë2 -/ŮÎż-ĺ™ŇĐâ:ŹrMB™Đ8W6?§›>ęk?ooNˆgKMˆ ŰĹúűťBWEӎž,-ĎĘĄĂ#9ph$űŒdqiĐ´kšiCŐöC&vů¸ŒEJ.+ZQQ‚ŚËĺ9C…š2<:bŁoČ´N\[śUeż: nU˜÷(n§ő„xňüĞR!§7ăw|څÁÓIÚ_+ľp4ÁŒ˛ůOĚ˙ž—´5Á wžŰţŠw°“3ńmÜ> Ź›™™Ii„B!„Źť™ŰŽ[çׁóiě'ŽÁëüIó̟ăľB!k…‚!„uăcŠ?Š‚&S$iČŠPBĐä¤:Ś6YrY(]éRŠ”Ée­đR¤V¤omR—’“Š;ą4Ś÷˜SŚ{2;šlFśĚOɎm}ŮŚ‚Y(Ďx,çPÎ%LB4UţbŰYjšĚŠ)/˝˛jÚYĘâRŠ2JgVq™Šw&ľ V&׾‰d1őͅň•“R:–HGd˛4˛e4ÇSߏŸÇN2ƒ„VŻ’\śržUŃę$k!!ŹÔ¤¸Š~ĄbYYN5ýޗí[z'°żĂXčďŮ$ŁU2ŐʡŞ&š Ăćg-ŁQKh֝ŤÎRó\W ë$łĹ8˛ 5şą˛˜>%şuĺ:I|Q@ô&cÖŠi^ć”röß}z:0.”Ř]´vWě$IĹŕ…JB6'GúlÚsöYÇž ű,űžt´×r:c’Y~šĚHšíB!„ő2ţ}ódżŻ1ţű¸ŒĆŒ!„äP0#„˛nŹ„ĄÄgü/%—Ĺ䊐ňԖĚă˜],5˜Nf|[ŚQ“ËT OiÉ͔ŠsĄŹäĄ‰;•‰>¨ľ8ŁŠ ç작Űű˛už/ł3ĽJN(ŰŘ+ł˛“ ćżeN4!mÇÖB—{rxaJöĘMű = ›v šeńIúŇţp’J‹ş˜–J]úXbÓg%+“\D&‘ś$›%kyůœŹ8qÍEžnÍ6MÎRş|–(—ËWH-CšŘ`ԓéŠ~łÜS˛}+~†2˜(y2ű{;ú{Š'OÉÍűrĂŢAÓßK*˜YŞüe)j.ećiŰFŁ,™Íd4$¨ő ]cÎ,Q./Ýj˛šÎˇ É}>öŤ ŁV.#„œ˝@~޲e‹8p sÁît¸p‡öćr™•q°çŔřrp0žÍˑîX‡PƒçćççÓţŠéMäLeŇ Ÿ%ůá‘??^›B!„cĺT\ĘoŚ „BŽ f„BV°Ś›Nِ žM-+3q¨đ•Ę0f R1…Ěł6ĺ)ˆbĆň´Ž"K…rŮ{‡’ƒx¨:ÔĚŻÔŘ蹙YŮžmFö욖Ű›ÁüšB岓„¤Š"$vÉló˙!ŢƒteÓÎB-¸P*t4BžU˜2,. œ˛Úľ‚WXÂIrYxŽö]ÁĚú.L›ţOËtâ#ˇ87$—ÍÎÍßB˘ÚŠŔ{ĎĎŇď;ŮşĽ}JšîĆR^nÚ?^QKŻ ée†IOuLËB9MçÚҘń42/ݒ‹y™K76ďŽ\֖éLóŐ÷őiŽ˛ŇŽĚP‚e1{Ŕl’s÷LɎ­=™‰)q›Łż{Úß{÷÷äšë{˛o˙˛, s4ŒŰ’H,ąš§‹Ń 룗ĽńYš\Hň’˜šŢW„Ď^_ű,]/–ĹŹőé˘PAŻŕĹBÎ:ě"­‘fvřđáM].S…ŘX*/Čeaď™'š€# śs žÍĂ$Ÿ}’ š'ÚţjaaAo äLÄśeŘć!˜™\6žŕÇ@B!„r,L’ÉNö ă‚!„r,P0#„˛nTHRĄŹHr&7šÜ¤)\"ńЈ‰eĹX‰‘ŒŐ–'ÔůÇéŰR†.&*ř˜ćeW˘SŻ/słÓ˛kűœ–ĹFXŸĘeŘţKëĂ(—a{Ž,­M.KwŠLćă‰;!g&mq€Áěůůẏšf†G^Şëd3Đ6ˆe(ĺ‰ţ§§–­vA”& Ů|i0#˙̚TÓŚľ†ý’°_8•ű+BŽ—ńä{˜T–˙íhp„B!„›áÜéhm8Ym<ŇuĽń6ä稄BN>Ě!„Ź™ŐN(\,] ĚmĘSH0‹'E(5hb”•š´ŇŒuJ.Ť“ô”ä˛(đŕ/ľJ;Ň&—UHV(›Ž —íŮ5+ç];ű˛eŽÍ Ľ2űýRz%–!,ß°YŚĺČŇrĽBWQzM⠁pYşX\Ö˂ó)lÚ˘X™\féeQ č”ĐԄ81鯛\™ń=™šęËö­S˛{ǔěÜqzőˇ÷ĄØČVŐÍßꦟC§r—ń§•ĐŹŤ:ő¸<ĺŹhKžŠkÎâôu˙šgK—Jb†“aY5@„'˄œšŘąźÔţ†mH]řťI'łtŚ•ÂÔTŇć'šP6.ĆQ&!äĚgłîŻ9^\çťx8îAôśt2B!„B!„˛ f„B֍•°´ô++uiOš´ŠŚWś˛˜ JŤ0†„ŹQ­żIŞ;˝•ĹLÉeŁ ; †A.Űą %1gĺ‚s§e綞LOšM• u$ŚúNvďě5Ë„ť˝ű^Z†N'[ć¤Y‰ýˆž(˛ţËä2/mr™´2ߤ䲪^Y3HUá}´¤i-iZ›~Ôô÷áČV=™Ÿ’Ű§ĺüsšžßzzöwY„Ô–ĹÔę™ărTݖĆTąŻéďĹ%׏ŤBú˝žlßҗóvŁ4ć™Ńß()şÜô7–cy9~*áčyŸĘƒZ9×ÂĘ˝cÉeqűŻĹĺZńOKÉáM}˜ˇ­l˙ĂQ˝ŚĎËerf‘ [yI.ěçd|ţsad\Ďňç!g6›qEČF1~L›tŒßʍB!„B!äl„‚!„ud™ćQ,%cĄ`(˝he‹"ŚoIžĺSę™ Z›$%1ĺĚä2”'ÄkęŞl^ƒ˛ŒS˛kÇ´œť;”Ĺœ;͒´ĆŃd­Y¤„őäđ”öËÍjYZö2;Óü˝z/:z1őĘÇҖ.%żY*™•!m“ËÚ÷j“Ë´~i&—ľë¤Ňu’Ë––ąţJŮšľ/ťw†˛˜gJďŹú˛°;¤‰Ý¸ˇ’Á ˆŒâT }QEš,ös“ËJ-ß*I(Ó~VŤ,źG‘÷łH*ˇŮ–­ăk„r–ą–ň\§J,/‰9Ţ>Še„œ]lćý!ÇĂ$™ŒŰ0!„B!„BȑĄ`F!dÝŕú<’˜¤¨crYo4šŹ,ôQÄҎ’„\ćłRšIŽŠĆž1M“Îôw'ľ”ZsnnJnq.ŇËŚdfúô–r°,çŸ;Ľ}rđđHkYZ-•éűÍÁť‘ )qФhVFSŤaÖńgœż&jĺ 4U\Ś_„´áĐÉ y ‡…Ěϗrîži9oϙŮßâźjú{ieA‡MŸŐ1!.Ô´t™XÖ+KÔTźôqJiŞô'.%œľr™$šlT…ä˛$¤BÎ:Ʋ'‰\§j {RŰ&MĂÁxBÎ6óţАő0.TݎoB!„B!„ f„B6+w YFą2”š ÂS’ËœkÓ ę:–k5nňÔ-˝xŃ4ᬊ2Z”ËŞ bOOfg§d×ö)Ůš˝/[碎vf€r˜XŚĺ垖ŁDyĆĺÁHKeş9/!°Ěľ?]^˛Ź[ŇĹ[?GşŻsI°˛˜uœ/U˘ÉeËڧz˛­iˎm˝3¸żą|S˛<Źe° ŹŇ>”ĐÔM¸˜^V¤4ž:ֆ­ăŁ-‰)iű×Mş–îö_1šŒłěŽĽüÖɐQ'˝çxĘˑŚ'„œ™lĆý!' nż„B!„B!“Ą`F!dC°ôŚÉe&"ĹçW&—š(ď„ä2§ł˛„UL.SQŞ*d4ěËtZÎÝ3#çŸ3-s3eVÚDΰLsłĽœît3Ş'rÝ (•Y5}ÚôqڞSÓâĚZ!`ź?\,=Ú&œůś,fĺ2‘”Ř5‰8„ÄŽĐŽóΒţĆňçÚJ–—*™ę¤…É2&’1źÍ'Š,>¤÷ʸýťÂRâ|J.i)Ů`ń™ěG9ű°D IŮůßW›ćDbwž`” Ę܇r泙÷W„B!„B!„“3B!DL*2§,BZVËB Á<šŠMߒLZĘ䲘\ŚâSç‘œŐ“™™žŚ—íÚŢ“ŠŠ0Í‚• … 6Tú;–mjŞhĽLO…ŇŠG˄eŰšŁ'˃Znźi ËËŽyÔŇkŽŢÓSř‚œWÄT˛đţĄo˝Ĺ–%@Tŕłţ6!Ędž\Ä2¤m †ŇźŻ“Qĺ´ÍHŠ;{úť/7îíÉÂbŮôE)uŃ|aЉdŃá‹rYŘŽcKŇö\ĆπM݉p–ň×ŮţEE4_mŽ>%„œŽ$f))čD2)ąěH’eBÎ6ăţŠB!„B!„rrĄ`F!dƒˆÉe˝By EMyŞbéĹä=š˜^ä(•2ąL“žjK‡rRůž¸˘/3}”hěÉś­=™Ÿ ňĐfËB{Gríu ˛wď’<<Ô6îÚ9#ťw…ÇěěÚżx–qۖ°ĚĂáH—ëŚóźô{&0šÎ{{“Ä4N˲Ź4f™BeŇ0­•!őą\)€Tvxĺ1 ™ę•˛e>´áŹęď汸ԓѨŇí6”˝´ôŽf[­|H% ­ˆĽ3›íż(T3šĚÚ’Ë|7š,Jhž.˜DČYČąˆ'KäšT3ŔǏ9„łƒÍ¸ż"„B!„B!„œ\(˜BŮBrYӛŠ”¨U[˘–ř$0%ąĚJ;ú6š )O–\f)\^ŠćďĽô!—méËöm=™›)š˛YŔ2GľĘN7í]’kŽ[o\”C‡*-/W:ݖŚýkžĐGS}”n,t™—=9´PÉҲoú§[˘ŇÄ%‰Édš¨…2ë뜹Ҍ–Ľů´3ŤšŚ..᧓ůšžlßÚ“ŮłŞżKŮą­ßôÁHö¨¤ň­JVëßJzˎƄł"%÷š´Ýç q&ţa:üďYL0#„™“%kŹ&–izŠ$„îČéÎZŽ„B!„B!g#Ě!„ŹK.ë'—YŮE——ĂĚä2‘ą2ľŒF–¨Őڍŕ(‘Ů+bŠĆ}-¸i.ůGAnaa$ß˝ö\w=d§%9th %‹˘Öt-”kźĹůóÇÜn,+–yyPÉᅡ †mŇÝPĽQçé|j•rlEžVHŤł2¤m?ÇWz§Ď ^×厭gq/‡ţ.¤B)N+;šĹ˝A,są$l(YÚ-W QéešŹ°éœ htË!ĆjƒŮ§"ĺpźěݤô2žrö˛™öW„l$ŤmۓR> !„B!„BÎ&(˜BY7¸Ä^Ćô&M3‘° §ŽƒŇE ŮŠHrMK jr™Š8ľ OuDgőĽhţ]近 ľmK_Köz›ăž&i C’֍7-Ęu×-Č HŇ:4”Á JӍ,•í8㹏(Ůxxą/×ŢPČ`IdyŮËrżéŰi/˝ŇÚŲ"+‹ŮI/‹ýŰôuľEŸuQ,6óBŠ™í‡÷=kű{Ą/ýKYX*¤ŐQC{UĂ4NÂ6 Á,/‹Y§í:ŰŚ]řœHL.ƒŁVŐÝň¤„ł›Í:hÍÁtBČ8Ü/ł nó„B!„B9ŰĄ`F!dý¸, ˙ŤcÉF1Ń)&—Ĺň™EŒÓ˛ňËôQ‡’ƒ6}흌Feółl^[ČôT!óóĽĚ͕*ęl†ŕMŇZÉ5ׄ$-“¤e Ým˖)-×XöŠcn7–Ë<ß<Žľ°čdaÁ7ýXGa/N¨îR,Y¸Ni̐RĺB?çrYčďAÓäĂ uóQ[g}7Ë>ŐrăpRôŽVčwŃm2$—*OZ_§D>ߖˆşŽÂJ eJ­|l*kJ!„B!„B!„B!› f„B6 ™LžąÄ&ˆ7eĚ4ĺI2Ů)&MYĘpń5ž*šżÍ_ V•2;SĘĚt(ĹyŞë j’Ö¨–Ĺ…‘Ü´7KŇ:Ü&iiéĐŇɖůžěŮ5+;wĚČTż”cý1ŐôÇĚT!łÓĽ* -—Y^ćfkŠ!Ašúf%HU.+ZšĚÇrĽľoŐ2+ŁţĚ—¤iż¨4Ĺţ}€mŠiŁş–^b$žBˇírYĺ2Ko fÚňtˇ{—Éešp–’Ö„B!„B!„B!„B6%Ě!„Ź :JL /Ńh"NKš€ąf„×T&ăˆ&BE GŁPéPół=Mđꕮ}O9u u ˛ÓwŻ=$×Cvş)ČN$­Ś­óó}Ů˝kV.¸`^ö잕ééň¸e"”nÜŇôÁᅲyŻZžŞĐ缌–I+—išVÉLüŤ}ÝI. ëGŇ4uň“H sšŢĹţý}¨ŮöVľ GU,uJbę6ţÖ6ý'š(铔——Ć”řŃҰͺCűńđ4Ě!„B!„B!„B!› f„B֍ L•WŐAŽqAÓ4­2K.łr*—ĺÉe>OQ@Ă PfÓűđłč2;[ĘÜlOĽžS –BĐââHnŒIZ7NHŇ*Uvš’=ťgäÜsćd×ΕŸŹŽĚsn6$š^Ép„ś„ž/{ĄTfá\[Ž4KÔň>bć=95>Qé ˘Úpäu~h#ރýúĂ č§ÉeNK“q›6Aϧ”8`épśÝ[ÂY×ÖŮhBz!„B!„B!„B!„l6(˜BY7j ËHópY‚”Z„¤¤%/%”jÔ˛€UĚB"TŁ$–yŹë˜¸U…Rštfgz*=! ęTĘ8‰GrÍ5‡äşëäĆ IZĽ%i힑‹nšMÎÎö3ÁNŽ‹˛âčČ`H LŠ`V´‚žžQhoíĽM.‹Ď›\féfËËľ,-…ő‚äŽöw§żS˛ž+BJܘ\–'—YzŸ‰oA.s1šLtťWšŹbr!„B!„B!„B!dóCÁŒBȆPÇ$&5…•Ĺ̒ËTŁQi,ˆ5&ä¸(•YʓmUUxŕߘĎôTŃ<‚XuŞC’ÖMHŇş~An¸qQOHŇÚ2?Ľ’ÓyçÎëĎ­[§Ö•¤e`ţ(ůˆ~@Ÿ ›ÎE“Ě,9.ÉeľOňS›Z–ţŁ}ÜŚPfsiš–ĺAHԚrěo›Ţß1“,ÉzřŻnÇ(˙bĽGCj_L9“ JŚäž(WÖ1šŻ(ÚÔ9B!„B!„B!„BŮlP0#„˛A´ YE'šLÔ~Şë6éI“œbŇSK5†éD*ˆ8Í´ŁĘée2‹Bdş_¨ôTœ˘Šh;d§ď^{HŽIZ‡’¤…rłsý(ĎÉşˆ4ŐôĂTěôé`Ô<†Ą­VŠ1­“ř_KÖBš–gŐ>ˆ|Ë/ƒA˜ű;0ŢßÚŻuH"CżšXŢ5ĽĂA+L|+RzYH‘ó*ďbiĚ W6ϗÍô3B!„B!„B!„BČ慂!„ ’ˊ”\VDi ˛“Š8Ţä2I‰eEҟ$–„ˆă‚ČS óę÷ é÷Â{œLđţš,Iëú5&iíɒ´6ŞÉ˜WżWčżCrŽź&˜…„,K2 ýˆŸ.XeĄqV>łŽÂ¤'”ÚÔ$´šýmŒ÷ˇ&–Ąß*§)|ZxÔ׊MxŰ2Oﳲ°>$…äž:É}á5Í4E[˛”B!„B!„B!„B6Ě!„lHxŇä˛^Ąée”ĽaZ1Q+ýž•”XvPSËBzÖh䵄`]—š^0Ż^/ĚŰć{˛€¨ľ°8’kŽ!Ik÷Ž™í§2ŐŢśBŞ[ąDą'I,Sš,–-\[‚TźO“=PŽq¤%I˝ö9ű;0Šż!=Z™K‘ ™Y‰KËzYrŸ´Š}ËŞŹ,lKâľž*˜`F!„B!„B!„BŮ´P0#„˛nTb*‚XٞM”gęXŽ1ÄL Zéĺ2+9h˛SU…˛‚ůü-MNRŇÓń$i{ÎźĘN–¤ľŃhBVLÇŇä+”ˇŹŁgépQŕ‹Áe]šL$&jĹD9+ńhóŠ%ĽËążWöˇśSL2C:œWńLű9öWŰoQšŒĽ1ŤŘ׺ŽýŒŘzb€!„B!„B!„B!dłBÁŒBȺѤ§2$—iIĹ,ą,ÄlŚ)$ 8&<ůŹŹ#žFUĽ’Y*őčó÷pY*”œp,IëÚŁ%iÍőUrşĺ…ŰTz:IZ-.IcŃÍÓÄą: bč;-ʈibÉҢ0šĚĹ4-‰(—‰tփľ™ý şý-QęK}fSAČ+-šŹm‹bśmM.l˙6ßP?֟Ěx8B!„B!„B!„B9(˜BY7!Á)Š8弤–yMk*bĘYϓ´j¤–ŐĄ„ ŚpYéLɢNRÂÚ5Ö˛¸’´ŽËd§‰IZťfäÜsc’Ö–“¤Ő!OťňVśQÚô2'ą4f›^&™Ď’ÎbZ™ČäňŒěďŔ¤t1+Ý*­4ŠŰwVÓJcÖYYLáěż&úŐţä–!%„B!„B!„B!„c‚!„ jXU‡ßj+ŐůFÚRƒe‘%<Ą,˘&—ŐQ, $Ÿ'„<˝Ç‰E“´–Ž!Ië–ŰdWósv.&iš×ĆIó 2SöŚVł(RF1ą, O!.„ruÎÖňžÉéÖßů!—őbrY.—Őž-™ä2çZW-“ý°í[Â!„B!„B!„B!„lF(˜BY?)I+ć–Ĺň˜!­LbrYxhÍą„§”ň$AÚńŠŹcöń=NT`•ĘnŁZG˛÷ćŎě4ž¤5“´Î9g^e§­[§’ět˘ÉËXúôŸH™BYĚ,čĚú: Oá5qç'ö)űťmg§ż mÓÔž˜Ę§Ďc;n~­­ôĽFÄ9-WjÉr˜žŻ­|Ś–ĐdŠLB!„B!„B!„BČ慂!„u5ŚÎE™,ąŠ, •„đp…$ ÓjrY%—5ŻéAÖńE/3ą'Ęk()xâ„'ݞÓ5×’nXC’Ö…Űd÷í'îD;BhŁII~,îÍJbQÎs2¤­Ô§+ŔľĺLƒŐm?űťmă¤ţÖí´,š‡WÉĚÚ˘ÓÇҰy‰R•ţŹÍuŃlűŻâg€B!„B!„B!„B6+Ě!„ŹkŞZJýIžî„§R“Ë\”ĆÚôŚZӜEL¤Âtľsł)ĚBŽWI­Ü@ë)%i-dďŢEšţ†šiIZ[śL­HZ;‘@řB?Œ'^Y Ć">T.‹ńf*‹EůɒËBŕVŰîń%`ŽÖß.+‹i2_ |!M.$œ9‘”"dĚ:Ľ÷řB¤„B!„B!„B!„rüP0#„˛n4‘Źöâę:%6•eAh2šŹŇÔ&ˆ5u’v,yËć5îáoÑW1Š,Ë(HmTŰC’Öľ×ęČNŤ%i]ˆ$­]'7Iˀ‹4˘üŠ÷ĚÓËlšZń)śŃÄ'Âu¤łöwŕHýmŰ($4q™€fIrř @°,MřóiűDzVI.#„B!„B!„B!„Í 3B!ëĆJ*âg›Zć˘\ě2lBŠS2›Š˜e%MşÉ&üm8Źe0ôŇď{DjÉF€y.%I Ľççűš …$­Ý§ IË@? Fľś;—“Lę“XSːĆnˏ˘Oăt>+‡)ŇIç˛÷aŻŢß -?jýěCÇí?$—Iœ„ˆfée)šĚwĺJB!„B!„B!„BٌP0#„˛a@°TÖKÉeA eë(Ąő JŠ8A{Ň×ű1‰§}­Č@…§ZfëR6´˛Ó‘’´LvÚł{V.¸pŤěÚŮ&iß)OƒZ–UxŠĚ+,Zb™´‚Y.–u%­ś\c“ĚŘß]VëoKŽ˘ßt›u>´ąpIĂö_Ş8ćb?‡äž*“Ëôó‚Z˛u‘KB!„B!„B!„BŮlP0#„˛n4,Ś6•ńŃ&’a‚Zꘪ•ľ˘\VdrY-ӝLŠó¨ź,/×ÍŁ’z~}‡.ČAšט¤Ůéœsćd×ÎYŮşľŻm:U.úfŠiăróВ¤’—eŁd&húĐŇ˜t= kIŇ_kŠążŐű;Hb(w‰žsšŘ’ä:Űż }mr~Ś„>ŹüĎĄżÝx•RB!„B!„B!„BŮ4P0#„˛n Ö@˛‡–üCšF-YY, 7áאî„˙yďT.ƒvůfTŐÍ+’óš‚ŇâRĽ˘ÎXEÇcBĐâbHŇş˛ÓŢՓ´v#I낭˛k׏ĚĚŕe¸uź˙zUHŤB?˜¨dé^1U+%—Ĺ>/Š6IÎÚRĘbW6sœŘ߁Iýmí\ćbYĚB‚0ŠŠeečs˕V*—ŐúÓRĐ —ő Vƕ˘ëP!„B!„B!„B!dsBÁŒBČşąłŇä2‘˜ÔdéXAŔŃéLz*‚€ŁIZqúŞś‚ć–…˙BôYPŃg¤b’÷r\ŠVx-Ę4Ţ|ó˘ĘN7Ć$­ápe’Öľs׏lŮ’´N%! Źé‡ĹŚƒřRĘbiK‘śüh,ŮXd%U9‹š–wŹťâ– “(ěďUú[ŹY>őe*‰‰Ô˛˜\fëCÓřbYLëk]ž-WŞ hYßB!„B!„B!„BČfƒ‚!„u7&HcáߚŒU[‘ËPBP§AŇYŃ OľĆiľÉeĄä ÍŐ§Ä3Č= •nĂŃń'jAvşţúĂZŚqoLŇÂ{+’´vnŽ$­đŢ^…§Ă‹•>Đ'Ądc+ňŐŢEáĚĽ’ĽŽČKcś"_X–đZ}MŃĘjěďÉýcâÄÄGíç2ˆ•X–2&—é6ëëŘ×u*Aje1ŁŁ’Đź—ą Ľ„B!'Œ ˇťć{ÎH^űÚ×ĘŐW_Ý|g[’^ďȗ‡J<33#zÔŁäĄ}h’ĺ !„B!„B!g…B!ëĹľ WZz1%‘AzŠ“­ôTdĺ2u-X§´3ˆjE‘Íł™fyJ.-×2Ö1!íŘ jšyßr’¤…ů ]Sý˛MŇÚ3§˛’´ jĐĆÁĐ7Ëú`0íF˙”ąŻrY,ďgúS—ŻŽŹëÚŽPŢŻgOîo Â¤HJăCr™•Ĺ,˘\fÉeu–\feaË"/Ą?#ľ§_F!dÓĘpŸz‰H™žGʍÂÖëp8”üă*šš‡ë&>ô{LYękŢőŽwĽyP2#„B!„B!äě f„B6 ď%Šb’•o ƒO˝2”C,ZMË4"áŠ2ÁĆYĘű††đ­: Ođ{ĂZKâ17WJ˙ľP˛ńđáĘNŁŐ’´nąUvn˘$-`Ľ‘(†>@š(“AnBŕD7šĚĽ42“ËňT9‰ë'h˝Śłű=ßôC­ďŇĐŘߓú[ű­đ*ŠőJ‰ÉeE(‹ŠýćSŠRŸ'Ĺ?ąu!1šŻéŁQUsŕœBČŚ#•9ĎĘ:o4š ä˝_ńžß-!Îă'…ŚcjjJîvˇťÉ‡>ô!ŠŞ*|oń“űWď iÖ Ěö°‡Đm‚B!„B!„˛9Ą`F!dÝąL:%.UpŠÉN ĘTÓŚˇä˛ ĺ„×X‚“şjH1Ť˘ …§‡†2;SJ R”.&{At5 † Ô+d~nJv횑={ćTvB’–l˘L”Š4EËľéXš,‰Oq†&—Ĺ*¤ĽŚúÍ|šÇ``źěďńţŇŁ×Ô¸^',öYL$łńYK93ůärYKhćIg„BČÉǰžH+sA>š”fĺ7¤aAlŇz=MČ*b˝őü}ńüââbúžˆśm6nźńFšćšk´˙ślŮ"ˇşŐ­t™N„‡žůň—żŹ}‚ßń^;wî<ŚyŘz~ĘSž"Űśm“ˇżýí2Ur¤ÖÎĎĎËsžóšě˛ËR"-!„B!„B!ä쁂!„uƒ1@$1IQ'yЌ˛žđpE7‰bÍrM*‹IJrăz–đÔžĽ÷6‹ĽlÝŇ?SĘąĐď˛cnj–<ܡoI۰e~JvóĎۢĎi’–É@˛9ŒÂrăß -59ĺdz*ôńJšĚ'™Ďď)–w´iB9¤‚ćÓop‹vŠŮßÝţFŠYŮôOŻű.{ÍśKŠšXŚíŻť˛¤‰šhVK›\VŐú™ ë†v!„SŽU_˙ú×ĺŻx…,--ÉM7í•óĎ?O~üǟ%^xK"’‰`%˜aŻ{Ýëä+_ůŠţ~ŸűÜGřŔŞ”5Ξđůťżűť” őźç=O6Ÿţô§ĺőŻ˝~Ç˝ä’KäŮĎ~śěÚľó¸JŒ ôŢë›ßüŚţűŠO}ŞÜ˙ţ÷?–Y$‘템ÖŤŹúe ĎĎÎΪܗŚ%„B!„B!„œUP0#„˛n0ĐyČŐ>J5˘BY™§Ó˛żcG’ËzáQŚä2I’X(-śçÂIÜţCůL]ŇnűHűk“Ë8JK!äԀăׇ?üaůöˇż2$q}ä#•[Ţň˘4‰Ó!—™¤śwď^ůîwżŤ˙~ŰŰŢ*çwžÜńŽw\‘œńí[ßúZŃ|w˜“͈•ď<Ů%<­t(şëXŢ:ďßíۡŤ8ś´´|ÄéçććdzzZ7AB!„B!„rö@ÁŒBȆ`Ľ%—őÚT­vš đäĽ41>Ľr™ Š4ä=9çĽŐÎ()¸¸TŤřƒ†3ӅĚ͖ŇwÇ&đťIeľ ćşv{.bj_áĆś˙8đlĺ4íóâă@4!„r˛ůÚ×žŚ’D%ˆF8>|Xnžůf}îNwşS’ŚđÓD4<ƒN;u^x%,‘tľšXe7">$yâ;cstÔRďßű呏zäÄR™Gb4i[–——užh Ú)jľc,–Ů^ƒßńž˜Ż[í5XćC‡éűĺď‘/ďj _Ö_ř đ~óóóš 6éý0Ÿ……}ŕwLgëČD2{ÖÍąbëËŻóˇjšr+“ş¸¸(;věŕ÷B!„B!„BÎB(˜BŮ0(•’Ë´\Ł´r T§ 2ŽtÄ gN¤Ş*EŃđטpáËô^˃ZnÜ;ĐżĎϖšŹu& tů($A캥YN<°Ěúś?ĺdjĘŠÄĺĆúZ˙ Ś”8’%eŮ:0Aގ˙†ě4ŐsšĐ…qĘ*žßŮŐßËúČű[%ł2>œ‰y!…ŻŽCąE܌‘ ŇËĺJąŇ›ľ&¤Ľä2 ed5áŹ.˜bF!ä¤I R¤'ČRwťŰÝôřţţ÷ż_ĽŚ/ůËr‡;Ü!Ś–…ׄ4ÚJ峏~ôŁň•Ż|E5gff5ě.wš‹ÜőŽwUyjR˘– ăˇG nTółůâńţ÷@.žřšňĘ+ŰマUŇľnşé&ůŕ?(_üâőwoxď[ÝęV*ČĄ=łröíŰ'řŔ´ý×^{­J_ˇ.¸ŕšóď,÷¸Ç=´Or™ Óá5HwC˙@Śťő­o-÷ž÷˝“ŕeÓ[R›ýţo|Cű }Š÷ĆßśmŰ&ˇšÍmäîwżťÜîvˇKÉgĄjůä'?)úЇ´<(ÖŐ9眣ýrżűÝoEŃcÁ^‹÷řÄ'>!o}Ë[eáđbóˇŐżŒŒ†ľ|ő+_“׿ţőň˜Ç<ŚYGS2#„B!„B!ä,ƒ‚!„uƒáĽ"%—9}¨ďdr™iZqŹ+=š”đ¤Ó×mʙ&<•>‰PĆh䵌ażWČžm}M֚)5ÉëL"d'KÓ:xx¤ňţ› ^/™4V+us˜bRHH‰ëĘe–"q:$“ÍÎşćýCGą=gC/ŽŢßZB´WëCˇä¸}ę6í˘(ć\Jíłţ:­mӖ\ćBş^Œ×U…P0#„rҁá ßúýžĘd™ŽžújŽ Ÿa”Ź4 Ó^sÍ5ňŠWźBŽżţúŽätđŕ!ź mČ`ű÷ď—?řÁšŞŠăí7Ţ(Ż~őŤĺóŸ˙|§Ź$^sÝu×éß!u=á OH‰mč‡7źá ňŮĎ~6•ĽÄ{A:űöˇż­b-Cţ !fĄú’Úwżű]ůž OzғT3 ~˝ć5ŻŃśçë íBş\.°+śĚ_ýęW›výěťyšßj„łZžř…oÖńßČsžó]G„B!„B!„ł‡ľ_í%„BVÁu’ˢX#Ajň1*”xtšôT”!š ڍ•4'”mô2ŐÇ §—||Ď›ů\Éu7.Ë 7užNw°,X&,ŰĄfąŹŢŇ>J*‰l+dë|‘$/Œű†4˛8™“NŠF—•ĆŹŁČב¤š ŠśuK3ß-Q\‹œńý˝űű†ŚżWͲúśżýŘl‡˝Zúe­ -(Š˛Xœ¤ˆÉeúČŇGBʋŰż%÷…őJš>GˇŒBČŠr„%‘ )ZxXÉFşěëŢ÷ž÷i☠řÍ|&öŠO}*Éex’Ń.żürîţíßţ-‰[čKĂŢ f˜×šçžŤ2ŮӟţtšímoŤƒđIë˙FJ|&’[Ţň–rŐUWi2Ű{ßű^Ól+x ŢëĎ˙üĎU.łż­e^hÎ ×ß$Ż{ÝëRiMB!„B!„BČŮĚ!„ŹK0+Jזރ8f‰e|Ž,Úä˛ Ą1ŞRšŹNrY(KË?6 ‡˘IO׳¤łĽĽJöîę<‘¨Ľ%ű.ŚC~@F ˝ě?0’÷uٰŒuó÷…ҘHCiĚŮ'3SAóąôhʊд)q–Žĺbšœ%ÂI'˝Ě’Îʲ–ᨐ~żÖô8ôˇŽŁ3šżfý˝ÜöwÁšb}ÔÍßjIRžH(ńeIô&÷iWŒĽńeÉešn&mr_e˘ÚńUš"„BŽ |řŘÇ>Ś2ŽIW\q…JSŕŇK/U™ Ńż˙űU˘2ůČRťÄ3”kD™GüţŘÇ>VʐşĺT4›]ľ .ÎmÁOjHĂŠ_ďzם4yl5Ŕ…˛˜m˙‘ůšăď¨˙†üőҗžT—2ÁĐNČ`ËpSd˛G=ęQň€]Fş—'=#ű{_Óß75ý˝o0Ą4f(Ń ÁL{d´ř4yL…żD’Ë$Lg qQž‘ŹŻCiĚTśŸúe„BN&  F|?¸×˝îĽÇ9|¸űÝﮉ]řű'>ńIyÔŁÝ|§(5ĹœţůZîÓż˙ýďW ˛Őyç'?řƒ?ŘI;y )]|ŕĺMoz“ W˜7¤°Ő@r™É\Ðü…żŮr -̤°/}éKúűž}ű´Œ'@2äą/}éßő5–<†Ÿ˜/ŚCŠJ„˘ Ś-×ýďšč˘‹Ňż!ŕáń‘|¤Sr D'ć‘ ˛Ä1´ĹúĹʀâý!Őáçמö5ý^ƒe€`fˁĺDéNĚ×ʖ+7ݸWK]š\ŽľÔćáĂ ňšĎ~A…ž™™!„B!„B!„œůP0#„˛a`lŞŠqLľ%—…§PÓ„ą˘Ő OuÝŚBĄ€s‰×HÓjˆ<=”&”ć?„Jg(W1¨ˇw(Ľ4żľ§)_˝Ó$Y+OŇşţŚĄÜĐ,ËÁÕ,1@ÚŚiA*›Ÿ ^<‚‡ń@Rą —’Ί˜^:[Ҁg>~蜴 &ĂĎ:¤¤Í5c…ÍŘŽŒF"ĂQlçú{zęôI2[ľżąż‘šÓË Ű•= ŕĆô2ˇgÝś‹řhKÖ1šOˇiý‹ójE>0Ť0 ĘgVuw˝B!'š/|á ZšŃRL! AlÂď–dŔ!ęöˇż}:V=ŕĐ×#Šě;ßůŽüĂ?üCó˝kJçÉě{žç{´D%ţ–KLGÂ×}ď{_ů÷˙wMńByΡźĺ-*tM˛˜IV˜)bEVSI]&rAĂO¤ŒŮß!¤˝îuŻmţŢž˛ä6€çń;’Řđw€yÜáwč´Ë Ě(˛rŮ(÷i}Œ÷ţëżţëÎkŃď mľĺ‚̇~ĚËo#A ĺ@óéŽČrHuóÇůĺĂRÚPö%@)˜B!„B!„rv@ÁŒBČúńmŮʔŘäZ)$—Y A—ÉeľĘ>&—ĽÄ2“žź‹ĺ“|óúQL?‹IQ٘’¨nşyŘ ţ…’ŽĂ‘—Ý;űRΜÂd§›÷ä†˝šöúě?Ř,˨0 b’h9Ęm[›Çôg”ĆœOŠXř_™’Ë앙đTˇľ­‹”*âR™MĚ{~.ôe3ÎŮôŻŹŢßuH6CϞŽý}Cěďaw€6$îy-ÚďU9ŻĐdł\†ql[ęXV‡tž(–á?ašVŹLÉ}QŘĂĂÓ0#„r°ďaH3đď?řƒ?X1­Éé(ÝxťŰÝ.INH{Ć3žĄňĘY˘”&ä(< =A>CIʧ=íi277ˇj‚™—69ËÄ0¤|ĄŒäóŸ˙|MĂźđ˜4ÁRÇrË慲”xüÄ÷Nˆb&…”+_ƒ6¤…aZ+#jŻĂźěßF/š˙ŠT|œ™ý óFó×ĺmÄűĄyŞŚ_č+űűń|€ˆufmĚ籖´9Če–7 …B!„rtVűţ˝ęů҄ďéă‰Éöz^W$„BČɂ‚!„uŁÉeUs’\šFTŔ‰ĽËńrmŠĆ*Š6ú’˜ňT˜™ϋë:L_¸ZÓĐz˝JËdÖޔđŢŁQĽ‚ŢŁŽnOľ­'3S…&‰´e6šĚEÉɡ}č;ň_V3śÉzMf›ń‚1V$Ç--‹ÄĘXműPöąŽ%:ˇo=Mű{)ôˇľżkiĚ^Ýôió\QŤ “%saRb™Ë(NjĘY”ĘLös’—…•XśŽe_™`F!ää€cŇžPŽŃžLĐČ%ŹĎ~öł*íŘą#|'kž˜ Ĺë’K.Ń4,¤t]sÍ5šföĹ/~Q_˙éOZ_‡Ň›kěhżŁ„÷|ň“Ÿ,űˇ+‡ZőőŰśmKƒ)—^zŠ–ŽÜşuëŠKůÂďx ڏżaڟţéŸN"Ůx{ ­aČXözüýŤ_ýŞ–Í4  íÝťˇóžö}Žóľ\vŮeň#?ň#ß m‚¤†śX‚œ­ŤpCF•Ś_ZZěźßąrîyçŚT¸ńrŚÇĘ4ÓË!„BYyşs~Î0I;ňTÜfšK!„3 f„BÖ ¤šžŞ:•Ôä˛ŇiĘҞ‚ˆқ‚\ă“ř’´ŠVBƒ%­„Vń§˛¨eŞ7ŠŇTŻ™Ś{ҌdŞ˝ű†úsyš–sk9wϔl™/˛¤ŽSŚ˝5˙9Ü´ďú‡*:ÝÔ´űĐÂhE’€ěľ}kó@rYá“ĐĽň™ Y!šŹMӒ˜˘ĺSyLI‚Ÿ—Ý!çS{,Î.H@dŰą-”ÚÜťĎKVĹI Đß#ý‰ň’çějú{÷éŇßƒŚżŤ‰ýÄźŠ~ĽŰš“ —ŠŒW 4iĄĽW{*ó…é­ďŇĹ gÉ{.‰–ól=Ô1ľŒÉe„BN6&ŒAŠÂ1h÷îÝňˆG”(˝ňĘ+SßúÖˇĽ’ÇĂďxGšÓݜřÜ1/qÇ^˘“B!„ł™\—ËňiňçĆoČ9Ú| !„BNĚ!„lV‚BMae1cr™ÉFžśRu›ôK5–q0SÖ*˘…yވ–Ę'ĄT$śü„?#]ˢźB˛dˇ‘–w‚Nľ<ěÉÜLĄ˘VŻ "ÖŠbبBŠĽZ—jšů@Ľ%÷Ţ<’ƒ‡GZS“Ë —W¤ßŠggDśĚĄ$S(_é;’X”Ě\ÖĎŇ^ Čœ§đ3“ËÂtmŮFKáŢýĽž_ÓîĹ%§}ńĚ:†h„ţŽľŸSűÓ¨ż‡uJÎúžôŇ/CYĚ^Y‰ł’˘… “.“ń5&äŠ`&> –’ś˙˛qrULîŤjK- r™‰hźD!äDcĺ!4AڂŔtńĹŤÔd˛” J>|XE2”şř˛ŠWžňUÍ14”§„Dö¤'=)%~AL39 BW^.rŤ•ˆÁąö| ĘU_űÚ×&žöŠ+ŽP) Rä­WżúŐňô§?]ÓĹnźńFů›żůůĘWž˘Ó>ěa“ťÝín˛gĎšő­o­ňŇŃPć"م^¨{ýë_/ŸúÔ§´Mw˝ë]U$ò ŢůÎwęń fHWűŢďý^]ޡżýí*™ĺýlËtŰŰŢVÎ9ç}´ń‰O|˘śűÚkŻ•—˝ěe*‘Av{ĚcŁďyç;ßY^÷ş×é둞öҗžTÓŮÎ?˙|]ď~÷ťSü% óýŁ?úŁ”D÷Ă?üĂň =hŐéĂ7Ęň„B!„I%2'Ýp3ţďńÔłIÓóVB!„œ,(˜BŮPTŘé$—Ĺ$­˜ŕTW&‡ůNYĚ"/ŐčCj٨ZYBSĽ•ŹBŒW˝\"8­Ăpäe˙Á‘,ź\¨e׎žœˇgJvn/e~ś~qjl,ĎáŚ=7ďÉu7őçĄĂ•,-W*k%|XŢ^IJ­[DffźĘfŽXË$I|“î~ËŻ-ąŹú ‚‰%jAćóůÝpq˝h2ZóÜŹČś­aÝ<Ľž|ššţFŮIíďça‹-łČTŻÖô˛Jcş:”ş,l{v:kŰj%H c‰Í´Ćé­dkËźśiKÉęşŔ<+ f„BN<8î 1 BŔ1 ˛ŐÜÜźĎňcŃěěŹĘgŸůĚgTFł2˜ąţđ‡Šl…43ČNĎ0=Ę9"í ˘Ů-nq šç=ťč' ŠŕW¤ýŔü€źä%/ŃůŽ3==-O{ÚÓTŔ‚†äą_ýŐ_ŐÄ1$|ĄÝ˜÷­nu+š÷˝ď­żC&ƒ¸†ešţúëU{Á ^ ۡoWáĚ^)ěx€Li]rŃ×îsŸm^w­Ę`ĐđsssÚ/ßúÖˇ˘t^§ĺÁ|!ˇ˝éMoŇeřřÇ?ŽŻ›žžjŢďpZŃĐ.źˇĽĘĄąčçWžň•IÜĂ{a^7ß|ó HĘKrr ŠB!„aź,fžF6ţ˝{­%3Y“B!' f„B6K.+˛ä2‰ĺ,ƒ€JĆŠcғ•ÔKZYLw˘ˆ#&—i§Le!Ą9Š|Ń „š €y Mk0ŹdqÉËҲׄ­ĽĺžlŰRĘÜlH×ę÷]L\“|â˛B(˝–í\XŹUÄBYÉëoĘÁC#V!9,$—…—jrYÉeNślń˛eN´\eQJ”Ëb˙GJ.ëF§‡.ÎE4ŸúťÎځ[í<ĽiK3Ú´!¤É VV;˘ZUűTœ…eD/Oęż{›Ľżëśżľ-^Kö˘\†ô˛˘¨CÉQôqŮ c…3 ŇJcÖÚďůśœŇűRJ\[ę5$—Ůz‰}é}‹A„BNvüGůJˆI`~~^Ë1DpˆLxÓ@ŢÂkVšéÁ~°–ŁźúęŤU<ƒXf@úB Ƈ<ä!*^™luźƒwşÓä‘|¤źá oHóĘA ˧<ĺ)Z†ÉlHü2 ˘ŇŔ n!ý˸ýío/O~ň“UŽƒ`†éąŒăĐf<šěvˇťNă8„łÇ>öqú¤{Ů÷+¤ĽÝ˙ţ÷W1-fÝT1üŃ??đhšüvěŘĄéh}čCľŻë:”›‡”†÷ýđ‡?ŹÉgĄtů”śíQz”źâŻĐ2Ÿ„B!„ÓűŽoL*{y´<&Ľ™ĺ’o!„Bȉ†‚!„ AÓŽ\Ö+4íəˆ#úŸ Ú`ÂNYŔLxŠe!áTŁVÄą)A*J;ÓýZ§GZYĺKMäŞëîŕ%Ć!!í?XÉⲗë÷V˛užŰz˛{G)ۡś˛Ů†ăEE§Ă*9ŐrÓžJöÉÁC•,,"íŤVaËÇâB ¤’5Gçů˜śm)"^SŰôi—'Œš°%ŇM˓Č,éĚšBÚŽRY˝BF‹ÓńB…YYz™›1Á ŻkúzqerúËź/ö÷ Moْő÷–“ßßbŽĐß(˝ÚďW2=5jÚ6’>JcáâŒ%ńAîKýHí;Ě/ŽƒÂ™ˆVtJŚíşöi›Ćś t{f‚!„Œëď|ç+5ľ @¨BZÖj\vŮeňó?˙óI†BYG|÷€ěŞŤŽRů %*1 ć…iđ‰fG“Ęžň”'k:@‰NMiMĺŰ×>čA;\qy”ˇV–ŒšňĘ+ĺ’K.Ѳ˜x@ŕ˛v@ŕB[ň>ŔkPúÉf˜Ţ’א6†× 9 ˘ƒĺ†8‡×@ŞCÚ6L–˘ŢÇňŘ{âýďwżűé둚™ óƒĚA ݇°gmĂĎ!Ĺě÷¸GZ&HrH`ĂźŸőŹgéß0ĚăŘđ1 x%ÚťŽľđĂ𢡊Sq‹B!„ľ2)ql5)ěHӍχb!„BNĚ!„ŹgÉeq ŽĹÁż:F=ů0‘8iSžR˛–Ä„'/)š,‰8¤BYĚX 2F9MœB˛WD'⨐h&ą„c(S$Z’ÉZ‡P±Пř÷ÁĂH+dfşĐ43” Ô„´"s–Âć&$nľ)V1Źm$&ŒĂBvZZŽ›÷ŞUpŰťŻRŮiqą’á¨MĐŇyY‰ĆžČ܏ײ˜H łŇ˜mYĚŚ}ΒË$%_ĺÉeVRÔIŢ×áV:ÓO’Ë$ôq]l…@úzvFdk• ý:|A,Ëű{8Ö߇›~^Zlţ˝ŐËüIîoČeŁýíRrYŻŹ›śÔ2ÝŻbzY­íqQŕ r™Óiu›Ž}zčŜ"K”+Űä2ks›ĆűÚIťÇŽëF!„Ζ-[őą˜uŢyç­ř;nč÷űr‹[œ§Ď[YÉÁ` ‡¸ś–ťč$ˇĺâRŻůÂpÁŹ:%Ž×Ż •ĄŹ'Ţτ-“ă&‰ë6ˇš w( ™'MJKĂň@XĂó ßJýóÂ#Ç ě'D0Čk˜ŻłďÂö}lüßčK$ĆĄÜ(ćQÚÝ ůzɿύˇwuV€ęźĆ}zB!„BȚ8ÖTçI2Zţďü|kR˛!„Bȉ€‚!„u™˘ŒcÉW1Ý)ÉNE´ň™–eâPHxŞŁ¸Ë96Żąä˛|Đ­Ž%1ƒŠćHćfDçť4hţ˛\J]M>™†Œ´°P7 "ű4ŻŞdşď4Ukë|)[ć ™Ÿs23ídzĘŠě$¨0˙,l-–<-‰”´ĺ—Ľ%$hy9t¸–ƒ‡+-Ń8Đrľ PHfŤęŐčú=ß´ĂËś­^śoĐ“Ë\tŒeB‹ŽÄúXːFÉĹr.ďki,ë$™ľë//UjËčó”łćHVŰ:T/ľÚ4ůs<' „BČɂ‚!„ucé[VžR%गI˘BĘSĐpÚ[c MxŞłT¨LxʒËLŞ-* f, ¤:ŕQĹז*5Ąl&°ómM˝j~GšÄ0`WŤL43U¨Ř…t­9MŘ ÂSż×ŚliúU\^[Ć ŽIwyÉÍŽW¤+ňůXŰjÚř2n${ŘĂdyyYËpŢáwB!„BČúÉĎŁŽĆ¤é&%–ĺe2 !„BNĚ!„ŹŸ,ŤMźň1šL˘,– RQŞcrY.—š,í,?IrY&=ŒŽ&­•ÎKĎă=+}ƒŃ­(e8*dXRUa`a~2M[PĆr`ÉS.JB.<ÄÇß}GB:V˘|’‘‚xdIe>Ľpĺie!ůĘk2ÚԔ—ŮéXśc[-ół>&ŚEa,ŚÂĺÔß❃ˇŠď,šL’ŒÖM.łś¸”•’Â:Ée­ßeĺJS"šX ›Oď1…uś<(d0t2ŞPÖ˛Ý>VöwłîĽMVKý­"ÜÚű[˙->ű÷ĘţvM÷ʐZ6ŐŻevf$sÍcŞ?jćYš,%—Ĺí4tr*ÇZYiL‘Ôoe.ţI–\–őĄn§qéTńyŰî­4,/B9]ČeŠŁ W.űîp˘ÉEŹqn5ŽU‚›Ts-ď‘÷ƒ×ďŤÝůŒ÷ÓFôáń~ˇ@9ÎÇ<ć1ŮÍ „B!„őbßëí|jŇwíŐÎ ěš\<[Ëů!„BČFCÁŒBČşiKyŚ“\,–L~”b%Buä˛(–™ödbT˜w,O(.ĽzőĘVđ)šézÍxÝL$nËHŚzĽ,,őeqš'K(Ič]–Š•ˇ~•Á3'­”&Gg-Cp˘Prĺ0ˇÔ˛ÓIJž¨Ęťś$fi%EŐŽjűŻ6lLŹ ƒĄ5š=6^î2ä´$.ąé$K.“, Ź3_‰ó ÚźeÖk™Ď-s…ě;äĺĐáŚßC ČŁ÷››ř—ş<‚^@ggj•Ęćf2ŐŻ´¤jáÚR—&*ćĽ9U.CrDHßĘeĽ%—őV&—Uu›ZćâzK q1ľ/m˙Ł:ŠkB!„lvm˛Vŕ]ŠšŢw“Ś&ÝU˛=ĆËOIÓŠ­Ç3€łšě6ŢĆ|şIŻ?)—î$„B!„l Gú~}´dĆĽ˛ŐÎ!„BN4Ě!„Źf\óŔipQŒ—S,˘4&ň‹ăr™KÉeŇŁę,éÉŚƒ^e,ŠâZ,ëčă€*Ŕڧ|HŚjžďőEŚ"$g MŰB˘YUK'%Ë̢tjî×?ôj‰eœŚúĄ]słľĚυ’˜ĚfŚCJZz˙(&ię[ě“ĐĎĄQ–úemľ~łžë&żIVęR:b™Nűş#Ąuä˛Xž2ĆpésÖoŽéë",9¤ƒĄżńszJdqŠĺ—aÓßÚçcý’Ó:˙Z__법 -ąŹŇŇŠ33UÓĎ#™m˝˛ŠíhűÍDEëč”\Vgdgť+’œ—’ËbYĚN?ÇDž”Ú—Ľ—ŐI\ă.!„ĹŽsŸĂj;śA´?ĆCNĺ@ÇzŢűD´űhÉÇúˇ“Ť!„BŮ8Ž”žœ'O’Ç&Ľ™Ă›D!„r2 `F!dÝŕÜŒŤëVÓ䲜,ŚÉeHlŞ,š,žŢ$ŸÂ !q,­NróBĽ˘ůLŞľÜ`˜ „Ž~ż’­ÚžZ–Ľ‹’Ÿ%÷…D>!„B6ďŰďb /ŁŇŚaůô}ŁćÁˆB!„BN8ůyÚŃҗÇ˙v4yŒ7‡B!ädAÁŒBČşiS˛2š&&=Ľ”§: hŚô˛xNlb™‰h:Ż(„ŠŒ–ҡrń*–3t!QËg’UlۀAÔđ×éAČŕ*›OőŠ”f6ŞšŸUŮź—‹Ěϥ҅ăçďć"™‡/ÜhšŠŒie˝˛Vą "ʐZśuŢËÎmÍB)L+_•Ësyň[vóZ'aL—O&$—YFńÁĚćÝI.łÔ7íť6]ËěŽ"Kŕ˛i­imž"AźšjKK"Ő ŕď3Óľ … Gáú\ô÷ˇ>Áh+Dˇ”Náě'úĺ.űÍŁ×kS⠘ÍÍT˛e~Ô´ŁiaQ>”Źďt-b ž´ cu&AşTŽ4ŹW¸}‘Ö‹ E‘֍ÄmşMEk“Ί1‰BYăă ÎÂ÷">ďB‰L<ŞřE‡‡!B!„B9ᬖDVŰEhéŠhůkĆĺ´#͗B!äDAÁŒBȆóÜ^ŮM…jĽą ÷řńä2璔c“J8ŁZS¤Ćĺ2$H•– ՑvÂź-•CÔâk\Źš94łšJ¤ rÓ¨Á ”ĺaO––ńłTélŞy4“é éby K}(8•Q(ëYIĆ(7Í"A+”œ™ý2Ľe$Ăë’f˜„ľ˛(˛Ô°ĐnKsł2Kß21/őŸŹŃÂěŰÔ˛öExžÎJ@&aL\*YęÄwĺ˛(vE´ ĆĽţ‰ëËşckęP’t8tM˙ödq)r…,h M§}>‰öˇ@ěďoˇR(Ó~G7“ɐ7;‹ő%´˘n^WĹţ¨SůĎV‹Ű’ÉeMťGŁ ÇY˘‹Iv˝¸=šŹ\Šm{ánCIëĂJˇ–!b.NW§ůś†Âún&N"&!„˛>ň㠎7&W{•Ÿs!:Şé,ÔL!„B!'˜#Ľ'áúaţ§ŐÄ´üĄB!„l$Ě!„Ź“p0p™JcŚ;°0A姐ŽL˘*3 M‡A}RžÚAP‰idmÉM“Š4 "ZźŃË$ŸÚŁíkőzbŽ (…ś9ŠF^ÍcyĐ<†uĚR˛™ IfŢĹÁY×MÓ*Bd'žŚQžqş–šš(˜Í:™žŠwŸĹaÜTśR[ᝲX–hŐ-qŮ—´ô-WäŸ_!˜Ľ’˜Ež\&Yr™%pY;ÂĘ̓Îě:E'š,bëВĹěýă+TCz„>PՅ ‡•,-{™`ćšß!˜96ý]uú;Ž8„žĐž(Ĺ>GJÜT‚YÓĎ3U3OŻ^ŮnťtűˆËçœKŰR’Ë|–\V%—Ař‹Â˜ËŇř:eBS?ÇĎ@Q¤rŻ&ĺUŮźCßéuşştL!„rˆÉŽ8ö5˙ ifu<öšX6+„B!„Bȉe’HfˇüäĎ哵7eű‰ó0ąŒr!„BNĚ!„ŹœŔ"á)¤<ĺrMHČŇ0Ť+)ĄôcᲔŽLxbŇS–UĆye[ó­ŹÜf¨ţ$! *&S•mŞ–%MŐu.5ÁžÓ´Ť9‡çG*6ՕˆŚ›ĹňœZB*•=lK$†sö˜*–(ˆp˜ŻhyČŠžk~ćÉa>Ľ…ůśVŁô–QNż;­öy™Ë•Éeaş6QËűö„˜ˆćŠ%ł,‰ĚRMLž+Šś„ŚÍÇgýg˜\CşŇtŠ\jü_*ĄSĂúMßLC›­e¨r’ä$ …ź]–â°Ž)xßü mŐđ/ĘŚzĄßń:źo••ŁTš K”•mľ˛˜Ú^brY.ěQ.+{EÖ'ŇĆ|L”kKˇf%7ăĹlËŁ*Hn–vŸ’Ëâű;ˇ˛¤!„rüŘń;ëâ1ÉdćpčrŮŽ?ăɨ,żB!„B!ÇĆh4ˆ×Y‚š%{Ľô(‘P"ŞM ƒœ„$2¤x˜řĽQJJYšW‡ŠN’U*“ŮđW]ž˛í \+H"S-™ÔŐĘbiůŠ8Î…Ş”F§uyĘ٘ؕOď˛y‡×čťľŠ[u7ĚYR˜kÉ´˝^RyNŸ‰nśî´˝Ž›ś–§{鴅ľĽHR^đj™VůŞ+ţĽíŁlßІ°mÔA‹cä.J]ök‡‰ešœgýf%HĂĒ%—Ĺéă|‹lŰĂżm™B™ËşŰ^׌÷q-K|‹ jizzkĺŔ:Ž/B!dc ÇPܑfjĺ˘EĘř÷2~ohţ‡c–šĎ(îŤć]Ĺď AđÍŮX¸mB!„3—Ž˝Öézj¸žX6žL*{šrm™Íń’˜.oJf›Ţ7ÉV”Ž´D9']ŠËˇƒŕZVSZšĚméOLŰ&ć™0֕%ł„˝,ŹöIŞLë°lSŃŹď,E-­ÇB‹bF‰ĐÂď|‚G!„lnl°!/Ÿ]†2Ôńî,sTw!yv8Š\Ł?o é÷űńť‚cę&9AđË!„B9sI7g7ńTŐHEQEŃŹÔóŽöşŚ[1#/Éň˜„B9YP0#„˛~˛4-u˘źŁOA“śŒ`J"ł˛Žu–\–K`™$Ľ‚š_­Ôe˜oĎĂ\LŞ},Š8!ĺŹ#uĹĄUŸËQ­@”—>t)uŞ-Gi§őEšw‘Ć$IRA0K˘Q>}&—Y˙y+)můDëKfkłoÓĹÚä2‹Hϖ/“Ń\Zwce<ŧe4-źí¤˛˜YÔÝÄ0[7Žh'NS2ńĘڛַőłD1ĎçÓşŽÜ511ŹëK.K}—ĽĎĽmÉwĺÚä2iÔbŠKߙś- kíđ’‹y1Á/4&ĽŮ…äžvűä*!„Ŕ×.}wĐëwš"GőţŞ% 1 Žo‰eÍßëf`cqyYš!Žć{U)ó3ó˛+혏Z„B!„r,äBđzăëH†ĂĄ–ĎŹŞBz˝~şšÇŚą×Ž6O›{!„Bȉ‚‚!„ 缕šT’¤3—‰T–ňdéMU,E¤ą0} Śu­l”Ë_U*u)IëĹҕ)-›o*1).%¨•IDł’›­¸&žşBYžÖ-éÇJ5–ąÝ&jľ‘tĆb]ÖV6ŇÉş)g2!šLR˛—IUíŒóä˛1 Ź“\{¤Sć2KPŤ%‰Z"+SÔş‰a2&jIjk.‹™Äg2ĄĎ’ęŹj.ĹľÉlľŽ+ďe2š `._žXnÓÇţÎKŹşX˘ł-…ąÔV2ľHË(ÖÇM_ŒL.óž]ßyrYźHTwŇçZɲ(‹ÔVK÷C; 6ŞjĆŘBŮň㨐XfÇQWęseĎIĺ›ŒQĎŠćŔš4\”偗Š~)[g椏ăVœžB!„BČú—ĹđsjjJz˝^”̐fVét(™Ůë•2^6sź$f>/^[$„BČɀ‚!„uc%ƒ°ţŚ"ÉYHxŠÉ^:˝´éMU–0Vd eŃ `VząŃ|7™ŞĚĘF&ͧ4ľnrYŃI˝Z™\ć’\fÓ&ŒuR˝ŹěašĘąô-ż"šĚee óň•­ô›.X[\ŃM ł’•m úxr™śŹŰŽLFsĄ&V–\ÖÎ7ĽœŐą„Ł‰hy‚‰tĺ˛NY‘Ľ‘e}і۔´ź­€(™0O 2Vw-!΍Í{=˜T s’xF!„r˘ `F!dÝѧŒŹ}J—*˛˛‘&…ň‹~bIŔNeŞTłęڜĺ%7;Ľ+3‰ÉŚ•8?Ž\&—YéĂ:•kěś;•˜K9óŠüg›dՕŻň”3é´9¸X3Oó^R˘X›\śrZŸ’ŮşňÄ.ÉŇւ4–%†‰dÉe1yK˛4˛ÔŽŹŻÝř… é”ĹLÉeÎe⚴Ӧő-Qęj岔Ж]TńyŠË¸^\ś; juťk“ ĹĹ–Aśł^gŠhuÝůĘ"O.3ń0–ĐL¤‰h.“Ńڋ8U&ţŃŽMďCű---ľšĘ“ËxˆBČĆŕ˝}×ÁĎ^Đő^V•ÍąNBŞYóżÁň@ŢöĹ%ůâÍsň€-óҟéIG<*B!„BČƒ_˙œ$ľ7Ş˘+qŮ-§ĺc‰É\Dłĺěˆv"YrY.uI’ţĘ,é,É_şÎE,p­MŔ+’˜çŁě7ŞZůКR¸l}'1/&ŒirYÝYžV.“1-ôˇd"!śrÖ~L€U~,š,Š’uÁA}B!'ŸŽ…ůćPn:T7Ç+/łSÍEB!„B!„lŹ&.8NMőeaaÔI1˧c5!„BN6Ě!„ŹK.łtą$j‰¤´&ďÚҎ+Ë/şN‰Ä*+×hš ce›|ľ2m*“|˘ŕcÉ^A*“˜4yŤĚŇŚ\+=™ˆ–'—işYšo›rćkÉd*ŸÉs2VÓwD-í'ŒE’Ŕ|§,Ś-Ÿ%–ÖąŃÖî6šĚ'Ů.—řbCBŮQßčňu2ąÍ+¤¸ö5–žś2šL’ –ŇȜ$iŽöc‰aŇĘe…[™&gŠvŠ˙ é$—š ëťÎŇÜ ×MŤ“Ź )ĺĚgíí”MmęşëĐuśSˆnÖ×+śÓ¸|eńşş`j !„LŐżťŻ–/^[IŻßÔúŮ1ŽB!„BȉáXĆěz9RĚz˝aJ1ËĽ2Ś•B!äT@ÁŒBČş0ÓëúČËú<‘*–9L2NŠónŸQL.ŤŤ6!+ˆeĄäŚKeł„ł$&š6™ŞĚÚQű4˙źl¤J]ů´Î„§ŹübÝ O.&dľB\VúĐgr™t“Î\VćŇ×m*[^ś2ÉhÄ°6,/u™R˝:âÚxrY;˙”f%#uů$”j´ä2ÉKtJG.ËSΒčűĎeĽJS˘\,Ii}÷˙ł÷'P–\g/úíq†k–Tš<Ȗä’-ŒńEŰ`c Ćžź†nşYÝôeőZwÁăÝýčŰ`C7pűVsWws˝ŕńV/łxĐn í롍1ś0,˛e[˛,ٖTŞš*+3Ď{żřž˝ż;NfVeV••ő˙ŮQ'óœ81ěŠŘ'ö/ţ_jë‰íh¤Žv–˛ŮR›Ř–,ڟw•%Ņô9ŰZv:žRr™‹KVYŹ-˘ég’Ëš¤š0fbŇŮjIkŠÜf“˲äˇ&Ď5ÇR|Ýfm l7zçň˜O/ÔçFΏÝúŠ@q ŘVÖÂĚ*×őš9_›ä䲼ĽĽúúb%™^3×ůQ; 3›Fĺ-_é5!‹Ú˘˜ŚiĆŹš\ŚŇ“čQIđą1*ŹŤ)ŁéšD¨,AĘZłRęň“ÉT“ Y&‰hR>JÓŠxۭɤ¸čn‘ĘW4‘ÖN IdÁdĘľ&ĺ2}¤˜\F*şůFx2&OkJhjrŘdr™UIĘ4%&őóĐm×öPáÉŘvYL—ŰN.ŁésĄěV“Ňĺü„ČgVĘeésŒíMԖŻňĎp˛dŞĎ—;)—Ér]#‚Ĺ4ĽœŮ•bc•ÉeL+,ă˛ó㎏eMíKRľĹĆfţ˜hßËOV*'Â3°Ô'›á¸˘GOŒh8ru&ÔŜ.­ČÚŠÖv˜9Ö FíLŘJ.–Bśš,ŚÉe*˜ńľÉt#vś HfŘ ˜Ř7Ž‚¸Ś"ŸIuMoÍ+"Xö™KrYi=öň¤ľLâKdžoĘś†ň™N–=Ž.ŘVř\9ʈÔ:—§óoë4dZý ŰÇäuA˝ŠŮűPůb­ň—Ąň‚ƒd€‚€Í“Ę şU’Ë&¤RÉȐ\ćTžŠBR‘ä2jĽ‹ĺIOHe›eGqMË)V™f)““â&‡”ސćáCԕHpe¤ľNœ4ÍJ]Šź dpŞBKDI,‹rT˜ÇĽý٘nŚű§ĺ(}ܖvrYÜމöĐ4˛”Ň%[ßĚŰ.‹™—,Ž—1)­ÄސÖher™žÇšVŠËôšdĺ(Űinšlĺ2™Ÿˇ=Čj… ‚E(qjă:RYŃ(5e@ŰŸ,oĚóTI`ËËWćĽM›’”äÖČe4!—éňYţR.´v’cůTCm™0Ł\ú”L”ăvǡ ćEiÍ!Á Ŕ`B߁%3“›cF˙QŰÉj"Y.]L$[M ˟›\ŔvÁ ŔŚaafĚ5+ˇ"šŒĹĄPBĐq(K.k$ŸvYÇ$í¤ô¨,Ŋ(&—…ĺŰ(cŠÜ3ž(9¨Iaš\ŚŰ)Ţd› ęv;Ôď–4Ő/Šß/ęŸ-őęŠŰ ëRqËk‰ĚŠ×E4yĂ49yׯ ădźo1EM÷SĚ2ӒĘÚ)gŤ$—ůĐ~“éi)1Ź•\Ś"_#ґo—ş4™hć3ůjErY,˙¨Ň[žěĽĽJ}¨ŮŮ,;•ńŒËMÉeTˇ Żť¨Ű´ŹŰˇnë^)mݕśśÔáö.‚ ĽĂÝy{šyŞŰyPOKËăzšŁz;ęööăzŮU#6Ćm˜‹e.U.Ł”l'Ǔ2Q<Ž|šż)uŽçöńĐ$áůLÔ㔏QҲ˜1-ěK× –Ř ´47ŸƒňŠ*яşöDňGŰĹÚÉcmaĚgU)ôąu-rvfśM´RéŤČĄŹŚNĽr”yšÁŚte#—ůTn°)ĄŮČe)š,_ŽoÄ5×yŹJO"ąHÄBSXËo–zęדf˝BÄ2ž‚`FY2X˛˘đ4dÁläh0R銪Ÿ+ęGCăq!éZU”٢‰aą bh%´Źl$y-9QZ’¨‘ÖZÉe>K/‹ËNÉbmÁ,•ńtÍcœ=ź'›?$§5)\ÎSKv‹ůláxˆŰP9#kEYPG>ť‚ʂۡł˘~ íÝšD{˘Đ7Œí=TőűÇň™ Eý<ËfUHs>– )ryÉÍT6Ő4ňĄĘeŠ|k*Ď>ą”\V˜(Ý™Ź´i#@Ržž–¤?Ó$—9×JÁÓc׀l'*lO]˜UE˛úg6.—­˙ŽyíיVY𰌐¨Ę}Ź4o’ßâÖĹsvz”>ˆ'ËQĄFrk'W‡p6ŔUHűˌ^‡ÍĽ4”ÇŔNÁ Ŕ–Â>MJ.+,ĺŠ_ĄT˘k'—eÓ ,:IŤŞ&ĘbjIEňÔJ.ÓґÖĆm‰ňČNžcąJęÚ7׼š™’fg ‘œx™,›…G•ƒbI›UŠŚŻł ĺę÷ĎČşY(+ëmîÔSG ‹]X׏ăz8]ŤŞŰÂÉ@h’ż"A. ňœi VĚĺ5ƍÂŔěÚÉeޕޕä2ŰH`yYG•Ëô-MIÓ&ĺ,/AęœĘhčf‚ĹE*–ýXŹ*Dŕ›™î¤öćd¸"J‚…Í˨^ş˝;u{óç$0[ŻŁŒëš˘ĺAE *:aDçFőďŁz[FIS錢”WX“ژ\Rt•oݨÇG.ƒéńdÉ,ĽÎƒŸEhCýě\Jďsń˜6aż*fŽ yÁІ'´Żŕ2“ž=Ŕ‘LůpZˇČîXc-ĚI9e|4v"Ś'ÎG ?@ąaŃᖟ{őů´[ą?˘RZœÁsżË&i0ěm&Ó˝&_ťťůťÂä>M&œ!Ĺ Ű 3[„&BŮ,šŒ’ŚiNKWĆT1kWŚiUą|`ĺG–W˜L|2ŇN–žĽ˘’¤XŘúç‚ĘN:e‡ŚŚş"˜í›+iN„'žÖ˝ŤI*(—ťŢň8zęv*ętĆT–ăú÷q˝˝\>sLĂaKhş0š•ĂLíۄbrX3TŤÉ:ČVßN.Ł&é,&ĄĽ„ą$Œ5’T’ŠÂ‡“EŤű–\&âÚÄü&Ë?qUČ)‹HfMGŇáćgƒ`ś=íMŠ˝ű˝Ş^~§ţœ‡´¸TĐ`diy`ŠŒ$ÝLd8jRßě„,VĹăNĽąÉc:—킜QŰN“SqR?ĂTnSç§(ńńë,š!ZŔăc˙aă1L–áזś|&`‡ęŁ\ď$lŹ ş;$ýŁÁ¨Š‰ŤEě#h‡1ţ“J\ĎĆŽYߨ>ߗő,.QˇŒĽŻ)”Čć>–‹Ćšˆß2`ďąVŮČü{ËdXţ¨č÷ž>¸–´p­Á Ŕ–ŔéR’\VfÉe*;ń ŚI˘Đ4˛ŞĽ€aŞĆœ\ֈ8˛lcDXâĺ&!ˆbšF–vŞŚe.ů°őSš’:őhăžů>í—Ô˛‚ú}–Ílœ4&le¨ÍÂËë3t`ž [‹;?˘ĽĽ GŁzžzŕłôTpJ––Ƥ,ľ#Ica™*‹…4-jÄ$ĆRr™ĺ-cş˜ą­’“MYÇfás´ŠÔfú\´\Š–čäÚřĄŚ2žÄŸł\VŇětHˆ›™ e0š-8Ők'Ú{ŞWˇ÷ž‚––ťtvaL§ĎčřŠĽzđyXoë¸>,ü QQĹ2-ĄÉ“$Ź!ŐN÷ÓgidŢO–+͓űT. ĺ=Ť”Ü>N.3ńóôH0°ĂřMwÖzs#Ľ7ĺľ}L! ýN'sÎа>7./h\ŮÔG‘ób&ʧA›VšÎFlłĆęj%lĚŇـe3–Ěę~A‡×Y÷łźMe4C˙Č&Ńlť‡vŰŕ“r|Qz߈űŹÜ \ŹVJ˛šžçŇÍĐúhmopśńÚhčĂŰXý@ßš ×:Ěl)!hƒXŁĺC:E,kfŠÂ“I˜‰qú]×HLL;šL”’ˇ’”J5š¸žúB€-%ąŹŰéŇěL—íďÓţyţŮRŻł3řúCˇk¨KaEŤ˛¨d;šÔ⒩V9UŁŞ§z˝I˘˜Ć6ň—É„ąÉš!­LE4-?ŞmÝH`M<üęÉe”ŢGÔ|.’*§a˘Č—ĘlňäŒl?úö{%MőCBÜü§–Ůú3Řšöćt´^—Űť¨ˇŁ¤˛SĘE"_oßů…‚†Ła˝•lš$ą™đłXî2KÍ+R Ň ýĽ˛˜šš˘Ée6”Ń” QYš×VIŃrelËËN6Nč5młćóy˘Yӟ¨ä5ç ‘Ŕ–‡ĆőšQ:.Îűú>épŹ,–ĎýŰXë\ sĚýщo|˜ęDSc)źÇW$žđňŸzę)úÄ'>AËËËôţÁ?HT; ˇá<@>ř ˝ć5ŻĄ›nşi]ďűűż˙{úÜç>Gßú­ßJĎţó €ÝŽ~ŕ›+řf žBepÅŢl˘óćb?–\ŁÓŠŻëvâuAŔ@0°i$Q+&—IYŔ”\ćÓ(Ś-H’&šRƒš D4ŽBrY•}Áçůʘ Ľ’OH.óMrY‚dŹNiëqĂN˝üÍL÷čú#=Ú?ߥŠ^Q_Ľˇ:9k˝”ĽĄŮ™B¤łšŮ‚ΞďĐą“ZZÖŻV’Ź!eÉeĆÇR˘Ô”^Ěe;j—Ĺl’ËLş(˛R.sďĄć3Ńk&>|.*Hy—‰nJBŠ@Uą,gëe4ÝďБC=Ú7Çe1Y, ŸÝ•lo)ÉŮ1ő6tćl—ž:> s ƒúŘÖÇΘ¤ÔˇIĘbjÂJĄId6ěłĘe㪚ťŃdiyšÜ§cĆNŇä4š,”ó’ĎÄ6ĽJ=5e]€Ť‡p^\ő• a+ü^Čy‘ŲE.…éů|hC0Y–R梈rÎ.ž\™+ůő ˇ1ľ˝qIh“ţɰ^W}îÔ}ŔNaR Ťˆú›‹q[ÜçúÔ§>EüŕĽOv÷ÝwÓíˇßN;&ś}ä#ĄGy„Ž9˛nÁěCú=ú裒zöÜç>If`×ĂßřĽĽĽúzó8>Ç˙śËfęľS'71Wéůáp˜n>šęÓôôtĐň›_Ž5 ˜Ř4Z†‘ĺQtœh;¤ƒ6ÉNœF$4ţ*/BO–DÖ$d5"U.—ů$íř,š,Ŕƒ•ÖT”ęu{4;ݧCű{tř@WdŽÂ^ů2„šhÖépŮĚ $ GĄÜĺx’ľX˛3\ÎIb´(¤ŠiđF*w(ébMҘΓÚZ÷9IĄýô=Dš\–%ŸÍ“Ë´TUś/\ŢŞňř…Ř'K‚Ř•Ěô3űŽď¸WÇ^ô˘Żű˝ßő]ßE÷Ýw˝ôĽwA.ťĹX*㉅1˝šVŻőéĹV˝Wá×ôĆ]ů7^;e9maa,˛÷Łűý>Jdŕš‚€-Ăg˛“–ĆTÉŠˆ_ä‹(íxßN.“xň,š,%Ĺr›Š,Ś$—9r™´Łe—ŹašlŠěëÓ Gzt`žCý^ťdánˇifŞ ›ŽďIĘ֩ӖÎ_Ňň€ÓĚ<ńř]Y4Ľ›l.Q“>沲&šŹ™Ÿ˛2¤*>ůL3YÂYř`L,W“βä2ŮËŠfďCޜ?üŢó­kŽcľńľ|p€Í ]á{HűĆ}}0Ѕ h8ĽmůŚŘ˛,äF NäívËT3/]Ż2_ eЌĚřąŞl¸NZ_ť[XXuĚĚĚÔËéĘźş~łíß-СŔî‚€Íă,Če•Ëř ťˆ;šjĽId,•e)OR8ІÁĆ"–lœ”ËDĆQťĚp hÖ XtęłTÖ§Cztp‡f§ Ú­p;t:!͌…&Naçݍ GőŒq(ďÔI˛˜ŸĆAŘ,‘,,ĎLČe”ҡ´ýň4­$Iľ.Ň4ÉeMŇYœ?Ź’Ćœ\VąĐÇrUI3Ó]Ú?ו2¤łÓ–v+y{s™TN`ăë@ƒQڅBŰÚŘ&)šŒË€ňĹĽXŽ5™$A1?÷ů ‘/ŹXŤlĘRľmłD´ź,,°űiËe&F­ĘéPËVÖĎŐ§8ŽCyé Ż!­Ŕ\lŚlŽ&QmĹlkˆ+ă,-9*ڏC;ÂßţíßJ?řľŻ} ýÍßü-=ôĐCôŐŻ~•ş{Í÷p~ăß S§NʀحˇŢJűö͡ćáÁŽsçÎÓh4˘n¸NˇX\{â‰'¨×ëэ7ŢHssł­Ď‰—˃b<čƂ[YvĺőĹĹ%y~jjŠfggé駏ÉrŽ=Z/ű:{ö-//ŐŻÍՃiÓ˛N€=s揟‡×ł°pĄ~Ď7ëˇ!>|˜Žťîˆ 䥜Ÿ]˙Ěן5ľ,—žĘ˛”ţ*Ëe|=PĹ´É2~NË_ňÄň'•ątĆÉeË˃tĂ. fü|žf†D3\K@0°iř;=—Ź4ă9’ąbrYĄlŃHOÎ7˛XĺTH3’Ž%%ł,äyƒ\֔‚´"ŸqÉŁz°ěĐĚtŸJrYŸöϗÔëÚŤ&ŞŰ1tč@§Ţ°ŻçÎJéĆJ˛4ĽMvÇĘGόâ…ŹĄTŞ•(ç'Kiš$˘ĹĹ$9J…'M. Ÿg˝ęĘÔR(ľůÜL—Ž;ܓä2.Ey5ľ÷áI-ăëN|éÂâR(Ÿeš(üTŽ5АBLÖăAÓVҙŤĄ¤¨Śş¨ˆ–ââńŹw>rr_( KŔUC{ü¤&ž˛rnă„P–杣 ‡rżŽ7LŚm­ů–˜pP/sTŸę/,W4;UH!Îí âuţÍßüČ^,jqŠI.‘ů裏ҋ_ü˘zŕješÉÇ˙:˝ó óđ€Xčxzĺ+_Io}ë[ivvZĘÂ?~œ~ď÷ţ?ňřëżţëôž÷ź‡ţęŻţ*%.ĚÍÍŃţŕÖďűśt7Á?řAúó?˙súПú)zÁ ž'}‘řĂô|€^ńŠWˆöŢ÷žWÄľ7źá ôć7˙˝ď}累ü>úţď˙~úîďţnŮ·~„ţýż˙÷ôş×˝Ž^Î č÷˙÷é̙3˛.Ŕ{ń‹_L?üĂ˙€ćçç ™€-GűńÜ˙ĺ˛ô|E#Ŕřć‰0o˜Ş*Ţ 3ąŒV sŞŽ„łůůůşoíéôéÓr3żŸűĘ|ƒżÎ7w\K@0°iXxb ǸŚÄĽIZ­”'Ňä˛fň~e)M ĽĂž4šĚDš,$ft¨ßĺ­>:اýű:43ľ{“´VƒEĽé)ާŽ”žäÝŻVTQě¤lđ\w))ɘ”ë~żŘ˛(„qˇ‘Ĺ5–ŞDýŇĽŇ8“ev6 /ëžűî“Á§g>ó™tđŕA:|ř]ýőôĹ/~‘^óšWÓĄC‡ZďyꊧčţŕčŘącô˛—˝LÄ8áË_ţ2Ý˙ý˛oyË[D2Sxů,„}úӟĄ—žô%őŘ>:qℤ¤˝óď”Ż×˝î5Rˆ›ĚśäsráFí;>ţřăôđĂÓłŸýlÚżŸHqš‚Ťű¤ÝLŢ.}KtĎzÖłd›ypĺ¸O~ň“’üđc?öWM‰`˝äýÉüú&÷m9aŒű :ßěŔr‹_|#s#Ž…ď,œźZżľT3FŃöíŰSҖcé̊Ξ=+χuŮÖűö*ĚlšT‚ąr1šĚHňOZ3ˆJ1ŞĘĄ(ˆhœp–’ËĹ҄!š,ČeaŢ Hq:ˆ•2x57ۧë÷čĐţő:WO’Ö$źíGvę6# -,Ö´Łą Ÿňkœ¸•ňŢLSć˛I#k.†¤˛)˝Œ˛÷5ғ,ŃeғoŢĂKăĺVRJ’D.óŽ ţT§ŢNĚŽňöî†öśĆK{óXŠ”ÂÁŒ¸\‹rYaRr™–+urź6śŠ|&§ĎëOÚ8%—U*ŽpŐ‹?Ç_‍XéRlşpáťúCŞgŹ˝ńuŹGHb‘;.˙˘9<$eŐC9k~ĎňĐQÇTk$­6€ľxĐéŻ˙úŻe°éöŰo—42掝^JřŔ§Ç{l…`öľŻ}M„­oýÖWĐ?úG˙PÎxő'Ož˘ßű˝ßŁGy„NŸ>Ő̘OúÓ2˙íˇ?ˇP+ëAśĄ$Ľ˝ë]ď˘}čCôœç<‡nťíŮ­÷čX§2źéMß'˘ŘěěŒôoŒšřžĺ+_Ąř {ďý)?ÄŰËÝţáŇßýÝßIęفű[r!żDfÁ‹…/•˸Ë׈gffD2cřú^ޗÍžěçër'żWčóź|]6—‡‡ňüůóçSYÍľJpě%ŽŽČťĚBĘS.ؘ,˛|ä˛”r%) ƒ”| •\Ć_Đăü|úržKvhß\čŃţšMO…rœW+!YËJ*§ƒÍLuh\YZZ&)1Ĺś.ľG(^i'J]2.ŚeŠ)<§Ÿ‹ÍÚYću>%k5e1òMLčâä˛ĺĄjlëíëĐţů.Íϖ{Ś˝÷Ďwčp} ńąd §šYŮg9ö|L‡Ë’ËBhJhßp<aҧ*š&&˘.ýLŞ$ňeiž\=2)ĚHęlUOŽé7Œۜrć%uvűŒjM˝ŘA+kd{ă_W@ʚ܁!~ËbœDƃP,~ézž÷źçÉŕËg“ é˙rc:H?ń?A?ů“?I×_ÊŇÚ÷Ţ{o˝Ü;“ÄĆ˿瞗ÓwÜ!^>řůrČésź˝ü;§Ź˝ň•ßNÓӍ\Ć\ŹŽżţ:zőŤ_-r™ňěg?“nťí6‘ěX˜‹k!.—Éž; ^,—…J NúϜ&Ć}aßf5ÖęűçĽ1Mşž×N9Î%4ž„oĆŕ;îórj0?\ @0°eđ÷í˛ée6Ęe’ô$id1ľi"šLRÎx~ӈ8š\6ŽqGSˇÂ Ś%W•rńŕúĂ}şáH—ú˝˝sJă}á}:r°'‰a‰–^ĘMUŽ)%íaCÉ'ˇsš&ç&Ę5F‘iňn˝Ś\c^SÓäBzŮpT݉_*čČĄ]żŰűşŽ¤ŕuĘN}œ–őÄchŤć8Ň…˛Ľc>Nů3Š\:Fó”3mď0lĎĺĘđ÷ÂIE:ţ€Í°wËAK~’ÎC}†$ă­ź0 Ćő9”˛Œ#ëBbŘfą>Lä}68” iĚÔçb_Hw˃CŮŰΏş´\Ÿóĺ.ďI&%ÄĘ"ă`ŇFÚTe­‡zˆ.\X˘ç?˙y1ŮËÉó¤[o˝•žđ…‡čäɓŠäżď–[nĄ~ż/Šcď{ßűé‰'žAŒϸd%‹f*‘ĺźüĺ/_ąeYĐ ^đه§ž:&ňZŤM¤óĂsżŻ¤g=óśú}üź‹“6–[s9ű<>&żrŮ!ԛŸŸ“×Ϝ9ŰIŕň˜LÓҘz}űĐsss"…M&ĺżO&ĄMöő}ö]cľ$c}>ôwçĽoÎĽčY.ËËt"Ĺ {”ȰiZ O“7ŐŒ2ěK22v˘´Ł~Iᩕ\żô[ў¨r…$bLőť´oś'eçfŠ=•U–Föi8,ifşCƒ‘ŁÁp$í3ÝgŮ)/uB}Čçh,™"+qäcBœĎ’Ëš'ž'$œqÉČĽA(ÉMf§KIWŰŤí=th~śKKËUÝޕˆcEÁwŞĺÉO\~…Ě5Œ=yÖŃÉ NDď˘Ţ׃3†n˜/hşWlhY|Ş–´ľŇRY÷UšŸŠiź›áÜšsôČ#_•~—Ďy˙ű?×gęőd0Œű˙ř}ôć7˙@úŹX0{Ë[Ţ"Ďżç=ďĄ~đƒtôčQŇ8§ŮŮů뛛›]u;8‘ŒFő4ŽÂz´Ő„rŕh`[Éĺ-îOsWSĘX0cŃk'żńMĎÓÓӒ^Ćđ <ńś\Šďc;3›ĆĄ'Iy˛Q.‹2ŽH5Ś‘pHŇą¨•ŚĽŇLjr™a * ńrŤŞ Á° ~ŻC‡öč†#=šę­ĺěxŸŚú]w¸Kˇq┫/žđ]rD˝Ř~6%läwŮéűĂŁÍîČÓňŁ’EĽ§¨Ł…÷ľÚr8ötî<'ztč`WŇËx›öl{OYşž>Śę–Ą'ŽądĆŻ\ÝÖM\žĽ.CŸr%5ÉeyŠW-‰Yš(LęşHŽgrĎÓR€­`§5x}œ´:vZf&ŜmŃ }ă´Łżúʀž8ëčü2ŻËH$ű\ßЍ ş÷Ž.ÝZ?ŽŤF˜żř2˝¤‹rRkŮłrţߊ÷§Ÿ~šžńoHJŘ< ÓjÜ˙ßŃk^ó]4;;+mƃbŻ|ĺˇI*Ř7žńMzä‘Gčᇌ}ěcôw÷wt×]wћŢô&IKČYëcÎÓŃśKłśh•`Ť™ěgjiL†KVŞÔľÓđzYtÓ45–Íx{ň$5€˝3›&3&ŚhrYpBÂS˘ČDš,&=Q–J5Ć2šU,‹IyYGţr΃~u;:°Ż[O%uťfWÉ9źÝœ†ą<¨h8ŹägŢţn×ÖSA˝zbéRđ>ńžqBŰpäčô™‘,s<ö’,VÍúň¤<†=O‰kć%IŃŇš>Ľ‹¨ědäľQ˝žáËcę×ŰžŽnóůş˝;{ˇ˝{K÷s{WtŞno~ʇžëv őCĎŰ-×*”YۤńévÍĹăY“ËL,EĽ%a=ÂËl ;-ýŒ+.­]Ÿ;5Z•ˆyžňđúěçOŇçżp’žöŘy:yr™ƒjÝËâ}ă}œŸ)iş_RayÔĐň ”Ż Šo^’ßT|Ň´ŽPŞŃśJYŚD-N•›ř›rĽ\ފhiŮËz8ikzŞ¤Ů™k¤˝§ëöžíH9Đ^ˇ v–F#ń‘SN‚ŕČ(–Ľä2ڏŰVdI™šŒ˙>řŘ/Kť"ÁoÓăďŔ*l§ě“Ţđ ϐ;ɤsÚV%g}íԘŢőŠYrkÎS˜jö÷hiœÂf¸‹o?÷{<—gY­ă.n‡ř”¤Œą8śoß|šxđißž9:rä0˝ôĽ/­űtCĚĆq{żôĽ/ѧ>őŠTf'ô3 zÖłžIŻxĹ+d{šüć$œpĆZڟa—čӟţ´”îá›ešąňĄëÉ `ťŃď,pą`ŚLMMĽďW"Q×ĨůfŽüfŕô—°×€``ód%ţ$ľIJş,‰,ĘbÖF'ĚË_ąľT#Ë8\ŝ(íđ€ßhRĚD.›ëHŠĆNÇŚ$¨+ oůhäčÜů8šLO[¤'žźPO ňřäSčäŠe Ťu/“÷­[ď#ďëÜl)Ü,qÂX.—%IIËgÚvŮEçă$"ĽHىrYYS–¨—źˆUý^\÷”ÝűímC{OłÔWc3Sş=ę6io)u9qœ™ČÇ-Łm\i Ňř`5ĺĎ6Š|<”Ý.U l=[-™ĺiŠ ˘hż/EsnćäeŠ/ÓůäN-:)i)U×W™B…OOž­ä=ŠťhNhĘř<>U„{Ú_ůĘÒ(Će.gggVźÎűÄý€{îšGÚđńÇŻç?.ëţĚg>CďxÇ;č}ď{-,\}ŕú O<ńd˝ÜŻH žýű÷­Xćg?űYúŘÇ>.i ĚŠS§čż˙÷Ňמö5:pŕ˝čE/"ÚŚźT-ŃÎčŔŃŔV˘ýËÁ` ’™–—הޟ?şS}Qíó:š,&oÜŘ[/ĘłŢ.€í%2lü]™œ$/Ĺô,ĹI#‹e“‚\ćhÓ˂łJh×)mŹ,I$Ÿ˘gi˙|GĘr ÄÝô՜/,.Ep:öô"8ą\i4vőĄŤű–Ľ\ăŃf6źÝźŻę}+zęř¨n OÓ}GŇ†PăSŠœĘy†ňä˛Fäó)Ţ"ĚabyLMc1jX/˙’ ýđÁŽ”édńęZiĘěJ‰Ě K\*3ą… ĂÔśh’ËôgmC)‰GĹă!$žÂ†al~Éů$WrIO>ţqĄ ŔV°“*ĄŻf¤7pő€Ši—}^>m˝igŒ™đžĘéá§+z˙çFt~ą’r˜˛Ě5<)~ű-ăąĽŻ zŃMĄO9˘ľďŞł& yăhä ë…wÍ弘iťđƒ”~Áíˇ?§h궖eRz/ŃŃŁ×ÓsžólzěąÇč›ßü:Ýxă ôíßţíôĺ/EÉžřĹ/Ňu×]'ŇŘɓ'%šěe/{=ó™Ďl  qÂŮ÷|Ď÷ПýٟŃG?úQY'§—qůMގ˙ń|+]ý‘ú=Ú×pq›˛V7.šzŽ6ĘZ‡›$şúŞľôuŔĺ ýHNfrŠK×ůŽDšv.ŐÉŰ2äş ‹p,żńĎ*žítůN€í f6ÉUL.ŤÜĘä2l˛’€.&Aĺé[&Ľo…‰Ÿŕ›žĆcŽA7TœŚŐ‘D­˛Ü%IZ>$i—$­%:vl‘Ž_˘s燴<¨¤œ˘ˆDUť\âFŕ}咠\ŚŇK|=e0ôőŁ“ĺŤÉ$˝Éeź>ďŞkÖmšś†™ŔŸá°Ţ—A˝ÜŃĐËşćęu^kíÝáöž+ĽTfYˇÎŮzšá d“Dډn.śł$—UZŽÔK;‡äžt’Ë(”*­B*Z^F¸ŞˆBľŢ(°QV“˘cçĆôŢĎčÔKJëňČ#ôä“OĘrŢôŚ7Ń?ü‡˙pE*÷3žýŰż~č‡~H–yâÄI‘Ňnťí6úéŸţżÓK_ú™Oű ÓÓÓtŕŔ~ętš{ {˝ž<Ç۲üüž}űdOá÷ósSSýUßĂóň뜺ćÜĆĹ5räúfěWrżöb}íDĺ1–ĚôşˇŚŹěE``ӄ˛Šő—|ëbb“IĽYБ¤'™âŕ @ăLÄŃ×m6$X‰đÄË&‘şÝBJdr Ăš]!ĺH’Ö⸠IZÇO,Ńů…QhHYÚz@°[O*Jťáíć}ĺ}ć}çÔ˛Ľúý˘¨Eőó”Úד݊¤%çő"Lźă/ůRFG|MKcr N_Ňr’×5ŮŢEÓŢÝN!Ǟ÷áNCřlŃ´9irY’řd+S _QIJ˘œĐ­ůłä˛ąkR倫„ÉT€<őňĘ dĄ_ř艊Ţóš^ôë^bčâ„ţdˇ eŹĂ&]ü’śÂśËyú2oÁăep9Ę_űľ_KĽ"/5˙Ýwß-S>ďŃŁ7Đ?˙ç?N.\ɌÎ8(ý ű í}(¤äćË_ţr:qâDÝëĐüüźô‡4ĹAßřĆ7ʔóÚמFڏe+śő-oyK=˝5Ž+lűwŢA˙Ű˙ök´<Ŕö†7źA&śž!cR0ťieJ^ö’VÁLE¸ź°—€``ӄҊŽŒó1ŐŠDŇČHĆŹ$éŠUŽ‘Ň@\^Ž1$<Ĺô2oĽDăTż ~/ü|ĽQŠniiL'O.ŃS\Śńřż0˘á°’y´ŒâěL‡œ˘űű",mn›nÇPżkëý/袕¤ąrčëßMÖ~MaL-yét̗ô˘ľ>ăçŔŸ——\^v4I‹×Őë^ťíÝŤľ~}ĚąŘX‹ĘgœČvÚÖMť$˛YK)ĺLçŐđngţ[ “ŰépŔĺâ/W0“ˇ„› x=5Ś÷~DgąźM3ś¸ËytßĆĺrYËf%9˘ur]jž™™™.F*SŞ7wÔŰÎe5›E_šÁŹ+9ŘöẚKâËeť)Á,ĚÝV~`݁€-A…&)!ČÉeĽ•ô2‘Ëâ ,âhMřKIOšĺ3.ČÉeă*”œž.ifşh•jź’7Ľ$­§B’Ö‰Avʓ´Xvš™éĐÁƒStă3třĐőzĹeo7ď;ˇÁâRAË.‘%›—ĹŒĽŞôóhÖĽe1ŁÄGYiSJ;r‚Ů`@R’e>´whoN2[X¨bě=IŠ™$póąL!5EŽŕ,š,¤œŮ8źKwfÉe˛”80 \Mč@Šţ|šçZo| óôčÉ1˝÷s:łĚŃŞu߯KtÇő†>ó ߒĺׂű’˝ş˙ůœë ZŻ*–§{ą,^/….‡Şšśoo°§PÁ,O Ű ‚Yž]œâŤ D&ö2Ěl>•^šĆ6rY™BŮŁĘŃL“Ë´Ź#ĎĘăz.Ľ—9X€ę”M÷cŠĆâʎœľ’´N-Ńącě´2IŤK‡őéş#Ótŕ@_ä§Í @JéFIq+dýŁqžP6ÎĹÇöu “%—éźšžežş˝yyŁ‘˜’u\ëí]ĆR™|ě…öćő…(>Ó÷dP=űdcŠŇxěŰ`ó…äž,šLĺ2šöäëmk‘ôŕŞDN.w%TOwôôYGňŠ!]vdęeÍö-}÷óKşëć‚n;TŃűż0 ĺËÝnőí >o˝öŽĚXr—•`śľ‚Öv*qÂŃŁGŠ×ëѕ!vćéʧÜ€kƒ&Á×ěşëhŤ f* ášöĚl *‹qjYH. ĎËđ“ Nžp‘Ëe:#ëQ’¤Ó´‚`ѸT!§jqÉÁ+ž¤ľ4Ś'Ÿ\ §Ÿ^¤ă'—ha$-–nšyž׏ÓS,éƒ. Ţ÷Š(˜ńčXJˆ˛ÇnSÝśÖÄÁL-źJ“Şřgš0š4š,˝LŚ*l?Żíڛ'+íŽGňŒŃܲ8mBY.–+K̚?—„I?‘\ÄJr‰#Ž4ő+ţ|%&]E_96ŚwvHç9šŹ~ű\ĎŇë_ŘŁ-ä÷—ÜjiTŸƒ?öđˆN-8écú¸n•¸fťDw=kŠ^q{I~ÄË)ëÍŞ¨4l丟dÂ&š˜oćŁ.›ĽűͲ5ƒGŤoGžy‡¤üTŹ6_ ÓŻ{ž<ˇ˝mW°łŽ ňžvž¨|ĽČE7ýy­~1úËŘ+@0°iZÉe…i’Ë(“Ë2éIžtÇR:@ʼnA.S'”oäďß\f°×-dJ%7ŻŁQ–¤Ë4.\$IëúëfDvš›ënÉE^>—|䉗ʈÖÓȋŹGÚÎFK5śE>ţ]%?I/s>=ŠŹVQLŒ3hď¸üžśƒá4d> 2ó2@-m\„c”Sű Ž]ť XOČeŇŚq ž?gQŇ ŔÖpąA­" ćÄőĹUyşœ™§'NéĂ éô˘Ł"ĘeozQ—î<.U°>ŧϗÜR’­Ďˇ|pL‹ƒ5Ś}žN}ţ˝ëY}şçöŠú™qŞ–Ť_¨ /ł Šg&&”ŮPŽ=EŒĆ-÷ą´îښWţœťÝ]YĐyŰO.“í6QKˇ+Üř‘ {f6Ńä˛ŇŽ”Ë´„ m"Ěmü™ň­Ş™œČ8<@Ę)PF’*ş[¤Ů+&<ń~°ěôäS AvZg’ÖÔt§]šrđžw¸:!!ŽŻ] GőP* fÖsXĹвh—Qjkcňä˛ ;‰`Fą eLCă1Wiď.K}hďNˇioŸć6â—Ű[&‘řlH.ăäžúgŐ˂¸ç$˝LSQtŰě.˝0ŕęg'$łö ă:7(qßăóOTôÔY'ĺ-§;†ž÷=şýúöe 9ß֏wÝRŇâR—>ô塔­ÖRÓßúě˝áů|ţP5ć§ )ťÉi˘ăúä퍓ółd‹Ć¤2^fk|ťŹ `w˛ŻĽ…zĂTE+Ů `/Á ŔŚáŻĘ6%7…AM–q´,ŚH5Ô$Šôä]S˘ąŠ’™ˆO"AŮ4Pi˘XŐam‡ż˜‹|5Ţ\’ÖVm2/‡ÓĹx’ä+Ç)_ž†#GÝ2lƒ féešd&űBA KrY–:䞘îaŒ´5Ú;św§‰š2d,Że›„¸–ČGářw*ň%šŒRş™‰Ć_Ľ?Ú}×Ć\Ĺlżd&vWXĹsďWˇ0đôđ‰ąœŮĺm%=˙ĆBÉŞ4—O8/8zčéąôšTuˇ(ë÷LŃwÝŃ ‰ußŃ٢žˇ’­ăô˛1g™eâËfúťńíMÖÄW“2ť žDżă„ësNDŽ+nSU_,Ôď_ź­<áŚRěE ˜Ř<™Ääby!ům|&9™PB°BN˜Ígée.ň—ďP3PKhÚ$VٔĵSđ~,.éŠ $i:Ř§ŠŠNßN[‚Š_elnëáˆ%łúç~Źé”Ęb†$˛núN§ś.M¸ĊPĆ"_GăÇnˇKťŢ>ŢE3fGnúŘA ˜Ř4*–‰(&ߙ›ä2q l†đMYĚ܉ďĺy’ÖÓKҚîˆätóMó"=mG’VCÓŚš,&’’S1Œbr™I^X¸›.Ěç\ZŒŞ{!xDK:j˛™A{šöNíI&Š“E'mŁŕš˜—ňČL“\f'“ä|+Ǖ‹Éql ;qןľő˛Ú˜bVŸÖiŚchiTČÔď}⌧÷ń+M?çܲ§˙ď'–čÄ'ýnáčĺϘŚWßѓ÷łDƆXa:Äů"m×çU#ÉŁ^Ę`’ kžŞŸ)Îy<&”j °űĐd0&/Iš[Âx{”<Á `ŻÁ Ŕ扉L’Ć”%—YR°4 K2.´,`=JĘbú˜Abë„/ŕQnŇAAf‡ŽđęĆ#GKËY’ÖÉ%ş°V’ÖÁ>]w]LҚín˙…Ćuj‰c†šR¤4!\ůŹTcXD3O*mŞšşQhďŔЎđ\[ŰTҒ‹FŽig~MŠ|ij_,VŠ\–Ž×*Y l†ÄČÓËźÜTŕiŞdIĚFéÝEQýâƒ*ýŽĄö[zä¸ůú/ż<¤×=ĎÓĄ[÷‰?ĺč/ž4¤ •ŹoşKômĎěСÝ>CÝbTŸ?M,}ÎąŁŘ‘9Ü7飲ͲšE<ßz9GW6ô‰l˝œNáŠ,\š+Y^^–óýôôôşç_XX ~żŸѸ-{˝ŢŠÁŞÁ`@çΝŁýű÷S§Ó‘çNœ8!?ĎĎĎËü<ŘućĚyGŁ‘ôąůçüÚ ?ˇ“ŇŻk8J‚™Ž—űí $3ě5 ˜Ř4,Ěp*ŽL.ła0,/‹ÉeŤŚ\c˜?Ś›Q(éł)gťż–K’Ör;IëÂŒ´nž§ƒőăÔtLŇ2ۡ~①mhRR™Â|>ĽË5âX¤¨=Oe5‘umWC{ˇˇ—˙ Gsš'Ëx[ţH˙lSSD?ŠÇ?’Ë\LŠcLĆý@˘Ö7 3Ý3tÇ %=~zDѧ/==˘‹ÍôB_ňç…ĺPpş[úÖgą\6Ms1šą—x; |ł‚łĄcô2[÷)]”ŕäĚLÎ8˛> gúPÜít Rin+{>ú¨L,|˝ęUŻşä`ˆ}îsŸIŹ,ËViÔn˝őVşéŚ›Ňs<ň}ýë_§;3žńŒgČóŸ˙üçéŔôžPúŕ<řöĽ/}Id´WżúŐäW%,˜q˙VR‹ë>-‹]SSSŠťÓ‰fú˝ˆűŮ,˜ńśq>—ŢtžÝ”ś° ˜Ř´Ô%Ë@š\Ś“|™Žç‘Ň€.Ś6y-‹™•!ôY™CoZňŻm×wq^6KMKKc:uzŠ%;M&iÍÄ$­#GfDvš›ë&ŮiťŃvĐśryť´JZúF0#ŠÉgQ,“ąSӔϔTšfYůzĐŢyéÍFËŁ˜Ć'Ç4E‰/†¨XC­żIxńMYĚĘMȕÖŽ1¸šáóri Ľ4Œ•`1í{Ź•"Ŕ§Čťo)éŤOWôĐS•ČîOŸŻĎŞç›>"?WZ˘—ŢŇĽ×Üё’˜Ł‘%c;’&ęFŽÄ [păĂ žîošŞţАĚ2gĆőűÍ asbęhÝ×č•&źĎmM߇SČ>ůÉOғO>)żóŔ×zŕž'’---Ń 7Ü ƒhœąŇoĺt4cCŮĚ­¨yęÔ)zŕ$9Œ“Ĺxŕëřńăë~?K`œ|pĎ=÷¤˛—ü/÷SŸú}öłŸĽĂ‡Óž}ű$ь§ÉT b€˝÷wY0ÓÄ0î#łlĆ7]čë; ßÂHe‰˘ň˜yjŔ^‚€-"&6ąXŁéeŃfâA>żXűVrY(Kdâ|U,!¨˛“÷*5e59­˘ŘÂAł”¤ľ<Žî–čéă‹trIZłłÝŔcáKŰ!Ĺżë?ž)ר‰eCž´­‰%ĄbŮLMŐjڛb› ˝mďŞj_Jid•KÉerźÇmç$”Vr_lă*Ś÷šĿ‘zž(˘W3ŇĘ át•ĘfŽ ]–şOŻ˙–;WŇńóž–FĄÜĺlĎҍű šŸő‹8‹ĚňBöŹ$šI–¨ô7Cşh(ťnšŠ—†Rv 8“íŠä|Ě}VĚä<nŒŘě8Đůóçë>Ě =ç9ϑR•\ňr#ä‰Ú˙ŕ4–ĘnšĺzđÁéŘąc´˙~:{ö,>}şî+‘Á6ö*yŠ÷ššŻĚÉÁ|s‹]ĚNژqrËnş]óóóiýš`†k~ŘK@0°%)Čś’ËźŠL¤T–\K•Čb9Ç1—Źxś|ph4öőädĐÍná÷rMŇzęŘBKvZ+Ië&NŇ:¸łIZ KMŁ‘“msnb?âëş1<Ťép*;…ÁŐ ąlE:WˇĺöŁ˝Ľ˝ů¸s‰zăq8˘iŇ˸ĺřˇ\ş+n+KjŽe=—’Đd~ţĄđłłf'Ş}Ű §€u:% ]ˇ‚Ďú#ä gÁŁóz ĎčűšƒŢű•†K߄˜|–uŒY łÍsDąú9)ŐKţu¤ć™—›#¸ß~ŰŞŇŕ7Ţx#=zTŇÇňTąőÂďáDM>hú?^Ňř‘˛ř‘Eł/ůËt×]wA0{íłLĆr'óœ*™i˙{'ŕus{FKcň6@&Ŕ^‚€MbŔ¤@hzŁĺC˘–™HÓĘĘš,á‰Eo(+)Ż YôЧnG"ľh+ŕĺ-o0IëĐHŇRX*cńk8ŽeF‰’˜¤ƒ¨*đq8G(AÚ´y™ÍÄ?ߖËŇ,.ˆUÜć´w˝Ýąm#šHƓ-ÂŔˇŐÔžz¤Z˙4_դĊ\ibů0Šĺ5a˜Ř ĚĹdŽÔ'ȒP/s†Q‚\­édAźîuę×ęÓúpÄýş"œ ­_ó4g×xEOű*l‡ÔŰ †9Żý_ŹČÚçęf9UýJ!spz™Ľ2ç:Câ2ž^:NMżhľ~ÇzŰJËZnä=“Ź–źŔżŸ9s&Ľ6čë,éű_+ďŽW?Ü˙uńN[ýÂ7^pš/Ă7gpŠLMËoĐĐ÷äËR&ŤLžŽĎç}óPőĄ’5~äůš˙Ď ĆúÝÉeŘËŕŞ#¸&řřG?J˙ˇ7}ŸL÷˙ő_`káď˚^fbĘDJmšk Iy "š~ϖ¤†*$sU.Ü | a8 “s[s'ZˆQIZßxâüş’´ŽŢ0“’´ŽÄ5í¸†Y‚™id>—•Ç4Yz™rŸĘ|’ZćÚI`šr–EŇÖhoŸw“ŻúŘÎá˜.˛ä>y5 “:iYXžŘTĆż̀­dť24UŤ˝ž śqŸƒKeň9]kBŰMœë&ËËL>ixťâ “ŃZŕő˙+מé!۟\Ň[ký;‹Ľľ9Sžxâ úć7ż)‰ ×_=ŹŔ5Ădߗ+.đM*ŸqÂďšsç’ôľÖűÖęßçbÚä{saŒűć,śąÔŚďăíĐ2÷Wâ{€+;ę°‹ŔľĚŔžç#úsúˇo{U㐐ó[˙îWéţŻ÷`ëHIY6”BŞœ~ĄöIv˛QŽąĚš”˘ĹI\,•%(&ů”DÁ݆U}ą "7łšSW(očhi#IZ‡gčŕ&IëJçqű,s;ԓs>K( Żską9n&JcĘkŮ—]HŃD-—ĺ Ú[Ií]ˇCĺšBŻǒ\fCYĚ<šň2¤Z“LzÔů*™gçĘ~¸6¸h’ٌѲŚ]V’hëţßHĐ)M}îŹű•Ą+v"˜(ż…~’‘ú՝Ž eŔWHZ‹Ë)wyšđ€Őý÷ߟÖËeœĘŔëżűîť%!!$Ľ:`Żł–`Ć,..Ś38YŒŸďvť­k˘yůůŐRĚVűî¤×Qů;÷ÇůŚ.ÍŠĺěůůšš9Y×j Äö>żůŤ˙ŽŽ{Z~ţ7˙ęçč_żýíôęמŽŘË@0{šIš °˝đ÷hĚąTâRĺ%)ĄYь˛ä˛JRÎ\řKŽNEŸĺŠ–ę‰E´Í|_çő,-…$­ă,;şD’֍ót°~Ô$-ÝĎ+Á¸ í°ہáôukłöŠ˘Sx.řśĹ˛ŹźŚAŠbiÓúBKł%´ˇ´÷ŇRÓL8&šŻ•\ćĽRW”ËiSM”#j’äâßJsü°ĽlŸdڎŹ\ŸxؖËDň3%-œČÔ 1óő¸.ś S •ÂE~›ž*ęßC_$pj-ň žœľŚ”đ¤ŒpóÍ7ÓłŸýlÄbxŤ)Q ŔŢ$żŃ#OËKÇŤdĆIfM-ÓmáeđM*˛éňŃ?€kvŘI` ™˝ 3°gYM.+ʂ~ňg†[Li¤Lc6gcĚÂhÂS(’Ä*™Î›—vÔD(ňV’´\4rXôYŒÂÓxěŰi€Ľ&.Óxúô˛ČN'b’ÖhÔ$iqé™™ŽHN’¤u°IŇş’„$°ş–*i‹JĚlSŢRÓžThjŢŰ:J|Ą­c2˜,Ó-²ř÷*ŤĐŢM{ÇWRꛓś)‹é˛”8ŸŐyľyr™~ń¸ÁĚ9Üĺ`[ŘÉ,$—qżAióuyďˆ+dRÇĘšnŔĽŚ7\&ÓľÖ×~Ě^ÉdzZs7}JÓ-ë>ĎTżţŚËîAşXrÁ• ÓéĐë_˙ú$˜1“ jZ†€˝ĚZ׾̢_ŸcÉLÓĹ8mŒfьűÖÜwći2Ĺ̡Ş<˜–,Ć'–ą°Ć7w(ÜGgą—­%:ůQ—ŕÚá§~ćg%šL]HfŕZ‚ؓüĺ‡>źR.+,ýÜŰ~‘^uď˝ŘZřť3‹2fěŇŘ^’Ë$áɤßeüĹšúË÷¸~$=ńŔšĚ˜pY%%•BB O‹‹]¨§Ńřňľ8ůëé§ĽLăŠSË";ńv+*;:4E7Ţ8'eűý+Ÿ¤ÖíExşŔÂÓRHÔRÁʈr˜Mĺ.› /ÎĹ$-Ĺ'-keLŚľ1Ĺ,|FĄ\)ŻíłĽ,ÁŒB2K)Çuhs&Če1Á/%œ5eJľľ},ËÇ> xĄ4,ŰĆÖKŰůy:ł‚šŽk+ʧniĽtú°ÚTjł^3ůRs~^űýá}ś¨¤ŸÁýM>kťLśĎö–]?ů6äžé Jd€kÉ„1íës,|ąřuá‡ň< f\fžŸç‰0}Ôd3}żŚ“ńrůg.ˇÉšXĆóqb m,­MŢhŕڃƒ_řĺ_Ą_ţ…ŸoKfżđ 4éuox°×€`ö,—ýĘŰ~~Ľ\ö‹˙†^űú×`ëaiIľdŤ‘É‚¸dZŃăRĐů(ÖÄt,ţŸŐň˜üĽ<”ŐLÉPœ~1 ‰Z\ji8rRŢČڍ ˜ëeœ>łL§¤LăpŐ$-–ŽžŚƒŚhvśCŽé´ đţłčľ<¨dâýŕ jÁ’SYh‰ËĐny RĹ'-Yjâŕlž˘ %%LmýŞŘŢźŽAÝŢŁş˝Ëk´˝—˛ö%H}()Z„2¤ź˝ÎgmËe‚YžÚWEÉR…4`+ؙv î\ çSŁ–ˇäű:%‹]ő@NݗXqšĚć)çJyIéśkŽë‚\#ˇQ\vřÝÇ(\cő:–ş‚z­Ć}V>/gď_„w9˘ž|­÷˝ŤÍ›')č2ó×ÂçŕHűÝn§îż-É`€ń ÷Ĺ9Ĺ€ŤŐnźX­­}_î÷rš÷‡Ă ¤A 75ŰŚŞMŢ ë[7v˜đŐEyšœXŚŠe“ß!Žt%WŽ{_óylIf•Ł_ű/ÉϐĚŔ^‚ŘS@.ŕʐĘcrŞ– _ŞY ’”§(=Éđ—%Ť(ÖČwö —Ůřĺ^]y´ÜcsHIJ ‹cš™.ifŞ Ngc_Ţ91ŠS´XvŻ•¤utŽ˜˘~ż¤vBǕC“´8Ql8tAć‹"‹v<1šlľˆ÷ŕ0™”žĽ #Ą^ŚŚÇY-|ą˝ëu]XŞŰ{‰Łßëö6×V{/p{šö–´¸Źô˜žL.“2\ÖĘůÇƃ_Kˆńą/É}Už ‡‹PŽBwŔgżëů;Üh ňVýłŰSAŽŚ:ő@N}N\\‹ŘĹ;˘Ĺů_&lË wÝŰŢŤ[{l*cÝď–Ňgěč" ­pťW´ş\žxâ zđÁc"o%Š źĚ}čCižoűśoŁŮŮŮUߟߘąÚŔUSŠ´)ß­ó27Üp=}ń‹_¤żţ뿌;nşé&Úż??~œ>řÁŇ _řBşůć› €˝÷Ľľ|%‹fœhŚ)dÎńăÚ}ý<ŃLćLgfŚŠ×ë­ŮG ™k f`Ďš €+‡ füÝ&šĆĒ—A°qq Le1Ša’đDá‘DÔ!jŮ÷"ů(<_ÓTLÝz”°ÓĄĽlýß.ç)é_ĽĽ™é.<اǧEv’$­]tĄ€Ó´xżĎ_KšXż•śÁŹD>IëD¸¤•ęÝyé˝ŘÖ:&Ą™$CĄOŰťÓľ’B˛!Žâö>Çí]OŁaÓŢIÄłĄő8ÖÁlĘĘb6ČeƆm'—ů(¤Ĺ’ŚĽ\´ĺ'ŠˆÉ;řůœWQŸKŃL•4¨űĂąoRË|(–îĺ=VţoüĽK?ćëˆ=Ÿ˜†[JŠ™ľNú.=NđR).Šá*ľ­gθ\ÎÁƒÓű:´b.ÉłÖún¸áÂrŃLśž•ŚžŸ››Łg<ăRŚGžőŹgɕÂĚűĹڗśÖŚ›FšĎŢëuSßb€‹É \+@0{Čeěňä˛4(f˘Čż¸ťěËť$n٘ZAQÔĄü‹ž­§fn4vtćܐş]KósĽdbląöíďKůÇ3g–e33])ĎxĂ łő`^?$iéi´;Đýći8n\9¤WˇEŻŰHJyŠF-…ŠIňk >Š|šźä/ŠeóőŽęö.hnśnďţľŃŢĂ5Ú;‘$ƒÖáĽt<›X“ĹJIî+šĎ„ž€5Ž|şĹčńĎÚĹ*W yYš- —Š‘ű*ň1yr#R °ířěqâܓՋ\π‹Ď–eR’™i˝ßD -­‚$Ňś~=Ş^)4üܭϧݞçϐlŚďÔ˛Ţi|ž%ŠeÖc’n”Ŕő=Ąßăă`Pž…“ťžvé›+ÍjĽxrÖóYĄ|¸™ËôšËYÎjěäw‡|VűN0™v `wÉ ěU ˜Ť’ôŁ+岲 ýöˇÓŤ_ű:ě,apŻ)óç|SBbů̐ôÔHhBábIGĺ2ž|Lt’Š(Ľ‘¤i5ë85ůfŚJęő|“ľđąmXr:qj(Ëf ‹[ý^˜X€r:Vl(–Ľ\f›RĽ2ŒŰJ. Ďk ˙Ŕ‚YżnËáČÔSłžá°ŢŽÓCY'Ćq’Ů^şpŃ´ˇŁăőquâô@d3%´§ŤÉ @rkj‹eRŚ5Kî“`Q”Ź2šŒe´‚˛YEü,0ö ` Xűüܤ–^Š0ŸÍD˛5×FëŰŚöź†Úѝů&kbhĎ6sˇ׿=ąI{¨ËŇâR}1 2€k™­čowŸúbň›Ţ,Łß§ôŽž'ż™DE3Ü\ť –ĚxüóßžímmÉě—ßNSÓÓôŞ{ď%Ž6,pňŰżůËŘMjÉe*‹iY@ĚX.+l“^&b—ŹÂ{ř˝šźUAÜ)K/'HéWúQ=˙ů cI1ăÄŠ *)o¸WĐRg΍e˙Î/ŽeŸuЕSËú˝z𾍥#:lR[ŰÖÝkáőZF­RRŽ4Ne&Ž6Čk<ńö,h{Ÿçr{°˝ëcč,§Ĺ ĺ1ůš4üÍíŔ‚™a#,ˆgŇnE&ľ Š -]šŚ4ŚO ~1ĺ/NRŹ‹…ż* lA@Wqż9ëř5JG&`˸˜Ź6YŇSž˜kŐç!•Ŕî†Ýv - TÎĂ˙ńżI\ Á Ŕ–Ę/’”°ĚËęÝUĄ\b,ŢËqĘS;š,”Ô÷JA%GŠdŚ")\őü,:;>ĺ]¤GroœÖ8=ëřÉ!=}bdŽqˆ¸Ň˛ĄÜíő uť!Ą,Ľž‰ÄdSéFmł ňš,š,ŚÍńň(EœWĺĺöFAěÓńĺĐŢNś…ˇÉ§ö.h/08zZÚ{HÇĄ˝}#ôqY/C•LŒI¤MҤץ­|kŔ^>ˇÂŚ4>-‹Éăą“ÉŁT&€mÇS§>uIə^űYJZęďk•°Q.&‚­öZţT¨¨Đ.ý™ƒôběH0W%?ő3?ťÂôĺxɏ|čĎ °ó4IdASĆÄň˜šň”ߍUšfRšLSÎʔtĆÉO!EË'i}•§ĺAE§ĎĽ|ăŮóc)qX]ĹÉZźíźœ¤Ĺe1OŸŃ ŢGĂX.ëtˆşÝúą ˘™1M*IˌĚg¨I‰óޡ.JhJœŐyă5MG“utxá3 %IÚűTÝŢ'ëö>w~´'Ú{qšŞ‘Cźo˃úř­ň”7'ǞÉĚ7IdQ.łą”kúPÁLß/‰e6ˆўä—XÄ ÇżC‚€Ą¨ĎWł˝v:™öÚă^Ň;l“‰eZł™šůV{/š v7ě.ä%2v~ňg†¸`ŽJ¸&ń/üňŻŹ”Ě~áčĎß˙~ě,"ŒĹ$&żô;/ËIIłrYĺŰ%4-Ľ˛˜,î„ňLĺ*'% mQ%Ɍ5)NšZ¸PŃÉÓ#I :yfDƒaSňj›xŰe_N éT˝/ ‹ăV)JN›ę‡Š(Ú YÜv\˛14s“B"e}Óf\f˛R–RiÇPj3”#í×ëŕÉş<ŠĽ2ëö>3LŰxuˇˇ“ö>&ű2”} iqÚŽAl,¸<ŚőQ–ŒS<ŚľD)‹băŞI‰Sš˛l‰hašyrYË<Ű ŸÓřŤÓ‘šö%>ľÇ*|œě+SÉÂ5ÇpSŤKŇYN.§ĄT&ě>ţňC^)—ŐăE?÷ś_×€Ť”ČW-÷žć5ňřËżđóé?̜œôëo˙%ůůuoxvţţʲ˜Š˙­$5šF„§–\F";š˜ŢÄe™TxŇť˛řQĘ59’2˜AŘń’dƂ•Ť}=ƒóëƒQý{q,‰_ź´P2˛¤n׊Źv5Ŕ˛Ýpä%…íř)NdхŪ~.¤śŠ€ÇŠeS=˘~/e*1™ŘĆ,ôŖ5ňÜłć.8J!&:_˜™Űšßch8Ź+ţ|ĂgĚ•šPщrDZjóŞnď“!ĺ˛QÖŢaŞŰ˘p2…ă™D+3aL/ŕčnNkšDš Ą™”R–Ë•Mrî4°ÝęÔç÷C3““‚YóF’Ë*Ÿ’Î)UŠkAśçůźäéY‡ úűǍœŰšżľ44r.ďșŒEőşOáů5ż śˆľd°üů•ĺ2ůćߥü^Ś‚™Î`wš ěe ˜ŤHfěT`*¤,f.—ąŹË5f%5˝L$łLŘi&ž “ĺ;üFžcŤ~~dëÁR“¤ľqý÷ďTäńAÜŠć‰úœŹUš´}ťޏăňĐŃůN.ŃÉÓ,—iyšIŇbXŽëőBÉĘn—‚čËBJľD>ŠIq-‹I­;ÝTŠ rYS K¤ľ‚dŞ›ŸfŚCz™[ Œśwřź_çęíź Úű\LŠăň˜gĎWu{W’§Ű+ÉeśŞ❈}2Š\–ĘbF1Q˘$řIŠWk˛˛°FÚYg™?¨\ž”ń9ől'ąň8Ý|ŔŇŃyKrŇCVÚ0-Ą ç%Ř:ňT˛Éç}M*|Ä´éŃh”=çĺ:b>?JcŔîrŘë@0{Hf\y´$`Yj Áđź¤hĹ2ů™b BţŸ¤pŮđ3§–ů‰ä2Ţ!"U$œNé¨Uőßx(ݘ×o’dŞscI2=^ęŇu‡;4;]dÉ]Wé.,UôôɑˆNœ¨ua‘ˇ˝IŇŇ@2.9;íiv†nJbŞđ¤ri™–Ä4ÍŁľÍďyYGç]*“Љrşr–Úöͅ…ńľ n×üšˇ÷™łő6׏ÜŢKęö>ÔĄ™ÝÜŢ'FRóô™-,V­öVX6+ˊ:W?’ӅmJ_† <.śusqH>“şĄ -Ąăä\,-Ęéeyriz™łťFưwáSÖ\Ÿčśë,=~ÚÉŠyäęţËŇË`›XM0ťŘóĚp8ŞŻW’^6I>żŠf¸QŽ,ËŔľ3°g€dŔ•#%—ą\“’›˛ä2™)~YŽošŒb˘–§,˝Źčt.•lԔ.–ŠdŢ"Č=,Ť"Ę>a},ĽőűŤq=qbUŘžáź§ŠžĽn7”-ĚnôÚQ8Œ%ŁáĐŃҲŁ3çĆR˘1ČeAvJÉeQ ët¨ŢvŢ~.iDx*L“et_RšK•řB›hşKi˘;ee1}L“#I‰kĘ; \–łäu†˜‹KĄ=#j•|\ćöv!Ýl´ýť´˝OŸ í}ŠŰűÂ8św“ę˘e1Ë"Če,3Ś´¸(čiű‰˜'kńQňŁ–ô˙š4žL.“ĎÂ7ŠršülŸĂřÜ^Ÿt^rs‡ţţą1ŤĎíËcGŮ5/ŰD.‚­–<–?Çc[\s­Ň˜kĽŸ¸2@.× ĚŔž’WţËŠeœôԒËb˘Ű6&I:yęV,‹“ËÜ\VůTBPĽ5Ť2Uœż,éçšýí=šş˝=?‚ŮÉ!-\¨BéUď“<ÇH0^Á‰eő:<9)KĘű]dÉe"BŚĎ+Oî‹"¤1™Čćw./‹Š˙„ă›Ÿ ËŁ(úۇ¤mň9Żţçî[Kzü”Ł/ÓŇX ™ÇóŘJÖŔrAL*{Ô\ůq4%ůL_ĎĎß{ąĺŘ^ —k f`O’—/űˇo{[[2űĺˇÓÔô4˝ęŢ{ °…d fYLl ÂSAąTŁ Ig*—ir˙}JYL×Čeś•Ő/ĎKĆůxy|WϏeÝ_ ŻÚľyžaýžsçÇ">8]ŃělAűć :¸Ż¤ůِ°ĹňÓVĂť/ j‹NŇ˝Xrbى%§ĽĺJ(‘‹ČˇCB8 NĂęiĆÓô”§^ĎP§“ŃŃaĘĽ1ýÚÉe!MÎ4Ľ3“đDiôŘĆD-ĚdšQ Ź˙3†›- nžfâ Eýž[¨ŰˇŇBÚŢő>×ď;ˇŕh0ŇÉÓăz igiďşÝƒÜˇí]Őí\ˇ÷™Řދ“í=Ę"’˜Łn9Ś~ˇŞŰšÓńHäCMÜózœ&YĚÇ2+Â\!ÉeíżigMđŁx(–Ňl—„b%›‡“J Ÿ¸ëG›ę>’Ż$)Öڒ†ăĺúœ7Eß󜒦ǧé…ersSd;q°ÂTM`”]€Łň—oU90Íu]ůŞeĺúę`0JéeyJ™˛šLš vžôŁ+岲 ýöˇÓŤ_ű:`/Á ěYô?Ü-ÉŹ~ü?~ă7!˜° Ä ­VJ–”Ă,4ÝĚF'–Ěҝ*•ž(|™6Yʙ~Ńv*äř&AŞSş¸l' `ѧń˜KQ‹Çů(U!YëÂ’Ł…zbéky™e$/‚Yżgc9DŠÂns.`MěŻJB>l;OA– Ľ0šläňr˝žz]çÎÁŒËv. BjYHżŠË5š˘ĹÉežŚŚxťęiŠKcšTŞQK‹Śt‘Xę2”ľ˘”@Ö$—ľŁ×Šfń –(É{&&jš,>RĹi+›vŕÉUAÔóR›Ą-XpšLŢ˙ĽĐÎŇţu[p{÷´˝ËŘŢvíí|:*Ŕř3éiNžłą˝Ď_ŕťJśÇj’ÓRr™Ż×ďë6ݍÇrY×QŻCí˛˜š\–D0ż"šLUi†8lgüËŕőzmçřǢĽ`ů‘ˇlA.cŠš¨Ď3Uý{Ę^›RÎłüs§>ÇšëÓ]ˇĎÓtoH痆4íxِţZ8yľ—÷ďŹý.ľ2…Loœ­ęďiăúZëPž/ę Ĺ|=§ü}y˘Ył |G€+Áo˙ćo@.×ĚŔžf5É °ő4éX.ĘFń łmJgjiGţÖĚbcąĆ…ä2ď›T¨"~iá[MšĆ â„T-˘F¤âR’ÝŽ—ň†Ë˘Ĺ%+â9Ő°Ô& K_,-\pőűĆR*łßˇ43&Nؚęęvm,ëJ%ZMŸ˘Fvă˙ŹpjÖpčiP?ž—CiFNÎâu ‡NġѸŢ×qlj TqWŠ[zš›q)šŹßăçBę›U9OÇ{ŁČ+†ĘRB›q-'ĽdŤŹ\*3+„5/ *ŁIÂWÖŢEA1͋ vćQřĎk{‡4qŽŰ€Űčź´7ˇgúf§­ČfSuŰOőÖŃŢUÖŢ#'íÍŇÚ ƒÜŢőň5ŠLÚ{Ä­ĐŢR¸UÖÔţ,—ő;Łz{*ęwyűňä2Z‘\Ś9c’WEiS ÍĐ|>–ŕŒë1ÚƔRű|&VŽëíKz_ťd)pŮř˜^*)¤ĄDySţR" I)ł´L×Íť ¤QU÷cŞúüYÔçĹRD3Oś5PacĂé]օ~ˇĘoÜ e1˝¤•-לůQ…˛<éěRŕF ¸ň@.× ĚŔž‡˙CŢétĹ"6őŕÉ˙óýWŘb˘Ä˜‹_h‹˜FĽIOZę’|“Z– cúşÉQ"(eBŽČB.ŹLÓšlLżâeĆÉ{Â6đ“őT™° ŇR‘MÚŐ˘lg(Ĺr“Ęe"˜ől&<ĹDł( 5Ée,Şń˛‚ôD’ ľ3.ŐȡKî|+ŒŃłNéE’›žbšŒSžˆz]’uł\ŚiZÚŘ*ÝQ&ŤI[›ŚŹcŘÎf^I~#Ęîr‹CÍŮNÉź.~&Ń\SËA’€…´p1d4ď Crœ–ßÔ4ŻşyDřZô>‰V=nďéP.sşo%ĽEż‹śˇYM{sBZh&í=tí”1Ű]›N“⏍ŰŐIjŮTOÓ˂ŘV›.¤qŇXjťL.[-šLĺź(‹Ľ46MâĂą‘ŐTŽtąä+3[ƒ‰çAőj—„çpB­Ÿu–:EWĘf†›9x@ca‘űZU}žîĹžŠMwŐË0pbEĽ‰xÓ5—Ăää2†ż{Š,Ć f“‰ek}Ăw4¸2üĚżú_é7ő߉đ“?ű3¨ Ž ˜kţ:ţŁŔödŤúKąuI )O1é)ťóŞ%×řL*´üc&Gš°\וĐʘč%ߟůľ‚¨M÷C2ÇârY?ÍeĄLĘ1óžýe›EŞ1˝jĘÖ‚Ł˘ŒB\*ŃŮ ĘN:@šúĽĺAk’Ö’Ĺ2jrÂŇĎü<§€Mő=ÍĎV43ĺBjY—D¸ Ée¤$­SČDZ#“Ę56e1łíÓ˛˜Ž-ŁĺÉeiž(>i RJ%%ăg“ŔřÓËXŠăíć—X ;ťPĐŇ2‰ŔW9JóOś7o=‹a<§ŽĽmŸHűZŤddžOUŤ˝őń´rÍÚę>l{‡Ĺ˛1őE,ó’šÖ)9Ż)‰Šň—O˘&e5ĽTő¸†X`K1.Eę9ɫ͟ú E}>ŠýúœĆ Ąr–’ů+˛ž~iaa”ʲ”e™Dłľ3\ËřĆž‚dfRZ´~‡Ó3}d&Kbz\T€+Î=Ż|%ýń{ţ/ŕZ‚€‹˛ž/Ź*WŮ8 ŮOŚiZŽĹŤÉR—1*ŹKK:RJ{š”ËT\łq“…#N#ăôŠN'–ޤ0‹LăĘŚt­P^’RšBţϒŮhLŠ„TاćŃűfűĂvPJò1…,Ľ’e‚SJĎĘć×Ҍ,hńśö{MrŮtßK‰Ć˛oJ#‹Ée.&—j’Ë´]´4fł˝QzŠŰ BZşăÍŻ’r–Ľ“¤Ä5ŠmÄą juť>&u…FíÔŔňˌ´gUŃ Jö?“qÁTôńłŃövímW¤żův{O$ąíokQ„Ô˛˛tÔďŽE0SšLÚÚ6íě|&—Ĺśłůą§I.ä2—ľ]sLŘôwŔ°t—äĘĘ7âšm1p-p7"€őМ+Mű í@ԏ|.ă’Ř2˜ab6ŠőĄÄŚŠĎs"Fű˜ţ:–Šé˘D&l„źŒeşůW&;ńťšä5ŔÉkő(‘ €‚€-EKb–ĽM⌖^Ô‚yrYŤ|&5r'<Ť ů0&.[–ťŠLĽ VVľuʑ”TŽJ‘ž––”ą$żV”¸Ž….š*•.P#yĹ-iňšŒ-á,Čh,fÍLąlş_QżÇék$ÉXA.łéľ\dRÉ,•­źhrY;Ťš@AMňV8™ĘˇK_ŮL0‹NYHŕňÍ6üz˝ÍvЍWˇů`ĆÓ¢­'’ÇeG´2KĚč˙5`Ľ BńŤ&íë#>î#‘YeńYŽXÜ~Ęa˛PÖŠęśËńѕÔ2ŠmÖĽÉeI#j%—%a,ŽS“Ë49Í$ŮĎR™äJ“´ —…ô>Ÿľ3Ůő fŔĽČ\:ŻFiŒ•1ďDĘŻ{krŽŞ,K˙őůČłpf’čÍ˙Xďר°`ýčuŮp­ÓLi&Ežěó‰Ö´>nďÂ:Ůž:e%ŠeÝnĚ:eË ;™\F)YŹYvs\Ť\&BيąíTR“6)šŤ-‰Ďľ“ÎŇąď,î2°%hl(wíÂď.ďĎÄó“œď\–˛jŁPfäœĹ'*ă\k#ďŻX?Ť•şdT([M&[mţ‹-`ť``ÝŹu—TJ+lw˛ä2-oéŐň™ˆC˛˜§đ$ÉeMů%I„Љh6ÎŻiZ!ŞIŘP᪈5KďDěęu‰–Śžl=44[Ů0]“o6”h…2Ś_ęőKűDě–÷Y)JÝnąŹß ie*”őş\Ž‘Ľ3/šě_l7ÝÔ ÂޟŚiť š,l‚ L™ÄgŮŠŮ3•ž|`Ďść5Í2ۓîc“†f˘ǝŠé)/űÖŻ÷qi™hqŮ֏VÚ}8˛ĄtŚ3™aśzbœÉ˛ÎŚŰ:ůJaÖmÚ-š9ŠŹŞ§ą$˜ąpĆĺ1CJ\LÎ㔸¸Ě\ćšŇ•ą=’đgŇćŚ$>Ýʓˢ¸flli=F+SmÚ7_Zë2.ŘyŔ{Ë=‰xŢněněĂ90ôŒm÷s˘ýŞŐJŻ@0€1™Z–˙ź^šl­ďb(‘ €‚€MabTK8…Í’›XÚŃAHÓ$ciY@Ż•Śĺ\+šL“´XźRůŠQ9JĄ(“Ëň5ÓŚlL4cá+H@^RĂĆcKăŞ Ş˛őś†W–ŸŞ*$ŁiŮHď'żôS*żhŒéUa=… ŠeźŽNÇKŞ f,—őšf7o&şt˙ Mg‹Ö“'j¤.ʓ˚ň‹žĺ]ž\ֈ|é…o–—’Ë(O”‹i`6|˛ÍźYiLçˇ:żIëçvĐ}ă$3N “6¨§Ah0ôQ23uť×SÖÖUL“ űlÚŐ2“kćCY/Cń3Ľ˜f}ÓćeÝž,–•A0ăô2MT ŸML͋۟Ú"ľ]8^ľĺ3ąY;gǝ´‡ ĽBősL‚`”ÓüI‚¤Vj_\]óˇlŠFn?ŸD}Ëćç?^ŠÎˇö&Óf!˜ŔćYo‚“njÝřž€‚€MJAZ™T.SńKe'[„Ô&M!K_˜)”%WŽĆ㘠EČUĆĺZӖË8*Ě’7lJjKnZšßǂË^˝ŽŤçݟ÷ś^N%Ifƒ‘•rŽƒĄIe4ÇÎÖďľä],7•Ľ˜Y‘Š|˝_>$d‰ÜdŞ~ĎÓT/<˛`ƉYĆş(š)e˘úŤ˘‘ÖB›´/ 4]”Ë2ŮÎ'ŹóRzYŤ­‘OËei˘–ÎŰ8Nqš*Gšđ\Řj'˘i}KŻr`ŘÇN‡¤mfúú‡’™Ëu/-‡ÇAýű(•Ń´"ů…R•Ś 7AZăĎĚJYHë–AäD8~dšŹ,*‘Đ8㎳éL ‹$6rY*ŻZeXlëRËźć%4ăq겶ȓËJ- KŔ—ö˛ĎPv‰BůL^7.˙Ř:šţy+e2ÉŻ"0›Pł:ĺązżęóiYyĘ,€Kł–`–ßěÓ<'˙śćż˜@†3ěĚlŽ(&†ů(GůXĘ0/Ő(‚”–šTY,›Z“ŚBiŘSLŽŞ&Ątš*ɗrŇm ‰ DTtbéJ‘(,k4v";ąüÔíÁŹŞŒhŢĄÄT,+ ~á)JcELÎęÖËćRœ!ą,Če‘Ë|çČkB5ÉlE#wĺŠezÝŔŚD­ wŮ,Ńkő䲌|ćdŠË >Q;šĚ„ťĺŸͺÝdÉM2+d´|[Šfq›‹RˇŐ‹$ĆŇŘpTˇŃ“Í꜐$šc{‹`ćU23ńóŚ¸Đ ˜q™–ĺöfąŹŰ ŠpI.ó+ËŚŚc#¨Š-dŽ\fš4>Ţa—I<ů˜ÖŚid)-;Ž›”˝ô‘Çe‡–”ů$%Ż‘*€M#e1ŤđłY]“ó˜)äő<­l-Vv`ŕ6ÂĹ3†ŻÍćßťôş&’ɰ›€``ëúňšÖR’.išŚ4ŚJN­Ň•”ÍĎ O•k•Ĺä94Š+Ś„‡yăü.%o™”NŐN.kÄ5-)r”m„ ÝN cŒ'NܚęSLëŠR\QHňZÚUM s!ů#ěc}B-IśĄS†ma *lű„\FZöÓŽË‘ŽbB‘É:łFr™k•Đ\‘\ꄦ6I2šoJnŞdÖj(/9šl›ÍŤ[™'¨Ľ¤Ž(SĽmˆsą<)'œąŒ,•łTţŇł˜T—lťX†”Ëa–*Ńi"ŻßÉä˛vśń¸+˛śSIQť\.ڄym&C[đëă*Ěß´G”uŮůçç}ÜJ¤áä4ß4š–ĺÔžQŐlsjěK€Á}ŤQŸ5ÓO•ç‹Đ5p´‘’+8ďŔ峖`ŚL^‹Çw0ěF ˜Ř4üýˇrŽĚŘɨĽşB6KÇJr™i„$M-s“ÉeŚĺ};ĺŒÉ“ŠĘ,AĘĹTŻĘű‰r›MIĘ<ًm˛hŐ+JŠW\ÚÓş´Ł*>9‰i‹ŰœRŹŹ”áLR\&]Q–•RŻ •Ŕšr•M[4rY“FŚšeyRŤ83‘\KXf%4Uś#j–ol“Ş•¤57Yrs"š,ß7—Ľ˜ńź6‚*—i!M—–$3Në”a˝ü܊ýs“˜ÔČv&”™ôkGĆ4Ée6ĆžŠd'eBł}ÔŤ*66Ÿw{Ů2ŻŸKŃ,[ˇ9‰vž]ę5|&-ÓÇr›œžW]”€Í˛śX–0Ë0[Ëv~ĎÂw8ěĚlf†ŁŠř*’ŠÄUÖżOJ]!Ę­”‡(H>6űR,rY,MX9×$oؘœdU˜&šL%].Ą†Ä°˜N•¸,ĺLE4Šĺ(YD+ă~hŮȸ-MâUŠl’ň2‰†(ĽŹůTâQÓÖlK.“ŒŹ$t5ńç+“ËšöP™I—Ý$†ĺÉe”–×’Ń|;‰ĚdébA.sŤ$—5Iga(‰h•Óô9=]ŽMCŰ.ű\ŇrIĺś,AÍ4Évá3tq˙šmĐġt,é~9jĽ‹…ĎŽIÁăírIkä2mƒ&‰,~&ćĺä˛ńDž•ă.×üšř°“ÍqG™,iM:ś›í ˏX0ŤägÄÝv+Ě\’K•Ěd÷f0tőIĽ˘.ą€S4Ée6Hc*'Š„Łr׊Ä)3Qć˛j’ËÚrY^ęŇĔ.ĘŇŚňr”@¤áTI‹b’ c…i0› UZfR-&‘Ët^k3‘hBě"Jĺ9m”ËěD:›k%—5mŽ%ľ´#Ĺtś”ź•Ľz­•\ŚË_‘\–UœkRÎ\ײ$ľIšLçu´–ŇßRdW–Š–ŇÂ|’ËŒŃcƒR[xň­dą$ňéńQ4ĺJősžL[KŠońç´lß.ý™ď[J9ŁćłŽ´DgK.ËRѤń(mƒ[‘ˆFA$TšĚ7ZĹ5)‘9şt|îD°[Ŕ9 Ž= ˜Ŕ5ÎĽäąőĚď*GĂĄ&˜ÔMÉe6 DAźŇ4˛v"T“8Ľ1V1+KĘĺ2NŽ’e& R•ŁLZËĺ2§CzYSÚS˝˜\f4šŒBYV^nÚżX>S ŠÍĽ5–Ęâ1Í˗俪Jm9ůˇś0ŕŘ ˜¸|RژĄŃhLizŞË@ś%•šÚ RI]”Ë_.¤GUá}*ĄśI łYŇYË¨dUÍ+e#°›dą‰$+Ęe­fš)Á*K#óZb’šůSHkZr™î§ó”Éň˛˜ŠŹc&ššLÓĆËÓşZ)`>{LU;šŹĆyÎů•)g6I]ÔJáj$-Z5é,IvŽIöj%—íípY2šŚ‹Q&ĐĺŸŇ_ú ÓśRslXˇ9>V;î’ȧËuMbžśGJCÓŇŚvä˛ěókRíšt˝”ČW5Ľ:‡Ă1šqEAč3M„ě ˜ŘššÄIL%Eň)ٍ•ÉD°q))+źO”šŚŹ#‹8*:šP:E •vʲYvJ°Ş\’Ëxv–łRYŃ$¨šLJ"Z‚Ę$—ńłĚU%ͤ˛Ÿ"–”‰]1Ľ+K Id*˘5i]I.ËĹ+•´ň˛Ÿąń’¸ć˛eŤte&Ú/“áÚIdŚ•,Śác›4ËŚôŮpůO›}~­RžNĽżśX–’Ë\SRç7YJfdÚĽ++Mˤľ ćĹ'ł$9ž×Ũł$=6TrŁ$tUÎO$—E ,č4Ul<‘°§ÇGú\D$lĘ˝j[ŘL‚Ěů\J.ˏżFÇbŚŻŞ´°Ű€``UÖS:3‰=,PyGŐx$˛Wţ6.IĆĽÔ“V&dš‰)“ÉeE+1Œ˛˛‡<ØÎ[DšLˇ#%Yĺ)gy"ŮDr™Ë¤5ŠLDKr™oD) ł)],JL”'{Q[r#“ÍßČe”’˝|k;TFkä˛Ő’Ë2q­•\ÖĚÓ$—ĹĎ%ś '§Ů(F]-m‡Óržf˛,fÜ?çŰ)q)šLÓßxáq;ČŻZžS–g'ŇŮbŮT—%¨yj֝Ä.•ş\ž\É,-%Œ‘wÔwNKŹć‰r11ąŹ•\–-WĹľ”ÎÖڎđ>–ŘĆŁŠFŁ!•Ć×S‘}ötÉż;Ř) ˜XšpÖüĚé\%•EAeéi8Ń`8ʧ.ĽIČłšc´¤ŁĘT1Ɋ ÇÇT*N.W.•Le15LVF3KŚňMҔ”çĚ䲔t6)—ĺÉe™Ô•KA˛\c˘¸–IOaÁőţeĺ 5!+JwşíyZ—Ëڰ¸Ö´‰,<&†šV9ĘÉ䲸Ľ+SaĚ(FŮô~]/7OE#jJtސÖH:łl×švTç›ĎÄÇ82Łmg9Pä2–şXŹB IrâR’[’âTČsž• fłĎ‘Sâ´ÍĎöhy™ł!‘J2Q§~…+›Ę:JRW,é˛ä2IyŇä2Š% YÖ*›°<‰,Oڞ1™*Ń䟧XĺÉećO˛QPá$Q‹ĺĄ(Œ1ĘśĆ(+颐Ś(ÜŮ,­‹Ňv8•ƨ-—ĽRşÍ­˛‘á™\łYÚZ^:Óľ>?“Ľ‹Ĺd6j'ł5ŸˇĘb1ń­ľÍ^ŇĹ²ŰÉoZB3Í“ş¤=RšŇ,m-ŽÍÓ¤ô×Äłń2Cň\“&ňa.R&ĎMˆyŽ•Ś"ŸOĽ9m,mšä2I.kĘŹĺÉeYâZ&—UcKˇRJN rY8–ňă: UŘ㤴áĐŃŇâˆFƒ1Mu í›ëÓTý7ÄKĆŹŻLć$ÓŰ3k2)ž­öťľMOMŃÁ}ł´xa@KgĆ´´´LÝnnú˝BK“•˜¤źüb˜ňä2ś‘Š‹ü34ńłnËk*5ćĺ[M”čZr™÷Y—ő4T´<Ňh4ŹçÓĚT‡ö~ý7ÄK“˘ŘĽ~€í‚€ËFe—~żKÎÓÂ❻p–†ăeZ\ä$ސŠU–6I>6FS9•nŞzĘKFą§HňU–\VľK]6ÉeF„Ł<1ŹŞš˛Ša[uţF ’yŁÔĽÉeiŢ(•ĹʔŹIšL÷MÔR™Ißlw2Ŕ˘ eŰ“nsĆ\V2’ZÉe+Kh6)g1C-K.k>§´ÜU“Ë⟌)Yę˛ůɡ“Ëdßtš”—lÄ´$ꉲ˜”%—Ĺ'“—>“v‰ÉźäŚ5M˛][.ŁTę2âŒiä@›Ú™˛ä2żB(l>ĂŚY,KÂ^ÜM.ËSób*Z•Rí|JŁ“ä˛ąŁÁ`\˙]pĘ߀\ý7ŇíTt`˙<<0OSőßĐ妗ŔvÁ Ŕ†ČSĚT†étş4;7Gűć/ĐĚŠóä.Œi<ŇňrAŇÔSAݎŠĘVčaŹĘTŞb×HÓżTň1ş,•˜,bůĂU“ËřŸä%[LJ]”$&•ŠRâ•ĘF)Q+ˆCšđDYRX“rÖé|–tŚB\ÜGŤĺ3™HSş\’Lžf›”ą´ě”\曔ł´=Ą=}ÜIݖ&1Ědée&&­QSr3Ľ‘Q*]™ćM"ZhߔÔ5™\f&ËQ6"X~ü¨`V„•L¤œš,Ź-˘­H#ËRŃ4­IŔkJŠŽž\fZ t&+ĄŠRck;˛<ť"ŠŽ‘őšŃ(”ĹdÁl0‘s ŮÍMwčŔţ9šß7/C“‚d3Ŕn‚a˛ü奞Ď_/ЂڧgčŔÁ}täüyňt–crՈƒB0VeXëv t4‘,ÉWY2•j5.K"Óô¨0/eÉeFáÖH.3í¤3M"Ó˛‡™0–„Ž˘‘ËČdb’×R—>䅙ś„Ö$¨5‰hM MNߢ Ă­š\Ö¤‘ĺ’¤RůĘÖg˘)]šâ6Y’’VI.‹óćĽ.˝J]”%—Q–\–§ž5󪼖—Älä¨,ÉM’ęt+šr”Z^2}†ňšhšŇŹ=l#!6ébMéʰ>.7–ĐŒí!Ű,Éenä˛lťc[đ|2LŘÓD´r"š,ĽÚФâÚd›X. š,昆Ăq}LŒęmÓlĎБƒłň7ÓďOËßĐĽ„˛ľ^‡ˆŘN ˜Ř0“Ň™™ÇŇüÜ,]wä šŞ˘§—h0^Śńˆh`}ƒTƚ,ČFNEŚIƒŠRŮhܔ&ĚË/–E×Kĺ 'JR-uiÍç’T^r3+“8)'šF.#ߔݔy‹ŐJRf’Q+ůJ“˝ˆÚ‚Y*t™I]šźÖJ#JŰĄű¨B\ŇŔ˛ľ4\u#eóšXâqBFK‰g1ÍgrYžÖ• f­śˆe&UęŠ!tą˝m{;\#wé~ĘۃRâ/N—벲›6 fŠÝ˛cŠKUş\üŁ&Î$ŮNĺCפ—ĹăŁSZ)ůZV™ŕ"jK†rüzŽĆ4 꿅ĺú•Mu‰š§ëŻ;@ł33Ôéthľż1Ř @0pI֓bĆŻ÷zStäş#őď–*÷$=ˇ@#tĆ,۔"ą0d“DžąHdŽ~ôńщ˜ĂkíőQ“¨eˆ˛ŹŹV)Č4/Q+a,ĚţQa,Ě„#]~ŽÎ—Íšö=%e ÷i%ů˛WŮŻžľÍ*wé:šůW˙&—ťbů“óˇnb˙&÷’Vns”ż&7GE4˘|˝ŤĽŽ5Ű˝r{3).ßł˘™›mYŃÖŤ}Ţ1%Ρł "f͑}&ův°ÜƂ—|ítl#›•6&›ůŮdĽ]˝$ŮUäŞe˛~™zGć§čú뎣C‡Ő3ýUŰáRí;3‰K‰d›—/˒ffć‚46Špsna@Łj@ă!Ń2ę÷tÉwJ*:‘ˇŠÄáhÄĺ+™†#'Ľ‡,˜Őżkň¸|Ž;őńŮíHÎZýwŔ1qŽ>ţůXIzY5őCęu‰öÍÍБĂéĐĄőßĘlJőËوLń °Ý@0°.Ö+Ÿń|SSÓtÝ 7PŻ~ěŸ:IçÎ.ĐŇŇ-/’q=˘ŞOß#cËz™&&D9ŕęDÓÜŞXÚł˘á`™FĂz ¤€ćüt—ćç÷ŃáCißž}ň7˛^9 ŕJÁ @‹ÍژńďN‡Ęr^ÍĘÂRżŰĽłçĎŇňň<…rĂĺQýłĽĘ›úwĘcJYĚJ~÷•#S?ZďVÖa-¸yl}ŹšĘ’Żsg,˝%ă ˘Ş>îdžĆÖKjŐÇŹóőą^v-MMői~~žöďßOűęŠßŸJŇŇËťfÖÍjňŮZ’?öz}:pđ 6űě§ é —i8Ňp<&ďX(#ň՘ ËiŚ>9žň…ˇĚCťCś>.MýľT˙lȸúxՓ+ęă•ČՏNIÓ˝őşÓ4==[Oü8E˝~ż~­ť!š ŕJÁ Ŕ .–bś^Ɍ)Š˘žŚ¨ŰíŃôxD3ÓÓtĄž–——h0XŚńhLăjLŽ%3ˇń™Éf`¸ŠËZ[O•EIe§š’Ë`ąlŠĘ˛#óŹľüĘeĎ;3f=’Yţ?Š`3mŠÓíQ5žЌgWą,/ËŔՀĄFňRá‹%2ţ‘eł‚KÄÖ˙źVjŮFž€+3Ťrąłľ^_ë9}žĺÍZl … â¸ä"ŮĽg6k<˝ţç/%—A>ě$Ěl)k‰ik kš,s ŮlC˘;Ĺe aĹWĚŹÉzR̘ŐRË.öüjŻĹV>ç‘Zvë”Â.&mF8ƒ”`+án–­Ď-Łń˜FĂu{]*ŠB_Ľ á›wđMš<+çŽŐeâ›V]VěKf݇~Š[ű\č›çšűââ"MMMQŮ)Ňs8ŔĺÁ ŔEš”dvąyÖÍ.őÚČŔŐÂĺˆe—zm#ó—B˖WUEĺúÓ?ý3zřá‡i<Óôô4˝čE/˘ˇźĺ-täşĂ¤ż‡ĎCűŘÇčţűď_cÁśő+Ď×]wŃw~çwŽ1?Ď´V?ĐĐ׿ţuúŔ>@ "‡17ÜpýŁýGŤ,ËČ{ž|ňIú“?ůzđÁĺ}ź?ĎţóčÍ?řfşĺ–› ŔĺÁ Ŕ%ٌdŚŻ1Írú1zŰŰŢ&˘ďŸJqŸůĚgčO˙ôżŃŻţÚŻĐK_úRęőz`cXÖÁVH0üúz—są €`łÇázćƒ\ŕJđŢ÷ž—~ă7~ƒ–—ä÷[nš…ž˙üçÓĄC‡äźsňäIúíßţmúâCľŢlj`\u:třźżÓéˆÜĹRŸÂÂů0g<ň}⟠Ç{Œ.V‚ó+_ů ˝ç=ďYlffFžăÔľŐŤŠ{şďžűčˇ~ëˇh8Ęs×_=}ˡ| ˝á¨Źqńýżţ忢ü>ÜȗĚŹ›ő&™1›/f.g حlUŞŮFçÖ —ž|Ç;Ţ!2Ÿg8aěGôGéŔýô裏ŇoţćoŃącÇčk_űýńýzá ^˜JYžć5Żmu,:yJD/Mťýö;b_ĎĐO‡ńź,¤éůěsŸű}ůË_–$ł/~ń‹ôĐC_¤ëŽ˙V,ç˙đéӟţ´üüƒo~3˝ŕ/qLű‡œŒĆđr–Čţöţűĺw.ůĂ?üĂôŠWźBÖ{ă7ŇŇŇ}őŤ_•}~řá‡é ~ąŢĎ›Č ĎÖ .ŠŘ0•d6*Ę\Ş4!Ęe‚íbťŽ˝žÇ6€­$Z$ňחżü• gŐżˋž…nşéFŞ*_ĎSŸŤ KŻ{ÝkĽ,ĽóN’Č>ň‘ż r×*ţ~žúú׿AôGT/Ť ěů_ţÔ锱L&ѝϻSJhöű}şîşëčšĎ}nkYźĐţôO˙T–ÁIcoüžďŁnˇ+ŻIŮÍz?FŁ1y×ļř CyˇűŰżýŰ[Űő˘˝HËBŠĚE)żYUc°~`ŕ˛Xo’Y>ż˛• eqŔnĺrMÓśśřüręä:yâTÝł"}ÝtăM4=3EƁËÔ˙ëö:t睷Óý÷˛~ÎŃ|’~äG~¸^Š[łˇź< ßýÝ߼ .Čz^őŞWы_ň"I ăe0Ď|ć­ôKo˙EIcyěč7¤ţ$OüŢ?ů“?‘R—,Ą}ď÷~/ÝrË-ôä“OĘűĂů‘¨a[žđ…‡D~c‰îŮĎ~śHfĄ¤g(Íšoß>:|řpJA{üńÇe{g;Ó`}@0pŮŹˇ ćZďSPě6+†A,°­ÔÝ-.É)fLY–4żo_:˙°€ĹÉfüČĽ3ůiŕ%ň™YyƒĘaŸůôgčţűď—ç8Ľěű˛ä1…ßűҗž”îşëŽô^–ĹXkłĆŇç>ű }ěc÷Q5vô⽀žç{ž'•Ăź,¤éňnžůfIbó1nˇ™÷çȑ#i[Ν;'€őÁ ŔŚš\ŃlňýŤů ě&śCƒX`'`éjy°LƒÁ ”›, ęt:ňšž‹´¤sj*öÁL¸dŤôË8yěýx??^Ţű’—ź„^üâ'aM—Ë?ëňUdóŽĺ2#ŇŰ;ßůN:yâ¤l×O˙ôOKňŘzúgΜIŰĆÉg*ĆĺLOOˇś—KX?Ěl›Í.śLö8śězÎéu{’,ĆpŠ—‹Ľ3™RäŻáp(’ż´˙ţÖr&Ě|đ ôˇs?F#š››Ł7žń4;;łbžýĸ|ţý˝ď}/=đŔ’ŞöŁ?úŁôœç<'Éi“űĂie\Sˇ‹ĹąŞňRš3‡Ľ:ejjJä6ë‚€-g;D3ö Ëě4*`qÂWŻ×“ŸŤĘљłgSšXÎÓOy‹_Óň’|úŇ2…˙ă?ţ#:[/‡Ÿżçž{čîťďŽ b+ű?ţ8=öŘctÇwБĂGę÷ôČ#ĐďţîďĘëˇŢz+Ý{ď˝­Ô4M(ăuqŇŮ7žń ُƒJ?ę>r9ĎŐČËh˛Á 63ŰF> Ů \Ë@*pĽážŘ¤ôdH*Ťčĉ"mątĹđóœlö•Ż<\żîEÄşăŽ;C9KZ™(ö—ů—ôˇűw"ą¸ö/ţĹżH iů|źî§Ÿ~šţĺżü—"{ą´ö˙ă¤űҗžô%‘Čx–Ç~îç~Ž%€-..Ę#?÷裏ŇOţäOŠ Će4oşé&zîsŸKŸřÄ'd=_ýęW%ĹŹÓm.upI̧žz*őEošĺ–z{`ýŕś];úĺ{ďv|>âäŻg?űŮéÜôůĎ}žŽ=uœ _đ–\Eô÷÷@ýÜÓÄ d,u˝ţőßMâ{EAËťúÜF;ť@˙ď˙ýßÓh8’ůŢúÖˇŇŃŁGW=ďńsŸüä'%˝ěÜšsôľŻ}>őŔ§DbcĄ'Ŕ¸4çńăÇéŘąci:ţ|Z&ËcüzҜźçŽťî˘˘(dY§NŚż˙űżŻˇQÖZ?zúž Ëѡç<÷945Ý%ë fŽkI7H:WÇ\ „—†Š‚čťžëťč=ďy”ľäD°w˝ë]ôOţÉ?‘d3NűßůXVżçe/{=ç9ˇ‰źĹ˙ idAôúŻ˙őżJĎ{óÍ7Ń÷˙÷SˇŰ‘yÉ4ýš–ćęĺ<‡Žżţz‘˝nźńFş­^.Ă?żöľŻ]óœúÄOĐżřE^ÍĎĎKΛož™Ś§§ĽŒç3žń zá _HŸůĚgi0Đ˙ńĄĂ‡Ëó\2óżýˇ˙&Roç3ŸůLzţóŸG63ť ;[Hüu7‹ËKţđ˙0˝ăďä0–͸L%—Édůëë_˙şĚϒ֏üȏˆP6Y“Ĺ´żř‹żev:zík_'˘X˜×svXk˝Üżăä´_üĹ_”uÜzë­tó͡Čë/~ń‹éöŰoOĽ4'y˙űßO=ôźĆëŕ2›eYJ)NžýşëŽŁ7žńő6}M¤9N0űĽ_zťl?˙ţŐŻ>"‚/˙ ßű=ôŒgܚś Ŕú€`\°TŐéúąű1Z\\¤wžó4čÁlÍÇé`˙ěŸý3zĹ+^¤ąLČbYëžű3NťéŚ›č;żó;Š×ë­Är‰‹ç}ÉK^"ďgAŒy~ţynn.˝wrź\…KaÎÎÎŚßy^~î{ż÷{E\űýß˙ýz†ôČ#ČdCmOَţ?ý3úĄúĄř€Á ¸`!ŤŞ'[úń˙qşíśŰ$!ěôéÓ4Eć:zô(˝ő­oĽťîşŤ~GAő;ZËXXX §Ÿ~Zd1ˇ¸ŒćsŸű\]CýÜęĺÎU6k ^Ćń é˝a>ţą™‡“ČîžűnŮög=ëYYҙIo- ČţŠ”ż|÷ťßMO<ń¤”Ëœšš˘ëo¸žŢřĆďĽďřŽ˙!mJ˛ŔĆXoMłÎ×Ě:ÍżëdłGŠř\11ńkóü8ŽţšŽR&/nóďůÄeKřq<ÓŇŇ"9WôŽ a5i$Nű×ń—đ@Mż›•ňů$aŠžœwňłLuß|\Ľ.?×}tYxzĂëž5-€Ý‹\IâZZZÁŒ9ěŕÁƒąü$—Ôäż×.'ß7Yf’v~ź"ľLçÍ˙×*‡Ůü}Žž26šžô>ŞDlăďʣјN?A‹‹K’Ävŕŕššę§uŽľnlţžÍ_˙ßűß˙†z˝>őű}I+ˇE!Šă˛CŚžŻśůőw&”×xR• ~÷ĎoZ›ź‘oŕęÁ žŹ˙ŚM}ÝnZţ›ÁĂüߌô߁8ĺ\ÍçÝnç•őœ‹ŐÄäăŁË&Ÿ=NN´Ćď{œüy’K^4E‚pÍŻpzX}Ávjş_OG'ćp"—Él“nŒ‹Ďˇ—çiĺEŸľ„ËľŻô~ă/žíq}íe†őłwăM7ŇZë„\‚pM˛YŮj˝7żmĹ`§°Ź3ŤÁ ŔŞ@0°*ĚŹJIŢűôł1†\yňďgů÷6€í‚ZXĎuŔâR:?€6[!‚­v?B2ŔNÁ -&).•b†A Xýž”ŻÚˆvąů ™`§€`€uqЁ Ť“‹fë‘ÂtžÉďZŤ=°Ý@0@ çœ ZTUEăńXů÷ľA0¸ŤŁBXQT–ĽLÖÚM%EC2ŔNÁ 2@៣Şr4X^ŞŸ1Äă:ŚÁƒÖb6‚~§rŽ˘Á€§|˙šžžéŒeł-ĎŻ™n°]@0ö0ŚĚđí1ţÝÔ?Ճq¤cT˙ËpĽÁŐaŕš!”Č~ř>žűƒÔľ–fćçĺÎyИ‰1 ŘRÖÄř)N'ăŠ, šŸŸĽ^ŻCŁŃ°žFTUUJ/[ŤT&Ä3ě̀k‚0 ážú-ţĆ˙I~8¤Ţžy*Ź%gźžLžě*‰ń?ÓÓÓňČ f*˜ĺrŮj˘$3ě̀=ŒăťâɐwžŞá2˙ÍwPuö uöĎSћ’yŘ/Óô˛-šđëxmŁV›Ď&¸J™”ĂT2c‘Œ%3~äyŹ]}HwR@Ř. ˜{ž0č0üŔ_ŃđÓ’ą%™ŮY˘˛¤mÇčŹâ„™ř„γ΁otňpĚ{ .—ŮëőD0ăR™Î9™Ž$̀=Œ7Nd,wö, ?|™áH~7Ó}2rűďv‹7ŮÔ"{b˝Ľ]LöŠÁöü˝¨ßďÉ#Kf,—!Ľ WfŔ^ŚŞ#ĆU_ţ*żđ z–#šé•m;™śęHŒ5[oi—& M˙{ţZTVRĚ4˝ ‚Ž4̀=Žń,˜=JîÄI˛őŔ„­Ç&lˇËŁáułs9`Ť–É4aÖÜߔĎÔ4[˙k‘`Řcđ×"ţú3Á ťfŔFĘc.-Ńřó_"c އ'‚ĚŐďîL‚Ykc|3m”ŕŕJRĚ •őw6.“ÉTUEW fŔEîrgĂl0˘ęëß “g‡őúőU˝, )eŤĘbY´™ŸœĚ*Ég+ž€˝~Uëvť"–ńw;žf€+EIؓ„ACTՃ'N§R+‹^ő¨Ĺ•œp™fźnN#­+Ť f€=ÎäÍ9üý éθ@0ö2.Ţé~~aŐómœHB[ó”Í1óŽcs&•8 Żţ˙ěÝ`eúđgfwÓ:„Ţť‚A;ÖĂS,ŘÎzzööˇžžőlg?<{Wě]DT,4QšˆôŢ;¤'[ć?ďˇűm&›m I áůÝ ŰŚí$Čě~ĎźoCăŹţĚ`ín ˜5h–*[fřýž­‹ą  mǨđ$*¤ÂœUÔ ĆňˆˆˆˆˆÂt{L"""˘Ý‰3"""""""Ş•+⍈ő‡ŸˇˇŁěÉŹ°Ý@ĚÁ˝FĽ­0”FDDDDD ţ¨Ä€ín ˜QípŒRHͨ.3ěA—<ďó2,J Ő­T]Sˇŕܲ\Ŕm.†ÇË岿հďť=0\Qí`ŔŒˆˆˆˆˆˆ¨ BUÁBW˝Çťú˝6*™Y)S…Ćt¸ĚކĎŤĚ ŤÄžźö} ř|Ŕcżě?ĘBŻ•÷OkHI•– #Ĺ Ă㹡ať‚"¸IűGTH‹ąňĐ<Î#ĂşhDDDDDDDDDD ˜5xÁ€YdËJÔU}LEˇ0ýöś‹Šá-)„áł`ěÉŢ/K2ŃČIłŇR˜ee˜&– 3+CU5 †ĚŹň™ÜSUÔä9#rADDDDDő›ób™Ú¸pfwkˆď‰ˆˆˆę̈ˆˆˆˆˆˆ¨ĆéX8\f`—Áť3Oľ˝t…^7%$Ś[g¨rňͰ×%˙ö6üE%đ—”Á•™ؓeşÔú ]ÎL2fĐ L‚q™ę ۔––Ş÷šš|?öý-[ś`ăƍČÉÉAťví`JŽSM~aáÂEXż~= :-[śQM˛šĺü;2|%ĎËĹ6rž.“×ëU“<'äÜ\ŸżË”’’˘Śhë""""ÚŰ1`FDDDDDDD5Nʤ6™éó#_q L+XMMBa–—É2(TŞjŚŹ@Ś–ˇˇgůó a—ÂČÎŇRBm3ƒ6Ă śĐ ÷ЌÜoT RÝsĎ=*PőĐCĄyóćę|ýő×xć™g0bÄüë_˙BCçóůđńGŸŕ™˙ţמďEvv6š4iŒ-ZpŽˆˆˆˆj”>żtžgĘg$“‹JJJ˛Húůââb5ɲ.—K…ÍŇŇŇÔävťĂŸm"ˇKDDD´7aŔŒˆˆˆˆˆˆˆj…*HVZ_^!ŒRŻýŘ ćşTżNŠäŞ8€ęť`×Ѓ ÂÁ2]uLnĽíĽT#óx<ęž‹Éë2YY™jĄ)ˇ0ÓçŻXËËËSłF!33DDDD{+̈ˆh%-uňvîTӆőë0gćĚđkťvÁq'ŸŒ˙2é """˘Ý+2 ćˇhPTS‚fŚ—?4Č]q Á–˜Şš™Qý*f*\ŚîŔoŻKŐ)“'*ÍŚŞ–ů ƒĄłŹL{_äi3ź=çŔÓŽ nĎy(L ÓٓsK**Č`• peD9—•š×볗3Ô<‘|>żř’1ˇŰUžL™.ˇ[='Ű‘Ş eösŇÖ'##˝Ň{ dĐŹLíł'ĹcŻ3`žŞý•Á3çüĽĽ2čV˘Ţ›´ JMMŠ´>”+˛ß›ě[łfMáľ÷SŚŕźßCQQąÚśź‡ôôô¨!ĘěmĘĄ”c Ǣ¤¸Ľez™4V‘ """ÚK9Ďá% śÓţţXB`r*ç˛ňźœCĘyŚLrţ‹Ě/á3!çÔrN+çŃúœ]ČíśmŰÔmVV–:ż&"""ÚŰ𠈈ˆęĽĺK—aĚăOŕő_ÂY瞋3Î9×LăŃna9*vIŤ´ f^=l)ŐĘtˆL3UťJ+ŘŇĄp™ F!łXń/3źVxgĄô˜jÉiX0-ű^Aq°ŇYVşz-ÔŹ3¸m+r#ănI‡Ď,—sÂ ˝š°uëVüüó$̛7OUB*űîť/† fßĎ ogٲřâóŻĐŁg7üˆŠ›°wmęÔ_đŰŻ3qĐA0dč`ŢZž|%>ůř3ěż˙ţöÔS§MŜ9żcǎ*,ÖŻ_?rČ4oŢ<źž-[śâý÷?@Zj:?âP{˝Ó0wî\´mŰçŸrr˛íÁľ2LŸ>łfÍR-@eĐ­e˖čÓ§;ěPÓ‡çšç^°÷c…Œ“÷úě˜˙Ѓ;zôh´jŐRmsӌ͘6mŠ} ćŤ}“ÁźN:aȐƒŃ­[w¸\fh˙,źóÎ{ČĎ/Ŕ1ǃ͛7aňä)ö>oQƒ„;ľÇ‘GŽ;€ˆˆˆˆö:X&“„Á$\&0M_Ä!“ÜOTMWfÎű:”&çĐZ“IBlr,UŇ$dÖ¸qăpȌUz‰ˆˆhoÁ€Őkö‡úÌÁ÷&ŕśťďA—n]ADDDDuË ˛,šźžy°ü><2ŹX˨cP,+´+fž Uo iŠö™°Áşb† _Q1<.FF:*”ÔŠŞÉA"Kޟ;ňńҋŻŕŤq_!;;[ rIküřođŰŻłpŐŐ˙@ÓŚMÔ ÖÚľkńţűďăČ#ÇqǍ¨´Ťs˙ďžűŽŞâ%3ě’đ×;ÂÂBüđĂ÷˜2uŠŞÔ ^6lŔˇß~‹YłfâꍯVŐĹäřěŘą}ř1ŇŇRązÍJ|˙ý÷jŔLBo2XdaŒ}Ž=~üx5pעE U5lҤI7n~ţůgÜpĂőhŢź™ÚˇožůĆŢ~°ŇƒĚ/ËÉőÄODnnKŹ\š Ď<ó_L›6MÍ/ë“ůd9ŮśěŰŔÔkRMmܸŻŐžKí—_~Q땁ÂM›6ك|eöűüwÝu'şví""""Ú;č@—œŻJU1ik)ä<:''GU“6˜Îů#Ť-'CÖĄĂj,“I*¤IŕLÎż›5kĆJfDDD´W1ADDÔ,]źW]|~ VQÝąBUČ,{ ĹĘ/‚Uę…ᡀ9f źľŚT3ó›5|őż˝:iŰԆ`úüäe>ŤŇźUvJ~GŚO˙SísŐGyŸ}ö)>ýô<öŘcp™°’0• T)şÂ‚#ëf?)ƒ[ÁJ ÁA3Ý h„ řyŇ$ÜqÇířňËĎńĹŸáíˇßF“&M0îŤńöôuhĺUÚ¤ŞŘœ9sp뭷⧟~ÂsĎýOU:űđÏԲReěŃGľ÷ůS|üń‡xţůçŐŕÝĉńĆoŞ–Bśuç˙TŻuîÜ _ý• ˘őčŃMU•ji˛ţž={ŞÝG}€ńăżĆ%—\‚ĽK—â駟V­Ad O‚j§Ÿ~:žüę3|ôń{xíőWĐľ[7,\¸ď˝÷ž ŁUgАˆˆˆˆę'Š(&HČLW3“‹8äœ×.ńŞ—%"ËÉúd˝rŽë ˇÉöőůťŽ’FDDDԐ1`FDD †\=vëő×aÚ¤É """˘şc¨f”ĹĽ—Ŕ4C­'g Ç€ „^śěůĽeŚ+ --á) b:üUĽqĄ`Ő2Ó0Ca- .YO™Vq™=*ĺVLŤŁ i]~ů媅ĽěŽŁAƒáŢ{ďUű÷Ăİyóćŕž‡Éb „É@–ĘĚP OWeĐA3Šę5|řaáůťwďžM›6Ĺع` ęeffăüóĎDZǏǥžßşuŢ|óMŐH`C‡ é$ŰŘgŸ>¸ďžűÔ`ŰÔŠSądɒčoZ˝ĎŕÝ5kÖŞ ]ˇnÝ0fĚUE3ávť0zôY9r$,X *™ßvđç"űyÔŃGáÔÓţnŸŮĽKg\đˇóUČnŐŞUŞÂ™Z‚ƒzDDDD Nä9ž„ËśoߎÎ…œ/ĘyŽ´­Œ\nWÂeN˛ Yż´¸×ëÓű!çćl“IDDD{̈ˆ¨AńŰ…÷Ţq;–-Y """"Şj8EރU)&-,-UúĚRý2eč(PR†˛9óQň١(~ů]=űŠŸĹď}ŇŸ§Ăˇa#>ŻZNć)˛* †Ž‚Űłd;Ľ^d řÕÂÂËD[O —:tlPĄ0˝>ð0dČ ôîÝK…´¤ĹO˘mY1Ţ´™őéÓűîÓˇÂüň;uę€~ýűcƒ}üć͛_Ą‚YvvúöíSa`lŢźy(((P­† ŚćuîZŸ>˝qĐAa͚5X˝zu˘buřóĎů*6bÄŐjČ ¸“IZ}pŔţ*ĚŚÚj†ßT›Ď}úöU­‰Gűöë§îIKPŮOę5|ć’sżââbuţ'íŰ%ô%m1…>'ÔÁ˛ęśÇŒF>SH•4Šd&÷e˝rÁłěOMوˆˆˆödlNDD{„6íÚU,_nî—/ ňňv˘Řţ ^ňÁţîŰnĹKożˇŰ""""Ş]ŇĆ,(AŔçƒ=ÔSZ8Ę KœedFÚbşěš$ř%UŊżžŇĎ>°ď—%e°Ęź2Ф’FŚ=x„ĚŹ ¸ÜiçžłiSU…,+TQ `ŰIŞ ^?öşÍTűkY/˘dśBůŤšj›‹&M;žŹ`řËş÷č†ßçÎÁΝ;“X“ľ’›ŽœĐž}{¤WceffĄuë6ęŹXą°_°ˇŠýó¸SBŐ‚‡[ňx[ˇnQUÚ´icż–Şé[™öÝw_ŐňRޝ…Ű{Ć Ű”cůŃGaňäIߑ˝NŠţ ç˙+V,…Ő‚ƒnˇšš­œďTUĆËĘĘ żďňvĄÔ#"""jHôš¸>×+++S-Ôőc –eDœűFžż×ä9˘Ú$`&çÉrĄƒœ‹ćĺĺŠjĹrĎG‰ˆˆ¨!cŔŒˆˆö݌[1`ć°eÓ&̙5 ż™€Šö`T˘Á+ąĘŔzó•WńˇK.Ő =^ă;1|%đ°ŕ7ż}žć ]ŐppYF¸E„ĘTEą€ŠÁgy᝻ůźßÂeř‚UĹLĂŹ8 BM~Ř˙‡U䃿¸Ľ_˙ˆâ‰S‘vÖÉH?ţH¸ł3Jƒ•ď“ú#XMWëRá(u[ ł¨ fŠöHššŇPP艚$’J\ąÖ•‘ Ké +BóŃĂm*ˇĎÔŐäœÚeV.X/ƒaŠĄómОąBýG¸ĽeII‰8“ębŃ2vňœTp .ťP~AAĄ˝ E…ĽXżn“cŰĄ ý;“››k§4ýöĂŰ­´^˝ż–œŔ<"""˘†ĘyŢ+a.}qœ÷JÜhUËj“œ›JČLŸ/ËyŹ„Ţ¤Mg$^ADDD fDD´Çk޲%Ž<öX5Iëˇď˝ ç/H¸ÜŘ×_Ç)ŁFĄQăĆ """˘Z"Áą/Œ€Už=s ˘˜ţPĹ­PE3W¨ĹŁeÚóŁtâTżó[śŠ`‘Ëĺ†Ů´1\íŰMrŕĘČ@ Ź ((F`ÝFřěÉ(ľŰϕźýŹĺkqÖÉpui ľ‰évœĽ0łÓĂUšj“´żôůüpť]žř­ę˝›h:o ‡ńäŲŻRš!ÖERÍëő"5-U=ÖďŤÔ>fyůyę~ÓŚMŹ„VŢo3ňýË ™TaŘśmť˝Í€Ú?'™íÚľj?%h&­?ăCŮŚź~ŐUWâđĂƒsuĺí:­PPDDDDD>WH KˇĆ”W“&MÔůj´yk›„ŰäÜ]ˇ¸—jfRI-==˝Ňź ™QCÁ€Ő+]şuĹĎ=;nź3ŚO;oii)>űčCœ{áE¨ŞüźČqXźpĄ˝/+Q_ q%¨(_\ľnŰÂAŒÜÖm@DD´7Są _(*…i…˘Já<™…@(TŚ* @ň_ü"’ööyUńÇăQúŢW°źŢ`ŤĘŒt¤Ď ýaśjłQV°Â˜ĎŻÂ`ֆ-đ-_‰Ň/ž‡é*{9ź“~CQ^>2oťÂž?G탙0dʌfŘەm˛ qŞ%7mRŹŽ;TŘŮՙ3g˘yóćŞMĽpŰÇBZCnٲĽŇzdPMdEłhŃ"äŰçuYŮYž—Öó˖-SĂú÷ßÁ7ʧ@8°ŚWŰĄCŐęG΃׎]‡vöš•“ßŔÔŠSŐ>ˇn›pĐŹOďŢęvńâĹ8ń¤ĄgËËáIް°H fd¤ƒˆˆˆˆČiǎᰖ|o(aŽÝܒ@™œ›Ë$UŐäűLŠZl†*9GVV#"""Şď0#"˘zGşîzŕ\töhl޸)~řΚŕ¤?ÄŻ^šo˝ú*ž?~Ÿ/ę<yyj’đפŸ~Â+Ď=Î]ť`ôůĂǡ5P,2@7îłOńŢŰoŤ}ˆĽÄţÂBŚM›6â9żŰďďC{đу#Ž=ç^pÚu耪Zťz5Ţ|ĺ|űőx ‹Fž ‘IśťŕĎ?ńůÇöđCâ Áăo_‚}zŁ:dŰcžxS~ţšŇky;wŞIÂgŒ}‡qn¸őVä„^k’źď/>ůďźúšzŃlłxeZjŠNúáőÜŔÁƒqáe—Ą—#üFDD´WЧVRiËëSS0H@ éŮtĐLć— š´É”ĘeĽƒ@Q `pwn‡Ź;Ž€ťun,¨B—Öěód˔WˇŽH=t0 Ÿy eßM†UZ†˛Ŕú÷łČţ×50ísĹP_ĚÄo!ŕWŰw5ň ś­Xą'~sÎ9G…ÇôŃyáůTˆëĐCQ!3‘••Ľ*ˆÍ™3íóÝV­Z†×łlŮr̚5;ćv$DöŮgŸăďŻŘ*~úô_1gölôęŐíŰË9ŁŁšj%dV8d}űöU-+çϟO?ý —]vŠÚo}ZýŮgŸŠ0ŰţűďN:–/ΌU<ţ]ťuľˇŰü1Î<ët´nÝ*t đzýxó͡đňË/ăűœöâ‹/tʈˆˆˆˆövrń§\L,ßńJëwŠ ťť\:č&3ů>X*ŹIĐĚůݰncODDDÔ0`FDDőRś=ŕvŃe—ăÁťďŽ;ßÖ͛ąxţ‚„(żĎÔzĺeźńĘ+1ƒeń,_ş ÷ßy'>ýđÜüĎ;ŤôZłjîží6,ąčŞCÂQß|ů%ž˙ .¸ôœuţůIŠňÎ믍€œ×[†Ş’c&•ž~™2'üe$Žşńzx<)I/˙óĉęçWTT”Ôü?}˙˝Ş*öř˙žUUÜjŠĆîżëN,_˛Uőë´ij:úřăUřMŽR$""Ú+•…JěsREŔ=j2ƒm+Ľz™!łT+ץôó Âp™p÷íŽĚŤÎ‡ťC;Hią`ËƊç3fx\Ɛ+uý%(nÖşM€e6ůćĚGÉgß!}ä10Lâő˝T=jR Vvş˝wm0CnŤVřęŤqŞ*ٰa‡Áçőbňäiř裏ТE œx≪ZŞłöÚŁwďŢظi=n¸áFœu֙hÖŹšŞ€öÉǟ¨ŤXç{;wĆG~‚Í›śŞV”ŇrTÂeď˝÷5j‚K/˝´ňBŞg  >%c×_nżýź˙ţűČĎĎÇpUAÖŒ3ńá‡ÚűÔ #GŽDŰśm˝}’5ę4<÷ü˙pöŮgăÜsĎCŻ^=Ő@œTB7nœŞšvꊧ†öÁ¨ŐŠrDDDDTčďĺ\YÚbJČL?Öˇu2Óۓ}‘Ipňœ„ŕäąsX˝Œˆˆˆ ̈ˆ¨Ţ:ęŘcUő+ŠrĎÔ)“ă̤Ýâ]ˇÜ˘‚BťJŞŠ]~Á¸ď‘GĐ˙€ÎżlÉR\sŮßUE´]%AłÌÁş5kqĂíˇĹýňBžäxřŢ{ńő_`WÉ`äç¤*şÝ÷č#ČČČL¸Ěß}‡{ď¸]UnŤŠőö ę­×^‹˙Řďł&L›4wßvŤŘÜžú Ť–/Ă˝?‚­Zˆˆ¨ĄR%ŠUiĚ4‚UĘÁPW0d¨V˜Áůƒ}3 { Č_R†˛IŔˇte05–•…Œ‹FÁÝŠ˝ýĐTŐÍb1ĘwDݤžr,üŰśŁäťÉjŢIż"eđţ0Űä"QĎË`í,{˙$ 'm>“ĎÉW‹Ć=ěźţúëx˙˝U¸MކuďާŸ1 žˇiÓ&8űěŃČ/؉3fŕ_˙ú—zËҎňôÓOǖÍ[ńŮgŃĎă €=z¨Ja_~ůĽ ŁÉĎ­k׎8óŹ3íףŸŁ–€•góúőۡŰç•cÇž‹ŻżţZ­S֕’’˘ś1jÔ(yäH,ˇŰÄń'k˙žřń٧_ŕŮ1˙ żššćÁĐĄC1zôh4iŇHm_ ˛ŘŃ^OÎg%Ŕ%ä"݆R8ż˙Ôałşté™Tř•scŻ×ŤžÓA3'̈ˆˆ¨Ą`ŔŒˆˆę-—ý~Ȱa CR ţœó5ŠVvŰő×cö̙¨)ůůřżŤŻĆ“Ď?ˇu˘´şźý†j$\ćôĺgŸ˘]Ç8óÜscÎóŞ˝o5.sšőŰoxüÁ‡pű=÷ĝoĹňeŞrYUĂešT‹{ëĺWąŤdďřżU%śš°pţÜ|í5óň+HKOQƒ¤ŇGĄťŃňŰ)e%’8FšŐËô\:­ Ÿŕ/*DÁ'ŸŞP—iżžuÚ HéŮCŻ18_ VÄž¸r˛‘věĄđýžţ[ŕ]ľŢ‹ájŐŚ+öW{CŚÚ˘Š*ŤšJ}@ŠťR2Ë4]¸çŢťTeŘ-š‡Ÿ?áÄă1řŕAČÎÎRżöŰŻ?VŮűš}űvUąLŞvÉüş ƒ€Úˇ_ÜsĎż°iÓ&Ź\š ™™h׎=rs[Ą¨¨§Ÿqš†*žŠcg#s.ˇcŽ=ŇŢć@{;ŤěílCNN#thß-[ľTB{loť=ža \öž7kÖÄyhĂ€žöĎg͚5Ş‚šČÍmÖ­sUĺľČś?€çž˙Ż=Ř&ďÇ*ŻFf“śŸŁFŠĂŽÖˇuËVdd¤Ł]űvŞB[ŽýóÔŰ÷x\xä‘ĂkŸŻËśGZý™žžŠwĆžŠĺ˜pŕŽˆˆˆ¨a’€™/ÔqBΙĺü/Úš_]ž:ˇ%űSXX¨Î‰e?ƒ•ynJDDD fDDTŻícĐ% J­\ž"ćkĎ<ţx†Ë4šZíśnŔ+FGçݡކőëP^yî9yĚ1QŤi-[˛ožň já_ŁGŒŔAC†D}]žhyđî{všb؇ďŽĹŽŘ´qŁŞZWSá2MÂoÝw/îş˙5d*‰YI–™’A–€=č2wŹ;Tu3w‹ćH=í8)‚QjUR5 wwxşw†ýfXEĹđýšCÁtĹ^,TŰ |Or ž%ł+hßž]Ľç›4iŹ&-77WM2P&•"Zĺë3Đźys5őęŐK=ÖUhÖŹ)*żŻŕz\.S…ޤ-Ľ péđšÜ—I“°Y§NϝŻi˛ŹáŰç´}úôQű űmĹřšgeeÚSgÄ"Udß$4Śßb včťíźěC÷îÝ@DDDD ›óVÎőšížBÎo5 ˜Éy~ůEDDDD fDDTŻučĐ)á<ׯWí#ÝîŠěç͝‹O?řľeűÖ­xöÉ'qË]wE}}ܧŸ%\Gş=xxě '`ż@c{`oëÖ-ř}ć,ŒűüópiřhäľO?ü˙ăňJŻ˝ţҋQ#őŰ?ôݡż$Üą}‡j!*ŐÇůÄ>Śąf?|÷-ţů'vˇ§yůITŽkŇŹzŰŠMš4ĹÖm[0˙yŘšcGÜe~˜đ-Ž9îx|Č! ""jЌ`x\Z=&Ë2Mř~űđŰCşě ĂmÂňŰë1ęĺťě&÷ЁIżĘŕ_ź(-RRâízĹýR­?ë–në#U8ĐóęV<ÎŰh‚?ŤĘۉEoĎ9˜WÝu9—sîQ4şĺťóÇ=!`VŢ^>Ř&SŸ›ËwŽ–U+gˆˆˆˆö| ˜Q˝Ö˛uŤ„óČű‚‚4nܤÂóĎ?óLRř;vęŒó/˝űěŰYŮŮXľr>y˙=|óŐW ƒZ2ϙ睋NťTx^*hmܸ!î˛iiiřßŤŻ˘C§Nž?âčcpę™gâÚż˙Űśm‹šü”ŸŹ0+´ĂäF<ŚşçᇱO˙~ž—cőň˙žĂ›ŻźwůéÓŚ˘¨¨™•^űŕíw i1yڙgááĂŃĘţoŮ´Ó§NÁŘ7ŢL* 'ýôSÜy<ž\yĂu8á俨Vʚ÷>;/Ž÷g˙ĆK/1`FDD ’úCŸCYRM ÎJ*n$mc$|ąŕęŢI…Îŕ߅A+¸uWşvnܨ*ĽŽ e‘ď#T­LćW÷UűNÔ9ÜŇ÷cq`9—‰ňŇŤŠ ĄŐD(lWéýaŰ """"J†n ]MwO"7ç9˝ó|ˆˆˆ¨!ἢDDTŻe¤§'5_qaQ…ÇK-Âďłf%\nßýúăš7^ÇáG­ÚMJEąž˝{áć;ďÄőˇÝšpyůBáƒw*ˇs”€Y"˝űö­.ÓÚwěˆ+oźĄÂs„jٲú쳆~88¨ŇrëÖŽC§.Ń´ys{ţčWűÉ{‹ — ůb䂿_ŠV­r´Ü´Ąňű[˝j%ţüă$’™•…§_x]~™:Ö ěÖŁFŸ˙7<˙ć ˇŸČ=pžťz'˙őÔ á2‘’’‚łÎ;×üßMq—Ÿ?oćÔBëU""˘=E…á’ŞV˙**†Ô*sťüđC\pÁHKK­ąA­Čŕ[MTdpVx """"Š'ň‚‰=-źĺÜ'瞲’54Ź`FDDőš'%5ŠůJJJ+<ţáŰď.#ÄţőŕƒHMž Šn5gĆLL7.îz~úţ{\wó-pššî$ž_Xşd ňóv";§QÔׇ Ž?ö8šľhć-›Ť V˘/Xş÷ěŢ|3¸ ö—y;wbűömŘžmť=mEގ8hČÁ1——+ŰvhŸ°úږÍ[ĐŠKĹŞmżMűɸúĆU ,šÜÜÖř×Câňżý ŐQRR‚)?ĹŻŕ&UÓU;锿⋏?Ć⅋bÎóáߢż=ĐKDDÔ0Ád–Ąk—Umđ$X4ĚËď‡áŔ2Ěꏌ|}rKqĂ řTE´dÂeVh2í÷¨ĂJą*%Ş`Ů3Rjj :ŘçiÁuV9KV˛ˇęŹ7Ţű!""""ÎóĆ=ŠBXäů9Ďi‰ˆˆ¨Ąc3""Ş×źeĽIÍ'Uœ~6%á2'Ž<M›6‹;Ďš^ˆD¤ĽăüˆĘ]M›5M¸œ„żŽžäďřyâD”WzÝíö`đ!CUhLÚZVőK ™żQăĆŞ}çţ¨ZoŽ5*îzślڄE &\ˇ×[Véš?ćüžpš6íÚáČcGĝ§WŸ>:ěPTÇěßf¨6—ńuěąHDŽŃ𣎊;ĎěŹ`FDD ĽţWž3ěŻŒŞTł4s˛Ő2’§ňo݁€?¸FŁşá2{ňoŰKw ëĎR{fĹŤŽe”ďuy­šŠ‹Ő3QłČv—•×[q]{jĹ„Ú ŹQĂľťÎmu -™ů„3Çó\"""jhXÁŒˆˆęľ˘(ÁŤhŇ33Â÷Ľ…ă˛%Ë.sđ°CÎ#­*Űľď€5ŤWŝoɢ…ÚNJJ*mÝź9îr+–/Ý7ߏÂd]şuA×î=ěŠ;şö°oťuYÝŹŚHČmýşőöű[‰?fĎÁ„ŻżFaAŞC֑Ƞ!C*Vz‹áĐ#ÇäŸBU-Z8?áwŇkˇěs€Ŕ†Í(zö-řfĚU1ܤuR*‰1$*„&á4#´w’C-´ą‘śě›6mR-|:uę¤ĹäĹ ÝË Ů˛eËÔÔÂ>?Ô­€dţ&Mš¨)===<żŹ{ž}ţŘŻ_?4mÚTÍ÷ÝwߊůöŮguî%Utg͚Ľ.ž8üđĂJ#"""˘z)---ü™CÎm%ŘĽŤšŐ4çůzäůłŢ=T/“}‘çd䜭뉈ˆ¨ĄbŔŒˆˆęĽÂ‚ź4ćلó5oŮ=zőŹđ\nëV —“đŇęU+ŃžCDŽó._˛4á<š­['œ§wßžjşţś[ąÂXœ7÷w,Z°‹.Ŕ {eUŹŘUXX¨Zež>úěđsźýňv&ÄIeľĂŽ8={÷A§n]›[ž˙˗&~żŃ4mÖë×­;ϲ%‹qđ!‡ ‘Ĺ ˘:ZśJüłűůghŐ*DDDTYx°Äp„ÇěÁ¸ aŠsKuË4öů”ŒpEFˇLyÖ~=uŔ>0Î<…/˝‡@i)źk×aÇ}O!sČxôƒŤKÍĂHI•‘ ňá_łŢůöyяżŔżz=,{C.Í´Ą‘ń÷sě5—‡ËâEІ=dö­ ONvhޘ‘¸*‘ŚUŤVać̙Xťv­şĐ {÷î¨pü˘íS €ß~ű 6l@ăƍĂfRĄAŽÚˇoÁƒŤđ™XjŸ“-^źmÚ´AłfÍÔs˛=gË š•őŘçÎDDDDDő•\Ź![ČrŢźÓţ~łĽý˝ŻˆwÇŽĐŐʢ­[ŸoËyśžOÎű%`Ś1hFDDD fDDTďHő­{î¸7nH8ď_NýkĽóŮ9T•‡mŰśĹ]vΌ™ f˛/Ν‹D:vî‚dIĽŠ.ÝşŠIóűüXšbĚűżý2?˙đƒ=xéM¸.y΀Ů÷ßLˆ;żËeâú[nĹńů jZ›vmĚfL˙g˙í$2}ęTTGÇΝÎłÁÜfŔŒˆˆ¨ŠŇS`”yĂç]~#lçŤb–Ě–’Дهš-Qôß×ŕ_ż–˝Ž’‰SQúë˜MŮëMƒaşÔüi…łeŹü"Ic+ĄŮMŠ#†#}ԉ03Óaů’kOmZĄęeŠ)Ş=f0 ˇëŐ˝$ŕ?cĆ ,\¸™™™*üľ#‰Šťj_BŐ¤­Îˆ#Ôŕ”<–ŔŘʕ+1{ölŒ?ŁFRŻőďߝís9Ż%""""jčrrrTŔLH— weeeŠóh ™ŐŹJ-DŚdÎuFV3“íËĹ B.‘}!"""jČjžQ-’Şb×]v9ŚO™’p^š˛í俞őľ}÷ß/ŃâřôĂśúú‹/ś}”/(ú'؞Ő$|5wöLüv~öK…×]nşt몂_w>p?Ţřč´K˘şÚ–­[Â÷óóvbă†őqç?É>^‰ÂeŰślAutďŮ3á<łíŮĹ ŝGŢÇŸ|‚ęčŰŻÂy&˙řˆˆˆ¨ǰtX—dž‚çOF(°ëTJfń[ŞúYĘ ýuç5đôí3`!ŕ÷á3ŢŐëŕ]źĽ ŁěĎEđ-^‰Ŕö|Xţ€Zż™‘†ŒżŸmOŁaśh Ë[…öŮöv¤5Ś+3Mzd"˜xŰő ›3gzőę…SO=UUUHśrs`K*’IpLnsss1hĐ téŇ[ˇnĹňĺËŐ|RÁĄUŤVŞ$5DrŽ,ßőĘEBeҒ^.Ćć.śźöpäyźş€&4IŐbç…$.“ Eˆˆˆˆ2V0#"˘=ŢöíŰ0wÖlLüî[üřęK¸ÜŃ˙Š––•gžs6}ŕÄăq•//’‰ěÓż_Ü׋‹Š0˙Ď?Qűx ĆžńFÜyä˜˙üű<6ćżČČČŹôşßPţĎż˙‚ü|TGˇÝŃŹE lľy,ăžř§Ÿ=ZľWçťńăńĚC‹V-Тe+Ő~ł…˝Œ,×Ň–ßÖmۂˆˆhŻŕrÁČʀľ=i“)Í*tœT‘.É ,¸ťt@ν×Ă;y&Чţ ˙şÍöşvÂ*-…)Á10JK…Ů(K…ÉRúőBĘą‡Šű†aŞŔŞŇ‚FŞ…Ľx`؃@V(W-l¤ľĺńǏN:%źP!(‹Ľ­}^ń§}ڞ¤=Ś<8p zˆˆˆˆ¨Ą“*feee*ŕ%á˛|ű;ÂFö÷żş˝|uDűﳁ—éó} žÉ~5t ˜Ńá‚3ĎŹT}A*ƒĺçĺU+LÔžcGŒ>˙ü˜ŻvÄxćńÇQ`Ż?žÇzŇAéř“NŽđĹšUŤp÷mˇaóĆMHääżţľŇsK/ÂŹ3b.łcÇvźôżçpé•WĜGn‰äśnžď-K\ŐcăşřÎ^yţ…j‡ťö8@ţ"Ăt‘ÚĽ×ýă¸ňÚëąď~ĺǖڃ¨Ď=ý4~6 Ő%?ĂăN< ož;(ďďŽ[nÁ}˙yMšDo9ľlÉR<őčŁę˝ČĎ*ZŐľ~űď‡'Ÿ{DDD{ű„ÉLOƒU\fŸÄ•¨ŕBšĹŹŒP¸ËĘĚBʑCŕ>tüë7ÁÚ´ ÖöÁđ˜Ë2Ňa6o 3ˇ%\9ŮŞ™z U —!ŘŠÁŕZ j:÷ŇU jŠ ^ůýţpĹ!ƒi6lHXM—ˆˆˆˆ¨ĄpťÝŞZŘÎĐ÷‹Ň2S?gšľÓ´ÉYiX‡ÚŠ‹‹ŐcÝłśśMDDD´'aŔŒˆˆöëÖŹAMIĎČŔżţýoű˅ŘeÉÓŇÓń×QŁđúK/Ĺ]—TK{ôžűńţ›ocŸ~ý™…U+W¨S2•ÔZśl…ŁQéůC7`&Ţyý5ěŘžMĺÚuč~ž°°ă?˙oꔏzÚţ ßĎiœřJş÷ß~ƒŚÚq:•Ř_šźđě|4ö]T—Ç“‚ăO>9a3ąčĎů¸úŇK“Ł*ƒmÝźEšjÂ)ŁNĂ-’’’˜óüůǸřěsÔźRíŽeŤ–Şĺת•+ńÓ÷ńه$Ě=ć„@DD´ˇP]1M™Ăţ7Ҳ0Ťú’ĺĽň™˝#=ŽŽívm‚9îň*c*HŚ+ƒéÇŐ`H•×´TXŚ#PýőD]ˇ„ĺŞQ˝,9ďXştŠŞp&-3ő ˛ˆˆˆˆho ^rţ+.9?–—œKŘLnĽšpMpʜۖmČ÷˛˛]™GöEZv궝DDDD fDDÔ ¸Ü.üóžűĐĽ[ˇ„óžuţů˜0îkŹ_ˇ6áź+W,WSU]uӍ*XéŘOŔŤ/ž *´Ĺ3îóĎՔ•ć-Z ¸¨[śl†?‰ŠY998ňčc%ě&ĎĹŤÚ&!ŽKĎ;ގa `aíęŐřeĘduEŕŽ}ţyřâÓOVŽÓäřä'9o˛¤]éy]„ç˙ű߸óm۲/=ű?5UU›vípěńǃˆˆ¨ĄŇń)=ěb™– ™)nUĚ(*E°ˆY&‚ƒ/’ă˛B #m*ŹWľť4ío,ĚŕcgXŤŞÁ­P›Nv UBSkhŐŹ|˙÷°Œ–ŠL&­vd+Ď>š7oÖŽ]‹.]ş }űöŽJf˛óĘŚă9""""˘†G>[4iŇDU –v™rţ,-+ĺÜyWŰe:/џYäVÖ˝}űvőý¨žĐCÎ×%ěŚç‰ö'Öç"""˘úˆ—şQƒ!•ËřĎc8řC’š?-- wÜwoĽÖœ5ĺ¤SţŠC;,ęk™ö——_s ’%mW,[†Ö'.W\{­ŞÔŚÉ—C‡ K¸œŹҏ?ŞęnŇJrâˇj$\&˛sáŞëŻÇŽ:ĺŒ3°+N?űěŕ¨ rüż;îˆ[Aˆˆ¨Ţł‚2̈́Ąţg&\é°R=H°L‚bpÁoöPˇ,•ˇ2ěíÚ˙“Œ™´Őlœ=™´ÝůüóĎńá‡âă?Ć÷߯*%ôë×G}4Ť–Ń^OÚb6kÖ éöwŸ:đUPP€­[ˇ†+Œ üJvrś¤×Á1ů^tóćÍęVŻWś+a6Ů=o´ ĂeDDDԐđ[I""j:w늧_x|p•–ëłĎ>¸ýž{j< 4tŘĄ¸ćŚ›âÎsÜI'áŻgîZP*YďˆOŹôü™ç —ťúL]ö ěĹ˙¸ťâ˜ăÇŠgœ‰ęęÔĽ .š|×öAB`w?ô`R•Ţoťý8DDD ™ĉ¨’eXö Ši¤xŕĘJ‡+5ŞńĽşâߌ1Păí#ăî§ęŹśŔ´ŹĚ ŽţžHŠFŒ“ěsE™N´Ďéäń!CÔ@ŃŢN>Sx<ŐS."ÖĎI¸LBfŰśmSŐ͒ xE ˆ•””¨uIĺ2iÉŠ?Çddd ''GU0Ó!´hűGDDDÔĐ0`FDDőšTťčňËđÂëo k÷C8?ő$Ů_HԄ‘ŁFáî‡VaŁDŽşţüíŇKkŹ…ŹGÖ'덦Sç.ŞşVu]xŮečŢłvՕ7\ŃçŸ_ĺŤř7n‚űyd—BršTS{ŞĄÄX¤ýčĂO>5ŘGDDÔ`XŽÁš XŰČČd˙ón؃5?ŰkQC#çžMš4QĹňóóUľ19÷•IZÍË$0ŠxŚ''9–óe ˘ÉwŽú|ZΝuMޤIˆMWKÓçâŃÎӉˆˆˆ*̈ˆh%UŞŇ32™ž–­[ĄSçŽčŇ˝<mÚľCM“ęXˇýë_8˙˘‹đé‡aҏ?`ýÚľq—‘/.4G†~xľí$6ć•WđűŹŮřćË/1uŇĎŞ”{"M›7ÇŕĄCqěńÇŁßţű#Y'Œ‰AC†ŕľ—^¤‰?`ǎíQç“/E ‚ó/ž$ap­:<č źřÖ[˜=c~üî;̟÷Ö­[â˘B¤Ű?÷ŚÍšaß~ýqŘQGU9¸—–ž–ôźÇ˙ĺ/8ę¸ăÔą˙~Âü>{ü>ÜeZĺśĆĄöĎ|ä¨Ójĺ÷‘ˆˆhdDŢ>Ą*—ă[Ąg X2¸’–ÓeĘä›””ŔeIÜP!łş{1¤˘WV&̌tčd™ĎŢOO-E̤…ÎęŐŤŐ} Zˇnş={vx°ŠWŻ^ťÜę2V˝-Z`͚5ř㏹čÖ­›“@˝<7kÖ,tęÔIUC#""""ŞĎt˜KŸË­´Ž”đ˜T “‹j%,Ś_—űą.X<ˇvV6“ď~ĺ|ZÎ߼Z°žßůp´Jf ›QCĀŐŞśíŰcâôé¨OdŸ˙qí5jÚ´q#–/YŠף° ~żOŸ¤f‡NŃškgű‹‹Ԕ~űď§&ąaý:ŹXş›6m@a~ź>ŻÚVVv–ŞâŐĄs'äśnƒęj޲%n¸őV\wóÍXź`ÖŽ]ƒí[ˇĄ¤¤Řţâ$K­ťĎžű §QŁ ËIKɚü™Ę—-RANŚd&œG—ĆO–\Éxâ)§¨ŠŘţjĹňĺXľbňňv˘ÄţbJžDĘĚĘFnnktî֕Őʈˆˆ„dś,çƒ`ŘĚĐĘd`Ćţ7Öl쁿ĐmOĹ0ü~ű%Š`ŠyĽÍŚ ¤!4j3.ë0P>`c…Ö'ó—٤Ś˝{2UËÎ`55˜ăNŃ,[JąB§ŮäOw-Ö/“V:SŚLQ t{ٗɓ'‡çioŸkF ˜É|şâ˜nmmJ`ËĚ@…ą~ýöąĎ[7ŕ—_~QŻďˇß~čßżżÚŻiÓŚŠy0#"""˘úNŸ'G†¸$`&çÁ “Jf6“[šč#Z,Ú:dyŠT–••Ľîë`™s9g¨,růXƒŐw ˜Ĺ!!˘Ý$’€×ŽȒ%ƒ˜=űôQS}ątŃâ„ótěÜŐ%•óz÷íŤ&"""Š.<¨N•!ô8tk•?˛L¨v™VŞţů0Ę|°ÁYŔ4Âóťĺq |@& g ISŰQ•Ńěç}ľ”Şh–ܒ˔2¸02ӁŒ49ŃŠ´ßľYG }>Ő§šçT2puć™gF­€ "ąúÚç)sĘÍÍŹ瞣*6Č9žÝäšŃŁGŤÁľ`(ˆˆˆˆ¨á’se9ˇ–Šfra‡œK L9Öí0mĺ%”&óËŧ,“lj*Ĺz-څ"DDDD żY$""˘:URR‚Í7bㆍŞ2ÜfšÝ°AU‹;}ôŮŞ%g"Ÿź˙~ÂyęS`Žˆˆ¨>RĹ,G ,ř0řšj—Y>¨b„Ş›Š˜ÍĂ*)…UdOţ̀_Reöx!!ł`(L ř„fd[8*TŞœćR\°RS`J›lˇŰ™yŤw˘U/Ómxô Ud%'Ls’yĽŃŢFÎŁ%<&SdđKÂgÎ*d5‹VՌˆˆˆ¨!`ŔŒˆˆˆęĚu—]†Ů3gĆ|}ń…řç}÷cŕŕAQ_÷ű|xaĚLúńGÄ㲕‡: DDDTĂBŠ­p€,t?! ş,8h‚ąđ<–ŠÂbFf–x}öT”–Á(ó´xz[Ś‘ŠđZ řŠT03eĐĆj…iÉş  ŚjŻŠ[Ý ^slé[ç[ďU>—6ŁT<ÖŻÇ ‰Eť DDkqODDDÔP0`FDDDufżâĚňóňđW_…î={`Ŕ ÁhŰŽRÓŇPXXˆ˖áç~ŔÖ͛‘ČŃ#F ;§ˆˆˆ¨–”CʘSy*=+t1ƒ ™ÁŠfFZ Ź,? đúaŠ •LV¨]Śœqť`¸\ęÖLqŤeĽ%ŚeŘĎŽđ|Q3U˜Í¨ˇ%ĚbU=pV1#""""˘Š"ƒ^ą^ΊeўO$Öňú9ˈˆˆ¨!bŔŒˆˆˆęĚ_N;źó ňóăΡxá"5U‡´„şŕďՓň@ů ‡j]iƒ/–ę€7Íĺh†éH‹™ę…`€LOÖcŰe꽹Œňu™Vy{Mľ+¸ŸRé̐gÔ~‡&Ë9É@Ž.Ľf Ţ,‹)VĽ2V0#""""Š.ZëƚŻRZäç)ç>ÄŰžăўŽ3"""ŞSÇ<.ůÇ?PÓ¤eԍˇßŽĂŽ<DDDTNގŠđUj*F°,•Í2Œä2 ĺI.#ňľ˜/_7Ú^ÄëFÄ]ľŁ|ŠšŁAVĐí18ďŐˆˆˆˆˆbKt>]ëŻÎźą–‹W˝˜-7‰ˆˆhOÁ€ŐšŃűîyč!UŃŹ&´nӏ?ű?ňÉ ""˘2ávĂĚÎŹŘňĘˊĄáU˙""""""ړ9ŰyęǑ@ř>ƒfDDD´;šADDD´ ;üppĐAřpě;ř죏ąuófTUÇN1ňôQ8qä_ěqsˆˆˆ( )ćvÁhÖ֖­á§-Żß­°0\şĹd°Ĺe°ż%ˆˆˆˆˆˆ¨DŤBć|.ZĐL^“[żßÇ`í0#""˘Ý&33ç]t1Îţۅřsî\ĚüíW,Y°k׎ÁV{ꏍX}‰âńx‘‘‰–š-Ńś]ôޡ/0]şuĹgXŔ傫s, ?oy}°ü.gqsŚËˆˆˆˆˆˆj‹%Ó:SŞ—ůýţZm÷IDDD”,̈ˆˆhˇsŮŰűî×_MDDDTóŒôT¸zwďë‰áޘ0łG+ţjŔŐ0gĽ˛Şp™ß°ż;u‡—gЌˆˆˆvDDDDDDDÔ n7\]:ÂhÝ2œ#ł|~X~+܎…ů2"""""˘Ú/ V@ Î#á2†ĘˆˆˆhOÁ€QC&íT,fˇÎ0zvƒeş`És€ĎŻ^Sł…&vČ$"""""ŞYą‚bÎŞfúušńٟՊ‹Kŕv{ÔóŚi2hFDDDťfDDDDDDD ˜‚°˛łŕ>ę 5 đ((‚UV˝× ¨ŕYUŰśQbşz´SŹĐ™„ˤEŚs̈ˆˆhwbŔŒˆˆˆˆˆˆ¨Ą“đ˜=Žá:l܃öƒ‘žŠ@~!0Ť8Ő0#ÁĹ<Î×ĘĘźöTˇŰŽ\Ć fDDD´ť1`FDDDDDDԀŮCj Â0ƒ)ł´ËĎZľ€?ż>ŻWU.Sí1e<#ş%"""""˘Ł[dĆŞXڟ—`YQQQ̖šDDDDť fDDDDDDD ™!& uĹť=ľi…ÔŤ˙++eۡĂë÷EĚĎA """""˘š”(\&ˇ^ŻĹĹĹpš\áĺ¤z™ž—ˆˆˆhwqƒˆˆˆˆˆˆˆŹ`E2Ś€eşěÁ űŃŔ~pç˘ĚmVäçÁ‘ Óă śŇ4Ř*“ˆˆˆˆˆ¨68+“9ďű|>Ŕď÷Ă4ƒá2ÝSO ˜ŃîĀQ%jĐö+ßePÂŔđ¤Á}Ěp5xQâőĂWX„ôôt¤¤x`†.؎…ˆˆˆˆˆ¨fE†Ë %%ĽöTb> ¨p™ËĺVŸĺ"fzYçg5ψˆˆ¨Ž0`FDDDDDDԀ9‚ƒŇ^%ĐpťÝŞKaa!źŢ2sť]áÁ """"""ŞžČ xäąn‰YZ*SŠz^ÚbF܁4Š5-ŁUAcȌˆˆˆjfDDDDDDD œój÷`33üšT1ÓŻ•••ŠÁ ˜ÉUóOyŘL–#"""""˘Ş“‹z䳗´Â”)x? ^ŤXĽĚ´?‹™Q+˜•ăg3"""Ş{ ˜ídpB5Âm32Ŕ!Ď0 Złx˝%*llŰUOĺX°b™ţ|ŚË<ńĂe•ązŐ̈ˆˆö 2˜;ă—iXşx1ŇŇŇĐkŸ}Đťo_UWdëýœ„[i“Šëšn)WÖëp[fUós˜“ţŒĺœŞ,ăg4"""Ş+ ˜ՐľŤWăœSOU÷?7M›5‹:ßźšsqă•W˘¤¸ ‚ű}Äźó€ęŢWŸ~ŠGîżĆĂO=…Ýmۖ-řżkŽQá2mÔYŁ0#""˘-\ŚŻ— ™äyyNnő`…<:dFDDDDDDU-4ć ”EˢÍYЌá2"""ŞK ˜ŐĄ%‹á–kŻUá˛ý<÷<ôPƒ —M4 ˇ]=:ué‚WƎUÍ3=ŽÂeMš4ĹI=EU0rŘĄ  gŸ|ď˝őFŽ…knş {şâ˘"?|¸ş˙É7ß QăĆhhö†÷HDÔDk—˘+t Lhč`™žb-ODDDDDDɉ‹*Óó;—ü\FDDDťfDDudՊ¸éĘŤPŸ}úőÏ=†ÔÔTiżĎ™­nŻşé~ÔŃ """Ş+ŃŽŒwV1Ӄ2’hy""""""*-<Ś/ň‰őşóž3\ŮSżĆĎdDDDTŰ0#"Şë×­Ĺ W^‰;śŁgď^xđ‰'–ž"'Šl'Úľď"""˘şŮ~%˛Š™ŤE&ŻŚ'"""""ŠÎyĄNʰY´€X2Ÿł˘ľÎ$"""Ş ˜Ő˛­›7ă†\‰-›6Ąs×.xřЧ‘™•u^ż?€oż‡/?ýŤVŹTíçÚ´m‡!‡èłGŁqă&5˛ÜÚŐŤqΊ§˘y˖x˙‹/đÝřńx˙íˇ°bŮr¤ŚĽŠ—#G–t­Ó§ăĆ+Ż ?^ąl?č u˙œ .ÄE—_Śîßçö~~›nż]şwÇËĎ>‹?˙řEöţN˜2.Wđƒś­>ůŕü˙Ť–Ż@Ii ZˇiƒÁ‡‚SO?M›7G˛ňóvâÚË.Dz%K0dŘ0ŐÎÔĺNîŸMŠR÷هâű °aÝ:.Úśk‡ŁGŒŔ #GŞÖ—ÚKĎţožňr…ĺ/=÷œđýç^} =úôŽš­ß{O=ú(ZĺśĆ;öĎ?֕jçžzÖŹ^…ŤŽż=óŒđó‘Çʏ¸-ss1ôĐCqʨQę¸Guâ‰ę÷ůż/żŒ>űěSéuýžN8ů/¸ńŽŰĂĎ'űóľ>í“÷ßW“xô™gp`čwMďכöąŸ?oŢ{ëMűwqzďÓO>÷|xůüź<|úá˜8á[Ź—Ÿý\çŽ]q”ýó9é”Sbţœ7lXŢyżN›†uk×Ŕăń ×ţý:dřpœn˙=ËČČTóů}~5äŕ ˎ<ćuťO˙~xú…+ënš ƋcžĹô_ŚÉ7GءüăÚkŃŽCőťřĆËŻbŇ?`łýţš5k†C<\z Ň32˘îëšUŤěżÓď`ĆŻÓąyăF5_ď}úâ/=Íţű0´ŇüΟ͠!Cěí˝Œi“&cŰśmöď@K ˇˇwîE…w“}Bţ>0öüřÝ÷Xťf ~żú;<ü¨ŁpĆŮg3lKD´›Uő*÷XĚ8 ADDDDD]´Jeúq¤ČŔXä…@ą–!"""Şm ˜ՆĐ皝;vŕ†+ŽTĚÚwěˆG˙ű_ä4ju‘˘˘Büë–[UxEČ|9cŐĘXńÚ2Œűâ <ňÔSčÚ˝{,§}4ö]<ýŘT@Šß~űaëÖ­ř}Ö,5ý2y ţďŸ˙Œ9¨egeŤPÉs~?'EnëÜJó/Y˛O<üˆú@Üşmäř|á×$ÄsĂ?ŽŔş5kÔc Á5ĎČTÇđ‹?ĆÄožÁĎ=‡n=zTX§„ęţu뭘>uŞz,Ą Ő,_şT…Ä>˙č#U9.Z *Raa!nźújľÜŔAƒđŻ˙t¸lőʕ¸ĺşëÂű/? q-üóO5}m˙<řĎÂÁ-9>úXéă'űŢ­Gđ畞™w{Šzöɧ°Ń>nsgĎFżý÷Ż4„¸$\ćń¤ŕ¨ăF„ŸzĚ23U;W™žüôSŹëŔ¨Iń~ţŃčcí÷K~÷"}n˙žźűć›Č°ţěkŇ´iř5y_ňóYżv­úâĽY‹đ–•aŢÜšjš0n~úidffVX§üýşóć›UXJţ>萣ü~-]ź?~÷ţűňKÁ™˝^Ůżâ˘bőšż˙7B×n•˙nܰ˙¸ŕBűw˝öłőâ 1uŇ$,[ź˙ó_üß5×`çöíök˘műś˜=c– „ţ1g6ž~á…Jż›“~ü÷ŰoKJJÔk͛ˇ@^ŢN“é/§žŠkí÷ÍÖ­[pŐ%—Ú ĐŁWOdĺdŤżożöfüú+žyń¸Ýž¤ßŁTmźîď—cĹňeöž¸Đž}G.ŤWŹÂŤĎ?oďĎ$|ェ Ň3=†'ţ÷ż Ë=ůČ#*(%UĘnšó. <(ü˙űř˜říÜjoďíO>Šr’Ń-×^ƒEÎÇţˆ{}Tł’QVV†Ţôj˙%|săíˇŁc§Î굅óŘű–,Z„{î¸]UԒ/¤˘™LâÄ#Ž@aA Ečb‘ăwČa‡Š÷÷͸qQfžúJÝ~h…€cŹcŚŞ“=ń8~řö;üÓţÝxuěŘ*UK$ŢĎ?}Œž}ňIź÷Ö[9jŽšéŚ˜óż˙öŰŞRŰɧý5† Q?űýH¸lč°CqĺM7 7ˇľzMÂ÷ŮÇ@Âx˙š˙ÜůŔýáĺ$$u÷mˇŠßƒ† ÁˇŢJđńÖkŻWUűŢëmœÉ%Ş›üţK€ďřáĂŐ|ň3mÔ¸qÔýűúë¸éŽ;0âÄŐcżĎ‡îúžŸđ ţ~ŢyhÓŽ-ž}ĺ•đĎN~żŽ¸đ"UĽmâˇßސĄ&ş{íß;Šú'ŐĎ:˙\z“ăß}‹Gí÷ö釢K÷n8ůݧVڗ×^|IUžťň†ëÂż÷łgÎÄÍW_­ŽŃ—Ÿ~Śţ[‘ě{|ýĽ—U¸LZßc˙÷¨eč¸m˛˙ű$ĎŘë|Ç~˙ç_|1ˆˆh×ŐÔ`ƒŹÇg˙{ä÷űŐż!2É}ý%O>GÉwÁ2šÝnuëršbśĆŒ%Öźl“IDDDu3"˘Z`,UULBEâĚóΉÚjP[śdŠ seĺäŕń1c*„ydš=ôo\pćhŹYľž§ ť˛\x?í'œ<#O;­Âóűî××ßr‹ŞnőÚK/â/öëR}¨ŚHŘ$Ve´ëěíţüĂ8ćřăT0O“ĚŐ7ޤfR]MŞ3év}ú8Čú|ü tďYΒ UwÜw/6mÜ KĹŠ}úő‹ş_@şí†TĽ,™çÇCjj*’őĺ'Ÿ¨@a˖­đđ“OUh_(ďYŞQ{Ú(ľ~i˙yؑG˘&wňI*`&U´ŽšéĆ 8 +IŤNqüIĺ?˙xÇLŞĆýóžűąmë6uŹßx啸ŽŞŠ÷óŻ =ýŒ¨ĄČ/?ţX°$üwĎ#WŘ~Ď>}ěŸ÷ŁöߗłTë˘Ő—ĄműöęľěŹÜűđØ3s&Îšđ‚ Ą5ů=pďíw`ÚäÉ*`VU— Š:&me%`&Őô.˝ňę ÁŔ6íÚŠŸšłf͘Q!`öâłĎŞßăŃçŸnM+ä˝qô1(+-ĂC÷܃7íŸi´€YŤÜ\\ó7U86RUí”ÓOWUáŚüüł ˜%kţÜšęöTű¸śtü7PîßůŔ*ȹ߀ "˘şdHčqĂ*X~?ź>Ż=I¨ĚŻ)‚ .űü"řőŻ–'"""""Şţ’[š€§ŹĚŤîË÷¸4ÓĄłX­1c­SĎĂpŐ̈ˆjÁ˜'žˇŹŻ>÷9l8š6‹^Áě‡ożUˇÇw|ÔJQh9îÄđ˜1˜>ej8(VÝĺœtőŹH‡q7n˘Ş7ý>{öŻÁČA.ęŇ­›š˘‘°—,'Âwl߆ÜÖmÔóC* ę8ƒRš,óô‹/ĆýPîłSĽşŐŹß~SaŁŸ|RľŒŹ ‰SÎ8˝B¸L“ăy’}ź%ôířń50;đ ƒT¨mÓŚŞâ°Ăż6uňdäíÜŠ^?đ áç“9fgŸž ˜}˙Í7¸ę†j,ďç_vHÔç'~üűrĆ9çFÝ~űqŔâ×_~Q•ÝN Ě$\)ż˙ąţ¤ĽOśoێęčݧoĽç$ä§uęÜŠŇë­Z+ŻítlS*Źýb˙źĽşŘ眃hŽq,žzôQl޸ ˗.CçŽ]*ź>lřđ¨ÇFˇ–Ý j&ŤenŽŞRöăˇßŠßK žŻ.j""˘š“\řKĚđ}{HÂţŸ}ë󥨤 ţ€ĎţˇŔ…ôô´ W×'ż~""""""ФC`şB´LĽĽeށ„Ěäťoůü•(,­Z[gQ]`ŔŒˆ¨|7~źŞ2ôŕăăśëoŔšŐŤđŔ]wᑧŸŽúAoů˛ĽęöĂwÇbÉâEQ×)ՓÄĆ vy9MöĽk÷îQ—“×zô6˛˙50KKO\LZ[Λ;WU[żv6Ź[‡Ĺ‹ŠŕÂďó‡ç•|˘ß~űĹ\_źŘůyy¸űśŰ1}Ęőř‘§žŠŰF3–ËW÷#J›JMŞAIŔlĺňĺ¨)2č{ě‰'⍗_Â7_}U!`öM¨=ŚTźr‡’9fýě}PŰą}{̀dU%óóßľőG._<ćO=ú>x睨óčż/ŇÂ1i…šhÁŹZąŇţ\‹őöďĺ˘ Őkţ€ŐáIńÄ}ÝtUލýVů6×­]ŤŞ—‰;ož9ÖęT[KąÉţoBdŔ,§Qô–Ľ™YYęVžôŞŠłĎ;Sž¤Zőžn˙Ž4x°ý{ľ?úŰż[ş},íF üž@IiŠ=I°Ě@FF:ŇRSěyĚ çOúJűÚ ‰5D:&Ÿą$Lć }ߗnY\\jOĹ(((Pgę 4ËȤ?é0™ó–ˆˆˆ¨.0`FDT äjŁÇžƒV­rńĎűďÇ^ˆÓ§ă×_Ăčó˙Vi~ đh:ŕ‹‡ěĘrÎý”jGąddŤpĺďĚC]‘֍ĎüçQ̙5+&Ňęň€1ů§+„Ë„>5FuH…%ČňÓ÷ßÇŹě‹ěkA^đ8ĺääĜŻQăŕ>J`Ť&8ńźůʢ6yŠ ĚeŰű ˇRŃLžhq҉ćOć˜é/4¤éŽí;j,`ś;8>R˝KŚxŠ +ţ}‘߉—˙÷œ ݈'"""""Ş9’ KOO…ÇăFQQąúVžÇ”ďdu°,8_Ĺ0YdĹ2~V#""˘şŔ€Q-řϘ`¸LôčŐ—]}žyě1źüÜsŘďŔávsš$]sÓM9j’UÝĺ4ůŔZZZŞ‚fŃěľßËn”ƒşŸˇ×]~™ ?uî֣΍Ţ}ű"ˇuëpUŞc†?*Ěr5RˇÎŔ]UÉś$P÷ڋ/≇A§Ž]Ńwß}“^^Ž˲bĘĎϏ9Ÿ5jÜ5I*ćIĺ4 ýđݡ8锿Ş[ݎLót;Q-™c&żň;"7n„dí‰WÍŠŸOv6 ěŸÍ+cǢS—ä[3Îśéżn˝U˝ŻĄĂĹą'ž€n={¨śŁ.ˇţńÇ0Ó˙=ă'Ąמ@Ú`ŢóĐCŞ…çüyó0oîďřeňüńűďř÷żţe˙ÉÇ_Ď<DDT‹,{°ÁţűlÚˇ–ŔśÂޝ^ŒCş˜čÓ.ĹŔHU­1ăŸqXŐŠh&Ő¤ĺc—|'+ßCJu3]A:Ú÷­Ź^FDDDu˝-ˆˆjAë6Ă<§žy&† Ś*oÝ{ű(,(¨đz‡ÎÁVqK.BUTw9§yż˙őyiľˇ TŐŤ]‡Ž¨ żL™ŞOmŰˇÇ ŻżăN:It¸LÂR~żŻŇrşŐŢ1ދˆVÁM“ŕ?Žťç_r‰ ů|^ŐbPÚtVE§NÔíÜ9łcÎ#•ŮÔź;ĄŚo/!նďßo?ůäJó&sĚ~Ÿ|R ­qÓŚáçu 1oGôpÚöm[ą'ęúů,^¸°JËM7N}Ysě 'ŕž˙<ŞZśnÓV…ËDdľłÝĽuŰ6ŞęĚÎ;bśřܝäďą´Ú=ç‚ ńô‹/⼋.RĎżŁ])Վ€=ţŕőYřhv)~XâCFzŠ=‘Ô׌`ĺ2fɈˆˆˆˆˆjŒłYĹçő=Ëţ^Ď…ŹŹLdff¨ďŔĺűyŠf&“^6rş/"""˘şŔ€QšůÎ;ŃźeKlXż>p…׎<ću;ńŰ ęőh^3O?ö,t´rŹîrNcßx#ęóžóŽŞ^%•ŽúőßÉp…ލrśśŹŠŇ˛Ru۲UŤpxÇiâ„oŁŽűˆcŽVˇżL™ŒeK–Tz]ÂA˙wÍŐ8í„0é§+˝ŽŤ‰Éń[ďš[ľîŰśe‹ ™I¨-Y‡܏ĆžŽüĺ$áš/>ţ8´ĎǢŚzä‘j€x֌™Ř°a˝Şź%Uť$)™cöÎkŻç=účđŐr˘y‹ęvćożUZN‚|ß~ý5jƒ\É'ţęý~qtđďËďź żŻrPQ~Öwßv+^{álŮTŢBÓ[ühÓŽmÔőNœ˝Z˜Ú_ářQŰ2221řĄęţŘ7ߌ:ϚUŤpű 7ŕĂącŁƒŞŠ÷Uľ¸çžS˘mŤoż~ęV*Q]ąěă˜šş /L*AFš‰œ,‚eË,őg 4Qísśż”[š¸W&Šd&!łČ*e:ŹŮ&“ˆˆˆ¨ś1`FDTG$¨uÇ=÷¨ Îß~‰.ÝşŠęHEEE¸áŠ+1ëˇßÂ%¨ôę /ŕíW_ĹGcßEŁúYu—Ód_¤˝ßŁ÷Ýn•(Aß}/ýďYőřü‹.†ËíJę=śjÓZÝnXˇŽB@'Y˝ű[‡ţ>{žţâ‹đ{‘}’*RO=ňHÔĺä8}üńđű¸ůÚk1cúôđkŰśnUmřţ˜ó;JěăÔťwŸ¸ű™™‰ű}TÝĘąyňĄGŹNŠÂi7ŹÇÍ×\ƒŐ+W†_[źp‘ý3şBgi˝yčG ŚĽĽĽařŃGŤăőßÇWˇG{,RRR*Í÷˜mقűîř'f͘ĄÚ~žsÁ–4dˆşýř˝÷đ͗_†Cjťóć˙ƒŰ];¸[ľţ~-œ?ŻZá(ůůtčÔ ‹,Ä­×]Wáç#żŻ÷Ü~‡úť)ľRmc{÷ ţÎ|ńÉ'˜7wnřyŠDřâ˜gŐďj4ňEP“&ÁĘoóćÄŽW“.ţÇĺjťňwřŮ'ŸTŐĚ4 ™ĘĎgĘĎ?ŤöŠŽř9Ĺ{RĆ˙sű˜ýżęޤ–ďŇ­+N<ĺž{čž{đäĂŤuHHL*c>˙||úᇕZŒŠk˙Ď>Űśá×iÓpă•W"=#CMŰíeĺĂśĽ|üqľžD$$v›˝ý;nź_~ö)şő쁑Ł ŰÜ÷Č#¸őúëíc0 çŮË4jÜ~űK€‚ź<5O×îÝq×ŘÇžv2ŢŇóŤO?Ť~P;ů/1çv̤Ą<'ÇLZcŢc˙ ¤ňžÓ)§ŸŽožüJ…„ţ}÷ÝxěÁŐń•`Zť0úoçŤŕUM“߼—˙÷?,œż§ŒĄ~Ď˙qýľ8äĐÒZ^˙|nťţüúË/ęç#á(ĂţYČž 9w=đoՎłé¸/>W!Á+/şHŠ ˇyă&ű8ůqÁß/ĹKĎţ/ę6O9ožň˛ŞŒÖŞu4oŃO>÷ýçý÷ăţ;ďÄ{o˝…ÇžƒfÍZ °¨0ü÷Ś]ű¸ăžűPSb˝G °ÝbďÇ?í˙FIďťńߨ`IIąj?+żcŇjôĘoՅ€j9až 7řávČL<.œí!¤“ƒ\ź™ŸŸŸĎ§Âf2Ĺ ˜YüPGDDDu€̈ˆęŘš]ŹBXrőŃݡ݌n…[řĎc¸ăž{U,%- [śnAŁ&MqؑG¨ŔĆŮť ŇúŞťœ&áœ?ţ8zőé‹BűkjzšÚ?Yß-wÝUĄ5b"ňöî‡R“œœFŞm§„Şâú[nÁMˇßnďOY!6o܈öÚă˙ţůO\rĹ1—“ö€>ńnľ÷šßţű#5%E……čÔľ‹ Ś˝örX˛† †ó.žXÝĆ>>šK†TČzîľ×T%) “ŠöŠöü}zăŠëŻĂ3/˝„­ZĄśČ{”}˛ý˝zÜ7Ú1+ś™ěÎ<÷\źôÖ[Řď€*-'WĐ=ýâ 8őŒ3Ń*ˇ5öhľÇíÁ¨ŃŁń̋/ŞőֆŚÍšáńgŸĹ ĄCÔďĺćM›°zůŠŞŹB˝ˇ˙˝ţ.ťújôěÝ ^żů;óĐś}{Œ<í4źüÎŰ8xP…e$t÷ÄsĎᜠ.T˗— oÇě?ŕ@<ńżç1xč!1ˇ÷ˇK.śo˙ÖmŰcӆXłrUÔöŠ5i衇⥷ߨłFŰďŤňňóŕ÷űŃ˝g6}î×ĐŞU.jJź÷xĐÁăš×_WaUůůIuCů“}‘`ދożYŁűBDDąŤŽĎóăÇ%^¤¸ƒUĘ2RL$Y¨–ˆˆˆˆˆˆęˆäĆŇÓSU§Ż×Žb&ômdĺ3"""˘Ú–ěY‡‘äkFˇFŒÇz2ˇzr…žsELňZŽÜ–•y§ žŠź˛@_y '–[šJĄ¸¸H 䛩­ADT]kWŻĆ9§ž 'ßLžjXŽťě2̞9WßpN9ă í-˘]ąë|NŸ_‡oP~Ţ­[ţ:[ŠúP÷ŐdŸ›űü>uŽŽîŰçč—鸣…×A´'‘ϐ†ýť>yi îý*Ĺe9łpň~™¸îČFHO‘ŰŽŤßÁ6™DDDDDDť[qq) Ug†””ő\´ í3‰ęšüţÉŻĺ—ă§ŮżŤięu Gš.—ŞĆ'§Ą*|.ÓĽć׏…óV˝&“ţV"J ŮXíaś$Ş_ĽëíżÓŇÓ3Ô3äď°ü7#ü߁ĐäTŸ˙ž§¤x† xp^čÖ1YĄŰ€c˛ˇ‘b<Žwy?R“ śČ$""j@6lXßgĎVáÁŁŽ""""ůęĽĚŔë|(* +EŞý€îÚÍďa‰ˆˆˆˆˆö,G ś;+˜9É@;/t#""˘şÂ™DDDőœţrAŞç<őđ#ęK…ŁF‹ěœF """’ęeRľlŃ&?œcinŔÍoˆˆˆˆˆˆöHRŮEf‘U×5V-#""˘şÄ fDDDőÜs~Çő˙ř‡úÂĄŹŹ Mš4ĹE—]""""„0aŔç÷cí/`”@¤şM{°B—.+/aV—ĹĚô€ˆÜáÖ """""ÚëÉg#ŠbVPP nu+Lg‹0Ý2ˆˆˆ¨śńZe""˘znÉÂ*\&=ʇ †§^xÍZ´‘°Çśîy­SÂĄ2ű\F%Ű"Âeĺ4 Şł§s‚´‰ čDDDDDÔ@íÍ*ṳ̊?71HFDDDť+˜í…Úśo‰Ó§ƒ†SÎ8CMDDDDąHŔŹÄ+ƒ{^y0u>{ć31äY+x0ĘçQˇ–şĹžřśˆˆˆˆˆhé@•Á2Ç —ŃnǀQć Xđ‚!ł=u\ĆpŽ•DŮGŐ&”<3tŠ3Ž15hň9@Z@&3ŸhhA4çű‘÷Ů“ˆˆˆ¨.1`FDDDDDDDuĎ*OźY†=X ůýfčžnŠnÍ`Ĺ2錊'Ž­5\ɄËÄŢşb3"""ڝ0#""""""˘şg3f>űŻĎžöTâ ŰfŞą+|Ľžią˝&Q}-dŚ/RąbΧ犯œŸç"?Űąu&Ő̈ˆˆˆˆˆˆöBj?p&[PÝ-CcńňÚ{QěRiŔ0Â!´Dë-˙C* Řéó˘ĐŢPfş énáf:Śp1ƒ!6gřŒęT PUę\.łÂ˜ßďŻĐţˆƒcDDDD)Z`LŸCꀕ3lœ–‡Đԟ2ˇ˝˝ŹąGW vf˜Œˆˆˆv̈ˆˆˆˆˆˆ¨Ö3cö`HqiĽ>řú5C é k2ŕă %ËŻ–7Ő6üE”y€´Šö@‘i”ˇ• Ö;Ť|™ě˙ĚCII úőŰŠŠŠ r>Ÿ3fĚ´Ń8öŘcŃŽ]őüÚľk1eĘôčŃ}űöeЌˆˆˆˆbŠ ’E>–ĎúąÜ÷ů|đz˝(++łďˤçrëńxŕvťŐäń¸C]ŐúlBDDDÔP1`FDDDDDDDľBşJíÁœÂbĘüŚýŘmâÂó8tŘŹ*ôÜŚ˝NY­Ĺ^ Ĺe˛R dŚ™Á™ÔOłił&ďăĹ_š5k0fĚ3hŐŞęƒőë׍}oܸ1222j-Ô%y?˙ü3Ţűz÷m[Ťm}ôŃ'xóÍ×qŘa‡áÖ[oE“&M@DDDDÉ ‹Ő"2Ř&(..FQQ‘ –IľÜŕüFÔ6“r[ZZŞ&!ŸI\.RRÜČĚĚTŽ0hFDDDđŒˆˆˆˆˆˆˆˆjMq™; ź(ňö˙ƒm]F…ś6ÎŞUfżÜ0 34 äGŔďUˇ%~äűěY$Xf"”4Ť5yyyŘž}ť˝ýꋛož—]vŚOŸ^ëĂ,uX*ěxŕhѢşwŹ,EŁ?7ˆhˇ@+))ĹćÍ[ÔTXXŻ×§Z´Ëég´ĎŃÚnĘz¤ę™Ô6nÜhŻkłz윇ˆˆˆhoÄ fDDDDDDDT+ KČ/śŕ‡ F¨ž™aÚS¨eŚŘŐAYŤ!Ą5ŠPfl†ź°o Ëööě 7ÜF]\iWżŽĺ“3™¤ÂŘîpđÁƒńů矫űl‰IDDDDńčĎĺŐʂ%VPP€ââ՚]ž—@šLşőeZZŠj})“ł"™łŚLr?Xő,¸Šl&A3š";;[U7#"""Ú1`FDDDDDDDť,ŘtŚ\QYEĽ$Ӎ2-ü˛ä~¨…MyƒËPëJ™bV˙ŇŐÇŹJŰŐëTsŠőšÁŕ™„Î¤ef™ĽÚrfښ*dć2ŹZj•iDî^LÎÁ1ŔÚ˛e+śnÝŞźš7oŽ&MWZĆo›mŰś#%%99YjmŐŞUj°Ť]ťśćÝ´ił=ď6u_ÚNśjŐ2Ô:(¸ŸRŃĄ¨°Ř^§ĽŚ;óTĽŮ~ăƍ;j˙,‹‹ąaýFűśéééČÍÍEffzř}DĂdnÝşőö6 ѨQ#{ţVĄoĺc.vůů…jŔ/++S=WVćE^^22ŇŐvŠŠŠU+Ođ“jgrlLÓĽv.Ú:wěŘiĎ-j?äX6mÚԞŸá5"""˘ú.˛EŚÜ–””¨p™œWĘů˛nq)­-ĽźÜşÝąCa:€&皲>9‡”óN9_–Šhę#Š˝Ţźź|UMBfŠŠ)ź8‚ˆˆˆö: ˜Ń.ą"n‹J(°'ŸżZˇn­ÚţŒ˙ú|řáÇŘ´q ź>Ż˝ĚëöăĐ§OÜqÇíáýüů§Éx睱Şjƒ śIM[g>G1źŇűZ˛d ^}őuő~|özÓŇŇĐŻßž8ďźóěŸsĺc-­9˙÷ě 8âČĂqÁçŰ?ˏGůŽ?á8 pžyćżXˇnÚo Ó 6 ŁGŸĽi΀›î>űěsŒ˙5śoߥ^ËĚĚÄŔpÉ%ŤűDDDDTżéó?š•Jź;wîTÁ/]ą,==M…ŔäźUćsV+KDć×UÎŇŇŇU53šxAÂkňŮEˇÝ” 2äbˆhűEDDDÔP1`FDDDDDDDť(#Ô˛¸ĚźB/F°ÂT´—Ľ–*bö PŔT-.aš؃2ąŠ ¨UěŰБžUëąb.ŒŚř( ří‡nx2]Ą g•6€ş"T .Â5×\ŁŤŇWűöíŐ Ö˛eË0ţ|ű÷ż˙mpšBËXęľĆMᛠăU…°ĚĚ ”••Ş×7n܀űď3gÎT^]ştUĄ°+Vŕ㏗Ť iˇß~›ÚVŔ ŘŰ*ŤĐ˘TˇŇ÷żüň+Ü{ĎŞ„Ó:wîlŻk%ţüs>nšů<đďpÔQG„—_šr5îšç>,X°@U‹čÜš“€›0á[̛÷':wę\é8H%ˆĽK—aß}÷ ?'…K–,ľˇó'^yĺeUą­]ťvŞ"ŰňĺËąhŃ"UőíňË˙^FÂg˙{ö9ź3öU}BöUö{ĺʕxűíwÔą|ôчU8Žˆˆˆˆę/⒋3śoߎŞńJu[9• äüXbÂyŽ)Q L.|0ŒT4oŢLłJ•4!çër1ƒTEÓŰŃ-;‰ˆˆˆ2̈ˆˆˆˆˆˆh+‚ů KüđY† u[FŸß@0ä%A–ËĚ`CËŕŸŃń‡nƒsU¨fsˇB2čšeĹŢ2¤xS‘šbÚ{PŢZ§|_ëf`HÞţyu{â‰'ââ‹/FëÖšj_$ őÔSOáçŸƛož .ř[¸JƒLsçÎĹĐĄCp饗˘S§Ná–?3fĚRÁ´Ă?7ŢxŁ= S-_žˇß~ŚMűEˇ¤˘×Чž‚ÓNű+N9evŘdW^yŽ9ć˜đĎkëÖmx뭡ШQ6.żürœpÂqŞPqqąýüXźţúނڐ!‡Ť7źőÖŰX0!~Žťî:´i“Ť‚t.{â‰'0q╎ƒźůůHŕ-ÜęÁçžűî[ľO×^{ š5kŞÖőő×ăńäOá˝÷ŢÇYgĄŞ˝‰ožůďžű>úőë§B{űîŰW­OŢűă?ĄBw|đĄ:–z ˆˆˆˆę9ǓŠbrńş@Ĺ>•—RUL.4óYKúŠ2“sOðԚś´h—saš0DŞ ËEŇ^^ÂgR-˜ˆˆˆho|]X"""""""˘hěÁ{l%Ľ~řüڤĆTUąXƒ5*X&!3+XyĘRĄ2RŕWm-ődżž {.—˝€‘TIW.3ʏťX’€–Z‹‰˘R|ňś›˘´ŮŹeRlŢźyŞjŮUW^6­sŐóŚi¨–’gŸ}ś ?~ź=xľY˝Ś‚röűhÖ´Š }uëÖU xéA´=şăśŰnĂľ×^dÉ$!´“N:Ɉ+Ăҥ˓Ú?ÇË.ű;îřçm8ţ„c‘š–˘Ž{zF:Ž:úp{­ śoŰĄZ| ŠâđÍř čĐą#.˝ô’PX.¸Žž}űŕŠ+Ž@Nٜ¨ŰR?#ĺ&Źŕs-[śÄ 7\~/ň>>x0öŰo?äbńâĽjž’’Rźńú[ČĚĘÂYg‰}öéŁ×Ź*™ÝpĂ jž_ýUľ%"""˘ú#|BčVWóűƒž[¸7 ]ôœ'™jb‰ćŃ/ChP•Ń‚AłŕĹ >Ÿ;w抰YźJiDDDD +˜Ń.˛Pć7PXęG˜V Ti,6CBbö@ËtĂ(ƒßpĄŘ熯ŹS–xńű:?Öl  ÔBŠýíEnc7ş471¸ł›şáqK•+# ‹š•ŕŸşú—şď˛÷ՏR{_Ýi.¸"ć­ [ľj•Şş0räH4nÜ$´Ÿďď!CěAŹ,UáLZBJŘJżÖąS'4k\&8˜e¨`ZˇnÝÔä¤×ŮŹY35_aAaäŢDÝǜœF>ü°ĐţĚtűĚFŰyŠöóůŞM§řő×ߐŸ_€Ă†Wí4őśőX[§NŃťwoLúyrĽméĘláA<ďłĎžŞ§Sff&ZˇiŤŢËęŐŤqĐATŰĚM›6˘qŁ&*|&ÇHr‰Ą\Ą˝íčÓ§:ć[ślEŰśmADDDDőƒ‚É­´IĎËËSmŘ ĂTm,%ô•––ZaŢXœA°d*œéĎš\"ˇoߊ‚nr‡œKő4"""˘†Ž3"""""""Ú%–=đRTRŸeÚ.~˜F°2˜e薇Ž*aĄyÉrj~żX™gaňŸkńů<+ÜţŇëĚYˇÓŤ,|0ÓDď\7ΐ†ÎÍÝČN3+ Â÷e>żýŘe¸Pâő#MÚdŞRrUjŠT[ö:˘SÇ.•rň8==UľÜ‘•žWą2ě- {†ô’uJŕΏ+V᧟~Ă °víZ+((°âň傊Ĺ,Ä{ŰR‘AÚuN™2˖-S¸üü`¨Ź´ÄěěĚpčlăƍę~‹ćÍí}OŤ.Ň:¨E‹QˇS>pWą’œĚŻ+—i˛ —ËĽćŃŐ"dżä˜Ęą:돳ƒŻ[ÁśŤÁvŞ6oŮŹÂiR팈ˆˆˆęÝÂRߖ”” ¨¨H]L Ď5ˇĎ=ÓŇŇBóɜŇëó~K6dŚçËČČ@YY™}ŽěSŸ5 Ős))ž:ýLADDDT×0#""""""˘]`Ą8`öřĚĐă€j—iŔKÚ_šţPŔĚ´Ÿ1ƒ­-…aĎďJü>|ů{ žž_Œ-ůüŞŻc°*™0á6Mľ„´gt~ľţyë|xpœuJÁČý2ĐŠ… 樚 '•Eňčđ›×Ţߢ˛<éŽŕÜÎ|S­łTőŠ &ŠpśĘȒÝtť+~mŁß‹,gEĚ+9ݟ~œ„§ŸŁŞžI[Ęn]ťŠ* iiXľz ~ţéçp LÓt…ĂwjĎBs›6mĆłĎ>ŤZtśiÓFľš”[]ľaüřďŐ‡ťZ†Žľ„şôs‘!łŞ¸B“‰ň…ň ú|^ľœœqřp0łœoFUŻłTű¤–-[€ˆˆˆˆęgő29ߔ‹‚mŕŞeĽ\”Q^8ţş"ŰXFV'Kf?´ŹŹ,”–zUŕMÎëĺŒć͛Vš/Úç"""˘úŠ3"""""""Ş6Ë2ŕ-ÓĄŸČÁ{@Ĺ ™&üö,R=L• řąŁŘg*œU^ű,B“šĽ2ŮÜhßăĆŠ˝śú1}ĽK7ůg/Wě `ňŇ2ŹÍ ŕ‚Ąč“ëŽ”ŠżĎŔtŮű€•l’Y—Ă>ęjܸąjkštŮű™#ƒŰwě„TÚÚ˛e‹ EIpJ˝=ŤźNyíĽ—^VŐźţďć›TŤČŹŹL¤ŚŚŔíöŕëqđóO?EÝúӁ0™~řá|÷ÝwŞĺćmˇÝŠÜÜVHKKWá-Ѝ6ý—™öśś†ňZľjĽĐśnÝjś•ÚŲ̋.“*ňZmcéröm.žäBő8ú`Ą ŸÓgě#"""ŞG¤ŠŽœSĘ9ÇăVç|‘dˆČĘdŃ;ƒkŐ!ەś˜›6•Š€™ŽŹ&ÁłhűĂóN"""j0#""""""˘¤DŽČP7@i™żB‹C#T%,ŘzŇFpRů/ PäóăĹIEřuE)ü`¸ŹyŚ ’‰CşşUKMSĄ'űőű°%ϋקaÚňRxíu,ŢčÇżÇůđô9hšá‘ŘPx?`➟˝ďe> Ճ:ĺr™čŘąƒ Ž}űí\rńĽŞ ›ł„™´Ś” 2p&ŐÄn÷Š[D:Ék‹/Ć>}űaŕ€ѢesőźP[ślŠşőůüÚŠ jË1đ\fĺʕ(..ĆĄ‡Š^˝z…ç—ŮÖŻß BdҒ3Hł0xđ`5Ďâŋ°cÇvŐ&ČYÁlǎřsޟ¨ ‚KIMUÇkɒ%j_œd˙ÖŹY§ŢkłfMUťN""""Ş_‚măƒ'ĽŇú<%%%ę|‘A˛ČpWM…˝¤%ڜóJđMś%méĺq°Bą5ĐFDDDTŸ™ """""""ŞŞP(ŸöäGdÁ(5˜úÚÁ”˘eŇ2@ŔžˇÔŔçsŠń늌JˇÇ†GOËÁŕ.iŔŸ˝ŹĎ2°'K­ đ.´näÁGgâźÁhžloYXâÇý_akA Š]đT­¤,še’%ŐŃśmہ-›ˇEśnÝŚć“PTďŢ˝ązőjźôň‹Řąc›Şh&ťśrĺ Œ;V RIXŞmŰśŽý†É‚-A+ž§fM›bÓŚMXa/﷏ąĚ'qăÇOŔgŸ}ŚÖ/á6§FÁçóaÆőęVŻKž—Ę ţů§ŞŠ&cee^,[ś ďż˙žz.Ř^SϟĂ8‹.‡|ŒÍ›6ŤVžRŃa͚5xᅗTČŹfGFF:N9;vîŔ|„Ĺ‹–¨ ]ŔoŮŰ܉oě÷Ćgŕß˙ţˇ:zŸ‰ˆˆˆ¨~ś˘ ¨ĎrąEffĹJaÎęľr_?Ž×Ó9_uI›N݂Ţç ŔëőVx=ZŔˆˆˆ¨žb3"""""""J’QŠŚ/|&Ü˝Q˘„Çj$čdŔeşT+FżéĆŞ-ž]P‚RŸ‰w óĽŁI†P˜LT2ŕ#10÷1õɂëš&e¸đÚÔBě(ôaů>Ÿ[‚Ńöz܆+î@ŽęÚiɞ™(őúíý3íuFkńYuĽĽexúé˙ĆŹ’••Žűďżššš8űěłUĽ°ˇßz ć/@ë6š*śpáB,Z´C† ÁE]XąjœîaAć9r$Ţ|ómüç?O`żţýáö¸°aĂ{Ý 1tčP|ůĺW•ŽË°aĂ0gö\|ţůöźŃ˝{wœzę)ö󇨙żţú+îťď~těŘQU[ąb… ŸeegÁďóVXßy睃•+VâÝwߡßĂbtčĐ^Ě/^˘8đü2m:jFĹv¨gu&–,YŠŸž„Mˇ¨Şk2ř¸iÓf̚5SU‹;í´SŃźyó ܈ˆˆˆhĎ'í'ő)°œgťÝŽpe°Č a•ΝcŘŐŕ—,/­:ĽĽ˝\¨!çńRĺW*ŤŐDN"""˘= fDDDDDDD””Č`Ž רö–áĘZ[ÁČŐü~ËŻBdƒiĄ8ŕÂ/ŹÁŚKEĆZdşqÁÁéh”fEa™öňţđĘőŚT˝1{}[ d˝Zf›ęvH×4lÜéÇŰżŔpűńëĘRű9şˇ4UľŽ@œ‚T“€YŔňŠ”Kĺ•\ŘUeee*”+ŹÖźy“ŕöí—:h žyćŒ3S&OEéÔőš¸Î?˙|ˆjÚ´ixYÝ"S*‡E3úěłěőşńĆo`钥ŞífŻž˝p÷Ý÷`˖­ř⋯Ô{uţG:kVŻĂ—_}Ž?ţ Płž={⡇Â]w݅ɓ'cʔ)ęg*•ŔN<ńDÜqÇ]ŘjŻSW’őőęŐĂ~ţ6<÷Ü ˜>}şš$äuŘa‡áďż}ôQ Ě*ĘĘĘŔM7݈nÝşăƒŢÇźyóÔďŸTa“*p—\zzôč^Š‚íšt•1Ż7ŕ’sť´´ÔpŐ0ŻĽ EÎ9OuÉšŽ´Ę śŻ\ÁŒˆˆˆ¨!IöŹÉHň5#‰[#Ćc=™Ž[=šBĎš"&y-GnËĘźSPOEžĚęf=żüľÔĹĹEę {3ľ5ˆˆˆˆˆ¨\´+“cľÉЗ>[(?ďÖÁ çcKÚůYÁ6sPk?Ÿ?FQ÷ístů"YŚăŽ^ў"ř{kaCž§ż¸­ÂŕÉĹòq額PáA›Pą/ŻŘRŕSŸS“\śzqٛ;PęłWazpűˆ, ěěQ1gŰGgHŻýŚ.-ŔÓ‹‘žęÂŐGdŕŔö)° Ťˇůńŕ×ůXgżGˇý-Á%C3qLŸ ˜.3Nł`äMJ™I´œĚ䤢ÎDäĘËËĂƍŐsíÚľCzzşúů9ĎôźąÁôkҊrÝşuhҤ Zśl™ÔœT“ś—*ŕÚ˙­[ż~˝ ÎľhŃŮŮŮj~˝oúż™ÎmČă-[ś¨őľjŐJ­ĎšíXď%Ţ{K†ţo°ěŤTn“˙FˇnÝZ˝§XŰvţ,vuűՑě6#gˆˆˆˆöÁp™W],!•‚%`Öźy3ű\9 { ik/ç˝r.*çđ͚5SÁłš:o“÷Ÿ_ *Łš\nuÁDäůýî8%ŇäwO~%ż? ŠŠiHKKSWMűďü]đ¸=ög˙ŕď­T#WUĎÍňßcç­Žˆn \"=ź =OŹßwţ Ş_ĽëŐĹĄééężňwX˙ű霜ęóßó”ĎżĚ Ýú#&+tpL–ă6rBŒÇńn#ďGJř/+˜Qľ¨œ™ę7™ĚüöÁ3WúPćłT¸ŤK3:šŐdž(ë5—úü˜¸¸ oN-AŠý5‹ˇÄÂĘmě×pš ´kâÂţí=Xő{™ş mŢz?†uˇQ…BU@Í´Çtr~鍚‚óž„°t°KE†ś˘}ššN™OŻ+V•ýŘZ’A c9÷M^—/÷$đůôž9÷É9„Ńdp-2 m"_KDCÄžGy/ŇŇSĂhď7Z5‹xŰŤ-Uä€ íÔ^áJžŚ:?ݓčAqĄ÷uOŰG"""˘šŔžDDDDDDD””Ę—d+—…J•›ćŹ FÉěť8°ƒ[}1łšýüOKĘ0ö×"ä•ĘC›şĐż­§ü*g{Ÿvô@D_šÍ  %Ű CU*´’+IŻ7ÚýhľXA°xË8çu­"ˇď|.ÚŐ ŃZEłqVƒtŽ#\2"ŕí¸Ä;6ÎJ”‘ű­ˇë lEôœËE۞óřÔŤŚńˆˆˆˆuŽnŸçIpKŸßíŠ3™tG"^@DDD +˜QőXU ČŘó.ŰP].$Ôş‘ Ó%WúG „Y˜˛ź ĎţTݍqĄq† ?4][¸Â­2L{ÉöM\Ą%€Í–ŞHf%żƒHĄ-t5ůşo¨÷ĹyŤďë`Vʊ[ÎÁŤhĎE{mť‘÷5g•˛hËGžŮŽ$Vx-gˇXűç Ň9ď;CfNÉúâÍ[[˘ů"ߍ~.ZËT"""˘†ŽüBŁŇE{g;LçEDDDD fDDDDDDDT-GEŠŞáˇ h’n°$`#ƒE:dxýL^RŠ1?˘Ěď‡Ë”0šWĎ@ŻÖ& *YÁŰFŇ ^+03’ ŒéŤşćŹđ-ŒŤÂVŹÇŃÚrF LĹ \E{-Ú>EŤś–¨"Z˘mĆú]ŠúŠ ¸9×ë|=^›ŇhÇ­.Ĺ äEţü.#""˘˝—ł/ö8ƞ¸SDDDD5Œ3"""""""JJĽđM8`Vő•€e ČkÁoIŐ)3ź ‰ý°¨ďüZ¤ÂeňtÇ&\84=U¸ĚNV(ŒcOĹeź~.Ô3n#Tŕ,‰ě[0,¨•ŞhŠ˘m?rŢX­âĄ˘˝kűąBTąö3™Jd‰ZmĆÚďXűí¸DžďýÄ ÁE>NTŽś%Ć#"""Ú[éÓŁ=5\íŽÝqáQmbŔŒˆˆˆˆˆˆˆ’˘H, .`HE% Ç ’\ŞŇ˜ĽraͲ ŹŢaŔc?ŢZä‡/` W/ V.{ó—bäÉ3n´kâĆ%CÓѧGľĂ´T[N#´Íŕ:7řě˝ Ŕe˜h”ćBŞÇ„ßŢIWŒńœ€ …‚qŇĆ&­–*C%PŠÖNŇšŹ3x/„Ťdä<úšdZF&@s†ąbULłUîUT‹śýxŐâUţŠ\6Zp,Ů@[măŔ#Qlĺ琺úďž4sśĹäy5dŹ­ODDDDDDDŐ"Ă'fŇc(ÁĄŽ-\ö2†ja9c•w(čeßl.´đäÄ"ě,†ŘgşpŐáéčÓ6Xš,(o§i5ŮsbÎ{=ŚźthâR;ć2âîJřFśnš.Ô´hŐł*íF”˜óůD-2#ŰkĆŻ}e2-0ămSîKűĆxĐŞ˛ńÂuą‚lÉnGŻ;rÉđjC´ăěÜç€eź rDDDD •œgĘ$çBűCƒßďǞDöGŸłé}%"""jˆx–CDDDDDDDU"_&ö˙$(ćr%Ƒ@™/ íęQ{K6ú°zŤWjĂ^9é.{PĆ@—nÜ6"˝[ťŐv é˘iZjrväĚ/`úrŸl’RÝíů] uôâ˛N™ÓíŞůŕNźj_Zd°+2řo}‘AŤDAĽdö-Q˜M?_•V2ľX˘ŤdˇLˆÎůXĎďgP["ˇéÜ?=@)ƒ–DDDD{#—ËeŸω$Ěĺóů°'ńz˝ás9ŮẄˆˆ¨ĄâYU™nMăNTÂĚŇ傃.šyĐ'ףîď(öă•ÉEđú*°Ö"˅Ť†gŕźAé¸â°tôhĺB@őČ˝Ť|XłÍ§ćižibßÖnx$3Źň@‘Œ˙¸ÝľSą*™ŔRź×ă-+$ć\Ž&*q9÷Ďů~bĺ’}mŁ­˘ÝOFŹ–Łą*—éyę˛z™Ţ˝íXt…8V0#""˘˝‘„ś\.3|îćóíYĚ$đŚĎÓÜnwřź­ŽĎ+‰ˆˆˆjfDDDDDDD”< Š…r.’-sť‚Ał3ĂYnLBdŇĘňŒӐę2T˙Ť|řf^I°ĺĽ=Ď=8y˙Ttm)•Î\j˛˘l@ :mʡđٜR•â˛Đą… ěIćŽWďÉP˙ w\†iXĄV8[>Š`[Ÿ@¸U2Ą0˝Œó~źŔ–s΁­XmăĹ"ßCźÖ”ÎŕY´pW´ýˆÖ2˛š˜óšXËGޏ­úZ´ůk2˜—,]áÂJВÔ9/ŃŢDB[nwđ9/*++Űc‚÷r+űŁé€QCÄł"""""""Ş=˜c¨`YÜń“đŹ:P%mm tnîÁŕ.Šđ¸ ř~ź?łzá“6—öW†e"^ÄGfŰ\`ȁ%Xą5 ö!#ŐŔ_úĽ ;5q8(TL͘ ¨ ˇiĄŚÇ¨ôŕWiii…ö†şmŽ3ŒĽ'Š~——‡’’ľœ,ŻĐôźzŔJž/((¨P1!??………ÂS˛>y^?ŽWŮ+Z+šhm9ăФ•Qqqąj¤ç•÷ٚSć“}Ýźyłš_o#Úä\ΚÝX8çş"÷ŮÉyźj[dđ-VřO~dżäw"™uaűöíŘąc‡:ŚDDDDő]jjŞş•s9Wöű÷Œöár~ŤĎŃäü6%%DDDD •DDDDDDDDI3)R†L¨ÂfÁ –Ž[f•‚b† d§8š_:Öě°°tłůĹź1ľ›ňĘ0¨KÚ75UËË`öÇ…żÔÚQ\fáˇ^|4ťŤˇůáęF”‰~ídŕÉĽ6lqÚRޝ î¨Ç#ŐĚŹPęŹć*W­Zľ ˖-SMC‡­PŠ*Z H‚@żýöÖŽ]‹ŒŒŒpKiŮŮŮčĐĄrssÁ¨… bɒ%8ŕ€ĐącGľŽŸ~ú 7ĆŔí÷ĺQƒoÓŚMSa´N8!je3u„cĆâIôşŢ†ÜĘqXźxąz˝{÷Ž.Óë’}œ7ožzOđ’÷Сoߨ-†‚­M_3í}:ĂtÎ[=M˜0™™™8účŁŐąŻ VœvĄňœ„Ĺ&Mš„ž={Şăo=›6mŒ3THO~oŽ:ę(äää 6öŮů;ĚPDDDT›ŇÓÓÔš™ďĺ ušÝŘÝd?d„„ËtŽçFDDDÔ1`FDDDDDDDU`TČaĽ¸ {pǀĎĘlĺY­`%béPhŹs .–‰Ç`Gą…mE>|4ǟ–Сľ ;yĐŠŠÓ ”ř lĚ÷cöę2ĚZíĹĘ->”T0,#ĹÄéÓqDŻt,Şö™˝ń+ …ށŮ3Ľ§ę(ÜŽÓUË$ŕ#a)Š&&aĽaƅŢ{ĺęaÎe%”ś~ýz´mŰV PÉsśZ°`ZßđáĂŃŠS§ŕ{°לmŰn/)ë’ÇҖÇţ‘ĺĽŇ™3PU^ÎĐÚ̙3Őű’Ŕ›ěVVV…ye Q͝;W˝6bÄ4jÔH­C*™7N…Ťző꼓Ý˙ŞžO ­I@KBz{BŰ%˝˙RcëÖ­ +˜Éŕć˘E‹THń°ĂCłfÍÔď_M’ß7ů}”ŸŐȑ#Őď)P‰ˆˆ¨śšÝ.už(U]ƒUz󑑑~}wœčsmM.ŠŤ ˆˆˆˆv̈ˆˆˆˆˆˆh—dxLäyĺĘ}Ž`ů0řˆ[ĚeÝZşđěŮٸëł,Ţ@ąßŔšmĹXť řöĎ`3] -`˙ᡝ]RŮ)¸ÎœLgČŔQ˝Ó‘bĂá•V9fƒK–ŠVš–¤ÔŕXÔΝ;ńý÷ßcÝşuŞŞ˜ 0ÉýdČ ˜„w¤ęÁ_ţň—p{ynŊ˜8q"žřâ \xá…*4Ôż5Ő¤hmwŐƍUxLŞiIxKŽQdŔLś+ĎK O‚QRŠÍŮFtÆ *t×ЂLÎśžťrÜĺwD˙ţHMŽ_—.]ŞĆK–ě§ĺgâ|Ž!3"""Şmr>)狪—‹:vîĚGŁFŮęo“‹;tő2Ůvä9.QCÀí’t‰"Ӏ×oŔRa—ňJeąX0á6-Ő˘ňćc3ńůÜ2Ě\éÆ~ř­`;̀üĎ/62°cĎŻG&g¸Đł• Ç~mS`ÚŻů\fÁjd&ʛtFç2MdHşĚ Ŕ2*śýŹ. ÝH•Ž#Ž8ÝşuĂÔŠS“^VT鰐&AŤÎ;ŤŞTR LÚMöë×OUK6Šś•––†šR“A!y/˗/W~ÇsŒjó(a9 ‹9I;Ç-[ś¨ů¤*…Gië(‡;věUŠČSUĐ$\'ďY“ă á4ܓpžź–ž^^ÍB* Éë˛>Yż„ÝäxľlŮ2nŔKWU“őË}Y^ÖíŹĚ&9Š'ű$óJĽąV­Z…[#Éveżĺ8Č6›4i:ép,/ËĘŕŠTŔHD~×$P&ƒ™2¨)÷uŐ<9†˛ŽŚM›†ŰIÉą,** ďT‰ÓČô੮Œ'ÇMČ~ČűÖ됟>&z5ý;HDDDIÎ=ÜnS'Éy—óž”ŞdV[•Ăbľ˜—s% Ýëçĺź*™îDDDDőfDDDDDDD´K\öXKfş y…~•, XP'Í8ƒ,ĄędrÓ,ˍłrahזlLÁü~ŹÚćÇĆ}ÂUăägđÓO?Š€UóćÍŐüňœ´÷”™,+­$uřM‚Zňs0`€ Ť yż‹/Ü9sÔĎUuޓ֖tZˆV5CTĺ¸ÉíÁŹÂeżýö›:ć˛ÍŻżţZí—ü>JˆlöěŮje~ŮŽlG~˛?şŚ´ŕ”ůdŸäž Ôz<tďŢ]…ĺgöÍ7߄[u~űíˇj=ŇVŢQm“0™„ťäźIÎą íóˇ:gŠ+rn*ç[úÜ]ÎA“š8€ˆˆˆ¨žcŔŒˆˆˆˆˆˆˆv‰Œ­¤ťMxS€â2 –”ł ÄĎ<…Ňeęnö¸ş6wĄ{ ŽěmĄÔg!`YŞ5ŚĚĺ6\HqjˇK––˙YŞF™aBá°PhɊ_=ŔeŻ'#ՄË0BA¸ŕ{ŘURš@ŤNŔ,H“ ‘ `Ém°-ĐN5ŔUá2Ý QîœĂD˛Ű“ŕ—L@’A?iÝ8ţ|ŹZľJ…ź4Šř&2 ‚ÉźŹ’÷)¨=zŕóĎ?GďŢ˝ąĎ>ű„+eIő°qăĆŠŕ×đáĂU(KÂhÓ§OW•˝N:é$ˆŇUĐf͚ĽÂgÇw\¸š™٢‘Ş´’P•T“ęjć’ lƒęt˛nŠN&ےI‚Z˛ß˛n rIřLöé裏Vű,a8 €Érň%ź%9Šr'ÇćČ#TÁD Ŕýřăj??ü𨭖äwAÖżtéRő>%Ř(ےă+-Z%ô5tčPőţ$'ďĺ—_~QÇSZĘërźýőW5„ĺç=oŢ<ő\Ϟ=UŔMöUÂorěä8÷ęŐ §œr ćΝŤ‚}'žx˘Zż¨Ő6—KޘeŮçk;Ôůœœ‡ĺçťěóŐÚ­ ŚĎƒŰËWç˜r>'ŰÔŐ^‰ˆˆˆ:̈ˆˆˆˆˆˆh—™ö˜KZЉbŻTsÁňKŔ*vą BŐĆLWpvŰ€Ç<˛˙oŻWÚö*hš9´N™t;Ixr„Ö ç1B"tß}÷U-.%äŚ×-Á:9śň~ôĎC‚jňœÜ—[ن9Ę}ŮîžX=ˆˆˆgkóĚĚ ”––…ŰvççŘç;~užW›A/ •É2ÓäœIˇG'"""jč0#""""""˘]˘†{, Ĺ´YR ä—HĽąPdKމ9aá%ŒčžB3Ő22‡T1‹ýŠ 9YŽ@›ŒŮűad_*Źfş]hœáŒ›EŢŮ5:U]â‘“ ŽÉ€™ `IU+ IŰȖ-[†ĂgľEZIJ›D˝ ŠvŐącG¸ńޟ~MBM˛\—.]Ô ›ŹKŞ{IťLŠđ%!* ]ŢĂgŃś%•ĂdyyMÚ?J{MMށÉsRÝKτš’ —É@ĄTXs†č$T&ĎKčK‚X˛ďňşŜŢ$ (2Żʤú™ú´ßż„Čäç+ÇW_J“íčŕ˜´ž”edđR括‚'ƒ¨.“ß ü%ۖRmBÖ)ű/ۑíÉc Äéă,19Fňű'UÚ$Đ'ďOˇ$­Íß9"""˘dčs9ŠX&÷uČŹ¨¨ÄžÝŽ.fHMMŠ‘źžpBnĺüIŞëp™œĘšm´jłDDDD fDDDDDDD´kt§KűVZOú–PŢ#Ó ˝nŞűÁ JmW=2ÂŐÍ\F°ŚËžÓ(}ĎŽś$ĄŠrĺ –XSƒW*“ŞRrŞ >’Ö˜š$˜$’Ź“–ü’°—´–Ôƒs¸’ő-[ś,nŔ, EÉq’}”6™:ř$ېçdŕO‚^N˛Îůâ‘c­íŁޤâ—e dIľ2˝nŮś„ÄdűzßtŐ5“P!Ż-\¸PM˛NYNŽÔ˘Uߐ`žü$¤':’%۔6™ŇšTöOŽ‘L˛MÝrTHR ďIő4ůůH¸LZoJ57]9ˆˆˆhO`š†j•)Ÿ-ňňtČŹŘ>ßň"++S…żj˘ČŞ>w“ó3ţ×á2 łŐf[N"""˘= fDDDDDDD´Ë‚WřCľľĚÉpĂo?WRę ˇž´,–=$ƒAuQ IŐLłÇ€$\&cAűœt){ř7!„şŕ‚ ÔmMK6&A* II–‘•„šŞR bÌjŔMZ9ʤßôŔÜňĺËąĎ>ű„[EV…ŢŮ/i‘MäńÓ­2“ůݓy"Ť‡ €9ˇŻď;u;ŠLŚ+‡é€™„Ćd˝2 )Űřý÷ßUE2ŠÖ§Ou+ÇC*żÍ›7ŻŇöe`S*—Mž<łfÍR-?ýLd{&LPá4И&!2َŸ™3gV¨ţ&Ą:Yż´Ň”Đ›„ĚćĎŸŻŞÁI3Y–ˆˆˆhOá˛?x4j”ŁÎľ$d&ç=ržś}űŠ*łé錯^;y9Ö-ÄőĹr>'UË$\ć\§l{W+íé0#""""""˘]U'ƒJuI+Ęě —jKYę i3 šYÁ°—Ě[Űł`í2 {<öŕSvşŠę[ş¨žVť’¸ŇAŠŞVVhÓŚ †ŞBIRéŞk׎UŞ`%Őť¤Z–´Ç”˜nMŠĂ]Ş’uK¸IˇˆŹ BI•1Y§Tw“ ™ŚŰ>ę pNşÍQ"ŇIuřM–‘ęc[ˇnUےEç:ĺë÷ Á<˝miŃéܞ xJu¸ôôtUILŞĄÉý3Ď<łÂĎH]ŃH`MBy˛ŇĆR‚€ýű÷űó•ŠqëÖ­CëÖ­qňÉ'‡ç•cä<îşM§źy˛^™äg9věX” zňţœA=˘Ńî˘ĎCrr˛ŐE,yyáó29w“ó ŐgdČůYŠ}ç _tŕä<Ÿ“sI9OsVĚŐۑuIP_Îß"%{!Q}ƀí˘PČÄ*żďśb2Ó<ö#?J-ż=ŕbJí,?ę*ŕ%A7Šl •ËT¸Ź‡adĐKBL2¸%“„Ą$ÜĽȢľ]ŒFćëۡ/şwďŽŰd­*A"Š~%óK I–uťäţ~űí§Ú€nذíۡ’ĺ$°ĽŰRĘňR5BosçÎU•žd_eyŇŢQŚC9ššš¨ ZÉ:$Ŕ%ű/‹˛żŇžRޓÜ"Ăjşb…,#ŐŢVŽ\ŠBt=zôPĎËžIĹ2yţ裏‡îä˝ËúSSSŐ:׎]Ť–‹Fś+ËIČlŰśm˜2eŠ |I ËxÇO‡űdôŕ§Ľ˛œĂé÷(ۗP  ž ŮÉž9×§}rœdűÉ÷ˆˆˆˆjš>ϑóC9.,,‡ćuĐLÂůÁśćŚş0“ó$™d9]ÉVŸGéŞer.ćź°A/ŤĎƒx>DDDD fDDDDDDD´k,˛V¤Ś}_†mÜöýô4űŤÅŇ{°&ôzuŞjUÓíBŁt#ÔÓRąśÚŹ+ Ą9sć¨ű2%U$¸óů矇œ¤Ą´HŹi2¸%Őź¤ĽĄ´D<đŔUŐŞ&Mš¨JYŸ}ö™zNÚ$&C~>Ş*yßRíJâ¤:™ŚnrdpNöMÂVýúő‹ZšvúóĎ?‘ŸŸŻZIJe´Şă-ŐĐVŹXĄZ IŐ1ZkŢź9ŞKöGśő駟ŞjnRĹKހɠĽTv“ĹČ6HÎʲorĚ'NœˆĹ‹Ť÷+ż RąMÚLĘúĺ}I…3™ďƒ>P?—źź<ľŮćš5k*í—Ŕ”Đ×°aĂT@ě×_UÇGŽg4xkŐŞ•ÚůßŮyrĚ$4'ä=ÉŔŠż/žřBc!m2ĺg*Uě$h&ۗůäžĚ×­[7őžä÷Œˆˆˆhw‘s9“đ|VV†ŞfŚ/PrîVVćKz}Îv˜şzŽŢN´yőyCfDDDԐ1`FDDDDDD´2 ‚ŮĂ!0CϨĂ2Œň4V˘q’Đëz9>zż‰ˆˆˆöDúóźœ/Ęä ™é0żn-ŻoŁľŃť#HVZZ†üüxsšd˙Ě ű§ĎqrŁÝE~÷äWňËńÓěĎięâőYÔţť¤>ƒş=0Ěŕď­Ë VľÖ…óVć2"ŽbÓżßúâžhżďü;@TżJ׍‹LÓÓ3n]ůŢ99Őçżç))ž!ö|=šşőGLVč6ŕ˜,Çm䄏ăÝFޏ”°ń+˜텂y.ýĹŹăK[çW 5ő˝T&“°Š đ¤™HK1Pě  ´,ż?Ř:ÓRUÍě/”­@… 랑Ą9ç:ő~'ZŃîŕ<'ŇçA‘­ŮőšY´@™łí%ƒ+DDDD ˜íb…BŒđ5ÄQE)`K’›F^"+DŠkˆ]‘ƒ{NŐ­ęĽéß!gOĘôśŁ 0V•sťÎ [äkľ-Z`oWDž‡Č["""˘=I˘s}nëÜOžwśRç9íí0#""""""ÚŠń Ö¸ęYK̈mV|(--S=nHĆ'ŕ 8 9–jO Kˇą•ľ¸TĽ2ˇŰžě]vť ¸ +ÔŢ3ŘZSćS 3ĄNőp Č9x-ĐÓP¸ęâýÄ ~% öŐÔ6ëJmoswśˆ""""Ч*ç)‘íҝË2HODDDTfDDDDDDD{Њ-1+ŚĚj2s.˘¤Z[†m*V˛`ÚO˜n 9á jފa+y6´Sĺűćhm¨ç1‚ső0]Ůś1rĐkočÚAłhí9cUţŞoÇžŚ÷7Ú1âŔ+í)"/Ôp>—h™hŐo4#"""*ǀQƒć‡—Ąj‰ů-űOC*—1Cd5Ý^2<ă˜Š°až˛"–Ť ÓËTÜgŁňvę)\՝h!>Y˝‚*â1!""˘ú *ç,ąÎý"/öŘÝxFDDDť› """""""j°d Â岐⒯*V( ĽřŁ/‡Ýaď4‘ÁŤ€ô ­UnˇZ9HŚëůœ‰ˆˆˆ¨as^tëőÝŠâ9+ˆˆˆˆv̈ˆˆˆˆˆˆ4 —h”řěÁ WhTÂoÉ`Eô Ž[ě2xeš•żŞ‰Š˘ä%ŞV朇á2""""ÚSřýĺń<•ˆˆˆv'̈ˆˆˆˆˆˆ8ðŰȨpĹťĎ/!3ç+öTZ…rPŠÚ˘ľ7Š|ĚŃŢĹYĺvO#ű%3~ ""˘=fDDDDDDD ˜Œ•¤¸€NÍÜpŽ›ř|řö†ŤÂü ŘěNúř;şř3Šz`.^ËQŢí]öÄ śúŐg*™@U] W3“[y,öäęDDDDT÷vךĄóü_ÎUőgžŤŃîĀQƒfÂ4\čÖƒv]ÁŞeś2Ÿ„i"f†üß ß§şĺ0ŠU]‹!¨]' œá=]‚A>""""‘Ő„w×ůaY™WÝ:ĎWŁU[c^"""Ş ˜ý?{÷ŘF}=püÉ{$NâěHXaS ěMŘJËężeľě=ËŢ+ŹB){•˝G؛@3Ź Ů;qâ=ő×ű9'˙t>mɖäď§=$Ngَuď~żwď9-OÚË*•ň‡• ¤ _×ů¤ŚI[Ž´‰{h€ÔšîcO …›$ĘÄ>š„Ÿ/œ˜Đ^şŠ“ĐÖŘŘlĚňňň;U6vż'.]3rœśÄÔ6™cÖ*”ŇB1­1ŤۤŠ90)á×jNے[]ËI,ÓÄąś6żÔ××Kkkk°ŠąűÖŃţXҎ3r™Ió›I‡u‡Č>IqHm˝_š[˜‰€î`ˇátŞ’ľľľIssłI.ËĎĎśtwÚd*ť˛šž6/Ť„@ú‘`@óůtÂ!0ŕÓ\3żüy“bůĂJů˛źĄM[š+[%ô’w&' ÝÜ­/USS“ÔŐՅ´Át’˾ŤĹ;č $˜ă4š,/ĎoÚ_ö*9nťRÜ[d޲iim ĚH´‰V9Ń[&' Ýě fZšŹąąQjkkƒ­1uqޘ)ťŠ™ÝRÓOLĐH0 GŮW˛çţWď3ËJ}}rŘfERYć—ůU ‰Œ6ńˇ1)]Ĺi‰Š bZšŹŚŚĆÜw’Ęě*fö­Wĺ3€t+“‚ž|Ńęd~-P¸Í÷ľĘ†Có“yćęx˝Jžš¨HŠ‹‹¤  O˜§€ôŇÂc­­ZšŹIDŤIçç˜ó8­VډfĘŠdÖń:żyžĘe +‘`@sZŚ8Wş;Εň:Qá´ciii‘‚‚))) nËUń:zţĽç^šXÖŇŇržfŸˇ9çnÎ:Ż„2ťU&@:‘`@ł'"t‚B'3œ–+Ęžú]Ť™éD‡^=݉f………fqślˆƒ“Śç[Ú S/îiżč'´:™snć,î‹~ÜIfá’Îҁ3z{RÂ^t’C“ĝhć,őőőÁ @|ěÄąöÇú_Ÿx'–ŮÉefˉdNĽ2çÜĚ>ÇH7ĚČq^Őʔ=aá$™9Ű ^UO‚$ĆžČG9ç_N3ť-Śs_×{‡Ů-3i ş fô î+Ţó\}/;_ ßQ˝Œ$3ˆťŇ˜ÝÓNr—pÚ_ÚëI.™†ł,xę} 45¸Ę+YĚI(ózÎI8 uâ:ˇ‰FfËd¤HýŘU~`@6ńjiˇĆ ‡Şf€\`çşDˋAf!Á,Äóâl›—G d“T&Šéź!ń€lâäş$’'ƒîE‚Y–ÉËk˙•ĺűÚ€d0 Ťäçľçş8š/ČüƲŒţ‘éŕ[[ł'ąLݜ§Í t?çâŸx.â|mÚZ›ÍąŽłěĂo,…ë3k˙‘57Ö ‰ ą ş†sţ•Žó0ÎíŮÄÉuqŠ+…ˏAć!Á,Ăš˙pÚ˙ČtÍ RX 2”3yn€ž˘¨ =×E‡î f#3 fYŔý‡”Ÿ_`Ö侀ěG52@.ËĎk1š.šób#š,;`–%œň€z›ŸŸoÖŐ×-ŮKçI.ä:'ÇEs^ěd~SĚ]*×yŹ`ş´ś4KiQ›`ăŞ?ČlNBÉe€ž@s[4ÇĹÉw —ƒĚE‚Y†ˆô‡âő‡UPĐŢ&łąžJ°19™EĎÓźÎŐ8ôšŰbçş8˘%–‘t–9H0ËP^$v3ýŁÓŰćć)-j™%\bY*&ĚŠöČšÓ˘š-vŽK¸cÇľĚE‚Y†ł˙¨œűÎRXXhnŤ—Í—Â ,g ëšç÷čI4—EsZě÷q‘cdv Á,K¸˙ČtÉĎĎ–ôˇĐ*ŕ͜7&Ńv…–-⼚,NkLÍqńĘ}Av Á,ƒ¸˙pělM{Ó&ÓÉđĚĎϓ†úZ).hÜMł[šd™%\űM2ć°h.‹ć´8ŐËźÚczĺĆx=F÷"Á,Kxeqv´Ę,2™žľŐ‹LďZRŤÄKsW4‡EsY4§%RÎ ˛ f&ž*fú‡¨Ůííٞڻ–$3@*1Ř šł˘š+]ů:r[¨^–˝H0Ë"^™œNů@w’YqAƒ]AsUÜÉeî֘T/ËN$˜e;cӝXćÜ×E˙8‹ŠŠĚýÚęĹR URX @ZhnŠć¨hފćŹhîŠć°8ů,^š.᪗!3‘~”ôÇď÷G|ÎůĂs+((0Ď577KC}m`ŰŠč;Dę›řU u´%ćňŞy!Ý÷œś˜î%–¤2Î2YGʝdf?Ö?şśśś°IfÎúŚŚ&imm5ĺ K¤¤ŹŸÔ7Q´‰+-j“†şĽR]ß`rT4ŠĚéşgwăs'—Ůy.îd2’Ë2 fY$–$3}ŹëUqqą´´´˜ĽššAš—Í•źü)ďŐ_ZÚ ¤šE0ěÁ›pUľł…f)ý>œsdÉ1­0óZ¤śfąTס'čXœvŰs:îŮ eń$—!ł‘`–ÁźZeFK2sÚg:÷ŇƒÚ2SˇmkkŻhŚ´ŞYQIŻŔk ĽŐŻűňIk›_˛|;+–ÁÝFŤfëEMÎ ’JEršîWߏžÓĆK_×ŘŘRŠß១lO ŇI‡óó4Ĺ/ů>Í5i–چŠŻoXńź/8öŚăpN™łŢšOr g™-Öߎ/Ćç|1ÜúÂzZrYQQáցMĐYžâśŐľřWÜśY‹ßşu/ćq¤[÷}ˇ¨IAT0ËŃ*™š˙˜í¤0g;'ŃĚÉUşÎš*\˙­8_Њćě#Ď2[´$.wîIű:ó_óŘîŕ•XćőŘ˝_*—e/̲„WÂW¸$3çŐŽ^ćvĽ3{r—WމWr˜HćŢÖn‰Šš×cd6̲Œťš™;ńĚyŢţcv’ĘÜŻwZdz%”ŮëěVšČN~‰ŠTyĚŤíĽ;Ů,Ükm$—e̲P<-3•ó‡lW(ÓĹŠ^f'•y%›Ům7Â%ƒEjséŽpkŐ˛pëůH0ËRáZfÚëÂýĄşĘźöe?€Üĺn‰éŹózžÄ˛ž‡ł,ޚ™r'šé­śť´Gjéţ㎔lF"@f‰”ŘîšXZ]Úm5cݲ f9 \2Żőîv™^^IgöóČ‘’ÉěőńT'#Ď$w`–CźŞ™9ë•;Y̽ލrYŹěT0Č,É$y…ké~>Ţç}H0Ë1᪙Ez.Ü‚;ń,–Ż €ě-‘,Üöń>‡ěE‚YŽ WÍĚyÎmťhüT/ČLÉ&}Ľ"ń ٍłК™×vŽxĆř€Č ń恐7’űH0ëbM4sooŁJ@nI&9ŒÄ˛žƒł$ŢD3Ż× ç"‡¤ç!Áʞ˙ĐŠL€HH*ëŮH0ëáÜ$œôl$”ÁF‚BDű€  ť‘@†x`†¸đôy€̞H0x"Á ŕ‰3€'̞H0x"Á ŕ‰3€'̞H0x"Á ŕ‰3€'̞H0x*@FńűýšČçó €ěB‚t1ČôTŃ>˙H@2 fF$“@ěź>3I:ş fDŃÖÖ&---fimm5…¤€—DŽSô4‰$Ž‘l Qz>‘——\ňóóĽ  Ŕ,ú„G‚šššĚŇÜÜl’Ęˆ&R‚XŹÉc$™č)tb'–ϧ˝Íř|j:˙ĐŇŇbÍČe$˜r–SŞZ[ëŤp‰evëKçąV+ëÓ§iƒ čš(Ö^-˛\eٲeŚŞ™SýLoľĹŚýXQÍ @:č…/zŇťwoŞŮr f€œ¤'s˗/7ˇÄĘN.óŞXć$–iŲ~ýúIi)- ;i‚oIÉ ŠŻoĽK—+š9“:^ͨf ŐôBw˝řĽ˘˘Bňóó€\C‚ çh9jM.s&“ˆĆXڜd2;ŃLo  }úT shÂoiéĐŔ„ÎrY´hQp˝“XڟßNҙ>ښ€TÓ Ţ$ł‚Śáš…# §8•ËH.ÄĘn}ŠěŞev’Yqqą 8@ŠŠŠ™4X“Í.\$ćsÜŠhfW3SN˘IfREĎ;tŽ˘OŸ>T2äš@r†sâFr Nâ˜s_9 ezŤIËÎ}˝ňtřđa$—@ĐĎjýĚÖĎnçs]?ÓíĎxeěJ– ć*šˆ3@Î¨ŽŽ6GDăn‰éŽVf'!ôď_)ô@vŃĎný ˇ?Ó˝>ó$™HŤĐ9 r f€œPSS#ÍÍÍ@4^ÉevÂAGŇA› 8Púöí+€ě¤ŸáúYޟé?çý$™HłĐš rAĺĚ@$䲎ǚ\6H**z ť9Ÿĺ .çZKýĚĎË ˝îŇçó™[çxá<€DéÜEAA”””ٌ f€ŹŚeŚšťj;šŹ˙ţ$—@ŃĎtýlw*™9‰ĹĘ]Ĺ RIç0t.€lF‚ ŤŐÖÖ Ń¸œ¤çžóź&TTôĄ-&ä ýl×ĎxýŹWv’™˛ď;Ď‹ š€p˜Ëd;ĚYŤąąQššš€HÂ%—Ům1ŰסJqq‰ 8@šI?ăőł^?óUçcIf€řéřcT€Hô8Ąsd+ĚY‹+~фK čh‡éˇ’ D (€Üڟőú™ÚŮń˜ÉbNÍH0dĽşşşNŐˆĆ>v„&—ůMU›˘˘"ä6ýŹ×Ď|ű`'‘qž ô\Cç6ČF$˜˛R}}˝IŹ­1k¤¤¤Dúôé#€žA?óőł_ŠV™şs€lE‚ ëč <€d¸[cöďß_=‹~öť[e@:éyIf€lD‚ ë444‘ÄR˝ĚYĘËËĽ´´D=‹~öë1Ŕ>&PĹ @ş1ÇČF$˜˛JSS“´śś ‰°+ÔřýíIýúő@ϤǀöcCG"2‰dŇIç8tŽ€lB‚ Ť466 ‘¸:ĘüŽE¤ŹŹLJJ¨^=•ôX Ç÷qB…;Ś@2˜ëdĚY…“. ëMúł|úégR[[+@6r'˜Ů÷űôŠ@ĎŚÇŻc„sRš@ś)˛%فŽw×]÷ʋ/ždîWVö“[nšI$@ڊV˝Źc_|>Ÿ”——  gÓcôŘ Ç˝ď7œűíϡs?€DčœGQQ‘ H0d Ě‹ƒ>L–/Ż–düß˙n–ž`ěŘĺ˝÷>>Ţa‡íĺüóĎ5÷ëęę䥗ĆŸ[˛dŠźţúrä‘ [x%œ9í1+*z“ €˜UWWËN;íq0 ż >\ÌŮQvß}×ŔżłžU%ďÜsĎ9ŽěłĎ^rŮe ÉôX Ç„öŇOB2ZMMüéO‡†Ź+,,’ťîş=püöuőőőrŕYwâ‰ÇË~űí#€Žăő9~ůĺ—Č[lńuÇw˘LŸ>#řř ƒţ(˙řÇŃҝ")ĺş9sćĘŃG˙#dÝ˝÷Ţ%+Żź’ń Á Mh‘ ČÍÍÍ ëčŕFYYiČşĘĘJ˛QGbY{ő2˝ĽzRM†u˘á‹/ž”믿QţřǃĺĂ?™O ö1ÂŽ| dşćć&šíśŰ€\ÓÚÚ*{ěąOČňĺ—_ +˜ódĚYĄ­­Í (č:rÁ˙4•4Ńl=v—˝÷ŢS€LK{L‡WJKKH§ŞŞerÖYçÉGM™M zl°unŻúIžýö;yë­ˇŮCç<Üç!d*Zd˛BKK‹ąŘkŻ=ĽĄĄąÓúéÓ—Żżţ6řXŰíż˙~žűX{íQ‚vŁGo"÷ߏšŔnŠ‰yy\oƒälżýśŚŚŇAáŋ›ęevŤfý7wÉ%—˸qĎKďŢ˝@fŇc‚´ĄW›L Ü{ďýŚĹZŸ>}ŮAç>h“ Č$˜˛ fˆŐ‘GţÍsýoźŐ)Áěřă˙!ÉĐŤËtň1??_dwŐçś˝zY‰É:đŔýeťíś Y×ĐĐ W\qľźőÖ;ÁuŐŐ5ňÚkoČ!‡üYĐu4QˆAzÄC ú7Źą}ěи‘„3d=ŢÜu×=rŢyç˛ f€lA‚ +Đ]í÷ß§Ëńǟ|ŹU-^{mœüöŰoňß˙>"?ţ8ŮT¨9唓:ľüé§ŠňúëoĘ˙ţ÷?Y¸pą™ŹŹě'돳śěźóN˛Ůf›z~ÍŤŽşF&L˜||Úi§Čž{î.“'O–§Ÿ~V~řa˛Ô××öU)mô9č e•UV–HfϞ#/˝4NžúękY°`‘””ËúëŻ+‡v¨ŹšćÍÁR‰çŹłN—]wÝ%ěóZíL[jžűîűňꍯ›Ÿ—&ó 2XśŢz+ůăˆXÁGˇ8ńÓŔk_5żƒšš::t°ě¸ăöň§?d&v÷Ý÷Ŕ×ÜvŰ-2jԚDŇŃĘŹýś¸¸X€t())‘Ë.ťX>˙ü Ó"Ó1qâ'ž fšĽŸ™Żżţ†Ě˜13pÜXdÚÖĎÂÇXć̙kŞŘ|úégć= Đ_Ö]wóő7ŮdcĎ}íźóî˛lŮňŕăK/˝(đyťw§í.ťěJyĺ•ׂwŘa;šéŚą’ýŢ5|üřÇş)ć˝ęçźžßőÖ[7pźŮ9đůżƒgRĎšçž/ď˝÷Ađń '+Gu„<účăăŢËćřWQŃ[Ţzë5bŐqlĐcIeČ0Çőţűăe—]ĆČčŃŁ%ńžÓčó‡ö×ŔgyUpVŒÖĎgŰüů äˆ#Ž>Öżą§žz,đ™]˛ÝĽ—^.Ÿ}öEđńˆŤČÝwß!oî1ĽŘß\Xůż˙}řœ}&đšţ“466Ë A盘óŒaÆFÜg˛cJŽćććŔńéůä“OĺçŸ œwT›Ď=ŽŹľÖ(SZnjě¸KĎÎ8ălĎý]tŃeÖ÷}Yŕź)ô˜äŒ-˝˙ţűćxŚç………ď} üáĘ^{í8Ç)‘čXô|8_ySfΜ%ľľuŸ×3fÇŔŘց¤s€lA‚ +čŔĐÝŚMűMÎ:ë\“äĺEŻ6ť÷ŢĚŕ›ŰüůóÍňÁăeĂ 7óĎ?Wúőë'‘čţ>ţx˘\}őu!şŸ7ß|ËěK÷łĺ–[xž^'ŢošĺśŔ@^Sp]SSŁdűüó/ĺ’K.”TÓ÷|÷Ý÷É /ź˛~úôfŃ÷tíľWybęĎőúëoO?ýżtéRIĽ÷Ţ{żSr™M'¤4‰Ě=yŤĆŽ˝ąSr™M%ďšç>âŃ9Q ýÖkHĽhI':YqĚ1ÇuJ.óňČ#&ń/Šş]MM\xá%!Éenš°öĐCKwúíˇßĺ„NńL.sÓ¤ƒÓO?ŰT=ˆä믿!š IsŽ î0Ĺ+n2ɨQŁL—Ccn˝@#ɜÓląĹć!Űh5c÷ůÓwß}ßi_ß˙cČc˝ŔÄ},sď™~ß~űaăMťîşąć¡T)éçš+ź’ËÜôâšK.š"jÜIuuľœvڙ’ËÜôg2nÜËrË-ˇz>ç•\fÓýëy*Ě}˛ł*€ŹŔIş›ţüúëoMe‹Í6-Ç—††2dy^Ż~´“Ł4ą@Kîoťí6R\\dÚ[>ůäSڤžŇŤu‚˙ďű55QK+ĚěžűnćJÎ%K–˜j‹u$”éţôŞÓżüĺ°ŕ:-ŤŽW™şľÍV[miޛśjÓĘ9ú=Ľ’ś]Жd{îšGŕg3Ä &j+5{PRĹ4a`ƒ ÖŽ›0ácůä“ĎBöUXX$ťíśłi‡3k–V˛y[Ţ~ű]âáüčß°ŢwÇR H”N¸|űmh…měĐÉxMÓ‘MlŮoż}L‚Ŕ˛eËǀ—LŤ`‡VxţůM•špœdľ-ˇÜ\ţô§?š–Ä“&}e’ ô˜ĺ¸ďžÍąE[w‡›nş%$!A[ă{ěßMľ2MD?ţِ =nč÷żűݧs ÖÖŃZŮSŤöh"6çŘŕ/ôŘĄë¨T†L§ŸŠGő79ăŒs‚ëô\b̘eőŐW‹y?ɞӌ˝ą9_r’ôoH+‘˝IpŸ^“ţß:‰ďNvčÝť—iő ˆžč縞ch|ÜÖÖˆł'„TšÔçć›˙8?¸;ë¤rLéîťď I4îŰˇŻŠ¨Źc\z~˘ă@Ď=÷|đů_ýU>ţřŮqÇíeäȁó†ąćýœ{îů!ű=ôЃƒ­šuĚČqŰm˙ If+++•CůsŕŢwß˝ĺ˙8Á$8´4ż`ŚWšjŐŰÎ;ď$gŸ}fpŔPtŔPÎRŠWŻňŔ€ŢżB)śŢzK9眆l§ v‚ŮŤŻžňź&—éĎZ0{챛ůůŮI@"H@:éČŘąZ]rIČzťą&ť+—]sÍ2fĚNÁÇt {ě‰!-Â|đżrŕűGü÷ťýöŰʍ7^lŠ“úš¸uęŠgˇŃɕ7ŢxSŽ9ć(éjú÷ˇ×^{šĎwM ›9s–\wÝŐfÉĄíEľ‚Á—_N ŽÓăF¤3őç?8ޜŮíí?‘˝ôo‹ódŁşşz3Ńžíś[˄ Í:=çř׿n“[o˝9ŚĎĹTœÓ”––Ž9ë†$č…%N‚Ů‚ ;§¨_~ůŐ$ čëŰ_:ążéŚŁůl€hźŻă?ŽM7ÝTúöí#Ď<ó\pśŚ×sŽőÖ[ן_š`fÓ¤;šLéUň§žzRČ:m)Š>‘œ|ň‰&áˇŢzŤę1ęƒ>”îŕTĂ9é¤ä†Ž“'Ÿ|4$šĚQRRň8ZűAƒ&˝Î IqŽ Lđ Ű44´Op˙ă—˘˘ŽĎϟţ%Řî2–ÖÍŠ8§Ů|óÍBśˇŤ‘ŮŐË´ŠŚV&SNĽłŽ×LŮÇ[l!€řôë××\œâvřá‡v š8ńÓŕýT)é6š˜vÔQGČĹ_(wÝu{Hr™˝›}Ae<Ţ{ďýÇ:žf'—9ößߐ÷­ÇJç\Cżö”)SBśßoż˝C’Ë”Ž îż˙~ĐÓPÁ FzeĽ—ß~ű-äąNĚ\wÝ žŰjľ1÷kwŘa;ĎmGŒXŮsý°aĄ-ÍěvJl뎝śg•´ňňrsŧ]!&YښĚ˰aCM‹3‡ýžç͛ßéŠTmQŕe›mś iŸÝIŻ´wˇÂtӉ•+ޏÔ$;~ţůçmśŮf+Ď×n˛ÉĆRVVŇNRŤźč•÷^´Ő¤{ňĂąŐV[˜*`Ž9sćH&ĐjjZÉěˇß~7•ôŚÉv˘ŠÖ2D[‹Ňú@OŐÚÚţ9xđ 9üđƒM´CŰ$ď¸ăŤ&ŤTÓlšĺ–r÷Ý÷ŸÓsőő3Ún9śŢz뙋Nœc“~ök2ô’%KB*çhâ°śŢÄgĂ 7ôŒ5šJŰŰçóçwŒ#ĽkLI’ľzńŒ3eá…˛`ÁsŒ˜:5ôÜ(ŃVîăŘŒ{р{MĎGúőëgÚkş_łĹ›{îC×?ńÄSГ`#w5‡ť š?>śĘ0˗/ű\AAA˜ő‘'ĐŤŞŞB48ěśZń%•½ˇpß‹ŞŞę\•ƝDç2dˆŠ@›LtMřşřâ dťíś ŽÓ6żŐŐ5!ۅűlÓIuMĐä+‡NƄ3`Ŕ€°Ďi+ŰňĺŐŇŇŇńó94É@'dŢź™lJ–V|’Eĺ2d+űßîŸţtůl>}†yŹ“č>ř°œyći&ŃŔŤŐ˜JŐ9ÍĐĄCdĽ•†ËŹYłÍăĆĆFsÓ*2vëËőÖ['pL[Lpp‹Ý Úź-9ĐYeeeŘçÜç K–tŒ#ĽzLiňä)ňâ‹ădâÄOR÷‡cWátÄ~Ť6ˇ^U“ÝçQëS;ž H0dM`™*™›é\sżŸHﯭ­ű˙ޚ›[:­ËĎ÷nqÖ]‰Č.ąüM’`†t(**2-Ĺ´őËÎ;‘]wÝ9ĺ“â‘ţ}‡KPšL–)üIšĺ–Ű<żM~Đ$­\ íj€ŽÄńš@ăĺÓO?EÎ<óÜŕżéwŢyW=ô`)++í”äěHĺ9Íć›o.łf˝|ŹIcz|œ=ťŁzćúëŻ/‹- >Ö*6úŮoW=nß×fšÄŤŞX}}CÔ×ŮUU^^äx¤ľľ%ćçěŘ&•cJ/źđ˘ÜsĎýaă~m5Пýîęc]­ŠŠŃÜz˝Ďpߢ•Ö/œ_˛3t€Ź <"MšÝŠ˙ĐŤB7Ůd#šćšŤ¤ťhY›ÝbĆÍnƒĐ]úöíÓiÝŇĽUž•x´e zLŃc Œ[nš!¤:Y,´ŇVŻ^ĺRSS\7wî\ĎmuŇBŰ´Ř ĽźśłŃ×xý۞5kVČ㊊Ţ“vľuĽ­D“ ­hóŻý;d˘f‹-6“˝÷ŢË´˘Ö–ĘúžĆŽ˝‰3t9Î7+ÖYgŔçęžňĘ+Ż™Çzlxâ‰'ĽŹŹm3|řđÇĽĽĽ!ýušxŃÉŻdL˜đqČŐţn¸Ü~ű­˛×^{ާ+“ŢjjjčjKŽ>úȐ¤1=477…Ý>•ç4š0\^^˛/;ql“M61ˇ………ăŔúÁő?üđcŕřók𹜐Öcä­T´ú꫅Ź{ë­ˇƒ­…˝<đŔC*fiŐßHž˙ţŠŽŽî´~ńâĹ&ń×f#ĽjLéóĎ?yϚü|őŐWĘÎ;ďd’Œ¸żśśVRaĈ!9o2dp§JRŸ|ň™çśáÖ‰`î-8b˛'YČdoź‘ôíŰ7řXŤ<ýô3śÓÖ1'žxŞw܉rÝu7ČSO=Ň&UśÜrs××m’;î¸;d`OďßyçÝÁ6ÝIŻ1"tBKŰ(TUU…ŹÓÁËçž{A€d8ƒĹMMŠoO Äj=v yŚz€\ľÓN;„<Ö*Žçœsž‰íŠŞZěškŽ7Ÿ6­ŠjD˘çwÝuOH1 Ҋa[nš…u?5cJZľŇcéšÁçŸ!‘xĹe^-EwÚiǐÇ_|1IžűÓvÍ|¸œvڙćÜIĎ{œŸ‡V…[{íľCś×j S§ţ˛î—_~5ŻR…š@ś E& +č5Štࠃ”űď0¸îᇓ™3gÉöŰog¨fϞ-Ď?˙’üţűďćůéÓg˜*3Úş&Őţđ‡ ÍŐţóću´*?ţC™3gŽlłÍVćńÇ’Q­ÇvŢyŒš"ץ“_§v–üéO”•VnUŸ{îůŔäŐb˘Ńh{ÝëůĆFŽ ;h‚™&kŮmk.źđů䓽ĚD‘&ŘžôŇËćXa;ę¨#˘&žhRŘ!‡üĹ_ôřóŐW_ˇNŮŚ¨¨HöÜsuÚÎ̞€Ń Šżţő(ŮvŰ­Ľ˙ţŚŞĚ?N6 îŞj6}ŢöÉ'ŸĘ /źdZ_j˘ŔŕÁƒCž×Š:ú˝ę$›ś Ň –7ß|k`˛ŠZ€ŽŚÇ†hc$Ÿ!›lťí6˛őÖ[ĘĉŸFÝ6Őç4›ožYŕř󑹯‰?ý4ŐÜ×s{MfslśŮfrç÷˜ű“'Oه› i{ř7Ţx+đy:=¸néŇ*šęŞkMeaM Ó¤3Ż1EŽ?ţؘĆJő"MňŐcž#ôŃĐJ‘jĺ•W’uÖéHŞJ՘ŇŔĄŐęőXôć›oŢËV&î× kwß}_ŘÖÍ=>őéÓ'¤ŠÚŁ>8gZfÎYvÝug“ =räˆŔ1eSůâ‹/Í6zěšđÂKĺÜß\¤ŁűŃDągŸ}Ţ$śé˘ÇŚőÖ[OöŰoŸŕž÷Üsˇă‘&ѝ}ö?_gŒŸŇŸç;ďźˆť˙‚Mäć>ق3@VpĘŚ™JĄžůć™4éëŕ:˝ÂÔ}•Šíä“O”^˝zIŞé Ä駟"çŸQH’ţŮ€ĹĹŲÁë›lÝíŔ÷7IÓŚuT˙?žüç?w†lˇéŚŁ3âý"ű¸ěę@WÓ$ŹŤŻžBŽ;î¤`…/mCöâ‹ăĚâe̘“#DÜŻNDi2˜N”<đŔĂnwěąÇ˜„/›~kĽłššŽ5úŢŢ{ďƒŕă^˝Ęĺ°Ă‘{ď} ěž×[o]yůĺWƒuÂčꍯ3_oܸçMĺ´ąc‹ƒ2ú5ŽźňłŘ´%ڌ3čJöąA$“!œxâńňő×ߚD…hRyNŁUĘt2ßÝŇmÝuבňňňŕc=>čb']+M°ĐsČEÚ"řĘ+/“3Î8ťS™~^kro8GůW“@^¸˘ Uznŕ$ůşéçôgœR=)UcJ[mľe`L§ŁĘ™VBťĺ–ŰĚbÓv™ZU,=ŚźýöťÁǚŕěŒiҗ~-uÖY§ËI'*‹/ ~M­´Š‹=֜zęI!ëvÝuóľţ÷żďƒëô{xőŐ×CśÓßU—‘*Ě}˛57Y“,d:€źě˛KdŻ˝öˆş­^ŠyöŮgĘÎ;ď$é˘WgžwŢ9AË"ĎçuđđĚ3O Ä­$™@W/ťěbY}őŐĂnŁWŁžzęÉÄÝŕ<Ö Lî O +édĚý÷ßÝ)ŃËË˙ýßáríľWEÝN?K5q­˛˛_ŘmŽ8âŻfqÓ™W\qŠ9FyŃXlěŘkM[ăH´Š&‡šiâŔ’%KLuýźt…ś&ĄyäßčJzLpŞó…;vŮhŔ€Śf,RyNŁĎÖZk­N뾲™ŰŚ›nÚiÝčŃ›ăä*Ť˙óŸŰąďö1mßżĽ\zéErČ!Ç´ýŕÁƒă>§…ť‹ŠŠĺ‚ Γu×]ˇÓsŠSŇăŔŮgŸ1îßjŤ-ßϟ%=ыiźhg‡žkÜzë͞ߓ›VVÖó›#V YŻÇÂK.š0b ŇľÖ%Ç˙R…š@śŕˆČ :pĄ­­­d*Ń¨}öŮ[ŢzëÓjlńâĹR[[kŽęׁˇŃŁ72­t -ÝvÜq{YsÍ5䥗ĆɤI_ɂ‹AEŚjŔĄ‡bZ Lž˙ü ó^ĘËËd“M6–cŽ9ĘL¤Ě›7?â××*>xŻÜ˙Cćë;Ű2Ř쯲˛Ň´ąY}őŐĚ×ъZľAÔuÝ>űěeŞŠš+éŚÇ=6\†\¤Ÿ­ďż˙ALą*ĎiśŘbÓNm/ľ}™Ű曏–qă^v­Ł=&€Ü§­Ď?˙\9찃eüřLťřE‹™ö%%Ĺ&v1b„lˇÝ6ćsQŤ†ĹCă{=Żxâ‰'MËű††ŚŔぁř~SYcôpR1ڤ__ß˙sĎ˝ ß~ű,Y˛4÷ç›s–]vŮYöÜs÷ŔšĐ{&Kß~ű­ňä“ĎČ_|aŢ‹Ň kŠŠŠ:m{ă×ÉW_}%ďźóžŠ”Ż?ÓććÖŔĎťˇŹąĆę˛ĺ–[šép‰Ě˝{÷6řhĽ}=OÓĘĘ+2(đsŮAţü烂•¨d鸌]E€Lë(™/Ćç|1Üú z.Ar ‘`ČJœ€âáN(ł×颕1ŤŞŞĐ3čgž~ö{U)s'œ@Ş0ˇČV$˜˛RYY™™ř ^N€“@ŕÜΞ=GšššŰôł^?óíc€snAR€tŃóŰ 13ČZĺĺĺ€-Z›Lw3˝oWŞ™3gŽr›~Öە-íä2wĽKűÖA€D0§Čf$˜˛Vqqą ą°ě–hvBśK[°`r“~Ć;­1ícwKL’ČńĐń)ƨ‘čqBç4ČV@Ó+~hg°iR€ßďďôŘžŐ¤‚śśśŕcť=Ú…‹¤  P*+ű w,Y˛Ô|ĆťŤW*Ş—’1hĐ@ Ş—˛ĚY-??_zőę%ÄÂI"s¸[¤9çΝ+˖-@nĐĎtýl÷šos+ :‡Ąsd3FĚYݤ¤Ä,8"UœqˇĹtˇĘtÖϚ5›$3ČúYޟé^‰e^ÇŐË$‹ů @Ž Á ô  ÂÂB špíМ¤;É@´Ľ ;ég¸“\f'˜9UƾƀdéœXš‚3@ÎčÝť7eŚA‘*ĎŘíĎěŠ5N˘Oěv™óç/@vŃĎnť-Ś~śť“É"l$žˆ‡žčœš˘@Č:!TQQaZŕ´ľľ nš ŕ÷űƒ÷íő6'É ľľŐÜ.Z´HęëëeذĄRTT$€ĚŐÔÔ$sć̕ÚÚZĎä˛p‹ƒd2Épć*ě‹XČvŐ9E'Ž8q8"% xľĘ´§’™óœ&*LúłTUU 3ég´~V;ÉeîĎr÷ç|,­1I8+'šŒn+€\C3@Î)((>}úČňĺ˃•g=—]ľĚýXý´ęĽ“h஀i',ëkôůYłfKUŐ24h”••  űŐŐŐ˂ ¤ŚŚ&$yLoŁ%—Ń@*8Ŕ“\ČE$˜r’žŔi’Yuuľ477  gK4ÉĚŽlŁIËúźžN+ăL›6Múöí+ô—’’t˝††Y´hąŠ\ćŽHŠçÎ:Er€t),,”Ţ˝{Ó]łH0ä,=‘Ó$3­b OŘ"%™éz§b™óX9ëœç—-[f’tą˛˛Rző*'!ŇL?kjjeɒ%ć‚wb™]˝ĚN$ł+˜9ë|vH”^xŘŤW/ —‘`Čyzb§m35Ń Đs9É‘*™9÷u˝;šL+á8IhîD3=Ć8Iýűk˘Yo)-- ź†ŤV Z[ۤžž>đy[-‹/1Ÿ˝áËźŞ–y­sPš @˘tţĘö€ž€3@ 'xZ˘Z[š555  çŠÔ.ÓI:ĐÇv%3gą×y%š)M|p’ĘËËK™ŽCEĽ °üŔâ#\Ú?Sui•ćć–ŔŇ$žÎÄńvŰbwâ˜{]¤ĹFr€D™q˝ €ž€3@Ą'z+&ŠjMB gňJ2Sv˘™˝sĚpۋ˝/'ŮĚٗVŰŃĹޡÍŢz"űó6ÜsĘnwŽB™;‰ĚÝ&3RŐ˛pëŔŚçšXŚГ`čqôÄO—şş:3éϤ>ôLŃZfډš¤ě$šš“Ěœ}8Éföc{ßîă{űH8VČVђśbmUé•<éq¸Ä˛X€›ž7”––JYY™Đ‘`čąôDPM2khhÖÖVô<ąT3s’ÁÂ%šš_Ž2™;!Í˝zŻ$2÷zűąťÍe¤Ä2ŻýGúúŕŚcA%%%&š €žŒ3@§'†ş455™ö™şz–XŤ™š͔ť-Ś˝˝#\2™}ŸÖÍz§ÍĽŠ7),\ťĚpŻŁj€x8PŠŠŠ`@ž(ęŇťwo“lŚKss3•Í ‰Ľš™óŘŽ–㏋T˝Ě˝O‡łî‡JfzŠhId‘śójn_T- ˝˜°°°08OB‘`€ű$R+Ę´´´˜E“Íôąłš'\53{]¸äw‚šS•ĚŢ>Ňąƒ¤=Q,Ia^Őεӌg€žĂŠ€ě,šTVPP`űœtF‚Qč‰%W-@Ď.,Ňz÷sáÇťďhĎ@&‰ľ*™-\˜×ăhűˆu=€čH0€0źŞ™E[ď<çU˝,Ük˝ŞĽ@OkŤLŠ˘‰e@ú`QěhŚěDŻŞeń$U¸÷™.ŮÄŽHí/˝ś‹u=€ř‘`1҄Ż$/w"C¸D4Ż„‡h-3#}Čfą&‘y˝&ŮmĎ3ˆC¤Şeîm˘mgo-!‚ęe˛MŞ˝b݉e@z` ˆ%ŃĚŢΖH˛‰z‚D>ëř|ҋ3HBʉf^ŻqŁJ€ž"Ia$–]ƒ3HxÚbƲ@g|N]3HąT$›ڑTt/Ě ź#H:o$“™‡3čbŃ(H@ŤH ˛ faHŔ™"Ođ@‚Ŕ fO$˜<‘`đD‚Ŕ fO$˜<‘`đT @ü~ż€îĺóůÉ#Ž űϤń ݇x&5ˆgč>Ä3ˆ fA @ć‹vźć„ q ™‹x&6Ä3d.â™ŘϐšˆgĚz8{rűřŢSNˆkČÄ3 Űπl×Săx#ÁŹŠ7¸çd€ĚK0oËs-ř'Ž űĎϐíˆgˆgČv==žAt$˜ő áöXy‚}2ďń–/vśĎöŔŸ¸€Ü@<űúxˇ]ƒx&öőńnşFOŽg;ĚzŻ‚Hmmm2Ÿ×ńôqkkŤyŹ÷íőöv ó9W’8ť>Öűz›ŸŸ˛^ő^ĽŒ35č'Ž g ž!ž ŰĎϐír9žArH0Ë1Ń|]4¸oii ގoíׇťë×ɉ€{]âŹwěœmôś  Ŕ˙ôťOě}dJŕO\@ö#ž!ž ŰĎϐízz<ƒÔ Á,‡„+9ŹđŘk€Ż‹ł^˙ŕ‹‹‹¤°°0đGŻü>ţŔČíWˆęŇ*ÍÍÍŇŘŘdb€ŚŚ&sŹ×@=řwwL@\@ĎFWĄˇMMÍĽ‡ wőˆsՈţĄë­Ň?Ţňň2)** ţ€Ü§qüľľu!ƒ~:ŕç\eâäwuŕO\Â!žَxdťl‰g2IQQáց-ˇ|ĹmŤkńݏmłżuë^$ĚăHˇîűnQËÇRÁ,Ëy]=âôś×_}ŹŁ˝{÷2Ô çрž¤¤Ä,TW×5>ĐEƒ{wŕߕW—׀Hˆg@ś#žŮ.⤠fYĘ+Ŕw ěƒýîűôéřă.ĽÁ}ee?ihh”e˖Ż>-.n4ŔwĺÄé ü‰k@źˆg@ś#žŮ.Ó⤠fYČňí~÷z_˙X5Č×[ÍŐŤG(I źč@`QŃsuICCƒ‰'4č×ĆÎŐ%ĘüSô׀dπlG<˛]&Ä3H?̲Œ;ȡ-;¨AžŢďŐŤ\ĘËË  ęűôА‚‚|ŠŠŠ•úúzôëU'zŕřéú‰k@*πlG<˛]wĆ3č$˜e‰HĽ‰í _˙0ľ4qii‰ÄJóňňM c)”ýśT•0&Žé@<˛ń Čv]Ď k‘`–˘ůÚ󞊊‰ $ʼn!4č×ŘBú‚‚ĐpŃňšş„¸¤ń ČvÄ3 ŰuE<ƒŽG‚Y†‹äkĎ{ýƒÔ[í{O’ĄąD[[ŤTW׃ţüüüm ú‰k@W žَx&7¸Ö&Đ=A:ătĚ2X´ _ŻŃĹz%IQQ˝ď@JhLŃŘŘdţźź<Đë­-Ţ Ÿ¸t%âíˆg2W¸ÄąTżžIv@śKG<ƒî“'Čî _ŻŃ@_ď÷íŰGREc gPQc˝oÇ"É"ŽéF<˛ńL÷s'áĽâçž _€TIw<ƒŽC‚Y†r˙!é™ýœ.N‰âĘĘ~˛<’Ąą…ĆN[w oÇ&*ŇIq čÄ3 ŰĎt˝LOč"á mRĎ {1ڕÂýÁŘŁ–'ÖĽ  @JJJ$y]™nЧ1†ĆNÜíŘ뵞¸t'âíˆgŇ/›ç›˜+dƒTÄ3č~$˜eŻŤH´| ŢćJ‰âd“ĆH< =4Ö°cHW•Ģ'Ä5 łĎdžx.*Ld ×Ϥ^.ĆÄC€L–ęx]Ż@ôËéEŤĽuÉĎϗ˘˘"ÉV]ŕz} ŸĎ' 6khĚáÄz՘DK'zLÍŸd.â™îŐœŒr ńLj¤#.Iő>SłŘď‹8 ŇĎ kQÁ,øQŻ~łNÉŔŠŠŢ’m2áę Žŕ >sŘ1ˆÍ+VńşnŰlŽk@ö žé:™ZM,Sßą"žI\*Ž˙]U95_‡ř)gH0ËvŠl5R\\,Ů"SƒWˆŽ=ćčř“=nf{\˛ńLúdëŘ cB€lC<żd~F™+¤âý÷ş[Şăt-Ě2ˆűÇyl˙QiÖŚ.ůůŚT`6`p€ěŚ1‡ĆN˘ěcĽW “Ťq ČNÄ3Š—kc'Œ2ńLě=ާşbX´%U_#Ń×ĐŐ‰g9˜ÉË`^<ڋV•••I6HŐŐ3ń.Š’Ž}œŘCc‘Dü\ˆkz‚ŽŒłčjÄ3ÉKuLĚŘOşââ@&#ž‰,‘cx"ÇţTĹ$éŘO<ˆyÝ!Ůx݇ł,ŕxšÁŮčk™â"ÉdÉńÉ~p¤c1ƒ–d‹öŘŁ}ĐQc’D‡Ů×äŞDăĽtÄYtâ™ÄeęXMşżą ÓĎxKwBVwƒ$;nď× +¤*žA×+d$űČ}ż­Í/ůůů’ŠI,ë îŻăóů$öţ’Ý™NcA"Ĺ(ᎇŮ×ä˘tMć*b"@&#ž‰_2qCŚ §b<ˆX)ˆgBĽk>*Ń8&Ń×ĹcÄ×ÄĂóşB2ń ş f"\Đé^ďôĄŐŢ´™(Ţ+"’ů:™” –ęä52{8ąˆĂë˜n0*Űâš\ŇŐ ýÄB€LD<ťŽžTw?ÉÄɌëşńL‡TĎGuŐüV<ű‹5,Úś‰$šďŇ%žx&Ňzt=Ě2œôšËfâPŞŻüˆś],űI×U]˝?ş›},sâ]O`ŸMqM.éŞä2ŻŻÉďIˆg˘K$nčŞ×ÄóúDƃâůëş ńLjÁ’MŃ×Äş?‚sŹD&tă`UńĆ-$™YR]…,ÝÉgńî+RÜëXL"‰fÄ;¤V*bŒxžÓyŞććć`R™.ú¸iń"iůńâ,ž_ŚJţœ™âŤŻ źÂ'ڋ'ĎÜsţ㍠4Ń̨_q;ŽŮ$t+Ÿ4—–KăđáŇśú(ń­˝žä­łőď/………Á6š:GŚÝÉf‰&šQÍ DC‚Y WR7K†{ĎöúššŠŞŞ’ĹÍ3dFţDYœ˙“4űęVŐ>)m­”ĘśŐĽż” Ę%ĺĹRTTL8sŽÖĐ[w`oK„dÚ!ÄóšXö•Šý‘âŻcqŽÄ5Ů Ĺz€.˝ző ůý&7ß2AOŽgR/$›xćLÚ:‹ółśćîߋ3dˇ˛—p_7ZĺŽXś‰çÂDb@şő„x&ÝsbYŻqˆ&”i"™&˜é8Hc}4}˙řžúB|ßN’üšł%ßůů˙“yőľ’÷ëTńyëSőŹyČ0Šßp´ř7ŢT ÖÝ@ŠKKÍ\™Îi˘™WQ†psf‰$ĄŮŰçR%žxݏł,É~˛2–,Y"‹Ëo…ďËďEŠ_Ú$ř9á×˙űĽ.oąYfů>—<ɗІ•Ľ˛v č[KŽĐĹ&xV<;´sŐF¤Żk˛Y´m“yMWî€TJd@‰Ä˛ôIuŐPmhhV˜ŐV'ć ˇOŽvd›žĎtE{ŠpĎëÄ­ÓNĘN(‹U,ŰÚ gÎؐ“t–ŠD2b@&ĘĹx&٘%žÄ2çÂ:í´ÓPW'ÍßL’ź‰ă%?p[XSţl˛XޡIp›7G䭗Ľ­ź—4ţa´ÔlľäŻż‘””•Iqqű\™“tÖţ˛đ ‡^ëçh™ čjœCg̐6ŃŽ†Yśl™,Y˛T&ź,sň'­XëÓ8yE¨îwV‰ó00)Uůż›ešďÓBłoíę2Ŕż† Î[Gz÷7Áł:í4žôöUŹáŢc6%œń É^Ń릉e‹/–úşĹ˛Ęŕ R’÷–ĚYt“´ůËdȐÁžq•ý5¸Ú=Ecł_ޝR/“Ś7ĘÜe­ćb™!ů˛éČbłvŠđď@ćHErY<ĎécM&ł“ĘěőM~™;żMć-đËü" —äKuužÔÖűąHž4ˇä^“¸m˙,-,đbśŔm›””´JyŠ_z÷n“ý[eđŔŔçď Ÿ œjŻvŻH”lćTż6žB) <â閎Şeîu‹8IeőőőŇ8sşČřw%ÂR¸xĄŮ&řić—nĎ/ Zń^ňjk$âx) ,­•Ľa›íĽv۝¤hřĘRZZj’ÍtŽLcó˛‰fT3ą"Á,d땯Éđ°WW×ȜüŻeVÁ¤öŘÜ~‰}EˆżăIż/4¨o’ZYPř,đ}'?V•śô•ʆQ2ČżŽ *%%EeÁvš: h'œE šƒoƒvšÄĹ>>ekŒ“mR•\ć´ËЋ-Z˜úYFzZŠň—śW–múLZˇ–şş:Ó.3Úž„L­œř˝,’M6Ů8ęĎ]cƒšíÝe˛´Ž-dýď‹[Ěň^`âő”1}d•JNťl“kńLW'–é„­ł8팛döÜ6ůyZžü:˝Pć-(’ĺ5Ϗˇ=Ń,_›ňĽŚŽPylŁĄEEŻ:¸IVŃ,kŽÖ&+ Í N°jěጠ9•YŁUđHäšDśë‰ˆo˛ń=˛5žIfŒ#–őšřî$•éřF㔼ŕ­W$â‡â —H–I‡p÷’żdĄäżňœČk/JËúĽťí'ůëŽ/ĺĺĺRś˘˛™]Ń,Ő̈séĆń&3pڇ”‹ĺęĺ˗KSsŁü”˙ŽL ĆíVľ˛>Ÿk}çęfŞŢW%ł ?—ŮžĎ%ß_(}FJeÝ(ä%ýІ‡\ąĄľpí{ĄşČ4ŠźŞWď/X°@ŞŞ–ËŔ>oÉŔŠwÄšXń–ü4w“@Wm(x#™ĘœĆ榛ţ%O<ń”š?`@yđÁűdčĐ!’ ´:ĚÓO?+ožůśLŸ>=0Xß&ýűWĘȑ#äú믑’’ÉM­~ůtZŁü8§IŞÚĚ$jCsřżŻ%ľmrýU2˛T”äɺÊdËՊĽ0ŸóşNWľ—ŇÉZ=&8‰e:qťxIł|?ĽŔ$”MŸŐKjëň%Ýôm-Ť.0˔_+Ţ)/k•‘+5Ęj#jeƒuZĽ˛_Ą™hľÍt|(ҸJ˛Żńl×Sdr|ƒÄ?şRŞ“ËěušôŽńIMMYÚžřT ^}AŠ~žb|důgUŕ{,řîkéXZV_KjöŘOj6ŮĚ$ši"ˇĆ?Zˆ!‘jfŒďE‚Ď/îmľĺ’N<ÍóO–@8ďÚŘşoĺ”ů"V7[qÇşŸŔĐŚ,.řYű~–ŸĺU)ië+•5ŤK˙(œż–”÷1 gZŮš‚Uu`1—Ş›ÔĐsĹ3)<ţ|ŠŤ],Ă*ÇI߲/;˝Ś¨`ŠT–$5ľcĚ`lďŢ˝Cö•he\„ŹŽŽ–vÚMâĽ1ęĉăÍýÚÚZyňɧƒĎiuš^xQN<ńxénzĹ÷qǝdޏŘfϞcďs)šlęüfšűĂĺRĺŞÖNŔN™×ޢíóßĺĽojĺŘí+dÔŕB€tKe"z¸uC菊łT×4ČäŸ|ňÝäR™ňkďŔń űńšŘöĂÔ2łźňŽ_V]šQ6X§N6\ˇIúöiŻęĄcA´‘ň-žŃďG[q 8@Ö\s Ůf›­e—]Ƙuádr|“M.žř2yýő7ƒwŰmšćš+%UˆtĽDă–X֙%p<ÓĽuň’˙ô#RřÓ’Ë ~ýI ţsƒ´Źś†Ôx˜ÔŹłžTTT͔Wüo ď6™DÇ-Ə˙PŢźüđÏ˛`ÁBsÁDEEoYe•Ud“M6’}öŮ;peé‰Î=÷|yb÷Ůg/šě˛‹ĽťÍ˜13˙ź!_|1I~˙ýwÓ-K˙MëŎ뭷ŽlˇÝś2f̎ÁjĹ^vŢywYślyđń-ˇÜ`^ˆŽ3¤T,':ĽŰÍőýdwżěśŠYçő&ůĚI8sU7 śÓ\ąžÁW%s 'Éß$ů>đdy㊏_MĂ_20_Űiś÷Ľ×¸xŰifru3’ÍČMŃâŽx’ËfΜD[&#Ţ-%…sV<ăNčŇ÷™2gSŠŞ*6U̜ ö~“ŠěÎ4>-//“ššÚŕşH&¸ăŽť;%—9´ŐUŽĐÉ՛ު’–řćV=i;)Ý×Yťőe’@ZĽşˆ{˝Ý^J—_o“ŻţW&ßO­”ŚĆ<ÉTţŔxĐ´%fyýƒ6Ů`­zŮxýe˛úČ<“ĽK´D3ÚH…ŇďG[ŒMŸ>Ă,ďźó^`’îV9öŘżËÁ˙Ɍąšer|ƒvÄ?şRŞĆ7Üë4^Ѥ˛e˖IóŒéRđÄCRřőŠ ęzČEÁożHݛݔć c9.5+­,}úô1 Fk›OE×HŻËDŸ~ú™\ýf<ĚmɒĽfůć›oĺÁ–=÷Ü]Î<ó4éŰˇŻ űhgŹ›ožU^{í “hÓXTý}žńĆ[ć‡sÎ9Ë$šR‹ł ćŽăŠ–NÉT/ÓÇ:Šíř6{AN™2ťeŚH\ gí룡ÓôţW“?×,3|Ka[ŠôŠ)ýë֐ÁyëHŸ˘Áf@Ql †ívšöDj¸ď3SÎH6¤‚×ń=–‰´HŸD_˝Öé`Ť^ů§ÉeŤjrYÁ;ƒ_܁V~^ƒŹ\ů”Ě\z”,^źX äůuâp%-<?Żťîj;ö&ó3ßu×]䠃”łW^y5dݐ!ƒĺŔ÷7Én¸äm Ľ•;R1šęĐ}ÝŘçľʤ]Ѝr9žIg{)'ąL'p´ ŐŻżűäă/zËÔiŮWľRá&}Wn–U†7ÉÖŁŤeÝľ–›ĘÚJJ“ âx´>Ţm˛™śTżńĆ[äË/'™ŠZ:ĆfËÔříˆ€ě‘ ńLŞ’ËźŞ–é1ŚfŮrÉ}œ˝đ¤Hs“$”Y2aŐÍ|/…ßM’‚ž‘Ś]ö’…{$ľ}jĽ˙ţÁĘăá’ę‰u2=Îůď‘Űoż3ć˜Yš4ŮěöŰoíąŐĚş›Ž]ž|ňi2gÎܘś_¸p‘ŠŔvôŃGP!ȉÄ3č>$˜el™€ĐëcM,kkóKUë\iĚŤ ƒC’Í̊ë%d˝ßőtÇöâš}hő żçöÍžzYT8Yů&ËOň˛”´ô•~íŐ͆äŻ'eE˝Í`˜~˜ĺJ;ÍXŽ6"ilöËťSęeŇôF™ťŹŐä" ŠČ—MG˘ľKĽ¸€[@ŽK$F!ą,yŠL.›5kv`|Ő]šLŹ3÷ŽD*J”ňÚ˙ɲe™ X­ô‘Š מrâ¸ýöŰĘđáĂ#năTMqlšĺňüóOK&YştŠiC`ťřâ d‹-6—\ňé´Ć¸ŰBĹB+y螡[3wڈŮ*×â™TMŇş×é}¨ŐĘÚ*{ę´Bů`b_™5ˇHrÁŒŮEĽż Ô$Űn^#ëŻUmÚ#iuM4Ó%ÜÄŤ{]¤őîm˛9öŮjŤ-ĚmSSł™Ŕ× ?ý7bűŕƒĺ˛ËŽôlۘ‰ń Ú˙Ů'[ă™t$—ieŁŞŞ*łřżűV şS|ócKJ +G†*|q ’7_–˘ož”Úϑ9ëŹgŞréâTuÇ'š–döüó/Ęż˙}‡çsZŠżOŸ “œ¤s™6sN=ő yěą˙š Đuôo9\r™ţť0 żŠ¨ěŁR<đ_3ˇ˙ţű €ĚÇÜQv Á ]Âů@ĐŤ\Ő|˙ÔNí1;ËđŽnÂU\#˜|ćZßą˙čŐÍTC^•ĚÍűJćúž’ýŇťaeŠŹ[CČ2°hU)**6ÉeÚNÓŽnćž t˙"é­n–HŔN˘1cI‹Üöî238hű}q‹YޛR/§Œé#ŤTr˜€TJer™Ě46.•‘î–ŇÂ9ńQ0$đwŹsícĺĘgdĘÜUƒnEšĄÁęąN¸öä$3­đľÝvŰJWr.ôĐř5Ujkë:­6l˜äšç4Işü8ˇ‰ V)•Žä˛ććf“XŚíĽ~›Q o|P)óäFb™›~_ĎžR)Ń,{îT%#WŽ‘ŠŠ “hćTáJe5łl}nšĺ†NńŒ&žőÖ;IŰ˙„LđéşwÜAvŰmAxŤé$ŠWKŃŽFü +¤j|Ă^§ŸĽ .lŻZ6î)xń™ŔŠO˜íV)ňćϕ޷^- ;ě&‹:ÜĚs 808fŕ•dfžtă;ą<ßŐ´}˘VXuŰkŻ=äoű?YcŐÍcMRÔšZĺlęԟƒŰéEšwß}Ÿi—‰ŽŁż3wrŮ Aĺř㏕=öŘ-Ł/X°@{ěIy≧BZhŢtÓżd§v01}wĐ 0ÜŐ| ›1ó¸$rňMĚtBsnŰTńŰă% aözmĽ†Ć˜p}˝oĹţM:'œľJ‹Tü&Uň›Ló˝-…mĺҧv„ ôŻ%C|ëIď’JčÝNSƒqŻAĄtV7K&ٌD3D˘íô*SdŹnh3Id Íá–ÔśÉőoăűHEIžŹ;ŹHś\­˜6„Tž.Y˛Ä$ íó’”ÍÝŔÄţÎqSp"ůžzYŠĎ32kůQ˛hŃb;ďź{`RyđńĽ—^$űîťwŘçďťď.9r„ř?ţCső펝îÜŠzČüůóĺŮgŸ—O>ůĚ´ĐA/˝Zw­ľF™‰ŕ}öŮŤÓ ŘÖ[ďĐŠ:‰ăŔ˙ź ÇĘ1ÇňźţnľUÖ¸qŻČO?M5__ )Æ Ůž‘n¸9dť'Ÿ|4ŠËęÓ7‘Î}čyŇQDďkLM,[ź¤QĆR!_|[.=á˘âšó ĺÁ§Ęk×ÉŽŰ/“ţ•uŇŻ_?Są"‘jfš\ÉĚĄ•m˙řÇLe˛żýí(ŠŞZ|î1ąˆý}F‹o?˙ü‹źüňŤ&†Đ‰ĂššZ)++•ĄC‡š¸áOúcÔc˝ĆžŻźňZ .úHćΝxźÔěcäȑ˛Í6[ÉěgڄE˘ńĎťďž/Żżţ†‰›4žŇ}hłéŚŁÍ>4ţňňôÓϚv ŽÍ7ß4ßü[>ř`źü÷żšďQ'÷5žą÷Ą_çÉ'Ÿ–Ď>ű\ć͛/ĽĽ%˛ŃF01Ö:ëŹ-éBü Ýґ\Śíťç͛'m3gHá7‹oúoíO¤âŹlRő^?ť’ޔ©?HíѧČĚŔqHiNuŽTŒďÄň|Wşçžű:gœvÚÉň׿ţ%dÎëm˝őVć˜{ěą'ʔ)?Ÿ{îšäřă˙aޝš%:摮ýhě qÄÇO4 Z%%Ĺň‡?l(Gu„l°ÁúŚ’›ś ulťíÖňŻÝ$‰Đ„.­\ŤqŇ?ühb-“2¤=NŇŃIŕ‹ÇŻżN“7ß|;dĆ}wßý“i4hœqĆŠ˛ÚjŤĘ•W^\ݟ /ž8Î$FóŢ{ď~fϘߚ~O:î¤ÉiůËaž jچó˝÷>>Öą0ýů>účăňŇK/ËěŮsLUäˇŢz-äu›žúęëćgŚąŠĆÍ}űö1ń­~˝˝÷ŢӜ{xqÍkŻ˝ĘÄŮ'~bžŽţü[ZZe˝őÖ5ďgă7 nŤŰ<óĚsňż˙}řšÔ›ßϘ1;ĘGüŐ\PI"cˆr fH;'Č×ŰĆĆ&ili%žY&ŽżÝĽłŢr׌fôý¸×wn§Ůž˙Ží›}ľ˛¨đGYäűQ~’ĽŹiˆôŤ_Mú֔Aů٤¸¨ÔD5™NQťşY´všŠŹn–h˛YŚ%šéU%ożýŽ Zć̙#K—VIqq‘TVVš`z§v /ۇ­—*ą|梊ó›ĺî—ÇÝAĐŚĚk6÷?˙˝Q^úŚVŽÝžBF N]őČŃFmÉTw›p몍ŤUŇŻtźT–OňH$ó…ŽóŰqV°¤™ô)ű!0AôYŕř¸e`˛ĚL*:_ƒ$łîĽ­ttÚ´ßÂnŁ“Ź×^;6XaŘąxń’Ŕ€Ó§fyđÁ˙Ęu×]mĽ’Ľƒg]tŠ|ţů—žÓ÷ŠËkŻ˝˜”Ţ\ŽşęrӢ哨: ¨sJąn˝őßrýő†Ú˛S'ŻmG}DRÉeZąuć’ITY‘OVęW`b)Ďý/n1_ƒŠŻ’•Ž úŮŞçÁßüP*o8Xęęťż˛RWŇÇw“Ëdę´ŮaŤĺ˛ĹĆóĚ‘&"9cš8ůš,ˆ;óĚÓĺ’K.ŽÓI¨ożýÎLÔĆJ&7ß|Ť™u˙{]žźÚ,:éŞĎ{ě1ň÷ż횟p1žţťďţgMň:÷ÜłĚʗɓ§Čyç]ĐŠz†îSÇŠtR'ôt‚úä“OV÷D'Ż¸âę°Ďżţú›frԞׯ§‘&L”oźNҁř@şĽ"nq'ÄëůŚ~ű>ůP îýˇřšš%Ľ2éâ÷’?g–ô{ŠÔýíX™;zËŔźK?“Ř)Ą>ă­´úöŰÓńwr™M“ČN?ý”˜FiU3wL“Ě˜G:ö3aÂÇrÁ—˜ä*‡Ć~8ÁÄúÚTŃ÷|ţůˤI_…Ź×ó ç=kRÓÁ˙É$€Ĺ3—§IZîšN›s'—Ů´Ś&÷kœčĐ1Žh f<đÜqÇÝ!ëœ÷ŻqŮíˇßÓÓĺ—_e’ÇÂŃßß5×\o..°-X°Đ,3ëŁ]tžěžűŽţŰ~řáGĺśŰţ˛ţŤŻž–N8%đ=Ý&›l˛ąš S/Ě´iŒţĐC˜17˝XU“˝tő"€Ěƙ’)¸ˇé€ˆ>ˇ mš´ćľŽHłśŁÝeçí˝Űi†\Ě÷ţ}Žő^ŐÍüR“?×,3}KžżPz7Ź$ę֖!˛žô-"ĹĹĹÁ%;ŮĚk°)]ŐÍIëî _˙˝h@¤§V˝s?§íŚOŸaŸUW)^řϸ*źé­*iIÁŚÚNS÷uÖn}I2ľâI&KÇëcÝg¸řLĄ .–Âź™2ŹĎËŽd{ă~„*fjxż—ĺׅĂdţü|“`oë(’ĚŇăąÇžˆ˜\öřăOš ŰhćΝ'DzÜ˙Ý2jԚ’(mŤvä‘ď4)ëĺÓO?7Ű>účCÁ¤E§Ď;ďl9őÔ3ƒŰitÓŤoŐţsWH;ŽUWiŽŔLTcłß´ŻoNěoś OäĚ]űĘŞ Ě~žŐšę›îűßď-“ŤöŻ”âBţ­HL:’Ë4QY+€ć äů×ČĚ9=űJô†ĆH  ż˙>Ý´HĐ[ĽƒZ:ůď˜ß…6éż%­2ŤWeÚô*ҕW^ÉÜwžžşúęë: n˝ő–Ś„žŇöÜŹYłÍ•‘W_}…ľýV˛Ë.cäwŢ ŽťóÎ{ĚűŃAC­âĐ÷ŠhŒ¨w§Ô›äřD°qš™\mlńËěŞÖ°Űi[ń÷~Ş—=×/ˆWú*€,•Ÿ~)‘—Ţę'ő =ŤjY$šhw÷#ƒeß]—Ęş-sĽ_żžŚşzŽUřH=kĽ„>ú8¸N[ĹJDžyäńuݜ|ň‰Śr„Vwx衇MÇÝwßkÚ/9U1´j…;ćŃ tÚRsĈřa†š¨Q+™9n¸á&Ůnťm‚-4ńL'÷ěä2ÝżśŚÚpĂ Ě¤ß /źŒ›”ś,zţůÍ{ ÇŠ¨Ąďgűíˇ3˙Žt_ÚrS/˛ÔĘeîżUmeĽüőßÇűď7‰o^ŐM’Aü Ý"Ĺ.ńĆ-z^ŞOęqKśÄü:śš„„ô„a m™ůÖ+’7ŽÔy‚477ËđáÃÉ4É&™uwŒóË/ż†<ÖyşÍ6ŰTR!cŠÚţœuŹĆ\ŚIé:Ś˘żO'ްÇWĽ•¸ěä2íppä‘3m5~ŇĘŤo9ťťí°Ăö˛óÎ;EݡţÔ"śX“âÖ\s łÄJ“¨ôgłŐV[˜÷:ç¨mJmš¸§UÚ"ýťq~?ŻjŰx˝`ŇŠúĺ›j‹I[e•UßëôNąéżţőoółŒô˝huľú›„I×űä“OÍ:‡ţŰ× )4†=ä?ËşëŽˆ]7ßł}1ˆ~żÓÚíړC›H0C—Ńƒ¨fK‡$˜…œř:ÚQú]OĆTĹŹăŽ/†ęfŃö}˙>‰TÝL5äUÉÜźŻdŽď+ů!đM—7 –ţőkÉŔśľe`ŃŞŕ˘Ä şiň/Nułp%bcI$‹%‰,žDłx“ŇRAËżş“ËôçŁA°N\ëU?˙ü‹éăîĐ`Uýƍ{ŢmHާÓăn‹ ŹÔ}oˇf‰@&ˆ¤˛xŢŁVJ¨ŽŠ‘eoJQŢR+ŽąŤĘúBËD:ÇeŽäý˛Â92´â%™łü03!­mŁ" :Ć;¨˜kIf:ČŁy‘üą݈ŒF^W^y™ěąÇnžÓ¤sčăľ×^ü;“—‡ň3yŤt0JŰ+lˇÝśf2UéďŮMڜ3‡&iľ1›hsNG52€˝ţúÍ@šCŻž<ńÄă{ÂëÎ>ű 3Pć €éŕ—^ŠŠťöŕéîŸteŰ/§7J˘ÖZ({Ź×>aúä5˛¨Ś5âö“_‹ VńJur™~ŽjeËkĺŁĎzˇŸVHĺ×w™†FŸ<űjĽl6ŤVvݾʌEh53;Áž$łv:édÓ bĽŚîśA˙üçšÁśDZŠĂŠ~Ą1ÓjŤ­*ŤŻžZH< ­‚ě˜G“šzčţÖFűüőŻGŤ ÖÔÔĘ[o˝c’ĐÔoźŐi˘÷škސ1c:&E:č@Ӛ\'Ú"Hă‘HżGŠţőŻƒÉl­Ôáţš{íľG`˛ř’ŕţ´—&ĄŮ öŠ@ü R™\ŚóLZ1˛yi•Üpšř~™Ú3’ŔTšżĎ˘ď&Iţ­×Čňϑ™ăęJ+­”˛8§;cg|ĂĄ 9^ĽUUU…Ó˝ 2ÄÄ*UcŠÚśţv'őď´Ó×]gŇ8âŇKŻIÔO„žg;IMžwß}GH…ŐÍ7ßĚ\€xë­•ąô"XĚtŒŃÝÝhčĐĄ’.wŢůo=z“ŕcŻvćš@-1Q“Żô÷ć× ›Úăh{wqÄŃÁŘTĎ5´ ťĆáh˛ä˝÷Ţ܏ƍĽĽĽć‚›vĐřÔĄ‰kZ¸ĂŚ ev‚Y˛cˆr fHJ´+_𡴴JMk•Ôä/ ­Ś<ź|ÖzÄv—ăzżßÇŘN3úţRÁÎ&ÎÚ˙ŤÎ›k–ß}Ha[™ôŠŃ^Ý̡ŽT 4€ëzpÖ[§Ľf´všŃŞŸ%“ŒfoŰÁżŒĎ=÷|Č: ŽošĺĆ`ĐŽ4¨Ń€L+W8´ßˇĹvÔSéďK˙ÜńăœčíŢ÷Ü&ĚdŹlN,‹ÔSŻ€+đϐAĺŸUĄŐJ.ë´CwBYH‚ýŠç+Kż”úŚĄcńN&véÓ§O\If=e˘Ué¤e4Ç÷I†śĽňJ.Ó+ Ǐ˙(dDşś˝{÷6bÚvŇ1aÂĄ‡^=tŔ˛WŻr9é¤ă;mwňÉ'ČŤŻžn*…ŘŻýűߏ>։j}ż7ÜpspÝĹ_& . >ŽŹě'§œr˘$kţňVIDY‘OŽŢŚÂœ|5ŁQ>œÚő5s—%öľô\ŠN.Ó8A+€hĶ_(sć%~ŮčîóoĘeÎüBůó>K¤ąqŚ 6,lŤđžšdŚń„ÍŠŢ ŻąŒ_''œplČsáZ,iĚŁ3l‡vHHr™ZiĽáfý—_~ŹtaO,j‚™M'íä2URR"§žz’i äĐJß|󭙸 ç’K.ě”\Ś>üpB§ýk’˝ýďAďŸyćifR׎’Eü ]âg‰ˇčüÁŹYł¤eŃ"ÉżîRń͜.H­üéӤ▫¤ú”ódfŕgŻIfNQ„l˝ˆĐ¸îu Vš\vęŠgJ$ščuÁç™űŠóHŐ~´:™Moçž{VH˛“GÄŇ<÷{3fGĎö݇z°Ü{ďÁ÷B˛Y˛WŽtEđŻWŠęŁ6dľ“Ë”(sĚQŚ7ş]ŞvʔŸÂî[ËÚꀤ–ą?~  ­—˜ mŻ˝ö4°3 +˝BD{—kVžţhôdkˇÝv1'îÁT7 Đ^zée ţňË/ćűÖÂÚŞAKńęłÚ&ÁËÎ;ďn*Ń8îťď.seV?ţC3ŃŞ“Ë×\sĽ$jY}꫗uĹž š˜\ڎUUˤ>0˜6˛× ŇŠőĽ;Ń,d7îä2mVÜ^1N–Źlń™ăŠ^-—ę$3óNs$Ń,ÂMfj[K÷ ę]wÝăšíĉŸ„ţř“ˆ_S­^yĺ53 ŠćĎÜ;űě3ŁĆ`Š0´Ožœľ[_ůnV“<ňiuđO㨭{KeyžŠŘú߉51í‹ŃR)Ţä2ŻŃ óćÉŁĎ÷—ĺŐ ĆjÖÜ"šď‰ň—K[Ű,“dŚÉ@*IfŮŽŚ&ô8čülbĄ“d:ĆaˇžÔ‹ Ÿ}öyŮ`ƒőd­ľÖ2˜ëŻżžŠtďŚ1;Ąm›mź[*{ěß‹çS8ćg×>śňÜNہj|cOöj.&ÓöŞvu›ţ=Ú6Üp}ĎIp­âśŃFbśOĽŤ˙H‡HqŠűą^P=sćLi™3G ŻťDdÁ|éÁą“ ĐEď%Ţl“dśü´ L’ŮĘ+Żs’Y&Ć8îäœĺ˗K*¤jĚ#UűŃŕ6•Ři?}űö5qD2íśÝďYçʍYşâ5i+Z‚YIIç„*÷ÜaŞhŰH/Z!×N0‹–ŘŻj˝ †Ä›jb–`Ś_söě9ćH^?Gm‡{Í}ęÂv‚™]1Ž;ĆdF2᪗é}=pj™ú9­?‹ß9śĆՎR"T7s=éÚ>dŢ´Ó~Üëí„3 ŰDzŸk}çęfşŚ.o‘Ô-’™ž‰’ď/”Ţ +I˙ú5¤ż X´š9ř;Wi:ŐÍôą;X‰4ůíšLúÝ%oĂ­s\}őĺfŇÜĄś×뾯öwӄ6]t@N+Ľ{m` r”ÄâöŰz$döQ×E=ožů†°˝ŃőJ˜sĎ=_ćÍ = Öę2Ú6K—‡~Ě\]˘WJDŁÉjڒaÚ´ß$f, œŹ–DéŐŤ+ő+Šó›˝÷ż¸Ĺ|U*9 Č É&–ĹóúDˇń´“°ë`@}}ƒ”řŚHŻ‚_WT/s"W@cÇUÖÓ+vj?čóŒěó LŤ:^ćĚɓ•VfđâM23_ş‡T3K—p¸ .ě´.–ŠjJŰD$Â݆B[I„ănuŕ~­Ň /´Ź˙‘GţÝó9MôO…!ůňűâđąPyqžô-˓F•HA đăjSu“ĹćOĺţ ËĽŚ1ś„ú!}ňbO<ŕľÎ~Źç‘Zšl֜yüĹRWŸx{枪ş&_zz€ş˙âŔĎvś9Î9ăŮÜF*-ZňX[QĹCŤ“|ňifœÄĄlŸ}ö…Y:ŮŚUČ8`żŕĎË+ćŃöLńĐڞpSáâAd.ltx˝G¤dť%K–†<ŽÔ *R\•âéoěîy§rYë’ĹRxĂĺ]—\Ś2ép܅ď%oŃé}ëuR}ćE2+pŒ]e•U‚•™’ŠĆÚ1ްi7MXt’ćâaż&UcŠÚ~_6we+›KH&ÁĚkĚ&ö1ŚeQˇŃ$8ý÷fˇ@Ÿ7ož¤C¸Âń¤ˆg˝ŽX‹ĺľÉžűąCtbĚT/+}#´™OBc=ž;ϛű!;őžŒÚoóóędDŃ2uÉYcažČrÚŰďŻ'ˇşĺ–ş­L|2˙ö’i›j_ýMŘç4~ЧBJ8ŁĽ‘&XYĐ,}Z#ٲ—lłz‰”â™u‡ľ<žńCLžŰ,ąÚtDą@,R™\ŚŐĽô‚§_§ËÓă*ĽŠ™ó˛D54ćÉcĎ0í2%0ňĽ‰FNՀžšdŚś_}őuČ:­—yňÉGĺÁLf˝RĹÝŚc!W_}|öŮçríľW™ŸWŞăíD$ú˘UňąŮŽŠ@ü Ւ‰]Ücšßźd‰ä_sq`đ]Ť=ťt…üEóĽâöëeŮéĘŹź<“”ä•d–é1Îk„ТÚgË-ˇYżőÖ[ևVc:ĺ”Óĺ“O> >NW›ĆThn=‡›T‰$׼J,­ÓužPçí~­ÜvôŃGF}­Vł+ávkËĆŽź°9Ure @ę‘`†¨’9ˆčk5 ikóË–™ŇäŤo/xá óť2Ť|IY*Śęc+;öďz2ŽýHŘęfíű÷'¸ŸŽť>'áĚN6óŘž!ŻJć}%ó|_É÷/ŢŤiˆôŤ_MůבkHIqGyS§ş™“p.Ń,ŢőîmŇüë„ŕžűî-Ď=÷Bp^ qôŃÇʨQk‚ŔmdÓMGËŹÓäáÓO?Ű)šlŐUGʁîożžůć[yůĺWƒUŇ4đšđÂKäńÇ6­˝Âyýő7͉”śĄÔ÷˘ůşűŞ ˝ęôśŰţ#]t~p^m{ŃE—†XÚ˘óČ#˙fޗö8ć™çBNXƎ˝)pbłĽ 4(ěűůôÓĎÍíFýAÖ[o]ó;Š÷ę\ÇťSęM[ƒD°qšI.klńËěŞđŐç–ÔśÉ{?ŐËžë— t—xăœhŰëdš’čqŇŤ”}ŞE›€Ň÷bŞ—Édé•˙sGő2ťÂŞ“h桇ű>ýan­űEůKeőž˙‘iËN’Ůłuđq¸9f’dÖýÜmô‚…O>‰ž„ŸÜ× ˝JxîÜšaˇŐ ƒHŻmý<šçžű=_Ż“úÜŠ§ž$ÉÚyíRy?§hźŽ>Żt’uăUÚ'I§&e_ü:ö– ÚNj§ľK˘I6fąWWW›ĂßM.‘—Ţč'm~ާÉjnńɓă*ĺ€=Şdż&™ůƒ-›c‰{"ÉƘç˝÷>čÔÂh‹-6—xé8ˆV.=çœ3M"™Vƒ×E/ܛ:5´}ĺ;ďź'{í5Aśß~;Ďń!úőë'ąŇ1§^˝ĘCžpqŒĆ îśÝ^í¨bŃżeČă9sb’Eü ŤÄ’oŻ×Ď߆ĽUR0ör‘Y3¤Ë9c%™ ŢKţœYRqǍ˛ü´óM)­ kƒL‰c6ß|ÓNŐ°´ă;ÁĚMçq~řáǐuŤŽşjđ~ŞĆÝşc @v ö=R"ܕ%ĘÉDŸÓöKpŢR7 YĚzŸŠÖąH§íŰBśˇ÷z_űžWěż-ęöąŽˇŢŤľ>šýˇżĎ6űgŕÚž-pŻ:oŽĚ(üXž,žOŢő].ęî‘ďŞŢyËŚ›ŤľÍ….Î} ‚5*žˇîtú駘D)7<ź˙ţ‡ä„N‘vÚÍ\9˘‰h˗{_ĹŞ' =ôpČ:í9˙čŁÉá‡*ű쳗Iţşúę+BśŃŢâożýŽDsŐU—Ë5×\iZ1œpÂqňď˜+*lZ2ÖžCŤžŮƒƒ:éţđĂ˜6˜š¨ŚĄˇÝvKŕś#ŘŐßßă?ń˝čIšž­žvƧʙgžfŢW"žœýę‘pÖZ({Ź×žPńä5˛¨Ś5âö“’řZŹxށşm´íőó^Žő˜›ˇô ł}şŽŘňz?îÇNő˛ĆŔ{\řZçŔŁÍuż-\Ŕâ|˙ >ö‡ŢJÇśĽsdĽ^OHm]]`˛mžçű‹Ľ:C<í2V”łËűë… “'O‘tŇ lZ}LîÝ4nýć›ďBÖyľżţúL|ë8öŘcB’9ľŞŤ{Â9Zaő”1}¤4JĽUdŐJú/Q“ëďůpš´Ä˜§Żű>5đ5Š H쐜xŽąućŘź@ŚN+&š,ĹÚÚ|ňâ}ĺçŔĎVĆöń.‘8([é˜Ç 7ܲN/ŹűĂ6”D,X°ŔÄŘkŹąş;ůç?Ď1Ţ˙ݝÚMšÔ^5McmŐnűčŁ žű˙÷żďř“œ}öyr×]÷˜‰KǨQŁBś0a˘ç>´Š;žńŠcbĄ•alšL§#ş-[śLžýö’JÄ?R)Ţ1—p5 ŚŽśNňîýˇČ´_¤[đ‘%Ó•^˙˝SjçîvbR21MWĆ?Zl`§vY7qâ§ňä“OG|Ý=÷ÜŇŽ[“Ô4Y͑Ş1TíǝˆôíˇßyŽM겑ŞĂÇÂ]ÖŽĄREc?›Žu^vٕ[0j!;šLí°ĂvҝźbÓ >öÜöĂ? yŹc^Ç“ŽÖcˆ˛ fHH<ŸNśj°2Ťĺç°s–ŢëĂ$›…ŮžM$ĆýŰ gĄŰˇ%ź;ŮĚö}śEü~˝Öűʟƒ÷öÍžzYTřŁL)'^/ď´^)Ť’ÉK>’%U‹¤śśÖ´ Ň[]tBNŃ~ŸÝ9ĄŤ•ĂîşëvsĹCEEoĎm4˜Ń*_×^;VöŮç@ůďéÔ@Ű1¸űŔŸvÚɝš]v#›l˛qČ:­P‰žDěśŰ.!ëúôéÓŠb†žh;M‡ť­ćßţöÁÖMӊfśpÁŚC+ŠíąÇn’ ó—ˇJ"Ɗ|rô6Ś(ÎW3ĺĂŠ Q_3wYb_ ’ëq,–Ä2}^Żœ1cŚ´Î|]*>ŮS ~šÝ´Ň‰gö’¨pŻ÷ĐÓă}CCŁř›çJoS˝L“ČÚŹd˛6W˘™¸+ępîżŒë=ř­u+ŢKŸ˘˙Éđ˛Ç?ƒjY¸paŘ÷éq¸uń<:(ľíś[‡ŹťăŽť<Ű+]yĺ5˛ďžʙgžcڕťçbľçž{„<Ž L Ü~űśÓuîÁS÷kő{bWŻ–Ő˜é/94¸N<Żşęڔ´ŒZĽ˛@Vތ^ô['YŻ{˝JŽ~ľJćĹGĹşˆˇ˝T¸çurIă“Ys ĺŮW+I.KM2{ć•J™>ŤĐT°/8K&ŚÉ†xG'<ŸţEůż˙;B–. ô;ţřcăŞ^˘c'GőŔdŕβ×^űË%—\Ţég  kîjĺĺíIç:Ž´ăŽŰ‡<÷ÄOÉôéĄUofϞ#/źđ˘Ěš5ŰTżżďž姟ŚŸwłLšô•źűîű!ëtĚM“ÔlZQŢëÂÉXŘ*ýť˝á†›Cb˝Żëbi//âŠĎ1-ŇcM"ŃÉyĎ<.yŸEGú};IĘ^ŃüNěŸdéť2Ć9î¸tj y㍷ČW\ŇNQiŐ,MdzčĄGBÖďžűŽRYŮQm4UcŠÚĎ6ۄŽůhrÜĂ?Úi?zqž;^ssÇnîDľ=öŘ=äąśŻÔXÉMÇKwŮe9âˆcĚxvr: EŁÉsîy8­jűˇżmŠ;Řs:6Ť…t<ËŚsŒÚѨ;yĹŚšÜ¨?›>~ęŠgBÖib¤{Nł+tÇ"€ěŔŮŇƙmjj–ú–ZYš7Ż}ž1bťHé<_iÚQú\ëý śŁtoďsmŸŘ÷o^NżĎ(ű ţhÂ~]Ÿk˝ßs?őž*Š/œ$s}“äôŽ_Y*kאž5e`ŃŞRTTlJ™jM Jœ€:ÓZSéűŇrşůËaňŃGËgŸ}n‚SwŔĽ4 ÖÁ<ÔjdÎ{úůçĐ+št 1Üł(iBšă—_"_ ޜîV[mi˛úí`Ű.iűóĎĄ5}ôqsĽŤ›{POp4XvŸ96Ţx#é*CűäËYťő•ďf5É#ŸV;yrÔÖ˝M›mŻů߉51í‹é Ý!–ÁŤXˇŃ“j­Ş ITƒçŢ!ý—>Ż—3J˝żŻ47ˇ˜ăm<űwڋëç˝^ ݁;]´OsŕŘ10˙Ýö$2§ŚYüíą…ÝÓ§ gyÖ ą‘ ĂübÖ–N÷ű—|! -Ăƒ<;™ăŁ&cGk•i1IŽůë_˙b&P!MŘ?ć˜ăäĎ>Č\šhŃbyőŐ×äĂŰŤ|hŁ÷GŢDĄKvŢy§ÉXLœ9sf`Ňx{óťűŕƒńX×é ­}…ŚNZßtÓ-!ŰqÄ_ÍżŤ˙űżĂÍ>u[é@–ÔiĹÚdő)íďđ—ÍŻ>e\ď şx'äÂU˜7ţ͚%óäËă/ôÄ7ÓEŰe>5ŽżuČÂ@|2;p,\Ĺsě%ޘ'“â3Î8'0ţŃŢRJÇý–,Yb’´4ŽuÓIA÷Ä`4ÚŢÉŽ‚ń駟Ëyç] ‡ňg2dˆůzĎ>űźIłŮę}8yä1rĐAšßÉěŮłĺ™gž ŠJŇťwݐ¤2˝Ż•ńíJô^xI ~ÚË´ZŇÉő—^zšSâÚQG‘đďjÓMG›ČţŢtUŤí;•WŢ|Z+H˙H—x’­uĚńâ%“֏$oÜ3‚ş9(}ýEi:\ŢĘĚ/iâŒĘ†q›ŐV[Ő5Đ$$۸qݘEămY¨Çw;>p 2ŘtąĽjĚ#UűŮf›­coÁńu×]÷šXFœôw óm/źđ’DcW‹WŸ|ňŠyݰaCMës­`Ś_O˔Ž3rĘć"ŔÍ6koIŞă3<ňXŕgşĚ,ÚnT“đ>řO+m•Ž]őB‡~?\pą‰ą h>/t˙^ţůĎsMťîćŽMőßŘQGýÝÄŚ+Żźr`îs†éŘdˇgwĆźşKW!Č$˜!˘x'`ĂśÇlýUZM-.‰)a+úz_pnÓçl”Đ~ÚçE}öĘŕöţ¸ö~˙žĐ˜ß+áĚŢŔc?~ëeŰ;’?ƒ[ĽEŞ ~“*ßo2MޖâÖ>ŇżvMĐś– -XOĘJĘAsď`ö{"şéŚďM+Œé˘tńË/ż2Áô{ď}r…‚¸i‚מűîm/\ÚC~đŕÁa'ë‡ňXƒQŐd<ďí‡xŽ×€OŤi؃NÉh˝ŞU[•Ů4aÎ+i΋VÁéßżżçs%%%’*C*ňĺ÷Ĺ-aŸ//ΓžÁF•HAžČƒWËvk–Č&#ŠÍżÇű',—šĆŘŞ† é“/Е’M.sOÔę@OKýRYí—3¤¤qšH^{rV}mƒ´Nž$´hÉbNb™&(ë}wťŸhďĹ˝Noő¸ŁűŤČűŚ˝r™I(óľ×0v‚({ы BŹöíÝÉí_ĚZZ˝Ź# Í/ĂË_”6Y` hKSč IfÝG[rü?äŽ;îŽÓ ÜH­ ´%Áć›o&‰şđšIP;>ŇA)]źč ŐůçŸ˛N/&Ё+‡ś×A8U^^.ÇűwSÉĂĄ¨cĆěd€“ąŢ°"ůâ÷ô´ô^ohôżsˆG¸F+̙3G–TůäŃçűK} éŚ?cýYsč")üě‡îyáA6Ç/áŽă6Čźě˛‹%^wčkuBËĄc@ş„ŁÉWšœĺXk­QŚĘüÍ7ß\§c2îJ$ý=œţy!UćubU/d<‚ę9Ŕ‹/Ž3‹—1cv”?ţńI”ţ;šč˘ó৆üMk,e'•é8Đ&›ldÚ{Ľń€dÄ2îâľ­{źEÇöýsgKţ}ˇwžŤA÷ ü.ĘšW– [E˜ó÷XéĂď˛ëâ!MňŃä+íˆăŚq‚{ţĆĄI[7ß|CHő2G*ĆŠJFcc“t…Ń#"—ŰŐ+Tű´ĆüŰÚfő9iÇ 9tłöŘ7~¨“Éscż‚uÓ]_Ú@ϕĘä2m9­ ÂyUSdä”SĽ¤öçŽö“Śőd[`ŁŐLčFkŠƒ!ZI’[ޤtţŇV7G–/_îY2>–6™: ŁŐË [—YlľĹô[ďÓÚ2Sď‡bľĎôXĚ]ńűíxÜ_šü1)ö͔ůó/@pŢŻSŰV$ă…ű~"­‹çy´Ó*ą:-‘Qc˜Ă;Ä r&C“ zč>Ób<š-śŘ,0Đ{ČäŽ^ŠęžşöěłĎy˙zőäkŹ|ŹWŻ^wÝXI֖ŤKż4TÚĐ}nąq€ČbK˘=ÖVŐőőÍňÜŤ•R]ĂE>]eyu<őr˙Ŕ1ŠŮüě ląÄ@ą<—I´Ńšçž%cÇ^Ӆ^4ąËݢҋĆ+zĄĄŽši5SMp‹ÖVH';/żüĎ HXť˙ţťÍdj4ZaâÚkŻ’diՏŤŽş<ěĎN/^šä’ eĈ’Ä?Ň!žăśşk Œťäýçf€‘n—I‡ß x/žŚFéőß;ĽšžÎüŽ"Uéô¸ťœrʉ&FŃĘWąĐî7:5jԚžĎ';ć‘ęýh‰NŸWٲ—lźJűŕŕôĹ-ňâ׾+m§šÓÚĽ™"Ö1­ Ś-€ŠŞ–ߟ*ůR-bćjőř˘•ÂňL‚™“\nzŤ‰jZzżĄząô]öśTÖż8\×ɌŇ}[ԚJŁń&UéąŽŽŽ>pë—~ţ í1ÍŰów´Ćtîˇď¤ýž&´š“žA‰ő¤_:ö˛Î˛~ľ^˙–iľ§~vy˛ňĘĂÍq։#jkkÍc]¨dÖ5´ú×vŰm#Ż˝ö†)_?oŢźŔáŇŔkŠi=Ľĺě$š_ß÷śŰn˛ďt€T+Œ8&L˜(ożýŽěşëΒ¨Â|Ÿť}…ÜôV•´Ä~}AD?1ݧîOl q†śYyűŁ ™5—ĘA]mÎźByb…ěşýňŔDҲŕ¸K.Ĺ3ú>uźC'iuâuë­ˇ2U蓭´ŽIa:ąv襛Řá›ož5­é5ÎŐVZĽ^ăüÔ8"SÚzë-ĺ•W^3ќ˜§´´DV]uUÓęS+Ž…ŤŻ´ÂÇ3ĎVÓ÷ĄqSÍmĐ Arď˝wšxĺŐW_—ŠS61[ss‹™gÓDśíˇßÎÄlá:ĹB+™ilř÷żý˙ě€$ĹőĆżžÝY÷ÝsWw—ƒ$$ů'!!Bpw !! îîšŕÜ9Üő€s×ußąţ÷WÝ5ÓÓÓ=śł{ťwőƒžîŽîŽi™zýęŤ÷ _֋Ću}… Šß ڍľľ5Â>˘żˆéFݢöŰolżývqśiSSłq}U"ÓŁřŇ~ĺőúۇ¨P(6éśÖZšŰ´4ćšÇşœ|śšœňʞ<ÇÄm´Z|@đ} RÜTüöIvN2şEWW§č,3f4úƒt"G¸…1–çK#cUç2<ˆ €ěý“n_ž˜ćLßŚšě ›Ř,íúőÄ:ŇŹ?>ŐĽ}]w9˙\ÔŻ'nËIýzÜůO ě…Éڞ“#œĆi2c5—†?CěÚ#T0ĹĂßď9ÚâŇK/yÉ%LOůŇKf¨ßO?ý ÇwRÜţˇß~3śÚj˄zŽ:ę8ᬔp´č-ˇÜ]ßsϟĆĺ­ßrË-„ŃěäÍ7ß2:7ϋ+ťîşŤ°ÓN;Šĺ#Ž8FDá0Äm6Ł(œçĂPÄ25h.XÜÂĺ/5Ł+˜Ü)°ÇĹBdé¸đš&Źl §Uą_ĂšűTaLŇ9+ƒ‰%K–żÇě@*áďůűϗuÎĺäĆ@°k˛|ĺ–ţ{ɒeČkúž>Ő0HŰ-ËT7…YL‘™çĂr}2šś¸Ëčü2^´]R4S,ÓÔÔ$ĽÍŸcxýŕ×D] žńX1ć|ÔŽśkÉŇkşŮeŹ›NąśöNŒí>ĺů+KŠĹfšc™ Ć ä[ڎóq&kďÝ"šé6™ľŘy'Ą¸¤V8¤xm~­I´;zJ…ŔŒéÓąCRŮJdŚČ%łWqű;­hęě]/+#w°suę°ěŞ …˘w {&ŰčeöeŠâ—-[Žçŕ?ĎÔb€XďŕWęˇ4`Ă)Muąmšë˛ŰzşŰŠ\Ąě…bŕ2Pí™l"YٗésĄˆ%đĺgČťôoĐ".őEÝîC ŰúS;X´ÄĘă˝0 Eźwľˇőîĺ‰.ÍŁ<žÍă„Ü?Fs[Ž¸—Űśš|Ľ4--§žmŁM…Ç14GŮ7ýËüS†$šĽîT(Šž"{&“÷äNAŸbž\ľZó°cŇ­yÄ6éśšs‚Çz˛šsŮIJϑJ‘Šđ$ÓŃ&n°dIHŚÇŒő/Ę>Gű”˜r2–NÓmŻzRן˜N3Ýz"žűŰŇięZÖç™Xżí\3źŢäőÇ߃šţ7Ń^)r¨ó…2çŰW8CéΝ;űŰ?Ĩk;ě<ć™çÄdÇŽ§ĚćřÚkoˆ~7%ŻźňZœ¸ŒěťďO‘ 挡çŸ'<Çn¸9ތi(V“8Ó;<řŕĂŃpÂvhŘSDvüń'‹œěŽő'ckňÓ1’Ůe/6ă’ç›Ó—eRżBĄPô^‚zgy0â2´.ÁÄĎNE^ Ý2÷-C#šn’ópB]r’КV-ðůwaĚ›ŕďn؇­nńÁď/Îťdçćĺ eÉô˜‘` ʱ̖Sž›#-f4}Śą˛§Ďtş÷; ÄG/‹?÷âźe_r::;…nőęz´uč(î<%úëXž|Ľkz…t=dş]ĄČvˆ^úŤüiÇrl7žӆűQäOíĐŕ>Žđcť …8Ü8–u¨ÎU…BŃŇi# ;™–ąŮ°+ž~ŠŞY\{đŢ?ór5šš5‘Ý-şš_zĎVĄč/”ýŁP(2!q™łœţő ScŢ}ŤéŻP l ?RŮ#w‰T™D™‹ď€˘÷đ>˛_íąÇž‘PÝhooě0 ĽBĄP(ŠP˝űŠ^‘Ěŕ“é1ç@ˇ‚b˜9vLŁ\OAĄŁwé.méś:ŹČ^™×ă,ˇ -a0\F†dX?Ĺ`ńƒJôŹęqO§ÁâźQ§)Ş*++‘IHâLöMXˇÜr[4ě/yůĺWE¨bŚ`$vĚ3fCC˘0˞“œQQţô§?âňËŻŠ–Íšő=9äO"Œ0Ă6őŐ×"lŻŽÔJ'•Ň…^‚™3ߢ8žü>űě˙Ή×cOľIáÚ˝÷Ţ/:Ő Óizčá"ŠĂwî}ô‰0ţ)öc(dN ËĚtĄýIeqz䚍ƒČ”ĘĽoV(ýG&@źĘhÓ0=r¸ł >˙+|=Ś%Íć/ŽĐL‘9Ň7kÂ!Ţ8lăň[bÜź{QX’`‘÷hľ(0>mŤ›,Ůůrš§' Fż3ĎGˇE.Ó-EÄ ÖmĚŹe=̜8fO¨Ś!Έ‘ă2š5~ű˘gjô˛üš^đ$Vuü…Fšź#„HéΨő˙cĘçcQý˙ 1CŹŤt™ŠS:í2ĽHL„_oxŁĹ3­8ӁŸ2ŁR‰ę EĆdŰéfßNÁvwwOźP‡Žnőţľśéî1…~‡ýśA 22Ä —­-ŁlEĄě…BїŘmúK˜Y{îqh˗¸FĚR <ňVŻDńk/ sż˙ϰźź\”+[eíĐÚڊ_ýęˇFUK´Œ}bLĺÍ~ŻŽŽn!>ťűî{Ł}T„v™ÂRĄP(ŠT¨7=EŸ@ă1"ęÁ*,5HÚŁYHŃb:){9lťş—;ĂëŽűg^żß!jďWÍę<­Â¸r=n˙ěë×â5ˇH!ÔżZűÁꔎî…¸Sďű—†ŔźôҋqŇI§ ą•„ÍöԒn0wůnťíWFÁŮG}Œˇßž-[°`!ŽťîF×:(ťä’ ăRV¸Á<č̏Ná'7˜rô¤“Ž+ă ÖEý'œpJtÔ2…Î|÷v&MšˆĂ? ýÍĆ# đÉÂô(€BĄPôš—ąlŐŞU"ęÖ¤ÎDqÇ˙‰żßłež1Ş,Œe-ż6ǰaĂz-2S(ú Fd˝ř—5xă‡.|ś¨+ZÂâŻbxeśWˆӊQ˜Żž› …˘ďđJ/Łcřü›,YŽŢ˝ ‹–âËÍć"Ú9ӂť-ŁěĹ@GŮ? …ŢFŽ˘ďżĽĽáeKŕ{ę1( ÖĎ}ÉKOŁg‹mŃbô­ÁďOtv9m%˘ďTáç??÷ß˙`´ŒŮrěŠ0Ý8ăŒSĹą …BĄP¤B Ě‘ng'_¸ďňĐb˙˘"/ÍŚü˛/xžĐҎĆeœéiěŸNýšŁ\O¨'Y˙Şwýšc˙xÁYşő'îo3şÓŒnfŻżŰgźŔi=đ…}Q#~mó›mś)nťí&\zéĺbtE* qČ!żÇąÇízž˙ţ÷żpýő7áá‡˙“´žQŁFâňË/‘ÄRńłŸí‡šš<ůäÓŽŰGŽëŽťÚŐ(ßzë­pűí7ăźóţ7JÄ Ś×ü׿./fýÍö ń̗hęĚm8ňęŚu+ ĹÚ$qŁL´ľu`Ř×7ُuŽ)Ě25d–@ 6ą™fmđĄ´ős lQŹŁŁ Mȟő2Ć-zĘ–qҤ‚+FÄ_*ôkŒÄ™îšËrN´ĂBĄ0 şç¤nž#ëŇ­y4Z™–ÁŒ“qŹ)>CźČL^\Ö˝pÚjrŮ(Uô4:ÚF ˝ŤUľŁ0wIŚ]Š*˙§ĐK ;˛ů@äĺ奎Ž.-'¤ç)(礢a꾛”ˆIĄP(rAo;h)2oiiA[{oź§:‰ŻžS‰ŠWĄ  Y lsł÷TŹb Łě…B‘ œâx–{´íhřTň08é),F`ä`â$n¸ĘǎGQM- ŞŤQ\7šŻ ÝŤęn@°ŤMóĄˇ÷÷(÷ÍGOööȗŹLĎň8g§VÚÇĹă/¸Ť×ţł6Ńo"ŽPśĘZAňóópď˝ˆwƒdTVVŕ´ÓNÁě…BĄP(ŇA Ě}‚Œ‚ľ(0'AŁ/š˛ Îb3[‘ł\ב˜r2Zż/ʂŽLكš×ďœizĘzŇŤßą!Íz’GgÓĺşg=öň0‚Č׋„áĎt˜÷Ýw>řŕCźűîűřňËŻDŠÖÖ61ŚŞŞRä„ß~űéŘkŻ:t¨g]ŒŠĆ üôÓĎâłĎ>‘hr{Ȑ:Œ7űîťöÜs¸t–ŠřË_Îb¸ÇóćÍ7:Á}=z4öŢ{/üęWżDYY™çąLŤůřă˙Á믿‰W_} ‹/Áš5ő˘#‘Ď6Ýt‘^sÇwŔڂiŽŮľW˝ŇŒPŽ4f ˆĂ:YˇBĄPô5é ă“ßŐŐ%„aĽKßŐyO™Â+‰O7ľdÄÁĚj{óťW Łžž^D嬝÷FÎyĘJOi˙$›‚‹f‹Ďj‡őŘy¤:O:Œ˜Z™ŃŔ˜’€ç­…;ŘËl‰É"–0ÎZ÷Ů#—ÉÉ* sâ!^XćfŁx]s?[qžÖń%˘˝çHĹă“§aژ%b[uᧈč…XŐř ŃńJçd˛ŽV•*SĄP(ë3v[â2ŚžĄŠłKĽĆh0])…?ßťUDˇ­ŞŞĺĘVQ( Ĺ`Ľˇâx ËÚÚÚą {ţ×ůô}7ÁďŸýƒ…öš!ĐvÜCřĆmśyŠ˝ QTi´ý•ćZőxŰ&Ă_Ó´ě=t,úJ;^BšľmŁ[GY4h‚žŮqöőč˘×qŢţОŽ×ŃÔý%::śý"˛Ÿ%Y¤V%˘ďčG;á„ăđ˙÷K<űěsFŘX¸pĄá/ě°|l՘8q‚č{ÚwߟFӚ* …B‘J`ŚČ94ţşťťE'çâ࣓Թƒ›m*Ę5‡hJOąşĺZtfÖŻgYľŞÉ~cGďjŻĎÓ,ŒŐďؘA=‰ŃÓ4Çůë.ď´PřU(Ć;σFnŽDV4š)4ˆ×_Ůľœ‘Ě8e;Ó92$›Ń!^ç“kŚóăĚ˝Ťpű;­˝ŽdĆČe—ąN…BĄX›¤˝LFcJK_ërŒůôJłĺnbŇă×É#@ ?ÂҢ]Äň&sžB͒bMr0nWŤ.ł}.,˜ŇRŒ24#•…ÄdŚă¤ĐL7:“ť0ś őϏˇW"6Q™48„ŘÍ.6łÖĆ úócçŤYĘ2ˇhfň<͇Äčerš$9F—ź†oZwE5XÓ\!U­ÂVŠ-|íÁ‰hhŘLDřŕ¤Dd …BĄX—ém-űąăhá’||5k`EŞ,×0ftFČè‘> š‡îč@k›Ž\R]éĂą*ʕ,[Ʋ,^6:;sű9˝á‹oKąĹƝFÇkť°o•݉ę€U( ĹşŒÝ–Ąŕš"ł‡—źhxtźź?Š*E]K*á|?ÚwÜ Łţ#Ćmąr‚ćCőč]ÄDš—˝ƒÖ١`häeäű¤) áW4‹P:B3}<…f^TfYmËľXQxxڌFŻXťŒ1\dýQ( …"—(™Â•ŢDü0#h„ŃlAłÖ(űJ3Hw)ËmĄşÄŤâ#“ĺ@pfnÖťú5ÄEgsœeWżf+×ăűn{ulÎGKї×^”h"tŽĺÔTPvéŻjđáüĚZ@kw Bč&˙(ňk˜P—ň"6Q ŇbŞČe …˘żČĖńę´mjjFwO7Ć}||ÎXjL).KĐéśHfŔĐÎOđmËjŒjš‡š…Z‚.ŰqA$śű´yÂŢç$…otžŇć ‚b˝cža{}§ŁgU݋Jî,ĹëĄGŹjM\ae3ʆ,FaçKP=i6JĘV—ŒŔĆs „ ăŔ%Š™wŞąe¸ŹkVĽ.ŃËěˇldɇXQ2•5řôÇąŘwťoŹÓ1şěQĚm‰UŤü5jD\¤Q7Ű#™=˘l…BĄPŹ‹8Ł—15÷KoŐ˘—\{Mń>8nŒ“&äcĘÄ<Œžg3źŰxî•ä’Ýw.@UĽOLns{66E0ǰ—~˜2ćčc­Ágóқ•8fTƒč€2dˆUŽl…BĄP .˛Çۗ¨ ťť_śü€YmóD/PŔÂÝ?Űç<ô)–umż &žq.JFŽB_R5jW1ő´-ÊĎ/ŔđsČ×ÖÖ4„_žBłt„gVYœĐ,ŐqF÷RŕcuÎDwá^âŮY§ ˘˜) …BąŽ fŠŹńz)é1çý§Ž°ZÍ^‹h*aÍQŽÇíů,“ú5GšîzžÉęwż.[gŞÝ÷Ř?˝ú5GšˇT|–ŃyrJ^ăPäW从œU(( ŰeJ‘˜ČâĆnxŁîŃujJ}8eF%ĆÔ¨fFĄP ,RE‘ëmmm"ECŐwO˘lőˇHL 3ú—nŸt曎âG'ś^y#ęV6EV„0Ó]™ÉÎÍhŠzšĐiÔĹČd<9QHF;‹N:Śžjú(ŒŽĎóŃő•z—_œWLĚŽ!€bŤů7í›îŐľhž3QŹóT#z%#ęQˇáwľŐť¨÷|yA3ŇĎłÇX.ȏ‰ĎtΰĽňŒó/ş:íbłxŰnăÚ˙aEăA˜ťpHĚĆ1vÉÓ;1Şř?XŘy‚ü1ľ5Ăů۟—r8* …b] ˇ´LMáůs °ruÖů†Ů0eb>6Ý(›LËGAAň6zú6xűƒ@΢˜UVjŘf ÷ˆŮ5Ő>Lߚ“AĂţš;?„ożá›Y!‚šůüLXžŞsřűP° …BĄXoioožŽgV˝e…0ůjTßNŠMç­Á€ŔhgśœŽiżĽĂ†Ł?),‹1ťÝ‹îÖ%Xńɉá{Óś5 áWÔo“DŒ–*™XL︚Ž;ą˛l7ńlĽ}ŁP( …bÝAőü+r;>éÜZ˜mĚ.ÍÎ+ŽŽĺńé"íűkŽýő¤ő¤_ż]pڧUO\ŞëţšŁ\Ďč<˝ë×űëžőčśSńŞżź{¤č°U3E:Œ­ÉÇĹżŹÁ?táłE=XŃ_Żá•yŘz\!fL+Fažrp+ŠľCś‘Xĺqáp--mś5břˇ˙1Ĺ`Ńčen“n ĆÚşź/€‘ÖńFĺYs=Žś€ŃîvóžbcÝüŒŇźV´ç@Ął•Ćźľ7tĄůŐ|´žV˝ŤŔ¨V˛2MÓ˘:0ťNŽë† ŚEOW6™ĎřŻkĹ,Zą+žž ĘÇ/ÇŘŢ˜mŢGq)¸aăŸyîŇą§Ę„uír=j´x ÎŰV”׌)u_aĺšÉ˜˝¤SÇŹ‰^柇ęüˇŒëß ĹĹE(//OÚŮŞ˘˜) …b}„xŒpúî'5čoƏÍĂô­üŘhZ> Ňog)HŰe‡ž\ŃUVňłÎÇÖűţ k“˘Š1łçł¨Ÿó_ä/8Ëđ•4[[Ň~EűŠŇ•ŮËź˘™šgŽ÷|ŠüŽ/ w×öâËHôوč …BĄP <”ŔL‘6évÖR` ą$´(fk:ŒĎXcf‚3{y|ŸĽ#šF˛zҊęĹ˙5GŸ¨žq=îŃÓ4Çůë)ëIŻ~dž ęA(ĂýSĢ=ő”B‘ ČöݤDL …B1H˝LŇŇҊŽÎŒüôäőt¸‹Ë„öËćpsF3 ëˆK;)0Ň|朳˘N ¤ŰXn5EgĆďik9†u-łîntćĹhmmA{}7š(,{ŁŘđnRŚ9Äebf—ćb×ÄlÝň)Ę,Ÿ>݇ˆAŰ‘řfţAřţٟaňžŻcęnĎÁ.+Š™]XŚÇŰš˝r .ĽŚsÎčer‡ j?ďŐńí‚jL˝QŚ1Vü*šZś1îEJJJŒÎ㟤ÎGĺœT( Ĺş@&éĽŘA;wĄKWôĎ;=Ĺ`›o’ˇ-Ŕˆá>dËöŰˆ¨gĺJŠłkť;ťtĂFĐQW—ůyiŘvKż˜/ ăƒOƒřćť Bý 5㳚ż(ÓŚ„/MřS° …BĄ ¤}ŐkĹńŒÜţżU3]vV–văĹí&cżç`mQżéÖŘřĘëP\UlhéŠ`iSDdé ˜×^R ‰ěcŞóP‘…íS7ĺwŒšeďţŁüŘś$~™Ť˛-Ą™Ç>q}}îűTľ?€ĆŇ­Ĺ3ŽŠÉ~đƒ˛{ …BĄx(™"§0ÂF$˘cU`9ş´Î8mV”¸O{ç¤Ý5Łt” "4-Ö§iœŮlç8“4 1[\ě3už(Ľ]łÜqšË=ȸ~͝-ščÎß\şę!((đ+ƒ]ĄP(ë%ŇÉI[†˘.4.GÍźˇbâ2gF`ŸĽĐJÉí0Ef1U•9Ó"ÖF—yi'PŢ4—ŁźőG4†&˘ŤłŤßíAđĽ:„óDÔ1!(ÓěÂ2+z™Śškş4St&ƒ­E7ÚĎŔ™ąŽP[)fý÷gXřîvŘꐇ0bƒ/Œˇ†<Ä Ëě‚3™:ӊŒcSľiÎŰĄĹݲըđŘ{“˛m‡ëČ׺0˛äŹé>Ěč@nEuuźs7§ŁrP* …b ‘môU‰L/5óĂ*ôÔĹ}X1ÌL#\X MlřĐěj„´lĹivƎÎÓv[ůqű}čĺcI‹™—cŇřfĹŹ7ĺ•}ŁP(ŠÁ…eÝÝ=XŃšŸ´|Ű7_Ǔۗc/ PÜ@żb´ŠűţŰüý’ŒűzŠaÍ ŕƒy|ł4„úöHŇýëĘ|Řl´;Lňc—ŠŘt”?­Ď)(‚q{żŒ%Áű‘ś8,Zä%4KGxf•Éč zâ>e]Ż˘Šg1şý“ÄłÎĎOěŠVś‹BĄP(ƒ%0S$ĐÇ&G\’…Áš‰Ž¸Œ„V€[t3#y=ÎrgçĽîšfőkś™ĎlPÝÍQŽ'ěŸ]ýš#ú›P­°eŞ&WŠô˜ …BĄô¤;‚Ö-çÍÍ-čęîƸ÷n"6ŰDD(Óm‚2ÍEtw1šSd†$"3ÎŤÚ0ąëj|Úz2–źş9‚ŸOó‰I*" š&–Í iąô˜r]b7 (ÔŇľ˜ĐLœŞűdM÷ =]Ä:Žcéź{ŐqżÇGŘě˙ž@aI›iŸi6˘fł‡ěśLBT38 -ÄŰTÖ}]š㆏Çň†ŒŹíˆŐmœpMÁ§XŮšˇŃ‰^€˛˛2řý~ĹLĄP(ë ÉŇKA,^ćĂÂĽýóNżýÖ9— T&ŒÍĂ6[řńÉAô5óŠg7eb0.”eÓ( …b°nôŐÎÎND"ź]˙ŠčŤ0w°ĎĚŰý=¸ď pěsß żˆř|u6>ňŘ´öohŕĄşđř§Ý˜ˇ&„L ízĄçÉCóń뭋pČöĹ"ĘYr4ŒŮůF,˙b"ęš.2ü9 żęU˜ŽĐ,㴙˛ĚÖĎćH›Š!ŒŇö§ŃUr:şşşP^^nnMbÓ({GĄP(ŠÁAď†*(0 ‡Ă˜×5'ž֘"şŐ™é(çzÄľ\‹M2ęludP|šUŸ¨;ýÓŠß~žšg=‘ŒëˇÝƒ4Î3Yýńĺśs5ÖkĂDŞ)%0S( Ĺú GUvuuKQśâ{ÓA[ŽX“ĺr>>9E,ĂÇp¤zĎ#(ŽÔc—ü`Dřč†sSN_^Üş˜4s.„g–ř,*6ÓÍš,vډT›2šĎͨ+(ÄÜwÂ;7ž€ś5CÍs Gb†KÄaˆ¸Nzâţ.ŃˤĐl‡IßcÖščö¨ژ/~=´ľľ[EîÎęTô6RŒBĄP(š˘ˇéĽŘAK?Ěg_— ?(/Ő°÷ý“†sm˛˙ޅ"mgđšĹâňYJŇ}ţé”+ …B‘kzÓćđXŠŽÁf6~ő)˜3é`ˆńÎT`éĐJô—iţ'6HC\śŚ-‚ż?ӆé—Ôăß/śg,.scîꐨ‹uţăŮś”ĐČČ-Ď@ðk w Ĺ˙NŰEK]Śińƒ“籏}ĐĄUVŢń ‚Ć3Ś}ÓŰď‹BĄP(Ёƒ˜)˛ÂͨcYOOÝánŹÂʨxÉUđ”AyL4eœeVOÄsÍŘćqeqž‰ő;„q˝źfýZü=ȰžˆGšÖ]„eáóiŽĄŠ …BĄ,ô&zimmâĽaŸ=ŽÄô—²ˆ—° ą:œ"ł°žBdf-çśÝĎ.ÇřÍ_ą Ę4Khć3Ł‘iV™\ćÜXXËŚ“Đ<)4ó9DfNĄ™Ű´úŤ‰xýғŃŃXm;G NX58ôDAYtŰ\`ťĎ#ĘW#ĎřOő2›;Ô|=¸ĘpPv‰T`™J`ڈŁ7`<~^÷źxQ좌˜Ř,âœŮöO?Ý%âgvąYúé"˝Ę5$K§™}ý1ąY$Ëtšîĺ‰ŃÍ"iœOiűp”––Şô˜ …BĄX/đę¨ëččD(BŐ÷o"í˜q"2ŔU”ć\vŚËBłHl.E[˘,œmťĎšɋ"2™•i6qYt.#™Ĺ„f2’Y´Ě‹tfŠČâǡƧȴjűËňśuxé˘SŃŃXƒ¸4˜v™s˛%öčgŇ7ŞŰy/ÇŐ4ڌŰ~ĆTí˙HD͕NédĎŘm=UšBĄP(k›tŰ(vÖ1Ĺ÷Włú~ŔX~đ‹ýÖ?żÁ~{"Żź§_Í*ĎҞ&3ʎQ( ĹÚ˘ˇéُÄô˜Ÿ68Ĺez|‘ é†áî=† ?H_аéÖŘäü&ÝçƒyěyUfÎ  żágď}u>^Lşß˜nÄŇŕNíW†QȢŤŠĘâĘLŠťß@ČxÖrPDś(ťGĄP(Ёƒ˜)r_ Řń8?8/QÔ¤{ˆŁ˛ˆnćî‰b3čf‘Źę×E\ő$Ť?ą<óčfŠëONSÔattĚŸ"ž_AAzƒŚ­ű)2 …B1p鍈ˆ"%vćAÔüđRG+ƒM<ĽĹ ËtaY2‘™=‚YTXŚ'¤ÍÜvď ąŃŽwF#™E,AY$NPŚ!lĽČdYXŹűʍfZ4š™<ΞF3&8ł‹ËbQÍä>í+kńúUG!ĘOCP&'=^XfŸ€Ÿ˛XiöÝP”× żžXlľš}Í܅EĆłŒˆgĘg›-Ę&R( Ĺ@ Yz̈ářĄu:"Qľż¨; ë‹{đôÐkşĘʱɕ×%Ýç•ďzpȝÍhh_{ŠŹëĎf$łçżîIşß¨]D{°ĘJyiߒ…`,­´™ŢuűuĂÓý…xć*MŚBĄP(ëëO\{EŸBçsŠ7‡šĐ˘ˇÄĚIť]i‰œ4—ňčÎqĺ6ĂŇu˙tëyĄYÁz^Äłžôę×lűëi×ĂËňş?q!„íęšşőkŽýÍ{†U„ߟŸOéM …Bą~B'W(FţŠy(lm|ZLřÄćQ*´Łeöˆeśýě~FŸÇś¸ý썳ŹLłí$ŰfŤÜhŤ7Úîv ý9Ţţj„QóI“va–1 daşnšşŮü›B1iŃh˘n!L§dOýíł˜rŕÓśÓÓl/FÓüQXőő$,~#Ôφ†yŁ1óÎßcˇŁ´*śęľűăćZüşó4ä›=¤Y"yYŻŘÝ:ŚĘ˙!šĂ“DšLŠä•Đ]ĄP(ë*ÉŇc’ođv}ŰćŢĂÝvěÝ ´Á̞ťŕ‹ŻƒeŻűJ Ÿáw?`—íÍgËHó„Ď\Ú9öe…BĄP(銄¤ýňiÓ,ŰÁŽşœ…śĹgˇ,ĆO>+DEgr‘UÚíjĺ™AQuç./}ۃcďoFhíiˢB:Nx°wV…˝7v,ë/ŽE`ÜŐŔňŁĚŤ/(Ž˙ÉľsÉYf}aIöń¨§¸ó-tWî T¤“EGŮ; …BĄP l”˘D%ÝČnűQœT]]…!ĺC°UĂśŢ<…=EiEăŠKçWnK§Ški×ăUî ů1vÁ&Řčë]ąĹ÷{băŮťbäŇi(o-˜ßËúeĘĎÔŃÍ2‹ÎćH§™Áő&Żßʎȏöššj•SĄP(ën´œS¤ …PőÝ[ˆF(Ó/"KHéą,čebŮgE2“ÜŁ™E"śČfz4˛Ů‘Ÿbż?ý “ˇ|؊VfF,ă˛9ĹG/ ‹gžhŠĚ¸ˆgŃHhf”łű%^?ár4|;Ő2třK:1tă9Řô÷/b˙ŽÂŻďš[ň2 ?ÎÜŢĄ Š'=Iš|<ŃšqoňôX™|~Ćź2˙ƒf)űłt{Önë …BĄP TŇmłŘIÇ}ç/îűąŁÓˇ*@eĹúŰŃWUéĂöŰô˝ŔnÎżˆŹËg›ĘžQ( Ĺ`BŚÇd°‚Ď›gĹű€h:LxˆËHW~÷ě= š˘yŤí1z˙_xngjĘlâ2 Ďĺxăœ>Yč.sčÔß`ipwkÍٗÍ,˝(dńEÎ2-ĺqĹ]o‹gŢŰ4™ …BĄP(*‚™"'pDAQQ‘0G†Ç`xp‚mA´é­XS¸MĹ h)mB8Ď1ÜÓmPƒgšÍśw "6€ÂŤžź SćmÂ@1*Ť*‘ŸŸ/Îľ&\‡PC•=hńóĐV^žŇvëe&˝úË㣛épDVKťgš=™-ĎśţšĐq/”ŔLĄP(ë"é8ޏ\+UĚůÔ ŚĹ„PDF1óŠPć\OgŮ­Ô6‹)Ĺ#–`Í:H‹fćĎoÁć;]‘ßÂŹCý˛mDy4z™Ît–şńˊd&ç°EłŒqŤ(@řĐQ?ďţă\LÜ÷elzŘâě..— mÄx ýâ]|˙ü6hoŹFYUsbô2Íq­nŰĹůj‰űň#™"3ŚřNÓŁˇG؝y-ȏ,D(źH“™­-ŁFĆ* …b0ÂöKF`]¸¤ } Ł—íşÓú˝L˛ÇÎřäË Ń1ŢwŁóvM—H“Šl…BĄP Dz#˘ˆšśKKOVbuÚţuş}0!„FUcâ˛fô†°ß .¸Čsű꜈—ő„ž(Ş;¨ă¨{›ńĘľVáGdŘô›řd äÉԔZBżRşQČâĘdG”žŢqőůЍçĘ*žyyyćžÚ:Ę6R( …b` fŠ^áŒÁνmśŮ kÖÔŁžž……¨Őëj !Đ@}Ţ!6k*m@GQ{L ôq†o\šîşżŐNJ!kĆ LŻÄVÓˇŔĉ„!ʈőő â<9/ •bx÷!ŒëŽt˘ąhÚĘŃ^шż'iýŢç Äĺ¨×mm4-ĺőş•kŽrÝuŻú}á|Œ.ž,îSK™§Ş t…BĄP >zăŕłá0 VĚCq[Sź¸,š3Ĺz21YąfZÜ\gƒĚĄŚœěűňüóä2lbK•é“é3-љđF0dÄÇŘ헟bŮÂ=đĺťç łudbŠLŠá˛ÍŁF˜%,3Se•jć\7všűÂŢhZ0;œy#üĽńvŒ1+(éÂćÎ4#Ť5[‘ŘR‰ĘÜĘ\…ifuućÇ&H%ÚôDŚ˘ťťGĽÉT( Ĺ #]!źŰr(2:čt,_ tuűїlżu*ËUŞať-ý˜ůa}E0”‡Ĺˀ)MĄĐgš&SuŔ* …bmâeż°m#łZć‹!ůń!ăę´ý6ćwě9—Ţ˙%zC×n?A鈑ŽŰčć8ţ!2¨ÔˇGpŇĂ-řďąŐ•夸bĺ˙Łô'Đq'4KCT-ł÷ĂɨTÇţî/Ąď-J™eť( …B1xP3ENĄq8lŘ0 :TŹSÄEąŮš5kĐĐЈâ`1FÇ TBg¤őůŤŃT҈ć˛üńN:ÝfçĆĄšˆŚ<˘›ÉMľĂ…đm̘ŃQCľ¤¤cÇr# ؖă…aő!8knnAŞi ŘD‡ÖŠŚâ5hŁ0ޞ_8Ž~¸œ§÷ůkŽýuĎztxGOKŹß.8Ó]žÂćÔŐÖ˛™9Ł•ĄŻP(ŠÁˆWzL3B„áx[ř˘é1‰›x,•˜ŹŔءژʍeŁ…>ł!§§Ďg[ćźÇ8 Ç°':ƒ@ké˝—2Şb“â2kTŞf[:´FŁ&ꉅ?ţß~r<:[GÄG/‹ŠÍdd3›cPƒ˝ âüôˆ™2“"łŐłŚá­ž…Ý/¸B¤ĘL°1¤P­ĘpŇńڍôEep‰^&×Ý"šEąl9ĚFgx_+T9ä3ͤVĄ ‹-Ć̙ďbË-ˇŔĆo…"Œ„ý駟aΜš˘ƒd̘1Řa‡é(--…BŃ_ČŠ ÷­¸ŒýťŠčeQśß֏w?  /ł;-ZęO˜) …B1IwĐ_L`6/1jYRa™ľdŰgnm7ŢŢl4vűz)˛!”ŸÉ§œéšýž÷;ńáüž•çŠ÷çđЇ]8t‡b×íážÁŸƒß'ŻĹ)4ÓmĹéÍ\öńšĹÖý]Ÿ!P˝ˇř0R*”?GĄź0RáK/˝‚ŽŽ.üěgűŠw…bD ĚŻ—gy˛ýhR`f`ЏĆDE\MMMQÁYK‹•Ñނ­A´Ą …ő"ÂYsy“ťˆK|’–‹.T[š?P€iç˙‘Rć0Nš^]]-Ś 6˜*: ՌçÉyaW!ŞCV:ÍŐ=h)¨7ÓiS ´#6Ţ&Íó”}ąönŃÍRŐă]żW5\˘›•ś EĹŘ Ő¸+ …b$ݨ ě ĽX hţwư–]”˛Ú 1vKE$^HmđhŘSYVděWbŘ%5†cÍW´Ξ† ÓîôÓĚăÄD1™•6ÓgK—ŠŮ…fŔř žÁřiĎb…fgF4sD/“ËQ%ťn,˘—iĆGI…fšĹťW=.¸2Ţaw‹)Źc3cnËž\hŚyG3‹2ÖÉF‹•‹°Ň°ŮÁl GóxôŃÇqůĺWetĚńǃ#<ëçœsŢxă-×mŚ˝^…şş:lłÍÖÂI5uęô–ÖÖVvŘhoďď1?|?&MšEr8čĄ‡Á믿‰ĺËWˆ?ÓącÇbŸ}öĆoűřýš˝|˙ýÂAůÉ'ŸbőęŐčččߊťvŰměż˙ž¨ŹŹD_óĂ?â/ů/^Wţŕƒ÷bÚ´ Đ×üâżĆ˛eË1tčźđÂłI÷ĺ;íŒ?N]rÁçăç?˙YŇcŽżţ&Ü˙ƒbů曯ÇvŰm E˙’Žý";hç,đĄ/Ůhƒ|”—ŠÎ=ImľLÎÇsBč+ć/â3 ‹żábßüë_˙ƓO>l9ě°CqňÉ' ˇÜu×=¸ĺ–ŰĹňË/˙ľľľmLœpÂÉřřăO1nÜX<ńÄąŽąŽ_ŸBĄH„íŰ6ňCۤ—y Ëě<źs-vţv9ň"™GëŘqw” áşmM[WźÜŽÁÂĽ/´cżM Q[–h–ÄBmŒ†|wˆ~ł艁 ’E/óšŮű¸lűt.\E´aזo&×öĚ`jËśŰn'!úůŐŻ~iźĎž ĹşÇ@ú>Ţ~ű¸óÎ{ÄňgŸ}nüíĹRůĺW8ę¨ăÄ2Ë÷Ţ{/Źë¨ż?Ĺşˆ˜)˛ĆîřdÇŹAKăĐgt|RĚĹNi,ÚE\ě ˘1ɨfŒĆČa…=V:ÍÖzšşŃß€Ć’z4—6 Ť°+ţĂÝl\ňĘöZ 3DŠŇ5\Ů!2bÄp1{:Mžki¸ Ă;Ć"ŘD§ŢŽŚ’Őh+k@kE—:ş™wšćˆÎŚgYł<ÝĚŹ_ÇČ<3=ŚŰˆű}J瞊Ń$ …BĄŒHg Diý2Sź•JL&—š_Šá`Ř(…ş)(“‚0ťx @\:ʸšmßĘ Şč›BłśnSŹmËíQĚŹe[ŞLółŹí†!1aƒ§1AÍ~ŽĎgžƒ`OY\ô2Ÿ=ĎwTLgF/ăÁ̧›‘ÍŒ˘•ł6Ŕç÷ˆ­{ a;ěDk2&Ůďę& óZv+ł´o"ýŚ;ýžháŐĆúX‘*LŚüÎ5265üG̞=›ož™Ńy{Ö|NMbâš<ňČqčĄŔ‰'çšb#]ZZZ…¸ŒđfŊN`vŐU׊ë%}ônŻŽ7PŕuôŃÇ Ą“ŠŔ8=˙ü‹†Cńf”••ĄˇPu饗ăĹ_NŢđ˝Œ–wŢy7N;픔ŞŢ@1â‰'ž"ž3„ż9šqPUˆËČ;lÇR\÷…‹0~ü8Ď}żůćۨ¸Œ|ôŃÇ)ď|„ďˆ[lą9)>ZąşoŒmˇUßFHŒě°­żOfŤ ŒgŰí„W(ЁČ@x?P >Řśą“}E`YĽ°Lî×P؃Gv›ŠCŢü™2ú?ynťń´vĽýZş"¸éÍ\p@šëöŠŠ'sžƒ›đ+†‹4×§”BTć,“ƒŃ̊ÂóŃŚ€ …bÇî+Zşt2!Wţ݁ćGS(Ö5”ŔL‘vc7řBĐŃсś@Ţn|ÓĘŚ˘6\‹âÂ"ápgÝvą™ýGœŰ‡&&"E\ "ĘYY¸cşÇ"ŘDťŢ†úÂ5h*i@kY3ByńÎźdé4k{†‰Îd‘şÜ:í÷ŞN“×ĚHltęó\[Z QŽAű˛vt/ďÂâqߢĂ8Gł[}€gşËd‚3{š.⊸ďŸIýţŽ2ŒŹc<ŸjX …B1¨ÉԎąďĎ6=lLzGJښcÚ-{Ô2ąĚZşmŮŞ 4l4ŞT>Iqdňă˘eZ˘Ř śyąažŠ2×͌BłÎ ˛tV3!.“B3GTł|Łm/+*K1aę§ř~v=z–”Ç"˜Y§Á4›PX>3Z˜./IÓ˘Ó÷/î‰!ţ€1Ű|ÎNĂŁŇXŻĎ‹]#ŕ-(C’(fţˆ¸fÚt_lťíăňőFcfařýŚPl §É<řŕƒ0eĘä”űő—Xe óˇżý%. –´Áżýö;̜ůžŹÂHK…~ú)Ȗ1cF㤓ŽÇ /ź„mˇÝ;î¸ÉšđÂK˘Ă_ţňçŘwߟŠçŔcĎ>ű?ŃŮxĺ•×ŕ˙řz; N=őL|ţůb˝źź ťďž›řâťÝŞUŤ Gá'řîťYhmmçĹAOřkôŻźňZT\FĄÖyç#žŁ˝yŸÎŚâ¤ŔŒ|üń'If~řQÜ:ĹcÉ~) űńÇŮbyë­ˇĚZ´ŤčœŠžĂáş{ Lgß ŔjŞ|˜ŠLmŢŘCʞQ(ú‡c=ZôősŔŰYg…BąîĄGüÚř^j~ /Ż~ …Z!ĆűÇbRáDlP:CK† ç´4ĽĐŒ˘3ť1hqń…Łąą1šŚ˛°Łľ¨C¨-„@cMyh,ŽGSi:JÚăĎÍf_2BDŽ"łO ĚŇ5@űÉĎ `Žaö9ąŹťť[œ'Gňϙ3clŠ9|‚ żGž„­űŘëś­Ú?6aťŕLOc÷úKÚjQ3Ś&Nt§"•) …b]Ĺ͆1Ł—… ǖŽÂ c)Ý"•EŹe˘Üšq˙•EŔđîÄhdš›Ř ąöŰ)*sî'‘˙TőWÇŇmö`…Í2N2'Ӏ—ízĄßœŹňďßţ%ę—O"-ÍrÄů,᛽U×|z4z™)đŇĚt™–ČŒëcúäž1lÚ((銿ç-Ž0Îą1?‰°ĚžŽ%ŽGý•ć‰ęŔÍ )Šüˆ€žš'FehlťíÖŘe—ĄHÍO~˛§x?pcţü8ĺ”Óąrĺ*<üđ°ß~űˆ4÷Ůň§?ýQLŠÔđçĂ?ËtĐ˙őŻçEˇ1"#>ż˙ţ‡BlvţůîUŞLŚ/‘ⲝwŢ^řwTTTÄís ÇáÓO?éU)2ťöÚDĘĚĄC‡"×ŘGáwÜŃŃkëĎw$Š ůͨ˜1ŠLA=œ˘?F˙›;wž§Č•÷1bĽb¤4Eߒi­>˛ŚÁިćžmśňCšá=adˇ^íAß ‰g;f”Ůďó%v÷węĚÍ6ŰTLn0;d9°ó€ö‡BĄP(nHűeqÇʄm™D-3b;őř¸sďI8çńo6Űď⹉B­Žžţ@’+:şƝ4ŁÔ}{É^¨ =ˆŒcšJ›)Štäő́^4L|ÖFĐeĎ(ýĂčŃŁpË-7@ĄPŹťř PdttR`Ćĺ;ćšA:ŒŠ[ďÁ9xžíe\łň&\ąčZ<źđ1|°ě#Ô7׋Hee1ňY{{ťX–é$40‡ ‚ 7œ†]wÝťďž+6ŮdcŃ0UVTbTÁhlÚ;4슝îiË7ÁŚđ ŁçÁФłĂŤ‡Î˙řtŮŔcÇs˝¸¸Xœ×V[m‰˝öšşň:T­ |˘3ľ”}‚ŐÇŹ;&ňˆçţVÇo´îäőŘËŤ{FŠ´'ɢş) …BąŽCQ폂e ʍ`fôޏĺˆG9Ő á›oĽ€‹ Č`9;uŰą}ҝÇ5ć0Ed%EF#n|ް*sj›ęʍ텦Đ,b׸t">|ú8! ‹řŹÉX‹eŸ9ˇ„ca1——ŹEçÎŰŇV_‹Y/ěa~…bŽ'Œ>V1dˇˆ5…‘ţşá(ŽŠň„A¤ĹO†”Ż7ˆ(.ňYŚ˘?# )úމ'ŕ/9W,ó™>÷ÜóPôöônŃޤޝŒ8×ţ÷żĜi(/˝ôâq™d›mśĆŮgŸ)–ů~úÚko /b„ƒÖ]Ę{ĚÔ R椭­ łf}/–)”ŠŇźřä“ϢËJ`6°‘ßĹUŤűNý•g|eśŢ\ĽÇôbł óűT|ˇşŢŹÜţťŁP( Ĺ`Fśi‹Úbď17ŠÍ÷áBlźžôłÄóéč ~S‡tö‹_yn{âłn VOrîĽăq”¸ TpYˇt=ÎŤGűÖşçˆEeß( …B1¸QĚÖszŰÉF~ Ŕźž…f?Ÿ¨4~Ÿ†p“˜>ëţů-y™7 &`JńDŒ)Â‚Âččo™NSŚÔ”PÄĹô5œxÎ---"jGČ755ŁÂřo\ç„Zƒhőľ˘š´Ů˜ęQŮSáS† 1•^˘3Ż{cŮk/ă:ţ łťčŰš‰ď:Ńűc/‹4Č÷Ó^ŽĂ™LłíŻŰꏯG3:zÇšÜföűĄ˘š) …b0’ŽĐH¤Č GŕcĘ3™ú2!=ŚmŮŮL”ŒśtĽáŃm Ÿŕ‘L÷(wĚa›kśĎ–…L‰ÉT‘ösŃŇôŘşUaòIxţö+…ˆŒ]˝Ě§™sizH;AŹG,Ç!bsÝÉ 1§îˇ/ÎŔF{żŽ‚’)(ʍűҙ'O4Ţ1ŠÁÍL‹/i?#Q'3#Ź™çżOĹł¤ƒr]QDÇ4ŽoźńڈFÔÜÜ"RŽ1Űoż~÷ťSŠ^˜ţî‰'ž‘Š˜’ž R‡éÓˇĂţđ{1hBňÍ7ßâđώ;ţŤŻžĆ6ŰÄDEožůŠqĺXlżýtTT”‹¨UL‘hçË/żÂQG'–oťí&ąéŢ{0Î÷-ŹXąR\ósĎ=Ý˙„Nўƍkܟ˙Š2Ś ÜgŸÄ}§ çîťoOz>ď˝÷žHçHŽ:ępwÜ1qŰđôÓϊč^ ,@WWˇN;3fě.RM:Sî¸ănâóíLŸ‹€w啗‰”‘NUůŃGĎyŐŞŐâ݊ϖ÷ěwżű † †l)--ť&'ź÷„ďE555č ‹/s4âű`2ľŒŠNɤI]÷Éćočä“OĂ|”P—ý90şÚľ×^•°Ďťďž‡gžyNü-ńłJJŠ1yňděąÇnřĹ/đŒĐ— ž+#ťľľľăűďŔĆo”°ÓaJńŸűÔŠ/á‡~ÄG},ţÖÝŕ1däČâoA101Óc†ĹňŠŐ}×îM—‡ĘrőŽďEU•#‡çaي0ú‚Ťř÷›ľoÖ5ż ŰĚ_|Yü>Ňá PFžÜ|óÍDdFF^ě+ř[Çöšm}ŒwÜq ęęŇ%¤âŽťîÁ-ˇ˜6çŸ~ R=đŔC"Í2m˘˘BŒ5JDjýż˙ű…ˆ”Ҳą/=ôpŃ~°üŐW_ˆk۝p`đŢ{ď/îז[n!îW_Ŕě>řˆq`ůňĆ9•ˆAÇl›SĽ/,mŔíśŰ7ß|ƒŇ3:.ÓL3RnYYiÚçA˜Ęý‘Gţ+DŢ´Áx<ż×‡~6ÚhCÜpĂ͸ďžÄ˝˙ýˇ‘-|.`ńꍯcٲe"ťČ°aCEDß_˙ú˙„řŢ 7ť×›ožŐ°ďËŻ˝ö˘ńťW5ŕßk‡tý/QűĽcM|Ä2ŰĚőŘř\‰ŰnŮkŽ˝ˇŠč)*ÁÄ-śtÝöͲ 掟â§9ŤB˜ľ<„F&vű֎žŽśĘPœßd…LFşˇ L÷8{YĎ13ÓĽöo4Öţ 7méË÷x'´îšç>ńţÎ6dčĐ!˘âš˛Ýr#S?‹„÷âńǟmëŠ+Äsè´űÜŢ=/šä2<őÔ3b™uŽ1<éůđÜďż˙n×óţÇ?.ƒ×ř]zńĹgě>ÚR˙ýďc†}ĘçśÝÝ=–â}HŐŚÚ!Ď>ű?aë͝;]¨ŹŹ~Œý÷ßOOq‹HLśŰn'ńŢ~Ě1G×r„¸OŹkѢņ|öŮ'Ĺűy60CŘwÜ-ü F;^‰ńăÇśá/°çž{xF썝 ą?›ýë"Ă–Ü ŠČÖ˙•Ťzžţúq˙iĂѤ˙fäȑÂC{ş˛˛š"›ż?…b Ąf WŇIIGÓJ­ěY…vtÄ žěvŸíĐ ÂXZ"ڎ:ßAIc &řÇaRáL-Œšâń’Í— ž=Śl„Y^]]-&1Œ~Ć’çE]Ĺ4Œ­ć DŁ9|x˘ń‘ŠpĘíúĽ¨ĚžNc€ç_Pĺ7f÷!žÜś˘EÇěÄeÖLŻž¸“s”Çz’‹ŰŤ1¤fˆpŕÉkh†: éË/żĘs;E4é8aJ$ް÷şi¤ýęWżŒFşPÄČĆŘ,Đ1řŕƒ‹—: RůRGGőŻý+áhUÄP'Šőśá2kĹ⚌xÉMDf_ö™-0:eňůĐ@L…iŠĹdNQYB™edé1™†E¨Đ—%NęÇ/öĂű/œ„@OŠńńşŠÝ˛úšš1Sh&„[V¤4Ms|ž3QŹ`aŃt™=Ĺ˜ýötl˛-JŤŻ×(,6œłíąkąŇmF”q“ŁK,E1ţóůŃśBÂßÍ Љjgžyšč`É5lĎĎ8ăńyÇ3lŁs*.sÂë=ć˜Dű+áűmś;"Q œ­ .[űâç?˙™čŘâ}xýő7Ĺş´ƒd']˛ýzďĹI'*ÚI ď;z9qÄa"%śšjßůóKö™gž+2mHŃóp@;^âąűď0ŽœÇżůćŰxçwqĹ—"PĐuöŮŠŻíH›ž˘ł3v7:Ô˙–ľ˜]Ąč äűIcO3r%,[­ÍK*şđږăą× “î5ĆsŰ;łěđÜf¤ăQŹ}‡ÄHiˆĂdY\°„ ŽăĐĹŕjąś.úozӖ‘ž~ˇóÎ;3v䟸çŔ~N´-~˙űßáôÓOńE‘tý,lƒŻ¸âę„gÎö›Óc=a´­G÷çOqŰ鋑ł>řPôY8Ą`MÂw]t‹z.÷ŁŘĎi÷˝ýö;řŰßţ)˛nŮĄĹö”hń~¸ąjŐ*cŰŮqśa?őŰoĎÓÖ[o…K/˝(ĺźsĎý‹°r}(GyŒč“Hűžú(´ňŠż>A}ÁĽ—^.ŢAěФ­ĹÁ÷Ţ{żas_˜–P4šřűS(Ęc¤ČgzĚٝócŃşÜěGŤUŁŤ’Fusc 9+9ZŸ/˝ô vŘa:.źđďBt¨œ0Ď{ě-–S˝pĽ;ŰčäH ˙>?úč1Ń1zÁçCĄPŹßDt3‚Y^›% “"3S§•Č̘攆Ń1ą+&2#şŁ-wŠÉ܄gnBł¸HfÎs0Ef=ĺřxć‘řúƒ-˝–“iüë–HMj¸„“ĎvišILú í§˘ĂŒ’ú͋{`“˝_GJŠƒ†çŠî‘Ë´ÄČeą3ŒźP,j™L“)ĎE3m“ň‚Łó5l<ËÄÁëJ´ŐŤWăřăO‚BçÔžűţTŒb¤ĂƒíŁ’Ń‘Éś'Ÿ|4!#Üu×˝b™#`=ôB¨Oç%#Ü}÷˝ÂAxÁ˙8Ǝ#ć?|ż8ćŕƒMáŁHÝu×mŃz“Eźčh÷“dŃ?Žťî1bö§?ý‰ĽČ‘¨t Ľí™nńĹ_#JÝ 3’ŽCBG]ˆFĄű_˙úwqŻů>łĎ>{c—]vçAgŐK/˝,:é\ĺČÚn¸6zě}÷Ý%žËW^y%ŽĘ•â çHVvj^ýMbšŽŽVˆżřœů7ÂÎH:hyŽ?ąĂqƌݑ)|űăŸC[üŚ›n5—ÂĹ_Š7ŢxKěCŃÔńÇƒŢ˛ÓN; 'ßüů ŒĎšE؇Ů8Ůzó7ôç?ŸctÜwˆeŻçŕüţąÓ—„˘ŠířwÇĎçča~§8"–÷Ýwˇˆ “ tŒK‘ĂŒŠâ„ä„éü-ÜjŤ-D§mc ,ř=ľŸS Ě:ŇÝÚÖwíÜ“•ť0›n”—ßěA_ĐŇjƒëR,ŰAFc{DřŰÇÎB —ů;ŎAŠo) şęŞkĹoL œ (¨:ĺ”ÓĹď ŰČ[o˝Iřűś)lßŮĐŚ`„)ú+)@ćŔJvňsĚńĆňĂ"‚[&ôĆžŕž×\s}4ňW2á˜ĐÓnŘkŻČ5´ÉÎ;ďŻâ?üĆsßP+y}ül^Łc°ífÄ];š°‘%̔qţůˆhŹóű'ĎăÖ[ďömiF1q‹dÂ(R\ƨeřëčľp`'rüýď&´ż™Bťý¸ăN÷M>÷mˇÝFĘŮÉO[‚qÚdüÜ~űÍ9í  ďЁ‹lӚC튅eb!=a™ý¨‡Ś—a—oóQôhk“źE˝ďĎüł÷ćpÜîîâŇ`áFFƒüÍçdw>Éu¤(łÖe¤ţ¤ÇĹŻçGę9v0aĐŰ`§7mé÷x …Čl˜Ůˆö Łlń˙Çb0ś™Ŕłě´ÓNöŹ'? í:Ú„çý›ßü ÓŚmđy<Ĺë;餢Çň>ą˙’횡Ŕ,6`÷˜ď´Î“~I‘EkÎ{qîšç‹gĹŔ|hSyŽôu0Â}źčÂmŒęI{Žśě.ťěd<›=PSS-Ţ÷é‡cťýŮgŸ ŁŔ:ŁĘJžţE! ŁíËhçҖá}ÍÚşü>Ň`Ä\Š˘¤@ťˆ×MżĆÉ'Ÿn\ăFȔŠ˙+WőPŘG›Ynă÷”ö #‹ńx>öEŸvÚY¸öÚ+{%2ËŐߟB1PŁőŻŃąéD/#lŕřbđCçčˆ ˜ěѲb•Ř–]ĘĽhŞ>҈úîF|Řý ň›ó1*&ŽÇ¤â‰W2V4ŔRpfnfçIg§ ĆĂIo;“ĽÇä4^^áVű–'Šîl×ëV.ű–˝Ł›Ů*đ¨GF&IV˙p}œ¸_šHŮrČÁ Ł9iźŃČ{ýő7„#‰ikh¤ŃĄáÚUąţŔŽŠŚ1Í Öčljj2 ĚE§;+™Ţá€ö‡BĄXíˇœ‡B!2ŤjŞüšLřš´xń˜Sp– đ2v`d­ĺEF#•oŠĚŞÂŢŃËÜdöś=aYś˙´4DKűH,YşľŮVŸťtąšÜ°j*Ýĺ✄NˊP&#˜‰ VD3ëüĽđ z,€X”qYlšľž F˘vÜ2¸{‡­‹äŹŔpîvű=Dfp™˙”„â=Ć<áH~ěDl‘ĚčHŮ,{ĚiĂ öÔ ĺOńĄhçČ#ŰžëŽťˆF‡ŃÄoNçŰţó¨˜ÓYIg‹=´;XŒXôÇ?!‚Ż˝öş=Ę6TÚ`œÓ1Çy_Ś­ĘŽîcÚBAœtz2J+k™ÂűÂÎ`~Syy Ě8ĘTFť 3НCüŽňĺ†ŽK;Œ{ᅗۄ6-Nňz؉Gč̔Ž1.ťŮť´ŮJ(*şúęËăFŁÎ˜ąť8ˇăŽ;Q|O.ťěrĂ1ś}ƃNGđžőÖ;ÂŚ˘ł•“„é.şčYŐë„#™e$ZŚŢ ˆN8:mÝRdxћż!ťX0çŔç(ĹeŒžĂ(%ŮŚľ†:Ü÷ˆäőşeÖ]ŔťOÁŃŻ~ďy|ń†›xnűfŮŕM)ůvŠ÷`*_ů@ËăˆújˆžŽ¨L–9Ł™Yűx Íâ×ýz(Íw čűÁŢ´eýůOݔŠ,oťíć8? …YG{ě‰Âfŕŕ$ŠÇ(¸öşćd~9P´Cq•=Ĺ'?‚.ŠŚçΝ'ÚQśŰŇöc;7}úś˘Ýäť*ż3ö÷oö2ja:lŠÍŠĚ)0Ł8MÂúíPĐ#ŁSˆoˇ;)„Ł 2ŠĚ8ŕĐ)0Ł€‰â2žg3€33SĄ3z|÷Ý,ńüéKqƒâ2úÎ:ëô^˙-đœAíß˙žDřěđ3(>Ł‹çD_!ŸĂ@ ˙WŽęĄ,Ĺe|?šâŠË„ţ@˛˙ţű ŰńÄO6;mëÇ{$ëTŕšúűS(*ƞ"#ěł==t‡şą8¸ŇęÔł&łëŇX֌ţVÍVnMşcň("„…Ą%xŁc&W,š/~ď-Ť›W  ;r8ç¨r.ó%ŰK—ŹaŃ=\Śdű;×ĺg/ ,Š@c÷!˝ëMV‰–ką)‹zňB]>Á0z´hCŮƒĽ? :ÝhźŮ§ƒú­ üÔSÎӉĆPĽt@*ěđ”á¨Ď=÷,ŃI΄ÝvŰU¤†ŕ(ÂQ$ …bÝ'Uş)sôwŘtŞ1Z–ŽŮ_˜e˛ÜmîœÚó Żd™1•ŤŒĺ\ekBŠ2cšťť_}űS<÷Ňš¸ęĆçqÓ˙ĹC˙˝3ß˙“1Žwß;‹–l!ŚŽ@)BšŽ°fž~„靾؍<"Ÿ‰|FJ´ĺÖłřÎ`ލdű“lr†Ög;ö ψpěΎ3 ŁČN?ŮykgٲebÎČRvq™dҤ‰bäâ믿”š` ÂΉŤŻŽEâŘ{ďŸxîËhوË…t(‘E‹G˜N^xáE1ç¨×3vŰFGĺ#<€kŽš"ĄóWBÇŁÄë3RÁŽfv<ň.ťěb×T'N0:HO˲Ł5č˜ă÷Ń ĹTtČĺB\FŘ9{÷ÝwD˝tRsôü~ó›ƒpůĺW ZވtšřJ—űî{@Ě9Ő).“đű(Ótfҙœ);ě°˝˜ó™łَŒ^FdşK:@yNDŚĎ´óÉ'f﵊<2đđę  űfĚč9NůÝ!\yS^{ŤK–‡ŃŢĄŁš9‚ć„đß§ťqÓ]b˝ˇP¸vÝxô™n̞BłąŢf|ÖâĽaźňFŽźąłfçÖV˜ÜG‘Ţzf˝NYşiT"şžöڋ¸ôҋEzˇěhĄˆôćˇŘ;iN8ád!Dި(7:;ŻwÚđš˝MôO°í!l (ňʄŢÚRĎďEônĐž‘ßšžJIčˇqKUĘó§JŘ!ç$×í;Űmˇď%Ű\i‹¸}‘R,ÁﶛX,iƒe }]ü>“Ł>ÂUNťƒŃúĽ@žłu-Rbđ"ż‹=HŒW—ś¸Lö€$VôÚT+jź#\—ďZŢÚĽŁĄ}đ˙˝Źn‹ˆkqُj˛ľdń]´•Eq[w)“ƒS—3 á`śgźČś-ëĎ÷xÉŮgŸá:HoȐ!˘#ü{}ňɧ=ëHĺg‘×E(ž˛‹Ë$UUUř÷ż˙%ü ü<űŔ5"aLÎÁmvřNËc(^ŰgŸŸŠ2ű{°„"{¨ľN1´ô“1b™Ű ž_s͕xţů§ă"ÁfĎbf%ÂNqaßégœXÎ{âĹĐĄCDZÄ\őˇ2 —S\F80áŸ˙ź Ú?F‘ÝúŒŒ>Ëń´'íâ2 +œqĆib™ƒ˝ěćtÉĹߟB1P3EVHă`nç"őP aSLpf/ ¤Zô6|řO´<‹Ë–_kވÇ>…ĎV|Žć֖¨ČŒŠrœ ^ s:B˛tu™2t~Ϝ¸óDa‰‚łˆžŕĚ,ˇ‹řŇœ•śÔ˘ŽśÖ5zY2ęv”p¤„ěÄR‚!Yştit™#zěđ…aҤIb9SŽBĄxôĆ)ĹQjbÔ˙ʇ¸Ě)$Cj‘™ŰźŮčœm´O”_óŮĆKę˘<Ă ŃŕĚÖh7ˇ ĹÓϟkoťOżt>˙î'čč)FH S$n úÂĘu§°9§ŘĚ–%čဨ-ŞÝ‚SĂĽÇ´vQĄ™ůßŇď'{ˆËlŸQaŔ&$CLPfŞŢË9Q`f7–Ź“Ô#šŁ ÝâY†ÎŽBcZƒdÓ[o˝p ˝ć˙ü~ł3š;ČŽ.ŽŢăčK7člËv^ŔçŰŘŘhtÂÎŁúä(ĂM7ÝÄč¤ÝĹó8ŻN×tůĹ/~ľ…eš(; Ńô‚şš‰Ť8‚R ‚ܰwfş=żTđŢźńƛŃspslKř=’çČžŮ@Џœ°ł<×ĐaĚ(ĹÉ͔ň^1ýGŸrĘĆ5ď‡Űnť#š2ՍŢţ ĽӐQˆH8 &YŞ {¤ťlžGiKdô1‰tŹóŢŮ—ňŽT–i? ;Ťe4@•sp ͟`¨f“sm֏!<ôxşş˝mśe+¸ĺŢN´śeo׾ľë¸őžNŹXém t­=Ú%Î)WŒŐ7QäBÖł]×:`ů>ÎÎHˇÎS‰ěŘÉöˇŘ#p1…"Ł8đłŮ9؟‘–¤HÝ ťČ‹‘$2Ľ7öí# ÔÍžą—O˜0>§éJíPüĺ9“ö;őŁFĐďę$Wí;ÓZĘĎrƒŠ\ 3Ú}δÁŢ~űąĚ{”ě>1‚>ż‡ŮňňËfG6˙FÄ vÓ!"¸ Šž"Yť%ˇą/)Z9śÎC0=Ö).sî`Nœ _Čm{NôŹŤ¨Öý]iaĂŕ^&YÜčžbť dˆŁ$Ą™—đĚMhGzř}|šůű™Î÷d0‘m[Ößďń„Â"7ᑄƒ’äůžůć[žĎ#™Ÿ…×ĹČř$UŰČT„|Ď'3gž'‚‰HX.ߊí‘ČěëöÔՌŞ&#yÖ%Sł;Ł—)ză~R,愂m7qÜ믿)Ž“Ď÷ ƒ’ˇÉŇdÚLú1Ü`Ś™Â10ÍŞ´E~ö33Ť}Œ ˇ>ÂÁ˝ňyPšl ÝĎ~śŸH3J8[rő÷§P TŠĚő”lŇcڗe ˜;çÁŐśˇŰŽq嚣\wÝ_‡ÍžuŠG7:LW†W‹éĂîQÔ\„ńţą"ćĽS1Žvl4…Ś™ˆŚdĚde4iT,ĚOŒ wţŽözľřb-i=H’NSîŞŮöŻę&҇–ô˜éŔ‘ŒbĆNFvę8SĤË{ď˝/Ôç̋žfM˝p@ą3vóÍ7Ăoű›'ä̙œ„)O8ḤőßxăÍ"ľšĺ–zÝŮ鄣%9šń™gž†ŻĄ¸˜Ąë§ŠŤt\Śs_řŚsěż˙}óćÍ3 ě.átÜ}÷]qčĄHę&™ŢÇ{ď˝ß¸7ˇÄ•Ý}÷}b"Ü˙á‡ďG&đ;.Ą#šśś6şÎ†Ůłg‹e9z$đťÇNN:îŘAÇŚF`Ԉßýî7Ž/"ýëߣ//—]v‰ůăĆ駟%^°řwyŰm7ĹĽ4ÚnťÄďÎ1ÇiLG‰ô<đŐĂgÇŃ/ŒVCç#ŸAoaÇ-…œŻžúşĺĂcŚc˜až¸8SEŘá¨qŽ.âů3e#ŽpdGÓIű÷ż˙5!e)… Ěëç "żç #̑ŕüźdŕLŕý∎ęćË^IIąŃ);R¤ a* ˇh?„CŽ:ĘüŰżóÎ[Ĺ 3ŸéÓO?‹  ŤŤ;ŁżE˙ …Ĺožoy›)tJ– S¤Î´ÚFŸ×>Ö\6ĄŃšąĐĆČf>ł†íŞŒ 1 &˘Ţx÷÷xăƒC ŃŽS8šžRÓd*K]¤śÔ4Ÿ)ˆ‘ÇŒe]ŐřXf,ű8Aşö|ˆe1ˆŚÎ„Ź;ŚvÓlę7ÝZÖmëźwk2#•y˘Ĺ>ŒQâ‚ţÄt˜ňŮËËfJĚŘéÄToňČü:;Œ;Q”űŒ=Ú:lë)dYľj•p˘Q8&ŁwĘ˙vŘÉÄ´ üÝţĂżo;í´ŁHÁ`O8Řu×ÔQǘśˆƒ ’Ůüvť xčěă=~ĺ•WŨRűçńw_ŠӉîÁś”ŠşĚŸŤÄœm˘ÄíůĽ‚Łg™6žđzíNU7ŘÎń}ÎËš™Œœ-Ҍ555‹uÚLÁ@N;íLÆť=îžóžQĚÄ`Ś™ČţĆŃ!̉çÍ:iSĐçßA[[;î¸ăna‹qt2{„dó7”´%ě¨Nö춅Ľe;(,ŕgÚ#’ńˇYF#“ŃË$\żýöť„=ŔhŇÉ.÷w;FąöH§ăM×s˙ŢÎćxLŽDSŒ1šX:úď–VűyHv úŁOw‹:R6΅ŸsĆ Ľ(/ëýý;şoĆíF"˛^ďsěé¤Řv˛ \¸pĄxăôĂ?DÓhŤ÷ú#ţüçóŁÚ뎝*gďé"#GzA‘ź$›śŔNŚöż;|˙fťŔădŞC ĹČňœú2zÓˇ'dsť¤ŤŤ+é€ŮŢ´ď555H#[ţÝŃ‘BČúúú¨ śÍ6[%­ƒ~˘M7Ý}ô ˛AvÓǓJ¨f:đ8•ţZ100a1lÍ"íˆebÍc'ç_ďÂg“‡b빉ƒ‹ ŞŞ]Ťië^w:ňۺݍ/SĽíŕÖɤGýRś…Ä}âĘ\öŃt$vţ7+zÝşŚ™Čś-ëĎ÷x }׊ěGúÝiđܘŠŇÍ/žĚĎÂë’moŞś‘°bżŰqÚ/ŇaŰLۍýLďż˙a\˙›TĹwF'c? ĽřNöů°ŸFŠÂ™îŇ ŁĚ>őÔ3böÓПĎÁ‹ź~ ˓=S™y@fúJöěŘ)Y´h‘đc9Éeńňň2ő.Œ,ŁwQd&…ôëva]ŞžZ~ř˝x㍷DŸiśäęďOĄ(™"+(Śâ‹ůóâ B-QÔ$ËIœhJ”Ë Ńâö‡K=nőwĄßfăczĄíěÝ3ťWí&ű˝íTŠŞˇČŒŽą°áŠěŃşQŠŸ˛?Őyţ‰×eœ9­kű kŠęw4R–Q?ŽŔ ƒ,ŘÁ쌴3|řđč2Erf:Đ G§#ó´ŰĄAË4<œ˜‹›Ąňí#Ů)˗őřăőźŸö”Œ$ŞÓ+Sh´Ÿyćš )hӐćDŃѕWţ;ĺhÝż˙ý„ѫň>đn˝ő&a°;Éö>ööűË<ňL@řťĹsdj ÂPÁš€ŃhŽ˝ö†¸Č9źnžhp˘@Š)]9ŇÁÎ9çœ):÷čřžüň+…PŇ)@â=§¸Šüţ÷ż‹—9áý˝č˘ĹýNńŊCgóxvŠ'{9JGüœ}öŸĹX;| áDŃٌťă˙ř[Jg'CB_uŐľI÷á˝áçÉR ÓHqâőňťä•~*ř7r饗‹şěđe×ÉÔťA2DňŽ;.Šß{růý§áśŰnżЁü[ ĐŮ`O‹é) ł‰ĚDdśy*á™FEąÎĽŠixňĎXŃ0IˆĘÄfť~<:7Ĺeq"3hV9ešń‘f‰Oœ‚9×l"~-*:łęŇuŤ~óä´čbť°Ěŕ;[™Ćh—]vÎř¸––!žĄÓ‚ˇhmnśŞ„ŽłććfÜyç=˘bť Ó*ОĄCíÔ`é|â¨?ޏ<ę¨Ă{ "](Ôg%Ű:2ím‚=ş‡˝ŁŘŰ>? ńŮŮ餡ßYÚŁÚ|œŇß‰L`ä˛OSAĐşúęëDt<ÚZ×]wuT„÷ˇżýCtîłsZÚd˝Łśy˙9vÚÉÂÖ˘Sř‰'ž6€<řŕ˝b$´Ţţ Ľ;™%§vVÚÇeú$ŒZĂkůᇅă‘v$€˛“ÂĺŒPč@g3yěܖ3çيk‡ˆž{qSuĽ%ĹšiGg~0ěęô˙ŚćĚaţÂ0&ŽĎLŕś`qX›.ŒŚöÎűěżwf‘Ýݨ2îWeš†–^D_sC>ŰumÔ:ýˆĎ?˙˘x7bgĄźj§ˇżĹ’CůSÜz6{‹%yÁs’żËö6$]zk_pŔτ@›÷›öŒÝ_ÄçD؞§ŠÄÖ˛}——äŞ}ĎÖłŰ`vߤÜg‹ü,ňK8S(zKo›c̤€8yÄ2ۚÇNn[cž‹ťwŠ­ć݁ćđYx ĚÚ{Ö%™űľřKęl÷+‰`,ĄÉEDçÔrŮGú„lBł|ŸiŻ­köMśmY˝ÇŰI%¨&vAĎ1S ű:$鴍ö6‹ý\v{„Â0ڌ|Ďe$Ňęęj!°ăŔ2}şéâ/‹} |ˇ=đŔ_‹2ŮOEŸE;N(ŞşňĘËD&ńSFýä1[nš9~ň“˝Dşmgt1ťÝö˙—~_—|WďKŇ{ĆąhyŮŘ ëüŽI܂C8‘űpŕ.ßaܲ¤˘?ţţŠţB Ěžxzń̑„=ͨ´ ˝čZŠËuM‹m˛ Î2¨GtšĺĂ ĚH n9“ĹĄ9îx”Jř•Á•˘“7˘G<ĎSv캟żבěÝ,Ů}pŻ_Cqg9†WĽ21z“Ľ(ŘÓáPT˜.t<zę™ŃPšÝŔX—ź>vÖ0Â#4P łá†Ó˘!}y÷ß?Üwß"í#Gy‰(”‘ŁfŮš–Ë{×ÖֆĂ?:jT3^Fy˘Â0Ë4ŚéldŠźOŒępƒsŒ`@Ă|Ż˝öDmm0ĚéŹăœŸAÓŮéÍ}äý`!݃éŽČÎ;ď‘’i:W—vÚA}(bô¨QŁF‰TNrdĹešHăđ×_“XŚńǨZŒćĹßHŢŢSFM㋠_LfĚŘ=z,;˙öˇżˆÔN|‰šćšëE/ Łw]yĺŐb™éN<Ń;JSsQ EńßGüItpÓĚ{×]÷ˆëڍ‹eěŒÍžČwÜIⷎß}~Ç8˛ƒĄ9B‡×ɗ;Žâŕľ0B™×ď̒%KpĂ ŚĐŠ/|ŒžÁöfܸqŃ}xďN<ńTŃÁďGVóď‹Qů¤ßGŠ÷ř;ëŹÓ‘ çžű—hŠ5žżěć‹…tŞÓŮĎNâkŻ˝2ŠČěž{î3ţÖżŔ˙xˆˆFÇ^+#ř7Č߉üă"qoÝJzzl/żŹĂ7%™Ľ9wžĹůÜôřč\ĆĆĺŤĆâևţŽîP…aĄË¤•ňđXťĄY!Ç4Űş–™Ň2ůŻfeÓŹSÓÄĺIĄžOD/ł"•é– LE.“ĺq"3]ŠÍ"ćý3ţ[łp$†ŒľÔł’ŃŃÖ\ćă„]P†xÁ;ň"Њ{LašfŹf;>zßĚ´ăš<Ĺ l?čH;ůäÓâžtŔqD"Ł-rô#ŁTRŘĂß/Ř>PDĆDŠK8"Žmí–qš1cw\|ń?×J'ŹŠł™jBÂv…ľt„ńÚ{Ű!™ ŒK1xGG§¸O˛=`›ÄçCź˘{0ňç%—\šÁďŸíĽŃŁG‹ka”´ăĎź}–d›Ö-ŐT2n˝őލCô˘‹ţ!î 9řŕƒ„=đŘcOˆ6ďŠ+Ž6žg‹ď:‚űÚ}çž{–ęŸ}öybD8Ű^ť˜-WCŠČö9¸ ,ҁ2Ú˘ü\FUĽ`LŠĹř÷áŒ˛Œöí5ľŒż‡|W1ë›ŢŻWЁɍ‘šů°ţňŰ`ĆÇń˜Lf_|“ĹçÇě÷“BäÂ3:-߯;iľú úmN8ᔸqWM™2Eź‹ą]¤Ż€íŹWš˘ŢŔÁK §Óą“+슽Ě}2ľMsa_ppćśŰn-˘Ć˝ôŇˆoâDѰNFm%LO՟÷,úŤ}O†ý§Ó†&‹ş› é§Oçťb?•^I1đHţŸ4Ś­ŘMXf_]^܍gˇ_|¸Ŕ˝‚őË˙ä**‹[ˇvN)4K&<łĘâ„fšńĂ ö(Ž’ţzĎô3Ů˙+éűœŹÍâ;îM7Ý*ĘiŻ0U¨|çeŸ‚Ě\łĂÓńä“O‹w[^#ë”ďź;g?1ƒH<óĚbŕüťďž'ŢŤiWЗÁž%N|çžöÚŤâgŰśöćŮĽKŚĎX‘Ţ÷ÜžOśĎ ţý)٢fë!éŚÇôÚ&ŕßwÎľúH5{7"˘áŜչ٘IËľhšYżžV=>Ýß*ceBîG(zzŁ‚#ČJڊąäÓhĚo@Są1•4˘ł¸Ýő<3nfFÓłŹÇpܾץvTkô˛Áš“đyPBŞŤŤ eyÚÇRĆô|„˘ŚË/ż4î;ĂN–3öŔA"˘}PĚbĎĎhěŔ"t‚z Ědd śÎ€˝…xR\v NJÎc;zѸfZ,v^sÍu"u4şO=ő$‘ĘĎSrô/ŁTQřăLĐ›űHG%' Ě$Ź;U¤ľTüĺ/睝‘,Î8ăœh9ŸÁqǝpŸ˛Ęěh%L1vő՗ÇE ›1cwń9î¸ŋÉe—].^hěŁŘAÍďhŃA,…T„b<ž?ϙB’‰íř čDešFű9ĐšL‡đI'&^a„/btܧ Ÿ……tœňšRhĺě°dt4Чř]çç<řŕĂBhĺG1ńůßx㾎QgřyäŃŠMŃލ7^Ś™‘(ä;ůäÓEjKFŠŁ`"ӈJqżˇW\qYÜË&GióZ(8ťđÂKŒŽóG<cř’ËB(ćä)ŚŃäšňˇŠŃ]R…ŠVô/>Ÿ†pW!üĽfÔŹ¤"ł$Űíb2ˇmr™“Ý–ĐIŁ7ßwşBĆßy~q‘HEĘKşË<@F3Ĺe>+ľĽ&ć2zScF´X3Ý &&Rfj–Cöhf–°Lˇ ΤČLLLca^€—ąź§ŁČĹĚ~m>+ژfF0 !AP'.cŘŞŽŘ=â2-&0‹ž‡kVJS-Ńl† Řް=8üđ?ŠßŚtFךÁ´ŐúÓĹDÇČ|đĄh›™ćÂ“›ož-+1rŽŮwߟöKt˛t`Ű˝÷Ţ?í5#dČъ/žhÚx^Ń=ńKvţR”}Úi§áťł-q‹:’ öѧgœqŞ|őt¸ÚiR\&9űě3DúlŚŽ`ÚivęňźdÇ7SBő%{ěąťh_ŮÎRto'—Cɰ?‡‡şO :čKhň{Čďă—_~'0c´2ˇHŢ´ËůwÎűÄÁ JŃ #˘)´ôťőFËMz̆ŚÚÚ3wź/\œygǢ,ŽiëĐŃŘAmuďucGçáŰ Ě|šiôŹK 7ŢxKT\Ć6äČ#ƒÎk”V{ i=đŔ="#¸ŇÎůóŸ˙Š[nšĄW"ŸLŕg&ko}Kv4ĘŇôę͝}ńóŸ Ţe9ŕ€Q;řŽOŰPś }™łˇôWűž űskhH)ŒŃW˛…IÍ]`M†}— Ů  /dżJ>ňDbť™m:LŻU.>ş…ń÷eŠ{Ńňăw#Tâ{fYáşÓć–š_K s LϧłÉK@f•EľdiŠĘÜĘ ˙N(bÚ­J4aŇ_ďńvěQ›ź ý"a‚Ląˇ;LY ١E賲3iŇD!˜gűÇw]ökČ(cöŕ´_eŒ™PčçbŸűnˆÝWď6Ňޑ6í'~űÔč[‘Úďż˙îč1ňٕ––ŕíˇ_Ç@‚ďřRdçmI‰ý{˜ ƒÝN°G•]šrĽxwH†ü.3Ŕ‰}0l&ôÇߟBŃ_¨áЊŒĄóƒÇŹöyą>G=6öD%bS$ZŽ„ý#ĺîű[ݟVÄ 99ëŻěŹDmEľˆÔ՟Ć*?‹÷ڞ´ăüăąyp+ěTżś_°+&-Ÿ†šÖ!đ…ó3¸^ˇrÍvl÷ z†…G ńD6Ą2˛H#”!k3Â×^{—^z1.źđﮂDĚIN¤ˆĘžŁ!É믿!„1Nřŕ6ÂČ štvŃ ‘#{ÁŔK4E'Ó1Ş—[8` :Nqaçî‰']—Fꤎ÷ą/ŕ}>űě3ăĘř’qÓM×ĺD\FŒĎœ/—]vqBzKŽΓO6#łŃńéć,gÚJ9ćňËŻżŻmóňËćˆa>ť°Ń F q;v<2RčŹ›/G™ŔŽtŠ ÉŃGáš>/,ŒÂ>ÂżËd/ýëyž˘űçńźíâ2IiiŠÝɎ>‹Láč#Âh8Lé6’iă72^đOË2Žş˝°ňŢs̑Ńuçߏbíb Ľ4;JLő•n‰ÇÄ\K=ˇOɜ٧._Źq†9żë?'˘˝ťa=lN†łŐœ[Ëb˛ţ‹î#ˇ†Ě­FGdŘśgH“Ű#f bť1iá¸ý"â?ݜt=ś,×őˆm96éÖž:˙ÖĂzŹI7ƒŻŃ_śMb]‹M!Ä&ję¸Ӑ–uYb2=&*3&˝;ĎvźU—čͧ­›i¤htfF}dJn/[Â.ÖNţ>Q(tŘa‡â?˙y0ę¸xá…ĄHD:)ćaÇ+yóͷŜ6–[tFó’ŤóĎ˙ł’ť •íŃxłŃ:†0ęh_!ÓVťĽKç÷é˛Ë.‰śŰW^yp’ŠŠrLŸž2Â{FßĺäŒy!ä='}ů7äÄ. ďËç ĄÍ˝ŐV[ˆe üi{}ýľůšÁí†]DĆc8HAâLŠŠ¸H?‡Ď—űv/WĚZ[ł;ˇöŽĚË6=e{{nî_]mî]Ťš–:}Ř`cćLspEel/hƒ¸ůězű[,á@%ž7sĚQ˘&đĂČáý…Œé#ĘJ(ĚN—\Ú3fěľ!¤]#çěœedHśďÉ  &} ö6Ő Ú)éÚ4n°“Č(Äɐ‚sâôŠČAŠRbŮ;8ŠÜ`śi>Ç1هŰGw=T—9öł­ÚˇtäqçŒřż@ŁűwßK”5)/rˇM‚ÝÎk×\Ö=ʢ›´ Ž‹_ëfŸŇ—™ô×{źH% ’mƒ9¸ő5¤‚ÂúłŽ¤BFăű­›ŻAúŰĽ]Ĺ÷X"í;B›OöŸ°=ţôSs_ú)8°<ŘOC˙ĎÝwß}Żć )X#ňݟQîíĺÚĚj“ .8mĐőĹNvIŐ_#űëĚă&![úăďOĄč/”ŔL!pvČŮםËĚCAĚéZ5ÁCÄ ÎŇÚßE4ą™SpfěWŰ]-~x“ ŠúŞ’ĆÓO~˛§H1ČŠjýšâLőMĂ6mŰc×%{bËĹŰaĚꉨhŻĐ‘$÷!’äţĉÍ‚3űţ"ŘJ8Ę̑Ą4ÔҍX6PÓcśśśŠh@Œ(tÝu7Š2­‡vHĆuQäÂg–Źą–Î"ˇ‘†ŒPE˜FďÝwßOŘNą Msߟ#—0tŻ4H9äŕ¤űţë_÷ęjüöˇżń܇"4/(´‘Ph㤡÷1×đEăşënˆ+ŁřI { ď;ӏF4I6҃#k¤aţá‡%l罣XŠWaĂôň{͗•c= Š`¤,Żz„iĺľżůć[ýžü˛)bäóűÝďô܏žƒú­XژÎË0§“:YŻW_5Ex%&sfsťźfˇűš FácJOÂr| ő‚ŃŃ8*œHџŒâ;Q$Š^Îý‡(††• §Ľ ń1ô^T&Ę|‰Ű;}qFÍG_lŮ &íľ™skYŠÉBÖd•٤e1áâĹcś­QŃYLŽą1…dŽ“.~ó¸Ź[ë:ôčş)ŁČLˇM°DdÖ•š”“śîUu[œ¨,n ůl‚5›Č̞6sÄŢy”Źă‘ŽF[tƒvÓkŻ˝!?öQŠvŘ~ËčĄ^őő9ĹÓOËöKŠĄĽ#QڃNâŸßxĎşßzëm$#U(~ţž1‚atÎdK‘ô‰'žÂœ9s3~ž2Í:íˇciÓ0u„s”%#će:“uŃéÉé駟Mš?;leŰn˙[ÉĹßPşl´Ń†Q‡8ُ%KĆgÄTÜöŃÚŮ ct Óé-Ż×Ë.a:492÷›ož‹vdđď?“č9Šľ‹üIČóĺ>-ă°!š‰ě¤eémĚć8_–yDkŞrďZÍϏĽ=\W` cÂwSŻë˘ *Wr ÍNlv,2ýˇü}fležŻáŕŽdm#ŒŢF K—\Ů„>Bú4ČŰoż#ŇňH1ŕţűď×oŃŢ2Ľ?Ű÷dđţÉÎgv˘K[čwޙ—Î3SöŮç§bÎďýF^P|ČčÄ¤ŚŚŰlłuÜvéżJÖ)ÎÁ”2rm*T NEşČßţ|[ôŐt„e™F-süÖř ůŤ;=˘ ŽŻ]w’=Ťu˙ítÖť¨ť2Œe$4‹_GŹřiJa&čŻ÷x;lůęĹ-óćÍË<ˇlžmŻ˝öÚS,ł“ôŤČ #ĚÂâ6 }×]wóĽK—‰ÁlK9ŕßŮĎ#…dńHŁ~ťőWń~˛?áÖ[oÇG} Żë°k° ÖčBޛTßyδúRđî$™@ĄXJ߀łŸ&×vBŚä"e:ő0â<ßKł$ď˙ď/DŁű˛Ż/[úăďOĄč/”Ŕl=َ/}l8XłΥčBŔ3ZVÄŁÜÝĚU<ˇşőÇÄfýă„ĐÁ.0ëϗ]†tÎ3Ĺ ýOc‡Îʊň Œ(‰Ă›bťŚ°óÂŘpéfŇ4ţ@aF÷!1ú›‡Ř̘Ę:ŞQWSk8>üIĎ} 6X§Ÿ~śá Ů!nš1ă§8âˆcDŠ;°¤Pő6:;ĐMŁvŚ0ÂŽżţ&5AšĄPbꍽöš5|Ÿţ…„í˛Œ¸ÝvŰš„{„ßšdâ˘tą‡…MÜPÉ4š^dss #^{ě‰"#äóY´hąáXž4n_:Ţč<ĺ´bĹJ¤ ŁÇIْ釖,Yę915AI‰ŮŠęĺläócšIB;ů\˙ůĎ ŇJőkząůćć(ž7_$ŇE~ĎŘiš*U™=ş™<ÎI21Ąř‹¤şŻœ}Œ0ôs&Ń_ěçśíśŰ$Ý×ţ29oŢ<ĎýÜ"×HŞŞŞ˘Ë]]É˙~ý‡ě, -E°łŘE0w™h„=ÄeÉĘäԚ×H?˙Ć~BŹLf›ěbłˆ( šî'DhN9™î—š”Éý"Rd†ˆ#R™,‹Ř"—Ią™š^XŘa™!^D&…d!{9bëR\6^I Đ<˘—‰fq˘4ÄćĆ=mŒŒĎ2׊ŃG˰öě$téĆö‹Š…˝ ’‘¤ŘĄĘôTnv1#@|ő•éôłâ“Čßn†_Ÿ;‘dŞsÚ RhΎťwŢÉu{ˆ}šż:î˝÷$CÚÄËéL;‚bp:űě?ť†Ţ系ᆛq饗űíŘNÚ˝„vž—•móȑ#ăĘöŮgod Ëƙé1žyć9Ü}÷˝q‘ÉěđžqĆŮŃď&SiKrń7” 2E8m‹.ú—k„cŠ,ţú׿‹ä?űŮ/SŽ.N†˜ńsč%ŸĚ6”â3ŠËĹ^ź–“N:§žz†°§đžŇŢ?üđŁĹďŒENűüÜs˙’VZEräwÚď —°Ú˛˛Üř*ËłŤ§Ś2s7eEEvŸU•#aXuUîý(ţ|óŮ&Km3Ř3ĆlŮÉĆԐNčg`ĘC9@Ď {ÔiňKF÷şňĘGĹÎL/ů㏳Ń×°Íţ׿ţíÚöÜ|ó­ŃhV{ěą[BJ(y­n‘š˛/$R(ĎH&555ǕDúť}O†´;(Îcűîćoa§8#Ö÷Šĺłżýöťâ˘”Ix8—ţÂÁ¨Îßť˙𪍎ç폃ś˘Œ\ë…z?PdŠü."–á%a™î,tYMŹ%v0Ł˝ßśűŘč–ö… ŕFEą†ş˛Áßî­đyFcëjśüšěJ[hćąOJĄYâqA˝ČúřŢŮNë’č˘?Ţă\{íőQ˙ť~â;,áߍý˝:Sx]ŇGGűÎ-Ufssłx?d;ÄĎűĂ~ďZŰ-éíĄ‡sFHwŠŕeĘLžçJ™§9ágžu֟EőŤŻžÎŐŢęččˆ6gł]ĐÎÁw ś@8 ŕąÇžpýF\=ëŹs Ĺ9řż˙;ĐŐ?Đp0…›‰ŸţůDĹ÷nÁre'xa÷ÝşÝ÷tü_éN=Ěč@hűňž¸ a?ÝŐW_+–ŮGşďž?EočÍߟňÍ(ëŽ,_ŃçČčeä;+=fiÓ9ß\ĘšľăB"ëbUKłˇň‚P&TŽ7~€5×tgp\OŚĆ¨× 3;;Ř8Ó¨‘“„:>8ńx:(|ihhjűr˝ăşĆ#ŘDZŃP°M%h)o2ú[ĂIŻ×Ťœ"3ÍV^Ő1U“Ť˘Q”Öxoéˆ;î¸c\ĂçŚŸ-ښ¤ńé&žâ÷ÄëŮSpĂÎ6ŠÝŢ˙Cń|娈ĆĆF‘ş€ěˇßž9ďř–‘Ř‘—‹ş{32ľˇ÷1Wź˙ţ™ĆĎa„†ŤŽş\¤ ÁÄ44Žé;ę¨#ÄţQÄH(ćÚ˙}Óú{ˇxHLéŔ'/N:éř¸DF›ŰpĂiH‡ęęę”űŘP<˙ĘĘJ¤ƒźVŮɛ †öv—)ň8ď|ńJ ç(JKťńœŽ0Uî×/~ˇÝ~KץΟőţ&Ń ŕď§ĘC°ŁţŇ.sřű'Ä\-ŰkĹ6ݐŮËœË ą0ök5~o+"˘ÝŽoŠa¨QÓŽ“)b‹­ËĎbažľ!OHĘ!lśúćIQřĺ3ţÓ,Ášf‰ĎE4S)ȏjŰtK´nΚ§Ď8^ÓMą˜ĆčdÖ˛šc$nŇ­ůБ‹­(b>ëÜm´Ř5IA˜ĺČÔ5ëŸyNžş–Ř=M˜ŒşňyŮŃű›#ă7šÁ䌤AqŰ/ŚQ˘Ŕž} ŮĎß$ŽĚ|öŮ焳‹B'ˇ¨[nš…HŔQŁŹ‡mŒÎČvRÖńôÓąŃz‡~XB)Ó ÁŽGvĘR4Ď`:ÔěöĂńǟMođ䓏Ću€Ž ĐN¸éŚ[…#ŽHBĎˆ˘Ó“ĎŠÎŹ[o˝CůvŰmWaťQÍŸŒ.GGĽLóä†}d.NŚ(]ÇFm*Ćh™'œpʈ‚ĘNóßýî"ňČ&›llt¨ Ç&S=ł}%|6Œâ™ LŰÍşŹ‹NX>kF=Ą@Ą7EŠ\á´Î9ç/FGčÍ٫ܗiżčˆĽyó͡‰¨`óńÜyĎůNĹH7ňšŸ‘=j.ţ†2ŠéÍÁ ď‰Ď¤]Ěż7Ž ‡#†p‘¸ž;áčWLĘ~wř 3RžĄŕ?™]ÂH+"î˛Ě‹ .řgÔÚŮم;î¸%n;ŻSŚçő2ڟ]ŕĆö†ś¸źˇ<ˇK/íű˙uóů†QX@{'rFyŠ–ť¨^Ő>!ŕjnŽdtÜÄń™ż“N—•Ť2ëŹVçCYiněÂ Ľ%::s÷Ž[XŔÎ ˙:őŽÁßGŠZů[pđÁďťlťřĎΊ‰Ůžđ÷ŇŤM=zttůÎ;ď6Úŕ}ŒßŔáI#dKčřŰßţ‚żüĺoŃNܸ'὘ő˛Í&ůËšâźł…mŔQHL‘:Űś‘lŮţF<űě3Ž5Ęôqń~ÝsĎ}"ĘŰ ž×çĘžp0ďŸŰwˆÉě¸\ާlčďö=´;ŘŮČçĘg}ŕż‚ć÷;,씧žzZü=Ó.O•JÓ ÚF^řw}ôńÂ}ŇI§‰Ll÷ŮńNŁžĘG>Cˇlěl§ď†v=}–ě„ä÷“hiOСÇv_^“éž(ÖzëוöK‰^Œ˘ştdąĚVâŘ0ŤŽďM‰XŽŕłŕĹŚŁóńćý#é+6•¤OŹăŤřuÍňŤ YGŸ[‡”­L“›´őn°éżVż1úă=Ţm§>řúÓQ˘Ý¤ŻˆĎƒí×O<úóݟśGśL˜0^ôuĐŽŕ5xŕÁÂV -Ă߂9s戈lR¤ô§?Mqé„çÇQŻźňŢ~{Ś(sËzB[†í}^2€LŻé„ž}ŠŤîťď1ęĐCÇo~ó+ë˝=,ě'žŸ&ą]wFBűóŸĎöű—ţýď+Ĺůą ¤Ż!ž˙ţ!>“}ę'œp\ż ŒĺsŁœÚ^ý a#Ňޤřœ×ÄçAxż™fÜIŽě/ŘO.áýĄh‹}:RؖŽ˙+ŇŠ‡ŠPÁ—ß+úp~ýë߉żŻqăĆ !íښ|_á÷–ďniéÓĽˇĘ7ŁH(™éŚÇ$l ŮŔ~ß>_tRZ{E ť¨InŠ’˛\s”Çż-¤SUW9ęF× q™S@ć&(ËDd–ěŠ÷DN˛N6 tdđGZ:YNçF‡`ĂDkmŠťľzB­!šzА_†âz´”6˘ł¨ÓęŽ]Ż×}p–ÍŸ >›‚,Żô˜Îű0PŇcŇYb ÁĎg\†jĽł,UDĽd°#ě„N‰ë”˘Sfʔ)Â)5fĚh!đaĂLá”4DŘĄC…; IŁ„ÇČQ”ܧŻXŰĺšş˝…{W\qľ˜3ŞÝÍ7ß >›\tŃ?pĚ1'ˆsźíś;—ąąâťľxqLéĎźćé’*Wşň… §ăˇĄ!}V:Ł_ě#02ůÎČßžtŽąw€dëtĘö¸d÷6é\WŽB3+¤˘˝ÚŠÖ2řKşdNQ™Ű6i ĐvńÚn_n4LđňŃNO?łO‰ ĘtťpĘ‚™Żźč\Â7Ÿ¨TÓ)(ó a˜př˜YŃ]}qÂ2AVˇ ÍtS€Fëą Č4Q™):‹ °¨#EĚ´ă‘Ë2jĎŃgÍ­kՆ%v¤Jžs ›é1šż'23?˘Âę4EƒƒG<–.çœsڈ€É6Œ‘.d´ m!FreLˇÎ3ţ6_vŮĹ8í´ł„#‚ˇŽ-ÚϧžzfĚŘ=aŰÁ$Úqڬ츒) éÜd§¤dÁł-cűżŽ‰Ë;uwÚiá|’búd6ß1…‘\)„ŚČÉďSwąłÝ FœÚ~űí„sĎţüřźčx’p™ŃYř] ŁÖ+ĘU<ŻLíhžÇÜtÓő8ďźż g)pœÜ pŠéaƒßY:7ů=Íäo”#Żšć ý…b~˙č€tƒď]‡ň{á´uŇŰżĄLšüňKżš+„X‚NÜ[nšÝu?vŒÓAŮ[člgô2iŁ$KŰM˜*‹ďŇ6äw&Yy:V%ncíŰÝÖy^t~&ŤC‘H˛N\łS.ˆâ˘ rIEynĹLŰlž×ŢNż“–?[nćGŚle|ÎűŸ‰™žŐ™N2ŞŤ}ččĚ]¤î’"Ţ7ŇŘÁfó°˝äď/ŻŘÇHvx='Ÿ|‚Řć%ŠÚqÇ텨™űСŔ‰ţ.ťě¤}l |đaŃaČöěĆŻ‹{ľ§JÝ1N<ń8ń^Ďö[ ˇěđZŽżţ×hňżüĺυ ™žŠŰÉšçž%:se_ŘáóąŸc*V.ďSśôwűž ٞłŁ•"?Ú?vh§\uŐżńĆoe-0#ÜzëB Ék’NfĚŘ] ˘tŠňžđťqúég‰ŽLŢ?ť?PŔÔdÇéž(iżT䕘ƒůœ$ËŹÂä‹ń%îՊďŮą;Ě^iü€%FŽ‘ě0Š`Đ Ěvžě-`)Î6„Cř%ýYŽBłä‚ąč> Á$܏ č•ŕŮŠAşńôő{źi0ۀłEÔ-ˇČ[ü}§ Ó[XUěŻá€FÚ_Nř]8qÄJZERv[‡6ĄžÉČŢôG$óKńs…“QĘ(ŇžöÚ\÷Ł(čôÓOI(gď˝÷Ţi´Éç ÄË×ĆßžSN9ąßÄř—]|ń?„řž…dV!;ô \qĹĽ}j'xAżŇŒť ›ˆ˘J*ä`€W^13AĽë˙JEşőđ=‚ŮŘżË÷iwۑ´d”źléíߟňÍ(J`ŚH:5‚ÁZşŰ°4´Ćf&jqłŻžeŸjNßÍތ+w8Ë4ÝsYQ¸PcŇ —ŽČLTăáœK&&`ÇĂx~×ö=^o~ SKŚ`Œ6 “Ę& ¨ ČŒŠÂN[ŁĄŚ3Á݌e ƒ/CáÓĐâhF: (8+ —atĎXۃčĐŰąŚp šKĐR֌P^ź3Ů+ú[Q°cŤÇŸë”ŁC¨„ße—Ń0M”4Ž˜ĘôČ#ŁFœß§ŁÎ‰ŮÉtAtěH™4°82cęÔ)Č52:C¸R`´śRƒĺę>ö:e€Ÿ˙ü€¨¸ŒpT ;(;ěH1Ňâ˙¸Ht~K›çJG]şČ{OÎ8ăTařő>?Ž@ ü] ř”÷kĎ=gˆ{šŠtÂŮňş%q’.E‘-tâ§Âž=­j&ÔŐŐ cžŁeŽžú ôv>_$S‰ dožLČ´*ŠuݤKUůči.EŮІx!áż4‡¸ĚV– 4s)ł—sZZdxŢťE›=zřü°dŠ%ŢbgrŘtŹÚe]B–gFŁŘĚ8/MDMł˘˜iSh&…eśf"B˜M”ՌŮfŚČĚL)Äj"ŠYŘ؏‚˛pLX‰ ͆Œ\bř‡˘2 qQĆäzH3Ó\úĚuÝgE<+@Ťm5#œiŽkś˘—éGÎxňɧđÁ‰vŽ‘<*++„ŕ˙'?ŮK›˛uęÓ!vß}w‰óxőŐ×D Vv¤úýů"5&G˛SZŽśäw‚ß]F>c{{üńÇfňq˘Óú‰'ţ+>‘Á(’äuÓVb¤~é\ţéO÷öŒhœ‹żĄL`ŰŽf:ů™9J[‚QLř™sQ8‹÷D Ě$ŠţţhËp¤ěgŸ}.ÖˇŮfŤ¤Ńż)hŕˆ_~çÎ<ó´„íÍüŢ{ďăË/żÂBgúq~×Î;ď‘V‚iĂO>ůD(zßHUy7–ŽDÎ(Ď2­Ľ;M/ŔǟŃږžňkŤÍü>4óߌQ#ň°éFůřúťPZűWUú°ý6šľj*5ýR9ٞœ"ćŇčł^`[ĆȔ|ĎăoŁ™ľ´´Šw,ţ&1Ň“Ľä{ý-ˇÜ(R˰#Ń!dDČtaí FáüřăO…?ƒeú;%˘7đwóşëŽ‘Ęiƒąó’6+#ą1ÂŰ ™fĐ í‡ëŽťJŘ^ÜŃv°żÓçž°ĂÎSŚÔaűʎE™öɋ\ާléďö=ôÇq`#}˜<F˘ }Äď7Ű}vœÓffgjoa}Œ̎PFŞ[ştŠčŚ`‘öżWÎśŘ ˙Ö~řŸś=í5ÚUÝ|4Š9RT’‹űHĄć{ě-–8â0×čŠ`Hâ#4;-y~‡]÷˘˜ZŚÇô™ŹšŽĹ–ŰJ 7•™ŃËd3żŽź)FGYa2uŚ9!n9ŇZjL%ĆešĚĚŕmš¨ziO5Śžit—cŘĐ!Ńď%€´ŁśŚ*W¤0r“+Żź ťďž …b 2ě7&SßĚóŻŹÂ;gŸbŐ EWżÜŻšdÁâ0îy¨ `r‘…eÇQ"ŇMfCwˇŽ›ďîÄęú䑦 Œú:¤cGçvđÝăĎvăÓ/sQn÷é?bߟ ďnUĽ˛mÜÖ˝ĘŢđďk×]÷4ţŚť˛~oťëŽ{˘‘+_~ůžďň úHöÚk_1řbúd6sqŸÖW8°QżčëyýőĚŁ~(vֆ=“‰ýâ´c8 ‰ƒœn˙ä<×ńn/…eVIÂ2ť`Ş$ěÇ.İËoĹđéîvťźsW§'ZhL–7ĎvowÖ,~Ő e˙„ó.šÝH7Ű-ă\ššđ}đHTnpŞř ¤ŮÍŽQöBĄPŹ_¤cϤŤ_ ř™ă—Ž‹VkvLş5Ř&Ý6wNđXO6w.;IîŔA,6ƒB!H•“e߶΋}SuÇd+DË­čqé™÷ĎŹ\3ę7S+ĹR=+ó×`i`…P!SüEÇ_”’]govן¸ó ˆŮyxąýUܰć6\žč<´đQ|°ü#ŹnZ#7t óŊa(šLýź(Ş Š›#(°˘Rš9“ŠvŻ(ŻŔH˙(lÚ Ű7ě‚]ĎŔ†Ë6Űć‘(ŝËĐŔ0!čazL/jzĚž†Î0BÁ‹×ľńů|úégŠŞÂţűď+žĹ(Q˝őÖۢœÂBŽ.é (l’âˇĂvÎ?˙ĂIřk!ÜË6˝Łš¸šřnŮGÍĘ\äN&Ož$҄99öŘŁ‘ 4pöŘcwąLńG@xÁżmŽč`„ˇßŽT Xp¤ϑQŃř˘ÍÝ^˜:ÝS8JĆ Ž4‘#ŒyޙÜď}öůiô:(ţô‚Ψ˙ţ÷1ąĚ°Ć ľœ {ďý1çČŠě’ÁŃ'ŸţEZ)BípTŻĹQMNÁĄ˙ýď!.#ůĄXdšâÔY.ÓX‡R8ŠĄťšÂ2×­¨[œÄ˛Uą•Ľ\öĹÖ&cۂbQďcf[ĹLniü§‡cS$dNz(~ݘÂVy8Zśm3—âžŘńňš-ŹÇćfýa[]ąI˜‘ĚäœíHDKߘi/ƒÖŇbëĄřIř 3JY˜ssňŽ7~PCą×§ˆű¤wĺÇś3˜ëąśľDjĹ3dô$@9×&2UŰČTQ …B‘=2ęðě{RT˜ű6tÂŘ<yH1jŞźÝS'ĺă˜Ă˛—‘˘" Ç^‚)“źÜđúB\Fü9¤:Ě Ę°.E0 0ň’ôoě°ĂşŐ ž{Ë÷j ̒ą>ß§dŹ^:ę;=FÄP(Öuœďć˛MY<,Ş łőD!A˜¤ťn‰•8\Ź űÉΝyAÜ:cę˙çyç×[çVlߟüfďsď\ü¨mMCbX‡Śš”šŽ')Ó⏠ćOs§}Łü8 …BĄP .”Ŕl='ĄfĚę\Ř Ą˜)‹ôŕŒSŘXy°ń,Ži&)jĄˆ‹Ń‘œ".9R'Ű{FaY8A}Oš"-IϓŰ?ďů6?‰Ë–_…›ߎg=YkžG[{[Tp&ϗËkŘá¨UŠËš•)óvÚi!’`ôĘâJL̟Œ-:ˇÁ.+g`ťĹ;cŁÖÍ1´g6˛9 Äń’őÉh—i#ÝňIcŚĹŁ@…‚D'|űŰ?D”şT0|ŤtŹ1ě,'Ba ó‘÷üL)^cčäťďž×użgžyožůśHsČhxšŽ•‹űH¤<Żdb­d0ôŻ !ËĄ kě\N2I)áH]FőâoăŮg˙Ů5M%/n¸áf‘Çý÷ż?4*$“đoŸé:)Ö`čĺ“O>!z-ÇcFyď˝DŠ…TÜpĂM" ƒŢϋ/žT,ó˙ú×˙—°O˛ż“Ýwß5šBňöŰďÂÇ’°ϟB8™˘”Ą’łýžÍ˜ą{4Ĺe—]îůß|ó-!œ<ć˜đç?ŸL9ě°CŜŃX[úŚ~eČ`ÂPĹLwĄÜ8GDR”Äďj`Š™6śŤšŃôŽ Ę\–“­/)J ;ąăŚÄôhĆď†vIQX‚đË!2łöu ÍěëáH8şޏ‹ŇLљü̘MűHá›9gj…ĘŠzŁósšM\f\@Đ—EËŹőŽBK\fŽűF6@+궄cZüxDzޝoî“°Ż†ĆP5|š/.r™×sO绡Ȟ… Š9ŰbŻtO …BĄč=ŃÚœgîÓđÂ×GÂqcňpú Ľřżý‹°Á”| ­óaÄpŸH‰yÄŠĹTRÜűv˜uiŐÇşůü,~毌Ďć9ô…¸ŒřósiGč1Ě|ĆÉRH)r´eř~œŤ4ƃ Ëä EúKRĽĆZ_ď“Ěwňɧᗿ]…b}CÚ/ăJG¸Ćl‹şëÄ Ë\ÄeńîöKß݃ŋgÁ‹Cw(Fiáŕó”h8hŰbĎíĺ=o!cÁ˜XMCŒ†$b´č&ŁO°p˛(Rz…BĄP(7Ş%W¤D†IژjY×4G:âŇ]š;ĹfšK9<öĎŠGßzSk¸7Żyăü#1­e"6,›ˆńĺcPXP(Ä 2b‰LQiwŘ% 턢"˘—Ĺ_‚çů“°ÁâĐ21˝Óő.J´bŒË‡ÉE0ľd2jKj…“†b ’“=&˙ó™Óňů0Ú.œuÝC1Ą{&m3555iwşŽkŹŞĚ›7|đ!^|ńeŁĂłDD„ău2 Ó91âÝÁ˙Q¤T”÷“Ł )̢(kâÄ ˜?AĘĎúĹ/~.Ä@3gžg+óůÉűvÚ]CDŔZąb%nžů6ńůŒ˛4tč‘"œ>2AȜ~úŠČ5š¸üŽ3Ďř7ß|‹×_SOÇ&˙övŢy'¤Ëi§ŒăŽ;I8H=öDq˙)üŁČ÷㣏>6îó+ Ç1ŐčYgŽLŕ9žpÂą¸îşEĘĹßýîŘ˙ý„X9ÚyÍüÎQ¤D(Ňbžv;×\s˝Ř05Ľ]ŒxđÁáŐW_÷–ű1ŒW˜úwÜß˙ƒH˙É\ë[ląš¸§,cô4ĄëĐC˙ „ŠN’ýđ÷č ˙ŽŁ>^ÜדN:M¤‚dúËňň2,]ş O?ý,-Z,ęâgS`–-Ă^tŃ?Äócč|~.Eľ;ě°˝Hłző!r“Ń͝ń¸ăŽAŚüüç?ĂŰoż#"ňoö׿ţx>ăƍB_ţ]Q¨Čď1{™"¤ŻÄ˘Šľżßţ|?|Ć<4šV¤’ěn-G¸ťy…Ř0 Š™\—uÓ(ńYĺ"őĽ%~’´č6—ő٘•SŰąóĆŕíYŚHYd•4 ]ÔĎuÝJ­é3—#>‘ţRf‘×XŚ›é1uM$Ć 25ëCu+=fźpNˇX6?‹“O”ëĐD´2c]ˆeDÂl´Źe*ž"Ř|óMAY4Ś%ž“)1Łëćéň‹mâ|†śBŤhÝ Ýqlëz0zOž™3j\™ƒ¸ÖU0\Pŕ/HxžŠţEF0S‘, …";ŘvĽ3ÎôřP^V€˘Â.t÷” äĺ÷]ŰÉ@ŁÓˇö‹ŠŻaD´Š“ú×ÝéĎáÇu˘˘˘P<ătíe÷äiËlšĺćqƒ4×Eńîťď‹ë¤Ď@újŽ<ňđ”ÇŽO÷)č3řęŤo„żäŒ3ÎMwŰmW >L”qĐý,_~ů•ŘŸţ:XT(Ö7ĚtWŔȊĄ(ÔýčŃŮ’ ˀLÓaşî'\!:îܲ[}đ†ďčsŽ.ńáŕíŠqÇĚÔ·íX‚Ú2÷эKßC…_FY”NŘ֑źLvvég[Â_:ÂtŁůTÜ…BĄP(3J`śžŽ“2UzLň]ű|Ë<Ôâ-sŤČžE“u:Ć1$ěŻ9Ęu×zŇŠßč&ĹÂŕ21˝Ô:ĽžbL,)ĹăąIĹT +"D2ŻpqžŽ+#şýŘ9/ľmm•‹ţRGyş0+řž7&´•Z&ŒĂԢɘZ:ĽEĽâ\b3yî„ëŒdF煨łŁ#*8Ť­­Í‰łq°:,)~şâŠŤŃÖÖ.˘h‘G}Xˆ(0ůöŰďDŠźUŤV‹HSvx͌(ĹméĚvÝugTUUFÓé9"iŠ( sdÔ$Šg˛‚—ťďžgőg!DúꍯĹ䄤oź..dŽČŐ}<é¤ăq≧Š{"ë ĐéÍ7_Műď’#mŻźň2Œ‚ˇÇRLNř7uôŃGAS\ţç?Š”‰řkd[Œžvĺ•×1Ô#ü×u?ŠşŽźňß"íĽ„i+yĎ#Ńíşë.qÇđš˙ţ÷żâ8L¤Ÿřűß/ĝwŢęz/†ně÷{œ~úŮÂ9ĚÉ k'žxœëů%ű;!ÍÝzë"Rď+EznB˝3vÇ?˙yAŻ|ŽöĎ{ĺ•×Ää„o˙ú×E˜:u ˛á˛Ë.Ńĺ˜^”Nߛnş5aŸ˛˛Rń;î¨FŻkđˇ‰í'٘ŤBăˆTŻěFGS%*†Ő›",ŸŐöĽ# óYÂ-Wq™34Űôc0Ş ÓF˙ˆicfcÖŇ)–Ŕ Śa#2[‘Wa…E5Ú˙ˆ"UŁ8ŒŸŤů„ŔLˆĘ4›ŔLÍMql)?c"3Í–™SDŹK1™Ś›ŹT™—ń7ßčS-ząvĄ™]\f”ëAż1ĺ‹Ý´Şvř†5ÄÎCłÝٍ¸ĚZć-m+4Ł•Ĺžœ9łgÁňąQ1Źę\]ťČTĚŮÚ4 …BĄHĄqđß-*J›r'0S}}Yă÷çÎ)/i1Ţ1KÄ3&Ęžé?Ö'[†­.šä˛¸2VűÉOöLyʞůâáŕțnşNDF§_á7Ţ“ăǏĂŐW_! +ë éäíö Ł]עËQonô–ŮJzą,qEǏĺmxţłqäOÚł~ڍ–Žŝ°‡ˇ=Ř:çTäŰbéˆĂd™m]“}‚gŹ7FˆgŸ‰}Łl …BĄP(&J`ś“izLŚ„üŚm~‚˜JˇbdÄ ÎRDs–ëŽ@fѝăö×SÖăUŢéÂ7ÝsÄôdÓŤš_ƒiE“°AéxLŤ˜ŒŇ˘’¸čfn".ĝŠŽîîôXXbô‘jŽó×3>Oٟڬˇâ‹žođĽ1ĺˇäcTţL(É%1žtœč@•†¸= ›=ő˛˛2!˜q˛žć ńťËKt1]č’%K„p†÷âüó˙,„aúP ŐŇŇ*%¸0 Ăý_~ůUi}ŸĹ~űíMƒHç\˛ű-Ó Ţ8ć˜*“"3ŚÁ|öŮçÄhŇ5kę‡bĂŃ5{í5żüĺĎŁisMŽîăÖ[o…;î¸wÝuÉuvv‰ď2…i™ă(züń˙ŕšçžÇ[o˝#ž7EŤ?Ó§o+UuuuB¸ĹYL-IÓĐfú,~ó›_‰(kO>ů”HUşrĺJ´ˇwĂ l¸á4ĂAť—ŮEW­­­"Ľ$ŠŠŠ‘čÜŕ÷ô¨ŁÇ-ˇÜ.REŢ{ďý8âˆ?šî;}úv¸ďžťpçw‹č[<F­cd¸ƒúmŇ4ÉţN$›ož™q 1ه-]şT¤=Ľ¸•:ŢÓd‚ĘLáç=őÔc"Š#šńó(6ă÷zâĉĆ=ßQÜ{ţÖe K/¸ŕ|ń÷A!"żťüž1Ýȑ#ĹČcF5SÎßÁGşNRTTˆră÷j̈́R!0kŻŻFĹĐs§¨x Š×“E.‹+łÄfRTőe•ńĂUCv{ ç=ü—ř“ŃÂŹóĽ˜,Ď •ŞĺELá–n ť´ˆ–ąžĚhš%đň15š˜šE0ł ĚÂ2’YDL›ŘLł"—ńÔˇŘčcT•4™Ěŕ‹“Ĺfąe˝Ł:ÓbÖľ#oÔS0& űýŃ—őż%´łę‚ĽŐ3ŚĹj” /1žaAÜ3UŹžxâżP( E˙Ŕw;ú$†Őś`uă(䕍1{rÁlHMŤńîXŇgďď oUœÓúŔ’%K…H•ѡ(zâű<§tXŸîSşlşé&xěąGđüó/ŠHéL…IżßOčóĄoˆQÍčRŠoë3ôĂ1ňáhm(–ëőŃňě…eîGǕęîGßë˙żYş•ŁÇ$[WćĂšű–â/Ośa0pŢţe¨)u)Đݺô7ÍÍ~9>¤…,śę%4óާ!0 ՆmŁě…BĄP(?éöÂhinÓҘkëöî%9ĺ˙1ËňˇUpßÇ ĹŮĘuűÄN™Ś˛ŤŤÓčěÓ=Ó¤Ľű^Ÿë\–çŔ÷öŽœňýu"g˙f[p~Y4›ŕ,áˢšÔ¤QżîZO6őh~Ýlƒ’‰˜V:cĘG CW悗é4í".Fă=™Ý54=‘´~s›î8$\WB.ç_á+ÇD˙xL*šˆŠĽ“ÎÝ*ńbĆsŠžŒeg:Mó|´”ËnëŠĘ‰Ü|ó­¸űîűÄýöŮ'ŁQĺܸ˙ţqýő7‰}_}ő%bQdĚvŰí$ t+Ż˘?`G„ϧ‰¨ lkdtM!h˛&7rm×8ëNUîeăƒ!´śľaůŠŐX|÷ŘöžůĐľ0ŞGŻ@iU+DnIaĄę1Q˜OOsÝvœĎQ‡s˙ ŒĎÚ  źs ^ürFâŘ9Ĥsžç‹Ž3ršŽ™sČç e2%4딌yBpć"2X“ą6çZ˜ËŚ LĚĂk’"3Ĺ]8áwW˘ŞźQł]÷%.ë1ł>´f|CŒÎґMˆ‹VŚiɗ:‹‡@3ŽMčçň4qšőđa÷Dls(†ŤCMuľˆF'żƒéÚ>ŠĘ …Bąî1Pě™Lü4N[†ŸËAE3ߛ‡˙˝š5rÁĎö.ÄÎŰŤNżlxëÝ^zŁš`Ÿ]žÄťG]]mt ¤ÄÍÎq[÷*S( ĹşĂÚ°g˛őżČĺîîn455ăáŸÂĂŻšĺń5ÁĽĐ˝(t˜GFK.ÚýĂß\ˇŽt{ޟŔ@f—)xř˜ęh~'‹Ţ9Ł´˙šlŃ˝{IÖ]Ęô4ö1ř¸ý4ŒŢô0!ş-,,LËgŁü7 …Bąî“Ž=“Ž–a0PPŕßćpúVkvLş5ˇ…ˆćŚŃ]&xŹ'›;—$Ű&PĚ) âŕÇö% $ĘR§ť´—kpK§@‘v=@&é4Ó­żG⇞bzŚéuTű*0ľx<ŚQpV> •ĹŃ´KœřâŐÔԄÎp^i{'Íô˜š­Üöb%giއ–H[4ş™ŻEĂđź˜T8SK&‰čfĹEĹQ$Łú8x•ńݡPč#ÓnťíÖIĹe„‘ĆG2*q™BĄPônĮ́Ľšˆ`–ŸŸ‡ĐV#ĄÝ˝@´Ů­ŤkQZٖąŒ sDƒk3YćšĚe’Ű~¨ŠĂ8t×Ç0kŮT,ZăpčňÜĂaČ´˜Š1uSœFÁ#˜ůĚfşgE‘ŃË,وËĚt)7Ž!bfͅˆLëžpDl—˘2Ÿn:Yő›źƒŞ˘f+z™‡¸,şl|fŘßĐFřęŒwڰíŢéöe¸.‡Ű‹ĚcÄŁłnš\6ÎiĽ&ώQ}>MŮ9 …BĄXgqÚ2ć 2 ăƢ żPzK÷Ŕî?ĐtRú_Ó"Ď„qůŃ„v”ŁP(Šľ›o%Ů>ÎýeôލkŚŻŻ÷Ž~Μ Ë\Žëžy˘óąz FMŒbĆq}7˙Ą{_݀Őm3UćrŽ˙}Ľ§¸ŹŁy)†ęŻĆúڜĆdÇT\Ÿ[ŞÎ.GY´ß+Ůq†Şt ą”ĚžQi3 …BĄ(Ůz@:Š0˝F–ŚÇd١móÜíDqmQłmJŘ_s”ëŽőˆžEúÝ?×ńĄ)öOVS¤u|-&ß c F`jŃlP:Ł G Ťť óK„¸Ź>ԘĹůkŽň˜čŽKĐ\Ę%aMDzđr,ë\Ž™ďĄ¨žă ĆbrŃDlTą!Ć卣Ad$6EßCqŮňĺ+ÄňŻýŤ”ű/\¸HĚwŘa: …B‘é88“íŸçËC?e#kŃ4˘U+ť ú G\9JŤ˜Á&*K&,K§,N\Ś™â.Ńë›* "ˆ3öżç=r>:{ŠO>"b–Ě1#š‰Č_‘h3)4ťP䥛SÄ6ޅÚ4š5c§ˆ%4cÔ˛ˆ%2QĚ"zĚŹ2ę?töŘěS\ŚŰ‚GŁ•9Ę(úŞj‡VŠO‹A,R™,ÓlŰ-ĄY¤ľĐ˜Ĺ?Ańok¸áÚ1ĆłóSAÂ3v[öB9( …B1a'mMMj*×`eĂô–žîôí)E<==ššwľUŤŒgZařrT$9…BĄPŹ{˜™bň0Şf8j–”ŁAcđ[‡ŠŒ…eq+Ʌe’-ˆ?żz-î˙ĂUpƒŽŰţX…ßßބîŕŔ˛“ŠýîúS†Vř<÷ůńĂs°YŠ}—ĐĚ)2sŮǾ̜.ý;.Ç5őŒ@éŃâŮŰłî( …BĄœ(ĺ‰"%˜1Lň×­ DçdâČ 7;ÓQŽŰV“E7KVO˛čifýŠŁ›Ľ[ŘŘia`š˜^i}yĆF׍9şĆ0źľ$ő¤ţvѝžV=â:ĺ]Z7žĚÓó­/ă<ßŮ(Ë+Q´Ü w•37źóÎL‘bmńâŸëŽ{EŮĉ°ű}ő6-~é ĆÜúüŇ•%D3łţq<łe]‰ě-EEfÄ]eť( …B1¸Q=1ë)éFú`c(FcO+–‡šÍ>=Ń1‹†aˆuXĘ °íŸş"ěltŠšŕZAKŚË ƒqNIe”çžUŤV‰9_ůfŸ}öĆý÷߃ŠS§¤<śśśŸ~úŢ|óU%T(Šľ„&1ÍbIq*6ŐăJ„ŒQĚښ* çÁŽ!š¨,а,Ův_˘ČěĂ!×ܒZdF„Ą1Efb ą™œqÝ.$3ç˛Ěœ q')*ł]n‘ż ÇLż #ŠW& Ë((łOô]–ç[Ň•…s˛lŰ˜ŮEhşľÜ*FgŐřQl<7ŠU„…BĄP 62mťœűó=’‘~ŁłÜkTˆJ™† †^x ĹÚâăßƒBĄH{Ę)gú)Ž—••˘ŽŽ śŞŔĐEŒžEASVÖ˘nd=ĽŢśÚlF‘W*LťĎ1YşĚ褙\˙Şă†tăҟ˙WżyՏFJܜ°V[.Eö˝›Š2ľ¨˜{čÖ=1…íş¸'ՅM8b“0˛hĽ),‹^˜ćX6ćec yş).óÁŐÁL7GĚx‘sÍ2Š"ÂíĹĐťóĚl›VD9ó"Ě}žó m0Ł—ů´ŢuŔ* …B1‘śLqqą°_FYŒ5MĂŃć.㹗zđÓ= PЋŁGú°Ëöxëý–, ‹éš—5l˝™OËÇřąŒ´Ž~ü…‹Ăřî‡>ű:ŃjŘy‡ŒŐť …€WßęÁź…˝ލ˛C†Lϔ(;FĄP(‘tŇy§ÚŸ}uľu˜°hžĂ‚؏zu×waô”5¸vW}œ‡óžů7.ýĹšđbŰń~źvf-Ny¸oĎÎQ~ě4Ůqrn:¸RˆĚ’qîă÷ĺˆeáf‰ëŻ“WíÖůäQŚé‰}iég­/ëܾㆸFgÍÔÖQś‘BĄP(%0S$…ł@0ˆď:'čş}ƒ›M-ˇ‹¸ô4öO§~ÍQŽ{֓Yýšc=i=˘{9­Ďľ‹îô4öO§~ÍQnnĚ3ţ›R1ŌȒdTˆBĄP(ë ™:8íäĺĺ‰ćži2)XjŘm$B/ŽA~wÄhž}čj+Ewg;ŠJş…ô*Ş-‹NşŮ&;}|QQ™C8–‰Đlu1†4Gpéś×ăűŕĹ/g cŹű"ÇęƉɴX„X!+ÓbŃ]7Šž…ƒ'?Žâü3Şš]TŚYsŽ=Ťe݀?bFŁÍc’ů´˜Aą­Ëí˛Ě&6 Ž.‘ÝLKÇŞ3"ޏ[4›ÖT‰çĹçÇ)[”ƒRĄP(LěvÖqÚ`R7žD8äGśđ#ßű8€ć†đŰ_aܘěÚׂ ťď\€éŰřńöű|ôi]Ýş¨›SaĄ†IăóŒsÎǔÉy¨ŠĘ­ÚŹŃ°ćĚ ăÇy!!üęąĽŻ¤°lúÖ~ěśSJŠ{g,YĆăOwcU}ďSmćç1mJP¤lWéŁ …BąŽbČWUUałü‰ř.´ ™2ĚEO–d?Ýóččj˛Oyfő[ńúPœ˛çáđ˘ŽĚ‡‡ŽŽĆŸuăŸĎľĄąŁoS‚WűpĆŢĽ8|'Ă˙‘ÂdşúŐ;ŃŃô16›ÖŮ٤Y}Q1ĄY:â0{™ë×K)4KŹgQ×tLŤ¨Pz…BĄP(Ö!”ŔLá S,F":桯@{¤'śÁÍ~t”ëśUgtłčśĂ´7őkp‹n–ŞžÔőŰg.Ń͒Őă=MsœżŽTç“^ýćZug†ŒŽŽIe°+ …b}&Z3M&;öňPUYáÇă‡ía“ˇę&ڏ5ŽŞÁđąŤŕË ĂłeM+J2YűôÄ/kphéűŘu‡ođŔâ}1kŮTdƒn‰Č„­ŁYQÍ4+j™u:5MřÍȰYĺ÷VjJK\f•q* Ľ!sÎĘܢ–YÉLĄ™uMö˛hłŘśPK)ôżˆlÂóňÉô¤0ӐĎ҆Ądř”–‹´`2Íi*”M¤P(ŠÁJŞ(ŹL=zô0Œ¨]ŠĽŤ& ˇ44FpŰ}ŘyzöŢŁůYz‹‹4ě3Ł3v)Ŕ—ß„đţÇŹ\‚ŻY?†ÄD(ô6ć!ĆÄůĐşł:Ç#¤¨Lł‰ç啌.^‰=Ť?ÄU_˜0ŚÄÔ­“â2žoĄŃ“Zjôčúus=l”I!™ĎQ•i°…Q‹˘qň!¸şÜ:7Ÿí¤iČÍ*ŽQ#†ĎĺČóĺĹtU° …BĄlô& Ť<–QX‡ ŠĂŘßćD`F˜ZňBśĎž…ŘdĂě݇LˇšÝV~Œ‡ënëHpĽPś`qXL^HQXOˇ4 ţmą™ő–ďg‡đÂk=XSŸŰh%ăF.E]Ý&âY’ŢŘ1ĘR( Ĺ@ ™˙…PT=ŇxˇßhĹ|ˆď˘ĺq{%—Ľ%,ŕmfén3cÁ?żźŤÚpĘ^‡#ľe>\p@9NšQЇ?ęQÍfŻ Ą7L–/ÄkO/FuIzśËľŻŢ…›g˙'ÔäĄĆߍϤغwÚLY–†đLěŚ'ßÇ`nëś1qD4z™ĺżQ( …bđ˘f Og&fáp_´ĚO4ŘăŇ3štGą}˙ôŇijŽňD#?˝t”ÎrÍQŽťîŸyýŽ‹ŇáˆÎ–n=örÍQŽÇíŸNý“ ĆĂçóŠ̲1ҕaŻP(ŠÁDo:hó­ĐEE…"íbŐĆc1oó5˜řU3ch‰ö¸Ť˝­%(­čŒ݊ÖżćŠ[„łˆ†¸HŚÉ„f°ćm~l¨­Ć_kÚÚrźÔś-fuÇ˘žáHć¨\ ËƎĆŋąSů—S°ĘÜĚ3ĎKŔŹژŹ(hL!‘Ş2.b™= f$Y™c=Ĺ,śŹ/‡ȃ/OłĚ5-N`śÔW…ŕˆI¨Ş*ŃZ˜“6Oś D[§'DW8ˆ F0FH@GvßkĹŕ…ßý|Íż/~-Ĺy~ú˛O{§P(™Ř5~ż_Ř0S'ŕÇŤŃĐ2š˘ž1‚ë˜QyŘ˙'…?6ű´ÔϿڃ,MľŹ„e~ć Ćgţűbd #ŁQXöăœŢuťQ[ľS& ۆĎ2]˛ĎFŮ3 ˘ě…bÝ%Wůęęjl]´>ꞅâűA q¸´ž°ęqtÂîÎý"†Ÿć–ůbĺÓkđŻ_žƒT0ÂEfœž[ÂĚŮź7/€o—ąş-š(}hš›Žöc§ÉŘeJ6™~—-ŰÖ3Ÿ¸ĎŽ| #ľRœ0ú[Çާ̈́ՑŚÇ÷•ŮöŃ 'ϲŔNآŞjĐ č•=Ł ĘžQ(ŠD”ŔLá ü@ ˆŽ`ćuŻN> Á.´r*Ń\÷/ë’ŰßEpćQw:JˇýľÄ—”発~ÍQŽ'Ô#Ž3ăú†s’tš,* bBő8ŁĂŐí,w’,݂BĄP(ën‘ĘźFŃ2"VMu††o÷ŹĹ¤ŻZKŒĽé>4ŹŞ‚ż „Š­tSŞ%F€ÂrşŠÄtxF5s‘%šEˇ˙5 A'-~ (‹ S+Ŕ˘ŕ0Ěę'ŞY†ÎHQܽذp‘¨`#c>Îż %Zu š),“ËâfDĚô—~cňéąheÜ'.Z™}]ł˘’Ľ(ł§Č´ś…; Ź/…ŠÓ˘çÁ(şšu^”Ĺˆ#QUYi<+Ÿ¸ éĚş­C'e[¨ áÂzn#˘('üŐNě°ͧĹř~äÍŇź”ç çŚBĄXżH¤źź#GŽŔ„Ńłs*0“,Yi37Ű؏ŸîQ`ŘK™ýQ˜5g^îĹY}ţüŚLĚĚ ÚÜÁŤođů×ÁŹĹqИ8ęŒ5eee ŰSteĎ(œ({FĄX˙ČDxĆcWO1“ŒÂ,M-,sݔĄ°ĚśčyŚş9,ďÉUŻcţ=KpăŻ˙‰şŠ¤ĂĆ#óĹtÜîŚ¨Ş­[ǒĆ0š:#čč1?‘é/lLMʋ˛kß×´6ŕ¸Ç˙‚Ż:ç‚>”s†7~9˛1=ÁXLhć˝OĘg ývćq‹Ú7EĹĐÄ >ëtYŰöޞgN”=ŁP(‰(™ÂŐQMŮźPUQłÎa?FĹaqĺ6#ĐnőŰmC7[5eýv—žv=ɢ§‰ă¸r=ăótŻ_s쯧Ź'˝úí˘ťÄ—˘!Ý5¨W-˘—)á˜BĄP(éCa6›ë Z‹ES‡ăű鍘ö٘é˘ÝĽŐ°jy5FŽk0w᨝‘™Z‚k2jĹ et2™SŽľŻŰçëˆ÷őEňP‚06ԖaÒĽćśR Â}yŠ´'č‘NÖé“SĜC^œfĽÁÔÓ`z-‹sBr‘™-E&Scv/­‚ń!š–SF.ł˘™-ńW˘˝n46V+˘ĚńyŮĹeƒ1˝Çž6; çe7ŠTĐšÝj|W8•çĄĘ_"~y Ĺúôá śś“ĆÍÇź% hj­EŽĄôŐˇA|3+(Rfîş}FJÝaČžF/[Ű<˙JN9&é?]ś"Œw? âŤď‚"]h_QUވIă#¨ŽŽϐ 6_ޞg™ ě…bý"•@žâj ä§/ŘsôĽVŠžPOď„eś}u×#mťé G}˜˝9çnu4~ˇíϐ)e•,˙äy\üŃ-hG—8Ç-óJ°ď°šś=2ŒiŃ é籏Chö}Ë.Ř`ňˆA# WöŒ"”=ŁP(Öw”ŔLኘ}Ńp[—â3ÄabŮfĂء_ÄśîŘKřWf+w\ćąě™yĎzVUÝ~KLŚÁžSłlłˇË'bü¸q¨ŠŽ6žScj˝Jšśi7œP†óRĽWPdŢíĄÔN̲ü"(ŠÁM6ö‹ŰśŠŠ ażLX0M­; Ż ŕęëďBb5";M÷c‹MüžÂ­×ŢéÁęúľbĺęޘك˝vs÷—đvÎ]Ćűđýěţ‰ś6iĚ÷˜0aźxvN’u¸zmëďNZeĎ(zƒ˛gŠÁM.Ňd25tyy6:#WŽĺz}Ü~i ˀ$QFe™ˆË$čĆß?ťĎ}ű.;ŕ\ŒŽľÁ’ú8÷šKńqÇwŃóË×}¸pÂbÓ7”pĂźEenűˆ*ô̏‹+3ţ_Ő9y•Űˆg+Óäô˜ĘžQôeĎ(Šő%0S¸BüŻ[[#b”™ĽŁt–kŽr=a˙ěꡥ™Ś –ą`Ë­\‹nf+Ęž~ł ™,Ătš^ők SK'ˆe9ň5[Tô3…BĄPŹËx˘Ľ`‰‘űÍ(fu¨›0_í֊­_^-ÚkMDüŇěńŁaM9† kƒ™@3b‹ff}†ü0/1Y:ۓ–Ůě3Wą™}{ź-÷ůÎmö2çž$.™nŠÂŇbږ…îN‹–EbűŰJl*‚1ăýtsÔŹfE.ăą_T@Oí0Œ=\¤ĐČ$zŮ@逵ÓěPŁb˝†ż= Ćw) ‡ Gf) ĹşO*!š :ĆĚÇÜ%ÍhmŻB_ĂH_>Ćko°Ĺ&ůŘ|S?† ‰ľŃL­ůÎ{ ޜŔ´Šů="ymM}DDfűňŰęűOÇčeÇvŁŽŽ6:Hp Ú-^({F‘ ”=ŁPŹ{d*gšďqăĆaűŐáIź-wŻ"ݨeš–ĹWÁ'=ł°ĎcG`ŻşíqÎ^ÇbdőpôKWŕŇWnĆëő!ˆpÜśýŠ °Ay‹šן•L ć!ăżŃ´™˛,Y=îe߾쁹ĎÖI6úžDŮ3Š\ ě…BąžĄfŠhä‡ĂtG‚XjłLCÍa7ş[çÉŇQÂľ\łpĘýÓŤ_s”ÇżP莏ýöÎŔęęÂGŰ{oś×˝bclăŠÁÓ{ äB€’ ! $„@č$„=Ą‡^C/6˝šĆÜťˇ÷*­ôĎ}Úю´ŁşŇŽ´{>kć͛ŃHťÚ9şďź{?żĹŁÝazžÎoţş<žÔOoçĎiËT)Ľb:هđÜs/ŕ–[nóş_Jcĺççcܸą8üđCąpႈžć /źK—.מěË/>‹P ×y!„Dš—Řív•!K˛˜3 ŸĎŻÄ¨oë[Śœ*ŕÖҔŒĘ ň apRšö‹ž˛˜?˝šÉĚö9LúšĘfęŰđb6ó|4ôîYÍ,îšÉ¨{<őŽŕ2”Ĺyd5ł˜Ż[̌gt´$˘uwŽÓX֙˝ĚĄ=ZtSšśŢjIŔšCąß¸QęgëŮË*ÚĐÜ=í$ö‘`¸”g(LĘ!$véI#999=z$vîů_­Z€î7ńČP]kǒOŰŐRR§2šMŸ€ç^ŐţFő}ň2r-Ͽ܊Ÿü8Ue)űv•M™äzƏřNe/“ŸY8čÍAYęn¨géżř3ȧ¤¤(łőÔěńřŞvv˘ÂťË˰éÓXfX ŮXćÖŘľˇÝҁ7Ť>Ă{Ď~…ůYÓpîŹa֘ЈŸ˙°.{WŻ€ŐŇ]Pe8’đ×q›ŃÍäĺÓh˜aŹËh潏ٹË[G˘)q–*Ýízęn¨g!ĚH7d`U¨ˇľŔŢ)´őńÍ.íčáp2Ӕný çđhwëěÖî0=Ođç71œů8Oŕçˇt˙’áç<ţłłY<Ú€Ďţ]í%íůČËË Şfł—1xI"…ü^Éďƒ˜„ô?Ő/ĆRSC† Ɛ’MRśťĘ‡ŁˇŮ[fÇŰemx{q˘‘˛J;nýWú’ĄĹ[0t°MéłŇQĄč›Ţ‚z†D ęBbpäĽTôȑ#0ďŰ)xÚţžaO Ć2C_‡é‘^O¨ąĚłŸŐaĂâşeXüŢ2žŸůĹ3pňä#0cô”ďŐň^~ľáź´ú|´w9ŞěľÎv/§űEž™ńF˝ĺÍh˜ŠĚĚ0fqkyďcÜţşňHŒ˜0Ü´üw(DJ÷PϐHA=CĐ`FşĄ‹ś:ŐőĄc“ ›ş—s Ěpćv„n‰3\-ă¨!ÎÜŻŃx~ŁáĚaÚżëÂkWď[ť#čó˜gOłx\żĂëyF&”Ş’Qž3_ÉXଳÎP™ĘŒ444`ŰśíXźx ŞŞŞńÝwŤpÉ%—âńÇVłž!„PóR\œ3‹YfFşvOËËą~vĆUă4‹Y”CJ݊&3 ż Ůí}ćÍ;ČtßEý ůË_ńńǟbóć-xňɧpţůçBČŔڧYĚ$ƒ™3șˆ‚üúxU2ó7ޢÁŒBHČčzHeŔ/)1 vťC‡•boYž8ą‡>şIށCůŚěڍ\üUí-‰Řť7 Ĺ%͈ó].ÓáĘiwQ¨éĚl†6x>zšČ,îÄâtÔű݉™L°[*“Š›ËěÖ$ÄĹÇIąQXěNs™˛ăŤu(ířڄ1Č,.Ę1Ł4]š¤2Ęé?—žĐŰ:ÇŽ˝ŐÖć€űKŕňć%ăuŸÁfď0Ý/ËG›żĆ-<‰ă'„Ťű™Řdę}âD~ßŇ’Őç‹200‹ű¤§§cҤ}PYůvW CmC>Hߓ—]Ą%ť1aÂAęgäI´Ćc¨gHoC=CHě.ƒźTf‘ŇŃcˇŔŹň‰řܾʇŃĘaö`Ň-Pc™űŢPŒe^.Ŕě2Ěű9üËô•9 8¸püšĘ\ۆ>ŚF3ďŚ2łs›•Í\]s0’˛'¨RíňłT˝ŁĚ@O=CzęBH…3bŠşš›[p@ü0ŹrThâËnŽ/v×8§i‹GťĂô<ćĺ"}ßâqĎAŇŔĎďŢßbhwĐ?ó[<ÚŚçQŻ3Ŕóś¨Ň şÁ,Ka†ŠüŽÎ™3‹€;v˘ľľŐ´Lfcc#^{í ź÷ŢběÚľKŰnBqqƏ‡SN9 3fLô)Q]]‡zŸ~ú™*љ““#†ăÄOŔ!‡Ź2ßô„ŽŽ|řáÇxőŐ˙aëÖmÚ @ňňr1lŘP{ě18ě°C˜˜čvŒźî3Î8ۡď@jj*ž}öż*ľ¸ŮűpÚig źźBóšçžŇŽ?„Ňß%ČiDĎbć,•™)SöŇ5uX~DćţŻ\™Ç\>-ńPiŰśśDěڙŽÝ_Z”Ü™ÉL7šŠ™¨fF3Ň™ŢŒdđśn1˜Ç<֍ĂŰ# çńÔ$ŽóŚÚʈŤ\&LMfbǍߥ›ËDĐĹŠ`¤%Žó…8:Ńż9y˜?u2˛23œäĚ^Ś)—|p˛/¨Ő‚IßabŻŻý|ó4ľ6›śĂс—W¤ýŽ&ŕÇ\„P9đž_`W]šZ˙î÷O"+š˙§đ˙ó[÷ăŠoŢQëϜy=ć ß×ľŻ˘Š3˙yŽZŸ=lž=ëô6Óîř)jZęՌčo.},¨cĺ÷M~ďXЁŘ¤§úĹŘ^XXˆącGĄąi>_šˆĽ2ű)9iô -1EE].TíËěeÔ3Ń ő !¤ż‘™™‰ ĆĄ˘şëۡĄ ő=4–y¸ľ5–uŰňžáîĎň~r˙ć˛ĘaŸ,ń¸v̏f3´ŠCB8ΰ­—Íl°b]Ý̚3Zü,ZĄž‰N¨g!$ö ÁŒ˜"ć•Lm@oIńş§ ŸÄíp7<9źdłđÔgí.s˜ŤÝĂAŕyüŸßhâruÜýp]ý}—Ó ýü–î_h‚|öÉĄ‚ŠÁd0ëO&´‚‚×zuuM7cŐʕßá˛Ëţ¤ö3–,b:[´h!Žšć*•ÍťvíĆĎ~v2}éˆYK–ĽK—c˙ý§áÖ[˙Ś ĄPQQß˙ţXťv[űŢ˝ej‘çxôŃÇqűí˙PłştÄT'×ţůżDKK nşéoř׿ţŮíüwŢyˇşVáĎţ#Íe„ř,•™`×ČÍÉƔ)ńekr÷śaŸĽľÎŠ”*çč4™öŽěٓ†ÜÜ6í^`5>‹ÓTfj4ł¸Ö]ř3œ…ˇ6ˇGO™ŃŒfŇtß§_˜_“™ťÁĚ֞ˆĆ˛\حɝć2KgyLy“ăœ×­Žą`cq6ž1Ó'ODQa*S*şÔhŢUĂôśöą9ě—^řĎŇ˙á†÷EWv; 捜Š“'/ÄţCĆŁ$3_•ŁŘ]_…ĽŰ×ŕŐľŸŕÓ-+UßÂôŽ{šœăٕďăźYÇâŇy?˜Čď]VB*,=ËřG‰Ě´ŒÜ;÷Ůg‚ú;yĚr|óýÜ2hH dß1_cpI’ú™čşĆ—a>Z ž!}ő !ąC¸˛˜ÉăŕÁƒ1jřHśyžíř]Yááß4Śvř0Œš5j,soč+c™Ţď”ô$ŒHoDWƒîĆŻ.źľcA“ĺç8ˇ>Ŕĺ'ačđ1ŞüˇŽg˘-{ő é+¨g!ý̈ OÁ/ł Ə‹šťwĄÉnŊ¸˝ i1<8zXî:Öâ1ŚépÓÉĄŸßâŇɖ gŢŰ WdqÎěyşpX,ú[ęŢÁÇy˛mi^\Ş(ăzœ9+VŠŠé2ŽI61#ŤV­Ć/yŹVŤ*Ťu䑇cćĚČÎÎRĎ^~ůU•%lɒ•íÁďőZ~KŒ[W\ńŐO˛ˆÍ{€ë cŰ>fžÎŹŠ‡ËĚŘgźúŮy-1ę™ĐĄžé9Ô3„ţ f˜@WeĆČ´ŠSˇ2CmYXż ő–śŽNFŁ•ĹĐhœMbqßŐőđ8gťĹŁÝ|ŠJđç7ě0Ěąř˝_ív÷o<ĄŸßâjwŽ;şő/iĎE^^^PŮËúRňË/żRëRňҘŹ˝˝ýëuĘ\&_pîźóV̚5Óíř˙űżÓqÍ5×ăÍ7ßƷ߮ēO>…łĎ>Ëôš$ó—”ÄüűßoÄÁ/tŰwúé?Rćł>řkÖŹĹ3Ď<‡3Îî‹Ă?ţqťË\vᅿŔyçăś˙ä“OÄK/˝‚›ožuuő¸ţú›p×]w¸őůĺ/ŽĎ>ű›6mĆwüóç¤˛ŠľľľáĆ˙Śúˆaí˛Ë~BéďřŇ:Á”šˇRS’Uš)7üůIvúˆ yĺ­&&3çÍşĽŮ‚­qČĎoGzZœvúÎ0•˜Ę]F3c&łŽĽóŢ˜›ĚôG;MdĆ>0ë‡.çf:3vr˜Ě Ďă yŠÚ›ŇX‰ćę,•ľĚ"1ťśH3ył´G‡˝łDfgÎŹnć21™uÔjýóĎżTŮ̌ˆ‘îşëţŞŽGLh÷Ý÷ jěą'Ti᪍ţŒĚĚLBČ@ §ĺłxetJÖţĆf¤§a˙ý§"oxŢ;w0Ş‹´űŻ#q’‘ ńÎĚ\íxľŔŻýOFYy::â´{ˇžXœ"Ç mčl“mč} ű”9ËańýčśÄy´Ç™÷ą[‚h÷˝t´% jS!šöćŔbÓŢ[‚zDG<ś¸ŽÇÎĽ ‰x}Ö¤ćgcÌýŐ{œ’œŒÄÄu?3+ąŕëg ´Ů­čpŘýöűےÇŃÜî,Ó 3c ^‘R |ó^Wtިi¸úĐsA6ňű'ż‡„Ř$Ô7o1€ącÇbÄđRě7v™vmé佞2n)F†qăƚڃ‰Őôeö2ęŇ×PĎŇ˙ńvO9r$F Žăćjł<TÓáśŇ˝ŸéA†5‡Y÷~Íeƒ;^Oĺ:ł‡YżQČŔ™ĂvZôˆpoł˜´uŰöÓfńœÍ‘„OËNðáŁÔĎĘ_iĚž„z†ô5Ô3„ţ3˜ p-5qâ>jćČşuë‘ŃœŽ)öĄ*+Tšľ;ŞąľŘW‡VK‡:NÎh1ΖpiI‡ů$ ý CťpKćŢßâŃîđzžŕÎońčďđ{žŔÎo1ôw|ßŮŮ´alm yRśłÄ…Y âţ€”t”ŹaFšššTYʏ>úX´ŻTmRśě§?ý‰[żwŢqśU†1oČŕő|nťíNUţrůňŚf4á”SNňzɞvěąÇ¨•bl۸q̍@xď˝Ĺ.c›”šô…ě—ŒkÂŰożƒ /üĽŰţńăÇág?;<đoUşsŢźńÄOŠ}'žxź*íI!Ä˙LZĎR™‚] d:Ň1sćt|ŇúŢ=8üŃÝn™Ě¤ ¤];&ÎĄçł ľŘš;ŮŮ6dgvĘdę3H‹ą 贘wőďź&KićYĘ<=űúZwž Žkpo‡)ŐéhŹĚR&2‹EĘ_:MjŞ,Ś!s™ł„ŚmŠńxiáp´ÉÂg#?/ÉɉšŽIôi. Ś4f_5[:üŽö6TáőľŸŠu)œzӑż :xůCĺv\řŇ­°Ůmj{|ÁpÜsŇŻy‹¸›ŤvОýę>lŹÜ‰ť?{KwŹEMs=eŕ؉áWsNFZ’y6ÝĆśf<˛ě źżaśTďA‹­ ůiY˜QşΙy´zÔšűÓçqŰÇOšӒGŐ"Ü{ňe8zÂ\ˇý+woŔ“ßźƒeŰ×bOC%R’1$ť ŸŒŸÍ:ƒł  v×WŕQíu}´é[ěŹ/SŸ•1ůĽ8rÜœ5ýHŸ?ËşÖF<žü-źąîslŤÝƒ¤řDĚÔއ?,<ŠF \Čďar\"!ý‹PJeŠY~öěY¨Ť{3&~†ĽŤçŁÝ:0ł ÷‰ 혞Ďç(.JČÓ]ZŇÁč›Ţ€zŚ ę™îPĎB< g™o‰çOŸ> 5558˛n6^ëřÜeÚ ČXf˛'hc™)†~ž_ôą0‡Ÿ..ٚ—.cşaTĽžó%C›Žď}üe8ÓMfł>|ś÷$ؓG`Ú´)ęg叾Ě^F=ÓőLw¨g!$xh0#Ýđ&ř *AII1ĘËËUŠ@ɸ”ÜœŒĄ(ŔüŽ´YŰął˝›ľŘ`ŠĆKcWĺHƒŮL şÚ˝ VzŞiv—yËŐŢ%<çwt˙çˇÚAŸÇźÝâqýސÎ#ťJÚłP<´P šÝ#ÖřčŁOÔ⋠Ć㦛ŽGFF†[ťź1HKgša4”ÉqfłĚĚ Œ5Ň×iÔ_1˜ b2 Ô`Ś_Ťţ÷ߚϞăƍENN6jkëT)L3$Ú'Ÿ|†ľk×á’Kœĺ0ĺ3üťßý„2Đ$x鯯n2Kę4çdgâŔPŮ$ßý)přc]&39Z=Zœ™Jă,ÎěŁv{jk,¨oˆ×ގ!3ÝîVłËDĂşCˇŒsXMÍfş8ĐぞŒgƲ˜Ž~+^'ťz=ޢść$ÔWfÂڜ"ůŰÔ5Ťln’-ÎůúU9ĚN“™´ľŚÄă•C‡Ąą$sgîÜœ¤¤$#)1IÝĂpě+]dutříóňęŃŃŮoţ¨i˜5l"‚A ?}úzÔˇ5Şm &>öW!+9üi÷;´_ä/ˇ­ĆOŸ˝mśŽŕě–ęÝZĐń9ź÷ĂRźxöÍHOrϨ+Ď3Ÿú+ĘŤť]űëë>U˕‡œ‹ŸĎ>ĄpˇOâžĎ_r}nš> Ž-ۂgž}œň'4r ÂÉť?|…ßźzZŹmníL•ĺńŻßÂżôgL*TíVďăöÚ2W›œçýËđůöUxîŹ.ů=$„D/Ąęoë2)mţüyx÷ÝĹŘÂXśfžö÷=$üÄÇu`šöäY1oŢ"ˇ á(Ů[ú†zĆ ő ő !$ü˘]ŇÓÓ1{öL4Ќ Ôâ Űjˇs˜Ş$sYPĆ2Ó>î;Âg,sŽřy:,LJÇĚ<Ďěen'wŁ™ĂmlÎü8ç11š­Ź^ˆ-űaáÂęgÔőt=×8‘€zĆ ő ő !„„ Ěž“-<Š‹‹Ő"ŰÍÍÍ¨ŹŹŇ–J•Ijœ-cƒp¨&jۛąŃZ…-¨Ă–¸4XŹ&Ö=ł—Ăs\3d#—GJ0äĐĎoqii‹ĂcgÎo8Ââ0œß˙y†täŠúöÉÉÁÍ<îO&´3Îř1.šä׌łĺwS(..ň{ž˘˘ÂnÇy’——ÎS‰@ŃűŠq,ltEEEĘ`ŚgpóD毚ć*œvZW64)éĎhG! 3ä+ĐéźßˆÝ\íoöĚĆgŸ‰w~ Ńi2łtÎč”%]帝Ö0;6;ŞŞ,¨­ł#'ťĂi4s=žX ëp­;[=Ífîű]›€wÙq˝ë…ťGJťÉş›ĐlÖxÔWe˘š.Íe,{Ě°ľ(›ĹUjÓď4™Ie‚ŠÂ|pč 4ÉÂÜŮ30xP RSĹ\–¨Ę‘J kăĎĂѨkŹv˙ŁeŰ׸ÖOÚw‚Afžűě jF¨Š-9ý/(ÉĚG$hľľáwŻÝ…˘Œ<ühżEČOËĆw{7ᅕKTv}ůVÜţńÓ¸ĘPúA˛ý]řŇ?\Á˙C'â¤É ‘œ†ľZ˙G—˝ŽŚöVÜźä1Ě(iCĆă°q3ľ@lžx|ËwŽSǍ+† 㜠֧ ă:˙ż~÷~ţ˘Z—ßścö9łľ °”Xźq>Ůü:˙%ŻÜ.ź7čŮÇސëú勷¨×'Ď{čؙ˜1tX;lÚó.Ç7ťžÇžúJœóĚőxëüŰQžă:śÝfĂyĎßŕ ^JŔ÷؉ó´Ÿ[~¨ŘŽwż_ŞŁmíüBb“@łŃ{Žgeeáŕƒçăý÷?ŔÔ _â›őhš&$|X,vL˙ ó´×ƒ‘mŘř`k4čęęęBH°šĹĚ×~ăzII ŚLŮśŻ;P׀őömĄËş5o,Sk>‡Ńn |uƒ!’cžßIŠ6„{íŘŘTffł¸_[÷ă8w§Ńl{Ă|W˝űď?ƒ ęęĹ忊g¨g¨g!$źĐ`FLń7ŘŞo‹YeŘ0Y†Ş}uuuƜSVV†ÄÚ:"ł::şĘiÚŞąŃRƒíqő°Y uύF+ăȨá|—‹ôŐnńhw˜öţü†žƒą!ŸßâŃîţÄáń´R†*#QJŠűlObŮPvÇ˙Ŕźyšľ}řáGřĂţ¤Ö%C—ˇRĆ/Ľţ0d{ű˛Ť—°ôEGGτb ?Ť@ú-[śÜm{ďŢ2BČ@Ľ'f{ă~š_ÄÇ;ŇiŽs˜…Ż–ŽPĺ2§żUqß5†ëŽJfvf3“mť2šĹĄŚÎŽÜ줧:´ó;ÜLcŽle.óW—[ŹËlfě Ŕ­­ó"÷ëń\סác[oÔţoo‹GCM:šëӔ‘Ěi-‹sf-ëüOĺqstší´ÁkgiL Ş8Żž0 šię˝+).Ň´L’“’´{zźŇ6Ć÷Ţógák;Đ}‘ĆćđŻ֕os­ďŻďtśVďĹ{–â°ął0"ݤűšľ@ŮŻ^žU;~ŤÚNˆKŔ}'_† …Ăązďfźśö?ižéěĚPŠlŞĹDí|ϟu#ғSUۙÚ2äüZťáĽUâŠEgk×ăüů­ŇŽEJDź|öŹëgqę- 6Î9§?ůä¤fŕk-č'L)? ‹M ŠęĚSľ€Š,ž|¸ékÄ[âŐo˝ĚF]4fşkß93ŽÁo˙w^Yý1Ş[ę´ŔŕW8eżƒŃS$hyů÷¨GyîűOýŁösęĘz{с§â†÷Ĺż—žŠŠŚüëłpÍáçťö˙gŮkŞ …Pš]ŒçrƒšŮŹ#ŻůěgŽCłx üB˘›`ô‹Żmăz~~>ćĎ?Pű^ý1&^Ő§kűh2 b.›đ­ú†z†z†z†Nüio}ĽzI}}ŽŢhC­6Ć´ÇaČŔäĹćđşáŢŕ0ÝoŇĎ{ČČ­C¸ŒezĂ˙e'`PZ‹a€Ś2ł>xźëlŤl-ŧ{OÁ˜1c0~ü¸ŽA薾ˆÓPĎPĎPĎBHxa‰(̄] mž2ÉŚ%%çÎ=‡şH•ú1b¸j–Yˆ…YcqNęţřCÜřqÇD̲ BAGš|tĺěpč‹sVĎúŃŐŢšúŰ˝´ťísľ[ Lž7¸óťŽŐuŻç ţü÷ĄŤ_Ş- cóGhŃSƒU°b=–Lh .Ŕ´iSŐúˇßŽÄâĹ˜ö+,t ²˛rżç4öя󤪪گÉLJČęł™ůCď[SS‹öv˙ł"ôçńv­RžóîťďU뉉ÎÚîˇŢzvďŢB¨ô$če,E-(1B‰!*%9 yš9˜;g˛‡ä㋓Šąff–ÓhĺˆGœk‰ë\œŰńz;´Œ-AťÇ$bűîTTÇŁľ-Žóţçś@_GœÇžî}ÝúöŤ•búŇ×]ۖŽmťÉvg[c]*önĎÞ­EhŽËĐ^c‚zňhąÇŤ×, dÝî|”ĹŃĄ=Ÿ5ë&dăŐSK‘98Ν…A%E*sYjJŠzOEÓßk_?“hĆá;ŹŹ¨kë2"gśžóěu¸qń#8ńŃËąŚl‹űy5xĹŰ÷ŤŮŸ‚ůţ~ô…Ž?ţf<đĺ+¸ŕ…ż!Üüńŕł\ÁK DN(ĄÖkZęŐĚPş–×ú¨ü!ŽŕĽÎěa“đĺĹ˙Ć׿} ?›| †‡~tVţîqź|Îß݂—:ÇOœďZßX˝á`éöľŘ\ľK­Ÿľ˙nÁK?|ŚëçůęšOT°SçŐ5ťÖo<ęˇŕĽ0ŁtüjÎɁüBújÉ81ţA\¸ űďóâm =#>^Ęb~‰ÁEťpĐAs1xđ`מh5Äűƒz†zF ž!„K¨eŸ˝'ýfΜ‰aƒJqZÂ" 3;¨Ë°ĺns˜n¸78Œ‡wĂĐρ˛–9ş?•éé|ôó¸Nů/ߑŠËĆlô,ůNÜ6Lś˝´Y,č^‚Ç˙qľmĹXźëL—búôýÝ&뻟Ţ˙ĎÓßqá†z†zF ž!„đAƒŮ"”Ô´šĚĚÚ¤lcII1&OŢ‹-Ä…óąß~“1dČ`äefcJÖPœ˜5ĽĚĆo0ÇtŒÂ¸Ž<$É $œšZn÷Ś&.x1kŮn‡ĹĂÄüyěŚíÎë´{Îz|ţ.łŮ`[. ňóÜĘ)Ćrڞ`ůío/v˝Ţťîú—Ę’çÉčŃŁÔăš5kU9W_,]şĚľ.&I3äë×ßçéĘ&ćĘ@џS2 }ó͡>űnذQŃý5ÜŐW_‹ÖÖVUôw^×JÔő˙őŻ×”‰Bˆo“™ӔÉLÓ;ŠŠ)ČÎÎÄÜšł1fÔ0|}LŢ˙Q1ړ║K7]YĐe*sšĚÔ˘ˇYě hjLŔî˝NłYen63šĹŒŰ3™ův÷6ƒ)Íh2sÄu3—55&Ł˘, Ű6ĄjoڛSťLeF3™ŁËPćZםmŸ.*ŔGG#whagć˛b¤¤$ŤlpR3XsYŹÖęX;łžŞÜo&—[Űڀ3˙űWˇ ć??}ĎŻ\ěÚţíźÓ]3?›ÚZ\%ęZnŚ™`Ú>Ś°Ôľ^Ő\çZW8Ź3“đňŞńÔ7朗FzZ2"#9Í­,ƒN›ÍŠe;׺śë[š–lěŇyÇM:Č´Ob|"ŽÚ_­KPwc•3xZ­­ŻďœŐ\˜ž‹}<9iňBˆ‘`ďwfĘ2dćÍ;…š˜>ńS$%ś„FbB;Śďó)ŠňĘՄˡC‡şöů›¨éIŹéęę3¨g!ŢfŒĘ¸.ý:č@”äŕ˙E2Ńcc™Šß#Hc™#0c™W{‰É…ë›܆Ä8ăQތfčŢÇg›%ŁĐ`ÍĹűť~‚ÔĚ̟?Ď-ŮA0†˛hŽÓPĎPϘA=C!ć°D&q#Ň˜žÚĎ4Ç:Ćršb˘ŠŠŠQĺ4+++‘T—m¸hímÖvě˛Öb“Ł[P‡q ÚŘfç9]§všÁ\§÷TűfŮ|jďş^çů!žÇłÝbhwÎęu#P„ôô żĺ1ŃíR˘Ŕ5&MšˆĂ;ďžű>víڍgžy?ůən}Ž<ň|üń§Ę|öÜs/ŕœsÎ6=—ÍfĂłĎ>ŻÖóňr1cĆtŻĎ+çšćšŤL÷Ő××ăÍ7ßRëň{>jÔHŠź–;ďź[™żž|ň)̞=Ëk_ŮŻ#ŻŃ“G}ŤWŻQëżůÍĹČĘĘÂď˙[UVTĚkrüŮgŸBˆ˜i_űź•pĐ3™)S˝#ŃľoʔÉĘü˝!~ ^-NÄ!ĎW żĚ9`kQúĹŽŽ  v‡ł´¤´Ť9Şťs݇†ę¤lŚiФŚ8´s;’äp›÷jVÓüŃźÍâč´Ů,hiIDsSZ[“Tö1‹^ÓřŻĂP SÖ:ˇ-眣sť1;oŸZˆú!i7j&L‡ěŹL•š,9)ą_šË,ÝŢŐî”dćaGm™ęˇŤžĂsĺî=ůrœůÔ_UđKb>yĆ5*řőĎOžuڔCń-€ŠłˇĄŤLH~Z ÍHOęš5kíčʀ#ÁɟÎ8.íVüů­űpÍť˙Ćž%ŁUɉ9Ă'aŢČŠHNHDOŘYWŽ÷7,Ăú˛mŘ\˝ ťëŤ´÷˘6{WŮrÂĂ.Ă ŕS˙s@ÇT6Öa\PnřůLôQŁ4ťHÍD–€tOą č~BHđú%Đýň˝őŕƒhߛ?ÁĚIŸ`ĹÚŃڞ 8)É͘žĎgČÉjĹźyóÝ2—yғ×žĐ7Ô3Ô3:Ô3„`‰D™o™ŕwČ!‹đŢ{ďăô†ExŞí}ÔÂĂźăđşaš1Á`Vó÷7Bĺ0M“â3qjéF˜YœŰ˝Ů[/ǡU“÷ăÄ\öŢΟ"!m-:Řk˛ƒ@Ť˜iC=C=ŁC=C!ၳ†żŔŁŻă3óX F3cť ˛RĐYp<ÚÚÚ”ŮŹŹŹL=ŚYS1ĆQ˘ pZŃdmĂF[6ˆáĚR‹†¸v}lq{PżnOŢŐß“ Î\˘NÍííüđŰnńhwtëďďü˛99{„Z—/Vž3s$–šč˘ ńÁ)ŮĂ?ŠăŽ;F•cՑŹy0—r‘>řLœ¸fÍrO•+†ŽëŽť;v8g/œuÖ^S< ožů6f́cŽ9Ę­]ĘZ^yĺŐhltÎŔ8ýôu;V/UŮĐĐĐm_aa!Ž<ňpuţ/žřJ˝žóÎ;§[ż—^zEőćΝÓÍÄöĂÔkŐ÷~řĄďĹ5;ý“O>Ă}÷=ˆ˜ƒącťĎ(!„@8MfrĎpţ}ˇ(ă¸hœÉ“'!??ß|ű^űEöű űR§Œc΀‚Ýu‡Áh洍u™ÍÄčŽ iö8479ĐÔÔŮ#Îi4K֖„í1Ńů˜˜ŕÝpć #UCÓYqĘLfUqhmIĐîg’q,ŽË@&ŻQ7ŽěeNä4—šŒfmŽNӜl73ß,ĚA\N*ŚMš€áÇ"#=MÓ/IŞÄhÍ\–`‰ƒŐŃáłĎ¨ź!*€),ŰąÖŔœX<˙=ăZˇ ćZłŮÚęúÉÎ5 7ů ˇó­ŘľŢľ>Ž`˘Ť=O Śfă?K_SŻC™_k×)Ëż—žŠœ”L\śđLœš˙AŸ[Ę=\ńćýřhó×݂ŠqńSPŠ•á)˝ #?`ijw"ë[ť˛éfڤů<<Ě –2Pu Vr™2XűŃGŸ`öäđí÷łPט⟜Ě*Lˇ Y™8řŕƒ;c\]„kྯ žqB=C=C `ƢŐ.’Äŕ°ĂU&łŸ8ŽŔ3Ö%¨ĐĆĚ [nk1b,$sý¨JVρ&}<̘ !@S™g‹aPĘĐŻś=ďď<–ä"Ľĺ˝ď:$pă‹ŢĐ?Ô3N¨g¨g!$\Đ`6 dvŤ`Ö'ĐĚeœGGö‹IJJgĘ"ے JĎnVUUŽLěoڌDĺÖlę¨VŮÍśĆŐĄÝb‡FÙĹĐhŚĄÝú;Ű]ĂŽŚý-íÓó8<žÚ˙ů äčn63;Ą-ĽůƒUi.Ý Ő1Ť&´Áƒá´ÓNĹ˙ű4•ąęňËďÚ/3jŽťîŻřůĎĽ `]ô[e¸“Yffvî܅W^ůśmŰŽúO:EĚź1~ü8¤§§Ť2“‹/Á‚󑕕ŠĚi/žř˛Ę¤&H)Řýč”nÇK Ąşş<ň˜:߄ 㑗ç Ţ_vŮďT†ą={öâŢ{ŔgŸ}#Ž8 EE…ęó°dÉŽœ99ٸę*÷™ňŻşę•‘-]źżňĘ?šíżâŠËľóŸĄLpRBóńÇv™Ţ!„tŠÉ,))Q{´ >.^ÝÚKKŠżĹß­Zƒľ‡Ćc۸tĚyŻƒśKPÂŇé&w7š)C™Ăi2ƒžŃLÎJwč˙Áî€d˛ooí2’×b4sV,0f)sŢë­6 :lÎ czťţŸžgČFŚJ|ŞöÎ,fŽŹeÎLeÎŁâş g Ů řŕ¸^úu6•–ŽýrÄě„a̧ŃĚŰy<Ú,çÖţŻjŒĹťÎ@Bj!=t‘éęܤżžŽăPĎ8ĄžĄž!„pAƒŮ%Ŕ¤ˇ>=É\ˆŮLśłłłŐ2zô(e–ŠŽŽFYYš2Ů$7'c( pÖŢÚކmśZüŕ¨ĆÖ¸ZTXZ´qM٘VĎŕ4vš4łÇ5˜ék“v—9ĚOv3çń}~˙Ůͤi¨-G•r4+ Y=ÂÉĎ~v^{íuÔ×7(“—ÎFŒîڿモp˙ý˙Âe—ýIťŢ~ű]ľx˛hŃB\{íŐ>ł—ÉŠn¸çw źË≔×üÇ?n6=ω'^xIeMťçžűUŰ˙ř—MŇ?ü *ešfÍZŹ\ůZ<‘Źeˇßţ•őĚČý÷?„M›6Ťőßţöťí/**R%3oźńoذaŁĘdvÉ%ż!„ DB)'ĺËd&čŚ]Ýt&˜Ů3ąyólHٌw†¤`Ô×őĘh–Ô&Á-§Ń̙ŠĚ™wLĎcć°Hf°ŽR˜.s™ëšÇŽýžALaPV9ý/ÝĘ!,Ýž_l[ĽÖ“âqÜăM$j×tŔđ}Ő"´ŮʏóÓgpßç/Šíűžx1¨ć'[żs/珜†‡OżR͊5błŰneveŚIIHÂřÂŔg"gteZ]śÉío‡‘M•ťĐbmC8ä÷[:đę­ÍÓd&čŰň}tѢ…řꍼˆłŹGnV5Vm˜Žvk H‰ í˜xZd}čĐRdgfaRÖœ˜ľ/.J™KăfăŰXěg+Bš=Q}IЇ^ŐşZœĽ›Ć3ťĂ¸ĎŹż˙v{g9¨Ž%´ótow^g×ůíă’ŤAl˝<ŚŻ÷łż“••ĺ*%ŮŃс;[Ÿ)SöĂK/=‡ßýî7*ť˜˜ó体ň™‡vîťďnÜrËÍnAaoČďâ“O>ŞJ`T˘˛¤`ÖŹ¸éŚëqď˝wu›šŹ3nÜXüóŸˇ)ӛ|1ƒŕŢ˝en}Ä4&&łżýíFUâRŽââ"ő’‘íż˙} ĽĽC܎#ړO>ĽÖĽßI'`z Ň.űé/Ó!d ŠaÉ[0M×.r–Ě\ŠÚßřôÔdeŚk˙Ç`îł0|č`왛ç/.Ĺ×ĺ˘=)AeSYÂńˆÓy´ŔšîZ:ˇăŐv‚ö˜ ÚâőőÎ%ŢÇâŮG?žëźńŽ>{çuč‹=ŢՆÎuč‹j‹ÓôI~˜œ—~QŒ5‡ĺcPI!fk÷›‰ÇŤ fň^Č{"GýŮ\&¤ĆűĎ:8Ť'ě;Ďľ}ŮëwŁą­Ů­Ä™7H-ž~J2óÝúČlĘ?žykű„}çŁ0=}\—fďűâe´ZŰÝö%'$âňg!%1ImoŤ) ęÜťęĘ]ëGís@ˇŕĽ°r÷„›ƒGOw­ËŹfoźžöS5Xľ:šŠ™˜P4B­W7×ăƒM_›űâę.ů=$„Ä=Íák[žϟ?Ó§OCq~ćLţ𙕠Nrł*pŔ”%(.¨PąyŻúŤšL žĄžĄž!„„ƒžÜëüé–Ă? CK†ŕ”¤…X˜0 Ή|đáô Đ\Ö9`ăőTúé\˝˜Ć<Ěe&Mn çĆ!7Ĺę|n™d=ˇ}ľ›9ÎâZVUÍĹG{NEnA‰*E¨šĚŒhŃ8Ô3Ô3Ô3„^˜Álă/sG ýźe- dż§ˆ $ť™ ˘vذ4e’śšš”—W¨rš‰uő(D6fvt ÝjĹNk 6ŮkT9Í]q ččVÖŇSp;ŕYŽŇâÖý˝ľ[Ü3“…PNÓüüÚŔľ6ťoÁ(őވń¨§DŁ M˛É(RÖŇWiK!##gœńcľË˝÷Ţíś““ŁĘYĘ,0G-žˆWЧe 1Ń-]úY@}=_!„ d™ÉL_—żăÎL–ľ‡ä¤DUVYĘ)˙Ăf|T ÖÎÎÄÄŻ°ď˛z$ľŮĄG-Ş|Ś3S™^6ÓâšĺęÜç”,ú5t]‹ˇWbéśÖ™łĚ#“ŒŮÍžmĆŹe]?LIÊůh/JAvVĆ ˘˛m&'‹Ń.Ye-“˛Ţb,“÷Ĺ× ×ţ`.’ăo‰C‡Ă÷,Í?Ě?ď}żL•XŘR˝ç>w#=í/HO ćżź×ôřşÖFœ˙üÍÚąÎ2ÝR"ŕň…g!¸ý٧ńčň7Ôz›­żwşŰţe;Öš›ĽŮîYYSâ“]ë{ęťňÓ˛]ëRŇá˙Śćś_f™ŢŻN˝‘lěÉ{h$ÉPÚ˘ŽŐ˝ÂÜ“1,§ŰkËđŇŞľíýşÍěýxó7¸äŐ;`×~ö¤ţô×÷#Îâœ×u¤ůX_žU­˙ĺíđüOnŔě"׹_n[˙,ýüţÉď!!dŕŹvńܖ{ő„ ŸŸŻ}Ç\Ž”äO°Ť|(6lŸŹĹY’1‘ŹeŁJ×aÄŕ-JĎ͞=WM Fӄ˘qúęęęBHoŒNńܖń‘ ć;3°nł éxÓö%ŹcZwCĚ$c|˜Ę\;ýô31–yßďd%żšÝšáJ6Z2çƒa€ĘĎqV{>Űs,v4MÄȑ#0kÖL•řÁŐ3HM‡z†z†z†B fœ`Lf‚?#™ˇ>ţö{˝´ĺĺ婏śś6ÔÔÔ˘˘˘B•ÔLmKÁG‰*łŮlmĂV[ 6;j°ŃRƒę¸V]ía8óQNӏ‰ nçńl÷pŒůíďýüClŮ(Ě/Đm“ş˝/ÁŘB!$|&3Á˜V]˛eĆÇ۔É,A-8—4r¸Ę|š}ű.lßąßçĽbݜLŒţś “–Ö#ł^‚ ć2ç &3č6G—™ÍůŒWŕpמŻÁđŻ{‹ĹÝdć0ĐL fşŠŹ=9ŤgĽ+s™mPRS’´A׌5éHKMuf+KHp™ËŒď“çşŮśˇś`ö÷%éńI¨ˇľúě#%n:ú—¸řĺŰÔOpَľ8ö‘ßăÇ^ěVŽÁ v]ńÖ˝*đ)HěoG_łc…3§'ż~G•˜¸ó“gđÝî ˜7j*’’°zĎ&ź´ćCWߟÎ8Úí؉%#\ëO}űŽ §'Ľ¨Ůż ‡ăŔ‘ű!MŰnnoĹ ß-AEc-Žž†´ÄŹ)ۂW-Aj˘÷’nCsťĘˆßńńłřĄb?K[‚ŔYÉ*¨ü}ů6\óîż1*Ξ~âăâpëqżÁŸü‹ Pţţľâůďă€aűjűâązďfźóý—ŽĎëŻçžâ ^ çÍ<Ď­|OýĚv×Wఇ~ŁJqČŹç Ú5źżaĆćEuK=*šjĐä÷Ň ˇAŢl[ T’Aţ믿Ń4Í^ĺíĹŚű`GŮ(•a} 2Ł$;&Œ\…ô4JK‡cÚ´ŠÝ˛ŸGÂ\-‡z†z†z†‡ňÖßלÄ<ĐiţŽű:ƒâóđJű§ŘkŻFŔËŕpÉřꢯ„ÓX&Č]˙ĎC›ľżĂzdÇѵÕĚŔ—Ń̛ đW6łŞu>Ů}"šě˜2e_Lœ¸Oç¤ÉÎa6“ő…ĆĄžĄžĄž!„đAƒńk śo0f4oýBí#š%%ĹjŮw_ęëëQYYĽ˛›UUUcŠ#“íC`ľZQnmŔŚŽj•Ýl›ĽmqÎó Ks+Áí%ť™Ż,fŽ^?Ů͜›Żç1knĎCvvśŤ<&!„BzN8jmú٘Ę$0gQëĘlĽ=J™äŇŇAŘąc7vîڍ­yiX?7Ľk0l} Ć­–™yzĐavf3ëîŇÁŻ3‡g3‹GťžLßוÉ̘ąlŰřlՖÍÓ3•Ů]2” +*0ËR´ŕn’´ŻţzĹ`§ż7ĆGĎ÷-ś`ö÷5™ Š~˜Âąű¨Rň˙ő‡ÔOT‚[§>ţgĚ9ÇMűLŔđáĂÜ\…ţl.¨g¨g¨g!áÂ_ĽœžčY7n,233U6łs›ŽÂ'ÖUřĚśRű 8Ü*Ńřęć3k™‰“ĚáˇOWżé‰Ů8jĐfCť‡aLůÂź™Č|Ď mޏR—ÎXW3+*AJj̙AƒJ"šĄľŻ4ő ő ő !„„̈‹`f‘c4 GżPĘiĘśe=z:::T9M1œ•——#š!CQ€yZ{k{vYëđ˝ŁăŞQai6Ńë–Îr—Ž'ń¸Ďţćí.ó™Iv3çů>Ďł_ÖőÚÄ`ćKěťęe_´ĚB!˝I¨ľ‚YSß'‘RśA2Ş*Ł™ĘfŻ Ň&ŠŰĄCc÷î2ěÚ˝ľéŠ(›ŇŽĺGˇĄtm†߂AŰŰ %4ŽT§Ćk $"j4™Ídt•Ę4ÍśŽMÁś )Ř11 ŽĚdíş‘Żé!ƒK0dČ ¤§Kłí5:eb0s–Wď?˝ĘŔk, 3RĐ@Sf_ć§eáŠ7ďW33…Oś|ŤHĐëŽă~ƒĂĆÍB´qŇž 0uĐXügŮkř\ ¸J9 ŚçbÖ°‰Şt‚ˇ™Ŕ˙<ţwWř^тľťę*Őě×[›k˙‰űÎÇČźA¸˙˗U9‡Ú–Fő.˝?.wşlóz]2‹řŠ3ŽĂß?xk÷nE[G;Şšę\ű/[pR“ńż5Ÿ`—vÍšZ°}g]™š)+6v&_p7žúć]5ŤuW]…`nCQFf›¤füN.múÜrÍŻŸw+]öŢ\÷ś×íE’ •ă¤|Ƙ‚Rôů˝K°ÄŇ˙ —ÉL0Đzn—–AQQ!6l؈7Ą ÷TTgŤŒfŐőEčOädVaäŕP\PŽÔÔŒ1^eňđœäękŹčŠg¨gĚ ž!„„J¤MfƒÂĄ‡.Âňĺ+°pO<†ÇăÍö/Qí¨ďţ„á(‡ŮCc™čˆÇăĘáÓfœPpŮLł6çyęÚňńĹŢ#QŮ6ƒ´ŘÎ̙3‘‘#ýĹ\&PĎPϘA=C!ĄčÝŕ>K/ŰúgxԗřÎśxEöeÉc{ťősÄ(ž˘Yś‹ŁäQ%[Zšaˇ;´ČžßŘ˝žHhß@ú…Ú§ššŮ•ÝŹ˘˘R˝żÎ÷يÚöl˛UŠěf›ăjĐhąvMô0œŁË(ćčžĎâŃϰaöĄ1?żĂ­!ב‚‡˙† +ՂťE=.Iƒ!„`Řąc§2HĽŚŚŠěTr1šˆźÝWúRׄ‚?mámżYťąÍřŘlę=°i뚎E[{;ÚÚŹJ“TTTĄŹźBőiˇśĂjí@ńćfmiÁ m­ź˝*éövŞĂ:łˆ™˜Ëôí=ÒPU’„˝#’ącbşÓ8–”¤Œqůůš(,ČWłZĹH&̜%0:Ëa&¸~'Ô=ÝŽ¤ú$V4Œ]{cwśÔŔŕĎG|ˇň ^^ő!löŸ}ă-ń8yż…řÂ3Pœ‘B1‰–Śćj_”Šó ńFÔ3Ąh—@ÚĚśkkkązőTW× ľľĺUYŘş{<*jJˈąlTé:çWŠ˜šŢ™4i"rrrÂ6Ŕkć2ęŇŰPĎâŸXÖ3áĐ-ţśívť2ĹKÖ&íľ}i]ƒOŹßÁš/9\óöź_D׊Ăo/ýŢs¸ő9%3 ˇLÚjÚÓg›#€>ŰvGÖTĎÂw•󑐔Ş2´Ę˘gž× ˇš,ý‘†z†ô6Ô3„ř'=¨ç!HJJœ š%ő‹ŁóŃnX†GĎ^ś}=zŽ{â÷FIƒYm3o׊ăÂi6 ¤Ÿˇ/(RNł\Ě-++C]sF‹|i×|+l řŢ^… ¨ÁޏtXşĘÔśŤÁ°ŠŹŰ9 <÷Mí(Ć3ÎĐwóTłëyƒüžÚ !„3ŠÁL§ÉĚŘn|”÷ ŁĂî4œi‹ŐjC[[;ŹZť ؊^Ěf5ľušąiŔŽc˛wľ ˝ĆŠÜ=mHŤś"łÎ†¤V +lđ˙â´o0ŮńhȊG{Jj%Ą17A{LAݐdő3UFą¸8m=ůššöČGQQž2š%˒œäĚTŚőŃË`ężB(YË|ľŰ'šh´ľ˘ĘÚÔ1Č|ëű/ńÉćoąšzŞ›§˝îĚätěS4ł‡MÄ ű.P3= 1’Ÿ˜ŽŒ„BźÓ_őL¸´K ƒşŐŐŐ*Ł™ÄQÚÚÚP^•Še#QV5DÓ5IˆÚQ’żCŠś˘ ŻYe)c٘1ŁťMęzb$‹Us™ő éM¨gńOŹë™Ţ0ÇËzUUVŽüNĹWöśUăýöeŘĐąޟ¸k%Pc™—&Ó}˛ŒOfThó:|ěđ˝ ŃlGăXŹ(_„f{ĘLťß~“UŹ'ŘÄąŹs¨gHoB=Cˆh0ŁÁ̸NƒYDŤÁĚx=˝yl4d7S™ĚĆ­¨¨PÁRäŐł›5[ŰąŃV‰MŽZl‰ŤE­ĽÍOv3ő,^ł›šuóc8;Ă2˙wŔ1Ę`f,Ďě—_í„Bˆ7’ÁLč‰Ö$›™ţ¨ż'b0ë°ëŮ͜™Í”ńL{“Y­,uňXŻLđb8“÷ĎůŢŞłÁá­ě†nsŽËŁ”đTâ[űŮĘzNNŇÓҐ››Ł˛•%$&(™”żÔł•ĹÇĹ+󙹌óźŢ5‰ˇś@ö˛?šŠÖ˜”b ¤'Hé…<-€IńMÖ3á4Čj<ŁŮŚM›UěDb&-­6ě-ĎĂ¨¨Ź˝7ŃUĆbq /Ť%;0¤x/ŇR™ZE÷Œ7i˜pčcEăPϐހz†ŔčzŚ7Lf‚ÄO6oނuëÖŁŠŠ [Űö`Iű×Řn/ó8‘럈•ĂôÜEq*ΚŰôßŰmďÇU´ ÁŠň¨jôôtŒ;Fiž`ł–ÓĚţކz†ôÔ3„ fąi0K!~Đ?¨Ą˜ĹŒň@ôĎ? f}Cí#ÁŒ’bľRNSĎn&Ćłéö LÓž˜X­VTXąÁV‰Í–:ě°ÔŁ-Î9ŰDžÉâz:‹›ŮĚíŁi|zíَdL+Ťv5—B!$täžęOżxëcÖnÔTĆ{ś|y’61w)ăX˘3Ŕ›’œ¤ f’ą,5-ĹĹތg Mš>iQĽĽĽ­m-Ş”ŚŹË9D<¨ \ú"Nď:Md˘uRR‘˜ˆŒŒ m=Y=ffŚkűć1e&KHpe(3f+“s(cZ€Ć˛PڃíÍHPŠĂaGsG;‰ińI ^Büj—`u‹ąÍ,6$m’ů"//O•ΔŕđŢ˝eČĚhÁđŇŐhlZÝĺŨŹ-B•śtŘŃ$Ä[‘—]ŽÂÜr .*Cz˜˜¨ĹVrTŮoLĎÎΎH†˛ţd §ž!‘†z†E(şĹ›ńľ-ą ÉN*c=b2KٕŒá-%Xל Ÿ[WcgG9zŰX&ŒˆËÄĎFí€k Ča68äđ˛íŃćZí •5ĹŞŞŮ(kŤĘ3X•Ă”Ř'ţďű“ÎĄž!‘†z†ŇߥÁŒLOŒfĆău9O0ÇbL ÖpŚďOKKÈĂŐ"ƒş’Zš˘˘•••HnLF)ň1_kołśc—ľ›5اáĚĄOÖ5˜Í”ůĚ%ú=ŽÁ컂Ć|ë ++ËôZy˝„B ŽžšĚ„@Œfúl1oIťš”ŮĚîœUœœ”¨ ĘÚU›˜Ě23ŇU)M˝Ôěcť _:]ł’=ŸWžÎůœeł¨ŹeNә˜Éâ:ËbŞÇ¸Ž eŇÇ8ƒČóľxŽ›˝Ţ`÷Ó'(LĘDE{ƒ˜$ěHđR~ż!Dd°VtŔ6ĐśÜÜ\ľLš4QĹJvî܅˛˛räçŐÂfŤD{ű*TŐŚkKŽśäĄą%­m2đŢűźd(KNjBfZň˛ŤľĽůšZ[‚2őÉ*+|iiŠhöÔ6žŻ3”6_íÁö‰6¨gH¤ ž!d`.s| Ćx1V͘1ŁGÂ÷ß˙€ôŠtěŰ: ŰZöâ+돜mLËOvmf,óčiŇG‹°ŕŞMî*ČâÍhćËxćŢGęčějď*ć Ö6Lˆ ËÇřń㺕Ăt>ehY[}ľşż/Ąž!‘‚z†2 ÁŒM FŽH'œŮÍ9ŸŮy$řXTT¤A2‡TVVŠršUUŐHłŚbŒŁDe7Ťˇś8ł›Ą[ăęĐhąš|°¸=¨Áfˇ‹fw Á~)C´/C‘’’bzmÁvĎ!„Ŕ Ôd&„j43n şąËĄĘ`Ćwf%ƒ2“9Mf†2™]űŒĆ2ť+…™ze3>3\f2AOE­ˇë‹ń¸pŐ"ýMłH‰ĺH8aŮBˆ‘ĚÂęŤMýR\\Źb&íííĘdV^^¤Ů0tpĽvL…Ň)íV;SQאŠzíąą9mí)Z{ŹÉZŸD­ŻĹ•ů,>ÎŞ dńńV$ġ!)Ą)É­HOmBVF‹Z${Zr’{ŚŐ„„ e*“k*..R™\ƒŃ/ĚÎęő 7Ô3„ lÂi2üĎ$óęœ9ł•>ٸqRŤS1˛m0ĘZŞđműFŹ´mD˝ŃđLĂżnM&řÎZŚs`r6oƒŠaĚŇió?ňa4khĎĆćş}ąš~_XăŠTœaƒóTćśÂdýŃ\ŚC=C ő !d @ƒé‘0›zŽPł›yëjÉn6lXš2Év}}˝2œÉŒÝ”ę:r0[ĂŮ[=~č¨ÄK-vZałŘ 's=‹ëűAźÖś c8fŘaÚ´ŠŽěe=˙„B ž@jýőóg4Ó÷yŢÍf3Á™ľ,Ţľ_7’9vŻŮˌϥČԜŮN#™Ž™ĄĚsÝl;Đ}ěś_Ź!ÁŚ$KźČl6›˙LH@Ȍ÷źÄ4d$¤€BĚčŠÉLđW6Ó__5¸ŠĹJ¤Ľě—2šľľu¨ŽŽFCCٚ°—šbCQAƒvDƒŰńšűť“¨â4™™j9''[[r\(Řóoéďć2ę¨g!:˜Ě„@ľI Ć3Ý_WW‡-[ś"mO†´ăĐö™ŘвßY7aƒmš¤ĘaIDOś=cš˜á„â¤,UbbÔ¨‘^Ÿ3h<#„BBĂ[@3Ř~d;Ó÷{šźôlŞ˛xžCĎdf<ŢŰšőmoYÉźő÷E¸ŒeÁöE$蔖ŒZ-ˆÉٲ$XdVlŽźŒC˙ţœBzN &3Ą'Ů̌íŢöéCd9r„jíŇÔÔ¤-ÍhllTë­­­*–bľÚ\[ĺQp–ív–đNLLP™Č$Ë{zzş*{•žžŚÖÍĚňž^{0ű‚mľ_,@=Cző !ēPÍńŢ dś‰}ęÔ)7n,víÚ­Ę|g´¤c˛m,ZÚZąľu7Ö[ˇá‡ö¨rÔu3"ů+‡éÖOű˙Ç9é(MŻşe&łt?‰ŽÔDB jŰňąłqv7F]ÇpM%#!)ŮŠ(-˘)‹ Y5ŃSϐž@=CˆĐ`"ŹŁH™Í‚9_ ×ŽěffýdśîŕÁƒÔ"444¸•ÓĚśg`Šc˜Ú§…MŃ›šÁ’Ź-r. šN˜0Ţ| çLB!¤§„rż‰E]ăI0Ů̄PŒfĆýĆ>fŚ/}Ÿn: –PWƒéCc™9qj†c:˛Rľ f š:ÚŃᰃ3â-qHO҂—ŠH°Ä>úťžéiÖP eŢö÷‹v‘LízśöPßÓpiHě Ľ_,A=C‚z†ČŃ_ôL¨&3oíÁÍĤ.&3ÉţUUU…Ýť÷ źź™íŘ×16›ľ­ŘÖž[Ú÷`‡­ ĺö:´˘ÍOÖ2‡+YA\ŽżÇóĘaVţ˛Ő–ŒÚś ˆKŠCvRŠŠ 1dČ`äççe ÖDÖ_Íe:Ô3$¨g‰ô7Ä4˜E1ŢRůĆĄÄÂyžHf7ów>#™™™j9r„š+e!***U9ÍĆĆ&$8œĆ2™eRRRŒ#†ŤŇfĎL[ ű!„@139rLĐ5:ÁbC1’ůęăŮ7\ďe¸`Á^×@Ő)ŒĘŐ™˛´Ů­hé°Âęč€ŐŢ›”=e™†‡”Wß‹Ä¸x$Z⑟ˆä¸DBÂË@Ň3ţ´H ýzşĎŰ~o}ĂI$2™ůŰJżX†z†xB=CHďĐőLOMfBOĘ|K&ÔÂÂB¨}555ĘhV^^ŽÄĆ$"3°ŻÚgľZQŰހ˛ŽjěmŻFľ Íht4ŁA[Úľ{a›Ł]yĆZľÇß ‘ŹŽIhľ9ĐfK„Ý‘€f[:š­éhľgj÷Đ,4v˘ž˝Vd9Íd’™Uű?1ČČHWe=‹‹‹ü–‡áĚßž`úÄÔ3ÄęBz‡Pô é;h0#˝N$ g}‘ÝĚŹŸżó 2SWž¨ČAĘ>Či—/žÎí­p !„Ţ#ĐÁÚ`úGĂ lOŸĆ˛Đ‘ U„B"E y_ýzb& %v,áŇ+=Ýlżţő !„ž¨ÉLW™oo%ž%;˜”ř–J32~#†łęęő(I¤dwň1Ýń<§$x§ŹŐď„AKž˜¨ ešššÚóçŞÇD­-TŽöPűĹÔ3„Bˆ94˜ĹîÍ3]něŠA,szžPł›Ű×2EJjr|(ć2ŢB ]÷“Pî-ýQ×DÂhfě§ÓĽ+Ő,ÇB!=gŕę™`LfB(F3ă~_}<űEšpdŕˆ´6"„B§ë™`b'Ą”ůöÖîkŸ˜ÉŠ‹‹]I„śś6444 ŠŠ­­­ŽEÚívg–3A“’UeAĚbqq5&”’’âZŇÓÓT}ʍ§ú%Y84!„=Ó3¤÷ĄÁ,Jń5ĂB}ýńCmŮÍüÉë e?!„)ü•Ođ˜ş&Đ[cPLńěľôĆąÔ4„Búę'Á˜ăĂa$ë+Ó|83oĐXF!$Zhz&XK VC1”ů;§ Ă ˝÷„`ß÷P bĄî Ľ!„⍞čҡĐ`3Š˜¤œ˘”Rěď„b ä\Áœ/˜kˆÔ;Î&!„Ň׈ö1CSýbÔîOş&˜[łă‚=śŻîńĄ>/5 !„ž„zƝPâQá(őíëýŠÄqáě%„BÂÁ@Ô3j_ýB1Ą÷éDăQ }ů} ×uB!ţTĎá=(: Á,Ɛ2Š’B×fë3#ĄÄÂyžp_C°Ďěţ@űB!ţí!ˆ ýYׄj43ęń‘ §z‚z„BH4@=ӝ`5K ýŁŃ<ÉŔ5ľ!„Ţb ę™`5HOŒfo$Üą›pjË!„D#‘Đ3¤w Á,Ɛ™9Šážœœ„L$ gĄd7 ć¸`Îٓ~ý„B…hšŻ„;€ŮßuMOŒfĆău˘­¤To‡B Ô3Ţ ŐhČ1˝1ČsFË1„BHOčz&˜lfB(F3ă~_}ĚúFšp1c !„ž$z†ôü‰E!ŢęĚ?dÍÍÍ îčďQ8ÄŽń\Á íž.>!„қčÚC:zÓ+ś 4].Ň Ésy;7!„MPĎř'”{x$â'‘>Ţě<Á@­C!¤Ż ž î>ěŻo Z q“@ ćyƒy-Á<7!„nBŐ3¤ďał(Çâ1Ăů!ŹVŤŞMKW§9žpú˘œf¸ %ŘI!„„Ѣ=âăăşi`đ¨kzžŐĚßyű jB!Ń őLp„ŞWŒďeO´N$uEOÎM˝C!¤/ĄžqÇóuřë+řęŒŽńő~÷D?K0fąHœ—B –péŇ7Нx~âăT[KK H`„{fIoÎT u&-!„.DsČ˝E4ˆ‘Pî7Ô5]ôŚžˆýá5BPτFOîó}•é#×A˝C!$ žéN¨ŮKíęřL0KOÎh˙`ĎO!„DŠpęŇűĐ`#čéĺ1>>^ľŐŐՃO¸œ=ýBŕď|ĄK!„„]sˆ1j’PĄŽéN¸őI$‰•ë$„BŒPĎôŒHÄ;"Ą%"Ł!„B˘ęď„j¤ ô˜žŠŰ„ňźĄ\'5!„Ţ"Üz†ô.,‘ĹčbNO§Ť <ů€ÉbłŮĐÖֆäädĐńÍá(WŐBœâŸBH$­!šĂ(ö÷œ`fL Ô5 }Žë „Bbę™đa|Ÿb5~âęB!ŃőL`xžž`Ž ć¸@Ţ랔٠–PĎEÝC!¤7 —ž!}­€Q‚ŻŠŮ+!Á™Ž¸şş$źôĹ,”žŔ?´„B"‰h ŁöĐńu˙ fuM`˜eăw 2’ç'„Búę™ČĐßôő!„h†z&8B˝Ż‡3&â-Ö‰ó‡z,!„қ„˘gôý$: Á,J1űg’ȇN­V+š›[@"C´˛ň)!„H"C´†Q{xť'+ţŠkƒż`e  !„Ň_Ąž‰<ąŞ+¨‡!„Ä Ô3ĄÓ“ű|´i…p\u!„ž"\z†ô-4˜E9Ć•§xLLLT°Űí ‘'žP0řI!¤7m!è9<ďAÁޏ¨k!„қPĎô Ń6Ť­×E!„ř‚z&<„ăţďů^EJSDây¨!„ô%‘Đ3¤o Á,F0“R›VOXYY ŇűôVp’PB!˝h šďˆÖÍÎŔu !„Bzę™č œď{4?'!„ ¨gÂK$´7CX¨K$Ž‹BéK"ŠgHďBƒYáůÁѡíúLO(Ďřř8´´´˘ŽŽ¤o ǗţA%„Ň׈Śm!CŸMb–ŽŘLŤčŰÔ5„BéK¨g˘›pÄ2ŽB!¤?B=YúŁv "„m„Cϐč!$&0űú’˜˜‡ŁľľľHHˆGzz:HôÁ?~„BbŚŚ&Ľ)d‰hŒH ÜQ×B!$’PĎB!$ÖĄžé]Œď…Ăá@,Áą'B!ŃJočŇťĐ`eȇÇ(^őmcťţ!“˘Ž¸=Ľvmee•Úfđ’B!Á"b_´D×lŐx5“ʲX'Ů$Ô5„Bém¨g!„ëPĎô-žďe´Î8O!$ˇž!Ń f1„هL>„"nŽĎDX­VőAľŮlČÎÎ!„BH ÔŐŐĄśśÎMě{Ś*çlęB!„„ęB!„Ä:Ô3чŮűÜ[Ś3ŹB‰Ez[ϐރłŔ8›DG>|2sD˙ zÍZűňmkkCAAk?!„Bˆ'Ι¨•hiiUšAôDBB‚Z7Š}Oá/„"üŠk!„n¨g!„ëPĎÄ '„BşÓŰz†ô>ţ”,îłđhń˛­/q†G}‰ďl‹÷Xd_–<śˇ[?G?Âsöƒq[>˜z›Ź{.JěËŁô)**DZZ!„BŒ477ŁźźÂUÁ˜ŚŘs1ÎbŐ 4]1u !„B"ő !„BbęB!„Ä:˝Ľgb•¤¤ÄšÚƒŽúÎǏĹŃůh7,ĂŁç/Űž=×=ń›˘•̢}öˆŮśŮ,ĎcĽ˝˝˝]‰ýŠŠJőÎËËCJJ2!„2°immCuuľ ę5’\Â>ÜbŸş†B!á†z†B!ąő !„BbŢÖ3¤oał(ĆŹ†ťż%žë6›M-"řů@çćć 55uŔ§0&„B˘ ZZZPSSëŚ $=ą,FĄďš.řűŢڌP×B!¤§PĎB!$ÖĄž!„BHŹÓ×z&é/Ěh0‹r‚űň(‹žŚXoǨń € łKŇÓÓŐě˝ö-Ý „BHěŁß˙%Ř'łGššš”Œb^´€ąÖ˝|Đ×#!öŠk!„(Ô3Ô3„BHŹC=C=C!„Ä:ŃŞgb ĚĚ÷Ń`ü‰}]Đ ĆŮ$žâ_˙ ~}ŸˇçС= !„=čBŰóŃsż  x î…˝QÜőăç‡Ř§Ž!„BˆęęB!$ÖĄžĄž!„BbXÔ3ąD1˜%€D=ňAňÚĆ6ĎłQœëýtÁŻťEiáďüňEŽvýœţ>żB!‘ÇŸ¨öÔÎ6őŻŤć˝§ˆ7 |łmĎóZÂ$ö-Ô5„BȀÄB=C=C!„Ä8Ô3Ô3„BHŹÓŸô é}h0‹̄ˇ7ąŻPłHôýĆ6ý€ŽqƉąB!э™0ëFaďŮט˘ŘSČűŰőzŠk!„˘C=C=C!„Ä:Ô3Ô3„BHŹkz†ô.4˜ĹFqŻo FÁŻ {ýĂŹ‹{ĎăőTĹfÂŢŘfLiL!„čÂŹ^˝™Ř7KCě)ţ˝k$œbŸş†B!ő ő !„ëPĎPĎB!ąN,ëŇ;Đ`ƒxŠ}Ď6ϢţA6ΑEŸEb÷f˘ß˜ţ˜B!у7qî)ę=ŰÍö2k$bŸş†BŘPĎPĎB!ąő ő !„ëô=C" f1Šç ł6oTOaov.ă~B!„D7Fol3ۍBŸş†B!Ô3Ô3„BHŹC=C=C!„Ä:ąŽgHdĄÁ,Ć1 wc›ŕ)řĺQҡ}Ľ)öüpűýüB@!„„_BŰŰ>o3IŒÓzžŢ€ş†BéPĎPĎB!ąő ő !„ë 4=C" fýo3AĚÚ=Ó›ý10˙Ćý„B‰.|‰{c{0łEúęžO]C!„ L¨g¨g!„X‡z†z†B‰uú“ž!ᇳ~„ŮŹ˝]đížíf3Hý°s& !„~z"şÍf–˜ív_oA]C!„ô¨g¨g!„X‡z†z†B‰u˛ž!áƒł~†ˇY%žöyűƒŕů ç%„BHďâOŘ{ëěžž€ş†BPĎPĎB!ąő ő !„ëôg=C fýołJô}Füőó÷áç,B!$rôT„‡ă‹@_C]C!„Ä6Ô3Ô3„BHŹC=C=C!„Ä:Ô3¤§Đ`֏ń5ŤÄʟN°Â !„č!ŘűrŹÜÇŠk!„ő ő !„ëPĎPĎB!ąNŐ3$th0*ř=űálB!$úč‰XUĄO]C!„ô/¨gďo„z†B‰¨gďo„z†B‰˘ž!ÁCƒŮ"XÁŽc !„^(ôŠk!„X‡z†z†B‰u¨g¨g!„X‡z† făÝS¸SČB!ŃO°eúłČ§Ž!„Bbę™.¨g!„Ř„zŚ ęB!$6Ąž!ÁB!„B!„B!„B!„B!Äf0€řrĄš9Ný9ӄBé{Œ÷ë@f‹ďßýmv u !„›PĎtA=C!„Ä&Ô3]PĎB!ą ő ĚŢDz ❟B‰ôű˛ˆ÷`ӏe¨k!„Ř†z†z†B‰u¨g¨g!„X‡z† fł?žţ8ŘívB!$ú1ťŸÇĹĹyícůą*üŠk!„ţőŒ÷6ęB!$şĄžńŢŚC=C!„D7QϐŕĄÁŹˆŔ—młś@Ď竝B!=Ǜ ÷Öî°“~z_3‘+Ÿş†B‰]¨gœPĎB!ą őŒęB!$vĄž!=…ł~Š/‘Ż˙!íŽŽľ-ëĆvc?B!„D?úL]¸ËśŹËc||ź[ťÜëÍRGŤč§Ž!„BÔ3Ô3„BHŹC=C=C!„Ä:ýYϐžAƒY?ßŔ—EÄ˝ÍfsľÇ{[ôy !„Ň3ü pł™!zť°ÓűČcBB‚˙"ú=ż Ď-Ÿş†B‰}¨g¨g!„X‡z†z†B‰uşž!ၳ~„ˇ”Ăňa/_˝]>đÉÉIHLLÔ>ôňáˇđN!„ôœ3Deé€ŐjE[[ťŇíííę^/@ůŕMř÷ľ& Ž!„B6Ô3Ô3„BHŹC=C=C!„Ä:ýAϐđčOŇŕ>K/ŰúgxԗřÎśxEöeÉc{ťős PźÍŃgČ]ů𦧧!))Éő'„BH˙GtţŚŚfˇ ŸüôY&f"żˇ…?u !„BźA=C!„X‡z†B!ąNŹč™h"))qŽö Šŕę;;<GçŁÝ°8 ž źlűzô\÷ÄoúXf0‹qĚfčľíEŕË"ŰâÍĚĚPjB!„ ň(uď)ňÍń|#˙ŕB鈖°Ű;ĐĐĐčýńńńn}BýÔ5„Bé ¨g!„ëPĎôźMq<‰BČ@ ’z†ô 4˜E1ţDžĚ‘Ĺ2“$))‰ľď;é 3Y ĎË?€„BbŃmmíJđÇĹĹŠű™< VôS×B!¤7Ąž!„BHŹC=˝ôt*Đă9ĆD!$։„ž!}GHĚŕ)ňeöˆ}YĎÉÉĆ@Ĺó P4Í×F!„řB´…TÍ!ëáź§Q×B!$ŇPĎB!$ÖĄžé{<Çyzsʧ/Ÿ›B ‘Ö3¤÷ Á,Jńü ɇ̸O=Eq^^n7—g'V˙ŕđ%!„XA´…h ˝,‚çý˨M_÷6ęB!„ôÔ3„B‰u¨gzŸh7tŃpF!$Ö§ž!} Ł]QˆˇŒQ0JzbY’’‚@Ě˙„B˘Ń˘5tÝáď^lÖN]C!„ž„z†B!ąőLd‰uĂÍf„BbpčŇ÷Đ`˜Í"‘ôň8RGB›Ľv‰ÄľB!цh Łöđ5Ť$şŽ!„BHďC=C!„X‡z&źô×qŽ7B‰f­gHď“ȇKŻE+Še‰GRRú+áŔ‘ŃŢÎmąXĐÓsöä„BH8­!šC×rM")C˝_ D]C!„žƒz†B!ąőLxˆD2ƒpŽń!ăľq̉BH4 =Czf0‹2<ŨY˝Y=e`VV&ú#=™]Š,c˝} œaB!$šÍaÔ FĚ´ŠŮşˇžý]×B!$: ž!„BHŹC=á3ŠdĽĎŽk'„BúšPő ‰˜Á,F0ŠHů°i-HNNF˘'fŹhŚ'łD˜ŃŒBH4ŕÔN "3LtMғ˛ý]×B!$ş ž‰."Ëa…BH„z&8ÂaƊ&<Ż'”Ÿ;ǜ!„ô5áÖ3¤wĄÁ,Šđ‡úśqf¸6e‰OPŠűĄˆôŢ:&PýƒŞŮŒ˘ŸBH_"šC´‡¤,ÖÓEż§ř7ťç]C!„č„zŚďč‹ÁYłçdL…BHŹC==ŃáĐ-ÁœŁ'ú„É !„Ä"ĄčŢŻ˘Fž˘3Ù|Є´´4Ä:Ć/0á>ڎR÷äů"ůú !„pŁkŃ"ŢLńžčﺆB!ŃőLďЛń˜`ˆÖë"„B‚zĆ;ĄŢăCŃfcB=óééšzúü„BHoŇS=CúĚb]ŕ‰ƒÓ)ô%Mqb•H ăž Ăő…Ŕě|ô ö܄BHoâÔ׏’žíú‹Ž!„BHě@=9zCé bńš !„ęszbě Śook‡Pžˇ'5B!¤7—ž!˝KdF)ƐçşÝî@||Sgđ;VŢŇڎú†ŚŽWšL1 Ĺ#11Yi2¸ăÌÄ>ăÇ`ß}ĆĄtH ŇӝŚ3Ýd&ć3OłY¨F3f3#„Bˆ?h0‹B<ëŢŰŁž0– ŐŐŐ¨Żo@ŃËw!cůˇˆr>| íƒJQ}ęůJôgggŤv˘?)Œý‹B _:Ĺó^KşĆ‘žfÎ!„Ţc ę_DŇ$ÖŰďU°ş*RSގĄf#„ŇWôw=ӛĆ2ÉP&™ÉtsYSsłĘNöőˇŤątĹ*Ź[ż{Ę+ałęf˛0žoç’ťÝůü’\ĄŹ˘ß|ˇ ńńHNNÂĐŇA˜RSS•ÉL1œéLJ’Ü€%3 !„ô640Ç4˜‘—š,ń/m­­­(/Ż@úÚĎPňԃZŁü‘‰ĄŔŽvŠCîź [‹a/Ś ´4AĽ36ţąě‰ŃŒŮĚ!„đMW_×Âű:!}K›ŐĹë[°b[öÔu¨Ň&%Yń˜1"‹&¤"9ŸQBHtÎɃö Ś_¨çđĽ5›1sYáéĂX vďރ~ř&L@II1!$Z‰U=Ó]¨ąĚ™­Ź{ö–ăŁĎ–áw>šőľööŘzŻŕ4›mŮž۞ٍ—_[ŒéS'âřŁaöôýŸŸ§˛š‰ŃL2šůsbÉLB!Ńď7Ń#Ü$`złŢ˝g›wěŘ K}5Fţý"XŹ1–šĚ‹ö%fäďţzۡďŔˆĂŐD3ÁŢF3ţ1&„BşW01Đě}M °„'í|šš kwˇŁĄŐŽLd­Vď7Ş›ěřűŰľ‘Ÿ€Ź”8Lœ„9Ł’‘ĎĎ!¤oG|'”ý˛ÝŃŃĄÜŐ dáŇ^şáLD•É|˛ă-ƞގ7\F3jŞţÇűď/Á_ţňWőű+ƒőűŰ ˜?žißęęj<účřôÓϰwo’““PXXˆ˜ƒK/˝„BşIs™üí– 9Řľ{ŻĘVöę›K°uű.X;uI,ÓĄĄŐ54âƒO—᳼ßbżIăpĘq‡ăŔŮSQ\\¤Œf’ŐL´Q0ăPú>šĚ!„"Đ`F"Rć˛@Úd{űöíčhkÁŘż]€¸Śôâ[š0ę’Sąá7°cÇ 6Ěľ/XŁYOËfRüB!NB (ö$÷ßX1ĆĹ 8řŕĂ}ö‘L+99ŮjŔqöěY8úč#1fĚhÄĎ=÷nšĺ6×ö A%xíľ—ŃßřĄĚŠ>ŽG­Gś2ˆmý^ŤZ_şľ Ż~ۄ ćga\q"!¤7‰ääAł}ş™L7–łÔˇŮŹŘa­Ŕ֎rlą–ať˝eŽ:4Ł­Žv´hMqíhłŘÔ1Ɏ¤Ű“Š$¤X’Ś=[˛1<Ž#K0"ĄĽ HNHTĎ%ˆ–эfşéĚxĄÍrŹE&€ž÷Ţűř⋯°{÷nUVLĚSyyy˜0aźŚ}báÂůęýîo<účăęwW˛j=ö¤ŠÁlóć-¸ŕ‚_ĄśśÎŐ&ý´˙‰÷!„î„jl$yn,Űłˇ ďřžĺlŢşS™˛şúö{śźœÖV+–}˝+Wý€ÉÇâ˙N=sgOAA~>ŇÓӕŃL7ŕ“ÍŹ?™Ě˛ž!„BzďŒÄ/= >†*üőí]ťvÁjľaô­żDBU3ú‰Őĺńçó°őoŞ×9dȡý üžÎ.!„BHđ„cvk´g &S vWWרĺűďŔ“O>…łÎ:—\ňkD tŸ=ű ˇśťîşsçĐ­ďĎ~ö Ź\ůkű§?ý .žřB DÄ\vŰťľ°ç-3EĘiĘš~xMf„^Ą7łŇËśŐjU‹Üsä^'ëĺmľXŢž_wlÁw؎]–h{ť´ŔçŘŽÍҁŚř6“ Жv璀x qä`2†a˙¸˜‘4E)šHLLTŚnÝhŚoű2Ö÷ĄlżX@ RwÝužţE—Ď¸OĚSŰśmÇ;'‘#GŕĘ+˙„ŠS§ TďHŠ1_Ű:’ĺĚh.3˛˙ţÓ@!ĝH™Ëœ÷§TUW㋥+ńŘ3˙Úu›úEĆ2(ŁYťËWŽĂŞő›0wćTüô˙ŽW†łźź\e4ÓËfށúƒÉ,\zféŇe¸đB÷Œ¤Ÿţ‘ĘpJ!„ôgh0‹bĚtŃHO˛–IQoÓËűíÝť--­~Ďľ ý‘´ ŤPú?`çeˇ˘źź\eŻ0žöÎY4z›1:Pg—Bé[Ě4J ƒkŢśŁp ź†ű˘ĺŢLŁYď!ÚďńǟDZZ*Î?˙<č@ĘbJć˛p˜Ëtä\jçźůä<–Ë$¤čŻzƌޚ8h4•ľľľĄľ­Ë[7âSÇ÷řĆž Űă*a7X˙äŮЁm–*lC^w|ƒ¸6 †ˇbšećĹíƒý“G!%9ĹU"JŒf˛_O$&őĹzĚE\/˝ôřęŤeő߲eŤtűŒÓŃ_¸üň?ŕškŽÇşuë1yňžřĂ.íÖG& üđáś)SöÂó´g ć̙B ýAτb. dÜŠšš555řaă6<úôŤx˙ăĽhŐÚşßÁœÍÚąäÓeřzŐzœ|Ě!8ý¤Ă1lč`dgg#%%ĹŐˇ§É| PĎBHtŠž!} f1@_ üpĎ‘Ł­svˆž˜!4$eqccJ^źék6 ?“őĹ=~ĘĎžD˝öÔÔTŸďžHTfDZJÓŹÝł˙`´YXźž+śľaO]äWŚ$+3F$cфT$'đwˆB(% óţúČlŘ@Đďąň(3E{r]}użö•ĺƒĆᇊŇŇŽŹľUUŐXąâkěܚ˭ߣ>ÓN;YYY }ϗ›Ű‚.‹’ÉLÎ=ol !}CŇ3fôDăxŰgf,“;Y¤Őść˝Xl_‹ˇ-ßb7jâĐ'ˆĄm‹Ľ[PŽ—ěËQؒ‰ƒ[&â(ËTŒN¤â/b6Óă+B(“úĚú›ő‹UýôŔ˙î6+ Ľ„ÔŕÁƒ”ްaŁĘČŞ#żW^y5ţ÷ż—Ô{Ü2d0zč>Ÿ}śoßáś-ż[wß}ŇŇŇ@!‘"VőL$Ěe˘KjkkQ^Q‰×ßů?óö”Uş’ X´÷¨ŚŚ^™ížXśż8ç8{šĘĆ)q1ŢZQÇW{ űűęB‰nb)Ö2ĄÁŒx%œć2™Ą'Â^ß/łY­ÍˆŤŻBB[šśo/GršJË+łKÄ\–żä)ä-YŒ0›¤ŕĺGŃV:ľ‹NPU1ăYš´w‡&Ćă`KM‡˝°q)iJřʗ"1íIÔ8ÓDčOŸDŰŤm¸kq 5˛ľĘŚ–%ë[pń˘l Ëăí…;ôtŕ5˜>á"ĎŐÓű=ÍfĄqÔQG`Ţ<÷ň”˘ůŽžúZźűîűŽ6 ˙öە˜?Hßłvw;"ĹÚ=í4˜B"BOôK ş2ŕ&ąžŚŚ&Ôką‹wmŤđŚĺ[ŹĂލ ăT Ďá+<çř [†ŕčćŠ8,a2˛Ň3ŐFłžf3‹Ĺ˜‹Äđ^|ń%ˇ61ZÝqÇ­5j¤ŤM~$ ë}÷=čj#ý›ož“N:ů<ÉÍÍĄšŒBLˇšLeŞ˛˛?lڎy}žíÖţ_3lvŹýa ޏţœrÜ"œ}úąZ:Hť_ĺŞ1Šţj2Łž!„BÂ$$‚ @ŠYLfŒ´ÖŐ ďý'‘ľôC$ÔÖĂ"~3‡Ĺ™Ł×y´ĄłŁ#9iŮŮH+„‚ďÖ8ű ´—9äžk‘ôŮbdl߀díýŠłśvyę˙Î`OH„-ŻuGžŠÚSÎCŞö~ĺä䨙ˇFBţ„čH9(ÉŞ!ƒŞ ­ve"kľz˙B^ÝdÇßߎňüdĽÄaâŕ$Ě•̲O„˜Ć›îŮłgŻÚwjí}HŽGrBźë1!Ž{šš­[[,jůOéę^\TT¤öőĹ}9œĺ8ĂyށˆL°¸ä’‹Ü fBEEĽ×cŞŤŤńĆoáĂ?Ö~÷hzťNӃŮ4h>xŽ9ć( 6˛jŐjœ{îĎMĎwÉ%żs­Ků‡?üáOĘ8ŕÉc=Ąá§?ý .žřB„š5kńňËŻâ믿AYYšú*(ČW妎>úHxŕ\ŸÇËëéĽW°térlŰś őő HJJD~~ž*C%ç˜9sÂE]KäfťGň܄K$ÍebŒ#´Š÷4ÖaqÇ^}ő5Ľ ¤•ź=ĽĽĽ*óëÉ'ŸˆĚĚLřB4ËâĹŕ­ˇŢVÄDCIšńââbUŇęÄÇˆĂť7wôÎĺ—_%K>tő;öŘŁqÍ5WůÔXĺĺÚ5ŕÚţ÷żďǎ;qíľ7¸ő{ć™'1fĚhÓsüç?¸ tË$Ówß}ƒĆ5BHĚs™q[Öe Ş˛˛ |ş÷üű9l۾אľŒ1 #ňÖ56ˇŕÉŢÂĘ5ńű ĎĔ}ÇißÉ Ü2î{šěcŮd.=ó裏ă_˙2Ďf*şBçóĎ?rMZФč>ř7nTדžž†áÇă€făÔSOF^^|!şĺíˇßĹG}ŹJvK,HŢ_‰§Lš4‡v.\`úž{ꘛožAő˙üó/đä“OŠ8ÍÖĄÎóŤ_]€iÓŚ^Ďxţů•ćiÖ~wJJŠąhŃBĽ“üé4B!ý ̈)áHŠ,Űĺĺĺj°gĐs˙ŔĐ/>Ó˘ş¨ąč^)wěqˆoq ­ši{j:Íehv‰ÝÂŻ?q7ݙgmGRŮN>z ż Ő'Ÿ‹çý^ *ʗ€@„ż/úRôKâƒ>ÜgÉŢ&Żľ°°łgĎRˆŢ‚p$t~(łâëƒ.%´ő{ —nmĂŤß6á‚ůYWœB‰6z’ą5œ3`ŁÁ Όdfď MgžÉËË ¨M™ł7Ýôw5¸oD0eYšň;Uúá/šGq˘ 1%ÜyçÝÚ ęsÝöíŢ˝G-ďźóŚOß_{×)Ø'ňúožůœ5â̢ӏ–_{í e´ťîşżv›„,’Áu‡ś„JZ’Ľš J[™žżĘŚžƒ` !á˘'úĆW› ŇĘ˝§ŽŽŐÍuxÍń5^Ä2T[Ëh‘+܏ĹxŢţNn˜…ă›öG^zś*%F‰A“ÍĚW–3cŸXŃF’ń#6oźV vęRţúëoÂ˙ţ÷ş[Ű÷ß˙ –^x ˇßţŒ;ĆôX\ýă˙Ź4„Éř_SSŤ„eĐô'?9]ô+UŹŻ9ôĐEřÇ?nW&M%K>đŰňœ„pČ!Ó\F‰YÂm.“{’d-Ű[V‰'žO˝đ6šš[˜ľ,::ěXšćüáę;ńËs„c8…Úř’$3ĐőO1™ő†žńĹÚľë”ÁkďŢ2ˇv?Ӗ,?ţ_­ĎďqüńǚžC `úӕjÂŤ'ťvíV‹h†}÷¤éŒ›Őř™/UśśťîşÇ­]&ţęWăŢ{ďÂţűOSšĺŮgŸwë#q—G}BĹoÄrԩç"„ž)s™dKě‘{÷îĹű+qžă!<„PŘ6—ŠŇ^ËC–%8×ń^nřRe­ŞŞrËpL|%ԟE´1xđ n8îťď|÷Ý*Óţb=z”k‘ žxĺ•˙u3—‘AÔ_˙úmśžŰ>ŒýŮĎ~ŃÍ\fĆOüW\ńDb~“˜ÉŔf†dtŰ´ił[Ű 'B‰EÂm.“{´ÜŻ7lچn˙~ň544ś@—9.,ň^•UÖâďw=†{~;v:őnž dŹÉW{´i=ă yŽóĎ˙e7s™'çšîş•6ňDô€ÄHĚĚežŹ^˝żýíT Ňb$ó–M&ŢrËmxýő7ť™ËŒČőüőŻ×ƒBČŔS¤I7| Á@~EEęPüĆ Č\÷2ďŘ5QgŐ:XÓ´œŒS3PÔˇ!ť!Ť™9šŻýޤd”Ÿšš "Řßě_3G˘aVI Č€˝ͤüÁůçŸŇ3¤,Śd.ł…ąZ“œëAíœ7ŸœÇr™„˜ ЀY¨´PUá ŘrŸgVł@Ÿ'ŇĎmÔÔÔ(#”dőґ™ÂW^ů§n™)Ä\÷Ý÷şľeggáG?:Æ SĽ"ĽdĚ€Ő‘óJYÉú!AQ™Y*â_üâ×nç9?bî\gů&éw˙ý˙RK‚ F¤ü¤^&*ŘŞrmüŠk[~ÎRöJXĽ™d^{řáG]e+6oނ{îš_ÍŕŐyřáÇÜ~_$Hü§?]ŚfčŠéě­ˇŢÁ˝÷>ŕ*…ňţűKTć’ Ć#ŻoQfůP9qZ:F$ ÍćŔŽZď“k¤Ěř’ď[pÔžĚFB p™Ë<Íô’Ý@ĚeŰŹĺ¸ďc™e3ú3•hŔ­–7đžc5~]{F5ŤrER:ÓW6łX.ĺ ÉâvÜqÇŕĹ_vľIĆÔóÎťăƍżyŞ2”RćZú˧Ÿ~ŽĚĚ œsÎŮę’uL ő˘ td’ĄL,”ěŹ:’ýKĚôF ”—Źűí7Yeړ’›[ˇns헲PRb[ô‡.˝Łk,A…e0ֈžOĐ3ąÉ{*WuÄD&Ů@† ęvěťďžçś]Z:Ä­d!„ô‚5—Éä=1žŻYż7Üń0VŻŰl(‰I‚AŢ×ćÖ6<ţě›Ř]V‰K/ř1FްŠj9R22ĐLfţžŁ/5O¸ôŒTә:u –.]†üŰ>ÉřĽ›ŘôRë˘Wţň—żşéš×‹î9r„Š IŹä‹/žríc×ÜšsPTTäjťíś;Ü2ŸJĆű .8ß ůčŁOTĆV‰‰îń•Ő^â'RZóŒ3~Ź~Ö_|ńĽjÓٸqŽšćzĽŻN?ýG˜8qMWmU:M˛ÇëH)QŃ[fĺČ !„ô?h0#ŒšŹŽśĹoހܥOÁ/qš°J–ĽHsšĚšs€Ž$ Xä}ľw8ÍeA÷âð§g ň˙.Tb] =1™E ‡~¨  éTUUŤŹ;wîrë')yO;íTUƂ„Η›Ű’šĚœ•sĎ|Ŕ™BÂM8 ő‚užNűŠ{go•ôDyç8ŤŐŚ4ü4އƒš'÷Ôlćió÷ÜfƒŠ‘˘7ŸŤˇšôŇË|î—ŕ  hJ‰HOÄPoœš••ŠéŸ˙`čĐRWŰ1ǍŸţô<4483ĘHS‚Œ×^{ľ2ŹI ÔŹ „´Ë˘#ł‚ °x=űŠüŽ?ňČcnm—]ö;ĽÝt䚤ü‚xőţĺ/îŇw6lp;Çšçv㤏ieđ_ĘOŒ5Rđ­e *ˡľ!Tö”ˆ#'9 cĎ,kDeŁďěÍ+´ç˘ÁŒ*áČâŮ&™ TŒ§ąO[>Çsř í˝dpŹń-śá"Ëc8Í:?.;ŮM™ŞÔh8Ál°U6î q™ßţöbe€úöەní?ü°A-˙ůĎŁj uÌýąpávŘ!Çfäž}÷Ýw* ¤3ţA*K‡ńů¤ä“h1Ľ ożýnˇĚeR^{ѢŽĚ`§œr’6řzĄŇ:˘GN:éőž‡KďčKVŁÁLtˆŮšÄ$6dČ`UÎJçý÷k:čˇ~žĺ1Ĺ@ÇŇó„X$\qA2]———cůˇëpýmcËö=űů÷ą'Xmxgɗ¨ŞŽĂ_.=ă´Ř˜œÄ4ˆÉ,Ú5O8ôŒź˛ c:rż÷̒ćŠWdœëńÇVtćÍ;ż˙ýĺŽ yrzV]Ż ďŰŃG…}ö™ tƎ;ńˇżÝčfč]!“ëÄěĽ#chž fr­=tż+Ś$ć9ɲ*f|#üă”v2>ׅ^Ď÷3B°D&q#˜J3/ŠsëęęQřŢíČýęż‹6”Räm2*œŰ yKmVçâl›‚ÇďBţ3¨Ů2űĄ'™Vz:p.Ž:ęM°ţŇľ\u՟ń Ď(ă™I!ěůĺ Ěž dÖîŽÜűąvßkBHtčŕŤt¤ÝnmUlőóx>—qń…d ×ŇĐĐĐsz^c¤é­ç‰Š‹‹T@2==˝Ű>™‘ęYFSf™Íe‚Ě„ýńOsk“ i2ťť/‘Ň 2;XG[%óš'2¸ůr%ţrós vťËż]+nźŤ×mBYY™kü$ąŚhÖ<‘Ô3ŢđÔ+Ż0šËŃ2YÎȧŸ~ćś_Ě_żţőŻđü Ď<󤩙+%%Ům[Ć}ą˙ţSťĹ”=tQˇk;昣ÜÚfÍšŠ˛Ďó\„BúĚ`F"Q(ĺ$}áűw ˙ӇĐcRë´¤M™ ŇTířU•÷Ř*B˝çťđą;€ř8TýčçjŰß Z,̖őDf _rÉEÝfrVTTşm_~ůnş_ýę•éB2yźúękjڍ|™x÷]÷ňR’IĘȌůÂ*)ÓÓÓ4á>łgĎĉ'ďV&AŢĂN8Ĺm6ʢE qË-7›^ż|>찣ݲüć7á'?9Ó­Ÿ|{ᅗԗ)• _ć¤ÖřńăÔ, ,z´ö”ş–Č;#ynB ”pdţ’żÇňhłÚ´żĂń–ŽŤv|˛:žĂŰsykŤośŠÉšźă]ŢgńŘçÜÎČč~˘@łšsL(ô§Œfrߎďú- ËĘʕF‘右ÎpÍVd†Ş§IěŔçš>‡Ě~}衇]Ű2 +šG2ző6ltŰł™”ľ2Ăh(6nÜčšX ŻÍXŇbéŇĺ8âˆcŐL^YD#Iن1cFŤAŘH3(;ż?<ßílÇ_6¸>çÎÍD^zœĘŕúŘ獝‹sí !Ąs™gIL ’Ď؀Ű,o˘ţM˛ý,{đk<ŠK;ŽÂźÝvU–(77Wi“@KfĆz&3ŃŹ’]ëĚ3˙Ÿ|ňžújŠĘŒ!ą OD{HYo)Ďtă×ů|]2Hi†˜îe XLö:bÓńĚjzŕ˜žG˛ŁJ†1Ł1PJ>EC™Éc=F•×҇$óˆÄ•¤¸ Fz#sćĚr+—E!ą@°1™Ë$V˙ń+qý폠˘Şśó;żM…“ťkžß‚?ßx?n¸âęgPRRśLf}I¤ôŒ7<őŠÄ{ŒYĆt<ă=’ŠLbEf1C‰%Ęţ-[śŞń#ŃGkÖŹuËŘ*ř3Ćĺççwkó4ż‰Yßlü);;ە9_0˔O!¤BƒqѓĚVx”ŒY‹ďBţÇ lġšťľ'˘=i„ˆ4q˜—ŁŠ*-P“Ľ=jŻĺ{€ş:M!˛„Ń\ŚSřČí°§¤Ąę¸3•đ•Ŕg×Ó.đŁůˀtióäÚkoŔoźeşODűw܅çž{ĄŰďy}}žűn•Z{ěI5諗u’÷H2­IeĎ?˙ReUî‰|y1šËdTŽ7"%dŚŒç— )*ç–EJ;H†ŽI“&"lŻśaGučłŇ%[Gin~(łšŸżĘŚžcXo?„č#˜Xůűî4…vď—ÜdŔL΄@ďˇ{÷–ŠÇšˇTŔŸ¨,Q;ŸEÇäźqĺ.ăÔśEePŠëÜVíg?Kç~›ŚA:ŹmxăWÎÁťAƒJş˝Ţp”î ‡žˆESź'˙űĘ$Ľ#ŻIĘ~KŃhœ’mÉň%YĘ)QćIIIąés˜ľËń}i0óœ xNđFmmký׿ţĽŇbFÚ2WŻ^Łф'œpœšX ƒĘĄR’­UŢľQzrrŇâ°`\ âG>kPĺŔ÷žŹ$ţ>­Gc[`ű’ěŕÍŞ„â‹PĚe2HUŰЀÇ,áy,Ք3‚č4Ą 7âUď؉ŸW-Tƒ{böŃ Íą>ŕ(R˘R˛[č.$&¸|ů×řđÏÔ?Ý8/Č˝ţ€ćŕ¸ăŽńzž‚‚|Óvy_óóó”NŇŠŹtę ŃâĆAMAž˝G˛ÄĘ ŹŽ™Žę DwϘ1˖-wľ-Yňšh ź÷ŢbˇţÇ!¤?á/#–gvU1—}śtŽżýQTTŐŃ\Aä˝ýaóN\őˇqӕżTúEe´§š'ôP¸őŒfzEŒlff63ę´ąIŁ lŐŞŐxúégU–zăŘR¨°ä6!„P`‰Lâ"_7—ĺx >şa'^J%ڀgŞöëj s`378âpŕžg€/öoŹ˙ř×˙€§>Ţ׎–iA§Ű҄f§ź’œ$&–~$´óßwrŢzN ŔU)1ęť{ě=ËDÉŕáěŮł|óÍ7ßz5— 7Ýôw<űěó~ß $ßrËmx˙ý%Ž6™yjDž@|ţůŚÇđÁ‡nŰ2 ľ  ŔľýÔSĎŕškŽ÷[ÎJf§üň—О =ĽÍęŔ]‹ëĐb íw!Aűˆţî°üńČL)5ĎŞ&çž{Iz.Bé zZ\€­­m*˜“˜š!$!!^™bÚÚÚ]łü<Ëcöö˝Ů_Ɋž^“Ůë ĺ|}ńŢD čII‚+ޏź[فG}Ü4 G潞¤'Ďo,gž••Ľ˝/˙ĆEýŞ[)#ňýä‘GÇŮgŸçWűbúđdŸű7–[ńß/•ýâŔŃ)řőÂ,üxŚsĆďŰkšąnOŕAß~ž‹B<ńwďö×fÜ="ĺËjp•ĺ9<‡Żh.3AޓW-ËqĽĺy”5TaçΝnüĹĐźľ˛/Z‘Źů’iôŚ›ŽÇsĎ=ĺ6YAxůĺW}ßŃá݈mÜÂ5Mďłç`őG}˘%[ŠŃ\'Ůě,˜B‰%‚šçůږÉyĺĺĺXžň{e.+ŻŹíWqhEŢăď7íŔŐ˙76hň3đوuÍÓS=cFO_ŁÄ udźčźó.Pf7Os™dɗlîcǎ!„i˜B†ô)ó'ƒ7š_ý…Kţ‰ˆ¨ ´\ý0~ŽöM˘ řň-ŕ›OV‰ť¨ÓÚl˜¤[N*0g>pö€‘f}ZxŹsž[řoevŇ9řŕ…*Nb†ÄZ$vq×]÷¸Ú6oŢ _ˆIĎ ™´'܍čY<$S|FFş—ěş× 29Dʐ),,D´°hŃBüýď˙@S“ł„§čyíŸ~ú™[żŁŽ:Ňő;F!ą@OĚEĆý2áHŒMŤ×mÁuˇ>‚˝ĺ5{˜}Š7ĹÚśáú;ĹMWüBĂH|ALMhžh!ŇzĆ ŠXžžćşÇ ?ü C 1œËX˜ńs!1•cŽ9űî;I•Ö–Rš’Á˜íB‰4˜…7Aďoֈ” ĚYů*Šßźăź9ÍeBjşŚüNu.F6ŻV| Ea–kŁ9š€ŞŹľɒ”§EŽr€™§ţ ˝zÄ~3=ë\˙úsŕ‰űľçւ>uŐNľďźN)ľ9f`ę,`ÁQŔČąŢĎščXŕwס^‰°Ł]Ó ťŻF\Vj=Q}0+Ůčějţ Żż\zée>÷‹ˆžřâ 1}úţůrpŮeżs•ąĐ‘úň—^z‰ˆ”Ef|\~ůď]űGĽJ7\pÁ…ŽśmŰśkĎ*WSž” fŸ|ňŠúlŹS/YÍ$X¨#_2ŒłPĹűŹníŸ~úyˇ F=3nÜ8ˇ{źô˙ÉOÎěvžĺËW¨ F˘)Çź?‡z^}ő5ľ-ŻYâJŸ}ćž˙řă!„ôüá=3ŹJYă­Ű÷ŕşŰÁśet­_˛EűO2ŞĆYômŔŢŮG´ƒ{<aAĚÚËż]Űîšôő=^&¢U˘ĹTi=ăŃŁGťÉz°3‰ýŘ É)äřýëŸÝŢ;=~D!„DĚHHˆđŤ­­ƒĹ֎˘˙]Ł5„9ó–·œďżß¨ÉÎĺGč]öŸë\ÂÁ…Wk´ŔŘ[/ ěh_Ä î˝ť9AűšŐjƒpÎôžýaPś¸¸S§NQóPTTˆ?üáRÓ/2đé9řé‰Ů U"śÓ`vŘa‡ŕÖ[ďp•r’Ů)K—.ĂAčę/Ů׌vŘĄjŔXăŚń‹Žpᅿěös’L7b”ťçžű]mLí‰ÁŹŹžĄ–dÁyfŠ/Ź_ooĂÇ?řĎ졧.´ç"„ŢŔW°RĚeňˇ]yqq=4˜iÇ'ÄÇi^-jĐËě^ćí>í9Řĸd– 4XӗńO‚1ŽÚżż˜Ě¤ěźĚ¨őD/Ë 3_Ĺ`ţÎ;ďšö=óĚs8ňČ#ÔěZÉ´*徍|đ—ÖĚŢ/ů=4C7vőkF x–ůž5k&ňňr•nd˘Š”=˙üóÜú‰†:çœó•ůLe‘ ŻĚ–,ŻwÜq—š9,MrssđŇKĎše”~l5ĚŇzXć~X^†jËež?wb2ŰQcCKť{ƒĐUúů !$“•UţćJö¨ {•šŹg^$Nö˘°ü7uœěCřЀ3™ĹІ™2e?ˇ˛P2ÁíŞŤŽQ÷rrr\í2đůÚko¸ŒR:ţâ,2Đ*ǜpÂqŽ6‰]ýë_î™Ýĺ~>sć ×ö‘Gîf0[ąâk,^ü9ä`W›LćđĚ/ÚJâHFBŐ;áBĚcĆ÷MLw’ÉLg„ń7n,!$VĆć­ŻÜW*++QVQ[îyë6lď4Z Œ‰9úŰ"R!Aű'=#CK 0¤$™iČËÉ@zZŞÚßÔ܊šşF464aWY vî­BC}ٚô¤żť=•âozďĂT\€_Ÿw˛Ň;ŮŮٝçŽţĚ­áÖ3făK34&DŻ fO>ů”ŠqHIN#ožů6nťíe —8Č´iST–5A&Ř‘IvžďY]]]ˇě§„BH$`›„„ˆ—””d´hâŻjĚBŹ}agĚ,ŕěŰ1`Axë#š˛] lX‹pS9÷ő28kˆ(7űdP])s ˘\–łÎ:żýíĹ>Ď%ŽžCoČX)‹))ˆËĘĘԀíW_-íÖĎř%X8çĎ?ďżżÄŐ&e2uƒ™\ˇd53rĚ1GšÖĽ –1ť™ e9͐LhFäKQ$”ßžƒďvśă‰/\_rϝ›ŠĘ:IyÍÇ>l– ósBz›pd/“ “d˜˛wX1şňY$ÚęĐS:âÓ°!˙Çęźrö Py^Ÿn,kooĂ{żJ@BBźśÄŠăDŸ9Űb`Óםˇu}ŸdiljVĎ'fg3˝ŕy-ĄÍŢď@2¤ů{ŽX2™I9î+şCEěÝťK—.ď6˜)ƒŸĆN’ÝCNu$&­sĎ=§œr’ĐŢž};^|ńeˇrQ˘ŁD#‘Ÿť˜łjjj]mbn“2äň󗌬z°SLaFŢzëm50+†5ɞ&™UO—ÉäœĂ† SUyNšc‰‰űďHÁÄ /iŃZO=őŒKÓlŢźEÓMŸŠ×'HÖ Ěęć5šţ_üâ×řůĎĎSł‚Ĺ(!:KłFŚOŸ†ž’X†ÁĺÁ›?łÓĎ^H!á*7%÷’]ťvaggć2šËBGŢť+,Ďŕ֎3aŮińY.ӓhÉęá šßwßne&Ĺđ.ąŽ}ö™ 2˝KCĘNy–´N;íTżĎqĂ 7ăłĎ>Wƒżb.˝äy.šă ­l‹Y}÷îŽŇ˜W^y5žřâhű‘óČŕ°dž7rîš?íöžŞw"…źn™0 ZHxî9÷ɧĚ^F‰%‚Ń*ŢśĺQ 35ľuř÷“Żă“/żÓb2˛Ż˙G•őű‚ˇ))ĘÁ´}GcŞś /-BFz*UČĚÄŐĄ˝GVŤ MM-Řš§߬ڌŻWo®ݕ萼g=Ôś;ž~iąv-%8éčůJďČdɞ–ď ­g< bÂő×ߤƁ$Žrć™˙§ÚŽ:ęĽWôJ4••UřÉOÎUń‘ńăÇŠ8ĐW_-ĂóĎż¨ôů˛eËՒššâ2˜ť=ŃEăČdBIˆđíˇ+qűí˙T1"B!$ŇĐ`FźâKěËş "Iڃe93pÂl0ËĐÄټωÉP¤eh#m/i‘Ł™@SĹ &ܗŽžŠŠč>ř 3h˙ţ÷Ý2sÉ5ŠéKLe2ˆŞ#ےĄěŒ3~ěő\ţR‹ ĺ•˙á…^rö‚E cFƒŮ‡~¤9˙¤Œmňĺ@Ę9éČ@Šq揤üöäÝwßG Hđ´'”dĹck•Íëţôä8äh  ĆĽ !xäłĚ›‚ý‡'+łŮ>­Gc[`Ů K˛3ůBHoă­,ƒ g%H”߲*,ć2!žŁÍߢ"n–2÷č1˝!÷))á°wŔfOJRRbg ˛Éuż ś|,˜ďęgÔ5b^ÓMb˘šôWłR>řő(ƒŚ2H+eŤ$łë—_vöß~ű]ľxăOşĚ•ĄL×]ô+Üv۝Žý’Őě˛ËŽđzüŕÁƒşěBaŇŕ$,Űz9qŸç”B „`ÍeŢt˜ć%sYĽ­WYž§š, Ô˘WáÜn;qťw+ăˇ>qŔ¨Q˘5Ť‡/¤ ÖÍ7ߠ݃ëf†×K9úB2tčšÂ4Wed—^YĚČĎĎSŔˆÄˇnźń:e6׳ČËŔŹÄtd1cѢ…8ůäťľŞw"‰üď˝÷ní˘ ePœBb`Œđrż‘ Eo/ů Ďž˛D‹ƒD¨‚NĄ—¸c٤ńĂąč Š˜źĎpde¤#99Q-ˆńYî ro–Ũ/ä(‹ÜŸł2ŰQT˜‹}'ŒŔ‰G€uv`ńÇß`ĺÚͰÚu}hmłâ_˙yŁG Vq$š1šődœŠ7ôN¸őĚȑ#TźÁht˙řăOŐ"ˆ9\b˛\ý5¸đÂKTäE8ýôyÝ/ƒˇ÷߲˛˛şí­ôŸ˙< úřC ç2°lF z'’ˆÁ̬ܖ”H7{턍„ZÓ¸.q ‰ÓŻß°w˙çU´śË„hKż^äŐKŚůŃĂJpé'áż: ˜Œ!ƒŠQRR¤ĆBFŽĄ D2yŤ°°@e%ĎÉÉV‹ŹK›ěsöŽĚî˛=¨¤̘ˆKq2.żč4L[Šř8KgéĚŽU;°˛şˇŢóvď­DuuľKóc"ě Šgd[ƧdźÍ ™ §3}úţxđÁ{˝Ć`ŒH9đűď˙—[ĚGJxĘ5řŞĚ#&´sÎ9„BH¤a3Ň#dŕ§´t~(]€Ö>ްpÚľŔ”#0 9îÇŔŠĎÇîF8ř~ĆÁ*SV8ע I1üĆošśĽ“”™”AÎ`ůç?˙ĺf,ËĚĚPAÎŮłgŠ/p"ä%{ÍĄ‡ĺó<"ô<ňUâIGJkΘ1_~ů•[ßcŽ9ÚmŰXKÁÓ/žř˝Á!RńÁ÷-¨nň>#Lö gÎÉŔ´aÎÁĐmU6źňMŕ3ŢĽœćÁbŻT+!$vń5ŔęmŰs]‚›2S° î+ÄŮľż…qáËÄhą[QÜřv'˘î3Śý$UżíŹÖśˆĺäÜĐd6§YÖSˇërvi ÇűĘh֓2Sьhj 1óçĎSƒœžďżŮ?gÎ,•LJ#H‰M™Ý-ç4hˆ”AĘÜÜ\Żç(**“O>ŠGy\•¤ÚťˇLľKY ˘ęˆŽšëŽ;đôÓĎŞňRfJLŽŮŮYÝĘI‰!Lľ’‘LJ_ĘgFúHć?™¤ňç?˙§žz2^{í ŹXńľĘŕ*^ł˛21|řpőÚ¤,Śh/3d€XĘjJ&ŰĺËżÖ´ßu|JJ˛*S!Ó¤T„ź—á"1ނ ćgáśwka Óäům YÎ)ç&„„ŤÜTyy9ę›qĺ%lDHxٌr\oy7śœŚîozI#Y=˘=‹™ ĺŁ{ě?ZŒâK•qLĘ1UUUŠIuťnŃ2sćĚÖâ&‹”Ö”Ë.ű2‹IiH)•-šTJ~řĄĘ˜ž‘‘áóşžţiUFüíˇßQZĽ˘˘RÓRŠęý—X̉'Żâ:ŢFďD yżÄäfĚô*œpÂq „XǟV1śK\¤˘˛w>ôĘ*ޤľŸWĆ´ 5)Ç6G<9Ůj\BžßËxŽŃ|ěk 9FJ,Ę"q™ĐXWWŤ/ăF ÁâOWâĽ7?GcK[HŮĚ´ŤŔŞď7ăŃgßÂoţ#e†ĘÎÎîŢ/ʲ˜ áÔ30GëąÇžŔ×_Łâ2ócŸg2‰SźđÂ3JŻź÷ŢűjJôŠhÉÔ*:H&íIň3$"™Í¤ŠĎňĺ+TŠM1ˇI›ÄN:éˇq2B!$Rzˇś¸ĎŔŁĹËśžÄő%žł-Ţc‘}2…+Ž˝Ýú9b3qm\T¤Îˇ--ÍŞÖźĚBˆÔó›ľű*Ť é\—ň!Ž}ýçH´ľ˘Gě đÇ˙!ě5Ÿb›řżEŔňOŃZ2˛ńţu`Ú̙*°f遏é /L>Ř=űĹwüĂ­DŚ ü]yĺŐnm?ü š"\~ůn%DlËl3-:Ü­NýÝwߥž$ŮľkˇÜ;ŭ튧ǸqcÝÚd†ĘgtÍ‘ÁÖ[nšY{ţތRS˛j‘}1°ż€<ńÄ#ę‹Oo°˝Ú†[ŢŽE‹Ő÷Ճǧ*“YťÍë^ŤÁŢúŔ2é¤&ZđÇ#s04ţfBb1đĘ`Ojjš+żBäQ_ĚčM]ăíůi÷ŚwÄ$S^^ŽĆ2ŒŢű„&S,a5˜ÁŽý Őޗ…§™CŐŹSłěT2+´ŠŠYťW4¨ů­zIY$x(ďżó1N=ĘĎJ_w>ZÜÖő}ňúœK+ŹÚĎĹáˆSrşŃÍěçşgĎ^ő¸qĂ:ő;ŕ|žŽkpżžŔÚd‘ű_z†ÓT$9oĎďO“Ä˘ÉŒÄ?”YńŕÇő¨iî™ËL2—‰šl\ą˙Ll„đŇßőŒg›q]le0ę>ÇűxŲ$rœâ˜… ,‹Ô€ĄŃđí/öҗń˜ŢâCŽP%žuţú׿ŕ¸ăŽŽťîFüﯝśKJŠľí—L3›B6ѨgB5Ă×el`ďŢr<ňĚ[¸÷‘WUŒ˘żâ,‰ .ĚĆš?>S&ŽTĆf™ô%Î"ńˇ_bJN3U=Ön؉˙ü÷mlÝUО™…"5ŇÓRpóŸŽCĚĐƞŠ\ą,łl_žśÝG!¤ˆž ćí$%%ÎŐ$¨\ßůŘáą8:í†Ĺaxô\ŕeŰףçş'~ěá'ŚšC>Ä2 ˘xÄl*™ ;?BČHI̋§šL'Alşűiŕ˜ýľĺ „ĘúŠó1hčpŸY0<‰•ě2Đţŕƒ˙îÖŽHƒ˜%Ýłp <¸[ż×_ †łącÇ`ƍj[J*,^źÄ­˜Ý<‘ŸÓAÍu3ĹÝ{ďýřç?oďöĽňúëoÂŇĽËÔóȲ`Áü€Ó;{cX^‚2ÉŕŠ/$“ŮŽ-řĐîŘ\fú &ŽĄ2ŠKö.šoő×ěó„BĄÁŒ„ ’ÉŒşľƒć„n0‹×~ó”Śpó@ ””ˇ?œ{´ó[GlŮo.Śk_Nô`f,"ł7WŹřĆľ-łŞ¤ÔŇĽËUĆ/#’ĚłĚd Č™$jtnžů\~ůď1|ř0TVVâĺ—_ĹĂ?đ99ć(Üy§łĚŠ Ÿx⿎}ňeKR,›ń“ŸœŠĘ]É1Â_|…ŸýěřяNQĽNeĆůoź‰?vfˇ“,2˛>}úţŮŠ/7–[,Ůi ŒBb ŒcWbë^d5ŻÝ0"'Ÿ3[ś ľe'ZG˘ŠŠÉ­´ľ\‡šYlm Y‚ ”{Üc=Ëk;"řÜĆçÄP Ľ¤H˙DŒaóĆŚ¨E °w/ŠóZf\ʃ_˛(›&{BHH„š Ĉd(‘reö:ÜfyC•5"‘EŢăŰđ&FًX‘ }—ŇmŔXő‹ÁR™$|HŠp)Í%eÁ?účcUšSGâFR2œBbPcFÔdŐŞ­kᅥęęĆÎýďž§g.›0j0~sţ 2¸P[JÔÄsšĎëcFCş´é]çq¸ÂCÎŽ—A̘-Ţi—ň›b€—’żýů ¸űá×ńíş­Žk ćľlزOżź˙ědő233MúŃTO!„ôáŕôdP?Öjľ*Ą:ź#ô,[8ýz`Ü &,88÷7ŔĂw"F5רGů9ÉŹ”Xč|˜qQ‚ożůÍE•#<?ţ¤k[jٟvÚn}ňňrUI'폣Ž:wÝuë‹ŸĂt.œŒŒ Óă&OŢżüĺĎqクÚV­Z­oČŹÖYłf"Lœ„e[Ű $c!„ô5Ád/“§Ě˘-­ú0˘Ć.’š°%ľTeŐ4šťÄěĺĚ^ůźR~Stƒ<§ŕěmź•ű˘ÉŒD#’Ąő†ó°d} VlkÞş5 R’éÓąhB*’řťH /ţâ9ĆýR ŠĽ˝ 7[^E=Z@z‡F´Ş÷üśöłÔĎ@&ĂéŮa™Őƒ/žř2Ţ}÷}Ó}çœóäççƒBb™@ă/2ŠNâ ď~¸_,_×i…ďŸ÷BšĹ*-Ä%矀ÊUc{O㹌-ČŇŽâ4­Řąť›ˇîQÍj2"TV˛ÁĹy=r0† .BVfş”áRÇëf3Oä˜ŇŇRmĚ(—üě8ÜzďËXˇy‚ĽŁĂßř8M‹!Ľ¸ŒkÔ;„BH˙„3âo˘_G%ŁÔČ]_ $&.Žż ÄüđŐGŔšo‚>täŞ/Piű…ú’ć™Ĺ,X͢ż¨¨W_}Ľ2g…ĘĎ~žš9úÝwŤL÷Ë˝üăořË_ţÁLsćĚÂçŸŮmŸYyL#çw˛łłqŰmw*C7äçńăŸ†ßţöb„‹9Ł’ńęˇM¨iś#œäŚĹŠrP„Ň[ô4ۖd“ěeɍ›‘Ѳřq5¤ľíBZĂ´&ěŁĚm2óS‰VŤÍi0łľk—Ůë°iĎawX´Ç$Ó÷°ˇ´ƒ$–ŮQűŚŠ…BÂE8JcŠžۧđÖ"řACŇ3ÖcžĂ—8ŤqžŠÉčY=X*“Čđ/žřŇtŸLX<˙üó@!ą@Oc/óhhh@Yy5{î~]SLsšYiřŐ9Ç`ÄP§šL&Í{›d'ănÍÍ-XˇaŢý`9žXą{öV˘]{Œ&<ɜ*šĘăăľq’\̞6G<űî3éiŠ*ń€Y6łÄÄ 4HçÂsĹw>‹˝UuęŒÁPW߄‡Ÿ~ ăF—*˝#Ľ>ƒ™ H!„Ř3Ň#$bÓÄŹĽ\x-_ ÉĚ~ó4oˆëĘm@…śTkÁĐşr vśěuŽ×Wh}ě@słb ] Œ˜ L>˜´PńIGÄiО˙łĹŔ—ëVjת]W{g¨ŹMŁkž Čז"M´;—’!ŔБÎr˜ŢHJţůpěţ@kpłłžýՕhKLT_ÖĚžHą&đ_Tr0bÄp̟?G}¤Ę˛ŇÓs>ôĐ}ޤ›7oV_ŕ$kŮ˙łw€M”o’tďÉ,eď-!8ţî˝qُ÷Ţ{€ŠâBq+ndËT6"{ď Ľ{7ůß󥗦iŇ&mŇŚĺýá™krš\î.÷˝÷~Ď÷ź}úôĆő×_ŤĘezÂ9çœ]F`‡ž}űTř^–B8í´˜6mş*É˛ ))'´ďɲ´ TIĚ .8-Z4‡7a٧[Fá͙Š(ô’Ć,@;í¸NŽ[ÁŸ(Ď˝,##S9y5IY€ę¤ţ‰ŘŮJ‰™Ů ™™™ŠÚ𢢂j+hĽ—_ ČÎŃqS/ŁY¸S6J\ĚA„“ OJcŚĽĽcŸů&c)„šá[Ë?\ÔŠ*oQŐR™BÝŕȑŁZŽŠ)öîÝŤD ‘‘čĐĄ=Î?˙< 2‚ ľwݢw`ţăçi ąc÷ábóřşY3ĐhŔ5AűÖÉJŘä|0vaarsó°yŰ^|1y6,ůšů…ĹűÍP&F0(/z OKćď=p űǔ™KŃç”ö¸îňáčŘNš–ů,>Wż~=-n4ă†+‡ăÍ~QŸĺ™1Ö5śl#ţYą#‡DŞx‡NfĹ7Žâ‰ƒAÁqˇ…6¸ůšÁGƒ‹żőÉh÷¨OŚâçL_‹âc~~ÁߨĽ8 ´í'&őŃ 99ŮZ‡ŸMš$Á¸JB–×Ůj?ĎO&+翉ĹďÂcîţpEůËĚůřü> 7•"P ŇŰşŽĐŚ3€Ś]=+$ď –=\ťX8˜?X˝DËޢRP€öĘ'Ŕ™•żÜÄąŔ ÷ÁSŢů ň/…˜˜č2ĽŽÜ™ˇGű“‡-‡ đтô*;™ŃšŒâ˛6ő!BífďŢ}0jɰĐĐ05ú‘m;Čř¨OÎ¨Ž¸ĆŮçVô\ynŠŠi0Yf‡śş—Š)ĐúXž8ŢSĚEÖ˘¨ řąťţ‡źÄSĽ%sľ}•‹Œt–˝ś¨}ď8é%ŹFőČcĽĎ[ Ľćő×XúŮ:ĺÚYâ 4,B‰šYÎɑǏ¨Ç͛Ökç€Ńîs şmTń–Šřš’×Qf9}žëĄK[TtźzŽAƒúśĎ+“îÄ3žÜ'ű;AAýľvş§?9L–âGłÝdą{tœŕâďňçŠ03Ą î8Rč˰ě"ŢČľÓŕ1˝/¨X\F†Ţl]yŸ›•DĚîPŹ›kž~ˆKú\ šhZ‰rŠ˙-~œL˙8z•†Żý‡—ŒFhűÂE`_ŠQwkŸŤurŻXOˆük {ľ:^UuůN({ůÂ8,ّ‡ ň‘žkĆŽă…Č-(˙÷h@ó„D†Ńąa*‹)Îe‚ T7Uqز:we[ÝˎWŻ{™N˝‹ą#Śłó&ä犏՞óťhËdŇÍĚńƍI`ŠÁ>Ÿôƒ†éB1Elł2ŰźŃz#h,óœąôëĹ.ŤŁn¸V•Ľś§*Ž2ňUA¨K¸+.ăý?]‘X6ЏĚXa؁ŖÍ”ŮQĺeč NĘ+•)1Œ ‚ŕď¸#.+ďľěělmĘĹĎÓáČą´ReëÚ‹‹ Çeç Býz ˆˆ([qÇ*.ËÇń”4ź7ńwü1c Ěցß*ߢ=š´üIýz1hۢ15ŒG´śNí)¤gćâŔĄăŘśóö8†Bs‰L/#+ő'vě>„űF_ˆz q*çâc06ILLŔ%˙€kśâ°íx¸ůľ…×m܍EËÖáÜŃj°¤ď8~Oq1A„Ú‹̄JS :‹¸BŽz˜Źdi̛'¸ż|Hpú(ëtp+0o°ŕ ŕř>xĚą=ŔďcßŢnx 8÷.÷ßűöŔű/i˝ŞŤV´24m \tujäYšE%J{ýSŕŹnZś8Űíˇ…Ż_ ĂáýČjŽF&éęßň^ †Ö:DMdOJ!ޝ›†”,ç?€¸p#î&qŇź‚ŕ˙¸ęe‚“˘Ş ôíË;du,ŤfBó Xűü´ź$•řcyĚęĹsQžöŽDnö#k),ă>BqŹŕ͉˜ľX…âtSłšU›Hě"‚ VŘ&ŚĽĽ!ł0b˙`fŁga ĺ”˲Qˇ‚ '3Vç´ě?xSf-ƒĹl-őX×°‰Y0bHw´jŢP•Df `Ÿ‡bHŸŸ‡Š™űÁO˜6g9ŠŠ ĸl€6uëÜg 퉎mš "<”.(ĽDęEČÎÍĹÖ1}îJü˝r# Íęóľ̜ż ššůxňţŤĽœĚěCŽ‹Âˇ&ëáÜ3úŕ“og;˘šL ľšüŰ ęץĄ!śxGň5‚ ‚Pw€Piüłó5ňż)đ˜Ëž˘ëŁR4l \ń˘śŽç€˙f}ŹřÍęTć ,GőÇxĎf_žă™{šNX80ň"ŕҀލV˘ł™öýoyxűYˇßbĐś9bŢTä^}‡9A¨ Éqxáü8Ěݔƒ•ťóp0­HÝb6ˆ6ĄGÓ` iŠŕšYÁ?q×Ռ‚*Š›ę[Œš$áÄ?8y–JşZĚů¨nX*3BŰgŒtYFFRRR°}'˘żúăśď€Ádu&ƒíŃ`÷hTRëř\ée­ď5h ć‰Ç‘:â|0Š’ QQQNˇO”‚ B]Ĺ]7WbyĆ2ůůřòG‘ęĐZ¤äĂ|0–cZž&M‹a2 `ÉОOχ%[ËĹäs*´”W<b%+ ×R–a0DÚc¸öĽu¤ĆÐŞ=†hÁR0,AFÔŽ SĚŤqyŢdeei¸ęůʸ˜I$‚ Ô4UWŘż”““‹Šł—âčńÔ:i\ŚĐžrLTFžŢ1110b,iĆ ĘĚ!'7Ÿ? ÓćŽD‘ĽXÖĽ-T?> ×]6}Oi‡ČˆPĺlOqY@@ Í žýtEE…/Etd8:śIÂđÝ0ń›YŘšď¨ęÓ˘TlÁŇux˙ł)¸oôEʄ 00¨ÔŚrÝ,ç=ä´Žřcö  yEĹÎf4m‡îź-š6Dtt´*9YşÝ/3ňőŕŕ %Băň¸ôůx靱aË^u ÍLüęOôęÖImuŒZŽ',, ƒúuÂ/Ӗ 7żŔł‚<ÚgŹřw ślۋ¨Čé‹A„:Fíń‘jGűb˝n*<‚îeÝτOIę\ý0a/pëG@Ă6Ž—mŃ ŃŽœĺ;hŻűX¸¸ç߉Ët.¸HlŕŃ[˘ć[—~üAA(M^^ž9śţ@bÎf•t­NôÄĄúĽŚŚ"==áď}ˆŕšóQ/[‚°O?UŸĎҜÎ(/íÎó‚ ‚P— Ŕ,ˇ ?`)*‹šóÇQôî^;ůĚBŃ ˙Âüó.%0óqYyhŰhٔ óď{Pôć:äß°gĎ@ŃĂËQôí6§ŤďY|oŃ:k ňU)SAA¨Tĺţšďe˙DfV6ŚÍ^sąłV]œřŻQĂxthŰT‰˝čfM ͘>wvě.6r°„;n<-š6B||ÂÂB=•sQ–ŚŒW"˛{n:őâ˘`,ţüƒGRńë´`.vłw|/ˇľełFhݢań{<űŢŮšy˜ţ× •cŁ ^ǕŕĐŮ߂ ‚ ř'"0*G˜ĐÍ ŕ]†ŁÚ ľ–â|kpŮóÎ]6<˜ľw˛|P0đěxŕ•ŔyWjŃwŞ…€@ ˙ŢşlžzԏŸ ‚ œ,¸“¨˘°LšyĺŚ"*üč‚ý0ä×DçŁŐńŒÔw˙6Áy÷y‰ŕ… 4e*RSÓÔöI< ‚ '3Ž:ç؁WXX„Ůću8bHCĽX—ŠüŤć!˙ž%0˙°ÓZłŽ`É*„ůŸ#0O؈ü›"˙3Qôüż0Ď=CNőŠÍkÇfŽvŒxŹÜítA„şs/t[ÝścÖmÜ­Œ¸ uőŸŃ€Žm“eçTZ2ŃÝ+#3Sf.Ӗ5Âę:œ=ŹşvlŽŘŘhĺFćř>w&BĄń[6oŒKĎ?ÍćŽĆ™?çŽT%Jš %q‡ő‘ہNíš[÷đEróŻEʉtäćć*WúĘ"1‘ ‚ ř"0*E@€ľÄeZtx„K)šÄ\ô0úÓ˛Żľěpt03ißçĂ_€kď w0ރgŸ™Z?Y=Š%ą ‚ ”Ewř HÝęŹŇ@Í mGLáÔĚáQ\fÜa_~‡š$ô;íówďFZZşJ~ ‚ B]¤Ş.œbłœŠQ ›ŇQpď`N 2 `žľEĎŹBţ93PxßR˜§ě!ťžf*VŤcĽ‹ç+BZAÇÝň˜Qd6gŃĘéJŠžęčDĄVÇśMUŮJş—ŠŸă¤ď“[÷bמĂ*˙ĂgbŁÂqîˆŢˆ‰ŽÖŢbŰož~źN@@ ˘ŁŁ0ě´ŽHNJ´ŽKűwôx*Vţˇ]ýeąč°bç5m[هԥC3ő•y¸‡ŽŚbŚ-ĘĽ-??îœ3‚ ‚ ř?"0*Epp°zÜÓqxjŒA×-{•ü$&Ă#ÚtLvë<ě㒟ĺągťG‹ďkÚV=ęŁ^AĄŽáNrĘU’Swř JŤÁxĹ šűQ0ÁȎĎřo~\$Ť -ůüĹW* žžëöIiAAĐaɲڝ błĄrâô‚×Öh‘ďĹU~ KjŽ8†˘×Ö"˙ź™Ş$¨eĺq|RlԎŃíXń˜‰x^A8Yŕ˝:s/™Y9X´dŹ‚Ś:ŠCh]°­[4‚ŃhÔŚŇߕű‚ZŹ%+7وń†öËQö9Ľ-š$Ő+ĽĄĘpAAHLˆĂ ~­%/•Ŕ̀ĽŤ6Š2™úś”Lľ˝Í’ ˆ•t*qœ Šđע5ŞLŚ> S˙ŢŽ\Ž ‚ ř?"0*….0KoÚËł7ޟ§uPć ĆHęP2ďiyLÂ#-íDu­; Ć8vXťŇý嵛‚Ź.}ÔŹ~üAA(Ą¨ČÚĄšS3‚.WDäBőcMę™öîCŘëŕ,_‰˘;Ur˛˛ą’ŹAj°ăŽĺ‡fš˙ÓZqĎŰ;ĂÎ,XśĽCĐČ3Ă. QQáV76OżżĆĘ5[q<%]w)“)‚ u˜ nc°.Á™ÁŘź˛‚cÝ^˛Nź‰#Ŏø…‡ĺ1u:Ř˝ďp͔ŹRźű[4Ë#‘—×ř~"đĹ{˝ĺ`‹ˆ‹‹÷2AA¨€ ‹‰—‚ĚŢëČtŸbąÝÚĘuRűŒĺV÷V=1).‚ ‚ w֚ńoá.1ŚĄ2X‚L\cÉ.„ů‡Čżü/žňŒÇňPUiÇjmў2Ž‚ ‚PŰpw`Źrró°âß-Ĺîeuwâ˙Cľž{ąX‰€K- ÜÜ2łsmď ABąă™.:Ťę¤.×†Ř˜pŰkyš…ČČĚ)ŮâR8LFÂBƒlždžNŒq–ŹŘ¤ž§ťąŽärAÁż™Pi‚‚‚´€4Gtőč}0ă.ÖÎFľ˛ŕ -ëZRv R%2‰˝ŔŒe*gü‚jeędŕńŰŕ)'Ú÷@`` ĚAĄĚţŐÁhŠ ™•€ĂGŕOTz9SAA8™p%ŹÎÍľĆ ‹ą•ĹÔ)NűŸ>…Ť „ĄQ˜šĐ8†śŃ%SrDÉkŃZgf€Ś-ľŽRË´˝ČťbŽr63dU-&Yhś3ýqőAę"ź/,,ÄĄ#'°}ץbłtCŹe)ƒP*ž˛vĽĚ ‹´î2‹MPhB`€ÉśŹcéJĎ'sq,aýLVˇ ˛m”čݰdël%2-JhĆ*FČUvpUkÖí@vv. $ŽA„:@Ą’čBĽěV€Uŕů9ŔŤçN:žŸCQŰLťm Ôś˝QTŠ6K˙ýůxŕœËP-L˙¸ű*ínŹĐَ™ FŇOÍS(‚ ‚ë;Ł…íŹ˙„ÉÖíŠY˛ÉŕăÎf0efŠGŽ‚­,<î?úN‚ ‚ŕ wÝ@ôrS+ wT:„ąÄÁ8´Ě3÷Ł2ÂľŚ@ŹI8P?H11ˆ†!V{ŒÔ^÷|ă ůZÇhŚ eäĂr<–cšę|<˜ ě˂eżöXPůŘ Rä™aţvň§îCŔíía8+ •aľy‡:vttq'F‘8FA¨IŞ"b[g6[°nă.ääÔéöŒťÉd2ŕœ3ziýhAJ¨ĺř}ů7_,]Š;ˆĺšmň3ďěCŠĎSqc~qILţg4jýEĽ–)ő=Ŕü‹Ĺ΁ÍsöLÁŢGĄ†4A¨  ‚ ‚ 3ĄŇ0đ5™ŒKj´°úˆÎ>ěŃű•Čě•s€'fmŔ§üő)°SÉߍŰi_ ’§\˘–(­)ţž+ł† Ÿ˛x6p÷•‹ËČѤ–ˆnÔXťY´łW. ÖA„Ú†ť°‚űĚf}đÔö8`Ÿd”„Ł ‚PŠJ|bÖÚF–J)ĘÄ^S ŞBཝ‘ż#–méĺ/X/†6Q0śA›ŒÍŁ`‰÷Í`6KQËĂŠÉĐ4N[y­łÚp,ćݙ°lMƒy‹śýÚw°ěËRŻů”ô|ž˛ŚÔ<Żl OŮe<†TíŘĹ˜Ôą4U2î’HAđ\9qŇÁŠł˙Öď,nžënťĹ&y`ßNyzĺf4šĘ´ŘnjŻE„‡!3Ëędš—›”YHŒ})Mo‘›[ˆŠYś˜káĄĹŰc´}›žLNnŞrŹ Š°~óntl×LşŔLr9‚ ‚P;™P}$ƒ;ËĐĹ,..:"z‡3’•™=5hŢ>!7˜ütéçšvF•hŰšD`F^~|Śö‹ŞÜč‹ Y˝¸ĺ żr%ťśč„ččhq/AAę,˗ŻŔ–-[1|řPÔŤW‚ŕ.tZąb%śnÝŚ:=š4i‚~ýú <<‚ŕ/¸ęŹĽYU¸–*ö˙ĂMš0…ŸnFє˝@Fő…¨@OI€ĄWŒ˝ľëkýŇۆƨĺ¨ę…ŔŔ‰ŰXü´!ˇću'`Y“óęă°lLő™ÓYŃÇ[`:­!,MÂÂÉ…śÓ§ĎDNNÎ9ç,[ĄöĂśŒqvn^>6mÝŤžŤËm[ƒÄÜrÍˆŽ S& ¤l—›Ą!hÔ ‡Ž¤¨ý‘_X„­; mŤĆ^m˙őҗť÷A†łÔç×ל3,4Ř.氏Ö}—W€ŒĚl%<Ťěśp•t­ťčœÓÔ9ŕîöJě#ř ›7oÁš5˙!33 čÝť4¨A„“˜ U‚7y!!!Řۨ;°g.*E––ŕ{i$đě Q[xß^N,ýœ7f g—ü˝c3đÍGŔľwŔëlúu‰Ę’ŢĽ7âäŚ\A„:Cm)#5yňxíľ7]ž†řřx´iÓgœ1 ƒ‚ŃhDmeÚ´éxęŠgŐüă?‚ .8ŻÜĺ?ýtŢ˙C5Ďݔ)ż–ť|vvśÖŃx†uëÖŸ|ňzžÇŁGߊćżţú[üńÇ/•vńĎ<óźö]Ś!""óć͆ŕżlÚ´=ö$öěŮ[ęůŻžš„ví|p*^†ĺ1ÉŞ˘€.{ć`#ŒŁŰĂt[{ŕXžę´$ÔÎ\‚%ÄCĎ5ąe5X`^sćŇaát(^ŁČŒ˘)ťŐžó”•ć†nęXęłÚŔ’%K1cĆ,Ź]ť‡QĆQQ‘hŐŞ%N=u€‡DEEĄ:čÝ{€Ś\xáůÚ5ýáRŻů[Œ TĚ}÷=„ŐŤ˙Uó<ž<ŽÂÉÁG}˘Ĺ÷ŸŠů•+Wᥗž‡ŕ˙¸ë&Ďňˆi陪dbÝu/ł @kcnšvš%7Pý1Žrt5Ł›WۖIX˝v§zΠýűgůFœ9¤Gą0Í[3ë㒕›m%/šîVÍký{Ĺ%?3věë8í´S!Tž˙]ƒ›nşMÍóz͜V]"==>ú–.]^ęů{ď˝ W]uj3ĺĹÎţ ۑ… aîÜyřďżľ8~ü¸v=3+œśmۨA <é)‚oŠ˝=‚_ ;b塠…ÎUvӎĎŽî†WIŮL[öůäN¨mÔĆ>¤V­EvmŽ9CŰ?'PY ƒ´Dp×^VËĺŔŞ9ŹÉ¨AĄ."e3…š$++[ [fϞ‹‡zL%窄3°ŸĐˇoo[ĚČ݊°OÔń{;Š|aGĹe„S:ű÷°Í;vššš„Š`ÂřŽ;wźżĽ[JóćÍlâ˛7߇ž=űŠI?÷Ą:pˇł–ŽW|üĎâÝ| ľ,‰ÁľV\ć K A‰ÍLwwDŔä!ü|Œ7´’źăVhޞĘđŸyOŠcY5ťîÜš ×_Ìšü1ťvíVnC¤¤œŔ˛e+đÖ[oăœs.ŔwßMŽń핥öą˙~ŰüŢ˝űPېإňŘ˙^÷íŰĄî@a›ƒ}Ž"#;OÝ3ÖľÉÚ=fÄČĄÝ1äÔÎ V‚fWËSd`BŸmŹb˛âŽ—VnĹţCÇm柲m'R31wáÖ1XËxöŐ>›e:­ĺ1íßc]lßţc((ÔŽce^÷l:př„rBă5QrpBmáᇡĺŹř{­W/aaa:tü•yóćŰbeË–ŁŽŔœÍ¨Q7ŤAĚÉż™Oe\ŕŔAüő×|5ŘőňËŻĆşu띎ƒšúžy˙ý BĺçIŽ'ĺ0ĄÁ‘ ›âxd22ސĐ<žˇÄÉ,*^Ľ1ó˛Ę>ď Ĺeż<řźÂž]ŔZ rŹjŒ‡’Ű"&ąĘÄě˙ń˜ ‚P‘Ä•ŕO\}ő•ĘŠĚ&8vďރ9sćâřń5 îĹ_|Şœ‚kqqqhÝş•*CEYy.rLńűÚłté2$'7qšţĺËWÚćűőëk›?묑Xľjľ*]Ŕ‘¤RÚPp‡™3g#--]͟{î9xôчԠi;„ÚDĄÖéW`.ÂSiSóÖ0]ß–őŠ0Oß ó܃%ĽA=ÄPÉaźLŠÚ1,„ĄĐ˙ó2lŰďż˙aĺ(J˜<ĺ”îŞíŽˆˆĐ:x(ç)Ć4\ć7ĆbăĆMxúé'jĚ­Db„ÚÇO<Š÷Ţű@‰žŻšćJ'ˇŢzł‚R´úŔ÷B¨;č¢Ý{ŔRÄXťîőEđžˇiR"nźr¸ÖքŞţ˜Š–gŰŘš}S4i\O•Ż$t űţ×E¸oôů0™,JüU,łÚ˙SgŻÄžÇŹý}Úó,ŮŁk+%‚ŁƒYŮ÷Y°fýne,QŐŁ•™‡iŸŤśEwő´$¸”ÎŞ ¨ĐMśoßożýŚĘwÉ9XýP@vË-ŁU|@5j¨Ş?$%5V.l|}îÜżÔ U|šýöť0aÂťčŘąAđ "0<™،6żąą18˜Đąj3˛đü0ŕ™y@x,Şk ž,ű|X4ĐU˘uG€A°ă(´/ŢÓbP%Žk7׍U}”ŢĄÚq‰ŠŞ•”‚ ‚P›8 %™đo G´˜)CKĐEš-¨§ĹNÝ ŠpZž´_ÁűԖ¤dÝ]–`3f´Ö™ö4,X„;v⍯žÁM7݀Ú…_˜8‘Š­[ˇ•Őé°ł—#Ů —á{8Âň’K.ršn}fttTŠň…tžzîš§!ž`ď’qŰm7ŰŸ%a,T'ž 헧cŮ[xfƒ#Ť‚Ąc LÚ0Ś# §í…ů‡Ŕž,ĎÖŃŽrš Bƒű SĐÜT_SýZäiźâëř†6öâ˛#†kńËíhذAŠĺŘś˙ůç %.ă˛S§ţ‰„„Üyçí¨ $F¨}ôďßOMÂÉ;‹Ů),ř'U„ĄÇ,ŰvB‘ľţ"ę„b̍gĄqĂřrKcÚCYLt$ţ7źĆö§ŐYLŰ=Ě\SűtŔ€Ţí`¨tűÎ]MƖńŐó´Őa1X%cĂuGƒz1Ĺĺ1KݟďÉÉ+ŔżëˇCŠŃŞxźX–sßÁcčÖš•8; ľ{7Ő+ޏL‰Ëˆä ŞŸqăŢą‰ËnşinžůĆ2ĺîďšçNüđĂOśű_|EËŤNŞą.‚Pב_–Pe,3ů•Úäx…Ý˙ŻüČËF•řý íÎ%żěóŰUý&$hčD¤–™n™U:Ą]5 ŘąŢ łkՈęĺLAAđ.éZ2n|X îŒĆ÷ĄŘ`Ä “4Ąŕ#˙ţ.Ôúúř° ľź 8B›ýçŸááaęovĆÖVěKW–gÉŻ—HLLĐ:­nd+VŹTÉlgœ8qۡďPó}úô–D‘PeôŽ.AđW\učęçđóQŢÁl„邌úz0^ę C7Ec|ßšÍPYvY]K\uşÖ´ł"?˙šç^´‰ËnšĺF­ăćš2â2Â!]!'MúD댳ýňËŻąaĂF‚ uűöʙ(~ĎţŁNĘ1Öň VŃÉçôCߞmľ~˜`ˇż#Ĺ]t:;sxO4kRßú>í>77ŻŻż÷+śî< ĹÖűcOˇ‹˜ér{(/żý#RҲTż?ƒîežÝeśŐzě´cľďśí8ä•}Ä3aĎ>kź*3Ą6`Ÿ+HH\AMÁ{–ż$ôĂmˇÝRF\F˜źě˛KpŢy˙SsëśmŰ!‚o3ĄĘčÂ%s›(Z“šUfóbŕ €‡˙ĐÎŇJŁ ň€šŸ8-ŽźBbkKGžzó8*EV0ę,íűŻ…7Č @@§JOçÉh|Qá ‚ ‚{ě6ńRDޏ!cJpN° kx,3M‹|ăfv$˝ß,Ë’ů8œnVq@ŁNmŠËzF ^´Üř+,ŮÔˇo̙óöîݧJHÚťĐŢ~űXślš6MĆO?}ďr=ďż˙>ýôs5?{öŸˆ‰)éŸ8ń3L˜đ‘Jž,[ś™™™řńǟUŠŔ}űök‰ŁśţŚ8űě3qŃETJÄŐľk„††ŞŇ6˜ą4¨3X“téŇYM$##S•ŇrfeĎň˜z'…3W‹Ţ˝(qڅžÇ{ŘékŁG߂oĽĘw}űí÷Şł;%ĺ„ęďÝť—ÚÖ-šŁ"VŽ\…ɓČM›qôč1DD„ŁGSÔş[ľj wa‰PîníüĂÂBѨQ#œ~ú œţšˆŽŽ.óŽÄüĺ—ßÔüüâ´s˙ß×ছnSó:´W%WńĚ3Ďcʔi*ţ˙óĎߕÌ=ǏÇ÷ß˙€Ĺ‹˙QeĎrsó”{51Ϗž={ *°\ŮO?ý˘„…܏„‚C YÌ.ĺÁó÷?ŚbÖŹ9j„qff–*§Őśm—Űwç÷ŕŸ––yžOŸwÁSOíŻ~kůůů.—yăWTY†ŁGâŹłÎSçć˙ţwś*ç ý÷KX^cŔ€ţe–ai‡sĎ˝PÍ;;ÉâĹ+g ľk׊}ĆŠzőęŠcr鼝t ÔűdŊTɏĎ>ű\•ýŕh`ţćŸyćÉ2ď[´h1~űíőyŠŠięmŐŞ•:G™źĽ8V¨9ôş]‡ý>ç Ö˛‹`ČŇrF9…°ä;‰ƒBM°hą’!,–­ý1Ő\nÂB‘Së#`@}˜çDŃG›];šiq`Ŕƒ]aI¨üŔžG0Ľ;łü‰ţYb+kݧO/ĺPlOYzřÁUmđÇOÄŘąo”ZĆž˝úä“T<0}úLüúëďÚuj§KäŞvnđŕ¸ćšŤ…ĘP^Œ _Ÿ{÷îŠĹPďŞxč›ožĂ’%KUŰĚ6žĽ‘Ři厫Ý[#°m;|řˆÖy Ú3Ćx—]vąÖNŐGeŃżÇ 7\§m÷m*Îúüó/ąnÝz%@čÜš“Šuô¸ŠmŰ îĎ-[ś¨eš4IR×üË/żÔi}{1cĆ—l~6K‘W_} C‡žîtšůó`ڴ骥ťmHH°ś?’0hĐijXZľ˛ŰŔv“qŐÁƒ‘—— ęŤöŸÇÚŢíś2xőď?Č­ŘÁń;VgťĚďÄóáᅲŘ~cüNÉÉÉ2d°Š?] RŽŽóĎţšđŇKĎăŒ3†9}Í—× Á7胈ŽO‡ő–Žîô?´8 ]ŤĆ¸úâA vzn—EfőbpË5Ăńě듑ŻböJÁc/~gź Ú5E€vŻîîý9üÍíÚ{Ďžń=Öo.Š”`Ĩ+NGRŁzڟɼĂěk‘[PTů༜Gű>SÔ344DťˇlŁÚwś/îXđ˜ąÝ˙ţűą}űvdgçx´ÜŻż˙>Eĺ§śmŰŚŢO÷úN:jmÇYj=Ž~ú~eéö>z_kçţÁ×_ŤňKééę>÷ëĺ1iŇ?~‚“uße›gŽkáše–qŒI¸/x>p{xŸÎăí ˝}ĺV2ŕz¸vďŢŁňjż˙ţł* YÎňöŰMśűďżÇĺű™Űú⋯T›Î8ÄÓ™Żň̍ęyŔ^˝zV¸ü•W^nË#ч8;Žüméż/ćPžůć‹2ëJIIQqŕ…‹ŐvđwÂ|sŒÝ)ÁÉűţ.YÁúźţqüLžžA¨Hď’ŕgĽ0]-ĂG&ľŁŕHtK4<áç-Ź™Še޾Ψ{ľ ËčYPŽÔCŽĐňsáňóœ?ř€öŮÚg{X’’ďšĺ|-:\ oq°yÄ%Ä×:÷2&â^{íMŢŁwÖ5†´´t•ĚüňËĎ œ|p¤÷ŰoWóLP°óWˇdŽ9Á5Ţp ¨ěéČ ¤y˜đâűžŒÂëy¨oöŽŌ 9xň×Tdç[T’ҨF‹i9fl>\ˆďWdăŮsc1ŹCÝřsÂą˛Ř |(|Ş(‰TŽ9˘’’L„Ůħżţš‡wŢŤ:F=XtѢżąző•@q\5şY÷îÝĐ­[W•(dRÂ3çłśy&m+ϙO?¤%k?,ő<;™Ŕ›1c–ÖIú"N=u€Ó÷3ĄôňËŻŠQéDNóç/ĸqoT¸,Ćőđ3íĄ¨ÇűŸI0şĂ8vfxŞM`Ćv :¤Ś…éééN“šúrŒĹeL ?ůäł6ˇ#GŽŞďʉ"°{ď˝ •a„ľŽÔ/Ę8ÖíŮłWMÜÇ/źđŹËë5kţÃ>˘ö—ł÷sű† Ź:g})‚JLLTŘL\óx8#//OëřĎö7Ýűœ ĚěßĎălĹt<ň¸v̖•zžIxvJsâůĤ1;4ʃűîÎ;ď-sl×űěł/¨ß„=LÎ39ʉ ű×^{Y‰ďâNœÂet1ŇŽ˘Ł5žá3dÁ˛;ćݰěÉŇ.9Ŕń˙júz!xŽţ[=‘–U§îá-Ú?ŠĘîşůÔKˆŃÎé ;Á–{ߓű#((ƒúwÂĹçîáż.Rí<ŁÁ]{âžg&áÖkF`äSRá5mPn^>üłă'NĂŢNj7ŨÎŇgí‰ŕ`Ť{™ă7")Š˜9ď_ŰöUmGŽĽŮśŻ6CÁŰ7 N쥈šązë­×U äkŞz=ä€)Ć>ŽNł\/ŰNěŸxăW]fŇyúéç”đÎŮvPpüÁďšDvřđaí{<¨Ú{ŽOQm' {^~ůů űF8˜đÍ7ÇĄşp“đ\áÄҍˇÝv3n¸áú ×őđÏŮťŞ śýĚOŮ˙6ísdÜ箄PžÎŘşĺ Š ÎA\EpP)óMüöP$Ɖű†yć_œ]“y ÷Ý÷ńŐWߔšćéëŕqڐžy/ŠĐ Ô6D`&x*Š ?\Ż“÷fdéOŔ7Ł?őŹŹeB ­–°ßüwŮ×ÖÎ| ôż¤rîhšZ"ńm{6Žqţúç{..+,î¸ř{.źÉáVŃ0<ÜŚÔv…¸šyŸ+ŻźVĂŐ8qâ‡đgjÓśÖóćÍÇ<˘ćß˙5rŁ:ąż)ăM ˙vĺ#BőÁ[ĂWÂ=—éd x="ŻĽçz­fý‚­š¸ňq52ToˇĎęŚˆÓ×[;BłňĚxä§źlDż–Ć+ľ”Ú&BcH˜˜hř îşWq4äƒާF2qCaÓ|¤:ć8ú“bŹ[nš žŇŻ__%0ăú9‚‘"2{(°ŃŃIńż“đs%Ţôr›­[ˇ*#†r&ˇ¸ţ!Căâ‹/D“&MššŞ\ź8ȁB &Eţy˛S÷°W^yÝ&.ŁŰ×Áí)((TjL2=öؓZBŤEšŰÁ¤ĄŢáĆD/×Ă­tŕâ6˛D*ÝÜîšç%Xł™Ń݋NJˇŽf%"$&łčţć(ÔâžćČTâ(fâńřáǕЁe[9 ”ç…ZşĂƎ;U˘nag5ž@׹‰'Šy&˜9š™ëáśň|áyG‘üSO=Ťöorr“Rďç2ˇÝ6F%˝™ˆ9ň ľ}ÝĚD?¤y=wî<%@ăf=a÷Č#iŤV˘7ŢŤö7ĄË›.„¤› —á9ęjű=÷;Ęš?™@ć6ŰĂä¤˝Ł‰˝Đ]`ĆQŃö1'÷ËÝw߯Î1B÷wţfx}وÇ‚L¤S0¨ť‡8ƒű•\{íŐZ§Gu>9:Č0™ŞwR°#Ž&ŽeZƒšŚ˝0ĺ~ÓÁ" ÷'˜8҅',óçK×%ĆóVQĘĽJ,2Őłç)¸đÂK•؉IZô{:šŽ3&Ë ĚŹ(&ĘôX‚ś}lď˜Ä˛Oň0ĄÉD›ăş=…â2śŁtłĐá÷g'2“E“&}Š„M}É2ö0šŚ;‡q›?ř`|);Ě/¸ŕ<•pÖ;Aš..cRëő×_)ŐŠĘN8Їî¸ă.u ž{îEüđáZR*R˝Î{/&m9‚—ţ#ؗaarV}ĚäÂ<ŻfĽÝ˛JFĺqם‘ŘÁh/VbÜMAŔě\ýóĎé Ěžűn˛zd<;cí÷#?‹eÄŽ˝ö% ›={N)Á!;.™˜ćkÜŕ9 c “ LŠRÔŔQŁL¸“ƍٖc§°~Ź8﬜;Ë 4~ř‰šç~uźŃýúőQe+¸ß8Rœîg:<ŽşKŻ}œ%])`#ţ•›0É&̘ťťöĹlőĚŞ™ ztm‰ËπА`î™ Núf ęž0&:Ýy‚ľőM›łR ˇŹŃF‘öđďúÝXła7bŁĐśUš''".6B­+5= ť÷ĹćípčH*ĚZœfÝŻV1…hƒűw㷟‡Ä„ĺ˜ć+˛;t4ßýśXëb3‹˝Cf–ľ"cŹS›2/Ď|qVQ‡×$şąS8ĚöžâgÂźIUއtÝŇĹeˇß~k™~ÜvŠś_zéU%bű²ŘÎŕ˝,M >Ôv˘`R€ Ջ>ř/×PŸ ­ŢĎ\Áö•ĽˇŤShÄĎbĚ䘗âóö1‡łö´şňŒĂ)Žçţ!ĚyQÄ9tčH%řg†ňâO°Ď7qż8 Ŕ8đ™gž´Ĺ8Žç#Eoţů&LxW•–ľ—éđ:ŹďĆCǎƒ Ô&D`&T ű†.001ńń8×>ᗗ´Ěüđ˜ZňFK,˘ó°Š—ÍJע>-Ń?˙`ó* ǍŽ×‘ł6h™‘J8 }ńđýDř‚-:* YűŔ@Ja Bí.,Q@82‚ WýƈśĐ‚ ÔŒě3y'ŒŢŁ­ç€Šęmď/ŤłKý=¤](NoW"úŇ>۔ÁO]çƒRVBšp”žăÄäK]pÁ%Ę:žĐţŁ×| ]\Ńşu‰ŕ¨˛‰}ýaĘR:Ź1BěÝČh9Żť–1ad.0c˘–Î •…NjŽJ)°ŐIŽŕmŻĚ¤Ă[y.,‘á*™ÉŃş,ÝH؉ÇĔ+8˘‘% G‹ÚњzňÎމĚţoű^tĄ ż‡^nŃY2ZOŒr9=Ůë÷•łŞ;č 6}$ľ3(Úr6uĆ ëöđ>‡Łd]ÁŹË/żTÍł#ß׌Œ×ÓXV‡eTôďȄź~LEúqăqĽK™#<§˜œu&ZĐŃďýěKí:Łź’ďt{Ů˝{šçţ+ŻSžâWe?ďâ؉k˜ á Š>܄˘ńa9‘ÚŠeW&Ěßî@ţí‹Qpál˝ť†ÍŐ[RÔňLÖcčĚŐŁŚĄŤ¨Ž3QpEđşĽ_K(¨wEůqIÉ B_uŔDD„+ˇ+ôśŸƒč𘱄9ăŒáĺ–ńŚŰŠîZV•ëf׎]\^ŸőX†Bvg ˆ˝3ŰHoĂŇZz~‘q„^šÚ‘Ν;yT“űšÎŚ„ÂŻňÜ:)bg9'–‚÷ÔÁĘ×q#ŐŐ.ówTž°}Œ\^,áç_M_/ĎŃŰ3Ć´<×âbŁpĆŕnxăŠkńńŁqÍEѰAœŘŠ&ĹcLÚśľźĐÍW GűÖIÚ}G`É6Wq˛ŠĚ†Ť/ˆń/݌ÓtBHp íłŐ>2ÚoSńîŇ~—ťe‚´űĄ~=ÚâFáÖk†)w4:—9ßVu”0Éü>cšOö^~QŠsĄźóğĄ ľŤr߄߁}Ľ¤˘ű2oPŮëáŹYslqgEŐR^zéyźýö[e\Ţíq& ÓąŻs-sćüĽśƒçĺ嗗OˇwB×5=Żâ6T‡sĽ'1 EäĚá– ˇĎŮĂ|•>čąşŕNW.`|ޤsżčsQq0íő[Oh _ŸiëHKA•ŠŻÝ0?;^Ë]€J‘ŁŻ?_qŹM7$ipŽőŁO&8z€–üLôą36žŹwݰaC5*ƒRńń叾ݼy ~úéŐ!ĽÚe˘Œ#0iĂË`3TĚŰcľůďgűűŻżfşeŰę'~† >RÁ۲e‹•Ľ>mü9 –5Éé^ÇÚň źiŰjäUe[Y;uŮšîÓ°°P-ŃÚJYß3XtŐĄzűíwŞÎb^}ô>ţţűթΑýôʍްcŽ΄˛ ЙÔcGüΝ;ľNť\•¨™ź‹ˆˆ€ŻayJW°SHÇ^,ă LTąœ­ĺ)$:őTkBÍ^XĂR€:lëşwďŞĘ Z—šĂöš.0ŁC“'‘Žčĺ\ÁŃĽL’9v€3Ô÷ƒcšOG¸}L ÚťŽéЉTǕ{„c ’Řö[KŠ•ŔďÁĎ`<ö÷ßK´ĽÄEBßż21Čx•ą!“^úˆ_Ćśzç8Ë<9ÂQĘ,ĘeX1Ř A§Šíať§N Ž0É2,zŐU׊8’É;ŠíKX:C߇ě8ŽhT˛}‡-ßW^nUá~¤Ë÷˝.ÜÓËcň{ńxđ¸0.ĺq˛żnéq'ăӊÎS&LyLwíÚĽ’ëœ6mÚdfŇy <č°ă ˝<;ĄŘÂ^˜čˆ˝ĐDO. Ջž<Ďó…Ŕl_6Ěßí@]’’Ë;‘ŻM†äÎn‚€˙%ĂQó÷U…ýwëąŒ}^‰e˜=…ebôsľź’ĺ]űŘ>ë0ŕ *ŽŹ×<^ť'čń7˜!ŒßĘťnćPř~WŁîP^^IoW\ ę‰}.ÁN2ąąąŞŁ™yć|Řá7|ř0•Ó`~Çţxz‚}šV ţ}…Żă Gj˘]fqűö*ž8|ř°zdžNG/ę 8˙júz!xŻœLvƒőĚfŁrţęŘ6 m[5Ć5¢ĺ›0uöJŹßźů…śţ)š×ˇŔżŸÖˇ=Î?Ť—ÖF)ą™w1¨ýbDçvÉxéŃ+ľýąţľ KWoÑŁé(PżŃ˛Ÿ`Db|$zvi‰3‡œ‚Ž“˘mc€–Ç2Œ.ťŐčzśmç!źůŃäš•XÍ۔ŕúwŢĆŘçŔöœ×\^K9°‹š˝­*ďZę-*{=ÔďŤ)„Ń…2UÂ;ׯ•ˆďs-ěˇ#ü­çĺĺ—ŰÎŮŸÝťwƒNĽŽ”7ˆĎ›x“0Aw,ž3ls ŞkŰíqćŽe+ĎkÇź`Mä xOrńĹŞ)%%EËťŹTy•… )÷+Ë[ŇQŒĽ8uqœ'čçŁ;1˝~opüxŠŠŤĘËăRŕɸ‹ű’× ^7(6ÔŠŽk… xé™ÜŚ"Á™ľLf&˛Zô6| Ÿp|/˛ˆO‚Ç0ztĐíL`â=ŔźoQ)¸ž+n~UťŁö|䦍mľťyšŐś1ż‡U]íL`fCVW]Íŕ<ôĐŁe‚œh™J1 W.&|ˆĎ>ű˘L˛ƒ̘`˘ő-kŠ×4tF  ‹Š=ëÖ­WÓ_ÍĂ;’ IŻ?îč Á@š7Nœ({íľ—U‡_y0Č{óM÷Ę0Ąwď˝Ř\Ctč~‰³?|ßVnČl÷Ţű -8Ôaŕ§wô3IřňËĎW˜PŽNŚNýS=RŠw@6Tu23yÍŔ™ĺA¨~R˝œ8ú–‚ëŕ€T•@¤űŰmRžë‚;T6Ž=~źd´fy‰Sřxç1“:î¸^čËPˆĹDŹ}Ç<M˜q@GFł3—I*Šˆ.Ţăq`˘ű]/}Ş‹ž(ĐrVć‚Çć7^QąŸîţĽ;€ń=˛Ł˜ĺ?*sž˛ă–Ç—#Mcr€^*Œ#ŽšÍtps&ÓGÎÖŻ_ŻÂĎŃK(ŘżĎWčnłĚý["0ł Çô‘ĺúqá~eRŸŁĘš/x‰3Áa‘ń!c_wg.@žs†ýČö{îyŔí÷ń;Տ~¸óLEđ6ćŇ´˙ůż‹DeąěɄeÂFäşĆapIKXZT§ŽN‘ÁşŻ+rő¨‰üŒť%.]a˙Wí#ńu\R•ݡößďË/żV“;Ôőë&ËSńœeűÎ<ÜäÉ?މ4oŢLĹtŒœuťÂž\kƒ ŕ+|y‚7ŰećĐx /ţťLţÔŚüoM_/„ŞĄť”ń^‘Ć,´ü{ƒzą¸đĚ>8spwlŘśSfŻÂÂ%‘’Vě‚Č&˛†OSŒ¨Ÿ…ťo< ‘᥼s^ýő=MjQÖłk tďÔ ™šŘľď(ví=‚ý‡O +;W헰°`ľ˙š%%˘Er˘*­i2šÔöŚrýŘ÷qčHžű“z„ŽćâƒWŐű•š\ČŇžź–R,Ä>(gBYoܗšKe݇zűB‘Ly˘`wq,‰ěév:űť‹.îŻ)<IěsĚ •çlUTőü!5‘7`?9ń7Č8í‹/ž˛ĺďşë^|őŐ$Ďm=Žg˙ą§çŁŁŔŒâ7ş]šr•ÓóUމ ľ˜ OgËsäGk4ďŽě h„ĺű ×‚a„EĄJDk÷} ş?8čÁˆÁ–íg?zœŠ*UšŃzîp"ĄšśT7• ěj3[=ĆÖhłÓŒĽŠ(@bGĚҥ˕+…QĄýüóä2?­T'Nœ¤ćéú@—ŹśmŰŘlW?ýt’v3‘Žj}łSˆ–¨|üć›/Ô{ŽźňZőČ2N'~h[Ż/F!đˇřĚ3ĎŤQ´ţ§‰–ąţ8ĹpěÔĺ6ßrËMę=•ŮÖ|Ä&ňb|ţůçŞ}ĂýLW3–őb‡ć˜1wăóĎ?ľ9d8˛wď^źűŽUĆNNn żÝ֜ńŮgŸkAŘj\{íŐ6lˆ šÖxgŔxđŕ!őýéŠćGWÓŠe¸Ôč˛Ó`ȐÓUůXn+3'ƒ<ŠĐ>ţx‚-č|䑇T‡yóćk붖˛˝űî1Ę˝ŽŘ;ťxŽxĐnŘ9Š',Y.‰˘Q–(™2ešĚĄŚđňýŸĄŠ9§=ÇKrŃ1Ôĺ˛ĂڇÚfdjz%—˝%°†yuˇSšŚ;öu[=ś3<đˆšgŁ.šS2– ]R)D'›ąÝ%ÎÄb|nܸwUlŔöŸB~{'°Ş Ěź;N î,ăé@Çű/Ćď˝÷zžąkşxń•îÔŤ;Éqżsť˜@Ô÷i˙ţ}]:ÂŃQěˇß~RĽ3ëŃa–ŹP1&äÄ޸qoşú—Ç 7\ŻDdtf|Ž—ReBĎq2d°ĐaŸôÄĹŔ>Yęë?÷Łî6Ť‹Ęř™z‡4_#<.<>ěŒŕkœçČ[}űœ•,elH']^#t8ĽlšďwˇoßNí3WĽźÜĽ˛N"啽ŞF• Ę:IFQç™ažşůÚdě›Óőmžť×ŤĐـלŒŒLŹ^ý/<Ĺţ=-Z´@]ٞ×MűŇŁuć˜čĘ˲ďl›ŘćąĂą >`đťď&kůť[´źÍuđ7|š‹ˇÚećż^|ń›Că(ŠűC$%%Šrbt[=úN‚/°áË~7 Ąxž›Ô=qŻŽ­Đ˝c3ž2 łŻÇŸsWcë΃ŕOÂRƒšŠm;ożnZ6ŤŻśł2ORüž' Ŕ˘J\ĆĆD {§ćĹű´d_X÷­ŐĽŒ/qŸ:űýóuWšĂGľ>Ž7&cíć}>—Y7ľ bŐűňžńÚ¨Q#u]eáGy\őYÔjZäRŮ{ÚGUgn˘:đ§ź÷-'r˘ŠÍ-8P•1œ^VŐ]źu>ŇąŸy8ć´8€ą§6mÚ(‘Ţ[o˝ A¨ˆŔL¨2öb3&Őăâăp0ŽZŞ\-ĺri;@ËPTQ`ŚÓCkX&Ź&=üüĘíD5i?•[ľĺnzTk źTr˛iK e;`ű&x›-:*˝{Ůɤ†Śđ†â/ÂDՍ7Ž*ő:;mXRˆâ0Ţ p4%GMÚĂ$áHÝĎ?ŸXĘƕvţt `]oşkąÖ:;Č(ęŇGđ‘‰3>úz4›6mĆ×_ĄĘFę0ÁE{Ţ /źTš^й팛nP—§ŰĘ2>ş¸ŒĽEYŇ>(>묑JěôřăO)áŢŘąo+w8gpt÷ářńă*,kDŘaúÖ[Ż•ęlŁ˝-…ƒtműďżľŞÓšA#oćěy㍱J\Ćmeç$K4ŘsÁçáő×ßRŁŽŘŠÉ˛F,}JôňL°-O‘auŒ.á9I7bżÍÜ_ÉQĚÇ㥝•‚P˝Äy7ď†;ȄŮÇ`ĐâNFŁöcńüšĽ]K:4r=:ŤŁĂks6ć`˙q3Šň —Ÿ‹Â‚|hó…yjţ.žfđŕAŞä";_Ůq5gÎ_UvGőEŠŁĘBqfŒ5(ÜŚ%|VVśzMÜŘÓ˛e U>ń;"š/tcŠúkű˛ętG­W/öîg‡ŞđűčŸĹ’쨾‡űŠńĘţý”°Œ3}_őď_RöœI6vJ0FŁcă[vęgb&{ř™çž{ŽšÝ.řL”q0ă/&ĎżřâSTŠŽżţZ5ńźĺöąLř÷ß˙ b8ŠľŢ˙CÜsOIg'Ď~çǏT¸~űeěËrřŠAƒŞmćzĄƒ÷Ü˙önlJR`FŃËŽëǍÇÓ1ž%ăÇO°‰Ëř›ŕý …iŽ÷xş \U°wüúëĎUü+ř/zbPĄ 9^žöˇˆ„×0jž1Z jks´ŽRgްš…Jđ…lí1-–jš™—U“ĄGL7ˇ…Ąƒď:b˛čĽÎý3wÁlźžńÚĺěŢťÉMŤa=‘}őŐW–—žóLł#“ĺT|ęłšD/I—4˝œ’Ĺ|˜11řçŸ3Nšäľ ř­ ˝›äi^Xqç̗‹S´lœ–Ŕ4jŔ@5 ÍLÖżvmxD°ëö<Ü!4X˝'ˡ磨XPŚ?ęó"0Ť(žšţú›TÜýÎ;ăU"ÙŤ”^ŃފŢćř Ň|đÁÇ6X˝ ď˜`qŰ>&ZtÇ ďôuŐ•Ź—?¤łZy09ËD–3ěă0Ć.ÎJ@ępŸéno-[śtş c$Ć/úrúž0 D`F'9Šű)Čç>ŐĹ錥čŽę ůą“•Îcwß}ŸC-UŌ1›7o†ŞŔíŃ̍Â`9íŢ‚M0´Œ„!9B›´óőB`ʧýFc Ę*ŔŻu§äÁr,Gm‡eżö›ÚŻ=î˂eťvžçyż4(ąŹ<†ÂUÇ`ÚAˇˇ‡9ÁK ËÁdÖďąýÓр9 ĚȸqďhńĘXˇŢGç'ÝŔ˘s{Áv]1‚îđĆëfmÇ^ĐNÁżŤcV™x“ąě)§tWÓ7Üp‹zžœî ĚŠDóĚŽ]ţňęĘŠľ2ř2r…7Úeş˙ëÎe?ţˆröwSÁWčýLŒ“őŠ+%!m‰ŕIsőG.ËçŁMF ęŰý{´Q˘¨éó×`ƂľŘŤÍëcö|ŮłÁíIn;Ž;áaAŐVŚŐ™ŰYeúpĚfKąĂ™uZ^kĺŰńâťżaÇŢðđ5Kő(´R;ݛxJa1aËčѡş\śźű2Éëč÷ÇŒóžTŻÚâ oˇ§öčí"ú˛=ő6žĆ$ş‹<űlY¨śS]y:|mŰśM]ż(ř˛7Uq†˝žÁÝÁöđ{Q`Ć|“^ŔSôü Ű/šl°ÖŢČßBM!Ĺꏨ(xŐ/îŮ-=ë¨p –śěs|Bß˙ďhýxKóäÖŔW+|#.#—ŒŇ"ĘPxłÁˆÂS¨ygmY ęňŠiŃŮ7ß|‡gŸ}ĄÜ‰ĽĽa€çJ\FhZ5śtrDE ;c9ƒ_ţ .#Ž"${X:G§˘gp„ňîÝ{Ôüĺ—_ZnPuŢy˙łÍ뼁á(OF;—˙ÝZŮćż`ňžür×őŇé(ĄdŕH’]ťvŁ&١ożrz!Æ -S斎$zyNŠůA¨~jז¤"ďˆĚ’ľő42{7šśţ@Ë×6:IĘ]Ő2čŹJĄ6aŇRwRuD!¨'ޜAq;sý–íŁSĄë('rĘ)Ý\†ĐŰ~Ć`tiĺˆZŽ隂ń]D ŰiűR…ŽüňËo6'RG˜tkÚ4ŮśRŽ`;Ż´p×RŒH?0n倎üĽ É]HĆm×EhÝşuŐ˘eÝĄ™˙üKjžç*Őë"źg§Ł;á`ťň\ xMýé§_TžĹ_Ë#Ů Ę\ ćɜ9s]žĆ}đ믿cěŘw\.Óšs'[ŢŇÝ8‚żćIˆ}\é ş˘<wÜqWŠrëá8ȓء"źŃ.ŰǛ͚5sů~gůUA¨Ďű,JäÄߑ^.SŸŒvWŽĎSÜÂ\~HHÚ´hˆ1׍Ŕ—oݎ—šzśAXh°˛>łX-źŹ6h^š¸Îŕŕ@ÜwăYHjŻ]÷ĘlŁŻ&gűÉ~˛ĘęÜYlâ˛ÔŒl|úý<Üýܗرď¨őý^Ü_ŽŚ  Űń­”ž–6uš9ŢĂÚă/yć ôßÜW_}SZsŢyáľ×ŢôşłÚđáĂlç„î<ĺ ć<,XčÂObĆČ óJî/ToĆ ĺQ]yćuXáhéŇĺśÁ.ĺaß_ćř;uçÚsĆÖÜ;2oU3fĚRç¤cţOĎßP€čJ\FćÍ[A¨­!ĹxŘ9[ž/ŹíšÜa‰đ*˝/Ô>Ŕ‡6­Í;O|]ň7żßżÝÂxLtŹQœorLŰިFŐˆMLV7lŕY–‰Ö¤ –_uŐujtŃGńŮC!á͗}ěą'UÄN_$6Öué]ŒDôŕĆ˜řÔay&:}ššěÝŢtQš#öî îP^Sň˝srJ×oç1' ¤óňňËÝnűőěŢ]łłŠSK‚`:í9ÂëŹčň;ęßS„ęĺź\ďľźľ{ĆÎJCf^لOfŽăçĽCđOÌšÝ6"”śŠŠŠe–ĄŰƒÎ›oŽ-3‰>:´ę1Ž?ŔxT Ë€œHyň>}zŠ{ ~]@ÄÎŰňÜžŞƒK/˝Ř6ňţ‰'žv*Üç÷{˙ýĘ]Ďu×]Ł)œc˘ÖY"ŽśˇŢ§ćYzáĚ3G8]Ď şŚŻżţV=r;¨Ž,ŐfŽÄL<Żxŕ|ňÉgj´¨łä-š˜L#ŒMĘK°;Âؒĺ¤(¤déGgIOŠ ׏ą&hÝwYŇI/-úŃGKš”éđÜyîšUœGčf[Ů{ٰ°’A҅ˆöIćJŔâńŃz2ŸÇѕŤ_“&ÖďËäeZZYwg–cš˝ülUšöÚŤŐ#;ç)q&˜ä}O?ýÎ9ç|%|Cyšýľ`ło XZD čŤÁ0iðĆV‘ם´çNGŕC`z´+Œ˙KÖ~¨‘•‘UzŰř“năpë6|r*§Ž€éľŢ0^Ü †Ć^ę¸É+‚ůÓ-(|rĽO 7 Źů.Íăđ\{úé'lîV,_üÔSĎ: łaqÝu7¨ÎÂrŔtÓôşh˝Ś˜řýÇąäăƒ>˘Őa{÷îťďŤXíŠ+ŽQ*ý‘îÝťÚŽ-<)))e–ůíˇ?”ĐĐSŚLĹ /źŹb.ë ćظżHŤV­ŕ.Ü×úńfŰçŹ,Ĺěgč˙€YżÁ[lŢQ‰eěÝËÜúëȑąc_wË&ßvź0   œXÎ~űóÖ. ţ˜Pb`4sćl5:pąƒ“–ř5ÝŃŠăË3űÎÓ{îyŔí÷9ëŻ •ýnöŰ͛wЍ$Ť/áů¨×g' t+ş`ҋe>A¨^†äáĎ3v˜*ýmYhĆŕ|ď—vÚw˘w|}ď\˜pŤČäDVî˙!űľ×Œ~ÚćŸě°äLěˆc‰% gz¨t)u ‚X†‰ĽXęfÔ¨›UÉŞřř85u3‰Â2ĘţĹdŒŁ˜´Ôc˛ňĘ]2–m׎­*cţűďSÔst…ňĺ(Owŕ6\|ń…*áɨ—^z%.şč´iÓF‰Ä(ÜbiOŠűůý\vdiĽůóhÓB­SkąśŽËTIČŚM›‚–L@ąT“?Œƒž|ň1—Žš*ńł¸š>â(f",Ás‡ oNÄY rÂDÜe—]˘J¤oßž×\3J}o:Đ2)Jń“TzŒÂ}ŕĚ ÍQQdŔDż'ˇ‡q5Ë˝sp;é~ýľÄÝmÔ¨ëJ˝Ÿ÷›Ď=÷4nžy´ŠÓY.ĽĐ—S¤E77şŚčƒčFYeąwƒcbIdŞL:t蠒Ꭰ<ďźóžJ˛’úőë9-QOŃGŕęŁVůˇŁ0P‡÷&/ŇĄîĘ+ŻU× :ůňáç0éτ;‘+÷eOŕçąĂ•ç'…‰}§;4oŢLkűGŤŽ2î×K.šR}Ű!ţ~śl٢\béJŽżţ›+Ş;x#ň4v¨ˆŞśËľó^ƒŰĚŇőü,Ë­şäđxđ{#Žđw˜ëŐĎÝGyłfM+Ó!ρ źoaźĘUďD×yóÍq6'ŠJg̘ꡚuAĎĂ[EĄęÜuÜeöyúňö§ő%ŤŕŒď ÓťvHF§vM0ę˛A˜ˇd#ţ˜˝ëˇíGaYűőYÔňŽÖhąE6V§Ż-ĎŒ° mބő˘qóĺ§+3űvÚYůƊ¨Ě{*łN>§J’jSFF–ŽŮÉӖbٿ۾{łuŞWčĹҢ¤ŞýŢÚ ťÓŔNźçu‚‚,^?čŚDŃŤšđúŞßÇţţűJÉţQŢť9ßň:>xŸĘ?𞜃/ţGľ!Üžcǎ+ ż+áŔˇ{ďőMÄ#<¨ößáĂG”°—ů ŠÎxýeěÁÜűLtaúíˇßćŇż:iŢźü˜dëÖ­*fĐłŒI|9ŕ‚°Š÷ s%(ŔĎÇŘŘXU=Á›TGހšŹQŁŽĹĉ“ÔďŒCĆuĚ˙0ל÷ýâĹŰr]„ůT~g{¸/¸¸Ź~Äřë絒q*ařüóĎ(9óNC‡žŽňn4ůŕ|=Že?ümˇÝRęsx]ŕ@BĆwŢy݊YكQcLŸ>SĺËËß°ę…yü~ŒEřűsü\ŃűŹ‹Ěž=]]tÇRŹJ¸Ţ0Śo 3ĄBĘá8ƒ“űu×z8˝$03i§j§!đ9?˝CŠłu>KKDüöŠÖJŢŸ2Đťfé{!VkD*ŞE]—a2ďÎ;ď)Ä3(fƒÝ¨Q#•0a˛‡Ęrű Ă‘n¸^DúM;uŘŃĹŕšĎq2d0^xáYżh}Eemé¤P“TÖXżQŠ Xę#ź GTVÄôé3T˛ŢU‡¤ žé°‡3óńPT0Ň*‘ÜŠ4[đ`VžĎě„WěÎÙďĆ 6Ą ĄČ­yČ.°HŇŰĎšńĆëńÇSTƒI(ŠHě˜ĐdÜq`NEě¤t,ŐČ䓟ţ%0ł:5é1…—Uô&×QÓ0ËN&7yœ>űě‹RŻ3őňË/Thu˙Ę+/ŞDtL0éŁ,íĄsěK/=oss;ő¤éßßšxÂ3v¸–Z´włpäśŰn֒ۇ”p€‚­qăŢuş;—ď˝÷.x­Żźň‚¸ŔÄ9ÚÎFu2ůĆgȐÁe^c‡ýŒWI4ĆüLĐqr„ď}ö٧ŞÔ‰A$Ď?&˙íˇ•ŰvÍ5W•Yžű•EˆÄ™ŕĎú|éăĘăč ŠYŚŒÇIw&íáľýÎ;oWŻyŤcřľ×^֎ÓëJźF'¸ >rş;Y(‚jý ś.ŃÇ!8ăU-Մ(šš–iű`9Qš{>óźCđ•Ŕ,žĐęôíď÷uě\™4é%ž`;Í6‘×GNŽ0nšůć”SƒŻÝJŘÁőúëoŠNH:HÉ“żŠ0Ţđ&l˜e hĆŽĘ<ą\öoźZăÂůňxüńGTůfŠľŮ)ČNg{Xz›ŽŹŽf,˙ĹďH§î =‡ć;<y*şşňĘËUŽÇœy:gĽ˝Ř6ňüťĺ–›ŕ)Uƒ<ÜĄ*í2Ż+<ˇß~§SآŐaěÂű Ůë:öN‡$âč&ĚsĘ>ęĚ‘ƒBtXQÁ˘Ąş†ŢڜˇSˇÖ~¨ňÖRöEžGo;MڛՋĹĺçôÇyĂ{bÍĆ=řcÎ*,Xž'ŇŹƒWŹÇŞxmëű9Żabzwi^]›ŁUÓúHˆDDxˆz=Ŕd@hHp™c\™c^•óÄU?ýótˆ+ÔÚ㴌lŢqŻÚ†ůË6aמŁę5őéx†ę=_ůy‘áÖ˛ëţâ`殓h‡_Ű|Q´Âö‘yޟ9–’fŰÎ{xĆŽfţ”×ág|úéGjđűž(ňrćĘؤIƏ[ ž|…ÚŒ/|đQľO]ĺř[żëŽ;TÜç/¸“đœglÁţF_›nĽb7ŠĄłĆnăĆ˝ oSyƒŃŁoUç*âr—WՇ"°űďż×ie ÂßÖwÜ­Ú~=ŻÂ)ý5Ëvm˘Đ>ßä,n"ęó÷î8ů6~Wşů˛”‰őŠ:šŽq†rAs+2Ů;Ž9+ťk‹äććŠĺíföŻ[×Q3NĎBÝDfB)Ü“U´Œ.lĘm}*,ËŢÖBG/ŒmMH‚BáSVh_:Ř׎ťhÓMëÁđa‡Vƒ$­'Jűnšž—.t¤00–î}Ő1r&x˛żŠÍŽfÁd"~Tˇ3ŕŹ_ßó‚„#7ŻżţZ51š@‡ŽˆýţűT€ĆŃj ÖîšçNÔU˜ÔůúëĎU2´6 o7Äůóç 6`_#Ţ]xŽs„†+A|G=-9÷\f^ Ć“űmf˝" ĎÎC}łoý?2r͘ś6ŰZń 8+ř7LŞ1áÄN,v؎÷N™Ë)|ó͗řňËŻń÷ß˙(á;“:´W.Mtk˘8͟`UŁłgϞŁˆ°šßżaÆęáČJ˝438`äçŸ'ŤíăčŃ}űöŠ=Gą2^ĺ=@Ż^=QUxOôÖ[Żk ď/TG3ÜŽ: ÷/ŁÄ•ŕÇ‰#féśĚăçj9}ŘŮĎ$$!Ď:łđźcň“ż}‹×^ó^˜瓢܏Tr”/K~Šs€űŸçoeĎĄr8ćcôrĂB÷]OZšGÂtk;ŕĆś0˙uć_vòî„GŤ0¤ún0RƒÂőhß) >Óó2źvńÎ8„-ědƎščč(­ÍoŠŽită +iu@‡-ĆNt°¤ ˆe¸öîÝ[­3Âś‹?˙ü‹rnĽH‰BÜ/t”>|˜Š!ü˝ţx‚*QI1%żŒEyŽŮ (šÝżüňƒúźYłć¨|ă8ţ.S°ÇăÎk‚3xÄß3cé+VŞß8ˇ•÷Qt8cÉߜ+8řbôč[´{ŽŻ´c3-.);@Žfź˛’ÓwŢĄźÚĂ\Ď=ö9vęÔAÜËŻânkmpó5ƒë“ŃîQŸLĹϙ&žĆ,šQťüľGą–Të/ţ|d‡ANNś €ŠŻŽíqľŽóöĎ9rDkDĄĹ„ ŸY~ÂÁ-ˇĆn€Ďظxp8%ź+UŮOáZ2ěĂš@;&ÎťĆéU/'¸żE'{ëk•L‰ˇ=oÓćřœŤż]=W0đŃ;G<-‘ɤ×yç]¤ćiiO— W "`Ì)ĽŽš=´l˝ývëˆĘ7ŢxE•íńd[9‚ćÚkoPó´+Žl ‘’Ë–­PÁôO?}_î˛tňşéŚŰÔ+‹JŰâ3Î8K“ě„˙ţűŻË]žÉ@žëźö2Xq¤źóG*G"Q¤ŚnŠô‘˘z˘ÍUťQ]q'1ŒłXFwľL^x›Ő=ŐXüh??g,q—Hמ÷—Ą˜€ň<¸Í+Â59ˆ´ß.łpjSAńŁýd}Žńě1ęł Fíó9q;ŒÚ10Y˙Ś€ŒŁPĹb2}D°ą8¨ ĚôŃš\ÎPüzaAžö1yĽőůĹłîŇ>ä€|4˜ŒÚ|éG5q…śGƒÝŁQ=ňŸ+˝Źő˝ć‚B˜ó P”k}4çrž d^{Äë¨1ýĆßY|ăĎqŽ ‚Płř[|y<ét˘ŸKŽ,|íáČŠ GŸrÔ¤ 5C”vm¸#ťďŚç⊜´+4#NKĚh— >ňď+s ńnZ.nĎÎ/-.AA¨$şŰUóŔz<ÇĐ)Ś×z#đăSač™PţÂZŇ;ŕÜŚđÍ­ŽëŽf‚ ‚PĐËXÚťi50ÎččAQ+™ L%ĺ3M&#Žá:běăWᝡGăÂ=Şľ˝Öeě;´ EiEÚäLçŮśTe˛~ŚÍŽČŒż–nÄÍOLÂÔyk´ż-NśÇh÷=üc2˜ hT/ŚÔšPrŒE0&‚ ľ ÉZnáNéL{(0ŁČéP“îŔŽé¨2éGĂ;€ú-ŕU–ţź|‹—żÜąCŔŐ€ˇz„WYżÚęPâ2ťôF˘vłĄ—)=Ą1o¸xHç)Úí;Ž<˘CͳϞŕr,SóČ#ŤyŠÍž}öŠ27:;věĚ5kŐ<ÝŚŃ-ţYĄ˛Ö×Յ;ŰJkř—^zUYę>˙üKxâ‰GËŘ"çäähĎ?­JŻžšTérހ6˛Ă‡U%;hĎKűY–Íp„Žw<đ°˛ Śî´iż—únaaaśy č|Ŕ)SŐ#÷?믝ĂYgTnoýMŸ>Sšö ‚Ps4Ň{—jmúĽšŢi×AAĘC#5 Ž“Ĺˆ"ƒB%h€ˇúŔňĎ˝ˇ–=ƒiś:Ś,m|SŠÔd6 Y¨U`ćŘé*‚ uĺŠ^,z˘sš.ćŇąOG[,ĽŸwˇ_ĘŢáËîŮRëâ2!ÁZ˙IP€Ýg–¸„=‘‰Űb۞ĂŘärs `BƒÄh4oRZ5Býř(š<î3Ť*i9řäÇř◿‘“W j˛äĽg˜´ăߤaœMô'‚ BíEfBÜ Œí—qśź.p*ls̋_‡Ń셎Öy“€Ëžƒ×˜:řŕ  Č˝ĺÓR€Ď^řřߕđ?}oSçžęŚÂY=ôŇ7lu×Ռb ş?ą6öŇĽËqĂ ˇ¨šÖt{˘;ëjł–<ń,=ÁşŮŽtďŢMŐ§ŚPŠëĄ 5ąYŠK_ÇŻżţfsK5ęş2ëčÚľ3VŻţGŽŋ/ž‚AƒNCVVś<ůŰM”;ŰĘę .RNYÜ'ŹĽÎ}ҢEs-)`ĆîÝť•ťŮŃŁVˇÁ#†×¨¸L‡%=yźXCýŐWßPb3~/ˌ -a°q“ŸĺĺĺŠĺożýś2ż–—äs,aůńÇŐ>áš‹Ž;ؖűä“OńÁŤůÇ{Xí3w9~ü8–,YŚć;wî¤ÎWwŕwĄÓˇľÔ=˜}'–/_Ąćţy2’“›@AA„šĹ“ź ]7"ĂŸ‚#aŮđ' ™…0¤äŁčx.,Çr´źJSK––#ĘÖ&ł“ďŽuři÷ĄZĘ26m2&„ Â` őm!CżzčËô}0Ď?KZ> Í"pA3XÚEĂW$ä„#""\Kľu8g#‚ Ô^Ş"¨b.ž"3ş•q ,s­Öň•%8|Ö?ËYŮJWđ=ž,o˙žŹœ"ü4cžşޤ•Ů&ŁöHdzޝ[ŕ’3{˘oˇ– *v`ó……fŹŰś/ž?+7ěśnjW,ˆĆ âŐž™ ‚ ÔnD`&řˇ´ŽŽ×G˘šŁAęVT™éけc ­U"_Kj~ů(đŰŰ֊ľ˝7xŕjŕßeŔ#݁A¨ťˇ{M`v°yÄ&Ä;—l<ôĐýŘľk76l؈uëÖŤÉŠĐ^zéy%Ěq&0ăMč+Żź€{îy[ślUâ+NŽâîťÇ`ȐÁe^ťňĘ˕‹˘­_ý]M„–œô'ÜÝÖ×^{YŰ/ŻăˇßţPuą'LřČéú(đ{ňÉÇŕ°”é¤IŸŕÁU灍cÉŰťîşĂŠ(,""7Ý4 ďż˙ĄÚGĎ=÷˘zţÔSűcܸ7mËíÜšË6߯__xŸΰ%UÜ)ŠŠścîÜyJ,ˇ}ű§ŽzŽŘšs§z¤ MÄe‚ ‚ ‚Pű` 44MĹՌŔŒ"ą}ٰlI…yk:°_›? mÇÁlŤĚ›ÄÁĐ8 †f‘0´Š‚ąM4 ­Ła ń˘đĚd€áě&0]räko’f1I‘|Ž ‚P§aţ•B3VÁ /#XsLUF@UŃUxhnťütœ?Ź'f˙˝żÎY…Ű  ĐŹbfnOdä`ŚöÚ_Ë7a`Ď6¸÷ş3ĐŽEƒJ‰Ú*‚ű†Ne?N_wžš”ÔlľľQdЏ˜ˆ2eHËCÄô‚ ‚ŕŸˆŔLpOÍ˜‹‰‰ÁĄÄŽŢ˜e&Ý Üý-*͖€÷ovo@Ľá÷›ô6°R[×+íş RPLňŘ-@^.źÁᖝР"˘Ty̓5P§ čÓO?RÎT3fĚR"šěě$$ÄŁoß>ĘqŒĽ4ËŁ^˝zřâ‹O1u柘={6oޢJ(††† aÆčÓ§7.žřB—뉋‹SÂŚ?ü˙ý˛…‡‡áĐĄĂ~'0sw[)¨ŁpŒ",î[ş˜>|……EjßvíÚçŸ.N9Ľ;ü‰ÄÄDu>,X°ż˙>E ÁčhƄ…U˝{÷ÂĽ—^Œ¤¤Ć.×qà ףAƒ˜<ůGU&”Vî<쥨‘4mšŹŇ<çáM6]É<áěłĎT3ňÇSqĎ=wşőžŹŹ,;v\Íów!‚ ‚ ‚R^>†9ŢďśĎŤ‡ĺŘŸRhaW&Š6§jů•4%(łlKrÝt†Ż*Šů°pZŸŞţTŸJAXŤ(şĹĂÔ=†Sâa Š]ÎírëŤclŸĎqD:YA„Ú Ű1ćbŮgÄŞĚ×: mœUÍqœ÷ŐöéΰI bqíůýqшXľ~~ž˝ WlEjFśŞłÉĺň ͘łdţŰşOÜú?œ9°LF—ŰçÉöëËî9xo~6.\‹" úYâľ/ŕwn\/aaĄŞAbAA¨Ý¸Ű’Ü|ÍŕĆŁÁĹßúd´{Ô'Sńs&‡‰ŻEń1?żŕoÔR“„üŰ~˘………ČÉɆY &›4I‚/q•¸´ž˘y–œŁPeן_bŕœÇá5nŒ¸ĂَŕŕVŕ›Ge?kH‹5 é8™áůó™ráľŔýĎ <<&o> ŒŢâŻ'?BËa#•Ї:qVÓݑ@č ‚űđş7pŕP5ďŠ+.Ăý÷ßgýú ¸îşŐüoź‚ÁƒA*‚î…´ł S‰AśöŁËK¤UG\ă,~qg9>ŻĎł$2I^x›ihS`ńŁýTüœŃ‹—f-°(*ÔŚ‚âGűÉú\ăŮcÔgŒÚçsâvľc`˛ţÍR íذ2ƒąřXŐßU>ŰXüˇzŢ`]ÎPüzaAžö1yĽőůĹłîŇ>äFăňŃ`bI‹Ňjâ mťGŁzä:>WzYë{Í…0ç (×úhÎĺ|AÉźöˆłŐnÓĹź•w$ÖA89ńÇxƓĆ~žtB暕[×âŢF?ŔâƒćÍŔ4Ęg[PôÓ. Ł~Mٜ’ĂŠő0¨!Ěсđg¸oß>p şˇîŒúőëYc.'ńŒÄ6‚ ‚=5ĎTĽß(77'NœŔŃŁÇĐśm[ľýŽe2šÝf'%´]š9>WŮžĽą”ZAav<Ž?çŻĹĎsVc÷ţă0—ŠdÂ%,8ό9ďŽ-_äjÜŰ>‹*‰9gé&źüń4ěÚĚú^Ô^LÚqžöĚ}ՙˆSÎťŽbœňbŸŠžAjîÄ3Ţp8ő‚‚űĂŞ0I‡sŠ%*}˛Ř=:NpńwyŽóŽTL‰ƒ™ŕOÝƜ-ĎŃ(ęGŢş ć#°(^áłťˆ8`Ŕ/›~řń9`ևÖڊ z šu6ŽV.Ô~˛ĺ”tŕ Џ“€)ß7ÜÜö0ŠżĂŰ^—eEĆ"¤}uÖĹeöxzą• ]<ƒno—‘~ýj‡˜^ғÁZŻ^=!‚jR˘6Šł”@+Ŕ¤„îwiO ̊ľ\JHf´ ČĘĚP"0ă߅ڛĚÚú ´őië+ÔŚí5Î ‚ ‚ŕßPDˇ&Ń P/;‡Ă3ám ?Ů ó—ŰP+Č7Ăźä Mćqë>‰0L‚Ą=-çăąMƒŹH$Ĺ4Ôr9>)Ż%‚ ţ;ŽŮÖQTVTT¨Íł4tَcć.œőm:.Çţ(>ĺŽ(É3JŻ/(ЀÖÉőŃňęz¸ěŹŢřjĘ|úÓbdĺćŤj7Ůů…x~ÂÔOŒĆ ­‹ˇnŤłeRRsđÁóđĹo˙ W[/ßTŰ{jMhߢĄĘA;ëťŇ‘˛™‚ ‚P;™ŕ3ě1AŸˆĂqm‘tô?xş|źs5ph;pÁŁÎDŽěŚ˝ ̝云\í<~pڅ@DLÉó'Žł&żNţ[áúýš9Ŕű/ß|\y+pݝ@˝†e—ËĎ^ÓśyâXx“-:"66F‰út$Ř„ęc׎]ꑿA+ę }›ťtéŒđđp‚ŕßĚx¨ĽJƙLśGv&ë—rşP HŤ°LŸGąĐŹdždů|->ÉËÍSůůʅś ?_űťř‚ ‚ Ԟ üciؘh´Üëu™!ßËĎťPąšĹ‡Q¨M†Ř`ĎKFŔE-`ŽöŸthóôÄ6+ÉçHçŞ ‚PŰqeL`ĹłLf ŇÓӑPěÜYś„¤Ľ\KÖŇ˖Âźá^Výs(o˜ƒ{ŽŽN­“đ菟‘’–­^ËČÍÇsŚŕëWoDÄčâ÷čBšâüŒmű ežOQ‘kśěĂsLÁŞ {Ši†:Ńć'D… yR}ŐWČü•=Ó‚ BíC†Ć ái˘‹IÎččhJčŻbђ„ß? <Úřg2• ¤| źvpWkŤŔŹRA* Ĺdiý+łŻUe')Źr&Ś*;çb*0gĐÓPڜ–ŻŚ ŔœŃż#^žű­O&H•'§tlűžcřü÷%Öň™śírś}%߅ďĚÉÍǤßţÁ¨''aŐĆ˝VI]MËß ľbâ÷mŢ( ńQĘ˝ŹŽˆćAádF̄*QшZ&8yăŮź°ń[xŤ€ą—yô„FgŒÎˆŒs˙}{/Lî}řz0qžę|ق|`ędëT äŸŇ_=:˜•ž1“‘°‚ŕ víÚ­űőë‹ÚBmÜfAŞűÄŠ ‚ ţ+7Â܋ÉdÄ)Á-›ť 'Brá-,á0Äj§'ňQib‚`H ę‡ÂŔ2•!&kšĘ N&őœ%@‹;rŠ€˙ý8kŽ9§/š4ˆ­pÜ❎ăŐOg`ĆßëQXdŽsš“É€N-ę™9‚Ä>‚ ‚ŕżˆŔLp‰§7 Ζˇ Ě hŮšA‘ÉĎ@ üďŕě{Źîe•%žp×ÓŔľw˝LzGK‚fŁŚHMhˆĐć­UBŇŃbX„ęáąÇVSm⧟ž‡ ‚ ‚ 5OU;kIhh(ĐĺhCĚOÚ Ż`€ńÚÖ(z{}š‹„ÂĐ: †–Q@Ă0ę‡ÂX/Đ&KPŐ: f­ËöH,˛`ٞË6mÚŞM;ľSQĺök–Š{‘?{?L—ˇDŔ5­aŞŢÎĚŽG ~ƒzęŘUéˆAjwcŠŒčÜŮ˝MCüš|/&ĎZ…_çŻA—ÖI¸hXw ďÓ‰q0ŠŇ™ĽEdöŸĺěóŤ›Ŕ@F?żĎ_‹}GhD`ŔŃ´,Ě^ş 7œßßĺ6q?ĺiËmċŸü‰=RŹŽe†şWp*"4H[–EuÓŰ#qŒ ‚ ÔD`&řű ZßĆĆĹâ`\{4?´ ŐNp0ôfŕ‚Ç€čzđ1qŔC/7Ý|ü&đé8 ?Ő́ć§í_ű]œĘAAAĄvăNg­ž EJąąąč˝˝)`—rŃđƋšá(ú~p$†ř%&ƒ6ŰĆŔŘ&–đ˛ŢźľŁ–żh }&§SâK^Č)‚yÖ)ťć8,K*á™Çä™QôůVMۋŕ—zÁÜ6 ՁAű×;ł)˘ŁŁf}Nr9‚ BÄąŻ( Ŕ„VI hŒ}ÇsW`ʍ{°rÓ^Œ˙n>FžÚ î†vÍ $(ŔoŰ>+4ˆÂŮťŕߪśŃĎź[qőŮ}Xć=ÜÇҲ´ď9_M[†ÜźXꨃźvÔŃŞa’×SÂBş×•zÝĂď,1 ‚ ř"0<Ćӑľ ###q°~—ę˜™´ţôQŔ%Oąŕ3⁇_Žš˙"0y"PT„ęâD‡îh˘ícO,†AAAA¨]”W&“n čŰ IŤą72 ŢÄ82IMΨޢTv„š`ěŤĺd8ÝÚ8œó˘Ă°ĚÚó†TĎÖu4ywýƒ ŻÒŕűüJ“ô(tˆmĄ=ÝčĽ<Ś ‚PŰqՇÄçُѰ~Ú7‰Áţ”<čMY[~ßŃ4Lüőo|;}útnŽK†uÇŔî­ ŁZ°źvąú#V•Üł5>ůío­Kˆĺź ŘźçˆŽ•î~-2[đxúŁŠX­=r÷ĐľŹŽ6ő&Ł][%">.!!!ę9‰kAĄö#3Ą\<-ëjyééČjŃXó |­„ű^\ńĐ ލFÉŔK7ÜŒ}řóGŔâۛ‹Ńˆ‚îýŐź3™§II đAAAĄvĄçbÂĂĂѰaôÜÖČëłZËrŇmM›öeŁđĎ˝0˙ąHÍwďý9…(Җ7Žj _ÓóHc4lÝŔ#÷2AAđŞRڛďeQttz´Š‡…›Ž#'żČöšNV^!ţZąóWmCó†ń8ďô.8w`4k‡ “‹vÓ{m)żŸťms‹¤DD†‡ 53Wý–‹#ŠYˆˇ-“›Ď§.ĹťßÍÉôlXę°°L'62=Ú6֎wpšĺ1‘˜HAü›şWÔ[đ;8“#9B›uDFH|Î]_÷NŽ^q™=­ÚďiŸ˙Ä[đ5Ç4EdR˛˛•Ö-†%AAA„Ú…7îĺY&322ň[!&7'3–¤0˜nn‹ Ÿ†ÁôhWšGş÷ž”<řšŘÜ (hˆˆpuĚŞŠäA„Ú]W):ęÜ:ɉa0°śĄô¤Ú6ƒE`ہăx뛿pŢáŽ×Ĝĺ[‘‘•çÓąýěkqˇ} FXh°mŰó ÍČĚ)-n˙űżx鳙HÉČUßË`(űëŇÄď׹I4š6i¨bňĘcJ#‚ ľ q0*…§Îfˆ‹‹ĂÁřöˆÜż>%/ ~Aśďˇă`‹Žˆő¸<Śí‚ ‚ ţGžš9E(°ĄŔ\„B‹–š+<&ÔZ:Z§C Ń„@ƒ ĄŚ@!ÂɉcţĽ"ůˆˆ$7n‚S6Á”ć[p˛c 4ŔxfL#“P4ď ̟o…eG†Ëĺ m˘ŕkNÝßM5VÇŞĚç—ÓáZ[r9ĎDâA8ůp7fá<<5ʇSZÄbŰálU>Ňé:‹ů*Â~[¸ÓţـvÍŕâ!ÝpV˙h”“{^ömŠ;.lÎÚbÇ÷ń/łőE}!íżŇhšů…J,w˛ô˄™Đťm"âălbúŞ|÷šŘoĎDâA„˛ˆŔLđ î”Éd šˇŃ)hăkŮÄ;­‘Ç kQc|:÷4|Mj§ŢˆQ#~BĘź&Ł@AAü&)3 sU”Ż%œÍ&­UťČZ*&M;?LZB3܄ȀP•ÜApDĎĹ0÷ҨQôÝŐóów!#ČÍňu‹–1žŢŚÁ Q4m/Ěo.ăVfh…€3’ŕËÖ8*/ý2›ŁQ—^épő$ž‘xFW°Ýă€y–ÉěÓžćŽ?†#éůĺJwě[Ęí˛˛vű!ŹŰ9ďý´gôi‡K†tEˇ6I tť]­lűëřžÔŒdć(g2Ź]çÂK\ťŸeçhߏÁHÝď§á7lQ/]Z'#,,T9ÖšýŢމ$ž‘xFĄ,"0*ġ˛ŠĐśrŰ„eĹť0ř28+Đ„ď]Ź›ÜüŃWcYˆěLŕ‘›?žƒŻ) ĽG?u|čGjŰ(AA„“Ž}M-Č֒—š„Š`r;];W8E„ &0 FHü.u WůOň2\622­’›ĄßdĚlś B Jhvv˜†4FŃO;`ž{˝‰0ôJ@ŕľ­aöm'рƒÉhŮ´™:Fžäa\-[Óš‰gOxFŠŻÂĂĂľ6ą ş7ߍ™k{ëXšô‘Ô,|=s%~šˇÝŰ$ᒡÝ0Źg$ĆDhŸa(gĽ_ó$Îr\~óžŁČÉ/°‰Çb˘ÂP?.˛Ô2Gľíd˜ń$čƒ1iÇśOë84nT_ăňYýĽOJâÁ$žádGfBĽń¤L&oLˆjŘGŁ[ ^j5$8çě]Ü˙#Ř >g×Vඋ´;Šľ¨´čˆ˜Äz ôJRRAA¨2ľ$TŠ–ź”ň Be`Ň;ł0qZ3" ‚ œ|”WrŠó,;•”Ôv5ĂŇFű$eŽXB0^ÝJM:žöŠˆÉ EżÔfhÜą‘:FÄU'kmČÝH<#T‰gĄvSQźăktňlĐ ýŰŐÇŇíi8‘SśÁn>'żŻŰ%ö )1Wč‰;/9 ĺ”ÎtŒĄ<úěâĺ ŠĚ˜št3 -%h3këëĐŹÂCƒmËjËlŮ{”Şşu\EŰŁHNAďöc3žđgc‰g„Ş ńŒ '#âÝ(xŠaźaˆ‹‹Ĺţz]PměX <Ň X3>eÎŔy˝ŤM\F´éŠččh))‚ ‚P‹H)ČÂqm’äĽPxţđ<âů$‚ŕó111hŐ¤9ÎÜŮ ‚pćŽVę˜đŘÔö\Ä3‚7xFę>ĺ9pšL&ĺčŮŽEş7‹ś:Ž*7ŒF5Q,žçH>ůc)ŽĽfŞĎq5éŰQىlŮs3VnŐ>ŰKńv íÝA&Űryů…Xťó°ő=u|2Ńżu,š7MręÖZ^üSą‘Ä3‚7xF„“ ˜ n፭ŔRŽ'šöCľ’q xů,ŕ‡gľ–ŢËăQYwűmm˝ˇœ¤§˘:Éî9P9ĂՆQ Ţâž{îGϞýÔtŮeWÁ<óĚójýƒ+óÚĉŸŮ>˙řńă¨,ŢZŻŠ-Ű)‚ ľ…ŁůRrAđ*<Ÿx^ ‚Pw(Ż#ÖŐßÎć9­E‹fč–ÝmNÄC¨YÚĽ$ kNš5Kś t×˝ĚÝs˘şxFđ6ĎÂÉ K(6Ij„í¨„ZU8 Fĺv<3Ťśě/ĺ˜Ćů´Ź\äşUÓń˝ŽdçŕÍď 5Sk Vw˛ńQŢŤ-JJi[÷ĂÎC'JĚęčÄc—†Ţm 11ÁiźcOM÷II<#x‰gA8Y™P%< ).ă(Së^Č ŠBľb.~xxí< ËKB°ǀëĎĆ=Ł­ßׅ>ş^Â[ˇSeG9ŇÇ]j‹Ě)))ř知śżˇo߁7AAĄ6Ŕ$SvQ>ÁŰđź’$Ś Έ‹‹CŰśmpöÎ64K °Ś4›0rw+íX´F||íűI<#ř ‰gĄöQáăkěŰ`źBł>-˘•Ş8qE`Ę?›T KJÄć­ŢŽťßůsVmCFvŽ*iéÎś:nw^A!Ţ˙ĺoL[şšÔg_uĆ)h_Ň÷eś˜1sůVUÂÓß͟'“ÖW5¨] Zˇhć5ˇV_őgI<#ř ‰gA8ě’ŕU**ÍHˇ­8-™ś?ą3j„•S€GzťŤXĘrÝJŕ=EłPěkÝUÝx9s/ŤŤĺ1§OŸ‰˘˘"DEE˘iÓdőܔ)Ó ‚ ‚ŕďĐ&_’—‚/áů%ĺĄîŕ-3vÚ6mÚ-"áÔýÉj†Óö5EŤş—5ľ ŹîeĎžFâA¨›TԖŃĹŹ™ݜÚ6ő˘‚Ź.fUœ(ćšűďvě<˜bs3jŸwz÷–8’–…Ť_ü>ő>™˛ {¤ĄPëwЗ+ĎÝŒŻĽgĺâ­É 1öÇĹJČŚťŽulŢŁÎęe-őYLJz6~Y´žĘßÇß'îƒvőĂĐłU4lXßă~ŤęŒk$ž|Ä3‚ Ôu ŐDߥĄĄˆŠŠÂö&§˘ŐţŨnęÜü0l<ćű€§ďňj.=Řk0څ„¨ýYUj‹męÔ?Őc˙ţýPż~}|ţů—˜>}îšçNĺŽ'‚ ž Ç&BÝÁ_cšĚÂ\Ë.Ę8Ž_×-ŔŠ˝ąîđ¤d§ŤŞąĄQh›Řý›uĆ9íűŁqt=‚Ďł ƒ !AĐaŚS§8žčśÇœŔžČ4ŐGRfjŠÚ!22ľ‰g„ęBâA¨ű8ćcŒF#ĐśyľNĂOkŽŁ°Şc ¤dć⋙ŤđĚuĂ`xG†ăšÎŔŐ/}UŰbőöƒxç—0˛w\<°ş´lˆ U۲¤ĚĽEšŸĺĺbĺÖ÷ăb,řo‡r?ِŻĆF†â…›F ~l„í}fł?/܀Ş<&ŸŤý0•!,ȀĄícŃŚU3ÄĆĆJ~F8é‘xF„şŒĚˇqŐ[^­ăkšŔ˛Žůí#óßO‘{5B~đÎ ŔĆ%Ŕčwľ_BPĹďÉÓĎçď& ĄĆ8Ö¨9:÷D``@a•żŒń6,‡šyó5?pŕi¨_żž˜ĽĽĽcáÂE2ät‚ ‚ řf-ќRíöňL\ž<÷ LݸXK¨9}ÓüŤđÚ__á܎§âŠá7j‰ÍÚŰa-xžoaÁ0ÖáÎ A8ŮqĚłŘ˙íjžQŁFhŃ´).ڒ‹ť.Gv@ßZ€KśtDËfÍѸqcŰóţčćQĎՍÄ3‚P{pˇĎ¨˘ĺ8žE‹fč{ŕ0ÖĚÁĆ#9¨Ę˜@ƒöo˙nŢZœjGôlÓX}§öMëaěçŕŽwţŔá™8”š…ĎfŹVËvoŐĂ{´DťäzHˆ SB˘ăéŮŘ´÷fŻÚ†•›÷#'Ż@9–qâgD…‡ŕŐ[ÎD˙ŽÉĽDiť¤âƒ)Ë´vÔPŤűf*‚ÚšŢÍ"Ńšysę}VţćÖ*ńŒPÝH<#B]Ef‚×qçfĄ~ƒŘÚd şoý5Ęô€­Ť€'~ę•S.bĎ6ŕž‹€˙ĄŚŮÜăt4hPaaaęďş|s˘Ł—ÂäÍɀýÔ9‹””ę5Of+WŽÂäÉ?bÓŚÍ8zô""ÂŃŁÇ)¸ńĆQhŐŞ%<Ą  _ý-ŚM›Ž"88H%‡Š .8O[wŞK‚Λˇżýö;víڍcǎŤďœÜçœsśúwÜŰ233ńÇS1kÖěßż_ ó¸žN:âěłĎÄ AQY–/_ťďžůůůhŇ$ šŽÍ{Á`r ‹đĎŚ˝jâ2AjůÚóEEf›™ÁdT­"ˇ-š^4^ža8†Ň &ŁŃöŮšů…xmňBě=–^ě^V7aHŇ 2ƒ[ÇĄMëˆŽŽ†ż"ńŒ"ńŒ BíCf‚GT&ÁéřŠnâą´íšč¸k&‚jşő–Ŕ}€ç~Úö*űúŇŮŔý—hh*jšŹčx0͢ŁĘ”Ç,/ÁX]Ł@|ŮlVĽ0IďŢ=n Ć„Ÿţ‹˙ƒ””ÄĹ໩ľ^~ů5üúë丹OIÉWÂŤůóbܸ7ŕ.ůů¸ăŽťąjŐjŰsšššJźľaĂF|űí÷ÚúŢD›6­QŽ=ŠűďX­ËžC‡Ťiٲ˜4é źőÖëHJjěr=kÖü‡|D‰ńě9rä(ćΝ§&îח_~ÁăŔ˙ţ[‹űî{H‰Ë(zœ0aźˆËAI?}¸*+Á˛…(ĚÍGž6äqĘÓţ.°Íhó-P;(´˜Ý.˝0qŮďxaö$[˛“Ň§5ď† ;Ć)Űj Űx-nłŕ@úq,ŰłżmXˆE;רeĂclëá:ž_37ô>÷žv9„“žwQĄ0!BÝÄ]W{˜CčÓ§˛˙ĘAżƒ'đwĂ˝|ǀMĐ1˝úœŢË6@°<üŐ˝L⥌xFj•q1s6ρÔ͛7C§ƒ‡qÚąĚؒ‰"sńZsú÷Ś}xăÇĹxęŞÁÖň—`YNúśo‚oťcţ?/ŢˆŹœ|Ťb tťŇrý%ŽUÖR˜V¸­!Á8łWk¨ÜÇôQŐąqă&Üu×˝ČÉÉQ‚Ń>xO‰ĚAü w:\+ë"x‡ŒÓ†ŞvŠEËyyyj˘pŰŮź}KíĎ1OFaŽ[˱܂}ň˛UB^=ëôHjWfŮŚą ÔtIץŘtt7öœ8„!­zŞ×Ţ^ř=>Yö›š˙déoľ:ůݚYxdęűjţą!×㖾çAđ žą2JVj=žÄ(î”ĘŹ_żžvŮů+ p(<;˘N@đ>-Să0dO tëŃYísw;[ËŁşc‰g*Ä3UGâA8ůˆŠŠBűv­qZJś§bËąź*yޞŐdôŮŹ‘†;ţ×ÁÖnQśŠMŁńę#pĹé]U‰ĚškvâЉ,éďVËZ´y“É€Äčp 씌+wFŻ6ľu™JľÍ…Efü¸h^űńoZŹÂ´şŠ*™ŽîÍâÔ {g‚zÉŮHúňMf|Öa5Fd@đ2#qٖNhŐź9Úśmk{ޓŽ?ĺx$žj‰gĄö㩋7nŒö­áěŒ<YuŠšEU+•Š5Ťf Ţřy ň‹Ě¸ëÜ> ° ŕ 4ĄW›FčŢŞR3sąn÷Ql;‚Ç3“_€Ŕ4Œ‹@ˆqčŘ4 Qa0Kľ×Üv–ŇüfŢ:<űő|dĺÂPÇKc6‰ĐV‘hßś•ÖOo÷š{ŚŐďH<#Ô$Ď‚Pׁ™ŕ1•ąS Ě]Ěîťďî2ËĐÁkńâÔ|Ϟ§(!•+Î}nżý6Űk3fXEjü•÷Ů!!!řöŰ/áR.oíN˝wßçRÔ'‚ŕݏ-+Ônü-6Ę)޸źúĄŒă˜˛aąšgÂúĽ‘Ł=N^n9śˇ˙ü ͅęďś MńŢ÷#ŔäŰź!ŽÁŽăűUهůŁ'`Űą}xwńXśwNd§ŁaTÎép*F÷˝aAÁNב™—Ď–OĹě­Ëą3ĺ r ó…žIíq}ŻłÔŁÎť‹~Ŕ› ž)őţ—ćNRy˙ÂqVťţĽ^_s`+žZ=Ë÷lŔÁŒc FăčDôkÚ7ö>˘á ¤Ĺ$í{Íßţ/öĽVC¸[Ĺ'ad›ž¸şÇČreZn&žXń'ŚnüťS"Čˆ^Ú~x`đ•hWŻźĎCI` BÝŔŰĽ2™W8ýôÁ˜9sŽŮÔŸt\Ě <•'2?×nč†Fań4h ÚÇ:ľą4&‘xډgĘ"ńŒ îRA<šwéŇ é™Ů8˜Y„…{˛QTĹô Ű)Žă‡ż7cőŽ#xŕüžŮŁ%ƒ ž­Ošnůr аxă^źöó?X˝ýĽŐeq 41˘U:%ÇiýUí\á{jŇ˝Lâ™$ž)‹Ä3‚ ž#3ÁŤxzł^˝z`~v"˛Ąëöß!”f鈍°Żc/ ëŰĄĄĄĺ.[—ÜËEc„bځO-ózŰśm”kÝťţüsşrłO⒣G!'Ç:ť{÷nĺ~ĹX;vPîcŃľk—r_ˇ˙ŹÝť÷Ŕ]śmŰŽM&N9Ľ{šËR܍ÔÔ4UśŇŮzx“ÇýWU¸yäq>|DýýöŰoŞ}%‚PW°oÍ0˘n§ý‹ĆĎ=˘5|FU>Â\Ps^Šr­ć\ÎŘć ľ ĂFÂß)pÙ÷—u ´äśuš-şŁw˛gí* ×}ű<Ňó2ŐßL&~~œˆ öží~‘Ů‚%ť×áşďŸC^aIrvgĘ-é8łś,ĂOמŒđ RďcÂóŞožĆáĚ8nű”‹ÔôřĐQ¸šĎš¨ ŻÍű ţţŮ6:˜pű˜ Üpx'žűw&>źčœÚź+źÉĚ-Kq÷oc‘SPZŒÁd*§/Vý‰O.y ë7/óޝǨý¸'ő°í9Žgöśĺř{ĎZLžÚ=7]w(đ‡hA|JeKer°ŃĐĄCŹ"ł]ńeű5"2Ť$ůÁj62Ĺ(á÷­Nm-I$žą"ńŒÄ3‚ ¸‡7ń|lÔ¨ştjŹÜq,§ëć+?ąŞmŁŐ•lŰĄTŒůx&úĚo„kO› &,XKMlƒĘőmŇů<狊ĚČÔrËśŔ—óÖaŢşÝČÉ/T+ŻËfÄd°`@“PôIŽD7­$66Ööšż ę%žą"ńŒÄ3‚ ŢBfBĽđćÍBRR’r–ZŽÍ„ ç–qEťaYrć5ŘÔcôíƒÄDŤşßzmŕŔƒXľjľš§@lΜżœ.§ď'Rąxńßj¤°=ǏˇÍëű°<âăăŕ-G1`xx˛˛˛qěŘ1¸‹ž,…c´Ż–ޤŔŒ°Ňëą~ďúőÝ+ÍYW_}}ŠżÝŮ6A„ꌪŽd&“Q% łŠ‚iŞx„ŁPýp¨>ŢϟcŸsʼnŁĺ{ÖŰć/č4žŔQ§ŁžA%‘ZŇňłËž@ƒČxř‚ÜÂ<Ü÷Ç;¨‡Kş A|X4ţ;´?Ž™Ť’°›ŽěÂ[ žĹ“vĽĚ3n˙ůu[ň˛W“¸ ó`D‡aƒśü¤ĺS•Ÿ‹—ç~ŽžImŃ˝q[ oÓKKÄĆk‰ÇŮXąoŁz_›„dÜŇ÷<5ßľa+Űúż^5ď˙m-ƒÎĆgˇ %š;¨Ňsś­ÄÂŤŐúďúu,ćßţžÇŁ]Áíşí§×Ô÷ăçkÝ =›´GAQĄöš+°z˙fL?†ëż{ŢôÂclďÍ/,Ä ?ź`K^2á{N‡Ó´ă‡-G÷`ćće*1šW”oŕÎy(BíĄ*Ľ2]ĺeÂĂÕȬhćlÜ´î%2;ZąŁˇPBlnŽŮŘ ƒĄĂ‡¨”:ĺĺlüš4ŚŽÄ3ĎH<#‚ˇ¨Œ ž‚ŽÖ­[ОŢ˙+؁´ü ěË,ŞrבĄX¤V¨­gńŚX˛ő ’ăŁ0 }úśi„6cŃ :!A0jŰbÖ>0Ż Ç2˛ąő`*–o=€…öaűáTš•ÉY]w-#Fí{vN ưáčÜą7n\ŞÄ¨NeőžŠw$ž‘xFâAď"3ÁëTćfNTšššXŤ=—~ž€ąŘJöd¤0(X•ĹÜÓžzőěć͛Šçý9P÷6ÓŚýi›ç9ňÔSĎVř:ž9 ĚěŃKO–‡;ː˘˘ŠBłšä<÷wßăj9űߘ/xđÁGđŐW“çž OĄ&qWxF÷H ĚŇr,ˆ­_˘xĂPŢ×ńPĄĽâxbă‘ÝśůS´äÎŽ”C˜ľu†ˇîfq ĘŽ[K”ţĺ íýťÔßĆL¸đA´KlŠu‡vŕ qnǁNGgV–cYŠč ­ď‡Ť_Dx°ŐQ÷*mŘź+îĐś…üźvr­ś=&ő÷Zm[X"‚0yůýŐĎk ikҝÉƁ͝Ჯž@LhViI?&0Y~€SĄ–Ő˜k SNŽĚŰž &ƒIŽĺhÔ!­zŘ^ťžçٸç÷ąřuݤä¤i‰ÁĽ¸¨Ëé¨*LZ>4ő=őČĎţŕ⇵ăÔËöú˜ă…Ů“đɲßp4ëĆ/ţϜq“íő‰Ë˙Pe(HRt}üpÍ jdłżóľß=‡l-ńę Ü9A¨ť¸+H‹ŠŠÂ°aC0wî<ܸî|Ýî?ěL‡P12#qŐŚ.HˆÂĐĄ§#::Úöš? Ćýj[ňR‡‰Čv‰ÍÔü‰œt52T'-'Ă6ß"žą-yŠÓ'š#–Üů VÝó9něíy †/ykîűż\˙jŠäĽÎšJlKŮo°lĎě8ž_Í_}ʈRÉK‡OżĘv<[żP%;u~[żŔ6˙♷”J^’žIí1şď…đŻtť‚ŕOxÚćšë ƒ3Ά†áq¸nc7´J•DŃ<-×mč†úÁąjßqꔷŻ+:Nžźćk$ž‘x†H<#‚§TśírŐ^ŇqľgĎh×8ˇ CLˆÉęfđÎÄuéë3kSvG3ň°ăX:6JĹöŁé8œžƒŹü"˜­veĽŢS×'~Ϥ¨@\¤íűśMŞ~<űę&ţZSGâ‰gˆÄ3‚ ŢĂAđž&6u(Śęßż2[áĎbOýSp2ą­ëŠřă–g“ÜC†œŽ-œlđÇ@ݛü÷ßZěŮłWÍ_zéĹXąâŸr§§Ÿ~B-[XXˆ3f•ZW˝z‰ łZîŽ\šşÜĎĽ kÝşőp‡•+W•űúňĺ+mó͚5…ť´jŐR=R¸ľzőżĺ.ťuë6%D#-[ś(őšţ÷úő]~‰“‚‚ŠËŔ˙śş™żĺ–›0`@?őK˜ŽűAę t/ @ŕá­8” ÁżČ*˛@—^×v§VRP,ŇfŇčdłSs3pŐ×O—Jbž˝h2~X3Çö÷=§]fů™•—c+ɐ–› oÓŁq;§ĎˇJL˛ÍĎNłÍˇILś•ůeí<|łzŚ*‰`OUKFD‡•*Ë “WX€ĺű6ŘţNĎɂ7˜ťm…mţOuşL )ƒ[Xďa˜ÔÝvܚŞ"F*OřÄҎgœ1IńőqĺŚ.´ˇ™rŤJĂś­ĎÁ$U3)Ž>FŽ<‘‘‘%Ż{8°ś;I<#ńŒ3$žÁž”ŒśŸEßž}Đąa$.jЍ` &­{ÓčÝÉŕƄ“hâ>n€Kۆ mRzőę‰ĐĐĐ —;ÇޟxFâgH<#‚ŕ)‘)T O,Ë{Ý~žbœ˜˜h,Y˛ sƒîBÓËŃÝ$z'đđGrĂ"ń÷Ů×cO‡žĘyŠ7K,SĄSWuwaŠK&k+‚Ľ(^}ő Ufő?Śâ˛Ë.ą˝€ÓN „gkÖü‡ 6˘C‡öN×óË/żšĺF~ţůW\qĹejýÎřć›ďÔ#ÇŕÁá.ÇŸqďŞR_}ő úôéírYžŽ3räˆRŻńď )ńŘäÉ?âúëŻuşž~Ţy)—ľsĎ=—\r‘Ó傃­Ł’h}ý ĎâškFaßžýřîťÉjžuÖH‚ ÔVô8$ Ŕ¤žŮIY9†!Ň$=Ťţ@A‘‡óÍ0ˇGţď0qWŃčÄ‘q؛zX-ˇ?ýšĆZË-źáC¸ę›§UňKOb~uĺ3*ůőöÂďmďż´ë0Ü­%0ue¤Řćăâŕm˜,tFxPIr𠍤Ä=““×ő< “VLE~Qűsž™ů :5hŠJNômÚ§5ď†ŕ€Ş=ݗvłˇ.ÇŚĂťą#e?¤×öĹ1šK\V˝ő+Ţo7řâ/së=Ç2ÓĐ&8bw|:”S#)şž‰Ě„tU1 öß‚ŕ9•Ÿ*ďďŕŕ`œ~ú`-łŚ=@ăŹ(üÚj#˛*”t2Vˆ śľG›Ôx4i’¤\çYşKǓNsgűĎH<Ł#ńŒ žRQßPyËşę7JLLÔÚŢ>0˙˝D9‰ý´=é,W)× _`0XĐ0̈ËZŁmŁŐgĺJT_•˜Ç×ńÄ3ĎčH<#‚ŕÄÁL¨2UqĐr„˛´Ŕ!ƒŃŞU+ěkŇżŸúĆľG]d_ËÎříÖ°żs´oßN%sÝ—ůS î-(đš=Ű:ňŁQنčŇĽs…ďĄCŮ A§ŠůM›6cŰśíĽ^§ š~3úÄOăŘąceÖA§Ż÷ß˙î˛wď>%jsvŁüŃGŸŕßרůÓO„zőę•zÝ>‘Qz o”uQÝ?˙,ŧŸN‚3(pÓˈöďߡŒŰEm,kiݞ‰Xśly™uPÄöŇKŻŞr—7nrűڟ7’oźńŞm´Ň‹/ž‚Í›ˇ@ÁŸq§Í ŃŽí‚ŔěcHůç/É>yÇcXüD[—_„=ůĐ š&ŠcdmKý5ž 0T|›Ő"Žąm~ůޒќę7Ă×W>‹ŘPk<Č$ć•Zó‘ilIŃÓZtÇK#o-ľž•ű7ŮćŰ$$ĂxrŘ ¸ŕ•ˆ ą&Ą™Č\Ľmç'Ë~ĂM?ź„>ď܈ŻWÍ@e`š‡ëż{§˝w›JŒ~ˇf–iűq_šľ$zŤ„$x&•=%+ߚˆLĎ-q” +÷=ŢqPtç<ĄvâiűçI.÷ŤôG§ }z"nűŻš¤Găd§qFnůŻ'Úiű„yŠSOP%qYEřCŒ#ńŒ‰g$žÁťTĽ\tÆ ѡO/tkŽKZ[Ëeš´×2ys2hSRD.oŒv ŁUl誸ż č%žą"ńŒÄ3‚ ŢBĚŸâl¤Šť#RXÇ˝wď^HNNÊ+1#ôa´Ţ3}6}ƒ€"÷\Śü™‚ŕP,vśö<] Ęúőě ęť]łžśĆ<…Ž[éé֚đéœ}ö™śň˜t@ťçž;mŻuíÚ_|!~řá'UzóŇKŻÄE]€6mÚ(/ŠÁč|Fç<Ž@ž={n…Ÿw啗+—2 Óţ÷żłľ›Ű8vě¸Ú˝´eTT$|đž2ďMJ* ¨?ůäSĺţŐ A›HŒďá:<„÷ß˙‹˙ƒ#†ŤrŸüŒšs˙²eV `nó“O–ĄÁßĎsĎ=›o­D{cĆ܃3ÎŚ~SáĘ}ě÷ß§`׎ÝjyvpŸ¸ Kyňs{ěIäĺĺiŰüžüň3DGKǃ 5‹'ŁdĄ`933 'Z˘Ý (ó0 ç~‹­­NExӖˆ‹2BË] žF;~…EÚąČʼn”¤gYă>“vlií= ÷íĹř:îĆJŐCMś Žآ+ćﰖÜţuý\Üeˆí5=‰Š”MĎ+¤ˇŻ× .xŚŇˇrżŹ›o›ď׏b~u`2q穗ŕś~çcĹžÍXşg=Vîۤ’­Ůůš*9űřôŒ‹:v{˝…E…¸ęŰg°ăř~őw‹řĆŢşş4l…Śą ŃRű{ÝĄí¸äËÇáM˘C"ló_ü(’‹G5—GRT˘zŒ ˇ=WQIˆô<ď87ó<Ąî⊣ź'NftŽn׎*Gľté2ŒÚĐ‹ďĆÂĆ{P`,ż}Ťkš8m_Sœv°)˘Â#ŃoPŸ2ƒČ*#.Ť %žą"ńŒÄ3‚ TOc•ň^ˇ˙ťqăĆč××Òĺ6eáÇ]8’+NfŢÂh° e¤6DËúVqcBOc˜šŽy$žą"ńŒÄ3‚ ŢBf‚WđfbÓqžÂ–@\ľj5ś›†âp\ üďc$¤íDmĺH“VXpŢÍČNl„ćM“Ń˝{ˇRľë‰§â˛Úœt‡ŠSíËcŽpű}´hŽ‹‹EJĘ üůçtÜyçí0™J‚6ŠśXöŒÎ_°}öŮĽŢOך—_~óć-pëóîž{ věŘĄJšžůć¸2Ż×Ż_ďź3V9’9BÇ1ž~řđLŸ>SMÆ Á+Żź¨^§CاŸ~„xD ŘXړ“#¤˝őÖëN?ƒtęÔ|0^‰ż¸_ôĎräÔSűăŐW_*ľżÜ‚5–eŠÎâŃGŸŔřńoŤÎA„Ú€cĚÁëWdd˘ˇÂ–fŁýöŻ`€Ű´śA›N ćŘŐř>ÔGĄľ ĚĂ™3j’üŽÖŞšÖfŤŐţß*nSĎl×/Ďý…ćB,ÚšFKđmDϤÇ^Ç$&i•€Ď.{˘L9„e{6ŕŸÝkŐ|)˙ëp*ü‰@m›ú5í¤&’WX€q‹žĂ„żVOřç'˜ wýgK^lŢŸ^ö8’u…f #ló!Ah›čţHäúqśůu‡ˇŤkłsxűąýČ)ȃ7pç<ĄvăK‘Š_ż>†ŚýDˇŁ 1˝éVlˆ?Š“6'âqÖŽÖH(Œ@٤†j`VxxxŠeꪸŒHz_•_eůMş|Q”FĄÔW_MBˇn]á.c˝ýö[JhF7/ ÔčXÖĄC{őÜäÉß eËNßËe'LOUŸĎ˛G–.ŰIŃEfQFĄ%ˇ—´޽{*w˛ŻżţIIËÝNşˇýüódÜwßÝŞŒ?ň ńŞŒćoź‚qăŢDpp0*Ă]w݁^˝zŞyşŞ?‚ ţJEí%_g§aŤV-°ŻÉHěi8‚`j\{.:Wkg­n*•éĚ­NBM.Ó(*çu:Íö÷ƒSŢEf^vŠeô$fó¸†jštٓh_jŽŚ|xÚ{śżĎë4‰á1¨i¸]LĚNřçä”vÖbâ‡]Ŕ ő÷î‡=Y5ö§ąÍŸŮž_™ä%Ys`+źÍé-{Řć9ŞŮS6,Rف™¨Ő‰ DťzÍÔ|Jv:ţÚžĘé{Z÷ź…;çĄ uws1ĺĺ ˜Ż`>ć”SşŁqP<.ßÖWl挘źÔU˘ň‚qÉ掸js$ŐSÂ2–Äôľ¸ĚߐxFâ‰gAđ5ž´ĽŽó™1FéĐ8Wľ Dד–łg‰GŁLN,3`ŔŔ†&\Ü<íš6¨ĐšĚ[e^ó6ĎH<#ńŒ ‚w3Ákxjkěě9WNfúßÉÉM”@†Łg×üâ:`ĐڏyţΉzI˜ţ­HkÔÉIUr–ÉIO„v•IN֌伾üĆ"TЍ8•÷;'W°´Ś}yM{nźq”št(2ťćšŤÔä)<—é>V\?Í8U…ˆˆUғ“'8~_gP¸7aÂťAđ'*ŠI*Z–"ßîÝťbĽůzd‡5@Ť?#Ŕœ Ąú1šŒ(ęÜŰ.:Mš$ĄiÓŚ¨ a2hŰn)”ćŻÄŹÍËU‰…)1jň‹˜té.|Ŕ$ć_ˇ˝ďôýiš™¸é‡—ľ÷PłDŔCƒŻ†?đÖüo1iĹT5ŸW˜{NťŹÔëË÷n´%6“˘Kťą†˜J„ďӏ•Yw|XIIn–t¸˘ŰđRŻs”éZâÔÁv‰=îC{‚ěJ[¤ĺ–.…ĐżYg$ÇÔǞÔĂřyí<íď.eFö.Řąwý6fíŘ3I˝čŽ`4XÇu×q 6٥柘ţ!~¸ć4Ž.)łśd÷:L\ö;źĎ?ž‡‚ Ô}ţĎŢY¸Qn_ül’uß­lݨˇH"Ĺ­¸Ăƒ?ÎĂőĄ÷pwww}8ĽXĽ´ÔÝ˝]wO6űŸűíÎv’Ën’=ż2d<“™MćĚýÎwo(b1Îóô8‚ądŚt“N’e;qS"†,ĘÁÜîŰđgŸ-¨LMĎţÎ&Ł!{oď E˝‘žŠžťôQ™Áý5–ů3ϟĺ ő ő ő !$řŁqľž§6#‰ßěťďžH˜3)–"tKŒĂoEÍhĐn]Ěfć˘>2âăpXŻ8ŒĎ5c萁ŞÓş$}h[ÇOS}$ięęęB -4˜‘H`ÓÓ:Ž&Ä,ł˙ţűaÝşőX´(Ÿ§ß…=Ö|ŽąŚib8ňěšxXş×TĚ?ŕ$Ľ§câŽcUf+o˝„ťššŒBé|Ő*#GŽ€ŐjŚä$öÜ˝ˇ˙Œn% ‘RW€[5Hř0ǛaNN„m@_l?pX{ĺĄwîJ˙ Á.;RĽšPiólL”’ ÷y ŽüěQH1š[–ăčׯĂĂG_éPŽÁěú÷ˇĎŠŔ§ A˛Žź,"zÇ gîq8ޙ˙*1ńÄo`ńö5˜2xw$Z°tÇ:|şě—śuϙp¤ĂśŁňśżˇđ;NMHR˝Gt€}iÁnmşśąŸ,ž˘ęr0d¤Ä'aYÁüoÉ $ǝϏÓ/ťgŰřă3?Äę˘-8tř$ľo g$ŚŠ ňŞÂM¸ăűW08ˇÎ?f“ s5Nçż*@yÝWOâăĹ?aŻţc´ef,Í_ďV͆^˜ĺň˝Oj ^ çO<-úA]łí•E8ôĺŤU)éőźF;†×ĚĹĐÜ~(­ŤDQMpEyĺďŇu‡ÉĚŐ´d3“l^bú^şt92+Ó0ya_,ĘÎÇo}7Ł$šшdc›źŁ/&őEj|22ťgbôčQČËë˛XM´Ćo¨g¨g¨g!ĄŔŸR™Žćy2ÂgffŞl[‹/AbüFôNm¡;šQT/&3śxÂ;¤špLŸ8 ΊÇčQ#1|ř0UqE'Ôf˛ÎĐ<Ô3Ô3Ô3„:h0#!')‚Ż ú´”%”2óćÍÇ<ó)ŘŢm4Ś,yŠőĽˆŞ˛ťcćq˙Dрá*09aÂxddd¨e4—B!‘ťŔĽ”NOOÇŞUŤQŇ­JpśĎűôG ůDY'™ÚžzĄÄ_}’¤­?PÓPҘíjű@4RG‘nIöŔŽšJÉűw/ŤŔ—ˇN~ëL´;ŽľŻČĄzeÖŰ‘_UŠŰVáÓĽżâĎMKÚö!A˛;ťPĂ"…ĄÝűiŘ+pĂ×Ϩ ćŒuóÔŕĚšŽÂ9ă˜ĂşőWŸĺەŞ2o͛ŚćKpQ‚Œ‰Š¸ďˆKń/-€(Ä_×ĎWƒNNr&î›z .úÄő߯œ×Ggž‡š†:Ź,Ú¨[s“ÚˇpÚîăĺżžP×Czůƛăqún‡"ÁbÁ¤~#ńâÉ7ăš/WŰK YgŽÜ÷Tœ9îp‡yRzâľSoĹŮ܉-ĺ*űżĹ?ˇ-OKLÁ“Ç_ƒË>{$čŚüýBşšĚOŚ2W1™ž={"77›7oÁ† ‘V™ŠÝ—ôƢěřťçvlͨlk̉Tâ´ý*30ž 7v+녔Ä$e,Đ˝ٞ-čŰ;Ou°”óԝŠy¨g¨g\A=C!áë=ÎÇeq>źĆš™Ö“áUĚ­óĚNƒ,“'ScŁu˘gŃ,ÓĆĄŠŠI˝Úl6ÔŐŐÂnoV˝)#o§î–ť:žLcŢźęľOáběłě ×Ṳ̊Ôz“‹!ů.¨Îę†ßŽžCFĄ[ˇn˜0arrrÔ˛P™Ë˘=@I!$:“•ɇääŐ¨(÷i„ÓË>ťť˙t–Žń¤EŐ!Ţć{[FZđ7čĚ<_–… ťŹŰZWćs đ=öŰřlÉ/°Ů›<ŽkŽ3ăÄ]ŔőűŸži9 DŒ<}“łľe>âŽhÓ3ŞxŒ?óěv;śo߁M›6ĄźźB›­1i˝Ö¸ť,Ť2ĘPZćţyŠÓ5Ż& +˛1Ś˘'×ç"!!ĄÍĚŢżՙ@:śŰ6Hý+ąęŇŃPĎâhÖ3čŰŒŞŤŤąbĹJlܸŰŞ0ŁČ„E•q°Ú㺏ŃLţ"R´VŐ˝˛›°On3zf¤`ذĄŞRîÖ ąšĚ—ĺá†z†t4Ô3„xÇ=ăŤw"HHˆß-“J¸v 4c§ Eš ŻÎÜL{zuwĆ덒ł V f‚/ ʁ<08ĎÓÇĺ-Y˛ëÖ­‡˝Ş W„á[~qÜ0\3ímŐűcÎa§Ă”–QŁFbĈám?„ŽŤ&Č}ůѤšŒBH¸ˆĆf(LfţŽĚzą„żš$ŘŰH fVŰęQb­ńk d~ťj6~[żëKˇĄ´ś &ířÓS1˛ÇěŮŽłżęéIˆ‘ÜřT¤Y’@qOW0˜ ĆcÜÍ÷g^]]2›mÝşUem9WV”7Őb]J1ÖŚ—`SF9Š“ëa7šé˝ &ť Ýj“1°* CŞr°Km7d˜ZŽľ˜Č’““ŃŤWžş^ŠŠŠa1śÇbě†z†t$Ô3„x'ÚőLG˜ĚäsmÝşMUż)*-Êr;~)3cS]ěÍ]Çh& ńZKęˆT;ĚmÂŔt ňzvWíW’ Áh˛WťU¤čęґPĎâĚh03ŽÓ`ćąl0Be2s5ĎÝtQQćĎ_ؖÍlßeŻ#ĽžľNv fĆŹeššš?~%ΚË!„Ä ąf0ó´Ü“™ŻËI{B‘ÉĚŰ~|YnJľŚ/Ľ )˝Ł0 !žé*3Ą#LfŢ旖–˘  %%%¨ŹŹj[&Ď›Ź(6WŁ0žů U(NŹFYBjâQߍĽI żŘľ×–LźÍ¤MÚŤŠV RŹńČnLFˇ†Tô˛ŚŁ{c:ş5ĽŠŇ6ĆĆҌŒtŤÉËë‰ěělżőDW7—éPϐŽ€z†߈= “™ŤyÎÓUUUXťv6oނ’ŞZ,(f•[PŘhBSł­¨QŠjPkĆŔäfLɲbdfr230dČ` 8IIŽĆ—X7—éPϐŽ€z†ß Á,: ffä‹îíaÁŐ:žĚs5-tďŢt–/_5kńiÖ.Žł™‹žľěĐÓaJĎŔ˜áĂTĎýG°ýęţ›Í<Í÷wB!¤ŤáM‡¸[îN‡îöç|/ŚáĚ_ľJ(}ýYŢHPŠŠŮŽÚŚFRĚ ^BÚh>ŢoSťťůěÇßu"ęn¨géZŻ ¤Í(==ťî:}úôĆęŐk]T‚ݲę0ż<UĹŁ 1ś2š‰Ň°ˆą,Š {e6adşvOOS%ÁĹ\–™™ŮŽ4x¸Ú­"Q÷PϐpC=C‰uh0#B0&3ÁS@ÓÝ:@Ümˇ]•p–lf&ž‡M=Ćaß%Ż#ĽŚ Á"YË~?ú|ě2F Xć„%k™§ůţŽC!„×řÓ°jœďj™ťőˆg JFÓ9Ž˘Ć*1IȑŕĽü}Bˆ+|ÇÁšî=i$Y– ˛ˆÉ gO‘rš555¨Ž–ĄZM766ÂjľŠŒ*’éL2ŹғYDĽS_|źEíOJ^ŚĽĽiCŞ*y)Ӟ2ˇ¸:V_—ŤGbARϐpA=CH×$œ&3AŸ'˘GČĘĘB~~6l؀ÜÔrŒŤ­Ç˛Ę8Ě­˛`KŁVMr4GéýZŽ:ŮԌ!I6LʰaD† ))ÚçîŽAƒŞś+9ې$ÁŰ|_—w&Ô3$\PĎBş4˜‘#؞ł!ÉfŚ?ËŠ Ë?Äđőż Zł–Í=ôˆKKÇč ł–š›çižżëB!]™`4ˆ/ˌ0k™o„˘!6u’™Xށ„–] „ř‚/ZČÓzţf.óśL_.ƒ˜ÂdĐÚ|=Žďé˜Cľ~ ą™Žd.ÓĄž!Ą†z†ŽM &3Á[ŚUçmŜ޿?ôěŮCÍ6n܈•˜P׀ľUVĚŻ˛`uUMŚśZT‘Œ|b“öżn–&ŒNąa÷ô&ôMľ =% ÝşĺbŔ€ęU’1´Ű6ŒíVŃ {¨gH¨Ąž!„th0#ŠŻ źB(zŚčóäÁAĎf6oŢü™pśöŘ {Í{)5ĺ𕪬îřăđóQ0h´CÖ2_Ĺw¨zřş!„BZ…ÉL'ĐŹe]É|ŹN E°2Rľ’›âĚZ łV VӐH#Nű—Ÿ‚4-€I!žŕÍđĺËzތfޖšŰݧőƒ%™Ěź- d˝hƒz†„ęBˆN &3wó}i3JLLĀýUVŐ˘˘blٲŮeĺ]߀’ÚŹŹ–ÖĆcSƒľöVłY„ÜŇ㴏aÖţ—aśc—DF§Ú°Kš YI¤$§Ł{÷nčׯŻjż’¤íś°-ËÝź@։¨gH( ž!„t5h0#Ž?AÍ`zڏš'i9ä •Ílľd3ë6}€ák~…Çţ(’ľl×ý1÷€ .ľ%kŮčŃŁB.Đ=Í÷wB!„8ŒŃÝŐ:ŢÖó´iO(5P¤Ÿk :ĽXQŽ1Ů[–ř‹ôŠÍ҂—&đ7…â?žč!oëůbBóeš§őÁŸű0湎n.ÓĄž!Á@=CqĆ“™Ę6#1šőíŰGÍĘĘʰcGž2œőŠŤĂލV×Őc}­Ö6TkÁćF3ƚĚhjŽëPÙĘLZŰUź6ŇÝbÇ $†§4a`2™¤„$U*źgϖ2äéééíJalˇrő ęBHW„ł(Ŕ×ŕ_´L&‘`Ěg’X˛™Iä ᯤóąŠĎLXđrŠ6ˇ{ŻÂŢC1wŻÓPŇo¸ĘVśÇťŠWWÇäËź@ćűť!„ŇrOęl]ăOŁŞŕo–Ž”Ľ,ýۉ%Lއc*2,ÉZł5MZ ÚB\aŽ3!՜ /“aŃĆ !Ą#őL°„JůşÜÓ:Î녋PÄ[Be`‹%¨gˆ?PĎ>bEτŁÍȗv$I$Đ˝{wäć梥Ą%%ĽČĎĎGvyúkÓ{ۚPÓhEA˝k›ąĽŃ„|ŤEÎęěqhR撸śţžŐ8ĂŤěEěa)&;şYlč߄IvôOş%šoAB|’““ÔńJ;WVV–j÷2™L.ϋ/ó™ďď:‘ ő ńęBÂ=Ń fŒťTžą„Ż ‚/îöéjÝźź<zh7ŹXąë’S0}Ŕ8ôÚ<ý7ĚCrU9jŇşaăŕI(0F•Ř3xFŽŃ.k™?˘;îĎz„BH8ńľäłó:‘˘kü ˘új4s^ßÄ ĺyďˆëŮŒhŒĘÖ™24Ř­¨k˛ÂÚÜŤ˝ 6- É2 ])Ż ń&3âăĚH6Ç#ŃBHh‰v=,ţhœPÉ:ڔĘ8 eŢĄž!ÎPĎŇ1Ģž Öd&xKBŕnž´’““UVł^˝ňP__ňň kŻĺčVWMMh˛7ŁąÉŽjk#ŠšQl…öŞ ś8TŘL¨m6ŠŇš ÚŤMű=´ŠmŹšĹ@fŠkÖf›!żˆ‰qve$KՆl‹š–ftOrľ…9 qH×~CľßOłv\Ň.•šš‚ěělU3##Cľ[š2•?Ÿ/óƒÉěęë:Ńő q†z†Ž!=C:ĚH§ăO†`˛™çëËD”;FĽ^šr*R§`ÉČ)ŰôÉΈĂUÍzWűqu<Ą˜ďď:„BńLfúú:Ąh…{{8?CW0–šB‚T TBéHBmźEÖ˛PűÝÎßý3vÓő !„` &1ťíýMd e&SSSŐ f3›Í†ÚÚZTVV)łYUUęëgľÂnˇ;lß2.Cź§2 í4‰‰aLŽIĚc))ÉĘH–™™Š˝Ś#))I—;S™ńó„k~ ëEÔ3„Bˆkh0‹šŒÇŚK>\ŮĚ\Í7.zô衆ÂÂBޞ)ŇSE$Ͱ/Çîﲎ.Đ !„D+;ďKÁ›€:W×řk23n§iĺ$˘•`őő!„˙ˆ= |ířçďújŚpÜ×مŒ:„BHçŰzĆט?ŮĚ|™ďj™şÄđ%ƒ”Ł” gb*ÓY]]6ԫךšUbłąąQ-łŮšĐÔÔä`@“÷1ľf$3›MŞ´ĽěWÚŁRRRTéK3™ŹŁŻďířť,mü]‡BńNpz†t<4˜E(žzX˛,żdá~hpľĚˆn4ó•@E8Íe„B˘ oĺźÝ÷"U×řŰ ęn{gh4¸Z'X(Đ !„Ä2˘=oiůý!uM¨f$´P'B †Ž˘gBA š(”™ĘÂqßvŸÔ"„B:›ŽŞgüi/i3ňÇlći˝` ec;Ű­!„D"áĐ3¤c Á,ʐ/™šúúz$&& Ö E63ăr_öĺÁö d=B!¤3í!÷ŞP0#UׄK;Ŕ N"„ şšž ÁšďCi8 ”PčjB!‘BWÖ3ţč’`ŒfĆĺžÖq^ŻŁEť3ĆBéLÂĄgHÇŔ+¸Ť3kü’ŐÖÖ˘+áIËálü=_ˇőg˙č„B"]{čAGwzĹ×yѤkŐ $p‚Ńk„Bˆ;ş˛ž –PݗďńĄźĎťÚw0ű§!„‰PĎřoŽňV:ҟu:ZřŁmüYǟ÷&„BBM z†t>Ě`á8§ýmů’VŤUŐŚíJŽÎPöNqľn¨đ÷á†B‰tDsˆö0›Mí´‡ż÷˝h×5î>/łœľ!„Ž‚z&třsńg‘ő !„H…zf'ţę_ÖEÖ˛Pe} őv$[ „BÂA¨ô éh0‹œżHfłEűâYQWW‡ÔÔTt5œ~ź­+tDŁ/:!„XE4‡ÜˇDƒ ä^Ťş†÷uB!$˛Ąž =ž6ÂFÔr„B˘ę™ö„Ăhf\ϗuÝmÂÝEMD!$܄Rϐއ%2Ł== źšÍf5Ż˘˘]Só†+}q ű ÇqB!áDעAŒš$P¨k!„ŇŃPτ—pĹ]ÂI43!„Ž őŒ{1RůŞü)Sjy_ś[B‰dB­gHÇÂ+Á8 :}Zž`2Řl6444 +hϜ`Ey b›BH´!ZC4‡Ž?ÜéoP×B!¤ł žéX:ŤÖ‘z\„Bˆ/PĎx'˜v›`’Ł1<í'Đă äý !„Ž Tz†t4˜Ežž(ŽžX‹E˝–––ĄŤŠo">Tű'„B˘ ŃFíĄăéŢćĎ2ęB!„„ę™Î%Ô1–H}OB!$œPĎřN0÷ţPh_ڛBÝŽ趄BHGˆžŃ—“Č€łĹ՗ÄؓDžtňjľZQ[[™‚˜"BH4#C´†Q{¸ťˇů+ţŠk!„ŇPĎD&ţ4ź2B!ąőL`„Ú(Öلâx¨•!„tĄŇ3¤sĄÁ,Â1~МĹc||źz-**‚ÝniĄł?š„BbѢ1ŒšĂůçďýŽş†B! ő !„B˘ę™ŕ U›MG™Ú]˝O¨ŽBé ÂĄgHç@ƒY”ŕJLšÍćśôĹĹĹ íéČ"ţčB‰%D[Č}M´†hŽPś¨k!„ŇPĎB!$ÚĄž -ĄnÇqg fÇąB!I8ő éXh0‹ œż8ú´qžţÓSŠĂÓl6ĄŽŽ• Ž Çô!„Ä*˘)D[ˆĆĐ{“¸JWěJŤčÓÔ5„BéL¨g!„íPτXmŰa›!„H#z†D¨Ŕ•Řׇřř477˘źź‹ŠŠŠ žá!„⚚šĽ)¤‰hŒpô¨¤Ž!„BH8Ąž!„BH´C=Óq8ŸĂććfDlď"„Št„ž! f†|yŒâUŸ6Î׿dňEÔˇ§ÔŽ-..QÓ ^B!Ä_D싖ŘŮ[ŐŹz’Sëřқ„ş†B! ő !„B˘ę™Î%Ň gl„'„ „ZϐȀł(Â՗Lž„"n[\Ÿń°Z­ę‹jłŮ™™ B!„_¨¨¨@yy…ƒŘwNUĘŢ$Ô5„B 5Ô3„B‰v¨g"W皣LglX'„t´ž! fQ€ą7‰Ž|ů¤çˆţEôšľ"öĺ ŰĐЀnÝşľ-'„BqŚĽ'j1ęęę•f=aąXÔ¸Qě; !áO]C!„PC=C!„h‡z&şđőœť3˘ą1BH,ŇŃz†t<ž^Ľ8—ĹůđçfZL†W}0ˇÎ3; ˛,C^­łC8‹Nă´|1őy2î<455)ą/ݞNݑ’’B!„#ľľľ(,,j+`LSě<{ąęřšŽ˜ş†B!á‚z†B!Ńő !„B˘ŽŇ3ŃJBBüŢڋŽĘÖ×&§ĄšőŐnš ŻÎÜL{zuwĆkŠVf0‹PôŢ#ŽŚ]ő"qŢVć766*ą_TTŹžŔ999HJJ!„Bş6őő (--UA˝ć}BBB›°ľŘ§Ž!„BH¨Ąž!„BH´C=C!„h§Łő é\˜Á,‚q•:×[çq›ÍŚü‚|ĄłłłœœÜĺSB!] Ńuuu(++wĐ’žXŁĐw<‰}wóŒP×B!$X¨g!„íPĎB!$Úél=ÄJ3Ě"ĹžźĘ §)Öç‹cÔř Hď’ÔÔTŐťDŻ}K7(!„ýč÷ öIšĽ٘-`Źu/úx8Ä>u !„B|…z†z†B‰v¨g¨g!„h'RőL´Aƒ™ëe4˜…ob_ô‚ą7‰łř×äËŻ/s÷ú´ó+!„B"]h;ż:/t/Á=ٰ7Š{㍞˝qĄűÔ5„B1B=C=C!„D;Ô3Ô3„BH´z&šˆƒ™$â‘/’łĐ6Îsţ2Ĺšžž.řuˇ¨ óDřˇ~y@Ű|}ŸŢ>!„đăMT;k–yę˙m5ďEźQ໚vŢo¨Ä>u !„Ň5ĄžĄž!„B˘ęęB!$ډ%=C:̢WÂ۝Ř׿¨Ć^$úră<ý@ÇŘăÄ8B!‘+ŕJŹ…˝óşĆĹÎBŢŰt ÇK]C!„ęęB!$ÚĄžĄž!„B˘hÓ3¤cĄÁ,Ę0Š{}Z0 ~]Řë_f]Ü;oݧ*v%ěóŒ) !„Y¸ŞWďJěťJCě,ţÝmk$”bŸş†B!ő ő !„íPĎPĎB!ŃN4ëŇ1Đ`…8‹}çyÎ_Dý‹lě)"ƒŢ‹Ä(î]‰~cúcB!„DîÄšł¨wžďjš/˝FÂ!öŠk!„Ž ő ő !„íPĎPĎB!ŃN,č~h0‹Rœ{¸šçî‹ę,ě]í˸œB!‘QŔçšZ‰BŸş†B!Ô3Ô3„BH´C=C=C!„D;ŃŽgHxĄÁ,Ę1 wă<ÁYđËŤ¤6N{JSěüĺö$úů@@!„„OBŰÝ2w=IŒÓűşżŽ€ş†B‰=¨g¨g!„h‡z†z†B‰vşšž!ၳŔ]OWóÓťú1p%ţË !„Yx÷ĆůţôéŹű>u !„Ň5ĄžĄž!„B˘ęęB!$ډ%=CB f1„Ť^%ú|ÁY´;ĎwՃÄ×/;{’B!Ą'ŃíŞg‰Ťĺţ.ë(¨k!„Ř€z†z†B‰v¨g¨g!„h§+ë:h0‹1Üő*ń´ĚÝ‚ó€/ďK!„ŽĹ›°wˇžżË:ęB!¤k@=C=C!„D;Ô3Ô3„BH´Ëz†„Ěbw˝JôeFź­çíËĎ^$„BHřV„‡âA łĄŽ!„B˘ęęB!$ÚĄžĄž!„B˘ę,4˜Ĺ0žz•¸ZOÇ_áÎB!$rđ÷ž-÷qęB!¤ë@=C=C!„D;Ô3Ô3„BH´Ťz† f]_żóúFŘ[„B‰<‚ëŃ*ôŠk!„Ř‚zĆ÷őPĎB!‘őŒď륞!„B"‡Ž¨gˆ˙Đ`օđWđ‡j[B!„„ }ęB!$ÚĄžĄž!„B˘ęęB!$ÚĄž!ţ@ƒYÄřEwîň„BHäăo‚XůÔ5„BHtB=łęB!$:ĄžŮ ő !„PĎ0B!„B!„B!„B!„Bq3˜uA<šP]9Nëł§ !„Ňůďמô1Ţżc­w u !„PĎě„z†B‰N¨gvB=C!„D'Ô3Äh0ëB¸鞈w |B!$rĐďË"ŢýM_lÜ6šĄŽ!„B˘ęęB!$ÚĄžĄž!„B˘ęâ4˜u\ýxúq°Űí „BHäăę~n2™ÜŽcůŃ*üŠk!„Ř‚zĆý<ęB!$˛Ąžq?O‡z†B‰lş˘ž!ţCƒY ă‹Ŕ—iWó|ݟ§ů„B w‚ÜÝ|ç€Ź§ŻëJäG‹đ§Ž!„B˘ę™¨g!„č…zŚęB!$zĄž!ÁBƒYŒâIäë?2ÝÔÔ¤ŚeÜ8߸!„B"˝'‰.ÜeZĆĺŐl6;̗{˝ŤTƑ*úŠk!„Žő ő !„íPĎPĎB!ŃN,ë4˜ĹŢž "îm6[Ű|ăŤq{wăžž/!„B‚Ă›wŐ3DŸŻěôuäŐbą(ń/˘ßůÁ¸HţÔ5„BHôC=C=C!„D;Ô3Ô3„BH´ÓŐő 4˜ĹîRË^„˝|ôůň…OLL@||źöĽ—/żŕ„BH ĐŇCT†&X­V444* ĐŘبîő˘dwÂżł5u !„ŇľĄžĄž!„B˘ęęB!$ډ=CB‡ŻW2ÎÇeq>źĆš™Ö“áUĚ­óĚNƒ,ː×ĆFë,tQÜőŃ{Č]^ůňŚŚŚ !!Ąí N!„ŘGtţššZ‡ Ÿüô^&ŽD~G ęB!„¸ƒz†B!Ńő !„B˘hŃ3‘DBBüŢڋ¤‚Ťl}mrš[_톡Ůđę<ŔÍ´§WçqgźŚeł(ÇU|˝|dZŁééięKM!„Ž‡ú¤¤$5ˆ>¨ŞŞn Š>AÄ˝łđďČŢ%Ô5„Bńő !„B˘ęB!„D;Ń gHx Á,Jq%đőA„}CCC[˝űĚĚLí˝B!„AÄ}NN6ęëPQQŃÖű41ąE/ˆŔ×A×áţÔ5„BńęB!„D;Ô3„B‰v"MϐđBƒYbůĆz÷2._Vůň*ŽQé=”ĄBq…şŠŢ%őőőJOˆč—ĆzďÁ(üC-úŠk!„ Ô3„B‰v¨g!„íD‚ž!ᇳ(ĂYäI;("_ĆÓŇR‘šš B!„Oˆ¨ĎĚ̀ĹbFuu ęęę”č—^'ň  üpˆ~ęB!„„ęB!„D;Ô3„B‰v:Sϐށł(ÁSjbŁČ—/ڤ&NNN!„BˆŻH€Đd2ŤƢ)ýFB•˜ş†B!á€z†B!Ńő !„B˘ŽÔ3¤cĄÁ, đ&ňĽć}cc#E>!„B‚B×"úE[ˆ ˇXĺ˘QäŇť„ş†B!á„z†B!Ńő !„B˘ŽĐ3¤ăĄÁ,Âń&ňĽć˝|!ĺUęŢSäB!$DKŘíM¨ŞŞnýfłŮa@E?u !„B:ę˙qţ\Ä?'„j¨g!„í„Sϐ΁łƛȗž#’˘Xz’$$$°ö=!„BB‚hІ†F%řM&“ôňjÄ_ŃO]C!„Ž„zŚ=4‘…Oç–ÁqB!B=C!„h'z†t&¨ÁYäKďú2ž•• B!„P!ÚB*ŠćqŁ ęB!„„›ŽŽgœŒIçŔë@!$Ÿ!„BH´n=C:Ě"ç/’|ɌËdĐSçädˇsyB!„ƒh ŃzYgĄoÔ&‚§‡ęB!„t]QĎ0@ůđBńĆg!„í„Rϐ΅ę0q÷…1 $=ą ‹III „B 5˘1DkčşĂ[c˜ŤůÔ5„BéLş‚žĄa)záľ#„⠌ĎB!$Ú …ž! fQ€Ť^$’>P^™˘848—+`€BiA´†Q{xęUâ Ô5ĄÁ“v f „Bb‘XŐ3ẇKgÄÚŽóN!„¸‚ńB!„D;ĄÖ3¤ăą€DňĺŇkŃJę@Ěf3@üĂß`Ťőăââ@!„tDkˆćĐő‡ÜE“HJă@ď‡Ô5ţё Ô=„Bb‘XÓ3ĄĐ42§sŒ~Ň÷K F!Äă3„B‰vÂĄgHÇ f†spĘU˝Y=e`FF:ˆo„ş‡i8{ŹB!‘†hŁ1âJŤ¸wˇ.uM{Ă_"íx!„@ˆ=Ě˝˜÷óŽ%ç›×ŠBˆ3ŒĎB!$Ú TϐȀ̢cPJžlÚ$&&‚xŚ#~tŘł”BHŹÓ˘9Z4ˆô0Ń5I0=dŠk‰Ś%ăąR˙B‰˘]ϢŠ/b=ČjŒ~ ćď”BHlÁřLä.MÄ{?!„X%Ôz†t,4˜EÎBTŸ6öX׌ fłEĽ $îéč`'f„BbѢ=$eąžŽŘ(úĹżŤ{0uM{bĄa–f3B!ŃB4ë4C0ٲČNü=ţč @ôƒí„BĆg:Îjor†z€BH´ˆžáý/r RŒ`\Îä‹&¤¤¤€¸Ćř`ÔߟB şö-âÎď ęšŒ˝ƒĂąĎ@†p!„‰D›žńçžČşźw‡Ž@Ďi¸Ö%„ť0>Ó1DŞV˘†#„ ŤgHçÁ fQ€.ĹÁŮ"ô%MqH{"MčÓMK!$VíQUŐÜÖŤÄUO_誺&%\:'˝b™Ů•BH$MzĆÓQ¨öî}D3hçsćiţh'ƛ!¤kĂřLřˆF˝HfTB!¤ł •ž! fŠQ:ŰíÍ0›Í Ž*ţ}Ý.Đ`" !„Ģ=DƒxŇ(îîy]YלěěŔŚ?˘ŢöA=D!$ˆ=*sY(Mj]_Α7˝ă‹.ň5ŽÄx!„t]Ÿ -ःh6#„-ŁgHçBƒY„ŕNÄ:ϧ ľhÉNü}äĄ!PqÎ@B!ą€Ž=t-˘ăę>çŽńŹ+éšpßýÝ_(´H0JÍ!„DŃ gB‘‘,TĆ3âžšó˝é"_uăM„Ň5a|&4„+ţ,Ąşˇ3C!$’ńGĎxšO:Ě"]ęéŠuřÚIgôČőWœóGBH´cźéşÄß´Ĺ]A×kb×6ĄÎŘŒńŢßm!„Péz&Xs™§ezů+˝ü„ ĆĎâë~ČNœŻš>-Ż,—AzeËŕŞÁŢŁMf„Bœa|&pBĽqŠ•\í;˜ëÂvEB!‘H(ô éh0‹th ’Î1—šÚ/č!„tZJ&ŘŰƃُkş&\Ś/× _3o¸Ú†^ !„D‘Şg‚1—yšołŮ`ľZ•ąŒF˛Đâî|ŠĆ1ö–i1™ĹÇÇĂbąřœ]F_F“!„gŸń`?[gŸ›@b5žöCÝ@!$•ž! fQż\ţŕíÇH‚ŹlŐ{ď:cěu*@ ş{ü!„t BŠEbCׄĂXŠą;É8ćËśdxőg}B!$tDŸžńÇ\&ó$ŢŃŘبŒeňZQQůóçcѢEذaśoߎćŐ×׍uIđHÜ()) ™™™čÓ§ˆÝvŰ ăǏGFFT\I^e]WF3–!„â;ŒĎx#ĐŘJ¨šCe Őţ!„9ĐűmĐ`F˘o"ßŰr ˘JŐŰ>t㙬›’’˘z›ş[WđÖđJŃN!„ÄĄĚBÖQ™Yƒ1 ůRZĽÄ !„˙D#¸›'†2‰wÔŐŐĄŞŞ żţ:?ţř#ţţ{ŽZF‡ődóžuëVüő×_řđĂ•Šl„‰8äC°˙ţű!==ÉÉÉƌ&˜KƒžšĎ|]N!„t5‰DŇ6t ÄhFý@!„ Á,qŽ{oœOZځV–UWW٤¸•óž„můˇ°­CsMšmő°kÁ@MVkߎD4[’aJ˅Ľ÷X¤N<Y#÷Enn.=6ŞR”B‰e<éWaą¨k:ŇXć)c‰ž…UôuőónÔ%ňj׳´ęƒžĚמ°Ţ˜ţ8Ů{–BHG)z&”ć2éW^^Ž2“M›ö->ůäcäççƒt.běűëŻŮjxőŐ<œrĘŠ˜:ő•éLW1&Wą%šĚ!„8ĂřL{‘e>uƒĹŐ{ůREÇ×uˇĄ† „ŇYřŁgHçCƒYk?Üx3—I ľŹŹE_܇ÜeŻ#)Y›Żý65§vŮT˙ŠkÔ~´Ş´H`!ŹëW táÇh<óY4í~$şwďŚzšňŁĆ€!„X!{Z,čšPeóŚYœ‘ĆIôňŢF3Y ď#8›Î$[ŤdÓĐKƒ{ P†ÚhFD!¤#éL=*s™č‚–XG.\„gŸ}›6m‰<Äđ÷ôÓOáË/żŔW\ĄJhfgg+Ł™č0#4™Bń•ŽŸ1.cY0çÉ×xL űóŐlFŁ!„hĎłŃ f$ęđˇ1Ö8_zóÖÔÔ˘|í\X{Čâ­@r’öeĐS‚6hߊ8í5.^Ű@‹í5ŐŐE€ľą›?şiC÷Eeb‚ęaŞăoŔB!ŃI(ŢôŠqZĚd2ˆąLďmŹ›ĚZćŮa—rWšě0řZł”‰6iÉJf6kbŚYLôÍ-ëĘ{¨˙´öf5m2™Ěe˛o=ۙ˜Ědž 2í)˜é‹ŃŒ&3Bi°6㧕u˜ˇŠ;*šÔ÷7/Ì qЈd$Zř] ¤Ťâ‹šL×………(/ŻŔű￯ ď)ÉlÄxă7âŘcĹ?˙yĐŁG‡ŒłB &3B!¤Ťę,da>óe{oŚrÖóÇhFAHđ0ŢC‰Uh0‹b­§H¤a<ż555Ş1śüŞľˇĆ§i_‚tm­áŐ uƒ—0ŹIîë-íą°K#­öM‘öلҭ(]ü’÷9uuuHIIi{~é„Bbă}ˇ+ö† …ąL7•é&2ŤŐŞLň2.X4QoAźE˛\˜—ßś­Q_´k/fY/ÎŹ/ÁÎŐvŽËa46ZľÎzí˝›”š,>> j_şŃLćŰٙ݁Mj%ŇŘ\jĂS?U ŹÖѲąÄچZ ňʃ2Ń?‡í„t4ĄgüŐ ŽĚe˘ vě؁ââÜqÇíXślHô ×đ‹/žŔúőëqŰmˇ+˝×ťwoĽÁ‚1™QGBb9>ŁJcY011÷ëƒŢŔ8¸B7•éř§ŽŢĎ[ćx_ÖńľăŸŻëBÚĂx!áĎş‘šHTLVÄ}CC#jË Qˇ`:zôŇľfŮdM('iëVjƒvŻknym–6ÜÖß(“Ö+mŠ)‰@ÉěŻĐkň‰¨ŻŻo3˜éďĹ^Ľ„BHělĎU_ć˸4*Š™LŒe˘3dZh1”™‘Ÿ Ś[¤EœaÜ;ĆőÜm#š%)IŢ#Ąu˙ÍJ;ŐTWĂŚ5`‹ąLJ„ë&3Ýx¨Ń,Ôĺ‰t›š1{}–ooDU˝]ë­î_Jkěxpz9ćZ‘dÂ¨Ţ ˜<8ńf~'éj¸3—mŰś ;väă?˙š…%1٘%K–ŕ†ŽÇ˝÷ާŽmßž}Uò7“!„ҕ 6Včr]‡Éŕl,ó„ŢiPŒäžp6šÉúşů<F2fÔ„x‡ńBHW‚3řŇťWjEÄWŹü śZ$$ˇ.SY˘6˜Z2wˆšLR—ĹéŻRrĘ$Â_kn×„ÂňßPšc=Ěý†Š`id5ž'S Îöí;pÜq'9\ť=÷œˆgŸ}ʧíĎ>ű|,_ž˘mZʘţđĂ4eŹŞŞÂć°ţă?Œ)SöE TVVbúôďńűď`íÚuŞ$‰\ÓĚĚ 6“&MÄŃG‰ŒŒ B‰N‚éÁęn™+c™ ˘U$CŞč•„ ’“ÚĘZp=î2{řpTTTśMß~űqĚ1GĎşuëqÚig:ĚűňËOŃťw/„’ŐVź8łĺľţ•­“€äĘ|ŤŸłą_,ŹÁEűiZłg<!ыżÚÁyš ůůů(++Ç­ˇŢJsY °qăFÜrËżńČ#ŞFä^˝zľ3™9Ă,f„Bş*Ą0—ůłL7”I{ŃP&ójkkąyŰl,(Ĺ֊Z7eMԘ’P—k|2ľőš›őXK3$cźľ)ÍőHľ×#ËdEdúd$c`ĎôďÓKľičĆ2Ýl&mQşá̛ŮĚŁYW2™9ÇUᢋ.І ,}ô zčŃśé^˝ňđŐWŸD'Œ÷Bş4˜‘¨ÁׇwëJƒ­˙˘?>GNŞöÇßZ S†ŚÖěeq-&ł6šÜÜşÜÜb0/Y˛š ëć#ŤďP4448ĚÜ ƒzž! yťíś+.\Ô6oîÜy(//GVV–Çmóó Ěe”)ű8d™ ňŕřöŰďâľ×ŢTÎŠá÷ßgá™gžÇœ‹sÎ9Ëëß !„Č"s™/Ć2Ńb,’”ĽŒ×î‰ ńZĐĐ} Á—LdĄŢŚe:NÉdhÖDSMmŠŠŠ”ů,--M˘|1š“ÍŒz*ü̙3—]v•Ă<1şÉő%#ÁĆGż/‡ÍżXŁK¤ź‚ěëşĂ˛t$$ńĽóœP\\ŒęęÜ~űmذa=Hl FÁťďž ÷Ýw?JJJĐ˝{w‡ĺ̜O!¤ŤNc™ó|iKC™ şšL†Í[ˇbɆíXYnĂ&dĄ(˝/j3ÇÂÜ- ŚŢPíIR§m°é OГţVű_œĹ„8­ÍI Ňl ­fˇjmŐHŮź ÝŤÖaĘ0"+cőF˙ž}Uű‚n2ÓÇĹxćÉlć-ťźťeŹGHWƒńBHW„n‡ĆUę]Ň_΋<HÉŠúĘŘ6-DbFKV2]‹Đ—ŒeÍćÖ™˛KƒŃLJdš-R˘ HŇîëEłžDż)§(Ӛ˜-[Ŕ@`{ŚN=ÜÁ`&r3fü‚O<Ţăv3füÜnŢᇊP#×üĆ˙?˙ü˧őĹ8đüó/aÁ‚…xä‘[łŔBHtăJŁřŒr7i„Ó\&šDî'ĘXVß Ę_ŚŚ$içĐdŘÂXłăł—š;Ó˘ŸéiiHKMŐ>G˝ÖZŹ}†¤§§ŤŹfşɟFPšĚHŹ"e¤'k(‚:˛Ż—´}ŢbË'Ľg‚é<'ӒIťŞŞŻżţ:–-[[,^źożý6Î;ď<?}Ř!„wt…řŒN°ć2_狉Lâ6ňŞw œˇtćlŤÂJSäwô™Ó@­ÝŠNjë`ŻŻ…ľşJ‹œ4ĚX­íLnpľţúÎ!‡„‡~L=ŔéüđĂO^ f?ýäh0KKKĹ>űěP"×ń?˙šÍ­šLJcĘĂ\qqIťełgĎÁ}÷=ˆťîş„+„ťQľłÔ\ćmžhÉ|)™9ë됔hAjj|Í0ÖŮË˙üK‡ăä=Î?˙e€ÓOĚ_}ő ^zéüי6m:Ž>úHLš4„B"_ľ…/óó$@)Ć2É8bąH0 xÎ4ćœ9Ź3˛—š;ÇůqÚçIEjJ2**+UŮj1zgggŤ§ŕk6łŽ`2;á„ă0eĘž ]ƒĺŰ.–ďhdŔ‘Ćš´śPQQĄ˛ žđÂó źĆ0Ň)á駟ĆsĎ=ŻŽš”Ę4ęß"›ÍĽ6<őS…j4˛ąÄچ+ëpĺA™čŸĂ°:Ĺ\'ALŢ|ó\s͕8őԓŃQH“-Ľ6JJBúf[°şŔęz˙Zśź3 {¸Ę^&Ÿ’Uă“O>é|řá‡8üđĂľkŻb$•ĹL Ü÷Üs?eđŕAÚ}ú=Ä"r~qfĽßĺ‘Ä€ś2żĺţ>gcžXXƒ‹öËŔ°žŒBˆN¨::ϓŽę’@˛„VUUáÓŮË0#uwԍ9Öň&X7mm-qçh.‹4¤#Ÿľő[ˇ¨cľu‰iYŁńóňľ8°f6Nš<éééŞbŒd—÷ÔńĎyž§ůÎëtŸM(bů>/żüŞ2‚),,§Ÿ~ŽŸţ/˝ô<üEžK.şč2ŐŮĎ%%%¸ĺ–ŰTu"g$V(ßţ…×^{>xvŰmWxBž…d_W_}CĚKŢ_tŞtś<ďźsđý÷?âśŰîTçÎřYĽsä?ÎĐbf÷aď˝÷B°0ŢCéĘD°:"¤…@ł…čČÂL—Żř f >ą5{Yk3ĽőÔenÚVeąÉl(“)ĐJ6ĄDLfś&ĺş÷÷}™ßU‘žÜßaނ •(uFzIĎ #‡r°z` %"vHƒŹd)óĆŮgŸŠ˛>Ü}÷Ęp@!$˛đt/D‹ˆŠjëÖ­¨Ť­CJr⍣Q íĆ= ŮËÜmăLfF:zĺőPŮVślŮâ`…F˘~rDJqßu×˝íĚeŽř⋯đŘcO"P$É%—ť4—9#=Gݏâj‡ëŻsă˙v(uF‚ˆ—^zĽ*YâĚ}÷=¨5ŔěőďAôş˜ď$ Ř4h ÇRŤÎŘߊE“˛˙:4 7‘…Ýúş.ű.ű~zF…z/BHl#żí{řă?T–FŇ5ČĎߥĹ"fĄŠÉîÓýt,Ň řč÷ĺ~›Ë\!ĺ4e_î !¤Ť.s™<cǎř엿pőÂf|3ćdTf@͚M°ok1—ľl¸sh™Ń24ť:sy+Öâ­ę3TföÇ4í3Ég“Ď(ŸU>łą ËŰyňežŻËc‘PÄ2:ę}$ůłšĚHYY9ţóŸŰÜśqşC*ő¸3—‰n˝ě˛Ť\šËœŁŮ•W^‹mŰś{\ݤ¤ˇŢz‡[MüňËŻŠ÷ťăŽťĚeÎÇőß˙ŢŽŒĽÁŔx!¤ŤCë+‰yÄIołYQú××ČMcPŤąLꍢM-†3wčĽ4ő fR&3YŰOŚż‘7febS”ŔlĄAĘ)}ó͡mÓҳ觟~n—uâçŸ {yLA2~‘ĚeŠŠŠ^ˇëÖ­>ř@B‰\ †y2H‰ůY‚wfM4¤¤$´é×ň ś˛—9K6ł>˝{jçŁTőŹ”ţRŞAp•ÉĚy?Ţ îjA‚d<ň˜Ăź#†ŤŢ›R˛   @%g͚ݶü˙űL[~śĘ.'%DŰH‰—^zŐa?R\/‹Šg<űřă˙Šě`:˘ƒ˙őŻŤqŔű)“˙źy đŕƒŤ@Ľ B)çpć™˙hŰFöa,‰.×ńďWşIöˇhŃbՓľşş%@*ËgŸ}A °^לd&“ŹmF;ě}ô‘Şćşuëń /aóć-m˟ţErČA7?­ŹSĹrüŠÔ͂[3ś•7š]OĘlÍXU‡ŠcR@‰l‚é<'&ÝŚŚ&üđĂˆUŇÓÓ´{V Ňî[=ztCZZŞĘڕœœ¤šOČýŽśś^5žI†XihÚ°a6lÜŹéŻ Ä"?ýô<đ ے2Wž˛˜EjVXɞkHYLÉ\f aő"Ů×KÚ>ď?1‡ĺ2 !]šP™Ëœł–I¤ŇŇRŹXłďä'aÓȓĐT݌†Ő›Zî“ZQłű7…—ƒŠ€ĺ-ŮKňŃXÜ kϑx7m~˙c&ţ/Ż#‡FNNŽ*é)›Y Z˘+ĹfBËč¨÷‘NĎ=÷bť}K!Éz&F+‰ŠH†z™={Žz•XŇčŃŁÔß@Ż^yjŢűď¨â1:K:ëŹ3°×^“U9L9v9V˝#˘źJöű[nšÉíű͝űwë~ÎTńŽ5kÖŕ˝÷>l3ĆÉëĹ_ŽĆ%yĹA¨:GJ‡Ä-[śśíGbY’ĺ줓N@ 0ŢCéęĐ`F˘_ł—‰S]zů֖ě 7 )§%™)Î`2kj”ovŃřŰܚÜĚܚĹĚԒ9Qkg+ýű'؎žTĚ<+>ýGJ\JŠKŠ‘Ž#e2 f3füě0—םî:ĄFJœŃĹ2!„čĆßŔĽˇ^žbä‘`EB‚Ee-sgČjoÚňŽŻĆ:#{™çmâ”ąŹ˘˘J•›– ˜š_tRŹ2żýö;,Y˛Ôă:—\r‘_ŮX[z‡^‚M›6căƍ*kÜ3Ď<Ńf 2d° rČTŐ@-H€}áÂĹʐ%×CW=V%X¨ďGg͚ľÓź3çÄŔ•‘‘Žz´2D•Ć;vLŰryď×_Óa7Üđ/'ĺƍŰçŸQ[g1Š]rÉ?ľ}g¨i Œ_{íUÚgޤ†ĄCwqŚĘ疿=)Ű #çH˛âZ˘ÂWţŢԀ@Ů+GŒn ~0ˇĹŐMן§˝Ž„Ä.rŸ“ßő–˛0#ŁÔÁ¤‰ă´ßű12x zţ†ŠŠJe6[˛t9ţš3_;W • -ڙ3gŽ2ÔIŠńÎŇűěŤţôěů:ĄÄ$n4ŠťcéŇeřä“Oć]vŮĹ9rbĺŰý+#ĺמw4Ň`F钄Ă\&f*1—­^ż /ĺ§Łp“Ń´ľ[gś YĄJßžő5pČhuËUźĹŽZíYݜžƒ_´Ďž|Î_¸(o+†imb2“N[jă0]ÝdŞXFG˝T˙1âŞÓ€´s]yĺe¸öÚŕ‡z°Ks™ŕ)¤ăŤ)++óşžóűIgGiG4V8:ꨊëdggc=vÇŻżţćó{yƒńBHW‡3ő¸Ë^ÖŇˡA`Ë×ĚCşvӖřĽôGiË`ŚM4ˇĚâäŰŕŹÂ›wŽ›Zחň˜R#ۢÍOфKéśőČî7\útƒY ŸƒĆ3G¤LŚŃ`&Bń÷ßgáŘcVÓţůWťzęîDm°8qƒ­ÓN!$˛ń%pi4—mŰś őő HNЇYÜčmřkÚrM´f/3ž2OMMÉlR%­äœőéÓ'd&3˛1á‹áKzŠŞň¤˙=Oew1â\fÜWŚLŮWebӑŔçi§‰AƒbÔ¨‘>|˜ę‘*ÁNg3šŕœMśwîuŞŁJuÖŽ]ë6(+ĽiĺsoÝşMe” *ý5§ÝzÁvb ˝2͸î°,,ŢڈˇgWľ}WÎŰ;9Š&•ÁäÍYŐ>í‹ß B˘OżGú2=ť¤˜Œ˘ šďtŕ~8ć˜Ăąç¤ńz—ĚYcǎRĂE˙<[ť?lÄW_OÇ_NÓtHpJ͢E‹ f‘ŘŠQ˛ƒŢpĂÍŮPĽÁSĘyBî×bJ“řŽÜˇe{1 Š–8ŕ€ýUŮkWZBî÷˘=tşwďŚi“ŻTđíˇßU†~ŃII‰0`€ÚĎ 'çW†XOTԅ>{YGě›B"•P˜Ëœ§ĺŢ$‹žš˝ő:ŚÁI¨_šą%ˆ!ć2çýĹę´öY›j*P˝˛Mƒ÷Äí5ő8ő÷/qĚä]UY˝ó•Ż%3ť˛É,\ąŒp˝dp7rŔűšź6“'ďŠ \ÎŮÎ˙?ÎŔÇ˙Oőv 'ŇSUJ`M›6Ýaţ† ŐđÍ7ߪi ô|đ¸č˘ ѡoŸśő¤TŞ3ždvĘË+Śkkkńůç_ŞĆiŁfělň2ĚŘXbsť<5фŹö–¤:°źţG•ĘV2n@˘ >žú{%Ş|k`ÎË4ƒŮcl•¸† 1тd+;ďÜ3´g÷ŠHręŹŐY 2×\} ޏüŸÚ=g^yőí¨Éj& r‚s;§N=|ÓM˙q¸żK#ŕ]wÝîń=żţzîż˙ĄvăĽ#ÂŹYłŐ ĺĄxŕ^UjÉrnd?—^z%/^Ň6_ kRš\†Ÿ~š'žxÔĽaÍ6—Ú°Ľ4đk!Ů+úf[°şŔęz˙š~÷čŸĂ°=!„ţšËd\b÷ŐŐ5xęוX°ÇаŐ aĂ:•ľlgůW9Ŕbt:Ž%^S§ƒřœ<|:ňTlřős\ľ˙uŻĚËËsۖĹ€; e,#Üď#şHâ%FúőëçrIœ!YŇü‰Š¸Ęodǎ||řáÇřňËŻĘSJ$ý˝1ŢCéęđI•D,Á`e[Ćv{3śnێmő Č9đN”ŚÇ!ޢ‰ł˛ů(Űşyš6$YkŃ`/ÖÖŻBj†&sŹMV4i I™ˆKHFi­6K6’†î‚ęřžXœŸ„„>cąą¨ Śz›&Ôj`є‚Őł–¸?>Î|C2’˝ôŇŤmÓsćĚU= ä<Ϟý—ĂşRO=\ě˛Ë,\¸¨mzáÂĹJ ‹ŠĐRzjÁ‚EóöÚkOŻŰB Ą2—ÉëöíŰU沔ä„VsY¨L[†š›Őü[/ÜŮˌHĂ^÷n9(,*Qç0T™Ě˘Ac=ţřĂ*X(‘Ď}ÓMˇ`Ì_\.ONNĆŘąŁU/ز˛r‹œci4Ţwß}đÁŠF[Wß hŠ í—_fâŮgŸl+ŻŒÎ7fF‘˛\pąŰ ¨ôƖ,j3gţŽŽfź8ôp\[hĹťłŤqćä4ě3$ )ńqŐťĽÁ{ú˛ZŹŘa…ŻLć BHxĐMEŇó?Ňéׯ2–ÜQ*F‰Čqy䥘:őüö۟xńĺ7ľűŘrD2bČtła¤ńňËŻ:ÄK„Űnűę¨çŽ÷Ţű=ö$ź!“—\r^}őE %NôčŁO8˜Ëœ‘L/źđ2ŽşęrJƒľOýT:k`ZF*"üëĐ, ęfQűY´ľ}ŠMŮ÷Ó3*pĎq9HŒgěű„*FŁË}Sâ4wýś÷<ľŤˇŁšą~gÖ˛śŐwn×bĹrŸ,6–CkYl5IX¨›ť~űˇMé§ÎYßž}Cf2‹ŐöŻPĹ2:â}\éFOm—ÁTgrFtáUWýŤÁMż‹Ţ˝{ĄWŻ^*Ó~4Âx!¤ŤCƒ‰jœŒHƒ–žŞjj1P rćf¤!ľ[OŹÜ–Œ~#€y$Pž’ŒęĘX&ÚQZ¸ýúôD“­Qe!ŠŹŽAN÷ްÚăPSoCł)…%eŞA´ďŕxT–— ą¨UšHÚś=ééJź‰s?PńLăY{ŚN=ÂÁ`VŁ]O JŞ[czáđĂĂSS˜ůŒƒš,== §vŠśżIŞ\§”A(//Ç!‡LEGsđˆdüźŞĽ5î{ĽĘrA‚Ž{ôo n҂”Ÿ/¨ŻHy…ľ÷"„D?îâzš˜ŞŞJD*bčý׾—âčŁY Âp#÷ĹýöŰ[ żüú|čIlŰś‘HUUKÖcé Hɚ/ ˆŻžú†ĂźSN9I;ŻSÜnłző<ýôs󤜦l'Ś4)ńýć›oŤWAĘÝv۝x˙ýˇÝ~NɌńŐWߨű˙1ÇĽĚő˘G~řÁ1ţ"q‹.şŔkÖ wü´˛N•5 ”ă÷HUć˛[3ś•ť/Ď$úa†ŚŚŽaçDBHlJs™˜ňĹ(UŞĹîYnEţŘCPˇ|SK7“găť7;OL-×ÎEłľŐÚšY7öPÜôןřď¨xeÖ“™”WŰĐd֎PĹ2:â}ŇŇŇT[ŚŃŘ&ecÝQ\\ŒP zőöŰďr0—I•"‰ŐHYMÉn/É~úéç¨5˜1ŢCéęĐ`F˘ _ű˛žĚdXśr%zćőDi‰¤fôëÝIh€ÍjƒÝŚ5bđŕ]0pDžÖŔYŚ5pV`ěč1ČhścăŚM¨ŻŻĂ€~ýPßPd“ IšŔ^ˇz™Ö`•>šŕ–Ě EÚvC[ËdƒT‘đ‹fúőëŤJ!HcĽŽd.ËÍÍuXoäČJ¨†‹˝÷ŢK tćjB{§—žŻăĆíĄJyşB‚ŚŸ~ú™Ăđm9îýŚů•Mđ_÷O‰^Œ÷3É*I ś Ţ{ç%Ü{ϢÚ\Ś“¤Ýť.˝ä<|ňŃ˜8aDĆXS$iœűî{ůZCžŽÜçď˝÷.ę$ŮŻż:Ä/ťě’v÷ăôôte3ňűďłŕ‰óÎ;ťMkčH#Şóž˝é!OTö=LIˆĂůűd(m=sfŽŽ÷şÍŽŠČúÎBHGâO@Ý\śiË6ÜZ8•}F fÍZ4kϡͪe¨Ľă›€ÓÎŻ]nšvSŠ3Šs%çL͜C9—z‰vŻEŹŠX†+œ;’„ę}öŮgo‡őg͚­2ź‘ŘĘsĎ˝€Pal'ŇŇRۙËäoć›ožE4Ăx!¤+Ă_'ľx+)óŠKKT)Ĺ!ż`rsťĄąľtć°aÔ9LÄF=vßM• *,*°ĄCU€TŇńKđk¨6mk˛aÁ‚ČĚʆÉlRMŞŁFŐÖ/€9ޢ˛ŸIMD´X&3tHéĽÇ{˛­Wěňĺ+TŻ 9_˛ŽżüďŸáĎ?˙ň¸Î^{íŮÖCöďW™2ţřăĎśĺb&“ňLO=őŹ2 JĂŹô°uő`%ۏ?„B"w:C~÷KJJUIĚxíţďkůÉ`M[žjƒHÎ^ć)明œŹVunĽwŁž–Ů`[Ź_bŔÓ #ó$+ǰaC‘—×Óaý×_SeÝu׹J›ţňËL<ţř“^ß'''§ÝźťďžO™ĹDŸyć?”ΕcŮşu[Ű:b8“ĆáÝ5=-ĺŔ%óěSO=ă°9˝ˇ­č%iđý¤#ŮED{zčÁJżKéË÷Ţű@e,֯߀ß~ű'tBŰ>D{KŚß˙C¸ńĆë0`@•ďłĎžŔkŻ˝ OH -g^|ńepŔţ˜8qźËsâ™ÉžőéZ[č{G•ś}§°ż!¤s8íÔăqýuWj1„šÇŹYł6nÖîZńŚ-ZŹĽuľu¨Ó´—4Ş ŠŠŠĘ˜.:Ą[n.ě§ ýŐ †7iŔ –úáĽÇK/żŠ oEœą/Rř⋯ڕŸźęŞËľřŮ.ˇŰ˛eŤŇÓF^xá%—ëΚő§Ă´Ž Ü1hĐ vóÔߊŚŠŠv–}’żˇpŃ+ӌëËÂ⭍x{vU›ţ=oďtUćHĘkž9ŤÚ§}12H‰eBŐPîÓbˆÚś=w” ECˇž¨[żq6}úJœö /çŹyŕPÜQlÂ=ćőjţ€Ôó˝ŕ-ÓU˛Ě‡"–!H<ÇHŠÖśřŇKݍěqGqXČŢçČ#ŔG}Ň6-×âškŽ×öýŁýůç_`Μż*zötŒOIE G}gu†ŞJ´aĂFőYç͛h‡ńBHW…*‹D ţô„`•ôđ\´d´€gqQ!úôîSœ ˝´WłŮ„ĽK—bč.C1bÄUţró–B ÔDł”şŞŞŞT g˝{ĺŠ÷ݰqƒ Ýu7mß X˛x˛łs´—­ČČČÔ]Š´Ńźž=Ú fĆăfĂhpHޔ–ÔÍ`rRť˝Gđo˝_ Pë3švRśáşënR鄍Čń–ÎtиéŚëA!¤sŚ4ŚŽ. Ôň¤DĎ2:źFŻčĚ^f7f2ÓÉĘJדKŐ9îۡo[ ÓHW-•)ĺ¡oßŃ6-ĺ n˝ősĚQ¸ýö˙ŞLŽÓŚMo[žcG>.˝Ôą<•(űôéíPŞŔ™Aƒ˘wď^ď5sćďjŽ=öh•QäşëŽÁůç_ÔÖŤYtłd1q‡h㍯žÂaŢYgŠ1çŞĚ´:Ó§ŻwÜ|ó ęýuŽ8âpźőÖ;mӒĽMzî‘^żŇůÄ]ŠL1çÉ:ĐՑsî¸ăV}ô‘†Ń˝0wcxĘڍîc!$ź[ţ)’HMMÁˇß„Ă;Á šjÁÂ%Úső|üő×<,Yş\‹áŘźn§Ít~šs\tÈCąç¤ń˜4q&LŘCĹwAöué%çcܸÝđď[îŇĆJ‰tV™*iĐ|ä‘ÇćíłĎ^8ýôS˝n+Őœ1–Ôö„1Ó­+ܕ eŮŞź 36–¸˙[MM4!KkÜX,š”}ý*Lš„q•ţ}ő÷JT7řV)/Ó B‰Eü5—šë(Ńˇlق˘âܖßőy}Qża5â,ń­Ą†Ž“Y+XâĚíܭтCľsYŠT A OzŚsoí\]%>ŠXƨQ#Ű­óŇKŻŞ×ÝvŰ˝´vÉPźĎ˜1Ł•áL:)ęHšpý˝t¤ó˘”>7vŕ ”ž}ű¨–t<Ôy˙ýŐ`¤˙~JSF3Œ÷Bş*´Ŕ’ˆ#Řň˜¨”Ŕd&”$d3`ŕ­1­ŻPŠGŠ ݰ~ÖČTĂG(Qť}űv˜5‘œž–{“]Ó$˜(Ć4[Ň`Ö˝[7ĺź_ą|9Š 0bä(ľŻ”ädÔ×ŐĄ¤¸k×­SlÎél˝/ńŠSpť,Üĺ1HŸ~_|a[voë_s͕xđÁű\6”Bé\üé+‘­Ę\gň9{™q<řěeîrњ˝L_&AËěŹ,Ľăä\ëçޟkŤœwŢ9.uǒ%KŐŤ”=đÖ¨+/1ĺ{BţÖţýďÝ6ĊąM`čSO=†ěě,xŁGîj] 0:ż×c=Ź2źzC˛ŒÝyçmŞ÷­‘ţó|ŐëÖ’]řá‡hWŽÁů8.˝ôb—Ëôó “'"; =OeŸ{N!$6ˆ†{ŮŕÁđŃŻe.[ľz-yôzř‰8˙‚+ńü Żcţ‚Ĺ>™Ëź!ą eËVâľ×ßĹ%—]‡ƒ9wßó.\đůłÚÇžÝw‹H§Łţ†$f&%˜ŒYŔĨ-†w_ć8CUÂ:Ćđ|ď• ďÎŽV–†}†$áň2púÄ4ľlú˛ZŹŘá{‹ xŸ'„O÷mŰśŠdˇ­NDmŸ]P')­ ¨­ $ż- Îav.ĺœĘš•sČľ‰eBË\ísӌͰhAH9÷fs‹qLŽĹ’ŋѣgśoۓְ7¨o/ě6vŒjT“/wŮGÜg%×ů„BHgąeËVeŽJNNi3RKŔA^őÁ­kÜ0} ^ŠN#šÍֈ¤D)ľäŮ´ĺΨĺÉŔĺ›Np÷žlúăö¤ĎvâŢ`f/.)SYâÄÔ$ ÎďĺË´ˇů„t$Ť Źxif%Ęjƒ‹:JOV 6ëXŮ7BHÇë_tˆ§qŃ Âţűď‡Î`Ÿ}öÄcÜ­bţ çć›i?ŕŐ×ŢŃÍ6#čŮŁ;Î;÷ œxŇ1šŚó/+€|ž;ďz_|ů-:ƒ_[끊6ęŹXÓ_ÍÁW\ăđ7zŐU—ŤFB_‘J‡2ŐÁ´ţöŰŻcäČđ‡uëÖă´ÓÎt˜'Ćw)őíĚ1ǜĐö=nźń:œzęɔͼ6<4˝uVĎ&†‡'+“YŁ­w}U†üĘ&řBr|n:" ýrŘ/œâžXĎ8Ď3ŽKűtşzňűů˜7ů ÔŽ\e,ăłhż-î“:b0&Ě~W6NuČ2šÉ˝iĆg˘#<ÖĄDć}÷ݍĂ;Ä;Œ÷8žč_ۢ„„ř˝ľůą¨l}mrš[_톡ŮđÚ.Š›iOŻÎăÎxuëóI•Ä úƒ‘4‹ŰżŃք!C† 55M•Ĺٲy“&„ťŠäíÇIzHOÚ+Wa׹cąűnťĄ¸¸H¤ÔN=°~ĂFľŻÁƒÂŚ=pmXżiéÚL‰ĘJľű¸ńŞdfRr’rýo݇1ŁF*óšŻÁWf+#„BÂG ˆœƒ—Ň&Ľ1˝lV˛Ŕöçv<š˛—Ç34˝V˘iŤ˛˛2ĽÉô÷D3Qk‘H@„÷Ÿ˜ƒŮë°|{#*ëíŘXbC˝—Ćé$­‘yP7 ғLÝ+A•I`OVB˘_ôI &”qřA¸ďŢŰ´@Ż ,XŒűî\•ÄŒ$ ´Fłzďź÷1nžńjěˇßŢ>o+ÁîťîüˇĘöđÖۢ3ńEۄZ˙ˆ&ťíś;ţ.ĽŃŃs™ •öÝwo̘ńKŰźçž{O>ů˜Ę†fäîťďÜ9sU†xÄd)™>:›ţ9eţ’ĆDOH&ł-e6Ô56űl.3îŸBbPd—ٞdٞ6k>ţžxęÖoÓ˘Z›k\čËÔuYD?4ŰQŤŰ9Ú9ž6ë=˝ďU]FîăBWĎ2MHůŒ×k-%œÎ?˙ÜśéłÎ:żü2Suúţüó/\pÁĹ8唓Té$‰Ç}óÍ4URIŽ 2>~ü8D ™ÉžÖZá/™)4IBb`JcęHĆ51ÁlŢşo址ć˘J4××&sKPAžnI\îÇň8ŘľskŐÎąœë]ˇţŠ2ĘH†;WĽťjŠĚHG˛Ď^{í m™cĽ\ć9çü8`t떫´ť”Ý|őŐל“bF#žĂx!¤+Á_.ńř”Ą$ŞÂâb•aLzUôčŮS 'éÝ"ŻůčݧƎ­‚‚K–-˜ѣľaŞ´Fä’ŇR Đ_e=Űž}›2Œ 2X=Ł,^˛™YYč™×K™Ůúöë§-ŻW뼤¤"ÇŐ#6--UK˘Ąä‚ż˝:(´ !„ŕśaS4EUUľzMJô޸Ú9ŮËÖrÖçiýpf/kY֌tMO—Ą˛˛Re†uÎjáÔU$‘ %÷Ÿƒ+ë0oSvT4ŠoY^Śă$â ÉH´đď–ŇńŒ3R•ĹôÇ\ö÷ź…¸ůć;QXTŒ`FËŢ˝ó0`@?dee"EÓc$ŽS[[Ż´ÁŚÍ[ąuë6X­6ĘĎżüŽ9sçăöŰnRŮÚ|AôÄ­˙˝^;†*üřÓŻč üöŰďřý÷YíćżóÎ{žlŽ |FƒŮŘącpÉ%˙ÄsĎ˝Ř6oɒĽjpDZǍI“&"RÝ;s76 H Bé*x3—§‹ľ6Š^sߚD˜†%Ł~ăfę[š8›ŰţçĹhŰ—ű˝<Îd†ľd’Ç˝Ťń|oŤş=ľö6ľşSă0Ď„ ă1bÄp,^źDMK›ĺË/żŚw¤ŚŚŕ†ţŒ÷BbĚHL —ÇӗdŰQP„ěn9J얖–hÂI*HŮP_!ťě"͚*cY˙ţý1xĐ ő`"YÉrss‘™‘Žşşze6ËĚĚBzşۡďPďłŰnťjďaĹüůóŃŤw/•--9%C‡ G~ţô虇-ۡcŕ€ă™Ń`ćíř)ś !„ŽÁ×ěeŇx)Ú"Ţ×zŸŽÜěeÖZíXË ŃXSkM%lő5h˛5 šŠĽOœŚƒĚń‰°$Ľ!!5‰i9HÎÎCBZ&ÜŃŮˌăb(“Ěeuő- ÉYYY­ë0‹‰$ 8uLŠ!$čßż/žyęAeîöš÷ž˙ţ˙đČcĎŔfó˝  Ž”œœ8aLš8ă'ěŽĹSúŤLŚž`łŮT6˛ů +ŁŘœ9ó´†ĎRřƒdK˝ńŚŰńŰoâÖ[Ż×âGŢă8_şďž[QzI™zďXG:\„1œeffâŃGŸhËŞá Ńu§Ÿ~*ŽšćJD“'⋅5(Ťľ#”d§˜Ty$B‰%íügÜŽ˘˘B% xńűżPšç9¨_ąZnČŞg'-)¸Üż—ű˝\;Çő›VĂ´Ű>Úš—ą’’*Ô=\4ĂŘMÇ šő‰'Q™hýő7Żë<ˇÝöŒ9$xď!„Ä*4˜‘ˆÁß çő%°(ÁL)wšuŰ6$§$Ą¨¨Rb5+3 IÉIXťv úô鋨ůRú*;; Mvť\b k˛7ĄŠIzÁ6ĂŚ˝Ś§§Ă¤-[ťv­Ş3/)bŤľ ä–M›Ű­;ślŃ^sťiA1+ĘĘ+Őąč2ŠeB!$úŇ RSô@BRź×ő;ŁLĽľş ŐPS¸ M ľđDłŚměÖFXkŤPWşŁmž%1i˝!Ł÷.HJρżF¸Pg/3ŽËzÉI‰¨QŮJę”sUЁB!ĄA2<˙ě#ČÉÉöi}éXwýˇcćĚYđ‡ÄÄLŢs"Ž9ćptŕ~~eJ3bąX´˜O5œxÂŃjŢňĺŤđŐ×ßá›iߍ˛?žňŐ×ÓąqÓf<űôC*sš7ĈöÄă÷áÔÓÎG~A!ˆ˙œtŇ ˜2eL›6]•ŔĚĎĎGii™wKF^^ž*‰y NJĆÎHCĘ ]´_ýžśyĚ,&¨}Ęž !¤+ŕkiLik‘ĚĄŤ×mŔĎĂπmSTŒ˘ÝęŢڗ¸<°ĺq¨ß\€Úš?xÝ U%H:ŠkˇvŒ8¤RÓŁ>„ĽK—)Í%ŮĚvěŘĄ ›˘š˛łł1fĚhěťď>8䐃‚Ş@!¤kŕë=ÎÇeq>źĆš™Ö“áUĚ­óĚNƒ,ː×ĆFŤŃŹ•6ŇŔ)Ż"¤ëęjUÖ,Šuk¸{€p—UÄyźŚŚF™Ë–ŽX‰eŤÖ¨^ŻÝťwW6Mź¨ĘÉÍAnN,f *Ť¤ÜR 6mނĄť QÂIĚfZ`pÄđaĘp–Ÿ_€FŤUŰ&V[SkV˛Ź^˝Ý{ô@Šś}iYŠ´,WC™+--ĹIÇ…Ţ˝ňTóřřx—Iœ…ľ;ĄMN!$RزeŤvżŒS÷O $É=J ?ňŞŽč ]㋮pž6ގÜŰ+4ÚŹÝË[䊧ěeyĘ^ć.c™sö2ç÷­+َŠMKŃP\ *g’˛z wđnHíŢĎçăöE§y2˜y2žéĽ2Ĺ\VWߨ:č˝dƒşŠBˆŻt´žqĽIÜéW÷Ň;ňŐëţűď‡póŔ}ˇáČ#ői]ič˝ňŞ›°`ářЎÎ<ăüăôľĆŽt„‰ß|úé×xý÷PPXäóvýúőÁ Ď=Ş^}ańâe8÷üËĘŢćżţ:S˝JšI!Đ8ľPhY]`ĹK3+ƒÎd&™ËÄ\6ʧ÷Ž-„"DK|ĆSR_ă3………*›ć%?lAéȃѰqĽÖ:ČÜIs“ ÉG {ĹOxáĐ~HOOC­}L'řŒˇe„Bb_ôŒ?÷•H'!!~oíE+[_›œ†ćÖWťah6ź:p3íéŐyÜŻĄhE&/YÍôuęęęÔĂĐęľëaŠ3ióí().F}m-JJJTiĚܜ\e“‡§úşző#5dđ`UaÉŇeĘÍ?rÄaĹĘU*pׯo_jÓ55Ő­%/ăĐŤwo$Ä'`áÂůŇÔŤ~ôzöĚĂŔA‘׍Ę**´2ť*ŤĚg#„BHÇ#÷p)—-şÂbńţŔŇQŮËŹŐ%Ř1o: —ürs™P_^ˆmóŔ–Ů_ĄžÂX^Ęťš,ŮËôń¤¤¤śŒrrm!„zN;őxŸÍebŘ:÷źË}6—IšÍkŽžß}ű1.žčœ°›ËŃgœq2Ś}óţűŸë|ĘJ&lٲ ç_p%ÖŽŰŕÓúťî:W\ţOŽ‰Âî?1çI1"/IńŢd‘˝â1iP"ÎÓś•}Đ\FéJřj.“6‰Ďü8{>ĘÇŒ†-kľVMskĐ šĺŐÝŔĺ![§ózíÜË5k!×DŽˇëçjšB!Ń f$&ĆFé-ZU]Ňňr­˛Ĺ &A̜Ü\ôîÝۡmCmM ¤‘TÖďۡěÍv,\´iii˜8aźĘT˛xéôěŃcnjƦM›ąfÍ 4={öĖ͛ľ}×Âfľj˘:cÇîŚíŤ ĹEĹ¨ŠŽÂ6í=¤áuéňŞ!T7˜ůc”#„BHxđ5€)MĹ\&™ËZ Užł—š÷”̗ň“ú¸”ˇ,[;;ćĆ*Łń+<ÔUaóě/P¸âOí˝m>mc<ľžJ_ˇ‘󐚒¤Ž‰\›Ű0€I!„„‚ÇâúëŽôi]ÉéĽ×ůlŔÚż}đĹgoăüóÎT1šŽ&>ނSO9_ůžĘžćKšm1Đ]rÉż°}{>|áÜsţ}ö٤k"%-§ MÂĹűgŕ†ĂłpÓYČIur—e7kë\X.Ţ/űj۲,&!„¸Ś˘˘BľąźŮ¸ ŹUőhn2d őöŘĎĺĄ]Ž{[u˝şrMäÚB!¤ëAƒ‰ü5`9Ż/‚VćíŘQ€ÜÜn:t˜ \ŚŚĽĄ¸¨ůů;Tv2i ĚÍÍUuâ—/_Ž5š6cü¸ÝU č "33C ŹWĎVŽZ…úcذĄŞ$ژÍFœœ”W”Ăfľa˖ÍĘČśËĐ]´ e‚*żYŻíŤŚś^]­ĘhîsC!„sďÔËn[­VXĚŢĽr8ł— śÚJäĎ˙UŰVűîÜ rĘ6-ÇŚŮ_ŁąśRÍëŒěeú¸č-1˜‰Ń?ŘëK!„˜L&Üúßëľ{m‚×uëľŘËUWß쓹,-->r7ž~ęäĺő„żHÇŔü‚BŹ[ˇ˖­Ä’%ËŐűJÉPŃţ"YÓnşń*źôâăčŢ=×ëú…EĹřçĹ×hńĄ2ŻëĘ9źýś;Ĺ@G"ţ9Üs|NŸŠAÝ,*[Y˛6ȸ̓eýrXڍű¸{ţö§ó_CC#>ře.GL@cÁFíŚ'хÖ0ŒťúÇĺ!]Žű†üęZČ5‘kl'@Ćh!„čƒOł$bńG\Öס”ąZ˝n=Şľ†G4ې–š‚Šň 8&sĚ&3’R’ąiÓFôîŐcÇîŠJM/_ąÇ ÓÖ€Úş:”—•ŁGîˆGaaĄJ÷+Ľ/ĽIuɒ%ČĘÎĆŕACĐĐŘ J.X­Xˇ~úöí§GöÚeĺĺ(*)Enn‚ŒňšÚ2’Ć !„Ňq¸Ó˘)d‘Üž;;{YCEŠ–ý ťŐ >ękŤP_] k} šŹ h–ŒŤqöÖĹ&ÄiÚĆŸˆř¤T$Ľe"15ŢTHCe 6Íúý&ŽäěžîŢÚ帗ĂőkłŮ¤ť˝Y]#W ¸ÔU„Bˆ˙œzĘqZ|d”×őÄđuý ˇůTsÔ¨áx䥝´řHořĘÖ­Ű1gî|Ěý{VŻZ‹M›ˇ¨N{ްXĚ*+ý°ĄC0aüî˜8q† čÓűLœ°>ţđuÜ|Ë]˜=űoëJšĚ+ŽşŻżö ’=Ž›×ł‡*˙ůē/€DKŚŽIQ!„˙‘çűŞŞje`ú*iŹĹ‘qĘŞĹc˝\ށ\ š&'i×F9¤ŚŚ2C!„t!h0#Q!;vě@yy9Ǝ‹ä¤$Ź]˝6íA§Şşyyyč7`€¨ĚE^ď~¨*/AC]:>ÝG!„đĚýVĘZ××7¨W‹š%{ŮN:.{YceąWs™ÍڈíëWb͢?Q’żEMű‹lS˛c3ÖjűŘža•ÖXë>Sš˝É†­óD]YĂüŽČ^ŚŻ—¨i1ť}ç5 j2B!¤…]{Š*é É*öâKox]ďřăŽÄcŢăŐ\VTT‚G{‡q2xčIżĚeîXż~žzú%L=ňÜy×C*#š'Ěf3nťő•uĚ˙űô+eó†ĹbÁM7] B!„Ž<łWW×hí;ľ˜–0֒ \1n„qźŮą˜cWYŽő6;Šj­ŘRՈíľIkď2Ĺ!|ďŻLfęÚČ5’kĹ8 !„Ňu ÁŒD=b“R ó§Á˛ň[Ô6ĹĄŹ˘)))ČÉ醔ÔTätë†uëÖ ´´=zöTYĘěÍv%|‹KŠU†łÁƒĄŞşëÖŻGvv6 =‹´Ą™™™Ú:‰Ęd&i×këHŮq& ÎlŇhm(ŃöłqăX’ÓaknBÎşŸPžn2°‰É̈'Ü+(Đ !„Đáî>,™ą„¸¸–Ţ“‘˝ĚZ[…˘Ľ3=šËƊóąjÁl”n‰F}”lÓöů§śďˇë‰ÉlËßßĄąś˛m;Ă^ĆC˝LĆĺšHI,A2ďßŐ8!„BÜ3hPKĆ/o”—Wŕß˙žËŤš[ĚewŢqł2YšCâ(ožőŽ>öęU×^ĄD˛Ń‹!ě¸ÎT†3ŁfpĹĺ—]ˆK/9ĎŰnq×=`óć­^כ4q&OžB!„8âkö21-‰îřz–Öś˛Ë°•ěôň˜ŽŔý˛[Ž…ŤTŁnmŁëĘąŚ¤ÖŚfŒí–„ŠÓą{÷dÔXQRgCź).<ǧ] š&rmäÉľ’kŚă)FØ !„ýĐ`F"_MW2ˆÁLĘCĎů #7~‡!ëŢÁĐŢ)°™’ĐŸ‚’Ň ěŘžý T%0­ÖFUÖ2Gžęq1břpUFsÁÂEČÎÎÂčŃŁPPXˆĺËW`Ŕ€2d°ęůZ\\˘–'ÄÇ#;'[e5[´p!ĚćxôěÓŠ9yčŐ0jÖţŒďďAú˛ŸąăďĘüć- I!„đákK7­‹ÁĚSö2O™Ě‚É^&ڞ’Ŕnktó9ěŘ´f96ŽZ‚&—ŮƂ+)Đdľjű^ŒÍk—ť=gR.sű‚Ęlćxlđ‰`3žYĚż´ƒ—„Bˆk.źŕ˙TĆwo<öřs(,*ö¸Ž”Ĺ”l`žĘ­_ż§˙㕚,Ć2gÄhöĘŤoăřĎÂ…K<Ž{é%çăÔSŽ÷¸Žów>蓶řç…gƒBéŞű^SSŁĘcNŤíŽŚşĆÖLZpĘ­ĺř/–—ËńŠYľ6­ •XU\ŻâM§ŽČÄŤGôŌÓă×ӇŕÇ Ŕ/ÚřÇÇ@j|œ2™!ŒÇ'×FŽ‘\+šfÁŔŘ !„=Đ`F:…Łóú6›Mő€­Řžśk!I-җ~ŽôOĎ@ĆŻ×ÂşüôÉ6Ąwżž(О˘Ą9•ľMhl6cÄČą0i”ó,Bjz&N˛˛2,Yş =şwÇČ#°~ĂŹXľ ƒ‡ Fż~ýąvýf”×4">%Śälô:Fkŕ­ĂŚů?!w×č;ăfŒűňŠWÁ””.ýS•ĐÔ3˜1[!„™ˆiŠąŃŞz^šľĆÖ@˛’ůşžťmĘ7,„ľŚÜĺ2ťv\k–.@qž÷ĚÁR´cŤz/ť›L%őRÂső\Üf‡ńpd/ÓIH°´]+j&B!$0ňňzbę‡z]oÁ‚ĹřâËo=Ž3jÔp<ôН3—}őőtüă̋°zÍ:t4ۡçăź ŽÄožďq˝ß| ŚLŮËă:Ď[ˆéß̀7&NŘ{ě>„Bqťçy•L@kxŠí káfHg:ľ~ۀvC,.—Đ‘ô,ŽłaUQŠkm8¸*ž;Ź/~˙ÇźwTœ?6#sşN”ŽëÇwGAĽUŻnúăÓŢŃZ´Y]#šVrÍäÚůs­ !„X@H„ăI€ŠqK•uZő7L͈LIZ#le9˛jEˇ­ż"~͓0ç Ecü XzďŠÇÂÖX†ů‹ˇa—ѹ۸=PWoŚ›Uś˛éš(ŤiDII "/Xżn ,ÍVŒ’Śę-Xůׯč—ŃŒ>ő›a[˙'úĺoFc… ő@“];0í8ľ×Ę­kPže9vŮCő䈗4|ޏ8ß3řť>!„ŇŐđ×Čm—ű´LŰíMˆwh í˜ěeUe¨ŮžŽŮŽ5Ë ˛ŹDePőđél3ŠŇ"Ź^:ĂĆNtůže›–#˝×$gv÷9+Y°ŮËd\eZi-s.:011ąuu!„â+’˝L/;í1Ýß˙ŔőUJJ ź˙v$ľŢ]ńÚëďâ‰'_@g"ŸE2ą­[ˇˇßvŁK3œŮlĆý÷ފSN;;väťÝ×Ï<…)űNFZZ*݇ěŽA3çĎCQM!„t;{Z6‡4+™Żë•­™ëVmXľ ĺĽEZącƒŞe%Ř´f Ó~ĄvŹEËgŁ˙^Gg:Œ‡:{™>n2ˇ4ˆ fއF]E!„¸CŒQÇ;Őëz_ó=VŽZăqťďú7 čçvůC?wŢýţ’žž†]wÁƒ"/Ż;’““Ő|‰căĆÍXźd9JKËüŮ­ĘĆV_߀îżMƜÉČHÇ÷݊ó/źJŚ\Q\\Ўßů—^ržÇ÷ÚwßÉęÜlÚ´„BHW!˜lU’­źŽŽ^•[œ›¸ ŹĽĹ*ˆŇŒŘπĽG0ŠëšP^cEfŠÇÍÄ)Ă3qܐL¤ÄűJ4Ç!Ţ{sKyÍđ§Ž‘\+šfbŕĎȰűT‚ÝŒĺB!Ń f$j‘ŤŐ†şŠb4l^†tíŻ9>Đ´łŁh=+†łÖAéۆ&$VUĽU0ĺŻAš6/SŰžiť&‹ľńlmŢ{˙œsöi*ƒ›'Ž>ęp<űÜ+ „BČNÜe–—g|™ţ}ÁR4 8MůëŢ2“ŚEšěŘReEłö:Ş{2.Ű=§ĎÂn=’(UvŘě†r—a˘Š˘Mýw׎Ůç8r˙˝Ő5Ô;c1ŒËB!ąC×Ę-K"Š`ĘX úGéęš07Ô ÁX$AXŤN5ľÍÜéVÝ(&6Ë&m°JĹĽřă˜ÍÜ2Č´”ť´ĚeˆŰŠÉŰ eÚrŠ.Ąż§š5ƒ™T]¨\öŞ‹ˇiÇŰčśŹŻ°^=!„Ä´.Šńńžőżeö˛ĘÍËáú˜ąnŐt6ëW.ƒÍÚčrYéşE­c“˝LHLˆoëh@mD!„ř‡/ŮËž˙á•%ĚbŹşá†+Ý.˙ęëéxţ…×ŕ ™™¸ţş+đݡăćŻĆŘąŁźšËi¤6tŽşň"Lűć#ÜqűMčŮŁ;|AŽď•WßvťüňËÎ÷¸ŻŠŠJ|ôńđĆąÇÎĆTB!]_ŸŰ%SŠ<ëĎ.Đâ ‰hśKŻţf´wI§Łoš(‘e MXST‹âZŽœŽˇŽˆšg Ă˝Sze.ňkʍˇŮ[1„ńóÉ5JLT×LŽ\C_`,‡B‰^h0#…?ÂR/Yř÷*c˜TŸ“—覝¸íByňM-˜j¸óă YČÚÖEËşęМwÖş˝žĚÔúžŚÖ,fr<ńM ¨ŘŘŇplľZáîóRTB!ăď}Ô¸žč ™–םŠü;&{™ľş•ĹpĹĆ5+asҝÝ6Ž]ĺrY}y!ŞJ;,{™ רšŮŢvÍvŽřß!„ŇčÓ§öŘ}Ź×ő^ă=Ë/žčˇŹuë6âž{ƒ/uÔařę‹÷pöY§ľeťé pâ GăË/ŢĹ˙yŞOŚŽçž Ď[čr™莽ćRŰżőö°Ů}|uâ`œ5:ŰďR˜îŘQ­Ĺ’lv… ëçÓŢAŽ•\3švzRB!„Ä.,‘I˘ŽaŰŹkc}-*—˙K‹ÁLe,ĂÎć[% áh8SÓvmh5…)Ł™ ;3“5;:/›;gčű6˜ŃŒĆ2ă`i-“šíĎič;ń0ÔŐŐ!)) ž~Nöt%„BB‡ť —Ífk].uŻ%c†çűo(ł—Őlp9żžž…;Ügéh¤TfżAť 1Š}ăoŐöľČ6ąuĘ1{™§Lfd/sž†rí,–ö4ÔQ„BH{Ž:ňPŻ÷ÇUŤ×bŊUn—K)ËÓO;Áĺ21\Ýtó*öቄ„xü÷?×ăřăŽtš|íş řóĎ9Xştśnہňň uoĎČHGŸŢ˝0rä0ě5y"Fᰝ˜ÔnźáJLŢsúH$&&‚B:Ý`fo’×–ŕ^°ŮËq&ď9ÁažÜÓ§O˙ o˝ó‘GƒŰňĺŤđÏżŕЧ_ÂŔýŐńœpüQĘ´Śłß~{ăľWŸĆĽ—]‡’÷z§ °Ď<÷Š*ÍéŒdL˝ŕü3ńß[ďsť˝œ+oł}öö~Î !„Ž‚ťv!iď–l.‚y@7ŘŞJÔ´§ˆHs„/—xNyCŠ+ľ8ˇSgŕôŮřǨlěÂŰ6T 3łž~Á5Ąúüvkâ{ĒEżkËľÔ fëÓoŢ|Üwß݈F^}őu<˙üKjüťďžFnn.Hx™4iuO8ńÄăqË-7_ íşÁŹÉ.f%w&˛Ö9>f/sˇkmšÚgř"…;śÁšă“aË{f$¤f"IÓ;Ë|I€%1Č슞/˘ĽęŞËaŽÜ‚¸Ňľš¸Şóú^ۡbđБí>­žFű,•ˆOIď¸ěeŞˇ@‹90ŇőÓG}‚‡z´mZ4Â]wÝXż~N=őŒśiŃ?ýôHçă|}}áŇK/œ×6˝pá"\xá%j\ôĎa‡‚ŽőTçRYY‰sÎ9_e2›ÍJˇ2$ş‘lęcÇx6 ŠÉkÚˇ?¸ßGb"ţqú‰.—•ŕů^‡'ÄćĘ\&Śą;î|+W­?lܸ÷Ţ÷¨*WyëŻwŘďˆáCń⠏ăźóŻ@UUľŰ}|řágŞźć°ĄCÚ-;ręĄxú闕ÍżüúťĘŽ&YÝÜ!e2Ľ4éśm;@!„t5|Íj&m&ÂŇ ;š 1і¸LÚĄěÚĚíŐV4ÔŰĐ'' —Mě3Gĺ`ď>Šč(śWېdŽóÚŃ/TŸ_Je.­h™ŇŻĽ7:#Nc|~—Îí~ř.úöíăuťĺËWŕěłĎWăçŸ.ťěŽ…ÄRŸxâi|đÁGj\gżýöĹc= {ˆšěŇK[ڒß}÷}­mó3!„8V$¤Sń'Ť™ÔrˇYQň÷ Čďy‚Ĺ`$ӇśZ^Œ™Éš›v–Ď4˘ b&ý˝Whvz5Žď\.ÓdĚb&Ľ2㚱íŻo•𨯯qMvv6öŢ{˛_ślšę5ď+˙ńǟÔxNŽěg/„ƒ 6âÜs/ÄW\ŁĚR7nRˇäÁЏ¸łfÍĆĂ?†Ł>ü?ßŮśm{ŰřÖ­ž+HlSUU… öRĂsĎ˝B…ž+ΐíT'œŮË+ ŕŠĘ˛RU"ÓÍćD4ĺíې#ßgWdäöT ˜C‡î‚ńăÇaʔ}T慠SWƒŒË˙üK żüňkŰ=uΜš Ä•mĽĺšc1ąŔqČňĺŠ —¨Ňî8đŔ}U™JWˆÉË[iL)‹él.űđŁĎqÖ9—řm.3˛eË6\réuxîůWbKb{ôáťÝ˜ď[żń—_~Ëĺ2)Ă}䑇şÝÖjľá÷ßgĂ{NB!„¸FîÝ[—{ň&KŘký{^ŽZĘ`ÚąŽ´´a×îIxäĐţ˜sÖp<{hż5—U7ÚąŁşɖŽ3oŮkŤ´k×]]Cš–ţ–Kí ¤ńž{î!žđÚkoŕ˝÷>h3—I¤t29䐃Abc{Ľ´ý˛mŸ0ƒép‚—Ґ(AźŞëaݲR™A˛—éŮĂÚƒáŹÍLŚ›Ćě­U.ăv6ůĘaéŮĘôĚeĘlć”ĺLՌóô÷0šĚZećVóY˘v|ĺ+ć)­§{îęŮĘÜqĚ1GaćĚßŐř´ißâŇK/öi;É(&=‡…#Ž8<,NrqŹ_wÝM¨­­UÓ¤–†ú~ýúŞL"……E*óV~~jjjńŕƒ`͚ľĚ¨ä#_üO%Ô¤QâúëŻ!„t;{žůb"CťqOxÚĆZ]ár›˛Ňx$ł?šű쁄ä4eÎ8púôé­2“´źOűƒ“ěŠ2ddd gϖ”Ţň`,Ëb–.‰‡5ٰ}žvî Ţe%ĹČČĚn7żąŞÔçěeĆń@˛—Šńć–Ďhě5-ˆœ6m:N?ýTŸÖ—ŕě7ßL‰|Î8ăteŕôË'HGžoޏâRő[5qℰuŢ!ˤ‰ăźŽ3gÎ<Ë>ęp—óĺYüŁżđ¸íQG†ă;Ňaދ/˝‰gŸ{Ą@4Á /žĄ=—ăöŰnlÓC“'OŔů睉W^}ŰíśRrS˛ĄIÉMgŽ9ćźţĆ{nˇ3w>Ž>úpxbâ„=đég_ƒB!í‘6›­ [śmCIşv/VłfŮł\%ččĺęUÓĽő6”W6"%ł†gă˙FçŕÄaYč,śT5˘¨ÖŠDÉ`ććS„úü4ŐV Xťvr ö﯎Šő#ż˙ž§:ôüą Ä’ýNHMMÁK/=áÇŠéh0S’Ŕ óç/ŔŞUŤqć™˙ĐŽ}Ç… ‰th0#IťFDŇ('óĘ×/R™Á,ćVƒ™qĽ¸Öň—ŘY˛ŇAńÚ3’ľ•Ä´ŁÍ,ŚŻŁOŠ]ĘłYËÚJrśŽC7šiÓrŒ뗣|ëjÄ­LrÁěX6žIYKqţK€úŰożĂ%—\äÓg>ýűśńŁŽšŠP#ďFs™ˆ I…œ—×Óa=š63fü‚|ĽĽeřôÓĎ1`@%@ˆg$őóĎ? B 7ÎÚBŸŽ“^Mdg/sÎdf­sÝ+ˇŞÂu–0u„˝wG\÷aĘ(6věôďßOíË] Ż›œœŹJž <›7oÁŇĽËPnž Sjwط̇^†Ň—ckŹqßĂ8ÔŮË`ř ŽŽe$k$) ˝ző|öŮ>Ě~ţůW•MH9rVŹX ™Lœ8ž­D;!ŃΚ瞭;ěžűXŻë̙3ßí2éTľ×^].›6íŮËä˙ŚŽr˜'™ËBe.3"F.yżkŽŢYşčâ‹ÎĹwßĎP™Î\!ć´˙}úŽű×ĺí–í2dÖŽŰŕrŰŮy6ĺ {ěą+!„Xßę4Îăzfňu[ó—5MŘÜě ˇ\Ú|š´śU5ÂÖЄšI8wŻ^8kLĆőLA°4ڛ1s}%&ôKCV˘˙čˇVYQZ߄>ińn?H¨ĎOsCLYyÚ5\­ fĆö/cœ&’’.Hç0Iđä“Ocß}÷FˇnÝ@ˆ+ä9GÚúÉXŚ›Ë„Ž– ¤+!ľďşëvBÚĂ™$"đçDnćŞLÇď_)ăVźĽĹŔĽJSšvfsh ĆΒ•*é…ÝÉŚŻy3 N´śiçśâ8CšLěĚ`×j0“!6”ŽœŤ>‡¤ßuőٜǻ"ňŕqřᇩńíŰw`áÂE^ˇ‘ ,żţú›ße—!/Č5šëŽ{ŰĚe—\ňO%,œÍe‚ʃ>Żżţ ˛ł[z*=˙üK(++!„đŕo Óݲĺ“ü5‘šĆ›YÍZWírťşšŞöű2™a<ŚîĂTěđĂUf9ć`‚˛­ěCö%e4‡ ŰČó }ľŇ>Y[ăú˜­őú1–˝ĚS&3W:Élvm03ěßE88č ÔëşuëąxńŸśůüó–Œ0ŁFDnn!„@‹qăöŔ×_OS÷ÖŻ_Żžo˝zĺaĎ='ŠíäZxă?f)}şdÉR#>ނ=z`ˇÝvĹŠ§žÜö{˘;Žžú:u^DóŠÖń§×šŽľ/şčm¸ ,TÚOtżüôčŃ];ĺźĘńzŁ´´T=ĂüöŰزeŤúžwďŢ ăǏĂI'€ŃŁGůt,ňŹńÉ'ŸŞżŮM›6+Mú嗟śoŁűëŻßŐł†č°~ř ……E*ŕ-ٖe?úwL´ŹgѢĹęY\îGň ęŞc"!„t|íô%Ú@Ě[0YĐ,űÎiœÚe:jy\kťSI}*ŤZĘ`ž4*gÎÁqCCWsGľ×Í؊÷—–hAÝFô‘ƒŠƒ3›*Ű>Głńó¨†éPž?1™i×N]C´č˝HĘV押ź<őLúţűŞĚńR•ć ƒ@°üţűř⋯Ô3°<ł§¤$Ťö‘ÜÇwŒ6íhD,**ҞߎSçBÚĹnżýż.÷Ť?Ÿ O>ů(öŮgďvëH éŘcOTă'žxF‰%źôŇsęůóÝwßWí••UęłÉg4"qx‰űH)ÂmŰś+3—JĹŰâăăś‘Ď~Ţy˙lˇ/c…đÖ[ŻŠ¸/c.Ď=÷”ăŻ>ťÄׯߠ=ˇ$ŠXŰUW]Žƒîj=‰Čߨ<ďKۛtœ>|¸jŁ8ŕ€ý˝žg°íۓ8ÇüŠý}m×â *ś'1‰sČgđÄŻżÎTq,9Ÿee媍­oßžZ[áŐf銍-âŠzŹĆŐ÷I_&m´\pžŠ)ÉľZž|…Ęxço›”´eéŰËľ’ʜçóÎ;Gý=ýôs*Ž#ŸyÖŹ_AHgBƒéP‚I•,čĺ1ËÖ-D\m%ĚŠŇŒCZsłaźm?-f1™eҧu“ŕŘá˘U;ˆoCöł8§śbŁ™­­D&œ˛˜iƒč“˛EżĄśŹ@ďŤD4Ž2…j{FŒŽ2‘­]ť?ţřn¸á_…ÂôéߊW ڊ05ҸŁ#Ś1_aúÍ7Ó4Qܤt0ˆˆ{řáÇćIٚ/ßxă 87ßü̜ůťĂ:Ňř(ƒ˜đž}öÉvBYGŸxâi%ˆtäűŚo/ď˙ďߨ î#áj÷ß˙P[P@/y8A„–4(Šˆáoüˇj°3"ÂT^Ň÷Řcc÷ÝwC0H@ř˘‹.SŸ]GŒĄR˘LŢG„ŢO<pٍ4pß{ďý¨ŠŠu˜/‚2ˆŕ—ĆÜgžyÂĄĄřŘcVdrm~úég5펜ĄÖÓˇs&×\żÁ+ŻźśÍäŮŮČy“żCăçS„|ĺAâţűďöř`ŞóB˘ł2˜´7…ůn"3Ěő’˝L°7Ů|šß,Y}´ŕŃdőݲĎ8ď雦pW^RćË<š‹Ař?fŁY{sÚÖąš1’ľĚ:&{™`҄–˝ Q‡ƒ÷Üs˘ ŽHpčúëŻőL‘ěezŔUŒ×b\ńD¨î•rŞ˙úkŽ*.÷rŇŇFT’á ĎSĽĚ]č}Έ×Ä%AçůĎ>ű‚2M=ţřĂđFAAŽ˝ö‡{şPRRŞô‘ b´‘űCNNäöDíH¤#|żúę‡yrţeřß˙>ĂmˇýGq˜ËmEK‰6={ŽĂ|š§Š1]š7‹šM \ţ"&°ýëFľ?iźţůg‚*i"Çr÷Ý÷9üΈÁRů{CÝľ×^ĺֈ8oŢ|í™ĺćvš_ä2ČţĺsĘçőffźéŚ[T‡/HŔőňËŻVçSGtźĺoĺţűďQßĺnřˇƒV“żů\ň>>xoH‚ö$˛8°ż×u6nÚâqůř Ž;~͙;ßăvGyh›ÉK˜>ý'Ź\šáŚ@ťßźűŢ'*{š ß˝Ž?>öŹŰmć̙çŇ`6~Üîm:É7n†7äĊÁʰ°P‹u|Ťô€4ÔČs˛4€HŐŢ{OÖŽůTŁč*TVVjψ˙Ő~oç:̗űƙgţ¤ósç÷¨q餌ąÝFÓ÷wß}p‡GBş:z,šŘfAłŢĎů–ŰÁÓ˘Ř娜V6˘Šž ýť%á½Ľ f7ěŢ3ĄäĽ…EřďĚm(Ş´Ş7ÎꞌßÎŽĄŮ‰„• - RîÂ2aš–k'×P0śD*ë>ß~;]™¨|đaŐŠ3## ĎŚrϑřłyFÔŰGÄlőĐC÷;’ÄH$íaó—Dސv‰… ˇM‹ćpe03nżß~ű˘Ł>ƒ+¤ýäŃGŸpť\tľfŢyç=‡8ź ?GËóŞÄÂîšç΀;ЁOb[31"ĎÍ2ˆ!N:ťK,EŒW…|GnšĺVՆŁ#ç_:č‰ŃčÝwßTűňËŻRĆ2ů[vAÎ=÷,\qĹenß#Řv1‡ÝzëíÚ}$Ž'1MDëŠćuFž_Òř§ŤŐŞţÖecÝłĎ>…AƒśŰ>’âŠŢżĺ×^{Ď=÷˘Ă|c›”Ä]öÝwˇŰËwA&‘Ź|¤Í÷á‡ď!‘ f¤Óń§4‘Ü”äĆťýŻTiLÉ &3˝­WĎdŚ›ĚĐ:Ţş¸Ĺ;ք6#™>oçHË2•šLĘh:%|ŠÓuyłaÝćËââvf2L†yRĆÓ\[ŠÍ+‘Ń˝ş‘3JEj-úÎBDˆIQüűďłÜö‘@žž•A27Ó°äÉ&ˆË\Ý}ELq’ý#X¤ŒÖ›ožŁz~rČAHLLTŚÉ(!‚đŢ{P=DhH°L˛GIö1č}öŮçęŠř—Ě’Á.O=ŐdďÖ-Wő<2ŁbŒ“÷Ą&"R.¤wĘAĐnÓ§Ż ý‘#&6é]"Ył¤×…ż4xžđÂË*CH HűŇKŻP{‚4‹™PzČɺ?ţT[O3Y.Č5“ż#Ą¸ć:ˇÝv§z=űě˙Ó´wUĽ_‚Íî&ŸKzëTUUáâ‹/WóöÝwo•ÉOď€+¤qUzWIc†ěC˛™Čߌœ iř•09§Ÿ|ňKA(Ď ‰œ5ˆ]›V3ż˛—ÇýČ^ć#ćœ°tß“&‰šĚyw&3y/ů­™3§śĘŘK6ŔwŒĆ1´÷¸Ľë55é˝ôí˘C‰Ž:ő`‘ß$ů}’łŽű„nî‘{Ş4Ú:݌„ň^YQQ˙üç6•šHzďIÖ2éE*÷0šŸËo፯žĄô‡soĹ`îs:ĹĹŸđ‹ŰĚ:ňT”ßf Đč˝[yäqxBt˘ô8•űśü}L™˛öŰ} ęE(ű‘ó+˝(ĺ!&4ɀĺ­÷cgĚľ˝ů澀\ ~ůĺWźôŇŤjŢŐW_Ą˛ ƒuF¤ÁT­rîĎ:ë -ŕ7H]wŃŢ)ĹÔ&×Yz2;›“äÚKf1šw r?–Ţž˘Łĺ:HŚQ JË>$ŕ,_޲ů‘@äUW]ŤzňĘßÄ /<T†É(\ &Ÿţš*K°<§ÉqĘyM-Áq™wÍ5WśŰ^>§˜źä;"Et°čvŃÁ˘MD;Ęߛoĺó‹ąÔbؐ@şœéŽ_cůţ¸Bž0?ëŹ3UůdůîČ÷CĐěÝkŻÉšv|R›čůlň÷ bšžňL*—żúęł ő‰lů`öńd’’ż˙ýűš\6÷ďđÄQSu˜~띏ĐQźűŢÇ8÷œ´•öœ:ő<öřsnăPsćĚÇĺ.ÚhÄ<ŐŁ{7eZsĹĆMžĚú!¸W^yÝÁ€.č†gůí”ř…˜jĺ~ă*“şüöËďŞ ™˝e[tnşé?Ş‘Oí#÷Śęę|đA „âý9ˇ<.Í­×: “Ś×ëlvä—7¨ĂžýŇqƨ\œ9:šÉĄmN]WրŤ܌o–—"33ćř8$[LřýŹ›Ë„Í•ZŰYťcáGťvĺq-%Á=Ĺ."Ń2ééé¸ňĘËUg#é„#íQґ*¤Ă‘˜ďiŁ‘vyƔçxÉ&F"y.źâŠŤ5­ôšzNÖ3˜<çJűƒÄJäŮΈÄ,ôŽä‚ťěöşÁL:wH椎ü Fśl٢ 3ň<{Ę)'ŠĎ#ú{Ŕ€Ď$Ď>ű|›ĄF˛-ŸpÂńŞmAŽ]:KI{’˜ Äh$Çâ.c˝'¤mAbBr̂ÄÖ$F%Ňä\˙ôÓ OĂŃ9眏>x§-s˜ł^AĹ]… qł@vÉŞ&ŮÇ%î"ˇ‘çtůü˘ˇ%#–<ŰK,Kâj˘™% šÄ%žřĆoŤ6‰?8l;‡źŻh\‰%¤ŚŚŕŒ3NWU/d]˝šœ7‰íČ~ĺsyŕ‡ŰĚeÒżů{‘8tž•řˆÄę$†%ç٘#’⊞ ű‘ë&çđä“OÔ>g?í;SŽÚo%$ń_‰ťHŹ.3ł} îšç^hű.Čs§œŤ‘#GŞs/×[ŽUśwu é,h0#†?F2wۊˆ˛YP˝v!’´ŕĄóV[‰LƒĄKŸělVM‘z–3}^łcąžĺ &§mœ3—;Kh:Í7›vÍĚŚŮĚ´˜ŮśYÓŃ{÷”`#ÍdŽA""T„’d;č \Ž' 'z tIgj¤ÁF!"„:ÉŹ!ĺ5Żźrg¤[œDXJ6‚e˖ŤAR?đŔ˝ÁYi´>㌳Ôg!âl01( łdťx챇zétĐę˝.šär%Ţxŕ!Ő#Yţvu¤úá‡Uă"€ÄTgěÁ"Šzĺ8ޏâŸł18#bLzlzĘY#Ұ)e‡Äě$Ç)Ґ("%ĺ­qҰ/ď1~üęźKŔřÁтăÁ$.âX9ž~úq%̍ˆĐ•Œ!ŇťA̓"ćűˇ6ćČCŻ\g1şÉƒĽ48ť2¸I$yŃ÷gĚŠknD2”źýöë?LšBĚ_2Čێ/$:‘‡l‹E˙Űń7{™ŃD—ăΘĚ4Ů]Η,fq–$ ˜¤ĚbîpG0ÁS6ŽÁƒŤďĚrM{Ů*śkBŹŢp~œŽY›ďz7ĄĎ^&ëČ˝ßl‰<#7D×Čď¸g¤žtÜĚ$x'%˝7Ą'=Ę{ĽńÄŕň Ď8ŽÄŔ;hĐ@•šRŽĺă˙×Î`Ě}NG˛śęúKôs™q śˆą]Lސ@‘Ź$ %=^ËoKÉky/ řˆ–’ω™F‚šśRś]R:üóvO-$&ś;ďźÍĄ§°˜Ä¤×ĽęZklÔr?–ภÁWéÝlü;’R bô;ýô˙SĎwXôŐ`&$˜-:L‚‹’š,Ř^ĆrźŇ‘ä•W^p¸÷KđSôśhX ęIďßĂ?Tý&ëč=źĺ7I•Ď<ó¤C‡ ‚J Wž3’uMJÉË÷Yz¨ťBĚebĘš/żí-ÇőśCšRŃ8\pąęĄ-ß5ŃDRňÔxŽĺ=¤ńDz‹KgyŚ’ď‰]zöěîuOłŢ˝óTvSWŹZšĆívŇX4jÔÎż÷ľë6hżîËi†){9{ößÚoŃd5-&ą!ƒŞăp…§ c’ĚÁlĂďłX(•řĚ3ĎŠ†,Aâű쳗*Ű"ĎŠ’QQ~űĽƒ čů͔xŠdRŒeä9R7—ÉýAJVÉłlWŒăBH ČóŁ 5qIĘ`D3R@´”ÁŒCiM•ÁLJąŕÄQš8{LŽ–pđäÜÜ:sŞjŹœ—‚ő%őČH˛ŕĎłGbTˇŔceőM*ëZjźŠĂĎŁdś—k¨_ĎHG7ËKÜXâbş‘W1łřkΒítc–ŤĚŐŇÖuŕ¨Ž|ëN@’1Kg˙ý÷ӞŮ^Qăbs6˜é™Á÷ÚkOGcč,Ý %ˆţŇ5‰dÎ÷ˇó\°ŸÁˆÄ˛äůS˛Kš*§)1˝j<ËĘł¸ąCb ňÜü˙wŽúŹł‘¸żÚJâ=şšě˛Ë.VƌHÜD˛hI5‰šˆŃđЧZ Gó×ă&ţśQř‚”d}â‰G˛ZI|Pޤ“›”Xԑö ‰+JV6ћrüÎĆŁP´sˆÁOow—1ž ń 1EŠyOŽd4Ěä|éÉdżR Čřˇ$×wȐÁę|KYWůîc‹‘Wô‰ŸÉ52vHěŐ+O=HÇCy~’ż/i“rŽKüő­ˇŢUăےҲĆď‚|V1zĘľ’vbB"…ŔrJ"œÉź•Çlj˛ŁdÍŘ 6jŠ-e'Í­F.“!™ţę,˘ő fĘcÖ캌źCßC­úfűΜmŰÄ9šÚĚN7}şŃLގxáL­}śś­Ü§ŻŸßÍý”ЁH@Nł ÂVLLސĚY‚4ÔJÝîPŁ7ě ŇhÔôčŃ—_~Iťů"čEˆéüë_×´ëů+Alɔ"HŤóyą&‹rţxŕ—) ĽÁMzňzŁĽ™Ö=/żüR—é‘%ŕ|÷ÝwÜ3YÄ˙´i_(ăsŁŞŽ<ü鍛zŁf ˆ™Đ]Łť<đéĺ ¤§„˜źüAůűďż­Ňď:‹ccŸsúf˙‚|˙%e˛+ŚMűśí÷Á9ËY(Žš‘K/˝8¤ć˛`‡Ě[o˝Ľ])X™o|(–Ę΄úź˙gď,ŕăŞŇ6ţĚLÜ]ÚTRoiĄ-mq(…˛8,˛čb‹ËÂ..߲,îî΋ť[qi …ş7i›ĆÝ3öç̜ÉÍd4™¤I{ţýÝÎÍ\™k3÷˝ďyÎón}zräƒsĎÝËşLő9nL„pÜdńě‰u?ĐÇLCR ˘Ž_ďdŠżäŠ\żÁßźžţćgňłó†EĚPWÉ˝h?‚fđ̟ˆ,8Ą:žqšżR×?0â&&lÔ˝™˝íčœä É/'J_Dú^ÉßM_ I:"ŠÄ’ŻßÓŢŢçx_e˘ÍőYťtK^ŁW]uyQ7LśŞ8‘‰oq™ZĎ?˙yą§×­rSé)t¢+Z ÁťTg(ôwDRR’qĹ—ú,CÁĝ*ĂŔřŇ;ÉĹ8ę‹/>–˘‚˙üçzŸ××AŃ~8Űˤáůç_$ăNnŸżR =×“Ż{?żŻŒ-Ă2ÁÉä­ö8Vĺ*8Ÿ/ˇc–Ćý÷ż˙ĎşÎ÷łźD¨‰s–Šőţ02öîŚPЗ€ďŒ3NőŒóˇHłmCˇÁ`TVUűćŻÄ&ż›6—ř]nÇwčň řÓOóŃßüđc×Ϝ6mGżóRü]Yéű8Œá߁Œ=䃑čŁqm0Áß :“Š—éđŔFEާůě|ÖY“żóÎ-ĹŤóć}m™’’ÎëŸ_唭ĹeFăď6tŇiN„ÓĆNxNƒg‰ˆM7Ëj5N)Č**oFJŹ—ě1DŠźŢţř}<ú胸ëŽŰ}v gA}óĄÄŰFŒ9!V>ň—)Çň™™Đq‹‚Šţ€9*_%Ď<ł3çØŰW'Hž_Ő.čëY>í*Ćĺ9ô•O`žăŢ{ÓÍAŒćęűE÷|_×۸ž}öI‘Sůź[ÇՁ’W ć§(`ôŻ;ĺŚí+‡Ę—ޤ0ógžž ü}PçJŁ(h™Ś_ˆ„{m$ySŞYąŃ— L–ÇtÇĘŽž&đ(ÄT' S™ˆ9 Â0ă\Î<1łAmfœßiŒMîYLčf:,Ĺop ĎĚn‘™˝Ś uWIąœR€‡sB}[ŕ°Ă\Â'_BŽňňrŮkŸĚťżß˛y˝×Â—}iŔÁţjĚ+W –7˘*ŢFő>ƒEżO_}5OŽpŔ܀ĺEéÖ z0x[0Óş—pş?ůێ3zîÇ9Üđťí ÖjkkŃXf4F‘WO\ŮŘ ‰ ôţ06Äzď ƒjuŽUOoÔű……#ť<Dęœé‰Ýv_Á> ú‚‰~ő ^ĺŐxÖÇE38ąŰŐ}š7îežĚ|Ÿčóý„„$˜c—7AŠvÎ@Fü•Ę Ô ĺoşże˜0ŕ6$ SL˘řŰw ľčř`ĽŐÂs/óçdŚŢˇŮCĄj_čh¤đŹ&ÎčB(JąQ:R÷J:’ŇËJDĂހ,ąçMoîs_~9ĎsœŒ˝4˝aň7ă×Ăßw^ŰÇŹßů˜čQ÷}öl-**FOĄ[ ÝŹ *n —ţŒƒˇüÝS ŻKuŐ=ÔŻY&Ÿ}%2*Ęö2AÉ2Ą,[Âu3á‰^ÄńA RŇ3'J“>˙ÜőŒÂ8w=v÷ťNWŸ(~`É•| Îď őŒ@üšĽńÜ0J"qÍh6Ąˆ›ZÜ RžHMőý]Ś(­˝˝ĂďrŢĽ9—.ë˝6\–-ďú™……;Çlö#˜KO÷Ÿhjňělŕ̰„ŻúýŁ€¸°p¤ĎůŘHs睷y„…táܖ1ćőśV§DFŁ jŰŕs[Kk+Źą‰î™>ç„K†^M'l§iˇ;QT݊MŐm˜–{)ĢÓwŔ˝űĂÔÜžšgßůs)Ś?ł _ŽŠĂpń9‰QX]ڌ‚ÔüzĆ—Ţű* ęÚŃŇfG”Ů;Ç™ăhşÓn…5&IžKžÓÁԞEąÍé§ť:éP4őčŁO„ź,>ĹîréÇ˙żí8ÄŘvâý\ČgpÂöŽVq Ë(Ń;s)1Î/żtíDĄĘcňóé$‘Úc"Ó@0Vd;G çúŽšŁ:„;:(‘S Ü’÷t–_ěüĺ ŘŠžř,ď/_ŤÚüźŸĺ#ŐÎÁj>„‚Q%Ôó†y5Ÿ– UŰÍe›››}.?eĘänFЁW ćeü92Ľň3žÚ¤žůć[9Î6ź@Îţ‡vHČšaŚ?Đ%25[pÝť(ôąY;Pľč+)Ôbu™Ż˘¸Lš…™:s• Lš•ŠżeLaÁý§*ƒéš]EfîAn–[4ćtĎo\ŮPÓťD&˙f[AœŮ‰’_ž@îřé2PäML[çű†%iŘčÁĆK fh[j„–˘ęZ &ę)FŃëƒo 5îŠë&ĺąą‘ĘhOÍ^uu.Gł¤¤$YŰ=ěőÎŢ;Ţ Żęჽ[‚Y/3Řňî]ÓŘƒŰÁόАVşŹuŽloĂoú‚űż ľ˙=…%&Yî‰ Üž˛ÎźÂ{_xÎP>ńÄÓr9:ĄÄXâKm“ˇ{Y¤Îš‘ÔP⫇‡6ÎóZ1>¤“ž8.šÁ‰Ń+Đm9Ô˜ÜËHtB ÚjËť-•’š†Ś¸!#Ś™XPó‹‰%•ĆôžNBá¨Ńh,‹ä8ß˝8ŁŘčŠˆĚ7ḗ›up ĚL”đ^˛dÉR™ôbďPŠů´yW÷잖|îÍ˝RšořƒÂvÂk„ż‡ţB$ÜűÜÚľŽňdL6úĎ(•/WNaÜFŠýś§ĽĽyƋ‹‹e)ЁL_ÇA$Ŕ0ćc˛“eƒĹBź–yދŠŠ¤ˆĂʕ+e×öÚ.OGፎşVěŤË5–ĺǂm_8„˛Žvš"1ă>¨Ž'ę: %~Pߊäř˝ŕ2ŢBA Äź1ŢByNP=f5Ű. ‰Á̚[ZýNKňó756#ůů]ăóââMčoź?3XŠĘf?Bť@ }Ţ ů[¨1.a Ě6ntýÖó8řr-7ÂQW^y™ü˝LOďtŮ}÷}ä=ĚČ.ťěéżëŽŰ0{ö>]Śs~ćƒŘPĆß\ţłôj~~žtŁ` §ĚĚŽÂ.U˜<üđýŇ9!,ďØŒ:>ýôƒ 7Ď=÷zčŃnďŸţß=ă\×wß}ŐmŢłYrˆxĽĽĽ2Náž°‘‘%sBuçý—ëĄcö¸,Ë1wćŻ1qÖŹ=äľĘřňškŽôť~–ZŚ ‡_{íeŸóŹZľožůśtcPî˙lPäńŚŰF°Ö555Ňľáťď~÷Pދ¸<ă;vĆĺţLQ–Ÿć6đز”ď˜1cÄç/ÝçűvźxéĽ˙Ék–Ű#‡JŃ=0}ÝűÉÓO?ë3,\ř“,mőěłĎËRglŒdΓn¨Fxźč¤úîťďɸóed¤ËçC=D~ŚwŒÎÜÇÁ!Ż;敮żţ:ŸŰCÇX§1îň%˘çţ~řQrÜßőÄFS ~ż( ˆ‹‹×EŹ@AƒżăĄ ŕeŃx~2náuĹrëÇwŒĎFmÍŕĂéndaŽÎf7yÚr.ƒđ§Ť*35mv46t :ނ#&dŕ”)Y8j|ߔÁT,­lҟá›ŐľHN‹C~vŒÜĆuĽÍ›—ˆďO™„œ„Č4ŐŽŻkXŽÎö+ôäř…2ď[&1Ś4 :c„ÓO?U S˜ż Ĺ7Ábbtbg˝@υFďçh–|ýő7彄ż˙ʅL•ǤH…q,fĚQ`flWTÎgl×–ÓéŤ}P„ű\KŘђǞ÷ć9xocŒ 7ĎaĚ-ęPFŘśÂçuƙ܆ţ PgźpÚüźŸĺ#ŐÎÁ{űŰoż+ŻÇ뎝^VYŕý›q;zîaüO‡6śßŇąţČ#‘!ŒÝ)˘2ćŕBakĺC%x5M~WźyÍŤs̘ƒç{ʔ"ŇśŞŃD-0Óô9‘$yƒ°Š†ÄúÚ´-FJ”KŹe6ËfĘĚ]EgňĹ-0S˘4%.Sz1㫜ĎÝšE.ç™Đ‰QĐf˜^%4MŽmŁ&Žzăyă7şc)ŒAĄˇđ̟m[¨1€úӟ5“ Œ *ĽœgpÍZâ}ąjU€’!ƒăţü÷ż/É!ęęşöQŽhLĂ;ń,ďÉÄh|č1ŠĺÁĄ˘ýÁk“IíĆĆŚ°í™ “…Ü—~řQ>4yěűLwż'Ÿ|Fî+“uF{–ĐŢÂËHóJ ›@lëÇE:V)ZęîLÖ3÷˛ŕ÷ĺ˜DßIĚôĚlÔ؇ČĆšpÜËz‹żßPnďľkóĆ!ÝRęs٘¤ŕÉŤŢş—Ç­ţÝR LÖ0ža"%9ĆŐ@Ăý|÷Ý÷ĺ8<ţ܇|Š{eoŻŻŢÜçÔ}•÷â`Âő@=1÷ç?˙Ůżƒ™7*šÓh߯zGšţŒƒˆQŕ6b_ąŸß“0^çuîŤÄH¨Ű{ňɧuů;Řu.Ąíkçoă•TW1řý΂5Şj4‘$”ŢÎěîň–!ލK|~ęo”řV‘¤ÁŤŠ3%¸4ObeJ2Ę݀çœÂ ` )=ČáýîŠ+ŽîÖ0FĄ ţöRdĹҜƜ5”ŔŒ÷˘@3Ž›÷)˛ß~űöŠ3ˇőÎ;ďéÖČýäŔÜךçžĺˇ„a#ß­ˇŢ!–˝a‡—_~UŠ}Tš§žŕŃGdzϞĐ-Ąŕ‹!oşéyL}ń믿áňËŻęöý¤k îŃţJt~…ńxň{HA8‡óÎ;;h'´HŇŃaĹ\,?۸=,íÍk•b…űîť;¨+…}]ô€żŻl<žôŇ+ť•„RB~ŠĂ(„äwØGe§;>[đ:QN7Ţ0Wýűď‹=ł!ӗŔ̸„ Erź0.đ•‹éMn*œÜaĚŔmP˘ůÁJ¤Ú9("cç:ńóZŁŘ[•xäu:mÚNR4Fw{_ß–Hĺď+S1ng>‹),)ÝÉřźŕ݃ç@Č+†JOŻSăšĘËË :?ă8f  fš>%T\‡jœ/ŤAFz., ĽŇÁLő<áŤ'Ý`ęZĘŇřžG0f|ŻËvx9˜™źĆŽečjrćY^ ĘÜď›Ýâ2éf&†1‰äBM]rEĐʇ'ހ{+ŰVEfěQÇ$ůěłĎ=‰6*ę•cE4}ľď ,•hѢ߹-áŤa2| #I(Î=ýL> ]tŃ%]J|ćädËŢ´C† ‘(KŃ݂%”z‹Żr_Ţ0yH½öŢ˙CÜ|ómžž\žŰ?lXěÉÉ}˘ăźó.ňťŠNfÎÜY& iŰü÷ż_ “ŽŽr˛ŸËyččôô9ßVĐÇEŁPç42îeĆů| ĎbÓ|÷¸NNKð„‚°D“=š†#FáźC† ĽŐˇƒY|şk_œ!‹Č ď†č^f¤ľ­ ƒöćťçžűdŒÁF4%0cźÁ†5Nălß+ýŃŰűœşŤŇZˆŠň?OOÚńˇ}kœŰĐb!—ĐÓű÷‡˝Kéâblôd<=věXY:×Âĉ¤HŢ_Š…@°Aš‰ţp{eűŁ#ÁŞńxxwę :†Đô7ĄÄ ÁœMĂ]f Ń%_äP8ý<X,ă2‡#ˆxť‡a {l "˙÷˙ĆmˇÝĐmÝĎ?˙´<wÝuŻG„ó ĎxĽxP°K#ŤĆFş P0Ĺy(^Ąč…îY(QČňÖ[Ży„ť……#Ľ{ÇҼˤ0›ó+œ7}ôągÜXň)t ß}÷Ýä8K_Ó]œ\|ń…1›wOWŤ{ď}@ŽłQŽq…>ŒwV­Z%ĹgܗGy\6,_xáů>?űĘ+ŻÁˇß~ď9^\Ëšššeă,;-°óÂő×˙G:ô…đąŢÓO?'Ç)^úë_OÂřńăäs5ĹzĎ<óœUýë_7ČFoUÂIA…XŒY5€y?:‹ÄÇÇy)’˘€ˆßŰË.űGˇm`üpÓMˇĘq ¸:Tpt¸ŕń|ěą'1{v˙š˜1ŽçuÍk˘§ÜÜŮpČď h***qöŮçIG¸@Â77rĘ)'cęÔĺľkĽ766J×=#Âýfă.;}ňóžüň+ůý`9ľSO=Żźňb—I (đâź6ňáudŒü•?S3vFš5kf—iˇÝv§G\Ćď.]ő˙ŃՐn4<ˇ<üîžüň ݜÖ^xáE<đŔĂrœéhÇkŒŽˇź~č¨Âď ˝ů}š3g64[—HÄ\‡üçđPýţü}”ŻéŞJdQE+˘păţĂqö´ä$úwŕŽ[šŹ8ţíľřnU RŇă0$9v§Ťńhă–fě4"óOŰÁG)ËŢQ\'žżQŚnÇŠ'Ç/ěéŇŘÁŮă<Ť‘­ŐÖĹßp:,RäJńÖóĎ˙űŰ顼§űëÝ ‹ż…txúꍯ=ż˝<JÔĂi„řůŰÍßpNăř‚żzž‡J˜‘Ú‡p¸ĺ–ŰĽ¸LA!EMĚq7nœ ÝsĎýč Ą^GŰJŰj$Ű9(0÷Ý7eĺ…ďż˙A–oe^Š÷ŕ~řIźgS@oŒă ăƒ[nšQÄ"•qŻUśç˛ ‘ńşĐ˛Cݍ ”źb_cĚ3…ŇĘţh4ý…˜iúŒH&™ágĹÚ"Dít$˛ć?&.^×úĺ(•őŻ7 żäźÎŽĽ-ůŔb2Îč^Ÿ~rŽŚÎőy–ăü÷2':ÝÓĚćN‘Ĺeť¸i¤%Ă:q?”WV '+C>´{+ź{âbś­Bb LŒ|ńĹWŮçŸá™çCúśˇkÁ3°gĐNa[¨e“xn/˝ô yíŇÚ˙‚ ÎĂ@¨Î˙ç?/Ɖ'ž™™!3™ FOÜžŘ ^h~ú)˛Á˝/­đš/ÖOt‡ăĘĆ$š ŽSSSpÉ%— OďÄźŻ^Ţ~řaR`Ƥ t&ô˜ŕS xďň˜$Rç|[C˘kb$RîeţĆé`–Klěí]{§›ÄżŒŤ|Đd ´ľ]n¸ ܖŹ8ń`ďŁzVT\˘70v‘őÜ˝Œó´ľvL °A1 *âĐ. „JpĂĆ6…Jß+}‰űœúMfÇ`ĺ̂+ëa)çožůƒ™­qny.ƒĄJVzÇB,ŚÄet.aBžIoďg%TŚ˙űßgeĎۧžzVĆiW]u}ôÁˆ$Řč ՈKű*ŘčÉ뙍ľt Ńh*­Ę_*D#€ˇ›˘Ů“N°˛ŢĽéˇFLC‘ń÷§%ČąHôłOţJgŽŸÂ–@Z~0Ŕ˜„ŤŸPźÂR7Gyöߎ ‡‚˛P(˘f÷ő[ţÁI‘aĂď%FŘxĘ< Ĺ8źGňžbćóy˜36€Í›÷_7/Š ď5ÁJč((pV"ç-[śxŢçžřr§bÚĂ?&ÇŮřö䓏všó^ÉgĐsĎ˝P6fżđÂKr˙XBČ;$(qٞ{îŽ;ďź­‹0‡/)8cyC ÎŘpűŢ{ť,eŢťŢ)4–Ęâ6Óaĺ”SΐĎ_|ńeG6ćÉ( bŹČĺzč~Ů˜Ź  Žb":xą (?‹b-ŁŁ/ó1wŢyˇç÷ű‘GěRŒeVYnô /‘çžżŕg|ň‰"ţíÚŘÉҘŒaîż˙!y^nżý.Ü}÷~×CĄ>ăĺR邧â’óĎ?§›ăżl°§ťżC7Ţx xŕ^Ďt–}üń§ä8sHŢ3UŠmˇÝv‘ĺ֘eŹdŠ1ĎIŃĄ“ŽŃ„8ő˝bÉV6:ăyćXG%ˇ‹1ctíQđűBq Ą3á=÷ÜŃĽŒŘœ9łĽôÜs/ßýŰnťC~Ž?ŠfpŔű(łxěwu_6vëwvžÓ­š)đt'ĚŘTӊǧă?ŔŘôţšN^XR…Ëž(Fe}†š]Ňě—łÁĆŇ&Ě(LĹź“'F\\fŸąšąqŃüÎzvüîoźŁŤó9XaÜA9Ł(¨f…@ϝƼňK/=/ぞÂßhśCŃ ”ĎäěČß:śĹźtb[ă˛N8Î#BŁč†miáÉ} –”¸ŒąEúŒĂźÝŚ(4ę)ĆÜă`NV*J•žL¤Ű9(c\­Úšř˝ŕőĆóÇX›q;;˛Óˆ/x-Šë‰yw抾ůć;Ů€íkŒ‘ ŞN)ŻŘ×siŐŐÁŤgŐÖn˝mŐhźÜÝç4ƒ’pÝËxP ŹUe[P=łN†9!QvxɔŕËlčIĄÖŚÄdƒ€[-cŒwU Í.˜:_îr™ň37Öe2ŽÓäÚĆ(Ń&ëČÎEű—Ă’:EŠĺyOTţĄ:Ăm+(ťs*ÜY&“0Đ&L60pîKŘRq˙ý†źe&c(ňWâlkBç şIU˘'Ž”Ż ƒ]ĎżţşáBŞ„˝Ď;ᅪŞLdE>œÂXëSÄ7.Ç ”Loůă%žëÖóçťbżôô´.œę:[ślyDzęk4}ESâŚÄ$˙÷œ–fß˘Ź¤ łŠŠŽŒ †ćŁż6lh—ż+Ę‹J“’}‹ŕůƒÂ†`‚×ćŚf fŘ0sß}wÉĆ%ţŚS¸BWżţőtłŒëŽť^ŠJ"u/˘h棏Ţ L˙é&.SPôŚr-td2ň§?ÍőN>ţřŸËӅAšĆó>‘†Ľ•#ËFúş§ĽĽáöŰo‘×ď't<ó†ŽySĺqń%ŁĐŠ÷K ˝Ž<ňđn"ĎHPRRâů,ُLAńĐłĎ>‰/żü¤›ř‰Žrl4',Cf—)xĎ˙÷ż˙Ďóâń3B1Ą˛#§Q\Ś`üyă˙îW§Ć;t—÷]Ţ(‚" ň3Öó'.ŁĐKuFĄ“÷ńUPdŚD•tS1›ÚÎź<×5ȜĽ7Ę5çŔ˙ä‰Ë90BQ˜Íz;ĺ°ŞŠ‰ččçŤQ—1^#_ýyqQߊ}oťíŚ.q—‚ń×EšŽľ˜j/Žç§üM3›˝ËcKž^V߆ƒÇĽăăăÇ÷‹¸ŹźĹŠżźľ§žž ővŒĚ‰wĺsœŽŇ‘›ś4aż řĺŒÉHЉüďSQ}65ˆďO´úŢőîř…=ÝÉr¤N÷ýiđš$0ś`>ƒđ÷čžű(Ö6 şz›WŚ€\ýn.\ř›GOÇrcéyő\Ź*î¨çw ÔzB$÷!T΀÷釺OŢ/| ŔzWރm°Á*QŹG1a3˜éëvĆ|xć™'¤°]0”źcsşÖţă—J˜NR^ąŻášRż-ÁŽQŢK‚í‹Fӟh™ŚOˆ¤Š*f.VV^(dd$ÇÁ>î TpŹ…Óčř “Ő%úňŐéC~˘zߗx îM›fœćpëČĚŢOšNłqÓblŽ­°ÖÍşŐŚL4×V`“Hbńaœeöԃw0ą](l‹"3&ET`=oŢ×RÎ (ńY_ÂR*aE+w&QƒA1íń ƒăPK-ô' ŕ÷Ýwśg‚+ęŸÁËOđ¸{_cěJřŔĽĘ™ú‚Ç„ Üpi1ô–$ćâƒTS„’ö쁨4m˛ ”Ă)šĐu_Fú˝¤‚Áëę€ćĘńožůV>,Ї3:âřJ¤Fęœ÷ý•ˆlÇEÓw456 ]6ţtw/ ädž{™É#6KĘ-„/LöŘëJĐÖÖŢ' CĄÂß-nƒ˝n3`ó]Ň-9/pň%°ˆ,|÷2Ɔ }(’ęO GzÜ2(f/@ĺDNyĚ­qŻ ž#ýÎč>§â ţŕuA'̝ťżçűčÝ0é “śß~ű]ŸŠďzJ¤Îm¸eِ(AřŇKŻxÖ3gΞ]ŚŠß,6Žúť—3¨zY#6֕hćóćYŽ‹ĐŐʈě)<ĆŽĽüIşĆ Ć}RąXuut[ħŸ~.ŻľPJrj4‘ŚĽ%¸Ŕ,P§(%ćđ†[•Yżž¸Ëß'ö­‚/&MßĺďőEĹç’ď[Ä[ççÄÄŕƚ[ś^<)xüë_×Ę2ĹĚqĐU€PŕAŃ ÝÄćÎ=XžŞÎ˝ŽIŠůƒ÷ĄčhWEďýl„3gśgCUMMMˇĺŐ=„÷—žĘ-1ßÇN„˘/oW2#źoîľ×rœš'ă÷–ůu/˘#–ą‘Ů:U°ŃďœsÎň)Îé-Şź#ďiFá’Š˜|5ŞjtŒóŐ)NÁél€$Ţ%UÉFĘ@š6ŽcÌéč/x^9d°äáuČY͝ܤvdU9dşĽÂ8ý“O>í2Mš„0Gg|Ö¤đMS–śTâŻ_~™ßeyU“űK1„:ż¨X‰ż ţÄšSŚLî&ŘčÚŮfnoŒ"Re<5ƒ^3ą"ĎŐ.ŽłnMVŻkSNœÜ?nDĎ/ŽÄ”ÇăőEČËJ@nb Źv§ĚŃYŹdKŽžž‹/NšŘg˛ëkŰP×bE´ŮącÎs,âĆĹĆú <<ŠŘ€âho!ťśŠgTć0ľ)0çüá‡wqČ6Bá6Ĺd„żŃô%(SĐtB\ĆčœOĹtÖî ‘Ü‡PP÷ž””d+Ź/xě{ĘÜšűyîË/žřrŔyÓ)°ĚD˘ƒďóŢúŘcOt‹<śŒĆ|?ówŢ Ř)q+;x/;ňŠ} Ű÷”Hen‹<§2gš5ÝÖ4o´ŔLqz*†ň7N7 'ÖmÉřvyÓÉH9SP9ű6”î} چ‹¤ƒČišEÜcśš…fîV9šqp8|4lzˇkšÔ6xMv–5.c˜_–Ăä[b,˝%$Ąi‡9¨űó]hßď*ÄĽAr| 23łŸŞšjšŻĄ42r~ 6ď`‡IEUcžA%oŚ„7`–cčkř@týő×yî>řţóŸ›}–Óáľúńǟâźó.ô$áĎ=÷ʰĘ(ö'´PfB‡ő—_~•Ď}âőÄ}Ś˝ţ 'üŐ#ŽR0XĎČH—ă´ŮW=kŒÔŐŐÉ$sOœčP§8úZ{H˛ĚB¤`Ěrž>ë‘GóôŘwß}<ÉU…1AFk#Lp*TŇĚ:d<÷\p#QÉT–ŠzőŐ×==m%Y#qÎű ~çÔšĽlhočŻăâ*ő{ś,፥ ×\ó8űěó=%'źáƒ×qĎ=÷u\фGcSsHbŽŢť—u“”ŘÔlŸÓěUëĐŃÖ"̂ý~öäŢl~&?ťŁľŽŞő>ç‰OÍűŢC÷2ßち™ežZDCEp§ÇÁ‚r1[šr•ü-'l”óĺĆŕ­qŻôE$îs,¤ö1•żdĎŁ>.™?čĚŔ…P8îOOç’Ë.ť˙üç˘ađŘ­"ţń.+d$RçÖč†Ę=•Ÿsíľ˙BCCwAĹ÷ß˙ŕšćććtKb溲Œ•7|žcŮϞ”‹ccő]wÝî‰ËY:aŐŞŐč->ř°Ďë‰Çꦛn•ă<F×A2gÎl›2K4ůëýĘN2<žźżł|Ä`‡×cűżýíOoXގń Kůú^ąűŠ+ŽĆ9ç\ŕi8ŃôĄĚÔ3/6nÚěó}–ëQQžX˛ty—{üîťÍBłË.]Ýq/ößó›ż-ü]óĹƍ›ý.—‘î˙Ř)śf‡HĂ27tŸúüóĹ=ý)YŚ Ěđů„Â­Ł>Χ WOáďEVذđŽ;îĆI'ę)ëęëšH=óžŚ\ŸŒëSÂ/:KË˙E>WŞm Eě¤ÄEÜ>ŁHĽ3,1¸5QB) ŰyřüʆfĺžCÂrš›ÄďJ Nm„"nŁKËʓɓwZî*Ô˛§‘@ üaÜľžH ŕ ŠŽ6+ž?ř<ĄŽáşu]ŸĺTěĆdcŢA•ÇdlĂXÚ(03ţ–+ç3žoa@şř=¤3Ą ƒĺtů}e.—šÁ@đű˘:ŰťFXŞ=!ÁkúžŢˆ‰cs`œÝ.~/-.÷ŤH Šą¸ű§-(m˛˘Ż(ośâŘ7Wă´×WĄŽÝ†y ŇÁátČvŠV›eeÍ8sĄxăčąčKÖÖś‰/śy:œý?X˘ä9äšTçľ§ Ë Şř8˜@é”SN–ŻüfÎ××ócA:ž^ýpčĄGúÍg(ą9Ÿ-ŐóĽˇ(›÷ŠŕŒŰFתŢÜ÷"šÁP9śeřsnzúég}ś3… c;şÝޡžyć9Ÿó1_d,íܓŁŢśs°ó˛ËŽÂSO=+Ű|uƤ€œčŸ "?řŕC™GáłŔťďžďs;rűȘ1ĺşR^ą?P9&s~ˇ|ĺŕřLŔXJŁHDAى ሞBiHä<|ŘĺĐ$˘ ,›šĐԘ›hđĚĚÎASĆrl5K_ň’Ë~€Šb˘ěN˜Ýí/ćhW™JUţŇéŽOYúŢěÇ\ćťjŞf‘–éƒĹá°!!;Ą8fŘ ÷Âęj˛ÓłŃ\SÄ¸´´:äbLđŽßP„Â#d#‹ęuĹ}V´qÜßńń7=زƒC=DÚşÓÖU•a¤sá°~ýújˇSAo Šh{ǡČŔЁƒAłfÍAĎpŮۂ"*ű™äP°$­đ*,]Ädđý÷?$çŽ;î$é~Ĺ$Q||œL2ŁÍ-a€Ç^™FřĐxĹ—ÉĆ2ž›óÎťHŹă ™ěb‚~͚5RCÁÝ_ţr ^{í „Dů0Ŕ@Ÿnl¨b˘˜VˇLh˛Aę˝÷ޗ,ú"Ąäçöó:a€I^~VUUľ<ŞŒçüňË˙Ůmق‚ĎřSO=ƒƒ>P$ćňäĂ ü¸.6V>öؓ˛g(­Ť™ôcҔ ś ńÚó×ŘeÚ=óÁÁ>ab߈{‰s*Üî'šćš+Ără!|XŢa‡Iň{˙ĺ—óäśsůűFgÁHŇDžB>(°ńƒ öě=÷ÜłťĚĂ;Uށ€_|ń‰źśL óÁp܎cŽ9 šČŃŇڂ dö‹{™O1ĺ‹}<4Ű­°—ŻDŤeŠžúâ>ď›ń3Ľ{™Ř§ÝwB6mÔ éŒÓBŐŔr/#Í-á‹R2sć̖÷6Ś|óKDîďËÖ¸Wú"R÷9–E:ůäÓdB“˘~ŠsŘ“ĺ oń÷˜˝t÷Ůg/Ď1óĹUW].÷ąE.ü}Ľč,??OŠŔŮčĹd˘JjţšA*űcšwnďŒqKEęÜNœ8Aîé“O>-ﱜŸ€ź×zĂř…Çů˜cŽ—÷™ŃŁGËç60ň8˛ąžżAźż{ťń~ϒ‘Ü–OĂąERœuÖyŘoż}ąŰnťzŽW&?•ť;Kyßű#L4Ť$üUW]‡Ď?˙¨›ˆ‘ß]^'ŒWřS ŠťďžO$Œż–ă<‡Ÿ~úá6őü:Đ¨ŹŹ:OáČářöŰ}NcR›ßac\Ş;f”hÜ÷-–ŕďŔšľë1nŹŤDͤIăĹ=`¸ßů#MRR"öŢŤłAŽ÷ÚUŤÖúÔ¨~ŻĂ@Ű/q`Š>6^ńˇŽďüM¤kĹ'ŞT_¸P¤Ěü;ŇYÁ—ČšçË_~‘÷Q yýňžFg/Ĺ÷ß˙č~őĽă|eeg™Xć‚ÁR9ËVJ‘Wř+•Ý_đ>OĄďŒ+¨gXşR$G×_N\ĚŤ>WSŘ*üîŞüŸŠu/Ł?;{fffœÎx‰â1 썪ŞĐÔrŒ­C‰YŮ!’ÇÎx ÇxßfŒCQ™*sМŔvÝŐ匹Ë.ŽsČcÎŽńĎ˝÷űsʚĺ÷’×ĹüŤ\`aáH'ń:ňvçU×ůď_’C(Ži>ü-§"Îڊ ĚÔĎşŤzf€OĎJŠĆďĺ͘ńôbœżsŽ™˜‰ń™‘+•Iײ˿(FeMň˛¤s˜ÍîÚ łojˇŁśşWî?ˇÍŽžfmM[çŞ=ŤÇ/ěé×9äšÜâzş€Ş6%öÓŘń†¤Œ…˜Ë潐ϟvťĹĹĹŇIIýӅ‘"_Đ}éöˆŠŮůÁWŮĆÝwßM>O)—/ţݛŇБ܇`0ö˘0ŽąÝEýCŠlŚOŸ*Ż>K˛cs>=Í(ŘvC;ĺ=ňČăřᇟäv3Ţâ=‡Śůó]BkŢ[™gŘčm;óÇwʌéŮń׿ž.óBŽkÁ.Ď s%Şó"ϟŃ5—×çkłS ÷ٖŁrƒźÎTŽ„ń‘ęź@Z^ąŻĄx”ĎJÜśE{ě ňxşrhvyŽŢ~űůÜEi°RšMĄfšˆŃG- ‰üńgđÂň˜eĺĺČÎĘÉŠ4$§$!6:1"AŸ‹†Új$§OAą5#§…¨†b$ľ!Žü'X*—ĂҲɖV˜[Űá`ű¨Iş-Ădq•ť”Â3łű}ł[(ćžĆˇĺŮÝĽ1ŽWťÚÄTSrŹ CQ=ŠÓPcÉE{âP¤eĺĂŮҀÂřFŠđvŠ8ŇŃyƒ˝ŹĘE0Ć}¤Ľż?aY0ÁŮö"2٘Œ˝0ب=)a@‘‡`\qĹĽÝL€°w.681˜bďŐsĎ5 âŒÁŃ@…e äîşë^ôů+#Ĺ5:Ft’cŠ ş~ąá<­Î`5\áů`DTtóŽ7Îmşĺ–ĺ>D˘Ńü‚ ÎkľL´)á–>Ř=đŔ˝>{9ł‘’Ó͇٘!<>ˇÝvł|Čă1<˙ü‹d’Ď˜ˆUđąüdC5ďŰČżƒ‰s ĆŇZüţô„ /xŻt7âuČ'#´âżôŇL1ÁĹŘíňËŻ–ǃ‰_Én÷ß˙~AŘBčHÁďőœ9łer˜q.ÝÔ(ţú쳏äôHœ[6ʞyćé2ŠĘdăY²F÷Ý×˝'$“ô˝=öŘCR$Ĺăďëş'Lˆň<)ąŔ`ƨaFŘ`m‚řŠWŒ1MkkŰ6×Aj Š ‹Â/X­6lŢźĹç<3fLĂç_|íwŮO?ýĘ#0#'žp nšőôÇýĺϞ2ťäłĎçÉçx̜áŰˆŠĘĘ*ü.WXźŃxĂvŕ°ĂçăSOýŤxţÝO<[&ŸŠXZ§'q ď‡]tI—ű# 2DćkčĹF_6ú‚ż)?úč2‡ĂçÓ‘r™TšŔ€ń>ć/^ż•2'§đ–óˇŸľ|Ăœ9łeĚgBő´â‚ę `$ĐwYŃýžÚö¸öżˇç0ÔĺýÍÇ|VŠ`ěŠDe<7Ş|šŞ"A8)đä4Žł„“:J˜ć ó*Œyř{Ŕœ—Ľ8ƒÇˆßClx>ďźłqúé§z–ëéůňu}h|cî+ŃÖH+•]đJx_ĎÁ§Sě5,5ÍV\÷éÜńÓě1, űŚana*Śäô,ßYÚԁ‹?-Âë‹Ę•áy °‰Ë×îţnXÄOy}› 5m¸íĐѸr÷!áHfâĂ=y™^ż°§ËsŘ Ďgo„N ćôC ÜqÇ­"˙§ěPE§EĆž`˛@B&>‡sظq“üŰ_Iiﲙáô–HíC0XœËÓĺŠq6Žźo)bţӟNŕ=…Ć,NÓĆ*ě çË=›ńĺ=÷ÜŮgŽś[ƒŢśs°*SYY™t)cgűî{ĐçňěœČv?#,qÍu˛Z?[ņŢ0ďĹ63şŚ*Z^ą?Pß%ŠĚ(˘óÎÁńţx÷ݡ˸M Ě4-0ÓD„pĹeĄ”Ćä8ůpYRşEŒˇĄąŠńqQbˆAłHRÇÇ'ˆä…)É)hoŽÇČ!YâÇ6ŽŒ ¨Lş¸Y;{¨ČXעŚ~b‹`-Y$ń°ëh„š˝­ő•HI° ZÄŔmM°Úڑ˜”“řŃnhíŕS7âDŁŻ3&ľ­fDĽA[L:i“Đ`Ɇ#. ë6WaôÄaâƒpE)’Düź~ů"ŮSłĽľ‰ ‰ˆ‰Ž ;ɰُHLLB{GJ6oF•¸a°!‘IůPzw„›xßVőLH͝ťżtu ě¨zÔő'LŚźđÂ3řńǟd`Þl¤Ł$55E:*PHÆ5Łj ĂlH|ë­ˇĽ`ŽÁ#Ĺ/Ü':^đŘóÁ!PŁ÷™*zŤ´Řg’—âÉ &ˆ€öDًĆ_ `°Q”<˙ j7lŘ ’—­˛w,Ż&¤Œî˝…ěý÷ß#­éTÇ :&&Zş“Ńů„ Љ‰‰>—ĺ÷ůŃGA÷˛q•˘HcoQ6*žńĆ+˛A”A-Eů;ÇíçC+8˝éÁ ž˝šx ňA@• F$Îy0T™>4Ňš˘'0ĐňÉGĽ-6yŢyěŮ(ÝÓu˘/ –˜@}á…EƒČHœrJwwCşšđ¸ągňE]ŕqˇT°›N0,;5yň$í^!L‡Ňú†z‘Üיť‡| ÷2NfḗŠńĚńť táG>ă&{ů ˜DQ!ŚŠŇğđźűötŸč} xos4U‰ĎömÎőgM˜ŐîežˇÉă^ÖÜ,=ÔÍćmCŒŔž‚ź/pŸ)œ ץ•ô÷˝Ň‘şĎń÷˙ő×˙'Ĺ>óć}#ÖłEöŢcOFţŸ|ň‰!š0AČă²<żłA‹÷&h¸.şkđw5P‰ˇţ€B}&á+1nŕwŒn%ÜţH[6SLEą?{Cł‘OšˇřâĚ3ϐąíË/ż*Wˎ?ź÷˛G)K.đřů‚Ű~íľWɄ0EfLä2ĄG'!ŢÇxîč*Ó[‹Š)@`ÜÉ^Ç=ô¨|Ż'pŸžţiéžĘ„ďýtFĄť;ŒpťA‘ĂŰoż.“Ś,ßśY<çQÁNEŁF’B>Ţł{ň݈üío§Ëc_RR‚łĎ>ł›ř™× ËŘÝ kŁkâÂ Ď—Ď 43ŠéŽšŽo :O ůmŃbŸó̚¸ěß{ď}ŒsĎ9]>’?yţű⍢Ѫ} ă÷SOézí˝őö—ŮeÖÎ>ß˙ý÷Ľ……^Ó|Ń_ŽmŢ“Ř ČňÔtH`gËôʈa)eţŽňˇáôÓO‘Ďŕ=qî˘Ŕěńǟr—ÉüT<#KϨއ|OgžHatŮ*//:YYç`Î˙ᇓ1ƒyŞý#,Mç+~Đ ^9NňˇžÓ3L­(2ó7Ů×|Á’ ž§ŰNdƋu&DĄĹęŔÇŤkđń˛*Ä'Ĺ`f~ö™‚Ů#RąËĐ$ÄGŽG­b],,ĂÍߗ ˛ŚšYńˆś˜äg(,"GQ×jCcm7ǎöySŚ(ŽÉ´˜Řԉ„ˇ‡çąąŠQ$ŹhŰ´óÔąŤxp§;Œý•Úňźƒýíî ŽŃ†&Ő+çÓO?č×R ˝˝„÷ß˙ ™\äĂ×@ąrćořŢ{ď'¨LB^zé%Đ ~Ř{‚ źůĐĎ{ ďm|Uƒ/ú:Ž E4ĺk\˝ňţMáħŸ|„(‘œ>cgädť°ü•Ęôž…v˙ö/0ăxŐęhŘ´>1™5t'X’łeEĚjÝ˝˝Çú™Ôą7VÂVň‡Űćľ;ŠĂ'!kÜ żîeŢNfĄt.ŕü:}ŠÍĘDŹ÷Ű…°‹ëćO"Ž?ł§!Ç×ńK{_3đaœ}ÄGËqş|Q(Śé9,pć™.—.şNPě¸-3kÖ2IÉä9K}jśú;ž ÖéÎřˇŻ{¤rgę­+Áˇ_ ôüÁƆ˝ö9ÄŻ ĎÁĎĹmˇřv8âĎ'‹Ćšbřăß×_‰ŁţÜé´üó/ qîy—öŠťĐ˙šG~çďœsĎżÔďülěřę‹weÇ"oîŕq<ý̋~—}ëÍ0ftĄßé<—ťíq §änOřćWů#ŐÉĆWŒJž¨'qĽ÷ßďr- ;Y(ŽŸtż ˆ„|ňÉű]„#,‘Ť\~ůĺűn.'Ćű;Ë󰼑?fĎŢ_^ťţ9 ĐبF1ĚkŻ˝,;‘]ýä4ţL$ˆŻżţFşbGy [YH^ăűď tSŹĚÎ@Đ “ `lhú⋏=n<'tŞ?ăŒSeYođ;ěŻqŸ}ö“yÖ`݃>\ ¸Ô1  řXއ cFGVrÉ%—Ęň¤‰}üńű=˙ýď˙AŁŻžú´[§,#gŸ}>~űm‘ůĺ"î"jĚ#]|ń…Ň-Äl¤‹ńŽ[CÍGą¤r°řáűĽ@ŢœpÂ_帯k†Ď}sç,ŻŃ˙üçzّ‡%ĺŮűřă{棨‚ĽŔŮý嗮ňéěGńE`=Ô,MNبë­7Éq^ťüžPěf|_㛁–Ÿ 'Ţ1Žó•ÜxŢo~ęřdĘ9°•ŽëśŹŞĆ¨^˝ g:˙kł9QÓlÚm@lĆeĹcçüD):Ű17ŁÓ㐅ťŤkZńņzźśź Ë65"&)š‰12/aŹćÉ6§ÚšÚńŘ1ăpδţ+iźŚF´3=łqŢ} ĺ"yü|NŸ•?.yמy‚lëbçš`y_ű{OŁŃh"Í`Ę+ţë_7ČN*&ŰV%ž W1ůÚR2Ňŕ~ľ{ N÷ŤĂ08 ŻŢüüčŐ{ܛ Vş‹¨ŚWôĽ¸Œ6lěe˘¨ŚśFöt˘Şœ",:–ĹĹÇŁľ­-"1BA•Ć´üŒ?@ăƏ—Ćœ9ěV47ÖcHn&rÓ°jŃ/hŞÚ‚ÉăF"ÚäŔŚâbńă…ŒŹ\´Űͨm˛ÂŸŒÄÔ,44ś ŚŞyٙČJË.Yˆş˛˜:Š1Ś­] {G›tSËČČĄ QQV.ˆPYY›Ý.­űÓŇŇÄĂŮpš}ÉbŰé`Ć÷˛łs°fýŠśćţ;&áëp§k4šÁ kÎS\F(0(°çľęťŰnýď6¨Ń„ƒ1áĺ÷ËV[Čꗈ,÷˛@NfţÄeŠŒ1;#&9>q:`Űü;l5›¤ť{ăŤŢZ˝šÇŤeš. ű).łŐl”ŸĺO\›’‰Ě1ÓzäJę|]—qzŢdyLťlŒŽŒ¸N3paăd°r7k׎őŒ÷…ŤĽFŁŃlKsĐbé ü‹/,řÍoĚqŘĄK >úč3]ÄUťî2gůWô‡vPqĐďť˙ą€Ëř§ý|ŠËqţČĘĘŔčQ#ˆ ťľ âß,MI§H†1_ćăžújžçue—cüćëš2Ť‘ÜáBq!,ENX–™nM…‘É“w蕸,( ˘(PTĂÁÜśożušžÓŐÁXވ.PtŮ t t=QŘ7wîA˛|´Ń(áüGşLůsc|ĆË-)w,oŘF šźĎĎ̕ŻŸq= k+Ĺa*ߥ˜={ůĘ÷é’ç–d¤xžż ăD ďĹa„×˙ěŮ= StĽDytő„qúv˙Śű(]1“*ć]rmęԝD;AşŃr>ĺTO‘˘/č2ňÎ;ďáŢ{€?ŚL™ŒŘŘX9Ng7÷ÝwśçwëňŸ_éHB!Îy~”“dAZ­pš• WçŕôzíÍt^3ąń ™!9ńČIŽFQ}ţˇ¨˙ü`-öqf>ł3İó3`ď˙.ĹőŸmŔŠęV1˛˘`y ăgńÖÖŘnCSc;žůËř~—–Çllś"ĆbBoOŚ›Ěp´4ĘsHúŇTŁŃhBa0ĺýĹŐFčL¨9Đhś6Z`Śé1}).#Ş<ćĆÍ%ňĄ×jí@]]-ŞEĂgCc˝HFTzÁ† •=qcăâ`łŰ°růrÄĆÄ ..É"ą‘“›‹őëÖI Đą")C%,ËyŘŲą"Č¸;6& ńw[k3bŁŁ‡X—hjF›HÜP(ÁîD‘[*BMFűO“,ĽĹž6ĹĹE6|8˛sríś)_ťvl ĺgóá™.lqâ5Ę%ÎkeC.ot´ć –¤ &8Ó"3fű‚ U•4dY`ĺ›ú“˘˘"ůĘ^ő°ÍÖhúę•w×÷xŕő‡7ŸŮlAޔ}`‰Žő3§S–Ë´–üşę*[0!Ď߂ž8€p.Ëup] ľŐ°nţC|ĆJřë¨Âm˝źˇ,} śIţŔ˝ !8™ů›'łFqNŘą€¨Ň˜ŞE Íśx]˛îČ#Áe—]顕KXv‰°Ń‹_FŁńϒĽËƒÎăŻD$ŠŹŹĆŻżůkv؁~ĹY¤ź˘>ôT—÷Î?ďo]\Í"Ş{îŠë˙uE—÷^zů Ź\ľ&ŕrţśeóć-Xž|•ßĺfΜ4Yźx3ʰß~űĘq–şćš˙“y,_l9ź .¸X–Ú#Gőçnó°|°Â—€„ĺoTŒG1˜Ż8—Î~7ÜšťĹçŁŘ„%Óü ))d$Fńă{ěŢećޕSšĘ?љˆĽą|ńÁĘkˆ%ĎŢ}÷}ŸóĐEP5řŽ3ŚË4~_XĽ„ÓéčÇNPŢđ?řŕ#¸őÖ;¤K›ďi/JŒT˜—G]%LQ^9‘`M˝˜ÎŻ,ł,Ł™Ÿ‡üŹxd'FŁĂćÄŚúvTľŘ…!âý\ńžËý­űúmâÍşş6ÜuŘhœžSĎžă˝auuŤHŰań5ąŸšnš"G}Ľ<‡D Ě4ÍÖb0ĺ)ܧŰň‘G‹ďžűŢď|ŒíŘy‚xwĐhśú.Żé}ĺŚe|ŸŽ^LŹŹ^łZ>Ěććć")1^ IňA333K$ńĚHNJFYi)RSÓDĽC† EáčŃ\băbQUY%Ĺi………°Úě⁲ÄyttŒLRźÖ&Z7‹DŔ¸ńăD˘c¨LÄTUUb×#nFL†ĆĆĆH=# GІU3~ýőWLš4 䍎d›6łĎ RRSŕËNÓëëĺßľ55˛”mfąí,활bAiy…ěEČF^ß<*Ai÷uźź§š?”éf`S#~GXR‚e Ř[“É[ňˇżŽČ´i;,YĄŃ T–YÜŁvJËJĺ}›ŽŠô­{™NHFŢÔý°ĺ×OEáťD•ŁĄÖć8˛Ç Ł}¨ˆ%Rĺ÷Œ1c&žrŸŒŇŞ˛].ąvwŒV456ŔVťöĘupÚ­đEeyÓö“ŰŘîe44ÔcKéל˜´°l[…×.Ë@ą”ÎX†çĎ>BÄÜĽ“;g,]şL4X˝çqĹ8ýôS˝žŻFŁńć—ůżáŻ'pžY3§ă™g_ň;ýƒ>Ōť‹ rs˛qŘĄâ͡Ţ÷ťěË˙{ťí:{ďí/đN!; >űÜËéGç2Ž3:ş3ÝIqŘ>pš=öŘEÜgĆűœöÁ‡ŸÜś@˘<Ĺ…‹0ع䒿cɒĽR˜ÄRiąqƒNU‰‰‰˛†÷ç_~Yŕ)ł:věq>ĽŰş”kšńĆ[¤ „9<ć×ňňrĺýž" d¸>–ŇŁ[÷!ůňŢO§Ľ÷Ţ{_Ćź)1›?(ÓkŻ˝áiDběü§?ÍEPX8^xž,mČ2<Ç{˘,3:aÂx÷ŹYłF>Ű3ö!§öWŸÇ(ˆcŠÔožůN4@ý€Ł>NĆH#FŒ^)`úřăOĽđŒÇćşëŽöŰœŸ˘><öؓ˛ĄŠĺwŮ!vÝşuŇyŠËӅœq˜7qŰ(FâůĄĐďĐC–ŽęÜźóN§Ăc4#<î7ŢřoYr‘ű{ÖYçIńânťí*ŤVđúš?Ç݌ŰuîšgwYcž+ޏL Ϙ;>+pČ!ɎmŹĄŽ'sť,sÄóžzFÂrŮĄ”őKF˛1sٲĺ8ě°Cä1aÜJ'śE‹~—óPč¨äk(pyŽÇž×ó?ü$Że: ňóčHˇAÂß×˙űżküŽ‹np<đ°Ç#77§›(ěžűnň{˙ő×ßzţö.mŤŕ1¤‘ç÷ć›o“Nƒ{Ü:׹ńT_žŻă˙K—ĺůťqţůçŕţű’ĎÇw’8żKÇÁřř8ůâuN§=2|ř0y]k7Ž\†cE[Lňšőh9 Ž6ĺ€(ýĺ˝DNî÷úh:͢ÍrPÓA–ŻŹoÇÜIY¸t—­ă,Ă2žj“\qKß_ÓÍńIH*_ŽąťŒ–çR Ě4ÍÖb0ĺ™›gÇ jţůĎ+dGĆć|&â{ěŒĂ¸GuT`źçzvŇhś.ú.Ż ›žˆÇ-ăkLh4‹„DeUt%coŘؘÔÖÖJťőŚŞ*)ŤŠiÉĚ\¸F‰¤ĘH™ČŞŞ¨ Ăőőő5ĘÔn.Ů,Ö'“˘š™Y™0‹„&LbMÚa’nđ{1ž‘žŽ7Ęř#GČm˘#ÉdÎwÜQ:œŹâă'LóZ‘?dˆœwÝÚľHóTT”‹ô<˜Ú;ÄM!OŢ’Đn퐉ö\\ş|&Ž'y•ž?‘™ˇ@Ź'"3F3xa2™I:#L^˛ď@B•M`˘XŁč0ńŐ.îÓQ"IŢ!bö–îÝEŁ˘,ýâ^fKÍFŢNű˘ěy~Ef‚ŮĘVŔVľÖôáˆÉŠ„”tçřKö++1iŽŻľv ěľĹm`Ëp).ŰiâRŒ%ŽúĎ˝ŒńXťŘfURœ ˆNZn›üë_×ĘĆj–=bC#Ý)|Ák ×§v 4F˜… —÷Ó@÷NşqQPWWďsú§Ÿ}…ŤŽźŘg’żq2Ţ{˙c‘ËńíĚÎ{˙U×üĎ<ý &Œw•ĎcŢ⒋ĎĹôi;âƛűzBŞČ˙\vé…]Ęb–źř’ŤE&€€^lĂ9gęw›?řđSżËň>´÷^ť#żĚ˙ƒŠežxâQüűß7Ę ˆ>˙üK9ř‚Žaěřj¨Ůu×]Ä0KŠÔ(”Q⛋/žýëIrüŠ+.•Ď”‘°ˆƒćÎnšĺFYŞ1˜ŔŒyäá]„F51Öč/(>˘ŘëÎ;ď‘ÇÎWyC6†{îY8ăŒÓüŽçśŰn–ŽMď˝÷Ě_>üp÷ŇŻíÜ~űÍRä Ö.šä"Yž×7ECŒËŢ}÷íRhć nămˇÝ$Öq™§ϟĆę<ŸsćĚî6ľÇ{HşSńÜ}öŮrđ†żE<ÇŞÜŚ‘ý÷Ÿ#ăĹ[nš]ţŽńxp0ňü]Š ĚTÇ8ŇŰÜ÷wýúőňşžűîűşM§xëî•.d˝ßŠgžy—]v•łQÔ§Ę[ĄkŮ=÷Üđóx|8°<+ńv/Sx;e°áÓ,‰{×]ˇKÇ6ěRˆ¨ÜԌPĘë™ ¨Ţđw€×"żß\Kóú‚ĽcůYĆr˛šďąÁڒÔ<üÝ 3§a#šăEŽł–—F“7ţň[gşŁĹŠvČÂÖbh#C´Ů]ÂŇľMôőţ;`ŠOFŽ8w));xň5Ą´Oé6,FÓ –ź"Ť=üđýŇš—ą˝wlndäČ2śŁ.BŁŮÚčMD E\Fń•rŃđ×ĐČd “’%%ĽˆOL@B|’’âĺ#EœxŔ4‹} źčZ%cEđşuk1´ @ž— nééRŕĹϤә]|{żąąxÍęŐ=jvœ2E–\Zşd)ŚN›*„KKKQUU…É“'Kڊ•+euäȑҕŹZLccóćÍ(Ÿ7EŹŁźÜUڊľǍ3F6PŤF\şn°$'[[š›ĽplŔnśÜg&j(@36 {;ٍAš­¨cN0ŽhÍŕ…eř;Ăß •ěڛ^ś}8h4ýA8IK_¨űntLœ¸ť„VÍMâŢ]'ߙč/÷2ăxbÖP Ýů@”ţţěÖâ/›ˆ5*× ľj-Zc’aNLG´b“Ó“ K”+ągˇYŃŢ\öŚzX›jŕl qM!YŒą,&]Ő(|3Šž‚Š+Y¨óՋsAEtŒŤdF FrĚźđ;Ɇe6łÓĺŇP*Ëײ$O~~>fΜ!§łQLŁŃh4ÁaÎaĺĘ5"Ď1Ńď§77ˇŕ­ˇ>Ŕ‰'ÓmZAÁœzĘ xęé˙ú]?{ˆŸwţĽxüą{1něhĎűt5{ďݗđâKŻK§łęęŕ‚!’””ˆż{$N;ő)F1BqŮŮçţ3¨híŕƒçbęÔ)>§Íűú{lܸŮﲝí6Sä2–ݰa#ś †âЧÏ?ţ„y󾑢ćÎZZZĽ(€ů´3v–â_\ Ć_la‰Fş;ą1…÷~ŁP,))IŠhX†ólذA~NVVڍŃe@•Z Š”8¨Ň2tDëoŽ9ć()úz㍷đóĎżˆýŢ"ŸO×°t%ÝśFŒpl´gƒc އ#^ëĚV€=÷Ü]އçÂťŃ=˘şŇQŔCńË žrĘÉŇ)ΟŔŒ°źă /<#˲ä¨rˆ ť÷…ëáž:?tą{űí׼đˆ"EćWyţY>u”ČŐr?¸^ţ ŁŐ¸ ,”Ž^ü ›0aţú×ĺąTjˆ¨Žq<îQö^Ă÷ߏt1ăąašXv–fޘ™ˇ‰”¨‘˘1~?ř=¤›…rtŁ ÷ĺĐC]•Č#‹ý÷ż.çJ–Óô÷ytc‰T>ů›OA7šwŢyCŠűč°V\\ěů ăKs}ôŸž:Ÿ˝őÖŰŇ}¤ŹŹLŢC((ž8q‚ŘżýĽÓĄ1?ŽÜđzežsdT36˜L@ˆy‡ƒĹ„Ĺ•-Ř´ÚœX_Ű&ň$–­tÜLr!ÎĎa(ż=Fӗ Śźâ”)“ńúë˙“ń#݊ůźÂ8Ÿ™(ČgÜĂxqO°NĺMj‹Š)ÄiŚ^M~ţVƒŮđŞ‹ű=‹×Ŕi)|íč°ţˆAŠwc§Q|Ł%žşĘľŔápʤÁÖ \÷2oşÔţř—qźĄĄAţĐ˙źpVŹ\!ĹdCă~rJŠly¤HŒ=PMfvť|¸‹CjZš `)(kkkEƒřQ8RÎCÁÝ76n,ɒ!ŇJ˛E$G—.[&Č¸Zú——W`źH:q;6—”ŔÚсѣLjżřcńbäćĺ")!Q ĹTňƒNgcƸ–Ą -FlĂ&‘IMI…ĂiI—¤™Â2ą\]m­xß ŤxëoȻ͚…áCódR”űçŻŃZ ĚŘó‘óńn$ ÖhŞU5F8šĹ˝—÷5Ţ7yჍQí‹ţˆkBšűŠ=řJA8ďéüń*ĘKd’Ú"†ąăĆÉ۝ĺĺ˙žuşWű$6óžŠĎ˛ś4 lń7hoŹĆÖ 69y;xşOv,óv/ ëubŹůg V$MV,_&; ü!ĂDüś“|Đ6ĆMţ˝ď¸GÇBFłýŃßńL81ŠŻű%E$cL¨\xÁY8űŹŔ˝ł˙} N9í|żÓYóŁ_ëR†RÁÎuGőWlŮR†@0Š÷7b×]gt›ĆcúË/żâű~ůšâ|•Č;ó< š&MŔ.ťě,ÝĂbccş­ƒe1é\L\Ćíx÷í—üŠÄŽ?ńLš.Ü~ëő8č ý–˝ćş›Đ[ŘŘ@”ĆWĚŁcŸŔ°Ô&K;ňťJq“fű†żą{⦅ĚUłÔĐĽ—^f01ó3˝‰yŘéžBÉ˙˝ń6îO:Îö8m,´ŮhląâëÓwÄ^ĂRП,ŠhÁÎO˙ŽÄh b-ýŸ7EĹŔ—ˆż7~‚Ž9™™˛íJÇ*FŁ F(ńL¸Ú‡LLL4-ƒbhpżÚ˝§űŐaœ†Wď~ţôę=îMPšşv0ӄLoÄe„˝eeYŁÖjŘËaC eĀľ–erŘä+—ŁŤľĂ‰âM[””‚Ö–f466HWş—Ľ$§H—°Üź<é(ĆOfł••˛—{Ž;VŒgŁŠŠQţхÄdvődc‹ĺüů d=:˜ŃElÝşu;f âăĽŔ­śśÆóĘ„őÖ#N4^î´ÓNňké’%9˛Pڒ󇏂ľęŞJTUVb„hˆć{dńuËl&ŰdŻÎ”ÔTůYQŃŃbť]Nm­mhhjƆĽż š) MâA QlÎĚâÇÔiŠű GT: ×h4&0Ę+%%U ̈C&[R|NGTĄ‰Čü‡ę^f˛Ĺ$Ś `ÖÁ¨^ű+ę7ŽE îS갉Č;]üŃŮ;jk¸—Ő‰˜ĚjłzÄe$%%Mžę™FŁŃ„Î'Ÿ|T`śÓN“E>cŠ‹7ůœNŃÖ;ď~ˆc9˘Ű4:żStuúß.”ĽĆýŃŘ؄sĎżgœ~Î9ű´."1ŢŰ÷Řc9„ Ę_zů <đŕăËbĆ:7üű*żâ˛ożý1 ¸Œâ´}÷ÝÁřč“/ Ůú””l‘n]ä°ĂFCç7ŠËČnť…˙{ŁŃhz‡ˇËnll”ĺ.Íż?ä5ďÂložŁóŮŔÉĢa°ťÄf'!!9őubőhh¨GsK **+ĐÜÔ$}š0×?|Ř‘ŘL•5Ţé0ś|Ů2ÄĆÄĘżiŤ˜“ƒ5ŤWcóŚÍ"‘:I‰I˛ĄŇnˇÉJŠŐXn“nh‹YĚ)ăű–( Z[ZŃ"†á#†K1גĹČĎŮqÇŠ2)JÇ5›6‹yF [ŠáLr+V,—"˛Úš¤§Ľ!>.C‡ /7O:°ŃeÍ䴣ْ„ÚÔQŁ.OD1˜î/ŞűxY`GlG-’>ż ëć˞żÜf„pŽB=FŁŃl „’ÔRóÄÄD‹˜!Ć𸽽MŢ'ébI÷˛@NfF÷2“WIθä, ßőP Ůy.âŇriâÓr1tú\Ěáw:j'žx B%0/ťü_řóѧŕ…˙ž*r>U–Î|ýwe)ËsÎűgČⲽ÷Ţ—ýóżÓŸ{ţ~ÜcƓN<ÁřŕĂϤŤšfëđÎ;ď፯ćá–[nÇťďž/ß;âˆĂdĺfÆ"ů:mÚNAލŚç„óźÎNűlă™Ý$ÚHŹpŇĺlýł‰v˘ź”ÄÇFá˙>Xƒ]Ÿúż–6ĄŻYQŐ—śl+üă9m_.F4üƉiv¤ĽĽ":&C°ĆÄ 5- ĺe˛ŹUuU†`ôčŃbÝNĐƉ†É´u´cÜřńňóč0ĆdÝŸ ńRFkôńăĆɤB­hHŚ ŹpÔ(šĺ[€–fş›%yŢ˙őׅ˛äćĐ!CŃÜҌ´ôtY“}zZşŸM˜8I4L×J´ĘŞJšŁE‹mg)N&;Ú;ÄĂSÚŇ `-]!Ef4Jqš]Žnt0ăąQG–éIş›5,z Žń{ČőKez;“i§2FŁŃhĂ^–l,¤ŔÜI‹U7ĽĽeRč•&’œć nYḒőfžäěabŽöĆj4lY‡Ć˛ °śö,i—ˆ¤źB$ƒŘ¤4ƒĐ+°Y¸—9DPH÷˛Íť6đň<0î T&\ŁŃh4o>úřsüóçË…?8íÔSŽĂíw<ŕwž7ßz¸fÎđíüsůĽŠMt( … Šq×Ýáî{ĆčQ#1mڎ(,ŽÜÜé0Oš›[PYYőаxń2ŹZľ6l×tąŢťî¸Áo™íu늤łZ ţrěHOOC0>řŕShś›6mĆM7ÝÚ役cÇࢋ·FCŠŠŠĺënťí F30`ť ]Ę÷œ2ď•,‡9%Žć: &ě˘'%ւ”üdü˛ž3[„ëgÇż÷žbuuŤŤüÍVŔœ(âĄÍËĹ9/ϝěj4FłíŁfš „ă^ćý7ĹevťÎ҅ˆiÚ'˯ӞËé”ńŐäzé"6kśYŕŒŠG]M5rłÓ‘œ’"Ebc“ĐŃŃ!—ŠŤŠ‘+?#+ŰŐűpdaĄuUVT E47ÔףpÔhYÖj͚5HHL‰ÉdDEG#5-U–×ܰ~#ƍ‡qăƢNĚ_VV†‰'HˇąÍ%%rŸ†äçË[J‘d‚,ůÉé;î8őu (..’ë`˛3Ç]NsőŞU"á˜!Ëb˛ç/]ŃĹçs}„Ůě6ĈíŕöGeDŁşĄővńˇŘ˙{§¸Ěnr‰Ë˜ú5ŠĂËă'ŢH\ń)ZŽ•‰Q:ŞůKŞsŁKej4f{†÷:q f$)) 5ž÷[[[@W3ŠÄssóśš{™ŻqşŒĺLČĂ.čhi@kM)ÚŞŃŃTk[#ěí"Žr‰ĺXfÓ‹čřdÄ$ŚČň— ůˆwâ×ůD$—ŠŹŹ”ÉYŠř°SQçĚ:ŽŃh4Ć7,ŰřŮg_áŕƒçœďčŁÇK/żÍ›ˇřœÎÜËW^×_}YYÝŚł‘ńś[˙%]ăé2*ŒŐXʓC¤Ůgď=pç˙öŰřŮŢށŤŽžmmm~×AąŰ駝ˆ`üţű’Ő4‘‡9@^{ŹFŔrkűďżţöˇÓ¤ ŽFCŽšćJ9h4šČ(çâkďůY*;..VšŒZř֏8öĆ1ŸO9eÖÂÔ%?âzg Mwى9‘Ÿ€ÚV+nřp >^[ƒG‹éůIˆ$ľm6Ź­mE4Ýœýť˙NŃŔgNËŨ•ďcôŢ{Ésç]îÜÍ7:—ŁŃh4ÍŔG Ě4=&Řç3)ǤcÔŚo`1š-Ý.flv€N)ڞŮ\Âłęz+âLXRSaˇYQ]SäÄ$ŮÚ-*˘ĽH, éé°ZmŇĹbýşľ˛D%dIIIČČČ@Ey:ŹČĘƟÇía˘sőęŐ3f4v˜źƒ,3IAŘÎ;OGvVJKKQQQŚN• źË–.“ĺ6óňňä>pß8ačĐLŮqG”‰ečHFĹ^c̕b8ŤŐŠ&ą~îCBB˘,gIw2şo°§-RęëęĐÔҁ„Žtˆcăp•Č´ť‘Ă-ĆsŘΗXk7/†#mŽü,î— ÂľhLŁŃh4ŰĄ$2ÍOąßËÎÎé"0#Ľ[śŔ‘—+íţy/÷˝>ßち!´eB™/&!ą‰Šžżš…]Ęüç÷ďK÷2E[[ŤˆĎPěv0’••#ϕˇŔ,ܸGÇIFŁŮ^yňé¤ű˜w# şž_{ő?qŢ—ů§şş×ţßMxäĄ;e>žwÝľ—Š\Jyô™­Z.’%;Y3PÇźoş ŤVŻ ¸ž‹.<[äšŇŒ'ƒ¸ iú–9sö•ƒFŁŃh*GCgůĚĚ ĚˆoÄşö6˘H!“'źs?Î9ÝF7ł8 R†$cţ†:ěüŘo¸qÎH\ˇĎpDŠ•U­(oč@ZB”Ąů¨ŸöŸçF´gń\eeeĘsGtŽEŁŃh4šm›­ă›Ş4„ÓPëÝpȁ˘'ťľ1Ĺ_şäŒnç2éXfw §œ_­âľŠÉ‰´Ş%ˆNHB^~>ňóňDƒo6rsr#~“’eS şč&Ö(^›1lřéF‘W}}eˆ’ĚŹ,Ů•ÉM6ˇ´4c§v’"ľ_ţ*Ĺi3f̐Ľ1—,Y‚ń9'MÂşukąrĹJŒ7C†Á*ąžĆFWŔl‰˛Č ™d+Wސď, ›Ő*ˇËr^öÜ [Úȑ#ECh”ěAŮÚֆŽöv´ś´ČmˇX˘‘–œ€ôŚMhs¸ŽŐć>&p›ž9Ý%DŐŕpőąýö†Íq;_‡:MŁŃh4šm•ü˘[ŞŤÜQך­˝MÄ-N”–•uéikXƒßńPÝˌ㡸—yoC¨ źPĆśŚ{1K—ˇľut‹oL&‹L6ó\šţ։KFŁŃh…e żůöÇ óíąÇ.Řwöžçů駸ů–{üNç˝úŹ3OÁ“OÜ'r:Ůčoč8v÷]7âŞ+.(.{ü‰çńŢű\פIăqě1‡#t.űţűŸĄŃh4&źçvśŤÄÇÇaö.ÓżöXŇóÝ H”ƒl 9yY ˆ‹1ă˙Ţ[ÝŸü”wujď)+ŤZ€V+˘L@˙î›Sž›„5?ˆsľłl §<ŚÎĺh4F3xŃ3ME¸D§.‡ž•ˑаÁőŕp5š2|4šƒ^ŁŔŒCS;¤Č*căŻhßź­˛Ô%KMÖŐŐaóćÍhjjDUU#ĹŇÓÓQ-ŢcéÉ͛7ÉňI…ŁFI÷°Žśvš Eg‹qÚoż.DG{‡šľ‹†ăĽK—"!>A,SˆÚÚZŹ_żC PXX(ÝÎJJJ°Ł˜—šk׏•⚤Ä$)R:t(***ąjĺJ¤‰†iž7lŘ0)„cÉM~öƍĹű1˛Ç.lib{sĹvS4—’‡¤˛Eˆ/[Ť‰˝[\Ělîăb7ˆËTĎop\É´ˇ6I§4%ě çÜi4Fł-n"355fswŽ-Ľ%"ŽqHa{÷Ďđ=xťB[Ś'ë×- a8™ő‡{Ymm ě;Š‹6ŔKT´t’Ó‰KFŁŃhzÇO>Ň|W]yąiâ7ßĂÏ<pž;OĹ{ト3N?ɧŰY_Ŕ’˜o˝ůćî?;ŕ|ožő~Đ폎ŽÂżŽť<¤mňÉtîEŁŃh4?ë,ÇrĆðsýb˜SĽƒ™ÓÝ"čß@žnů$ş™e IÄOëj0푅¸őťč-Ë+[d㑻ŚM˙í?Sœ›‹sUŕłuO:Ej4FŁřh™Ć/=M†Šĺ¤{™ÝÓć_`l§5ş–ßSC}+`ńfTk3ĆŹ}KŢbĆčxYň’Ľ† ‘ÂŽ‚a°ÚŹŇ}lÓŚRFaW´hx?n<š›šP^V*>یֶVčćĺćaÉŇ%¨Ă“§ěˆhą> ɔHŒëِ-!1A:Śqźź˘\NË/]˛ŐUŐbŮ)rY~ŽC4€675#++ ăÇOŔ–-Ľ˛a”b8ƒŃŁG‰FĐx)$kh¨—g›š˝bJKJPÝÔ†Ö ůűۈćqűnuş\̔ƒY×ÜůÂ!žąm‰c퐢>ă9đ×h4f{'PR‹Î¤œžš–Ţ́‹÷ÓúúzTˆ¸€q…a~ǡŽ{™˙ű~oĆBŻ7Ë´ľśÉN•ĺpřXQzzŚÜß@3¸Ôh4&8˖­Ä×ßütžüü<üűú+ƒÎG°G{6ŕ<Œľ.šř\źöę3řÓs–čě t^{ášGđŕˇuMŁ¸ěŚ›ďF0¸Ýt0 ʕŤńĺWßBŁŃh4ší‘Ţ<Ťedľ˜9†ĂQźćä,™4–jčÓîÜœŃeĆ5oŻÂO-ÂďeMč)ËŤšÁF%ŐVԛí yş8ć”,8ĹšŮWœ#ž+ž3‰óŻŃh4f`&LBq/ă{mmm°u´"fĺëRʨœŒĄÄeîż=Ž\N—KW“UĚ.bI§¸:ÓjKóó=hÜçJtXâoq ŚşF:WTTTČň—,9|řpšźÍf“ĂŠĺË0zĚŮH/’˜ X˝zěI1y‡É0‰ذ~ň‡ ‘ërPœŐŃ.Ë%в˜Â8‡("‹[ÉR—,‰9zĚX‘5ańżcda!&í°ƒtWkkm•Żuőu1b¸{mŮR"׹bů š}---ČËËGť8. ńqč°9“œű†Ÿ4˙)˜ŰZ`5ťšŽ;ě@ŹŮu<&÷ Ž™ĄO ŽußÁ1~/yĚCqôŕůń°ű{ Óî°˘Őn…Ői‡Őa‡ÍÓŁIł=a˙˘LfD›-ˆ6YÄoE´řECŁŃl_đްÚ{~—p)VŢŻëjŤťÍOńxވ6oڄѣÇÂb1@÷2ăřŕr/cüURZ"Ç+Ť*áÉ…ÜÜ\yŽź¤Ă_jźŁă ŃqFŁé/nšő^ě2kş~‚`Ç^y孀ó=úŘ3¨9›ŤŻş$ Ó×Ř1Łpç7 ¨hŁt?űř“/PYYŢ’’Œ˙´ŽúóĄ! ÁEqÁœËČŢ{OúKĐů‡<Ś|Őh4FÓI8ů>ď'&&`âÄń˜ö֗ř}ĎÂ^_)r*śp7Œře`OgŰQjœh‡’„×TcÚ#ő¸aߑř—ÂĄ]4ý^Ţ sœĹKÖÇű'âsćL]ţ*&˝ŻkłšJdĆFšDfˆ˘‹–#Łů2”M>5{!!6A&*éFĆÌô ‘ˆŹDrr ŞDcäЂŒ=F6Rr>ş‰555a츹2ذa=˛˛˛Ľ°Ě"_ş—ńłę––ŽŒŒ ´śśJ—’üźIËßEňoo ­Ĺ†ń`%^­vq⑐˜€‚Ąů2OӓűüşuE¸ěŠ˙“ŻÁHOOĂ#݉ÔԔ ó֋|Ň}÷?FŁŃhśwÂu—÷…ěŔ/îĂ;Lš„™ďż…{]GC•Xš‡Ô`şł:Ý.}Réś04 ××búC pűŁqށă2ňěĺ€Ő!ŰŇ|ŚsŒDjűĽ{Yf|wv8l/ٙ km¨lí܍ÎĎhÂAçg4ÍöŽ˜iúYÓfEüĆĎeĚßEěĎű,Egvxę>2~¤ĐťŚš3VŠr ̤ Jź:Äü ËžD܆ďa›8Íšű"}‡ŮbZ,-ˆśˆáZ +(‰ĎénQ8Ş•ĺ¨ohđż(~cŔJ‘Řˆ#0vü8éPśrĹ Lž¸TUUĄşş&L”ŰśfíZ‘ČL@ڞšpbƒÖŽŮ€#Gb‡É“Q^V*Ë`ĆuÄÁfˇa̘ąhkoG›Í‰†v |ăZŒŠŽAô˘×1dËb´7;ĐÁÎľbżĚƚ .‘Çĺá1{#C /ß6Ic8ˆ]‡­ř'8‡í€vń™Şá5‹Ů`s5kÁZňľ ąŚ'đá°É֎ ě'E/#ŤŃhśmüő”U'ˆ{~~~žˆ*Ä}šű}‡ąDbR2ĘË+ô´ ăÚ°{™s@ş—5ˆ8­ŞŞMÍMhlhôŸ˜LŃňœ°Üš÷ôÁŘ3VÇ5šŢ ăFIŹVnźé.<ńř˝AوřčĂwá”SĎGyEeŔyËDœtúß.ÂI'ƒóĎ;CĆWᐝ)‡HŃŃaĹsĎ˙O=ő‚ĚŐƒĺž{ôn‘7†P¸íŽűQWWFŁŃh4žń•ń—›!4(,‰ÇŻÁŻEżÁœ6öş2ßĎýƒŘĐLšşçä$ ŚĹŠ+ß\O×TăރÇbÇ\ßnf‹+šńâü$dą&ć‹Äö‹F>sF>LE‹Ä9ÉĂ(ŃöĆsäM Í@ĚŮčüŒŚ7čüŒFŁŮŃލš Ő˝ĚjľĘň˜ŽćJÄŐ,r]en‘”šËa(ăN]ÎŹ žŐĺŕŐŃQ"*łZžnfâfźřcěđóľHüđ<$Ź~ ›–˘ąÍ†‚QŸŒ¤äTÔ7ÔcĺʕŇE,?/ÍMMŇŁŚĆU2süřńˆŠŠÂď‹~“Ă;ďźłt[ştŠt<'ŚłœćęŐŤĽ;YŽxoÝşuhin–s”Hźr>ŠĘV,[&Śçbذár‡â’2°Ş¸Í­mȡT#ÝŤ˜šôVäz-Ň7˙‡ÝSŒkŸĚnáó¸ŇšMě”ű›IŁ5ŠÇ3ˆĚ\Í%,s(8ş˝-{Oűv)îëmĄFľŐbĐAžŚ7đúáuÄëIŁŃlťô&YĽ–Ľˆ)++KܛcüÎ[S]%QévÚŘԀĐÖď{<˄/ôîeM(++•żŃ›6n‚?bbcĽĐŸç† ćň˜:ŽŃD×h4šH˛`á"<ńäó!ÍKÁ÷ŁŢœěŹ óÚívźđßWqđ'ă㏿€ĂąuJ ŃQíčcOĹC?˛¸ěÁnÇÄ ă ,ůᇟa{çő—_ćăĹ_ĆłĎ>/žř ÍÍú~¤Ńh4šČ ž÷ÍfłČÍdb„ńŘo˧0ĽfËĈꍿ­ 6Ńؓ…ôü$|ľź ÓYˆż¸‹J›şŸů% řÓsżË6ĄÄK˙mŁh÷2Ľd‹sń™<'™™ňĎŮ`Cçg4‘@çg4Íö†v0Ótَâ$ œˆĽb˘íípşŻ2ľVЇ˘XŒB2‹˜OźaóT6V;íTQdĺÖUI¤ƒ\oĐŃĚŢnEbŃŻ0˙Š´ô؆LGGŢX‡î† Œž8 )YhhnDG›íbĺöŚfŽ’ëúő×_ĽČlę´iR4śjĺJLœ8Qź7•¨­­Ĺ˜1cägŻ^ľ ń ń˜2eŠěőşdÉŒY(‚ę(ĉ†Î‚ŃÉŘRـڪ2Œ– ”ĎÇä-ß!yůJD—/šŐľoítnăń°zí\Â2ł׉ýk˘Ň;w]ÄeN—әǙ˜âsÚj7#&f l6˘ŁŁ=ç3\łänVŮш{4šHÁ^%´1ΎI†FŁŮ~T˘Á{dII‰6Ź‹×ű]ç–-[0dčP1O1F")1šOÝËü9™!l÷˛Ŕą^š—57ˇ TCłHR.[śÔoěa6GŁ `˜lěUÉËް5c×h"Žk4M¤xü‰ç1męŽŘu×Aç3ş/<˙(Î=˙Rm :?ÝÎŽźú<öÄs8óo'ă ÷—ţúĆvóžţ^ ç–/_ňr™™é˛,ćĉăCšíş ¸ĺÖ{ą˝°rĺ*\sÍ˙aŁWǀ_|N66k4FCüĺ`Âu1KJJÂhw0}"ć/ţuăçŔžeŤai„ťĎŒEVN˘4TxđŤőxxA ŚIĆđÔ84vŘ0o}lvd§ÇÉ›ý‚ĂːąHçŕ€éDťŮ(ynźé‰{ŮÖĘŃčüŒ&ŇčüŒFŁŮ^Đ3Mđ×@Ë÷Y˘‘'Kń'0Guöpđ´eşĚd°lr‰ŞÚm˘‘śĆ-Ś2ťJcŇŃËăÜŐšhçˆ[¤ćŕüM ˆ]ů5V $<ŒŹ´Ąp GGö°%Eł5c§ą)Xşz ň†ŽŔäťËmXąv­’—Œ&ŤľŐŐ2d(b’2°ĽşQöĚ1~Šu-IÉüź\LŘa2lÍ5ظfĆICL]rkGLÍ*Ä,-AtS-˘)(ł QmŃn×6G×R—ÜW“ĂőʎźfˇŁ÷ŸĺŢZŒ ו4Ő×7ÚÝśęt?éz&Vиé7 wŒ<J`6˜ŃAžŚŻŕuĹëKűÍöK°d'˛¤ŔlăFˇŘýŽ§źŹ yšy.‘ŮČQRĺűó|ŢĆЖéĐŤgîeœĚBq/kmmAɖٸüÇ‹ˆč˜ >Ěgň2­­Žk4}…Žk4M$ ťŘ5×݈×_}NŠŹ‚1dHžöaœáĺXśl%BaÆb\{ÝÍxŕ'pđÁsqŘaJąZ$Ůźy >řđ3ź˙Á'Ř´Š$Źe‡ ŠÇ˝CBšŸeÓ/żâ_žŽ–Ű:,k~ÁG}˝Ë˝7FÄhééi˛üé@—566bß}ăgœq*Î?˙\h4fđaĚŮĐa~Ô¨Q8|ŐçxÁ´Ÿh㉇ÓĘ{ŻĀŔ]éŰtťhLJŒ1#17m˘ÍjáĆz,´ÖČĆŁ¸¤¤%ÄÂfwôxýáMwÂ$Ž9g:Ü´Vœ‹šŇaŢłě t/ÓůM_Ąó3f{@ Ě4]$ eŠąŹVěmľH)'Ż0'Űd Ÿ—˜ĘäIŃ­ŤĄ’Îg"9 °ď‰˜šKk*§/ł{5fĂ{&ˇËźLŃ.g3łÍKŐ&˜Ĺ°î¤‰÷†XŁĐţu,LŠé˜‘/2ŽĂŃbNBtJ†śt ŽŁń1ńč°Ů`‰˛[>âě6˜jŞ[+bśX`ęhƎ-•ˆŰTGm’œ5ŐŢÓĘ&˜lŽívşKWÚ)ƒť„e‡ŤÖlpd3+™wvî›ÚżąŽŞF`\žxĎášG• u˘ł´¨ZŠ…ĺC—˝ ŰÔŁd’“ 㾜Ë’;Y h'Ťƒ|M_Âë‹×YFt"4ÍśE ˇ˛PąX,HMMÁĐĄCQR˛ŃuĎő?§˛ŞR$<łEŁé: >))Šýć^¨üdx"2ľ>ßăw>–P*)Ů,ŽŠKţX"´ý9“™D€7tč0qL“ĺ9é>Ý÷qhč¸FÓ×č¸FŁŃD‚ŞŞüăŇkńÄc÷ ...čü=űĚC¸íśűđÖŰ Tčhöěs/ˁł]w‰]v™Ž§O•.˛á@q×ďż/Ĺ/óĹĎż,”ne=‰gďłnşńZs„ó_×\{Ö­+ÂöÂgŸ}á—~řĄ¸úę+dçĆŢĆݍFŁŮžŐĹL3&Ą‹ŮĚ'á—ďŸÁŞ=/„mÝ"—C{5ňEĽ FƒyşS6|ą"!›Óeşt.ëŻí9ËČń˙ýC˜šçDy.Tœč/'Ş{ŮÖ@çg4}ÎĎh4šm-0ÓD ĺ^ĆWsŐbÄ8;ƒPś:\Żt/v:;ßfG‹–Vˇ—Ľł\¤GDć^…Wy¸R¸e ~-Žŕ[š›Ń!ĚŮaŰcƒšĽqÎÍbŚH1šJsćZ\‚7§[¤U`f€îZ?§ÉMwŚt^6ťŘĚîĎrŚÍŘ kŘD“aűŒîeĆCŁDg|.ŕG°ü%]Ę:ŹŽőŚÄVŤ{Ü"6uLäzœŽ•ÄW-A{s­HđĺČdg(%'b™Ě&[›´“ ‡˛Ćjźłô[,Ü´KË×ŁŚĽAŸôřŒĎÝGNÁĄwÇĐÔh4 ^g1& ’˘‚7žh4šÁO¸IĚäädŒ1LŠĄ”óŞ/xĎ­ŤŤ•ŹĹĹE(Z€Œ.˝9ás<𶆿LOaýí^VW_‹ň˛róEaé˛e°Úl"Vňżƒt/ă9ŕšP śŢą:ŽŃô:ŽŃh4‘ŕ÷ߗŕ˛+ŽÇ}÷ÜRN!.6˙žţJěąÇ.¸ţߡĄŠŠáŔ“^|é5ůwnN6 GˆűűÓK‰ž¸î––Ô74Š˜k“JKËĽX˝§PŔ~öY§âœłO Ť÷íw>€/żúŰ%%[<ăçž{–Ç90:—h4Śď‰Dç?EFFƏ‹Şkp뚟ŕȟGŮWƒ’ÂűŁôß˝˙Ű.ÚÔňF!Vó&fŠs0Nž‹HŃß1„ÎĎhú ŸŃh4Ű2Z`Ś ˙ ‡3)lÚň~yz>¨ną–[Ĺ˙DŒ*Ef1Q.q•rń2˜su Ë܊,šŹłsůbRŰä÷lšÓő™Ü;:EYP1¸^•pËónšĂ˝˛ł†ű}ĺ8frvn†RŒÉĎw˙­Dqę3=ă†ivtş–q9N™,{)Öec/ƒŘěîu›]â3“ŠóH›8~IŚ&XKçÙzˆ<L”śDŸCěQľ%äůŕßúŐ řpĹâXŮ}NçđÍúßpÇźqř{â_s˙&´E­Ćݎ„¨Xńľ×IqFÓ62fgg#//ee[@eľZQ[K‘Y&6mŢŤÍŠÜÜ|ĂÝÝČŽ{™Q8†năuNŤŞŞC•lŹţý÷?DĚ(•&˙ šfs ňó‡Črá4ř˘żă"×hú×h4šHđíˇ?â†˙܁˙ÜpuČ÷ΚűĎĆřqcpÓÍwK'ąžBw3˝YG¨Lš4˙şîrů<ú4^yĺ-loŘl6ϸą4–FŁŃh4án@ž˛L&KaŸ°ĺ•ăݜt#v1Ů3­˛š3ď?]Žď2|źzňMčoŚÝ{*j[dĎĄE˙x>Źey˝ńşÓ–ĹÍś…żž˛á&1y/0a*DC§C$”éœěvjjŞešĚ˛˛2Y˛zř°á°¸Ý?Ž{Y—9ş‡ę^ćĎɌJËJŃŘĐ …bż.\$â$–Ĺôżs&xĹÄĆÉĘ<áĆ):Ž ×č¸FŁŃ "éôŃ[Ţ}ďcé vé?/ůž:|xžxü^|üɗ¸űî‡PQY…Hrr.źŕ,üĺŘ#|–ŕÄË/żÇ…žŽy.şčüôÓ/ÝŢße—==ă{îš;îťďî.Ó;::đŃGŸŕŤŻćaőę5¨ŤŤ—Ç=??ťî: ÇwlP‘Ú7ß|+׹dÉRÔÖÖ!..ŘgŸ˝püńARR’gŢçž{=ôh—ĺŸyćy9qăÊs÷BˇĎŕvž÷޲üçÚľkŃŇŇ*ŻűɓwŔ!‡ŒŮł÷öŰŃaÖŹ=d.ôěł˙†3Ď<oźń–\WqńFůđŢ{oaȐ|h4ÍöL¤bŽ'>>3fL—÷„˝ć?†ďwż śËDىť_œzzŘÓŮKÎHěůă]˜2kŚOŸ*ĎA¤č-ÎĎ Lt~FŁŃhZ`ŚńЛ@ŸËŇšC–Çl-GŹ­ˆv7Šş§ˆšŔL׎$—6‹X­ľÍő>ÍXŚŇťTf÷/sç¸k#ĐŠ3u.ëpד”:4ƒHM‰Ě”ĐMŠĎ ą´:&Ł+™[ĐÖMlf\]hjYš­f×vqßÔţ[Ü.f@Włxń팋bX6ÔÂQŽg%š?îýٰ,NÄ&ŒO,ÄßÉ5Ÿ˘˘ăR´ˇGÉDW¸ÉŇ­‰MÜP-ŠŸž˙núâ9ĎCIüŰŤp*Žš2ӇŽG^rŚ8ĆNli¨Ć|ń ůîňďđý†?äźŮ‰ižőpŻţńΘu(ţą×ńĐlŸđşK‰ŠG”îńŚŃh|@­ŃŁ eăX JQŒƒ8TWWÉłúúzŹj]…# ‘˜ ’ ٽ̟ˆĚ7Ą¸—ąŒUɖŘDœhŢď “ŽeĘbş—=Z{ę!;ĐqfkĄăF)^ř,ĺu×^RšLĹA÷ÚM.˙ň˙Ţ1Ql=ö˜ĂqĆé'!##áB粁$.¨ŹYłW\q56mÚÜĺ} 8,_žBŠąîšçNLşSˇĺŰÚÚäň?ţřs—÷™w\ąbĽŢzë<üđ(,‰žR^^Žüăr㊎ŽÁ7ß|'‡wžŽ[o˝1h9°+Żźóć}FŁŃ„N¸9đ÷x睧JW͒_žĹúY§Áśáw‘cÖâÔÓØî QQ#Ś`¤8ƇO'9ó\ʨ`°š—éüŒfkĄó3f[D Ě4ń*ÉŢy˛*ňt1đŇ~,ŸvÜq Ž8â0ĎžŚ§§AŁŃh4豋™w~†đovFŤŹŹÂ™˘!éś_ ~Ě^°oZ.ÚFtsgD°Ű`6 )â؞5)ŁF”Çœ—…Cçvt~ŚçčüLďŃůFł­Ą#.MŻQ˝G(f˛Y;Zň!L˘-ĐŠlš ÎeRźe‡:q%'í­Ž˛-ą€Őć›ĹÇÁ#ţ’ËÄ[F‡0% óˆË ˛.Ngč•…e&t:“™ŒB6Nt—áôĚçžîtť‰9Űäč,eŠćUó]Ř`ÚqŸŘŢjsşÄd,{ɒĄ"•šęŢƘNĄEŒ›ÝÝÍLćÎmŁĐ,ŞúgX3w’e2)03žŤ\&łŮŢtžŇĆj\ţáCž Ÿ–šOs5’c‚.;!{„ț‹çá>č+Žž2ší^:Đ×hś-"Yf*Uܐ'Ož„Ÿžč(sŔR™ŠĆĆ٘Ĺr>eĽĽh¨ŻGAÁpŮČŮWîeĆńȸ—ů>~ÄjlP+++•Řđ¸|ůJŮ0má ą4ŚŮ)SvÇ|0ŁăÍÖDÇ5&’|ýÍ8çœŕţűn [ ĹR×§z‚w}˙ĂĎx˙ýOđ͡?ˆ’} ÝÜwŰm&=ř̙łW—ÜH80žšćڛđĺWßb{dčĐ!žńńăÇyf÷ĺ˜˙ÁyëÎ;ďlüío§w™ž÷Ţ{a‡&á_˙şAƇ,MyÔQGzŚS Ʋ˜d÷Ýw•Ľ71ä̙3D#÷(Üxă-زĽüą3fě,m8pyËbrđĹr—qÝ7Ýt8`˙.Ó˙üç#pç÷ŕľ×ŢŔ˛eËńúëo⤓Nđš.ŠËXňó˛Ëţ1¨:Ch4Í@ P@ós ™÷›ó×ŕîňUhĎGéjDCÓ ě6˜‡ŒEŒ8Śç§mF^ŢXyŹCËç L÷2˘ó3š­‰ÎĎh4šm -0ÓHzŰřJ›zťÝSÓ&Äľn(|r‹Ż œŔn1”[ŒĺqÓăĹ˝55É%0ăě-íŽ2’í.Gݎ“™\ĆÜ)Đň8€â[ŠťTźëq1sżFć“ĺ3 ˘/ĺTŚDc*üőˆÁĂFŁ‹#šqœč ÉRőîY( ł;;Emfˇ#›:D|ßČhq Äţ&ˆc˜ír)“âš(׌f5łrvsP%CĹ|I_BUኢ7 )))îýŘIŽv‡¸†”5\nűę´¸kßłI¨AžZ_ůŃ#ž‡…˝FMĂżö?ší^źcÍ:ĄŃl„ëbFFމŇŇ2oBR˘9¤äřt˝ŕý˜%ŚÖŹY…ŹĚ, 2ŻRSÓ˝Ě8X¨Ćý,Ż(G]mŤäšřű矊e!Ć!&ŃP+Žóp >ƒ×hś6:ŽŃh4‘fŃďKđ—ăÎŔíˇ]iÓvD¸D‰„Ďě}öÝŤžűî'üüËBü2˙7é 23Ó1kÖΘ5s:öŮ{dee 7Ź]ˇ—_ń/Ź[WMhœqĆi8ě°CđŰożăOšësž<ˇŢz‡ďąÜĽĆÚ‡+†Úe—Y>´é6jT!&LßÍí6*++ńÉ'ŸÉń“O>ą›¸Œ0výç?/ĆO?ý,K}ţďŻú˜ĺädă˙řť—i4MÂéJ~†ůöŢ{O´´´âŹŐ?ŕĄć˜r á¨Ř Ú ˘Í8]Ćáă==ÝÝŽeˇÂ"Ž!šŞqVŰ(7VcŁ h¨Ľ1Ńß÷KŸŃlmt~FŁŃlkh™&d•ǤS@ŃĽóevx˘RđË-śRj+Ë-Ěbǒä4i&Í(´jmŹvŔfb]ÓÔ§23şť•ĄóoƎˇ8Íá4ˆżÜŸĽ–ő8’Ąs[MJgPcQŁs™Ú'¸w_-gŘíNAœŠłLŚÓ-6cľ-î7Ĺeq1,'!ĆS:]Ęŕż9ÇVmŁŠsœóĆŮ6ÁÔ^ G\˘˙müĂu*ë/głV{đŢËeŐř`ůrœľďo9🰃üŐUqţ[wÁć°ÉżÇgŔĂžQ˛Đžóř…X_]"푿9ďQŹ­ÚŒxó7-GmKňS˛pč¤=qŢŽG!!Ćwy‘Śö<ťŕC|ąf6Ԕ˘Ő֎Lq1Ě(˜ˆÓf,_~˙:îţöĺ.ËßňŐsr u9ž°{—élYƒ}Š—Ł´ą qâË545ť˜‚żÍ:CR˛Ńli¨ÄsbżžY÷;67”Ë/˜Ě8nWœźóĎe}[^Xř1>\ń#ŠëJĹ÷%3Ĺq¸lö‰˜3‘‚ץô5šm‹H•bŕ8]Řs“n ­-ÍHHčZ&Çß=“ďł O||‚œ^YU‰ÚşZ 2T4„f‰űˇGÖn܂.Űb\—aÍ~ǍîeœĚzV]ĆšMuľľ¨¨Źp•KŽÂÚŐEŘźYÄ#fsHe1I”¸Ľ¤Śbúôi]1ccŽk:ŃqMwt\ŁŃhB‰O"éÄ)ĘĘ+pƙÇEž…ÓO;ąÇ÷蔔drČr ›6•`ŮňUذĄEĹQT´ UUUhnn Ç-]–1X232¤(}äČa(9ă'ŒĹ˜Ń…ˆďźű‘,‹É|×@#”ăž5ă§ěělżâ2â*A…ÖV VĐ]—Íň\űyäá"?ÖÝńaʔÉč)_~9Oć0ů9ÇŹßůčÄ{Č!áąÇž”"Ȣ˘bq˝č6ß´iS=ĺB5F>Ą¸–yçg8đţ0{ö^˛cßŮkŢÇăšGÜ=ŽŠ"Ůŕäô4ŘŔ§7ťžn˜.žÍ9#ശᜪ÷1fěhylyŒUŽ+AŮ@ĘăčüL':?ӝŸŃh4šđŃOżż„“Čt•Ç´"Šâ[)ˆňŻLƒÇ nQ•{Ył[ÄăœY]b+ŠŹÚÚ›M:ó˘Ý.fqľR&÷}˜í•ˇ`LĹĂfoQ›Ó,+a–ÇĚÔ)S/&%ŢB§ŕŹ‹` čt83u~Ś:TŢe3Ću›:…e%0ĺz?Ę˝Ď,+^č^–äÉuŮŃ)$łś;dAą×Wţ)ŹÉgÉd¨Q`Żs[ý .~÷^´ZŰťźĎ‡/üö1ž:öě[ŘmŮ Ő[äqÜX×ŮŤëůbíü¸q ^;ůfDŠPŽCFłín)ÂFÍ]w…Żžúíí6ńw BĽ˝˝MÜŚÍHNJFk[+Š7cKéd‰F¸üÜDÄn^.fœć‰c“Pý)ŞGœ&’e]Ť`çsk ÎŹŽŕւË<ăžź˝3Nő&Ůs‚$‹ŕţŮăŽC^r&ú‚6[;ţůţČIĘŔą;ÎAfB*—­Ă|%VVVážo˙‡˙3X$;ąsţ[wz‚ü™Ă&áĎSf#56ËĹüĎ-řÍm¸őŤç1Ł`<Ś šăfŠ–L …›WČĺĆe ÇŮť!ÇwĘăY˙Kż}ŠG~|SŽł'Î!÷Ŕ.âa‰˝_Žýß­_$×˙÷wîĹ7ç?v/pťÎ}óšüÜýÇÎČaaŻ_Ž]ˆE%ŤPÚP…Ó^šŸy˛;¸"Ů|Ćë7y‚|>:i/qŢ2°şr#>[5_>@´Ű; Bš5Íŕ#ŇĽrrr0cĆ4üüóÓXFH-Š–ÖDGE!!>MÍM(ݲ•ČÉÍENvn—R?Ď˝Ě ›HÜÖVWŁşŚZ&qšt‰]đ󯢸I:˛…OX˘bäŔr[tź ž–ÂąPŃqŽkt\ŁŃh" Ý=yß(üđĂ/8üˆ“¤“ŮßÎ811}×#?)Šď<Œq(*ťóî‡P[[‡Ä`sÇŞŻŻÇkŻ˝ŻżţkÖŹő”ź4(>żîşŤĺ´Ď>űBž Ž‹),‰ÝvŰGu¤OąW(ĐOńç?ňrj4Śwô4?ăkáô!C†HA9Żčm<‘r0d<ě[V3áŕýŹÁÚ.Ś‹çXːą0וâœĆĎ1Ö-.ă1ő%.붎\SĄó3:?Łó3FY´ŔLÓë’ ě(íí›Ö‰ĆR§ÇqË#ŽňX†š‡ű=ŁX”K”eŻQÉ.ZŒ¸ßÊüdfâ•6›nîĄÝőž3Ú%ز[˜ts—Î4ťćĽ ÍłƈÚŕ@ćŔĄÓUÍ3ŸA”&˙tçĔÍS Žň›Ćĺ”Č )ˇ_:‹ŰeŒB:n;_ŁéÎ&â›(–ĹŒu-ďPŽeč* 󔾎/ŕ)*f͋PŰQ [l˛ąz 6Ŕ*lNGĐyVT{Ƨ‹ WQTS†Ď×ĚÇÜął02#ŻűşE@yŢŰw‰ĺ‹äßQâB{ô¨Ë1!{––­ÇűËżĂá;ěíłCOŠjŽĂ$ąž×Ož‰ą.'–“İwáN¸@l ykÉ׸zÎ)b{\eŔ–ˆmĄ•2a˙ęÉ7ŠëĂuU2(ßťp*Ž{ń:¤Ĺ'á73ЧM/›xxPţ1âÁ‚ƒ7_ŻűM\{ً„˝6ćŒŮŮ3í´‡ŕ’÷îĹ;KżEMk˝ ÁŃ;î‹ŢÂŕţŠ–ŻüěǎšRœ§™žéîq núâ9<5˙]T6×âĄŢŔż8Ó3ýéďKťfRš‹×˙z“ě¤ŕ>ŸňĘĐŇ™˛%Ą\‡fۢ'ĽȘ1cdŠĚŐŤ×Â,něqąć°îłi9Úۏ¨˜(466aKI‰›%'§ +3éé"ę;\ď­{Y e|ÍÇýŚxŒŽeM"NqJÇ2ťÝß~[,Üęä=+×2bąD‹é8Œ7V ă°­ ă×č¸FŁŃ„C x„÷V‡¸ďҙź•5tLôągđŮç_áęŤţY3§c0˛bĺjÜ|Ë=Xźx"ʕ>Pœ5Pň=ŤV­ĆE]"ădENN6F*”Ő…í´ÓޏęŞkQZZćstł˝ĺ–qꊕe2.üUşŽQ`šaC‘^yĺ5œwŢŮ8ýôS.=̓†ÓSŁŃh4áă+ň—“Qž7lŘ0ě˝÷˛mä˘ÍóđdŰT4 ŰŽÍ+Ým'î2:ź>i;›î*3jĎę‰[ă,çďQ8{íľ‡<–ţÄeÁĘdÄö'ŸŃůŸŃh4šČ˘fš0îŢA>Š,™°áX Ľ˝Ľł˜łÓL Ę(¨˛¸CYS×A §(Ž’qUźŠ!ĘÄşKeR4&…f–eƒÓ%"łs›u¸„[JĚeq‹Żş9^ĄśĎcaćŢ÷ߞm5ŠÇř–ĄÜ§g}NƒđĚ0ŰEAY4|8fĎśŕűďÄĽUkđÄęr”M8vŠĚśÎĆŸ‹ŐśĄén§˰ńČ[ů)ÎÎm@vÖp). ä\,ŽhĽ1:?Łó3:?ŁŃh4‘Ĺ Ś0×Ńa…łŁ)őßHÜ"'UśQşl™\îdŽ)×-5ÍléH™ŁĹ*âĐ † :U É@ŒOaňHIRůš@ťYń~ŹËé,&Ę5X %3‰rS#“ÁľĚ sŞWˇó˜Łó™a=œÇăPfܟ+Ĺm&—Ł;šĆ‰}Š۝ ö%1Ő5đo–`ËCžkŸí"Îłš+1đřđxЍ̥Bƒ§$&Ľ—™űkę<ţ­Ĺ–żç>G˝łqí­Ë]¤°şž Ö}ľc׾5⤗ŽÇ˛ň ž÷î˙ţ5źţGgÂ𒽎óôhnoőXł|¤ŮyčŸďÉ.đŒWˇt–X—=\îy{É×xyŃgŇ:ŘHo­•“b|ůí6+l^îůťĄľ‘૵ =ă‡íŕ;ém‰ĆěQ.a~ÖVť2jÄřJwďŸěÄtě3ʡřŕĎSöFŁŃ„BO­ű•fÜ}÷ݐ——ƒ††VŘl=o˜¤˜ËfłIĄËčbĆűoee9V­Z‰Eż-Ċ˰šd“,;dw—Ф{ˇĄąąeĺe˘Ąx­hÄ[†â"‘˜Ş­•ÓX´¤¤~đ9žüü):ë)Kââ“Ĺ˕eŽŤŹ7č¸FÇ5žĐqFŁń†t’™™…Î˘ß—ŕÂż_‰SO;_4îţŒĘďb;/¸č ű—ÓńţŸ hqÉĘr•čĽ2KJś`ýzWÜrěąGăźóÎń+.cĚq"ą6}ú4üăÇŁ>čy˙Ł>A¸ĐM47ˇH74FŁŃô?ሑB:)áŮĐĄC1gÎl ‚ËĆ81Ꮧa>Y4”$Á)î÷ŢÍ9žv!śĽéŒyDĂÉ„?ţ'ŃĐ!ůň˜ĹežŽo8‡:m  ó3:?㠝ŸŃh4ßh3OB)ᒥn)˘Lí‘…cžr’—5$;4•‹—GÄep(–ë`)Ě6ˇf+N\¨ăŰÄ{-Žiœ`§s™ŐőęTe3Ż]öÇkťĽfĚŮU<ŚÄYfľ]nÁÜB2§×ňjşą¨Ů ô2šƒ%Ú-sŞD¨)Ö5đoťŘ/›ˆŤěbŸ-‰âýĂ6ş‰Sm#źÄdĆĎt Đ$âłëżB˝ľ^œ§(Ůh­\̌ ţú¸ÁTüŹžŠŽ\ÎWŇP…é.[âGŽş'˝|˝ U°˙â‰˙–Aâýß˝ęYţ/;폋E Ż(kŹńŒg&¤ Ň$ůŠ%ŸÓŮť„őŕ âOq0ž[ř!:ÄĹ}ÍǏâߟ=…ÉyŁĽ5óŽ#vŔ^…SŐ;7şÍőřbÍŹ,/Ćúšli¨Ǣ 6CřĐ~‚Ăó¤8ć…kBZŚŞŠăDŰI…áüL `#]š#{ěđÁ­ˇ˜°ý 4‹ž–ĘdCß>ű썯žš‡ŞŞ¤¤$ !>=E†â÷8*ʂôôtńYf´ľˇĄĽšYş›q(uĎƒ¸Ř8Ċn,Ÿe‰‚Ůb–=ňŘ ­œĹXĘŇ.î9Šqœ6ţííbÝížWŤľŤ ÎüüƊj,Zô‡řěšďféXÖó~*ŃŃbť’DciöŢ{/OĂšb[›é¸FÇ5 ×h4šŢŔ{"ŸăŰŰ;ŸŸ/Eçƒ ÍÎżđrąÍy8čŔýpôQ‡aذĄŘšÔ×7ŕó/žĆűď"ˇo0ÁăHwä8ŠĽĽĹ3ÎR˜ţřő×ßD\éťqq˖R̟ż@ ż(&óŔ)“Eü+]Ěź…jĄŸšs÷Ç<,ăů˙ýďU\s͕~çýíˇE2ţž6m*’““ĄŃh4š­C çyăo?ßËÎΖ‚ŠŸ~úg‹Üśż>‚ď&ž$^ÓŕŹÜŘYöĆH°‡Ćmaşx^7emTąŘsá#8zęqŹ2e§ż”””Ë[ÎFçgt~FĄó3F´ŔLÓ+Xž==ăK?”B*Š›¤Ę-†ę" sżKM› -y{u‹Ľěí.7/ľ Ý˝XBŇ']y/ńˆ…"4w)IŠ´8Nq™S˝şß“ ľn™GOf’{$Hg2s×íó¸Đ)(3:†)71UžR9´ń}).3¸śÉoœĹ%8ăŤt,Ť‡,óI,1b–T×tĺ¤ćŮ ŤŤܟg꺍ňsܟíhCtă8ăgK1ŕ@.“%6Üę ÜkxTĆPč“›–{ýIš#ń҉7t öOÁ~‹ľÍóđ°×¨i¸ĺŔsşŹďגÎäü¸Źáüßţgˆ‡ŽT<=˙}š řŰɁőâÓâ’qůě“pŇô?!\h‹|őGá›őżu{¨Š2[0&ŤkŤ"cQŹŕů—ćWŔŢĐ֙œNŽK¸LRtdý(“6öÔhśuzS*ӟȌ÷×}÷ŻżţU2`HLŒGoq%÷œˆ‹CRb˘LFP0ŢÚÖ*đ:Dc3ń‹‰H euu ˘Qo#VŻZ+b(‡ŤőVTڰ08ARrr"f͚é)őĺĎ1Î߸Ô Tt\ăBÇ5:ŽŃh4ţ ľtŚë~׌ńă'ˆXcĽĽexćٗđěs/cú´qČ!`÷ÝfaȐ<ô••Őř嗅řč“/D#ó‚ďT揉'É×PcŸ­Őđ;tčwIW‡Œ‹>úĎÝâG^7Üp“ßu|đÁ‡x≧ĺ8ĆŽ8â°nó|řáÇR\FÌéę”ďŮŠŐ|AÝšs÷ĂgŸ}ˇŢzcǎ‘ŽkŢБí˛ËŽDCC#ŇŇRńŃGď čřSŁŃhá–Ę %gCřSsćě‹ âńöčŐ˙ĹëqłĐ§™-Ř.`#YL,“°iŽmiÓ QX83gΐ9­ŢˆËş{™ÎϸĐůŸŃh4šHĄfšĂdŐj…˝Ł ľ_šDSž‰nĄĹdJœev ڎ…S™˛ě5ÇšEXJ&îß‘Ă1'ŠĹi BA–Uü͸ЏšłÝ%ÖrŮýşÝÍěgNgçgŤĎR8Ńš˝Ţ2׆vžxĘ{şK}ĘR–ŞĚ§ĹľQ™Ú1žĺřšöz× Ek÷ęĹ>ZâՇt~ŚçX˙ör/“ëv‹Üŕv<3łün#&ˁ°Vý}ßż‚G|KţýčOo†čW´Řäď]8 Ďw­ě=bÄćp Ňä'gyĆă˘b0>;ô;šIžńĽĺëüŠ×U• ŐڎHĘu¨Ńh?‘L`ÇŮ ľÇť‹ĆŽEXľj:Źvdf¤ôὗe0]Îb‘ĚŠuĆĘmqJ™#čxLl4RS’0lX>ŚM›Ň2ĆńPçó^ŚĄžŸ}ú‘ĎiĄ2věxŒCRR˘ě™<ĐĐqMWt\ŁăFÓsxŸ‘ŽKŁGÁęŐŤ0ŘŮźy‹Ţzűůw\l,FŒ†‘#‡‹×šŻě —˜x1$&¸î{­m,ނ–ÖV)ŞŽŽĹ†˘bmĂŚ.%ˇƍœœÄĹĹŘ|Ž‘+ޏTœ‹b,_žK—.“ƒŠĐnšĺFÜu×˝>fYYYbÚíç0ŠŐ8xCÚmˇÝ,Żo.źđ<\pÁŲSěƒ>"ßKLLŔźyŸ{Ž!ăÇçž{ —_~ľÜĆE‹~—ƒ7Œď˙ţ÷ ¤đMŁŃh4ýOoEfüÝßqÇ)ňžńÇKpfz=ć/Ćî„Ú‘ťÂQ[ gcľ—›Ů`݇ér[0%g”žŒ˘ŸqHű˜ľÓ¤ŚŚb§Ś   ŔľŚ>— $t~Ś+:?Łó3FÓ[´ŔLÓc\3bˇ|(]ˇLng2—3ăÄEwöŽŠĆűœŒg|€6kŠkËĂZwI}…gü ‰ťu ňÉ[Ö Ňě;zg<łŕ}9ÎŢ?{šęsž–ě¤tL2Nî+IOƄœ‘XYQ„š–Ě[÷ćŒŮšŰ˛o.‡Ho¸ed5Mdé+‘“—3fě,EéŠPV^‹ěŹTŮ(¨‰ FqYrrrČËő§KŤŽkt\ŁăFc$Ôr˜ţ ('--M4NÝ&fŢ´‰üŇŞŐkĺ é ëxîéÖŐú+˘KĚ3Ďýôslذ--­ČĘʔ.2§Ÿ~Ş,ĽˆéÓ§áwŢŔkŻ˝~ ;pą\GJJ2FŒ˝öÚC–ßôçŇżóÎÓń䓏â駟•ń8—ĺźt+ŁC™";;[nëˇß~‡÷Ţű@lk‘œ‡kt]c9÷żüĺŃ?FŁé;‚ĹI˝™žOAUFF†@ӑrr]žXúćĺě ۰ŕ¨Ţ ´Ôť‡pĘN‡Ś„T˜3 UšűŠ}Ülžˆ%&aäČ˜4i˘Œ+Â˛ž— $ń™ÎĎčüŒÎĎh4MdŃ3M`Ją’Íڎ´Úy.Á•*‰ŠDbJeq ¤<Â3÷k‘™ÉĺŔĺTóđď8ąlŹËéK ŃÔŤró@1—Ó°‹áY q–ç3Ýîe]ÜŐŕőžo;ˆšźŚ+lŽŇœňóm]ŇäjÎfčŠÜ'ťËąĽAaťÁ°ÝŚÎ÷Œâ3ăű÷2KçśSp—PůšŻDkkë€˜ĹšŁaowîÍpŮŢ'âóU ¤ń†šRœţÚÍxî/×!1ś3ŮĘ`Ţšř\žž­ gž~ŤXv‹ü›VşWĚ>{žůž[řĄoˇuŕ’˝Žë2}ÁŚ2Č'ŠŮ]ŚĹY:… ŹyďMŚx°TĐúř„ŠsťLgoŒÇ~zţˆ5Ŕ<†Fb Đőm]-ƒw9ĂÓrąąŽo-ůZü˝cˇ0ߎ_„żż{Żř;äĂÜ÷<łűË~Ä{Ë@Ÿ\÷ÉăxýŻ7ahjŽgٟ‹—âéůď!đúău¨Ńh4¤7"32qâŮCöçŸçŁź˘iŠIHKOĹŕMSv§7 ĺ=Ĺá4cíşb$%§bÚ´Š¨č¸FÇ5:ŽŃh4ĄŞŕĎń11ѲÄß_|ŽÚÚhś}؞뎝ÉsoĚĺl­rT—^z‰‚A…YüńÚk/\ĆÎ<ó 9ô„)S&ăžűî:;‡Ěž˝Âeţü Ńh4šČĐW"3%¤â+…U!çććJ×ůŁSS0cÓ||ľěüœťˇx0GMI§ĐlĐŕr00%¤Áœ‘ToĆŽËţ‹}sŁ1|çą275~üx)˜6˛­‹ËˆÎĎčüŒÎĎh4MdŃ3M ¸Ěnw ŞĽ‰+a˘y„r-ƒ{\9ˆšĹfp‹ŚœNƒ0J˝*™Q€Fq×kŒîĄ*>ő8žĄŤ0Í(VSŸeňšîů\“×6›Ń]fÜ/ľœrBsď›ÇáŐä“Eunƒ ‚6§— MýMž™Ő,a,Ééęł:gpc6ˇ‹™GÇAÄ-ńMŸŁŢv‰8oQ=vďč׏DK lmçĄőđ-Ÿ‹‹Ţž[§~—ăĐg/ŝ‡^ÔĹśŘ Żţřů€@LŢvđů˘ 9iڟđâoŸJ+ćűž{‹ˇŹ‘=/bŁb°´tŢZöľgŢSgÜeŮIy#=ă/˙ţŠ|`JŒ‰“˝d&dŔ…;"AüÝŇц7…ĘŚ:Ě= ŃqXVžo.ů ńŃţŇĂŇ;ËNÜűíŤX]š sÇϒëćĂRJl’|řZUQŒöFeĹ);‹HÖŢuŘĹ8ţĹëd éű÷ăőĹ_bˇá“Ĺ4 ––­Ç§Ť~–ç’\°űў Ÿœ1óPźöÇçňœmi¨ÄÜ'/––Őě´FlĂk`lć0Ô´6 ˛š˝×ŸFŁŮžˆtÓ{“–sç EIÉ´´´#++]$5ŚŘ;\zëĆŇS† +Ă@GÇ5:ŽŃqFŁ ÷VžOg¨!C†b÷Ý÷Ŕ‡žÍśĎ{ě)WxîýĺcZ#ŽFŁŃh4=%R9bĚÓ(Ô{Ě'°Äňš5kĽCčˆa­Ř§ř|łě[,ĚŢśĄŕlރS<łÉ†ŸzŻ•îf˜Rr`y€¨Ęu˜ąě%ě“cAáÎ#¤ nÔ¨BŒ;ŃŃŃr˙C-‰Î{áLßZčüŒÎĎčüŒFŁŃD-0Óô ĚŒF7­ě˜Ý-„rş„Va—ÁÍËdpóˆÄĚčć(&ő^,“ŮâZݧäŚ{şrH3yšzy\œč"Ňň”Ţ4ĄŤ ™ŻgUšŇ{>oAš˛™ş–GDfX§żŐd ŃXWyLuLfS×MíćXćO0§\ĚÜbˇŰZDˇÁ;IžťŘ؁YŚ+9*>h O¸‡´Ž˝ţÓ'e€Č đ˜ŽÁ^…SeMűdď…6[Ęk°¨dŢZú§ö=a0yĂgĘ q 06{˜x`š—đ öżZ÷Ťź9mĆ!8u玁ţ¸Źár_>^ůÚmVźđëGň}á ĆSbqˁçáŸ"ĐfŔýÍúßä ČˆOĹ-‹łß¸Íçśń¸ŢýíËhnoĹĘĘ"9؜všnrÜÔýđä/ďĘóÁŢ0іhżÓ\ÄDEaÖ°‰xü˜ŤpÉ{÷ĘĺůŔĹÁ›‹öü Nšţ§.ďŃśř™żüNyĺlŞ+—*ĘŞšĐŚúţ#/ÁůoßŐë@Ÿ×ŸFŁŮţč ‘Q3ĄGˇ‘ŐŤ×`Ŋ•ŘRZ! “!3[C\f69ÄçZeŠŁ††én1PŃqŽkt\ŁŃh" cŠüü\ěśŰnX¸p>ĘËĂ+_Ł\dgçH÷˛źźyî5FŁŮˆDŽĆ×{ŢB3 ŽX.’błľk×Éö’Ń#;0ˇä7ü´ü[,JŞüŠ˘m%ÎúJ ­Q6Ü8ť8'>O­~ś;"ӝîś#L É0Ľd‹v3+2KÇôâUŘmh†Í*”%@š_cÌFrr˛gŸCu- ç˝pŚoMt~Fçgt~FŁŃh"‡˜i†Áh[[v’7ż3ď3šŔLĘšĚŢ5Ôövď’%,˘-÷¸rŞĺ4]CÓĹŞTőła>t ޜ>ÄiF”XĚdp3n“ÉÔuY“A0fB×e:WŘő=ϟîRĄNăz ŰÉýî"ÇΒW)O§×ç9}ˆĘ|m‹Éë}CÉL)dëŽkY„śä‰hoo°ł(qp’ŁâĐB°Ď^ ™ )¸úŁÇdň݆ßĺ ‡÷v1掛…ĆŸ'ůcńô‚÷ńŁx0Ąí0ƒçěÄtĚ>IZ űë1s˙á˙ĸě7đŽx¨)ŠŻ’˝DZmížéGNŢ…ůxě硼íq]k“<†űŒžŽěuœ˘Űýn{Űź|âpűź°źŹíöT7×{Ś_žĎɈŽĹ{ËžC‰Řćôř$lŽ/—=JČÜą3ńĺŮâĺEŸÉŢ%âÁźMl[NRvžƒě3%o´ĎĎć6pĆ]xnÁ‡řhĹOŘX_†ń Áĺh3=&Ť÷.6źî˘•őšFى$=qâ ľĄl„ń˛‡ěŇĽKQZZŽ˘âRdeŚ!ƒe3-7 ˆ­ĺ`śicąˆeâ0věxylUÂt Ąă×řBÇ5ÍöK w˛PÜQ9ž––†QŁF᠃ÁóĎ?ťUîÚž‡çúC“Ž#<çĆ[ăžţöžFŁŃh4‘žŠĚH°<Nc>aÚ´Šňžť~ý$&&bäđ6ŇЀßÖźŒ?ړą2}2Ú˛F‰äŽŚŚZ8[Dƒ•­KăO°ˆŹWÓ)lłDÁŸsRşh?ł#śr=&”~‡Š1M˜>v¸Ř‰Ňy'îKjjŞg•cY(˘ąžĆ=ÖĐůŸń…ÎĎh4MĎőŽo qš)„WžKFď%őŞĺĹdń8śćŽë¤xĂĘŞV vť]žÚl6´śśŔápFŹ,ż@Ý×6)ŹV+*+Ť`k.GÁ™ˆNőśęrcG§“— ]\˝$ę=u–ŽngŚÎů"žpˆ¸]–Ś4űŤ)ç2/g3%ňę˛;ŢŰ`ÄK€ćÝ!ĹoUŞÓé5n؇nîgpí‹9 %F˝>ŻŰvš|Lô-Sßą_őŽ}Q3ćiů ‘ÝľŽú@JJ:āŘÜZ빎 á{ž{o/ů6‡=ŕź“Gí8—ís"r“2 Ńńx‚řtńUŘÂÍ@`ÓŚÍ0›Mâ^’€¨¨(y_°X,“U¤żâšŢ(Ů“˜Éßß,—š|ů éŔĹ㐞–*îÍâ˜Z¤`ŠÇŃ׍÷{j}G—ălü;”ń°L8ä—CrrR7Y xĽż“ž:ŽŃô7:ŽŃh‚ł5㙞ÄŢăőőő˜7ďkźűîťřá‡ďĄŮöŘkŻ˝q衇ażýö•n­Z`ŚŃh4ośőü –#5Ž öžŃÝŤŠŠI[:Ĺ666Éś°’-ĽXVR…Öd%D}ć !Ő%2kk„ł˝E4šut:'ô60EÇŔ›Ä%‰‡˙( ĽŠŐë0˛i&Ĺ4aҐL ’/Ř˜ÉÍ͕çŽeľ˝÷Ўeƒ]\ŚĐůMŁó3MpB‰gB}î ÄÄDď—EŠ^ě^ƒŰÂINSƒÓđę=ŔĎ߁^˝Ç˝ zŁÔfš°a‰Eݰ–h'şšyŠżUŮLuăkŁ`ۄŽ3őjX§) ˛§Ł•€N—4ŻĎ6ţ6ţ6™;?ßéôŽy‹ŔŒűâ5ÝŁs˘KINďé]Ja÷˰˙Ś810ޏA×ăŻőúú4áM›ń8š óŠs‘Ôř-ꭕ°F ‘F|řˆ0ŘʈN@ľľ9¤ůóS˛pç!âŸ{WýŒďÖ˙Žő5%¨ii„Yœ¤dń 61gv> GLŢgŔÔ˝× x˝é _ŁŃŁ'Ž#ęobt)(ŠœœlY6săĆMhljFm]=2ŇÓÄűöíM8‚°HbśÄČ!))qŔş—)t\Łéot\ŁŃlr1Ł#ĹäÉ; ĄĄ›7oFqq4Ű……ٰĎ>łąăŽ“Ă—i4Fł­Ń'3ďzϘˇĄ@kâÄ ˛źdEE%JKKĽŤYáČ8ĐfCuu5Öoůë6v Čž‚˛ř|ÔĽŔ™š St<-ěᴉ, ’lV—Íaëňšžś% Ç̢á&J4™EŁşhX‡Ă gG+LÍľH/_źś2Œ0×ctJ4F ËEfć(ŮđÎ2˜™™ČĎϗů%•G2:–Š}ôu|By/ĐűĄNHčüŒŚżŃůFł­˘fš°a‰Eb*ţHĆżR¸ĺ-Ňň…ˇˆĚŰiKMsť”u™3ŢN€KˇI›ˆËVtę9ÝË{4]n‘™G¤ĺ%â겚&ĺ2Ŕ"/źĆ;WlxrŒőcÜŻfřş)ŒÓ˝×| űź§[:Ç-‰v´oü qăî"0ˆĘߤ¨8t8í!Y+đŸ1óP9h4ĄB‹b^oFCBI^’`‰ĘPJ30ČĆa&-)2۰Ą-­­X˝ŚąąŃČĚHGFFšt+¨;^}ÓéRÎ'$Äű— Ä䦎k4ý…Žk4šO8 ĄÖ1zôhé,üń'âůçŸAYY4ƒŸěěsĚ_0nÜX†×h÷2FŁŃl‹ô&Oăý~°÷Œăl;:t† ÉGKK ŞŞŞEěU)óyyyŘÍíČ^WW‡˛Ş(+oBYł Uö(Ô!M–x´F%Ą]<ŸŮbES–‰Ú1‰ĹÄf"'˘:š+ňńśf$ٛ‘†VdYlČKŒB^ZňĆg"5ľĐăh'ţN‘Ői˛˛2E^$ĄŰö÷—°,Ôy:?Łé/t~FŁŃlËh™&$Œ<­“IëŚEŔX1B‘—By9š†oń™÷{ęŐßb*ˇČL’ŕšÇ¤>Ďh ×ß&+ş;“ÝÎĐősLAÄd ĄkiNwťŻIš†‹źz ˝źe€o÷7ătřů€ˇƒšÇšĚ{^~žˆeš~[,f´˝—ţ~`ȈN„Ýé@‹˝M_`‰‘×™FŁŃ Ľ7Üްƿ‰ń=&و8räُxŁóWTֈĆb&/‘žž†´´”-6ë7Ä!¤ÜđáĂŽMśfňSÇ5šžFÇ5Íś‡?3ő÷ŹY3eŁć‰'žŒ_|Đ ^XÚꤓţŠaÆbćĚÝâ>í^ŚŃh4ší•žćiü˝Hhć :˜q`‚ůš††ÔÖÖÉ8Œĺ)333ąƒa~Uv´ĽĽmmh﨑ţívW‰‹Ĺ,lą1Ń2'”/]ÉźďýěXGYZZšĚ ŃŮ466Öďö‡+ŰŢÄe ŸŃô5:?ŁŃhśu´ŔLă“@AťzżŚ¨(#)bČ=.đ }­Ę(Şň'Hóž7fŸiňą-˝ů ďőôvxoŁ—¸Í§ƒ™ńXnőŻ%@íŚ:doˇ‘ž’“ŒĘŽFěk"ƒ|^_Fă‹ŢˆĚH8=dt4ŁĐŒŽf,š°ys ĘË+`łŰQV^…M›KE"1I‰ ˛ÇjzzŞL@no˜ŕÇʂŽ+|‰L#:ŽŃô:ŽŃhś Â)ĹqĆűí7ŸţN;íoxíľ˙Ą¨¨šÁËb{ěqČËËÁžűΖç6A™œi4f[§ˇ"3JÇű}ď{,arrrät ǚ››ŃÚÚ†ŚŚ&ńڊśś6‘łč@ZZ*l6ť4l Ű™1ŽŁ˜Œ÷ű¨(‹§ä%×/ËtĆÇÇIQ…hĆmđ•[Ф€l[—)t~FÓWčüŒFŁŮĐ3MبŢżŽŽEz3œ'ES^……ĽâŁ]eă=!Ś[ŕäůŰě5Í×<†éž4V]ţćňĺĎőË{y§AŤe˜.Ë^ú[ş”Éô^ˇQ fpëňšŢ‚4ĂßNG÷ý÷É9Ÿ)ćwX{`kŞŠ€bş¤ řĂÇ@‚ÁXľ9,Űb&´'Ö=H4M0ú˘‡l(ÉL&Yeeĺ(--EMM­LJ6ˇ´ĄąŠĹKÜIČ(wĎ×(ÄÄĆ!ĘböÄjLTöĺ˝~k Ö׎Y%_Ǎ› _›ČLÇ5šH˘ăfđJŒáo^o‘#÷ß?̛÷5N>ů|÷ݡřöŰoM§˛ížĂ™3gဠŐYR\ft&Qóx/Îú5FŁŮV5OC")4SÓ|ÝW‹qHOG—u(3—ů˜qˆŠŠ’ƒżöŰÔ‘Xo…eáĚ7ĐůM¤ŃůFł˝ fŰ9=IlşŹzí¨7§aŐ ĄT\HfZűş^cšM.í“E•t ËL^Ne|ĹŚ&Ł˘ĘÔ]ƒŐEĺľźŻ÷MŢëđ“y­Ř×çuĂk^Ł ŒƒÓWiN_+4ŽĂkÝF!šń3Ô<&S׿9ˆgŘěŽÁ,ţ.Šďď•+glŽ' ĘbLđˇˆ]ӉrMĎ0‰Ń şö˝FŁ ™H÷ 7™Iáذa˛$$§Ő×ףşşF:œąg6›C íhmmK4÷sƒ˛Šä:˙Tą–%ŞçIÇ` ŠcǎÁřńă‚.7PŃq&č¸FŁŮ6 U¤nœFAĚ~ţů;DaÔ¨ŃřčŁP^^ÍŔ%77t GĘXo×]wéćR⍯iZDŚŃh4ší‰PŰł‚ĹOáЌӌÓݗUG˝!RŽŚZ\ćŸŃDŸŃh4ŰZ`Śń‹ż@›.Ź/ŸĐIŘüA 27"!0;Dc˘ˆ1Łc\b3ŠĚ,Ę͌ĺĺ .ťÍýžA—ëó;˙PËy[&âÎN1—aU†ý0˜†™ŕťrŚ—˛ŤËŸŐe1ŠÉ…ßÎ@ĺô1ęěšqĄ¨čŽ3ˆöf´‹vfŤxľ›řjÂĆŹťëž˛ź­–}nď~H`p–‹:ěë^%špaď‘4ä›1pŻqF30‰Dٞ”ađ~ŸCzzşFő˙íÝKŒ%×yđӏéá̐3áđ!F˘‘dŠ Â@˘a… XÖ&Y&›l´ˆÉÂÁR+ŕ& 0Đ&l… c;’fĹ&m‡t$Ŕ!‘“!‡äLĎŤťÓçöÔđLMUÝzߪ{? XU§ęŢéo߯Ť˙őĹxœz!NĹpíÚţb*†¸§a8™~ádކxˇě˛żÉÍCŞűGÓ7ŢřëĹxœRtŽÔ5tĄŽůkóGϲăq?“žţ‹‹÷ČÓ§O>ůdxĺ•WÂř?Âĺ˗ÓqńâĹđĹ/>ž}öWS_=őÔ/…Ď|抝ő^j¨?$ŔœU]ƒŠ{^Q`ŹÎąüńŞóşč#ôŐĽŽhsŢ\š>CŽĎ›HŔlštZvçEœcţSŸűb¸ôwžZ|l!,–[ÇË~ÏŐÔ ő4-äóç?yź˙‰Ofq1łčřl/î8Îďž9.ö˙¨~püGô8(ŘŮÚçvöŽ‹ü3awk;ýkó^2ĽşŚŽ&/‡˜†ĄěůΞ=ťXĘˊ:˙Ÿ4éČą.7Ő54ĄŽáĚĄžŠš*3ۏb—ĎGšţüĎ_ =ô`řÜç>^{íľđgöżĂëŻ˙ŸEńĹ.ňŸţô/…gžůĺđôÓO/ęˇř}úěgŸ.˝FÓ4lŔf۔ë3Š&Ý̢ŞpŮńe×gŠÎZ×ŕ˜éśďçú M¸>Ăń{ď<˜MXŮĂŠˆ]#N:g\ŤźĐšLŐçľiáł>žÇe }ěąGĂG?úˇ+ĎiňœŤ‹ś‡ ţ¸Ü8źön…[GáÖáA¸}\řkgźybâř˙ĹŠípjk'œŮ9NoŸ Ŕ0ÚüÁkęuM}t3+:V÷Îٲç-:ŻČuUۋŮMľ Mů˙7u yęǪ뙦]Ěę†Ěb`éWőůđӟţ,źńĆáüůóáóŸ˙|¸víZřń˙ďńňăĹô™qĘíŤW?¸Űń”îvwwÝäΝ{0<ňČ#‹›3㔥ŸřÄ'Ą˛xüÜšłá“ŸüäbZ̢ŽeQ˙7çt €álęő™L“żEu šĽÇ3cýíŞŻNc]l×gČs}ĆŃŚžauĚh}Q3NŃôĽ/ýÚÝń˘ç¨*˛u.k§éEÄu˙!‹9cir‡l—ťc‡¸ 9…š îĹî>ĆçH]@ŚnČ,*űřǟ\„˜~ń‹ˇÂĎ~öłđÖ[o‡ ~e15c×hşŠŞGśˇˇĂă?>öą…|äńťçś ’šŘZvĽéů]ť–ľ­ŠúžqŻÉ9]Î_WŽĎ@1ł¸ˇ ‹ŰŤżčWçBg6­jŽú9ëŁUą‹“ôďĂ÷ŒîżŚQ×4Ő$d­j†U×U}^ÄěÚ!î5zfYMŃäÚKY'’'žřČb‰Óc^ž|ůxy'ź˙ţűáęŐŤáć͓îe‡‡‡ľż:͗‹A˛ŘĽlo/v1;zčĄpńâËŽrqšĚŞçěëúş`“¸>“ę;h–žÓćy‡ŇWGłŽç@?şŐ3ŒOŔl˘ŞÂZQ<6֋Źě‚gÝ ŮxŚíIšW›?Âu ëoŮô ËޗŚR×ôĽÉ…Ë.Ałôxf*5űĐő¤ęš˜b=3TČ,Ë>śpzěąÇKž›ýúŃśn.  ×gŞ-Ť­ŠÎ–=f Ćú{Ž€ąuŠgX-ł hRđf/Śxwiz÷ăĐCӐY4ÄÔN›ŹÎŇąBglžX{Duţ°•˝ˇ×Š/˛çS›:njÓ0ŒŠIÝŃÇQŐ9¤ŚZĎ´ ™EËŚĚLNjŽĺçšfsŻ>ť4šˆŢG]Ŕzp}fšşĄą˘Ç4y\5TďámŸCýŔŞÔ­gRޡŚAŔlfbťý8­ÁíŰŁúMBfŮxFײaľ –-;Vç8›#ÖQŹEú˛ĘşŚOM/\Ö9żM żÉűvß,îłf`(sŽgúşńŻéO˝ç6×g'łŞq6“ë3őľ šĽkóآçB—çW[°jCÔ3ŒCŔlfâ‹,ׯ_§Oď…>-ť‹Ľęœž:rPOÝ_ş„Ë křŢŃ÷ĚĄęšU¨SKĺϏÚüqˇk=5ľ: ÚŚËšl†)×3C\“iŰšĚu›zúŞKş^ťQól×gšk4K›YU´ĘNgС!ęĆ!`6AewŸŚ/˛k׎… ·U¨şčŮŚ#Gž ™'†źĹJšŠľG”]tŹ;ĽĎÔ뚾­z†šÔQmę ľ ]M˝žé2ˎE];—yĎíG×k3ŽÝPÄő™öşÍňϑšr—ř!žşj[ϰzf—/úO^d!Üşuk17mߊÎ:3ëœ×ćĽEĽ>JŹ9bíąłł}_íŃ´sØuÍ*­j†Žďő]nCF sŠgę†Ě˘ś7˙MĽÇşéŤ#k_ĎŔúq}Ś]Ż˝T=ßT¨˜ŞžęVCϚȿvvvcűűűaM.dŐ 5Ľ ýhúumú &dbÍßb ’ę#ř3t]łj]ęŸUÔPůłlóció8țS=ÓgPŠÍu›U˝÷OY_Ł:çőő˝`=š>ÓżuŞwÔnĚAŸő ăÓÁl&bz3ŢI×;;;‹Tç•+ď…sç΅!Ôšc6=7ęťăĹŚŢAŰ÷ĎŚĎç‡7yąćˆb ’ľ,îr7ëŘuÍ4­—Şž#ľnőR×:D@™šŐ3uŻËÔŠ1účXć=śšĄnôó˝Ř\ŽĎ ŤďÎfcP07}×3ŒKŔlÂň ł;â ,.ˇoß7nܧOŸCh2ËÎĄżÂ[aÜ^—N)ŠľFŹ9Ňb?}żhŇą!ZU]3}_Ź\öľŸęŃ!ju ećZĎ4šÎŇćܔi2ťă:ŒZ`łš>3Ž)‡ÍÔĚU_ő Ť# 8U/”˘ÖîîIťâË—ß Ťú¸Ş“.ŒŁë×Ü÷ €"ąÖHkLŐ{N“ccÖ5S3F˝”ŻËڞ ń9@™š×3MŢçڞߎúý|J†ţZ´yœZ×gVg•uĐ&Ő`Źż6őLvœiĐÁl˘â‹$WDöŠiÎř˘‹éÎزřÚľýpöě™0”ěŰö.˛źťcŰ⏲P$ÖąÖˆw“Äڣ莒̲â*uÍTĽ_?5R=jęX—zŚč߯ó˜Ěő…÷âúş|­|p}fzęź?/ŤżźÇ°IúŞgX-Ě&.}QĺďR8uęÔbýöŰo‡ĂĂĂ0´!‚M–ćKßß(k‹Xc¤5Gţý¨é{SŃcWU×Lِďýsçë@ëVĎtyT_ŒŤŻˇď‘ë3ó5ćßz`ʆ¨gX ł™(*>łtgÜžtéRƒözđ}`™X[Ä÷ŠXkĚŁĎ aSŠkćbÓ/@şř @[ëZĎôńžčÝ ő5ô} ĺú 0wCÖ3ŒË™_8iËÜl?Ď^`ąe`‹ ĎĂðż=\šň^¸pá|Cú"7Ó<řÁ @]ąŚˆľĹîîÎÝťIŠÚgŰů÷˜l.uÍÜ,{OŸkmŚV O›PĎ}Œ}>/ăňu Ďő`îúŞg˜ł™Čż¸ŇĺÔŠ˝ă˘˙fx÷Ýw/Ěsç΅1 ›M—¸4uőęŐEMď"‰5ƝŚ\׏ď˙lşMŤg\—™/ue\ŸćnŒz†q ˜MLz×Hş_t7I|!fNî(9 —.ýżĹţŞŠý˛ż œĂňC€>Äb?Ö'O-jx'IÚ˛8Sçn’š×5Ŕülz=#l6}Žá°Œë3ŔÜő]Ď0 f3Rô"ËZŸ¤>O…[ˇn-^¨ˇoß.\SáĹÓvĺʕđîťWî)öó­Šűź›dÎu 0Mę™ň/8[ ×ÄhB=ĚÝŘő ă0›ôn’L|ńĹ;G˛b”ÍY‹ýř‚˝qăFxôŃGďČ;šőRŘßżž¨b=ąťťťŘN‹ý|áľ)üŐ5@ßÔ3ő?î2Âgݸ @Wę`îĆŽg_ÝďŇVÍc[5Ö[%űٲŹłeçÎŘNn‰ÇÎÇő͛ˇ~ÖHţÂ^ş_˜ŮXÜÎ/‹b?Žă9?ţX8{ölH]ťv-źőÖŰw§@HŰç—ô.ÖLÝvĹę`(ę`îÔ3Ŕ܍UĎĚŐŢŢŠ/ŻbÁőޝőAn9şł>L–Łd_BÉ~Ő:żˇôîCĚ&*ť{¤hżč.’ücăř͛7ĹţŰo_Zź€/^źxŕt6Űőë7Âĺ˗ł9ď÷ööîö}űę oę`îÔ3Ŕ܍]ϰZ:˜MXŃôËî(Éoßž}{ąÄ‚?Š/č‡ţ[á̙3ZŔ‰ľÁţţ~xçwďŠ b{⸤…~~;Ş*öËĆRę +ő 0wę`îV]ĎĚŃşt00›¸ŚĹ~\Ç%kSœÇÄhú @ď.9wîÜâî’lî[iP˜żěý?^ě‹w\˝zuQ Di1ktŽűř @ś=DąŻŽęRϨg`îÔ3ę˜ťŠÖ3s#`V|LŔlˊýŹ ŇťIňĹö @|ńgÇĘţl?żŚ#+´óëüń(+ŕăĹ˝´°O‹űt=>}Ž>Š}u RϨg`îÔ3ę˜ť9Ö3s˛.łÝŔäĹRžĐNÇň/ć´8ĎÎË ţ,-ĹąXřŸüńpw<{Îež_`xˊę|-p2śřďÝ9ďóE|Zŕí矷Żb_]›I=Łž€šSϨg`îÖŠža|f3QTx—űŮ 5˝‹$;žŽe?2é'é0mEu@QąžöůsÓĹůB~Ů~ۏW]dÔ3ę˜;őŒzćnnő ă0›™´¸ĎöŁ´ŕĎ űěŜ÷ůÇg­Š‹ űt,mi LKŃ|őEĹ~Qâ|ń_öŘTŸĹžşˆÔ3ę˜;őŒzćnÎő ă0›Ą|ąŸËżłrz§H\˛ťHŇ➨čOŰÓQVœç‹úüxŃń:w QěŤk`łŠgÔ30węő ĚÝ:Ô3 OŔlŚňw•˝Pó…}ŃsĽÇ€iK řtŹčř }u  žQĎŔÜŠgÔ30wsŻg–€ŮĚĽ…{:ĺ ţ¸Žm‡ÓýŞ6ĹůwUŃďč_UĄ]vŹěN’TÚć¸îóA]ëG=Łž€šSϨg`î6­žafk ěN˘ń|Űâ˘EĹz˜–Şâ>orˇČŞŢ÷Ő5°™Ô3ę˜;őŒzćnęú'`śFŠî*ÉĆŁ|ў/şƒ¤î‹Ý$Đż.Ewѝ%EǛ‹şփzF=s§žQĎŔÜmr=CĚÖLŮ]%UÇĘ~ ä¨óďăZVؗßôŘ*¨k`3¨gÔ30węő ĚÝ:×3ôCŔlM•ÝU’K-;oًß]$0œŽExżʚşćM=Łž€šSϨg`îÔ3t%`śĆŞî*):/Ó´p÷ŚŁéűň\ŢÇŐ5°9Ô3ę˜;őŒzćn]ëÚŤ0‹•Ÿ˙fŞnÁŸ??ĺn˜ž.Ĺú\ }u ŹőLýóSę˜őLýóSę˜ŽMŹg¸G­ÂLł Ň´ŕ/z,0oëňžŽŽ€ÍĽžQĎŔÜŠgÔ30wŢË7€ŮJ_čî€őˇÎEžş6ƒz˜;ő 0wBe›mę3UčŔň?ţ0›ZŕŤk`}¨gN¨g`žÔ3'Ô30_eŁ›tᤃ÷XöÂ/°z úzÔ50]ę™zÔ30]ę™zÔ30]ęš0Ł?`€uĄŽćN=̝z`śĂ0Ün0žA2[CĚ2‚fĂ4Ł5tŔ €™Ú Ó§ °Ž&ŸŇÁ €BfZUŔŹik7ÓdëdŞÝ°Ѐ)Y‹L“)2($`@Ąš̎jŽŹÚěóNcĚúü˘ĺ€Š*ď4JvĘ™ZEŔL×1€ćFĎ^é`@Ąžfş“ŹNŻŽÝ0m?1Ą6`ŠÚd›ŽÂ„2QS™"ó(ˇ=Š/Ŕ€Š2S“ČO0;Ş9–4ÖѲ|TÓźUďVÝÁŹî'{îMéĺ{BhŔ”¤ŮŚ˘ĺ°áóŹDłŁŽÇ›ţ[eá2!3` ОMEÓ`öőď´=žT“€YÓěhŕăůóŽ€Ő˲LM3PCo}ţ˜SdŐalńźGG‡WŔŠ%YŚA3Sc3`–jó UŒý"ŹŘ,SŐt˜}ć§5DŔŹí'rTsɟ{סnÝř›°bw˛LwłMĄ<ű´,'ŐTď!´Ut0;*Ř?Ş8ž—˙˘ÇýđţűďżV,É2f*äsTGÇGąŞ)23}|Âńy^}őŐ×ŔŠÝÉ2ĹlÔAčnôPYŞŻ€Ů˛šBť|’eIź{R}/žřâ_€K˛LESdfşL…™=>]—ďd+4łUóXŃvşÎooĺơďl§ë¸ěÜŮßÉ-玗Ýýý°łłý\XƒƒĂ—Ďœ9ýŰǛˇ—Ťá¤‹YşdÍÇ´t½Ą´4ˆ–ßN×UŰyľĂgM;˜ Ůn­ÎœĄů/TśÄoFxó͟ţIX‘$Ă3MEÝËęd¤†ÎiŐÖ×™M?ˆŁ†űËÄoĆ᡿ým3`eîd˜b'˛ŰšCCgŞ Ľ5"łę1[%űůé2ëN•™-ŚÉüŕƒŤ˙fooď×ŔˆnŢźůG>xîwCőô˜‡áĂ)2Óé1˖PąBńT™EűËĆ őŮÁŹî´ŹÝ[“–péůˇâú‡?üÁ #ť“]ş›e ĹY¨˛lTŃů!4›^sŮxcm:˜U=nkÉvŃşŹ“Ův(ďb–v3ËֻᤋŮÎţţ?ŘŮŮ~.Œŕŕŕđĺ3gN˙v8éNť—Ýv*ËÖé’ď^–ďdJö‹ÖUŰĄĆxŠ>;˜ĺŐ+_Öú-lÇóoĆí?ýÓ?ţ`$w2K1Ç3LYö)„ňŔXş¤ç‡äÜ"MrYőÝÁ,lYłŞí˘.fEĚv‡Ě˛.fŰWŽ\ů—gΜýjĐţţľď]¸pá_‡“ XÖ˝,ë\–ď^v”Ű^Ö˝Źh;]WmçMރYË>ąŞfůăŮ7äzÜńĹ˙ýńz? g˙NV)f˜bv) ”-Ë;OĎ+Ú]ŰfUÝ*Ů/ëfVÔš,ÝßĺÝĚŇ.féúĚń˛÷Ę+ŻüĆÓOö÷Ŕ^{íŐo>űěłNŚĆŒ ą˛FYé:ßÁ,íZ–Ž…°ź“YČmw™ZsŠ!fůcËŚÉĚÖEAłü’Ÿ&sçÎcҀY\âT™găŘĽK—˙ĹůóýăĐŁ÷Ţ{˙??účĹß'!ąkádjĚtZ̃;§Ś]ÍňAł˛ŽfUÓbŽ2=f4FŔ,ÝχÍʂfe]ĚB¸ż{YY7ł˝ă偸íÚţżÝÝÝýľĐƒŰˇo˙ÉŮłg~'œ„ÇâԘąƒYYײüŐí^BńT›!Ôď^śěXŠíĐ^›°ě*šg4żŸ+úÂÇńětóÎrđ•ŻüĆż:<<|%tłH1“N˛J1Łt+|.ŤĘ6eĘ2Q]CdeZ…ˢĐ͐]Ěʞ'=gŮcă7fű'?ůÉí7ß|ó_ůĘoţňÖÖÖ ….ű­ßúgżóÝď~÷Ýp,ťާŔ Év~jĚʃeĄáXëY•.Sd.{Ž­Šý­ŠuŐöv¸7\–N™í„ű§Ěçô,ű˘dűE-⪞1i*0Śă|§‡Çßčß˙ŤżúËß˝3Pf?fbć(œd‘bЍsYY†)„ępYHöCčˇYçi3ű˜UŠJĘŐX—m§ßˆŠżAÉ:ŰŢżł>óĚ3řÍo~ă]żž˙_@NĚŌQĚ…\ţ(ܛKĘÖEá˛tźí”˜mŚĆěESdÖyŽ­ŰeSfm§ÓbfűéXvîNn|7œL™ǡž˙ýď˙˝/|áůşłłý\6ÚÁÁáË?úŃţ׿üĺ˙N\1@§Äźîo‚•v&Kf!ÜßHŤ*XV7TV6 5ŐśŠ€Y~ŤdŹIŕ,0Ëöw’sӀY6žwźœÎΉAłçžűű˙pooď×°QnŢźůG/żü?ż›Ëâr#œL‹™ÍňɲńĘť—…P/PślĘĚ&ÝË&0[ö|MBfUë:!ł4T–îçfŮń2ŰÍÎýú׿ţŘמöľđÄý’Žf°žbˇ˛Ÿ˙üÍ?ţÎwžóß_|ńŷÇáąŘ­ěFř00–˜ĽËsű!ô3%ćJĂeQßłeĎ9tČ,ż¤ÝĚśĂýĄł|-v4;•Œ‡^xáĄo|ăŸůÔ§>őÔůóç˙îŢŢéom…'śśś/„“i6‡řýˆaŤëGG‡WŽŽÂĎoŢźń7ď˝÷Ţ_żţúëů­o}ë/^zéĽ÷“ób(ěV8éX–ĺĂdi,:k3ćäÂeєfé~ӐYŃXQ粢PYQ(-v8;ug˝–áňÇËžmžŢlŹł6¨ŁŠńŁ’ý˛ŕÖÁĺV(îP–ŸłhŠĚtżęßm.Ťł_÷XcC…—şv1Kˇť„ÍňÁąЧÍ,;/[ď$KŃTœŠíPŹlźˆP›¨I8ę°ćxŃԕÉr˜{\Y7˛´ƒYŐy!ôŰąleá˛hČ ÓŘ!łl]6Kť˜…pHŹ(`śľäůˇso×îeÂel˛ş!Šş]Ěsç—MY™ŽĽÇóÇňᲪço˛ŽÚ.ÚŻ{ŹľÝ0œřoŐ<–îgŸčV2žŽó–OćÎOŸc;s‹fů=œ›Ž… `u4 ˜…°Šf鹪€YşŸß.[’uUŹęó¨ÚŻ{Ź“1ÂLm;™Ľű}v5Ťťä˙ÝíŰu>ŢeĚŘd]fEc‡5śóa°:Kýu+›d¸,+ĚÔ$d–ë.+ZÄęNYöźË>ćüv!36QÓpٲíeáŽeSeŚëtű¨§uŐvŐXc˝3Č´ŐđxݐYŃXÓîfi@Źn§˛ŞŕŘVXœ[FČ €MŇ$,UÄŞęüU5ufYˆŹ¨cY›ő˛ąüvŃ~hxźc‡˜ú™ĽŰm‚gQYDzôXţxŮůe˙F(84w´dź,ÔU'lVŐŃŹčߨ$ŤŰm-T쇆Ç{łŞ°S“)3ë„ÎÚv8ËśóáąíŠóŞöCĹńPqn‚iŹ“6!ŠŞpY“îeEűŃaÁ9MĂcMş–ŐŮŻ{lŤ - ŮÍ,ÝŽBŰ.yžíŠçŻ ˜•U×%lŔu H-ë^V6V‹Œ÷ŮŠl˛]ËRS*őÝÍ,Ýns|Ťćă–}lecuŽu!|Ŕ* „jÚŮŤ(ŔU' ÖŚY“YýşÇ7•0RÓ Ö˛Š)óŰmşŸ5ylŃăĘÎ ŽÍş{…zÍňŰGĄ^@ŹË˜u‚pubj§!ť™őą]'`VgŹÎ1ŕD×îeůą.a˛6ŰuöëŐN˜ž.ÝĚňű]ś‹…ň„ٰ ŁMŤ(PVgšĚŞc}ËĘĆęݔCQ}u3Ëď7^łí~ŮX“ă@ł)2ËĆšěˇ œľŮŻ{leŚŘÁ,5T7ł&ÇęěĂé#`V46DčŹhżlŹÎą•šzŔ,ę3d6Ä~“1 šŁ–çô2kł_6VçŘĘÍ!`ľ™jr•A˛:á24¨oȐYŃŘĐÁ˛:ÇWn.łL×nfEc}łlźîq \ŰĐV›PYŰsĘĆę›”š̢Ś!ł˛ńśÁ˛6ăˎÍ´ pŐď"[‹pY4ǀYÔśKŘÓ^ŽŃąL8 €uÔGŘjȎfMĆŞĆ럜š̢>Cf}Ž/;Öçc`]ľ c ŮŐŹíxÝă“4ç€Y´Ő᜾ƒcMbÂdĐ\“ÖQĎÇÚËęž3Is˜E]BfCksĐ\ÝđV߁łeǚœ3Yë0Ë 4Ťsźî9C>ÖA×PVÁŻ–eÖ)`őŐUlˆ0™đô§i€kčĐY›ó&oÝfQßSWNu*L5ćděĐUßa° —Eë0‹š„݆:ˇÇĺچšš3yë0ˌ4ëűń@s]C^‚e9›0‹şž† ‹ Ą@}Cšş<ďZ‡Ë˘M ˜E}şĂ`žú …­}¸,Ú¤€Yfˆ€˜ĐLĎ!°–e61`–3&€ý3ěľQÁ˛Ě&Ě2Â_@™ –eĚî%llt¨,%`VLĐ 6`YŽ€Y=g°~ʖ0kOč ćC˜ŹłaŸŔř„Čz&`ś>„Ú˜aŻ5 ”@ĄíĚ($`@!3 ˜PHŔ €Bf0 Đ˙ĆŢ}•ŹÁIENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/fullview.png000066400000000000000000034072621522167256300223520ustar00rootroot00000000000000‰PNG  IHDRXŠĺ“yIDATxœěý  ,gAć˙?UŐËYî9wËÍ@ƒˆ ˆ1(  înŒ #(ۀ(Šl"ˆă¨ ŒŠ ‚üu~ꀀöY„@` BHŸ­×ZţőžUŐ§şOď§űl÷űÁ˘ťŤŤŞŤťëœHŢç<Ż+ôĺ }°€€Ŕ, `0 €X @Ŕ`€‚°W8ěD‘°ë1(?|Ž€íD¨cÂŒĎ°ž!áđ9ö2BčŽĎp1#pс A;>Ö´H(ŕ3`uŘâblĺ{'Ä˜Ś­ ?\”A‹‹qŕď™`'›F(⢠Z\LÁ€I˝W€˝`R‰‹"hqą„6ó>§őԌcZ†Íwχ,.†AţqŢăf?€í´ŮŔĂ8űďéĹ^lE°b;??B°;mgaÔ×&h‘ÚŤƒôŁźŻim;‰ýƸĄ†Qö›ÖśťÂ^řö=m×v“Bhv§­ űz۾ݎ°×é'†ć8ťi:ŔŢ5i?˘M>?ęv;Ţ^ôßl(b;B“ްˇl6 0í0Ĺ$Žż+ě…ýi+6Ču;6c­Óxn”mvŹÝ>řż™pŨë7óÜfś Ó(a…I‡&F]?ę6;ŇnčwJiŻôÜ$÷ě}ㄜ"81nĐbW†,vë ţ$Ă›Y×oý°Ďƒđěm“Œlˆ&źŽßúaŸßqvăŔý8Íă†(śťŐ€AŚŮV1Í ĹŽ YěśA˙Q ă†(ĆŮfĐúaŸ`ÓlʘÔ6˝Ö ó܎˛[űÇ -8~źŮuăl@§hĚmĆ]ˇŮǽ֍ňüśŰ ƒü›m­˜öăQ֍ł ™i†+Śý¸×şažŰv;}€’áŠqŸćń(ëFy€źqš &Ž÷š~ë†yn[íäţQÂŁ<ŢîĐĹ(ϐ7‰€Ĺ4“hˇćšmłř§ŐZ1ęýažë÷ü őƒž Ó8Á„Î Ĥă†.z­ćš-ˇÓř'ŐZ1­űƒŁśX°ŒbÔ@ u‘&˘˜TťĹ°ĎmŠ2Ŕż™ÖŠa‚› S ŰvŃš_Żm4Âóä2EH¤á÷7ş§ ŁßşažŰ;a€š­ă<ď šß sëľn˜ç6ƒĐě Ó lśĹ" č˜čˇÍ¸A‹]ŰfąƒńŁś;Œ;˝Ç 0EĆíqˇĎń‡i´Đë‡EˆvˇÍ†˘Ö;%H8Âú~ĄŠIO!˘ŸŸŠí¨ŸtkŨëş%ş…**MU2ɀĄ Ř›Ć ô X ššc˜ŔEŘe›QCŁ4[ óxŘçŚbŤí§ŮZ1J°˘W˜˘óůÎöŠ^‹Auy€ÍÔbŃ+ŕĐ/`öŮž_“Ĺ4š-ş=ֈĎOĚVöO:\1J˘ßmgƒE>TŃëţ¸íŁ|Ţ1ŕâ4Jh ×” Ł´X„îGÚŘb1îí u÷ť=ֈĎOÄV â2%HçşI)ňˇÝ‚ˇ ƒÎcĐ9wŢď‡p\܆ Ű 1(đĐŻą˘ó6?šĐmżűýÖ óÜDlĹ@ţ(áŠ^7˛čŐXŃoé|Ýa›-:÷뜎ÂcԐŠ–ˆpˆűA‹aisí˝Ö óxŘç6mڃů“ Wô - °čśäŰ*܎ýú5Yô ^t>×í|!`06°Č÷ Xô HtśS„]î [ôş&\ą#CMϸáŠIśUä×e!Š|˜Âí˛Ď°S…t1:ŸďDŔ0ŠQÝÖçŸs:śď°ČśËžş‡5"ľ‡6zƒ“ťô|Ôĺ<m|˝Ţsżç6eZƒů[ŽŚľ"œp5¸Ő"ëĺ–^á uě§!×wCČ.nŁ„Â!×g!‰0÷|[ŽýúľU„Cl'iSSˆôťßíń°Ďeůă†+ň7ŞČîw†(Ü.ëť-˛@EQ롊AÁ^S†tçó&l‡qBýöé6%ˆÔ;Ȑ-šZ\t VtŢ{lÓďuÇ [ óxŘçFś“ă†+ľVt6N¸ęś() Vdëuă7.źđ…/üŚűÜç>߸¸¸xmŠTžĆqtšă¸űă§gD°;˜ŔA-ŠÂĽ(ŇÉFŁ~×ňňňWżň•Ż|éĹ/~ńß÷ž÷­äś3! ´h¨w¨˘sšPƒŰ,&ŮhŃíń°ĎlŇá€í Wt›şŁŰt YCEţůrź˛mŸ˙üçůĽ_úĽď˝üň+ođ<÷Á` ‚đă'O˙Ŕë_˙ú÷żôĽ/=­őđ„/uľ(ş5\t,:§‘vqČb’‹I…+˛űă†+ň­žşO’­7ĺl››nşéA~đCžP*•%.RFăß>ţń˙˙ůČG~BëA˛hhcŔ"ŞŇC„šE=dŃ-Pą­!‹íX ş?ěT F>4‘=î6ý‡×ąŢ´Ṳëm°âĄ}ŘĎÓVŔ:Ójńя~äorA  ¨)iľČ,őžFDÚ8Č8S‡ {żÓDž&cšSƒtގȇ,źÜăěžiʘ3Ÿ÷źç]öŻ˙úŻĎžöÚë~ÓuŤZĚXú=ďyĎÇ=űŮĎž2Š˘/~ä#ŠĆŤ‹éÓ&¸Đ9ŚŠ}lżŰv‘ĆËô3Jna,“j°p†\żŮp…‘oŚčŽp´1l‘-ŚľÂL âÜrË-šßýžńńýY€AŞˇŢúĽ—\ýőďR’0Ӆ˜6‹°ÇŠ÷T!ĂśYôťíźßíń őC›DŔbœöŠ^A‹^!‹náŠ|ČbP¸Â´W˜p…IѸçΝ{Ćž} OÉęęę›:ř%‰Ś’E áBQÇҲčŚčŹ6`1蚁\M3ŕq~Ý ŔEţqżpEˇ€… W˜–Šâ7޸ŻRŠţá Ćłoßž'™ąw3ݤčŔŒÉ›ąůÎńú~cű… R÷bŠ˙T!Ăd&ÂÓćL˘˝b˜ŠA†i­0ˇ_XŤšâ)OyĘĄżűťˇźÚóź‡ŒÍuÝoxâŸômǏ˙Čg>󙺒1ú°c33Žu<Îôk“&\1NbSá‹Í&7œ!×÷{óƒ‚Fg˛Ľ_[E>haÂĽn¸ań]ďz÷Ç_đ&" Û÷¸Ç>ó˝ď}ďrü°Ądş´0S†Dę>uH~zaŚ é6mHţśó~ˇÇƒÖ´™€Ĺ4Ű+:ťj[ô[˛pEIIŔÂŤTŞŻ, ˜¨ đ?8;;űl%a °0A‹,dXŒÎ°…Ô=hĄŽuR÷°EˇÇĂ>דŤéf”nëşÍˇŇmžicŁEAI¸Â=sćĚ3W0žWxę3瞡ő™& Ú8ž/uŸą"Ó-# Ÿ9˜¸i,†6¤Űú^Vg‹Eç_ĚzÓ^áŢ|óÍ?°¸¸˙‰Sł¸¸đD3FŻő'ň!Š|˜˘sV‹Î†şl'm.‹0žĆ3ěô Ýî÷š$ż×’}°^Ç}/÷źů˘ĘĎ}îs/ýɟüŠ?ďŚęŇK/{H­V}ÇG?úŃŞÖ§1Óqd™€ÎűŮí );úezm7ěń†6nbcR‹A!‹nő )—,`‘M 2oî/--ýîěěÜăśDľZyűţýűOI¸b-^üô~.ĄÚĂůűQÇýn!ŒÎűůŰ~÷; ul0é)B†­Ţč”2É/:CŚ­Â}÷ťßý Âl-3VoĆě•ĂW÷ńýAÓô›"¤_a˜őc™tƒĹ¸Óƒ Ó^Ńm~/w›ľWxŐjýO=Ď}°Ŕ– ‚đăłłĺ_WŇX‘ľXdí-ů&‹aZ,zľWŒÚbą% “Jx ›(É?ß-€‘…-˛öŠď$\Ŕö0cöfě^í-í… ˝Œš-ÖČǙä!›${ě ąMˇí͗â|÷w?ě? l›‡>ôťŻÜXžĆĎôŰF}Z?˛I,qĆXŸoŤčL´l˜*äŮĎ~ö‘RŠô(€mS.—ż˙YĎz֥ʍéŤ˙Ř˙ F‹Š(™VŔbłŁ~…xqőWőŰîŠO}ęÕä ŁíšéLÁTBŁ,Ś™üTď‘Ü9‹ý2Žźňjěš1|3Śß9Î/ —˜vNahŁŚD6Ťß|(ůőݡă6żŢ{Ä#ąĎóÜ €]* C5›MťA`—(Šěb8ŽcĎóěR,íâşÓšŔb|f ˙‘|供nşiEÉŘ~¨öąţ0˝´1tá¤ë;ĺ×÷Úf*&°4×Éf%˝š-ňşž˙üç“ŘeL¨˘^ŻŰĹ÷ýžŰfa‹,ˆQŤŐěúBĄ ršl—śxÎsţŰ7ÝtÓMŸĐĆ2…źlݸa‰lßaBcŰę‹N“¨ňđĚqţÓúO÷ť„ IT*•VHb3L0Ă,kkkš™™ŃÜÜ܎Z|ó7ă}ă›O*Űojsś´ą˘Óv,͙2(tŃmŠ-,,\'vŹ0Ë4˜Ŕ†YLČÂ,ŰiqqáÚônˇąţ°ĎŽSHíáŠ-[L#`1n+…3äŇš­ýŠĹň5`3-ŤŤŤ§™ŕh4ÚˇoŸBd;¤ců­ą}őűď6}Hˇ`Ű&ŔŘŽ>qBNŸőŽç9— €Ş^Żë… [ŽČ˜×2Żi^{;xžgĆň;ƒy“ĚLŐV,ŚőíqÇÝ/v jľŞ••móÚćśšë:ŮXţT3[a”€Ĺ¨'ĺLůůÎífŔc‚ kkkÚnćś:dEQ6–?j`ZϏ˝ý$,&}ňƒŽŐmN–ü-;‚™šc'„+2ć\śxşncűăţ“|qŸh+§éfŘ7ŕjă‡Ü-dŔŽŕűţśN ҋ9'sn[¨W¸"[†Í.lk6`ŤΐëňĎ]Tá‰~đCúá~‚]>öą`wZ]]ŐNľĎmP>`ÔźÁÄmwƒEĆé¸Ń+Œ÷źç&=˙ů/ÔŠS§íňň—˙ĄťOĽRŮꖈ‘˜s3ç¸uË ěˆüŔN Xă†*öDÄ+^ô˘ßWě^aîÔđBsŽć\ˇČ¸y€“ ˜tŔâ˘k˜„ná Ďóô›żů v—ÝŽČěŚsĂD3 ;ŠÁâ˘tÓMďߎp]W/|á ôˆG<\€ÝĂ4BÔj5íć\ˇ°ĹbWێ€-)ŽřßyцpĹďüÎoë1y”ťK˝^×nłĎYې=(ۂpě=› +<ć1łˇGŽ\˘§?ýŠzČCÜwű›oţŹ^óš?Őɓ'íăw˝ëí‡9çŮŮYĄż­j°˜drÄéXv°÷˜Š6|ß×f>}Fż˙ű/Ńűß˙ÁžŰ|ęSŸŇ _ř{­pĹf˜sޢiBŚ5Ţż%فí˜"d3œ!×íX„+`oj6›ÚŒĹŅÖ}xřŁ?zľ>ň‘˙ťať˙÷ë÷~ďĽńë5Zëöí›×flö܇°ëÇűw[ŔbW#\{×fC żđ ?ßö،-żěeزřčG?Ś—źäĺmá ă§ú§´[°ŘőXl°ˇĺǃÇń?đhýĘŻü˘Çi;ćK_ú ;]ČG>ňQ{ż3 ńä'?Q?úŁOĐflöÜ/í ;ş6„pě}“)<á ˇˇŻ{ÝZë˛éBLđÂ÷ýśíM¸Â,›5倅ӏ´ËmWŔbÔ@ÄŽšw%ďƒüІp…çyzы~Gß˙ý`oˆ˘Éd˛Ĺ_ţĺ˙lł[bRá cRç>Śq2[~Â{ĽÁbÇzŐŤţ˜p\&Rč˛Č›d¸ÂŘć€ĹŽŕ ě8‡śÓ‚t2ë.˝ôˆ°ľvCŔb×NbüÖo=ÓśVdL›Ĺ‹^ôűzĎ{n`ďč†ׇ>ôa˝â¤0 7śĹV @÷{M¤1 Űq]ç_—ë`zXŘrŰ5Ýë”Ćfě„ë9c΅ë`:XŘ2;i :o/ţő˙¤?kí7âz¸¸°°%63=쾛PŢMÓ[=¸ßďő.śüI}öÓžŽił˜,ŚnÔéq°;÷ŰĚŔôföŸ„ÚŽĐMŻsÝkƒű›ýNśăş&d09,LŐ(ƒĘ“l6(ąA‹Ý¤Uˇ÷śűˇ+X1čxĂ~–„,&ƒ€€Šv`yÚ!ƒüńÇhŢěţÇ¸˜í–ĐĹN Uô{a>?B›GŔŔśę7mžËžĎßĎ3ƒĆůe˜×ŰĚ@ónJ sîŰ1ßďźśň|&őݎ,Ę/ň×tżë›đŔÖ ``* 2ó| ĂĐ.ÝĄłAg×u[Ë0A‹­˜úc+M2ô1čX[ý™íŚ@˨ÁŠěÚöúö<ŻoČ"ۧßëÄ ˇ™p…löƒ@ľşŻ•Z ľxY­ůjřĄšA¤ 4űFrWEĎQščjߌ§ů™‚âۙrA^.l1č7}_ŐjMgVşó\ cBX už*­Ő#5‚dے'͗œ•ŽXttŐO÷8\Đ% EÍÎؘDŢ­ÎťĽ˝Ą[óÂĹdŘ@‘š5ᡉ\߅Bϐڃ€€‰ˇ˝˘ŃlĆ‹ŻĽľ†Nœočëgęşăl<˝,^sľT÷Tó=5ĂdđžčFš)„Z,:ščôŠŁ W÷źdV—ˆ´ž¤Rą`˘MŸ°SB[9ŐǰĆů\ňŻ˝×Ăý>çüs&8Ôíú>ş”\ßˍî×÷ţ˛šžĂřúnv˝žKĹb×׼Ĺ`ňXŘ2˝ŁMs…|>ż\Ńí§şůx¨Żž‘N­¸Zm¸ŞŽ‚ČU¨xIĹŃ~CŞ6Ľ 5GÇWBÝqŢŃ˝/ÔőŔŤ}Ý눯ƒ‹sv:…l0šßŔň Ć4l6ą ˝^cŘĎi/‡-† W˜ű›šžĎW“ëűëÝŤËőݭɂŔä°°­‚ °ÝaľŽŻŢ]Ó˙;ŃĐNx:ş\PŐ÷äGݧAâč@žš‘§Z(­ůĄ–jÍ@%5lhă:׋ ÝśéśűŻű7ŠŘІ‹i'öRŘbŘpE6íMţúţüqOÇVĆťžŤ s}77\ߞç ÓEŔŔÄ ;čœ_ç*•ŠŽ­é3ÇBýż“žŽŻ¸vđ9ˆ†„7ŰVšžýKĹÓő(ĐlŠŚšb¤ůůy•rĺżŐ!‹qƒ“ŢŻłUĄ›ě}wŢűzن-vcĐb”ë<ťžžŠéÓGC}ńîÉ]ßsĺőëŰˆ:?ËA-4\Œ†€€maxÍ_áWkM^nęŽÓ5}őŒiŽđâÁç‚ĹĆńv×Q)ţMU*8ń}ĹÉÉ pFňăąć†ĹK<šżřw´Ú,ęčJ ’ç명ŞĚšr˝fkŞł˜×ÎÂóýůPÁ0ӉäÓm˙~ď˝Űţ™AßŮ>ćóThŰ6ţ̢tóXćŠÖnNňٚ˙‹ë˝lŔžă}ĺoť˝˙üç6Ęç— űţű}ţÓÚżóÚéőýeϙëűÔRcŠ×ˇ×şžť…,09,L]ˇ°ŕ÷}_ËU_wžkꎳ‘N­Hľ  0H6ĂÄf°xŚččđ>×%g;mÔăç•Z¤ •PgWCUö…잌ŕÔjS_‹ypŢ×ěLSłĺ‚ …Bë|Ěë›éI˛@€YźtZę˛ČÎłýÍmśżŮ7äî.Čďo–^ŻßkßÎ×ϜϰˇmÎ‡f*–FSQ|żŮŒoĂřľýô{q˛ý=yE7^Š*–’iUÜôœ:ߗ9nöúŮsÝ>żÎ÷Ňďó3űgS] űůuîßďóŰěţ˝>˙lŰüţśĹ^ßÍřúöőős‘NŻNţú>´ŻŠ™r|ÇKĄËT!4UL Ű"€^‰GŽďŠ -KkMW~” P›żě7ƒĎfŕůŇĎB/θöŻýş/í+‡*yŽýë~ĹCĎľŚě_ýű‘ůKWǖ9ďëŠ šOAŠďźV‹_;^ęÍ$P.Äǟ-h>^ćƕЅ !sżŃô[ű›pH­ôÝżó=gűŻĆďćők$ 1Stľ0ÓžˇĎ,˙ú+ľŔžžŻ/8Ąć ‘J äEĄI°Ř`… S~`ƒ~|ߏ÷ýŔ6$ił°oÎ.&Láğ{ą\´! ݘ Řâ˝\.šE9ńăŔqUł€P ?;ŻçűĎl:?żz3ěúů•Íkőůüí?čóu˙,XŃ{§íűóâĎŃ|öËkÍŠ^ߗÚëťďż1\€É"``"úM‰ŃmŰŹáÂj]GĎ:˝ćЏ­mĚ@łt6ƒĎ—ď÷ěŕs!?NgPˆ°ămâĺ˘ç´Ÿ^ ä7’盥3„Ž —/kČ÷K6`QmFşű|UÇ/řşkÉŃrÝľ ‹Ľ@×ěo誃]vp֐{é´"FÖX°Zmčäšl ˝(1űw}ßî偂.=0ŁEGö7Żż˛ß}žżŻŚŽ.;ZŠ;6`1ݚŽ(ŽjżŞš âĄ^WĐhŞo6}ůÍ$Ta–HŽ V˜%Lę+’uŚÉÁ40˜6‡büÚφ*Š3EÍĚĎhf_YaआWÖšfQÇW ZixmçoŢż9˙ý]Ţöů™óöóË7Bdď?űüďźĐž˙=ô˙üÇÝ?˝ć÷o?˙(÷ţg5[tâí}-­Őě5xz­0ĹëťŮjcĽą‚v €Ń°°-’iLƒŻs•H+MOA´>ŘkŚJ0ݟýe˙lŠ} Řü­~ŃţÁžŤfŠ/KU3•Bôđăč•fAçăýjݡá3˜źR uô\C_;éŘJ!Ţ&™Ţb_ĄiŰ ˘(Ô\üZsĽői/ŒlJÓ¸qô\=Ţ_ńţŢPűgƒóëűwýzüY˜ĎÄ ÎwîoÚ굚––ë:qŞ˘ç|YVźŁBؔU´ę.ˍÖTGáfCa3PĐ4MńçmÂöŁ1A 7 Th=X‘ż5˙Śa §ŕĘ3ÓŤĚTTœ‰˙‘13ٚ[ÖŮ`F' ZŠoC×Ó|Ń´e˜÷ż~ţF6-ËĆĎo¸Ď? Ź~uÝuśŽ;ÎG:şlöwŇý}5ýfŰëw˙ţFŰ? x űý›íf‹Ž óžý<Şő žž5ľëű\|>•Zr݌rŔčX˜Ş^ƒžŮ_ۛ)*Śp!đjý/üăqýxŕŮiýe/ć9łÍZ=´űdĚą˛i,j¨őţg—›vpýÎ%Okń w3}ÍŔź~Éu]2ßĐÁůdʅü}ŁŃĐš•šÝ˙ŽeOŤţű›Áůü}~˙^ŻďšĎŐăý“ö3xoömĆűVŤU?ť˘Ó§ęZ=×ĐžjE‡›5Í5+*‡5•e‚|3EH<˜Ff ˜păűń­ëś…*ސ…ňa ™×ӌlđŔŠńţ E^]Mˇ¨ş7'ÇsäĹ˙izłZŽüĂĐLŤą~ţY8d”÷ßďóŻ×ëń÷—íďßżŰÚ?Œ_˙Žř˜ć]™ýíëőýՇ޿ß÷×ďű?cĂf…rÁ,ŽÖĄuěřX~7|?hľHÔę.TÜdp?rm›ƒáÇĎŻů]¨šV ČȟŤYW­5íţŤBŸý};=DçţśąŁî÷}ýó•¤ő QŻŰOÏ˙ťYŤŤş˛˘Ő ËŞÜ˝Źčt š5_łÍŠćüŞfüŠ Ą/ľ5R¸é şÓ> HGˆ˘˝š˘űó2S‰řć~|×5í<ŻĄšb%~OŽÜ˘Ôˆ˙Ť?yĄĆçŮpAţýgSŹ z˙ă~ţÍ0ŇjÓě_ÚÔRŐéťÖx2î÷oBCćýÚ÷l‚SşžÍ4!ćúNšCÚϕ@Ŕä°°­’żźŸÎ`°dîl6Á‡fÓŹ/ŞŰš˜ő č}>ÉT&ŘîƏǗ—kĄ–Ť‘˝Ÿ1‘ƒ˛ÓԌŰ+&ƒăŢg ş¤t^ľzMŚřĄ’›ąi38~Ŕť #ĺ ~Í9ťm6Hnß/•JZ˜IöŻÖŞńţşîż03gˇÍ4ňűgŻ_­ŐlD=šąŰيĂ3:čŹĘ;ďŤvśŚđ’ü•Š‚zSa3PdmîHĄ u›ţcÔŰä[[Y¤MĚŔ‹|Í4Í4% •âÇQm^ľj]3336d‘…ňďżßço>żÁŸżŮ—ýĂÖç?ÝýŤ]Ď˙’RżÇYť­ił0×mÉ Śt}űöú.J­Ÿ'`'řđ‡?˘ý×węčŃăńžĺ[žE?ů“?ŽË/żLťÁn?Ŕô°°-’aWłeOűË5ÍÇňÍȓŸţ‘~#žsĄbŸxđŮ ť*ăĐn:†lţ˜ß 8/ŃĎgVCˇmëáoš+漆Šń tŠŹB! Xě+ëĘńëř5šľeŐâq‚˜+4uéL]W,–ľßLź}Ą- ‘5dű7›f˙•ű—íśô昋űJšý—T +răŃöU—guIcMĹľ†ľŠ˘ĺ59 _N<0ďÚĆ ”psÓ¨~h Vl6LŃ­ů"kăČÂÎzȉßŃ´…Ä_HĄŞ˛\ĐšłkňŠeťýěŒith˙ü˛ĎżÖěQű}ţ­ö‹xÝţłÁ~~^}%Ţżn÷Ÿżëd˙™ÖţÝ>˙ÍîßëűŸő’óżrrţćZ3ëgJ…ôúŽMáúŽkąÄŻ‘ü,°Ŕv3×üK^ňr˝ýíďh[Ë-Ÿ×?˙óżčĺ/‰ô ďÔNľŰĎ0},lZ~†aÖY`aߌ§Kf^­j-(Š•ěó _:,éÍxpyaĆU9ý­eŚMX‰ŸÍ6'—;XmöɘiGöë:2ĆŻQˆ_Ť đĎĎčŽ<ŹšŇ<ˇŞJí‚=—ŮřŔ—^ĐĽ‡÷ǃđs=§ˆČöŸ-^ĐĄóf˙Ś}>Ű˙ČĄĹx~ăţ†¤_˜›Ń=.?¨’{^űÎ\ĐÚňZ<Đ_ÓB<`°YŐ\˝*Ż3ˆßLüć“)%r ęh”Čn§ő|ţv”ćŠ0ߌŃр‘sä›,Ôviă…†\oUÍřxG.Mž™›-§ďżŹ{^q(ţü—ZŸżŮ.ž.?źŘőóĎŽŁäóŸŐ˝ŽJžżĂç“ýÍÓs3Ĺ!żżń÷7çßűű÷tŮĄd˙ěűożžkńő]žâőíő XdA•a×ďFGՏýŘOiŤźâ/Ő#ńpí~ôjiišçóűöÍë˝ď}ˇŚé˙ńo'd*•Šž˙üßÖ?üĂßëŔmĎÝ~ű×ôÄ'ţLßcßë^÷Ň[Ţň&MÓ¸ç¸x°°eň ;=HĄ }ł%]ą6Żů:×lŞv ß ăřs1Ëe‡7|ţf:‘ěó›íńů+=FśżůüŤŐꌞża÷ςÝžóçĎ?Űß\s sĹřúvtfľ_ߍřú.Oěú>2ŰÔ ćú.ś?:ĎŘJ˙ň/ďčűüęęšŢ÷ž÷ëG~ä ډvűůŚ€€m‘ @˜/鎔tnuE'âçJŘT=´N˜Qb™‚€Ó+–ŞĄ Ž™B!4ăçü0™jÁüeżP6ƒř^<ř\ŽŸ÷şf1Ô=ĎĆŻQn @›Ĺ †›Çssł äBŔ4”J%ťŢÜďĹ<—ß?ťŢ„7:÷χ+Ě}ł­ßh¨žś&ˇRŃÂňŞf——“Š@LĐŔźĄČDĚúú´ý,œöőŚ Q×p„†hŽč>]Húşš‹Hš|Çłm ľJ¤ó§}-…u1ď˙`źóülIĺrň}ĚϛĎ/lľCdŸ_~jŽnŸżŮßÜÎÎÎLěűëľg@f˜ď?;;%É\I÷ź¤_ßuŹ6'z}_˝č.iżžítň䉁Ű?~R;Őn?Ŕô°°-˛Aőůš˛Ž<<Żł+M_­Š8:לS-JţŇß 2ű Ůżŕď{źxřŮ >Ď85*TtůlU÷ˆśŻ8ŁěŸ˝nŻémňű÷űţłmłëűÜjSÇVĚő­ôúžŮÄő]Ősćú.Ĺ×÷lëú&`ívčĐa-/ŻôÝć’Ki§Úěů/ÇżßßöśP?óósúéŸŢşŠl“EŔŔś*—Jń ÖAÝŁâëÂĘiš~-m–Î4]5˘ô/ý‡`:JNS‡ŠÝkî‚îwÄŃ=.˝ÔŰźF^żéz ěçŸë§sß÷Ő0­ŤŤŞŢ}Jő'?.='§bZ+;ˇGÖDĄŽ† uiŹčŢ`Ąîë§íą4L˜ÂM›-Ú׍Ł!ŁłÉ"˛0q–r૲ćéËA¤Ó Ó4Qąß“žô:B˝ž“qŚşć{š–Î×ÎŽďkâëű›–OË Şéőíy}Wuďůóşď%ŽîyŮÁř؇6\ßŔvyĚcĽ×žö/{>oZ^n¸áíT›=°xĂţJý\zé°‹°°-˛h;UÄܜŽ8˛ĆŻ* ×äŸYUĄhŮ/Š–í tyIťC:ˆŸÄByŽ}Vłn]‹…†mޏĎéşËguů%‹š›í:eÄ űQé;ˇ7SWŘp…i­XZRőÔÝŞ?ĄŕîSrϜ•WŠŮ‚y?ĄłţžZ9ˆVCÄŕǝ!{ŹÜú(ˇýfš,”›&¤őęl°HżŸřŚ`ž#-W"UäkŽŕ(ëş6JÚDfĘE•Š…śE˛ďpmŰe”kĂN%_ƒWŮŻj%šž›gÖT¨†c]ߌš"šžçěőm~v˛v–qÂ(Ŕ$=ń‰?ĽO}ę?ěŇÉ\§Ď}îłtůĺ—i§Úíç˜>ś¸2ƒĐ÷şÇ*–ÎkŚxN—œ=§•˘Î5făčUŁ5Âőżř7ƒÎ%§<7´ŕUt¸\ӕóžŽ>äéŢWŇ՗Œ9c=Év„nÇčśÎ„+*kkŞŸ9#˙č]j;.:­ÂęŞÔôĺDZ.´ľPŹ/ůöŠĄ,:+ňMŚ ÉmŻ\˜"śh=Š3\‘}"ŽëČ C•šŞŐ˛žp÷ŒÎ7Ěçcš,Ţ?//ŢĆ`ňßCżď+ł]A‚~áŠ^×Br}Ď莚B…ây͖Î鎳Őôúž‰Żďٞ×÷œgŽďŞ•Şéő]ĐľWnťžÂ4<źć5ŻŇ[ßú÷zÇ;ŢĽŁGŞ\.éúëżEżđ ?Żűß˙zídťýüÓGŔŔŚôpľbvfFĹBAĎՌhĄtA–\­é\­ŠUżŽŞďÚżô7Ě_öĎĆŰÍ|žőuŮ|¨Ťö{şć˛ýşüňĂZءϜäĎg’!‹^ďĎ+üFC•ŐϞVíŘ wÝ)çôŽpýŔ6V˜ĹŚĆÍ 8ëűś7H¨­ąÂ'˛„“ q8šĐ…ŁŃš,ZáŒőІrA‹VŔ"^ÜxŸńwęTÓ՚ďhÖmÚ­L“ĹĽńF3Ľö&‹üç;h*—~ŰLĘ8SĂtŽË_ßłs}/i˙R ť×j:[őă띌Zŕm¸ž÷}šńuůžPW.zşÇĺÝŻďaßÇ´‚FťÉŁő} Ś\vMݘëňÉO~’]vŁÝ~ţ€é"``K úË3Ŕ›Mr啗k~߂.š°ŞŤ—ŞZŠĄ+ľxşá+CťÎ”<͖=ퟟŃÁĹE]zpŸěß§™rŮŤŰTýš 2h‚@Íz]kKKjÜ}RŃ׿&;.÷üyšŐşœx˙|cEë¸Ę‡$66Z(jhŰŻKƒEgs…Ôľą"ʈ:0ÖoÝŢa ŠŁcý˝äƒf{֓*~>ŽN­šúěɒÖü@fâ× uɁ¤É zw|óÝôű^F Œ eŸöëű ÍÍ/čđ…5[ŞŘëťZďv}47“]ßłöúŢż8oĂŮőÝ/Á”!Ýýöo?ß6ŒŠ€€Ă —Ëe‹E’Ř7WÖeŞZ[[S­VSłŮ´ †`śŰŃÍsń őÜÜŹćççíŔŠ9Î8ƒÎă °a<(Ţl4ÄK}é‚ę'ŽË?vTîwĘ;NN˝)'77­ѰŢ팍7lßц‘oŽČÚ&˛f‹VĂE{đbŘ‹őűJŰ+6?Z§áJĽ0Rٓ\?R#turÍą[Íšńg^Shš,(ţ΋*Ôľ]`ŘLŻýŚaÔösîćú4×m9žMŽďY{}×ëőŽ×÷ěěě†ë›iAś cwđzĐ~f Ú .ďۡĎ.Ôh4ěŕłi‰0ϛAćlşPđâĽŘÖZąŮoŽc°0 KçŐ8v—˘Űn“wňn9Ť+răAs…˛m­ýÔŮXŃšžőIhPsEďŚ Š3DĄŽőę M䏛 U„]›-ڏ/§=X‘ŽÉ #Քš âôœŽxúÜIÓlaŽ^‘Y{Ɂ}śÉÂîŐ#$ł•Sƒt3čÚÔÔbäŻď™™äúΝ׷ Txž—^煡ZVƝň†ś‹ń­ŹŹč'ň‰:wî|ßí~ěÇ~TĎzÖ3űnó×ýF˝îuŻďťÍ‘#—č­o}ł ÝlƝwŢŠ˙óţU7ß|łŽ;Śĺĺ{Í>|Xßř÷ŐĂţp}ď÷>bčéhţŰ{Ţ˙ţöÝćĽ/ýÝxă Ú,ó{÷}ďű€>řÁę _ř˘.\¸`†د뎝VzĐwęя~”<8ô1G=˙Ď~ösú•_yšFqęÔi=ä!۰ţuŻűs}ëˇŢ_€€€‰ŰLk@śŻ`6ƒĘfĐž4U‹GôWš5âyłIšŕhÁ-Čuźřž Z ?%Hţu6ӈ`îű†šľŞjgΨ~ü¨üxŔ˛p쨊+Ër‚ČžŤmŽtŕA Ăj' St>έo5\8šiBŇć‹HůŰîMö3č˜6¤×›0sÉ TŒ?*Şt˛.§›šóLkC]Aäę˛xť™’i˛đrűß82éŔ(×ň0áŠLűőíÇסŰýúV|}ÇŰĺŻď̈́!RLÇ‚žţô§éĹ/~IßíţéŸţY?őS?ŽŤŻžşëógϞ՛Ţôf ňĚg>cSáŠJĽ˘WżúOôŽwüë†kӄĚówÝu—Ţóž›tĹWč9Ďů-}×w=D;ŗžtŤ~˙÷_˘Űoż}Ăs&Ŕ`–~ôßőń—ńçýú/˙ĺ˜0ôŒ˜şQžóëÍ_óŻV:yŽŞ/Ÿ¨ęwřúp<žö‘;¤OŢęÖxÝÝçŤZŤ5íśÝŽ•ľLô{ýü2ěó6\DšpĹÚéÓŞßőu9ˇ~Iĺ;žŞÂň’\?ˆ7 5œAMŮúÎ&‹nÍ퍫˶ůéDÔž^ęhŽpכ-âűv‘šu’ç§ËâڀEŃ Tr|łľ=F#pm“Ĺgď.čSGÝvwUg.ŹŞÖhÚżNĎ>ď~ßφϨăűÚě2Œ~ŰöťŽĚ5kŽÝAסůču}gÇęwn؏}ěčř֞ۘßńŻëůük_űznčçĄ}ČŚ –——őŤżúkzűŰß1ÔőqâÄ ýćo>[oyË[ľ|ň“ŸŇSŸúk]ÝĚÔ;o|ă›ô”§ü˛}l Ć2éŰěxf`ݰá…fSKŤ5=WםKŽŽŻzZišfGű M5šAź} ˛ŮĹ4˜éú™ÔÔ śš˘ZUýě5ŢŠčÎŻŤx⨠+Ë6Í`§q˛Š4ŚhÔć Çi;§ČYWt›.¤’čÖdĄŽF‹žÓ„$ E'´‹™$Š’}jaAwWĚwÖÔ|ą)ÓdáŽ.=Ú&‹‚çöüÎśł‰aذG/&0‘\ßőž×w%×÷LüOëlšĂ4`“ü hˇŘźç<çYú™ŸůyűýörÓMďדžôE}ó7SŰúŰnűŞm”čgffFĎ~öoi\ć÷ësŸű|}ůË_i?smüɟü9rŠžďűnÔv9~ü¸ž˙üßV5ţÝ;ŠŰnťMO{گ뾯ý3]vŮe`\,LÔ ç^Íoţ˛Ĺ)gmMnĽƒÁ66U —–Xo˛Čš+ÔśtŽoo¸:,”;^ätÜś˝N{ČÂ4W´Ś Ʌ,֛0Ô:şůOÁ í’˙t’& étĹŐgOăďŘl*ńZ_ö•4S,Ř0Á(ß×vN2ěö&\QŤŐěő}Çů‚Ž­vżž5ľżTÓ|1ĐÜÜ\+a>“lejœažÇřî}ď{é'ň'ôw÷–žŰ˝ţőoĐ˙ńŤÚÖ˝öľŻkĚzůĹ_ü;eǸĚô#ŸůĚÍ×ţá+ő }‡ľ^ůĘWieeUă8qâ¤~űˇ׆,ń腀€ŠôWüŚŠ˘5ÝF3" Ôô›ŞVkŞÖăÁćZ<đîĺŰýd:ˆ}­úŇJ<:żV­ĆŰ6ăc4[á?Ţřqˇ:Î?Œ6Š––żKÎ]wŞpň¸ŠŚšÂD˘|Đ` FmŹŘ°ŸÓóńz“EvŰŹčŃ`‘5W´Béó ×4ŒÄß]Iž\óDúţŮ1ji˛0O4Tvüřť tC œ+¨č™@A”{#;ѰӉ$ˇŮő^ŠFZm”z\ߎ–ëž*ő†jľřbW¨zÝ´´$ÁŠbądŻw–0ˇ˝ T´{ó›ß˛ŠöĹĹ=ţń˙šçó&ńŢ÷žW§NîšÍÇ>öqÝzë—użűÝ×>ţҗnŐG>ňQősíľ×ę§ú§4ŽŐŐ5;]Ćf,/Żč­o}›~ů—Q[ík_űš]6ă–[>o§:yň“Ÿ$ĆAŔŔČƝ$ż_Ž0MÍfĂ6›E‘i°HZ,âqäxŮS!^Üş#'tZăŘfŔŘ ’ ń }É :›éĚ őĆjţIŽ-;M_NĽ"÷ÔIď¸MމcňĚă(j5BdمAŸŇ í" ;lߞşčŢ\‘>ßLŃţ8Ę=î:ˆÖ›+ڞë3Mˆy츎fâďjƋżŤŔk,ňۘ&‹3Ղ>ĆLÄß(ĎLRŽTô&;%ÍVęţăĹ׎_ť…40Ńíúvăm<•L‹‡¨Ů¨Ťé4ěsŽcŽýş Y”JĽÖ>ŮÔ!ă†*.†0Ćë^÷zmĆUW]Ő7`ašF~ă7ţŤ^đ‚ö;Œţćoި—˝ě%öţŢđ?űnkž“ç=ďٛn^0­@›őöˇżc[“bB&?üĂ?4‘ó]ßç>÷i=>zôčPӗä÷É °ó°01Á‹nA ÓPaÂY°˘^ŤŤß~Ó+Ě@źë¤Îń ňüLA‡ç]UâÁ÷ĽşT’cÎÄî‹3‘.ŮWĐÂ|I3ĺ@S~srâóv›uyÎŞpö¤ çÎČY[QdZ-Ls…“Ĺ+ňűĽˇ[=f=tÓE{0ŁşH-˘´Ń"j _ôaä,˘ÎAz' äŮď¸SŤÉ"tuşVTy5Ô%+ĘĺPWC•J‘źx7wý/Ě{şdĄ JŘýú>źĎü m#™>'”o.őȗßlĆ?GŚš%ţů fíϕ™"Ç ÂgA‹Lgp‚V‹ézä#żW˙ň/ߊü“=ˇůŔ>¤;îřşÔ^a×_˙-šóÝ?ŕߪ{ŢóžöńWžr›žđ…/ ľŻićřęWo׾×Ţ[ŰŜ÷ĎüĚużűÝ/ţQ˛çó–ˇü˝>÷š[îkŚyç;ße§rŮŹűÜç:˝éMÝzl?öcý[F.˝ôHŰ>€Ý…€€‘lś˝Â ›ż˘n4ęjÔëń`ąo[+ĚXŻ T˜qáä/ô˛˜+Fşf<úěÄŰ-âAčdPxq&Ô=}]˝hŽ0ývŽpę5yçΨôŐ[U8~TZ^2o¨Őţ0~sEÔą8=śkˇąá˘Ş˘˝šÂÉ˝b÷‹ői>œ Ӈ´O âćBĘM‘â´^9JżÓAš0~AÓdqjÍŃÍÇ=­6Ě~ŚÁBšŻ…˝°˜ŻÝŤăëŘ~Î]ŽďköÇ×w)˛? 2ŸsvyؖŮ֖z-°SŞ4›eÍĚĚŘĹ,hąŘ^ĎzÖoęIOú9&ëĆ|ÎozÓ˙Ňňňrßă:tPO{ÚŻhRî}ď{ëe/űÝóž÷h[ó͟ŐóŸ˙Ű:wîüŔc˜éMś+`ń˝ßűýÁü~[›Ç=îqxý zőŤ˙Do{Ű˙oŕ1ŢţöwN$`¸ř°0ƒÚ+ĚăŚý‹űşjľŞjŐjź.i( =ŤďgŠŇ‘9ű'űv\y9€Ţ_Žl¸â’řšŇ4É(śœřœ gOŤxü.O•ߏ‚@a¨d’ÍŽGoWÓE§Î÷âäĂNë6ę{›Ÿ&$ˆ8ëÁŽ~ĚÇmJL°ÂÎöâ¸Z,›k#Ô a|?™:fŻ-Ęńľ{dÎ\D~÷ë{6ˆˇÉŚ IBó3Ą WšBö‰ÂÖó…BĄokAŠéşćškô¤'ý´ţúŻßŘs›wźăä™Ď|†4 ‹‹ úď˙ýŐşä’K6óżę‹_ü˘nšĺó}sŰmˇéüůó:xđ …+ŇfÚ+|ߡUřŚ˝ÂL bĚ 3mDżAޢiĄꪅ@÷żŹĄ_UˇËőń}łn!ˆ6ŰLM:5ˆˇź¤Ňמ˘Ňí_–ťt^Žß´u ÝcQ×ĹÉM°Ńž´CnťîGĎŻo?Bçú(ß`ŃšäBa|ćn[Îúm(7yžuĚţL“E=pt÷ŞŁ˙8îéSÇ<_vUi: B훚žł–Ďsí7Fm…ŠV+ögÍüĚmśq›óó?˙łşâŠ+4Ž?ř;őýß˙HMʏţčt WdžíŰ oů–˙¤A*•ŞśĂ/˙ň/ÚŕP/ćgâ—~éżhs} aĐ 6­_{EňWöęńŔŻY*•5łVžk‡˝ž‰œ1Me/˛ËbY[Îi6ä-_Páîc*ž¸K…3§â‘˙†˘ŔLk⌭žbłM“nş˜ć舎8ůéAÔľÁBN{8#šq:Ś(é/ßdŃX˛/¤…RrÄ+C-ÎÄאłű›,6{}›Š@’ĹQ†vʝ ’4؟-óœšíb˘ĹbşĘĺ˛~뷞Ąg=ëšUŠTŇsžó,MŇCú]ˇyŔ Ďţ }ˇ1mD[Í|řĂn÷ßńíÚˇo^ŤŤk}ˇťëŽťŔ¨h°0Uůp…™$ ƒ¤ÂqwüŔŽŸ§WYQ鎯ŞüőݍpáŹÜFMNüœ-R{ŤĹ0c ť]çöëş7b ßpŃ~ÍÁˆśf‹lꏶF 7i´p˛Ű´ŮÂÉBĂ3Mř’9ľćčćăž>/'VUM“% -I›…Ť( íĎ\Łő3×°34Sl˝‡=컇 tzĘS~^W]u•&éȑ#ˇ9xpżv˘oţćo˛•AĚĎÁýďýŔíNœ¸[ŒŠ Cg`6›Ä ňÖjfjş6ӂ˜e'3S€¸ń9ΝRéä]*ž>.ˇ˛*žlJ`P>mPÓD¤Áéiç4]´ä)˛ňŽMŮúőSrFŁPžÉ˘irŽŤĹ˛šv]ą řžiCŮýM›e•BÁüĚjĆ×o­ZľÓ) jąčeŻś[|čCďłm[é™Ď|Füşzűšš9=ůÉOÔ¤ÍĚ ( jÚ.GŽ\2ôś—\28H’´)0,lJŻéAĚ­™˛Ŕ,ÍŚ XÔ…‘ŠŻ5ź“šőŞŠ§ŽŞtüÎŢ-wmEŽ WäônŞčŐlŃ}рeđöęz^ƒ ßpĄŽw•k°Ógş7m­pmŤ…%­ă”(˜&‹zŕčîUG˙qĚÓ§ŽtlŮ՚i˛…”çš*˝řg-P­^ł-ŮĎaţg3V‹é;|řĐHŰ'!42°y‹‹Ă7k,..ÜŚZ­ €Q°0fĐÖLM`Âf _Žľţ˘~NJ˘f]îꒊ§ŽŮ…ßwăuö9§#”Đ=ă°QŻí†ÝÔăN}˙ÎIJ’Ś[Č"ţÔd&UńĂx –ů4M“E(­ÖÝľäč+g]}9^îźŕj9^× 5Öq÷šŹ­Â\¨Ś=Ś^ŻŮćółHbűüŐ_ýÍ(›kyyEúЇ…uľZm˘Ű`Œƒ€€z ĚöűKřlzfÓ,Íôš˙+Ç šr++*\8­âéŁ*œť[N#Ź3‘Öv}›&z5[ôxÍ˨ű Ţ~PsFűö˝´ż[ľîgá ÓZś,L¸Bńi3ăü&DŃ ^stóqOŸ‰—+ŽŞÍ¤˛ÓzdA  ţô›ýYěüůĚögŁťăŽŻëÍo~‹FőŞWý1- 9KK†Ţvyyiŕ633ł`Tüů€Š0S˜żšo4öÖőĚ_Ö3qEÇq̀zč¨î;ŞĆK Xxń¨÷8Sƒ˜Á畺ŤÓWG— v:c1HżzŃבš0`Uö6ů—öńů:ć<ז4sü6•N|͆+’!ý\˜"´č\˘žý—¨G“Ĥ÷[ßž}´žWĆ OtăvíýJ§ 1M~<¸_kHőz|”•Œ˛0L0Á„˘Oó´TsôíWĹ˙P;jžÉÝ%9‚i]ß&H‘…œšńĎ ůY¤bë˝ă˙ŞĎ|ćfëď˙ţmúÁ|ŒŽťîZ]ěNŸ>ŁŰo˙šî}ď{őÝî̙3úÚמŚAŽžú*0*Ś0–AӃ$ˇ˛S˜!x3ŕ댰0ƒčvđyŠ ;ăĺë’ĹÜ7Ňć9łÍf9~SŢÚ.ܭš*,×ŐstîĐń¸}váÖcœăsěÍî?ÓşuŇ†ßŒěb*(\hI—q˜ÝL+ĆjÝŃ]KŽn;ëęËg\ÝyÁŐR=i‚wAž`Zס™&$ YřMż5-Ë8ӄ`Űm_Ő?üĂ?jůů9Ýď~÷Őv¨Őjě^L`jěŔl:6ëŽ9„i"0Ó&˜) ę)?HŽS âÁúxÝr9i+˙$ă˙ŔˇĄŠŇšă*ž?!ˇž&ÇNА;çΐEk˙MŹĎĎÖŃšýfŽ;ĚzMö¸§ÉB’% ŹpL{…Yiâ}٤łgĎőÝδ•üă?ţďśużökOł&€?•0UÉôŰl!ŇՋžŽŮďǃͥĘńŔs9|žGźŢ<7W÷"šŠJçšß6ŃĹP!‹ný›-4fłÄ8űlfżą–řËvómA¨f5YÔLŚ Iš,BšQź˜ÇQňŘKŰĎj̋Ć4YÔG§V}ú¸§Oót|ŮUĽé(ľăL÷úN0;ČÖ9qâ„ţúŻßŘw›bą¨_ř…Ÿm[7;;ŤŸűšŸŃ ŻxĹŠŮlębtÍ5×h~~N›aŚyć3CÓô }§ĆqňäÝě|,LE4ĄQÝr<¸|d.Ô5ń@ó=âAč{fËbŻ tÉ\ ŇĐNČmTĺU.¨¸tŇNҚÄnťu´!\a[9ňaŒ,7Ń&ipHF¸ŁśíœÎíťîßžŢŃhŰŰ}ňŻŐçőZoąí|sçeÍIˆ˘uÜt'ʅ+LP"ÄńC5kšŐ@ňM€"˛!Šä6™BÄ>Žňłăţ˝š]Lbľîč蒣ŰÎşúJźÜyÁŐrźŽ&!ŒbZ×w7I‹Š{ĺ+_ĽZ­Öw›ýŃŃW\ąaýüČtŐUWőÝ×Lƒńˇűżt1şęŞ+ôó?˙łÚŒ§>ő—őßx?Mӏ˙ři,`w ` §Qd§1€[t#-”C]ľčţ—5ôŕŤęvš>žoÖ-˜)Ü1~ĂN R\9ĽB弼ƚ ]$OŚ7!ŠÜúőU˝"‰ˇCliEŸ†Šţ“÷íĆďżh‚iƒEŁ*ňĂ´š"˛íI›EŽŃ" ]¤íă†, ˘hŽNŻ9şů¸gŰ,NŹ8Şš&‹”3˜Öő=ČNřŮŢkŢ÷žčŁý÷žŰ,..č)OůšŽĎ™f‹§?ýŠäo|“Ž=Ş‹Ń“žôD}çwŽ7˝‡Ů÷ÉO~’Śí›żů›ô„'<^Ł:yň¤; ›2xŕusłŽŁdʄxú˛ů@W/&‹šżNŠŕ:c×ŻŠ¸rˇmŻpëŤr‚F|Şa˙iArËzč!×ä_ú4FŒŐD‘í×ë¸Y3FśmŤa˘cΆŠŹyb}}çńň­цǦąÂm5X„­… L‚@^3PÔ6âőůÊV˜"jVäŰ&Œ1›,âĹ)VŽŽ.gMžîZr´RwL™ĆŽ˜:cZ×wťţo”đÄćU*˝ć52pť§<ĺ羸¸ŘóůoźA×_˙-ýĄFŁa›2.FŽëęŻx™ö°‡˝™~ĺ/xž~ýןڭňěg˙Ś~ř‡h¤}h°€Ý€€‹ 4Ş*^8ŚâŇ1šÍj˛~ČpEgĐbÔf‰ŃD1lCĹĐۇëӃ( Kü@…f`[,žH/J+’Ű4HŃś>]6˛0L“E=ptjŐą-˙qlg6Y`w{ík_ŻS§N÷ÝćĘ+ݴӃ ňżńëˇůřÇ?Š÷źç&]Œćććô‡řr˝đ…/ĐŐW_Ýsťýűő?ńăú‡xŤ~臧­d‚ Ďţső'ňj}×w=Ř>ääÉě|Ăţ]Ź3äsΡŽú[şšŰlńŇu^Çbž3 ę6͏ ŔDőúËöüú^÷ëőşVWWuúô);ĽĆţĹífÓVQ:{‡öÝţ1•ĎÜ!§^“Óô…ńŻ™@­[…j{loÓuć6ŠîŁh=^:]–ŽőQőëúng×;íÇĺőŰÖ9Ý÷Wś˝Óś.rrë•_ď´Ö›ĎĂńă_ŇŐ@őľPç—"UęńGć:ÉböąˇćąŤŔqÚ‡NűvćůČŽ7_ Łqr^üO‹r!Ň5ű#=đĘ@÷˝$Đĺ Ś9"’çŘĂîIKË+ö=räRíۡOĺršőœ“{Ó˝îç9{őCÂŽvűí_Óżř%?NaéŔýşîşëtßűŢG…BA;ÁÚښžôĽ[íÔ.柋őzüĎ RŃţ<B—-QîśsQÇýn;ďw8 ľ3ţÍ3€]c˜évň”&\Q¨žSąrF^}YŽ_]Ÿ$kĽp’š6LX`ĂzĽëĽő¨X~* ľW ŢNă×4N8ŁžçĄőŚ g};űžüzŮć ;ӈɥřĄęŤ~ź„ŠšŽ<ł}č&Żç˜xˆů@MF.´éű׾MÉ­9`ü_&UaÂńz3W†}Ľ1BśÉÂwt÷Şô™ăžVëŽxU Rü3ĹH…‹$;ŮďËŮô6ŔNqď{ßË.;ŮüüźžýŰhŔîFŔŔEĹ ę*ŹQaő”źćZ<ď'1ƒaúw˛Ű|č" “DE?Qű~ifc=ŕtl—ŽË‚ IH%JvLƒůžcC šă:íŻÝ I8íSyDYH˘5ľ‡“/ňűEš€Eëq°Hßťk’‘l‹…”'Üřdüf¨z5Pł?Äëě65ŃzďQÇcś0UúarĽOgÍÓaÖ´?bČœş™Ä+î2ŮÇřŔ ĺä—/„{žÉ›GŔŔEĹők*ŽžŒ—ťĺÄ÷•›´¨WCEŰún Ń`1|s…†ÜŽÇsšF‰‘öÔÖPąá8=,˛[3QHšrăDž0ŢŚJőx]# qxÎzC…i˘Čš)’ĆŠřšČI.ÍNş>ÝĎL#’~1#7Yi“ĹÉUé?Ž{ZŽ;úöŤ"=iśpń4Y`t,LÍ$Ś 1S;4ăAu3(^—fŹĎÄËńRt#;ö>ŕdâAü@nł˘B嬝&Ä Ýý–LŰëEIB{ĂD{EÖHąĄaB§éz<ľ7\´)œŹŁó|rŰdMmjk¨čl°pÓíCŰR!‚p˘pý6k°9ľxßJźŽ/~źŻ Däš(ş5S$/”Y:š-ŇÇöYť_´ŢdaÎn„P„yK~ÚdŃL›,g’sż|A[Ţd1ąë{€ŻÔ]Ž¸:ş\°†żzŃבšP ĺPeŻ˙ëŰp…_“×XUĄśߎŘéAFXt4^D6řDú7L¨O“Ä8 ŇP›.†k°P”…7$7 Z¸ŽŤ0JnŁřÖ4|DÍř;[âĹ,"™ŻĹśT˜=;›)ZiČ 76[¤m*Ă6\˜Ý“ă…ćőô G dM§VĽOóâkĚѡ_¨äI3[Řd1Šë{‘ýNŠě0žzÚˇËg};čÔJ skaüďk"՚‘šA$ţ†XgţŐbŃs4StâŸéčĐźŤK<]uĐÓ7.čÚ#É{ żŮěhfÜ>/tg<˝TK„÷Ďd˙kƏĹŁÁ‹°)ŻąŹBí‚ÜćšÜ Ń>˝„ÓçśĎ’´Sä“5H´7Lôj¸HţGY´^™u„%œîÇłSjäNec#E{3FrŽŃ†Ś‹Ö>ŽÚťŚ5"2š7Ý?´/íÚÉ@ÂőŰ4dá˜íL˘Şšć+X‹ă›0†Óú,74SČPQ[ČBíÍöůŹĆŁKł…ëŚă5YŹŘ&‹$¸aB Y“ĹÂ5YLęúŔhn=éëwÔő™ťšşĺxS•z(Ă3˙Žľ˙KVł,WĽŁL=ołm›Ů’Łű_Uҡ]S҃žĄ¤ű]ΰ$€Ýßdv43m‚ůËţ;í_÷ťŞ§S(˜żô7ëŒCła<8Ţ˙8NĐPĄrF…ęša=k#üwZSS´OĎá¤óqD­ů9´ž}çú( (hpE˙Ć ×HŃšŽłbĂöpœö×Í7^˜É9ÂěřicE+d‘>vĂPĹŔ‘˙ŃF5TPOZ&ˆ=ďôšőڌěKpÍK$S†8ŽF™ČĆäjŚÉbEúĚqOŤ Gź*R)ţ§eŮKŚ ™¤Í^ßXwó]M˝îC+LěB&hńĘ[ÖťżPŐŻ<|A¸Ś(؉XŘŃĘńŕň‘93TîŰ0Âr:mţ˛ß >_2ăß} Ł@Ž VŹÉ jńŔ|3‰5 ŮL1j“EÖ^EšŞŠ\E[ó„]ď$ťf§”íŸo˛Čí›qä*4 Á"9ŐüăĐž^ŇTa:%’ÇíMQZ‘´7„Qv›„/Ě~n#>Örź,ĹűÔM{…ŮĆI›%Ú&lń…}öF š‘MCDŮzic3…yGNîxůFŒÎ㼁’V›Ĺ!‹ŹÉÂ\gÍtš“Ĺ té>iĄ4Ů&‹M_ß°ţü+zó'*°ť™€ÔÓßrNOzМžvÂ`§!``G+ƃď ĺP%/ŇĄŮ0™žAÉÔ ć/űÍŕłŮŚ'l&Sƒ4–l¸ÂŇů9:›+&ąŢɅ,ň +64YdËz‹EŇ(Ńހ‘5LlžÁBÇ79‡$h‘4U˜ A”ĚşĽˇvúÇ>oŽă…‘˘Z¤ć9_Í ńńÇëŮ×wÓĐHÚ0áfÍN{3…˝5g’ś[ČMGœŽf 7ű2ĺäš1’´GrüüńӀ‘6e„îúľ0ʔ!ŚÉ˘ÚttbEúcžVęŇŻ TÚ?Ů&‹Í^ßť[Oúzĺż-é‹ń-€˝ĂŚ>}gCĎ~Ô~Ýďr†3ěüF°Ł™1t3 m–ŲF愾źćJźŹĘüń›)†^Ň„˛@CŇPą^hŃ °­ mjľX$š „ÝŢ%×jáä‚ŮţmĂ´Đ!yM7}˝0=?ĽĎŰi@˛é@ěvaZ@‘_ŸÎňaŽí‡ňjńq–ăg—}…•¤ŐÂśWt4JŘW˚(ú5[¸Ą EŹ7SDٗŘv<)ˇ_—ă­7^$„NëćY´š,jNzđ´PNš?&ŮdąŮëŕböŽ[jzŮť–ń÷)Ŕžd‚S˙ĺMgőßł_˝~F°°°§%‹5yţŞœČˇ„i4Wdë#ŰąkŒčX$ľˇXtm Xall¸P×őęő|GŁE[c…‰>dĎgÓ~t4eŹŻĺF6˘a§/qꥢ3ńr>^S ĺ…éy; i“„mćH›-’ŔDŽĄ"kś0ďŮMSö&ěhźpZÍYłEž)#9~ˇf‹xmü8tݑBFÖdqrEúôqOŤuGß6…& Œć/?źŞ7~lMö6 zé;—t삯_ţž}€íFŔŔžfBn`kńŕű ›\ZŽ$Ӑ„r ÉsëAˆŹ"ŠŇ„ă´Š0ڂ­ădÍíÇÍ7QŘΈôy;ó†mʈş7V8Ič ´ÍICC‚HŚëhÝ*™kĂâ1Z‹÷^ň.Gvj7Lݚ)˛Š´Ą"kóh­—Ö÷3§łń˘{3ņf‹ôq¤.űĽMa:‡ËČMőřꚐ:ŚŃd€á˝ü]Ëú?ŸŤ ŔĹĂŞÎĹ˙^úyYl'ö4' äůšAņ-† IlşŃ" Hd!‹ Žş7\d÷“ uě× XDQŰqŐŃTŃzŽ×_ß.=~vşp"e…0JÂŮmߚ÷çřŽ kńó+ĄękžÂZ˜6T$Ń…]š)˛F‹,dĄÜú(mŠČ7Z8YăE˛ž­Ł­™"×l‘ŽˇŠŽôx­F ' q8É1ÂôsŠÉ"ŢľŇtt|ŮľĄ ¸x i˛ˆ˙ůr& €­ňť˙˛¤÷~Š&ŹŞ6"ýŢďlöś(Ôâq}ó?şÂ‰´T ŇHţORŽm˘ŐX‘œŽ†ŠőʤĹ"ĘB=,ÜôůőŠl˙¤Š"i ˆl_…ŚŐ:NÚh‘…)rÍů…“NŰáÔăc/Ĺw.ŠŞž’R¨*ąiS…•6GŘ,G˜kœČ5Vd ‘“N–ŮŮLĄ\#Fîx QŘŮh‘~úÇsC%ŸČđ! ó’a -×5ƒä˝-–’ Ęeű¤}4YLá ŮďBś  {ZҐP—FÚf #…(z4ZŘś‡| bC[E6ŢßŮl‘=V’HCjŰo˝Á˘}ű.[ŰŠő:íMisEŚ0áŠhcȉ7ô‚řkgëj^đ5Í{\OŘ÷mÎ-ôä¸ćsOŚÔHNŸfŠ,$ś5^Řf sü0ßl‘}.N[SĆĆf ĽAüúäxćźB7ůF YAüöŞńű>ąâę3ǥՆŁ^¨ěIE& €i1ӂŽ`˜ßł%‡éBl v4hƃäußQŐ7íÉúb< =[ˆěô E7ičq„xœ˝aŚÍ"%U›iŠp×Őm˝ 2$!‹´HÁÉľX´*r-],r é6n”źhŘÚ>LCnŰţöóˆĚvi“Eú:nü8)€čŢTŃZŸ{ŢΉьł(¸ĐT°\WXMĎÝń6|âvŽĐk5Y´2š)rÍš&Šśf őnśh5Sd/ÚŃlő8^žŮÂu“…ůŔ# f›,Ň)B‚09—Ĺ™ä{82?z“ĹćŻo€˝ď/?źj§€ŒůphŢŐ/Ď>ŔV"``G3ƒĎ+uW§+ŽŽ.ěŔśąXŽtő˘Ż#sĄĘĄĘ^÷áqŰ`5“€…mAˆlƒ‚Ň–‰a)ş­ŞŃ"Ę'Ԛ¤˝qB},ňŁÖTíŰwßżőzYCEÇz̈’dž(:nÓ& Ľ­Q-PădUţšŚÂZÔʨ´&ćnđHť&dá$ íÍn’qť7[Ź7StośhkŹˆÖ›264[t4etkśÓăŮOrȐ…Äť­5_Nćşüś+•öG*Ĺo{Ř&‹Í^ß{Ý;nŠé[t2żŽ:PĐcݟlv4ó—ývđyŠ ;ăčĽZ2˝&pöăí¨Ďtd›+­€Â4›+:×'Ót(¸ĎľX8Yđ"ĉ֧ţh{>{œ4U(ęlźPÚL‘lŚ6´Đjڈl…Śë“F‹Ümś>˝5çd›#šńşZ|ÔóÍxŠ)\ńÓsČŞ:¤~Š×VT¤Űśš$Ň Jz4[´+Խ٢­™Âîף٢rČ˝nf‹0űţFi˛¤ĽşŁć…dgŠ0ßŰĽó‘ćËi“Ĺ€ălţúŘťn=éëeďZôb~G\w¤ ű]ΐ'€­Áo;š™6Áüe˙öŻű]ŐÓ)Ě_ú›uĆĄŮ0Üî}Œ$H´WlFŒŃ\ŃšžßvÉ4!Qş*×HŃöX­f‹îĎGIƒ:-r J'YČN÷á¤Ó{´7]tL ’MŇą>;ݰćË?QłÍQĹO>FE럥•Mᑜ_çz×Uä(˛°ƒÓŃL‘kʈœ´™˘KłE×fŠŽf ťŢi;ΆýÓćŒlżĐÍB#Ł5YTL“ĹJ|ŹăŇjĂѡ]¨T0Ó|D›,&q}ěUŻüˇ%EüÝ €>Ěďóťâ ?{X°XŘњA2Řlţ˛ß >iíA-ˆĹë–ËŽÝڎ¨ľŘl…“ŽK§ Qç´#6T Zo‚IČ"Í8Q{ŕ‰ZÉă0Ůśő8Ű>ŮFiӅm¤ˆěDműٰ„’öŰh‘ŽĎš*ÚÂQŽčXo?)?ţPÍnš+ÎU.5ă? ,ôŽŹč˝Ţ•×z˝(ěŐL‘[o?źAÍQďf‹śăDÝ÷O§­Ľh5Y˜OuPý„Ö›,–ăk10A'iŸđâc™—ćKý˙ ŔćŻo€˝éĎ?°˘/žôƒ˜ßćwĆÓnXL {^ä$‹üŽl‹CŽpҐŸÍ˝–ŽŰEYӄZMíÍQÇóцfŠ$’ŽwÖ[/ňűŠó8&ƒŕD=›*ěúh=dĽa”°Č?U—ŽĄpľ)5“IkjôsÍżn–ŻčľŢ =řđœÍů扶f‹Îf 7 Ą˜űݚ-˛ăŰí•Tht6[¤m*Ă6\(†ĹąÓ¨„É<+C…, ?>ĚZĂщeWŸó¤FŕčWŘč滚zó'*€a™ß˝vF¸Ś(˜&W°ƒăÁęĹrd[ĘÉs#ťĚxf]¨ýńsf›žlČÁKá[ÍůçľŢ8ájc`bBëóĄ ŰH‘-=ťébƒ& a‡íŰ+Yמ>L1Ňé@˛ŰtWˇQűëš~ g­ĄčBMáي UEľ†úr =~î6=ża×gďĂ Ł.Kú>Ăô\6<έďÜoÜă…=Ž×úN4ÓdŃd›(ž~ލGńG§şŸ<7ľë`z݇VŁâw€­@ƒ€mśéęE?)AX*hŠž¤#ăÁç{ÄëŻ^ 4Wč=‚mŁnÁ.ŠšIŤBçtc6WtŽďş›Ÿ&dř ľÂŁÖ{hk˛0ŰT‘7´M­ŰtŁľzköË&Q1ÍÁŮş‚sń˛ÜPXOŰl3„Ö?;űᦟť“źÁëł[7™Â¤5MHh[Eœ°Gł…“6L˜í5[dŚz"ěŢlŃöşšăľ5[¤ÓŒ$łŒ ßdŃLCg*ŽÎĆˑyG ĺ$<ŃÍfŻo€˝ćŸnŽęsǚ€Q™ßćwČă0+˜v´r<¸|dÎ sűv}9€6ŮoŸ/™ Tę7ŽGnQ‘W˛ Rř;]CmMF4ćúüă\Č"yĺ48aSYŁD2”oڧH‚i ÂQŰc×$˘l;›h­7M Ž’PAë8­ýĂ4理 ˛ýÓđ…üřüžÂĺŚÓ\ąÔPT ÍǞěă¤o( Y´‰FZoޓ=×(9vú֕Ś#ZŒ(ŤČÖ§›gá‡([źńöő]Ž—=ŽÚBëűeŁÖă|ČB­ďݟ >• ţĚVę&dáę\5 W”{\Ł›žžö˜żýؚ`\ćw ÓDŔŔŽVŒGáĘĄJ^¤CłĄm°ë=Ůżě7ƒĎEˇOƒ…{%ť8AÝŽąˇ ŚŮ\Ńš>Í1´Z*ÔŢ`!Š˝Ą˘GƒEŤĂ6V˜L@gó…iƒČBQ’=Čß*´!ŒĐLÓḜľÂü'h NWœŻ+Xj(ŹIůCdÓ!ÉÉgsŤÉ˘c}&]ßúœó룤)ÞkZB‘5GŹ7Sti˜ˆÖ›464[8aŇxŃ E8˝›)ěqڛ2ZÍŮŃֈ‘ě&[ ˛0jžŁSkŽ.‰—Csń5ÜcťÍ^ßŔ^sn-Їnkč–cMY íĺáyW×_UÔĂŻ+éĐcĂć¸A °ŢPhŚ9ťfĂQ-°Íśľ"›ćcĂçŞ.CpÔ:žůčÍÝ0r’ćVE—† Ó<ŃŃDąĄńb`3EG#Fö}8ÇWÔ}˙ěŮ!Břó;ť–LŇđ{oˇéëŘCnúR]˙üŮŞAű/—cťźďÖş˙­łşń~ü°Ŕ^őśOU›e~—°0-,ěi‘SPX˜—9EŽů•ĽMZoałš˘×Ňo˙ČŢ:ë!ƒž í IVĂ4Q¤Ďˇ+ŇýZÍisEkű°=daś‹Ňć ӀQmĘ?ľŞćůŞü•†Âzźgœp65ÉúgŠÖ9Ż€ÉqňçŁlżśŚ‹.듓—şśœÂmkŚčhžčÚL‘5^8ÉÉőlŚČŚ Ű÷7˙qÓLڰ_]úÜzSĆzsF˜Íhâ8}ó%@:WutžâĆ÷C—Föśľř÷Ím§}ŤDşëœŻŢŢčť}Ïôś˙¨ččy_×*čМŁë.-jž48ôŘůŢqKö a~—˜ß)˝~F0i,ěi&Tâű^ŤíŔö'•}ĂiŽČ=śŮGšÖŠ0ÍdÓz„vŸ0}lÚ[¨ŕÚé@ZĎohʐmðŠÖöa‹H‘(Ź5,ŐœYQ°\SԈŇô@|L'WĂßł­"ęąÍ¨ë×Ë$LŘÂ!l’!}bcŁE{ĂDfÇlo´›źŸ([ßzĄÜńĚi8Q[SFŤŁóxYP$kłč˛đCG+uišîذEvˆ.jĄţĺsU}ěöřwP8ňîI# câŸÇďşwI?t˙Y-θě^o˙í&ÇüN!``XŘÓ"§¨ ¸¨ °Ů׺×K$Ö †iŽ0ăwQ÷í‡Ý߄+Ě}ŰVŃj~ˆŇĆ Ľí7<ßj¤Č­OŰ!’aĚHb vޏ(ťlĂCXm¨qbIÍók ֚RÄ’ć‡Vň!?=HnjÖúVXE}×GNÖÄŃą^ŮT!ÉűsŁô)ÓDá&ç“5G8éű°kœ´a˘oł…=PŇnĄ$Œâdď/ה‘œ@Öf‘kÄH›3ňÇ3çä¤MĄ›żĆ6F'üxűJ<ţť/Í0̈́8„,3ŐÇ˙řŔŞÎWĆHVta~Ö>|[CŸ?îë×nاŤxě>ˇžôőšcMŔ¤˜ß)ćwËý.g(Ŕdń[Ŕžš&`q@~ń`|ż,ĺÝ|Ł‚3|C…Ť‘›+ÖOHi)B¤(tÚ§ţČfštú°ŐvŚÁw=\%F[Ł…mšH§ÇH.’ŕB¨ĐÔëňĎWäŸYR°\Udš#s.ćÄźö“í˜Î#šőnľu}ëCY—”IÄg“ľLdßSGŁ„e˜f‹ŹŁŐLŃýxRnżśŚ‹ÎƋd›˙p“¤NgČœŠÉŹÔ3­A<ß˝öË“őţ/×ő÷é<­%ĎŃ ť¨#ű7|ý\ —˝kŮŢ˙Áo™ŃßVÓ𴷜ˇ×Ĺ÷\Wғ4Ż‹‘iޘd¸"ĎÓűůYĐM°ëÜôĽŞ`ŇĚď–ű]ž ˜$ţ 4€=-rKň‹”*,ĚÚ)C’Áđh=La8цéAlSDŻőnÔóqŹčÜżŰńňmv‰6>vóϙ&†ÎíŇőv;skŸ ×÷3K*j6PQżón5â%\^‰Gţ›Rčˤ,’éJĚmrß& ňëÓç6ŹWś>Yě9ćÖˇöm­ď|>ˇ>ÝŢ5ď#>g/‘ö"s/ńű2ˇöš(}.Ű&^ĚöɒÜoí—Ă|.n—ăŮÇQnż0ˇ_îśuNšýĚcűUFÓ#QäŘéjžŁşďŒ5ĆÓ"ýŻŻ ;‹™dኌ9śy ŔîóÁ/דĆďÓ@ƒ€ÍüĹw3L¨ŤńŇ ’őŚ `śŠ/E7Jf‚č"2 Ţ\2Mˆ Z÷ÉkŽĹâl‹ő9C’ů:rˇÜdĄwk´“'´"´ÓYŹ7V$MfmR›a ě9‡iąƒ›†)Ň˝sۇfƒxT? |őP~ľ™4Wœ>Żpľn&ĺH÷Ďľ8lŞ™˘WEE4üńr˛˘Ű>Ń­™"k H*"§c}v0yl›'Ú/ş7S´…nrNjÔeż´9#LC;›,’kś/ĺ.˙ÄÝěőŢn˝Ű×GžÚĐĂŽ- Űo-ţôąŰš6óOxŔœćJüĐŔna*ü^“f~ˇ0M€Iă7 €Í >ŻÔ]Ž¸:ş\Đr=4[,GşzŃבšP ĺPeŻ×h˝zť ˝Y5gŽČó/ÄăĺÍxi´ĆϓyÓ.‘„+˛Ű¨cڐŹ}"[ßů¸ďvŽ}…ő Eş>˛/•Ś ˘$<á:š …iwp\; EŇv‘M)˘dťlş,dŃzœlůš+55–*jž_•ߏęž١çŐ ˜ČžFz'ˇ>ęą^ÁŠÜ´!mÇëľ^I€!ŠZÁ'ż>ý<¤$ĂŕŘšRlšÁNËa;Žk›9Z! ĺ֛ĎÍNÁ’ŰĎIÂ(ćűľ˙Éö7ésüôq˛ŢlžÆ)LŞ#=ž“'9Ž’†›Ä\:Cć{ňăýü°{ždó×7şšę€§cń˙xúߟŠčú+ Ú?Ka×vűĘiKZ\ĚĎÚmńkÝ˙Ş˘ťĂ'îŕ/ĚLĎ'îh°0QüF°Ł™żěˇƒĎKÝ@/Ւčý3ـłŻR<řÜÚIWČőWĺ5.Čó×Öüí`žÓ6˝‡rO l˛č÷Xý×;ŮK§á•°yŒ$:iŁEÚXąĄŠ"ßXaC"&ł)ô}ůőşüJCţREţ…Š‚ Ť M¸Â´V8i?D×&‰š(:Ô€1Üë›÷m>7mްŇć\ s͚Ɗěű:š(Öż÷\#Fîx QŘ˝ŮbCă…*Jż‡,daś ˘¤É"ůŠŰßŰdŽotzüˇÎę/>´ŞJ#Ň[>YŐŻ>|^Ř^çÖśî>ˇĆ|<°›|掌°}f\Ýô[W´­ű͡ŐGžRÓĹî'žc^ĎzôÖăKţó˙8ٜ;GŠzË/_ÚśÎlcśĹÎđ™ťú™‡Ě &…€€ÍL›`ţ˛˙Nű×ýŽęé˙_jţŇߏ3͆Z,÷?NčÍŠ1sľżŽRĺ˜ îůxŹ;°MI„Ú[†mŽp×÷k5UDCl—[ďDɀź RDéóvА$\‘4U¨Ő8‘KdÍa+,᤭aźżVSíô5.Ź)¨4֛Ś.! t¤ÇéďŒŇF §ŁĄ˘ďzĽMšĆ‰dűőóm­Ď>ڎő-}ÖŰ :B/m•pÓY]˛ďŽW3E’Ű/ӀažŁ0ßlaÎ+lo¨čŃl‘LI’_ŸϜWč&Ą‹VČ" W„=Ɩ'u}ŁÝ9W7ܡŹ÷ÝZ×ÍGń˙ˆ*ęŰŽŮüT!ˇŸńőÁŻ4ôőłMŤDš)8:<ďčńążűڒö•ÇoĘ0íŻýđŞn9–üKĽyŔŹőÍ3śű챆>~{ӞËj=T)>‡KöšúÖŤJşń~e͘Ă4{ź˙Ë5[xžɋ7?ď˙ŸŽ,ÚĎěŕÜtÚ>Žž÷ľUĹ ěˇ'`á=ő†EýÂw/´>ţw%Oů›ÓzůÜąéO[ ŕâBŔŔŽÖ ’Áfó—ýfđ9H瓨ńvźnšěŘm‰œ˘‚âůĺK՜š\žżŞBăB<0ž%ąÓ6…,i‘NbŮÓ§{6S¸}Zßzéřý„Ék9mӅ¤i˜"‰$­ IłE˛]ôA ?ţ0u_Ľ55N_ż\QŻł9’|sE/#5Päß\ˇí'űëöĚC/ 8¸­ŠE66Säš-rMmÍęÓl‘>ޞíhśˆz/ßláşIČ"ů(˘Üšľ›Ôőv ?Ň㮟Ő'îhÚÂ[?UŐ}/+j~@ř ?žţî}ôöƆ×YŽ…|ílUďţ5=ĺĄóú–+GŸšÂ\b˙ó˙ŽľÂť~fC¸ÂźÖë>˛Ś/tüK'żéÎsAźTőáŰęzĆ#tůb÷_6ďýR]˙ř™JŰŚ‰"˜š(Íňţ[ëúéÍęťî5ŮpÂMńëv~vă0S˝<őáóZ‹ßóŸpľç”#˙÷Ť ]u `'€íŤ§}Uę4˜žjüď’Ěďšk0$ `2řmŕâŕ˜aâ~Ő篾ÍNxŤœ –NĎá¤öQŇnŕDśÁÜć›&ňMC5\ ł].ÄáäZA Űśš’17iśHű#L¸˘^ŠŤž´Ść™ ňW*Ét ~˜źŸVB"×ŃjíČ*&"ľMŰŃs˝Ú×+wź^ë‡x(]ďtźNŰz™|…—„ LsD[3…›*ěŃlŃjŚčŢl‘oʰ)а˝ŮBNÖxŃޔѭŮ"LgbŚ!Ŕs´Ţ‚Šk‘ćJŽžđ€Y˝éăkZކúÇOWôłoސżüđš>—†Ďťzř}Ęş|żk˙ÇŮWNůú÷Ż5ět$ú?ýűF Y˜Köo˙˝˘OߕýÍ36Ňéď>Ym…+î{YA7ÄçpdÁÓZ=Ň-Ç6q!~ŸŻýЊ~űUpŰ/8ů˙nŽÚű&¨đ=וuCž‚0ů˜ž­Ąşéo?VąÍ“hü0έúçĎVľYćÝüěCćô ‡ ö3›/šZŽőţp˙żćˇ]SœZ#`2Ě˙&€i#``’řm`G+Ćcé‹ĺHűg"-ŐÍ_ů'ƒń3^¤Ĺ™PűăçĚ6ƒ%#Üaa^ÍŮŤâń†źćR|ëËó+ú˙łw€ÜUâÇß̨ş{×Ű{˛i¤÷^ !ô Ŕíčí8ĘAčíŕ8Zȅvôrp˙Łw齒B*Éf“-Ůînľ™˙źßHśŞ%ے,ŰßL$ýf4#K3ż•ć÷ć=+“Ę[.WËC §âLům“e¸(×^NPDrĺ;Ć3TxŮ2Z.D fJĆ_8ÎH*•’ä¨?8:<&É}C’ŢťOÜá„KgłVXNše"›bűÔy;śIQ‘}SÇ3Id3OTĘl‘ äň™- 2S˜ç>ß+ɔ‘ˇÝ ™-˙3 ٞ8vś„K‘úíßȗÎfý8e˙ˆ\÷pÂü€Ň 'ŹČÁ˧–aâşż'ǃ+_–ןŢ^źp҆¨ VřâĺC&ŕâű7ŽČ‡ŸŃeŻőŰWwe¤-TűŕgG$Y쏵§ýÁěaŃŃňčČcâ¸ýŮýlĆ Éf¨5#EĽ eÚ+ŽĎ„7ńn0okIĎ2ĺA\ ŽČfŹĐ˙gü)áĎOŒJr÷nI K&‘wĚΤͺ‚@/›"ťÝźAţ\™€ C†——1"Ű>‘JŁB{đź\@ƒĺUj—šÚ'2`HáŤ(óFöŽíŇDŠ\°ƒU”™b"c…ٸ[˜ŮbňĚ…™-‚vËdą˛ë)y~.s†żœţ#ń?‹°]>ƒE˝÷oÜÜ>ďO˙pBťüŰďú5™‹üŕŚůĐÓťŚ8đÇ{ƒě Q۔)Î Ą4ŤÂ n“ďełeÜ´)i‚%Şůˇ˜Ěę”ý"ňâăÚĘ.ˇ{Ř?ţY.ť/şDVtŰ&+Eńküó}Ł’Îx[ňÚÓÚ˖JYŮí˜ŕŽďŢ0,ţßpËć”yM3•+{2Ť{œń@‰­ýůéíľeĸŰß6ĐÚśěĽ6ę\đ§wŹ01s^đ•'äą=i9˙°6yţąírŔҰ9…śÍ˙Ý~šâ‡7 ™ó •ôśŰňüŁŰĺ„ ša3$]ţş“é ć_OĘoď‘[˛›ä\ň’ĹrŇ~ą’uś*"7˝•š÷–¤źú;;K–Ńçwh\ŽX‘ĹŽnHd߈+íHÉŐŽÉŻ˙:"Ł)ÎÁÍgô5ę‰ --ę./iÓ/ăi3X:€Ö+űuđšŻ-ă!žB€…ĺˆçÄ%Y$‰śuf`_ƒ-š!5,öx&‹ě€ń`ęd™**eИÂwóńꎗ9J—č”öęÓţkM§Ň’̸’ĐihDRƒ{MIĎAögANvM^śÜEľ×0­Ě^…çy•×7ŐöÜú*´ŰâřƒéŽÉhṕ2S䵛mUËLáUÎlQ°ŻüółuÜX8ÁTf\žîű7JiĐÁӍɯď“]CŽüňÎQšŕ˜śšžű˜˙ĂKł?¨Ó6FL€B%'푟Ţ1*C Wn~´z€…žŽËî Nż."˙xbťTZ{OÜ?Dnz4!§Vx-űő•~­óťšýą B˙Řu႓!Ŏ÷ç˙Ď-–Éţđˇ­ő °Đŕ™ű}ŮŤ4°ĹżŐ ‘o];\sFŒ]3Ü6 ńv 2č9…üÓ o?§[^zbGAű˙ÜĆÓ:ĺüĂŰä-˙˝Ë?ˇRš5@ƒ2Ţűôž’sšĹľ=’5‹BňĚ#ÚäŠűGĺĂżŘ;ŁŔ ŚřÄs{ýs"Ľçiúüy:iđĹŤN픋ţo îŔüD_ ž°ĐŇÂś'Q× ödQܕTö{~áÖ+űuđY—™*׉›R!šŃ³ÒqÚ$:ôˆ?6ž//ł‚ţÇ RL’‘b<ŕ"|Qœá";˛^öye2ZčcĎÜfƒ+[Ňţ4ęo#‘“äĐ^IŒH&™ ˛V¤’bٙŕ58š_"—ąBS]xA@ŔxE~Žě}Ď+m÷¤4sÄxôÇtÚ+l§LťgĺŢöÂőUjˇ]G\Ëő˙ô ™)ň3Odś(ÎLaĽYô~šĚă™)ěl …[šŮ"÷ŘӌśčďD-÷Ąűiš‹Fíß(¤ˇmN™ěš?!Çů?Ş×/Ž^{e뾉“ů%7ĘŃĎ÷€Ľ!šýą¤ŮÎdţđˇ1ůíÝAÉ-YňʓŰËfĽČéŒŮţkŽ˜ŔÍ{2ňĄ_ ČąkĂň¤aŮŻĎ1Ů5*ьôĄôÄĹΥɃbĄ Ŕâ‰&ţčÔ÷îmOîEíŽ|őŞĄ‚÷㲪'řŹ~ţ×Qy|_íŻŤö<%€Ů˛‡ŕř9I(Šƒ+ň­čväcĎí•W{gÁĽSÇ­ĘGžÓ[ÓoöłŠË‡ž%rŃO÷ČtÄüó —žtąěż¤zšX ´řâKúäe_ß![öQJb>˘ŻPOXhi:đőŸuꪞqżfž–L(lr ˜ÇúU?= Ž›'“;“1ăçćËžŽşŰšŒVůL“e°¨eţřëŇŕŰ\užńí3nJŇnB’~ƒ °HŒHjlŸdFGÄKúƒřŠl îçgdЁ˙\CIśˆ2řfŻô˜QfŠĘ™(ڎž šÉB ¨hů‰Ěš+eśČ=ÎËX1Yf‹˘ő•Íla†x&6Ăńw ˜c™ň !KĘ 7j˙F!-™ń'śÉüiĐ|ÜßżqXŢ÷´.˙3šüyűF'vśEmŐ2zۂy4é™ …rĽHr%Ar4˜ĆŽĄoř˙őë!yË㤠ŽšrĹ 3Šĺ]śś2,§mŒ™űůúóŇqţéބ™j18VŸŔžĹíśbbň =᥊DőóxűŮrńŸƒ ‹ĂW…ĺŒl&{śĽäĎ÷ŐöÚóˇ hmuúý‰ćzĺ)ćœĂĎn–­ţď~Í\ń‚cÚ Î…ş2"G­Ęí›'~ĎżúÔ΂ŕ -)ňéß퓻ˇ&ͅ!O;ŹMŢxV×ř…Jg7§Üˇ=%_6 ]ąAyƒ?˙˜ľ…'Ň^÷˝ ,ČPbbşđřŽ‚ŕŠTƓÜ0$×˙}LĆüsŞGʉƛüuľeKŠęíËOéOývŸ`ţHĐר,,hž“Tt™?蚖Lz„­”„ű$œ‘pÚŰ˙âm2AHöÖÖŇe2PčŔşgUĚH‘?żRć ]ˇëĚ'Ă!IZ:@›–”T H:1&d8“Ęˆ—ÔÚL`!dîf§x֛MٟűŃbJexŮ8ń //3DnÁÉÚł ZZĽ¸=ÁQž=ťoây^Ţň^ţ Í~ŮÍn§z{îÖ~|;¸ţ˘šU˘Bf “‘BoÜę™-r+LLůĚÁzƒĺż%˛Ľ=dа¸”~Öéý§5ƒô:ŕŻY$ž~XŹć,ľ|†ůYJź*ëĘíÎwmIÉďď“óÉd˘ţ Š×œÖ.çíÉM›r˙iy|oĆŒh“í “ăYGÄ ÖĺNóˇcşNAý$Q-Ŕb$éɏn–—žĐîŸ(ąMĹˇŻ‘—ŸŘf> (ůŢ #SŽbtÄęęW¨f×XšAĎšHŤżň[; ˛=\q˙˜|íű –;iżÂ‹K ŤűÚAšîďA–ρQ‘ď^7(Ž2ăI+#ňđΔ<ź+=žeSŤż>–,°¸{KRîxŹ´´Ç=[“ňŐ+dýâ?…ĺG7ÉoďŸŻA]1K^wF×x[qŕ揱} €ú!ŔŔ‚ćY!ńBâE—ˆŰž^2–9X&ŕÂő†ýN2ăđ…Í ˝mĺJ}”[‘TĎP‘M6áeˆh! ͂ŕúƒř^Ć(M§D’$=ǟ\JJ*3,éô>qSţ Ś—–lЃeʁ”˛*źŔ,7;jęe٘RĆŻr{YůeA괝2íú–˜dŚ=dafgŚđ Űł‹OšŮ"×^f}šÇžÍ áÓŔ÷ް'‘ &%ZĂłˆű?¸S˛{ؕßŢ3&ÇŻ”-ݒÓŸ˜šg8#K;'˙0÷ űVÜߢĄĘ+~ÍŠí˛qIH>ůűAsľÇ/˝Žş˛z@Ŕš5˝mćžfÉŘ´;#wú'Žz0)Ɍ'żřë¨)ŠqÄŞpÉßpÁ1mrÎÁÍ=QpćQř‘ŹrÂ,—Ů#dńĎOҌ곾wăHA&ŽZč3§o䤴şT†AĎšč×wŽ””ŇĐ@ jĐĚ9K; 3‚Ţç>).WÜ?*űF&~÷˙†!Ї›7%Ě4™âA÷EdܡčkÔ šÉ˘CÜś$mÇÄó´,ǐ$Ý=âX qěN š! ůżô'­Ůź˘ :Ţî•É\QĄBL€fŠČřSĘŮMűÇi?JHf¤_2É1É$\q3ŽdüÉMűuÓ&˂§Ďw˛Yr&˛Dň3E䧄ČK ĄŻGžsĽ0źL6Äřť0ąœÔŇ.íĺ2J”m÷&śYźžJíůŰŃż2÷r¤đyžÉ†á°#8ą°˛ťr9‘ă×EäŘľÁ‰†×žÖ._řó ř‡ş|óş lI_Gí?ä5ˆŕŔe!3˝&"ŸůÓ iżń‘äx€EwÜ1).5KÄ#ťôő57蠷͖ç—ŸÜ:RuŮü ‹ÜQsՃ “ĺcޞçoSˇ ę/8ÇPęń˝é‚‹x¤đźŘŐŽÉói|üú¨üîŸWȽے&ŁÄýţ¤÷ڑšvVÎrô\á*˙<Ď~KB˛Âż]ÖĺČţţýă×f% - X€˛#âًüáuÍ&1ŕ“Œ7,vrˇ8î¨d,˙ą&đÇë'( !^ȔĽđ4kkOž ňëŻSŚĂÜúëMűk÷GauŘ>­“YřŇVĆ<"ńˇëoËK§ýÉ3źŒ|ą×_cś“dްr˙ɲ)¨…`ʉ'ŹŞ†LĺśYsf É+QRc{5yĎ˕_p=Kląó2PäYČxP„W”‰˘$ㅔy^Ţc/?ӅŢń˙őץ)ťüßha'÷Ń ž´",'mˆĘ $䯏'ĺ˜5•ż iśˆeś<1čĘ5OĘyOŠI,\ţłźţ‘¤ %‚Ť-4ˆ˘’X^Œ†fąĐŹ?žeÄ@|ĺŞ!yĎS; ę•*͸qďö´lďO›ĺËŃżoŇ,ŁyW_hŸuÔę°\÷pŇ*čşW¸#íďË×ů§ž`XŮăÔmŻŐŇ,z‚E_C5dĄŻţ%ÇľËÖţŒüßmŁ2U§î‘'Dö ˜ Âú[–2!sNşB6€ôäUBĺËW ČŤ#ĽBôÜĹaŤ"fĘŮ럿řĹ_‡ĺ;ךs&Óľ˘Ű‘ß!Ď:˘Mşâ\ˆą…š@`y<§S¤ýqíěUíŢ˝"Łˆ—Úë>ę0š?ččř?BQąlčŒnČÔw‚‹\P… ŹČˆ—NůĎOřłĆüűţŕĄ˙KCÇâ5ŔÜúËťúë#Ł‘ß˝^L1‘˘AJ2QXdŁ0s˛ĽK˛‰źěœńÄVŒaeŹěňŢřjňK†xŮ VQِ\IĘíٌ•ÚÇ_‡L˝=—)$űóˇ#•ÚłŻŃvmóbdŚ(“y˘$3E.ă…ź7ű<+Čbe×dźÂŒnő"âßďŠyҡ$T9™fÉ ‰Éßś§d`ԕË˜%#ÇŽă"… ŇES0œĐŇtp-ĺ^'ҖŒúS*T Yâ!O˘ţś=ąëőýȎŠg_Ş5›„¸)ń2ýâfüńüÁlY°ż\ĚPOů÷5ŔÂńŸ nÝ ‚9h ç/ďůËyvҧőŰô9iż]0,“Ą"(ۑ ’ĎTa%=¨‰˘x‘ŠíeRI˜‘ËlAqy2›­ÜîUo—jë¨eoŠíŮÄ[h „Käf”f´đ 2TxšßmE-Ä2”xšöń MŹ/â/ÓéŠ[“FG7}˙†ŃľĺÂcăň_× Ëc{'ż´â”ý#&ÓĹ_ˇ¤äNúđŻ䴍QYŢe˘8?¸#%7nJš2ËôňŰĘţpŸĚKOˆ›şĽúZny4)ë…äÜźŕ†Óýíýĺţ„šbă7 ËO¤ĺđŐ!éđˇ30ćʝ§ĺśÇ‚ŕ-ƒň”ƒ Ó[Žęqä9GĆĺ˙n5Űřčoä¤ ŮĐ2ËďrĺĆGňčžŕ˝XÚiűcíA"ľXÔ>ľ÷$— d:S/ć Í:0&X@iOž{Ý ™–w9r誈$N€ĹŃĺ+€ú!Ŕ@KÓÁçÁ„-;Gly| $‰ŕ‹PWԓŐ]iYŇćJgԕ¨SßH÷‰L1ąM°ƒ?Ř8ň€XŠ=úŞD43…ŤWzë@^éŔóěl żIŻ$7ˇŮű&łkůu1 ˘Čef˜HşDTĚ8‘m7A&oEqF‹ü/‰^0Úkeˇ/šL^™őH6“…dƒśđ&Ö_Оˇ ŠŇž—xŁd}"…%A*m§Bť—mˇŠŰÇ߯ŕuh<„iŃL&Č"›ę#—ŃÂÜęňAö‰É3[˜żŇtĎđ˛Ů+˛ë –óÇ==˜Â“d°˜­ý"ÇŹČ‘Ť‚Ŕ‰j^{zťüđŚSâbˇIQYZśBkŠžć”v9teXŚJK{źáŒůÔďM`ÁĎî1ĺI^|MÓlo8˝Cžv͐ '<šqSÂLĹşbśźö´vém+ 08÷˜)=ň“[ƒr$°!÷—ŽCˇűĆ3ÚëŐŻŠ?Cś˜L@¤ŰĐŇ+€šaQťNd_F°°tĆlsC/8Ů>0*ž78ײ¤Ó‘/˝ŹĎVä3ˆý–„eUĎÄ:ĆRžźú;;M|í‘úž˙@ëZÄ9ęˆ3ĐZš^ŮoŸűC˛Ů€î žôvÇrÎipŇŤ˙tA&‹D§Ŕ ގ2ƒ~Łß˘5cůV !w?{$°&JN”ÍP‘ceK_”IďP‰˘ZF k˘„FŐőggło#ůĎńŚ–™˘hsĽ‹—–óî{5f̨Ą=ˇdvšo\;,ď?żs–ńäýś¨e–i˜‚LcŮLATýx&‹œlR da Źig˘Č›oU¸şž`=ĹíĹëŠaž îpƒ@MÓŕ•Ů^AÖ ŻükŞŘ.ľˇđjoŻa}śL” )›™"—Ń"›ĄÂłŠÚs+qƒÇž5‘ńB3Môvř?ť,‰E,qŞ$4˜őýh"Mýů–ł:äŇ+†ędĄ'etݚb0wäg*ŔüŚeOżtů€ tČ9pYXţă‚EŸł­?#˙}ă`AŰ '‚„łyç8_zb‡š}ŕ‰” °x|oZîٚ”CWFƗšđ„3ĺ{lOZÖ,Şźţmki&ÎמŃenď|>?SĄ=ťźĚp;ŮűAZ‰rŰuÍdű“ăúˇţ/2Űżu˛ϛh÷ŠÚs÷óŸçzămń°H_ŻmŚhDYŐăČEOë”Ó7F$T‡oĄşŽ3ˆĘűüuęşsËt3EbnúŃMCňĹËú%•Š^÷î-Iyí÷všŔŒ|<ń­kË>g? ;AäĹGšWöN’=bËž´|ŕç{e2ěJgŞ(vŘŞŕ䟾şŻ^9Pv™ĂWq‚°UĐר'z--쏗uE=éŽyҟЫüƒ/Ô1Ç“Ž˜+Ýţźp3ĆÔ 2Y$˛™,‚ćI3Yä§|¨K&ŠéfźČľW˨‘×– J†˜Ô%Ů+ĘÜ/÷r L!EMë›d;5l_ßײĹÎfŞ0Lf ĎÜzŮ f]y+rﻗ{ŸM0Šż?ԋŽ–,ň§Hx’Ú Y-łM¤™,^vBť<ď¨6yhgڜěxtOZŽ{8YÓóOÝ?"k{CŇŰnËF˙Çq[¤úąhM:čŮľe$A……âżo2Y&žLťˇ>*Ťýßř1KĆRžÉqçăIšüžQšúÁąŠëřŻŤäÁ)šŕŘv9xyؔUö÷ĄGw§Ľ§Í–ƒŮäßŃמ—Ô!§“•=!Ń؋­ű2rĹŁňý뇤#ZýœÂG~šWîݖ’óËşĹaSĘDˌÄóÎGüüöaÓöÂă:L Ř˙ÜÇŕűtŤĐϊ őTëiŤĆyV ˇV…ÇšÉÎťÍMNśÍ)štžćc˛“ÉÔu Žź2ĽňŰ&ťŸL&eppPvíÚi2:twuĘt $lŮ2čČc!yŹ?dĄUˇ?řźś+-kş2˛Ş3#Ń&}au& Â}Děţ[ÄşSŹ‘ÄJí.żźLžk‰—ŃÉœ˝ÍoÓ[Éť$`¨0ßÍ_OŢ|7÷ܢůnîů…ósۗźmë)\ƔÉĐPKoŕÖ şć M—kŸhóL`ÂÚ­ ‹/]ޤŘ(lĎŢNˇÝŐÇśe‚-\˙6cYć6÷ŘÍ=śms?“˝˜çŻÇąĹň\-_‘ŁŽËŞua‰ů?ĐBĄÉ˙™môţÝ?0č–ôő-‘ÎÎN‰D"ţń8ńšjš?YPOš?!?˙ë¨$Ó僎"ţńôüŁârցQĚďřß}ră# €F8qCT>˙Â0ű"‘đ)¤\ňÂÉËŢşy“—w[ł|}?oý =×ńď™,źńŔŒćőä2[ŘvđĎy6ł…ś$ŇfKW§%śÄc–żHő€„–ŰżYô”ƒ˘rôš°\ů`Bîڒ’ÝŮ4ž}íśž*lJôśQÝćý-H€€F9z ĽZÔZZŘöĚŐűǓEqWR™lť?Ţć<ëŕsŘnţ´çtŠ´ěÇGƒ Ë˙’Ś™,Ü2™,Š‚,ĆC-Źź`Šü9š|>™ÂůŚ$…ĆEdrKóÍzüy&ű„L”%ń˛íVv=^v=Vv=…ëĎ{–Wđ½ěú, ,𼒿k"MG^ť—ˇ/;żjťśo§\{ Űń˛íĹowAťh|…UؖăOśmţfskâ#Ýŕɖ˙X\óž›˙ůŁţżŚ˝=ś,ZäH,\QK‡VÝżŮ˘Ď=2n&ŔÂpÂú¨|őŞ!€F8a=ę‹ -M“DýÁgşZ)+üŒ2YdGú-‘ň™(ňŰjÍDQ)ŁEq…TČtQm;ĚwMʆ좵fŹđŚŘ>uގmRTdݐĎT¤Ş¨˜ŮÂ˙Lca1Á˝ţ‰Ö\ažÚŞű7@“´<$Ť{y|_F ž´oŃ>ę‰^f 0“…Mř#í#NžÉÂńL…—Éf†ČŽúOdœZÇ3Gdۋ3ZHĽLfym/ʘ‘żÉËt‘›_!FIF 7(uĺyš×W˜Y˘ Ýóň2FHézËśĎóĆ˙ĚJíRS{q‚ÉßN~ćěŰ$ޘČ`1dQ”ŮÂDGxśy}шHo_ČL‘HŃ0Î<0*˙}ӈ@=ißőF€ĚDA&‹ąl&‹”y\s&‹Ü ŤL[IŚ‹2QX“Ľ‚(7żZFâuxA–Ď­’u“éeڍôźIÖ7ŐöÜú*´Űâˆë˙}šŃ²“¸"—ŮB˙|ÇńĉYŇŮiKw#í]Ž„ÂXLĹŮÇ °PwÚˇ@˝`ud˛8D\;ćÁkCDdäň™,”•d1ž‰"ťŽlT€I4Qé˘xž•}\4?[bĒZ3^H•ŒEŰŃv]Ö$˛(S.¤$3D^ťW<ߍĐ.y1#“ľK6FńöËľ—_Ÿ7žřٰÝvq-WK?Q×üÝVđÁ‰ůăm[ÂaK:´4Ȓ´wۍYb;XL…Śđ?bUXîܒ¨íS( čY  2Y$˛™,‚ěe3Y˜AE Q&Ť„UQPi~éŹéeꍖQCŠÖŁAV0ťÂ˘e_›çMą]Ş´WÎD1˝őM°ƒÂ/ţßiO”4ą&J Äb–ô. ɢĺa‰ˇ;â„ޘŽgŃ&wné¨íS °€: 2YěÇGƒ ‹3Yń 9*‚yEăĎ ˛Nx™ÂLAĆ čđ˛kÉËtá?ÇËf˘Čs˜Ě fů2y5&2]XŮíeĚpÝńD^^fˆÜ‚ÓiĎeÎđ*´ç˝Mš/oů’ölŚ ĎËűź‰÷ľ\ťckŰx™×_Ô6ۏÇ-é[‘Ĺţ‰Ű€éyĆá1ůć5CňÄ`F`&–u:ŚO€F Ŕ@KsýÁí”kI"mɨ?Ľ˛żŻÂŽH<äIԟ¶ €ˇ‚ig˛ČĹ•´˜4ƒDţüJ-jÉDQ´Ť\:‡I2f( ˛Pš…É’oLš˝† S]ßÚ5 C÷CSŃE‚ 'ě˙ÚaK碐t- K{OHB‘Šď„sn˙h ×&˙yů ŔLh_B€€–ŚƒĎƒ [vŽŘňř@HÁHsWԓŐ]iYŇćJgԕ¨ăI+™v& +›É˘\ڈń ă[nq˘(eĂxŚ‹Übů™.źl押Lăó'̡ŠËŽämGˇa‚,ě`ƒ&DńëĚÖŠÚ.í%&k÷&śYźžJíůŰŃż2ďíĚߎyŞ6şA& Ë˙O8ęH×ňˆôތH[WHBQŰ´OŐ\ÝżáÂăŰä'ˇŒĹŔ´iö íK Q°ĐŇôĘ~3řÜ’Íţt˙X0ÝË 8§%â>ˇÜôt3YčbNśŒE™ůeUĚDQaáJ- 旟U\Qf;&ČšxBÁŞjČDQn›S΀áŐŢ^MQbsײ%ÖfKĎʈôʊJ´Ăۙ^Љ9ť4ČËOn—Ďüq@`:´€F"Ŕ@KÓ˛ ze˙fsuż-‰lđş^éŻmjQܕލ´¤ÂLše!,2ňŕä™,4›‚]œqB3‚Av/Ŕ`˛*Xţül&Š\y‘ y™&J"Ęgꐌ”ŮNĽŒe2ačM^É/›!Â**âYy˗mĎfœ¨Ô>ţ:dęí^^KŃv¤RťŮ+ʐ%ąNŰWt݌J8nËtÍőý Ţž{T\ţpϨܚ%%0GŹ ›>‰ --• ›őĘ~|ÎdGÍÇüÁ~ĎoˆZf™–UÉb,›É"řqX5“…KQKF‰Jí•ćç?˜,ăEľö2ëwőąYĹv”ŰlĺvŻzťT[G-Ëx5ˇ;[˘‹BŇš,"íK"ë ‰5ÍějÎďß đú3:ĺÍ˙łG`*´ď€F#Ŕš Čdqˆ¸vLlAy`J™,*ešČţOdœČeşČÍÍτQ&ăDśÝËfź°Jś“@ŕ)-L{~F ŻĚz$›É ˛AŒ[xë/hĎۆTi/HĚQ´žńˇ¤ĘvŚŘŽďW¸-"=âŇł_›DłÁćď@Ýľ&,/;ĄMţűŚ€ZhŸĄ}4ZZŘéŠzŇó¤?ĄWůŁÝ1Ç“Ž˜+Ýţ<]Śĺd˛Hd3YŮ+jÍd1BQv<żZ& +› c /&]O-ëĎ>vőpƒűOőŚ–™˘hsĽ‹­oüžWcÌĘívČ;fKŰâ°t­‰IÇŞ˜„ÚS2d&ćÍţ Pgo:ŤSnۜ”{ˇ§&sČňé3 °ĐŇâ!OVwĽƒąîţ„V:řźÖo_ݕ‘śĐćgYÉâ`qíhd1ĹL^.SD~Êń€ˆlCŚRƋüçĺ2Nř÷˛ƒúă *fşěňE™.J2ŠSL¸&JÄs3Ůíf3QxĎÚ˝ěëŐ­zŐÚ%Ż]JŰM`…WÔbüý0Ë{2žicŇv˙˨HliD:łÁńĹq"–Yv&,ćŰţ POď~jˇüÓ÷wŸß€bzzVű h,´´¨?¸ź¤Mł¤Í€÷@vZŻě×ÁçžśŒDćŇôL3Yh€ƒĺĺ• )\Žz&ŠźůV…÷­`=ĹíĹëŠaž îđ?CË˙<ˇ4cDIÖ ŻükŞŘ.ľˇđŞˇëŰäŘép¤cuL:לIlqDš˝˘ĽAćÝţ PG-ÉEOë–OţŽ_ í#´Ż€fĄÇĐŇÂś'QW"Ž'‹âޤ2ŮvG̕ý:řŹËĚ5ů™,4…]k& +?D"›‘"›‰ÂĘf˘˜ČQx™âLRŃb|ŮőHڏĆFŢvňÖS˜ Łt;ř0L& 7[&Äó*VxĽ 0&mĎýĹŮů&3FšöX9“…‰&Lm˛4…—ÍD1žé"?ăDśĽ`ž•/EóËfźČßţř+“Ş52ŮőşŽ˙7J6“…$žŕţDG.FY˘8žĂ´›L‹OŢ.šŕŻhy}}ůíÁîp¤ë€né:°G"ÝąkâýŤS T÷ާuÉhғËî Ű9ÇLŸł ˜E&°"źŘ Ö{™1s+nBlźĎ ů $Ë?1ă`—)çѐLĹë)n/^OůY…ňJ†TĘ$aL’‰bJ™.&Yßx‰’€qÄé K|E›´Żí0ˇN[Čż­‚żĂórA(Z4ÚGŸÝmn ˛. ŽČő0°€V`2YäýGÄs]q$,ÎŘCbĽ÷T~NQEAڈüLůe2QxŮLV&ˇt^Ś K?ŹěÓs%‚v+“Ÿ#›˘\FüŒy/|ŸzeŻXHű7@#čŔë7^žXž|Ĺ ü÷M#`~xŮ mňŚł:Z Zš^ŮoŸűC˛Ů€î  ťcšç´DüÁçů6íi`Exąd´tEf,HsčĽL§=i& • ˛B!Ęd•°Š# ň–OńPfţT2^T˨!EëŃ Kr•@Ę%ß(űÚĘ傜´ÝŸ[ʈ#ĄŢ˜D×őHlĂ"‰.ď”PwŹ ˆ˘Qĺ@ęţ Po:{Ęţ1ůÚUƒr疔˜›ŽX–ןŃ)G­ ´",´4-› Wöo6W÷ےČfcĐ+ýľM-ŠťŇ•9+7xďy^a Žp:%?Ŕ\H6“Ex ™,‚ř„˘”VqÄB]Ş0SEqB;Šćg3QxŮLš`ĎĘn?S&°"/ŁĆDŚ‹`ý%5\w<ĹD „Ź?ű´ě7yűřűœßĚąCaą{bYÝ#ńƒ—Il}Ÿ8Ńěň…Ů**=ž‰…°4‹Č~ĺe‹äçwŒĘ÷Ž–'3`nXÖéČËOn—çheXhiŠL0ŘŹWöëŕsĆ ´ÇüÁxĎoˆZf™ů T‘ťoŰqC‹ĹÓv7TČp“Ň` w¸†Lš$5dިš‰˘xĺŐ2QmÇ*—~˘Ňúł4ČBĺJƒÔ”ÉBŞËfްĹ%źśW˘KdU„ľůď™]°Őé7wÉŻďĄtĐB´Č3h“g˜K°ĐŇŽHWԓî˜'ý ˝Ę?%9žtĹ\éöçé2s]qv„ŇLŃl&  ćy) %ĽśLţçčúź˛ó+=Żđ7ÉňŐ2ZL’Z˘`~…í˜ kâ ŤŞ”˛Â+ÝlČ+ťŻSœľ}Ů™D×-–Đ’NąCN^E0UĘdQŻ@‹…˛Ě&ŔŐéţíiůó}Łrĺ y|Y-€f[ÝășFĺěƒărĐr†(ĚMô^ZZ<äÉęŽt0FŢ2ƒĐJŸ×ú퍝2ŇŞĽ&Dë+—šbâqv~(›ÉИ SĘdĄËŰš^^ćŠŕýó$ˇ=ÉfœČ>ÎF(f¨đ&–/ ˆ(“‰"Oáv*eÔ(“ CoňJ†xŮĚVQŮĎň 7›×nGcb/ígĂR‰Ű;ěĘžQWĆ<ɸô‰SĽű‘Ć2jŹX"­Ý\î*˝Œ8ţżw]1KzâśôśŰ,$A°EHţń¤6óřď;ÓfÚ´;-[öfdÇ`FöřżGžŒĽ­§#HS0h¸Ó?™škČőUúÁFр•˝#:šňŘ^Kú:lY⟠Ł<"ƒ@-řś ĽiJë¨?řŹSWTć˝üAüňZĘBJ2Y˜ŤœÝ¤ ,°=Íd‘šd#…™,ĆC(Ź Oš‰ÂĘf˜BƋI×SËúł]ýÜŕ~ÁS˝‰mG"buvŠľb‰8Wk–ŠăBÚe+‚6ťi m˙nZęc÷ x{†()€ů!×ß§-Ÿśuˆľ¸3[‡iîŃXŠíýybĐĺřl2 dŮ>ź÷Ë:mYŢ혧L ŔZL~`EîVý5ŹÂĘäÚ<§SRŃü9aq]ט I4őˆ8Ţž*)Ědáĺ2EägŹˆČ9d*eźČ^.ă„/›‰b<ÁDĹL’]ž(ÓEI@FŃöýżZ˙ĎÍdˇëó˝`Ľží uľ‰uŔjqö_#ΆUb/],v{|<ˆb"Ȣ\P…Ý”,h.S d׀xÉ´ó— ˛üýÜęëšsĽC´ČÖţŒ$ŇVĚ&ݏ4ĐBłZŹěv(ä!ŔZT~€…ÉZáZă &“…ľXҞ+^zÔ Šhöа?věL%“…8X^^ِÂĺŞg˘Č›oyˇW9ÓEńzj˜o‚;\˙ÖÖ\ůă&=~[\ŹžąÖŹűŔuâŹ_)Îň>ą;Ú˛Y@ ƒ+ ç˛YX1ßx;úĹÝ;$Ŕ|§DŢÖ=b÷vˆľ´[ć‚ÇöfLI´ tydwZ†’ŽŹéĽf °€”? Ż˙šb"Đ"—Íbbđßu:%=@26AŽß˝Gӛ$Tk& +?D"›‘"›‰ÂĘf˘đň_›ĺe3Nägş‚ŒăkĚŽG2ŢÄFóć{Váz 3a”n§8†Édáf˄8!ńâąVô‰uČboX+Ί%ţ c—ŘńčxEqpE~֊üÇĹA˜›Ě`óö˝â&XH4 ČKŠľźWŹHk~íO¤<Ů´'-Ă ˛V´* |Iş˛~‘˙Ý"Ěż…Xذ€UdĄ4Đ"dĄłőž)QoÇÄ ‡$ĺĎ÷2 qł™,Ԕ2YH^D]2QTZO ó-o’íäˇű÷Îx‘¸Hg—XK—ˆŹ[#öAÄ^˝BěÎvąŁ‘*ÁvÁc]†ŕŠůÁK‰ˇm%A°`™Ŕ˘-ťEV,+–V2’ôä‘]iJ‚ĚóĐδlč I[„°p`-ŹRE\Ą™-ôÖĎłL “É"˛żdźPÉ"’XćŃę™,$H4!ş l˜$…—ÍD1žé"?ăDśĽ`ž•/EóËfźČßţř+“É3jř÷Űbâ-Y*ޚŐ"÷kĺ ąőˆÝŃ.v8\\Q.Ř"?kÁóƒW¸:°œŚě6“ĹĹ?ěU‹[&ČBƒ+ڑ–´KpĹ\Ą0ú™m\J.,´4wIš–RߒQJeÇIÎH<äIԟ¶'ö÷‡dł?Ý? @wÇr3i‰řƒĎ aş¸\ˆ– ÉśČeą0óB1Éř]|ĘouŮp…”)ť1őLš!"ĺ3QäˇŐš‰˘RF‹˘˛$yí&#ö˙ś¸d˘âvôHŚoš¸k6ˆˇLƒ+‰Ő֞ ŽgݰĘXXeĎFYöďĆđvô‹7šĽôŘĐcÄZÚ-łáą˝NЧÍuúęgšŚ×`!!Ŕ@KÓ˛ ze˙fsuż-‰l6˝Ň_ŰÔ˘¸+]QYŠƒ,‚,‚,ŮÇŽÉdąQ\+˘Ď6-âSÍdĄƒűZ’#ăe›ł&Ć3N­^6 "—Ą˘8Ł…”ÉDnXŮö˘ŒŰŃťś¸ńIőސtßJI/]%^ďRą;ťÄÖŔŠhĚüýÁdO”ű¨1Ŕ˘ŮÁŠýťţźÁQq÷ €Ęôąăą:ăŇL{‡]Ů9Řř˛=ZĆâćMIšń‘¤<1‘Ą)t´E-YÖáČąëÂrň~Q‰„(…QŽ~–KzŰm ,´´T&lÖ+űuđ9ăƒcţ`źçˇ řƒ ŠĆŐ´”J%C4°@Ů,4Á˙O(&i ‹J“ŕŠ~{Ś™,r3Ź2m%™.*e´Č›oy•ţPńœ¸vL2ĄvÉD:$ÝŮ'éžU’é[)îҕţŕ`ˇXĄ°ŘٌĄě” ´°ŚXŃĚŕ Ĺţ]gşďďŐéąbuIJYˆĎőťú­ýďĐúG]ůÚŐCň؞éok$áÉ#‰´<˛;-W>”7œŮ.K;ÉÔPŽ~ŚÝmČ(Ŕ‚@€ĚAš@˝ÍĎbĄĆ,ź‰ŔWş$)Ĺ3™,\˙ŽÄ3Ő–É"XĹDĹx&Šěö˛Áć%dşČÎĎtae—/3ߏ%?čÂżçúŻ4“Tű2Iv­”ä˘Őâv-iďië0Y+œP؟B㥟ű“•˙(W¤ŮÁ¨?o÷ xÉ´¨N=fŹž.i†íţ@|"ÝŘŇ ˙ß˝™WŰ9”‘/_1$ß-Q~9•ĐĎT?ە= `aŕ4!€–öĎ×wE=éŽyҟЫüƒÁ™˜ăIW̕n^xžÓ/.’“p1ąH\2VDŇţă1/hj„\& /UĂƒ ‹ Â+3ł(“EŢŹ’ś˘§j^ Ďň''ěżÎ˜d옸Ą6IĹz%ŮšBRÝ+%˝xľx˝b‡#â„Ăـ 'Ż,H`‘+ 2^"¤BڊŮĘZ‘ýťŽŇŽx{ćNiÜśôĂ%°łHŤ§Ă˙EĐŘúĎ̓Ž4ÚőOÖ5¸"g÷°+W<0&ç=)&(ĽŸí’N‡ݰ ` ĽĹCžŹîJCóý!3­tđy­ßžş+#mĄĆ^Űęrš’mVvěv"Ŕ˛—´u ŒÚ1ÓîßK,óč”3Yy&rőCr-ŠË…ČÄ|ÉËt‘˝ 2[ř˙Ď÷]/,éP—$bK%ŮžLRË%ÓśXÜX§xţdĹÚʼnÄLĆ {< Â)É^1YćŠVËZÁţ]?ŢžĄ’l.Ű˜'îCŰ%sĎfqwök=˙̊˝Ź[œƒV‹}ĐĘŇŔ ו̽[Ä˝÷1qˇîń×,c-éç@˙9GŽ+Â×24—Éxä;Îbąs0ӔăóśÍɂÇGŻ‰Č m“ÎŘÔúz-ň›{FĺŞë&Ŕ˘<ýlő3&‹ÎähiQpyI›^őš6ĂňŮh˝˛_ŸűÚ2az

çücÄ^Ó'őŚŰwŘ*îŚţëo4ŠYbľEĹŇ +ÄŢ…\’Mc!ŇcÇip€ĹŽĄĆgŻPŰú łW<÷čř”ƒ+T[Ԓç—ŤHŒ˙‹Śe0\Ż>‡ÉýO¤ĺ–Gň÷qM bwܑý–8rěÚ¨źźśŸh÷nOÉ­&eÓî´ôşţ볤+jˊ[Ž\‘cք%ě4ç¸ÖϘ ,XhiaۓΨ+ǓEqפ7íţ9|˝˛_Ÿuňł6¸Ž[1ĐŔł4“Ĺ2Ś™,,GÜd\"™Ír÷úŁą™2%@Š7”ÍdaMwxŮçä†r&2TäžäWőť–d$&)ťG’ĄĹ’ˆ,•Tt‰¤c‹%é/÷?ŕ¸X‘¸8á¨ŘN<áŘv6ˆ˘4Ŕ"7U ŽČ˝G­‚ýť>źÁQ‘týË”lgď$˙÷Z‘áÄäËmß+É˙šZÂĎ>Á?źlIţâ&‘ŃɟŁŠŸÝ áçž$öÚúYxiW2×üM2wlň pkI•DĘüMî}[ÄZÔ)ĄsŽ{ŐbAs¤ŻťO27>0ţŘZŃ#‘ ϐŚó=†ŹÎ¸4ÂŢa×ßݚӏ%‹şŽČôűűHȒ°?%ÓÁk×?!ńLűt yňß7 ËÝ[KËrí̘醇“&ŔâNl—îxůŇ-űF\łžűś§‹ćx˛Ë˙Ç?&Iőż 4đk^ŤhSŢ ˙ ¨çú~xÓpIp…fĂXŃí˜íhy“Dfbƒť†2ň“[Gäľ§u<ççwŒ”WŹ_’ƒW„LĐރ;ŇfĘŃŹßżaD>üĚî†Wjćg Ě,´==ŻĽĆҖ?ůă€ţ­ŚýöÇ*%—e\ üqu‰řc€Ń'1ż7‹űˇ:&Ȑz ?Č"?ř W:DŰ3ţä†bâfz%“Y!Vz@Üôb§wŠ“ŢĺĚěÇ4Y-oÔJ™"Aš‰˘ ž§“c˛T¤= Žđ'ió§l€…íONˇdœ.ɄşĹs‚Ň$–QäŻŐ.Ěba˛nL”ąó2Yäg­ČĎ\ŃĘŘżël4éżB>sßi–Ěý[f`áż4YÝízÎ b/îĚې+™[2Ľ*Ćůí‹sř:AéAî´ćŐýćň%‰G¤ž4kCĆeĐýî-)S˛#ßiŁňě#ă˝úhʓ˙˝eDn~t"čéÎÇS˛}Ŕ•ĺ]Á~ŁďçM› ×sÎ!1yΑŮGÎ÷§kLȏooŰ3ěúŻ!)GŹŽďç[L?k}QţĽŔüE€€–˘Ă0:3œ˛dۀ%ۇlŮ1dÉžQK†“Öx}uxnxŇ÷dY‡'Ë;\YŃ%Ňi{fpšSűrĺ2ň-48Ao]Ç7㈧#ř™˜?H˛L2™„˙ačäöx).cnĹŐ ‹´ ˛0C4¸Büçű“Ţj …—ťď˙3c&+,žöˇËżľ,˙Ÿ+žČ{LVXEš  ť ¸˘8cĹ\ČVÁţ]ŢXRšÁŰąOšEËuh‰+4˝ÁxŻDźdş Í9ůŔÂŕ Óh›@÷ą]fžů[',_ý}0řž:ďhqž´Śdťé?Ü.™ż=6ąúý—KčŮ'Œ?NýúfqÜ61˙čý$tÖaâ>ž[27?(îö}ڜŠfذ×-őçoŤ§˝d;îîI}śč›Î÷űËŒ¸÷o ĘĆDCb/ę4Á"ö+5ÚL&5’”Ě˝›%óĐv‘QńFbĹŁ"]qq6Žţć Ĺ[蔃Ĺ9á˙őü]2÷lö?“a‘XD˘Ż?OR?ť^ÜMĽĽ[źmű$ń…_šű֊‰\x†4“KV,F’Í-R’ab†ąőZßUŽ<>buX^|\[A›ZźôÄ6€—Ę JŮ72`ńřŢLAŔJ[Ԓg+ŮŢiDĺę‡3śöťţvĽáô3óZ‚çĎ#ţŔóŢ1KžđŰgËVzǰ-{Ítpĺż ›h‘^z×°kćĽ\3Ýó¤-œˆf$ş đ ?0a<¸ÂŸ<˙ČŘA /÷o=żÍ5ˇÁü`dáŚüűŮ mŰLA€Eéné˙,1™*J=ěěką˛ĹÁĺ§âR ­ŽýťŠ fŹIŰQţžbĽü텦7Říeź˛ëŹ$|ţąâŽM”ˆ°"ai ČH˙ńö‚×çí’ŒNw?*á§-öA+ŤŽÇó߯ôĎnw×ŔDăHRܑÝ&€Ăžű1 ?ó8‘Xůż-sďc’šěNń҅%źĄQJoÝcĘŽ„Î9RěƒWI-RźCÜź€“–×€ci4%Me•ěč3ë$ëą>Íčp˙…ďí3›Č8Ą˙6 Žšć߉ޏ-˙tZ{Ĺui”ŁÖLô K:m U¨űŃçĎ˰H¤›ěŇěĎh6,´`Hd‚ç;ˇ;ňČ^ŰXśd aůƒţ¸?/ż„‚ŢęXžČß=âȖO6ůĎŮĐëĘáË3˛˛K$ęxâ0=Ž8›…GäZY-ě‰` ĎËZxmžaäJ„˜6ÉVd‡˘ĘŒGĺ‚,ĘXä˛XXE-Š*rˇůË\ÁţÝ8^˘IŁyq`>Ő¤ 0L˙+šŐÓćĂłƒ(+sí˝b÷´‹ľrQéÚŁbűSłyťÄ˝ëŃĘÁ錤~w‹„;N{ŐâIוžěÎÂŕŠ"îc;%ő]/8šd^ćև%}ŐÝRőőúŸęwˇJh,)ÎQ&]Öݲ[ÜGwĘ\˘ÇR˝ť”ąTs3X´˘Gw§%żJJwܖ•=ŽěÎČďî3ĽCF’ÁÚ§˛2,g•KJƒX2S-śőž÷K;›ół/řĚÉ`€ů‹ łN‡ôĘ~|~hˇ-÷ď˛ĺŃ}ś '&J&Ë @'Җ &DĆ,Ů7ćůƒŘ:j 1Ȳ‘ލG9…<ů š‹â@ Ďł'‚)ĘN!sŤršRĎ+ˇMóߒ ÉeŇČ žČĎŽa•iŸ‹Řż,Ӝ\kixŁŇ ÖŇîŕRőé>?ä˜r™;oó†Ć$ůăkÄ^Ň%Ö~ËĹ^Ý'ÖĘ^łěl1eIüXƒěý–™ƒEË{ä—ŃśôďČ+Ϟ4y€űČbővˆsü&ŔDËŹdn|0(’[fóNqď{\ěƒ'ę$x;ú%}íß WˆsÄz}íâí–Ě_7ůŁĆ%RŇWÝ#ÖęĹb÷uU~=Ůŕ }Möş%ţŠĺ—‚Ţ9ý0qNHJćşűLv|á܉6/‹Č¸KéŒ4Uń?Ţ K„Ôc}ZÖ#ߊn[x"-_ťzH’éÂjň™ťˇ¤äzÚa1yz^ڋЏusRvNl7˛äđUÍ٧šý™ÍF€€Ye†Šý˙hŮ˝˛_ŸˇôƒĎSÉf­ËůĎŃçŞQ@;˛:#m‘l)Aąr-4 aňŕ }†W`Qx›żţŇíLÜ\RUĚĺŕ öďkRÚ{űĐ5â>´MšÁ9dĚ”sĆĄâîoKážťs@ğ27>`‚8ě5‹ĹŢĽ8މMŻ$ÉL„N’8ÇnlŻ_j2jdn~hźÍŰ7,îÖݓfą°:ăyńi&8Âđ—ľ×/—ä_á0Á™ť+°HßúPa`A4,‘ OŤg˘LƒŤ$x•H.[Šż|ćÖż‹}ŢŃ2çČőzňá%Łôv_§šuőďÉ °°VôTÍÔŃP 8–štxŽłLo8ń‘gîOż‡ŹÇú…Aş}ăÚŇŕŠ|:Gł[ôśŮrň~SË.łeoF~tópA›fÄčˆ6ç_Šfć@ł``VĽ2"ĂŮŤűľlBţ•ý: ľĹ5Sž^}Šďíl­q-]Ą'ńu€BËĆgüÇúœ~ ;ăŮuDV÷¸Ňĺ(´‡= “­şŹâŒŞ\`ĹDťš7ţ¸ÜmšuçßćWäÚçSPE>öď&˜é%ę5r6,—Œ?îmŰ'd-ęçđu2SV8$‘ N‘Ě-Iڟ¤\)•Œ+fĘ\u8';4ëŘkŠsô~%ÍΉŠ{Ç&S’#ÇýűöIƒœă6NWdY1“#sýýëy|—xţAeůžŽß}h{ÁsBÇî_\aÖă?Öיšab=ރŰÄ;űˆŠ@ŹŽ˜„Î:Źyďe=4ŕXr›sxś´â2)ěöëe]śźđŘvŮżĎ1%B4ëÄŻîó˙ݘxÓţďś9fmD˘ĄÚöŁ­ýšôĘA›műő…äi‡N/Ćtđ™`ž#ŔŔŹK[˛mŔ’Çüç]ĂÖř•ý&ǁ?0 [˛¸Ă–ž6[şb–ˆV ŕyp̓}#ŽěrýÁ 1ƒCš+ýwë싏ęvýhÎřW“АťŸ41Y@…Wa`ŽÜ:ËPTş?׹Ď#ţG~ć ’úŃU⠎ICÄŁzĆń3*RŔśÄ9ᱏŮOźGž0e+´$…ˇw¨dQ 6H_}ݏ;$|ţąMI‹bŻ^ŹQE%íb­ęoÓΉ×702ůşÖ.)ŰîŹ[Z`ĄÇ‘78"Öâ.ńö”Ô3°7,-żż˝ ŔÂżź~]OgŮĺ­‹ĘţmhŹV,RΒGŢ}^§D`]qKž|PL–w9ňĺ+'ŽĎDZäöÍ)9iżęŮe6íNËWýç''^ä’NG^{Z‡Ř¤ńę† łJݞÜ>hËVz {eżŇ+űuđYž—ú:ÝłÍŐţJ:˘ŽDüÁ‰ ťťk֕Î^éŻëÚ:`KoܓĹíţŕE6Ăś^Y™r-˙ů–ŒúS*ť=Íyő§°íUŒXϗńçç;h…>?mž/2’ňŸďć>/Oâa˙ůÎÄöËJ¸b™í'3ţöSöřóçëűßěý{AŇýŹIY,4+Ař‚S%ő×WđŸúşăzţ‰bW°ŸŃşCŽXŹ۟Œ‘„¸í’Ěߡ‰űංKÎÝűˇHfýRSŁŃŹöXĺy…WÜ{Ă ™TG…uu–i×ui2ŒĄŃŇívś•]ŐŐ^ڨϯ`1ÓĘ4 ¸MűÂLăżZ1ÔŹ=\hóŹ#căÁůY6'Ţ5‘˝eóžtՋ{śŚä[× ”Ń Žˇ=šĂ?4š]A0ć;,Ě*˝Â_Ë'<1d›AĺhÖAg|^Ţí˜ÁgÍĞ;qŻxGÇŘśĆďĚH:Ě×u휤Ď_÷ĆĹ5Ôup|0aËÎ[™jŐőduWZ–´šŇélG+dXČĎ׀‰tĆ~Ғ]#Ž˙|ÇžmŢŮ.˙9ůĎ׀‹r2ćůšÍÁţŕü˙š˝/HZ[%éJłhšˆČ…§Kňç7ЎŁ>ĺB4 Břy'ůƒűMJăßű UfŇlПjŔČD°AćÎMM °˜läÝ+Ž3PeđßĘTŘĘŐ+¨Űđ<IŐ?ㆮ2ӟóîęŃł– pXˇ¨ňO°Ő‹œ‚‹ţŃÉßŔIĘo.ŘŐWö8ňŚ3;¤;Ţü,*!ˇ`ž#ŔŔŹŇ űĆ,Ů7d5ČŃR zuîĘţx¤p€BŻ .śM˝ň¤?é ÄH65śŽkŻ?^ŹwâyšyŔ Ž÷‡dł?@Ţ?ʎ;–™HűŰ^Ĺö˙|˙}Ý5ę˜ŕ‚âçk†eĽ%ę˙Ë šžogƒ3Ćű×ěý{Arfa4Ż=*á"é_ß"îŚ2֊^‰<çDńwŠ—´–ÄŘŮ?ąýWˆshů€ ŤˇCœ#6HúšżM4î”É7PţřöŇSI÷ú‡+ĎŰW8Ďj‹TY׈XeŢĂâőmAʗr443IŮő”ËX2IŽ9ŠǒŽĺ—5ZINK„Lg}ëúJnĽ*Ż(Q4/äTäšěŢ1ůĹ_ 3ąlX’7œŮ!m‘Ů ÍÁä-ŔT``VéxÜpҒáTáUŽzdWĚż˛ż§Ë '܂Ť&3f˝Áşó׍erƒűš}!‘œÖLÚŚĹ݊%x>ϟĘó›˝/DV4,ŢhRšÍ ‡$üœ$ý—ť$sף2öĆ:˙˜úHIćďŰ'śÓ?"ΓVWĚá !xáÂŻ‡Zb$Č×Ű5P~=SĚčámŮă4űŸ]Ź0 Áo[ẏîöIוyhŤ„–÷”´ťm+l°lą:˛e@zۃ÷>=Ľ”yä -+]Oćá텫ńß#Ť§|9‘šJĽz‹…ľ˙ZŘQ`وRy[îx<)+{J3Öh‰-÷‘oEwi˙ U‘~zǨ\q˙XAűKCňú3:$š˝ě*ą0),0żq ŔŹŇA‚T&˜ňÓ[ŰśeŽň×R “ŐóÖ ;5c‚&8y şŮő&‹ÖŤm:Ž™ĆҚĄŢ2Әߎm:/5ÉXĎçůSy~ł÷ď)2‹ą˘ś-Ął礃dŞœŁ÷“đ33Á őf­XTđŘÝ5 Šßß&2š(\ĐßA3wo6S>{Qgár…™Ü{6‹ťť0Č"sóCĺłELÂKĽ%uĹ=…Yüהžü.­Rřšö[6éşÜ;6‰ťłđ5yŰö–ţmŤ‹ ö ’°7./˜ŸšíaS6Ľ`=ţßĺŢţpA›uŔŠ™vĹ/łŽŚÇRźţ1“*ţa3YüYĆßׯnëŤDƒ+NÚPDô§{ňŕŽÂÔiż3˙áM#2”(|MGŽ—,÷Ýë‡K‚+Y–7ž9ťÁŞŮŸ9Đld°0oéؕ5ťă @ðŹXýJkLďř_ŚN>HŹÎ¸¤/ťł$0 ÜňΉ™ç4ŠsČjÉ\Żxƒ°î}[$ńŕ6ą–vĽ1ŇqľŒČp˘ôůGo(xlŻ[*™m{Ç{ţsS?źJěőËüuEĹ}˘_źí{Ĺňč˝äÔęA¸÷>&É˝ƒâěżÂ<Î<¸UźýËX‹:Ä^šhŇőh°FúÇ׈ý¤Őbuw˜ ‰Ě˝›Ľ8ŋsŘڂǡc7Jň­‘J‰”$ýő8GŹŤ§]ź=ţzîܤŠňVb‹sěţ2SV[aŞo÷ ¤ŻźÇü˝b¸JšŠÇR[DCZ+ƒĹžWny4)W=˜Á„'‡Ż ËYEeżžĆý,:÷I1łÍŃlůtƓ˙ź|PŽ\‘ľ‹SäśÇR˛s°đ˝:n}¤ ƒ…„|ýę!š{áqŚńwZäǡŒT| íţüçÝřŹ+ÁgĚ_X˜6ËÝőź™]>ŻÄa'˜t|+7ĆĺúwiĎÔnײđ•Ž֋Ou]6“w)żˇŢü ú¸+ęIw̓ţ„5~őjĚń¤+ćJˇ?/<ÉEÉ<ŸçOĺůÍŢż§ËšË‘ńˆXś-ž;ťľRĚŔ˝˙ZŇż˝ľ äDáBś„Ď;JěƒVKCů;EřÇKę˙Ž7ă2ŽÉę0YŻm˛Zěý ł:8‡Ż÷śżO¤Ý‚ň\ałżdn¸_j~™Ť‹g‚3öIz{…ň"ţž:÷¨ŞŃDö†eâ>ň„dţşŠň2뗈}paЂœ„N;TŇWÝ=Ń8š”̍T\OčŒCĹî뒙˛×- ţŽźG3ţűźŽ.‰41ŔB!Ýë­#dßÉĚrލ{z`GZŽý{”çČ˙ęrűcI3­YäČŠűGĺ¸uQ‰ÖůRo›-/?š]ţëęĄńmë­ž–;/˙œ•=Ž\x|a@Äś}™’ŕ ĽoﭏN^*iQť-Ď;ZJ?kýĚ€ůŒ ł*dëU•ž´‡Íx™”ŢŽyţ‰zW"ŽSqĐ[Ç1Ć\ő Ć4uĐşÍ_g{Ř3÷sâ!OVwĽƒĆţ$W:8žÖo_ݕ‘śPĺ žĎó§ňüfďß V{ÔCGeś9ű/ű‚S$ů‹Í }>-GzćńfżŹ˝~Ń)’úó]&ťDU!Çde0™5ŠĆG­Ž¸8ç#™ßÜj˛W”đUCĎ>~Ę%BŹŽ6qŽ\/ŠßŢ^>ó‡˙šÂţvŤeŻPÎéOĎĎ+ý­ĚzúńĺŸ{ě~ć€Ę\vgůż/÷ző3<÷ˆşČh† çÄËĽxťƒěÍ:ŔŰŁŇ(]1KöŽĚN€…fŤ¸áá”ÉVąwdň ŹÇödäG{Fägˇ˜ ‹S7Ö÷=9leXŢúäNSŢŁtň×rěڈźč¸6‰:s+XA?k`ž#Ŕ@ăyb2]”ťJ^3I÷Ć<é‰{2jŽÔ–IŚ=30ńÂf€ÁÖąśńŤőőjMë÷Ÿw šfŕ$™WK=âxŇÖÉźŽúƒßKÚt`#mƲäšy@ÇűÚ2™d€çóüŠ<żŮűw>“]fv/o-Ďáľ@€…ŇŔ†Č…§Kęg7L´Ç$üÜMś„Śž–Ľ=澸î÷á'ÄÝś[<- 2–Kîc‘ üĆÚĽb´ÂRTâěˇ\엝i2,¸îô×3ćďˆaąW-’Љšż-30őĎ@Ë`DşÚ%sÓ’ٲÇßńýcŤłÍ”%qŽŮ Vw{MëąÂŽ„_xЏˇţ]2÷=.^˙ˆ°b/îç°uţߡrŇ,Î!kÄYˇL2Ű,™żo÷î°aiV ٸ\œ'­­{– hą—tIćŽMâîŘ”"‰„Äęíśß“fĐc¨QzâvŐŕ†ş)úˆ?ý‡™*ͤ™.t*1Ă>ő€Ľ!ůČłşäŚG’r×֔ ęNxz(™÷i˙žœ°!"ëĎ͟hú7óę˘bšSÁOGŒíŇR:`˝ŹĂ“]ţŕ˞QGłă:Ć´ŰXÎdÇdRţŕrgĚOŰ­ ƒţŕł.ł˝?cŤół×ërKۃuGóźĂśż“5Ŕ“Eq×_ośÝ¤ÖĚ:8ŽËTÂóyţTžßěý;GE×uÍdYĺ#0ćtY"fpX#T&É>ĐLš™ ň˘Ó$ůóLş’đóNŤŤqؓż-ąÔL3^Ő˘ sdĹůÎĄkÍ4ĺő.ď‘ĐłO˜ń—RKłpœx ™ŚĽ-"ÎqÍ4Uág/Óeo\aŚYăżo °čmˇĺą˝–(4>âŤÖ^M´H{ԒëNČ=[SRKĹłzü!ےSümë4Uúş˙óÂ^iEúwég ĚwXh˜\ĐEĆEÎd2âř˝Ĺƒşą°ČňNWöŽY˛eŔ“1˔OĐzí#&Ăžk2¤ëŐűC w<]vÂŹ%tŕY§‘¤gśĽ´,CWԓ•]Ž,÷ cy=Îúƒă:uM#ű7ĎçůSy~ł÷ďœŕ¸ËǝżůLQ‰ÝÝ&îîAiíQ _pŞXZú"Vߏ@=éąÓh}śl˜Ý(폏]•ÓˆĘ꞉ŔłĂW…MɎ›7%ĺꇲg¸IŮ6ćýŒ€…€ ĺú˝étZR™´ŘejÉÇCžŹčJš˛iŻ-űĆt ŮňœEG‰5“˝ě̘ÁXśłĹf˝nPjAŻě×e˝˛4ě/Óá>/i÷dmëŻŰ5ŰfĂlíߞ9î2ćŘłlGŤ§CŹ=Cĺ3éĚ+Ę×,´6 žŇc§Ń–t:ňÄ Űđă3&+ÜÚEŽÉVqÜúČx[ąî¸-ç“§“ŸH›ň }<)ĹI7‚×?˙ÖŚJßwýŒ€…€3˙Ęu3’H&$‘ˆH(Ç)<ŻYý;í ÔÁ†^WţŔó–~[úłWúkJńtRĚü“Ń+űuđš;ćÉŞn׏K׊Wú/€‹÷Ѣfk˙ÖŹ1‰„wIqBaYBś)aáľR  Ĺé1c˘ťLË(-ël^‹ńlٞşˇöíkZ2S˙hœŹ5ŇĎ6L|,LIŽěGľer´DÁČȨ„C!‰EŁţ(Ká`Ż.Š˝ţŔńáË3ëÎxöĕţ5eŻě×ÁçŁWddăbWzbÁŕ3ń˜-łľÇݘ9ö˘ŃŘÄëŠ!Úh.—ąwŠ58*žŚý0)+2ÇLł,ďvdďˆ+‰tă˛XŹ_äČaŤârĚşpĹlľĘeľ8ű ˜Ü˝-e˛Z T4d™ĎX(°ĐPZŚ`xhDۖÎÎňiČu¤Íx^ŮĽ\MYţŔˆČÎaKüAč„?VšĚX’qe<]ˇZë sŘń$ć÷dŮ˛ zeż>ŻěňüuxW`ÖÍĆţ­ĽA†‡†eȟ:;ťdÁĐr}]âmÝ#&§ÇJ3S' J†,Ä+ěéĘW$MćŠaŮťˇß[šÉ"܍FM€Eţń•œ-”cNŻŢˇÖ.oGż¸{‡X(ěŢą–vK+ÓR- Ëc{3˛sr>­hI§#kz@€€ÉXD"iďh—Ńą„xnƔ2“ápŘ^h‘Œß‡ĆˊäĘ”š\đ’Ţć&=Žô6•JK"™‘‘Q1ǖÎÓcF+ÚŰŰ%‰Ŕ”ĽÍv<"ŢŽń’ić+TÔ×%Vg\ć ŔďˆX˛ľ?#‰4™­Z–YŮíHo;I€,L*?;ĹTžŁS(2źÝÝÝţđˆŒúS°.Ë\y?:6*ţpąDüâP8,aXŸăčäßw ś°Ç× ,4AŽ̸ć¸É¤Ó’Ngü)-ŠtJ’É” ŹĐyzléň¨ÔÖŢ&]ţąok3ÇU~ĐŇT̡cOœ­Ž˜xťĹŰ3D‰"Ě+ć8_Ô!ÖâN} säwˇŮ˛˝?#O şŸłD÷Łeś,ďvÄćëP€ ÓRxQîąI´ůƒť===2<4$ÉDŇĚÓÁb˝Ę^Żžˇí¤šďřƒĹIPŘń'Ű^šLŔBTœšÂŐ@ Íăߌ3Ů@ ˙X ˛Z¸ć9NȑÎÎNY´¨WÚŰŰĘf°¨öx^Ó~EŻîďéoߐ¸ý#⿙ĚYţ1owˇ™}ZBs;ۀčŻěqLY -˛kČďë\-š!äżů}śyďĂTĘ"Ŕ@CäkŁŃ¨,^źH†‡‡eppĐ ç ýÁâdFnxĄWâçß旁…&`¤GN6đ(wŤ“*<6,3E#éíí•E‹zĚ1H Rţ@´Z8ţä ŽšI†ľœ‘+@Ťł´hYYćP)ZéżZč´wؕ}ŁŽ Œy’!آŽŰ’Ž˜%=q›R @ °P7ůY,ň,z{{dhhXöěŮc2YäĘřCĂf™\E*•Ÿ‚ŤňSAI"Ŕ Q.ŒNápؔúĐŰÜ44‘Ër!Ś˝ŁłĂdŻčî.`A°EŠ‚AęѤxcI‘dZźDJü]‘´Ť}šĘŤ:iV -› ‹DBbĹ""ńˆ,:đŸüJx2’teÔ?4ÇRŽI>ه§Ć]p|–gő˛ťQȉ…m‰űťR[ĖŽ(˙SA€€ŞŠËTkϟŻĂńx›ě]Ň×gŽŻO$f ˜q >‚ăÉő7[bń˜,Y˛Äd°Đ=ĺʃŤ4Ábř×VvđšĄG ľh@@G4Wż‚:š‹ uUt‘+eĐŮŮ)˖/Óëěe÷Ž]Ś,H:ńÓÓӡǚfxŃcIŻŢŽDŁŇˇxą,]şÄsšÍ˘Ů+ڇQM3RK ‹ĹüA߼ÚbƒÄu]IĽ2bŰZÁbŕ¨QîXÉd\I&ƒR:ápDş:;eůŠ•˛dIŸ9ćň—­ś.LŽ 5ŠH1ٲú8 IGG‡ ŞH§ÓćńĐĐ ż\ZRФßfIÚ$vuň—É=_o§˛m`>Éß÷őV ŚH$RţńâfŰD"‘¨´űÇW_ßY˛dą9ÖôšĹÁS Ś đ fŹÖ]Ž­­M–/_fŽŽß˝{ˇ ôËČđˆ?XœÎ5%\4öƃ+tPXˆôĐ;A …cZd'íţą‘ •bń6éîę–Ĺ}}˛hQlĹkŽ ˆ vX¨ŮLłXčăp8,]]]ćV‡ŁŃˆě í“Ńё “E&#’we~l + ‹%–îöLai°EśŐ űÇOČ?ńxťôööJOOŰă?žŽ {@}` .Ę_T ˛ĐŰh4*‹őJ[[Lşť{dxxX†‡exdDFGÇ$•LJ*/‰żŞ…`>ˏmĐcĹqBbۖ„C! G˘GM&˜ŽŽ.ioo÷§6“&‰L)¸‚ €Š!ŔŔ”L–Ĺ˘Ö ĺ8ŽšÚ^-ÚÚÚĽłłC†‡;eddD‰„¤R)I§Ó&¸bz%BˆÂ@+šzPƒ–ŃăE3Vhć—ŕ˜iŹĐ6]ĆŹ˝Ć@ŠÉ‚+ź( uUKE~›Ţćˆő | ´Đ€Š DHXQ˜˝‚Ŕ ĚůAšűzŒč}˝Ő` 4đ˘R֊д :,LŮdY,*ͯԖk×Ac ´Č7•` /0M%إҲSiŻś=‚/*#Ŕ@ÓT ̘Ź=§Z؏ŚÁąĐX˜–Z˛X¨rY+&k/7ŻxţdËsU­“-7Ő,S]`!#ŔŔ´U ˛˜l™JŐć•[˜ďfRÚƒŕ €ú ŔŔŒĚ$Č"7O‘ľ˜PlľŽ‡ŕ €Ú``Ćfd‘›Żfšľ‚ Ě3 j¨WŕÁľ#Ŕ@]ÔdĄj ´¨ś\-Ďć“zeľ˜ęr` nj ˛Č-§Ś“­‚ XŚü0•ç\0uX¨ŤZƒ,rËŞŠMLe`˜` ´’F5Lu˝WLęn*AšĺsęÁ@2ćŤéîŰÓG€€†˜NvŠüç吅˜y`3G€€†šn EńóË!řóI#‚ ʍ,4ĹL-&['€BőG€€ŚjD €C€€Y‘?L°0}U4f]ń1@eTĚ,´œJČ^`!! ľ``Î`ŔŔlą“"Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş Ŕ  ,Ş  Š\וT*%étZ2™Œyœ›Đ8śmOŽăH(’p8lóýK€ăhžfő?ßŔÜG §UżĐŐqţĄ9菠5`M ?8’ɤ™ôGšŻŇ<ýq‰D̤?P€š†ţĽÇ;ĐłŃ˙p|sý€œšđű…ţ(óÍG­ÉŞĂrV™ű“ÝZç&;ď679Ů6§hŇy]z›LŚŽh!žçÉŘؘ™řŃ17菓X,f&ËŞőŸH ůč_fŽă˜žšĐ˙p|­ţ@Î|üýB˙…‚ó­ţŔ\‰„Ońo4rl {›)šźě­›7yyˇĹ“Tx<Ůmńýb“Í3°€:Ó###2::*˜ťâń¸´ľľńĂ-…ţĽ18ށęćj˙Ăń 4ý€œ…ňű…ţóçć&ú#­Ž‹ňó°° éýńĄ?B0÷éýQ˘?N€ŮF˙ŇXď@es˝˙ářš‡ţ@ÎBűýB˙ů„ósý€V6_,B˜ąt:-ĂĂĂŚ!ćý!ПŤÖ–loo—Pˆ6Ń|ô/ÍÁń”š/ýÇ7ĐxôręďúĚœ˜菠ńČ`3¤5‡††ó_GG‡Šg4 ýËěáxÇB7ŸűŽo žč/äđűeýćŽßů‹ţ@+!ƒŔDS‹páĐš™LĆDF˙2ť8ŢąÍ÷ţ‡ă¨ú 9ü~)D˙š„ăw~Ł?€ú#ŔŚippP‰„`aŃœŽëJgg§B˙Ň8Ţą-”ţ‡ă˜9ú 9ü~)ţsÇďÂ@őE€LĂŔŔ€Šc‡…Ixj=ĂŽŽ.ęţĽľpźc!YhýÇ70}ôrřý29ú´2Žß……ţęÇŔ”hd7?> ű€î @=Ńż´&Žw, ľ˙ářŚŽţ@ż_jC˙VÄńť0Ń@}`S 5 I›‡ÝtŸęţĽľqźc>[čýÇ7P;ú ú ‡ß/SC˙VÂńť°ŃŔĚ`53őę€|şOčžĚýËÜŔńŽůˆţ'Ŕń TG żčŚ‹ţ­€ăŠţf† ¨A:–ĄĄ!ĘŃ}C÷`:č_ćŽwĚ'ô?…8žĘč/ Ń_`!Ł?˜úĚ&Ž_äŁ?€é#Ŕj@Ú4TĂ>‚ébߙ{řĚ0_°/—â=ĘăŘ(Ĺ{‚…Š}ćx1[Ř÷PŒ}ڇ ¨BSŚĽR)&Łű)1Uô/sÇ;ćúŸň8žRôĺŃ_`!˘?¨úĚŽ_”CÓ@EžçÉČȈľĐ}%‹‰eYTÓJý‹Ś„üӟţ,ţóĺ˛eËq]WÖŽ]#çž{ś<ĺ)O–P¨5ž2ţä'˙O~đƒ˙ö_ŸČ3žń4yă_/ł…ăsY#űíO~˙ű?Čĺ—_)>şyĆu}ő8[ż~œu֙ň´§=ľ)ýÇ70Ąý…žČ˙Ýď~/W\q•lŢüXÝëëńťnÝZżß8Ăď7Γp8,B…„ó#őE˙fâřĹdč`ęjí1­çY5ÜZç&;ď679Ů6§hŇy]z›LŚŽ¨3M“F/Ś"K{{ťŐ´R˙ň™Ď|AŽźňʲó<đůŕß/˝˝=2›FFFĺ _f‚?r.šä ˛ß~dśpźcŽjT˙łgĎůČG>.?üˆ4Âţűď'ţđdѢEŇhß@ ŢýĹŽ]ťM?ąiÓ&i† 6˜~ŁŻoą4 ý ΏÔýš…ăŐĐh–H$|ŠŁ'x˛ˇ™˘ÉËŢşy“—w[˙Á’Ď}î ňřă[Jć˝á Ż•g>óRF˛_ýrÝuכőěݝǴ÷ôôƊË儎—SN9Š)WŒÎşďhä7PIłú—Zyä‘rĂ •ƒ,´ŸůĂţ$OúÓ¤‰„?đ ˜ ÉΝ;ĺ‰'vČśm[ĺŽ;î4Aĺ~čďŰˇĎ šh9“ăŽ;Ö¤_ştŠ™rW^DŁ‘†ŚçxÇ\Ó¨ţG˂42¸"硇ţ.üăe ëňq|cĄŤwĄeAš\‘ŁAÚG=ëYϔFĄżŔ|׏ß/Dy×]wˍ7Ţ,÷Ţ{Żůžßß?`Ž/ͨˇfÍj9ńÄýéřysĽ5ý­YÇŻ–ţúĘWžfÎ1űҗžč˙^_'ő´cÇNšúękĚůÔ;vřç2÷úż˙cţšË^ł-=yüńǙŇSĽ˜Ü~űfý=ô°ě޽ۜˇčé閾ž>9účŁüőŸlJNć˛Ëţ"_|IA›mŰňË_ţTŞŃó"ďxÇżšżŤŘ<_^ůʗK˝Ń@í°€ šńD4˙ó?żdNL•^Éý“ŸüŸüčG?žö•œ:`ů§?]&ßúÖwÍ fąŃŃmţç6šíśŰĺ›ßü–<ďyϓżř˙KTP?HPM3OPţţ÷ôOt\éh~‡††ýó_1ÁÍ Ďř#ůĹ/~U’i3•2ç7ľŻĐףç^őŞ—ËSžňdą,ŤŚőßsĎßĚßSîĂΝťĚtď˝÷™×pÚi§Ęk^ó*tQO###ň‘|˘lpĹ駟&ŻxĹ?J#Đ@í°€24…l#ÓᏎŽÉ׿ţMůă˙$ÓąmŰvůÜç.–űîťOŚK4>˙ů‹KNtV˘W—˙ä'˙+ˇŢzŤ|â“ÎÎAyşďč>ÔČŤć1w5şÉŮłgOŮtý÷Ýwż™´˙њä:řŠWtVžůÍo(°xä‘GĽŢ4ˆcúÁšŃ˘ś$z回 iD€Ç;ć’Fö?›7o.x\ŕ íżt ĽŘŁÖż?*‡ă Y#ú‹Ç+¨xó›ßX÷ŕ ŐסXŢň–7Ę+_ůšńśGÝ,DůŹż_ôüˆ–ÖJݐ×çÜyçÝrŃEďŸ‹č?ĐH>~ď¸ăůÂ.‘Ýť÷H3 ČűŢ÷Áń HŞŃsúúîžűoňÖˇžÉd˜Ěoű{“…ŁÖR×\s­˙üUţíß>&ű￟ԃ~^˙ţďŸ)ű›çIO:DŢńŽŽ9Xd:ŰŚ?€ÚŘ(‘L&ĽQ4Ęů­o}ű´ƒ+ôyo{ŰŰg\Ą.˝ô+5WäÓúçţđGM€*kä>„š­ű†fŽ(\‘Oe-ŻQ)ŽëžPhD-NNJ퍨ž0}ĘSÎ*hó]ö57ł†4Ç7ŞFěűĹý„B4Jń•¤Íč7č/0_5zßţÎwž?ĽŕŠ|7ŢxŁ Úžëč?Đ(Úˇtţk_ű†|đƒmZp…fWxßű>TspEž {ďw&]ćĎž|JÁ9š1ăýď˙ )YR_ýę™LÂĹV­ZéżßďkxđýԆ PF#żL~ţó_”íۡ´E"ikk3‘Ő“Ń-—\ňĽ’v˝ňKŻŻ5*ýŚ›nŽŕątéY˝zľŘś%[śl5Ů2Š=đŔƒň›ßüśĄivç:݇ćKMXÔW3~Źjńɂ+r4Čâř“<ăç´kĘK.š´ măĆýĽŢţůŸßbNˆj߉' "‘¨tuu™A—5kVÉ~űí/Ç{´iÓ˛9zÁ†Śú|ń‹_hN><řŕƒćęÔ]ťvÉŔŔ ˙>'Ěr‰DŇ ˛hFŽFáxÇ\1WN–içg?űů˛ßAšă '×§ŽţóU#űƒÇ{\~úӟ•´ëUćÇwŹ}ô‘ŇŰŰ+ĂĂ#ň׿ŢiŽ/žŘCNŸóœgĘúőëe*Ţýî÷š `r´l‘fř› ôh”FżZŞçWżúuIű˛eKĺ‰'vH#üŕ?”M›6•´k6‡ľkךm' łLšRĚżüĺŻMАýöŰP2OĎIh`CšŕŠŽŽSjUŃ;wĘ#l*YNƒĂżţőoČűß‘ĚÄOúsůÝďţPŇŢÝÝ%ůȇ¤łłSţjC€ŃëMYř%\żŘżë]ďď~÷ćę‹IŸYć‹ţ駟jjżúŐŻ3i2ŤŃŤŐ5"ťXOOˇźímo)IĄ×]w›AŽâˆtýaB€EeşéžT-ý –Ć÷/ü@ĽÇľŚáVZ*CƒŹr.żüŠ‚ ş¸č˘˜šŸůÎ<ótŠˇŁŽ:Ę? ńUÓˇ˝ç=ď3mŸţô'§”-.§vŠ™rf˛žéŕxÇ\ĐŹţ§~řĂ˙‘[nšUZÇ7˘šÔ_´ú ĚGî.żüʒ€‰x<&űŘGäC.h?ďźsMYĂ÷ż˙C%Żéşën˜r€E+Ą˙@#4ňř->?Š#_ň’ ĺ¸ăŽ‘ˇżýRoz1…ž‡,vĐAš˛`6LMčyĎ?ýéĎň_˙őuSî8Gߏ_˙úˇţšĎ7—Źç›ßüvIś+=_őŞWČ3Ÿůô‚Źzќ^<÷ˇżÝ[°üő×ß(ťvížv†ŽëŻżAžóď•´ëEyüŕűeŊĺŇ ôGP, ˆŚškđ{îsŸ-ŻxĹ?NŤ^¨fźxýë_+gŸýä)=ď†n’;w´Ĺb1ůä'?!k׎)YţđĂ“wżűe‚2,“5C3PžîKŃhT€œfő/Ĺ5Îő„C.]żZäX×$żě˛?—W|đArÎ9gKŁč š“zľIţɑVX_-8ŢŃęšŐ˙̔öO?ůÉ˙´éKţŚÍĆń…fŽô­ˆţóMŁűƒrWٟţÓJ‚+r;ěP9ńÄăM@Ežâssýę­Y˙žŻ\šRŢőŽ‘< ŚLšÓńťßýž$KƒŞ>ţńš‹.ňé9ÖóĎ?ϔŃóůöě)-g˛wď>šöÚëJÚ˙ůŸßZöœëňĺËĺCú€|ŕ*yyä‘iXhŚŕĎ~ö %Ł9čEyzNŚ™č :, ˆF:7š–ôxÇ;Ţ.Gy„L‡žlxç;˙Ĺ˙RżLŚŞřDžŇ@rÁ9zăK_şD05ş/ńƒůšŃż 36ä˙HwÝÂ+XŠł;ŹYSŘhóá°ĄW/ÜzëĕęzŐúL"꽞ZpźŁŐ5Ż˙™žmŰśÉç>wqAŸŐÓÓ#ď}ďżĘ+^ńj™-ßXhćBŃŞč/0ß4ş?¸č˘őˇQřű$žütľ^ RŹŁŁMć:úÔ[3ţ=ęSϕ׽îŸĘ—ő˘ƒýW\qeIűk_űę’ŕŠ|Ď{ŢsĚTÍ_ţryIŚC}Ҥ´ut´ËĹNŚŁř܊–9ýŘÇţ͔7)öęWżRN9ĺ$i6ú#¨Ž (Ňčt¸§žzŠ\pÁ ̗ńŠr[^ö˛—Č‹_üÂi vęߌuK‹é"ĽuöôGˍ7ŢlŽj׫ص1ŃôűúÚg2ČúÚמĄ¤žşž<ůÁž;i}?MőĎ=+i˙ęWż$ŤWŻ2÷/šäKňÇ?ţŠěóuY׿té9昣ĺ™Ď|Ć´SöMŠ•QŹYűÄşuëäžű&Žöţâ/•7źáu˘%Šžň•Ż-ťśŕńӞöT“óÁ’O<Á”itjČ[nš­ŕţ _xĚD˝×W Žw´şVßGő;ȧ>őĺÎ4Őđ{Ţón˜:›8žąĐ°ĎOďć›FďӚv??ő~5z>AÓđ;öŘceŽŁ˙@˝5rŸęěě”|ŕ"9餼ŃôÜÄĐPaId=ż—ťhmďŢ˝ň‡?\ćŸďźĂď#žt:e‚´ľ|ČŮg?Ežô¤C&]˙mˇÝQŇöÔ§žcnľĘ­ˇŢ&W_}É2100`JvŹZľZŽ?ţX9眧Lz>łœüó+TĄÁűöí+YNĎ]ęqłţŞ#ŔЧcŤˇWžňĺ2]˝˝˝ň’—źXŚKƒ&ŠÓ×鏝î¸ăŻň…/|Qvď.L—§?ôŠRM—§é÷Ţ˙ţ÷ÖľîŸÖCźćšëL=Őr4’ť¸ŽáT颥Ą!3işB­šřîwżĂ 7RŁ÷%Ě=ÍÚ'ôJ‹ü‹ŰożC^˙ú7•]ś¸ô‡ţŘÁ ž'͢ƒŠ÷Ýw˙xŠ$˝ŻmS=IѨőՊă­nśöQÍ"óŸ˙ůeóoą–+:á„ăË.wńŗ–¤ţ§zĽ~řĄ2Ű8žąĐ°ĎOďć›VاőĆΝ;ĺĆo‘˙ýß˙g‚ÁóéďQG)sýꭑűÔqÇ#͢ Ĺ´œąúĹ/~%ßůÎ÷JÎujIăM›•?üáOrú駚rĺ˛lčo”‡z¨¤ý°Ă“íۡËg?{qÁš•-KtÇwȏ~ôSÂăŘc–ZéĹs9—^úĺ˛eUô|Ľf™-ôGPPd>‰|řá‡Kږ,Yb?>ń‰OUM¨őQ˙ĺ_Ţ)űŘGLmĹzšüň+*X\yĺUćO=iĆ˙÷ĎČ7žńľ†^ËkÖ>qîšg˟˙ü\0™ƒ>Ř\q1›4řCŻŽ8âˆĂÍą~×]wűm5YsZa}ľâxGŤ›­}T3Lĺjk†ŠO}ę%5„őÄčUW]UĐvĆgČłŸý,ißXhŘ秏÷óÍlíÓ7ÜpŁ9G1ÍTůœçůÉg6$ëKŽœÇąÇę0A@„Śŕœn@D˝×W+Žw´şFďŁZňKłRĺä2ÇäŸÔ{˙íßţ]žđ…ĎŒRÜ}÷=ňíoˇ`]ëׯ“ˇ˝íMë*ÜVíŠÄëă űüôńŢažiĹ}ZH5SK˜—;,öŰßţNţß˙űŠÔBżoüëż^TvŢ?üĂËä _(D˙z›/űTšs™šuâÖ[o—Z=účŁňĽ/}ٔĚWŽ4‡ţÖ¸ä’KŤWäčűüľŻ}ݔ$ŃËŐč9=úőŻłěü3ϸ˘W™_qEiÔöć͏™Ź9‡rˆÔJuşşşĚ¤Ű:óĚ3ĺ oxmÁ2;vě`žŇŔ˝Băío›ŠMŞ%†tŇű˙ň/o3ót™|ůÁJŻôń5×\+˙ř'ĺ˝ď}Í'jĄÇţmˇ'E4ĹhŽv˛DL'sM˝× v]]…ýIîßŘWżúć*°­‘Źu†5›”ö'Ÿţôg ‚<őßo-G–ŸÂWŻ,Ë×ÓÓ-`aҋ>~˙ű?Ę˙ýßOË^Ů`~)=—ŠVčo|˝(ä/xž|ík_–Ÿýěĺë_˙Š)­œ+šO3YÜtÓÍUםL&ͅjÆ ć╟üä‡ňă˙ˇ|ä#*›ŃWĎhPF-lےĎţ‹ćb°r~ôŁ×őź  1°€dll´âź .xźď}ď5iť#‘ˆ ŹxęSϕ‹/ţŹ,YRš ó÷ż˙SIĂŠĐ,G}Ôřă+ޏŞd™ü6Í^ĄƒĂ3ąté҂ǽ˝+´˝r\K€üŰż}Lž˙ýo›IďŸ}öSŚ•nRŻ4ç;˙ľn?öyd“Y×âŋeíÚľćŞuío´-?¸jśÖ vë×^AzŰmw˜Ű3Î8]^ô˘ĚÓ:ßűÜLÉ ¸ČŃ~éď|ťŹXą˘h]…W§­[ˇNŔÂĽßď˙ň—+ämo{‡üđ‡?"˜˜ÇFG˟ËÔßš•óUŻzš9g¨™'ôwÄË^öůřÇ?Z­3çWżúMÁ㑑ĘçIľěčç>÷i“Éł­­Í‚ë…˙ńŸ’ă?Ždů‡úťÜwß}R^äVŠ‘Ň ˛Zƒ5ł‡ X@,Ť|ˇŻ)ě^ţň—•§ozÓJÚőNĽŇľĐŕŒc=züńŁn6.ůňëąsĚђNO? #“ÉČĎţËńǚnď)O9KLxë[ß\ľśđΝťL™ z¸őÖ[ÍíńÇ;~…űŃGý‚–+™íő¨ÝńÇ_đřĘ+'ţ ŮË^j˛dĺťţúKžGźčEČ 'Ž'ČrU„Yź ˜_t@óżř?3ýď˙ţHžúŐ/Ék^ójééé)XNż'h€Ĺ/~ń+0?U:—ůŒg<]Ž;îزó?üPyÎsžUŇŽ™)ň/sœňëÖ`w˝ë_ĚhĹ4;ĆŰßţÖ˛óŚRśd2šĄC3őZWH4zžÖškk‹•m?ďź§Nz5űąÇc˛Gä_eŞ´„‡FtO‡ŚĎÓ QŽÁęňËŻŻWxď˝÷ĘöíOŒ/ÜqÇů?0nŠyý?üá˙H<7÷ÇĆr÷ÝwŻOOĘźë]o7ĽCi:0ż5ŁѓŒ7Ţx“<])÷Ýwżô÷÷¤ßWzB@˃rČÁňä'ŸiN`*˝ă;ßůĆřršićᇖüŕäŽ;ţ:Ţ~×]÷˜mäž7]zŇ ŘîÄI˝˙Ç?ţÉĚ{á /Š¨÷úŚ‚ă­ŽŃýÖA˙Ż˙úĆř64hňúëo“O>Élű]ďz‡)3¤ĽÉĘ9ꨣäĽ/˝°¤ýÚkŻ/Č@Łë:唓Ľ™8žąĐĚçßCFůfśú –Î]};˛ző*3éo—÷źç}ňřă[ –˙Ţ÷~ çž{śšÂ<ß+_ůr3•óîwżˇ ŘSŻH˙đ‡? ł…ţő6_ţ=Ç˟Ë<˙üó&}Ţšçž#?ýéĎ ÚôÜČÖ­ŰdÝşľŮuÇË>WĎu”+™œŁçSN<ńxSv$Ÿž'ŠC}’)ĎüöˇżŤ$SÇ7żů-˙7ґ˛|ů2i6ú#¨ŽžŠĚç/‘‹—ż2}íÚ5“>Oߓ•+W”´ČtiP…žü8ě°ĂĆŰŽşęšńű×\sÝř}­Ă~ćbÔâĎž\~ýëߚé˛Ëţ<\qđÁ›Úî:Óhü AąFďš*WO8~âŸň%Ż“Ýťw—W(mÓy×\s­|üăŸ4ƒžĺĘ~čzĚ|üă1?ěóiÇL Ëý÷?`‚=?|˘8ę¨#L›‡č2łľžŠâxGŤkô>ÚŰŰS’Ĺâ;ßůž$ s_ű“÷˝ď=eË}-_žÜďťŢUňőšßýî÷ ÚôDfOOˇ4Ç7öůéă˝Ă|Ójű´jžć5˙TŇŽá7ÜpŁĚeô¨ˇů˛Oőő-.iÓżMƒŽ&Łç1s™-óŒLœËÔň˘ĺT;OŞV­*ÝţTÎ9Ź_ż^>ôĄ÷›őźúŐŻ,™?::&_|ÉŹÉĐ@uô”Pd>‰\łfuŮöÜŕÇdĘ-‰„eşr5RóS†ë€Ż– QˇŢzŰxť^ŽéůęQWUë!ę•*Z÷˝–ż{&řA‚bÜ'4@âďü×IkyVr÷Ý÷˜ç– ˛PzRâţá%m°0ˇß~‡ ôĐ+6ňŻ4ÓÚŚ‡r ¨şýöżÎÚúڊă­Žű¨Ö?ÎŻuźeËVůĎ˙üŇřc-A¤W†j™Žý÷ý˘‹ţU:;;JÖ÷•Ż|MśmŰ6ţX×ý˙řŇlßXhľĎ_şk×ni”]ťvIáśăŇ ô˜oZqŸÖďűĺlٲMć2úÔŰ|٧֏) vĐ ƒüRĺčürçő÷GΊËÍĹŚž4"ľĐŹű؇ĆĎ]h6Ž#<˛d9=Wó‹_üZšţŞŁ§€"ůóÍƍËţp¨”Ž;GŁŚ‹SpŞ%K–Čtĺ~ăœvÚ)ďšÖCÜťw_ÁöÎ8ăt™Şo~óżä׿ţš™´nëWžrŠżž3ĆçëŐý_űÚ7¤‘ćóž„éiÔ>Ą' ţýß?#;wî’éŇç~ć3ŸŤ8żýö+x\\2h*nşéfůüçżhîëŐfššWŻôĐI7Ňé [Íç?ą)EŇěőMÇ;Z]3öQ˝ŠěźóÎ-hťâŠŤäç?˙ĺřă÷—÷ž÷ݲté˙{DŸÉ*ľ˙ţű•ŹKŸsŮe)hӏľ\MVoßXhľĎ\zé—dĄÁşî|šTŕFůŚ‘ű´–{ó›ßV2ĺ—+gll´Bű˜Ěeô¨ˇů˛OiiÓrŞËŹ4_ƒäč9R=WZúܤš|¨¤MăÔâcűpI ’ţ緔-‡ň˝ď}_{ěqi&ú#¨.$€ĺć ý˘~Ě1G›ÁČ|řĂĺšĎ}śšŇťœßţöw%'+ôŠöƒ>HfJS|j ˙[o˝Ý<ÖčěüÔßúšŽ?ţX™ ýa Ů;Ţýî‘;žżň^K‡üă?ž´lşňz˜ĎűڧQű„ gŽ8účŁäe/{‰ěˇß†’Ť(4áᇖüŕäŽ;&˛:Üu×=f]Zo´Xń:ŚR˛§ŘĽ—~ĹźĽÁšUŚ]ćË_ţZŮ×ÓČőMÇ;Z]łöŃW˝ę•ćßňüúĂßüćˇM Řóž÷óXkœëT‰ÖJţÖˇžSĐŚƒŁ•j¨7Ç7šFíóO~ň™ƒˇÜrŤ\˙“4ĂYg!Í@ůŚ‘űtWW×xË|œůĘWŽŻř<_ÎL.iô¨ˇů˛Oi ĐÎÎN,h˙ŮĎ~QP´˜Î/śbĹ s2ߊ§žl˛ÝćťűŠŘXvÝú}ćž{ţVŇŽ%Vkąrĺʒ6 ÎĐßR_ţňW Ú5‡^,ňŮĎ~şiôGP, H~޸ůčyĎ{nIŰîÝ{ä?ţăseŻř¸ůć[üAŘ˙.i?ě°'•­ƒ8gžyćřý{ď˝×˙‘21P|ňÉ'Öí3Ń üt˘šRđŃG•F™ďűŚŽQűÄĺ—_QđXƒ+ôŠ ‚*—˘RŰô‡˙Ç?ţ9ę¨#‹ÖuĽ4Z(TűIZ–­÷úڃă­ŽYű¨sž˙ýmjp…Yč‰ÁÉŽ.Ő ¨K.ůRIp…Žó=ďyˇÄb1™ ßXhľĎ?íiçɆ ¤Ů4ŘTˇÝ ô˜ošOëů„reL5Đňˇżý}ŮÔţW_}ššťœŁ>Rć2úÔŰ\اnťívyýëß,ĎzÖó侯}ŁÜrËm%Ëč`˙łžőŒ’v˝xě‡?üQŮőţŕ?4ç3‹i°g1ÍŔ—_fTi˙óéOVśmŰ^˛üÖ­[ýs¨Ÿ-飴Ů 'T"ϙŹüFP*䈒v öřÉOţŸ4 ýTG(Ń/ş<“Ťł[Ůá‡j&˝R=Ÿ^AöĆ7žĹ˙a¤ßńŒÜ,×_Ł DȧďŃK_úRŠ—“O>ÉÔc×ú…ěĄ'MrÎ<łžW›§đłŹĆÄę>DÍBkT˙’ËĘ’Ł™+4 ¨]ćţá%Y,Š×•ońâĹţ1¤ňîëë“ézë[ß,_|‰9Ţ'ŁŮetŮfŻoŞ8Ţ14óűÍŞU+ĺ¸H>úŃOÔ&ţË_ސ{ď˝_ţéŸ^)'tbÁsn¸áF„Q|Sƒ*>řÁ÷ĎJiĹń…¨Qý…žŹ˙đ‡?`ú†GyDšAƒ+>üá6ĺJLú ĚGţţ Ů­4¸2ŸžĐ+¸ń‹_š`đžž^’;ďźË”)G3uŽ_żNć*ú4BŤŸßÜśm›|üăŸ4r˙íß>)—^úE˙÷ÄŞ‚eŸőŹgĘ/ůk*h׋[o˝MžüäłLЖ– Óßĺʃtww™őÓŔđç<çY%Áۡo—ˇ˝íírÎ9çČ!‡|őˇĚe—]fJ){ţóŸW13p­ôžłxË[ţš$0ýÇ?ţ_9á„ă˖WŹ'ú#¨ P†^Ý=::*óŐ;ßůyűŰß!űöő´ďÜšŤlśŠb/yɅ&HŁ^ôĘTý‘ ŹŘˇoŸšŐ?ĺ"ˇkąwďŢńÔyétÚümż˙ýÍI™=ŃÚ¨“0岪ýKńą<•ÜűíW¸Ź;•čý\Mó™*h†oűţńx§\{íőňřăű'/ž0'Vz{ůŻi˝) °ľ ˆÔ{}SĹńŽš˘™ßoŽ8âpůČG>hRóOę‰ÓO|âSrŕČӟ~žiÓRdĺN‚jp…ŒÖó;ÇTq|cĄjTĄƒŸ˙üřßË˙ W^yľÉ&Wnb&ôˇĹşuë右N7™+š•ćšţóU#ż?œsÎŮć*s˝°ŁŘ–-[ÍT~żő­o’ŠúĚgţ]ZýĽ•ĎoŢpĂÍăÁ9ŠTÚożI^đ‚ç´wvvČťßýN˙ˇĹÇK.ť˙ţĚ4 Ќxşžr^üâšó…Zę0Ÿ~GůŐŻ~mŚÉuÔQţ:.zXž|™)řŐŻţWAťžŰԌ€_üš†f˜ ?€Ú`eĚ÷ =ąůĄ}Ŕ pěŮłgJĎ}úӟ&^řBŠ7­‹œŸšBvÚŠÓŽ/řŽw˝§ę2çž{vIíĹzá *iD˙R|EĘT~l䀘]ÝrÜqÇČwžó Š=ÁĄ'!tjĹőMÇ;ćŠfżŃšČ_řÂgĺSŸú´lŢüXÁ< ¨(T‘ŁY0.şč_eýúő2›8žąP5˛żĐď)zišŤHç2ú ĚWěrƒžŸüä§Mş˙ŠZ˛¤ĎîÇýŰ%2—Ń QZůüŚă”ĎşiŰĺĎ{ěŃ&˜ęK_úŞ 6¨•~ďxó›ßhŔ+żÇüöřřÇ?%÷ÝwŸLĹ!‡ě÷cďŹkևg<ă|šöÚë䎝î.hôŃÍŚüÉŤ^ő iú#¨ š~  ýň=݁ýšBŻýâ?'§žzrMĽ:;;ĺ˝ď}ˇźéMo¨iůŠ:öŘc¤ŁŁ0’źŢĺAňiƌ׽î5ŇşďPŻ•,„ţe!áxÇ\2ýÖV˙ěg˙Cžň”łj.]¤Ë~á Ÿ›őŕ Žo,d|_™ú Ěgî4ËĚ?ř>yűŰßj˛XÖú˝ÂýË_žTVŹX!sýŠ•˙=?ńÄMĆş|Z>řä“O¨řœsĎ=G>ýéOĘl”ZŹ[ˇÎ˙]ń9眧T]V/Ŕú÷˙„\đ˙ٝǪňďăOfśĚöހ…]`)‚ôŢADš "]°úWş /ˆ ŇAED M@¤÷*‚ô&u)K[ś÷ž;“÷ţNr’›››6ÉĚdfž “MššIî=9ç9Ď9çűťý(E吠i3­%ľ‰Ž?ţ˜źĎGnżý{ó͡Ź-P@ů˜Á P%vá…֕ 2ÄN;íTűä“Oí‰'žtSáMžüšÍ›7ĎU㇠ę:7śŘb3Űa‡íc+öľ˘†ÉvŰmă–ńMóŠ,đZQöŕÁƒ‚FŘŰyçóÖ~ŻĽśüœĐ5Ôş|6l˜Íœ9Ó]ךÓŢĎŻ•gŸ}Î.żüŠź%O Ů{ďŻĹŢ>xđ`;DŞśĆůŽÎŚ#ę7}űöą“N:!8g÷˛kŻ˝.oę]oíľ×˛ď}ď;ö…/Źkő€óÝ]{–Z3ýü“˝ôŇ+´íÓ§[Vđ;ß9"oÍööByŽŽ­ËĹ´\ˆâ/˝ô˛ý÷żĎÚ|hłgĎqń Ĺ † lŤŽşŞ;ßwŘa;Ďč (?ĐÖę5ž9jÔHűĹ/δ?ýéĎnśťUVYŮľF]ôyj3h–źW^yŐĹŢxăÍ 1Ó˝GĹţFŽábŰlł•mśŮŚÍ,Ą˛ćŰß>Üžţő}íąÇž°W_}Í&MšdsçÎsł}*‘bŐUÇÚFmhťě˛ł‹›ś}ßúÖ7íŞŤrgŐ)—^ú› vrYÍËĘ#(_šCeޗ(ăo˘ŔżýĽ!ô×_Óˇ5F.şOŠÍ ˖-Ú †’ÉdŚĂ¨„:ŤŰb–tľ._^xá%űÝď~ďŽ{ěÜԙíůüZ9âˆďVźlQ! tüĺ/×Z[ă|GgSő­‘Ź€ĺ3Ď<ăţ˝őÖ[ťäGKë ç7şťö*/”\qĚ1'؂ Źýű÷ ę3żédQĘ tuÄGÚĺÚç/ĘEy =ôęŐs›ŕOKp™—ţŰš$Ó[B—dčoôbţ]ěoôzTąű, e?×ëZ…¨OAׯ_?JĄ|É÷ďiӧϰZШ•kŻýŁľ%ÎwtV”?Ľq~)íQ^œţ…öŸ˙(t5$XÄßG‚Čč* ¤š”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ $X”@‚@ = ¨˖-ł§Ÿ~Ć>řŕCkiiąŐV[Íśß~[kjj2ÝW2™´W_}Í^ýu[´hą=ĘśŢz+9r¤@gňŻÝa3fĚ´QŁFÚWżşˇ:,  3gδ˝öÚ7öž††ë×ŻŻ­˛ĘXŰpĂ ‚Çía&ŹiÝ͜9sl÷ÝS …uÖYÇŽťîël.˝ôˇvóÍ˙p×/źđ<ŰqÇ ]ˁjüqُżćšŤlýő׳Žćĺ—_ąűďĐ^zéeWžŠCsčĐĄśÁëŰWž˛›mľŐ–Ö–Ţ~ű;í´ŸÚçŸOÉÜŚ˛ôžűî"Áč`Y>̛7ĎN=őtˇa\p. č.¸ŕbDÓťwďŕ\bkŽš†í°ĂöśŰn_vˇŐ›_ýęRťőÖŰŇ×/´íśŰÖşł‰ßł;î¸Ë•KŸţšKúČ/^ěnS&ňťďžgż˙ýomذa ţ|ĺ+_ś>}Š˘6l¨uJ;é¤S\cÜ[}őŐmüřŐ\ƒҤí“O>qˇ˙ç?ĎŘÉ'Ÿ”a—ť™%j銧žÎ$WhTÜEü]ŮŠź›ož5ä%Áh{őP>̚5Ëu:‹FƒkŮf›mjóçϡ~ýúĐů6ƒ:cfϞc“'îfAYłfŰi§a'œpŹ|đAÖ(ÁâškŽuוpĐY,ô>Ž9ć—<ďőčŃĂu (šěóĎ'ۜ9sÝíú>=ö;çœ_ŘN;íh@gôŕƒgŽk69Ĺ8ę-Áâż˙}6“€­Ů{QRćôéÓmĈ´ĽőÖ[ĎVZi´ťžbŠמýôÓOÝoťźóÎ;Aťőűöë__lm´ĄŢsĎ˝ŕţŞÝ´É&}ěC=äꅪsŁDŒÎŕÉ'Ÿ˛ťîşŰ]×{'Á@gE‚ԈFc}ö/ňnWçŕ}÷ÝoW\ńw] ?ýé™v啿ëvSÁ~ptˇjŕ)Hę;O‡ lçŸn^đç駟qÓT.\¸Č=VŁŐ5Ň –Ô)á}ík_͌ňéŐŤ—čőP>h–%žŮf›Ř6Űl펓¨ŠÎęg?;=6Á@#ĹŻžúöĚ3Ďş˙ć7żłńăÇۖ[na¨šMÇ'W¨“ă;ßů–pŔţ9ł>˙ü öťß]é:ŐÔŮöóŸŸm×]7Îƍ[̀ÎDż˝<ňˆťŽ˛HÉQ˙üçíni<^{íľŹ<üpj[ůáżďf˜Q‚¨n?䐃 hKçœóóźŘŽż˙üçiűíoŻp‰ČŠjĚżýí:>|¸˘ú‚hfŠB38Ŕ%Í;ĎSŖ*Qňűc=ćŽ4Đ=Đśj;ôGë‰îż˙×íüCPiN´ôĐўxâ‰ĚőN8>vd:4O>ůǹϊ•ĺËWdŽłŒPęĄ|ĐÔߞ_.čŠÖ]wˇFśŸÖ^›żúŐĽŽŁOÉd=–*ߔ\ĄŃČĹ­łhé˘?üáwnŚш˙_˙úR:›W_}ÍŚM›îŽ+ŃkŤ­˛É^JŔŹZbÉĎrľćškÚWž˛[f­x؀Ž cpűíˇł?ýé*ˇÜĽhF‹?üáČźyólâĉîzą%ˇÚjËĚu Ü+Feá‚ Ýu’s }0ƒ´“5ÖXÝ~řĂŘE]âţ}ÓM˙°=÷Ü=öąšű_˙ş3č¤řˇŐÝÜÜlcĆŹä*×ßřĆ×môčQ9ż˙ţíç?˙Ľťžűîť×ĎĚŰć~tœ˝řâKîúĎ~öӟѼšjű+_ŮËq•ňŔ÷¸Š¸ç̙lso÷MgŹY:4ĺćßţöw7rE#V5˙^{ínt`Ť§Wśőƒ>äÖŠT–˙üů läȑśţú_°řFÉőß{ď}ťíśŰíĽ—^śŠS§Zccƒ5ڍ´9řŕlěŘąŸ›áň¨Ý~űżěĂ? ĄKmľŐVłüFÍGéŁk ŸŰnťľ]|ń…vóÍ˙ÎßťÜR_üâúnśš0Ť:˙_{íuwŹöîÝ+(Ö°ÝvŰՍh-6cƒ:[žyćżnôŘűďঠը˝ÎWżşw°ŰXĽŚL™–šžÖZ >n§v::Ou׋ur>űěsn˙´Ň̙3mčĐ!6~ü8×a¤á2BŰď˙‡yŰ8ďź ÝETŚizâhÓV[mçţjű÷Ţ{—ťţoěŚd•[o˝É•Ma*ťţď˙Žq×5ŇčöŰoÉ{íË.ť<ř~RëÄk6“oűˆœű5rDëŽ˙ďo¸iÜ čďĘg}˙Ĺ:`Ŕ€źmރěÖ[os×˙üçkÜËW]uľ+Ż4"EK*„§U°XMńŠ÷Ł@‰F;Šłć ƒpż'@{¨eůPéďô6ŰěwŢŤžŁ‹Œ9ÂîźóöœűUćÜzë?ݒCŠúS‹+śŰnw~Úu–wBפßȓN:ލjÔŞëwG5QŐÔ ô\Ő}ďż˙~{űíwÜ(Ç~ýúşúˆ–JŰ{bs´Ń*Ąv~c5RWďCËů(ů ú;Żßb˙îŰa­mrČᎯzԓO>ęž{őŐ×Ř /źčÚ+ŁFr‡vpŤf*űűßoČ\˙ć7ľ-śŘźŕcľLf*Ń>éóĐ4ŕ'žg&Ź™ˇżžŁzăŸ˙üW×^SYŚYzToúöˇˇÁƒ[šŽ;î„Ě´ăgžyFÁöŚ?T‡Ő_}×wßý/2dˆ^xy-ˇÜÜ6ÜpPâăĂ?lÇó5_2°RęPôË ęüV™łŢz_°×_˙_Pś˝íʁbqQyřÄOşúĂ|ŕʋUW]5hWěçÚ/7ÜpŁ]~ůďÝcU^…—…őŞŠťëT;AąŸÔň˛KÜčs•ĺ_˙ú~E;_Qßt<ęˇŕˆ#žăbz<đ ;oâĘôJűˆvl °ÚzÔóĎż˜içŤOh{#FhÉŁn9F%fŒ˘}ńśŢzëœ2ź?œÄŻnqƒőöéÓd+Żźr&6Ľă"ęŃGˇÓO?Ă]?őԓmß}÷q˙ůĎeŘ$w<(áíŕƒ´vŘ>çšÇ{ź{ďa?ü᱙ë7ß|Cđ=ŹťŻŞĎ]ý î\´hą;÷Řc7ˇœ^ĽuV¨, Šâyĺ•Wš†ĂťďžëŚ˝Ž&K¨Ň¨ĘŞ_GÔ{ď˝÷Üĺ–[nuŁ]wÝ%sßÖ[oé*ąŞ űT˜. 2x/˝ôR^ŁA_Áß|óM]Ă*JBq}’Hxß4ą:Výë_UÜŔúüó)vĘ)˙Ďm'L,]TY˙ć7sS~Ćműşëţę¨ŃŽHtšóÎť\€ąP0äĚ3îašÖ÷ěłĎuÁN \^ř+ťăŽ; ŢŻ ÄďUfş{Ń1¨€….ˇŢz{ĐAlŕ_SŏžôfΜe?ţ¤ťě˛ËN.¸Rɲƒe^|ńE— G~TmퟦÎ~čĄGrnW9§‹Śxâ)Áă&ĺÜ>yňä ,›t€ÜăĘB•‰@[ŤUůPÍďtšž{îyWň#ˇ<ÓĺśŰţ”Qż,ÄꁒđÔąç;ôTG&XTS'Đsň“˙Ô۟Ϲ]jč˘Ńé—\r‘;ˇËĄß¨OüqŚŁSwíł)+Qm›ŔS‡ÁŃG˙Ŕľš˘ŰP’äœ[QY0{ölWOľ‘?źôo°:öŘcwWöČŁ>–“`áŠ\|ó͡‚Nˇă3ŸŸ¨> „ĎÇÜ̈́8bÄ+Ç{ě‘I°xôŃG &X¨cZť˘ś$ÉÓqŠcOz÷îíőwŁ6pcšŮBráᎠDo›mśJ˙Ý:űPYvä‘ß-ř|Ĺ7Ô~‰Î.ŞzĂůç_düŠ Z<ÁКşťb :÷Uö…)aNĺť.‡vhĐ)ůCCç¤äÍţ˘Îq%'ŠMźÇ_ÉyLk~űˆv\ °ő(ż<ˆî_ýő ž–>˙íśŰÎ%‚čřyčĄ‡Ý ÉQsçÎÍ,1ˇŇJ+•ľ,™’Ç´¤Yř3\źxą‹mčعᆛƒ¸Ĺ…EÄ´gő‹ź˙⏴†b<—^úۜŰtě\~ů{öß˙>‹—vxÂ€î‰ hGĘŞŐ,žňůĆoć$X(÷„~ěÖëe+k$†ž÷ňË/ťÓŞĚk­seGo˝u*ˆ Ń˘~¤†2›ľ.ŞF]x)Ż–×{á…řNŰO?ě‚q뎝nĐPŮĹlľ-ÜýďŸsŁ/<đ+—‰ĘXV`B4ŠkçwvŁ6Ţ˙}÷zŞđ˙ýďםuUôŁä<˙ž{îľ?üáęĚż5ŠvÓM7q•ku°jßÔQŕD™đŃÎTUŇĂ +5T'L˜ŕ\TRĂm­ľęc}YÔ7żO?ý_w ożýöA z°ťx˙řÇ-vĹp×uî|éK;ťĆŞ‚˙ @‚ŽůN8Ůţň—?š–°pGŠśťŰnťŮȑÃsgŞ=řŕƒî˜Ővü<묟Yš4ŞŔt>( ÷­o^v§JÜţéýí˛ËNnôĂÔŠÓ\§‚ÎudüăŸŘUWýޝŁcÇŽâFőČľ×ţ%ĚŘ`ƒ/ÚžűŚ:kľ-śŘ’ɖ ŕq^ćőüózőꝹMUŸ`Ą˛ék_Ű7gU&„é1]â)0áƒ<îšŕ‚‹2ÉzęL^sÍŐmá…Ap÷1ˇ&ť‚ͧŸţł ńׂ üß˙ţJ7âBAŹľ×^Ç%Ű >Ěݗ-SAV­w­2M彎/}žú}P D#ŸÂű´…Z”­ý>ăŒÓÝy˙Ę+ŻŮ]wݝyž?÷›š˛ű óăÄOvA>ŃHۍ7ŢŘŐô~ś˜SO=Ýţô§Ť‹&Aő@É >ÁB텨jęJôôçőˆĂÝoĽÚ 3gΰŰnű—ŤčœŃă~ü㬍t=ţřť€ź¨3SIĺâçőűxŐUŮŠŃýyŹNŻÚ6§ßɟüä´ŕołrČÁně… ÜYľ•ô:ş˙Ć˙VöLjƒůäŘÍ6Ű$ř]îWÖóTŢů‹pGWtń‹sÜR’‡rűNŢ{ď—°Ť˛QIŞ—\riP9Żěןč˘>Ž“Dßó‚ b×vä‘lgˆ’2€0uţůszÓMSɲÝvŰfFŤą#,t.Ťí%:Ô~°ô>úňŚT‚Ĺ•W^“\Ą'ëĐČţÇ{Ěu@Ć-އÖÖÝUڜvÚĎ2Ď]{íľÝŒC† u#ę5°FíDŘVýhçw2tNúMW‚…č÷$œ`ŃÚß>b€ŹE=J‰á˘¤ľ¸ÄOĺ‡ŢŸ,äŢ{ˆM°xřáG2qd•ţz!úÎ~űŰ+2˙VŰIßą<őÔSŽ\Ň÷ó˙÷Ł  úkÁ$Ďűî{Đ 4Ń>*qUą‘G}ÂĹFDI0Jzó3!*if÷Ýżbçž{A&ąC‰?ţˇdذüŮőyj_5K›ŽÓ=zşă[3ţˆ~“RÚ ĐÎ4íœ7yr63Z luúаŚ9;î¸ĺtŇŠŻŠĽ{ţůî›2ÁU4}ŕNŠpăĘw*ŞĂV#•¨ÓˆŠpP3Üńč7˘4ë†2Ŕń‹ł2űőoěoţó_2AŒ;˘Ć•žaĽ Če—]’3 F‹ŠÓDű­ŕ‚^?ů ŒŚë×ԓŠĎ(Űů˛÷Ţ{fnŘ 'a„ď÷4¨:~ŐŠ "Š ńTž,Œ&Xźřâ˙”mśÉ™4ç[o˝ăŽëűťęŞ+sޟóš]ďMŁ×4bWűGÁę‹/žŔŁ´.ݞîˇß×ě”SNĘů P AŁÜ,ťâŠ+ƒňn—Ša€JÔ˘|híď´u­™h|‚…Ś@Ž;÷Ď9ç|ˇ ÂŞ3YóžűÝogęO*.żüwAz‰őLÇ˝™IYmŕŢ{ďuŐI˘„#MÇíé7ń;ß9ĘŐÍUď×ë¨ßғNú‰{-Q™îĚôżóŞůßxý>ƝÇŐś <íóŒ3‚ßÔ+‚Ël‰öM‰)ępŐ6.żü ;ďźsŹţýɸqĺ'h…Gú%̢4ëÎСŽ¤żä|*+ŐĽz‰<ľ„d9ËŠ^ Ž}÷ę`RGUt´t¸cZKmżýś„…G#‡ëŹJźôو•€pňÉ'ílKšŠÇw kKŠˇ¤ŐĄę—Yzë­ˇƒŽĂuňžŻűnźń&w]ĺœf Ÿ+ęÔ=2ł×ÄŠŚîŽĺ TΊ:sŻšć9Ÿĺ.ťě”ÇGşŰ^}őu,:ąpl.”j~űˆvL °Úz”îÓw!Ľ–RűF‰_ŠA̙3×%3Ä-}NÓçĄ÷^ˆ–Qҗhßôî˛ËN™ű‡Ö Şk*é¤X’§öGĺ^8éăĐCą˙ř—|Ł÷×]÷dMÔ~”p˝ę„Ĺ’őfϞăŽÍâ—cŐç˘%e•l#wŢy :sç@; hOc­Lv?rzܸqyÉ˘ŠŞ:pE‘ZcÜ gœGGiű+łZŁ;$Üů¨€FIˆ÷…˛“ľ?'œp\Ţ~ibŇeœ+˜Wîťď>w]5Ú˘Ó Âú)ĺT9żăŽťrî×r=t_¸*§aĺií@/:m§Źž3U‘čô˝vÖYg°ž_7łß~¸ľÁ ]˘Óz:N˜‹[§Rk¤ŞcOŽ9ć‡9ɢ€ŕЧž’™Ć[#´ô„čÜűĹ/~–ˇÄ†ÖřU™á)P.˝öŻ}ąKęňI3Ô žŕ‚‹íë_?Đ?ü;nT@ĄsűöŰoĎ\?á„ăóÖÍT™rć™? =žđ2*ŐĐ秙!D‰ š"ÜÓ4ĆÚ}†‡šj|G“0üT˛íś[gŽëóÖHW­OMm3źl“MGĺp\r…ĘCŹQǚ‚ѲVźP AA  -Ő˘|¨ćwşŞ?i*oQÇH8šÂSýI#CEçFÜőLĺżFrŠ~ÂçW5umÇ/QĽ‘€Ń:żf:¸ęŞ+ěŃGĚĚ6Uˆ‚Ű?ýéĎěÍ7Sɋę¤×Ň ­Q‹6A˜ÖP'Wˆ°N:é„ĚvՎ /ÉQL¸ÍVjš€0%DčuE#â ŃÚŃďQďW#JEďWąĺŇčPO˄DiäŽď˜ţҗžTŃŇrčúTN<ńD*‰KÇo¸ŹÄruźijöŽňĐCeŽď¸ăŽ9÷)9ÁS›?ŽÚg~ć+Ő˘‰HęČS, P9XmÝ=\Ymľąy‰*j/ŢzëMöđĂ÷íŤc Wx ŚđďIľż}ÄŰ?X‹z”Ÿ˝B6ßźřrešKű˛ëŽŮ÷¤šÂ”ˆŤö¨,*5ĐFÉ~‰0ÍĘšË.;ĺÜŻďEq-_U’ç̙3cˇĽY{˘3jh<ň{™żýöŰV-Í|ć“+ükœxâq™‡:–Ë= –H°€vć+óânňď?•šž÷Ţ{lČőŤŮ5Î5u›§‘šžN45jC4ýœ_ß/ܸʝpk+DSő6,ďvUŔǎÍv8jârh?}ăD˘c̎}Ü>ű읹~Ϟdš1Jl­5éiŠÜ°pĂ&şĽ§Ją5OŁ &üůj)ö1š6ö‹_\ß]׺Ą>ŻĆݟŠWÇšŽÉ8šĺ䕮yŽç)p÷ĎţĂůuĚ‡Ë u^j´ÚÁ3o—G|˘ K\CôŢü >jűQľŚ)(˝_Ěšü>Žžúę™Ç(Q-<˘Ô˘ôyh¤H”:­Ć—wťĘ­ŸîëD)4ł…>WpS˛†ď̎Úa‡l¨ŇďhjĘŻľżÓĺןŠQţÜQýH#Jz^ۡŞ­¨ÎîG¸jć­ /ü•MŸ>=çšJ (§Ăýüó/ĘLyŽrA# [ťţu­Ú^Ą‘ŢšRÝ'bŞ“Gɗĺ(Ô~Ť•/~1ž­ąúęل\ż\C94"Ö/?ć— /âg źgžůŻ[šB” mßěşkśŽ˙ŕƒYGв~Ď=—JŒVya„Ÿuź‡ËSď™g˛É!~YŁ(ÍBW‘jëîăǏ˔™ZŇI3üE“žFŐęrő#üVío1ŔöÖ˘ĺuhćĎčŔ›(˙j†OďĚ9ŚÂłWř÷T蘓§žúOćş_–5JŸď.ť¤ĘQ•Ÿú]ˆă—fŠ /Ǩä˛j(ą/:c‡(™%|{šÇ ÔK„@; W.}&šL™2%sݏ ‰łŢz놞35çž­ˇŢÚîźó.7uÜ|hkŹąşkÄűił7Üp7˘[#'+5rźBk/Jąő†űôiĘ\÷#AJ)÷=Ť2jÔH›:uš[_Rۏf”kš;5&N|ߍ×c5qxíÁh#Ck$Š>›¸)†=­ÇHGf÷Ą@sßž…őUW{ťŚß,ÄOŠcw§vľrhT“˛ôŐ`÷甦ŞÔ,ĽĚž=ËZCÓ[j´ˆ. F¨GAIňT§ŽFGüIöÇ?ţ!32TÓpű ĽFż›ńĺ _X'3ťƒŚÓ-ľ´@kä&XźäŚ0_Îiší{x™Qô>üŕ›l˛QÁĽ7´žňóĎ?oďż˙AđřO]9Łr)\ž‰gŻŰ;övŒˆ–aĐĽ”YłfĐ^ZS>„ľćwşásç¸ăN,ë9ľÔ3ýŽúNý^ůŽťZÔ ~řĂďŰO~ršťŽŮ04UśfĎS\m͚יöË_žăFŻ{çwvfakÔ˛M …ęj˛ĆkdÖ^×o9´Œ†7sfů|•5ž\ źŒ*ÔĆęŰ7[in.žžz˜:dwŰm7ˇ<’IÂ˄( ÔŻŻzXĄÎt_=ôpćz\â´f=Ńôň:śulŠ37nżśôŘcgĘÂmśŮ*ďőľ$ˆ:†U7QYĄv@4yzúôi™ë돳vÁ×Zgub— ¨śîŽÄm-ŤpÓM7ť÷ňŤ_]jżůÍďÜžl°ÁŽc\űĚr€_¸ă7ü{R‹ß>b€íŹŚĽýńƒ:t~—›´ŠrAő͢8ŠDýŔ ÍĆăßÓ{”Nšô߁ę qm6OąçŰo˙—ťî—BŠ*\ɖɕÔ_â(9śđůTî1ľD‚´łđÔńjô{…áE§ˆ S–ާFT˜2ĎŐ¸ÜVă꥗RŁI5j[SjD“ÖJT#E#ˇŐąčGœj]żRÓÉŐŇÜšó2×Ăă8 t &œç͛—™fQ ¨‹/žÄ ‹ŽLQƒASÖůŠŁ|`XëbÂáDt}Gő=—%_Kác˝\~dGôÁâ‰'žĚLŁÍěˆRÂdxŇwޙhřĂŐyó–zź–˘Ëk´ľĚ&ÚG%WxZ š`áËSĹŠ6×2qjQw×rNZBöúëopĺŞÎMľ9tŃmę¤<âˆoş 3Yt^š1ŔěďI-~űˆś °šzÔťďN̔=[lQ|y¨Ż~uOťě˛ËÝuÍzŁ‹‰ßËĚČšŮf›ŘčŃŁJnÇŞ+WŠĹž)$X@;R&uxŇđ´sᤊbÓË/\˜]łŃ݉çŠá¤ŽC5ĚŐ`҈ˆW^y%sŸ¨ń¤†ŒFĹ)#[•fßŕŰzë­ÚľáŢ˙đZ”q.LâÓţůĎJĘÇ˙ăLăIٰÔŘŃ{\yĺ•Ü´›9öoťMK4ÝŽ:_őÝšÖӏ ZK真Úů†ţVÖsVY%ˆ— ZbăüóĎ)ůÜZŸÇ fœ}ö/lソćƒ/žřrfIř<.uŽřóX˘ĺW-i$›!<Ј?âWŸËŚ›n⣀†,üȔđ•h‚…‚ݞB´Üɖ[náŚeU‡‰Śž÷Ţűěźó.´Ö oľěě_ň9í=ZˆSŹ|¨öwşá2RűĄŔr)Æ 5 ž…§ĂöˇI­ę:ľî¸feŇTÚęĚÓŇ93gÎršnZ1—_~YÁѕ_řÂÜşÚzźŚśW`§v´Ö¨śMĽŽ˜B#çÎÍśłŠ%ľ‡ŠÍŚĎA(*ăĘąďgʐđ÷ŘTGńŁ]5c…ڐiúČ#fÓޝ⨚‘Â×wĺž{î-ůœ|°]%Í<^ŢG3I”š=âńǡŸüäÇ.Vâiô˝â&K—.uĺXĄö“OzŞEÝ]Żů­on‡rk‹(†óúëŻŰoźĺĘ]”<˘úÔ÷ž÷Cç^Î.ü[P‹ß>b€lm=J3az›mś™Uâ+_ŮÍͤýöKv<ýô3™ű÷ÜsϲśŁĎ@űŠÜâe_áŘ3 … hGš>Î7"Ö[o˝œőLGĘŽ=¨`ĺ&›lťˇŢz's=šŹťFekÚn5œ4’ôíˇSßjŤ-Ü_Už5zăąÇžózNăl›m O Ř4âŰÓ{.DŁcýr(ZOŘgškŠCß°Rööo{iNĐDŚM›^pťĂ† ĎtzŤaTh}U˙­Ľó[ǚ×#GŽČ PŠÖUŐyŤĆŻŚßŻgY-Žźň*w]ÓYţŕG|ŹĘ5ĆčÓžhĚőšŢÖŠ5Ňß|3{ž—3ş˘ľ” ń—ż¤Y^}őUÜ^|™ˇŐV[eĆnşK‚Ńg!氊.]r÷Ý÷f‚ÍAöĂţ ď5ĂS‘śF¸<Źő÷ ´F-ʇj§ËŽ?i Îtvú˝šíśŰ3˙ŢqÇí3×kY'PDSNűŠń•< €ýgœĺÎeMaýĆoĆŽCŽäŠkŻ˝Úujú‘ăçž{ž­˝öÚ×S/ŚÚ6A”ęîJ„Œóć›ofŽŤSMUŽrPşj_ýýď7ŘŃGYô9Ş[(ůŇŰe—­˝íąGŞ3FűŹďSÉĽJMeŢŢłj ţ=üđÕ>Ş{áŕÁƒ­=(I(:j˝u–Ş#rÇwČÜŚX€FłŤěÓl3…Ęӏ>š{{-ëîšACážC\çěÍ7˙ĂŽ¸âîßűŰőöď|‹Y,:!Í0ŕ—eŇqâărR‹ß>b€lM=ęšçRÇÂŘąc+އ(Š}ťíśąÇŇ ŃĹŕÓq ™ËĄś“Oь…–H*{¤P3€v˘ŠŤď¨RSEŮťűîű  îşëŽĚőmˇÝ6ď~?ňZ†GyĚe˛ŤÁî×瓭śÚŇýýß˙ŢpQƒ%ÜŘkJ"ńŁ8˜ŃŠq4rĆOCn†×oÜe—ňVňÖ[…má)ůîşëžŘÇhôű[o˝e@54u§č8~đÁ‡ >îž{îsÇlxýH# ę˻ロ3Ýt؂ ‚ăřŠĐ”´é˘Ë?˙y{ŃŠ˛Ň˘ŽTżŢŚöĎ'„)L›8 .ř`ČŞŤŽš3Ýv­)ˆáG•ĽŚŮM%Oř˛OU˛‹¨łA#<%nypYŁ‘#qÂÉ#­Ą2ÚOiŽQv ŽĹyď˝÷ݔ 3gÎ4 -Ő˘|¨öwşšąĆ{ŕ >NĎ矁ĺAP×T˙żä’Ë2k]kšëđoWľu%ŞCAIßďż˙AÎ}ę(Řf›­íK_Ú%sŰ'Ÿ|ťýď~÷[7ß<5íž:0öłłZ•pXm› ęîťăëőęŒđÓ˘Ť}´ŃFZš;ěĚuuvŞ<)DI2żü幙ňFłg[ë˝­ěśŰ—3˛šľK=ž~Áň ˆRšńĚ3ŠÎ:•wÜq[pÜřHćúYgýŹč>yäwCĎËmƒů˛T Ő4Ţ/ˇUmÝ]ĺƒĘ#-ĺ­›¨|:üđof’ ”¸Ş™;ĐšhťłĎ>/ŰŰkŻ=s’jőŰG 0W[ĆŤŠGЌP‚‹řdŞJéň43Š˙.•ÄŠeOĘŽ=ú T&=ňHŞŹU=B3ň‘`mL7Ýtł}ô˙eŚ—Üb‹Íl×]wÉyœř ˘Ę|ŕF+ř…§Q >čĄé­ˇßžp‚…ÜvŰ?Ýߍ7ŢĐeË{[n™j\Mš4Ée€‹F1ZgšáőLŁ3Ú'ßYŠĆĆĎ~vΔ¤˘ÎŃkŻý‹ťŽŠýžű~5s_x”Œ}Ś‘cW_ýG+Dë"úéú´ne´cXűŤ}Şt„ Ľ ś?”h×čWgŔŮgŸkßůΑAyńÜűöÝwŸĚőłÎúĽ ö…é˝ôŇßÚšç^`pHf´S)9ĄQ¨˘\'žxJl‚†Flž|ňO2eŇ.ťěRp˙.˝ô˛źmhŐŃŕíˇß>Öá AĄ`Œ¨ŹđA$MąëG DGłnąEęßę<öI->&lđŕěúöZŢýę°(Öą[hżüĺ]ÝuÖšđÂ_ĺuRiů(•I§Ÿ~F\Ů735(ĐjQ>Tű;]u*iK~řQˇöq” §v†{ě śÇ_-š,tŐy?ţÄLr€~Ë4Ľ}t‰Žję˙ůĎÓö­o}×.¸ŕbťä’K]'L˜ęá>X/ĽfŁĐ>ţâgŮĐĄŠßI=÷Ę+ŻÎ{\îď÷´źűŤmDŠ,ˆ.m ŠŽĎ:+[ŻWC%Kmi*pßöŇçvâ‰'ť<˘ĺ‰/~đƒc\ÝŔżˇ˙řDŤľp§RĄŠĚGŽi›nšJ‚}öŮç\’…¨Nîä‰'žĚ$ hTwx¤yœ/ůK™ë<›źĐłgvÂä¸ßÜpŒ Řň¨QZä7ŢČlc‡ś+úř]wÍîăSO=“Č X€wă7g’Ż<ŐĂ/¸ŕ"ˇ„HœjëîW]uýß˙ăfÔűë_˙žˇý?ţŘՓü{ŐL:čt<öŘăöíoé’!Eł0}ô÷rWŤß>b€YmŹŚĽýőĺ‰ON­”8|ëOúsćő÷Úk˛ˇĄ%üw¤D•ýa:~Ď;ď›={Žűˇâ#áٗkĄT˝: –€ŃH3ÚňTąž6m†kŔ„G3L˜0Á­ĽJţ™gţԎ<ňűŽŁďúëop:e”ŤQńŇK/ç4 ţß˙űIl†˛:D42\#´|Ĺ>šmŹéÝƍçöÍ?&ŽSą¸Ô(XUÎ'Ožě"ŤŹ˛’}󛇹űôŁŘÓO?í*Ő jpŔÁŽsFküiDšŚżó›ƒ>ČÖ]wĚś5Ía˙ţýܨů‡zÄMMŞĆĽ–_xď˝ěŢ{ď-¸Ś˘h$Ů>ű|ŐuĆč5N;í§AĂss[gulîÜyö裏şmkԙo„­Ą%'ž˙ý#íňËď‚ŕGő7巎ç+š]§ýÓOgnßţöá9Ďß}÷݂cüĄ A˙Œ˝óÎ;ÁšpX0Ü5čT\%8îçşŰľ<‡h}Őý÷ßĎĘuâ‰ÇŮ1Çďű XtĐaśćškşóTë?ü(§SUÁ!?rŐS€Uű÷ä“Oٌ3í°ĂžĺnÓ¨+MŃŠű|‚™:l:č@kľ×ž™iâ”SNsĺ–FބG§yéňŕƒg֗ըúč JÂPG–‚8ŇŻ_ߜŃlžž+%ĘÉĹ˙Ú%mŹż~j[ę\Öë <(3Ýhk{ěƒÎ˙şĎLCšću—]vrA”)SŚš5Žýkčs,4ý9P+ՖŐţN—Cu$՟”ČŞßňóϿȭ{ŹóŁwď^öÁ“\”@~ýëűĺŒڛFłú)uĚŞ\W9`Öq}ęŠ'çŒ>őŞŠ¨MŕŰ j[¨óGËH 2ÔuJh&-Ý'jłÄý&FŠÓOIÇ’{?­N}ux:çÔţP'¤Ţë)§œęśŻ}ń3)TÓ&ˆŇo¤>g˝ÍjĽş—F˜űÎľĄŽ=öGVŠ3Ď<#ŘĎă]‡™Ę@-˘Ž1cƸ™{>˙|˛ű<ŐQôœśXşHĺ°÷ç?˙Ĺuú˜Ť¨ţŕ™čřUů%ęČŰpĂ ík_ۧdęž­řł 7n5[c5\˘şŒĘ_ć¨|ýҗvv#ţŻůяŽłvÚ!ˆŹĺę-?ţ„}öŮgné#żŻQŐÔÝ÷Űo_—ä­ú‰’ľTnŤŒVůôţűçëݙşË~ű}­ęúÚĆgü}†ëČřÝďŽĚ{îjŤ­œűä͞Qˆ~cľ\ˆęűšÍ旿<'řýúsNy dČsÎ9ß]˙÷ż˙ă.ęĐđŐ´ ˘~öłÓƒÇç:?t Sšsá…皆JéwúĘ+/:Ę.ąűďOÍ\Ľ5uŚEé{<ăŒÓ[= x)š\ *óôúŞ_jMőh‚…:Œ/ş¨É՝üČŮ=ö`yäR'eř÷yçw.ůľĺ•LĽçéźW‚†Ę?~œŻ"š5Beƒfëô _űÚž™voŤÜQÂC1á˛3:Ł^!Júö ÚJx/sÚi§şëzާ¨Ą‹§śGSSď‚ ŐÔݕüńӟž´Îw划ăt‰Ň9\ŞĚCÇQ˛ŸU%ŽęŇJVDœZýöĚŢߖ1ŔjęQZE”´UM˛÷Ţ{ďé,<•iĺÖ×<}śË–-wő}Žěđ#ŞÇüęWĹĆ~ŞĽŮţú×ë]ýEIh˙űőîvýŚlˇ]Ű—Pk$X@Q…\ŁĆÔńŚÎš=÷ÜĂ5˘KQŁçڛގŰo×Tm˙ś)S>ˇćć– 8:ÚÝwŔ_/T&şo\9Â8˘”ĽíGd+đ÷˜ZůŢ÷žăŚź÷ŢűÝ´ţʂţěłÉŽq%ʸžîşk‚@ĺnÔŠFĂ*X¨ŠźF‰ďż˙×]Ă4Ž‚0ŤŹ˛˛Ť+ű]ŁĆ4B@ĽßýîˇcG „iż.¸ŕ<ŹQĂOËł,]şĚe÷tĐŽ3FŁÂ€ZřöˇpÉ˙üçż\Ŕ_烴šrQŁ1>řŔ 1žjěs,8ďźsܨWMgůÎ;ÝZź˝ző 6ŤşóţŔżŃŞĆş‚˙*wî˝÷>7íĺ|čFœ(Ů@çĐ:ëŹe; ŠjÔDśŇţię[K'žďÖÖč•ńăǁ€˝ÝˆŽj’4ôꍯtÓ~j„ŘâĹKÜg§Ń/ŃŃĄů +üěá5ě=}V뎝n&(mĽ@ŒF üë_˙rëŽ.Z´ŘMŹŃ{iQŤ$,ˆQy¨ ľ/tĐďɚkŽáŚ:VpŠQlh/ՖŐţN—KŃ7ß|ƒÝqÇ]™ú“FaŠ R‡Ł˝Ěú‚z¤şčđáĂÝhžíˇßޝKqkЇUS'˜0aMťá†żŮmˇÝnO=ő7ӓ~ӔąĆŤy;şŃĽö!ę裏tç¸~Ÿužků’+Žřmćwď˝÷˛>}úŻ}“˝÷Ţ{ŽCVՃücŞi„Šýsíľ´ŤŽúŁŤ—h”§~łUvŘÁ­JŽđ”ĐůóŸŸé:'´všęsZ^ÉĽšÍJŁcU7Ř}÷ŻäL“^kjGýţ÷ż :vŽpKĄŠN4oŢÜźÇéXŃL\~ •‰Ĺę;螴œ_.OuăRËyę$ó›:Ć|‚…\pÁšn‰˘^xÁŐe•ŕŁóDç…ęçž{śKFP[CC"h7Ě(úZzœŸGu¸ĺRă¨LU'˘¨ƒSË*ů™2ÔŃ{Ůeżʛűƒ˛ôn×ůŹX€b8űď˙5—rÍ5×Ý~5uwÍH¤˛íŚ›nqm ľ •ˆďë.*GŠ ŹA}Q'wßž}‚řÚ÷[Ľ:p9Ivľří#Ř~1ŔÖÔŁ´\OÔŇ jŒ?ÎÍ6ńć›oŚň•ż}š‚ďfĺ lßĹŐŰTFś}W]uEP6˙ŃÍf˘2Sߥf€Î¤ÜôśD™÷%Ęř›(đoiýő—Ćôm‘‹îSÄ aٲĺOş•C9܍„•G}Đ% ĺĆo˛ßüćwîşfäRŇ(€ň(9ÏĿč˘óm‡ś7¨„’ŘN;í wýwżű\ÝYŻ^=ˇ ţh:áyéżÍ‘K2ýˇ%tI†ţF/VŕßĹţFŻGťĎa^a  zîšěÔç™ kƔЙĺs℗Ҭ˘P)?ӏfnĐňI€Ž  ‹ůđĂI™uß×\sM[wÝu €šéđĎ>ű\Ű˙íœsÎsKsDiÚ|-;&ÇkÓ%t]Ď?ŸúŢpĂ/śéňa€öĹâÍ@đůçŸŰ˙ř'ëÓ§Ż=ňČ#ÖÜÜěn˙ć75)MMMnv=ôˆ˝óÎDŰ}÷ÝÜ,óćÍľW_}ÍüIK&SłCűŰGXϞ= *uË-7 ë!Áčžzę?vď˝÷çÜöĽ/íě:¤ 8Đ~ó›Kí'?9Í>ýôSˇČŐW_“÷¸††;âˆoÚ7žąż @0uęt0 ż-]şĚV^yeŰ{ď=ěŕƒ2šV_}ź]ý_ěžűîˇÇ{Ü&N|Ďć͛oMM˝mĈ‘śéŚ›Řמś­šć„%jđ¸DĚőbţí/ ĄżţҘž­1rŃ}őwٲĺO¨+˝zőÜ&řÓ\ćĽ˙6G.ÉôߖĐ%ú˝Xű˝Uě>§ÁP %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`PBë">}˙Y÷ˇĽy…€ŽŐĐŘeRf°(ĄË¤‹Œ]yLęJ˛Ů@K4ZW %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %`P %ô0t˜d2{{"‘°Ö>żÜç€úDź€úD‚u ÚF3:/}Džž˙rŸ蚈t_Ä ¨O$XPhôvoŐM]ń‚îxő‡ €:@Đ D/ žt™‹L'ٜ€:Dcí‰Ń-Đ9/@{"^č]ë÷‡,hŰS‡ t}Ä P)ât,,č@K@ń€úÄ!Ô'¨%Fł@×@źľDźĐ1X"¤.‘`č,‰H 5p ¤ bA&Đů/@-/Ô,@Ԙ%ŻPpŁňŰł×9ź ó!^€0âÔ§Ž“`Á€:nÄś´´¤oK<éŚJńÇEôqqˇG7E}:â#^čjşZŚË$XřŠg2Ůb´…jzŽoĆ7ŁFŻĄBŕ¤ű¨tşÎčmá–óx@Ű!^€Z!^芺Z]ŚË$XřŠ@=ňżOš“D&xâ'ţv J÷‘)$ŠtZP@}!^€Rˆ:żŽőűÓuf°HĎ\‘la @ۨ6x „¤‚$ŮŰĂÁ%ÝKü¨’řűă‚%Ľ‚-€śCźm…x +H40ƒE]ja @KT‘e™°DN $:ĹgtJĐp٘ŕI×RzäI|@¤X $i…GŻÚńÔń@W•čb?@]'Á˘…,ő)<ľ§ş$’‰LĐ$MŐl€Dżoáűžt^ĹŚéôŁ“ =ÎLÂ’čfŠPÔâ‎.aĚ`Q—ZZŇ,u¨ĄĄÁý OďŠ[âFœäŢŚżÉ÷YÎ6Ńšä8Š:qKĆ>6~{L 3 ^€(‎&a ֕t‹ćTbE €:“’ȝöÓ˙bůŞEáé=ýó˛óۋnő-?ȑ˝=oÔIdôIřvŐwŠL PçˆŔ#^čĘ’]Ť˙žË$XŹXąÂýmiYaԍHŃEq čČ<2׳SFů5W ĹEšÔ‡B#Aň‚ %~äIxÔIţ%DJąŕ  ~/čˆşł†Ž5E×I°Xî,šI°ÔŸTŔ$ IN˛‘ĆƆĐíŠuW8ńĎó|Đ$u=˙5štŹJƒ%âgŢrŁL’-9Á?ęÄIr˙˝=îő˜@ç@ź ë#^čî­Ké:3X,O%V47/7ę “Ć &™ŇŇҐ¨´äSüsă'ŮŠ?=‚&ŁÜEřa>(âŽ[~PdyPˇ GZZ˛Wp%oY´ČśőxA×FźłĆŽľBHכÁ˘y3XęFŁ(č‘lLZC2Ž$B#R|ăVA‘TĐ$źnŞn ˙;*$!hŇńâŚăL&­čzŠŃQ(şžúw:bĄŕIs‹577Çžž-@ý#^Đ˝/tG-ÉŽU˙č2 ‹—,sWŹ` @}ń 7ĺgđżĆĆF7ͧ›ę3h7öhLÝÖĐh=üőô4 nԁFŁ´´dFĽř`ˆ•Bp¤žDƒŠDÉÜ@HŇOőiĄŔH2‚¤!îoKsęúŠćŕž[Ѽ–-S"i2¸ŢlЙŠüóĺ]›é€ŸÇb/YĎąlj]S˝s]óřŇť˘‡ íŁžŽ4~/jOí@żDˆ>a%W4öh°Ţ˝zXŻž=*ŽˆŸĹ"‹ČކŽGźJSů—šÍÉĽş†=şÖ]&ÁbĂ-v3ęQ´Ý4„“AăwÁź™öŮÇďç¤-]˛Řz÷îÜ×ĂU6’É.h’y~DIĎS°Ĺ'l¤$Ůŕ.ŁR:FÜč“čż}pËFümúˇ‚"~:Ď+V¸`ˆ‚$šňӍÁżÍ†ZŐz÷|Ó JŠ1čLâŚ!^ž|š˝öú;öż7&ľ_ˆ3:uv{i(űiN4X=ŞýçSŸďł;Ş‹)ŔíDuwô–qN¤Rţç뒭;˘n^Ďíu&ť[˙Éě~Âşj×~Ąó4iŮ#,÷ł(šÁrd­ý<ëë[HVpjĎŁËiԏT‡ƒÚƒsçÎľ [ixŁ;Ԛ‚8Á€ž˝ŹwSŻŕëí™nSŽřßőhĚŔ'rřç/hÄ  ¸Bń‚=z؈Ă ¨W]&Á€z \46?żÁeđđ•ƒËJśpţ,›ňé{śbŮâ ńźÔZ\Đ$i={öH@Z2 dzÊÜĘg6`~=&'7ˆb9#Rô?}ż˘`Ɋ͙Q)˂Ä ­ĽjAgcc:rUkěŮĎôˇdśKć6€Ž"éĘŔ 4´Ú•‰DÇtę™ň2ŮFżËńż÷•˝VĽĹůŻŐŸu˛CŚ´N}6ąNÔ7’EÉvÓńuŇÂő§hRTśC˛¸DCĺcG|Őźf[ďŻëL,xoÂJoë*3 K„*{Œ_˛źíĽ¨}.ˇË˙ [qا~‹•ßWr_\ÝĄu? msl'ŞČg =7¸2hĐ 7KĹ {éĹÁ{cëŹ6Ŕě\úYŻŢ˝ŇmË9mĹ Z´„ˆ5|$VÔâPĘ3Ô7,čP ëۨ›°‰ÍšţŠMŸ2ɚ/ ‚&Š‘ ~ ĐĚŁ\ĂşPđ—`IÇ‰Ž—šş,ń#SüuMńŠ)=—.YFmĐĐŃÖÔo¸˘÷™Ľ`ĹDĘô{ŘŽ/›ŹƒhĎQŔľ$CçŹ[%ÝBtÉ6üČ*IŹéČĎ0YpâŢ2ßWĹőłŽú ZűşmżżÉĐŁŻL?ߓU´„;M $YY[e›´&­‚™XĘ}\NžcąLŻdë“!%ö;s.'Z1-u˛ĘşDN†ŒKČlN/ńZ:¤Ÿ˝űÉŘgž[šĹF ígÉ>˝][Rń‚0?(#nßRK Ł/ k!Á€:ĐĐŘÆŽëţN›ü-_śŹđcdąÔt‘ŮéMŤ1ƒśćSë¨ú‰żMS|jjOK–/[nÍÉF<|ëÓh:° (_Ǘ›í3-sąŃ‰‰Đc*ÝfkÄwâ ăU´¤@ĹŻä8ëŕžđb°qwůŸ‹mŇ=ޞs-ŐÉlHË&HřP’ŃŇ4´˘•î[ďL’ÉÂżĽ›š˙•,éĽBĘ|bátĽ¸GĽ˙•,ňřjʨôŽ[[l;ó•$WÔP¤J °čis7ÚťÍwđ#‡šőn*đĹĽăž„ágŻ`‹ú@ź€Î :˜nh鐥#VvIS>čĐáǤ.ŠŮ+4öFA“pp$Î6RS~fƒ J˛UËşWšŸM2Żc<áŠäČd VÖÚrąĂá+|O‰řIČyo‘`ŠŰ—ËtĚŚ÷-úݟv˝ŘG”ĚY"$żł2QrżÚOkĂś:~Ý'–ôł¤?ë¤/˙łßlôsŤőǘđu™ÜWÍůgU‡p _Ž—LBĘ9FK>Źš /ç’}Dńý ď{nYŐRŕžÔ1Ł[ ěk#F ąÁCú§ë=]űYˇLŹŮÍš4¸Ěœ9×fΘc‹/5Ÿx•LŸËţŤJýţ'Óßéó!])&\gČü†§‚‚Ë™˘$‘zlćSUý¨1÷鍍=máâ6{Î"ëԉ\(xP*6Ĺ"™wěĺČ ^Đśˆ -´*^Pb–˘ră—nŻUň<ĘT+šXěŘrżůA›{Yzům] ÇÎ5CőŐ#|ý!ú8 N—I°ŕ@TŞÔȍJ*oĽÄ=§Đvt{c^śňŞkŮGďżâ*†ę¤ 'Sä. ’żŸŃŠ@Ńö PânÓÚŞÍ-Ín4JĐ÷g#W4w}@CšĐĽä—Q­=—}ˇ‘äGďKڜŮsěő×_ˇ 7ÜĐ˜ę6M^ě@Ażçž{ŢÖXcu=ztĚă8†Q™đtՙ$‰–ÜN'=FŒsC]’EŻž=b;lÜy“ht ÁSŹoŸŢÖŻ=j˜M2ËŚOŸm -ŠôúfG­7¤;)bgs:ŞÖÔÔŰV[m%—\ŃŤWO—ä‘/™Y´ž{ôčaM˝{X˙~M6xđ[0z‘}ňń4›tôŹhYI˛Hd:—ňßg^wyŤ$ZqOëWZ=&WÄ)8Ň<ŚÎ؞ŻďĺMŠŸîĚ;b’–=Š&ńUůgűĐŰMńÎŢdNwp˘čłkťăq5źśřh*=ú­źżuGy*Ë§Źe7–hÝNXőŸa~S)÷†¤ľ~'÷[Vâ1Ľ’ÖvĺIՔ¤WîA]ŕödą‡$B’š7÷éÝŰV^e¤=8¨żż="Oőmáਠ~›{—ŢÁďt˙ඁú٨ŕw{ňä™6mꏠ˝˝<ăZf#őźÔ@żÔoyCÉÜ㜎ĎdôJ¨ˆN˒ČÖדĄ÷쏾D"Ű)Żvdccűřó96lh?—hڒlÉtŢޡÜăxAű"^€Z+;^L–őcYh°–̝;×^{í5Űxă]ź ”Tźŕ9?~ź3ƀj•ŠŤű$ľn&Ëe™ëĹÚNţžTR[ł{žfĄŒK´?‡ßMxĚ`č–ĘŠĺDŤ°mœZďÔoÂŁweŔŕánä­bEáľ8u=Ž˘W,é'n”Šż,]ş,¨Ŕ'­ągßL0Źłt0Ąm ˛ůłłěÝwßÍťOŽc=ÖM‡\Ȝ9sěOú“}ňÉ'vŘa‡Ůf›m–šĎw"ßpĂ öŘcŮžűîk_ţň—íĎţłÍž=Ű=~ƒ 6ș!G—űîťĎŽťî:Ű~űííÄO,kô PLÜďWBéŢâž}›lÜř•lŘđÁé)°‹wJEőčŃč.ŤŽ6ĘFŒl'~ăó,ˇgHżÁ-™ýĐom¸Ěvű”îŹÖeřˆ!śÎ:ăŹwS/—”QĆťĚyż˝z5ؐĄmŔŔţ6eĘLűđĂĎlńâĹ9ýŒ Éě>Ő'żĘ;ęą ô‡R24>œěf¸ŇěVáśťhűž-žH”΋=’ąW‹ĘΚ‘šŤĄ1÷uuü,KöľEKV؀~ŠAöâ“US3Ĺäv@Ĺ%Ą#/@%Z/8Ćúőď[p›Ĺâ˘2äď˙ť=ţřcśĎ>űÚWžňťöÚk+Š$3Ů˝@ő˘çAjśŸn& ÍVáˇKmĂ˙fű„J]_˛d‰ťôíŰ×%Z´W=:',(ĄĐ ţzNgPŒÚR•°ü祂7ăV˙‚MůôĚ(†p'OęQ˝Ž5ʑ ’äNÝZiěc ŠŃą2oŢ\›5k–M˜0!'Ľ^9ľ$ČJ+° kľ^˝{[5ű“Z7žŃV;Âzön´wßţ8/ɂT˘Aˇ‰Ô_Iڧ]IwĆ?)YÎ1Öůę*ůőď¤Őb˝’öNd/ńŇRćLáw™™Č*yQ]Z"ӕě҄ĺšÇW2Ś:iÍyĎJŚ“ŮâÄľ­âŮËQm°źhrI5Ó }nĺŞćí´ćťIDĘ& #Gą5×ZĹú6őąjhOz46ÚČQCŹGđ;üţÄOmÁ‚ĹÖ‹-é}ÖąË;T҉éäˆRű}†¸ď¨Á,Ô9™Ş—4[ŻžMöΤy6tP?ëՒŰÖ´Č6ŁIŠíęńT#/7nœ555eîKĹ ‹ÖőŠĹ źÝwßÝľQvŘa‡Ěăç͛W4^đÉǟšxAƒxÁ?‰ f˘ő ‡JŠPL+îţBŰ—ˇţ9:žEŰÓíJ˛P} X7ş/,¨Ż„ŠŇĽ‹:b|#ÄbüĹ-÷ZÖ?ŚĐ6ýhňÔc’6hČ(űčý׃ ]Ěˆ_ą‹vü¤Ž(Š7Šu{#—Ô|ŻślŮrëŐ4€P bĺ4řҡtŇIAGóš9Sš°hŃ"7ĄĎ˛WĂR-G.sôCôˇTASjäßĘ+ŻlßýîwÝżgΜ™y}5T,XŕĘ:-ĎЧOwű€Üh˙ZzýÔ(ŤÔőԈ~ #”/'y0}]Çé ~m5VŠIrEXSŸ^6nő1îwsćĚ9Áߖœ×&Gúß^%XŒ3ÜÖX3&šBËDëg›9j¨ŰŸwßůؖä%YÔ3fą(¤ÜŽŰÚÎԐNŽHÍԐ™f>îxJVň˝ĹÜî,5˜Ň‰ő,M&*˙¤ă’-’O@ÓgVj枆ęëdů dDg(¤ľßuÜoCŃÇ'Źp†EÍÎ÷ęľţójß÷ „…#†ŘękŽÔG{×ŕĺÓ$‚íhFŒäš+Űű'Űźósf°Ę<:Qć‰<Ś1ݞo ęĂC÷wu˜ţRutQpá‚%Agč<›3{ž-^şÜšĂŻeé­hęésuţĽn94ˇtH˛!7Ń"2Ť&ęń´V\źŕÔSO-/PÜRíyľëu]ˇŠźkHôHŐ ƒË˛Ľ+lţź…™x–ellL¸xÁQGĺž?cÌLBЊĺ-ś`ţ˘üxA˙Av衇şrOŐ>^ Ĺ… ƒxAĎVÍ@„î§X‚ŚŸšBǘb]ţ6)g†ľd$ĄŇ´ĐżuŽřűŁ3Y €nКĽ4ÔpPEËWśüvü_Ÿ|ᡍF†Ošˆ›Z,:űEö1Ae0ŃTƒ× Ö M eI˛¨…FĄřDšÔz€-î;Î~ŸŒLAüŹ9Ĺ %L\ýővß}÷Ű÷ž÷]7eç-ˇÜb7Ýt“í¸ăŽöƒüŔüT‡˙ţ÷żíĆo´ŠS§Ú:ëŹ<ţ{śúęŤŰ_˙úWťóÎ;íđĂwĎ5PőxműłĎ>sSjÄÉjŤ­f?ţ¸]vŮeîąm´‘[bDŻńüĂ>řŕ;ö؝Ĺ# (%.ąÂ_WÂĎŘŐFŮĐa~ßZţ¸5¸eGĆŽ:ŇýÎΝ;?“dţ=w°čŻöeľq+YSŸ˜ä Ký}.VßĐXđDđÜŃŁ‡şßü‰ď~ě×ňI˛¨ü—¨úěî?ľ|˙šÂ>wśł"}ź~Ö= ‘Űýžˆ= ?҃´ŰúŹ< ĹŃnýž•×N¨`ĄWŇ"o­’DŒ¸t™°„OĘ)¸Áěr3•|/ŽŰ0:{Eäů~ž Ôk”$ŻD2ґżÖECěcăţ]đ5,‘“DŃÖe\[nżĐśŤ>”Ó‚Ńs,îźk>ĎÁƒŘŞŤvłP•>­‹ďœŸé'ó¸ŕ߯ ~[lâ{KmYzđDÎ{Owz˙-ot‰ }úô˛á#ۘ1ĂŹŠWOŸĘ‘yœnkÚӆ `K—ް)ÓfŰÔslń˘ĽnÖJ Í~Ą„e7ŐšŤ'„gjQGPł54öp‰Ë—ݰĆůK›…ľ&öśCź­ŐšxÚë÷ßżkĎďśŰnvë­ˇşxÁN;ídG}´+{4X⊧žrˇO™2%/8ň;.^đˇżýÍÍZyÄG¸Y,¤Ňxču?úč#;ćŘÚČ‘Ä PZ´Žç+öî—‰ĆŘKՍ˘?¨ÂĎbá“7RłNöä7yH°Ŕň3\ÕŚđuUŽ|r…O˘ˆ …˙úŠž˛ż]vxCCÎk……oKm7‘™™"ŐĐNŚgąđËmTe+’$Yt¤b†áJ6ź7śݕ/W₣o˝ő–›ŠSTž((1f̡´Ç;ďźc>ř ›]âp÷)Ŕá+MŞä‡5ÖXÕCŻžúŞÝ}÷Ýn$JœéÓ§ťe@PŃk˝đ îö3Î8#§œŇý›nşŠ=ýôÓśîşëŘśŰnkýú÷7 áßÝđ,M:ćFaŁƒÎ‰6|u8¨ŸYiX8Yę.Ńr8źoýúőłUƎ Îą~š›)s€dKţhďD"Tţť>˛ę(›9sŽM›:;řwz´xŮżéĺĎ&Qťj‚˙=cZG)@ô#“ć.Č>/şä\¨#1çŕË=jňúĽŰPůČI—ů˛ř lčŃEυzîô˅”ęn‹=ϊK&Š=.uގŞSß÷űĆ&WÄ<-Ů6Z2óŸDôÖʡ•ÓżŐ5ëö™.ŢVž™ó)Y|f’đy§ŸI͌6fĽá6hpżtrEƒ•ţÍ)zVXƒÚÖé$ _N¨Î1oţ"űôłĎ][_uW7Q=ŔŹdY 6úŔ}měŘQ6tč€Ô˘bÉâ{Óťw/üî2Ŕ>ţhŠÍłŔľůł3\&ÓŃ_Ľš´X*'ľĹ>}úşňÚÇ|ź Ľ%5"—%EëńTŁ5ń‚íśŰÎŢ~űm/8p ‹Œ5*/H•ëšÉňý÷ßwí{m_ń‚{îšÇŽ<ňČź×ŇýĽă‰œxÁ3Ďůd4™3gŽ+ŤHŮgŸ}ÜĺąÇłëŽťÎ4 /qndjzO­ľŞ1Ţ|óMűőŻmĎ=÷œ›ÖӗAj`N˜0ÁJQ‚Ĺć›oáFаŚjץ …Fi֓ѣGŰŞŤŽš™âşvéđżëŠp={š˝bäČa9‰*Ő1Zô}‡Zđ˙AűŮŔýlŮŇÔoľŰĐo­Î‹=lȐÁÁy4ŔrgŽuVGöSő…™3fآŕœ9b„őí; &)3˝?‰ěűT’Ĺřń+šN–ĽÁ>%­ŇeGĘüdŞů nĐj˝QT(?y7J°(=2?ŻN*žšÚžßqůł$-:´˝Ôűôł> —–~íěˆňŽPň“)ôݖÚjΆVé÷^zÉď†ď.,Ź˝ľZ?^pŕŠxÁ6ŰlkˇŢz‹ýýďĎÄ Ôž›={v&^ Ç§âń‚?Ű'Ÿ|ęf×Kś$3夯ôíŰĎĹ tQźŕ’K. Ĺ RűÓ´Ą&LX+ˆlÄ ž ⛚Y3Rń‚Ö—ă¨í/ČořŮĽóŠSż“ވ”\h.ýé~[SŁ܍ѺŠŢŁ0YËßPĹ ŚL™ę–ÍQ"ԀýůîdH°t.5Œ•¨J'?řŒUUŕŠÍv7#…ż]ŰĎd}LąťwĐ I6äN#‰Ž `ĺÜW`=U’dĐZ{ď˝wd⎍Ńę×WUš˘™)b“&MrÇ×f›mćîóÉ`}űöľaÆšëچ:°ŐP,t,4ȆîĘ+MóŮťwo÷ř Xą50Ńľ|úé§.P§ŃP Ěi ŮńăÇ[­¤˙‰ôŽ“ ‘h°‘Ł†Ű€AMVhęq>žô‘ F”˘cW í&ÁŃw6×ú4ő˛áĂşő†/Y–Ó)čg‘R‘ŚűÖzę9I™C>7š@S•žńĆ.ńHINJDÚyç N…›;JQIýƒNža6éŁ)5ëK´ůé™ű ý ÄšŐ?B]€Ő˝P¨ÇвĘm}hUš\QIżĐżť‚ŞÎČôú ž#Úýˇ‚ ĹĹ6°hŇWŰÖ)*y39,úÉśv/“%î­čí'Ę܏dŢÓrîŞ,'˙ĂRĂÓHeWďŢ=mÄČ!ÖťŠwč÷×˙fvĄ[“~ußŔM6jä0[´`ąľ´ä–Ż>Q"ülżŠŚŢ=lÜjŁlpđűÝľRłPię< Ż5Ž:ĘŢ]źĚ-^šž\%÷XȎ ÷3É)˙}ű3ô;ĐËşzGźíiĎ=÷´#F¸ëZŇ@ńJŠL˜°f/œ‰lžůć™2ÁÇ |űčĐ!ŽýŁt•3Šň°1™šş ˜ŠčšęT÷ńľĎ4ŤNśŹ_ĚĘ+ĂŃYäĆ žÄ ŽŞqź ţwËĎ.wŸŽŮ÷&žoß{ĎĹŻbˇd6ĄBÇîŞcWł 7ÚĐ%§§–\Ěn×/EâăůľřU"ŇóĎżh=ôÍ˜1ĂÖ_}ŰgŸŻÚŘąŤ:,uď7żšÜuv4$3Óe3bäP;ôĐC­ąSćĆ,ůĄĘ”OŽđ ]7ŞŚĄĄäö˘ŰRĐg˝ŕčz„ ZůřYZďÔ'U„-]˛Ô5hŐx\k­ľ\ĐDSpj4Ik-˜żŔlŃ(ŞÉ“'ťŠ•”ĄŔ şMŤéd(Ó_5ţk0‰ŁŔĹčŃC Ţ˙á‡ڝwÝiďžőNY JFZiĽ•ěë_˙ş›m%_ƒ 2Ŕš&Ďt y‚ŕJß~}Üc’yŁşóiăgŸ}Ö~řa[´h‘;o8ůüóĎݨ0%CĹKä ů]y劋ŠGXçvţĺő#%ţÂĺMëUŐ­ŰĽ´EŻŹäô!“Ěë¤ÍéĚůgjôV%Żĺć¨OuʖQ˙Í{vM?›Ę’+ nĽëĺmýJᎠGŸM¸ł¸Ź-dĹ~ś1Ó+ÇÉŢóřœY j#łu˙!dŠŃ˜ś_čXNuD[äÜČF-öŻĽTšŢHĄY%ŞŢ ŰhüśÝ?Kœ[9żE‘7ŢŤwO4¸řŇs•y˝dj&Ÿđ :ÔöÚkŻ‚ŰS䓏§Ř˛+Ź\ŁF u—­á—Mqł` ětŽśO>–Z¤€ě2Hčlˆ ZĹęďJčnˇxÁ‚üx’2ˆt/šń‚ˇÚ<^ŕŸ\WŚjůÜŽżÉ^{íőt‚E얂(5°Â'XqġlŤ­7‹}´Žs œŹĹ,sçÎ bÚmˇÝć–ôŃysë­ˇşóRËöŹˇŢş†Î @ÝťţúëSk 6ôĚŹĎ^̚ƕ`QŠŻ¨5§§fŒKžŻXˆž_.D™äĽŢ€î)vV›ôM÷ÝwŸ 40sßčŃclŰmˇu Ú˙űßnäˆ:pŻšćťńĆƒ†ŮznŞĎÖX°p=ňČ#n‘>řŔ5”7Ůd“Ř€‰¤źüňË64ZożýśÖŻ?ëŞvZffĂ 7 ‚ŻŮlŕţÝÖ ęgM} O+úüóĎۛoźiëÇ÷ŕAŠÎ t´°Ž˙(}´~đÝwß] Á"TєŢó,˛-šŁŞ”đĄűzżÝĽúĂ ŃyŁex”ŘĄYgVYe7“…ÎQMÁŤŰ4b,W"ŻG°_˙>n˝ů9sZe Ą­Ć>­ôśe?˛ĐöË:uöކ¸)×}ý°#ޛ_ň"Ýgl…‡N'ň˙7,;ţU vV—/>ßÚmľ>š"œPáąľe’…;&Ź}…Ół˘ݕŠůüö*yF2/‹'7š˘çLŢĄ”Čť’űřdh餾űwÔ!ÂFčŚę7#Y|™ŤÜd›Üͨ˝<`@ßŕ÷´xřZżď…ö(3Rzějă‹&X¨˘ßßé3ćZ9zöěa+Ż2ŇZ+ű¤ŔŃc†ÚÔiłmŒe™ä ŸĚFç<€bń•‡j{Z˛Ań%W¨-2věXˇHMâ ňă›nş)ń‚nŚ­ă93IĽýň šM"îwńÉ'Ÿ Žľ—l“ŕxÔl,˘DďđžrČ!ĄGŚž;mÚ4ťůŚ[즛n˛­śV;=?öď—ęŞöwXII˙üçívÇwşÄá‡nkŹąş=đŔƒvď˝÷şŘĹĄ‡bťîú%Cý#ÁPˇ|€óňË“‰Ý%J…~‚ťűöícľ¤Š›[Ó,2˝cŇn¸á›2eŠtĐ!ntʍQqă7X˙ţýí{ß;ŇĚr§wôYŻęxaöŠŽ#oşO‚_¨‘Ôz)něm´Ń†nůŽÇÜ-CpŕşŽ[MÓxÝuך2ę?řUŚĹeň>Ě-%ňꍯşrNÉjü…—8ňÖ^{mŰjŤ­ěĹ_tA– 7ڀ€IĄĽ5Ž:ę(P0ŹĐľ4d؀˘÷ëxԝk­ľś 4ČݦĝŰlłMŢă5šJç·Aŕ/+?…`Đ 6ejĐĄąŹ%{_˛Áž<¸ř>ÉŹY3]°D灌ćU獂L (*¸Šewî¸ă¸Ńçůĺ/9s>ĺýf¤{{‡’N°¨TY$íőŰTŕőë”Ř_íěŃwD=/ŰQœ¨0i!ŽăŰWŔ“ń/ăă B‘ńŸC˘Äżsö#~ËfɲFÇ“I†ąÎr´VŻ=Íœś“ľ-÷Z‰9Éřś­“^23&˘IXĽŸîL^nżňŤýńîŽ+])˛Œ\ĽÇ]Ϟ6tx鎿Ÿţô§ąˇ7䌼%ŹwŸŇŁŤ‡Pv‚…›ŤO/KĆLxĄßýéÓ§ť:ęú ôď;ďźÓ ŕęîŃOĽ)¨w śšřó™ŮĎŐh_vvÄ ĐVÂń‚G}4g0—:ž5ŁPź@Iß˙ţ÷­5´q´D‡ŽŰĺĄßól }z—ÜĘżřĹźŰRŽI‹ŚĐčoN”îŠ0°ż•kÄČAďÓ4ŕĎ=÷œëTQ}\us˙ý÷3qŽ<Á>:Ŕ&+ÁÂ:îŰPß*‰(ńAmţŠă 8¨żtđśçžťń‚ÁAź żwüąÖź˘9h#ĹÇ śŮfk[kí5­đXŐ ÇŽşJ/8Ęć/88h[őtƒ9Đ5tDź@ÇŞŽýBu˘Lź ‡Úâţ7?ašmŤdć˘óÄĹ –/ÝžoŤűÁ—­Ą$-iŚ#Ő[Ž:ęH[gľÝ9(ŁF´Ă;ÔĹÖ.žřbťá†]ŹnˇÝžl¨_$X:‘Ú… NĂS:űű}‚EÜÔĎt –<˙ü vöŮgťŰ4őž*KjŔÄuVčş*{ĺ&xč>âŚţŐmŠr —}ú4ĺüťż~îâEG¨Še $ëä+ŽŞŸĹœŢĽž‡RÇŻŸQŚěÇ'͊=DżÉ}ű6Yk$bś¨ ě¨$ÁąŘ šŞ7iĆ MŽß~Ő 4•ž:/żţőŻ[tŸEǐ,¤!¸­%œťF|čÖÚ=^Ž 6Ô]źŃŁGYÉxÁ€ěö•°>4xţĐĐ6Đ5tDźŔ':ĝ…•ůűФîD~zcľK„()äŃGs ÇwŹ[$:Űˀýí+_ů˛[NçôÓOwK`QßH°Ô5U\6ß\#;đ g6a­qvýő×§YƒDfj×P%ĘW‚”ý}ňÉ'ŰŮgŸkŻźňŠ{ĚZk­ĺ˛Çu_x™őŽŰ (ŒúÂwŒZ ţÚŰĉíśŰnskějmRÍ\˘ieŰRűw¤z™R3IÄß_j‰2%Nj˝T7}ňR2ْ3›€ŸŠBŸĄ‚3ŒżšŻÓޟE´¸•ƒĘQĄř$wUŁčíh"\˛úšg˝Ľšăş-ëXn}e§U˝Dz†-bGC´Ł˝ÄăKŢďž§†œÇÇ-ŁcVú;­‡zugŞŰ§vľ@âLÂgU$s’AÜ(č2Ţb9IBÉčă­:ĺ|pţó\‚Eśƒ$u^§ŽŻ2nuťč˘‹Źř떿çö-xR(ůX#ĂűŰßşúýŸ0a‚sĚ1n&ŤŒd×ĎۍvĚşD›!^€Z"^€ŽÔÖń‚zHPÇó[ť/ŠL›6ŐƏÔÖĚl/ú:ź´ÁëťÁžsçÎ3Ô7,uM• M5ߐĐOV˛hŔ(%™™ŇŽÔv‹Ý˝7ňÎ_4^jM´†ĚăRëÁĽ‚áç* RlłJ¤˛g“n-śp€’Q-mŻP€8˙qT$nIĄÔ?:â`JvĐ뢞466ş-ZäţŞÁß6֜Č]ΠĄŠ@aôŠÉDöâţí_%3Z4Ydîdîv źžaŞNëtÇőý÷ßo˙üç?]°I#U~vĆY™euŹŕ넶žě‘ÚhěŒ0áÇ& osŘ)V7ŞżNŽBGbCčžâÉ Ľś;aFú8KÖ.ÁŁ3Şe×eĚÜu'ÜvPqÓPĺWž:Ÿ´˝˜ĽlB@˛ĚOş3$W„*ŰnG…G^ś؝†"ł\”ŐîL6†ž›~^C8+™÷S•:^â~㒡żŮŰóÚ˙ÉâĽäŕsŢWôˇ=ľ RzxG¨ş÷ĽӒ-žÍŸ˙{­÷â*}ź@UŻR œH‘Œ){“Ö¨RhŠm'Ű _Rqę…xÚJWˆT6ëę][Ç ˘u ?‹„_"§ś™żáă4źDˆ.e.Uť}ՋŇ՘›nşĹţtÍľ.‘Bˋ^ýÇßŰ ASUĂWPó×-,u)źTÇ}÷ÝcŠĘuˆbŁĎ>űĚŽ¸â {űíˇmĂ 7t•,M˙y饗ÚńÇoŤ­śZzę˛dN˘Fí+ÔޚkŽéÖëŐr[lą…­ąĆÖÖ\ТĄľA‹j^7™íHIf{TZLIśXC˘˛}š5k–KސO>ůčZŠ|Ÿ*Nľâ’5ۢť˝^Ťg†ą–×s5ät+NĘ<"ď}‡:>ÓÉᔋđĂ*íXöŸu"™ż˝ÖvR—z˝d܆EŇŠtžűY,*M\ÎYďŔ/ĆŇöÜ÷“´‚ `aÉČó<ßqܒ(˙ů9ˇç, „ť™A mŠŁ#ĆŠţ8ĺ” -­ŢýÎ)wy~VMß]¸gŔwƕ“˜‘: S‰Ĺĺ•Wćü;ތŠT%ëŹ/X°ĐˆO üüóĎÝěšďż˙ž[FTeĘoźa×^{­[R4źd_JęƒninÉţەÇI˙‡ŽIFçŠgŁľÚ;^ŕĽöÇUŇÂí§č€Ë¸˜ŐЌ~– -ÖÜźÂĐš`¨K™ldö‡J+2ľ¨ř(ű6.Ŕ˘ŠÜwŢé’+6Ůdc;î¸ă­gϞöë_˙Ú^~ůeűÇ?ţa§œrJÎăýţh›Ě6¨wtk„G× oKóç/˛ĄCX{[źxiÔČÝŰźb…-^´Ôúő+=öZń h;]/ŕ[źS0•7Pú=§“ M; .ú Łĺvěç%ćřÄâh}ˇ@"@\ŇEŢcĘ ÔűQĺłŇď'QäłJ÷ťWR_ď¨fĺ&§ÄĽŇ¸ˇYŕ=Ć}Ćqßsî ƒ1ŰÉűbłŁm“žÓ…S%ŠiÝů_^bE~˛IνEśQ‹r)ţ;meŇOÝ ě,ź#ů MĺžWn9-ýţöďcímÁü%ĺ?vÁbX`†Ş|ĐŢ}÷]Ű`ƒ ě[ß:Â{Řu×]gŻżţşÝsĎ=öýď?ď9ú´fϞŸşžôˇř.â:—rgtAçÔń‚p˝A5¸QƒĘ;–Âł_Eë$1żŠĄzK´žžšşM•ŘEÔ,uďîťďIUšR˝’u‹ƒŘöŰoo•ŠVœüżUqS%Ę'YřŠČtŸŚüŢ}÷Ýmß}żfÆ sˇýčG?rS‚ki“Ôöň÷¸Ü)ÓhxľĄĆ—–îњ׍W/ëj´>ă’%KܔŒJôjo˗/wű ĎśőÓ%ĆÓ´ĘÓ§OwĺéčŃŁŰíý阙3gŽ{?ƒś3f¸ëƒ ęVłéźů裏ÜĚ1cƸ™™tœľĽůóŠ'Xč<Öń ăŽ .tż§ĽÎ}uâ„*SuŕuV4÷-ą~ý|OűE9ćϟoĄPçWe˜‰˘ŰoO÷záOVr–j*/řđdfNŒl-ź!ňœř ¤…V|IĨíwYřýűœD…IšÂËş–It°ś-]‘×Ëه2Ţc2ôX+‘<ťÝČ'ŕ‡áť-$CË"ÄěsĽÓˆ×čC,8쭉ÂÉ<Ąg´÷(Ţř×)}Îç=#Ů6Çe*Ů#5Ke2WN$Ź9řM^¤ßß O<ńDä™ĹË-ÍąŮf›Y1 ć/˛r͘6×V3"ö>ÍPąÓN;ŮŽťîÔ'‡¸ăŕ°Ăłx ŕŇŚúóv“Ů}jˆé$KĐíąż'ľ˝I(ĹŢKľď3Qâߙ×)rÎ'óśPćůí“)bžGŸÄ>cvĘ*˙Y–Ÿu‘L\î ďg˘Ň]Ë3…Śjië"3çü-.\$$˛O.źéôw?˘œŁ;zLĽn_ąźŮfΘg#FŻŰć-bĹ,ÔůS*ÁbĘç3Ź\s‚úâ…KŹOďÔďz¸íŻÄŠ( Ě8ôĐC3˙Žîę’ĹKmÎěéôŹl RęôĚ-o łPŮřÎ;ď¸2Xmjb˘]CGÄ ÔŽV ŹP"Žj}úźl/<˙’ 4ČÝŚÇO›6Ănžé–ôٞőSŲ-\dë­ˇže“Łłu~ż,I5 z^SS“‹3͟żŔ Œ™ů*ýŇÓ§ĎtŻ×ÔÔś[P=,uďÄO0ĺ)ř@gń9,’6xČ@kB•$Ÿ`uThJTý3ź\t:1UČĘ휣ÁŚóK9MĄŻFŠ VZi%ˇŽĄ’)tžŠĂ_ňúˇ|}úôąM6ŮÄÍN –ŮŽ5‘ŐéŠuuj[ęÄU(ŽžŻŽĎɓ'ťçű×Ńů­ýQgźś­éǏÎ_5Üôx=Fł1ˆ2ýuŽŤ1ŞL{íż2č5#„:…•X íkŰęPVcQł(hĆ =WĎŃě ZłqÚ´énÝK,´ozßzí#F¸÷ŁD=Vď]ŸŮÚkŻŰŹű•Ô ýĐg6nÜ8ëŰ7ľ<ÂĉÝgĽ×Ő¨<%hęcFŃśőY꺒4“Ďü~¨3\Ÿ›>c}úŽ4>ďhyç“bŢ|óMwŸ>mëĹ_tßłöOë}jż”„ĄĎVď[Ÿďt×űUGĎ×ţčľâFSčűŇg׳g÷˝hߢkbë{Ó~ë8ŇçŁď`„ 5ŸąŁŢčsŐg¨ăYď]˙n뀉f°X0_ÓmÇ/Éąĺ–[şcíőW_˛áAËsI¸IǞŽá}÷ݡŕk.Y˛Ě-M^"Äý†˙Óš¨‹%K—YSďř2Aç§Ö›üŮ'ö÷ż˙Ý—úźÂn˝ő– Ô۝:\,FÇoęýľŽŮŢq5ˆŁŕ;I‡Pőű™,¸âőťRÝíńŻ•ű|+şýDô)ɝ˘ţ\Ę$gÄm1tc˘Ř ůĚă‹ďcftvxoüyYôЉÖe#¸áóîJÎëĺ$Y{zĚ,x9{•(=ƒEÜőjқÂŰ*ă+Éž~Ç}ěsŮď,˙ţ≭ݗđÇíżÚd(P^(ż!u_"tźG7l‘}kĺ7”Ěî[tťîŸíRD&âoIşˇŒJúdŹĘ>—đ™WOĎZŠzŸ–ßXşdšőn*œ”xÄGäüťÔŹŞŸłháR÷ť_îWŹäĚO>žjkMëţݚc7üŒĎ'Ď ęééuŘłŮm™ĎŠĐ}(Q\1 ďPlAídľ'ÔžU›TíľýußěŮłí˝÷ŢË<_í ľ•ŘĽ8Ô)S\›VńÝŽ‚îÍ7ßp墟ąQˇ:Ô=Ví^ĹÔT[[ŻĄvŒöAą=Gqľłľ?ŃX§žŤýWü@ŰÔóTFę})fĐâf*Zdn¸Qpßâŕągâ(Úfą¤uԇŽˆč8-6‹ĹÎ;ďżÓě…ç_Ž˝yţ•˝ćš?e˜^.PçɄ kŰ7ży˜E,DÇŹ^łš íŻ8&}ř‰]zéoŹ˙€~öĘËŻä<ćřŁŰ—O?ý,ˆ'ô öÉiŻl\TŠ @Ý;䐃ÝßԚŁV:žSŁúF¸Ň¤Š”:Xâ‚%>cÖĎjá§÷˙Ní{*ČŽĆFxzűęF‡ݛÎ5 Ô0Wă[šjĚýď˙sA_ęřW0BIş(ѧOSĐq˙‰˝˙ţű.@ Űô˜W^y%ó%n¨ąŚüč’>ţuŐxTgź÷ᇺ,zžţyȢíhzź7â–+ŇűQ‚B”Ô }ÓuR´}6úÜÔůŤ×XguÜűŃEŻŻ2Nɢ}ÓçĽŕ‹öYݧmhŸ´oúLôžˇŰnťźÄ•— ŹčąÚ_?3Ç[o˝ĺśé—ęP†>3˝”ôš*YE÷)CŰĐ~iż•°˘0%WhŸt iťŻ˝öZ&y$LǓ\i_ô‹ŢWŚĎuŁ6˛W_}5|mŘn3ŔL™2ÓŽŸ`Ąd!Í ľĺć[¸ ]œp§¨žO‹Ť­6Î ŃHŃĽK–ĺo'™ °(ůbÎŹ6zL|‚…Žß=÷ÚÓîšëN{öŮgc÷ë‘Guu’‘-o-ňđž„_ËĘӚw—ęPîcóÓ@RÇIţ(ÂD4>š/çC)đZŐIL¨VőîöI¤(OŠЧĽÔFÎůúxő۟i•š1}Ž Ú×Ő7â•ČH͆1sćÜÔ3šĺ\Ą‘şş&Š՞UűKe‹ÚźŠ(î öľÚÖj+AAI jżŞíŹśŞĘ ĹFÔ.W\Aín]WťHĎŃ ľ“uŃ ľÍ•tĄśżâڎÚÖşO1˝žâzMuž+^Ąv¸žŁŽuĹ6ŢxăœŮ,ľ˙jkëązÚ%V¨,SRˆ(A]q-ĺđÎ;ďşöş^KńľÍu[/O‰ętTź@çAĄ dřćaß´vÚŃSVlŮ´ Ň óbÔČ1ść%†ÄÔ|ÓńüjÚ1Š×iŸţú×ëíᇜĹKĽëÂŮ6ôíˇ˙ËýŐ9°ëŽ_â ťę €N#Q`”O{P§¤*CŞźéRNŔ5:u°*lކG;“\TO5úuŽţ÷ż˙u˙ÖĚ:•„ d5öhĐ,ýűp÷)˜ çŠÁîGghöý[$4“:CĂ4{…ęô×ë¤F×-p >1Cˇëßz^xÁDˇůe4”č N}Ź×ži-fí§śŻűýěÚśöOĎOQčË&ZôZ Şčß/˝ô’{Żęü×cőŢ(Ń6őţôşę¤Ž›MGŻŻä DhŃv|cRÉ úŒ4ƒ„‚"JFĐ{SB‰Žzź^ß'šĹŃgŤm*QAßĎC=ä9Ú'ńe§ĘLlŇö}2‹öĂ'9č5}҃žŻ ‚PÚ?;ÉžđˇO*ÄŃgŕg&Ń~*h¤ĎBǂŻŔ>Ż(˝ŽöEu}úőZ]=ÁBÇŤŚůÔgëĎĄZńɇ™ř–fˇÎ€ž—3ć¸c~Ř ÔşëŃQë:FÁ›BÝ e˙žęüX˛ÄŚĎ˜m —,ÍîűÓ`-– Ś, î›>sž 2Čú6Š=wԑӣĄŃž¸Ţ6fä(7ĺ§Îٍ–ôŢj‹ĄC‡¸˛*&mÓ=rŢźůÁy?+؟Կ‹˝Ž¨I„j8ĺ=žŰvľšŻÎ–rCýóťÝÓăČýƒbŸÚÇ`&ĄŮŠěI‰Ă,™Ě`Ţr™„€üD‹Ěc*–pËƕK•œáîŮrö˘źîÜřý(#eÇňŸ™Ě”U…&€Húk‘B=‘Yˆ˘ţĘ —>; G:ŠÄLˇj;Fۍq­Eçzą%`JĚ+óďřň­úŮdýn.]şĚŚO›eƒ‡ô ~›,űy'-{üUVžşYeŠä1şű=ž;?x˝™łƒÇ´¤g3IGŽn›ˆäĄľXúV[şbš}řŃ´`Wzżń3Çréä•ÔńĽ÷ŞäŠ?žb‹—-ÍÔ–oĐ=¨M¤6˜3ĐrÄ=zôtmŕđĆaŠ ¨}ŞÇhЅžŤś´Ú&žŹY$4E÷+‚oŸŤŤD ľĽEqľ•pĄ6śb+~†ÚjZ‚Qmú'žxÂľŁĂKčvĹGô|m[qĹ5tż^Sís퍜­űcQşÚ܊H܀ԗśŒŁx‘ŽW?°!w&iłąŤŽdŤŒc…kĂţGŢ˙ŤÁý`'Ó#5ƒ)ýńŞż:÷ZłdŹŽĺ͡ŘÜV^ee›ď+šWXĄÚ—Ţ—>ÇQŁFf÷u‰ €â2UŐń¨J9$ż,H%Kƒ„_@a:GÔřđŁÔŮŽÎqÍ. óMÁ?‚#ČöëŞQŚëjĐŤaď—ÁP`B#Dôü(ŸPá—-DI *řýŃu%bře |Yŕ­üăÔXóI =Ü~č6ŃóýŽđű.ôyřĎA ?s…Žű‘z}mťPy¤}RG#T|đA—`˘!ô^Ôx}ć™gÜ6´?JxĐś´żĺ–Wţńz}}ćÚŽ>gm/Zž†ż7ń\}Ţú ýě!~ŠmCÁ jŕŃçpĎ=÷¸çŠÜÖcôôÝűŸô]úďDŰ.–`á?;%e<őÔSÖŐé3SB.m!5Űu"}^fk-ZjS§Ě´ĄƒW)ţÜ"÷•†Đăf͜ď:5\ 2}c¸#Ť%řŤßüA‡ËđšgH{Ńů˜â/Ô<´WĎÁqQx›­đ¨u/‘žŚôƒ‚sxys¨ŁˇŢ‚*­ëPě,j5J¸ř!-şÜŢ E{ľ/~}wb‰îŘ ÇŐ(ý˝č<.’ ‘żńIąŰľP^J6AKÂw°&Ę:•3u•ÔL*Ix^Ü}Ĺ>÷Öw¸–Ú—Ôńےł‘üĊzSt֞‚÷U’öRzťĽęxő×QůeYţ29•¤ű„śüŻ%řőœ3gž›!běŘQĄ…^Şř=FĎ×}Œ˘×Đ Q\1ľ§|ťZ×őXżtˆţ*śáË3ĹĐż}ÜĹ?VínaPZýkëxAŸô ×VL'*›Q"b:źZ’Í™‡‡˙ĹÇńŞýîÝť—?ÎĐu`čvZ;ŞĆWŕ|€EŸd}\fíčtŁA•žj§/|^Ę AƒÝ( Îđtî) ]˛G|@ }ß0Ó}ęŒ÷k,Ć˝ŚšĆŇS@ źdf­řூ bh›ĹřçŹXą<çąÚ^ÜZ>Á!Ž’4űƒ>‹đç @H)zFŮrË-ÝűŇôĄ ĆŹżţúvÚÉ%ExzßJp(öžôř ‰Ţ›>k_+™AŸ[9esęťkÉ$cčsŃLÚ7˝_OŰÓÍčĄQ0á÷ćƒFţůţřđŰ×őh2Žç÷[ü¨TG§KkȜ“>é"iSŚMˇýzŰĘcGX­ůî ysÇďŒŕXϞKqË{šY,‚căŁI“­OS/4¸_N’EK:ɢhŔĽĚ*€^ĂOŽŽ— P‹í•ŻPFë“[ŞYއ2Ů^ußd%Éq) š3 ¤śŮf˘TRL]3ßœĚ^T¨-‘ˆlËÝnŮ}N†ďŃ턷UkŠŕsęşĘEŸdQÎëšIÚě)œQę"•JJ+w×őĚeËWŘäO§}M6lř 6[^ĺłOgŘÔ îţl+éLŃă.XlßýÔ-=śň*Ã6Cď˘ KK–,łO'OˇŠÓgőLuhćvřä$OŐř;Pßtžk‰ ÍĄ6ł–4ŐĹĎ čˇh\RłFhöĘ=öŘ#3hCËyčqŰlł‹eüç?˙É)Oâ:DďS{Čߎd ?3…H⟧űô7Ž3\ŰŐ~&ÓIíúˇţúç…č˜SŹMqŤp .üˇżxŽ;űbüąéِ䈨:›“€ú PŞ‚Ż œ%~Úyß ç§ě×m~T˝Ž‡g݈ŽČ.çľäóO?łƒŽŻžúx7ŠBżfŠfb=N úđě3şčv?kÁ;ďźăţjęKťá5D=ăę̟4é#75ŚŚš|ěąÇÜTšęĐ×ĚZkTŻŁ}ŃkV2M˘öIŰÔ>̘1ĂmKłO(1@#:4RD3n(H˘$>;_Żçg‚Đ z/JĐíZŚÄĎfQŠŢż>7%VřrÍ^ ˘<űěłî54BĺůçŸwŸŸMÂ7l5ˆ’24’EłHh?}š§Ä­Ťżoźń†{Œ–Jˆ&3ÄIm#‘)OőéłUIŻŻĎMűŽ}Óž*¸¤ďC´?ZBFŸ‡^_ŃgŤďI šőBŸŻ¸‘ŠÁűÔqäGßčuôčąš˝"PBkĺö|0CוôđÁ¤)6eęlׅŁK-C ‚N?œt‚ĚĎÝŁĐqč“#Ýď{p™=kž}đŢgÁqť$Ý ˜í\jIdăă.űŢ,< řóÉ3ěĂ&[óŠĺVĎĖĘVNŮV}ř-E.ĺhM˘@CdÂű‘âßkôýÖňýW˛­üó.ůëśhĹfľ(śí–tçw˛ŔóZqĎËߛBŰ÷—–ĐĹߌňş´(oT–úň´Đv,tI„>‰đ'RůŠžČI2Čý Ęl˙$ۡŒ)'y˘!Y¸ƒ<ű[%Żü†´”¸$ÓKs'Rł™¤ó~üĹÝ^@ř\ _ŠýFšăĘR—âż]ľRú\ÎěGđżů ŮGA`Ţź…VËĽd\I|ÖJpřčă)A˝}yŚ5˘œâGŐ6>űlş˝úň{öö›Ů´ łlEł5ë3.˛[lڌšAĺc{éĽwƒ:˙ô Îł"L“˙"‰ ş6ľ—ożýv7›Ľ8řv‰âjŁŞíŤ¸€ftô30ŞýŻŘÄlŕÚčjŸűöŹT†h{zn%ÉcáÄsĹB—P[ŰĎ\Ą„ mWmrÍxé‰(ž˘¸„Łöˇ|řřBřő;ŐlšŠCŰ|őŐWíšçžcP ňmtwĎ:áď+ő| ‡ţˇß' ůŮWőáD#Ŕc JˆŽ^ń6Uśüúkj`D_FĄŐń L>É@‰ "<ňČ#îüZuŐUݨ%CŠ#ţő×_wĎó™čţüÓ9Ź^~ůe÷Moř…/|!3ĂB˜ZBÁ żD„–ĐĐmşo‡vpuô+cÇwtń 4-ƒ Ú'?"CŻŁY4ôWQ‚‚CÔáŻY(4¨öy‹-śp“‡~ŘíŁŢŻ^S "zJxĐ6tť;zč!ˇ}%čłP°ÂŻ)úŹÂ#^üŹZŤőĽ—^˛‰'şmo˛É&ŽaŠĎHŽťďžŰ˝ŽŚŐži î(ůBYo˝őě駟vËs(A3ŠřĺP´=}_O>ů¤{OŰnť­Űvôs'Ź…gđŸ“˙ţőů(D˙čߚ6U(˝]vŮĹ}zßÚMąŞ÷Ş`•č3ÜxăÝ{ŐžjŰڞ’(ôšJüřß˙ţçCÚÝç׍ŐsˇÚj+Cmd—ÉvŞďeń’eöŢű“]gʈŠ)c‹-‡ś?ábű Ř™"|wąż?œq÷…–č™:uŚť}ÂÚcƒcŚ)ؗěLĹ~Ó#ó]Yř]4-š–üý÷>u3čxľčÄę˜:^|ňD"‘MR+ü¸üdƒěóuťE>c˛ ŐkĂ#ÉŞýLrž—dtFŠrĹ=/5ÇDńo(Đó_IŠTy ćW Ť6!n&Œjž›R§KÜůÔ9:ŠS‰щ)˛űޞżăÚr…&ĚH&łKËÔôœËŮ^ĺ‰ZáăŽŇ¤=pÖěšÁď¤ŮękŹlƒôŤî˜M_4%řŒéó\r㢠óąĄ!7Ů3ľ‰œD‹B˛ľ”eAăÔŠłmú´9.iŚ t¨PDNĐ=)& öŤÚŐ*—|{VíRĹ8ťĐ`ľó•đ rJƒ ԎUť\ív=Vą Ĺ”ä ř€Ť6ź‡(.á;}űŰĎÎPn›k ’(žxâ ÷\Ĺ´]Ĺ 4ťĽâ jCkś ÍşńŔ¸}Đ{đł*ăËYĹôŢôŘ{ď˝×Ĺ6ôďđ̙@TxŠS>‰Č'J–ó|{.ŇżývýŹśŃ>@*™ťŽœűeüMřˇż4XîP]Óˇ5F.şo ţöÓ@ áNÄzPŞbŚJÝóOÝeýúhÌ 3śGĐ  3ŠlچôZˆA%0‘a›ÍŞÍ„ÂQ˝pp-:jÍWĆýčB?ň]gúŤ@ۊĺ+Ü(‚9óڄőwd$Rˆ œŞ3]3H„—ě2dHβ­}hĆź_ňC#řÜf5îQ‰dNwqřőÁ–ěž5¤FW˙6lH*ɢ“őň—–" 9ŁSÍŢ–ć¤ DN:Í>šôYŒ\fy,‰–˘żáí˙űž>ěDՊJËČ֔ŠńĎń]mĽˇWŤŻąXÇť;Ň+~ĄBÉCš3WÄ?&_-ŽW?kDK‘ƒ°đwXęőó§ÄkHżoW>$¡ç–9ѢŔMBĚ]ŽŁÜŁ,6Á˘Ľ˛c´Źď&őŔœ÷Q|–ŇŰô3űä?9,uŽľm9“ÚxK‰ädd?r÷šőŁ;˘ -71§źĽBĘK°ˆ;öy)ôÜŕw7ِł-˝‡úل ŤýƒŽ>=/YâLoHÍä˘vٌšnŞ-Z´Ô}×=â“J2łÖXi Ë~Öţýˇ|Áś[RĎRŽE˘Čk„Ë żÝŢA|`˝ń 6tđk ęJ=ľN|cz˝řÜxď@Íţ%^ĐVˆ ŤČ”aéxAx™„j;šËI\C÷•šEłÇ/ëń~FWľ­ýLnĽ„AŸ˜á/Jůó`[s‚@z ő‚ÔśIľX&$.ó¨ôËœh!ľ;žnÜňSâ~— %śVšŸ{ëƒöĹS:¤3 ţNŰbšÝŹéD2÷"…:zËK*H& w']l4aŒm˘Üd—r+ Ůă&‘šMĆZ)šg…÷!6 ˇÄš×PöŽĽŹŔ{É)€ň_3žT‰ßšf~đI~&‹ůóڛ˙›Ô†żżCR ˝Ę që¨\şdšKśœ2uVđű;זŮÉD*ď&Đ ľŐĂ#[ËUIQ돋ô?bo2u’Čó¨3h~śĐčŇIíQŸĘĺ— Q‚Ą_X‰jŎľp)•˜Ú†+üŹŻaüî"Š @ˇŇÚLëp#˘ÜÇ{á×)tĐžâŚůkŻĆ~ôü÷:-Ą7r.ü<[g L(ŽeS4Őb¸<îHšąCo­CŤ ‘f×7nœĄý¸ÎڤObP/&A1¸,_ŃlS§Ě˛šsؐ!l萁ÁąÔ+‚ô ‚ ŠuRSOÁ”ಟĹW–.[jsć,°Y3ć*K˛CK“>8˜z­ÔčÔ܎Ÿüßčôq›Hýgń’ĽnYéÓg۰aƒlč Á>ő´^ Ěôčéf›JŇnąĺ˒.‰G#k/^âfJ™5kŽűwf4ˇętB5Rĺeř–jʝDn‡XŻ§ü§Çž~ŃýOćü‰îŒUŽe´_Ž ‘ůwę_‘zqţ< VLîHďĐďdÎ6ó÷%󺍅ϸ¸wޒóÝG_3‘s-÷eĂS XL'já÷šđűZĆc[/‘šœ&ç–Ö˝N2´É‚Żćë0UeTŤŇ1Qrk…“*üŹqÇz’ů[OűWkfâ)p{ÜY> ’ág—1MFŢűH†žoĄÓ2éëÉÜăą!aKƒßÓIMś™łçŘĐaƒmđŕnęú^˝‚:fpÍĽzžűý]Öě’gϞosfĎsːĽ^"éf˜Ńő–L˝ ‘JŁI×Q˛‰ Ąýśď3\Ď÷çXÜ÷’HÍ֑žšy‘L[!™,ńÝ@ۈK¨¨Mű=‘—´–?>ýRŢşčwß'ůK4VďgÖ_%f(šÂĎň䡇c €nĽ’JP\bDšĎŻőăÔ^8AĄ=ĎĹ蔱ajÔŠĂż˜Î\nh Őč:ŞŃ)ۛŃí5K rizůĚ(Ďt‡ďoó1Ó´/Z˛Ô}žÔŚN›c}űi ­Ţ.ÉBSˆ&RWJ°ĐŹZF%Z¸í5&|vDčx˃-* uˆř.ŽšóćŰźů ěł^=Źż&—D¤ŽíS6Á"•đąhѢĚŇ4Š×nLwl&óúţM'rƒAĽœŽÓú-gJ'ąŰVů/[$ތâ.÷ť.3É7ó¸†b*rGÜg“,˜<œˇ…ŘÇĺwLşű}ôëýDÎw˙¨8‰ĐŁüŹ2™é×Ńmäíeh#qçvá÷§eI|ÂN"š`šf":@n§lÂʙ‰ çńynˆ}dÜwčî‰Ď¸‰l1ôÁ%­ďŔM„RhŠĚb‘đ^‘óŻÜ%-ZżÜF2ô;T,q5Qúő“qߕŢ^ër,Šo3‘ŒíŒĎ<ß'ˇćœa‘ăŘßîŰżŃ;ҡĆ'/Yޗ‘ o‰˜´dvçrśßH=:•ݒţ Ď&Ľ[šmöźš6oáë=ľˇő ~{›ôűŰS+–IěŇV%[.ZœŞ$W4‡ö)ôŞÁ.´őˆżçÉěž'Í˙&çěfŹ„Ĺ%Ă$ 7ůńE~I”¸d§T^fÜ+@ýó‰l@ľâ.ú$ ĹzüLáeC|REřâo oˇÜöş/,í+=šˇŐxĺ-Í6gţ"w‰rÓÜűnĚ´ěĄŽˆH"GŤFúĆLĂžtérw1›ŸżOɖĚzç>ÔĐŔÚĂ˙Ÿ˝÷€—ĺ¨îüOőÜřîËOŇ{Ę!$$„"lŒH&íźađzmƒÍßťţ˙˝ŢŕĎâÝ–ľ×ŹąMXł€Ád F ‚M"IH(Łôž^N7M×NUWw实éšwî˝ç+Íť3ݕşťŞşťÎŻN­Id•Źڌlźl2Äó0§Ďâôőj>.fÄŰâň›ëŐ•°f{óŠâ3ʎÁJčÝV˛‘Ç{­˜GÄ` ËX Çë Ŕ\ĄŒ!ZáRdŔ­ř>âŁÜ[iéčËucHďšq9;U *uF¨.wj˝ăřIň4m‰L‹Ă=ű‚ ‚đĘă>œÄä[îĂ×ŽŻ . ,‚ ‚ ‚ ˆ%‡CýĚ˨1#6KLS’ Î wß JWÚ@Š2Ř4<$Ďlań¸Mňcśűđ%`ľČ@ÜĺB–Ł ÂňJshHhÁ!şŹĹRâó0ŹŞźx÷ńD ÄâW؞í‚í°´%Ko\S´ŰV۽ҥYôĄ}Ń´8 ŕQ˘?Ęł0ü‡SÝŤZôn34tąť˝I˝qŇŕ\˛Î>?öšôĹSB ľß'´(÷şoórŸŒ/ł-Ăš”÷Č~ę đcyÄŕVš>Ô3Î(Ô8‚ ‚béÔ¸ąg‡~Ÿ‰Ő ,‚ ‚ ‚ ˆ%ƒS;0€60v•é׿œąŒł_•w΋čŸčĚwő×cHę7/˘–đź xd[Šć|3Ś - żöĐŇaľ/ÓđŐtŸCmš'œ7[\Ąœ…Ĺ)éÖ ¨ú–“°§:ŽbŸ2‡Žp“•}~[šĆĚżBEBD6`ż/5Ź˝†Ř o~áťP˘žâoVÓ6ĚĐn]La‹,Tßf‡ĄrnŹ$㠖xTŐ%xČ&a×;ÎLŚ›„–ęřš'Mćę\–\ŔDAk…Ř3 +XAAAKHe¨Ź3ő´!"đÍ4ÉsŽO†-fć"l*W ý ˘ÔÍzž427şcľgĚ/%ÜůĽĚF+qiĐ2/ĹšÇĺ%Ü|ŒĽ)4c˛0̕uyPWśýÍtśćśżj_îÂš-c*rî\âćiĽĎtSm:4ł_jşđš¤ôxUşƒPŐýZ63@ëĆŢd/=hLîŚďr¸ť°‘JígÓ6.oä1Ą.ŸAęnŘoƒz JŽ[ˆríx˝Ëë7e0ö‹ł[Όíâ/.˘:DŽ"yős.› -BŠ~YJďAąZ1ޟú€îĹD XAAAK„2Â,qŢ6ℽKŕ ڎZđĘPÄĄ™aąœA1Œˆuă{űpćn9sľcĐҲĹéîút–ď؝™ÚÎ!ŠúۯТůyZöúĘŤúČWÔĹƒłĽf!Áˆ5 ›zšRË]ĹŇHdđšćžéř>Ź Ö–ˆŹ‘nĂłœEĘů4„'Đż eŘíÇźż@_đÂGG˜°ˆďuvyě{˛í=Ę^âƒg˜iK ç9ł„QŃÓ°Ďł×;Eń—%n݃źWAD3ęĆbH`AAAAŹ*t7ţĆöŔěXŽ­ëö>áOӟł‹2éëÎŤížpžńŁ#žP†´A˝%,m+t|łľ3Ďţ&ç§2N˛ŠŰ†‹¸‹”z(g­çĺwßţşR$Ůç5ďrź˝Ż=Şźäl{eĆ#­ó|ęnCÁV–+/%aÁ˜üŽ_;űřóV\‡úP'=\Ö!%IK ŃĆ5ëˇýřófiőęEÍň^e\Ţ#&[3ăÍEşW _Ý­ŤSjĆĚeDŒý•O^Š9láâ d<]Řŕxą°:2ľżß’‰xœDAąÔôăэXýŔ‚ ‚ ‚ ‚XB”14‡nžĂ0°ÍĂ>ƒ,olÜ ÍlŻ§Í˛—öŮÂ#:›ęĚĚu†ÝáRˇ d8őyůPuvËmťuFÇŚm=ÜŚXa3f΂9žĽ”řAsŽc´ęôś+Ăuuƒ­&tŒYQś€gŽžű5÷xĄtÚ4>—ŤR…;™ÚˍqY%ü1ŻŻ˛řחˇšSŕSĽ#R(E(ĄúŚçĺC<ŔÍĽmŒ O8ž:/Î6(´@Ż_ŠK„čWŁ ŠB‚ ‚ څD„XAAAK„2ŮUĚtEŁ—=łŘ6îř\•7Ľ42ęŰ éc¤”aé~lóňĘ ÎŔ×MDiÎQ@Ö+lˇyM͛‚šĺžU‚űę^Úb;ÄŇćU_˘‡÷ˆš ˝…ąL ă[ (†o†~¨œÜęˇĘţ |>fě#qŁÚËÍÔó_g6˙‘şŻqtÉ˝ZŹLĄ…vĹątXB˜•€u˝Ë)˙K›oľ<ˆľ r=Y0˝ňlcŽG8Ą§ÁYW[­ĺ}šx…ýnVşÉqú"Śý›âŐ@–_Ó&ŽIťßvŘÖě~™¸oM`Ôáť™űXí-¤ů9˛}žpëo8=Ż *a"ˆŽ Ÿ;Ţ+ôô|ˆ„Ę 󓂍XpVÖi7~JD[ĽlćĚ̅şE^łż Źů#AAŹybĎ_ŃXAAAKŠiĘëwP#b d†?÷ZÁApv{Cą…ošAm]ždĐü›3¸Ńą=ôsŃn™ŇżÍ­gƒÎHśă/Ľ;yŚÄËd›ânO!÷,áŕŠ+b‚ f›g˝1ô6VĹĽq—k- Ďűąňů1ű,^äK…ß*ác Ý!´ńÔi˙54I"V …îŰn‹+Ň3ôŐűxSéÇĂđšßő˜u2=~Ž×š^!•§˙ňLí,Ť˘×¸Qí4ˇ;÷Vc~Ć罢ü•x˜Fűő ‹,BI뵄‡ŇfŔúš¤AAD AŃ&$° ‚ ‚ ‚ –Ž3źše™h_`!ö*ç2~ŰJă cr6–‰ ĚřDPgu1$‘…iű•DŐ>SWľ]Něç V2Íxő)–Ţ "yňʨ9L›`H0QŸ§Ů×Ô =Ş6lćá;:Sˆet1šŃŸŁcH~Ĺ\ţ€iĺȣǨő‹`ĐÔuďI先&yš“dí„ŰţR9őéűŒôžöŽź+€ą;âĎ}Kő¤áëŕ˜Í›ŚŚJ`‘¸Špű¸=׋É5B´đćuŕžx–ˇ °b0OvĆń2Ď˝XĽŤh*rÓĂš/ŽiF ^Oyq]ŒŢ{Ú ţäDAA´ ,‚ ‚ ‚ ˆ%B™†i‚…Ę@ƕa§Ę×0ygŰÖ¤]Äe D)$ť/ď#íAčĂäVüm§ŒĚÖ@?RKçO„{ˇŻtł•)@hÇ9€_TPşöWMI‰§†Űź˝e1 ¸š ĘX’ öv¸Jx R6ÄźÖČ.&,€0óƒt¸abö°~ëË)Č ä/{ˇě.Ý0UŘ´~¨QuhXYýAY°$ĆLž8•°Âݛ‡„=I ™ďÇyătu‘wD†ą:US’"ŞOœ`^'Ś•Ńncz0P{ncOtŚ+”g‚ńúť„#€hpŠY‘G(NŚ :€ ‚ ‚X.H`AAAA,KśfžVť4wpŽSČMŁĄîŢݞw-!)ˎ¤ĐúY6Ą‰ĄŘçQ#y:,ŻGšiŻfłsÍŐ(%gKĆl?<z¸¤Ěšö5´ŮÖkÝŔ𢅥™ďĚů—YĐövŐîŤň ž/OöŹ`%ҸíU9ř—MHOĄ{¤T4‘ ,- š¨LúšÄRe­éLď őâŠJÜăŻ/ýÔIU‡"!Rź~€ôŕ 9ˆîĂ×ӄʣîËĚęĎŐ=‹×x›b̟OkâǐއšýŽĐű<ɸ’§"íR˜ň o&Ťažt—ź™AA%$° ‚ ‚ ˜9’Čr ‚6ýdÓĹ >ŤcÄiäŕĺž­Ž=jő„ŒDćĚřfçŹÎ0]?1\UfSśĐúńËŮÖšePcÔ=đ;ĆXBĂU޸ÂkdśQÎČôـşŚ„Ňňů˛O‰s­yuýše›Żź „ëHÝňÁĂa™ć=B+Źĺ ˘˛‹r#]\ţLďĂô,UšśÎČô´á¤â5.ǍŇao*nťŢtIË>”ż#ąB˘ =ś^Ÿ ÉŠîCŚŃş7’ÁŇ ľjΕř°ôŐ­cęž[݃UÄŞdyž=§¨4ÄÇ# ,ăڝžö^cżádzţ97|81˝¤1\†9ŰݓřD:ËÝ뙳ńýߗƒŘy) ]-l™iĺB\ŘW°­ń 1¨ń'ň'pá…Ё }°óşëރ˙ýŽż„ .¸@¤ˇ}Çq@A,ŐlÝę÷( "ĹˢĎúî'Í4/J}-×Đ}&ł˝­ ęÄ)×{š KQƒ" ő ô(alÄ ‘3ÓŘ#„5zď1ööňw1㜣•~@`éő›†Zĺš$ĆÂwlźŘŽ„C0Ž<}î—:&nťďˆG<d|Ű Đ“˜Ţ+bעI7[6ŁżţŒyŇ´cȄˆĄÉőŐëJU%Šúvý=ścލ˘P-T†×LećďŐKo=†ˆœËă­B÷jĄďÇďŐ˛q-†ąŸť%ĐÓ2ĘPŢ5–Ăĺ1ŇÜyçđĆ7žQ|ä# ŻyÍkÄXâ˙řĹB§Óg>ó™đŰżý۰T|ä#Żýëđżńpĺ•W:űőś‰eüó?˙s˜œœ„wžó@AŁ ,‚ ‚ V(ŽřÉO~o{ŰŰ`ßž}055%ś]{íľđĂţţóţĎpńĹq”€bffžô¤'Á‰'ž§Ÿ~:ŒšÝĹ.ĚÎÎÂüüüPUAËc\CgŹżK1,ŮKŒ¤PĹŠŒ˛ŁîŢ´4œÁ`3…ĚYťÖő`u&ŠŞ f4żńť ź6ʖ˛Šľf‰őÉôŽ uóů+CéADěőÔĎR„Ŕ ˝úˋě,$’`e+–%Ž7.úґŇĘ˅‚đ”€Ű9“Kq™kÝúďęşd e íŐϤžÉZšŔš~‘4ĘăYrü?ăźńuΨŢëoş›ŃÂyÂBbšž€]ŕšÜWp'MťÝÔç ×F[âÚÉŞęgˇaڙ8?Źě›y ŻB0QfXüáŚč˘Ş?ć˝Ď^úCĺ­D"ţ떗í,óy–ąë* y"b§ň´~7kŘdsfÖŮňŤó’3  AVMş™Žő)żĆëąöP+°^ÜvëpűmwÂ#Ď9O´…űîťn˝ĺv˜=:1&&j¤đîwż>÷šĎÁË^ö21 Ł_žţô§ĂƍáŇK/­ ‹csss@AŁ ,‚ ‚ V{÷î…}čCBń˘˝H|PdńéO>ó™ĎŔßüÍßŔ_ţĺ_ŠćzHxłŔY88‹Gw>œqƙâ;‚(Ô@A†_˜‚ ˘b˘‡Ś3ëG‰ćód}ĄÁfó‡riÝÄŃz¨Éóƒx˛XrŻÉ'Iżfí_Ť”Ü9óVz¨P†Ýť€ĺ}3˙v(ĺ"ŇŘˆčž(¤ĐBšp•ĐBŁâŰż=Gm‘Úg˜ÇQČ%8x=%řĘol ő“m‹+Dy´vW]‹P]ŠËCüë,”ŚBNėV šűíۛ^ßôô˛âxs=‘ÚŽĄąpÂ‡Ş0ËꞋ<÷Ő}VŚa×Eóť,Ťžbu̕0Ń6qÓăŒďŐy¸0óąK^„SÇǚ 1ěđâŒËk11!Ä8‰cqqvďŢ-źdŕo‹Ŕ}§věŘą6lŘPć{đŕA# ܇i‰‚ b%@ ‚ ‚ ˆ:<řŕƒpýő×ĂcóxîsŸ [ˇnűđ;€ěŮłG ŒěßwŽşę*8á„ÄrżřĹ/ŕ/x|˙ű߇úçŻŔŰŢöV8˙üóáĆo„÷źç=p×]wÁ9çœÇď8^ tA,%Ăře•+úôžŽM‘E^DV&Lű›~Ő<"‹!Ŕ“B¤—!ĺÍĺ ŇIW´lTh~ÍÂĄĺRxᙡ/\›Ęí[Â!Gă°ÇPkR 'TyáfƒóP_Y,Ď…Đ"ănÎţÝś+ŠDüe`šbĺáƒI,ž,üK…ȐHžš÷ż˝AĄ‰(DDÔŠ˝Ľ°BýVĹĹqꢹ=źźIéÁ“śîŮ!Dčę瞥–*7wV§B"[|#÷˜çŽ[išˆËŤ ĽĹ1W号—Ş •Cm7=]@ľ$&¸đy•)—ŁaymĽ]ŢVT‹şśyĺŚĂ*ŠŢ4š—uĚ*@Ë} ąęŮśmlÚ¸Y,îż˙~Xż~=üčG?+.ťě2řöwž)Âuť]¸ű‡ ôˆ‰ű7nŘW\ńLxöłŸ-–ő¸úęŤEXœÔąwďxýožNŒK|öłŸ…Ÿýěg" NŕxĂŸřDąď˙đĹD“O>nšĺxýë_/Ň˙ĘWžżó;ż#Ҿ馛ŕă˙8Üzë­˘žüńbéLƒ ‚ Vé AAË\Ü{ď˝bđLpˇíÜšS š<úя†§<ĺ)bŚËäĚ2œ­‚¤Ŕ D ÎĄ×5ō‹.şÎ8ă ¸ăŽ;ĹL‚ ˆŐ€îvÜĽĄĄ"Q"Œ-LŸaÍÍ,‡O€áĐě Ş#Ď[Lł)ĂPA úů÷+˜˜Jě‹2ˇÂňŇČŽ˛!f ‡ž°ű‘œeâĂA~ě2čńœ´ěf|ňęÓŕ@ü} ôü-QďŻb•–D.t’{D *HJ žQű„ ă5ŻŽ4!P,žƒWqôřvĄcž)bů¨}švm…ţČř¨űAü?Ćő¸KmxҰËQŽ•‡(ĎąŘZ*!3śËtp[ú°˛}_DϨë֋ă[Ć7…z?`Çó…×BxśU{ÔG´:íţí„ĺnîýô5ĺމË냄'bœrĘŠB¸íśŰŕń<œtŇIÂNČxęSŸ*Ć>öą Áą^W\q…đXńöˇżîźóÎ2í]ťv‰1‡Ë/ż\¤ĄPíóŤ_ýŞđK‡<ăĎi|ň“Ÿě•őăX8§ZOAŒ&äÁ‚ ‚ b…€‚ 9ű Ä(ĺěŃ9¸úsŸ‡˙řÇbvďRţÖżů-زyŤˆŘž};źć5݁ÓO?˝t˝)VďnżíŽŢ Ë}°cűřÝßů]Xża\sÍ5đîw˝§ĘPNˇsAD;sPiÄb>šÁ¨ÂAMC&”>ƒ´°S…‚WŚJĎž"âJ™Ť:J匝×abxth)ó•Sú#Ţ.ݰźpÁ‘jhŠź°za‡^‚šeT˜ŇXŒWJÍfˇÚź›oqUB•žŽ– L"kCŹfń˜[Ős$×*źk\–×Jž 6°aLoś-Ý@î՘ń™őˇ:~ŰSDLܔ{ŒôN™bă\hžú…ŰbąąřŢ8mVÇw„şgˆŚ0ű]‚űI!/0ĺ_oâĄ|ü¨|ĘĘÄ 1 ř˝‚˜â#.<Ř8"Ž%W„+ÜđČţGË[…ń‰JäőăU ŹJ ´}m´+bőƒKrŕŔľ×^+Dťv= ‚'<á rB†Xę'ƒ‰ńIx̅őÂoę5HĹÓĚĚz!ź@AĆsžsĽđxńšĎ] —^z)<á‰O„Żíkpó͡Ŕú™ ˝x›aĂú°yó¸ďžűáŤ_ýZ/ÎskôqÇm‡żř%"ž@ ˘¤kxî•Ď…[n˝6oÚ÷íÜ)ŇCďű÷€™u3 Ä_XΤű$AA,1$° ‚ ‚Xŕ:Ş(˜ŔAľÂŢ˝űaÝşixÄ#ÎŠŠián=YĚĎ-ŠđnÝşuÂs~Ď˛Źœ–ą<ź÷a1¸ąiÓfŘşőg[ď/ŽyZa3Ř ˘=Ԍ٥r{ínš‰,Tu.ĹË<”‘Ĺ.¸§L(h|łË3´ űÜö“ş2†„– :™‘ńřВĘ#zZĘŁ1ź,}ĆŐň;sĂňbGQąô ŔímiíĽnż˝ä€ÚVşš4Ǜ]LP)›Ţć#)şŃX4-•By†ĄŘĽZ ”Ÿ…2|%:ŠÂĆŃűa7ŸňťłĎˇľŠgIfŒżI†i^•Í(‡Ç󃯏ÜSŚPYmšôŮŢtů ýžŰë(qa(żŞ>Äó䚰‚Ő\s§ý&/jaďw^ÔĆşĺzŞ{h%pŇk˝‹Ţ'ĄGxŃŇ^64R™˘u˜ŞřąśĺüÖÄ\ĺ’T$Ž ŔzyĘ)'Ă駟&źX `bnnžüä' –jL`~~nšĺVáMĂŹ[7˘!¸Š‰E•„ :†ŠÉuđŕƒť`_o\âÄNŸ“N<šT&Ąđâ˜mǖˆóJ\Á{Iç;× 7ÜPŽS °Ât'Ă1á1Ş A1jĐ!AA+x@ąÄЧž wÝu|ýë_î;qů /źĆÇÇazzşˇ˙ŢY˙× ޲e †‚˝{÷ÂĂ?Üp™+˙A,%Ëa,¨\ĽăŻfƨäô,j.UΈ¤Ťţ„´CĆ­hFŐĂÚˆĂ"ćZ-\ăcÂBU†`ÔI–F;nnŤÍ#ŠĎœł™Š­pĘ#B}üĘź)˙e‘°Őśň9ŠŚ(ą6(Űł[ä D)5´pĄOMš|)–K;¤dߤŹ&ya1VľŞQÍJ¸Ś\+šĺA89C\ažCýYX_%—Á\BJ`řăŮŻÎ-ǑpJúŒ×NfHoĂńś%Täšg˘Ţ…—ţ llF•†şÖńôô¸uő^őłzßR`vĺ,ۂ1˜N¤ŐÔyD꿖kSN9E,ŠK}ŕç„N€łÎ:Kx°Pm`ďŢ=‹%.#ň¸Ç=^üâÁÉ'Ÿ\x9R YŁŐXż~F¤÷˘_}!źúŐŻ†§=íŠbL—-UŘ÷!ĎPí=U|ôŁ˂<÷šĎ…_ţĺ_.—Q¨‘}†%‚ ˆň`AAąBŔľT_řÂÂßţíűŕă˙8|˙űß=ôěÜšž˙üçĂŚM›`vv6˜†¨ŔÁœŐ‚Ž?ßńŽwńÎ Ą ‚ –ƒjFérä Ž óÚ8‰ĺu'šT.Ç#ňERKΚ†Ę9áПÜ#B⁊:ćY,I–:Mžů˝WxNż2¤ë9úDJšg› ě3jŞYö:žŮďö>ÝĐ[•CÁ0'§ćçË13ƒżnÖ§m_­đŐł ŘĹVŽF3]¸ }4ůu„š‚˜Â ;źeXłďľÓŃËg‹“y o#O毋ýÜß8ţS:…Pżčó:a†ĺĺśÔ’‡ňĘó<Ξ÷ϓh[źěëmĂ­žœ†XĆÜrŰ÷mÓEV%\][}_żp­žž)bĎMŽ ą6Yż~˝xç˙Öˇž‡‚+ŻźRx¸ĚX5ß'l9rDL˛@ąĂu×]׸GťŻlŢźYxˇŔąAœxâ‰pöŮgĂĎţs!Î8öŘcáG?ú,–1}ŕÄ'‘¨0Xöąą1Řłg|ěcƒ—źôE@AŁy° ‚ ‚X!LNN ˇžŻýëaűöăŕúëŻ|¸ęŞŤŕĹ/~ą˜‘˘3OÜÁ]ü‹3O~˙÷Î=÷\řń,fľŕ Ž×Ją,§h@Ÿ€š:ű7%L,ŽĎb3¤č× uóęëMc+—á Žú˛†×ĐnząŮëćĚó*Lx†ş?ꉃgňŁ-˙ęœ™öV8ü—Čx–­Č´żU~ţ2KcťţqŒăĹGN‰Ď€çŹüŘj…Đq$÷/Ž^Ľ~)$<3ŠŤŽ$&%ϧO˜P^‡Ŕi6=m¨Ô+ŇhśÚÉŞzg|Ŕű)}őđţ‡tC^”wc¤¤×Ük†ŻmŐĽĂ­¸ŕůÝÔӎ’9–0amHžĐőŠrŮa™–nJ|‚h >GœsÎ9BË€^rÉ%b<Ą›wËz…âˆç<ç9bl— šăŽ;ÄÄ Ż„—_~9œwŢybŠ‘o~ó›Büđҗž.şč"řÁ~ŸůĚgŕčŃY1ŮCyĄˆ• ÁĽO_ńŠW@ˇŰ…O}ęS“ći§VśeLÇ=p2 N,!‚ ˆQ$ő-˜%îc YŕˇúŘo™řéŰ:Ö÷Ą ëÝ|ż AąĘŔÚďół03= ÓÓSĐëŔÄř¸0¨w:™0ŚgłđeU­_‰ŕvD7ŞíŕLŻ~ăuĂżÝŢ_üޏ†)ţ_X€Ĺ…E1[d߁ĂpöٟÚxŕlĄ—ÎřŔ™$řˆ4>>&ÖK•!ÝEťvíˆlŰś­,ׁÄŕÇÖ­[DX,nĂt0,~ĐűţŁ]Ź!`9A „0q˜_œ…ď˙řfřŢnHÁşdT}1C6:\^ˁł.<”–•L™Ě´0z\˝˙ľóŤ;_ąýöúňMĆľęoŚwú}Ôö:KC a˛ţóĚü.ŽS˝Q¤œ çú嘸lgśi”tš˛â_ć¤-ĘYÔQߏň¤kŞy°ĐĽ93݃š ϋYęexmiń,Ćdiíg6#Kýˇ}ńXş*śO´epŻ{üźTç˜ófĺ+/ÇCóϊˇű;V^k~,ăÁřuđŔJޏ"&” ¤kĄścéŮŠĘčoíëňˆĺęÜș7žź°ń¸žşć¤“D^ľá@ˆ”~Pž“ź3p%iŕĺý/V7e[ŞÎA(ţĚ ÜßXFm[^ôeX˝ű˝Ç•×ŮSÍ;`Ţç8Öń¨ş%ĘŤí*ÜÄÄ<ęô śnŢS˝1ƒąÎXoŹ #Ć đŻ>^€câŘĘżfMăíą\ă=Qŕť>zśTc ó °Ľ7€ďů‡†C‡őƗÖÁ† zc óÂĂEwą “˘âÎÍ͋ńôFiěßżż3P2ĐóŽ`ůŐřć‹Ç€Ëb=ðX,†Ç…Üž{ś VÇCńŃP˜ÜĎ1=lƒň$ęî["{k9ţqÓŠ–řŕĆĄŐúy0ŹqUŻ U]7Ô-„YÍá‡DŹH–kĺĚ!,ţp=+úx!-aĐârQÄjĹ čBg˖-Ćď™ő3âŁ@Q.Eę'—Ë„lq˝\nŘ8#>\ŽEsŒkĹąÝ[&Š,đ˝jŕG•ƒ ‚ F XAAŹ2ÜAS9€Ił’‚X)¤˘,qw7pyW!CrœÂ˜V“î°=XŹŤSʈœ×ěď'MÄw-ëŻďrŇ´Žfí:CŒ0Üţ@żŽ×‰˙Z”ᄾˇŸ6\CŁvÂĺHČhÇľ ´­ôÓX! ĹíÉ˝Ţ7†Ţ&t46•؇—í&$˜“ŰÍtÍ}iWÂ×>í6ŒžO"Â#ˆłěPč÷Mß=4—Ę`šÇ#Ç|xáUfÉq‚ ‚ $° ‚ ‚AšÎÓ ĽËfÍ-ŠŘAŃ̨ΟFćůĽ‚őYůÍó“e­ÜÁťĺĐ7ŕąYŽä…÷J=˝Â%:— ęłWőó—q͌ËÜźJŁŽrŻ•ł ľľ5­)7ŁĄˆ%x‘ˇľÔŠoż +—Ľđ”ĽÁş*A13“s˛hhôÖӐƞŘLOŸˇ‚@Hćńœŕ+[ďźf,|}ë˝%Čô•ńˇô݊m"ŻŽ‡ř]ÚŇš Ď2sI‘r Ďň ĺľĎą‚żěؗőâŠ3ĘxŕŮŐj˞´™ž&ô#vŔ~!÷œKłĎѡšő͌g/%âŻ"Z›÷,Ť’Ú6Đ3ˆ™~˝Ç<śŽ5řڅřćÄĺŞđ¤Áľ}mŚL—gŽzęx]ŸX&Äöžŕ’™Ő´F”`Š1X•u …hÂw_3D…˛ŰX%CqMrpîÁnnx4‰ ¤@iƒäżzRŻŤ™V)XՇ•˃Yˇ ՗ˀŠp —7˛‹‹ĺȊç $/űB>²6bŘ 2^04hIQ‚XÓ,őxA,7$° ‚ ‚Ab.¨íýŐŃM^f‚ šĄŒ1v_SLĹżEčqŽ)<°YĘxV•9).ÍhŠ–t)/gĺá1Ą%Pu<˘ƒĆKK(+ŮĚäš1ŻĄŃŽŠˆĂ2<–Ű ™2xl\Kż|ŽŠK™{Ÿ‡Üĺ˛"‘´ÖřÝ}MCăAŒË3^@Ë ,‚ ‚ F”TסúlP,!b˜¨ž(eÖ\;ƒ¸źf{|TŚnđšJŁ0B§ ň0eĹŮŕj6uCăš×Eůđúpş?¤×E2!ęŢFZ4iŠdYŔč›TćšŃIČ3_ *ŞrqŻxĂýf˘ů;†LŤţ[ƒŹÂáč"šŸk办›.÷ťy5{]ngM›¨×<&{Ÿ^Ş2`Ałböž›ŽW_R´Ń<ńZ*A†úŤ‹‚ĎŒ\; \ő\ÜxŽ4r2ěŰęŘĚ2ƒu\Ąâ×ý´b™żľó,Żł*”^Çę˘Ýúç_‚kBžP9Ëţ˘ŠŔžmp­ŐÇśn;ęHĄY„Č<ץîýBøŚď¨ó:"źżđhwé•ŔמԞX^yŃćň`ŸéUxśi …U~-źi‰ďŞÝőАe,(ŽČě>ŢÓ-1ëtá÷˜¸"ëŁ_#V4^@Ĩąôăą|Ŕ‚ ‚ bDi<ť4˛n1AÄ ÄfX†öę@‰Ď>D]ĺG`ʰK°¨Q2VΘAŰNŻŽĚib“ţőű&žL\3§úËŹżƒ‘ęj?t}š×3_°Ă4Ň U–Bšt„žŽ>ë>ščË p¨fźqĽP8׌߮Ű‚céîŸYžŘFCâ˝­r^´yoFĽôĂMëęjY-őz!̰Ŕšib—çފd,™P”3cĄl̰P.ËQ]ˇüěMŁÚ暡‰q+í”4Ër‚:ýiíF﯑Ü*›m$¨„Q…ČŽ…Ó{2`ĆWăœGۋŮĆŞľ(Xm“ ő'~‘ 8ŰtAXíâ\ľcsi&Łęz•é†+‘öŤv,L ˙ÄÄLžs`n Ëź]‡%/%Ü#˜ÉÁě'˜ŞbZ]W‚­°F>ĎÄÚ†Ć ‚VÓxA¤B ‚ ‚ ˆU –1 tcšoVŠÎʸ[“űú §›’&ˇŒ;PľR\Š§ĐŚ0b%̊Œ•ąŞłĘ2ĆËţm/ ˘›ĚXbíjłMĽ¤•:Ű[lË@ ŹöIuÜ6ČXÜSŽR+a{ŕŚń=ˇç›skfzY23\#ᓯýˇŘW¸2ŽóHě`ţ K}ôžśęŸŤ˛Şá~—Í2˜3úô㑗˜o ďyd–Ľř×LW’[Ńíă yŤPĺŇľś!ލŁĘĂ<—Ŕ'~ąęz j‹sĄľŸń{ŽŇ=vťŹnjÜŠ—[lVŘÉŚ×X°Ąp×[DůŒç ;Sc‰ާ™—^.T‘Őáfç,cĆůôőo*˝Śr0łeUąĚ4Xľ_@(o\ťú˘”V˜Ü:łYQé|gLď ˘ 4^@Ä0XýăáB ‚ ‚ ˆUBlöADÔyAĐ×\]9Ř?éÇPg°ś ––k“ˇfšËă0,üFxŸŃť2DyÄޔü¸łü•ˆ!wŠ|ËmĚŕM_?NYOó2?ÓHŃI6`?ÇK=…v>‹%ęűťîrç$ęí!<ŕn 'lƒĄ48ÇĹ>t!‰¸>ú!ÜźˇČßšČ'×ǗžřÎôíF(hŠ˙źŘ×Uť×Úלk­ó4Ż úń3yÄŐR؆uÁM´ôPwĚvžĽ+霙B×sŰ,Ęň°á.kMx߼x!Jbćó$7OŸŠbgŮ*“#:cfÚř7¤—iˋk/ b”ĆxAŒ2$° ‚ ‚AěŽÔ™Ëöě‚ ˆśČ25s;>CÎŢ×ţŔIZˇÜ6Ś‘ËŢšĽÎŘnr6 lÍ´ľĺ( hëÓQaíÁŃjđÔQPý7Ď҅?ĘӅáĄBŽp+ź0„÷>h€Ě=ç<'× ĆŞ}ŚJśôpŹ,¤›6 zÎp-<&ÄŇö2g™Ű˙*ŁnŐj–|ŕšQ•Ü.Ÿ˝ěˆŘVˆ-„œ…Ň‚Ňh]gęőÁS6w›ź–ܤ´łŞŢ¤zŻQ^<:ňZGÄ/ŇÊ˝]ü[ć=(~‘„{Şĺ8ĚÖíx›á5łŘšűŢÁ 5€´‰/ ˛úúˇÂťӔ!hœQĎeD(ĘĚZ<%+–ˇq[°}n¤€ˆkőľ ~1ĂWyť5>Ż.C)6Óű­\Ë'+tE33ňÔ&śČ˘ĚKxđVQb @ăAŒŁ3^@K ,‚ ‚ FĐ‹GÝ ˆ­'‚h‹şţ'<#9š*ÔĺŞp̓ëf™T˛Ú|ŇŠ5ŕƒÇTŢbţm0jĺ‘řD‰đzS˘k Wqüm&8ĐŘş¸˘˙°Š Ľh@űmĚâöyođć› ‘„nŒäšˇ3n1x0|Š}h‘ \rĽ) żš'Џ0Á‚ŠĽ ł/ŤjŠ?dZš“ťJŽŽbžt’ĺk:`­Ä3Q*+ĺÚ¸y6iűćYuäU˜ÜłDIMbÚöŹqÓ7D4C¤tŔ`.cg4Ź~ĐLחGřÚ§”Č_nł­éç(3¨pv)ÜXŇFśqIŠ:çćR!e`ť/QĆeŤźžĂ¨Dv˛5Ëpń˘q—xąÉ|˜(ÁSšÔ‡%˘PB [hĄö+ěĽGš:ĺĚ„Ć ‚5†3^@Ł ,‚ ‚ F{PWwݧ źĆĹ-ADčƒ80ŤĎ– NÓú$i>[zŇ)FĂŚ†EćýŸQ[Ǡ†ŃF, Á:Ú@\á5Â]čmÊŐ,řţźYtľďńň÷óÜ ëIá6_Żł†NĞg^—GćőPĄŸڏŢç`n(Žp\ď3˝eŠý†T#cÖEPŐš2CŚö=Nz˙ îŇJŘâJŠž@ŤSŇ2k{#ńćË <:=„}/pĘ2ţ99hK~X{*q+E!vz*˘Ýޔ1żîtçőAźÂsżoëpH5Nř겯Gˆ Ŕ|ŰęďiB )*ĐŽg•x‚ĺĽČŞSŚ'Óô—%3ł›#y{îť`´^mk/żŇŁóočÖĄŁWSŠŹŹp\•ňhĄÚŻŰΉľ 1* oź€ FXAAŒ j0$ô2â ô˘ĄĄ˜Ňív ˘MT_¤÷IL›]nďÓu—Óh6 Őâ Rj­×wf|›gÄžGŒ‚Čb%‰5RĹÁYěʨčO<$&eĆú:X{œ5×*I`dyeŕ‘YôŞ|Ő9ućĘ4[‰-Ě8şXŔ0‘Şrp]üA/MэYv=/EFyxĺ}ÂČß5zY“óőDŞYúzż›šĎ‚e˙lULÜ5Zű`ĹĚŽm`źőmĆođŁÇő-ëR‰ƒđ´ô]bfKč<÷śČţ&ԟóćişqxđgjúžwŁŢëů;ą™‚ĄyŃKřkeľ—žéĄŞtt!‚íń%T^$ˇźhČp˜ŽżDÎłWý\^‰âT%ÔE_ B\&ČöxA:4^@Ä(ąRÇ bH`AA1‚¤(źq€D ’˜/3@Ń*Ęř§Îâ6œŐ‰{ DTIJ7ß5Á†Ô†™A{˜i…\š‡ö-%m–Ő#‡Ajžápő0‚i6gTĺZ1„Š•†=;VĺÁt1 㕇hö,đÝSxŕ֔qÝ(Šú#źąO–Ő0Â÷‰Ď`ĺüöŽMŔ-‘….ů݌kĎěÓóCOLWšž,ŒěÁ|_ýJ9+ içFÝPßÓ˝ViÖÔÇ朘çÁ—~š‡űâ„ ç†÷•š6ŻDޚŁyÍŞÍk-M_ţžü|}€Qőp {=ł^Ř#kŮýv\\ŽĘI^ţ›1­Ď1rö˝+ĹE!2Mî:¤°Dą{ʊY„,źĽ˜!;~)D(—Oxą$ˆęĂ \W˜ @ŹIhź€ ˆQbՍD$° ‚ ‚A|/ęƒ/+Ýy266SS“0>>Ţű>N§÷éß CáűĄn7‡ĹĹEXXX„šššŢgś×ą^˙3á1Şő YŐgĆŕł2r0Ž ĄÁCöńЁĄ˛i§xčsVő¨ t-‡¨BZ÷ęß¤ůŒđV<†4HBfמĄň2cú¸nôŤ~3MTP„Ë`ËKÉAůŔč)ř<%ČŢÜȡ_B†ŤĐšPF}}ˇ4ĘűŠž]NZ -uaz(ź‡xDNżŹĽaîŻ?Ś*7ž1OyÝ|ëąË̃aD§-ëĆĆ:⃃´ÓӓpäČ=zćçg{Ű'ʙ)ö€ď(aĚôç̘ń\ÍÂőÇM0Ďű„ŠĐš¨fĆşaUYĆnƢż}i ƒ~ÄË[gââŠŇŔďłÓŒpU6ށŻ]SkąsŤ3î>Íc‚ˇŽëNîK4l"Q˜&ś¨ŠrZ¸uBýFűŚu-íJWĄŐĚ}=^ŘŕZ_Ý2F<7Â2&Ń˝TűÍ~GOĂüŽyЈœŸwć•˲Ďäđ˘>䖁PţńR0oœX˝ŕŹšđ`X„ź…Ä#a-~ßŇýŔýY SăꍰĹŐ/ŰTJ›iŇż…úáĆ÷°ĐýƒŠ#¨ţ…šű2ףúcSşůä°~ý ĚĚ̈Y(ŠŘŹ;‚ ˆA° Ř÷lذĂ;xđ`oĐdA Ţ*ڞ™;(ÁŐ@”…˘ü.‡f€§2×řM>Ż•Śéńô#ŒX„Ż[řţʆç<*]Ň{ž5ŒşRˆ%ląP(}Có¤ ˙P€yájŘIÇۊ€çĹZÎĚ Ë=y§˘wUüJt3—3řœŮňn5ŘŹ{żŕĽ@ðÝ" ÂŚ—Ď‘ćxP!¤WżýWˇŃp§Ä#fęzs-Ž&ţźš{ĘĽÎ9W˘Ć°˛ Ő đéűé›Í8îýŔŃäĂť=„ŮI˝ßŠX*$éţ$k¸ęGđ˛'Dq*CuďTŇH@jX¸-´Ä’¨îœ;‹ŁĐĄCăA,7+}ź€ úAA#ˆz9)]Ĺë§âJpŔÝ{ÚĐK AĂ@ŐżOMMA–u`ßžý˝A“y1‚3SôpËÝ/ą†ăČuFťŘń°>gţŞĂ^Ł4oęM –OzŮÚşv+GŹÁ\KzĎs…ÜťÚhóú<˜˘sŸé‘B7’sÍđnŘ+íÁô˘Ń¸ÄĺĹ/zÁ˛XşŠÓ'dR˙¨ížňvœ*mľ›łŮ}% ­-ĎîYöŁré ˇďWűôه ű)KݖɞsŸ7 ?yáĽŔ-?+óáVˇüś”Ĺünˆm<ńőY•z\Ć5Ŕ)SxC@đ>ĺńäą\ýˇ_d!8˘Ý3ť_ƒ#őGţ:ă,ÓĂÜ6VőM ÷˛`qjâ1ˆŽrĂk~k/ b”XÉăŃ/$° ‚ ‚aÔ` žt,,HĹ÷úőëĹZ…:Ë=JÄÚ@ €č¨‰‰qŃ/íŢ˝[ŹőŹďo#?DîŇ Z†k{5yľEkÄZZ‘ĹňÎŽt.†Zi^ŘÚWôCX8PœWˆ‰+¸6Ă۞Ő]ő=ęyf_L+“ůŐ\˝žšAŤ2„=O¸†io‘e‚üB Ý3/¨YţUœzĎ;Ľ1N†ĺČ śĘ׉_ţ5K¤Yx ¨0Qîëmď *ĎţŚsaQáóďK=.ŞSIŤ: ˇümß/ … ÷ł~™Gzœ.HŠ_Ö#3ź¨WÚ=[-cÄp–Üńyť0z”ź×f2nĺ͒ߟRĂë§´‘ř¤B,‡î.D/ b”Xęń‚XNH`AA1˘¨<0Y\\Ű6mÚccr˜Ň?łÔßA 5b÷3ř×YĹŮr‡*ĂľšÖselMŔAÍgC°J8ç€ë†×pź,ż)KŮĎŻ‰yž™?š=ŕč ăZ#m3qШĐo™źËe€ßŔm‡ĆQ΢gLŠ zF%Ć$+… ŢüŹxaďţđr@ĘiJi÷!cvm_Z x4CDaÁ‡$ƒp$lŘŽú^_Ţö÷ÜňHâ kî  =?uuχ¤|4œMšĐĄú>h[4b˘DťnĽŢăŐšď4Œ'ąęĄQË2‘:ž+Ćďaö²Ü(ťOĐŹţš!ĺžŘH˜Â•čĹ +.LŃä‰5 1J,çxA,$° ‚ ‚QPٍŕK˜ŕڅÓÓSb›š¨P3W”Ť=‚ ˆaᛑŢéd˝ţiRŹŻŞIÔ씥Fäo´r°~Lm~DÚܝŰ&Ë=ޖ‹Ľˆă#X~ž•3¤}qBůóČ oI^lovŢětšž÷a PŚÖ=_ż oâ Ż8A7œ‚ň]azˇ(“Ž F¸ŮNĎő^WԟŤ´íUÉŐ,=×Cƒ˜)É"yTéWuŇçÉBžŚJdŔ!Ôű2X­‡Ÿ˘¸‘ýÜ{íCőA‘—>4Ŕé?í˛b;*ěĎ‘FfśŇHééMĎ%ŚŔ†3^kŔîˇÝůâ-E?jÓĆyĐvť-ŔŞűé”×CÔ݈(MŻ—źTxĎMn•MK“ŤŹ´kËÞ,Ęôsđć—RŻŰ@ĎÇ::çb”âbÍBăAŒ"Ł>^@mA ‚ ‚ ˆF_Kuăƍ ÇIL—{ z1!b˜řflVn‰ŒMˆ5VçććÄŕ-~–ť_ňćߌ¸BX„šŐ°Ô¤8Íi#Mż!sxŠĄ@3ŇkáĂ Ŕ°×Íŕ΄;VÓT)ô0Ę<ŽRĚ#3 ËkĂˇŻĽz^p˝xD‘ח ŕň\Ű Éň1ĂWřҲ˝”´Űĺ ~5Kß-ƒĘ[Ű'ÄCP“őzݤ …`Ís¨ˇŽĘ˜Ţ丟×ÔuÍźámO&źěfmMˆŚ˝ź[V–ŚIz.!‘CúíOÍ>]ďĎĚtĹ6MKĄ<5…ď iĺőH\Ľ”ş¤÷Š6u>|™ű=Y”xđHβ•ţ€×ŇŇ?v#1*ŹÄń‚XAAŒ8Ęíçää$Č 'ţz1!ˆ†kťŞÁćęcÔL8tG<>>łłłĐ„˜a¨#|­űra=ɓâ7cp+GŰˆQ&Ĺ0¨Œ^ƒ"FąĎF™RîciăŢxA{ďcąœŔ‚ ‚ b€/3h¸$bÁj~Ż0pŕ¤Óé´bW4ň…M+‹2Š˝\ˆ6Ϗžćj4ž+î7A÷“ś>sYßîdęŇ&ćŰňevŻŻżÎćžxÎóuĐWŻEĂú§{F¨–őĐĘTb¸§5Č_ë‡Ďô°Ú2"vž*°[ü ڟYŢKδúăS$í"M8S\˘ŽxmČŤíĚ(š“nxš\ŚA°áIĽč3mɍĘÓÓźpí:š"űŘyq˝UšćÎLíĐý€Ĺzá ^RbXľĎܑŸë15ţ“v'ŠEoKásÄPČ(cÔŃBüŔ˝^v|ŞŃ*ÔžĚŠX´ 3-`şČ Q“şźrřŔ*ą†ôžÁtőFUŽRÜ!ËĂĹń,-’@Sƒ -ˆ&ĐxA,ś¸?Őł }U˘|Ţgú-Sż÷G-5ÔF™aŒÄrBw]‚ ‚ ˆGžhĺ@ckA ͨ3H*#1X˘”CúĚX‡]ĹkBi¤17B¨ł.í<Œ­éAĽÔcć9˛S mqE]ůôe úĹö†ŕ ać)eÁŮ6Ąř1ăkmš2BůÝ5śËÝ\łW›„ŞżŇ=ŘÉ8fŰHy•‘цÁłĘŤÄEfŞd~Ăsĺ ¸ž ěňްĆV¨Ä ‰×ƒŐńÂťE^ =üé™÷ ×{‡~Ž´kĹýÇQÖ΍U¸Ľ~ájÉhnUVÔťhœ đK¤a”'hއĽ&Ľ>š$§:iIŢTü§Ěďbe%Ňa˛NuŔ×ÉZR¤ Ž:#pŤ.…LÖˆ ”¸ń ™k˜Â bíAă1Řý4 şÝn)žĐřQËdŘń›Ţ'RËŁźÝČ%;¸! PËučeޏôi+ˆŐ ,‚ ‚ VťA+mÎŤggÂĚUÓV\7Ü Ľ?‘źË# ( ź4qCĘŽ?ç}ä͢tÝL÷śiklŘi6/„šIßBRž™cnvj{scŘ Ä ěö~(^ďc)ůĺF,ĹI˘KK“gŐDY˝%tôtŔ’äe9Ő,sp„/zy ŰlČ&^'”Š™ÝĎľUO2<ťßÎC…bŕ:Čkmx_(Ęz÷bĄÎ¨ş'0oú~ă9óŚe“ÇŒěV{vÄ!›{M5^eœW?ŹÄBâ 3˝Ř5lÖW¸Ń™˙ť‘˝kŘ×ËŐvôÎŒâÁ:|łO Íě­Â֕ź"˛äű×s‰÷—źěO=bĘ0ď?Ş<éqÄh°°°‹‹‹B\uQƒ.b@occcâ3>>m˘ß1o,“*}¨2ŠňčeÂňŕ÷öŠÄ&ąŇ!AAĈC/ąząĚ b`tçŢ.ÜśkvîĎaď‘ćť)qSóă05žÁÉ[Çŕ´m8uŰʛȤĽ¤…Y}vÎňRc4兕…Ëů­Ŕ"á 6kttúç~fÄĆÂ/—˜"Vw¸šVGÁYőIůúĹAƒŁî•ZŔ2´'EĐqT!ŇŇŠţežřÜNŸißőĐuUˆ›šaô4 ďźü⣜ĺœ'‰+źĹ)•h̡’ú¨ëN›×Ž\Íx˝mşbˆň§ö×6#3_™‹@†XŁݍ>ŇOO×c8W"G ÂýíŇŽżÜşÎ<ÎÎW+•––Rŕ)ŠŽ@_M×NÓÔÎDr˛ňaÜH \ßč׳,…Ş6ÎŹ[žd¨Ő[Ké-R˝Üřz™ňX˜-ŕ` ŞŤw‰:ôsëićĄňĽ^Ůş6ާr‚ešď+/ ˆŃ… sss0??_ŠttÁ~Pě€aQȀ‚†ÉÉI!nh%Ĺ‹XŔ‚ ‚ ‚ bŮŔ‘…>wĂQřřfáŽ=ópp–Ə”ĄŒă‘2Ť,.rxp˙"<°ż ˇ<8×ŢyžńČ xĺ7ÁúÉśN–bĤĆâΠÚĎ#ÇeŸ<˛k, iŢ%–ň⤘ÔÂĺęgĐĐ5rŻ\xWű{%ŚĐ̙š1=Ď]̈́,i&RŞ4łę@^wů„ţűD÷,-5rɖT!Ÿ!đŠ+Âćýş~`Řw–T7NGĹRŢFôsëxm& "7ë;|ň•hř#‘ŃޙŐ˙yDíP(;–.Ő3WëߣŰÎAŃ6Řgٍâȑ#âŻZÄYVÎsO@ń‚žŠ4 ˛dŚ…Â ,桗I_ţÍ.žAŚƒŰڧ§[Y,Ő=œ † ,‚ b„ĄABšĄę@Ť s‹‹đáď†Oüđ(Œ‡" ,׆ Är&ƒžŁĐX7ąZ '0‚ ‚ ˆĽŠ1ƒ ˆ•†¸ý`ţţ{ł°çpŚ7°/ĺœŇ8źć‰ÓpÁÉ0=žÁXo $+Ć1ÎŢpŮYcđ/7×Ü0˝n:˜Ă?ý|Ísřłš ˜hôUĘîSOň¤8Ăč ‰+|Ë}0oŒÁĆ}d¨†˙4Eu­Űœ]ĺ‡{ ”âëTKt"Şí2´Ľ~g[§%Ě-r,dÜؗëá¸f`eEş–ń>&Љço hrPk%Ď<ďŐ˝ĘÔëŰďkĽüÖ÷G…2šbĄNPSŚ%Â{ŒĹŕŚcK\šœ{“Eăšőeđ5źƒńKĎGĂyO×ô—0„ťŃ€7'™}č~ÉEąd‹eX´Ď˘ ąˆČ&W˘‚P:Ě/l@áO§J¨Ě+~"Œz4}<. á!důŽ6ą'—J0% CoŒk/ ˆĺĹ(†ĐĹ ƒ˘žÁ0݉‰ ą\ˆ˝ ‰ë1ŠďÚě0-LE(üĺMk XAAA,5˝Áˆ/Ţ4űá,<|8‡AÍĘŐP|žyîüöÓ×ÁI[Đ䐁mlîdřa°cÓźę˛œ˝}ŢňĹ#p˙ŢYřćíGá­×tŕßýňƑY´20TN9͓fč/…÷†ĘřÓý pÜŔ|9˝8ј<ćö9!f$Ž=ó a†= ŮŻXxœ(ăŚz¨‚‡×ČŹ€L3-úÜW3×˝Y‰iŕŐ@ś™—żÜ˝áĺ*Ž^“Ĺp-.cŚa–—ž7Ź$.áíâ_¨‡%Ďre*fřEƏ„ť›„› 2 čý"Ä ëoŸ´-n Ç°0GüŤÝ/Mѧ-řjrď(IՅƒţČRuÂC3{ź=éF#Ł|ľł˘‹rđÁ~˜wŚĺ9w4‚ ˆľKHx‡bô1 PЀé+Ą÷}ŸZŇŁMÁ‡zëŔĽKěĽB–â=š FXAAŹRđĽęđáĂâ%gffĆyŮŮťw/LNNŠĎĄC‡„űATČ|);zô¨xůĂ2ažř‰/­čć]úÖ˘ÄcĹýxœƒŹUIKĹ/vwáęŸĚÂν݁ÍCĎĽ™ŠĂá)gOÁë/ß'mą=´ď•§š¤ČegMÂżĺxËŕƒóđ?:—Ÿ5O8s ˜žČű* ŠĄÍY9ćĚř¸Á2wĽöŕ2ĹžŒyíăş7Eók5˜!ʏŠMĹ2xLyąâ­.|ŹKoŠă!Ą@#Ccf 3$š2X:K ¸KNˆŮu Ú >;¸śó4ƒşk|-Je -dXf„ŠśŰבGói„–؉‹IŒřć: Ѱ2ÉBĚÂŰ8çJ^Áź;Łĺї|)ľŹ~ Ľô ßűM Ćý”œh ďĂúy`ƒő)ĺRHĹĹÍ Iiuœyq̝€çŸaKŹ__´ŤN™.÷ŢgËDÝg.făîKƒ×Ÿę~’ːąŠ:hŔĹą4ââť4ţľ÷ďßż_źcoÚ´ úg˝ăű˙úőëô}ĺÁ1 ľ Ž%`yqýşuëœ6‚ůŕr 8ž€űŰű̏Á˛LLŕ˜Ę„߈YíĄ–Ň8rä¨đ86>>ŃťŢӎˇź>X7đ˘@뎅Ľôł>>GbZrŠŚöÁôńą.áqUKą Ç͆%řPéŤ2ůň'ˆľĆhź9AA­łgĎřŤżú+ř‹żř ń"Ѓ/‚Ż|ĺ+áSŸúÜ˙ýđŸţÓ‚ýčG0lvíÚůČGŕţčŕßü›oxĂŕ]ďzÜwß}ŇĐ ˙Ĺ/~żů›ż 7Ýt“w˙ƒ>ż÷{ż?ůÉO†ŚÖ'ˆśčöŞčî^€›XBg74›ä…aWýÂď9œşm ^tńz8ýXĘŔ罂9żd˜'Ÿ5/Ü´°,ö‰>~]ođia ŒúĹäčЧ ԌT}fjÓ2ƒoýî4üRať\ס늠ߓŢR}rń‰çY•Ë —ł¤2çœ/ďąö™Ÿ„%–—Ÿ*nRÜL×ĚË<çŕ,zžƒŃĘs– /œw=ađßđyLČÖ°O€ţčëœůĽœĂP~vÜĐöjz•žldÄ>ôó;îÚtjŰ­/R&ú,ąbÎy'—Âő“[ţžźĺŕţŮ˝mzáA,í3ĚsMČő×_/ŢłńýüŽ;îpöç;߁ç=ďyđÇüÇ}×Ç뎝ţđ˙îžűîÚ°7ÜpźéMo‚ťîşËť˙Ÿ˙ůŸáůĎžçءoŸąË÷Ţ÷ž^ň’—Ŕ?řA¨ĂŁ@âž{îI2JŁřăóŸ˙<źůÍÚË{?ěßţĂřOđĺ/EÄżăŽ_ôĆ8~'8fA´×ţcűDŻ^ýż˝q 7Á[ßú6¸ńƛ‚סc]˙Ÿ˙óÂßřFQÇŢ÷ž÷ÁîÝť 5őgULëÄ0Á[†ŐÁqĹGÍIńr ĹJĚċOľżţX0„sđŇđý°?…\?ąpÁ‚čgË:;x9H Zںׇňă7¸WĄ†„nŒł,/COyőę¸tq›§ÜÉžśÎÄűěJÂCŤ ¸a}Zę'3?Yˇ”‚iíÄďnÚ<ŽŇmÄĎó\ŤŔ§ęŽW˙49Wąëëť^MÓč÷˜$ć9•×ç/ÎK$œęďźĺSçüĺŢ6X÷ čOźM^őAƒž÷"šŢľˇ[3tqo€ĄövÄ˝AŕxZíŮř˙ř˙(Ć Ú*ľśôşyóÍ7;‚ œT‚Œ7&Ľ…Fâď˙űđć7żYŒ ĘÖ­[ŕ%/y1ěŘąˆážő­ďŔ7žńŢŃK„x˝†|čC†‡zČE4Ÿţô§…— ăP(şćškDJőbĄŔşƒb†AúţT>>„7śÝŚŢ+ţÇ˙řđ[żő[bY‘Ô2$Ăô’A+ Z"„ ‚ b•‚nQ4îűnżýv8÷ÜsËľqŕáźó΃“O>Y¸ŕD—ĘÍžźÝ{ď˝pçwŠ­Í›7‹°ř2ŠŰP°ń¸Ç=N¸ěDqÎ.šđ … _´žřĹ/ÂE]ÇźQžţđ‡bŕćŻx<ţń/]~žqĆâĹîŰßţ6źđ…/ap&‚˘‹ .¸@ ’ ‹Oĺć˅ǴsçÎŇ])yŽ V ěĎá·qPB3Zô4Dœ°q .=mŒwäś`ş‘]ŚĆŕŏ™‚żüęĚ.,‹NŹ]Ş`ĽĄFő3Pœ:—J(­ş|š”cäÝś–†ô0Ü0´ŰîĺőănM1áKa€ÇSA(|`p–\ĺ/ÂH] â!݃ăŢ`ö^î ŽÎUÎ=łó á‡JМUŽÂĽ7ŢJ5aF5´ó*Ý9+i/‚ŁĄJ-uá)ŸÝdyźE:zŠŻ+Şá5éÚákÓ­Űď\t÷:űSľÎ—ÝěőŻ+ŘęŹö˝űaéďÉŢ2•k´řÂ[›­0fžţ¨ÚŢŞ>ČĽoThn-ŃĂ5×îćvƒša}3ƒń"ÄpZg?w‚ă10žpC$ˆ–Ůž}ťř{Ë-ˇŔĽ—^ ŰśmżŃX"ńÝ—žP ×|ŕÄ;=Ž9<ň‘,÷ăřÂĎţs1n€†oŸxáÖ[oăř‚PËnÄŔśxꊧ Ł3 BpŒC-sŠ9pœÇtpLĂâ„O8űěłĹXŽm w {řÚמ_|1œvÚiâ7zĹąĚΪ-›\–¤ZšgúăŘ÷ŐqbŢuËŁqŘßűŢ÷ĘҳžőLQ'ÖŻŸ?ýÓ˙*Ž)Ög}y`}Ä:óâżN?ýtą+ŠčËIáŘ×°=8(AÖűŢd—Ă *řKÇŐ2!ú=łíwd‚X Ŕ‚ ‚ bsâ‰'Š 8xđ "ŕŔÂř#řW˙ę_‰0řRůž÷ý_xőŤ_ ÇwœxůüÇüœXż_ţ÷îÝ ?řÁuđŞW˝Ş70q;|üă‡3Ď<ślŮ _úҗᓟü$üÇ˙řá‰O|ěÜy?ü—˙ňfř?˙ç˙ |ٸ;v/Oô^,ăŻ˙úŻ—#˜×ŐW_ §œrŠXóôÓĎ/”˜î…>FŹ?ůýď˙>÷šĎ‰88€ąœŤË LŹ>¤A`ď‘.ó 0ŸůüsĚąb ŕg?ťą7ńÄŇËĺÇ?ţ xž(ʔç\ô/(A/čí˂ŒŻ~őkđÚמś7~°îšçŢ^ůŽöŽý˝qŠ3áá‡wĂ?üĂ?ń†G‘ÄŐW^,Gş}űq˘źĄžÓ{ó›˙+|řÏçÇ\žđ…/ô ŇŹ7ţ1&ÎĂSŸz9<íiOăD=:+Žë/ýŇ/•×'áÄ Űoż.šäcź Żď˝÷Ţ׍33âúâuA‘ŠsžúÔ§Uď#‰ˇČŇcU!z¨ֈ%‹éǖŇŐˤ¼=ű¨2)jú{ԖIy°Đď—$Ž Ö"$° ‚ ‚XĹŕ,,ůú׿.ÖWDhŕËӓžôä2ŕK&ŽüÓ?ýłŘ˙kżökpěąÇÂ-ˇÜ ˙ţß˙{xÜă.37ppŕÖ[o" (Yż~ƒxaĹ]GœxâIÎ ůůąNéćÍ[Ę Tž?á OĐś01 ‚łgpVž(?ôĐ.QF܎8hƒË†źěe//Ď_řÂ5˝<!i”’ – 9xsdŽ7y͇…ą0覔¸ĺ1+‡ďĹČaŻ]ŹŘşąăoŠÍ˘Wœ“ˇMöÚŮKśLĄ-rËCB•žË:f•É볂śƒ/čÓ"Y˜ĆËô˛çưZÚuĆíëđWQ™'tměp˛­yöq=Ľ,(~đ °¸­†Đ ¨ŹP"p§”Pzâ4ü]´vnűhŞźfkaŠ€8ć`=çfFĘa%Šy~JƒšÚÉ´Ó]_G=×Nz-tŠĚŠĎnËmúŠxću°~_Ý}F,Śí÷ô=<$D˛źSč*ŸÁ‡UÂ-ÓG¸w—EŕVżŐ˝żúWŰé~żœë/WÜžŃĎÜ#ˆ5Ö÷sÎ9GxŔ÷|?ŔwďĎ}îjxîsŸ+ŒŠŞ}âŘŔˇžőmxěc O{ÚSĹžO~ňSđÎwţ\pÁ…p˙ýÂŐWA ޏâbŇĆß˙ýßĂÜÜźhf8.đ—ůNáóĹ/~‘˜<Ţ5żýíb=–#Ë:pŢy‚o~ó›˝1ŽÂ3Ä=÷Ü7ÝôsxŐŤ^ Ÿýěg 7‡ëŽűĄ0ş_yĺ•=ƒú#Ĺ䒷źĺ­bBÉŤ_ý*xöłEŕ_ţňWŔqÇ+ĆPT‚Ç‚C>ż˙űoęóˇŕE/z‘8/u=-ć˝gĎ^řâż7n‚—źä%BpńÝď~Wx÷ŔsF‹ţY\ě ĄĚƍJ‘l§“ o)8ćd{6×ëöÄÄd99ç›ßüźň•ŻěŐĹóĄ)ş°"$˛Ŕmý×( Ӆ׼ćŐb™ž>O­žű’ĹE7Ţx#|ík_%޸˙ţ‡zíŔ{ßó>Ž09lß~ʍëuĺQůđŔ33AŹH`AAąJQƒŽ80€./Ń=%œŕŕÎٲe“çÁčíBPtŃíćâg­źđ…/1nşé&ńˆűQn/q°×ą|ĘSžăăćc&–ĂęęűššřŻ˙őOEú¸˙ŹłÎž,đ˝LšÝśmk5s¸ř‚eĂ(8ëä”SNŰ.ťě2řň—ż ąŔ1‰Eü€źđpŔʙ—r ?Á0_xŻXär5ňŹ÷›]5Ŕßf™gĺ€ä,śMáű¤™8,`đ㕑Ű€ˆö4˘?îp\+őXbĺYrÜa+Éaj Ă öۍűĂLˇß´JŁ3W“PyCç2ŠŰ C4ç2ő0Éd‰ĆVSő&sguëĎë‚V=İ2H(‰đrAnÉ wĚ*œ“ ĆOÉwđđĚúëťŢĹÖŇľDó3–)ę–ę.RękČHß/ƒöJR$Áň$-Ĺb{“Đţ­‹ZŁ.ďřšJýˋćĘ 1AżÚ_•ƒW™W91°â]€žŒż„  ~|Â=ZÔYsšícş0!ˆ>@ď“(ŹŔwţ'=é2¸ëŽ{„çËg=ë řüçŻ)ĂĄgŹł_|ěŘ!—yţóŸúЇÄ2Łčcaa.żü)b?6Ą‹/~Ź0nă÷]ť†n¸A Ţóž÷Š´~xW/ŢB,^"RxÔŁÎ˗üô§× O×\shœ}öYeťĹ čÉ=tâ˝ýŸţéŸ[*.ýb‡ßřŤĘ1ÉÉ a¤Çń‡Ç?ţRá}ó+_ůŠ(NBÁr7—EÁ1‹W˝ę•ĺ˜Ĺ/ýŇłÄŇ ´DČ`0ć5ŕ5VKâšŰťÂ îCaĐœßťŚá]ďz|âŸčK`!Ӎßp˙'?ů‰Ţ—ˆ –uáŻxyP`a‹úSžYbapLQ8aCża~ć3Ÿ-žĺpîyˆ ,ęň ˆľ ,‚ ‚ V1jR\†p gvüÖoý–÷E_řńeéQz<úяŰđ7Š(pŔbff˝Ŕřá(fc(ďŸúÔ§ŕ„›ožY,5bƒ‚‹-[6 !ĆĄC‡…'ąąŽlÁľ/q˝Ô˙ř'đĘWĘeKp& ÎLQƒŸşkÜ<ďŠY¸ÎŚbÆő˘,ąčU}˜č0˜_Ŕ_L΄âŇ̔4pÂÔ,–ÂDo€}ŽËáȇ ăÍ e:˜íţĂÝ2í™ÉLŤ˙$ŚŃŕ ÇPĹô)­şOňHL3ôő3GËąUšÝÚ ×î¨nłgo#‰Ć&kĐq9ŕCźŘޗ¸"ŀÇĘţ˘ uçGÚŕ[,eńd‚ÇŽ˝ĹŠtźƒçŚAˇ)ď"ĽÉÔ0kIěűţ˛˜×łnv˘•"€1;ž;i3Źč‡ƒi0]-Ƃ{™•_Jš˛/¨[ZĆJ;œg9ÓšÖŢJ$R]ËŞ§t?*(€ş¸ž8‰ĺI24÷dRÜ´C"nŚďË3VţxyüâĐjy [č1t‘…ď1DGŘb ńžˇĘJ ŔěC š;ć=ÓNۏh$Ć>ŢpI(‚ˆ€^!/žřbx÷ťß=ô0|ń‹_Ëo¨ĺBřîŽďęĘśG|ˇÇ‰8'f ÇK\ŽA133#ŇÇşŽ-đ]ţ™Ď|Śđś‰Fo܎ńˆł…çĘpů‘ .¸@xÝxÖłž%&”ü‹ń/ĸ+źŐ,,̋üp’É“ŸüdášóÂeDP䀢wťýáx._‚c¸ěÄ)§œ*&4'‘tť]qě*yôä‰Ë˘ƒőĎĺîÝ{Ęs‹^-öď?gžyVQ§ŞđXń: —UX ç‹cŽŮ&<ŚţÝßý4%$Äó…{ŰŰŢu,lŻĂÇőŢöśˇ‚Zrôď|§X—㝹Ć%{{c3aP5!ÄźO’ŕ‚XŤŔ‚ ‚ b•˘^vP ƒ čBgaŕČ9çœ žŃW܇8ˆđä'?Iźź"(~ŔmSSpú駉5UqvËyç ]t|úӟŰ0.ŒxJÓËó‘đÝď^+ÖJE÷›(ˆxöłYĚŔ¸(Ń_Ôp­RčÖóÁ2]ôąMyĐ ˆ•ŔúI[g2xpżg˝Aô@‘Ł' ž,Ěfěý=4ۅű÷,Ŕşă&`ŹĎńŒvóÎŁÂĹĆxo|ĺ„Mc€™-“áş}VÖX*ąBąpĆHĐď,ëZęŚ ҍ  ˙ŤÎ#Fyľ4H“c4=uřcőw[Ɠ×Eđ΀kmÉU$÷řbƒŇöQc|B}ЎLËGK›WŇ+ďľJ0R6šĆq1†-řĘEŮ2`‘úpYLòťß産Œ50#­´Óá7âÇjk8‡ת^0(ľˇâ˛N…Ú´ęžšBq—RV&ŠŹľˇT˝u%•ȢŘQn­Ň•˘ľĚŽˆËĄMpK´jx%‚Rz5C8ďimkđęxĚĚÉ E´ śnÝ*D čőňO˙ôOĹv^4üƒÂœ”Ź–8‘(H@Ž9wß}lŰśEěż÷^ůŽŽuřŘcBô˜qÉ%‹đhÇĽślŮťví*– ŕ†˜ĘÇžđxřҗž$O!ą!AAÄ˝N ¸?ĎzÖ/ ‚|QEĎ8H/ýř‚Šâ‡řĂđţ÷˙_Ąf?ć˜cŌty‰łEŚŚ&…€ă3Ÿů <éIOr–Ađý]mâKđ_˙ő_‹`|ŮÄÁ™ř‡îGď÷ŢX„Ő_ Ąě¨2śnÝ"ĘřéO˙ƒx!FĹ?ŽűđĂÍÜvÄrąm}Ű7p¸ďbopE ݞ݁•35e}Œ&Š™ŢĹÚ§řÉxn¸AŽ;˝ńoËĆ`]Ćq­÷˝ď}đ+żň+b< ŻÍë^÷:‘f˜ÇNÂĽG† Öą”ű †Ă:Ší'BaŘ, Фěmą!AAÄ_4q–Čwžs­p…811Už@âËžˆá@žŒâz‹8€Ž1ďťď>8ĺ”Sŕ­o}kob‡ë’˘ _&O:éD‘ząřěg?—]v™pľé´ăÇoţćëÄ đ'?ůIřŘÇ>&AP”ńŚ7ý~š6Š*“a°dňˈłf^ö˛— ÷¤oyË[zƒŕĽ/}Šđha,@#Ę ›28ç„1¸á~ŢY˙œwÄĚNŹĂčR66+D˜ wúc8ˆ˛ČáĄ}óđݛÁÓĎŰ$öb1ţ€)žô¤'ĺĹrbžęűĺ—?žűÝďÂóž÷źr —"Ĺąl.{Ü%b ář|üăiţúŻ˙:<ëYWˆ°8ցËFźůÍo^+^ň’—ŔÁƒ‡ŕoţćo„ç‹+ŻźRŒq`žNÖ;ž3ÄXÉťŢőŽŢ1˙kąÔÉ{ßű^16‚ă(xž°˘pÇ,°(čŔý—_~9\uŐk„¨ƒč\ň'ď h'íŮłG,}qŐUWÁąÇ+ęفĄ ôŚ‚żůČsD˝ýŕ˙ţčţHԿמöľ˝şű+M XńÚâ„!$~OőŐyR>)#š ,ä˝´“÷Ć&´r֗ąąVI}Bd‰űXÂ_ř­>™öW}:ĹśŽőÁ}čÇ'ëubß‚ ‚XeŕCú÷žń˜™žě˘§ Ó{Qœč=\Ëgůb‰/ąËĘcőŔŤfÇ\Éýá̢ä՚ĂrśD.ţv{ń;žŕ¨58ç`qaQźŹď;pÎ~ôSƒ3|ó"> äÚĄgĂjÇň\nÓ=Y„–!ˆŃ§0#đţńŚyřŤŻí‡‡w3˜sœQ rýcěbƒ(8ƒW˜Ä Đ^ßŇřĚş pňĆ ^˙Ěăŕ™çoę ”4k's 9üŻŻÜýînëY;_đŘđ˙^ylŻ@Ü1šĹŘłgŸ˜†łżÔ`q˙árMäůĹYřޏn‚ď^{ciZôÁűń˛ß˙x9ýU?ƐQ[š÷ĽŻ 5úËŽ×ţ-Ă{f{ >FœL–ťîŢŽ—)´}YŃžülbłąß9łźW¨0™ńŰ6x)†'¨đçWy`Ńe'”Ťiy˘lŠÎ›Ę°ŸíRÓçLŸ'Ż[jŰĹëŸ[Fůň{š(Ž)PČ9wvÜ*,x ‡MŹ}V?ňň:ÇΡŸ6ă˝ÓFčˇ^…źOėŠ—¤‰ÚUx2ąÓnƒÔöŘÍźË(ńŠŇ8‡ő†7 Mˆ,î†VĚżŠWľvfě“ýNf ­™¸ľpK°­žËvç˝ßb›ôyËŇ5 a?VË%™âťéŠ1¸čœ)ŘśyLőĆ Ćz†G4.ăxţŐÇ Ôłeő—Ć †ĹZ/PďďŁ^}bˆĄyĽŚ0Ň ë1ŽÉuWí—Qm|`^SädŁú˘čdvv6ą<ö›kÚs ŢWp‰~ß%÷ěŮŰ/Ř/(Ŕ~ ďc¸´ąúč]óË@VşĹߎőáĹß\űpíŻýŔďŘ_űťMmC"DmžAA„đ=nTž6hŕXé¨ĘœÁĽ'uŕG'ĂöOĂBWž7˘i kp!ú–‡#ë9”Ë*dYş<‡;ö/Ŕ‡žť6ŹëŔcĎX“cŹXŰźjGy10ϔ֣ˇăŔlŽžn|áűw3ŘźšĎ{Ěz1˜Ÿ ˝ÍńĄ ’•9=…UŸâ‹iĚĚŸ 3 ހ+cľŻď!‡Ľ2 ŰůůŒkńˆ ‚†÷š‘­<â/¸×5/ĂS1ŇŞŇ +taˆo°Uˇ'͏מ3cŕżXN¨Ąa¸é=49}ýŔBKŞ;*s÷ZâŠę¸äźyžĚkŸŤÜľ‡“x9ÚEH|Tnçjś ŮvBb…Đţ"Ygú찒 ä5ńBíÔUDvâÖh9˜:ÚŽlâA@ďĹRĆŕě~.…ŕ9˛ú—H Ń{vÓţ_Żk'Lĺ,ËćůÉ5‘Ĺ ^,bńű9ßĂ@.“ł´}A4e^ŮSĘ ëŮi˜a尜×J˝Ť+/°(@AƒňŔŠűeŤűR ú=FÂŁAz›­?hŒƒáQ˜€-Ÿ7&ő~˘ cĺąË„{y˛kXIř:dE˙ƒ)/Ż-AAAŹ4ŽŰ8ĎťpîۗĂOîÍĄ+Ćb¤Ń)ăŹĆe>ˆ‘ĽÂ™4Z2\Sź7ÜuţĎW€Ůůcáągއ SrÍúr&gaŻčöâ>¸ožř“}đÁo<űćrظŽŻňvxÔ Ó…ˇ„ŐAř݁U mfŤ/nŠŔao(Ś1ƒtUś´´F 1Źç-: †/ż§B†XĐŚŻđŚi°Ňí ,Tęž< ó OÉŁČ)bčsmlޞBŚ×ż˝wî4CqŇv^MlŻHŇ[И5č^›œOUă ×[Ľ4)˝aőîî,Wő;Ô펓ńŰlĂe‚ÁŽ><ŚXĺŇVŒš‡ ]8cçĽęą;qĚČĆjgőĎ@>CR“ś×LLU¤_h?ä./%‚XjB ôĄ–ţQ‚†Ô{‚ňˆĄ 3ĐkĹÄÄDňŇ zZHWxʄFĺŃˤ“ň؁ ‚Ŕ‚hŠĐ‚ ‚ ˘%zĎÖO>k :˝1˜ď(üđî9č˘Č‚ĹŽ ‘•6ŸL¸s|ĹËᮇťđżş žqÓ>8kÇ4ż ™ˆtŕhw›ďŸ…‡-öňĎŕ´íëŕ—lW\zLoD§—ÚˆŒ›´!ˆ'Ű~żŠK->ł§˙cM1¤Ž_˙ťTďx^73Ív!C+OHËÜo]wđxĄH†y4 ŻVË@1çNVţ˛3˝2ŞMĽMXß2şB_ń˛m pĐ@^ôgaÜ8ŠŇœî7›)ÔŹ9ó:Άż‘ĚË'Աۖ]ˇuąQ^L#ë€ń`Ž™iąpű§u8Žřj'2ČbÔő<°}pbmÎěŁ}„2¤1sś­~k˙ڊƒľ\á<ƒŢ,\у ËBÝ"”‹|ńˈĽiň$Ď*^¤Á¸MŻ+ďmKĐąAľ(A ćççKAâ{†IM…>1CH0ŹßOPđ1== G-ËŁ/ó‘‚ý<ĄÄxŹ!d7$Ö"$° ’hˇƒlrSĄŽ™ ‚ ‚XŕSńX‡ÁSΞ‚­ë:đ…ĆᛷĎÂ={ťń<1 4dĽĄá Ë ďôŒ Ý.ÜţpîxčPoO^'ńƒKt:lß4 çŸ2Wœż žúˆ ˝Áśäŕ­t›çîąSĹĚ$Ü5Ţë^ &Ë{ź.K!˛pqIĄ¨5ôÚ9^Z´ňpwŤ‹ĺŔ>fŠ-Ri6Ąn6ýŘNRă.OżÜĎ=!~>Üú6ˆŕʎď]BF*ždúK[‰FŹTýbő/g­,En”#~ޤœŽqEënmôA1š(Ż(@@Ďz]'0Fď*< đ[†Ăç5ž7(‘ڃĺAďMžŠ”hĹ#x\>Ďt?"X ŃoĘőё#G`ďŢ˝přđaąŽŞâđŻú`¸<ř-făsO´)üžá§×ń‹u˛Nď& ořÁş"Zż~=lذśnÝ AAąň‘#é[×wzŸ šcö™‚ĂsfńšťIJ…Áäňy΅LšËÇçí‰ŢxÍôƒëĆ`Ó4>g÷BgR„Á`4Jš Ĺ Bj˙RxlˆçáXí›Y&WĄ™ÖaĚÁČź6݀%ŞOĚ ôąt‹rŞŻ!†nôĆ6–35¸—ÉCfŤ­ťýˆ–Ź{(Žŕ}_ą%AŠ ÂéŰk„€cÄĹ ú€tÝŔw%ĐňçWĺÜôŒž–šĆđĐuŽu^šŘíD,5KO83ÓmŰ;‚źá0zXg›Ć _0’,áęᗏTÁIÚýKuJm—ŢÁééJA€Ůg9đřł…ňĄ’׾j~‘EéČM ˝Ž0pö ŞçnbŸ!#?ÎĄŃňׂ bš¨ťŁý Ĺř=Y,..ÖŢŰцaPŔ€Â ´ůň°Ĺ ŠeÄôÖ­['„ŠeRâ ,ZŚ$Ĺ녊Kk XvßZ ÂBážňč‘#°gĎxđÁa˙ţýpčĐ!˜(vÎ(ž¨^ŠšázHÍȨÖWŐ2cÖ+pé~ŻPÂ1ůšŹ:wteœeqcŔTÖĎŹ‡őë7ÂÖ­[ŕ¸í;`ÓŚÍâćAAAŁ ó|Ăďë§đӎűÍđřIađ`úŻŃi6{9ß6ć•Ű•ĄˆĺNÜŘzíś;ÖfĺhMćCaX˘˙őŤĎ§îşťKtôOé!Ą0Đ őƒgżů[‰+Šewňš2ÖGÎ Íš€Fn -¸ć#ß':`EŠY÷ĄuxT.˘…s2όcđ^W¸"|͕Ń7ÍP­˙UßÍvŔ4ý†؎)Ţô6š9é‹TX&™}PVĆˆ‹-šy$`ďPÖŌsێl•dřđâ˛ŮKĘxB÷ť˘ś^Ą8jś€˜¤fřŹŢ ­/N•żŠëÖCş—–ű­žÉ'^ˆŚ]bž,xŃgąô´ć+Ël &ŞÄ‡ĽĘ‹EQˇTwŚČx%żd ęWi¤ƒ€˜WďČň :vŹáĘHnnÍ!l|÷Ě}“źq•mťK5ř¨ögĽˇ[Ło$“(‘DkiiřŢ{V†p˘Ó¨ÚW—†ř×ÝÎÔ?…Îđ7_żĆq¨<â_ÍŽW‰+$ş¸":s?Pî8ö˛•ażĚŸyV`ŠCŤGZŮfQ'ŹPĄ”X|ËËK›zÓçyd<…˝ń =qć,wP{ĹĘşw ´z2ČĚČĽE¤".Šâ§•q—ˆPöSŞ˝äN=ňF˛XKĎGŚĽ÷7u˛Ş&éÚ;¤˜eń>Í3…ňŐϑęˇmŰWD’¤­űpPČäŮśâ+;AÄÚŚš°yŘĽz> ‚ČN÷úëŻBôţP 4đâ Ă~ŐpÁe<Î<ó ťŽ>*–YXXqąĎît2ątţč.vĄ3ÖQ!֓-–Áíyo°cbl\ź2ĄçŠuÓS°qÓ8ůä“`ş÷Jɏřn YVŠí1ţ>tčÜ{÷°yӅŹů€AAA+‘ú÷™ä”ÚÓQ$äUżVýĘ SĆp4ŽëďeţŮü6ş(ĂëɘłĹÄ Ź ŹÄ>cżđzŔŞ$ýţ4e?NŸ!­ë˝4K‚ČżźŹ¸fˇ-ĎĽĺ]˘Úđá$šů„'k”™B\żłÄƒ3̅8´2—{Ďe¨˝BŒ6ĚúëRM´ŠU”.häoNŻĚ}Ľő“\yŒeژœśťąWIťçÁ_SĐwDďcź×Ą*‘…ňÜŕ+ŠÚ:L4Ľ§ş5YçŢÖôPšE÷hýš¨JZBJ ‚ ˆ•ČR<“€‚ –X˘Ó=räˆDLLL‘EI‚j^ĽËwlٲöîÝ'ŇS˘ \îC˙ŽB äG”`ţřml|\¤955ŮKs3LOOóž4â ËÄG ‚ÍÎÍ˝ˆAAÄę#$ŔÖ=Äfö„f˛mÓĆö‹+ětS ‘őÝ*×ě]ŐŇ•‘Žӳʕ’ŻÇ Ř†¨f¸F×2U×đđŽ‹+ňr7ŇUۘá%Ä'ŔH7DWEԗvá ŽŠüǡdB(!Ž•Ĺ.ż)¸đ•bľ˘YыšĎźž)gŤi=hBß퇻ý đ嵂 âÍ(ő<ř–§Jé׏ܴô<1ź$ƒö…ĺóBÍ~fȞ,|ń+ń‡ś =›A­Zš !A¤C‹5ŽęL÷íCQÄQČsSSSĹ2r0@z‹Ą!ô˛ŻÂNNNŔöíÇ˝#Öozç\–—(‘Ĺ#łłspđŕ!şIAAIJ#VV¨1ś7ł‹šâ‰ĐŔQp_aÔĽbUšEŁLöűHüHŞ<˜˜ánšƒÇÉĺ9*fŽÚűü9ş†ČĽÄ¸fj‰7”ö×cĚ+˛˝Qč&1|ßłďMŞKšřBć*ބ}FNÎŹ˛Ů¸3÷ëó­Î‰úVg˜öĺ؜,žşAVüĂýĺôŐ­íO‰YtĎUťáZ<ýˆcG÷žP†anŹđHH =MRĽÍŔ'á•Q] o´÷˛Ż,b%xzX^ ’΢?Ž8fĐĎ_Ž.Î ďó2ȢçVżÎÁ§K]*śŤŸ,ef[ˆ‡7™xęŞœœ.˜˛rí2sgĚnŻęžŹ„ëۜ"éÚéWˇŸ\¤ÎŁTˆô;“ÖŰkmޕ繱‚ ˆ•Abé6°Ĺ”ĘŽFD3H`AP`ąk×ĂbŠĹĹŽXŠŁÓbľlžüŠĽ9pÍҸ’]˘–˙Đ;hŸ^§N)ŽśÉĺE˛b€R–QnĂ˝ń"†Â ü Gůůy8tčĐëAą’ít‚ ˆ(…Üí=Ÿ6.¤ć‡Ęšór‚qľÖťš]"}ŔŹž_WF)™gŠčĐŹü\ű„ĚEéeku@Űď{‹u@`ĄÇ3DÎ~#1+ż@ąjŢ=]23ŒsšMĽ7xMxS%Ď䫅gňX›,ľŃtŽsč\Şr°ŻlŐqűóń .\Ą€Wř–üŔqˆ*Tě„AźŽřë !ŒŠv@*ćŘFčÚ¨v^ˇuq ó/0*ƒóqŇËWw-Ępŕë âăG) r.sŢÜŹféˆaăwŃŚâżđrG<)]S_Ą×h^ ěfU&ÁYq—(Εíé"Xˇ—źčϘ-겟Í0-†yMÚ]PŠ"–RýŽŠÎ´ýfĆÜžX{ĐxAŹFńů„Ń?$° ‡"D÷1>>.Dę#E (fč€ů2%_Ftх-Ŕ@ńƒ[ŃŽÄJ0!E•Š.¤¨CďyŢ‘nwNüĆĺHP`qŕŔńýčě,AAą2¨gűÂĄ!5Ýčś&†‹œő3ýýą.œ„5L¤‡ˇ„ĹjĂÓBéÁ˘ú¤äŤŠ3šÔ‰ZůM =0^Ťađ‰RĎ+OH|(Ś*_ĄkŁČ8̘ÿňéßčŠnÚIwúm źqHS¤'Ę;Œˇde\ď{ÁWěa^‡ö„ŽNLđ*ZKŸ ‚ ‚XmŔ‚ =Mŕ_ôô€Q\177'ś‰O§Ă Ż™&śPŸLűŠ2ăĹGŸÉSšřdÚě,n+ěA6ő˃ßńŻüTߝݎře‘aťĽČBěď}ďg`ƒ ‚ ‚ ˆá5Šë?Š™§śQ*l$W)˜ű}o˝úŤB̘âěóźgřâ§hBĆCSđáÎŕŻhžg(1BË…ę]!týë˝ čä Ĺ"ăÚűgűĽň&"Ž…ůŇˆ2ËŚ‹:š\;_zžř­A­văfhžűşç…ŚĽŸRš­ź?xĽŤ úd– ly°†˝; _LĐVŸQNž †đˇ˝şôÚb ôZęVýuŁ}šŮę źq•z/rĂé÷ôΗíͳÖůÂZÁÚşż˛áˇi‚ ‚ ˘=H`A„Ą â‚AG|_„.ĚĎ/‘‚XŰ0ëŔŘXď3.˙Ş%:”— Ýӄů„+O=ŹktJáƒzÉs94˛°°úr$JD¨mÝŽUHĎrż|1Ÿď•sL|Wń[AA1Ä ćžĐŇ,Â*;D˝ąHîr#OĂ3đfž*FžćÇ҆¨ňęĐ\ŕP-ƒ‘pڛ_íӟ wi^wB NP[/Ę:*E9œËś›–ŚŤœp–& ˆ+Ú3ćWPB׳Y;T⤕a”­ń)Ë žú+C˙ţ+y&2¨7úóľďžş¨‹}k´WaŞíú„)°˛]ľDáDV,MBâ‚ ‚ „„=?dc`L ,ŕ_Öéôž/@ÎĺKQE 9Ě-,źR¨ĺC“““•čB­cČ2#<~GÁƒîŃ…ź˜•&˝Qä`/;˘€Š}<ŤÜr9Ŕ‹L˜Ü—Ťż˝4TťAÄ2÷ÄÝť÷Šďę>L1j9Ňî’|ý¸ýo,(ř]„놟qŞÜěąb AC˘Q^gIgEŁáŠgá0˘(1Ďáôy@őňřQŚ"+R•BÝŘî÷ĆŔŒă1ď͘ÉßÇm<Ľ=8uMFlŻo—Ţ;,űe¨Ý‘D%ŹhŻ‹1VNŰ:/Ţů˙Ćą!ů`}CË Ë0n _Ę_źZIMŸĺŃ#zOă¤cÇ嚧!yNuфĘ;śŒ–O *wĐ“hĚđJĺťO†ś—eíő3,MÓ-ÂI45*B,btŔ:ąeË& ‚eđń`vvř㹐Ŕ‚(OřW.ŮQ)Ó ŐśśÍ§^×÷+26&=Np¨^ÚÄ !jó\‰5réćS {˘xC 2,¸ŠŹ7_6Yůń˝č’Ŕ‚ ‚ ‚ V/aƒCŁŹ%źx(Âz=UTęrw_ŕwh[?Čt†aüm^Ć:Ă˘× 'ȢqĚšÇuáĚm°­ôVĄ—Eâ•M›!ž€ĚÉ ¸9ƒş^ą÷LPŽŁ_ôrĺ,-œ˝MżiBœ,˜._2aE™:čŽô‘ŽĘm.ű+3âKú<%žűŠŐżxc€LW ÁUx<ŘÍź#\FČń6šßʇĽwXą3‡Đr!Pî/ę) ‹ež(ÄV•[6,8'\ݐqîŒ[Ę1„ľLˆŻŒzżĂĚľÉĘeŠúń*TWÍc Ői‚ ‚ ˆ• ,Á‚ř‹łc{iŽĄ]œĄ˙śĂŞđ*oEěe%ävPĽăĚS‚ ‚ ‚ F‡žfžëŰĄyóXZęýĂôbĄ ˇŤmU~Ža„% (RŒ")elâ]"%?EÎëÝ˙—ű•ŘœŽďwČ Ëű¸\Ĺ+łČüé–‡‰kiő]ď ň–­wŢYŽEq¸Â‰Ä2ŕ?úeöžřjőÄ KHŠľ×1â='&ęaËtž|ŢZ—,OŚŐ đVâ2(ΏŇ‚ę;tĎJĘPÝSĄŞôŹňN›rŒí ‹2ԆŠK  ß"­„{?AAŃXőSAAAK…iř‰`•Čvđ`ĆłÓsż‡ňЍ$!ƒIpśŹY"łŮëErG&jčĆúŞ˘”Yĉ‰ăů„ü–™ŃŮâËٞYmäŁy$qâłpšŐSŔş¨ŸySQk.Ńr˝_ŰäƘŚy9cą1/=Ź7I?'MęŐN}đžňo.3uËŇ]€4T—Ą âý_4Ÿ‘Á¸ž_b%ćŃ´ű=ÖQ1€{ŰiŰyhy•Ëz^(ŠŢ´¸DU}3j!Wm[y¨Bčş7)Ę`^OCĆ}Oüc./e>ž0ć6^Eôť°Đâ˜Ď Ňc…ŢwĎ6ƒ°`ßŮo#aAAÄčB BZ‘ ‚ ‚ bYP†nߎă˜$ ĂFĘ;Žehńxąđ[Ú ,˛€eŁ™°‚5~äÚÇżŸ—FW_ŇŽ€˙5 ěÜŁŸ –ł\„Uů3Íđ[F3‹\_ô0qƒqęé´Ž5ŠŸ$ćŠ1v{/4ÓI-ĂŚWdˇóxGŹsC q—W¨jŽĎƒ‚yˆş0Á$IŽ<žsëkŸ~"Ë  ¤Aë÷šMђŘž˙ĺ\ßňvĘl)”Üfś)(ďÉ2DŚ5łŹLŻ?€ô ÁŔíˇÝű\Őú–‰“*˘+€ŹŠĚôň3ЄyÄíŞâ×@-_ÔŞ7”•Đ  ‚ ‚ Ö0$° öňŤ}‰‚ ‚ ‚ –šœ`4€^ˇŘ$?Ţsó‡áńŔš÷faš]b^-’f×&łôď1ý}†´~ň {ˇˆÄ+-ćYmžaq…+ (=Ł^2”Á[p0óđp>^#3@R™űРއĄS ”ô-Ü[őCGdmç–on€ÔyGГćuaZ&śD^̘wű __¤NbZš9şśĆOxDůШ|…ßG]I‡ĺhú“z~ÍÌϬż¸D°˝L/îtźđžT(Ęh2pŠËŕz]ÎAżÇŚÝíí烋úĺzŔ(žXu×ć…Âź‹ƒSßOuœe\föm,Ąź!ďP!xq 4ŽIA1šŔ‚t:ăˇîśuib†ËZ’AŤŔěmšÖDÄŞ€ŐZž\7ÜE<őň°A ű(#…Çű„ˇK­fü†˝X¸nĹŁx×(2ť\لkJď}ő ؓ ă}ĘwĎś*ƒŞ.(OŢÎ×LQ÷\aüyÜ0j”A’ĄY–´ůŐojŘk ed ŸvîčcşąÖMǟż“˜B:cč°0ú•˘Ž×“1X{´s˛pşLëě}jěěŃś‘GŇÍh|…?WíŤZ–†ŤËě3ĘKá‚hŰęÂĄŚ‚ń˛Âo<Żîš\đç-Ňa]•¨ ęť"8˙UđߓŞüě´ĚßŢrçĹ,BnTÎôv\OřŘ‚ ‚ ˆĺ†„`lŹŞ úĆjƒAÄʢŢđHąň‰ÜkŢI #IičaŽ‘WSK5‘ÔćéwMŽŰQ”ąÉ˜n;#ö Η`l@ÁK˝O‰ĎÂçůÁTxźP¨üyźB ueŇ iöQ5¸găőȃg% t}GÓ+ÚÖ˛ýägâÎ\Ĺ f$+űýލĆÜADÚ6Ćö›ZM RőXŘł›Ž;ńP˘Í:+Ĺľö´m{˜Đö€–’.fî×ețb)şN/¸Ö2+Mpö§/ßQE)%•˜­.ËËLáůBöWrɐ„‚AšŚ‡řäNšő2šŠžBĄäK:źËC‚ 'ƒĚ TŽ/xÂ}ßžO¤—Ÿ ‚ ‚X*H`A&&&`XpýČzG_Ş—ő‚8>>AAĂŔĽĆכ&ÖöŒIő{ĽÔ‡aŐ]LÝśçă kbUŽťŤČ`a8Řď núnv ŔŠm;źĎc ęgŻJ}ČuŤn‰†”Ľ1RDBtŔĄ4đŠ™Ĺ*OŽí“Ćž"Žř'Óóžî\?ĺŕՉpî÷˛`ˆGBaźç)“uߊąóÁ"{ŇëŃrô9ňZř]‡řĎQjşÍD9ş8Ľ.\sŽ­OžĹ˜š'÷œfÜ{ôg‡Şf[qš9˘<xËé°č€LŃr0üŹČĽ$8dŢwý@™L÷s^MŕÉX&úya2Ϛ¹\œńąŹ[7Să055“˝żŰˇŒÁôşI˜Y7Ýű;ë{ß§§'zcVŢxNÖKŻ/ç5sc1‘^ƒşĐírXXěÂbďďü|öîÝ ťv= ?ťsî}đ ě=pÔ=Ň>ëŕ ř=9 7]˙3ŞşW2oUZ2ŹÝFd(Dƒ`ßÝ%źěçe}{üŢŞ—‘﯎CĹľąÄžüCŘ.Ę/ŘCTŸe{ŁÁż]ůE\3–ËkĄ’M6*9^˛˛LUŮeöžQë“Y‰˜F$î ŻCڈČ[ž>Ýw™z!‚ V < Ź lń|ż÷ĐŘTŠÓŢßFybľBÖfB099 Ť éˆPÎ**™$›ˇtůAAýzŽ›•GŹmFľ.Řâ dře§/= 3ckŒ\^Łf1ó›i;•Á•Š`üԌöŠí˜iiřâxgéęńkóo4hĐÄăj2x§öĽĺʞׯż„AÍJśˇVYۂ í<˛ŞlœCm9óAŞśkŻK˘ô\!~ř÷‹äkŽ’đöSÔoˆO9•óߓgčé­$Ž~şď5ä…†úň„fˇK{­0őŮy˝Sa|"=ľĽ´Ó+Ď@(qDUa,/ʓőĆJd߯–wŰD¸ŢöuÓă˝Ďl@o3°a˝JLŔ֍ëazŞ3¸_xš‡1ąôŹęŤŐóĺőÂ4Ţw‹ÉT֑ýW/NŽeÎÁđFĐ媎…bôăäö1ĘcCOŚÝĹYą}ýtÎ9íXńQě=xîš˙Ü|ç¸{ç~¸×a!䥴‰‰Tbőp)Żx3˜&šŠśůŰşž]yßҡ•qrużÄűS%˛ˆyʰˇ›Ű”„é‘Ę{˛“3×{–â˘ńĘ;[†p<7œđćÂňe™ĽLA,?ž{>Ł,,,ˆ~_\\,ű˙Nď™ ?řŒ‚|^ք•Ž*–§Űí–ĚK•?8E°úŘݡ ,Áj[:ƒspQĹđa`ĘÂÔvu„}x‘r¸mšĺ{ͰPś‡Ýčç‹::ŻGË‚2^ů ^ÚňbövĚř×.FY"ţ8R5ĐE5zš˘íR܏Uşš€Ł%Ł”jIe!‚ –óů#‡šš9˜-î…U…řÁpxoFQĂÔԔ8´á1¸?ŠůůůR\a— ĂŕĂ`šŃ††˛ą\JüA÷‚p!k3!X} nüU7Őś AAKOČ ­LŤß˝ˆŠşş ?pP?8‚ż]E¨A9ƒ'h€ëăƒÚŸZćQC ¤Ń„™[˝aE˜:˧€A̐sçZwĽ‹T#]|Ă_&}[ż”qy¸dţôł`š8Ä͓ś÷ n QŒ}ś+y+Ž"ŃDH|Łź”88âm–7Kvř÷Ľ´C!2ę{=éĹ@ŠJŇÄ"ŚŕĽÜjľhhŒ–§ˇJ;ľ<)šÔ bŰł„Äű•ĹůúhŸžČ`z˛šM˜ąEą]-ƒ:95ë&Džˇ‰ŠÉ^řŢß ëp9ěç'{q;Ĺžą^<&Ž4Š ş\‰3Şkž+øčC3Qđœűűűşu´iż˝ACtKojÉa¨çP.•`ڜ•ÂAUŽę\ڜůŞÇo͈ۡĎăÎß!ś[˘‹öĂÎĂŽ=‡avnQ|Ž‡šůEXX\:Ą[ąş˘“jżVß4á°-ޜF°ňť~Žѱꏵkޢ [daŢSÁş•(Ź4B—[Ś›•qTo”útăŠ?áÄý<-UŸ°.I„Ť‹,´ ‚ ˆĺ… JXᝇśásב#GDźéééRh1ę~‚e:zô¨Nč"Jű^ŻÇĂmĘÓ>gb™PlAcZáB B033Ť sf…Dš†¤›AAƒ€/Ŕ1‘b˜HdAԁ‡ƒ+ř}˜`V"ŽĂ‡;bĐdff]oŕdÂď]aPź^lĂk$şë2 ś:šEŤÂ{â0KdŁČMĚ3ËCŹďi*ś¨z˙§‰ ˜Śň´áć“kb‰P)ä;•wŸ^Äľć5ŒëŮÎu5D íý¤UúA. ŰJĹKHNh2U˝h.ŹŰ.]Џ‚÷Qâńx´ŞvšAf&sXˇnJ fŻß°NŚ,Łh•˜ˆ˝Œ/˝^t!ć­.^śJ¨×ä= VśňŞ p’WAŒ(dŔwkXŕ÷Ô>_y–R^$0 ßĎń4ŠD(ŽŔą…&˘mÝەšüqđš“Ć´„„ŕÄO„Őˆ>€€Đ!AA ŠDśˇĹ~k} Üŕ¨ß8sŕŔ!ŽP MšäT(ˇ ]h :tčHwăĆő匙ŘLÓĽ%ˇć \DÚ2,#HąƒYË<Č •1Ń5އŒ!ʀT„* F>Ă]Ě3tÁUęTŰĆTç§Ţઌăţr¤˜_SüÜ60y,ÜqámŇgE.ÜL0ć%Cţfzđ`¸QAy° 3Ř ŻübÖ!{Vz…Ş?q‚íˆ53^[݉^D‡ŘŐăuš}‡-Ŕćą}°yflXżśn›†íÇm€ësŘşšÓë&{}ôş*ϞJAW˙—k&U‹,řútßq'lëĂô×Ç1ĽŒcţě~U˙ŤďŰ oÂPýŢ7ýuqă†ińyÄŠRtą¸˜ĂžłđОŁÂĂĹžspčČQ8phööś84/Ë /Ź˙ ŔăÉBFQűd ň=űŚőeE˝ôTşvš ŇČBß&ӅHî˝ÉžGW™Q&=źżPąňúŮ† ‚X9(q…ň\Ą )ď|şíĘY âÉ…j↾ ˆĘ'ľLˆhŕ‡OžÁYݰžÜĎNÄňŕ3čŕĘţýűĹóŞ´ŔÁü‹}PoÔÚŠ‡.<]´S§0Ýýűˆľĺ7mÚč5Śô–Ť :˜|î1Tk!lĆcFúňľŔ>ŠĐú Ve|5÷Cp–ŞJŰŰ~K#ěčśń&3–Âi@Üpd´ăĆqHßěO™7Œ:ĎŐśĘ\˙ŞŢ¨ýÜk46ë ďćë‰XTé溇ρ7mcIîă=iśS/c ćmCqXiČuĆ<ĄSϡş¤xÜ\‰{҉•MĄ´Ţ} âm¨0rç]Ţ닁ޙœž€Í›Ö C›7o‚mŰśÁöNJ~ˇ ďCcPĘĹ8ŤćĺcšnuW+zć†Ô׉łoݧĂTűń¨•PÎöd*={Tç"Č'‚„N'ƒm[֋Ϲg+śÍÎĎÁţƒłđđŢ#°ďŕ:<ÎĂî}Gáá}GzűŽÂÜ|@řQSo㧟E†i(wázÖz{T}cľÝ'rŃëĎŔeŸl\OČKĺ˜&\ÔnŔÚ7(óâş'›÷%0‰‰1d˝LéăŇÄ!M ÷b8X,AŹ`šźë„ž ›ôłzżŹę]žěű*~0=D÷d‘ęéIyŽŔąľOĺ“ZFťLjŠ܎cuĺ!ˆľ ,Á–-[ŕe/{üěg?ƒëŻż^Ě ł]Z§É˜/ĐÚ ^Ţ]?VăŒ<„xĆ3ž§vA1*ԉ(ęö3ď0úóOhaoˇ˝˘„Ŕ(88łnÝ:ظqŁăšBb |FdžÁ¸GŽĚB[,,,öŇ<$]ĐŻ›nŻÎG%taąá|Đ<VP¨Ú%g\Ÿ7ë̎†á@ę†ČBĺž >ੰRĺŽCy>ĂçĽ/x|—ë} LŽÍV‚fˆ&ôżz`1éә#›â‘­ăĐ9óîQ3őt9„O[ż°)ńüŽ÷Ťr…ă…öÔ穊ĺ5–rŸŔ ˇçŕžCUęz' +Іœ|jšY—ôÍ}ˇœ˘ŻčË×Gď|ŕ—œ-Š6Š:uä0.ĺ4[ô[÷ QzÚ°q&§&aëćÍpüŽă`ÓŚ °nfśnŮ c˝><)KčŸa=єr&Ç3˜żžáߌeeżbÇ)r÷éhjr\|śłAüĆr>ڝϒ‹ĂGçŕŔáyŘłď(<°ë0ěÚsö8*Ĺ ąâ€˝Œ˝ěGřš=žŘýAu.ÁJ1+œ)tŃăĺ3îRä˘d>Ň9 sDz<™….zPeąĹXš(˘źßłŕ%7ű’˘Ďfáű´ů›{÷ŰéúÄ'Ž—6ÇV‡Ő‰ŐĎ0ßł bĺŃôÝLőń(fŔwz5QY…AúéëuጋŢŘń˝_íSËŐÚď•ú_[°—ąÓď§LĘSŽ„&ÄZƒDÉŁő(ąTČ1ÇW_}ľčŒąÇsőÎQjtťSW„ â{Š(‡¨M%6ŢĘs]-(•t ó˝›Ď‚¸áoŠ\rÉ%đĚg>N>ůdZ"„ ‚ FÝÚ?ČĐjšżúžqÔËŽúMj~"Vp;Ć XÍ.™™™˘g|ćN1(V.CÍĽE˲oßţŢs3.Q˛:ž…q=ăŐ;Ż˙Žř.›„˜Ć__^Z|ăG¸†žxx) É ¤i2ĂË*I|WBwíőáyéăąđjďŠ\ŚŠňqŸ}ÚӞ&ž|`Ţď˙áxüꯞ@kcťPm(ľŽ`ř͛7ЁœMҖ˜ŸŠ>Ô+×fEÜ#őâŕŸA#öähśË˝ď,u^X3´aŹÚ6bSIéœŮ´‘4ĺądŇË0špW|&'× ÔĹűUVYçô­ĹŚĘŕĹyŠ×Ď~}™čţâÉóĺÄէܗ›Ě㔜î+i鄯Ż}8ąă ťf˛-ĂŐľąŚpxɍ˜l•öLĹLŁ™nĐu돯—Šő5yŃĆpř=rf¸üiĆÄë63ZńŇe0ߣî˝2u–Á}÷í÷_LOMÂścśÁ‰'lĎqxŸŮźys9(>’đj"Ž~śB˘¸á˜Ú˘ţYsŹ“Á†™ąŢ§ş& ‹]˜›_€ŮšŢľ]čÂá# đŕîĂp÷ÎpĎ`×0šáQÂpc‰ Aآ /Ÿ[ą|Ź$Č1´\ôÁ̡řďhśAĹďůÁwÝp[œ¤%ňdśg Kŕ!îÉŹ8vk/cŽW Yú€pËsc­ŽŮł„XQďôsĂ+}U_4Oh§ď'Ö2U˙„ďęřŔŕŘcˇĂK_ú8ńÄŒˇŢzüˇ˙ößáÜsυűo˙臟ţô§b\á5Ży˜Üăć›oc Ż}ík˝ażóďŔťßýîrůôřčG?^ţň—‹{ܰߚ÷ěŮ#Ž…ń8Î@,řîű˝ď}Ż7–ôy1.uţůç÷Ú~Ž;î¸Ú¸÷Üsüíßţ­x^zĂŢ ęPTŸ­źL |/Çrâ{žýLjŁěűtZ<<÷ř,Š… KĐAŁ ,ěq výúő˘3V3ۢ üŤ>řb–eŃ™Şa\ƒRíCä÷Ęë…ú¨"źa¨€tw$oT(¤PłüdXů‚Ł„şŰ#)čČÄMǗqű† Č AAŹ9Ô}ďßúÖˇÄ äńÇ/ź:Ąđđ…ô­o}kPń[ˇnËřîĽ ˝Aßűîťff6_¨đ^}Űmˇ‹A|ڏôŇK4Ŕž}űŕöŰď€a€ĎżřĹ/„—€:°œßůÎľpő՟ƒ÷ďţXç<„rËhżHężCł˙ˆŐK“ÁqŹC(ŽŔÁ Ź{¸œrýŮô4m ˝X`ZŞnʑ#G{ďzýCF…x[Ş 'žv(we¡#|Ň-7kˆŕů´×݀řšçĺţxœÚÎźXňŇÂŮîpUňţYîhˆŐ •<,0ˇłZCoôü%Ü#Bmş­ű‹}/kŢĆ0:&FZŽš[3ęăńË}†Ţ.äs˜8tŇf¸äŃÇ÷žmsčöŽĎî˝GaçCŕçwî†_Üť_ˆ0ş].O^¤7b٘pé ĹęĘŮąy!´P÷Ękm™†Vmo>ŐžL cld˛ľĎMć~÷žŁČƒϿŒzđ…MM— V.řĚ뭡à 7Ü(ź@Ł Áć‡ĂôŸűÜŐpÓM7 [AżŕűřÝwß-Ćđ‘XűÇw|‡Wamp,ă?ďyĎŒ˝{÷Šą7żůÍđöˇż† Úîż˙ţҞA,=xîüă‹1ŽK/˝Tx-˙⿇"ż„ađĽ/}žţőoÂŮgŸ-&ďŚöěĆó`ŻqŕxÓ0Ÿ™Ô}W= ŠíĄ2аŠüɟü‰5˝÷˝ďíűM&•IŮä”čCm'ˆľ ,|ŠRĘ=ě(Ńč˘nřpƒĆ%ź¨㼡 5sNĹÁíJüšg „^&ÔK|ŽýVŰTG­„¸ gŰbj 4ü(O2˙źô¸Šş&ŢAąPž›ppⳟýŹđPőęWżşyĆ3ž!f…|ôŁ…WźâŢ4Î<óLřÝßýÝ ¨”Í8ĂăćŸß _ôX˜_˜ƒťîşůČs…˛„/ż—)< |ÎŘťgÔ ţőóa{ł°Uüú6bíb?‹*l>ŤâłmżĎŞ ]Ăăó;Š6Ôsö ŕ3ˇ\cuVŮŠ:ŘßŘł{­™§Ą"iX ŰőŮľŽˆŔű{hƒƒźłú“˘ ŇűqÝřžj̡ENŸ*î#UşśÜ!ľćjęźFÜx[ř%¨†ÔÍ6‹ík›6Ňl* D<őŚßŰeČX-ËÁźBb‰AîŰý\gOŘś;Ё˜Ű×ű>. ŕGg‹ą ěăQˆ‡÷ńl‘)Xď{!°¨Œë•ą@ÎŽÄߋ˝{Ä,ěëŚnžĺ˘ÎŽuĆ`űqŰáŒ3ŽíőőcpÎ9çŔöíŰËçœĺC閳B•pB.爛#e]ŠĄ”ş V œimŁw\ŢĎNĄ‡Ćkşiă4œ}Ú6¸ěৈzňŔÇá–;{ĎÜw> ÷޿ϝʞ0żPLvbâŁĆݔG 5JľücŢÓÔé掸E1MÄ=˘=Őg§ß§,‘MDiˇá:GКˆ´}× ĂšůÉe~Ş@ągRZ1p"Îężő–Űŕâ‹/ęÝsŚĹvŹ‚_úҗÄX šä6ë3ŠË/¸ŕa ÇśrŇI'Á›Ţô&¸óÎ;áôÓObuƒKÂ˙ó?˙3œwŢyđş×˝Nܡ°żă;wF=™ÜpĂ đóŢřԅ^Řř˝Yy­Ŕü”Ŕb˜ý´ş(!‡ş?űňTáš>żîŰwv=´;9žĘítĘ.GkXŘ1ꃟŘY⋈ímÉě%Œôr‘ˇ,,‡$—& @ü=—\ą-¨Ý˘Ý˜$;™5˝űđ”"y<ľ€ďĘŃW]y5<đŔƒpâÄ #k[’§?ý’[žýěg“GJëŐ"¤°Ł(ƒßu×]”îe/{üüĎ˙<Éŕ8W=řŕƒ¤G@őh—PĆםŢeň˙4ĺŰmˇÁýĐQHŃÁęœö`„¤ =JáKńţâ/ţî¸ăz1œ)ćsŕßöśˇÁŸüɟPÝčńó˝ď}/üÚŻýC˘^÷‡2ęţŕţŔč~•ôX.ę˙Íżů7¤;Áůň—ů—ášĎ}.Ýç˙řÓ†l3Ě u¨ƒŔvŔz˘×˙ń?ţŐżđ…/„7˝éMTw´g žĺýď?Őçá_ů•_Ą§(?â5X7ź×K.šŢúÖˇÂK^ň’m{C|2˝œ  u?,÷"aŸö9$Ţäľzkůä'?E‰°ăf¤a!×ALhŘm’o@Î#ćɲكĹŕ™É=ŕŚ'^—É{—Ž<<.6x‚…GL`8žDtŔxžb7ŚMąg VËÁľkwTü˘ ăFłAd LťeTÚq=dâQŹG;@sxR2Dž*čƒ^2PŘ#!ЖĂ›ƒXYÍuDďˆAěOvhÄ„Ä8‡˘đí =oyË[Rם8q’”żńżAŠTH#Ă˙ú_ď'a˙~áh‡Ŕ'>ń R B$OkˆĘGy”ćĺ[nš™Œľ˙dŽ?yňTL°Ŕú ›O$>üŸ˙ď߂ÓgN‘W÷ż˙áÇ~ěGMy˙_üâá×ý׊̿űťż‡˙ů?˙')?°ńîwżÇĐג7T2 ˘•Â?ň#oÉ5ŞíNţŢ7ź*Aź}üď˙űŻĂÁ˘:ĄŤÄwŃîT9sţÓúO°ľľoűŰSmí~÷¸x =•Čßňź ö`q}˝ƒUZąP>;Ů-išçqëńśšĄĐĎ Łrż–ÖGđ0v˘˝‡ÍC uöüGnż×Î_™ŽĚ|:%Hyă;ďb—ď ŽŇŚeĘh7wΚÂ"vĐpż$€ł=œh,TŽQ_秢‹Ę]ó:z‡"^9ä ŇWœăW$ݛsa]ՆŞîšs5Ňwp:{ĎřŤ“Ćf łh$_YY6뽞968,kĹ~Ś—źaĆ}Ą)ä̙úÜu׃P5óĘôÔ´1řě‡Ńą0kÉ}ű÷AłQ§s ŁâݟDîPyońUäL€˝q@i8 9÷^ĚŁEŻ˘qŇô“ąÜr-~öÇiŽŸŮ€oî‘w9\‹/.-œY‹˜ž×éjŘjwŁR–Pa 5`/ô…C‚}ć Í,äy8k"']ä8"Ő?óŸľÎ¤+ƒ$zô…SżâËv˘ƒ‹źâo^vđ8ż ˝~/„›nşîžűkDşťňĘ+čÜ?üĂ?ĐŚ ůNb¨żř‹w›yg ~űˇ›<č!Yŕw~ç?Áoţć˙ NŸ> üÇ ŁŁc$;ĎĎ/ţoiă…ŐQhřŻ˙őżÁĂ?D2>L€áPć8>üđĂô}˙ţKˆpţ‡ř‡´‰ă?ţÇ˙HňĚűŢ÷^óy…HćT‰äţćććŠţXŻßú­ß˘ąđĎ˙ü/č>“0ç]"qźůÍo†Ÿř‰Ÿ źŃ{^‡2xńŻţŐż˘|pĂzšô҃´QŰ ńťżűť$˘ţ7ť`{`¸†ú§‚×˝îuđ‚ź€t.ďyĎ{ˆ@€ă7ę;^üâÓůŰożžúŐŻ’î‰ PĎ´˛˛łłłńú×#čŮdnn.—d€ş1lŤ“'OÂýĐI˙t6`ť/Âă?ĺ ^M!NŠô˜7ߏ´kĺ͕Ň|đýŔ>në˜÷¤MßуM“B„„äő‡…5Žęämmž`á‘Đq˛—ąĹ™<Áľ ű‘Ç˜Ă˜M<ŔJwK)Ľ“QŒśšŃ€Ü e€'JzŚŕką•Š˘ĹLjD§ăoâqœlg#ÎĂĂĂĂĂăÉž3q^EE{‡bŇĹ}÷ÝGě}DĽR…g>óx üŻ~őwÂӞö4:‡JU.ăŁý(|Ď÷|źüĺ/#]$"1/ ×(´Ëňk_ťŽšćZ¸äŔ>¸Š}#|䣁Ç{Ž˝öÚȰ\5‚\~úg~Ň(DöÁp,..Ŕç?˙ÚąĺŽŽÓźżšŮ†űąˇŇ:ăLß˙ƒfÍ1ß÷}ß—_~nźńFc˜'’G2EŔ:a€\wäšväOŒB˝Q…Šé ¨×kF˙ ľŮW\nę4O÷‹ťRdňÓ?ýÓŠuŰţîw/p^\(ÚU"ĎăűÉJ™íôt?łΓ×΃|Ëˀ]G6˜ƒs~ˆúŤŘž팇Ä(k˝ 03BE#ÄîÉuôhiđgC:ď@UCŻtŽÄyƒx¸ŠoƖ%Ł™ö“hǑCŁLmJd‰Ç”:“…m㠑BëÜďhüÓŠkĺ÷€ z6=“(x‡t& 67ë$¤$×#.'Ú&œ]dţ‹Ž*YĎ|b”R•,Ń#úr˝ şiiűôé%eĎM•˝}źH [.ŹOŻNâ5D×&ďE(ëŤăˇÓţŻĘ+`7X(¨˘§žzM3?7Í\:ŽY ´;=útşč%SS_ăř¤?ˆĂQŸŽß_HúTŞzšžkaÉڞ]erĆź}‚¸i¨ŻAV×ÁßmßŔ°Ş+$ň;ŐC[ÉuölľŔ´YłpżBzĂ50éÖf¤çPŠ;ąíŁ3$\ß wƒŽšöř‰“ôA4›ułF‡˝ű&ÍúŤ W^vöîÝCž4šĆ€„Ÿ–ƒŹ ÓÍ××6­š˙âĺ:o°Ž›c'桧*°Ez†œ}{GŕU{°}Ń3Ő!Řj÷ŕÔÜ:9ąGO-ĂéůŘŘę˜ővÖ6Ú°iÎw:Ö¨¨(s-B6‰­‚DYý$”f_-âX Ňf 7JäÓˆšﰍú”ăCüśB´–JŹô;ĘÇl>ńUŃ}@Ÿ:¨‘ďZ3ŃjĂ΀Ę-SÜCnŰú÷ŔălaÇ덯šNŸ9wÝő5xúӟf ŘkDř™Ÿůi:Ćřöˇď#Ů=^ŢrË-tě—~é˙żđ ď Ďąc'ŕÔŠ3đďţÝŰi“vŰӧω BÁ‡>ôa"S`ŸFoW_} |ęSŸ†‡zÄĚ+{Łœśź, ˆ5řַKKËđ|Đč0žAzôqď˝÷ŃŚÜ(é77ˇČCĹńă'`ßžýB7 ZAUˆ´Ž›LVW×á'~âmpóÍ7Ńšwźăáç~îç(%2đ’—|źá o 9ó{ż÷űá7ó7Š]Pǁž§^ńŠWQůˆç<çšp÷Ý÷Đć—'ž8 >ř0Ý?ťą.XwlŸ{ďývş}Œt1Xďďůž×Á›Ţô–XžŤŐĆޢ°_/~ńKྯ})ŻđůĄ.K‰ľľŠĄÔBȒ°ˆ?wÜńeň^žRžńoÂ0Č#4čœ5TşŽĄÝ˜ŁkĹŤŽŃ_ý}ĘŰŹŻÝ\"C‘ŽĄˆĘřěg? ż÷{˙ \żř‹żČšŔM7_O^lsŤĺÍáN˝žËăb‡'Xxd€7.’ŕŕ ăr@Ob4Bć ҝ$˙–“CŰ$T¸@ŀŤuŕr˜hq1šČňđđđđđ`°2ě¨pÇđČBÇůČGáčŃcÄŢG÷”úĐéÜ]Qú…RÜÁ˜™™I…úHCSzTPÜvŰłáŸ˙ů_hŽÇ$č‘âyĎ{.)ĺ-q˛Bä  —HůŽďx)yŚř_˙ëŒašĘ|ŢóžW]u%)(Đ $§Ͳ=pŕŽüźIÚÝ*b>ČäÇşcŰ„ŚŽč) %řwؘOM¸ýŠŹĺ)G.lœď:žŁA?EÔů”řU쥕ÎEů\¸ýM÷5’Ę÷ŚŹOę‚kË÷ůäŠA~ďvăš)iŽd˛JĆR8Xtáq‡Ź Ňi)„€)żQła@[MóiT‰DQCBEŁ#­*ŒÔa|´Ó-Ř3݄ŃV ÄKŤ[°´˛Eá­ś™§Í:§Ű ŁĐ¤FŒaĐkŚůnC•†1)żĄ‚>ž;ń{7ěŃ5!]oÖ3óë&˙ŽÓ>’䓺˝čĽ”Œ‚l:wbB*F%>ŕ¤ąUöÔăŕšˆu*ř׏Áľ ~đ7ŽkŽ.‡ËČÓÇ ŃőÄń9ú ük_ý6LŒÁěž=Zdrrö óˇiô0¸ť ŤąţʐZ@ö•Ň‘C”,ąIAƒ†Ç`hÔ+pčŔ8}.%rÖĘÚœžŰ€#'—áĚ½[ëŚďŻŽľÍš6Źmv(ÔHŰ{ö1†Ž' ¨/*€RďâŐČۨĹÇS}YgĎÇ×äL¨;9çžgśۈ*şďÚŇ÷{Ýé1 Ĺ?ř!Úáţ™Ď|–ź"ÜtӍ)‚’ę4Əǯ͕W^Ecn@çô&Ŕó\BzL^!Q?qçwĆ^pîEo8(•–á]`Zô đ˙řÚT‰áJ°źßű˝˙BçQzƒ/ËÇźqţC]’z‹ňÇúĄ~ď ‰„ŒC‡ĆśćçY€ú Ě˝ éçVi0goŕXwôäuůä'?™ÚsĂ 7nls|_ţňWˆpúœg>ó™đ˘˝€ňüžďű^řÜç>Om€ş˜[o˝…Ňăœ{ąÉ'IĽ Q„^Oƒ ýpą˝ąăłĹ Cƒ„{uQśąŚlL~Ĺ+^a”čĚÜ+ű–‹˘ů­¨ŽýH¨ŘÖÉću×מKF݆žj¨?›Ă^ý°Ű!ă<<ž,đ  pfR‚$K¸¤\„ÝSä6ÄG—„ éFˆ˝ađ÷źüdů.ĄÂ-/qŠęÂeĽ‡‡‡‡‡ÇĹœ Q™€ŃŐäUW]EŠîŸýٟĽšřţ菉1¨ňzTˆ0P •B­îŢřú׿A ô–ńĽ/ÝNÇQůŠT|ě1JxV(ŕÎT¨ Řť š¨Ü@Wž§N$w¤_üâ—Č-&şĎÄŻ(DŁ NT(ŕm ÷ ˜•P¸˛l‰k–Ą×ëW,•?öc?Fíˆ@C*‚Q ÷đ@ jMŒgÉZÁÜÎF‰×ó.’ävvcy{?((6';›t’–m)ö@úš‚gŃßğ¤Ó¤Ë\~Ň;„Ý{K÷•ÁJ*îc*Ůşë^łCv%Ű R816§v%’WAśž:r9_FŽČ\łMŁÖŮ\ˇ[>űÝŮB͇ňPĘSŃÖKƒÜŃ.I1іtô¸€Ä‰‘V ĆFë0:RƒF­Nd‰‘‘:Œ™ă“ă ˜kĐw$VÔjźŮ#ĘMń'0×)˜ž‹ßńčíąFTź&ŽťkŹ„h÷ކžîEd ŤKÍ÷Ž1ü §Źn=d„pű=GᎯ3k›0gźrŠl˛ĘŢaíüľßy˝”§ áöćď’Lk"I AŁďř› ٍ;‘búő;*č˜6šŸ_…ył–R‘Žhllڧ'ÍólÂŢŮił~Úc֏cô{jĘ7)ş°^.”ť÷ů^âĐöˇí˜ŽÁd§ß‹e„…ĆG›ôšúrK^Ć÷`qy“ȧç×`qe“ˆ+Ť[0ż¸I'$7mˇ\&h§ßËńŁř—*˘ł–8‘-Ţí;šŃľEˆő’NW4ĆË2¤Á+ŻüBâřžîq/z—@/Ÿţô§áMozS& Ęó(w wî–HŞŔ17C ‰çô.ąwď ĺ(ëăqL¤œw~ň'’6M Ћć‡00ÁČ{ľđ]@^ĄB1´čžđ…ČÖńCSůűöY~uuE„ ŻQŹsŔëPŸ`ß3 9ßŢC"[-,,ĆçĎX?œs1ěęĚĚ4ŐďC^ ŰI/|á áđá'ŕ+_ů*…yç;ßIó(Öłž >ú…źř›żů[ŇŁ`‘‹řŒ°Ż=ňČŁđüç?ŸÚ‰+Ř_ůĘW’g Ůw0tűíwĐŁŻ|ĺ+ćöž{îĄ0/¸‘çđ‡&¨đĚľIŕşęß˙ű}ŃPŢLóYq~őWŐź+ đk˙ú˙Iú5‹>…=ĎĎM;<ÁÂ#Ń !˝XČZ%¤W ôĽĐŔç\oî. &Gđ-''žN^Fť]eşĐ‰3Ĺ ?Đ{xxxx\̸âŠ+(tƧ>ő)šŻżţ†ˆpńíůáţa„yxы^DŠ–›ožŮ(ϧH8}ěąÇŕśŰnˤEĽÄwÜAîŰßţÓŔ ˝żó;żßüćˇČ=#4ţđGŕe/űR, ˘ űöíƒĎţóFđ= ŻzŐ+Ii€n=1, ŽŽşęJŞ*T0>)^űÉO~ ^úŇ—Ś” ódP@o¸kw‚Ôë xđÁ ~šŇ` @‰ĘŒKßožůj§{ďýyÍŔ{B÷ŁW]uĹÉôđŘxíËä$)!yŠlçJ? gšľľuŘI°Lpž1¸aš÷ÉçCž5ŔrşČ%wAŮÉnÚ¤œr%Yl⍠•şž ŽáeP䜼Î|IW§č:QOyŢýž2gĘÂżiˇˇéżó;żm’2Ł> ŠÎËTٜv‹\qśŘIĺĽŰÎIH$’„.0Zć׏üă´~šöÚk¨!yĂa > ŰÓá7 a_F˛’2Đ[jI˘LV•}‹qvGÚŐ(7ďɌÓmç~ŘĆž`áQŢÁ€Â5"O€U™] i†ě%ÓÎőn!Áž1řź<.™’ôQ&dŕBĘ 3Tđş×˝Žćv$G`¸ tЈs-Ć ýîďţŽ(e7í?řƒßď~÷_Ÿţ韒ŇI¸s ď:tzäČřąűQŞCRŸIŁ|y:‘/žç{ž‹”(č˘'Š?üĂ˙AťG0ĎWżúUäáË@Ż=ôĽAźńo$‚=Lť:PÁƒ@ĹÉ˙đŃ÷FŁIqa?ţńOö$}Gĺ †HA% †aĎŘ—]v2ďzםL›˝Ö(5žM‚÷Wżz'|á _$EŽ^őŞW€‡cĐľŚL‡ë]&Xŕî*T Á˘C!svŇU'“•Ď;ĘÜ÷ń‰ížŘ`B1ЕMÓ1´0ËHCsŃŽQ‘¸Hšj!]łÎ+2&*ȍ÷`”Ó ăŃŁu#ŘYăœUt˘ AT>JOBvŁëzň8{H…ĎCÉf&łŘŮÝ´Ý!h˙âîžn§KŠŠĹĺ5¸î֗*Q.ęa,ń^›Č7ÜpŸ…Á—q6/4â?~<Ú9˘hÇüĺ—ŠÝâqBQ™11aĚĹĹ%ňPqË-7“Bď=Hœ8qœîÉ íö)Köďߟ2îby<ňyĎ@Ľ„„Í:Oń\ççč7îvyüń'čŢ0/ŒąLܙD Üт;GQá€J¤ŢŤF1r„vo ťOŒ)‰Š&eâÎô€yâN–Ó§O™ňŽSűŁ NÜ‚őťâŠËiýpäČQSÖĘ?¸BĹ *90Ď}űöSZ2Ţ-čý7} wĐ`CĹöˇí„äŔąßK$áşsŹ„9#ž¸ËxXŇĆüü"íĂzŕ;œkˆ ÷‹_ţ|ň ß0†¸%.šUž{Ô ˜yƝ:Żâź˘đ-7ŚÝô#ĚĚą™żě>Uu-ţăŐ/§)úĺ7 ňř,‰÷ˆT)✛ÖÖ<9§2óŚôNÁý4ÔŽ'‹ cˆŇÂă…K˜Łkrë9ht™ŃZĂňÎÇYl›`ĄaxB”b+Ů{­ú+UÝńÉžçŠHt<2´ŽĂúäX&'°oď…î˜0żÇGęf=Š›2*–8Q7kScTŠW+˘6T*y’ÂÝʡ{—ÉďŇŘ’]ňŠ>ĄůţPGЃBƒÉ>(ű]4(Eăi—Ň&*+üďÔü:źóoő-“_%Mčˆę’m[Mő ö5§CfoÄéřwş×Âuhvíz(ńśăśQ˜y§\ŠŤ+éˇKŸ Š÷Mېo(sLLŒÂܙeÓGzĆPŐĺl°‘Ą_“÷5"ˇpfö`|˙i$âŒS5ý ‡] 3{&ab|ÔŹÝfi—jĹ$Ž22kŃÎü×˝Wsĺ´}ˇ§asŤKd‹őőM83żÇĎŹÂáă+prnB‹ 3^)Ýłď$őż őÝůX"P–4•. ?ŁT<ĤúŒ É9HаpŽ{Ł<ę\Ůť¨ŹÔwú™ŹEÜ5¤íënfœnTŕY74aĎÔ84Î ZŠ’ۆB¨¤ôŇ˰ýëőť…s§/°×`Ú´ž`p ň2#pcÄÖV›Bzâo”O° ”×1np@ Ç„ăǏ‘,ýő¨[ŕ>„uyâ‰Ă¤@BÝÔÔ4}żúęŤbÝĘř(ż`ýq3ę!ĆĆFéž{ěq2ž#™˝LH ütúôSŢĺDČ@`ŃX~éĽÍç€ŃQtb‚­ß^Ł_8@ޔlý6áÁ zb٨ÁűC=֏ŁnÏb¸ ô^‰¤ˆ˙đţÜzë-¤@[nĐ@ '劲6ÚˇĐsEű4ęŔĐă>cDŮ˜G–Ă烤—Ý$4`™Řgđž˛ÄŔôc_Äző_ŮkîťďۤSĂÍEVŃ-…} űŁ$Y C°ŔqĂî ˘/Ŕy ß_§Ě3XľÁrôˇç|tô7-ţş(ř]ö×ýî˘ď 1čĘÉ,."؝ŔŸýٟ™ož&rđXá+oţ+wH ř;!\á]ş­äĹ!ÇHçăœ'ƒŻq ź°ÄžhHůĽ_ú%O°đđđxŇÂ,.L<ŮçEJyßiTŞĄ˛ džƒ’ťŘaÇjT>|”ćƒZ4?œ-ÁŻĂşŒŒ4‡˝t‹ŻÇnßs‘cń—÷TŘ^Jç,coD஍0q s,›żK˛ öAÖHAl>n™“ç`߼~BHćžň1L*r˘uša6ďˇ%Xä§ăüäűş†Yú“íżĄÎ‘ٓ„Nž•›&ăľ",ťО(žGÎ÷\,líTşq3 ʕź<6đZeeÜŮ9>ք{›°off&›äb¤Q…F˝BĄ8j´é˘ ÚČ ŮöW6ÜN^—“íďrĘ :ÖĽĺÝrĎô‡#oô7d/aMëĚĹHޔ5Ýń2yoěŽöĽŐ6üţťż˸ ?Źćśą$L¸`‚…-œ2’žŠGjz#"X0ArH>aĆłgÜ*NX0LŇ2 "ܤ{i™/^‹d ť‘ĆćóŚĂţ#˙ś|•2–ťkg֍ęä Ýż% š~ÖŹƒČěżd]v)ŗŸÝť‡ôS8ÇńüÂůyrĹů…*i~|J(ľŰ= /Ňîô`cłKD‹GŽ/ĂăÇČزšąeži˜PdéŽůë(;[Ý{_‚‘´C°ČŤ¨ďŚŢQß\Ţ­bRDŇýČŮڀC—ŽÁsž‰żnŚ´'O.Ă#‡ŕÇć)źČĘZâ^N˜´2™syţv}O ÂŚÔv~‘ďpz.€ Ŕë `ĘW>aI’™˘B’ Č|oR'Ëĺ{xxlîÚm .áśŰnËŹ;<<$°Oŕúĺů˘0!źĆBäĺźâÚÓŘCĽ;‡”őE<‡›Ś‘„k9ž3x˝ç–é^+!Išœž=fňo˙^x\ěđ  x‡2đ$[M*yq@Ć4eD —qçéqŔçÁ^’-ň„—đ‘W&ÇxÖRđ𿇇‡‡‡‡‡‡ÇN˘HA1Řc^‹qb‹?H´@c§x}ŒĘ żqüř ,™v°ç Ţ!œ Ý_ůŽ÷ŃjšúĚd rťť~N ň;ŒQmȐuIÁ;ÔóŽáë¸ZŠł˘ş‰!†Ťß\ӝÎ!zäÖM\§wÄţ—ÍdţŒ)Î6âpX"ŸĽÂoč¤^ôKhŕcŇ OJČř\ôcLÍŢ_ç›á7”6R*” .”AŮnn×°ž­Kô„•ő"Až%"hŹc˙ÔÔě™nÁĽłcpÉ^ôD1 űÍߚ1:ˇťl8ˆXA wXÇc–Ęö}ĽŠ•ˇĘ‘ý™0aŸ‰őŢJM-ž‡múnđ§Ű 3e&˛}2vIň…$AŠ@Ĺ^2Ľž`ç`۲Ѩd˝™ x=˙ľÄŽŻ/Їa°ž%i<šźěو•ëށVćÁ!Zů:nĎ~1Ĺe>é˝XŕŞEQż„1ëŃł~—ĎZz¸ŕű”úž‡Ř0–<˛śśßţöýćcëÝiиâĘË`ďĚ4Íg33“^Ă,Z2˘Jl§7ÜĐE‰÷aNçą]”˝ BKţ<0c>ÓđŇç]EÇÖÖ;pôä &çövk¸sŁ#đđxrŔ,‰UŻ(¨UŃЎ|ü ßéąą&LO4`ĎĚě™hÁěLËźŁM˜kň˙(IWj˛$KЈç’´Ú!Ľo˘§Ű|ƒ1iƒŰ5MŞHó9|gÚ`h=iŘ1°–şNć:”´o]XîˆÎ÷ ÇÂmŤ1:R‡Te€ ˘ Y‹ëŁKűZRG€˘qÖ ‚;ĆH"]f,ӉçO—¤çáCęYř8ëdú#yşY—}•űčÍIƒ\żÍÍM" bi@°sZlIÇrěএŰŃüˇžś >r„>•Š‚‘Ń&Ě왂ýűfafzŘÓćo˝Ń4ď]ÍDš4—ÚyĐöËD•?§xlî{šú^}BóÖŕúŤfŕúŤg Đ=ňTrrn Nœ^%OÇN­ÁÜâşé_Řj÷,‘,"7óŽXţYBÖŹEsëާ‹(äĎh¨‚w?ňU0ż—ÓŔwQł†;ťs¨‡G° Á˙b¨\óČőXњ*#ŤˆuSQć—ĺ S'źžó• wÎŤ“ť.drę Î&ЇÇSž`ᑠ8îƒw4 ä€+!ě<ĎyßÝÝy?—%ÓťB7Ăó<Áyxxxxxxxxxœô[‹2ÁĂr "„ÝŞŁá‰]{"¤+v4Hâz]+ĘËÓšeŽůk022j \”!6žr(#ČÎ#DC*€p@[wBÚîĄ2îŔUäľ@GÎźŁ$ŇŔĄ ĐÓÄp$‰,d„aňą†Ü˘sŰ{fƒ âďP@d( Ő§Ó%mÇ_Rd…œü’ëUä¨2ÇĹEŠëËÚÁ^ä+GŇĆL2ŒÉ+靪Đ{…ž%0DGł^FßťŠy‡09ހéIcžhÂԄůmţNŒÖĄŮŞÓŽű¨GF¤žUóNh'\…ô<áđóŔNěă´`É ˝Ÿ$˝°ßk|˙ŃšĐ^žj›TyŞ"ňHaNúbƒ|ëdžť ,g¤YĽ­íZI%5×']/ŔóAr˙"9¤Ňؗ#ŇŠdő#î}ťJow“L)"É3yśnÚ˘ú§çžäՓa\ëqP߄ú>‡„ ÜiŮjĐźÄů[×؁˜ëTÔ26lŠ$ďˆ>iŠY]i›ĎixâąÓP5Ď­5Ň"Óӓ0>1/ŰOßŃ`€s ÖŠZ­SžEíć1<ň?ƒÎO ˛ď}‡2 ×\>íNŽœX;î> ÷=r&žŤú•VDTdoADĐpCý”ĺWhPSÉ}Ľćk-F5X~QjđđđŘ>ňŢ/oDör gođL •vŤŇ9!‚\!ń”CŤš×ćŽsělL˛ŔžŒu’Ţ5š'yoě}ĚőĎç=<.fx‚…G.Xaë*ŒřžŮrEWş3b…ŽLëNü×ÝY!żł˛Ŕ°řţ•L?/{xxxxxxxxě¤QŞHŃPtŽŻ!… *Ap *g˛;żq‡o-Ez.‚Í7kźÄëPiƒ\/ç˘ůz׼čšDbDOĎĽcăˇR ď*ĄlŽź“•¨*+“ä•™œł^,ƒk„‘QBLń5ˆ1ľź>ĂA’3ŇőSéD9őЙc‰1*WéXđXRťŽă"‹ďł¨ "{U$NTa¤Qƒąón™żľFF›5ŠÂÔ¸1îN!‘I 2ęZ¨s‚LQ4^Šz†n‚řn2÷ځ)Eыős“şÖäĘ y&mˆWQYXTö\pc8óąaVřŚűŽ,—ÓœüŸglm!Átîů$ěWyD“ŠEž“:˜¤Ý†#dŰ;˝ŃĆUôËşş^NYyo˝3Őčú­­6ÇđŹ÷A˝R2g™÷ b‰‚Ź˙Á& uň{;’ëĚQX]]ƒ••u8|ř8(témňšœƒ}űöÂ8žŸ3S0kžă\Œ†„‘4p4@nôńnż×šsp\ĹăjŠiżc˜­v×\׳ä3§ďVŤŚ˙1ۇť`¸4œŰ“>ÉDwŹÓ™zkAőŠűM^ˇ,ߓOÄÔËü|˛óœď—gƒ˘ůҏůÀIĄěuIîćc™^ĘÚö“?ykĆ<›™{ĚľĄq¸Qœ[q]Îkóźüeđx6ŽŃÜuť?<<,<ÁÂ#8€â`΂7 Áy‚2—Çř8^ĂJaW¨vŻĺ܍9%w"’Lxˇl<Ž“€đ=<<<<<<<<ÎúÁźžĺ8Žźł×5„áwTŔ ˇĆ•ĘUZˇÎç{-7,:ćÖ)W–‘‘9"ŰgZúC}aáÂ6oô#‰ r}ę7ŔśŠ!œ_ĆôŻÓ,跒Ď_GH2v˙íÖ"úŤRGtA}ž=´U 1jŒ°ÍfŒď­VFĚgrŹÓMkĐązÍ((ÉěîÄV‰ÉÎyn}ł×ší$Ż,‡Ny“ły9Ą0rújQ癓6ĹŰ Y–‹’Ľň<_Ň7SĎR–=K…˛ ~A`{d˜ cŸŠ#ÍŒZ˛ÄÄX5r׋ħŒ´jD°C‚ĹHƒHÍF•ČŠwG~ \ťŽűa’P^çøŢI;DWÇĆ{6ËgڞcŮ8Œ †‰ažÉ „ą^óŸ,1"Kf`Y]ŽSé{rąýq,1NĘc˛â:kI !‹ltĽź6ż_Z„śiM™ĺĆ*ŤĽNŐNü.şŢć­RB§ž—~ÜqOęm¤ŔŐøD>>&˙–ßgúý/3< 2>ÚűTŠôřnľZÍ(Oˆ‰Aěîš ÷řwjڍ6Al,ŕżx íŢDO-˘NämĹüÝŘěÂćÖœ:ľHűZýQ"Z´FTţž}ł°o/’.ŚéŘŘŘ(•WŠT1%!NĹł›ęߎťlWĚK‰{cGěôŤŠ]ŃKϤ #yćčáśKŢI,Á"ŽÄó7¨tRsxś’öl˜Ü=kóě*Q?ϐTô\dá*}/rîÉ:ö†’´FBÎŕ_rP§žPŕ ‹~ěaĹ=Ďd„XU6\ňL=<<ƒ×šxaŇŠL‡6)$)ŕ|‡ëw˝ĹŸźŸĂÔ#oƒD˜Ěk$ödá։ëÁu´3<ÁÂ#ĚV+S–1ăœw¸„ ]҄üŽ,‹ó“ą]b…$SȲQ˜a zxxxxxň6ŃŹÁÄXÓCG`j˘eŒ Ł0>‚Ţ(*P§ÝeĆřÚŹą˝WđÎ÷ŘŁLDܰ™j`†„ĺ'p›ó&¨ŚTŃP܎ýNžP"ž‡†ˆ(8SbfP8ćްaĹăDfŽP›°Ížˆ*‘ÉY.."ř¸í'ďůÂCÔ.!Kţ˘#ŠĆ:Â$KM‰vŸŤ„tC׃j_IB!Żâo/—<ы \˝Ý„ŮžĘČŻ‹Nýč†Ëî)f˛EävfJ?_ŤóI'ƒÔKëŇ48Ł…çĺ;˜x´lgÇšYWyxxxxxxxx ŻĄ÷Č š şPĹżŽg ÉZ—ž$A `Ë;be• @pžyJP÷˛âĽb@ć)Ý*y‚…‡‡‡‡ÇS8ßmll…đxxxx\ˆ`íø9í‡~Ěôéă|Ę ‰lŽƒ1ňŻFiÔŚٞӆSw3maŢAc§Hƒ’&†#WĐ™ü„+ur$ńO2ňs´$I¨'ĹČLNNÂôdÍ|Z05Ń ĐăŁu"LÔkÖ;c­Ša0+TaľDî&ˆő`úCŇŢAäÎčÄ<ďěNäĎÄCĹłś÷ߋëąJČk ̒6ĺśŃ܉ˆPŮ%YÚÔwŔÇŐ1ĺŇoKŹ@o č–ß–m¸Aý!e÷|.ŰyžçÉ3QÂX›r˙ďđo={h;.aľŰc _…ĹĹEXZXĽ~sÓMW‘§ƒ4ŇU4ŠśšëŇż— ĄĘßË!ŢviV6źA* Ȑ"ÉłaŁż,ŻěŮáťÂîŠůš<#3ƒ çýóé´ĂěĚD22żŤŹÇb]ę’XŸ„„ ++Ýa㘂D L‡ÄŒÄ[jhËDĎűŐĘj–Wě¸~âäxä‘ĂTVÝÔI—\2 —]Ф‹Řťw/yŔ @Ľ úďF•÷ÍcŸ ť+‰TüŰ&şDxdň„%S$ŢgÓ$#ч˘Ăi;żËÓő Ű\H2*!%šďŠŹ—ńnŚČpѕL‰rH÷Çt~xF’(âţČÄ@ó‡ěur<řŠň-ÉBAʉËO˜ŸńľI‚äL<<<<<<<<<Î;<ÁÂ#$%ƒôÁ<ń/"¤p'•. ĂőˆÁ×ć ‰(Č)fŮ+ ¸˝c$. “ď(ď”r×ĂĂĂĂĂă|çR# SÂŢ4BëşĺY6 AĎŢ"wņžuňĽ łá--7CŃ'„ ľ ›ąwG6şŠ~đy{>ŇýŤČ“‹˛žsţHÉťD†FĽ*ąńœëÜӖ˜Ň3mľiŒâkŤpz~VWÖÉĐ|âÄIŘj›s›]ŘX_%ˇÜrÜpӕĹ.úŁň7Űó,uĆ žęóNűľoY3ęT> !Ă}^Źď(GXßâz •y¸d ö:ývP N6ÉżŽěÚ~c›ô˘ĘÄ-Ö3ÉÍ?xŒőDřIóóóV‰řápšx-ęĹ$é¤ÓíĄI†Â:¨­˜P57ż>v”Ć'ô”łwĎ$\˛/ĚÎî1Ÿ˝°˙%Tߛô ˄Ea‚y,ďY–y–ˆ7${NźŰéë¨o:ý˘hrĎń¸TŒčŮFcŞ}f@D1{eBÔĂP%mjŽy—ˇčŮ-,ĚÓ3ŰťwFGGÍ÷câçƒm›şÇ4a×AÝżęĎmČí§*/ >ëČ# l›‚âááááááááqá š@ŔĹ şY€dŞÜÉĂ)Đ3Á‚wEH—‹˜WvëČŹ{™ţF!‰]$W°`)˝c¸,~'3Ř{ţľťî:GÚĂĂĂăBŽSëëë´.çu˙š$:ÇF¤äHtź ­śťŇ&:ˆp‰q$ šűۚM˛'•2„]¨$‹A‰Y`Lyąă6öú`Ďɞd6KfQë~tZLMŽĂţ—웁=330;Łazz:–ďXFuĺ=Uąscn›Đ?¸{;LŹdôL {šHÝgÔ?zaW”Ć÷E÷„9({Ž'šF†ľä߇ HËËHŚĐ#셴˜ď+!YąĄXĘÝévHź¸FĐ<"@ŢŚˆ M~śuJH]ÍĆćÂ5ŹŻoŔâҲ1˛.cö"ŹŽmŁk6ĚgsŤ ‹Ť°n Ţssópřđ8uę¤é?ĚNĎŔ•—4ĆňŽšö\}Íĺ9Ľ ĎŚmëľlČ ×ƒ…lÓź÷0n_UL(ăĂ Ç*Ë-#[pZ˙ŕöˇŽn’á°ű}§Ź^|N갘(áza•÷ŽäeœłŚŚŚâśZYY1ýh“<œ4›-",!ŮuVŐJ*őJ*I˘×ę@ˇg=^čȈ$­­ŽYż+x|í<öř ¨`~ՊÉŽżţr8thżŠC­h"Ç ű=yöš@€ RD,NŞ!ۇS—ŞrV”D9ŢMňĆY_K˜°„˛Ü|ăż 9ŚbÚwks‹ô}ř.#ńĺÔŠÓ晬Ćm]7óDłŐ„–ů4› ¸ä’Kˆ4Óh G’:…OŞŐkĹíŁ“şĺľEŃs°c~Îű­Eťˆpýçů€%Š2ůÓ-?>Ź/äpN<ÁÂŁ(źšĘ+<†Ćfńł÷WH’ěyrůť`äëxW łH˘¨Q,Ü* PEBŽ$i0)C ĎźKÁĂĂĂĂĂ㩞OŸ>—^z‰WŹyxx\P@cŞŘčtŽÇ¨Ř‘Úaę’"œk˘$îŽÔ"ٌÍ[ť{Ř3éŇťÔłFiçăÖŢÓgíFϝ"Y¸y˜4֓‚ő$Q!‚šĄŞĆ`91ڂńń:ĚLś`ĎL ŚĚ_üŽF3L›×°ĚÇâżěr˝ÄŚf¸üŰĽÝJłça¸Äüذh‚ťëÝşwz:rżĎ$ a4 "˛QěEšwŔłť~zżŔÔU4ŠĂ+Ö5Ôý˝”)Ü~çţÍ´Ď.ô™A Ű- “ÝŽ†NťcÚˇKä-$Q,-Ž’w”ÇŸ8LĆ×Í­Ž1źŽ™ń§ǏŸ‚Ĺĺ2Žă_4ĚâłąFQlóŚŃ¸}ęô\z`/źl†ŒżNK“UCvMcT—I‹ Мâ6čVší›xŹ`ň¤ĆöZüLY/RDŚ‘c˛ÔŐ0qƒĎ1)H’yúa"Ö0ýJ÷é÷ƒœç424 ߍÔCšíÇödŘÜÜ ů Á!Exc~ÇcŹďÂđ![[äI$÷eIś"R—)śÓłži€¤—8Ĺő–ď%灞zܴâˆX‘×žą…ú×ďŘçO”żß¨óëtlřÔ/.IjH-HžÂÎ^5mŠmƒşBü Ɏż×ęU¨ÖŞć|- í˘ˆTíhŸsśmBe —.¸GĽbRŒrÎĹďŽůô˘P! vjĚäőÂů=<<<<<<<<śO°đ(„$0 pą Éa…Ś´W ¨Xřcďrׅ,C’70 QěőÂݍ!…b cLŘŕëĺyO°đđđđđx*@ŃîÂÂLMMœł8ŮeŔ5ůÂÂbě]`8ĂOd¸É;3 A?MVÇű¤MŒ™•ÖíˆkR?’<ŁĂz€:ČëuŸŇsQÜ|ÉnےóS&\ƒiT4ÎCU ËЧZ­ť^ `l|ĆÇZĆ06“#06ڄńńŒUA?P×! ‚ R^—BC`ßíJÜm ĽköČ3…ŽÂЎëÄ+–đAĆŇČ=?z˘ĚýbĽÉxŽŃŔWĺŰ8tĽ m(Çĺ~ʸÍsü  äpRX[g­Ľ‘ËJ{;ífďÉŚľ†DÜ {guŞE‡4`cČ”Ýíˆ@ŃiwÉóÄҲ1śÎ-Áœ1¸..ŻÂVťk›°śśA^+zäq“śGFŮŐľu2~SȰć\$ŽŘ{Ágdßq$H…vťĺ•učöşĐ #Ď&Ţ16[ŁiűčŮ M€Ą3;çózą|4’@`ĎŠ\Âo`á4nů|ÜՙäémúÝK?l‡p‘GĘ;Ÿń0ŕąÜ°´ŽNIśÜ¨Ămˆş.Öw!°Ż"őVHŽŔ°X˜ ˙xŹZŠÓőTL&čő:śŻ‡˝˜p‘>˛ďšźoy/ÉsŒŻ-"ßuˇ’U”$¤;XŇWŚĚx.ÓQ둃C&á8™„,ąc’KÚHž Ż{ř>/ÁĘňÇ{čÁöáUÖ{n &&šäĽ˝yĐ\RŠŇo"ľDρBW,i­X˘ ßC% d=$éLżHőŸ ßgwZuŻ’ˆç5<仙^(Aú ”ş NƒżŠ;O°đ(łňQadđŁ`ĂÄ ţÎ+ aŇŘĂÄ öFÁJWšƒB†aŹ”bĄTş^äp |—‚3‚ !;Ă*÷đđđđđ8ˇĘpöö„óÎu¸Kwk“AËĂĂĂă|ĺ„3gć‰ü…Žš9Ěŕ 0k¤9;RtĆŘČßuôąîâ´ńřFçăD g!>2†Ž˙Á˛­{ WIä•äşP——ČúsDú¨ňZ_ŠŃ]y‰ńĽ_ËS4TWÚQ\ŻG/úŔHŤăcukÂÔä(LNŒ˜c¸ŤŰŞ—öI+2|ˆśĐ‰s‰¨tž‹Â§Ě‹a2őgă•㝢Ҙ)Cš$Ą0ůˇRv7zźëŸBŕ(29ڐaÖ#XŻ–Ă“F ĺRŃoAЌ!5öˆ×)ÝK9vźdmŕJüľdş•îťd,ďMrUüvEĎJĹXťĂ="˘(klíšöiou(üIˇŰƒő5kœ^]]7†×ów 6ÍůŁÇNCľ €a>ÖÖ7aa~ W7čüęę*]—GQ•j\GŹ•{’ç‰;Ř+dx „÷‚N§Gdl‰]ű`Ÿaف^{kî°Fé2NŢ}¸$׍’ÜäS”—Kş`ŘPř7Îw ¤óbݍŁjľZą§V$ŒŒŒY2‚îqaD" }–™lřAI%•ĚsŠđ*=ˇDWĆcAYé• #D,7;– Ä•,!"¤š’Ţk<†^eş–0ŇŢjĂââ˘yG7Íń0Ľ›ăľ€Őő9ŚŃ‚ÖHD‹tü—‰/č™C{TđyśŸ×˘ő„LÇď}” Ą¤‚ć*źŃŽiĎnrxąHÚR“ąm_D˛'ÖÉ3pÉOîťę–%Çp=ňÖś˛áź“ĂĂ,< !=XH•ÉLžƒť‡‰r€tč űL´`"Ç ĺóLްƐNĘue^9ě ĂĂĂĂĂĂăÉWyĘ Kœѕ.+ĆĆFIéďɄç 8,á:}}}ĂWŒá“CşcŃš›rˉ7wŞŘ0œ2ÎړYč2ω7­on]xwpł¤Ŕ˜bÓŰ|í%ůí‚CŔPɟ2Ď ƒś>ťu­f ˆčĄĄYˇnŘ[Ş1ŽŐ`|l„>­ ëć:kVü…÷Đ} ¨ěAż ŮFƒ|Ұd$­^ŤRű" ĂbÔj5X;ç=ô˜!˝š„qhŰçťôžv#ň’&B&Pt{QŘ^ş‰M6\O/öTÁzB†¨ćžĆx#Uy4b˛e%’_"(ńőH´"O@1YIř;z>H˛¨D×Kr…ü¸m@=W—÷٘C‘Ž)–:kFዜ6N˝kœS˘ülş8|I&ŻÝ{7=<<<<<<<<Ęá …`–8ƒ…)š›…-šK…S銒 RŔ‘‚<_Ç“t™Čy°g )P`™|^şqdÁ˙˘KB'#¤á„˙ň܇Ŕ𠛍Ř!7Ũ¸ľsrńŽ7Ag@c$îhEĂ)Ž=hDBŕřă@vŇQd,Ë3ŇąŠ9ˆÖH)wioÜzŒŒ 467(2rŘtö|ގUČšżBcŒ{@ĎOFŔ]՘ýŘh@ߑ ×jšďhü3łVSÁřX3:gŒ€őJdĂ6 #… ăĄRŘĄSzş†aȲbr>ÉĎ,2dÍ´‹ôn}[žMÖM…CH?!k@Ί‘ć~"ĐIZű<بWI IžS˘ƒŸ_ČF6á !ý\óŸąRŽ1œĺć¤.Ž=É?sw%×ęt­">iŢČ}ĚűżŃނ͍-"S wŠĽĽ%2ŻŽoŔŇňšů˝jÖ&Ë0o>kŤĆ@ťAi1ôÇćĆ&yşYY]Ł1„vÇŁ>ŔÜ÷;†T“h*Ϩž´§*Ąiń<ĐPŤÂ(˝˛}ĆŘoh2̧٨Âňjżń"ę?Ę­|6L`lŹt7Ś”|^Ś+&„¤ÓsYÉńí{*Ęsëšˇ˛4îÜ ÉgKŽp¤ŽŸ\<†z)ěk¸N§pč ¨V5éšf|M­ď涑,˘—cCc¨XŻFáxÂ(ŹŚŰ0ď+{§°ů$z5Šßł:ÁšđÄ!WSú9 Ľ‚ˆŔ„„ üm âc–`Ą’cŃ'^?TTQ‘haPŠ76S’‚˜”đźŕ&ş{•Ź'´Î+ĹĂĂĂĂĂĂĂĂă<Á,< Á‚ "(xńÎ&ܤˇ ěLn`R{˘`ŹLąČ尀É0ç%‰œˇ$_° Éąžýt EŠiž™”ˆs*pŽfĽmţî'€ÁŒ.; ˝(„:6Đŕz›]v'nŔӆA×ŕƒĘwěBîNV>n7Š*ŕ]˙™| mŽ +óě"ĚŇȌĽécŮşFqÔĄČ8Č;Ɠë3÷ýTbˇŕvŽ7j°­ş1Ţ5`l´Ł#Mi0‚‰`Ą`tT™ď#D˘h6*)b}öŢxˇo6äI˜:­R!J,AÂZ첆NkČ A Ű“'ěmĺtŁDhŒGĎd¸V×cbAzDšĄâçĄUl ÓIÁq=ĺNbŮü‰L&+–|§Ç(ëÖe}ŽŻüŐČ'dŰR‹w-!aôCšĐƒMn[Űw°wĚťDˆŐľu:żšŃůĹ%łÖčšcŤ°ź´`ŽŸ8Ë+Ť6źGťCá<ÚíŹmlPř€Í­vź"ęô’*T`ƍ¨NUą <&ńÄaJäýĘv(mG&Ô( rĄb/+öí֏čĄÄŒd űŹ“đ]Iˇ#×Ú)4j\ÍôŞřćŽĎŒNNu! §K’pŸu™— ˇÝňiňxroŰCQ݆ú-ňÎť›{Ü<ƒÚňŽ+Şo’ÇńĂës";h$=DëuqíŘ÷ë 6| ŽëŃsÎąŹ×bo­œ§ŽHOôކL°0é)” Ń 3ďL:ź’;ę i!Pqčö$Á!:8Ô’ťčţ˘ąˇR­¤ćújůÁ%D`žń,şĐ† ˘÷ŃĚ+ÝzžŮ¤{9uę>|ŽźâxÚ­7憛rŸĽmwK BBhLŞSéç•úŽ ĎÜS4Rž,Üz„xĎHŐK‹ĽƒSž•3ć¨Ňw/ŒŢMŻăôČö/ô.'Ž€‡‡‡Ç…&¤zx<ŕ …`E)ƒ n&T°đȤg fźKᓠ8¸˛đ)!HŹÜBĄ“„0'„çÇǘ`ááááááńd…Ť@“ŠJžŤq>Ä-ÜŽ ?zxx Š"†Œ}Ž^+xrw–"\𶡝ëŐđcYbŢÎ!1hČl2Őš$ ™$ö@á=eŞÎN>0ţÔîÔëUóę0ÖŞÂÄÄŒŒ"Â|FP­Uíůz…Â|ÔkĘüŽĺÔ­ßó!ˆU´[—Ă`ŘíťŘ€a’ Dd°Ţ.ěó‹ü8đܔ"9DG˜jgKv<[óUĹŽľŠ^ƒÎqIf ă˘Eœ6JŒŚJÔ7ǧ…çčyK/Ľď‚č„iŇDś÷O Üvśz6aI[ôBK˘Ŕ]í#7Łšľ•u"I QĂv ‘˝M,ŻŹ™c›°žŃ†#GĂŇŇ ,Ă/.ІťžšEaĐJĄ6´đÜ TÜĺm{Gn˙“ťHˇžđźĽŁg“5-I…űmjn—ţϝuüžGĹCǡ{$Y„t?Ë^Š Vٌ4yt‘ůööÓČóKL0ČÝœ,Ä8ˇ`jc{kĹAט;M˛i8ë‘Ü6rďŮ%ŤěXŻ•Ę3ŠťĂcs26Ú˛Í/ŹžLë˝’`ÁcDů$HČc4npŸĆS•Ť!n ŮFňť${HĂ2W˘Î­ÓÖ°Žd­Ő58zě(ĚÍÍQČ&ô’411AzĹÉń1XßX'ňÄĆćÝGËL^Ł#u3ÇUČ;Lł&Ý´7°Ď$\í•p˙#gâ÷ß}D™őߝţĚޓ’ôĚiKüĚ đl‡H›şN&†šźl~dîň¸ř€ýCúxxxx\ȨTÖÁĂăŠO°đ( A###´pgrsPÁÂÄ ^źą°Ân‚Ů —‰P”&džě݂Ůí’Ď×ň5V°{âźź=ÁÂĂĂĂĂăɎ"ĹY™ÁÓUŹűšĐĂĂcP¸cŽk¸ăżý ҈{2„1•‡Š E†pĺ\“, ŽMŮťĎ1°Wœ„KöŽÂřXZŁÖCEłŐ€–ąB5u"_`¨­\’„Îýš…€AŠżC$6śia%Žú†fbD증 ]*6đ…19BzD´†î¤ĘlśĆBëš ŕlÜcŁ˝ ¸ż•“E2„• g3ˆ›Ľłö~Üë´ÄeF3KˆSB(ٞ¨$\’(ÚD–ŔĎÜÜ2ľëââ*œ9ł›ëîcś6Űöăř‰ÓpÚ@–V`Ĺ;ťadFŮ75Ä^D˘ňÄs ?Ab¸‡DÁ-Nĺßý`Č3d;éŇ1&K2H˘­‡€^â)łŇ7]˝śÝÁé÷DÖ19ŚR䊤dďS’lÝżE}Z dß͎ŁÉŽ˙ݰ$‹snKŮ>’L—&ę$ÇÎfŽ ĂŹ§öâJĽ`[Ł7•Ž‹ŠÓ˛§WťóÉśOş¤ &$÷ËďŞýŠxĎ?Ś!oĆCočoee–––ŕȑ#0??OăÍčč(ĚĚĚ@ŤŐ‚ąą1X_[†ÍÍMŇύŽľ aô„ŁcŁF§8J:ĂQ3wÍÎN˜{ź0•$IäuĂŠvß[oľčgö’+ă6-‚m×ä^4¤ß˙źŽĆiäU­%ŕÜŻ ú-źœçáááááááq>ŕ …@‚ Mn0Á^$Ř%šFŮł.úYI!=]H!!ă_źžcČł Î/vŤ •ޞ€cSş öůšÓpçWżL÷;˝Đý`Ý(#ëľş)§F‚^ĽR3‚\ŮçáááááqŽPf t•çŠxäůÚĂĂĂc§5Nĺc˜utן;aŸľśĘ;ŕs/L'ÂČîčŔ!č8[• Gb=#ôč”ő› ť˙ČŔĎű†+ŠRTŞ6Šś źĂ´‰Wśë›AUČ3Ä䤂Օp´.ĺmĹJ` ů–Ě^!c/Ę35 bdœŚ‘qíÂ×dÄŞyĎŁ[ú† 1†;"4 ÜX˛ČžŹ;dČłÖž¨ŚčÁ‘­Ř˝ŽŚĂ#‚UL€s?JxÔŔôÉ:m'ÝÚç#É*2°ó×>č×óŒ¤qI%ĆW&íäĽ)ž,ëAĽáۓÂĐŽř.É˝hÜ\\Z…ů…eX˜_6ýd67ÚŢcsŤsËm ń†ĐÓgÎŔâÂ"y¨@Oaä˘!ˆH0ča!dç hôT ™%n•Ô“IL°;ńíű%CíşŹ˝†G9xwžš'EZąiâ6:´L­k ťxŹKç(´Úf'e§đ &Ÿžc¨ć~‰a ŇĎÇz™‘Ď-]ǨUŮ}ˆűێiŁżŠ Ä.™" &őČ4yť˙ó ™j˜Ç´]rÂ0$‹2ł<žWůngŰ?!šX‚T˜ň~ᒫ\’ —í~ˇżƒ˜Őëih4kŠźiŒíZ’„=ęi"™ęĘ:]3VWăr“16Œß;ŽK/˛ąăŃtˆ 0‡LŁh,ŮÜÜ"BÄňň2œ:u Ž=B$ ÔÉáFŤýű÷[ňÄ華ŻÁćú&4ĚźqŐe)4~đžŹçŰ:L\ľŘ[†$MĐws?]"Ÿ›M"‘0Ě˝ˇŰ=kŇyĚG‡Ů6çűdo7ř§Ű3Ę'-Ă<…v|Ňiß)ćD_Nř¨¤ß†*ˆçy¢ŢŔ}Ä –”Ô+đ˜ö–…={4ńđđđđđŘEx{™‡Gž`áQ”¤w T@ 鿣 úYčŔóě=‚ɘŽI|ž˝TđőŹ|Ăc<8ăuIš`âţćëY@eš'ŒŽEĺÓ?ź˙ýĐ4uśq˘ëtO3šóĂëHńXGŇEî‘=pŕwü‹&žŸœœ$!W#E§uÍ[Ľkř/ß砓 ďöœH°M¨X?/zxxx†Ţ5TdH„ţ÷˝]äĐŮXËd Ap’rűú‰đ:šžMaBş¤Ch™÷ŁŹk ń{j´áź÷Ň*;ŠyuĐ}˜DŰďÓĺČ#6ědYe$â˘ôEťřóˆƒ×#=ô”YňĘr˙˛ďGž?nzŮrńŇJ­&貙řXGŹ?–!…\<ŽhlĄÓn‹’$ lĽçü‹jŐ(AY§žÝIEDH3h7*=kú‹ÇČőd‚sÉü;ƒá5Ľ‹ŇdëšB”ۘwyxxxx<9ŕĆ…>Ž BtŕÝťü]Š´2ˆ˝R(ízĄĐ #ÚؚŢŃÚowľ˝„ËSDuY慤´)ŐęMčnŹ@Ď1Ş˛<†'2°%eŕőˆv GŽ×“źxW:]_…HŠCŤŢ"âĹęę´ťű`Ϟ)2¸cždwϲd=X@LŽçűqC<^hpűIňě†5T)č' ŮMŇa´áYĹruÇ´ţEŁćÖVÖÖ6`qaĹȖmj÷“'`îĚ2Źon™zŚhĂĆć&=z ćČ]˙VťceşH†cbľ ş‘ŒGۨm(Ä@Č;÷YąČÂ<Çdž6 vß†;9v¤ňRÉ1YRfo¤{ˆd[ëŐB“ǏN;$ƒ,z­”Č8.ĆŇGŞ5eäôDRÖV|>{ďl\‡Ą âz_ÜŐ˘ž´}ĚęťÂČ. IŚÉ#ďő{nňý˘ÍKĄŃO]Żvł’ ŤąŐނĹĹ%X[]…ÇŸxŽ?k+kT÷™$ĘM[BD˝fƗM¤mÁŐW‚FýZňtÔ2úťfŁF}j$"YÉq‘;~§lŘ A8„z~Ű%Žnú> ˇ=]2ŠD˘ű“Çű?ë.†Mꆅĺă8P˘Žt d}óÓdëš>§DţŕäçćYFnňrž‡‡‡‡ÇůÂnŽĹ<<žŒđ B ür&đ/{¤ŔßL>ŕóVŽa>xŒCŒ°Äž+ŘeŁT4Ę<H yĘ"|=׃W|ë…ßŃĹ`Bh¨@Úľg˜R˛GWQ¨”ŠëÂ^,Ź+ITl†‰0Ş’XžŇƒ“Pđ8’3| ÇúĘrËŕ ëLŔ`ĺ§$gđ˝ółĹ] ‰÷ŽjŠ@b !•čCN‘Sĺ(vUŞTě2V˛Q;$;č,ů$ˆ•ş Ü˙&÷'víüźîááqĂ 7O ťĂ9šâő k´HžCL˛(Ę7ט˘#ƒ hH#‘”3âkbăJ… aŇ Ćĺh6dĄI Ĺ!\C›˛BˆŒL9FŠ”Ź˝1[śÓńŮœď`ŽF61†ş­Ž1źŐ ¨V`d´Łćƒž˙*‘ç?+ŮĐÜ^śîa\–™_Ԗƒ`7wâ—=ßíÚú䏞ƒuáVŽDO(öĚ1rſцľő5X\X" ‹°¸ş ë뛰ąŽ!=ĚłŘ2iV7`~~ćçŒum 6ˆHdX%šUő¨° RBrX3¨ŠźŤĐ!ˇĄáąAEץ¨tć\bH¤g&*JŸŁuHüŽóéI# gŁŁwƒ‰QĘęŃŃnqŤ3čĹýŮŢO~qčidźŐHô>ÓýÚ%zš†\Câëúĺ]|lPl'ż˘óyíÓo‡c‘ńYžäř0D‰d ßĆ8 łă~Tű”ŽGęv ŰÓtÔŐŐ ŮqĎÝ_ƒ3sgHo„ş”ŠŠ)ŘłgŒEa|۝-ŠÁ-7] ZƒÂu4uÚ˜1 Ő´c9˙ʧ!"éod˝ŁâŤIŘ´˙ŽčXq^q•ůžÂ0őŰý›şÍœçŔ폄ű;ČčéňDz…Ąal(˜~pçq&H$­‘ßWĽŮçpÜ tŮ˝ö[–ŤüF(ó O°đ(‡a˛ţ–D ΧPŢÁăčY˘˝ŐMóˇŰëĂvŹ­­ĂJD¤Řj÷ŕŘą“°˛ś+Ťë°žd•llnÁÚú:,.-S˜4ä[҂"ăh\żšÓÎŃżrĎ4"FQH3Ӆ-ˆĽűŽ.0 çňÄÉ8ߘ`¤ul˜$š_EűÁ‡+éĂĘŠě˝BːÚř ľ ž_adPoˇťdˆľĎ śWĘŚUś-ńݨTúďŚwée÷ęNwÂŔ_–G™ž˘ß6ߝ Ë%ÇűŚËŸIÁœPRŻź´iB_žîĹm1›WŤŤ›pÍՇŕŔěhŹßČ3äË9Ç &bNŃ9vGŢóIŐ8•Ć%d$‹Ÿ3ęXŇ×iQ×J&˝›‡œ39ÚoR˛^-žß˝°Ź?'ŁçÍó8“_윜}?Ss=@Ą,MŢäkĄŕ=gâ%WĹŰ=<<<<<<<<.LxK˘G!Œ°ľľ˜,ÁÄ<î%˜dŔá?¤>τ&\H‡őŕăŇ;…Ź“)¤Ë@NߋcÚvSd Ο | 6äKbŸOˆ%ÝřŢhÇK.…ď =5Čű–p•“ƒÂUlş9„C(aú) śƒ~Š–´˛(+HöťŢőĆQ„˛ÝhÜ×8< OŽŐ`||\r)\qĹ02:JĘěhł\‹ĺŻűŽ×4‡8°nşy'~áZ/Ú.›1ÖEľIHŕŔÖ×Ä"ŸKŒoÉő‰J9 {çĄHî1˛ˆRŠ d؎ꖷ;6ůÉ|Yj‡° ;‘ŃŘ:Bňü‡.ŢŰí•§—5,ZˇkY×÷3ŸŻś$ÖKŁg§Ó&҆ňŔśŔĎââ ý]YYٰëć<~?zô8,ŻŹĂęú:tŒq~ŮC‘eyu 6ś6‰Ta=;ŞXV%9c $ ĂÁ•ž}7őěđwžQ֞ĂČ5ÚýŤÓ}BKoĘz‡č'•+W•?âÚš5ÍÉ#L§؟Ź'ĚsłÝ6ϰkű?mڈ6l€rÚ~ˤŤŐ*)…[żźńb$eć+žfP “vl‡Ěáb˛Í úŒAŽ/ ť‹6ŠŐˇř>rt ĄÎé˛Hćڄ‘VH?pHRůˆlgW4ĽiY&’•MěßAžŠćŔxzË@ôn—y[ŽŽŰi;s^—§GŇQٓ Z¸“ŇDɌ^+Ľ›s˝ŃŠ3:Ěíw:™’óŃóАŹ!â#JeĘąçÎ×LęááááńT†ˇ…xx O°đ(ş‡ÝÜܤď’ÁJ"—!ŮűLtŕ4LP`˛§—á3ŘÄUpubŁ8çËáG¤BƒËâźŮł*„ĐĘ(×ÝşVtÖý^†ĚRTŚËăşÉ 3"=cH…ăđ9¤ę  ŽĺÉ÷'ë×OY%ë^V—˘2‡9žSŕűs1\o*˛-đłźź s°žžO{ú3ĄŃ¨s.ŕááááááááą;čgƒÓ9F(†ťVwĄR(\CťĆĎ4‚’$v`cĽCš;œ#ň†ľĆ¸ i°QśŽI1́žŰÝĆĘ@Ł óÂ@ěž ˛^šëęx}ĎíßѢ ŢlŤ`Ł×íYu$s%aůR2„Ά7”ňOžÚ‘\('MRĎIť_řg≠#Ö ndÜN—By W‰jĽ +ŤŤDšŘŘčGŠUóCv üřăGae˝‹ K$›;4çLšľ5ŘÜÂđ [Ń#d&`=ŽԘ<Ą˛&0ņMUŮś¨Ąƒ=§MŠŢ‘BšN)é&őŹňNBü)ť‘óÝśI}dÚôîsĹďŤ ř(ý‹ä{ěH°PÎ ĽoęOŚ_ľ*”ž ňgś=•ęK4p˝hč˙ÜĘóR9Çú]S~Ž?Ůeűȍ‡ě/Ű%Yđą˘2űéodšüźé_kČwßĹhě•çđ/ę$šÍ…)oƒ–I]’üÜkłóÉś RRůi9^(ń=>`űmjž4eOiFś„JĚľXę‚őRÓ óűWE)׃‡d;/ń ţɎé2“žDădô;UœvŇ Ý¤űKY‹SČwޏĘ, ůäááááqî1čÚăló<_ů­×\™ĐĂăbƒ'XxIčÁB*e86hËđ9°bŇsC†ía=¤\ţćďŇkFŢî#Š…kĘÄOˇŰ6 KěŔ&VHM˜â\éĹÂeŚłbQŢ?—Ă!&d(“Xa ĺÂś‹Ýš€d;ÉżZ(…UŽŇçl´šüˇƒb'ďHǰ&ÄoŽOę@Žq9/D(ďߞ°×)H݃NŁíßÄ %Ş#Hy‘ Ţ;bTw+™”ݚN"1qߒ)0ôĂúĆ&ŹaȎ•5X[ß ’†îX]ľ $NluşpěŘ)XXڂľŐUhŁi>˜ßÚÚ˜l kdb[t=‚˜¨˘ň-d/97ڎŐDLš)Ć0Ď.oCAô…‹‹Ď§¨ ú Ű)uqţ5…k™T•Œ\'új=SÄÖSqCJöœÝîâR[ËX~ĄŐ¨9ŸţĄ$ňĐĽ÷Ž!'}6ßücŞoşaΟm>EąAH ÐΆd!ó•s‹|ny÷|qeu2Œ´ţ ŕȑc {!ÔŞýźŰp?î~O!S˙źßťĽ˙(Ď6ű^¨HŻÖ6óQŔa°úÖM& 7‡qŘ2=_PšUŔšFŢ)yűÓ*y”ZŹp ;Šš]œađ{őđđđđŘČľ€\#°§u–ľŇ.áz‚we˝¨çĎś‘2áž,ŠCsIť’‡ÇĹ O°đČ’¤€2Š'&@ȉ€=Yŕqé!ĂkđDÂÇ2D_Ă!=xbA‚„$7đľ<°3ŃëČŚÁ<đĆFH*¨Őjń5FƒňŔPÇiy(~ĐV…öŠ2RĂŮËe˘‡´ÉĺÝĎ7ls‰ƒŹ<<.x‚…G.pĐÄA'ŘyBŔs8čăyhYĂ 镂żsž˜žÜŤj 5"I xžI<ŕKěë†ç›Íf\W„evHČÁóL*@Ň,8 “ dÝř>üŰőś¤ ö\ůăďäŢů>UךŒ¸Ű!?řŻ<ćBvb˘<×$ ÷ţä÷„TQIyŹ@ČÝzN—úÉéÓ§Ł ‚ A÷ĺáááááááᑂ50(5řîëXášë‚dˇ*M¤ŃBxœH—'w*ŤÄ€bÍiŻ´ß }ฏ=ŕąŐ ,Šé=Ş 첾˙˘TĘXś8ľQzGU|ż:1̄bGSźłśRŃč´ÜCů ű‘bH’ŠČóHŚč˜żä‰=O˜ż(j™›‡ĹĹ%hou`m}“LěŠ7Ü÷—㔊­ép:eЃ$>˝4nŞ´ˇK‰Ä󇊼´Ř°¨,×§Ţx•6š"°]kŐZź!„Š@ćÝa LTVßnŰŃ”]S¤/z˙ó~§ƒ‘'ňHî{ĚYJăH^^îťUVNtEîuym†ýą…›‚."D™ţiss;‹(, ŰĚŽĘ>Ť˜řşďHěΙŠ)\§I‹ń˜ŻÓĐJ=SđńˆĘYCd ZŠ=_ÄG<<<<<.ŕş7,ăZ1oăÎźéíZhťhľZôw'm*ź‘YzŠ/˃śŤń&ĺźőŘš´ýxx\ˆđ \`ěÇ/|á pď˝÷’‡`ă4{Ž`~—$ NĂ$ŤÄęŃäç‚ˆŻç2pRáëYŘběŹAŕĞ,đ;Ó= bŮVy†ß%űŽË“ĺňĆŹ>œ"Ş‘ R¨˜ďLaoěëČzF`bç> Wp•B}‘‚ŕlq>'Zžř%š‚ŸO+lmßDźŮlŃgii 66ś,šÂĂĂĂĂĂĂĂĂcWĄőŮŹAuéZ 2o!‡`@žĚąň]şťŽ•´„Ä€c€ápnŢT|RśMS3Ćë.€ăĂć'ʉ ÔŽL•îěŽB „ý]Ć&ׇt/\&ˇŤôžP^zĄ@š+´dg$>ŹŻ­ĂŇň*Ě/-C%¨ĂGŽšc›FÎëÁŞ97?żH^)V×6ŕřń°´¸ +kŤF3kzs˝*‘'Dó76§CěI˘˘ #ޤ.üˇhǘë…b‚Ĺů@ćů)k’“d#‚>Żíơ˜jěĄĎO;Äď3äÂuş^h“DňI€:€^źť=’ÜŢg"9żjwJĽyvC.*łˆ˜p6y W×PtßŰmíSú\ÝHô śëmÁM§ĺ;âč^r ćg§wZŠ0ś;2BĂů{ąĺďgN/Ŕ° O=8?…ěj‡ďUNô|h'Ţukő€œ˛ô˜ç p]‰ä ^‹Ë9ˇlžŕůŻyU7 Ÿ ŘžĺzŠdΒëü°˝OŢKŃ&W‹ ž`á+° wŢy'Ü~űípß}÷Áęę*},ą˘{—`ŕ@Ďä΃ ř›˝\0) 8 K6bss“z˜ŽÉěq‚É,db,\ţix€gĆyŔčF.>ÍńF˝#Ł#ąç<Ćń­xRaĎLˆ "x_ć{P Ź{T1Š0Ą„IL,aOéXš:cë\"V^Bv‚“aW܉?ŸÝż=œ+’יŸ$TpŸcBöNŰh4éèTjś˙\ J§Îfͅ†˜b2­çœ]Éň\˛ë41V0š!•ŚŁp!’¤QäAƒô–°żˆ  ë™Ţ=âiö>˜5Ş^ąqŢĽWÇŔĂ2MŮşťpçl”{Ž ĂÔë`ŽŁ\Ws]PŽęaČĆhť/{ŒŁżćśť,/­ŔÜâ2Ź­oP^č‘bn~67Ú°˛˛A!;îťďŘ0Çůů˜_\ 4řCró›ÎůĚŹ˙5–oÖţ‘ ÓĄŘütÇ[DTŮvIFJŐ1"R@DBpëŚů×Ľ‘L:„ę˝LžĐ2‡4´NźYîR†|P‰KţÜgăc˘żŃž<Ř2ý+ěiňƒďt¨˘=č:ßťA…äÇé$Šęv>Ë;a4ßny× “ĎŮś×N(ôƒA’gŮ}ĺéMśÓ~)#‡ůËú­JE•‹Ş‚6ž ^h-Ќ¨ŇnĄ$a¤ž­Î>ŸŇůWAAX1Yí|˘XY}’žçLŽŕĂśą]‚I˘o܍×Ř&=Ž3ń7zmß.xĂ2ևe%>>L2={ug\č¤ssO°¸HÁd‰ 8|ř0|ýë_‡;ďü źěĄB†ţX]]#E{@ŇOxËxR|œ•i|ŒÉ ’€Ŕ“ ż9Ô–Á.;%ăŽ'ž$đ&uđäŃ3ǛÍyą@‚{ŇŔ<ńĂä éÍB˛řˆt`ňbr*%‘„É8Ń1AďMćSDX8—p'¸<œÜiĆýN+Áv{˘ĺgÉů9 $ą‚.řąýĄNŠlş}e’°BÝĂĂĂĂĂĂĂĂă‚CâéĄdÇqdؐ^¤-&V(čëĆ۞„´kngŘJTÂÄ­C”š*Jž!T…,ŔäÁ"ŻĐ>ËÓ~;°ĽQF+ëŮ §ŁĘoÚz–(ËF,›ą,„ëč•ŐUş Űą˛˛ ó+´3{uuNžX 0čú}mŤ ŤćüÜÜ;&VpyńNšČƒ *xĺč(čě3ŰŘěÂvLC`—[ş„'›>­syí›g5‘×F^Č€sÎ: ˆÖź*—á¤ćöˇĽÉ#{ČÝńZr ‘Ł˙JޖI2Qφęč÷pxM.Ýšw:]xěńŁđľťďv§O-ŔĆú&ŹŽŽĂŇŇ*̝Y˘4č%qiyÖˇ’<ĺfd á@ĎĄŠ?Iţł­Ă2KɁt¨ŮA¤‰‘ÁL "KރEŰÂËűČuýˆŰ~=*ŃýcÝúô›L§žçyş Ů6ţQt=Ÿóé|śƒ˘v”¤(`˛’˛ŻxŻb2X—Ń&ěďřÉŢsRB"ÇšłVqČ%6ó~Ď3š÷§†ňy§ ôƒ–Yč%`H}Ă0e¸Fű˘ą ¨’´§ú-o|IúŐnA—ßNžmeUL`ҚÇFmt—›0,0›0bŻ1q˛ß]Ĺ:šźţŁuöîđ˜Ü߄ě;¸¤˛CcŔNőyíƒ71çِ¤§ó<ŇfƒÓđ†bśe [§´}OşŢ%„đőź‰š7'{xxx‚ĹE •ąşşb”Z‹0?}ôQxěąÇHą…Š„J`ĺ›Ć¨Œęôţ Ăşk„3nöş!lmu ŐŞš4[dœś“F%ŽWĘáAźÁ ŔŮ .ŘË{•@ Yƒ&SŸn'ˆÓÄŢ$aƒvXE“’+˜¨ç‘PoԠ٨ĂřŘy˜@Ă;žŸ˜˜ˆÉěĺ€'7LĂ.›8?<Ć!PŹ’NÇĄDř|BH"˘…Œ{lŰߒŇťř<5đź%c„ń1ÖÓŢWÚý’܁—Lzé’œä-ż§ű•kŒĚ34ÇßUŇbĺ9†%Ď$żŇ„üˆücÝÁĐۧP6Ś0<řQQˆŃŽđ˛Dďľź‚  “­žˆbŁ(Íç1EĽß™äŻm07TŠůĄ"Ů3I›<˝üçXŘ&ƒÂ°Ç/T K˛(:† äń˘tyçŠÎ‹”šy‘>ŁDblş°guRýž÷Ůx…qőUEő퇬^ęlGŹdŇÄ1Éx[ŃFŽa€›śĐ#’Đ’ABˆÔ12U˛ĐQšú*]t>Ě2$š2SŻhŹŔg:m,‰býúZŞŹ¨‚î8îá1¸ßđçáá1(äü‡rĘ;é5h’Qf3ÉăůŰĽZ­V!Ą!ťŚŃt/[ËAĺĚo\WśĺĄ=Ś(˝‡ÇĹO°xĘBĂňň2,ĚĎĂââ<?~~Vźŕ8$ÔqĐFڏŁĐ[ÖčŽj$Y°QV è˜ǃ7ç—(é’ŘO[’čLŚ@Y„ĎIcť ď‘w ¤ ôX1:Ú2kdL1÷ŔűáĐ&ŇĂg2O ’0ŔĄDHŘ u| ł|˝ÜŐ"ىś‚' †œD˘…N)ńˇëv)ő”Łëeţ2OţÎy˛'‡˘É›ď‰ďĎ%Ađ˝JĹŚ,“ż•Á}űR– ’^ °6­dEće5 ű…öŒ‚ç™Hc?ŐT›–MüLŇĄR=<<<<<<<.Xűíp "wݗüŽä•ˆđœˇ%‰•m&OĽú—CÇÂÄČĎrí΍ôؖ6’+řŃVĆFŞP­„ć/Ę ssk ;ťF"žŸřŒĚĐC";+ÎtŽąŠ0e˝ĹÝqÇWŕÎťď5"[%–=¤L„ˆ×đ 2Ţ9ĘvC)ApmÓq†âőZэlYÇě*6v+8‹ëŃ1áă#%›ĺŚHdŤŒ‘”ŻęSńě˝ v§ýdąźôĂ`~Jé@EŚÖ6Ű1ŠČ’2B‘™’­ćvŐh:MzĄŻ‘AVç¤$G˝łéΆWţ§^üL^ƒ,ňŽjŕćtE“Ňš‹tyíá>’ÎÉęĐp ž°ŒyíâśÁvÓÉřŐ0?W–ץR­Á°Ŕćíőˆu `:Ł *{ÖeţhĘňĐş˙¨ŻS“WTżčˆŞŽ6—ţ㵇G1ě˘ô̙3pĎ=÷ŔČČ(ÜrË-011žJ…ĄÜ>÷šĎÁěě^xń‹_ Ű’pďťď~xöłŸăăăĽiϜ™ƒo}ë›đŹg=;S„}Ď{pěŘ1ÚDş˛˛Bľ:7Üp¨s0|˘Aý¤wóÚkŻĽ0ĺɚÎI.=z”<°c;Çw|GßpGŽ1ĎĺňŠ>== ĎxĆ3Rý Ÿn:ĆöĄË/żnşéŚRŰK8<â0rÄ0`[ŰľŠćbYś çą`[ÎvˆOEx‚ĹS ÖÍręÔIł9m@spüřQX\\Lî݁–łgÎ+¨(h4ëfňلv§g=[(ëĺCvPšŔzX¨VƒŘ@φxüŽ“€,“‰’ íş—œc–žôę@ţ@ņsœ`FF@Q%ƒ{Ł^Â@Ôb8ů˛W ĚĎ%¤ËĘţVT&_DŽЄđěŽâăL¸°żUj%'>W ’„{\Ľ„tyÎ%,H‚~şÝN´Ëâ˛LnqK˘„d Ęzşu—őśu°uvű’$pÚŹÂ"Ȕ-Ű'ÝfIš–TQ‹˝°ç^äƘ˴!@jńâĂĎÖK.\0= xxxxxxxxx\`“šť†+Sěä@"(QŹ}SAÚБ)/eť/0ؘOˆdâ8%ˇ^âĐ௢˛›F~Ů;3őZęU$)çćÖa}ÝĆńE`˜Ci“ÝqĐ˝YĆ4z Ä]šäÉÂbTN6˜njj VÖśâ5<{s×ůRÖ(ú[Ze•Ž“$Ďă'Ľř)Ş„L!.VRM1Š \0tt˙Ä I (C™!y;$ˆžó(‡‹H˙輐=śllś)Ě(…öĚVbíőŔ]„ÍJôî畨Š;DL´JňN¸.l˜uŰE;Ë1l“őkăažLş]]ű c;?“âóÒ,˛ÇĘĘĎK—o/&V§“”jmfÉë &Ęô*EHÝYJ‰F9’MWĄŢhÁĐő1Ÿn/ŃwĽŸ @Ůć ¤*Ńؤt2NʧĂ˜’ů @—öŐ<}žź/ţîáą=$}ń‰'ž€wžóFڂ_ů•_g>󊔟ţôgŕw÷wá9ĎšmŰ‹‡~Ţóžż4íC} ‡†żř‹÷ŔĄC—ç,Pż˙őŻ>úяŇzőúhŔpâßő]ße>ß ť ô~…u@5é‘@ňŐŻ~Ţđ†×“^Úăě€úűűîť>řÁÂמö5:öœç<§”`ýř}ď{m8ĽgňíoŢöśˇ‘íH$úđ‡?LéńŮ}ęSŸ‚ďűžďƒ—źä%0 xNmŢ%plűɛ7äźŔ›œĹĂ?Lď’Ť%šH;ٟ<.vx‚Ĺ“îŔ…ˆ'Ž›Ď1˜ŸŸƒůš9XXXˆâ‰Ś=HŻr Dĺ§ÝÚj›AÔF”6„ľŐ ZŹ ć mnlŃŔn.‹ˆ‰ŕ‚çŃ8Í?ăĐězS’¤qˇhqݰ<Žc="NqÝÔ 'J뼠b[Ł$ŰT+ŐŘăǧÂňЃć…ÇŘkß+Oü—Ď39=äąÇ%ńB~g­h‚qÉ I~*&t ¸~ň)dšŢÜP2„ôÔÁyćMĆňţlžů›;™óýf=Nä+ŕ\a1KÂHź0™Fşf’Ž\dTŤľ˜\cۄ%‚Ŕă´]Ž’%Jƒ.ž0ʌ‡‡‡‡‡‡‡‡Ç…ƒ\dĹNŠl†´‰Ü5îĄńƒlӎѴŔXÓ)”ćˆś:ěŔxŤSău˜ŤÂhKĂŚ‘ĺbk“<ş^ďδćżÝő|L іěŽŮƒ…†Œg˝2(+8Ŕü⚕it9™"︛>ď^BHv%Ç×?’ "ł€ őB˘•Î8ˆŸŠ[§Ź@ĘCŠówˇ÷wžĎ„xâĘaÖm˝H˜âdä?íԟ\JUz/#ň ę.pÓťŮWš„”D>Š Y3›Ž¸P-Nő]đ}űŘMĽżÄůčE¤‰˘seéˇ[~Ńq܀“貆}DExXElmv†Š‘~.áęÄv._HXŽôŰčÍűˆ,ZÍá !Íavڰ„FŠk‚Ňą‰; 9ҤQÓ>ÄdÝ sțLу äĎAEz;7‡ÇđPŠďSdFcëÍ7ßlôđփ žSHd¸ě˛ËÎzüÜŠń řŔHß˙Ś7˝‰<ýéO‡ç?˙ůpúôiřô§?Mşţř űöŁ÷źç=t÷ƒ;˛í ą[ka̟I,'éŇč`˛dríƒ>Daoşéfc‘l1¤]ŃĂăb‡'X< Áut“třđpúÔ X^^$ś‘ €ü€vBąńŰ k!Ér`ĆETĽ‚˙VŤ´Xhoľ“PŠCŁ$D–˝ +҇kŕú2ąA˛Ă“zX˛CľÄäˆn7ňDĐhC‘ŒçH€ Đ‘+0ŒCłŐ$ᆠńˆÄȞJ˜xÇpącŰB VA‰&Ńo&WHşKRŕüm;ŚaI˛H“Ň ÄäyЌ&'ÍˎŇI‚‡źNÖU,Üç-ËÓ!R;*VĄ”/î˝s]Ü{Ô˘ţňž]b…ě§ź¨` .´ĐËD%¨űHWMBšŠű•ĺg$1qi <<<<<<<<<žX=ňĹFń 7 Ň%Eż¨/†ťj! ěö!Í5:&DôBűv;]XZ2óăŠůT|÷Aëeu‘!’šťŃĹŐÉěqH÷Ë!ÖDůőĚŘëᆧÂâ KÉ< Šąş˜d“×Ç.üăńd†S@<đŔCäűŔKč7†őxüńÇá5Ży y`œó™ĎÂĽ—^JĆvôlpă7Áw÷wĂä¤őŒqěŘqřŘÇ>fîń ňý‚źîż#zčasţŸLşŁ°wď,…ŠŔ0'˝^îšç뤡Ć4˙đ˙@•˙ă˙řMxőŤ_EaCĐűÂ[ßúVءo6jŰéž_÷ş×’× b`ťžčE/"O~ˇß~;Ü˙ýĽé‘<ĄD^ţň—“'œ?Đ+ś÷g?űY"P  űöë_˙z¸ęŞŤčş7žńäŃâÁ$bŃ0`Ű×n‚ç śąő ĽČ›ůw9”ř+?Tri9Ňś4ČZÍĂ㊠O°x’' ôŃcĹÚÚ ŹŽ,ĽÜ–݁  †Ă*łlÇź SaÓO…ÚH÷ýă\ýş=pŐËöę0dň˛)č>MĂÖŇ"<ţš3p⮕ qKÎ×fŞpĹwÎၝ†Kž1ĎúĽË`ţučŹ9ľĽŕ̡×áđg–`ýD[zÂß=óXDŘQîNxť ›ž­ŤŞîŤ uŠÔ˘tbŕŰN˙+{ŸˇŤ¤˜\‘á5˘Œ žĺT 99ŇËWܨ‚›JśÚ[ĐjT!˛U7e ^f•\ŻůiČ H[gűĆ2súwQşÁVn˙cy´ď ˘¸ßŽrß%™őKˇÝ6Í%h‡Iˆ6‘Ą Źłâů‚˙nŹwŁŽ="Sŕ{ŐnwˆHŽűŒĄ `ë›ë´ldlŒÜ´OŽO@Íč+AƒÖHÝ|Đo.żňZÚîp'ÝĄÎÎ/äMěů"â šě×É΂@•ŐŸ‰t*ŸxąSë"°ö†n„S§NĂ×ďů\wÝő¤ý—ůř×˙ú_ÓîQßüć7țĹ÷}ß÷ÁsŸű\pý÷ß˙ű‡7źá ´źëŽŻÁŰßţvxŢóžKv‚u"d pœřÓ?ýSxÇ;ŢŻxĹ˨oďÝť>řÁ‘ímE@1zŻ˝LČűŘťw/yřĆđçřö˘ž˙YĎzźęU݌źgđgöç"bϞřůŸ˙yĘkffšę}äČ"Aźđ…]řČG>B˝‘Œ155Mc’5Г…Œć„^7ŽťîZ“ߺ߉‰qJ‹Ą)žüĺŻŔŤ_ýş=o ëčQŽaÇ;loœƒ$i!ćą?ŕ8J^<Ć!íš|ĆHş9ťuDţuřnüÔOýôĂüÁˇE„ţîÖa{@‚†´áyہd*žvff ^ö˛—ĺ^ďÚŤ<<.vx‚Ĺů†+<ŠdpBf݃Ü<𬮮‚ő ц"öźýđî ^ĘS~8‘Hă7{Jŕ ČdĎxœĎcúFCGÄN%%Zä1€?<‘IÂƔšRˇ¨‚XŠČá@Ř[CUxŃh™ď ˙ ‚$äE52€3‚ xO’\w:,‰"ˆ˙ʰ)’`Âän6śs\Ďě=ƒw d…7ˇ“}ť|tŸ Ău™›ƅŸ˝Í;ŒďŰÖ3;ÁĘ6HĘQ™şđó“ĄUřšĘ:ĘĐ/|˝[/Y>“8ÎűY âŽân &6Ä}˘ZŁ{‘ĺ¤î3ˆ÷TŮăŃƒDů5˜€Ę}aˇÝ|yxxxxxxxxDFó2Łşs.ĽXŠŽĺŠ‘l’ ÁťKUě/šeö”ÉYچÎP)˘“5ďÔhŽťjŚĆŤ°°źjIFQ‡Dó0Ô)o{Š=ČűŇֈok‘s#ϙUs&2PVeaˆId‘h”żŞöDÄhşyÓF=# Ç‹‘fŸŮ„Ďß÷}ŕ(Źé@ŁŔŢGaěú&4'j0~é\ră^˜şlzÓĆUcĚ[ţ6\÷šƒĐmBĽQŢş‘ÁŒáNů˘62edÓySlÚWőLëš:ô"ů;´Œ˘gĄ˝SšE´™ÝŐBsŸ‚C/ž…ŮŰŚaęš1lÁ‹ţˇ[)äeŁU…Wő¨U+ 8qÓ)Ř8ő =š@;ˇYâvɐ* ¸)0Ż'–čÎSrU,ĎBšXOm!ĺ/Í\łŰľw6זĺY$çÉ>Üí ŃŚB: )@›'(J…Vewýx¨ÓYƒQcĐĄÍ •!5X#ją="Učä@&…ý7ň`Ł‹÷¨ďtťm'ż¨ƒ›G™QŕlHý ‰že8#…„ű.$z˛ü)ˆ:…ÂMÂ` î‹7šş˙Ž]Î/TeFŽô\Ąc6_şŽœEˆâşÓ{ŃŁwŁmžˇ;!yzÁߨˇA“Đ؉›Âpˇ8†F![ŃX„ĚNŻ că ŘÉu0>1 sĎŐZ•ÂţÖjŐȓG@›ŞpÎŹŐkf]…šƓ‡'ˇL×75‘8Ź>(Mň?`ů2áIô…śěň|٤˙ňËătƒňŔ H"x衇Čű6L`=Jîźónz?qNŸšƒßú?˙/řď˙í˙Gkăśą3TŞ•…‹ôxšô}ŹO­VĄąˆ7nĘtčyÇ\,_ş™™8tčP*ŕÖ[oĽq ˝QĚÎîÉÉI !!D}ôňZqđŕAű~ř¸îşëhx‚Ĺ‚^φ#ŔIţŃG…|Μ9{" δá˛ÖäDâ¤Áß5ˆăƒÓŰE¤ˆLhŔ ‹3Á^4$Á‚óĹ뤂Ž!˝'p:„Ź M€ŐJj’䁛˝_ä ŤL–° ŻZ\. mˆŽđč!땗߯$ȰÉ3Iˇ)ˇ2uTŠœÁ÷Íßc&˝Öń˝&d ^LfŠźˆŕď\/ܞœˇÍˇ’Q˜Ś”ż˘Ż„"Ź÷G&vpßŕźÓĘ(Iéŋ\şE‰ţít :öJ‚‹Xž'K2vBكJq''X›gÔJq ˝ËĄT-úkńH‚OĚQÖ+ߤ1]sĹ4웩ĂĘň’QJÍÁƒ§ÖIaĺĘa’X]Ž/‘; ’=şFÁlÂnƒ‰ÚViB×÷őÚPyŕş}ď޸˙GȘF„Ů÷̊Ţ ‰¨`äĚŔČF# LA!˜8`”Ÿc!\ţňpŕY3°ľźł×ď…KŸľZÓ-rýŢí`̐”ú­Ń)˛ťF1é3÷Ăƙ.œš÷\ţâ4M;V5Ô§ŤĐŮčž[&áč#pj~”:&2ĐDtPČňhh˜¸žWžrlœnÑO,Bošj*„OŸ2őŞÁÄĺăpÍ+/ƒ=WLYň<éť<ńxů'ň'099AúpJkŢüM™†ń¤ęńńq¸ňĘ+áöŰo'Ă5’'Tôşi¸ăŽ;ˆÁ$HëIšż/rŁčŠSgŕç~îçŕ†n "¸c˙ă˙xTR˙š(¨ ˇC—˘ń?&í=LöđŘY`_Dű>[–ø&}ˆô‡ý˝)ařL‡ sůĺ—÷•ÓĘĘ/ęXzŮ.Rkńę7H|?ĐC Ż'0lśÁüȏÄâű­qËĆ÷ÖŁp—AžóˋđT'XœGôzŘ=ŃŃ#Gˆĺyěؑ ) g‘ÇRăc( uťi"/lěůj|ŽěĽBzźl4· ţƒĂ:Hćœ$ Čź06Ä#Ź×„DxäÁÓ¸ĺIB 灿ąÍd†KB`Ď XdĎň}ĹaUtÚý'ŚÇg"=>Hr€ôę Yz‰â4ŤHMk•™“cAĄđŽŠ?÷e[ť!E8$[0CS)Č%xČď|­ ĺŕüX8DVŽ$ŸHœžŰš™źLx‘ąĂŘ˝$ˇ ëLÂŕtťÍ†Œ•ńâť7ĂÔĂĂĂĂĂĂĂĂăÜĂ5N䊴¤×x2}ßüăëajՀvˍ´Şppß(…io!™â Ü{ß:žŇ뛔ˇ)›\–+ŹŻY˙†UktEĹr׏Ąk źmvHÚ)Œ×ć]”Ó`8‚*ł÷흶Ćb”YMD…D4Ž)lÇŞ-#ŸLěťu/Ě\1ľ–őHQ¨BOwaíÔěťy&ŽÁĘŃu¸âĽĄˇižĂH:sëpćŰsäŢyuý€î˘ĹŠ SWÍŔƒ{Nß;oʨÂřž&8\qěksđÄís0˙ř:`óVZh^7ňeE“\ŁL]S‡Ť_ÄŽYj ^đ ˜{`žůÁáʗ„ŃK[0žFgFÍóoCÍŒÎÚk[Đi [:í-芠§ŽőĹ6,­mÂÜýK°ňĐ&íd>¨ š%HřÎď|­Ÿ;gÎĚÁččHô~yÉ ‚ôy_sÍ5đéO>ó™ĎŔk_űZłĐ‚őĹă˙ößţ[J‹×ŕćšĂ‡Ă3Ÿů Ę÷ž{î!űzŠřú׿NőÄô8ś>ü!×\s5yŸ@ď<ÓÓSäâŽťîŚűźţúëSm‚śkŻh›q¨I›уύ7ŢŸ˙üç‰\ń´§=Â‰x &ðž˙ň&^>œĂ0Ü>Ď+ޏ‚ú!f0 ’-°íßöśˇQz$ť ­áŢ{ďĽç‚óŘ'>ń zöFf¸v<Ż;íŘE´Ţ݉AÚž<<ú!ZŽŃÇŘŻ~ănř˙üůÁSž`qNĄ‰5‰îŞđƒlĐÇ{Ž=f&ˆvlȡE˛čv™Đ.‰ =˜ŠÔ +=4ČônČΏ•‚¸Řŕcl8çşŮü’—ăşł#śy´¨bĎś\ť8bR€œ˜ä}ćÝż$[äś°˜@¸Nœ@Ľw—°Ŕ†~&p>…óf/L*őuYëü e¨ŮŚRp—Ď%Vb ORQ+É/2¤‰źY/éiŁ× ÝSňľœ§ëćI>_émC’Td]ř™ł .ţM‚~ˇHL5ůႸ^ˇ.Ü\/ƒ. ÜtŰYPđ5ČŢôđđđđđđđđ¸°p6ŠœdÝ]t<2h áŤ˘`r´uchŸnŔÁý-c ď#Ô2<ňčqXY]'ŮŔ%TČőąKćîo@>Čí5VfBR~ľÎj‰CŽń'ä‡:–†y°Ř3e˝6Ԇ2b垛[МŹCË´ă%ˇŽÂeĎ9㗏ŔÚŠu˜:8e”Uâd,Ď-ĂńoĆtÖçÖQ”„é+'AőŒŻfdcxTćyL]= Úț˛°ľÜĽMX[]…€Ă_:uóÜ˙ÂQ˜źlŚŽ‡°Âƙśą&*“w fn¨Ă%Ϛ„щ¨ŒŚf”´§;pýŤ.‡ńéóěë +Ú(n×`ň†q˜üöM c3 c\7ľ5ĆŔ°@wošö꘴‹ ÖXšf ˜Ć š>ż ‹'Öŕđ'ćańî-Aź?7–0&WĄ‰dú¤fgôŮkaÉMőâlčl›sŹp-2P–Ƀ šćüÖÖ&ɨƒşgnľš–\ÁádRVVśę旘Ľ¸=ó÷ťĎ}ˆs.Ń!/MŮą,ú+ô“|˛ŕ~Čď'ý/ĐQ”ŚěZŠŰé×>yiňŰ9}N–Ţ($Že‡k@ęéĂR…Z'z˘¨LJӋţvz°žaĆBÚźŐľ$ `Ţkëäö{ueÍƞ7ş1 sƒĄ|ÇÇÇ`zbĆGšp͕‡`ll*…ď¨!qu<¤#ła~ƒŠĘč}$Ňş;&0ÄgĄ %-Á0 ĽA:Ł(Éđăˆ"Żň'ÉR$ФýąoöÎëĚőŃóT*C˛p˙fôˇě ŠCu)<ôŇvt^ýđâżţóţ/´ÓýŠ+.τPĆ0÷Üó ڙşS|_‘ńS?ő“äĹćŔýđěg?ţń˙Μ9C5$?Řu3—›Ÿý١Ă>đ2‚Łgôň€záK/=@ŢĐčýĹ/~ÉĘg‰œ áF^óš×Ŕ‡>ô!"O:t9‘ î¸ăËđú׿^ńŠ—C4d’ţË_ţ Ť8ž|ęSŸ‚ďüÎď„ÉÉqs×RŢď}ď{Ƀn|˝˙ţűáÚkŻĽrźíđž÷ü%•yüřqŞç[ŢňpíÝlź˙ä'?EĆű[o˝ŮÜO‹ŽĂz˘nüúëŻŰő „OŹ­­Áƒ>HĄUžńoĐ&Č/}éKä9é/xľăG>ň¸ëŽťŕďx\vŮeđŞW˝ ŢőŽwÁßţíßŃç _řyŻxĹ+^Aybšç=ďyäĽűnîD’ΛŢôŚm…aۇ°ßMȍËyë×Îľ]’â `šÖ÷ežK”“1ăőgżň%řŁ÷żź˘=Uŕ 稠Z]]6 “đřăÓ¤źf6Fb˘<ěĽÂşÝĘŇň ňîbš6âłQ›C’P!ó—\˛@bOÂV0ÁĎń1IŕóLÖŕßR`ĺkeČ „Źť+¸J–œËw‰$LDpŰN*?!ŢŁ–Ô‘Ů‘˛mŠ Z ź C‹$¤néU‚cvé anąť^ž(š˝\ŻiKâmƒť“l‘â)¸‘\—&•Č<˜„Ăž+ä3ĹE7VĹÖÁö{\Đ`á|x×\Q=Špśä ٰîl—HƒcEŻđs‰ş˜dQ7†ó‘ffgŒÁé˛qcüęÂÜÂ>:O¤Š cČRŽŒ ów‰ ErD~Ľ#ăŹęF\#ƒ…ćŘpž$ś 6äÉ\GŢç̞IŰ昏š•fŤž= WÂäĄ1˜˝Ţôfö‘,˜Šet“Ü#„FNŘ<łËGWĄ:QƒŐckКŹĂÔĄ X=łŐz6—ś`በŘZk“‹{ŘÔĐ[Ą2ŔäM#°úřÔF+pík.ƒ™k§Ě5ćYN5 RŻÂž›faáŘ"<ö™ă&M nřî+aĎ%Ó°iŒë],{~ĆgG Ü02Ko ŞŚizËmSFN}cFFÍůľ ôڀޙ{l ćY€ÎzÖLÝńţ'݇ő“k0˛ż {Ž™†…ťˇ`ގ^(sAŸĹŚdŚe8+lZĂ]nYąáo0ĂxJ–[Oz§Ň™ z€‚Œ&‘’QKň.oď(Ŕ‰ĆÝî[´ ťąń´ H° &%Ό˝˝ÂšŔnW‡!I”Űw ƒ,żVçÎ y× ű.ť×[WbpÇqqyeNŸ™#’ŚBŻv—nB˘k”Ý̲˛ş KËŤ: ŻŻ+ÇĚx591cĆ`y`ß^h˝ ö]Ô˝ Ţą‚„ "MąîtSčýFŮ÷*ˆŃ’˘R•ľ}zŢË#%í‡óNÂsHôyŰ1X…˝$üĺĆőĎM­“…Ńţ,÷Ź“FęşÜRŠúŠV™1YńX…6>uňđŘ) Ąá–[nމ ¸›˙ŐŻ~<ű١Ĺzm4XsÇÄAoy˛ásŸűyŠŔąÔßýÝŻĄńóűń+Ŕżő­oůŕuŻ{<ňČĂäĄń?đýä âöŰď€v{ Žşę*xĺ+_I ëžç{žÇĎ'ORř9 $2 ÁâŔdDGC<Ţň'ÂÓ_Iőá1 ěĎ}îsÉł°0/ůËáőŻ…‡]żň+ż ýčGÉ^óô§?~äGŢbÚay ¸ęŞ+é<’G>˙ůϑW„ŸüɡÁmˇÝF›I‘ aőßóýj“Ż~őŤT>,l[ÍyŰ=,ô›k<,P'ä $źŕř÷Œg<žřĹ/Ňˆěcűöí#o&ęűíOýÔO‘“;3ˆ2ß˙ýßO}ýÉHŚřĘWžBóĚŢđ"Ň ×ž‚yb_Ř-H;Ü „iĂëű>cßl6›Ńz¤˙ú†Ç„Ąd\‹hüřퟃ˙ďťß ßzč~˜š˜4ëͧAÇ,ÎP:rä0<ńÄăd}c=đĚÉPů‡C™Pçvü›˝:d ÷‰ˇČřp>8iä‘ä_&p°× &8Čúş×0p˛`‡ őwßň|>Ń$Šœ€¤ą>˝Ł,ńހ%YD ÂYƒ¤Î;ďžĺąźďě•B>Ÿ4áEĽÚǝŘÝßĺ)Ÿk?ŚcQ˝ÓÇӞ-ŘK… Âçđv全Vë”Î ö•¸oʐ$ň^ňŘ˙ý°r…[..<<<<<<<<ŃŐ 1CńLúˇÇŸxš-Ôą4I_‚Ţ'ŚIeCŽNLŒ›qŤ “Dڏü23Ž´ QGŻKfĚ3Ćž€ô,¨ŞŇŚ.UQ‰î+"&ĹwMŞŚä^š ŢÀH“V’żn.I*­#t7x \şâyŹ\ǚ&iĺ[;óôžÉót‰?Ć L¸ŕAR 6{’…Çnáꍯ˘ĂaüęŻţJüu¸Ż~ő+S×`˜7žń铇ŮŮ˝đśˇý„s4Ç+_ů ú¸@Ř÷~ďëé“|P§ŒDü”ÓŢtӍđć7˙p†Ü€çnťíŮô)Âľ×^c>˙[ćxŁQ‡×˝.m˜Çß| ß×5łvDĎ 8–#)`||ü+<0ôĚO˙ôO—ŚyŮË^F ôœ‚Ÿ"ŕœůęWżš>g śą=kˇÖú\Ć ă?ŰXúoVMÎ=ëYĎČ=>H9™\ý<ĺá Hűü§ŕ?žó÷áȉ㱗ŧ<Áb—n°5wřđă°ąąn”U=ÇsÂÎ+¤Ě;đĽˇ6xK[š`xbŕkóŢpyĆ}7 Ńá^ĎeÓw4؋ÉI9ÂVQůn}óˆ ü7ĎÓˇôň!Ű!ۑ‰ QESÜaŮNéx‰Yឿ‡aR/&WČşŚÓ:ĄXiFŢ'ŐKŠBö˝[Y§~Œ}ˆvçČĐLŽŕ´ŻăAł9“yŹP wŹ’\’s˛ gť aBŃěě,xxxx\hŔ˘ď˙űăß8fĄ+MdîŁűIfďočŠńk_ťŰ(ŽÂ _řBÚńńdÎčFŇĆ\}&Ĺâôđđđ`ŕîÝńŃ L×ĄUW0R72TĐ%/ëF!ş´Ô%ë.-ƒŘ؝Ľ%p×ŮťhĽ]ˇ‘|˘mč‚Ĩş}㪏—ťÎ§şĆöE…é­794ô9î Éł›™ž°;Ł•˛nę;š űŸ=ŐH'çĄgŒŇŤ'ÖamnÚ]h/ő`íä&lœě@m¤­}8ôźýИ¨ÁúńM˜<°*ĆH8qš‘)&k j­Qc`œ™€Z˝ŠB$čj*M#u{°qfĆ÷Úf#‡ ‘Ä1LÉÜCKpâž3°yIžXĄ0=Sˇ`Ěô‹óźë!,=ś§ď1ç–۰ľĐiŮŽmúÉl‹ÚjtO fŻžęX…ÂŽ ‰dăĚ&oNՉ¤ŽűkÓTZ şëçV›ËD*1ôęŘǂĘt'i҅”úRéTvsƒ†rS|žü>,Šdźź>§7ČɑöľŰ![Ôß)´‚Ś×Ę^s¤e agsŁ C“GˆPáźÓąçY¨|ƒ‡2Ři얱 <˙b]ĹnĂV§źš:Ľ˘tâŠÔŻřb#ˆJtHk˜ů7{ŒŒÓ.Űޞ)sŹÍŘű„ÝD„Îo‰4ÁßUÔfT%Ý~2ľĐŇ{)ź‡ažƒ.řŢŽžŒ˝žu}”E/z—ńR}ęŸhR‹ CŮ1ĆÇ9ł2ü yóŻóĆ)§66śŕŸţéŸÉ ĂĽ—^JFl˙j?uŔc5ÎÇH|ě)7 ×ŢâÚžň6ßć­×w ˛ 2lľˇŕCŸýüçwżŸ8–"ŕŤs+ď*<ÁbWĄ‘â.řć7żAńĹhgżŞ¤Xđ 8tƒ˝Bé$LAĹŔ%E††FwWKˆ *CHJ‚Ä"ŒXÝIŘ Mç•PÂXçĂnś˜<ƒ…—ŕcyÄ nŤÔ.­K9zł|ř1ÝۂKŸk’ ›}3,ـ3ß^†šűa}˝óǗaĺä:œ¸kş›c{Z0}ÝLÎś >@}źűoŘ íĺ6,>śGď< ןę ěšj ¨ÖŤś¤˝ŮŚż¨X=y˙iSďščLÝść6A/˜~7فÎFŞşid#S™‡PŠ* ĺ ĽFr<=ŚPGsbb ‘÷C-沨pwˇžx>‘<Ă´‰řľČ<š¤ĺ/CŔĺÂ#ĘŐ –žěźŤ'qŻuĎÇĆh;Ť:ôü8Â5`°ŽÇMkugé|â>Úž$ÇWÜÝ|Օ—Ŕӟ~­é'˝t莌1#˝ŚÍśJU)ŃźéLşň'śŤŤ˙liÜGĂüÇeŔ;Ą´=çY¸_ü|ůÝłWó\ŸšFu9âkCĺčÖĐYą^ŽżóXŔăt2Ä+Ůs óe}އ‡G|ˇ.żü xó›ßdôăcç h_šě˛ƒ099A=ü&ž§ä†]Üä„6 *$—ÔĹëTţí^‡öž#Č\Ÿ÷›ëÄĄKdžyu(_—gÇłöĹJ}ëžd1BC{>řéOŔűë?‡ÇŽą Ź ő#xĘŔ,vHЏóÎŻ’ Œ÷ÄFřDcQ&¸”ÔŢéÄ=z­’ŤGFm“/Ź1?&c@b,ćP‰A;t” öxžÇ(r…$@ü=ËćV"]×!OhÓ™ź’vL+Mř{ĘH/ҸäyŽŰ…Ë’÷›Ś‚•,r‚ăűă Ĺ%gČ|ĺDd2ý wâ•÷—ŽR˙˙ěý˜-ŮU ŻŞ“:÷Íq¤ŃHšQ3”…dř„%lŒŰ˛ń˙<śáłů –üČ&FF„rB9Œ4ŠŁ™ŃäŃät󽝻OŞúöťv­ŞUűÔIîíîŮď}Îís*ěTťöŢk­wŻ•M¤QN€„âDO–É]i™đŽśoađtČBą›KçI$úŘ(ÍÓŐOČ\P&@Q7t’5´>X—Wyŕ¨C/–ę7pŹôđŘĘ@˜|Î0Žżđ…/ í ŒĂŘX ˝œu5Šˆ­úŕړäl*Hé[&ńvĽËӝ`[œ†ž^ې$í˘zzç–WÚG5ě~˛d=°č˜_QĽJ(´Ž[fĺ(+4IEÚ,PýÓ u?•6ŇdMfY+ô¨Ó§OÓěÜ<---ŃΝťč5Ży MOOűه‡ÇŚĹää‡Ůšs'aßűŢ÷hyy9O~řĂŇÇ?ţq:zô(g/|á éşëŽăqÎęSŸ˘‡~˜×)Ď}îó8ţŠ;Îbž˙‹żř şýöŰ9žé?ř˙€Óüđ‡?L=ö=őĘ+idt”nšĺzы^ÄăçŸüɟpúozӛč†nŕř™żř‹żČk˘/|á tß}÷ń|oŻ{ÝëŘĂŃńăÇéw~çwč)Oy ýÂ/üűä'?I_úŇéÇüMôěg?›~űˇ›Ë÷Îwţ}čCËÄ8”éŐŻ~5{óžő­oҗżüen‹ç?˙ůI{dőńŁş‡ÇVÄęŢ܉cČß7IűöŽƒč2ľ›+ÔZŽÓœ;šĆ. HÂ%öLk1x5DŠő}R—漄čn?k*RBŢ`ŮĄřž˛¤%M[ÂIjôqÖąFüä:xoŁ™š%&ľÁČ5q¸B‡ŻÝaŇ čĐsŚh˙izď$“Fd â]ÇD'î:Mőš&UĆŤôČwŸ r•ýŕÓňlƒĘ•šĺ1jĚ4ŠąŃéűćińäíĄą˝#´ă˘1z쌣&ä˘kÓÎ#ŁŽM˜Ś=G":đ´=tú‡łô𷟠ÝOюCTš˘b”—#4ZŁVŘŕú7ZőTś9ś˛Đ¤ť>ńU'+´2łDQłÍ!Aš-„:YĄ™›Vhţńe:ýľ‡(Ź‚ bŇYiŇĘ|Jń•ƒš1‚Á+%źW ˝L[y§Dś˙… ™†˙A>ă_x­`™ŞmÍy1Ľ„Hť)ĂdCŽ"D4ńE[|BŮ˝Ý"–iőfâAqPFámĆâM/mJyŠö!Pď—ŐŽ3ĎBn ( ˛ůą‘ä—ó"˝Šlęfé$rt’=Hů(zśv3JlĘ同ŚĆimţVCÜŮ4AD‹ őĄ[cŚ u§IÇ]ć1>]řÜ-É"Wœ>zĄƒ•"3´zéň:őJo–Ě2€¤çśŮűčáááąŐý6šÂĆ í,îxďŽ)ňzłąkT¤ˇ–ŔşD‡o źăAŽÓײgţr…ˇ<Éá<ţfŁAŸýĆWé÷Ţ˙?éĄÇĺěě• äaco Jƒ‡€Ű đ‹ ĂqšŸ_4‚R•VbŹś;)Ó]ü,LG9ƒťŁóDzďň×Ćl´qe—SŢ#ąĄ\ Ţ \/ֈ8ö.Ć3Ż–ü‘…‰ČĘçj=9¸†qwׄ‡"˝iÉÇ _!ĆyÉWˆň[ˇĽžĎÍS{ŹĐ×H™…4#éş%Š&ÇX=˛ăA&vЧ[.IŻ„$á’Nt\á-ŤCČ!@$֗nkÔLҘ°aŘRëţÜüĆPւ]ßîX`čç&ůk"Œë•dX¸w.'¤Šůůy6Âá݄ńUŻz5=ëYϢݝw÷ô¸âáááqžw'Ož¤'NĐM7ÝÄąkŻ˝–°|ţíżýˇ|Ýĺ—_ÎDˆ;ǝ7źá ü$ˆGy„Ďß{ď˝L 8zô úąűą\> i|îsŸă1däóßţŰ3iÜÉî.gggÓĎĽ—^ĘóňżóÎ;é̙3<`Láâ}ď{çÂĆ_”¤‹ţĎ˙9×玝îb÷‡˛FAýîžűzŮËf˜Č‡4éţč9Ô ya™ă[ßú“AyäQşä’#ô‘|$!„zĽŁ‡Ç“cœ:źoœ.˝`‚FĘMŞ/ݘąď™cO+™p!€Y;bsď"'!šăH›Î=ÄJŠßmk0grt÷2­ëŐŹeџ¤ťdŘŐ ƒňNMMŇěܲ¤ČG÷^5M•‰1ÚyÉ$UĆĘś~ˆŇL6˜Ÿ §éř]§iáě2! -şű“Đě#K´|şNaÍzź(ă6žƒ°0žłJS‡@°¨ŇŽËvĐÎ˧i˙Ő{čŕÓvSmźDÍĺOOPÔj˜|Z:˝BĄ‘qćŸXa2_´˛LŸ>JQŘbŻ"çA˜››Łú3ß|s†ćhd†Ľ}ă;hńä2÷™¸m m澺5zšĆ°1šŚ–yv-âC#WČzPaň}ĹôÐ˝Z¤í$ž+R´ !Hą˝$°,Ą”(ăŃzƒĆWęő:ľš{'é„k­Uł0˛a˝Ż›"čÍ,˛g=N˝˜čÍ8çâ! ‰$é“CA§…1¸w]1 ôť&;żşűşývĄu#™Í]šÜ.(t…fœ<—Řú! HżXgłŞ ›Ă†2G]6Ążwá9u\ ž×<ÜkӑË.&’Paç‹ęááááQ Č ĐeaŒ†ÎĚÝÜkQ4ż -Io-e’Á: ťžoşAě\r˝lşumZY>ÝůŔ}ôűýôŔcŘţlÖśĽrÉn"'F-Ě1ëy{Ŕ,6čD\p0¸Šw mÄÖäíý€Ú6ƒ˙ˆa>Îď]Cžű]˙u˝gh˝t3r„v?¤ ܚ8!“… ҢˆˆQ^ŕŽ1_—ŁˆŮÝ Ň^.ABâ4jbˆ;Qš"ˆK¤aX~ËľR6M˛ H ’ˇ´‹͒ßÉ@L:pŤÚ­ŒŃ%{˝‰AĄBFß§ÓAž2aÂ`ĽŸ!žłuÚJŘ ]ŠÔÔłˆ;Úʅ´ł[ńňĄű ň“ç9Œ{bíVÄ$$0IO:ĹĘRě|FŸýěçňŽîƒv01ý˘ÁĂĂcłâÖ[@żökż–ÎUđ/Ç@†ř•_ůönxŸßüć7é=ďyÝsĎ=ěe„‰ű￟ŢöśˇŃŰßţv:{ö,ý‡˙đ˜€133“ŽŃ7Ţx#/0VţĆoüíۡÉ7ß|3{šxםŢĹBߟýٟїžôĽiĺxÎsžCżüËżĚä‰Ď|ć3ôƒü€~üÇœ~ę§~Š żů›żI÷wG?ń?ŃĄPL j‚”šĺ~ć3ŸI_ýęW™ěńŔpšA°i$xÚŔ˜˙OţÉ?) =ÎĂc{áОqşúŠ{hj,ŚšŮYZ\:M'ÎĚŇJ}™ňí‚Xď%öJM@˜„bżaźĎG<óLF°ăŸőv@1B`÷ŇRĎť;e˜.ˆ%^vŇĆ˝ĎHX›—réö’›22BŸ°ľ1ňëÜ#u:}Ď]ůŚÝT)ÓÜĚ<‡›lŽ4éńĹăuZ:U§Ço>AKgš%LmŞJť.˘Ë^s!=üľÇčĝ˴÷i;hbŻIťÓřEăT*ÓÎ}4=5N%SÎVё ęţ25ĚP3ÇË s ŘÍŔĆwUŮ-˙ěăKěĽcĺä‡ţŔ3_:Q§S÷œacűüu:ó­jÎśL_iŰ>d’1gî0ÜˇÚ ŤP ŮáĆĐ÷‚(!PP;y V$ĆkóąŢí#ŢL§ ÎRBŔऀ8ľJŽř}Ę')Âäşa˝QœďçŕőK7!˜ç[_Š'¤Ěţŕ]…•Rj >ăd7Ma vc%!ކIX@˙{dMFÎ1-ˇšk‹Ň´>œ„msňȧw~Ž=ÇČ.×ë:é5lÎuÔąŃD'owŔŽ˜mZ[g`lŽ5pʧżÔô™3svţŁÁ FđÔ o4‰/ŸÎ€2,ČŃŁĘů˘{Üëäw/CZ/˛Ĺ $Ɍt§{™ĆĂĂĂc3ämŒŰĐ­ÁŚˆÍ p‰ur^ć\7>>>tXnŔše›N/QCoŽÖä AŻyÎăÉéQ ‹‹ô•›žM7˙đ.ŞÁ2=>ěRŮ!ąI{óČ×O°Ř@`šâŠ+xˇŚî@$„ţŽŻ Š“X!†qţ„ >;R&+dĄ<:•”œp'÷ć˝3iĄ”#…dƒs>´„()äI+Cžlâ˘>;H4@+uÝxSŞŁˆ$!ĎƝätx9şI{JűMRB(ű\ĺ§F?áL“G¤|˝ ‰E}N—EřŤŰ ő&8†‰ytt,éW"‘t*"´w‘”ěBaÇs‘ç†ü‘Ÿô-—83Č" ¨ VŒ’+„XĽ) …?ó3?C]t‘_xxxl9Ŕóěßü&żýíosX xŒřő_˙uš˜˜ŕąá8Ţ˙ţ÷ÓŁ>ĘcĆrŒƒđ 1řĹ/~1_ˇ˙~zď{ßËéâĆD¤őůĎžýęŻţ*>|˜ďGHäyńĹóc,+­‘Ç ƒm~đqm ß%,!tsĐsi2Ć kAĘ% ńHžˇĺuB6 Š-ŞhMéç$÷Ó5=~”>ř…Oą> dށp¤LĽŞą7r_*ńŚljˆĂ€˘m4]y‚Ĺƒ ˝ŃaŇ ră]Vdُ@y’Db ź\`GVhŻ/ DBŇČČiZA§7 Ŕô-őH{Önˆ6†)ý\ƒźU(Ů{ú ôr&5¸^6䯰ţ„X!„Měűuy5Ał ĽŢ’żž§¨|އ )—Kp Őîގ üľuई^$ ݆Y~qŞ€“řY: ˆÜ‡°Y{–ŘP…‰>ďE"H:O]^Ѓ<ń~ĄŰ@ňŐqʄ””„{LŢú^ů€Hcâ̌ůăvQĂř†zŔ˜㠇‡‡ÇVB3< ^*Ž?ÎD #ŕŮá÷˙÷é’K.ĄëŻżž B–yXI\ďbź…wĚ)Bđ”5 ĆŃO~ň“ěâĐĄCLĆÔs‘)zóL\JüGM,ľ,JóĹ5˜'eŘťF„‘9aeH÷›Ýǀ#űĚzł˝H÷Ţ{´ă\j(6ԘÇŮAmwˆG‘ě.ΌžÖÓůŮ@šý6Ťtś˝‡(gĆß:ŐJ¤ô6TęăyEY@”ŔŽĎpąž'É÷3: J Á‚S ’z™v>uß-ÍŐŠ\52g5˘=—OŃôĽ“T.QĹ(_&/œ ‘ÝFŠX-Óâ1sí™ÚeÎCű2ş§JíFD͕ş1žľ¨2ŇÜOÄÔ\lScŹI+Śęí:‡ďxčË'éô]gQUjSZ:šB˧›túŽyšl™j*T1Iżč×ĐĄKöŃĚăóô÷ÝB›)ŽT ž ´18HŹz™ ŰqYRDť). q˝ÝÁ&žČí„L;B&ů¤‘&řňŸE(Äţ8śÄŠĐJţš ÁĎ´ űr “˘ćL˜˘Uˇk5Â8ťn8*Uć˘B œŢę^VÖ}˜śnÁcŠHŁŽ0.ŚŻƒ#XşŢ[bÖ×Bćń2ŠŁ”ÍśW$î6ôÁšŘ°żÖ{kßîyu†ýČ.íź§łý\‚žśřxţŢÜNšşLƒ ´ź‹.ƒ¨°jJĽ'ŤŠÖmxmҰ`zbAťú.đ3ĺa%ś¤¨żĘ=_4ŽęŰC‡ˆS”~ˇ<ű•ĹĂĂĂĂăüBŻĆĆĆؖ˝>Bną\H ĐĂáŁ=Żw™ôf(!ZtËG“*´žM×­[>˝Î{lo ´Űçžů5şďńGXÇ[3vÄéq*Ő*źŽjcwÓČĹŚÖŕ ƒ ÜúˆQy˝0HZÚ ‘˜Aâ~0ٕ‘zgŔ IpYš šęš”\„Ö3!LN‰ŻąŢěĹ8ÇéKXa‘‘7DC$ĚňŒľ$ që=Ăć“yF…_ŃŘ,Ą*l2Q_S7ŔŽĐ˘=RH[fyE$;äœĄ„œ!†$!hŕ{>J6™¸á`t9ŠŔíDy/ݞĽőŇż/dy۲‰×‰r9H'p­0ĺÝj‰ńË*řlÜ/ ŒśžYÚ6ďü. —h‘ĹË“n(WA!“ˇ&žHű÷‚<›ŁxĹniě^„a ß1ȡZí\Áh­1ž---rh „jşďţűhfć,ťĆX}ó-7ó¸ýÚמ–^đ‚°w %ŹKŽ9BwŢy}ösŸĽąń1:}ę4ý˙ń?čiOťŠŢň–ˇđ|X­Vč§ú§9íŻ~ĺŤô˙ó÷qÉ%—ňxŒźo˝őVÎĄG–—‘!Đ$͘óźřâ‹x žóÎ;™đąůąÇăsW]u—Â'ź Ąź w<ôĐC)y˝51NŕÝ_řâhzzŠĂłÝ~űm郉ĂĂĂc{`ey‘‚f7ˇţÖBŹ ýb|ŽŁ0% óTßłÎCÄŔc{ŘˆËaJoĂď2Ő¨;ĂB+ż†)WŽä-;ĐŁ8 ŇnG}ďsQ1ëý˝ťv[ď ”Ĺ‹Ÿź°Bźt'Q3Ś˝WNŃO?LűÇŮ(]+źËž%@’8u÷Y*×Ę´2× ă?8IűŻŮÇ<Şă5jÍ´Š9o4ułöo†těÎłt48MKó+ʍ™?śLá$M_8JŮ&UŞ%ÚyšÉďĹă´˙iKtňghĽšdĘA´˙’Ý´gďn*ÇUŰ?jJ?Ó­…żÜ}mßhKUŹ1Ÿ¸Mŕ ƒ)‘.Đ>%>–ľąHoF6ŽsźéöX\Hlŕ<q´íœ.8HˆÄáKG:|,ŃäŽČđ×ů.¸ĘŘáćčŐ+rsďLL9Ĺ÷ šŽÔŹ.$vŇě§ü :­îąČť‰—ˆŘ%lĽő‹”5ęqn°ç&.„;ĐůëŠŰżż§ŠAŃŤov;ĹďrÁÉĆOA¤ŻSŁQ7ú’­ž„[j.Jˆs 6,Vßgډ6IH0ů΁BŠ8\ŒWq2Páŕ÷ŠěÓ+ż(H^{5ć<Úw’,˛4;;9‡‡Eŕ‰8çEd66›O/Ź×ZĽW™äťlś]o JƏSaÂŁ%Y7kÂzŁA+ć/Ân,!äLŤÉvľą‘Qš0zԑjŞ•*Ռî!7€óŇŞÉ2ěń“ÇčŸý•Ke5z扝ÓTŰ1ÎŢ[F_Ó0:ă¸Ý`9•×Çm"Äc`PÁS1\Ëąľ˘Ż ĐyCţ\h„uƒK=™CZĄlî1÷ť őĽqv,< MÂ$ rž,Ń )hן)™Ę=j/ž ě÷(Š;v`Ů EŠTs ь” =Qč˛Ęłľßńˇœć…¤˝/Në¤Iúˇýž1ľ‡ š&ď]$Lˆ$QzN“ô1”G˜‡ř‹IÝî`.§yé€ëjľŃ4vX–oň\â UÂŽž.n­"!ŰńÇůöŐí ]ŠŞÂŻč{uz …,-[b>p/ńÎŕľBvC‹›.ź—p-ďáááąőKKD÷Ý/˝ű=żÇG0Ţa|{ők^Eťvď ç<ç™tď=÷ҧ?ýi&4 t†˙ôęWż’ŽŸ8Jßú֍tď˝w3 ěú§^u%MNM0á÷íßCĎzö5ôďѿřyzÚӞJ/Ů+Ř+ĆÍ7ßĚ^2@j@úľZŐŒŘ˝uDĽr@ĺJČÇŞĆHvÍ5Wó} eÜwß}œ'ĘBB”€ ńň—żœnźńFúŁ?ú#şđ ™ŇOeă([Ž"şţ%×ŃŁ=L7Ýô]zôч™ ¸˙Ŕ>öΑlc÷ęGM^­Žňĺ\hThźl Ł”šRľËUk„ś†jk¸°­ŒřkG„ˆ ü)Ż|ŤŘšżˆ-šBŠÂž dōźýazÝ>ĚŘŔfŸ‘ŽáúÁäuô¸QtËŁˆČąkĘ(SĚS‰ĄdҞž¸F‡Ÿż—VćëtŃłAˆŤ˜š˘Fĺ^:ږĐhŇâŠ%:~Ű U&Ę´<[§łžĽ™‡42fÖň;j4űÄ­Ě5ŮJľ|˛ÎŸą5š¸pŒŚŒÓE× ?˜ĄĂ/ŢM_w˜I*%#‹íŘż“Šč)/˝nůÜtüŰłŒ˜˛EF>ŠÓԁISŇŁÝZśËń8é+݉ŕvCƒ4pĚŽQCe7Gďc;^,V7¤ĚĎĚHČ2_Ůkƒ4š\ј"ĎxĆqF’`ƒ^–ÜŞ!Č"ďö=^ŁQgăŔZ•Đ<˜FYYYf™Äüé鉞z›Ĺ•9šžçgé’,úCƛ„–ś™[˘Nž­ƒNІ}ŽëYžN}LˇsbĚ ž;äóŇ:ŠÁ ńůćÓKĂHYXOcíźmv^îGHŢ—ĐŇâJŞűëH/GL/žL§`çF˘ËS ÜŃŽÝ,Šź„ód‡ô-ńŘŹC čóçĂžs›ýt,év>?FĽľ•Ń—Jœ\°d䏣'OЙšc×ZĄ…ĺE>vjö,ž9K'ÎœŚ‡Œnó‰ăÇivažĆŢöđƒt䂋hßÎ]´sjšvMNÓóŃb¤6BŁFşcrŠöîŘE“ă}7,sqDĆŁU ś~ü+Ÿ§GŽ=Nă;ŚhrßNÚup•FĘ†ąž´B­ĆŠőě؂^ŁÜ7$ĺV‚'Xl 0PŔ`QNÜbo´ źŃ(ŞCŃŤ_\ű=Ę Ą"X”“EŸ&t#ršÁ˝&˙—sé¸o;‡łtŽ‚Žň€a>#U„ĘŔߊÖ ů.^-„8 Ţ&l=my\ÁÝuÁ+ůçŘîĄMşíúą×Lú¨TĘ É"LĂ6bˇ˛ŘĘH:ńVÝVnúЧ˛őČPü" Čé33ěF;ĺđ Ľlâ…ő’Éôô4yxxxl5ŔłĂ›Ţô&ţ.ă"ƶÇÓ _řBöńÚמÎĚŻ5züńÇŮCČ đp"X—8¸ŸŢůÎwŇ÷ž÷=-/3ňěg?›ÇO„Ů˝{7=JcűF(ʚ9çÚ=třy{RÇČc5öáK+uuUĄľĚü0sbŽąrGŠjdžÓv+ë÷ĚldG5‡ôšOÂ{E˜ěl“MŠŤěď™ć)`…l`Ű|d‰CVšŮ;‹b–UDqšF’Ü:ę0ud” ŤlJ˛ŕŸC*M7ň]éý.„Ô†Öôë!3q™ÜŁř sŇôŽŐȒ1uhƒÄ؞>  2}ˆĹĺ/2ÔvÍ}Č6ވ4՝ÉßŹŢy}Mžoš4ňĆđβĺű§žˇWĹćşÎżůg†TʇŃRÂłÚ^F;ĹéŻ|ˇÉ÷ĚÇ+Ëu&Y O OˇJ!Űt-ůڏ?t#"Ú;łEq—@î;ô rtęÖT‡ RšOzMPG/’‘Ç“v ˛ź ™_Ž ł<<<<ÜńbPŇ~7čë _bÍ-6ží†ž˛9 Ď÷=ňÝřƒďÓ7o˝‰9úÍĚÍŇŠ™3F‡™xç´ěŃäMŤ>פ3ółtë˝wąĚ&6*TíoŇč~Ç&&hjb’ďÝO—]pÚ€ď;@—ş€żOŒ§IkŹĺ)`ŐőÄąŁô×÷ ŞŒĐäţ´çČ!šŢż‡C.Ď-PłŢ´žá5ߏÓÚŘHŇň,<„ěšCůV….{ŻzˆGýî^ŸšÝD¸–%‚ Ő¸ĆtţZb€„%фŒôo@éŽ5N7,ö˛ĄCŘPVhĂRz\\ëtŤŁҢ1@+6´ŔT*DŇŃuŐőŃpËŻďu‰+ú Đ˙$Ś—([%T†Gp >č-ËŮÖMĎnŤp’6 yןݵl‰VŠ—ÝţŁCŽH;Ľd Ű!8 =‰P`c\…d |`ˆ›1F?„A Ć4alŁ^B‘ď qx/=<<<śöěŮĂĄ:zăëë^÷şWÄtńĹóÇć‚Wźâšc/~ń‹ů`7ٗżüeö8đ裏rž_|„ÇV!€¸)ă oxcá9Œő‡˘ˇ˝ímšă/}éKÓď?˙ó?Ÿ;wŃEŃ?ţÇ˙8gŹÉ ĽÓđđđŘ^hG2H$ëbY:ĆÖŻ@—”aÚőŐk¨™hľ82Ÿ&=Ë_ר—"蝎xâăż-+ˇeËńţ†\ŚwLtŸ{t™ťĺ8ź|ýţió{Áĺ j.śŠšÔdďsG—hńńŰUeעXó_ůă‡iďSvÓČî˜&ŽÓřŢIލUidWĹÜÓ˘V˝Mťöí˘ń‘qŁŹAŒă:šî5›4űđşŕ9{ŮÓ@Ťa ô U ­%˘ăœ¤˝{NR}ĽAKó‹LęXO‚ËKě% ‚ýŔĘĽ Ę ČĚ˙a™´ÍǃěVލͦÂ8뢁xËHlĎAşŢîގĺÜ# !Ÿ?ÓˊĂ<.um:Ny<˘’‘™`÷Wöá}Ŕą˘waՊâ ŮX@:ħü͓ zĄˆp!EÜëúĽ3H^kĂęÚŞ“$QtM’C7ÝvZô¸çu:Ďކ„aŰ"îĐaÜEˆžT7FkmßőĂşfă8ŤUúř‘ňę1ot<##Ł4l–(gŤu!fĎ9[1ôH+š&NÉnúž~„ WWtMŃy} çčrĹăîů…=6DÇ:gŒY؜ čĽoöđđđ(B/OŽÜéžďu/Ë`f˝ÍąbS{R ™öď}řúΡ2šâŽďŁŰ~xÍĚĎĺéŐAŚÓ°vÎĚ[^,¤‹@ś>ŰçĐ2Wœ]^¤™ú=~ň8§ýůomavíĄ§\| ]tč:°g/]vř"şŇüńňL–q÷˘÷š=pî“_ú=xę(í˝ř í?r˜ö_qUĆFhev‘šËu–ńÜał‹ąĄ;„KO°đčđXŘŔź• ƒ˘›ş“՝xpHvG)tz.ÉŔ%adé ?@ňL¸Ě°>.ś|}\{‰p=kdÄ {ű"!K“+ "âŐ˘Sٙ1řľ‹źwˆ(W_}ÄÎĘ<ƒd!T¤>֋†Ěđ4ôKëݢ’(amYl9böřĄËĄŸKŘ}°Ş‹üÖĺԍnBeŽ”ÇŠ× ź‹KË)ąBźUŔ5>ÚBA}„4bCĄdáQ¤˝"Ä Ăă*Ć×üŕtÓM7ńœ‚šđ ox=ăĎHC‘¸Hě@ëŠ&BÁg„ňĺĎŇ-÷ÜE{‚î~č~:uöLv˝s*݈ Ö)í ČÖŠĚ–Ů8í˛%Ó ˝?uœž8}‚âď›jŐÚł—.Řw€öěÜM8D×\ţTzîÓŽŚÝ;v:)._G}MžŸýÖ T2˛üčŔĽŇîCűyMۘ_˘V"ŒœUoQ”lú–őďv'Xl0Йášk~~žďB|łŁWš]’ţŚ‚SÜq=O :ŢOLů ąž/ŮUŇUíaŢěfŤĽEÎHÜ\°Ą=,qœyF#Teśąk’„=bÄś„aâQŁÓƒDœ[؊§IżÉB§#]˛GZ‡ ď™C”;A2’ĆąŢa•D˜¸@ŽŔäwńB@ëĽ×ä‰*äˆ"Ö˝ŤTŇ÷šäiOŠSˇ‰YH$(ćĚ;tćĚ żK Vˆˇ q+áž)„0˘ŰĹ%XŔMž‡‡‡ÇśFĎ-Ť_ČÖFŞôc?ţFzÎsžE‹Fyƒ1óĘĄCizއťlG‰X|~5Ř>‹ráюB˛ÚŠůTv{D‰‘2ÂbЎ­Ń›”Űo‡üŁhË-"ł0§$ĐDôÁ+dĹ­,DˆČĂ,Ć'FÓľwšnƒĽ( &#Úsńíşt'íštM"ŹGŃČÔ(•Ź‚+óu:q˙)Ú÷ô=F1ƒ°m;ń˝“tňöŠ›ůţœQěDÔZ6rŃlĚĺ /˙ť&ýĆ25[Ԙmq‘×HŤĚŠ~Ś$tŁ\ů'Húl§;Ľ#ÓiT›ŘîNŠƒÄ7…6BVTĎ5Ł]"AߢJO:;LȲeŤÝä~÷!X@WĎ d‡<‚l€âŸ°ÁŠfŹÎ#N×N›…ĆâÖ-îr.čso‘18Î]>HyÝFžÝ]ýÍ:*É%#œzę‘Ëč5/şž^đôgŃ“_T!{=&sîîǤÝ쥽ě§vÓČÄŐOŰÝJę‹FÖ6v˝vaAâdӁS‡-O°Ř``°ŔnůcǎŃVG/Ë5´kTęľa=š1ůK{I§ôRâ¸pĎĽš+Ŕ„¤‡Šv`Ż&%BV+<8X’…ÂÄęQNźEhXEĆT×aAŠH ŽG ń@!çĺ>! hAO9^r)r…ý].Wirr:M3ˋRB†.ŸmĺNÂEŽĽăNˇ–rݐMP}öÄ!ǤLEýD ÔíěŮł4ż°Č,GáBČ+ T  $Hö<Â\żÓí7őŰłXĹđ=11AO˝ęŠ4<śĎÚĂĂcs IüQűŰŹ<ŔDƒŔU(˛&h5Нîů(]Ç„č…óľ#§Ä*2°K îłťĽ)QÂ$FţDŚ‚…–Sú#`7÷ ßÁ‹Łk÷C/ŘM{_0a,]řě˝4šc'ŐJ5“i;‘Íuć{;^¤wÎĐřá1:ußšŘ3J;.šŚńÝ#Ô\œĽĹc+斐NŢ1Cgď[ Ľ“ j.ľ-y˘ŃŚú‚ůŇ‚ŞŁM“+LÂ1Ň@N7ÄŢďfŒ88ÓHJ­Boäš.3|ŻÜ˙x4ˆ֘Šcp°‘5ú‘őľbýWP*‹ů5+C›Hy¸ l‹6Ů Ť+gj߲ŞůěÄPźő\ý˛ÂŃe§GQÖnŇ>ÔŹ­sţ˙ĹóN˜ô—őA܃9Ó}ÜĘ:Ev‰|’Zä\[t?ŽqCŸäJ ŽĎŽÍôԣ܃KÝ6wdçłrôŇmużđ˛HNn(Öz}…jŁÂt˘m­or7ÓXťőF…)xšžLł KTÁ‚†ćŹĺ, žCÁ+yľę ńd‘%¤ÎčɊôkq:ţSÇĆ´4EđéÝלRlłţâ18´.Vëáńwd¤Ćk1˝éq[3=<<6şÍ ÍĎĎń_ťé7żxŤĄhžčňŇ}řKŸĽ˙ó…OŇ]ÜGÍzƒJŮŸ[ŰĆé=9 ’Ż˝!ýŠßV/’ľoTÂE@ĺ°lŽmÓRŁNœ<ö}˙î;č ßţ:=揄égŢđfzÁŐĎŚAđČńŁ´ÜŹÓôÄ(MŘCă;ڏđ͕­˜őÜĘâ5–ëÔj5Y֊[%ĹŰgńâ  ,d8@wÝumuEB„ţŽHM$(b°íp ƒ"ßś"ЇůrƲ¸$˛ąN‹Ó9AívÓ7ˇ‚VBČ{d!Ź\Î×ŰőÔ ˝*čÁW‡řĎryâBÖVpýĹĽ„ǐP ň; KfA=Áič!Ň>Q;k+.KdJ¸OâŔJ™\A¸›œÜQœkێ֣ʢ˝sdmnˍłłł, HłŮŚ3!Ůđ%eóŠ0ŠBˆĽR†H¨yNřŕÚ]ťv‘‡‡‡‡Çö@?¨‡‡ÇöE‚Öú N'k|‰RjmbL żq˜h+:c´kf5D‰ŐÜłŢp‰Ü]xČěN˛ŽˇëćVâjݕӴˇşÎ2ÄźO,X&06靧ŮÝúčx•˘VĂČVFîˆü܌ş‡ćgé‘ď§'n>Mľűfčô=ËĆH°@ó<Ę÷![ě~bc\ĂühR”Şĺ…$aˆMűœ‚I;-U–$@MôRČKqâą"9ËîčDűf˝ŞŘgćČ Ö#†5PƉÇ7B„ľޘ˛Ë8Ř=a~ľUć^[NŤ/`p[ŰŚÄÚű^!úCIźnˆrJúbŠqv#!0şCNJÓĺÉĘçśĺI%\crç}]żŢ(._Żq˝?ábü’Ÿ +;Ti;BëŠD'd7ETo`ˇý"ëśŒČĚ ‹-Ú˝{7ƒ-ÚjGŠ‹ô¸~źč>@é+%m‚8ۈŐAŘpt›ŽŢO_çęCƒ.iyYĆcˆ^sڙ3gY˙‰yî&A×[˛‡‡‡ÇZáÎĄzŽĂœżh ígĎΘős5%Xlet#TB6ř_Ÿřýá‡>@§fÎZ{ ^ÔŐď[Ńďnyçî)hËtí"×´ěş%66ż6‰c#2Y9˛cŰŹC?~ŒŽ>E_žů;tý5ĎĽŸ~ă›éúg>záśPZŚ1#űˇLBq5dbŜ™ƒ–f犞´lC„€ĚŽľ“,śŽÇĐ"x‚Ĺ „#%•`Ť"˝Ęߍ8QD,pÉőnƒ"îĐ á@Ű)`4@@Éń—ôo]÷tóÄ Ť,ˎľŇô1ÉXR…u?jăNĆLz€V~ľZăkēî…@.BŞ&󌌌ňíÍAÚ&&ĺĺ;”Kq!1FˇIQýŠ„RL.B0Ą$, bnś¸ěvaňĂSČPĆÎĚĚp}PG–DE–edŁä˜tǢ~•ľy˜; đőđđđđ8ˇŘ¨ľWł¤~,ą;‹ĚމLŤúŻÝ…äČZ’EB؈“Íď‰p˝hÁśPƒrśÎby?o0Íë(–ň2§ČÖýP22éčŘ5gó‹Ţ÷Şg)øx§}…÷ę|Vťü|Œ‹i˜á0Ÿî`ă o‡íżIiCtż´†EŃĆŁ˘c÷E˘łČĆ ôżryŒőŁ•LU;LyÓ¤ám5ÉÁü{vÜ8€Š?ÖjŹŢ) ˛MEĐUľ[™> z l–A¸×ĺeču ßiĐÉSgY÷ƒ 5msÝäÔ$ëŹŇ \ŽŃţ;é%/y …VÝFŢÁÜS˘F=îęÄ}o\2Ué˛0ŻXńŸ óČë6yçl™őŠÉÝĹŃv˛Tx ŮPŚőď˛é cÉɓ§iϞ=466šd)Ń5{r…‡‡Çú"?‡RşĆÁf„|ǜ łŘ(Ťí4öú­7‡ń؛|’1őô™3ôÇüKúóO~˜–í:!Ž]Ë$o¸kÇ^687éxœçóü#+Gv0Ó}؍Ő6DÂn !Ż„zTl˜ĘДŤľiÎ<ŤOí‹ôŠŻ|vMLŇŰ^óFúűo|3ščâŸu_úú ÂN7RĽŃŃQ&S,Í-0ąkż••&ľĆ.Ž-UĎAYý[ž`ąÁ@睞ž&<ÁŔ%_¸ŘÎlmŤ¨ÄˇvŽÉŕ7ˆ ˆg‹rŮ2Ë´÷‹0\NË˝Ýd,ŽeŃ-Ç3ĽÎĆŐQę%e–IőŻ8†şž1Řľ`˝U4“]D-&R`ňB…Ü+“ązR6śLÖZŔĹ1˙Nzxxxxxxxlt3S p'ÖżQŃniJ FçFYs.”BQBČ ’Ö•ždő/ TXëB<ÔP\ŰŽqÎÜ0iAţ˜žš2÷>a×îÉ39qó,Qő‡ô`\˘ăˇ.5cš{x…Éatt… oUMź‡36ľGÇî÷ğ Äě0J ™âą碄öžĘg ăǝéĆ šŢœfLk’óz4ú+DŮ֗‹˛IŃäÍ ć-‹lؖ~€ä9R-Ńě:ě‡Áfň´łúą†˙Owśe@Á&ëSƒ’4Ź~&˙B”|wĎóö´ĐŚţ(đz"_d|‹Ĺ`ň{gšöŽÔâÜvÎ]%tTŤ§(Z͈VŒwŃ(Ń­.gĹk󆙹ů9š7 vÇ!č`jľ*íŰg˝ťvME|&ĆGhrŇn ’ÍFBvc[ýîÓc}ńřŤÍ˝şíēEż \úž~ŽnÄŠţúѐVťŽňŘÚĐĄ‘uß/Kx—žxâ ]>==Ĺď/ƒ8]kÄf=°L§Ndďƒâ]]l3Ú+˘:~Ť@FRŹ…žř­ŻÓxß{éÁÇľłň€kĹaމ"‘.“ü<ôŻ˘5F–N”ł1ťß7 JŔĂUL.-ťÖ;˝˛Hďýđ_Ň_é3ôÖWžž~ęő?Fź€C‚"Ĺoß|EćúąąśaÖÍZ=WĚűŢâ ľá˝Â<˙¨Ź—"!™Óś'Xl0Й§ŒrŠ—'€íŽÔóƒăJśX˜ ‰[ cTźÓA{]Đ}…˝]$C¤!"ĘN!1čt¤,úă€(—ţFî&vI(§¸€q‚wąÍÍńΐ+@´Ŕâ,kím÷ˆK;RD&`¤%í çdb–]z×&t¤çááááááááąőŃÁ"´† ˜Ő™ahűŔŹiنŠR)ľdÇAÖš2„eVźŻĘHEěÍÎŽácŁ@Nf(q˜ÂńT‰ĆO&ŠţXD%NŇŹőľ řT69Ď.ČÂ(ş,AeRť››Tń!ŕx9Ó‚˜żń1˜%÷ĉ‘iQěŘ>şˆrÇěs ă`M$‡˘Ôť1#y ÉUYŸJöěڇDŽ„LŮbEbB„Ą^•°aŕYq3ĄHǰ÷ôKc-č40ގt“Π×őĘ{=t)Z÷°7'~y¤_ÉßAó‰S†T œ Đׄ ž2{fMţś8t‡%'ŔE‹őM⁢NKFYĎěAľbE‹ffgiž=SŹđX1jj‚˝…îŮł‹&§ĆŠz ÂEóg^XŤPܗŮ;ŤÝ ňf"ŃűHťB?du:40Á&äP:ÄĄ­buă Ď*G~‰;=š)p,čé ÚW$Ý|h”Č9ßőnňxňAôŽŽ‘R‡ Ć9ńƒ÷Ź˝ őĚ9s$ô;ě<‹d€ő؞͉[ޛN rĹ }ć†/Óżzď˙cÖE öżĹţu6Ÿ§s|ÔŰ~˜‰™A*OŞCYű&k!×ÎŞ˙ aśÇ0 ™—Íwx‹7ëľRĹĘąqłLgçč?ř—ôÉŻ~‘Ţüę×Óß{ŮŤh´\Ął3TÚeÖxľZYZĄr3˘úÜ25W¨i֐íF“"„÷LHŮújcl’çž`ąÁ°!FR/[0°^p…GKސkˇc[iƒűWÚ@3ÓI&t„@`ÉöœŽ›ç’’>„ŕJľĘĘUwâęŐĆŤ=續”<ńť@Xƒ ŽĹ=gńXE0ńÚđĽtň•6Ńu„" çuŰ !r¸Â4žmąÄĂĂĂĂĂĂĂĂăÜk˝F„ľf“6Ö?[GΉÎâÂŮÖL´&”#"HîÖsE›eOŹ˙ąŽĆZy5€a­Źĺ-1ş:T]+Ő íŘšł+Á<ŽËĘΗ„nIIç[ݒ)ű° Ű"č$>„Qâş=Ěď§8“oř^ÉZZ@ö'YYF˙XBL˛4.Č~mýq=‹°Ü&úÁޞč)÷ß>ó$ bl Ô„˘†1 Çěů…ú#ˆx7~–Ďđ˝VúűvR0žo *绗iC~ˇÍ0.ň†xęéy C/‘Bëgx\HbRŰą"Ń ‘č‘:ÓÝ|6r-œRĂ“'RQ›˝5ZMÓç­çP$–Wę6ělËž0Œ°W ói™ű-bŠ&&ĆĹ ĄrĆFÇĚů1*Wŕ5Lt9(8Ô-“(˛zc|Ížg€dËô;ÁPź ˇí(Ęľ‰ű<´ŽĘŽóv̏Ľ‘ †˘>§!~l̅^=O—Ľ›‹Kv‡ÔŽşg@Obő/Ůh&ď”lN[\\d}lŢČĺáááą>ĐśüŐÉÝMŐہ\5Ô§żö%ú÷ţöŢĺRâJ„(7Ç –ráÂÔőŠčáđľe Ň ń'¤‹ łĎşkNśe֋Fž @şőË6„H0R2ː2ŕ69EďýŤ?§ĺótí5ĎĄĹĆ í™âź@¨h­4Š>żH öjÖäued™7šjo§ůÇ,Î0ˆ@Á"ćÉźxég°„)žŮwQtšż]2„+Tévˆ Œ: föjáLLrżK(ˆ$žŻR¸ ťy#Ú×]Üc1ňқ­ˆż/,,ňDeĄ¸›—ř+°†Ž'>˛ËA{śr"0Č1Š/vTxxxxxxxxxl4ۙ5$N,SößF.΃Űz„‡`ăOBŽ&k¤)L×ĆZĄž†Ökßź–6 v ŻÂ ŹŃ''&ť§vzŐ8?Ċ"‹h—ăîN("ŘCâmĐă  íö"ëšBNĹ֛EjLM}Ié.ŸŒVCęwä”#Ś`[rľŠĺ픁ó×E‘’ľ›Ąąâš#Č=Ăâ~+;üĺy´áЉ°F ˜SçD%óÖŞĺ,lπýĆIfUç6“NЏ,Ť'ôĘg}˝Xđ˙ ćîš´rÜ~ť’ąŕéGë;0Öb¤BE°HĘwnԉb[†Vے'fÜF¸¸ân@ŃhŇ Čˆm> &ÝŮ\Ny6› ă159É őÝťvšţ]˘‘‘ƒTŽ”™<*5c(.ŞT–p­ňˇÄd ÖšCDúz/3ŁAö rő1ďĘCđŞtUAĚ!LúĄ+i&HĘI}Ą¨ĤŒ Šdá'z‘ß É…ĺóî<:QäuĹŐ Ë_ŹÍ4ą˘ ÖĂĂĂcľr CśËzGźěčą ŘŠc64|ôKŸĽűďŚůŅ”`ç6Cô‡KވS1¤łm@ÄOSŽ;×)QĺĆ}ţ„YX3—`‘ś'žÍl8ËŔ2V)nšçiÖ|Őłţ3ëÁČŹő¨RÔlÓă'ŽŇ‡>÷)jÄ-&×֍í/\4˛‘ąű-Í-P}ŠN­F‹7|#ýdYœÔŃ!‡lqx‚Ĺ9‘I#¨Ŕ¸\´ŕy˛Ŕ<nťś{űtk‹^lvńp‘ĹĽÂąRŸĺaGšđ,炼"Â1&‹ŕФ ü^XŹ“ě†ƒď„yë*ŞĚ‚ynWĺ…RíĹŻř †4tHIŔ΋'ăűçáááááááą)ĄŒCßjÖw„`!I7z•w~@‰'Î{6šÉ]ßĂ\ľŐůŽŠv(šd7vŠv?|ˆ‘ Fţí{ăÄ…]Ăîm×u|ÂĆŇč)żş×ňö uś”´ŹZh—Xľ?˙Ë ŞţE§&e°ŃCâԉE(ËŇŃ*_§îXezA,MĐęžŰęžuž€Ň˝đB|Á•,K"T%{°čWᘟUľVژVŮŕqö'(ŚÝl2qD |FGGhll‡švë`@œ€÷#Ě셢dĂwp:‰ražXIOÝěŞßĆş}ÝŃŹ˙;“›—h˜žHěmŁ÷5™ţLŽeĺ§zŰÇ;ž;”Z ş řţ˜âˆTƒ˝‹^żőd…Ť+˝°ű˝čšßMĎĂĂĂcľĐ ÷ťž×Šˆ[ÉVłdÖWüĚ'č?ý٧šEĺšBUĄW}ÜőĄFóF˝Ę ´í0ýgŻKŰ>Ó5’Ţ œű@^%Říš&f~E›Ă[†F×ҊÍ:˛SŠZĄr­Ę1Z•:ľĚš4lŘ Ó°ů…Keö`ąll€+‰‹D &nÄIÚQÚŰž`q!ĺ /¤ÇœžŹčÇŕ.:śP4až cůvœËv˙tťO~ ‘AˇŻ&[l$ˆř€X´bŮúĘJ˛+ŁîŞƒŤ(빢Äő>„ËŚr ŕ ¨qŠ'vV MaGşőÝż?yxxxxxxxxl´Ł€…˙`[ŹŤśBńRâ­Ăš*ĎmpYZxÍ_d(Œ“&íöđĄĘĺ MNMv’çsd‹ÂŻÔˇČńĆ>çbq´‡ŒäĎf;š@Ŕ#HČáŇ.Qlĺ=ĹĄI |š<§ŮěrťŽ×ą˛?J΃>…ŕ{ôĂPž,IŠ^o°ź:ˆN˘ŐnRľRŚŐÔ.NˆFią‚Îwp˜´ŐŁ cHłçzĽ÷IżřÉé,z§ÝŸěŇí¸(݇żw°óƒ=Żźš^?çÜŘHփżѝœ:uŇt°5ŁŚ%[Ź4ŘĹÂ’ůŢä4*•*‡bBŒs\cu!ťăc46:ÂĄ;ž.bŁ“ŹĐČHĂڈw#(8ĆvE˘{ ĂÄCŸç>`ˇďhĄ (<ŁűŽ„}•6Š{}א,,‰ƒ˛qU Ýúů!NĆ`ˇÎŽTßß+˝˘˛zxAo>sÇý]‡—Ž Béxr…‡‡Ç č6/iŁ˝{]Ń=[u~űřמHďţË÷Ńź ’“áhx¤cpěȒÎ8Ťľ ˆš'ĐáȚąş_Ö|éĆä/âő ĺBÄŹsˆ’ľPllyŘrQ6kĆJX˘ŠąuWŒMoĽźĚÇAźh4ęT^)Qcąž…iśRňz,^ÝśáTă ç`‚_uŐUtűíˇs<qw#pŤËÝáŃ9Öôg{ŻkÜÜ]T/?QÇy÷ÜV`ű•˝ßłŃťÇäzV Ř@IdGź #˝^ůJű÷Ëťß3Ńedƒ0Ď(qŤjčđŮcĹŮY3ÉĚ3ŠbŮ|šfZlě@ßÇ_ŽÇ™ ęšMżp ‰ëÖý¤eŇaŠ0ęĐ>“SÓLfÂGČ"8HšŔČĂĂĂcŤ Ă8ĽŽ{%ˆ‡‡ÇšFŻuŽk ×ßű­íW;žą× ÖŘ8ę™Ýy;Ž%ŁçíŽěŘÖ5 Rn -2&*M؈XWœéÖăĚHV4ÇŔűŒu8ŢNdWń<7@žžâ°|NXDń˝ OÚ8Łr§ZŹŔ˜œîĘ":ÓÔ)ƙ]=PrZSş ځ08ôGjű ŇDceg Kc˝y(pЧhŸó$Ű[ŻŞ,âä=@ŰăÓl—hŮČŹv+Sö@Ő(GjbŹ’D×g܉IxĂŻőşoféźn°’ô#@dČç[|oçş68ýîFčŢD‘aIĂ裚śŰyĘźcĐśŰňJ“ě šŸ=MŐŇ(•ĘŁ46^3:– á T&&FijjĚčŤÜW9ž96ŻÔŞL ůcp’&(!Q yBĘŐ­źü?m,ňíŽf%žˇÚ­á7Aď#a­’ š…ďCZ‚œŢ͖)Çtt`…ľHÓşÖM§ŐAěX§~ćeÂ'7şérőX[t\÷Kő€&rilyĄZÖ>qě}ŕăŚÓgĎdĂź'Í Ys‰ěV3yݢ_#!3’Ź‚$ĽdíHţęoć¤-ÎB“čŠéʒ˝*Z^Ʉľ‰qśßqˆ‘fLő…:­,.ScšAm#WE­6_é”ĹTŁ_ĐD”íO°8ŔŕrŃEŃő×_O7Ţx#={–ŁęDb5˘‹áš“„Ń)l-š†Ĺz j˝lúoŃ@ťeŐčUW˜ę…źB$ÇeŠť]WLА~ŁŮĚÝL)kQzšÝ‘,ă4 ÂsĚĎĎŃěěC˙†p+n…ŤFĐĽŻěšČŇŚ´Œiźč¤˙ˇZ­¤+@âXZ^âř¸P&Lĺ-źVTkŁ9WGR÷™ěŘąƒ<<<<śzńĂÜëáááą(RÜjôZ_öBÜՈ×ÖQ?v“‡T)ľ#Mb8Ýf˘ť äŒőüżZďb=55Ĺßm¸ž†YŁ7áđ“ÔćĽýqňˆł°„QdťpE/é J°€kůńńcôŤŘA’9m& ֏CŸëKO‡Iăó˝‰R‹rAď6°JxĄM!NpÎëęR.-×:60§Ž­Ąú\Ą˘4,źN°‘:!…ŘöőQJč é?¸Ä­7ŰV†˘žeFZŐR•Fj–4”sń1\é Ň&ĘźZ#čň{J”Éä z“8Ňť‡čŸÝ AúÂ䏗˜`a=yâ,źT /íŮ˝víÚĂGFGŤi(U„î¨VËIH2+Ǒ¤čNúíuËY„s§“ë+5ŒŞ'#8C°Ň>Â\Eö :ßąžőËv.T;Aű“,4QŁ;šŁH/8é˘WźÜ÷ä…Öń‘(\]4 ›Đ\=˝‡‡‡ÇzĄ›ŻŰ|ľYÉšŐ›ůą°´HúŃżŚťďť— {Ô;!+Äažb!Ě Ń ˛7§ë$!áTpÖ5B•ľp(âěťč:š7Y—¤ä ŹmňDˆ6ƒ´ĚAX˛rk`˝éËf‘umťČŠŁ6g„ă.ÄkŽ48\HÔhS} ĄCZÔ6r•Ő'؂I”)đvšy<ÁâŕkŻ˝–žńŒgĐŃŁGéśŰnŁťďž›Ă'Čn |đ=ó1q,"Vži˜­‹Ik]4 "€šěWwa׏[tź`+Ą›€^¤ Ţ¨şĘî5!: Ţşß şŘ†Âvqq‘NŸ>Í *@˛ŔŠ)QÂÚ eţŕˇôőH)Ž„LűđÁľ\’ĹÂÂ"ÍĎÍň1¤ ˘b;ƒdÁíGaa=třx‚…‡‡ÇVAn!>„1BĆ{ő†&÷#çęs äÚ2ĆŃj%ŢĆÉL}'Öř0ńŢaÉůÉŮ؆ϓőż6źšs ëš_ĚĆ*Ě':ÜŕŔĽ ŕĹąlŒƒ#´°¸Lš[ám$XÃZOďqŘEë<­Ş+ÇźŁ.úíc 2˘ +ˇE™Ř_EčwŢ+WŢ&Ľ0)[`ÉmV9f•{ăó2­ ÂŽ¸t–Ďľœ%Jź|č§<ćB-42¤¤ńń^)ÚwgÄšĄ\áY†÷_ŤĽFWęT,DH€ČśZRng™ƒžă{˛4DŐŰ=ĎÁƔ˘ttŃ÷v´xçšž^Óƒ’4xŒNIkÖËĐţűéYĎž†ĆFGŠTąáƒ hO˝O$I…}ÔŇ[[/”ې3Đ]ć%n§c˘óäs’;FÔëŮŰÉWýĚŢĄ °Ÿ]˒ďŰyăąĐúwwźvuóŰAßîááąůPd÷ę*‡*rؚЏnŠ>ňĽĎŇGżňyZ¨Ż¤ç˘„ِÖ3´kˇ@ţ&27ZĂH׉WI!a$š(2pœx$Äu‰“NëE>!؋ü—ćÇÁ‚şŢ'ŹĚ¤$Ž ˛ĺMF쾢dËÍטÂ1!„ Ůbٓu ű[ˇmlxŘ ÝŹăÓŕtĄ;€„ &żv™‹śÓä çčŔ‚Ďž={čĘ+ŻdC2?ü0}ěcŁŮŮYZ^^fv^ 1LË #ĆiuÓqí"űC€ţqœŤĺĹvżKyşĐ;ă˙bÁľ›"UçĂnd”ŰZ=xşťsÝó›u€í†açDág!2ŠÚW_'ńŃťÓÜgĹÜü9sĆôßyîłKKKÖ%PzŔ¤"!UH^řAVúľ0ä>š^Ü!/xŹŔ{‚şR*Óôô“$ŞŐš*\uöQIGňÇ;…ryxxxl5 BŞ#>šdĄ´^‘âááąZ`&$Xű˝b•ëösŠ(‰b %†˜xkɃ#N-f]]’ń]v%fWáů`­‹OF⧂gă¤îŹ÷q^ÖŃí$nępĎ3f×÷Ł#5š_XŚM‹ Ů6¤÷6 ë!!$ť:ŮHÄy„q˘\Ăż}ĄRBDĚn_#kdM˖žŻc˝ä*QŤÁMFŰ1đ%Ą:Vc.ņúźqąˆ pވXAÎŕŢŮXG ɢwb1-/-ĐŽť’VG? “U€nfeą‹ő6´Ĺ˘.đ^Ň9­žŔ0lűö{&î9=VŽžßĘÜŘymÉčČJĄĐĄż§&'h׎i›ÖŇ}z•m+Čpb:Š/KŰí8ŮçYpÍéeMŁ6ĽçTż˘lŁgűť×_łuƏ‡ô'ŃšťýCë¨]ŁŚďG×ިǹѸä mťŮ”0E{ôčôšoÝ@Oœ:ŃÉfHČږTĄHĺRJʆ{.ű=NHöÖSbši‹VXŮ… řŻ‹ö€Ç=ünúź÷‡îçłőěPśę5c5ĎdbFŻv˛z¸Î{j#53VRJĘ!ť!ĨŤÂ˝˜ Ň­|nÚ[V!??ż´Ş5ÂűŹe˜IŸ5ŒG‹6+ĺÚ<Ö^ĽđżC° z‡ ¤v^Đö%˜zô‚čnľîÓŐ˝‘Ňź^ÔĂĂc#áŽA˘+€œ*ňĽŘŸm‡Úl1őŤ7}›nšű&P"ĺ<&!A@J(Á. rEÉÚbá=˘ÚPf$›;-î C•PÓÚłJB>’Y‚ƒ”‰˙*’E?§9IÉŽNŹű &X´cČţ!“)ÂؖŻ“Íűřن\ŰârD­ś­ür€TŃ4ëŚĐCâvd5ş„­O°8ÇĐ :é3Ÿů̔ŕŔ˝&)ô„€01˜kaßa ˛„›óž-Źëʋ’žě\#šK…B]'#Č1fĺ˜ÔËeśšußěčVÖ~Ę̍TźQ +“ąă\ţşOŮ}lvfžć¸ŸÍḚ̌B˝Ő˛äéoÜ7@~@@’žět”źńW\ë6b÷Ać<›O ö;>““ăź!ýŠóxwŻŹP`—ʲvˇá@j#•l|ˆťŻëŁ8ďáÂͧW›lN[F8Žž8AĂĂ™[Öxc@äř˛(ęg=űž gU´‰ĘŐiĘń˜:Ű_Čq<ŘÇ ô=ŤÁFę=ś´>´ŰúÄ퍢7őşőFˇ9Mۄ\ťcŻű6P·ŸxŒžôéäŮ3ź^ëXń˛-­dCża}W5şŘxC+ťľ´m˙… š„폼lƒ<– Mcďm•(jŔî۲Ô|xƒH¸”VRUśĆ0ˆdÁ!>ÄF™,ÓŁ@x™…ý;ĆVŠ cťnápˆÍ<Í)y&˘fŁÚŠŰmŤCx˛+O°8čśčÉâśŰnK ĐÝcIĘŽŮ-&ż1˘gJą(}#Ąô &^*äŻÝ =`Č5RţźqÜ~´q^ғ<ŠČú{‘`°_Ŕ^$ 9_Äzß(ČłÔŽ–\Ľˇô9€hł°°@gĎÎĐٙY&<Ą˘ĹŽ~ěsĹ­}ćyď(Z™+ýŔ­ˇ¸y€\!ťî^^´Ŕŕ’ÜßîwšGţ"<‡‡‡ÇV…ěNwk/ABĂXéáááqŽcţáÇٻ™%ŕśŇ5 °VăŮ €‘ĊV[íľghpňVAŰÔh…Iń“”ŽvVwĚ ˜&ĆÇŠfžČĎ=E*ś ŸŠxK;{†•ÍŕMizjœ6ësČ×' av˙öRćűş€ƒšýi•[%!B>¤”C{D€U¤e-YJwE;0}ĂUúm˘MŐӃĹ:c˝Ç•FĂzŻűŚ›x%­…źËBƒtŤÚŠDö†QŰ.úűöl“nŤ3CßąĄŠ3 ؍%ňĆ÷K3îšöÖVf‡´0żDÂß@ŮŮéž[M{)Dg~q§W€˘krĎ(Čvš†‡Ç Đ†K—ÄVt‡‡‡ÇFAĆĄ˘ă[ ¨ź3|ëś[č{wݖ;'ňŠđúP.Q Ţ#Íßrľbž[ł{jŸ ˛{ÂR™J#*תT22;ţ‚(0ŃJƒl˜(7.¤v˝‘‘Šă Y—d„ś9ë‹nbń|Ąˆř ›^lňŠě5 ř3iż°ç „-! =ÚuŞőPmöfŃśńÝěďÔ &uŐElíľjž`qá*—]vÝu×]Ďgťc(ymRc˛6ŽŘs`H1:ŠY f˝[´ůZťkÉ` âƒśH ŠQ(JĹ;†ĺ n|¤Ě’†őşa‰Ab`ƒ„˜ĽQ㠁/śShƒ<%׊ ĹTĄ”6SŃ"0NĎI=’lÎ \ŞŰÄQĜ×÷w,†Ýt„˛Ö§ šhŁIŽ`Ä,ŃĄÁý`~~žN:EKËËŹhBD˙á°4Ő+LĹŰ žżý!EŐ!Aâ8s …>&¤¤ť¸¸Č„ôŻ;wrŘ(†ľ—~7!´ˆˆázľ8pŕyxxxlUČXŽńnʧŚ&Ůxćáááq>R,Öqss éškŕ]q"îŹÉ˝}śşŞ¸›"*9Klp§†ů3šĺHŹqŢ==ÖčťwďfĎsXwcWLŁ§Ůľímˆ@=ď § x~šš˜(ÜĄ_$ޜäę;ŠÂi§`ĐkJver˝möL)Œ(ÄŹžKÉiZY–-Ź×ƒ ŐVÉőqrŢjÁâŢĹžčű@ĄĄ|]hqA^루 ’#–`‘ynéYČľŤÓH^˘¨,Ţ<$˙ňO™ĎRžĽ{@ꁼĽĽĄ`îžľ\÷šf5eꖖ›nŻëú“a¨0t‹sU’Mgw ÔßL‘7XĘýé!;çîOűkLźË‘ Găć +2H—^‹t3*´ÓAe>‹‹Ă,ď˜Lđ&ţ$}LČ7ké ú™…eÓ>…ç 2…ţŕzěŔF˙‡G í5E ÉRG݇5H“T\÷S pxxxxl5Č@ĎÁ ’…‡Çjŕkë ô#„uk6[f šŹáÄťBoĉ1eŐys" XVĄӆî Ćë—`-ÇňeŔN‘RjČłćZÓČ!ć…l݌ő;ÖŘX[ďÚľ‹N:ÉëzɃó‰-ÁÚîxé ŐČrf+Î,†d‡ńńą™ Ť‹6Z­Oťö“ëâ4.FwĂU7yp¸ĆšŻAj• 3ú˛„ä‘W<% ¸¸¸l'œ]Ťoű+zqJ\Ó˝(颠@çŢtĎӃw•­ ÜŮ3şć9 ň˛°ŤŔ†”:ďkśšýIëe€Ś‘ŸKĽšůćzelˇ7P7 žrdݘíÖĂIœ(,‘BżŘÝa옏Ĺq¨r(V^÷ÖgtWlsţiÇĂŻœ“÷ľÁ"HŽv<×í,ßÜçŐšó™ ÁLÔŕůű˛÷Ď9ë´)!ëX$ůś ŐůŹŽúńbbďˇĺČt3‘ík1žu˘ÓK^†R˛ůI2¨ýʨňJםwŠ2Ü{­˝žďzŒĺŹćj7iniÉÎo=6ÝŰh%ć€$>zz.GŞé$Üt¤%ďźźwze”ăÜëú¤§çčUa`⤏ŮďƒŔŻĺŸÜV§íŢăáááąČQ‡]nÄ6ÄýÍwÝAßşőű켞˘t>ˇkĚR`Cƒ„F&€WŠŇh•Jľ$ÂÂBŚ6ś7ÂŹÄk|0Şc5ß=M;/8@{w‚™@K§fhvfč¤Y7śĚÚŁnî/ľ(2ň>dvq\ÉĄŰd Zˇ×Ł­Ł~rBdĺË@ä>^.F,ƒđď8Y[Ľ+3TJeSVS˜ŚŠo)śd xÁ„=QÖĚa˛fâp&IŽÁíđ‹M—EĄĽÔBTa^žă(Ž4ÉB†ÚkťşäÝüً'Š2ëΗŇ]°’ż¤Ť ŘEtÎ+ÎÂLdŢ5ˆ•y¸Jž3ôKičN+r†yŠŤv-Œ:韼L’ŽkؗpʜPaMz),]/"?¸×÷ThőTeéËłUu˝?FXzč6ҁTą´´bÁ,.rHxݍ׉NJ:§öGßŔsqűĽ&żHşşŻ¤ ÚÄ­0ň’p#HÄ ¸ÁDúšœ3Hę~^ôlݲđŽááá᱕ ‰sbä‚çŠjľBĂŔ5čckÖ]Xga8ÖyŐj`…ń^ý‹ťâúĆq°…š¸ćŰqá!M„Çǒö+é:ťß{î´ĺoťm]{‚í’œűóÔřÄhΔ•Ůăő™(â~FŠ@ŒŰ§úЇCˇúIó{Ó îr,čwÓFÍ'“Çz´XĐń}eĽA-x mGNĚnT•j‰VZM›F‘ßżGLŃ¤ +ÓÇŞcŘďQj°ß¸śőňúœNƒĽlęYÍřĐÉ ąi‰ŢMT:PÎWŤ– 8LϗąďŐԇ*E›XGXRËŕ÷@'ŮlEy0š5oú-wŸŘ#ôüWřîw)Kż>Qx>Žy O4 (Ȥ}Ň޲†+M ™[O9M_úîtja–m˜QÂ/źf@ŠąwVü=RŁęř(…•šF//yş…˜B_˛ŃĘFF™§ąS4śsKąĆ2F+FţŽ/.Sya…ecű„”íĄíœ 0]G `“ěKěŮş2ɄínÉw$Ä6›‘;DoвkZüo€ŞH˛Ţ‰“5pLŰgýâ › XzAŻÉúźAHŃÂşŚaá-Ě^>!D௄ţĐ%‡xĆĐ€X‘*Br^äDŠ“kq]Bş#Ş%N…‚4&‘9§˝#h’Ż MRÉľ….2rĺúcχŠ'Îsüň7O¤p‰ƒ ´E ;=ęgŞĎ÷“)]Ŝ[GJźT šý óó47g?ŘĄâČ08Ĺ8şÚQĐj"‹&k¸déŤr}gyy™˙âŮ"ü‡Ýy]c‚§ťܰ5şíÜ(şżČ}ž`áá᱕PD`łFĚ o÷X5ÖCóđ(BQŔc֕pł_´śÍ#pţސáጿDŰŽá7Ślí Ł kxYkA˜{)‰˘Gź†6ĎąÍčźź8@)ášLăă$^#ŹŢ&N2DrĐZŃMQÓ1ŢĽ.\44É"°Ş˘ô‡S˘^ýű|ŒÂÝř%bď_í“čf u ÖŤCĐĺűúĽ ’V}ĽÎJĐśZsużÝöŰ ÇWnŞ4{=ŐŹ‡vęđ;ń,“†%ĎýI1§“ćjó_o˘Uqúƒ\ŮAŁ~mŢ+Oý=Ž3˝ě.´:šd\NâiłÇŮŇ`¤Ăţ ŐałˆV˙4Ô-փE˝íąčÉőŒÝßĹíBäËîYKßUZżÜ¨!ńŐm÷ËƔžYů%˝‡‡‡‡‡ÇšáŽĎ>I7Ţň= Œ\´Łü|MÄ^+²őHVŞUŠ2ZcĎ8ق÷ŠŚů;“ˇ“źů=ąĎ⚕…esߢI§D+‹ËÔXZ6÷5Y&‘ŐD†Šcˆ–6źHV,mIŹüń(ż‘= K ľö\c,Y9“ëĹiůuŁő×m=x‚Ĺ& Ďaâ&ĐílB¤#˛>Ž=UČ5úœ&aĺ á0Œ#?ëĹÂŚŠ]ŔŠbA“tşöZëúo ŘJÂ\âO`CzÔŞŐÜ /u¸*DĄĽI"ęÄ%xéC—SŇÄĂ“;Ďş-rä‹ä{¨ŇĎ/(ULé`$DqŮůLsĘĎbF7˛F~@Ďďćá˘C§´\M3ȅf@‡÷ˆłgĎrLf!U@+ťŇĘĺ ťœ‡‚\ÂłČ3r 2rN÷7ůgRҗň˘#DˆD.ŠB?ß^Č)„ăÎ:n{kˆE<<<<ś Üq¸á×ÄJAяÔéáąV ?aíő–ő^ÖǃEşă;XłÍâ~ۤS"ŠăíŰŻ]Š{4ĄA°2łőv5Ću[ƒóNĚ=í,DČŕ "dbr,łÜ‹ą˛€Ü°FÖNeSŹúY\Üçř–N™"ýěĘÉĹsîM ÂMÔ‹LČÝÎw2Ił‹lťZtö‹ő#eš@>đäšďO‚…Ý´b=Š-ŃŕeŠ39=Č+­B!ěôӑűáąĐ:AœXšťŽę:9T¤r•őB:b=\E“í UŁ‹ eő“ýyCŢŚ]—ë-;FŤĂAJRčœEöë<§(A.›dŢ z%˙Ěĺ{œ13şÜ8߂|*p§‘=<<<<<<Ö=o׍˝ě· s,K#Ě)Ç 1 çjľÖ!Oö"U2˙DĘs…›W?TŕŃdl”eŒf[v⇴Š-‡ŇšQÁX)vŹids@™ú…´-:ߍg‡qfž„/Ň١V˙ŢôęďĹy­HëŹfłÁĘP­Ó(Ě'ŽRŮŕ~Q…qĘŹRÔşËm§$ŒLyş‘ˆă|9}Ď×J Ńé úW7cüé”Ľü…vŻoÜ5­tă‘RzK l)JI_Ŕ“ŻbƒK(|šţuÜ sŇFaX29ëÎR‚EFtŃý9#Ńd÷hô" [RE˛Ž ˛ëÝ2¸(ŇĄőƒ‚tŹMBJľ?Ň3ëőzxxxxxxd˜]˜§nţ.…Ő2 "ť°ŕŻ5Ř{Čeö\1:9Aă;&yŢÁÄ x°ˆđ‰Ěú¤mĂ“ŤŃ[Ô­tĽAK3óLĐ(aăš9ß\ŠSłŢ ¨b†ÝäŔ„9@ś@° &ËÔtăóŮéj7śBë$-¸ IýáÉBě“ Cg€OPJÖC1ĺâŠAřdž/ěBr§á"#_”rĎQ?šN{ß Ř÷YťdíÜh“„őRRţÂŤ„´3ˆ.ŁŁU~–L6 ó¤ ]6)ŸĚyiBx<‘88/ސäááąU‘y_~ťýöŰéCú˝ň•Ż¤ëŻż>wî]ďz]rÉ%ôO˙é?Ľű￟~÷w—xŕ/1'_|ńĹô–ˇź…Žťî:ž70ŽŢpĂ ôŰżýŰ|?Ž›œœ¤kŻ˝–ŢńŽwЁřřoýÖo1ąí×ý×iŁpď˝÷Ňťßýn./€9óȑ#ôó?˙óôŹg=k`7öÝpă7ŇWžňzó›ßLW]umUźímoŁń/ţ˝đ…/,\ƒxxŹ7ÎW˙joŸI-CmćwGË%˛ŽĆ8^Ť Tî˘úA‰Ă‹.ç^°4j4b䍅ĽĺžeŘ\íšŰ"\ŒMdČ%ßćE^W 晟+ƒ?úťŐ'dƒIWBb˛&Ť2Ąl¸ş$ßH‡Ë bVÓŞ mV›×ęđ°c–KäÚőBžoôžnřń˘?ŠËfwͳȑąŰ7ş‘YőoŃĺ´#›fZ—8ÓKy]|á>hîz=Ó[Y"‹{M—÷YďśÇR:ő˝Ň땧;ęßqŹé‘ŇŤžGááááááąÎĐsľl ^1vÄłół”Ë™­1š>˛3™ \ŤRul”FŚ&¨ĺröŒqěŽŇěŃLր ^ „IŮžUę\łDٚPËďlƒläná\`ËŐVëÖHůŘ ŕqŻ•ľ {ó‡ü(H6˘=DPfrE%^Ůť#žŽ”]ŃŽ‡iŰÁ,6,Ů Ćë^c¸xŁ˝@/âĺ¸ËŽ–ßbŕƒxĆĐiK¸1të€>: ‰\ë’E4YA‡‹Ŕw!aIC\Ąg†ĽLІœ×Fzń’€ó”K{O`’đ8.ž.$"„ü€úkňŠ&ˆČ5r 9”Ë™ć†&҆Ô[?űŒl‘oĂP BŇöŔĚĚ ˙•žRLšÍŁ65Đśšŕ!ťuŮp\Č*Rg\'†%y&řP Ň_vďŢÍá@äŮj’ObU^Ý7ĽM¤ŽrÄ xŤąBźTŕáŁ]ĺíŃĺ€W o\ňđđđč xُňʧ˜ĎüűyĎ{]qĹĺôîwż‡I ‡äă˜WŽš˜öíŰË×bĚýŸ˙ó}ěa‹lţ/&îaÇ\kçĎ MLŒ§ó[łŮ2kĄĹtžçPVEc8悃ĐSŒ\vŮĽtÓM7ŃmˇÝFź2!„Ô9L–Ěqđ~¤çœCyP¤‡óEąŸQŽůůš4üŽ_\\âxí–ĐZĺ2ŰűϞ1×Uy0I~¨;€r ~˜ŤŃNłłłl …A`COŁIŁ,ŹfîŸĺśÂZQ<”éň☤ĺúäÄyxliţ…8śöő™%Đ6&WvO ťËlÜľČd ŹÓe`̃\„qV]¸F ý]d1Y§ƒ13ve íÓüš|p.=WdĄAŠ˝QAëžÝŤżšßMŤđ‹9Ä&Bâô34Gp…ŰŹSľ6Ź˘0Č}ĎöЇéŮR,Ţ2­_Î5Šä_îŽř­‹Ź Üueß;ckĆôž"ƒxŃ9M Č?§bravo˛!„ ÎX­^ełX›K§îmŐIސą=Ö;)ĺd2ĹŁ¸QťĹó4˜ łNm4›Š÷ŐfťÎk×F˝L;wíŁGӍ`ƒ<ˇ }ÜŔ••Kt„Ŕ!÷٘ăÄc?G*nŤ˘?ë=îw<<<<<<<†€]&Z2@čđžřýoQŮč!›őFţzĚí%cĂ)ÂČĆUŁóŤMăÂb‚\atKu#'4-É!%:€‹`˝OD‰źŽc i„•ŚďŁÝ—^HËggéń[î˘vCmôJŠ!ő$…Ž7,-` %Ä .G˛Q;Nę¤îczq ;yĆÔĄă ĄM’%~Éu|¤lŇېę ›čdP´k‚EŃb]\V´$„T =‘Aˆ büĐÂĄfpĺŁĂy’ É:D†ýa\š !„ ‰\Dń‰OҝwŢÉkő^ä…/|žďëôď|‡>öąą×"ŒűŻ}íkéGôuL$čĚ-łłsœ÷DB,XX˜7y}ŠĂš`NÁ\đş×˝Ž^ńŠa˘Hů— [o˝•Ë~đŕA>˙â_—Kťn„ŞŻ~őkô§ú§ô+żň+źłîŽťîĄżúŤż˘Gy„‰†§‚°%żúŤżBOúÓčŸü“_Ⰿ>ú(×a:Μ9M˙ř'¸îhżK/˝”ŢţöˇóßVŤAżôKżL˙čý#zĺ+_Îů~ţó_ ď}÷űôÓ?ó“Ç4ýÜĎý<˝óďdĎ"=öíۡ~ę§ŢĆůDQ›î¸ăNúČG>J?üá˝LÔxËOü¤ő†ĺáqžtÝzIýĐË\"Â?o‰CťnŚÄ˜oˇ X÷â}†˛E‡%Đ‹9˛5Ööđ.yŔ]);q۲!BÚmŹĹ‡3nŽÖ˜d‘*WkŰš4ôş˛A÷ ­‘t0‰ápű)ˆk–š;NŤőŹŻÝ韇ÝÁÇ[äe4} Yoą+7Š œ)—Ş•ƒĄŞ&Ćgž'kdóĂ($ŰvÇXŸ´†5ÜŽˇĄ÷ÜB{ýşœĚP>Lž˝Čƒ˘h rß č>ě&Ąsů˘hŻ îńźG†Ž;ĄR;##ľcsŒ +ŘÁić$K¨ŽŠŮl'są'ÖššyóˇÎŢâĘfŽ:xđY??…öďߟn˘ęšń§âçÔkŢęuź;i)Nć€Î÷ßÝpT”ˇÖYöÓ§ BôńđđđđđđɌށcźëą‡8üGÁ‚’y¸dljUŁ3v˛ŠQsm‰–g–iyq™‰íf‹ĂgÄ ů“É í„p‘ŹĄ¨R˘ňh•Ś즑‰1:y×´2ˇ#W€řQ­MŐŽĐUz-Jô–ˇDÔĺëŰQJţH mKţ°žĹ‚$$H”ŽwtŤ1qV씡]‹€ TĚąv˛‰&!XHÁ9íɕś <ÁbAó™ĎĐSžr˝éMヌžűÝď29˘ˆ`yâ‡?źçŚ٤ýęWżĘD€'N˛7‹ˇžő­œ&Îá _0×\DW_}5ç}ó͡Đ/˙ň/3ŃĐ1.żü˛t݁tżöľčĂţ0ýâ/ţ"]wÝľěŠăýŻ˙Ĺůţ›óoŘăˆ đśǙsË-ˇĐ?űg˙Œ=k`.Ĺ5¨űżúWďâöúëżţúĂ?üCúż˙ďß2sZ˙á((żôKżÄdŃżř‹÷ÓG?ú1şćškŘłŐ_ýŐ_s;ýĆoüĎçü›%w‹<<6%‚n*Á‘*  (bzr¸Ňˇ;icG-šDÖńvÜľŢu„ŘÝ3ŸӋE꽂eĄöPk~$5::BăŁçĆf¨Ă,¨ž•Żw—‚Ä=ÎuĹů#YD֞b¤”˛."żNCášô´ąvÄvW}ł•ŰPŇihľşŞfކ§ŞÔErIˇ÷$ë‹BŸˆr˝턷şD-ęôVŃŠˆÖ°ş^†X›Îš~¨yü­cLëN˛„fŻÉçYT׎„ ]§ĎŘÝ~A˘°YĽĎ#,‡xĺPˇ#”Ő–Ď-‡*őCď0"YÚŠ>,fE;wÖó„݈ł˛E“ך6Tˆ{pžĂí-.1Ądťƒ‡. ‹/ź*UśvÄĚ hkěOҔ­(*8—ßФĄÉٟɿzô™ [|¤Ż}ďţĺŚŐ™gg“v̏Ť™.T•ĆĂĂĂĂĂĂcU°2ŁK¨}řäQZŽą9z„EëHř‡DŸűÜç8œÉ#|8U\Â=óĽ—^’”7fŇÄý÷ßĎË˝{÷ąbĄéíÝť7-˞={xžąmdç֝;w¤i# C‰˙Ŕý\w”ŤÁBÚŐz ą† ńńŃԛČ(?ŽIž‡ôóŸÇڇ•Ńť Ú˝Vžâ‡}9DpY’qÔ÷ž­ e8ă$ŻyÄ7$ólt•‹Ŕ†śDNĄ\čú–4°,ƙ —m÷]w#'ôŽtçôj‹w$¸!H[péëâę´řš šbę°ĺl~Iy%LŚ‹|߇œN4 YRWDÖK‘ăááṁqrrrŠIƒx÷šýöŰ؛ĂĎýÜĎńoŒŤäߘ/>űŮϲ‹ĽĽĽ%Š„œ:uš>ţńOБ#GčĹ/~1íÚľ“zčaöŽ!낧<ĺ)tÉ%—škOŇÝwßMŸüä§žűÜçtŒ÷ť511Îťä€ÝťwŃUW]ĹäŹćá}!Bţá?ü9&H /Ě?˜ÖŕásĚącÇčiOťŠçẆđ&aŰ)`ďMŻzŐ+éÁ˘~đƒLX8|ř×s+ÂrH›‚0ˆűłşÇ9E=Č˜ˇćççRE<ˆ¸yN: (ťĹY?`Žc%ůRv?4IE“W¤şnrÔEÚÖ%ŕ7vD[O ůžíIŰyĺSŽƒC;ˎøěŘq& dÇx/}⟠kŻ˝–CoXĹ_Ě!Šŕä‚ןćŐtĎ=wŃżôy:rɅ<—ó§-Šę8YˆCé[ŻŻ¤÷///ѧ?ý)[sńOü᳐=näöŰď ˇżýďó5¨Ëłžő,zĹ+^AżűťżGň'ďŁýŻ˙ňşá†xl†‡ç?˙ôÚמĆĚľ”Ě'F} łű÷ďŁWžň•ôńtÇwЋ^ô˘$ż(-‹L' źńo`bÂwżű&6<őŠWŇÍ7ßÂ׀ЀđŠńˇűˇ<źęUŻâkŠźaÇß_ýŐ_Ńg>󙔤˘Á[Ţň|ýë^÷:oň;żó;Ź`–›,Ěůwźăô|€ţŕţ€•Íťw聯źä%\§Gy$Íç / _úĽ_˘ßüÍߤ?ýÓ?Ł_ř…_ ŸţéŸć2ţÎďü?ě é˘üé(ˇ>:pŕ˝á o Oú3ôž÷ź'=ö‹żř Lˆ@ůň'Ҥ˙§ôťżűťtŃEŃčŘ(UŞ•” bËíÎÍöůÁŤČ[ßú&¨€ ‚šĎ><śěsźűhƒ>sű }˙‘&Í/7haŮ덀ZLš°ŽĺƒkšˆÜ8Ů! ťIů˝‹Ĺ…CŹŇĆŤˆ7+Lł. hźĐÔh‰ŽŘWĄ—_YŁë.Ťšceę?ÎŻđŰÇ̕űŐlT+˘łő ˝ 4‰ hž/ˆĽŔ’bô˝"ŔĐ&ëaʁËĺJáÚˇ"Ţ,tťéşęg @Ąŕz…ŮŞŠ?aoďzםxĚwńď˙ýżO×_|1ýç˙üŰŠˇěŠŞŐŞŹ¸3‚€ąôşëŽŁg<ăiX Œ§8†Đ `źţßřBbĆů—žôĽ|?ÂY oŕ~äG~„CvŕŢ7źáőtýő×ńy¤oE$)~űˇ˙SÎťEŠT6őœH‰—\r1ýËůĎك’5ô˛× ´ځöqřŮ%˛9{GFjôźç=—‰đt\yĺô_˙ëďą)|žýěg3 9PŻ{Ž?ÎĘlŕżţ×˙šŢ ˙ŤŻ~߃]…˜ŽP/3d{öłŸEżů›˙Žë^Ťpş˜Űڧ§¸íßűŢ÷˛W&Úüˇ~ëˇŘ“ň}ÖłžI§‚ú˘-÷ěŮkŇ|&G<63 „Fôˇ7-ŃžcÖN ĆŔfŒ,Ad 0ćŕ["“ck@ň]Č!˙śRj˛žb’EŰş˘äßf„~†ăćÓnFToľĄEŸmŇMŻĐ­O­Ń/žlŠŚF’ĐA‰Qp+ męW `äÄ/­ŮnŔZWšĽÄ›EœÉu ‹áŘc6\Ţ !Ą\Hš0Ôľ‡ƒŠóŞŐ ­4[´žpšepî/3ÄÔÓď}źyß!×řXLśPg׊ƒM1ŽĘ6đ3„>ĄZF{ľ]Ł˝FLâz",Ůç]]ź[K‘JľNĂćäšU”žŇŞÍfŰ ďQâáŇz)˛;Ô%(=ťĹů!t ŢO“íSçZCvm^“„ż+ e’ÚÓ#…:°8JĎrš5łţ\^š§ĹĽ:}ę áX =vœfÎÎP՜ßeÖz9B/¸„ŚwLsB_ÁŘ^6!ł•ŘĹsŘ[Ů>(­‹Łó?ľrbť3wmAüLŠÖ<şž˙}H>śˆŇ_z%֘¤ë­Œ8Ńď>Ż‡‡‡‡‡‡ÇđŇ˙äw@GO ňh…jŁěa^DSq.°!>xOfí`%öč`l[Řü’Ź—Â’ŃO98,‡ÔXZśśźjHŐÉQš8°‡ZFćX™]`˘c_L7$rƒ^ÓPĎËă1DŽÉšăq~}ލŃí EQ3JËĘ˝8 /°wÂóe)ě°Ń’žvÁ,6ĐéQ|iCą5ŮBíą@ ú’§xąˆRažR…žx˛€ä-‚œ¤YT…šŘ!e—<]ăżüĹ58ŻÉڀ.çľ!Ţ’ôőBňë5šA‡ţ´¤îzŕ‘4Ý2JťHÚŽ7!Hôŕ$í*ßuŰÉ1íCH$âńÁ%EH}4IBˇqßç9 huŸ™î'Ťň‡2Ţ*྆/Ôö-ľ„l’‡´+‚ˆŰ>ňWÚ\źnôň’‚sČÓm/'  pŧđz ŮŢ#zc(<#ŕă恝sxfčŒÝ:_D8ć'|úéô+Ż%ěáO7€ŕ ˇHë‚ l~ düţď˙w.÷ßřFž_úó*t{0ĎíŢ˝‹?EqŁWŰ]xᅹßhw„ŃéťőuďńŘl@Čś6ýń×飡,ÓěJ“Ý3ŚjöŘŽăě**HöF^§fdÖĂĽjâZŢŹ­Ůşą+Jö*ĎÄŽż˘F?ň”zúá*í™ 2üŁgZtëc úü]+tĎąY úČ-+ôŔ˘÷ü_ÓT+•‹lz›™§šmKš´!öëUrU`Ýt&ç]yPń˄ŮE§Ř07ź—N‹ňĂD_™ë\Ž)]ŸMfČL/5˙ę{°aBˆŠŤ>`CvB\…§ŠďÔ ů=IOľąUpJƒź|+Y ÜH™¸ZI΅IŠśÄ`ź!ÄȜżŽNˇHé›ýîç…@ÂQeaŠş•QtWŮ&)ë=. l–p;IwÜ~;ű˜zţóŸĎşčJ^4:–ó\[6ëÄR˘3qu$ü=Έ‚ź¨îĺ•-ˆdűąčӜ;yΊ×ě% ëđŰnťžűÜçŽĘCŇ (%|Ś8)Ô!Wď ŰtEÎs-ڄU\żNmŢqǡyŘš$čA ’śăŢ:¸^ýŐĂĂĂĂĂĂc}pôôqŞŒTŠł–3küÚÔ(LMĐŠcQ/°Î ƒŽâu~Íc×v-w%‚Nćo*ˇ“2‚y…ŃNźý'ë^ça-[NÖ˛‘őފӐ™túŘÜ‚<šČ`1ĺÉŰž`ą‰€Ž!Ľ_gŻ BJЂ•&3ˆ‘+‰ťš_ďú—k´ą]v=écBĐ$Qäi€1„¤!yjŜ& čAメzIşŽg ń† ëŻŻ×D!hďrż”yę0ş]ty%OŽ&­č6/’žÜAMÚLht8ÉOˇQ\OŽŔˆs :€řŁ 2E„ףĆ0Ŕő¨Ü[b/ň’> ŕ7Ň^^^ΑD`ĐÓ¤üĹ=HK(Ą\'N˛G77¤îz‚Ĺ$eľNˇ­Ň^/7ÄłŒŽł~&]óčf˜pŽÉt}B´(Cě\oż‹žŽ¸ď•Oß+FőDĐńýëßű6…•ľĚŞÂdƒ‹ ŢÔMV6nE-j€`aÖ"Â5ˆ9DçčÔľŒŽ'2JŠĘhÍŹőCÚ}äĹćXsa9ŮX#,Ňb[Uwy¸sŁq‘˝+='ě(#nɂ&Vi’ó]ÖŤb‡e[œYś+/‘Cô… Őí†%÷t’™ˇĎşĆ,6%Xč—H ĂGčK“1 ‹’­Č :/€;"„ő}RšF´RĎ%HĽ^" iˆä%„!Hľ ]^íeBň–ű4)׈ÁŢ­‡äŻ˝DHŮJĘMޤ݅VšV9v=eBŸ„Á˛ękכƒ]´w —¨˘‰ p.éhR‹.o~gEď~¨ <(oxŹŔné'źĄŕEšŘ!y˘/€äón›Č3€"VŇ"‰´“äŻű˝î[šd„|ôsÔmčáááááą`~BȐ˙ň_~‡<ß˝,Q`ßĹ ŮąsŽ18š˘;i"˙> ˇƒť‚.÷=ç˜âž$‹Ž÷و¨Ÿ¸×@ö ¨Ţh&,z=!ë-BvlßŌ\1 rJŃ:‰0őN#á(ÖŰU–ąqđkSs8‘‚…zĚ#ůš3ĆzŮ<”é,âT÷R„(ŸQB˘ďN9ô€š™ö „ aĽx֗ŰífJjľÚź ĄîŽ;J=öX˘‹˛ŢEĄGŠŐĚ_xžŰ?E—^´=hčMT?t,ÝđłQ}*’z ÍP—ś­dŰKZ(Q‡7"¸F‰nĆ÷ýÜÝ]Ÿé5ůጥçŔ¨0ż,ÍŹfó^TPΘhŰK=VŒ;Řŕ&›ńŽ2ş\xiÄX…–۲†¸ď‘‡¨|Ą+keË˛Í ĄđĘĆöšR§–3cČmëęŞ2QŁŃÝS4wôđfďdS#4şs’NÝý‡ßÔÉö#RH!c’ßaBöŒű’,: edQůŇuÍ>n“2Řn‹°Č)ĄœlhŮ 'vFM[@ ݆KO°ŘdÄuŤ\Öš|׆x1΋áÚ%1‘´7ýréPÚc‚¸r šv't‰$LGĚÄ ŤFů\˜52ť^Œ­“ňĐ(K[U"zĹUôÎë&čŕtŠ@ż/.Í$;ٟw¤F˙ü•!ý—Ď6čáÓ-úÄm‹ôź‹*ôÚgŒ)‹MzĂŚAÄ-bÃ-^oWCC@Őîă ůŁe‘ @x…ş=G…F¤~4EîÁ:\Ö5:6’z´ëYťBÓŕčG>`ý˜ýFkďÇ˝Ż… ŚsdĂ0H˙Ś ”§›Tâ"Vçđˇiň…×—Vł 'Z˜&’Š’uďääęžerŻ18(­Ř÷Źf;Ůâ0}‡Ý{1 ŻŠv‹`5}§ČS‰Ť[ȧßÍp_œ†&Y€”ƒŒƒ†ŐH´Q}˜űZň‰pFŠßl5ŠQĎB !XF sM‹}ěQš9;Ăd RŠlĆó„H1RĽK/˝ˆĆxL™űt),q=3ŞÁ••lÚQ›‰¨ÓFmćÝ(A˙c~5ƒˆÉŽ##Ě˙LsC%cfţ uNŽnŽ74QÂ=¤k7Š7űdáeôšÎ~'뜸GY<ÁÂ#čiżóďĐç>÷9şďžú ÂWžîuŻŁ—źä%썱_?żýöŰé?ţÇ˙ČĄ'˙ř˙˜<<<<ś2šmśV8qö íž|'U;Â,+Ţ3q_(‘°kó_\Q2ÇŤŁ5ŞMŒq0ąÉNŢGÍĺeš?~:[Ÿ (3¤6żX•;(ž† ÎťÇőRÖŞ„‚B¨=`˙‹’u ţĽvbVc™äđ(”-R…äçíŸŰ Ţę¸Éŕ†ˆ(‚~aÜĐ€& hD‘ÇŔuY¨ÓÖä"Cę&6Q¸É}blÇGBEˆ@ŠIb€wj݄˘0ژôä¸KžĐá0´× }_7"„.— ˆĄC[¸÷ dnušĺˇ&N¸„—d!ĐEdƒ""‰NS_‡g‹]qłłłœŚ„ŃÄ )ŸnšĐ^4ôwšF{#)"ƒHňŹ„`ăÖe˜œœĚy&é%`ťýf#TMcü¸ĺŃ:Ý{ ^*b%Ü‘ľĽjgÄţ(`;Żi(Y+&6¸7čŇ}#ôŁĎš¤ wɲ/Ă=Ęjzޑý_ϧ÷|ńŒ)ѧo[Ą—_9NľÁ6ş­kŰyP~§'||J[t ×}陬Osj  ”îtçŁÉZ ŹŃń2XŁŃ´ ŸÂ ‚ěŻěbQ°Äę( ›0,&ĆĆilt´ç5݌Ä9ĺKv:ƒÁ{Ď0×vM#•äłśţ;tţké×qÖk6\YŤHŃś*yl¨F*Îł ‘ôuűœ ŽąőZQŠ–ŮřőÔŘ["˘ŽëżŮźÓ•Đ)]Ü㾍Ćę ¸ƒŤ×ƒöěYY’c™˘WůíšîyÉFDtoaŇg8[ őˆ•†ě<…„lŞŻÔÍ8żŒšű*vAb|ž_˜§“'N˛ńŽ/ĐąÔjUÚ9=Aě5ó:H™ž%HÂ6•œ°łyj˛¤Ť?¤ßS.;oŇYb"ÇääD_ý'…ýŘŇ UJޏU¨ZB]¨†_äßb†ĽňjĄ§‚ńŚHgč~/$PŒ[Ůą˜Úąň`ÇĹomn.)î_ů˛EN^rŽ×şÁăɊz˝A7Üđuúó?˙sÖˇ?ĺ)Oĺ~/5˙ýż˙˙óć7ż‰ş†ŔJ8ŸŢ`űčăĂna­6Ď:ÄĂĂĂŁ§gĎŇÁ‘UE č՚Z#"FĆVV–/0k›ą]ÓT1kŻČ(VrĄ3v_z!żí‡6Œˆ–Á@\°Ža")‰í,ł˛Ě×gjQ‚DŁDžö֎ű˘ŹBvăÁŠ+ŠJIČ9J2íěşBŮ~Á,6Đá üôR^iD‘ŃX‡ ҄ö¸ ž+Äđ/ č oIOď„Ňż9Žř" ŃBÎi#ż„“Đ.fĄ”IÂJyŔ U"ůK™%ýׂuťčżúź{o7ť>'Ÿn„i7÷˜ †ű)Ýź„źawC”:„C´ĄuýXO‰Ž Çqa9t…X 7"dä)Ď ĎVúô3ä+ýLB†rŻe„Sـ­ţŻč\ŁňŃ@vƒˆ1&1Ü$ŢN\Ů ¤ ŹÁľĚĽ=%f2Vš˛ß69Giȃ˜Ă„Ä}Ă&at´F#Łľk܉8î4rĹÎßs‰XY´VÓĂş•9XĹ=Ăĺ;\*çB6ˆ|PCy×űƒŢi[䍜F+Qők}ˆ˛ĺRoĽaç{׊[aY”šT ´ŇlP\ üŸÜrjžŹe2ęB4ěĐC'c_á˘WtŻ—M:ŹŤ2ŕ%"]U2˘€×4}`ff†fˇ}coŰ\ń¸<3sÖčefýHĚ$ (Ęĺ>ź“Fŕš´Zĺź]C؃ĐPr6oĺ[$HťŁčT0Ď Ôán˝őtËí0ŃăůĎy*]xááî$ čĄć(şëŞLMQëň‹)1óY2SIť… &5-QĆîČĚżÓÝ\‚"2‰†¨cä{YÖgä}§ź•${óz]7Ű|9´>ŒÎĎdčąiqúÔúčG>FŐĘ˝ő-oĄWžň•Ź˝ńĆoŇ˙ů? O}ňÓôş×ţ¨YŸ°n÷Ţ{SgĎňxrŕŔşřâ#466j'Pý!ťqďžűîŁ'Nđď˝{÷Ňĺ—_Îáŕ:}ůË_fâƕW>…yäöšqÉ%—d…ăd|‡őđđŘ|‘)jśl˜Í’Ձ°­2Âkś~'#‘“Łv¤6¸xz1aɨihlzœ‚VFÍXšđČ˝7 ×'EDÎô\Wňh˛’ˆťŻ:ňRdPšŽŸü§e{%~âŒ~Ű4cąŰ–’zDýÂDnUx‚Ĺ&4ýšP  ĆúĎEžĄÉ’§6Nkb†¤+lńX ů­ŐÚť€s­„]ŻcůÂč.$! Ŕ(w….™DŇH:.9Áőî!J ×cŻÁL'3œw挭#ącąŐk„ĘsęéS§čěĚYî+uc¤DNŸ>E­ŚőDQŽ”8œG5!RěŘ1F{÷Mj=Qo ĚŤ­Eˇ’Ő)és}ĆÜŽçěińŽqd îwßsýíGżH<>OW\~):töíŰĂa]‹€3z¨ú™Ó´;ÄfHěŒ,wř‚Łîzł]¨OŁ>u-ŽsZŤ;qŞđ(q莡Č^Ćö\zˆ¨U§…“g}Ź5°ŹÖô`Ď%eš"ó‹–^ăŽulşůČ‚ŐnAčDóř oFQ˛.ś ‹m O°Řd`&{š÷cŃá#ŠXך@Ą ýÚ+&>h҅é…Ŕ eŃ÷‹\ ç:]ž"Ob0—PZ‘gcCśR˛obźÇő(‹&-¸wŔpØč6rëÔOIč*?仛V)ĽˆČŕ*3坐GŠĘŠĄŸŠ~ƒŽ¤!Ď´žě|ĐBvQ4°ŘĆŽ Ä/ňüeœĆCźRčrQ‚U*TëĽD÷/MÖq˨ëÚ ú<„uQhčüzľoŃóöđđđđđđđX/œ]ŠéřÜę ąÚžshŒˆvU鲽5Z+žwј„OQ˝ŃC'VĚzhbkʇ äˆ°öÝŽk7ëĆÝŽsŁäÖâ‰C( ůäh(Ŕ‹—Íy˘DњWvšŔˆĆâČş§cc#lLś´ČžăLm3ěZ|S<ޤýĘí$*BÔÍýťŁdŠăâŞĹ=”QęćÎ †3DŤ™ &ěœîĽ‰Š˜'CpâĚč̇V›Z›U2Xó.÷Ocđ­UÄ#6’„ňľ+ƒj=ŒXŠ­â1Nňo’ÇůKšč~MĐńœ‹ŒűöŮ[Łťě-Ç›_ĘdƒĚDFç2GgϞäqśR-Qm¤JíŚ {x-§PÄcE(éęK]Ęę’ć‚°{X€€şżť6™ 5,0Á˘=x_…Žďűß˙ÝyĎQŽĎÉSgčÄÉůž$ĘÄÍ_|‚;ŠZ)ĽJěĚ|`Š+őfGm‚‚]œń: œQT”ŽöVĄ ąęRŞŸčÁ*Češ|‘ĽGDĘăTšZꙂ?yœ/h}ţŠS§ř÷ÔÔ$íÜšƒě$CLĐzůË_–Ţó­o~‡>öąŃÁƒégögéôéÓLžřčG?JGŽÉĽtAÚřëżţkŢÄöśˇ˝óřä'?Ió7Ă^,.žřâTŻ OÂŻxĹ+L:“‡‡‡Çf‡^.ěŰ˝7%”Ú#Y÷ĺ׆qşš!j[ů–×j d$Ÿ2ź¸C–6ö0|ŻNÖhevž˝o–ĄËúŤ/ÉB­1˛%ƒ.’k î/ ‚Ę­Šl2 $ݝ܇zśá4Ďm´xń‹Mˆ~ 1Zk’ë)A^íeAB-h€|ÇGÂ1ȂHŕ’oŃ WTAы…cđXkâ9F~|ŕ9att”ÉbÔâ„|/2ČKý5Ą¤hg&mčśq‰,šĺŽöšŹ!;ÄÜç óŇíÔ­ÄK„”Í=§˙ę<ő_šíŠC‰¸çuYp-ä ¸ í%ÔWÚS5pĎEť˝Ô}DźŁHžÚ;…~qcÜäÝĽŽžč‡ä˜Ű~xA‘çÚ+žg/ł‡‡‡ÇVvŔç•W^™†Lqî†n`ĹÇZÇź3gÎ$Jœ)ŤżöľŻńN–ՐŐp-܉bţyęSŸJë¸<…+Óç>÷š]Đ.@0DťíßżŸDŘšƒ]9““vW?ć?¤u KßţöwŒ‚ę ŸC~ű÷ď3J§+Ěőv}7Ź=ôPÚ&{ö쥧?ýé|?ć_¤uíľ×Ňzs)âíbçž9ž#ßőÚI„°awÜqˇĐí9َŢzkú\QçaúÝɓ'Yéwá…r~ôŃGˇün¨ĺŃüĘęĽJ}gě 36ěÝĽ5 ě­ Ř;ľŁžo’67mśRœX¸ńF§ČümmS‚…­cb¨3φâäYÇ0Ň&$‹Dn°ĄůŞ A˝DĽ2ÖŔňšťöí0vwK;u}:|Ÿƒ‹jϝ0] E×ŇfBÜ˙˝Hw+gŕvw. \˝]vŚkqĎz Ď;ş%4:uüG:ƒ5IÇŕcŘee7}ÔyŢdrPaaƒDGŻŽ!“ŘCŁŇ݈@6ŠhŮVżą\AŽhśLţĂ™ž\č÷Öu}™zÜëęQ¨0L‡AĹŠÇq×ˆICńŕţ˝_˘ŔĄbçÎi7ăešrŢ!ëTňkŤ€¤ďHyB§\Ab ĎĐąöíąţęů:Íş˛Rçp&ƒďÖoX BˇČkíăÇĚűńŹîYš˛Ž™ővůňK™lÂúčů’óBú€÷—ů%ŠÖz€ žiÚ{ťĚ1kSe7ŠnŹXý_¤sʕ)pü_¤Öó‰ŠÇ/';¤Y]i˙žüÝď~—e÷ç?˙ů,ťŸ=;Ărř—żüzâ‰'RĎ2˘ýáČÄÝźŕôÚמ–ĎÝ˙ýôŮĎ~–ĺ×ǧúá7żůÍÄĂĂĂcŤ HŚď‹]@Ě/RĽ;äbsGČŢqb“jC>nóń0ąwe Śű ¨mdŠÝW]A÷}íćâź Ö|Ťcçt‘ăĽ'ëťLŽŃšłq‰-ĐÎ?mťľ?:ŽŰ.âŤ`0-łÇ9ƒěŢďM€p är^~kƒ˛~É5ŃB ăÚÀ6^K¸ńXੵËYˇý Ý^rä˘Œ;věŕ<ĹŐ­xcĐ!F\‚#ĄËĄôÝČ)Žń_‡ф‹^Ą*\ĄI+şÎ.šBˆnšäťŰĆşĚEí(ç%DD:örŃłĄÂ.Ú[€H{éďrNúˆ âmDúˆä'Ę%š×i%“n ‘#ih‚Œ<é‡R–˘ö–xZŸ́rŽ&!<?~<ˇC ßxŕu1Ě`ހá^­%]ÜĹ ˆë¤Eîă?>T™°Ö@pŻ (’tĚiÔq• …ÜŤ>íiOŁK/˝Ô´˙"}ýë_§ššyn#¤;11AĎxĆ3č)Oy ž÷˝ďqů0÷˘-× (ç7ޘ–dNÖ3}<wćdJŽ9Âuv~ĹN|´Ö2XÓ@!¸ŐŠQS´–!YJÔJvQb“lyBcŒQ„˝ÄHG’ő,mâüÚv˜O‘ ­ŐˇĐn‘9üŒŰ5K˛Úi]ľÜ€ąknn–Çzź3řÝnÖárďVbĚąý5“˙°ś‡œP3ýłÔӀžŚ“ţ hý{pŇŢAď+â ł›vôc&Q™)Ó úýîÝ|Z†RńÝ׊Á[Däh‘ý“ç[ožÍF›ÚŃ!ŻąFĐZŐč-FkćŻ Ý ň'dc|dS†lÁ<Śőůç˜äÝlt”ö|‹Ľk‘‹‹ôŤIoŘţ>Ěő(NĐe—Ÿ-kąžĽč{ŃuöCIł:śJ˛…›ë*ečÝ*ćo@ě|,LŘa˘EňÁ˝ k„AŢ#hNäCĘvÓ­ fÍjú3B˜ KFŞđ.wě–Ç{ń´Ť.Łk_đÔϸ.píŽ]F/htƒĽŠi3yN-ź8Ą—–›ě ¤×ŘX¤_ÓĄvĺť&IéónÚş}ůš(]˘Ş}ň/´Gdź‹ózÄüÜkŸ#Ď!”kÝť™×[=ŮĄ7Ÿ8pGXŻ €sĐűß˙~z÷ťßÍň'ä+\Mř;11ÎrZŤŐLőî:}č0vAW÷0p/dX]ČÂ[ ˜MŸ{ő3iafŽ*ą•ąQĄ’ÁÍÜ$^Č Âb˝&6ˇDGŃŞ7ÓuR`äčŃŠ ŞĎÎłDŻç}MŤěľ^śk<ŤˆíЧťŽH6áPÔe]4Ŕ2yőŁťŢÄzˆżŘ7ĺˇţťŕ=Xl2ˆĄş `@YŚC{¸ě&mä !!$hҀx Ŕ9=¸ž™ b,/Šř@7ƒž[†ľůbÁ†6Á 0„€!Ć{rÄÍ[ę.Ä]>NE"@éóş=]b…&E¸ő—tń]ÚT”,n[ćŮĆq.W0ÖnEľçí)­“ëýCú€î#0ꠍĽM幋Ы‰)Rńl˘Ďé6b…čőőš #ż%$ŒÔM{ÍpűˇK°´ŠĂĆ(<<<<ś0îbG <`Ź„§‹+ޏ‚ÇĐ|=Ŕ“ź3¸ž°[ĺć›oć9ĆűkŽš†ÓŔ|Rćđg=ëYlXŢíˇßÎJäë{yîBşˇÜr “60Á ŇB™á•ç <Úˇo=űŮĎN˝MÜvŰm\ÜŁ= ˝{îžűnÎ÷ˆ;S¤÷Ío~“çžÝťw÷%źöjOxh¸č"ťkçŔ}Śn5m|]}őÓ9/ÄŤĹŽ™żýío÷Mm€úÂ8ƒB/yÉK¸>x uH›ÂC„(şŕℊřĂôźç=óQ;ŕ}⪍Žb’Ú J3x5ÁőP~?ó™Ď,TŽĄmďźóNž_‘—ĚŻXç ,wÝu˙Ćł˝ě˛Ë˜<‚{PVô•žđ…L¸@?€b.âçß˙ţ÷9]äz"=¤súáWžňž˙ř˝ęUŻb/#îó…—´+<ƒ ?#M2„ ƒ˛˘lâŐ}ĺDŰŕŮĂ#ž‘Ú}Jź _ĂP ;şäýA›ŕx?ƒAĹNŞ•€ęŤôŸl°``%eVCÔlƒG=ŚąŃ5ŹyLÂ'ć[,°ÖBężE­X›pEÖeş¤ÔŽdWÄöňJ(oQŽdĺbŹJx@ŒčÓŐję+őtMÜ Z†JżcwŮĐ h´Ú-&Z„á`Ď ĹƒpllԌšVÚgaN¤^y9–mcŃ ňŹ\ł–W$3îgf¸\×o¸Bj“/lWbźögžş$ҡ‡Cî iŃ×5 ˘ł@ÖÄF•˜ă*ď0 SöPw†U9Xô0˜ŰđÁ5˛9A?S+âhű(ˇdŢĐȞ}~̊c­Ë_Ťő<ö:­/˛d ŹA+ŐJ.í TdƂžěęěß°ëuýHĂ#_¨ĽĹe^O ’œčx^ůŠëŠ62ŽRĐ3Ży*]véĹŠ˛ÚĽ˜NNĎŇxy”&fFŠ=ż†gâą7‰ď˝´Ňâtńţđń ˜˜°[‹ňwuHý6I˙1Łe;HłŻîXŇmÔçRC‡Ç€@ŸÁ2Đ}÷ÝOŸůôßћßü,ď|úSŸ1ŸżŁąń1šœ˜fπ_ýęWyóä_ȓá!żCtű?އ,†klş˜Ž=Ęsňěĺ1ŘĂĂĂcs"ń$ $ëBşü˘#´đĽY ’ÍżmxcŕńPŻ#DÔ0c"ÖBđ‰u]Ŕžśˆ×"őĹ%j×,+4íĆ­vŁ™4ÇëťŢĽí-Śšk KîĽÔ;‡ž&HC™“‹óëŮŢk÷št-JΉ,{Žá › .öîÝËťťA“+\cź68ËG{08ˆáÇĹ(—&ˆwÍږ{´pQ$č 1AĘşZČK§‰`ÝBY9”0ڈÇŠŁ&1 M]#> ‰’GQ¨ MBşk˛…ű] í&!2Ęé…Nň„~vB€)jˇ"˛…Š÷÷‰ňQv/L´u" ý'huBV†ËJϟ[éĐžMştźN'ƒÇ.sůH9zöŚúÚó+NR?¤ĐŔ§Ó٘ň[ÄĄH;nĺʲůŒ™/FŽ&Čů ‰ďĆoôCŹPœ˜˜ä÷ýv5Ć ›[Ö:°ÂŐd.0ÉŠ Ş™÷ľŐ^%Łč4 ˇĐĎź58ŹÎáôšvŸăĎXäU=::,YB6q_‘ŤŸ>hŸEdúś#ôSYH‘-đ,D I‡ĘÎv,0(oÔč;g6|{Ŕ˙Gńę=ô0ÔgKăč ĺnslż7Áwúç#őÓýPę×óü!:ŕĚĚěŔă‘\˙ŹłvŇ{żçí%KF˝Ę€aţx{žîŻőŠOńƒ_ř…_ŕy „ţ›ož™HĘhč6ôGDď{ßűX߇žý|€ç5čp s@‡, 8Ӑ$UK˘>œťu-;NGĽ /ÜÍvŸƒÍŃéŒüâZľ^㴜ě74r`kšA­F‹"Čý K|N{@bŞĆj ‰ü'Ô<„BŁ“ż–/߈îĂ2 ŃĆ÷ą‹ué€0"k˘D– #ä)Jâ—C~‹ł_”{!aˆ“^§‚}Z9˛^6_I{čwĎYçć•  }ŔœĹjCĘqp(ˆ“];„  ďG_[ÚQGšĐ?UŠ[Pžn;żtd]&ęĺ>â•hŽíý箙^>ŰKŒ¨ú™ëű’•ř§€N—᡾]}Ľˆ'(çK˝Důԑ!MܐmŇNBÚ˘ʄłFĘňĘ2†o¸Đm eéëřýLÚŽ;ižňœ÷ˇ@6d\ô\"cľŹvŃ p,Œ' ŕ7Ű VÜzë­)‚…Œí’JĆě뎝.ŽČrœŰ G™ˆ(uq|‚…Œżˆ¤€:!ş EřŔ)RH `NRƒëŻ8ö8˘ ZH!¸żkŽy%–— kŃ8őϦ͛ˇ˜OĎwäšG>˘.pœŁŹŹšŰB˛ˆŇ&ú<‘íŹCšŐCúҗç=ĚUßő]ßĺ ňŮKÔ`ěÂźĂ×Ç?ţqŽ/އ(xN~=ežĆ9ňŹAjŔ÷‡h¨ÓK/ätW]u5ŽĎ;oi˙Ć9{Ě{V\&ž%R›€Ř mA Y\\ćăwíÚMŰśíŕ2p lP7!m˘>xŽxvč'HŸ‡řÜ܂“Y­ƒ\ sź–ŠP–ţ+šÎdȈ’ó} ¤ …P*Ń?EÖA9 Ťŕ~SĎĐ. °ë"J6ÖŒçŰŚĘtîć2í?ŃŚngmrr9,q˜ě09G{dź 7č‘éâ5v8ŘFŁÁŘč‹ßX Jhœ}Ľ]z–’G3ŇŒQ¤Ýč%“uĚvľ/V­źZ¤ƒţr’r\ĂB@ů‘ď|Ď+7‘űýŐŇEĘfJ a5tůNůŔČů.ŹóäĤkŰ/ç¨Z3cR9bŸM}2u@qúŠ Ď­˘ĘéęƒHě<}˘b TŚž’uIBŁĄý$niYŽ#ˇW'. ”ŻehăO7uaóSc9Ž ę˛ ¨_ů‡.­lWßu°0č~˘ŒˇGĎóęŔŽëÇmůľIđčsŰÖ93֏§ę× Ę)bůFdüm4˙`•ÚâŇ"G[‰MŽ9ś  ‚… Jβßtăłˆ} ŽlŃiRÝČc͌´ xďĺț#†5Š&uMŰş âđMÎ;YředˇUÖ8ť“PŒěČڞ&Űx,âŸÝ6˛ HŸ—Q(Gö×dHsRĺš„đƒąĂ'C–Yg9>Ďö‘>_•¤ÍJe†ňŃ_[ő…´§ ěúfd”˝ôÜŃCT› ćJHă<÷šŢÁŃ+ {fÇE݈’{ÓĎ@l„b“{Ě/3öu—Aš\#× ŁÄ.g›6ˆş,żźăR]‰z’z§.—ČÄĽŘiŃé´GDů+°PŽôšŽŁßřÍ˙H˙ăü&ÇŁ˙_÷ęWҏý؏ąábçYŰéCżúANvÚ÷~ďwÓw÷wó>ŕűŢ÷^&aÜ÷ĺ{č'˙Ůűéß˙ÂżŁżýŰżĺEŔo~— }¤óZ˝Âr'OŞÁHr!(P ŔÚÁÍŐÎŇÁzƖÉ ;4˙ Şo§Ú¤ńaU̜ۂ\ŃayŁÔ‚ýĹĚÉ MVUŰ͖ő˘Œr‰e˝ćRƒ:͈Ӻ-sÔŻ6UŒ´=żŇsÎÎň•ĆrĽ5œd"[GRzk””/6€^2\ž˙J˝NÉHVćëa1PÇŘ żsŞ’’w?ÁbąW¨l@;ţu ‹źÎŠ™Ö:ę…DH‚ü•ú„áh…˘<Ş—Â’*༁rŹŽg˝ĹéK˛Ň~ř„_Xę‹ci??Eˆě÷ŐŤ_äŮęçĄg+˛”?ąAęŤÉ Bdż@żœçpPéëË}ęëřŃ;43M˙ŐŠI$ ~ĂĐ+ƤŹ!â ÂqÉC˘d:j…Ô1ŤÝpŽÉŞ× xšCĎ9züĆü‰•űHϢČp˘Ë*\üń¸ütgMéë_˙:GršB;°5Äé Łpá/¨ę‰4ˆ* ¸$ć3űa|DÎ=p?_űڃd Ż!;Î᜗:‹8/eÚ†'´›-ˇ™¤}ăœÚeśĂů.ěGä‰Wźâ şď>›d˖M=•ܟŽr{–ů˛_Ř ‰@ĺˇ5Ú mƒ´oˆgƒëÁ`Ťc@Vpwʲ€ă$…Œx¸÷N§Ĺm+ň€ô?´ŽyńŗLNą1.+ɰ —DëŇ}ýD ‘ç˛Ňžŕ^ADÚ÷ŽWaá\ŹĐBŸ }Ję‡6@Ä ź?h¤ÁJ.\;~.ld,;G˛őrОíuş˙šŚQ:IhPÚ#ăd8žŘŚűž=Ooźl†śO ĄćŠËžp¤EŸüĆ v˘NWéŐçM$^Îľôkő@/]$ŤďwĐ˙ŒŐ œ‰Jťv­x8Ľßyç$äJş´4đXᗩ#Z'Đ mk›žš`ç!ŸŸÚĐpý>čKȨVÖż—ăoT×ęÚŻ}˘3i˘EęyóT`dˆl:œv‡ˇýŽ…Ó(˝(€Č čm5”Ń)Ski5ab ŹqϿIJVšŹĺąˆ(‡œ—eçčŐŘđşŁÔŚË{cčěkmž—äÜŃ;S1Ÿ5?E7.\DŰ&7ÓŘx)wźë´#&Z){_˛_ě~"/růʆ•şnMĆÓöÁźcJFŢ ;Q\˙źôs´s~ÉĂ×ŰŘ>$qrBRʞ[D(ЍóĎ?Ÿ~ń1w?úô–}čCšÇ€<úďżűw˙.óXěűä'?I (pŚłŞ] “ĆŽ-[ÝjĆ6Ç‹–ÚäĆA2Eład÷eŞť‰D°`~Ah|`K+6Š™‘÷Âf›Z+MsÜ5ú,íă]-Á'GřÄűAĐ-ˇ Uƒ¸ ńńńڊ`4:özBA°Xgs–€­‘×5qŔ'_Č~íœâDz‡„}AŽ9*d+É>ýˇ°âF DłŔ*B8`ƒNeĄ#S|Öš(]€IÂŻ›ŽzĄĎ—s}â€<ßHʟ‘˙Ź|äąŢ5ńBoÄŞŸsôŞYy!ő’ˆŹn#9ßőę)CV˛ęśşŁĘJ[Y!űü($ş-ôőe;œ:´y źqsV÷‹ƒNgĚĄ"ěÂÁ48Žb„EА  ă)áYssB(ȟˇ1~Łp¸#ä 8ëeŽđç™4ëřĚc˘ěcô5 “Enáu ç0ń¤ XX#ˆ‘şŸÁÇw´kľď`—ăd›Î#OáČZŐ¨˙ŽÚč0,sIîh/üaP‡3DB=‹c^˘shňƒ tťá#Ń/˛î]ˇť´—no_“ó53Ţ/7‹ ‘G Čr@e=!ąčE°b~š`"D͞÷Eݖš|!Ä lâ„8$„€!×cF tuZí€ó•Tż]t{Ŕ1˜ľZľ@^N€ó+îši:0N>˙üóq: ̛÷Üs$œÎ˜[Aś@Ä 8šA€# 8ŃAbů!/"Ćt8§ő@}ŕ FÚ 8ë2|U×p|ă88 áp‡ăçŕ@Ŕ5áŹ?pŕ@LEZÜę]­ÖŒÓűAŠŤsgžŮË)C°rŠ7M÷ g?îÇŕ^ő ˇa€şÁÁ.Q;ŕäŢÄÇśm[9 "`źăoĎ-Ď)[Qs"w€ŹâĎÝ>đ,ŃN h€ ćgľ…ób?đŔW9˝Ć‰sŚ˝W\Ş—„¨ˆg…<˝¨`ŁCŘČ&Hńä“OqŰbŢŢť÷iN‚ˆc¨?Vn"jŽ)A˘b€„r˙ý÷sxć Ϣďá>đýýĎ Ďm'Q4P.öIÔ!X ş„–‰} -ÚçĄ˙‚Č‚ţ‡4,ô_\Űіř+ýďĎÝwß̈́ ôQÔrh ÖrÍő٤6_˝ťBŻš Fć#ZiąśN1ӟzűRťöÁŠ”i˙ń}ěž#´yźDŻ˝l†ĆkŠde„•wÎÜc múÄ}GésĚQÇ(źťśŐč=×nrä ß pj1ŒŽŔŽčĄ(ÍXR^ýeí1X{G‘8ÉŇş…!„ QíT¨5sÓu—Űí4ҤíaŁ˘Źéi¤íŤf8”ä˘ABäqvŁ.g„sPÝVˇEčYŹ×DiGčČęĺ˙Nî*YĎRď{9Ă>Nyœ„(&'au~oň(ĆÓQ­8§g(:qúHßi-˙˝*Sďčgň3ëW÷,›Ë*ŻDkńnžŇś DWŰGz˙`uĎGSčŸjLZ&@L°iq­ŚŃlÓ˛‘˝—8]Ćńĺ•%:~ě8í{áŔQ^ňďaĐç Y˛ţBÎjů$$ם0!ŤÄF|ß^¤ůďcˇíÍŚčňĺmm“ă“wÝżnD2řçŤ ąłCĘÍśąő¤bOE (P`T¸ţňŤčևĽU=Źbd'„|mĺâôż+FFÂT\56ąŞ‘“@Ćč 2;ýČb#¤•]^Śę䘝˙=R…žółƒŔšlşĺ˙oßrr|‘iżĽ[2ÎÍşŘ‡ś“;'TA°XgŐýžŁ]ď×ŐďěY_śűÎn‰Ô Îl ŠŹ‰ú÷Z +Ďř ×ӌn([pú௄—œđ€N“â+Bş=u™>áA ‰*Y¤ ú™ůÉźg›ŸPW?˙ž„L#+;ł§œ<ňHL|öĐÄ M>ń šˆá_őŞ7@ʑČţ`ď§ńŸß&~˙—:ĂŮŇ/ĺN ltŔÁŽU÷  ­ĆJ8çá,ÇX‰ů¤$0~b;œÎŁ˝eŕčšÁň˜wá˜QáŠ+ވ÷ÁŮ '8ĆcÔ×aB"Qœ{˛PĚIâäžě˛Ë85ĎßôŚ7q= Ď n( †V8čĹřŠş#H$8çĘ+_áH‘ŠË9ćžvƒÄÜ7˘a<ţřăěÄGşĺ¸?>í„k ÁăźóÎebŽCôöíۘ ý˜AdĐĺ^uՕ<˙BYĂ=\pÁ]×IáUŻz=őÔS\6Úmƒůűňd´Úí‡ö@)Q/DŇŔŚ›nzöí{ž 0—\rqŠ\ ]@ş@ŰâüŤŻž’Ÿ%”ÍłĎŢÍĺ Ż ^h[ô-ĎLH¨ĂĹ_Ää ´1ރý(oϞóĚýăČ8ým~…ž‹~†gzýő×ółÇv!XH_äů˘Ž8ůBžÚ÷‚6Á6´úî ĺů$"/}„YvžŐ@HĄ×_P”7ƧǍ &Ečš:âp[’öĂƊčYvť´=°ĚQ;‚žtÜ (P @_DQ2›.Řu6-ĎÍÓüńQ°ZŻRÉT+žĂ!O!˛×ň *J•2ՌýŹltď6|cmťĺŽmšŚvŁÉö{=˙ňQF•˘.‚2T?ßÇ)čŇ_ú6Á0ň„#—;ť•%ŞG]÷%őâՐßŕS…ŒłÁtÂóx‘e@˘CŻ"}äżzĽż´“ZžĂh,+ ő˛GňÚ¨ă8 őX ňä“O˛A׃ŁAí(ôz~ýp?0ŠŁL í Ăš8ü%:BV8ňA2ŸAŢŤ}|â˙]—Őî>™"ŤnşÜ$'rwŽ&­$‹ĐěŮł‡pHČJ[M¨ôłĘ"{„HĄĂËšPâ5ŃCŤË“gĽűŻŻĚfľ‡&ŕ:Ya$ (Pŕ叞żňĘ+3÷a\ĹęűTJ8ĄńéW6œ˙‚7žńńw $RR>˝Â"@ĘŔGs9ć-|üšq D Š@ď ҢôĂM7ݔú9KG§xőŤŻË=aÄA(ĐŘźy“ił›Ü÷Íš‘&ŕ´O;îíľ1‡÷ˆYŔššHš „„~@[J{ .íP—Źúč~„ů$šDăÚkŻÍÜyRJý"ďů‚đ!€| ÉB xä]7ďýžä˝?ÎÉ•Üjt(î!š%tĹŽýŘ -7Czä‚›‚ĺî(qÜ íHPŠ,ÉÂôłoíoП}ţ=ôěÝxń]şkŒvÎÖh˘^bGůüR‡ömŃ7ž_Ś/?>O›ăÚąšFďýVz×Őł‰?;J;ˆN5úęžc‘:áú“˙†Ó§ô’÷OŕV{Č3Eî>[­ALÂj|čbĂęt\~‰˜Ćr{ŘI9œúĂ:&'ÇŠ^ŤĆ÷–e€‰Éü7ęÚ§K´Ľ rÉń!Öqe4|ŕn+’.Áp×<™úĽ RĄI IˇZč÷ł_UręťU \ű¤˘§˜ß­VŰF€á…żcžĂ”\ĘĽŔ8:èEÍÊ1źF]}SČ˙zń‚üNŮr:Móž5éTb”ďęě^dŸs4Ŕ1´JD¤‰< Ś"\t÷1ŞŚ}ȅA ëŠŔġ`Sž!‚Q3Ž7?żhe…ĐXřŽ´­f›Ł—mŰVŁęTĹČ÷“Îޞƒ‰zß*•*§–›˜œŕ+OÔ–YPgĚGˆü’äNŘďdĄWđ>=żď“Žvď^˘sĎÍ×I°Š4~/)Mbčw8ąçĽ÷šŕ ö6ý=Î%î˝ÇřŰi§ î*ěˆ ÔűĎçbRPJ+„@ĚZ‘Ô)Ëć(çé~P @ ńb…Ř<Ă8këv -Z<>G“S“T6öžĂŠă"-(B¤÷[nPsi…ĎŤŒŐŘć×DšĚűmçó‚~aŽ ʰ٘9˝ă'âę¤őšn9Ęä&téBx ŐůuóéŁ8–Gěß؏JAš ˛Č쎝aP,Öx•QΊ{ßQď+âL׎iqXŠUM._Ž^E ”6(opŞźóďäU† :Hnó|Ż‡ýeFyťQ—ź( y÷čżŘR.H¸žüÖDŸœč”˝ ŰÄoă~$ (b:]‰OŽČťOMěČZ]旧ŸłNɑ•F”B8H$—;€zú‘?˛ ABÄАß)Eţężňü|#­l“ëK]˛VčűöŰŠ:>Á˘@66üq>‹pQ Ŕéƒutne%R…D‘q˛)wáő{ŞTŤNĐßޡDw?Ń ÎŔĘŚ’ ÝJy(íĽŔć}i.¤O>pŒxjžölŠŇ–Š2ŐŤVŢ™âŔ‰6=s¸EǗ:l0¸řě úń×mĽˇ^>c}Ă1šBŽąś>ŘŐ"ć8 Š;Ńú­oOˆľAyY‚ Y­9ťE,‹ó?Q.!›ő3ŹŞ ŰC#ҕb˘ÓIEĽgq?ŕŮLNŒ›žWMYýú¸iňž§ńáćę‹0´iłŘŐ/ `u#Wšř€í9ꗶe­ŽZuĺ†DŹăú]`ä†8qz§ŻÝn!˝N‡WEQV#jrE@e6–¸ ůŻG¤ĐÎWZ§Ş,Óc3YőÝŹS˛ÄŠ­WŻk=ϓj拎Ťx伲Ä+ü*—l_I•DšĹëES2śƒ|Fv<^YnÚ~kž/#˙Ňň5[-Ş`áŠ[p¸rśą‘ŐhjrŒjőšąĹUř8Ř\Úşęň‡‹]2ŇNţĐĚ'Őj™˙Ö뾁Z@Čˆ†uHň4ȡˆ ֋dą˛ŇfťÎÇęDzÉĽĆY%š´zű,ľI˙ÖŰôo=׉ ,sąˇKŠHōěĺĽÜĽÔYę[ ~ĄŸKäw˙ (P @ŁÁx­N›Ç§hyaŃ.‡ďr›3<°`ä0Č핾Œž]5>5¤ a2ćű°cSŠ™jîŔaßf.ÓľÖD&†>ĆdöJ)7ˇź-#ŰĄ¤ë;”:ÖĄ$ĺ B°Ś§§X×čöľ‡ÉëĂ:jOśĎćÍ'Yú[´Šž6ŒaŤgĘ !Ä ‰TĹş7ő"÷Ó*ŰmTůWNYњˆ°ńSĆŃvXâ(ůiu‚Ô׺ą=LLŒ0ź‰#ÔˇYd-ÂĐÎÚŠ‰ˆs$ÇSĹÂGŻwm˝’8,úŐmŔw­Ç{9źS[ĆrŚUŘ2řü’#XH˜i›3ć3\ŚcăPSŮhD°ł5@2ĹŇ2˝ôŇśuÁ†ťĘ@şš’‘jľ§ƒM¤ZąQk‰‚ A•˛%QŔîR Ň-#ś§î[q#>$$”Űm›JŸ-óŃÓ{ŸĽçž{žî¸ç1ś9}űé9şćŞ éŸźyÚŘĄ6eÚşpsvoŁ-›&hvv†‰)â4HdŘźl;áâÉÚÉ(ˇKäŮWłœ2§Š=K/fJęiçY&łP:•sl?sDX)Göçő)ë°pŤ=Íódň,š{LŮ&M݂´_ @ ąËxBtčóvŸC_á Zž\frEŠęˆdĺ6|ÂV‡ËMjš éAJ¤jţBžę4LĄmLŰej­,Ńâáyš=ű,›ŹsÔ Ę‘ŠGJ`ˆŒQîńYHɨŤ˜¤‚üˆü'CśH-´ UJ) šBm6šÔ‰$ęŘĆ@!…­CHD‡^ŤŒňœę>AB”˝O“ üž2Љú8Q Ťä f“ĽIŒČł r…ä#@n”‰ŁžĚŠĽ(Œ(eâXœ[ŻÇÎvŸhi TíEaś‘+űčŃŁœ#cŁ´ŻOtĐĺö"ÁČ˝fEŃĐĎA—­ÉYĎŃߟu}! čëůß5ůAňm šÄś!˛OçG=öX*ĽŒžg}_:}ˆ&KČ6}u@{ƒ„ƒPňrúřD i_‰^áD|  ËD_Ó9î (P @NbžEŕmK–œż­J?rC…Ţryžö\‹~.˘'†tŕDHËíţŽŁHţrʐSD%„a4żKÉ2‚JĽA›&ŞtţÖ:]}νúüIşhÇm„3>Çą˛fHƒ+˛ˇvUp)ˆÓ3„œ"DڧC9$݊řHšˆ|ń‚u w”č$"Ť‹3ˆečJwťČ9â­1„úWäzśÜph'+tŰąń1^É;’;r÷e?Ý҈yĐç-…ŁyCV_rÍ=ÔűHľYÇyüŢš"{,¨?eˆNYđîYçeÇ"ᬎ¨QzÁG„Ş‚ˆF€sŞÂ`”Rv€ř A÷ Ů.ú´vڞ ʆ¸´ţ0H› F5ŇŻ¸˛łĹűNŐŃ2s|ťÝ˘ĺĽśůŰ ĹE,F*щsôŇK/˛ăţlNÉđq•j‰ęƀż}űVśŻŔžű™ Á¸ #?)ŰVšÇ¸öę ˛+_˘FłĹ„ ꊬÜˇô­ů…%şóΝ螯=O° Ş^{Îż‘#ŢÄŇM¤ďҞŮ'8=ýť@ ؈¨Wkôśë_G_ýćC´41F5GRmPŮq ˘˛`ąÜ ĺ 4ły–ވ ‚E­J­•&EđQ•Ź֘_2rA‹ęFŚ‰É˘ą=(ƒ Ż˙‰î)äČä9űÔŃłŽíEL–ăă(lŽäkm‡–P,Ö!ĐńÄ)'ôëHţ>ÝquřV”—AAqzç)őš €rAZP}˘h`ź÷ž÷˝]9ÖqO`×kÂéŹk(#*ˆ–lŃ1Šĺ2;Ę9+_GܐzYŃ@˛@ČÁ_|‘Ž;Ć4D9ň‰$ş-łČÝAÚ.…ŽóŰŇ'Âř×ô˒ý>)ĆŻ—^ĄŚŮőyƒQP.rŮ#úž)ČŘ&űtÓŚ4)B?˝ę ąlÇ6鏚<#żĽďŁ.žÁ¸ôţ‚`Q @ 8Ó0=˜O™ÎŰR˘w\Q§ŚŃÉŰź2“†/Üě@$Í\Ů)_ćU U〙0ך+ąL~:‘ČŔʇ“![ű€ÎżJ[ČÁKKhł`ő+ńGŒá˜B/pŁěPâ‰Lž^Ťu"žvĽt'_ާK˘;Xçœ€ŻŹAç25iÓ6ňŞě~Ȋ׊„¤Ía}Ł\¤: réhŔž{sKĘźÓěsďgŹ[K g2œÇXŐáQŽsŢúÇáMYwFJÔJĹ8Ž+ŐŽˆŒž^މR€}ŸC&vˆŁůTÎ|r cćč çŸ^ű{3(Ęĺ =ˇo}íűiçöźXiaaŢÜf[ĚîÝ;hÜŘ5Ä.fSë<ăŢKń_ű)E¨ގ}űƒe]áZ­vHŰśmĽîyŞű÷żČśŔ—^ÚĎżĂRćjtŕŕ1žÇ}›`ş}Ę]ij“{2ăD)¤vĂŚK CKDpw|óˆćM؝tZ]mcóŻë˙•śˇ¤ Ěk*ňk[VbkdÂchlœšąś.3NeôĆÍ6‘‹äĺŰ !ť•HŰÄ|ůh#źÇ (P Ŕú@Őř0ß~ăMô‘ĎÜJűPuičëÔ(9˝ržAmŕř-ĚĎR`ě+5BÇÍą+ j/7‰dń˛9žą°Dă[7Qi˙1ŠZX‘ToÚOŚŠ”%K Žwe“Ň_ĽG,ĺčĘ×ÉÄ fyAĐƑ] ‚Ĺ:„8šó D­řJˆ dżŹę×á\AxĐŃôwíĐöÉ( „(˙u…—‘ ?đ?@7Ţx#;ÔőKĆš!Cî#pL-)[ÎąuˇÇ!G#~CĄDuDůŤď_G_Ŕv8é‘ŰqŸQZ‘2dŰśmńąâČ/s(ÎvĺAçRôŻçGnđ#„čcuZ Ÿ“Ǥ—gĄ Y.Cžľ6ŽPV´Ť|H_Ŕů Çpź0řuŸސ=4ÁD÷Ii'I#őĹ󐺥Fú">œű!ƒŒ‘Ę_‰×k°Ç1č“B@áP˜ŐB(P @:qâÝsĎ=ôÚמ–Ł?,ců‘GĄ÷źç=´^qÇw0ô’K.8Ě}ŁE@y*t˝b?Ť…+)˝ľK‘&ŤűräF:=Cë¸e?t|-7C&ÔH9$ÍiuŁ‹@~ŒS,G‡„X?MţŮVăŔŒ˘„„žvž$ŽD&АMŠ(˛ź/şëWľ Y‚D˜Š[h]ĎĎ3Żeď0”p¨Ă,°ÂvrbœĂŤśĂÎhh C2hˇZ|Đç1jç~OrE”8ěఏú:řő‡pÂEîRë!‚E‚ˆÖ,şEč˘kÚw†2/¨ĹücőÍNMŇKĽ9Ł6)ŠS5TX÷ŐvKŹHœ¨z‘˘Ă`ź?ui.O‘cm‘Wtő/ߙљvďŢIľ×˝†Ś'&9:Ĺ%Ó˜qÓ-HýŲ&~żžŸc'ĚŰ6x]݋‡Ô\ćë…^ŕŒä˝Ďƒîsw>Ló‹mN+R敋°U•hl ý˝ˇGG8•mÜĚ˙ hĹźs°5ś"›ž¤^7×(•ă÷W˘Rřö2ąâ=;—@/>óc |[YÖű„:VL]ŞA9žŸQŘŽt$}3š4 B ăý%ąA1ńĎś‡ĚŰëu¤.P @Î<`îÝšm;˝óćˇŃ˙ý‘żä¨%ŁSWŒ|ŃÁ ˜YŇ0;Ph~7V¨ą¸L3“TŸš 1󡹟Lí•&‹óVćińŕqšŮ˝ĘFÖkˇş)Â>ÁýdäôL˛°K’EZíG.öëĺ_+rßÔ~ˆ(ĄĺáZŞ‹Vďwo‹uđ" ÚąîĆ4ąBœÓâd—ď’‚D—'B˝Žś †9mpĂůHšaÓlTăÔ §‰żH rýő׳sŰ$ĽˆŹć°ő#ĹúĂ(‰"eĺ Yŕ3;;ËQ |ňƒ&‚hH™¨R„ĚÍÍĹéBüčŇ^ÉĂwęëö•çä]|٤Ž(Ą÷e­&ĐĎÔ'Čřú˛ŇÖY)6šđ€Đ’ržO˜điš ˘ď_ę#űôł‘ú@™%×ÖiODy˛Ô˝ß„˘ ĆňÜq xšCĆE-ř„!ÄIĘ.˙81úăš_ślCŚžž”)‘°ôo!PjҢžC!őú|)ߗ ü:ůu•Uk Ź_ŹžŠϊhjU+e“N—i^ČśYŠžN—¨Łžéń kËËA)E1™{ŽhcżßQfę…ňݗăý(€ńx›cXIéń ]I2ě؉đŠăăěXÝôT# ‚„`ĂŇŕ×Ü(&$ˆ|‚­Ö`ĐiM12űvâß]ťë9™¨Ýăů‰ŹŃáˆL“S4fލ–9D ‰Ě)0|Ź,cĺúýâô™/űp˙hŰQ´A4²Ö܇Mi68ÚÁ9çœEcĆ~a$rŽPAQ˝űđÇŚ,ŰPŞœ“D˝^ă—‹ Ř^SęmZĆBžŠłŸ5ŰĚGuóΜżç,ÚźeKęśňęž“Ü}đ*/7‡…eS^Ęć]lĹŠąĽF.€—Ö4‘!˝`*At@Ű'„œ ľ@ʒzČőŤ.lE$ ~Ű#|fÁ˘@ˆçźŻýë} cę+^ń şě˛ËşĆHŒÓˆ:"%ĆQĚé_|1Í=öďĂ\źiÓ&Žt´[˜—ąýĽ—^âšúškŽásż÷ďßO>ú(]zéĽ1uyúé§š.{ö쥽{÷rô+óÄOđőpʑ˛1/ ÎŻ|ĺ+yž¸÷Ţ{9:ŐW\ÁäÉ|.¸ŕžÇîż˙~žăŸţyţýú׿žvďŢÍu}衇¸śoßÎ2ÉnÎg] ŔzĹÉ)ybS/őüt-؁@iRT 2a”&Pűd_ťQś”Xq—{C8m¤łČáŸ2ŹÎ’^˒oT‰âăDˇ4ńĚ:l#­ĺb="ëęAwd N„Xá;…şŁéűĆŠb NŃRĐÓGQśłČżfŸF”D`Đu8==ź<Ś@üTÎ$‡Yś?;g|ôs] ˘AˆDŃ2ŁĚüLÎiX]xĚČSuc(´Ťűâ#ŽS|x•/J)yd‹Ä`#„FéĽŔ čEö:3"Xe*Ů:ů]JŘŽ{ TҋŢ÷•e§dÜ„\†1ŞŐjóglź>Đ9;ŒÜýoţďŁ?řŁ˙MĎů$Ďď}ď{šwŢygJ)Pŕĺ‚,éčtůr­ĚWápçÖąŚRěiýDV€.ĐfRE ¸X95`’ĹéF>9":Ô7žűcTBžĐ:´ŁÇ—‘—>p‡J[Z=,dg]@˝j֕  ącĂ{ŰśŃSgŠV şÜj <%ágDƒë'yíUÁ…dQŔ×ŰVsţPçJT €LäVK †šN—łŇ#όî˝Ĺ ČFőąœ~ŻHG:|U_ú,> {Z˛E“–W–Řžƒű‘H’2N”Ë|ŢFZŃľ: Ó“1q-0ô;1,\ŃŮ TśŤű‚^)7!@sźť3/˘QŻsűžÇx‘mŠĹĽŻF°Ř˛e–ć>ň3˙Ÿď§ţ×hŰśMô–›^I—\rQעŻL˝7śEŽXB“%v~)ہcŮYBB˜“č)bÔ×Ô)qűľżĐ)ŤÎşŢúťśĘwk—łś9Ěń Z Ž N;đ¸çŰ?ťéé—y (P @„];Ϣňú›é὏QÓĚĹHůUŽUËĚŃ­6§Î ;%j7:ÔXl0ĄéDĘăĆo;;IËs ÔXj2 HóK´xđ(Ë,‘Ń3VŽÍSgĽIHݰtŇ~89:ńĄVĺOéJęŁ!'čČ]űú镥nŮĆ˙"Yŕ{Ĺ÷ľ‘E‹Ó 8őąŇ+/át?pTd9íĄœă!9ÓąSöÁYU™ˆ&ç‰&1řÂťŽ4 ýžĂĚôăÇçâpŽ:őˆU"Ł măąpˆtżxɊŒC‡:Vž0ĆËŠk2s_;ĆŁDŞ ŒLÇć셢•¨Řöť#÷Šk=Œh8V$]‰ěÇ˝čtş^~hsý]_SCoÓČŹJ+GşÎş,ýĚôyRž8§´Š Ňy†MliGŻ đű„݉":,ťytFü™EH2ş>ţ*˝ňN}üëäA3ü‹ô  x9Cľ˜ŁńäŠůůyŽ?ĂhŇćyç˙E” ™+9çbţ”hP n`|?˙üóů|yB Ľ82Ň{!ĆqČ68FRu]xá…Lř0ƒ( ä!%.şč˘xž‰u‚Ežá$\÷Œű€|…h¨3~CVA™BJ-Pŕeƒ<Ű{pę}ĘńĽL ]ô–dg¨H×eÖdÁfüúGĽřśŘÝÂ+CÁ#Œ¨ Č.`́nľiáČ|YIŕĽ8ńœˆŠŸQʉ”ĺ ŇőHxéŻýĆCÖ-N"‚ĹěĚLŚ!eľ¤ë^“s”ŢčrCvHŮž“ßŃăk¸ôl§]íâzŰuŔępů÷ąúÖqmWkËUGó ü÷"ݍţŮ sÎăíwó_ĽpŠîqQ˜"šŚ?äR Úúƒä…-~9ÍHŘT˛l›ĘZ"Ë œuĚđď˙°ç ó|ל]N…œČéž(˘’ŽJÄŁ[ŰGÖřÄÁ“ń]ć„ä „ŘÝÄű Úž‰š`nn‘ZĹóNBa‡;ďÜ]täč úď˙#ƒOłź>ˆÍơMĽëcGÕF›#;¸<*śî+äąQ‰Ź!‹Ř`żIŁí_Rů›ĺH™E×Ő_t嗡ďMěyé›GŮ6š˝fäĆۈv#$ŽÓ'É8S1źŒZ @ýĐ;Rᙆică|ý5×ѧžt=ôěăTžš rŐř+FîčXyˆuäv‰‰+ó‹4>=A#™c'7ĎPc~™‰řťrř=űŇQŞšyťą°DM+\ŞŻ¸Ý´š #Ę<•‰qŞLá3Á„…aô1ő“­nČZ\_Jü˝ęBéňD—C6ƒ Ä'/k„~†˘Çœî¸ăşűîťŮ9Ą‘ĺHp $ösĎ=ǂ6œX1 g…D1h"č뺌ű–@°¸¸Ěu7ĘĹoɗŽó@č€$ťŢBÔXĄĂ‡ńoŤ´8CŤlŻťHÚÉăôĽrŮ*.ŐJ™Łi>|˜kbG?˛”88ŕź ŘX ×—Č y}_9Ę{Vy ˜O*ČŞŁOŽČR(őąţń€0ôĽ łŇÎŇ'PÚE“%¤O侊Ź0EÔ'’ˆq\Č8ňœł Ó„hC”nĂ^ď…&tŕyZ%ł@^žŇä‚gžy†‰2wgĹąŁ“(} dND׸ŠyBć1ú+ĎdĚ^ZZbr‡206Łź8Ě­9ßő<ŠçMÖpŹŽć%חšFÎóçî<‡¤#+PŕeƒuÚÝ­ń ‰Ź ßo‘#“´‚vüąňq@e„RGNÓ¨ÍîŠŔ9¨:f[+„ĂłĂ۲äî(vfΨ! ĐŠpfú`€Đ8j;ą !ăm›„ä§şz)Æ?ŚÁSňn%5Ţö1Ž'˛¸uvLڝvfŞMŠÖ×LMaţ(ĺę@˝ˆ!ÝÇH |qÜćÝG‰WĘ$\”őçLčÇłĆ"+×G6ˇőz† š‘uřjÉ5ńů´zřýM×EVŒçEšÇn˛¨ĄÍśĽ†1’š÷ƒ<=6> rOĽfÇ9Dˇ€]d°Ň,;‡i™Şc3ŽŤęvý¸´ąe 7>„Ő–FŃ~÷—––ŠŐhQyŹl#/š-™–ľ¸ŸRF}d\ç_ţ‰éťĚWâqÖN3>!ËFąśs/Ňç4ͧR­Ä䥏zÚbíÜ066NgďOm뮂7—šzë9@ď(ŃWějçô˜P—3Itž/Eęâ S‹îىň[ŰŽň"âęńF)bBśEi’—ţT+UJö!Çś6KÎ)P€2‰=Y}QĐEć)P @Ą—˙F/ÓcŐzĆEçíĄŽş–|ěQjWZ–ĐZr~ŹśČĆ~Ů4úĂ 5Œr˘Ű•­ě?L'ž}‰Âś™łÍqaĽĚ$ŠŮßiŸ§9&r &m DźhÍ-đ‡ő‹™)ŞÎNQyŔÔmZ.̒ązů,]VŇTućfZˇr˘o‹7;9ŻR˘$Ŕ‹5B–qŰVűӟţtźZ3ďÜQ„…„ŔýěłĎ˛SeǎźJD_hςŃ`Xh4Vb˛4IcbbœÎ=÷\vÜäÇ-,ŘŐŁÚx*W׆TR툃E˜ĺroA`DűŔo\_GHČʂƒ$ÔGr¤â<œŻŻăöš@ ë¨ď3o ň' ˙8@ËjĂŹkĘ6ߘ™EžÉÚ íˆ’Ůo0„đ‘•úCę$ĎIŻL”ýŇżt ˛Ś_đN@Yń\ @/gŘ_G9ÍÇľ×^Kű÷ďç(Y@ČjĚŠ EźôŇK<ö"2Î)ńťžëťxlFÔ-@ČˆŒ9Q"Ţ쪍Žâą×|ík_K_ýęWéąÇăí D"˘[€pT$YóĘĆÜ "%˘Q . ^rÉ%ź×EPgÔĺeAćĚ (÷YÇ#šä— ŹDQˇke6<Ŕą_.uůŞ;ʆR’Ű)˘o4Ą!˛ŠA°Ş?e~Ů3Ó Á"_rSÉwNLś“° ëĐh'QűT­W;eoO˘“AÚčˆ]<š"ďš•'÷Ä˙Œˆ&!ŤŰłÚ:­—ť1Çljw,Ą [ő*xů뤏JľLQX§Ö‘gÍÉU Ćśš=˛Zmř1ŠúŮJÖ ýŽťŢëk ™Ű-‘§~6ýlFj‹ýÄäŔ#îDAlؗS@N$ĺ("ąÚE6ǎ/%1Č;@=§˝nšţÝ]˙,;Y/4Zd¨(ű|ߌ'‹Čd~”ˆÁlƒ˛HŢiůŽÉ Ykő|–¤lîŘ´]”ŘKeˆIWœ6­TJ5LŞl'ŰT…°¸Fă`3 Ɋń^˄˜ĹŠĽýý (p2yŇ˙îŁŰÇŐG8˜šŚËÎżˆŚŒrÁ؝ú~ ˛DsŠAË ËÔ:ąHsĎźHó/âÔ!ąMÂLďˆÎßi´Š6Y§vŁĹçJ‹UÁ´eëÄ<*“ăTŰ2Ë{ž2BąAx˝_ž–EfrÇłœS, >úяň ĐA0 Á"‹ŠęΏƒrڐ+Żź’#ZČšú“8źmj´ŁALŒŮŮMLŢčĽř@Ą€łF+Zčó šĚĄ‘ăâsÍ_@P6€űDĂ*X8yP>VŘę(žRçłĐł„ŐŹýţ*ŸđŕłŘ}%Ň˙EćĐçú†iw|ÇýÉ*ażŢppI¸^RŒÚYĐĈŹ3ş/ Qu"‹˙Ź8NV kdŃGŕÄó-P @—;0î"ÇSO=ĹQł$V0îÂČ{ď˝÷ňü™i4@vŔ˜Ší’ö ŔvDʊ⎝îŠÉŽ2`nÁďË.ťŒžýíos$ ¤čŔ÷űg¤!ěCd,3Po”‡˛.¸ŕž+Î>űl&­bŸä/č9Uśc^Ŕ9(uĹÜçGČ(P Ŕé€"P÷*X^šiĆąR§e!>ˆĐV˘JšFŕ|ă5ˇň+ʰŃń:í(vÄSŻÜ(Î" ;VŽŚÁj?Rc´ňnYӃůtź}‰cŠUĄę|+UŸ”s<Ę6ÖÄúƒˇÍ‡.KČXĄŁ#Xô–ŮíC1~fz’ŞĺJß6ëWfgś=ÎĚÓŇżGň ˘n÷ţˆÉÝ×<ý€‘Sa÷ÂÍQ6Çëeţ”K5ę•*!-ݏ/°Ťe#ĎXó\'&0ɸ6XťŹwĂhŻżqʞ°gEĄuŔ——_~9Ż$ő!Ę(NřH$m‡Ž6}33Ó}W€b@ĹĘSďł×4‘BM°Đ@˘g >†8ZMSç*ŻrĹž™™pŽ`ĺ+VÜb+Čšˆ Ÿƒ´á ĎC?ť<ĂcÖóĘÚŽˇů$ ˙œ CÇ_´=Ky“œoţ•ű(MöČ:O§‡ńďW×UśkVšČÓÝĎuŠ9včrŕ˜Ă=(P ŔËŻ1G#ć"@ŠôçJěżůć›yNŔźˆš(0–âóš×ź†Ł>`;ʀ˛$ŠČ1haaƒĚytçΝtă7ň˜Žˆ˜sQ$ŽšćŽ>} 9‚Šď _ŕ<"W`<Çu1žK}đäÔr ęƒ9ő@97ÜpCœÓűŢřĆ7Ƥ Ü'îĺ\|ńĹ|Îzqč(đňDśó0E°6˙•KFV­ŠlhW—7ÚËćŻ1\TíŹeˉdŌ1dLIZż~×÷żŸlŘä“3ŘŠž[Ű:ąü{ CY}fč.ţEä•MJW´ăm>’mŽŒ…vn˜veëém3łSĆ eKŤExŚ×љS˙<Ý1P1-Fm ] ÉÂeS)lj˘Ž‘ul_OĆŠ,]¨jœŚőjٍWůdž7÷"Ë]v[H9ęYŠĆ׹öŽ8UČ~ś§ lďqx@⯠ZĐmwĘ´'ŮŤd–#ä9K°â”X]iÉfŽ]iyŰ|Ě;ą´Ň`šüŰĚ_–ĹO}H@Y ”’:œ|۟Xč~_ęNçá˙ľű,‘)kě2ś´ł^ý/Ž#ßyŔ‘?̟25’Ô‹6‚ŻKKډÜ$ R…oƒËZźäŰ(íąTŕeŒ<˛ôI‰Â]ѧAŹ€cKúf Œ–Ô:ż]“ćććâÔőzqój|n§ —욀nžîzřÉÇhąŮ 1c§lś„ľm{?KűQăČ1*U‘îĎŚ,‘ž>9FFË)ě ţŢZnRuźFĺzŐęŽ7Šy˝˝°ÄŸúÖMTßž™ÖZŚ+]ň–|g×m Ęý$Ç3 Áb ţđ‡yŐč0đéÞëŻÜĚrŔcő(ÂdżúŐŻŽŁ>Hč;ße…ŞfŔ ŃAʔŕ˝Ňƒ’^V™Ć %u–OŽ'dŁP+8—jB΅˛gLŻUąş=ŕXÁ*] öę\˜˝şÜ~¤—~JĄŽň ÷ËË3Ćôş9OśéűCťăÚŚłęŽßpBÉsáÄ/_MőčŻüőűœŽ„!Ű%R†ÔSç˝ô#aČů~ŰĺAł"qO¸ç (` … $ôĆg!L50ţb›żŔꉔ"řh€Č€ł}űvţţ /0ĄbϞ=ź˙Î;ďd9×@” }czŢuu}}čí8$ůŽzH] (púa‰¸ť7˛ČáQ$+H›˝BÄAŽŚ`>íN“JbÇ˙ř؄]J j‡vőm$¤đRü]ʡ2kˇcmP5lÔÎewu˘T´ŠÔ˝ăP„q‡ą"ě’őůˇK~ęë3ƒÖ=9ޑ¤;Žř%rţ`eAç¨ĐÄřĹŤs‡Dd.č=3Y_O-FÄB@őĂAőŐStŻrQ-xla§”Ř>dOö a ŤVĘü—ÍikT ]|š !RA× ›´ŇtŞ˛ %Ę˝f|űĎ ďç06ˆŐ?zDt: k •łg+2O˛)›hÚ6ţmÇňÄŇl´Š‰\ŢÍŽéƒ óťĹv!ŘÖ@ˆn4[F—§M›7ŃYFĆ>çÜóéU×˝ĆČŐXÔbm.Ń*úŞŽ÷ɢ‘śĘžŠÝ¤msĚrîčúˆ-R˘RtbçGŇĆچjßńNlŤŹpú|ĘŠé=q>$rNWý3HŒYőŢČďCţđíÔňÝ.šlđź433eěݓ.U3(P Ŕš‚ç@#ăÄX،1 sĽD7—cOŻL9LőƍMő­7ź>óĺťéŤÓÎĎfŽŰ- MZ~é˙ `ךÄČUĽ˛ńÉuJTŢľÍSÔnśŠÝ¨`FvYi1Á˘6^Ľ°eö1áÖ]pDh9NíĽeŰšmÍŁY0šÂ}e)G.\ę3´ţ–rRǜŠ(k8 ţř˙xՃĠ!ŤťV!e(yż1¸}ţóŸ§ëŻżž~* ,$ül—Čͤ8múŐWrŰëGÝěk|ÜË%u‡‹żeAŇN%k,ľŸˆÉX™ŞĂúůĐm…c@0Ay8Î)ĐŃy&Z¸Ői/tóyeúżłˆ˘xÉ6aŐ÷*WHrżB°†˝”ŁsLĘ6M˘@č/:”˘#ŹâމűDËĐĺům“•Śä8Ô+“…ĚQ @Ö0çîۡnżývžŁ@Ž@äŒ ź<‰ă‚(ĺÄŇʀ/CÖĎ+œÖŻěˆ"ˇŮ1Ůj5ąö›‰Ö‡ë ـQf™6_ü&Z§äŕœ¤Y+ŽĂôő „ř´ą¤kekF‹a ÝöůDňŐŚ‰RN!_7IĂę°§LOMđŞÝpíD%çÄ+°‘ŃO7Î?q°Ă!aŘ­˜dѡL™´dĆ,pˆz§o 6Œ 0úqŠLcA›ŽŔšmœŮ-,t™ i­+řcWŻń`}žĎ¤q Çůä“p؉oö—ƒ|ăsVhě]jŽ‹F!ö=!R 2Ţ1ş?>O'°şÔœ3==C;ĎÚI{Κ€ęcU㊳ĚÚ‡Ě [ľöœaSěiŮ(>–WZYWu¤źîů)ËƤm\h'˝Č Ŕ=‹=KŰŻ´ ŒŽľ›qt ‰pQŠÔX~ŃŃZőÂ.ßnŰëýě&˘óâËy %ő2CÂnżď] ôd*° ¤Í……ĽxÁŽďZ×ó™ŠÚ•_Jo~őôígž˘e#Ga^oÍ-Ňâóm0ÜOhŁH‚0ŃqD¤›§vŁIKGB—*„,áÂČ/őŮqŞ´lÔ<¤ľ˜ŰYnĐâłűiüŹmTŮ4•qkéHdĂębĄp)(‘i"9ŸÉ6g Ń-JŽhąP,ÖűŘÇčďţîďhľ°ŤJ=÷ë•ţ@Ö*ípĎsRcßý÷ßĎä‚+ޏ"v„ ‰’CţJÄüEČí^@yH˘W˘•ËĽ¸N:‚…/őSQ#‚˜p!FX.ĂžŸ\”KHó^m($a%$:ˆjá++:DVÔ]ŽŻ8jr…|—sł Y۲ŃŹgݎÉóó̃´ąô,4㚏H/ú:؎ýŇôJ Q@ĺńDś ůÂ'VčkkÂĎ ƒťô\ĂÖ ˘@Ö`ŕAş;~2Ďj°VĆŰ Œ#óAţě(}cB5vDpź;b}jUodswFVž/QťÓ敷œć¨bd÷Š2*xĄDŮüÓq BőNně˝(!dďvŢֈâ㌠ÝÔŁ“Ř}˝Ď.‚éÖ9z"ňńóâU9‰2`FxŽMG_{€ë†A†çLô#šđ §=;Ȉriđ3 ¨ď Şű䖆˝mł$Źz4HşJsŻŐФżé}1ąipjŸČŽúݘ1lźjßíj9˘Ý›źÂiőŤü9Ç_ů|z fýĐďyôGĎôn[ąąˆÝ}Uld-cÔ_^Z1s+˘˘´ŒŤald‹tüŘ záĹmdťsÎĄ‹/ž„ö\x9G§˜˜šTó.úa…SouŮG4†ŒZN8ŞN”Ž”%ďšnO‘CdąWŮEÍŐu֋{¤,Aľ^ă“e˝ŃdB 5–ůŠVĘU~Yś6MŔr5™&ë]-tž—7ÄvŞ ;bž™™#J(P ŔéćźM›6™y7d§ýˆćëNźG}˙ďý!úúcߢŰᅨZGćhůĹ#‹öŽŘ ™őe#1ÁbĽEĽM4{ÎVj.5Xö 'sŹĚ-sФé4ŰhŒ]d0]y(`Qú‹‡¨nŽ]ŰśÉŰG™˘óÉČń˘é’M Ű}KĘźä—‚`1büíßţ-Ýzë­´–ČJ5á;˘ő_ >ú( dW_}uL°°}=bĹ aľZvQ^ĄŒ×rPďŠ\cßC=Äß%ĺ†8ďK`ć—K.|ŮJě°ˇŸ’ËűhŒĽ`ߚ+:X‘)UŻE }UŞu3`U˜o%m€hř+Š‹äzň/5rŃĂ{âĉ8Oź´™4@3킌 úůř‘ ügć?ß°‘E đŸąŽ({¸Ԓ‹^ ĺ ˝eŸâZYÔß5 “!H Җ`GŁ,ż¤ý„Œ!•ŹśĐFs?‚†&ŽäATÜsŻ1 (pŚÂć?ó1jB…ÂĐX Ŕ™KvëግbÝ; ;dCm‹\huY'*AŮčˇj´iôŹŢM7˛˘b}Âo„,CŽHAmţPœ Ĺ#NDţŠůnR~␴)S˛ô ťÍĽħÓ|NrFčt“cŹűuú8­ý˝ś^IÖŰ8ŸŰŁáę] 2Ž湝ěs>Y?°¤Lq+]—ô{)›‘  fôÝv QeręÍďŽ]%1óŤÂ„ŻVű҄€ü…”J"ŮČ5 lXűŠs¤›O}l‚ć–heĽŰLŒE„ I÷!‘-„ b""PŔ~ÓFŽófËĺ9_¤ĂGŇŃŁÇhzjš.şč"şä’Ky;ěB :÷BŠ$sH'[^_%sj›äęŇţ#Ç踹ĺMŒĎđ;U2ďVŠpÔ%?͇o‹˛śÎjźđ(oA•oçË[(%éW Żŕ9—ěâ–Mż˛´źŔď7":ŐŒí ‘šJA™ldŢäzÚî¨íţ<­S xyAúŘ˝1oá7l˘H R @ë–d1CJÍÇŔşľá ůŔ‘,ślÚBżô/~šî˝óKôâžC䜧6 „]Ů`x89ŽÝjsdşÎR›Ć§'hÓŽmt¨ý"˙ŽŇČ[ͅ%šŢş‰˘É:-!˘děa§Ó]—ţ<îžh>ĆäńúŽ-IąA~¤ĎŽmQŠÂŽbąŰ"‰NśŻň Żi‰,ů„wéYˇ)20Jr…/4űűzýÖŰú9Ľ5{ě1>ö˛Ë.cĄ €ó]ŇL$Š:l„(ŘBB/ *ÄÓO?r€łŔƒŠQ(ë•ŘA/Nz‰œqJČ`#$!X`řÝ^YćcP?Md,--qý…( ĺú¤ěĂ= lůáÇů<.tH@Ÿ™. ŽOŔđ A]FNľ˝ŸŃ¨—Şë!÷"ő‘íšH"mŕ—öŃdL´â)ýP‡EÂÚ]žĽŽLĄ:ź˘Dďí˘źúÇK›JÄMÖč7áb?î ĎŻ@ (P ŔF@˙ľ2#ąă"Š$˛_‡*,ä[ŁSԌł˘ŒĚóv€ĘJqëíä^ÉĘçÔŃI7z”Ląĺ„#mHˆxu# ŇÇpEÂzC”Y×|ý0}|—'´:\Çé !°uĆ3›52zŤ•°rGďÎ:eœN˛Ĺ@~Ćŕ¤í`ë Š~ĂÖ´ěFˆ‚üóGúźřUˆrwő<5Č7ëáÜśKŤvtş˘˛ˆOÖVR㌧˝l/Ö>k ‹ě l‰8bFČď׊ęĎĂ؉†9vmŃŻkKŕđˆ…`a5ö5ąŔ=śáƒ…F ű´NşqtŠcĆvƒh“´uËVÚľëşňŞí4==Íd ! dŮuÖ#ü¨ ƒERąÇ4›m~ݰh*›ěź/ö%ů ű—YňŽÉwmĘŞŢŚíUYś+ü–NÖNÖa;(H2+ 8cžŤŐGčňëĺ§t^[ŇJ3~˙ťęěla-P ŔúćADŽŸŸŸďZźźŢ!ÁüĘ4Ő)ÇvˆŔEÝ´Š6„ÉĐě7s}ťŃ˘Ľůގ×irfŠ–7ÍĐB넍’gĘk.­Pcb…ę㖐ZŸl.ɂ+CĂÝŰD ×$@ţĘţ,h‚Î=räHW„Žźşhâƒ\Ď'°Hˆg<'MjÁóöĎ÷I*šĹ˜×żłÚ ŠaślŮB (P @6 "śhz “lÔ;l˛şCČż‘ťŢ’Üš1Á"všĹůى(^MaŁ%ôłZXŇ­˘Ô_qęF‘Ţ§ŽŽJŠttËěÉm÷žeËűÉw{`(ä GČ(Ť–ĘĽň@ÇŰ{Î_IœÜB:oěŠŔF"M ƒ”>vÚsžŹ!œţçu'ĺX•ń§ëq :ŻŐ˝Ë™:lČ1ƒCrxźę˜qƒÓJgЧ­@ż‡ňĐoŔ[ŔxU.ŮÔW–lqăǎQŤÝŠÇnĚEË+ އăƍjŰÖm´{÷n&Q`‘l˛(u ›Ňú Ét#klśŽí–] ÉmÁ˛B‰bO”PäbăË"WäŐ-‹Đg[ĺĹG°űEÝхI“CŠLľjĹ|l4`Œ ­fËĽ,iÄ׊V+<ž”\ˆmíĐ`çýbÎiS1>ź<Ąű¨,–ƒˇ^ŻQ Ź7`năĹÍ:‚…ě[ݐöŁ7ţßOÝJ—횀ćč…CŒÝÁE§#%‰F˛°<ŕT! ¤n›_ Úś-4ť}3ľ—Œ|ÇiDŹ~˝xlŽÓ‰€dČ­ČřŃ"/ \¸Çď'3Ĺ*DrRăČ Žž1fę2t[x RX.RßygüÖĎ5ţ´Ž÷Đ(#ŔwŢI÷w—Úć áĂB3ĚłĘč6zucľĚfD˛€âąk׎Řޞ$Z„\'˝-íčŕb’ßŞˇu¨;F})đWťŇI;ía(’bďéöń‰8~Á v’2BHrm]Ž@Ź@0ߥ´:B…Ü›˙úĄWt m€ÉSôüóôqzŕáÇk˛ˆžÎ9á#ëŮ MŇĐKAňEż:Ń !‘„QžŁPŐŐc˙ډ˝ô.%ĺ(OoóÉčö|űéŔaĺHĂ:Ŕ8‚Ĺě4ë|É˝ä/&x5zäžď)°ŇldNÁ 4‚Eż2}VĂ;jtÚ a"M°Čî—čÖ+ËKtüÄ"UĘ֑Űąö cI\Óá]€15(WŠŃ^b‡°Žl0†Ń“}gע̓‡?^wŐŚÇžÓ Ż^bŸ!K„=%(Őiqy`N™šš¤mŰśŃYgĹśě×i]i÷őFŚ~žîY–˰KF4Vˇv}—nXGgETą‰M*+冮łżŔHoËZÜĆăÔfAŚĐśEŽ“‘aJőRüœ%LłŐ$I˙!uAi-ă¨jŃ:{äN´}["#:s ŹGˆß~:,DV>]ň~_¨jÁ˙űQç˙…ëŞ‹/ĽĂǏQłÝLüh”HŤ<>cĄ¸‘÷;Í6-/,ј‘ńęăcœ¤šŇäԁ R€TąpôMmŮDőÉ:ĎýH´#GşT]V1á[ևţACǨT5žÝŮ$ÔÉúą5Á–•öŮĘwŽÍ\ ‚E|zŻţĚ3ĎĐ˙ńg­¤ŹŐtNq3IKÓ´Đ9A&!GşXýÂsfö/ ű‘•>œ  I¸(óKTŸX¤ńé šÝś™Âv‡–Ž/@é0˛€;ć˜ŮżyŠjSuŠŒ$Đ$„‘ěŻsĺ6_š xťV^Déď~¸=ţ=J_˙ú×-k‰Č㠌,™B++rm”#Îţ´€(†˝„Ůć;âĺ8ů­ë@iÂwMĐu´DŽ€B…ČpÖ#ʃŔ'Ó Éb˜ "‹\ĐK9ËSô¤=ĺ{V ^MŁźÚŚŃČdÔkr„˝BÂJű šCŸ‹r%R†&Kh‚…^Ĺ!ĎJď˝bĐă (PŕLĆČĹĹ%˝… (P`˝AVYŽ 6BO=őT×vTäéKÎ;Ÿ=LKËˎ_áěB4@ôGcŁŔćĆâ2Í:jä˙€ę“4łmuŒĚјgş5.ۍ-_¤‰Í“T›ŹS3j{ÜrStÖ~AÎĆÎJƒÓ…ŒíŘŇľ;u=OçËŇäíłÔ‹ô­íÂ÷oŽ6Űzņ!XřNZy9EŘĚsNűŽö,ž~Ń%'Rƒüýß˙ý@ƒ@/ÖržQD„ř~đŻßď>ýsüJZŔ€đԓOŃ9ťĎŚŮM›Ź o |0 ÷.ŒcUäuÎrÉq(ĺ}ĺ+_ĄĂ‡Çz™ ƒecřě8˘ƒ˝FŔĆBDqŠŽ¤ Yĺ Q"âŐ(˝ZŤPÔjǎzICÚۅĄŽz!ŠĹÔÔTrAůW˘X;vŒĎ1@÷'Ÿh˘ďyľČę{2éúƒ’.Cę(Ę!>:‹ ›ˆm Ô@™č‰: …|pŽń(CŢ i~QČř-‘D4y&/刎^ĄĄßWšWyŢ Čř}=ŤtŰúÇhh˘JżăłŢÇAśd'[֨ʞ”#)čgô>´Wńëä™(ÔjŁYŮX Ŕş†?Ĺٛծüs˝óƒ>Ç8yHHîţ´ű;×QŃnˇYZ?¸„Œm Ă.˘9}Ŕɤm^=âAÄW ńAE‚Đë>ƒČŽÍ"bt˙rďkpř2}”"Ř[ŃrŹÝÎ W˙N¸L•pÜď¸OĎHĽIzWŕ ɖqĘňœs˛ĆHŻ´ ťtéä>t9›fgě^v$Ľ§ű:Š/ÇÇ: Vőöib–ŰŁ(UM˛ńÇ6€EýY‰4IqŰöŹËÄ˙ž{CŇÁäÇāRÔM XĹ'Ő ăg);źb×7hô’­ű~ň=§­ƒä¨ŽŞIń]śH=í;Ŕď™[&÷jűt@MŁGĄŸś5Rí;QŤF4ćěö|ľ ‰ĂŞŃWkBśhťIËÍś­”Ë5ŤđZź3ťĚůó”EâȲU z•g÷…Ž“÷Řď§iű„=ÎF0őÇrš!ÍEqŮL,QďAË~I'zűÉęjŤ9p}ZsĚÜTśś;W WŐÔsTöˆ<;ééԓqíVťăFŸ ÷ýݡ‹=LĎĽŁ[č(:ĘoĆšoÇ69ŽHŃIÍmöŮŰéĽR…JU=C`°ť‚8ęÍ­VJ"“u"G+đrÇ`rD†Ea^ $:đzˇöîÝKŸřÄ'z3iüP—횐žţřcźDÄŐX+f6‰Ő7-d9ZŚ |Œ6ď,Ńřôľ˝óÂ{Ź™ë[ËMZ)—Œ^0i.@Ô\jr nˇ(Ôër0€?Dýh>FUs-*$ӗXĘęÚ֎n|śBř´Lűۋ&YrŸ4]m‚ŹŹĐéüÎĐËpŁYSţvIƒ€ßpXăĺňŇaœŠYʉŢ&‚~/džüňű9>ŠďăO¤VÓ:ůńćŘT ˝€kŔl/(ét§ ‰ó™É>§ŃlŤŠ7Č:ş†¤+ѤĹBrľ‚4==MǏg‚ĹĚĚLŞń@śĽę8Bä)‚ňœ|ä9üóˆ:Bz~†ô B’" †S}ßŇĆ~ŠݎŇ6(+…őŻ'ϔ‚IŮD)ż]łÚYęˆk€D“EŹňŸłŻDk…ß/äţ*ůŤŰ8Ż_č㳌RyƋAƓ~ýpPCĐ dޘ×#LƒŹë[gJW˙É)˘×ř­űhŻşçÉ… ^`Tqť@ŽÜšdŔ1=)ˆRäŠÔy#p>ȆČEýeQö#^­!ŤF}ůPd-Mz泃$šË}ŽÄxE„ůцü’JYhw8ne?xöPglËúôźˇţˆúmëks$cĂTŰދŠd‘–=ä{HݎLŠS8ŚuçîşD‘Čš6—ŹčWŠťNé´ňD’qb˛Ćiâ=}ä+ż óšńľť÷$˙:ٜ†@”|ąz:ňkŢű0ś~­žrńsŒ‚Ě+uنCűšŽżş‚{?ž~F2¸V lzŇ$őŚ_^şěĐě3ć c')Q:ݐëýl;ÖžƒqŹ" p› Ş+ƀZ˘&WŹî g1e8‹5yéÔCëˇ ů"rˆŁüňwÔ-I”ce›čVRś]t“lďŽ|Ӎ3mÂN,ŘîŹć,Á¨tĆaIyďĘ v9żŸ˝b-ŃjEq_ěé_~ŠZß$vDȰcj˛>Ć •Ę%śIZůŁěŢ—ŢŁc#T„Rś‹Hă0XňD@–ŒĺكřFx+ův#@BŞŰÍV(l  (0ZřúI1ΎśMם~ôŁí{ 䆳wžE‹‹‹ôŘ3{í9/Q6Ó2HŤCËsKź€}fűfšÜř }ík_Ëu€űBşFžÉw8Ë}ôBŻď;ˆ{ň” ŮöŇKčđáĂtÖYgń›"ʆD7][ë´?ü0ÍÍă  ‡ÁB ŁZąƒ…œ[­ÖȆÁľç'ŠŽ&;HYp8Ąl1ôIű šő'˙ääd|ßú/ ×Ŕ_ʧUAň•g ˝ĄR­xŽu•ŚÎ­2×zœuD¸ăSĎ3"‰şÍŤ+¸ť:z#)ôŒŔŽŘśA‡'nDśHöRŇPA×y)95`Z WéÇj;ƒ\ĄĄ§üŻsA¤žššH“Žű|gwDЍ"Zž'˘`Ô/morZ_Đśľ%W¤ĘÉA÷XŹš×! äţŃóQfr}%° ęŔ°iƧttE°đː¤ý'&ËVŒn]ŠŇxmŒĆnjnŹP°{E“–––ˆ6SĎzöĂčt íä]ŐŽD čZ–LaĹAœ2ÔŚ5ňő÷€l„˝ŕBě:éhŁtŹGđ"ĽzB˜^Ż:a–Ξe—é§Ż%pšfŤóÚE™N˛~z˝o–¨b[FšFsĹźŻśż ÁBútĽ„Ş×ŞÖF]*{×/šßĘ>ĽŢ“Ž}”ś;ńœ¸ýń{T¤Č- (›÷‡ś1xYࡇb˙ď ¨˙Őnă7Ýwř -!­łJqŠ9^l0N i{ĹřăŽ/PŠR˘ÉMł41;M­†ńCˇCę4!×`^7şČRƒýŠcӖdŃ02wkĽIa;˛!%"\$$qŤjj/Šíů0ĺ.,Q{q™ŞFWA,ƒENˇ‘*™xíô*Ž@éӾō‚ C°"„Š}'8:$œ˝ň›xÎá/iäܕ–űĹ ĚafMˇÝv[×ő}g˝O¸Đ×ĚB–ً`ŃKéôéY)zo“×МúôާéÜsĎM]_-mcx¨Őăś>xđ =ńÄ㌭L|@›ŮĐ˝öť„Ô“{D¤ iüĹoސÁĘw;Ž8!ĎXH˘řŕ/ŒłR›#ľšÚ/A˛‹ËôäBŔ_p<úĘ$„íé„ôc¤„#)9ü>ƒ{B¤NpŸˆ:˛…Fbk_.D“+ä˝BŽ'ďśIűk˛K˛(J˝§ř.ĎőC?⌎’œ‹s$‚…OڐkČ>yCŽřĎT§Ť‘:ë> }KHú}J H݄Ů; Ü6ŠŁî_~ŽĐźşúB˘üŐőÎ3‚ô3˜hř†‡~„p°¤ď_úG)˙X\˛”v1HHă Ę ţ{4¨0žŐŽ (P Ł ŚÎËÚŠżĹđ|ÚP­Vbň3ŕË0Ö)_MćR÷ßŃ:ěţŁ–dąąvDHÉrŻDs›K´ ĺĚd˙Œł„đąÔídćS}ňŠ;Ń+ ŻľŰÝ$‹ž:Şy&Óӓ1áÂ^?}€şĺŤ¸_đ1XőzqłuqwՍhč@ §ĽœmÝ÷"†ł@,lzăHœ~QWĂä=ăüöËŞ4m¤ß˜/rź=¸×‘ĽŹ‹t]/ľ;´ú"!}ĆŤgăZš”[ž€ď)˛ŤÝ™laơąŞqŘ6ěâ‚1^ÔłBƒ _űt§ĂÎśżń‚4śˇŘ–ǘƒ|ŃV–…IÉyžýDƧôłw´ŠŘń݋̒˙ŢgéhëecLŸ˜‹cOäÝGŢ!Ăö‡4á1ęŠ/ç]g͞‰)ˇŮśŃ"ş—WLţńí/ąKiŰŠ@Űc`ˇ[ĎynţDjśmÂ>élfěě(….őGŔ|-9TÚL潉/iÉ%Ę'ąý…Üó-MĽ@^NđÇMŽĘłąxyáӟţôPÇošžĄË÷\@?öm#3ݜ×9¸žĂ*UdĂžąźlüŠ+-Z8:Ǒ,&fŚhrÓ4G¨hDËÔ1ţP ,‡4Ű´tb‰ĆŚĆ¨6^çţČ$‹–łh;‰CfÍéĆZ"o9>4ÁÂÚ^\XĚß>ĺÄIŞÖ6¤UfĂ,Äš.° €:íG]ĽąŔ68oá<׍ńĺ/Ž‹€ýÄOĐ#YÄ'eh%ŰďúŮëPÖcô8”ő~éč úúžąBŸŤ•{ż?řc‘.K×_ďĎ2śe˛ĘŇm§ŃuŇ5t;ä3,ŇeäÉ"ulĐU)’•“ š4G˜Ž˛÷ jÜ,P @ƒAK7k2‚Ч˜¨ĎŠçĂ`5ó]ä+˛‚NhÉ2§eS_–“˛řB¸}óŒräĘŮ pĄůcGŹčN‘iż'd Y“ŢOńo-„Wž˝.ŒB'—śťt‘túĺ˛Ű:Fnžš™ ’ą8 â´îą7UnĆəű’śđ?˘Úšę§ľĎ÷Zŕ!áńóÉ󣓟łIQÇ$śś ÝjôŒúß:sóç-­7`…;“,Ě 5ŁzGeK-˛‘##XŹ5‚@ĆSyg•ţŁăţĘX\qďˇ~™ł†ál‹K VYxřşž9úňccľŘYždéßŢnţĚýr˛Žńí!뭝1Á,(ś$ß~čŰVô>m˙Á_ą1Š}JlH€,ƒ}JěXţâ•8HŤÁc>˛§RŠň;”ŇöŚrl€ îřĚi‹˛čÄőçĘG™dÓ (ĐĹŘY üqúĆ7ž1Ô9 ÎŰ}6“.}ę ă73ţDD­*ÉB1CEôÖ×˝ž~í˙˙+źý×˙ŕ?ӏ}j“ă4>;Ĺ €"tąB1ĄĆü2oŤÔŞT5rdťÔ"jZR8Ej9‰ akÄü%Ç÷L‰îŇZ0×XnPE†ČDřßČ;ě÷í¸ŠAhu?ŃţÖT>ĹŘ0 6QZ“(’7O€cÄ żźźœ:ŔąóóóąÓXœĄwÝuWfĐçjĺC ěyçeíÓ+ä}ČąoyË[čř@ŹDüüĎ˙<ýđ˙pWňĘÉŤsjťúňÜóĎŃΝ;ůgšZRÎâä÷íŰGßţöˇxAť!DNÉ9íqźD‚°ů ĂŘI[ŞVm 8ßęΚ‹\DçÔĆłk4ŰL–Ç3ë=@ČâüH+KY¤yÎř‹ş‚d#‘OPžg('ł&ňŒ˝œ¸žƒ\§C˘DůCŇŞČ=ŁÝqŸB„Ѥ­¨ęíŇÖB”Đni{MŽŔw\Gę„çčóE ŐzAˆ1xNYď“6źëç旡ďUúmDB.ĎWâuťdyށŹ{ÔÇúcž>FîÁ/K_Óż7˙ŘźctŮy}S_+Ť^~yâ—Y=˛Ö$/J¸0JÝ÷“Wß0ăXĺ (°VŔüććc˘I}Ž>Dů٧!B–*Cś$ŸŕŠyäţÚđô"“j¤F^ ‰SƒPä{źß…Ź\'…qÁw˜aekäB†fjă6˘^ {Dzż5âˆ.׿îú˝´+v6ožśŃĂ"›. ×=un"Żl]ž’/3Žä\ďžhuXŰx{Ó]“ř^#˘`Hgu×3E(ú"¸4̈jűšŽÜ0abĺ<Ýň[Í;Ö1ăNŤÓŽmý˛ŽTąx¤ěVpőš\2Fšq.™ŁeěMśw ‹<ÝqăúŸ›čŽţyx-ĂPţł%ŠŽ}Ďís°zp-S"͊ž,í’Ő€ýű–Öq‡Ç)žFěďˇ;&ĎF Ďę~Y)çtjŰ|¤éÄi°şç-SčȲ@LoˆGˆ~SωQ۰pěřX-&gŕbOd{UľbmĚ\f%–k¤ě0ęžĎőţř™° kgđ`5Œ¤ (0 ťďËwÜq­.8ç\–v/­Ŕo) ČUWúżüA:kÇNŢöťú úĹ_˙ Ýőőű9CmšŚEťdômDŒ$¸)ęŮeŠiţŸ\˝Ę2Ë68ŚZ!"˛I:bů}€:űZgóŘ\L°Hžcű€Ń*F7€~P)ą]§T-3Ł˝Út&ŮB-_žb™q-ąaZ¨ÁY:”˝ŹŽ‡€+Q 8Ňý"pĂY-d€/}éK)§f*ŹB—ÜŁŢşţžŁÔż7OŽđ1Ź‚“wœŢúěłĎŇŤŻ{uꚶ]ŹSţčŃŁŚ}î çžŰëlh6FłeÉ Zyąäq|[gŤŐގçQNœŃ˘Dč0~rŸâäׄ4 ĎJHRqúűÄżÍQoܗôI‘ç,^-F5a ‰DžgE.Pg(ŒÉ,ű‘˙í¤Ó‹řÄŔ' 9B“tűk㡤ŮÖżnC>ĤĎôJ"ÄDŃJ˛Žt˘ßKÝşŸůQ"¤Ţ˛Oúś!b…NoHôA/„ÔÍ'Téśöˇů}_ˇ‘´Łž/§üsňČY}1‹‘g ëőťßöám$Ovť´BŒČ0TdÔLŮŞ˝{Žh0ɤňŽ]í ( 1’86ňŘjWď"•=üN-ɲďâ̈éD1áHËqĄ›Şő|-yĐ)ţ‹Ś!oĐÇme^ŔF n6÷DQœN…÷;ýŠ›.H;‡ˆú§:ÓňcÇéSâXőM€ yŃ×̶͛7q=ąň¸\)ťHů×××Nˇ]ľL˙˛‡z!’ăV‹éŤÇÉ žéç9zĎÚ !MäwÇA‰ig|J×чděw;ýľiô>,â4=žIľRâ(˝mÎB~[C¤7ZdÓŁFźČ‡6 ˙ěűٝVۖ iBëŁ%÷ŢĘśDoőÉLBŚąc3tg;’( É9Y)€úˇÇÉéRkú2ws\­^ŚQ˘ŸŸľŻ—˝Qo÷çÚ^ĺŚ|jB>™žŮëŮb×JłÉ6ŰzĽĘ!ˇAĘÔf#ąoĹd)U?‰ę*$ ůëŰYÓ}?Š=,YĐÄçąí*ŕß•j•ߍ°Ć6ËĆň 5\™–mJXĺt“ÂzŮe^Œ¨ Y(P Ŕ(áύ:JR Ě×wß}7­˜Ó/:o÷Ą'ž{ƒ,DöđWřD6˛Ůo~ŕCô˙űľŇ_˝×Č%šœž¤es\cÉH ń3uJ.š¤ńs5Œ<ŃŠR3vŁK—ŞVâȝ¸ŘřßD„Ë"0{Z§)¨ub‚łw$uűéÔNGb鲔Šę†Hˆ–‰zń˘yYÝÇ.vÝ8ö¸ C°đÉ žĐ,„ 8G!|Ě.O9áľS˛^ŻÇeásçwň +˝Íw^÷ ›ď+˝„ćľAöĄlš7‰< ۲žƒ”!ib8%Šçˆ×)6ÖCŠŠ›U¨ë~¸$Ľ€(x>ĄBoÓý^ż?Iz—ôGŽÓ슍ÔI—äŻÜłoh•cóRthƒ(Öşmô{Ť ":ę‰(ÄŘ/Ń?üzÉß,ÂD–`ćGD‘ň˛Ň™ôSŹĺ˙˝—śČŤKŢؙWž>&+‚S?)JŘëŹŐ‰ƒÖ'Đ!9ťvţÁ•Ÿ5ž¤‹Ý8DőŽnçĚŃ#ÇhďŢgéĐáĂňş÷šyrŽt ‹<#FŮřęÝR˙ú5™œš¤ÝťvŃŗ\ĊJO™ÝšďĽ#ôÂÁcf\VWP÷sďm—‹+ČܚߣŁŹzHůę śĎÎLŇŮ;6ÓÎmłÉFŻLMpÄkŹ•ů-QźäÔäjĄ*L{rÝ3“zE”M‹ËüŠOĐżkĹmĹĽDş¸ŹSÜyşŐúĎ8gn~™Ž§…ĹefâĂqĎÎ{c̏B‘K”|ŘÚD™puÔo)ő¸&‘Ć´Ť’V“š™Ř@¤Ú“Ü3ˆb˛8LÂŘ8oŤ35Q§í[giĎš;NŇĹ;d•¨„Ó?–çí]š:gw†äمąłÎ ĚsęDşOmTp NóŃc{ Śýžzí¨wF^cňž˝tŁHČÔaŠ<ŸYl9žmŰź9‘sĂČ:şäÔt™Ôń]ć<ęŘPt’;Š˙5ÔCřx˘<ç'1DqyĎ2҃¸Ţ.Ýi•í™-W™}AŽďœöpťâóýOĘqęĆqŤ“ľŮ vŒëDŠ+ ’Vniƒ¤Dk‰â¨/ÄŕvÇ-2ż[Ô´× ĘœJ MLƜ=W ­/öÚŚĄőĘîgV"ëSNĆXť_żÇQŞœX’ „ź! 8ô3_ëŮGc­ç† ő˙•‚Ń;i´Žžˇ/oż}LŠdŸgޏD‰ÜŃó˝\cÝ—žŸ_12ü"ľ*6:D'Ä{›Ř@ÄÎ$„ŸLáŰClľłÇŸä'˘^ŕŮ B™$¸ě2•ƒRœYŰ4ĺ/PâEHÖ_J\ˇô‚¤ž6ď`ŘšŁ@l;{Á^:~ü8÷Y¤ żä’K⨽ýđ /ĐÓOíĽ7Ţ| ŔGóío?Nłł3ĆWqNüž(p2Č"WċAđť÷™g¸Ż7qjjŠÎ>çlÚelPĺňhçö؜Pŕ”âţűďgťÄÉ2ĆĹçĎ߅dÁ˛n`gë_ů_Ł?üÝß3s~™Ĺ…’#YüÂřeúÂ}w1AĄ>9ΠšÜ N2Mhĺ/-@Ü\iQŠj|mF˙Lß+łZűTœ‡]֓ÓbÝ-[‰C´‰Ć‰ŞÍNĺËxN œ˝Kűń,ÁÔČdőg™ žŘ•€ZđQľKÖ§thŁ`CE°ČZݎíx)d嚤üŔ_í„Ö DÁÔ)E€o~ó›ącY;bzŔ•ÁŘwDűĘkž€ě;…ozӛbr…‹rëˇ~‹Ó—řĺh2Ŕ0?E‡ýöçĂ/sŮ9?ÚŚ]÷í{–zđŤ´0?gYŘ.䣴š8×uTۆ6_Š8Ží•l¸X1řę:á7ĘR€ÜżQšp"NlýL!â\‰2 I:ₔƒrABŁŻ¤ÔĐ÷pސ§ű}JúŽ8éýôň]§ś€PŞÓŠčž+ĺëH0’:CúYčkđĘ×nň[ęęGzgĺG)ŃĎÖ_äšBŚAD9O?{?5ˆ~ÇDÁŐă‡~o%bî÷‘¤š ť z|đI şŢştűjň‰OšđÇ7Ÿđŕ+ÝúÜŹ1AÎóËŇőÍş†A 4§Y÷”‡Ŕ]VZĺ-4hůYcvWŮj˙ziŸ/G$Â2"D=ůÄStË-ŸŚ/Ýy=ýôłš ĂŕÎ ďřA§Cwş˙nprghď~Ďz9UÓNů-[6ŃݏœŢýîwĐ;Ţńšž™ <4ŒBr˙7ž˘ĎÜő=ňä>:rtÁU1íĎuýô˜)ŰôďÔ<ÍJ•.#}oĽíÝŃâ9ňG2\×öMtíĺ{蟼á*zĹĹçP­îćV9/bŮ?.cě/ł#ßśp`Eńő’š“.‚¸TNŽ—ˆTÄ))ޜ;#í€ős¸gśşn6yF ˘äx×FYrˇœ„4Çç–éЧ_˘gŸ?HGĎSŰ\ż…Ôg&ľšËć= y%A›?*ęŚ(ż ăy9` KĚîo˝źŇ0Ęł 9ŽVŘą+bš9vg89Ďě'ÇAš­R˝§ÂŠzdClř‡Á˛„ŠPË­¤Ä§Ńlń= <=Ɵ™ŞÓů{vқßx ÝpÍ%41V÷môČR' ĽmeŽ´“AŠ68ů}$–5M?ŽÚóœ\zęÄöSD°Źv\’Q!íД!5PL„řő$ŰY¤aĚĹ%p‘/d #‰bŘś+RrWtąEÇ_:ńś­3ł+„eÜĚÖYťĺ° Œ¨ImđŠĘżnVY ť`Tňđú•Óv‹čúÁťŢquÍ [&ulĘ31d … AśˇŮęôÖx>/Ĺ' ç ç×`ŕ `ęđřŇćIŤkZŇ>Vr%ë`‡A”ń˜w;F.ŤNĐěŚÍŚ´#RIňg._÷×˝"y߲źöšvż>^œĐvîaŞ ›guZ§Ŕ“ń\+%ţM]-Ň×^;(ăŠ1ĂVËŐÁ.i‰Ô+u•ăÎ@ýCŐ-óř ygtŸôeáľ椚ůŽŞ¸wŹÝią<†wŻZ­ń"yT×3.gŔúgľyžœJnžľ‚ íf"EĽLUNYŲČ\­Ž‘ý–É ZÄD2iá'póŠjë~żţůçéÖ[o5ś‚§ă÷öĐn¸ŢűŢ÷D˛xđÁéĎţôż§ #bQ߼Ľ%zřáŻÓöíŰé’K.frŐ>˙Eţžk×YÁ˘ŔHĐ-ëˆüEt÷]wÓ'oš…Ä)Žą}Óě&úÎď|]}ÍU™QāŢcu"o}ë[ŃÁƒŘ˙gĎóëć—K=îƒ ŹÇFĚőí9ßČ%mzü™˝ÎCü¸?ó…ĎÓżý…˙“~˙ˇ˙SL˛€Nđ;˙ׯŃ/ţÇҧďř,•ÍŠ@¸ďDMůśĄRâŁé4üĐlTȲ%Z”°/°i9´˝/î*AúKW7ßo~‘ É&oAŻ’KQ`5ŁČEĹśj™j“u&‰ŕ=i{Scq…–ŽÍłœ{XÔ˘ ƒ 3óhÎĹÇvkƒÝňŤ7vËpŻ|Łöo9 &Oœ8ąBăšđüÝtąŒZĆ露ҤEŁs4mĹBćŘ ŽÖV)Ű\őp¨UiŹVćHmQŚ—Íy‡ŽÎŃžGéȑ9s­NœfoqižćLŮPœá8a˘dW8OՌâşeó,]tîvÚ˝c‹‘ƒęFśŤńłh@‰m€dŽâJLˆnľ-AšÁ9Á!ߔť¸´L'Œ˝„ŐË?{Ÿ=@ű^ú"-Ě-Ń{Ţv+čü´Fd ő!Ď[ˆđuPˆXŃíGhăQŔ1&t$-Wq”…íƒđɅc÷ßýőˆ„1A+H7G¨=ád;őJĹ@)GNüNr˙śéA,(­S%Ó@ý ÔőÚ´iʎ;ĽÄ9¤‰Éx›ÖgƒT]‚”cˇš".ŻËa=ň|ůýtúÁprýk-3ߜ&U7yŸ‡hšžÇŚvęIŔ‡íł–dňĘ+î?=uK₠ă*Ćl@ČDÇjľşŸËnáI…§X&`´N0Y óÂÉ`PyLËa}Jě’×|ýYƑ؉ŹĘMĆ"!Ou§@H‰H4ĚDsrcňɍ'Œ}ƒ>ëhuL‘™5°˙˝Ę řĹ×Ď´KŽőśçý^+@ži4Cšœœ˘zՒ˜üçὒ…D’ŽCĚÚ.“e ó1Čť#óžî×ÍŰ06ŘČ5p†tR.@dĚHR˜Ř1*ŽÎJUŰf ű“Ÿü$GŻŔ"D­Ŕť?Č˙üŸ˙“Î:ë,şůć›étďŃÜÜ<}úÓˇŃ+_ůJ&ULOOÓťŢőNšeBU'ě×óĆŢÇ{‚ţôĎţ”nźńFzó›ßÄýďŕÁƒĆ'÷şĺÖ[hËÖÍtŢyçѰKBżzŕř l/†÷S Œ{ŁBéBÎÝC/>LÇOœH< ćŸO}ćv>F“,0ż˙Ć/˙ ëء~á3L°@ęxÚA‹óŸJd=ą ňâ#űGÔă> =Ű*$Yü‚Č—+Łř_?úikq‰´­ Š”lçÉúʃ†Q";:[XĹؽƍŢ_ŸçăZ+ :aî'|Ářş¨źŽm+ĂbĂE°€ 6ćŕp…c´Z­Ś›rŽ8š}ĽÁwŘďۡĎVOtwüó˛Hr\*¤ƒDuĐĺů‚1~żůÍoÎ%W|îsŸËlßyŰŤíßxFĘď¨úűňƊi‡9š™™ćc‘#×ߡ íĚfٞ3¸ !B§ćöÔŃBtÚ]'™Đü6”HyŽh@*šŽN3"eę6“:ŕˇvŞëýú^5™cTđŰYűuŰčö’6‘6Ë:OúŒ@GމW3ër|Ǒ˙\äŮéďrœ,?MŒÔK ˛€6Ž C“Ś|řÎ.| TűQ$ňH € 41퀿ˆęńCˆYrďşmý÷U§ńßUÝ7u_őIţű(u”ňĽ]2wŞYmäüý€&Iý|2Š?nőBž1.ű¸aÔ[č‚Ücĺ:ńy”aύ…„ 辎űϸOŁ.Ż@ś_?~‚>őŠŰčŽ;î0ă=güĽhD Z—źB˝k“7—Ů÷2‰agÇ R<^&2T˘ @őÂF˝Ň5Ŕťzěčqúď˙ýočUŻz%˝öuŻîşîc{ŇÇ?űzn˙Ą”‘ßŮ:KĐ7ťŇ3ŒČŠq5RNţŒqڗQt+ :DJ +kÎ/‘vrZE Ťůž˝w?Ýv×ĂtöÎ-töY[ôMđŸsŢ +GÎQB T˜9Ě\€Č„Pććˇk Ä6pîZ.3C%ˆxŐ{ĹŐ!4;š\3DP>&_”ů8Ëv/ËX,2FŞő=#u”j2G‡ąsAQ†k&^—œ´?§ôpŸçÜ żcœôSÓ5Ÿ°2,B1‡ź*ŮFŤ8>ß •ĺ6٢KEbĚ(ÁćSŻbUł]‘ }Ý>ÓwKUó^ş‘ž?p”C&ÂL^.Uě]qBMă$Ŕ9ćÜj˝B;ˇÎŇömłœŽך™§]ۡĐVŁźNLŒŃ˜9† Ć(ż¸h} MZXjRŤÓ¤•F›WP@öš™ŹÓŘć*_{É(ť¨üńů%:řŇ!Łü/Ё#ÇéÓ_ř*]tŢNşüŇó¨§/rĐď…S$šĹŇŇbʸ•÷ůÇ؞_ľ†…(k Ú8ÖŞ0RQ=$öhúßož\’ČQ–ĚšţF”ŠÚfuŻX×ĺđ|"Úźeڎů 'é`öZýÓ/&Ď4ęOވ˙]˝Ěu˛iE˛1ŠBÓąĄÁýe¸Łl‹Ü>ˇŠkô'W W(Ćw¤Të¸( ifžłŤ^+S­Ž4§u›ƒ8(ÇşŚŐ=J/ł1Ą8/1r);;É逶'$вD"Łh˝JŢUy*‰\‘8ůőMŠżiűEú÷ÚŞF‘÷÷ÔĂÚÉzG˜ć}Ě)!gŢłűúëŸi;§FŻsýzŻľžk#•9Dťą.ąü2Ź•ľAĘE#…­I"˛FŻĹ#YśĹěw%§~ĘâśÄzy&;FŔŽ9(r6ËVlÓ٢Ůíű!ď˜+v„fČ/#č~ýěłĎŇă?NoűŰŮą+vű .¸€"€žˆc‘BýĽ—^˘M›61ń„ ąíęrAˆřʗ璘ăaŽętůĺWpÚsDĆaűŘÇůx,úĂűůśˇ˝ÍřfčË_ţ2}ë[ßâw÷˘‹.˘÷źç=üüĺ_ţ}ăß ýű÷ó;~ÓM7qD‹Ë.żŒvěÜÎ×|ěąÇé _řűpvěŘIoxĂëéŇK/ĺ}ˇÝvGĆ[^^âE˘°'źímoĄëŽťŽ Đ}7kœ i˖-ôţ÷˙Ď;Ŕ9çœĂ$ż{SŻŁ/˙Ż˙őżčľŻ}-]vŮe<ÇŔwöń—ô}ß÷}töŮgӋ/žČQčŸ|ňI&߂ŹŇ"Č`őĄC‡čţŕżŇ?ů'oăžűÍo>J÷Ţ{§đŮśm˝óßIçž{6G źďž/ÓsĎ=Ë$¨‡z˜öěŮĂQgđţ<üđÜúţÝď~—y.¤ý˙/ĆźQ~Ľ+.źˆžúČ7ě˘`GH€!,“dadßüż~•ĺ¸[>w•Ťe&N”‰ -bňwéEźÄiCⅺąîA.đ^Ŕ¤@ů>ŇT '8Ń"‚ţcĆäR s§Cy>%ňŢYƒH}ľÉ1šŢş‰Şu.arvĘň>Ž˙}Ď´Őg6 ÁT˜É<„™,ä íXՎA1ÜYŽ@q,"D–ŔwüűěgŮÓ+´óWœţZ¸—sđ°’EŽřÍßüÍŽČž°ŸV~łˇe(ĺXęôM›lo8çŸyf/ JŢW§zëAÄ ŚęvĘ;(ĐŤĐüś‹Ét|ϊŚçpŽ,šCÎńS8řŽ_ŮŚSiřÎtFcŘ4,yČSŘş•łn§ąžl“T8ň[—vĤ!“˝D~Đí.÷ŠŻŻýţjA&0貴Ł^žËóŐŠLäË>š^–S_—A\×IžŸ6pˆžÓNÎGĆ8‚1d šoÎ$‹<újRŽn3šOŮŻëœő‘ąAߟžG=–ůýVžűa—ĺżësü:éąIżGň줿HY˛OGMń릯룗‘˘—ĄßA=děxtaícďƒWś8$ňŽyǏkmt*P‘§žřĹ/ňřĆKîG˙Ü?Qď ]żxĚaFCăăýžł9Ë#o_büď.$‹ě2 _}čQzvßăаNűú۲„RU"_^*ĽĆ8]7Ý.ś-ŇÓ,™+s{ż1Á•ncB˛ńWęáć%ä|ôÉ}ôŘŢý1Á"RBßq3ž79‹Dčü@“)Z‘#V˜Ă@´ŕĐćďH–öAňŠLD¨ŕÄf7fŃ ŰCy=jŃaň…Őó*üݞSŇNҒ’Ąő3v]$N”áČ,aüěĐÍ­ŤVBƏVBTaL¤I Œl.K÷SďB” D|@dć˛jŤR”ĘĽ§źă4 =Lƍ<=5FľŽQ’mĘšźŇagžĹŃă'hďsGhď ‡čĹĂ'8‚„í}žFUÍ8 ‚ŠMíQŤÓŽłvҝE“S㦙šŁąń*ŻÜŹV^%ÁaŘÍýNMTiq˘Mó Z6uą‘Œ<ĹaÚ#:1ˇ@‡O,Đü‚]q}ô؝˜_ …ĹEjś:tčČ şűoÓ—î!7™Ä!œ†–Sä#ŃęXŁŽMq™ŞTJéypŚRŠžB›l>Ҁ˛œ‡Ő0ŽçzˇC¤C‰ĘjÁŰŚë*‚L˙˛|š“_…¸mťJ†ő°l= –Ď„¤nƆM“N.nÇUë^Ľ-ŠřŇőęŽëĂ&Ů1(ôq‚!ź˙˝eŕŃő'Ǔȸ~Ÿ6ęCŽđwšh’šCGMŞPE"¨d\7ç$~ŻUČ<˛A›ň"ż41V1ăî¤9¨MډŠ99}]űNľÚ ~§fŚghľČÓóN%wŻQÜd|č’C”)˝Í‡â‰žëjśŢţؕ¤C 2ˇŹö~łú@/ť•ś čߍE?ŔÉĺ6[Ą„׹RŸđ_šœŘ´´ý6üM"ĚX›ŸśáfٜtßĎl9ĽÔyşOGžŽżKĄ•h1ˇJZ!YĚ_ßéźĆĽŁĂyľúĆqR8uĐăůáÇů]€C¸ŞČ~ř§0ŢÎÇżüËżäw¤ /ţäOţ„~ę§~ŠŽ¸âŠ”ý$†Ď|ćłtď=÷Ń+Žźœ‰ěŸůĚgřZ?üĂ?lěŽcôŔ_5ÎáçčőŻ˝9˙r֗ţáţŁQ^uŐUü^~ęSŸć¨|ď{ß÷góeôőŻ?Bťví2׿”ż˙ţŒ.4FŻxĹĺ´wď3ôżń›tÍ5×ĐĹ_Â9ţęŻţÚ\ď‡čꍯbrœĐ yźň•ŻâHř‡HüŕĂú\*P@CűE0#˛Áťßýn&W$曀.źđÚž}+ű0ˇÜ}÷ÝtţůçÇÄř!`“{Ë[ŢJFNźĺ–[ů]şöÚk9z̟˙ů‡éř€)ç"&JŔGóŞW˝ŠśnÝJ_űÚ×čŁýożč˘‹Íťń(ýöo˙6ý‡˙đŤTŻ×čąÇcÂÓ÷|Ď÷đű˘ÇWžň.ÄĄ{w~çwţýţď˙žyŸ*éN 'ýɟü]pÁůLnS)C—ŒÍŕoţ毙Hňs?÷s´Ń ýżŁÄŽí;čŐW^E<ő-{Kd=Ů$ ˛$‹ßúŕŻň˜zËg?mS€Ŕ…ż,ëtlJC6’ŕŒÄÉ6řşôÂgłłPF-wŽüŇN{i…ń˝:*ÎĘ%–8.$ÚX•fśĎRmr‚Ś7OSŐŘŽć‘Č[¤q&cĂ,ŕ80ţřŕÁĂ(ÂŞvűÎK §…nÝq 8€™é+’z ŐđíÚŮŞ?:U‚'×ŔoŸ\!×öӂřőŇB¸ŻřŽ˙%ám]Ëä7BÚč:Úvc‚ƒv8ăƒçŃé¤S'ˆÓ†qQlt4ĆAœŰ˘âyI”8äĹI}:݄8ˆő3iť°Úůî˙ĹĺŘ{°÷ŠëűŠ ˛Úv ڍĺ#+bvÂűu•íź‚qf†Y“YŠ5¤líĘrć:-Ú ĎH§Áq;-ďŠô˙šËą:rCVťúýeâ^4)Űu˝ŇĽĎá:`™BaŔwD­@…Tƒ{śÔif¤ŸIšÂ֖ű—c¤BĚĐýZď—{ŇŰtöŁŹhRŠ&€řőŇĎ\Τ }]ůžź×QÁEď"“ܗ܏ôŮîŻ2Ő×ôŻŰ ýލdÔŐŚöBň'č[FŽ1i„6Ąľ64( 1wbŽü ľĺäú]u ĺƒL_ţ!ą<nl ĂX°çât ÝxďlÂÉřo‰™×4çC!ÍÂÓűsę…0ŇŠ"ëCg‚zGKAŰ đ0‹Ü‘Ďtúą(ă>ĺťűbˇëďţ1™H ´z,ˇěJ=˝=qčÄ-zŃ ŽžPd…Ä9‡HNŽ ,ÉÄy-`R˘9ŕw‰Ł*tœÓŠŸ“2"K˛€ŒÁí‚(6˘ŽÁ‘0BŰÔpň×|,ů‚Sˆ8XYĆIW7;ś‡q3đj}”çňOňoGq.`ŽÔĎRäťwŹłÝl‰4ńJKtôř=ńä~Bîk{­Mßi´ÚLp¨Vl ô…ŠŠIššg™d|Üë+ß'HpŇÍ-6éčÜ5VBZiv8uËăĎ0Ďd‘ DŽŕţUáúʘk”MUKU~›f&é˘ vĐ+.ÝEő1r˛\Ő=Ű“A`ÔDJŹŻ—ÍgŒĆj QĽZvŤ8C:>ˇH‹ËMzńĐ :pčľ›-NE2ßXĄĹF›Żß1áé}i-´%ľźÄmďdw^aZąO˛ Bsđ—FEGޒóâççށVÇö‘Ňjœˇ'!ŸŸJ€ŹE–ŞD˝ˆ#ž^E/T.ąňœý Ţ>vźĆX‘VŒ!|yĽ‘*Óׇt}|š_#čU€‘Žr´Œ‚T–˙’ń|­ŻTĘť\Żöó,mkĹ#~ćĽŃn翓#–ŠN¤u-ŔĘ,ÉqbłŹU+,Pš!Lébö{ä䍤_Ž×éؑMl9‹N'üwPëX“Nɓű:ęˇYŇš’ˆ’¤Ę“\d’î ¤ľĹZ—ż:ř:{żăÖZě_3ŽőpΜjýĆVœ ľ¤ő'ă t„TT°'ă#xÇĚ;™Č#śŒ 8vö¤ÔĄNIž9äŮ6GĘé´m*8Ńw´=H"m$ňŽMőh ^ěV=Ńo œš÷Ul˘Đ_ňŔ˘T°™Ţ˙ýěţˇ˙ößňĘ}ź7ż÷{żGŸýěgŮĄ,ĺa\ßż˙EăÜ˝^sĂkŒSú;yŰŮgŸĂÎäwźăfî;‹ßˇí۷ӏüČqsóÍo˘7žń´cÇÖk‚ĺă˜oźIW_}ľů\iŃ nî˛uýŰżýhóćÍô“?ůOź9nœŘű9ĹÉ=÷ÜK—_~ť{÷nzűŰßĆőżöÚkčg~ć§é›ßüfA°(‚ď׳ ť—Mż9›bCŠˆľÚ6ëűE?˜ŸŸcRJßůďä1üŚ›Ţ@ŰśmeHx_÷ş×ŇÜÜÝu×Ýü.€$„wńMoş™ţýż˙úä'oĄ÷˝ďűř}ƒ/ä­oľ‘aŽ9Ě60Dr˝ě˛K9Ě?ý§˙”ýšçž{ ̋x׿ôĽ/q” ›0>€\ń§úgćÚ˙@ťv^™u­đüóĎÓZ2ĹŽ;izjšöżô"}ű™§9’hŕxşş=›dńŰżňX`ř‡Ű?EĽŠłbSĽĚŠBJlKƒ\B˜°ň„[ä\*Ľ%í#‰ý.ůÄÖYiRmSÚN™ĺcFä śB–7†=,bëťRsĄA+ĆÎľ8q‚Şc5ŞŮjjÇfŞÎLŃYć=zęKŃFÁ†!X`ľšv˜˘ " uVĹŃ!ÁwjŠłTrăÓĘą ËŔím—zČyYNMßń)ÎJ„úٟýŮÔőpސ+´œĺTĚuö@l tˇÄ˙&ëŠ0¤ %’qh/qžâ;B‰ĂĎAN]K1‹+6ä™XĺÇîăĚ^›Z%˘“"hÇ´8ĎEyÂqňWrž…"˸'ýA"h#Žďô>ÝSÝĽ­ľŇ.őÄ=abĆżÁŽÄ{ ďAżGÚŠ/Ä ”ÝâŢí˜ !!ü•ď8VŢ1‰ Ś#€ Z”]@RtHŇ92ĺĚ‚pűˆ.$Ä´n‰Zƒí¸w\  ŽdEƒßDqŐѤőę@úěÓ)WG‘vôŸ•ź26éqDŻ#ÇčąD ý]÷ ý> )C"aŸDĽ‘wM÷ýH;čߚh"űS!rŐqYĎsčžî‡öЇ¸o§ĺŕÜëęqş‹ËŹK^˝ýzůÇĺ9 @plqčľx-˙H čŻňnj4šÂŽŚwnqőnťcăՐvősŠd#`ľŰ.’ŤYmăŽčN—s0`ĺ˘ä͛1Ô[­WťîIîŤdżtÝťEƒ’]e.Ńârř”üż:’ƒ/F<ơSŰc˛cŤD<ćKČa×n1™ÂĚCćű2œI瞍`'ťm‘YÍÜ@5˘Ěd œ×2ĺ5ͧíž#”žNĹ<„Äó2J_#čТŮßt&j”S5m€ż5S">ULu˛q‡Đć×žĄ#ÓŮgBœ‚Ä팉ö ć_—z€ 2Ňn˘ÂĘŽ"‘=řC‡ŽÓ=÷~ƒűhĆlÓFsóË´‚0ÓfžŹ›ž…%šž¤sĎŮI{Î;‹śn›Śúx•WN‚˜9wašM‡Ž.ѓĎ˘ÍŃńše:6ˇ@ K+nέRľ6N•jÍFŃMkEŞ”B#×T貋wĐ%lŁ™)#UÍ;Đ2ďˇi––Wčđń9:jƜŸ2ű's lœ}U{߼2׼eę~đđ=ýÜA:z|žž{ń0ďßźy†öěÜJUóźžÚw€9ĆŃ+šĆŢlK˜ľA,AňW/çR"㗩^ âPß0ňŒSYž×<;,lYD§6äÎ “.*ěř’Œé' @<вLŠrdi#'üq•ź(x^łFî>qb>ýź’bÜ)IŻÓşťOéĺěËZ%?,R¤‚0 ˘xLĽ"˙9ڟGÖ1=Î[FEV‘ِťŢóDí˛i Ú$Ąn{łLŁeôܕ%jśÚźâËĘ:LSăS\A>kKÝčÉM9ł6A’xkäqÝďăp°˛ ń<ŚÇWŽ’ëxĺŮ*+š!ćťżäél˜Ž­A8ŃwŤ}eť3]_*9;Ŕ őýFśĘáËčŢÖK^łgfúbłcيQŹCPfݤ,6&˝˜JČKˋl§Äž8˛EXŤ¨ëËšˆdѐ"b>vv^kCƒŇ!K,˛ď*¨|ěÜ]˛˛şZx$ăH™W˛Ú÷e|ŹJgřkQŕ4AŢOŹź—w °‰#=ˆ]IżC8Q/°b>Im‡ď`~nŢ8’/Śéi›Náú믧?ů“?ĺôťw[-ˆ ›6mŽűđÖ­[8íÇmˇÝΎhD1ł\Nޑ’ _r'#%ÂüŔЖ-›šp(_pÁœţé΅`ĘŘźyG¤îňć+ń/áďÂÂ|Ś wĐ1xŰśíüţÜrË-Ü/_óšë馛Ţ/D_㠐5ńĺúë_mŢťî]ăč.xçž˙űż‡Oý˜™™fŇҔqäă}Áwœ‡÷7šĎŢőEY?ó3?Ñ2ţćoţ†ŻńŽwźƒţúŻ˙š#ĚLNŽÓ/˙ň/ÓFҡŹĐfŚŚhâü ŒtœzěQcĎiĹbĹ­ˇßÎÚÁř$‹ýGî˙pۧ(*‡Vˇ€<ůZÝÄ­;Pň|áYśKßş#}Y|tÍV|drHż†Ké y§˝Ň¤•š%šCD#37,ϛŃäćYšÚš…6íÚA—żőFÚ(Ř0 qćÉ !‚Ś5ž-ĹljĂ@gđĘ€8.Ճď˜lý•Ú?e€V>ýHž‚Ť–šŕqă7ŇOţäOĆÇH˝@ŽsSęŻ#­ČęňuŮţľłÚ1.“˛Š0f˘Ńhg°B‘PÚG˜ŐVa)§Vökçł}^ä>‰9ľÂ“˜sÜK$QčE˜Ň„á-żĺZ%CÚ*ëţ}G‰6hňŽÜŽ  ‰§: Iz›Üę AmL˛ řŠr˛KşB6ёC’ç“8ďĹÁň~c…"ţ‚l#d í\Ňi^tŰj…؇lC™Če€í‰V`{J]'Mdź÷`o˘l1 ŒńÂwNĄ$şŒ( ň‘ŐROO䣏—zˆ˛,ʋ~G“Ô9i‚‚”á“*ôűH=ĺxŸĐ eúŠZÔGž+îí¤‰2Ň'¤\Šłß7ü1IŻDbŠ~Žx&yĎT÷Ç,čž&ń×'rtďÝwێ[9ĺä 7đEneUŕžâœËŞSŻzf+şOd{˛FݞРδ‘_9HŔň]ćléózŽ˘2Şľ ML֙źŮl´Ů9ˇ˛Ň$RŃ4Vƒ”Ź¤ŠĽAz>Ő!Ÿ‰ěÉ qJäňŢqů@É-•+ŠmŠńŞTË­gŕBŽëzHÝlţö´á،ˆřfBҤcŻŤŚ’ßđq :E;˛+ý‰ÂśƒuĚZjB‰ eçHm—ZF*S šÄŰ7š`­›ëœX$:Z‰čHŐĚľŐĐjÍůËhţŤ…)DjćÔąŔFĆ@Ť“ ƒ(NRVő,;"ŒíÉś>Xš9‡lŰ08â%Q,콉˛éŽ HâśeˇsFüÖcĎŃâň“•šƒ ’” ĺJ pŞ­,erÉčťśŇćŮIšœ02’iţš1‚ož˘ąÇŹĚĐD4†CXó]†F^Ű? ăůť\™ ą23]hĎîişţęsčŹmS`ÔĐ /,ŃýěŁăs ÓŽÚľsšÎß˝ƒ*AćÚtüĊ)#4Íş1°TM=ęŚnD SżƒGćÉ<Úbęłyf’Žşř<Ú˛iŠIˆvQ5×;qĚȆ¤ŁƒĐš,‚ …]ĚévâIŸŻVËěđƒÜľ¸¸ÄO˛‹šľ.fĺ;D#+Żj…|–îśçfîů‘páĘš•^÷ÉŁ#î 9.Ť ťĘż› gëäÔTŹ;ĆÇSŔbJy#D„t™AέYăŇI#Y“úyňčnŁAäÝAeâ˜|—ćžd˘ƒł˘š$Evm>D=ú×.8ůwt4°ĎËęV6T˙ @Ô vk‘Ž=ÎcÖÄć‚î6DńkŠžŰ Ó2Đ(‘§C űާS{JšZÓ†$…ŐĽpů„P›.ŸŁĹ2b°áÉ1N8ÎČł­ýĆŻľœ7!7"Ľ™•Ҋžî›:j* ŁŘJ_†mś!ťź˛Čö-`ĂÂń°ŕ˜jľĆä†|$é=°2šÝiń*Ó(Lěe(ŻŽ¨ŠlO˛N;+m !Cä.KҒúű nřjA§_.P`XH˙Aä Ř'í*÷t$‡/ůËźýMozSl× '9…ˇłóůś/üWVŠËĽ*kgXáĚ|Ľ0ŕČ}ňę8pˆţŰűcN=ň†7źŢóîďŚW\q}üăďs#öŢ[čöޒHžÖ:›_ú]Ń  ź|ŕ˞Y:ŸŘ–ńÁ°sçNzđÁéío{ę¸C‡ŃC=Äd˛/XâτéŸď˙‰÷ÓozÝwß}ôŠ[ogŇŃů/˙…ϡ㚭‹Řďźí×ňÎ ,ĄOȏƒEHíß@ůŻÝëč˙űó˙'ýÎďüýůŸý}ücĎăü'żőŰż§?Ůh8rä­5ĐžçíÚÍ}ça&Y؝œ.äöŰy8űýßúOąŻşńďüęŻqˇřűOÝb eÎŽ˛z0÷I{ëĄQâxM‰bď´ßJíu)jwb{—~O˛úŁNç@zvŁC+Ń2Ű­:Ćłtb‰Ž>ű§ÎÜ4Mç^r!Mn™Ľ‚ E°Hd˘ÔNMmćP ŸŽ ĄŠrľ˝][?’źâ,ÖűĽž"ČË~0‘géŸ˙óž2 šâsŸű\WüvČűí ;yƒl˛]‹÷ÄáWńÂ5Vń$cĂ!OŃÁƒb…ƒżU<ŞÎ¨Ůvi[˛…uÎ[&”&`h‡ )&tMD‘6ŤvřJۊ"ýlős{ŇýH Bş\ýźłÎÓNÔ^ĐΝ,Ź@Ž­ %ň[ Ě1ó݃0őa˜Fƒ ÉŇŚB  ÝWRńĚ%=¤”hÁaŕR¸ŕĘXŮYŤ–YYĽ¨cę `eŽ&ôŽŕx!s\)°¤…¨cś9^5ÇQĹnžĎČ=8„Ěd…@ˆ蓸?yć`}b’ÔdÔÄQŚŸ@}h#‰ä D/á$5$tŁ&IBÚVH%:˛†ŸEŕ’2uŃő”ëČó–wĆśqrmÝĎ$ý‰Üł šmy¤ŸHľQŒĄë(}×Oľ¤ŁÍč:ůŤËą_MâĔ÷Nę˘ëĆĎ ‚A)˝ßŸÄ ĽĂŐĆ#ĽúbˇKŢöRŚ2ŚŻăßG˛Ćý˝Ÿ\ Ŕ¨kD`Żś÷…úźŽWN:|=ňÖ qjËű-óśÍtč^+_ŘŘV7cVÓKŐhlźFČ7Řian0s:ĎMyĽA %÷W|P:œČ§]¨×Çâ­L˛€GΈ`^*ą’ăkPn)ɁXš„O`ůČ:Ó+Š9]ŒN9nNw@nüăz˘ŒŽ]!‡ßHŐZ/š•8ˇŠ C¤y)L¨ :śTE°oZ1ÇÔŤ;á7U"ÚZFT âvM]›ˆŒÂHňƒ‘ĽÍ}N[Ör=˘͐ćVLí€ćĂs/ØÚÔ˜ÓŃÂÔmŹläăÍo‘%Ľ”qćúKfËxTćô!ɂӠ°ă5pú˘ůVŽX™ œÂˆIśł͌g€/“Hv•Sä "ŰoAlˆČ­Itm‚nľi9.ÜEű_:dŒ''¨ÜŠRĹÔň ŻÚşâ<šŸ_¤›Ď1:>żDŽÍŃŽGhrŹn ˙-Z1}|br‚űňââ =ś@‹ó j›ś #Ő$ŒNŕ"†˜v2o G´¨ň[ĽFg‚ö*qjš zäŠ#íâňK7ńźžuşÎ+ŚWš6%FŤrŠ‘%ŁÜ.,Vhól‡&Ć*´}çVşňŰb“ śd ţ KüŒĐż§fŚéěŰiœWÍŁí[gœŤqí漟9Żä­ŘÔc d1+§XyVR˝ÉöÄđĐJ0i?VíHšź7EtƒS ŰV ń #"YA ďMŻţ‚~yßű6š:VG‚ű•côąâpt Ÿ´ăCúŁN"í¤ŰF§ÖgČű†ó$ľžóő(ÉWÉśí[â´- 4đvDލŽYCx­bœ5gŔę¤Rm#Ď (őĂ=€ŔĄÓ”čÔSn•ŒcÉę™0΍&d!^IPŻÇĄżä|‰ě ý^—|šUt]uä!QřD/!Ăčô7š !ď›ÔWż3ş "e4БiÔ>\S÷{žSߏO¸>˘#Ěđö źK=+&P”X&p6ÔLűWĘu$ĺdg˛ŽŐU^!~Ł ¨N/ŹyŰŽ'îű8zh(Á ľ-tTę {‹×ŠŹ1ó‘]"…‡š\>”É ŰlUhl űĹ9„!%ě=ŘkD‰/“•ĚU%GB Ů(9‡U)ƒŤÜ’î*–UX˛"Xŕ|kpu9•Ý<‰Ž’zN‰lÄc_(2QČΓ1ˇ@— #ŤýáDZXGGa)ěmwmxpĹ8…LyUă|3ĺT W™*ăe:§Pݔľ€4a™ iwĘ4QAޏˆS…ÔA ŕh %š[îĐ\$Hâ$S漙13ßÔěj&” b†UŕlPô…œ†c2°‘+‚(ť§ Ä/hƒlX˛E‰ŹÓŤmNjaŽÂźdŽşWc‹uč v,´gÎŤ1=3aŒť™0:fd—éé š5şNš*tÝŤŻ`rÂ3{÷s´‹—§ý/Ś—^:ÂĎŐp&ĐT8W&V@!6s4G,A? Gô°7 ç7W‡ĂŠůĄR§Śůűěဎ-™9ŇLůŐú4˝bO…fÇǨižĂä¸yĆÁŽ…móűÄ|•ŽĎľĚwDă2ňd*sĄ-›ĄŞlœz‡MŮ!-5VĚ{Ő ă ´RŁH›†œœŁ‰Éłh×Y[ržŹ%„X$uăţVŤ[Mňl#^i*zŒ=McÜBťÇxH­ĹŔŇ}•‘]Ç:›…HE”ň8{D¸“…}Ýґɲt¨^˛ĐÖ-łülşöˆŒ°čră&[őĽ’{[Ť×&OĎěĹ"ł uÂPĝ“úÄ{üž0‚6đˡdŸ W†0n d•(ęvČІ6óf˝ÂsĹÔÔ ŕŒŃbWŠV­™c&y|Ľ ÂiWńbAʄqčň{$éH"rŤÉlš+;ňÁ$ŹŤcŚŃë"ů`¸ŻpÔŚ2€°×Ą˛;>iˇx"Œm5yˆŁůé4sˆB“Ź.šcĂ}B’Âx]!ŻýQĆuRĺĘ"™î(R÷ᡍZŮHĘ]żzŘ06ĽAĐK˙̚ﳎńíRƒ^o-ЋtgłíˇOîÇبĽ6:/"™5ŒmhyyŢ|2/hl[ăl›’?Š6Š(eŤňŻ™U^ößF8NßőŽwŃ_ýŐ_ŃďýŢďѕW^Év98}ąji7)î†n ű￟>üáÓu×]GO>ů$§ńř×˙ú_ł=¤ Řňîťď+źÂÇ|öłŸcG3ÎżýöŰ馛n˘mŰśÄ×vţAœÉp"ůË_á÷ ‰{ď˝7śbţ„]ůąÇ珤E[ĺţčŇ?řAúËżü+v€űŰßć2~ěÇ~43znĂŕ-oy §ĄůЇ>Äß­is{ě1zç;ßIŻxĹ+xÁĂľ×^CŸüä'yěFĆbi!ˇ"ĺÇG>ňž[2)) ż^~ůĺü 27yßsĎ}tÉ%—0‘âcűŸsńĹóű‡yď}ď{ŮHĚŃĐö°AçÔń­o}+ۗ@žúŢď}/]sÍŐÝů a­qmĎîłiÇć-ôř3{éŮý/XŸ™‘ąoůô§˜Üđ{żńŰ ÉÂüţí_ý5Z4uüěż`ä˙„`ˆ2pń(˘ÄfBŽÎöÁČIÇ"ÇšďiŐ×Ů;Î)ÇdČ#L qŽNs[ś‹1"řĚ`‹Ă˘^ăwbît)p‹˘LßjFëYô†`!Ť uČ5Y}­CßkGŞvNŠĂT D:Œž8ľŁQŽIXbÝĄđý¨:|>G”řüŕţ`j Â6MŽZpT(ç#˙'dâ\•śˆó‹ĽÔ*÷śËٌźBö¸jĘ*/žźÔBVȊĐďŔĎś“8rĹ9Ź•yÖâ˜Ö}C!y+üďrŹgt Až2Ş 4Ú)œEđőţ÷ŹrłŒšR矀ä—DߖÔÉj”0uŸÚńŸ<ßvÜB’ąe$í9;3kçmqŸłL˙$rKWl­ƒ‚7&ľ2Żň)uąü:’֒bDČQBŽ@Y¸R˘H¤yŚB‘„”űb„Â’,4aH \ôxČń>1FG¸Ń=6hň~Ţ~d Y.}LîK÷‰rkĄŽh Š-íĽß=.JĐuÔőÔuÔżuyú]Đ}ÍoC96RcƒŽćă“=ô÷¸~\łŠ÷? o'Šş,čvU3wNŽ^(&δ0‘ńnöú=(˛Ć“V´c.˛Môŕ›"ŁL­,‰;˝-M=JýTY%)8‡°ůgoťÓHĽÔ€ÓwÂ8‰eN ]X;‰юlX]”Űh5BaS•Áßáądu žP˙pňO2ţqŒˆ€Mţv< ›BŁeîĄâĆv'8•kl¤ Ž^Qré@JI$-|ˇăĹÎqŽ„QvŽ`”Y oœąŒÂ„ěČĐ+0Öˇ[Ô ZTę˜ů)@„†&Î]í EJ˝˝€uwĆ?D[Œß›q\O•­{ĽV˛ŤâąÖý˜qÎ?ˇbć5SŸ=ăD›Ł2Ívő f‰qsNTéĐ SÎ s‹‘%Ҁ/SŽ÷čaĺ FTűĚą™őf[˝dsiw~ÝăkĘ/čţ-YŸ—ŒgÇ).@2á”)%Š#EÖ öɁ>ĆůŇ+UvfsöNÚ´y†‰3HQ3?ˇH›f§AĺB&Œ>÷üAşăއéég_2}ˇĂĎ´RŽRő’š?•ŠĎd˛óK ýsĽ‹yuUťKfńuŤnY& m›gí*~Šb=€rŠTŁAFqÝRĎ뮕<—´=­>šBR†ŒŹ^Ž SlC$čzőŠO3ć÷ż˙'čŢ{ďăăQżďřŽď0çŇwü#˝ýíßÁŤéwěŘÎďäŐW_Iżň+¤[nš…žxâqÚmœ—ď˙űŮ) :‡śŁÎplďÚľ‹ čLîç~Žű;ˆ?{÷>múŢNúg˙ě'™,QŤŮ~őC?ôCܡîşëKÜüÇœn˝őVÓ×'éźóö˜ý?HŸůĚgčśŰnăĹEˆb˙š×\Ďç€Äôä“Ođ{ˆžŠH.°ŰţóŸă÷}őW~ĺW˜¤[ŐjâŢÝaäÂeŁô#ꪭs™ë&ďđ°€ç]ďz'^ĹڧxžW^r)?Ť˝Ď?Ç Ű1&ţƒÇđĺ÷~ów’íFž˙ŕ/|€>ó…ϧý•kcۨÓóE÷ˇf§˙M‘)"JŹ˘štÁśˇŔ˝ž"}’ŇœldU8,î‚0Lü0§šO3¨m YgĂ,ÄÁ&/„8„ŧëBvçĄvśÚa퇺§Ľ8ľłÓ7@ůŽ8íHL9ű˘|ör–p=ˆR¤Żá׼â2”!$>S˝AR&ÂnŮĐÔvUfĹ2aÄ­Vƒ8şƒ&´d)i€väęýžâˆ[ç@Ç3ç, ŸqÖó‘r¤~ž1PC_W“$Äٮӕčs|ç2EŽĐűłśúě|ĂŚĎ*”k`đ mtěŘą˜€ ë'÷ŁŻ/ďH âl—´5†Ićđ1ă,Űśm+;ďą ďńńą¸QdĹüíJ^<ƒ2ŮđňeŽ#>Ř'TŹl:'“&*ŕú*ä9â~$*‡–3„8ş†"Č éH âЗ~%:dŒ‘6½éwXú‡Œ5ZQÖmŠIúŮBĆ!qHY:j…~'tů’QžŸ&rŤnżÎ÷ ýÄϤ )SZtZ=^J›Ę˝K›čśĐD }ďRmXŔv‰Ź!÷ŠŻ)í(ďc|úQ8!€œm֕ČPŠŕ\΁ZíOńąý*ŕđńAWea˜ńÖ'  s~ýŕüĽÎ`m;ł3wó~߀ŞEęž'ż#Ežţü˙˛÷§Á˛eŮY ¸Î9>ťßůŢwß/^D䜊ĚěLHZ2 iÚÔHĽ€A#5ĽŒnşLt#™ŃfPmmÖfčGc2„2fІ LTŞ(͈,II*S9EdLo~ďÎ÷úěg¨ő­˝×ńĺçşßáMqńáĎýşŸaŸ}öŮ{íő}ű[˛r}”#G6‡¤K‘!i#HýˇXČŞň Ĺ+nâČ 9ˆpƒÁhzQÎeáx˙ (\u( -'đÔDÇzécB?™q y+T =HäÉ‘(UˆZEz%~ ŮϧD*y2F#ŘĺţAšäý`ęÍ4†lą;G˘^†4 4ě ÁĔXrť×¤žR2ŞńOƒń_=ž´FBŃ2ťTë< ‹Ć‚ôŠPTˆ„\R É5żÎăx#!‘ĐpAFŕ‚…€F\ÖmŻöąĆß]âcňٰčŻâ14¤AŻEn }Ÿë&{žŒ"5áG¤Ž‡˝Ę’"ä—ťŒú&Č”Ę ”a×qŒp6ČŇm÷éŃĂ=ЎVŤNn_"âß úÖkwřž–äZ˘ľŐEš/ˋMŞ@%Ż?rƒ{éšÜÓçVgNŢşy[Ăý,s{(Ë}u~v™KÉő -…+ŻĂçńu-. ľb•rJGm˘ƒnH˝nLýžKIśĐ,Qk=ô5Pó`̍ÇŐ*ƒ{ËTĺcß㻆L!ÝC}Žb硚qx ’Ç'=MóŃOÚVjJűO˜Qe*H˛‚âRš92i’rýĽ s”óCS~Ľ§cO3¨€úÉŃžĆ}ńäٲ‰ŕșJ˜×=’~(IsŸLż›śď´żqęU~Včœe™uÜ'˛,8ËW'ŘŮëqbݧüÁësZAá|?ťß|<ł‡`ęONjđ´ËX^Ię3?Ÿ:“J3ˇ=úËi‹úpż5MJ¸…˘”§Vę}jC—}›ƒĽŔƒ¸ęä|„TžaôĺiććźH?őö;GÔj6xüYĽľeÚ?ܧƒĂűI˜Ö)DjłČ‘!2MđL‘˙œĐŹţ3˘áň}ľÎ+efdĽ,ął<~Důš?ĐgŮx[gă<ҏgEBĹt˙aLęz<{?ĎՊžżýnúötŚţEýK™7ۘp=u˲cęÁ'—Ď–śgüę ůÝ_A~îR!ČÂ׿=œA|F ˝d”+§ÂÇׅf— ý7Šć0ůJ×[‘œ1ˇš=kCýčG?*ŻY†ś e źŚć¸˙Íó7'žűţď˙?Čkš˙yßMq‹ż˙÷˙>Íí˝mč;?ňň+2ćżs÷uűN&+MOöŸĆnćâ’á$ytě_d>=náÖu'2„ 9ČŇ1ŽbĎ7—FRďݸÉĺѤ Čq—Q˙ůYžĽ]‚…čěÍVPPA>K†PPŚŤÇ5ČcÁ:líT%ÂńEž¨>1͊Ěd=>˙‹ń/„ýieńâ'~Bś9݊Ĺ4€ż8‰šő›?M@-ţç0 'Ž­rß Ç9MůdBSJX€Ů–łXŢbý¨é}Ńű­÷­¨¸`Óvä żo6X$^̒9R ×Đ_ëâę}[ćiő[źöłÚńŕŸ~lů”/‚ÚĹýP~\ʏŔ3Ŕ* ^Űú°*z6e…’Œo4ę´ź´(2Xđ2Dœß[6›RF•ŕ0cEž9Gfđ÷Kë˘0Aײ@ĎšŇǂ#6´śOŤ´ĄuŁ*'ö:đť*]ŔT C 6‘í/´_AÝŐ ´>­Š ĚŞnXe ű˛*8E]!a‰–dďP^Lôq]x˝ŞűŮt ú^öŹ*žŠíŰ*IŘţĎOëťHčąmşX_ú˝îS$ŻŘzŃö‘¤ą[%…ţ‚œĎ˙%ůQ5€™ˆ+M’ÉĆȞ‹9gŒői'Ýę,p÷$ć‚î9Ŕ*_~ÁËŻ‚źHÂÍqţŁżĽIŕž.čúx{_ENnÝzÄőV’jëcÚŢ9ywäňE ő5îÝ߼Űwҝ{ŰÔ őćQ˘9îAT.EčS“ČőGrÎ̡/iSŇĘTcŸŞÁă5ˆ1ź(!őE™ëˇŠô'!ŽRZ­ăúy¤Ę@]ičV @a Ž…Ŕű§’óáîHîÓĆJ…VVtŘň~Ŕ Ü@nA–řÔ}\RŹÜ,JĂż;f€šÜ—žôSěß(ť(WP +υ”Őgß§Z& đ˝ŰöS‚SLűꌎGK`xÂÉÍĎ`LjxYćg§b‘Ľ§ƒĄ“ž’K"ţeďž˙óTȏWö|-ŸOÔ|,ł%;ëÍ ´ŚYJš~ě—éŰ÷=óýľ‡gl§•K‡˙T iEmš Á\ýƒ(ž(ŞHßި7ýÜ%vލü]§ƒĹ´ŘôŠ*ľœ4î+˛,˘Ć(Y,,Tig4 ÝÝÚŰoÓŇň‚äë^\\ÂĆѤ4¸<’2#IĽ,9ŠüůOo—úĂM—ô~ŤęŒ#ľiĘ2WoÁÄ\Ű}ŻýÇäXRě˙\ýâ•>aŸ0.çřďÂďĂ9׳ž/Î\4`úŠiťŸJˇ~ÎU›âWÖ,ń,uů4Ă"cĆ1×)Ő: >;NH˛žœ.ő‚ž›*)ăĎxˇÁ{TĘU'curÄüďb|{ns›ŰÜćönŰiýńťď_ĚĂĘOfŸk|Ţ?áĂ/˝L­zƒîo?5“˙ďű˙–j:ż‡ó˙ú˙üˇnŽ%YI˜ó´+§¤ÁA(?Źëú¸QŚŃăŔ-P \¨ÎÚŘoŸígëńÓüŻą˘†¨ŇĹńo. ÁBĺý‹ű`– dKŹP€O ř @ą‚ŠŘSgźb[ł+Î- oËS@ň _ř‚|Fţ2u¨ń’Ę ŽY6źPüíp>´€OXEYô5¸SŹÝwgg'' ŕú@t°Ş&říččˆ>|˜ˇ´n›&D{UťŃśŽujI¨7Kx°‹"ÉŚX^˜K‰Hú¤Šę„ţ†kÁËĽă }ššŮş(’‡đŽASÁŕPńP‡%6Ř žŢck–DĄý•ţ]lZžb۟EBŇűŹíŞŘoŰ}ŠuŠ}zŢć}HY%ô3sŮŔ•` “ŠÂů3ˇĘ^ƒŃ˛;ľ2śš6ŕd)ŃbŮÎbĹ61ˇš=-s~đ˜DA‘r3˜HV¤+ű=Ć6ٞ'•<9C˘`’H8IÖňc~ybC–ĄxĄĎGßbú=í࣠ăĄxň\XHÜęK€áP)x˘ůcŕŽ!˙Xř\oňWč•/<™Â!1J¤p*äŻS€rŻBB…ť6ç*UŠŘŸÂ JQNž(ç‹0ű*҇a…\âeŠA,“ô#%wo“%Ă]ęźCĂÎ6% Ň :ř5¤4ćm˘*Uj”UŠÚ\ăß;…Ęp¤7CÚŹňXşť‹Úň'ř>¸mńő´˛HžsH’Ÿ€ů‰šk#PŽ`?Bň´gT+ÔŹí2Úăaz8`§ĚőV]:ńĹágîؑ™ßY€/o™FŽ]:’EFđ~8 ‘ćźwU˜ôüś€áŤ4 öŒÇČşio÷ˆĘ ÎCbqiA­Ś´U´ÇVŤA/\ťDUơŰ=ÚŮ=ä`ú@"Á¨łH!ݐDŠ4H„őĎîY ńŔ] )Hjő*Ýuęó=L ŻT „˜~jĘőԉ3Zľ•”ë‹ËRsˇ¤Q-Ń_đîAL~B÷ˇ0˛ĹtԎé­Ű [ô‰-ĐĆJƒÖÖeÂ\oTŔŽ Ao§‘ë ˝ŰÁ˘é>€I™cӚ~NöŁTˆZ•°JńĽŇť})ĎĐpíčzÔo"˙ż$ |ĺSĐ}Nó>äٛ˜Ÿ¸ăfŠKő'+v3GÖľjpşoŃ'Ň{ľܧ1‘ěů-Nňťžš"ß-3ĂŽißĎŮ%˜Z‚Œë¤ń¸Ě|ďöV{l_6{ö÷}âtç('Ć݉ԁ%­:ÚjčŰˆŰ캁NŻČĹ+†BŠňˇ’tîPˇ<¤(íđŘźA‹QĂ­R ôyp÷EÇ$őŠŸ˘<JZ ËWÖyěAzíďĐţţ!-Ż,ËŘą°Pá>˝/ŠÖÜJú’kXhby8&@̨-çKćóF%JřŽôľ–açčYĂus¨‰f.Ÿ5EÉx˙i~čÓł§Ńǜ˙Sę7˜”>őhńŤÉ:=Ťç2ÓOĺälł(cŠ96M^ńłžă"ŢDÁńĹ!.śËs§që+H Á+…•uaO4V‘ C7+\_`úBŇ4”# ŐPšBépDĂÁ0ƒşŘ—#['!M‹ŁĚmns›ŰÜŢďölúň,Ł)ó-űůÂN~Ÿ‰3yˇ0ŕ/^żN˙ťďű>Q2ęqę%aţý7˙ö˙ƒţ=cĂęwŒS şˇąĎ ~fŃ3+XŕâOŮUÇÝĎń ‚ř˜dhŮ™ă$É_ĎĎęcvš¸n‚ŔĹđ•÷‹]‚…‚‘6ם­Óý0u˛2Ê@ŠŽ*Ç1×ÖÖdUü4Ôbš")`2L4•‰î‡s~éK_˘ŸýٟĽů‘™Řďoý­ż%Ÿg‘,Šç}Rł¤üăç(Űsáz@:ĐóčŒÜ*Íh*ŠBÍ%ŠeŸĐXĐWčb:ýŹďš"ÁŽč×s*nÉ/')X(Ą@ˇU‡-ŻŘML<ĂđÄ{c÷?íXEł×ŁőŞĺ›ľŸ’b°ÝţţžźŠ÷Ct›ŽÁ’/đ=‚ď˜B­âć͛"ƒUŤ!ˆíž=q"/ˆçl0č‹:…%MXp׍útÄ'GÖq@SˇŸX_zÝ ŠX2‚Şghš/^{í5ş}ű6äÄ *H&&ŰŽ"YQ8 d°ČĆA'ďYAČńýÉďU0ŔÉőP'äcľŠHÁľŔ­`Ž”Ç ŁJ˃č„`žÇŤŮhů”ušˇ ŕţhŰéß+iCëEŻĹ#´.ô+ś­b[Ćńôy‚Ůt"EÓăęg{<űěgŠmŮ>J˛Đ2Jwĺ•+t[Š_nƙ'Í@F;qP[âĽĺąB+Œ\Ţ{ĹĂ|4Sˆ"â'Sűűi@ĐiNí´çýy sť¸–MŞUŤâ´ąˆNą đ^ü.˜¨ť6ěóJ~n%3š‡ ÁuŹ•ÔĄ[ÉďúŁ’ďˇó)Š16ĺ DŕŸŃÇ1Ę{•›ŠĎšëiŔ×Oŕöą @ŕűj÷ sV€¤űŔ +Űź:ƒRTjTŞTáߗʢfár:ť‰ĚŘ'p„1h¸Ÿ-†4Žyâç”3´Pw˙5ęî˝%c°Œóő\O ¤ôhÜĄ”ôîαڀmÖá@&MI Šać8|ŕH¸ ‰“äR=ËAĆŹLa&KůsÁŢU+J€ƒœşÄ€ˆ' Xđ6Í)G§&¸ó—Œg“MË7)÷gFyj“4_T,FüĹ0ÁXN—Üř\ĺ0Šë­se´ ƒń ňř[^^ őÍÚz´/ţĘĘęݸqEî@,M¸}‚xńĘKWhkkş‡yć0Ö;ÉÉÇť˛f2ŠĚ}˘ÔľőЀQqe._ˇĄKӂֈűP*Aí%hűDR5+!űř Pą zý6mďviČĎÚî>ˇ‡`Hƒ¸GŸţČ%Zá2Cn>Ý+Ńp4 ĺjSČ>íŁ6őšüŐŞK­ńîŽIŮDęÇ"ŠB ÷×Í•[ňc:>_,ʢš~×­$wÝî4/0ŔĐůîĽwĽHŁ$Z÷–œŹ‹Ź>‹dbOއçç8[gţ¸íp˘˝@ýłcüÓĆŔ'ˇc×nţ<ćôÔIůP:ë¸Á´˛œ­ňůR6ŤžŸ_żrŢXIœ¸ĹBŒpŒRŸĆ=^zQîyi˘Ó9¤ƒýmOôö \™›KGĄ#YF삌‘ŠJWPY§Śř@ ÜÂĄ8ć~YćůQ¨G "ąŒąť]ZĚÜܡV-‹ Ř`”P§7˘m~55F2ǁ˛˛şL‡mŁvSŹz­E•jx‚ęF80;5‹,ďoÔÇłÄ gi+œŁó@9şě˘sę0÷ϊ÷vr.ö4ěńŽS(—öŁyúřý™{/~F‹ąśÇ9×Ôß,QŒž^]ŸŐ@t=<<äg5ĚÉ :69Žq,O‰ .Ęó8&Să+šŮjěA˙ąßŽw)ĆJ5Ţ,ąJ’—ńÄkˇqŞŔeI9§1—ŃăÎmns›ŰÜćV´yěřéŮŇҒ`dďŚ}úӟŚţážXŒ:äXŢßüţ8ýÂ˙đ?řÎˆŻ†” ދ’%ÔU›ŃFü*ÎŐ¤hö“]Lĺâ„Ažzן(/Ç1˙4Çlż@ş őDŮż÷•]¨!vşv.ő找Ş08ťşÂŽ­šÔńŘ4Ŕ?"IgW`I–( Îż:Đ Jâő{ż÷{˛/({\,pŒ_úĽ_š°šET(Z<öť–[˙đ‡i4Çę őŹŕ­÷ ňű"8ŽÇĐk´ĺ.—öžŔôţŕʡ¤ Űű§ę6@ž ç9­Ü6hSOŘňë~é)ŇšĹë´ďÓĘ5ížZ„śŤYׄßU˛pkkK`čáz´NńŮŚŹŔąą >á…ƒj…ŹZÁĐ: K$CG.@úűçČ3>5ďík,ŃcÚs^ Šœ$9ođwns;ÉĐ_¸g!”çŢ鄞›Ç~,ňßŠäMէə$iŒƒ’úź¤äsĎi–ƒyrŠ„ë;c<ç „&i(ç‡Ä é,Cég“Ě퇗r.éƒÇĎŚŤĂüjhÂż8V/â{•ČŚ7ą’ę™OýĹkçŽćÇvŔmčÉq%˙šâe…CQ@¤@Ŕ4@ß,ÁӚ¤é¨ÔŞ<΀GĽ!…ƒžžRŤ‹˛AˇŠ×n“äUb§ęŔe”•łĂX@xÔl6ę›;x%ĽŞŻ.î…ĺ…{]ÂçDO<6;ą¨,CaŮK˛š7K}]F4Č@ŔËh‘Ťů…Š[%;Bß[‚J”ƒ¸1ĆţPR’ -Č0đ„ÔľE×É °'Ža`q-ŒWŽ!FŔxö3b˙[Ä-Š”‘#ů¸c ­IÝ/@J@žČ.×Á˘ÖI8^ąńÄryu‰^šů-..1 ŐĄj „Ć ]Ű\ٰŽCęuűBÂ=źqc“öÄşű`‡Á-§T!é@|>{!Cȅa53¤Şy<Ä Y$.‡7Hž Ĺ AŞń$OÔOĺ:KęĎWěę) ĽŽ€]A:žĹužÔ 靣„îďfôhÎՐ= Ţ°Oß|sŔc^H˝R˝RbđˆŢ¸sZ Ň}čĆG˛čQođˆý =+KłôŘĘŇ1Óݏ"šSŸšń‹&|ÄńóęŰ6×G/ …äRĘ\@Ô] \>yɅCcظÚ€9vÉNÎtŢă?îmšOŠś×Â|7/Ň sŸuŢţ^ůDßéYŰů˙óˇ§tpöýl¸Jţ~ŕZ6Ve8ť˝{ĎO0véĎ\ éWlĐЏ[“k°üh–šďsľFôăůqţ‰B߆ÜxݨWä9”~ó3'Ę<ć;•&ő)˘…*÷Ńü::Œ¤ţAŢ QF€žćă[č}1éŔB%]8oŽV-ŃíŰwٗ¨Hź $‹z­D ͍’˜Ž:<>„-öŽ(AĹ舖–[ÔjUho˙öw;tŘN¨^_ fiPő:չϑEű{!YU?›Ć7Äů ăşwű:"혜˜űŽżŃ˙ô›:ů<c)ďńžývogé;‹ŰL‹ cRg9ÇYcćŰü=ËÉ Óˆ2łŻiÄž’¤źíc{ă…)UI­&žz乸řŒ{ę%“ ZDyĎƋ`Ž—Ľ° ŽX¨l| ÜsÍ\ŸS*9"QŠTáX´KłÇCŸ’>}×Ď1° ŞĘŰÔň”AöŢŘXđŽ›cjÄ. ÁVL‚—%Mි_ýĎř „ ź4gĽýŤ ŔI Zu-ÉŁxN-ŸNŇˇŞ  ‡AÉâ§~ę§čoüż1A@řń˙qŮfš’EŃš~gűXpÇż/2˜­Vq>ęő Ěăt 4ąŻ¸ÁÓ4c,9ĂŚQŔ^÷U˛Cěƒ˜ŐϺžřŕOűnf}dcĹ [v˝÷Ó&ŞErĹi¤ űűi“Ůb ű˝mSEb ő‡‰(Vťěíí‰: ŽςŚTÁ}ÔvŞd˝' SÜźy“.onŔ`UTJI%•Xceƒă8ăs7|=¸{/ŤY$7Ź{îâQbęMţźw暡 ˛şşšß#}śżřĹ/ŇüÁPűč`ÔGŢKŹ qsćА.p…3(éJWë3ßRßV•}gAőqůě1p7n“łĚ\Mć›č ƒ ŸŁç)STI$đ/ŸâEŸ#5­×۷ߑUŃÚÇ!Ëňň2÷k—¤ ŕoŹČ•<Úţú-˜¨ý¨ţ{œß3ß㴟ÓŐ–¤ĄŰÚ˛i¨Ś¤ ŰŞŽMŐ2~ÖG$ KlˆbśŽ´l=ŮśQ4[7E0âšŇçö_Œ @ … éâĐ߼yŸ7n{:NÁlP10§c HAmœqZ—Ţ[ 1 IEýqu!IäŤÇ´q}Ą`SąpĘČZˆ”KWYfu`á8 šéŐäßٕ’ő‚ňyĹ [YćŠ(VxŢóçۧą oŕ ůŠyO€C]PA 7*WŠ\Š ą$ž2ŢAŔ¨Aľ‰Ysé4‚q ؑĄ4#(3€<ŕVç ĐÉż•+‹UZ2šJG]šOč˙bô…čßýd*a<çqv88^)ƒÓńôŞ8r‹ŔöÜ^0 ¸?a`  ţrßڏëM Ă˙y’˙Ź–°b);ŕćď:f<ˆęĄ“QG+Šb;œ/s¤, ĆšŔĽmrj#žěŁžcć¤ËČI_rDžúFr}Ręҍ„fL+ŁÍƒ4Â˙"]ČAg@ •&W÷#ľÄîţu:]şźśH­F…ˇíŃ˝[źiB›kK”p] %ˆKaC´´Ň˘ąÂG{|˙bwM9c”˝†Bě Ě=7Xú1 „@Ďo$=!•šS8É"ЎOOúCŽgvšFŒÝUCOT"ˇšsíín@_ť›ĐˇîŚ´Óc_m6sâŽnL_{ăÝy°Cőr@[ťť´t$÷ŕÎýmSŽčŇz“úÇčYáU#öűÚB [qŔű\ňä6ö峉ůűŘxŢŰŐŃ ü=ŢE˝7ą §Č&Ÿ˛ąŹ˙ŹmÝvúyržr̂ăżg™’S§ţsť'ÎC%m]­Îmx4u>ôL- Ś+ĆíăĝO;ô1 ŒOgô팖OɃ4.˙óJ'r\}â|+ŽäžęĂ;ńĂc>ƒyŤÓîČřüĹí2šŇUžwÄďDošÎ‚ňƒÂžĚ%–xŽľź2ű’ *%G@Đ# ú;Táů ňVš:‚â^ěԖČ_$ůýźŻľ=¤1pĄŐ ľ•ş}÷>Ýăț—Ö×xœR˝QŚKK<×oSˇďˆˆ‡<ög ‚j$žÁë×.S‡cożuö÷ŰôĘË =(\9˘…ë-Ó¸Ťýł.¤ńq*CěźÝĹqœ_čú„tâ9ÓÇAIšJş8Š ˜ě/Ň~מíÉݧ>'3‡{7x~á urÖţwVűţq€˝pÜ…çcřąqč”>—Ÿ ‹Ę•Xâ[ˆ Vw‰?U+Îżö$ßňȑ,Üą'çDĹkČÎ\ľcęľŮ¸dŽ =HĺéEéFďŒV1ˆűĽîS/˛EkjœÁű=é˜Ěmns›ŰÜćöž˛+WŽĐťeEr cüĎýÜĎŃkßü&}âĂĽŽ\ĽŻżů†ÄnÜř?Ž•&^š ńÖ ďĹşĆů{FÓ6Ęô éÉ/NÉěĎÁÄç Ż­€g¨Ű_\l xq|— C°Ŕ*u€ž`+k0œlŰ0řł+m bď φ4ÖQ…SŽß?řÁŇŻţęŻć ­s`Á˜ltužJň;š2ąbťxLu˜żđ…/Đßű{~ň'2?Ś*YŔΚ.䏂‰ e–M¸Ő––—Śž ĺxŤ źŽÍŽnˇçÓúTpÂŐž§ˇP &}$Łť˝Ž‘ř ňt.ZOŞd jĹňř^\[çśějzMz/aŘתr‰“ßI‰%‹÷Ń2L‚É“u=íŢi9íšfÝ÷# żńĆrżÂŢw{ÝÇî÷Üćö̸ź~<ÁgżŽvÜ­ř@śícƒ|rβK}úî%ĚƄ…ěX€<ó$\Ä3:í鐊!‚HVq†BR$Xcr“wA$đXŠ*B&sĎ ‘äx…@3Sťň1ó„IsN~I%ňŰČŠ1Hh^ä<ă! ăÔĄťýׇ1&”dě†ŮŤéŢ М üU­SľVĄJ˝DŐ_k™ű’:ĆQ€éşAőá Čń/÷Đ[U…˜ d2ÔâÍćŠäwîööI˝ŚBĐž—ýQž“Q~żľ&ĐďŽřXI@őĘěo…ލĐe0f@"¤×KŸďCĺĺ ~i[HKßAŞšÁ׼ˆ˜÷ŰÇxÄżWxóJ”‰âU™ëä¤ ÁQ˘Ě߲Đ; Š/IŁp3!ĐČMt„!!hüdţ˝q?í%ŸKr2)ŮŕËD6{Šß˛¨ÄÓs@¸>ď?ؖ•É‹ 9kŠx| Nˇ#żUĘU:ętiw爚 uę†ôŕáŽH9ş šŤ#¨T  ŘF™ż„¸)mIT"y‡,}÷iŘwdŔ˜ËVŞâ85ń‘Qüvż85–K2ä{tŘ i§C´uĐĂN‰z Í@IER†„4JÝ3ĂŻíÇÔëwš>Ůż‡rz˝ľ$˝ÉhSkĄ2ůđG´đé‹ăjM’,˝˘H‚u1„¨Z9ѡű6٘Ö\ô܆Çö}ˇ}á§m†`Ç ą‚v ĘÁV'Bl ÚjŠü ’…Îâľšš™$$x[qÁFlÁCKP%UĎPŕ\ÁIś×Ŕ˘ţŚ@ďoţćožH˛@ş"mkeôO˛ ’ű‚t……}œÖVW'öÓź‚śN-`_TxĐëˇDsyň  ˇ(^xň„O”4 ×BM ×ű˘ÇÜćţŢ[e %tŘű!P’L­'m'šR/çÓűĽ:K¤(ĂŞKL#WëH÷łď֊ǰmʒ-Šҏ}ěcŇŢq-¨Ťb^ë!dT×öâ‹/ĐK/˝$Ť]´ź%Qw§jPĽ}°Ÿ¸ťżS˙,ČUůz‰řům €P,÷iEm ¸,0đŕ™@ꕇh Á{mc–œcƒůüDQ8ń,áŘÚś4ő5+Ýd_'™ŞşűŒÓŽůŹżÍšÔë6J€pm†'íí#z睷éw~ç?J}"­Č͛/Ë=:b°hŘw€’CëWď9úV%ZčůT CŸA­SímŰ×6¤DU˛ő=NŠäň#¨‚ż ä„2‹fˇá,–X9Ú ćšţ ˆ]Z–ėӁłŇ.źüŚČ]çŇYbwĚJ8)ĹUěJ z2ŠţŚĺ´ę.ł‚4łÚŔiŠ…ć6ˇł˜ăšU[)i˙ e†ô$msœŠ)đÁiYyWť9Uc2ż2LQ!ˆL ČI˘ÁcoäňěeĄä-×ăú@Ó8ݎ+ŤS‰pĎĆ8€˜Ŕž#XiĐ6RP°đ(e"Ó]ĄŮx`Lë×'Ć ô˙ř,D ?Ž€Ĺ@ETq HR‚L1ü‡ŠS°p*eŞÔ"Ş7B~qYw/žÇ¸P@ŞtYƒ@?÷ÝC“†ŽĎBĹÄc\Š~rHńˆA“NŰöSŇžŒť‰O…#.{ ď99͡ܞßÇ6o´Í'n”\Š>Ô- R-¸ E`{îaű|šÉšž*Ą#48Ď’Ś$¤6ď×âßWůDĐ*ŔŠXÔ[ŠŽČM÷@ž¸ťšz ^Ú^Ýdď8˘ˆ?˝•츧ŽÁ›˜q/u}{ƒďU5ň+iĄĎś‹şÉڎœé ÝĽoźyW~Ż×Ť˘QáűťĘq"Áý ě‡tz|OËŇzŽx}ŽÜ3Aăö8Šę4ĐëONRCJTˆ÷ÂdDA\˘‘ĺ]JžM˛PÎżäHPÝ$¤˝^@žć~(m*Ľ(–çăY¸ńŽRż:›ŸĽÔŠŁăk–׋XŞôtÇ%oáwœ<ŢMNŔłœPCţł7Ýťń“éâ›Čđg•‰[Tź3ŤBtFÓ:-!ĎwťâŻdcŇĘY1lˇ°Ř˘űvčźö¸ ’/Ů3[1>“X1•Ă—˝g|źÓęSü×ÉÇÉßďěŘvłČ'ýţŹmÚőľ,ÄJ*ŸŽ–PœUĘ%7Ÿä>\<ĄŔĽů<¨\â>š^’ݧŒ Mü€żďs<*Š8‚h`Č4b$ű5%x:¤NwŔs¸÷×Szůĺ›tóĺ+ôčŃ.=|pš5Žryx,FÚ,¨8ž|s“mďĐ~í›Ô¨ŻRśy…Ǹ-IOśĐXŕ9j_ü-8!ÝnŸę•E3ĘBTL’™'§’v!‰ű’îJJ:uuĚ}MčI&)Žƒ<ćEŽŹaçÚř ǗB9ˆŢm{VmU|šw9¨|˛PŃfĹ7ě7Ďą QPMĹľ’Ĺ`ł–‘÷M(YÜĄ(D\+žVDË8>+gq?ë?Í ďQťvíš8Ípž5 ÇÁÁAđ+h‡w0”Ě€}°%.ŘUŐřÇŠ}HęďďďËvCŹÖɉ˛˘0=ĚS*¨SŽ$ń‹Rň°‘IG żŠc˙żńňţ?ńgR˛˜œ°N‚x§™ ˘řĐ[6Iލ×ę"ÁgMŻY‰':°Źj›@I ú j˝)PŤ€¤ýţo%.h*™@Iô;ťb÷Qď•뺍 M#:Ě2›ESč˝Çwz-Đj'bÓT)f݃ӞŸVV{a')X@˝âüƒ@ŻžúŞ(X¨J…ÖŸKâ&i—/_—………  [ŰňEĘPDVéCŐđ ‡ Ŕ ƒ‡ü´{^>(ML:O"Ř|ÝĄöňÓ?ýÓôöŰoËd“fœÓ‘˘|UÔšö(ƒ>-˝F]őí9cbŽŢKKҰύŤK˝nu%ÎĽiRT #ĚÜJZ•KŇsŻ×>Ďśl?rR]Ͳií ‡ńćÖ­[tűömúÍßüuş~ý:˝ňĘEá˘Vm08ÉŞt%@čÄޒ*`¨M;ŁĺS˘™nŤę>j6’ö 0í[r2@PŘĂjŹD@ ü82K߸0ÁÇ, |ŔÂ+ĐńYˆr’W8vA/OLN0KłĎľíű‹Ű*9̒.ěsiďé4wns{:ćű•Ŕ řšHłÉ6(+3¸aţ™‚`ËÎRă: Pœwbâ;8t Ý`eÄä;Qż-?/ Ś‚h *Đ>€’|†’śý13ń* Ě ÁÉRŒťĘŇöţRžj2ő ÖrßQŽL­•ršJaŠ:áăLö›Ž|ĽŽ^oţîŐ7M ")†|Ú<ë‘#ë…Ü_†˘\Á}ƒđĺj]ę‡ z”ëUU[î?:”ÍŠ­8Ĺ ŒWHé#2đ™Œ<š#`‚U›uúČ?Ńvčüőę2Ĺřđ÷|˙đ—ůšĂ3í}Qr(– uŒW´É\*“ă4÷ď@fŒžóܷ蛸>iL`ś>‘Ś™›ĺ˙Ř[ŠŰqĄI™%że㋠\j€ Hş ó[q^ФlU T;‹ƒ~j™ç”Í&„?_{V ݀‡ĎhEýăŞXœTç'ߏu8‚ŰI÷˙Źńˆ§eéäБ—ál–ɘ őşR&łěuUyŒÇřB†;§#Zl,•éúZ…:í6m÷*šŞ,ćR „| r˛'f4B.%×?—yŒżvenݞǯ6-.­Đ`´GË 5şşy^şY˘˝.íîxź8 AÜçńjŔsš mnŽŇŸřî˙-=|đŢxç öÁřX/RŻ;”tđZ UjśJtëíťŇż4› _Ʉ˜7˘r%’÷0r€0ƕɹMH.WBNÇ̧o”žÜńp*Yš÷ç3wޡsŁâó‚Ôie÷ŕúT{ď–MÎ;ÇËIq˛iăí´í‹ŰŘý$řoć!â;ÇI“gšç Xd'´ÄÇÂ#ř6ˆsŕ…Ĺyx9˛EUR‘IŒ" ŒßIľŕaZ?—/q׎Ęr’ňGĆS7ą5އ’&*b6ž€ŘrœÂ….Fář÷(Ľí˝÷Ŕ8:ˇšÍmns›ŰűۀXü÷YŰyČEC9˙řg>Kťťťôľˇß¤ÝI3Ťiĺ՟AÜžxčSßS0VŚ|!™PAłVń>VV ÚO÷7ÔóQ_.(+ŽůwďW×~Š]‚$ŕpƒŹ*ŕv ňśŽľŒô )áA>%U`{Ź‚ˇ7^U >őŠOŃo˙öoçÁ$KPP•'đ=öSi{ľiՔ0P$Ř !H0%Yh qɢŘhĎčO4|ó›K\žźyl_¸ŘĎ °[ZŻfWýʊV…AƒwşŻ%[h™­ÄŸMűĄżî٧ÖuŹÖňĎŞÜču堔˙lWŞ[rĹŹIčIÍiĺš6‰ľçÔş˜6ąC;ź{÷.˝óÎ;ôţÐ Ś‚Öś.1 …rˇ>ôĄ\ůĂNÂĺ~Čľ‡ţ>&šZ=ŸlpoQw0Ytj27ɔÉt(Ť„(˜$ ̚ÔZĐúŤ_ý*ýĂô3ůśú,)¸’…’xĐqM*ő¤Ž Ż/×V“‰ödďłU×°÷[Ëcß- Ÿq~%ĺhŮu[wě̓,"! ”üł“Żˆ6+Š÷Cż/–ç<ćŽŐN3!1ŕ8h/ \ } ]\ż5“Whey…ëś.čú| ŹÚ׊Šś-˜ŞţX"™˛lĽmR ÷ŇŚ I}Š™PääYyŰGÎU9Ś%úŕˇÜ 0Gxq+śEB<#ß6KBŔÁďhĂŇçČő'.]rpRNÖ1éĘÖˇ’xôZě˜Q$]ŰŐ´€ŇăÜËšÍ &q[,B„Tâ•!ȡ?2ŕ%VOҘ,7šâ^Ó/xR•ĆN9ú!QŔđ{•°YaO"Ăx&ŤĽŞ#!ˆŠDYö+—Üsˆƒ#ˇ#W¸. çČ€ĺ=Hüł<ů̄^•ƍ%™'€˜:ńďHß•ŞÇ‚ÇšĺňĹ49 ńybE(ÁQ§ÄáŽIĺ´G4ěwŠ4Œ¨śvEH%%¤Špˇ\’EĽĆ`=+DzĆ G*Ę ‹|Y‹|óZ Öz"EQ‡_Ű 5đ°1(9ÁpŹđŠŹŰŃ}"‚Ř'Mű˛ę;䱔&ÄU͗~ź_ęCD5_>ä|ÜŔ}ß,q˙^Jd%ě"— ‚óó^oł„N‰ä Ot÷*“ž+S‘¤ştH‚ţť™9ĽŽÔKƒG>e˜ýÝ ›śÚ>ËÇBü•ćmÖI/gR7Š' …^ѢJŽďÇĐ2”ś‰*ČUJ9Qp @ŕŰ5žd^š´*îfŁF/]ߤőĺ%úćŰ÷hoďHĆÎaŹžźťá. H7^ܤFŁNýč‹tÔĆřůvbIŃâˆ=¨Â“DšŰřtVüé)/übE‘ٸ>düĆřĹ-\r” áÄćC!•Č8ĹBşHR?öŇ䳄UŘ ÔŽ<ĂâYâ@3'éć™Siů,SťWؑ}ÓÜ"šĚ =ÇD{PŸŐŻ”?éneN­HǀÓ,o[ŮxŐmN~÷ţTńž6÷ÄqVW–sbőš|ôsqęóýg˙fÖzžś•—}úvśvřÜÍ×拱ĚKĆs—“úŹRÉű&xÝ`í˙Ć\4 \Ş.ŒEHŻýČËttxD;;mÚztŔ qƒv÷;˘ąź´ŔŽ[GH†ÄGxü>:ě˛oR˝ÉăXłFßţšoă}şB"Š”ÔôäřƒŢ–W[ôŮ?ňqßéŢÝG´ľuČă`“ă\<^ŽŕG…Ň'Ci‰rĺ3­%ë†~NČř+‘iŠ1—Ţ(MÉűÇëŐYVx6ölç^Ď'EHŢ?čŞÄÉóÇëö„cš}§úĎÁ¤Ďfˇ‰Óxbü€˘¤*@ژŁÔjB@URŰĎIˇŠbɌ˛I¨wċĄš…6‡iˆ9tşmyaţŽą_Ě?"UÚ3Ç8KۘśÍ¸.œŻç5]ş]]8†šS™r ˆ+O-WĐEú˝8žE§D–đ"šÇ ć6ˇšÍmns{ ö‰O|BđßgmOBްśşşJly™śvśéÍ;ˇiç`ORž;˘ĺ.<ŚKrAZŇŤäżÓŘguŠĹń1ˇčńĽ,5~L6éŇř—<ţšűN~Ţ8Ţě—ÇtĄü– C°Đ•Î ¨ŞÁ!yŞ –ą '˝ _¨Dœ‚JžP˘Vń˙úŻ˙úÄąa8†‚JŢPŕ߂ŢöŃ•aj,Ćť]oM•,ţößţŰŕě˙řËu0ˇÇœŘíŘo.Š–°GÁ öYűkŮQˇŞ^Ą)@”Ř2 ŒÔz)•Ę÷Β4”Äłä{N‘Á6 ­–AN{n[>[†Yu¤ű*Á˙EľŠâlÉbaÂŢŻYű}ń}"#Ńpk Űěíí ÁAlů1áÜŘŘ 7Ž ˜Ž)V,áAëę oű`Őz*֍›D;B”¨Xx Ď(.p¤ucŰÂŹŔ ÷˙ă,Ä(ČZN%ŰX‚„Ř+ŔmÂ"šG÷ˇ÷ZŰdńZłŇ›úYÓgčőŮóŮ2X% ÷YSc„˛2+JU•EIE*'iËsŢÁŞFhĐۖ,Îýý=zóÍ7¤?¸qăEZZ^“ţS‰jš/TŸ{› ĹŞźŘ:ˇi‘ô{ź”˜Łä%Ą‰*Eęʙp1FţxO@J“’_Üŕ‰ŽţnĂRNfA°ŃŒHNd1ý§/SčűćbŮţÂjzě˝ąÄ‹b[Ďó÷Üćö¸†ž’ĐŮx-żhżP‹6›j?”Ó)ŔŽ ͢çđĘą@DŔSőŸąŠŽ*ČŠ)ço8îا(žGÁ˜L*ŮÂżúímjożNĂŢ6÷‹ TŠ~ˇČű*ůŞ\)ËĘĎr•ý‘*É;”ŒK\W‹|L(B,p9j#hG:ÍqMŠť10 ¨Ţ¨Rsa*Í ŠŞűTÊŰ.ˇŁyă8ŠŞďrŠ…wů˝ËŐÜeԑÔ$  ˝—ęK„Ô!Ф˘Xâßü:ä]‘"DŔűŔ­xA1A”Žbőě'7†ŹyšŽha\ĄĆŻş/eŽ]˘TdĚܞ19Ȕ>ÜËłrR>ÚGżŤđűżčáú¸íť´ňX ľ‘i(Ľ{+—K TľhešEŸúđK´ž˛ ÷ş\)ŃĺKˢhrűÎ=ÚŮgpjčČBĄ“~'ÓŻcĺđľŤë” !3‘ŇŽmĐbšFŻßŮĄ;ń•´ŮRŽx”Ďu}MĺžT8Žśë+2Ÿî×Ę÷ˆŰÇb-Ł…š;gť›Ńý-žnŹ–ÄsQĘä9Nph§.ÍMĘČ*Áţ_ď5žŽĂƒ6ƒÓU`žśţ: něŸĺXNîc҄Ż:ž˙hݧî~K€`LťX†ť—8ňYrň8;Dç'qJý@đ4s*"ń(™¸'ůö§Ě=×ÖV&Žo;ŮĎ/r5đnŢűÉ>÷š5;ű5?ú9÷D›ćSśôIŤŮ×[âŐőNR°PsqMAęSȢßÜóÓŹ–hmŠťx>Ţ Š72ÄÍřˆB0KWx§ŽŒeDý„ǍdŒ­uwoŸŽÚ!-.´čćÍEj÷ş´łs@{X-ĐZn)>WłVĄ—^žB_üâWčč¨Ç×&ÇŔŞBĚXYiQłU–ą;đýă`8˘;ˇˇhĄŐä˜Ŕ‚,şčvpü}žË÷h8P靼…# č"|—ú’’ uNíü4§Xá•.B͝šë}¤yVĎ^y‚ü@ÓcJvŰi1–iۑ Î$™Ř..ĐσĄSdőKňiů1ĚA@Ž.ąoľžžDľzŐčOݧ‘W„8Ɋ1÷w@­VKžÓ…9xĄ<ˆUa~˘Äm•(g٤ż2 űž?‰ýóć1MĚШÚę¸ţ‚g&đR™ŐŠ `ćÚ`Ij 2 Yk×ŐŁî 9D  Üoę8—?ž9ŮăTi ƒĺź Ž;UÍ)*šœëi<¤Łíˇi÷ÖW(î=˘AkQ䇗?@ыŸ˘…Ľ*#5H5供r.Bš’ (ŽŇ€ę[C˙(čúý2טN´€DĽžReÄ~í°Fk—_˘kúŁ\-mÝý ސ”ŞÍ*÷•ąŹnC] ű|˘›ƒ­¸tńU“ŻĽ‚><ô@ ţB¤HP31ÚJę¨(O_ŐNuŕ—żŤ%ŽřR #ĘżżÎŐŻq/ď_ř{6 ę˙ŠO™źŠ?G~ÍŚűOÚ Ÿ˝şŐÂ]ţ§ÝĎxŕúű…z™ňsNŸřťÂ÷đňĆ­,4$˙u§ëˆŐQ™V–šôÁ—.ÓBƒŻo&ô`ű@TD‚Üż´ó€”Ú‡2fw; P- čúĺž/ŇĘňmt‹i$¤ŸÉOUt*•RÚXhs äâ”ní;"LęojŤĐ奌–*ŽJŐ!Ý Ńo×%b‰úXčˆ2śAÖ=qžSJš-sƒ\[YrăŻOł–łUž‘œ˘ďbQŘY`őŐÜß îšö€z­ĺ‡<ďľgüîźVźÎÇ5%˘ăő ?A‘˜—9k6űľ”kvN&s@ﯜtœ˘Ą_¨›En–á TtbŐ>I­OŸŃ3´g÷̜|žÇź¨ěŹÇŸľM6ŃďM=Ef~•†őŒęč”*8iÎŻ†çnŒÓćÖ´ďŠä 2Ê;xk•V—8–Ŕs—Έűç8’ž[V—AŞżGŐZ“ý—˛RsÏk~dtžYꔡ*ĎÉútÔP˝Qă9XŽ_˝, î@ćˆÄ>Öpp@ŽŽFôĘ^Ś.[AÄčtޏ 5z´ŐáăĐBŤ!*~.ľĽKI’ŚěD˝bÇŔŤW/‰vxxD6b^]0Ĺ|(ą#ODRę̧ÂpÄWőmH|IWŐ˙ŠĹ—\Ą^ 5MďwÓT(Oľëń•,˙L3Ťę¤8„îžSz ŰätÓďťż1oOó< á }ÚâŻĂ!ˇy¤gŢ?ňŔęę:đ6Ý|„Ű]ŸŰ)|,¤RÜß*ĺͲ^wäÚŘ ×9Í$ś@g)Qł‰TŇ —ŽTĐšx.Ę7XÓMcQć1atœ”ć‹äźrĽüäńo ™+U}ěNjJ^ÉSđął;5­HčT6ƒ1XăƒOš5Ímns›ŰÜćö_Ź}îsŸ|Ó.’}ÚöC?ôCO\a­ĚţĘľÍË´ą˛J[ť;tďŃCÚŢßżĚĹEœż‘.î™<qÝLbŠ'jÖeÁ*LĄĘvĄ!Ý⊏Ľćr‡ă^ř‹=ëüűâř.†`’L×bşĂń˝ŚňPp9ůc¸"ä ËĽ/čO¤™ŔďŸüä'…Ťl8ٲӂÄW€ÍJĂk™l°ţ+IÁŚ×°6da­eąvÖ WŕAČâŚ/Ýź9qŽbýjMë^ŻAAnK–PłÄ K„°ŠŠ`ŚÖę^‰şŞhŤ>P$xزĚ"4čoúťŚŔ°×d™3BgďIą,öz'€}DeŽ˙Jłl˘Œśníyl=IŰŔ;ĺLn/]ڔŐ)xÂŔݏȯ>QŔL_nҘʄPßőşŐú¸÷Ą…dbÚČ9]ů]Ĺ‚&Žě4q”tQ|śŠ**Ј|ö6•ÉńôăňK ˇíŔ*ŸŘÚv[=†nԊí͞C9­˝Ů6Těô…ż‡Ăq?Łm\Ű&dö+ՊfpTVRű@'ת˛ŹrV2!”™Ać“úŽý˝ÚŰÝŚ;wŢĄ/ޔ"¨B~P%ßh?hIz˙”|q|eȘäƒrKn_0 ‡Yp rĹ( `WŤňBŽú0Ë$đąűœ˙ëžY–zÝŘAĐţOËc÷uű'ÜďÝOłďVIŒN´ŹúYŰŮ45ŁšÍí,†đ[•üŤ›UjďsżĎ¨wŸŸ‘ˇyŕč#ô• ĎB<“ěŁ0°*Ęž,éf„řÓ|Ěq+Á˘"}|¤+EőÂüBœC™ œ8u–ßŢÚšż+üw•Ş•&Ĺ|îQŇç߆2)S&ˆxâT‚”\VäCGQHĄ?/[˘xá'´/ 61ŮĎIÍTTb ä ʔa™~'50dćÁ}Ł"×ćŽ@!Ć $Ý˝-ęě> A§ÍeNř}Ÿ˝ýűÔŢ{‡űĐ6Żßŕ~§JF˝ŤuîťjcRŞňq8š\ bŐ¤äŠ->zÂA™ĎSĺ˘T3Gn@üâžÇľĹ5Ú¸ńmÔŮšCűž%i7’ˆˇŠsżxpä‚Č~˛3ٟyľ€,SćöĐ(ҏÖC×÷ŚŞÄßaŽ…>ˇíëuÄăRUFФ ‘ ‰ô1ZCÄő8âÔĺjFZT^$Š%kpu!únœçDŽČ`˘tDZů—ś_§)ř\Ś˝˝ëk˝zG†É"!]H@=Vđ,đo}žˆ€˙X[ď˜ŁŽŹ(yçšÝmí슚S…Ç؀dz݃ß˙: فŒb„ôX™ĆÇ!ű,€V,bőďĘň"5:`€ }},ůíë4â÷vˇCń0qAx'ńX‚ÄFrœnś7×Iďń Ăă]âƢf%Ł—72j–S:<ˆĺ:cž?Œąńăť: UQĂľ[(e$ę#—v„<8ˆű°ľ{Ā\Ě Ýbޟ<‰6ąăkŃŻbu~ŠÝ§xěŠţxćĘ?ŕşjÉłpʁÁžԛ>–?%`yü4í<ϭ̅˳Ԝe˙bĚdě ú’‡Î[ˇŮ~üLú 9M#˙ťž?‘šś(>tűÔĺ6żŻ\^…lXÄÓëi0ŒŠŐÄ"´E!ďˆ*Ă Až(F/ÁDmřၐY\ůKS_ÇęvŘîŇ,›öźŰ}'ű)G./—*ňâËđ1ÜĄř~HĄÓéIEI ¸‚”ÓŇ98r‚š‰Œ‡î¸,UJů˜0Şä×\Œ'ä>S&ˇm÷crN@öżˇž‰šÍmns›ŰÜŢŻ˙äóŸ˙<ýÚŻý={Zä kŔ°Ż]žBë ZěíŇĂ­-ÚâVť}ä6(řŽnşâꋍYŁa—1•Ča8‹|ÜWTż"1ăБ,tž“‘u/Œż“m’wWWňiۅ!XŔ‘‡)xŹ 'LH@•`‡űa°’°*0tĆ;Č´ťť+ŰÝźy“~ů—YŽcA0˜N<Š ˜%eĺ,pfěc­)’ŽĺÇ~ěÇdߟúП˘gi/żüňÔďí5*ń`"ˆC%Žă֊ŕuQu˘¸úŰ’Jv™dU•ƒb˝[đ´8Iu0 ŮňŮßg]›@Áůb™í>Ĺ2É÷Áqâ‰}WĺŰ.‹×‚É0$ʗ—Ö8°˛,/´yKŔłPzÇmÔKúçĚՋ şŚ„Á$ĘňźÜ=iňpJÝú@Ş›íőkúˆâőŕ3$íł4+ŕe/l[)’`V…Ĺޟ"q˘xžiŰďŸ%WŘý-ÁJË{Rű@ƓKđ÷Öńϟ,üŞjȡ¸Šx™oGD “z7ŽŻe\f˝ś“ ŰAčk_ýCşsű–¨Y€hâNTIS ຄcň™*é’‚äž'nĽş”JY$ŤEşI‡úq_BeR4Rr0$ Ŕ¤!iRŚż-öš–đeŸeKô(>ˇö–h6ôcďQq ˜˜Ö—o5)Q/9˘!?ó 3dŇ„.őOęś =čvwůź“TÝ•*÷Ü/şœ‘Swţ#̓ËrĚ,U¤œĆbČĺE'ńEnÜőip¸C˝ƒ‡:˘6€{ArČ[´sďé`űƒ´¸ţ)>(ÁŰ2oS ‘ž ěŤ"Ť úGôM™ť ž§ŕúD}đśČ1źÄ>o üwŠ H•Ôa@ߍwČiݗ ÷ˆňÜ2÷É|E6úś‚닸$ü{›ĎÍX‹¨iHâOʋŒďŠ”˜`ĺ`Ŕ Q&u^ ĘT-G´„P[ [é ‰ń䔑ť49§“NŸ(ĘŰ4żĘ˙âĆÔ%—ą^Š7L(č˛ßňÂFYŽ×Ž˘řŔ%Ű:čĐAg űş'„[ŘÚÔŹ5hĄQ’•ť­F’”7x> Ü˛˛Ř jľ$ÄŚ.Ÿ/ä kt8  ÄsĐőRzó.mC×nu>Ol××ZüŒ†Ô•iÄĎB­ěhƒî;_CŮŐiľ’ŃÍő€.-pqśRž<¨Yâń6 čŃABí^Â`\" œŒs[Ą€15âö⠞K<[ ”ąB!WŹ,ľčĆĺU_§çBĎkEBőx œŠ>˝śœ  cŇä ě¨ČpČ]óÂL™ŕiüAGPóßĘż¨UPGŸ:›aśMÖľS+S_38CcY^YĄ‹fO*ĆpҜrnç7áő?/íĆ˝TVpaœ˜ ‚Q6•xVá18 'ÇĄ2‹—Wą !%F¨Ó ĺ¸č“ăČŰźŃ")@u{'•hââ<4Mş´ÎĐşÔnw†tď~‡Ş{uZZlŃpÔçůRŸMœ­&sĆNÇÍĄHŃhUiccUʋő@˝^ >Q§;E‚F‹çŐ€Ž\^ ˝žďľ‡ôÖŰ÷DkcmUćţ'ë5Ž-,ˇčŕ°OH5—ÄN $L[§fé˛!Š‚š*‚Iŕ6 Ÿn,˝˜YœČaçnŢži<-śąăq=0ëĆg‡f}gçŹ9‘"Nė9+ÝęGöőŞ Y`ƒĎžÝĂ|%ž“×[’šŮŚÔĐĎŘž¨[œëÚ؟{~&ăÓl8:ž@䴘̴˜Ńń¸ŰXľÂ=Ž`ŃĺWŸ}ü.;˙ bŕYA̤"¨{)—Ş9‰¤3ĘĚľN;÷ź×ŸŰÜć6ˇšÍíݡďúŽďzŚ‹ţĎ˙9ý…żđÄřůŸ˙yúƒ?řzQ€ë—Żˆ˘Ĺîá!űńG‚s?ÜŰËĹ `÷:%îÉńŹę#Q¤yÜÓŤĹ+Ţâ•nŠ€ŮN8fC*Îq/Öqa"LŞĄÎi˝^Ÿł@ ńŚÄ €đ((yy˛Š,ct‡’+p$Î5¤íŽ\šB_úҗčŤ_ýjŽJaSUŘ}–`];‰Y QƒTjÓ@\kH ˘iAŹ'*§M2NłËW.óÄ{}ęoE@¸ěWm•ěy‹¤“â5+hoëЂ˜V-ŰŤ’Ĺ´ žĘëƒśzÎâý˜VßV- ř˝M0ë^ÁZ=_ń~Lm˛ăÄů.ÍhŠĹ“ŁhvŢRluz­ĘA•&wśyiŢTU§€lťŢŸ")Ť´í[R†ÓőWq<˜:ÎëŻdLž°`śSň“ÂísAˇĹ66‚Ý֒p<,ďIńžęßV Ľx_ěó=Mqƒ…Š€˝ÝfÚ~öڊ˝}Žl›ŃţĚ}PťÝ‘ŐT k<¸‚pŃhVŠ • ˙  öýüýśGʤƒš˙>]ž|™nžô2÷—…ĐŚýŤM¤×gŻ /*R˜XŠŰíw(ěQ_şjĆ×ÔeI $“ž´7Y\O/¤íHúˇ’TěľZő ´AŰNŠd˝VEÉşŸýďş nšŞ‰í‹´œŰÜÎkžr@‹K}÷ŸŞ2^f€˙ö hgo…ƒă)}ůőÚ#¤š¨QťËýŇÓŹ$¤‚$óx|捤Di€ƒ‰ŻÂA‡@)°ę0(ťłf ůq 1tjü¸™ůÔ X!gŒUjRŠś"’Ůoy DËŇämBĆÄë!?’ˇršiH˙ŕô.Jŕ“hŔŃw˘*Ż=ŮÇVŮ_¨6h,ŠŤđă…y”Čő8’ƒO–’šăB‰!’ą…_%GśuĐîҨČe[ÓÍľőŽ“öţ=ęÜĺm?ĚőSf&¤*ŇVđšĄ`QĺëŻÂUÁvwDi?řŔHßQÁ>ĽT@“^4¤Ł˝[t¸óĹŁâLV‘ڇ˘TfŽĂ#N9˜‡ŻůĂÁQLĂJH}ţ‚1yjsp˝ĚW"BŁ ‰—ƒôč#OşƋřdX˝Č‡AŽy ÎрBGčÚâ䢥ęĹ}ĹށO É?,w+h]ßĘuÎ7mT „Óăz‚:’n7áGĂŕwző#Gš@ —$ƒŻ@’ĘŚÂ}uŤQŁő•ş(IÉłÔ×ó…ňňvOŞ1óޡǚďOr˙ěřëć ą,o ÉB˙Ö2"]TĽ<ž‹CQđc//ŃJ3“@fťÇăI?“•ńŁŢ#ÔJŁ&Ľ5nßăq“÷]˜Q"‘}r~ü ôßwď=¤…Ö"ľšužß•ŠľŘä¸-¸˙?č A‚ŁZB\\Xŕ>˝Â>aśwčÁĂ-*í:EŠVŤĘűud|ĚźZŐÖ.˙ŢnŇŇßżÉçüpű€=3HR¨((Ţxá’(ěîśé­G2˙\h. ÉęH2Ż ü|Ů÷ëĹ]’+ʐ.Şa,‚/p(= ń\yz|oœî3ČN#Uč|źLߥ>!Š=úC‰`KŸ?×j ‰Fě÷'1ć5™›W+-ö󚢚))ňdě. ĄÔ.n˛ĺ>) “X"{ĹZ>˝ÎӈfƒA:uŽ<-fs|ŁcĚ ŻěA>Ĺm,jyxw}ŔPžšZ­éSšyúż'O´Ŕ;ć9 ÜJŠ˝AFS˙eSâb§Ů´řŕÜć6ˇšÍmns{úöĄ}ˆ^}őUúĘWžBĎ€+˙ÄOü=/ŃâĘƆź e’ł ĆfĹĹűA”źVč3¸ x Â37 ЇÔSǀňET„`Q.ľheőƒŃGźo—Ňr(ŕ.ČĽ b˙‹ŸË˝TÂĘ5Cţđ˜˙†ƒO˘tめ:\z*éółËýÁ8€ďŰřoG›-Ÿ6Bˆ€$€y†žšĐńĆîšbŒç|Ž*dÇˑKMăÓ°dEĚ3g|<łý¨˙řôH—–2ȅyçEßSęœŰ|ŤŐ˘ţ0‘Ŕ8Č#K­ uű#:ęĒŁmMúoů)'-dž`Ńé%źLQ…Ç( bˇF`4ęSÁ¨ âREö‰˘@RbA)dŻ3 V•üÜ˝bŔdÜ.!ívů3Ú#×i„ÝLTKRŐÓ°ÎĎGÄa´=.c)ő €XŐ2ú…PžM<×1î3?ŰKužpłČçÇř‹űÓeíŃ0öˇŽ¸oqi1ŢNúqî9ˆGq>~}8XqľŹőŰôď^RâÁĹY­d3ôáŮĎ‘ş ”¸•y~R4ťMęý›ŘűnŽŹ}vŰXmĐóľóu.OşzJýŮ´žŠx˘,'K?Á ň7>ę9ő^ƒú˛§ń gîşbŻŇ’e'ËŮâ÷Őĺ2}ň‹ôďóm +Ťôßv…–P”ęŇţѐî>ęŃáQ’Á.áCé—@¸HÓ#j…ť<.ąßricĆ D÷‰Ü-”tS˜Ëßť÷ˆöë´ŘZ’1 ýčĆŇ F<ţôĹ€šÄpÄÓ$Ŕüć+ҧîîŇý{÷E‘ióŇe{@ ­óąÉcÝáaŸîÝ˝G;ŐmnnRłîÔ7ŽnŽ Šďđp$eB_žˆsń|’}Ŕ…ĹŚ?@ť;ťt˙ÁűLZ[ۤ;ń¨CŽÍú\Đdҡúžę˘.ą\‰ÎD÷šÖ'ۘ”}wŮ4ĆŠ=ČÓÜöÎ7I, ‹e<=âXçŃ!űŒ],B %uLçéú*oÇţĎ­ëľşř?•ޏä¤Ě1‘b"öâ}ŐŔ–Ő?D6.bËmăBÔ*ƒč\}Ř(q•Šk›FȘÖw*9ĹĹ9\ŠÄK RX–]ôćŕá™âçĄŃr@‚Ä;]Ę5űPǣр%QDőßžDşŘ•ÚŘß r2†ýMgRY|ąH˘†`Ąä]9Üétäű"°Š ¤‚mpxń‚Šö@ŒźĘ´‚Tąžž.“ {܏}ěcôÉO~’žüĺ/Ë1ěäÂüŕ”ă8JŕĐ _V˘@`ՉËyƒ$Óś/’-,řš]ťvMäţO3Mť;iĽ~ń7G+YB'VÂŢ;źŁNQ Čę6 HZŐl-Şu`W—ŰśR´"ŽĺP˘‡žł¸­g[Ś“ęߖOßívVŃ#ú=i†Ď„˛âďřu¨:ČŕÇFI^ÚNgú +!“M ižUäł5ý<4Ąę vŰiŠÔTŇČNÚő¸–anŕˇłd Kްőg'éVőŔś×ąŹĺ$ŃÂśšâľŮ:˛ä‹âł`Ëaď‘îoý<hś‹ý}ŽťC/ó™É¤} +—°JĽ.}˘+‡–ĺń‰^RěííŃţĎ_¤îÓ§?ý̨ŃlHŞęůJÓRi ŽHâ ßag•ž ÄőaƒjaCČAĺj™ƒ#‘/ĘWŠ•čë÷‚‚Ú~Vű^­c—;vH6že´ mŰŘuĄş"˜ŁšTmߢ)¨l˙ŽĎ8Ž’2lz#[_–ä3m•ĎÜćvnăś7ŕČă;ďě (ßéÖéC7רUM¨őéú&÷‹űGtűÎoSТVóˆj•?i ęĘüŒNyHRhpPŤî8(_ć,•׈G‘€fžÖV_`đ|‘vwńs¸Ĺ~vJPŞČ’DV%R*Оz@rPŚJŔŕq\ĄFÔ¤Q•_čČżşś$Š;Ł2ƒŘüŒH5U.QŸ˙† FäB‚ƒ$ĺ Qfb—˘Dî;qöóáGŃĆ”Şľ”ĽUa $~坐$…ߐŒä]Vün•Şň3B%AřžŕH]Ľh•ÖŽPšš@Ăށ5"ähĆ3Í×ŐéŇŢÖ=şrx: 0tFmşýĆ×(žů}ŕóßÁý„[Á™ůUˆÎ~ýë_§GśéŁý8ݸ~ĘĽľÎ =űB@ ÂńľÔ#Ş7ë¸öÁâ°ěý‰€śi&ŚÉń˜ 5’Pô2"!Eđ7ÔöXm­ ՌúÝX ˛^~0eŠ2ČŽQ&ŻÁ ?qżŒ´üLÇ*%Ţ?âś!´ńUB-›$|ú!ćńřŠ2Kœ&2@öz0҈â`ňSFc&^kKzőŤôpˇOíވ–[eşźÎm•Űĺ˝G]Ţ?“ű–nł-/"OYę&ži*íbh•ŕ  Ć%¤ˆa#r&ÉyďRŤ -v¸^÷şęsY{IUúƒaJ÷vůž×řބ‰HŠGĄ“[ŻVůŽ1ŘŐăňôůŕ+K%şşÎŰ%C!j´ť­4#Z¨§ đ… ŽôxźäqŠŸŹPH¸bÚ<~ňö}w:˘č‚Ńr{žQä$áŔűöęߍŸ–“L)™œĄ˙ŁcňŰÖŻƒÇĎ^?~ęž÷”eĄW¨:)pŠ š„°J“Dߓ晳~ĎçLŠ#Y!}‚K'E粍őÇS°xżYąOđ0Í$Zd“Ű<Î)Šĺ|^Ţçé䑳Ĺ,ŽíCO`ž×ľo¤ťts•Ůťh×V—hwçUé>ůĄhm!ä9WG”ž^ż˝OíS5äXS5ĽRă*Ľžřř#j.˝DNüb4ă,î䲤%:8čŃňR‹.oŽňŒúYŠ[”›űöÁŘĂwţ˝ůÎřs‚ă\ ÇćÂ, 6aArź@ŒĐŔ›ŞKŕe'"ˆÁ śk6›"kŻ)plŔ`ąśśFé/ý%‘rQ‡ŚçĹ~´ŘŚ čÄKŕ¨V‚‰Öí-)â$;>™˜sƒ 8؟eŻžú‰SĎmӃŕ:ІŮUÝvk +°oÓ^Ř2ŰăjýÂôźz?(Ĺ6ú+‚Ůg!°XĐźHްę ú˝ÝoÚ})Ö]‘x`ˇË˛ăě~ĄCä+ĹƤ„ő8łLS{`’Ăţ´1Šś“uŤ:´ÄŽ1‰J ¸E%ň×.+ŠŁźMČj›Čď<%ď‰ĎqI¨”= ňN˛“R˙q" ‚˝ĎŘ [OúĚÓvčKŸ3űüOŤ3í7`ş­­űi طϟ>×V˘Hް„KĘŃ6X<śś=Ż-O"di‚X6N#ăŔ ío č‹VŤ)d‹……– p_Ÿ$Źu…ž÷wŢa đ}úӟŚë×oH`fŐo´ŒBNŕ@ăAÔĄ <”•˝ë„UřMG^őhŔA" ähŸÇÁVł%ŕB*áą>ľř<*™CűgKŽPC=č~hoÚśŹŇE‘…•Uaą˜ö˙0;6Œď{–mż9ˇšËŻĆJľ>Ýšs›ú1žWh{D]¨ÚÄCÚížIwśnÓ[Ű Ŕ"^§ÍőKÔ¨,ĐĂ­šäÚvčˆFüâžyi% ?ňퟢ×ŢQVžĚ÷]1H˝şt™AţË"!ź—%Xęԕ ŁßDO=pĎýlŤĺŐÂ*Őă -7ř<ĺ&ő¸oş´Ů¤Ď|üeÉ#ž3¨]Ł(`ŸŽAúˇŰHÔ*X5 ňœ|Ż:ŕg–úŔeIr çŇřŢ;”şüűŐWřź „…×A6bŕ;‘hŁîŸŚO•ÚeżJ ¤ސA‰Ť҃:  %‚öĘF’Ę„T˛YöˆJؖëeĄŇĆŇ>źCo}óK´óđm* Žhđ™W)Ź.rŸ‚ô, 3č˙ú[ߢ÷K˙˝ůć;ôéˇŢŚżđƒ˙]ŢX"CßDAŁĆcnˇœrPˇ"Ť °I+7îĘŘ!râä žŘĆâë`Mľ<âcş :öLŇńŠÝA?T!čĎş ˛D|ŽFľLËuĄŃp= š}‘¨f49`‚LĘ‘ƒ‡˘Lł°?_Y{\ĎÁőQJ]ägđaĐëˊâ?/5#žHJÍ*ŃËW›Ň™hĆ´Ôŕą|­F‡=§•ČxéRR”JƒŽ˙Τ턢z¨ŒźÝeHlGÔ`eešNý$¤Ţ  u(L%|œÚR÷€–&âEPHB!m4„˘ŒŸLÔOŞP4á î ů8 Oňq–eIÓBÁ‹çFľŔ/ Öfî:@„ĘJ Ĺ<ƍô+QĐć×@ž”)0`cđ”o˜ŽŃ:ţYrşSŘŞMU¨ÓűŁVťsŕδőţˆţ 0M§>Ž8Jâ“Ărí<ĚÎĆ焊,Ë~f>-Kš y>gľZ> łvRJËlg!œĺÁS~ÍYĎxř'UŠ8ţě>žI,zZćü̅â<ć“ů}úEë\îփ#:”iušIN[~ŠóŁ7׊•ݍJŤk+ôđá.ĹÝ>ŽňE¤F„˘ŔMťś '˝ťômHúňł^áqhƒwes…HăÍ;\搎_ťNĂ~ÁbŒO1śĺ ”-P˘‡'EA>W§­7!şT+\UIŁ‹,œßŒUy"†jş¸2Mť_ĄÉCńËÔŕX‡¤Ńëěô8śÜ•ů=|,t„R××8kN٘ŰÜć6ˇšÍí˝b?đ?p! Ö$îRŠŇý#?B7nÜ ?ý'˙¤QĺW…ţŮŻ˙˛\?0sX%̘™˜D… ^Iö3‘÷őăm.e ]ť0ȍŞŘ`RŘŐÂř^™Ůpěwww%Ő€EěBŇĘƊüďä+0 pßä÷‹żř‹)-b‘_ƒ…ÂâóŮÎp°ČӕúřÝŽ°ś@pq2ŁŰƒŠĹß설řˇľ“&.˙řÇy"śš? ÓLŻSŐPç-qJ6QSAéâ5h0B뺨ô 6™F„rňęQ'LřNUBʁŢaH/NZ§Š*č}Еs0ÜGŒęy‹äˆi ýD2˜ŽîQü}‚@4ąÂÝŽ‚×ňéőO3wĎ%9ž/˜ôáůĐc(p ĂoZ%Ox€œä˜ŹQć~śä;Čq— ´Áďl’L uϟ€ś*4z>˝wĺRى˘ :m˛+,Ů@É#Zm›úť4[%˜’­¤×{2MÉd–2I‘ cÉ!öY°ŕźËŞcX‰JŰVő^i;Đ>p|Ü옜6” Űďw'î§*: ďęćVW–řŮ_…MŮó¸Śeaí÷~ď÷äť:%O8wÜď˘ýiýô8¸W>`oaÔ ZҐUWƒ´Cĺ:ˆiYň6ŞUz}ČŹ÷)ńó#(’ĺiĄě}ŃžB漢Ą¤-mKřŹiŸÔôˇ"ŃEÉAú7ĆíÓńŇsj=čxa şb×֗UšŰÜÎkXő•đťXÁÎ}Léuzýţ[tŸľM*žőčMjs`śĚA˙*ĂŕAŔ ńJDŸze™î=X˘ß˙ň€âAá`z7(c‡zs-ĄËK=zń;רşzŢžľFŻcŸ!˝UŞU¨ßăśÜBâvźťB>tH5Džä ¨[ŁĹ…eZ ezaí }ř&ƒ =nӕŤ¤i‘î?ęp¸ĚaÖiye@ Pgxë÷č>= !éHRäę–1‘ŸČâgxÖRZ\l2؏çůĆíÇřšě~“jýmj,WŠÔrîđ {@q‡ƒŇýű” šOlSĽţ!j,^纍Ň}ě=źGŰ÷ß ő—>JľĹ5!t>¸K^űĎtđđ=Ş Hƒüš”V) yźĺk[` căň Úâíďžő-şőú—ůúŽhwŤE÷îߌrzYĆDČyďpÝޢEĚçýňţ!ýńo˙Ú`ŸLRHđužóoPű¸Ő^ Łű\Ž7iĐ;ä:I<šÂ§IUĹĂ+WĹUĘ.ŞgożÍ <÷Y ˛WáOđŤV¸ ÜgeîxÜ˝y)jĐfî—yœ>pÎc[)”~šĘ…ź_­Äü ƒţP@)‡’FĂH—‰ZŒÓÇhČuÍߥřÍzBľ¤@7ÎŹ ŢĄ6Â×ţpo(ţÁR‹Ç˛lDŁŽé[ĘrŹ:?çí^…–[ :b0˛ŮJŹxqŒęŞ„1Ő.­˙ăî§Sg‚ăó7WńË|ĐiŠ–>“ky/˜ \}(#FűŔI‰ž’żXňÎ;yôsCź=ćÔ< ÷’Im<‡öń¤D‹“HCŔ˜˜Çža×ě)Ց/M̕5?Ç÷IM瞉O˘ă ŃńzvçĚčó˙›Đŕ“<KĄ8 ;÷ˇŠÓUĺ>Ä2Iť1—iȀw–"ýVčŇr•ĘSËá†n›zuÄžN™nßšÍcÎ*÷՘›ôřť}ǡŠśśöءاVs™Ë~DݞSů[ßXĽOj…vvvx|ɞÇ(ö‡ŁLH’ěË<4WštÔ=¤ťwrPu™V–‡|%ICňG>łÎţÂílˇ NÓ.Ď۲đ)(——Ü_§Ż}ý5úę×ŢŚkW_Śť÷v¸Œ{BˆÔéX‘‹3!5ňŽ!–¤zx2ňŐ{¤– vÍĽS;Ćw-˜ ýaފz†"ÂŃa>ܢngŔ÷fƒÖÖ.ńźý2]Ţ,ó=ę:%†jY˜‹^ťv=ŸżÚxœľblŠhĹ؆ČCăń&1Š[ĐąŸŸEŮŢŢBÍ}îű1×nqĚe}u>ňŃě”ňë=ËBƒQ<Šř¨1\›zTŻó}¨ç)Jłpâştü,E:^ŽŻ{˛ŽNî[˛,ĚýÔyýžZ­!÷űmOśhóë('[ŔšőěĎmns›ŰÜć6ˇwÇ^zé%úţď˙~ú…_řşČ†k|ůĺ—ĺ3|“fč˙^^#Ć_ăŘä/ýĆoĐ˙ô›żFřŻ ŃZf=I&Šż3-ŒÇÎAr Ňć‹÷ž)ŞŔ2ţ†Ż ˇÁ KUԘ ŕw¤Ŕ‰@ƒyÂĘńŚ„ b‚˜ÇŇÍX•=Ŕ &֔čaŐ”Q­„XQŇŢÚă Śôűâąń”:>ůÉWÇŕń ÇE91Q€iz˝ .꽹ŕ¸Ruňáň4"‚'/hP#đ}™'ŞŘď PAppŐqşšÜs-X]4+í?Vcß=ć,rF‘0QTć˜F™ußíKśB'Šˆź‡źyŕWđd˛tÖÔ-ňsd)r.U*Ľ0VÚ-¤"!shÉ)8gŻ7™TŹTŮHÜçQJůĽcUjT΃OźĘd>rJ-hăĹ4#E˛‹*şL˛ńŞŻrĚAĄ‘Ź(ŞÔŞů=(>3JôŃ{Ž$ [ś]ZŕmÚ´”ř`Ő´ŒZŢâ˝ÔöĄý‡Ç¨ŠíB~ÝNŰy^ţžX°^ŻÁś)€3î˜éćVeŒSĘؔ&ÚÖř×a[ú-ܤż˜HŸÝÓW–ZC˝‚dń'ţÄ÷ĐâŇľťG|ŽÚ?اAŔís:é 5Ű-ZŹ/RŠVĘIŇWvÜ})s@Š6ي Zô„>ßc|F_]$Ŕ ˛iWœ|g/Ż_˝O8śséoĆýśˇD=Ž%Čév–¨¤íDű)íĂô8:VŘvYĚ%?ˇšŮ$ć‰ŕj‰Ö.3Pz§Mm‚&uš}Ýă ^ŃrŁI­€Űt™ƒ}ƒvťô{wžÁĎŮúŔ ×čZ}@{‡ z}ďC´uĐĽýĂ7éöë]şńňďłGMî_–¸ş4 ”ń´Ă ňâ]][¤N{Ÿ:Gz 0=×?üÝoĐ˙ß˙˙he骆÷Á×.÷E‹týĘ%ž„.}őő? 7ލEú_~ç?RÇý~ô#ôÚ׿@_ůOťŰ‡r.\¤ô͙ vƒ &I?x,ůüŇăŚâĚ …ôĄHPä4rýYJ’’ĄäŇLů$AŕÖĐĆŔôCďSü‘đxGԓUžPKđďÎ/U}ĺ@ň—ŃgfnEꤞöůĄŃŒĆcžŽ_Ú7şîЃČyˆfœöDÇV)#ąRŻĹßöştŔuÚćq¤?RÁŚƒ_=+ N’ĺşÖţËëÝçýâxHG’Źú—rő!ťô#žŢŒŞƒ :ňnőr($›ˆ†ü™'¨\Ă,ydľ ÂQ_đCn#ń ĆĎ)ŃJł$i>pg@>Š PĄz3â:ƒJE Až–H*‘,ä{ÁeúęŠuŽ$@˝ł›Ňńß.AŸË4ę‹Ě=ČuBj0~śřL‹˛R˜Ë ˛(p$ÔśiĄÚĽ:ß”}}ąę‘˝'‡fc4ŁIr:ü ź0>#•K­V÷ęk“ ‡őł'ĎĘK|aJ„„đľžqkČőĘő˝Ńj-ń@Ę4ĺ¤%ԓŕË{Ć䙳„2Cř…/čf4AxÎΖNbÚÜDä@SőS:Ťň˘Úý¤F˝|ŒŕžQöœľm öœOý8dˆçÜq=Ăúąî™śŸQžYűOľNżô!H%`Uî\ ‹üěc™G´ššN[[mˆžvďăGčyŤ1i4ěËŘŢďcNŢö)kšSN‰齲LŸQü›’Ëp )€d†-ż/´Zô™O­Ń;ˇîҝűďpĆ>M[Ű÷yţÖ đÝżˇE’E>čÁƒIgľ¸°H+•+űôć[÷yŹÓËŻ|˜ö÷îóŃ1?čňĽMö§Rş}ç!Ýťs@++ëě/ľĹ?Ůź˛Bë ÚŰ?d7§JŁ,ՌOŠŽ:ť\ś }ęŰ>F˙hBŻëuză­;\/7xîˇČý:{PYäú$qĚHR^ě—e§“ůŢ{󢳏č7]lÂýғ2šúŔśÎ€^űć[üóüü ×ď űŤůÜíH ,-ľŽĹţěßÖœÖOŘ8IÓĄÉń֏ôůŔťÎŤą¨ópĚŁ_Ĺ żcQö_^^Ś_|Qţn6´šq‰xJ’ÇŁl ć¤çśÓ>˘GěƒkÜĎ,b ¨Ę0QX:śż -M.šŹƒłÉ¨LŒĚďźÖ˝É×Ű\5źŢ°/‹Jşěcöą8#$ţVŞ7d>” ü†ëG$B C7žcŽƒ"\8˘ăiďšý—aú|Îmns›Ű{ŮŇôý3fýĐý}ĺ+_Ą7Ţxƒ.˘˝ňĘ+rłŹĚąŹżô˛źţŻ˙§ż*¸:đđ˙ń ˙~űů˝}÷ǐBäƣɅŕůËůűŠÎőžH˙^ł C°€3 ŢľpÎ!ť†wWPžŔ N?&—.]b…ŽFś“ŢUÎ ŚA#aň4›â´˙ŐżúWéďüż“nz^¨˛FŃńśŠE`(‚‰JJP`ç.4fŮI üyL˙Ď}îłů1O›Âęvˇd‡ü8Ap ÖWń\|vu›ĘäfëԂJ谓?KšPđT?[ZpVÍŞhúÝ~šzEą^,8[ŹëiŰú°Ç’ňn†ÁÔúr_ʑ¤9< …v§çD[SđYÉšBAÉBîš]ŕSĎiÁćąyvŒ`Ő!4e…ŢC;‰Ö ť˝Ži÷D`칊 )Ó҃¨ Ę42„m+j6%‰%Ičç"šÂŢ;-ż=_1x8 (žÓ֍}ŽěKËaËYÜO÷Őş×óiĐĐ^7V—HżšśF›—Ö9˛$Ršăă†yěŹý̘¨ÓŁßůOżCßý=ßK—6ÖęÓÁhŸ#Dě”äŃno7ďO´-jÉ4¨bďH!0%°éůľOĹwş{”§é?`ÚŚ4í‡^ƒÖ™MbIBÚţTYĹöűZ_š*Äś +•^źOs›ŰYM[L•Ä/1›ŐéîVę’tD śB­!QwÓB9ŚŐĽśŽ¸(uiČcEŁ•ŇJý>t5 oźĆcë!‚•ř7;ęZ^˜> vĐĄf˝GՅ†€ť˝Ľ€76éclŃĂŰ[´ˇ´CXÁ@éˆÁě˝.ľh•>ˇ¸AÔ Řç‰ď0ź@•Ľ”Žm.ĐĽE|ă…q›Ł!nQŁÄýhŸYž./׊ZŞ;Â%˙ˇśžBׯą_đś{‡Hmc ,3¸O`W'fČíľéá[_˘˝ť_Ąáˆ$uI’ş•›AćǘŽKýp˙ßŁ$\fŔ{“ŢřňWř@m ’-Ţv@]>NżÓ7 đI˝Ô“ ćĽ#jlŃ[o|‘v¸„dxLĄŹ˛ËhçÁ÷ŻSłUŚžŢĂCG¸ísUݎ€čW~óżŁŰoߣ×_Ś|đŁt÷öWč֝ˇčk_ţ%ppvűŃíîtřóHH‰ÎÇS\M ¤şÔćFOÝPgßɒw°ÂžŽôŤeIé"~ôIă1Ş5Qşea-–źňEŇ/Q;"‘K–~.ŒÄď)ŠÄi#"ԕjBě, ™oTĺD4-?î &sVY ő‹‰0íƒńŢiwEŞi5Ü\.BŢ>üˇw¸ţť}žŸ5Aœ ĐpxpH•Z“ţŤ˙ýwń™*ć9r+ô%W7ßĂa dËHˆ)Žü”ÓĽqů•ÄűY5 PLć(:ăk—şˆ|ľ¸gŢľŰĐ=˙"Ť~2šť8vÁ1ÄÇFĂřÜž žű•Ľ…ă?řŽivK{6÷čYN=÷3zžÎzÜÓďݓ“Źž‡…XqŢăIФ}MŇSAW鿸żéö6'ô`ťKťť˜{ë<ˇDľ*ű;e¨$2ÝďƜ¨Ó=’çĄ^mRŤĹ*)Űš§] öĎq$ëŢ^‡–Ť}éĽëtíúˆîŢyČsˇjÔč€Ç•ý˝G܇Žd,‡ˆ#HťŰű4,Rˇ ÄźĺĹ}ć3§v§G˝NWR#¤<ŢuŘęhum‰>đň ŢžEHśwčŕ¨ËĂYÉńĄ>ą´ŘŕqpH÷îޗíâd…öî Iă#ű }ôŁ=`_'MüJ rÄGç‡8˛ëŻŁc×g2îź &sĂ(8s H7tţĎáÁ=|’Ë&-..˛ƒ:_œPĺœÜog(Ć܊ç°űČqL̉ü;ŇŤY"Ú-Ćf)đŇąD MЉX,Ćl¨š\˝zUČřąTźÜř;PÔ"jwÖrŤbΏř@ŁščŐ*ŞăůYâ¤ĹXÜł°P2 ą&ŠTmr|!v)ybîńPČĺ(J‰ýT¤t‰ĘüÎϔ¤sĂ˝I >ĺb #ř×ŮĹx>ćöt MŞ´ćšŰÜć6ˇ÷šaĹűÉ~ř‡˜~ň'ňÂĹćáóŕÚÎcđá>űŮĎʋţ/$"_üÖ×é?}á ôľwŢa˙>Ď3útÔqŞ]ˆĂ!ŽKŒŒrEű‹d†`ç\c 2ÂÁ×wÜT8ݐ"cÚIłu&9%:¨s­R|ú›‚–PÇŔ9766č/˙ĺżL?÷s?7!ľoW-+kz+Wgżƒ) 0ÇÁJrK(˜›îęo“Ś)f'ßţíßîRƒŒz:Éě$NëHĽö­˘ŔĊÉŔßâďîŘîo ~"Nmg•0,ŠBŐ-ôˇiŚ“ęÖ֛Ö-p_œŔžTˇĹóŮď,xŤßŮz}(›áĄZĄęZ÷ůŠwOv°×ĄŔŔ[ßiŠ}u{˜MÁá1R@^Ö`Ź6ĄĺÖÉ­ŚĎŃ öYľÇQŐś‹ŻMďPl3z>lĐm´-ˇSPŰśť-[ń™˛÷Śx˝'mkËڎt;ͅŢ붅”śšy‰űČęąvyVÓ˛ŕ|îƒ˙đžHŸŗ̌Š2(XR9cŕ6X¤ZłBĽĽJ~Ÿ•$ĄélŽŽŽ`ĺsPVlpQÚ6ô7%OŘúÖŔMń¤„)­OKS™S­íß4HŚ÷K÷Ós)ĄGŐot_˜^SąMčöś]ĎmnçąŔƒi•JHŤëMZÜéŇA/ Ą¨3p;ŤtiąBűĂ!Ť@ȨoľÄASák)­,Ä´Rô] rôˆ¤‡T/Ľ Ńíťť|œ6­_zýĄ‘‰.uîŇBă­Ż-Ň(k1f7b°šGë-˘…jORipt2îSjâ‹]jďP–ŠßjŇÎv‡Ę p×číoís żC}î/ąOśł=˘ÝîU×úDý´šœŃ5ęvŽDzťÎÝ@ '._ČŔt@U:°#ρI¤Ř Ż\a­D°?5 ¨OÄn…ž<§üŞ!Ÿ ”ăî÷űÔ'.Cväd­‡G\‡\žz@¨J>•¤%Ą(pH:™˛á#::€”ó–#Pç! 0@É)Nä^ŐjP“JĐďöViH{TÚôöŰoĐbîĐ׿ú;ÔtĽ=ÜOřˆe5,źËřrfęŐ̧!ÚHC ó?ˇžţëŽý ƒZ@ ď5Ž×ŞO/5đŁ$Ňʙ(b a@.(ČÁQ­y‚ë> ŹO—yŐ ŸĘË+aIU¸ŽJrźräˆ P†9š’ćUĹ*O^ô îeÂA@”‡‚1YŃőé  łˆ°¨e0`kń9*öóGIYüؐděă'™” Ö0+ ´6juŮWžçcŁn٤$Ť $51€TšćűQŒŐ¤=ÚÇNÁBŇĂĹŇQg‚ŒKI„úšr„‚(ęťšű÷lƢ"0d}0™›UŤ’ĘEÁĚŐ4ĺۤ/…ˆ<é\bL°ZZ<âgŠ7¤I'Ä>‡#o(ŕó~“›WěHšnB̋5§ť˙¨Ÿ˜’#Ę>ž?§†4TxF,ô,ÇŸŸÁĽĹ&š”/˜üüóş §Ň ˛gC€P{Ö~^^~ Ś~?ńÝ EyŻŕxç É=iOúB,‚żĹŢËP—äÍŢypDŻÝÚŐR¨î’ďßH`ôe‹ěoőü˘šn{ű#~~—ŠĎ„ŸÔKćˆučѰJl›ý2#jôҋ/ĐčڈăGńĘ ŕ‘ş };—/]ŁË› >ˇh˙ Gö Ű˝•vŘW\jrŸ›ČœB‘’ĎŐí#˝É>ŐylŁQčĘĺBJ9€ÄÇÔŘ߂×ghqŠNüŔ ´ťˇO[;Ű|ź Ÿ˙…÷yŰÚľš<JűŚk[’Ü̙ť>Ô ü.Ť8đţ7 %“ÚpĽHĽœQJF`Ţ Ÿ¨ŐZ•ń/ Çi˛Njăž˄‡ňăcq:öë6¤ˇéđůuNŽżáo”ÍŚŢ€*>#řŽš9Ú8Ţ%-|=Ńř¨|ĽŃą[ŽXTBg5”ľŮlŃÚú†K Âeë´ÄwŔóUŠÖüœşń‰OČÕegĎOlŤľ€çŮô×kœR+ŕjSŔĆűАî€Ęq ŁH*ŃípŻí9íyŠĺ>ŠNŠD‡iŕ"oŸEÂ(~.*ŠŘ}Ě'Ř^JĐşšüdtě<ÚĆi¨J.ßi(9!Ičˆ.%śS‚…şuŽ"{Ó‚Şú˝UąízéĹŹ’…ţŚçÁDZ öyšE´ĐöUT ĐĎJŢ)Ţ÷byaz-ˇd‡byíőŠŸĎâőŮśkQäőłüĹ՗E5{>üőwKţ˙–I~lQ°˙ĽKܗ6ŽÝŁi×V4˝č;ńÚŰăv°MĽV™–Ć-Ş„U0íýľ)“P&ôńJţĐôxéqőÚp.%@(9Âöľzßő¸8†Şi{ˇŠ'J’°Ä1›ŚHI.řŃŔ˜^ťÖ%ďh]kYő;›6dns;—š ŞÖŠßžÄÁşü>â >ˇí¤EľAV789آö;šGü|tC:ÚçśY/Q´Ŕ c•Żű5şő6›‡äk$…ĆoŃ7žu‹Űt@Ł~WzŐJ‹ŽÝř~TJjtđőH°¤(yűľŹ‘ç1š$AűQy‹î”r°6Ą­‡‡Ô\\Łí…u*o^c_‹AţűŻÓćk刖ę*Ľ˜ *Œ)dôĆWŸÖŻŽRłŐ˘‡ˇnsy÷Šą°H(̔ ‚îmŃáŃ1pÖ§?;H+˛ŇZ’žŚ\ágˆD”í2@2ý Žű‡TŤ` RłŐ§HűnÜLŘo2PG€˝Ő•U~-s_ÝĽ#ęô!x †Ľ'Éüź—13óęZ’ášťďŽČ5€ĚŜĆ>¨mu:ŽÔ€zv&ž¤řÔ.}ßřzSńĄ¨W­śř•Q3Ĺs;ŕšVç=ę´i‘ŰÂz)rž'ďZöh“çTÇ!?Ds›ŰÜć6ˇšÍíŮŘw~çwŠŇ÷żúW˙Š.‚ýŕţ \ÓÓ6ř‚zéyŠÉ^öÍöhgo—v÷öh{wŸţăĎ˙]ť0 Á0 @CÇAŒąJ¸™:yP’EŒUÁŠJŹĐ”˜,€ŹwLBž÷{żWVTýÚŻýÚÔňY°WMWL[ĐZÁD őźşýYWYŔô<“”řĂô‘|äŘD,8ĺ|Ӏöœ QŠrłi†SŠ’OMĽłŒ&ęÎŞËb?ŰëWƒiŕůiÄ%XpT9 $/–Ĺnw’ ĹkĐ߲)Şś>Ś‘ŠÇľížú M8ĎĆŔ‹ O;éS äÁ™ŔžCŻŰŚVą+Im˝ëĘŞ)Ëm 2 ř[%ŠiAÜďš=ż•….+ěöv{_‹ä{_ŠuSl?Çîo–M!´ˇâýŸFȀiÝ+i˘¸JĹŞŸhżˆ>T'Űđďťť{yđĺÚľk\œí´rMű Cߪ ŽŐć{¸˙h‡n6_ŚV°ŔŕWŐoYę$,QA%ËŮ{ĽrĽŞś˘_,ACżˇŞCVŽŐ…´?Öc*ůÂŢSÎŤçĐăę1ŹB‘í3´žíozOqNŒ+ŞŇ1ˇšÇtH†%:|°HG[;o0H[áţťÉÎlFšv‰7¨ĐQoŸú‡‡ Üš ßL¨SkÓŁhH]ůËTŁV%Ąýv ŇĎdš}R ű8ćŘŢÖÖ6ś#j…e hBĺĄ^/Ó0CŔs@Ͳ4â`áöî- šßć }ĆŕćޝşŸ>˘KÔĺ!í<říď<är¸'H¨Ë×°ž°Dq§ComżMw2ÚŹQƁű—cş×üZX—pwg[R€P9ĽĺĘä yúżbŸ†’:!îá9çkF0j)r}„ČHĺ•x`ZŔPf ~”ŠŠŐxH{•„Ľ€kɍwńȁîQšJýú˜TČĂQ,ă'˛#ô‚F.’ţľ_ćr¤BŽ@ţój9ô 9T*Ô>Âvněk4@(+‰"IĀD­Ž•ţ¤öčőb<ń;‹s;pH|ŞHWŔNZ$\™˘4đŕ‰¤@zĎu7ôšŸš "ŸžxŸ žň`C1%Ír2†ŤÍ,ůO¸Č<™V0<\kšŒŰqÁäŽŔç‘4'’ŸDËĺÇ@ř—JÄś™Žť>‹}ŕŽSÉa6ŹpÄVWŔÄ&wß1‚¨Đb5ąö3YŌUŔ"—î+ŤöA¸ˆbŢ&äqd ţ\ĽüÇ6QŮBęÜî†Áˆ˘a&çÁŠŐ*ƒwU•Ĺă&ŁTˆ<Žƒű1âçc 2ôŇ~łD$ë“Q&m|0H¤¨šE&>ŸKmŁDňŢ`œ.ëYÚéóW÷ ÚŘ<ď–\Š$íœř";S~ďąÇů<ˆTęÜKUÁß8Ťœűťm:gÓöWôE˙aę98ĺX§Ě]Ҍ&8.@8SyůżŐľEjĚÚČ]OaŽůXV8Çšˆ9ąě|ç>+9ä<Ĕ'1G.šŹŠüŠN<ýcTÖ30!Ń ąŔŸ)8™_ńŘmĹݟ31/—/z6ÁBśçŸÚNí ęZĹŰZź×J~BQ]ŒŞBű LÄž ŮĎHeŐzCÚ/9a* ”šŘǀ˘–ÓyŔě§#é@rĹŘđđá6íîThey–—hqąĹŰ÷x°Ş˛?ˇ@řv€÷ŒZÍ:]ťÜÚÁQŸÚ6ľťmţĚ {Ă­Ś˛XĆíŞO˛ÍóĹ=č×V–hy‰_Ëë´°Çă ×a ő'îĂăśk‡ÚGIęwYEtŃ,żßŽU"ń1sƒŕÄ>"ó$”DŇź:ő]G~ŕšn%œš'|IS—č<Ç@çw]”†ńT縺xă­¤"á6 EŠzŤIuŽšVEIĄ&ßŁŻŸXčR.M™Č;š´TúHŚ6ţô#‰#1ŠZŘ´xBŕxiý_đbžE!€Ô›ň‚ßb3”źF<Ÿ ş˛SľRwD \GľćÇKĘ_Yţ˜=Ł~,pŞfY ă˛÷˝… 8ĎźâS˛šá„L°ÂCŻ ÇŔ~č+ń-ł*\ŒSEůu(9Nۋ’ďP|ƻ֏ś -ŸÖ^šbĒďŠý‘^ł‚8ŃÖĂ6˜ă üá~WtôűŤ­*ƒťčS3É|˜xDş‡ŠŒ&‡ ÉýL%C¨­”W(Ę)ćgşCCŞ5#Â÷¨ÍÁŔFŤNˇiʌďńšlQżŇFĺU8:č˛?Öߥ­[_§…Ĺ2ZąZëP ˝4äŃ+pÂł*}+ýŚý› MŞ.ŽĐa÷Ń`-j- sß‘KYÉĐSŔť.Z÷şG’nŤŘ|!Í nâŔwI’"…‚’ řC‚úáqţ9DpÇâßGBJËdű”ƒŁ‰€Ř$y“e H‚ĺP(Y*GŽžůüG„†}.4÷}*űŤő2´! °# xt,Ä wÝe!´‚xRX*ä ¤?Aä6e˘d€÷ZŁDŹQÎ@˜,H3+8BBŕ~„ÚC(ÁâĸîďbW”:פ“2“މZ“;–ŒWę$vJĄ#n`E{(ÚŽTŞ\!ýc0'Ą‚2 ‘&ˆD}KV$ŽŹ!)Qđ¤”ŃßrąbIçáR¤I3Mîq*)>Ó ŽÁÂĺH3!/@)¤ŠDýÄŔĺɆ˛ŠKVńIJ$§‰Ę™‘˘2—q4…ČXK ‹ę #j4š<&†%Yý 0ŤQŻČŤT‚"c2ŚHc“óŢ^ľ“aN°@SOÂrťčó3ƒŐȃĄKGƒÔ6¨÷ˇíˆšNÇgŢJ*Ýţó™‡Ěś ™ôŇßPńpD‹~NŽ!Â*á夜gřHž-‰_ËqRNÜ=É*ůx­ŤxE˛Ÿ­9ăßűD ˙œrk›ĐĹďTô2óĚě9Ĺ“çzłŔ˙œ¨ëýő{ÔŻ9Í@#í€#9…U†óXvęOߊäYö´Éů3 d˘‰“Ń1žÍű#-H–ë9<2ĺö+YĎÍkcQ°4‡i˛A˜¸á0Tb„§zeăĎůń'JäUƒľ‡-D|œĂGT ű´´Ř0é‹ěqíXPś" ó~VcPyůr“:´ťŰĽwhwŻ,JMĎřYÜŢęČX€Łz˙áżÄcN6V]ĘÄĂ.Ô,ŘOŰĎhóҏămQźh4+´śą,ŠäŽŽzôpkśviuy™Ë^Ľzd÷ ííöŘ_Ęrۑ“Čx^˘ięˆďW› řůžÄÎřĚËř8 f˜‹c\JSGf†i,@ű`̕•š6ρ+ؖ)ˇ LçŘŞÖť´´$ă¨.ˆŔ/¤öˆĘ%QŢ(GłI†SĘocY^^?˙lĹâĎĹTŞ'÷‡ž˙:˜ s˝Ţ˘†ÄDÉ"NbQŤŮçč—ůâ:ˇpĂ=WŽdńlˆ>Žţ{żŰ1Ťbœ)šŽ´÷ieÔŐ7Ěaq‡ŽđýţćŇ:%ľzŘXŁn)¤gű)Ň§Ž5ˆć‹šÍmns›ŰܞšýĹżřĺýýJ˛šBŻáÝ0UŮ˝HvaŻ‡c Đ“¨VŔa+[' Śé÷0uŢÁÎÖżń;& ^¨ăw•ťĂDűc’˘+Łu"óçţܟ“cü›óoäx6Ŕ¤D 6(ÔÇʡ/ýŠ)GŚôÖŚş'ŮÇ?ţqQݰe•ô9Ź**(hI%V…˘8!+*uO? Ä TN[ŻŤÍş˛ÜŽ$/–˙¤kS@\'˘znUH°u\é§(ŠŔyńÚ-ÁţŽ ~‘xbSŘŐőo‹r…ăőZ,Ń@ř8ž“'ŽĹƒÔZŸśĚ0âd؇iĐz¸‚‰śm'ۤ ˜ 3č÷x~,XmÉ –ěcĎgď§­s=żś K ąÇľ×;í>۲[+^Ď4ĹťŸMaaI=śMčwÚŮă)đoďľUĚŃ6cSéů•cëHÔćć&]žźIk덀ąuO”Í$VčŞRUĆĐöćʘp¨-Ť“‘+s+QyżLŽÝ=Çčoő9ÓrÉ*îgl* U3˛÷QÉZŸz}”>ť\ ¨ÎÁşf 9”Ëüw™z %%’ßJ ”8Ŕ‹œÁ%Ŕ+MŞ•—Ŕ­8[.­ňĂĹ}|ÚĄAږmű FŞř3ŕgŽÝĄaАíĺg Öć€|™’Ţ"Őâ:Ú˝Ëc÷÷Gń@ž˙!ËQV7i%şL_|ë‹Bˆ|€ŇƐŃţŠ—ˇsČď ú=VE|"ˆ˙“ë…{ Žg×ĺ~v MŠ?ş” ç$ ř>7tńyŕű \ŽňDBĄ”čœR€¤pđ˛Ç f’"DGˇG™ŹŕDažcdh6ŤÔjTř~Ô¨QcP‚_QÜ!–…îXHe‚ł–ŤšÁ;DĽďxOdlÁĺŻđ߁\SkĄB9ŕŁM\ˆČ%’:#đşPű)ňǍɔ”:• $$”˙hE¸—ĄÔé`˜r{H…ˆ‚ZDýXxŔ¤¨dpЁöZPB |\.žŽ cŠHŒťŐ~Ą@@"ČbYˆŕz8rŠ8xßjš*@Ę 2Mœ&rżĄ˛q$Gčs+F5Uˆ[ÉĎȀB4Š8j÷NEâËr;Ń䎠LŹňM‘‘#ďę.ŘbD )ƒ˙ňŘT‰…´ÓqUđŃJ˘ ŇlŒxl Á"bđM0Î&ăď"ŒAŽxń3’…¤ ńę%royz´ŘĽ>ˇ¤ ɒ‘´ŃJ)Łj ęR˜×¸4\ýáł'XX߸8g |›PӟŃ?TŤnŒÇ¸ ˘ĆuJBl řGˆNąü Ý$âĎBžó?_c‚ŚžŤŻ‰{€J UĹđ˝dâ….MHFđƒóR°]Ő]B2ƒ`\ŸĹcůźŠ#Y‹łîáňR“Îay$‹÷š=ÉőœśďIż?SŇÄ3˜IßđËěłJŮbŸFiŹî8{[ô}!ÜůçËű0÷Ěwś6÷С'Y™î?8¤ƒ­7hcuŽ^ِy˜ŽAvŸ1ŃÂ*Ś:˘üŒI•a™V×VheeYŇy亏É<óFÄ&…üÂc Î#•pů¤Î7…D ű—PĽPő'%S@ŐĄR)O¨ć1˘ĐĽp‹ÂđIJލŒÄ߈ó˛ŠbÉu;m.×]ťś<‘†3Ż?%ÜN;ß •¨Ç‘´j%GŞUâ ŕŐďšX,ęLcóuJoOż Ďe?ĄĽ~›>˛÷}摨ޕ¸,­aŸvŤuÚZXĽŹĘ1”pîŽĽô¨śÂó8öĺKĄŸ]°ĎÉĎuI8‰¨ŘÍăs›ŰÜć6ˇš=A¤Ô÷[ş¤yžĘEËÝś ć˛\‚Ĺőë×eƒƒŒ ˜]=Œ@˜’#@œĐ|‚0l‡I‰Äŕôc{% ŕx:qaÂŕK ř]ů§ţԟ’ Ë?űg˙,čô<¨cU›ËuŘqňđ^ž6ĽS?0+ŽźNĚNł"đ;Íđýg?űYşyóć .˙Ě1ëO;“C­$>ę%_ Nn%ČAžňÁř™_ő$eÓxY`’Oľƒ˙^Š_J>čT@ŮĘőÔÜb¸yY2ËŽ›Uu°$˝žié.Фą‹żŠŮô Ĺměqĺ7“˛‰6S$%äíX€LVdr‰ä„aňˆö]á‰t(ŽËĺ(÷1TŠd) š•Î’űŃ-ƐBęjç`›ŢA_ErB1˜Ž ¸­/{v;€î¨.ngۂ’*Źr„Ŕż˜šFˇ)*–(ŃĆŢ+{źbPŘőE˛Jńšl=ŮW1í„U\P‚…žG˙V‰PýMƒz 9ŕU¸|/AV{áĆuZ_[•źŞ5Ŕ”Ę%%‰Œô¨›{UĎŻ*86œí#B ×ăţPęŤŒÓXdćŃÎŃŻ[ľ ôťJRŔýˇę$áœ8śŢCm#śÝáwG ş‚ÇTRžŢUĘĐ ‹Ö­” ˘eĐúĹuâ8J +’z”x˘ßalÂX‚kŔuەEs›ŰšÍƒ’ţßŰْ ʤž'˘,Ďx9 JځRčü ôá|“óQô‚(7űŁÎ€BˆĎH‰ €C2˙lÄ ÖŕE`żÄ€ţ@Ƈ„9ЎjŽŇŞüźĹŘ+Ř:ÔďŒhÄý ,˘TĆ3*k)#ęw{ÔíńŘÖ¨;ęJ@– îRřăgű[rÍPń̨—ŔşđžŔĺi–žaXáŽ>(ŕW‡ô'č*`ŹŘ^)9¸J"Ŝ%^z]–ŐyĽ öC¸~KźQĽß$°=ËJHşgŰĽŇŔŠŔˆŻ§\s+‘zŠ>U'eěŇ60@…Ž€ţHŇHT°˝[q\*F2ţcńΉ2ąSmp€F ŠC\úŸ‚ZţgPv~”RŻŇä(…ĎSĺ:á=řX1ŽMRj$ŽXÉż×ٟXŕň6ʎĐ–¸ S D!ŔJÜAFŁ÷k¨#€ůž¨rŰí˘Ŕ/^ č@ŠF%>ў¨pŔmíĄˇĺţ},Ň ô}ëë}‡'YAFqKŸŘžě99šŔyź#pÉŇ4Ĺf0cŰâĄábqĂĆĆíďč+_ů2űńłĹ‡ o‡$ü<¤k5To4yœjĘXĽsd!S”ÇŠM–LaßľNr˙Řߨiă\™4q)ę@JœůśzôHĆ҇ŇÎîŽ(W,qű­B]Şe,r‹ŢŠ‹dމđřgˇ?rjjś,ś]ę7¤˛sĘj2ćG5ĘĘNąŹ^k‰ď…šÉ`ĐĄűN˝6‰Ż„B:ámĘđăŕwJX6Âą| RI…CQN˝‘řô˜„™ť'Bú™—}­Vďˆ>~đˆ*ń@ĆęZÜ‚Ä×6.Q§źŔĎ:{ĽüęFüŹđ=rŹo§\'Éđlă+BDŕźßxŃŔŠš˝ěÝó7žĚŠąî÷[ůçvąlÖsô^o›ď×ç˙iˆ ŔL~ćg~ćąć#ĎÓp~ôG”žó;ż“ŢMť¨­äÂ,4ĺˆ éŠ›Z cöŠśW)r=śŚŽŇű¨eU Ί)Ľ”ĐĄmLü†>YÉZ–÷şł6ˇ÷˘ů>TBä Ó8Ę/„„ĚyĄ'ě%’Z ”ÜÝCnŇH%1\H˛U +é‘R `?,ť•Š ´đţd‹{’”„@Vö'žđÄĎ,VbŒá€|Š=xdă¤Í82”Z÷4ćŔ#âi‡nÝyƒýXr' ÷űčKB鷔ŕÇN–\˘¤óP"šĹBtđ†'<¤îů|`_ę„ \7H˘R@”Wú ÷3[”đšyár76g`Œ$ J‘ â:B€yî˙Ze$$.Ȏ¸xęÇó(ŞJnÂ$Ý|œÁČWŇRŔ#ţť/׌JPh(ƒ8Ŕż ĺCA Ÿ"ŁÄ‰@)ČUĹĂYJ>ăł\EˇŰ—"ƒX₺‘S­@:ŮDš! ňKwm0XĄS’ŕcT1ƒ`—9p ĎČюH°ď÷⡑’kĄAâ¨.W0–Ž]ą?hř;Ŏ$<Œ%˛š2RúŇ!ČH‚TaIÚꊒˇg(Żtť=ŸNDGhżí)|6řDGź3ňhv_ËęĘŞWń™v=ÓΟwćďy;Ë˝’öqrŒ@çXśż?żemçů›ŒŻÁłšăö9râ Ň$ƁQœŚ5=­N@^[`ޏ+,Úů°[ż]z˛ćĘ:-Ź^Śý­Ű2ᾡD÷î?ŕšÓezĺćeŻĆ:­Lîť|n™:%¤ év1OqĘ+Ť-!KôşY~ý7vwdNň~€ë`HˇďÜĽˇŢ|78 źÉeě¸ţ% IľAvvRűh‰ç51՛ čóŔ´yyCČŁ‡‡#jw†’zN.4ńôˇ<—9 ­ Ł?P˘ă_ćăUn‡ŸĂ:P˝Ń¨óŤ)ăPŤľŕüŁÄ`•%ţ„N]ËÄK|2?ë,˛ ř^ŮxĄ‡’U™űa\ÜßߗE [[[´w°OŻ*Ľ1ŘÍÍK2—G<Ĩ›ˆĎ ĹŠ5a-1›÷q8ď'=Q!?2áuQÁËÇ dAҰÇ>SW|Ę?'Éţ5+ öݗ¨\/Ë~‘_d‚9C–“ń—]Ú5¨ĹtčĺĂ-ząłËuKůAŻ­˛˙đť›/Ňa}CTţ˛RMČ2žš8KÂĺ uś6hN¨˜Űťj6Ć9‹¤0+úźmVÜ×ţ6kŰšÍíiŮIĎ´gĺ´š™ĹŞŢM{/<ă°đ /ĐĎţěĎŇoźAďE{ĺ•Wč‡ř‡éĽ—^˘š=ť0 €_„\[[ËsŢë@ pţąRÎż‚gpîáđ[@MAcĺńYIś Âa€u˙÷˙Űߤ_ţ•_ĄŸ˙ůŸ§ž\ŒbĘ2ýŸtM†ŽŸXĽá'÷,œuŎ RÚɆ~ţČG>BŻžúęąí§ŮiŽ…ÖŻ‡98É˘•&Š€+M”Ńp×{éţvšĘ­,żHoö‡TLă ŕnŹWp_ˇSÂA‘`aŐ Šu€cĂ4ŁśŤB0­ž4}Ă´Á˛čJz„r9Wč°$”˘ƒS۸֭M_R,“*Ż`Bkˇ×lSJh9Q&ýŹĺŐk×`sÇÔ'ěwŞ d=žž{ĄÂ§HjŔ3ŠcI^P˝@°ĺÔkŃmfĺ…Öś§×Ľ„-Ż%Ůč1í=,śĹbĐΞSëČśËâö–hbŻĂ*RŘ{ÓzŐ`‡>콄ŮzäÇ˝rő2]ťvUúBH—ëłQź&­OÔĽŽ„ą$]ĺi‰MvŇĺŔ‰A~O ćsűömj6[”ŮÇ/tűa5Ž^7únôËZśŔkč“ő;ulݨBQ‘,ƒë (ćŠZVœÓ*a`{GÓAa[œíDĽČőzTŠUˇłíVeXő^âz0–¨lŤ*vhš%í_ç6ˇÇ5 Ś‚Đ“śy"SęIŠ~/€Ŕ<ăá09i×o¤˛ VĆGPŕg;ؓHş‡ŕ;Wţó3šŽ„`‘Dę8ţVĆCń=,‚a†Őó@t9@ËŰŰnľf2ŕýŃÇsůjĽ išÇĄ*”öBöKôšŸ‚Ü2ť xŽ€ČAQÂKěG\n¨$Ž+˛ŽOVú š2ŕ Ţŕş"ÍçÍż¸uŰCZ(WœT5Č*P^¨`ź‰ä^GܖP}ŕóC˘ß>¤*cŠÖGŕď;H)—Š$8q'vФ0TŚ‘ŚRKĽŒPťy”UÉCî“ŃWK‰zá^ÁB‡íXVl†’ćŠ5F ÔĄM É% ]`ßg$ę"|VY˝’'ďdNŐ ×ˆ6ňMmÄ×L}ŁR!lHˆ=ń„´Ű8‘gU|`(™ î…ÄäTd\ţőׅKáv‹I*5hW1ˆ˜PŤÁó9Ü+›TĚz^Śç˛ăžSŕŚč‹ş¸zIę j2ę'9bc"Ä1ń˙„`¤ŤšSO„r —fí‘ÂpLÖś$k%6ëńďŢ˝+c7€"(&Âěźë´ŕŘÓ6(•î”9ňžłÉů͓ŢWťDÁ'Őî[tćcťůrC|N(Ź\´ÝYîýisđ'9ţřwz_šĆBžˆxü>¸>YÉCBčňŠ˘™rvĄ‘źâÇcíSäń[0M›÷áOQ+ęői8p„Ô8v*ő…UŞ4—ipp—öśýź¤GoźůÝš{Ÿ^|á*˝ňŇU™çŸrĽ~n‘9˛*Ÿëĺĺţó°nwÜ÷‚œˇż7 ő=ÚÚăßkô‰O|‚^~éˆđ9Űýş|ő=¸w[ĆEˆŘ\ÚŘŕ×2=ŘŢapý%;UZh-Óęăr‡?cŽäc‘ëY ^ĆJ§¤97cP  Râ{ąN—*’ŇĽVkHZM¤o„ńPŻtŽ\œ‹Ë! aQ-÷{Š“%R(šPçů˜ďěěČ6ˇnÝ? ߥ ŸÂÜŻ5.óżc|ÄüßaĚÔ؝¨DBixČžJçĚă€ÄM˝>q d˙vŞfBŕß4Ÿ+. „P • \ޏ䘊p}ŐÂ&?M!čŘ?zěóĆÔÝşOCٛőEŠŞ%Ą(Ëb˛NB ˝‡ô˝÷ž‰dnâgÁ§FZĹŰÜţżşţ2 ŮGEl$ZŚż;Â,|Ô0ĐđźýĎíýaӞU.ĆpßM+–+ˎŤJOŰţ˘ůĽs{ŘyćŽĎŁÎÂ5ć66ţîßýťô/˙忤_ř…_ ÷’}˙÷?ýĐýÍíŮڅ!X Ź*ŢŢŢÎC @šŽpÇ6ĆŹ ˇÔ­¸ŮÝŢŕ ěĺÎQ[:Žş0€íí슰´ŘÖĘ2Â@ÚČW0ó1ďÝť'ň|ü}ń‹_¤wxňA^rŮÍnđFP>đ9´Í‚­I;đŹÓz fZŕ÷ʕ+BŹP%´ű @ŕuZpľcŇĽĘTKŢđ4'&ƒŽlŻĆŸ6 œ,›ËŠ ôÜń•ŁŠBđˇŚP‰~[– ażˇŚß)xݟU9Ŕ*ĄXE-Ÿ˝V›˛DY†ViĂK€/’콾Š ŽŰcŰűoÁbU.(’)”Ł„$ßőŢŮ}PŸ°˘2‚‚ďz˙aJrŃ:°Š0Ś‘!,)B'őjú›Ś‡P•K6Á3Ť’—ş=ż^Ť­wk–PĄŸ-ÉDëQëKŰźămŰŃϰ÷§xŻ´~”lcŸ K¤Ń˛č*N%lŐ0Š„ ­—Ž]ĽŠŐŐɡjŰVąkł)3´ěd)ŚÎ°×fŰśwé—q ÷Räś9čD5]‰Š~C°FŐ(°˝ŚpŇ}m˝âźŕŘgBӅhůPě§éŁ`ř]ď#ʆ“2áŘęzL%Őá8ÚpmJbRňžÓçOÉZoFář Úš–đń^Ëó>ˇ÷ŻésEŽ\ŐQŹ ŸJކrG$Ďź*D8rc¸Ô ]JSBJ^h¨)Hˇ‰{ €­;ŸďKř1ˆL) ÁЎQ&äŠ ]äČAŔcyœ*†LĺR- Š/ \ĐÁ‘Ńœ ! _ÎQÚ§nťT Š4Ů6ň‡Á$ôuŒŢŤ* x $˜ ƒXǗ âÜ˙sý˝'ŸđĽJ]”,âđ€OáÚb¤=Đ}О‘ŹHLšKBľd҉KŚrĂę[aÉľĄ¨"ŞÚłŔՅ(Hx…Ś:ĆľŇä´Hۅ‚ ›aEˆ9Ž2#O É)]$~[. Ě"m%Läz2¤¤@Ę ťgR_"C Rę7^ežT@š„CFŽ0oL=Č—O=ŃU|…H&vx6ĺřBšq*"Pjů#Ő퓑<đŇŘĽÂďńˆ}ńЕEý–á`HĎŇPoK­j†}†a:‡S"ő¤ż­Ťv֝;wħŃBýRÝOJçŻëŮ­2šĘ\ąÝĘgEŠ3X?ŕ?ëűÔÜ?ż€ÂĘy‚ŇA˛Ř?čœi{9ęcâOď‡Ô"O+pyü8Sif 7,{rőŠ“búűq˘ƒUÔqßËĘtżçtKŠVí(ŇtWţč¤ĎŠĆLĐ?Š"Ÿ<7 ž–*˛ŔójmEV˙—ŤGŠK^ĄA˙źůEÚŰŰÍŐÁžńڛtëÎzůćUşůâUIšpÖŔź›Wóź䊬$ˇÄÇËW–řÜeşs{‹=Úçžmc] ÄWčňľ+´ŘjŇĂ펤!Ă@Űëöč÷ĺ záĘuşž™ŇÖŁmzý[oRűˆÁöĽM×O űâ[eŇ÷îsęćg’âHşŤyßîŇl  dąş˛ĆăOMšÜ}ö ŞÁdŠ]ť˙@B“żYAÔ.>ĐEř1T¤úĐX+ćĹ—1îá…ů7ćÁxáłĚłŤ.­Ž›:~O¤jFŢÎ:NăqŞe{-㘆#OŠŸž:’…¸ëŁŞ¤÷@}ň˝‹/Š˙9˛vŚÔŒ¨QkRÚbżiŔąĂ ˇîą/~>Ó? ӎ¤!‰áç ™7¤_Ţří6×(¨€ôž§ŚŸ“r„˘řeA”ŒVžaÉĎH‡čÚ>Ímnď[+úšG„c‚ĎŰ&Hf…–Ďţ=’çöŸý%)ęË4R7{ڎßqž ö9÷<iFĚęˆî—*Fƒ°^S× UrçHŽi(˛ž7RűË˝÷ü.”űâ¤:¨?÷ ў;“%Ůw߸óŢv’‘üşLőy„Ž&ş?ő„^˘đŔ!ď窄ԨšăÁ:=M17Ůtűƒ+Ż“ĘNuîăq2ŕŮď§Uś§DŐý4Dó@9I(#ź€QěŒŢÔŐßUI/L5§dZ/5#j…–ďA%šf¤ëű˛ 0~kú=Ń*lČÚ0˜Ź‡TžODŠ€ šcŠŰ“Ń#žßá%‡{‘ ` ýĐL[ŞÔí÷ťAąěŁĄikű$x֊*yĂĐ8Łt[Sˇä)xÚim3Ňslîďj”ˆq÷BŹ6xI6O0Övă°Ł€dĆÜľăYCç†drŸ˛Ąƒś 5GŁ%í‘*<”sđ€@4˝Ňo "4ô÷&Ŕ(î7D‘đÉnrďŹ)/}‘ď[#ł8žšŐÔ ɞ3¸=YAżŽ.]äŔN“`¸Ét:hôŠ^‰Üí)xŕ™Ÿ4S?>Ё‚-¤b"JÝž%:šňEŇ:~}i* Ź DqcÓLs}ůĽoöX­„<Ęáœ×?‡ĺŁvśweeuUŽq|ŕXĐĽe*ĘIHd䈣Ań…;Ź P(€>î\܃Žt{KVWVő<ƒŹŠ87Ą @ä œkpŘşpá‚ĘľQH™–şŤBýnłg }Ÿ˜ý‹)e-CŻŠéđŇFŞS"UXSžzŕŻgőŔó;ůŃűŔ‡ĺt‚~Ôp]Çk‚żÚqçz.ť›riý†źgűŽě´›>­ +ďˇĆNČ+Héç¸?wBĆf§ŘŤz¤ąsüž_8~)Ř ăŽ41lÂ,óŠŮŠÎc@ֈFôxSQ5vYžýqÓiĹufĐш5Ĺś%ýęČl@Öó(ęA[‘uz­‘A áÇ~ěÇäˇ~ëˇäsŸűœ|ůË_–GIpŞ˙Ěg>#üŕeDŽž€Ń˙ žRllŹ+ĘúΝ۪XĂ Š5ŕ#÷äĆÚ|ń‹_( ÜŘ, @@P '2„‡ššTśxb|RŸˆٌż×Ž]—›7oC§ ‰‚F×sçÎhţ›7oÉË/ż"ŻźňކwVŃ2Sw:ýŤš›÷˝žrËC<‹#î_Řô ü źŁAuFTţľB”öTĆĹ×ĆD…( đ6}†5(ÇFeşś4ĘZĎ5{/żă{ÖÇFŠ°é ¨đd]ěóůľÂFZ¨‹baAüÝF/°Q,(Ä'ř›ígk ś‡"Ëâwś~Œ–PÇć7F(ŕ8Řzą Yđ>[_öKMƒd•Av,,p„ gŰ‹bfůÍ+{(Ű1°L{ĚŹc˝ŰĂނxčsœXn<6ń÷öwێ8zŻ!č‚é1âT41Ŋú˜aąÂx˝đyśŽ‘ZŘ~BČeäÇŢuúÔI9yň¸*đř,R,ô¨Á á:ÓÄöcŽ`çšfcŔčQ˘Őë4ŘSą3 ĘÝÚܒéS3z˝ŚrÚńaFůÔma' vŔ_Fš°}Ŕ”%ěZ˜ĄĄĹC$ünÁ+ ô#Ő°}Řń^enăˇÂ‘Ć"˝€ôŹQvđë@Ć/zJłĎQŸ=˘Ý+ĹóGçr0$ŚÁ{>Ďy։*™×mDŘ/R†Ŕȝh†T˛"ŞC?ó)CAÄŁ~PVŁDîój^Ą÷ ˘*…Ĺ›wź§ŞG_hT59ĹăćNKÓ)L7tĎh;ĽpîŒ)zfaÍÚś–<Ű>a?hŤ=€")әhjś„űYěIa›„b[Ł€„ö÷4âF˘ŠY„ýÍR(iS ›­‘¸g(áúą§ŘÚTmŘŇÔ(űŽÔK5ëéľ ˆq!đ•đՐĐí†-ĄéúÜóUĘŰ6Úę‰×qĺôĹHÔ؟)ÖB"´IńŽR4҆tŽ—sűÓvw_Vwˇev|BóE|ƒ” é¸Lˇ˝g▫űNŻ#ÓYŰU&ľÍ QÔ˝™úô H÷áÚ0íř딈ž Ź,ăëŕ”ý‰ "g;˘c4%Œ/Ř{Ć|ůŽŹÖ˜B„t#ýn_/ˆf‚ŘL-1ŃÓ1Đt,Á ú ˘ĆX3Dßś~„@‰,Ěń´č1řßÄĐék4\πäŁę5C ŒqÓ˙8:zš 4Iűl˞4„ÓÔşű´Îx@HÓóˆŹŃNąŽz>2Iž)°´đ@ĎŐËşţ™8łÔ(îß+( z{żŕĎ-ďń°| <_iÄŹt†§^óë6ÓĺɈxţUň“ŰÔx9Ţńü†ăöövݙ=%}׏]ßé…WŻ‚§’*€ËMÖHJ~‘ŠC˜žŒ` ňT‚4MNP~n^śoŃ?}a$žť!Ëo2‚Ó(ÄăŐLb=RčĚNϸďoɓFŇąÝÝ=oOý‹u&Ő?h^ŘĘSußQž€ëšëřóź]_pŚ)ź66×e{kWďḈwŔ^ĐnCśh§‘Â.dŮž×!Ş3L-,•‰éEÇ3tdíÎUŮZ˝&[N§…ş~ůˇ_–7ŽÜ’§.œăK‹2>ćŸ×h”Ń{JšFŸ q!¤—Z[CDŠTúǏÍˊ3ž_ťž,űÝŚ,ž8%Ş"X3‘ÓgŐ)荿ű˛Źn&ŇŢ—WĆXQ Çĺé Ž?rÇÓuőLsüÔ˝:ń|€qáĺ/]š7â~7÷äćŢ{™óOF#݊HOŤŤŤň֕rîěsú}Ż_M˝›ˆŃĺ‰ŕň ÇŢĚ‘Ąůę„9 y˜ŕěÇHŮqňäI9~ü¸žk8Çě‹ŕAę›b_EŻ’”ű~ÝYŞu|’Žكąĺđ°ňm 2ö~?đĚYŁÇö ¨äÚż0kiO5áĐŕřÜÉŢŽçá9šˇ"Yš"{Ž?Đälníći_Ž,œ”/ż({í ŸŢňăYˇöPŮY˝- @žíIˇćŚ”Ď•w´pĎvźmQžRżťáűFâĺĽ$đŔŁ!#z§P3LÇKöýŰIV˙jéqŤçˆž|ŞłŐQ÷ÍHÖń|}˜zbëLĚĎtę?ÁČÖŁˆËő€^_˙ú×ĺ~áäóŸ˙|Ńš [|ó7ł|ęSŸ’çž{NFôčé‰X T´Ď;čĂążüŻË•+oČňň˛x C*qx*ţ ŢxA1† ŠAŹq)DđpŸa4ťyóŚ>‹›žćwÎJĎ͘Nœ8î–%ůčGżI^{íuW׍rő­ˇdscSQä4đwP†ŤrÓ Ł%˘U RĐ匰P —”źZ˘TČ(ێ˛aS¸bÓk^Ăă›ô źÖ`-"fČŹŮó ŕřą]|.^Le`#?АG\(ć‘ˆiżT -10aH#6ćǟIś6qŹđąýe"Œ,Áv2<ˆĹÖČoŁhXƒŻí Bŕ{ö‰'[ö˝5P×Íø^1Á Ř^éĐ )'Ş}jSDŘ9`AuLžebÇ6RߡBJ  ‰ç°SŤŔăoźŔr9ÖÖřoA,řŒůŽT ,ĚĎÉŇŇą˘oě=ŹëO4*SXý4NŮ—Q7FWŘqd]ɘÁŁ/<ĘŔ]§œ°€Š­MUřXŕ”ŚvB~ԐöÇÎo|śuD˜žƒé:@(ƕ$)ŁĐp~ă:֏ó˜L­Ý iĆ2”LÂý‡ŠvŠÔS! ařŤ@’&„ *ząŮvhD’ŕ5ĺu÷öź ë:‡.Đ)7q ün*Ť[]5 C)ˆĆ”â‰ć.†‘¸á ÷!ľHC×OîCóŚ^1š}5üŠç|?X|4 Š ŹŽ;Iœň´#šŞ¤‘śT0=íŒ;îĚwŠ{ ‘H´E™OP|_끘HĂŽgrďÍ— M –ö噄¨IˆÖá ńP’öƒżßJ}ڊ°Ÿ …źŰŇĚ@ő1>ë„4ŽŔ‹nÖóĘčFZń×H -yśqŁ>3QF€)Î(¨ýŠüÓIîB#łO‚Ý=•PĺýžHr¸­‘ş5áę3ëŒAÓ-ˇ7šg›”Igü˜j´\Ű ś˜“–ĚŠŰgÁşvÝšě:°ă”˙í$(‹†Č| <¨ĺÎŞœ|ęĐôŠ"´˝Ŕď¸}ŕźŸČxx€$Œć†nw?ůh+]ýĄßó–>źĂÜe:U˘§ţ~Ě[€ĆZî,qŠpd ě1ycE_=Iu‡2ľ/sŸBES„dŢ#×Űľ=)/˘xCB ÷űŠz5űj6`ŃA–¤Ž €?‚]‹ČKßLZ Ţfż“č÷míkHť™řŢšÎ’ZP‚Ö3SđŔP”ÔóOŠ3=÷Ńh+Čđ'÷•ŕ^Čó Ă~“ˆ őÍŤiôȧęgcŒńAÍň‹ŞâĚg^z-&Žş˙ž(ńóŃ÷M•í;,ąćęťSĆ4ţ:ˇsďEĚhf”$%đÓOĺ9sčsŢ)4Ě pĐďGĄŁ”ń žóXŃ#nB…´pk[AY$}˜nDĺčET¨Šńq‡ś(‡G ł{Nbmý%U ßşë5âž{ÍĚÎI÷Ü3˛śüŚÜšyEś6VTŢůŇW6ܕ/ËŇâź3̟’ăK 2=5áä“fEŕ°,ě!”‘!ŰěÉîNǝ3M™š—Ůš9yú¤Üźu[ö÷öezfI óHŸ˛šą#łgg套Ţ+wÖVdůÊëłLśwÜk×ńm™qű`’őźÁ;ń`0O•›ęž¤=Šň§G§ű›÷ů=^äĎ9ŚÍܑ•;rölOžyŘ{łŹÎk)ewoŰɏ{*—R†…^óßá=ř#žK/^,έ™ÉŠBßéÁ@큨1ˆ‚T>ćţšmYý†Ś7íyy Ů`4Ś[ť¨ëŽX‡˛‡Ô~nŒ›ýžœŢY×h~6§Ž§:łľ,'ˇˇdslBz-h]™>.żľxN6&&ď>棂%>ůÝxF,Çß7ŚZҚšÔžďěí8٤#].v÷•ˇ˜ŞÝš1đî­FˆĹÖrœžş^6ŇyŸ<\PëˆFô0ČęížëřŚcśżhDo7QÍÓĂl$km$Ó0}-ęhuí#$đú‘ůůľ_ű5ůž _ůĘW4ŤÂýĐüüźźřâ‹ňĄ}HӒ<*GŽŐÓÓűׯ]Ő<•Űۛą9)ýŚS"ż“dĐHmđŘ;Ÿ` NŔćśşŠEË›ožY[—: Ŕŕ†$ ÇHŸ$A‰ď#b€şyB۔áZwÍî^ŚLëtâÖźłâOŽ75 Fşß•=D„ 5^ašŻYÁŚOT!Ž˝ŕ]ęەkʅ~Î*đü Ţtí˘LHXďÁ œé.Č˜i%qŕSKh‹Wˆk¤°žĹ˙ÚçJ<8žíŚ¨w›‚U°_ˇźŹĎ<‚´#l›7 öƒwڇZ`‘4<ĎzĆx‡FćeřfĎjěČÇńó$˜_2MŇÖ}× Ú•ÔXꆘÉno_6wveÚd&°?ćžžÚOâyYňź)]fť~V€Šťj  :Wv'ó)-Ŕg;ŕtĎ!‡ˆOŐŇqź@Ă+ŤŠĚ‡s F€c49”ë'˘ßÜôíl¤\‘çüSĺ5˝‚ŢźĄ oS5@ĺÁj€ąőgˇŸIâ7œO ,J´Hô\ő ŕžĺƒY˘/ö€×Č|ş@]0DŚIQ)”‰y‘űńóž“}_Ϝ€ í‰ D?xp¤ł"Ď<çlÄ;˙×ČvĆ\ée%y1Ďi aiڍľŤéVöôh+äű,‘*ĎnyY[ç˜?$Đüř*5cOeľř9źg¤¨O^'ŞýTŠgů­HľŔďŮü&ÓőÝTŰŽşßŞĎä\ɔo¤wüpĺtdŢ Žçaô¸ńCwŤ„?¸o˛óçŃQy†‹9§îeĚóâo‰9Ęrs*ćÎĺ%č2÷ű*Ň@őB´›ŸîöđĹc3ęýżłÝńéĄŕŽŔĆÚűŠEZsAŘŰäŇF?óŹĚ;#ëwŽĘęňuŮXť#§żşukU;}ќœ9ľ$§OŸŮ™Ii¤ścę6żĆťžŹwˇeckÇÉ1ŕÚręܢŹln{¨cšV×6eůöşSřN;ytZΞ>ădĄ}ŮÚŢp÷íĘv§éÎş}w^7Ë.¤Ü-˝Đw˘Xȁôn0~ĺĹšëMńăˆ"ćΙ[Ë7Üë˜F2óŃyű˛ŠşĂí"Ę$öbq5z˘;ŕfggôĚYůÉOę tőęUyőŐWĺʕ+rýúuMËžQĂAĐŔn›/2Ŕ‘Îţ—/_–sçÎɈzbßxů댒8ëIT(ŕr0nӐJůŢ˜ixƒ‡¸5ŽÖÇö!¤Â#Â<›píÔ䴌ľÇeáXˇbčĆBř\˛AuF̓(VÇßĹeĺ’ LÉëA¤Řxㆼ"Ó”cƒ+ţڈ ńŘ$^/^ÜÄůލÉŮt ÖălXÔő#îĄ!XÔ[_;,‚Œm‹ë‡ś}fď˂iœ:Tˇ”uDÝ9W휵ő­[8ČŮońXSĐ&€Ĺ‚0XvÜçŹc(Á’­Řëń—ŃJŘÇxoSÓ°˝ԍď€% 8^ś^źŽßÇŕ‘:€EÝXňZ"[ëF:Ţ;Šč)&Œcýxđ>™ŞD‘)Űj ­JŢ4 Â};;Ýғ¤Ň΁ƒŚáˆ7$ÚţőíÍ5ęPĄîáíţfšŠ`_•*L˝bÓ?ČEŁŸÉčœ{'^Gä/^dţř™×Ňb÷~˜Ř‡Ěß ‘zxV \ź÷ŠŞ<¸ 8ő4 De“ő˛{Ęĺ1Ť#zäěË(ŞşM1N­ö‰šâa‹Ý„˛Űóŕľ˝ö|0il ˆ0Żm5পěb}ń JtďéŻFę´zöćAĄ^şpEěú•çzýD6ˇ{ ^˜™ĆY/25攕Ͷl;ăčŽăŤö‘BóPk÷Ţ˝kÔłşšv#ńFŒ‘C{ 꺡7´ú;#^{R¤äĺc=ÜK3˝'ëâŰÔ`8`őňÎŔ"7í÷Šâ|T di†ňŐ=ŁIŻR\ëÁ uČď$Ü g'N)ÜwăÓÉ:B E3oůyˆ`ĄŤž‡T—<Çí8#ţŽűru\Wű,…<çÖňŽÓoÝž ‡ĄM'ó̸ľ=-‹ ‹rlĄ+ťîúýnËéqŞWÂ|“Ó˙¸Ůôçßť”ěđ<\űü´ܟuEö~mMÚ­qlâ{ÜĹ<Îx4Ňůę⯏™vç Ňȏ{ ĹéS§ŠóÉęŃô!‰ :ýNęs˝SfŚ K}Ӑ@ç '2œŕU]gć"Ę;ś8ď “^6 Ď,Ś#랼ő €Ă~Ýqć UřŁ…˝m9żyÓGýpŸ[Ý=9ż}GÖĆŚeurޝ÷můĘŠ§ĺ•ů%ŮmO)˘™Ç÷jKVŽYm\¤ OÁEF,pZÔú×Ë Điŕý€úiĘP÷~{ß§kŠţN.x1‚–J(CœÎ’ŔbDďPş^éaP\X§?˘˝]Ď?ž1Ď˙ýňľík˛Ößy¤ť~ŰéfNÍË&/Ę|c˛˘C‡îşđŃ::: 1I<9ôÄ,˜sÚżĎ łĚÉËßAVxŕće7k줕ĄńXö0C1•jvÓa9TlŹo9Ac§Ř0éőO@€m‡"˝Í÷Ă6ʏ}|?ěłí‡ĹđÄŠ)l„ƒXP§č´QCŞ Ş‘ŢśĹ8ěK”Ĺ´ŹÖHnű%˘,ąbp€HŘ6ŃčÎ9b­V(ö|ž5TŰkl”•¸-Ŕ"žˇTa#=ŘďŮ˙ôȏ™ÍXůcżŁaÚ^÷ŤmĂ0Ĺ Ÿużłí*DC1Sšą}m ;Rb­W!çÜśíśó—{ˆ›śíŹżł@[Ϣ/pmß×uvvZfgfdrjBAX4́ylŰÂT>ĘGC}űŹýęśôV—úÚ~9Œěş­ŽejŽaĽn/ܕ™ć˜Ţe™ÜńÖ0×­Şą[”cÁBśŽPÖŘh,ŘoŐ°g@#Ě‹ďy ‰ śř<Á_”MĹęM…żC‰Ä9č"L+QadásˆbŞFźш$y#$•”^‘YĚyüś"äÉakĎ)ť™÷śÎŔđ!`!rXĄŕ ŔS-Ő¨đ’LiźcôŁY>Š˘˝ß?^ü rąąŰ‘žł^ĎMO8ž3”§™LO´Ô`žŰéÉ^^Ś™†Ť–ä€ýË(+­ĄúD2ú &A‘ŒKáíď# x‡Wě˘Î˝^VđՐŇđF|E!DÓBtbŃ Q(ýâ<–ý ÷@˜FšĂCŠŘÖĹş_§ş‚=J1ŹĐ ű#(ě#ĘC^čŁC9†74]ŽFŇýŽědéCwÜĚ4Ä9ú9ÖŐŁm…§:ŁF((ŔC,Ň,UOB?šcÍÂXŻiJŠ”&™ŚşČ5eJ"-ě‰,4ŁÚvž+đŔƒ#źi}Ď>hŕˆošƒÉ´Áč™Ďmřt*8wšÁ#/ä×ÔNĄżçúhَ?< :~ńz÷dŕŒ÷ź@ɡŔ 3WcE˘ŔʉTÄJž_ďO1ÂÖeˆ>’ĘA=ő%žŹÔwˇŚ#o75Ü;<‘ÇJtƄ݆OYŇuĘü=ˇ.Z ŸŚ}‹ţĐČ/ ćňV`HôŔŸ~)ů8óz;(ŹĘhČňČčlťţ}RŤxŠËH‚ˇŹ šÖň),żkym+‡çŸŕĂ´ŻÉřԜż)™Ÿ |Ś_Çő}Ëvä!óÂčäëŞß–—Xs~ď˛_Ěgzp‹_xuť}-˙p€)Q#ôœkť­ŰĄőGOZař Ë‹iPž* ĺwWFräe_$Ľ0Š>lŠ×œ'#×Ůy欕˝Ĺхô\pŒĘôԘLŒĽîՔńŚOŮ1wzrÂE›ţpNNaÁząœâť%Ÿ:=ÎÝSľĎÇ&ŚĺÄŮi™™_”ÍYťs]ÖVoʞF|˝í Ţëríú´œ<ą$§O.hjÉ´ś]ÜűŤuŰŰë†úúďaiiÎ鸜e{k_#Ënnnh”YDÍ@Z’śë×Օ-='=č‰<Ą|&ůŰąČG ý iátݜń˛jßËľˆˆ„đf„L š‘yŃé8Đ*t˜;—5k9ž“”Y‹ˆA ˝R0Í2Î8:EŘ{üŔkiiIž~úiď9獂‘ăb}ŠNşvś÷äŮŤż+éöśŚłď4ťť-3ÝyeîŒěOIÇ­ƒŻĎ—›ó˛>ćΚ´ĺú3Ń`aÍŔ aM+—ž: QTî㤹ýJG Œ‹ďŻŽăq;˛ZűťÚŢś‚,œÜŻăÖ,xuÖĄŹÎhaŒčń!{ŽĹgšĺcÝëŰIG­ĂăP×˝;‰|-SpŘšřůíoČg7ż ŻěߔͬFońŠĺͥΌ||˙šü‘ůÉRsŚRgœoä}G4˘w#=1 k´´‡ˇ=ŘíÁO-"Gi…ďč1 FŸĆ-F. Ń‹ŠQPh`Pńęë†g1Ü RUüĺUَÖYŒ˘=܀xŽnâH1Ĺý ůŠŘ?Ö8j˝éŮF‘ŞÖF° ۡě_kÜśH>Šíőś˙ ň ÷Xœî#6|Ç̔MŔçŘ:bl87ę˘XŘgŰńf_đl›OĐ*žoúą Ěű¨Ź•ťlS ˛ŕýusŒăŐĆěCś‡Ÿ9nvăöěÂ{ů\ŰśřˇŞâxpî‚ °Q3l$ {맆¨,XŠ}kǖí‰÷ ŞaĂxîÔ­Kť6ŹĹŽ‰Îážύ°s󳪰׈-5•őŠÎ5['î_Tbó¤TÖŃ+4ě¸uݍkkĚ ŠÄ œ$„Gϸđ /^œP@ ośuÇ_(ř,zưlŽG(˜|řoŸrdL˝v|šěÁv ˛ÜXä˝ցĺ0˛ Ӂŕ;Ž xáw(źŽ Ąĺq­YćĎŕşçďŒŕav#Ń˝P̛äć{PE1ţUp…Ű":˝Lśözîo@˝>Ŕ—8-”’mxą7ę>Ós†úDŁ>4 ŕĄň…ďfXȃg)öůچç^ÝÜWĺűÜBěűc­†F$˜l7´Îˆfąë^Si§žO|ź‘^Ł1řĎj°í{#![Źő D€°7ˆč%˜ŁűÁ¨äSa %EŽŔ’Ś3ŕöş8§™jJ*Řň,€ń‘„x¸búáw8ˆšĂÁ!UR€ř 1ô}Z MŤáóż7ŇŚŻwněΚTŒN‰ľ?!]Š{ĺ8ëŇŕŠ6”ó-˘A¸}‚Ż>ň‚ ŽĐ”0ôI- âÇ3ančĂSýőLZ‰ &űč̛Lžř؍ŕ˜qK1wSFÓČł`ě ^Ćî?Ś3ŃÔ*-BĎ> ’kĐŽ1§4˜‚q:QvQ8˛čVĎȒ”XáÇÓ.řcőˇ@J='SÄ—™ú¨ÓŕÝ´>2ˆĄÔH ¸ÂýÓvóaÜľkĘ'ÇŰ2>ÖV`…dÎĐŃqívżľ`‘čÚh„ůčÁ8žŢĹ)­?ý<œą!PŞő;ؘřđi_äß,ŤÎ‡ňÚbÚU¨nŸaz–fjÖEr0čbŘo$Ë+ÚűJVţg˘-_őŠŹNĎËÖÂź3Ţ6Ô¸ëykz,çÝ3yëňŻő¸•0ŻKŮÍĂDżِ[ c™Ś˜ë‰„52Q P"ósS~íUÚđpč Ľš­ďĂVŽ×ÉEw{˙Qî=ęuĺőĹťĘţxŤՎłá5ŽÚç•ďk”ĆͧRĂËűł8ŽW8u˙x˘ęäLK–geé؜ŽA쩋ÇćőóŇŇ1gĞ’sgĎČŠS'$=Bw’‡ŻŤcüŮʧƒ&ڜ,95#ł §äŘćŞl­ß‘ÍőeŮX[–ŰËk˛ąž-ׯßrň渓[ćĺü™•_Šz2şO^×pü–ęůëđšLOOËüŒô:]Yžľ&7–We{wGćfçdéݜYů=Ţ_“šVÚGšźA:'œ‹359#Î?ĺdËiÇÓř4›R`ÎŐE¤' Ť˘Zśyë°đ˘ž {;"¸dAŽE Č˝7nÜP'"Q`Îŕ7ü…ŽuAŢ)7AƒŔüeČkžg™ăe×ݜ,éh{ĆĹĺ7¤sóňĽö’Ü™˜Ő¨ˇNK§Ń–ĺ‰é6ÇBt=ϡ6´?}:5jIˆ^•z†Ńް'řäŢ×cěÄţőşeÇŻĺn-Lj*—nw_öö÷l‘n§háŽ`#ľúˆ˘2˘=vó3v‰yᷓ†ń/uśŁƒîшĹsŃÚg@_Űż.?˝ůň•Ţ5ɛXoGęöŽöŚlÉŘ˙™Ý—ďŸý¨L$Ľ'tÚ1¸xD#z7Ѱ(ŕRčĺa^z â70Ü1<<žŁ`BăŠ Đ@É{iÄdů *SéYĹzt:ޡ˝˝ŁȑˆďHXX&ę‚gŃXhÇ4Œ’,(#6Xa]z{íƒ"2OÖŁąnęL㲭ݧ‘1öđfŸÚˆ@€ąă8ÚP‡ʐęĘÖ' bë`ŰŔß­W˙rüđ™nűźxÜř˛ [ČFßŕŘZ9…6KśŹ8Šüś ś k„Ńę@U0 GqÚ ;Yoz1Ô)’bAßś}BýŹRŠ‘l„ ž †s‚Ř>{˝]71ÂŽq މëGdą¤ý‡ď|LpŻ„ěűˆ 3ł3 ŹhľBô‰†‚*Ň´ Ţȃ’œuě_ě'€řjXăç~˝á$fň˘xý°ďę+Îu„ Mńëcű˜‚اh ^Ř Ŕą (ďěś ×ÍűsD#:˜ęÖîAƑÜ#ÔČßsűÓö^WöşýŘ şö~ďU–ł5C?ŮCT„ÖÖ}Áó6ý~;THZ‘wzUّëĂĄˆTŢČ­Í}é¸ĎłÓÎŮJUyÜTOýÔžs™t{čŒkÄâĚä°Jëžëë-Ş€…ń ´ŕ/ä‰z˙ ľlŻZ¸z;%."utjčy`ŇH°]đ80$ieÂŔH0‚×ńhg–ˇXŕ) ľ4X˘ŕInoďIżŰóQ%mAԁřĐ|ךˇ¨"rűŻč]Â{?bţkD9hЗ‹zŃ!¤ô˜ű‹4ŠkwÇ5|7÷€ÉÔ}ŰČ5ËJč[XDuđ z掚ŇĂGłČ.E­Ź>ߡhë?ŘFT‹Ô§y up‡ýŒŔÄ\ÇMů|žýâŁ?Á€ƒT"Mđ÷ jŇ@dŠŚA”†~â=Bő7׆śƒOâőę4Akő’*Sr Zíc­c’řh%č-RŹ/AА!4˛I_˜DM I?˛°äÉz:Çë˝ŕŤä—€ŞÍÍ͈Ǻ=| ĎQĺßşą~Đô¨”e[Žr]ÍEák; ŐIÜĺžcEŞ ŹwuŹéůěĎߖ[‡łs“˛¸4-gN.jtŠÉ‰Ś\z ázOÉÉăÇÝďsąëplŹ­2ä29őŕš:ŃvrÎęšu{SĺČ^Vńă`çúƒěĎa„'´ĆĆeaě´Ě-œnç’lnܖ›×^“•벺śŠŻ[ËkríÚu9sć”\8ť¨ŃX‚‚ó¨ÝšĚGŢÁyžł˝ëdšŽkkKĺŮłçNʙÓÇĺĆň˛ě:~rs+s:6Č7ťşçŚIKăNźžçŸM¤ńđű$ŚÇ֐çĘ_îívUn^tsŔ…4őiřŹ^‚4pöE=ZwVŽfäH:@^Ço7oޒ••;z-ć2˘Ož]űĆ lßQ¤g;Ç0~ď‹A4Yś“}IP ǝ}a qŞ;>֘Ëůfůl ˝řń,Î[Ľ‚×TBo{淍źÁĐFáŘPůG °QXoŰ‚l›ěX܃pę”Ô ;VńšC{h´Ś1ÚöA\o‚+0/í÷śžvđŮ,Fr[Gkäg[ě}ą’QFŠˆšK Öô̜S`ÍO…F a>SkPô7^ŒÔ@ŕÁ'cň¨|ÉôIEŃbiŘŐQő֑Ëŕƒ:"ÂÖĺ'?ůIUĐ@ƒďą_â/űšáO9Ć ´ ë€Ŕ3\ŽÇľ¨NEeŚá$qÖ彎;Ç6ű2=ŢvĆ D*HCX_o€V`€ZZBéýPŃ4á€Ă˝Y0ŘăHóýcv8›ŃúBdÉ˝w? ÜYĎ3ÜŕvëěüŽÝ°ßĺß8OŮcz5SĂżútčg(žr¸×éĐAChď÷˝Ďzöö$´-„0)Bݰs‚¸‹\Ć[cń†¤&ă"dŕ˛ĺxÝ;]ŸVé¤3Ďš}ý[H+äŁîĺäišr“"25ҸţÔ(>ĺJ"D ŚM ”Č˝DËîçŒ"jh@ú ˇÔ÷OV„wOőyH/Ň@D$W?&×ϞŞÔ,‚9¨ŃGB:\ďՉš Ó÷ó8#V”‡IqŽŁ˝šÖ%g$ 1ë&­‰ĺ9ž…rřœ‰çMŁ]d|(ŇëčŤŰȊ((yÖUC"4’L}[‰O‚˝0wiHčçƒÉŸ§Ą|‡†g߼ľó“ç2ňŔ8"›oAďvo+˰!ÍKK_Ć뙟Ó0ęuó~uߓR6łďťa:ë ™§NžÎxőňŤo:ƒçm›˜“mÇ MľW?qFĘcy…Ž>×eœř}ť2§ďĂ#7~^Üć,ف.Ť€‚)IPó Óáüxü<žęĆó0Šť9O\Ůńýww/Ż­›?÷A‡lĂę9ěšőó{8é)Sǒ Cáü&ç‚1AJĽÇeiqNŽ/Í9|B٧œ9y\×ŮSĎÉô„7 ˇÚ-ˇ>{Ž7ßvu‡. ăžokşĹ´‘Ęař¤ŮéI5‚oíôUv@ô<č—<Đbźśob9ęÁR`đW˙ąńIi“ńŠY˝}]Žżţ%éî{ŐÚzWśś_—ŤoݐsçN˅ 'd)Ä˙*g™ž%ČźΠÝ'Síş˝Ž•ËüěŒŰçN+˜ěö]YYŰtÇqCƒäí۟7ĐÉČĂę‡ÇŸ*Â>Œ˛ H°i‘ đaš|ĘG˙áĹţG ç+Ż#`‰iEX. {5ŻeXUŒ ŘOp/Łh°\ϸ×CQŠšôĆohű xbŽU(Ś1ĎĽ7çú‚€ {ưOđż˜Ő=H:ČpĄďŐŽŞ‰ 4$đN§Ż{Pšďő&†;(ȓBʲ) U…ńĺń§á™ Ců°Ą—xĺ¨ÚyůěđŠ@:˝}ködŠÜ Q,´>ş—÷ĺ(}’ ÷_÷Dđy0 ¨Ą;󁫑C9uű2Ţ#J" •Œ‹#´Ń$ËR źÔ(r@čS~4ÔăÎGŕá™ŕö‹ž.ÂkôSđ­nj”@ČzÓšQkj™Ú@Ôxž"ń9Ľ u°ł9l_ˆÇ6´š }i8ĺ aĄÝo8ß]ý‘ł w-WôŽ>x6öśĚ÷˝Ő°Řđc* tđó#qˆ Q?j˜ńű úŃ%:@ńIuœĆš€IT á(ˇ(ć ČdŃĐú§ýŇؖÛňÄÁ`Ż€ŕŹ'%:ˆ#v1ÜK•wŒМž„řńN #¸ţ–2-Wjz>Ś A?ŁŠI’đ ëŇĎ _Îđ;ێ'ë6Ôhâ{Ňďîť1C›2dŔ˜ĽÝĄ¸­ŁďqŔQx0 ę €K€+yŒ`>7’ÇôĂÇĆ@ ňtžWI4ŠĂŠĄŐÇł#ŸľuŠä:…rĚGĹĆŚľĺř€í]5^ž;{Z._ž(ˡ–ĺżüŻ_”WîČäÜIiNîI3ےššY=%ŃţáĺƒTJŃĎɊ>+ ŤŠóěJŇEšaëëş5ÝhĽŢ{ře îłSşowzGL“ŔÜ{îُťŁ:“Űo~Iĺě[ňť_}EŽźy].>uJžşpĘŐyʘăˆf‘‡”`ˆźäÁ\Šţó†|w>í‰ÜŘ_uĆ=wZúšÄËŤdJ 9(ă>:’{*kC÷ÖĚ͝]ŮŢî(ŸŠÓ$ďĘÓóěëĂIǍygߏ?–——•¸yóŚŽ9ć#dPĚW€ƒ°6ʘ_XĐď™Úƒ/Ťł/Öß~>¨~ ?.ĽÝ@ža› u´ažšůמž“¤ŔqüÎŢÎśělmËîÖr‘vtbú–qŸf D k [KAĽ,-SĂŠŹ‘Ëƒ#ĆgĆQö;‘â?D ›l9Ţ`6Dśčh4䍭U§“XŐţŸrmnˇĆܙŰQ`zéNĎȈFô(i !¤{”ÄşĆr¨ÎF1˘=JŠm3VžĚ”ó<šlő°)ËłÚ3nD#z7Ó°`ŢFéXąť';Ž…˛  JÁtŸ>}Z…\OŢÇt­ąą4‡PÎŁcÄąĄF¸2WRŁ0Řٍ‘^HÖŰď遞ßŮ/ rąQk˜WÓ;X#tźÉ1ę7<`ĆC‹Â|݆x7ĘFö/CőĂРᲅ×4xÓ"E)XŢý,`ň öéÎÎ^Ń1¤#L@Ż~†8´Ą ŕłY†5čŰHx Üŕ{Œżc´zŁˆ`ŰÍńcßŮ444ěół#œŰ4ň@d…[›ţ‚ăĚč6˝ŁT ~vÝŘšcç­3kP/B‡yĘgňöwĚ`Űů+ĽíşŤ‹xÁďQ6çv\9–l7#ŒP@€AÄĂşó~Ű?sŢëx‡ąäőńœE‘ĎůŕůAPG"Ý CŻzŚźTˆsR9PÜć!SJpĚ,ˆŠý YHbű:ř 0ącs˜BŔ2öŻÎO§¸ŮŢ&°B Ä—ůńBżĂž‰ˆvn@šC ë„6pŔ:á=”•đžáţ B_ăz*,0/ĚŚçŕ82—,ë3/œ \‹ěDÄŔsY.ęäu{ráÂY\\,ćëËžcZ*†LE˝YĘĹźE9řÎö7ĆD#zX4`opEԊÝŽzp*˙“đ,ŻŢg÷eś0’7‚X-ěaďĎŁ Uρ,: ěsźŢăr5~cťď×pČŻmg<@$‹Šą–Lši ţˆŠ0Ԋúóiú ¤ž`ô…'Q`ˆŸ#Ţ{5Q Ny‘—häޘF‰ŢƒT,IHK“*\CSég˝9çQĎM Pa€HݏđŔđ‘GşŐ9b°<•hđCÎĂÖXšüye-á܃ÖoÓdź„^Ńľ!!bEâ#[Ŕë^Â8żvœA)QZmď=ěŁ69cEÖŐ°ë‰úf–Ń0ŇúđšÇĂ3$ŔŚjےÇB3čŮmůśnożŕ÷m´1_C¤ä˙b 9iżß”˝~"u>Ą{dRŔż‹ďĺţÇú+â.ŰrěQŇt{ĂÍ5g i+˙ó˙÷ż_žöľŻËí•]5rŽˇdë­kZßó1S Ę ~TŸĆJ9ńĂ]†7sň¨¤‘ShČSž´uä{˝ՔÇs-ŻlHzmí ˘:ƒÄ;éţAGŐ3DI@Şě‹3?ďé}ćÜyîšgĺüâ¸LMO8ý”<őÔY9urQ&'& ałŃ’••UMˇ•ç]YpĆd=cĂů*x†˝ÓËiGód¤Tö3˝ýˇœń2"`?˘A›şŸFă^SX=P.űˆ¸ł)] Ü÷]g|îk¤¨ŚF?Ŕ‹2‘ÝłŚg—d{óśÜzăË*GA‰žéd™ßţň+rĺőrůŇY9ďúrŹÝ*Î"‚**ŽÜ÷'R€(đĎ類ţĘ[ ÄŁ ?ƒWB—ęy¤§P+@ÁÉĺ^&ď:Úş+yk§çčzĐçŢ^Wś6÷ÜFęĎ puŒôHšSS|¸šxőĘ7˙6tţ!ľdQü}ßűާs•` ę|dÍfá„PÚKNëë&+żáĹó ˛řţžňŔă!ŚaôԝŚa Fűřeđ˜}đ€ ™˜™…™Em÷ś›˙ťť[˛˝ą.‰›ďăNˇ0ĺÚ֚Đđb8›(Ě#@YS#Zô}´öÝßýÝňĂ?üĂévc› ×é_űkM÷žżňWţJńű0^~D#z˜Űó:GŠĎşŘţ0˘˝›č‰Xř¸}E?ŻŻoŞç đČSMćá“Á OOO9CŘ1'čNG‚A饲Fh•X~ĂHegŰĂ €zŻGŘ}z ő^O|¸ť$„ˇrźŐňžœšg2÷ *5ŐŰ'ő›iôˇ *çb ‚Ö<ŠFŮđý’ Aâ÷–١žÔŢóC†Ţď?łĎJƒ0ÍŰŰ;*´Sáć Űـ‡ź5ŚÇ†l °ŃđBŒ ě“ŘĘ @Â_F‡`ß1} ëĂ~ąFŘÂSÔD8QĹn(— ֛ ~gV1lǁďŐ$6’łžÖĎIÜཟ†élż[EŻM›bř${-ëĂúZpŽ5ÎóYük “m§ísű͸`ÖĽ.4%ݎďAčŚbˆSĆřĎĽŃŤ×ËtÍŤ§††Íf¸ó`|sל4'|ŚĄĽó!''ÇTyĹšJSo$É2†݆ĎdžÍâĂwîĺľe˛ŘĆ2†ýÍ~LŒ2Ä ;uޡńřÄ’Ľ< € 3ß ěŕoĎ)ôĆĆÇUYƒT ÁC@Śńŕ c×Dň!aF x ׯ%”÷(ĺŁ?m:ü†ńÁ˝čg(>Ů7řŽ`Öżă30Źxü\ń:sćŒŢ‹ĎśŸ8O ’`]˜VÄX9‡YgÎMucD#ş[ňĆÜ`33gŽWŇЋÔŢť[çœ{ˇŢqJő˝žš^a×)5žÔƒŞxdđ¨sŠÎŹřÍî/U°œĺ1Ҥ ÂŤ&Ń*‡BôYęęK„çUÚaŻÜŮďĘćÎ^ą—ě7ˇkűĽ×q2UcŒÚ~óűk_•żˆĚc­nń &mĘ_O$ŢŔPYJ^†Ń2MŇhô}”ĂŁůgy›˝–ĄŔ6Á+W÷âÄG0hÂ{Oěő ó)Ć­żçůœ)xŽB?4•}Č}˛5Bń|5VT&ń3a˘Ÿę˜íçה†ŒĽ`žMÔŽEt’ú°Ę{YG&1ářďLšÚ0ŢxT&0Le]W/4şli8g]ŠÁ–DO]4 ŒS†;›ˇ$!3v"I1&ŠNoČ)x˛PĹ,D!úŁhôĐď/&MŒ5<čcsWÖöśeǝ'łz0Ąň‰ďľbŔBú…‚Ě ŒŢĄ@.YZYĽŃ ăXŚĂüđÁßÜ|ŃT*YޏżiOÁ™ˆ„Ňq}ÚrŸ÷ŔSäîüÄůřN¤rwňŢގz+C6R€FŽaH4šE#6Äřa+ŕ(j?Ćş‘>ÜP¤ąÓňŠöňünG÷SKá\PŰf5á°çYĘ2‰@ ƒ×ݍ˛(Ől9I¸4Ô@ćË5ţ*H?ŇtƲUŮ\Ío3/[š3fŽËülW.^ž(ď{iJŽ__—ĺ;벚ŒÉÎÖŽÜž˝)í1g”]˜•ůšq×Ţ$l­ëÓ°Ÿ~?¤2ňuďË0Ďź”TORDHń9†dh?úuWĹ[ůĄÎČT~6˛ƒťŕ‘4)ÚQRľŻJŒ~”wŕh+@+żPŸĽpŹčŤ˘Íy R—`Ý cVŁ}f^˙œĘw9Ď͚kňÔÄ6ňŠŢĄű_¸š(օWłŃ”ą ČNŠ,.LËűžJΞ“…ůI9ž´ŕŒ2îóŮłze?đŕť{ű’ľĽëÎďəéÂi‚ĺűłŹšş Î3œëŞnĎ}ë1Á?ĺaOażƒ‡€Ěy2̖[ëť{벡żáxŠ ™žšs×ůhV͕˛ýĽ\Őéěťrv} -Čââu­ń1Ÿ2qrśpˆ÷Fo´†55ŐV×ń“gĺć­kríĘ+ŇÝXÖ4TëN.ú—ż&ŻžyCž~検:uŇŤ 4kRÂKQmüŐě1L‘ę6ÝWßpć?z>§ŁYă= ěč4´ĐšŻźÁţţŽŹŹ,‡sD*i0ĄdjËŐŐY]óQĄ;uę”|ň[>)7nÜPšô؜wü€CTť=ŚßŮÔţŮiĄGcÝC+ ] (ŕFĆ~ŤşMÎQQŢ%÷(ŰpVtŐŁăřöŹß‘ąś“™[Ó‰ źˆň9×O_ţœŘěv”çŃoR&čk5e~lAććçtmŘ´ťˇ%Ű;EŸ`žKłíAž˜“iéš)÷ňŠÓߕ<`ęŐ9#‡–@kŸś_čö˜83úԅůĹBWä×~§H ű@¸˝‹ :ěś|ýëߐ×^}]žşř”ʤŸýŮĎiä”Rď(UYŢČ ńža÷ĆâJQź×z-Ŕb˙üŸ˙sůĽ_ú%ůÔ§>%ď}ď{ĺÚľkňÓ?ýÓňĽ/}IţößţŰşˇ­óƒŒ—"U{}*řčQRě<}oţ¨¨”ĚJ>ipmÖ̈ŢÝôÄ,:đüuÚ0ěçšT sŢĄ×'‚ÁtÁ”FÖpŔËi|[[ő!çፘđ„LëQj=óŻ%#]wURY ÁÝnŽuŠÁŘsÔđy Č =}ő(Ę)uK5ĹCœjd˝ţÁř{%_đ0ëvT (y^ŠSEŔ~g îLŰľľSŠ/úĄ6ŃŻLÂńŁRĈüÍFp°× DIĽ/ÄŚČ`9śÔČăHŚŞˆA2Ź'Œ|Á:XŁ4ëoŻĺœCßC°fý)œŮşÇ‘$ěoBX0ĆŢöI €ˆ…Iű˛Ď°íŞ*xň"r‹˝Ćţn×ŰI!Ó>ל‹břďó}ćCLÂs‰Ę3?ż[áŮeԕ~žĂ˝¨!ˆ@đ§!ݧďĐWćŽm;發–ÖŻ™˛?ŃÖĹך!÷ŞüáźłŃo$dęŠ=ŕ/řě@!ż! %’Y7vMźőÖ[šŇƒ OzqYO‚řĎˆQ(Ř€.P”K¨‡ű ę^üFE×*ŔrTş0= ĘP”‰ą`š¸ő‚§҂°Î Löa:\ƒ9‚úč…g1uŠ–ƒ~#ŕbD#şWRĽf0*ey˛gűˆYß+:™‚@ůwÁÖnOÖ7vdżÓU#! 0y†>š–¸.cžĂ×§Ţؖ4Œp&ĽŽĐó ž!ú6Ť†$¤‘ĂF;â^“…zÔQŚŠ,zâń UcŰ9°ýĺy¨J.ˆWV<¤!ë—`UFđJ¤<›,Ď`ëkyŒ8‘ď×ހň´FŁŞ F3+úŃ6ĽF ‹kn'wěuÔ)u:“SÍ ďiš2ňBč†éĆçľöcđhŐ1FĹu!Ť„˘Ď“ŔsvűEŸ‚ú‰7Z%DĄĹ¸EŁoýh=ŘD/Đ Ş´×rœťíţNaŻF˝ú];Ќ7D&eÄă^s‡UHaˆ&H¤ň—`ýĘל†˝Ä/\ítĚŤĚ́^׃ś÷ĹGś@$ đ˜MíKQ^ĽňŞűPđÝBžđcs°âڌw@$!ŞĘòwY‰Ÿ™Ş§oÖ0#śčjŒé:jľš<,BžŤź^Ž$?éýwŃŔ:šŹĘO…yŸ°Îë5ŠPˆţ֗ń‰1yďűćdsc[=ÎoÝxb\dwÖśĺŘŔ˜NŚpsuÚľ5Ÿ–´é lŤë˛łť'+ˇŰ˛xlVŚg&Ô8•š˝$m´Ýľăîö]yXVă9 l<\ëÇ׌…_MÇëĚşśÉőšëşÖ/ځǟŰěN~9 Ia#Ă×s|íŁ#“FŇ ĽáÖČOŒ–95ŃTg‹§.^çŸ9'§–fÄيĺüšSrńây9vlAݧĂtDŒ˛ ޚ }’žsŠŽý–żđg[`ó%űňąœE#{ŰŐń¸ŰŸçÔÓ~oGnßšŽQŞ&'\[Ć'B$ŤŇQAů˜}Ýg˘ýŽ×yéŮ(<řÇ'ľmLáPĘÂŮź I0h{ůôĉł2=5/Űë˲~űŠĘ=Ýým•~ó‹ë"_üşœ<ą O]8-KÇćPďÓĂŚ˙”ÖŽóť‘ęxŔ#ÜĽş‚ŠŠI=óŽžuEnß^V>2$äbü…œ ™ÎçΝ“ nĚĂď0/šW7އ ŘľŒ4š>…‚9–yÁ‡¨ZIŘűĽä-4CŽSďx†3Ą ¸9Űítő7”ľß3Rś6dÎÉ˙ó ‹n5•/‡Ł d¤~‹#pŢ]§n-Mę kHÁUťpâŘW1†br+'­@ę ypهó–Dz:ŞŹř ęf•`đúVOĘýĘó<­Šs^ŘńˇÝjźM{÷ˆž$ůôľŻ}C>ň‘Čě܌~żąą)żň+ż"ţđ‡ƒ ĂŸg{{űŽw]ֈ*˜pp:}úTQÖ€]››[IKpZşsÇółłs!u{űŔz˘Œ/~ń‹ňëżţëňÇţŘ“OúÓĹy‰z˙Ľżô—ô÷}ěcşĆ çC=Qw:;Š{fݚAtrD™ÚÚÚÔ=aiiQŁÔz~G^~ůZGDŕ…î’ ÎhD#Ńť—ž€ĹŰˇuŁťőěǁ†tvvF_0ŹPă҇—ďŰL[•ŇŐx'Â ˛z<—>ŤT%bž^~–(ÔĘz Žę”Úu u ç ŘŁß–UţÍk/ ‘çĽ5l3š¤@ż7Œ¨GŻ U Ľq”Ń˜˘ÂFˆ  ÓhضdžYŔűžmć÷DĂŇjźC• śĎ* I4"Űhq´Ť$/Ăś•Ƀ˜BݎĆ|•#l˙ÄĘ-+„ÇŃTlŰ8ź×F+!ĹŃXŽMĺcłŃ8Ź’ÂŽűÚeXoĚôËś$•{­˛ż\‡Ţ(ƒ(ȁÝóŠ+xĄpžqÜËőžeűßS]PÁvŃď ýđlݘ 1Oäh†‚aTlŠÇÜöW•üBWOînO÷C¤3‚˘Ä@Tô‡ –‡őƒ¨Př€$šíöňL’ Bk\s̰łß¸Gâ uËĎ>%‰ß›rÇ÷5¨2"DŔË{“miŮ\/já|ćţłkŔ”€ʆŕČĚUËT>LB ç•źL/Ĺßéľb O#ŃÝSnţM*t€=đ“qÎe×ńR+Űű˛ą‹4^{˘gy~¨ZÜ6m4({Ţ×ń' ~V_o}—ĺ×¨‹¸7ô` yŘŻň,Ż)Ó{Ăeýl Ţ¤ŹŸUš łOf”R1â‹DžŹÖSĺłÜ ?äß&,•źQ˝M, Öy5ź(úĺ^!şiŘ9‚ç0BÔ8Ň­!zEÓ§*Ą1IŸgëkŠŚÍţçĚ×+/aÁ.ě݄ôQß÷-ÓşT W‘ƒ@‰ŕ›ÓËŐđo”„˛Ĺœwţ;zÓşz`K~ĂÜďYţ׃A’đ<t¨W\çÔ2Úń0Ĕŕ 7Ň ˙ĘB˂!†5,z>šF/A ”~XŮ#¤”)# ”ç3 ÖŘ_7 ŘţbŒń)Él˙ýAˆŐ:Ţ…ŔĎ{Żn Ř2óL’ŠěRĘwG㙰l|Ÿ\ŽÁP/íSŠ—e\‹yđT%?ěä˜^&ăŕá//ČĘíŮŰْľőÇ/ˆL8ĂŚ$ŽgL˝×wŰń­I§č=1'iă-§ŘÝŇPńŕÚŤŽŒĹ9őFFz$ĺľ1mzˆŠ"•t]g^N†l;ŒgŠ“74ĘGî#ŔÍNO`ť1…­@s†źWÝat7ŢöĘ3ߞŠ÷óʜűhň'ɑČi% ş…Dě‰ybé Ɲá˙¸|üçཞüşÜYž.ť›wÔ|óćŠ,ß^ŐýçܙSr|é˜OßY¤:ńű3ű´[ ď“'™ź.ëîT°Ę™ăYy|Ě;œ8qBŒÜV}§OďY´=ÖVuKü›~ą™°¨ľ*řČ0ƒÄĎ˙$Čđe$zň—ä!‚°F°tűOůŒ~SěűhSżë¸: ž ŕŠé†kӜ“ƒÇÝ\Ÿ’ŠÉq÷9)ř /K°>ƒ”ůMBďóRׂ¨éĚ ‘žśÝşŰ–­íMuiŤ~f\ד]S5ĽĘÁc6¨ű° Q:lđ;‚h°–ÇĆŚHău ͂ˇÉ  ‹]ĂĽ,ԂţĺqŘĘGôŽ&ěĎ<óŒźúęŤríúő`ńšĎý;];ˆŕú­_ţĺ˙"żđ żP¤¸ĹYű'ţÄ×])?˙ů_q÷~NßĂ1 ş5FÚ˝úękň“?ůSz?ć2ßömß&ŸřÄG\exö+Żź˘ú8€>Ź~łűąÓçĄNˆjńŮĎţůĆ7^.tpŸřÄ'ä3Ÿů}….’kŔŤ_ţĺ_–˙ř˙“žyř “ř?¤iJnŢź%?úŁQžďűžOËýčG?"?řƒXF4˘hDďnzbHBĽ÷ öĆ|€*r+ŽĎ+%†—QŢŽFÇđ†55bC —¤˛×*–í‹÷ÓĐ`=Ć3cˆśĎŠcâɀäĹ+÷bŕ€­KœęFúÁ>0Ţ榌¸}ääë"#¤&Ş€}vLqßŃŸEžŞěK ‚°Ć–B9’”&ŹAß^Kbyô6ˇßń/ź$ aß1 ë{ďÚ:ł-ńx3úG-"îkаý@´/Í"dtżŇś žˇ‘/ěóí8Ĺŕ–]g g?ŘžˇceŻŸSˇđ= Î6leh€m°s‰ ›jżŠ ´Ľ§ y[xĹÓŘX˃ZM}OŻKž$<ˇŒš‚ëŕámŕUą˘Tř43yáůçӇT3˙Y*Řö/ $ô>¨BA.! ę9B‹zĽQŁ ˘QËĚ|A€7憇 ç#ŮĎ؃QŽe_0]ú”{,ßpţ3ę ʅ°ÄhÜßY.ű€ ‚^°ďCđC]ĐVlx6Łć  *J ˜â>^ËT/l?˝Py‡{<Čî5` œč~¨0CŻKŁš˙ a˛ˇ÷z˛žŰ•ŽzPű”eią–㟴ÜčÜăÚäońžSěŮuJŇ`ŹH‚÷ZVH|H]:áöóáŢřԍIšŤÔ§ H ŮÂ/4ƒŠň0îš,)ÂçA9­ĆŹ<-Bż5 ĎÁűIŘăí9HƒŒďg6=ämd0šűă‚äb= qimß֌ĘYó ľIˇŻĎ5}ţmíŠç“!ý^ԛŕ}@RxUk$ ý!€4 ü8ür“Ńšr˝! ý“űqÓgäaţ&fjűxˆiZžO|j“žßĎÂü }˜ŔČ[ ŰMLú=M,8˘¤˘íŃ<ł×Ľi žˆĆ0MĚÜćŸŚ(˙ѧř@J.D‡ÓÉ{ĘŤxůÁiňÜx–Ę|očȤŒV–WYC!’Hb7 9Ċ}Dè0E2C–‰áůcYĺ$/‹çäá˜~Î!G'ť†cžÖóž~<‘NĄŚ!4şŔ[€yĄř]“ůÜ)ągĺ}/ÍĘćúŚźńć5YßÚpĘíug<;éÖS˛ˇťĄ˝ßv}ő ĎĘÎöŽ\˝zËń&۲žśŞ vôăÉăó*óNNŕŃ˝§!Ëóť1|–€´QAÂá='ĺđňüo1‚EBăÚÝQąö‹îfY<œ%TKşFňzuöŒŠ“‘$ =Ł‹؎ľăنâ8ubNNž\ŇH-ůŔÓröŒ÷Ž}ţšó žV€‘ĘVÍJ$Pź‡lţn¤Ő(‡uułďýú•§€ęőUу}Črîý~ˇŁíđťľm”žńLo‹¨Cyؓ›îę7zęĹPEo§§ŠžĐŚůš%׌ůčƒÄugžILŞeđl-eá˛ÎţzMŤpń™]ş(›wސŰˡdk}YúÝ]šqkUVV75’Ĺ™SÇeé8R@N˛uuâ?ęEúřeŇťŁTőp&Cd“gžšŹŢԌ¸HŮŃŚ€ąďů܂Šá(#ľĺ9ŕ\ ş0 ŽAG´tš†&€8;îÜé¨üŰUEÓęi´ϏŞţd`)iľg¤Ůňúś–Ó…4TNO‹Ď͆çí˔žń:šÁ^AĘÔěĐă"‘ŇI%|“xG€ڧf(ÔéîëzCšÝ˝ŸzČńĂźäÓ¨ ŇűYžŽZü§|Ć ĺCo€1ÄXÚHĽu|Î@ëâqш=˙üóňëżöňę+ŻČÓO_ŇyöoţÍż‘ďúŽď*öL˝—_~E~îç~Nž}öů‘ůS:Çę§ţąüÝżű˙’żówţŸ Fř˙â_ȋ/ž(ßű˝ßŁQ,ţé?ý§ęôÂzř˙Ç˙ˇ‚ĂţüŸ˙ójĂůšŸű÷ňšű9wî?pNCŸ‡(ŕ —‹éă˙xq _űÚďĘő_ý°ę żđ…/Čżü—˙J.]zJ>ôĄJi/yíľ×ägößĘ?řAůÎďüNbń?ńä_ýŤŸ‘żřTŻŁňGôĎkt‹hD#шž€•‡˛aȜžžRă^ôŚŚa 9@ ĘĎĚ×ÖÖ5„=ňöŃť Œ/ ްŐŔt0eƒl` Űý!!ścÁß ÂŮ!šżXšWGqXč˛ć,ˇN(/˧‚C›o ´ß{,¤˜Œö{<ƒhî:Ą‘\hźäx0‡-›Ćb>­Č ŻąšĎb$“8ˇŠ5ř3ę(ŽL×'án !Œäaëcö~ö‹ŘHü+Ř|—‘ bŕčaÇ0VÖŮy<ÔP!ƒ)IHôň§ň€żWź3ŇjzŽEŰ˙UPH9×bź)ěb?Áœđ^ i!áRögí4÷}ňݏÍÁ+ýźa ĆúN§ç _ýl ĂÖňƒPzÖ)ŐęžSŁżŤăŢţž†ŃTOX‡ŕ”ýE&ď$XuăuüÔSOŠ0ĹĎhyŽ\ü†ż@•cžCŔŠ4l”"Ž^ŒPÁ5Ît Ž#>ç>ŕÉŚÝÁ ĎĹ ×Á[‚×ęĹ|Î$†Ä8ŔÁžâ^ÁuG€Ţ㞢ďĂ~dW#Ń˝Mř…á)Oź6ü+“ÝŽŹníËÖ~O#Wäa"ŘŔkú*3Ëu^î)(Ěßd¸!ŽĎ÷kœŻ2¨{‰ĎŃaźzf$@šP‚6Ó[ę*ć€`Ď*ĽŸőŹÍ¤r7“ą(˘Qb Łńbđź„Qź‘–ŔĹř\o€E˜áĘsRX`Ş÷ ‹úň€sżŸŠœĽŢ;}Џľ-;á+÷˙ĐŹŹ2âYHSCEs¸ ó˛Ňł4ŻOô÷rL|D‡ź0 j_„ŞhŞœ•ňă#~h„Ěˇ‰žŃÎĆ­Fƒ<—ÂHV(¸‹öՃ+’ƒć-ů5 ˆşĆ’TQíSôZ_×lž5€&CˆśçGhnZ1ž–üeýŤŒh‘éş6cL”Šäň(4ö˜o8ÇcŞŽĺáŃĎLW A#֐<Ź ąń˘ŻĂD|[÷˛ŒjŚ˙&%€hŻë”Đ[˛˝ëř—)gđ™˜TĹŽă!Ž\šáţ:~¤ąäćöśFź¸}gCŔë<÷Ü%ĺWŽ\yK6Ýţ}ĺ­eĺ3çć<ŕslOŮKî‹bŢŽüĚýS‚1_‚ńÍóˇi̓Ëý‰ýăÁĎsXTĆëî+­=zŁ(“Úk"źJ…öîĂtwSŻ{ů­×÷Ž&SÓréâ 9ś0+K Óňţ÷]’§/?%'NĚËüÜŹÎű]•Ďxţą ŘGb†ę™X/wň,ąG;âűé9ŸP…OŰŃQůŸoÝŮŇżœă“zýž÷ęĎ=  ŠnσěĄ_‘Úg7ÚzÍ.źěwśÜ˝űęqëah?J?'E›ę~Ťň Nř[ˇ ›MM˝ ÓÇ.ČúĘ Yťý–lŻß’Ž“Żßź#wV×eńĆŹcNž<ćö+€ŘSŠž­ď^˛N;‡S˜?A€9~ńâS ň/™ÉPžŐ“€řš—Œhe̒w˜QŔ+t8ŕƒžę3úĘ_Ś)÷ëLc =MĐxJŁä)›Š‘=˙6źîLAPBš#)x‚=<Üęî)ćŃçŠç›tgŻwÖó€ Ź;´uEÄ8Č Úě/’HAp+Ô2Շף´*u8†ů°ýşfÝňűĄшH˜Sˆ”_ř­/ĘG?öQM­h ßýÝß­`ŇkŻ˝Şgěˇ|ˡ8ÝŢEýé:ţäŸü“îúërýúuuú}żď÷š}ë‚ÎoDޏzőŞ^‹g íČw}×§ĺńôŮ7ŽßĐ4ÂWŽ\qzˇ‡Öő°ßÉęŤ_ýŞ&mtňä ׎_”ßrí{˙ű_,öKŹ×7ßź˘×|úÓß)çϟÓ÷ż÷÷ţ^ů˙ŕşJčěđű… çeD#шF4"а Ń a"çœđ …Á×G+ 'ŒiVÜž˝˘LAi´M]×Ń(KŻmp­0aBCh‘çÁcą|ƒĆ+,őî—báŤţťdŔP]*†ŤĘ›ŠÂ*üľ=ĆŁhWk•ŕ¸Ä@”RĐČ+@['~GI°†֛@ ŽeŐœ D¤(=üĘą°iJâHśţ6wş{Xď~ŢgŰÎůWěľüÝŚ Ąá؂BřSbp‡łÂ*ďŔFÓ$lń>ĺť×Vâk´yo)4űű=¸J ?Żr}…”Î,Šg›JŚn-r|Ř7÷Ťľýb÷űžÓéŞ@( ‡*ě˜CńÁőf×]<‡ł¨]říâŋ B öSÍ!ŻĄ1˝â ›nƒkż8{pÚ嫆GuăaÁxßl8rť7ńěg” d<΀1ŽđƒuŔ5Œ\{ń=ŁoXŕ“*mLęöë`÷*_ř|‚}F4˘{ŚbÝy•š‚Ő‚=§@EԊ}§ŔßwkżçL ÷j‡"5ńaŽłţQ˜ŠÄ=ëŽ/˝gŤő,•ďö'5´K¤( ÷€)öw<řě: [•FŮ)"Ő˘šă99€˛=oĐ|ďń}W%xú űĺsô,4‰Aĺőž‡âšSš?/SŠg‰Ůócž¨Ž]ö{ň˛Z§Ú§\ í }Ú˛gq(#-ŒP䑲*ŔóŁ‘s“Ŕc=ăƒ7o×í•H g–5˘Ů=4ŞJÎc3ÇrŠń`÷Ž4"č9ĄgEV*ó1nř”[Ł| 0ȍäaó–ž n0Çš$Ք!i0.$˘ýe%@$÷g.žCš?ŔÂyâšLފź-BeôŠPŚ0‹osľ/Ĺ ÂXöŔtn4Şë8 ` +Sxoq\ëű“yއŞ|j˘)B2öČ=QźßäfĐŃIČCŚÁ+WÔ(55Ӕ7߸.[›S2=3+[ÓcÎĐž¤)—Ÿžčö\đŕ ÜX;~Őąi˛ś/[xĂđ“ĘÓO?ĽăyęԆ,/ßö)!ć罥ëţeHö×ŔŢöá,ŒS+‚ĎeĘ[†˝ŃGRň‹™™ IŃg÷FĹĚ}řSˇ aĆŻĂŽ=ĘőG)ëŔ==œŸ=7–7ďľN\݇_Srˆń˙؇Ţ''—äŒ3Ęô›Ţ#‹Çd~vZfçŚ*Ń"˝LW:Q0šCby|<ËYń{ü—&iĐěăŇáA<˝`EOĺ§­íŮXw/'\żÓ•ŰwnĘŢnׯžŰł €xâ=ö[Ţ`›*˜2iłĆř>Ś`ŠŠÉiőŹßŰßqĎÝÖtđŞŸŸRoüPŰCÇnřďVÇ#°•źcA6šœź,óÇNĘöĆmYšuUÖn_wý ĹŞŹŽl9cŮ9qrAÁsóSE=uő?8ŐVM[î•ZĽ j6ď,kJNȜĆD!s‚ŹÍR<ÎVOĺyčŔűö3(#kvşˆŘŰóŕÖ$ Ž$Nno9¸íO4MŞÎㆂ°ß[‡—$-ŁÎ‘Ö?ĺgĎë4Ňf8÷ÙP€ä<CÖ "Xډ÷6R!ËFM ]ĐD6UDĐČ{ťŽOÖ4=O{lťăAo×Ó~łŃ)˜˛§Ý†Žc2¤‡ő`FÇąăäyłźčűëŸ˝u{وFô hlŹ-ßôáË˙ď'ŇŮCîČżűw˙N>ôĄÉšsg+×!}z ’FĘě-ŤŤŤ nŔzZX˜/~ˇi76|úŢ3gΊ“.\¸ —/?-O=ő”loí­#öA<ëÍ7ßÔ(ă(עT0Ň-ô€xOň<çŒ{ţzEŸ-œ§P?€%ţČJ0˘'†8˙`ČóJÂĚܞśÓMdcˇ§€ ¤Ńšœ#Lž7*ŤWö†{א˝ůĄĘđaFžř÷ÂŹföżfJ B¸Żâ][T#ͤĐ+Ňňeń94ŹŽĘ^Łî,łĺTŇ-„P˙ř‘{OáÄJkžšş?Eރ|~Ń ×M됗|™=ňâHŠž)ř¨,7 L?HTgűe1Tq†ę Ć8ęHjFc>Ŕ{$ŢxNs=üô÷°wjtńó”Ď °WPOZć G•ŃçZdĄîΆ˜IÖ¤çŻCßËa>ĺ4í& ŕA4“^OKŰ&S~<ÇŮ֘Š~Ď7xĘŕXřĘřą">BCk'ioˆ"ŔEű ŢŇR#XV*ƒĄ“—ť=MSťšąŁŠz6ˇđ[GöÝ÷_ýŽ}Š“Űn_“‰”ĄŐÓB‡ŕĎő:îG:ˆqéö:*wíěşçm"uáŚţ659Łér!Ŕ՜÷ZfŁv<řˇˆZ•g†Í*ŕJ2ŒÔĐ4=#“ÎŘ4ťpB6OhńŚŹßžćöŚ}šy뎬ŽmĘŐˇn;ůk\–ŽĎËéÓKú>y(‹3‘{_ôw1°:nGžMÁ4wCjřëuÔY#MŰ t HĎ^SǟŘ÷6Ęda­ĄŸu´LčC^8ńžäP:Ÿ(ˆ×pţŚV÷’„ˆcŻIJ (Ä+?§öœÎ˛Ę+Vr€|Ô)9´ď,?0ě\˛{?Ŕ„5€@MŤkˇe{gSעX  őž>ŞËTĄ?i6ŰF•Gk*xžŐÁۧb}–ý>I’wĹY7˘GGřŕKňÓ?3%żů›ż)Ÿ˙üçĺÇ~ěÇŽa4XDű&]šňŚŽ¤âŔo8/oܸ!ǎů4ׯ_+ŇßBˆýĺŁý¨źřâ úÝćŚ;Ű6śääŠăňőŻ}chý /\ž|Y~ă7~CžôĽ/ɡ}ۡr1ž÷wţÎßŃ´#—.]Ňľšźź\ÜťˇˇŻöÜouڍ!Ýę  ô†X†ˆ¨'Ť:[ɈF4˘hD '`qüřR0Zy ƒˆ=ůЋTţ$TÖ<‹†7(ÄŕMg<Ń÷ ° |4„9PäąśX2 Î ăđžOo@ŻIk(f=â0ž"RIk0,Ź`,XŌšUŘÇíŽgäŇRJs,ŹąlČi„Ľ‘Bť}†UîĐ oŰ{ë[cź˜~łB‰}ËA],ˆÄ–C#* Ź; ě|ŽmÄL…UŁm/Ň'0…ýküžamm?؈ě‡ŘX“UźfKŔŸĹgđž8$Ăşąś Sö­ł6ĹB*ďľă˜DsŠýBp ëĹ( 9 …N†ÄëŢ8â_š˝#c¨lď嚈÷źł $6ň[ĂăCÍ0žP"řĺeHĘ4xę7ĄO|şf怱,EjŒŕů/&MEání÷ 1ÚQ¤Ş˘Šű×d%CÄôcę?'Ro<´s‡ýÉőĄŸsݐF(ô˝˝UÎlo免Đ?3Q(+hps^ŘőÉ5… =‰}ĹDJ˙ć*ą.^8 9” # Ŕ ź¸çáz*0đL\‡}:öv… acqçΝtkĄč„0Ĺvá/ž ŕ…Ď{ęç3˘Vŕ^Ü`š¸Čx}Đg¸÷Űşṕ펯ĺúÁgÖ×úČ!>í ӗŕs~7šťHĘý8Ń7VşAArť)Ú   Ťkř ţťÜyͰŞÎÚ+Ksî™ĚÄ0Ѝ‚#J;# ˙Rî‹ńo5úüÜx­KŹ@΂Ń‹4)Ěí0 #ďóô ĂhWďk9%5œĽą ‘g? č;o“Č‚‚ŕđo()j{Aßós S“…:ĽîŞ ćŽ,m[Ď+žôlˇ^úŽ4ŕŃéSŘ3ׯÇ+!„şˆ^—áy9ËčűHA‰ĎĄ^(´“˛ťŇ¤zžÔ6x¨ąŮ á•ăA"ą|h*4h$ĄßńňF´°žiž‡ˆ }Oƒż÷ăíř7uŻĚľďJĺx8gňŔ‰_’´Ź(ÝZń7(ôľœĚ§ŰŔüVƒŔ”}i¢řHRŠü\ŻŔbë”ÜeÔožÓ+ÁP_đŰš˜SÎi‹ÄœýI€c&/Éşn~¤ž_Ý<Í ăúˇ2Űö’á`˙ę*ĘĘţÎóŇcËýűžÖŸăÝHy˜š{F˛bô,đĐřĚs:–Şüą”ó]â4tř7-ŽŠ#öƒ‚¤ädĆâ˛üíđßYO˝Rű•ĆK€„đšßC´Ž]9áäŘS'Ë­›w䕗ŻĘŐ7Ödjö˜ĚÎĎj$ ˆV~ՈœX:&ÇćgäŐWŻĘ­kWdÂ7gâşŠüdžîESÎ ÖÄşmVú­4şŠŠ=/z$2ë÷âÜČ)Gç[°˜.׾ĄŁa¨§…Ż Ť1—[ţđŚď 3Švý]őű`!•~#nˏŸgŻľň˜nÝŽ€ƒŒĐţň:–žßżÂFĐs—ĎČ'>ň~9{ö¸ź÷ů§Üź_T |{ł™`4ä>oŹEtADyáZlvš—˛-1Ľ[’—ź ď*örƒÉř˝!ď!˛Ÿ39ýÍŽ3FŁ~űnŸÚŘޓőľ Yßč:yĽÎo¤pčÉÍ;YŮČdsgĚÉ §ĹCčPÝKíţ{”ńÇým¤'hľŐč ďy왐vvnš}"U Ĺää´Çľ\ŐžfśŹ ČçG!Ü3>1ĽŢýs ÇĽ{é}ÎHś*ˇßú]×W+˛ˇęd°ŐDnÝ^‘+WoĘšł'ĺÂŮEzÄA‚îŤŢ˜ő8ČDuFîaŻńöxKőnő„hsšŇŻßSDŻ×Q ˙ţöęŮXꌲ"˛‚¤šŻó7Ë÷•§kľó5Ń;(4šmĺsźÓHÖŇŕŔĐ,ô` ň3żsţ*Ÿ˜Ś•ďÉÇ×G}Ć3ČîCŚç|d‡!ű‘‚ű/ ëü˜)˙.BP‡çGëô’ěK%s݈bĄú^WĆôÔ|áXƒşaýů(ű…cŠ×Ô§ţ6ćw3§m=+ß˝ýËbDďx*ĎT¤˘űđ‡?,ŸýěgŐÎňĄ}@ׁϠ÷źç=ňKżôyůÜç>§űöš˙éúŸěű Ö"Ŕţóţ/äđËúú†üň/˙J‘š‘Ç?ó™ĎČ?ü‡˙Pţ̟ůÓň żđŸäöíeůăüťó¤Š°7ß|CSŒX;öš—^zIžň•ŻČOýÔOÉ͛7ĺŮgŸUŢO˙ôOŤÎđ}ď{ŸŽÇ÷ż˙ý…ăňĺgÜë’üç˙üŸŐë#ůH‘Ö™QkŸzę)]ß?ó3˙Zžç{žGŸýěżvmú–ú9h’тѝ‡ňĘťŃÜшęč‰Xx柂Ť'ËČRáCD!×ŕq㠅rƸ›7oË͡4|UltŽ˙Ňc…ÁzĎGŻ€˛FBi őށI3/¨ŕY`Z➠E*Ö­gw Š ݋ iÁ Ă ˝E_F÷Y§4Á~´B Aŕ‹HlÜ/ű5x‡†2iÜeŸ@Y"Ÿi0č]oÄq„ÖcÂ÷ŒŠ÷LŤÁ4xOpěŹŻő˛#Ȁuąe{†Ź*Űž§ÁŐö—{ œ ňŇZ(üŐ ěúŠÍFÔ°a>ƒdßŰTŹűÔÖA"Ń-ěœbý-°¤œ?Ššź"ÚĎ<„äg;W4Ľz4IĄDň{@Şk{rrBšńžWYŁŃpŘŕĂţ€DŁé#&Ä*8&űBsGś­VXݧ#ŹŐpŤ5‚”†„Ş â°oYśš×íËfH_=/F\€1Ÿőľ‚‹ýŽcm•ś6 Ke_Ję[ÉqĆ>‹2$g;Š}Žya†yAřlű÷áZ(e ŒŔž ĄŠ×ŃĎ+źÎÝ_\e$ĘG” €.P€đ4̛“'O*¨ĺá‚3ěĐźá!.ęÁŒë‰Â#ŽcÚ\ĺ Ęç=đPwöŽľéJěXŒhDwKíąq™˜™×ÜŠ :ăsĺ}R~R.)Š^…ýľŰsŠÄ¤%Ľ>€”ϲ{B6Ҙ\§=Đ2V_Š{EJÓ^Ö0ˆöX[Ď愍inn^Cřú¨HYĺ|QŃmÉ@˘8“đÜŕ}Ş{ARđʓ„sÔ[PCŞ‚ˆÄEđ:Ä>d’ ´Ü›űs ^ziŃö,üÇ8jíNŐň-˝źëŒ?$ŕs\§ŐNKLÔń“܃ąŻĹĄTŮŻΝ׼ˇ´Î{Ŕ° #đoř-(4څ”<#Ši$! ŒËý˛8OĘ~íC}xR‚+ó1)j •Ż-GŞuOoĄć_͇ă•÷-7~ 'N)`&^8CćçeÍ)Ëg 3ޤń#MżH EE.Ľ˘X3”SI’ADž÷¤Šeťfě÷•Ď•ďüĘÂٌłđaůq‚€´Ŕšˆďpz^Ý@y=•ź– p–Ŕ[KrőĆňßąA9Ô,ĺóą î×C{`*Ö°™$4tboIuL•oXËdgť'3łărîÂiyú™‹ňňËŻËëo\—ˇŢ\‘ńéštéźtaŃůpöĚYˇVĎÉŤŻż.ŻźzE^ů†´Ć—ä҅SއßÝQĐqĂČ#oś÷ GŠ1|ĺ>ÂJuďh”Š}Ú­3ŸŁ*TÔŠî–¨”@‹ˇ›*ň`˘óäőŃ`ę)&„ołĆÖ: ü‰‰qůžďxIʟ9sJ^|ßł23=R ´ >YÁw)Ŕ%˜eœ–$P§ĂÜš‚3I˝ü;ˆąWO÷öť˛ąš-+Ť[rŰ˝ś\=76Ž{ A€+k]yůÍ'şő—¸ó‘+ň %z”*¸áŕąń{ ×P7‚>›žžQÝŇć@ ˲žąędDě›…Ŕ'ék˛NˇtŻ„zľÇ'elbJ&ąlĆńZׯ_—íĺo(€ú2¤SY_ߔ7ŻÜ”KOËůł'Ô"*IWşç}(Œ÷ä]¤~ä:Fú4ĚUďĐ•ŠƒDŠ+ŁS@ç‡3dômU4UEŤşůËÄä¸ňŚŞhú¨ž‡ô€ ŚKÓÁ¨ ńœľýPčW%hoü>nĎĚťĽžăűYýŮV=ăŤ!;ÍÓFćt$Xăű>iĐ+jD5a˘ś[cS•ˆŠ$Čó¸{ô:˙ĄĎ˜šĐh<ˆdQ>÷h`*ťw×őőŃ÷đč^¨\/ßüÍߏ`…OúÓŞWc„2Ž!€~č‡ţ¨ťćgäŻ˙ő˙ŤÎIDŁřŻ˙ë?Łűɉ'őýOüÄ?’˙îżűkröěYeŹŤ<ĺ ů á/¸ßBţ‡˙á˙Ą29ř˙€FĹł^xá˝ňw˙îßUě4–ŕ$őC?ôC ăçţçĺŸýłŚúAÔá‡ř‡ő”ń]ßő]ZçňOţ‰Ę(űĎţŮ?+ĎĽR:TqÍ9AƒÇ0nă0…ILźe">C(Â_€ˇ ź= 2¨?Ćíaôěh څ<ŒŘŁQžC˝q-ćž%\{Î&8ż„Ă}ŻźňJQOöž‡r! Ńŕe žKŻąxě0íÚĽâ…ý‰{đB9ˇŕyř ucԊx,F4˘{ĄcK'äů¤źőŻ˙…<â`Ł:yŁĽ7ôg,X÷˝`H$qo{ŁŚ)1ϡ يń‹Ŕ`tĆ@%~˙g>S[ć‹Ď}P~ń?˙{gDŮtFĎŻxĽjW×,ÁzĐóÉ?Ą”<ߍű”Ť?" íí! M[6ś–ĺÄŇŹ<űÜeyńĽ÷Ęď~ő5yýőërëú M"ÉŽŹŽmȝ•UÇkĚĘS—Îťyűœ|ýwż!Żź~SćfZňňkw¤=vBĆ''ÜşŮ=’œËJŸw!G'§Ů÷ÂÖëzĎéşľTĽĚotšçó§§'5b’Îëdx=}…l5ňbű} NG1¨ń:ŇýśŁNăYĽ0¤ä`ƒ:hyůÁmSażÉ“Úç€0ţĹ~đü9y|A^zń’;oÎ(˜ xČXŰäË!ĂQŚCŘo(›Ţ=P§ŹSőłTTIĎ#ˇonîHgż§)b÷ö÷důÎŞÜžł%Ť;AŕŒŐdĂČíó‚)PďÚ­=yăÚŽxçŕÓ:{Ä:ŠŁaĽœČšĺőΠ;1ĺä‡]Y߸ătWđĆ]qűçŹĚÎĚ+ăaP,’–m°ľš%;Ű;Ž÷“é/ČäROś—żŽ2€`++k˛śş.Żźv]žćŒFľ(Ňň–ąDDÄĆTɁƒUůąM÷ł6ýĐtóźt‡ßĂžĽ#@ŻŰTyócÝë;˝^ "R4ÜއąśF†Ń4­fąö4ýšŚię|¨NxCŐ°_§ëŕoőŔcOf‰ŕ#!prŘşłgݞšFŁÁŤł]‰šŞŃ)§f|$ŠĆ˜PwˇŮŸßŁŔŻ2z&t ťť;NˇqSűxllBŚ&§5Oă.RĂX=הým)úä1<űFôÎŁ~đƒ‚sěâĹóň˙ńOŔ"Ź?ý§˙TEGűţ÷ż¨ k#ŕ>9 ż´çŐÔäÔŤĎÍÍȏţč+˙Íógőęe9§˙ň_ţËĹő1áĺ9~đĺ~ŕŠ5A]>݁Îń~ŕűĺűžďű„ö/˝ô˘üÓúƒŇÔhřÎś“ĺ?^~ćg~fśшF4˘Uč‰XŹŽmšłŇ§ĆK/ž$ĄތŇ3¤ÖHhÓđ;0¸ĺřńE9Ŗ|@•đpčK ńqĐâjDoPą§nŤĐfîNýěę8îw~Ćc˜ Ę:ä…AŰŚ{°FN~>ˆČ [†=šş—ϰ×Ƃ•˜4řŰôVÁÇqAřĐpaëFsőŞ´s źL8n4*Űhź}j~ź:•Č dy-řĚH6ĹŁ_€8>–ŃbĘŤĄÚFuˆ•$qł/ů>´ě¸ň=Á śßQŰÎř:źZ—‘4hDŁgÁ&ꇑW%ƒĎąŕ•8­ ŰÂuÁzú&W řMëiÂG˘n0NƒY†ĆtćăőmëzU(ś¨T@ĄĐS&u äćC?ř)Y!D—s8ŤjsÔ5uĹöƒ5ÄÂ6Ç~oˇ#ŰąÝí¨O€ć&31P‚÷ڈ+,‹)sř@°NwŰ.ÜO`˝Ż ¨ŕ{(Œ˜ž „œ'đśF´ F˜Ł0Ŕ0úƒUŹ@ä: š %´ Ö }„=혨vŚđ{=ç ó/˘ăÁ‰QA؇¨7Ç {sËPÁ¨ˆĘAđgŚAÁ ×qźF4˘{!Ó˙čýüö]Ţ|ă{ޗ,q-çů`ě4ľĚ4şçޞÝLҧÝË5ŠŐ¤Ń’ě#ňÇř˙X[ćÇϡ˯}ůóňs˙ţł…-0ˆŤąPĚ~œ— ŻŘĘJ°Gŕ4"Bű[ł´˘7xŕŸ¤Œ‹!ApW;ƒMżpN2¤Ë"Ł‘íF>#œĄ$Ô=óxżAąîËÂ>ó-Ÿř˝ňŇ ŻöWčÓďüƒTžńĹ_“×_}5<ӟQa`Ëó ŕ‘ž2‹8ĽuŇĐPĺEŠ­Ôř°˘+ÜomF`âŮB;WfN‰! ýć_>,ĚtĽś^NČC g˜@ˆég.ČÇżűűĽ56čYúÔĹ3ňíßţqyó꛺oűš(Q˙Id-!*BÂ^ćÁIi(DP!ř‚Sň.Öň Ńąú™`ěřáôŹ|Ű'Ţ/—/Ÿ‘K—.(ŻK1ĘÄžI;^bŒ­W]DĆĂćĂ0ˆ‚"^ăuœ§;űˆú°+ť;ű*÷íěěÉćƎ[7˛ćţfŽŽă­T&šŠüŒőÝsioż/_ţÚŚ[‹= Đj'ĄË†×Óę(+4V‡ľ1vp€Q}ińŒtfö5˘ĹVxa[R† D ¸÷łĺ‚ÚŰßQŠ‘EuŻsρěäŁ Nkʗsd}ĺŚÜ|ó+˛ăäTěƒkkŤňŤżž*_嚼đüi9yň„c“Ş‘'Ăl9Bĝ{Ý7Ű÷Ä~„6MŒľĺ¨EqŽ@î=sć˜\˝şâÖӛ2;çútz"8NLčúňŔ ž AzœŇÉęʈžVóQqťúœĘđßęúď~ú:Á<—Ú˝B˙*ř.+ŇŁŕ…ůiSˇŰ“23M]PKh|ők´Ş¤¤ÂËŇÁ/ě3XŰۛn_ŮÔąAZŸiwơ[ă”DĂ(ޟíľBŽшęˆë‚„yGQ’đšć€Z‚â2*ÓRły¸Éę űI~˝§CëhŰyP›ęúdD#шF4˘'`‘k¨<„”íĘŘx+ń*”¨2 ąQ ŠĽwSéĺ„p—‡uáÂy˝fss+.n8Ţ^ˆLá Ďű­i €äl4ƒÂŔô{Îp Ÿ– @´J?›rŕ #ŰAx| … ˄ƨ[ĺ ćąGľ5ÂŇŔŠu6†ŮňZ-ľ¸Çđc Ëń@ƒŹb¸'…F{FR°)X>ˆ†~KŠ`ąŕ ŤŕŠ(hŒa™`†JcT œ`$ < ďmš@Cĺ“ ŤK!ŘŚ†‰ŁX؈T8Űšcç;ď§ŇŠýCă5Űg•ęŒÔŔžˇŠ öą)B˜ŇÁFşŕs~ąJ$ÎŲ/DCZúnöĚ+ŢC(SĹë„z‘Ň㉠k*ĚE˛Š}ßsœ9/Ą†QV|XÍL=Ů. Đ)çAj”!Őô.uëň~„_;ÇIv|Ô,„~ ß퇰–TŕŻzFśšÚvôç<•§|Ďh%č+Vʐëűn•Ţs>Ń# çę@v~XçيŕZź8n DÇ čÂŽ) ‹ĚőËýă­ˇŢŇpřPö\ßąŽQ9p?ŽE?ăٌFá•X>Ň ž‹űřB PF;š§Ůţ`ÄŚ3!Ŕ„óŠ{ŢŁn#ŃýĐżéŁňŁéŻČOüĎ˙yýľ×Š5t/¤kĘ˙ť†š÷ Ƥđx+|ËsAŹŽ5˝ÇˆĎé7ć fČCěfŤí –ÓňáoúˆüÍżů7ĺ úäżŐ|ą˙Ë˙ňd}cOß-aÇŇp”ůTW=9”`oQÂůߖăK'ĺ|Ď’?đű˙ČĐ>ŔŕţŸţ˛üÜOţĺőW_qÝé÷ş•ţŽŁÄĆß݉‰IXh]‚KÓ`K“‹š÷—çJPZçR¤‘ę˜„Čú_–çsâól %ÜÝë…-ŕŰărňŇ%ůŽď˙S2ˇxbč}űČÝٲ-?÷ţŁ;îŕŇJÝaÁ5i;4tźžóŠs†Öév!Ţäą]énÍĺsň*Żäż*ŠĆ691&/ž˙Eů‘˙Ă÷ËŁ"{z…lŤ8ăqî"ěý8Ri ­Fŕ1ľ…ŕ…˛)kë[rőƆ´Çڤĺپޖ矽$ŸůŽĘůógœlvŽŕŰąnÁƒ3ú^ŕy5Vrp›ř›•;ŽÚĂd1ěžXëý̧ţŘ bĆÖŽěíwÔIgsc[6Öma_Ď]č’fÜZňgo˘<Róř ]CGno$rĺúžt0>a ;2źžĆúY9k¸!ˇ¤(–UúČß_ęąőg|ü”ăöö†kŰ†ŹŹxŻúéŠ9ő¨OŸró€lSٝs{/ ÖET̆ŕvČEř‹(6I´xůę˛,ž8+Ë×_•Ű×^uăą­|äŚĎ˙—UwŐďČéăKrů™ł˛¸8§:€TS,‘÷ážúN!vp˘‘;č(t”M…ş0ȰĎ>űʜ=ťS|‡ąk6Ť Š*˜b0­úÎ~ĎgŘçŐńÜV/P÷}Ýuj˙ň…říiϭ箉,Z8Qu÷ôl‡ó@´Šş$đŕKĄËmˇÇBŠY:މŹ!bxʤŒÔgy'ę‰ËîHĚ ×ăě^t/w–wŢÚ*"[`ܰ>gŚÄ@ÓÚ>i|šÉ=ň$#шF4˘w25ŹţçmŚ4y|Ó¸hDo=1 (l!Ł€ ÝďtewĎ+ƒ˛€×ţ2ĹAü˛Â;¨ žĐĂľšÄaV˝‘oĘ =Ϩá ׍Í-YvĆŔőŐ5U‚é‡qĚ>ĘUP…MřçäEŠ ŕ󘺥N¨šCŽ5Ţߍŕ€ˆ`€$°10mÍĽ mHĄÜ vlg' A †ń˘áŸ`‡=rżDŻZƒ2Ëcě¸[Aŕ dŕómۇ,Îe ’¨4°|śżaB”łžśTXĆQ1h(ścÉžáŮń! Ăöżš 0P€`ˇĺŰśđůq_° ÍŎŤm‡z˙´|>Đą6<3|ČĹ †Œ-„ÝŇЗŸ|çćÚËĎž?}z>”ŢvR™ƒvžÔ*ęÖQ<Żî•ěşśJOB  Ô=%¤‚‡'ç.˝>ľnIšćš‡°1čĹś‹÷p^Öí1wť‡°\źq/´Ŕ(âú@J&Œ">ŕ7~÷3?;ÚÍß °#šJ(:a$Q8Ďń¤A}žţy˝×cßćE9řÝzŽá~(™6őŔ}TpĄ.hž…ż˜ĂTF˘Ţœk(  ÔŰ*LˇŐŁŤ …§!шî–0żďűPŢűž÷ČĎýŰ˙ż|éK_*ÖĎÝR?ĂšÖ {g?´˝2JĂ$äôß$ö‚“NYđR݁łŠÝ>ö‰OČüáTęA`Ô_úŃż.zńSňKżúłrőĘUý>—*(L‰WÎB ĹiŔϞ7ň* OŻă>• *ĽuÜďąŢ“°°›'^Y›…0űjwLÄáŃ l  ôƒž˝ů đ ďőËO?/ßńÍ@žé›žéŔ>Ayç/]–?öţżČ?˙ŸäľŻ}ĹŸÖ+JĺňLȋh­’$¨—ƒĄźhWP;çĺ]ą]Áţ~*ÎáhÂĎrŔDCÝË4l“Órá™÷Čű?ů2żtRŇY@!˙żűžOËÓO_–_ý_CŽ^˝jR÷%ľĚĂëa)“­ŒÁ"––NČ_zZžő[žEĹ|çA‹0Ţíî쪁§ŕk^şše"DĽčg%ř4ŃW({x^şć2mMÚlť2š…şąş/›;šœ?ą/óSiüŢMgűyĄĆKF@K=ŔC4"I?@Ü~Úqü´3ĐžôŇózŢăëoĘúÚMYYkÉâŇqˇÇ ľ"­´*p˙řąśl­ŻÉĺ+˛ş>)3 sŇqĆáΈ´´0І#g—­ŕRiČýQŻŤc%ĺüńü‘oŁň9G’O=Ń>ÚŽ]SÎč+ůڀ|6`ÄťKŰjžČ=+ŢÉ4LOő+ nÜŮĎ€ěY86-ł3“rúô˘|úÓ–…™Ygč=Żç'îcZEđźt|˙Nž8ťaz‹ĘóA˜a—×VËg”Śţč+ˆ˘ăţPąĺĂö֞FŞ€S€kk[‰´Őnęů5>9އ´O‚Ěĺy}šěî'˛žÝ“Ű+ťîoUš|/œxż;Ź„fďçwL#Ĺ~ctxÍOOÎ:ýؖlmo89MAĽ*kťď[îo öŢHÝ×ţŁî@TœwV~ĄÓdČp^Ď&áü çbĐŁŐî9}ţ9wöž—Í•ˇdőöuŮCŠÄÝMĺ1oÜş#ËwÖäÄÉcrńÂIY<6Ż0A'ő¨éAœă^7ćöđ6v䃁Fv=xĎ뜎+ôˇŐGĆ ŠşËń”ŐđćŐşXG\Żaý0Ŕ“Ő´ĺA}ďöŽ{íl:ÝČž0wZîLÇ|ˆ鉤ľéoŤNwyĽLOMę"¸•}0ŘVťFůœąö„žćçr~ěěnk´ă›ˇŽ†4"ă291­ëĎŤŤ˜ĂŔů۰F4˘hD–Ž7gd:mËfŢ}hş…ŁΜłc ŇJďWşшž,zbJšÍÁK#ł÷övU‘ĺu-ƒön¨’Î Y!˜[aÄ{UĂÉÚ0ôD%xÜ/.“ă'–¤ßői`ˆƒ÷5 kPœů0Š0H—Ń pŒhhĚŁqĘDFDfäěŽA0†5x¤¸Š‰˘ňQ ­ôŇ& ÁűÉ4Š>,ÜÁăÁŹŃŸżąß­ň‡eá94“b`…5\–cšFVžˇeǞ˝1˛œéO™ÂçíslˆS‚AâH$’ăúŮÔŹS‘Ř(Źł-er b`­ŻiŘß8qťě÷6’IĄlŔ ÖPĎh4řS9èăPÔLŞ1k ([ĘPv|Xô–âwě´ŤŒx’WL–â9vbŻîžƒ”G%kČ'řƒ:§,ÜďsË{’yN΍¤âůëSYƒ=Ç$ęÄĘ{]’ônÁ, ő°é?đ ‚,ĐDw@Z|GpS|°Í>BPŤcüN ë†ß:Ąq„Q+ueŸ:uŞH7âs€{0öc>‹ű/AD@šĚ´8P,˜ď+7đžĹ˝ 1ÎMzőĄ *,9Ţ ľ‹zŁ(¤8у˘ç^xżžž,şŸőáďýöo˙”ž)Š^š‰Ę5u;auŮZ [¸'>{Š’KĹŽ-=?b;ƒ“Ýŕ÷wy.MÍÎËďůĚÔ×]Q^WĄťžäᑵß˝÷ůKú:ęŁŢ ôöŠh)>ď”ßs„÷ű¤;GqŽBŚë8)CĎ[1ůmiA Iôż™–|b´kƒÔtÇ}W•7V&dżł%łS ™™LjyĄzJ*k݃=rő„÷ Ńżíîudc{KŽ9žbaaZ>đÁ÷ÉÖ掼öĆ[ޏ#ˇnnËŧ.ÉĚÔ´ěl­KŻ›ËÔĸźôţ÷ĘÖÎśźöúUŮ\wrćm‘ůĹłšSžÝbşüÓ{¨ƒœK™‘|d¸ţ÷Źňš1g̟žž”şEËž–8DŽ}ˇ¤‰Š˘' @/R1ĚűTŒ"mM­7)§—feĆý˝|鏟řžKňÜłä̙EA¨ŻGńmŸ*˓ĘqăđĎŇQřŘXŸ0ě÷˜œ×W2@OAxitÓÝýťľš-;îďÎÎ~!4ţcjĚ|z-Š… "Ařˆ€{ű‰|íMÇăoŕ7'‡đŕÝRl0=:U,+ţlАÇÝ~791ŁŻ^żçŁZěnĘí•ůklĚŁ›ĐŤt¤Óë¸}f?xýťńnxgŒ/Ö)ŁńŐŽł<^żĂ(Пڧß#§/źÇŐiKVŽżědŔ۲ťuK׎/;=ښœ—nŞĄęţUş´´čŒx'ŐřăŰęęš ęAá rˆ¸Á|•0¨!œËBEľŔF°ˆÁÌŔöúƒ ĽźŚ*H•‚—YVüŮjiP'¨ NjĄ,ƒR#Qđ…ßłžŢ˜^/ЗĽ/DY3([;Ůž*óP˙Zp†őŔg=ăţâu6Ёý‚hĺ÷ÄÓĐ JĽo<>4óŻ*€ďhŘľ‘+â(4śŰH”BăvœĆÄΖA!žéj 0Ł7ż^tětŽ#rTfN …Ü{fş˜źBabbĚ)vœ`˘@a5yˆPĄţŽĺŇ-,TÖ;ÎFŸ)<ƒgŻdA1ăű ś1OXŔRź&bŠöúŁáĐWÂđŐšzat¨˘ĂŹęIäç5ačż$ěœăR¨/`âŁWÔłŠ˜Ł(3‡őÁ˝Ęaä źg*˘6ŕE@çŔcÔ°4A˝h\a(×á‚tP€¸óŕ,văâŋZ3č}Çţ`*žŕƒů[ń„{B]ń—Ď& ×0ÂuŽ€>7DŠÁw( Q6ć*ęú°#шę(‰ ¤ąoÎ#9čéÕÔńÍÏ ¨¨łŢćôqŇłšîyT€ƒƒÎŹáçôáČ ĘGĽú‘< őŽűĺÇežđÜŻ“S<ßžáw˝k[^îKŐŕŚÁÄ&ڃšçYÖA<­ ňŘľ)YŮěËÉcZLŔ8ćóĐFË ź”ĐŔä˝Ę˝ÜčĺŹfŤŠ<ŕúÚŽkSOfgŚÔ÷‘ozQV×ďȕ7oȞ3„ÎÍĚjY;{ęĎÎNËÜ쌼ôâ{|ä‹W_s÷ߒĺťrúĚyg Ÿ鎝~ۖF“iő(Ť(“-LUâŮö|/̓á¨-ŰŢфDÓd*Ŕ"D° œdůćňo)Ýáż`qŔsňˇGĄř0éŔÖ´éşM8 ű;ń}Žň,é;HCNXtĆërćô yęüiůŕ‹—œîbIĎ2?œSśwşŇ0€`xÔ[šz˜>˘ŇŢĂĆ/ŻťĆŽÉňo‘ÜkoŻŁt€'™BŁU JĹöž‚śÝg´˘=ÖRPES˝îBşĹźtL œŽ””ăĐľeŢ­ÇyˇÖśw2ůÂďŹČ斗UR€ÖóƒŰŔsťĽňDÉőÝ\ăﯳiĆźnE÷DţÎk˝@Y˝?Ș˝~7원)ĄĎpޞœˇşˇŁŕ Ô{fzNSŔť^ĺ_ĐŕŘäůAÝpPœ†o`ŸzćC˛pjKVo}CÖVîČöúŠĘBWŻş˝í֊wsň”›§K‹MŐô•ČÁŤŞŽVaJâą8j™,Łž*ĺ&‰FÖ=%> HÉŹšZíŕ[‡q–×äü,żW ó´˘ă0żUʲEĹó$ÖŠťîp*ŻGdY\XŠ"­†ŠŮjQ—ë‡Xǃ@cv˙Ť?ÄďůŒÉI¤.Öľˇˇżăt>{ĘŰ@GL˝…ŁÝ†ŹÜÎSł$yýäшF4˘=VŰô†zIύ–ďŸůˆ47ż _í^—=c×|(őÔJ–Ÿa[lNËď™xZ>3ó™HŰĹoI’ŒtÖ#z×Ó°€@œÁ3ÜDr)Oť őŕiłł'{É~ĹŤžô†ˇJšPZa¨çłýˆ†”ČU  FÚH‚RÉG¸@H×'Ž;ÁpI݃2̇šßu €ýź˘X0"txÁřÁßn\vsŽ•W$ţf#đşh0¸ŮE›)Ď*@mźůúmçQ8‘÷ü͖MĽA!Ô0"î×tŢ蟆1Őű1xĽyĹ8LĐBŠ‚O*-PÁm5r†>aC˙ĹQ2ě<ą†ýşń‰#Wđ3Ł=°žÚŘúŘz˛~TYE)ӂŘ#|f\/[üŚ‘-ŘĄčÓ^ż čHř˘‘υ@85ćó\"¤'>{ďŚq}Ĺé)č-Tb“b-rXŻ›ŇŃjŘ?6ľŠĽac0L௞ âoÄŮČ8ŕ[>뷝÷ő̊( şloóڰÇ+!ŞK`PŽ öG”ą‰”óÂŚ¨‘yZ×ţ¸ű|”űń\:  č€đÁ3Lc`•ŒJÁ>`š”‹ž#Đ Q1Ôá~C*”ßĄ>qâDyÂFź!@‚őg٨Ÿ­ ęMRę ś“/F  xĂŽ1Ôĺq=âZźGťź—ŘxäÂuGU hDďFJîâŰťżŚîŽ{¸ď!:9ŕÓ;Š’{úéÁV!š—'~Ď˝{om~˙=ĺ×F&Ď`A 4/#ŕŹäľ ëńŠqĺ•ĘčwĂXIb/ŇwÔň|™O%—xě[ˇg\íĘŇ|î {-g¤=Ɯ |.S÷˛cý üńěě¤ÜşyG6֑7ŢńmMÇwsM÷Á—^;+ŽÇŮ aĂĎ˝ˇß“Αs™œjČäDK^z?€]hŃĎödgËń“đÎß YV|_ć•öց,’pk^ů˝ěI)ŒČ(ťŸ3ŠˆOFV;źŁźSÂĚĚTřâ`Óěat/<ӽ퀨jî…㥿”ö¤NöĚĂ÷Ǐɥ‹gäüšărö̢\@ڜú€;žŽŠCVo˝%ۛŤęíő­[˛|gCÍ¨ÓŠózýQ)ĎëĎţ˝÷mŕŕ=§pnŻ33uŘ(|ďČ˝ÂčΞĽ×AÖ Íô0Ţł>TxÚžg›A>"„vš”ůNmJű‚1xrzJ•SS>„(˘S œ–*¨’ĘłcpëBĂşMýÁq# ud$ƒ˛oŤ 븟ď—âľwŘcŸ:dÉD Xß{ÍfŻ3ţE;ńŒŠíŸRůć‰}Â:ňuŒ çhŹp}Đ4LÁ€×… dqqQ×"40ú ۆöa×&ţa×5ž#ĺ€đ—9Ązŕ\păúőë:ńüăǏeáÝ, cŔč( ă„=Q/¸@™XE0…]wR|çŁ|ԙĚ2ŇGL…˛Qԝ9­ń˛€˜hD#шž$ęěwôÜ+yo\ˇźŸM“ą ů—Ú€ÔósOŁYlďl)ا)h đK$ŃËUţ)9SÇ{÷YŮLeĎąć'œz~J*Ŕט†óXŢâƒIôÎä%ç\›Ű˛rç–ăSM2>îxŢ|ͧ<É}j‘ą1„ńߕĺĺU™[ŮŽťo+‘šŮ1ŸżđŢËÎPęŒĚť ÇSlťű›Ú óÍi™‘ďĚË8ěĂƒh‘}5`SŽ"YÉ؁őďřxK凇MĂS…ŘńJîß1Xň”GŽň,?ż˝1Nŕ%/ž;!/Š.É0€Ňa?ľ S“ăôut_Y\œW€ĹŰE;9ĆÉíq×_s> éö†{mʘ3vśÇńbR ái•ţ¨ôK˜[V.śrYúŔĘçbę1LÍňžfŐ:y€ĐÔÉęSnŸ˜Ń=iPg>Š &ÜďÝÖ7WĽáÚŘV™Ţ§6Ŕ}śîEtHSĎ!]bݟœYńŠ™[\cÓÄĐ@kĐöš4ÖdÂôöś?ř|ŢÇçkÝĐ&řťe=eŘB$xůŔŽÜFżŤŕˆ$PbÄ ¨°Ńcb@—`ůdýÉYäZđŔý ČĂî=J™Őľ‘hj ý=ŸŻxÍč9—ŘfŠ˘]D÷ŕ÷L[ϐ˘Â5ÁĎu{b]˙ČŰsśçrpŔžF Á l;ڐÓn€YĂ︑'é`!€.˜˘‡m‡b¤ĺ¸zőŞţŽůzěŘ1˝÷‚P@¸žŠHP/6B ţjJ›¤@{mĎ ç4@řĎĆőôśE[`Hâu(ża•ŠmşZ/ŢToÁhD#шމD°(唘żG({ŚÜđ‘)ź1rŐÄř„F÷÷÷do×:ÖgŻH5÷{ŁáËđrâË$$e9“Lă *?…3•­n[zŤ™Ź9ďéc]™™lÉXUĺQQnCyę,ďš3O=oćć]ySrăƲ\ťú†´Ç§eŻsĚ'5b†FÓpu9wţ´,.íÉ+Ż\•×ßźé~_pźń’ŤŠ“EŔ‹¸ň5•\⁸ϡ Âľ#WŁčƒpúąń)‘ş!Ż˝&ćÉé1R„LM†z>$ĂÖAŇń§#z=ůŮC䑃u‡=ęŒuú×ͅ÷žçyůČűĎʥ˗äš3rúĂĚÍĎŤAšQŮ@ˆč9>ŢV}ž—&÷ćˇŕ¨m.:Ž.ýžNtşn.őĄGVV7Xąľ˝Ł,ţ×3" &ŽŚŐNć=ˇÎ}š…†“fÜk+FŘóçNi_€—˙ĘWž"oÝX—çž}N&ŚŽů=(/Ł Ţş˝Ľ4ŕBČţÉlŇëhœQwocEů/ôVc¸ŠMë՗ G’ŮŁ|Ď>‹ťČGŰďôŕmŘďěşţq}”!˘G@K^‚ 5>^ŚbDލ—)ʇAó''Ü^:­`‹Ý-'íHskݡqrZˊő Ź{"ŒÖq?äőOŘűgć–djĆÍÝcÇemů†FľX_˝Ą˛Úő{:ߎ]o˕kwäě™SrćÔbáI9ĐŇ{Ň>@J$čďâ–Hv?ĘysŘďJîPĺ•ŘŞ[`ȝ—>Zd/8ŻlčkggÓńS *ŇkÔPŽÔ>ça]+–ô™&rŔ"xĐFčTOáÚÖŮXwúśŚO›űtfˆ›çĎʈFz˜ ĄhD÷Nńš3l­BWL‡ż:˝ţŰM´7@—}ĂÁˆFônĄ'(EHVŤ\8ĽÂœ–eXFĄKpŚ˙Čş!÷oOżORIŔ+ą’"ţŇŘćוiő÷–×ĺďxł5crj˘0vÓoĆeĂ68ŞŐ2řqš4ÄŤw|Mš1ˆ€Ţ. ´—(6-5/rZřL+,fy^ Ž 1’ăÜ € kʇ€ŃD8S꣐˙Ě[zőT ýś˝lS\ž­KQ_M‚ďmä–ĂëéŠÎvĐkÝŘÇô;X,#iX‰M-‚{qŕqń~‚(řl84$ŹťHI–ąÄ<Ś”çßÝqrS?+z˛šąăřĺ-YšłĄ)@’†‰2hPšijĘTEPĘeÚí"ČFn=9ƒ­‹šJgŰÉŻ˝ś"[ůŽŰćC䉆|é+ŻĘÎ^WÚăÇ4JĹěLKn-o*O9/_íĘĘzŻĐy4“śăŐss!r˘YllÜq×efjNĐq)ÖçwRSý׉‚DňŔWOӞějʀžŰ× KĘC?"*äńɉqČř˝­Q€Ő`ş[‚Ţf½š <{ËŽ×ÖďČúÊśűR¤X9˙AQĽŹ@;§gŽÉÄäŹ,şŕö÷=•ĺn_ý†lmޖÝŽěîݖ•Ő šruV.ş=ôŹ[v_&Ĺ{ÓŁŚş!Ăę˙ëöá{\e?ż›rv_ĆőÝŮsúąŽ„őŘňŕ0GHŰŁëqÇéܚÜÜZWpćńÔôœŽÉ¸ÜXżş熻ű‰ß‹HRÉ!ëú€ŠvÜÉ´h|Yş[ŕΈF4˘číĽŘVA Úbä ŚpżzŔćˆčmĽ'`Áź–•ŻŽ¸Zóźo„,/˜{A8-4ŘĂó%WĺZ0ĆĂ8čŽëtˇŠÍĆ?zâłřÍFx€×<ŠŁ8ÄFŢş˛lýA6=jŞHng¨UDvHţ˛­šEM,¸‚cÂż|ŚUŢŇŘ­ÂLÇÄ Œ6`ÁŒ0`ű“ý`ű—Fb äˆŰGĐďĺ!Šz0˛Ę`D >ŰF `;,áłůŰÉrŘ?쯳gĎĘɓK27?ë„Ňqü `ˆ˜ŠšSůśTŽŇëżš žRUąl˙ Âۧ꩛÷uî—Źđ](ŕ+a•}Űݐň ~€P?•˘ĽŠţ$a„ ԘŕÜłë0ŽNAeű‡őáőv-Ůz˛ ö§ĆÔŮśÖ7Ăžcůˆ"AEúČ*j74=Ň^đš׾Ü@:„pŔ‹„{Ą4FšÖóőÚľkňňË/ë}˜ÇčW€möů™3g´nd ˛#Rŕ7\Ł#cp-BŮĘvaœq/ŽXÂî_'NœĐ˛P&ÚC~'u$ mäÜáYx)ůˆF4˘hDď@˛ź•OČ#ůtbřn1@ ÜŇMHĂORg¤G4Ŕ˝˛čŠ•˛™Đf#D•Ŕ ď)Ę2÷9őé áŃCt.>Bƒ>ßýˇ˝—ÉË77֕çĎJ­1ĎśÓSfꝫŘבˇÖĽˇžĘüâœ?6+űČ)ÇsŹËkoܒľ•UgĐӈožy]–o­ĘŠÓÇĺ…÷>/ďńyůň—żážż*7n\q}Ւ‹OKŁĺř‡~ÇŮrݍ˛­5ędú݃2Ëpü˜z3V5Tysô3Ó˘ďZ °H´gß~CQĚŰ>Hyâ¨Ŕ•<€'ę˜1ą)ű0˘T\”sçĎËĺK—diÉ˝Ý<œ˜lëkŽgE¨yđÉÓӓ…ţ öXŮÂm´ÄĂÚ7`ÄVýI_ĂÝC˛ˇ×єř‹ľ¸çd¨[7×du‘*6/Œ”‰Ž; ˘žu*Ag’ä>]kRŇLNŽ;ůuAŽ-ÎȝŰŽýkŇqźôäXŰÍŻqšy㖓ŢB Ÿ˜—ĽcSN.X•Ľă'eyůŽěíwĺ‹_ú˛líĽre9 €ićóŕXĐđŕ¤Đ(wá%ßíÎĘĆ檏ŽÝv†ÝU™œ€Œ2#í֘ŠĹZßd!’$Őqf_!ĆŢţŽ‚úýŽî9xŇ ŇÍÔÔŹî5ˆĘÁńŇW:Ü3ţ^çŻúű6"EúŃĐ͝-XháӇ¤‡Ę”wűěčh161ĺ^“29=ďôÇÜ|Y•ĺ7×íů+šžĺćţmšăöË×Ţź!Ď\:­Q-ŹȞ5Ă@ “bÝĹak1Ö)ŽÜÇɃßKăç&á1QOUčČzuȉűç(^-ˇććf3&hąąš&ëŤ Ŕ˜p2ýÜě˘^_çpň çp=eĘKhö9y˘íÂúßÝÝ.ôĂl?ÎÉéé)85‚ö ěЇ<ŠąŃăGöŹő“‡<‡G4˘Ý Y޸ÜgŻăotL1˝řŰ ´@],°ÂÚl˝ŁŒöŞ=ôäD°ČŤLlÜ;hÁÚč–ôxäéPďłĚý–σŕ!°˝˝ë˝ÉĺfčĂÚű0“>•ˆ÷źŇœş"E _5şúýŽz)0Eźąň|0ʃ5¸Ć›vŠěĘú†íçď6˝…˝6 Ćdg)¤ň^Ű?řŒúBYČH čƒj˙Ň{ŤLˁž˛) lű@ŒžŔö\áIQŽU–ÚĎc#0"„Gż7‹~c |ąC[řL*‚q/ʲŠ?l?3š Ç׌JĄ’—ýĆ~Ćwč6h&¸¤H€€Ä÷ĐSßŰČ6- ćć!ڇ¨§NR/”|ѐ´‘ĺxa<żŠ6„žA™šŇĘt& 'g•öóţęZM+ @˙{VË|pLâč(BiR§-ۜ¨˘t2<(›ĐœŰYHąBFÄub… Ża›8Gm?ŮzYĽƒU6~°ý3LÁpŻ}Ú Á˙ć͛Ĺ: ýĂů `€xąœŰˇoëÜÄ5 Pkë óe˛_Ź`T‹÷ž÷˝ ŒŔ˝(Ŕ ŰĎ´č€Ď¸†}ƒgtÁëöŔ×â=÷AŹ+܇şÚńaČsÔíG°ˇŕwź•E|ŽŚß™ŐĎX'ŸÜď<шF4˘čqĽ˜§) ¨ĘS3Ę`Ů‚2<ŕB ďÔTP"W0•řđ ŕŰăTj$ňÎäżÚ-ǃujÖÔ=Ÿž#uĆ\Ř|űYHcçţŽďśä o4嚼ŐôY'z9Š-§OŸ”çžż,ǏŸP' F’/ €Q–wCÂc…|T^˛ŕee(qPVg”]‘ŞcŻÓ•­M;:G`  âÎíušykUuHăysˇÖ‰‚'$Ż‘9‹~™oÉŇâŹ,˜W€ CĐ]Ź.oČ­ĺU•5ڧÜoS'5Š` ~c×]ˇĺĘľ5yýő7e{/‘^>.żóşwhđ)„ Ł!E,Rú…ögő6kďÉ7!ǝᳳżçä‡5ô€×¸‚ćÝď“aL™ÎC ů{•ĘĘyWĺ]č„`Dž^𮍦ö yşN)mu?–Ä|ö)F2?żääŹcĄŤ˛|űZ0h/g‚2m˘ÜósI–ݞVvŔbvnAΜ9+[ŻEV^űš\Ő¨œ=šukY–—o;™íšźđüy9súTĄáźŹ%ĺR:ž„9Řľkë{XÝfŰ•QÄî)Ý"Ülęš>l/ő{QZ¤´A÷!Ş"ÍŹŽŢÖ҇ĚLűôĄÔyńއ)wÄÉz+Ŕ,萐’§G­íx@˘ ¨ŇŒQљMChbb˘}D%1MíˆF4˘Ç‡ě™uTpĽĺő ŰĆëq˘ř>ę9D[ȈFô¤ĐÁâŢsŮô"ƌëf”BýŇӞ›Łˆ”ĘźŘ#\ ëNq°ż×•}éĘÎśG™1ŻeňhŽľŠ(řď)n”Ŕ^°Žn\|vÁ›d˝=ŹŔk^AYő ąŠő6ÉłŠÁ×F>°]Fﰆc ,ü>1‘8Ęe™6íEŹ(`˝™Ć‚yF›ÁH !‰¤™‚ő&‚` zĐłlF˘`ú [WMů˛×ă{”G#ŽjĎ6ýˆŽ{Ąˆę…hĽŕßív8§dtCŘ_\Ĺ ŰÇ~$ ‚ĆkĐÔÔ¤3ösJ‘Y9~â¸S8ĚkY@‚=̋Om’9Ĺąj…Ô,iŁł”Á6[HžWč~.¤•rů[RśN˙P„ú#0ňŢ"j Ö7rłż!ÄLOĎD§×ěŃO@ü3,*ˆž–ÖoP÷XĹ)_vžĆkÜF×a}†őáý’GDt`{ń(óL"ŁŢŕ…Ô@و׍7*-Ě70h(Á:â _ř‚>ëŮgŸŐr‚‘(Đçč3‰pŔ,›}ĺ>žÍ=H'î(ŹŠ–k <e“PŔh#ĘFşöGŮô¤ĺÚ@ý¸ŕţâC8'8`‘‘ÂdD#шFô¤R]šPœĆÇi–ĺ…Q^ëS1㠊—6 ŠźlEŔ$ÎÜń‰ń OkËąçžrŽźf ęLyqt'蝕6ŕůżs}JŽMőäé3 aŘgĘÄóp5’f0ĂřźťíxŠiyĎ35RÖoŢpϞ•—_˝%c­[rl~‰œąˇ-sÇښ>áÍkë˛0ˇä GŤrëĆşœ95/O_ž,—/=%o][•;+ëj Îáéžř•ް—iێbÜťŤq4ő~Ď(ÍrŠDb 0Ćöşhb ‹1é:šůaąHî‡Ĺ}ŔőŠçˇKƒŤOLjô—Můîo}|ř/(Oř­ßú­I!I2iľ}úáŸs "6PÇQ,âśÄí˘ÁŻhŒ”ĆŢaFY>Ç"óŹŃŸ ^ců|–ŘvÄ ŽrN ƒ3„%ŤX"Ŕ€őŚÂÂF.Ą!›u#QIČSr€h€¸!­°.q:(‘/ŃçF•° \ßWdëĄ„atŠRх‹ĎĂ*úY(ž ”Á /{x.!'/@͖O ’„ÖY˘ŠnŠńČĽ2v|q>ŒOó‡r|4drR؃˛JuieÎýoěý°$Yv^÷Đ_˙Ô:Kktwľ–h,-€&B41ŕb%fĚśFĐ8´…ÍblhFŽ‘fŘY.8ĂአTC°ŃX4€ÖÝ@˒]U)*ućץ…ťď;÷ůużţžÇϟ™•UYŮ~Ť"#~„űó§ßť÷žwŽk\OŻóśőWů^ňá*˘‘:)˛[#§Ĺń}‚X×0˘LâđeŘ:ú-“‚Ë aj‚ B€âÉŁÄÖeV=Üp!RŚź!ރ"oŽĐ}ôf74y駀Ąt Á ‚°?@ńČB„ô€“džCęŹćBgΜáďßôŚ71€m$\+÷!i"hWŐű˝˜ńn…Ť`98ßJšš”ÝS‡Ź(Ý׳ŕé;ÚNcŻßÎfáöçizônÄ˝—ífmšůifn‰&źwˇX‡šrľÇl$"Ą2˝2—-Jęľh˃l—âŕ@vRE”ů Ós¤)[3˜÷!ŰĹ"c91źJď]{ŠĆŚAěSU Lż43†äÉ’Č{ÖŘH™ßľh°C^(7¤†=1ą;qČRň,1ä9•őťűYŸl“6Ľ.NF„Ć *=Ä•8P┖ëd!u­ÖÂN!á4$Ÿ–ŚoœœŞGy´3U§§YL„U@B` ]Ű6^Âŕ0™¤'V†ĂqŚ}­â–"úʃ:R, evŢă™QHTěÝť— ÇUPŹňCŹľ'1Ÿ†1ěŔ÷Htűk@…ôK͈` iiýĺľé4ÉäôoQĚřân.4€ l)ƒ×4ń”ĄŠë8ŠĐŇďřÄDĽ !ÂÖ ‹ůH:Ňw4;…üŚĂťHž…)ÇŢ+†:Ě;)łŠäO×ĄŻqç<šFח|w3ŔŠ1ŘęçăY¨7ÔŒÂBs…€),@Ȃ˜:°7’N–ŕIáDŇóĎ?Ď×Áy˛˙~ţŒö‚ŕ:×?ŕo çaŮHFIýá7Œ!aëÎÚe䏒.ĘŁl qu°¤!q>Œ&xžĚä@ˆ„AZ’6ŇD= ëEąé,¤Bît‘ůTĺeíË[‡ Ů˝HĘâVEďô^Jö2ý›ŰśŻ´ČlŔ‰4´†—ŃUÄáJř4ďYÇëpm\cŠđÍÍ  73ěě•kě~{œ”Y—;ӟáŒ˝Ż,NöTćŐ§Ŕ8qŤtx_…ďő¨QͲĽĺ˛ĎК}BËěqÖ×7 QˇśF&_=zŕžăÔ6Fňk+mSžŞ§ě°ßĄŃ8 ů…Yz˛Ÿ`§őłĎ˝DW.˝Ěě89?š݄ş1x}ƞôśŕ?ţp¨Ďz…šQCžŰOP‡.ëŢôűb§t|I­^ĽFÓxÎÖڙý­[_ˇ" ,ŔËqęÓůőěkˇ,Ž>îîËŃöď]0{I„UŹĐ˝÷Ąź˙IÚłŽßCIxJě1îeOˆż™Šb~Î:ôœńë`xĽ%đTńéňńhÂc ŠNŻĎŒî€ÁB˝ŢĐôéŽŮߊdœÚ՚qĆ7k™z‘úĐuS.—¨Ę×Wšö,śhqa6a°şw<ĀŤąЧ^ˇO—Żői~n/Ž]kӅUŸ:CËvƒ[YŸňÂ5ń\â3¤ÄüIOÉ”Ůîó-˧=°1fƒqڃp˘–üíY>Ŕ!4ęŁŰkó ś 0?ŔůÚjÎ1+ Âä„;´[žÝGëŕňüîÚRÜďäţëÎíňÜřłž2d<„™ŸM9Je„Ůgôľą)ŰƒŮÖÖŻ1ťČL­EŐć yh[c˰}WćpóXv GÔ4v†ŮŃEŚNA—Ű:Mű†Ô.ľhlę Ÿ Íú›ů‡éLcŸQŚÜŚ7ćÓá€Ňă´¸˙^꬞ĄľŐŤěDőˇxÎ>sn•.]íĐÁ{čؑ´¸8gÚ§úš:#ˇY™ o"ÚӝłăoiH䕲ŔvÔîôĚÜłď]¸x•^xé 9s._Ya քąB6 3ŘŠJľŇuŸy˝ňJ9Ürԇp70Ž‚‰e48ŹÇó2öĺ˜Č.’q˜Ĺ!#Ř&e.@_łs„]{mŘ2ňCÂÇşöŤŰ5gr÷‹ťO›Ö™™;+œ@!…|+ËÍčѡS˙~­ë#löĐ+?×öPH!Ż7škâŔ§ş|§YÚů˜gT‰Ś€nvł+FíMŸë“=Ádő&ž€gŸĐÝéĚ×sNç*t]ä9ĄÝôô3˛ÝöşĐNuš_;á4Ő×@4pešńIŒČ6ĄŐ/ő)kP m¨˛›Š—e[ĹéčAęy“ş°‰N‘‰ƒ*§Ż0!Ě :˙ŢCęWŇŇÎvŰ7ŁčaËHl@rŸSIňY kZ'.ŕŹĹg8]qâ]Bxž({Ův#1.ÇuIĂiŸR)ś™xIżg˛ô_yi@ŠÄWÎ#×[§}Ü{ľĄ(Š(÷÷ě5;Ÿ Čť×ĂFN Ȋ°iç1€ŒGT3ĆŽRĽœY\CŻ&ôi=Í űźÎ‡Ď śgź¤hcžjčüťuĽ™ZŽ'2ćEWv“ž›Ÿź<˘~ĐW! äAž…Ÿ¤Ŕ ăMŔZ€đężŸ>}šżťçž{čĐĄC\ ŒĐŹú”ÚďŘĐIlJŠŒ{|‡<Ę\‰çƒuŸú@úgŕ~‹HČa9Áľ<6˝”q×Kř'|ż1†q­4d΀ . ƒK!…ňzYť0O XSĄŠóîEćŹ ¨ĂW*h@­ sVÉäávˇ™ěA]GŤÝ QrşŘžG™0„ĽĘ>]ŸöN÷X~âČł!Ě:Ýĺţš5Y3关ŁÎfŠ40ÔғGńNď&ܗCŢ?ËÚ/űg8b*pˆ{v¸Ö5úIgąŇň\EąYČ~Ž˙e§,ňwâřaN÷ěŮËtńâŠŮƒŔ9;C>v]šşaôăœöşĆA UŸçghiaŢýÎ7ÇT‡ž}îÚ\żdœÚŘ2Îű`Ň7Îâ‰jC{BœĂĺ>m7Đď$ŰŻävźĂФĂ<ć§!Ďśm ‡XxŸČH†|Gŕ­öĹČ)Cžěöśˆâ˙´¸q…ŃO更wyÇ×ŇŇ<˝˙]ÓńcGüsď˝Gřô1œüˇzIBűWfŸďOg“źY‰SŰVď։R ‚ÁȂŃ{Ć!šŐcE§Ű§vŰ|6ůŢÜěňďfóؚiؔôoCč´! \ŽůÜţósč× vDŠcÓę tăŮtFƒ‰yöȆŰŰĐĺŐ>]žşNś ?ŇîXšfĂŘŞ š…=2ůĚŘD˙ŠźŘŠ.ě7>QšOm3€@“ľMÚÄçĂej–›ćY5fŚpűŇě̿ƓĎCpä‚Ő˘jćĄœšZ”+SGę’§çŮtÜĂ ň›>(°cŸq_fŇ0ůńJÜobÎNSîÍĎ.Ҝ)gÔçPSÖĐźŐşi‹UĄ+ƒ­ŐÔC=ĐÁáŐŁ1Ü*ƒ6lĐąŢ9şŇX˘^e†FfŽţüěăôÍĆ!ęVghbęśnÚ*đL0† Ua' ö“……7Б{‰őÍ+ߤՕk4čŽóşzć,űŤtp˙2>´ĎŒË9Îßözyĺt1›śŻS› ˘N9ÝJČŁŃíotÎĹ}X_ĄŰŽmti}łgĆc›Á/ŸťD§Nă+ë[XŐc)Ÿ ÄC›†aŹPe'!ěÎőž9-ŸŰí°ůě›xÎŇâ>JőL_E(v{“l(’šą ŐylÚMĆA4$öBÜcí}ž?Şľ ƒ7kľ§ ›’°żz>e쪎-ŚŘ#r3˘Á–2ß#źmľZáW!…rg‹ťNÝ­kĘ5ôŮŻ},ˇr¸˝Bîškn(1ŇiÇŚV$óœźÚYŤOźZžŃYK”x'˛lŒ°đ,ÚŮläĄÚÓcDć\עAn™óŒWîwESËä~/ςrĽcŠÎť-íX´ň‰†E™SkČžiˆq íŽgš ’„ń"žGŘ4Ü0$ЁˆƒS ţušÄYŒňšu.ýG׾5;ň<‚űqŘÝćÍRŸÚ8’u.GŻzƒOďŔ;7;çœĘŠĽƒóó{ÚŚúqٸľ–FUNÔx~öCęĘ*ŠAz$˘,ýМđń2m×ţÓÄMëGyăsÚÂ+mź- ó…5š%Ćń‰e¨Ř—ÂĆÁÎßĆżDŔ˜9 ƒ\…\>ë9Ă1źI¸šŢöAŇä4ži x”°;čôݲë9Kú¸;v§ÍsɘĚ1Ěި씆äu ĂčYaɧfĚA ŠQH!…r§‰^óeM‘ĐK27f‚Sö…źşâ[Ńh/Ů˙bMÂú$ÇWJÚI\CRvď‚üj…?ńߊ#ŰËŐ+Ŕ°§JöżAŻ5?öaŇëaď&“R|şŽLŃÇ6öęĽrrN¤ňž€Ô>(ʖiŤçQgŕÓ`Ńžš‘q˘–Ůń’î(Ţ÷Œim}Ăě=“gŠÉ§ŕťóÝÚŔ\ßg‡Mo`÷ë72mumľM[1-/ˇ¨ŐlŃ;ŢţFsý&>{‰˝MŁč/r(ىe˛°őäŃ"ňâ¨yôĘ´m$á ƒEŢţ•÷e (#ýžŢ¨QłYˇ`pĘ×5n÷ÜĄ_ Ó7VbűW”Ő¤Ü ółt˙˝‡ŒS˝EOňeĆôşRÔŁYă,…e{˜ ,Ş3­EČmđ÷†ÝXŰa~JAÔâ6,Šą´“gÜ8˙+ö>0Ó =Ëö°qŐ|× F˝i˛ c”iWŸru7­şí/ßMëť™ŰÝß3ş|XĘÎ#‘eĘń㐭FӔ§AÓÎ(ç¤ÓŁFç*=QéWnšŰ†Ôœtčđpƒ&ŚVŞ ä™ůľß˜§/ˇčŮŮ{iŁśŔś ˙RŽđż )â!řQś!ŤyQi*`:ŮÜܛiaßm\{™ÖV.SżłfAűg/ЕkëĚ*sđŕÚť<—h|eć[çtŰd7cÚ^L÷ŻÝÎ!Đm1Ż^˝Fë›}ę˜9bks“V×VéüĽ şxyƒ™ízύŘ[ř6‘ŮpYŠŞv˙aúLŁ1ĂăĄ^7ëŰĚâuó1­/ßčţóĎÜě÷ááşű&Űđzý÷q„÷Az° Y_Ä ĐO¤ZŽeŇÜÍvť÷X…Ü˝’:(KdŮpý° űÂEkŕt!…r牶ëßú^ţΰX­­­'Ló2_k`!ŻwšŤ.0ÂE+‹‚Ź wŽŃÂýíVÄU¸ežs9U‚)vˆ[ĂNWA„Š.O9֢ӗ—K!énô]$wĆŔE;>K—˘OÇo+#eC~Da‡y6€ôŮéŁwjPRŠńSŒÄâœÔeăkăghŕ…ԏ8䄻8Z]f 9ůŽŮ+4Ӏe@$„„ą)—=6(ľZM6žĄ}‘Ÿč¨Ză^z#lËŻŔQ¤â?Gl(őź´íĺD/XPK–7Ó÷˛Ć. Śmë#I?Ą¤@ęÝíÓÉ/Ţδ´şM3÷îЧuŸtďŮţ,5Ţă0`Ś@{HŘÝöXÔѨkŽ/Jű°¤#{ÝÇBu˘Qň.íoŸ9N^’ž…ç O!Ć´ĚGہ!ÓÜJż“źÉDň%éîŚîôťfÄŘŠ­ňd§ëő3ÜšçäɓtřđaFŇK?ĂC?GýKhYHŐ_ŚnĐ”s˝Y%“"˛Œî„^çœÔĚôES÷óyŇhÜÜČ|÷ĘöżX‡ÚéŠ)? Ř?ďg‰* ŔÝ7>v‚––ißžE:qü=öđIłďkŃŢ=‹ýCƒ*𽄫ŰŮ!cBë†éóoEp?ÇDb6żŃ„í­ŽŮ{isŁC[f>`‹‰éƒ6ë(ŚO–*é‰{„|đ¤Îâđ”U€ÍmÜjŐăĎuÖ}+äOľĂ Á6ÓƉř>­oŹ›}ű˝tiÂz]ťЇošvĐÚqPE•ëĽ\Žňw[}äăÇäŐüV1ş/ Qeú݄)Š'a™Šý)2i›yaݔYô/œ.1¸Ęś[•Á‰‘BŮ]ÂLM­k[áqřÉy>T@GŻß3úĆşąm´ůÄń}K\ó$ţ˘€Ě `‡‹ëÎÝÇp}E>;`}J˘ >ľ\#ë¤ŢÎzńJËNóĐ6W@ âSż‡îv˙=éţűŽ1 ŕůwźĺ1ÓófOŘŕwěű°g@ŽÖ\S^9w,{D×u(^Oý‡$'̌Ň3ăŚŰîq¨5ă8ŔŐđĽŔ7F¤J‰Ăaxۀó阅z ýwvŽEM°“@ÓŹ3S Ŕśl^áP—ńƒ>ƒ}óşyţ^]zůj@[– Î/?@aÉä§K“Ńeswߌ›ˆśě^’‡Ř+™üÍô˙źVőůű˛y~­â™<ő̘1ăÝ8ík„¸0{ôŚƒCl[ ŠiFŒ°ŮIý[’°ˆěśęÝ6Â\„ńѐç"°Z TŔ ăp†łYƒýľäŮdôÜăΙś6ŽĎ^Ă`1¤tŐ/f<ӟ#čŸÄሆz°Ž–Ć[\'s“.î^ĄçZ÷Еúő[s´9sž^jŇĽĘ Áđ×ďĐl"˘zŘŁZË<ˇÚH[ ‰dJŁřK3Ď@gřĘĆŽ^@=Î/î5s(€‡h}ĺ ­]=M­uÖÁÎĆvŒçĺĽy:|p?í7ăť^ŻŇ­ Ű%Ž“Çl˙¸> őzc>dós\şşEgϞ§ —×YďÝ2sĂÚúŚyuhłÝa‚űŹ„UނlażDKKűiv~jőSTj foeÖŢŘů+P65đź~ťŰ"yÓYz]ű(Bö\51ă{Ě CôË1Ăl3™ˇ‘W Â%áKQ/XŘ0WÍííáeóG™9ÓÉű”śÜ­o]qűľŹŁQČv'ěéąÁĄŚ‚ŠżBî\šÝúök!˜`Űŕ ŕŠ”ů-aŕn,{!ß:r×,$ĆłëÍ çXԌ :٘܌hĺv{Č/fÉ´!B„ž6ŠOAÉŁY8ô k׸čöň(™ÝşqËĽcˆnKŸhۉ ]NGź B?CłH䵉6ŔĺĺOÚHň‰“Qâ|'6ž×u.żi†´łœ˛ÔôľFBč­ĄTAq ‚äMśRN\C) e˛yĹßrňĽŃÜÎB ő˛íŻ ňRU­’×[&}*N†‘ööeOĆQ˜‰9Ě/|Va+Ü6uAFŽ‚ŞŰîFŋ]yéMë#bĐŕ1ţKű€˛Öbĺa*¨/Ÿ ššAŇÔăŒřŚL%äg™`Üëeźał  }!Ą?ŚŐÝö:IűB٘ŸŐ¤Ź:Ԉ Ňď5@ɝűtřŒmFîëäďzFźkô ŔÁŢ˝{žŕšKKK ˜@?đY˜„ U”ďÁ¤ăǏ'ĎÁ˝HČÜ(a:¤ţ%䇄`ÁóqOϲv ^0fQßz.ŔýŢeAúüŔőˆŘJÚ F]řNBČ\‡çü! .É7ŇŐábP𠧐B )äN˝NMŰ?ěf-,äÎŃ9°Ë “Ű-‘‹ÓgűS¸iĂ%pX!ŻA8Ą$ˆęg6ä˘q””ęŠăn8߆cäç°p5âÂvŒAÚłĄú#ž~wż“ý‡#đź P^;=ă\ë]iBÔŞ čđžr´e÷;3űý †Ř?”čŕž˝,G´ą°D‰AQTĄă‡÷ĐÉÇéÔŮKtîÂ*]ź„xŰ 4‰Mš&T)#ŽüĆŒ<‡:?`%EeşçŐő$ŠR]jgAf°aˇthœ‡^@'O4űŘ9:yě8v„Ů°ßƒƒmss#Ń%ěƑ´ľMÔ:ŻÝgߐne•ôş!H‚IČ`ôAĚLýqŚ^ۤͭ­˜˝ç`>Řcņȑ°bCIë‹C^šŠbĆÔĎÂ|‹f™ąŻ^ŤrHŘJhžÎ-s΄^ž¸ÎzöŇk[ŚĎ›ąR zf<ö¸ßwÂ3 Ż˜;öQľ~”ĘĽesď–éçM]4Q"™'Đh64ß$OEdĂ !ečˆŐ:ł<Žhaev¨˛-ČĚ%ς‘Ŕţ8W iŽŽP)cÖ˝Çcó,ŻL=o(Ňc|w,¨.@KNĺFŁĚ` ô#„(čőŔdłJUfţ›aýCŰ52ÝÁ›Ž_ť@[;ƒ,ôܕQŇOÜ-=-`‡šxţzé"˝tá2]şr%с{fŽŘ0sBˇ7J›îô,ŚĚ.Đěü>j™ž:úŽ[ű˘ĹĽ=f>Šrˆeí";nĽněX˛U…4ol˛˜Œh›Í"lkü÷y~;Â~YŁŐœ3Ÿ˝P† Î[ hĂ †™†™p˜áolČąŽ™Wś,#mc&fŕpęgĘâVě šĽ|–ţŕŔư‡ĄĎc/{ľe]ŠQ!…ňęJž~›ŻóžžE|j˛—CËľZ•ťž™Ü}N!…źŽäŽXx”JÂX ňŔÚA qHaĹH7(•L(­tĘ}.[ƒvgŸAqZÖ¨ˆS Ö f€ŽNŒžşŹR>\#FnýlqÂJy4€C*DäyĽŔ‚LŮŹ'Ű1 ”śJôéti'1fz”T58#y–ŞKP 㸨n¸ l$ĺŮRŸâ˜—vŔ †{˛E€“¤-őiL„ń˜™™ĽĽĺ6p̘ j˝Zły0Š˜(řá—*ahĂf„=ҋ 10°‘Í+%ĺ¨Ŕ!ÍßŇśű¸,čŁ ¤ô™(ŠOÔPúž#;Ą—§9ĚĽ\qűĆNéć-œyFŚL_$bŒ‚h,Ö0„ăoËbĹ×ËŞ6nŚý™8Öľîx A??ť^lČńí wĂ#ăO>Ăˆ<€UABFä•%1f]g•€°§'*‰“_úˆ ¨pç0=Ž]#Ăn €×=żę<ˆąBŘ( Ě!ĎB &sʀk4ł6b`­@HŒW™§ńęZźŚŽżÜnÇŐ RŕůË"i‚=Cińcî" ™'öíۗ-Ş€S°fČ<$'‘$¤~„aĘ,Ž•Óř ÚFô#œŇýéŕˇówنťB šťdÂńęí|™ç€v?ß}˛Ói°)ˇGđv›XçăN† ˝‡Ć;ÖŽ[•i{w_d÷4Óó…uq2Ć!îŔ’ !@lˆ2ŔĚńžÜ÷ O”2{ŰK%/“ž}žĎÎżŢâ![í5>=řď3­šźmŸeăĺ$$‰¤™hĺJœ˜zOčq—č |ęKÔy´4oöseŞ–łĄčŕSę÷ş|i…͆I‡,[Ţ֖ ™püřAzđ‘“ôŔC'é…ç^¤łŽŃĘŐ•LöíÝcô8QËÓŹ1ÓGdYĺňęYÄťÁý$“@řˆuZŤ2g™ŰěÚ GÄ{y€,Ź3͆ZHó',Ä`&Éyţ6­'Ňc!$î˝ň¤ˆ÷łŘ[3ʇęF?_˜­ÓO*ލŮh™6ëS§˝EëkWM?ŤĐĚěŒů~>aŃKôëHĆ@¤lCfzƆĹä>vţŠâ÷2ú:Ŕ fĚâ@rRŽše¸˘ôŒé@Ţąţ-vN{Äl`ć3Î?ľç1şÔ\fĐ @`ƒJ“zŐŚšJ€D  Ż(îŤh‡Zٲ$P2Ď2SJť˝NÝţ&á[ÍYvVŁ>¸ž<[>üďG–Ľ“ť"‡KľóžÔ—> ”VŰ>ťD™š[X˘śéĎž@›—M[O¨Ýërř–+׎Ҟ=KtâžĂ´o˙^K0Wř´č Ă(*ŃŘÔs9œÎ$ŤeÇ}S´3˜DlÉzâ[°á،‰óŽŇ ßuŮ(Ă őcŒ‡Ě˘(;\Ü| 6˛Ř(6`ššĄĚĄ=ęFwž[ŢOsłËlťBx-Y‡Ź '‹éż}ÓśƒËW¸­›M̟M‡!ƒěÄĐE”ł=JťQ”´!Ö^k#Ó /7L1ÂU™)Ĺ*ŹÝˆ™f˕ÄĆö$„9Bůp@Glw鼜ł„ ×°ÝŻRâB-3żŔ~hHŹSŻ;ŕţ‹yżY‡-›ç´Sޚ›ˇčöĚťˇo]ɂŠýÄFnödťWí÷‡źđźőĖ•ŚÁ˙R!…RȍŠ^Ż´RÂv–JöËh†p­]ĎGRH!wşÜ5‹ > ‡•Yh:Nˆ#^ˇv¸ xÁEUéÓĆr:]‹6ŠAôIs˝ÉáS ‡tś2 8 4t. ‚ÎŁLRúĄv*K^4Aň‘çTg¨—ݨ%J|ÎŚ_ňŕŇ  PA‡J0€.ŤŚ‘•ű´S^Ţhâ‚PÜp/RvÝuÄmt`ŕŃ÷ăűůůY:zô(Ÿ˜GH‹ś+3đÁÖqśî]IŰüWćZ[iű4cÚO>ećKßĂm˜”SœűşOídŒťâ†qËť“˘çćŃÍŻü-iňcȧŹz}ŤŁěpĆŁěŠŕŽa=6J%?ăř×ý8Ť€gY\ř{Jî€„î€Ă?ď”gĆč5ĽĚÓęIƒ%ôćCÂfčß4Ŕ"ĂČĄ˜od< °A—wšÓăzyÔď:Ďţ u#í„w<_ę.91‡ĺ@[Ł|V\ž|™Á2<ňwĐOtXŽ.nj$!b$” Ę ž‰ďđÂýş 88˜Ň@%ŻŇđ;Ú_€08y‡úŔőŢž×m†ß'9MÁ\%Ě0]ƓB )äN—bžJ:Ż˝\?/yŔóänľ†_ď´í-K´ýDŻŢŰKH.÷´śŽátócG0ƒ–c`ł=™í'ÎmH P—“ĎŠHžku˜ŠŃö˜}C—O0ĂŮv:P€GĄÇƢ.Đ(­ĺ<˝Ę-iG>Ř6<cŒűő†%ăŘŃţ%ŸZľ ;źXG€z…œ ŽÁŤk8§O_0ÎÖ---ĐŁOÜO>ţ =ýĚótöĺËŒghvnÎÜťĄ\:n¸=ŃQ${řˆC÷Éw×ŰúâgěůrŐnś4]ÖÚÉ!ÓŰa\ˆ_`‚š™=xĎ1:yâ0?zŢđÄ#TŤ—Í~p‡0)—K ž°Î ž•°ÂV†–éaˇz™;zśd˘ˇۅçےI÷7čŐ˘%˛zK§Ýă~‚öš>śąŃŚUĐűŻľisŤË×Vj֞QŽXýá:Ü|šcmľź4GöÎŘpwĺRZOú§Öš%콯\Ű2ŻMŢĎ´ü͋Œ1:UyŽJU€™ ż›N‡oô“֍Ѩf•ƒ—ŒcwŽV7ŤÔżH3 ÷QköóÝŁ+źhœźç¨ŢăÜа …ŚÎžbí:>°ó@hĆľ7´ÎytŸ …šĂčÉÔö8Ňx„?1y1:§šöňÚв&˜DÚŁUóhŽję}˛JŁIß\?f VŻr„|8Wc‡ÂóMŰ  8Š)ő o[°!,´Ă˛ŚTš‹ÔlĚRЧvgVQwĽ5j5ţ3łœDf`MOnüąSŸprĐł˜ŞŠWá2DœÁCžÓŔ.Ŕ˜!sÍd“žl?GoŢz‘,(Ěč9á˜Ęјž<ó }uţ +óćÂUÍ=Ăň,ĆźE6ç ¨‘śWúfDYG¸ô|Ś0ť6laœňÝ-ßŕ5 đĂě";ľóĆŽ |$ƒÇşuŔŰ5€A"1xj'ÁőYԛs4ˇx€úí Z[9G+W_fveÎ]şB—Ž­Ňňâ<=üđ˝Ěhą3ŽľƂȎkςk<ßť=ťĎ2uŒžzĺę˝lփçŸ?MĎ<{Š^>{‰&AƒŕĆü™Y‘bđ`)nˇ’ž…hUć*­Ů%j´f¨jlWÍŮy>!?¨Ůšľe‡őtŕ­Ö<ŻgmłńĄÓŮâś+ËěĚ|Âľ]˘x ńâľŃç)[˘Ř8úý.‡ŘÁŢAŰp0NZ­šä°BUé~hŤ.k§•<ČłtČô.ö'<T K×ŘŔlŰ~Ăúf͖x˘Ÿé–IžßÍ>Ě^_Ř žUĹľ3jۧýŽÂ éZĹk\Ç˙ú\!…r˘—Ś~”R•úâňŚzÝ+¤×ŁÜ=‹T—2vŚkmôP„frG›ëDŐÎ}IKhî…:W#°4ŤD#4Š+śäÚ)ę* Ú,kÉۄk Dło䥑珃Ţ%ŒŠVÜđx ­°NËeąĐĘľ=‘6IB*h#ŽŤTŘ0aâlÇßrŸŽ¤‡<Ŕđ%”űrĘRҀă÷á„:ŠPzŕH•“ôŮÍilآ|áS*QţI0IK„Hx]?œ?ЎäŽ,•’—éKyiëżu^o‡ěÄ|ąÓoy’äăˇ†ÜVB۸ąšÁĆ)ŚuFŘ>`Đ˘ŔĘ3Ľ~ÜŁűMžŇŞűŹü.÷É5’†Ě@ƒ ”v€ěĄű´¤ą­ď8†ĆŠ#šWH¨ ôU CĄÁrŻnOJgÚ3Ż—'ˇ|ŔV $C^„őu,ĄBžzę)"Üwß}´°°ŔץŒŸ§¸żŁČg0[ ˇNq­4p?Ž“ś–y_ňç Ć÷@„;p/Ž0żKß“‡ĹČ|(ŕ ”ŸĎ˝XÄĘ,¤B šsĹ5~kc÷7ë=kˆ}-Ğú':’Ţó˛Ó-"J˜…íůM 5˘çŘtśłęßq˛Yś@ŽžQŠ4¨ÜŞ˛cŽ őőł_i1m=@8Ľ §eó 9t!žÓ W]ˇňšƒä:„&Ŕw}ŁÇ^Ů,ŃFĎŁc{Ć´4[ʔ3ŃŚ‡,pőę„*R{kH+×jfŻ´H?ţ0=úđýĆŠśFkĆĄÎ^UvJĺ…íŚ+ޏŃýIt-Š_Ű.97qxyś­÷Jľdö=UŚfÇi{×i>kgýœçÉßžÚhĆEěľNž|3o\Š,Ń'ç§ËłűM3&_f‰ŞlóđJC3ŁÔiŒtüŘţ”řJŮłN{ňüĚá˝î@4K¨Ě͢C‚Ý Qo1`ŤłÎŹBh1oćż=šĄŤöZę…RČë[\â4ÝŕVü"…r'Ë]°-”†ąQČ/§JDą#ŠŤĐÉŐeČcjĐ@‡ŹĄ+ÚćČĹw0¸@äŮâ v70‘{%ĎZ锿Ô 7ý.řCżëüčĎň<ÉcÔšXÜ(a Đ$ÉŁŢđË)͢=ÄŽ˙`‰žx5;” ƅÁf›•):¤ŢEy´şvœw:mî/SÜsň$>rˆęzlh•şłT…¸Î5 ňÉ*gH˘4߂d×Ć'ɲ3ËIş0V#V6Ńd~ĚbaOŢeŮHÜör§Űm,Ďë3yůČ/ާ)™IL‰Ď‚wƒybvĆ:źĺ4bŠRÎôs1ŽBĐöňY7:4ŒZšĐ}M~Ó}[op҆Ců„çśD4ËwÚ1ďÎrnĎ<Ł‘[Ż0ęJ¸=Öt9ô}yóA^ş;ɎmŤęI^KKKt˙ý÷3 Źč9 †€``đáĹ_ä÷7˝éM|Ę'ŕ Ü+ůĆ€úÇŘF]Ą=Ŕjć <çʕ+\'´KĆťÄ~;|ř0§ă$^0vŕYRÜgć^bTÇ §í¤œ.éV9”Ozjy €.˛ô‹—éŁßJú(#^RÇ(/ňħ9‹g!…RČ/XëÓ8ŁvĂÉ bž‚g_˝˛BŸţôg鳟ý,={–ĂŠíۡ—žxâ úЇ>D'Œ3ٞxöHé)śW7¤Éh<ʰČé˝sŞ;xDN݉~'{,źpjԋÓÂ^RîŃ:[ş˙ł!2\@ŽŐťěŢ NžjĽn8`šęš=ŕ*ŻËÖaSb™œ’–{óöÉ.*űAfđ8L¨'#zé2ńéŢĺůšyv9â×{7„s8pp‰—fčéoœ6yś DíŻx›ö.ĎĐÂźqNŽŕœĹ °ˆĂ„źB’ÝăĆ ń ¸át°żƒ^ß돦ę2˜N&Ęń1yą^U.ŰЍŐJƒ™}ŕ[;Lósł43‹uzňM›ýá^f¨°zŹ=eŒ˝žŘĐ7%ô…§N/K~¤/Ý,Ŕ"ŁŰE萒r¤á™‘´-œľMŚ ?Dč÷†tyeÚ[}Z[Ýb}łŃ¨RľVĄj˝RÖ‚RŽ#`Ľ˜›kŃŢ˝ f=KB[ř†O­ŻX}'´'ˇÍ˜ž|é2]ZđžüÚúÖzłą~Ucݗš˜Ľ1`V îŢƒ8œ‰™K™a!dpIŮ7ÓV•ęÍ=Ti,ĐV€‰>-͙~Ó7ű~şF˝ÉUj|…{Mť§Öěăx[4ęž&06d4‰C ”=Ӗ9“XúôńĘ8ٝ'ńËŽç0ső“qÜ.}ŞřĺřÄ?ĆQɂĽ†şĐŘ4X zî¸ft˜1fţ'!ZjĐL°Eă ˆŁOł4Śşqhťl¨sĚžŐUPź@‡’_ĺGĄžÄN#ş ˜:ĆA}š{Ží`3sKTŻbź—c.“O3AĚú6ć—Ţ:˝só:2^ĽʂůÁ7úó¸Ażż˙=ôâÜQ*• J bŚ2s]Ŕĺ°Âg qy0—qX&óÍHlg^–Í@ŃÓeNÖó¸ďĽ‚Y^ÜĎ íöu{[̂€1 F 0Xfƒ´ó<  ˙ć řQÂxÁś'óŒ#÷ž–ö k—OŃľ+/›ńÖă~|îĘU~U*%:qdźç3÷Χ!J‘÷wŸŮw&a”E…ŃΉóbĂęf|ÜVŒ~ůě —čk_ű:=ýü/š7GQɂČ:ý}ĎOÖ>ţ›UŞTëԜ™ŁFs–Z3ó\^/žÍVš$ČWÄv)ŕQÁOŘ)m?IŠ÷WfoŠô–˛éĂűĚzľH˝nŰĚ[tńŇ253Śmây_úeéČĽ×k[†Š(ś+ôV­™űLţëMfCŃömǤHŮgTÍš6ˇmÍ2Ĺ~”~§ícÄĄĆđb@Ľą ´šşşĆk l°'ŐjĚ™ň˛SŢ ů֓Ýô×"ßĺÝ[؝ )¤•<żűY‹;ĎëZ!Żwš‹,"K ʆâ8ŁŘ´[ăQ –0yhNw#ŤÚÁ&saoĐYžGÍ[S…n7Ţé{ÄpŚéű%ŻšÄ ŸŃ,Ӕí`–gé<HBŽu`č.đAO\Ł’äYčň\Ŕ)Œ‰Š1˜J{čgi Ś.ŸÜƒ4đYłŠčśc¤„Ŕg\šßš1Ü:tˆŽ;ĆRŽ EOSf”Eű…n;Ď×NřÔčŚOĹK ËúŠv>kcdČ#ý!WH›ť÷$ůń^[$`ň\6ř֘eË&á>F̰#|ˇ' ýőfĂ(÷­„ćTŇŐy üŃýB4°BęFůÍűŽr,×H{Ą @{˘˙ŔŔ.ůČŤw)3XŽ\šl =N',lřŠ4o0&À„> ƒô?x†6dşs• ŁŽŤ@šă4Oyżž\ďZ=^5› Nó <IȀş“ p€qá̙3 D@ţxŕžżc|â…z—đHR߸bńödë‰'’¨w€ažĂ…ŒQ#ĺ]Âş =„ Dúň…ĎHϐü!oŇ}  ŠoÔ-@%ó9Γ„Aßgƒ‹âőu!aAŕ„Cý@řdZÇҊŠn!ˇ"čŤčóÂ$P’„9BE?ˇáiŹa󱜲’šTőp˜ˆ`ÍÂďëtV°Î¸‚ź`m–ąTH!"菘ŃoäÄáÍ ćqôCŹť'OžÜő}X;0ď˘?ŁďďVĆĆÉůĺ/…~ă7~‹žůü źßÄ8:xhýĂř˙¤'žřśÄáťăęóŸ˙<ýÚŻýŚqn^ĺ1żźź‡Ç2@ŸůĚgč/ţâ/č{>ňaúţď˙~.#dš#űŐœVE=ťú‹Ö]°ÖĚSrmŞ›Őűŕ|IœtbĎŚ§A ń2ŔjˆD8%‹Óüc˄QŤ6Œ§l˙]ZŕT5¨Íáœâ}/ďyCÖ4ŕVʒ0ŒE6Ţ<¨Mú–%Ŕg6ßł:íËŤeşÚ‰čřž͡Jń>0Ű>pŹ_ž´Jó 3ôśwb€jĽLšŮ[›úűÂŁŁcG˜vkđş÷ţ÷˝%ł/„ˆßëŮ}:ţf€”g0^˘…’ň¸ ˜7Ť“š:DŒJęö Ëö0¸ô˙SXąŽ›=ÚÚě˜W—ƒ$4šUă¸/qÍ`Éěxm]„R5×ůFŻBKËł ¨˜i5ůű;ĘĹ)+4ý–ÝbÂß çass‹Î_îŇĘz›.ššáSÖGűÍuevôZ€%ö)ęű°8F aBŰŽĆńߨĎQłÖ`ś:Y ~ ČěŁůä÷]5ę@ŁŇ š×§r°E‹fHnšü 6.SŁet‚ň S2SĂdtь?č1cÎ6–2°T3s‘Éy!Ú`ŕGŸěG~0–"@(ߌÓ@úö˙HËĂř7:…cđľ\ßa•[tiÓÜGŚ=ü†é“cš­ŽÍł6M9&tâŢGé™Ó+¨Zö těC[˜ôƖ%}P ´ëüü"3X´ˇ6¨Óۤő+çé$uifi/EĺÍtŻŃŃÁ ˝Ľű JL]'6ŇúÂüŁôĺŮŠW7sYĽÄ`€Ŕ8ź‡gCšVü LlĚŹ!ágü‰éSQ…Ă‚„|(Ĺăp( ÜA*‘—ŒUmËŃăB|pçąóˆ˝é–KŚo.î5zÖ^vŽĂ!żžąĘ` „Oi6g ”ôQm?¸Ńu.˝$‹Ú}ni™fÍşš˙Đ zé›_ĽN{…7Ń$äqůÂé+tîŇ&=źŸN;HsółfŞ0Çł„,4ę)Ć8Ů'8S3öĂ!ěCOal@'˝pé˝řŇzöůł şäŽůÇZ×*ŁÄŔĹŻełó Śß,1¨˘ZmÚu ‡{ě‡TAćĎ–ß˞Td­ăľm’ŹÇÚ^űÇÂÂ2-Ě/3ří  K*Ś˙l]¤ÓŮäuW"l ßטęŠEŰulKęüČZĚ}ŇË_“t_ĚÔŠwkÎhąmŔžƒţßíś6NB¤,ĺÚŽŚŮœ )d7âڒ§Iѡ )¤•źőQ?í÷B š[ä.˛jËé#ë؇3ĚˆŞY+ ú¤‰Śt…h €äNŮJ Ę8>ĺožœŇŇI–Ŕý,éi Ătš¸1îľ\%s#ŞŢŒńLŔrŻ.†9ŃmËEldÓĎÔJ‚(:ňîć;™œ:ŃQ'ÚEňw´?ęTX,#Jœ™‡ÚPÖĆFŃ<°‚Ÿ”Kם=YWśCBˇĀEk *Ć0jfZ=ë…gZ˙Ňm°­‰˘źĐ.ˇgs<Íp(Ćż0JŮWT!´DRb…x&n#NH[Kůĺ9žRŘő ik /Ł.rŻ6ŕč|KžőŇýLúšyÄI.aAHŐł6á>ß76Öéĺ—_fG$ęÁ5śë÷N'"ňœ={†űőo|ăŮ )!ktţĺ™84Jqž§S÷¤['"ťU¸u-őwaw@ÝA$‡´ꖍFĆ ʃrßĆŹ&zŔ=H_˜%$ôŇA œš“đh'´—´Xç>Ÿ;w.kqšřôˆ:ÄĐƒŽÇs$6Źô ž“ň =äUĘ*ő-aŠ@Ť,"”,Č/ÚIÓ˛^Čópo!…ÜŠ<űěłĆáúkô‘|„Ţ÷ž÷e~ű…_řf™ůG˙čń|ő żđ?™1šÁă}cčŃGĽ~đtřđ!6 îsŸ§ń/ţƒeŢŚú˝ßűˇĚœőžď_ţËÉßýÜĎýÜśüüáţ!}ăß0NçȀ¨B ůůŸ˙y^3˙Ů?űgźţ݊`îF:`přÄ'>ąëű~ýם>ţńÓßű{>úяîňŽ’YWÎŇŻ˙ÚoĐŋ—čîçĐfŘűž9sšţ—˙ĺßĐ?ř˙Ŕ8,Ó˝ĂÜüźSů4ü+!X;>ýéOÓř˙O˙~čĂ wżëÝtĎ='فđԗţúKôÉO~’Ëߏţčr8*ÉÓkiTÍŰSŘ˝I´loé~‡]x‘uôętŇňx‰ƒG-ŘűŰýböľč]|eź5Đ3öôHGbĹ,‹ýGqč[3ěX˛ˇFźßŐú„ä+q6ńéwËPŕąË8bÇ+ňĺĹĚýA@ϝ'ÚŰXĄ˝f¸0[%Ę‰ąžšŃaGÜąŁ‡¨ť&°‹tůĘ&ÓšĎHęs0óL—MBtż3xĺ9|ô÷\=}ď†Ä”öŕ§2ŰWyˆŘÜhԓýĎ6ŔĹ ŸÖN'>Ą]Ż‚NŞ3RŘżD÷ßw”öď_¤VłNÜwÂ|ˇ—÷{Xۤlčť×}DŇôłĽ?ş{ći§Žw#Úö ë’aŔÎVäk/B´ˇz Ž@¨’ő €pűćť.3š”XG-™śŻš: ˜='ŐG•ÁYí[F‹Š 2??C‹ËsfŽjđ}%ÇQZ=ŒŹ†8ą‡ż˛ÚŁK×Ěgłg^i×h8ŔqŃÇ§Ś„˛RFKŒ78˘k–§ÉÎSÉŹ8ęŁ㸞¸Î H0mŇ{Ô ZjŃLŐ§ů†ˇÁ&5jFĎčmš>łH^ĺ(Őę÷™şč›ç_2M ‚6ë­H;ôlČfą4,ôăńˆ6g…Ç'ރ1žě3á<ŕšŔ˘´PÁ´•*6JT満maÄzr…ş#Ô/ĘYŚOŸĽVPހ:ţ2;Ł Ŕ09 úńx#G˙(iܧšpD+Ś4ÍłŁ.˝ĽwšöžŠćy[Qƒ˘˛G9˙]­,Đľú2őë-›w.°Ńg|ë„ Łlž'_tű€ĂAč=FóL†-1";C?n/žJ”äĽö ÷0Oޜ/ďČú„„šŕk}Ť+Ě0^ƒA—Ů|ƒá›ŕ‡hůD 0h7C2›'ą„1sH`?cn3őľ¸ď$-,¤îć5ęš<Œúíd.yἳ ˆ8zx/=tÇW˝VĺúśvŒ˜uÓ|î>˘Ç,4L]˝şNçĎ]Ľž™^žşÂş˘ś%ęúr)v}4ăşaÐР09ÔfLĚ.PŐ´yŐ|‡08ÄŔ†ZĚđ§Ăk升ÇpEň$v ÝŽiöÓßíÚ1(?#, Őáh@Aw“VVť\˙ľZ–—0kI)fÂx‹ź0™ž˝äY¸ĐŹ&yś!]†ÝĘníuY/°žĚÍáĐÉl|hŁË,ťx•™ĹĂ­žUÚfGuËPȡŽ\ĎŚ—g#v÷n:­úo!…RHž¸óŒűÝNr˝9ʐB^r×,ěF!LhWĂ;çĘŰŔš Ž8É .€A‡ěHk<Ó'ËľSD uÚQě*Ay Úi+Ŕq"KřˆVXľ˛Şň íä—×NÎg]LŁ?SׇNGţśŠ]6”Š.§N[ęOęGłkč<é|iôťź‹QL;Ł(JœDpĚÎÍͲ‚kÓgżNO”M›/Ť˜yą*ävŤ[§;)Üv×ő§eťa˜ś)Tw¢ŁA-ÂŘ"'ž&A˜,D`č€AS‡Šq Ň'ă2­`@÷/ˆ‡ú=Ż~őÉŤËԞQ8ÚQ>8uXwüŔYCȅ 癵B@@şÝÝźšŸeŒÁň×ý×ôČ#°ŁRžŤÇ”ÜŁĂĽ¸l6y)c^~ŚÉn~×ĺ@›`!Fj P—0Ȑ*S€^@Č8k1FkqźRÔ%^¨ “ŁęiK˘Sč‚&}\'Ŕ\4ÄPë._žĚ†a§€‰/<_ć <_ćĆNďŸýŮ˜‰ˆú'˙äŸĐââϏżűťżÇŽéŁG0PސBžĽÄ8—6Ö7饗^bÓOüwߏóźÖüîďüýŢďý>ýÂ?˙Ÿ’Ëa,ăÇ~ü˙FO>ůşUÁúúôiúßů^ł yď{ߛa9rô >ňzç_ýŐ˙™.ŔĆő}ß÷}ć°;EŇ}"Ů­xhÝŹřCŔŮŤťzLşŒŚqZâř‘ýV6ĺ¸`_k˜îÚĎf?S/ąsŠ"Ý6Ć^Ăá)ÇU–ç!ŠYđ˜=âœécvކńPtŐŐăpëté#-ĎWsYPFĂ1]ź°Bós3ôčŁ÷ĐůódŃ1N݅ĺ%óŹAü ˝ç°ƒč9;ľíJŇýz¨Ó7ŕü1÷ˇš ĺŐż3ű‚Í5ňSĚśĚ=ľ ł.ě5ăîą'îe0ӌIkŃü}Ď˝‡Íosd™PRý"{@ŮWŚíö—ë9,¤žÜşÜÎ&ż‹Í@t}Ţgš~ŢîŹăľ?4ďüv8|F§Ó§áxÄ´řĺ öŘŠ3lӋ|Ňkpm­^1ueęlŚać¨T@/śá ŇĂ6<#%í9@’­>ľÍ>vŐĚuçŻEĚöłaöŃ˝‘ŮŘçV­C>L÷°)‹cN{Ţ ˇ]3a’ĂŘ;37 •ăS辌[;̗`Yjâߢ˜=JuŰŚĄGsAÓTIĎxýŤ´BƒzĂ5óŹ%ŞÔ›ş8nęˇG“đ" # ;Tö(e{‰M>óVX€‡=ֆ1×+OKĄ9D|žbuV3*"dŔĎ%%ŠĐ˛CpH[‹J ö¸LĽ E‹3}ލŽ`Ž Ë-óťy–_7Žxë§ Š9éÓĄńŰg"Ó–†4ô¨jʁëćžËóGčšIƒV˘  |ޘ˛vJ{ŠV1vœö7őíńřœ¤`%Î#r:$/@€S?ś3Q 6 Ń?âPťqč 4RŮ+ŮöÁ\Ăß{ ›€>Ź˘íGŽnŞmFŮëEÇ͞ę—Đ ;`ľ@(§vá'ťĚ‡źô7;ڧëTvžJÇ!ŘPb“ÖŢFl[,™~°°¸Ě`€ú=™q°Jk—Oąž74Ďő;Źď>˙ÂYşxqŽŢĂ!öí[ŚMłfŹ?ÝĄö†K›[tŃčž/Ÿ˝BçÎ^ĽŤWÖÔúYĐŃT]úő٤.QÎů…eZŢÔĚ -WJř//™Ó(^ âđ1vVé%ĎÎo‡9-kKPKú]ň”ř`ҘYk0ža;BČŘ´}fĽ@ éőŰlšÝ­ŘžWľknĽdÓő˛áŠtž\ű›ŘŽů6eĘłOšv¸mĽž˛VM“í×űĚ\W<7d[@ˇ ]Čś…FĂî/ÄV™Ÿ^´řVÝGoôž;ÁŽ\H!…źţĺV撛™Ă )äN“ť `Ál‘A”Ä…dŽŰCYˆsV‡ĐÎIwc-ßËł&ŠaÚťžGîÓ"yPˆÜŤéeÝ|h`…Ťœj ‰ÎŤË†ŕćgGEÂQ:Ürh‡´|–ú•śHҢÔxP‚HţݲK™ů„űh’Á:č' Ă fóósě…Ą™ďSI”B$O–žP¨…ƒ$ÖŠ´Wš'o[ţŚľľű]z´CžbścÚňŽŻŃuĽżŰ–Ÿ(çšî5^˘t# 6ЅöÔB˝ 9ĆxŔ§Ť0ć`lÇĐŁBÁ‡ÁŢĆ0öƒZ`É5† ĂeoqďŃqu_pűŒ6Œçőc—ÁE÷EWŔIŽ"ńI¤ą1hŸg'$€̘…ä˛Ĺd řq˝Ęď00đŠ2ăŔ”px>œœƒzp^c˜Ě/řŒkaXÁÉXë°)Ęo!ˇ(č?>ĺóúfż‡ďŕĆń f‰ČĚ;'čŕÁCôs˙ݟŁo|ýzӓOĆ͊ż{řuđŕˇ˙ë˙ú˙1ýś,üřľC~bůÝßů}ş˙űĚÜy…cß{Ď}tđĐAzá…ç…o}ë[ăĐB#q‘00N1~1‡?~,™_Ÿ{îyfí@äĉ“<Ś0žßńގóď—.]ڧŸ~šCO=ńÄtěŘQ*äv‹Ý“b­DŽ1cî˝÷ž{čóŞTqŞ2í702?űěstęÔK: §ŚÁ˛rß}÷2Ť ÚóäŸţéŸňňŽwźƒOżëçI?źpţ}ăŠo˜4cęŕazěńÇ8Lúřšsč™gž1űš!3ý%ÉÇĘĘ*}ţó_ˆÁ‚UîŁoűŰyíƊŮ/ĆńĹĽEW@ŕ(ţ;çűhfv†.]ź˜\>€žűä“oLŇpëkgƒyú;֕żů›/ÓľŤŤôÝßóÝ ’Bč-°5˝á o`pń§>ői^ĎŢýîwÓţŕŇżů7˙†žü7_᱅ý…ç˝Vúí ÷t]oS˝$Îťˆ˘÷;V—ˆ’Đöôqş›ćäÓ{"˝Ď”{l:Ä68ńÁ€~ŐnoąĂ§Vľěyç œą0tEBʧZ0Â$°{¨”Ů­DÍÖ˘™˘Ťtęr@}ăä^˜)ÓLÝ2k¤ŐŔîfÚÜęPĹl?÷-/Ó3&F“* ƒŸ¸řtŻŻŽˇďŻÄţ"Ű~6Ę$c …„˝Ěk^š€DfĚއ(DqČAŤË€iĄŐŞÓěL“ZÍĎ6ĚŘo™9ä08°×|ß2u3cÖPóĎPŁ^ŰÓ$úÎ Pŕl 1ŠËŔ9INVç¨PÉ5ŃÔżó>ťş8ŃöП’‚őĎźzÝž=ŃŢRť30{Óž™ŸĆüÝ+šţQň¨QŠ‘Ě–…AÓcpKŤŐ fŁĆá1Áę13ƒzk™ż­łŸ÷ĄĽ4´" *p#MťÓĺđ†ëëŁ ľéĘŞOůgÖű­A“Ă‚ úx>@*ŐcP…“6ě%ĆE˝^Š÷Ç匭E:1‡&`ŸŰ0VA˝RŁě´ „ŢaCÄ&ăŸ,Hßw&0=”ânúŞOăŕššş[Çź G@‚ó‰ńˆYŔ˜GnŰ3jDüE˘3óć9L9Áׄ%b& —ۢ0Lú=ď]pˆĂÔŐJ@“•LšëŁľ¨cžŻS7ŹŇýÝKt¨ˇB ƒ6Ý×™N5Ňľňůĺ*­Öö0;ĹJŠIÚşČcPHÍŘ6raŇëSkjC3OŐfÍ­ń˜BVC3Á—Ď`BAYc4RR×` ńâşľĽőâiً]ő\D1LĹKA:Z?uÁŽŽŻĽ×§úł;ĎĂvcC.ÎSĂ8Їƒ>ď kľ;[<'[ ý,łłčçZ]lĆŕˆ÷hű÷„çzć|żĚ€şfłĎUfOˆÔą¸„ƒ œ÷n{6W/ŇĆĘUę™ço™qôě ]:{á =śŸ:ý!zń"ƒ):f|E~:_x‚Ň!äYJŮ<łjÚŹ\­'LŞ>^ĐŤgöpżâü›űfÍ^yśíbű˜„nIçŰĚŠÔžÜِŚK”Œ3š_v"I›ĹʼnÂ(YŁÂĐ­ä`×ńxČ7cŽ@=ƒ9B€ž˛MľZ3œĆ`0[XĆÔi.´âĹĚ6”é{qÇ!Őđv~Œ¤>\nšďl ;­ůvżëKš FMËŞ),°¨/ě/06kŚýýŘÎ&aQ’|ż6ۡBîŮÍ^n§˝I!…RČÍJŢ<’ç+ŰíşYH!ŻGš‹Vů€q›oHʐe6MËŚŻs  Đʞ\ŻĹŽ˛¨Aú”ťVóNčË}ú%× ˝ÎWZ)¸ÁuŹę ”ťąšć`Őϰ´œöoqxë]ÚŠ* KËć–U=$SOćA§éŠÔ“.ˇˆVp*†đö3őą8)çv’ś°‘L2uw1pŰ-ţv[Ţ\§ľÜŤŽ°şhd?'tŹřęçĺIâDϤ¸]Ź]0šú;âBÝźDIŽ˘ô‡„hĐtŽ^Đôi$ŸăäaĂj˜+’wsn?–ńç˘óó ŠňŰÄýM+ŇZ4ĐBĘ';spÄ ¸"›70ŒčЧžbŔě6˙éź$ϔşŇă-çQŚó,áIހÂ-ÔÉşÜR×ËsäąěčçědŘÍoQ” sÇ%ęMÚZ@`Ž€ăçřńă|zŔ őŕ@”`î“ĎH[~PĘ%á?$d ę× Aŕo8ńÂőpĚ č÷"Ô/ňŠë%< ޅńe ‡0[HxäŔ g‚ßä~”Écç@5é[ř,ŒřN¢H;â%!V )äÖċĆ9+Bä!źm×ŔpěŘ úĚg>Go|Óö6gN€AŰ/9uĘéFSÉoö9˙ţß˙ďœî#€ţ‚5Ë2ÚYĹĺËWč?ý§_㔳s-^?đěm PÁ‹S"ŮăDžöկӖ1Ž;ľÁ†gŸyÖôßoŇý÷ßǎzƜŐeÉ/škÔžđEÓĎĐŰŢúvJ}ĺ+_ĺp2c20eóc0W0Öź ő&śFÉcht5:oętݔ˙ ŐK5”çÍu‡V‹3†×ózdçŒä? ťL&Jx$łŐĚ$p÷/f݈Żű6´',˜hK†¤lŒe€‹;сÁ  6i~`ôoB3Ô3eő酹Ă&Ÿ}zđĐ"m7čŻú‡č…ĆZ)ϑÇ@l?ĂZŽíTČ扅ůeև|`ŰCŕymÖwpr!­ź˜qŔ’ęDěĐľ€6k'ˆ|Jšb{DüȖ—➈÷0śÉřŃc(oŮnŰJ×?Ö_•­B‡7rçg„=ëěĐĎÁzÝęÚĘ3'ˇŮQV ś˙Ä  ˢ0á:çž ŸáłĂťĚýŘ =áérxÜçŤ5 Źk4ghaq-ď[§őŤ—heőuÚk ”zîš3tęôĺ$¤+#ďpe“? €˝Ą6C´ůa?jőŚůťÎůdЎһuhÖ­v‡Ęý;ákľ&—y›)3íŤům'HrŻmëYfĄŘĹuŠ5űfŤĆdM´)Ó‡ůˆŮE´.e‹Ăř0ă ŐšĺöĆGźä€ҁޏ> Ý9úČ$›í3y{\ťeNőŘĎ^îľŇç5 h÷â1;Š„Kˆě#3÷v9͘ÿ .Đoř€XPÍ÷q…ÜYrc}îćď)¤B q%oMtĽXł š›ä.XPŹT Ůp"ŽÄ0>ŕ‚&D´"'ÎMíüuÁ îwnšňL `Ł/ĄGôőúo˝éÖ@ °Đôšî†ß͋Ëá(ôËILCZ‹â("}úKžŤóŽë˜rXĺaƒ€gär˘\§çŚŤԁ˘ĎŐe€ĆŢ˝űؙ2??Ÿ8Ť%T@†Ű5ÜgçľŐJŞĐĽ šĽöCSzÝôt¨Ăh†ž/ď󍈛'ˆç#@,(ěp쀞ä†Ô€ąŇŻ}íkĚ2!÷‹s‡.§Ś=•P(š‰Ć~oŮ„Ń@ŽČ'ŽáĘŁ ÝÍ&&ˇÍ]Ů͆ÇCú9bŕz¨'—QŻ=ö˜q˜ŕq‰rI˝ăoÜÇœ]šÂYB‹XCs9Z[ ~GZ¸÷Ę)8ÄpŸ€… 0ŔHČˆ o“ŚŸl¨üşGČú&Œ98Ag ó„´'œoč3rZß!mɓžCd!ŹřNBšČ˜,¤[ô_„đř˙ýůŸQj´Ä¸<ÍÎÝ|‘š™ uéRz_ći {̓_úҗř”üĚl‹nF`ŕ˙Ї>dĆkţă˙ńŸčŇĺKô?ń㼖Áţ…/|Ţ˙ţ÷ńX{ăßH?ţĎÍ_˙ú7č÷~ď÷Ěü9r˜>öąńŘů‘ůoŮŠü /Ň/ţâ/r:Č/Â.,őˇ˙ö÷rˆ†őő úŸ˙çÁŽčŸţé˙ š}ÖŤS§NŃM_yűŰŢaÚŕo3p/ĚyzMůĺóô™Ď|–)’?úwČ´ůˇq[}ň“Áě%˜wŃΟúÔ§řýÉ'Ÿä4Ś %žë˙w^Ż˙ŕ÷˙>˙…ĎÓ[ßö$÷‡Ď|úÓtĎ=÷Ňw÷ws~ů—™\‡óČ8jž|ň˝ 9räíF˛ă7~ă7č+_ţš™˙9WřôÔSOÓoţćoҏ˙řŃńă–E%ŐvŢjÁ: ŃĂ=Ęŕ ¤ń–ˇź…2ţęŻţŠ× Źgßű˝ßË×xßý÷ÓÇ?ţ Z5Ô;AÜ}„Ţ›űžOí ő"űS’ ŒżđC6íş“ý éŚűĐ0ŁËh‡ţÖŕîT,˜@ö"ĽÂ9´MżÝ˘ąŃI=Ō‡şě¨+•9TƒÝ‡Ű° ŚđýôÔˇłĎMt"óśŮh0ЍÝéŔb@ÍZҡŮňšyŮ8ęűƒ‘ ))<ˇS[¸ďdË䗢Xo0ó€čBꎤL>YDz§çËKóôŘĂÇicu…Ş•˛YSšŚżśčÄńýf˙ťL{ö,0Íţ’™ß[ÍŸN§Č†ą“Ľ€Áeď)ŻÝč Óö˝ťŮťbËČĐÎۘŮ˙Œƒ úÖhbfcÚÚěІY?ÁLŃŢę1ŔküÎý€ŮJÓóYF°SĚÍaßÜâ)Z…A)ýQŽučn^쏸 |fÁł$k›ľ÷ʕşzu•Î_źČ{Ö^ˇ“°ąĄ—KTc Â>"Ó6Uú_„| ň|?q†s8ŸŽ>§ËÂ}6î+QěW‡Ű9ŒËiŮ'- —ť”ŒyŸŸĎs@ p°DJ10Ŕ\r݌Ů*Ô =/ÔA-1Y!ż2¤Ů Âp€f‰zĽ‡Í3ŻQ8^5NřóŒ‘Ť°ď@ďĺ>eĽaĚŘÂZ™gÁJěŘEh(5XЈĚď3J“!ŽŇá°C{F+T3ԙq—Ćĺu'­ŐgiľşŸ&Ľ­x{hźP˘`Î8ŢďÝO_yi‹KéO,0@a=i}ѲXÖźŃpŔŕ„ŇčlŚŔ8ńtƒźG\u\…˜ˇ¸?‡ś`](yý—ŘśWƒŃŃ8’°t„Ć` ?Ž;˜‰I…ěúť˝ßS$`†l8'YÔč‹ËkÁľŮ9Ýîl˜9ąĂŕ7ë|ŮI đAĽl™*„"wźQžýÍÖ}6eSŸ {Pkn‘žťąz‰6WŻr]Œ˜=ĆJ%v˘œQx 5(ĚzRޚď›\÷€ŘçůvŒy^˛^ˆ C|0fĆDŹ]ę™6ŽVŞ1đd&׆°{ńRčKDq_ˇŹ 2yœńşĚ6#ŁçÖk̈́˝†+ŔP!ăe—öm;bPFМ”W"ĺ ÚQÂw KQnir׾ë٘\Űéî׍ë—ŐËMő‡6Œ;\Ç#fńrűr`d\$*|U…(šŢŢĺfmŠ…RH!7*zß$ş|!…ÜMr×,āŹ#Ší•؁™uËő!ńWői!ˆ(Śb\H Qâä“ëpëPÇŠ84ÝMŽ‹f–çI( ˛ëŕř†1Y—EîŐ I_‹6nˆÓN;€Ľ r­Î§›>ňĄŠňőoÚ1ÄőŽëA+§nh^DŽŃu.yőÂ0ĂrgŔQyřđa~AŠ‚q§^5Ĺ/E˘¸ď,ŽŃp7’żIŇGz˘’úšý!?MkȈrĆk0EúłÓţ‘=}"Ô¤–‘‚vЎÂP!}ýKŔ*¨SX$ĘȞJ'ˇbĂóÓçK9u;šuĽčŇwä~¨1 °ŰvŇם§ Üą g:úœt.¸‚žő•Ż|™™+´Kú°Œœ¸`ĂŚz†fśĐ !| ÇT‰ë[Â_Ȝ€<Ą}ŕź×}HŹƒ€2mŁ?ëvsřťŠC÷;ę ÎOŠG8Đ@UŽç +Çoč[úô‰€PôG8m…ŠBŽC=p }” Ŕć^ŠCœHODQ7Î8Ü/e—Đ/Ňßĺ;wH˜]H_GşpLiđŇŚS_L"m%éIČ|äZI_@iř ďÓćńB šÁ8:qâ¸qŞŢC`ńôSĎ^÷^tAYźô‡yďŸţÓĘc@3ôíď˙;?hœ_{éfäžűleZ\°s.Bŕô2ŔX`Ŕ30ţŢüć7ÓłĎ>Ců—I/žřç§ť666ف˙я~”Ž=ÂóÄC=@?üp§gœŢgĚźýGŮpU™ š}'ćĐšŮYz饗čżţ×˙ĘműĐCŃĄƒ‡’˝:Ř~çw~çŐˇżý­ôŢ÷ž‡Ăy`^|řá‡čô™—čë_˙:ĎŐhKŹŃsa×ŘÔy."NŽ;ĚŹ%řą?Žr›tŃ8n{Ď{ŢĂ!FĐÇ˙â/ţ‚ZZxßűŢÇĄLb—B~!íáőé|őŤ_Ľ÷Çűé]ďz;Őľ´ŕŸř3}€ŮɆŠŃ'=Ú­ľÜ:ĚFÉ^c/ °ŸœhEŮ|đÁ¸-ü„Ši2~íA|Y0… ÎĹ~¨˘Ŕ˛˙•#Äçßí^ŠÇM̜=AŻí5aběŃűV›‡ŹŢÂNó˜F^˜Ă˘Č:qi '™š/÷™ąÎ8ˇXoôK™}§¤ÍzÚ?G˙Jňă۰ÉOW6#ęš}čŃ%˘š™j⸴ődOÝGł °ŘŤ’=běĘö˝ŕÍśaâ<Ž÷_“x_v˝ţĚ~đř§jŧď?F+´¸4gćň}těřaÚżo‰jő*Í´šĚ(ƒ›8œŢcăä:Xńů”˝ˇs(Ě-×őŻá)ý×´çűĂ1‡Ń菦żh;˘­M3÷ äĆ*ĎşŚMS6dšڊJ9ó\n˙ôA,°o,."&ؚŒsśVĄĘ°ř xđ$T…'Lv`‰L>°o]ĽľőMş|ů*˝Ć HF}bMg耗ŐŰŘŽâwhŢ<ƒŞ-zűbŘŁ˛c7˛,¤jŏY\ÝMtË0֙š=b9˜ B€UĆŠjÁ!ƒŹ—7ŒĄ#6ä™eó0ç’Yă=Źí%‹Nbá°;#3Żf|ŽĆf~éĂQšAKłłáŮ4ż›Ť*sÔ÷ď3ż_6íˇžŔ Ď旝ňp€CWÇ\‚ąç 3˜ ý™ś‡ssÔĄ{†—éČhÇm*y ¨S›ĄUjŇĹĘu!㌥Éč°lôqßĚçĚZâQմљŽO‹ŃŐ˘6J ”ŽGQH”™7bŃştŐ8ńŤŹs4ÓżÇ@‹őőžŃ—|žżfgç,Ťj6ŒbđJ2A2ŰϰśÁŹmÂ6W÷={HXQdűw'Ąôšŕ3 -nnŰayÜ1XżĎčq̐€Uóa™ {ýŽ˝‡łĘUŞ4jŒA;Ű´Ý ›˙|ĐsKű¨5ť@{ž ~ˇ“ä,,ŐâÇ EYpŤPNbéI@IsGv‹çGvA}a° X<ŕ„˜6^ßX1íťFułľšł ,šqąk0Ŕ9Ăv&ËÄvœ2FPĎŰBĘń|´*Šv§çĘŢ.3Çó“Ţ÷Řş5těő W ŤäŽ%‹˘m{m˒żŻˇ&čtôwť’(.÷[„D ăžŮpIčŻŇ~˜ó.eL {Áˇ°äíWw#EŸ)¤B^mIýůßóR!ŻWškPˆpp 'ŀöd2‰=Öx¨üňYœrúš€ ´Ľl!éhR€"yŽ28…ź(‡š!5VĽL)Ł|v‘čnž4@Aţv™. Úšő•{ H âĐ7Ćy’PřŕؐźhĺŢuřJÝ>ň›.ƒž_NŐ@qőą8ĂaLNŚ*” ?'_avĺĆ'w{ŠEV O×UŹ‹BěYžMş˜.Q”Ú4źŘxŸ—WmHáž=ąŚ­A ˘ŔOÖĄŰKŘ)$ā€(đGœ(ë.%.ˇaÄgQŁ›Ps¸4YɤŁÇ›ˆă¤ĺÍöˇlŔ ëÓëĎçxŰŠI5°ßmń‰˛6;S\†ÉŰsĎ=ÇŹ Ň7Ľ/rż/ĽĎ.˜B^Úh)Ě6„ĎăIíp6É8ƒĄůBčˆiýSłÓč9@žwÁÚw˝zÜŠ~ÓÍRÄ ‚x aŽŔƒ u„úŐllX2e‡ƒU@%ÂH°!RÇŠwi3¤…tŕ¸ŔŔ U„ďaÁWă„=ő)é#mM1ŠôqĚKxázÁľH ăe°Ú ežző*Ÿ*ś4łĺ¤ÝŔ°!@&P`Ňs˝€.ädN!…ÜŞ >ůć7GňťÔˇýéÇ?ąă}2ě_xńyúŽďřţ}kí>đA'üÇĚăëąÇ6Nž݌d ŸŽă1Ľę'ăz†ţŐżúW šŔš˙ÄOđ\ƒź5öÚąžŹůže­ŽŽ0ƒĆ+ßůß3ůąCôćň]Čîmń裏Ň?ţ˙Gú̧?Ë € ţěĎţŒ~řżý(}×w}_‡ţŔ„ă¨g`Ë8Uąw{ó[ž¤O}úŻčsŸűĎŤ˜+Ń/ŢK×vYÓ5R@‰XWyí"v<ČiwŒYł1?§+˜‹wbČൔbŞy˝eC_üČGžŰôŐ{ś­Ů`äHS¨ąîivĎ`űgÍú‚ý†Ył–—š^Áü"űbŹIżúŤżJ˙ř˙c^Ó°NbÍŤ7nĆÉňƊëذ'Ň#‚˜Ä×Y§NŔĘŢ!ť§K™.P—ĚŢ3*h˝'l-ĺťĎ:B;ĹÉ/ş#˛|Ňb÷ ý“š6żaüLŸH8-9…ĂÄ'×ëu8z:ěüE:œ|pFJ~ôžĚ:˝ÄQľÍŠCŠÎ'űîv?˘ŽD´ĐőčđRH3uë’ă{¸äaňw D;w>AźŰ=˘k ‚i÷%{Đœ`sŒň=ôĐ˝tü8QsÔ0ă`8$3M(çëäžq4•¸>ěöym벇ŘNůۍ„Ń$v~E ŞŔœĹŕcşşşNëkmÚÜč2ŕÂ:žMŢĘ1,Ŕ÷Ďa6<Śîß袨„D™›Gč;ěU+\%čĂ;˙Ďž ֆkŁ™G{ý]ťśN—._3{Ózéԋ<ŔÉl÷ ńéřdݕqdYal_1iNŒł/X§jŘ6ë˝GăĘAŠŕ<„IˆHÖ. !6ŚÓîłĂ?s=,ƒ*ĐŔu˝÷‚Ř›ŒęÇý yýu÷ЉĂŐl *c˝'Űű%˘ShĆ$…fÎ5&1Łš˜/Ç´Ň3éFk4SQŠÖ5ßmQĹ;H“ęęôO™d;ěŕä0%ĄuúOhh Tb;ŇőL˙?Ń=G÷ktź‰FŚP­hHőpHkĺyzŞ~”Vę{hT5ű|3 ˝L™&ĽşyžeŽŕžáYŢ ä}bž×cŃ\ٌp•¨şdŠě%{3]§z~¸,‹xćŹjuffç˜%:OŻŰfŔœä3­9v˜G<ĆL8XCĂxE˙ jěôšO—xN™Xź‰Ň Ýqĺ: ľŢ_b0Ž—€kÂH‡ “Ă˜›ť&żă‰ Gś*˘fZł &a6ô§’Ýk"Ôöî–yG|oË3Ěň mbÂމ>ç„d˛kMžŕ^ß´sĽŠpGóŞă§aAl˜/ŢG¨ ڈkGKęX8̄ '2ÓŤâ0[ôLšńýÜě"—9›8mKw8ě{Rß*ĆŁxý*Ĺ, fŠ”kÉ%{(O ăœäŐ)ĎN˘nýkی°´`O' ç Ťž×:BžýLž1ůh7kƒŰŸu=Lť—+F0ó2ö śoŮ2Í4ćíÜăŮ˝‹Œg€7ŃšĘu빐ť_ŚíçDÜyˇB )ävČ´y(oŢ)ć˘Bîš‹B„˘Ţ:kĆŁŠĽ§÷XÁ§Ś„¸€h–a˛Íš(ĽQXř+!´qLŽ“´´’+f}8bľ‘M–Íť„€ŃTŸrÇťˆ‚'ő!ů#—6zéS[zÓŻ'6­ .Ą8ć9ł3 ^:9 ¨˘Ç|uj×ńëNŔyF Ôwiz¨o×a@—p*ú9™ü˛%&ŰwŚ*Š9ď´PHđ]wî}žŸĆWš é ‹TŮfăWLńËœPC|6(ŘśśNk†Ś?Ăů cŽ™™ąhwkTNË,Ŕů,Ŕ°čžlO Ľ éÇIâ~†ÝDœŃşďj–}ż¤)×äőÉ< ÔNâöoÝ&ş˙ʁżA!ĎĘěĚĚśôp?N?Ÿ={†ç Š#‰3tŁ8…&}ŮvČw2ć“ń ŁqɆœCşaQtŔ…ĚÒw´œbxĄŽ<°’/ĺ”‹„o’ů ÷ĂÁ:ŠÇ Ú7=•1xyŔ ÚĆg ö„|ŸÓÂ|„źŕoäWÚ ůá…8¤ŒfËŔ=`őľů@Úč‡f¤BnU0'š@×‘ě Ś×?ţă?a Đ>đä{€…Ţńގsč 8ż˙Ď˙ó?Ńůóéđ‘ĂÖŃő ˆžäó'?ůI[?ó3˙×>˙ü79< ÖĂĹĹ%.Ôő㈡ Í1}ó›ßäÓűˆ˝ą‰šáAŠBVżń§™-ِŰ+˜ËŔd„yí˝ď}/ýÄOüłXüöo˙6}ń‹_˘o˙öoçë07~đƒäëââăú úĄú~>ąđR`e@˜š÷ÉźŒśÇ||âÄ őäˆ#ÄdîÉ7ÜWćććůô(žƒHŹ7c¤–ŢŠ{żüeËnőá˜8ČÎ?W.^źD/˝xŠóŠ~i}#zOłÓŢ0\q đ Ň{úЧč˝ď{×֕ů‘áţýŻ˙őżću c ëă7žţuţě!Żľh°Ťe$Ô` ëŘľú‡ Ą÷ŒöoJÖç”á‚S$ŮôŰ}WVçpONóţ( Œƒ|ŔŽ\œ u÷ˆ•J™pzŕ6<_2Qd÷¸ĺ„fž­ÔŮ4őžSńhv~)эd–ěŐ}Dďç¸7¨=–ýŇçPŤí:=ăĐÝW˘Ĺâ>­Ůďěü{ŁoŁpž"ŸÉ˜-aŹBFNŽsJő ”ůŔAˀŒm¨‘^φ:ÁŤVąLJ~|jŢşžľnź"„<![ֈ$#“żžqŠőúÄͩÓĐĆz›VW6imm‹FÁÄ2jtPňlV켥;Ľí\Q€Ż™&íݡHË{ćÍ|WRLRF×Č÷âä|vx˛3tf•Ö×6čüĹË´şÖć0ZgΞf'kęˆNMŠ>Ĺ鋮˜śçÓ´iŠ2!Ó4T_ĽViƒF´—ĆĽeÓ ÓВ°¨p˝E~RśÄŠ„ eS…á(!Ŕ Ůŕ pĹBœĎâĂKž:LˆPB¨á!ň,qtĘwrŻNWD+oB#/éşĎǸ”A3nČóÄY ECNÍYE)FI— C’?˜/p|˛DŽŃĄŢŘ!1ŚIC)×NušNœďú;WAŇHůN҅Ŕу˜ŘbxÔĘŚ+^ŽÁÚUšôsľ‘b§‰˙z ×Áž˝9šŞŮtýÄXĚeŒ‚¤hc+œÓ0¨Ł]áL‰őĽżˆQJú€ffČœŁĚ˜ë!ś˝R°”)O%3WˇAžâŞżÓ×é1Ń&×`š§ěć‰~Ž čŃm,ý8ŮČcń@߃s§Oa|ˇqˇKÉřľaAJŹäJż•úČë›2n!vžŠ$§i%l…Ô“8‘Ëv‘MÇ-“n6úÇsˆüŽ?ďÔ§ŐŤźë~$uůěłĎ2Eůý÷ßĎóčŢaě€ACŘ)PF8~/>5ež‡SMƒkp=a(Ć:ň ŕúť\ƒ:Í?ž#× |…ôń7îÁKć<܏ӽ8Č…ďřđƧ‹z‘P$!ĺÄóđÂ5xÁx#§đp/ŽÇ3 !Ą^PÎ6Çjďňőp â:P棏bŕ÷Âń[ČŤ)ÝN×8bNѳϟ@[ưţŮĎ~†ţčţˆţű˙ţ'h˙ţ˝źÉ<&@¨w˝ëÝô…/|‘~ëˇţ3źç¸éĂűév Â˙řÇé駟ĺçěcăšćŰżý}fž¨Óťßýnú/˙ĺżđXBŘ\‹ßßóžws,{„(úw˙îßq^ÁbŚ8žögÖ8Ă?H…Ü>ÁĐÁżýˇ˙–öď;ŔŹF`řÁzűĐC&,&ܧŢývă$iĐ/üÂ/Đ'ţôtňä zç;ßƧśßţöˇ1űŧ>ő)ďÍňÔSOŃ/ţâ˙Ű8$gé§ţ‡Ÿ¤ăÇNŇNôăÇŒ>˙ů/ĐüÁ0ČB@s7^6ľ~F– éäɓôţ÷ż?¨ Á€ţ÷ƒ?ôƒń<óFOŹ­ď}Ď{賟ůýŐ§ţŠâ1úÁüA~‰ ŸC°ţaó…/~Ţóî÷ŃC?DŻľ¸rŮOhPťŢ÷Ůӛ6ümŻ,ÓœŮ6]ŹĹ˛Żœ°óÇ/yü˝;—%™qËó°§ŔKë[ÖalÁÎ6/匞h/FƑ›‚7ććĚž­A›[ĆšłşÂŽ;´™ôľäŹtÄ@1YˆČupŽ GęŽ?6ű†K!-7FttÇŠçIž)ÎoÎ^Ů ăňźrĹě#`ű ÉCž"áQđÓx`hÇFŁĆswfçŮ3ýyړëŔ“ďvă›–†äy4˛{;ÔůćF‡™3!ƒńˆV7ÚŚmou‹CŕqpŢúŚ ľ˛Î˝č#–•Âʈ[&˛‡öX˘˝{çhÂj9R×yäżšY}%úcłž@Ď<ý ?,jO?ý”Ńá‡dŮ%l§Œ3Ÿ,ŽÇ˛¤úX”čŸŇg6X$Ěب˜2˜ţ SÎKĚâ1˘%dCŃ”ŹŁœśSíëń†TZ4QĚ3Á]Ë iCo„QĚś ôŻqŔĎóĆ'†#Lŕ„G萑é#(/˜<ĚX,‡5{°ÁŔ’ őáĄ˙-d‚ ”`먲ݣ? ŠřöăJ—űNćú–G'.]˘­}†QĹ$aôżƒqŇçg¤[GéZkŻ™Ś(c“ł AŒa­s/I‡Ś AhAË>‡˛É[ٔ-âş2:?~RŚÂŐá<žÓC‡öŃł§×¨7gÂhý^ô~ `›Ä‡Qśł$áZ8âgç͞jÖč>hŃ7ďu„=œ[â`e7˛Ěœ~‰-l8ŰĎ"Ę,źëÚÎ#ý,,#ƒQŸ*AoĚ^Ă`Y>˝gŞ‹ŚónФmnbƒrügvĽLőĹ&-.ě5cz‹Ci\žň˛Ő)g—Ě>ŸąMiťÂíÝŚëćGĎéPĐ‘ŽŁ[Űruť[ź.­Ź^â_gHĚlaׯE_T*ÖśçEŰ%@ œź‰ÍśZś JjwuâyůvŐČąA١ëâxA°ĎĂž{0´1@ŰřM÷QwÍČłEMľëQz¨EęFúĆŔ<°ˆ}×ZŔǜéÓ­4Ě6šÎŠßÂ?ő--ˇk>*¤B )¤BŽ/w Ŕ K0 ŠZŻ''ľsQ^nxqňă{}˘Hާľ8¤ĹIŤĂ_hGą€äD´lôĹ."y– ɋ¤!'ąäł.‹Ś Ő €Ś“w ™SRę­ˆčr@¸œ Hń2éHyôI|Q$Äá/Nů˛˘ýÔ ¸˜(đ†V\ ‡Ô­´/N2Âá"÷”JŰO fÄťž3~ęo´“î˛Ýpˇ]9“ď(6z ߂>˘4ń÷ÖH1ŽO€I_ŽGě} ŒOž šBż?ˆ %.H,ž ṵ̊(ÄÎxécZIdŔG”e_€­Ł,&9ý‡%Ń5ˇ/Oë׎ąS˙悒vjW}bR3˝Ŕů g¸0˘čkń;;ˆŰ“€ą.uŔFX™ÖĺŐ}SŸŇŃó’UÂË<§áô‚Už#Śś;EO]@yĺÔĺՆ =f!züވ¸ăÄ5Bƒńôýo|㚢íXŔ 'GtŘ|/áC4Sę[÷I‰Š 'ŞĚł@Ü …´łĚ™Â§Ćž!×ŕ> Ă"árŹdO˝ˇřZCŕ]ŇFĐWđץ €!ő˛ ĚHm†ë‘_ô/€Ođ˝°U8‡#~Ç}׸žÓĽB šiÁ‰k€€ŞľęśßĐĹ舚Ź;%üɟü‰éĎ-şçŢ{čŸ˙󟧎žő- @ăéÉüS5 żőˇ>bçżLß|ţł.ďĄ9c(œ™iĺć§ŃŹ›űg“ű- І)űEłŮŕ¸č2/^ÂëüĐý'„ Á<ƒ9 ˆ#Žič‡řďšüTč×~í×ĚXÜd7XÚí-NëÉ'ßhęă§č?˙çߌŸűšŸătćg~ŚWź ‚˝ČťŢő.6î˙ÁďŒĂl-,.Đß˙űŸ>řĄďJNŽxWŚűîť×´çÓŻ˙ĆoĐ_˙ő_›żOň~ďď|'ł^`ŽFXé'ř푇ććËËKźĎZX˜7mż”\S2ÎłĽĽEă4ąýď­o}ŤqG&˝˙ ?ôŹżú§Ÿŕ~‡9dDŔńBä"ƒńÄŐVŻŇ#÷Ľ§_şbćÓĄMą$:nĚ&ů™?V? (˚”ś5ĎAf^Y¨íĽ™ŮEÚęl°cřę• nĽ53GÖ,łŔŠń đ‰çHnŹąĂŽ{ÍfjA:Vz†H°6¤>‚öŹ™y˛^Ç^ąeÇM&v°pŔbËUĘąwĽ™°Ś0€'Ž›Ú@vgÁ[í5j6f‡5Âľ™Ů˝ń­­Ą7ă•v”źČw)P ŠÇ˜Î›ľ1ĄŽkł+'34ˇgą]ŠŐœăr'sŐtÁg;' +ťą )ÝžîŹíťŠ#mŇ Jąšě&ŹŚ0^B˙ÇŢc=fľŔßË!1Y˙Ľ~íłe/°$˜Ô°cDŽíőmFŮ}Öw9@’ ‘¸ ”„ś‹I{Ú¨Bv”źyf7cݐB )äFĽ˜o ůV“Ýîä˝]ţćíâݛňˇź|ő.ŻRü]Éyá7XýŸůéŸü, U8!=1JţüÂ"ÇĆYœËú´=D÷d’L.őŽjy÷dťfĹĆeƒĐ“ŒÎ‡ëŐ@ Q`H'5ŒČâh”tľŁŮM[Ňҧ˭âT˰Qˆ˘(€šŽÓ˛jgł(1ZŃą—Aň<1”jŚ×Žř,őë0¤ţń=;ęKV„°<‹ě¤¤ęöÍko'÷u”ßěsýmßë~•ms{’IęWępÓ^ÂŘ ŕi3ü¸ýU Óňf(qr](DśŐ‘wă§6nĆppŤ˘ëX tuŰădçńăÇšošůGť|ć3ŸaÇPŠä%1†Kű”€/aŃɎ3k´§ĚGpv +SsšąŸ2ˆ„ĆŕUŁ'N°s1O„uAç]łgč1§ó䶑şÄ­[m,Ii˝'ě°üžďů6 >l0GÂZ‡ŞäUNRá%u ĆĄîdCP’Cƒ'žÔžC vp*Öh7̔y@Ń~8I‚{al‘vCšŽœ`E:ČŽÁ}x!M ÎA~QF)ƒNp/žˇqŽS0“ Qŕ%ăyG8EPgHOՌŻŇźqvĂáa5f(•ČăYęiŐÖßĎÎ=ŻĹ8ź[Eϛ霒ţ-c#P.Œ_źĂ<[ĐÜĆV—îě}š ‡;śĐ|đ~*dş`ě`šc %0VŔńýÓ?ýÓTČ++˛`.Äüœˇß}%Ÿ…öźpáýüĎ˙ő~LöFśîBšo…tŘlˇęӟŞ{Œsˇg*kŔű×0¤<nŰ3j‰Ůůˇ=Ű˝N׹”ÖéÄŃ}tß˝Giyϲ= ÓöOŰ[ި¸ő|żO3ăĺÝĂ0€Höă cQô{CłÇűĐ8™ťÔŢěšý\—66;\˛“ü¸ĎŃz8Óô—Ą#ŸVŢťź`˜ęVŠRł!DŞđb°ŽMςƁĽÚďvú´žľI/ŸťH§NŸ3{Ň!;wÌˇkfI(IÝ^îKçuűuŠ1˙?˙Č8M™ÁţP§•NÚť?/•ŤŞUüŘ×í:|­ĎýDĚÜƆˆlîËĚNaÍB!ł8ŒHźź>úĽTáĹ 3>ÔELᖒWfÇi˜okŃšCŸęÁ˜–ý1őŒłž1ęћÚ/Ń˝ƒ ´UnƄ5ƖdœĐ_l>Dßhě3űpŁŁ”CŞŐ‰j€EĚ˝C˘ŃŹ%U`|™2E° ™Â% baŚ–ç‰YĐV`ʁy" ÔVă˛<0ă%öőěřľ ü6SčŔž&y•&ş°‘YKlżK™[S`?%{V}­fĐöšn8웵~ƒmƒËgLąbŁŢxš­ŃSűbaňHŔô‡“ü°sŒl{ pˇŇŕ9ŕCj×=X ÇZÚĎŚőm/3ˇęCöďě!%šs5Â8 p˘ź•ŞŃĂJĺdžMëQŰUܰŃSęÚÖIV/—߲ĺƊ.›fxr­ Ąía‡UŻ‰$䕵]h›Ú/ť ů7č´şÔ3lşGĐe#R^žő<2Mnvßx3éę5Ó˛Jôř%63”yĆômOěř)ĺŚĹvœ({„Ôth4Ľm@v B§G‚ ÄmßźőTŢĺ×.çJÓŹ#ďĂĆ~ľ4oěŕ5“­Í°”ąčCö˝°Ü.y5ě7’ˇo&˝B )¤ëÉ4M~ťą,ß%>ÄUČÝ'Ś?ź“,Bw+~œWż‡ęŠw÷ESţŢéÝýěĘuËť†Á‚EŒ^|:'uZęͨŕ˘Đ"U)WAŃ´qrC+aň›íĈ¤ů^;žadÓ ’~ś6dši¸NN1äčp"˘0iƒV&†ŻqňK°c×Ë2h‡˘ĄH>5EŔĐ –žhqm%fńpŠn{Hp˜h ŒČN~]—Żô†2Šä™YP‚OLă†8ËĐćś(Ź…8k­x6)fœĐ'Ý YƒtŞŒI?׀WŃ՟ő˜É3ź”ŽĄË!×čůÄ͋Ř$=ĺ~}”őńÇçšpÁ(FÝW%TęĆW ççDŔršÎ Ńa¸ LzĐuŒ6GÇd.ś *$6¸Ě›ČŸœčpŇFŢđ.ŽďI[!Č/Ţř„둞\ƒëežÇÜ%ů8öoOľ ăčŃŁ1+5zzv• )¤ëËżřEfłć „M:X, šýr;÷˜˙ăüôĺ/™çŐř¸3ŔŁ{ě?°ţî˙íݡĚ@9-œ~'ƒ0ëäűžý˝<×ëýŮő+;É=÷ÜC?őS?Eż˙{Ło|ăiú­ßúÍ$œÖ3żí۞ ďůȇ˜ äz˘u’Ű%•r…Ñqd÷űĚ6S‹źçĽ8D#ŮĽ“@NdG\ˇÖ0m÷ϲÎ[+ňí'ëľ%ťo×§÷R.ŘÁ:&ٌŽ™M“Űö̓‰ ™˝bńëMžŔdŃíöh}cÓ˛YĎšGXăě!~<;ŘYˇčorďz;â{ç|šm^ĽRŐ:ŠPöôś=M{ł2­opż‰uŔh”ýý•<ÝmĐGńő}$ŒQl™1yĆČź†Ł1 #-0¨˘?2{;€o´‰}`Č7ÁšŠĐ%ŰĘ;NÂHÂ$xâŁQŻ0ÓSłQ7cp–ćâĐ~˘;°;ZœŇže/™' îÉSŕ˛őtcňj/Źťyžî[Rˇ0XBÁžŚŹ,'8~ç“ZlĐôÄmĎ9ršKň˘ÁTcdű9úœFBMiŻKY0‚Ř,ifI)ČKň­PZqן]]ŢľAO§™×/äćzňÉ'gŽF éălô__ç{PV” Ć  xá;´ 0ęČÜ"ŕ ü-'A$œ‡0…[î€ ćNI틼ÂP„ç ăDh:…MGƒ;„1ß™–šÓAW’yHŔ9x—¸î(‡f6a?A>q"!Bŕü{ Ę&m•Ľ-¤Bv‚˘LĎ<ó ‡sÂxüąű1ž— yĺ%oş]‚yôŔôśˇ˝NžV­ĂZć0)˝>hńǜ8ÁŘIƒ|ąóUŇąĺ §î߲{9˘ö J}Łď›éŔ’Ů‹ĹţŐ´Ÿ˝ňmmA/!ƒ;n‡ăgZ˙äňgŤ$wXG;Čď#ž`2ś{j„UAȏno@ínŸ":>ƒ:ížeVŠ–š‚•ƒë•˛:,ä‰CÖˇ,cőz…O#ä@Môď’Ő|ŃŰȆłĂÜěÔ9_ăIH[íŽŮ'o2¸ăĽS§éÚĘŞÉK‡Îœ9M`.!$‚gFƒ ěÉů´?[pQR'S^ůżŤ>ëĺ,DĎŃăOtVű[H‡–Ć´gŽJWִށ3žCćlě„/'ůKě4ž¤p †‘ĺ˛ŔŢĺóbö˛Ěć[*ńA&Łs™ű°@˜aŰÁآblě “-Œ{t04Îa㠍FjLôČđ‚ü0CE§fœ§­}9z€žjž ľę, Ťsö4žs‚0HÇçú/•"KY*7DŸęݰ˛Lł>ŐĘcš/­‘ŃŚ™Ë* †>ŰЁŹĹ˝¨Äül7@šőÁŃě<‘„řaÝ,˙Deš{ŤĽ1-Ő=ęeóŹIf-qő{ąÍh;ŠžgŇąç7ţNíMŁ#hŃG|ŻÍóp˝Öä98ŔÁ‘ɐAö B…ű:Š`ŽŤV꜎€ž’ńEŰú |Żíw.›…ýŢËčÖ".ŕÍľŠ¤óDäčëi|/a/´@肢żĂžŁ›l˛:$iŃŻS==ĘľˇědݞĄŽlČ ¤ Űçp4HŘOmČ?“݆î!œţɸ§€ŚŰz|gëłłó2Eôj° ]*•k™śÎ22äÉíÜ^O´Ëľ;j[Ś\+4ô9ƒQ:ڎ;›\VŒřÔxŔóB9O żŁžąnŁoë5(ťONMn^Ü}…ěy,0'koÔów!…\OÜ~âęn…RH!Ż´ëS!ßjr,,ŚUĐFlŠ… †(P_ó˜ňÚ Ń RĐĆ-IÓ=őÍ9󶟔Ҭr2Ý͏ .Ł˘œŔ–k´ƒ]ş8%PŽ•ktHaş'ŽUÖ\ôź5ržńýd’Q¤ňNŕ:KĺSV Böž<%Á âśŽ'Švüę2JZ7%QVéÉş=9q:”%bđ&꤈ŻNDIŰ ő 8Ď˝˜ŞOÚ7-‡Đچ×X˘řÚ  ´ńKÚ]łŸČýşŢŚŐß4…7rťŮiíď tô¸ŔgaIßt]ö é×ҖbÓßiă>˜Ś›Žä *JÓ§ˆ! *)‹ô1Ĺ”¤n;hЄ{ęHŇqË­EƒsňĘ?­ÎĽŸáÎLź €!÷ŁŢ`xÂéwaň Žżœđy€ů,ĎĹ}АPPBú‹HsžĂł‘>^"ČîŚ Dą†ąJҐ™…eׁk…uůŔť°ÍK…ÔʅźH¸émŕ:|öW:tˆŽ;Će@ŢpҤP~ )dw‚˝Áw~çwňŤWWn÷`í˙đӝ)ŻÜíîWnFŔ†đġ=ĆŻ)O™zŻťĎŰÉqňJ•Xgm¸ŠT˙şn9š-§„qJŕ‡rً­ć{0‚iţ֐Xю7 ˆ°{Ď9}ě'{ëđÍ:?HQĐëÓÎşŽpŸźŠđ%_Ű÷dĎ/qڀű8ÚA˝g çˡ5›ĽéűsýށŐóy­ăŃҨ÷)Éłç˝ňăV÷ßI0IôÜÔQtë’ďđ…ú1zD–Ľb2fցŃІ˙˜˘˝@Eý‘eޘŒîSĺ˛OľFeŰóěžÜraŔ)^­”9ĚGى°pÂUh~Á8Uvú—ý˜ńŽRƒíFW6mÚŮlӖÉĂÚÚ­ŹŹÓŠÓg˜yɆ^Ú˘­Mƒ˜ž?‚?žŸžŇ/R@­‹<€…vOĽŔź{2ÝGôXŃuR€…Ýë6ł˙ž#5Zm—éęZŸ6{öd¸eëł!údʁ…Ś„ňyF,PĆô"ó]‰Ăm 'ŢĐ †ˆҰ~Äľ00Á3ÎߙI—ŽVɸ„É47͌×hOĐŚƒĂuzš˛ÚŐ&ůćš/ÔOŇ™.UgŠ[ŸGč)`7ҎpŔi<Ńš@ťĂ.‚:çůŕ ÓëP?|˜d…6şU|„RŤzš3§L_2ú‡)Ç`lt€Q‰á"(3žRŠĂj„^‡xŮ.<_A§÷,H‡|` Ü‰ŠĽĐ¤í7čČBÝźéôEÓo:ý\=Žç†¸łČXľĺKçKyÉ*咾ŻçÁ<đ‚N+ëŘN˗7Ďŕ;ŹE•Ę<łW€˝ő€qjô55Ôkuž?(|eô~ÇƕWśěŔÖőÄthŹ—č`NŔw2ƒYţŚŠçŠŠg^ýl(řéDmłuÉ"]ߑşp¨ 99úŚ;Ý ŐxP3ĎDű–+i( Ióľ˝vçŐsŢďbÓ ˜9˖ó÷ůÉ(ĺ;ś}{fÎĚůł™}’eˆÚÎR!ĎŇ6QתǢˇÍ–ckTßť“]§BŚIŃ_ )¤Ű-Bîvškâ6N‚ ŒqÖآŃůY%jşĂŐu.Š‚Ąšś I xUfś+śZtZîIIß  N` TĐJ°8„uZšĽ@ň§ˇrŻ|—L†‘šzĐĺӎdOѓjY+núďu™˛°rr& ŚŃŒ'ÓҚ8`Şiu*ĺyâ‰'Řđ€ęĆ́ď…ÍFć=a­zokPn'ya"‚q€\‡qç ŇÇ éă>´‘€ä^ﴒ0GČs""íC/ŽĹgäŕ¤)Ź2x†#d~Ĺ;ňǟ´^[]ž'ŕŽGƒÜ.^źČ'ě ¸ďžűx^Ăő’Żiaœ )¤Bî4ö2Ş0ŕíNňö\ŽsçĆĺÖę^ü5 řívŘ † "ý„€…á*4ŽHv\Ő[ěHŇÎHj}BĘŕž]Ń][E÷áڋä8š%-ĎK~ޖNęV“źX}”O3Ç!ĺĉĂ×űÖiWňfhT*óipĐĐădpŁaœ’^…â3îN^lšY'(?1ÉŤÝóLhĐ5ŽŔ˝sDšĘSDˇËîe÷ĄX„|‚úVűŚ–<(œÍ!â—OŹŽ†°° € 8ťíłT Čżâ°˜Ő˜Ž!:[܎n1ƒ\hî }˜˘ŮŞÓěLĂ|Ž3íž=ŃluޏăEŠ.`üľMłWŇĘę:­ŽŽ™=ç&żpžŽ\žLëkŤĚDÁíCq?ćTˆOJ1늰Jˆk%óˇçy×}eřéŘÉű]|PĄ˙Nu!{đNćKDKfŸyŁBW×ÇqˆźďŽŐŞ–!¡:X'ćP$Č#5ŘpĽaœ9łw7_ľ†Ťä™ś>1^Ą˝“M*OŒ7éŃŃŃ:]őgéĽę"çĺěÜIú&=@/—iX2:ƒWcôEÖoŔ†˛Ž€""Ă5Y'łFĚ‚04`xV)Y Ď2mđüƒLßů—id~Œ"jšyŤĺßoúŒŃ[ęg¨ažëę<M fˋěüÉ5LÇŔ„ (L`ń<D%ZßęÓLÍŁűíĽS6™•Eł>$v,™ßôXň˛đ Dˇ, C§>Űd˜Aalýv.ĝ…Áálçś _Ď÷FaŇoŇ|Đ6qY%´MNŰ9´­mťl.ˆžŤĹÓí+̝Sôő’OZH!Slؔ.mn ¨ë”XË('dĎ4‘çˆ^Fc[Ď;[űB%óŃâţÂk‡_ÉđpŸ“Őó‰ŰD׹——ŻxłőmA1ýPƒ0`qÁÖ8` ŘHŞ•F˘wkÓ­ďi^ÉÚ:ěwb×s_Q”J3cćřyśű€ĄŔ–ÁöŹ# vČ ą<ű‘ۏ˛Äđ[‹ˇÝž)ɸéÝ)u[ČëO´Í¸B )䕔b]*ä[Mť ĚĂŕ1YÔą8Ŕą9vÁrŸˆVÖ4˛X”(­ŹšĘ‚6lieTƒ9ôgš×u~ëďľSV§%ÎAq|ę2šŠ¤ťáÖĆ<6ISŸzbđE)Ľ…téĹIęžŔőPD´1SÇ%ďšéBž“ku;AYƒ"§Űuýä)5yťţNŇg¨Ô­ź#o’žäQž§CH>tŮH…VŃ *ş~u}䱑dÁŹbŽ Ú`ě¤\’Ś66ťŠ¸ :Č#܉‹ĺNʁ[ž<ĹTʅ6‡Á/ŻĚ`*€ă_ţi[•Ł˘T­aŃžg64 b˜‘Řŕš]F˜,Ä0Pń‹" ՘ţڝËdŒjđ×Nu1 ,ĽeúTĎ'2žAß–a”Ŕx…qɆ7'Ŕɧ0PXBBk@ĚŔ˝Ö;ät%ř×"}Ąk•< -aŠĐăB˜c€܁ďpÚďҐgä ŒœďpżÄg•taPCšĚĽČŁĚYœôŻ]ťĆ/äóŃGeö ¸y€œŒŰB )¤;U4Ŕ˘P¨oNdO§ĂžV†Oyś´ëíÜűY†§†=šŽÖkއďąŕ¨ƒ#Ü÷6$M¤z%W"aŒĂ DXďoӃÜ2óÎO)úÓp$Y€Ş8ňtľ$:#ٰ%ľW`›?;Ŕ‡`‡ŠOőF“JĆ) g]żßĺ˛ĎĚĚň aňRC+Ń6GŽuÁ!7´ÎXě Q^¸†Ă™ĚžÔŢޖśEś&ń6mĘ´É͊ě§íţ3b節R;ý‘é+ć56NnłoëuĆáŮĽöV—6śÚ4ĆŠä0⟥ť1KE˝b´Ž@qÚńw@ţMšŸkŇ X*ęű–Š*ŸOđgŠcnďˆY2V×7h}m‹ÖÖ7éÂĹKfĎ öŒ6żVŽ]á=čŹ-œJ쐌T÷Kt߆ŞĐ ÝŚr­|ŢéeAžăŔÎ>oŘBôWWPąţ˝^÷M˝•éŔr•.ŻÖéęú€O˙ă…}8ó|Čßł 0”ě‘z/̎6Č3mˇ4éĐcý3TE6Îçr8Ś˝ă-ęzu:]?@—f÷Ń ĽéŞ×˘kĺŐ<łGŻ}=${`D˜"™&`6 R DIŕŃĄˆ’zą@‹‚Łpz—JUű=ú7¤žx?ígâÄěéƒsä ÔwMżëSłśLucŤZh\Ľ™ŠŰôCŁëřŚž˘ ×F•Ř; oĆşá„Ů,JÜ(Ůŕˇţ¤D/]îё`…î9ź‡žňl[őéí‡\ňl|݋™‚a|ŔdĎľĽđÖ¤rÂÖY)žWm=ÁŚßëRŻßfv(l8ĺڔDďu%ʅaÂŞ ë&;ÇKYâfŻc†€\ť€ĚĺzJ×ĹśvPc@ĘŔŕ‚˜ˆĚXŢŘ\§RÇçP(ÖŇŽ+’_9\C  BćďÄÖW˛lłťÂţ’°g–2cözâÚ!u{ťśQ„pą5׍ Łô^-ä+hź^Yöű’°)(łĚŻŐ~†ËâŘ m]™ŮkÁ$fü[lAS  ęCŰkŃďÁZaŮ,z\nŹŐ` (˛ŮœaИô=)ś—€2őú+żmoĂň.4ôú¤”k\çž*HZR^˝×Ěӟ⤔ߠŹčď5¸Dž§A‰Ń1.+ž‡ŁË 9niŠąäEœ˝PŽP?p”ŠCU÷R?6Ŕ:ÍËI^íixyF”i[ýŘÔ°š2HzşŽĺZ­Ŕé~ćÚĽ ´QË5ŽÉť6¸mé*œŇ]y=/‚R.ץUćEÂUČ5R‡běЧł,‚’ţ đ ,rRĹ}É\g‚=Ւw40BÂőŕłäGUđˇ0Řčr@$ )—ťĄqëEˇ/¸Ÿ]%Kž—y`ďŢ˝ülaŠÖ ŒQV\  ažŔw]HŮ16QF4đCŘ)$\ŽCˆ€űQHŸńBZ`•Ć |‡źČ|†q/\†|HDÂá>äăŮgŸĺ4Q_ˢ6¨#ÝÖň7ň|ľŘ„RH!w°¤Îm+ˇşgxýőv*ďÎPž"Ú–~-ë@@tXÂŰąD߆ŠČOAŮź×.Wىęsœ’ŽúĆŠ1f'ö~ěhĆވČSĚÁś}—-CďÝÓú•=˜Ź˝R2‹˘÷Ć)đ”’ëô~<ŠÁ´Öą'bOć Cž;%9o˙ĘĚ%çÇpľÉąÜ777hŤ˝ÁĄäŞŐVFŇá7‚pDÚ@t8{ŕcA‰’z&Ŏwťş™­ÇŔ2&úâ+Ó¤nq˘ĚŘż‰s˛? Í~ŹC[›8IŢa– i‡‰ŠϗĐ2ĺ¸Ţ#Ćś¸‡Cw(]śŐlĐ¢Ů/Îľ¨Ő€Ł´Â÷âđŽ8wl0ŰÚpBWŽŽÓľ• ş|íď176ÖinaIL>ˇ6ÍuŇvfź•Ä:HőőŘÖŕŮß啧o¸şĄŤ÷ť×IŸ˛ŹŮtôő—t˛!Bü ¨B^ şëŸIwŽY˘Ĺ9ł§6{čkëŘł[€ó łAłsóԜ[°{üq—ö ÖéŔx‹ŽOÖ¨5nsř—š OżFçĘ{hłśDQĽL]§NTĽvšNăRHúż_f¸DděBččĘĹs/WŔ‚žYňŒC´l>›>Ѕ‡žĹuRŽÇ\dűŘ,˘`̀(Ëu§Č†ĺđqëD˜ƒxlžĚýŹT¨c~ŠŐ›yíÍÍžHłá uŔ2cž×e™Pľž…ţÁ‰Pv pbň4á\„ĄĎŃSLič @㋴\ďÓľ~#ńťëŠś  ]Ř:ůZ/äč)˜ƒ+ŐYnG =aí"Š-ÄóҐň;އĂ@1ô÷Í­5ęt7NetźÖ,ł!Ř{ä>?>Ź@ťU^Ţyx^fěšzoz¨DŰŤ\֟8ĄíXÚîUr˜EÜĂHrm•çé*‡ę˜|ŸAý$죰1BŹj˜„ýâ4™}ŃĚ;eŒR…çߙc´˝Č-ˇKdą 9~÷ňt. ŹŽŸ]S˛L"\CĄččş/Ĺí\a žƒrA—†ÎŽą ýúňífÚ&bG°€Ąq˛fBPшôęůË#aîŘ.¸妊6eöJÓż{ýłyTĘő„eS‡žľ÷–rm2Zvę׎}0ďţB qEďqÓ5%ĘjĚť§B )äF%YGsôˆŰaK(¤;AućɆ_ÄFÄľMŠ2Ŕ%´ƒ82…EA;9!âP…¸ÎHy×N5­ čĐ%úžźÉ%5lděr*ŸÇ1şZçQ€ň%T3ihĽTNb#MmTÔ …>=Ŕ0ŁTqœŃ¨ęU9Í%ďŹTŁ.ČŇm"&-‰x´â\Ô[Š#ý,_p^ŁŐŮXŁsłóĆ Ú´é†^rZĂmƒ<ç˛V~ĄÜBéăSBqŰBń§ľ8ˇ%ÝŹSŢKNXeՋűLL[J^b´•çËý˘´é0 Z9răňî#îbä*WşďhĆ )“ÎWŢÂć÷ĺťźgŢ)˛›żÝn=ç1‡Č}P’çćfšďŘÓ]3TXc„ )ń‘+?6ägű;~‡ă\úš3l_ÇiŒUJŒ,˘řŒÇ`T¨)9e:ßnůuYÜżÝ9Oę’Ç^ĄA2×ŕ3˜ `cqƒ ,貈CF ůŢҀ§§Waˆ(BƧ)!ôáx 8¸^ň#ăYŒ2WâÖ üŽg‚yŠWü#bF ¤/íhOÜÖŕîÇÜ"ĚĚücŽˆ™O:ĹĚ÷ß?ł}@÷ ČDęVł›RH!…ÜŠ"늰2 űŽţ]_ww„oŽ,ŽŃüŐ˝'r÷ٞ/5ÔuäÜÎ ăöןçh‡ďőňs§Šk(ß RăU3śčű!PŽ=jáŤÜ‡,Âś;N  ?ŮuA|ÂËĎlЇ1.ÄŠŽÇŸDé>˜ö &œfşfؐśИţ[ˇ™ˆN_˝XُO˝8§6ěo)€ˆ„L9 ŔÖŮłgLą˙~:|ř0- Ŕ ʍżąÉÂwČŤ8&ŕČYXXHŔř^€z^Ä3–%d˘,俑>Ć:Ž•SYČ7îÁ3\†öŔux†´ľŃĐĐŚ2‘ć4܏2 Şf ĚrbżĄěč/§OŸŚË—/Óɓ'“tEÉĹó„żá;Ízqw9" )¤ťQ0gb–ź=r!Ż¸zŢɞëGv;÷~aěM`Šěedí‡Ă‚Â%œ &ăđq“úĺľšłÖą‡LŔ‰ë f/ĞÉޟęC„nĹONJ>ĺ*bŸŠ#Mö ˛ßâˇËď쨍ž˘Kg€˙d˜\Çďž˝ôĺŘ?0E|˘Üî-łÁLh8-“ŻIěTŹS˝j´üV­Gó-ŞřiMAÍ:Übp….›Ý+Gi=ęö m¸ëđżžîŚ0{ęxóÓ%î‰ĂĎä4FS–qp82.sSŘN§O++đśÍ>ŽËŔ‹jÝę§eăx÷áĚWě+–ĽBŸÜ ěŔ'˜k9עýű–Ě^Ýô{sĹôОWЁ <€jj ¨+Ű~#Z]ߤ^x™VWŰŚ_včŮçž1í„đwmSďAěäK÷Šž+”<Ÿ4€"ű˛Ď†¤Ź”ŤűťNÂ$ĄŽőĄ×Şďđl %×@w)ůŰŇô} }XÎü–‚)<çď,ťžcĂ'ÚďőóĆű=:ôéOÓÂÚL|jU:tÎ_˘S!˝T2kÉŇ!š,ĽČ8l{h× ŸA.°O˜÷‰ĚӞрY$Řp‹%f –ŮPÉ8?9ÄÄ8ä(!œáđďšaPŽý­bę͌5bv”r슶ü~ąVƒ3ÔŻr› Ă•ůąCň&3í”`ŕŰBâˆ#Áɯ™›JĂxüX– ĎŮYíy`sXĄŽ?GƒŕQS7‹t|áO¨54:ŇЧa“ű>€?ž7ćC'ś˝łŕÓ¸ ÔŐʰE{kmZnôÁ-@/]Ú`ô<Ű.e¢‘2+ŚéZĐ ;”ý¸Ćö'a9đźRîœ sœžđć­fŁÉzóćÖşÇ <[ĎüÜ3[č!Ƀă@Îł‰]L?ϝ›\ű›ţ^új””/ßuZyó][b0C ˜ĂüÝtŘ PIłç4LŮ댏íÎ&ÁpŹjtŮZľĆí¨í„¤ƒŃlĎ&ŃĎ­]ćĚKžŘĂŒÚHNŻ+°HŢŢLŠĽX ő ?P“\§ž@ ĚUÍÇa‡eśçĚÜ˝şz…6:Ĺ›Đ‰Ł‡č‰G¤#GÝźbÖq:Ťf,úŹ—c^B° •čʕuzéj—VV7ž<⚘ëŔb' ˜­ k K…Řń ‹ĎÎÎ%şś=fë`Ł¤˛Frš•ýN@.řÁ™F A;3“g,ĆąľÁ,0bż°ś˘xŸ ÁJÓí6.XH÷ĹכmސWVô<Š} Ňod‰ţ7;Ű"͢RtB )ä•Ě=psÔë)S4\Bł~ˇôŔ¨ť+¤×ŤÜ5 >™Źč\- ÀšRĽÄĆ(­ě‰M°>m'†ˇ<#G\§łf“ĐŹúoW™sČňLš^”G1ƈ˛Á÷˜¤ÄąŻŠ ]ĐNn•¤Ü2Dň/ŽIˆ8ő ˜ü$\î[ż )ĹŇĐéI}äMBhJQ]nIĺɜ˘'Ť4 ­ n—뉤+í$`Lępˆb’GšbD–z’śŐ,y턴$\€ŢĚjc‚äAœö4!ě&şOâ3 ŚD˛ƒv^Zš‘@çI˙Ś ÁR)ď´EÎíĂ;Éír ÜLşŽ‘ŃEuë2Ě#cĐ5ńÉ Óo€ö€Fkhˇ}BŔÂ: ´“⠐~%á)0Ƥ?ČřvÁ F ę2łŔ¤ĎşFaĽŃéŔ–žěĚHňŰs;¸Cד¤ă~F˝}đƒäą–†Ż~őŤôĽ/}‰Á9r„Çţ–xŹ(?X!đÁ;€řעޤ~đyßž}\0źXJϕ; Ď ž!! 0]şt)3h Œ˜‹Ô[YYIBI˙A9qŢń7~G^0ˇČü‡|áy¸N œ9s†™+žíŰž™+4ČDŸŠâ“L&mԓ¤/ý¤B )äN˝Wƒšó(ć.˝Öěźö’'ˇkîw÷vúoW‹“{ý퐒ړŠn‘îK­łČ˛ƒqůÄ38ťąšfs‹|*Őę+ł€ńnM’žvýýOş_´űę;?Źž3Ęě]fBŃ5 ˜?Î襀0‰ýÉS§„-P4f4œ Ďą€Ň:—'cąčtşČ1ƒ,pˇ^…Łt@ ő jVĆÉţ‰™ĆAڄ3/Œ‚ŘĄ“\k.›g™(ô>šźíL|ÓĂ´ţƒh;8#uZÆ+ÓăN”ď'Ý&­ĆŔ 8ěą'ŘšZŤŘýާuž˜u/a•‹Ë9ŰjŇĄűÓĚ,¨Ü+ě4,ĂAG9;íÉq/f3PE`Ú¨cö˙˝ţÎŸ_ĄgŸ9Ĺ gΞ˘ł/żdňmŒ‡ěd% aŻÓcÎŚ+<ŰG "DĄżś‰Üßbś ňXÂË%\ŰGŢ÷nHOĽ7íž4L&é{ľZ‰6žóťčsŸ}šŽuÍţžyŔ\gÚţ@H˝Í-jwŰŽ\ŚŮ™yvž{`ů˜D<žFŢ$f“ˆĄx6ŮśÂÉzv6čŕ˜Éb°ĆnĽÄóMŕ¸3ćî‚č\a‰&ŚTá,ňÂłiE‰Ă9;˜ńSŽJ1`¤e™&‚ąeĂńČ2 ÄaÄ> c&0=€cËłL2ĆZBƒţ—i•éĽđ˝ĆŮ^ŚC­OŇL˝O›}ăpúĚbˆtź!€dÜÄ#.îk~˘Ë`~q8 ˝{ćčĞ&Ýp†śćŒƒ\çJ–}"e*šQlL%1@*ƒ+âxŻ$ĎÔú˘Ě‰Ůšéܛ‚Ö*´gů -/0ăşM[í5şśr‰Ż_ZÜKćŹ ße=Y˝-$ ľ¤çŃ}őÁ'=ÇLc¨Đ<™;ôťžőúĄÇęĺŽz‰îhÇ|Ő꿍Ů$÷ÎĎ/˛ó˝ÝŢ +W.0ťú8˜<´}ŇŽéÁË"aoyĺűßçeC_mo„™rÉď:´ą>˜c€%(Űú!~KžĆ@ pĝkVčĐň^Zœż—NœŘO÷œ<`Ɣą–ý˜‘ÏmšCvţžŇöš;ľŘƒh‹ {¸]ą.€˝dssmp:ÍÍĽúž­ß hčlać9Ž Zˇ_!ßş’í{iˆryáo„Ľm6ëńüM…RH!ˇMÜ}’ „Í{ÓJ%{8Aî)lD…źžĺ.â…Ígƒ Nš@áFLÓrLŮ/F.Qě\#˛Đf‰ČĆV”X ~ CNZk‡ľvÖťcí—żE‘â¤-ƌ"}Š{0IÉ󴢤óŻ7Z’9Í­ŻCú٘˛Tň% ě”őłaä4¸>ŻRFţť”N°)EYKłń@ĽŽ¸Ü@Ľ—*ÉIďiԌş´˛Łä÷üůóœ”.80Ľ|7”‹N+/\H‚†h›’Şű–¤éz´RŻëU;őľq`§EFňž—–[&W)Ě[ä;uşnźš ŕÍ>ËEüť†ů íşwďŢdźš×AŮG˙1{[oŔĺ@Ϝ.ŃL$čÂ>C ŇÇłäťÄ á Ýs%Eŕ4„oZMŇÓy”G|BĘóË´ÓźĽ§)íI1Œq)“> ăXĘ.išs“ü pĹącÇř:„ż¸ző*]źx1vtč™gžĄ§Ÿ~:ł2Çđž\đŘ"tť ŕ×ěŮł‡Ű€AÁ"x€ ¸ףN€ ʀ4„Ůâʕ+|-R/(ˇpB” şÎaxÁłeŽwéö )¤BîDŃű$ŇaΕÓŰÚéV„w'zßŮé´ĺ¤éîË ŔPÍŘđjH¨Sďo˙˙ěý ´,ŮUďˆČáfćÍ;źů˝š^UŠć’Ş$FHČvƒ13 Ä` Ät˙ŹĹb5îe÷˙ˇWcźÜCťŮ,mla„$KB%ĄąćyxUoî˜sfDŸoďł#vDćŢŤWRŐŤŘŻ˛2o 'Nœ8çÄŮ{űŰvŞ ap2FKUÚ쏳ăšîÁf`„€Á“`9GîË´ŕoŐżT´ë^ťŢ˛ŔLŐi˜5!— 0+Gք1;ďqš°UősŔyˆ>Ą)θŽâŇ>!GăśZMęu;ÎÁÜĽůz…î™ĐÂ܈AżšB@ő2žFÂÔ nmuŠV×Núg-éĐđÉĆeœ:ż!ŕU:ţL/áÚđҲ¨7䪏żGXLŚÇzœŚ_T-ˆćî÷n]5pżÇě,ëĺžI+ÜÚk­ăîšĎ‘Ńs:ľŠł^ÚG˘ČőşśOᜊkťVłA{÷-:.Ŕ˛sÎů=ISb0ŘŔłSĄ”g"މú ÁsÇOŃ#<1=sě=ůÔ㮞}‰N'IŃ¨ˇ|›řĘM#lżG?|ôrŃ)Ź”üÖš…ţ.‚ŠÎŃôăA)@" )="‘ŘáĚň,ŔÂ^Ó2Xdçä`ÉƊü˝ôŞˇŢMţœSŽÖ]$œ6gŃ9dçZ´éÖĂúáôÎ )RsŮe$žgśHt=R8w-§#Ą°NľČő1ča˜~ !ëJŠH@`HČI ¨ŐÜ6§ŁCNa0‰GĚZÂ)fşXBýŇ~Ĝ˘€ ŽGÄÇ žŕ>aƒĽńIŞ2x°<ú#ťx9E͘ƜŚě¨ęn|„FŐŤčŠá›iŽŇ§ĽÚCÔBŠ gvŘě'ědFS۳帺€~š×ĐśŚÍE;3;ËŇ~jÖŰtÂľďB+rŸ!íqĎq઴чMÂÝ?;ä3@~ 0÷Qőě§Œá ˛9ÉękÚu.,:ďmß×9šůůckëçéÜůÓT]_Ą…ö25Üóޞ~kÎń”íCË+Ž1t›eŞ-Whł$łĂ$~~˝ :ehäw‡gCE{~™šňCŢ´ĄÎ÷ýn>_bŽ{:}̝S§ůÖ5[mŐŢI˜…ź '–mPrłŮ2€ŽlĚ.E[ží?|Ľ„hSřâÝľ´´Č€şŹŻf6ŃËĄW”RJ)ĽĽ¨GcŽ4ž77ťšíYnŠW–Rʋ\Ž€…Dţc‘.NIB Ô"<DěŐE„*öQ1t­Ím^ęä×ăSĆě26†ŒÂ%ěB؂EEŮaě\A”ő'ĘębŰÜömuč> ‘ß!,Pś'ě؟ŐŹC@ˇu° 0[揹¤żuŹë¸°ă &Í­P7ß|3`€ŕ)2đÁąě¨ősš:䟼N:œ‡z(ŕĄ:lósA}vŔľq-me`ŔÇ<Ą%|jŔvulŔp†2q¸Žź[†|œ2cXg˘­pO(ŕ °yTÔ28ç NęŔÂő8ZkϞP!y‰ťĚ ĄěĽá¤”RJy1KńQ'ĚĎĽźxeťuݗkÍgqd!ëk |OźóPÖZ8Î(ôłMÎő¤ëoÁ;ĺ”r;h 4"ŽČ1Ů×+ŻÇŇˆ[Œ­N @UŐąp>"ÚĽžqĘ"Áë˝$IA´X'  ZŠ0tF.Nľ(­^ŤÂŃ\­JMˇDZl:'^Dě´):3së†ÔÝă|{Ž˝d­Ô˜ŘbęssŹ3ëşHî1đőŠma”1pĚě@Š;đĚôžt}oi7źqFeŕü0PG@ÉZŢÓvç°lÖĺް6L<=E N¤•čuú|ÝNgČŠHžřĽűăwƒ×˛Ď<ý­Ź^H­ŔŠč{(ßwˆž ‡žFPËó%R0˛ËU˙점ęjy‹"p!ÂS€ “"„ÎţSBĚP„3g@Š`‹}ÓŠD¤ů~Ć ˆŢţú%úŰ/ŽŃů• ä¨Ds´´\wÎć!u;›îYŹ1ƒK{žÍ˙‰KH‹Ăş!„y…S}€Ä Ĺ>Łœ(PFěŻלaT#řsńĚqn\€A˜—Ş> Ř/‚Ŕg„”TqŮŽď8§:Cę#|!]j2–gÎş•gťˆ*Hh" ŒŐĄsΧŠZ  €űťf|–z›gi\;Lýڝ4œŚvý,-.őyěŹ#ęöDžžŮőseäÚŤFsőŐÚ5Ö1íÜ €UÍÍ7=g#Œ+ÔpóGł6¤˝-§O ÄuwO€q : ţ ›K˜&ŚHbľßÓK>ÍPŢ)oÄEŃ)uâS1ŔɌůťßÇÜtžV×Î1xŽŮtö z“S×DěüOŚËEű†Ő{­Žœ›ŁĚ<ŠŔ8"Ë ‘Ůř„Q°—FUđ­0dˑňăô~%5„FLK‹{iqa/ G=ĎćąÂ÷ v"̢Ë 2Ş"`‰“é´Wi›'yűűYŃ—ś†L<ŢŇ5‰}„<ĐÂý¨šŃŢĹ9:ző˝âúýtč€{–őĎÁü̂ȿGä„qÖďwiŽQsú˙÷|k ź<L€ë0RŤˆí5ćŠQ@*¸ăĆ|žęŽčŤ^u÷Ă +ŤôčÓ+t˙#§čŘq׎k˃-bNk“\'¸oŮÚ,­ -ë/”k#ۧŠv¤Ź=#Ő OŁ?a>CZ)Ř$ČŁĺÓGžšd`)MŤ§Ď@Ţc0CĽOŞĘú­ÎĂ{÷îIÓ?Ů> )ÁĽ”RĘ -E˙$üx…â˝gŮŞJ{w)/ušbblË)ä‘nwŕ 5 WĎępłé 4m†uşC,¨b+4•5ԉj˘”ąTýž5‘äsźF#YˆEžęq–i#e’0 Žýh[čýC`xłNhetšrŁŘę`<şď;sÎm1ćľEŞ]”ŰpÎFňNűdŒŽ3´ˆ"hAĄˆ‡óŽR­§–iÓ-Řt+V9WąÎđY Ó"ۃ^§¨tŮăŠĘ›1ěưĺ­Î-*Čv[ąŢ—Ű ~š^–—ZŽ=ŻřťhŇ1fç{Ž:‹˜9!ň†˝@#x2 V.Ęr˜*;lS4bȜ1a֊Œb´ÂĆ1Ž3ĺ)×u,ęs”ˆLš2:ďG星kŠ} ŘUÔ°ƒú˝á o n¸Ç>ĘĘQp“˛ í@Q¨÷ă Ŕ?üpšfE™*JżÁXňpĘØĆ5ŒP…XěłÔë); XŔuq @8ŰPOlˇĺá:¸ž}† ~Á>Ě):'â8ÓЏ=ö>|˜nźńĆôĘŞ`…‚lŘŮ0’\ë)˛g·҇–RJ)Ľź˜Ľ¸–ąŰ!ĺ<öҐ˘ăeÖöË-Ô ąrŽĘľĹáŻQĚ @­×šTYŞQˇˇÉLcŽˆm3E9D×e‰‰ř…Ł#Ő[MEÂîqÖcôX˝.ŞfA ˘)Yz†—:˝-HÁ RđÚĹ9’ˆŁw3=jâ_ě "Jü?8Ȥ=ˆö.„΁Ňň<˘ÍŘ@}d˝hőEFŽ!ÎĽĐűűĽM÷i/6;kěÔC5@c§ŢâÂ×NCƒTŒŽćď-H]ł%ć5ŞOű1tŽĺÁˆ ˝ţ6{ç4p3ôő͍G4 ˜…ŇGÁ;‡jłŐ`Gş”磅ă$uŠéúÖln­\wĎnqŠíóŕ6ĹńďÁ YJŒĐ3pÄÜ`6üŔk ¨xâ‰ctň”°¤=ňČ#ŽÎ}ƒqÄ;NEGĐö•çĎż%4[œwúoq¤ÎrŇńł(-‡iAVß"Ť…,¨ŢŞăĹ~ôšŰ´E€ďCŸć"œ  ˜˛(ÖCži[€¸žţo?&LÁ3Ćž9÷űÍwďĽOߡF'OË8âÉ ŚsŔ:gsżM›ÝuZôş4ך§ůšyç{­xGłI$Ď×qżă*`IReĹĚ^’Ć4YjT Ü3vőA˜¸ą7šČqŽĽ,ĂŠ‡ř|€?"FD0­żťÎ "´CäYBx<3Œ‡ÍqŞ˘ŢXŘvC}„˛ °GĆ>#âŮvŹYżóuÓçAF•ylűöqc˛Kî3[lnŹRŐéQÍF›ÓU}ŠľŰh_ˇ‘Űé Ă)Ë,ÝŕÜřÄżw„Bćyox§(xÔN0J Ŕ 딜†ěžÓ–É}ă8ÝpäŁEĐŁłgOóťŁŐ–°K(Áśoqݕ$ů@¤Yö&mť­ŔÖV`ˇk=Ž‚m!ű—›tÍĄzĺ-hďžý…‘XęŘqZ¸<îßDC7ç#ÍĎň¤Čh¸vô 7ŘCa—ŕ넶…źu3[Á`Ăé8üł_\hÓëď^¤×Ýu›+†ôŔ٧čó÷Ł'Ÿ9GŤëÎŔď<’ŕ17ć˘Ěáłl |/ŰkŃś[´íčoľŸŕ74Hu†żťÝŽ­ńąč_ŢЀ {yNéZ#}^ÉDN]ĘE‹ľÝéŘŰĆŘV6ÔËmó-Ľ”RJ)JńiˇçSFďlżTK)ĺĽ)WƒE5u:ĆŮ=$š%š˝°ľ, ^˜ľÖČiuŔÎZlŰśe2(&uťĂÔHR¤šÓúčvëŔľŽZ+ZWŤ8YŹ^ß*UÖ!\Œ6`ĘË Ěě,ČÖg÷Y#5žÚ…œ:$mB™XXh§uH•Ę@ۉśc¤*°Ńńöţľ|5°Îb›°NpK5\źž-WˇŮs‹ýJąíq)Ćkí›Ĺk۸¨ŕë`˙.îŰĘŘž“lľ˜˙r‹˝ČVő˛ăŐŹ(x@XjČçÉLź“=I˙EÖe­Ń9Dűœ‚zlžO)Ł.ъ){o{o4Ń{˛)…¤,2ÇSę0˜ŐgŐĄ ĎľHŸmç°âœ¤ŽŽşęę”ŃAĆî#S%Ú§Ď@ěSŕűqÜő×_ĎŰŔ8qüřq>×Ŕń,ŕžČŔń\GÓüœŔ9[G#O  khS  ŘŽiAp Eňƒ-BSˇŘ>€űŤŒg¨7ŽŃô%Ú:Ÿŕ\Ô Ç`žyöŮg™ĄăčŃŁtäČŽę­Š>ôyŔpđśk„+ŽS DÓÄźXĆR)Ľ”RŠťNŘj­°ŐŁ4ę˝8dÖsŘj=ůBÉ,Ý)ŤKȎ=Š‹ö/q\ËZ+cy˜ŠuŮA…ÜöuçŔ¨Vę~]Ŕy2ĺIőDË™kšhlýŘhhfŽH˛ú +@DőJMœČž ‚bŢ)Ÿ$€ša`RxV"sŸŽZŐ¨Jű+Ԟi{DľjŕY ß&ëŔŮÚ/ń€ 5˛Kd+Žłďk=łó—ď_~0„ ĺĹƊsđ9'6hę¸Ŕš4ŔF)h„Ť˝ÝsőR¤ýX[ŰtÎâ>3StşîoçPęlö¨Űë3“J=|ľ^  Ń…ĹńN쏯ĎŐřţç[ ZZ¨śNsžÍƒ€r€}>JMľÝšłhŕşÇŸ 'Ÿ:FĂÁŘ­AWčěš3܏(„>‚_Á%:×iɚú3L×čůOć/ęcŁ+?¨ ĺ+×ýa”1_¨sT‰rűŠ)B@÷YduË9Ń ĐDHłR\ŽzDšnĹďó „ Žů#ő ŘVł°Đ 7Ţ]ŁĎ>Ńł'7i23;…kŔ°RsĎźÔ œĂ­™Ýoloş~ZuýT‘Ě|=˙¸ř=;[—10(dćÍžsáÂÝ:a’X(JОaœŽMŒ[.Ędh:*0ś=#öĚřÖ¸Ŕv€(ë¨Ň›cЍŚ"S}؎s­Ç,A6OR]ŘűTL%ÜlĚ ÓPQ– XR€šľľäÂl”^qę=:ëo­'ćŰZm?×€AôóÍΑ‚¤Vcç|f)ŽܕÉlVÔ˘^żÝz͖›>×@9Wdü\up^×a:´w^XkÁЂ6ô ™Նáôx7עW]uÄÝôh×ĆÚwä{ĐĚ9F>i÷š–o#@Đűhť÷Áë_s”nťů =öÄ)züŠ tâl‡ž=~–ÎŻnşsˇ7…Űž;k{ńzöˇ]CLŰÓô˛ă ÁŠgđŢŃ ĚͰY( GíEśnĽ ˆCtœĂÖŚűěqĽ”RJ)_.)Ž9 űlóź(ş+•RĘKVŽ€J’(ďń¸ÂߓI— /0ęD# Ů CcĐđ]Ź*+ţVĽŞŔ~%¤eY€D6–ÂŻxœ]xŤsÓ::óJ›ŇäF\ĽÎÔëŘz¨ĂVŻĹÔ"E#x1ŇŢ7ôďĐäT~kťX%BËäöJÄH%p<ÚÉŔ[ä˜b2ÉX5Ř) ąč~KڗDT3WĘ5˝}k+Ă/ę'%(ö!p”B9ą ˇQŘ6°÷ĄŰăí6Uęí3ľßś?eŤĹ­˝ÎVŠ•˘!zÖuŹbmËŰĘŃąaÖš/öEş5¤Űv°2Ť=śRVq,ć8Őa<‰Â,Îr˙?ϚŠBǨPÉĆŠ‘Z `L#‹ąâŒ gĚI$‘vžüĽEֈΠT‘äŽ+´Č–÷9ŤfľŁu0=z”Ł.67…˝”ƒ˛VŔp `‚ŚçĐ2BCSŠ`ŽŔ8#@8``ÅśĘřÇĄ<\ó7` Œu”yR݁ż1'ŕůŕźĺĺeoŔđq¸ĘŐ~‚24ťŇŰ#ĽţĆ5ř ůwń7ˆ'Ožd X+î¸ă>O4p6Ż;ę‚zŤŃuŃôR¸>ú˜/J)Ľ”R^Œ2ˀ_ĘK[śZ źĐë=ťNłş“źŁœŁBűZ({žč`&†€ŇśÖň(ȀΓ!љłŤ öXwëČűﻏV×VymvňÄ ކ¤i4Z_Ššäte):ĚýśŽĘüoĘŔiBŁ›á(pŠî0‹1Âţ­ß™Q2œyŽNDž˝ÂĽçŘňiŞ<FLłW豑Jř{)ŚIď5 S ,ü'Ť|{ćčMŻ:HŸŻUéńcŤÎů0ۋę/Mu0Z4Zîy ŘéŢti8čQŁŢtkç&Ő\żÔëŔ2ĂŕŠH†ž'ü\#á" ā;ćńÇľŒÄŒ…DXPWQǒԡ=žôýłŽX/ÄćŘ3c~n‘Q{v„XX2&2V9]‘ťŠCĚăś—F­%L^W‚~8wś• tfőľ6íiÝB­ć˜Ú•ÓÔwý{ŁçôĄÔ&’Ŕ?Ÿ(gťĘ†ˆ0㠜Wťßňó›Ť$Ě*0WK¨Y x|ăŚŔh1rĎc0Š7ňöŽdl$i<@:ˇ ;EžÁÁłílłóűŔڀTP˜ÇńŹÁNťššN˝î&ƒkŔ„27×{xiož"Ă(ľ‡ŠNÖ|LQŕߘ,lÁ˝×Œůb€LLŞŚ'b좏IňďN;—Léáé{@ ­&X-šŢéîŢg`gíŻr*™´„ŠIßi64 Ÿć7ŤC`ěEÉŻăüńIöKĎÍŽţ{ŞtՁ˝âčZhE xbűjľâí­ąoe ŹÍM7V{]şćšŤ‘1DÝňó’ĚƒĄŸÄĹöáç|'QږÚNAZ˄, $IÓYÉű}ą…4"Géľwß@gÎoŇăOžŁű>NO<}†Î­tř˝şŐňĆŽkˇ˛›ˇçézÁöőÄ<Ť ȗ%}ŻĘśľ ŕý‹Î°Ř °íęSĘËCôůgśř ŰĊŠńfIЎ•RJ)—[Šď$űw˛fGë-ßeĽź”ĺŠXd‘× Ó ŠS3ćEk%],¨čb6|A1ś¨ukęô,:ыÎxÝf4ýŰF<(HAŻk•4ť(Wِ5đe†Ĺšf)ŚČĹţj ƒSŰHfg?;)ŠşŤöMűwńř"ŔAőâ„3Ž™ÉÎĎ4ěąčґ×iä˜ dFÓuau¤ 8`ĄĄs*şď9çŕ>°Űę´ą9¤§;˜!ú ÔkpŽWŮь(˙.Xú×[œ"ˆ*âxH_âôţÁ#`š@Rôřq…şąíaâuDlj8nŐŚúűTďužƒřrüVô{ŹńŐÁomDę4­×ŰéÜĄ)yÄŁmÎ6 îć=W§(ŐčtŸť˙ejˇöP˝rŽććOQĎ͛à uzą0qč ĽĎIćĺ-,řočŽŕĆN×}תn "Ö5§;ˇYw:J+`0AĚ Ž Ÿ3t×ě ¨r:ôHŔă8{Vڏ„E(shk_J%I˛1LäYTĺ7ěx­Ę<ۉ´Műn.ÚmR­×aƢšş$0‡"m‹)d.Ă|ňCˆ›ss‹÷D^ŤäĆpa"ČŞHYŠ˘Ä×Uűwűždú ÷Ý ˜z/dˇlR–ňœ Ayßá﹚ťˇš¤•°zíf6Î>O˜?W'ą•!݆VYÁ(‚K…łÁi_ŽÓޜŮĘ|€Ô|#˘kÔčŞƒŽŸЃĺ=Ám8§UIä~ĐĆxVĐŠ¸iWa&›H҂ >Ą€ž07fŕ‰0ołQ€P2 ĺŮYě‘?ÄtpO“î=Jˇßtú4Ý÷Đqş÷ĄÓ´şŮOm.Ą/*6GŰG‹ö]{-*ś™Y§Xű ž:(%Ť]c@`7Đyƒç9o_Ŕ;€ ŔCş ńEŰŰJšňD-'œd§e|Š“•RʋWŠ>ĽY>Ś—˛(ó7ŢiYŔi9'•ňҕ+`ˆĹ<;ô‰ü •úŇň"U;]ÎëŠÜv•J5UŒTÁľ€ ËŇ Ę,D˝4Ô!ŚżsJ‰WŽą.–­×+‚5Šë}YŽgŁŠ ű˘ńǂ1Š@ =^ŠâNS=rtE"ěE°G‘ĹBëą {OE&mĽţ—ýŠš1'ہp=8<×ÖÖXń„łű,dĄŒ^EĹdŤIţĹ>ůż˜^P/”˛ˇ[p…Ž[ ‚˛ícűhŃ ž3z¤cŐÝ ’‚‘(̍q;gŕ<6ú$bčŽŐ*™ŃÝD1$q’ŤŁ—ŮŘc‚5ďöyďdÜŮęýčœqÓM7сűůş(Ł„ŚÝ ű0 ŕś ëŰEĎSЖ솱Œý-(ŤŘ"ź¸e)hă‰'žŕô¸ŚŚŇT&(CÁ8ŒĘDĄ`‡sľÝ1—ŕZĚM¨ :Ł~'NœŕkŢpĂ Ž@ŸĎőÓyVŻĄ lÇ1h'§Ŕ”+yÇ>ßo•J)Ľ”RJ)ĺJťWČŽ…t}•”ÁBŤ]ç!BkŤZľFICœŻëëŤÔŻuŮ9‡źđ ݈'i´°Ż…D1;‡U2ýO"ÚóěrşĐmśţ?/ď¸ĘR+Ů­UĺéSC:y>ĄĹů*-5¤BőŞÔq–¨+‰R§šoŸ@Ҋŕ4ľ‡žŁíěĎa.ŕá1§'s@-§ŁZ€ĆÄ9úĆĂ> űˆN†‡l•Y=ZMçđk´iž‰üńCŞV$%(l[Č3ÓľeĚŃŞ[ďYnşľ”8 A#ßjÖXĎW€˛eIĐç{`Ę ”nˇ.;霯CˇVH3ÄĎ)&ôŻjĽÂ „Zł–ll˙$ű™_Ÿ$ P.ÔGX ´€Ř÷Búv1:vŃ–u鳉łtťEĆţE|ď`piś† źŕ渎›kő;ܝţ ćšWˇ đíSB°€€ű“ľ„•<@ Ýt€Ä&:Óe˝şVKř] öŠtîKäZ°ˆŇ4ĄĐϟťŔó|•SŻTůź¨Ję ¤‰rÇÇ`Eât:nÜ đ$ʡ_ÖfAúœfŮrtŸ<ǀŰŕĺ…:}Ő]×Ň+ŽŰCŻžăúÔŸĽ/>x‚SóÄný’‚*‚ôu1R bɡĽMC3mĽözĘ…m˜?•uěĄĘČšŚQŸ{ÁlnĽźřĹÚúńť´•RĘK[śŇ?ŹĚň˝TD×ճޗĽ”ňR”+`aj€ĂBTkŤ%J<Ł0G ő‡ýt˘eX0„R2Ş“KӇ(]ťFPŘ2Ź‘Á:ŕÔ!i"´ËQD1ŤKv-W”jř€ŘŸ5Ţéő‹@›ęCËŃëŘňx?Œ\[뮓!ŽłöśŞ0čyÖ¨§ ˜"˛ŃśLihiďˆ"(őA´:œ˘ńŽ 6˝KŃpeë[”­€ ťy™mrŘnßĺ’/×5 ŰľŃWBŠ×žŐö™[Ľ\NJ:îóroÜ 0Ą˘8śZőřŔGą$yV›Đô7ôKKb˙ČCÓőŐzŞąŁ˘qˇş˜öٍXŁ:ĆÖ]w˝Šn¸ázs ((B Ó`tPć Mo„ă0ÎőŹƒŁŚYAy8^™jۃÖ†´ýŐW_2Ô ,0ţxŁ„ÎaG€ Ô ŰBő¨ě vP-žŽ‹űó˜1tžÂy`ŕxć™g8-ĘĹ~œƒűŔů(Ç+@Űq.ꇺ*ť…p…hqm´mŃĐRJ)Ľ”RJ)W’ä;aČ żUçP]KS!fz‹Ňţ+‚:;ŐÉI ´gp…űŁoU˘ą”âTěHŒH&’žČG‹Cnlhĺ­óS֎\Űt-”ó˘ˆW—ż9˘ş“ŽA­.ęŻ ţőîˆV;c:‰T Ąs Ôˆö´CZšwÚYÓÂٚţéŻÉű$@ ýśuĆὗźv 9RÎ,W¤ę#z+iä˝ę~ÖÁŹíĎĎh2tÎ^ç8]nmÎ…pÍšľÍ’[g-P{ĄĹ4nďIF./ĎťcÚnMV&ƒz…2f„ uvq˙đŐÖ~ąžŢĽcϜ Íőž[gŽyůŕC҅óg9ҽ밍ŚwŸˆőĚĐ;oJR ô4hy–ł¸o+Đ×7Č3XőĎ­X(rżS@IÄNmŮI¤ˇgŁŘ <1 ˘w°Đţ8 řĄű‚0ÉĽ!ɎK¸ß8  ŠŞ[ˡhďž}Ô IĚc`čÖÓ§NŽŃÏ] Ç] ľ °PŒc^ÂěƒDŁ˝“™Ě{RŠ4y\Ć Ôë:§{w“+gŮšŢj-r_TŰGÖ§çŽQT5ś)@Lě%Ý §úO˜řqŽÎŃLŸ$YŘľ}dRąBŹmIű‰Ÿ0łEX•čzą> p“şqƒzƒ6őG‡ÝÜvíi>ŕÚc%.tœl"íŽs&ev\’JîŇn08 Ç27:Ő}r•„ýcsSĆŐÚćˆÇ6ŘH[ČáˆšŽžOąÂ/"N‚çŰíÝˇű=Ńs5?KϖúçáŮ4 Š> PĚdÄé&Đö˜×‡Ł>őáČëéŽď|1?ߌVłĹş6€Ň>“ÎíŇ*Ą´ň aW`V’8cQň{H9Ě‘Œ™)-}}’Ľ‡˛ýŐÚëtüD ţˆd€,ˆ0ŰC%`đĆS n|UęmnpżŔßHŸÔB @jk”ů=†x›Yy–Š$ŐŃł ޘÁ52×Ç Šă1U\ů›îš›n|uÝ}UŠÚ (˘:JKÂ:âŮ{,˜)Âs[ĄÚƦӉŤ|/5ŸŽkÔk "cRöáŠ{˙EiSˆŃ–2műŃżń­ď6íYœ§Ť/Đžĺ&}âďžć9ˆ”’Ź˝xmZ Ňö’Ů(cóŽÍěMÖf3ËžŠ˘ó-ě° HڐĄ_J„މŽ6I¤ďƀZĘ'ÖNŠóŠž–RJ)WŽźĐžžRŹŽ”RŽšbŢşˆîő„)EůÂĄ…)ějĺ?rĘf‹éé`hcú@gٜńAŹŞčbQŤŽŃbā.€Ą`Ťó,Ëő˜ä@;Ą(C× JPGŻe€0 ­1ęi9ZŽöÔŚ×(F)HCŻŁ |=ázW˛ˆËZas&ŠŁTŰ@ó*ČÁô~„ĆlL×_} Ää;™ˆ˛i):ÇQœŁę„…SĎ@)÷mt€Ň łrŐ= ÄNçîFśs°îôRÝíőŸďËšhzĄ_”[ž5PŮ~œÁiş Äŕ cłX–FV8Ę$ „„H’jĽę'ÂP€ykú = 2ŒjܲĆ= PŇçŻFmĄśsăv7ŕŠY “íţś˘eë˜=zô(]wÝľ LŔXSś5h[bÚ ĚhQ$(8ßúČ׿ăŽ;čđáĂü[ďEçF”‰÷č:ďĄ ”CçP°X`?îŁČTJ)ô‡5ç´2[¨”RJ)ĺĹ&xW_ŒX Ť}çŮ<ăŞűäŮČ&Š?Aő9ź‹ŐÉ)=œŁ­aVX“tťŚÔFÄ;œě$K2ęzlCĘN!âKqâŠö=X[S‰é{޲Úu°:ŇôżƒĆćţôxŐĄŠk9D~ť[ăzÇpp%těô„ć›D{Űí]pŽ5¤\ YĹ龥F—ť#°łßżBR0H Dň!—$şS€„0ŞŠóŒőGaˇ@şťvśĎφS›Œ7ŕpćě Ż`]vÍľWsöľ×`@RDŔAˆ`D2ŁD]/KZ|*ͧ€ë3¨âěé÷ĚGôÔÓO҉Ç=ŘPR°Ł[nG@!Ľä󁴌؋ęäú$‘:đ2ÇŽîłzäN@‹J8;ýÄ2QĚH =(0KAE€Ăl †2ĺ)ŁE^Iëé>=6 ܑŐÝď#q:çŔÜ„fÁ­{÷íŰËŔ I™8aƂń°G›Ý!<٣Ǟ9O>u–V7ú4pÎö!ŇoÄ^¸'‹ŸSăÓŹ}˜ úR"fŽŔgss•6;Ü›ÍyjĎ/1›iŚ[ŁÜJš2%Ž­ÝEuł$íŘ&ÎÎNnNâ4Bn^Ŕý ŁFhő;ٸˇuśbíÖÎ$ó‡+6™DŘ ˆb p!™tÝŻŽťß÷wB›5W§Ć]tí҃ԏťżÝîŐţ $0IďM G6šZXkˆŁře—Ěى- J’ţ! 3}ˆ>łş9f˜â.Ÿ|ݍíý{ÎĄŃ|ŁFáJÓ!Ĺq§áhBk›=ˇ­ęę6ż1§* ‰ü|3Ą~ˇËó7ćĺÄ*˜wóť>×§Đčz˝l˙ns Ú&×€™Ś4h"đw{‡R„dl(8ĺqMĘfŽ^ĽF]ŇÚÔëÓ¸öŽ„ĚPU„-iUŞ‘ŒŘfŸü$-󴟯u}?ń` îŻDđx§ťv˜8&ě—anÄź<써ďŢu`"Šú +‘ô;WŽ#}×ŢŤ—Nô Ô)öu đúÇÚătóVeHaÇŁŒD’>+Œ&~>đýWŠ‘÷ Ŕ Žkő“ąŤ×čËwĐO0ď7^wăŒEćœű4¨áŢĎ\TĐŽYTt<$¤SŽůâ*ţÎż›c€ń3žűy`ß<˝ăíˇŇݡ˘Üó}áÁSnNęqŰdsÎîA6hn–}Ĺž7‹6MeŐÁ: ď3ľEŕşŐ*Ř6Ř~$sxź×DŞĽçiĎ+ĺĽ+EEPö…RJyÉČół/ŐńŽUś~ĘRJy)˰ȐĎ5‰VrĘŘÚú;Č0áŔ™ĽQ×jŔ‚ńĽŮBŢş&mŠ‹Á率ŞTVފl ů Ôí6…ö)ĺ<ĹJ[ŻôřşV6 h°@ ťĐ†XăÄ.œôúZžžor­ł-Żh乨éâ$§](ŞĘę!_yĂ!‘|´†Ţ–ŤçŞńP+(ëśŰnăr qą‚˛ŕ؄ĂĺÁaŞ‘đzMë„.ž€l{\ŠÁłöżP/˝Ž˝Űë_.°ĹvNú݂"vsÜNÇ÷[fk̞5ÎôˇŒ}0ń˙seqŹJ’ąĐÇ`špFFšŘp‡<ÁœBcÓý]CćZęő‡yă@ä|ŚüłFSsjşçŰn۝§ç ăĂ"§Ř(ŕŒ70:@ŔDƒš° ăŸ}űö1+Úŕ ̓g`Ζf6 0QŘÔ˜WńÁ98‚˛äčAŁKQŸýű÷ó\ć 0GhŔŽwęÔ)n7ÔÇáƒ÷ށűÂůh[Ô çâƒë<üđĂ|ěÝwßÍ÷kŁP¤/ŃçŞlxö¸ÍŤŞď°_`Ú s ž­“ç”R ÓĂÂB›J)Ľ”R^̂őŠßw#łÖá wrřÝźîŒh0¤ďwˆ:”U/dF‚D<ěę¨Gş w‚ńnĹ9qZěx…łBÖwpŹŽŘ釲+•);†‚=- \׎˘Uýúq˜Ž™TQ˝Iu.x/śž§Çă8˝çÁhČ÷§űF7 N?Ą'OI,ťWÁĽ[ZNćôˇ×Čô˝L7(:‚äoYčqAÝ R}đzk¤ !“4¨ ÓUăÔIˎZ×´ç\[YYĺžń÷ßö&:|h§8/če†6–ťŽ€ž[/ËzŹC_úŇcük¸§žzÂ9”×Yg/Žă3 Chě2QĚäćBŸÁ´GĽÓmXěŻĹmzmňeG3œŞ)€" ˇOŘmł@6…Çěs zEЇáî,$…C˜ęůrߚ˘ÇSűťÖćXOcíŒhw#iđz´ş1˘‡9E÷?r’NœŢ Ţ ‡8ÖĂ#IÁeUBďŔ …9Á=Î0ĘękƒFěřŃô76=)¤ŐZböŠnw“Ö7V8D{~Ń­Ľ–ŮYiŃś-Đ'ăčQSâăQŞÖŞMw~=lëü˘×ć>Ź‘×/íüĄăRŰւ/ôšNœaT"Ľ ŕÓ1ÝŤŔQ ›Ô)>tŽj§—„ΑݚŢŠŐţjşvůóîŢÇn[@+ý*ƒ"¤ü„çIIŤaC<% ĺ'2oL˜Ů&c¨TCĎ”řšMů|¨ žľsŞŸßčs˙D›kŰVŁF{—ZÔn$1Çię §/#8ϕ)Ύĺ ęttúěŠĚI!î]ćsž@ę”I,mO–D2öNvŠY.ŞÎQřĐUœĆs5Ćł/8 Źî>˜CÚa÷Yj7Š5W瞍1Ŝ{ŻTYçóÁFHK4ÖZ€QbňëB_u}fĂíK&ăt~”ŸˆÎmFîYl2ăE*‰bż$]úŽÍ÷‡ţçŰá‡ôUx0¸&÷cŰŻÜq#÷ŽÜp:,úçüüBĘ )¤ ŇOq Őc•)ĄŰíĽinđLÁŽ=m0JFT‰Ŕrçw0ŕ…Ű׍§˜mŇ7p V$qjĺůĘCu\3qăÁ˝CŒ˙žăTÜ{ڍ-w˝&€ ¤ŠŞSŁYçzHş¨lî”1™ˇ‹ŘůÚnˇăőtMâ›sýîćöÓő×ěc6ßüýżĽłç6ÓóŃżĽLJÇřVbŻaß r´vY}ץ`P¨ÚsŚÁs@E4u_i9•‹ˇĄ–rĽJ´ő|캼”RʗGvë˙ĺűy)ńě}Z•ňҗ+Š7Ę:)ĂšĚ`,fŤÎ7 R yĽŁ‡"C˜8ăŰnaŰe%Ń ýAŸ?Z6ʂL ‘nkjxƒŇŁ‚‚:ŹŁÔ‚%lK1şŢŇßÚČ.˝†5ލÁ稢Ć0ÝoŁ­ jŔ+˘§őZü …â׳‘ă–ÖÖ_ĎE[ăţĄ,h›Ą^ęD„=z”ęlÜ­Ř6ƒ"G/ĘĹőP^‘ľBˇyžŠ/ŞçťÝîüzťÇvű‹Ç^Îş^ŽćĽ4´?[ÜwÚ_-đÂRwÂŔ)ńÓŹA’7^ Ľ2Ľ ,ę$Pƒ:Žy#9GFB!ékĎ![VfřËBvžSCé,‹­ÚlÖöÚWërôčuôĆ7ž˙ǏOA5ôbœcŽŐńŔŚA˝1^Ÿxâ‰<vÁ6o0o뜀s†PffUF Ě_8s: í (ĂŰP7eŹĐšŔ‰;3ĎXBs(ă˜3đ  ˝žáłĎ>K<đƒ"nźńFŽ7Ú×ĂąřFY¸&Ę@ÝpîÍMôůjů8^Űí¤Ějˆ-Ľ‘K–RJ)Ľ|šäbç)ŤƒdĘĚą4`)`S’ĽsÓtŽ ˛Ż5rN‹ź^Ă˙çHY‰~ ¸ęޡëÎśIăɐć[ ě ËaŃÁŠÎű˘321€tťžTgiŞKůşéúŇ:]tídżŞoA„1Ý3I˜Ń‘ßi`mÂäétfeDçÖbçü iĎ<ŃţĽœż’€ÓŤví;ÓDTŕE ™M ¸vÖş)ë0ŹÝ œ×űĺˆđ$ČńemKtíuŮyŚŔť†xg.œ_Ą{ď†ë…ő՗>÷IÁ)7ńsŐhb<7mK‡ĚěkœžBű–ץýýkôŻ]_Ď2b ĹOq%œNá‘9ňgłQŘÔ!ö<AĚ*ŻXvz>‘IPĄŹ­[×7c˛¨ĎĚ|ŔŻw›Üžx΃ÁVέRßyŔzô}ösǘą"Ć~<3Źe"¤šُ‚ 󖤔ӈÖ7?Itćiąu3j?DíVĚÎđŐN…Vű˜OŔt2[MŔ}Oî)ń ‹Ń$Vž"ކ9`4öłÇÔ=şöˆ„“VČ1Ę x jÔ:đ”sř'řŒéřsnŹ;;;Ř[u:|`9|€ćn¨W鶏°=oÂó9Ř Şâ¸Żx 0÷Ś@aPç>ć¨jĽ&é1‘œrÄľńpÂ̐Ŕ[w ÚŽiŁŰŁŘ!ÜŽŹuh­ÓwýANe“žą`&šněß5`Èăd&c‰Ě'fŹűtqâíhÜDÇw]ćźÄ3ŔўŞ#Šó= 0Ŕ7žŤľşë*8qúUÎW¸7›-ŸNY` ă…Úb€ŽGçžĘ§ˇ’“.Ý{ßôÚ×ŢFÇ:™Ÿ!…IĽ" ŤI%búp ,Ąź;2`Xâç €-BNg34pďô+ć›H{ŇŚÖŘ†ą‰šWÁj@Đů×B[ăZ°MŔŔƒ1ŽiBp>ŽGy¸Ę›„ƒ4ŽۆF‘ᣏF(sśeÇĄÍQßű￟îťďž” rď˝÷ň˝żúŐŻćsQoD Žú,t΁`^ĹbőĐDy8 a4Ä UOSa>ĆušœŤ:ĄSĺBł”RJ)Ľ”+P8;ç¨'ރź]ˆŃłŚÂN#Ákű0uŢŤž‘˘ˆ×HU0QZt県9X[Ł{‘Ž)Âź†X›…sś‚Ţi߂@Ҍ`ŚŃń6 AUů[הęěUŃľ˘Ł­s1_×tœËĺGAČ~ظÂ)Dŕ•Ťđ}Ăď䅄άÔ8gQ@{ćÇÔnÄě4Ť1Íz^OĆr4N$eˆ‚ ŘńHâ$Ô{ČęŚk×x"‘良G\ű{óԔ )ŻëÜcÇÎĐíˇ_ďV˘3özCÖšOŸ=E'OŻŇů ÔsÎÍcǞĄ3'ŸdŕNˆ‰‚Od‰ş~Ăm{nM2Ę}~&ň`|ű°„ßčsŰXĄŹZ†8UĂt_…Ůđ °AĎeŰÁ4 bp!ÔôłAŞż˜-|ڃ0¤)G|N¤m2ëX2Eě0­đóŚëâöÂźśÎś˛áÖÂ}猞г'ÎÓ}÷?K?zŇůŇCvţ×ęiĎ ‰”řž°’Ó!úž3MÉĺM8ĺę8•œž|ůł€ş}ÄାĚîzHű••snM~’ÓÁNÄ ¨ŁĚů v 2$ƒ˜ĚT’HöqÎţĄă[űydcFX`(mseşĐqom3vŽĐů!“`.Â3ŤşóšÁŔě0×Dç@k“kkűMĆ=ZŮřmôŇň|‹ö4NҞE§§´Ť´ŮCú1 †Ț$Y˘V’IȎr͎ďo~T!-ŒÖIď3K34âym0čĽLD ˆGŠ•J…˜ď7†Ý˙řéŒÉĂ´ćęÉ(Ką™^Hَ=śóšÚßFăžÓő΋„{xţË{öqYăрçŹ$ÉŇEɸ=°€źyTîOŔYŇb˙̅í‚Áe űô.:äHtĚŚLö„ŇΞęâ” g6-î?‰ˇÇůy÷Q­Ě1 şíŠS'Yo%:ŸÖAY sjŠ]N‘„ţ>ó şŐę€ęę+Ďţa.ŁëÚśĆéy%ĺŢŐHűgŽçvPƒmló˜¤iX˛ÔEşBŰöú1őcÚŘěQŤŽtŁŽ~ MţnÍĂŃSgöâZ-›C‰ Ž(Ęş†3ŇwwĽ^ ™kăDćŰřő7Ó˝ŸŚŐői6ŽldŮZ!Hm?hŘKĹ ­łt´Ůžlƒçf­%L"Ď"Ś\ş’¤d°(Eűć´#ś”RJyi‰ľÝÁĚŹAĆ/„EEšĹżÁśs?wňŹ÷r)ĽźTĺ Xd‹ÍĚĐRpxzĽ œ|J/ŻÎ?ë°Óíćf‡b§ ĚšĹűhŽ–Kű!ŃC>ß­_ ;]-u|ŞąÍF?¨ăĐF]ŘôVŠó]e[ÁlSˆŘÔ&ÁŞÇŠá •*ďA–;' …n˜4ŠŠD4J_Űm„ßýA75p¨rŒ6 ýđ‘Ă4{”]ě*›ź5` >xŠŕŮU*•4JÝśĄeĹH•)Ӷʼn|'`ÁĺZ\ŮHń•^T_NpĹĹCŠ’.Lôíë9ăFh i€tťeŽÉ§=uŞ”ă M…:éŘăRL”Q›Ů‚I c‰Fńy|-łĆnúňvۡ;ś8Ÿ(6>púøú裏Ś÷Ѓ°_Ç% ˆ˜Š°1ŞĘ”kÓdhÔĘŔvĽÇȂý(GA ä@Ýp 0P¤Ątŕ8ĎF‰ę<ëĄŽ˜ďxţvŰěă^Aw¨ ę{ňäIúČG>BO=ő—ŻŔ 0Y ]$ŞG˘¨PĘGý´\\K†jLT @¸Ü/Ú ď5ÚČ×R9.Ľ”RJ)ĺJ¤fÜŘ\÷, Äk#ŹŠŕĐ­Wę ’ˆĄĄú5L¸‡¨ƒSt&ˆóş’ęD˛žAîyD;7hqĄĘ4ç˝^‡Y yŐs‘ŞŞĂČ0ň”˙Yä<;2Ł0­§žűíúŇęPş^ÔuœM9iÓJBRʉŽO4\01Li*;‰Ÿ¸*'­u+ ŽUÚ×ŘtNU8žˆS4(Ťx¨)ńźs.} ĽébJRÇ׸PxńËQމ€ Şŕ¤¨SŐßťœ˙Ŕ#OŇŃëŻćTyXo=wü$;vʝ? çžłŘ9~é<ŔYôűČ.ŐsęrÎuIy rŽ÷­ž‹ż3 ĂöŹE'Ą#,€X€ašnCőT fPĐD4‹Â…łÓŽdýtvZ‘$]DךĹ1¤Ě0UŹ­Ýú}žÝrkŰ%Zh/ň¸Œ'’VőäŠó´şŃĽ•ľ9߼‡Ÿ\§gŸKm•Ć<…ŞW%’€Â<™űŽë38JŸOރ(ôă(Hß* |Çü $@ڍËṌĆ2 eBύuÜ*ÖěřŢtóúÍĆË8óţ\šŻ[@ŹÍ!Ó%%­>[™?”EőŸät-+ŔĽícŸ-ŘWLŘŠg *bozö9ľ…É%bfÁřa9ýl}…6ÖQka@K­홫RT_Ąs˝ŠÓUĆÔ¨Íě(*öŕ+őď~WŔř“„iÝP›Ń8IuÚ T!Nf™űÄŮŢn-¤Ń‘ięŮXÝČ €XT/"ŰWŞ•\[rűQ>˛ß:ŞŃ_<œ‚đń9î,__XęÜž)(Ŕ˜P÷’L&yLL˜ĆCú¸ Ňdlj9=^mnq\čC §>‘ę31›ÍŠ}.ő)m§)DâDXY&Á˜„÷g5TGV˝4)ŕY2ČPć1 ꊹ Ćn6OBg zĞ}(€MąĆ÷Ŕˆ:‡nnďWÂÔI>uKœđťJRCE~œČ˝lú~ĆŻŮě;çŽ{7lôťÔܘs}fŢÍGMZXjšz×ČÁýÁżW)7ßiœÁřŕŸc5/)°ëБCôUw^EýĚ3š€5}–Öflí1ÚßX{>–=śśŔ{ Ű'řýŰľCŢśŤ ĂR^ž’ˇ'ň–Ň~TJ)/a™ŽPŃ@EŘÂ-@Wő [FĆ hßt”ő°IŰÔ#_'#7669uR†ƒeŞ”RJšbłœ…Šč-îł SˆFIpĄŒ˜ŹđÁäĄ@(„ŤŤ+Źüiz P`*…¤‚ P6G(G1+bhËâ˝n *Q¸˛H ĐzZŞI5ôYو]ŕëő´îś\-SËłůr­ň` •`ű˛>É,ŘBEŠ J´ŕl‡BŠ}0“KĨÎUÔŠaÍ+Wś]‹ţť‘í^hsŒ=îRšĎwaü•źöĹČNŕ Ťp^jYyđU~DÁŠaǡu Š[#VÁ•r ř! sÇZvĽÚÔëZJW1ÎĹž.”ŕ‹Ô˘ł”ëâ˘j7m3Ť=ôŘbć‘#‡éöŰoKç̟8ăăQ[˜#á lSę2̆íLí]—<Ćhč˘lř­@œ‡óq œŤTÔ8˙Ŕ<ż(­/ÎÇoAʁyçK^čÍ4úUŸ Î6و ořĆ}\wÝu̸Pîďá‡N S(Ÿ#GŽpô^Đ<z˘îʐĄŹAhž€s™ÍgŽ ˝RJ)Ľ”RJšŇ` Pś[GtŢ.Žku*zćPJŘĄ•$c,‡ŤîŸŚé—5:{#jśšÎQ†ľEŸ×ˆŇU‡“žĽŔ"ľë/ЕgkÁąBdëŢÎązĄÖk ÄXđˆFUgë@Y?|°sŔ‘ĐÖŕÎżƒšëTgĎNXą)˘ĺĽ:ľçĐţcrţUN/°C-Î,¤ q€yˆƒĐáţď@ęÔvBł[]D¤0ÖxôšĎ‰V×iZ´Ó§ŽÓćúyŚčOëp N§iÚőÝč-ÖšVümˇń߼@üE[,Š  °Č#| <ëp6[EZV(ăâů,ŚĎŃc)ušÚăąFeGwcŽ#űŰí–sbśÜ¸¨ň3:ţÔé tî|—Μߤgž˝@Ď )ś{ąŻuykDV}LĆ؀´łJůqněÁš< řÎuœ 'sł9ďîąĹŰŔ˘ĐëKT9҇Ŕ)]síP‡ł= sN} ~šv‚ (Dë–ÍQ”NŤŘ>Źó‚ ě5fľYHRÔMľ\Ž/ŔăˆÓ‚ŕ#ĄArœFk­wSXŮG‡ŰjכTkœ§sŞÓšœƒ*’qÚç$ń ŞńhœŚŰ‰“Ä,4%Ň8Ř#‰ĚíŇĄ#!ZĎÁęÖ–„YúýŘyQŰŔÎÚç㈜.‡&žÔŇ4“™šśv#2[|ÔîŤJŔĂd”Y8áë(¸ ß´Ţv<Ś÷8Ć;­­ŻXϤÁB:ŸKš Î?{Ô7ëŘĎ8ÜÔrs|5ŐYń|p ôRč×Đyá,ÁŘϘ[’t) ÇhâĆLč㈊Ó_#w˝ńˆl:ÓŔƒČänc8Vđ̀Á;œ(’\Cőhui?‘ů-đwö˜0ŁŃY…ű´ŮmĐşŤó|kνËÚÔjÎń}VŁJ ąc&Ăß%’$ˇŃ:Ÿ˛qůŐŻž‘admďA‚˛îu„Y2@Ë0D§ś|ěźkçˆY}({‡S Œ™ul)Ľ”RJ)/~ŮĘ^żŐ\^܎÷6lâšzۮ݋ÁĆXŕ8 ú“Ŕ_SEíŢ?f덏ƒ‚ÜłGŘŠK)Ľ”+`aóŮŠ9ĽŞ0ĄY%M!Í7ˆ(f,žĄ¨(ę{yy1aŔřÖéô|ţÂ,g&çvŹ!ˇc˜RM⊂خđy#G(Ę8ߌ˛ Jrŕ U UéÖűPşŘ”1#Ěčd­ńAv{ż9ƒ["Š>´|k8PĺŤzEď[€JN6h6ÂxeMís>_Š(´L+ꉝ˘ŹŘBP6—¸ĘR§iŃŘ` ™—˘„ěHqšŽšŮ鼏ÇĚŢżťů )ł÷b$ËÄ[yig ËŹcô™FŁsüoĽŢ´maŰ čą‘ ŰI:ž(o0ƌ„qážĹ ›ÝĂÖĎť8ď÷m÷ˇ­ŰiMü¸nˇçd ŕŔih ĘńAş ´Ús~kĘ eľĐyAŮ(0Ç*ŕ@œU>ŕ7Œw|0żÚE%Ć7ÎŃůKŮ#p>žŐ˜{P¤ŻÖ ×C9˜;p/̸㯁ăNœ8A?ţ8§šţúë†:dö8uęŁySÁ¤ƒóy ÷ŠűŃV¸ĺiîU˝—Ó¨ĘóÖ(.œ‹:•”RJ)Ľ”RŽD‘ő@ƒßu™AcyGcŢÁŃń+HUŢŠÓú މËÉ1nŸŽK˛Ŕk eČBľœ/N\ťN´Ňę šŇGu}ĽN’Ř8Ú v­§Źv?œ7źŸ„M™Đ$â{œ^WŘťŹ‹"+ěŹ ~朚*;6{Žşç'źÚDŕqť‘óSŃ\5ć´"ľ RHšÄˇO^vÔr€vࣲ}ʇ@’ŮS¸›ERÉ:ç‹÷>’ÓMëÎá Ł[˜GŮ='IÚśTďVl[ÎräŰ}ł ö¸žĺ3 şˆÂ,MČ,`˙ Çb$şˆí疕‚˙6lE0ô‡PS€„ÓiEđ­kq‰đÍ kíů4"°Ł ]8sžNžYŁ“g×Ýg“ž;žFgρí…ŃQŠsTŰ)őMdӘXśŮ@íÓlĽś–˘>$ýd˜ÓŠěQŤ×DQŤŠăŠ?ˆ„Cűt˝ŢpmĐârŔŚÓďw¨×ߤfŁÉű*•ZޟÚzi]‹`‰"@ďÁÚlâxvŠJ{Ÿśoí7z­b[ÚkĽ€fˆĚńž…í=9îĆÜ1:>3Á>:ź°ććƒeÚ7V{ u´Üˆűœ$âšv8î§ĎFŔŁÔč ×Ü\3Mƒ ś ŤcZ DL$3ÇŠ.ŘvČĽY ځ ٸΧF˝00¸gżşzŽŮ‚ę5AŸ Še…’Ę#ô!A8͎PÔĽůĎŇÔKç5ŮîçZ?Ýň9Ţ"ókœÚ΄b”Ίř "é@˙Ĺ˝I*íĄúnÓq¤ŽčËĐéq>ž™‚-ě˝wÇ ĆjU:œĘ% űÁ5ő˜p lר\OS—č\kYoě}˘LĽ§E}PŢącÇLqË-ˇäj ÄuphÔ ěW–ާŸ~:}>(uÂq¸/,vužE˝ą0Ć5aŹŠBJ‹RJ)Ľ”R^’9”Ĺ™”­u°“(lâ…QQç(:býa~m˜čZKťOiäŻý LpÁ9¨iËpnł1ďϏýu&)–x‘Š6Ö˜ÓC‚ ˇîĘęlŁŻ&ěŘdň(c,:ž•i‘źŇ.‘sîTř[Ĺ:e!ýqBƒM˘ó›Î9äkÖÝZÎŮĘÂIjQâV@ˆRçSÖˆ‚˙ÁKĆx aŔ`GĺŒv=­iăěłTP,čöĂ>]Ŕ.§­ŢŻ8˜âKr.ŰŘţ]üL"˛ŹśĎÓqXpEś-0‹lť>PB,‚ˆ,Č"w×)H EdRŒč~œ}Xc=ŞŔ ü­€gŹ97‘ŞołOO;KOoqa™ŞÝ^‡Y-zý.Í՛ ŔŔ~­Ż ^)Úě=¤ŽQŁSQaLX†˘Ś8F4f›”‰“\ŰYŕRL8;L}"ňűp˙ÚîĄgĺqm;xœŽŸwmXKhßü5\űÍ7V¨7ˆ™}ÁEë=°‚€#av6őÚW*,ŘĂÎuůţ’ ÍÖżm{é9šo˘Š}z.hómpęÜjľ"s҇8˝ŽˇÁ‹Ć\‹:äm.âô.Ö5w/3ßHҊ* „äď8‘T0ńÄëđ›ěČxŕĆAB˜Ľ’ŚœĐOLڌNš÷ŹŻĆÍââRH['ô^ź˙„…šs—>2× \ęîÝčś'5׋œŽĚýHR•0›p,ă-1vź‹Ŕ‚äąXĚčÁ÷ćú=Źfŕ™Ô*i°Z IBC9ßőÇţ`Čýsž1ÇĚ;Íć\ šÔq™qŸZČăČf´óęfž:vĆ9Î§€á`Či˘ń Đ÷ńŒ¤Żť5CÔäqĹifÂ|ŒgźŤf˝ĂŠď§bI|_°Çgő/mĽ”RJ)/fąóůnÓőŁ ĚĂ;>ľÝ˛GŔ֌w˜0B+ó—Nہ,ŠÁÔúÎŇuł2jdaŮ3J)ĺĺ(WĚjšR‘ü˛ LĐnş­ @qŽSٜ–ĄŰDY‡q˘íkűŘŔŚšő€Ăąp´­ŽŽ ˛ş×wFŠ } œŇŽĆ“qŠŞÎhał”" zČę’WčĄôčš„a™.ÔوkZęY| ĄĆI4ˇuRC(ů6ľËžaŁ24íˆ^SŸ…FŠKÇÉEƒ+´ŢšÂŽJ|ôžó†ÓüKÉł›ëŘvßŽ+ÖáË!ťť–(ŘĎWňŠÝôžd …rËZö +ť=o§2Š „˘!;.h_˛óH6nÔHš~ˇšV ‚ŕ~<™Š€˛}ÔÖe;E;?Gd†˙­ę˛];”‡Řsćç[tűíˇóř…!őÖôZg,ř Ř •ÎŤšVŔM+‚ż1oŞH#pt\cÁˆżáŕPF ýűž€ÁGŁvÄ@}tţ’(ÔA:i”ŽÖQ.¨#ę‚óQ6˜)Μ9ĂĚŻ|ĺ+ů^t~Ä~‹F™ŘŚó-R• -ř%ůO=ťĆí ŠAP7šŕó#ŽĄŠMpĎ:7—RJ)Ľ”Rʕ,ĹuÇŹő`Ńů`ŠŮÚMţVlQ—Ę~[ŠvŻ_%čÍŰjľ9N]ŇĹ;šďôť¸“:{˛ş%~ݕřő 8ĐSç(yMR˝6z_Öa¤h ůE0]ŔzĽ)?źCÔÝ\y† Ճ!ť˛ÖĚ;­­0hÎ0§đ Ć €hľăîa §Ć=çh hŠ]Ľ=Kp6şu &Ţ.P‡A‘–J[=ëâ3ągÓŞłcłáž´pbĐďCIGחFŽw7F˙Mă“Mi˙Ćw’Ů=&î9ŒűVCZSw)ŔĄŃ¨§ŒŔIÉČŰWĆî} €Ô€ug€ ÷†á Ŕ Şí€÷.@ FbŻu}űŢžŕŔ Q`NÂ܉Q@tšˇŞž—OM••9݁˛’DĎĎ"ĂĄ.Ŕ)™8ÝiF•QJĄŽ”őZÝ3TrÎT^ß00݀)üúŻ˘ŕr*č”­39Šw,kŚÄ߇SÔ@ĹE)˜AÓL:g8 ő~ó ” —>đ ­Vâ‡U€D“ Ńźëtre“–VbÚłŕő §‡5Qݘ*ށbí‚g¤éS( ­œĐŰŽKCŽŠ÷ĎmŽ‰ çô„ł{äžIqÎ9ĚťÔéöœcrBçV:î{ČĆרŇrي œŁś€šÍ†OÁ'évŕüUPş4‘ĽľLžżYąSÓé ¨ˆ“ť„sh:`EAvťŠ°Ÿ4íŔÓˆţYzdŽŢHí˝žÓWşÎëÖ÷nŰ|k1gɧČ;Ůóc- šaćƒ`ŕSíŰs´Mœž]'&{Ŕ/ßnG8ť%  s*?…ĐŔł°*8]@Dćˇ ŠÓrłG‡÷lPť! g;~Ž™Č<$zŸĄ¤Œ0Žlľq…ž5VcE@‚¤<šnkť+űí˝Z)n“€Źi€–”'׋}žrĚ;HSwý ›^ŻK+kç)ÜpśżZƒš-7ŽÜ÷,›BţŮĚʞ2J„”*¤˙Ě¸ݜ{UÂj ˛ĘR`MߍcľÍŠś˛Yö‡źí@]j ŞjyĘ&ëÓĘć¨` •ŃÄľm‚öcȕ{‡şů†űl%¸××ô‰ąđ ů4]Ŕ@  Ë2ž xÄc0\ŔfĐuş6ňÍ×ŇÔ.bƒ;ěď5ŕľĆc§óŤîÝ5fć•ö8Zü~Öś€ˆ¤űę÷G´šŃc€ÎĹ'Źôů{Ÿróß2_m€šűä][á5žľý2М0}Ějçâ8/>ŻYĎł¸M––”—¸mą”ŻźŔśö|€îż˙~şţúëy|úӟŚ/|á ôĎ˙ů?çq˙Č#Đ}÷Ý÷X`ţ÷˙ţßéĂţ0ŰŃîžűn˙_.ÁóKżôKôMßôMtÇwP)Ľź˘ďpMcßXÜ=¸‚KńßÂfţÓ§Oó–KYpIAU;ˇ˛M—RĘËUޘŢφ2ˇ€ GźŚ¤Ď (´¨×ki¤ƒ.,ŠÜ*Źv+ Öě:öˇN*śÝ.(k4oƒĎY^^äo$Chě ¤`!Đ|Š˝Iu圽¨ť2L¨ĄBŁżőo šŔoun2Ľ;wÚy§ŃÔ0´h„¸FčďFĆxaŃzčýŤ“SÎPLqm ĺ:Ä ĄLŘ=ŤƒFŠ\:#ę[ŁĂgOgý­×˝X …žťŰş^ŒÓüůĘv`ŽÝÖ÷r\O÷]ę}]ŽöŘŽü­”WżłśĹ9‰L‚\äPUӜŰöxŰ÷Ôd˔ˆ)5cúĺVmaŸiń~tń•Ě8‡vąÍď˜2^ĄNW_}˝ţőŻăą 0ĚU 4ĐşŐđ„nĂ|˘ó›R+…FĎéÜĄŔ œ/óăˆA ř¨‘ ÷ Cą.(5uރ:A m•Š<šaŇëbŢE}$ňĐCqů`ęŔqŠ‚ňPˆžŤĺk*eĺ@]đ7 Úzż8_4p>Žqřđá4Vç5€,žPö"”{HŁ”RJ)Ľ”RŽT):ş­3vH ÁaŃ!;E—ŹÂQŠ:f,ťĺŕŮÚĚŚŇčSšŽ8*mD9ŢÇxgov֝ƒgĆuçĐi6Ř0łˆ}­Ľ2ŔţVÇţÖ5Ošî –h_ě—u˘ňňƀ‡ f|(;Úx혠†SúŽm_˝śęÂb—ą~(3CÎéKťƒúżŃlÓ _ĽÓŤ]:ťŢ§Ľö<-ś[ŽÉÇÔ¨NhßB•ÚM§űĆn]çœah,ůěu§´͔LŠHÁp4"J>žk8'÷z:‚wĄ{Y0ÂnÁú1Xě ˛Č~gíŸŰžÍuBożŔă)ÖˇXFN§PëiŹ5ąVľ)DąĹZřĚšMzŕŃÓôčÓçéěů Nâ4öÜŘŁŤÜCŤŐ`@úŒ¨ptÂŮ,Œs-v0ŞN˘ś›ś5ńdm‘Ś"pŸ1?ÇI:ö°_˘Őç|ĐL•lđ‰Őł˛ń$v8őŸąÔ„~Œiż§ÔĄă˘mĽŰl[ŕ` €&›ˇśďy^PĐšŢ?žuŽŃňŹ­)çÜ.蘳ňúŰڅtž°ŔŽ Ș#ŠcI΋™@ć÷œÝ éŔƒt–%ă:Ž0ă¸ßU\§Gk›gŠ×ł˙•î˜j†ćš‰Ű6ŚŐ^ČqšŞ$Î=§źŽ+i†l[ëžô>'[ƒě˝Ů2ŠvŽY@kÇŇ})ŕ)'&”ΊzMزćݧŐZđ`›Mf4éö79}Ěüü"ƒqŠ÷SŹł ¸€0CEżÇ,úLuŽV–´Fiťů;—˙óť1›lęۏŠ,śĹţQ”"¨Eú“Á,ŃhU .ŔœĂ)?і“1ą8Š0°)bF“˜Ó>%˝Eî éœîľâŢÚo y“-Čţ ďť*ł& †7 kć5×´9pmmmç¨*ŇÔ¸ţ ćM°í čmě겹éć÷ŽŽšś]\j‹ÂÝÄ02$I™CœŚ)Œţ8}Á]#l8›@ƒŰ÷¨ďm¤Âz Ť3ŰĚs!}> ŽČćoJŸßVŞb™őŒŹ}酲ő•ňň¤ˇ€âío;˝á oŕšĚŽżř‹żČŰďźóNúJ ćŸĎţóô5_ó5Ě8űÔSOąíîË5p{žúŤżšJ)ĺË!şÖÓŔGő]œdďœ/éžwfąĐőşĘVţMŃ],Jy9ËŐűE1˘*:čnŁńÄ)~CŻ|D)›‚°+D>?$ąKËŃH)QňŁřf׳ Ä*uśÎ3˜ˆ" %7hŁ‘Đ‚Űťoď]{ÍQF=e&Ók΁šî…••U÷YŁUçěőô0rz2AIÂJ€* AyP˛†>AA:AŞf•M´‹ ł'SFÎI0ĄZPóFšďŠî{ˆˆpŻ0j9ęüÔčnŽťî:VÄ´­Ů2˨זȲħr{ Ů——÷NĺÁ”sň--‘]#C}ϖ˜h›>VŹëv˛cߏýŰżĽs|Ćš6ĘŻ¸oÖoű]ěß;ÉVő*Ž űR.ŠçËßîŢwłoŤ{ĘÎÍÓ-ćë­u˜ŻHżƒÄF(!§ŞÎ#2´Fö>m-ż=(Ô+mKo€ˆˇiŁÚ/0Çe÷%ăđo|;ůaŹľ€Vá€0öadÁý+;DÁ 0Âŕ8|Ô¤l$ŕ8­Î8čZłpžÎWŠÚ…ĄsÎEJ͗ŽTjäÔ9óćŞSc'Ŕ"Pď˝÷^ž?0W(ť†.>u>ĂýÝçâşEčXŃň h+܏nSˆ˝olC›(#‡ŚDŃśŇTH¸.”ÝůęōÇRJ)Ľ”RŽšTěi°E9iy¸ĂE“ŽšÜ’1J¤‘ídD!ň›KD´FE[‡ €ƒ (ď˙qZzq˝Ľ H]ĂŘcCŸę@SšéZ"ŠBęŕë9'ÎG¸ťŐ].ľă8ÎŘ Ôš5vNL83á¸AwĄ|ÓˆdŹ7Z5çŹvkI0Ywlek=2Ű ŻW™hÝ;§™×"€.)őˆ*âœK&qĘţÁçÂůëśEľˆŻ‹üőąs&C_ĹĽđ,üńaçyĚÁ œ6Ĺ9űÎÁ¸˛˛îÖ2#^t\˝×!Ő˘ 5ÜZiŠQłîÚ<O9ƒŇuf‚Tšú$d—kxJzD1÷Âp[#ň¨NhIÖfŁ!MPwwĎqâŮíˇYt´:í‚0sđ[ЂŘţ;šwś­nHŤ=Wçągq}i2H˜ÓłCwŸ÷“TÇÖ4IĄm‚TUO<8ĂĎPŢÎSŻůűd›šúLbÍ>#ăÎĎ3rŔiM˜gâć &٘mZ%TË=›J@•ůe×痝“}ƒÇÁšó'ăžI NŸĂ÷ď˙ýˇóů?ţ$ýŻ˙ň˙O˙ń?ý:Űô~ëˇ~›Ç*ćJĚßó=ďtöż%úĎ˙ůčSŸúó7żůÍnű÷0 UçýRJáwŠ[KÂöŹ‹‹O×çqžŹcWÓŔęĚ˙śH7ű{VšxݰŃjQ)Ľźlĺe/Rg&ÓĹ1ZźŸ9T֔"ş­ęŒHa F,’)”ę'›Ůo?e€PŸ(œš´´Em]CYä–;u^_ßäÍšsgŮ1ˆ‰ŰĽnAÍEI–oŔ ř04†$5b&ŠaAgݤ yÍŃ*m)‹}5$ÂŔS­TRę}(íŠîfeŹ:O7ß|sڰůz…•ƒ5Œˆ¤ \ ÷ %ŽHyąTHŁŻˆŠűŮiBň}bśCżřŮîü`—+Ÿ‹9v§r.‡\LŰ\L™—Ť~ł^ě—CŠ`ÝfűMћĄĆE=Î.>ŹŃMÇzqq2 Ř`˙œuoŢź Ř(MM˘mƒóp?řk 8uÇő´ÍpMETß)zŸ¸î÷ŠvÄ5tŢÄ1[ŕ˜–_ ¸ŹO}ń#TJ)Ľ”Rʕ&vý1Cž×Ň1[gĺxoSĹ9uŃ/Że/sü„)¨ŔF}‹ŁŇłCTjŠ9€Đsԁ `käĎĄœ“I׉˜Ž¤Q×ňžNŘq¤F-Š—čˆ›ƒ.~0œsďo'Wůq¨„Ţ!LŐűxčÁq.zeĚÍ7Ś"…áWq.)qžW+š¨%‹Ô V§@„°:ÉČ3$“ƒ*8TjˆĂ˝Ę`ŠÉd(kHçŕ âP+vž€ő+u.{8p9•ąűMNý†ĆZm‰œ/•úÝ;̛mçŹÎQĎ9•6\}N­š˛ÜľęsuÚˇОůąŤĂ8ˇN9^<'€!üœB¸<áô×ƒşű¸úář‘Á˜ĂŕĐŤrÄôŘľő`ďhËü™žřnŻ ­Gü ý˘˛˜Ĺ61˝}ŔQ,_˜)üś b }{ÍŠ2ƒŒĄÂ:żkő*ŻE.nšţÇŹX3şžˇę֘ăţ˜VÖ{ôŘÓœłđ4;ąĆ@‹ńhĚé;ŇńTMY'ulXPŒŠ2Ç ďV*cI0œ§ľő ´˛ fƒ͡–$ÂőE¤Tč÷Üß𛝊äÇQ­ž2$(¨ëŕ €Ś)t|hš?m›v#s>Ű4@ŇŽHi˘LsZžýŘsíź ăĘŁĆüü|›Ak :j6ŰÎń.kŐÓ&I–âÇ:J­ŰڂFƒaʀ‘ľ˝&äS„(ÄŢ)+ö")KÚ €D׃m,!“8sž3˜Ë§Y-2ŚŞ¤}‘Yd ¤AqâŒň‰ťďńYęŸíşű_tzŐ txńZnaN^ëGÔ Ç4&ě( (IŕpŠ™Mň)?˛kgŔňDfwžѰ`EPP?xî~EH7˝â×˙":yz“|ô9şçóĎĐŮ ›dِ¸ßŒ'šűc‰ż.Ŕ@ źŕ‰}.{wDĄ´ƒŚÁAY í=Ôl,0Řneĺźsöw¸o€=A #cŔń`™MĐţpňëóˇcÎöéY*jÝôůĽRDšqœ/'Ě1Ë蘡Ď\ǜMŹďătNCűť÷ Ć1œ„ĂaŸuZčś§ť§ůŢĄĎ{–ljżţ 8ŸŽG@o ×ßÚčŔ“äĘkQ˝2˘š°>))ŕýÁΏúěĐŽľjÄŠł"ŽŒ*`h y.škŽ\{ľ†xOĂI5ŕśG*“áĐ˝›Ç}C F`Ôť>ÓĽű=K'NoxŕeD)Îč­Ö<łř(k%l  ŔËě”2†°†ącÎÎ/A@š9MAZE&}^úüWJ)ĎGŽ˝ö:śCýęŻţŸô裏Ń×ýםm×8Ţ~î^ŽLčŮgŸŁŰnť~üÇßMýčGé˝ď}Űůnżý6ú˝ßű}ú­ßú-ú™ŸůŢö×ý×ô+żň+îď˙/—ýńÂŮ/0›ë=÷|šN:IŸřÄÇ`ęǎ=KŻ~Í][ÖŠAnžů&şĺ–›éčŃŁôŘcsćňňĎgNŸĄ÷ţöűčÝ?ńcn˙őJy§ţŢÜěRبJ.ÁŃ@hs9ÂËMĐÍ ‰¨CŔCchdU•ń )Ćĺ†œXň‡Ž˘é´P^°ťíśŰ¸=Y =„ňy3‹m" L’>UÚ°ĎŤŕ@ŹŃëbe'‡ţV/ż­žĺvÇîöE:ë܋šTfʰßZn,0ë¸K­_ź?v§{˛uz>2 ŕ`÷ŮďY˘ă`Vyúm#“Ź1˘ř̋ç͚—fý.6řŰl/*é—"łî ň-ßňÍŹD€4*˜ Đ&M ‚cŐů0śa>€Ąă_´ l ř?~<5ę  eƒ€ŔˆŒß8eč˘ĆŤgŸ}–ËD]p\ÇĄž_h$lƒńÇ?đŔü7ĘęçaŽĂńĘn ˝ŽŚrÂ5”ŠŰĐGĐF¸†`;ž8űŃ9œ OîZ œĂą `Ă7ę‡m:×]Ž…o)Ľ”RJ)/F)€,üŸ1;çbň„|tql;´Ň2Sg•Ž;FŠó6 }´<}ĺÄ ŠY[I>óČë i—ő8Ĺq$é3˜ĹϤ €hyÂôWőÎ((ŸäʂseE>ýƄmâ#źGuĄ/b ąžžęœ6nm0ďóˇ ˘žŻĚ‰ü>"./[oi*šŠwćJ˝Ą/ CœGúř+޸ŚÎ—ąŚ>quĂ ŽˆŰZÄuť{#˘G@äžg@`ް8˘]ˆůĚÝ1pxâťËÇU ‹‚Ď=¨8=ĄéĎÎŃôÍšyŞWÝڪߣŽs0;7+ľ—$zŮšpŮÚwkšă牞;ҜťÖţ…„ö.ŕZÎé!¸;Ŕ}‚(á Iœ~źIŽöbÎ~8şŔB‰g ]źâáŹŤ×™­CœŽîŘz˝wZĹJŽŃÝyçšuFމY:X Ä4 "‹¤ÎŽMňç…ĘbćÖŠŁ<˜Đ#Ìď¨"é°.FĘͅöĂGĐßť`osN\8*ŸzîÝ˙ŕ zňYˇ]0Ř& 5E!˘ĺ#ŽĘFóŠÁ6 Ąœ3UÁMeӏ{âŘ­D ÎhĎ/Š3żłÁ@uúb~7ćZî˜=>ľ^Ë˛ě38FŮ6ŐpŹuRłŒMĘÍú u[ŃAuż^KÁEƒś‚Ôő^ń­ÇI÷çł[Ô!mŮjZÍ6ľóŢî"sś-,,štýŧŠŰňÜř>SÔ­š=C˝6ĺʔv yNKHŇXŘ>Řl´ď|Ź`ŽRpżëö]§ĎÓ.”ÖÖwă„}f‰éKúź­˝LAJö¨cHËTąýQYrľ]PNƆGT,;]ťĂúď§Ë❧Š=-ŔČϑˆO"fbęť><×i#đ ¸5÷žhvš2F<ńLA™ý…ëœ2?hNڈ„A4d¤–Âź‹w[ěś÷ş}~–ŸBďÉľ=üäy:qf“†Lă”PQÚ7tŃśłcżĄăăƒ9 ö0›œrŐ97ďĄ `;ĐY'ŽłŤŮ˜´ŠŃ‚BßËć6í;Ůř4€ĎÓfVJ)‡˘ŸţéŸbPğüÉč}ď{ÝtÓMôĎţŮ?Ł×žöŐ| úăő×_όHĂł˙>ú?ţ_âqÂď˙ţďÓOţäOŇ7~ă?ŕăŘOďyĎdś‹ˇ˝ímÜgOŸ>CˇŢz }ć3ŸŚýŃĽżúŤń|rňäi^ß㚳Ç|ęS÷Đ˙ô?ýlSĐö<^űÚ×đ1?ňŁ?ÂŕŇaźźâĆWđ6Lďžű.źá Żçú}˙÷?ýĺ_ţ%łÚPňS?ő“ Ě;Ţ ÷Üó)wüŁüű꫏°­‘}űö¸w~gÇvĹz)EžíŰž•×3™Ŕ–ůĂ?üCé˝ţěĎţ,ýüĎ˙<=óĚł\‡ŕ+Š”•ňe“âşt–X€E‘eŹ”RJyńČË`ĄJ…•iÇŻ|ĺ,xCLÄtWřߘÔtbŤ×›¤)З):9¤ˇq€fJM–rdÖ¤š)šÉÔ6ťŔ†a ÷……ś3¸̕ă†.ô•ÂŽŰ•ßfśyŁCś@‡ň26Ęž˛hp$‰3˛ŐŤŐÔh"ôĽB+Z4DAY€SČR8\ădťśČˇR1b§-œ( Š˘ĂŃ*šé˝Ó‹ęR۝sࠌ"Đᅔ"hÂ^{ť}[ÉŹ{ÝÍâ`ˇĺ ú{ťvšľoˇŰvÚo班úŤŽ•­ŽŮ l‘űm $DťŤóNíżSűQ2M­‹¨ oź1–°F(!š“ăű1ˆpäČ6¨@°”ĚZ6€ĘҀăPÎC™vńˆňóQAkŞ ™Ąŕ(ë„Ň”‚IűpĄQpšŠ×řřÇ?ÎۿꍞŠë!Fąő”÷‹zăţ”Aó%ށůS œʼnAî7ć)m/nÔÁ‚: Żs#ĘÔë*HÇá¸o|PۡJ)Ľ”RJšÂÄ!œôăi˝?Ą/Đgžу§Ćtb5Śîh÷kĹŔëIş.ČżCŞÎy°§ŇÍŤôškjôşëëtxÉ9ŠjĄäL˙ HXšNŘÁ%@đĐŻýC٧L˜u"ô`8í˛ź˛‰w"Ĺâ` ĆŹßÉšĐ}„ĹBSšáý ôĄœž’DijńdäÖ]֏T[[5pŽ´ev*‡‘€7Řą ‡…išE8Xˆ1ńו‘ĹűV§ŻÖCS˜ŮőŽa˝ úXPcĐĚ÷™°˙’Ż NPƒŹN Ů`c"Ýz&B˝é+ÜŚXçĹ;ă+„¸ţˆôÎÍIqKAí_­Q-h8çm‹Űk™UŚ?nŇÖw úY5e]9/ŘąłczęTL ­*í_ iĄ6ś‚ŔہŻĐý1z í ţţŤđÂQ ˝3‘íꐒőQČŹ•j€\,ŢŃ8–đ5Ň~•ď_ցmAECŽ0Š:šeđq‘2OÜD`‘.2ş˙Œ=Ăęc’’˘î֕ó´˙Öź{(ń Ť^Żďœ‚ΙšŮ§“g:ôŕ#§é‡žŁőÍNÜQĚ:ÖnľŹĺÖúń$­żô5J}Ň×D÷W0DSÉŮz G}v–c U*Y$=RçtÔtw´ŔdŽä L!6JÉ–ţ¸ř\,Ă&GĆ'I.ş\ËÓ˛(Żűľ|ë¤ĚXrňiaě>ŤÇ)sĄţPŚćĆŇłllŹS§ťÉ€O0đ #-@ŚŃěœoľŸžEŻ­÷Ëے Š]Ű`ăÁؓ9‹98Ý Ňľ€i¤Z­1XŒGXó$}ńžăîŮ 8„JhQ´#é;NyHł\ ďĂš–ÜD›ŤÄą°/€ŃzŸśľ˝f–ö)8X{‚ŹXP‘틜ďAÜׂ ƒtě öž‹ăŔÖŤh÷IĎwĎD 4¨ş0ú:•Đ{y,řvŔ8`6ڄ/čŢ_ö>ęťwƉM§_7Üşˆ¨]wzö\"`żdŽҊë{<š™ďN*rŸp$ …Ú¤Âýď^›&Š—G1Ň}… Fť°ŢŁn/cţ˜Lâœîmmťô ÷ŻvTS♫.ćaœƒš@ěőÜ|dǟ}ßëugPÓçićúŠÂdKšRLßůßA˙ř˙czüń'čO˙ôO™íáßü›C7ßü >lŰW ŰŠ­ sŕsĎ=Ç=ďž;-ëŘëΞ=ÇŕP€}äQN˛žžAď|çwŃ>đ'ôŕƒ¸ë=Ξ€f Ҏ`íý¸–Ž!žxâIž&ęƒii˙ţĆß"ď›Z˝Ćs†HŔőÖńŁţa-ł­đóŸ˙=őÔSüűĄ‡˘;3ôýť“Í;óńČ7ŔĽ`ÓżŃĎ<óŒk×˙Ÿgš}ké ĘW´ěĆ÷S´íëź9ýF/´Ş”R^nň˛e°€l5Ą(JßŸÉ lä"ƒŕ…CHĽĽtą;ĎŞ~›(|ĐůŞŐ'ŐŁ‘vćĐb”9ˇ+ŔX)Ľ”RJ)/Eąs{B§×GôŃGô{{ôČi$D˜ĚG°päŠâ­ÓwV;ŮHVˆ$ ˆ…F?!q`h˘O@‡>ć{„“­Âču %ü;‘\!Î@P'*o3°tA.\ýGLI.|pâ..-ÓŚs.Cw¸öhÎŐ)¨fΨ8Iź]ĄĄslżĐńŘľQeD­jB‹Í!5+1Í#ç° h:§měęŠ#=p}˛‚´xţa`ő™ÓßŔݡ¸TŁÎVÜnhĐë{yŕDŚS†L¤Ű‚`v>×‚D óײ  ýëB]O ÓŰ"ˇžGgłOV7he˝Cg/ 艧/ĐŁOœŚ•ľC¨8řŁQwH™7˜ü#V–˝€Ÿ}˘ ‚ěúą)Ŕ¤miÁă:˜qÁ§˝ÍÎöfŁíS~HŢpŒţ@œÎH‚sjuçěŻÔŘ&!ŽČ,(BĆw”ӿʼnOé8°Nbľ1¨`:.Ź~„żuMoŇ6ňŰŚM°ŸYÎTťMŰ ě0äStƒ´˜˛@ ‘öüU1_ř9‚ifmtţ1ęćŘEĚ2JT5-Ýy.júš’xÎÓož—p:ĐĽč4/ÚR@"˙ËÂőŕT%5…Uî;‰gŔáQ‡T"§#u†nlqÇ,Ńúř¨;ă)Z_;íśší4˘Ĺ†¤Ś]h…tÝa§#!ľQ}]˝żél×ҍ״hažÎă^wdÜj”Őqăز.„9ۘ6âˇ\Mˇß|•/géżßó(=řčIZYíŇ`4öc—xŽPőžčČĚó]LbMUaUŁ1Ÿ˛˝ŞMKƒœ űAďSżeDQ  2C–dVß´öa˘çúĽÎMzđ’Ž=ëء}Ý2ŽŘ~/`›źăߎ ̸čĺĐeŃ°ĺĄ đ´ä诰Vőç“ZžźÄRj莯N¨3Ž]ŤG&Ăí_Lhž‰ű›đ˜ yNKÜ8šĎ˜Ÿ ^óƒaB÷n‘”DcÚDڜáˆVK´ąž&€Ä@ßhim-xU´áŘšŔ%,Ťlŕ&€ I#3Ÿ`Řöł6Ľâ󜏪öšĽ‰ ”Ë!čK°ÁNć+Řoşégčᇌ}ěcî÷+̸Ÿś›kęu›.CçŚfSÖH-ňŠO}š>}Ďg蕯şƒćUzŐ]ݤĎ|úďčřs'čMo~ĂT˝t\|đƒäzýÂ/üBşuF0”Ú*ef"JSAév˛i)cpă7~ă=|M0^|Ó7}ýٟý7TÍî;Č]ƒˇÇIşsŚ˙I’ž×ńÁ¸żá†č]ďz]wÝľ(…ŰçÁ֚-avoË-ĺĽ!ťąéÎňXö(ű.¸)Ž˙.—”öęR^îň˛X\Šłxö1<Ą”@aí§Ć5°aóŐrFÍË+‹„pjAbÁ[9”gUUŻůÊó؜ۅ@ś›Ú@”{UĚČĄ9ő›üqˆžŞ¤FUHąř2™P8ó%`űm)8ĄA1Ő\Ą6BE•MQĆ2ŁJÖ.[;ء °™ Ěš˜˛vwlśPKŚí%oßIśRlľo'ŕ•˘!übÎÝŽĚâď­Ę4¸Ř˛/őoHqq˛Őř-.ŹÁ#ŢĐßťhÓâůj$ŮęŘí$1uźÖ-ö&ĐôšK”ŻQu\c fÇqĘŔĂłXbĘA™ř†bĄŃ-HĂє¸>ރoÍą E ŰÔ`ƒ>(C/°_ëEK 80fhZ ăąý–[nIŰ堞0vŕXœ€žą×Ć=â:¸g݆{xĺaęĽ×Ră/žq˙؇şŕŚXvőDY8űŕĄÎÔÇŕ\ŘËk)Ľ”Rʕ+Xg?~vH˙÷=ú뇜 ćźççţ@r֓˙ěkWč@;¤…FDuř4ܲĽ;ŒiĽÓŠľ˜NoŒčż|nHé‡Ţ˛LoşÁ˝YK̢˝^HࠊÔ!gôéi~yďW0Š:Ő)ŠŽ&u>*ľ;Ň~ŕ^ ł€ľ/Œ|ůžĽN{‰˛Ÿ°3u.qžxqţD07'°‰ŁZü@nMTc§ o››´ąš.ěVaÓˇ`bî%6Îő€Łv5ZÖŽÓÔIÇO!Ěӄs‰Ib˘˙…nNŢ}űp>ŒŽ'˝Ó2Lxƒ6|]Ŕ6ző$’`ŸÁˆ>#fłđQĆa…éŸvBtáÚ BGşˇŽÁzj hž 粀UĽ4G˝cŻc"ň{ŇĄřlĎŐťO›}šoT¨ăÚůde‘†MDâŁ-FI26 6V“ŃAüłŐČ37˘ç"MN€! éműÜ4[Ĺě!ňL<ÓeŔ3Pa4p˘•Tő$R `+,'ą[Owéôů5Z]ëŇšľ!<łIϘŃűgc[Ł75 Şü=I׼qäיĹÓŚ ßĂ0Ŕ^–—ÍÍ5ę9‡t×94Áę‚}¸/i˙„$ÝN”ł‘¨Ń×:ţm†ÖĹö}­CŃIŹç`ÝnäÖa]œŹ“ł8öŠäř¤ĺQ6~EŸŮăAâ´Ů٤ KĚĘĐ@öŤÂ|ęí4‰gDMFŠCJÓ0dóŸ¤A;âč7éýsęĄ TČ˝VIGăÜýÚűÔvˇŰm›0('‰RG=?—Dú݄Űl’Ž9‹ÉůQ°á6<ěîzĎU̞Sť›ŞŃYj5;´8߼ĽĹÚ׌ŰnXŚĂ‡–9Ç=ěi¸lN< Lö.KŇ÷ĐlfZ´—8Ř26՟̓č–W Ł×îĄÇž8C÷|á zäńÓtćüŰöâIĆ ÁéuÝŠ2ĹĄ1–9)KŔVR`R°pť$“\}p\ŁŃä˜a;ÝëÂÎKţsó9m磟ÝqúÝhůéü[Řyځ–ÉĹśŸíŰĹš!X$‰źűfŘýřCާďPM ŠśČm°˛")TÔž €ŞˆSC%qœcçPś]œ§c^ŔuڜĚQżWážBAMÖŽő°KŐĐ˝ˇ-pß溑Ű',.'WT&É)ˇŒxŻQ fďyş˛ď$ɡ›}?dωxź*¨B7.œçúbÎť‡s*Ǝ3]űœók*Ľ”KkKüžHř‡Dßú­ď ťîş‹ˇƒľv=0Űî$°^ýő „@`'渇~”罝îzŻożývúËý}ęSŸ˘oýśoáó^÷şŻŚ?ţŁ?ĽşóŸÜvŰ­š2uüAůČGŘÎwýő7ę=ٸ5@’Âö졌&˙Ćoüčo|ŰBaŤÄ|/őŚÖěpŸÇž}ŽN:ÍcőĚÖXśĺüëŻ?JűXŔlGĺ÷@,¸Îˇ~ëˇR6ĺ”öż—ŁížĘ ŃwáóXŕüN§K—ÓžŒ˛4 `)Ľź\ĺeÇ`Q\4Ťěäx,N>E­ĽĐTé÷ŁÜbXíňƒ ]ˆŰź†vᏠŰ9…§Ľ¸ët$jŹôżW`YYHŇE_JAŽ^˘ŁM(ŁĐŒą•)áF!ŰŞ­!‚‡.n4šG_*öT™K hňY÷YźćNÇëˇSY;˝ fÝ˙Vem%˙œVś‹ĘňVűśi'š6×çWüžQŁů喭;STb‹ÇouĎĹ9§ř­żíöŽľ•\j[Ď*˙ 躣ײ~~ĄMä@ŒK:6PP‚‚`$AŸaß0Ź`…L#v0čšPDp. ¸oěÇšPXpĚ%8WŐ4A؏ň`|ÖňDř(@C;8J¨řĐxýë_Ďĺ`?ę‰cUPfč7ę€2 ôŕXÉ#-5x -°MŠ^ÁBűÁšhIđ{@¸?ÜĘ×6ĂvÜ3ć>ʳ̼”RJ)Ľ\™ňŔ‰!ýĆ'6čóϸ÷Ÿ§z>k!q¤‡´>˘;ŻŞŇn¨Ńí‡ktŐrD횀Ł:/tbzćüˆžplHŸu×}äԈ:5ĄűW›ôc_ۤôJź„­î…6ň)ŔÓJŢ˜uŠŚ ÉaęlKtůŒÓˆTÜ ƒÁ™.8ň‘ńŢĄ '[>ĺşěô ŞŠŢŚk3¤ýP&Dpǁ€9ü ç}ÚUçTŢŕľ ˘dçŕ uďň0ȃŔĽŢę¸TÇY>˝¤ĆW=łčMŇŢіâüLźâĆ5őz\Ŕ`Š€Ł`ł;;ŮŕűĘcĐĹDR† M+Řîî`VN5")/âĐ÷aäçł“¨=ߌÖs›ŤÔY?çîżĺ> wí 5Ç}Zu¨áÎ[¤U];­Q›œ#Ó]żÓŸŁMśŒóÍ­/ÎŃBĂľ{­B-W—ˆ|”vŕŤ=ĂHnVăž^!§xIÂ1ëśAž×'ĂŠśĎ}Ćá†4†É"w.š˛4Č"HÁÚÇ@#Żkd|°†ä5c§O'œáýٓŤœţăÄé :{ŽC›˝‘<Ôź.–¤Ă3äT¤qH˘*ÁÇ2K°„ô›,°C Ęę`p$×ëMm.}4Čő;aóŒRŚ ˝o8žö°Ă´ŰݤޠËcBRśÜ~Ńë'8ŻóNŕ"ŔÁţÖż-ž¨ÖŻÔß9=:):łó×çś@Fší–1łSW‚Đb/5ÜúžŰë0ؤÓŰŕgŽś \câç%ÔiФ:ĄŐq,㐊ˇIŞĄŒÝCűz%ŞůgăL<Ű×3 ™Žs;ďZP‹~{X˜Œ!>7K+Ŕ _ŽźůÇ˙űÂBLK +´gŮ9Ú÷ŢBKˇißҘííӁ˝ÂúPdoඥlî§n¨Ć,ĘÉĆĆ&=ýĚqj6*tÍ5×LěýaSÍ9Ôďźí0Ýpt/=ţÔYúÂýÇčKózěąÇéȑŤü˜(œœěĚB­ç!•@"ŸřÄ'Ý˝g[ŢÚÚ:oů#9ÉÇ?ţ ž‹Ţň–ˇĐÝwÝEńĄż ßţí÷ň˝Ij¤˘Ý7ťÖ-ˇÜěęý:fŐ}ňÉ'šÝ}ôQnŁęYĘK_.ćŰľ 6i€Őć|)‚ő0Ęy> ˘ˆ^SÚ­Kyy˰€‘JQŒéI+ŮŇyş“Ěrx§łdˆ\şDš<‡a΀CYšŸjDΗŞů]?ńyĂGÄ˝fQĄ˛őÖoŤŒMk S×0ܢ9F#°]îs“2TĄnÂďŠb^lçŹڎŮuÂ9Ůpœ˘ŰUŠĐëL—eîč"Ö%Ű=ݞóVŠçsĚĹË4`B[ĺvÖśôx5éo˘Ůź‰š1ƒÔČŮó›4¸ÉÎKśTr/(ąÓś­ęź]Ů[„fˇUťŸ=?‡$šhB¸$Iv5/mSŘđTŤŇ™ÓghˆÜžNńş19ďĆ!ŘP€1F FĘPĄéDPem°)2° J Œ $@]í˘ÇÀ‚ă œ(Pׁ`1ˆk) ŽÚÁ&Łć•1BŻ:=öŘc˛Źç#55%IúÉE‹o,€ŢWă2ę€{ۅŐТL¨ŻÎ{Ľ”Rʕ+É. ?Ľźôe 2ÁŻę˜ž<;˘ßůt‡#ă,“HĐd‡2“ôh^›y ´ssÓőűkômw×émˇVi;Ę­áďĹśýíîşşJ_sSţôKúŕC:šÓüX—ö:ř›nœó~ZŠý ŐK9/|amŸ­iň,ęźČľ‚_÷X'”¤ýĽ`ŒŘGíŁ‘ů/Š>ꅴě OAÖé%KĽéˆVqX‘wU˜.žRˆ#ЎÉőŕT‡•Zšr1´îňmď=OŰnš^UĂ;ż  ę˙‰_RôŚ1§ńl h 8Ĺé/ĚRčŽăAHŠÂiBQˇDő˙(˝WýśitźbAöřŒí"IŸuzMă@ÖmŃĚ1 (ˆ<°ĘjměŔŽ'i ~îŽ]—ëËĚb°şvÁé¨×ŻĽL•¨ęÓÍÖ¨îĆ žą8ZŤYý5ŔĹŤ˜g s–Ť“•ăĄŢ“I‘Ăs^"v¤Dž5Ý;sĹÄÄé@ü ĆÁěŸq ł ůě;`n“Ř&"žĎĹvƒěiŃÁ}NoÜŰŚýKMÚëž÷-Ďš~Đô€2gץł doEŃCS Eúřßóŕž}ë8ýëĎ>ř7ôēĎŇ5W ŰoďŇŐW˘eç䂾ŐóŠ›Đpä @^DMPÓß~˜nźn/Ý~ÓúôçĽ{5qţšx`ÂÔĘ&ȝkÁz~qťž?0pŕ.{0’gźâ˙Ě×ӏűŒ[ólk8{FˇÓĺwޓ¸çĆ\ƒÁ9l—ó`ĆY6ŐÔNpIöŸRJÉäȑ#ô=ßóNş÷Ţ{ţuçwĐk^óNW†ž}÷ÝwŃáÇŇől]`{ˆýŹ>řŕƒl§0€„ýű÷ńńxß|ó7Ývű­tđ €:H?ü#?äět׼ŕˢ\}őŐôîwż;Ž€ .˙č}łaÍŃwżó;y› ćÔ׿áőš`ŘWżúŐtă7Śi}qĚüŔ÷;Çő2Űßžă;ž>űŮĎrŔŻzŐ+yœÉű ä6ëČŻy˛hžÝ¤cǎą­đžám\_a8wzŘŰŢĘeŤ`^C‘캨Ű;Ţń-ôŚ7˝‰.ŁĎť”Ąm>ŰŮôŁ|Ę ;ľe0ťA?†Ÿ cSטĹëí^˛ă1nK‹R^î˛[;Y°Ë}Á.žƒ-ţÖOhžőăľţśěƒ×-ü˙âý[qÎRĺZi8EgžL¤ěbťč˜ÜŁ2š ‹XkÄąu‚ŃÇFšČoC+JbORđ‚Ż-Š˘‘-ř…úVąíŞlÖĄg,ĽűόČ;:aوć#Fýԉ*ns˙YŽU=OŽę4ŧb”*›ĺWŁ]ż žŻób7çďtĚVű‹/ś"0˘xÜVßĹmúąçŽ §ó:ŰzĚŞo+üĺ”Ë÷ô˜˘aŘöŠYŰgí›ő{7ďvŰVăŮŇTnW–U´ˇZ¨lg ˇÇŰ\cÖůúˇ5/MVřožůfV, `)đ@ 2‹P˘4ć8×VV .\¸–Š9І“\G(+8ç`ĘS „Žu.`ńˆk(ŔBAh íˇJŤ,T› >”†PŽpMĐjT_óôźšŽ÷ ŽŁ|¨“F×(K…˝ĚC‚j_ăúHT^3eőPŕˆśQw,ށŒ—œíătŽÄuĐv¨ö˘†g\÷ŢżűKšoÎąâ9e­ć#x„ I"`Ă m Ă­çŠRžŸĚšżt“žGĹé›čPůÂŃ1ćŤŐőÝtç×m9ˇčš:&ľ”+Gf˝kKš2EGx`6ŹvFôžOu菿اMN?¨ď𐄆=ŢĄLł–€ mřÝ?Gß÷Ćyzë-ÎĄ[śŠM&§ÖcúýżŇ~úƒ€n<Ó/|ŰşfŻ=źS‚vP€_¸°’ËI?ŤăÝřGü$ýöţ›ÜźYԍ„"ćű ˝S.I;>ڜŮ(2Ö?9^tfŔr̈#_ĹiĹ`ÔËŤ |=8|-îYPĹľ­­ŸÎŃSşe(ě€pžô=Öáš_ŤÖIӕ$”­•á  ˝Ł76óBŃAlő´4§´űšűĹ+ƌšöcÂNWŸ6…E˝˝ mĆX/Ô@~ťľRŒ"n]I’ ôiEĆŠěśÖH"Rá~ ć•pÜŁ´Ÿú´<°„¨5ęÓRÜĽŽk‹q•ĆA…şíeÔ÷ъ+cľR§s0łc)Őm­]#ŻńüęŻ#÷\ŤvÎ}ę’$Śm•]š0˜ tVagPg:y ąŰdé=*9 ˇ ĚńŰCJ×búÁ:kgŹ5RăBS?{î<=ýÜ:vbƒNÝ¤ Ť=çŽ3 H@š>hőáĚą—ď{BŠßKkOuşÂ™/Š9˘”Ał¨KZ`ˆ—:ěńYz~j3Oĺ3IÓě) mđ‘0gĘxKSôlĄ—ę}ŘëČľBo÷ÉĄĹ1kŮTěü¤mś­ˆˇ'4Ón⇡ƒęÚţÂx:âń‚(őŃĐé4ʌšiiiŻëm*ŠÖŰśʲLÜněÜOŮR=6ŚĘÓçy0NX x Jł0°ě=ŢaÜj7čĐž]}p‰lÓž=ót`)!N_jřqUĐCöÚfŹ‚e`+hjâ&|đŻ>N˙őţ[ŞŸíŰťL×]sóŰďÝť‡ß ĂрçůfkŽÁřƒĘ(kŽHn=ţôłčÇNĐß}áY:~z%w]ľÍÍ*č3Ń6ˇĎË2Řç AZ)e)/1?`Ž€^™ÄQî9j™üM2Nč㯳›…~k=4íŽíĂE[‘ö1rH 8ăZÎ É2ďęŞ6˘‘{ĘRŠs;ÖĚôŰŢ$IY%UŸ‡.Ě÷PŽMíŘL<ŎŐĚś˘Ÿ<€DĆKœłô0 Ś(2źčs/nƒTĂ(ˇĎÎIEѲ5pCÓ Ş˝m 6ÖКc;ĽŮ¨Ń÷ă ´ď"Í5ŔxSaŻŘ#˘œ˝@ë‘}—ö‚JžœöíG˜Snžš´”RʋMŠ6ý݁­ŹÍ°CŕAĐd7ĺybyfcA:ô]]šdď8°j` vą‚<çĎŻ¤ŹnŰŮ đS V)W–¸gţ&’ľîż'…OâżcóIĚwńC[ü˝ÝwńwQśŰÇr1XŒS'D' F<ł˛A9C]‘‚Ď:O‹zÖ"&żpżx) ŠéE†Ă$ˇ ‡čß6ŞD•ŸĐDŐ¨‚ŁšVĂ(o|ÝJbiazöQĘÄ íRIšƒL1ąŕ Š˙–—ôĺfĎí€IʗR&Ş˘h E%sÖďŮךn˙ݡU?ŘęܝöďTvś=˜ĽCM•=랬’TTš)śm‡<ş?™úmë(QnbhI5iý&3Œb9ťÝžlYÎlŃVŠČvűS ‚ŕÁދ<l{:{›}úwzß.ú;ŤCv9{~ѐRř.>KôşU€š€˝{÷ry0ř`<ôT6Đěšę”Ęčƒ !؏ů`5 Ł °7h•aBĎSçć đ…ŚÁX‡!uč@Ů-°ÝR*cîǂóęĐĂ#< ľ×žöľ|o˜+Ő˜ŁŒ:g`Žř­sĽą‹FlS Ř7´ŢhěC›ĄŽz |źĐ…°ż<†ů\Ӈ  ´'ŽStňĺxśĽ”úÉ˙ú_˙Ç'ăŠoţćoŚëŻ?Ę}öcű8=óĚÓôO˙éŃĺ’ßř÷0ƒ ărϞ˝ôć7żŮÉ׸ţß ç#pŢ"Çëő×_OozÓéĽ(˜ŻŢűŢ÷Ň;Ţń:zôhiĐ|ŮIBÓ§žpď¤AćH%ş˜~ŕ×u‰ÄHÂ9žˇŃ;ˇÝRsNçݗuh!˘w˝nŽV6ôÁűťôؙýé—6é˙óÖI;AWł‹ŤŸuŢĎŮĹ͎JŸ—]X$ÂW"~ĹŮ-Ń>sŹ Ĺ‰:Ą˘Ôš€‚­)E‚DŁÁ…ŠO×YjđŃ÷¸uTᓥ1P—‘Ŕiz˙&ß"Š76Ö8uBŤ5ďŁă#N˝Áş9=,‰x ¨Ž&Ü^PWj€ÍZ@K-Dśęi¤€Ń(ĄÍŽ €gk^ˇ-dٞm9};!řçy§¤ű*řĽĽ~Ö`.Q€ČfwLĎ<{‚î{ô4=ôČătauHau6:Îńčž_%T‡mÂĆD;&lżłÎ^uĚ)hCŽ™¤őÓvj‘{™ Şŕ~˘}˛ŕ(Öuš:“­Ł>űNr,-8Gę&ăŔ‚v[Ć'˘č.\Xuż{9ĆJ˝ž~+ă§ţ­îźýFŔEǡ]?Ť}BS č˝HY™ĎRÇTllEúüô>C?GP+́Š1(X[ďGSD‘Ő17ŒÝřŞÓŮ ľuąĚĎ/Đ\˝‘Öݎw2eŮvçţäY ÔŠ­ýÄgpÉą{H_`2%đe~uěAe<ć)MsÓ^˜Łƒ{çéŞC‹tí!č€ó´gŠA ó`dŠq#XU’DšţeżŃ~ávo”mŔ…‰ˇ ÝŻ˝ú}í›_C÷=řŻŠĆŁž›ăúĚđv°2Š°ÇýđŮgťučëůż4â2Ś…v“îş˝I7ÝOŻ˝ó(}ńÁcôŠĎŁ3ç×S[Łm?ľ‡Š3\ŸĹ,@RÚÖA{nx– ÜÇ5 ĎBďMS_6ZîR.żëR@î1í¸fĚNƒ (˝ž>ƒbڑYăyëő, 0ĄĚޒY?Ě`ç' @űX0ć5 T@Ÿ•PŢ1^ŻĆyř†ŽŒăZ óC{ď—{ńnS ş“vр1kŞ(‡Ó9ogŐ1˙" ,JľPHHĎIvYěö÷Ě:lQŢnŽ9ëďx‡kÇćžŇvŇă‹×6Çq[Îş>mľ€ŮžÍúűbš}>Ěsn@ČJ~čyţ†ł˙ÚkŻeŕdX = .`ˇP–Ě!¸Ć'?ůI^x˘LÔÇ ‚żuń‡{Äyyŕ~Ô¨…ű„Nëůם…R;ăZ(Ç)‹Žś@ť(D ŢĘüvÄuńÁš¸5ČâžĐŔ=ŠÁç˘|{šß;ĽźźduužzęişéŚ›č–[ná>řw÷wôŻ˙ő/Ň/˙ňżcă&Žű￟.§<řŕCܟßţöˇsŸ~â‰'č÷~ď÷xžxӛŢ𼌂 Fţ֗ržGĚ9ŸűÜçč­o}+•ňň“ABŸ;6˘c+X;Ű9^˝|;1RéÂK×Ĺâ$żőpŢ~kcpĹě}űŰ}ßëčÏŹQß9°?úH‡žĺŽ]łˇF/ä[¨č˛Űů=9’äyW0…RएUk•>ũ H*ŠC™ŻƒHůĐG¤NĆ$>Ť, VŘƒ\îű˘ăĘőőýœĎÍ.Ž–(Œź3ˇĹúœŠÝî&G-c=Q‰jŹ›V˜Uc,Ź^÷RĆ-ˆ:öD­ä˘¨Uâ5˝;Žę™Ŕ8*{”-ü&ěĐäu&;ťÝ_h7W×0‰\ߙ0řŘYŰN¨Âíčtž`HÍ΀Ă5::Ţ CA—ă.Ց.Ä9)ד:=R]Ś•ć"EsĆsÔuetwnx@ąÓSçbwŽŤ“›ż7şk4÷œĂvUŁjŚ>„Ň樭2,؈q â#yîýјzC˘NŸčÂfÂ:-.ťĐiy>ĄzÍ;şůć%[ڍ¨ŰçčŇRČé:rz’ žý6a“Tçźu^ÉžFsŽŁćą–•Š"ZYݤGžZĄ‡Ÿ8M'ĎŹQ§;Śő>­Ž­ťőqǝסůśs˛Î5Ý)Şëťof §P ++Âȍ´_jJ|ŔĚa—Žr/yŔcÚĎěˇnWv9ŐMôţőÚY;Hú;f,Đ!sHVÜZšĆ`‹N§Ëďs¤T} ˜TŻĽ×/ÚH옰ś­›ŚŃ‰M„03Ł(ČDĂ~Ęĺű• x}6ađ ž0€dĚsRßG›ŤYžCĹőš:U2÷t ăÓνőzƒŮ;ŞČbssÝé›Nohó6s’$Ɂű-ӟudstb˜Ok¤úˇKœş°Źœjbâőv×çDN7ŹĐŢĽ&˝z]{Ő"9°@Ë MN­Ńj€%â”=QEAĘEŤwŞý.›Ú•E@ćÉ­d+{ƒ4ÄA‘›SîźótÍ5čŐŻ>N?ü=}ě—‹öD“ƒŞ`ţĹĹÖÇęsâÔGŃܧhÄĎČŚäšoÖé–ĐՇéŤ^u”>{ď3ôńO?Á@ ['ą3fíj€t<ŞŘ1aíY°C Kb…׳čÍć<ë™Đ7;ëœ:da~™÷ ˆČĎILžŒ!-łœkdvRËdcŮ7 vnU€_œäÁŽdR蹏5vÓŕ ľ bœ7¸żÔÓyUYyľ~œÜ*$?w ȀiNŻćTœnŽPVu i˝„AĂ!Šě>ů”œF‡‚m˝Ó@azH…5ƒŠüřXĂ'Š6A{m[žîÓÔ(šbéCxÓí¸űŻ38sLj{óŒ2Ľ”RJ)Ľź´Ĺž{ôďM͍÷Ţą°Ť!ˆÁ‘ŰąP€mvę'Nđššm'p…ÖĽ¨dë yWÁžž›˛J)ĺJ—+`1káŞ"JPFé1Ş V|žťŒM,ŸKň‹ŕ"Mă唼ň˘÷ĄĘ‡lǙݣ"ł3v‰€vť˝—0ČSËŰýEĽ-Ł/“҄hý´Ž0 Šąl'Ѩn8Qń<`lȢÁ|ýÂ,­:X‹m7Ki™uß+;!vťK ]œˆY$ f°SMmł Ů>>Äţ]ÖluOĹzŮ}y…<ťWŤˆúS~Vů—Ęő÷Ŗ§÷4kaQ<ß>ŰY‹YżgťŐX-–}9c镯|Ľsň}=đź16`}F‘Ž0cq‡…¨É`řłĆ.>XěÝwß}ôŔ°Q  34  05 :E™$€Đ9FŻŁ  \†K_qs6€¨§R Łm>öąńu[ÎdŒŔ({Qă+žâPŚ 56*ýęĽó ;Xâ:¨‹2f MžŔGĂçZ €8 PíK8uÇý¨í‡ëŁÝȁzç6Ľ”riĂň]w˝ŠŢň–Żá>÷ş×˝Ž~äG~„î˝÷>7^î˘Ěi¸ť÷önĺaü˙˝ż÷ \.ĆĆŻýÚŻsn×;ďź3aíF'Űş^/m‹âŹ÷d)/Ičäژ>=˘œÚAşŞŰu ĚP`ôx÷χôćçh˙ÂĽ:n<ŃŰniŃž¸N+›1}ţXÁt’“Ë"IœO/‡÷cž HsĂáXó†!ń'ĤšęĽ0]˜BœÔY:BK`M2-Ž +Y¤Ť8*á8Ujó|š˘sŇŹšéÇUGřz`^@d:œ­X3­qşy^żT¸Žâ7Kđęn‘a0űÄeŽ2]6´ôô‰DÁ‘:BŽű@"wůŢÜś ;´"žßI0aşöú§Ł‘čې#ëݚϭ›Zý şyźFW…]:Ň_Ą.Š5rTúÓsKtßÜ:SßKŁÚPÔÁڊA/$ŠFĐHCÁŽLŽ ÁôGsXiŃ9ÝÖVWÜç‚Đ ˇŠV™Ý;sV˝VŰ^uCulZ'?ţF†cIÍqĄK´Ú]{L s1í[t5'9˝ż˛:ŻňÂBB{—›ćYĘóŕßݘ@ H‰3ëI+ؑďúĎŔŐťÓOčĄ'ĎŇ˝ž cĎ­şľ¨Ű> S —QĽĽĺ}ÔrŽôóNť5îYj5˛˜gĐâqŔ € [weEf„(çŔ'r9oÓXfŤ‡čš!­ fMqĄŕ XPđ‹Ô+s6Z&N=^ŸcÚíyÎíŽő/ÖÁXcŒu˘Z=mnŸ˝‰(ŘBënĚÓgĎÓíކ~<ű1gj(Ź2#n˙!őœƒs<§lzę UV:ą)Ux^Ó{Ôy.˘PÎŽ1Őj.¸gߢ^żĂL7îşŰÖŚ…ö2;Śm[Űń ĎNR$ĺYňNŰĚţeű랊›—ýŸoŐé×íĽ[nŘO7\ť‡ö,⾜mŚVĺś Á8çôAOaŔä!lW (C*j”>˘mˆéŔŚ}űörşő–WPpťŚhĘŘĐöÂ⢕ x˘cžs„yĆ˝[hÄď:ԳլӍ×Őéš#Ëô†×^Ď ‹O}îi:ż˛‘˙Ř:é;CŸ—g–Á"w@RSQ $€î¸ąąĘ 0p0§éćɚ %ň>S°Dц~˛ý .{ŠŁR/iĆ愔áV~hłŔőď(†ĎápŔ  } ŘN‰ăÔé˘ŕG ÎĘŰB´MŇş'~\ ý#­-îYŚwôĚЋч‹s„ФmŠfÚoě5í\š•GŸĽÎú܊,VEű÷ť œşžg(ě<ÝCŢÖŹí‰çÖíuRđ §VńsŽôż˜’eQJ)Ľ”ň˘•Ýř˘śz—cއ];8ŢĎ<ó =HŞé˛U4­öŠSgŇ÷–ž7Ź.sąőQA9đ ývĽ”ňr•+f$¨âފwŕžČ/ŒU­ë;ă‘F‚`ÁŽ@ -C”VJ˙ľPżg}QŹc[Ëľhh+ł€içl*0ţ,˛HîźdŽť00ű“$—oÓ*–z“ëš]Ť*ŒVYۊz/˝ŚS€`ôĐ(m8BápAԍeßĐëjnJ˝öôËggÇĐĹ:2f˝ŕfm/îßîÜ⾋15l猷}ŠČ\RX(HcŤňŹQËţ†Ě\ďoŤíEEw7ÇĎť˜ăˇ’펾[™í€vűv`ŠâqŰżU˝/ÇźŁ‚űCŞ€×žćľlŃÂy_ÝľR×Ă1`‚˛4(ťÂ7ŢȆ œqŒhx jśřĚg>ÆG l•Ć#‹sN:Ĺŕ ƒ21ăşŘŽc`Pv ƒ…ŽC˝P'4@Ÿ‰ëมźĺ-tŕŔ‰TňFX\G ˇj˜ˇ†˝6ţĆve­@=q?¸śŚ ŃöÇń˜ŻpO#ř9 ǂ™CŸ•‚(›…’ńÎŃűqJ- źŔĺŻ^Ćg^ĘËW4şg3‘~†ˆŇ˙ë˙ú5Îsř]ßő)óË[Ţňuôo˙íżĽn8Jżń˙‘ˇĄŻCĄűąűQ:zôčÔ5Ő¨ ŃČTĽÇ2ăĂţýöo˙6ƒ˜ĆxםŢEo{ŰŰř]ŽőÁŸýٟÓüÁđżőÖ[é§~ę'Ý|sƒÔ֌‹gŸ}Ž~őW˙OÎťýŽw}/;m~í×~ƒÓˆŕ>żökż–ËťęŞ#ź˙—~é—ů<Ěi`‘xĎ{ŢC×\s5ýĹ_|ˆŢ˙ţ÷óřźűîWŃţŕňu!?ýÓ?Mo|ăé{žç{ř履~Ú]ă×čüƒŔ€•_ţĺ_ćy÷rĎ=÷đŘţ™ŸůzÍk^ĂuŜřĂ<'}ˡ|‹wž–ňr”ł›1=ť:ŢSĹlÉzĚëšąWűŰşóČ=ŸWü‰ďÖýů—œSgÓcg&¤Á‘/ÄŤďdŒˇÝ˝w(ŕ#†ax ţ%ě žś ˘ˆ˝ˇRń)DLdą–Ť‘ý(a<IšĎtH>§|ćp‰ŮŠ)ş ľŮ8Őuš:74iý˛]đě˜xĹş{×8şěžűĚfąş:tNÔ%ځŻVäϰ‰|Tt ?+́\wÂQöQXĺˆa.Ƀ,Fpž:çpâôľ1ĎN獰…ťˇČľÇőĂóôŠńşvÜĄşsžš˜Zq@O7Úô…p}qń ęm.oˆČä "Š'ƒ„Š’Ţ­[&5J*p0U8ĺ ž•ÓÜhFW&3ž!eIT§šz“şÎqśâŕ4ľć[ 0)ŸRuÂ"kD`ö}€ő§j3ýŹÓčŮócjT:´ěœócƒdi1Z]ďr8¸ѡoŕŻĎz/úÇž}űy˝YČÖ­ëÖ:}zňř}úާé‹÷>Á€‰2†Ž0‚{’öQ]'îŰ{ˆÖ7VhumĹ9W9­ŘMúýĄ¤ĄđNHT`\u†b{ő&ë ´ŽFËČĄ}ŘŹS^)´`űŚ^[Ő2ą†ś@˝ŚŢż´ý„× `†3US$ŕ]Šc}Žęěľ@Ër˘őˇë}†Ö!+`Ş8´ăs•Ű\YčPe ą×ÓHzč:ľœx" 12'UŇśU[Ć,ÝĺÎéŰ˜2dĂő 8×ŰóK4ßZŕ>‡ú+ĐĆ>ÇŔGÖŰíš[›ëćˇësÓśŔőŽ=˛DŻźe?Ýֆ# bׁƒŰ}'hú:ĆŢ^ÄďĺlŽéřMśĹăí¤Ď׳ÚĚÚí¸íĐţ‰eP˝Ů:ÓńwčŢňükő*ßI%iŇ­ÜőjŐČľŃúîo]˘ŻÓ+č#Ÿ|’ţöłOR§7ŕý şW­w^Č@–ÉBĹÚź4xIeĄ˝—ZÍEçXwó¤›ŔĚÁ´ŕŽ´Ű‹p ĘÓžÇm4-A"PFĆYŽÚ–3čńx_F™ýä0Oö +3¨bŔď7ěĂ;§éęŮlÎĽó—‡{ńďQűźěóŃűÍŮ8‚,ą1śÁFą¸¸Ä@čĘpaÝ˝s„}Ů÷żž_,_둝čvľ§ĆšyĹÚ9myEV=‡á˝Żý 6cp+Rąžśďœš§ą'ľ˘đŃcçç›îřŰŠ”RJ)Ľ”+OT7¨ża3Ćúď-ôXy?×S_§žŸ%ŐáîúS ‡Ôci[ćŒRJyšÉ°°F9ˆ5ʨ¨Ű3E"ĘŤ]ôëÄŁ4ąłá—ťţdęŠRT*ˇŤCńţ‹Űś—$÷+1hjVŢĄ¨Q2ĽX0ÚÜDČ\ŒŔXŠ6‡‚„cLÖ5â¤×ĄŮzůűĽy–“úRŸ*âĹÓí5ś[lˇŻPAşą  ˘°ŔŠhĽ`˜Űޞś˝­Ą`VďVfJô3ë˜çs­Ý\ť}[$ŠJKľŞÇ##t{ń^g]{–1ŕr ʆaN@Đó>ůä“i.77Ą´Cŕ4Ĺ6 c”…“ŸbPăŒ7ß|3_wÝu &€!@ƒüă|<Ę, œ€‘Ŕ Ľ=CpœŤČX5´*ňeÁČg&ä;žă;xNA=ňŔ~”‰ůĺ@p9`qˆă8ŕˆśľ^×@Ýp/؏úč3‡Á@€C4‡.îÇáďƒŚĚ¨Ł2‚ŔĄ+‘@?ýÓ˙#ýŢď˝?­'ęsüř úO˙é7ylçw~ťł-ú˙á×čĎ˙üĎéç~îç0 Ň0Áý}ôŁuuy'ýÄOüƒČ>ôĄŃűŢ÷>úáţa77]ĺÎůsúő_˙uúń˙qžž:vŠí¤FSüţŤżú+úąű1z÷ťßMżűťżK?˙ó?Oň'ÂmŕĆ#<Âu˜˙Ă?üCc”ňň”őţ„.tПÔásń’tQNL‹€ŽqÎăçC2¸Ć퇜˜8GËs+ę|¤D^ŔŘŃô€ĹüâÖ"uúDěÜŃt ŸL˛őHVR‡•¤óšŮLS@Ä|–w„bž+m}°_ÚešŽR‘”*??0¨ƒë)s*€9aX]…c}Ő­úÔl´(Â)‡ĎŹ6ą`vG Š*Îq`Ád@aŒäH ’pD6gp[ŞN÷Ú3éĐ ˝óttröŽť4ӄ+w=ŹŇcA›žmíĄăóűh!rÉ:$ÉG'ÓDP‰DŤł#9Źť…“{78‡Ű8R2tNj€+\}Ü^WW>X-Ć=Äîjq‚×]TjŽĚíllŇd4qĺ…ôůYÇŁ˛@ôY’EQçŤPĐSgb÷đĆ̞ů1ľę#N“p~eĽÓ}XŸŐ8@#đÎ|8…ĆżNKË{sňä9zîä*Ý˙čYzŕ‰ÓÔĜů`š łą ĂÓ:ësU}ĎP˘ł{őcŔpŐşŐZdC*ևëˆÔg_ÔÓtżčőTÖs”aEłú˘:)-ƒĽ–Ťĺ(ĐCĆą0<› řŕç‡t8Q%MiĄë \`üâ>ąćĆşksčxwb>xŽh{eŐPĂ8gť‰Gě˝ę'm˘0çřÄuą—ăÄAŞ€pSpűŒ¤ý'c×&ÉXúYTKíOúŒ´}‹zŸełČÚ/­´ç™Ń 8ÖhŃZrmÓNuŤƒËÇş pávŠděTÝX;źżMˇŢ¸Ÿn˝é]{5úy…ç™Hć „AHvź–KšŢLA‘y‰AIj'ş™ĺ`ŢŐy¤u•zz“÷7îÇîY­­öéŻ˙ňŁŽ]7é5Ż}Ľ[ßÝ$z,ë$v0óŹuäĐ2˝ëŰ_˟GŸÚłźŸNVVĎńgmmÝőËĹ)€§‡˘ü{SŻĽ:ʞ˘č9–őDß7:^4ř€AG“ˇkľRőÁHUĄ :î}<‚¸írŠH¤=ÁR|j‰gă°ö* JĐšOs˝c^€ýăőÓ4 ÂD" _ÖîeŰÓö) HËŽˇ58Ăś§–Šs­MťÄÓŠô\˝–›e{Ěs"Á mň,b÷ü{ü,$Ëč˘mŻĽ”RJ)Ľź8e+ť0ˆľœ† ÂŽ ˙_öţ3X’,;{舧ő{ůRkY"KWwľӍFĂ@Ë!{Ar¸Fł]›YîWđ×ěÝł3†€4˛A  hYŐ]2KeUVVj­3ŸĄÜç~çÜă~Ă_Ä˗YYŐUY~˛˘"ž‹ŤüŢë÷œóÝď$ŹW1°ÂżŁ÷†Ť_(HC¤Jéű'•Trßrš(J›ž˜¨ěń$A j|‰kX`­Š™5˛ů^Œ@WU•;q‚†ˇaZđçv×ß (c­iŹVˇßš;ľ\ö™Űľ…›F§URîe/Ę۝w/}ýë_7ƑœQŘ@€é.í,Ć)Œ›jtD}1^’€Á†8\ń[_ œXż~˝Ä7Ǒv}ĂÉxâÄ zçw8]8@qNNŠ\C ށp VË:AzŘՎp(㗿üev°Şa×ü€:ЁE)|u>QP„:Ž•ĹőxB^¸LČSC~ Žšʎ|p˝ŚÔXŞ!Lp\´Xă7Ę ś}țcŹZcňAţ7.~¸ćŸT>z`Ď˙ô?ýĎôo˙íż‹Ö=ßřĆ7h5ݨó{FBŽěۡ—žôĽ/tźż^o0ŋ/žjŸzę)Ú´i#á˝ňôÓOҎżËŽM8fĚ |8•Ţxă f‡řň—żÄăöˇűŸŃÁƒ[ÖWüŢďý>1úÓ ă÷Űßţ6ýÓúOé™g>Á× 9‘š€Ü'žx‚žúŐŻšźúšŹB|íkżD_ůʗůĚ`Ľ8zô(łô´ÎŁcŇVŸ˙ü8]ŒÝňOţ ýůŸ˙9Ďu˜Ç0ďažËíqěŘ1Jĺă)uc,_=9éBűÎ ˘ÝŘě!s9PŢxą+Ĺ÷öžŔÝýŽ0ď°ŚG‹Ëwé![Ł„ĄŹů\‘tFřßÝSłÄOW' œŞŸŐuŤc)ㅂ¤=ŽĐę‡Bë4q aŢĐô°›iÖźGÚÖAĎqŰ)×BôȋňÓ˛×kužm G;Ú Rç9ěŘ%'|_ĎÍ/Κ5ׁ°päsݰN/ŹQt=É ŐY°gÔ¨rb'Šůť€ĄÁô ăË/ĎÓDu†Ö‡ 4XŸ3O֔%[Ąëš.:•˘S…š.šă0`1ńł#FhœjžPţga:ČůŇóMáNÁn˙ƒ<ă˜ňó rźŽ ÷ÍZ˝nŸE“ËfŕčĚHßg–Łuƒ­ÄŹE—ćiʬ튥2ϛş ‚8Ěę6ąţ"ý ýŰeMP0ŒëLSÇ؍ِŽĎ„\żĄŢ< öšň^_˘ËćłÉ8ŸGGú8<Â8ůôôÇě2ýřůăôÖŠšžš6NŻZÔUoĆóĹÓ˛'Œ o.h0ƒJŁ)+ϨT,˜:÷Q>›7N{ăÔD( SžĽĽEžWęćSĚă:jľ^zNǓ:PÝĐ*$ŰĄF@ęśČŀ+m6ĹÖՑeG\ëf×Ö–“ZłĆ÷`ěřvŹáňz˝‚Ýę]]ÝŹ›(Ł˜ŠĘưKĄ†aĐƒŮl.ZŸ(Cë íĄwűĽSŤĆőhZ}aˆŠ…˘éÂc>ˆuaŒc„rÓÖśÝEĽ›`Ÿ_śĺYš;ă% 0%ä¸>Úp‚÷ç†xN˜_˜c˛0nŤSŕ”&Ď fŕqjúJą”ˇ!ŮČ6ië– ´yC% Ďć9ysŮI@'l"† qÝLŸž™wC™GQ\=pfiٔ/Çz¤>{Ď%t´w­ĹVĐ>܁Ú%:Ý%eX0mĹĎ Œ9ȎBű~‘ňĂezäą鯿÷úŢwHo~‡>şślÜL=Ý˝´X÷éúĽłĚ–€ś˘ę—ieĘŮąeÂ|ÖŃÉłWéŻ~x–NFČĚEZŽÖ˘ńFN˙pí. Â÷W†„P{#Â;5é/h€÷F†×™ůŁF3łÂވń!Ŕ¤2÷‡ —Óe”•c|hś\ЀöK ë ˝[mĘvR, ۇ×ňe^v"˜÷Ü)bKjśŘ^Ł÷˛m™äé8‹\îܤcËe¤‚ž€ë4|Úúž€ÖZŽ–qąŤۈcťM+đ­ŕ’Ądˆéšv=Ą @–)„ĂăPa´€’ĹŠ=œ(Ýî@ E ĚřVŠ_D°\Y`ŒP čÍPg[Áá˛yóf>Ň˜ěŘ rBwák(ĽW3@ ¤đeBž0Râ7ŽŁ.îNA”¨`-Ž‚żÔřaÝ AČ çńAŰ1ýŹŠc(/ňU§ŽĄ h5pëűéjžŠ¤r÷Ňčč0ýĆoü;˙ą ęĐĄWé÷~ď÷xŒ}ń‹Ÿo™ă”Ę7“0&k˙„`\uw÷ʚ+úńžđúG˙čršçĎ] ?ţă?Ą?űÓoŃoţćßçô^|áeTLĎÜ2sÇUMéź%qdd˜Ă†Š|öłŸćoÝľ†đ(űoţćo2#Š 0 ć.6T0ßŔĺžë0‡AI”żĺž 6F÷`Î4ĺşÁă4Œœfd_ܲçSśzbĄ”ĄŢžvŠ@ ř˘YAóßccăQú‰˘áWRšEćžÝńXÓ{ĆŹťs Ü!°"JדTĽ/6…ÄÂ8Řŕž|/o 8і‹˝fy8ňkětϨr* śÇ˜Çű.Ž%NюMvě‘Ö7ŒŔí`×3žŐӚP̈́ŇŢ‘0.Ŕż‡ńéYڊÔ[0r˝°Áąä•JŠ3NĄŠÇô2qĚdáTo `Ó&?8&s`ŐŕsR' ŕt!Ô Ę=Œ iööô‡nžC†ĚĎMŻq!œÖ쾔IÄĐFĐŕůˆó4ŽŐ‚)`@*őej„u*-ÍҖÚ<őÓ2ĺÁ`œr9SŠ›….:Y¤3š>š/”šżŔm‰˛ }-J[Ŕ‰ÉŘu#Ú5ŹŞŁÚç]ńňüÄi˘-ëĐ5ę֑dŰV†ĆšÉP"^űČźełŃ§{ŮÔť-šš]fĘn§bҏ–ÂnCq¤?;×)qwh'C4p“Z=~fÉ3Ěó˛>›5í8rłÎkÂ1.Ιbžřá!şxeśE/ľˆŠxÇ:Řü8_ź?Üâcźą Xâo—i"ëß2-šüá䝞^ŕâpƚP@pú7Đ9QßlŚ…m’tRjyU7T@ŻÓ2jűšŽRuöiBç¸vŮx’ញ„ĆiÝE;ICÖ=ţۡĎ2kË-3&ţĆďS8ČçfLŸ˜5ŽóÓ'Ę"™blů›ÍŔŠŤôŠK-‰ŕ[é”ĺšgř“3y¨á8 !RĚÚÂmĺ0z™–Í$‹ łŸć|Ž'~ƒ•azđAš>ëç™h§:;Mœ"ÎląA…ë čú‹TŤTiŢ´ĂŇňSŸź€Ńl˜%°{ŕyäĚ 0!'îÄż2DŽ+ńšÔžăhW …Ďľöů„ ˆUíŻíßčó—źm}$ vjRŕ,,|žČką3 Ť„Ť“„ü ľŒČSAĐđ­›*ŕŠÇuŔ}›mžÖśJäľŘ’ľźîüç͸NĚ $´ĎCm ÷ůyśž:7ťŕ´IƲđ›W“C×hˆ"-ćŔ‚ I¤l%Ž­ ß%3x÷z–J*Ф’Ę"kńI%ŻĹ;_C¤uwăä‡OźqŮRIĺÎäžb°H:foçÜtĚúˇű-Ęľ?góŃEŽŇä:´ÝÉ,iŕpËęţ˝ˆ:ÇŐ¨—(—[ˆťp˙0Š*Ap€ ŒP]šQœWe3)É6[ŤŹú¸Sçý\“_HůůŻřÜ*}˘]yătźŸÖđ ˘ük÷#jX1*% nnyărˆ2íŇHĘn„ö€—v _ťvK^sťcÚ~ľöît­;f“÷t*kťď$ ăĂ:ŢT´Œx^0Fěߡw]ž|‰Ç˘ nČ ĚsCl Ç‘€ ÇHKŮ`œAƒ1Z ?0f⣝l”Cw`aüăo¤uáÂOŔ8‚{Ž0’ŔyŠźxçŹŘ˝{wdŔV0iŒĄĆ!¤ĄĺDŮÁԁfĆĂ5úя~L7nŢ çţ‚É˙GôëżńëôÔú'¸Ď#DDRKKËl¨—Ýwd㇠<˛k×NŢ]řÖ[oq˜‘˝{÷ŘńěEl7a(lşC˝“`ŽĐĐHƒž8büh'4ydNËv—e(€ČI‘lY*H ‚źŇ@# íŽ^űg)çQWÁŁéĽ{3żcź-˜îykžIc=ď-&꥛UŢľœĎ„4ғ5÷Á˘ vJĎ/‘œŐĽüx˝‰v×8;úÍ1?GGčKŒA?´t3o4á2×ÁůĚZÇ^B¸.ĹIjTa8Šˆd—/Î7ů~8žrć>aa'.Ňk(‚8ź2â5a:v„´@^ŚÝľěKc5­ţ–%ëĽ Q§”őĘćËԝÉQŐ8ĘjUłŚ€Ă8ł-w&łÜr•†ƒőxuƚů#W§Ńćő™:UęUšĘzÔȇSĄDďřýtŢ/ŃÍ|erŚĆ!í5ęŇěÇ­óŽ[žß‘Âm!%8xdnƒŁ›ë„u¤×´ő“™ŽŰž€ôĹŠnđžB|„í:ĄCŤ›ÄĄ#ĐDâ°˝EYĎ0˙˘OŔŠ$a$sQGL:˝’zś PýHu/š>vřk¨ qĘÇ靻ćŃéËxĚGm Ą)Tdg9ônc¨K™ä=!l Tđ…ĄLAXD›<źö w\ŰÝŐÇád>Ew•ƒUĄ`žmŢ8 Á4Ĺi醿𰇌›´¸Ÿhˇ|3V¸tú. Ďť•­ÁډüŞ|ŒcœĄś‰d­Ť U.Uˇlšś0IXv$gŽJ2ř‰9UĎű8éY€ćg0řśN ŔŔ1ĚqČ[Y5'Žă8kQoœÇý0Ć(ČB!öeB˝ŕ¸HB¨“ŢŤŹşĂ¤É;žň;†îÂu(§:t5Dˆ:›t>DYÎHĆŠ|týý`8}\˜[ ‘9łśK㍟>}Ú|Θ12DŻźňęĎo¸ýFkŹmöšógŠP”˘gϝĄ‰uăôÔSOđľ/źđ— óĆ÷ÄÄ>|˜śoßĆ+”ç[ßú ú­ßú-^7ĄŒ{öěŚ'Ÿ|Šţŕţ€Ă‚ đ…݉ů—I˝˝7 łvďŢŐśŹČóŃGĽŸ˙üç´˙>žˇ^{í5Ÿ›7ob§Ú  ” $ŒŇ믿ÎsŔZ†' A㥗^2Ćţ |?ę‹ç‘Ęý-^›żđ˙Ţr††ťł4˝TŁťg'§¨4˝Đ 3חi´§r÷Śvs㍧ŘYÁ†ÁÂ]rlŹM0řZŤSľV‹ 愼ŔNúz#r˘1” |^S@)0(ńٕ‡+/UË>‘áĐźĄ;퍎UG¸• }|Čdm`đíŽ_b€khŚËˇťp9 Ÿ1ÎNvžd¨ °B`Š”×Ęß%ť×MúŘUL!ßτ˛ër¸GŔQ*VŒC9OľĺĘĚ`}VډŹq|eC*UçŠŘX˘‘ć•ƒeZ2Žú[…njšuÉÜÍ9:Ÿ+QŁĐEgÁT„`ó@žŘߨQ;f˝źĽű6 lrX Ow[Ŕœ@R@`ÎĘŘ0,ä8đpÜg—´5$ Ô eĂS˙"ň -€Ăłŕmqže™­ë!źCj5hăőc&“oq8ŠĂ-žżŐŮç,Č2SšĚëÜZŇP@°Îő' ę`çÇÍFäŒĎç.t[ʘż3™LéĆaśĆuň…Ž^ĹţĚؒĽžî>j”ëĚěF Ź˝+ŮĽÎĎĂaęH: ŐŠuUCl҆‘źFďu˙ÖóęVÝu ëő¸FÄŽÎŠŽQmSiCżÜ†ŹCHů$ŒYp‹Çí öŠRŠ‹nŢşBˇŚŽqä˛EncŒÍŚ ¤Ŕ |pŸ˛SÄ@5°˝% ýÖíKîóLîŘ-Ë÷§Đk )+ašÔP\&÷ßö/.4Ř$){–ş+yęí)ŇČ@ uÓP_‰F†şh|ŹzşJ”U€ľyĹă5xÜzś=:‰:–š˜[ţň/żoÖ+´s×Vł1I欎RšR4kĽ‡éřńSôܳϛgpÓŹëŽĐC=@Ý]eî˙ Žżvő’Y‹maŔ˝ÚÁ\IÚ9\űQHÚ§eźHC‚>˙ěł/ŃťÇNĐö­hŠÚ -›×›k|fű(r´uëf3— ĐóĎżÄ!âžú_…ÔŐ3hĆÎŁ_N›5d…Aš ‹g~üř síkôŁNŃĆMëxÍ8ąnŒuäBĄ‡Ë77?ËíU0ëÂl&×ÂJQ,d遽FÝE,[xÇşď eĂÔąQ1ďźBž¸"Tš>ëd;şí.cŸRI…(ÝžJ*;ů¨Žů0$g]žÎ]Š|´ĺžXŹćMŠŤŹ´̝ţnQüđCôŔýěČ J>Œ_ř@4źĆ*Ŕ j°PŞLe­€R!p^ăŔ)E' =ÚˇžHď§čú ”çpÎ)sŒ2 JO:ď€ źÓ›'BâX pBąď>tÚB|ρőgÖ2š !*œž ŚŔŢq8yźŚeœ°Îp„Ąş„(3ŽppYXö4UČÎTqyĚÁŽĽ°Á,pl`­đāĚ`ůĐgŽ hB€@¸ăDôŚŻQĽAżJ=Áő.ĎP¸Ј/@łYłŚÉč|yf)O7(Ç ˜ĺ]Ö˛˝ÉťÍeg5œĘ-“ÇMä5 qąůdrvfÂ94›QHČ0€ƒ[HŔ֞9 sVSâH˛# ŒdŮ'ŕC]ëSäH—eqé*:‡‹ÓťUßP‡‘Ćüm4 f>^Š€°ĹbČÇUVĐ$ă„űŒuAş6wC‹´ujގӴ Eëő’.ĎÎ:aŕČĺ˛3GČíÁÎ5 `ˆ6_„d Ubˆ¤ş;BQŁRîaçáźqđÎÍͲó|”™}VŇŰF2ü€ű;n?oEů\ťƒţFZ1?XáôÓ:hśę¨žsź'ĹţĄů5[6źD` _Ă#(FęŞíC5ťF 2œ“ĽR‚CŮîTĎdZC§&Ů7<}Ĺn–aEŹC'ëę:ÉUZ.2փŚ0îđŽw_6ĘXěWbą ž€Ăŕś­”ó4ŘWfĹ@_Ĺ|JÔ×S˘áŠŃ9ş¨ťR ݜă€ě4´'—›„Ő‡ç[ÎĹĽ*MO͚5IŁ„]+Ëă™ËbŽ;y⌄Ř8u†zh/Mޟŕ5˜oűëüü˘9ţ =˙ó—éÚő›ÔŐÝkÖg²‚:ę8éé*Dú\;qí0É>W­…tęô)Ł3őŇšĺ-(ŠC6yt`˙^Ón zńĺ×čԙ‹ôЃ{ĚZmŤiŸ1ňL›Ýź5GˇŚćirÝzł~•’gÎ]6ĺşŔzŢČČ =ţřƒ\?ä‡q\Št3kĹŘذYťڟýě%ł>GO<ń(mßžÝ8Ë,*WŻ]Ľz­ÁaQ&×MĐčŘ p,śŻTĘzôĄÍ´kǝ8}Ţ6oÜ$*ŇnQŢÉŽ"Ç-EaŘşk&yŸë̆¨2ŕ.€›í-ąAvGÉBZűî˘]I핉d}ÝďJ:9žqŒQó@ÔÇ%>¨ ŒDz˝îOTVÜŠBąšsźÓőkšŚ]šĘ˝–:¸`d>I°„Ű㏿âz=~ťr'C‚ÄĆ.jŮÉăRÉęď¸.í@I<¤dՓ!GôűvĎť]ků;yn-ý)™×GaQ€˛ö÷÷Ń'?ń4Ýźy“žk065œ‘Pü1Nń Žén Ô(ŽăçąťC\Łť—ŔĄ4ý伏ř(¨eCęŹDŘ]Żsv)sĹÓO?M›6mâţƒŇG>—/_ŽŒČlpjb'<@ ş{e(Bë{eş1ěŕĘʀĄF݃|Q.Ô×+0őÁyežĐö„SÇ4ˆ2Xข[О8ŚmŠr%ÇO*ŠÜlܸ‘žńoDl)x ż‚Iaűö<݃ľáżůoţĄ56féŔýl€=wî<Č÷îÝkĆ҈{͸¨00óÉjň_˙×—ç ÉSâʏŽŽ1CMĽRŚÇ{ŒËqéŇEŢa ŕĆčđđßłoß^3vťyücL`LîŮł—ă őŇ/˙ň×耴ąËđüƒßä:b>ţ¸¤yFYĄ ŽM_ţň—$Žą „1 ֋ôţ!ÚO#!4A‹ĂĚ]([â…l™űf6ťÄÎS´…~K‘łACaR'‹Ç›Ë,‚!tŹöœŰ/âô\´ŮĆě:ţÔŠëýňĚ؏Ž =ŠFפëƙ]ĺ6ĄÜÇXčáq‰ópžĄ¤‰@ÂŞB °hl8şdŇŃí‚A v‡ŢĘÝún}Ýv֐Ü˙^đ1çj:⑆gĎIsf>ĺsęŚÍ“}48ÜCĂýeęď1Ÿţ ővÁ œăqÁ€ߎ-OgcŐ˙CÎKŰSB yâźĎFąÓ§Ďқ‡OĐž˝[iÓĆ Cć$ Č+ĂŻţŻ1xâĐ+ŻÓők7čŔťi˜ˇ2ÂjÓ@(3Ď>ńÄtkú—bvć3ˆőu÷rXӍ˛;b5LJRÇÇł…SăçĚŮëôíżú>Ż;wíÚA7­7eÍS.ŸĄœ™g÷íÝÁ †ůĹýä'?Ą3fNhţš„€4×NŽĽż÷w˙łż  ݚ5é™3g8<&úÍöí[LCźvÓCĽŤL›ˇlä~5;łH‡żĹsa˝PŠÜmž—ŠŻż›×r˜Ńż\`mŇÖÓ])Ѓ{'iËĆ!zhßz:|ô"ză]ž6ő÷zSŘŚ’čŤ.řIű ęŚŹŠ_Çvy˜;eLIHŠZě3 ŠÓ I˝;˙Ź´wř- Ťd’€÷YˇŒźl›e,Ł” 2 ýÖđˇl<. Š ŠŇšGěE~σú÷œé3KËK5€At—|RoçČn—çZËÚN:Ľľ–|’i&ű[ňx”“<Ń'včŸî=ŽrŮŞhš  rŽŠĄoe\ĺ7Y.ý[i9Neؙ™"ůi9oi>“Ęw˛<ÉrÝîşśçĺ ľ“Ni%ľ<Ď0\A´ÚŽ~ؤĎŃĆé$úv Œ 8gĄ[q M'0^•˛@°9(Ȃăj` ŘąqŠť›!˜Aóá]JƁß(ňƒ`ą v=ű쳜'@ʒ˛Ąě¸GA0*c§= ˆpꢌ]źýöŰ|ŽÇ\g(îSęi5NĄL(eEŢŞœ˘>¸ů˘mš@š¨ŽÁqm7¤‡ö@H|”ĺCÁ ĐP eđp ]¨Žă<ňJ%•÷"đ|öłŸ]őšîî.úô§?Ýr   |T~闾ý>xđaş<őԓŤž‡ó  |Ú ú?Ć=>IÁx Š…@0-}ë[ßâP_űÚ/ńî°^xžAd““ŸâkôZW0†:Á§ ‡~Ř|ڞn)Ęמöľč7ć đGeóć͔Ę}.ցýś’ĎyôІm?žĄWĎ5č= űwdˇ7Ŕůň-ŠdiŹ?GÉźuvţăsרfÖyăCůęƒĆAVňí*t2ť÷âîT•]y~żÂ1ś°Đ bŠB*đyň^ËbwxĆ8fr™x „=˘Y'/¨Y–Š€‹ŽĽ™§Ł„ÍšúGĐh0"°z`îž';eLds@Ž;¤šĄÄ‡2ćgóŇě`˛ç…š‡ŠÚč@gÔřÂz qž”ęs´yi–złU^Z6“JşMy—ź,ݢ])öŃRś@5S¸š_ 9Ď|gK ¤¨ĺ—iyižhqž ŚŒĹ˛€a9< 3 ŇWĘu/ŕP$8Ţ Ěú#ŹKŘfC]ňŞ{6Cć0—p YŻ…™×4qyNŇžĐe0#§%ąWřšř̸ LŇw¸Xž<7Őý4qđŰŢ9ÚGĎ!žÇŕPçČĘr˘L@Ž×‚k’ś p—ÝS✯I Őq–`žîžçcŮ@AŹKI›‰nŽÎöX֏ęîⴏŰWţŽËčáGH¤SŤŐš|„€ÝC-şşşW#ˆ’ťÝcđ…‚œl‘Ôëô^}Nú|ԏתţŁýEÓÓçĄăۓ­ŕöůâg ´a Ş tѲ ßp¨<čýKÜ÷ °ÎŢŹč'ć9Âąšźź@Ó37ÍüZ4ďÜ.vŞşúľťű?éHnuÖÚ~¨”ZŮ=\gŤęĺÚ%d És•¨8<Ç{€+yę/ӆń>Ú¸ŽF+Ôß[ŚŢ˘׌ŽůŹÔ× -…”ˆżŽÖăŮąâŮ÷‹g˙ŮFľö˜gÉU:ţýĹ_|Ÿfç9äŢ=[hËćIÖ˝Tż‡nßŰWĄ]ťˇrh¸łg/R_ďÓęââ2™b)K_űė„ĹĽ†ăÄ6ëq ç̡†?iŻťÇĚ.!jô7ß˙?w™nŢ˜ŚŤWoĐäÉqÚşu“ŃáFŠ`„nÝźĹý!BNžœ¤Z˝A§N§›7gX'`âńG áĄţhě@ŸCˆ¤öŃĽKWč7ŽĐ~đ,íßż“ÓHnqÁ§K/łŢš~Ă:ŁO^Łx€rfţyăőĂfy“śďŘLŸřÄă44<ŔánŃď˛ePŽł)…_UvłKow‰C‡lŢ0H훤WŸŁŚéššÓĎ˝–íSîŚŐYŃF.0 `8Ź1•1ěI!šěÍhĚ`ú1Ĺ̟ʢ¨ăŔľű¸}Ţ-‡çľnô‰aZŸsŤĘB×rű4ƒśs–CíašN˛Ďč<éŽE÷Eä%Ćš„lޘysÉruɆ:]`–e̒0–š) [Ţ%Q{°Vě"ř(ŰĽ–éçsʕłÂ°çŮy@ęä'Ŕ#I°HŇć˛ŇęńćŠöŚŽT>ₛ đ1`Œcl§ÎËTRIĺĂ(˘UŰúťRIĺŁ(÷5Ŕ˘ŐˆŇޙœ\Äş‹ÜNišŤ˛×E~¸Ňi„ív¤´"źŐ°)ž$„nŽ"'.°ő<î…RĽ­“–WÓ9ú ÎDĽGYĄČŨąaJ“ú;ŮŢ*Ég†wŁMxÔnďôě;K^Ó.­vŔ =ývÎľCâëšNŕWV‘6śqŁ3XƒüÖźĂÎ`×اĎ&6ZĐB|Čj@‹–z…íŰk5i׌kůÝ.;ÉŻSŢíďƒëÝőË÷Wžzú)ޑ … @ü֝˘x†8ŽŐ¨ňĂv€cÜPŕ‚đˇ”Ů 815MôK€ `čbŁŁĽĘÄ50îš;LŔŘc DeŕřË/żĚŔ‡/~ń‹\f\‡kp ,Ú˙đA}*‚áâ˜YŕňăĐć"üF™`PÄőČKC˜Ŕř†ă˜G†4Ô¸­ď ”Ě8Ś€ ” Ź:Оh+´Ć WĂŇłęŠűp-@nz¸÷ĽĘq*ŠŹ]BëLÝťw:ô*ý˙Ă˙‡ÇöŔ@?}úӟĄG9HФň /TOmńé ťrta* ks˝ɰÓͧec°řë׌¨bÂß˙Ě ÷ŽmípĹżúŤKtâÚĆđôŽ>zfWĹFÜx×4­ţXďfů]Č CŞGČ<ď6-óNí˘Œ—60u3Űv™ÇîeG,v† ăpy9Şę€0wĘ0єç3ÎÎ,v”#˝Đ†rŕőmAŹ—řĚíĎLę$€‡IŽ+řŒŤ`ÎŔNđ’ř@ĂoxémlÎŃDs™rÍe5ę2Ů^/Uč’ßE' =ä Ô4Ηĺ0CŐŔ”™×ŽŕB&OŠTÁ8-=ăŕŹgĐ2ď@Žgły>Ćńć Ď7őGčS˜,ęč›rĄ|<'*EŔ×#tv7x-ßF‡fÓyžGuކhçtČýAu0 ˆžáYŸr`A˛›u_œK˘;(­z†őƒ‹>ŕ…Ľ`§Œöh’†ˆ@zęHTp0ň+’ęšîÜĽ°‡#T`ÉŰěÎĺIœr˘ŸŠîEöšV‡ž~\Éu’*AĂź)p‚Ëg7t Œrp(´ţqZx~ÜŽŚŸ0€cXW˘ƒPěšÖç9Ž—°Y,y•K˝+ŽóV °pĎişNÔ,ш@Ăz_lŃŕ邡Ř4Ä4y7š‚e\0€Ý :Ś(œˆoűr( "R§¤oŁeŞ”şŠQîĄĹĽyv"×f ˆYíŞ7¸N]ˇĎ¸veŃKÖGëŹzűleŁMěđ”č wŃću˝´u㍮ rčîrŢ<§ó žńHPĘL!NiYd„Çô­Y'É2hŠ~Ţ ‡Ž¸{™žóݟŇožÍşŽŢoŢźAŰśn6mł!KˆC_  ;vlŁłgĎZŰOŒ1`lŹČ,pꏎ ńn|ąi qđKÜ&)+ž1ô6čjj&i‹ żŒŃ˗ŽÓÜě˘é!łe,/Ő8íjľA.\§ĽeŁ_™gşiă$ýö?űď¨nSÓłtôŘIf"ťrĺ3ŚíŘśÁ´łmF'dӞ̩SEúŮώńsöýÝźąŔŔž˘švdd”°O>ů¨ŃaüpÇ /źLGß9FSˇćŒŽ9A?˛Jel((ŇB5 é›—¸/Ł™•1Ó’¨ŤR =;&hăä=öŕfzţľóôÂĄłŹkżsm)ʉšNj÷AżÖ0DqÖ1#˙äÝ&sWÖ<Ť;ţŤĺĹhóô\ ‘R‰6#¸ý> jp¤KçK˝Δh,Y 7=7}'ulé;ó¤^ŻsŻŽkłÔ!É´ÚΘÁĘśsšdćŒr…YSNă0Ćsłfî˜çv(Wş˜Šů+xƒuyóLęľjK($< |đaV§LÂTAqXŸ„ÝšÓˇ_ÜšŚcˆ2礒ŠŒLdƒwYˇRI%•T> 0›T­eŽşöîŐüyď罊¤š/î"X%ůť“Łş“S4 [î>É´Đ΁qAÉ´ôzw׊›†‹ŢöHCDü ătĚ0sÁ’1ü˙éĄ)ş8ۤü…1ő‘ÔaPY4yţří)ú?šF'Ż-Ó˛"ű×é_|e”zň6„n™~ŸÄ]_ЃFu,č&ĹB-.ܢĽ…YŽ{^2ŽÄ†Ud'M<7ă`?ĎĄySć:S;ç›°‚Q}˝&Ěf~0˝ĐSp<˘sxLĂ_ëěԆăÍ7ŽĄŚůh›óo„Ń€Ţdœ)AĂ8{ęł´oá*mÍ,Óčň ŐMţ98ó%ş˜é˘wŠC4“ë˘œY3ÔL™kĆiŘđŒc2PŘ ÍşŽ>8ŤIždpV)d–‰€ó˔łŻ:Ď;ő——#ŻŇOŮRƒC.dd „eąB˛–iZ@%ĚÂÁkwŁóQžÂŒe–ptŐ÷T—c‡_(ĄNá0)žĚŁĚÚƐf@Bęďüm ó€o>ş˘]ťŚgp&ë˝nœzߨ}'Ÿ+›{ęœ6œv؁<==eŽÂ8Śú(v&×M; €čźşöU˝ˇŐÉ;cŘoq°Š¨3TűŞ:]šM[ű8Œ\‡“‚–†Ĺ@ ÷0¨l(#ŕů™ö'ś€ToÎf‹Ţ Tޘ5ë-šžš7ăeÁ´Gi2?ßČ  „F6Đh=´ý]fL|t‡vŹ{JČÝY/ú *?á `…겎óóPۀę‘ÂXSŒÖůŔ3UŇa‹ë5ŒŞę˝h é_ŇGŘ9j>pÖOOÝ [7ůywwőĘFŒŽÚŃ–LĄyj˙Öcăőa(ڇœqö6lßcn+ä3ÔەĄÉą^Ú˛q˜&Fťhý䨊Ÿg>*#|;ôă:š˙|qH¸<€ŕ13Đ—čŮç^Ąý{ˇÓř¸Ńń¨JľeěĘǜ˜2ç)_ČS­Úŕ°JŸţäĂÔSÉŇK/żM3FˇiÖęt˝ť`ĘŰCĹRR ÷O] ĚO?ýë41>Ä:QÁ¤UPłĚřYĺ,C…u áF†Ë–ĺ~˛]â~˙š;woڇŢOCCýňŎGÔ0cćŞzs‘áe÷ď~‰Ţ>r‚^|ń°)Ë<ĎŃWŻÝ¤EÓfgŚ^¸‰}üčc ‡iÓžYÚâOĐŢŰč䉳ô_ţä/čgĎ=OW.]ĽG{˜ş{ia~™Ž?etŢyóČÓÄŘ8ÍÍĚŃé“g¸_Ϙ´ÁPą Œr‰–—`;€.vîÜD6ŽŁŁGŽŃýџštŢeVO|âi^b6‹ŠičŇ5np{U*Ý$ŞĚüŹĎ@‹RžvnĽëF蓏m§>÷˝řÚi“F- Š‹ç€q ăş-úľnJŇą+cÁlsʤ#s‰OĘĂsbSĆrÉĚ eóÁ=“Ŕěô,ÍĎĚó‚’Š{& odç;ksôř=cçĘfYŒŘw† ˜%(ŒlNşH‰"ÚeÁˆĆťßşyH™’áh]p†ś‡~t=áÚSłžßb+ćů$+× %žćœ1mqëÖŠĐĘě)ÔGć!ŢhR,sľ0čľĚW*’—0 čťÂĽF×ű\FŽVŕľŘ˜ZŔvŽ˝+“h*÷…¸ë }§2ŕljĆŘś†Óž‘J*Š|¨l|ů*ĄnžVę^ȝř Q੻ńm}@n˝>N •ű`‘ě¤wâ”íä8mçÖEpҁě.Ž]„qŇąŽß.R˝“ÓveůZ•îX_ëź3_• ˇ<îŚč1Ef+Cw¸$Š4Ű!ÚqF,č\ŞAeՀ!KË ÷ťíçs‘؝0wëpďzŕsmŽí”G§rľK{ľƒÚM\>ăŔ2Š&łĽ!iő;Š<0K€ĹÂ8İ[ţŘBÎ8As`-0uŻeÍZb–gݘőyŻ„O0ĺ˅`â0kşş Ó.q8(ÁŕqˆÓdAw3ŁęÍ:ƒ/؁ÔÇxĆę‰Y^‹@רóu.#†ÂČIÍôĘqÔ’eDzŐ;ŤKŃŚ×C\ýŇ 3ŞÖ–ĹÁË€Ŕ´×ĚlfçŚ)œŐűcçX ůďđWýT[1S¤ßfDÁ =śčbîĆMĎĽëœ×Ę Ç8ÍĆEůDvƒ0ŒB hß×|T—I†BQ ‚Ś…Ýö8633eÖĘÓŚ}Ěł—Ű@ t@yŇďăÇy6ľ(˝öznČý" …UÄşJY…h;â8+ąŽ…m ^ŻFuU† Ý}/ ‘|ÄđŚÂĎ –™Dę-úi;ýZA*dFäŕŕ0§‹58׼R™z{ú8oĚ űÜŔCΜäY݌Ňb÷Ś_ŹĐÄŘP7íŢ6D{ˇÓĸY×WŠ”É  ÷‘ŒÖ‹áĽÎОŁ>=}=b€–šĽúßü˝ńĆazńĽWč‰G÷ŃřÄ(ëDʰ7;ˇ@ŐS\˙ţžnš\7ACƒôđCűčő7ŽŇŮs×L?ŹČu^ŚÂŒxţĺr…˙.Š"ӆžŮ œçä1ŕ™ŢŢnĘ|ęíë⺣ś°°Hďźó.>sĘčZďЧ>őIZ79nô¤>sŽ1âš ü#ăÔgĘzŕÁ]ôҋoĐĄCoӍëˇLŸö¸=Ž^›˘ŤWnĐĂ÷ŃÎ][¨T)Ѳyłé{Ś_–K˘ƒ>u–uJ´ @zŔacúúťčóŸ˙ýúŻ˙JÄqíÚ-úɏŸ5ů˝JŻżv˜>÷ůOÓđ6ĚÓŘŘůć]-kžk˙@/˝ůć›ćˇÇúĆWĆ´ÓŁ`™ŽîaĽ!ač$h €Rú–HŠŕŃö }´é˙đ úҧ÷ĐţésôÝ2ó@–˝˝ý+úš;>Ýq sűţT•çÁ|Žű4ßĆá/ÎehpˆÇ•°š\§Ět†×ĐĐOŐYŤa|řĆółÎm !”dň,:€Á[–BŢĹÍhNÔ5€°O8‚pĽ5N׏Ŕ Qza+ی ÓcfŁ˝mÎ;ô?Ü3—™c°ęćşY }í’Íhč{Ż}7šďÍCa:W'Ă2É ZŢ!nůÜçěnîӺꌨlnľ™%•‹¸ď@ľő˜ů?•TRIĺĂ ţšÝÜŃĺný5ż(?Ďý>hˇ~ŃăÉc÷ŤŹľ†ŢĎykřö:ü­ßů֏ƒČ$>8ëš˙˙řţżŽŚ;9ń6ävż!íţît]Œ¤ŽşnÉc=—ĽčˇĆetŻŃöuŰL?zNcťô­íÚŰEÄkůäZAÄť†ÍȨ­F$‡ŠB”šXÉv7I`…ćÓŠ_&ß8ŃŠoŻ–ĆjׯĺÚN÷ˇ›;î4˝â%#Ŕƒ ‰‰q4(ť‚–ŕegĐ\ńޏlÄ.ś CX e­Đ0ŠaîU5ÎMLLDFäĂ BÇt'9Ňx†!0J?~œA!>ú(珚Ę!ňA:ÚaĐŐŹREkG>`˜ŔÂMş›QĂn \(‹ ô€MÉ8˘€܃P"ۡogĂĽRPkšNČGÁ ¸éŕƒs¸ů •ó<ˇ›Ć†ŕ>Ô ővwžüÜ_RĽT`Ł ŒSyŚ“–]•â@đ"Łź;֓;ä> ›JÚÍOzȝ ›-0ůýrŁ.`ĆéŮÚžďSçH×)ƒńśsçvJ%•Tî#aă<ţĐż~‘ţӋË4_mňÜŢ%{QŘŹçŲD# dˇľ€dÍ{:v:vőŕ&v›÷É'÷ôÓ?ýŇ0 w;üťxmŔą‹ÝŸŽľÝűďŃ?ýöłôűôƒşť~Íúˆ‡.—ĹĹyŞÎ/ ŕ bޕa*šÍdgyłĘÎf˛0ƒ˘AOhëÁ3ÎŤ&täaćÖZ¸Ě ť€áÃ_ĂźÚĚ;{¸:O[› 4.ˇmÍ\ăÓLŚHç˝n:\ę§éŽAăˆÍ[EƒęV‚@ö÷Œ“őFçyß8]ŘÁ‹q¸c<‰“%ő=*ŔNůeŽgˆoꍐ&‹ó3T]Z&řĽĘ}˝T ‹ :kÇ ~ čeíb’žÖ¨ÂCŘžç1ëďÄ„9EŰ>Š› †G˜ó8 € íÝčXsÄ î ď,W§¸ę“˘k3ŞHÚA‹ÎQ]ĂÝŒüݐ >0Sbm™×Ta؈ʊý§żoŘŹť­ţÚ´;ćÝĚ٘%ÁĽßWIn&@V]XßÍŃ0ńbŚ—Őą](Žöŕ…ŃŘP˝‹ufŠŮđrůl‹ÎînŒpLj>#×a‡óóółÚe¸¤ˇˇ5RţŸ°AP&Ěđ8ŠŘ'„Đ$ÝÜĄ —:–AłÖĄŽ_™ röƒ\\ЅV\ŕ‹ŰnÚôZýí>ǤŽ–ËĆI°î@ýkôrš‹ŮU4żýĎA7{„2Œ1Ž …‡ôčî+Ń΍ôkŰm^×G˝Ý"ˆy   Ď2<„^’é4ä  ŕ ä=ćÝwŃ–-›ĂžOÖý…L4&0Ÿ\¸p‘ţ_˙ň˙Ë;‡‡úhĎŽÍ €ţ%Ź/âĚEťŒöp Ľ˙h?hpżĘpxF3ÓóŚL]ôÉgž¤ývrˆ ?bçÉDćN°‡ÖíxóIĂNá]ef :vň<ýé_˝Bg/ KŃrľś˘Ÿđ8‰ÚXúwťP:f’vŠ ľ2ţşŹUÓޡŚnńźŠśÁóĐ͘ύ žˆX$&qŇÓüyN ZŁĚ/™Ě Pîl­vQ\ sŚJ˛íXůźŁ§é;…çrŽó‡a˛çPo¤=çŔžŐ‹÷lĄHD+Ů*Ć;A |pŻŃůŇÝЏýćŠw…ŽCwĚjŮľ}u>ËĘ˙ń+›hxДŻT`@>˛C8Ób/ˆíˆúÚ Ţ/ů ěIť-ž1†ń쇆ӐłŠ¤’Ę/\0Ça5;;ĎkMč$I°ƒÖ8˜Ë†‡‡čŁ*íćîۜœôKߍônç'3듧HLSłöť™ř„ö;p>ĄóüP‡żWűNţ^QşÜW I廓ÓŐ˝.i8YË=îo•vNőä‚>ŠŘ¸ŇnqÓ^íŢ;]Œkű¸ńCëu‰uŹĆuFśkWw§‘Śë~Cp/vnšÉëÔ¨„´]# çE…Žh h˙Ü:I§öëtď cX›óÉsÉcÉçć*Dîy^\ˇ)WŰź-""ŮŽ˘ŮŽ Ă-Ł{Oňąˆđ΁řyšĘŻěZ ÚŢď~’őh§`¸Ç;) Ťý}§×šŇîvJű^ŽĂJŔܰ{×NÚż;îNKƒŽKœÇżáÔÇŽ üÖgFĂđh?ÓŘŻ0>`ě(€ôŔňĐv!!mTqçaœ@:ëÖ­cCҀa Ŕ äF°\ěۡ7ŇÖ°ř˜÷hY`€D^ř[iSń7JOÁ(ănCóŇţ‡ÝMj\Á÷–-[hÓŚMœ€k -äűÜsĎqťÂp‰t5ţˇ2v<ţĄŔ Ô÷*˜í Î< #˘uĐą‰vB9ŐŁ TRI%•TîCa {č˜6źŹŐóÔą/L*ŘÍí:˜DďůĂ`^ "p˝!@aĹ@ÁTđsňZwpëx×ÝÝş^Öţ‚k“öWqCYşŕ˜d˘œěÔ4ÝŞŤŤ; ‰8gŒť÷‡8B9ˆÍCv¤óˇŠ úSÁ|ş*Fg*ćib´›öMú¨ťˇ‹Á*Ă:)-ăE¨LBÜďCÇŽ]y$Źú9ól/\źLöçß§ţnzâń‡iýúIęé3Žîފ}žŕÉÇ÷Óţăo›ůb™Ŕü0 f˜Ŕ k#ĎňÚŐ[ôšĎ (}…DemcűápŻs˘Ďä&QŁ™Ů֗~›NŸ>KOâqšœ§Žî•K˝najúˇöOĺޟž]ŚM'iďŢ­ćž ÓÖfžH 5ĺr/•j%zâ‰Giűś-ôÜłŻĐĄC‡tbn¤‚Iç*Ž^dđž7Œđ{ŕó¸iťźyg̚2^ż~ƒ~ňăŸÓťÇŽŇÉSÇiǎm´yË&Ł öpý††FÍusÜfŸüäÓôçţ—4;gĘyţ {÷”Ń˙şhý†u z)•>*dŚ„ ůĘWżBŻzƒ^zé5úឣˇŢ|—>şśl[ožúJžß_˜ű*C… 6#ý­!€8„:Ůłmíř­ tâÔúŇŃWiŠÚ`đćßfŁšÂnć>ˇ¤Č,Et.ƒtKw>„ ßcóƤËŘ(`‹n×b ¸L˘ŻJşďî¸lľzd‘„ȇľH+H ëżĹfénŇ>ëE]´PâśAŇÖkďŕăËŐ%Ó/—ăr",‰/ĚĺRŮ_dî# t{čýSˇŚMţMÖëťŔ¤•C˜şŒBŽÍ-śˇÖŁš;i{“y]@‹ZWmGwc_Ҏ§ö‚‰*•{,nŸpÇ?úúgX{U*ĺä“J*ФňA‰žËnŢźĹěPš\!bĐkˇ ű~”÷ťnkńk­ĺşľúے˘ë ýíޡڽ÷Ó3˙X„YM\TôíŽ NíNNaw!Ż‹Ţv&™V|˙EţŃoş}VˇLî˘^weÇ ülÇŘą•ŽĆ‘d>j8SCˆť#ť]jʬᦕŹ[;pĂíęÝIîŐ NôXťśIžwżÝߚV”v`㯆ŽńÓQN‰ ŸA‹NĹeÄX‘ŽS–h‡”cźŇó1Т3SEň“l÷úäšvĎén^k×z]2­ŐúŮjőů0ˆ*V0~ěŘąƒ|đ4([Œ `gx@÷jx‘€a›;V`LŔ7Jó C úîhC™ƒĆĆĆdЇľ¸u‹AřĆĄ ”ĺĐü‘'€1<ńÄ´aÆÔŕň‚ATœ@ Ç8ăňp‚ź@Á='‚ë]ŔŇE9•IíC!ţF܁|ʉ|Ž;Íi¨łÎ—ČSŰ×ič%ä:tĄ`\ƒ˛PĐŇŃ:Ą]qĺXk_N%•TRIĺŁ(Ą]ÜËîÖ& t`]žŽ_kĐkç–éäuă›3ÎÝĆZŢv}gĄýG Źh Đ?cö}Ľ,Mäi߆í›,óßěCoIéƒ׉‚ârYÔqB9—á#dX8.¨5֛1kc¨i.K¸‹Źq˛[0˜!<€ŒQš 0KŒcĐ8Œ‹ľ*•Mş=ƑFÁ2ő-ÍŇpŁJ}ć7ÚkÉËó.ôéB…ŢĘ Đ•\7Íbç?ťP}Ä laUvŤÇLƒË9v’yž´€° { ̇qœáZŔs T „l0×ÔM2x6Ąô°m | Üi//mJţz†Łš€ż^ Lžw¨–LŰäin~†k ´<3OĽB7r%v´#_)ŻÉ 8Ö&}2ân6Ä)”łť\ářcÇNSvV˘?dŹŁ<ë‹ÎŘ „CSˆĘň˝`ipş l€Čóľ”đÜ'ë+œâęä挺ăH”4°Ţƒ2—é=p†™,ínÝ.!Y䍬ŤŇcC[Äúę8ű—ąJ%ď80ő[óÓ5¤ŽĎ\`DĎëąN7’ín˝Áâů­ÎBՕ4-7=ŹŁ“]‹j[Ë&b°C>Ÿ5m1GˇŚnŘöčŚb!Çŕ™x×l˝­@ˁkfg—#Ć/bNó˜ şňÔ ŢEDáC´ţ:ŢĽœ!;Óýƒ‰śaÜobF/ ‘ÜąŽikťë$a4łŇOŃűň<_,,-p{L™ťĚ:|°ˇĚNôJ9ÇuîĽ c˝´q˛†ĘĚ^Ái ßqh†6\ŤggqŻ•)€7]yńÎĺšŮ:wţ"ĆÇFmŸ.Ę34ÎmĚ}ýF˙č§ŁGŃôĚíÝťƒvďŮJ˝F—ÁXŔÎćZľĆ^„˝ČřYÖÇŔÔtSž Ě `…Ą‘Ąž\‘´M…Zp˘h|ăK@ ó‹tř#ě`ßłw7­›—Đ M’ ˙ěÜšĂÔi‘ţđ›˙…~—Ž\šNűěŚőëÇM?ëłý´i꘣ßř_Ľ'ž|Ňč”sôÖŰGéÂĽëôĂ?KWŽ^ ]ťśÓž˝ť˜Îžoń¤o€Ą}ł§ˇ›žňŐĎĐŁ —_yÝ´Í MPÄyӞjŸ1:âŘŘ0łÍÍĎ2(¤ŤŰźăúˇĐŚÍčĹ_ĄżřóďŇó??D׎NӁ{đ0?Wçôć];9šŽžň•ĎKY—éÍ7ÓŃwšçv–öěŮIĂ#CĚЃţ20ĐÇý~߁=Ś­Çé;ßů>ýěšçY×Ţśc3x`­›Ľ!ó<Á´Düž x^F{#lÚď(ĚKůdnk8ăp% mňÝ ec[Gţž4í§˛FigßŐuúüŐŤ×yžÂGír™Ě¨N%•T>˘k_ąśRÖg°…)ƒŸŤŰÜ+ŸÜ–ńýÎűněřďĹö;€ÄZęz;˙Üj÷¸ë“;šď~ő*Ź“Łtľk!I`@ťކ¤ĄSÚIĽfľ{Vw21¸Ćwąîćí‚(TZşp…răţvĎg2ţŠ6I:˛Ý…ĄľŹś”9ů:[KÝo—îű5ГíŮÎyÚ |ĄÇ §ˇŐĺśżçéNł•@"}6*ÉăŽ2™<ƒ+ZÓp pÉtۍľNăŻ]űß­ƒůnže§1´Ú‹ęąč$( §  Öó˘NzB dÁqŻFY!TP:L,z`4Ŕb×áÁ.€p˝2A Ź@ 0Ž mÜŕňW@ŒrihşĘ${đűäɓœ7‚ěÚľ‹j,€AďěŮłœ6ňŃš `7äŇĹľ¸aLÁýn”1ƒqőÁâNË0ÚJœb$–ŘǨŽGúB(đAŮ;Đ`ŕŔ1m+¤‰o€S Ŕ9Ţůbʄú°ŃyQw="/eÝ@ílФ’J*ŠÜڏőÎŮĽ ü;Fňćs‡ŞZčĹ_ž„ŕpě3ď՚ěloÚ<á|ÄÎSĽ‡–ź?xi§Dş ‰04śšu>0Á8îť+˝´čÍSľžLUó./—°.óyŚţof(TŠĎ8UĘƙ_2Ž›žĺ9ó÷<ő†U*ԛt3_`gé˛1řÎŇEŻB š"ŐĚąź_ †gÖ ĺ‹Dh#YzęI5éÁlvűuvć˘ýá(ƒÓ—5ŕ@Lđ9Ô ß€÷=ƒAHżžDźˇĄ8mÍu5“&… odüÓř˝vĹy KÄ`”ƒěş”ţM#𸠹 ĺk’uţŔ95ł1€Yű;Žp~) 'dg qş8çYż—Џ S„„ši˛ĂŒěî~ß0(ÚQMĘŔMŻ}ç …˘M¸c!vţ đ"Ă˝DH`ŠžŢAłîšçś˜žšIĹB™éhtŹ ˇşO$ő(HLOłS¸şŚí†íP])“`jQ#$P­ ůŘ@Šůi ŕŃżcHÖŮůěs¨„•XXœ3ó@•ffoŇźyţ0tćy'™´[T۞̴a :NÁP(ôDĎ$nŮFąůŠepp)bNţ€Ęţý{é™O>iœÇKÔ7Đkuœ^3ŠXƉ˘ŐiTô‘q߲ă&v ‡lGú1üÍß>Ë}ŕÂĽŤ´wď.Úşu#Š˘çh!›˛íÚł“ž˙ůKFŸš˘ .ÓâÂŐŞ zŕÁý´s×FSŚnzňéG¤fdëśM´yËQúůĎ_Ś#GŽÓąăgéÚľôČÁýŚžCÜw".„šeč}Ó捴iÓzŁ{]ĺĐ!gÎ] [7ŚÍŸfŕĎĺ‹Wč꾍´Í¤ß×ßĂ čcÝ]Ý4;7cÚĽdĘł~ţÜKĚjqöěyă(żntËí޽ӆ))ӁvóÜV,hËÖőtôăôÚkŻÓOňëvűLťƒ™bi ̏`‰źBˇnb3Ŕ˘é?%ęčĄËŚÍđ™X7L>ü  0]?œů`8BĘÚąŕ ŽIâÁ Ž}ť'hëćaZźôú:qú:ݘZ`ŒaČQ-ďN€tź¸ŸÖžޘżô¸Ëš=ú6lĐeçfgY˙-d‘ÍqyŇń[Ɲ;fhĺؘ2žőšhÜÚ1ĺ9óŽ”#Ž“Ěő­Ąj[ @Źń¸Q`EÄücň+Y€^Î2YLŠŒsžÂx>qC €PćŢŢę zMŸY26ˆš[˜ćó˜O6+xĹ( }ŕ㆑âcŻZíwmć—‘Cęl×pž:8ľ|œ%i?Ö÷­nhRťŰBÁ~rüé,÷ă+•TRůŕDޛ!ŰěńÁz2épC(~śîv~÷Ë÷wťôWós…wŕ ]ë}ˇw-Ľş˜ť\ÉőťŐkŇ} °¸§ç펍;=[‘â]+&ť{V‚\e&ŮiŰ-Ś[Ó]Űq­Ëí¤“!É=&ĆŞŘéŽurC}ŕ[é;՘ăŚéI$}oE¸’¤Râž:ĺZ­w"ďu]m"tĎ'şúťÓ=Éň­žPđDl¤jŻ™|ŚňwĎâăü+RÚÜ݃l0ľ¤KWËť ­Ő÷¤Âžź§Üé‹amçĽ î•źß/âť?>őŠOÓÁ‡b#€0†<ĽFĂo0Aŕzđ,5,࣠]᣹•q/Œx8ć™Zˆ0b0€„owˇœńĆo0Ł>ř żp?Ędžŕ@;Ă Ś,HuR:aĚ5Čץ.Ę ĄL`’˜uFš Ŕ˝¨—Xđ­ç‘ţĆ5(+ňRJOUN‘@#08Ap ň;žŻ\šÂéâZ”Y˅ëŐXŁeQ㻆QŃ:!M´ł2o¤’J*Фr?ŠăĽkYŚ„w°bńăűŁ{CqpÚS‘ÍÉzÜŽĐ( Ťŕ•RH¸ŢŐE’ëIô0+49G“ë'Ž(˜őE>¨ĐŇňÓ¸Ť¸Lš ő„UĘa—ŞqvUçŠŕ§ Ŕ›™-ćJt"?H7Ă]őěš‚ŹŤ›;VÁÖĐŇĄFŕ|kCŕóÚ a;Äé*!°;>@AřŕY hS¤Á„đˆ÷Âu5ĺĎHLxvę4š|8Ăä•őŚ ŻĂéîiřD —tüŹä‡öP"NŠ|X¤°BT]Z¤e8ÓŤËĆĄT6Ď>ËŹź‹` “>îŤ[g:;őXדރö•GF@´ëäYY°• úę„r3›E ,A¨”řćYTë-Ď€Ýméy13ëDőubűŽÓ^œNX#Šc_ęgW– ó:ŽceWtŹq9ZĂn4Łö‰ęŒĂXx-׊î”Ô͢ĐA:%ÚÁ쑄°ýިC˝őŞ–UŻ×ô˜ĺ VÇ~đÎhCˆôńĽę˘q€ĎŃluŠiý…ćޡ!X‚–´°VĹł‘z‡‰Ú1ťˆ>˘xˇź:$Ұk\żu7=bťƒkxMÚ\ٟśš dŃvĐ´¤zҢRĘÓđ`…†‡z¨żˇDĂEěĽń‘.čďM{‰¤ˆz šŻ6fh'p"_0şÚ fŚł[”­jô’Š™ł0Ÿ˝ńćQşxé=ôŕ^ÚšcłŃƒúhš^‹Ę>4ÓŇćЁ żzy<ĂăÇOŇĽK—éÚő} HéęŞP­^ă:C§yřŕšX7.ŔtÓŢ׎ޤӧÎŇĚĚŹŃ‡Ś˜Őbdd˜çĆl&Ç,"űöîŚAÓö§OŸĄËWŽŃŤŻĽîŽźg÷NŁĂŽń|0憋ŽĐËsŻr˝GǍÎVáóx˝=}´s×6Ńňţý7é•W^c@t7\öä™3ăĎě‰'Łő“ëM{]ĽwçÍß:˙]Zż~‚|h/­ß8A] Ş)˛ÍKŔҟeŹńč‰Ŕ(ĽbŽÚżžśoĽc'ŻĐG.Ň;'nĐĹË×"Ç=ŇQF‹uhą˙¸’4‚ˇÎU­!7t cœC…> ýş1úóbs–ŤE*š>}ߝ˙’c—ß›k°Ÿ¸bI/tBCůQuʍmB~×"°څu|€ á܁cǓpX\wËŽĂQÚ(ś_˘ń‚DXňZA#œfĽÇŒçnłţX'R}ŮŘ2n˜ž]Šě Ž]4i+Ł66M‡1Żľm4,Qh™mÝwc*?qmĆú;ÉŞĽôiôUŒa× Ö^ŇľŠ¤’ʝ‹gÁöj×V›;d5Vű$ŘóNĽÓ|śŸÓZýRˇ;Ţéü{M˙nÓťÓölçŁ[ąnYă}ˇť×ťĎ.÷mˆNNüN×ŢîűkĹŕŠë¨vďMv¨¤ăť]ZävŽ})ĺęvQ/1iyŽ!‰čd kچ–VVóŮ]Hbp ěuž“whÓö"…ÍîBsŰgEá­19źŁň/ÎŃ˝śžăQ´V˘‹Ý>˜\''Óv•Ďv/ˇĎľp¸'űľŤ&Ä­Ü Ń)vyśţć˙S;š“çşśąôţ€+Ö2Ü.ľJ§|Ä “Łű÷Ńţ}{x'I.×Ĺ×ĂĐ(R0Œ|€ß`a€I§ ’Ŕ5źřa Çđ Þ/ ˜ĄĄ8”u€ ÄÔU†‚Ż<`úMKpř3gčá‡fć äŠůă€Ü Ăę€ô‘ 7š?Ŕ 0ü)‹ŇĆőşÓKŃú¸eT ˝_'jôŔßHGcVŁL8ŽkÝP'ZW€'pN'B -äĹťblyĐn¨?ŽŐ2ፋx čęę7Ż˙řzŹóŔâék¤@eĽČDŽŹ ˆ.˝ëLlˇFOŘÚt^ˆĽaآ皺`ĂĄöç°ś ŮI gœUŇ$/z˘RĘËrŚČoH˙ƒSŹ X{óNWf§¨°ăW˜b† qçîŔÖ˛ˆQTĆƒt ÂĎő }U‡šďi™8„íY$źŽgÜľ°°bzŃĺůĂüר›žf~Ăš<{ş 4ÜS0Ný>茥ĄnŹĐĐ@…zť H`0ŠuüŞsYËí{ú—<'8iŻJĚaŚ|hĂ7ß:ĆŹ ĐĂvďŢAă#F/ˆóBzŁăŁ´{ďN:~â$;wžw÷tŃěÜ;ę1O`źŕb°E 1ř{rr„úúşŠżŻŸ9łšts쐍Ďbß­éÓő†ďMů\<žÓ <§yž´9ÎáŮĄŸŇ€†×ёwŽ3‹DÝô›'Ŕ,ˆše‘FFiÇöm´nÝ Ĺ<ß;côłóçŻĐ›ƒôłŸ˝HW._Ľ‹ŽÓŽ[iÓćő ˜°_,0ƒM ěćžËŚ—.LP>[d‹ŹŠWśT4m0Č €JŔę }ýpŇä=2<@Űśn ˇ§ăÇÎҕŤ×x.˝~ő–ѧ.ӕk7h~nž6nš4mş‰Ű ˇ",Űw\g0Äł?ý?]ťv]m„ča0Ëu˜™§"@Ś‘Á !l‡ž™k—h玴ďNÖď|Ë 5>>L;M;NGŢ>JŻ˝ú]şr•|öíßM=˝ŒhŁEŁ/./-ňs3yěÜšÓ̑>‡šrí8ݕ<°žvnĄwOݢĂןŚÓË潖€L†2Ż0‹ŠľÓ1؇çŘÖ aÉ=DIťŮq(cCC~âYëć Řđ – °­(€-° ߓ÷…†đ]<—śĚů›xv XOm–dű§†ú@ˆ‚PÂUą  RŕßVđ‰ČýB~é{/ƒť™LEq{´ŘN˝•!IvŠTŹČ斪0ˇ -–ĚŔľ h8*ăŃGtÎ@…°:šeqm}+l˞×Ö&—ĘÇOÜ÷ąű^Öţę2Őh_q7ŃuH•RI%•Tî\ź–P‰Ş§Š¸ż×ęG&¸í=ˇóG­Őťšokľ{ź6ďĺdyÝk’ç“ë ×g¸ZŮ]z7ŸdžîľIżŁćíôÜ<;éşÉú&ďwޝÚä~ű`Ą†ˇCˇžëěŘ^Ťs4y›fňşvç֚Ďjůs:kť¸íámŃ&ýäľnzŞpDu´ĘZŰ"¸÷ŠľnUţ€d~†ávťgśÚ[ äkšgľkÜoŸÚv’€Šv/˜dzî5Ž—źÖóÂ5ĽqťüŰÉZ^–wz~­/ľܝZÄK"™žaýĚg>McŁĂ €S_t& N(U>0ˆ ` ›Ç? (Čאü`†ÁiPĄt_Č × <=";Ź‚ ´JťxNŸ>M{÷îĺňÔĂ>¸ 0J ž(3îCş(Ľ!Vِ(“ŇKť!?Pv¤ĽL¸eWŕʏë7ňBđˇ†ÁqˆîRÔp)5K=ŠoÍG ÷(7˜=Ŕ‚úë°K—.1CeB¸Ą`ä<‘ŽiXÔëâ}¸I%•TRIe5y/óţG띪ӾŢf€€ĂŁa֛™ŕŠ*ƒ!zkU h¸a‘ő*ÜĂÔŰŹ!š˝qŹztŤŤ›f2:cœ33Ë5şšë§ dœ‘p¤˜ŤępśĂ‘p/dňŒˆ0…8űCŚn7ż3‡ĺŔîzŢńęIˆŚggMŔťżŠ.΢Źoœ¨Ć‘É!BŕS Źq›'v§“ŚŠ—8ťeá­˝ƒH 35ŹÍ;Ó¤#ÇËb°Ęňng5Š4ćÁ\Ž@Tö}™ŞËpúTy ƒăĚ.Áő - Á:ťŮAĽtä3Ţeą ­Z'4ír<`G=ŻĂŐÜ`=˝EQ´†a$AqšŐQŒJ~źóžâ8ďƒČh—4B%ĂJb†ĆŻVý(d›Ź+‹öÂó˛Q Žń-řNjw„şL.BóĂGËç˛Ü˛jťE,k#vDăšÔ#FÖpš_ÔB Úi6#ž›Č8–ńŁľŠK•Żm‚ş)HZ×ÄBeý^BÄKďOdđî3‰ ÉEý#č;€‰¸aË)eÎe>ˆœź<aŁQyp~όS§Đä²Ł  „ÜX7ÖߑAłŽî.Pw—Yß÷uńwÉ8˙9šČhËą0—RTxžßŇŻtFŐ{Ý)uDŰ}÷$}ű;?¤Š›łT1ízăÚMZˇ~Œ6oYĎěhk<ŻĹĹe”+%:wţULŮŚŚçhŃôIÔ:Îu÷tÓččˆŃ Š484H]ĺ’8Ę=ϖϏœąč+ę,^6頝ѷ1_ĺŔvă“eŰąĚ3ŠcČóqhŁ™™)~fwQŤŐ°`Ç'Ÿy’™'ŽŸ8Ĺ!żôľŻ=nI؃â0:ô›ožK/źđ ]żvěßKۡmd0Ć-@*ť÷줥á!.ÇO~üsóž(ЀéłłsüރŽ‹<#̇”0˜<ôčqÚąšŸŮżŽŢj/)—+ü|x]aÓŐvĐ÷"Q{g‰űw§÷M*?šŇe Öë!.kÓÝć›J*Ф’ŐťZýT­ěSŤI ŚiŠŽÜUZ}Uí7(ťĚ2Vó™i’çہ’k÷XťůÚýŰ}Ÿťé$˙Ýňš şŐŘ]`­^Łi¸‘ \pż[żNí›l§d}ľěÉvwĎÝr_1X$ÇiĄÁ[|ĐŠĂëy÷ťÓůŰť[ů(/`Äpá­Šżhĺ Ýdą*ř$!Ťőx"¤ČřÔîĹŕÝA[ubŽX­Žˇ9›‘.Ÿ4RdŒ n›žŢ›|t’Ű)îy?äNŇýEö[”óK_ú"=ţřcĆѰťŽ–dçżUő˜ËbĄŠż‚"đLaäŕ†3yN@Č œC8 Mź€ŕŔy¤´ šD™'Đ>ďźóƒ+pÍg?űYÎż5œňBy/Œ5Nŕ~ĂŒk ˘ůC´şťip@0î€%×âo”ŐeĄĐp$3ŕ˜‚&”E˘á:ČRˆv=B8­iS¤§Ę­F{q‰öÓ<Ń~¸W× ŽYŕŁl"ČuÇ߸GAФ’J*Фr?Šř7<ë06ď]ëäî­.ŇŚĽ¤eęäÇp&4ë󞼞)ŇĽâ ŐŮ!S¤Z!G ĆiTŁ;Ť™yŞgVŽś@ĺL‰źlž Ąq46‘ö˛ ŻaéэĂ$ëU!gœ1ua›–9kżĺzYĂKhœ—c? â\Β@X&2^–c – ‚I*<›F3äp ’°Ě$’őešOqč˛iöˇŽšušëœ¸Ç•ĄŹ`œ“Uó{nNŔ˛ĚœĺĺůzĐôĆĂ $ HH–|/´şF“¨%ÔcŔ4ěü֐ŽaÔn"6čgǖ9ĎÝŘŹI€9ţTç<ę ´˛Ë^ĂkÄ剝ůęčWIŰĂ5rÁÁ@Öap”ÖęUvĐ %q:‡âTor40|d[Ú^ójśPڎd˙‚eǰeŒhăý˜ÖĄ<"ä/mĄëZ7\§¤(`‰Ř`˛’×ç…âč`ڎҖ’éo؁-ůÔm8•%ŻR.uó5A Œ¨ îő8No°Bßă20ť0[ ‡Ňąçđ\ƒ0 ¨ăŸŰ é†2ö„?ýŒť\†ňćžîMŽőŇć 46ÜeœúeYtçswĽ(á‘üŹěž'eĽđČSőÎkZś˜Đ‚¸”ö™ĹŔ& IŕŽ3Œ`Չ+ĆĄŢŰÓEÎ]2ÎćŞ){•—8DľZçú3€LĆYF†OęĚnąmë&*–ň $¨TĘüsZ˜/Ź5čŹkbX=w–.œżĚ ďŃą!Ę愳´TeF v@łÚč2ÂŔ´Q#`ö…Ť×ŽĐľŤWř9čţ180L;w=cœ<¸›C~źűî“ĎaŹ5™ŐáĆÍ[JLeSîîŽnZXZŕ>˙ŔĐţáŸđóč˝QfÂJšŔúd—Ń›~˙$őövS˙@/‡4œłČ$ë- –ăž°•˘˛ľĚĄJvďŮNgĎ\ CŻžE'Mš1ćϟżFł3 túô9fŮ´q }I]źp‰Ă™Œą>wíÚU* €G¸°sđž ˜;Đ{wďŚW_}^>ô&]ť~Ëč€ó´eósoerĄÉsžÁZű÷ ?ţŁ?فÁ~ÓçMyK462LĂŚ Œ0(Bw;Q`YZűîßZŘ3I›7ŽĐÁýëčĽ×ĎŇKŻ˘éŮ*Eťšœš’çĂ0ŒŘj“}âÎÉ:ÇšÎ~׊ďÎÓĚaž9ü€y?ĚÍϙnX(šgŢŐîČÝ9/  $ąlP fľ\ć53~\§Ŕ°x>ŁŒŔjݲkűa~ń¨Ő!Ň"ŞŮ"WćeżĽÍ¤ĆÝĐÝ „ţĆŔk—A?}ϸ ?kżĺ‘,§›śÖÉ}>ąÓˆRIe…Źć߀¸;ÉSI%•Tî•$œ_y]'›űT˙–ę’Iq×FI˙“"É˝>é#v×&n¸Â$0MďO–]őC˝×Ő_Űů•’ë9eâ8¤öčŕ"4mŹ/týáŢŰΡé†,CÚşqż…•­}ýÚľłnÚE~Ę^ŢÎ÷猥íĂú†ńąź_žź_„ÜW‹vâ÷Xť{ÜsďOWA>Nr;ŕŔ/\ŃIV[”śSzŰő5÷ZQš[cîľí&¤äwkzŢ Cc’Ú'YV÷ďäË(ymň¸‚,VKłÓßk‘ŐÚťŹ¸q§ů”ť‹`źÂ3‡"Ź*óxIŠŻ@8ô@›) ށ1wˆ.řA_źxĂ0 ťUpňŇPČŒJŞŔ¤uěŘ1 ˛iÓ&.ëääd”Ę Đ nz ˘Ě06A4ćŤ:pů"|ă(;4. ĺB€!CĂ} œ Á÷",ˆꍼî`÷˘ p-îÇFB€4pŸ2iŕ~ÔË]ŹéÂy ĐČnܸ‘™4P.]¤ SƒËú‘Ľ’J*Ф’Ęý(=őeʧJom™Ćs4YŸĽŚqlçë¨A—s=t2[¤)€sešĎ—iÎx`–ář5NŃl'Eƒ7üć3ă°Îżjž‚Ĺă˜YڰQ§bá¸ŔBAöĂź°ŠŃŹą?ť Ů…ÚlX§´„'Č #Čô‘a“NmËčŔŽ ‚śÁŽĽ:‡ĂŔJK˛Ž8Ŕ œĘ5Ł|ű|-‡ęČzŚvM Ÿ°ťÜ†‰ IbBŕĘBQç–€\*q€rĂŠÚ×7,$lF8Ý NP6 Đąg˘p`§ŔúKœëąĂ ů˛łÖҞ ¸!g hę0RÁłĚ9 ЎěDvw߸ŕ­§  Đ:Jţš=Ĺ˝O PqH‹ Ňżđ|ŠĆ‘‹5Ŕpb ÖÝÝˎąĐî`†ƒXX0ZŮ+Ô@ĺ‚>’ş“ÖKzŘ’ŽK ´0BH¨¸.1Ĺ*Ůň6”_-=kž¨[Á†$Ńţ“Ô­”EĎ×+x÷ósÓŚŸÜ2NΚYó÷Ú:gš O:ť:¨ťkJĄZv.[Є2Ÿ˜vÉŮR6¤űVů‹„\Đ"¨ooOÖöŃţ#´n˘‡F*TĚş Gf> iâ)Męݢ ‡ÓŕňjŰ÷xw˝ÇĆ>„ô@—֐3ž2śDeZ)¸vbb”žţ˟Ł;śŇĄCŻÓĽK°Ö<Ť&@b& 0& ÓŻýÚ×Ůď›Ě.ӄŸ& ߓZÍ7z‚ţdbS^͌Ďóç/ŇsĎžL`b9řČ~ÚˇťÉłfÚ@ůŚgćŒCŒ%Kć3ĂĎá9fföžfúrݔk€ĆDŽ…ÁY0Ԛ6ęĄńuƒŚÝGiűö-tüř9úéO^`†ˆŔĚ˜gj,ƒƒ}F›5éŐXŇ4鮟1ĎŻ—>őĚS´aĂ:nca>Č3ë .ف\<’PDN¸Ů0ŒęíĆ(˙ô'&FŒn6H[śŽ§Ă‡Ós?;džĹuŹUÍťFX€rtăć łűLOߤ˘šoÝú úíţ[œÇĐđ€i‡—Ďbn„Â>ôqŽ -ó†ůţ‡š÷¸ó™ęÜşaÁ}öíîyqčÄsˇ{ŸÎOfSŢIđž›GäpA[:ďʼnč\Ťy¸ŽÎŕoô=ŘhQ0Rž—wSŘj˙Óy›Ÿ#Ň ZËčîČĽ4œC*m¤MŐľŚ‹TRIĺ^‹ť>sĽ“ł>yŻűžÖët  ňv~§¤>Ň.Ďd>îq7oWGK^çsťß.°?YߤżË˝^ Iś×ϗ,‹Ú ’şhť{ľMÝcŞĎ&CFľŤ7$šy ížš´k§ŐĂT}´äžX¨trđvršśs^ßîű=”Žč í}ďĺ|EŃ+8ĘŰŠí\4üíîuÓh§ř­6éľKŻS>r_ç>ßNAvDĆ=ßéˇň;6v´ťśÓďöc°óxíôB^m,Żv~-˛Ú˝ˇË÷!04<účŁtáÂVřa$ÖŒ<€˘/\0.€ťžTáĐÇ7ŽU& €1Ş–N€ ˝Ąlű°Qč<݅ňxĺ•WčÝw߼={ö0›„‚;4l‡ťów31ě"ƒ9\ŕŽGša$pBi5/\P҄a÷ázPÔ°áňą# eVŚ'Ô‚ü‘&Îk¨i LHW.?Žá>¤ŠaL/îÁuhŕŇE¨ŽkÁ Č@^ş žřőÁsE{Ó)Ľ’J*Ф’Ęý&;g/ŇŻ\~2ĆÁ”7ÎűËĺ:›ëŚ“… -ĺá|̙7 Y7ph€2ÔäĽxƒr™˘ů3ĎĄB–`Œ0'™:žŹwĘůćďSѤŰđ…ÍĄ‰%ćťŢŹ3đ ëILxç;ywšÇeó>!ťřCs}Дp~śŔyTUŢ­Ÿm6e˙{´ŰÖ'2Ĺ1Ů!şĆqw k¨]{*Ł€kqAźĆÂZËł ˆžŒYƒ-˛sgzú %ĂőľN­Jó9ë jrČvV!ÔGŽ`ňĎG 욇 ÄéĺŁ2J:ÎđźVih65ôťĆ#5šçă4kl‹EÓN!$ż˜ׁ Á÷e—q~1oœ ł4eÚ;­8Đ2b­­ëÇdx’äsR :Ř$ú0?w•žýé‹flĎЉă'饃ű˜Ő!“™ŁF=`XŹ\ˇ,uUş¨ŤťHťvo7ו-ĐAHYô!_íaqS„6ÜśmłYźřâKtsę×gxřş+Œŕ—žŢ>Łł Ńżü—˙‚Á$>äň ńźiÁ.Rç_§wŘţcϑGIÚč$cöK6ůüĄĄaÚťo˝óÎqzîšçéćižŻ1Nŕě1ĎlďvŽ ž˜ E3OämŻčE¸P8}0ƒ,/WXR7í‰úŒŇĹď] săc&Ď13–Śi ŻÂ` SĚ5Ď<óŐlŽ•ý ĽoF˛rMÜç3-ó¤\ĘŃşńAÓßčícףyÇŐĹiŸ‰ć0eljí­cƝ/´ ZşéGC|BŔüƒšŒ$čoСĄCż…˝ÜŁ</xn …É:2ěÖc i+sßyQžŔ"É÷‹:ô~ś‰…áŠ÷‡ řÓvLŚŠÇÝůŰí—ÚužF@Ý8œĘ<]żq=˛?twőŹ`rí[I'‰Ž‰äNáT>^ŇÉf삅Vł+§’J*ŠÜKIŽË]YÍWéŽí’× SVŽĺ]I2GčťÖ]ˇč;=š–‚hEœc&.ťVHŽ7:+đ.‡(“—ęđIÝź]]•i\¤ÉîýÉz+9ŽubPIúÉtíĽĚŞłęZĹm7m;÷Öt(7Ö˛.XŐŐ7“m§e×Mʍł†”ż_äžX¸ŇŽ#ś;ÖN’ÎňN÷ÜnrHĽUDţp+ˇ›”VS`Úő7÷\ť´:嵖<ÝIŇ˝_łäuŤĽŃ#P˘=˜b­˛–{îŐ5kH䜘˙ľĚ”čsĹÂáßříÜš3räŸ?'ąWńÄKĆ=ź¸\@9áŕŤ„‚đÁËĆ0(Ŕůżľžh<ŻÖU˙püŤ!` źŕ0čďďçĹň:rä8q‚žzę)Úž};_cîÇâ ÔeÇo'đ­ $¤ äĽFxźüQV”KĂg ]€$4Ô @A  §OŸć<` „qĺG˝`¤DŮń­ěh Ít˘LHm †] Ž(/ţF9q?¸uŔ÷­[ˇŽ#MÔ ×Ÿ;wN ŮfQ‚2!]´ ^HC?ÓWR*Ф’J*ŠÜo2“ë˘7Ëtž{fK}fS0‹-uň30Ó𩠃IÖcg3˜%ŒČú9ŢI\Ż/Č:ŒĚß؎ żěňÍJ4ˇpƒć§Šž´ČĄ@Տ0ůŹ ăaœ;O`ţ2ďéyŢDĎN(0^˜÷šě.Ď2#´qíáHôpȘűM9“@žˇž›ÓuĄh‡“)l.s]3Ą €#90äLŢ90:0 ¸ ×¤ěę$sâj QBÖ˛¸†N×Óń>ƒ*ŕÜźeœ˘SÓU*ş˘ľˆ8‰Bnk°Mä `y(ľGŘĹNń:;?á “tkKԍ„ʸ Ž+b§&œ—îŽgw× žÝz¸a)\'–ŤGŠ“˘ě î˝:Črţxn˛óX™$<ôőöÓŇň<͙~v“îŽ^vœƒŔeiŕPŔCQÝ։wU[Đ.vN7š&íFČ ŽĘؔpŐZòTÔŁţĄF<ŹátÇGó‘˛ŕ:ŠĘ(!źČˆ¨ýFë˘mŤ}Iœš9™ „ĘĚěMÓOŽŃÂâ´i“¤˜kÔ0č'“_}F90Z˜ú5L}ëÇ …:Č` Ň0eŹĐŽ-Ăć3B[&ű™Ąám0Ž#G&úŚłqłás<ćxNq‡ëÂhk„´ČçMűrĚŇ27ż@ׯMŃwž÷7Śîyz÷ř)ăˆßA›6OFŹv‹Ë5ş5=ĂşÖä ŚĆŒ“Ëľä9šóęé-ӆăôäSG%‘r…‰˛Ž´`Žƒó†dČÜě=˙łWéŇĺ ôĐCĐO>fK fĄVź,ˇŐöŇáĂoshŒĽĹe3ŽţŽî9nłj5 ŞŠËüÂ\ćy@10ŢĚĚLI8 „2iTmˆőë×ÓvŇç>ó?CeJtŸš6ôďŐâO+˜+SšLúzŁ ĆĘZfŸÖm'ˆ ÔčÔÖ.XBĎšĎ'ɔĄewŰÓŐwŰ1Mśş]řoî'šďí:~˜8˙^´su­’.˛ß›ÜŤçÚ.v/•N‹ßäąN/­NyvĘŤÝšN/ŠN‹ä5ˇë{ÎßMŸm×6w*ľ‘˘t‘=ô#đ2ĂËéćÍ "@Ř ŰŕÜWÇż†ŸP$%˜ đîŃÝ%—/_ćß 1°ŰBŕ¸imذ#/ ő LČóäɓ´˙~ ٤k¨ר÷HĂ% 1 z ŮľUć2á~\‹k”I‚ň Źx™Ł-puhőŇ—('ÎáeŇPÄ)ňBť˘m?抴ƒĆÇ)_`ˆ“ŠgČL•J‰Š*´sç.úŮs/Q˝ÖŕpLí3şŃ83M€Őő°`aŢPŤ! vG}?)YF[$Şžnűm(3ŘÔ° $SČđüS(–xţœwňÄ9şrů:?w…n\›˘wß=NŸůĚ3ÔӋ2˜~™-qş×ŽOÓ˘yv›śŽ§…%㨭äŠÜU˘˝űw™g8Ęĺ?wîýřG?5úŮzóđQÚźi }îsOѨi›B-G.ŚČ,? `_™Ÿ›7:Â+Ţäţ y÷ÝŤôÉg>Á îá M~á3ôĽ/~–2ńóØŇúKˇđíÇ# ÓŞ‰ ˆ ožyŘčşrťŕŢjuŃô§•3˘ˇiXEí‡ńÜ!…†^ËFÇ,0X úžOO=uĐč§ťčĐ+oŇĎ~ö ÍL/0Čbzj†ĆĎ^¤ƒŕJę-Ě×Í|‰wיą‚AKc&a:č/ÓŚÍhßţ=ô÷ţޯټݝ˜:ËؓńڎÁ˘UDŇ4"@ĂŁz˝k°f6„RąĹřŽcRďŐ .`CÇ*će‡I˛ƒčâ:&ßÂf”îÇ{ŠCbŘ9 LRÚ`;€ţ [Ë íź…PJZŸŹ§ÜĐJî<Ěí7yt\œŒíÂk Éä†LŇ6idžä‚<ô[ťLî;LŰEBzLóŐrqzM€7ó480dćĂ:ƒŸ¸­`ó€­Á݉ۨĹë ’ĘÇ[:ő׹w§÷Ś’J*ŠÜ­tMŹ6ß´ó™šçbAĐÖŻľÚýŞŸ¸l}.``5_[r­ eŃë’>ľ$0Á^B°vs™*“uĐőƒ›fňŸœ×uâ‚cÝőŸęŽ~ćęÉíęâÖSCËťë?Í×˝^ÓuŰŔ-‹›wĚÄu˙Č}°Pié€áJ$‘ţí~'ťĆŞv°“ł:)éBřĂ-I´Új@…ä‹âvŔdé”vr2n÷‰Ż×IMcÄňQ’¸˘­ŠťœO˘ŢäúößíęBÚŐ÷v}˙NŽ_Mî4ŸŐĎľŻď‡mœ˘<02|řaV¸Ď?OßúÖˇŘŮŰŰÇçvîŘ7Ŕß0\Ŕá0^ŒPÔ¤€{”ŽJC_ °űŔ SJO8˙Ő¸ŒôŔŢ ­lŕ% Ä›ožÉaA`|}đÁš`vPCŮ)&ŇSÖ ó´L(Žł{p ʃĹęŽ2j ‚:č}J+9LŰ)˜ß3 Ź(„w‰˜|P/´ @0üŕÇľ\(łć…ű‘ŸĆ)օ‚îţĂqŢůfň@}5$ ęŹ €Aę°†† ¨iťFąTRI%•TRšœŽ†ü„ <łÎmTë hyvĎ YEw†¸ĄlTNĽC­ńúUvłZšw딅`ç?ďšhĽQ€ ë !ĺňXO ˜őJŃŹq@ѾȎ5„šóPžlžŰ“˙ůąóžHœ_MqnűhÚz¤Säs%=D Qő .N5VBřŒ¤gŢę4tRř­ŕŠ8IŤ#ŹńN5IzV5đ4›ĄMS@ jÓŹdŠ˙‹Ĺ ď–ĐÔ%ăěęëZąs\uE Ť Ć˛˜A#ŚŁmFiŤCŇłyc}Šë]|Ôń‡u$‡Čć#ýMvT7LťLŁq§l óđŁLŽĄ.?„Üľ-Ľ HGę& ™ŮF˛ś<ęďáţő:Ö´ RÖgČýŒŚ‰8ÜM†C}”Š9Ş”ó41ÚGťˇĐŽƒ44ŘĹ: —‹÷=ÝąR ä,xŃZŘŮ=eő]üËfxvŕ9›ëkő€௿ţ6ýŕoFŻ˝ú6|t7íÜš™z{şŠ§ˇ‹YZއłÜ Ď|özéĹWéęľëĚÂ0ukΔˇ×č ËvGżÔgaa‰.^źLŸýĚÔY\ŕ@8Ăđ˙čĎ=÷]1útťŹés˝Ľ2÷îˇ&żŒQťöí—đ˙úwţŔč~x×z˝ţzâ‰'Œž1m>ˇqY}ôý’ â˛,é;ËMËu¸Ç4=ŸuŽč0ý˛+˛SŔî€ç6ƒý@ÂÔ8íŕ{ČD@ęT>Šr;űkę—H%•T>L₠úw×!1˜ÓoYë´{Ÿť`Sč\ĘfĽŒYz~ť˝×őjZš;ß`;ąnvUż„2b­Ö Áz e‡`]čnŘtĹ]šŔWτŸdľyßőAęýşžBy4¤ˆ[om74¤ćľ Ú iŔŁzŽŢsˇţŔŁ|lZ'ĐDťÓnὖ<ÖRžtaóá“;y&ďuRčĐi×W^ď&’éŽ<–ĚcľßÉëoWĎ{  Xkúk9çĘíŔ0w“Ś^ű~cM/¤O~ňôԓOđ N{0Dœ:uŠ÷WŻ\˘+—/˛g=@0~â… E/b0<ŕ˜2Sŕ…ö |ŤŔéŻá0đ*\ CňĂ@`ŤP ]äsöěYzţůçiăƍôČ#0 ×aA€2X lĄ7Îó ]|Ŕ¨†riěU qm Ć\Xŕ7îĹ7ŇĆ×+]6^ôČ[™1p?~ëq\‹ü”5÷+řcA€:ŕ:eüŔ9\§Ć,p-ę‡g…ô•ęTCŚ /°n8ă¨›–ĺR@ˆö#¤‡{ńÜćož TRI%•TRš/ĹꍘŚ2ZSá˝Hâŕb§;°ě˛ í%Őć’q° ĺ?.đ`…Rťą\eď¨Ý/l˛ĘšuP--ÎÓňŇ<5˛uónďç š&ëgâçm֓üÍA€€=ŁYŻIh .›Ď€Œ ;™˛ÔlÔ%„B„X6ƜőÄŠŚ BX/kërź°cÔ=Ô=`ÄBŚAbSs6Ő1ä[÷-Œ5܄!‡”‹ •˝†əl ”+欑*ĂçąnB3#œŠpž/-˘tÉ“㙏đ€ˆ#5d:¸OăęX‡ăÎÇ&3[đcľL!;ĺ#­Œ‡ŐP֍ŘůçľěvwŢ´ô jÝaŁŽ.ŹŰô˜ÁÜô\C‘¤ĺsř‚0rÖe"f3Oćçgă÷:•KÝě¨ĹÇ ŰŇäşKťĂ)(ĄHšÜVčŻpä‡RFęĘáFœ;ę(ňzOA\“lł×Űçđ4śŒŚqˇrvrąƒš^‹Œr.ĐD۰Őh) &z ,HâGÁ‰ 2ŔzUuŹšąž×5-ÂöäMŚčďŤGi†şirź›śm ‰1ă\kœ ƒÂx(ۗ˛‘M°ĂƆ0°N`T„Çy_˝zT##C”ËËsžy䌳vzfžĚđŚłçOŇÜâ]ť~‹ç= –m%Y`&řôgŸ˘W^>dĆŔ‚Ń/Śi`°×†"ôŠ\)ÝjŔ|$4`!çsX „xqř;ĄńďŞI“wŸgbŠ\vˆ‚ĽÁŒĽj˝J'NŁˇŢ>JgÎ]Ąť6ŃcąŔŹéŘăcĂô•/†ô!úŃ~B§NŸĄ+Fż˝::"@si}ş?ŕťŔ/—ІœP­zĽŁÖ}!ĎüNór-sA4fÍűfnaiK…$*@ż ż;Ip+d^ćĹŘüśĺˆóřƒ1Ĺŕ!OuV¸œy€9bf¤ĽĄ4PV_jŐF<_™~P*Š@:ˇ7$ď˛îŽnę2ó X +OM݊Âsş÷…Ô řĐůZ ÷Iç†ű.Iř\gŒ <ŃóúžHڇї‚0tŘ>šZN÷}–ÜŮÚlľLoOˇ Ŕ%x˙,.͙yižßÉhS ÉĹĄŽB úăEФ’J*Фňa×Wr;ż‰ű~‡čűÚ  qÁ’Ť‰ťYAő,¤§€…Ű•[™¨\PĽű>_Ígä†ôŰ‹Ŕ.Ó`'qęŃzwjCWĎső]Ő ]żOť{“ůC”é˘TowŻC4<&DŰ\Ż˝ß6’~l+Dś‚´:´*ÔňťŘ"•ÎŇYő~HťHCw˜ŔhŞl Ŕ ‚^Âş“ €7”Á/X ăpĹ[o˝E[ˇnĺ° H×!´,pÄ Îp(3Œ(j°Â1PΉ‰ nS܃E€!8‡tř Ěh €GP~ĐŔő§÷ٜjčQś” ÷)…ĆOC; }yńŠŹş @^AÂqSyw‰-<´NšÚWY;P\§ĺUŠg,‚Đş3ĐE׌’J*Ф’Ęý(ę8q×m‘‘%Ŕ.öŒ8ô‚*;e3~Ţ,ŕQ˛Ć“f ` 0ŘykŒ ěܖ]ž~>Ăá:üŚĎďâ°Q Ĺ* sT*”˜–_بŒƒĘdZçkë بűYAt0SS80Ł>—ŤÉĄ ŕL‡CŠĆuĘĘní00Ž"“/KaXe&‡ §é3čĂŞŚěDâŐ.8ŮǻěŽC<¤8Ž{ƒÄÎ#ĄC„Q!963™Viیł‹×g$ŽáŁŔ\Źó8Äe×lĆ÷bXˇ&€Ć@qů ~‰v6gb#C<ĺ&đ¸4F˝ť›XŻwq.-ťk4r`zŻKéžbWďŞ×ÚPŕņƒTâZż~œJĺ"—,—.^6mY§7ßýĚAÓfýôüó‡éüů‹ řš››ĽcÇO˜| Żőpx™ţžnŚíŰvđXÂ:ňEÓúŠŤ§D/ż|ˆŽ?IěĄÝ{śS˙@܂š„ÔA{aœ€z]__?­›(ŃŻýúŻĐ /źDWŻ\ىuĂ´qÓí šhœĹóXôÄŁůBűmňŰł@˘0”š7>oYgŁ93(Ů6Ş6ę-9éœAŤMŇiQŤ‡ŚOŐ[X+ÜgŕΛʀœWÝüôyé˝3…ţÄ‚ZŐÎ/2ˇAď…ŢĘaf0§Ââܚξ™ŕ^ âęü¸Gíč(Ť‚Üţ”ąaŤdÄćă€ěÜë|Ą÷Š~î‚Ü{[žĽÓ..@Ă}6IŔDŰçG­NXă–#Ÿ+ĐŕŔ-3“Ň<1ŘŘîaÖ,oűKć•J*$őe¤’J*”܍OČ}7ęÚAߍíBóľçĚŻë‰Ő€ 펚!Ւ!*;ݧâžÓW€č×Đ.xßky`ąŸ” ÖR’DË~'˘ ŹéVË’ô ˘ÝąfŃMŹíä~{}|‰›T„VˇÜ+§ű8űďäÚƒÜK'űŚľÖëoθWŽódY-ÝäšäsŻíş€Eňüí@Éáű-kÉç^Ž‘ľ¤u/ęĚƤ'Ÿ|’śmŰĆ/h0I(ú0|đňRÖüČââŋl ÇK „wŢyÇ›Ž3+@p. źôŔ4ŕ† ¤*Ř` ťHŒ'ČŸ3gÎ0“ĹŃŁGěą{÷nž¤…ű”€PŔށăX4ข pŔ‹특žń’Ć5¨ îSđ‚2N(ʍóř | œŔq“ Ę6Ą/}5!/䫀 ”ScępŔľ8Žo”ĎĎA8ŚüŽ âuNKănť ä…ç†2hÔ×u(¤ňńYäWő/J%•TRů0Š:j×*ę”Đßąó܆.ˆč˙›ŽƒŻ Ŕ2!Ź Y„ăđír6€Ł]véJŞMvŠÁ‰Ę!H(G~śČšp€‚%8tŠapxˇç|$xŹ*×ŮÁËÎ1! Ž`ˇK(ńęüáLĚćL9<BŔɎŤ› ”ĹIœńÉœ’ˆĂĄ"Řż…ehJˆë$FýDŃ´Ž 8ţŹ‚@áGťDtÝ 1ˆîvIîţŐśVzóBĄČ` ąÄůâXŃŹ]āúŁNM[fu”‡=¨ów(+‚<ŒeËŚ 7~k\uáo7>­ö'5é˝n=ő>×ńĽ÷@Řą…şzÎî㌠§‘łůfŹă< ÉFXO*ĺnă/ĐŇ2BçMłc]܇këĚlŇŕp)`5@˝„é"/ŕ_Ř"PęĚ,#Љ€)" I(aeřz­ťˇš?ŇJ˝Ňľihť)Ĺínč÷[ž°eúĐľ§çé“ćç9:ÔC#˝4̀Š ÷Ěą^îcö 8՛Ą„í@ßÎ`|gěxtl/`]?{°bIŕ1ę•r…rXsg$Í:Ć0ď"ËS݌“3gĎÓąçé˛qˆďۡ‹&'ÇŠĚôľĆ0š\§Ĺů.Çöm[y˝lú4vČĂa^*­.áSXúzŒ3łŸyô38ČźCśŒ^ÔoĹ˝ž1}šÁŒ9pŔťşŰ˘Éă§?{‰ŽŸ8E“ăC´gĎnę*I˜Ž‰uë¨Ča+|fěٲuƒF^;ôş)Ťčd[ślá>çęÜÜ-:súœŃéŽr™''×юŰiĐ<2}×Ϙž›ËRĄ°—ő98]řƒŸđ}5Ś˜Ĺ˘\žÉŔ´éé)ÓЎݛ>˙ĹOrȏM›6ýŹKúnˆP4Ë B;s?6÷Ąob>k˜~ zŢĚĚl´C :ęfĚę‚ţcY˘>ĘÁQŹţŢb[ˆĂšn3Ďjdt‚.\¸h>—źÄă8ôž7Ĺ;úsšŚÜŚäČÎíM{ë֍ѯüĘECƒ#ô˝ďţ€ÎžšHK‹5Úľg›€$ĚźŤ;•2šTŞČřôÔŐ]¤ĎáÓ8ƒ9:d‘ FPTV,FDG$ĹCGçGŸDĎcŢÎSMžŰë-ě21Ž}˜Č¤íĽŐn aRÜ]‚nÜlbé|/óxÓ)ŤoŘĐ;ř]7úlÝ?4§eŇ)K”Ëçěƃ Ďď.ČŔ÷Z†ÜšÚĂ5šVs%tŕžž^ÎĄCPm ‹f.Č棝 ÚŚíÖ ÜÓăn[şĚ.Ďľ-ľÎŤ hi ˘uPЇ{Ÿ[Ś$ŕżm+ŰŚ›& 2Źs˜M ,™~=ľz•Ásó3ö TŹWR{A*Ф’J**éäÓZë=ŽÎ§€ÉN˘ďce^€NŻ>=ˇÚ˝ ĺŃđ\*şŽX­şYRő„ˇŔÚIT÷†`]íćÝ)ßx-*k>ÔAĂ hůuš–ü‘†úE4ďvyިžŠ Ú˝ÝýŽ>?­[>ž +íœÖî÷‡]>¨rž—<î倉wˇČ3 ďLs'Ďeľöé”Îű1 uJź—ű;ż›4ßËš$š.YŻ÷֜ad„š—˘ŠĺĚKů™gžĄÇœó€QlŮ8đ˛‚C/i€‚ĐÝ"Ł /t„ęŔ@ô`}ÉăĹŠTż>ĄF'¤§ĽłčBľ0V"D vB=ôĐCôôÓOóËT‚D =Hůá%‹űe‡TžĎĄ ČOĂw N‹)5†á^Iđ /Ľ¨E`¨q^çse¸ŕÝ@& B?ň‚(¨D)š‘'ŔhW´€¸WîÎĽ{Ćâ ă~Ei"]Ô@ ,n´nh]đŠiâžááan#Ľ[,•TRI%•T>ęâĆs÷V8dˆůĎÁnÍLÎ:€šěÜ̂BöŮ[׃((Ȱs $ ph‡pB4Mú`š a˛0fvžfĘ]Ô¨a6Œ ËäWz‰“G|Ȏpa °.ťEÁá‰#^Åđƒ`E Îy8I8Î}ŔĽËpr Á Đ$RŘ­Ę昄A=PŘzy ‡›ÇYY‡šĚąc]×X-ÎÇ(¤ë _ŕ0Ddăä*2›G†phb—{>_äuа€0$^@3đƒ$_pÝCÇą%>U$XšW÷ŁeW‡“ŽŰ“ť~‰Ú­ĺcŕ€Ww'K_j "KDóJ–i"|´ŇĆK›jߔ!ž×E3ŚMf°ƒžŐh  ńrEvxózÁ.š–2 ›‡qĆYg[¨hčűד SâĐqbp“ăaŃ␅ČFB9¸ôľęTÇŚ:&“ÂO1şŁlĺbކú+Ţcl¨ËŹc+4>ŇĂżűű{А—ţ"ygb@MϏ|ŔÎ{_¸L?2ŔČ÷bm^Ă÷˝yř9w™ślZÇ ´)ʍ58 "Ŕš÷Üs‡Œsąaűš€ Xˇ0ů5Ě3ZX\˘]ťśÓđČ öÓčŘł,TJeÖo8Ôaš   ?ŒŘX,}ƒÖ@úŽiŇ3§ĎĐäÄ:~ÂŇ"}„4ž!íÝ˝^{í :tő]š>EťwlĄm[ÖłŽU`§´„ „ţ43=Ç`˝{÷ŇÖm›ĚgłiŰóA(Łevě_˝zƒŽy‡NŸ>ÍĚ›6ŽŁŢË ĄœyŢšl‘Şźť}™Öݟ¤ń‰1:yâ4MMMý˘ÎŠóç/Đ5“ÎÜÜź)c–śďŘL<°Ď´c/ƒƒŔćş „(ŔÜ€eę5”Ôͤ…ňß4ĺž7úVš,a1ŕ7Ř9*•2?g6°†A‹’9ľp‚+ꀆ~U0úĐvÓf›6Orý1×ëMşqă?vĘôĂtěݓŹOmßžÉčŻ#üĚ´@Řšs;˝üŇkôöŰGčřńÓÔÝÓE~&ä~‰ç = ,`Ž€nĆóŞ —ÁaŚ"“9ŘĽŒ+AMa¨ă@ę¤óđ‚Řůîî¤Ô9FÉ[\ÇźÓ*NśŽu-‹k/ÂľËŐÍ.Ô[ŢĽŞŻ{á{1ŕ…ôýQ ôŞç꟥:.ž”&éŰńîÇ1ŇńQ‚ ępçw>Ň2rűhe-cI^vBšyŔu€ÁA7p˝lh~.#– î`pďÖ~疁ÁžĂNáy1Űę‡ů.P Ž C9 źĎÔecŇcĚĆĺ°qý9 W ‰úăFł„Ů˝ÎaQ°é#Ś›AşK%•¤t˛%ÝOέTRIĺţv>Y ÝI\]P˙žÝ=v÷Żv}RŔŻ`ŐÂ`´KĂehlÇĆŘ)Owç~:ů“zu˛üˇ„hŽNé毙ŰçŸ|ž÷ƒ|ŹI@…űťŹžXÍ~§ćNďš;ćíÄóÜďöĂ˝ט×ɰw§éÝ ăýzžÉ6ëôw;@ÂjERŕKŇřpˇ€v˛ÚXMž,nWĎ÷&b LŚ˙^ž™˜tÄ8Đî0ÓÁŇďŔAč 8ţĄ Œ^pćŤŔč  Ů ŇĂE2âŒ`€L8ތ0`Xf \Ťa9\€p 'Ožd6 °k L Ŕh…29@7Ŕ ’ ‡+p Ž)“ňWŞb5đ nDÁ¨ ňAş¨#ŽA}sLO;Ŕ×!m°Bŕ¸2FhŘ´+>eÍ@ş¸^cxăYęqHŕ˜2S(#‡‚JЖşƒůĄz/Ú 5Ž)sʢuBůtĄ )ĺg**xJCƤ’J*n“ďNĹ5‚´ŹßxMŻx–wĚr8ě"őěz‰ž0D°CZ€ ąqÄcDČΏ?ćÍ ę fš`Ă@Ćî6ĺĽę"-ĚO‡d7e}ă¸Ěů|qÉGŽ4„ŔJ-°ŒpŽcp­ĄŽ¨,;>Ă&ČŽBœő;Hŕ< sŠăÖ œÚÍ:…Ąî‚Á&püf44‰Y˚[œIq[Ş#+iXIRĽ'×éXĎbÉ!k­ ƒ,Ŕ^!aá$¤YžQ”c(_(:PďC2ž°i4ŒÚŐlČlh䌠R/lśěŹÖňę:OË;*[wxë}î.b=§†-=ŚiŠłSĐ^2hýŁđž˛Ddíqńrx8J9m´M™€`˛ŔúŻť+oĂÄe"p ßž Ř™´‚ԁ)Ž:k 4ýŽóä3‹čď=ß:„ăç‹ÝăASž#łŹ8;ŕ;=󤳳PĚÓX wŃĆń>Z7ŇĂa?ú̸ť@ůR.~†ŽSRúÉXMˆgA!žíÓI=?DeNÜź5EńWkăďPĄÔE/]ŁËWŻŃŢ=ť(_Č[ýárf84ĹÖ­[ččŃÓFŻ@ˆÄfTh4kÖéotržFFiÝş .ßŕPżYkMZ9gů^Ě"őĐňCç x9Ćú ň}ń…—é­ĂGh˙ţ=Ź÷”ĘyNkţAîŁ3íŘś…>´‡ţˇżř>÷<›Ţî’q~×Lg¤tóĆMŞ_5ő@ý™O=Mý]źK^˜ň2T6ĺťĆŕP7­;4Fß˙ޏLţďŇľŤ×t˛~ý;ňů2SĐĐQ>˙šOÓ>˙G˛nr6*9zä8ýä'?§›7oѕ+×Mţˇh׎­Ü.ČsьsĚQŇ4‹Mô<ŻB?A]KĽźŃ}ĆX7Ěç3<î”ŕÉóÇ?7“-.€Qp™4đLTŸVÜđě2ňwĎqřŽ˝{ˇĐƍ‰Rdđ œůÝ=eéĽ 'Yţć7˙Ĕ˙Śqş?Bî§.fü-,ĎsťvmăöE{°ÚS˘b^ÂXpŮ0łó‹˜”b •;&b˝>îa¨sE&:ŻŔ*°é§fĂÄvü’k'ăš^ç/ˇMŻ=H@ć[a™Ń{,9}îzó˘iÇK-ŹE-iÂÎĂóƒůѰť-căx3ą KšTąĎÖg•ŞôŰ}o'A}ZŸ$cŽăŁ{墖ú) GDzŘ–yÎeŚJóŒÁÖR1ç0pśŇ)°ÂDŕĐǐžă‘<ďxî¤ŔŕŮŢÝ漓‚ćĘů5fňZ(Dq_łI[ŚŞÇĎfiyß'̔dŇŐÝąún`,ź&•TRI%•T>hé䚝ÄŐQ’ž×Vp|k^ʄ­ë…; ą­vyěńnWOMćŤ?D7pv ‰‘MC˜ş–ř7|ŽžĽâŽt-§÷k8ęŢ)ŠťţPQ’‚EÞŻX%ÖŞš–˛vhţYSőúdY’őş_äc °p••ÎĆîŽh¨¸“|ŢoE*Ť;ÜߋÜpÓéŘížá‚,’r/ű‡"ţ“ů% îjXX5Ý0ěp?­éž÷ëü^›Ö$ďqŰá^ôAUńRüú׿Î4ąŘƒjü†ń €źŔËlTˆĂbŕ7B€ŕņcxYă~źôŐЃë&''™­BA ŕƒ°"ZŔHP ¤ C"ň áFNœ8A;věŕ HGŮÔŔta Á=ccbˆSf ‹Ĺę‚ëQvüsX˜(Ęŕ*(ÚuŔ1€!8ż‘Ę ŕ„î\D~(Úݑƒt‘ҕخůh€E€#¨ň‚Nc—á:eĚ@Đ>(ƒÖ ´%ĘŚĽEóŇâůóç9/”uCŮPäŤ 暈G*Ф’J*Š$ĹuŔ¸s,ą@€# €f€…1@ŢópŒ§š'áŘ×ďÉÚVBs…ś§:%Ŕ8Pĺđ"ałlQ4Ý Ţ×ó3fÝ0KůLBŻD˛ďYžîd†ł„ă™"]‰˙ 0`Ge=uÔ;ç\˜ňVÁb2Ľ=9sÎ|ňƉ˜aV‰˜÷ŠÓF–˜ďšw$ęˆruZwÝŕîviĚcŠNaçp …öU,›…ʧŕäÁZ&ĂŔâ]źÜŽ`ڍI+U‡Ł9^ ĎkPčsw™\`„ť’ŒqŻŽ´¤Ň]ŤťiŞXT1SvH ¸¤ÉýIŇGVÔ^~Č;űóEc8ĘĺeG3˜>Ŕđą0ÇNżpLe  y[‡ć ď4śŕ}ŽaĽŚŸĂń/eˆŸżkđ l處ş§€3Üąäĺ4=]Ób<9RŚ­ÍzxĆGťĚóÎPOĽŔŕ„"@ż ŻÂůzîl­“ŘL8”BŐ#ŻE‡ [÷ZkÄńb1G7§fŠ\ľĄqęaç9”ŠÁŽl+p]ˇoßhôŒ~Ş›g×cœč““ľm—ŠBm  „*4¤Gčzř=PLOMӀŃy,“źr9i÷|.4:ŇY:~ü3) <6­Ł={vQ& Ý dśˆFm‘×ňׯ3m:BSF‡[XXägŒÝ]ÝĆYZĽ[7Ż3ŕüâĹ+´lî{íő7hçÎÍ N@ÚĆĚ+ —BŽúúşĚš­ôßúMݚĺđ$'Oœáđ :Ť‡\&Ě5lŰž…ďÉdĽ˙Ł~›6MŇĐî*÷p{ÖęKF6ŃŰŚL[Ě3đjdx”†‡%G!'L=ÖxĚa—€šcSƒ&ĆĆé_üó˙3yű8}ď;?§+7/˜šąnî+ĐđČ8-.˜şźźČ žîÚłw=öčŢHwŠ ĂY’Đ šđŁž’0´ö‹€AfÖĺwž{0ś$MŸőńš™cŤK՘™ÂyoůĄäÁĄ…L†QJQ<t`d(“Ó-Yƒs(gÁĐİLS×&żÉl.'OÍ҉S7čěĽëtkÚ8˛ëŠ™3ýĽŰ\ɔqJć÷Ź€#Šhr{-ѲéS đXŹTę˘B@݇<ˀŔ@ÄŚgYQLYŘłíˆqŒöÇť#ËËÄł„Ě“nGvxÎü­äZŒ—Œ/ÁŁâ˘VƒŠ;źëyůŹkăý_6yL˝|ŽÇ‰zÜűőůş „ĄçeîŁüĐşÉNŚAyßJI2–}K­ť ŔˆHł.ëƒF­Qƒ×Íoź‡ôRfp€Mü>ô„…Ó …˝Čłs=Ţ۞żSIĺN%I¤’J*żhIú[ځ酙ťAa´€`Ço—N§<\ď_¤}ťšĐÍÓý[C}ťiv’vŹş^rĹ:•]™îý˙;{˙f×q‰˘kŸĐ9"g4r$$Á(‰%*X’-[’íqžń{ŽGsď÷<žďóŒ=wĆ~ďűžŻíëžyöŘžžÎ˛%[іd‹˘(1ˆ9 ‰œčFçîÓ'ě[˙Zőď]gŁ‘H€Zgń;ěĆé˝kWŐŽZUľÖżţá>%” ůáěO‚Y& iHCҐŮ+Ü|? ˘âó3ä‰'H2ŠŚ˝3ŰňżÓšEĆPik9ş§˘ăťĄđś”ÓӖ#”ćL)zçJUĺXŚ+Ó0<8GoÇŸŐ=ž§ępř8GnFWętľšg<ČKGkgůaéLň‰łIŮÄŇ!0Š7McyĂĹ´TٍÎяgăw5€ä˘}şRRĘ󂧽§ƒˆÔî4ö”ËĽ€¤ě:ĎváV1 q >ŠYŰÝl}ÚŞuqý ë„wd‘A#Ż53ÔX戚ďí|>a‚h*´ÔrjQUAř{Î;¸P7Ťć œW}úŒt?FMӉ˾˘Ńˆ×r?†=ŮĂB#ĘřďQ‚ĺŇ@fűŃ4ş űE” đ,öw ŽwÎ2Ö/KďŠý4Ç|XŚƒr 0Ęç „bœ)îďĺŞĂVźĽÇŃ‚E%’ËćČňĺsĺćÍK•Ľ˘ťťĹĆDÁ˜3j °Eź#B‡ĽH˜ťăƒbr}ŹNrëă˛sŒż,O>ůŹŹ_ˇ^nżcˇ2 ´ľ7+ľ[ "ÍŃ'+]:Nę~IÇú„e˗/“úÁJ]Š…lnd{7Lš@–“’›îÇOŐ´­­çTÎI“`|´:'qAŝŽOkÎp;ŘďĆô°˛&Ź[ˇFśl^Ż@&°ÍÄľ‚œ8Ţ/'OĐ3ĂƍkäŔÁý˛ióZšëŽÝ˛`á­÷äDIúOČמö w^9)CƒĂňňËŻşkn“… şÝťč’î|›Ťs‹ęŁÇëO¤°8°˙¨Ž=¤jlkoŃ÷ÇńcýîěĘâ”aÂ@(p€ żĎ×%ůÁ÷ĘÖmĺO˙äłîyÔ§Běpçš.9yb@Yp6đŁ˙”ąčŽNĘ÷ďM›Ö8@ÇeĹłNiż˘]ˆ˘Ç܃.ĂX9qü€×Ď`×8"CgG\?śÉşőŤ]]z4EŽÓdĘ`ç;îrţ˝E,਎ÖJZĆČM7o—;ˇËË{öťńô„›ť“rěč!M™‚w¸|Ů"éh3p ď箛>%Fäu‚bą1^œíâ™)Ŕ €ďrĘŘf܋ł6t‡“• Š–čĘ0@Fubú2`hŕ˙b˝ö§˛ÎcÎ-HľĘyfŕĽŃ‰Šě?0(Ď˝tB:.g†FŐ lA`;rşoŹ´Çľé¤4ˇ.“|q­ÓHQš_ĘĽă2<4,e< ét\{ZšZęÔ9ĽŹMnŹţŻŚ`ˇŘ§CŽą&ܕóŻjM×C¤ŔŇuA˙Śx/edŇšQlJ@huĐîöM^Y],ÍEş>…ş%Ô˙\ł9ÇiÄű‹ĚĄždd+Ć*m\M’6 ÚGB]ĚgňݢĚ|d€­lô§î=œîŔÇŢ+Ł9=XR ŁX‹| ŹÖěý&€ šÉ” ĚŰ‚Lhď€d#Jq)pĐHCҐ†4¤!ס„ţ@‚äyf2pAUíë°Ń‡űż‹ů‚p/| ô[„g >ďBuÂý Ĺ>Ď'.E˜÷uüBĎ B° ™ČŮO—ZěAŕOÁž~”°—b‹Bŕó@9ءŕs9@ ‚IĘ&súl‘YĹ`‘Tßo€‹ëlńý‚šÖĺÍź“7űłFşË˝÷­üýZ“‚…ńśŰn“íŰwč‚ Đ0 Ŕ¸H ,čpň‡čF,HXq dž…– ,Z0đâ{lp/ĘÁ†Ď4č€^‹M@ (×ŕ;\MĘxä‘G´>ďyĎ{t3€ ĹęŐŤuEŻžúŞźţúëz/ ƒ/žř˘^‡kp6¨?€0"Ź\šRëëad ˜Ď#ăhîĹﴝ堮č'€PBĐÜč0 úý‚öâ^ô Ću\`6 ŕ^P°rřđá$íúף¨?Џhô KţwI;ĘDŸáů¨ŽA˝”‘ÄŐŰhAǵ짟~Zë¸uëVíŤó!YҐ†4¤!łC.UÇĎVFN”řÜ<蓉 8*°G0pAĽÔěŒ`ÉŤÓ˛jő‹D.䛴ýĹBM÷e ÖŻ{çRď@#¨…ÎÜĐůD°÷}VÇé$ĎTěĘş(+Dŕh#%˛0HȆ:­Ň(+Ś+Á {ĐIˇ˙v}Š=#ŁěyŇöű¨'ޟŽsr* ŽIDléĆ‚š÷Wtý2ˇ§U–-ę– }óe}ß#€ÉÓĹSÄřß%Š'ƒîŹĐ㞠Ć5:űr>ÚşCŮ÷ž|ňyú™d߁ƒrË-;eËć Ň?= -­ÍŇT—ńŃqe6×÷ŠFšć‚Í៼íĄhdśŚîŃ!ç—(aGIˇšdŽüń}VÇôŽo-[ךůgQö-­íŇTh5'źëÔ_ř7?'}çqů˙ý˙ĂÝWsNé6™?wž:GG'Üw‡dppH`Tœ–Ÿţٟtgœ•ŇÝÓĄL čS ­ćć6™3ŻC–,ýIů˙ćoÉŢW÷ËdiRžý‡dÍęîŹwƒŒŒšłŐЄžc†‡‡Üm\Ţýžťä‡>>GvíÚŠý 0X;^}ő59ÓZ&ƇĺŃGž’C‡ško“+şţëpýÚŠ 00œ8~PŽ9ćŃwÖk‘!WĆÚ5keeß5#"L#{÷žŽĺăúGy̕{XvîÜ&˝sşÝYČ҃€™˘4U–áܸ‚-ŕ$&{ŒĺšĆšĺ´>xL8,Ť×Ź”ů ćJOo‡žHŠd 6œqz{{\ßÇę°Ö gÓŠ’ÍŐGz^ÖŽ_)7ő9'yQnŢľÍ}śŻ9NƇâÎcLN#ůŁĚzRSw­)3 •ČëđfŐKĽi7>+ÓIt #üô~üçő("’ęzÎŚÁDőŮ” )QĘ A‚ŁäĆ؉“#ňňž˛gďq™”)Ÿ˘kJžĐ"Mă5ŤIŔœűј{ďĎ ŇˇľmpďvƒäšVHąíiË){RçhZ*e™\5ŻóĹęj(€Čłťä•ÉýˍgsÜ;§†O‡Ef(˛žŹˆąç 刲\ÄÖŻ… ‘p­ĆšEUᘌ3 Á…!`‚ď2‰4uĎ !íóô~:>”cÚNč\œĹÇ'Ć4ľ-ô™>%X첹• žľ„Ą"ʧŽWŸéĘôŒ{7ŽăöŽ­MX“0ޚޠ?Q?6CĘíp %Žd×Á‹EÍ6¤! iHCr=™CFC| 49"Xť ČJvÝ SPPżĺR„{”C@xxœi­ÎJČřŔ4sřZ.öěd”œ˙Ł:Ŕţů€ u`ßŔ~`Á š¤ž^NBćô ěbśŠpĎL_./V‡ëIfuАŘ"•ˇjŒ=ßá᭖qĽĺJ<ăJśőJÁŻVß]évĄg^ Ýw9ĎťRmťĐ|żç? `Ÿ¸ńƲté2(ŘÁ[ÔůŁ`€!š)8đ;A `:Ŕľ0lăZâ \ ʅ!ĚXĐu‰űȌÁ?Pl<Ŕ.Ô ˗/wőźQÁ Řd€Ŕ(ƒĎÂżq/€L ‚ç8şa#ˆďQ6ꆶ=ËÍú ¨Ö[nšEúúúfUN˛†4¤! iČĚr)t^7…uČL3nT=ř€yË%I ižú˛:CŁ(ŰO‘FĘóEÍ;ý}ŢOu”Ä ŢČůT´5›ó+{G˝E.ë~i0ň‘Fh#Ľ€¨œ¸mZŽ…Ďç ‰CŽ;K—cÍ´sJ„QÖĚ_oŃžŒ˘­%sîG ۆ9}bm/SI””ÂœĹ‘iXúœ¨č@7܊Q˛P€żk¤r.ňNE‹´ľ4Ţů–/xŁ’ľÍö.ˆlśýܤs`1âť­­]Az‰-Ÿź:œ3QY,Ź.š|ĘPśĎDo*{÷ćÜÍů§ů_łTědđ +A 4”éűĐýv>i „Ď SŠ0r*ŒşÎ:šX×4z;—äłmv™J.Y¤iNjÉŘŻËU똚ĆÂőSKÎmŇڜ—EóťeՊ^Ů´n‘*Ú[›Ô‹ö¨łĚůj’÷i3LźŁ:Ń7ć ˆ˘šŮ¨t:ҘöÍűż+g†4âŋtŒqďŠö ]S#]ÇţýG´ž}öéq{râ÷ĺRYç×ţýűdűömrĂ [% ?Wż‘"ŤńNFÇ&Üü+ę¸EZ8wuűń\)×ôŃÜÖ,Ż<ťWNŁÇOČÍť"čTJ-vç—ö.)MMČŻÔ/˜ż ęq} v…ÎŽNYą|™žN¸űϜ9­Š7zCnťmˇŚijĘ+ăÎ ˆňŤ€C?ţ/~LgN`śşsË—htB8ěę7ŹĚ K—-–žU˕9Ąš%ççXMćš÷|ׂ[eÓŚ ňĹ/~E{ěiŮżŻäβsçY¸`ž;›,ră⬌8GňŔ™!÷qăŹŘ*7ÝźKŢőî[eý†Uî8_ČB€EKkŻĚ_°[6n\/_řâĺąGŸ’×_ŰŻŕ‘-[7ĘňeK]ýMĂŇŃó Î\ ÎS Dkk‹ę´S'űhqäčyíľ×ő ŠM›×ÉÜ9îěçŽkiiuó MY0ĘsuĹ=p~#ÝÇ´Ó3+úĘĄÇdăŚ6f‹Y‡q$!đ';NRĄŽ‹ëfHk˘ă:{ݛ“”ŐhTŞľiMA–…pžŘIęXT¨ Ăł¤–ŕ@˘dŽ)ţŔýĄR­)ŕd|rZJn|ž:=&űČË{ݸWv¤ˆŠjn݈đ1–#˜§UĂL`ƒé°‚1KČłNďžrspľ4őŢčÚ3ęÚqŇ]?Şs펣&ŸF)‘bĎFbóżZĽƒ?śÔ>běĘxY:Ö­œąĹ5>đéEđ]‘ˆHŇÔ5ˇžÄ‘0˝ ňÔŤtZ„ď‹B°Ďăœűa*1~¨Ké1]š—ŽNgioMX#pĆf*"0Śäƒ4!!5ś‚7Šyß7ޝY]E˝MĆ ‚ňȜD0ŁnC[aśĚ°/Â\č!#ƒĐyQîâůçҐ†4¤! šÖ…LW$HSaŔśžŘAä|MŮó÷RžOfúý \ÉZq!™éĚ_~jĘź€ŃúBB`?8GâlÉÔg—*!űϡd5ż`÷Ä(uŔď8űĄ-šËŘ{p˙‚˝?ʂo†Ě˜łEfOŠůţQ\Ž\i‡X&ËÍО×\Ny—{ţ퐙úä|×˝rľX!ŢĘ{Ť×]îľď”`qźůć›ĺŽťî҅…(JŁyŠu!s‚ZľMX˜ąIŔő`aĆŔ@áŔǢGT#)1ń,”C=ŽC9/ l pЧöîÝ+/źđ‚ŹZľJ>üáëf‚ (`8Ŕ&ĎÄď`›Ŕb 0 ­X@äx饗Ô0‰EőĹ˝¨űŇĽKuŁD`ځză{”‹>Ŕueä +™‚Óu ^0ě1•ꂶ„m#°ƒ› ܋ž´H,Łe=đ üÁ5ÜDq‚,!¨ž…ňœ`ßLAýˆ÷†>ÂOzđލRź¨iaöďßď Š›dÝşuÉóđ÷ ĂICҐ†Ěj™­ŕ‰K•Ё űƒTď9Ošm×C˙mń‘˛‘wŚ3ęâň-úďČđLp¤ʐ„ą9XÂ+?uŇăޒF\—4-‰ĺœ Y˝JtŘ@ŔFę1ÇoŐłNŔ!L† ś?ëäQB.ď >˘Ů9ŹăięĺďœÉ-Diş“¸VKÎĆĆć18ˇ@ż%Š(źłŃ@,Ě1oŠB¤°ďjœQÍ8ŁDS€Ńb||L÷nűŞ4ţćŔăłĹGÄž˙{Gg}jţ´ö[_XߗęX#Ěq\L>aD4xq: )ßS'n6z˜-:řÂw4SŠ€”>Ă^—ŠJĐ7Ř/f S!¸Ďx`NO‡ôşĎÜŢ6Yş°[Öô͕UË{ĽÓ9 mŔĄœeЈb!sţŠ._DŚG5ˇgŃ;ÚŰ[œs}X-6f5K×c´źŘcúĆžƒ żăö›dيŚę˘CŮJbˇŻ”Qˇ^ąr…?qRÓlLŒˇťýűY7? ęXĐOGš’… (Ŕ %cŚ™Y˙…OěôMÉ9ĺżňŐoÉÚŐKdÍÚ5Ľ˛›+MZfŔ&`Ś[˛X>ňŃűäŕĄCrěČIç̡Ô7­–Žn0Š´ť1ÚŽěHçŃßFî}ßťĺŽ;o“ľkű¤łŁMšš›tÜ,XÔ+ËW,‘ÇĘľkPŽ=%ßyđQ9~ě„ěܵݝćÉÔ¤gťqăó´+ €…üc ĂßśmŰeóƍîü0*O?ýŹź˛ç‰öä\ż-wg‰a™7żWć͛ëĆF›!ŠMTÝςťw‹<ůäsîÜpBJÓrŞ˙„îžŐšŃÝÝăŢ[Ń=sČľ­Gә|ű‡eđě€ÜtÓŽM:78îĘĺŠ2oÜtóNŮťgżŚů@9gG]9§erj\çďŞU+•™ďFôGnÎ\ż÷­Z!˙bُČćÍäK_üšœ8qFţΓ2ŕĆÄMťvČÜšsÜŐcŞ#jĐďb̝š0>-žëćH§ěşis˘ż/$ţ{ƚ€+@…h:’rŀPľŞé8˛D‘H˜V*´o)ƒE˛VÔ˙Ć^y0X&&Śő3:ćĆÄŕ˜>yVrżĂhoL ڋ řPŒš”ľĹ"=FAđŐ*p‘să˛(m8k›T4}ŔfŻ9ýß뮙ďţśĘőő¤Ô˘)ä'Üź˜–j<­ëX›*b验}"gPÉamq}‡T ř.ŻéˆrĘƁú˘&TRA&Ë;’€đ”„ D˜KÔĽÔKaD$:“:<ĚľšŢOlëgNçt.Îü8{3uˆŚĐ“×`žŠ8ś%eĄˆ°H=h'ƒaîr֙ ?KŻÓœŚ óěLŒh­ß礹!˜‚×q= ‘!Jvđ†4¤! iČŹ™€Œ<ÓYęďP?“đÎóÖ`HČxĄűy-×Xřx-žĎ–“-“g˛PÆŔó)——*w´=@Č"îŘöĐÉ=IxVĹďđEd÷2Ą°ţŽg(ĘgłŒ°.3íŮod­ Ÿ÷g÷AםĚ€œy8¸â%%/r–*/Ői˙vJ¨œŽä? ⸔뮆ĚTţĽžƒě˝×Ňť{;@ ď4ŘâZÖťłŁCSdlŰśMY°¸€!Î{DW*mŞÓgř C‹i†É6cĎŁGę}DV˘l°1Ŕ3hXŔçá~~O€űöíÓşl ¤°ŕ‹4€`ˇČŔrşćF\ÓÔdTݨ Ŕ°ëq/S‰0˘ĺ3D9˘pڍöá{´ ýƒďđAýŃ~6đAŕŚ!¨„uĹ5(püĎC? ßŃĚY˘Néda„)ógƒ‰}ŔgĄž¸őÂżq?™4Đ6Lp/ę PRŹŕôŔDvňY ĂICҐ†|Hý÷l—ŹaĹ~ÂĄRSÇ0SXŃ 8zíŒTKœçöw‹ŢW€JŠů|čpf×*Éľd{hrŤź[wó |â„rżˇ8§,ĆZ Škys3>­Î• ő`‘ĐĄ Š3žđđńßd €˙‰Q&¸˝RfŠ”ÔPGY"đď(ygĄ’Ř'Ί`Ńš•:ú˘Z>y€)°/Ĺ5!#Y$ŹŽy!ö9¨Ô:כ[ ř[Š3ÜT‚ž "žƒ>#ŕĎVĂ /|ۛšš“”YCPýËm‚q˘(=KóY4Ľ÷ÔGídß!ŸÉďC§XÉL{x4Žaż˝"ÁľŘâŢÎÎéél–ŢŽ&™7ˇ[–:§óĘŽҡŹWzť[­íĎyžOî cuÎ2”ˆw8Şă2!Ź0’ŠŚ&˜–ű˙é S;vŽ—%Kç%烸RJŘ۰_]ś|™<ű܋ş—}řáÇä–Ýťdţü^}ˆrGŘë._žŘľ{‡ŰĎöť=§tvľK;›=ÝŇíĘ)jäx›ßóRGldó’ý™ô­Xš(’:gěčبźňʡwŢ+ۡŸq{đ9 J˜3§×ŐˇSÁ­-Mn=ŠŠ}Žäóž$ƒgĺěŮ9Rň@ŤÎŃ3Ďɓ§ĺŘąrűíťÝťhQ–™réYŚ4 NłkkkÇ=÷źK™(ţ?żůM›ĄNOWÇľkWyƔV÷Ěieijx`žÜy×-îţ˘ä´=; t~OŒO*Ódzϟ ű÷”wŢ kÖŽ”9sçčł:\˙ĂÁ~ňdżŚ)A_cœŹXž\ÖŹZ%ŰśoQ–3şÚťV°Boť|ďÉç䕗_—ÁÇeŕ̰Ź_żĘ˝ă%ŽÎíű‰ń 8#Sn<îşiťôő­ĐT>==]îüÓŻg°•t…nWĐtˆJEbßň4ćPU6n^#÷MŢ+Ÿ˙ÜWÜýrěh§,Y|BËĎňzV˘Q` ¤›ij^¤Lř{.˛÷<“a}&™i]Ě)#CAuK$Śç`(WË^ď”tGokÓU„ç­pţÇ~ šŢ3Ŕëa  ť@ˆÓƒrfp\††§äĚŔ˜;9"'úGdpd\Ápj¤3‚?\UńCˇWdʧśˆ Œ/ŠTw¤%oě7Ee–((…Ó˜ ‚Ŕœ60t?‡\ş%uş>čv×̓J<ęîrUŸ”BTÖűU?úu"™q¤ GLx.oŕoŇ:WĄCj–ޤ3ö‰œďC’ĺhŸˆ1×ÄŞŁrIŽO čú ÂwFX†Nö}˜"#-ÓëčŘłš5,ÎY™˜Çfą@‰ÉŠ ÷Ÿ´EXŮľD'QŻ3@Ăč­ËI}É\dúÜě3`m ӑ…u%Í7×2o„ ?Žíđ÷ź΃dœ6l iHCҐY$á~vuěEÎŹŔ‹éÝp~ÁÚ~> “Y`„ą1śéď('\ĎgŞ#ďešLMŽďq–Âţ’]×yX˙MśÜKE˜’ă| ĚpŻÁýŮĂôćaY@{XĎŹ¨ëÁ÷hYŚ­đ~‚Jp Ú”îa9łEf Ŕ⎝îTş÷7ŢxĂ;ăt“É íՒwĘéu-‚, łąŻĎ'oö\ŻŽŇěp9÷]ę=ëÍ8(SäRÁrMú Űƍ5EÜŢ^=ŘÀaNP3’”¸ źĺ86:(8ĺąHaq˘A```@A -O^‡űń7°198S|0')ްŕľ×^ÓrślْƒŚŕóP)6ÁČŔ<ÓÁ|âŘX0j\öŁ $,Ŕ5Ô ”Č6܃{ 4Áýř ŽN Îx^h´F˝p/Ářר‚ëP.úĎ$+QĄDzŕŕDH󉺢­xó|ŁŻČ`{đń´uăťC9L[ć ęśsçNe a´ ӎ\íuŹ! iHCríHvoůýʰCžQC,ú7uäՁœ20ŔńĄÎf| ŁÉŽ 4áŒP†c°ŒTĘSŽtŽ˘wTYúHB„+'ŽÖQ—§ŃŁpČÁ’óŒ Sşć#Şž­ľÓƒČ 'NC-ÂTFşŇɇŻřöeL4BĐxb@Ô Är a‘Űöܚg鈝SŹęŰď)ÍăH˘ ąXŞń”Zň^X_3ŚĐcŕŚţ`=ą‡íěěRöL łˇžZ`ˆ)řzŰýTŤy …Ÿ¤]06°fuć3/Ď`i”qŽŽ1$39?žŇč'ŽąĐP…=ď ŞŹohđ ű‚ß1'46%`‘8R‡DşÄźł­ óć´ĘŞ•+¤ˇťYz{ťeáÜ6Y4ŻMćÎ1ö:ž$mńă!â˜2ŕ„}ü݋9Ťę˜EšŽ¤°  Íxăőrâř)ٰiĽ,[žXćϛ‹—ęŁď'tĎ;§§S&'Kú˜Ął#5_(jšš2§Ľ(}Ť–Ęî[wHwW§‚Ć‹~LärQ¸ÁHń°ÎqÍŇÓ /ÎŘżSÔšěÁÜčëv÷ˇ›vm“oüÓňč#ĘęŐ+ܙe“OA9ŕúš­ęÎ.§äř‰ăz߇~ŕýú./Y$k×­vç‘9ÎÁß,SH1㜭ű÷U Â#?ćöĺ'\™+•Ţ­­ŮBÝ-:—vŔő;wn“^xIűŔhJ††F4E ˜0:ť:¤ŻošŚń<Ó/-­E›ŕźs÷lظZ ˜ ÷ß˙ ›'%yę{Ď)łČźá휙ĐîĄáQ9vü„=úY˝ŞĎOZ –źś8éM¤6ŮškŤĚsí;tč°?vJžyzĘŐű¸ŚzÄřxĺÖŢŢ)+űúdž;Ë`N‚uä7ČłĎ>/{_}ݍ“Ę xĂś-˛bĹeœ€n)š4ĽĘÄř°'cŽ‘şqŽŚ$yę{ĎȜš* ~˘>xí'H9bě"{Ń ŔtI:÷„s0—ďtwN+KŇUÄľź˛3Laě=Š¨ó -$ÎÉP$ŽLűŠâßfŽžƒşŞI šŁA˜ q9|rDNŒÉÁŁCrôİŒŽMédÚ2r}ćŒË…VˇFŐ´[€I¤ ݧĚNOTŞ^Ńóy‹öWą cĆląOßdŕ@Ż÷ÝĘů5GÁ„Xť"ü}ŔŐíŒë7/ňÝî:°œ,wí˜re€q?Ś*ésѰDű• —HÖV6!â\U_'ŐW¨Ĺ^SvŽŞ ńÇ|ĆAA0E–"űţy^'R—*ÔšöžŞÉĎ:€¤¤Š^˘@ĘźłĹĚ1€…2Á‡ݰ+0ę•ѰüÉ4Zů|ÎŰQZ°œ­ŃĆ.•Žq)+†ĽqJáz‚řÂu(dU‘` ňoQˆTkHCҐ†4ä:žťB€"VQڧ:!4ʘ—&Vđ„‚•ęÁ ´@dąűoşT ˘Œíďő›Ś#€X@§ź:ŽŞVśŚ‹GjˆŚźXˆ7ŕԌ#2>H‰ľrҜ4pähtGÄçXÝůBgPľJ& cçđ*ρGT+eÉŚ‘`›\›N-ušWj‹EĹ Ä;3 ĆŕĄNŻŞČŁnŻIň`߼@ŒsčXZ–Ŕš™+(u<,LŮÂ÷Ç<÷śœ’Ňô¤ćźCšĄé”™"e€ě!¸ĆQ)hCAâ+-œ{ö“{Y›ƒqŕgŞÖEٰŸĂ9QO§šž+Α,+HŘFÎk3$Uýř°úń>´ÎŃÎöfYš´G?‹ćuKŻsŘĎëmӔ]V:á" :~‰­Č0T¤‹z‡0žýŇKŻkú€ž•‹%_E$ż9mpá>’k“-7Ź‘'ż÷¸ ‘S§O9'úٸq˝ĆĹcLĄF`PCCŃ9$—,îÓ1>4 @w‡´ľ]ĘĄ bwmާĄażÖéěq˖ŽőÁűŽş÷vřČQůǸßí÷WȆŤÜ\˛‰ ˜ŢŃŢĺ~GŢŕVŮvĂŮłçuyńŗľß[[Űő9Í-püáîug­ˇ‡•‰ÉyĎťďtĺ.Óşa~7ésASŰ)7Ý|Ł‚­}´CžűčnżîŒ¸#:O/Y¨çś‘‘i”áŃaŐďťď=˛ëŚšjdĂú5ŇÚÖ"#Ă#:ćąoßłçU8<°\.ě•-›×KšťěꇳR –|´ÎÝűÄOĘŃ#'ô…v._ś\ş{ş´?QŘ/ ůH†‡Fԁ´ `‰čwí۰aľĚ×ŤsŠšŠMç̀;O‚cĂĆ5rňÔ ;-_śRĎd˝˝= ţhooŐ~*jŮƘƒaÔŢś@ťs @˙ôOߔÇRž~zJ&'&ÝßwůÔ*MĘfpö숞SpvE9­-Írűm;eóŚ5˛bĹ wžtçŸfKaÁÔé''ihExƉź:ďç2ŮY 4Ś:Ů3é ÷úŠ˘úd Aöń닏ŁČ~_ăÜÁˆ‰-ÝE˘#tĽéA왑L•Ş28T’“§GĺD˙°;ÓMI˙ig<5ęƇążDŞĎLďŘWCŞZ5Ń}媭ÓîŠNşąˆ÷ŃҖ¤ł$‡**ĺd­S#Ś›MŰD>ݕF$6–&ľ}jÚ,÷î”ÔŁîž÷ç.‰ KÝĎQwíˆëŻA÷ţ+Ć#ŽßŤP-č{čfĺŚĐgš^:T%ÉŮßŃ6˝/&;CjjŽxpDÂnŐ§b˘ŢeŰŃn€N H’óëAý>ŚL€ľâ8H)*Ÿ3& {VU×{ŹÓdŞů÷biœFô>Ě{1וȳٴhŞ.0‘ą“ë9Ŕ‚ţUÔ­Ýś—ąľ7˜™°ýÉű ŘTB†‘z@EĂ6А†4¤! ™žˇLRv‰ô h@pŹ÷Ć ×”0,@čGČŽ™YA œŹŐ%ńAY› ×äPA–6^fá™1\×C@Ę 6>!ÓĂLv$ţd …0 3´CE3€;˛ŔŚNÇO´ŸĐ~qą2ř;Ťx>ŢK,öÉl’Y°€“ ŸnO“ˆƒ%œˆČ}‰üš##ŁŠÁ-ó2/´Iĺ ;Že§úLuťZńK1@ż™rާƒĂĽăŻy+}ţVĂâĺƒqbšCébďšu„^şéŚ›4ýôˆRŞ”Kšƒ, !K`4 éřžé( ßĘŢ0Iv °V`1Ƃ ĐvÜcĆŻ1 -Q¸×ĂÁÖ ”‡ú€eƒ9zą¸0A ř7ŔČŔh3%đo5P^Ř6<÷ l<›9¸V€°\2Hđţ ŕ@Œěâ⍶-^ź8a `Ú2b=‰ű˜•”ařŔ€BĐ´őG]ї¤˛bŰp/ĘA˝Pś ő`ۘ.„)H¸.‘ş e?óĚ3zýŽ]ť´Mč[|OŚ\‹r”†4¤! y{äRő-AwĽRé%YŕÃrö`z>šÜó×ÙŔ,Fi2ĹÂĽěăŻÖţ648¤ÎęúžD4˛ĺéXIÓFĐ9ođ4żť•kŽËš–jĆd‡G. ŇDŠ‘}F€ˆgÓ¨ůHUî6ŠššZ”"\ď vqœDŸÖ4őG!Š‹•™Oô(—śŃÚĹqQłČaÔľg6 L‘ŚŰHö̉ĂŃ ŞX‰ňyu.łŕŒ%}>™),IžîÝë‡x`-ŕ˝Ř{ÍŤ3 ˘ M§R‘Š\^ŮIN,°0:—LŒđ%˜ÔéßSV Žó0G}ęÔOßU}žŢ”u‚ď$œ—`ňËćťç˜˛wW Ć&˲0ŠzěKW,é– }‹ÜŢťSzşZdnO›~Ú[›ě Ŕ¨ĚëCďŽóo*’™)ţŇśđÝU+śo<|äˆ|ű'Ýžş]÷ś}Ť–蝀sÜľÂ9ßą˙Ÿ–…ÎŢÚ^”ŁGIĹ9üť{:ÜţvŽ:ó9ŢK%‹§eëÖM|TG[‡gSPv’Śb‹+óflܰmŁ,ZźĐ˝Ż&Ď{6ŸŽČ†‘˛ŕŒÚëžwÇíˇČ wzéĺ×5őî_čž@ć-ÎmůB¤}ŇŢÖ˘m[şx‚-8O٤`{fú$:)Ž şˆݢ:$ň Žź- ?”ís>™ŸSŠŽăŒ‰Łş9Ĺé˘j0ŞwÄ×ü5~- ßg‡Fĺ؉a9rbDŽ÷ĘŕДŒšy4>QrăÓé<§OáÄϑÉ!gŹH<›3bU#ž˛ň¤@¤™Œđ9ßQ]{"Ÿ~Ăë_Źq^ŸŤĺšąĺj ĐBۤ:zÂ]:ćţ1čúpž+Ýőó‹Ý÷˝îťłîť!WfšY”U†şę ˘?NYŽŹkcr˘˘1@ďćę\;‚˝ţFşę0EF-ö M'zW‰˜˛ś˘(unDY—çđÔ؟‚řŕ„ŚÎ‚ţŠô„ô>f7(%ëX™:::ĽUSäŕKŹďřžkŻąm{ˇ´SŤß‹…`“ŞŃBIB ۝݆NšŤbějHCҐ†4äm”,"] ˛(×,C‰ĐO”œég(ŸLüwÖîŔßyMÝy:¸'›ö,ü𺰞3]Ç2X&?a@= Tęú‡§Ď%üŸ›ľÍÔ×iZÎjҟ3włĺdŸE;A+Ůz„mi,ŽQ!]=œ—p¨ÁYľtéRulmذAśoߎŽą}űöŤ#ąßF'4Ҩž…4  03MÔkMŢN‡˙•zÖlp$fëײ\Źżß °ĹĽßwu@WR`0źá†ԁ°ŔpŘC`ź Y NŔwp´cą‡Nƒă@8h˜Î4ŚÝ(€¨EíÔ¸ć™HMŒú@w‘•ŠEŔZ:ěŘąC¸,Đw|Œ€iŔń݊ď¸ř˘~˛qźăůJë 1hA"(› ô ˜`üEß0] Œ-(mkŔ#h/ú:ţđáògĎyńĹľ<´ěxúŒ}AÖÔ`Ô˙F]Y?\‹6`}Ŕőxž#¸őĂ3šqÂýFŤŰœ°q A` ް? xA›pęˆk^~ůe퇻ďž;I ‚˛QžÇ 6(¤ÓjHCҐ†\] Ďç~B/c=âÚ,Ă}_x0eF¤yžgŢ?‡˙ži/™}:…ł÷††xŽ/X簎aMŁC5{żÚ{ól˝°š‹<ˆżŔ9Ž“wš´—!+SXä4D>WÔ(\‘¸Î0ŁLą9ˆňů(pŚ;c„+;Yš^v‹r­¤Ž0cUHiĎłu6§JŃ9‹J™OĘq݇4ˇžłWĽ‘gĘÔQu.ű Ţ Ó…TŤ)CB8kŕ€3çc5qVŐą2DHˇQ¤QŇn} G|a•T"'ˇ[J{fJĹjN´jŕ(*ú~/kš•Ę”^Ł´÷Ž~­-mƊ Œcs”Ń‚yíSPY<˜ö#5†ÁÁjF§|0z uÁ˙Ű`ěł´_mœÓgŃäŐşńć´ĺľÜ—ąýœkôv5ɢ…seýĘ%˛aM‡Ś\kEw'€ť`  ŠŢî`éÂżŐłR\`ćˆ%-ť_™VjňđÏĘ#<ęúšĹíŻ›xTSV,]şĐ9öAŻuzzŹ,÷Ü}˛-<˙ÜsrĆíO‡Üž<—ł´† ĚwűŮ^eźčë[*ËWŹÎśVßĎš¤OĎ'ě3°-ě}ý€lÚ°VőÓ2ŸŚqŽú;ďźÝýmJřÖŁnŤ^C]çĚ鑩ɊLN؞řŘѓşˇ_ż~­űŹQÖ 8ţťşÚőw8ؗ.Y(‹]ýç/\$_řâ—äůçąď”ţSý ˛hďDneW÷úiHŽ=Ź‘ëwÝuťÚ‹Ţ˙ţ{\›—)ăŔƒnßţšěßwDÚÚŰd؝ÓnşéŮşu‹Žgč8Ł{{ćH“;k̝;ĄőúŰżý‚_Ă:nçĚéŇţZšrš;´HWw‡‚P–ΏÖ÷žNÉ÷ž÷=šăŽŰ•˝ÂŇŞôý 3ţ\wŽÜ,ßyđ!w:Ścő×‹ŇÖÚŹ)9Z›--"@ǎŸ”ƒ[$ž›ó‹—ÎUpĆŘبę@p8=Ô vŸfu`ŰšŽŚ@0—ŕŮë7Ź—={xră¸MzÝť€NÄÜU° Ň$ĐLD}\¨8˙NÁe6ŒĽ`0)XĽ:Äő/˜ L ľ†O!ĺ9â ßD  ‰fœBľ8’@fe$k…:ňíw=w•×Ęѓξ8:ál‡TL•ĘI %Ţ´öX âX)0ž-*ŇŔ_x8ríŻOmqŽaŸŸpŻî)T?AWçŒÝ`A°y@ף†ťđé´´€Şö­{óîÝťy ,jľf÷Ý~fSP?†é?˛ďŸŕžĐÄň¸V%ăčˇ;6¤! iHCrŠ‚L˘ä<ˆ=Öi…†ŕÔ,k×Wî5čĂ ťmô\§SÖĂúş„`îcpŢçžţ†0ýdxö¤„ ™łQě÷ОéH€3>7 Ǥ÷okz>Ď–í“°_Âzđ|Ë˝+4PN68ˆő Ë`}\Áž ĎG]B&ްœ°MłEf ŔâčŃŁúrxX‡“T&xŃH#ŇŢúÄČž÷)آ\!RťvÎ QFaNŐps{­ËŰYĎŹöZěŸđt1Łń•Œ\Šţ¸ÚĆnĘůœ WűŢK|‚\ÜřřÎ ;wîtô÷(âĉ“ œčűÂyJ{ #˜ŕpÇőSp68űĄżŕŹç˘‰kŠ "‹˘ˆ˜3eĄč<čC b°źe‘.tX<żńočÂ÷Žw˝KŮ-p?i” E¸˜3 ?nRpž€ Ź+îÁ3PWôę ŕܜ Ý_nú{ŽćŽişe˖ŠÎësąĽ)E §85-Y!Đ7hęÁzâÔ Ďƒ nh¸‰iƐ†˙ĆóQW܋˛™ŽC{ŃGP‡pă…kŃ>ÔuÇŚăŽ;îĺ˗ëťŔó°fĄ¨ŽĂ}Lr=Ź5 iHC2[d&Ŕ×+Ű!ĄC|Ś=_xž# ďŠŰ/÷L:•ń;Ö |BÇKXŸ,`"['F N\˙˛`᫹ž=ĆnÖK&•isŚ¨á˘ Ôܚň"b4oN@ćůĄÓ.gNm8Ă+Ţů0B\•4ÝëPSGY^˙^SGaÁ•o‘ʍWUË Áf¨IŠîážĎ7Ik‹E€+Ľž:N[=S…˝“šťĚľx:u˘řvÁV Ů3'm4™sőŠ%@Ś#Šúˆ[sćÁoĺÖô~cȉaRŁRK…băŔŔ80{f%@ŔyY‹cJGK—:íţš{'C“SczŸť˘§aźSP__>$óH–̓éBPWŽ˙ĐČfóŻfîŢ1kçüźw–Š:žuƒNXFă„,}>żˇMÖ÷͑uk–ČŞĺ=ŇŐѢă˛Ý9ŰœÓ:4HŮřŽƒá竏H7mĎÉĽ,ŘV׾k׺=ç°<üČó2 ÇTS‡sSK^ĆĆ[˝#ܘUŚŚ°čŤ ŸüÔËÄř˜˛3DšXŮ%ÚÚ[=řŠĆ9wž)4ă#>Ç1ČwŔńŃĎáuż˝ô­ˇŢ˘éu,8GtÁ•ßéš­Q“3NŽÉšŐŤäÁo?!§NÖgvuu¨“ŕ%źc8ŹFäŕ#˛yË:ٲu˝ŰK/ußăœ3ćœÇݚ–"vVŽK{ĺćÂf9zü|ýď×{Ő­ďĘpädţŹ{÷oč} ÍŐrśmߪýŘÓÝĄlhóŠ eőę>ůęWţIžţE:; ƒŽ=§űĎĘöí7¸ţ”ę<7‡s-îěÔ/Ǐ•3Cőő{ďý!ׯŰ]™ÝN?´Hsk“ŽÝžžY°pŽŹZ˝ZţâĎ?+oźž_Κs‘S˛mŰVTX Ć.Ç\šgäŽŰo—Ňԃ2o~ŻÜwß=˛~Ă*wžěPć¤.ŘbѢĹňĺ/˙Łźŕę{útżÖńä‰3Žž[ĽĽ­Yӎ€•bşT‘ŇĸLš5 #îwŚ2+ČÍ7ß(;oܥ㤧ˇËÝS €mLgIŐˆl<˜Ýć#NjéhKoŤž)š äןąyJő@QŠŐ8ŃUŚoĹŔ3€9Ěéok SfäâÔ°].;=ŐĘC9rtHž}ń˜źş˙¤”ŚË2ĺúé?Jܗ‚ž"íťÄŔíó|Óčˆą=>,ú”GIú‹ZČxeŸpmIőU5ŮkhĎŇHΙŻëĽÓżąÓŻyWż¸"1+’őÍő-Ŕj`Čđŕ‘ô4ˆ4"q݄ű9î´ @ó%WXé:mŠL—ű]YýRŒŒéÇŘ"jú`eÉpăAßßMÍ ó Ŕ@<ËؐB kÍ űœş} ú,_LöŽńĎŁşýÁ–a”'rĄą^÷ #E0ĆŠ§p Ů#CG†˙Zp=ÉřĘŚĂwz˛­­˝ÎąĂw‚ő½Bř‚$xžąŒ˝™}Ž×0E Ëя4¤! iHC2;„ë×GcNSRr@âLv”ĐÂĄí%´ƒ„’-+{}¸÷ Í?ŹkĚJřLŢĂ}öŔŮz„e†í Ů&pćdYŹËůÚÂűCŔkzÎOËͲ|đĚ^ÁOř7ř<>Ÿďč|6.žťŮ"ł`‘Óƒň\Ý0Ă9GœŠp°áĽ’"N/‚/nżýVĽô{ń…塇’SΥŁnŕ!đá$žžä´×Úd™ÉtŠ×CŽŕâJ8JŻPă­žŻˇű}_mŁ˙ĽJöĐ †0Wŕŕ=>>Ą‘Dp°#§í…ó*i˛$ȇ=™Â ‰0˙ţ=†r óŔȀý8 L”`řLM>8ďađ{đÁő0ü@_ҘŔÜcÜ<ŕ;”C`Ŕi„ŕƒgă:€& ci<Âý08áy@đÎPGŢq-ĘÂż 1 Ô ôSˆŕ'ŽăóBÁý¸ĎĐm{ĺ•W`Ú5kô''ČʁżĂ؋2QÚ@ úׅĘőýçĄż¸ń`ď u eÜ(đy`<ňČ#šćL!ćpÉËącDŽŠX˜"íĺ;&ŔcčԍҐ†4¤! šú2¸B #¸˛g’™œ8\ń=֖ËÝӅ׫ŁÚł%đN@x ĎÖ)ü;ë-ž#Đđ|}p5`ŁâN adf€Ł­ÍÉůĚéĆJÁčؤ­9%(W6…ôúš~§N o@Ń=H”:Ŕ§ËĽÄ¸`}TQţőHŻ)x‡Uj ŘÁę[őë?Ö}ˇOh**[„:qڧ5ÚN6+QA•Óĺi-+Écű¨V=szV ‘$Ç;ëö€IŃIčŘL™ŕ‚Cú í 8ÜŞ¤‘ŻyÖ Ű[2ÍGľ\Q0ŚqŔځý÷ƒ"tPůÔu4HE íD:˘Ü €Q "ĹÁ˛Ńâöd °W ö?š\ł:|™FOĎôů:G*ĆKEA3)Ă$ŒôĽŠ{6kOzĆ"<÷sߊČýđźŕ ĘĹózzşäž;ÖČŽíËdţźN76íoĹ|˝˛şŐ’şK’˘ŔƒhÔi‰wh@cJC´9sŢPĹsAŃ™łšnľ(Ö{ćÎŁ †ĺŤɗţîQ9sjXňŽ˙ÎôŸ•ÎŽ’=+ŞAϡˇ]*ťvmS0…î‘^Š$pœ‹9Rƒ1FĂôôöË! „ŹřŔQ F„cǎËŘȘűyBvîÜ!˖-5çő”;ëä[äô™}rřđ3wŢy“<˙üŮźe˝źëŽŰdé2IONN¸=÷°|óŸż#'OžŇóŔÁƒdçŽdë ›u^Uœ=jn•śÖNe+9(K/uçwĆŞÄ ˜3§[¤•2ĆR՝NH_ßršóŽ[ŕÎ§ĎœŐó‡]ZTRuz欛;ůą‚ttZ ĆöŽf×Îľň żř/ĺ×ýżČáCnn•0o#Yż~45 LAîî÷+—ɍ;ˇË˙ČG4ľQssяľ”ŚĽľ ŤÖ,‘_ü7?ëęű˘ü×ßýŒÍ™Ş6mZ/cţýV0G§Ëž}°){€‚úY[AÇW @Ž{ç2Ż[Lœ¤’ŔőL۔/ŕÔ&ĺҘ˛Ý”ˉŽŔ𚞞đó>§:ę+ĂôX(A€…éd(0*6F‡JĆAń{ěÄYyqOżěŮwZ†F'tTńŹBő…ŔCŁńžyŕ^ěsfˇ#ͤ?ˇ'ě `?ňó—éŒ8?0RŤÖÚłú,ŕ1qŚCGFîŢň”öć56ů¨`ú¤f鞪ÓŐDGăšiw_ŽĆőÎéŔ´rCî70Z@/ΗBq‰ťvšÄ•3ŽďNş1@Ć‰ŞŽ'•˛>(ňÂÜĄç#  ý–Ăél žĂ8¨&íĄ-€é_°śUŤçśßtNĘÚ} €oě7oš:Ə0JďďŠĚ ţs‹‡vßĐŮÂTjmn>`Aď€ ë;ćĘáóđ%ę›KmC;ړQnö™!đ‚÷f4ażpüë˝Ň`źlHCҐ†Ě ýą\çpöa`iČđ'†{ƒ0 “XŹýáٲLńžq‚LůFű=÷táů/dBĚŚm%Đ{ÜGżD–ĺ!ťţ'€S‘doëB抰ﲁl÷8ô;‘ľí!ř|gÚĐďÁś1E;ŽAě[öoŘŽŹÂzÍ™5 PŹ“j/ÎźčOüLD#*7Ň<řôőőy ĘXŻ饗܁yşncn˜ĂÉűNČůĘWÓř9ä­:⯨áZ’ěîÍÜ˙fî}łĎťVú’Á¨ĎŚM›äSŸú”ö˜ ŔPá—4éď?éôOs˛hĚ@§ ˜Čô@ „9ŽdŔB v €8HŸĹ şëŕÁƒ @™4†cąäžŔ0žő­oŠ˙ƒü ę?܇ŽőGÝqĎúőëý ˆúáoř„\œÉÁž:  ޏ4¸tZd…(l¤éBů1ˆ€6˛ Ř žĚýŒzc@›ĐwH§‚ň~xꊧä駟־Ĺ:°zőj˝kÖŹřId+ 'ř ŸŘ>Üáő XmA›Poô%™;¸IÁĎgŸ}V7Ţxcҟ¨; txú>!Ŕ‚ĎmHCҐ†ź}şąN×ÓH§ű‹ĄďC§/k!Ę3Gď峥źI8.Ő9˜BçŃůĘ$0Œeą~ň öÁŐc–*'ΞÓřlÝCÔÝ!uÎ#Ř~ňxQM#4ÔAçŇh œUď€JűpŔq.=끆tőtÎŔé—Rx"}X51M#B&ŽhĐŢnéŕŕĚmoďĐßĂxŢd„4"xÁPšśH›Ę´ŃlVf w†…-śHíB@gގx‰ 0]F$I¤ŽE‚ ĺŠŐ¤ë`Ú°~uÖ`ŠDźCQŒžyéSŤ}ꜱĹVMÍ{öîmÍ5­ß[ä9óŢ}Ůyqţfíg‡°ž¨ĽĽ5p<ćý^çđjÂ^Ď×;uɨĄF† Ď'„ Ésƒó;÷ÇdLă ÇVZôž›6tËÚm)‚ţbŃŽQöűˆŽg2…Ť„}—î“ď0lŕč’çŸ{IY-^¨ă ËŇdIÓTŔɎý¤Ś€Ó8Gmč;iФ=×*Í-nuĺ˙íR9°ď¸źřü>™š¨Ęň=n?Űë‹mZžĽ,JGŮűÂŞlaßőŸzR–-](›7ŽÖKđ.1ŽqNÁX‡ôötË˙óţČWžň5ůÂżîćĘT(Ť¨ĽpÝ'ŁcSĘźÇä?xŻüäO}Rß5úőkn.HWw‹2MŹ[ˇFžűČłň§úîěs\&§Jޜ1Y˝ŚO:ť†]ŰÎĘÜ9‹ÝYŕ€ŒŸ•ąŃ!ůŔ}wËűď{ŸŹĹ5mî|0(Ď>÷˛<ńäÓ °8sŚ_öîÝ+ˇŢv“ŹXšTćôvťë\rMŇŇÜíô­;+ •i7ˇG5 DSs$ccîú%˛fí*w.éŇq ֎‡~\žöEw>(ɡxTŽ>&ÖŻ–ĽËɜysTŇTl×ÔG§NökŰ?ôĄűäOţĎż¤héîîpďką,YşJVŹX.Ý=] ZJŔ:žĹދ>äb˙o€ďFĽ4UvçŇľî|˛Xě?¤ă吳…ľľľ*c çn÷>Ŕň `@ žĘŁQTŒi%âłf’ú({Ű9—h+@WÔ HŤ2= °ü 2ĘD\pM”Ťé\C‘Ś ’œ!LáŮx26‡p}M泲eÔtÎHlĚH§‡Fĺ•×䅽§eĎëGXO6BQo€b ťéô†ž`şJŚu€¤AťÝë.^Ëű|OhšYćGöŃL:Bƒv6XS˘źî¤…­]ŐŘp„§¨Ź­ĘT”/¸>VŕÇ´˛&•Ş“žLôٰ”knÉ-r:eŠ{'‹ÝJpVâęWƸš>PŚ Ő…Î֐/¤`5§Ťą?I!n­ň ĂĐ0Ďw§ď˙ŐŇő˜śZŐÁQę˜ĐuŘÇlZ,:>ţ➍4ŕ°óÚvé`°öÓUSŃJ¸ća_aëBÁÍÍŐodĽŁ{0Ş5d JBçO¨kłű9ŽEÖOUBš™Ń˘a)hHCҐ†\ďÂsW ° RŁŐ̗@ íá9n&0A€q!|.% Ţ Y+X§0]ěL2Ó÷aęöĹ"’ĚTNŔş„`ôIŘ/Y`nŘ_üŽ~ďcű'œÇ/$Y!ďc}đoř7ÂgfíH!8úz#.¸˜Ě€D!"ÂÍ&Q3pŇ!2ב‰2œo˜‹!ßÁš‡#@pˆw‡.nÔ9¨!!%Űľ"ç›D š2’UvW˛/ĽŹk˜ńVĺÍ3Ţě}WZČÂűG>ňęœŔ‚SzsSAŮ`ÄÄŽtč|‡ńß,ƒ$˙\đ Łŕt‡ń‡ĎÁßa`Žőʁűđl Ł°@‚Ą ¸Ź€Bş†.Œ¨3€ j@P€ĚÓN>ĘSstĄŢ4dŕ^F12ÝĘ e‘ž ע~hÚ‹¸ŘłMŕ9¨ú }… t:@FÁjhK˛iŕYť°‚{Ńh; šŢě€úá™dœŔóđ~Đ>|P҉’FýŒďɎpÖü Ź/x&č—-[śhęôӂŔ°I6 ´…ďí@‡ck6!;Ґ†4äZ•™öö4և†rHxPŸé`BYnxĘĂÚBPbřě™~ż#ŕ#ŇPC`Şî˙ĘÓÁXŠ&ĚpRZDˇĽ°…>˘~Q}řœÂH^Rćç|*Äá# JĹyŞ C„=ŤŚŔˆňÔ´w•“wŻĚeM~ĚƀxNEŸACŰÇŠQ˧ÚľÚTR&ú~îÜyIšKUÓćß˝ą†Xůšný™OÚfá–Â#ŠŇ÷:s9B#P˜:ÂwFՄ†§Đ€–4sŹ¸şw)cD[kSvˆŘ÷'}U7k‚é‰ţSÉŠSg4ĺĹ3ĎĽ‚=?ĘŐĎcjŠĂtZރx<ӁgŢÁžUm(nţÄOČsn?űŇË}rÓÎmnďݣϟ*MI[ç|imëp{ő9vç˜HĎš3š|Á‚y (9xđkŰIˇď=!§űtĎžëŚ-îŒŇ­ďĚ!==JŐO Íâ%óäöŰwËWżňuu‚Âéٌt3ýy/ÓĽWdrbʕłAŢß{ĺckVŚDřc -k[$‹—.–ťśÉžđeyúŠç•˝ŕŃGž'§Nž‘›Ö9˝Ô,˝CăŽ˙dxxDNœ:ćÚ3*˝=sĺĂž[n˝í÷Ž–ޤ€€š]űW,_(?ţŠ”Ý7ď’ßýŻżďĆĚ)MOqz`PÖ­ë“5kV¸s‹sŇśu*› úiJć͛/ď˝÷]ňţ÷żWA$]b€ ‚°&G6ß Đ3íĆöčř˜€Ćœ°\›ž•ůäĘC~WÎ œÖTííÍʄłSSs“´‹uşÎ@LášRKĆĎůÝ6łőČž)ťä0]—É)°#L' ŮüĘ6;ź;żžŠâ°™Tó AJö‹őBäužwĚ'Ç$żfL—Ť ȝ’ĂLJä™=Ç䍃gđÂqŽg.X°HűddLßąą8ˆ FëxLJç8:čËeű¤ëj>™“üFđĽĆ˙jݺſÍä€OˇTBŞs˘ŞňůfOEű—Ů:”O€č°]˘UĹҙSŠ€°žT‚ô1š‚[cOIiú¸ë˙n.vcgƒ\Ăîç)W6ŔUëo´iźŞ‘HXşžń뎂2ě_ H ´\Muśęxž{śßôW}ú î§xŚg Ţ%÷‘ŚŕŞÖ<řü|ÎŘRř× VRŽwúH^uʅ.ȂĎ&KfšÝ—qݞ–@lľnKץp?Ţ–=›í„ iHCҐď/á9>&âü€0öMY Eř;÷N8g`}†pďĆu9dŤ÷^ĄO™k0ËÁyĂZę˜!…„€X–Ĺ3~łĎşö\ą\ŻgBô-Ň ̗];wŠ‘ ”ľS“SĘ`ăđ˛eË`…NúrŽt8Ýá€ç‚ }eçB]t>ĐQX´`Â_:ú™"¤ŻŻ/ŃyxA`k‹ĘŢľk—lܸQďÇ3Ă ‘„4 `Cc2˙fžQÔz€čYnJ¨gŃ~€PY`|`şćzÇć×öjDU›Ö—LŘ4Ŕř‡ű ƒń;ú“i:ЗxîGša@YXČäg­[ˇNӜ`#ö`ŔłńŔ,2ą‚>eÚü}˛ˆ eŸ=ĘH<‚1Đ.Ô?qž°ĘÂ5]ŕo¤ĹűÄóPYLˆţ´H܆Ѥ! iHCŢÉîí¸Ö„Ńüž˙>Ř3Œ.ĚÁĂ&Œ— śĹşƒľäB,áół˙Žăzš˙°>ËétžŠŹ+-ĄB@gb˜đý €BXďHĄÎ|aťň˘đ%ĐýˢuŁÄ!ŠqÚ9ˆŃkSЇ] R0?KF䣝 řIyÚŘ!Ŕ6‘‹-=‡_;œŁjJ+SîÝ!]@“ť'‹˜ÍG9-Žiu€LP ÓżŚ)LŕŔ$DJšo4ü샐‰ŔÚ^ö?Ĺ÷A^gľÓNT¨‚hcć´e˘Ÿš›[tŸ ˆē:o đą”,uŽs JľŔa_v.úa€]hôŔ<ĎśrFąŸ0“H×ríĎłDHőĘşĽĘt’ź#×" áđ5J=óKjœ2‡3úu8q˛ß˝§˛Œˇ{˛Q™?ˇ×í!ťľŢÚÓáźT_ŕĚ YM‹SĺË_úyč;ËęŐkŐDڊRiZ-œg†3PÚŰCŕĚE€Hž`ŠlęiŠ–Y<„šĆ3!”ńžœsÓRőTäÄń“ 4Xž|™:›-͋şçťóœšH™ö˘E eďŢ×u, /nÜžIćÍ푦&8+]˝K䰳ќ<ՏwDlÚ´Anťmˇťwžž›ŕ,]˛xąŹ]×'ńç_”7†(óÂđđ¸lÝşN6o^§ďh|Źäşŕô6g“Xý„,X8W'4jďhsd×÷nÎé{9uj@&ÇeË֍nÝ)ćookW€CěĆçźůÝňŠý¸Ť×fů˝ßűÚÍ-Í2wŢwRÍ"ň~D&Ć'eldJö˝qXÚ:zäŗ^rő#AU0UŰÚlźśľş˛ŰŰtĎé풏˙đGĺˇţ÷˙Ś=^qÎo¤fépGÇZF¤łËíýÝůcEß"÷}ťźď}ď1]…T pž)9&0}-2 Ćč:˜Ý˜#ÚPősŒ!íí-ňo~ég´<<ĺ+cŒĺDę@@dœ1}` )é`–şßP›cŁŕtAEY‚Ş2>}Úô•jľJléb–gĚ2n+C ĚáM媧 FŽCXđRgxŹi1/''ŚĺäéQyĺő~yu˙i7&ľ.îű於ŢEőŒ„<ۂEçC|0çQ. ĎŚŠu€ ęDÜĹ)`1Lł֌Ş×dA ץ>Ďî/ÂßĂrš€Ţː˛V$E Ш{’šÉë^íת_9O†RĐteʼnŤ)śÓ ÚÇy÷Źbţ”ť|؍łyçݙ?^-•xÔyĆ Ó -HYŸbôoEßo \4v ÓÁ‘g˝€`kđk¸Ś˝ŞÖT7{.%ßvö7ßY^űŹpăTÉéĂ ŽHÇ0áž+t,„ —äĺH‡éűJ€b}h€ÁČ„jŞóŔ4…9Ď`ěË 1~BVî9˛l”˘VřÇYX_Őî9ڈ’:'Psq֘öҐ†4¤!ßǒľ›„kbf÷MĄăž~‚@@˙ $ P ××DŔľśzl-m^ąˆîÍÂ,a}ŕť!ëh˜â$|dA¸,#,‹)ĎŽ@}˛Ŕ Ö- $e›ČXJÚ2ž‡Ŕ–—2xFu€ěyđ7Ś€Sˇ„íʲ—…ßÁĎ3[dÖěÂ0@ŕÔ#ĘČpŠŃůˆď0°Éĺŕa>=źTŇ’( ¸ůóçĘ 7lQgœdŻžúŞ:ă°qĆóp€edÇľ&3C ‹++aż•ž˝°Ćuád˝„:^oÎâ™Ţ A˝˝=˛eËfyĎ{ŢŁ ˜) KΜ)y ASÂ$AvH˜ű ‡r|Ż9{T#^‚pÍʕ+u…ncŮ-¸ €ţb.vh}ĺ•W´Ě{ď˝7aŤŕڃşßáZ°Sl€ňPALŔ…\ЊÝýř›EĚ-Â1¨‡ćsvבFßáYč/E*ř÷Óq„ďŃoСœ[°Îě'śîEßĚÁw¸ý ~˘<€,ЗhӞ Žč˛#1"”ÇH˘Fńîh,Ă=(ă7ސ×^{͈ˇĘśmŰô^˛w°Oɸzł_Ńün¤şť!oEHÁMę8Ő1WŻ^ĺćP—+ąÇÁčJ Ć3ćć#IK–,U*mŒkčč'€ž°×ş\az#¨ĐŚ7#ăăĘ2C6öČ–‡HHč#´lE+Wޘą,D@˘/‡ƒeĄM˗Żôi䊞ý‚ţܸqƒyĽ†čË€Ŕ űŔć:ÔŻEî@ ď} śŚĺËW¤Î§Ř(ęÁţÔ}}+“´W“ě^ŒQŰ8ˆfY„fr„œOBŁ~vßHŁŰۍ9+§ÎqĎfĄQÄŽœ‚9XI1nÎ#Iqš BŔC9ĄeZzN 5uY¤4R~pŽAťNáŤD=š1T$˝ą§ď/H^ŃzÔźÓŐt‚UR6 ënÓS–ĂÖ"É ěľg „˘4üľd?k×pźZĐhSM3]7ŚĚ¸yă^5vϲQ"ň› ”tnˆoGEű1—PĆ­;ăníšvk*ęęöƒe%dđ Ň,ÔĎŻhƉşĹNżźďŢw)€`hxÜé÷Q7&ŤęۃWbFSU§¸DgÝ:ľD˜"—ËR°ŚĎÔ:`ěŤ3aäč;›ßăcnętcś&§úĎʗž|żŽľ-[6ÉşőŤÜ8C?UuăśŠĽMˇĹ悀˝áŠď=Ż)w-rŃŞŠ("7śKÓcŽźŸŽ"' ΗO~ňcrčŕ!9|踎\TU‡ëBštl‚ştlDßRsÜu×­ćüôú`ll\^cŸŚçxăěkň´{öÁ#ÇeÝşŽ=k4ĄÚ´źáĄ ÔA EK–k{.^ +űťţ]ŽÎ÷ç\ÇXËD[[“sěť=Ă yüńç´Ď6oYăŽ_âú1§ -Ĺ&KýqěäiuÔß°y˝ôÎéŐ1×ס\ÖoXçÎ=‹|Ş÷.ŕ ×4UŐ-i¸žńS( ďŽŒÔ ĘĂżĂŮkz­ŞĎ…Î뇞]:œśŠYSBpě¤ú<ŐľQTţKć†~íSFI|¤z´čuŹ{§Î>QšJŮâj\"cÁˆ¨3"ŹécʃLW)Rż^sφ}1Ó~0P€ž_î›C–ËŹ % 4ÁÚMGč7† †ě™ĄÝ„2DđZîéčŸ Ó„íă}a˝đoÔvŰóëÚ:Â}&ˁ,‡ű´ őA9dŮČî]ł@FpíWĄO(ËX1S9ü0śČŮ"ł`ÁÁJ# ^0WBÁLt 6ż0śâ'' ˛pÁ(˃6Čh``‚Ž@Đź#G'"Âąy†Ó‡r‰˘aߐď?šÄĹî;ĺrž÷Vꖽ÷JˇóRʻҎč8v6oŢ(;věPspA§Ŕ1ƒt 8˙ Šş@×ŕďpŇá^|@)čč.\c&Q„Đ5á.°tÎCB—ÁůÁżQÎsĎ=§żűîťXŇfQ‡á:iÁš °€ŽPÜKŕœľpÜâ^ˆˆdfô]ôŽ%¨ DŽ2o3Ű'úŒyMih"ł*řßá^0…–ő@ýp?ÚGÄ(úŔ:ÖŹYŁĚd7"ˆ÷?˙üó´ `aŞ”…神¨ ѤL`6 ŤWŻVÇ/ÚB”(Ţ+Ax}¸uĺfŽ őy|ҐË€+>ó™Ď$Ź]–Ł~Jő×OýÔO Î÷ß˙€źňĘËň[żő˙•+%Љ<đ€|űŰßVŠ 7lŘ ţđ‡4úőÔŠÓňűż˙?äW~ĺWŢŔsô›ßź_~îç~VA—+ȕţŐŻţƒęIŽ˜ťví”{îšŰ÷—Č‹/ž$ů—Šóň˝ď}ďŒ 0}ýëߐ={ö¨"hěć›o–}čƒęÄşňšĎ}^žzę)Ő-X‹ `ńćÖšgžyFSâ}úӟžŚЅßůÎwäá‡vż—ÇÇżü—˙RŠÔńŽąŒńöřăë=îü؏}*aşdYä˙Ւ0r1ÜŻĚôÜl”ăů%ý;hüąž˝ď} ž”:e)ŤŻĐ"‰ŘœLő¨B⠋b‹ŘŽsÚĺ-,J{ž:%ĚATCʏŔ‚램úśŞ%ŠęŢCâČfńŃ*ŐG“ÜI"aP~-í/ x§Y`ţ|r.ľ}VäÁU›ĹšXď!-¸F”äŠö^LQńνZ#Ô@ q@0K5‰t0ś‡jŃ~…“™×’ŢÎd–IGSůžDâä;)đťąx5™S*&ý}ěYĚqdƗźŔÇß7ŠW Lg˜ĆƒQŔ4…á4NeéQCŁ÷ÁaÄ* "p˛Á)‰öóéťƒĂč€"#2âďă“ÎŮ;%ó6Ä9ńŰÚ[SGZD\=ĐĎ@Űčű‰Ÿü¸[ŤËÓO=#ƒgGÝŢvÜ˝ŁłŇŢ֜Ú9š ܍ýhRă5Y˝˘č\}ŞŹżŽ~`éT0R>Nöŕ(ď¤ŠŠ Š8žyöˇ—ÓgNËĆ kÔY_-G21Vr÷ě\’ţţAçŘě”M›Öë~);–.["˖/UF Œ+€^Űű†[_“C‡ʑc‡dŐŞ•n]íq{čůŇŐÝ青í2]2§ôíwě–Ç?çÎgÜß[tŹĂ¨zöě°L¸ţ=;4ęÖúľ˛téBWĆ™œssh<ˇ´iăYíž3:>$>úŒô œŞlŘčžsm˜–Ţž^Ş:|LNœÖ=ýşľKe÷-;¤wNˇÎ›ÉÉq„ ŃÖŢ#ďżďݲfí2ůł?ý‚źüŇ+2;ŇȐűŒjĘM96esŒ­ňßř¨lÝşIÇk[‹‚(˜ĂŮŐDÁDĘcŹ˜gŰL•`ȜÔÔ=%WďI÷.ktÄy Eť;Łč|iąT:!ŔȜĎ)˜ ŹT—ýĆ"ö™2uŠĽňéJħÜÁŮfr´nžńw…vćs) ĂlŚAˆ#Šyp…•ůżUë@JE8^’ł28äΟŁ%9uzTă'db˛ęry˝Ź,!8‰Ć_Ěs€w0˜–ó‹ĚŠř‰ńBă1~âŹŰŇ2ĺĎÜ͉˝1ŐąUՋçcHČôičć;@ß8ČşŁR˝Žçü.Ő1Q]lNš:×u+ŁţŸ$ĽÖ…ÚEž:ň€´ŻĘ¨L^wJrľQ×ÇsÝxmwß.‘ruÂýr%¸u-š’|ŢďJcu+Pu•OkScŕđŠPcƒ¨‹ŐQRJ#QńÎLÇČJ6Ů8מ-}˜'ŒnÚ4n‘™ŚŠ:7gűLď,ěűĐéiJ–ú”.!ťĆ‚8 eéFqŢÇř"ŤßÇËf*´ĐI“ÖĄŢéÖÝÖć†4¤! iHCŽ ĎméϜ2‰…çÜús{Č,–׾–ç7lK¸˘?Šű簌,Đ"LsBpüB¸Ăž9[dÖ,˜Ă†Ž@ŇQH9ÂIĆI™s˜„t0pśŃ¨Ă\ŒpÂ)‡ <)ŕ:ěœcgô@Ě22ł\­žš˜aú˘â¨oV˛ĎźZ†čKyö[,Ě~țÎ)y[D’ˇéX„PΠ2Ćü‡Ž!CŒžĐ4žéŽs|Bt ô ćóâ‚ĎpœĄ\č3€Č܀{™N /Ś× Łő€C 0‚•N€Š MAÖŇLA˜ĨĄóI=ŕlDq ‘4 Păň Dx†`‚á ˇ™Ćƒzšu˘a:ě¨/u;>düŔď\Üů; ńp¨‘ş ßČ@0 ŒÖE]Ń&čv\‹ëP/ô'€(xŢ믿žđ˜ ÜGć Ž '`Aůčnfpۀ:¨ďqóRă'!ŒŚjHCފ@WÜsĎ=rë­ˇŞaůůç_ßű˝ßSž+–É•ŒY8ď?űŮĎĘťßýnšĺ–Ý:ßöî}Mžńo¨ŽřĄú˜:H~ögF–,Y,o^"y38 žřĹ/:§ý#ňŠO}R0v´ńČ#ęœýČG~@#ăzč!Ő˙Ó˙ôo”I(+p^Ą]jÜ}÷{dóćÍ:×_zé%ůň—ż˘:ăŁýyŤëç?˙yů™Ÿůy˙űß§ú˙­@6ĐSLĺt­ ˜+ţůŸ˙Yn¸á7fďQÝřÇüÇ:ž~í×ţŁŽ7€Ÿyäšíś[ÝxťĹ9éŽČýŃ)ĐíŢ{-^vÉ(ƒŤ .Ÿ“ťÍIčžÔúüÍßüŽCĚĂKX„‘ !ŐůŐÜÓ& ěé‰\ĆĄFúŇْ%ĚDǔőĽEL[JˆzcYëŒpz‡9@˝ąŁfÔôd˛đbýCƒL”FŸĐF ל”u(ă^_ŤnliqF“<€¸EsjĹihóŸSőő÷ŠT|ŞŚÂ ƒÉŞĹ$Ę߀yOOďYj‘:ŔIŒçć"‚P „ő+X Ź]Q @˛„Đ€cL •Ä'žš˘š€cÉĆDÂ<óܛa_‡yNĐk˜ś&ĚažCţ-EžŸ<ŰH­>goĘ Ɯs…:ƒ]1oŒź—étĆ'`ch“c'N+#@`sçőH'RÁ4“1nËT=ȂFŠů`~čîr{ŢšrřĐIżomqNóVý´E­­U{ę<ǸPú˙HrđGŁŞ+č ëŰcÇOĘSOż,›7­–ž•K>őj-§ ů\S2N/Y$ˇŢvł8tTŽ>ŹŠ7 ˖-–śÖaoĹć~}'GÓç|čC÷ş:/‘ {ý9ĆŇ eĆíwܢő2&˝WÝšgTűgËÖÍľľľäöÂe™3ý2gn—|ęÇ>nŒzn­Ý°a:Í8,/<˙Šěqĺ ž9+‹/žUKeţ|w^ZźPűĚ!łĘčîÁ~çťß}FfÜgcîuƒĺTm>-2oţ\mp}~ě؏erjBVŽÓVťž{”qËő3˜,Ě@J–Űn˝Iöď{]ÓJŒvhz’ÖŸN˘Š ]Ž>Œ4óąôŞCbŸqÒ:(Ŕ)ʋ1PŘč(;‡6‚w&''ôƒó&"÷ ˜ë5Ó=mŽîo M ˘řńÉAÇDš`Ž,A5çCěç4mV"L9`éćoŃ´qc>¤Kőœ›—šN$ĎĄĄ–€"‚*Äë˙ÔşŁ;ρ%Ŕ’Óƒ“r˛T††Ýř8;&ÇOËŠSƒ ¨ˆĹ€\`á)4ěiŠnł4F`­Ą.Ŕž×ćąéâś6Żs‹éü¤ž‚0_7Ďńů”Ś'Ýhu÷ľ×1<ؤěő]Ž>ˇ7*‡vG˙M×T“¨Ęš4:¨łhS`™ŮI|OĄLhŁË6ţrEKq"ąĽś"ó*čŹҸ$Ź*ąąMčxšrżsşăě6˜˙ËÜýî|-cnN¸k&Ü󧝎Šx_A×č-€ ýJ–žo×ÇÉűÂ^Ç}ČúP,ś)Söăy@¨ÚĹľ€ŐČ֚РJŚű&tNdזě=Ąă„eđ{Sz§ Î:Ƙ2•Řhđ;ŮCCçOčÜ ë’Ö×Ćkę؉)BҐ†4¤!ł@Âľ/ÜĎ0]$żĂżąGÚČT Ąs?ťŽ’™4ťGbŕc˜RBť Ë maᚐ~Śńŕţ-Ü?pĎ@ű%!Ŕ—Ÿôӄ`QHh—áwá‘ĺчÍ`Vúx_¸Ç S¤d?¨+ö0ôľĐo“-'ŰŻ3PŒ ßězđ…Ě™5ť0Đş"ľéTŁc “ N-NBŇąăß0Răĺ2ZßĂ ÇœlaŢ8áCš0LăŕţňË/ťƒůquĆä==‹rÉ\i ӕ”™ Ηd„Ö3ż?ôʕ­O(WÓ8}9e_Źďßʛš Żő˘˘Ć;I˕ŽĚőoźQvďžEƒc)A # Đ=ĐĐGX˜ ř"7#8♌Č=Ś„€J’QÉaZ :ůĄ— (‡éBđz ĎĂľp4á{+ ŁP2dаƒśĄ,üşXԃ´OXÔńw´‡(Łżż_Ë#ĺ% Ţ]\Av n*Č*6‘m‚z™€ ´i č3|ĎÍSv >bî\|Ç{ Ü Ž'ŰDHF€Ů;ŘvF•˘î@Ý8Á{†ĄuÂďR ­7=( ×a˝@Z›nş))Ó˘olÅç1/ ¨+ڇśŚ‹@M§2ЈKiČ[΀ *ťť{`ůœX€v€\żsçÎÄAô;żóťňĂ?üq`ŔĹ\Ŕؽ뎝ô{ ţö÷˙÷˛nÝ:ůÔ§>ĺSőDޏ0﹊Ćs`,}ňÉ'uƒ `ĺBGÜyçzýŁ~WöďߧΚM›6ĘíˇßŽÎ”ŹÚG¤îO<éöd/éœCNű;ďźC$Yƒčţűż%?÷s?'ď˙˝É÷+V,×{Ÿ}ö9MgrŕŔ~eE€ƒłúŁý¨Ö! °_zéeŹ|ŕPĂ=dŐŞ>îîď?•D…‡6cďˆ>CńLČńă' ŔhĎöíŰÜúłC^xáEmŰčč¸ţm||L!’ĂGŽ(ă˘l!ýןŐ2śnݢzćÉ'ż§Ŕ”Ů­ˇîvϞăęuÚ=ó˜Ź]ť6IWč6č:č2€0 ‡$~ôŃGľ\0hŕ}­YłZ÷—ÂńVăý‡؟ ťwď–/}éKú;ô?Ňřđ öô`&B=żő­oÉ{ß{Ďeăgy˜źÚó! Ó}q‰2ż‡-Y.TŰ~5Á%”8N@ëŠă(ţŮY˘ÄŘÂëRJz-ŒőN•|ňť‚§ ďhTt\šŠ2ŞĂ*“ŇŚžEŁ'\ZČ;Ç^GQ“ăžŇÔÝ× PCJ‘žF‹˝ş:˝Ŕ0Qľ|öS¤mĘůT –>$uşĽýĹ1}¤uQGP.ixƍ*¨Čkv]Ó,)8ÁœmšÂ pŔjU‹6– Ť7ę™:Ëz-€Úˇ‰ŁąVgȁ-”ĐľrŻ”ĘSŮč l´r8öC#ÇNX‡Đ`Ľśj^š ľ:Ç'ëŠTÓÎ;:<ćąÎĄćtíœ^g_čéJ˘–˛ˆýX4G{”°I@Ż^ŐŚě â‡ŸŚŽ†1ęű(gŽůRŠ˘Žőb“Ď † iœłš˙ô€<üč3ňěs/ˑc'd׍[dŮŇEŇ3§S×öjg}_•ň„Žu°L>tP×ᥥłn}Z"]:śŢŘwH÷żH­ć‹9§“j_Œ űą'Z6˘ďzםŇŃŢĄ{ĺŐ×5-D{֋œýŘţ{ldL–-_螽Âéů]îݡh8€ńšpáY°`ŽÖăŰ<ŹA-ýîLłyóŐ“Ó ˜hiiŐůqş˙ŒŒNȎí7ę˜Ü¸i^ťfMŸ_'Á6˲ŽEʨ1wŢéęl–Gżű´<˙¡>Ÿ•-›×9‡zťęéRMŮ †‡ÜšÁ­Ý`Ęř‰ŸüQMÉŃ;§G–/_˘e`íˇůk4=€IL㉼×)Ŕޚsőt×Ä6.Ŕ `GŠ4ĽŠHJ“SęŘÎBAÚ\šä~‚ĄÂÌO-ŐGÓŐŤë\œ°ůŔu&@IE)älďPŠMŮ\Ź–pVŠ–”ő$4 sN„ŻŹŘßm W“y—^WSý+OF ˙Î:§†ôřœ}BHÁköŹđşp˝ ů…‚§ŐŤćőR,XQ°^@;ŒřDűëÓmÄx†.o¸ŚěÖ4ŹamR‹Üؖ×=NżÁÉ0ěîvĎ­*÷Rhzœ˝ËiÇ{ف^Ł4ţ(´ľ&)Akq€áŞžŽ–VKŰYMǘΣːľ#™Ţ.2ZpŸF`† ‚RG—B`_řžĂHO|Ď >Ú&°žaÝ7peKŘá{fB` ףz6€măŘ§5¤! iHCr%\ßB0ƒą%´xVDKŁÍ˝íč!C6×ϐEŒ€ŽŁ\0uÖdŘ´Č<βÂrCV–Ÿ ⤠Ÿ˛őƒWRÖ˛8K˙ý¨a]Âý,÷+,í„ď?|Ę3tH:eŃČÖ?ÉĆĹ YúĚCśŠpďĘrx5đĆę7‡ÝöE°óL?dÖ,`TE´6^|x鈴+iíSz>ŠPp0Ń)† #8ĘaÔ9Ť¤"eę‘;śë5ˆđycß~Ţddö… Ś šrňf@ń۔ŘĺzyďŮč‡Ë˝÷h§‘lžu9§îÂ" @Ŕ~˜€y…Œp\°ŠŔvŔ´č€ §¸€…yBÁÖ=Ç\Ő0€V|”ž˙˝ď}OŸ $i(Âźd¸ĺs1VĂŚZŕZ˛X0RĎg˝Yg´†Ë˙;°nÁďq=SoĐđ 꽉ëQ6#ĐŮh#ڇ{Ш3 ¤ÜTJâŋ # Q.îAŸő‰wÂÍţęn´—ŠLAšfp‡:áyč{ŚWaš¤=ťۈőĺĹ_Tg2ÚhSˆ0MęÂh|Ř>rĐ>܋Ÿ'6Œ& šr‚1':ĆŕŞUŤÎů;ĆßSO=­: L,X 5ĹwÜŽcNkĚĎŕđŢ4 żňĘ+ňËżüËuěp–  ̟ÎÎÍÍţˇű9ůÄ'>ŠŃž<`žŘüçp~ţó§ ¤hĂź#ć܏ţč§´Ěp}˙Ú×žŚŒD ćć/üÂżN@ě1ď‘Â#Ř P_°Y -ôęA˝ąjŐj§'Ď>|X˙ŽhŰđ9˜×÷Ý÷>Ż3#ŮłçUe €ŃŽýű()RćϟŤNŁĎ~öoÔšƒwƒú}ŢŰ;GV,_ŠŽ´ó*€Î}ތ§ÝűBż`ń­o=ŕtc‡ëłÍî óŠüٟýšśu¸cŕ~ŕCĘ(ňâ‹/(xĎř“?ůÝODýöĽ/}YÓ¨ź˙ýď×>G:•*Cœ _˙ú×U~üă—Ť)h+ĆŁĽW˛1Đ t,ŢĆ"ę‡VĐŃQdăőüîwż+oF˛ ˅tôĹďżT–ŒŹ“ë‚ő‰YœHšôŁž0H#4ňż{şsy 8—m€çbĘ‘Ż3ž„Ć™ÄÇMŽé ʁ$žćsůL!BcŒö‹˜s‡ű äl@cBâüŠÖ4ˆg@TsŹaČÔTI#vŰZZŐ1­­ö*u>™S)eŠHű*gŃ눰oŽę1ŒŽVŠ‚Ś:ąýÔ´ţ´ít)]}žŃą5oĚ)čxŞŔéšb1cQ>ç:jĺ„Á#@˝†1{–œ‘Šhđ>6ôdÂfC0oh8㠝Œ!"Ž˝z`Mä×Q]šSÓľ$MHÜ0°á°˝ÇÉXş˝âáĂ'œƒżÓýť¤üŽŽvŚ&€ÄěœŻcąAý=ĎžőMzýäDIώ(ボ+%zi!|@twuJOw‡ŽAŻż>%ăc“˛yÓYťv… v{°Š€ŮŽ]:Źiťžűä'؝ozÜď˝2o~Żôh ŻHzzlĆZýˆœ8ŢŻëĂŠSgdűŽN˙ÎŃţÓwťą[ÄY‹+˛vÝjˇv’éҔŰK/”ŐŤúôüsđŕ!ç<ŸłCŽ=Ëeűö-şçŔ:Šń„ąÝŃŮ&Í-ٸy´šuíěŕ°|űGÝ8¨8ÇnAÇ/úőĆ~,)€ůČÎfâPňę|7†˜fœÇZ›uÝÜžm“›ąŒş~zřŃ'¤2í ‰`ă¨ć5ÝKOOˇë^­K—ëĎ於ömÁĎ= Ň´DŢŮ.~­Ęĺ›}Ä~N}ŮHf05=ecÚ9ëąçÁ§Ďůô!9éhoQC2€¤­ŕci 8~u´×Żâ$†1‚ß~ĎyP…jLyYꥊ2 pn—œPŃů{&0Ü %`_ńó$ÔÉĄ!<‰¨ƒžüŽ3{‡gÇĺŕŃAٻý˜˜*ËЈĽŢ Ëäź5clŹ}8Ł8ćolŔ/üÔÇ4ڒY…ЍĚ.dü Ń[’3:ëoFwŢŃsć„{oΞčĆíínD™ œ˛F¤€‰pÍżî¤ŃŒYŔYÖɐś)Ÿü˝f/LŞ@@ű `ŹZ|ßĹ~<Ôâ8Ţäu „ú Ąœę*´ä={Ž˝Cc}АlŤ†´5㢿ĆEˇŐ kžŤÇh ÷Ü!7î‡tź\)—ôůĆîQ”&׿íŢ_ËBŠjÓ{ZG1ŚSĆ(EŚŞ"ú ŽX ¤ôŤŚëúľ’Ž5‘éĎp­ŕžŤdâo…z€KčŽWíkĎF݈ąIFN| ČvÁłF8XŽŽsŐZ˛Ý çY>×HҐ†4¤! šţ%<…ż8q̟[Ł$h’€IŘ­˛ÎúđÜ‚tÉßQţFVlC˛áďáşĚóiXgššsAĐő~a–G˙3 \ăĂŕË‘ď†ű–ĹŸ î mMY`E(,÷˛]¨ƒUĂ˝hXlŰBŰ î‡˝A\}}}j݃ýîRÓ×^2kZ‚ˆAÁaDßżůĂ+ň/ăŇáG lnἂ3Ž2DdĐ(C” œ†¤¨'u?œjpÂ1ƆABŒĽÎŒň˛€“!;pŢ 'ô•~ćĹ ÁoĺޡRיî=Ÿáz&eBy+íťR’;PžĺRî˝ďáí”KqX„wĄîvşóz/DCpŤYppş3Ĺ :{ [(Bŕ~8ëq-tô ĘPşƒě9 „@ ,ŽjŕyD]âZčż§Ÿ~ZËÝľk—^‹gâß(Ÿ .dpD Ě6$xŻçbŒ:ŃaĹÍKb P ÂT(Đ˝xY$¸a¨íF˝Ů>čP2Đ`ŽöẐćG٨_h B4Ŕ“ŽŠ›€EPüíĂó Üp <uŁ….˛wpCƒ6Óč6Xƒű0>đ|8…Ń_0ęÂI‰ďŃ2_ŕ^ü  ö'>k ‚ça}š´hĺ†4äÂ'ÇüÁ8gýß*háěŮ!ůÄ'>! Ě÷Ǘ'ŁüȏüH2ßCÁX†N€~Ě Mř°ÓŃéF}ýúuŽnV.X ×~ú§ZAʘŁ@;"÷Dfüwؓ'úĺţo> üŕ厝îđ€‡ ňťżűťňňËw:˝¸łŽĐ ĐmMő[_GĚq‹(.ʝwŢ.ßůÎwtčCœ1ôóžŰŢNm ć3˜8Pg0O@÷`]ůßř *üÔOý„öĘGŠ čńáá!ůo˙í÷ńą}DV,ď“ßů˙ęęt—ěşiť9/,ŒPÎ'ŻžşWעüÁŠŽĹÚZňÁ‚züÚŻýš, ¨kؐptëÝwß­Œ`ؘSV‹Ť °€ž$[δ˙÷_={ö¸žř­ő(rŹ‹oVB§˙ůţţďůßKČŹpŽTĺ7~ó7Λ†ĺrA ŰÓxňůĎý˝ˆě<°˙ ţţŤżú‡ÁĘžĽňéOú‚ĺ‡Ńý—ť—z3’!„ÔYÁˆŕs˘DáD—ÔP:ŕ˛N*urÄľ¸Ą÷×҈ُAG:)Ů\Xn:Őđ 8ɢdÂňfĽ=7ƒNÉéLę6EC‹˛[ä Q,6'yÚŮ^Ś !Ł€4ć\ŠÄR{¤ôř@X17it/ŁQ萊cŰß!r›‘ŢĐpˆŮ;Şř÷d Z`ŕ‘¤Ý9EŇpGĂ Ű@}öo8ö0˙Ń˙˘~•éî˛FŽÝ°Lţ-ë´Ź?÷ĺPH˝S“űđ¸%_g` ë¨ďÂő˙áŁ'ÔÉŽéőJӚîaţź^éîéJtŸĎ_`^ŠQLÇŤ_ŃÝW5çô™3ĂňЃߓĺ+ÉŚ-ŤÜ޲GßÇ`­f㯍{žlÚ¸^^xáyúŮmŻÝ\Tg~G‡QîăZ€Ž—­7lrö“ľŇÚÖäć1’DQUÇé˛e‹ÜşŮិPžůĎťőá{š"kbrBnŘşAu.BcŁeuDžę?ތťwßäÖľ›¤PĚˢE ˝fą,Yş@›°Á€ĺ€ľkWé§Łł]Aš\“ťžI†Ý:622Şűo2Ömmß(6Žső™çžmcE7ŢnźqŤtvľÉWž|żîĹϞtešľmŁŰCôézŽ'(ťUt41>Ľě/źôš2’TązuŸĚuŁUÁQŻó„ó^OëpŢ͏BSAA ?SÓĘN1éç8ö ? žp—u¸žn׳Œs6›´Ÿ 䓦€ˆ<ŘŚnˆ(°#wÎX6Iue>×ěęmé`ʕ’ÓmÎě~VÝţŠâVĐƞ“3'v.urëó%40›C?ëě­wDÇ 2!Hŕ˘ţÁI9pd@ö<-g]_Œ—dx´$ƒC“ʢSps"ŸŤ×ĺÔ4XřÂtŁž˙ňEoč50 ÷¤)`!…eÓ{ˆç|(aşOíMMCcç}č#ÔĆÝĚ#-cĚeNkę›,xŒĺ„ë“ďbsžK˝QšëbŘ˙‡űňÔÖô肸˜#Ďâá\óQĄľ`$‘) ŠÖŽüœ]`k*úšfNřŠEŒ w~Çejuęvăy‘Łůn^tsaHZ[š¤M™XLÉésňšdŒđ‘Œw0Ýä,N dÁ™˝lɰ|}ȑՊěŮţ6†’Äś–K÷ëȨžőB’ĽŹ!i]Ň=˙%˛` Œ|Bű4SS3$ Ź!`&97Ĺąg_Š)kÓNҐ†4¤! iČő.\;C`ÖAěą_Ă:‰IKƒ™O졝 ÜKe÷r´S2ƒ;CfţîçXfřoŘń;Τd'›CśŹp_˜eŇ ť'L#Ć}#ŰH9_ÝčS@ŰP'Ś- Ë;_?ą¨ôtœüĐ Ř @‡@_Ě (  ~ˆđb$)ţçîĺő02!JőÂ} GcdÓ ¨e@˙ÁŃnđAaä$”zŽ ,‚Ěż…ô'ĘÁچčNÜŤkľ”ć őB 2@Ýńwl$Ŕnŕű˙&#u/ĘÄľř7wśF…Ŕ¸v!”w‚2 lú őÄ5¨ęw…~$ó‰ĄÜL ź7FY&ęüĆo(NGŇ\a,ŔY‚ ţ˝ţG=Ń_¨€dFB}ÉřÍ"S…üňvčdžĚnÁç0"?ńÄň…/|Aç›6mË˛_„iAB§ć"Ć;çËĹÖ_qĚăĽK—ypœţočœ@* €2pÝ­ˇŢâó.›)–ĺ‚Y)/ţäOţ/ů›żů[”Ş‘™Đ/‡QTXDĘŇüÜůĹůÍC~“čşsŰÔłÂgb îYąb…Î8OÚŰ۔mĚCX }čŰŐŤWiűÖVęz<ŘŞ&m­f@…ŁËĐčp€^`vîsŸ“˙íűĎz¨Ágýúĺu+öŚdô c’LHq')ŢϚ5ŤÔé…k@~öŮgő}ź]t€]ţň/˙RţÝżűw Ɖ˘ÔÁŐ•xĆ%oZ.€xáĹ\'^Ŕ°U.šjärşëŽŐŠţŔ JF˙4ç`›”‹ŐgŚýć•Ü÷Ď$٨]ÜĂĂž]ƒ:˜C?ÇŮź˘4ÎÔłc¤Œ‰ b9çĂT8i+IŞ‘(CŮ.uÎ’Ô %É>Î Fďî[§ŠŽXĚë\&󤈟ž†Ółâč5\tž‡ů[ń*ČHa‘ż9avěUMoŐ<ŁANBp…ęĂŞxcĄŽ˘žŹeWƒ6ٟŃDýłSTUŒ"@´Ý9ĚŕŕT|T4˛Ô’žŔućüŞ$Ď"(7d 1t!ŃŻ4ƐiŒ,kÉ;Ë8UĂş’=ÄĆŻ9őŕˆMuG-q´˛9fđÎ8îC@E87ÂgŽOx‡°s–ˇ”¤4=ŕöÓ2ßíAçÎéV˝9ú2bŞ™ŠšąąqŮť÷ §—4‚hhDśíXëö—˝}5Y‘śŽ^í›S§ú•}ŻŻo…<|\×<\ŁűĐË4­ČŮłĂňÔSĎ( )0&'áüÓÄ%Ł#˛Ä=łŠŘ&ůÂi}–žŻ$[ˇl‘oÜŽŠŔPÁľŽŹ âiűŁx:#]lœ/—Ý.MjżăýLşń:ęÎĚďÜŮŮ.]n?cé>ܧÉŇř  ů\ĘJqîÚN窼 1}P“ä!Ć@cŠrĘR‘Ď7Ť~+•Ýbş<} –Z˛˙RÝ5éÜŐŇtĘć%2ŁűÓ5˘*őëC˛nhnšvŮŘxYŢ8<(ŻîŁ§Geŕě”Lšž(š1Ľmđ=[tőn*ćü™55B„OÝŔt:śjRŕôw ˘Şy}%Żpž†ěĄ>… ę&˛E‘ŐlA--Ut)Čb)Bŕ GpFŒUH\4ŒW„”p}âzÂčÁsX2zˆëS.aiŞ$: : 0ŘJn.DHŤá 5‚œ9ܔ5˘Ş 1jˆ<ˆź÷œś§¨k ŇŔ`XVËÓŞëJÓ`cœrkJvgůfg+č^/Ü\^äĘt}äœEKĽŁíÓl:ą> iżˆLƒĹɍËrĹF ŮĆĐQS ľ~—łzDĘä%÷s˝LŘDţSńI SˆpL‡Źgáx ×Hô ÇW¸÷ŕž‚ç Ś­Ć~ś čoŒ%î),ÝVUf3Í&ECҐ†4äűWđc°ćň,ovb>ÁYßVčäçŠ@]2găLI@DćŕżĂ=BXNč;ą=aK]j‘°ŹĐ~P!%îÇÚßî7 zÓ9iEΡ ÁÜ/++žŚÇk­č†[JśmażÁ˙Ať.ú)<ťÎdĘö÷:ô—ŔMpEcă,‘Y°ŔĄĆxű1ˆđ˘űúút ÂYˆHDşaĐbł Ę`Ս 50`…‚܋ÑÇ({pVŔ@Î\?œ°˜d/źđ‚€ńň’ƒÖőĂDYˇvľź˙}ď•7öí“GœS[Jjô‰Ţڤ׎d śWËĄ‡ßĚ3Â{ŽÁ[‘‹ľ˙­źƒóÝ{ľŢë…äÂď)VcˆšóçÉFçP‚0,Ŕmmy5şŞ‘ő†śČ‚ ő^PĚdĘu8,‰\„Ž€ L|‚  ? ł¸ C/D}Ô4ŕ:č PŢba Ó_ĀĹëŰßţśę)č8Ҍ=R‡ç…i,h,€ŽĂO\Fb1ĆOŇąŁŽ¸×pŔE› ,Œô†”z÷áz:Wáŕ ScpqfÄÓo ~¸–ĎĂfĺ˘P6úí ŰÇçA×c@ú*ÜOŕDh GżŁOą^ŕţđy¸:Š¤Đř PondPœ‘{÷îŐş`łŔ÷‹2Đ'ĄaíF=Ȋqgę ú‚w3í űóŘţë[×4äĚĽuëÖÉîÝťőßťwß,˙ĺżüŚŚŤřő_˙ú9g:ؤŃa”p“N Œd Ă8G‘Pƒüľ×^“[oÝ­N=7úf އ8ŒĎ†nf§$óYëĄNÖŞJmŢÖŢ"?˙ó?ŸčhŁÍŽtf—‚•+ű|Ôě˜Ňهű|čč‚´.&óćÍU6č“PĐOŻżžOuSœę›ýj‘ĺ ý9ď IŒbG[5Ýw¸KDş‡ˆy’ĽŮ§küţď˙ž2<őÔSšFĺ¸O>őŠOΤ(˜VĘđđđ”:Të÷>tTf´W[Ŕ ÷ß˙ű—˙ń—{ď˝Ç§2 ‡ÎEÎvŒcŁ…]; SߌdŘ3ľýóĺ/Y.&¨ŰL÷ĎTöĹ@ adëL‚t.ď~÷{„Žš_ýŐ_Uß_˙őg“2:ÓŇńţ{ŚßŻ”` ’Ć[Ô)b`ËťîöHŕ÷÷€ ž“ŒĄ€kl<ÚŢÄŘ!ŇÔ Ďdƒ ó‰ŔU˝_)ýCŔAdÎZP˜ÇľşhaëKˑ‚ŞŒv܌ fPösŹíăžN™˝œłűšpŁ- ›/*WUiPKN?śŠŽ­jMŇ*ĉžĐ~ĐbŸ*nŇmŞž_ĚÁˆšB`"Ża 2ŕ­Hęȍ°FH?O0ŻíšJI€É‚ě_ř~Z)ó[C Lľ¤’Ż3:1 )VyÚÇg2%ŞpŞśśÖ”`h¨äöW]îßmÚŒRˇ´~)ĹŞĐ u†ą4:*>ÇiɺаĽô¨eĚżœ7”U´Ÿx˝–!攮–ÍŃ]qöĄ3ƒŇÚŢ&c#ŁÎëËZĚďŐ3Ŕ3EhĽżóKšňçöWňŻŰí‡ű”a!vßéc%™˜šUk–ťýŁE>rŁ z<ăôâYŮśmƒ|čĂ÷8§~›˛VX×tí@š‘eËĘň‹]ů-űŢpő“›Ö:›Ézwý´4ˇ´şO,ó›;äčácrčĐIe€X0żWőÉ]wŢ*ďz×Ę0ňqĆ´ƒrňÄ)îŘąM6n^ŤďŚčćBk[‹Śź‚^ljn“|qĘ=ž[wOKĽlR°k`Žam] {ńyn}o’ŁGŽ+Qœ“ýűK[k§‚Ú; Ž?:ő=5AĂC—ť'VĆ<ç sěŚJîg›:{çtĘÂEëT?65ô\˜‹BvcđŔüÓëÜnRŕćĆBĽRŞËĺl€lKsˆr‘l^O—'‘îsRǗw`$‘wĺĆr`Œ;éÁőŔü6@‰×ËŘ7Ľ"o酊šœFJq€LMMú}[€Dń3Ż™Łđ˜jlsUŮ+LĽ(#KMĚ!­ľŇéސ{ՏČ9˝päř<óâaŮóĆi9ufDő9ŤÝ܊ؤ{=čEŻŘ0ÜŤ•ŞöóaÓšÍóęœăú JÚO\żŇ4qc;Œ´Ë€.xÖ ÇL3b˙Ž%ýˆ÷ŘŐéÎŇĹfMLŒť97•€ţm˙ZHĘŕŔßĈúŇ`‡hͨ#BgŰŘÓő$Şcf ď×ý&ö•x÷>UU^Lďç˘ Wů”[+Ś+Ş'âȐ0¸ŚPhÖ˝{šęÎŰŽ=ů˘­;ĐoS>(Ŕ­7ÍM­ŇítsEr“î]ď‘RľŰ鼼îń‹Üe˘tłIi†~ΰăžO;š7ÊôŐ4âŘćF):îS‹˜+<Ôĺ˘×äň);1ÇBČÂ~Lç{”Ź<‡‡ď&ź. Mć‚Ôł€es”ÓąÖ cvړń!Ł>dԁNš\”›—Fž†4¤! iČő,çł5pŸžŽvŇóŮh˛Î˙p§U›ěŃ{>ďĺڍľœ{E”?ÄLőȖÁ5?L) üř\ĚÖ BM¸D?1ŘvŚúd% ĺ^?ąÁ™úBĎĎ~Çý)Hňţyěeŕßâ>>ˀ|˝ËŹX`C ŒÔˆxiŒnĆ˄` 8ˇ`¤…Ńy8ü@,jpľŕBä8& €pÂńPƒç1B‚ç‚‘ä0čÂaöĄ}H'Ą0ÖĂن{Ôąę+˘á…âĹ_ Wf(÷–škZ.eâ_ěţˇ[ŢjĂr.$×ăRűůj€*Že‰źáÚ{ď˝WiŮ1gąÁcžhSŃ~űíˇ;'á­şŕěۡOî¸ÎCü@t ŔXĐ3XP °Ř@˙Ŕńƒr˜ p‹5Ŕ püA€ ÎAčč&܇:á9_ýęWŐhőž÷˝Ou0Üg?Sˆ@áƒ6B/ńy¨ >xte\‡:ě@Jvü›ô•Ё00=S-ń€ş!J‚rXŔČEô#ʅEI‡2 h+ę G%cŚő€$B6 ŚA;x/ú÷`Äţ€ h?ڍ5÷řI*Ţ ˜@8wšŔ5tęâZ0áýrmA›Đ/X'a‰gâÝ .¨ڈď Ášpڈń‚>ÁťEý0^ا!•mCňV$4b\sR¸éçÜǜŔ¸†óúĐĄŁçDH]Lçßwß}ňO˙ôOšĆ şÇ-&•]s€°lŮ21WxŕŰ ‚€ŽÁŸ;Ž€°őőŻŢéćŘR˝ÇTƁů„ýŐLNv¤Ž‚Ăţ×ý×Ô8‰ňĄż|đA}€X—"HG=úŔhq/í¸kÇwÜĄ?Ož´ôQČŰ }đĘ+/ë:qŠŃó!)ƒŒúŁŁ˙v:Ý2˛ ˆ`†^ţđ‡?¨)NžôĽ/Ëc=ćúńhpe3^?vě„ë—…úîE9==˝ `îÔč÷Ď|ć3n˝ťW>ň‘'H˜á`ĹţTóűöíWF;Ôű‘G‘í۷˛ž%.–Ś ű7+Y‡.żËţ΋‹ŐÉÖ*XÓ( Ťg[í_;ďýĄCúJí—/*‘íLj[î5 ĘJєÔÍX*ęěDڏ˘>Œü ӄ$Α\Jƒ™ĎDÓ¨ęÉ0҃N ŽÉ<ł…Ŕ =#ć-÷;ÇgY#zK­{ÚżH%/D s–y‘,= ţ} ößpV!ŐŰZ˙ReZ%Ąƒ'çŸ l.rmtcO,W=iÎŽxŃżˆŽ@Ń‘~žŹ´ëčc ÖÔ×ÓŘž3ƒ—Ä0 Ŕ(:'7žoÎbcČ`JPXV ž(&}Ďvń߸×%Mďa_‡u Š”î°t}ůěJ0M˝C‡xŐ׿ćŮ*RP‡=×öiĐ߀ŔąřúÁHćvÎ÷ĺŐ;şü‰Â9úĂ#ç}ÍąŒOLŤă1_,¸÷šse"%\Y.˜#sćv*ȢŕŹuŹB‘Ÿá\uNÄű>pŸ<ůä3Îć°O–-ď“W‡vç”̏äĺř‰~#ş6͙3O׼… ç:‡~QŠř ”4Ç|Uçƒöm\Ń´‡;vÜŕöéúóżwőQçf[[“ŰĎqżËŠ“g\›÷şýüˆ‚Ţ}÷­ň#Ÿüp˘+  ůáO|TţěO˙Ęí‰÷š}ř„{GcrđĐAŮľk›îsKSU”–ć:;.ǏäÜďÖđĹ280äÖÛäşÇí…Wh˙ŘźpłW~ŕ#Í›ˇČďüöďɑŁGtOq˛˙˜lŰžÉőĎir㧫ˍ ×ćǏťĎ~÷źIůŕŢ'}÷qwď&šăÎŰ\˙ôHOoˇŹoÜ;Žâ:° ´r‰ô=Zd|Žlœ¤ Š }ŸHY˛`aŻŹ^łÜżcFȑć7Ś,˛ńím>nüÄ 3NÎż32Ć#€–`A=ŔRŃÔÜ*Ó%çܞžé¸ęÁ^eü¨hÝSÁšú<ŞŰvCąźšW4D5öŝpĹ8,Jˇ7;9*/ě9&O>űş Oiý€8âł1Ő âšj)Pň € ş.Á1í#Łř(4Ř&uŸ ĹëŠW`% ”Œ$aŽęĐPÎňÂߊ¸ŚPŸSoY A—ÓŐŽ-ŁĘ2CzfœłeRň…z€A:a4%Ćt”DŞuô”ÉČRuDA´cČČGp­‚‰sŔ X'skžŮş$gLRłą—Ó5 ŹŹŃVŕ pşŠXhU°I3X_ŠM 6Ť•‘őŠŽ÷’Ťqő\,šÂ2W0Ţ8=ŸuóĎŮ$ÜósW_°V`,—Ý=|ŤťąÖSٖĐUűhy v-Ĺ%űƒ$˝îńŔœp˝ąűŇ4Ąáx .Ą3‡ý\óőˆ%u*Đf@' Á@YƔPç‡u‚Ý€Qś°‡`oŽ9ŃŐŐaŹ-ĹŚd˙VB€× š‚|ßEč5¤! iHCž/64œ .gĄ#€öNžag3ś˛aÁ}?Öi|¸ż¸{ ÷Řg`?ęHśďK„çcü,đO .2dŸ{)‚vÁ_ƒ˝"ĘGYđ+ńyŮsyȲĆý4Óřa˙ßę˙ÎŘǐUű{ü{61YĚŞ!ŒpfÄ0 R¤™G27`ŻŔ$Ťdˆčă};věH"Ö Ó ƒ9wřŔYG$=p°âyůČG´, ʄÓN#'Ä&œgp8 :ä1GJ0_`0ѤHl‰.yR\2Ňl&#ňŰQ‡ď™iüĚÔ3ĄěŢĚ3އţ5CyA:œÓ@Dv“Ţ s“ó öXźđ“¤% zŽ8ŇĄŕHs‹ s…AÁi]AĘ܇C 8řhČgŠćÝt˙ý÷kɋE pÔ÷âšM n\´I5‡ |¸1€^Ă5LĹA#ó‚aqDÝńo22 Ž¤EĹóĄáddÉ:ĘÇő0ĐxAÇŮШ…E)MȁžĐ×áyhę…>€ő@ż˘Ţxw¨ŰG#ęŽç“]e1o.îG9ř7ĘĹó†ŕ†4°•€ TúčKşĐßdÄ čƒcT-ꀲđ>čäĆsša#ťE›ćbnÖM…˜6KCňfă @ŁĄ5Ążř‹ż FSĚUŒÝW_}MA]pV#2ă:íĄ‡şl˝ţń\÷Y˙é?ý'¨ooŸ~Zç˙/ýŇ/ššÓëćć™ – *@ đ üŕu>ýíßţ­Îż{ď}ŻęlĚçW_Ý+wßýšăŽŰĺ˙řĺĂţ°ęŞo|ăk:ó7󜲡˙?ýéOËţĎ˙Yţ×˙ő˙Ľ€Wč ¤ë€ţřůŸ˙„F_Š„őя~Tţđ˙P~űˇÇé†[´żŕŕ‡žü_ţ—˙Y:`ířŤżúk÷ůŹ2Z ˝żüË˙^Ţ̲ GΒ%‹TŸ}ţó§kö’ÜoBžůÍo*đŕ'ň'ľ˙°_Ĺ:¤ş%܋˝ëo˙öoë>eâ>¤¸ ĆK/˝,ď”`]:táÂEnďţd˛F¨çŕÖ­›Ýť{R>űŮĎĘmˇÝŚű|Œé}ěcÚˇ—ťf¤!9WsNgđů„†}:ŽŚĐ‰övűÔéࣹš l4Gx†] ć%e˝Cv˝NĚéD& ö_]ôŠjX9¤•÷,9Ţ Ę(aFpXlMY4zi˝jv-œč<ÑÍŒ Í>iQÁ!Őh ďĎÂľ˝=EQ2](I[k{“'ĺ?|AÓ ä}´rŹ@-ˇ›S6Ą¨/ރSŮ,ţą2;Lű´Kő†+ë‡\TđŔ.cbꏴŒŃ‚Hfs*•l`Œ$–Î 5@Ĺę ˘Î‹<3Ŕě_^‹ë0ĆŃ4i:ŃuĹ&J2].I{[gbXBéH­/3çY„,= R9˜‘¨R—B€d”z ˘Ď¨ÉĘąôvä!ŏ1e1GľÚ‰"0+iXľ:Ýô-MW4į́sҏ:*#㣲xr,˜Ű+-ި°YM ¸EÁäđżůëňÔÓĎĘ׿ńmé?=(Ýe0Y¸wŰÉôT՝k:e͚n›-N7ĆqĹúvzJJS%imkucŠĂ9>ó–f'*( çôéévk~Ż[ŤFF†œţvű`ŘDĆ$´ăŁ%Ź^ݧ{ÔŃŃaíł––Véě2Fťśś˘üë_ř9ˇî’ß˙˙˙ŸrâřižĆő}}“Ęč€=Çđ°sŞOW4yôŘQ]7Ńß;wmuűđyŽ_ŤnüŸőF¸B@ĐÂ/ýŰ_˙ýˇ>ăöř'‘ôČ­MŽŹ˛ß˟ПšV˘:)Ý=]˛vÝ­nOňM=`Ť˙Ř|˛iš Ô3V›—GA?a.ƒƒöZÁ˘‚ßŐŢ´hžŚ(•Ŕęľô6ÄLv6ŕŮ9Œ„'pŹ c>a5ľśšą˄;Ł”ŞS295bě4ľHő¤ąD‰ŢŠOçť"5–šń:ŚęÓF mQjف3wÚí!§JĆřü+Geďrr`RŚŚ=%pľ˘séNňšf}gŞo 5e֘văpb:˛’čjÎ5žĹ8˙˛Š,CR|ÓH%ó…÷.čŕÁs<˙ĽNq sŚ ţç÷|~ňź8evuuëx%čĆŘ0ŰÖŰđ™,;2. ČB܇=4<ϢA÷č€vpфŢÂßP_Ś1Bš(›”+ępĚĄž¸ž‘G¨އŢbů(›‘܌ŕZŚâ@] Sń<´÷˘™ @ö„ě¨3€h§9+  €wˆ÷@]ËM Óvŕ~\‡zxÁh}´‹‘gWŔ1Ë܏ráŕƒƒ@:ź; _Q´“9ÉČ́ň9vŘAšę‘ÝĎĂ5ř;ĘĂ÷¨ŽEŰđ7Ź-藕‹ŕІźyÁŘǸk>0Ôcl"•Ć?řŻ`âcţë_˙şsÄ˙ yď{ďŃ1úÝď~×éŻ=ňŁ?úŁn\žH€e]Ľá|‚ąýţĂPŚč,8pÜř‰Ÿř˛~ýúD?lÝşĹĎăœęM˛ËXÝŰäßţŰO˗žô%ůž zä]ďz—üŕ~L˙ Ĺśm7((bÝşľňÓ?ýÓ:zč;JMžqăzůW˙ę_& lٲI~÷wG>÷šĎ+˜óŽ`ßčë[™\ˇté5f^čŕ$ôë?˙óýňŕƒßÖşnذŃ9u~ČégKtóÍ7é3ţáţQK–,Ö>@Œí]ťvFŐR"Іyli6mÚě֙y.ŢĎ7žńu}G÷Ý÷×öá$˝É'>ń }&Rƒ@7hü?`ô5úÎQ” 0Ě_üĹ_hžz2;ÝsĎÝęëčh×˝0Ńő¸ý }ľ÷ŚĐ×\[žň•/ Z§ÖÖůšň ’Ż~ő\˙ţƒF]˙ĘŻüŠ2›ź™ęс:´Ż´°\ž .&Œˆ ™ÎS˛ĐąrĺruvçGâĹ딍켚‚1‰uó‹šKC‡¸9˘ŚĎ1>Đ9 %zĐkŒ‰cN p‘F„›cÂŇŃ@€(Ö0’]ÎqÎą=ŕhŇvŔxŔtIčœĹ÷ęnň”ď4HŁçí<™KÚeăƒă})ë„őqEŇhűH×뇪Xš’\Ň'iW•C’”.ĆÁôRМź—ÔaYŹs0ń˝">ÂŐI‹žĄN€ţšžnrN[KďF† Žá”mŁ˘ýj ŠU¤€/ ¤ËžI™Jh°Űs0–…sО|sü#M'×"›cęřËŠ“R]ęp’c|9‡ăŠţ3Ęč–¤^()›Ĺ¤,Z0Gş{:ĽĽš)a?9w~ç,=”kĂÜy]N/ß)ó̗Żăw>8ŁÎRE:ZKňčäcnmŘ 6ŽÓô†h3ę6…j%rë{Yë Ç<ŔT€ ,Hůč}rđŔAŮqăˇ7¸IUěIyᅗdϡœníUȎˇJOo‡[ż Šů-wp^đ~*üťĎQĘĺĽÚŸ-­M˛hń<Ýo—ŚœŁ~lPâ#–Ň  ŽcǎČ͡ěőV@ÁőkwwŻtśwJsK^ٚĐŃwÝu‡|ń _‘ăÇĘVÎ[z°#Üyç-ÚOm­^g`üXz“؏ý8“ĺrEçf ŠŠ9›yf¨TYÂ"łŚĽŤťËőC!öŁŽĽ‚šĆ3’Ú( ćş{Läٛ:œú=›>-L{Áů˜ Ü r˘X&Żá5ŒÄ Ó8„ϧž™’¨[”$(“épNÔ „ń1éhďH‚B€Gîżc4 ŸKŚ{ŚŐe‡}Ăö§,_š:öÖ84])ův4=ĆÚŕPÍ­)˜HiĆ$h´&ÍéÝ&MžŠuÎŹC>™“ÓšňĹö­Ć|QÖšćŢŤ[ĎkU,Šđ.Žš¸{pŚ@úć•RŽ šşŒşż—ŔĄ$e¤HÂzyv‰‚Í c_qÇZ…uL׺˘Štąvڰż“:×ju@‹ô@‡ÇA¸îçüŤIKjľşqîQXnöݲ,Ňp‡îeřţȂŒ5nJíPŁúÎ,­Q“XzŹ‹ďďҐ†4¤! šöŞ ÖK°Čúń![üE`ý…˙‚6†ě^1{X.™pśDy°­Á?˝?,3Ëô–EVpŘ÷ą˙…/u^Ź^ü7÷~đŤđĚ B˝c†ň˛ubYdÝF™đgaĎ1“Í3Üżń‹{žŤÉ‚Ÿ°ŃÁĆÉ}žíWru,_ł‰ÁâR͍Ń%ţ-ş„ŸŃyţÍO.řÉóć3ü­ ?Ý ý.)ýé0Łc1t°á #67Œ ÇŕĆ`€Co8ľŕôƒŔř >&% çq1ŹĆ^ĐNă™p2ŕü b‘-úo<uÀ˘łQÓt˜`pź-„zÂHŔë0‘áĐCţdĐJOLÖůŽšX}ŢiÇűLĎĎ*ŸëAB>äj‚!Ţę;{ł÷_ązá(tčkÖŹvU›ŁXhЁ^ ŘAčŠPůÓaŽăxôć>ALuëđo8ĺD0t”ĂŒ,Á5ć0jMęŽĹhKDC˙`aG°4Aöčč%č8Đ Ő1&Կ㙣APԛ¨Ĺp„žC˙p‘Dy‘€Ůƒ;śô^řĐÁ€2Ql˜2€ 5úŒŤCIB‡6¨ďɜ˛Ą› ,!5ŽÁ=¤íE90äR÷Ňh‡÷Žş ‚żăyhx&Ę~ꊧÔIŒq:őhXÁő¸L"ĐáŘҘ…2đ<ćUEÝńL<)ŽŘF\kČĚ4zćuéęhÓČ8ĐÉ6ůţ„!ތ6‘9[ ÷s š22ӆž_Őm>ăŠÉ§1NËfŒ—u[ß}Ţ5Š÷âZŒĺ ÖICҐˇGčüĎF˜^)ĄSŜ’MußĎ¤Ż Âc~úŤĽÓÉH•ĽfżÔç=;äÎTg“˝ Ł!˛‚uřł_ź_ţűŸ~Ux.ö$ç8*Ŕp‘KZľLH6ٔĄ‘ĂÖGRÇç‚ßtÍ4gH<ˇâÓ~äŐ!ęăjÍ"ŇC‡:gŕüŠÍÉF_G–ĽŽžüéÂčßQ‡Ü98Ľ°÷Á?[[ڔ AăŽ}Yp\á9p|ĺ<‚ŠŇrEďaD9ű ĺÖ/yąčőúČ\+Ł˘ŽŤôü‘a ötö0í%˘ŠŃĎĆf!‰Ă›ű1ŽýĐ: Cç"ĘŔÂîgŞ汏°` 5ĎVô€a(tzqď%yЈQX‡´ă„C^m9YÔëöŞmyiiĘéűÍ+ŔĹ`šČ›7"]`Ÿ–×ßcYśb™‚:ÜŢnáüˇG+sçt9lŤFÎ5:Őł‹X›j2<:!=ö”<ńÄsrv`DçIoĎ\éîiRŔŢâĹ ¤oŐJuÄMNNřq! `ĽXlÖw‰â‘¤ťÇŮ*:Ú}t´‹đ\bžůÍoÉ#=#‡Ó˛çĚí– WËśm›•-㣡wŽŢwňÄ)gř;+űŢ8 =ô°ěÚuŁ|äŁď—ĹjL4Ś0=hŞ ÷„ţSgĺŸ˙ů[ňĚS`U€ÜćÍëdÓ㠘ŔţşˇÇÎb‡tYÔŠ"/˝ř˛Ű+ŸpeľéxpĎD™ď~ϲműzY˛hž‚lާýfŸXÇ>XQ WQ&ž7'|%Đ%vnŁUą :Ş)9çiJ‚Ł.¸×żŤßď™:§őG"ŻËŔ(0Gľf){ Ĺ¤tYŁźcăĽjT*šnˆ†Ö4Š–Í§kťů!śÄK$qűRŔÇet|Z‡&äŕąłrŕȐœM€déź0öž 7śpÎA*Ąft‡“^ÁPîš|Žů–„z>Ô!Y0ż AXYƉp~†i~ę▒%d; m@á÷Ą>cůԓŹ/Ů B=ŐŞuëď#pŕ'Ú ”[$m–ŚčŠodë“íŁ,cGÔĐą2ۂ–핪Wń QXِ~fjjÂ@(1őnA™*Zg>ŽS]›.aw€#ŸłTAşŞyĐ`dP"EôxOd¤śˆÄ Ľ˛ť/ę–(ßížŮ$qě,§ÜP.+Ë pHi‚ÂěZş;űç’z`NŕźĚľ.dő`˛Ďř9@ŒěXă¸˙ěpœ†ă*ëហa'IŞĎ8ÓúDŞ›X>÷ŚĐx HŇÚ&żô/vɂy=Ę\„w–;łáäëě|vúła/¸ZňvŘ Ґ†4d6 mü°…‡`Âp]§ŸöÚn°×ÂY>„@™e+˂é(ť>~˘ Ří îOÎý€’ub9ٔr8ÇÆCß0|Ą=`Ś=pX^źĽ˙ öš.Üׄő üÉ6˘żĐNöYĹC6‹:Ž_ťÂ2yĆFP*|ęđ/ÝpĂ u 弟őâžČůnCœřŸŐĚ'ö?kRŚ?ł9Ďż/ô3ű{V.şřÎ źDFZcĐÓÁ‰ď0ˆáÜş‡8žˆžá&–1 ˆŕˆĂw¤‡É“O>ŠĺĂ1ç(p$‚:yëÖ­:Ap)éń<| 4TrЇči\OG"ęÁčmŕŕE=ˆ8XĎ8§ ~ň-_‹áëex5ÔWZاW˘ogBłďďŤĎĹĘżœ2Žôť zó‘ÚY¨ŽhFžŢfżLŃÇ=ĚYŚŃŔ‚Č\°˜ĂĐ ˜¸:ƒN\;sČp€g#ĘebĄÎ€n˜ *č(.R(eČ˝SGŕűoźQ#!X ™ ôњ@—‘-‚ č'˛ahAö´ߥ=ŒˆA :`ž‰ża1'PץhFȞdƒĂ”¸Žş™ě aŸrăÄ|\4:‘1í!Ŕ„‘FĚă‹çĄÜAÝÉPÂ65¨A'Œ@˙ŇH…ďĄ{ąQ@ż#eŢ 7l#îÁs!Ü4 Ţ!b“l 4Đ2-îáڅ6âßcムÚφ4¤! yť… ;ŽĎWZ ăgĘ1JvŠ5‚ëĺůö`oeĹ:e˸Zűd´ką9LK @˛Ţfiňq„Ń%šbƒN3ńNƒČ;qb ˙‰Ž_ĆQ[Łs#pЍąQąĺiď IéýŐ(ŕôłžJLŁëŸSR„ôâa„ŤőŻEúj=˄Aję Äž }495)Ľ¨äö°-šJNŢXÓ8#”sÂćjžâĽfTďiŰë@Ął Ő4Çm­Î¨ąúJHž9uÜ@ŞŐJb€ŠűÓîľô(9­3Łw Œ ëFŁKčĐbżĽ4ů•:'(÷úpNNZôć/÷WLŃŚéÔɟ÷Ě%挵žHӄ„ý@cž‰œc9'˝"sťDzÚ]ű‹ŽžľœčÔˇHg7žĐ˙N9ŚĄ"SĘH4yč„LŒOČüy`łčĐóIąŚ=÷Ź„rćôtÉ{ďšËćĘ÷ž|Föžv@††Ýßş”R?ŽŇ6uvś+řc¨§Ç@˝wt{3&$"ŔH”VÎ €>Ţýîwɢ…Kĺo>ű÷ňş{úĄŮƒ ć/˜'sç̑áĄeŤBj Żqž‘mőšŐęhE ÔăiÂÚ]0Ÿ/ž/ý輳ŁKţč˙L$´ďÝßćϟcLĺŞ:çťťĚ(ŮŰŰ#w˝kˇëˇIŮŕ źşgŸź0ůŠ{ć€<đŔCš~k׎M˛Úż*ŐRň ¤¨Ŕü.)+EIÇ*XgpŮnÚÍ îúŚEĎ%Ec‡‰BđSœč… AöÁ|60ţó içh'¤:]ňú˝ęÁWŚâ8Jć].˘‡.JÍ‘Ľ8˛Öb„ëWMyéxBj•‘ą)ésg™ 9xtP^;0 ýƒîlRŠi=ęAN–Nl<㼐ŻHIœ!zbT?ě°twöřłeýúŚFŢZ|đ!ť††Ü ™L ú,—Ś^b]YNhLϖIaš!řƒĎ¤âuźFËÖ#ţ O8Żb­ S‡ŘÜkN ôůŔ)ĎţNŢ[°n„4ŽA´gRݞž! –¸uĄâDĹłł(§bk(֌ć&œQ[ýţ$§sşˆŘôƒ%ĐůRÔ1†šx‡€_rrTp ŘU0„ËU7÷*S:öČçÝ<ŹM¸Ë`cďuh—¨°ÖŠŚ!W€›ľqaş)8ȧc?XŸÔTD•€?fxGü>üßy8^č6Üp<„ýJvýČ.8ř÷°ŹzG‰Řž ǔcMú|ŚS ™YҐ†4¤! ™M´‰ K˙sšß‚Ÿ‚ýöUŘżsŸČ}\¸Noé>™k1|#zĆqĺŕƒ=,×kŹľőç€úľ?\ëiÓgzŹŰđë2ř$Ü_†{ľđţ°ŽôMa˙HVlgŕ4˛íd™Ü“ÍÜ΄u>•°>a[CđË#sXÚá+ť.M źČ‚OCĆľëĹg|)2kpbýCy€Á‹ĹĂ5Œ’!ł' éáqœ’D:á^žxâ ĽĘF3Ž%˜Ÿ9DcА…‚Ž[2i0â@ 8CiP$Ő=Žg47>}}}΀ąH'5œy¤ČG”󾜊žMevHÖ`)wė€ÓşŔý—1ŽćxÁźł HÁĂ˜3 t5#f1ISÁt ąHPŮ˜ŕ Ěstć5ţ†9‰9 =Áü͸:†Q+[@•đžÇłpŔ{öěŃg \ęPĐ#ßYŔ^…Hâfu ONMčG›qAąůŔ¨RŤU‡¨uţT—ZEű-RgW>Ÿóy덞51ŠÝPZěFí'Ŕ’ŔPd}ÁÔ+t úńȢCgß]če×;¤0 Ún,Ô1¨ď!çjŐdü`Ü`<Ąlڃ#‹ItĄÁ'jĐĐľB'­ö(‡ŽťFŞ2<ËźŽœ,š›“ö暽_óťń+˜”ůJ˘ďúĄŠďáˆtmרq°TŽO–daŠWćö‚ő˛#IßT/ÌA˙~‹s†Ţ´s›;K,“Ç{ZüöcîrRY Đ'MÍguύ=&‚6VŹX.]ÝŠ!ÍRF,-…Ť7Xš›ŕđ,ú÷ZÓÔ§ű”†űŽírčŕQéčl—uëÖ¸2űdÎÜ^™7×öѓS%' j˙žƒrâř)yäáÇĺôéSz=ů‚•rčęěÔţ:ÝĆ Ěśƒ!°,Z4_:ť:´=`Î(€áCqHxeW&Ůś}ŁŹYŰç>+ĺéď˝ ť~xö™—dhđ”D÷ć\|t[MÁĺi‹xoi5Çss›‚P:QălKsÂ$Ž‹älě3É?‰ëޑţŮďU@çÔŞ>‚9ś1[Ž”th ›Z”Ě˝ČđVú3ĺ$ œ řLÍÚ‘¤ÇwTŤIżÚXvĆ㱒œ:3.'úÇdđ R}ŒĘą~¤ý˜Ô”!Őj LĐ4-žhHľT)esp.#ĺGww‹>×Ň •]€׏,˜‹ú=-ťœŒůl”uE}ř2…Š/,QސOXo¸Žp󽄬GÔçÔEá<ÁaJ/?ŐjĐ×q˛fńŢäÁ”•c¨ϸ!čŸAŒHTĎ\ߐHŔćÁ>Ť¤ĽŔA>óX˙îŢÁ>ÍmÍĘ0‚OľćSBĺ|żFq2şáäÇ/‘Ś•Ęë¸Äőˆ´W`Zä™+˘(X+"ϘRIÖc€*ÄłNä"ń€9Ńő<—wçű¨äţí쨾N×n°ˆŮćĘswߕC$Xú!'á\NÇM\ˇ—b‡ ‡,cI˝ŁĄ¸“Œ‰ ˜Bً|šuN+°ŽÜl¨eťż•ü|ƒŽH×.łŮ´Ŕž]4{ÖŐÚ§5¤! iHCňNJKKŤž‹Âs:ÖEÚí!L˝Nö됹"Üť…€ÉLË´nŘéáż đ€űݐ1-Ôrڟd˝h‚+ÂO–i"ËŚA%˃Ý~$ԑ)ö¸É~„ő ËÙĐöî–:ÚX ç”î‰â یza p‡áŤÚž}{$u ™4f‹Ě€˘ŚIš‚ Ć€—0'˘ń óD„ˆ!$ń7¤ÁóľŒ4!ˆB§S#RóÁĆôřĆDrŔ J–b5< 1w:ž3çܘ"ż.tĎëî’ŢžnĽŹPĂžnÔß.ÇÜ;ĺ|+ϝ ‡lűĎ׌7ŐMoń•^Îřˢě.űYź7řw“›{ ,ĹKËb7Wöőɧh\˜*MÉŕŔ™é€ů ŕtFUéő@`f ,5X„‰’$ú‹tĘáÂO†,˛LI‚ň Ÿ¸ŕ’ÁiŔœ`ĘĹuQ€MeĂč=CC tž‡şăyř05]Ö`\KŕY ŁĐ&͙+NA]pÚČţ Ąu‡,č'€W ŹĘB{\#BPŔdűÁ3˜JĂ0Í l?Üě0Â6Rˇóý˘ŻQÄ  @>_ű…yÚĐ>¸đ|¤sA1°ž!Ř#4`ĄďäAÝđÎÔ%k Í¸ýA@ žE€ ęÁ~K iHCҐwF8 íQTĽĄ}Kh,‡đZ–FČ_Ź ţN 6ÇŮŕ‹ÉLuâA8ŒŇŕľW[bu4DҊgű˝ ňŒŁ.–ş!iЎ`PŇ#5Aě7ćźqď żgĄl¤3ÓW¤ŽŠš¤”űyĽ&W#@Á(ľë#>$‰şĆs™ßÝRž[$:ŁYűçygbŽ ÎeÔ_ŠÎ}tzU#~cO§îĘö)A^ő 当•‘ŤSSĆPPf†|;ŤA›}„oTá9‹†űŢ"bÍëjř0Ż­—äľmč_Ś'€3Lc9ŇŮőßqĚT+öŽ˜ţß۾ΠV)'ŠăÂqkiGězž;´)pTŕŒŽŚŞNiŸ!—Ňꡜś[قw_ŇTpÚ"ŞÚ˜ÓZę FtVáąU˙ŢŇš-u‘ĹáX˘N0ƒU$§Îdޘμ,ěEZ÷ #0ąŹ 5KĹPóNóšűcäú)@á¨DŰsů˘‚&'J˛`~ŝń;•]‚u͊YsVΛ3GŢ˙žwťóÁ<ŮóňŤňÔ3{dśe<°WrôŘ)éu׌ŃԔOěf,erhk-J1_JœÓƒ âŘąă:VÚŰ:äĆopgĽ…Î>Ń!ŤWŻTĆ ÝO‹9[[ňŇޚwgŻyĘřđwwuyN$#˛ő†MnŢăÚ đGÝ|ŻĘ‘ŁGexdTvßz“łľ,”wŢ ŤúVHG{‡2ž( ďZ§6Qč\ÓW`™Řźi˝ë‡ňuűl̍˛ěÝťO-^(ĺił üŢÖޢ  €íÁRŃ vÓÄËţŽůţőúD ˜Ĺ1PőźŘRmŒl€ńôď˜C)Q”ę6ąvEWřśRËPňŠľXť•ř˛4áƒ=ÓéŸń‰Şœ<5$‡ž–Áawţ™’Óƒrň̘ŒŽ‹Ľňą7˜wsŽXČhý´!JYú¤ŕĆJXSj{œĹJIŽiďőz€Ü%1W%ĆŐđ|2 q^§}nŽme# ÖÓ8QóőŹA?DŠú&Q0Š0ŹC ȝcD§m0 ŹÂZ!qÝ{!Đď:„đƒľ)ŠÉJ454Ľcą˝­=I?C˝Šĺ@Đn¨u˜=C}$Şűʓež“,ÚÔTĐ9  ČďG°ć(ƒŃ•Z [ ĆĐżŁ/źÎ¨EžQŹ€:ŤSýžH× eWąľëu,9Ú˙E˝/Žz€ŒÎ Ż×dÜőí¨›s#n4ˇš‡š3vĚĄáŔŃ0ęĘs?Q^$IZ,ńia˘źé¤Ř݁ĆŹP/ öN¸ˇćß×q?ËlďG&”źgnŠü8ôĺúqŚiOňĚpFŽJÉâwżîFąÁľtρőˇf@#0ď`ţé{Ór :Ď~Ëĺ-UhäßusSs=ÖŤ! iHCҐëP˛ś•Ô–?•œá  ‚÷Ń6‚˙oöţźY˛ă<óýœˆťß›{b_ ŕ"Ž HmeUVf’ĘF6cVSVŐÖ3őß´Ů|ů3˙Ô|…éîĆJ]ŐÖRŤŤT]’¨*IAŠ$H ö…Ř3šç˝yˇˆ8§ý÷žţœóFäM H†§Eƍˆsü¸űq÷ăţ>ĎűźńĽü"RÄ’lôRX#xżź"~,ěXeŚA9–<â˝*wĚ+~ĽÁ;ů)ô‰ž‹ůi¨źHŃiDNţ¡¤`Î{Źç,qTďłaýTž×^{͢>€—€1Ĺđ"1ż¸ďëٛ!Ý4 n"7‚7Sŕ™Œjü&CŚn"›AçT܁Œ€ €~tZ"ŮČ÷÷˙÷MîÓbĄĺ #$ t*@4ÉôţóŸ7Д¤ĽM4d žSVÖúŮ`čęQM­Ě ľž~KVżÔM†[ß h™šŽ,КöÂtĄ,ńL•röžÔłŢŃŚœaF”TźŠdžVłč˝w{ƒÖ8ő réƒaióqÉb2™J…ß?…iqŻxîŰŇŇЀ4Ő÷őxUBy,­[žť{„šťfíˇ¸°Tň`Ű5\%Ł7*EÂJ{r‘tFůˇŤ×†,ÍşíQşűV_Ďhg„ďKŽÍŃvxLŤ¤Š+—ŻÁb3ƒŢלvň:ű˜‘PVxŮP4wxĆôšľ•ĺôŘמ˜yčţt÷˝w§˙ýĎžŢ9}Ś Wzö\Ţł<ůlŢűœK>úŠ\W(QȌÝ]BĎlaqmmĹŽ{űˇX]VWVM â3ů\#ÔĺúŚĚᄔÍ™ ŚĚqĎݡ§/|áŃôƒ'žČűŤóvoÖ7Vr}ďHÇr˝Ž?f$š—_y.˝öúéňĽ- áą´¸bĄSp~ßÜźd÷Äę2 ß8šŠąn4‚TŔü]Űw@ŕšóŽŰҋ/žœď7cŇűaťa>˜OVWó\ˇX—žăá9|ş¨œUŞÖĂ\M…´P›­ďžZšŞxm­˙şwżż[?nĆÓót!ňTu•úáĐöNméۜß*ěLęˆ\M[Î+ ź‘"ňŸgĎmf›ĐšôćŰŮf´™÷9—ˇÓš —Óި- ˇçeĄOş~ŢLí­b#ő÷â°'çh|¸˘Şö@xňŒbżĂ<Ĺšqß9űl”BSümJ  ”!ŽMÉ^!ĂAn›?Ťžˆ 1_‘&SJBŠŰŰŤ]fˉƒp;UŚ8‡¤Œ=*Mĺp´×)+JŽyeyÍúŸF˜ƒ&N,I6_ö¤˛h”—A>Î˙žnXîÖ4jg)%Ž4gŰ=čÍÄ}[ĺz5mGb˜%ȨŽ>žŚÁ +C= ÷ )s`c$ĎÂ(ŠöœC]É} OÓîćďňąƒí|îb>o%ß őü]śU´ŰyꚘŞÁ5+Ó ’JLcíŐ$=ĂË=KU?ŚSSţöç–‰­Ý#WӐSžwźĆă˘ja㯾gôp’ˆ‡UâşF˘0âŠP#Ú˘LŰS öí`aGwl Al›ě;Šc!ĎŐnRxîA°hu^ŰtĎÝyš§yš§yš§OrŇţJÇäk_óČŠ,‚u%k÷#ŮT{ŃI§TŮDŇPtěďŘë•WT†˜%˙öűŕ~í,‡IpÎW¨uĺ§€Í'Ÿ|ŇX8t: 2ůČjâÝÇpőÁÍďÄĺ;Žáâoţćo,~h¨Ç5%[/°Ž2qݨnř7—qŕňŠÔ‡węČ1’řçw §NÝkÂÓD}÷ěťž!h§ĽMçéćOżě 룜 e¨8uęTzřá‡;/LŒŞŒ-ů ĺÁف2‹PŔůĚ#ŒŔs@xPň°`üsœĆ>ó ƒÔŃE‰üůŽqЇţÄ6ÎťR×ŘÎw=tîىbK>ú¨Ť¸ëŒĘGţĚ5(,p>ÇC°`~”!‚ÇSVĘNYIœĎÜ(RźsŒć(󤘥O8OíMűQ&=¸ŽŠƒäzRŽÉœ§y‹ă6C€€Â•ˆ4ŘÜ#B4‘4wq/Ed3O¨b "?‹}ň¤•:Ň.”Wd 1@)m%/`)#×$< m‹bő"/ꨐR\—c9—róRř [´ŤŔ3ňŚ/Q^)úN×™DĄO´ˆâˇYéřyš§yš§yúĺ'ž!Ě˙ńŮőAS$=Čh ďŐJŽ8(ńěÔţEĎÜúźˆIňäŐ3gbj=H#B‹)YěíŚí˝í ěŽˆŃ6BZSH  M >ՁP16ŔŐB@ĤĚM`ĄSźŠ`]ÓoâÁ[eŔ5 ’ˇ‹{ K‘˘ý*Ô.œLa —-˜LŠgKăţ÷”IëUWC(`_9֍Łh•§ŹŻäŮŰ{ť/,,@´łăĄ/Ľń‚”đŞ˘FŽ’Ĺßj@ßQ1ÄD#Tqł50Ż)ÄÎqăR“RżâŞŽXaę)öąĆŰ­í[ýď˝rJęÂŽŒ átŻkŽqľĽ@iŇŹ\ž‡eŠťşÔPhşvHŇNל˛˝ u¨18™Â݈bŕ¨ů¤KÍÂ9d RŢRłĐßŰ8ďë÷éťmÚÓń&Ýz4ßď˘l`Ř[áČŇŰŞt0ˆľ„çŰĘűí\îAîű#˛˝›n=y̔"–:řBjP¸şę€Ë:÷wÔ-ű7żžîšűŽôď~’ţë_żóZ˛ąľă^`GsžűŁÝÜ.ť6XC>|$ŰVíZޗd´k‹z-SH0mX/-d0ĄÚ™ü˛ń Y ăńőÇž”žyî…ôŔw§ŻýŤF€X]Y6ť…ĂW—ŇáCé[ń7éÍ7Ţś6x7ď9Pąřԃ÷f 9ššKZQ YZňş3Ö]€ţ%ď.ŮńŻţŐ˙ĹĘś˛˛`kôőUKRyФ ‘ŞŽPԖqRt* ŃB^č“BÚ !& đ –KŸlm|žÂCc*űČmdš4H!rČTßí§]‘ĺ ‰ŚĘ|ž4j”YD°°ßPPĽ˝q›Ţ=5˝řňŮü:“ΞßĚ{‹źˇŮY;Ľđ/ävp<šéçqŮéůŚgU ie}Łáľ 䍜íÇ,/ůrL`Ÿ$[]”6ö=QÓí#Ł—›öÚ;EE‰Y7IĄˇúyĄíö–RёS…lkąÜ¤H¤ŠůFŐżONŚHŐ´z…ˆ'Í !ÖËŰ.hnĄŒŰ•´ž615 樋.ĺöŁ­V‹Q^Ą—\1ĄŻOę<Ýs3?ďFœQŘĘHJQ}ťđÂ"ŕ•˝˛ŠH¤iՐY"L4Ŕë¸čMŰAy¨- Řó ńçłóMR“<¤ })×ť9ǀ…J=ú ˘@$jDĺJ­ÝäxĎ3˜u#y)TŰlx‘H°ĐšQýBŘ.ůqźí=2Ž '˙Ů2DbˆáJ„[税1$ˆÖé1™ň™ ˘źHrţUhőŮqMCŒčoŽ Ţ^ţ3*곥EbžÚ+{¸łÉukě›!Ý4 6đi€XXźd$”Úżsœ€Vu mü´áŔ8ő˝ď}Ϙ8t’Ç{̎ŕ řF‡dĂŘȆđ€|wżöľŻŮń?úяŇóĎ?ŸžzęŠD0e xÄ@đÇŔa3^~ůeť 'ĺĆ뜎H˜ž‹€$ed%Žéă×ý×í<ĂgžyÎBUv7[hžŚÓ‡yo?Žý†ţ‘ …Œ° —<Řب^ťśŐ3Ž•*c›ů‚ą¤9ƒsSŒ5$Mţ ČGęš[˜W0‘ócPD.~‹˛Ş$ćʧ!d)ň…4ń­o}ËĆ1c—˛âvÉH%ĂóÍ7žń űL8ź#ÂźÁůœw×]wĄ@á6¨Ż¤ĄúD‰2s=ĹőŠ’Vԋď);çGb˜Đvňđá|~Ł]5/Roę(;çČӗc)—îť ‡Üˆi:`aŇn\O!LäáKň<á^+üT4đ)Ü Šúžcôě‰F:ćnŽ!)x¨Ţl yš§yš§Obšš$˘łÖŕ„” çśB@ý"ˆ R˛ é™ńAň`˜ĘôQúŞţ‚Á3ۧĽĽtm÷š NœĄĄˆô§1ąÉw÷:‚BFx^Şuyć.vJT¤iŻçŞ#<ŻŞ“ń—żžÇřl†Ž É袲ôŢź•&U•ŚŒ“â%Ű)r'PÚ¤JS Hô—śŽíŚk—Ó—żňEs qĐť÷`ĘG–{•\!Ɣ\äŹáátĽĚ)]¸x>_ăŒ˛Ż\˛=Ř˝§î1Ĺ Âă,Ż,›*†ú1üČńôľÇĽ{î˝3ýéüVŢ ýMÚÝۡ°”˝ĺäąB„áx7ŹîĺßŇUŠ••Ĺźď¸+ˇs'× ­\‡9VUTęøi¤N)„úhŰNĐߏ­ŇŻ…%[Ü+3Ž÷­=ńjw…šŚÓŸč¨6j”ہk{og…g2RS č~O>>ůŠv´7ť”mEŻ_JO=:ˇűfçó~mg7mďnť äŻä÷rˆâÁ°ś”uoo”űçnÚ+RĆ2"CzAÁ$šgÁv˝k|ĆźâďReěń e?¨ĐŒj§śíI"6jΖC€ňUšUŇĐ•q8’@â*űŸl€"ŰÇ:Guĺ?ÔSĺŘuzŞYOG7žOŚžĎ‘‰*FŔĚmϜ.5‹ ÎwĎi)2ŠŹ"Łžž—ě%ĺ`˘9֟°uQ*œš:M]S/Ýżhłˆąź)E…ŸćşőGœşŹ˙´yĆö‚çPKßäŢqÝŚí@NŒœ8},„ę12W2ƒaś5,’÷‹vXOKŐą´XĘoć<˛˝ga?ˇ ĎᑩFĄQ5=ůCÄ9Ťłœ amRš—,ŏčsEĹĹú˛‡ŕé8JV´ŚSOöYŁąçš‡qŇĽĎŮů~Xe˘Í¸?ýČ#FR`<Đ˙ůîŘąŁćyE:zôˆ•ńĘcŹđY`=cPŠŒ3ć ĆşŒ7tSĚ‘}G9P;  2j@ ŕw^ČSs ¤ĆŹzPýŐ_ý••ď_ü‹asĺĺ!Ďř§œ1>ĺĹJ™Iü-ň$ ćłgžyƎ‡¸ĹüÂ<@ŰȘL˝™ ˜Ă¨'‰kŠB2ݚdŹPYúÔćyđâDŃ:€ň٤đ€ě€S ĂE ťŕ™cŘKŃăD ’›ɰâj "HřéBzž;tâaPdđ7C„#>ŘĆ˝ü‡ŚTĐX 1Đ~ń– Łé‘DwPĐÉŁQk@ÖVŚą˙ŢjpöM™˘˛>&Ň&׀<@›ÄžâF% SĹpŐ:čË:ĆĽĎ{u–I×6˝ń§÷DtůŇŁQc˛ćj;ěň¸îă캢…ú ÷ny ˆâ<őÎęÚU dŔqŻhď´#^ԄÚÜşv%ŻŮ–MůŁ'jTF&ńőf2rÎîîvŠáÔgŁw¸ęBeđw/QęŤŰuş´9N÷ܲ˜NAĹ €˘“A)k„1śÖ’}€ěË5üŢ4<Ď jžsNž8š×kFRp‚F˛|D‰ĺ ą˙§˙ä7Ó>÷pú˙é/ӏň\îkFš|ĹUé~üÄ3é׿™í!‡7Ź|ô)淝=ë÷ěXŰîîî›:Ę ^°ö˛ćh+S޸˛u9çw);{>ŻŻŻ˜˝äţOżoáEÖזŒ`!RĄILq$לE‘ĄC×°ľńg?ű™ôío?žÎž9ma<îť÷Ž|=Ÿ—4ż2…z>ěŢfŚn’Ď!mRə›vŽ!fÉʃ”CűYë%ŠŤp>$ęlá=&´ÉŚ…!qU–B¨h=\Šßx(ĄŇcťžH]ĽX"ešřjdhŹ qŚíĽ˙ŰI›÷/ťéľ7/Ľď?ýVzý­KéüĽ­2NšČVF¨XČsĘâpľĚ7…ťŇ˜3ŞĆć&Ćă!îe4śşš ĚÉ>vú6՞,ÎŰJ"ÉH.‚ű"ž=RŒäš‹—Ô…8VƒhÔVžłőy=G4iüřóčS9 ‘M*ƒ •I‡kSn~Řăďťďž+s›m*_o÷WÍĐ6 Lô(ń8OŸ´ä^F5ŮăĂě;2đœ:u*ý“ňOҧ>ő`úŮŤŻŘŘÄP„÷ěŮÓg™qĘ8‹cŸČĚĚR?`îRÇ1áˆ<4&o<82ŒF$„üڇjmҏŁnţA]˘×aŽâ{Ć&syěsÎüÁYƒ:Rv=ÜߌcÎĽ>Ri zžPŽxŔ^,&Pe |ź›§X.s‰úBÚRHęHĚw\ƒ9RĆ,=š~ôTä{Üz˜ƒ˜ťhSĘˋş0Jń‚Ďž˜K㢇şŃ&RÚáţPćł#ŒshH(ăo‘ć̨xJI݈űȜH]ř[’œôä­hňĽ\"Çh&)vŽÉgE~áEšfF‹"ž#ę8‡kň,ˆ‹Aúe”$“âĹ<ÍSŸćĎäyš§*EňóśÔěfcŐGZŞł˛âZcGpčŸňĐfY’’QŽ[ŔK$‚ŤLłĺů(’mŢ'ÍTݢ´§NŞŘ+ßŐieyŐ ř1‰ţʁ|ăD ŁD„z./­$-Q-â{íŞ5„'F•)7ň ‹BŞZoĽâ+`+­Ł"K´%”Ţďŕ“˝ńG^ÂUjuO XSWSĆ#˙Îó§=tœƒžC ŸŔqޤuĹÖžnňű=˜A<Žź2AĂşľp-ăuńló=pňÇČHU5.yś3¨“zuČąš*5ăRßĘH0Źy ĐhÔKŽî›‚ň÷öА7’ęB´\)Ă tŠ-ŞŞŕ-ŻhÔ˝˙ ƒş°Nä}căPrŹęúˆƒˆű]Ž÷LźVŤŢ!ßČĹăAúٙlKا;N(ć6¸Ň„ YJ†úÖÄA{ĆóúĄcXÇB†Îă–ÇÓŃc‡s˙_îÁűÖCšT׊6řšýŽťîL˙úżý繆˙>}ű;?*€ź‡9wi3ýÍß|7}á äľň Sď  ×śvŇhœ×­—ěóx4éú’Ż˙ÇFh?qâXşăîs[nĽ?ű[y_óf:{ć|úŸ˙ý˙š~롿ž÷#_Jëkm!ćXkqaiyĹŽ5iiëÚĹ @nĽcÇ׳mäÁôWőí܇×lßpâřQŰ_ •żśî{_Ÿ‹8ӃłÓDŠYREOXhÍ%ŒŻa76č[ôˆ5Hřďďďć[ąYúŸë^dŽ$Ӈ ŠÍ›]Š"V$ŹŰZŻm,?i|œąbU;6Â÷ggw”Ţy÷jzꅳéŮßIoŸ˝šöꋲ´ŻAíóÇŇpЊͨ ľžĎšśă .}ÉÂäyj}ýP—]I˛bü”Á3>ëäŕűş Śú ‘´§sőœŒĎ,ö…Ú§Ék}sÖŹ:L?ŽSĎ>ň”˘Ž•a;†żĚ(~ĘS JŞc];é…ĂJΒň´ď%_Ű6}<é*őë…čô…2ŒňŽĺˆmfżĺšˆ.J]ˇśP%Úą9ԉnm7Ż­ŽotŽĘK2Đj3Ę&†݃˝}ŤçâŇâÔú M&]ý§ ÷ƒň|œLÝżř|śkŽöťĎšcůËB2ŮËĎؚđůú<#šžT ŮbPԈ<ƨĚkŽ`šÂŽS2Ú$ˇsMĎÜ~élO.ĺsĺrœĚç<”˙žšó8—Ÿuťi0l0Ćú€gšŠť”HK#S0*sHëęƒšö–ń,BTU~ży3H]TŹ&ƒňř›ägôJ;F&a~ ŹŻÎóŢRZŽbXËĐĂ˙4Ž|ĹłˆśŞ2´đ$VÍŚŹ3S.w;´ŃďJYökšďçižćižć铞ú˝ŽlUˇ9räPˇŚQŠë¨N%´^eíŽĘz“=¨đ…HtŽN1ßHˆkD0~—âśB‚DlFŻëU,{r˛Ę–Áڝü¤xŞu_TˆĐwq­Ub}ą °^ž­sŐv˙öŹŢ9Âó§ůáhäŠĎ}îsÝő%>p)eö>D˛ďŕ(7Kú V´ęţV}€÷ęŸőŞĂť^ Ě:˜yń›YBňMzœ Ő1úđú ÉS@„ŘI˜÷ä“OŚoűŰf\@ąBŽcčМ#”w!žĺ§Â}ýő×í]ƒ’üxIĘO–M$ŕœżÉ“sŘTČđq}@8 VH ÖŘĺyŻźňä­ (çˆr ް*2Š<ÝđFyňЧ,ż(‘Łôq&Zü)cC¤ )"DهÂT0Ž2(<…bTńcBăŠß÷>ˆ‡Ą{\.Ůü!Ĺ Č '“6ä:Œ9Bđ#ŻÄř'OʧšHR ¨ĘĂ|ŁřcźCç2OqœúmA9 „šĺ3’‡¤Ž§žźh?HRń ž“7‘ÔB(ŸÔ* ¤p´0᚜CŮi/љW‚$i8–š›óh/÷žŰé8ԋ9˜ź(?yÄĹG ABżĐýŕE`UťŠóӟţ4ý—˙ň_Źţ_üâ;â„ŘłR8â>Ň~,œ¸Ÿňŕ’ŇmŔyŃđÄő87˛kiКĐδ-çĹž#R×#˙Íó/ĽCëŤĆÚEś{ą„ŠÁPęת̋U†şŢ0:-ÓőQŻnŚçÁ~áÜî¸aq:)žFű°‰Gn¨ž|őZúÔgűŔyUrîZŘ2~řá4Oó4O]š“=EpgöťxN<ć9ϖé ňÄďIł S­~ŢtéĄĂ.uä’(/Ďŕ?úOßN˙ăżűVŁŤ)o8˛ësÓÚ⌳!o@BŻË¤Ź\…ÂA"'D&٤PŢ..űÂg4q )á5䝟ŁýžÎŻĺót!tT˝§t$ÍS'žF‘Ôü‚+N؟ŁŠ{¤üg @D“ë Ţ%-ď!Šj@žÄhěRŁúMń´ćNúöđňĆť§ú ş=‡Ę~ŽŇŤ\Pˇ…*…×+’-ĺ#@“Żm†Sýf<Ţďö¨ąE1Ä×ĂĆŐćN„Žĺöž!mďJj›îџőĺe<˙E’ŞĂ˝•ǐŔL[_Ś~,NÚâí-f×;´:H÷Ţş”ŽŽłžs˘ˆKĘ{˝: ˇ&ęş'wpoť%ď­Ľ[O3bĂĆĆjZX@,ՁűѰćüßţ߼<ńl:“÷!ŹCÝ>śkyŸt2Ż_o/6‚˝´ˇŰŘŽw2Ÿă6ŽC‡×äŔË mş–×č˙ţßýqúŢwŸH;Űűéx.çޓ~롞bvÖBŢ–Œ$EÖç.žË€g›Żľk¤HČzžüĺ/¤Ge@x!żÓëÚjvůTՇéR4]9˜Z›Gý ^´żé?*˜/|ţIÔU„‰“şę˝ëŞZ şżźú< U‘˘PĎ}Łů:é"%ŮA{˜ë˙ä gÓOž=“~öÖ%#ŽšqŒžŸshË?ůüU•09|M¸$”Q\qŔ śWíea&mž‡p“ÖÇžîŻús$ ö„°^ĺ@íí\2nKý ŤšOçÄąĂdo')dúŁBWi?Škk/ű@źĆŹçŁČq ű~źíÖĺšűgŸá2B“â~UuŐ5ëś?F×W[(W9ňĐłeśĎŠ5"m!âˆlZlÉÉsť{FâçĹߪżŽ­çŻíQ(Sn űˆG1ź‹ÎSŐf×zŚëť¨T2KÂčˆ#ĺšî=ž÷/™˘Ď!xCôŮa]tŒ'{vëŔäűÝ2ŠŐ„žŃŒm^7‚ĽŠGĄŠ“Ű+ΡŁůëežÔš~oçšňš+ÇăÝdĽ1EÍą 6ŽŒű–űĆŘBżL aŠęĘDyy)d‰ŤŐ4Ś „ áwěY”Ÿ'„{YZZMKËůQFˆj“=›PňI%‘Šb”˝ź9ž[ŤJ <“í9ԖďŰn ăĚ{NA–ü—ż{*|o [$[Â;7 Cŕ! $ďéXlBR!W0X‘‚˙ßůÎ‚M‹T"ÍÔ=ÉO×ÔF1zŤiP/š<ŸŮńů’D?ŽÉů€žtX$Wž~úiĺ(˙ŠS§ěz ş¸Qá<ŤÍƒpRl,Ú@uçDžW¸ęG=żöľŻe`oó3ö™˛*V%Gëop:Žyú˜¤¸p˙¤&™¤Hl Ož8™žöŘ×Ěă ăŃťŮ(xuóŞ3ňm@ŽĐž…ÖŒcŒ- Z!AH˙06*´Â )Öš‘ĺßíĽ• @ŽŹ.ĺkܖ~ř”“* H}Ÿů3nĂĎ>/:ŠBc”mé'ĂÁŠ-¨č/{ű[ůÝ‹źUč„It=<…Hţˇ{Ž—šˇqO{ÍOÖŻÂîöâÖ Đ=!Lĺ(ďňkű$î‹é‰g/¤—޸˜œ0Ԛ2‚“(Zóęgž!kRH€Ŕ>ţĆűAUűëëŽnP%‘ź“ŒĚ“J9&Füœ$Ł˘ÚœÄo…đŰÔWůÚľAęÇh4ÔĘF‰TQ8扪Ćňňą.t%„'Ƣöę>üşňJ›×aÎÁ*†óɍ—žD˝÷do›%SĹóT§Î6×ô‰‘8˘w}W˛Ąˆ#rxš5{ćŮý[ĎďËSe´śBéđbçDĹţ˜„“„öŔ1üU §B2‚ ˙Ęoň:T™"ęoő ĺŰ"m"‰ďlnŹ\Aŕ}z’‘,ŠV G°Źś°9Ś2˘J“ÖUlĐ |Ž$œG]H#F˜˘?/'ĎÄÜŽcHJ„" óíôœ<׿›óťšŰ3ĺ HOV^ 9–ű$Cƒľ'TŮÜď¤;†Ml pľo*MůÜ!ăo9­BˆąĐ;KŚHÓÚXž¤ŚH5Ö’}WU ÄweÝyŁő>;Śď ˛űˇ`mŮ{–˘x’A˜…ižćižćižć铗äźĎE°'ާˆs÷äçś#ÄőšÔÓpö~‚Ý>†‘–!bx ‘5řœ $:éGü#†ČhŚHtýúKXŸ=ôáá.dßlŘ ­R‡P™)+ůRWę,rE,c\“bšbůhż—_~ٰ"ÂÍă*L+ÖW6›Y ˝ÔžÂLŔ=Ŕ9Ŕ—n–tÓ,đŘć†rŁD&ěäōđ'‰|^ 6mt<ÇÖ 4#G˛}$…Ű`0˜ř0Œ çJ2đéŔ&ɘ63`Yş9FĚ|mţ Ox@@ĘK§#ž ,uŒcŔiPs<Š%Č5E$„Ô&r*T‰Xě|GÔf‹šžŸ~äa ˇ°ľ•ÁÓˇŢNgΞ1ŠOĘÂq2zʸdŸËŚż-O.‹ŰÔx•|LҜýűѤYŁĂÔoËwŒÓűďż/}ĺ+_śąJ_„4ńîťglŽ,÷j<$}ížWťÖçy°@L1‚ 7ÇqŽËMCę\ŕ›qĎČ.…âz`ń$?˛3Ć?ź˜;“S5żCŚâAőŐŻ~Ő^R-*ŠĚ”_ó“Bf,t ýŒÄ<Á‹úĺ#‘7‰ĎË1(÷‚<šs/HäĎ1ź3ç)>ŽĘI˘.źô€d´``bîÓD›ˆ4Á1J,EŇŚ´1yPNîßq]âČO߉źÂ˝çÍ=•'•ć´ťgžyĆČR LZ0¨ÍɏóDĐ|¨0$+ů-ćtćd…oaFç@f‘žü%ˇ* çˆÇoü­¸fóôŤ˜ŞÎčhŘłˇˇŸűÄâGĎzŢÍÓ<ÍÓ/&ý}ˆ żŹôó–éďCQ:hŽ™%vŒ p˜öyŻdƀ  ëagPˆ`œyöŮFßC~ŕ‰ídö=Ű2PŰ9@t/@‘!ƒg‰źĄ ć˜ń‘"CSÖXłĄ]Ň1@{E˙ŽéÔ,:OŢŚ ONčÁz˙l%#4G•ŹźCĘŇVYšŃ^˙\piBh‚JF5ĽüĹ5 ¤°Ž˘×Ö6Ę›=]mŢ´RʈŔšH(8Mf'“ýԅÜh›`vŁÍ‚…ü€r š)÷`œDX‘§Ź‡ p@UIž4uíăÉŐ|/ť˜zYÓ(Ż:.ÄCŠd8X%U…PŰěsՑŚS˝ĎŌ4(mŞbŠě){ƒ÷„Žo÷†˝Ś+Ÿ˛ľ<ĺ›iŮŐ˝rßß<×ĺ éîu:„šĹ°'#ą˛jœ(PU„Jéő×ßÉk弇żścaevvňZx'ŻyIë¨Y˜*†€^‰ƒöÉîAţíîťnM˙Ď˙îżIňţkzá…Óš 獨ąaw/ˇë„đŞw¤ź/Ýu÷î]űşu2n‹ŇH]Č1C# X/™´FθăŽ[ÓC?žřÁ“(^HgŢÎĆŃŁÇÓĆĄ ÷¸^Â3?ďŠÖójépˇÎFŠ­š!—jüÍÎ?ÝܔŚ=ÂRŃ|pňUQ;1p3Y8"HR×v6 Ôî”rfŽ‘,ü‡ƒşłŽKŚ:“ +-dŠĘŚ#g¤žXĄ>âŢČătůĘN:™âňvşpq7˝ńöĹôΙÍtuu 'uX˙a„ë ŢÝŰé Š2TŞÎF/{íÉ4‡z؉ÉÔŘŘ˝œŽŰí<˝RĚ4OůB¤Ş eţOíSŞ7“~^RžłŇÉ"…‰LGůˇˇeŻ~ĄS˛čB[RaŇ M{6&*ĘĚ>›´ďŒăSž‡jíűŁląBo¨^ľ…ö—ş2"+E‘)Ź]ZÂGěYűŞËA`Ö9A)ŢoŇpaXćňľÎŽ!5DľĄŒé*łć;+oÝ{0Ꞩ^łŠ$"Řu$”ÔՍ2Ňâďí´bWOJŠŹŽ7FIůYŮÔIĄ’&×ăůiŠSôÁŽŘšŇŐŔć÷ÖČ ÷RGÓşú Œq22XUĺőĹňkůčË9_Œů‡ňÍ9bĄŐľ\ŚźŻŽŒ`Ö0w–2™*ĎcTAňř%܇őľI‰m>alçÜľĹ5#V 034Ś[ cR/ŚRE ą„›"DR•Ÿ+…, =Łě¸˘hQ JpmžťÝs“ço!’ÍM›ó4Oó4Oót¤ƒ5do×>RëH$%E5L…-çy-ľ/Ž•BXG~ ëRĺĄüuźžÓŕ SΞEΠZ˙Ć|#é8žkm%§NÖpZăŞěq9kS™­wTęŕ%§[‘m)Ż"Dr…ÖôłÄ •‘XÍă?nXœŇq=ÉÝ}śuSÎźˆs„ńÜ,éŚ!Xpƒä­L’¤ż:47‘Áˆ—6ä 60šŔđ6—w9y(ԇT$x‘“ßéh1Aސ§´€7ňˇł€8 &ŽI^’ńc`Ńéř_ţň—­üÔ €•cćčŘbâYÎ;őđ+pŽź5‰ˆE9¨ e1ŠąË—í{Ž%0˜ď™4N?–źvŢü_4 ä~ŘRVRUw‚ÖŮŘUçBâ˘ęcJb˜“+Ţ?ýźMô^ő÷kýÎřƒ@?˙ú׳ż弌@=046e(ќ@ŸÜÇAŢ"M@B‚ô ĺ ~×\!â/y–0n($ą9—kˆŔŘa|(ŹĺŇĺcŘ×Ř#¤Ä,ó˜+ó…H]äÇXglrMIGQf’šň^á:¨Ô(ŒŠć)ńHéß¤^Áď\“9„6bĄ@űH˝†ź!^<÷Üs–Ż3GOtĆ2ć=žă|‘&փúi.en‘ …ęĆuľ0Ąlü-cíĂKä‘Nȗ>AäŃŞk27Ĺ^Š“Ť:*„ ß˝úęŤV'X˜>ú¨/ľ…w‘Šb–Ĺ0M\WŒ“F˘Ź ő!c 5:.F¸—ję-BżQG){œ}c–˙ŞŚY€asójî/=Ó7n@z`ažćižćéĂOÚ4“4˙°śŕŮ8+!~Łd„Ć•ŐH˜ÍÓ|˙ʐ üîäĂÖHg€áËË#óÚ65„Z"zî¨:îu}čĎwXŽuŕŘźÇAhşă¸÷P˝”z[B@8 /ďçHüťZßĆ5E͢.ŕ[2r‚' 4äía%R|CH™âísíçNĐJžúť+ąÚ)yA Sł¨bőŞÓ-ęYF„ ˙ÎAuHƒ"Aî¤G r‡<ü#Xä ĂîZMӇ‚ŃńNÄP;÷Ć2'Ż´IĄ\”wŰŚBXŠ‹”jÓ]Ë :c#‘TU$xÔF¨€8"#š“.Ú˘üą`í´Ó…XŠŹ˝L*žÜsŮ”˘ŃJ Žýöî@[ő˝Q•^>=IˇiґőAÚXÍm:hđ<- +Ϫ˗ŻAaqq/íć{Á‚őđ-'çýŔF Ša­WÓůÔ%Žűš˙öżůƒź.ţYúÓ˙ü7銧_°6ş˛ş–_ąľľmăkgw+ďWîJŤËĂn|˜ëv OQQƀük[›š<ůźÍ­ôůĎ&˝ńúë顇ďK÷Ýw:y Dđcim}Íî1Ä ]C؏ž•şžâżUĽíSšFľNŞ=ô@'mQťi‹wş‡ýGZădˆśżFęBˆÂDQ ł|ĘQ"GšJE˛ sÓösa$j˜réĺtîâľt)ż_ş|5˝}úJzáĽ7Ňéłň%oN XXö6 w›zRŽBFˆ( g üî›Ě<ĺ(óS4xFr€ĆÚ;T۔ş}Œú\ ÝÔĎëí”aUůɐęv˘T?šë Ć$[e¨Őő´?”}Œ—BuÓ`ĺ¤/ČS=9`aĘţ7kxFôŮöđšŁM]ˆžBÓźáódŸŻĎ-ëĂŇAD̗ą[m&/ŔŢůiĐÝCHÔÎ:WeŒíĽöĽO7UO˘“˝OŽf¸^YN+¨(0ĆCccBCUÚŽęćÍxßâý‹md¤!Ć}]M7˘e|vŤŸöcŁ1ľ돥‰[ Üњ:…‘ ’Őu â˝q>g„ŇRí–ĆA ĽáÄ&§XôÎ_Éć­Ôś…č翙HÄ­j?ç÷Vţ.?˙Gs}岏çĎ8¤\ÎÇľ%˙dm5ÎĎÂ=ąi0t%'NŒŘčęXE˝˘öůŚ4LGóî:°öH6'ŒĘ\čcŔvÜămžćižćižćéž´ţšŢ“:v1)ĎŃéőv$ŮňŽMŸ5‘0aą‘8 =[Ě'’ÜăşF”lűÂS´nӚGkˇ¸'˜%X8,ŠóX*ú€ęŠő׏*ZŹ7)ŽŮx‘§đ“˜_Ü7Ď5fÉ*#u&Œ=řůg>ó™ôŔŘ÷‘ä=˝'HÖYçáoîřČŘ7KşiňP  &/gn6 (*Š_ hI‹Ţě1ˆÂzô҄=k k~ńç3€!Bč<6„äÉ÷s”Oîňf–„ź/ °Rrü9ŔVň)œ0ɉ{~Ł>÷˜Př̋󹖮IŐáůŽßńđŚ.$Ĺ"âE{PŽŰoťÝ&Ž÷Z6’\Űş–NçëÓΖŞîżTˇlšŠ‘˘m‚IâŁOsŕi:}P˘Ă‡‘÷ÉŒčőB6@>Ę‹ƒßW­“xkŒr=Œ <řDšĐ‹w1EFůBLAƞHQŒoÜů]ĆĆcM ˝ś"0śH"9ń€ăب†ƒň*ęFh"Ć(cQĺUŹYŒ0ԙą[PäđR~iB6Š(Č FŢ` "UÄTűńç˘ę vU(!ÚÂňăPF‘.ĂYd~ăzZ0hŽŐ5ic‘#¤źÁľE^áEý8‡öĄ, ßÁ÷Rˇ œšscH&…Œ˘ěRü oćLęđŮĎ~–x_]YdźTsOľ`˘ítĎEĐ"yPmŤ°4´™ ŸźÓ¨ƒÂÉpźę(ľ ÎќŞ>%XçéW;É(|íÚvžĆš/MKöÎÓ<ÍÓ<}Ř)‚-úç ­%xŽĹ8˘ď“ŤýeÝg=IPuĐ1}üŐĘÂ8,-­äľÄv!7&űÎ÷9Nřv#Ië.†oř÷; >sĂĹRś‰)b´Uď^ŐBŽH Ů  €Ňä:ďgŃşWl ): xN (ÜFQÁ€*ˆ ­ËŒ{[Š-ź ”0Ŕśédý&AOJŮłs‡€ł %‹gÉ~ ő‘Ś '€–~?]™Â‰ƒĐ´&ÚÖ—źžU×"&˜Ź{š ÚóÓo~ŰŰŽn=xëŞ!žNd\YcÜÝ/K]Žß÷ÍŞŠ@\•¤ž!–IüNxq÷•ҧşk÷$”iŁ^|7c€fŞŚ}_öő.é ƒtyŤMGĽtüPÖ—ŤëŔJćúrх‹Wň}ŹÓÖćŔ!ې,vŽĽăÇŽŚľő•BTizŕî:5 ĎĽŔů/§{îž+=÷üËé՟˝a$NlŢĘ{ţíkŚpůŔ}wť\~U/jŔžíR—‘]’oňu?űčCéŽŰoM<üP:txÍú` w%…y‘ƒ†ömš:şś0ÝĚŚĚ"fP/Y>F.ŕ^˘!aFԑŠăŘ\Đ ŘÔ<&{EęĆÉÔ߅Xa˙҂•cŠ+ôä/ťƒĎ—ŻîڎN_Iď^Äśt%˝}úr:ýîŐtysd}ČČHă:-­1oř˝|Ď Ä_ŤÓržËööw§<ŰDâ _˛ŸŠę’%ڈ(N‚Q؁ ëđ(cÜÍG]ť5iVu"ÚĆbßďÇS=ĺÝŚ4ë¨1§ňéˆNŒ7öŽJšgŻhŤbn˛ó0öÚ=ďçőďś"—Őf*łćA —˘Ej ÍI6ż™ĘB ĺc—‘›ű%Ľuß|_žĐÍM*§Úl–•vdl÷ťd’ŸWĂn˙Ďu!8ůsq§hgăý†ń¨:uŽ›zšěřŒÖń:g°°Ď;˜Ť[‚Ňĺ ʕ§ŹéK…$QY[’^é‡ö,Ž‹˛O*ß5Aů§Üë›ÜŽăţMœô`ĄŒŰ6oĽúrΧźŐ| Ž8(e^ą×ţŢ5{žĄrăaŹ*›żxn.­,çríŮfEžĐf °2ŹbI]ވeÉ)ÍŐŹFFŚdşňśZż‚KĄsÁ¤Š=›Ę×ÜQAKůńˇÄ ÷ˆ@TPWă+Ö;ćŠ5Ł0,Ηsź7Cşi’ş—Z7×믿nńbä5 ąPM2ő$€. &ą‘čp ":>ďb0JĘŻs…ܐ˝döé$|&Oä OĹqĺš Ry‹ĘňXÇq”kň÷#œCçš+ Ú˜Éťžë ¤ÜˇŢzK:uę^Słx167Ţ|ëÍ´łľk{7Ö+4šůđăć䊏oęHMšďA€úҗž”îťďŢÜ™q€05çϟËăď˛G•r€<\xË( ‡ŸČô{¤@@˙–"…X~z2î„!1ţ¸&ßńťÂ_ć'cL1˝´ëáɜđӟţÔĆéc=fsŠ$ĹŢ҃‘óâC`^cXňŮKžŠ#ć†Ö˝îzbh*_Ę ‘JĄB´XŕĹő˜ŰdX‰!*¸hŽĂ1"dQGĘ ™…"Ě%ĚM´%ÇęÁ †ďČWĆ&‘ ˆDś'e!yâ(„‘ˆäC٨óŸŘ¨šł¸ż }"…]OÄłgŸ}֞ ¨˘@"ŃâDyń7דĚÄľ-הjˆ Xԁs!—Đśşž^´™<Îȃű śázQCs°ČnŠ"łvž~5S4dťÔÝfîëGßóřyš§yš§;E˛E[Ŕ-@Řśź˙|TĄ%70Hë‡Ň;g/dp zßB†:Äž$ßρaf•,”(Ď-'O¤ß˙ÝßNŸůôé?˙ů_Ľý虼ÎĎe;yÜúċŁyßA}ľ—HĹĂ BŽ­­§ő5<燮”R÷Äq̞VßŇç˜úď489 ű㦄ůHÁČ:)ýÓ=ĚëžRČ5_Ű.¸@éëöß5Mů욼fÜvŔ;a Žln§ˇĎ\N/ýěBzëĚŐtţâVşxeÇîATř Ŕ^U‹…TŸňžc˔bƒÍN‡P;Ĺ5wČ-’ " Gă¸?5ՁI;UĎhU:g>D…˜7őR?ŽyD5„ŕkěF“”ŻRO"hťś@…G{WÂŘj4ňď‡fÁǙß÷ž¨óŽwqF—š$’/ę#¨!ĐŻmŻIřŃÝ˝‰ń>ßâ°rÄłňŠă:Î!:VÇLŚBG¤Šv×ţ:ś7ýd˝FYa1íîőŠ‹RŽ\D˛iŽ3€GÂLŹsœť\5˘FëţFľ ÝCk;óˇ*¤‘‡9ęTb˜óéËa>Đëú6ĎäĘĂŮđlƒżŔ˜kęţžÔRsJ";UjMĽ2wdW­Qw śóqů98‹r5ÎűţÜvŁf9íOçű—çłĹ‘!V4ĽţurDӔ{hÍćá;&ö\Ě÷҈œÉŒĄŹ#źîzĺ •SŞđ졅Ÿ+ϛ%Ý4ľxÓÍ´”űńlŕ(ßă)Î1t@8Ŕޤčéŕüź>ߓ$/‘|7‘NI\WąÂCŇ4t$C:€)×ĺłBhs<żCz …&€¤!Byœ:uĘĘ!ňƒźěɗÁ@Ýů ńÎ;ď´˛”äł<˛šĺćx7¤-v5ĘF=¤ŕĄ ”5ŒnĀdöš×{„70Úý4âŔ°ŹëŻEźĺâŐ<ěťţw^Ţ3'yŮu 1€´ˇ!7Üö›tůÚRşăX“ÖVú>sŠ€í›˝pŮúÂöľź‡Ůu/Ž'öŇŃ#‡l˝0\Xۧtcâëć¸7ý‹ţĎŇgůTúëżţA:}ćÝ\Śő|ňł}Xōľ\žE˛päÝDťÉ63m$muŤşzř÷Ćzz]?ögú…y¤¸÷“}ďű­ęTuó.˜"ú˝Ť€ŰЍŠ7^ş‡=ô ˘Đ§››űéí3Ó+o\Jožš’÷K;éĘŐítîŇľ´ż7**4Ѝ0,vm­űźż“ű>Ąwš‰G…„đDŸqĽƒĽn/¤˝€Ţ˝ď×Ýü1k­öÂ:Om Éú;:t~ô@‹ýŚ#L…Đł„  …–tŔ0ľáţ+žłŒ˝ÚGęş*oŻ ¸Đ9 (ô˘‡AZž"SÄ2ϒ*ř}ÖHěáŇT{DŇ IuŮŮŮł9FĆí…zĐ)_ęšĺűmWńéCJM“bňxTXŁYĚl" CÇvä­2g1.ľÝ-Ş‘ÚFĎĂhĄN †ÚJm }ł”Rě˜ÉdŞďĹă'ĺůŰΟŤö|k š°rÉo'Ő ]…Ľň1čaœPz¨l|›nČŔŸ…ÖfE˝‚ąds|!$ŐBí׺JŇ`(ÂsňÄÔ=Fű%˙1eYČëˆ+iqéHZY:™ď݉\^]ťšźo&{6´„>ˇd›Á’‡ô¨'ś~p"➯ZW–Š}™Eą5ëú‡)XU%:‘×u`^ˇľˇY3­¤Ň‘ iłÁ!łÎÓ<ÍÓ<ÍÓ<}üS\ß(ůşjhk¤čóÂŢNbm#|!*-ĚÚRIŃQ6’Cu]ňäXňW%ËFľ ×̑ ĘąŹĂD|cPůbžq]8Kř˜]Ż‹ř!ŒŹ!ł"üĎŽU樎ńüóĎŽf‚ă>ůiß:[wRÜă̖QůJľœƒ˛*/ao7KşiDrÄüŰżý[ąžţőŻ[źŔJn˘<§ŐȸŠÜh€@yikŔÉ\Ź'ňçĺĄ 6MfžĎRŸ OňŽĄ9ԙ(‹Č$Ęŕ&Żg×ŐĆQ^ĎňΧ p|/Ď||“9^€$ <ć‘ÂH ą‚öˆD ŸlQĂ ÎL"€Ś‘ŒÂ9”#~G~Uî?u*ˇcL§#ož’^9ýRÚ:˝)őۏ<ý2Éżj)nö˙>çđ˘_˘äđĹ/~ŃĆގ-÷ ȧoËN 6ä Š5h˛ćŻhd`,*T„†ÇSŒ=ĆŸ/ űCżćڜĎ1 [Ą‡ŤH"[HڗϺž€}ĘńꍯÚdžů˝ßű=#<‘7eAv‰2pMŠ!Đ&Œ+5ˇšG{Ě3ŃHËřWL1…• ą*ĽćŔqäO[ńY* (îpO‘Ë⃐z1ż’—BŹč!,ŐćOŽÇąÜGÚěÍ7ß´ë}ď{ß3ŇóíIýŠíNĘ!C—ŽÉyŠCšÄą€ îĚAžôľ‡"˜ Íňkżökö"?-(7çŃ6Zq$Ő%ƒ‰úJ™‚ö˘ü|fî”ú†ćTúíBż8Ą¸Ű‘#‚×Ôüß{ƒ˙AăkžnÎä‹âş3śÓŞęX’gžćižćéĂNłëé¸Qç9ꆃÁuů÷KdĽišůhŹ÷ŒW᠏Heɉ Š7D,-օü¸g ëâҲ‘Á”ŠÂBÎÁA•ź–ÝóľéęWH)x{TŚX‚Şš>ŽZH.SîŕG“ÜSu,ŮnžXa˘L)őa:`y2*ůÖŹ(ŞC[ˇđЄvsU74yX˘Œ°oőwDz đ˝ź|¨Xă´ˇż]€=ŔͤuŔŤßák!łŁT*ç*ĺÚ´çůZq\Ö8Ňěˇé"mho­T bëýŚ´óŔŔ|/Wš’qŐwşň,wť0ő Uý ö`ľ__y×u“„ňÂa8˜ŘÚŕu†ŐŐAG QYD–čHu/˝ĆŤHl§7ř~oÔŚ WFisk’î>1N'ot óÔآÔ˝w_łÎźăÎťÓëoœM[ׄ&dČĆĆşÓŐŕ˝Ç%}úś[oIGM§î˝;ýŻňż§ ŻŚ/ů+éSŸş×׻ˋžF†P4ŹK_š~ĚOŕ| Y Ç8¨ŢKÖĆűŚ6Ű/„újQ´ĐŚç›śűß=ťƒąłór/@oŰv}:Myˈż}Gč“ÓďnŚç_9Ÿ~öĆĽtöüľ´™űŔćÖ^ÚG塄 Ą›-f°•q?éć°Ş#ä‹ îę)[÷ŻŻŻ%)|ŹŻdA˙b>ĽŽŹń"yaVAígß''´”KŸa!Ş#ö÷úz€Ÿ$›Uc=ai0E˘SŢ}XCż×"S4Mo öň HœŚČ*Oţăš+ cI[ąÇ•yuu­ĚYmW]c‘2—vŒäĺ )ĚË<­˘v‘SE$şhߡź°8uŸÔnôŐşôëčA ĐӝQžą'MGx™őźě;“ý´'ŽFnT¤ …âËę ŠŘq,Ůéb“ł_U=Q*ÝďžŘL•ˇWcjèë“úGG؛¸âLÓ%ŸAeäťKßóDřú^Sć…­ŠPů}"Bú^ĺż×ąÜQĘž‰6šřxlFÍŰ{{ŰÝœE˜ąĽe†´ŮľüźĎkŽQś´Ů^RΟÎylćë_´gÄ ’‡ ňöB‘Šľ: ]ÇâGQËđţŹ_m/ˆMłWŠÚ4\X2g[şí¨“}™A¤áb~Žďíäő䎁yËK.Ĺ/˘çŹőzisÖc„€Éx2Uo7DxřąNލڀÉdńÓÚĎg_Ô­2°ôӌ ČN=12$ŸŠÇJű” ô„ 52ŕP"§"‰ŽrÓnŽĘľ××Ă<‡…Ě  0ˆŤvš∓V—ě÷……>TŠ“lGS}B žiŢ}§0ÓFWŠt$ 0ÝFv ľyjmĹstŒŕłBťxYÖ7Ű˘źśvvˇň˝ŢĎýkŐ~Ÿőŕ'/Örô™ĘśAéU ]_ku^vߋ¤üŋU~Ö/§GOşugô²)˘ ŕá3Ď>gä‡í˝lˇŘÝKŰš_œqüÎz˜ŮÜ8qňŇ,A ożŚŰŰ9ŠŤîRDžȥc˘ ‡Ę­ąŽ~>{onWy0gĄ,łľľ™űůNZ[]ďöYSFnÔ,B˜žŘö"1 ˜W[HŇXíÁľąŻ-›ÚO/ÚŚ÷~ŒÉ~÷Y÷JżĹö‹{žHÖŇßń<‘­R;­ř˘kXŰ16*žFUÇőőÜż7ťĐ!FÉßĎ*Ψ"a2ću†3ĎščĹŘ嗜h` Pmms˛ >@Ęj=<–‡¸űźWމ Gecźuő#1G„źŸgRY+4’ÄI<:w÷ň>=ĎŐ{#6Ćhu%Š Ö,.,G'/N ÷ÁćĚóú ÚÉä=ý´[R5<™s?jD‹ŚÍöžA~~TZŤmŠ ֘2W2¤**0F.ÉsÚŘVE¸‚{>ąPfü=Bá*cᏌ áőľ†Ť˝o2˙, ,ęý =łr^ˋ7—'č<ÍÓ<ÍÓ<ýęĽŮ}łÖ#„ eM&5B^ŘÝYŁa›g}€m4ŞV(Ÿ¸śŇšę ľ9˜˛6"O>ˑrV˝!’“ŁjĹlžŹĺĽ^Ízž<Ák´—eŒÄâXŢYuň#‘RˇTÖ#Q9bJąœł*j_đ’ţđ‡†ă€Ť3Ö[MIł„XĆh Q™…P&ö8RGgқÍIđŚ!XźöÚkéŮgŸľB íL W!/cÉŢs3=4’k€Ç"Ń)řŕ ŔP_růň,§‰TxŹs<€ßqM:<Ţäź҃ßčdJ ŔGŠL¤dAš_|ńĹNr”Ÿ  /ĹÜĄî `@QŽU¨‚§Ÿ~ڀN”6¨Ç<ňČ#vź<ÔĺYÁu_{íÍtĺęĺźţ'8o›Ży1íďŽň†e/9´‘Ώ.Ľß|!=ľýTzsůtçľ;ŇoűbúĘç~-ţY•žzę)k×7ß|+—ë´mś}cŽ ×?:č܁‘úţ“@˝¸úóŻ˙Đsßżý|łÜVn¨Ž›Ç“ĚŻťďž7=öŘŻĺţ¸”űÎánl6*3œŚ´?žlăĆ=wßcc÷|›¨˜ŕŐOWŒYĆ„!1ěčďŒ-ˆEŁ DҲXÔE‰B„*ž‰ŠüEXůƒt˙ý÷wsăš1΃Ž1ýýďßBR0ŽQÄX“I׌)0đ°d>#QGćęBžäIƒńh”`žš X䕢ľŒ+b<*ô=ć-…śŕšĚ1\(„,ęG"_ž¤ˆĄ‡ł˜“\źRˆüPŤ€„A9šjÜĘĂ㜺Qژż%Q„kĐœËu5ďJEHm+ƒž´s9 ”!sŜĘs2¨oiŽUŘúעÜ"M0Ďsżî‰D?cŽĺ]}HmUd d.fŽg§ŹäŻgĂb•˘‹ÚV‹&I­ËH5OżZŠךNM%ʉď}ćĚŮÜŻçţ|ČŔ%=_çižćiž>Œ—Ž€ů GŚ0 Q’3†LxĎľlDĆíxĘ iOQ'I–ÇŁâń^bŽ;ˇÂB[řžÉv~ßN×ň~kÓů.vhE9—ěo‰řúRŢ×NXŔËśí@ȅ^Q˘äďĄ6öK8—–÷z Đ2˛}ç÷€gwCJ ČWý:â@ۇčçÉ”q•ýPk3š§{Eœ*Ď3‹Ý1úNi֛Ž>ĽŽu Ć]?ç ňřCÉĽŮ+éę&*˜ťööƒUßőlೲúz@L"ô‡ÔFş2ُžcrJ˜UŠJ†ĂáÔB’ÍPá–â|ç­őľ‡ŒĺS{Ć=Żî“ĘŤvR4@(ˆ•?—ň Ţ¨6ş°ęgkkëic}ĂúĄÝvŇÍSN,c?÷ťa=œ"ůÄúĆvŃ}U˜(ËgHFCSŹ@™Śä}0,ý“;ŽşsŐ˙\‘Ś(á´NdÎlŰŇÎů>B a>]™ŠgězŢűŻ­g;găύś*s‹őűÚćŁr4<×'vÎb~.ňŢ4ŇŢřR~?œ'–ăů¸rţ—óqçr™Gš=jŸâlîËçWčMx?Y¨}~äzĆČČ}{i9š˘O]öúc#błr–Ť[¸­‚őŠŤ‰=×QÉŕłľUs‹yš§yš§yşšR\#bk€LŤP—ZËJŠ\Žô7Jłöô˜ˇÖgÝŢ'çÉő°˙Ďb_ł×ˆ{"Oľ7˜%›Ćk|Đzë:_śŕ~o?šZ+”G$SD’„ÖŐ`ľD@xŕ 3Áśîň~¸ßę"űDlEˆç˝Ÿ}蓖>¨ žú€żUེÁg˝ęđŽ× |7˜yńšöőżů7˙ćqÖ/ůË]@8:ƒB7—ŘˆCs8PąkŕII@Ą@<ŢŁÔ>y<Ô čTxš6B o€ œC^„5ą)˜ë/ďňTäŁ|$~Łœ/đĎ=‹ö§dGz衎\AŇ@gđYŔ“AEžxw#Ÿ‘ˆci?€Ç˝ÝQ:zäpşĺö[͈sţâĺtůʙ´ťłŸ6w6Ӌő+éŐĂŻ˜ađ‹űż–~óÔoĽ[Oܙë>~'í`Ë5Ef@ô­I÷E–Ůϓ2Źéďřů“’>n‹÷Ěł3?WИŠóß㴒7í}ĺąlŘ;™>÷هŇöľítϜݝlpdC߆“.ćžľľuŐúţ=÷ݟVW–KźË&ídc ŔľT&t/Ś!EČĂFßÓż[ôo~—R E?xŁSÁ`‚W¨ -Sűź4păŠń,•ČçG?úQzüńÇm>‚8Ŕ5%óŞp=”ąĎ9":É[Ăă`^u~cŒrÝYů'ĘIů fČcŔb@QxĆĺĄŢĚ4ż0Żiţâoő Ž Š"Ďt]ŽEAe”Kó&íȵɏëŇ~ԕů—kR?HÜSćîőƒĐyEĆŹh|âZ,ô€Ö5yçZ´/íCű˘˜“gá˘D`Q˜'}&Q?Ęqb:žwęćić_ľŻĹăÎÇqMڒëJƒ—H.üN™śEF0=šďô>ŐwŠ+í+—íKŻŚCëŤ&FŹ×Ĺr}l$u;"âŠl*C7Ë|Ŕ^ш{…T2›ˇúĄ¨÷Öľ­Ü;öŒpÇŽ•nޡk$…ĺšVęŃ~$Śž<5Ýfö§2a7?5Ĺ\5ś§őyĚÍÁ¨ÎLR*Ďca¸deĄßKˆő—í­kŚB1¨ę˘Ă<™çä<÷ ËłżąçÇÔşKŚc@ť Ém]—đXƒÚćWP‚č”m˘ƒcVĆŚ9—˙ž’ŸĂ{Ś$aa[&żoJśVąśN֞,"”`ĘmƒčŚőH?™VF˛°1™dǝŘúcԖçoš—¨Q‡ĺÜ˙ĺďޗN;œ–W–\ c8(ë“Á”˝ :ůűÜ^đaĽ_†˝`žćižćéfN ąÍłňęŐ+óşJľV‹ę QĽMöíődGĺ8Öń`)ź+€ÖQmá Ĺ?ÍáZĂÇľ;XeĆÖưĐŮďSN˝3ÂôRĎ•›ň€Ů(škcá>ąźńY>ťžEűWđÂşŁ.˙Ĺ/~ń†í7TÖ¸—#”)+őßQTĺËţáÉĺWËűdćՖ÷&źÚđ>űJ7řü^ďł_wťÓű¤›†`ńď|çqźÄĺ=M)AĄ>´ĄăMGçxn˛ŔL~§Ł 8•<Łdbä•@â\€‘ŔŔń’Ś?@0ה˘ƒYŕÇH‚^őňš ˆBßĹĹżSO@@Űä/ŠWŚ’Ű'ŽÉ‚‡7ĺ´“V€/çŢw˙}éö;!L,XÔTî.]=—^¸đbúţť?HgVO§[ŽÝ’NmŸJÝöHşűŽťłÁ&ˆűK.eN=rŕ‘vœ,ĺ761NǓIš•Wü‡¤HޘÝ|~ŇŇ'‰`a†\ýŸ7­ăíźŢO_ýúݧ[x0}ţŤĽőŒ,•šc§ńđżxÉ<Řô?~"Qd9d†6§ƒÚ˝ čżôú)*ѸĹ8bl065ž8Ŕž1ŻqĄ?RĄč—"MčĄ"ÇK!BFk”ŹGĚ#(WЗ!*ýöo˙ś•E`9×d.h!…e㸸buŕ… ?ő•7u%?Í#Rf`ŢP|ZąŠ'ה‚C\x0˙ Ú!•Ä ˜Čeäš|O=8VęRfŕZ\—ßi7Š>p]ęJůzo˘Ş#”@„AEC$îć0ˆ_\›¤pFÔ_sŸôˆDÂ= lfžńotĘ%°P=Ü×čqëň˝ëֆZІ´ őŁ”ĹŒQĽŽZœčžqŽÂJő`GŰp¸Žj ‘}¤ŠAţÇ;őüŮóßMëyN,>>é—a0‰ĚV(˙&ä-ŁkϖţůŸŁ7ú¸=?çiž>ŢIa´vˆúô*ĹçŃAcF‹˙á˙bj8Š .ŔÜ=&ÝđܘF2ĺ}\r˙ÄçdHŰť'Ä2ÂJçĄG字öa=AÄWˇţ{ Ŕžhä!(ź}ŚëINóyƒşűŹë÷¤€Ú’‚X¸^™^śi•Wpź˙‚ýîňý*‹ľzr/ŘišT7÷§€MĂŻ ŻLŚÝIĄcójř—ŹżÚ•ëyˆ”išPS­9{R|MԚ’†ĘĽgÜě3+–ى0Íz –Œ?gÇFŢŕŠ}Ä2FÛH“°˙ô>Üčü>öƸ¸†•‚@pž×^Äďs6źí:őľŔf4Œá=Żz`/š4“ëÌÖă\ciŘŚťOVéđúĐ$ďă´{Zˇa,z>ËËKéčáő´şźŽÝHˇßvK:yňxZßX5/ĽvÚ(Wˆ ‘´ńŢĎ>sČ/’“­MéťMk*1Ńř˝ÝŰz:tB\ďŠcćJ#ëZÓş­˝­Śś ko—>˝›NŸťšžyél~˝›Î_ŔŽ7,¤‹ňšH­Ą5eŒY…í5´ŽďÁř厄ŐLzć„)„§¨” )€łM!hŃü´uíŞyP¨@šL¤.Ëžj°ďűŔ\S(ă]íŐ%íu{˛K;EŠÓzł'đÔwՐÉv›H´“7Žhżh¤sqôŹ‹ĆđŽpŒÜĘťë'Ą2W@pNJ‰ÝŸ••<~†…LąŰÚjkîŁöĐ"BĹž;â8aÎ4›WŰNÍ ń؃ˆ31EâMü.ˇ#@ vŠĎbŐ=*“TÁňŸĹzŽ¨çť˝ÜˇP1r˘‰“ś!%iťvRâlšëşžyŽôޟžwe}ÚÚşr łŸ =O1´z+SXßDr Č%4‡Ćv Ćülä á˛ŢGrçygbj>­*'Oa‹Z4˘Pyś1–NÎ#˙ąBŠ™e:_żĄß.[›˘‚1žäuF{4˙śfĊńřJš´çňńyžŽ÷Ó`aٔ,˜Ë‰6pŮżGŹ jSćs-*j“ş<ëJ[WuŠ{˛°O"HLLaÄg@œŤů™óŻ~ďԜ`ń1Ks‚Ĺ<ÍÓ<ÍÓϗdăżrĺrâÝ,#:xĆ=›ÖuqŽíç×IGˆ#$ďä)ÇǃČzE‚ňNoŹĄŔIŘG“'8D$ĎÇňFr|´ďęZ/R^ĘŠ° ŕZĂϒnD°˜%€°~ƙóo˙öoÓŠS§Ňמöľ)bÉ,$îѢZĺUž´%¸4Ç ;‰eŒíŞkĺvš,ří##Xźđ 3ˇR #ƒĆŕŁcsă锒{á3@#@7nň™Ý¤Ŕ@•QŽc˙؈i`X|ú´ĂŚ„ź)“$ße(ăŽpG'†4ÁqJ o@‡g`Ꚁ˜Šˇ.ƒ G:°ň˘üü&Sà ɉňżSö¨¨!Ŋď~÷ťt’/ ˛ĹĂŕźăöŰӉcÇÓpy1mm^Nß>˙ˇéÇű?IĂń0=´ňpzl#ČĘÖQŢ찑X?tÄ61€Š´yqÝÇGĄ\˙@‘f|=ƒ™&’ü˘M?¨”ŽR4 Ä B4Ř|’Ň'‰`aq´QČňl˛J_>ýDşýÂËéęýĽťý\:ńŐßJKw<YJ K §úňĺ+éíˇŢJűă}óŔ[ÎĆoöŔyęĎ`rŢŕŻä1–űź”(76ý—$2ý—q °›ă8ćÎ;ďěĆŠî?ăМóř^ž 2xI q@žäÉxFą$Ľˆ¨@R¸ţÍo~Óú{Œ-E?f~€ÍÇX†->ó&ožgüę8H |oĆľrMƍޭÝs>$ćŐoř[D ň’:uĺ{ň’˘ ů0o’ŻHf´/ľŻČŚôŕÔCœy€krތÁĚ1"/Äđ%ĚÓĚŻäĹuĽvĂźŠEyPÎaŽc šN‰˛–ĺ/˙ň/M1賟ýlלœKŠlFűr˙ůŽňó}$LhÎáwć/úާ>őŠ.$L\ʈ4AyŽö¤żH…ƒ—Ô7¤ZÂo´%mEţZř(Œ őŚl´ËOţî?§ľl,™,>>éŁ2˜DC|üăúüËNŸ4ŁĎ|<ĚÓ<ýý’ö qC?k¨?(şQşÁ‚Ô+ 4@@|tŘ" pÄVYTÍKŚÖ•ŸĂŁń(mŹ2ĆńăŚxˇ 0ŹŞşË×ĂŘ Ë>ęH”ô7ـüĆ4Ű QÔ%¤‰ĎĹ2Â4e,@oP@ĘĆĘm fr zěZţž~[č@1Qxőöƒş¨Rp12:űB@đđ ZÇ4^¤RĘě°‡Ź źŠ˜—ĚkؕC˘7˙ČŽëkčŞ# `ďđ6¸8ž-€[*aGź=ގ8ŁşÉŁ_Š^?…•ɢ./÷.ö6—´~۝Łó”ŤM"ŠÂűUÝĺ×{ÔIĎňŇdšC¤kííŠ ë⑁ÚîaŒÔű €wö**€|F¨ˆ ëྷwOź–§¸Ę˝´8Hˇ¤ŰŽóŢŠîÖ|˝áŽ*ŢŮýžxmu%Ż!9~˜×—‡ÓíˇH'O¸wŐňʂőÖv}ó0žĂŠęŽą^fgqąœvĎŞi8ö•.5ýßűăÔŻ‹~bS ;ŰŮš•÷+ťătţÂĽôĘ—óëBzët6˘š3‡d|˛ąÇţűc°yJFXćşß1L Ď?Uęźý;żéî—uWęÖhܗ™9Ty(oľ @í(ƒŕ›[›vţâÂRZÍű)BÉô$ĄqQŒiť<H„’É ëó–a4’¤Dö‰÷ÄČ#řU`d;‹ä¸hKëÇoś2’W˘:ˆęŽ~$'!Í]´e,ˇ~/˝1IĽČŸśŽŚËWŢM`ܚ“}>],D¨UŸ9>ěĄözőšşž%% ü^ŚjĘ`=HÓűŹHŒý Ö7ŽŤhŸ%|Mś DYhľżĘŢ=Ťvjo¨2ąiS;Őďœřĺ$@öŚdCÔ>ßçët]šă<ŐQ"Ae*ôLSČ)Fňç@[Ćq?çúýH•<%GFŇbĎěĎHW˝€hÄxtľÍŚ<*ëďf{ˇ9ľęÂyMJȰܒFXp"YSćŇ(§Ĺ…ŢÎ0™ěćßݑČB†Y]`e›F}kžďm6ˇ[yÎGĄe›mť“<Ÿ˜ZoK˙e„Ö>żŰúf`!Ř{źMĽ P&ŹEZŸcuއ×xâDŒőľőôŻ~oŽ`ńqK•˝`žćižćéfIŹw<:eŰ­Áß/Ĺ5šѤŢ͞-**Deňř,Œxi\ĎćÍڄľ“ÖĎĘSxĹlžĘgśŹqA˝ŮW’†’źŁúuĚsöů‰ŃfL9ÁšpJWçˆN°q-{P›ĆňĆźÁt˘C˛VľźQţż)Ăt“$€B@D‰: –ŔUÝ<‘ %ŠéĆk ŃaŐšÄ"O€N…‘ş ZŽЉĄBWyÔSFźŇ9OF~كó;ő œ Y  Q€*ç+Üu%O  !ĘNޔ“ăLń‚gBR[Şj`éšňČ&Ę/Âď٧ŸIß˙ťďĽűďż'­?z4˝vî•ôŇę+éŽńÝéłKŸNŸšýŃtëĆ->ń´“t9—ýg/ż–.ož“ŻăžđԃúrM ´ŁB%„CpáÝ=ˇ÷sŰ^0ĐúZ.çÉ;hjăFĽn° ˆ† ?lžYřE&M”ęÇôSúݡÇґÜÇęlŘ]Ţ{0­źúƒ´”ďńÎsO¤W˙ëżOő7ţĎiăČá´tâö´yřśtmœ’Ůp{ϝ÷¤#Çó÷‹ éZž˙ŰWˇĚˆtţâ…üž•$+T \qŽbź’ŻĘČ9”:)Ź I )NˆđA˝R„úXĘӖ˙ä“OZřŽ!ƒk˘˛Ă˝{bءžő-›G~çw~ÇňDuĽnš;ɋś‚C]Վ$ŽáwęJE~ŁĚRJł•ň‰¤#Š.ŐS„ żSÚKäŐUóąBЈČ'ő>`ů<}ôé gW\@Ëߣˇă<ÍÓ<ÍÓ/2Í~Ńđđ^IëĹć;pőRô0éŐ ř6`0˘t¸‡č˝uEÄčJ1úühkŽk 4•'€ÚI•Ŕ?ŐŐËӃUŸŰ‘tY‹Â†´Eu­ó((ç;٢u/żďĽl0)d?o†ĂŒšĂAx•ş+zƒ=€Ó¤éí $oí€S÷”u5‹Ś#+x{Ź­Yůˆe?ÚGYŒ5í Smđ}–+gTUěž?Ä÷ÚďĘjkó\a!6Ť\jooŁIړ‡˙^BŹ$ ¤mud´ń{7(j!şn$čD3ŢG%÷DĽŢ–RABuö5óxĘkgTŔx3Ş PNđđyČśŻŽ8yşiÚ.vn,¸‰)zŁIĘr#öžÁşsWę ´éčú(mŹa`ŔŸ—\ýĄîUJśśwĚă‚Ĺ$1Ę÷ްűÄ9vôpZ[_Iŕ’ÚsECš{Ž ¨\7öM…rÜL˝˝wSšj?‹ţ}š8Ş÷ŢXXYţWÝUËuśwö҅KŰé|~˝ţÎĽôŇkňű•´˝ľëŘv€­÷ ­Ö>Ÿ@Źj1Œîç6(@.ĊŽ@•úđqýĎřő#š—ńb+ň-žóŞŸŻÇ†6N'Ľ-´fkËq2ČFc%ď1Ě-sÁ2ŠyOŇá|FWvÓ^ţŽđ„ţ1˘N7Ô]˜A7÷‘đ {•ډHŠť_Ńc.ŽÝWÍĂ2Ü*ߨ⣟5/IA}%'¤Mşk‹đ֏IĂŘěy¨KúËnŢ{áÝżź¸lˆq '…š a0!áówc÷rż(éHĽ2ŞeôĘ+˝}I„‡şMSÄ!7K<(ö:eŠ"Fíç$ĺÝŻ_ďÇëwdŽ)hÔçźîm!ŮšsíĄCiy1Ť‹y¨A[ÉÉ+‚Rs‰yĎúœäČAQÚ(¤¤Ş„~r’S˛ů‚ÚŢžŸĂógߔZ{˜C „ĂĄ+Ú¸śg—‡ú°yĄ„›â3¤„…+žŒFëÔTŁ˘zSÔWmü8)ƒăxN™ęL奊Ş:ŸĎ|–ŸÇČsԑy{ĺ ËcXŸĘ'˘ş™÷ö“˝4fŹWNTY02 ×c~ Ď#˙]ۚ 2r “- y4×5W#Ą´c[Œ&"•qQŐin✧yš§yš§›9ak?qâ˜ý׆ł{†üÇ}ˆHÂYwÉ?†ďˆDÖYrjĚ+ŞVăŔĆ 'Ş6”ďʞD|QNňâţІ |ľţUŮgËŰA8™0e˘|ţóŸˇPę*[Tr×P>łůŞţ*+x”D˘JcĚ?ڒ" ůfH7 Á   K`ŸHÜtIĚ ÜăE' ăćĘ{B‰M4E^׏•I9OkJ:=ůpžˆŠÁ)2ßńYj䯘? v€6IűSfżňާ,üĆ59GI!C¤:!V;ĺăڔCĚnm\ňHŒ%íĎ` =%óĽ/})˝ý֛éńżűŰôýÍ'ŇÎÖ^š\›¤ľˇVÓńöHZš7ƒ€ťyp­ĺÍUŢ|ěćÍĎí–7Ťx\/-vŒu/(¨3×d“ЃvVĘáÂĹüŰJ,ŮÂe~ö™śß/ŢßmŮ ’"ř4ËüŸ3ž´I§hKú÷ěžűî˨cv Ž\žh†¸{îz,­ýăßM[oż•vóĆąýÎ˙–Ž^8“Ž>óxÚĎ÷tű–{Óňą[ŇđŽ{Ň~ú|šŹ>”ÚlôŰX^O+‹|#ëşşœ_këv})-p}ú6}˜>ÍŔ˜‚źŔŘśs 1‡}žw΁Ŕ Rˆ~ŒMň¤ďAšŕ;$¸&¤ňóؤËvÜSO=•ţúŻ˙ÚB‚üÖoý–=PĚë/ÉüťŤ˛ěXçoĘÉ5šů‹4A˙%ęĽ9Œkqă^!+Ôs,ĺfź’ÇF"kŹ3~ :§ćĘĎ˝ăXćŢɏň+<…âzq,e`ěŇ´/÷›|DsFénÇĐd.Śţ„şRůS~ˆ/Ü#՟ąLš5Wqő'OţşÜG…:zîšçěXŽ“ó~řakcžçČ ŇeŚlĚoԛ߸?ä-‚ˆ š,¸h;ęŚđ2äĂ1œăŇłMGôˆ$)1WK΋뒗ˆyziĄńÄ} -˛eçéW+EćA„A=Ď"łšôAÝFúUę§óuÄ<ý*ŚH¨˜QŢküżßÜŕ„…É ó^(^¤ö{Ӄ“ß;ŠóŞxh°ÍÁŁťźuĎV…^ÜɀżŁdQPÇŻ/Řq˜{ĺĺ9,ĺůdppƒIŰX#'c' Œ )`Ň SŻÜ00kś âDlZËł:‚zŽŔ1(eq ­WńpĹ…ńˆF …ăčŰ:‚ÜMđWH€Ąy3´‘‡rĚs˜˛JӅqšSb(y>KĹAáFŞJ!KD’ń,˝ńIą]'žő¤ƒž”Ńś˝ňÄ xékŠözGp]čięŢő}Q@Śžš=™ÄC"Œ­Ź¨uDXkú¨§ušůHˇ+v?S[îM]MÖu]<šK~=š¨lcŘ‘:l˙ĂK›M:˛6H'ŽTéčF3C•ßIŚLQ¤őÉug{vÍBNěngĂĆÁkŰéÄÉŁy=ťÖíâśpe,´3ígOšŽœ“â3/ú*F)E'mâázci*zZSŤHfóĄâ܅l ¸|-Íﯽy9˝ôú#‹PUĆí`uO1\JccŃűݨ“ľ5’K1&2/(ę^­@íi ÖFŚčďIN%#‰€2™L‘˘qUj=iŚ-s@ŻÔؼ׏/~ƒü„w˝9Ÿěí[?3rś…t€>HR˘QHëS´áŒ:ËA„–ĆŤ/Άţ˜U÷Đ|ŠcHšă8S˝ť9:•†‰~顄úţâí6 #zpŹ Ýüm¤ŤB YĆśx4ˇ•ŰťööŻ91%÷ö€j7ž1nđ•Îő}4śK´3™ĄiŻ3–Çą‰EŃ8=M2J)’ŞtžňUŁ7`•Ž'ÇL4]îNqƒś „:…˙¨kő•yŽäq€ýÎŽ;;ÉÉBÎhq˙çŤëČ:FF*ĺi]gXíŮ´M(C ‹5éç7#'@ŞXYM‹K‹Kóń¸(›x9Z›#גĘüŒ\GżŤŃśHůąnuvĺŞ~އŢ8¨} adOsăZ§5ⅵšŠB,&‘E`ikWŚHŐFślšlÓŹ×sߒ?C˜ŘĘůŕłoeD€ÇîEŐ8ɢ-䖁‡cśôCÚ.őĎ/Í/ełĚ9O綂yš§yš§yşY˜ĆŮłăŽPxă=CŻŃ)•ľ™Lľö#)Źy\ťÄwĺ5ľg)k_‘„˙ę9†G•Ż˜o\cGçń˜/ç wˆ ×ĺ÷‘¨É&RéĆqőÇ?ţąáŻ<đ€]#–ó ňF{GĚWÄ áV$ֆŰĹA^ä۸÷QžJs‚ĹÇ0Ěča4čŇ@á{:’@,n67đPDçŇ ýD>𠬇Öp Gg"Ÿáč,\ŕ_ů3ˆ6D^Î*çs=Bdpœ:ç障§Ę1%ö@j jąíE°ŕDĹCŢ÷$ŠUĐ6ŠÔÚ iŕhzŤz+m>´mńQJŚăŤˇŚ…*]nfąýű?•Ć/=—Ž>űtZŢş”6śŢMÍ;/ĽÝ—ŸH§Ÿ~<íÝu*­ŢzGš|ęŤipěśtîÝ3śéźăś;Óą“Ç­lR ?1vh‹Ź#P_„') HA?QřĆ$ăTÄ' С¤ 2 AĐϘ+~ň“ŸXHbV)„y“Čpy‚˛@„ĐœD9¸Ś€~ĘŔu5Gˆ4ĄçPmę‹"…”rDŃ\Ŕ¸ ?ćň‘K!H0@JĄœÔSěMĹÎR<2yTŃî(ŸćňÓ=A­ö$ڂ˛ˆ4ĄöUX#^äK_âX‡ť×)y¸ş§Ö—JťB<Óý~úé§Ó÷ž÷=;‚m͢ĎO¤x"҄ł_OX˝ĹbĽ/‘d€ä3}‡ëŇVj[ŽőĹÝY+§Č*|'o+D"Â=ŕAUŽÁ1"‰ĐÇqşŻZĚź:Ÿˇ~%S$PÜčˇŮďtlô|űűŚ(yŔŻýŤĐWçäŠyúŐMłóŃ/bmí—~1Ű̡ňúŽŔSí^ŤŠ)’Ďy.îŕf[bż7ĹŘČ…8°˛š÷:Ű­ĹořYZ,$‹śWY0.ĽĘű܍łĆ=ďÍŕ0Ţëˆ"m¨ÜK Ăâ}í 3śőnӺʅɉ'÷ĐOęIQxh3pڅ7˜2ŐĄœX6“žÜzC@Ř k‘X×sŒ{‹;qđ źööw‹*j^]ŽÄs`]2˙˘"Č6î@4˙NžÎŽ1 ,ömÜ_Ǖ6œč"°ľęäăŔšîYäŒH@Ź:€–ű Ołd?FEž;—Dv3G×'ŤTËś¨ @ĆfÝžWÖýyOťźb^× '1)Š"ö¤ňfŐM핊<”K2Вśiň17Ť´łŸ×°;mşőČ$’öĹëY™—}]K*?™jƒ/Ľí=źŻvĚĄa29jkeĘÚVíP:šôŢňŃŘfeŠ t*JYŃřŠącD‡ŚWâŇ÷]žÜ×ýźgť˜÷`g/§łçŻŚłçňđÂfţ;ŰŽîŠ˘Ç Q%˙5,˘TFö“ÂöŘŘ){ĹĹľuSŽĄ˜ÂŠ…¨şţW…ĐA@ńVŻtbc§ š÷Ęô¤Ąchˆff.‹ýÎhfČÝvš˜iä6îŮÎ)œčO K–×öö–Ů=ܛll‘Â9š2‹řą2ę8Í5ݜ<cŘÖHţmfŐZWĐůęťR‰¤a/C3CJ˜&ë;Γá9 ž@Ćđ×n!ëűĹÎá@}ú øHů u.%ś­DŞŽ§ćĺŤsd|VÓ&3Ď×Y"E*ϝYE>¤<żdÔîŰ;ˇ[Ő$)čpJNjŠĂ’ß߼ĺ%#řŃŚŒŮ|h+)Z(LKĘБFRQYŮnܔ^*!QŞŘ/JMŸ1J?1gľILkŢÉçu -NŹ­łˇĺYWÔv:ŽNFmG3ar5Œś[c4ö\˜tęAÉ$ě9ÂŇ8qËě\ÜožaWd25 {8ĺőc~1ŰÚźž˜ä÷*Ű0ÓńR?BTcšÁ„ă˝/ő„,k7kžýžÎ“ÖĂŠXŮ]e„gˆ+P5–ßRۇ3™§yš§yš§yş™RTœ%ťęďHˆkn9UĘš1†Á:žb:ˆ¸Ąľ§ŕMŕZĎi vPžłűœƒĘ,œANüZjó‹D“Ů—ĘË1”< Ź'zp­•ύĘ{PžjÚV›Ú@ŘěAíďŐGĺřaĽ›†`ŘĹŕM*tFy-ü6*qŹB‚+ş¨td6 z ÇF PŒo.8 çđY`!הĘçq ąŚt y—s]6&œKůEáĹąÚ Üd@,Ub@a8H’Œ2‡L([›[ś˜_]^Mkkiem%mo]K[WˇŇľ­źč_HŰŁkéľöőôbű˘Ü>ˇţhúőcż‘N9ay—/]ś0ÎŻžň˛žČ›ŰřLwŢq[ˇYtΓA^ü’đÇł\ >ĺăž)t §ÚĹR~ÎrŮđIc‚0¤ěîd0űň%k“Óď¸Tżó{ťžń{ č`€éĂŽ2Pˇú^ąý&ĺ÷ĘOç'mnËŻäŠkŇΐX„<‘ÁöCëvĚVž0ń`@âöhžgÄg˘Ď2¸ÁíÝsďćöŢÎ÷~5çłÖÝŁ7ßz+-Ż,§ľü›_ˆŰŐB:ôč—3|kZޞńŕÝ7Óţ١Ňů—ŸNgŢx#­=űă4ůÉ߼…#i{%ƒţw>”'ťˇÜ‚oôŠÂ…‹—Lĺ„>tňä-ٸQ§Ýl,<}ć´őľ•ő´žv(íwӅÜO7sŸżăŽťŇÉ\~ †”šIäCé#zřPnúýNĘ7ôIúBQ –@_úž`&…P(ú=ueŢŕ<@súżŒB"ŠýEd`¸Îgň˘\ÜäI’ çIÁ9rÇ00ĆęÇp ”AD žg>áş\#¤úÁřpŔńĚkZ˜(ü’¤śřžö™Dń¨őpĺX‘FbůD˛’ęó§ćX-^¤Ą)RƑÂ!ZȃúSfÚKm(Bó&u•çü"”¨íHœ EÄ:Íń2ŠńY**z&H1‰2‰4ARXęŻyO1dš.÷…D¸OzfHîë xĎÓ'?˝pyŁßŔóçéo?/ĐúÉHsÂÓ<ÍSë‘Ä|ĐüqŁďĂÝ{§$‘úMý(€s“Ú˘’ ÜÄ3uܑÚаV5oóÖ˝ś›ęđ8 hĘ~a;Ż_—–#ĂÚśx“odyťÂCńbiĆhŰíž‹ĆČ ƒňŁ.uľ:âAŰyĄş*„T$ŠnĄ2&Ł~` {äd0 ü9˜Y¤Ň“ƒĂÁîßt„Žá~?ďS7XZ‹¤8ą–Ú߯Œ˜˛ľľiţŚR;5‰ş–˛Č$¨RD˛ Ž]OäA05Ię *ˇ@AH)ąÜNšŢkÚ ƒŽ<҅_Šzĺ)ghm+"ą‹&7woŐ÷´6sÇ Qc}Ź‘˙¸Ô$iŁÉh)÷1Ôíś-o't;ř^ľU!ł8™hPBĄšÖCĎF’E”ć><tĺÖXŮŢÍýy—P m:qxn=ś@đ˛ŹÝ‹Ü‘öą—lgŕ3Ä2ŘŮÔyáŃżŕę'­…6;‰Ą`ŻÖęľ{}wc¸.]“.ŠÚHŞ:>˘‘ -ě˝ęĽŚĄIf´ŰÚKĎżüvzůgçrç:Óš‹›éüĽ­ÜžűÝ>V÷q@{ťeÝ´Í”ŇśƒĽĽEęŃĹ vçľÉU*´ßŽršVŐ”Śźâüš׾ęÉ&šSôŠJX—Š )ŞŞčžKĽeҎťůÁH!ů| w8t;á5ąu@YĚăÓB TíTŰDbD”V_şČO˝QYĺŽĘ j_eŻşéłÚM=Ѱ<™ôsţâb/ŐĚ˝€!ŐŔq7×,”ŇBˆoí 'VĹţ4+ÔJąI-.”ůlżěW÷ŇţŢČć™5œ¤ŠTWA™ĽššO{öĎČAšŸúH ĽTÁ0CÜđ• ŮĄ$ÍUjÝ˨„ÁwQeÄçiC~°]ŰOÍ-Œ÷ŇWx戸FbĚŹä6ƒ&gíÝľ7oĂ˝}ˇ.d$Ć"÷‚gĽpÚIG’äY˛˛˛fjmP\‰¤¨5ľn՚"ZjĽ ˘đ]•ÍŹžŠL•çc°äŮN|"l+)Ć4EeČINjđšŘՆbÇĆ´+šŞŹŚ$ :âÚĞíÔŇŇ^>~3_{ŇĄüűńü^Íżç˝ţd3 Ť]›3ƒ‰=Ϝ€XćĐ<çVły͂”TŽh…ކĎ/Réhíťyš§yš§yš§›5š3ýátBŠ#}…Šý˘Ě-ÜěA˜Ç,Iá rĹÔ5Zˇ˜ÝßđŢ3ś.ĂΞCĂÍ捿gm!°9[Ď9Śű×fÜęÎtü–ăוď˝^Řҝâßnzţ…çÓ+/ż’._šœ~ă7~#}ĺ+_™Zë+ŸŮ2Çö×p›Ç(˝“1\ŇÝwߕŰö¤;Ř"(‹đ;KÚ¸ŮŇMC°üˆä˙ľ‘•ˇ8Z*‡bäHF_Ŕ˝d÷đH‡`!B€ÔČ ŔQçH™av *,ç"˛éŐwxx $UźĘqĎ=÷tąjz"‡Đlä8uBŽ×ąŃ $ö×äĽ8@ćmŻšvËkË(LŻeŕńžSw§ő•TŻ Ódod1=Ď_9Ÿ^źúRz~ô|ş4¸”oI_Üřľô葇ÓmÇnˇM){+Ëwä‰nÝ6.nDňđ„xâ‡?0ŇžńL:LfŞˇ<´z€şńâw… ˇ>÷€Ô7ĚU'Áo’Śť;ůúŤ6YŠ¸Â­€$Ŕ˝ćţĐv‡ňߡĺ2 CjWnT&]y KYC’é‰$}d)NfSę{œ#0؍śU˛†ţBűs_ ŃĆRDA-„˜¤°ăiîßËqéâ#Rđ™b|@jŕŢ*äƒX 7‰l$%ú/}Ԍš(V|ć+ií ßL‡Ţ~+˝ůüói÷rîçϤç˙"Ľ˜Î>őéÜÝŚÁ}ŸOÇďš/­Ürk:sömŰßsď˝éřą&ĺ¸7Ú3Ź‹/Ľóç.Ś!1†şł!îБcšÜfF ĚŒçďľ-mĹKęJ?°.˛Ő3ĎChÚF!(“úă^ Ó#uňUŐ6qăú×%_3 u+¤F¤yEŞ2ÚƅŘa~`aRg‘Xë yKĄAx§OSNćyŽAá2(lL D]U>IíJőC^;ňĐâwć2ÎŮ źMӍĽ&‰>Ŕő”—Hw¤¨(4Ożz)ŢwýŚú|ŁßţĄéWƒ$1Oó4Ożˆt#ĂAn>ȜdF† š J<śÎiŚĂ9´m:ЃşüZŽŰá˛ďm˘ÂCƒ-ˆ„d<ŕ7iŘôŰăiÉÍâiQ֍:ľź˘InXŠŇŇ"ŇKŠ*ťmAľÔ €âˆŤ ”Pl‘ȏűP <6ü"v}í°J>ÜJ%cÚşWŚ€iŘw!… ^óöżű°žÇđvó5ĺ¨׃Ĺxzłs9ţÖ>C˛P;UUę<‘]‘a˜žĹË鞷ž‡%…Kńý¤ˇŁČ —âu‘ˇďÄŔ4§‡S}™ö^‚<Ő/Ô7ÜŞŠŤő›T6tüt,ÚÁÔ^lbžŇ=@)ŠŮxJĄÉu_^^5ÚlsóŞíľV–×Reŕ`ÎĎźÉ`ŰŰoœQO{ÎĎÜŢN‡Ťą>LźÝ:íĺŸvFMşýh›–—Š͔ń+ŰçĽBRŞ °žľM}ޤŚ^(!Jȕ~ş`ý´ň>ě­Ř)G0Y9śhwšéÁJól§˝šëçľ!ĺżtéjúٛÓ Żž›Ţ<mޤˇŢ>Ÿűۨ _Ęą‹AÂî7„é°ďÔ>Š÷žˆŮ1rŻ&ÁŤ÷ŕ˛{^X$¤/ŻspČP@ń|ÍI!ŢÄ9Kĺ'ÍxÄĎ1ú¸ĐEáŁRČ\ůűö[[]Ď÷9ۜö˞)Űt†„śĚ ő`XMyŠĹđ41d‰Žkűń¸¨řôqŁŐ˝Ő !Śűm<ž"čş^ÇIgo‹ĘąMôRxFŠŽTQî#ű+ŠaÄ=pUőm˘öŽű{o;Őkhóς*.„žÜÝëěT~o¸ˇűŐšŽ¤Žŕ!bĘű‹úG´É¨]b{Ď%fËeŁŁhVZżuj0WÉągŸ=ż 9Ś4w¨m=Ýß˝ Ž$™e”_śĄh/`ŸkvBíňÜu[Ÿ+ČxÚr˙Jם~ĂÔ§<äBMYY諕1'99€â!BúyĹB…ŘX‘‹QŰ٨Sćéڞľ#;nhm˛ŕD¤˘x‘ĘłuŠ& KX‘Öfě:™R“+Đ´öŒąĂŸÉIhő^ţúbÎ3MFôٝҸŮČkžló_Î%šjĎSćŞ[WÄh¨kmĎNť_öź/äĆçW€â¸aOT§yš§yš§yşÉ’ŻSü™^žI‘ŚmęRú–ă&÷\Ć>ΧŮÎ~;ν8ϤšPČ7˛WÔmĽ&Ż9Č÷…óéäąăéäŃăi Ő´jśDŠŹ#ÚŽ´łŠ*/ß;ŒÓšł§Ó…sďŚ[2ÎpâXĆŁeĎÜSű=ěy-ŐL+Ě wŻůš2cbi/㛻űéĽwŢIOeĚdőđm髟ž?Ý}(Żwßů™“bŮ˙-9c„âÁbÎxń†Ęžď3ŁFz7×˙üťgӡÇŇŃ#ła\u üĐrđ> ţ7ŮşĺŚ!Xŕ1Íâp’`" |Ŕ4n@˛ڄ°ĐŘÂÓ9˛Ź$ľ'‰Í°'ĎvDňă{ŽÍ9€|Pűŕƒv Š6OćYpH’Źź:łŔ7… )k˛á\äĺO˝ů^ *6=şŚ‘8ś‘ŢĎđ…w-–/œĂy0ŹŹŽš"@5IőÂ0íĺýÜĹgӓKO§v?Ľ/ žšŽ/OëăŐ´ya;]ťňJZZYLG)îçlsŠ9m,`–:žđ  -âˆ@Mʧ6ć7ęJ(+ůpŒ€eÉő+´ŠÂ:đąƒƅşŠP"ĹžŁ(!伤vá8 (3$dsäy/t…x‘§˜ˆňN˙EĽMčÚŕFéTß,ş´!FQ—˜çőE}áÎ;ď2˛ íFá}tőę{ČpĚĆĆz'“Äýŕ3ŕň•+Wíę ˆŹP:lˆšŻR0—áƒ>'" 0" p-ÚU†ČG!,,˙<Ąoá1uĎéÔž”ÖWrż|ç•tőbîó/>‘vţúORúţM#6ŕ‡ŽŚ ˇ?œîřŇ׌\ą”7óM6î.%$™é×ßL›—‰ŐŘĆxo+˝ôňłůš‡Ň: 5kËŠŮwcGá$(“BPF~§ÝŠ/!Aď{ě1ëOšSřšƒă!0(/ćH’ŽpŻCRÁ‰á#¤jC9dL /Š(ŽÉgSy÷]#ȀLţRéa^â^PVÍAÜs)thÜ@ Đ=’Ňy0Ć*…D~R^ n”Qĺá;ĘA;jn’Z‰şržÚ@y?É(ĘqęwüŚüNŰüô§?ľ—ĘU€x×6ŕ™@[ńÎÜDýŐ>´ĽH)‹ĹJíËu™+DŁNŠ3ĆźěŢoƒn.s…ĺîYĄž¤p1RŃs€zżQž#N$ÁyúŐKłÄşƒR\ż(Í ó4Oóôa§ŔÄďâçYô%“÷TćI`g€I›J(‘Aćűo@FcWĄü+ň€IđŁ']LĚ ƒrĹnł“×L×Ęp`2ňړ!Íďr—ÓŚ~wRň [ŤšE[/I*/•8:otž÷5=ĄŰ˝r}=íqS=Ô 0@rÚ\¤p‘<äďŔœƒ2ŁŃnŇRÂ÷ ‹Ý3Ć UY‹ ¨łvä__ş4šź¤÷övŒœB›ˆků.”°'•ݏč­/FŻöŕ*8.°Đë/ĂŘ<ĎŤr/ëv¤.J~O! DŻy…dÁç÷¤_Ťkż(§ľAďĹ?ěÚ3î˝âł6‚§:/’<îëPb–WĚC{iiżŘŽŮ}][Űč$'" ‹ÇzL*ż]Ż­:XŠ ç`÷1š8JWˇÚtŰńa:qČűߤńśš´~2#@ČŘĎŔöĄDwňú|;ďWJš’í1ŁcŹ•79&ˇ*’-ü~¤˘Č8Ý~˛üěýôü‹/Ľśi{НÝQÚşF؏ţÂĐ0—+ ŰÝրX,Rĺamvkj k@Řœ †×ŤŔE<śšî§]3č\ęřHŠ^'ŰË.ůĹ "čŘHdˆ4óÚ¨/é{)(8[Ťš"ő\3_ˆ\5Ěăi´găó2!,ň˝c*ŇŠ+7ýU/ő3\]ŽŻv‰!CŒěîŁĘҗ=ŮŘÄö ƒęèžŞŤöPRšĄos/ŮS‰”P•űÎé×5ć]M§îűÝĚ=Öu"ÁÉv‹i5ŰĂPh`Ď΋kF{•Č"2f“˘Ň`T5Qރ5 ľűʃ–ň™%“D˘\$`čݛHԈrπđńމ„ÂG}Ą°SľŁŚ9~3G+Ü˲é-t5Îäź6ÚßK‹K>>eŕžZ}jWţY3ĽÎ>“­T”rFÝł!Q$7L‰ŠŒ›)e$Ć-Ř3˘2~IkŠ/Ž*á!ŤRž 51‚U~Ş•?u’BĎ0 ŤÔěŰąuŐ?—!B´˘ĂƒäPŮsohe´šaâjNÉ=ŮÖjĄAr˙ž<—óĎm\}*˙´–Ož-—óBĘVÎ4$Ÿ<ž}’ďç>k‡IQĆ* ZÉšĆEMca°0×֛§yš§yš§›6í<˙Ă´űěăá›ëíăśVŸÚÝ7Â돵źŽ3&viq)•eŃTíxxÚ/Ż7'yżŁĂŢ.ůćľÖáőtޔ˛ŤT‡ÚÍű.Öy˝~Žý@‹ŞXQ´źEɘš˘0CşőPeĘ`¨zćľÁöf_šr|~o?-žź+>,íäÓwƒrE[Bş‚YšÖAd^Ź—růF{î ż ֚1ŸKš ŽTőőg¨qŤ6¤˝?X^K7Sú ë°ęţV}€÷ęŸőŞĂť^ƒňÝ`ćĹo‡xĎ…ÇYx ŕÔfIx@36=ť5  ĐĂ œ4Ŕ  ŁçHґŻ@0ˆň’֍óńĖw6XĄÚĐȃpO€- $ďňV–3ďÚܑ¨ƒźýľqb#Cšň‘?×˝÷Ţ{ Ř´.uÝ+Ň8çŢ=ç€öĆjÚ͆‹Ýź ‚ů˝ąt(-_J?Ű|9=žóýtur5ÝŇޖ~kă›éŰ´¸’ 5äQž@ś†ąRÝŰęŽŰäÔFOא|ꊧ:ůEĘĘw|Śyä‘ôšĎ}Î6[/żü˛Ő6V]E„ážĐn —ÂqRƐ2€î­<ôPi'€Uyř ź$ţČOŇuEPÎKŕ0ĆGÚĐÔ7Âľľ }†ý žű§~$ď}yřĎJÎĆ4kR™‘úĚg>mmƆcW Ľňâ‹/N+CuRčŠ+HĆQ@=eá7m€ÝłĂ ęOęgl šô)m„ƒSJ źŤo+lÂ_Đv\“ű*ďkĆH~Üsęžt÷mwäQž7”­{Mv3˙úKéőümşňÎkéđ+?ĘœęEäOł‘í˙ö˙JGM‡HŁlŒ9wćbş|ő˛•ăřÉ[,tÉŐÍŤůľëȸÝJ8˛1ä‡墯HĽAm@ýčß˙ţ÷ӓO>i@řg>ó™Ž @§ ˜čwRŇĄí˙ôÚWýČ ĺNüQż‹ä/őÚґyůWÍ-*'ż‘?ň…”A@D.ÍI qB]8Ő…"‘QHŢBRę‘'çŃtź ÔUÄęJÜo…ž Nü&•Ža.iBůóN™8Fä4úýEs ’ǜňÄO¤‡~ؔ+Dü‘A‰~­6Pˆڙ<Ż—ß˜?;ŒYęÍyŒoňĺÚR{!q<ƒĺ Ü{3÷í§ç’ŻŠ‚„źľš@łÔľ­I…ô˘őU*čm /A}E:§ÝXsă nRíMČ}К…­<׍|ÔŻ}Rw|Júo ÷ć`â¸ÜĎiŻm’aEŞq˛qęC9Ôeí]w`u’`܁äęאu.I{ĆءŐ;`݀Ł)=úzď˙}#źlm9ÁřȑcFŔˆ€°í&ăŠú]Nˇ}ő{wŻŞ~ĚYH“ &ž8\§ŰŽâŘPˆ8ůg” đŢ6Ľ‡üa[Nœ<’î¸őxşóŽ[|oŁăúď¸NE0îä$§b3 kŁ˘ŃúžţÍ3×Ňł/ź•žĺb:‘pc_SďgúśĆ§úëbˆ˝‚Ię^ŐYĄ\, @ÓLí˝cŢőŒú€Žm)„ůˆŔşö˝gZFI‘HŃí)S!QbLŃeߥĚÔĽ kǎœ``ožŸƒ>ĚĄŤę4ÝĄűXíŢđÉH´/yÇІ*w7–ý˘ú™•‘v9`^Vš9NCĄBÔ§ľ×ŞC"ThŚţ,Ç#Ő1*lŸqż˜’?+fC­č¸Á@j“T—9—ńĐç$Š›R7éĘDš7#‘AeˆcąíÂ8…đEIdŁjŞż¨~*ŻćËĎ/2Ľ2ňfŘľyź§–ď°ěC›Űü)RM(ƒŮńÚdó$`žH*ĎlR]Ľ°á6Ń+˝ÎŻ×šíĘČ=ƒĹ$%)Ňâ҂={|ܿȜ÷ć„LçĎ}ÝĎ2ŸëÁX‰lهŠQ›Ůw­‡@ŞŒHR•š‰{ć$ ԒDäKŠWI˛ţšÜĆš`äľ<ÖŇ~šßŢސEŒ˜2ńv´"5&óák‡˘‚SW=1҃B†Őri` ­¤˝ ´Él›LëI“öü÷YŸg­OxřŹş˜ż‡ŚÄZBC2˘üů:ky\˙Ťßť/ýő×móJ>׿ó;żÓŐEm Pm,œÇŻ­­DJŮąĐ'r2œ:uŞó  pŹűJâ\ژ÷hTá×"ařŚĘUC('÷–{(懲œp]<ĺűŰ{ú(DIÄŠepÎ˙ń[{}úӟN<ň°Ť”‘~HŰSwĘ÷ÜsĎYŢ伜SČň“÷˝Œ!ôwÝŁŮ~ řŽ"eqŻźeŤ#€2íč†Đ‘őSęŞđüFřŽś— AÜäŁćBŰÄ eăxúëĺ&ů‘ ݡœČDd&—c~ëÍwŇŮÓoŮýZĎ]äÜÓO¤s§ßNGţâLíęáÜÇs;ž¸#]üňď§úř­éTÎăî{îK‹ë+śĺ ՓÍđĹËWě!yáâ…ÎčC](ŁÂUШëŸüɟŘ} ôÍo~ÓÇAncžăŠ H1‡~'E őc^"˙0OŠčKÜSŠ čXňŚĎó7äŔ)ˇp}ĘË5y'ß3î5}…qŚ6—ń‡śĽ}ř›ÚÚWĘ&* ǒcˆ˛pßI\Wa1¤ʀˆÁ1‘4ĄąĹœ@{HI†DŮč§ô)c‘Df˘Nä/% ’–p ÚäťßýnzôŃGÓoţćoZŰGc8}1+cíCšv$L¸c“üš.d ډś‘ľîs÷óţűďˇ6ˆmF9˙œGš„6ÖÜ­$r}žDۉ¨!ăuU8ňĺ}ëÂËs‚ĹÇ,ý˛ &Ń oöúńw•%öőyš§yš§_DŠD‰>˙C“˙żűçÉ ŽŞÚÍ™šë†&e™Ś@č(ˇŽă”¤ČF’bä 'üî0„=|]Âz­8¨\‰*…€Ć˝=ÚޛwXHœ§Ö}؊ŢÓśř“$î÷Lšź/o‘oÔHupYIuëíĐNíSŞŚĘŽź#…ő‚ŤWH=Ł.`SăŢĹ]ţ.Ľnm[l„a}Ў.ä_›ŐĽü"c´PÚď}’ŚŤ{čËy˝gśdĺUG’€4łžž_2ĐN{+€-­‹hoy¤;0šĐ…~Ó}ŠyË6 şÇű)’pßćՔ ä'fVĽn^'oîőĺËN¸ÝX?œ×äkHH1šöúp%J–÷¤"x¨ż[żŞűp%:×ô…&Ýsr1;Ä:Ň˝°mŒU~fqĄÎkćĂéŽŰoÉűźf?´ž™gŇÔÚ"ËfÁ˘ďš§ś— !MtúÜŐôÔs§ÓÓϟNŻżłśŻmŰžp[cg–đ` }rÔţŢŽ…VŃ˝R=Šmśź´ŇíC˘âƒÝŸzšLѓŠšŽÖ!šá4‚Ú‘|Ż}u$p–ˆ?öÖŢ`ź>öœ`1(ę$ýzÝŻÁ^"†Ďř "˘›2ÍxżŤÓ,Đ‘JqˇwśşĐ…ŒO^\_J".č~H‘o–$ĄňĚîqIqLDZ™#ŞĚ̒*¤¨ŠP°ŃŮá 2ÇĘGű]•Mט-Iý$ś§ćP‹š“˙Ö8ć<îűEٞ˘Š¤îĎ,0ĺŐ&qßĂ̆‰Ďą˜P ažŠuRűč%˛ĹT?/*OłýGÇƲŪꝢ3b$rÔWř,–ďeSwi7ňaOë6‹ĽŽhąÎ ňŠS˛čxMMš";‰PĽ:iżËX"D‹iwwj"Sš˝­Ž†6}ţőůhdŞH}7.tíd¤#(Ž“H„‹ +ą nçÄBŠŒ -™}ŠŽ—LŠÄ/_YÝŇ`\ÖŽŞ""_j\m+ˇ°ŤŐ°d)íŽ(UśUŰzc4~-- Ž¤ĹĄ‡fQ[—Daźě~%óĺ‹Ss‚ĹÇ,Í ó4Oó4O?_qâÄńđ|šV˝d]y&ă8?r4ݑqϥՕŒ--v´“Rř œnœ˜‹ÁHŢxíu ‚ý~™|ózr)ĺ@Ábá '*s>xéËŻžbř­ëkëS{ÉŮóTţö€ëŞ8\<ů㟤?˙óżHŸzřĄô~űwŇьIÔCŠgŚ)‚­JëE}’D>`'ŻőŢ|ăľ´ˇłkĺÝČëťĹĺ•>߼÷YRäľČœ`qŔoÁ"ƒPG/y^Úô˛Ř7ő† ŢőłŽ˜*mF8aŠ`Äč¨ @Č9€Ź€c˝­9^ěƟcä­Ź–6š’€™ŃsCály) ×f“˜/…Éçs]Z]“rߝŻyüؑÖ7),~rţŠôŸŻü§´5ŮNi-}öÂçŇ­+w䉨ÎůNˇœľ k.Wáh?č€ŕH`ÖůF^đŽ|˛p]?Üßß ĺę÷T^ŸŚëK\ËT*Ć=‰'5îťĂš Cĺŕ7˘-J‡—,|'F@ľR›W‘îťňŽĄš#śĂ”Ճ°Ŕ%-ĺ=ţݡ,§“G2xǘ*}˘r‹ŁG×Ó­ˇœHwßu[^ŤŻ™'wˇŻ{Ұ݋Ao+iKŇÝ<žž}ůÝô˝'ßL?}áÝt1Żs–‘ăkُvá;í#D`ĐŢŢŔŐڕZą‚Š€ößž÷OFę‰űŠq^Šŕ˝ÚnŠ4и—żÎ‰ĄnÔ_"Öč~Í*>¨|iFY!Çń>jţĐ=UľHĚDžRn˜ôŞąű$ż{NÚVś-ߟ,Z;ŠÜďŻöůę÷"´Ç4ťÇĐľŁúBŤĆ#."__{ë¨ I&úŹźHłD íš4ÎĆ%öąńL™H.đq:1cřl?’ҢlM<NRyŒ xďîx÷ˇH‘$•V tŒ ™@´hk éžŘ¸IN:ŇR}NhĚP}ĘúЌĺҋ!ú•ýćĘ ×‡?Ňý‘ÝŽ™4>Oœx§pşjwíą76ÖŚÚmss+çë–xŃň@Ą”çʸ„¤’b…HtŁ‘?ˍ1ppBĄÁR!. đÓ6“Bžđó[#ôä¸ ˆ~÷jWč7#Ż?ĎËÔLs˘’Ćxźß)¨˜łŮÄÅZğ3ÂNę^i„)WťăPZě÷čľ7yÖ§Đß(ÓŔɊ­ŤmLRîۃŰóqَŮäßęwr.;y­ŰxS źse×ĺ›ažÓżüÝ9Áâă–~ö‚yš§yš§›9‰‹]˝'‹Nş˝œíĽ._ÉŇŚŠ4Ĺš e¨ő ŮVş=Më„j›w›~m˚Us36z𩥼&:‚cw^ˇÖ ¨žŐa;­\—Ú°÷ĄM%Š`„_YXtG_sň­ëΌߊq•=X çűâ4EÖúlí?ţÇ˙˜÷pw§Ż|ő+iu6*Šŕ´ĂBÚN×!iݨ5Ą0’BǃŮđ˘ŹîŔڇďӚ1âŹţwšrđPžrę&ߌĄÎ üö‘,ž÷˝ď=ÎÍŁcFojm8­Ířd”‘aŕ  MâÝóÎƉüľą"ąVœç˛\‰ŽB^tpŢ#[Í¤Â’PV­€iútş&PžźčԀů\?núžöÚkÝ@7yĂlä:zčp:tdÝ6W—'[é§o<™~0ţQ G饭‡Ň§ď4=´q6:lnćvČ/(wËbpÁȝӡߖ7HKžŕşmęÔ#äqM[ȓ›{B{Jv’:ŹS_ŔHڙş!ýO;đçŇ \î¤ęרּ)Ě řĽĹ˘çXôÚNa¸×´?ď’ëçţp÷0Wę Ę[ "ԗwýĆyӔWڂ㧹}…ߘ˜ŽŤ/}ç;ßą{Pš"†˜!ÉŁň‚6Ž”Ea&äÍa첢ÄB˝čg¤ź O{ž§LÜŽ9)’&x Đç8•‡˛œKýE}cĺÍŻ>Ž>}ڈűAůč´A6ťl§1؞=ónzóő7̸ź0t#Âąlđ;ź~8 —ěxšÄ˜:sö\zýľ—{×j˛ŸÖ^ýQZxöť¨9ĽýŤ—ŇŇą“i˙ž/¤ăżţŇ;ç/¤áú‘tęÁϤŁ'ŽÚF\‰˛ĐSśoűŰV‡o|ăÖ.}h˜^ţ”ödŹéŢrž@$…ő‚ çŇG™cާ,ÄŐŤ]`l¨żčËńËýŕv‘@áV¤ČŔyô'Ž-um”ú°ŒSőá^~×űůÓ§(ŁÚ"’Rč7Ě_ä-ň™ćd=Ä2‡<č#"Ÿq.׼ÜQr”s j07<˙üóv ,•+†ćPSH|Żš˜ş*NŰ×ÉXÜcyYi!Ŕ¸bŒžňĘ+]Yjˆś‰‹kĐ.şoÄDžŁŽäÁ𠓤E H,”?Žq~SČ)Ý uúŮ9Áâc–~“hŹ~ż˛Ěďí<ÍÓ<ý˛ŇűÍ9ŔJÁâ˙"Ĺ-e?§öůtë í•[ĹkݧÎuuËČ%măęzţúÜ,oăAâ‡S@Ś}y~ž–Ÿß”ŕŔŰ塅R`>—G:Ŕ‡.ńÄőłŢŻł`eXăσŃTŰřő=ţ{Ćľ/’‰ˇO˙|ׂő€>“.@ŞĚhcDz~ĹP•zťjTn?śżF/˝/š{7’L áĹĎCт6ĕLźŚ"͈ AÍ~ý#‰÷qGŞp 4Mł4ŠHl_˙ˆ|QŔžďS“IďďďuQgH嚩`يĽ—šŘcLŠşÎC_ŻÝÓ˘Pâ䕱5˛B:Îׄ:Ýîˆ˙ŽV8íý?ë_W=čěďęŕ1gkěÚĂÇŹ,ҡ/§ŐĘÁ˜ŢŇǎJˇÝr<ď/`aÄ BT@ šzoOĆÉÄÂă\˝ś›Ţ|űRzňŮ3ééĎŚmÜąQ\šíËÂě¤4ľg$IőP„)ŐEíg/ ’şýPT’ĂÇé˛őšvq<şŽ zÂÓŕş>m Ířú{ŢA} ÷ ĆŨŘyŚ`ěˇS÷´îU[ŚÂƒřęc”šˆÔ‘>RQ”€$5öńőHR‘âIa>5&5GMĎMu×ćł™˜ˇő×ÜĎYăĆ{Ťúq­x˙•…Ôß"ÇĚ*ÎÄűŁ~éůTSűÉYľ]żťďFđ؟"ÄüIÚGj~““Œź+Őfqď•XbţąÍ5˙Ě~7›”w$Sčžőm' ‡ý<Ąţ.rĘ m… îýłĘ ÷ŘęâýČX Şť>ëeÎť×Œä°şşŢőš&E˜Ö}żň]Nä‹Ä&Ý˙Ň댴h{á¤çœĺ’Ćᤠd˝¨ôQ€blĎM#jԃwmÄ7ľ6Ő×qŢw%"…Ą2şJSfdJKôZlEłod‹ĄÍąŮ&9ÉvŐbzb„Ö OPÍąľË$ŰÇÔőś|­E3zOĆgó1ťi°T[yp2j'"ż`Ÿ84ň1Ls‚Ĺ<ÍÓ<ÍÓϗäHސtžœ” Ń?×ëŽX_k=Äęhk`îM×Űôv ľžđÍ._{•|J~Ĺ_ÁËWćyĎŤäď™Űźž‹GţÇszĄŕ(ÚSŞzUŞ‚yƒĚšr-_Ÿh­¤çˆ)xd …nČ=üPÁ ƚČó‹kç˜bÄvPţ´żľq^Oŕ,`űězxŕzÁ› 90ďřNiçü˙ńMA°Ś›$؊]Ä ¤p€(É{1ŠăÉF OćíbDăĽĐňjCŔ;L†?RÇxă{~ŒŁr žţR@Ú$A3  (Čßë.IňňŚÓ Ľęäő¤ŽÁćăŇĽËT˝6Ö7Ň­ˇß–Ž:œ._š”6ŻnĽ+ۛéíóď¤ÍúZz~ů…ôns&­Ś/Žż™~ýמ––P|Čůľ+É *—/.ĽˇöF֓ T`¤x÷Ň9cnŢpOű…ĹĄMt´Ŕ ő)‚Ď´ŤBhĤ Lւz~Í>ňů€ŠR} mŠżT,țë?ßs/š_´JŽ ­ű)â e‹Ę RlŇ‰źÖe, ąřľĺ~úň= )dƒ*ZäęJ™(ő•'}‰{νöŮgÓă?nőúęWżjá8†k+†,yĐoÔÎ 4ů|Ź“?ä dmŔi?Š´P_’Úˆóä]"#őâ;=\ćC!Eë’ëJq€s!čŢŇćjČ"ŠM9†ş.ć‰z¸¸`›<óț‹!RľGĽĂ‡6ŇöNäóôęĺ+yÖ˜ÇÍáCëé˙`ďOƒ-ťÎóLđŰçœ;ĺ͛r@Ě31p'‘’H ŚdY’ŰRË%‡dľşÂюîptýstEô?˙rýŹv9ŞĂŽRý(ŠJś¤˛EÉ(‘)8‚ ćyH$Čy¸Óvíg}ë]űŰ;/@"!0yâŕä={ď5Żľ×úŢw˝ß…óvňԉŚÚáC¨Ň쵅Oütł‘o^2O|ÓN<ţ°ŐOÜgӗłWţ˘Vw[}ývaó¤-\ťŽ8”$ž†‹Ë6ŢÚLŇľ÷ß"ôüýŸýűśŮü†‘ýüsϧ ę*Ćť&ß"dáoúśŰnKíB™čkîĄ?¨žŠ?žľˆ;˝¸ůş…ě!ň‚ú }€k´-}—k´ąŽ  §NEš NuDö">š˛!>â‘{âQťŠ|&Bˆ8äUn^t~ľ^‰ĺt$"DHmE$őqŇT˙–ÁŠńхë÷Ţ{oú¨,Râ ŻË] Aî~Ô7ĽHB=ˆdĽBĚ]Ě7ü[îOČĺdlňJR4‘uDYgYJ–¸ß,đ”&eĽ˝UGħú§NxžrŠTB<äGDƐćŠÓŻ>fóđĂ´.郔ŃŔřV‰o-´ űy˜‡y˜‡~čĎ3}˛ĹN›ó7#Y8Wbfڇä€cƒ>s@mšŒYݞ°ec_NŞ2¸Ćťƒ´Sřfľ,H.?06řÚşNkÍYĺŇIbËä‹&ŢÝÍ;šÓˇ[[ Ż^Xp™Ń F€°A•?Öuƒî;PăJQq‚ “'îvdએt"ƒ€˛:­‡ žNpPFF›H'‰đ>›ľŔâžeĺ‡*äMZţ *ĺf3+†ţáŔ <^žYüT:8%Ĺ.ʧ–Ő/äa•ľ”dăYÓăĆAdÜŚ ŘJ§”ŤÖ]‹ž•îx<1Wˇ˜f…ŠY)\7ťęD ŔzźŽEđ¨*?­2úŠüś#Öu4 Ő%σ\/Ú Tóv‘AŹ*„ţ֐4pZAvł’H&ć}Íď_LíäŠ/Śëëë›Ď…bkđô‡…˜ÍÉçÖ8•O0ŐłœçĘdČ Ś>§ď˛ú löő3{äĽ ťńȢí[elЇź°8N 9}× j¸őX_ßś‹ÍzxýÂś˝~zݞ{é”=őÂ);vœ59ţiś;z}2hHžśĆŰĺÄ;Á]Œ;ŞÚȕKę/ŒŃLž'8ťŕÉî$ا$Â@ł_›ŚC(+Éř—@Ű*‚†é˙™dŇ;a–ă‡ˆTĺdÚ§ŠMĽXéńů|‘ÔqŹ ÜŠ"đ2ďÉűlÖ!Dđ=’.vRœq2ŽťĎQ[zÚ>žśÇNaŹ%jŒK"ąýuĚţI.fŠGŮ?č?ůDJWľw'̏ÄíןśŠ+Ž$—$…ě0këb}ŹĘí$r ÷EâM$֘Y ĂľŠŞ[ŒßÓYT˛2ˇ¤öIy÷y{<er‘Řđú–;™YţwU€˙x(‹}!ýŽzLý"Đ u‰QړFľÇ~űŠL"C\˙GՋÔ?r˝8yÂçÇH&I#pPßŕJÇӞvˆŞ—4§SçÍŘ÷÷JÝ9ŕ%{¨öôúVßPޢ ŠîcœnoíJsÄĆćzšç f,fŰ TYWŤ!ł[*\*EIKŔĄ^Űôý]dí^&ˇáŹśđž•[ŹŠaĂü^š9žQ7cšąw.Źdˇ,™Đˇ=8™Q*O'é */ kşQłA=÷%Ăj!÷ygŹdF>F‡”aÁßGS÷Ł>ÎÄËY=śôj™˝ĐĈ‹k›‘ŽؑMśÎ7×.4ĎĎ|ŽJaşĎĂ<ĚĂ<ĚĂĺ°™ďi0Ą:Ű XO€3˛ăš“FE‰HŇífgYąąžš›°Y^ǰŽś@źZżQźéďŹqéďôY‡dę*˜łäbƒ<ŸÜöĂä‡ĘĘc i=—Ö$Ú' ňús¨őî4çÓm&łiŤPIžÁ Wp˜÷Ç~ôǒ"á0­y‡­zGĺ„yBÜ#j U괖Ӂt҃”×)Pj]×áâ"h˝ŐŇ[˛/ëKâ•űË!\6 Ŕ͸€IB ŒAg;‚5šAH2ł0$č$ş˜ör Á0S§žÔp’–ÜVĘAęKů!Ŕ V”6ț€5ĘÄ˝t|˘—Š7÷ť{ŽĆ°ľ{]{Ő[\ݕÜl@ßŐŐ{áܖ}ő¨=˛ő˜U“ÝtćfťiízťúŔľÍfg+DĄ ÔÝ ¸Ż˝ňš4:jCůâ™Ói`P‡ü͇ɇň‰ˆ@݉0 -2÷PґŇ,ĺ7Č&řŔRŮ =PW>ř`Š—A ¸Lţ¨NÇÓů´łH¸ońC†’čjC$ڕz–‚ĆAŠ•oÜKÉ/y8J /”U.i´ ”ťââŰĺc]QăąÇł‡~8DpC‘ PM˙YH›YĘŁ|ä’Oß*+¤ňŚ@ş¤CşŞs‚´áŐ5î“"‡ŒšôčרˆˆˆóIyi_‚ˆHžhχúŁmHŸö˘MčłôeĘ}#“ÚäŔCi ɰ 5ŇM u“śN:Ń/äc ٞP×˝÷Ăśďş[ěÔĚÎ<űźŮÉŁvřĹoÚĆůÓvćĎ˙w;ËÜýś{ď6Ůľ=öÚ){ň™çíÚ믳_ţĺ_NĺĹÜľľľd.ϟ=“ŇÜlĘnľż@örƒA:1ç'­(›ú7÷P.žé?ôg&¨kžĽ¨SšoĄžŠ_o˘" řي‰úŠTC$ŁĽúŒä÷)îůĄżče)ré’'ůĺšB҉“:äW*´Łˆ3ä4i'ňË<ÇďÄ%Ľ ú˝ž•;%šÄa‘ŔŘ _¨Vŕ˘EŠ)’•ĽŒr["Rƒd…ÉŤÜyđ!^ĘÂorƒC˘NU^1)NЧdÔ&˙䁏ČĚ/¤E_}衇ҽrCţ(7őÄř¤ž!MHőBe%˙2\é=@şŒm:ç'I~8C'ăw ý“pó0ó0ßĎПgžÝ߄oGţ UňŻžôňa gw’‘ o⸸ä˙Ź@,@ł*)ÚúŠ6ůwĎő"p–“Žńp„ŞčË@z€ZŔLÇsZ Ń:_0÷J͚¸gY Ű‡ °ńg\yŁ1¨$Ń÷/ň€i´1¤ŒBHw’ÄÔ,¸MqW+‹y-ľžęŻŽw5u_›Ü´'fSiâW×ŘP)ĽÚEűŠ˘Ô]™¤M]ĽbŰĹó3Č$…é ‹ƒŒ­­g AŚŞJúNĆPŢZ˛†ňl4u˘ÇVJR'†“;™"ŇŠđ&})>&@4íö&EˆÍ´ßJ„ …Ć(Śą@˙ŸdňYPWXˆîA&ĹHéđf÷ žVöü+S[]ŰŐW.فýÍZ”z¤O6ßgĎ56őf˙ł1śłç×;Â9{ţ%ČăçlkěĂĘ5v›úŤ’Â…™ƒ‘Œľtú<Ÿ€§ž[BĹ u\mr)i&ÖşD°Ň_0ňß í=ď‰$A;4ĺÁ2FȤţŮě;č'é“ÝÔX-Š uÝQQÝ%).`FšÍë:Ó­ť•tš}Ô>—âN§ÇBËN* ę7ę'8žOÖ ßŠäźHšÎ•mt$Z'ÔÔćnîOśK?!4ĺěI؟Q`¤Ŕ0hçÚLJ’şĈ­­ÍœçvŹÉííOIťŁŘ2ľ’ďa—)_ƒîÉ6Փę=*›Dľ!ćŠ)zF­ĚEŐpŔt1ˇRaü$c!e5ŔšUEIČóŕćfďUžŤ†nČ6.wWłm[ËŰiY\Ő­Z‰Ę#Ľ‘aÝîá#ĽôĂAë¤Ú÷UŽ‚,k턈"VˇJ"’łÜ?˜‹’K wA¤6á^‘("éIAv:^+ýą§ÚűšNjĆ|CˆZ[ÜgŰŮÎŔ)N>ěě™\ŁPŢwaĚD‚J›v<‰Yßä31ËzĄô<ńˇcsPŢCţžĹI&Űä9h Ł°•H-°Âz€š‰ů=‘.+ľaU€S[Ň?§¸)1˝ť§ţâČ@ŽF F6wŒŚi}dv´iÇf-3[ó“pÓ]MŰŽ77l4n$bÜ|8ó0ó0—khÁűYÁFX˙ąCÁVďëżăzD'˛‚v}Y‡ƒU°žgŒá7˛É&AHŁŹßŇŇÂ׏¨VźüĘŃtďžýűÜí}P珇-üŮ:č¨ęY'˙:d÷ŽO>ů¤}öłŸM¸řG?úQ[ŮŐB:uQíÇđˇöN’n•ńа )“GîHŞPţúuŽ}˙ցsţć ŤTÇ/‡pŮ, ŃůŢI…@>î#aB`>ż¸ü2(ů( Ř(&źÄG'“ä˝:†dń•&ů1ƒkS"@БÉ@”xľŠ%M哎Ƚ¤0čŚ ĽÜp €.…Ś3ŻŹîN2qç7ăB“.žJOoœ˛—Nź`l~ՎOŮŢĽ=vĎâ=öŽ+Żł@ßÍŠ˝pÚOq“w”ü[Ş’,ĽŹä ´)ŻŘěňË#iSňOyŁ›š˝ŕoˇrËÁoœ”“ňę;y0 čĘ@üň—żœâ'ŇĽţ  P/RiRĎüÍbm'X7ĎB" ]⌏jĘËsŽœJ݁ňjłŤÍž €¸)›ÚRĘ_˙ú× ™ä#ůHJűŐĽ\""ńÓÄEœŞĘ đZn?tşDŔşňB"˜ÖKƒß¨‘ lů•q7úYrß­K ô–‚ňŁźČ˝׼¨Aű‘ŚTâ ÍtŁb˘$ ŤM9âA&’€ýÚqĂ&|ÝmwŮž=°ĺÁ/%U—ńńmöčvúř+vć[÷%ő—ő…}v]3Äîzײ­Ÿ=Ő¤7´•ĺU[ĄŻěmć‡ĆHtáÜŮt‰K@€Í­ ;úň+Yía)ČŔ ¨vcnĄmŐäłTšŇŠ‘IT.ڜúĄ=T6ŽÓ‡xV§DÄaLńÍ"]ęQ¤ Šëđ7uIË‰ĆßęߔgtúˆśŃxVş+ŐŮ*QC6ă­l7XqŐkŐF4ˆ$C?]]ÝÝ!=H=!¤l ŹŽašÝ†yœŚ>3qŜi&šUƒV9˘o VúąŸ ř§ýšż0ćf˛Č5Š ź‘ŠÁ×Ő}p 3Nd ń4ź}Źô;É3ť[ŠŞ¨úaˆő¤č!Swo3Ěsů´ÓžąăÜŁrĘΘň^YGBő‘3ŞtŃO5Îź_´}Ť.Şz×d4 C Qe4Ž ĺ'ÖyźŚźľsťˇ=Ä yÄŹŘndËŮÚöůBö¤čňw2ŠW}˘ßcžvRž‰őÇĽ~WţőŰ´yŸ™¸ŽŤRĹwĆłƒ4Vúfz/g˘D"Ÿ™ť‰Ş2†ƒŁëéBVu"+f÷ĂŹä$—\ÓĘ]” ążˇYuމŤąąÖűl8CÁ˘Ďzr;2mÚˇ°ž‡y˜‡y˜‡yřÁ ŘŮOœx=˝“Űąf!\œ.î§ű¤ćBܗkÝ/â,kpáŹo¤†ĄĐ')ÄőžÖXÂEŔ¸ŽýżŸß7ËsŸ°+2:eŕŇć[o˝5ŐÉNyßúwʇ¨¸!"-؆ŇăčMŢ(˙qďŇß/KEúĐ!đË!\6 IÜ ”fą.BAm ŠÓátrŔ6Pą‡ TÉŢbŞĂHI@›x:÷ŽąY >î É5:˝N Čo#@ł@oĆÜd8KëĘ&ߢŠ[?ŔÝJ“6’đ•WÎ6‹óĆ`˛0ľ‡†ß°“çpr´nw.Ümw^q§]łďj[]\K ›QëŘŤŻ¤4ő¤!e ŇA„hŹ˜§Ž Rxú駓őNę”;÷“.żQ‡Lf:ą.rM”¤!żÚ´ÇúŚÍ(ŤÜ7PVą"Fˆ„!˛‡>ô€TîÇ%ň=ÄËix@dmdŐޒוr†TPřM@ŽNčS×Ô#i¨ß‹č —Oti@Yäç)Ę(É MýDr„Œ.”—tEâËÚQíâŽjœx"ƒő,w&"§¨žů¨O‹8Bš¨;‘=¤F  ż“â´&>)¸hŹËEĘvŢ´ŻíŮm{öńiú|ľ`GšćěşkěÂm÷Řł÷É^<;ľݚŘ‹ 6={Úę/ý{ľ1R­ďmĆՕ7ZuË˝śÝ-Nœ=cË +väĘŤl ‘ŚŻn6•ɸ™gĆíő“'Ňé%ÂúúFj úĽ@vĘ%u š ’ęrŃODR’|ŤTlDxâß"BQnšĽ!đťDt˘~Dšě•SŃľˆHVôňG=ň7ý™oîUťŞŻGUŠěČ@•x GqŸ[RoĄEDĆ2ä#ƅˆG”IýJ¤*î•rĺŠCă”y„rR7ô#šDáy‘Ţt"G÷2ŽIyMŞzW0vľ°Ňź!e$~Łě"0Q7”1'b uĆ8•%ĽĄ˛PżüF~4~H›0'XĚĂ<ĚĂ<ĚĂĺt2?‚"ńTŹŻĺ¤dĐŢď–Lá`ťČČöűÂ)îA&H˘U7b„Ÿţp€ĚIU^]ĚëçQ9!>Ě@ZLr\uÝ暎ť'tOÁ€ăx9Ç%ĎŞíT~w­Ń%  2@’-´>ZŰÓĆu!D 3@WU ’k’ ľĄĘeq`Ő÷y­z3/k$™đ ĘHŸ&W+͚ĐÜÝy´'Đ˝ ¤h°PÜDÄÓë~ď$ŠT¤ťYJ5‘*<揄,Ź;ŕ™ö@ V}EéyĚ‰’ţíiďiPôź´`žN Š˙Śg’âDŽ“˛ˇđÖ2mšE‡#ˆ=4ݎĺĺÚÉ=YId’ݍLëI’Ľ÷źz›ÇúSފ:‚I fčŽlĆđ­omű4î@cŕs§‹bBú˘ŇMü–]Ă ŽŇäy+÷ŻÉt–Ód Ř÷ś­+—a!ľ¸ŻU‘ńz&Y[ľw ˘fw€ZU‰T‹aœčoůfN.Mó‡xňJĆżĐÖÓ6?1čĽŮŞ Č̀\ :}"“˘’ČNŔt”ëd˛ž=ÂÝưÚĚuœ¨ŻĘ™÷|Ę>ľqĺ°ÚrŠ)&’˝bź"‘O&žOtĽ˝­bĎńN¨XĚŞ qŹ*ß­ňŒuƇ×{VM@=f:NeĐ‚ű'ůrNőbÓRöhČŐ{@sľĆsiSę8+ŕČ_ľĺ†VԄ꺨X‚YĹÇŐdZň‘Ü2•´3š(NDwÉ´gmO/n÷Ú(.W Šőn ăŽöŁźÇžŰFĎhžŽsŠţÝŞň8Ů)‰!ä4bü‰|ÁpÓÝšŒ“+InÇö@PGńły+ΕąĎĆwZ$ ĹźŤĎI5RöFö×ę‹nšÜ“öFŘőąÁ ӊD‚7"*h ŃßĂń^×Al<ăkÉŢÝ˝ťHźq˝D ƒ}kŠšë čĺ;Žńbœq=%r¸ ŠÚwÝuW:´-Eďâ퓢MĄŸŽj¤ŞqĂ~źqĎÔĎsNcâ7H!ţA— ÁEÉ€w€’§AE`áŽSßę@tLůňő (Iw4@/?š´Uq¤âQCRjl´8yN| ‘ľ 1Ń5Y`>’<P‹ŐMžI—żU^ ,Â7šß_?ůš=úŇăöČŕ1;˝pÚ\źÂnźŰn=p‡]żvƒ­.í*§ię-ßÉm ęA(Ŕ"y¤Ô!Ę’÷'˙\S>šNi“Ĺő>;ž 8×eIWĺ"]ľČ#Ô#ióo€W‘$űĎ5NŸ?ţřăŠ=¨´”?DüФĂß"Ä4†•EÜý‰—ţ"˙K|óœÜČ­ $J¨›DxÉ2‘ť+])/.P¤ÜAĄź:9OşÔ;ĎĄŞ!đX'‚¤D@=‹!—"Ľ¨]ř›¨#âR§”?ˆKďĘHůrôB!)EwDbwžúÂ\ösćaća.Ď7úŃ˙'Aű@Ś……Ž;\[…0nU\š{8lOVËíŔŽnśœŚya’%őČ 'đ›ľŢś“ EF†@ źŚ}U2~xŢZĂC4ÌsţZŒ”“Ź! Nę 2LHa#×Z¤ĽđЂp—*+„ #ŰŰcłâ–cPęJ÷šƊ{/‡ƒJĆýžI™#¸Ż:ˆ.NÔ^žś™MŠ{mŐĐK ĺĄUD¨Jť:é˘DłĂB4éŞ^ԅP/őƒh´"D`Rëb„ö>Öó˝›÷şńžT7¨4 rżňzUz›śźňĎľŃ`”üĺjßęň‹‰Ź˘ 'gů´>˙n|OOöý2ËH(żźŠ_ŤtňÝAďś?ČՎe5„:~–ÚQnHpѓÝĄťď‘ňAUYč^ĽÔžR˛đń8Îőî@¸úKěżŢ§ÜOąˆk&“VUAeeŽƒ"rˇČuĆklç>蝐•RP5¨ĂIŽRŢ|ÜŐő WhăóY4Đę^=ߒżŞbďéçO}ŇĽ2œ ÁFűżD<˛Aéoۨ‰4¸"Ecgœ{ÝÝĆ$ľżöĽŻhSW¤\*ŞĘs1.ç,e…ÚşJ!"Éc“ć?ËsS$ĚjśîTĆ8śs[ t׾ć@ϐ×ç°ÍGíJ%Ľäwů†śĄ_Í$M`"3´ęC‘x05óĹĽD:LĆGĄ4Ďő]U¨oE"ƒB_ů%ś—Ţ‘"Ě2Y.ŐTwu!.BÎrwDqŹÖÉE”÷hÖ{U*+šŰ#‰ą 1žNŒFôřoőÍ?qN%ȝlŞ˛/ńIJ™´]ÝýűcBżĚ:„ŤÎülÖŠ÷žBM•]ÜtÚt(RN•}žëÝî.rtOʗuO‚¨ksŇgĘ|f`$RQ"§aC"WŁôIŽąfc'XTS'™+ϤĚ'2Ľçc:öwŃö˜z:ŐDÍťtÍŤšÍĂ<ĚĂ<ĚĂ<\ށľĘáÇţ#ě*îĹ}"AŸœÚ'-°ÎĐáe0đ‚čę­ż–؉¸ąSźÂ-Ŕ^tS‡Í[BůĽä‡~~ -9ˇýźˆЏ,ßűŢgűŘÇ:űéęäýë~0ö ŕ`7oDŹŘŠŢűykF)ΓWÜŻş\ÂeC°(&°Ř¤#Ş´¸§ss ¨ĹuŠBĘŃȸ_Š %€‹GŰ´Qč7G„čnƒÉ@¤f&-Ž‘6€(e`*]mDź’6@ł:°˜[ dÎ>h_żxÜž¸ő%{qőŰŽĎŰÇícvÍŐď˛ĺéjłŸŘËG_˛•fŁźwmżŘ€~ 89iňŻt#Mş"<oĘHš:N1@›sąż¸đ“zxžŤu’^JR]ěŐinĹ!RIÔpyÔ §Ţřr_@˜pI“v…|ĂäC[2ˆ%ő#Ů~'Ż’ž ˘…H”tɡ6š’d2văCKŠ‘ 1ßD˘řô§?ĘÄ$x÷Ýw§8ÝŘäˇŇŐÉyĘčJźŞgšĄîi ň% ä )LP˙" >jR™żRŠ#úJU@.U$š$Xd âăy^@:ĺÂ䎲rŸT3čŻ")iŒHEkŒýN#.˝<,ă‚:’Ô 5ů#ŠŐÜć#Wä‰4I{ÔÁŇ&˙Á¸>9ú˛˝Ü—ŸzćY;öękvĺ‘CöŃý¸]ՌNÚ5ŰV›ÜňnŰuĎGlńč+vü‰ÇlëĚ1[|é [}ęk6yúËvě+b/ßöA[<|źő.[9xľ˝Ôܻތ§ľ=kvíuפvT?&ď´Ż6íÔßr§!Ů\Í1Ô mÉó”WÄ/ęNuĚýÄ#…ž+RĘ=JWFŠ[@Ž’Ÿ2š4"nę”tšO$Ƌ&äÂDs:Ś/h 1öH“ů"śšoÔŻD^Đx…|ôđç{¨ňN˙ŰS§Îd¤a\đ{tŤCžE֐q†ş!N)§¨Ÿhźs?ĺv0cT\¨ŽNôČý eáyڄzŕ7ů-Žă:ÓÜ&RŒHuRa>Ä ŠŢť'ÍëîŐdÎcŁöSđ‰¸0”ŇGcçřÜjúűÖŚŸŞžů¸KŔëBî­,äř[uú ŞăqKdh 3UG Ôt%šsY¤J„ ŮZD¤PhIÓ„+n)m,\‘u7ăU¤­ąőŒúü$+Ą ł{—ž0ôŹČ ôƒAţťoŒŒŔt`VYČ[4vŞżs0ŚÁ^S/Œ–Š:Čl&ÂCK¸h ŽnĐşˇ¸˘EŐ*řD×%: áý’\#Ń766S=ˈŤüńď2ćIÁVjŤĂœęůkŰgTD R$…ć˜ě*F ˇĆľňÉj3Ęś˝íĺ Džq{–I‘°Ú'ŢPş`Š#:}Ę]Suç'l ąŻmŸq鍋é>ŕ›÷˜\Šj<ЎĚƒŮ 3N#ŃD¤­HX(ő]ž fĆRęˇăô~RťŞOázhq—ˇ 9ý>Ś|)~A˝O"Ů#ö—8.4&fłŽĚtěç‘‘îÄrÍÂb9}•EdTżkç“.Q˘Ÿ÷Ř?ŁŇEŹĐť ?žă<âŞZB‡ć¨â:75ӜA™Ćľ¸‹>O iËß˙ăäŠLuĚz.G••­xľ‰Ü20'smnĄJťžU`,͍Ké$,äÓíŚţF6?Ž1ó0ó0—cđCŁ`>ťĘ˘€›đFĄ>ATîąé C÷fDˆ>q ˙oŠćKЁuÖdZGEŇFŸüó÷şnĆyŰmˇ%ˇ Úß(.­ÇoDŽčďIô‘Ň?ő-•yĹ×Jýü÷ăę“N¤ŕNÜ‘ÁEv"­ü †Ë†`xčN鄽¤íuz_Ŕ"䝴Wç׊zk~řŽNYă:Ďé˝@E€jžĺ€tÉ˙ )Ő )b. "LJ:uĄtuŠA˘H<Ďo€ŰI}bm˝zöťorŸ˝\ľŤ.ś÷ů){ĎU´ĺĽÖîϔ‰äŘńWíř민 -›ç+_YÔ 4(ĽčAT^ŇŚŒ”zj÷ P'o´‰Ę Ŕ(.ԑ܁Ä:”ńȨJ:"8Ďóů'nľy‘Ú§ŢEŕ‹ NÄÜ~ík_K÷bžűÝď.y”ŃL§Š˜ ăé}ő))LˆŕĄ6'żä˘A3×yŽ|ŕ‰~őó?˙ó…čĄ  Ü2pžŔołŠŸň dŠC !L¨Şg‘a¨_ę¤5üšë‘XTĎéT@n7ň¨e‡č!â‚üD1!’'ś§Ý?uŁüd íĽnAŞ q“NTvĄ­!Ĉ"@\€=őJ=K‰@Š/\'˝`I—gi_Š,-5`ţ.łľŚíÎ4uôú眲kŮî|÷MÝŽŮĹó›öZ3ţW×ö۞˝ŤÉ4k [ŁfCëvhď‡l?ÄŁÓÇířăß°Ů3Űř `ÓŐ=věgśtčJ;väÝvő{?`GŽżÓÖöěMĆЃP´ ¤nŁîŠ7‘ԎÔmÎż!=qMҙ"wQĎŃw*÷Q/ńtŒ^dÔéň<żÓżég’ÖŠŠ'r}!ľ â’"iŤOÉ-÷ČՑćÇ芇|ň­¸™cĺ6E}kŒ“'žx"őg”]äEä@~rj1ĺg#R‹ š;‘Ş ýBő ~&ĹWE˛{ň¢Î(ŻĆ ×Éťú ÜFi!ÁG„!ÚtœÝÄD—:’Ł~D˛`\0?â§X0qiH¤znćáۅ>Ůsćaćáož›`ŕbJ‚Żeđˇ@— Ş|ĘXŠîÂĄhS éo­†Ż ¸Çó[šlŽˆřh1€şňánđś˛?ČÂekÉ´Ćśa)W]3`Üî#eęÍtęz’ÁĎA"Ml‰'‚[˘A÷TN]űB†‚ďi–Ljž&k<)lÔač.Mq!ŠTŠ=]ůIÝ*qS'Iş<Őłáä:­Ňţ’şjŔ*“‡ň h'Ęřžg;śÔyňýČ(¨p´ ˛BF9YhżL‹ŕ^\˙z}zůÜ­I~ëV)Eűň¨TPľÜ#p¨ňé™ŔvŔżvíր´łąÚŻ­'<ËJŮř•]pĘÜűű8ďŮŇéz[ZNĊM\"ާ:AÍb˜Ő?Tď"ވ ßWLäO}ÜÍ2$IÖʐ.8i˝š5NnŮ&ťvH Kî~d÷ěÚĎjěńÁ%ŠČ UpÇM8]ƒęĄúGcŃeˆßŻ6mŰ^ŽpâşYcŽ|&˛sła]őŁű“‹ň0k•$â¸+`}Ő%E¤9’ŐtÖ9ß_‹ľäŸAš'îŰDNŠŒŇÇ*vƒŐ@Ž|,ŸîÇ5Ž5&%^ę/*f4fěi§>N=ȝĽ°c'bÍřŢÜÜ*.W¤é!?‰Żś­s˝L3QB•t ĹÓlűd…ÚyoćĘ˜ďÄŽşC¨ˆ*%^/"Qů=I-u6MD‰4ĆhŁI—Ě"Bę-ƒNŸœ‚OΕľ*ƒ4&cťęÜ9Őľ\#ŐĹ~ćꋻy„úfźbËXZ^˛]ËÍ^´)ßh؞lU)ňťŻő^rÉť ĚI”/Ť™¤ƒ$ë“Ljň=čR3VW–w•ž–Ţ# ą?ŒË{°?m_[ÝéóąuŻČ5-‘.ρ֎H܉D‡î>ş)7Њ’#ăS‡á°č°O$ Šý”ŻH`Š3 g•çz•S}&’@TöřlœóŤĄ&iаH~˘"ĺŞ'ĺ/żÇ4ßBzZ&§ćԉ. Uűť7““zĹh–Č7›Űmťy—¤ą:sUŠ••ÝŠąž‘ťE¨Íó0ó0óp9ÖçΝľˇjŠčŻżőÎçwâŇűýë lůŹ5Ę;żşTů!îceöړ°&(ŔNqî”ďř­u"ë;p“§žz*á”`1ä[ŽĚ#ŮĄ_ö˙şÖAä=’Á6v˛ýÄľ`?ďýü+~ę\űę죿ÇúAoľ$Ő[źV˝…ďę ţÖgžőć߆˝×öđÝ4Ô}ńT‰äXč|2œ° —{ě:ń.Ĺ@6:ƒk–6•KEʝÁ)câdą€@<€iÄqó,R‚9â&]:ů…€!_Ą2H`Œ#tJŔ8âTyĹźâ4ôgž°çöż`gÎŘ]›wۏ^ýcväŕa۽؀Ëlhšć¸ŮL}騽zü¨-4eťňđ;}ţœm^Ř(@?ńłąa„ź˘Ęƒ6Rŕˆ>Š'ęY'hÜKýˆK§ě R‰ĐivŠ$“‡T5řMębiń;›|Ń‘ąE>i3@Ký[ Ä}Ă 7Ř=÷ܓڝz$Ô7ů!>÷GڒCřVűjâĄMúëwiýÁüAł?ôĄ×!RR!ßrÍ Sđ7ß|sş‡ňÉ­éĘ]€&lŇĺ´{ż_ŠňŹ‚@^ĘLÝ3™?ýO**r P›ÉZ›tꋸš.˛†8cRƒSOäúíBÓ¨?Ć$ţ&]ę‚ßĺęAd4~‰'ĘŚô˘!>ɨGʙH4ťÚ`!š 9öźý/˙ŰďŘÂâĐ~îS?c‡^‰IŰN7e]_ßtŁć 1:mŽÓ‰R¸ńĆlď›8°<6 8Qřüšöň—ţÚ^ůyťęË˙ĹĆťV­ZhŒB7źŰf?ůkś˙]7¤ş"ȍĺ’BĘKٌô5~çĺKŇ˙˜â)!˝üDŹŇŠOę‡>Ř'jP7´ őM›QÄMűJEƒú¤J"‹{H7žđ4ö¤*#U —ę:œ>2xhÜqeyA„Šcˆ$ĹÜőWőWŠ?˙äOţdúMij‘˘¸dx%oô‘;âˆJ0ôg˘Q*GRP!mő‘Ƈ wÄIťĐ§Ł˛:ĆyƒüĄšY +‡ˆG ¸0’;)‘e “0~QáĆěŐśoĎîäsŠÔĹěóx8ÔIşŞřŽĆhIPżŃ"hžű-Cˇýť°‚łńÎ ˆţ˝ `‘ĺľĎœťhˇŢý‰ď9!bNʙ‡y˜‡ďučţśwŢüńíß˙öŸ¤9°Ż$˙ݞoA)_蘤ń+­Í‡0EŽPrŘ (R\Ž”ąPŇőš{Ü1VHĺ!c" ĐbMĆ=Ź ’4ťßiî:c@Ņ’/Ľ+’PĂ%ďŽza™Ä0 ůlOג7 ďžđ%ďŃč#"‹śÝ-¸ľí'ʋ •„B˛…?ť”Ŕ0ܤPöś.Ť˘řՖsVN˜;š…4['"š’ .J RăpĐnÖ3ƒ¸{yf—)Zűčý+`Ů÷ŠƒLŢhÉń$P\;EđOűŽČúżö°SüŻu_\Sˇ¤Žv˙LˆD šÉM0vVKvv;‘ź)›ÎXqFŠÝY´Őţú÷ÂŔÝšř úf˝Ë÷œÓŮśm%×zŰÉ]H"É$5ŠĽä2HRh0ëœ`oÓpšŢsĽśľ˘fĐ'IT™¤ąÚošÇľ“ƒä ÓOŤ°˛]ú´ÖăąŢăŢI’źsŹ­Ůpż)šńφXBAňz[{*>›Y—ŕ#DÄ9&ŽżHćˆĎ{™şu# =Žë56 Rˆ Ԏ˙Qź‡ÔEĽ YcľŹiöɈrˆ„QćŠtlżUä€(ŕ6˛:íiœˆ1H ś\ľói>4Sš;—Ôśő¤Řo˘ÖI Пŕˆź@˛[ DśJ*0m_֘Rý¤>ǸŽ‚ęAŐQ?Šd…䤊dŠYŢ7 JÝuÉOu"LXqâ#-ÊîqegTššď¤¸+’Jě#‘DRH9˙sšotř‚ů Kňü JjąďLĘű Ľôbu×?ůN.’bJLŹW•]yďâ|현8^űóĽÜ9K9Sî@5ŽŐÖJ[*DÝ÷wŐiWŐuŸ”%ÂTe- cZGImŃíTUÇ~™É„㤠Wç™$ŇZň2pĹ"ƒ@ř3SŸĄŸŹ'Ň eB­fye—÷×aÎ?y¨źďjlżţs7ŮĄ}qe)Ýďî”ü;Ú 4o´ßs{Á÷+źÓíó0ó0ďô ÷ůţýűěÍ^OQ‰!~´žŕšçžKëđšњ;ŽťűëoÍŮ1^­›…`ÇÁ:9 ‰ńÇő]űnhß ZW ' ~Úžň•ŻŘűß˙~ťóÎ;ËÎÎ^¤÷‰ő˘x[Rń´Źą…ńč0Źź$¨Z;L7î~ŢcœZó7řσmč´ęĽÁŠ>f~"â\ţžö>uţž…Ožű{ƒżßěť˙ď~řś/߈`Ń4Ú}qń ĐEÇfŃA䦂ˆˆ ‚:-÷€lęDtž!-čľä>@˙hźă0î™gž)Ź%~g㤍é’⣳š'=uŔ7 üu€ęWŽŮ™łg\:ĺy=°Żo×w]í›]WľÉֆ=yô)ű‹Óe/^śĆ `wœžÓŽąÝťöŰŢ]ťmߥƒś{ďŠmol§Ž-• H"Úؑ_ęBŔŸ6%rB싀ö´#éŠô'Ű2ˆńÜďţîďŚgó7łôOę™ňŞŽUä/şzĐ\pňäi{ćiúO3ćn˝Â^ŕ~ťxć¸Ů_üžú­&vú†{lĺö÷ŰöÁëŹZYłŰoźŐ9˜N}Ő9ÜĄ^¸xގžř’?{Î8šĂwřŞĂvđĐa[Y]N ${1ż1¨žôňKvŞ™Žşşšž¸l'Oœˇőí‹É¨D]Ń|äţ‚ąÄ"’č{ÔíFUyŠcĘ+e •—:Ô!7-ą6’)ôw—ÝmĚŹôW[pw,w׊.sżQ|ɕËtlNÖŚąę"ߡžqą(`Ę'ql'}Z@Ú:ĆFš1đž3L„7Ź2ĄfZě#}8ŽW­ő2-kďdz˙iÁÓ'8Yz˜Oŕo—xő-UšęńzœtNĎ{î¨÷c~c-é[ö5r™˜ňIÝłNèۛ—řLfÓKNć×ĺdzŰŚú<ţ‰ŠżŘęLňČí–ćˇévé“ä!ŚďöW´`.qՄNýČM…ú˝)ZR—ěQ¸młÖŕ,;‡úő&"ŠúZ$1‰€/y˙!ĂśţćŁvŃoq|*.Ĺ!‰!ęv`řFĽÔţIů‡{jWPbÝrÇd*ˇ+ÖY“'ŇŃ@uŁ÷H&Bhfíř`<_ź¸^ě"ĚwÚoˇÄŞvÎá@ˆ”}Ü-ĺfq˙Ą÷…ť Z-ö2ĽŸ\ĘTU÷fR˜˜uÉ;U)^™Ďâ<ÖÚąűri+ňŸÇ€?;*{QőCŐm|wÇ:×űkŠ÷čwĚy}bfŸLŸ×ܨrEIŸ¤ˇ˜ eĺ`‘ SwHuƒlŢ)Ď*'‡Í\–ƒÚhúáB"͒­Ś׋K>OëD¨@™ˆ1χ–Z]]łĽ]?ŢwÇŮ˝ÔŔâňőžľÇŻ˙ƒ›ç‹wXx;ěó0ó0—Kčż÷őîć=vřđĄoűü̯͑Řă{ěą´^Âf/źŻŸîNń˝Ů{‘{Ŕˆ›5/W˙ŕ÷wD GŸCŠďyĎ{ŇĄTš{˙ŰĆMŢ9Ź Ö>Ánafě ƒď8~ˇlŚC¨ŹÝ¨sęĽ_—Íßs‚Ĺ×ţΏ>úč}‚lƲč€rː,6? đ Ŕ1¤@Đ_„s?`:đx†¸ŮŃ9řÖF“N#rÔ xV §Ô)´x /°l›źžĆ˝ÄŃWÝuĂЙ˙͜bű×öÚŢfážĂî`›ß( D@TВő—źńń,mHĎłˇÜrKú[u ÄH)†žîF¤œ!đV‚äôuҜ6@ĄMčwܑĘݟ(¸"0Á^ €ž ~Xa”MÄšsĄ ĽŚŔó€Äb֓úᡞő­”Ÿ_ýŐ_M„ ŚÔĆ]!.đ z%mň)Wę‡Ô5ń2éq]Ž1čS"yPü͇öŕ^jôb -€[ę9nޏ—z&˝¤œBŰˆÜ šrÓ܏QŠß) ÷‰¨O

˛U\ÄȐĽń)âB4 Ч(/m,Uú–ÚVíËýri‚úӉ.ę™gD\Şs#éjq jô ŸűÜçR=˙ȏüH1rŸ\Ó0䫋9€ĹŠ uJWýQ¤ ž'”§o¸!P2Ť?r/y&]‘ƒ¸—8™?¤˘#eű˜.}ŠţÇ;AĎČe;źţ¨cĘFş<'_prÁÂď~ýłMXž,ŢAáí&XÄĹ}<ÓkAK'çaćaž—!-ŒvŘ$_2g˝‘ąC‹ßúÝĎt€ m䕖TmÚY‰ĄÎj 6í€îJ;Â.dŕyťźŻť§oŁ×:Żű~E'ů3- ¤=\Ξ5ďw”¨ÝGě°čę#ŗ/–{f­{ş€§ƒČJEĂÓw0ŞN@‹żDę´|[÷ԍ“H<ŽŞr˘ <ßWl¤meëGeć'f–źŽŇ9ÝŽ‹ ŻWËdVéQqœît€4?łžżV“GűŽóş‰`X—„SĽri )ľEŠW( oˇÁ%€^Ě_t#YĂMë7âIóFwOöĚ.éŠmŹ ,kÍ> Jˆ¤=ěżĘDť'ů˜QÁ‰‹Í}+ůŮ*nWün¨ŰĚľŚ €ÖłŠ_÷Çş!(ßqĚJ]Žôä*ĆűpŰ'$_Č}ĎJ_`yKÖđű wććt| hŚO´mčäW [gî’űEîgŸ]śc4Ÿęé ŹŠ;dĆÉ`xɞ‡4âÜŮ7ÖŞu M!öôœÍRů(ć1=Mę¤"›ĐOýoWšEԜ—”jjÍiîRŁ”ľjÁüv˙‚놉E× Ş[ęu=ť[é<íĂk=Ć7î2hЌ.'-yH}<–_uŚ}S;fé7]âTş‡6Ş[šcÖŕź&Ăa'ďj[2*Ŕ:–;Žâ×\Ű5’{˘PďŽa/˝>a%ЍŹ_(íĹž—ĆVÚ+äkÜ+’ÁU*Kť˘žYţTiŚÖŞžTć]śéŁĹśżŐ—ŞřÄ˝˘lnúíVk˛§2ÂŹUʈ!ÖE$ą¨ßŤÝ”ŽúD<ôĄ"ěżŮóžŐu'|ޝŮN$ďÓ´oVú‘źŁţšO´ă´Ňü^™”xʝ¤řäë\ݨß,Œ\ ň "îBi;íӶǛ™ęsÇâŇB4ŠuÂsűü8­w/âăÖ3˜~íçnœ,Ţaáí°ĚĂ<ĚĂ<\NAkřŢç˝´oß^Ťëv]Źď¸>í´Öa­/ˇóŕš}l$’‰űkâmçëiQTç7đŢ׊b(¨,:÷VR¸ţĚg>“p“ýŃ-năž3’>cü;ĺ[u*z0ÖqÂăz*ć˝wżîűĘä]x { WœZ×7éÎ ;\ű;#Xü›óoîéPŽGçœj7BÎVHÎżÓ°’pŮpŽĚ}Ŕů`ÓQtšYBŔ#'0w>:/V`ş\+H"…6ëëv˘š÷Üůłq¤É×ţÍőśŢ§§Nžnç/žlţ=ął§íՕăöôŇÓśťZľ{Vﶏů¸í_Ýďrt,şŁÚúV’=fÇOž°Ń Ý´zRW”I@u#ŕë䋁!„ \ă>ĘÎAOĘĚ$ÁAn6xB ő™äNł› ꐗ{hňEې6îRľ`˘°Iž!@DiEĽK=“Žń’.ń*]“ }řČDŘUżÄA‘WĘÇ3”Ÿś…|! äő†űďż?š< îü9‘ČŹteĚ!~&xMd\‹î"äR€ó;÷QâíŤPw|d0Š’D"Äh#K?„`Á=Ô׊7 ű .žĽěÔ?A q4ŚIąÂżI…˛Č‰€k⢍ńĺ/Ć}ŠéW"—ˆ˜¤1J^Čż)âć9ęZŽ\ˆƒş!í"Gš 2ôÁżüËżLy… ŰODň"@“.›u~#Ýx’ImŚ1ě'•šňâăĘ#śŒ!¸Ż 9Ýuúô‹/5ců¸M.žľƒO<`ĂŁŘVŐlšO7őz iǟřÇśĎ^›ěÚkŻŻOl´´h×\wcÓ.W˜N­7i<}ĆN­÷MşľŸšŘÓôż+ŻšĆvŻěJrśƒrmV”yh×öTSWm…oĘ*’‹ úŠÚ‹1A˙$.Šžđ;u"E›ö¤š—™¸č_ęŻŃ@Mę” cUˆĎţóilýÜĎý\jGâ§mh_Ňä>šŚiB*qa"×&r Ľ—ľňËXA‹řE ĄOKI‡:Đ\ĂGdĺU˙ĚMš…ŇűD ҖšőŔ‡rÄ9S.Łbş"Ɉ/ĆęWďűc[]Yš,ŢAáí4˜źXĘ­ÜóbúĚĂ<ĚĂ<|?‚ű”ß.﫝Œ7#UİÁBó§â!ÔłŞřŽ'ý(Ny]`n Ŕ;°2 äŕϤ8í:eX@ey{™' ¤°çäě˛˘ĘD sĽ HźÓ4–—w•ř!$˛ąŤph,‘ĘCŒßŐ†éÄńŹZwŔz•ŐÉÖŤ}Mâ€[$>(´ŽVÔŰćŽ?śƒ?úQzŸ¸âŔ°Cäk &-ąĂăňz,kŚzŕ÷˜YŚÓ–Ř—ŁTnęÎ×çž/d§~äÚĂËčŕqŰçœDÂ=*ťÖE#XŹşĐ:1JT§ŃP xŞĹ!ÓÚAéwIFŃ×mUƋďɝŕŕŔ›“%R?ƒSYę3qĎ'×8ŐÜJîť*őGűŹ/-­fŽ÷9ÉĚŞźRœÔžIŠ*żĘËŁq×7’ś÷3‘qźĎËݎ?;)ċŽqÎĘZV€ľö-2Ĺ~Łö•rŠéi‡˘4űÁˆFrƒ\ Ş|r?°Éľ…“é"É [€Rő5mćŚá`Đ#XÇUK|&’źbߍuŽ~–âOD‡Ai ůKާňI;ä—˝~]Ž\~Ä¸Ý Ç$Íłž‡Š.=Z7I<Ťű‡Ł–\łąq1Š2xť890Ÿ~ín>ŞÎ‰2>XGIx—ČFçuÓU‰}H}Eď"öGĂźG/ëpúý Ť‚ĄČ…0 š`ć{ŞAUć&Ţ;šOrEć:í’e4oz<Ž0]ˊ<Ńî'k;ÁÉRđáY'U ˛aIA…礊ŰËóńWÝ÷mzä1¤:Hý~`•›~żŒzľI$ÂľńwÉsރH”ˆ‡Ęř¸ÚGW}J{˜>š­osĄŞo׍ęˇQMĽ}v–ć§8kţ‹ ĘS$ĎezJ›î  łNţmÖ% |^œĚšŚN*4(0Ę%.@›űQ¸p҄“ †~—‰œz_{ÝxߙŚř˝îÚľŇ#^ůĂá7N_VJUƒ\éJ‘MŕäŹYD:ԀÚGŮƒ?IżąqßśWżl_>űM{ňÔăvq߆]ťuÝ6šŐŽťę:ۡÖ,¨WÓ"öúx}Ó^=ůz"kŹ5i9x8ĽO^䢁|RW<Ła‰ş˜§ĚژđMÝśŞź&@ʨM]P ´€{IW䞇CÝhÓĽtE ŕ^ꚺ#])=Híë¤A?ŕo)8°Őé ĘFÄËoË"9¨i›Ż~őŤi2PMťBŽŕ~ęIŹ7ŽS/ÜO;#Űs×]wĽźsM¤)5Hiƒ4śŁl(ůĄˆ<ČĐCyĽŠ˘S÷štx) őAŮô‘Yýt!`ľÚ]“ ő$5MŹÔ!ĎoÜԓOI ‘7ĘBÝSVľ/ý™ghsĘÄojc•W.SH“çuŠřHWu]÷H@ăSD'>Ü'šMâýžęčCú}ŕ(/Vú iŠ<$šś!m˝ C=ôPşďgög‹;™¸Ŕ`ţPż /ŠŔE”Žž‘2y‚ASFINËךČDüĆűAd8ωŔŁ|jNÂ„Ň%OÔ)s qk|F˛’Œ?2ŕúľHq"… ƉNşŠm¸÷ŧ´ľŐ•9ÁâŢƒ íUď¸ /Ŕ\íÎ$˘yűÎĂ<ĚĂŰžx_C¸ˆŕŐN†„Ÿw‚Ĺ˙ôżýŮ%Ŕ+Ą Ş…|Z€ĎÄt‚ĹĚeŐĽxО*™˜Ť8Xç´m̓żç;`T$ú'}ý;H'P'Ůő…ޡöjţŸ&Â<ď蕕ŐBF°ěˇÝÁ•VrÝ%će,ŃÉl—ŻóIđxŕ¤‚AGŸfrŽNŤ.ëDŚđőŹç €CŐe$œx™ HďőŞĎíűN€˘ť q ΔęŇ6ŃŔ$ |>ZWŞ^ônC„ľ›Ô,‘e0Čů÷úŰi]Ł=<éW•ĺşië!‚yq˝Ô'ëDނք:Uű“ŽÇÓęŐ>ZkN&Ů}Ç€?dž•~ŒßŰj’d˙=­IQz𺇤|ĄY‡žĎĺô5ŕÂÂrŹi'NSĎę:™6oýrËÝŘECŹĂhŒ‹÷--yŢ4&ęZd‘\Bżö>LŰÇöT~ź˙VAEĆ N˛őÉ2ÚżEĺˆH2‰ý]és]v ĘÍŢ7şíŒĘÖÝJŰFS"Ӗ0ăQ=ć3ĺ1 "Ř­üëŮ2.Ć[Š~b<]Č*Ú4.% YgĚŚ1^%ô>¸ľ+üÔ^ˇL éů*’ľfˆ]9ÖŠ Űc'ŢQr™ęŻöžž=Ůr›Vč+L}‹ňÄ‚ą_"‘_m]Qśa՞ěƒW2ń’Bě\–YŽŁÖLűN麢iűĺBŽÓŞۃÁ%†f~“*Î%()@ŒŇAŚŘX×ËĄ1ŞžáůŞÁ˘rŸ(>žňˆHý'Ť0Ţ!‘ÔÖ'aô˸3Ń öĂî¸÷wŠ~ďťöˆcOĺRüşOuçŰ8Ż´$†śműs”TtF{g•1šXÍ5#"R,ŁňŰ7͙Ö(%%OŰ:ďĚTŽŹvĄ1Ů´’%rM“ˇ¤VI(EP)‚ˆäöH'3MŐwЎ¤|%… W̨rű’P"đ˜ť/ód›ýŕl{î"äŢ{Á<ĚĂ<ĚĂĺúëá´^ŃšŻ]#Ě:ëŮáążƒ°f”˛D$9Ç}FŸ” "cFâŽ` ŹwąńGő‡Ö?¸ä Šň ¸‘šu0ěéžűîłťďžŰ>ń‰OX{äÍóëEĺhI˞8˜‡pU̎{c}úkƒg? Šé!Ťět;ƛąĽË‚`1˛Ë$°ů€LÁF„NG¤C"?ĎĐMŒpNLÓůjŠÉŐĎ< Lä#Yâ‘;’Üśźëô5 ŕ8łpfpđšR‘űmn¸".0@Úrż€ięœ2ɇ‘@Qę\ŕ(+šVhŔDmÜhŐĄÔ<¨_Ú •|IuCőL{‰0Á7ů!ŻÔ1u­ ”çřśĽmHWƒYîJ(3m˘Nz´­ÚKDp)Âőn¸!ĺ™8)ĺűä'?iˇŢzk91/¸ŽrĂ'aŠ~č´őĆO0ˆuF}@ ˆnD Ň׆žg%ŮU&´)Ľn•÷Hmƒ<ó!o¤Kœ”™ą'Ő 4FřÖé~úŽ^v’˛$=&]Ő1qëőM’Í䚔Q¸\D))}Hy6~řá‡Óďţđ‡“:I4$Ş|Ş[‚ű}śBˆ Žţ+E)8,/-'cŇFSĎ7cpcô:uúhŞwvá{Đsm­šoךŐÍĆvÓCÇŮ}žţĆ6>}Âżö´m5c÷ü“_ł×ď˙Œ-žÚŢr§Ő×ÜbŁýWŮÉó§lscŰ^qÄ>Ôäi1Ľľ‘ÜŃđi€ůSǚ˛_HF,ľeřÖ8ˆăFĘ,ôꡜÚĘÄ$枣¨1č#\ç9â9†ş!]ŐĽˆ¤‹2̓O>™âf‘ŔřŇ\!#&ůqAD*)ĎHíAs‚Nj1î)#i3ćE‰Şz'¨|ÉWzínLÄŘÔBŰÓ?(3żKaB}š |JGjIôGÍ)}€0ŢŁ=aŒG$‹ÔG@ąoÜrIůY!¤~ž `‰4+rE3(púŮŐ Kůx_ÝŢv|NťRÂ0ƒÓ“ÜśƒěňoŮŐP(;)űąxjOH˜Ű—Şí“ ˘!1Ş8ŕŘÝů-Úëăž0ŽSúyˆA돸žg˝­Ÿľ‡ÔĎuoďŮĎťĘŘ_whŻňÜsĎٗžôĽtpűă˙x‰?ćűňëDé) áťŕ`°Â<ű“~=íT7ýuŸöTÂl nP÷Â÷ŢJސĂeC° Ń˛ßrË-‰DAƒ˘>€Ë€Q6ĘlúXTÓŕ˙€q <Ž‚1HčrĂ  "€‚űő›@|îŐŔX#>`:€FĆFš%Ëůýäˆ)`ňâúFJçĚѓ†Wżz4ľ'Ť§ěŮóĎŮéĹvçÂ{샍˛›ŽźžÉçbZœˇ6`ř”mŔôÓMYŇ& ŮXžâ@ڐˇÇś6FęHl.ŔDŇä#7!R, ź”_Ę"§°‘qA.%DŚŕyoÜ8É %˙‘"0H!CD~¨Éóń„=ßÜOžH“ś#ßIjŃd(UĘ —é:)/ߍäRik2քĆd!† ďńÇO‘PţčO¤¤Ë5)Oí]݈¸Ŕ‡˛đ“?Ôtú#Ű|SWń”‡Ü\čŁILŕ3ńÉĺ…cI)Ś>×ôڝç´­ÔBHSJňĎ$ՍM´< .ŕžřH[ŕ2ýDő/5 &w䊇Ç7 )­PśČ‚%Ż”™@f|ˆDŐVdÄ!RÓ!R¨ÁGŞŒĘ^ÄóŇÓsŁÉsĐűŒ ĺŠĺeTdÖĘř˜‡y˜‡yřť {öŹĽ˝Ć™3žnˆ' Ţ šBkćţ)ˆ|5!ˆeU?NX;ąÁ%Ř%šž pH ůlZ¸ş˛€€o?Őęj.íŢȸ×UZđT.źlS“{wER§źyʤSçdˇ'†Ó§éDnKfđő{÷$ŠKÔľeEŽx˘Ś.ů7‹§ŽŰż(_¸F]â÷ÓîËpąc0ˆJłrżˆE-#ů t2…ŔëşöĂ%"™ äŠ⟚ÜG$ ˛e†ĽÎŽuŇfk{֗ĆÉŠÚ¨ j!Šż.§BۓâĘăp8ě€|~_ŤŐ7Đ)D0ˇ-oÝQ¸SŽ÷čZt#ŕn3† ÔM}3vęÔGş[Ďş¸őä EGSu÷iW)š¨Ď r6jěĂTű>†űvË^‘óg:™@ŕč:Ą­ˇčšOˆňúNHđ׺}‰„‘wÚ9A„ŃIY‹Ť˙h\Čn0⛆îévĹĽ|őO˝E’M$ôúhš^*x­b‰öř¤9čÍŞ›aˆżmŤqɛŔÚhTsß8x—rǃKËť’Ť¤a'ž˙fnśóŚ"†–ťçřK-}’2…ĺ1l:5í@ň “ŔęÜďůĐĎÓDJýś,¤ţJ;.o{jľo’MI¤v•ľď–"…˝=ť>ž5gÄšJcKń$5‘IK˘JórŐ5|;"JIçáWeUŽzVŇk]6ů ryă= 㤠dšFjű‰ě …`ĐäY‡W¤ˆK\ŒYp’ÍŹ•ÎăąĚ¤2qő— pmE ÷łIÔŕŐf‘Ĺ=t(â`O~¤Ü SËüś™N o$@ NŔňž={mskÎɞ8ú”=[?mÇWOŘţíývÇěnť˝şÝŽÜełÉ^L›dé“ĆXÂĆqqĄGWö6qŹÚŁăöÔNž:ÝÔÇ[^Y.uA™¤Ň¨'đŸň0Y0€ČäO›"ŠÄe^$ŁĎoIĘŹľ™ 䲁zbR$}ĘLýŞĚň*6ik°‘?ľ/A†1D~‘Ë Ƒ@ ŸűĽ| “ăzE2 Œ€ľż~ŃŐtšxâÜBűȗ Ɖ\itúş ż@‚‘ęŽęL~ËřČxA\´DJ“AHR¨Ě5¸!ž÷ż˙ýIńD$ÚIcIŸ âýDrU"ԈôB9čŤ" ŃƒXŐA„ž—ëÍ!"1ţ˜TŇ!˙¤ÁżEŢŁTóżČRäIŽŚ47ɸCÝÓĆ"Mˆ„§yGîMDjáĘLürG2.Ť…Ç<|gA› ­9ÖÖöĚÉó0ó𮠬“ DԌ`ˡ{‡ůf݁Ŕ ތĐJÝ: żľ'Šý$§%ŕzVĎBÜ é¤çpŐ˛+ iU5ˤ š‘B'E @ĘžŐ“Ű ůš„ôľD”,üÄňŹYßěę€ĹŒłěÎĂÝhLĂI劾JíIj${Ü˝Ř ‘{ă‰ëVQ¤Ę@§ďq%goĹĹÂ$×O&š$ÖĘusšż%~HžÜÁ.œ‚ľŔkßo­5˙;Ęş `ЋSnc,Ÿě—âD×°$…ˆëůx’šoźSy´śŒ!ŁúžáHĺSŔ ƒw›âřĆűvŞň*‘…č3IýgšO-űÉ{ď7K‹ËIn^y. Sň€* y˜&ÜĐ? g&"°eCšH ăI[gւŽ%ĎáĐBtQĄż˝îZˇńšííÍŹP1-ýĆUer[ÎJ˙!8p-5—Ş€ÎNÂXLĺPܑ(ĄöЇ+b{F#l߈¨ö“ŰŽč“Ř÷ë ˇ:ˇŃmfé3˝ţŽřŁĄx˜Ÿ‹dŠč^A„vŠëľ@łš ’ş5@‹ôá÷¸űČTśB6šd—“$5$Ť„ˆ 2­äZˆ¸§ ´ő“őŽj!×CƒzXÜ ¤2ŐŽÜ]ÖĽ<%’ĹjjWę.[‚Gƒ­ĆF_Í`' >Ž­ÔkŽ*ńÖ˝S~Žd_BÎ ϕ‰ŞBÓ<+U'’ľ$¤”çâ†HŕˇÚ{ÚQ"QE6‘Œ´Ţ%äMîe¨?ć>”|HW62íĹŐ7 ż”y%e'÷ŻäţEJ8ľŤ•$Ĺ„ŚľęIúŁń?žŁ#ÁBőçÂ*ÔĄúľĆ@$I\ňŢmíŚj˙¸×‰ń‹ ÖŸs4†#hĄgĽé‹qi~Ӂ§HęIy™LSŞď¨?Ćň Ş.ń$9r3“Ňhě­ ‹ŽH,‚NQxŇťÓ2éĽĘ¤îŤňœGšň{vÚźs§cW”Ą2šŠ…ě4Ë.BňŘ]\źlLűó0ó0óđCâ:=’j!×őěr‚ČŽěąëóŽÇ†ŻĂĘ­ÂcWI­OވdHŽPü:¤.nńPşâ‹ë~…¸ĆďÇ O?ýt:¨ö#?ň#[k–>$Śë“CT0=â›éےľv‹kČ'1~ĽĎšˆ4¤ęĄşď“3TO}űŔĺ.›U "@•dŘČ °ŐB›SÓx4:€ö7žń"łÍ} Â~çŤN¨Ćß ^Ň!]žçwIČ3ŕH €Lj Ú\Ś{šç’6ÁMZ+‰šžě ÷Ę iÖĎŰS[ĎÚ#ťľę˘Ý˛tƒ}xďG4ÚĽ/=fg–O§<łL?{öL:=đŕáf@°Ő]ËiS…rž‘Éŕ˜E€ŹXL"€¨Ě€ü’Ô§NEfńt­¨0ČŐő ×bs ´XŔy>š”PiĘG<\÷Ó7ăž LçwňpKźüŚSúňÉĚ/)vŠ4B{i2&-â"NęŒ|Ť|ä‰ü|öłŸMîp;ńS?őS)Nâ#4q#ňÍo~3ĹE}ă6„8ĺšFJÚ4Ëg)÷ĐGh'šKar˘î䦅˛ ¸@9bčKmŔV§”v–ę€6—"!ń!=úăG`şH ŞSâeœÉ]„úéĎ(›y[ŐMŹ|S–Hv _ô)żˆ#R ećwžU9P“.uŽqúŐŻ~5=ŰmˇŮwޙČ­gąŃgřD8!ÄŠtyF IŇ —*‡Ć1Ϝš¸1ÔűőF2^yĺUvđŠéôSIՀ řO<{欝fü<‘6ÂlŒ!_$EĆˆ˛1†23ţޏŇÎΚ—čęUvxľy95FďÉKOÚYęůůÇmăŃŻ[uđ*;ˇŘíozżšş>täj[Ěž˛!x$;ëë‰\őzӏˇ7Ç~‚gˇ6G›9bˇíŢłťI%mä‘ÜvżĚCťňČM;n6őM]7ŸłçNuJ˘E֐{úŒH<Œ§'žx"šjĄ@ŢŃK]ă;ZÔ&Ë"GĐŚ2Ühî˘-H—ž#ˇ8Ó Í)%˜¤Ąń$ĐA'‰”'ÉfinӘa|wúJL[F}Ô/Őç5ŽŁ;hSĚŻQ1Fă2V[Z*J/óđĂâBW cú §ĄćaćaŢ)y 9x­ÁľÎ~+ _[ŒĘ˝qă­ĚÓâ Ÿ˘.8É<ƒ‰­Ź{ jčč4ň ‘^“ÁŁhÉWL.9IyÁ ňÚ=Ü]ƒĄ€“2>ȀákČ M=I}ČeęʉnáTë —ĹOĽ., 3ᢳôw—œ pv9ŤIˆŃ>ăDćĂěšŕuÖ#L AE÷sy0˜ ż.§jýš@đśÝ…ěIüćů¨r˝GŕĚŰ­ăFɡ|:ő;'—+ČŹ;Đ>Ę`¨Ü#ŽSů[.ęzňÔÖQŸ$E "¨(¨|ră˝]9űAY›zr=ओ efUŠĘó^eZÜÖLÜEŕrăŹěDŁÍäFĽT„žt už>EYp!Ýť˝˝•É×}ŔŸÎ\†ŇÔcRUÜRyż¨üˆ|Ű­vǓN’Úwá4ő‘T7ľe@ŃÇŤú,Ë~)˜0śÇă:f…,BœďPľ?ő=źȍĆĚž5u]í¤üˇĆŰq§meŘd\jŻÎßťwŻĽqÇGKš–šJéTł şOśmskZHě ĂQqG)U>h‰}sHKŃM•öpŽFgZyďĘĂ+Hu˜ •u]sTŠOúX™LÝ˝RTűhI.yţxý&ŇĎ @§,.f€Ŕ™¨Ľą&Ŕ[$y)Ć6jŐJşcŠOěq5–a&CŒŠŤŠue"ŒFĽ pż0Éý×f"ÔY™ĂçIdu!x ÜTçžkĽ>źL …(FşŢGśÚśÍ}SĆwR¤Đ\’Z ÉËdÖÎ+Šţš:lö€“ĺiżr[#7ž‘%0?Ů2Q¨ĘýSďĹiVŐ(jJýşeîó[Ťtä׏î*KD° –9’`úţhď+ŠŻG˛†Č+YDt”K+o'ŃG咛öPčÄ­T‡.ŒSý‰h!ÂLšăÂV[ďN˝‹’Ýcc˝ÓןŻl™ƒ ĂVľ+=cĂwKR‰kĄÖ퍿높ť)ďą$?“É,ôŮ´w螃Zen‰¤öí݃ĎĂ<ĚĂ<ĚĂ<źŁC\ę Űv5˜ řWÝŮđáÝ ö†ƒTú*}u‰B\łčoÖu` ŹÁŔ…t8>*3(ż1î~‘TÓ`}÷­o}Ë^xá…th–CŠ`'­‚Ţ`Ǹߨ ‘ŘŤtHCŔ1…Ĺö‰ýź÷ÓˆÄ ĹOłćAü`.;ĹŻňě÷z¸l€Ňbi,:A%w›SĚ:‹k§ÔĽ?˙ůϧ“ÖĂ$žŇikC$P›Ž$7’ä—:CÉWň Ř|ÍFôȕ{€6J'ěâŮ3śk÷Ť—+;vî{äěŁöňđ¨íŻŮÇ}Ěn=x‹\>ĐļĹ]é Dd#FşÔ…”H}”üü:`ŒaOęRNŕ´ż@MšR  Lü.0]¤ƒ¸I >&ž5š”$Ÿ#H›¸¨ňÂŕ–B -Éě‹(ŁIQ~8E¨ŕoI˙K}€8u Ÿ<ÉýőĂ7í)@'Ő)ťXgÚŹ €•je¤ ~šp’ rw@޸“â#ČĺKě[~úh;ĹA]S6'‚=¸_*!´uĆKˆ|.ĎKUßé/¸#Q{‘'~§ž\‹ŹĄ$ş#.ňΟ˙ůŸ§˛ň2˘ţ՟¨Š x§žˆO„Š—@|‘8ȟúqhŹ(.ć(ąŠ8T˙–_$›[›éôd†Ř6Šźë';/Ŕ1sËxŰŽnňxĺ‘ĂÍ<ŃĽî|hň3=sÚ.>˙„úŰzö›}ö÷Q˘nŒéŻ=ň7śuË=vŕžŮÚę~syěaSŽq’Ó>xř ­5sĚ`Č Ó vŞÉ+íľ¸´hkťVmŤé_'NO'ă\y$š9Á8°Öź3×öŹĹڕś’L§UE’/oę‚uHťPw"L¨ĽŇ ăIˆž ÷Óg ÄO›1ˆ¸}ÓvüN“mF:ô?)˝ĐÖô[ÚLsŽ š:™Bů ˆ8&Ł–Ú\iËŐő“ÜĆ4ýUň["=ńą„téßԏT2â‰ęHŞI}fę<üp„Tiqďn‰Vě2[~OBdEĎĂ<ĚĂŰ VWwĽwp<ńţVHŃĐç˝V‘ Î ŃŹ€´€î&ÝÝD@݁ĄQćŃt"ŰOÎKš(YřÚŇă™L\éŕ¤5PÔáă§Q[`+úeÝRЇk~Z|ĐŹźëëÓ'f*?Ş4üdżƒy:=­|úÚ`l’Ž×úc˜ŔŮĽp*xŇ!@)§­ \§őĄ“TŞD2‘GKhO”C¤X\–őQk\!"ľZPݘ•ľ‘c¤ŻÓ;N"!žQ@ŤjPĘŽ|Äľľƒ”KśhNŕ@ÁŇ⏊ĂÝĽŽä†"*8ˆ?0ł„ŕg$HDăH˝QA¤ŠXîh¸“[֜m_nÁÄDŸL‚Hŕ]ÓŽˆ˜L[%ú_:8˛ŕkń¤Pš§­!Ä$˛Ď$ťřČqO{'Ęő;$ ęJ{[­“!` v‘zëĚAĚÉŘעŽđâmڏ˘Ń.úî¸Gj)ROŃËűĐŚ €ôú\HÄQżÉaf­+ž–Óq’ťěQېďţ‰x=Ľć§>UŢěo煲ż ţ¤Ş¨>/ĺƒ4ć2J§˝lV­+$Ęm4؃”ő!îyI㉺śVՁř-ťů¨3@œäö!Ţá Ú˘rţP j ‰p1Œj4Ó4†ĽVÁ|ŃÎMü“ş{°3%’Ď%@_d“qgÎץ š:eăýoŠ”Qß;ąţőˇ@úííi‡X "”úĆt– Ź%Ď@b°JŠ@­‚ňé łu&Ń h]×VwęƒR$ĐXg^ŇŘ×a%}|d‚Ÿ×ĺ6ŠFežYtŃUqE š‘ýQŠ RjjăÔáGu¨ţß'?”=G˜őPÝŞţő‰íë?Ú5ÔFúˇćR=Ť ôľoÉĂał%ĂEáYčç•…Š˝´ę=RREŐÇݲ,'ľ˜Í1roĹ3ąMŇ~>–ĐĄ‰Ř7”Ż‚Ú I´AV…!r2iÉDe ¤G̉,RŤŕ§L&ŠÇšüEÍKd–Á|ď3ó0ó0?đĄo˙ÔżyύFĂKđ އrýßë1|'ďJĺ?ś{0Ôđĺá;o§řYď€Gýë_O˜ó˝÷ޛžĺîť Zß)oRÉ?çC}ŁúůvůˇmŢĄĂÎŕgßMü?čá˛!XřŁąĺ6P `Ÿošy¸KĂ(ăφ 6{t:Tžüĺ/ۃ>XĐ{ßűŢD^ˆ§ ÔaŔHŸ4tâ×ü.0–…0é&0ł‰ăşëޕMôű:ě§÷_?ÚđOًö˛=ˇ÷k–ţvăÂőöŃýľë^oŤKŤ‰ażQře0ÜcÁ/Wň?iB rÇp)€S6@?š¨hŞSܔW$ ŽłI–Ë&šR nŔFęRrž'_\#í—^zŠ€ŠrgA;Šő/"ĺfň‘Űň$×ÄOŸ'ůĄź§l˘¤ňŔ3*s{âf’&2š: ś9žřĹ/Úă?žňĤÇď:eNß!€şÁ֙Čüţ裏ړO>™H<ô ňF9écrW#Â×ů¨ĺž  hőI>RŁ .?čÄ!°V,|ĘKß§Ě"Ńp-*u0~řôbcŒčäE”‡$ ځ´);őA˙\O ç;uMž(#Ä1ۤ#@[j+2€Ń^¤)&˘ŇřţÜç>—ňřKżôKŠN¤ŞÁóԝ€vĘBžč‹r " ţŁ´żr_ÂߔEŽ]Ô'Š Í9ôWĘ,őň.W*”OĘ6䍗™Œ$Ôůšé’?˝q´Ĺćť1Ŕ-Ž4/ؕÝ6Ý˝ÇÎY3ţGÍ|sý]vő겝}ę[vüľŁvĹ_˙ĄŮ#÷Űą?űm;vÍíf÷ü˜ŐÍźqŽŠ+]iW]}•-./$÷ž}ŇI™őćŮăö≗ŇF~ŇäĽÁFŇ)̅űŞĆ88˜•“’xĽ,ôţf,kA#ĺÚűoţćoŇxúŃýŃTGę+R¸ŕĘL]P÷RY‘ÁVF ę]n¸'hî“ qńé¨oŤŽEœĄŽšG†Ö8–4öĽ4!CŸNŹ1ŽhOˆQŒé8?‘G~§~ű* E"x‰$"Ÿmä]†Áh ×űE`Á<üđ†htEf§…í<ĚĂ<ĚĂßuđ5’Ż6 8z3DŸÁßoń]—đ>úIV„÷çüôąƒčŹ9ˇÓ=Iů>Ÿ•ş÷%7!Ő¨<ţIâĺ>şéň|r8tú8 •!~˙ \ rˆŔ’•'}^¸p.¤Žv82Wƒ v'ěź Şfe *ŕ Ŕ4şH!ďş×ëźUĐڊ{ü.ůßÎd +mĽľZ{jfTČ&ŽŽQ Ú×i-Á]rú¤A]‚úţÁr~G W¨"­:Běž.Z0wâ§żŤ´&ÜJ÷8ˆ?Čm;LˇnGŚĽüZFĽ ~Ńúj*ŁťVhIŞkď“ěęž*jßä}¨•ŚM×!4użľ˝ęs˜NA//­¤žâżeĽ–Ô@uΏťI˘'|-ČMËÎ{Ýo0Uůŕ ™’ ëđ={v—ŢćUůRÖ"ˇ x!rě@RîŕävÚK(]oßIjsŐíîŕrť–Ű_;łţśŇżĽxŔ=îz‹Ăr”ŕsŠl‚l8"pG`ܟőËǘ矨ĂŸÜŠňŒˆĘăőĐőőÍrâ]cw)šwh‰*ƒŞ+˝Ť>§~Ąúó|ć1ŃĚ)ŰăÍT?š–hłT6s÷>iŻ <ŤËŒÔÍU{¤“@ôLGŐ§śYŠoMP9ńűœdAňvţs7NQa#śƒníq¤yáÂůtřŔÝO.—ń%WşĚÚőű\ ŹO‹ť>A&’ÁÔöŠ†wD¤×üăiˇďĄQyĎh_@ű‰ŞjDž—c%u&ڨâ ŽŸÔĆš?H]Q$†ˇöœńđöíűd E$ŠĹž–Ú&š&Šäźi!Ĺš$ŚŃ'œĺ‰ĘÝŮÄô5WĆ=ěŽÝúoך+"‰AĺDQRšŐ—*Žh|ů;´}—ČíhQa˝p:š0˘Ýčƒ\ŃžÓqŤx#;UçVu”}b˝M'čä÷6 >y}PçľÂ;ÓLňŰ֙?Ň|IŚvjĘŞą^9!Ęë1§1˜“+ćaćaćá?ômúžpábĆhşŠWR~ÇĎz\.Őúdřg\ŻĆýa$^łSâß`7ňb xűîAâżăސ󼾥/|á Gťĺ–[Ňo¤ˇ“Ű‘˜F q=Śő[,‡0a֊Ź}8ěŽřűęo´'ÖżcźÚ ˙sŁţÁx˘şÇNuŁ´/§pŮ,óhĚč‚đZ'̽⠔şč\"CHz^nžzꊤZŔ3wÝu—˝ç=ďIĎĐéĺ2ƒÁ –Žˆrj6,Ěýv*s~ĄŞ“Qőűëői{hú-{eď1ŰľąËŢsń.ťrĺ]śšže''§­žbÖ<ˇÇ.Ž_LqóaŁH-R‰T (3ƒŚe{ ŕÝ5ȨDšŠ€˙¸™ĄNŮüęBjÔ 1żtƜ2˕ikc-0^ä‘xŕäćBÎÇ?ţńt]“őA]Éq‡n¸Ą#KD߄-FżB:"„ ęŽk¨apƟxŘ0K9 e–r1ýZŕ.ńđ;ĎĂړjßʛ1¤8 ŔWŽl~âfĄ¸Á ĎP‡”ƒňĘM‰6šFÝČÝäšLĄMQœyć™gRů~ů—9-ĆŤâb,PWŃ(Ó×é•Y#ĘA™y–iĘ}…Ô9 ÇÄž Ą@ęôWʍJKýQeڌä‹yI ęěôé3i#-őŒQ'Nˇ+ąƒGŢgkdîý¸M'śţÚ){öÁĎÚĆKĎŰęSYő­̖Wmvčz;wóśo÷§#,nS°Ň4‹[H?UcM9Ůpqh7×íů_˛QcŔ[Ú5´ý{ް]Ťť Š€:Đ¸Ň VĘ)”™z„ Ćœřя~´ô ˝°%m*ż´RR1.E˜ ĎÓ¤ AßNĘ ć/|5äúIs­dť˘ÁG}\‹ňIŕíÎßÜ/7Däß‰—~ǂ‡o&ČŻHMä[ó}@Šęךóˆ“ţ¨Ó˝´3d0ĽËs¤AÝąÜúégm~8C\œ‹WÍíh;†ţfКWÔ<ĚĂŰ\úzTČŢJˆ›yÂÎz+†¨TĐ7b¸ VZÜOáΌB3XdÓ¤ (pšŕ§â‡yâî>ŞŞk°pŐ )öi}3,`‰ƒC'3d`Vy]XXNĊ­tŞ}3#pWPž”˛„4@žâ”ڞşŹ˝ŒMVČŔĐ´ż"Ú)ŸƒAKjÝ „†čá'řŠy €ů8˙Vĺôړîj)Yt 7íIôhl‰@™ö“z^`őA oÔŠk|¤Ř۞„n•$Ô×´/”ځ֎}ň…H2÷"é$œI§ŠpĄüűÉçĔ;îY 7{â…VíA mrɰűs•Ó$̄Š­č:ĘI⿞uHÄÚÄöކY9p=VWłúejűV@ý^ý!ŽMĹ×w7 vVýŇNp’’†\ęŒ3YiZ\šDăŁęĐŞ´TyĚ]Ţ0fړî­ęJ]Ŕp†ďŽáśÍ˘R‚ĘŐ.DÜĺC.žŸĹrˆ@4o8ůË čŽƒŠý˛k˜&VŤŞěˇ¸)ƒ4‘ŽÉá)?™¸”4JëAgŢŞLdŽVAj 3š™!ţ˘ęB¨“z ý&‘+˛z đżĆÚ2-“‘ÔűŽ—ub"UřŇ+#jc—]É=îR˛/^\O„öš"ű´ę Öůc?VŤĎˆ°“[ýTqĆ9NόF*_÷„¤ ŘHdí]Ö/,,•'ŁĽçŞVmd{{Ö'q>ŇŢQcLcKm¨yJŽŹJ_ÍńIQ…}¸Ŕ…H”KńOĺŞU÷‰ăt6mÝOUźĎŹ%ƒE˘YÜKÇńUażĘŤ~TEá]ŸČLX'RşîüÉżÚXý =?hUq”ÇHÄP_eÖÁ ľëTLϝiúŕ…2žœđ°`ť–WĄŃ:eJńMť ­j ĺő˜ňa2ÍAYî|ć.Ÿ†#'wzý8Qb8ŹË<Ç8Mő’HŮ•ó˘ÖŠw™+Žđž˜6ďďî¤ë<ĚĂ<ĚĂ<ĚĂ;%hmĄý‹ÖŽ7œ6w7Yç5hť~ŔŽ.´~| ‘$đF!’´ţ'”|Łřż]ˆé s}ä‘G~¤ő\Ük~§!’Ft°ZefÍ(o;•áÍęe§ř "Ź\!lłł{ł.\á­śVőŻUoáťzƒżő„o}´Ęö>\4Ŕë}’Q!D œO lŕ$ýO界;@ $ 6*tŔp¤îůřđ`ŕKßýZ-ł‰Sy➸Âö [clşöľ§°Ď ˙Â6mbWŘO­ý„ÝxĹ-śžľa§NŸ˛­‹ᚠęx3ůb%.6 ČŻƍˆ2FÓٕ/‘;D˛PýG>ę€ëëĺcH.9xNn4ĺj%,őÄż.˘P.ž[Ɖh€ @ͤBţIƒtĺÚCʀ„;î¸#ŐaŹiƒÔ‚TîťďžÔöœÂ˙ŘÇ>Öq9#5â’ŇeŚ?$"M–Š›TҀ@š¨CÜwČßq‘ß;ďź3Ő1ä⠏qŒ‡“#폞E9鷔Gä!ĺ•ÉšřHƒ¸(Ÿˆ üĆýÔ+y'Löô1Č1r˘‰™žĄ¸d /'âPş-ŰđB"“ĐN0ÔG岆źgŽSä‹2G5Ń€Ó¤˙Ľ/})őľ|ä#Š]äî%Ć*őCyč×ôšĄ!^ę2ŒT&äîƒţJŠQqEJę;´3ó…ęGőA}SžcŽášŐË)1ˆŹEyiż8>7×7ěľăÇRY“Ą˛ę{Öö¤9hĎŢ}ěߓÁËĎp5yh ąÇ^>fO?÷ŒMϞ´ľÇžh+Ď}łH˘ž{ß§líĘkě]üˆ-źŇ^xöyť¸1ľĂW5ešćę$őŠ!nă–?uŇÎ\¸hM{ŕâ„@ž%ťŰXscđ÷˙÷S{~đƒě h#ęU>Ěčc\ŁOP'zéSÇRăщx -iŽU}ŤÔ'Ő6:Í$҂ČZšç‰[ŽH[~e( âQÔgš{´ɏ4IC.AˆS*%¤ŤšX§ŕHWţľXÔX}îń/Ůî]Ëéä+FńĹLÔÁçFÂ*űçî˛N[ß´om‘3o=Ähőw9eÝařf@‰Ĺî؍ÎgÎ]´[ďţÄ.h—˜x7ČĐ6mˆóÁœ`1óđw|xśqۓ™—ŽGދđG_°ßúÝϤż#@Ł€}ŤÎ{p5Ž˝tÍA–ÖŐX$—;˜Ńú4ĺo@Á$sožŚJxő`Z 1¸jÄ‚Ż˝pّÁl–č-”JQŔš91kç'ňžą °¸áD‡jXÖňNĆő<ťŤ€Aq $^vßB{‡ĺÝSUu ťGĐk”H*ŞďI>+by<áÜśÁ¨%IČĺFViÜÍJ<Ĺ,÷KE vĘSŰĆÚç¨ȸĽ6o5(F6ÖP´ëSN ooOrŤ{@˘ŔݍÔIpÝSČaYÜ:dp-žFŠJ1˙"°ŚŰNäďo‰|4\(JÔĽöă&… “ë”vĎ)ĘB@™ŒKýzţŮ5訲|ŒrôŠWnGQÉWýČűé¤3b;*ż"00{~ŞŇ¤R'ő˜Hč÷}ôFçďÁ`ŘqyăJ[šţ†SeŞ{ľ•ˆëq 1í4ńľą‚ŒŠ‘Ž5\Œâ‚\pşÂGôjúDۃ܃$˘K3ާÁؙCˆ.O“ÚÇ´K4Ó\ÖW+íĺšBŽĆľŽ/.,眯S?‹Ŕx@w…™ĘUŚÁ ]ŐĽĎőŐ"™GvĺKß"!Ĺ=łě7ťwďĘdöŽ˘ĄÚ(‚Ř\—[`_ľoŹÉKŤť$‘i¨ŁxBî$裤/rV:čą"×­ú7-‚˙u- ~Ř!(Žř>ŇřLĺ­\Q¤‚śŠc1it‰žŽ‚ÔîÝkĹv $‘LŐ "CEŁžÚSăŽ%ľJ5—Ôm ëĹąIŠ;žně=×¨ZŇîmđ#2KRy°KďőţS™Ü˝ˆpɄ¸jžpáŹĹ€ëŠŐŐ=ś˛´p ůތąěnFĺŒc w ¨Uʤ˛Ń]˙ĐN–UĚꖰXˇ!žqBé0˝Ď¤`„z…ČNzŸzžwŮŻ˙ƒ›íЁ˝śź˛”‘ €úź5ěŘ âťĘżçö‚ďWxťěó0ó0—K93ž_Gamăöwp!ř ď?ší"DBk$žÇ˝mT9ÓZ,~?ýôÓé:v{)Ö÷Ůôďž ^ńjÝAˆ6ÖŽ`Ÿţô§“m—CÜrů׌íZćR%ˆx( ÂőîÁÜ\BŽÎU7JCńGwoq淚 Ş'څv`Í ćˇjĎó~ÉÚ6—ĄÉ×ÇĚý¸žËßÓŢGžFgáS‡ďţÇŢŕď7űî˙ťžíË÷˛!X<ůä“÷ĹSݚģ#Ńŕrâ'6.˜d1Ę`rxăSvÄ÷ŐŻ~5§q€ˆ(ZČJ ‚ôéÄťt:âć>:›ŇŢoŘĆzc :°b_=ýu{rőiŰg{íS Ÿ°;Ž˝Ó–w9ˆ÷}2fhńš?qźŮÓĘŔ‘řăÉlŘçĘ @'— d:ľNčÔ6ƒS§š.‰O›ŇTfĆ ,őĂŚÉ׼@˝ę¤şˆ´ ů‰ i4  ćymĨGŇ& P t‘c­ŮřRĎrŤA>)ů÷qd‘ 4yPNŔRH(—đŰÝwßmúЇRŢ#“]Z&_~“›~ÓięTĺH§>É#€­Œ(~2b3ą×PËŕľý ’ýŤOá>”GDP =ŐN¤MŮäĆAŽčŰäG“›”-¨?ň7×(…ĉRmĂý(ťđ,ůbĚđ›Ü[PˇR{~GĽ#žŹ“[őMč B@ čH¸N>˙äOţ$=÷3?ó3éwš­ĄÓFRU€Bźäţ(҉Ô>ä.(žl˘)7qFFÜP)€HÍ@ä)ŸĐ6ä“öĄ,¤/㍔m˜¨†¨3Ę,7qcK|ŒAŐ#fk6×K‹#[]Űmű÷]‘NYpŞ P㼞ľĺ&O‡›śŰÓYΟ9a§ (ýŐďŮřšÇmŇlÖ'çNÚÂţ+핻~Ü_“Ýrë]śrĹA, “‘uNJ­_ܲݎ×OźŢyQŇŠsęŠ:…$ôGôGi‘óó?˙óE‰˛FŠ.ĆŚ˙;˝li?-œd’˛Etk#˛ß´ł”S¤.!’†TBx†ş–ęP˙ŞoÚ┌r¤…‰#Ä šJýL.Ą4ˇŠÁ)9.ňDşŒŤxĘFéSOÄGžăBäü‰§šśÜ5'XźƒÂŰa0Ńź$‚ýéÖ[oîßJ5šůЁž*ÂŮ÷:O¨uşË%”—žç}ąotţNëč; ň_˙ݔ‰öçy毸暇y¸\‚,Τëőh č,ţç˙ýĎ;§Uâ˝îR %Z8ˆâ¤żŢJˆ;XĄg´ě*Z´ "Ú͒ôoóé@÷ łöošĺ¨Ę; şí ¸Ąf’ŢÇRxpŮňiIŸ2¸ŤÝ)ožŽŒ&­qĆó2,ä GLKž¸§ÓYg?ƒÜ1č% ŠĘ<Ľ+" !’žcŢ^îŽ%Ş𳃂˛¤äř‡…O ÷óÝÎéłp:^ć'œp˛œtüDůbŽë€ăěe™öę%ž€Vč˜˘Ą+’0dh’Q.îĽÜHVĽľ[’Šş ™¤dIÔŽ` `ÜëTÖtÚŤAÔ¨Ź%yԙŔÓ!fdľ~9Cy‹ő ^ŢŃR“Ôť)Ć!’„úŠň˟k,ő!3ű{ŠřsŢ´ˇđ~>ÍüRŠDbŠŔfśXv‘ăiĚ:FĚţű_m*€űŇţÝ~Q%Aý]j*˛ ɕˆäÚע(#%Ő÷—u¸ĺÓëĄ˙¸[—ń%şĆ•ČWQ‘FŔzXýÁş€Ša˝ uRé¸9¨ź¸źqBuěĘŮZˇ.@˘=DĺPţ*ď<ĹÝűVÔ9â÷I.ŃěĘG웜$ĐWcˆ* >‡iދdúƒH¤/őoUÇÜÖă4ěˇJŸédyy—É,qŒRľűĆ8ćý=6 äÂvΑq:î=EJQŞlĺŔEßcŸěŤa>{G­ˇ™ ľ_%ŻrEűX?ͨԠ44ߙu‰ĽťU-Š%ΕŞ;ßUßcÄ=¸@•ء˘KÜHŇ×ţćď1Í_üę?ť&Oü…Üâz ˇ?ô7âťxńźmn­§źŽ,î*k˜–H÷؃NÄů¤źŤśĽ{˛Ű]g?ŸPƒé´óNÉÎßC‹n~Ň|UâoçPŇřľŸťiN°x‡…ˇĂ^0ó0ópš˝kăÚ_îÄpkŽ%Ě,AÎăZBĎ˝YŃfgő裏ŚôÁ΄kĆř➰ďNiő‡˙óţĎ)˙?ń?Qo”ď~ëÇ÷ĺź3ŔŔ3tč<ÜżŰřUn­ŮÁ`°‰‚óIe|§8ż]üMŰÍ ;\ű;#X4÷}Úř  dĐŃh€m möՐl࢒6z€ƒJ5°‰;ž¸„g`đ;A˘Ďޞ g@JŸ űęŠWíĄ—žaß\y¤YOěŔxż}tíăvíŢëmßZłoú°“YhmŹoŘąW_łÍ퍴X>|Ĺá4ÁČç"ĺô“d ńłĄ"m ĘÁß|ň*o>rť ƒe@NAm޸N:”ß!HÔˇNq$w/e ęŠÁř¨A@ş\§ ˆKĆĘ-E ŽŃvL Ú0Šđ+e Ň`đsŸŃ`HÝ0ĄţĹ_üE"6ŕf$sĺŞAőMšČ?€­NőhŠ%P&Oô ČęcŃxCy™¤řM (ôcŕ-ě6šë ^ŽQňI}ˆlÂ5ň&`[†#úńčDĄiĘ2žŠźR˜°L_˜MJ™„@żËň ŚÔíŁ ˛ĘÍ3”SŽPÄ ä[.9”.eBš‚zýéŸţéôB˘îéגiĽéŁz#mę˝o¸ĽnD–Š/MŇĽořçCţȧŽiĚQVâĄĘ˙ N§űhk‚HŸç˜O¨wDŠĄoˆŕÁsÄĹŘáÚáĂGlŠ1ÖďŰԏę[§)qö™œÄK٘÷xŸ6÷Ë” ,Œ!ňŞüHŐCď-Ńšö/ţĹżHóÔżü—˙Ҟׁyë˙đ1•y’ůeČqŒ×h@ýNƒćQĆ`Ÿ°ôý ¤Éę?ü‡˙Ö rŁóSŸúTšž]Xüť÷ďěĂţ°ýâ/ţ˘ÍĂ<\ŽrëÜ6čýúí zG•€žT•ƒÔf­LźNśř;° `z”âlA/†u"1Ě2đk@HÝÎďĚßčÝ †Œ9’łŸe`gŔaÜLĘÉS•€ď{).×oĺţKynŹK܀#“É´ ”.vՏKuNĂ<"78`ŘűZă’Ę5ëœČő{ęLDvPÜó°PČm[n]bŹR>•ŚÇ?JˆI&´ůä÷ŚťpéˆƓŇŢÖNząL4ŐiywC Šz€đúćĐ'H脼ňĄßăig“¸Ő7u‚GiD2rÜŰ d,}9ÔUKš% PmnYb~2ÍęÖUkˆeHľé8בebyă‰óŢŞ Z‡â ç9%đ(ƒÖ!JOc%‚ą`§ Twíß*スň‰“ĄäĆ mcĽ1 +ăŇŢVUq3RŔԐ~×ŃĽKěă@ QqAö(ąŰśď )ŚřItË{đqrwáJ‹eAžčÉĘ—Ô Ś—Ź×Ç)m´ë˘vŢtÇ"dW‡´>Œ„‘ č<Ś2ÉŘÚßűÜôů@jűáv)ůЧ"Ł­-śẆީŠ7ÚÉúóiŹ ĺ?ŢŰ"§OΈq)~ď&­zUŸčĄüGľ wMÔÖIT ’Ý÷Lę# <Ç~k˛íc^d•ĺĽĺ2 qś´cOyá÷YgŞŁ*뙈]k‰lƒźN¨JF#š˘Žę–¤(\ÁIzN4bŹĚ ďźđvŘ ćaća.§×5Z§šjÜůĆöw.á`#Ń%xT8#D"*AńÍÂ\•&řö lř`2Ř죽>~´ŚŠ ˘í"’.ő;ńƒ5`3EšBnÄűńö×Mq ×Aqݨr¤ž„áôIłńНęŻ}GľęJŁ][ůžHâ2čŤUô˙ŽDT•Aż5u}Y,.‡'­4.1 ­ŽCg˘łęd’PŽÜřˇ\dÜ%MĎ7ƒ•k Xđ€Π¸˘‰űž÷Üc'Đőńǟ°§ŸyĆ>˙ůĎŰRcŒŘ˝{Őîźűîfđ\L˘팃]lë/~Éžúú7ěůĺmWsď{ˇŢcGFGl¸ľÔŻ4ŔçĐÖv7`cłˆßÜŘ´ÓgN'CßťŽşŚéx{Ëž˛‘WŔfČ#eĐ×7ÉÄ&KŹvÇÔĺ҉ʤ´ŃÄÉßÔŻâPŠ!ş¨ mMBq"#đqË €ˆäš”-4ąĚŚŒ X÷9ď›SňE^i#NˇŤ|ÜŁűâćŒü7e!]M$ÄOťr]ő„"Ĺűß˙~űɟüɧNÓ>yŽF7Ę[¤Ď„/ňĎé†ŘdÂ"ľĐrá úáB\ĄŹä‡ź}ůË_Nu@›P7Ä÷Ţ÷žˇL†äÓOo-˘B”s­2ŤžÉńSĽ(3ýŒ8ŠG@%Ŕ1MÖ ÄŠvÖÜżĺ„8I[í @™tę?ѧ-í¤1Iăď˙ńO Ł|hR|Č÷ŕ×ŮXC^i/ĘD^T7"X‘Ć´ę“vď+ú6ç¸—oČrŁú†ÄAy!W•OJ"BITĘüNÚr=Ą1G[ˆŒĂýÔőˆŸ yęV ˝ěNô×Ožn/>ó˛]ÜxĽ™–Ňśűřk'ŰĚÉKř Îůٜ\´éU7ٕˇžĎŽţŮ˙ĘΞô„łé#÷ŮÖW?kÇţâŤn¸Ű†űŽ´sËŤ6=p]sőUvU“OŒLVYÇĚoĎ=űœ=ńřŁö͇nć†Cöţź7ő‹šŽ'ăě7íLšßŽjâ¤oŇÎÔšNŃ+n×PÖQ}KžKrÌ#‘°¨_ú u¨6–1V ␎Ô%č2ÔJNUä<@gš÷ éÝ!ň”Ü qMAŐGA6–Ŕ˜ĽoÔu¤w•UÄË5Ć÷RšŸyţ‰ďˆž‡Ü7Ń(ű‡ČmÝéÚ÷>0?ü˙ĂżMžé—~)=Č ögތÇóöO˙鯧~ţ–B}i6sŸýěç’ęÓűßţŇ8|#ƒ žżm€¤őŻţŐżJóÂŻ˙úݧ÷%މ>ó™Ď¤9ë7~ă7 šěÍÓ}óĚ|Żň;?ŘĄ•ÔÖť¤5Ę~/‚Č ž–ýîü|žqh7ĎoŐŹűv:Ĺ-Ĺ'68Y"’Ř_KÜA'ęfs5^łpZTŔĆČ"AÂ×ԖŒÜʛZpÖ÷•ƒœŸY?ˇ‹â„ Ü×?íݒŞ%pqX%CşŻřfWÜĂÖj<ž&pĽ}^+W|Í?鴁ޞúňúěşľp"I•Ë0Í{-Œ3ý“şŁ „ĎJ$¸t6˿锑MžÇ”[—Y!Ľxü~R^y ŒľDh€@'+Úďxžäž`ŕ§0V|˝Iý]źx!Ęòp(C”Ú1îűßxŘ"ŞčşćjŇŐžşoœę“HD(°ÔŻ‡Šƒz=9P6mú) rÓíIŠÓ4†y=óÚڙ$ؚű‚YKrˆö˜Ÿ°Ęp¨ě…69ˆľ?ýUý#÷"ů$ÚZĽ­]F…ÄŕůpŐw›Ąq?.}ŮËTwňŚ4 öç Ćtąăźmí8h•NÔ?TĎ>^‡EŹUş™d´#čˇRQ”U WÚ§[Ő%†ľ†ÓAÚăÁňźLşŽ]ŇXŤzóȰÓO˝Ž›žŇü‡ęAŒż%ş9Q@ĆX'žů؞Œs¤dŕe‚L 4ý6Pż`żŠgqƒ2éͅšwűÄ AčCRE•fss+Ňéě}Œy˜›SMgežK$›4-v×ËĘ_ÇăI6OĘ|Ĺý¸vY˜7TMJţŽhűĽ”tœ¤WçžěďŠT^ćźiŰGٚS4Vk,Ĺ÷źę8—ŕ’šI}ŠO2úr÷&nÇÔÁ…BĐvžíƒjŁčÚăČ şíQ"Ψ˙Ĺ~‰|‘ŒçÝ'° %ŤL7ĘőßçúHš2ŽaęFďc/o${x\[[Űkł‡/t¸,JxcîW=tćÄć˝4‚@™ UŽb•Ű˜ŹŞBžšŐHZ˛Ewôó*S2ŚNBŒänŹÎ}oZԁćŔű<ĚĂ<ĚĂ<\.!Žx/ę},R…”¨˘ý"îSúqő˙ÝÝgN> Wq¤Áş@‚>]Bo}I܄¸śŠűGxŞő(ŚsHZ.ÁDb:of“‰ű̘áRÂցVր}’ƒę*†xm§řőÍÚRjźŕ*Ă`0xÓ6藁÷ő—C¸l2vАîƒuŠČ} %PŻ1žc8`ĐÔŇٲ0† Äâ@26Pb Č!sX€7éÝtËÍśďŠývńüz:˝pęÄkéÄčBcPŘ{pŸ]q`Ż­ěÝe'íu{şzÖÖ›vëňMvűţŰěúŐëlßňɨvöÜ;áŹ?q*uZuL€‰ľ=Ť‰ŹŃ–ÜB~ɧ6\—ë6¨üF]$g@|œŠ#Ę‘´@<ÄOEépmhˆ[*"!ŕ°¤1I›¸HWŔł@Kâ$éómÂ3"{@ćPÜĘČłÚ䐞” ä‚ďČ#]ڒ¸äF†ç¤î@ŢjIóë_˙zzŽÓ¨ýčG;€ŔĎiB‘ëň#ßľ”“r‰@şň %’ƒČ:ĄA~x†ú‘ë˙ćyšÁm‰ú°Č¸¨‘‹ őa€ ښgikš„Ń3”WJšĐI;ŞpˆČÁsœşĽ<Ş[‘t˛D~I›1GţĽÔ!U ĘL]sŸ&cňCŰHő„ w.rľńpŢĚAśš÷Ţ{SEŽJ' 2Š:”:‹ˆzp?őFŰĐNöП(™Dždô˘¨uHZŸ2É ńč7Ę'ĺęKŠ+ęßüNY¤ęBRn LJ›|‘ś”c4OÉ(Ćď"jˆŔA^ś6Cďpf‡Jń‘ń/ŚS¤Œ5‘^¨‡Ýk{q!›Ž:âyýążggš>łýČvîšGíâóŮęɗěÂշڅƒGěäkĎÚęťn´ęČŐś4ZJϜ("‡HP"Cˆ|Dúę˙<Żq¤ź*nň@ťĐ/˘1_Ę'"8ERT‚d¨™‡yřېH€œľKľťĄąNó. čŸ{÷îI’oŒSÇO“ű,Ţ/€×\smÚ ,--^헾t"Ÿţw˙Ýżś›ož)ý†ËŤC‡ŽŘŸţéŸ6ăíTšżřĹżNäąn¸>ÝănˇžIż9r¸WěŠ'ŸśăŻť‹$Ţw7ÝtŁ=óĚłöđ7ąŁG_ľĎţݚ÷öÓ\~ôč+öÜsĎŚç ťŢvŰí)žeœ˝ňĘą4nőžşűî{’Ÿ41PRžŰożmǍÁţá5csËţőżţ˙6sÉţôŰťß}gó;lýםć=ćN°R‡iş‚Ó­ˇŢVN$'6ůcŽ!|ž˛ÇŸx,ĺceeWSž››gޕ ú"Ó6'Nźnď{ßűŇ\ö˝Ăçá$AżąąYÔâćœP×{8:éĄu…Ăďyßz+ńít˘ĄŤ¤ š‹űĆ \8ď@}<á>I•Nň{Ü3 ď„•pzŰd q°B@…ăWƒŃ`ŽűéB+ófW ěěëăKso:?ä^HŠł Îâ‚`=ďqFmA"Ճew1ţÜśů…rX)Ż×Ď ×•˛ŞźüţöőDt‰'´6öÁ[Î^ç2Ŕó1˙^" Č LUŔs‘`¨•ňŞu:Ůë@ńB3ďC˘öľ¨ƒĂÔńÂ%Ƣ>0] H3žljI$ÝS9ńtrŒ;~§2poX[e*7HÍj)8Ěütq5(͜[(CŐŞ@~Ŕ[Šłdr !jƒKIƒ)"’&ˆCű[ЍůIďĺDœVőÝ"ȸ&¤Ć­ˇó°ÔNöŠ2HîD‹ÁŔŻ3Tži%ýz —:‡âS¨Œš?˘b…ÚMŽHRĹ)$śŤl ńäZ! "GÇš_x}ů>@d 訿äŞÁŞKúLÉ×$+ŔَBĎ-:}ŢÎ%nŽ2ILýtU/ŹŕwŞ´|^†ÖY"‰8é§Ů?Aň°řU˝¨/ľsCuÉÜCźŐ´ ř+D÷,ĺwňć ľ‹ťX]Jš™CQ€ů9‘\­‹˜”ďLBt×+(mX§ľŻ,î'jšž\čLfw--ńÄ u!:ŞŸŞîźlSsĽœŽ‚œŚeĚ÷Űú;R:m<îŻăźŤ~Ż8cŃÁęPś3ԉ„0˝˘Ť™8âü•)TÝŻňů|4ě”MŸD^ .@ú0őƒŞô×;şă—Ędt1‰Q-Ą˘=íŠwD°hŰFűyꍽşěV˛ĂÄ÷@\żhíÁřľLÂŤbtŢł–ß ĚĺC ŞŮL$W)„¤LR¤? ‡ú`UÍbĚĂ<ĚĂ<ĚĂ~čżďő~Ĺ>řđĄ Č4čŹGăwŒ#î˙´—Óż…§€ĺ°Ž[Ŕn¨ƒ—qϧżűŸž}&ŽĽ”vU°ź'Ÿ|2ŠŇŁć+€ĘӊĄ_–¸ĐAnÖ*r›Ő=býřă:/Ć­üëßÉCƒĎ‡”+„UĹrôó×lńÓŻżôpŮ,XřČIM@§Ôr, §c ýNÇcᏠ’gä6€AĽŢć´1o›8_ˇ­f0îoŇžśv7×§łą˝Úů_;úş˝řÚËöőç˛sΚŞ’qţÎńíöńť~ÄŢuđęfâƄÁh`k՚ml:Hę t@> ,aŔ $_Rŕ Żb_ńa˘ĐéyĘCÇ€Œž tćßr!€”,¸‡g$9Ăuâ“+üř.)pŻNŁ3 äބë<LJô);uB\RE l”‰ßɏȤ-‚ß\×)Ú]§˙pŤé+č¸zI†‹uޤI‹ž+Őţą…sDôqţąş÷ [ZŰggö×ÜaŐĹóvĹÉçmőL3ˇž9eÇ>÷ŸlwcˆŞŻżÍVĂŇéق=zę˘m/ﱛ›qó‘{?n{öŽ5Ć­ƒiăŔ¸Á¸ŘܰSÇOÚdľfm´ŘÜsnăB3áM“?[ÍAŒ ňCy¤dAůɧNŢP.š˜Q0ś˘bĆŁTЍ_1ä+LţTŐoexáiH†žMÚZ\1hGŠ˝ˆA+V­úiÇą!2•ő ;Vs´Ę,Ľ×?e4óđ˝Z3Ž~˙÷˙ -œ™;/žř˛ýƒđsi ýéŸţ™}á _(dĂŮěKIQčcű‘D¸ˆ—A÷ÜsO!W(ÜsĎÝMÜťÓźJř˙Ç˙żýĂř Á‚Äďţî°_üĹ_HďĎ}îsöĺżjŤť} đ™Ďü…ýóţϛů˙¤˝rě•ôÎyîšçÓű‚ëďýŢď%r™ˆ€_úŇöżńO›ôŽ4ďĘGSÜ(?1žPŸxôŃNJ1–y˛Ć?űg˙ŹÉ÷|3Ü˙ýö÷ţŢß+ä †đ÷źçžf3v0ĺŔŒzB KŠ<ŸűÜçÓsŸüä'.Šű'OŮ˙úżţś˝~âxS/Ťix˙ýŘ?úG˙—Dôŕßů—ŸMÄN‘B0aË3ˆ,Ę{ÁťďŸŃ\ýHŇÄ5ŔŰMŕ‰ţţ†ž?M/‚Á°€"ń~ęlIźyZí†žŞŚÖ*„ČŘ 9ôIç݃€öۓžZ „Č–€ ÎľîČ4ď´ŕń,Żń˜Kg‰ °ą1ËäŇŹďq: —çCFWzčƒĎžkUä‚Aĺ•+ žŐ.RP]ޝb›L§­*‚ŻggĄ}ťŞivgŃ'> nëÄňŠu'jDƒm„Ú†’ŁB˜Ů˝"˙FYˇO<­6qGý]äýH¨P~#Ů6’ ú$†8–złl0Ť]\§Ü ‘€ŔpОîOuD?šřéj7ĆySfľĂ(ô¤ëé+ ÔČ7¸ÔHâřăß"˖R×ÖQĐw4ÄĹţDzĹVĺA‹aČsIQôW/ő7ď‹-@‘FŞ(fÓĄGsÉN4­Ó•Ż–´ŃŽÍľVŻ2ŠĽŽ{ÜŁLHŞĘX‰n ř]ꕸĎA‘ń–lK+•?Ôç☲LđJ`lŽŁY’Žé‰UOu§ť*ÔÓölŤě-c¤ĚňĚřÉՊ•řÔÖ1-Ís"m‰Č ~Ô7Gyœ‡Ę „Šü8yn!ŰZ6“Şý˜9WýYýDîQ/q‹`’Ć1„ÂŃBÇEŹĆĄˇĄTŠF&5F•Ą•`—÷Nߐ R­ű%š”°Úl'rVßřßö%ĆÉĽä ĺ? źŻ“VKtXĚv5؟úA‘ĽTˇą­bb[ôdÎŐý‘(çrÔKŐŕ’y6;Č(iĆů¨O˛Pý}Đö)4vӑ(]śďĺVĹ&şŮéƒ'ę/i^¨­” ű˘íL:ăÝ˝ˆŹRH]ůá&őĆĆë¤OĎUS\yĽé“Ó֭ѐëyɗÖ%ŹUN’˛ůTęôńW_}Íţýż˙÷‰|đá8ůť˙Ă?ütţ˙ĽÝrËÍÍŘš:$ZKóţÔ§>uIZ¸ď~÷ĺďţi¸TĘ<‡1ŽţúŻďKŠżüË˙(%q ‚bĆűß˙{ůĺcöĺżb˙äŸü“´áú­ßú­fLś_ýŐ˙*͟Ź[pS‚bĆoţć˙­š!c|üăKä…űo˙­ýÚŻýšýýż˙łiđß˙÷˙?űęWżr Áb}ÝI[¨˙`ř(A€0˛śvkú÷c=aň'bżđ ?oűŘÇ )ä?ţÇ˙hwŢůîKĘúŮżü\"yü?˙_˙¤„Â$?ţă˙Ňäáćb°ýČG>l÷Ţűâśh.Ż uŻ\…Ô] ~9˘ĚĘÉňž⭆Ô¨ńžŃť‡>OË~)Řw:_ővŞŞŰ<ߏs$Ą?+@W %yóřş`řdâî(<ţA:0t_Ź8—[ ĽZ ÝŐęB~č‚eNŹX蠑\‹ćůż˝ŹuVkXNů!}\5¨´$WŔn *Ęü Ó˙€ôłY”ËoU6DxŐƌwOăƓĚšÎăBľľÝ›éý'5IĆ*_ßÖy•ń.E!Êĺ9CjFrËĄ÷lۏ}ü‰0X!y)(˙Ě]>~' ďš4všˇv—Fł0×h>Š„'…2^]Ľ‡¨šëÔă ďŁOš ˛2†ć˝óçÇĹv"RBě‹Üĺ›/‰ťîÔâ8'áI=éŒÉ4wĽ—ŹĆňÔŹĚyÜWޏÔ.*ó&ę.ŰăíIJ6őű}-ĺzv‰"‡žeKP~ Ń­ż-AŽJö_?<#AtM*’‡UVŢ˙iňŸUyî5ĺ§q™~śŠć~\ĺřjî­Űą\WUŢżd7!´cŞÇ*Ôßwˇœ‡y˜‡y˜‡yx'†¸žoíľ‰đżSčÚş{ĚBtÍk2Ţßŕ ŕ@ü Ţ%[žâ×~(’2cZqď D}â‰'ěÁLśI”hšWiôâ§_†H{Q~G+űˆîSvJGeÚŠŽbt@ë’Ś^t¸4ĆűFéěĎx9„ËĘEˆ:ZŕœN–‹0pƆA¤Éđł0—Qđš{Ľś@ˆ`žN’Żî^łŮVmçÎ_°qÓÁ÷5Ϝ^?ÓâĎÚ_n|Î^ˇ×lieÉ>¸đaťiĺfŹěĺ~ń…í٧Ÿą‡öěMŕÚ.@ßĺťňŞ#śďŔ@Ȱ@* ‘#ȏ?šüÜ=eŃ)é{ęřÚôCpL.,˙ bđX \iE’ÜOHUC.”6öŃƄű6Ľ:@+š-щuM†"1"E =§‰SĘBGRHÚô?uÝhČ˝‹Nž¨rޘíń"Iß°+őę‡4 ˆx¤ś–Rň/Bú™ÜM¨\R{ ŸĹÓd‡ Ú@ó›üYŃ×"/iŁ-Ĺ8çôĺź9w˙Żăâ˛EiS"ä(Ÿ2ŃśrGBš( 8˜D\ńŠl$š P:)ˢ;†řm”iĆBÓ/ăřŽ=WŘʞýiCż~ó]öňƒ÷Ű#çĆvĂUˇŮ!Ę÷Â#6űâ˙a§V÷ŮřŠCś}ű‡mĺŔ![šúf;qę„m6őşÖ܇Ô˙ŇĘŽ$Yźľ5ś­-ť¸~ŃN7÷¨ xQö¨°CYtjHnj(‹\žˆ4AŮäFŽh¤pAP;3Né ô ŠOpŻH‘0ŚĹ 'ŰĽ¤!ˇ7ôg÷DśęcRPiB÷P>ţ–{‘€˘išü9ůĘP‡ďOˆ‹[ú?s*¨@ÜqÇv÷ÝwĽ>ţ7s_"ŇĄ*ôőŻÍ0J†Žy‚E ß ĺN×]wÝľöč#$ő†Űnť5)A8°?b\\XL'›šyŕ‰'žLäî#ĎűöíMďx0,ź{ˆ÷!7ŢxCŤ¸žâÔţ>O˛~ë‡x’ý6u„o}ëá4@PAՂđ?ńIűěg?kO?ýtză@ée*ęŮÉWŤéŮOúÓi~#đ kŠPÍĂĺ´V”Ň”ÔÜÖQ4hÁ}˙rΞ=ßqg¨đf}”Đ›ZËJ=Œ4Xž]!‚5ýđ-Ą`Á|fš,dŢŤÔDם€íÚ˘ş€ÜQđݞVŸvöZ­řĽrénđç’TŽsF „ą–ŠC[z>%×ßĆ_gŔkÉî‰Œą´´’.K`_•×nm=NÓébÚ—;Ż+Ľ-%‰˜ĎœXáůłŞœěPĽ´šÇçő6>ÝăJuĘ@Ł§ÝžěŁkÔ¤y=‚†:yÝ­)|D…„ĎŔňç&ůôšf(Ăâ˘%śˇ7S^¸Ř”a°™dę-ŤâIr­ˇă‰ćh‹€[ŸtĄöŽąČ%œdOŞ@†U‡ä"ЛÓ÷ŔŻ„RG#w)A5ٙÎ\=eZNy‹ŒŕŕçĄ{"ŰĂ,ˇ[ŤšŇç#@?Ëľ ńWyZĚîÖSŘ˝{-(žxŰŠOŤŽâ {Ý'b‹Ś(}CČ!?Ń%ˆ.˘ń-žpńŞŻ!w°Ů^í% Š?Ž…Úř‡-‘$ˇŸlA2*ú3­[ő•[sˇöíéĐO:`ržY§ŹŘňŇJÇőĄň%†SÇľŔ UäP^űýTdTgęĎĂĹś 2áâŇpP7).ĆZíu9ŢvĂě (Ö¨ÁÚ6ˆdžĄŤ¨ÔV!2îFăśĆV;ˇ_jě-$,f‰@BMWVNfżĆľęÄŻ/5űÄĽÎřŒóF„UíÜ1s•)U(.ÍyłYՙŁD\ňšˇUŠ3ł+žbůŁý őÇş•uV{śDžÁ%cfP]JňiŰÜů4ŁÜb~ăxQż_\jlł]C\Ä#ŰAŸœ ~Ç´?ąŻ+¨ }Czr{Ăßj_úĘ´ŤÄ2 5őĄäd˛UĆ´pęKýyŹoÄ׺˝˛Öő˜ĘëQőOH÷TN†pݸˆ˘<ňž&-ŮúF¸[›e2 kˆ‚UîďĹ˝—š" ď`ȖŠĚNč)܌ćËÄ8ó~0ô—ş>Ěn€ŚIÍhN˛˜‡y˜‡y˜‡ü őAkW~ĎűöďşHč“.„ hżŔ7ř‚”ĺăţ)*íd[‰{†¨b§}śRÔ+°Š€ĹąŢЇ'ăzŻOJčďKâżc¤KźüĆ> {m?Ž>éĄ_ž7JCé°ć~Ä:ÜJ‡Ńż]:ý4b:Zď].á˛!XdIňN;A jH€lKľř•:ŕ€NÖ3ˆX$K˘]ĎH)Ŕý’ďMqîZn6'‘óüú9;s⤝~í¤=3Ü´—6_śW_´SƒsöžúN{ϕﵫv]mˋË6lëW5ĎrâóÄë'ěąGoŔ䧛x7l÷Úît:ňŚ›oL ˛7:3Xö P ř"FDŐ&B“Fy€gvL(:yČ'c.ß)Ÿ$kT‡ÄÍ7  Üh˘ž sńF×!2fD)ƒ8ů7y–:€ RP ,ˆˆ |ĘĽ‰”,(q”Ň>2fpgyîąÇK€yä>ęVnÚ¸Š.Šo@ţ-˝RА?w)kČh# ô¨ˆ”vĐ'n°Ň)Fâ˘ěäü3aRNňËóä`ëœvąů!ňJ<p#‚Ziî6˘a‰:áň‰ř]MH …2Ë=Š€lÉ)‘śÚZnU¨ŔhŒ s"|ůË_NÄÂĎţěĎŚű¨7ľ5“/‘čHŚ‹("҂ÜÔČ&/ôú¤ÔGr˙ b ÷ňňS?#ßüNşţçiňËÜCœ‘Ź!e ‘cřg•ść őOľ7éŃŚ´ĺ‚ Ł9ˆ2s?uÁ‡ßĽś 9‚t¸&fĄŇ&ď¤-rň@ţE8ŁúisŞÄ㟖5Xłłł…z–]ż-wŔšöůŹŘ”/)Ň ăS}ľ›ß`tr\­ŘÉ ƒť˜”:§ŘÚÍr\Š sۈˆSe‚¤˘”Nzű‰đÚäóšušŢőHϡý´Nq%rŽľŔŤßŘb_ő~4HíGÚŽ0ČN—“ď^–ÇW•É.SŰY]!޸ť……–4ŕę0łŇďň QÚ@ĎĘĽƒöëZôŐ˘ÚF$b$ĐśC’¨;§Ű¨–gŚ]7$ôu˘óž0ę´}t?˘ąƒŞĘŇâRĘwRF…đŢĚAťV]I°˛K]E@N†AםBç+Wđ2 ŃLę&|—źM'č+q›1fŔˇŇşĽÉɒˇÉxŇŸ§UčG–ůj)8YŚ.Ľ”˙“˝? –ěşî;ѝ™wŽU(̋$HPÄDBŕ N)JE…ÄślĹł¤ç~ök;ŢSżđó—îśĂŠŽîVř[GČîEČÝś[á°%RAÉĄÉEʤ8ÉIœE"bjyyúüö>żsÖ9u (E”r#.nÝĚsö°öÚÓú˙÷ZUŢëHj]_wdś.žłEúË3Ȥě_ aý|ˆâÚÁzĹ|˝‹D’MŠvńť9Ł›Đm‰yĚن7é}eŇůHeNhH=Ű[­Œâüe;I†­R.‘uǚƞŽeÔĺ$˜5ßą÷œwޔ”ƒe´e&Ł–ôáĹú2z‚ˆm’5ú˙.kłcě‚q߄Ä`LŤăösĚßţühI ™KĐy*ľnî‹mß,óâ؉şő%ŽĎX_żŸŒŁç§Q;żŘWÚ8ăů?ëçöVś{ŹŽOTm_ŒŠGB{d5Łf,ŤĆE•˝[ŒJƒ›>f\Vy^e\ľŹđÜŐź“CNá Łyg‘i‘i‘éŜâţ'‚ńĹNŽ'đ‹/vŃn÷-î\÷ő.f(p1ŠĄýÄ}Ů0˙¸ßĐKžűRŁ%`7äÂÚÍ7ßÜÖý‰„ýäŰ1üńršŢëőÎ=ĂŲü;íî›Ý7×ˇŤaöb—Ň–vżÎÍńÜöbO— ÁŽáw‰ţ­VáéhŔ7ŒîqÍ @éO {@>†i@aâ8 ŁToČ9ÄČîő´Z˙ţ‹Gžœ>łuo:şz¤>l§ď?öştÇáŰŇőťŻO+ľa„ëÖzBŕ&A• “ôňżćşŤÓlkšžôĺ/Ľo|ó/ÓWžúĺÜ@ €rDęđk˜†čŃÁwC<Ä4d'Ery<úńîƒ>˜?‡TÚŚ7=aĘ+sdBš€ÁHňv€iܐAýJy†ü%H†ŕ#„‰Ď˛Éƒże‹3ŘéoPŢ5ÄI<Źň€ęL>oyË[˛,őb‚PgňŚ>–M^€ĽŢfçßLfȅ6{¸ĺˇáUÎ-Űp(Ɯ2â!?čýAď䔁‘=ĆOҀ„>ëÍDă@?yxXŐŁ m”˜âűx,8űâż˜űrÄáÇłĚÄÔs=Ÿčꋼ%-¸€:Gď#.N‚ŕzf ƕ꧞Qć‡>ôĄśĺŽźík_›ë-ËĐ06”­ ˘SśTČKŇ /Ţ*ŕ7ů󝆆YäjČۧˇž×ۍˇř­ĂpśŹ‰gbŔOž÷'ňsx{÷îK?öc?–oŠâůĐďxÇĺąÇ8d~ޡoO6ň1FOÔsĹN ě{Ţóžô żđ ™Ř÷š×ÜŮ~‰îw÷÷Ňóßüżëąw(”ôHEžxŚ8qâx3ÇŔńőŻť;˝îuߟëô‹żřĎňű˙čý˙ Ů ĆŞžžtŮK„ĎbnýNSÎ=÷ź=ýű˙ďÓOţäOÖóeɓ1˙ŮĎţyúčG?š‰(Ě'„ˇÂSϨ1˜;VöQŹ‚´Ţh}†š"áćr‹óÚ"]Ţ ýadýA/ô&vŠ„š••ĺ쩅4$Y]ŚţŠŽŚÜ¨/ É(Řvć…`ÓDJXĺüύ9ĘŽŰşTćÔQ#ăJ˝7”ćŰ;ËÜ5ęéü¸‚çƜ1_HnŠg0śŸ-§#̲‡~3ďą7”p8­—HŢÓMąç}ĆúNëZţlÜőc‡ŒçFŻôŹâühękŠçv/¤Œ$őÁ6 =oú~4F÷Č˝Č)=”‹ƒ:Š­Ť§Š!”ÍzÄ=źX7/ŔŘ?–ŁQ^(yzŃ ĘnH˛0︌ľž ĆeîkÇ cl4î­ő1„lą)žĎ{`ç[ \ůšIꍧ!ik8×*ƒĄ8žWÎGQwťvv!ƒLáf'!…ßĘńüésis|>-5ĄPŮŤlśë˝.اO*e}+ëöŔ :9nĆ+ýČ8˜5Ź˝Qńlum‘i‘i‘éŚÜO ×5.@ěÝűĚ?âžo§łçďÂŢÂĺdɤ‹­ŁĂĎw˛ËÇý,öđó™ĎdO ÄëaŕżúŐŻÎ̧čńŔě%vęG!.Đ&€VÉŮ G=Xh7 $‡S=uHZ éš"†KđPŤ rtR‘8 a‚$°î$@Ůԟz _ú„úňC>´°Bf)J%:PÚHbŮ|&9~üăĎe˝űÝďn˝R…6Ě@0Ɇ:˝Äv{ófJ<So꣡‰" h;ňÇۂdYc&ń™eËDłlăĹƲ=ÜĘÄré_žÓٞŔĹ82•…Ć-bÚ łŽ6ńežîuŻË€ˇDĺí­ęÉáуŸžC?čkdJ‚š§ÎƒďŠ7í€ěÎ˝ë]ďĘşNהKťĐĘ64ő˘lô€~Śl ŸČ”ţ ]’ˆxý0ß‚úŇfž`‚ÄäB[tَŢKŔ ďx™üۙ‡x—úZ6 .ßZ‡ţá}t=3ÔaĘp,“5ŽH“PF{š=Çđœád¨KgużŹáe˘6Ţ­,ďIëťv×˙œŚSgN§Gz,}ě“OëťÓ-Żź5­čůž=űr<Ň%n]íYI[+ŤéčkÓŢý×§›ęšěěßJG8M˙â3iňGďO[ŸřéT=_šýéÚknLGöL+Ť™ÜŁ˙Fśz%’4a{ŤVă•FPęDŁc|/iŒą-Ń yĐ×č˛â–˝2#/Ęĺ==•ĐóˆF%ňóśŻŢ’$ŚĄŤ†‹AŢüm˜ú[Îd"ć őS(‹›ë‹ôŚn¸1Ýu×÷§üćoÔúu"Ý}÷÷gýľ_{_^kŢůÎĘú÷•Ż|9ýĘŻüéoüż‘çleMš¤;ďź3DţŮ?űg‰p1~ëˇ~ł3‡Ň?ř˙ ř‘îşë5é‡~č‡Ň˙ô?ýĎ9ż—žôp˝6#éđ‚qă7děśŰnO˙á?ü‡të­%DĆoüĆo47ůŮ+=™~é—~)˝äŚĂéGßýŽ<˙B>xík_“çÎ+\‘Ž?V”îŻ0ŻĘ˜÷ż˙ýy|ăP& ˙ń?ţÇéůH?ń?‘ţäO>•~ţç>ýÜĎý\žßńő‘|$ˇ•ƒD”ß˙ýßOżüËżœţÎßů;yžţW˙ę_eŮÝzëŤ[oW?\ö–Yţ—˙ĺÓűŢ÷éÍoţôŐŻ~-ýÁüA&q°ö,Ňĺ)Ž/ĎuÎ4ޡooť‡ż”4tÉomh‘$|7$ëӑ×8R~đr;źUÜח[ö€ç„óŒÂMgu=ĐÖÖk5ƒRqomrä}Ćx%łyÉgÜURĎCýÝ7÷oÁzAO%Łć¸Ŕ°{™|!=7 hZ\ŐĎ`g–É€ďëëu–V š`܅ČáŢś6›ü‹„ńŘžŐ{…Ä÷ÜňĐî´iB,\Η~˜5ä~ÁHoÎł'ZmʈŔl˙6éßěĂ'•°‚ňzŠYLŰşĆۤpö$eđŘĎ%˛wÂM;{ŻŇÖĽœ7’Ɩ˝ąŢʆ7qÎý[RBLž†ˇuřŹ%ФÔŢ(Ď7ŻkĐsŢç…T@(“­Ę-{v¤¸ź´Ň–E%|!E˛ˇŠTú!ƒÓ“•Fś%źŒ€j–é\FT (J,ŠD'ű]o—ČĎöz7ô]i×Ú1*8ŻćmţCOL-ch–$#yţ,ᐜĘÍ÷Ě­ézބZ[[nÂg bV=âˆg=çm>>É2ڀ|ˇz:cďđ‹mˆ2ęDöŽŘčtgÓ&,ç•BőôŠ؎s⸹7M§žppš›ůu˜´mh‰@Šx HĺÂ|űl ŰSôÇĐ;ä§>Îo@|ŸŰ@ŢÍčœÎ:ۃvë˝Aء‘„`¨Qć&ő/öƒcÚy˘6ł~I^!?źH +úTdłśśŃ„Ü<›‰艗†ÔˇČĚَË2ńCߨ!ËÍŰ9cxíHb‡ ÉEqówU lŸďֈ†4Jm]ěƒBXéBiDRK$/i‰$çśöV&z9*. Â~ť„­Ű葴†8J˙/ľýęŞf}"\j}ʤV_őüičŇ<>–Îíy{BIĽŞGˆsźĺşÔkóźYăşc⻕Ľ˘wÖ!öĄyfّgł–iŸ‰Ä’HŔR&|žmpőÜ|ž^c6كÔkĺúĆz&QeŇK}ŚŞŚ†'+ޘ(k)/úLz¨)cÁYă #BůxjźZdbĆěBÎ"-Ň"-Ň"-ҋ1 řHŔ}6˙™žf­ĆΊ'đg{ďRĘđĚ`¸{°Gě‚o}ë[{űúo'íTű&/ë˙ůČ{ř7ř{qpĈ×|'i˜ÇĽÚŽ^ é˛!XRëĆ4CĄŃ%1Î{`5”Äđ ,Pyôé#yăŠŰěsgˇÓ‰“'҉Ż~9měڛě­ŕŐIzěéÇÓçÎ|.}méK50ššŢ2z[zŰ÷ż9­­Ô›ŤGYůFŸxâąôČŁćü) ÷ŞŤŽÎ‡E• ĆýĘĘZýyJwÜqG&!°ńč€ćć' âöŰoĎďz[šÖ ’|W₇HžTń°ŕçQťAŁ<$v¸ĄQôć€Ěč‘5Ţ(8P˜´źőOůČÜC?Ďđ,˰LdB’ý7‡ź!ÉĂ:q8GN|ŻA =Đł >ůÉOćç‘ DxP”8@9Ίťa$pĐ%ĘŚÝ萤U~ô€ҀšśŰĂuá3ú ك)€:e󽡽Ľó>Ţ-źů_nŸhĂżhh´?Đo#3@ äƄ†Źžň•Żäśá _Č7Ž_úҗćw`Ýi`Ľ?ôâ€ŇvęA?S6ˇp‘™ä>ç=I6ČÉ#ô7}ôą},˙†ŘA~čł.*=đRśág,›ď(ƒ6ó>őWirŁĎ AB>Đ˝—PŽó2×[ŠăŁÄz=“żŁl XČ]ž6鹂ą™& ƒCżPßʃDŰ4D¸ŕßRhm—ź˘g Ętܓ/˛ŁÝzN Í’ŸČ‹v2n9>5nAĂ@ž)“ňq?:q&ƒ…L?ţă?žËŚÝ?öxzěŃDz.IlaœŻŹíʄ‰军ҍôÝť~*}ôĄôôŁßJ+ŸüOi˙ç>œÎ×Ɔ•ŘşăméČńGŇękߒ6vďIcn6ń~ˇëßGŽMkŤËéĆ^žfŰÓôÔą§ęş?”ăĚ΄ąš]§{ěáşOϧ›o~eť‰q °ŻĐä#aBŠĆ5&ŽuÚç\ŠžĄă|Ż×#žgŽBތ'őœ>ŕ=C9'tĆ˙žË3űBC}ë:A˙Ţwü›i‘éŰM++Ké˝˙Ő{ŇÁ+÷fÂďüÎog}Ç;ޑţţß˙ű-9‚9˙˝ďý‰ôkżöﲞ˛üĂř˙Ť÷ ×g’Ĺ˙öżýóô/ţĹżH˙ý˙ßĺçy˙g~ć˙Q÷]”‰.˙ŁôëůŕŚô[żő[yNf^úПúŻŇ˙đˇëŃßű{˙ŻzÎ|8ý˙ă/ä}É=÷ܓç†Äő×_›ţë˙ú˙™ţíżýˇéżýo˙ży\: ď¤Wżú–zĚNżř‹˙snsąšń2ńËżüżçüţÉ?ůқßüŚü|™S#Ëş€žĹ˝ő]ÔPI\ďţĎ)ýëýŻÓűŢ÷kyœ"ٟýŮż ěç66ÖŇ?ý§˙$ýËů/ÓĎ˙ü˙'ËůG~äGęvţ˝Ěź'ĚČÝwż6ý›óoęyd-ýÍżů7Ó?ý…˙!ýĘŻüJýŮżĘűŁżýˇ˙vn Šĺ†ň"˝¸RÜăĆĎHîkŘ7˙“ů>Ţ .‰ńyĹűZĎjTŸô@ҝęaŠű”şóĐšs¸cŸć9ä…JŁf?,Ěa|ú.,Ew;ˇkSŮóB.€„  ~sśęÜÎog`b9ÎŚÔ°Ď.ţ3¨RĎ…Ŕ0™Ź\ÄPk97fIŻMË‚A<ęa+‡/‰ýW\ě—đC´ď̙Sőœ3+`ôlÜżÉ;ro‘ZOĘÔúƒĆ8ĎyEK9lÇ({ą˜÷nř ˆuŠ“ý]ľo ’aڍdG‰Ž .ĺĐ›šcGVý÷dCrEÍ_όγɸ˛B0ŽpˇŻĹ3ĘF xąˇ”…ŹRn×/ˇí ĚőŕďƒóŤ=˝A.Ú"Đ) šđ4zVd’đ0›ľŢ4˛TůÜPM]šxągTuc"î fÔz0Đű űęÚJK.šÍ‹÷ƒ˘™Ň8ś´Łƃԅ!¨r‹Î3eńŹÂŘ*ž$Î%ř0YOëuxiuŠ‘ťĄ2ϗ0ÍYݱґZJ]ÖÖ؏8ćKÝ$Šđůë­°„ţKm˜­-ĺů^'ěťn~3,cxŢ^¸P˙Ť‹g”q;ŻHřáyË QoŐUżĎulČŃsÎJm˙a<˘'NžŽŰľŐ^BiGŢfĽŒ1!;[ŘŤ¨‘\âźj˛ŻmëpĘăo?ĚqČfŠ˜š[ňŠ˝\ Œđ˛ŁŒ—ę1ƒŽ Çşř˝@˝žqŽŐŤŸ›˙Ţ˝ť{.KůŰ휝IŔôS­Űť7vçąlřFžŮť{Ož{ÔéLJ]¸˝­9/Břďć_ëI;}ď.ýs¤őĘ}ېH"šHęeŢxĎjx‰hź0IpłN+K˝eÔÉy:ë#šNá9I î ËQ/âźQ<é,ç!†=[Ϗçëý”9ŠÇ‹•ś_ň<›÷tĽ”ßôÓĚö”7‘\“×çZ–ËŐˇˇ\¤EZ¤EZ¤Eú^MÝžŞ„öŒDqűo÷ńţHrŐk=k26z°Öf÷Ęţ&™—eĹźÝS{aüţ菲=ďśŰnËvĘń,†g”Ř–ÎvĐíMź0"ž`„1Ŕ؎č…-ś'–ĺd9îëü 9ayá×|wjËp÷(ò,‡t9,.Ő\;şÄďF—đ{t‘żý‡ßţL’ţ&ű?|š:ţô§?ý):Ŕ 2zy én%—áí!ƒ÷Đép€”–ƒćUu~p‡Íz:JG=]ƒ¤#gާ'śžLßÚřF:ťq&˝üôÍéM׿9˝ôšó͂Ѹ´ňA˘ ßŔYî”@8j}?y–żQfę…!ÉMInđB ,@MoĘDŽňÜúFw…€Ž˜<18yŽ:.ŁÄ ?Ű\śěrŔtţ Ýö›8ŒŞJz°l@Ę:„ţ!€oćÓo lž§-ƌg%-jF#2ý ˜ú| ƒÝwß}w.ö2áé=€w(Q_žGžźC Čn÷p)0ů z˜ 9ůń.íֈD‚Ô žŮߔIْ čSd‰"s'Ęá{ň%OnĂÚîŘçbŮÔ 2yÇIźő*B }™‡÷Šó.r&ŃxRœŽí&?dÎÂIČ3Ě)ş÷Ţ{3ťYżńoĚĺŰߌYtŻÄSÝČuá;CxDHQŽč¤ăKôűĐĽ+ăLB úDôƂÜňaż ĺAŮȈç k3œ[xƲŐ䦞u7Ą ! f#‰<éW>SĎČß°'čň¤ŒńúF(zN!éEA$ĂĹc ˇŇéWtńŽˇÓ ŰB9”ű;żó;ůo@@ƤmpŔ3ĘLҚ•˘k.°u<•ŽŸ|şžĂNçŸ~$]÷'ż[~>͗×ÓĂë-wŚĽ[ߘöí?ś&ŤéąSgk#Â8ÝňŞŰ3pYçٰtvó\:qěhW˝a9}60N]}čÚtőľW5ąY—{햴ŔüćÍ4eŠáČžň掁œŰČ'ڎ;Ćb(ĄÚh !œtaLţ@mAn‰6“–DÖóQF$‰R;F•‹ˆRî<“w$ˇĺU3öGóŕĺ&KşóĒ  ŻE“ţĺŘżSČ7 ŮŔP›^ř‰ós4°şAÝYmČ0T˘jH †^„ßľť–Łkkž729eÜęd'‹Ô ů2ŹCŹGçyĽęščŐ"†‹‰—F˘çƒčÝÂ9ĹśŕżófáÜšHm-ń­ń.篎p×'EŮEĂz<+š?úˆ,íĂĹüMq‹Ä=UloSDˇ δÖ: a”;s"S$FÎae˝,:7.3ŰźĽ$ő´íM…ȇŹĆŁÔ#ď9˙ÉdŚÎëF׎vDĹç˘7 ęŸçˇĄlx—qÍOœOă|?ŁęF!^vD–ř<}ósďyy:tp_ZŤm´9­ŹI“ž˝@í~/ě/TúnŮ i‘i‘.×Ä>\„ ;́;ĎłŸâ'î}ź|;Ü?[ŠeÄ=‰ý&˜ âÁađČޅíŢŚxÎÚŠźř=kBlëˇűó–ąS™Ă˛âߎG’”É[Â÷Ĺdv1>[9î‹x˙mo{ˇáćÉć÷lđS5żçá§ ż‡?é"?Óďáż/hRz–tŮx°HčŁó-=dbŔä‡ &7(ůžď˘Ű|o‚“ˇĹoźńŚ´ÁÁś.cĆFzi;íÚSęW,ĽoÎîKîy8íšěNŻŢź=ÝT˙WŹßL+Ťő!iR 3ä%ŕLŮäK=d×SgËćÇ0šńć=  4nşr![/á hÜ ćoŽcd…ŕŔdÄ@×[‡!3É[öä‡Ü č2‡>Cf xFW1f^–•řžvńźÄú‰˛ő&Âs´•şęúŸ6 #7üČ$ßRŻ'UžXÄ´Cc–&Ę@>xü Ý?őS?•Ű#ƒ ů1 ůŒ:‘/uAć€Čć @N˝)b ď1‰ĄSäë ŽxŔâłŘ§OřŽ:ѡč!r2ÄýCŰ(㺓}ĹgÔW҂†^äAŠ<ˆëĄŔ0#†MáG"`.żŠůÓfĘňć$îŰ%jŕÍ2ŔţĎ˙9—čk˙ ?]˜ÇۆvŹFŢđ˛lʍ>H3eŽJM[őp˛˝Yź°."Ç|>#DCՅňé<Ďt$˝čI"ÎżŃcÚĘt(ßn~ˇy8Yf$đdM pnÝćÓ˛Öu¤ŽZŁ*E’›çńŹóţyą[ŰĆ­(÷Y?ގ$QćúŞ­cţ bŕŢ"ęóýůČЗz’‰í5LM éSCqźŽäp>5đ_żŤ7›(;H„ŇITX^iÜ^çú>Ś ëŽ5ŢkҨCĘ Č.ľmęźőlőúGÝtnđ'†\QŚCL (s6ú ^ž1TrägŤÖÍŐľŐ^(.ë=\;Ě_o,‘0éźô\€˘EZ¤EZ¤EZ¤S:xđ@:tčĘüďHHŒëaźxÁޏ‹'|ná֋y­ˇ-'á:[DgĂSƒ\śőöˇż˝Ý˙Ç|/FlŢŠ ’eX^ĊŔ) +÷Äć=üŰś˜o,+zŹOƒOĘěbmŮéˈ?^Ö/ŰźŇeC°ŕv=ĘÇŚĹčBAŠtď cođĂgü ¤ >Ţ÷ś>6ů¸ŤÜÜć€v&}ćŠĎĽŻű‹tbýXş%ݜîÜőštčúŤŇü| 4ž9—|´egU đ•P€Ô–Ö;=q(ञ” €nŹČ첿ůd>ю‚& ĺ' D H´YO ´‹ƒ$7Ęůl¤otC@šu§ĎóČRŕЉ7ˇi@4˛d°ƒ‰…g•š7ęoúI–Mb)I|ŕLž”-Yƒ¤eRi’ž-ŒÉw|†W~>|8ťívĐŇ”#šÄ˛)SoL(†!!ŃůӏŽČC`ůń,ĺ"?ÚI=ˇéI ěüślôŔ>Äw˛uRľŠ—$őC0×I—÷ša#Č?†I0¤2ńŔç$YFRşú‰O|"×€@BŰ)Cz˘ˇ ňŇE˝ôŹAxHÄž‚0D"€lź=”’'Ž) NtĐʅ(C}YxôžB>†Qn,J@— A{ Âß÷(W7IťšŰ0źGېKÔuú*ÇÔmH=ÔOÝ@.č} ËŢTâsĂĄ8)ƒúđĎy†üiurŽqüňăVočQߨ—–݇ÚJß°A@Ţđ†7äwŠ‹ÄçHň‡°Á{´âĺY6ď?q Wçky֟]yŕ`şęškëňëyږ镇_žžä征ä]éřŃ'Ňc_řt:˙ÍűŇ'ŸLՓ÷§SŸ˙PzřóŸJW^{S:řŠŰŇڕW§ńރiZˇ˙é#OgcŘu×_“öî۟j'OŠigÚ~w>Uěl7ő&ĹĐBŮ8؄üaLÓŽčŇÓšď%şŞ+UôŹ´űxŤg|Î;č#:âsŹS6ĺ2Ś)0X,Âošĺ–źd¸ż|śśÄ=Ű0INŕ7íz“÷šg+‡4źĐ÷+^ôeog¸ű璆űŠ‹ľ‡ý¸ ¸ žů/—tŮ,ŞH(LGˆt`•†oDVşˇ‡Ůŕ2đčdłOš÷$ŃFtÓůJ˘ńV‘ťž+œ‘_,[ă,?ĘM}EޛٝęÂh˛H‹´H‹ôbOŘýw<˙:'‚čąÉu1ʺم€œĎ§= ˇUřFSď@XSö§KňŒĎ[҂{8>+ůz7ćőPę–€­ŒâąRbD);ľ@źe”żŤPç6wĘ8ył^Ó|Ęß[ůyĎcÜţ=wŽ„qԖlŇýôC$H6™LJxN–Ç‹ŽL=!”:*ŮśĚGREÚĄ-ŠĚgá†oŒĂĹH´WOôđ0ź‰oŃětŰ\`ŞëÁůŇgŘűmnnľˇě——ő”QÂÔH`čt#ĘŠjuŻŤ[j‰(ńYë×Ěçź0ľ ‹z…ÜRĄěm3aŔ§”KÝ.Č=in@§LmÇĎ×z“ 3­zóT!7\x;:Ę9Š^”Űé8<_Ÿ!Nä6Čo6Ťz„Ú,:9ڤ7˝Ďt!*&9żŽ\0ÍcÔŰę<Ż7‹8.!~H‰ ´őqń|%šI]ľŻřĚP8;łźőťĚÂöEĚÓzŁÚ ĐIúwľZM1Ź€vm+ś›p!KăqëŃ!ިóBl; >’rËňÜ °?šw†ŕĽƒ<Ÿe˜Čý`‡ţŽ=¸~/ĽËŚ%‘9€…R Vňˇ@ŽîůÍł€`zEŔpă=nH?đŘ7Ó˝§ţ<=Z=žŽí9–n7dşě8ç߲y‡~˘]$tüů[˛†„2ÚĚ:@Ů´ĹC|‰c6moźŇGŒ!úüž{îiĂĺđ›¤'tK5äkŒŽčM…d|]ôňŞŤŻIËľAfZŁ~ť6´./A@[J[Űu?œ>—`7ÜtC&M,ań˝áp:˝y&|ŕţtîąÓć×?—N>ú@šÜ˙çh9˙č}ééűŻOkˇÜ•R˙žƒ×¤jy->WëŐŮsőG+mx Ö]#Şşîه {’y˘‡ Ç=Ÿ0c˝ŐţÖčÉżőv‚ŹŃqo†9öÉ™Dněřœźž~äKi‘i‘i‘^éR Ý ƒx9ťIř&۝1Ââ)éÍÁ!Ł‘ `éđ<á^˝¸*ďß>.ŕGG^(ßGrAjĘóŚů8~(xń]ePNR!)žş2ć 9`–:OŢf.mĐ.í§Î3BŐľ;âIiáA™Ęžú\ťOŃ{EúťŰí’":0x€ľYë ŞR¸‘IČrŔđ.ä‚íęƒÍč¨ëVĎqńŚv<×÷ŔŇѨmG<AîŘßńćžÉďńČŃéá<“Mvď^ɲ,!ă6›snGL(gPĂ/túpŹ'ĺ xč#?swę}lgŽg&=LłâŽŔZ6ň!Ë ¤w$Lšôoýç÷Ră~ U­ŢoOg=9ĹpzxąŢą_"ůЌÍQŇË ăŽčt* űöVŁ+íšŘ1Ž>ěÚQŸÔ{Ë(rš÷nspւňĹťKÔ÷Y Č ‘„ÔÉwŢ# Hür°żb_ÄPGž†€Žďř÷ˆçĎ)’ÎŸë<čTiżj=~¤ŇŐó–\Ô÷b˘ %’D"°>΀¸ő“ŕ"š­‘#ŕnC˜Í Á"z?€XA_ŻŻm4JRˆ–3Šfɰ}иčMԇ [G˙ÎşÄܓ˛Œv|çńX2Éy{4tóĽú"‹Î jčé!ömŹSߋDŸLĺ˙mš6žZ&wŚ<ŕáaZćažW A-5ޟó3Í<#1Žń3Ž ŃŞęƒe>žĐvێA¨šnœĽVŢůĽKH¨2缟ć”P3Ť­—MçÁŢ|ďX—šdÉżÔ1{’JeÝa>.$—&H|VČ}Y†ŮŃLG’€X’$a4eä°9Uu!Ěţ‰)ţ=$ ¨Äšh‚ĹödelxW/žĄ—†OrěGTjć‰č9E"Ń"-Ň"-Ň"-ŇĺšŔ×zč[É3LLîˇXCĹQÁşř˛ĹĽŚ¸wë.ot{™č)\l \Œ5ů‹_übĎ~÷Ă=ĹĽÖEŹ@,YœďůLžoŔ˜hŘe şĎ•˛Sň „÷Aϡg‘żĘtŮ,˝I·Nntşę5Ŕ›ď†ä0äŢ"˜IĘ7żĎ=•îŸüezp׃éŕ֕éć=ŻL/M7Ő‘q:ňÄŃtöäš´‘Ý rSăL žHgkńękk ěŔĄ&.âźШƒź Č2ąÎ† -ń 0ÚŹ÷ň‘X8H[xŸÍ>m5,Äמöľěú_pOxŔVÉ)"Ah˝IđC>äĎůň>’şz``ŔöÄ0ŠŢčçGP\BŒ$†čEƒvH’Ń[ÉÇ?ţńüÝ÷}ß÷ĽWżúŐšƊĎab xŸmn°ÓçŃ]żŢ˜4îi^Ş5h( äI=!Hp1v*ő€W€¸ühŘ@†z0eé9Aľży>’čg˝kD/čšFI ČÜP9đ U`= ű\Ďt̟żßôŚ7e3LmţĘWž’ŰM}y–Ď źţőŻOŻ}íkó{ąlʤ~4hđůňŹ>¨Śí8čGň Ę…1(Œ ăHŮçžG~E$QoĘVĎőšb]iu":BđŢETҐáe$ŃÉ-,dęŸ‘'mŁ,ĘĽœhŘÔ8@[ž}Îw6,}Ąß×ü&éRžŁe9NcŘóvźh¨’l"‰ŒgéK o×^{]şbßĹ*Ąt˜Ď×}˛UÎmĽ“'ŽÔ?§ŇźŽŰŽ]őwç˛g‹1?ľą{×ƞ´ń}wŚÓ7ź4=°ďÚ4>y"흞H˧ŽĽł§Ď¤ăŸţŁ”žöçiźş;Ýł?}ůéäĘž\ˇ<ÇÔăR}ÇM¸'kČ^/´ŐyC’ m§=z ‰Ąe5Ÿ!+I5ę cź§rBo5œ8Gđœ7ąü>ƛ6żçcCłH‹´H‹´H/LŠ ŮĹŇđ{4RtŸţÔAeĎW*ç‚ď<ÔČ3% Ţđ”œHę ýxăĺgi:̚çş[ąeßă‚ÎŰ2MĘż;p°ÜÜ/ Mvź˝2 €s ŔšŢćm™C$-Ä÷"ůB@đ¨”ŃżZŔŤâŔ:ƒÍ¤mƒ{Ërć<—Ÿ[YYmöÂĺ‡4u@S,Çó[xC;Ć " Üi4*aEF)AJxĹŞč‹ÜKßEŇv yĐ7huýÉ6ƒą „şÔďƒhŁ ă64íś†@ŽÜŇ.ˇś×z:čYBÂL$ŇDđn& †7ÖąÍ?ômŰGČayŇČSbG•AĹůŹ!PÚOťp#ń6zœ‡&Öš*7čGŠóFÉE§;<‚~ć]@Ôžw2–÷BKŢóż0iő˘s™_…ů˛ô—˛.íMɐ­§‘Qö†Ą—š2ż–‹%ŒŸ80?­Ž”Ë4ن`3nćĎ<îFŠ'§˘×…Túť!u5輻Ö)ęD‘gjçUjËůrž‚×–Ě•¨.zČ^= ˝žžÚÎ5^੪~¨—á:îÚëő@}*^iŞěĺ!ΐ'ʘn<ĽŞ•U3ÄSá 0>ç˝pbYWř´še‚K•úd•!‘`râb$ƒ8‡zQŹ%14dˆLœŠuĎóŤvMěn^j"¤‘:–ĺ”˝d8ĎLB;ş9'ˇĄg I'ˇŁńŕԑ1‚E§‰ŁÔ´Ňź„„ríśÝѓLě3ç¤v,§>8Çž)ÎUńĆ琜ËÎyÚ6ľLˇk0geÚÚ$ĆY†óI>íüą4YŘ i‘i‘é˛MÝŢŠęíĄYWŮˆÍ‰ĆíRÓĹöńüýr—PÁw°ő{É2zbŒűúo'ąŸ—$×zmG†ľ—Ó´œH*ýNËaĎ։ é/ç^Né˛!X ä&PpdëźAçĐTwőÎ4> Šb–V×6ҕfe:zôD:{ć|ýĚZZŤäŮÍséŤ'żšžtćséd:›nŰxuşăĘ;k€öŞ´~U V7Ŕ  âSO?U<Ęá‚ŰŇWÖ@óĄŤĽĺĽÎ˃.ű#€†âę–^÷đzru…’óƒĺÓŁyx›ZŕÎp!€Ít lŔR>@#Ďć€÷ §¸8˙ŠWź"ËĚ[Ů|Îű„‚í‚Ńü8iPOĺBƒ$+Á„|iŸSg˝sč9„DÝ`™Q=xß[äźGšČčóŸ˙|ţî­o}kvÍř)Š€˛ř›‰đœ$Ą“ř^ŕž|xЙrőžŕ„Íĺ{čćsŢá9äž“ąCĆ}„ ňt˘ŐKeč!üČ‚u§O é!x.i€`CËP^$‹P/='§áqx˝Ľlú;÷ő A^† ńŃ0#™˘ ?äC~ęí&՟üɟäwi#íás ŢQ^ŒQĂ~(;cW)w <6ĐĆ ÝĘJ*Ňż.šH~=‘x0-ĆëIÖ9ž'Q˛âG/$ȑ…z {e(‘Ă1*pźhGçzśŒO˝ÉôJÂ3źG›Ł‡>'OC°Ş?7őČĄç ŰH”‡$ú Ůś™ň,eóž1Ai§ŸKŘ0ŒN$P?Ć/Ÿó“ Ÿ€%ôF=†Ÿx*M6öŚ—~y]ŸÚЍ‘ňÜŮ´ýԛÓ釾•Ž?UÝŻ1{đkiźą?-ďړ6o|y:uËkÓňM/Ëą~—š5ˇZ/ćľ!‹yţäązNZ[Oűö3§Î¤óužxŇXY^KŤťwĽĺ4yęéBžšîşkÓŢZöË9>ô4ÇxĹrú ណfů˛Ô{EĐUdƒ|őZäř׍ăP˝Ŕi‘i‘é{;=Űa4Ţ –¨=Ä=×ÄZ|ć {Žçî~˛_×x[!ĺuü…Lzż‹ M‡Hx0LÉď~#˜Q€,o‘{$‡*ߖö™íđš^#&´‘p1wS/lĆ,$"PTŸXVUw3˜Đ) ÎćÜRŠ şáŹ …čÁžd ŐîY§í-boZKÖ,„ßóŮŤ" ]!˜JéJˆˇłK;ĘmäѨ #Đn_ôohĎ[›úv \°e?—CY´7~Ç-0oývýě'=ňAź­ŃËţK!üEô]ş–çÇm߼ŻíâФžŮƒ &S.ačĂ!ů!Šä#ŕĎME?şŰБŔű6|Ból• áŔ{jh›dœíKŁĆSCC¤Íę:,2ĄXBÉLÍĖ\ÇĆĽýˆ›ôÓ|[~6ďôphŒ˜č&ˇ#Дq‡ŒřaÜJź‘ Žn"Sd+ÁFyŰż‡ńßÝxІĽž\ůUtpš"YŠ~/dŠĽÁ4] {ćey;yVń[N}6ögôHߏ{>ˆ`8w䐎íŮKa^kĐ âúĆz’<”3ő.1WŰr•mżďĆ˝śt Î3Eüąž†ŘČ˙^^-sIđd’çľ,ďŞ%d“ëÔź#ĺ´˛KŰy\’ϸ߇2Vs§y Š“ét“qŸěА‡ IhÚÎ <#Ŕľçôéi˝­ˇvĄ¨ ę܅7G˝qmŢqî’ŕ7kˆlÔuŒäUĽ†Y Á’F­ű+żŸInľnWŁŚWűsfk ף¤şq§Ăš<ËrÔů>č€˙í,//h#)çŮŐ<Îź\R>Ż2íěŮrAGď¤Ę×縠F_ogýŮž@ĆyÂDŔrهńS5óíŰęČIĎăԑ&ÝCżńÄdHĽ& ‰ŽÁ¸ßđsçôâ!Ľ Á2ę‡Q‰$‰ĄŽÉĂ=ޔu˛ťxmž;]ŔŽÓLŢ)|łEZ¤EZ¤EZ¤mŠ„áx9xđ@ţ&ÖGź‹łFJzđ÷sM‘`×p1&<˛ƒ=ßzë­ů 0b;Ă=bÜç<—D›¸Ëž€KńŕŰßÉ%œ‹%Ú~Á˛Äџď†%ÁźĐ=Ďĺ„s\6 PĎ‚ä€Vz°`ƒ}ęÄŠ”}*MëgŻŽÁÁýőŕ\™ŠÎňć#ǞNGžőD:1;•žľôpzlףiĎÖzzŰÁˇ¤[Ż|uÚżqE6nąq][_M[kŰéÔé<~ŹFŔšŠÔĘqşŮäëÛ䙵€f†ş0´„ 8 ą7AP>TňqCíá%¤Í†Đp3ŽŇňŒž<@P.y3áźüĺ/σFw9,>öąĺě”Ĺ3äĹű3˜œ<đ`'rźŚüx€Đ v2Ą}”C=ÉÂmŁŽŒä(+éä‘Gɓƒ›ç=ŒëŀßČňĂţp΃:ášB@^Ď $ţ Đ͏Ţ5É ˘§ t…şr.ĆP'’BdćÓNŢóPFţ<;tľIâyä‰ő0{ čŻĂ‡çś{[ĹĐ-‚˛xƒ0l ő%ßÔŞ`g ’A,4´ĂúŁsö'˛§l>ӛ‹ž źiŁĚ(۰-$ő1ŢÖŃËýJ>o~ó›3ů= !XĐ&t*$ô“vPžL}u48“ŸĄĎ4–w:‚źG{őěĄN#ú‰:xëBď$PoężkÝ2éĂĂ´r‹7I4$Čn¤NäÉçzń ţ豞)ySH qܖŰAłü $ʑŒ%xoŮęź=~ôp!)Š~ˇĎŐ÷~ôŁůÝřČ‹Ş„-CÍč%…ąŽ1‘ń!éʲőč 3Ń04™čSż˘ń¸Ă{ÖŰy›QöťóŸŢ% ůŮvćν™Ušœmëť÷ĽůĄş>/˝=-?ńXzěʛŇěô‘´Z÷ŐŮ'J“GîO[_ţÓtnĎţ4ší iőĆWŚ=űö§sľńčń#ÇÓ¤.§ÝľAm†IoťîóÍítŚÖőŁGŽĽéÓG˛‘çüÖštőÁŤk™^‘C€ĄLi×úŽl|y¤ÖmÇrg-*ˇ˘Ö[ˇČę:Â`ŽQß$ç腅ź2ĄlöüÇ?[¤EZ¤EZ¤ď^°#á’ůž5;’ Ÿk:ž„ţФ‚gJ?ĐF‚Ÿő&ńÂĽě‘Ô̞IkŐĆ]ďÂT`˘¸Ş  ¤É¤Ü`.{Ԟǒ^'"8SÖďBĆ(.ę•E÷}Ԇbčť{/¤ ĺj9ă^9–/xčĺňťť‰Sň‡ó•7őg9ÉźęB‹Ä˝w4źv‘Š,ç9 Br—[@ˇš‘&\0ë퍽)É Ę=á"H x*芼$,XGeׂÁŠ4Ç[I¨ŒŢYô˘  âmŢxƒ¸“wŔëiÂ~•0$=xćv_úôŠě͢xD\éß^Đ›řąCp:ŢĆWžÝý˘Ű}ŔŻxiIÍőĽÉRhW‘%ZTÓyĐ×qS˙öôl4k˙V7 ëтŽŮFńŒ-EťEĂv8>†„"ÇK4Ü漚[yž8O0_měZo‰ÜůŞ™$?ĹńdGŽăKc2arćU§łůK}ć7D Ń¸ŃŠY 2›OłžčMaŠń~áËqš´Tćň,‡ŞĂżýžÜ:ěú[ŮĚ7 íqHď)$ZHřČrČʘRŢĘR“ăüÔŠâ ýÔƒŁşC°G<˙ó\”ŻiŠ!0tăŤ#ÓU{ř>n<çTÂ–ËRFaVuŔ˝„şFRy1f‹WÂ˙Ě{ú–˝gŒĆ˝™Qžzw”TĄçJ=Sv^{$̒ŢmHzÄE]ÇľCĺKŁâiÚÎq}â̸!–M*×ů­Ź×YGŰńĺZWĺ‹e|T%H3ç•.˜eq•°!UĎew rŠ^Rv{qΆ¸–˙C†v¨ŘŚH"Œ:םŘCÝÄF2mć]~$¤j‹@Đ|6ŰˇEZ¤EZ¤EZ¤]ŠgRˇ>. HŽŕLîń”ç3ւ‹Š`&„ť÷űó]k=eŃ&°[đŠçâ‰ăR{ʛÓ뇞ӟď„üôŽO9/źméŻ&]6 €<8h 0'˜G‡n4×@Ţî=ť[ö<ö™ľj-ŸŸK_>ţĽôľĽżHgǛéړWĽ—mž<]ˇ˙Ú´>Ů•ă›˘Ö mn,“ŔŁ&P=R\ ž(ŞžC QR„^0ŠR_ÝŐËד@dăŰFÚŚw oŽSŻÜÖú3ŒľÔƒźŠ Ŕ˝îüHL ¨ž `dځśč˝Á[ę–ĎŕAţČă0őB&˜p´i ů!+ŰÂ3€ßÜKňsňQ^üŚÜO}ęSšďxÇ;ňłF !¤\ő:B>|GÝiƒívD?‘+z(űQCŤňCß5>钕E–wLq^$oBüxűƒş#ű2żíOëk%ôÇźţîĚšíT]{SşnďéŔîâĘůôˇHGüz:÷Ŕ—ÓäŢŸÎÖFńSőçOźěuizÝËŇ-7ݐöŹo¤Ér­ăi)ßžÚXŸŐeďJ'6v§‡żőÍ´Y ÇľqńÄÉă9ÔŽ]iĎž˝ŮŔ8Áx]˙lŚéÄŠ“-…úéÝGď3Ę]Õë–ŚHüQWţËů/ů÷­7L‹´H‹´H/tŇCëĘĽ&èšş’!Ę$,?×ôl‡Ó!0ÉúÉ!ďŰŠŻ$ĐKqńŮňw÷œÄŃ2UÁà ű÷Ú$@üţúž^GŮ{@ž0ÝăşŃ}ťDAHݟ—äŢ­? •„‘ňmâň™ž #–Q@¤”ĂtˇŇűˇńu…žËŕvň¨„ň`2ěA Z—óżK PLŠmÖľş^Ńľĺĺčá!ő䜁ĄHp`Œ $uá :°ššK˝[Íh[Č‚ŐĘÖł¨ĎYwĺn;ź=m2Œ‡ňë.łdČĎ­ąĺ 0kt ęĚ&6ŰË`ŸŞ×~—}^ŸX_@2ČŮŰ-¸S<ĎĆöy•Űř%”@SĎ4jjÇI– ş]ĆGT­ČŞĘaÁK¨†b˜ô_iÖÉwHÎŃkd&;ϡzäëŽ\ßćá9W7ˇ5Ľ–˛Ý…9ĺ̙ӵ^ž­euž‘ĺréÓ¨Ë\E9+ÇÎóˆnxÇí_ZŞÂ%­xíg˘LîôśOţQo;Ŕ}œÇĎ얡î+‹áüëZ‰ʲj˝tůKö‡üĂ:ěe”Hěą ~6źĎȞSô‚'mÖŠxŞhÂđT f”Rô0”e•bO]mźÎćŰÁÓKŐčtę… Ú !;,c¸Fľ$—ě٧™§S!ÍŞy,5š÷I4Q—­ŤśCĹęéՐ˝ęťsAŸÜ3î̓Ę<˲™ť"yEnë7JŮîxԑ9Şqé/Č*ÓYĘĎ3§–ůlŢôŃrť>úY&•ĚG= HVńň2@k…ś Š×¨\6^§š5pk{Ť­KJ’ÔÔÔ×ýQś„PFC]Ća]›´ă§„˝J=›Źä+ç#Iq}ű-ű˝ŘCËŔĽnNzľŔc͸Ď^ŢńĄIcD=[¤EZ¤EZ¤Ez1ڈ‡Üc{ÓŠvÎž, |Ă ÂEĹŻLC|q˜\żI1|!Iťü˙ńçrŔśô /~HŠ—"~:ÜÄ5ťÝ/6ç ęŽ-›8ŸłćťO5Ĺ}ł2‹{ĺHn{b÷Žüö2(ő€œÂߒĘűä×qď\bî;źN˘<˙ŸŁ]ŕmî;ń_BÇ_UşÔ–Œ.ńťŃ%ü]äoĆáˇ?^k˜ ~ř_ţăZ>Ő7ć¤ÖkÄc=žYÍ"ö_ą?]wýiw Œ•˰}ŤôĺÇžœî}řĎÓýťHWĚöĽ;&ˇ§Ă§ůć8ŻŹ0ÉWń€pŕPVĐ#O?™śk mďĹ#ƒĆÇh ˘l@PĘˆ‰Ńz8ŕ¨ë_ţĺ_fEă Ç3´Ů@6Ć3(“Ű˙*ĽmgP Ŕ°ž˘kJ˜V R˘ĺSW”°˜÷!B~Ă3ĺÜyçŮk‹öˆ3فH/íŚM2úɓŸĄ‘–|˜˜(›ß<#i€÷™Dh7Ď~ä#I_űÚײÁő'~â'r{,żÜ.*„䌹“Œ‘<ś›„ź!FĐ~äČłČW†8ĺP>Ć L<9ĽuůŘÜň _¨{œ8iňu–ÁßşžČ™ś“'yH"0LňĎ:W×˰-ČńŻ7ÚădŇ?<ť6\óŢĐ`ڇäćí#˝/ sŮz$&g>7t2řҗž”ö7źá Yw† 5É@ȓžGţ´Ď:#Ż×žöľ­Ąƒ:O‹ń†lÔu s˘Aů:;l;ĺCŕGŁ‹a|$ŠxsĹP6Cnčj#źG˙~âŸČóř-ˇÜ’–çGŇž=M׊çŒÄˇˇD5ĹőEƒ[4J/Ňó“↲Ű(wťĚć1v_ů˝el]氓gŇ+nűÁ‹Ü׊‡“óéݏ9=×Ä8bžgźë=üŔ>~îç~.ő_ýŐ_͟ $Až|ŐŤ^ՂËď{ßűň|ŕ×nĚÓč!D ֚Wžň•˝růœňî¸ăŽô&֚÷ďţ]úť÷ďŚďՄœYożýöŢüë^ăŮŰĚżó;ż“~ćg~&ýUĽüăšĎž˙űż˙’ßa=`Ý7ë5ků÷"قu…5ž@— cĆڇ>ÇÄžěCúPzăߘŰôlÉ}ÔsIŽÉbů7ăˆňžÉpa>ŠŢSÍcܛ¸ v-ÚŠü\v€sůžĎ$Š>×těŘńztŹ˙âMŕ˜׿őűOżúţľu’ôkhş˛‡M-€j›őś°ÔÄ—0\ď"ą"ĘĎ łYŒ•ž"EęCÄźQQŁüHŐłŇËŤ#môĂePŸÚ  ĎT-0^šîFż€yDÂ})ť€S1DľŤ †(ŔW=  ]쓇7§ăÂuĚňĺ–}G:ÁK†ŢîH ťÜĘŞ“GöސŤ”ÇŰţ܊I€kxóŢ:YŠuKÖ`÷ă9†c¤ź?M†g’>F °‰<źI,1&–ŃőwGtéÚf‹yÖÝŞęťÁmAďi!Y˘‡ţÉ}<ęnĐŤW-Áad蕒˛ňć~ěő5ˏiÔs˜évëINyѧşuUţ-ŮcŢy‰ş=,DF@żěk0đkÎ1ťŰškH´™ ź¸E"LŃ˝í>‡š†ń=4’ĐJŻŽxž§q,xÁÂą/‰Č:ůnŮŁ^ůÝĚíęÔ 4|FÝďyVŠŞŽt“ Ý^€9ŸOęú°o‹a.˛ěÓ¤W_Ëp|;:vôfڞ)šđGQUĺźyám|óąmŽwlG ąlŠ7†ůmż űŁǃNhČĄDć}1ůŒÝčEœ3œŤ:’CGžă\É3%dșÜćÖCcŽWí|qţŠĺÄ1cýˇíˆFěélťęŰš$/gîY?čm1çŠ6˙ćLęY|%–ŰßĂ91ęf$Ä6™×ĐűƒmDžŰ[›Ů&ť{ďžÖËQ74e¨ëÜ6,7uN9źŠzG_Ł˙Řpç-1˛ęÍoYŻR I’0&’l_ܛDYĹőc¸ˇ°ýCŻ4$Q†qđwôf‘/Â4Ţ_RÇä|ÇgÇsç ŃB۝ëúîŐôÓ?ú˛tčŔžěm2kL!ŽNzö‚•ß {Á •ž[ö‚EZ¤EZ¤Ë!Ĺóë°Ŕšsgóş.9ÚçvęŸË:÷&÷‰ŕ-\ Ćn­ÓłďđBřsMń KŇŢ{ą6=í3‰!z‰!† ŰIĎľŒřo Ş|&Ćfr×]w˝)apIédó{6řКßóđS…ßßt‘żŸé÷đß41=KşlýpúO郊Ú=O/[yYú‘ýďLW¨›¸ŤĆŮý]ö°đČŁé)ÂBpËay5ÝxĄöˇĆ†x˜Ł|ŔcCčIo†GTcĂ+›‡wP%8’—7Ň1œb wƒ!›AGŠƒÁCeٰ˝ŢŞ7ˇÎ9\Ń6€>Eé1< ÄâŮâ _řBžíN[0ţňăůN‡ô˛zŰ`B44?ÔŐś3čwyĂ>˛ddRăŮ׿ţő$B>ńPCy1”?ČÁ!hŠżacxŽ|Šĺ!Od"SĚĐ%ž#S’ŒD•xó čäď!“:S=~ŮÓ>äŒÜeIzX ž§ŽźO^źOů€çsý|nčt†ĎůÍťčů{EÂrÁO_"{ęBš|NŮč}Ć;čĺó|Áů7˛ă9tĺŢ{ďÍŽŒđVqœú ĚŰ_zý@ďxî­o}kŽD@š?ýÓ?ÍŔ :í’Ŕż%WŘçĐGŚ”ËXŠaI‡žPĐĘCȋąC;Ő7ë Y€ďuô` §ÚaH~3îŠ3sƒd>ˇlęG›yŽvQ]sňc_ŠŤ”óŰżýŰš=?ýÓ?űÍ0 äÁœźxúčý†ńi^źcٟ˟ŚÎóCűő2aŇ ƒnŃ^äÎxÔóóßQ7ęLi Ż!€Č§ŽŠ‡Ÿ‡ůVz¤–{â–Îh9}ühZ-Ľ}{÷gŻŁqm$_¤ľ•]éŠ^‘NmŇ闽6]šwW:_"Gż˙ŚÉç˙8űňgŇĂżó¤ô˛W§ľŰޚήn¤Ó›gӍ/yY:pe­ó6Ö×Ҟ˝kľ‘çę´un3=UëĹSO>‘ŚŮ¤‘w:0ĆwlOt í´ÇţFö$äî܈ţ3v~đ0‘Ď~ę÷Ó"-ҡ›<˜ 7×ÚIčŢťßýî<ţ˜óđBĉ‚9…gň'2Ď[č.ßóÝBň  ‘Őą@ҨdOŁáŰń4dFűŢđůhŒěƒ+“ ŒÍí-ĚyßÝ˙0?ëőLu٘˜ ĂćŔ÷vĘO#öđűĄax'9šŚ Š.iüa­bgŠ˛Ú x5Ą;„™"1—łWEgœˇŁ\-k'Awťż+ëbý˛SżÇgv’‰ő†}뺎~FP†Ö˝÷źç=;ćűËôíŁ%{kŇ-ůťÇ~ś0˙ôÓGÓý÷ß×ZwŞß0]JŢz4űn¤Ą.şĐC]ً2~G-°¤g„ííž ýŇţIŇ5~$H˜ˆŕ‘ĺŇC$Łx~ď@ÎrĆ*Ďv$ źMPno}wűą]Ľ‘˝€(ŁTć/`ÝéÝRß5vžv]ŞŸÁSëVoł›ó Ŕż:­LO,Ž/ċ+y,fĐťĘúT<ÄTa]œeY.M:°nX5.V 0]<ô؎ŽhäíĆĄ˛Šä ó>ž4˘ÝĹq܂ßUqţűOýńFžä8GŮöŁýŠ,´•ąą˙ŒĄ2"‘@ҕDĽxŇůOŮ;Śşśu^J˛Ź&EśŃKˆůĺ‹S“~č$ˈsÜNŕ>:A”Ż8c}”żň˝06ęý;Ó>&šß÷­“óŽs śŘrěXă)sOŘWzăśäB€ń÷RCd›ý˘üI&é ŤÔöšm¤nq˙÷ćś9ލz' ŕߑl$!‚ďŁÝŐľ0î•ăÜÇłz8œK†„¨GynŠćíŽw*t/ϙłľ ΋´H‹´H‹´H/Ś4´š†ŰŇz]ŚÁžÍ ÁžgÝĂş6_jŠ{CËă7Xäg?űٌ‚YńYÄWâY7Žńq×ô˜żv ÷ŕ$lTÎ͇öDŞ;Ůű†í!E­g÷j`HŕxîOăţŮ2ÝĎ Ű´Óďč…Ă:đoĐ.=ٚ×ĺ*ä˛!X0ŔŒŐ‹Á ĽaŔĺpáăŞ4K'jĹ}řĄ‡ÓŸ?đ™ôčÖéW=ölݧלť+˝áÖ××ŔÜ>î¤âzf–ŹŁÉ8ťů[溲\cyKéČŃ#ľ1ŕxŻ  p 8rœó „ą”şĄČt•Żr˘IŽ ůšnř˝-îDÂĄ6bŒŕy6ڀâ†#ć0HŮlžŐ%5xHâV> _4–Ąř-܆§<ŢLg0Âŕ˘Ţ2§94Q>yrĐü ,ËŚÝšńśrÚ¨FšŢ”A˝šaH›Ţň–ˇävaź§‘K4–IŠ î´‡ď‘™7ýéŔmdĘó|ÎsL˜ńV˙ć3ŒËčĎiěĄüFŚmHôm§¨7ßKđĐxĐĽ˙Śnô‘ámœÄ pđžz˘'ĺÇwĘ<ŠřŮĆŁ’xĎE™pŁMČRb‰‹ƒL9ÚAŰŠ§“ť7kę"ő<úä'?™^óš×¤{îš'×KšsŤ—żŃŢ1<äƧzwë­ˇć[Ӕ QR ďęNčpC4 žBí[ţM{(G÷žčŤF#t™ Ţ0ä%!ˆßę ˛ş˙ţű[]â{É;ĹŢ’ůŒž'Oô…ňŠżó}‚|‘5:ďř€,B}”!2ĺ3‰7€ëŽw Ań ďÁݰÔYňšc‚ĎÓVĆíů˙ń?fy@Ž@ţB6č zřđůßč+ícďKŘŤdĎBÁU㷛\ŁăMkäG˛6JލăËĂńćf EÇ@0¨Äޟ¤K!P ĘeŢ[ť_č¤a!äIŽyôôôéSÍžŻsJ`ěČ1]Œř”$@đďîęňňZűďΡŮ#%”üʍϮŒâ Ł3˜x3˝„w˜Ďˇs;ŕvÖFŁi&ÌFp$N ‰D ŤJzęˆa- Č?)ˆb˜–'™€ŃŁä;rŃĆĆŽ 낿xYněîśuՀ˝+­gť(—öśĺlŒ+Š•™@Ž(ŤĘüóś´WŇ)‘Ş#1"˜"čżkɁtUnć,ľ^NLĂ}ő°ß%X—:—gđžśť•§çˆ˘ý[ÎĽœÍPŚA%şł]^ZnÄl‡š?–VzçäÔčĚ´qŻ?oni÷É<ă @JhĘ8Ůnˆ4yŢŠűe4ő@ĺDWďŒÄč>—ĎCů[ wę•$ĽňY9{ň[işż'úĚď]+ôŇčYĚ>éBőtdŒňŢrk -ÄŁięÂtşłźźšINŒ;úŞÎŁĘD˜ˆGBŃĐřAŢHčćמ!×ä<čs1ĎvNŻşą ˛Ľ1Šő:áĹÝđňŮĘrŐ ĄąVožőă ţŹ7˘^cˇvońtłţr9ôG×e¨Zăw™›ć™ˆą<^ju&ž=řcDBB´Ąĺq•:’ĸ™÷ňú0žç0ComŸŒFáćřź‹í?ö†e-’<pžgϐ珪ôEYk–S$ďĐú †+Éóh ÄŇ&œUŃçQ[Ÿń¤Č­„*ġÎ{Í$÷QnC-Ňylđ†˘}jčᨗQ—w"IlZÂÁ|ŢÓר׎ƒŮcĺnBާó[%¤ňćfń [lZĹ{”$3Č7e~žśa‹Ň`\Tó’ŠTm9ˤxHĺš črĘĎE&Žee.œőĆľ:•×qúŚę‡Bqîľ}1„ű–HԈ„ž!i9r†É”űPšK\‘ˆ:Nłn1^¤EZ¤EZ¤Ez&÷žă\; ´VŰžÉëś8l—bóxމrÁÁˇŔ8~ôG´‡Ő>Ÿ‰˝ś5ʤ,lχi§„lą?‚‰‚Ea }.D”ç’ءyépÄý.×tŮ´Ă,F]6čguS_M̀ŤJ\Âíńvzjő‰ôĽ˝_Íq#ŻYž"Ý~ňŽ´gmw:sş6’ŒĎŚU ”őÁ~ž5O'Ő w Ěq 9D¨‰}ľŞŢřŸŃ~úL녁˛í9°B0¸&e×m ÂLź"ČY=|Fť8ÔIäđƝ@&@,ĎSž7Ř(‚xnâ3Ptň”qM9äĺA›Ď<‘-uźíśŰrž|ŽĄŁ>ĆŒó€/ôyWO1<mb@ŃúGPÁIł¸a<݋ÝKű0ěc\gâ|ď{ߛAęJ;őĘaĚLŰВjB„d ţM´ Á°ČËłŸń,ůѡşl&_ĺÎwȅöňš^#0ň+ nȇg(›ÉSˇBz$ĐŐŹŠ7!ô~!Y„m„4Ŕ{č‚Ŕ9uEćÔՃż¤ÁIź+Ń# Ł dÚÉŻý.ÁĂ÷éôčĎ˙üĎ3ČˆhBćé/ ęmYä阉†@ĺ, ŃdŔť+ü/ă šJŢAż‘ßŮ/čőCŽô¤Ś|ČŻŸ—5o|Fc/őŁ?yšůž™7]ň‡‰|ě5ńc–şŤó‘PĹ8Q')_O3Ě|FŸóžä ‹–.éő.AŰ)›ô•ńJ˝Ť.ĄL’PĐ3’ždČđ‰whˇĂâĐĆęz´ű]ďzWößńŽwäçX8@AL`~„ Aţ$ɐWXăXWŠ#s*ů ďßýÝßÍů@š /Ö dJŸD/&ó„tÂüDy<ËZÁ󏧏 h¤<ˆ.–ä{ąĂŻóűĽ$ íöă†őý2őA§éÇ'Ÿ|*1ŹşöŽ{ŠgJ;WA§ŐŐ弖ˇR^şGÖËý)ýKx¤sçÎgĂ `hęE¨ŕŘlö4ł†ź0nŸ‘D Ŕ[܉R„¤ç¾ׅҏ×łŁÔy§&B/VŢ<ďÜ@ďş„/ˇÉť˝_GÖ ß €ÝqRŔ´Ľü^)Ł´Ą?Fdď<Ď0;n ŠĐ_ö)>Sú~œÝă.$Ľ*^:wöÝ-ßR_˝rX˙R×QăqcťÍkԆ1›ä˛ôd!™Áţ'HĂąŚńÍśDĐ,‚Ů\x9‰`bsýlčî=‚áśĂś{ăß1g=ÔJ*Ŕţź%č  ŠÇ‚čkźŁŕ]Âg%ŔXĎ|~žwv„5:˘Qń^€f[mەŐښ^ "ĹýÓ˘[Šę­Ęžvއ@vf žĎó)Ŕ­!!ŚŮKÄŇŇFs#űLcŰŘč•ëe–čmŁôő(ŞĽx ™ć< ‰g҂ ĹłĚ¨őhőßvŰHŐ#1Hśp<˘Ë„6éú8zĽé“&v"aD]˛’ĚâÍłt­Âţ?{>MˇśÓúĆrşáşëëßŮBľ\oŘ×kƒÄ•ŻĚFkHCó †ě€qš    ęĆ őť@$?$D„Ji€•˘)[㎤ţ6LIÂJN}˜”Ź'ŸGŕ\—ˆşœĂčíFŮÜŔdâĄ\€ŢÇř­ˇ óÔOcRĘŒĆ(O{ ßaě' ŢČ PŕЀ[†™˝]ƒÜ ebôGŚž+i ş)ő–8ĎQƒ\—Ězž ŃWȞçŠ'ß3Ä AŇmdBůŐhŻä”ΰ9jÉÔ‹ç ˜Ôçő”Ŕg´˝Ľ_h „ ĂH 3ČRźaƒüՉĄĄ‹Tn:nśşĽAr,Ůń˙FďdľŃ÷ʑIż¸v<‘ËôĄ EC? CRx;“ę-ŽÇŢĽ\~żxOďň‘pĂöÂÄ{ʆƒÔđ‡ř‡š>ČÁu’çXŻ!E=S"˝ýčőŠy]™3ĎAÔ H#ԋö0HNEžě=đś@?â‰9s'`œ<7s=ë ď37ó,mŁŢĂCˇ_ ф|i7ëýD[ُ ÇgKČo’;ůM]b’MY<ƒŹůaeOÉ:áţÄzK]¨mç‡g$$“hS$Wž›e?ĺxíńTn›ŰëóY †,Ľ‚fœ žŸ˝_€Ó2Ń­ěEăB÷ˇö)Ţ`ž=í‡!ů@0P8ëĄ97yťNňŤ ťÓyĂ(sB!U”>GV]=—˛Q3ßL[RËŇRçJˇł’¨úáÔťx)a'Ďę`ôĐ3”ՐĐă:m{[ŇC*Ą@¸dřŢĆËÄVmݚ7¤ąZĹ 'Őź;šxw<D¸uœůUÍ\Ŕź’˛bKÍźĎ`1|Sj–œB¤€Řž‰`a äš=„jQ6 y #)ŁŘX†^kŕŃ8jűá^ŇsJLŁTB˜( × u^D2 'k’„•xď…ô[/1qMs+˛ď“l1ľ24sŰxŇ[oŚUéw=×čŠB˛ű–čAĂśŰNËRżZťŐxԐ^ĆÉG1ŒE+Ť0bXż,s‰zmhˆ… ľœÇśrÄKU&x2ޙ˙2Ţ†Š7§˛fĹ0]öżĺ˛ŢMšw;O óžžH`pΉk‹c'ŽÍ!jx1'Ę@;¤rĘ:zŁćűkčůĆ:j˙q<ńý˝g×ZZ˜ i‘i‘éŞ$Aş.ťćďţű˛ýŤ[÷/-ĹsJ$öűŰČűŘDz-ęío{^_‡{w˛˙ŽkűN˙–}IO¸Žń¤ážk4ş¸Çŕ‹ľ%ţ`ĂĂ~h¤‰äq|ą2ün§˛†m"y׋ÍńŒ1”ăĺ”.‚ʼnă'˛ëÓ5Đ5ŠAŽ3'ϤÍéůě>&ťŃ[ŽŇŐS鞪6ĎN§Ă/IŻťâőéĆý7Ő[9xŘ{EVŒý€|éX‰“oŻíJŰÓyZ™•Î‰‡ƒ%†Á}€T ŻşúĚy¤Ô2ĆQ*ŒŔ$ŤäËŕ{ Ď”ŠƒIoşF$Qž€/‡žě]Ł! xsBĐÝĺź#P€!žç˝őŽWę@ Ę6âáŃÉ c=ő0¤ 8e’çZ€”żŠŤÄä '<Ŕő  € ÖŃÐŘ„ŃĽŠ„Ůú´Wb 8ú‰Ÿčր Îü=HÇ Ń¤KCÚ$9€ź0đS'&žçsÚCž|†L$b 7ędO¨˛%ž3ʆ‰#OciRŚőÔ%v,Ó§ÔKO#%–uѕb°.d$t–śP’Ţâ¨>ŇÇ,pÁM~´“şSžş§WĆ $!ű~֌cGÂDfҏÄňç]CŸ°đAî NźËMd˝X(7ꯒáC¨:' ů K ?ŒĘ@‘xDŮč/má9˝Yđ.y§$ zŸpŒňIX´ŔłÔ‹>äßԕňÝP¨o”!Đ$KRˆńŇuéLŰé'ÂŹ 3Ü66\ŕ ˛‘ CžzщďĐJ˝Ŕ9˘3’g˘˝Ĺ {äé­IűœňŹŻ$$ڎœ-_’ ß1żĐÖěˇn?ŕŁÔĽ‰}ë-#7,”_Őuš‚\-żÎ(Ć<ŮyĘŕ=tCŐž=ťÓĆž+ŇŽ}˛SÜę–WŚÓO>žN|ëÁ”üJÚ~äĄ4űĆ˝iůüš´ů]éɧ­ë_š–^ňŠ´ź§îƒőÚŔ1f.:Ÿś7ˇÓĆÚFşňęCľq)ŻËÝnČiUĹ-Ăژş˛›Œű!6ǍGÇnţŽ2žHń’˝éÎć”OůYˆłf.‰ŔC<‡Çy+ę†ĺçߜAY7řŻY7GsçKÇDG2jÇRó^$D_ÔŮ8' Bš.łív]ÔÉÖÖR¤śmďČzľY›ňÍlť›S.ë†^râ<îúŘí{údű<ÚW;rM Éľ”†žn"Păw‚"QÎ]–Ÿëše¨ďÝ|7íb¸ŔąÜŹëŘŇ%î{i‘i‘i‘ž“kŕpÍößŘGžé’ŘĹRÜëť/ňÇő{“á… Wۆŕ gÎřďţ9šďý+îG†?ŰŰŰÍç\{ŠŒŰ_´cĎCÍNy“˘­Ďś•Đl›Ů缭¸˙mÚ`ž­Ěx֗$o„Űľ“ü.7Ż—Mköěڝö¸"­Ź­ć}ĺŹ;ůÉڀý•Gž”žyúÁtdĺHZŞ W/?{sşcßíé†}׌•Ć˜Dň–żˇâeŁŁ$ŢZÇĐŤ— $ożEáÝ˝đCB‰ÉGrE4Zx„˛ ó@}të HʁŽwPTę@^’<Sgs… ý…{ydJ=)“vňŠ,@úwĺz™ CUĎôŠzlůƳ巀ýĘť€!.ŒĘŒçßčŠ7–eZZžúŠě%ˇx€§.čŹĺkˆ”°Ąw =O É)ϡx˜ĄM¸śçˇ„ęmŰŻ€ĽÔ͸˝´4Бxžr(ƒś°8óŽž`ČKŔÔyˆgŠ's”äÇď8Ú§ŹĚG5ÉĐ9|&QÇ<ÎąhôęcůŽ7’qp­CŰßľĄâôŮ3ľŃy’˝yËfď5×§Ő˝W¤Ç÷_“ŇMO§ľj;í:őTš?ţpÚ:u4űčRuŐMiißŢú˝töĆ[Ó@Ÿ:ŸkŽť6]qŕ —ťŇ^ôť6bmAށ€rôxúâg?ŸžŞű”‡HçΟËëŘ2c%ÇŁ˝tfî"-ŇĹú/ˆJŠĆsR4ęőư@&çMhAőYƒă^"&ňb~Ó;óŠs ăÂë Ţ[HzőqĎAy˜k M“r†á ¨OöSçÍ3ü{§Cĺó,ufž…¸€×ÉŠzo’ôfčŠaŰâÁƒyľËvÖëbď†đë1ÄęśÔ‘ůšđhxę`/Ä|Mţxôâ{ÂZ0§1ĎŃćböMx÷ŕďH4°¨'eę…JĂCTěk~č?Ę÷ †Lô¸ąSŇŔJH ţđ‡óşŔZ8”ó‰O|˘%9>)S$TZJ2A*MÇ űąÁgBhŠ ӅŽű#x0ú+2ÎGЋ4$2 P{‹Äą$š„V59ĘA_ăLÓ!şĆ›Ÿ%ĺ+ÚÉ0!ž#řWB x^ëB‰D’R$şŒ2yeÖ|_r通ńśśˇzröÜWźŤ,ĺ|őž’ËiPɜרóЂˆŢřćg>ÎĄgôœËŠć= ;Ę+ŽŐĄŃ2Ő<ĎDâA!u˛vMölí9‡ďY—údšN?ÉCRA#áşÎłĆĆ‘hÖŹQ]ȉjnT-Š%ÎAţöß”u݋ Šă°´yÜÓˇ˜×pż×ÎnüŽOő™gşŐš2ô>4źu8zUń Ägžó|nHؐ\!IkÜŘÍfˇšŞÚj‰kEˇŠäŻöy–ŨxK)öŞitŐĘŞ 3wĆďHŇĘL]čĺUů_NŠĂö}j'bŠd•ň÷źgŒvÝÔţÁ>ATĘÚvG@ÝşvsaŃSçǜ÷¤[×FÍ8ÝÚŢlň1TPÓç“&Ä쨿rj ňU֖2ˇ(˙yš÷ú˝ŐĄń¨%‡´:ÎZ;Şzd›6ĎÉdÇyľ)>‚Ńߜ䀴ž‰-›ç7[‚éęęZ ońSu™Ĺv4HT œčŻ>@Łţ“$*Ä5sH¸I Ą%É{.ď1DUßĂQŕđłXFĚ+ŤQȐpçdQ.V-§ńxÔ6ćîi‘i‘i‘^L)’âšXΗx6;NóP ŘE_qKöž{îio×J ‘ů×z‚IÝÍĘçÉ@|.™‚úQ6úĚgŽ7ďhdŁ,tˆúň9㕞—Á ĐĆózD!žÓ=ź2ć{ꢇ‰´ďl;mŕyäŹG ’ô‚ĚôFAI–‘ 㢯>!ň¤mś˝x9¨ZbďčqB/$o¤“ŽŸGŠż.óéS=ž(űxӛ<\•Ł:­á.–ϸsŽäo L=hżF?eB%kHv ß‘1ĺó˝ĺ;~ůú¤úI ŔY2A‡ĺ;‡’G$¸xűžç Y’çÖłő¸?s.ť)]_]Ďá<¨ď“O=ÎmžO×˝äć´g7sgmD?}2možMłGHgŻAާIçžöĽ´ýőŻŚŃŽ˜Ţw0?óĘ4žnŚ˝W]ׄĽUˆ<ő:ő™O6=}ähz͝ŻI×\wM6†;~,‡?YŽë7”Ň ‹´H/dbž€8§wƤŸH° 1F+>8„ŸĐwŠ1fLÚś¤4ooú v7` ÓˇœCšÖL°Č ńćsńzЁhz6čúʐ\ćó­öłŃ¨#ŹŮt˙ŢÉUú­ŤĆoŻŸ"†$ É!ĺ˝~ř “gŁ4 nEwôڍIČ⠞AÖV›sú(^ŹčÂÖpŰ>ľŕí¤šU^ˆ]?4$ŒLƘő |zА|“ŰSg€' őX—6‚ŚKăĺüQöřRÍÚŰŕó&dJ ý7o\ě{&¨"Wl{ěĺ9$Ž ŮNO:}°OĄ=ŤxöŢşńÚúEOťżm¸:Řy>p¤>–wő†öĚF‚ŕčĐ(ٍůIPb_îä*×vëmĽ€ŤÓŢ;ÓéVî—!ČżŠÇĘ0cţţžŒ—ŰPRȏůY˛÷‹dú!ˆœçťIG~°ë&cÉ-E7űóR& ĚF]x˘ŇžĆƒAč÷h8– TňŸ$/ĹvXˇÖ!Žżf˜§q꯼)'ľŕ´s{̧YHę12n˝Ć™:^űűB˝>yՃűȢ7U+ËŽŸęšĄ–jŃ žmĆ6^@śˇť[‡†~)ăo-ëňŇdŠmGÖ×ÔÍב24l+'‰Ę´[C&Ąď ů#ćő+ęJ,'őcżĺą“ô 4ęÍmŠńD5Y]Ę“ÍÍs9ÜĄCÔŰľöâSG"–ňş>nטBjJ˝6v¤•QťgnçÇÔ­m‘ œš˝€sń0ĎHÔÉsčxԛ˙̸§7ôń|:o‰K‘řaűăšŘ‘ ő$Uˆ/ia.X¤EZ¤EZ¤qŠ{’kýŽ]ĺ‚ë3™%†6‹ŐâůŽ}0ö6lPŘéđRęEŕčM"Ö-ţXΰźXFüÎpó”í ťÜpĺ>ahƒš˜˝ćbçiöĽ^šĆśćEň‹ľ#ţîŸńŤ‹ţ;’,(ˋ\^nžĺw*÷rI— Á‚¸őÜ Ţ˝{O €IÇNL|öÓ“ŰOŚ${ŰúŰŇMűnJ{Ö÷eW˜[€€g§Ç},==) 0SNo"™Â(Ľa&0cÜ|GqyĂ/Ďˀ|ŕYwc´ ňœˇ­uעáVeł|ţ0&Q?]üë•BŔRp–şZžĺB„A­˘{ d€–ÁöóžnŹ%đŒďPíö濓¤ňĆ%9ĺ{SĎš‰ˆŃŢA% Ę­Mn´Jâ \ň• ÁłÖrhż,<ČđŹ7đi}*a€ö \ đóC9‚´% đ^#Œ‰dŒl˝CÄ[ ”mČ IƘD"˛ş¨`˙0XCâßÔÇ[ˇĆ•ˇĎh‡QâĄ!3ŢĺÇ’%‘:C˝ČGˆa1ř^ď äÇmZţć9ÁÝ4›4bPý" Á[ÁzB‰á%hĎYž‡nŢWn<#"ö› ť}Â;”Í{€_ޖ¸aá„ÄCYč0˛3î z*hbߨç–oő¤ÁA œ.2”c}$˝x[H2 úË{œw$eŃ>žĄĎwóLŃ8ĹőĄ úŠúXA&Q'5˘QgĂöP>y¤š¸{#Ă0*ü Ł”aůmťý)!ˆşĐveĹű†‘L^Ą{ĂňŁ [ĘDÓ¸:t}Z€—îśš^DÔ_Ýa'×ň Šă\ŕć&¤ˇë˛ńFCż?’žzş^pŰź˙ŠýuÝw§•ľ•ěŢuŻIő;Ókëú׆ôńŁßJO^ů)>ž˝\LúJ:˙Đ_¤#_ş2ŤőatË]iĺĆWŚĽ3'ÓgżôőôŕĂŚť^÷éŐŻş%{ĎŔmîŒxˇuYg crěDžpźÓíŞEZ¤KM˘"(ĚżßůÎwścč‡~č‡ÚďôrăÚF‚P'™‚ďńžŔ<ʸÁŤ@$Zšń%ů‹9Ĺ5‰<Úő<ĂgĚԅľO TŠßóÝťŢőŽü<ăFŒaćmĘńyć çj֔Há߀ęîżřťÔFÄgżÂŚCŃ> X¤wżűÝyb.á; ]zʂ9‹ç$ą˛ŢPs-2ÖŤyžăďČyŃ.ÚčZJžŽČœ÷y˛#Ď"_ža]ë‡SYł80ş^ňźk őŠ2B–ΊÎË )“ßÔ˙MozSűr@ŽzŰbíĄŽuIěŻŘ›RV44› ó cʢ|úEůŁČːqÔ‡łl;mĽ #@đ^Ač ęÂłî{HxEqĎü†7źĄeúóœ¤IűăůJĎtxŢé6ĂĹŢť´¤‘Ą(÷ž¨Ş‹ćýLß}§iRĆúž™şě éˇÎ7ópKşx“(7Ź'-ČÁřBfŕďiƒąyŁľ6 Ťüěc/ŁXł %IŐ1:ăČ,'“^űË~ű|+§Ž°Q@6< 2zM ¤@ö”ú–<ő61É^3&küť¸ggnŹŞy v–łâ¤ÉsÖÖ[Ő4$˨ššŢ‘VFMÝ4u†šbˆŮpІűŔ›J¨ößCˇüQžC@Ě0/ĺź4oűožJd÷ű貽˝…Ü€ŢeOşÚ\Đ8ŸeÜî]Sż MAËýŢŔďfUmČdš¨, ëJB$†XIm{’FŻĆŁ@žľ>ďnŁK6(ň/ş( ŁŐŁIߘhżäöâáeŢ}n(Żpú†ÍH(}“zezĂúHŞđ,ŻwĹň~Ô­Y&ˇtňZ ú5jeYtvÜ3*_RôŒ0$ďHäô–Fő\ĺŰîy9Ú]Üǰ>Gƒ)ßŻŽŹĺĐśŮŢŇ´:ëáöŹG° ÓÇŁĽÜ÷Y†čGš÷@ZĎBzÝ$Oψ‚Ć-š`^ôźš4ޑlű¨ ‘ŇŐsŇĚ5#¨őťáD™äąÔ$s“‰Óíöű˘ ÝűÄńŁźŹcëú9•p:ŁqçÉ~12vűwőƒššj.ętáŞŃÔëSeäE=+şç՛gni…ug^Šd›ă1fé|˙:푺ÔóěaĆq–űľ–Ç|”ÇbÜWYďHţ‰ăŘő*ŢŒäßUׇgШďŃÍöN{‰>1f”ĂŻ”>k{+Żšš-Uń¸3NW–ŐúœíE‰|Ń Ű ä•ěYjH‚ŤB;Ć;˙‡óŮpżÜŽĄÁߝܪ°Îö=ĆX†ůvku?źHţ=ëÖ7mZ’‰$9Őߏlü<Ďšxźšź°ŠEZ¤EZ¤Eúk˜†g:Ół™ v˛Š\ĚŽBޜ'¸@ĂĹplUŘąó`>zöôŕ‡ÓńىôĘóŻHw˝ěľéú=×§ŐĽŐfDÖ Rڎם˙űďŤtÝaĎŰő *ÝőóFaČ üV9‡ŢŘě˛Đ ô0$†‡@@HH(˘B’Fě—œ2ůÍ Ä(Lů P>sCnŢş”;|řp{Ó;>8ř0Đ&cGj4ˆ!10)bí¤M°|Ç3‚śČ„ź)ă<ĺÇCĺń=ž>ţńˇ7â)ŔćÇ~ěÇrэ-e@Ą|A{>—ÜÂż%‚?˛EŽČ>’e<("7=č΁‰ŔPń N~ńiůFâůéƒ<čw&1űQ–Oś‡<ź%PȢ§€Xgd¤÷úŸú‘‡mWw ŸB} á ŕ ‚ŕT쀨XžúD} óňą},Ë`‚ßĆž2¤ ĺQ–äÚmůĘŃĂŁëE™,hň– +kÔ1CůôŘbůůôşlčăgŃ縗GŚzĄl€,ž.Nȟü 8PžáP çcżK"âYäKô.ÓÝDÚÎmáÇ6?<§çőŒSĘ7˝qŔłô Aůż÷{ż—Ë$büóźeśČ1ď!_bW\l/x™BđĄ<ęŔ˜áYC) Âęá‡>“0B’ŹĄG şřF÷Œq?Ü\P_ngÓO’ÚH†*0l“Ä ćňĽOůŢ1ç\IÝőL¤ŃČö\ŠäóMÁ§>Šuxˇ“Ú(śžś+-Ż–˘„ŮľgWZ[]ËĆć­­łé[<˜ÎŸHŢ“Ž€°qúx:ţČé؃÷ĽŃC÷ĽĺTçłž+ęşü—­]é†7ż=Ýy×ëÓ^€AÚ_|źr)MkƒÓ‰ÇŇSOIǟřZÚť{#ťPŀ˛Ň Šáf”ë k¤bä|ćMß"}{)ŽŐΈ×ýÝŢ›wnÓ ŕ5ËnfĄƒÇOžIݏí/ş‘vţ(DĚóő:ysZ¤.I@ӛž ˜7 „ěäÉáŻcúő_˙őÎËp.;Íľ/T˘ćß~đƒ™ĚG%Ňb.úŤJ%}éŮúäRŸ#;ƁţX \ĚŰëóoýţÇÓŻž˙CMţ>sĄ+Jő6 Dž;w>ŻuťŰ}Ľná­wâwžú€Ű4ĹŤŸ’ ĆÍ-m÷-PńfŽrąţzŰ([˙î–lL8¨šŚ*„`ˆ1íK{F­—rĚőć2ŤŁJ`Ůú{;/]ęęaŮŹEŁqRąÎL§łşď ´Ž§nb@Şi4+żű`¤ëŸˇŤăgߋˇÖ˞¸ÓÝűÇp CP^ywä˜.4QżťóL< ŰÖd^ŘF]U^ÝMöŮs¨$H(ŃEž+¸Ř)wŠń0˛ÜO˛L&u^őŢ`ڐTŢrßϛ°ôŐ¤#Ă@ĆŐľż$ŠH&ńw ľ0J â0BžđűÂ3ű” ób¤GĎ!öaôČDĺŐúŢFŁ‡ĺXˆUťuź—>œdÝ$”aô)yˆ÷$6'zî+eĚÚýżuގÖËgŁ<–Ў›ŃŽŔąňЎĚ#pÁmËö™!‘ˆä>o Ţh[mBBDýç<÷ţů‡§>酼sĄwƒzé!RĎ ŃŰbރćůą#Q´ˇßđŞÓČvž=3ď@C0ً3qȟéŠeÉpźłźhG8ŸÚw;­'yN+ś}9$ \Œ,0\”[ÓăíÜ ą)şĐ"äű^WÓüd2R=ž9'BPĎćá\€Î˘kĺLPÚ/ąŔštŇĚă֞4këçG퍎ąŘśm'}ÔŻěMaÚď“H,ˆrö],łťTÖ§BžŢŚ)†čĘ}’šő:‡ůО—%lęq RŐëŚsޤ ípí~‹ueyŠíSú#’ôb[7֗ÓOżëe鞝×W/'“†¤1éŮ ŹS÷{a/xĄŇwË^°H‹´H‹t9¤xĆrÎÔ÷ĄCÓó‘´O3ŕ ;"ř Xŕó˝ţ9gsäŇ/˜‹$W\ěď¤b˜`8ěé˝ČížńůLî}‘%X—żžŤëgššĹFđdó{6řКßóđS…ßßt‘żŸé÷đß45=Kşlx4Mę ć•ő`2ĚFy”â€.ă 퀂w\ŽQTŢ7„ §ˇ’儇ăŐ[gĺŚ'dŤ‡—x{ՃŁdĂ˝Đ.ţŚďô¤ač’ä ]šK˜°ßŃMĘG˙4ĘĆö[>ňtźP^TĐCĆ ůŁ{ԙ1ĆM\äÂťĚ |O[ĐżčĄÂĐ#üP b”A Ăâ8Ô{măyŸÓ,´|§Ç 0ČD/1Ě?äAżž„ď ‹đŮ'?ůÉ\ˇţáÎä&ÚiůČ_ˆzAůȁ6Ť÷$äCۑ3íQ˙,Ÿw’4ŽPv$ËŘďȃ|(Ÿö;鶊wô„Ăw”o8%ôĎ0,†,"Ţĺ{žł°AăŘŁĎÔIC˜°ŮpłCčS&ÖáEƒš ƒLݞS'OĽĽŃRşęšŤŇžý…HBř3g‘?ĺ?ÉűöHGŽ>•Ξ:›n¸é%eÄÁçĘCiýúĂéŞ;ߘśëwN|ă+éńîO+}$ÝśůXZţěvzę‹JžęÍéŞú˝+o~E]ßşŇę-ĩӛľasá˝b‘ébÉy ssŢvbr˙uNÇżÓÜł•ÉÚüá8ďçXvŞĂ_÷ôBöÁĽ¤K-űťSÇ>HA’!6|F/'ěĄp% ą„Ö°đüU€Űr;śÜŘ/ LŐ#B4­lÝ,ęę$‰‚;p;Í OGŞŢžÜęBMh–=HDí-e6rÝ2߆‡(Ţ Ś3oӗůđ†\/E9tYnx“ŇvÂmćB-”ŘUá¨đtŇÔŻóŚ0Ÿogœ3z^(šîL4ź­W‹8&źb|Z nDTŽś#‚iě]¨‡dŞë&MžÝ3Co#‘„QÚ:Î Ą7đ‹~uađ:°šYnaóÂ$„ˇŕ˝ÍĆcžmË$ćŐľBÖÁ~ô€m\Â6 š­ł”]nH•÷KŞü“Ă ĚbŸ”ßăQĘ"ÍZbg–cŇp™”Îa‘`0ź-Ő…łYĎEż}†Üˆąěç)ĹK%żä’F­§ťĺĺrĆ*ŕdwî-Ä~<Œ›y  {â9Ó1=$ďPnGʨ. „Ř6e%Ń!ĘJp5ΑeւŹŹ_Ë@|GJ‹śxú?ĘŃó˝őČ`mUőě?ęüĐ+‡Ďx[^ű€J]çYל#â˜]^†ŕUĆřHe~@nśŐó_,‹ż% ”ńÓ٨$¨ŮCĆdŠ%‹ C÷DŰR†ľ‡˜O´ĹHŕŒ7š"a ”1ď˝Ű/ŻŘ÷qŒ OúëüůłŮ#áćÖfŤŁąďăüˆĚçňx†5/ác"¤í_ şęNB´Ÿž˛ýźG[ô™äôĘařČ€RäŠm˝ŞčA1ßyî=ďyOëJ=&ʃ\Bű=`ňCž´k'Ą#„ę Ýô)ĎY/ĂXxŘĽŢäËű°ü”U,[™ÂŒĆ>Ú§ě%zPc$äLéCäÇçôĽ1Öę•'˙ÖM},Ÿ6ł+’$ôÎ:űĂâf,yĆżaZ$wéуś#>ŁaćƒśŤżńżŃ– mƒěŐë†| ĎaBÎWˑíâ3ú‰ń?÷{%L¸Ř’'y;ˇD™Ą[ôí¤ýÔOb™ĚTŢG†´‹ňy.– ć’ÂşxäU;ś O žşŁ,ĺŻŢ‘Fđý{šůą‘ž:r4Ĺnźá†ş-{K\ŐllknfÍđŽs&=úŘ#éL DŒ*Œ_Ótřş›ŇÜ÷çDcâżşĚ'Ÿ|<}ř#I›ÇžL÷źýi~ęXš|ä×ÓěôŮ4]ޝ滯JŐËnIű_u{:ż˛žÎž9ŸĂ’<öŕçҞ]ë ßC)ßşÍ{÷÷óu#EŢƒĹĹSÄ\xŤvĄóŠ˝ńGÚi Ąd¤N pÄ5dŃ/ýôÝÓŐ =Xźĺ?W˙ú×ţ`@\čÇ(ď@زŽăĹźˇËíçrćšä=ŔňňjŻm<Ë-a %¤2&şĂ~™kˇó<^@šÎE4 ´nĚÇŢâ7ŔÓŹ­—ŕywfĺ|Y“ńşá~šŹ Ń#DôčP5ž*&Š„5)@‘ď›(‡slg)ŔmуŔt Ýá-ý˛g.„”Ş*ybČ´őÖĆó}𺓫’ɤó Ńĺ)›ŠWGëĎZÖK]ńÝx+Ř˝|LŃK`Žw2vů|_RCnŮĘíkpú~.¸:iĎj$ŸQ_ť5¨ó–RH6 Đ]o+ső`Ű ”_tą#5ˇ—vÄźÝóGpSPŽÜsîęRŔéŞ%ą˜rX˜ń$„bÜFŻ:Oń†ó0dúĎه>Łź(oŽ]—فÎ:3W Ď ‡ńLěoϏŒ{@ěľ5B_îjŰSź‡œo÷Áš­7‹hDœľžýb,S }´[w˝ńEŕ=J}.z’ô"Ž:hXŽ8×xvVˇňó”“:Rú;4´ĆšÔ4ĚO‚ČĐĂßqöT^Äź^Y-„—|YŠ łĂöDYĺĐKóTćĎ&Ôа őB˝†AđŮh¤v>ˆú؎ĄŞ#ňäŃ2 Ćí,3]Ű&––{2Žş8LĹ6ŐČíWu~čŐ%Ž'9dôt¨'++Kic}Wý{­!Ęuž]2if֌ů>Şď'›”Ţ›$Ş‘†úş“÷…!aљčQ6ˇ'’â>[ů[ Ey>ˇc.ÎÝúZÖJȃŮ;ď Œ”u&oÎóÚYYŸ Űś˝=Ëďűžż# §í›@Řöoˇ'˜śyء‘0Ǹ˛ŽŢ{ /ß~0zÁ‰kœvY?‹vâxƉsUžŕ´žœ~ö=ˇ¤C,ž—ŇwË^°H‹´H‹tš¤áŢ/ρ56ĹE„Kp$đŒó$Ř?xi'gqżłSz.ëá°\/‡ĆłŤ— ăşî︎§ev{͕žý#–ů\Óp=#mćĐve/íEáaşXyĘü5ŻyÍeáÁâ˛!XüŇWţ×O-VŇÝëw§;Žş3-×ŕŘR-ę­ůůtôŠ3Œ ŔŔNo$7×,!X°yçšî†Ärë@ş€<Ę`+¨Gâ=ŔožGń4€§‚ŸQŃI‚͆!yháAÝşQbŔA€Hţ&OcP›ĺÓËçňđFxdő{(˘í”o’0Ŕd(Éż=<ŽBaů˛Â EÁůî–gœúA[ʧ=¸˜á]CłPg€^B9H é\ÂŔ˛@*1Ŕą˛ă‡ü÷;<őFfzăÍcžŒE>í‘mŠ“-z%  Ք`o\tä„ ­ A#9†~ĽéƒŘëA]iű>đœÄžĽ|tFUočú”2 ĂdžC˝ §Ž,dĂćöżňç=C°HpşcÔó†ăůĐ÷´]˝'Ć ]ĽÝ´I7IqĄŕ{ď˝7/¸äL˜Đ;H%Î÷RďyÚOԑś!{úž9‡úR'ˆ.††á3ÂáHną/{ Ŕ8^I=$N o41Ć~ó73?˙ˇţÖßĘs˛—0ŔóźčúŸ÷(=ˆI˛˛Çhaô;ĺG桉ç ËÁsŽIÈHđBnŽIĘĄ|˝‘˜xů0ŚźUâźBů­Ą:tŹ/mĽ|>+›Żr;†6R>˛F&Ě)č}ŰŻg=ÖhÔ@nČ?zC‰‰6éĺý'çmŢá‡1C}Š×g?űŮL˘ú‘ů‘L\Ę:φńąŇńO"-=đ…tît=gm՝]W¤éĄŇޗݔ­œÝ{v/ßCéťe0Y,i‘éůNÎ7Ďś& çĽK]Cž+Áâ˙zßśóŚ(ú{ó2v{ćâ>ź##”ő—ďwďŢÓ1Š'ŽX"@Ń÷†ŕů;ŢÎ.덠§7qű´çŞLIh.`ýráKłgĎĺď# Š§~JťSŇűE|n6›‡ľÝ0ó°T0oÉ"ý6/%˝”3\’Ŕţ™NKX…ňL #!黄§\Íßwk\ _2Iˆ7ü;b@ąâŽĘěR#Ÿy<Š:˘FbÄN`™űÄaŸ(ƒ!Éžś=]Ş2ϸžŐ8>˘§ŔňLĘ}šŸŤűnk{Ť żR;öl„űXßؕ=jĆ:JŇ{ÄÄăď­­íœGt3‘h>kĚžź$UžNŔNCÂθmŻ2-áFĺ&ýüÂĐŃSEě›xž‰r‹ç9÷üŃCDʟş!Q ‰ÝŎŐC.zÁB;ĐŇŇJ{+­”ąÝŒ­Ž÷cXmCC=Ž€¨ŕ­ ¨2ˇ­ç%Ńłƒ?ŃëŠů+áźBxŠjŢÉĆ~! ‰Q×'žę‰Kʑď‹Çšyë͂ń Xë9(îoc˙çśäůrT<Ľ4a,"‘Ś­OżÖ#z¨!Q~46[OŰ?GÇÚţHŠ /ĄSţf=Žć†+eB‘w ä…âMahkč‘\R˙VĽë[źÉçĘ~6Ďg@ OtgâŠÄľńh)“Q”Y$Č IPqrĚuceŢúL‘řűyXŸŘfʑ žF9 íVC‚Œ:Ë(:ґ ůËśvk”^ňÚd áCb dCm=”ď~ƒßq­ąď"9fXˇ(ݍŸŃ>mF‘ˆAŠd Ľěąh3ë°ëEűҐČlËĐęüa>Ž•¨s1¤Hœ3xo÷ĆjúŮ_,ž×ŇwË^°H‹´H‹tš¤¸˙v­cťňʃĎřŽku\ý›}8ëáżřĹüvC]÷ӑ =$\’âžÔň<_Äy™ĎÜóóŰËŰ`JěĽăŢ=†–ϰ1ď~´S˜ƒŢšőNňŹń¤ŽŕşsŰâoĎ'ąÝ´,„żÁlœľxxó†źŕŸŁ$†d@̖’ůÜź›wĂ7>Áz”P™ňă&Ůpś|ç€ĐĽ ƒ‚žx°÷ćŸćRGČ 1$„ƒ’6ĄôC7-źhéí~ňâYĘŕ'/ž§M°‡7ě1´Ń6Ú€ëmđVšň9\0f‚÷ 0ř.Šł˛/7bşŰđÔ `“r¨? :żi?ĺ2)RWęÉßćeFtČsÔ×pN2’R LX>m˘Ďé˙rKć|n‡z`ŒŒ ßŰďaĐŘ”Ľg ŃĐG9xx /Ű/Yý(‡ň]Y/x–~ĽŽČuHX ?ú ˛ŠďŞ×č~ŽbJň<˛ßűޗŰ÷ć7ż9!Č#’5¨ĺ#dK{ĚŁţKô€÷–u0,Žž6â!Řöó9ϑĐIĘć]ęě˜ĺY,>ˇüh07tdęjÝČŮƛžC}!8Pwd y™č.Šw‘ 2”0€ ůĚöťń˝a+Đ™‹č?ďDzMČZoĚ)ČÝp2Ĺp¸ŢšW˛\ţčţ(Ëö˝ď}onSźUƒ|ȏßĆ-%_ĘćYçĂhD ŽxŸzň^œóĐY=ɐzMß>|8Ž1†Ď$Qżhd lę0tL2d ď#k’üH–Đ…Ş6žAVz˜!ńžŢXĚcŘţn˜˜_œgd|şŃ#FňŁ˙yVöż.Ŕ:WŚ…ˆƒLˆďvË-ˇ´kH–=îˇëŸ=~$=ôŐ/ŚO>žv=ü•´žZoRśŞôř+oI{öď[,ž‡Ň‚`ąH‹´H—SÚé ˙LŸ?SzŽ‹_}˙‡z@\2ş÷ú$ ÚՑ3śű ‰ŃeŸŃ_Ńń}÷ůeíˇD](r>ß hëŔŠĽĐŽÍŢ ďč1@ CQRxż¸ŘďHĹó…€íRCř(N ř]8, AOĹ%)sŇ[›‡ŕâĐPe{\ł :+†ŚÝ†T9Žě‹Wë}ÝÚJ˝w {$~ä2ĆKiHpž6DŸÖżĆ‘ly˛Üťm^äQB~(kŰŔߒF­Ž&ĆŹ _c]b[ŰĺĽóY;”Y,#šŃÜÖ[cd<š<+DWü‘čÁelC¸=ŮŮN{ăˇÔiĽË}%ü^]f˝w$řY,ƒ<ŹŻcÜůhč Ţx÷ŹőŤ'Ó/áŕ8öK´)ŘN꣍b’Ç~‰P>Ďóéćůě!İíŮ1uĄIJßŐ}ľÜ÷¨áż‹7ż*4đFIô`Ý ńlů˘ ůRçÖt;{¨ˆ2aú[rnÇ.zż= úUô;œOíכéÔž§¸Œđzš™ŻŤVœAŰufŠŹEŃÖ¨§PÚGżäţ—ą ëü,//ĽúI™FĎ ­źV–óYĐ~–T4”c“ţ{89~#‘Ęţ‰˛úCm´uMUë]Őî_”˜ŮÍĘüç•ň{ŠĚŸU.‰DĄ^ł„ÜŠö‚x‰%‚ĽÝ\IIQg­CźuŠlçý°ÎśY{ý‹ÍŔ 2ćÇíH58Ź+şVBuU˝śŘ~ Xüôž,:° X|/Ľď–˝`‘i‘érHÎqń,É~†ľěĐĄƒßVž^˘ţčG?ÚzčĆ&=„?߉= ¸ř+˝đüB$×°lʄĚVúB&qnđ °  |;vŁË…`qŮjťuĺűŇKÓÖćVš/Wim˛šść[Ůxq´V22€đ‚şü˘Ł  lÄ-˝ůí­eŁ( ¸Ç÷€Ú Ü0ťĄvłîÁƒAĽ›n°Sňâo@O˝D` ę jhÉ$ęM”Ă{ ëÔł¸ÂÜź€IO›řą|ęlů ęCű-Pň,u'Š÷˝R@@ŕ9…ČŽď,ß‚`ů‡>ôĄ<Ŕßđ†7ävń.rČÖ3żi;uĽ.z ź v“?D‹Ď}îs™´§@UžĄźG^ń& ů‚ę}BŸńCĆĽ^€˛äĹ$Ą!‘ßčť3Č׊1!uÍ#’x†: C–ńš€12áY ö<(,Ą‚w!6P7ęÍóô†Ž†î}Š[‰U}ş%ʐ?ď“çţáf]ůń˙ń<1›?ăAÝçô˛‰ĺG#Şl4ʐ:(YŔţGˇ÷ÉC$ňÇ`ĄgÚĎöЋŽFCm<8{ˆ×íŸń.^?ČýQţ呁„ žƒˆr÷Ýwç~Gďi7!nČS˘‹1ťâ‰|Đmƒh0ՀĽw ž§ Çą¨Ťá{č ]aJÔpţa óˇżý횞ń€N™čmDŻÉךAÂăE˛ŸwŒwőƃ3Œ~ă7óďčŮÝÔ…}Îß|NßŃ^<ˇ¸1âoÚAý(Că"ů1ŻŃ‡ôŠ^OxO™ŃnęHţ-Ň"-Ň"-Ň"˝Péb‡á=,ěvŒÎŠ´:ƒ‚ë?kšĄ×ôâEŠ€&gńBP(^! `0ÔÝřÇ5űŹÚn@Ź˘˘|]{—ü˝A>kÖ­ž§÷¤x€Đcm¸•ěPڒšwĆíyŽ”błWĺ†xyś ]Q€–Ŕ,ä ßŰí3%I,XĘŔW‘eÎ=Ś Š­˝-\nâ"FÄ/#”€÷cÄŕéą˙#é¤óPŇ=Ç{Ę6ʘ$Ŕ-píťz4‰Ä ˝tL…Zd+č`?„I$ktd”i[7Ú|Ťű})ßęg°1“dÖG™4š [ËÖłßel2nAČăŠĎ&YŮ$ŕİăśݘ˛^í +tż!6´miôgŢxˆÉ@^äwDƒÎ+HїQŻ_2ąŁ]@>ňÜcŸz›kxCKˆ)žŔ¸tA}˘GńąšY\˙rfÚľŤj‰ECŻîĺí˙^ŚÖŽc_Ć1mČ3^°^ńIŃa°um‰:ĎŃóy?DĹ2€sSˇHT’5ÔI˙ŽžT#ŠŔśIMŚőúź…çÎ0†’\_ßhÇş´ź2iCŸ´ŕyjÎácC$ŐóCUľgAR$Ítžo:(C}ˆ2!$cUëÝR¸Źë3ďô]dÝçŮQ˙RÁXP@ěQŻ-Ę+ÚŹ;^dřásuç.C@dâ–ŔvÓNmô ç[IükŤë^ Ž;f­<⚧lşą0*Ößć{/ C˛Äp1ęaÔŠXFœď†ĺŞsÎÉŃ+Äđ…ä&űżŒˇYŽsŞć˝~Ńž”çBîÔĺůŞ#U˝f>"ÄĘÚęZ&X!S/D /ň גáZ/ŠD™Eň‘ßÇ5HRU”o IŰŚ~Äy ËŤnÇh@rˆ^1m$ťÄžŠkç"-Ň"-Ň"-ҋ= ÷„ĺ÷ˇˇĆéeáĂţp^ŸßřĆ7fü&^4~>“80¸g.vƒ;źĐöppJđ°Œ2‰łŇ>°1Ů~ýő#k^6‹ý{rŸâlZ]ßUW˙7{ov[RÖw×Z{?Ďş!ĆáSގşPY!Ň(Iˆ2‰1ćCŽ+ůhü\Iź’|Ép] !ŻžäŇĐQA *ÍP&Á6ź1Žşű Ďł÷z÷ŻjýVÝŤž}NşĎé>ç<ťšÍ>Ď^kUÝu×]ľŞę˙Żűţ ›M ĎŚĎüůDŢl –9ٕ0ŕév;/’LcóčzQ/€m€ő/÷čzž<ŒˆQ Jr/ÄË×e<ĺ<~ňą|äsÁ7™YŒaČÖAđՍĹ>ň;u‡°ŕ ˘w {ĘXV7ʌ‹7˜Ô*ö@˛JdâSoČüŕóimB‚(˘OĂHPtŃĂŁu°L’‹"Áü›ožy"• sÚđŁýh–bín ľBšÔßzQw˝rpĎÇM2ĂpÄS!ĘŚN 9Âß֒ÔyŁWękř uGů\oË'oÚ6ś;IšÜ4’XcůÖL¸NĐśŘ)6  K†mĄ|ôOžVh Łč†óBĺ“ř›ßŠ_ěŃ ĺKPA‰zFŔnxđ;ňp rKôFAŇŁőŁŻa‹0č“čOĎ‘H"aۈĺS–^°!‰W\ă%(›Ń 2 Z<ŃŻ ’{CnőĚóč„ë|ó;íŽüœxž{ŇŇp2”ďKJť#O~CFˆI†…ü POŽŰɓr%-q/ňsmŻ ÚďÉ˝2VQ흶FČ/S‚™ö„NćM¸˝é„ý“rh_ň˛đ›ž%¨żýÉxhŽm‘(#‰ÇɊ‰ĘfjńVáf–D‰o\#/ôŞçÁ8ćRž^Z¨+7  Eů<'ÉCŽ˝éő‚ňůýcűX.–,2čν¸Ąwňńw×éŽÍý§ őyI§NŸJ'?ݜ&ü˙ď7Ň.íŇ.íŇ.íŇő˜ć Ń|ţ_AŘєPRqż P!J؀ťÇyÉţDŽ€¨°\ö#™ z™ˆ9ŰNCÂ(@l9,!˜\]‡‚BŃögxrËóëu=ĹjŮFzRđˇdđŻŽÍĘGĎŐĺ˙0ʡ`Tͧ’/ŠsČZ~!IĐkj™Źˇýýe>I}îÜů‘DąžŹ ęÖ˛ô.ˇšôÁéśý‹ŢŤ‘$á3TŽĺÔSż‹kŠB ™ƒ×ŃŢü˝´Ýb”ŁĚŐ*™¤z2Š Xń8ÂsŃEj&.Œyv–Á˝›v"Dȉ“'&°•0ŃťÜЕ !‡Ť´vŁ7 @ën<şr]†œ§Ą s[# xI]†,ÝDĘd°Î( őÉę*s1úęşâ'íFW˝Ú—6‰Ćíßöm§ÉüIś›ýÎ6Œ€8NDB}űĉ˙÷ěYŔë?ŸemÂ>Ě2ëđ`$P0w=#Í(ÓÔ ĐAUЏŠő‰v˝­DO†ąÜ¨ám6ę-´‘„áľi!”öHDčsrŻŹwXSk9ŽÓŁÜŽ[+ Ą§x׉ý2’Â"‘*’WlŰÖƲ|ŁÇ‡8nOuĄîŘŘX—üDŒŽŸÓ)ŞM‚[lűřž‰ňGO%śƒž*Üď›y Ř侐¸žö+r]7ăę™3gł'˜“ŹeĽ_ÇţÉ ń0ĺdyFRáÔĄMćí.¨˘ÝEđ!Úaś‘<Ě=Űݗún;t´ŘŒW‡“źyŒĚýŞ/n™RšőŻŽ+cjZ×viűG|OŘďô"b˜÷VŁ=Ůg˘~˘EXďú.^M*#!(îÁř;m ‘ÔI3كÇ0Ž™ĂpA)ö9űňÔ.ŒÝ;ŽĹ.íŇ.íŇ.]ĂÉ÷4ižŽ˜{•jÁ|˙ç…<÷śˇ˝-ă0_ó5_“r:_>2ˇläˆébĺůoçŕ `0ŕ'błÖ§%_^¨Ěśź‹Ő\Œ ĚL’G›çśzś)–×ţŰżY€?ń7ős>ëqÔVŽmĺ]éş!X|馓œß,¤˙ŕţ0ýń˙ůÓôţř6››sÚßuiriŐÉ1 œ`­  Ä T ]Żz ł¸Řć߀fÜ`H‡Ň 'O ÄŢ ˙âʲ0ÍéŒäO×óˇä Ŕ?@Pžô4„ˆž1”G#“Zb<@€qţí)nž‘IšX¤ şl(äy€PC1 3î€&ĚůáçiO{ÚĚ%Ž€*żIPQ˜Ô‰úŰ.‚á”Řj #ęÂďx>`đÄť÷ŁžA÷|ä#gŢ@¨Ż^xžňš.ȋži] ę!Boä‰NőÜአžNô‚břʧ]‚cý‘đšČ_Ď”Ł÷äA€îĘďć˛ŰśüNYźD$­prôZXŽ˝0 ÓŽ„Ú .čnPžŢ8‰úÓö$Ëç9ę/Ŕn,lČ-”eůԝu‚ŕAyśĎšI%ˆ/‘PŰđç>IFęM€[ą|tĺf‚DĘç9Ę'_É1ÔC҇›%‚őäÉsŘ6FäĺÂý‰GĎ$žĺ%g$é Ű'?HVś2P)ş–, ˝ Âđ!\ČWÝÓ6nđHr˘o’'ňHĄ|>ÚňŃ/rIőĂběg‡Ů㸚ÉCCżăţXę*qŔ$ŕ?˝§6v|~ux”TÂ؁¨!|DŰLA‡Ń–U{•| ‘"oŽwĹţ%eŠ&z6)aelű4ŽŘ<ĚłšoônÁűâÄţáĆFϤsçĎĽŐÝŤ‰”É`Šşžz{‰Ŕ}HYăř×zRŽH<‹ŕBKšŢ#AŤˇÖyĚXg;-c^ëmdÝ­gŕEŰף7—ěÇ1q|š*˘OśË2U"L}?äk¨$=H8n˛Ĺ}śýý´Ä%ʄŘ)Çwőď}h§~"_xϤ÷.Íú^Î;uł÷ž×ăťš’ć1ŇŁŹąďږ†‡ŮĽ]ÚĽ]ÚĽ]ş^Rő˙čĘÜcŰ^żE"7{úůČGňű–˝xxZ|Ç÷ŹÇoxČÁÍŔόTŔ#–í<@˘}›ç…ö[.DčŘöw[YDę1_ńApąd¤€ýÉśĺ´ő‰ë14ÚÜĂĂ´q˝˛íł-ĹľăőŽ‚EŢX–EŰŢf2zň† 0}zVŸ9Ÿ>{÷gr,\9 0˜ż Ĺ0Nú‚śüNç,m] `’řˇa'\”‘y ŕJ ŕw:źD Ę÷t?×=ŠÍó|ęFVš\$‚ő$AoňĽlî•Ô ‘ ’§űýXž€ŽC‡´|'ř–Ož X <ԉAŒëŸČ$YŔ0†O,GżvVO˜ÇňŃ-ƒ`­§ËI xďżů›ż™cd׳rQmÇ˝ĺdËŮ\찙ß-ߓô†+@o|SÚ r‰„×o‘°Ţ0#n<÷DRE´îE>ěJĐ9¨Ďk—ŔÔßđ–ä'/ĐN"OíOzÄ.!ÁÜqÇůß°ůnšĺ–üœ`š/Ábڊv§ż 3ëax ŘeZ>yIbB. %¤đoCŘĐg¨u•Źaż@/<‹­ę‘†DžöŰTr‡^$ů%zƒgŠvM˛o¸áFýšROCwÚ[§îĐ=/\ÂwPrÚŚäĎ3ńԁqؓ„É<|[ĘE&D<š‚ry–:Z‰XÜŤmÚŚ­ŤLOZ¸A¤÷CáPž2qŸý›ßy)Ç8[Ɣu#ůi÷Ř>\łÍ܌ \drĚäŰň•?z‹AżÔU„ĺK0ŇÝ*:—d˘ˇ›ŐŞşX•Aý¸_B™ÄĘwĚrÜ$Iđą|˝‹xR&’ÝđLƒź’qě/ś=ĺ“?˛ţţü~:šŃýCđn´šţgŸýLę7ŸnÁ6Ě~؄ܥ]ÚĽ]ÚĽ]ş˙éb ÷¸ĆšĐ˘řrŚ>(K ¸"ˆZC$ŹVpŹAöZĐĘ;›đXžËçu-Ą4*Á˘Ÿm,H Ž(WVçŢ3ü 3(‚™qëXEęU7#ĘŠ{ë5wç^dŹ›K5üČp(†uÓP$Ť|ß0¤ąU˙’JpÍŽ.(_/uĚy$”5YđK~EžRŸŐœŠß\•˘Ž[ť‹@ń üëş#$ŒxÎÁÂbEÇë D‹Š/'B‚!?ÚöŻDŒJ^(ŽďgŕírŁű˘gŁÁö“G„"ťëZÇĂ{'°„ń( óĂőá*ŸÎçßiŁsš€Ö’ç lËřc"ť~Y×sđzš¨ű ˆßčČCäá4Yßőłż[‚Ěś6jO^G€T`4ą-IĄMuCuú˙"^(‹˝•ƒi]O›âYŚ6úŃ3Iš#’‚V‡Ń3Hôl!°jű+›œŃ•śÝĹbäÂĚÇÜhó âiůf!ë9xΈ^ZŕzŰřŢnš!Čtóp0ŮCÁz´°çă^R^űœ)žWđÄÇÎÚžÁ#F ”ĄäőP‰ó}ŸÂ8“šąk~z/ßłŽŒšofRČbv-ˇon“ů;ÎöŽyęš+˘gŰŰžéXX6űÓ¸Ö=œmw f’ÂD,Iٓ $Ęôŕ䋓ăÚÝ~νŽIĘmyÚK´Ĺh™˜`&)Í‚˝ăLčkćSĆŽq\ŚľŰCmÄöŠúŻk_tžœÚ×ÍúüüPHĽ’Ő&łž¸g"äUőľXô_űuÉŰ6B—’ůÖŚ}lţžŻ}WoĆŃËlŢťŮ_ÎÂţÄzÇ÷őLAŻÓźe] DńýUő7}|ďD˛fl˙…cćƒÇ“ÝĽ]ÚĽ]ÚĽ]ş,É9d;ŸŠűé횃ä;–w$Ř ^żÁŞn=¤‹Ĺ‘âşäB@?˜x‡&ÁÎbYńۏÜ荰]Ó^ęžĘśyŐśš˝ëÎŹ-ƒżĹĽůŕÝ†ĘaĐ'=éI3Œs› b~čWďđŽšŐŁĎÄşo“´#X\ĽéӟţÓ  uOúě]ŸI_řEÄž˙ pubÓřĐďüfčLq•/YB0€LĐłnd-'Ď ):+ŕ%‹tCđœ$@M žRĆl%T`\†t,ćŰdčňá9Ę3! Ay:€‹kÝÖ3š€—"‘k’ąyŇƒŽ›žîˇ20 ÖęaAďžčfŔÜŔýŠÄ6’tBůŐţraŃ+ÄŔj;&eóAFęɀň‘ݰ ”Î,ßÁLf’"ytň1ÔíN{Ÿűх€źĺÓŚÔݙ ĽPŐiF@>íŠß% ^&zÄ odâ^Ęt06„ 6‹Ţ8áď€$ &z6pŔғ@ąĺHŘpc„çĐá;ŢńŽlk´ŤöěézI(čç‡ľčE"nvF‚Dl›dôZ$Xmóě‰>'iZĚÄ^Iž´:H%Ä „€~\_ܝöđЗëeč_ĂHÄ:;#.ŘÖŽűc#˜ë‰ ~băéţ¨›öGď …hď 8ŻçĄ…bßóyőűMŰ˙g›Ääˇ.abbţëĐojťvÁŒĐgϝÉ^P"ń¨×[E—Rőřs8ó@bŮ4JHŁJ6Š}ÝţéĆuî[3Żąż§#úŠý˘›źŐD}WćĐ2–§n!?Lý,ŚçđLąž{LjޏámŰJ~F{-{4›ľdśçuÖ)ă+沈wł—ôŇŇśłrFťłŽşžz;ę°ÇŮćű؁´ÇfëkŠkß.5ü-öá˜G$FO)ž[†ŃNşi<ÇvîÉ{EűEŃmąˇeÖSK˘ž=Č áÜ艓O b›éí"ęŔĐ#‘źßÁł~”ć!G”Ľ%UÚ7ý-ęľ'ňţéćúj=÷ž2+;íŇ.íŇ.íŇ.])žœ:…÷ϟŽĎ×wő7ÖO`'<g‚<ŕÁȸžˆď帞$ąw˙ş×˝.˝éMošň?Řśvőßâ]Fˆó¤n áásŐEűo‰Î” ć˝e|.ĺG˝ţőŻOoxĂŇłŸýěôÍßüÍÓę¨_ńQńđ¨x !ęóbużXýŽőtÝ,ţ÷ďý^şáôéKžô‹ÓC3řĐ5¤ÓË˝tę†ÓiőĂlä€őžLŽ€´Lf’ " Š'ë1b~‹§-˝7ĆߣƒĆş#&<ńěƔ ŁĽŽöÂňś'űuáďép@BŔA~s˘Îs’ ô,ŕd˝ĚÇ )żé݁K@T0˜]Ôő)OyJö\ÜäË=z@fè˜ÚÎg'ŚNčYŠż§Ő|%łPŽ'ţi7@l:ť`+א‡r™?ůÉOf°›˛ýáx&8´ đ¸9aůüŮ Š ×tĚ߆™°źÔçl‘ÝÓůÔO ^˝ŰäŠmśE˘ţ´#őˇ|tĚߔočÚKRa$}ôŁÍz ýńZ1@rÉAš$1F †˘@Ÿz¤ ŽäË˝”Ă˝´‹át­)9ˆűřúsŸ÷F›ˆĄQ$ÂP'ňŔç™HČAŻ\ăYÚÔP–o˜×ôF!éCt`X ä%1C˛ŒÄ m ˝ß|óÍY. F´!l [|řĂžú5ű‹ýŃÓQŘu˘˝íš÷1yL.”,a—Œ Y@š$ÄP 3$Oe`Żô7 ܈ŕyäB^źzjáĘwüá‰cę˜rľ+~×#×i+î‘D‚˝Ę€$I23oî5Ćר§=o¸ńá8ƒŽ m8>R×?i# täCˆâŘJžŒÝ‘dL’uôâ5ĆBž ń2âDĎ1ťŁ]Ý,´ >ď/ÖňOž¤ýOoęöĐźářť˙sw$ĺzNqŰšq#šěŸůĚ]#đ”vi—€TOÖ~îŠKüqşű+ď6é˜öšXáĎ­™+Ć–ń$­ż 7Ÿ˙ĆuA˙Z˘!2*đŸ0ąKy_K8-Ţ´$30G>˜Ŕ?×… yb"0‹śƒoŔŰh%Dƒ€Çj’MÝq;7'Ű0$ń™ůi˙nFf¨z_Oś+ČËŇ#Ĺz=đŞnœ× |–yN€Ľ4‹ťĘóĹSZ=TÚľxÉŢş¸IT<,3PŻW’4Ö§Ţ#ÉĄzL(ŢLڍuí.굂°Ĺ–"ApN†ń$4žC*X\ÁBëĘű8ŽsŰ §Ăłˇ‡TźNŒ¤@ՃÉ@c:€MšžĎáBΌä•uÔD$(¸ŒyŠ×xFďô˃ƒZöŐ÷{Ó›L`ÁÓů›qŔuR$$)dŞ~$ T™ÖÓxQä*ž0Ş7”aVWĺkmÓö‹vgÇÎřLśýiƒx]€}dČjJX™ňwé@‚ŰžnëĆ1iÇÇ4zŞĆ&yLÉý+M^P†ő¨ßm\ĘY­ {°^/aƒô$éÚ8ŰOę&ŰŰěn…ą|ô6RęŐOďIhڅőמŚwÇFţĽ@ü&‚Đ!!]Đy*#Żc§ĺB"YiżâÉŚkčĎÎ$Fĺ0ăáů~U™W€źźO˘—ČHÚjOaNcSŰ. ÓXŔoË˝.íí/gdĆŠ)¨Ÿy€ˆžâXßAÓřŮůŢ!LIé˙ăřOuҎŤ‘ŘU‰dz!Çqôż\Lď…ňŽ.†ł):FŽ ác•F?Łýăűń]„=â…g$bŒ‚MďăŘOí†ü‘X‰ îąć!ÄBgObôVěž„:œÚß9Cü[ýLDŽě…ä¨'ŸŘó9Ě8Žű[%äŒ'@ÇkÚŘ*Œ ĽGűYcđ8Žď˜ť´Kť´Kťt-§m䀈ŐmťÇ¤ÇmBˇƒep0•ĺ‘P{oéçţçÓűo˙-mţŰuŸÉu„‡.ă;ţţŚme:_ÖK|$&ß×DžJŢüć7§oűśoKĎţóg×<čΜÉđó÷ˇLŇĺČăjI× Áƒ~ČCştę䊟ŽŕÄj -¨Ćo€yiz(¤Ł’ŕ srAt)ˢ‘{*% ¤ë’?&ÁMžŁlňĽ3Xžä]ýc¸Lúš—ň͓ň)C°œű”ů{Ió˘6 n, ´R哐şëƒkőŠ“ ƒÄW~ĺWfď\“DœÖ‰ßɋöäš`ś^Đş•\á5ÝiJ\Aä‘`sçwćü‘ŸßŞuÉӐ Úú§ţ†KĐ+ß´—dë/ل˛ßýîwgSßG<âů2ȌmŠ'ú ńĽČŸ—’y #íús ˜6ˆqRՁ'h[I#čâ2˘;CFPrRGd´ Ü@§l ;nČémFoęY(Oԗ$XOYÖ_O&žDđaů†ýĄŽz%ą ÖS&ńŹ$éiś3fp?vG˙Ąí)ƒëxá[ÝQ7˜“”ą2Œ żĺ %žźƒŘ€-Ĺú;vńť^]\ÄBˆúë&n<ëyůéÔ_Ż z€Â>f’D/˝IĐćچŢAЙd‘¸QmhěCφ˘ţ–/™h †Bąý aBžnVčÝ#ŽŸn–¸šM~†‘8Ăsn¢Ł_˙ő_ĎcÇ3ŸůĚôŐ_ýŐÓŚős|çĂł’6HŰĘgłhożŸâ6ďŇő›âIژ‹"đ Ëš2éżŘ„tˇËśK—#‚Eőzfëˆ]şôTI‹8čüą˝7Ă|ŹkSK(đˇ˜ÇkĚ*@L<‘"‘^’E1-#zÎ0ÜF<ŐÇéú\ç'ł čÁQďoOŠÇůŽă|Kşkeô1‰%UvĘčgďxjGP.ś™ _ >q+şštVSńdA(JN˛Ÿ9CHÎ6 Vꥨëą]ŠŞ7¸U\Ë ÂË|­â#y"zˆş6˙hŰZMÄŰöĄ”ą?ľUĺŮ!´Mš•Ł|QżĘ™É›˙$Fä˛r¸>Ăr’†Pť\ŕ`ńşPˆĐŤě9słÇąôDT!i¸^*ŢVRXűrĚŢ8´–¤$ uś>ʇ/ЧŠ`k]?•C}}?ćE} ĐW°úÚ-q"nŽŞó¸Ţ°=ő Ňö˙¸Ž] ŮÁ6Ia~Ô'˝ŽhÓ'†ý„ŻĂ ^kעďýiýnž’şŽäk8—–ěŃ÷ŃÍm)ťĘV֍ą˙ˇëăz­%UÄńŁ^W:Îö÷Ł,#P>élŃ×p›ś\AŘčŠ[—Đ(Ăş†3°˝&rG2œĂ8^ z’`('´B>,N-sŰ6ČCx’TdűCÎčűůXnÚą>ŽmŸŸH’҆úFAŠ[!s@Ž(ů§\ţůóç&˛ ÝťŽmäÚ:‚Űń=ä˜ŕ~LľľnZCÚÎÜCüćű†>{Ŕ°-˛=Žë؂LeÝYIí>—ăŔÜ+DŸťŔ"„@Ękƒ<}Őł6˝ůDB@ţş+}ŠčŽĺöÉĎ ›˙ˤŸHt"4L'†Ňň´D Iëđî-$˜”‰d´ájŢ‚— őś}XÍޗڶ„˜×AXËKpŇËdbĘąźm˙ěA%„KŠďYĺŒc…6“˝Ż,łţë“ë0Ž$ęĆr§śéJŮ]o‡4…XŮĽ]ÚĽ]ÚĽ]şFS!?]Cl#<´ĎŻpؑ}÷'<á GźTra_ůĘWćƒČŸK2Tş‡¤/'šb[Bŕ FUˆaO.Wţ˙őżţךţe/{Yƨ˜Ÿ€ßPxăĺ"W\oéş!XĐq00aOŐîŃÉó Íđ˝;¸q@00†Ą`¨†’đ$š‰ż ßŔďŐ<ĐPŞű}ÝĐäQ>€0z,pŃŕ čŠ –Á}Ü/ą ‚ŐĚtdĘB^Ęg@ńTż!<ŘH¤~čي=UNşď7…‹ žĄ+\?‹Cîađb!Í}t<€Mt Ç;;‹Č äřÍuC†@PO˘čYÉ'şťqqj(@JSG˗}N{(SĺCŕ~@kôA„ëżň+ż’~ů—9—kűËβ|eqqK}] ‘?6dĆÍL$Ć>yđWzd ţ‚ŹČO˝Č Z°ŢĹz\\“'ĺ’Đ6Důsŕ)ăg~ćgrť=ţńOzÔŁŚđ ô°@ěü›{‘;Œ/&ÁjěťAwÜKťđˇnƒÜ¨R6dŔΊů’˛ę…D!ňAgäőeůԟ:"/ś7B(y[ŰľŻńźĄy$‹ lF’ m@~x˜ŕb!ë/aÄö˘<ĘçŰ0śĎR_dA˙ôúĚÇ>öąô‰O|"{Ş í!2`{€őčŕ9ĎyNśŰ\˛„dôG{š(GŽmůxžňŃmO9<§WÚ †đ@žHőî@ëÄPBč#žÂŠgnŢI˜0,‹^m˘Wô@šä‹ĚÔßö¤ţ†ňŕžĺ>Çí-ž€˛ţ†`A¸Wű×{†ă':aŒ@Vô7lÜpŃËÉŰßţöl ô/ Iń‘ĺK2xy˜íÎđ(sđ-ę§u/ďŘ 1%}ĚăÇrűô C5ž:öOěMműžş)60Z×m‹ĺH?<( g6Řü`!SŒĎ ôfťIóđÚX˛ÓäŃD‚T~fčrQ/ў#€É?-Ů'îyÄžc"ٟť‘¸Ł×J°¨í-¨Ç1 ęÝ˝…¸IéşqNŹŠĄ16ü¨óţÂúU‚G°4÷ŕżšŽ­f›Î"Đë^Đ4­Ép0‘˜Ľî&2ŔfŒ:X­f}Ćűđţ G ŔoÇíL–"TVúBTX;MĹÓ@űéÓô§ó“‡XžŃiŻŮ/j˙N…T=ĹqĐvŽvÔŽgŁÇšĹř·|rboôR1֕ö9wîL~oE™$”˝ź¤qÍubʝٝ }‡Ä1łm›2^̉nń=T<$Ô÷a$pŘÖŤ†ˆĄ)‹!b%ąDď‰&÷ç”)îŸYf ”‰ü áĂ÷‰<ö!s7”-s„ŐĘZ›1ŚŘu_őA]rťô™ěUœ[TRA”5Žšu,—Ü]nÇńWÝn‹?n_wü—XÇż}˙Ű÷Đ­dŁ–Đhť8.ĹąÜ~mŔţśíýľBëŁîłă<€.÷–%œSJGćôżu7Ď7ˇ÷néˇKťtŮÓqÚSŮ­ywéjHÚa%âw#vx>UZëŮ:uŇ[Ţň–Œ%p0•w݇Qă>A\óů~f˙‡~č‡föżíßqýnŮŕÎ)"!ˇÝOjßůŞs[nüÝ9QœKş. ľäŽmen›s´2P‚ż˙űż?}×w}Wö‚.Áˆ Jo%Ĺ9g[f[Ÿ8GžžĆœë†` ‰Q Ňś|“h|Ŕ8ÉqĂƒpAYВXČ"F` ěˇűˇ'ď‚ß‚tl”čŹń°Ń„Œ HvheН ÉňŞ=ŐĎ3Č lřzG@6ę/Y#žę‘0AZË7l-§ă‡ ¨ĺ#$Üć×sŸűÜěůÄ fˆžőÄźä îóTť‹=ęC ťO <†Oŕ9ęN 3ôcˆʧ ČůÍňI’t{+˜Ž×=—źóďĚD@oˆĆśIbĺHZĄŽ†'0\íbh쁿с'$HČbŰđ Ě9tČ@iX˜Čź'!;ň˘ňDNô*xŽđ<żs˙íˇßžżżő[ż5Ű­ÄëF;Ó°˝Rԍ•őVćĺ@ĘĄČKä‰ýx“‡^řY”éKÜŤW ˝fPGžĄß˘íëśW|a žT$ăĺSž!l_ڀßěx0| ő*@Űc/ö]ű—:¨@?őGIôqţF/’i(ŸüąUęf8dâ: =ú .\‡TŃÇ g=ëY9čöŠžP[LÄtMůä&ŤDŒöeŠ}r„~„l”O]¸źéƒ´7ýƒ6@˛č;ĘH>´‘„8ěĘI őŠÄ¸8róل żž‰xŽú;†Óoicň~ŘĂ6#›éŮ=ńmř’qZcý=킌L@x†ö’ČĂߒíŹ+˛R>r0a‡Ú d+Ç1A§hwťtý%ÚÖ>DŠť¤ "Źxăr|şŘ‚˙8mě҃—ŽŻĄiçľâţ¤8nů.=wîljcĐ Œ,ž;.œěŘşCâÝ˝DĹ9Š€Š@J\s vńŽĺ]<Éf<)T@Ď9xőĘ ďÍ3œk†âA Ë Ť› ­KwלŚ‚Ex Ú9‰2ŠłŔRAb×qCB…@âěÄl_܍űL)§)œĹşîíĄ{CŹŹ3‰‚y%s)Ăč8áúužQŚŹĘEŮĽŒ,•2ÖŠ ŕź´bcż× ‘hۢëތu:ˇ’ç“Ú‹~<?OŃn”]ýĆő°šŸŔĘöšŽz–,SÚtîuЅœ`żëîĎŚĹŮĹ‚Ąďçö˛V\\ŰŇp!Ů;ă\—÷SôԐőŘW X* §Ú‘÷x­čx]ňîjŒ6jq ˆk;ó2ERÁś“lĘ˹Ϙ‰O|f6”ƒ"'ńčüčďłYgzBP`š2śŢT´Í(WBdĐO$l`“ŃŰM%î,f:‰ ě4lúÚ:́îvy ‰G…qŚÝĺ{ƒ–8.׿ӌđAő U,–TĆÎđZ3 )“:úMšŤT¸Y}öśÂ8ëž{îš;çUOť­łeϰžĆöϸĆsě[BH[ŸÜ×Ç÷CWB¨ä6ŇäqđŕŕÜěýpúô š?[ßY_I•\u?Š3ՃP$=GĎ#’ęăťM›Œő’„źaÖď)_{sLqď{eŒĽ??ä!…0ąOűţłŘOűk¨ŁĂINőZň(ďşÜΛ;ąŃWôB’ á’R+ă8÷^ô:űxě“ŃSH$Ś /I)ĽŒĹtâ3žoy˝zpÄýŮ:XÎú|$ƒÄoë֎ńúęŕpfoqÇą…wF&ą¤4ľY›"é§-c—vi—._ÚíĂíŇ.=p)zT3ńďr ÷OÓ:ʟœŤňy˙űߟçš`+F÷ٸOĐŚˇ˝ímŮkřĹŇś1 ÎGI.wRnç81š–ž’éĺ/y>đKřs0ŠLřߒîËäR˝‹\+éR5Đ]âľîžť üí§ß~ăo‹ćĂľ‡ň˝1ęw(„ŕ2Ą‹ Ah€JÝŔ‘<ýÍÉa~ 4Lů¸ůĆó€däđÇ߄tŒ lî`tBůä-ËÇçôú@9\xĺ:dđä˛S@=ňzz˘ş€ůсrôčĹSýęŔzů |ôBůč‚ň‘g?ôĄe†ržŕ/ČŔ`œôť˜äuÀ6@}hC@{läE/zQśm ś[Ôżc+ i‚ýB†…Ş$ţŚ/HŘ –##upŠÍJXÚś‰ŒÎ ΐ°äŃÝĺPČCŮÜÉńĺCů’×śAˇ´a –k;Ř­ĄQâ†z§|ۏvĹăúĺâ)˝?@Ú |71ĐŤa‡Z |lྯ}íä˛Roü›1RuŕoĆ Ú›4‚¸¨§|=SĂŐ FdĐóN+yŃô1OaH0‘°$á‰{)Ÿ~‹lčUýSgÚŢĐH†P!?ú!„Aޏ)ĘßčTőqœĹiěĐ>dÒ†ƒ2Š:p Ĺîř›â^C%ľ›zÂ~=MŚçě´_ęΤ [`ŇA_ĐK…aTÜÔA6~‹úЍŃ$ű¸{ן|2=ôĆÓœÜlr.ŇţžąÁ݌]…vÝl|7fôś  ]şŠmłňŠ;é^vľ§ŻĎ3?(›Ÿö™ťÓWßú´´Kť´Knjçń÷8_٥˗xWţÜ/ž-ý§Ÿ~ó čˆ!L+ó÷⪞űœßGO ­ úrFŕ=)P%Ů;6‹Ć˝x-›9NJ%|N%%k+%NźĎŚ3ŢË)÷Ž€KíFM xÇwz<éëľžDpÚß}WÍżA2ÄŢVÚ7ŠœuCÉđ s˛‡@§Ä ‰˙Ä POSȐy8¸žďŇa¤Gŕ/‚‚jÖ%zą>Öľ´O ůažđ<œîOéhHewž_Ú4zŞs,ç§ÓüŹW˛őŸş4łË–P ]c;S[­VӚćĆ2Đ!S~FŮÖŤ9! ‚źš˝77ç#›yâŔý°:˛.Äa?Ěő=FD!˝áxú9ÉI˝ŮfífdĚWůâi˙ؖŢÁFŻGYâiuú§dč:ě7cËjœłްô/Ö­˝ŻՃKŠßAЧÔcťˇ g”Őßl—x_KŠç 2<ÁŹŤG›6Ž †LĐŚĚg’o Ůąoá'ٖÝ4†-úĺlm‘ó§ńÉ:—rEo›˙đ`€^é]ÇEBÔ6KKč‘(Ç­öŔEˇ.ý8Űţŗ̌7ůę ˘ęéh¨Ž˘÷j&śMo3Ąd˜ľO›ÔG\ËŞ—H4E€>?ˇ(~|V}Dâ‰íc’PŔzň„˝†Ćűę{Ş’Ű"1$s]†ać%“(6z9wpžęcQŢoă@×2ô‹a|~/œfLăxGŽŘBZőTӒݢxoë$öˇmä/ď÷°Šc€„˝ß=ÓÖܡ ö ˛–pßśwf´ŰËńŻľé5cIWőë3}裌łŤy_śýńÓg|/ßřĐSéEˇ}Uú˘Ď˙ éäŠŮ äĐ2ZĚö ę{×ďÝ~Á•J—sżŕazún-ň ¤{ÓůŽżěŇ.]žä{Ű÷žxéĄ}Č´s`ÍůĆ7ž1ăßřß8­Çă¨Ý#7ß7źá éUŻzŐŹü8§ˆż­Ă†‹ŻˆCĹy`üwL+ś•iyž#$ië}qžçßĎňž”wů…Ęœć*ăż ĄˇOßůß™žýěgOóZ1*S;ŻŢVou÷$řŢŕKOĽČÍç3ă÷Şů ă÷:|†đÝ~ŇţžŘwűď6ÝëË÷ş!Xlĺnč@nř ódźěA:Ccpŕ ŔËÓĚqĹłől|Œ’FĂvR (H  Ě7@Ÿ"şÇ1V€jî4…\'Ű€ ůQ'’ůR7C@čmî§^€ˆĆ¤SzŞ=đ;€2şA_Ńł€ő'?@TäÄŤëšÂ“íqĄk "@j~GŻęQVš )˙ć^˝}pú\„ ŠrşÁŔ€ÄnœĆvŁ>”'q†{Ń#˛“ĚóČĂ3ÚűqŕÖ%PŐ]iňŹ"Pď&ečA˝˘#C@Puç^tĂoŘ.eŰÚ¤HpŁEÂőwӏ„­á˝‚˛ ó@š@l°ş`ƒę^˝ăáO$.E`űĄ}¤P>ăG$œ9‰aLŇËý mOv¨Côař úy(lţmř ۏ˛Đ?c“}Ç1„{ź×0=<"ŮÝi—ô[˝ă´„3Ú ýчě§Ř-íďŚIÜÜE†&1”ŒÄ ݇bč€Đ.bn˝őÖLśjű‚cůŃvNđŠGťůM őĂ}äůń˝5ÝxúäŽ`qĽËšar_ [đďÚz—.W:.›yν#ۥ˟$Xźň§Ţ´|uƒ¤mƒčAđ-đŃCC8ƒ Q †ŽČ]ŽG°qŠpŠ RÎĎyqźƒuӉÝőŹ>ÖŻ=9S[˙€ŕż÷GĐ´%ŔG?nŐúÂÎNŕ–gWÓ;Ž”SNůňáńić\†ůY$+;ßa ЁU’zui¨hbqÓ˲bý]7E˛I}o3ÂJlŸÚ.•ěRĺYĚö,ÇúX`wŻÜ}!٢闋Y˝ËÖi˜Éf˝#řXOsQ˝ÉE xP9îü4çŸC#¸žÝë5œM.ŁŰÔđ”í•n˜Në˝×óëUżĂźłďf¤măelŸHQżÚ°×c{EˆíŰĆMNB€Ä>†' €g󩄥âe#ÎӊÜýčńâlţ›šˇŢcYążŐúÔĐ<‡9DJąǃÖÎăZ%ö1ëĺ¸ŕßpŽňŽ΄ĆŔÖAďUŇD’č§05€ťY&Žźľœé=˜Ę=‡ŤâÄń!ž'÷öyž+AŹх’×AçÎä6Z„tëš1ډuvż@;n8v•q§Ż$ƒâŠ‚š5uĂ.÷–„ ŮĎŢJ ĄÚP!|¤ĐďËő岆lńŢö0@Ü|ŢÖ6ę21â8ě}Ó¸ŠŢ6ň.ƒ>bŘ@Ëöý2ĺAÝÇ0™zťˆ–ř) ü:ŰG$uōn›b1†ć˜Ćô6¤ÔĽoňhá{ŻK㝸’ƒ¸u­ÖcxŚąN‘ß_уN;ł?ĹńÁą-#6cŢůƒółvŃEűţp?!ćűŁ̨[óißS3}usRU˙Ś{Ń۲žĂmďú~LłĐ,ć߅čvźPÎÉS{éĽßňˆôE_°#X\MérîěNşˇţ°k“]ڥ˗âşĚżyOž8ążÁ0>ş1œü„ýzŔöÎ/5qhü?ţÇ˙˜>×ÄxĚü€ńÚůě•NŤ‘`ϡó‘+Đťţ=ôű÷ţŢßKßđ ߐ.wڌą;‚Ĺ–kÁâ˙đß!a‚‰4Ŕœŕ­“Zv€§†Ţ°ĂTrżĄ3˛`ăd_—ń6ôB!ШW‰’”đ[šüŞúÝŹC>m€Úč ÁEFm’8óȄčŸöĐí1żcç„:ÁnąAî“, gICşóĽ/điln´ő2Îż”Ó×\ÔkoŘ÷ňö%yˆ<Đš/%ă_Ň.Ü šBÄ îĺ=&š›ŃŤ„,:u^é$r=ÓH1Dňh،ŽLŁHĄ ´)toý%K¨ _äŤôj€~Ü` ,î}Ď{ޓĺ{Ć3ž‘m!şŁt !?ÂQč]Ą3ČÔ›7 ĎĹĐ(č€ň$§H:ĄÎ÷ÜPlŚŘľś†×RľŮbßą.Öą”Ců‚’6gżlcTÂGúˇőƒ8Ĺua.‰9ĺÚ0Ĺ^úĹQĎŮÖÑ緕 cÁ}§ő†‰ˆSž&Ď&öˇ\—ŐAśŻ:ÖÖśľŸ˘[ šnŽrj€ôŒ-Ŕý×OţÝc[nężôŕÂPČ%ĘŮî-ŮV-Ę}ÝlꍁŇ4žĹ1'öh{ę8Úx|çD˝c‡ÁƒNKĆp_C™śŔcÝ[ăůc"KDÝńíže}G-fvm9Á"Ő:y_śý>ČŇEŇa*sąunÇ\WúŔbôl˛>œŚ†š>Ů~‡qAýÄwA|;žIȈý1ďlŢÓC ŹŠŸždZ=ÄvÔfľM÷"ą&–÷â8űöól-ĚWâ;:ß7Œ$śąŒ–ŘŃ,ř@°řöo~řŽ`q•ĽËš_°#X<8iŰ|8ŚëŠMZOŰíű|—véJ'ç ÓÚccƒĹŤ~ ŻŢ„NĄ‚yÇŕšâs!W°‡˙ţŃ?úœmÚCýôŒu%“Cœ]éw´x…¸›‡Ÿ)÷Ÿ˙óžąË™Ž‚Ĺ2]'é-oyË䕁“ÄŽíĂČÜäƉą”ŃA ż Poˆ ‹üťČŸűIůćy^Dtr˝;ŞëÖމ5ůBx(ő´”á)řź]Ěs :żţ3h ›ĽŔ‹)î§ź Dđ$/=wxꞼgŔ3\wÁ 0zÇwdR€ëžđ„\ÁnĘ'/I%zhŘ˝a°‘řB}9%Ošn !{táçâ{  AjęBůő´@ą:@_ž'QÚ٨'@9r;HQ€Mëoü\˝ 3v€}ń Ţ)Đză;ů ބ{$W¸04T z‚0B˝ôš"ČďżăF1`<÷rýŠęę‰ţFzdţšŻůš‰Ł "n%y¸X44ĺK8҆šŸ{Ń3u(§<ÚRWEü.™™  čY ö;ĘÂŽ¨—Ţ]¸Ť+_uĂŤÄ{˘>´Żő0ާbôźÂuękß%/ě—2R ô1žç^î3^gČÉ5eč5ƒňŃ5yĄCíGR÷ÓěťŘPôĘ@ل:ůřÇ?žË|Üă—ÇCSÄÍ˝żĐżięKč‘0”\†C˘­$äH ?žŠ‹d#îÁ–MČGrěŠuę=џ‘ IČŔ X˛mƒŽô‚LhŒ=‘¸n›Ç „vAţ´/÷8^ę ČpFţŽ‘hĂÓء)Ÿ>dô˛ŹÚ~ÜŕĽméㆀĄ ÉKčPůCxV[düâ^7Ë,× “ä=I#ž šˇEÝ.íŇś´ł™]ú\R;ĆťÉwţüA:îŕ‚ĎÝ;ÁâNšČűśč\î-˛ŰĺĺHz‹ďO9NŠžŻŕÖ0ĄÎŁ„6L)zOˆŕşŔ„ r{*ĆšƒUôśşń]\˘{Š—4ŕӑÓüĺžąëIlÁÝ9°WŔţaFšˆŔ“„ @á¸Zîé&Ň{pŰ$¨#ď)ŕ‡ÉÖ âiń¨;D[Żť‰ â<źžÂíF€ŻË^˜o97‹ŔóQÂGľAuÝ˝Ç9ą¤Ţö4ś bŐÇ<ď|ňş›Ÿ"/€ŕ*f=śWőTQŰy˜äŃľ˙ü„ňœHśÎŽÜ+ÁĽËŔĺ:% „•5Úx:z&2D܆ŠÝ`şĄ<úÔét°yŢ9dąŮ ř•˛ĘéóŐZ‚D—IşŮćŇ|}ƒ*qhUŔ=€8@ź>5˘a˛ë!š×’f6Úö5ę((í=öąěwţkťŞ÷Ňî…Xẍ€ŕÝH(8_€ëĂ❠´šűB˔&ŕuîĽĐŚŹ˙ôŔRN͝˜yŒ‡WĘiűšŸř¸^ŹwZŰ÷fô°r„čŇuS?ČĎĺ˙Ő1ł^YR%4ÄöĘŻâQŽLÄčű#ĺdťŮyôŸńol§ËýÂ>°)š[ĺp2Ĺ FąSÉ7cŻ›xHL¤s˝1°Ś7 ­÷ÔąŁŽ_qŹÖ´í˙'÷Ęţ‹ľ6şîłœ’DčÓĽÍDzҎëÉ6˘ç‰Úů˙3­'\ˇLDéŚCS˙nl:z[Šż•z UY€úrć,ށ%ĽĐÎ<ëa÷/ô8Šž#Y!ö+ÇSż#!ą)ƒî™¤˛Ě„€HRČ”ĂóEŘuÇżž0´ÖĹĂE&‰őęeÓ7şĺŹ_Ďë]ß˝đ<ŘĆą@҃v A,RąIë;‘aR Š1÷ś2÷î(uu~ŕޙc÷HĆDGžÓŸ"yŁď†é˘aŤÝçőßĹÚś{Ǩ{›źŇœŘĆxx§żť´KW Ĺ÷Ü6Ăě.r˙ƒ›˜1[cǙŕAúHćŢŁŽĺD‹œŔťďH´,ďůľKťtĽSœ÷Úůďb°¸÷˝ď}[ů+ĺŻl=¤|ąôĘWžň~“+(/z‘8í•NĚ3(Wü0ʃî~đ0íŇŃtÝ,˜¸pşŘđT;ßL:é€\Xt„čúŢÓü<üˆeýëš N×÷|KÎŕyŽĺ.Âé€ô€š†/!d¤ĺăćrN`NWň$ę€LČ QQ ßĐ#‚zˇ`˛/YzóźŔ72 €Ąúúŕ?˜ŻÔß|óÍÓý$î!OÉ|SŚŚ'ô I˘ŁJV@W´ßę ‚´ÔĂűÉpTO­nÔ@2‰1ŹŽ{ęb=M *í…lč"€„ţћ>×){2áAř ě9<+Üyç(G6)ÜKŮ~“Ü(FntEŰ"Ł„uC{J€Ń ŕš­ő$?žÁá7ó7ó˝´ś[OlÍ'FȀţ¨Wԁm@[Kr@g†Î <Ő/“ }b[ČŰAaÜH%Ĺť‘-Š„<ČOĎ’(Ÿ2(›žcPntG{ىÜĂG}ŗ´ůË:ŒDňł ÔíĽ +H˜P—ö! ?(Ÿ6YĂË™hęK&Ż'?ůÉ9_őÉu˝œpż¤/ň¸"‰Ů ěHvb˛Á=ôQžĂ#IŔq űˇ˙9ÖHŁOÂ$zů ú…&7íÎ#Ú2“O$ŤřÍďԁ{Gő¤Áł”#aÍśqlsŹ–H‚îhɆâ~7DCŁ ä­ç úąA{$5Y6ßÜCůţđ‡sŢO|âł~Ł čJKŰF.É?ŃCq]IČ­§ôMý°ĺöÄŰ.íŇĽŚbň˝K×OŠö☞ăWŻF¤äž¤áÚ˛ÁÃUţ,6ę]Ö}Ýóëvăđ•H‚¤r"AyhçVńÄqˇüwÉ7œĆsBI Îřť ™hŠójÉ EŚE2셀P•Mđ¤Aěâ1AŮZ=ÂÂÜ yž”CP§Ý„ňţř|Kލ@ějÓj˜H>( ç:œÖ^'§$–#F*óÍz:ŠyáXČOrD\Ÿ´äˆx:ÜuBKziůѢFŇČbŽ§Ž Żş+@]iOIŔ4y&.ʇěáB2ŠžJćŕözF ĺp!śgWŰ(§yłžKĄ­W“ýL䝍˜l€ž ť{ű‡\\gP´Ë &`fŽăa!ÂdĐq(ŕů0•“F‚DšGđąÚf —“É(a$b÷yCž°ëaN$8 VWűmAÎhs†äkű@™°żŘŰ2Iđ)ýŹžX/:„ÝO°Ŕ?wî|&S7,Jx×7ČÁÇ=˘Ú׊=•~ZCĂXÉ9Ö5śď6p;ŽÄŽ–[B´`?ý˘ßęÉ Űúޔ;’|?Ĺ+K$ĐÇç‡4ŇŃ*ŘA kÔgbĎ } ąŃdœn§W°Ç8ţ­×˲QĆu>öŇ\žźÚPŃq?‘2&O ëńD&€ŒűÓXh_.˙–,6ľ}cm>œaâ’ămţ˝yä~ÝěsÄąÇý IóŐSGč§#Hď}źO‹-§mł8’\ŻbŻî+šŽoÇĂľăŇHşé›ú”ń,ĺöÉevĹËÁŒˆą žŽ¸>ę&RZ_<‰ä6ŢčxšXąëh‘œÇŇÖk‰¤ŠH ńZž?ÎƙŘ&’ŢÚwC#ŹłG‘އĹ4îŕƒ$îăEÝzô´›†ůÜz"¸ŽF˛Ü|\Œc.FIËŹ›qcj÷eżeJş[÷íŇՔŚĹSó{ˇ}}x•ŹąĘřżÁ-ÎÎČsyb"Ź^éÜŮóăxt8â[{yž×Mť´KW2ľ¸•óąA°pJöÖ ŤNbžçHńťľŰWżúŐŮ3}Lí^{$÷ú­jńŁ™×Š ô‹ő™műűíšVâ,óƒ8Oźˇ2/;ˆ÷Ĺ==…ë5>z=űŘÇ>–~ę§~*ýżń7Śű/ľœX^œo_/éş!XŕMÍ)ŕœ| Î ’ ˘ę‘P‘çMœ.xă‚Ůű%u|zr€OOP œ 9Ä]ÉKˆ0ÔŔ*€+ŠÝœ éÝăçYOĘ1܃ÄŽ!‡§ŐÉWy#PŻNÓ3`q/ bÜh4šB>†'đ˜d…R“§ŕ9 5˛É (çƒЗuŚÍ˘7ŰÁÍPĘC>CtŞ„ňhCôˆl P†ˆĄţ´…ž ,_W8€äŞëçůi~O#÷MÝç›4‹Äƒč‹°­ k—ô|Át"ée˘\Ľ>5”œáź/‚Ž•đâfÓj&ť„ çVzŁđYe´ßŠŰ$şß÷ިEPš.-šź„XůRóěbňFáú2žzŽő,.ď Ń!Ú×|SŹ”ă 1d‹äˆ |Eçý0Ůt ł1Ldœꥐ ŠT$Háň:ĺüFˇ›˙J蹓Ĺćř˙~t͸CJTč#{¨Čŕčx˛>đQOĹăľsí˘Eúqě˛×mäŠ8Uˇ­—‡Öó ×ô’XűE%,č}Ł$]ô/'/.•źľĘíĚx3—i‘ô˜“=ä6ZŽóţbëgÇľĄŤĽŒ˝ŹşeěgĽO-&/(ŃcŸˆd!íWrÉ6°ž ā4çqo%yŚ´§$žűw ë`çë`űą˙&ˇÄ5u5čĽdHÁs`ö?,—‹Š>m==|ÂIŮsă:çěŮsĄ,Ňz˝šé3ݑhVĆź@Đ˝M,&KÝ7ńĂ/•6ŠÄů{~xÇ6œ“ÉҌXǧ؎q\›•Ň×pPłqrkˇšŮ@Źwk/ńý§Žk%ďÇ>´ n‡šŹĂLL‰äş<ćć dŹlĎE×ę, ž?Ň䃚ëâ{1‘6eyşQˇQ‡í{Ŕ¤;çQî望–ĚfťŐPPsŇF´seˆďř8×@ćĺ޲|Â<Ąx2ZL„Ÿč­B"Űśw|×Ď˝¨Ěl‚ëěo@~\Ď˝|Lý´/‹h“ŘM€at@AÔÖ­Šl(1@Ą€3ŕ€Ľ'Šv)ƒÎĚżőŹ`H ˝R&ŕĂá~î('Ż–•ĺItţÍ=€…‚€…ȃüőxĄ'É zHčw!@žúž1ŹÇDYœĚfŕyä#™‰ä H¨‹LClč zJÝÓ䂃ČČ.Hœ-HN’ BŃšúöÄ€­:ŕ[š wÂËó†kQ´rĘžLFg1|ůIƐ@cHň˘ŠrńM‘}ńĚW~ĺWf<ĺÎŇ:ĹłöĹ˝’+üŸŁîç9äŚ-ՁşF˙ď~÷ť3Јk_˙ő_Ÿűś#H-¸Ź}P6 ľvC’CBnôĆýşŇ •Łţ Uƒ~é†WŹ`ůč)z7Ą !W -ႚ>Ěozë@&ÚF@_€]2 h7í€ň$/ĹStŐťy‘Ż >ȌCrĂűß˙ţœn­ GŘ'Ő/ĎaČ-iËp:“˘gôƒ|čŸţ Ʉ2Šä)ؚԋ>+q"zFńˇź¸ug(~“čĄœęŔDyöCłxúËú냏De°ôd!éH‘¤4‰X†ăˆcŠc1ů.„öÔS:ň4$×ô#yĆžHrEď.zőxfűĆS0ęFgő"ƒŽËa˜~ęGY7#ŮŚTG¤šĹŹÍš§„ I#ˆ\Úx`wÜ/*óţĹfŽîúŻß G‹ŕřtJ~Ó&zɈuŒöÁ䨃ő¸š;őÇ4+úBvÉ!Dşˆ;%,HŽ{ßNęŠcĺDzJÚúhËJRO‹˘§Řďc}Ëăft=´´šwÓօxu~ ‰G‘“'OM^ecŮvĆ:+ű"…1*˛¤ôÁŘ_â¸0jĄ2;EˆvĆ}cžŁ—‡¨+zm;×;lG?öü7í;DŇzÖĆYÖžś÷Ĺ6Ş$€y(eá[œzá÷zęťd1ë_՞‹Gě‰p z„‘,XƏR^&í ă¸1Ş7÷ŸĄ ru“çŒ8[?űWś•T<{đ>^NŽęç!ł"y'žŐی ôÖĽn6Oˆď81 q~â^nëeĽŒ;ÁŤĆşŽůŚ=ôťčS ü̈!#9#đ‹ďŽ/š$ňÓ.íŇՑŽ=rý) ç¨ţvźŇ8Çf>żůď\&?ö[ąŁ]şşŇ6ŕüzÚ/`ń—˙ň—g,M z—‹kŰřŽ%Ą“׿ţő3[ŢŚłř-~ؒ<ŰźďË8ŃŽgŽsÖGœÄň>×2ŰúľżĹ=ˇnÓŤé]ďzWzń‹_|Q9â:ÜyąÉuA$‘^ëéş%゠Np•ße5bŚBś Sę˘PÔ°|\x8Ńc`âŁÄIˆlt7˜l{BŢPş¸ČőD?ĺIVpŔ Fvj Ÿ{ä$„E Č)(‰Ź€„€~ä)ěF"ŕëwܑëúŒg<#ÝtÓM“šßÓîÔi\ G€:ž.Ň­żőCv=]Häw@¤>‚¨ü’€ŕŁZ;ŠŽkԑ!ÚĺKâ@ćĚŔLeăT˘ĺKŽ‘hƒ× l†ßŠ …Âo”mˆU.ş¸—śŕĽl~ĂÎhs^ÔŰü†î¸Oâ“d žŠ—žlĺP×x@ŕďG?úљ¨í`(Y{ŇŤ€ šäd7Œ‹›”Í Œç!Ů #={čQ[<źÇś¨/íŕb;á:zÖSí‹Žtĺ$éČ:ń}聄ţĘuű˘žPřMŰ'_Ú y Ëa˛| ’$ DŇNLČŠw˝¨čŮAO5‚řčÍşIö¨ç7e@OxůČG>’óyĚc3!âËŢEžniy^ĎČL{śB˛ c÷CĐnňi´lô'dÖÓ „űú„Q-Ę`ߤ}iKʡ?ča(ećÂíę&„vŇňȓ˛7Ć5Žă9Éva|¤‰ ’YhO=B`+†ł‘tCÉč‰Ĺ1}9Ž˘&nţ’$‚ďG?úќďSŸúÔ\ž„$jđ›cœ„ ú¸ď'h†$AwžSĐ d#˝ŠOżĹÝ.]ľiÜš{3–˝óďHďÜLŽëésHŚ7¤Űnť-‡Š:ś)l ĄŸ_˙ő_OĎÝčä–[n÷šŽŽĐŕJޘ@ј+—!ACýƒ?řĂO—ÇÄČ; OOźßŽdRž7ôbĺéö+1#Ţ(ä>Ţko|ă3a0ďűŔ>0…­˛×JrÎ7Zwú‘Œěľn$fx ÷¸x!4!YNí˝żxěóŠęňž?‘=ä¸ç!˙(Ÿ'yťN€—ůDmŰ0ĽÖMyŤ¸Š [^ýÔžĆ5żę #Ľ¸Š]Ú¨ťz˝†Nąœ4ŤS-g}ŕŠD'ŻÇzDď‚Ö‹€ľ¸ Žä…¸Á¤îÜđŮJœČ-Ųʟ:>ßVGCÓŐÓzVśuéŚň9—G6ŕâ‰ěRčŔźeŞd•QŤ"dŐeő"á˘lăŘ4Î)˛ĚÓďĂՕSë9|​C ä:těyÔ Ž ‹ô#YdóßR%ăRô&b˙™Ľ"yÂ69 ä€Ř粡’E9!×cÚPŰÎó~]€œöĺ œćŻÄ§Ňfľ˙ĹuG$2œۨ‚˛’>C ý˘`ľrƒŇđ1ľžqěâúb1ˇí Çů‘ˆÉ@qŻĂ ËüˢsňőĄžĂőn &Ëáx ů`$ŘVŽ%ŐvGňŇşôÝ~ŃMž­rŸď6ő_3öÎÚhF<*Q,Ö+‡!uĺ>@Ç므€yLcvWě-—3†)DĄčý˘›HJ1bŁýŽJȈҗŇěĄˇŰąŹ‘‹GěĄŘs –`ÓŠÚX'˛äH˛Č×č;Ýp„PӎAuĚ­!šŞ,ýTFK˜Ń{kM÷CôĚzÔ;ďƒu 3“ÇúLúęR*5őY˙ľżŚ +D í:;6™l9“8ˆ2zŮp 1\r${D]hS)aœ§Z—E‡âű§%/Eoۈ,Œ™Ť!„nm;‚Ž .ăĂoîĄä޲8ú^ëú91$–‘ë;¤)”I|×O Čz šŹŤÝvÁ.]5Š@{ç;ŢšYߑÁzk™ç>÷šWŐ~}+“źçaţfă÷Jď}ď{ózřYĎzV^ë=X)’ü|oœ;7Kö`$ŹžímoË{ČňÖø˥Ĺg>ó™?8ŽÉý‚‡?üáÓ~Á'>ń[ů@çśý‚k)1çďzä#‘q‰¸.6ľ6˙f˙ý›˝Ëxpf[ßö7hŠg´kĐ •ůš¤ś|çPŕ z{‹ó  Őíţ”éo\я‡š/TC°řžďůžŒ{]JY-ĄÄy—‘އt]ŃĐ\”Ńqů0= ĐxźÜÔ~çw~'żŔř(œb@‚Ă‘Ůe ^A/žw˛O~.ÂbčdôđŅźĄF$Źéő@ŕ‘Ä˝‚íÖI(ëSŸúÔl,@mçs"@ÝŃĆĘŕĂ ĆČÍď´v`6i‘—ržů›ży yAB’%ř đŸĆG^‚ĚqcŒşCVŕ:ŕ+€o”pT€šëčМşÜtÓMG@rt¨' źÄeSî ëWQO‘0îč‰äéOú䍁‰PÔ˛2Aâ;6Qś)éHO)–ŻÄqŒöă7>ś;˙Ś˝)ƒú3.R.ŕă&eHLŁž´ƒCâ‰=¸ ƒ“ptÇ7‹”‰g CyöEmT/-ô!dŕůJöĄuŔud0œcśŔ˝ńt¤}‰źÉCŇňŇôí\o6$ę÷+żň+šŹoüĆoĚÄ'm zň$š›Ç†br#(ęŔą’ž¸FŘśămœPíŇ.]=Ќďżűżţwşýö˙’mxť›÷Řř˙!ßTtÄ"îŻxEC~˙÷~?}ď÷~oşĺ–›§ Đמö5›ů×'ňďŒÇfrîčÜjÚä ˙šdżŸýٟÍä5IťŰăă‡>ôĄüžůÖoýÖLFťŠĚ_úŃŁ\űéÁHÎ;ŘXúɟüÉÉŰĄŔxgüŰűoóXź§żökżv"+\+ Q#(A˘Ôľ`wtŃyŤNô†ačZv&Úůëţţ‰ ö”°mg§ ×]ě°ż”yĎzɇ˝H(‹ňI„X݁!ĆzŽŕlÜě‰@‘w3 ^ď U5E"F$|,H]ĄŽÓ0H\8ŘşŮAA뙒DçSőĘá\đÄDÖ-cÎ*ƒ”%|Ăü4żßÎĺŰ:ĹşG[ˆ 弍VĐxę3ńžXŰ;ÚfôňQdY„ś\7m€ŢÔ ÝŹ,WVtÂ÷O1/3 #|Ţü_$)đŢíł=Ž3(@ňÄsTî=uęt&.LëӔŽ‹šônÖp6ĂpÚeŁŁßÄSM€ďŇTV7íâfč6/Ńž+yŁzƒhÁDmĄčŽ€ĚĺýzvOy6ŽńëY˜ŰËöôˇ¸vPîŇfiŁŰâaݐÝOoGO‚E2DŔSÓ×]cEp}ŹSńR!čűž}Z{ ڞI<ůžĹXv)-fĆfŰĺʰfú }!4ô™HQOŤ‰¤PH%ÄLô¸űĄuhOűťżC+x¸É5ťĄ´‰’gąw %\ËčacôLQw=ŁPçx °)‹îŞ×!ÓŢŢr’ľxHqœŒcĂ0‘5"řނsŘĺ6OC™ÔŃx@‰ďťřN’ŹQŰ~qd<´Ĺń°Ôeoڋ0iNMŠ>Vu”í'eý:~[ŻŐáHŞu—űŹ€ŃŁKöŇ1ę†a aÓU}’Ň*čzoňXŇö HD˝G]“â|ŔP'łţćžŤôž1"UěłŢĎłŃ#E}7nó#qˆcÜD´ˆś™ ýőóđ31TŐú°†PÚÉ&łwăčáÂ磇]ÚĽŤ)ýîďş_đ{łńŐ}°ŤiżŔńĆPlÔZŠ“?öc?–÷ŸŮüŽďřŽÉěŕŰżýŰóŢâ•L-ĄK0=X^,8˜řŸ˙óÎ=`ť-1˛f]žý8$çOx[FWěđb…šÔżů7˙&ďaŁöÔ!6]kű%Lú_ÜĚ[Nާ÷śž-nĺobˇÜ/şíŢű›Ú<)ĎůQ,׵Õ(Ór)˝JżˇÄ3č˘ÜĽ”Ő–köIŻ—tÝ, ›ńŐ_ýŐÓÉ|` Ź'^^ Ԁšxpc[@΄ču#ÄčČĂÓô”§7 büĆŠpÁ< ß"@ QÝ!.g'â&Œ†‡l¨|xŃ ,꒟ßé¨/Á/,¤'%9źéMoĘßlĘršPpŰInC pÍ\@_ç@şhÁa˝F /îuńFžüCdsmš‚äÂF“ö5\ “ţŚ|tahd‰á8lgĘgc€™DůčůâIr˧\ę$Ě ŻLä†qáyÚđgö°‡M5hţćwžc˛€űŚ_űľ_ËíC[îD;Œ›Hč‹ű‘˙/xA2ěyéU=ڍŻöH>Řźž9°ol҈ƒŤ–ě㌲ť0†<‚˜$ÓîÔ|”üącúĽz$7܌ƒŤ‹WĂďĨ2¸Đ6\mƒ ȅŠ ƒlöU&†€řĄwúdôÓÚc GŽ$ `çz7!?ęˆ ‚äô“מöľŮ&÷¸ÇĺI ÷¸á/ńś ?)˛ęá#Ú˘Dę‡ýęƜ:Ň÷)š)C;˘ôŔł´ňa‡˛ôlé‡kzôa‚†={ZÇMNţÖ[2č>Ë>‰Đʀž‘ SȌě’nź×I˝žIbٖŻęć.ş¤^Ž 1„rÓž\w<Đł„!u¸‡žFť>ďyĎËśŽ=Z>e`<ƒÝă˝Ĺw‘6n¸&˙’ϐAœcŽžhvi—ŽŚtĎ=wçń˛]¨Đ™W÷šâß˙űŸÇ9›'çď|oşů–GćąöMozsžť0—xá _ř m\„ř^›ĐyS<]™„÷ ž{!śó.c)D 6 žö´§]Q‚Ĺ0şdŽěćřë;× 5t \ČËF śÄż™[řžžśŇЛ~ć![˘kÉň{ÍÁšA\;Tr`u}.έ[Ô{îHčԐ{žË-Ďv IĆlŻe9ő AÁysœ—•öŞ€u×%|D`%ڤ׼2đľ*puOžGŕÖ5WœE@ĘőZë"šuWÁ¨r–ܤэźŽF# %x-č YH-ýŒX7wهŒŘ/ă˝ŐQo槡Ű(‚RQˇÚCŐAQőjPH,‹ŮƗú,ĺf]h“ąîĂëM đlo*Űşĺçún%[Ňdžňěa%ř,2A żň÷œšg3ˇţěäm-ś=ޖË v}9‰ʲŸXŸ1˜ůTuŞ`zě#‘ˆŁM´oŢďŢ÷š'aje)`2e•:¤G˘Fi㠔űk˝°ô32…}İ-€Íߎ %xăÉö[ldN–ąF[ŒÄ’"ă`ŇU &OD€~ű47˘N[˘×"Ç9űnGX‚ýiŒ‚Ląčűf<í&˘řl37ČCö\QĂ9đŇ-ú‰ •úŐdă™,ÁŠţ‘`ƒ­.GRE%¤Ôúx¨ĹńB"˝Ą9ľť"_7.8—7ň­G÷ć{#€áM{\.÷'ۏď‹HœjÇĂč Ňun[´ge˛Xˇe>×5Ċ:.‚Ĺň,'ːć~"ě3ŃĚěä&Ąrç!8âxhŁ˙3÷œŮ´Ëšé€€etúĹčz¨d~ŮĎ÷ć ™cb)k#ËţţDúŔ3^Ÿ|÷ĹđęÍľ|ě[‘HŰiFţéű#$:dŻä´ƒšćÇzŰΑرő;šş‹}ľ}7Ćkîł"ëyĆ˝…x°bTÝfč­ĺĆ1Őźr}R)ç P+š¤ŸÚGťIťř ťtŚ{î>“Iuü+ăÂŐş_ Ľ¤Ë lnKx­ř‘ů‘iœľńŤ^őŞL˛Ŕ „úˇźĺ-ď˙ ÔÕ<€Őގ†{0ז졀Ý=˙ůĎOĎ~öł/¸_Ŕîíˇßž÷`đrœž=Ź ‘‚ä|"î<öą˝&÷ đ&yĂ §Ó}Mx\¸”„˝ƒI0´áĐŻd˘=˜ó2_Šs^ҕƒ(×uˆřŇĽ&tz1‚Ĺ˝•kdƒë%]7 =CĐôŘ|•Ř“§źYL¤döqŞœ °[o˝5ƒťLŽDuť0î„^đXWó‚˘ ƒš“˛đ,FHÎż/͸ůöt9I€\ü‰ LŢ!)pŕž2@‚`Óž}+ĎPg@>^VüÎK‰=߂•č‰úŇ 8S?Žëő€S^pââČEŽŕĄ ˝D  ڇşÚÁ‘=S_@ad ŃŢč“úó|$kđAgčÉäÂړ3” éĽ‡Ńƒ€Ôë< QÇSöč:zĺtwsE0ŰÍź `űűĹuŤá˙ď|gzűŰߞŸăHţ†řŐ_ýŐĚD¤m^ö˛—e;#Šň@WŢn~P´HțýSGň&D íh˘˝é'ô%C=ôLBôěI2Á"nŮŢ(\Lşeń Ф&žAúž^!”AByS.mČuĘ5„ 6dX ţŚŸŇ§é›üOŘÎč˝9Č#ýýD¨śĘóŘ9y Ă#šFŇ äňzÎsž“mR3$˝Ô kô†ššČ3ÔI q3›uĄnĹűăBÉĐ~ j8šËŸÔA äV0/=ŕ‰ţf˜BtĹ{„…ě_ýŤ5˙ĎôG˝iůŽlÉŠWs@vŽßŽ)iO’&`¸ëfd‚ŔĆš–ÚöîŠÓaHS;ă5ąYŠĎlŔęžpžá¨í”5Ć"lNpžP† Q€¸ZēŹiş'‚ęńôżĺľäˆZĎŤ:—Œ÷Ť‹¨[ÉČm}ŠLÝVŇB‡ 7Qć•{hVߞ>Ž$=W´ťšĂÇ9‘mcŠgôP@ňžpVŕK=XÇ:~GO-1§ÚĐáĚNhŁ˝˝9Cy"!3*ÉĆđ1ĂdďŮ{Ĺ^ˇÎ6ŔăáůLtp]¤ěY'hI93œs\ń>Ńw‹TőôS˝H¨¨ăh?J:7ŕ˙|łŽ<•˝ąÄąáđ°x'ÉuÄF@|A9ů÷ź‹˝Lň° Ęł…ěDŞcU YíΤM’b,îřnr\hCĹţçCśř…Đ2ŽĆ ÝŐąúLćpœ˛<ű•Ä$ˊöD]Ož:™öö—Yż…đ†ŮšÔ÷ cÇj(ÄąR§”C‡`ĹĆVš˝ ąa•ö K„L›rϞ=“óŽ}ęô áž8VTrÄa O4Ôń y—V›űÖëŠNę.zÉ$Œnî…Eť‘pÇxí"zŔŠďG‰-Đí5ŽOz”œIyzkIĂ0›÷H<ąŒ‰ÄӐł˘ÝIɌď…ćiˇ]°KWIĘű?öĘÍz÷- š˘&úžţćßü›é…/úśô`Ś8ůnŽűŽW*q€ŔĂe$Ęçđ$Łf”˝XĆĆ_ř…_ČĄŘžRÉ÷F$“Ž$Ŕ{oÉý‚G=ęQůĐ݅zá0şť’űWcŇĂ8{ě?‚B ˙žö îOc‘ĐľmíNňýŽíĐßĐ[$}ˇzŠűKŰÖÖío’’)W™íş!–ç.—RnüŽk.笅„\ćöč%,ÖŮňIěe˘[öębŠ$v×7É{&ojě•^IÂŘŽ‚…‹ ‹Eë‰4&Ż'ŔëčՂgxX9i΀ŠĐ@’ű"›Ç—ntkHâ75 Ŕ.şö÷ô6†D^€ŒΔĽ|ܸW6QJžźLČŻe1Ń‘Ž@4znŔ>‰ <Ă=lRłŃĎb÷%/yIΛç$Ş~!şďăytAz;śž=ôĚáć ŕ ĎŁ‰eĄV<\xŠŕY¨şcŔçYŔe‰,čE˘@Œóă›ďÜ ŃĹđ-\ó„-2ÄS#‚ôäK~\^Đŕ,í@yŠ#ú¤,= ¨ňĐsĎ!ƒ5d˘lI!NÔZ˘^ Č˝pă‘â5ŻyMÖ m ‚ű!řŞb&äC!ş?ĽmŃqô’BÂNŃ7‰ç)‹kČ`XŔ`ĘŇcşŕ>C}h÷Ôßş˘ŢäŻ üťÝ4v€Ľ­ůˇ2ĐĘŔ¤R€=b;ؤ "$ţÍ †ç(=ŘFnQ^ÜTľ-Âąeꆊ/6€Ţőţ"ń"Ża HŘ : °!dŔK ˙&”K łŃž”ńu#_ ?—hdŕߒ˜|+Iť@>=Äp/Ď0žĹőxŞĹ× gsŰmˇeů!žŔކ KŰ0nĄcôÉ8ƒî#%°ĄŔżÉßp6ؑĘĐę Ę 0Ižüţ¨ ů cęČŘAýП4I-+ą9ÚQď"ö ÉríćJ쟌‘\—•‰L’V(_ď äÉ8á^9Hô݋IśŔŚÝC>Ű"ꀿ)CYă$h—véÁN?úŁ?š^ýęWçcëŘĄ_óŽ"ŒäŹ?üƒ?N?ůŻÚ8{9ŹC9Jy|vţ^üâ§÷ďţ]~ݐčËĚ_žţ´§§ź˙ƒůsxP\žšç\úOŻü‰ô?đéÁŘÖeŤ6}>ő\€”.ĽáĘËăźě_ţË™ÇěňOţɑÝľąűř[ůýmŢý?ô˙üżé—~é—růĚ ţößţۙ\áŠĎ§?íÓŁn}Lúţď˙ţôî;ޛ^úíߙßŃ÷ď~_zěăž6]KÉ †V÷^‹'9LŽýZRI0ĎëŃ={ ž–UĂfněaŸ´ §śűpŠÖ9 ›†Ő˝Ă4l˝2ď Ý ČiÉ‘8€g@\ëĐzŞp3Ľű—|ëœ#‚ö…0÷|=U艣Ź‹<Ÿ¤ś"Xě摿 Z ŔR.ó%=Ń9Gk7ś#Ąf[=ă đXV$’Yóňí ď+0ľÖöJőDv<… €Śž‡Y}˛ÜCvŚ?V§ď<ônld/†ĺ `úb9l%˛A7y8 ŹňOŢQş!^xÝŽ×gÓi@ę>xË$ @Zd†ŸЏ¤…‘Ňď@üěpU–b‡c;/3ÁĆzŘg qCƒÇ‘táš-ęß羊jďőžş'S^aŃŤJ‘Š?"‹úŠ}Čţje,Ď×:˛qÍ[ÖŰÖ˝ÚŕœXR‰SŽÚŻe]ČžšNyąYďn¨v—˝,‹-ŒÖ2#šYÎbÜ#Za^o§SńÝŘGą­ŽŸĆcî‡ txö`śf,G÷Ɠu•\bčĄŘގуM&mlęě™{˛ç4HŃŽâXp1J/ťíĆ2†Ž=¸ÇÔâÝÄkšNŤâ1Ŕ1$nâ~žvĂGÄzjŤíŘ-ńĹą,“şjűęÎu˛~b;§ĄNÍżm“Ö3Œ{ ą/ůőżńĆý<~‹5űáćžnź!żăôř“şůĆ~–Ľ[ĚŢ]„É9\Œá3ďJç+žPâýęˇě;•Đńݟm§×ÚKřÇúVw›ĚłŘÜr"×Y'íˇČZ=Žň[98qfŁ×ƒtz<Źâ>ˆ˛íŽ^ł> Ac´ŤÝ>Á.]éGä•ażŕ!›ý‚gĚö ~â'~"Ÿ¨gŸ˝ú߃š_PƝ˛öýďoW2qĐő‡ř‡ó^%‰1XO~ň“Ó˙ř˙#cÎOŁ9ŔńţÁ?¸b xĆ{× źňT÷AAËŢDüüăüóţ žBŢ˝Č÷”˝ă‘X—ţđýHzĂސ˙fżŕťżëťÓ7}Ó7MűĎxú3Ó-7?jÚ/řö—|G>@ů}÷ď¤Ç>öęŰ/pm˝Š~úÓšÇ I?Ű҅ČPŕîÉ](E%ĺ3§ňÜ×4\Â^šë ןˆĎˇkěű#“ó*őëZésMŻ{Ýë˛ŐH ŮV^üˇD–x€őzH× Áp@O7ë’鄀źř@ş\c˘_7*Šű]^d‹Ş€ŰšäA~Ýľz*°L2…ĄCxŽ§łš|bč“„]Ô;ńvńÄƈD7jčřÔ†œ%š`°ŽéxIš>úяN_÷u_—BeĐŁň1ńœ^ Î)§]€(2ęéð&|ŽŠů{Ď&˛´tkć<-‘Á…Šd šńä€ (ţ­§Ę |=sxJgŐu5,Љ6ćyô-čŠ`9m@”…aëÎO°=ÍočňŔ– !á=Až ÝÜÄĄlÜZцź đhń| —Ĺ‹y‘m1şŮŒŹyô€Íń7`/uĄüčՁ6§­‘˝PäŐv(â€m@˝¨׸Ođ8žŞ")ƒnŃŠz˘.ô ňĄl Ôß>Ä˝´}$+żmˆ=ȨCOgÄ͌˜řÍP.†"aBoHd ʸÇ^ЃDÚűpLáŮŔI.2č˘Ě €g$žĂ­úAOčV˛$ÝNq/2ĐŽ’ŠČÇ04¤‡p˘gÇdŠ'cHÔůyÖ~kż"o #Ž)ä=+ íAč të“ţđž÷˝/¸;SqŸň$¸ń¨ čů$KÄM+ô@Ý ™ś 9$ÁĐN’ltÝK[9Ž˜Ü䤞؞d+ňŁ>|"Yš”[9釒<$_Ĺ0"´#ň’ âČz’œ„~Ý#چëŘŁj<Ł—#ţMžwýÉ'Ó.íŇՐđęBÂŚżĺ[ž%Ÿ<Áާéł˙ôŸţÓôĎţŮ?Ëď.ú(ﯲarź'LHĖeü\ń}ß÷}yźdS‰ńČʀ^żó;ż3}ů_ţŇt:`Ź‹‹ŮăžxOÜrË-š/ń΃„ Á6şĚç=ÇűO1˙ú_˙ëüžƒ ýýĽkË-j{jźÓBĹÓô>cr-A0RÉç$Œ4 ̛Nĺ$öůóŤinĂű™wž–Ëä_Œ^ˆÖT`ƒ¨Q< ÔSrńT<.ÖëâZż ĚŠNâłćŤĚQ/e3MsĆC¸™1żű#žÜx)Däz ýäÉýŮz°%wD@Ú6š“ć^ \SIbŃÓ`$8x/Ätš¤ü­îş#ö]źťżă:zˆśíARö6 k–SńśYJĹÎá*5łMtĺ„u<š˝†T€8zZČ$ˆPŸŕí…>P]ŮwŮ9ÁzF&Š$#ňĹcĹŮs őĚݸ.á4˘g˜E–)‡˘č Ń$×­Ż}đpuOĽk?Üsňä éDďRN› :Go *Ž˘§Š–ˆĄn# ˝-XžcAônb›¨ƒxÓŽŇޢKÖŁg•čxűôádӄ%á~eeNTŔĺ3y­ĆXQâ[§#v‰­ `m3’~&S7y[’^F2Ěf#飜ÁA&ĽevŞ›“ZZ‚I@œqÇń!ŽŠŃćí €áC7'pć1il'ŸËeяÖĂ´áŘÇeËr̎śßń;z4‰ďIlýĆ a€ž7–ěe4“ö˛gœ%D”ސ<›˛†ƒÜƕdŔžä=˝ŢŚR7…šĚadşň^Üć!"Ę ‹’´…Ü.ëúNJ™‹Vm"Ą šÇNĎ8ţúwlSeÉyGć-ؘuy§Żş‰jĎş Ce/Ÿ˝+íŸ:™çkó1(xŁZł2Ź_~/a`âéÖRÎňJcÁť´K—œŽîź$ď™}úO?÷ ~đ0ęŮăfżŻÇqżü‰Ä–ť6s߯üŠŻČűč—ěĆľʋ^ô˘źG|\űž1|öqOqż€ýi< s°Ó0 ž#Ŕ8\ýŻţŐżĘ{ßâJWcŠëCSÁšşűđžco_ĎŐŚvm,ÎäźťP$?Ę,uÎŕđŠ+x>,śÝ 3Ş lÜČA=;ßqŁzP.e*mÍßęÁ܏n‘v—źâÉ!@m Pظ'  „ ń´v„|”%É —‚} ce ?ňŚČ÷ĎxF<Ü$Q´‡aD” =ľářˇöŽw7’$LĐ%šibČ’Ą3ü]pŸvEg.ü•!†7â:z™¸CťÁ87ýОőpĂłz’  É6ŘąäěЏ$´vsżö˝ĺ”’5~4rJř!?ڝż^…lG˝Xđů:&XV eÂýÄůCŚÇ?ţńyüs| ?úźĄ™čCz#B.ňAžH–Pîç:2vGŻC|ŁGĂľpĺ3ŇzžŮĽ]şď1ěüËžěËÓ_űk-÷CNž0&<őŠOMßýÝߝ^úҗfśoß,ĄÇ+A˛@W„ˆzŢóž—ç^Œ;lš0žFđ‘1¤%‰§Ä¸Žw7Ă_y?0Ć0oÇ)ńNÂC ďˆWźâ9‚?$ŢŹMřšý÷|Ď÷lć3čěÚZ°F@+Öą|włÓé~â*‚ú>[‰iz6‚Üć 1žk6ži“Bz?1FŤvOk™šŰř §‘Ŕď՝žő.Ÿ–GrD9q?—5ĘKŠ'—9NŢŢI‘tP¨RD˝­×Ôă~˝v¸<ÚFéˆŰr†‰ iĄĎeG”yr8׎`˛ő†XQ6†j[G/ľWłq6nö´śÖށâšPšÜgułŹÝjźč“éäމÉ6ŠĘj›u] ó¤Î Ię_O ľödX lëÉ#QťGQţěf¤…8&ÇxĹčVóđ-ůŽďfc{űlS|÷Y–{#3"anĂÄţĽęX'žYgŁŽĺC Ăůtęd í’ú.´ÉڟœĂU—Ďܓ‰/9DH?o…¤8Ěô…­FrDԉ{€d=̽ٔ]˝ĺ{Öăz#ôą¨§vßÓź§Ł^Ú˝Z<Ľl^ů3â]<`cŰÇšßěł÷œ™ěÜýŠlŁxÍŇÓĆá*ĄÖÍÉÎBĘ)şÔ›ŒůďŘťt5%O‹ł—Ć~ű•0 Ô58 kˆ,°cÖ|Ç5A˛ śţ™Ď|f>đË{Žýö^kH´rQ 브ż˙÷˙~ţfěçÂvŘgŽűqœżŢö€Ýđ^yůË_>>'Ĺ÷$˙ć ߐ+žëťžëŞß/đÇ÷‰Œź1ݗţTˇeH4ú@ُĹĹŮ.$ăĺNâ|‹ąÜ×:ŁŰaŕBĺů-6c8wşÖÓuC°ˆ,w’žôř@Ăú&ęYÂäž@Ç0ř LđŸÁš¨Á€žSé÷ŕÎâW†Ĺ'Ź•˛Ô™tđ‚4&%2ëiš¸_ŠlŽ~#( —÷!snl R3cď[ć?Çq Řὄç-’óŤ¸đW/ş–ĺÝČźwŸ7Üx:]KŠÝ"9kAۆű1ÁOR%-ô31’ $dXW×R~jŰőďoŢÓ´‰DëHŔ˜$˜ó§ć´ţb›˜WО/3ö˝yW Ş’Z÷ďUgsą>ä=ĚrFrФŠvC Ůć^*ÔŻkŔÖVŤgţ^ÍÚTęR]‡›É,‹˘îcYs"ŮĽ­k­ţÔU´ői*÷ňc˜ä žö­Ž&PWI0Ăžg‚Dfa¤yűoŔśĆcQĂBR)z+@zőRţĂÓ¤ŚđŇ~‡á|y—‹J9ĚD„ƒdřR9¨r2Y6÷{ďj#Ëş€ĹŒ[QwëąýZ{ôwďsƒ1ś“äŰrÖFÔ˝Óîc˙/¤ŚbĂÔ_†ápôK( ÚŚôůڟ"(;'' x¨ăJŞZdýbżÜĂÖ [ÉSľ_טÄQ?QţűÔDřĄžƒž-ÖSż¤Ś>ąĹ3ŢáÁŚßދׄ!ô‰čA2Ln—ŐHˆ:8,äCkЏXŤďŸšőťuÖýNĄ[MmQ=%,S!UNcI;FH ‰ö°\,gű °!dČ]w}6­öĎgO {ĺÇńqI˜Çö\ăŇ6ĹŚŹŚą>ĽÎŁlŁÖóĎôo~;ŸI Ťi|>2îq˙hˇńPX~WPvX[nłqĺŠ6#q$Đâ¸QúŔœä§lôďLčÉÔ:šVˆç6v|6{/Ęöť\Leăő$…şœę;ěÄúşŮÚ߼ë(1^—ý‚_ɇ1Xă˝ímoKëoý­Ý~AHOzғňŢ*¸ Ą™ŃăMw—jB?*Ř`ďôőŻ}˙nşéŚôěg?;ßÇíăx€Ç€÷ńŽaţé~É÷RŮ/ň~űŢ_óľŮě‰_]űq}6Ÿß÷vőĐi›œ‹–Ł0p%“ä ěWŒôJÖك˘÷§ÎŇmLqÝćĂ7ŘĚőDŽ ]7ł0Ŕ1@W 4/u&Ł[şĺgÁ6eÜ;–Óa€’|ŘđÄŘ X4Ł >äAgń„:ĺąaĚ=Ę Ćƒçü‘ Z7-t?Çud—Šđa:*ƒ&ł=!An˝őÖ l˛ČČH庎-‘›{t˝¤ô„Ŕ}Ü1y¸ÇE'őĺş }ŽÓ:çÔŮSô‚¸ü&QúC°}ÔC|1 ˛ńáÚĎÓN2ň)KÂHŒů‹žľęoؖö=ö€ ęÁÎOý  ń†ÁÉĹ~éüIüŽžŃ7Ŕ.“ďףmč Ç)zňFgLޘ€ş)( ‰ýBöáCŢčQO ÔÇnü*uŁڙ. yƓ4žćç^ę=¤ČtsáˆÜČĘóe‘]\([NÜ(Ł-$АzĐ‹YŹŁDÉzHQ§čŃ09”eKKz!O_Xń”“‹Ző yĆśdě‡kôĺ(ƒak(Çp<€ԝţڧ‚öäÉMjCŇ 'ű¤í`âY=ƒDâ×č—zu0‹`KÔQ´c’}ÇoHTĘ@?Š-Ę`?22čaEDůČG˛~yž|­żŢ≠d¤ýӔş(›rčÄđ>’hÝMIP@ň Éí ’ýžşqSć´Iś+růŽ‘0Á˝ÔMHüćŘJý%˙ÄMS7Îâf zAFÚŮ? ‰´Kťtľ%ÇxĆCĆćEź§°ŰK™h—Dď{ߓnżýöL"`ÉIžŰnť-ëH˜€LŠÇ›nź!ăá­o}k&[@ä;n Pӛßüćü7Ąľ˜Ó*¤źsŠyďĄ#l "řĎ˙üĎoޏ_yó#Ňľ”.D˘‰@u%Źś>÷řŹ÷ů.Ž*|/Ž€)ŤU9/A!>oŹ{cŔÓ„\(—Sۂďíf늞Ţj÷”kĄň[€ęŞ+ô˘ƒnş/ÚŌRC„D÷¤Yw#q7¤ZPŠŽŁŽ+HÝrČ0’#ŘĽ—Eć@äĂÉ% /ĘmŔ˛"0ے.â ĺT†ŘžQďqŽÁOďrO=ďŕ0ÔGŔ"}@ŕɄqä‰űuuĄ*đz°* úń”ňö Z7ŽëBÎHŐ=žäĄ\vˇ˜€Nœ(yq ýŽťÎO란nę `˝ŘŘ´!C ˜ť,d†aîň¤…őŞË2F€Ů2c( uíLßşÇ9ó¤Ůî(Ů)ڝm)i(‡§$.›Ł%_=g•Ščۨ€xńzSűmuKŢ[úăAôĚÇ5ţŽá-ľ“ŞËnÖgc]ł^F{u-Sět™O˝kĎ1üˆĎői>Ô:'óąłŃŢFâő,ž!úěŮ`šˇŮ[YîM!?Šm•PÚă`Ÿ cÓŹŹüŰrŇ]÷´‰PŽ3ąNʔęS§3Q`uúlî„{'ާl‹›Žám$Ůx=z⑨F[Ć1!ŽĹą=b‘˘ź‘$ĐÖŐ´aiťáČXˌďŔś?™—ůťWÔü­MuÝ8Mu„˛í˜úěo֥ˍý–˝:HTœN°ƒý‘\XljÔßHźHŽDĂúE7śAšęx?ň-*öď({|?Äń>öÝ8nGâCÜw°_dOĚÉIŽC‡#‘%Î+b_t×ŐW5Ďö=h÷6ş$”úČËx€ĹšE&ĽŁ$i´ůoŮ-f~˛ţwç1vé*KŰö 8|ĆžŢnż &ú1V~ög6ƒĺě rŔ€0ÓěšîRʘǝŢőÎLäýĺ_ţĺ@˝ů(ƒ6)yůĐŤŔ0ú“DÄďz׈ ĘÁ=ĆJŚ…%ŽŰ琁ß%6čőÄvđ#AŠ|ą ňnOmj+ž´Pöyd`Á‡k”KŢŘą!eôĘáF.:0¤ƒímXżş9ŃÍĆôĆdEpˆvÖŁ$uĄ GÚí3†@g†Őˆzh7ŕS ™Cşj"t!éH˘gBD9zeQóVŽiŽ)öqôÁÝsĄP cBţŘäĘ@?Č@?â:uáwO/’!>$Lńźśc’¤Ç˝HH‹^ZÜč¤BؤĆJ gśC$ŢHĆqmő€\ô)ž§K~3ô‡^t$”hϒňI/Jn,ţÉď}8íŇ.]M‰>ýž÷ź'{cxŮË^–mwýďg~ćgŇ.•D˙%†*›$úůßřŚLFá=q\SÜ4ćDÓӞö´lK,ü!Y0Wâ}Bˆ HŽ[â}Â; =ńŽ‚xűš×ź&żń˛Ä{Œ÷'›*Ä.ĆŰóýŽë/~^ş–R ^ů[üDˆ@x|˙V°Ś‚çĹ3Ĺ<ŢŞ$‚˜OôˆQž źE@˛t<暞JŹůx’˜gćŢœËyę ŘĆÎĺúÜ;Ç0—“śŚz”ßűŮş)~â\ŢĐ~J>it›&@°!C”zŮFël/€š˙Ž q~Ťg@Ĺöw ZœćąQ‘Ôa˘cťĆ“ŔţÉę+ŚřEpĎöŹĺHŹ) bYĽœ~zŕ?ç &ÝU0ź•Ďë.€ó^Š!\§ć°ë r÷zŘč )@űMÝx˘œ:ʇň=Ú d‚3gî=źĚŸE_=Ştëâa0;÷‚Ő€ďůˇUŽP áôrHl8ÚR \zH ’/üîR@Ł=G{Œm$`kˇáIřw9ĹÌę}dąŘ?ˆOŚę%#žś—D#ŞôĽÓ§ť‰ŒĽ7‹†Łx qĚ4׎í‡Ö+Ű}Q+ )&Ú,ݍw•„Ë*“§Ţm‡rJţ°„ĂŘČ)É?ëmo™`=ět㸈9.„˛Ü;ĘýĄ+őĎţĆćć[‚Ä6ŇB!r,P×ů“Gdí灐Őň`Z÷?,Sž×°LYӕ’bˆűÓ2˙ŽÎ[҇ăÄDTË^e*ĄŤ„ˆJ͸=űJ}Fď/C ?’űgŞc@ˇâ˜]óŽwçbr}7…¸Řöΰ.“wŚ‘đe(™.•÷v°Î˜ŐtHbJřĄLČD€˝ÉŢK¸Ťóš?IŘë§şKrXçą&Ú4ŐZ­W3ůŹ{ěŤńýžőĎťs=żŽˇIC"Yď!3•ń//&b]šˇynŰőü]8oËůźĄż[ů'ťOĺĹňĄ qßÔ@KĆU<‚ě-xÚČň°/ťžyň;ćxÜŢĽk •ý‚wĎö Xł_śŰ/¨‰ńă~áňĄď3ÖÄň%lń.ĽBÂÉӟţôL°ŕÚ<蛾é›ň˝>§Ä;’É ^đ‚°_đÚlSŕI̓čwŘŢTŮ/`Ęý˙Ť1mŸßËßÜÎ$źQ`ہEąň÷@îErĐËÝMŽ Žx÷ýI†šX˘~čœT,ű"ł<éş!X00H>°Ą 1Đ+ `qO K ŃšŽÁrż=˝Řm'DĂž$/DuˇtŽÝtÓMpiŠ`2ęUAĎrzb  îńÔ?ĆČ˝‚ă”ƒœLĘĆ O€ű$T^8 ˘­ë ”§g˝yĐé$%čąA(€9řv3/‚šęC——ÜÓ‘Ęŕ”ś O㓗2XGîA|Ś%Żp=˘´%¤ Aaehm‚g ŃÂó萗Vڐ2\3l€§ă •  LŁ čöĐCƒĄ!Ú ŰÝBŠaÜŘí´@öąéŽ;îț&¸enËŚúa:úácó˜ôßń9ţůbYNĹ^+)‚'@jÁđxŻÉ9M ŚD€Âľŕ—÷¸^ń÷@ißa¨'૗¸sůď“'OÍ@˜ žÖ“Řąě蒾=ŐŻ<ŐÓBšî“ŔaY‘XAáJƘŸ¤śœčŔSŢ-X-@뼨óŇ&ƝŸ{و÷Äđ­ŒqŢăzŢ9•kƘâŠăXVԟőmÁÉm›K‘ôq´ŞWS)Ű6áÂSŐыÝ0’ 6öyx0zˆăF)śk™Ű.ĺTóľ ŔĆbŕ.z$<ĚŽţËivdłîËLŚ€´ §ü§ÓáƒD Ńu\+9b1‚×#dŘGť(!Cr‹|˙œH0ˇënGűÓ&Zť°<Ąßö[Ę[­uë)˙8.ŘvĹŰEŔ%(ŰŻaxJ¨ž.Ű.'ü!ĘÄľÇDúI%şZŻW!,Ăa Ő1z"•İÍö"đkýłmŒm҆ę)„˛űŹ—‘|:żď'6ßç&b˜żťî‰äl‡6kԗ0 q\–\űb’ÔĐÍ=“ÄžÇGŸł=KžĂŒ€V€óůřlťë]SœgĎă őŽěŕÄ~ [ĄŽŠmĎĂŃF)×|ëŘ=$Dۛ€÷U ŐĄmľ6ßIŃÎkťŠßk‹ą^ŐëGőNĐőý™ Ą”Ë98b#zŃFózťtŢ$Ɋw˜¤­őĆv÷ڰ@…řB°•ƒqOáěŮÍ^Ęâ`śöÍemîíť~6Śë=&aAÔ[–ĽŻĄoZ=GÝľc|‹Ôőř4˝Ű†JÎńý>#ËŁ!DČă`$Ĺ÷:ú‹eĹo˙=Éúl;砟ćqąŤaË<0DĘ$‹ÍűâÓrľ7Űă˜Ę†-eÝ d—vérĽů~Ákfűě#rř î`çÇ9џ[ď Źń œď8ćKě-ƒ‘°ýźç=/ď1ýâ/ţbžöČGޜìpč™ýóË_+‰úŽě°_€÷Ô?řƒßύ‡ü8€ÍűoÍědÂď~!—^miŰ;ŮY^HŢvď ~3o‰sWmN󡔦Ф˾ߴm?ŁěœŸĘ°ÜműýŰ~ťˇ˛.Vžëű‡ĄQś•őš”íaý¸ż×t|Ŕ?ĎŔőZż Żż–ÓuC°Đ­ 6 ×t>^R Č‘4 –"Ś% °@ˆŢŘČĺă"€|É?nęhäm €B~c`cS€›2(‹Óé†¤cs ᔁÎG)Ŕ°şńœÇ%˘,zdyć3Ÿ™:ŒĐCÂůSëČ7`,/*ó•=-(ʇäb˛Ô†î yš›$Ń›$á‚oęŠîxi#:2Dňŕ/ňëq€ÄoČÚÓÔßS!Ôh7îĄŢԅÉůń›ŕ8÷°YMč†Ďónć Ź*ƒĎp–á"´<ÁŽ~xơȇMb‚Ňęü Äp˜ëĎyÎs2¨  †Ŕ@‡€ĘnŇčÁ›ÝΡRű‚ôC[cSL:(ƒśáßžTČR÷aÇ G†ĐÓ/$QDěö;CB`›2ŃuAŻôôáŔJ~xĄíŸ-QÁ‰Ś›PČaß'?mB[˘ČD˝•Ÿ<%QFœÔ“'}†ë<‹ŽŒ§‹ěĘŕúAŽ ‡čçž,ôěAz)‘Á=ĘI/~¨—d/ڊou w~˝¤đ;íN_R§ökäŕyú÷’(¸WO%íćĽ^}Č׸ÍQl+zjáwĆB‰GüNő9 \ŘĽa9č›ÔRZKzŃf¨2Jڞ-ĐŁ}ßń™Đ'2~H„ŕY‰s”/8… !ťžob[HşáC}ôz"QĆąÇ $ŰJxŽşŰךŚŢݎ Ç.]é)OyjŽwÉÉťßů˙™^őŞWĺ żůĆvéGO|â'°éŘ¤Žœě%1”ÝrëÍŮÀ鋿ä˙J_řE_O×ÄÇ;…šóދn¨3†ăą‚yƒaíxónensœ€Ďţ‰˝töäĺ?ßčă/¤ĎŢő™ôżŢýŠblóÎř˛/˙Ň<‡ü“OŇjó><ąHşážVRťo7˘ŰďŽ!TŔ´ćíŃӁ6FňtťůXNܔ‹¤xŠľČ  ]OÖ:•xő§&Yę&CšĘŞ đ˘9ĄSĂ:ĚIëÉĂŠĘR˙ŽŽô#đҒK"ř× b˝#qÖ ¨ "AšęWę# –f:ˆäŰ%z0hOęˇ ťá%Ý$6Ĺ|‡€nŻš˘Űúú|K~‰DŒęq ‚hGëśm˘ŘEY—ĽŠ-cy“˝ůć`gűëg§˘˝ĄT §°NžbGĎdÔűEŘ9e^ŕňĚÁáůpjż€paŚ[4§ÂGo!wg`şŘÎ"ŘM ‹ąžú@˝ž ͸“˝kti"W´:l˝hŁŐî‡Y˙Ű~šŮ˜ĎD/.…яeN€}ąoę \ëqn~~ ŰŇ̀ńb7‚Ź]Î[;oۖĐÝz2‹6ěÚ^r€ĎYçhcq,óú2€˝ńÔ|žo9ކ˘˙\wÂplţCރƒĂʟ“Č×>ľ^ŹuJˆˆa$˙HěJ{ŮFťěŮ`<ť,*úZśŐuÔc˛L×őţ­W‚h‚ćy ÁkÇÚ1•˝´ÓšĎŸ=—˝Ţ o+ŞwŸB§ŽËe+ľ5I<ŃÖŹCľtœ6‰@zQšěj$cYž^Žćy×ߪ W˝ń=ŻG˘~V“ţň3Ť2ʞ ů€Ă‰“ůw÷Öň>QWŢ6‹“eü8ȧ/Ďç[—ËŃËɸt­YVŁÎúz$ľÄ›Řˇc˝m›ü°N­ýFrFü-’&Ú}S$ś˛Ä~×öUĺ‰'pg65ž?Í3ČHéö7cĐůnϏ2ů=4zç(!ŁÚ9Đń]SěŇ՗žň”'űěsßyÁýżą_pœc‡cČMhe/ó¸'ö‡ÁhŢ˙ţ÷gťqœeĹú܍}\ą ź_­žŽTę6{Oű'–Ü“>óY<ô?4ďźëŽOĺ÷Ä ›=ü˛_pçfúó\gšç&]uŠ ŘwżçžťÓD,ߒÚýS!fÔ{"–ęúš-˙RS;hŻľĺĆ9ţ˝…ż˜m/Ľ|Ëőđ齕qЉ}şv˙&ţ[Ot|{`žô@z y ŇuC° ĂčQAÎM€6@4@,’ ;÷Ç8;‚.tÍn=ůlül]ńc,‚…€u1ü/}ü[đ†şëm‚äĆ<ňéفI‰=eAlŃ#EB‘P8†îГ€axaG)ůpO<ý/aB€ +€SĂf{ČÓ÷Ÿüä'ł— 䇍ɤ žä§ d5t‡„"íÔ°qĄď ‰,č–<‘Ӑ0Ř$ [áäž$ ÜśEŰöâ7CgĐn^ŇŚ’´!ż‘C26Íř˛P&6„lčĂ"€íČć‚SOČ ˇtL?çwڛ<âb6&ĂU`ď䁍’‡ýÂqC—ŰčA҆'A=čę•vĂűyŔšá€LnPH0  ěolD=˜?őŕ>˝ŔčuDZ€žűč×z›ĐvâËĘgŃcň  ~C´Ąá)h#Cś@€˘Í%ܐ?rBCÄäČn-G íf*eńą/2F žgr 9 ›¤ţ´?vHYŘ+rÓ?%ě8Aô =IăƒýėśíŔ9Đc&e0frŻÄ‘HĚŁÎz’!Ć fŽŁ’Ÿ2řÝ/Fwţ‹˝üoÉůÔýfs5ý°żĄČF8ˆƒƒ!{Ö(žOMáBrŸÉŕđ*€Ć‘ôą(€{W]ôۦَC8€˜˘­ˇŕj$cDť̌mŰ*zrŠ6kžsbSy›LÓ žFŠŽű@í 0Á×bĂTF´ îÁۅöĹ0…ÜĹëç=yŢočCݚGô’`ŽÄ°,vşž{Â)sĘĄ,Ξ??#Ş”ľĹfźI"řKYűTŻpœô0Ú;äČ+ë2fb˛ s/=ľßě%Ăuc]'ŮžŃ&,ß>÷¨Ôú/emŔ{ÚnąW<-teüŮ Î$‹{6eŰŹĺOçëE˝ńRČ+˜ŽląÍŐMźć{Ä5q´żhŤńý%amž)ßO$‹91gÜŰé ™OO9ćßO‘ôahe-ĎŚsgJ¨˜ Öcű™T…ˇ“ĺŘW )Šť6?őÝHĚŮěWbłăŁaEË…“É÷J! ÍC”8vA0܈úŠž&b|ˇFRCçä¨'ňőěL§ßJŘhßeŰ29Ďőp„ á;Ĺ6ŒDĆhŁÖsŮoĚ|ŁçŞĚwŃD÷+{›{ĆCN†ŻőmÖ a^´*ޅv‹]şZRŮ/Hťý‚KLŒčŒ1}zöŸűÜçfŇĹqOOxÂň>ëë^÷şôÁ~đÎ~ÁwޙÇFôőž0ŻSbŽ öKžôKŇmˇÝ–˝_Ćý‚Řě~ęjĆľă;ÚT<̓7 }.z˘p-âűÖšp|ǡ{íüáRĺnÉ~SŽ#,ť]sßײc™­Î%/łGç†Űęeş”˛Áă-î5čŮ_źÍýš/şŇĽÖ¤ťÄkÝ%|wřŰOžýxdgŃ|¸Fë7 öAŹvaŽ!ŽĺBÇMŔĹÖ#ĐčŠjŔR^nü.ĘW/|Žn {rŠ8.šř8oř‰ˆ¸ôőtł2Š€gňDę˘{zŽRƒ2>đdţя~tL#ŕožČĄ‹~Iv] ˇ‹?[&óČ@™Č€.˜ěó 2   |zˆhî“,ag§|>íć¨!Đ÷˜ň‘¤  tTĂBŽC4AÇíi-ňDœ'?č6”`mH ™2ľ ˝Đڃ5ô”m,. ůÖłÄ˜˜œĚÄ 6zŘć"÷aƒ”EŢŃŠ^$ě΅rŤľAi=źjčQşß|ó͙AěćlűbŁýxΰ $˝…hzc0Œß&ěƒÚ¤Ŕ5ßęýr˙śśŕYڃţdŘęeŘŽćĹp#´‡2D∛o’°eŔ°ăH¸‰c ĎüÚŻýZvľEyĎxĆ3ŚSuäŻ='Ú=@‘ă•6éřb<.˙Ř1rDňQÔ6ɤÉ~Äߎ=%$)!`şřŠ C›ˆý*ä{1x.’ l‹m2P/&Ŕč‚…§‘ľID-ĐůIhĂ.c_jeŕĂ؈.")'†RíýKżôKů9&ĄŽóꁏ ە6´í]ăxE?%éI$ĹvGćËŤ2`’‡ă÷7ŇCn ĘÉźńž?nÄzÚq:ÉŘÍO¨Nš[&Lťt˙ŇöIlý{:ĺO”r"‰Ëü^ţĚÝéŤo}ZşVҰ.ޘZW{mÂÖ š4>™ŽŤÇ†Bź'ŸôŁż2mƒ´4”qŃq×Ôž˙/k‘#8mü˸(łěřďHü} SńĐtúAľ_ÝÁű|Ĺ+^‘ß˙â_ü‹ÉĂúk˝Ë]í‰ö˙š_|[zĺO˝)^1ŹĆęČŚÉ÷)íó-ŔČ°8NGđŇťFŠ€ű˘qťďT|ĹfO$ĂeÄ͢0.ň”wHô!0SÂî×íEŽ4šő/§îÓxÖúś^œ§Jî(พłć^>Ę{LO`ŠÄö¨Ťüľną]î! ÄvŔlŰ*ś§÷;nHúUœ`÷Ćşš"čelOјOŐľó¨rš<ćYę˝ÎĺGđ:“ ˛Ś‚îÓ vm´kćŮCMÔůíŠ|ÎŤ'ď%cŘ óŸę•ć§ď‘çpu8ĺ#Ř’pĐ1× Š|#żf´ie)v[lx.o  ˇdŠŘţ^Oż§ŮŘŔ˝ÓŠú4ßD´żÄvŒŕgŃ÷čů`8KűäśňšJÜčsżj_<:D źÔš„%)Ŕr7ŮiäKř• śę­š™č ôbc…:ŠcXźGŘC9ÔĂčÝsňVą¨„‰ŠŚŸĎćÁˇďœ\÷¤Ç‡JPŰH딉ö‰ňüţ4™wӕ9śS$(Dťˆc™ĺŻ×›r˛ţ—™0ŒeAňšęüHD+ëRÖě{{'Ś:c^çůšeką-´SűW´ńşŻĄ§šnfË­ýF˘UéGmę;Ëží/‚űîß(Gçăű,zŽpʇ„˛7ŽW}&í2 y ’Ý‹,Gď%ý¸-;Œ$‡4dŻMŹëɡĆ—„¸Îö–=Œcź2GÝĆţëÇ^Ű Š$miŻŽ ćű_~~U<Ěh‹ĘÇ?ËQ^‹í’Ig}7#k)kęSi'3Ű컙 ­]đNX§j7žó˙NŸ<•÷”+Çr?ľ—^ú-H_ôaóď͜ ż#Ék1Ű/ˆD˘ň˝Ű/¸Rérî<ěQOżbë˛ËŽĹýĆđ?˙łĎ4ëß2Î=‰2K}Jž| Sťöw|cO |â}ӍŢŐÎ!W´ }Jźx=^ézÚ/ˆďĄ‚.7ŘčŢësŰƛ—žôĽćBŠ!Î۲.wrÜ?˘môŽ~ĽËe3Ž0OŔ"ĆvšĘżýöۏčÝżÁhŔÁ=Ý–˝i‹§Śťń3ă÷Şů ă÷:|†đÝ~ŇţžŘwűď6Ýë‹ŕş!Xl&œďˆ@¨)S›ĆŔř§c"J2ŔČ -`( ţ-Đ݂h&÷ úsűČůcâA7ehĺÔťŢQ÷¸ÇeŔ‘{‘ç$WȂŽ)€Ü*Č™ j<ţń?âCđ]ďäC}Tů͗¸€0ĎŤ7c䎜 t@˝,ŕŃ0íĆŁzá^‰|“˛ŠŻĄ)¸]ó;ůJ<ˆ 0×=1n9†żhO-ŠîGn^<ÔOV•ö€ ‚¨ Г$x:€—˝2Ä>2 łžbâoČo}ë[s\qb‰é)…zaOČ%aƒş!v,đ඗„ŮiäÉ˝äÓžČŔ$˘6GŘĽ^!đXđČG>2ГzŁdŇŁ›ŘąáwřwÜ8-‰.â ľ¸‹Œó,żÓÎÜC‰zlŚí¸—ţBľęƒ ‚ÓńÄ"mGŸŽ}#n+ßü­KRd  =„°…7żůÍy˛ÂiRź,H`mÁLőËrăQbF!Ôö3@tš‡kŃ{„ׄŰń3“}°•'tŹG–q*+Ó*ŇśSѐŚ0‘Ö­–,íő~q¸šôˇuőĄ qÎH¸*wšÂ0‡.aö3Ń'—××9Ęú0 AŇÂáÝmkg“óîŘ~‘ˆĄn+éh9[{žP9ľżĎÉ@ĹΖ3y"ń¤üv aľŐ.bŸś,ëŰ=śk&úłń9ĆDŽkëXHčŘćRW˘úꠎ/Œ'NL­—€źŠĆo‹.{M‰ä÷œ˛ž]w](˜BÄşNŚĚ‹-äGĐ;ę<Î1Z"ůę"ŸŘĺSĆŠŸóélËËqLÜŘßU•Ąoi"ֈîńĹ>O=śmjŠŽ¤[2DŰVqLŽ}X{ŕŃOkš98ărëÝd>^öŮCÉĐČŤNÝ’$F™šZëJ< EÁd +ĂŢľ˛Ž+á {Äé$đ΋!œâÚ6ž×ŁÇÍŞ‡ú~ň€vqĄ>ě=†ňđšßGČiNŘá÷‹kâŸĺx=ż; Ą@ŽXg†ÉŹ=Űw ˙ޤÜhvš˜‰í{tŃďCŠšÇđBLG—َ*e~čCO§ŢöUé‹>G°¸šŇĺÜ/¸–Ž-ďÃǖ`q5¤ví?\%‹űöčń#X´éZß/ˆs˙K%XlK/~ń‹36‚>śíă_ÉD˜2ڃĽ<Ї…ô4Ćź×Cԗ;A°Ř–X—€y°–Řv Ţ´‘iG°ŘríA#Xl@¸wxJŮn°€Ň4`9`ž§/0*&Ôw€ý1ä‚d žˇůBlŕŔœe ŒĆĆă†Í@6€9ä‹L"\ÔfPR`ĐMwří˘‚ ą?•{ŘĂŚ…4Ďઇ˜"ůK0"ЃIť ?‰úy˛:7XŘ0ŕôkʏ˘‡O˜Dŕ°ykčÉđܧ[|}Ú<Ő“ĎBŃ}? xPZcŮđ,!c$m ‹lő`¸îsaČý †z¸Ř6Ł3d€| ž(“öDĘpqĹˁAć=ďyOn“'?ůÉŮëĺ!ő(!‹đ›ž˘ qąŒčŘĹ0y ol"žBĄ,ô‹m˘+”űĄ}h"^ clQ/*džHˆÎ&ndđĺ˘;űKą‘9|)Cňd~/‹Ć‡f@č !Ňڄ^)Đłád(W˛PťéŤ ‘ˇvƒţ¨?ĺSžcvůž÷˝/“ Vü˙ěý źmYUŸ Ż}ÎmŠŞ˘+ŢĐVĄB *éEĹHb‹AĹ›hŒ Ř âgűËűÚ$†„ Œ›Ř#˘¨4J‘.ôh5Š4R@AÝ{ĎŮßyÖÚ˙˝Çšgłď­şÍ9ˇžçţöÝgz9Çl֜cŒ9&()ߔG&䤟4DŮ@ŮÓ^k¤›:1'­Ů’ƒ˛ŚQš?™ž Ń9˛EI˘ç\yĺ•Ë4Ô1׌ƒPÝV'űŢWĹeŇÎ}i#Î9Ů:&˛e ׏sSĚŚĘ#ŃZâźÂ}h{mYÔz‘퐲E }$ů@|ˆúB˝âŘD(˘/œŠ„ƒˆĐr”Écó˜ž,âLÓ:ßPö¤¸ץ^ǁ 9¤N𲠿¤ˇu΋âԖ>´;ŇP;mĎńoxŐę`qŔĐÁb,':XěËAt°¸X¨5˘@5^ÇR”ířŠ]á]•­aŤ˜+Ő¸R Z#pM'Tgîú>leqݐtt×91xĆx3Œá2Ž=ľ Ďi¤ƒ•ŕ„őǐž’Íxˇ:mšuőw'dNĐŽäŠă˘Œ÷#ëÖÁ¤ĘŻ–GuHä€t)ířŻ:+äÚO×rŽ98-P–ŒŐ0xš~ľ*gŢ?o“ÎjLZÉz:ľ°s˙vĽzĆÁ­ÓG Ľäm•ĆÍŃ=k]ÍńÉWÍÍaŒš­7őŠ7”ΡFňœ…銍žűűŠâä.§…*ăí>ţÖÂxxl%÷íAŸ…A=ŃőHße—]ž<ŽK_.Ű˝óRʶ։vl]ëFu$Hý 1ŔVăbXmqłrdŠmŹŽÁrjŔ;ÜÄš"mdC´0DčXmøŠ|“•ůľŸr]wj!ĂčM/ťü’î u°8pč`qĆ'ę`qiű%,äB’19ă ëë`Á˜čó?˙ó—öÚóé\‰ä“h€ç“Ě“ă`ŰÚjÎSY\- X˘ŮOqą8X\ˆňœ@aĹ GĽÁ‰1JÔF–Č€1[KdĎűL\Rh€LźęʉŹfćzŸ`$Ăp†Őܜƒaeuҗm8jhŕD`őůŢđ†Ţ`ŠĄ'×á{ {4FňBǂ8‘Řcę|`ŸÎŹ~'“gqđ bˇ+|cě$/‰’¨ \šBV{E4ŇKސ^:/d€A0˙Č3a`çrŻ˜“î—í4pŘ ě˘€Č î(’†„.ń7[ŇăĺSúzIžpbűVćs,éŚ~QăœR˛Í×DŠłÔŤ¤![â6ŇŔ=1J“ś\‹˛€DçH4~Ď8ÃvŹ´NÝ ä3[dŰŇŔgŇF:HśtAöČ-äČď¤!÷3N1‰ŔP'ÓŐI€|S#7ňĘw¤2§Íŋ‘˛ŞŃCâŹ@˘@K˘mĹi#[¤dÂ_eQźiçœ9&d9„K=şŒĆ’¨:‰|BYDČ5[%Ę2ŤÎk•ŞÜ'Ÿ\+iŕ:ČÄQóiĎôE\' ę ŰçÄYŒüS/ů˗퓺ñ”}kI?Ä=qŽá÷<ŕ}>égăŮeːYŸm¸Nź¸mW”'u3ŤÓżeŕ´]•™˜pʑ:—6C_Ó+FvҐ˛H˙ˆ,8^#§ fu +"rşĚ& üů;ĎŔĚAŞqľŢHĺÜĽ˘űŞsjë¤ZďۍŤÁsʸ6\˙ČÂĐuriäĘľsMN[m #ŮpŸşÝâŕ00črŻí>4ú wŔ€2 ťĽąš5PśĆÁŠ<ĺ˜jhN^[ăx•M=6ÎőŐ@6¤al”ŞeYď_îm¨Ćo’ŔnXóáޘ[çGŽœ_GdŒރÁöHVIK˝WŽ"úOŤa=ǟ:ľrœŽ=5ŞSĂq]ƒ}.÷ŘîăF FľnXu݉ě>WŤšn]ގ—™ílB˛¨ŰĂÚó]őýHo\[‘t0Žőífkľ‚Cäć‘ÍE}:ś0N_ۏ}/˝tńßßűÔĘŔY˰§ÖrŹÎ>Š/c§íĽăBëˆQëmŐéT‡—Zßk$Öi#ýʼnŒáˇú6”ö›{Żî3Ű5ߏ†Ý\křmcqŻqţk4\{ü™šĐŕ˜5lBűOż–ü'@•eą2˘ĎvßύËV7‘y__ć‹íh0`ĺc˙Ȁ}j9ß#_GŤ# ˛' ĆÖ°mŃlQ§úŮ8Đţj›™—ůkÍ[J°ęď}ĘÎű‘â8ś§­ÍDęœ­¸ó,ä'„aËśc‹žiĽçŠěęÖEőšSŁ/L9&ß5š&iă^­QG”ÜkŐßoîUűĆŞKZ—[Â,ŇŘG/Y8ę¤]Ő:xÝNţiăK‡†Ů°˝ËPžŤcqŔéűŒY7¸čĚm§[ĺťFЖ˛p‹ă†-ĄVe=r&Ŕlçߑ˘šŽýë TŸ?YŹ•6›öReÜËkçUNmŸZ9˜”kŚ|#Ď6ŇL˝wëhXĺ;Ő^WŽ„źoa–ç%šĚFyN„Ůúdkž{AÓĽ—Ţ„‡ßŇů:Ýíôaú9(hܖł‚ tnŹd5EŤŸúĚ+ iy–fëövNr6ŘOW˙™Ÿů™ÝĂţđ~Ńň u°ŕy˝ôOţäOş?úŁ?ÍZúąŢbń|ľWÎFţŤŁ`ý{ 6§Ř›ę¸öl§á pŃ8XÄŮŁŻL łŐ“¨ÖAă^ šY9Ďd$N \‹Ar"ělBă¨+Žš•–t`”ăĹőc|ŒsÔÁzŒĎ8T°"˙~÷ť_ß `@ä;ŒÉF>ňFŘ|îuĎ{Ţłťď}ďۧ/…´ĹůăRś5™-ćm;×ÜÜ1€nmo/8Ç=:Țün/VÄÎya!Œ›YŐ<.ŻŮc{ž0ĆiĆíĂ>Â'{‡8n FĚŽżn­uĺyu~¨NS+ŞŞAšÖÓ*ď•aŁsć˛ÝŇ@\Ű@˝omďš˙`¤\E˘ś;ŮX–5Ĺ?äiŤĎoÍc5Żî7/í4+á7NQă>-ičhvúŒŚ‘sćŇŮć!ÇŐzۮ܏lű:ť˝ęSűűpělXßőFňůŕ$ł=_ćădÚýl!ĂŮćRśuœˇąě‹7cpQžÖ4Ĺá¤:ż%}+§”ąŁV-ˇe^ĺŐś›Ľ,ŘşĄ˙nˆÔ1ÔˇíŚţ͗óÔlˇ@âPiŐ&6Froű§šžzNun[ĺ#LćË-â¤SZÇĄÔůžţí”Nig™sN9{Ôôô×[ÔĺĄ˙Ţœcĺß÷çł8+žžG3Vا^o mż[9ÖvËŤwt۹މ…ƒĹľ×~h•%uşOËź[n9C^fÝî…+ő™SŸIm˝¨uż>o–ŻĹ6IÔUĘž>ˇ–íccľ-Xí{Şłf}ćCëŒQëF-ݤ7¤ĺ!Ť{ľ}aÚž˘OĎśnšŕ(ŰÁ8 ‘‹…úÜ%2Ü>đÁŽ:ÎśŻ<—ł˝6—Dp¨Ńë| ľ˙\ß4ćďź°ý<ĺ)Oéíig ĆQ\×ƒüŕî‡ř‡{ŰB7畱rň>ĽŰSߝN^v”Řťăô‹Ü! ţ3žŠ‹Őφüƒ“Łoâ?aŘ1śRО:˜ĺ7ŒĽTPVĄsN Ć1އ2NLˇĄß!CYVeáđ†Á6•žď97Ť¤cäŒC+Ćů0B~üÇ|ŸF˘°ÂůŐŻ~u_QáS?őSűßs<$}ĂJŒŐ>žČ‚{“6äĂ9ČŁ!Çđ=2B.‰:G:…lO#(iĹXIÉV$ľă‹< Î ŮŽ$цŐ/—.ĺDzăđ‚ě1âĆŕž4¤<łÍ~  äąuTH™“Ţä;Ţę”iˆĂéŁás}?˛ \™DĄ”4ŽCőĂxť§Q-(ʑ×=îqîc>ćcú:•­JbŽ,% Ž?ÜHŻDîHéOt* äc3i‹Á6+(Ž™EÉCЏ†qd' źŠ›lľ€<ÉCÚő8ÇÖş™(\Ă8ůĎ1Ȝ|g_¨xؑż´žŁL¸W"ŤđJÔ~çülŻ‚,bĚä/2#T˘‹$ęE­—yđ’žWžň•ý;[şÜőŽwíŻ‹l’Ę“ţÔî•mQRřďÓ_ KdĽyáZWW.ňŞ[aPď‘÷Éö8=qşMůŞŰU9ÄŤ‘z'‹ÔAÚzä° š<ôľ‰ŞÂuiŻŸşÉľ˘<ÉÖ¤ƒz§Čď”EîGݢ<){ÚfśnJjŰƊ˜+Żź˛O÷ #mô•q0˘m"úPÎ'rEÝę'ýWśBźsl˘ňđ;2K˝Źd%ĺL=Ę`‚źplœƒRśqęIȅňÉţŔŮ6'áSkŮÉádżÁăATҟ­†ˆ/7ďî˛3pżĺN˝Ţ•žuaËĎÔiúΏÚy&|ěNżš?‡G-H;~Ý˙~]wÉNŰţ¸ŤŻîŽŔék§˝žőĎ˙źű‡>>†çÄŃŇw.YŮZzxŽŕ´xťßŁťŐGÝjň~őöˇw˙°Ó'Üýîˇçöu+Î~(ÓjđŘďťö7že8 Ó§ŃňÜbŒpśh e‡—Y?xÓN=@VwŰŠSČ ƒ×?žűť×żîuÝĺ;ĎDƎqźá¤ö6–j,ŠĆ¨1h­ çu>˛˝0Ăҡ†ťśĺ^ŐŮ •Ą}ý€ĎSűĹgE+úĐľ ăÓş>†(ŒšCřđŐI[U$Íf+#ę^áĐ[#\UbT#P5öľšČ Ţ+ßŐc[CqÍsäP ‹ÓŽÓŃ#ŞО:—|í6+Ś7–Ťy/šäřÂÁ`¨Ăľ7–ç÷MݘšÇéc,Ÿj,ĎťĽq˛­?ůněřӍœ+ŞĂË ôZ•WęˇvŔiacsdđ›•Uů}ԊĹvĂňňŢëbaH\ČoéO3[Ź@śmČuúĆšd¨7Ăg—ŤCאćÝŃzŞ\ęyŮ&ýD抋íJúÚ&űk,ó:ÔŤžl,ę Őc{•†jÜ_–ŐćĆbEüźwĐĄžĺ$rŸ÷ۍ,úćžŢm.ŰZ…ăfă>Ľĺk’¤‡|G1œúוzRuNŰicĹIŻĎ_7_öĄqb•2>ž0L_×ĎłuH˝~ RűąÜ;ő°śç< Ş‘?&5:ujpH+ůk;HۨQj™'Rk~XӚ2M9χˆ Ë6ş(Łn¨ŸóeD#ýś!}_7[ľ‹~‹‰â ˇľ5ŢŇhŐ_­ćŮqŽaŽœ~c×J΅łEž9yU'ŚČ śZoFőbq^užčŰŰĆćČA°í›6Kt”)Úç}t;éWxU}OMWËô‹S(§Qyěvě[ d–iŤy.4Đŕœ2ĘsĂUއžŮ×źk¤/¸ůŽŽęŞťÜĽ×ƒÝNž8Ů˝ęUŻÜ™TżÝďţžzž9>ý ůBďÉsíćŃ% Ű&bůéŹjG?ÉńD0ßKŢ,xC—‰"ö¨cŹŠů|Ž9ß$=˙ôOďďí$č ŽďčNîtç;÷óŕĺqÝYb6ŰőńBäűú3ë>¸Ł/ N}pGgL9÷rÚÉÂőŇ̗—=ƒÎ/ăyŐđ>ŘIvGvnŸˇ|fŹÁř.cçŃół9gęžűŃŢĘÁ‚çöw÷wŸUçŠě ßńßŃ=éIOE냺M\LĺńLž-{ĺ= j![roĆz­nŢ3Žť˜¸h,0Pi0Ś%bşDČ ~Œw4˛4Q‚gť‚JV1ÇčĂoVńSyâ¤Ŕ÷T˘D9ČVYŐďřŹŘćáČu3a&°šN}řeľ8••ërˆ<Ń)8†ƒ:yŽ6Îu tü'…ʏŽC_dŃzN“ăš.é&-1Š’ŇŁ.ǑÇQŚguu”Hˆ|é$O1čfâ‘H œ›•Iůj ™Ŕq1–2xa@“U瑿‘ÎĺxŇ@^x ĹQ!eÂýyqƒ—8iä˜\'u"“@dÍv.<ŮvƒWœ|Čw]˝Ď˝ů>ĺ—z8&őšűc¸@–qâč÷ç[¤#ő7ƚěÄoČ˜ź ż”Gś•Éꍔ5†xęF&üM˝äšä-0^sý‘i_ȰL‘Čä;F˙8ś䟈œ“rB”!ßG\7Ž/8J0€ éČÉCÂŤÖeÚ$×Kԑ8pĎśŢ˙éŸţiďź@„™şĽKśŘŕZŮv9Ô4ę¨ÝĘŮŚýP×(CŇE~ă…HYsŹ€$\“4gűŽÔ‰ÔëDbČÖ>Ü;ޛÔ˙Vĺ ÇeŤ˜lA_—ţďřB‡ŽÍv*ü–˛DŠ”uÝއżłőIMC"6¤Ý¤ %J ç& éoăäEç "Âđ} ˛â&¤yĹ#hÉOm[”í r㝤te“DŠIÎľ¸?ď)‹8Bq/ŇĺKśĎI_Y'ŇÇm–´ŚźV+}ʀäěM3äĐNR§&­Ă÷Ť‰Áô śťŕ0a˙‰Ÿř‰>*űŘäĂ×uzЃşG?úŃ}Ý>}fŁy؇ŻýH÷ÓĎxfw˙űßgxőţ“ŘC¤D1ňŁ?úďű>đËżüË{9ýýßżŤűĹg˙R÷gög}ŔŻűş;u7?z|ú%Ťůśˇw˙駞Ö}űˇűÎ3ó֓2zéK_Ţýń˙q÷íOúśĺ˜ľ$Ĺ(”úś×$ęLŠĄŞŒŽßľýßď˙ţď÷‘ƒx>ЧŃ÷}Á|Aßo'Íg+]‹ooP{ş0J–Yoőz×?üc÷ł?űŹ~\÷ٟýŮÝ7~ă7öϏ˝đĹÝ3ŸůĚžm~őWuwŤ+Î|ďŃéŰœöV•ľŢÎcZ5’ÔŚăz9ëWăŽVWBˇŃڌľšWťę´.aĘŕť2¤Ä^÷w'ę×F7lăąąÜ uŐś†ëfÜcČËöHŃnQ‘ńDî˝jűăŐźUćŐčSŰu=6 ő>őď_Ë ĘąU:ŐŐŮ­ĚŰôL˝†c7FˇŐ}fËńٰ˘÷D/Ój8ŤFš!/ƒƒBÍOŽ5džţ¤ĄžŻŒŰݲŽÎ@óŢăTo˜ĎőëvSžĽÁyař\ž7ß9oŤ´‹ncWD‡ţĹ%ÝnYś2+ăăb<Ú Fř~Ť’>}Ť2ŢÜ\Eiä1̐s×­œ’Żv?×hu ŠËŐšsk™ľçZ§ęľŇŽZƒA[ŻŚ Ľľ<Óf§ ›čWŽL[ť”Ŕl]SŰČę^‘Űęů™ßâ7GÇsňę8Őć}J6ŐAŹŚżśA äóí푺^ťw$˜ ĎÔíEˆnœ3ř7v€™-ëF×;8̖ýĆhžłŐejžjűŽç¤ĎŽm°í˖yßéo7ËwËţˆş4Ÿ/ÚŃŹď_ă,“9hœ˛ÝB]ŹPÇTUŽmż×>ŁZjŸ‘ĎK§„#ťúݔU5ň§lٟĚőę}ç]ˇ+ őďţ>qˆâÜY9w{{ÔűcťÍ‘ÓDß7uĄŻ.ă>rÜŽŁÍŢ8X0śiŰŘÔsž:ٌŰŇlw9oŒeXŰÄňYŢ-ÜŃf+DžŠţ§}Öe+•Üť:oUçÍ\Ł•Ă¨|(×í<ĎÎ,ÍqYݚ>°ŢçÄN=mŁ`Ýüňăj gS_0uŢůä-o~k÷?ţ“ýœä’Ĺ5lWÎ2CŽ/Vń$‚Eď˝˝ó×=žˆšńwoϲŔnT÷ä`Ń*GŚ(łé$C}ýŹĎúŹîNwşs÷ÜßůÝ~‚ţIŸôI}ÝĹi Ű?Ą  îţŻ˙őż–mœ:ÎśeW_}ußVpŕ;œšB"9˝ć5ŻéĄ?ĺšHôźç=ŻťŰŐŰ˙ÍőyŽt⤊‚äĄ}hŻD‰ƒcʝüźřĹ/îŰ4ýĘ}îsŸžo˘_BŚqŇ\†{Ţyg.ú)ŽÁ*˘•…)ƒSžOßÝ-C‘oœEÜ^רĘčöx^ô×/{ŮËvž÷˙Źű‚/řüžĎ#_ô÷ôÇ8ŠŕŘ䳏řąÓ2ŽeüŔߏŔŕŮË8 ™!+ŽË‚hRóć7żšw`ĺžL29žFw[— MŸŽ’4dƒÜP¸ą*”zÂ!ý í‘6D}#˙Œ+Y…Ě8–zFݤŢđ DÎG[FĆuŸôƒHę2, :˝‘|c´:Ł;Ş7ר×Z98L‡KĄ}¨Ó›}?ŢŽ\­ó˘ŒšâĐS '}ˆîůʸCyĆň+ă˙0Ţ͜cœŽ•´5 Šën4.ŹăÁ8 ʌ–ť"żŒWň92iÇóĹ*ŮZF‘]í{"çÖŕWĎÉçZV­ŃąĘbiŕÚo™RŻ=ţ<_*”˛žď—¨tő:+١Ć˙ÁřľľŐňŤż*łÉëƢ Wç&ÚCňž<ľJ§jÜďËvžŰŮ(˛Î5jyŐňŤuŁęFB]y=Ž3Ó!sksď8=S—ů.[/´e6ĺ‘|ľő Ö­śŒ÷2¨Ö´ˇĺUŻS@j?XĎŻ÷ŤŤ˙kşŮÄ`żľlU~C˝Hţ㴓*ŰKăyÝb!ç%ĘhĘ s‘lg‘úŮśÎ,Sĺ×ʑ‹žltüÎűŠE}íóҁˇF2lűĂrőň÷XŚľĚŇk˙\ŻŐśűęüTűĹ]Jv>—yń˛â[+c;[¤ ÄaáčŃÍ弓rĹá8×iW>noŻœŢŚíöŠ´Pëm}öÔzx˛Čż˙ü,ÜŃaśuž­ż‘SŰ>úă‹•ŚÚc-Ż”Á¨=ab{źíEŰ>j;l•ęqhɢƒ8Œ´[jö‘=ćÝraŐŢĎÄq$œ:~hóŐ§1ÎeKœzzÎ2ÝŤžŻćť5Zä>Ťöź{ŽZVqFŞ}Z=n{{źÝWíłk?œ:zŹ×Ş8 Ě. }Áşç>÷šÝK_úŇ~űäk>pM÷gŻřł~.Ě\Űíšß™ďî§/ŔƨßU_Ŕo8^ żýÝßýÝîŽwű˜ţďâ/ˆí‰—¤ű@˘3§˝3ˇ}ůË_śŁ/¸Ś×O2gC‰ţ9D_P-™C3Śî™śc­Ąú˘ýĆwýńç ŞŐ1c>ç~yQ–/ŢŠw¸ýz'dÁ|QČgćůDgž<ŃSńł’y/2ĆFĆwč`nwťŰw~đƒúĎ\ Ż{ŢóťK/ťÉžé>pĚWžxĄ/`hśľ^ę ş˝őÔę ŃeŠ_ÔÍĂŚ/¨cĐP#ŔdʜˆÝąo´ŃîŻ/휫%mÝ`ýÖĎüĚĎôýă űŔW~ĺWö:ĹŔV!ř‡Ř˙]i;>)ě,RóÝ[ćŢŘB蟏?Ţݘ¸¨,ę`łvŢYIMCŁ#âĄE#K(~~ËÖ OGO#¤Rđ}&š1‚b¸¤ÓJ„„PCීőlgń¤ĘŞnî_Cňs,ҤA ďi (—Ôđ;ƒĎYéÍqtŠ<Z×NŠ‚‘ąCÂÝW$:ŠH?×ăÜ?‘E")$dţ‘M ۤ¸×!/¤!b"MňŽüř>)2&o”]:~ŻŰDÔAE&sQœŇYQś\ƒűS.܏t$j×&-ÔĄ?$Żđ1Ěó°âX <ĐbPŽQx!SҐđ”kŒáŐ8Ëő)ŻlÇä•=[‘#2CNœĂouëŽ:ŽcOŒÇQĐ#vČ#é¨[HcĐŚS—R^¤˙Ď˙üĎ{ăéä|4”IőÔM╲ć¸ÔŮ!Üď%KG¤D˘AüŽłDś[‰sJśk ’ßDĄáˇl!R'ljN@ž8îuŻ{]_ž HČ_œk˛ÍN\ٞƒ÷꨼c óQ4¤ŽPqŽH˝sĎl9’6G @Ţ8˙dűʉkĽÓFk;ç8ŒyüĆDŽňć>qœarƒA ůóJŽGq˜¨aĹR–鯣´O;HԓھɂôĽ]eŕGZxĽźëĘ)˝ăhłƒ9ؗ}éëň|ś˜Üîí-˝—rĺ|B]Ł-dť+Ú9íhÚĆëžđ…ýÄő‹žč‹z#0ýý#\Úó|˙ŰżýŰÝ˝îuďúýĆe;í×~mé7ó7ű{Đžţç˙üŸÝýî˙Éý¤ů°€Œp@<ăPŃŇGýÉĎýÜĎőż‘/ž'űŘÇ>ś—ăŸüɟôçÓd;$śĎzÖłžŐ÷\ë7óˇFűŒwÝXů ­˘dŹT™žť!´†§)ĺL=&QŚŢőŽčëcև=ěa}ýb˛O]ˆ‰žš•*üŕ‡ş_üĹ_ěǰäĹ]˘ś1qdŇOߋR%ŰűýüĎ˙ürM]Ľe+¨Štď•öƒŠň÷*śÖŮŠ´1ĆM‰„D˝ů˝ßű˝ţĎwŻxĹ+ş'?ůÉ˝LYĹóŽ6É÷(5‘72yÍk^Űýť÷ÍýeŢÍœĘś *ßş>ĚűnclmŐŕUŚ Nuʰş^VČn-1xŔho1Ξ\Ź"Íő!‘¨břˆ>dťBĘĂëńăÇFÎ +ƒĚF—č+GůhUeUŁîUběŤçľýGݛulL\jžëŘ9ro}Ő°ÔöQő:mß1ĺô1ő]5şć˜úwÎaĚ5RddĂÔŠS[˝ąGžů| §ŚE0D!GÄŔPšmE†­jśűm60ć&ÂC-ßak˜#]k ­ő~cśŮŻž97:ę°KĽlŚę­Ń5yŤ˛ŤeÚTkCt5˜ÖşXË*őŠuš‰ŃľŢŤ2eT†ÜŤĘ§M§”ą9&2ŹTYÔşŮʸ:U iÚl­ ڧ÷ÚęŮĄ:oŐšCk°Ďw9&Ńł ŁOˇŤökäÚŰqDčvŻ›7ƢĄ°ŁFU¤2U^ľMŚnóU­ýFu"€ę\ßö3mŸÖ>CÚzŢżxnĎĆő}ÎvÇ–ő9s>ŇrÉńKşyˇr0 UÖSă°Ú×Ěçóĺ65߈gĘDuŔ€BŸqäč‘>-ŐQ¤ćyŞŸ_üŐřgŘ6bl´ŻéŠÔöŐnA˛Ź ŰŮneěŔЖk•ůŠźÍJ” Ô÷”gë8Ô×çĹż­íŐ˘ŁúĚŞˇrŽĆźúüÎďSN€[[íV\%Rňۡçę٤ŸiŸ—ŇoО9vühëK}Ś÷i^üýI-łDZŽ[¨ôéîä°rőčř˛ˆ }ÁóŸ˙ü^_pŐUWu/xÁ z][ôĚo‰âŒžC.úć(Ń|čCoęçĂ\›š2óę=óťßú­ßęí0ę č÷ŻźňĘ^čĹąđ쎾€öKžĐٰŕ:ôĎřŒĎč^ň’—ôFtdŠ~5c,~gžĚ<›ů6×ĺšľŽ@ěÇÔsĺúRŸ˝{ÍďĺJ>ČůeÎËęćšä‹|faۓŐW}U/‹Ÿýٟí+čŠ/䟹0şęúć̡żýíz*ѨOČý9ĎyN÷‘ë>˛cđ25ď{?_/$Ăł=iĄ І0ÜŁçŢO_€.§ ˘ĽFƒNĺ0ę öƒzŽÍ…|`‹<_Űl×ú˝@]dÔ×ę\\ăżýˇ˙6r°¨ŰéÄΔ(lçúń,"Ž-éĆÄEă`ÁĂƒŻČčŹ)` TvY"#¤$,?çŃ)e@CÜmŕČŔ>•—kĆ1ƒĘÄĂ3F`ŢšOVäçş1Œr­xŠÇšE2 y&tœt”¤˝†&ĺǁLęŽ/ś— Ź,ĺžYŮv|ąUIŒî¤7Ű7$/ŮŞß1@FC:¸?Ż넗kÄhÍńYÁNžÉS ˙źs^ Ţt~šnĘ$ d‡ËšF‡jH…(/‘'ůçqF@Ž<ŹcŽ!8+ěłĺBœ6Č_D5rG”7|Çq”aÝň!†ůLě00xäĄĎąÜŸr‰,ř Ü'ňJ}a cn˘)Ôh*9‡Wśŕ¨ Şçă0AŢ€i' ‰Ţ‘˛‡şĘž4pí”GśÍH™äÁAú˛ ůĘľř›ßó`ŚŹ1<‘ޟýćxđ{śá…Üq(ŕ‡éLů'ÂFś„Éʐl7Â5#‹8ϐŽ(DšnÎ%¤…žĄ–d’€ƒ:Â/‘c˛}K"KvΏ ˜´Ë”GÂő(ƒ„Ää:ČŁśŔý¨ŸäzË`0Ž ‰TB˛-ňçZ܇tÔhČŁ:ŕP–٢‡t'ŽSË1}Mś2ŠŃyit¤ßJ˝ĘöăšN"gä|^ô‰¸’ö›Hu žúÁ9üÎ}¸_ś>É6;)sň„/icŕHůe ÔťœÇäOŢ(RH3×NŰŞ“ƒŹˆ¤ ¸e‚źâP’ČŮN(_Č?Ó8QŚé3S7¸÷Š#PUœnö ŔŮH{MÂĺÂł—$eV_łƒą÷í‘ű%—ܤ{÷?ž§÷†Ś 1™ĽŁóœ /e  –Žś…œzŒ"€gȗ~é—ô}#“6dÁ؆~•şł×zőŤ_ÝŻJ&Ăl­1ľmŰA„>‹ńů`K^Q äYM_˘ŕ_ţËŮ}Ú§}ZÉâţčúg#}N—˙ę_ýŤ~bœ•ȎßčËš>ýÇÇ~ěÇŹ ;ŰťCK×ITĹvk”˝>T…H˝FŽ˝2d͗}Đ?â4AţčgYEA˙JÝa|ĘłˆPYĄC]úĽ_úĽ^ąŁ!uE}'}.u„>öéOz_Ÿc-äÄ1<{÷˛%͔1ąž3Ů J„ ПÎJŒRäˆ ĺNjvę 8䗺B]BŹžaœŁό§>őŠ}ťJÄą‡<ä!ý¸ĺIęR˘ŻĄŘ¤ ŁÚÁ‹čQŚů 1h@ťbżR ŠUąX­1¨Fé0Ôľa%a]ů:vtu!髆ň0Ű- ň9y‰ŃŒgýɓłĽň°>7›ßl×jéViYWşÖĎÉWäP ;ŐxYűŞ„ pĆNŮ5ôh•K-Ÿę@ą—áą5ĘV#iĘĄUČćs]˝[ főžźgQý c­Ě×ZŁ;ƒ1,ĆąąŃxź’ šo.űť!˙[ý 'NžčçŠnŕhżŞxscsT/ŤĄŻ]!6rÚ^}W*)‹śÎvMý¨ő¸ĘźĘˇŚą­SĆěĺ8fQďŠĎŒ"ăÜ?ÇÔgR5XŽä8^Ežëś újŕœZŮć+óŽ)Łf­“m4‡Ü3Hăçmm“Cîáză>čÔŠAŻPąâ˜FŽ™ö5U78Ś­Ď™+Ô- r^í'"űäŻ?v{žŒDPÇ­Ü{‡łn{$§Z^Užů˝ܓŽzŸz<¤?ŽĺÚęßjyUxňSŠŽC$˜Áq$r_Ţ{ލäľŃ_ks4ďĚź/ۆ´Šł1n%U†5_švô'Oěű*ťăǎPT™ň5;ÍŐ6ŰOoŒ ťn:BPęOm“ă=˝ăΑÍńö3ŐcŞŻĎř**ľ>ŚN.#E~čڝţňبžśĎ„ö^‘G>ˇĎĘQŸŘíîgÚąB˝Wßwäˇó´"jtÝ.'—ÚfÚĎËűńLŘ翖]ígň7őâ䉓#ǨԧŠ~ƒ¤Ć×áyVűć iTjđő<{˜c / îą ş=ôŒĚ˙Ĺżř}ţЃE_đđ˝.˛ę ˜Ł`ż ž3gÄ)Łę ĐE0„è/@?Ŕ\c62cŽ:<ç}ó¸O˙ôOďůČGör`·Ît ̗ą/0'FžĚł€‘žyr˝Ýęw•ý~ť!ÔţśŽ_Ą:ĚsÚŻ}âwôE/ëuÔ tŮ_ř…_Řç}*ş”8P—~îY?×›ąBňŽ€zÁB ĆĄ?ţă?Ţːă˜#/ćՔÁ]îrŐΜůAťň=%‡˝Úéůe<ĆV‚.u¤ę ˆ„Rőč¨đ°—mŒÓnqčůŐ_ýŐC§/˜"öŘ-˘§?Ôš}aƋ•,ĘöłŸ˝çu¨Ťču֑Eű!÷Ęý[ÇíósęuěĚś˜žx¸h,0ÖŇ!Đ ¨pY=°rtŇYa¨pTźö2™ĹIGN'ƒzVýsŠ:÷ŹJF9njş˛ŸtäţYb=1B ÝB…¤3äá@GIcIŠ“E&Ü:cČ'ÝéXpň ŁäÍ`'ŤűbDĺÁ”m’ŕ~ UŸ­;â Ćľ#‹ŞÔCć\Č_œGřžĆÍy‘çR6Ȏ4TGޟ¤ƒNy$l?ç0XCÎt˜U†|Çą”Y Rţ\'É?÷bCZłŇ?×ăęEśA oŮŽ"ňĽL֐;䙼aLŔĄŻ2VrLŒöq؈Bҕ-]˘8Éä ™Ľ>’ä˜2CޤĽv^™°#+Ž…DvHáZüĆő“Gʐď8śî“Ł8çǨΠ7ŰÉdŤ”)'$^YAűź×˝îŐ獃eܔ#÷¤Žówœ tÖč)ˇlI’­L’ś ëƒ$żŃf![¤P/˛=L"Çd{>Ón(K AçS7(ŇUˇÍ \ŁTŠN75 QĚrOŽĄ~"ÓD0H˜¸8AžČ™4§ÝE1ç&ŞJĽ|V‡ˆŇ$+F¸.ÓůžëĐg¤íE‰`B~)CŇÖ+~NYU‘ÁL˘Ç@‹Ú~úÜ8q eR6b(Š#ßÇ!„tÄiŁŽfB†‰F”żŠs k>Ţăl•¨*ŮV†vƒÜyĽoÇؕ¨¤—ëRž\7Ń5âÄ}łÝOę#ňĘ}j˘XB…{#GŇEţs­aŰŁă“J"9˜ĚŠQkú÷?V+§×s> ­Qß?đv¸ćƒ}äŹD‡bť˘ DY—gUœéh#QZŇ/ó™ţešZo>Ź"ćšůyŸ÷yý˜8Ÿ•Č"ă´ĂeF~x^ńÜ'ż™ăčO9-QÁ8'‘m€ßřţťžëť–2F–lĄ˛4ŠĚç]z˝>űŞńĄ}&^ż|îvŢČ}ĂŚąƒç9Ę"x1‰§_Eс<â›-ÜŇ's]>ˡ|Ë2ÝČeA&ËqĚs˜žő[żő[—ŤÓ§Ć$IWÍÓ(‹}ĺ/ˆň¤č.H7r!„,ŤkhK(?Äů9đÝ0śKČŕ@˜tlÁó˜ÇˇÖ‰œÚţ˘uÚŰŤEśmË3b¨ßcYŐžĽöËçg7 S67§ťY7Žb“˛oÇVľ}Ľ?kˇߒ÷,ŕá=ŰhŽŸă-żBęwÚWÍS•ëî>žĺ{ĘŠ§:Ôv’üĺ˜ú ČšŤ~­ë2ĐkďQëíŇéfQ?Čϰô‘aŒ2ÇńâÔdx6mtŮć,íI˝ÁAć°ë Đ[ńüů„Oř„e˝%t=zÝ´ýčʨÇč ˜ŁMé ęA‰t‰žƒ10GÄůüpę fýœ &Ž"ä ÝúʓçxňŒN”÷ؔčł­qľE˙ÍßüÍK;sBrÔçDufŘŤ˜z<׹d}VÔ>Ďč ßôŚ7÷ Č Ÿř‡¸/ç,V$˙ąŁőšť!ZóSžň”ez9ŽĄč Нóžčßčd˘_‰Nöň›^6™×ł%ƒłÎŹ[FƒňĂ6<żó;żÓץŞ/8qbŹ/ˆŽýr"š#?ŽA;Lú‚˝ˆ 4‹Ăë˜÷|E°Č9‹Ňϔ˘‡Š‡kĐß^ˆ:Œî9 ‹:ßň?(\4Qž$´+Ţ;qČę v`‹Á ăńĘ+ŻěŻ‘čëxĎJuÎĽâdĽsœ6ň°ˆAšŽ c#†ävň5 tŇBX}ÇC!ĄôcČĹčG‡‘(܋t˘é§s¤“Ĺ0ÉŞA ţ48~c@DúęŠů<|łĹ@ !źHs˘ƒÄIďăľ/1R5df5yśĂÖ| ťL@ۉxV~snäLšř§ʋ<ňđŒ§eƒ}&XŠQ`&uŒěŚH琎‹q$Ž\‡W îôámË9qŽČ<rň@Z97Ęęů‹—YUŽd02Źp^źâ$AýâZœ/ŢÔ[ÎĺÁIÚăXCp"'PÖQt”I%őšt‘vÎOH8dNyđ˘LšWśm!]¤1çșżĺ' VŸâ”-LśV•*őaę~œČs˘p~"˜ĐđŔMt‰L´ăhg*ź`‘ŮŢđ†ţzŸó9ŸÓˇĹVŃ…PVuWŇGŁçłĺL A¤ƒrLdŕ8Ž‘­NxQ?Ł|Ŕ`ByGŮQdő!K2Eţ Gů#÷8kÔh9ƒW8é!Ü1¸iŁnSŚźŐ&ő([w¤<’Ž8Cpoę#é&˝ŮN%m˝:pŒŞ|FĆŐë’ňˆły‰B+ŽrŐ1ŹŽ@Œœč(ĂD/Id–DmŠm,{¨“\;Ťh¸í' ‚ů"N.ՉĽ*d⠃üRŸ¸&ő‰źd{ŠşUPƟ2Łź2 ‰PżBíÚ-´CúťÉg™\Xęuęsžëşqd–ÍM´%[˝˛ţ† Źo(´Ń‡>ôĄýŠŰŸ~Ć3űULܨÓ8~Ňďł*žží OxÂŽźŽ# !ĄBéߊßL„3ĄŁmĐ>ó°Ľß"lŢÂú<ëe# ôí8X0ú6Ú4_úIň‹,qü˘AF|&Ú}%ňä7ö—eÜF‚ł2Ę8ŕďvž1w¸ă°*ÂŤ"cŞŢÝ \ÎĆ+˙ U–Ôߒ6únBSĽäS>ĺSúžČ3raß]äFH”œxxţłB‡\ƒcČťň%ďČ š˘°˘ďäzŒŸŠÇSůŘË0ˇ4"\€Éh”ŚI °•ĘŻüĘŻôc÷óoţM߆âŹG>YéĊžS(Q/§ŹxfĄČC~qtĄ^~çw~çrKžƒF-ƒjlĚwÓUđĘĐYĎŰ ƒçĘ([ SŐřšëNՍ8ç{ŽŐŽĎX-m!ÎŻ­˛˛R7çŐ9[îGĄ°Ę!ďq"HžZăYuŸrx¨íˇĘ˝c‡źmôňŤĆĽDeˆ ë˝5ŘWClҘ|LpkLúŚ a5˝ ŐňÉ|&2ŞQ'"˙kwĆSČy0 ŰĺôQëĚjŒYű˝­Ľ°ÖĄĄn98 FˇŐÖ+SŽ6ŐPŘ–/˘iÔąw­Ďľ|ăĐŇËýÔĘšĽŰë8çŐ{WgžÚ>ŞĂOć@1RçďĚŤůŽůŻĚCZƒ`ăŐčľ~TŁc­+Éój‹—SM™uťdŮօ*żä?F˘6ŇBÚxŽłŠ‚31ăt“ůzŽ›šÚććŃeŽš=ŠTŃ7"ŻZ^ő÷äƒzWˇXˆA!yK}Œ #Çţ÷nŐˇö÷ZśőĆ(ÝÍ'ë[uIş†(Ą§ŽHă­jôˆ|—śšúYóZű˛äŠŚ#2ęŁLŻŮ8zW#ÄaYßJ9öůíęśAľŒú´D$ŒkŻe{Œ›G6G8xQ&uGů>ýmt—œ_# D6S‘!ŞS ÇĽV‡§z~Űâܟ´Ś<śśˇ—ýU×­ôP5ŠFŇsj§înů$ ľn¤ŸŻýJžË‚´Ú6ŁkĘ6­‰âšm@ŰMíüŁŐĄĺ^ľ˙¨úľę SŁÓÔ:;§í+kú—c‚:4ŰXőÝ›“ŽicYŹRn˛H˘cŐž/‹eZǘŢ!hcľľHŇV_r0¸XôÔšŸţéŸîőeD `îÁü=ۀ2ßřŠŻřŠŃšľ.V}ÁŰŢö—Ëqč ¨çč,šŰ?r?掇S_0čűY\Â\ #şcňN9˘;@/Md8 ;ćÄč¨ŃÁÜâ7ďçşčIáwżG/tžœKd œóăx‰ž!şÍČťu<Źu¨ÎŤÎuüž÷vźx6˛ şćżDő$­ä = ő™ ô"l/C„bśaEĎDž‘[Ş@}žć¨'l#‚Nšp˝?řAÝ#őˆ=ÓPŠĎV"žüň/˙rŻ/ř†oř†e´nô´/ęú(ô*vtąM.‹tÜقčLč0ÔaźÂ —pLvyřdۂ(#ëŞĚD:Ŕčˆq4Q1¨¸(Ňë ű:)âEǰÇýd$’ ?+Ős>÷go)`đp{ÜŁPp”˙˛ÂœF§ ҊŃŞGŠÄ‹ű°‚wœOÇʃ˝—Ґ ZţÎjőä™q-d@ç‹ń4÷äţ5úB;ů|]"2Đřƒ'Q¤-+™Č+éă7”aއ,87aÇbĐĺ>\7°ľ1' YIËo\“t“gö;ăsśLɤ›ňBćä…vŒűWˇöŕĆą (yŢ+QZ9 # t@œĂďÔCů­FĆHdňË})+~C^I#eG‰ě3œ‡%ő,ő˛*i㌑H%üÎ;iáÚYaČ/iČ*IäL=IÝN´Ę#J.җ‡{de/ÚůĄNSŢȓ:<Š×„Ćf‹œÔoÎÍ"´™Úădƒąœ2#mu; îƒlë˝:p<†Č Ł" ăäąBZb„ŇIýA&q˘s_ŽKßoÚUV×ÖvByp_ŽA†|Mwô&ˇě.$QĐ}ÜÇÝ˝W”0ŮbŒđĽ_úĽÝ˙ř˙Łűžďűžžßý˛/ű˛=űŔęÚţř˙Ą7ŽÓńŠ‚ĎýÜĎí'‚l'rŻ{ߍwD¤Ż9ŒÎQęҏчЯŢéNw\ʃ>ĺűż˙űťűąë#7° ŮဨžőʟëV˜ěć9Çߏ{ÜăzĹϓG<âýs>‹°Žżő[żšS>W÷ŸŤq7íjȄ|ž!Š‚á9°RXT%uháŔ8ˆđžäńĎxFß2>zÔŁľÜ˛ úKśâ˘O%Żô“˙ýż˙÷ž.>čAęë }ő(Ťžř‹ż¸WĚĐ_SošFŤ¸œú;yťĐ}čÖů¨Ěhgä›g'ť/zы–†¤^wÝGşŸ˙ůŸďŸ3ßôMßÔ×=ĆOyfsrŚ>ëYĎęë)çń ĘrűęŽjšľ†o ’8Q¤Žív2ę)b1ÜUcâ”ażŁX5ŽfœŁVMgmw[Ĺ0™tŐq^Œ*\;Ć­Ü'iŁžg ŸńHŇăPţ”¤Ý˘]Žś]¨ĆÔŞXY­˘˘dŽ™şRĺRÇccĺĚŹ_˝\WçćÚUέńk5^VÖVšL•wîÝÉcČŤrŽA+ÇU'‹vœ[Ń×f{ťá:›Łš×Ż!AęFĘ9ŰŽćU›“Ť–kYĹů>ĎÜԍęą4öÍvGhÇŕš×ŇŔˇ8&ÎŐŐřccŽi°ľŐt×>ż~—4ˇ=1.3öĺu5V‡…ŹŹoœľŽ´uśĘ7XľŽ´TçäÝF“ČýjžkݨĆ㥟ňÚZG9śF&äZ‡ŒŒ!ęřŠöQőťÚäœĂń<¨Ěu5ýGźTYÔ<.Űýö*OľL‡H/q˘"TĚŘiĄFçiçc1ЧÄą˘çá78cŒŁ^$ď´Őô/Éűr%×í2€çźşÍË2][ŤńR퓞UÝ8ľ\SӜńŸł}j\Žmľłč Q´Ż+ô‘;ß§lj]Üîe8VÉÎçăč6ľďhóš|ĹiĄ>‡Z'Ăäż>›'•ˇů¨ĚRĆŮb—ź`ä­Ď‡üŢË!ÎC'ˇ–u:r‰ÂEf'śČ˘ömqPH~ës¤ö!yoŸ/yŚŐ|Ő­JjŤŽŽőŮ´lÓۋ>îČXX>ęöĘŠ_UŻ0´Ĺaë™ę°R˲öU¤ővˇšźKt9\N}ÁÇőŢč ˜Ďł-$óˇďýŢďí瀏üăť!ÓÎŁU_Ŕ|}´úŒăĚŃ 6}Aç#ôźŁO_EŰ'răţĎ˙šűŻ˙őżö:Č/ú˘/ęmB€Ăýsžó;˝Œł¨öă?áăűĎ}îsűţ‡H‘č˜çU§ś‹ÄŽŔďqĚjŠó‡vŒYrѝ.íŘžöőľ?ŽĎhô(Ôś ý‰Ÿř‰^?ĘBGtšĚwѝ˘ĄďcËň…,Đ# _ .˛+ ^°+Ě睡r˘NQߐ%ňŔ…Č+mz2łn<öăÝ1yC,0Áq$sJśĄeĆ/üÂ/ôϖoüĆoěëv—Ȟ粣fŰ"xgťřţ~ÝÁEZŻx:ĄUŞ2Ÿ‹\úH7`ŻZǙօú,N]Kôý–V—…ÝדŸüä>Í u˛ŔÖ{Ý˙t9ÝXÍűoüĆoômŰjĆ+§#Ďëíă rş’ŸćołÓxŸíń9Żňž×ćâťÍćĹo7ă}gúŇŹ˜§ŁŕÁU÷˝‰Ą•ŠG#ʃgtÍę¤%ÄđĚ0´sŹ2â!ƒ)ç3PŚń$ ^BceuvV˜gĹ"†y~űüĎ˙üĺÖľRçaÇyń8Ë1ńŞ'Q^đ;÷ĎŞv”Ú1ÜqRxš˘ŒÍ sdPˆ(j1 Ž y‘ž8ŠĐ!Ô 6ƒ"ŇPˇüŕţË}1šĆA€üFŇB'1 cDEfW^yĺ("F…t$Z@$ŹVöČĚä‹{aÄáoҞ灄H#i‹q—tPś‘Í”#FyfÔ šgÉgÂXW…Ç'‚F ɔa"Rd ĺ€<¨ŤÔYň•ČmGĹu9ňćŘL[YԁS" D­HźďHÎGÉOš^śuŠäşŮB„ëđu Y§nVĺ@œT˛U ×E8Xđ`Œ3reŕĹ;é&}ü]äŐÉhśđÉCŠű%ňG”u Çő0\ąş–ƒxÎá^qtˆŃi˘ŢŇÖ1‚ÄŘ_Ąţp]ҁ,’>Ň̀ĽŽj \2¤.ĆŃ&ŠĘ&‰¤2IűŇQˇÍ¤5Ž1QĐs턯ʲzN˘mÄa‰>0!ݞ§éHŘ5úGd™ýߌdAYÇł’{Ƒ'­‚ŸrĚŢz™„ Ëv˜t$j˛&,ł×\uĚJ@™fE]´Uę^ŤŹ ä=}ż‘×Dňáœ_ˇ"ÝOyÄsĆáĂţ`7la3_D¸š´ŠŇÎ%’ćŮlžëšZď•tVg‡üVW~N9´$]™WÄÉŁśĺ(1S‡zçĹ5jżÖö7DtČłŻÎŤŞ3SŇQűɍ’÷ŮŽ~8÷ŤÔčmşę6/ů>çÔgG•Ѳ>oˇ•"O Ű]Ôű ‘zĆÇVĂyŽ' ŽËöśíśľ­Ű??v|—ăX_śŰĂśVăçW×Ë˝ęL†2›őŽaÖgmŐŤĎ÷â˜z˝¤Ÿt×6\ĺIÔęDŰľĺŢ;;ÎW†¸ÔהAŰO=Oڈľ'Ý}:xN•ččkäŮíޑaÜ7Śük=¨÷J™Œó´{%wuŠu•ߪCEúˆ5)éiŸu ”8ĽdX^ľÜZ§ !+çŻUš‡ďžüąŸŘÝćV7=-}ÁŞlťQˇďrvP_pđŠúě“'Nőóż˝ćŽôńé§Výí~5wiőuîTÉÖ⛍ń˙^Ôžľ˝V[Ěç{9t\ćz•`x~ŠcŕÔ#žŠŒ‹>꣆mPbÇÁ> Ř0łpsŠýŻ˙uwś‰}—{&ryČúŔŞúýŸřÄ~‹›lD$‹8I„ýęÝłŸýěŃçĎüĚĎěm­é\“>óG~äG– PŻ;˛{—Űy]łxßj^óĹűvyÍË{űęöřźß{űwËÚ'ďEÁƒÖ•[p X4:*p<3ĽqVăk&HY]Ěů1˘aç{^ž1R‘¸6Ćz*÷Â@Z• üMĽç>Cd Ž11L’&k™¤% ÂilÜ+ŤŻłeçÇy Ť˘šiŚAś+ćI÷#}÷ťßýzçœ-p‚@ŠW'ˆrĎqR!żäŁ'éÁI:¸'d›†DÉŞöş/vdÁ‹ó1¨c\ćz܋kdETŤ´á{䁏łu÷ m4n  qŕ{ĘCt^jdňČ=ăŔB:HO;(ďşBŁNҸ‘'Ł„cQH˛Ŕů#ʸ„FÍęu>cXîÜ- m”+e–t°¤WŇĐvš|O]Dޔ-2ÉÖ&¨9‡ďxq.é }qjČöČŁw âœǔkś[™š,×t¤LH÷˘N‘GҐ:…,¨1´ç{<+ńŔĺ\ę'u›aüĆą´•Lnëł}˜&: yËĂ7ŰÖd äMx6ĘOX<@c˜Ď6”G"1^dË˝(Ż˝<î2iŽ\ë^zźEú‡ŹÁ‚<ÓŽbhĎš‰‘­s˛ęZ‡—ú`Ď}(“l!B:żĹaŁŽĘÁA†cqH„Ę-ŃNHi ?˘>Đ˙p<}͔#ůö‰;Q*$Ü™ÇaƒßČéŕúŽ XKúkdĚĺA” Čŕ˘8—kßl;’´Ĺ%Q‹Ž3éĽňůă|ę÷§Ÿ!äOÍ8ÜĽĆYŽN̸.˛D‰L“ăqţK´‘ČâÚžo§ż9ľT~ĺZ-ăÉŃxќ_ę¤ Ÿ{ĹsVőű/ďLśN~¨ŰlO–ú|†ÔŸú=6t錽˛AŽ=_iĚŘ9 š÷ŁM6ˆúĄęžűťżťˇw|Ď÷|O÷ƒ?řƒťœ,N— á\ÓcĎK`3§[űf§ůŰě4Ţg{|ÎëzE°xÍk^óŇDČ ľżA 30Ç@ĘŕŁ#ÇĹA!ŤˆůŽĘÉńŔPPQ✱Ńxŕq.äŇ%ŤĎłjż6ŚŹŽgŸ,î‰Q÷Ę+Żě vŮkű`€ť|1ĄŔq!@Œžu…8×ćœ8zdOXҙ­8ž}hĹy„´p ŒşÔ1fă¸ƒ" ȕc¸×'m\;éHg—í "Ó(!XľĎńíŠ ­kqŽHˆüŹîN™Ä0ĘßL`1ňräAgTˇŸ }‰ÂąČ5Ę,ŽMô€V¤9“Ž‹Q›ëÄCtdÉąěOžZ}čC—Űqp-d9Ä& äštÔűgpC}˘\ÚU>1Dg/ʄŚź!ĆpĘą*39plśĚÉö+1\ˇ|ţƀĚCŤ:ÝDQ–­xeݎDˆ!ŮB„s¸7r轁+8ă‘+éČÖ,íƒ'0dÇš€wŇÍy‰Ž§™lUAIԊL^)OÎ嚤7˛Ćš‡BásśÍŚ˝dŤ‹ě…qŞűdBŇQˇ÷HűO:R朋\ÇN9ˆľé ţĽnrô)ČžűqlœĎ"§Úß$ô$éČw¤#NľŻéJż—hqşáÚ­,Rݞ éçşŮÓ-Î YI˜ô“>ŽĽżŁŽM RŚ”m‘űÝínwëűęV9>N@$ä%ýE”$ici?)—֐™kŇ^qŠJ„~'Şí1ýWuNĘsƒ{ ~O;I長;“č÷˝ë/wF.ŢÉĎN›ßy[ä)Ąş76VŤW —ŮÄÄĘ)ç‚vŇXߣ<]­H”šƒ"q{ŠŕV-ď(ěŒ5n˙q;SWĂťĘzZÇO˜r¤˜ĎO#Ôß|"”>~y¨×ýť&¸˝Ńośş~5ę…ý‚q[Złú.ůˆŁc?iŸÍť3Q,Éé‘?ű‹Ď߼@ŠĎ­ôĽSu*†‘ÖŁEŒ–Ő¸ÇŇzlë`ąJG˙˙hőëpÜđ[Ť(ŹŤs:nˆ2˘sŞŽc'Di4~žŒŽĂXw؆ŁĘljm5.ĺzSF˝zĎŠ(5UŢSŤƒŰs3'ŞimŻĆŔöžŐ€ZÁSʸqY "+§’UxYŒR›˝1űŘ ˝’Ůpü|1śV  ¸"šŽ[‡ú0´ůŞç×ňéŁ*lĺQëÔůä¨nĚĆýUMWćœő^m™÷ÝÝl6ę-Y MšśçqŒ!0GV#yŽĂ ííśŐi/ˇă˙˝ęc[—ňގCm=ŹNíł4ç27hűúŽVˇRl2öKĊȝ÷­ĹV››“íŹ:ł¤-ľ‘g’śÚ†ŞłNňZŁbFo´ö×ę=>VuŚu"XŐĽ­.[„äüežĐŠĚfٍ5˘ÁŞ]o-ôšWŰFVrÜ•Om#q°I˛Śi™ňŇ- őłéąŇî~mܧŚŚÚ¤~¤ĚĽ% RYvËúĐ:!­ú"NěĄ>ő<ŞňČ1S}HîUiŰĘ^}s•Q"˝ÔôôžţĺYÔʰţ=’!őhžx~.˘ĹÔgZ}žĽíˇsŹÁ)îşĹłncĄáČŽˆ6m=ŞyőŻŤ-ÇŞŒęó3ék‰\FÎ8Ömʜéâěł2”oŽ"wśéjjús˙“§ŽŐŃ~˘0‘űçű|Ɔ' l §ëdQÇůYœyž! ąŤýęŻţęž6ŹÓaĂ Œp0ĐŹRĎ˜ď1Jňa ЉP#t"#Đ@P2cüŠSCŰhęž{eoŔŹa-Ć:ŒŹtćĹ˝Ů[:ŰOţ8=p_ňA:b$ÇŔ‡ąŽF”Č{ő„ځ'Bע#JԀxŰgxÂÜg; ŒŔšiŘ8ZŒ†‰ Ŕ‹č ë䡙¨YĽypňÁ=jĹD{Č8bpFOΏÁ‘c˛Z>+ϑWä¸Ç`8%}ȏăSƔ-׍ŁDfHżá ‚ŹHżó7÷1:ŰĎp,Ťĺš7{wąĽDœ+ ő y!kňÇuřLžÉ éáҐ‰ża”ç…1—|dŐO ‰šÂ9œŸˆÔŇ] Ŕ‰Ŕ‹kƒü'ůČ*€ęu—m`_Ň'ä@:HCʘźfëґíW’Ž8!pOÎKTx¸qnV~¤Žr^äÁď‰8~`œć:×9/Î"Q„%ÝU)@y&Ôoö§ŁĚS§ăxÁőę œDnˆUśýI(uŇׇâ](ÁӟđéŚ]EiG@Ybě' üĆšœ§…Öąeě_ۧƒüî™tsaEŐąţZ‰˜Azhăä?“ól Ăo‰J“9yKű# 5LuÚ|Vč sƜë$m­‹ŇĽž¤ďlSŚqBJ´>s>çP÷ăĚS•cŠl)CšŢ÷ž÷íď‹<¨ť¤ź¤˙͖4|Oߑ-|R?ăäBýFžq(‹R8ŤîZ§ʓ|TĎďDŽG67—J’Ľ¨›^ĽŇ*ĚĺÜPĺŰ*Ę÷:>J­ĽCĚćFo´ŘÚŢéc?řžî&7˝uç\OŚhŘ0Uß2)ęÖ];ýv˘$ĺˇÜŤ˝fUĐďi¨; ŹŇ3•ŽąsÇVŁTż 9'ěUŻZ]5d<Ľ]Ć&PW‚Ç1ľŸz5&ÔS+_Ťą- ”ŕ­â2éo 5?I{ÍWťş7NÚI;Œ ô+c.°}E{\kĘPšŰ ÇľÇĆçVţ­˘šU˜FŽ0lW6A#rleÓփ€Zăwý;得A>Ćďá}ž\˝ŸŐŮŮşr{Îś;†ŠĹ6 óyMăř“;çRf|ŢŘe$ŤFPŽËĘă>RŔ|>ŞS9vĘÉ˝ţŢGÎéĆ˝ZGbÄk•Ä˝qţČƤźęýbœŽĆVœtŽlîv~9ujç^'1¸î.űŽ›-|śúČ;×92Žp”ú]AŤÓFk[Ťőr6›VţW9Ő|M)ń§Úu•)iŞŃMcXž2Ţśí<OFQ fC”Š8ő çvË6[#|TŽ,ÉďŐH\ŰvMgîWWôó™yNúzÜ2‹-BŞa/ůnëčö|ĺĐÝSż E7Ž˘Q Ęšîp=—VýníCkůś}-T‡Ú˙ˇNiš^­kŤ~fuýÚ&ÚgÎPncç—Ěáëöm„ęqÝqŘO„‚ÚVÚgĹđZ9ŹÖ|e!EMw뼖•żm™j/Ťú?DШŃŚžľŐ) :Ě1Ô™ľr\^ccˇ3^ʞľżoëou6X9'ŁeśŒvŹůűxYWŸoľÜëůWó?Uˇ’†PŸEőˇôi‰|çôqyŚścˆČą•e}Ž,ŰČŹŰőâč‘Y÷Ńw¸EwŰ[ߏ_ŒąŮo ˛Ąžŕ€1ר/8¨¤/şäř%;ă˜aÁçÔŘ÷ 3ę7şiGŕü˝×8?ĎďulzÂŢLő7ísx~+ńÜt iűËź˜‡ź˙ý×ěŘ-Ţ×ĆÖržŁ&äů[ˇ-?“žmék˝Ă&T#Y|çw~g˙™ď÷K}Sœ¨/DäŠŘHú1ب¸qsŃHĘ0•WŒĽ<řCXVO×Á1g;‰„ťOř|*-Ć:*MVąeŔc •Ť:mp>×ᅣE7lŁC8[JpÎ8\鰚™F‚Q‘ësOŇ#o6Şr0|‡átÄˋ{fÇpmŕ8Œz1řڃ¸Ë]îŇŻž&ߤc4 œt‘WŒƒ éĐęʉ¤ƒ{atM˜ţD ˆń5ŤĘůŽß¸'2Éö 9†´‘Fä€Ó˛†şú=+ĂŤ<i nœoE Ń ÝČů|Ÿm^0ZgĽXę÷K$€7żůÍ˝LČ?űÇFƉž§‘ěÎu㘗H*źsMîÇdA=M=ŕ|œ‚ŚęĹŕÔr´{ßťŻíN]÷ţî؎BňŤP6,ú„ŮhŇÝ*Köú[Î/í¤śŸĎ–Ť‡>q8ś7dŰé'Ż;Ń]óž˙ťŁ”Üě.šě •&˛‹jˆ™RřܐöŸëUÚj°nᆵbý4”‡“AM=z”ńČ%˝ŠěŘĎ-+%ßŢNA­1"ÌŁâěšçě”cÂř^cƒF‰ÁşąËˆ˛ŞďÝŇHŸóڌ5’ĹÔuŞ!šžW‰ssćO­|Í˝–ŤÓçŤŐÎ U^ęS¸ađŐö*Igísę˝ZY&m+yĺV–őZŐČVßľĚ’—zż)ălŰ7ŚŽ¤,†tÍU…ůŇÉ˝ęvb§ÚęU†ú08S°@†mRG‡zš ›c9$˘Î›GöĚ[ mťëŘjŒžu7Uń]ËŽ—ăÎ}şín4ëǗŤëVi[÷jT9×ű Ÿ‡…ë5Íu;ÔŤÁXÜßëÔ|Wšůœ1x"ZÔ4Ő:QË=2ŹFÔČą:FM ÚçQŽ_űÔ“”SÚ[‚WëâP—şŢ‘&×Kú"ŁlRӚr­u;÷Ťe§ŽÔÝ*“Z?Şń{ŞżIČ1‰ŔÇA"OĚşą1Ľ•—Žă—ÇôßŮ(/ľ.§\[§–^†óůdżUĺߖíŞoYÉľ­3­üňžŰŤ-sęł í로Nöĺšďâ0Â{ ţüăyž3šwú‘leĹwíëslĺFßV[ŁW[–‹ąHúœŐV/ămcj]Źýlë0WŁ3äťśoÍk‰b§Üîv;cäs?÷çßÖź—{u2™ŚÇpWŸQŐ /皎ěOž<Ńoëôá}ÁŠĹÜ|Şäď*Ÿz˙ÚŽk;jŁąlmmœŸ’ŽÔáÚłĽž Ţ›výHž“)ęÖšŠŽS–uŁ[őăGvžIw¸ő%Ý}îńĎş[_qÓ>Ňĺéę *{}/çžÉ1Œú‚ J?‡8vt1&žO>ăŰĐm?ÉlžÁŕhҏŮ6Íl´ăÓ:žŘë˜ö;‘:/ÉçÁŚ€]ë}$ ěCS‘#ÎuşŞsĹÔNëxęSŸşëťÖÉâIOzR÷”§<ĽŰ+ Ő)<ăüóM]3&v1pŃ8Xd˘ƒŽJ—H űY=ٗĆ|NÔˆŹ˛ŽĆS h75€×§!Ähç Čśœ‹QíďxGżŇFyŒçu;‰úŔK¸›Ź~siŕ~żc„ć=ߑ?ŇçÎá ÂȀcH3ůĚo‘Y´‡(1Fr ŽŁúßřĆţ3ż‘w^œOşÉ;Ÿc„&q<Č6gc„Ž_Ób˜%í1ӉƉ%Ń C-˛ ÷¤Ó%šff¸f"xPG(ól‹0ĺy•Ž燿úŤżęË#œDeƒ2Íýń€cĆĺLV9.Qâ¸Á÷Ů…2Ź‘9B?ĐY8ÉđÎqÜ/ů‰Qœ%8.ůäˇlŐ璄5â•- b@'ż‰|ŇÖŽ›čä4PŸâؔt¤\rMdB}%ԝœ›č5˛ ÷ĺZԍ)ƒ8×ĚÖÔ îŸ-G(Ó×˝îu}›Ăقóă Ayýë_ߡI"Üă÷čŻM~cĎ~^QNđYpę tÄéŠ:h$Jiâü”IäAžŠOźÇ9+Q]˛"#Î)÷l+ŇFH:¨”kúŤ8$p}Ÿ“ŽиW˘:¤˙Čžż)ґč-܋úé'Ť˘/ý#çSŻł/ZúC>ÇQ-˛Č€›4#/~ŁĚ˛—-çĽnńŠ“ÎN䃭](›Şä‰óe@ţr_^‰*“rŤÎqŒ"ż\ƒv›vžWÔ˘ŘBÔĄ8ŤE\G5úűôK´1ú,Îa{!ҕčé#0nź˙˝ß˝ëďţώĘíTżšrP–l–ŐN ĹW7VE‰’ĎraXM(űOŁďť…"meŕVŁdœ˛˝Ł(|ß?žłťĹŽrĺ&—ßRĽ‰ě˘*Ě÷jçŐp“söW^Ĉ¸2ŇĽ/áz‚ij2|P˜RćL}fu“öM†•Źý:㚼:0´NŐŘPW?gľuš–í §3­1ŽW‡Ő] Î9~ŐŻ"´ů¨÷…şĘ8ŸŤAgĘČĹߌ…{D‰Qˇ‰Lzsl5ć^5ŐWÓš´Ć¨ý”FŐXÜ:äüjŘkŠsßjˆ]'ÇÖčWŇŠĘ5NÎUnĆ ${˜‡v‹mÚP]ˇ3ś;ލˇM¨Q=ŞńožüneĂbş’Ç”SK•cÍW5Vb ÜŢÚŢedŻrܜmNĘ(naŐéŚ-ë)ÇŒ uő|d™×˛-%şt*iƒm]„Œ˝ëś!™ł´őĄ^oęšWő;šWë”|ˇé\/+ÍkŸ1Őäó Ÿą3ÄpüĘůfX…OŮ^–çň\ŠN.5_5­Ő0Ń֏ŃskcźuG˝ö°’}č3"ëȤÔ2ßżuŽĘ*řŽßŇĄOě2mšá~ă yŻőż˙ž9˛°d<ż=Ň QQśw9˙´u$ĺ[űče˙˛(Zć)ˇZ˛}PędúÔępłWŮEf‰¸xjá—$yVĺ^Ý"=D|™ÍÇϘZ§zGWňßU'‹n9Ϩý{íSNUFÉżĹqĽö9˝ˇśFmŠÖÇÜ3[ËÔr¨u#\ú­JíŰřwjëÔŽ>°ß~(í­ŻzC?ŘŚu ýÉÉ]N-“Ž=‹:Bú7t¤ł5Öö8ޏ;mҜ•ŁőůŐ֏Ú×Vg—ÚNSçćóńł´­_Ł~{c1‘+îtŰKťÜűNÝ?ťÍ-‡lę )ë™ú‚Á¨/Ÿ­€ŃŢ™č°0rƚ;ś6¨|—~5bŮ/[ž űqěwd?ÚyN>37cL[#í˛ŢЎłÚżĎäŢmŚÄ1<Ž íüůú‚­ŒíAžüä'/ű›z˙źÇF ËŒ}ťëĆNĽgʔ Útd>ÇĺŒw[š_ˆč’‹ĆÁ˘vÔvŒŰ"łuEVvg5:żq,•Łd…ŕbt¤ctĂ@–0€üžˆS‡k†(Č0čb NĄD`ˆQžtĹŕ:ĆNŕ¸ÉŁÖę ”é#œÇ5˛ĽçFöŮâ€ü’? şŮ΁üD–¤ĽśňLŮđŞŕD!żüM;ŕ\7GYŇ @n¨9žü‘–ʞKÍ Ѓ‘ő”W­Ů6éH䏔SŒăqäHHż‘_Žůąűąý5âtÄoD>ĄŽrlÁCy>ŕč+ęjŔ8­pOäšQ>Ä!鸤„˘ĚC‡ ҅A=ĆýäłEQśŔ! ä“ö#~ęF˘îĐF&Q"ţć÷jHȃ.‘蛸VęFœ•Š"'Ü#N@ЧŮC6ňˆłç÷JšĹ–GIg넏š.ĺAŮpŻl}†DĽHFž|ÇńqT¨ŰސΧŻŔI†´âŔŔoôm;ŤĘŽ'›¤#ő$BbÄ ýĽÍ$ I˘¸Ä؇Ą8[Ä'ŤÂę‚ßňźA.Țë“ňÂÖ=ôĽ´˙+ny‹î˛Kf݇Žy×NĹ:ąT–D›• í Ž~žĎ–[#%]ŁČ ?Ĺ@rňT÷ţ÷üőŽBńäŽŇ䣺ĺ2TšŃÓ*{Ą*NŞ˘=œŽB$†“?8Ź”,U)Ü*iZƒN5Ž\ĘéŢsHď d^ŽŹŒSy•sGŤü݆…şj”}¨głŐXş˛Ú¸ GFśşEĂÍ ŽŞ’ą-ű)ƒmťr>×HƉĂęĂÖČŇśĄÜ3†ĄíŢ 4[nř­*ugöÇUFkź™’q5 NÍ×Úѕj°káSmĽUŹVŁ]ťJ˝ŢĘń ÷Ť œŞđŞĺÎWWÖŕ<ąľľ˝Ťnä^5ň%×̍•džxń÷vo ܘm, ŸŤyřN>çCDj[ůŒÇn+‡—VvaäÔ2Ű…ŕĎď#Ůmt#™M9yTýIű[vU'RëUujČçŮƸŽĂj˘śŹ"Í0G„ÚŽ##¨‘jĚ1\§•WMW ß_ëaî•v×ö9őYG•cĎöň92Üvxždű™ü^Űv˝O•OëUeś—SKű][—[Ĺf $âëŠ#;ĆčE_yTĂü˛LgcŁţ”Ѥ5ćΛm¤ŒWE–[Ũ_ŸŮ^§OKšWŰÔžš•É Çr<ˆŰŘŕś@Zś–uää¨_Ë–‰"÷¨őŁOëÂPŸ>;ŰSfŢÉçÖŠżŚ1´ůK?YHjŃÎ w9šôy÷§mŸ\ëǁěÔęůVŐřu֍ ŃŠMőŠărˇŰ#ł#ËkTy$JEßőŤ|Ő:—>ŠˆC˝SÓÂ9˛˝huÄ[>ťˇ‡(8„ő}érűŒĺ˜°}ŐH‘oƒDŻVďŐ׼íů.ç Z—ň}ťmHŰƒĆçǏlts§›v÷šÇíťŰÝö–}äËÁ0zúú‚Z>rpP_páÉs=}Ɠ‡i>XűťöYَŁę8nÖ÷ăgKέ×Zwď6ís§ż×lěŕqžĺk˙wp™š—Ôńş˙,úœr,h˖ϙgěG[w+uŽŰ\u4nďGúęö%ŘE°éěiüÖoýÖĺgú쏫…˜ó]cďš>ěŘb_źĄě5ŻŻrˆĂ)ś˘Š˛hżkY÷űaă˘q°ČŔ7Űv0‘‰Ą3+"2ĄĚô˛ON1ʡƒ˙„Ćçř84`|‹ĄJ‡46Œł/ůËű´|â'~boüĺúŔŔ?†đlłQ$rEU.dĐNZHs ŽĂc„ĺ{>'ę/ŽůÎwžłO7÷'ŸYąC:W;r?ŽŒż86ÔIç“6Îĺím˝Ă÷Ŕéƒ|ărŐUWőżçĄ™­˛’ă/ĺG Ґ)3Ž%O›(!+M˛Â2ۏ@äĂ{ś~I'”-D9çĆčšŐ Č!Ń>âÂ6|Ś ď}ď{÷ů<¸vŒî”)Fö엄<š˛Žĺ |—†‘sňg~ËÖČ$[plśÁ _™@ƈ›tđžtƑ&Ž!3[…&ÚLśIHÄîI™e{„8$‘äW˜‘é 89ԇYœCŞŁDUŔÄ9#42Ł\ރBňIzÇGIG" $rÇŕdńęWżşo+ܗźD1Ň*Ąó@¤ŢÇą'‘ ¸'/ä|Ćéˆ|҉ďÓĆ"7ʕňăÁ“ˆ"ńž"JżliBžéřœ(ŮśyÄq ys_ÚLŽA"0ŠQhÖ–í &‹(‡łÍpż8[%Ÿ¤#N,œ“­L¸Nœ¸˘œH˙Wď—öŘöí¤5QJpZă:÷źç=—)hďľ\ŇçSgH'éŠ#\ęhÚ<é@‰HÁ1ŰngÂßĂöĂĘ$ʅăS—r/Ž“č›čȉűĆ! ('ĘăÚk?Ô˝ű]×˝˙ÝŐm]zŹ_•räřą~ĽĚjŐŐD§űŮ5 Í=ĆPŰ ĺ 35 žĹq|Y(ťAY˜ßĂË 4éËw§Ě S~í5;ýřŢÓÝňÖw쎝lň>răc0¨Fą\Zž[ý>ʰŢ÷Łďë6ĂŢ@4_•0nňâ"ĎŤ\vŞ˙™oNP‰Í´˙c{Ądßn~´í}śkž{óäÂ~=ďŽŰyś÷ýgoĚœqůůč‘á¸YočY0V›m,VŃ÷˲ íŰ|3š_…ˇíűĐĹ}śçƝÁJźl`œˇąLĺ|¸ĎâťÁ°śŐ˙Ö§aaČŰ\\˘›—ŞEv>äx~çę›ýęđa ílŃŚ7c<ß G0Ž÷Žä'zĽűŕŘşsĚćÂ0Ô-ÎɖŰŰËkFF\ŽwŘĚ*uŽ˝ÝË2y羸ÂęYł¸>ďKĂ~żĹö†śˇZ1ýÇR‘Ú-…1ď[˝ÄŮ. Z[ƒ ĎÁ>%Oł…CÉö"ý Vřt+ăfšą\źšąşĆ°âzá 0K‡k&?ÝlśxV3Ţ;śˆ6xíBAśQŇ1ü7[F+˜-űşA˜çĄnĚčóBĆՠߍĆÝŞB‘>*Âlu•eĺ™/ęřÎ\yś{Ĺ|5œŻœ–v;ŇlŮěâ4ď÷ň8„§ŒÝĂ?>uycs6i´ÍýFy[P>ň‘ďƒÂrľíćJœťÝ-ŰÍŹˆŁ/D6láƒCôB ˆ~e>ô#Çw ‘ÝlœÎޜźˆ$B›ĽđJPo†•č6˝~;Fßn5_˜ťEŐ mšđŽRÎ}¤yj0hoĆigá¸ÓűĆŕŔ1éóNe%„0O[ŰÚ.J魝ţ“vqlÇ.ˇŁ=‰S SŽőő}cQ7gƒ }iôĽ~luŁňŹNŃ_ĺűy‰Ö1Ô­ů˘ŽŒŁ+´Ć•ÖŮŞÖ‘č ŞSOk ŽőŹţVô×Ř8ŐÍś‡ˆ×-ÜäÚýRéŠëşË.˝l¨cč÷z]NdĹůöŇqnś0ąŚţg>1´ŢśÎFíeťß6(˛œ-t5CچvŇ-ŽšjCCíeŘ^´íú]ˇ8gĄčŸĎ†mCf+G˜‘üśg´-ž7‹z›(]1äę<ËpŔéý^Ţąlśě€sżŽŢîčLŽôƒƒn Ý" ~N\×;ÎĐć7— †ťoô nkўP›ŤÎŸ76zY°ýHĆ }rÉńcc‹~ŹyĎ­T—ĄM4ýHŸÜůŹ‹çC—=ԇnčśm…ÓzÝVyrđ­nžŃÝďîŘÝîś7ď>ją-iO䊪7ČcJ_ĐĄ46ž?ÔLĆóĺŮ0ö駃ŁÇł>mbţşš˜t“óűĹ\xžŒÄvzú„áYSë÷|yÎ.ů.+ęőĎ'śĂÁjVuł›]ž\Ě}ŚLEŞÝĽqôŠÎ˘~9 ž§ć:ĎŘGďzם.żűúŻ˙úî™Ď|ćČţŃŢťţÍx”HÝ5ÝuŒ[m´ůœEłŻyÍk–6Ýë˔Şza“l"Sś­ę˜>ĹĹ6ö¸h,0^e4ďŮÚ"?Ëŕ0ŞaěäŘń„d÷ę‡DÄČJoŽ( š'ďŐ0Čžýíoď^őŞWői Ď+Ť aécŒÄ)!ÓTÔŠQśŔˆĘů#I éÂŔČ÷¤Ł†śç{~ç¸h×ŕXŇL:čBŒŽ{­€Ę>ƒ\“í2¸÷§1ătńŠWź˘_]ž¨ü'Ž8Äq% %ůᎍ‡ßęJ–6YQŮs|˘@ŕđÁľ0–bČ ČˆsŰ(ŐÎ1Ź.g› >“ŤŽşj´5CęK+“lk‘mL0 ‰9¤ ř.ňHôݎ9Ÿ<Ä`#v"Ô´¤“ĺ<ŽKţxĺ:YĺĎýb$&´äŇŻ ß9>׎LăX€zccŘ7šáˆ1ľçSBaĆ)(Ž=ЧŹÖSIVr ;îA9–v–¨|N4ÚéäƒuA!Qr =”aœŸˆ‚ŔCWœ"8–rA.ȇ‰şh>'eŠě⼅\kýHLVĆńšRśä›<$CÚh_˛muŠkWÎĺšF1ŐŚ#ܔ ×Ë$ ń™śÂľ¨ťÔą*O~ĎőšvúŐ8JÄŠ-QC˘#˝¤ŁśÝDxŕţÜ;ŽF‘Wę"yä÷´}ŽC8Wđ~Ÿűܧď_R¸^ś…âzuE÷Ëv$‘GVȑĎ8cp~ŽG#?”K˘ˇ$܋>&Ńaâ0‘2It˘ŹV˜ކ\犝ůćâŕ]2ŮÚŢ^ŽîŻňŰK8Ľ3ŞĺPç {š´×Źu=׊s•ĂÂŘŃaj•éT7Ű8ş+íŮVĄŽž/)íj7ŃÎ=ň}Ň^ĎĆa%ý*G[n5mD‡śŽÔt×zŐŚ-çŐ:žŮ­Ętk{pv Ýdă&7šdُ$bĹH ̙ˇNíĘk}¨ĺÖ֓“'ŻëďÓ÷';†ýč1!ýVŰ^"‡náDSŻŮʊց\§mÓĂçaŢXűß6˝m„3yVî§HߞhkSýTíË'LƒťX:Ö-d‘ˆŞýóbgž}“Ł—”ČOÓ´éč͡{çŁv,rşĎZĎĄB3E[śäá’#'ş;ÝţVÝýîyçďnvůM–Q+ĐŹś´[ľ—uú‚Ó}NËŮăźę n˛ŁƒŰś>S_pC9ěň›H˙Úf?;Óö8výyłŮé'7>ę㉿qŽ †Ď„u•Öá!ú˙Ř/OçZ/yÉKF÷ş×˝ş§=íi{˙¸Ç=nô™ĹÝ­ł9c›Ř §˘EiăžŘMn(íłŁŽO˘‡ąMqcgœnNOW…:;÷ŮŸóÚ(ďym.žŰl^üv3Ţ_őŇç˝4X7řÝKľ×95\`=ŚUPÔ >$ôĺ~éh'űĽ˝_›JG\žŽ<Î$őžu"ŰŽb¨{ľÁs•Ž)ĹE;1Ď÷űĽŁ†ÝËÉŁ=§ćńtÓąßuۉX;QŰ+ńlkÓŃÖóÚöťö MG­§Sé˜J÷ŮLG-˚†8œI:Śjp&m,őtżs§’ÝHě׏LľŮÓIÇ^çîŐ÷ ŽEˆĺŠö¸W:N§ŽL)<ö{&ěŐ~÷JCŽ—} 7aÉ'Š~IÚđێň,ű§ć÷\P˜,VŽ‰ł}•$7Śͅât•eQrŒ¨]ËŤ•y(M†>kZ|GąťŐŻjÜěNœÄŔ´Řc~eô´çłˆČaŕĉ“Ýu'vŻ´8×ĎŻ ŮUNemžüoƒ7Ę~âY­;=ÖŻIťPäÎŐŘťĘÝéT‘VŽ9gůýlďüľs9NÇ$šăş]Ç2?˝˛m™˙îrŢËmÝýćkÎŰŻőÎ÷8çLďUŽ˜Ÿ‰cvćőü}Žžľ÷šţž˙můßŢÇL]ëtŸť{Îwü‡¨ü7ßż´fŁ+MüVšÝ|żóÓ˙AšíyŃɓťëÉŮ-ƒĄŒ:żž“?ĂëĎW5nHýŘŻÜöb˜Ű/"NퟎÝě#q\rüh]¨7˛/˘VÔ­A†s§+Śô>ÓÎ/çS_Ŕ˜úÔŠ-ő"rQq}Ÿ[ßóý˙_wC¨6ÄӁgó˙äÓşťŢíęÓ:ţяzČčóƒüĐ}íČűÁsáOţřEÝš`ŤĎ§őňý|ߡuלxƒ{Ęg< B^łxßj^óĹűvyÍË{űęöřźß{űwËڇćEÁâ˛KĎó­SׯŠˆˆœ+˘ÜGŽ) Ž#KNJ(B˘,)FşÝ “z}š0´ŽJSżĚăŃŞXÍ*kžß•÷ĆĆ 0Ą^lŮîĂW_zôřÎ8çČș§*d‚J94\zI'"""rcf}Á°#:‚,ž¨:ŮŹŰĽ+PGp08Ÿú‚ËŽ^Ň;[¨/鎡łÂő…žő˙÷Ô§tßűÔ<-'‹6}mÔ­żčűž˙‡>|ůwĚxž¸ě&ÇťëĂ摣ÝĹÄEă`qlQˇÜn^DDýDxą|öCíW§ŒBŕÎFa7Šd˜Xw“Š)“Ą łďqŁhélΧšĹ*Âő˘ ŮöF>2[îܟZ#ŮäM…‰ˆˆˆˆˆČĄŕtô+Ăzq˛čVú˝ôů,ő""g—ę¸xžx˙űß×=éŰžŠ{äŁÝ=ěáęî|ĺ•Ýĺ—OoqŇŚoÖ|^—ţ3=ţlĂśeׇÍM,$Gž3#XˆˆČÁ˘ŸĎĆ+M˛= şŽüEJ˘U„vÝ˝œ+äÂpúŤRşĺ^Ş Ë\ˇűéC€.g(Ję^ć(KPœdŰ#~‡Ş0IQ&""""""‡ƒýôPŁWLé Ćş+ę DDÎ?ł óüc‹Śç?˙wű×~´éŰľ€rƒĹśaű˛ëĂĆćĹ!á˘q°8~ôX˙ž}‘ˆˆ~ŚöAÍ@¨:O´Ę’ŠŸUYŇŢC.ë”&ő¸ĺĆď{1_)Vúó•ň„U*ů;żŐżEDDDDDäđpCőă댯ŰŢG. ę DDÎ/›‡ËNźŃ<Ł×Ľ˙L?Ű?vŹť>ll\4. =Mnޞ’PZ"""…Š=QWż•%ac10Ę{N™Z‰˘˘ä`p:+S˛eŸł›MŸ?,NéW™ ßĎFŠ“úęWY""""""r(YÍű÷×ě^€1[ëX!ƒsĄ/č˙œuűę Ú{Ş:‘łŮár° ёâÁyřiŸ{ęÔŠóžßŘăĎ,( -rŘŽˆˆ\üL)A†÷Ĺ„˙ŹçO]WëʤýđÝ˘ükP`őÉŇéf6v˘Ř^ŹN ő7-DDDDDD‰RQŠNłąóĹn'Œý`¨788œM}Áč}Ą/˜/˘_°EHŻOhާŽ@Dn,śgßűŢ÷ŢîÖˇžMw}xß{ß{Ţóťy=w’˜˛Č"ë¸h,R óŮőŰűEDDä\Q•#{헺WhO+.nöZ5´gŽÍçá€ţďŐ*—nůYDDDDDD>SQ(úďťÝ[´Ű‡śßM][/űé &ďɂsÇ6ő"rcâ°=˙ţęíoënyË[vGžŮÖ'OžčŢţöżź×Ď݃Ĺ…=ę`Ţ9p‘ƒEPŃŢ#äçŽóö8G.Ćĺş^q2 šłŒN_ń"""""""žŠEőď˝"aśÇ:„CĎéč Úč˅ŮB$Ž|ßéd!"7Ű#G‰×źú•ÝUwůčîŠ+ŽčŽ9şďń§NěŢűŢ÷vo˙ˡíü}âźç7öř3eśqqM.‹Y"X8P‘ƒÇ^ۄ Ż>gň[?ŒęrѲ*ßyˇŇěŽLQˇ‘}Żc…ˆˆˆˆˆČĄb*EýXEDDDDD.,ÎËdę DDŚ9~üx÷‘ëŽëäěƒlu°ŘčDDDäœďÎ)/Ď˝ž‘,Ňpő­ˆˆČ™sł›^ÖÉšAŮŽ0‚…ˆˆČ9f/Ľˆ˛Ş~X/EDDDDDD.ę DDöćÖˇžU÷ď~o'gdk‹#Xˆˆˆœc2čŘ/Š…Č٤­kgň‘‹ő"rąsűŰý?œ”í ,DDDÎNDEDDDDDDDDDDÎ}՝:97ÜĺĘ;v2pŃl"""""""""""""""7NŽžŰGwrnř¸Ť?Ś“#XˆˆˆˆˆˆˆˆˆˆˆˆˆˆČĄćVWܢűčťÜš“ł 2Eś2 ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆzîßOęäě˘LÇč`!""""""""""""""‡ž>ŕ“ťŮlÖÉŮY"SYĄƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆznzůeÝ#ţŔNÎČ™Ę ,DDDDDDDDDDDDDDä˘ŕłý0ŁXœ!˛”1:XˆˆˆˆˆˆˆˆˆˆˆˆˆˆČEÁ­Ž¸E÷Ż>çѝÜ0!˛”1:XˆˆˆˆˆˆˆˆˆˆˆˆˆˆČEĂc?űQÝGßĺΝ\?2”Ýč`!""""""""""""""OxüçşUČő™!;™F š¨¸ňÎwčžř•_ÜəĚLك…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ\t|ę§Ü§űâ/üœNNd…ĚdoŽt"""""""""""""""!ŸńiéߟýËżŐÉŢŕ\YÉŢč`!""""""""""""""-8Ü즗w˙őgžÝÍçóNVĚfł~[#Wœ:XˆˆˆˆˆˆˆˆˆˆˆˆˆˆČE ˇżÝmťgýÂŻuoűËwtŇu}—;wOxüçvWŢůœłłpÜlâďýŢg{|ÎkŁźçľšřnłyńŰÍx?yÍŰ^Ú_qžŐ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆLń›Ďůƒî×ë÷n´Ń,ˆZńŻ>çŃÝc?űQÝ9gśŮż˝ŮG?`çm{çuÍâ}ŤyÍďŰĺ5/ďíŤŰăó~ďíß-k+„,DDDDDDDDDDDDDDäFŽúÔűvĎý˝vř‚—Üh-pŹxäĂŘ}ÖŁÖÝęŠ[trćÁBDDDDDDDDDDDDDDn”|ŕƒę^ňŇWvúgŻ˝hˇa+űß÷“ş>ŕ“ť›^~Yw^šČ"Xč`!""""""""""""""7zŢóŢęŢňÖˇuo{ű_wűwßýăťßŰ]óv'Ž;qŕŁ\âŘńcÝÍnzyw돺˘ťýíţŸî.WŢąű¸Ť?ćÂFŤĐÁbßßt°‘‹ÎÁbŁ‘}ŃÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČŽt ďüŰ˙ŰżooęDDDDDDDDDDDDDDDä²ąyѸ$ôÁBDDDDDDDDDDDDDDDd ťČ>úţˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČšŔ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""kĐÁBDDDDDDDDDDDDDDDd :XˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹA ‘5č`!"""""""""""""""˛,DDDDDDDDDDDDDDDDÖ ƒ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČt°Yƒ""""""""""""""""k8҉ˆČâďřëî§~ę?uŻ{Ý뻛Üä&݃üŕîkżöŤťË.ťŹ‘ Ăě,7›ř{ż÷ŮŸóÚ(ďym.žŰl^üv3ŢOœ8ůŇNDäóˇűˇÝ—~é—wúĐľŁďď~÷ťwĎ|ćÓť ‰ˆˆˆˆˆˆˆˆˆˆˆČáâŘąŁŘyŰŢy]łxßj^óĹűvyÍË{űęöřźß{űwË~żőÁBDN›ŻůšŻëŁ*œ.GŽé.ťěŇîvˇť}w÷ť\÷ŕ?°ťßýîŰÍf§ëŰuăăWő7v9WŔ›ŢôŚîUŻzuwßű~r'ryó›ßŇ˝řĹÜ˝á oěŢůÎwv˙ôOďďśśśş[ÜâćÝ-oyEwÇ;Ţž{Ŕ>Ľ]qĹkŻ÷ô§?Ł{Öłţ{w:Đ]zéMş›ßüÝUWÝšťúꍝ>đSťťŢőc;špüÍßüM÷yŸ÷E“ż=úџÖ=őŠß۝/Nœ8ąóŒzřäoŸř‰ŸĐ=ă˙ĽŃÁBDΧNęŢ˙ţkúכßüćî×~íם;ßůÎݡ|Ëżíî˙űu˛›÷˝ď˝{ţöîwż§9lźüĺÚ=ýé?Ý˝ĺ-o™üzÍë/ţâ/şźŕE}”–Oű´Gv_˙ő_ŰÝć6ˇéÎôE×\óţ…sÇ˙ńKv ćĎ쎺ęŞîń˙âî3>ăӍ#"""""""""""kњ "ç•wźăÝżýˇßŇŻ>—Ý|Ň'Ýsň{Œż÷źç't"‡˘SüčţżÝ7óˇîé\1Ĺööv÷{ż÷üîq{|÷˛—˝ź;—źýíoď~ŕ~¨ÎóŽwüu'"""""""""""˛:XˆČĐţ?űłĎędĚgöcşG<âaŁďŘހ¨ˇťÝí:‘ĂŔ|>ďžďűžżűÍßü­îúÂV9OzŇwvŻyÍkťs ۖ|ŐW}Mż ˆˆˆˆˆˆˆˆˆˆˆČ^¸Eˆˆ\0žů̟íîwżűv˙ń÷čd`ssłűĄúîą}e÷ż˙÷ëşK/˝I÷ПúŠÝď|§Nä°Ŕv@ř‡/čn('Ožěž˙ű űĺ_~vwüřńî\ň|°űśo{r÷ô§?­ťŰÝîډˆˆˆˆˆˆˆˆˆˆˆ´č`!"g…ĎřŒOß1€^˛ü|Í5ďďŢöśˇ÷[‚ě[<íi˙Ľű/˙ĺ?u2ćž÷ýäţ%rŘ8qâD÷3?óßöüýŘącÝCň îęŤďÖ]rÉ%Ý?üĂťşžđĹÝ;ßůÎÉă˙ţď˙Ąűƒ?řĂî1ůŹîL¸Ímn˝üűšk>Đ}ä#Y{·?üáîIOúŽîńşK/˝´Šč`!"g…Żűş'î4ołëű×˝îőÝ÷˙vűˇ;yá˙1ŹŢńŽwěDäđóęWżŚ{ßűţiňˇŤŽşŞűɟü˙şŰŢöśŁďŸřÄŻî~ôG˙ßî9ĎůÉóţěĎ^yFß÷}ßÓ;}UŽ˝öÚî˙üŸˇuôG/ěž÷źçőNSŕđńŒgüL÷ÍßüˆˆˆˆˆˆˆˆˆˆˆHE 9§|â'~BoP}üăŸĐ]wÝu“ÇźôĽ/ëžđ W_ů•OěŢřĆ7î:îꍯîžőŹgöżä%˙ŤűĽ_ú•îMozso8…źŕů“ŤÎ‰”ÁńüÇ/éŢň–ˇîP˙~çœw—]viwó›ßbçşwíîsŸ{w|ä#şË/żź›âťžë);×Ńäo_űľ_Ó=á _ÚíÇ/˙ňŻt?ń˙qňˇÇ>ösşďřŽoď˙~ÚӞŢýüĎ˙Âäq?őS?š6ŞĹŮČ+é$˝S|ĹW<ĄűšŻůŞ]ßĎçóîяţŹîýďżf×o?ň#?Ô=ěaŮő=[ <ń‰_?u›>˝ż˙űżŰ9˛˙cę×ý7ş˙ďlňˇűÝ˙řrßóßóž÷tŸýŮ˙˛—[ËMozy÷Üçţvqa "+źŕ/č^ůĘWuoű_u˙ôOďďŁ7°­ËmnsŰîŽwý˜îx@­aŻk„—˝ěĺÝżűwß6ůu‹:6Ĺ~2üâ/~\÷Mßô ËϤíÁ~řžÇnmmőŰ{<ç9żŰGŸáœÚîN‡ˇ˝ím{ţö­ßúÍťœ+€­qříůĎ˙ƒÉ~â=ďyowCĄo ?âő„'|I÷ßů”ýߓÇRŻžěËßÝň–ˇě΄ýdü“?ůcÝ?˙ç÷ď˙ţ›żů›6öŤÝË_ţ§ÝťŢőŽîčŃ#;őĺŽÝçţçMśŽűťżűźî…/|ю|˙˛wšâŠ[vwšËUÝc󘾎!Ă3áÍo~K˝×żţ Ý_˙ő_÷[¤ĐŽi{w¸Ăşťßýîýué/ÎŇűźçýŢNűxa÷çţýľovł›î¤÷.ݧúŁşĎúŹĎě666şłÁßřŚŢićőŻ}/WîE{ťůÍoŢ]y坺{ßű^Ý#ńđîvˇť]wŽyď{ßŰ?Ď^őŞWwo}ë_ô‘œ(+ú1ňë[ßşťç=ďšÓß§ßk6›u"""ň˙gď,ନÚ0ţ*Ň ŠŔ‚„`Kˇt—˘"ˆ´t‡€”Ňˆtƒ Š(Ý’b ’ŇJ‰í7Ďťß\îޝš9w÷.<˙ßoŘáĆܙ3çźsΛ„B!„BH‚„°ƒě0ŽZľĆň}” „‰'Ëôé3ýúěƍ› #űX9}útŹ÷`ř† k׎—ŃŁÇށó7^7 žwÇřl… ĺm,ŕĐŕËÁŸąŁB…râN]káÂm,öíŰgůúńă',+ ¸VFcťcňűtŽe˖1 ףՠëÉ×_ď–ëׯă$śßG›Y9W€rĺĘY:F\ž|Ůhżqj@†C‚'0đbƒŁÁʕŤ%MšÔҤÉR˝zľˆ6¨ţő×_ŇĄC'Ůľë+ Ü‘­Č™3‡í÷P.$qâű,,ŕěâ$pœ>|ˆźöZ#Ëě:čOK–,“ ę‹S O8oxöY\32`ø„ł‰Éž={ĽWݎĺ矎q<8ř`Űśm‡ŃŢOʀ}Հď 8h 6BłYG!lřÝ ĘŁ>ŞçóĚ3O‹?Ŕá¨˙š ĝK—~1śŻôýE‹í?XBáǏĘĐĄĂ-Żăďż˙VÇ;´Ůöí;eüřIRşôóŇŽ]c<ڧÁoM›6S>účcËR4¸×ř îäáěŮj6—–-›IąbE…B!„B!„BHÂÁ™đABńAŽŮmßť|ůWń—/žŘĺ—sŒćƍ”nÝzZ:Xqýúo2cĆҬٛrá…ď.\H#­@ D.ŰĂÚîÝßYž—!Ãj §Ż†Ôĉ[~×jĹwßY_@dy ÇhoH–,™/nm „‘ĆgoŘ9̀*U*ĹzíŕÁ¤^˝×dٲĺ–ÎV űĘ_téŇÍŇř)L:=dç €RA?žÇrótćqgÝşĎÔ°o˘ýŽ7ožŮÂö}dq’k׎ŞĂ 2ŽX9™,\ř‘ŹXąJ÷aŒoÓŚ},ç OÉ¤M›>ű×ňĺ+ĽAƒFśÎV>|XZśl-ÓŚÍđůYdÄhŰśC,ç Oöďß/:t‘żţú[‚íČu@FÂąěľ×^ײUNň믿íÓF&ßG5dBw•Ă„B!„B!„Bt° „Ä ŢŇÁŰe°bćĚY~}nĈQM ČŹĐąc×Ć2dS(UĘ:ő?ÎiáíŘąă Í`EůňĺBÎjŕôľ"kCŢźÖeiř=ůö[{Ł%œŹŽĎë hB… ŠżTŞTŃö˝-[ěäżüň‹­Ľ {,WŒ×ĽŁUŤ6ráÂE †Ď?ß*Ýşő¨żÇ¸˙ |$ńĘSŒ7AŢ~ťŸĺű™2eҒá%0ě§ŕ`–r‚“'OËȑďůőŮ &ʍ7¤_ż~Ÿ ö“&Mľ}͚ušYŽG‚Ň!“&Mńę܆ńѡᅬ8 sçΗ@#Nż~leŞ7ŕěÔącg=W'ŔXîÜš›^K0 ]'L˜äŐыB!„B!„BHdA BHœpřđśďĽH‘RüáÇÔúž€ąĘ—Ă24xsú8xđ Œ3>Ćk+–ˇýźˇ [ˇz+bL׾zË ąo_lc˘ˇ¨pDë˙đĂĄŻ!ęŰ.*?gΜĽń/X°€<đ€őçˇoßakđÝ´ił­łCľj•cüÇčŃŁ—ŤĚC°ŔŮćƒfK¤ą|ů G ě@Ś—ňĺ+šś˘EKĘK/ŐŐ6ą2ügɒEFnYŞĹ %Jd›A}Ă)C<@Ů8(ůĂšsçĺ­ˇzkIŸ@Xśl™ĽăĆÚ;ď ’P“…ÝX1bdŔZ–,YĐçţůŒ řŽ:&؁žâ­źĆpϞ˝˝Ă_věŘŠYFěH:•(Oňĺ{NRŚLaűšaÆűí˜B!„B!„B!$~ń]ŕžBBäÜšsňŮglßϚ5‹řƒgZ}ŐSŚL%ׯ_“óçŁË\ŔH5jÔű–߇“AŁF ĽV­†á+ľ~v׎/ĎŃčoO/^"ő꽢e<Ŕ“O>aěg°t Řšs—žŸ§!FZů­€#A–,™%XÂy­… ys°Ř/ĺʕqý™ |‚Q&$OžÜŽ˙ďÝťĎöłEŠřWÄ×Zž|yůđĂ9ąŢƒA{÷îoĺšçbgä@9+`œEfwĐ>GŽ;`D­^˝ş¤J•RK*̚őĄÉ­@€jŐŞč}‰ţřă×>Ú3}úôę˜sĺĘĺ3ʏŁöĺËW|~.cÌF{V‘—^Ş-÷Ţ{Ż„“GÉdükíuňäŠX™L‚Ĺt )Vʈ-ZĐ[×eíÚĎ4S†[ˇFgĹÁ}¨QŁşdËĽçłhŃ'śŽx}Ϟ˝ZćǝącÇŰ:?ŔɤzőjĆ9Ö.óç/ŒŃ'Lp˙1gÌ)1^?tč°Ę@;đ+V0Îë)ucÂƍ›%PƍŻ™=Ź([ś´4nü†dΜIĎóđá#2iŇdÍă Ć(J†¸Ëą`đV‚¨nÝWäÍ7›ëľ<aĽD<štéůꍯĂR ‡B!„B!„BˆłĐÁ‚VPN˘{÷^^Łă ( đřăy¤K—N’#Gv×k0^Á8¸~ý9{öœĺ÷:wî 5kÖpý†/d?€ľnÝúš>ŢWŻ^# žŚ˙‡Ąš|ů˛†qńƒXdžŃ2ĎŇp$€ń̊ŠËI(lذ)l×úŕƒé%**ĘŇcďŢ˝1ţď-{… ŒžîŔIĂoŮ3ě¨RĽ’Ľƒ€ŐÓÁâʕ+Ćý˛Î†TŠRĹxmŢź…bŒßÝşuvýĆíçŸ/)Mš´°tƁázɒeŽśŽ$ŞTŠ,M›ž!éŇĽs˝ćéŘn0Ćʔ)­÷,ÜÎ ujű :pŢr’ ęK‹Í\˙ů嗴d2›Xq;zô{*óLŕ ńꍯçf-SϜ9ă˙ŃnŎ޽ßŇ67ɗ/ŻĘą6mÚ[fĂ@9 Œy8œ™ üˆËljá<€1§Ľwß"ţrţüyŰë€sE˙ţ}]˙‡ŹÎžýQ2d´k×ÁŇůcéŇĽ!;X\¸pŢö˝Úľ_p9W8ßľjŐBŽ;ŞNF(}óČ#íc?z#„B!„B!„ů°D!Ä>řŕCMóon(9ĂÖË/דC‡Ů~ďąÇ“lٲŠż<účŁ2nÜčÎĆ+Ő6mÚdů˝téŇŞQϊ)RHŐŞU,ßC¤ľ;ŢJzXEJoÝşÍňłČPślhĆ˝p_ŤŁĘ}¸§ł˙î;űů&žiô÷íłÎ` Ád ˆŠĘ"šrYoóćĎ-_ł*IŕdŕÎącÇĺÄ ëRɓ'3 ŃoĆzý–-›‹ÁDď‡ô™ˇŢęĂš„Ť<‡ŤWŻ•ÎťIľj5eěŘ –™œvZňÂ÷ÝwŸźţzƒŻÁ˙ƍlżSźxŃÎYfjÔ¨aűË—ń”/˛+…ƒĚ+îÎ&pŞ\š’ŘáŮżůĆžtBŹ23ŕőB…üwރ,ľ+ŁŃ´icË×ńL¨WŻŽĺ{ß~ű}Č} ŮEěŔsĐĘ9iذ!2yňéŐŤ‡:Y•.ýź:ƒÄ…3!„B!„B!„Đa Bˆ#|ôŃÇ(0~!˘7ŢxŁĄWƒŻgŚ”k(Q˘´í÷ě˘ô‘JŢ”ô@iƒĆúěÖ­p°čă5+§ /ßs’&M …p_káÂ-łBŔ(ůăGŐ(žűîťXŸ#ŒűńičiÓŚŐ˙<řƒX,p> †*U*jt˝'§OŸÖó͚5Ęőš]ɚԩSĹr,ŮłÇށ¤xńâr˙ý÷[žW˛dq5šZqřá˒2ń ýČ\I\ťv]f͚-;w~!ď˝7,l%Uʞ4˜Ŕ)Â)ąŔęxŢĘe˖Íňő¨(űďx:!ŘÉ €Ň:vT¨PN>ýtąĺ{žcâŘącb˛ËŘżWEśoß)ţŕé¤ĺN˝z lßł“wxýĉŸ\r,rćĚ!+WŽś|ď“O>•uëÖi&–9r21›ţփ>čhŮB!„B!„B!q 3XBâ ¤Ë÷,Ýŕ‹§žzŇö=J=ÓăťƒšÝfŒźž™*T(kůY8:tÓŠçräČËĎV¨PAB!.Žm$‰ľó€éȀăy:KdȐA%<1 ˝(Y`W6ĽpáÂ,ĺʕľÍFŕžĹâÚľk˛k×W–ŸŤXąbŒ´ţŕäÉSbGž<Ůž‡sńĚ´b‚Œ§O˙,‘Ę„ˁÁ8íعž­YłB&MŻĺl<ŰÝÎ(ýű”˙ţűOÂÁĽKżÚž—$IRqŠűîłÎPŕ-sν÷úďřńÓO'mß˓'ˇí{šsŰ÷m”~2Ay$Č+pţvc<ńDń8CŘŒźżüň‹„BŊle$¸zőšfű˜4iŠtéŇÝč羼L™ňŇśm{u^;{öŹB!„B!„BIXĐÁ‚/źöÚŤŇźyS ”¸°†ópaŻ\šă˙(ía—eáóϡ¸öˇmł.‚(ö%ŠI(ÄĹľŢu×]–ŠýÁŢ˝űőďc1sçÎeiœÝł'ş,ˆ]ö Ř Ě/Á’đŔňÜsĎX~ö‹/vYîťç ť˛Áž“SxˇPĄ‚–Ÿƒc°*ňŘcÖćgí,žxâqI–,4CĽJ-_ߡożËyÄÎń%wîÜ•%ÖëŢÚ:”űŔ21A_+SŚ”íűk׎§A9ożýÎň=8x+ߑPĽ˙Ú˝íoßőőš@ĆO8džÇ,Q˘¸Œ?F˛gĎđwŃ˙-úDZ´h-żýö›B!„B!„B‰|üš#„ATo˛dI%c̒'O)VŹHŔ%A!iRűtţľjՔ.]:ŠS Ä‡U™‰˝{÷Éďż˙Ži˙í"î+T(/ĄW×jç`Ň'ČńÝwßÇzď‰'žL/éŇĽ•sçÎť^7ł]:tČň˜EŠ’P)\¸¤N*V ”äřęŤoÔšeçÎ/,ż[­ZeË×˝ewřĺ—Kâ_~ą/?áíşóĎ?˙ÚžçYž&žÁúŇ%ë6<𖁠dŚ5ë,ß;yň'qšM›>ˇÍb+WސĄ"Č`;~ýő˛¤J•Ęň=ŒU;ŁҤI\ű‰'oÇÇŘłËba×W|ýŚ;Y˛d‘yófK|ç°>˜fȘŻeÆM˛{÷ˇrôčQ˝v@ÉĽéÓ?7ßtŢńB!„B!„BˆłĐÁ‚âK–,2 ęé$>AJ{OŁžÉ… çĹIžž„ 2Lţř㏯ĂéńiҤ‘Ë—ŻÄúŒ˙ve7!ŽŽ5mÚ´™íéë/ëß|XöěŮëő‹/H$€1œ7ďsş<>˘˛óŔäË/ż’“'OÚ~ĺʕt° „B!„B!„K„Bn)rĺĘiů:˛IŔŔoÇšsçÔ čošv8Ř`żüňkůúëŻ-ß+Sڌ:8A\]káÂÖY,ślŮ*.\ŒńJ§Ü}÷Ýş_ @ţX߁‘ńçŸc; ¤OŸN˛eË*NPĽJ%Ë×÷ďß/;vě´|3v%‘Ă´Áőë×-ßű쳍j`ś"gΜęÔaâ­4 ˘âíîŐÚľk%’@ć8Yl6l´ý. Ň+WŽś}?MšTâ(Óľkwůé'돸7ŐŞU‘[dW°Ă[{{{ĎsL ‹„K—Ú;Ő,^źDüĹNŢÁąĂÓŃËŒAȝ@˛e 2U@ŽĄ,ÔÇ/’‹/ęX@F–5ŞKˇnĺŁćIßž}lŠ Koܸ!„B!„B!„B":XBn)Šłvz€nćĚY–累Áťď–7Ţh*ĽJ•3 b/H‡d̘ń˛}űąŁ|ůr–ŻďŢ˝[ł%XQąbčĺALâęZQvÊĺËWĆz­`ÁŽ}+ mqž*zy“GÍŚY7<9tč°Z­¨RĹş<Ȝ9“dʔÉň=´őȑďÇzý… 2a‚}v”*qçŇŘ~ĺN†/F9´áŒȎ_H¤á­ P˙ţďČúőb˝ƒ4NŸ>mű]dD 8pěß@űúË/׾,ńcRłf I:ľÜ )RŘśDœwŹ)žţúYąbĽí1=űďłĎ>cűŮ%K–Z:6-X°Đvyňdą~Ç*Ý˝ű÷­Ę‹?~\Ź(RÄ9 PĽJE92fydŘ˝űŰXŸÍáAWZ;ęÔŠ-C† ˇ|oٲĺZ–ĽZľj’*UJŁËŹYZ–oˆl÷̎€śBć8SXą|ů Ůľk—<óĚÓŇ ޜâ“ęŐŤĹ( ăîAϞ˝Œ~›^Łű'ž_Ξ=cܗďźf]AF‰Š+ˆżôíŰ_ƏŸŕú˙ľk×ýÎ؂Ň;͚5–[”n*UޤŹ[÷™ĺűźŁ%DŠ+˘~8=̟ż0†C;šrĺ’'ŸŒ™ÁÎfvN]8Nǎ]ôţĄ˙ţőן˛uë6ůüó­(KR°`~K§"œsŰśíĽE‹ć*c1Fŕ´3eĘôސŐČđƒ ׋ě&ČźG+G ŒidŰȝ;ˇŽńx@Ë@8p0V0wî<ăs)¤víĺžűîÓ×p\8›œ?o]ŇY@Ěě?„B!„B!„B":XBn)`ĚjÖŹ‰F[ąpáGş%NœXpތŽpž¨TŠ˘íű(őQştiM ďRŇ_ź;˝“Ů+@\]+ŒŽůóçł5КŔäĄ‡Šńʋ¸;XXăyž|yĹIʕ+kńÇىÝÁuŰĽí7ÓŔÇ*GŽą|F_łIźţzƒXŮĐĆčK¸_vŔacőę˜%AĐć0$űë<ŔY%W6lŘdűÓąÇ_5jpF ;oŔůeđŕwľЭěośP‡dńđäŸţ‘E‹>ŃÍ'íۡ‰őzÖŹQ:Öá¨e~ŽHŘBĄUŤ75óŽç ^ßľŤ‰:)$N|ŸĽă™ ŽŁnÝWb˝–6íröěšXŸÎü3D÷6|Mš7oŞŸŻV­ŞL›6ĂňócÇNéÓ?P™wúôŠXÎxîŔ)ŒB!„B!„BHäĂ!„[ŽZľjށרuďÍ( ăYďŢoIňäÉ˝F*T('ţČgý%ŽŽŐŸVŮ/첸óěłOť˘ź"UŞTjđőŽ˝J•J>?gšűIҤI$ Č'Ż˝öŞĺ{Ȓg˜@hÚ´ąÜuW"‰4zöěnÝłŠ”)SJ4¨/á&I’űeذÁŽf™‰ĹŚGn*čovĽZÚˇo°cŠgŠ_ üOŰś­ź~™Pź9W€W_­§Ů4<ɛ׷Ł×\űp–ňÖĎ!w‘ýbßž}^+{ě1yů嗄B!„B!„BHäC BČ-Œć}űöQĂl0 Ú¸OŸ^†ŢˇSĘg<üđĂ~}Î3ťƒÄŐľ*TŔg–|Ć\w˛dI˝~ϟvoŮGLž}öW _dɒYÌy_Ҥ ,“‚ J ;˛UX~ÔŽ]kń—˛eK놲‘FҤIe„1’?đ™IĐßęÔyYúő{Űgß ¸§L™äx&•H˘|ů˛ŇŤW ú ÚżI“7ÔĄŔdSéۡˇßÇGiž6mZI źôRmă{oڎ#_Ŕ‘ĄE‹Ś–ď˝új]Ÿe:PÄŸ5j¸–M 8zŒó˃B!„B!„BH„[8 ĐO ŠéŇĽőű{ůň=gZ'”m†K_8]ĝ¸¸V”gđfDÄ9ŔYÁd~@yo)RXÂAѢE´ô‰7ŞTŠ,+WNůđĂô{¸6H:•tíÚI† ä3SJ‘Ŕáíé 8V ëˆD €Œ(ŁF4úeOżXLЗ&MŻ'ÁŇý!sćĚŇłg7™:u˘DEe‘[Ę•+ɌS-ł7Řń裏ĘŘąďËoźîółĹŠ•1cFŠó„7ŕŒńţű#}f˛ĺ=&N§Ž1ţ’)S&yçZâÄŽOEEeQ‡o™8‰âçŸĎ¸ţŸ6mZu&Bű’áŽZ;śÓvH’$´Ě8„B!„B!„BâŽČ´ĘBˆCŔ Xž|9ůüó-˛mŰ9xđ9sćgš~ý7š÷Ţ{%EŠňŕƒéĺšçžUƒ< čç‰iÓfŘžxéŇÁe˜„p_+Jněßżßň=”ůŔoX2!ë×o°|†V2€Ú˝L™2ňŃG[ž#ŞŻň*V¤L™RŢzŤť4nÜȸŽőňĺ—_ÉącÇĺ—_~•?˙üÓ8nbI—.˝ä̙ÝhłÂZÁ—Ă„;čOĎ=÷Œ,Y˛LśnÝŽ÷đÚľëę,’'OnŠV­jŒŹ‰E*Wލ×ôŐW_kżDš„S§Ni‡ż˙ţ[NҤI#Y˛d’'Ÿ|BJ–,ĄýÂIŕ ƒű’2e*ýœ9sŞcĆ@¸łcD(ł1~üc, 6Ę÷ßď‘ăǏkű÷ßŐIŕá‡3Jî܏iß͛÷š€Ž˙ôÓOÉüůsdĺĘUňŮgä‡é˝F ”Ó(]úyu$˜¸zőŞ ˛ăLŸ>Yžűî{Ů´ésă:ž—“'OÇźŚ÷ă%Mš´OĄ4OÁ‚ürցLxüńܲlŮ ŮľëKclÓśA_Ĺ1łeËŞăÜôadř¨Sç%ٲe›öudşřő×_ôÚŃ˙đÝTŠRÇÎŁÎmp<ł“™„B!„B!„B"­ wřůŢ~ü˝Ăć˙ćv§Ű_sKô˙×ylxáwţůç_ۄBqŽ/“&Mą|Ž =ztB!„B!„B!„^îšçn¤4˙×ŘŽü˙ď?Ű˙˙űŻŰöŸŰ_ĎMlţďíŻçž'ŢŢS˜Á‚BČ- ˘Ďí¨Z5°ň „B!„B!„B!äö†„Bn žţú9qâ„<účŁZ `óćĎeÝşĎ,?›={v-1@!„B!„B!„BˆżĐÁ‚BČ-Á‚ eăĆÍ~}öľ×^B!„B!„B!„B„B<˙ýˇ|ńŗ~}ś@|Rśli!„B!„B!„B!$č`A!$Áł{÷ˇňŰożůü\–,Y¤OŸ^B!„B!„B!„BH Ü)„BHgëÖí>?SŹX7î}I:ľB!„B!„B!„(Ě`A!$Á“#Gv)\¸ œ8qRŽ\š,ׯ˙&ɒ%•ÔŠÓČ3Ď<-eʔҿ„B!„B!„B!„Ë|î‹}oď°ůżšÝéö×Üý˙ľDŢKŽżţů×6!„B!„B!„B!„BHDqĎ=w6ţüklWţ˙÷íż˙˙ý×műĎíŻç&6˙÷ö×sßoď),B!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„Bˆč`A!„B!„B!„B!„â:XB!„B!„B!„B!„ř€„B!„B!„B!„B!> ƒ!„B!„B!„B!„BˆîB!„řňËŻäĐĄCRşt)I—.¸…íOČ­ÁŮłgĺ‹/vÉŋ—$iŇ$ňÄOHΜ9ô˝ŤWŻĘʕŤtŒ—,YB"o×Bn-~řá|÷ÝwríÚuyŕ4’7o^yđÁôBBçĉ˛eËVyúé§%wîÇ$$4ŮBČíŔż˙ţ+ŤWŻ•ßż!•*U”{ď˝W2ţŽUŽ_ż.;v|!§N’ťîJ$ٲe“|ůňʝwŢyËľ I8ÄĹłřv‚c™BČ­Ä|î‹}oď°ůżšÝéö×Üý˙ľDŢKŽżţů×6!„„•>úX† iűţ=÷Ü#iҤ–ŹYٌĹsi)_žŹ$J”HˆH˙ţeůň•jdXˇnľÜîLŸ>S&NœŹű˗/6úM‰T|ő{+š5k"ŻżŢŔň˝‹/ĘŇĽËeëÖmŞ<şzőš¤J•R˘˘˛Hšrĺ¤B…rśăćǏJÝşőí~Vîťď>ăXŠ eT”*TĐ8^YI–,™„JáÂĹu!\ŁFuéÖ­sŒ÷ 0kŐŞ­î§K—V>ůäŁçßşu[Ůľë+ɔ)“,X0GˆłřjBHäůúţűc šP÷MŠ+"C‡ÖýćÍߔݻżŐ}ČaČc“ożýÎxî´ÔýţýűJٲĽ%žđçZČ­Á•+Wä­ˇzË_|ăőśm[É+ŻÔâvk´o­ZľŐqĎőYłfčËiźÉ–¸"’d!‘Ŕ¤ISdÚ´şń€q‘Pńw­˛rĺj>|„Ę<“äɓɊK厝îJPmňóĎ?K͚ľuż]ťÖR§ÎËB&qő,•HÓŻ-_žÂŁďč>Ú,{öG]ďÝJňÍ)źÝżľk×KŻ^}$XňäÉ#S§NtýߗNъ|ůž“ŃŁG !„8É=÷Ü]ŘřĽŃ•˙˙ýÇcűď˙˙uŰţsű빉Í˙˝ýőÜ÷ÄŰ{ K„BăĎ?˙4“g Ăńvé×o€4nÜ\Ν;'äöbäČ÷Ľ`Á˘şýóĎ?Bn˛hŃ'Rťö+2aÂ$ůţű=réŇ/ň×_ăäźěÜšK•ě5Őq ż˙ţť*tślŮf˛FHőę/ČěŮĆ0r9ÍéÓ§]ű.\Ôs q‡Żöß´iłk<îÚőĽ„ ĺë­ÉŒČźyó]˛:uęT’2e )UŞ”ë3îcý§ŸNI¤âĎľ{ŇďŃŁ—ËšŃĹ0œÝ˙ýňüóĎ uLC#úćwáŔ›lAv ł?bîJâŽúő_×voÚ´…D:NőÎYoâ>.Ož<-‘Š?÷̟ľâ7ßěÖu°)óŕp†gJɒ%ŐšÂó8‘Ü&qÁí$›ă[.ÄŐłřv‚c™BČ­K„B‚^řŮłg‹ń ŧO˙,ëÖ}Ś“ćýű÷K׎=Ő[ŠWB:Výފœ9sĆzmádřđ÷tŠ˘âŋĘ3Ď<-I’$UG¤őë7hęԃJűödúôɒ8qbŰßH‘"š´iÓĘő˙˙ţűOSąĂYcŰśíşř˙íˇßd̘ń8p`Í2ă4*”WĽŘÁƒ‡¤nݗëI"$î`ű’đAŚ$$Éý2~üXɑ#ťţrݤ{÷ŽĆ{“$}ú´RŻ^äfđçZHÂçŘąă• rĺĘ%#F ‘ÔŠSë}žă“dod̘QZślŽQÝyó>§™ÉÂAB‘-„ÜN4iň†:#ܸńťtčĐV2ţŹU>ţx‘Ë1łGŽR­ZUÝwŸ;ÜJmBqő,žŕXŒÇĎ-˝ző°|ońâĽňÝwßë~űöm$iҤą>“2eJąŁPĄRڌďŹa<đ€Bą†„ Č›÷Y)Z´ˆĺ{7’NşhTœ,>˙|‹”(Q\Ičxë÷޸t钌–/C† ňŢ{Ă%sćL1>óÚkŻŠQjœ:v옹XZâ5hĺʕ­’ĺ{PFíŘąSŢygœ?Áƒ[eȐáňÖ[ÝĹiŕ´Ń§O/!ń۟„͍74›@–Ó!¸ŞĄĐtĽŽż×B>(qfňňËľŐšđ>; ć†ŘÂIB-„Ün<üđĂ2fĚ­‘ŽÝŸľĘŠSŃYpÝŚspŚÜJmBqń,žŕX č+WÎ`ůŢ×_ăr°€ŁD Ľa˘˘˛Úę !„řCĘ !ŽƒEtˇn]\˙÷ŹÍLČíĆ OuX=+˛ź´jŐBÓkƒ­[ˇI°@eůôéS$SŚčßZślšqť„BHäđ÷ßťöÓ¤I- ™[éZˆwÜďőÄooB! ó™Âš!„BIH0ƒ!$,<ôĐCj(F‰‚K—.Ú~îâŋ˛dÉ2Ůž}‡Fí#M\ŞT)ĺ‘G‘çŸ/Ą žĘlŢüšŹZľZöěŮ+żüňŤÜwß˝ňđĂľĂK/˝h™&͝ÇČ…ËW_}­ĽPž^Ő ä—ÚľkIúôéĹđFć~ .hÝĐgŸ}F^˝Ąd˖UœâÚľk˛|ů WԃL—.ä̙]jÖŹ!Ď=÷Źíw[ˇn+ťv}%ůň='ŁGŇčĂšsČΝ_ČŮłgőœsĺĘi\ó‹AE˛/^JţüóĎŻ)RÂľ?xđ;ś™LţřăůôÓŲrĺůé§ęl)SfŠTŠź^—Ż3ȁ{¸eË69yň¤ÖÇD;܃ZľjHî܏I|ňôÓOɸqŁu?OžÜśŸťďžűÔëăćÚľß$TĐH'ŘŹYKMť:}úLɟ?Ÿ8MáÂĹőř5jT—nÝ:{ý,îŐÔŠ3dŰśmZŇ$eĘępR­Z5)Uޤ$J”Čň{f˙EY•ńăǨ̘;wž1ćʕ+Wő:=˝ď1ś‘6ii1^ źC›äČń¨~śXą˘–ż…’*h3€űöčŁŮäƒ>”7ə3g$mÚä“O>ҚŹUŞÔĐ~˙ďËäÉÄČ*ŇŽ]GÝoÔ¨Ą4mÚXœŔŞýŰľë`üŢ1>׺u;×ţË/ż¤i$%y‹~7qâdÝ_ž|ąmdęęšçřÎ;´?˜xŢôƒ+Vrc‰=zÔó˙ʃ>¨ýťNÚéa…SÇq'šěŢ6;vlŃ´ű3g~ Š÷‘:ľRĽ Fßî”|ýá‡C˛hѧúlĂs  ˙ăڐ˘Ďš`0ű[ÆŻIóćMőžÍš5[öîݧí÷řăyŒ6n˘c ŁÎŞUkŒgýR-ƒ„Ď Ý.äűK/Őśó ”9‚yž8—×_o ťw+óç/ýűh–…ÔŠSIŢźyĽ^˝W$**KŒďnٲU:uęŞűćuzcܸ †Œ˜­űˆČB ao`ü4nÜ,Öë3f| › œä{,×˙÷ýGž€óŢŇĽËô~ýő˛1WKlĚS˛IɒťjŐ*.'? ćZLœ˜ÓřóLp÷ŁGż§ÇEüä“čqŸ8ń}:ďyó͆|OŤŸƒSäüů őÜ~úé'š÷Ţ{ŒgGcŽô‚ĎŹlÁôŰHăv ŁŻ{âţlAił Öş˝řłŰ)™şuë&ůý÷ß ™:Kuţüy5Ţ!]=žÁć=řůç3† űPĎ ÷.Y˛¤:|íľú’=űŁ*ĄŹĚöƒłě‚sl?ů ůśoß]Ëŕ7ž|ň iĐŕ5wcÇNP9kŢźůłßľ’-V÷Ú}LgϞÝ8ŢôXçěźËI°Ř´ésCÎ-5Ćß msŒqœsŠR%UÎůZ[:ŃąvŮśmł ătíÚőşöJ”Č~c%O™Z°ŕÍv[ťvĽŃG“Ĺř dŠńGŽ1Ö7´” Ö+V4dG1ŰľT(ëĂ`ű‰'ÁÎYCšOţ™€5ćśm; Yqڐ)¨<Çřňç7‚íîĎ­ţýűJٲÖ)ÜCY‡2O ôžY­UŹž{žý˝uë–Ćď× ¨MœžŔk‡Ď>Űhô˝Sň×_ŤţŤJ•Š:ˇő”ő\˝z|˙ý^=ĎťďžË˜‡¤Óţ…ů†ç3(žds¨ă Œ\ő<íđö,vZÇć)×._ž˘c1ş­*㌘ƒëqw07ž?˙#ƒ˘4í=÷Ü­ë‰W^yŮç9úËĄČ&Opœ7ăőS]gcíƒď.\XŢxŁĄśĂo43ćQ{ ٓ_Ţ{o„K(s1B! :XBÂÂ/żü˘Fb&u˝6,° ,ׯÇ4$Ÿ;w^7LÖ?ýtЌ5ÜrĽi÷î= …čÎŻ˙ő×_†ó€n0Úż˙ţ{’%KfËs˜7ožńţXWÍO€ Œ@Ř.üHştéd,<+Z~ řÁƒ‡Š˘ŢK—ţÔEŃćÍ[dřđ!âP8tëÖÕ~Ű‹lř=(îaŒóf A)Sd2čŇĽťśĄű9c1ŠÍIăŻ/Ž^˝&mÚtĐĹś;Xä`ƒâ%5îžűnËďCqv˘Ţ,Hąa1-ŕž5ÂŃŚ×ÍPÖ`!˛dÉ$N#g‘"…´L”*gΜőë\ÂîGÓŚ-ÔplbŽw(&-zZHɓ'÷z,\GŽ|ßö}tą€3gnŒąmž6,´ą˜ďۡ×~ĽFŁFMUié ÎłXą"˛~ýC1śG ĺšpLČ0RľjeIH8!odŔ€wUůä ĽŘ>ůäSéŮłť”/_6ěÇqJ.›Ç‚Žůě (Đ`Tôě˙ćyᙅž_ŞTI <#‡/ĆkpÁľL:I§zöěĽňÇ<_G:¤ĎČ÷ßi)ßC#˜@@ń*ˇMĐ6pÚłgŸaź˜ŚrżM›öz&pEßƆ4ѨÇm…SýÖq5Ɲğűädż€ĄóK8š˜`ÜCŕ™>`@?wëÖ3†Ü…ó'î#㠐 Á:ÄĹÁœď̞ýaŹßŔůCö4P“óŽP€M—.=´DĽ;˜Ť`ěa›={Ž ňŽ­óŒ“}–fÍŢTă“;掝#GWçţ`ÁşĄS§nú\uý} Œíôu•ňą"Ňևžpň>٧âˇßîk^YŽăc{ĺ•:Ňśm+Ëď;Ń˝áÔ8˜yR¤î60˘vîÜ5V߃.cÔ¨1jXďÔŠƒ×cŔˆŽůńΝ1łKb>rýú1}nĄíqďpƒĹ Ůę8pJFů"Ôó 'd¨\‹žCn’ 6Š#ć/)R¤řóĚo0Ď1Á5›ë Ź›ŇĽK+ĄŞlÂ8ĂswĎď/Zô‰Ńg6ű ń÷<#a.F!$~ ƒ!$,Œ7Ńľo]€(ą>}úęB 9°Š)˘ćXPŹYłF'˘‡–ţýZz:Üeěâě…jÉ#dT#5˘8`řÁb“jxň{p03fźîÐŻvÔ ˙űďtqłxń] Á Ĺ ”4ž 2ÜĽ8ŚתUSŁÝŀc`âE~TT”„"šŢ|ł*ĚöB„, źPCYüřq]tĄý%h§Há wďˇŐF‚Çˊן}űv™4iŞ^3<Üa$ ÄP4mÚd]\Œńž.Ź"VMĽa† Z~oذzîUŞT6Œy5"~ßžýí!S§NˇŒ FĂ‚(Œ{ď˝W#0%‰((&>úh‘. Đ`ëĐĄ­D*0Ţ řŽ*VpށDżř˘dÉ.'ÚÓÎa(œüţű C‘ÔGűg™2Ľ4‚Ă쿋-Ve(úMťvdʔ śýŸÇ†Ě_Äx{Tű{ٕńă'ş¸ˆD­^˝ş<őÔY‹ďüń§Şä‘>Ţjގ=Văĺʕ‘âŋë8Ç84Aż5 u+WŽ–7ŢxÝň8WX`Œ+2#„Ă0~6mÚl´ç4} Q`ůóç×}D B¨ňÖIŚOŸĄ9hG3r‘PťvíRƒ#2kŕů‚Č|o†ąPă¤\P ‚W_­§ým̌ ČW8Œ@†D°żúę+yçíž={TQ…ç@ßžýţŸMŁęƒáÇÔ¨oČÜŇĽŸWüíˇßkFČąwߢm كq†hݔ)S čçëbuŽĂľ ­7năŘNĚLžůć˝Ďx†ăě—/_6ÚiĽ>g {űő Ěu)+ń›ˆ¨C”˘Ű9…ë´ŽłgĎé>§ě1ÜÁęy:A¨:6;š†ŒE¸WK–,׹ąŠ,{&Œőš0\Ź^˝VŢyg°îc˝كąŮóăGŐqĎ8d% •`d“‰Ő8ŤUŤşÎ‰qŒĎ?ߢ끡ŢzŰčg×%Â5#„’0 ƒ!Ä1°h@şâ?œă2ćBaôÔSOĆú,˘Ř0é…âŮ <ÓiĂ)‘ĹP>b‘ŠE“ť‚‹J3śĂ‡Ą8Áń˛e‹2 փt‰ľűBéá°Đ8żĄCňšNá\ĹXä´VĹĚĐĄĂôw`đ2ÁBŠzEńŘąŁbLěa­Qٚ´jŐĆĽ,Şúö ‹-,8íGw"J<´ &ńˆR€‘Î ,˘ąH;öýJ6(šłdɢÔPv|üń˘€, Pň›×‹ŹŻ…<Ę'Nٟ všreĽaĂ7ôşߤÉ1Ž…véß˙˙§¸Lc(ÉGĆHľ Łć¸dX°`Ą:ä̙C"¤_„aë?~7üÇ ĹĆZU> wéŇŃŃb¤&4’!>Ŕľ!RQpřp‘9o˝Ő[öíۧ÷ Š+Οż ýwÔ¨–i †œ‰Çjş`ȆJ•*Jƒo¨˘‹óúőëŮE!?şN!V ”"4p}ˆ€śs°Ŕľ™Ę88e„3“"“L06ƒ‰Ö UŢ: -*”3”XoĹ8ŒD° ĺh´ÜŽ~ś@‰čôqœ–Ëŕúők†˛wŠ*ć< Dž"]+€\œ6mRŒçĆNäő×ëšĂ¨ŽÁ€ˆłúő_5ž“7#ů‘vĘS8Ú`,cC鉁űÇ8×_Źe(jÔ%”NžĄÎÜÁ}Ž[÷ĂńŚë5Ť‘ŽĘ@ËĄEԋ/žŕúLľj•ŐÁŕÚ)ĹĚą>äŻóććXÄř2rۉ’ž Lç ŤhV(šK”(ĄŠaܝ‡ě׹˝§ÇŽŻg‚'0¸á7ÝŁÝpßaÄ@ż3¤č/č7&čŰčˈLÄ óĎ>JżÄ1î "KÍčŇ@Ÿ-žîS8d*>cľťC#ŽŃ´iKnĆ˝€qĺ˘LăŔAv;Ž`ë×fĽŞI ÄĹáĐĄĂFNUG›ńăGǘUŻ^U×2×`ŢkĆ´ÓóŽ`s’iX…SśgżGiŒŰAƒ†ęüűý÷Gkús§ű ä Ľ3gNá éčyéĽW´¤ŒQˆj†Lv—§hoŹŮđťń'"sí€čsĎ ô[d™B›ăyŒľ"¸­f}H?ńF sÖpČ +`xĆŔÎ]F`-‰ v7×>˝zőęXŰPűŁ7œ^3Orba>÷€?ýÝáls–ÍőJŕ˜îŔ°ŠČ~üŽpÚE™,çdssX[BUŻ^˝×p’1ű_\ËćPÇA(2*>ęy:A(:6ät#Ś\øFŚE÷uK\DŽ#Fę> PĹ]gÖxmŰvt–„B°k8€gŤé\űqćž- ú˜+Vi›šŽ^ÁΚ!„„AüäJ'„$xŕ5ú˜î[ŠRĺŒĹě›ę\EáŒScML°đ™={Ś 6ŘśV9&¨cçĎfšCԚśŠJ2|ʔ‰˛nÝŞX‹˜yóčBîöł,I•EëqŮÖ­[ă},Ž@ô‚ąˇeš>(Zľj)ĄĎj3M5Œˇž‹-óĘŢ\ˆÎ™3/VHwÚˇokÁ„h>sAŠLq tVN8P™ m(AŕďŽ{ťôčŃͲŽ5˘źz÷îé2PŔř _~ůľFŽz۰Čň‡É“§jä"üpJ‚ň!ţźĆ˝›KY*îé6ůĺ’Ĉ<đtŽXěÂȍh%‰7pżí iˆňXşôS3f”Śu_ŕš ď›Š´ťYťŢ DćŰ9WŒ=(§ú#ŇĆZąrĺJý e„U6œH&Tyë4ɓ'“ŽŰ[žŒ•fę~Ü[oŠŒPŽšŒtŞV΁‚ZĐ /ŤçRÖŹQzŻVŻ^’áŽE-ZÄÎ,„1ž5ëMyÜśm›XFbD –/s BaçN¨swpŸ›7obůŽßTśy>óĐLç´ 6ÄŞ9…÷RöŚO?ĺ—|ńÁŃNyňäąM9gĘEĚăÜÚNŽąăí™ŕ VŠ„5jŕÚÇďZ!‘ÉĆěۇ‰őž“ýÖq5ƝĆŰ} Gż@nĎlQp¨pĐ-_ž\ CŒIÆő]űV÷ÚqąFX°ŕ#Wzîˇßîe9߁!Ę\˄ §ç]Á€˛ˆŞ äłí÷˜_C.\PłqšŽ>ˆžf•Áórb֘pü÷k†Ę*c$ ĽíÚľve$š?Ą×cFŇúЎpÜ'+L9 ™e%#°Ć>|°,^üqŹ,ZNôGo8˝vžI„ťÍĆŠé‡őĄŐzcŽS§öjhľżťjŐ2-óЧO/Ë1‡9čłĎF;qîßP‚Á ŮěÔ8pJFŮĘy:I°2Ô_šÖľkguÚD€€ˇ˛¤áúP84€-šYĄßőíŰˑěĄČŚyó˘ű2ˆÁšÇŞWĽJÔá5"e.,GţčSż‰ }„B쥃!$, •ü̙Ĩ_í ‹XlŘáž8ůőטu­azׯ^˝Î6­ŇýzŚŞ‡‚eăƍş_ŚLMiGٲe\Y+POÓŢĺf4(˘Ź&PŢ[ű łŔuÔŽm漏EĂË/G×脲ÎN oî܏Ůé)˘XÝK!„ oĆf÷óô\đŻ_íđDá…l÷Í(S÷{ óćÍ׈!oŇXË_|Šé-ˇlŮ*NĽ‚iPł2ĆľjŐ°}c¤RĽJşš2V`ěGEeo`A㖷¨{îš)ŕŔc‡‘Ě÷˛f4ť;¨ÁýŐWßč~šrĺ4•oB"y™ĺČ~c>?LYďôqœ–ËŔJ™ iÓF+v śËXƒąáíÚýÎv)ˇ~8Ú¨™2e ŰňP™2Ý,A4Ȟ„2GpikíR˘Cî˜ Ę .Ćz™Ź˘ŘˇnÝë}(D‘žT­ZU"‘ÇČ‰'t˙Ľ—^ôš&ŽR&Ą>/ípzěřóLpÇ. ŕpşšr對Ž7ű­]ŸsŞßz#ŽĆ¸“řşOᐊO?m}Ż~řŚQ÷Ú 8^Cą˝OqąFŔZćóĎ?×}mŹ J&HßĘ:Äœœw˛Œ˜t÷Ě3V +وĂbEť†Ł"›Œ0’™ăp‚r¸ć貂ŢĎF$‡ŮăÇOX~.Ňևv„ă>Y‘.]´Ă$2tšFbO0°rŹt˘?zĂé5p(ó¤H!Üm6nÜäÚ÷VĘ}kCo ]áŘjäcbŽŠ‚+€Pes(ăŔiĺPÎÓ)B‘ĄţĘ5č%gϞaň{{űáÂÔsá<Ü× ž@ö`ţ*ÁĘ&<ĄŹ @Ŕ–ˇ9P(Y@"m. ĐŰűŇo"S!„{X"„Hť˜'OîŻ!-<Őą˜ÂD i˜QţaěŘњćŘ׎]Ó 'OžRc$ţîŘą#ĆąÝAKxÁŻYłN8`LŒ_–ŇĽKkÄ&ś)SŚ´ý-œŁšxDMesňmÇý÷'ÖTÇŽÝ\ěAvăĆ ÝˇSŕš`Ą„ĹÚ"Ž64ĂCÜפ<_ž|Žý#GŽXěRĽJíő0ˆ¤ĘĂu‡Ű`ę­śjÚ´7_nÜř=Ć{?ü)Ÿ{h^JT ŻSKŰiĚú˛Pœ={Në@"5ů?ţ(;w“îÝťĆ=g vHj*îš'~Œű¨ű•ĹëgŠcŚg?qâ'KŁÄý÷'‘@Áx…|Aů ´5ę2oٲÍőž§|q'Iß}QJPŔŘľnÝ:wÚXłf­Ťý})Ü"‘Päm8đŚźPÄ ,ҧ?ţSXŽă´\N)]`P@úc¤íľ×ľŹAĄB…Œ>ú¤ŁŃNI“ÚoM㴝R ¸GůŠ, tŽŕŽ?Ď<řüţűąŢ+UęyC ?Jĺ4˛Đx:š™i`ˆ-^ź¨D"îY• üőöźt˛÷6vBÁéąč3!Y2{cF ý֌VóF(ýÖq5ƝÄ×} ‡Lşà wç§îľ;qąFŔo˜k_YŁp?ž[xăŠPć]Á`öĚ˝‚­qŽ>hŽ?|˝gö—@0×AXŻÁyڛlw˙-Ü ¤Ź÷$Ňևv„ă>YQłfu-óChŸ>}ľœžóĎ>űŹŽOź9+:Ń˝áô8”yR¤î6Śł*ú>œĘ˝uĄż`|ęÔ)͐qöěY9sćœX ¤ýFÔť“`•EˇňĺËJ“&Í5E'Œz… 4îiZ •_~šůâÍĄ%œřZ ÷l2/†–>ú‹/viý[ÔAˇŠ”tz Šř-¤Qtď'+VDgľ@´˘U*̈́@°ň6¤L™ĘçgĚr3ŢúQ(ÇqZ.; RŁN›6Cš¸gŘĆ?žÝ(kăTÌpę!ĐĎYů ' Ô°†ăč•+W\ц—.]’;wé~… |*ă ÷žŰącżżç>çq’H;NŕTżőĆ­2ĆÝš•úE\ŹÜ%—|áÄ\Ňq=ďrǔs0ś+‹ĂŃĂiÔs—큎ƒŹˆ´őĄq%+`”<ř0ŕW 3 ćphƒł1ÖnžŠçčŢpz œPî˝7ÂÝćó>€’žôžä:VŽ\ĽŮöěŮŤwOp_°ö •Pdłă8!ŁźĘy:E(ă(šŸ mA¸őŸ&ÁśŠ{ßóŐŚxNc˝˙óĎg$đ߉źšX  ăO›6o !„ŕĄƒ!$, ÚyďŢ}ZRáŘącş s÷ęE-ˇwßâň’Çä9sćĚňČ#ËĂg”ŹYłh^ŤVmm#qâĚâą~ýWuqŠEÔĄC‡4Ň ż‰mÁ‚…ZמAƒ›ľ”­ÁjbçŐěĎń‚ýM`.ŹýY`¸+ňœXG2Á^ßÄ_‰ _ m%ú+RńAтl0ŢRú‹Y/Ŕř3ľ‘˝P$™@ц´œ([š’={v]xż÷ŢhqŠRĽJĘđá#´\ŔŞUŤ]?üpHł’€ŞU+IB%XyüIMm–Âń&7C9N¤ËeÔĽEşÝUŤÖ¨bußžýš…)TQƲ1 &m$:81Gp dƒú jתUS_O(™iţý7¸>gĽěw‚[yN—ý6ĄqOnŐ~Ž5‚űóË#ţw†^ Ýń1ď˛"WBëƒÁ݃"7 ?Äĺ}B ţ?^ ĺ'śnÝ&ß~ű!kQŰěŮsdĈ!’!C†Xß—ă­¸vЏpńg˝ęmî…L"­[ˇWd\‚#ţCeŒ3JŽ\9u=iWîÂ_œÍÁŽƒ¸–QĄŽ×ř$š ř7‚׆Š{֗pΑ"m.F!$~ ƒ!$lŔC†8ÓÁi’MtŠÉĽM›VRźxąXľ˘­"˙Ź@ůł ű÷Í›ˇČ˘EŸčmüř‰ęŐn<Ó¤šÁߎ]kŠSçe wl¤WôE(5KŐúôiż~™LŇŚŸLqî#úHąbEdčĐÁrŤŕžÖôĉ“âî5cóć}VâDý`Ąímń Ů`’&ďČ+Ö­űĚĽH‚Ҩu떖ő;asÔ"-SڌŚ'ýüó­ŞĚAÄ Œ_i@+T(/ @ĺm řë`ƒ2Ož8{6ú3ŠS§ Ëq‚\N—.źöÚŤşaě9ňŁ–'@t=Î eź2d˜qQ+NĎB劧žÔZÂ?ýô“*şM‹UŤ˘•Ţ9sćôZŰ:žqŸó|đÁtŸ%ŰÂÍ­:§‰~›PǸˇRżˆ‹5‚űo¸GPÚń믿H¸ˆŻy—;ćœśŕŒSQBëƒć5'IrżaP\#ˇ q}Ÿŕ`\ĽJeÝd8œŒ?ůd‰ěÝťWŽ=*=zô–éÓ'ťžăDôĆ­ş…pˇyôoD÷!dđő(`Ǹq]ÎĽJ•”×_o¨Ůa=ëpę 'es(ă .eT0ç "׍ˇő8ćČôŕ.[íE˙*žs$8-y#Ř9R$ÍĹ!„Äá/DFšmI™2ĽkQÝ&ˆ´3Łűşuë"•+WŠĽ€¨-(0rÂ@Ýśm+3f”ëuD˜¤K—ÖU—)ƒéÝĚúˆČÎá ,Ŕ‘Í#X˛e‹Ňżft˘7víÚĺö˝lr+ƒHP€v‰Oy6l¤źýv?ż"÷ÜŁ‹ĐŸCu˝wěřB÷óĺ{.ŢR˘ď<řƒ×ϘľfA–,™%śnÝŞ‘şuÔ¨á’?>KŘŐŤWĹiĚ(v8 œ0[P6EŠr+ᏼ‰ßěÇޔ-ţ8<€ŻżţÚëűHł Ȓ%SXŽ“Đä2›ŕ€ $łgĎt)„V­Z%‘F8çÁbŽíďżßŁÎbgΜ•čkŐŞEnö 5k”kϞ=ßÜŞsšřîˇ iŒ[q+ő‹¸X#ŕ7ĚúíťwďöúYDƆ˛ńE|ÎťL}4Ťţ…ah÷îo˝~Ö.{UBëƒć:kl”&ş]ˆďű„Čwo'O/ ć××`,wżNôGo$¤5p\î6ćÚżěŢpĎé‰)3‘ąbŕŔţúěśĘ\ŞĚ §lögD‚Œňç<#@äZ°ý׉ő¸9`á+ӝŻůO8qĎPâKüřăŃşę@ˆ¤š!„řƒ„°ážđtŻIçžhđVŽ`ÓŚÍśďÁ}ɒĽĆbqŒíg<Ü{コďžpÄ"łD‰şHsoфXŔ|ňɧrřđ‘iQťąhŃÂş˙Ýwßë"ĂD´›i惥\šrŽsůčŁEśŸƒbÁ‚uuÝK˛Ä%î ‚pŚÍEśońőë7xýěš5ëTŃĘ}”ˆ@&”P@´7vŢ™B}{ŕŔAŽűШŃëŸ|ôŃÇśď]šrĹeB´xTT †7nčßäɓăŔžöçŚMŸ‹Ó@ć˜2móćÍ*7ĚHš¸Ć‰ńŠźîŮ=dÇgŸyÇ&_|ńĽWĹŘÜš \×Z˛dɰ'žä˛Żű‰qy8bĨaÜIž<š+ăB\:)ř‹s§ŠXąź°aČřüó-:žŐĺʕ•HćąÇrÉĂ?ŹűüŠWĹ,ĆúŠŤÔ$\$´9ż8Őoo‡1nĹ­Ô/âbŮc‹žüňk9~ü„íg!łĚşéâOşňřœw™”.]ʕ!mΜš^?Űť÷ŰRŤÖKęüěnœŽÔ>h7w+]ş´ëţ̛ˇŔŰ!t „~.'§ŇÚű3g‹ű„cďÜů…Lš4EçŹ@{öٛÇto['úŁ7"i Wë~_„ťÍAɒ%\űf–V+ŕhu“ŚĚ̜ůŰąƒ2"Čź`G\ČćĐǁ32ĘW ő<#ĺŢᅗ¤aĂĆÜ~‘‚ëń%Šë_ČożčĐaŸNHá Č&/^ęuíłdÉ2 –¸š‹B‰lč`A 'NœącÇé>… t˝ăŠÉ† -żżkחňÁłí/Ë—Ż”wŢlŔćÉҥ֓b ̎ٲĹLß]§ÎKęmŒ÷ťvíi銍ÜŘądđŕaňęŤ b-¤_|ń]đás˝{÷ľL /ô &I(”(QĚŐfSŚLÓśńʁߕ“'ŁKJÔ­[ÇŻ:€áŕţűťöÙÂľĹQ; :L#‹­@(RZ´h%={ö’ř‘Ź÷ i)íŒ"¨™nö{DŸ–.ýź"k´AƒFŽ{€ţę^~$Ěh—ëׯI(ŕú0.=Á"÷Č4˝ôŇ ,3F¤ˆľ‹X˜>}Ś×ȢP¨RĽ˘ţÝśmť+{˛ć(_â3Š;C•ˇO?ý¤K96uętÍŕ ŽkfýđĆQŻ^oŤĄŃÔÜ5euúôé4}r8Ž_rٗ|…S䜚PŽĹJyôč1Ăč-/łf ͉+81GpD(™ 4(Ȱ’%‹[f)ˆkÜ#Ż]‹­4Ž_żŽţ=räˆ1–YZ ˆÇ\Ś_żRŁĆ >3KB›Óř‹SýövăVÜjý".Ö5kÖĐż˜óá7Źže§N’áĂGJ° ÝşŮĆvs'ć]žd˜/ ŁQš kیX~s7ŤóëŋbôŸHëƒHŤΞ=k9ÎźPŚL)ÝG;cŽľk×îŇšs7Š]ťNX íţôđgÎ÷ cŞk×2mÚ Í>heŒ˝~ýş:/č:2gž™é̉ţčHZ;ąÎp‚pˇ9@żËŸ?ŻîoÝşÝґ}ďÝw{-Ą`ĘLČÄ˗/Çz™ůŇ[T}\ČćPǁS2ĘW ő<#ĺÚ ACľo!‹žçsáîťoV€ˇrŽub=G&8ʁɓ§Yö_ýŐčżýă5ťęŞTŠ˘űč_ĐçZô5Ţ€üÁŠš˜ŻűG!$ršK!$ŕĄëš Ä$Ż8pP=áÍĹ”î^óHOˆ´mX ÁÓ)؋+&)SŚĐHŒmŰśi4Fć̙]éŮ=ŠQٚ*—Ż\šŞ5Ż‘‚ŽpáÂŽc %˘сčK/˝ăű¨sŮźy=zœüđĂRŻŢkRąbEɓ'ˇŚĎĂDőŐÍú˜XđTŻ^-Ć1ž|ň ­ĹŽĹ"˛Ô­[_'بq /ixmŁŚ%Ί`Á>#Lě€Ňńíˇ{çűŚśiŰś¤lŮҒ/_^Iš4ŠNŘ/^ŚN-őâëÖ}Eâ ´‹ ˛'źüňKĆŢňŘcĹČd*(OСooiٲľö´OŠR%ľ­QžN3XœšíŽčúŚM›H|€čçľkתÂçĐĄCFŹŤçŠČbôO,”ˇlŮf(ŰŁÓbá˙Ö[=źÖv]ž|š+$@ŸCşGÔîD˙w÷‡ÂŠ}ű6,Pâ! ǎ;5”žE‹ (b-GŽú=ď6lŘŕŞMĺç˘E‹]™žxâqyá…Z,H×…ŃíÚuÔ1ůĚ3OŠCdÎęŐkulFEEŮʗP¨TŠ˘aôšd(wŽŠ‚ŔÁƛŻUŤśZĘ,\87†Ą.TrĺĘŠý˛Ę(RĽJĽ[î܏ůuŒPĺmştŃ ›7oŃĎĂń÷Ę-DhEgآăN8žŔçĐëÔŠ§2Ä7~Ó¨Ľľk×ë˝GßěÚľłžO8Ž_rٗ|EmeŒ!(Űі¨“[šrEă˝UYƒhę%K–¸˘í4¨/‘†s„pPľjUăˇw¨ŹžůZ‰zčf*\ԙF-gôCÓŠŽFęĆyoŐsGżřţű˝Ú/˘˘˛ ÁľŸ.Zô‰ń܌6—+WFrćĚ!á ĄÍiüĹŠ~cFœ#čÖ­łöřćVëqąF(\¸T¨PNŸc”W^yUkœż˙ţG3g,^źXçč7žŇd[9ć (ŠřŮgőŘ(ľ€5_‘"ŃY:œ˜wů’aţĐĄC;˝FŒ 8ŽŔpYĂ+J~Á،ĚU mÚ¤M›Ö1ži}}׃5ć^(5ƒ+ –¸/ sçŽ:ć1÷:t„Î]đ>äćĄX“ði:Ŕ6oŢÔëÚ"Xüé'ţŕϜ5.î֘ľkż(łfÍÖő˘Ĺ_xĄ†öaŃЏąv1˝čóČäN¨ýŃ×ůEĘ؉u†S„łÍMşwďjčč3öý÷ÇĆčFŰ?Żş.ôô=ô:u^śÍrQłf5]óc­ţÚkŻË‹/ÖŇr!ČşräȏQuą7™˛Ů‰qŕ„ŒňŐǜ8Ďřƛ\K’$‰ĘľĽKWČńăљŸ}ö—aßäá‡3şö§M›nĚĘk;GEeŃלXCwÓącu؂#t+VĐg5ÖʇÖ쿗/_QGÓPBĄI“FĆő|Žs°e˖k_ØŔ\}oçΝÚ1żţůçÓAg—pj.ćëţE‘¸– „ř‚„ đ–ц)LŹąPr‹˘!Cޕ֭ŰĘŻż^։-6w``ěׯÔŻßĐňŘPź üŽzťCą€E€ŐBÖ¨mieŘŻWŻŽ.fǘ?ß:u! ÃżĂ{ޤcÇvşpĂÂǘ9sVŒ÷ąŕ0 _Čiqář1věűĆ䵇Nţą Ćć "Zz÷~+^#úŠ_ @>cѲKć"˘uë–ÚćN#ƒ{ťXő%v˙ţ}])łă܏!Cýh¨FúcAŠżVِíĘ÷Ź/V`áÚż˙;^?ƒ” Íš5Q%(é{Ą>ü=]Œ"˘̝;; œ+  lÚ´…–ćÁć Ň÷40¤ţ›)S&cŃßM3. ‘u›;P.”-[VŁşœ śÂ… şŽí^ľŞ÷ň ǎÓżXđ;é\ lnÔ¨Ą*Ą¤0ŕ]}˝H‘BĆ=ę×1œˇÝşu1Žó„*źaÄőŒÚĹůÔŻ˙Ş_pî@;aQo:ą¸%UŻ^=UáÎăć\ö%_ńö3žM]ՙËý3î@šŠďŕÜ" 'ćárĎœŔx͛÷9‰R¤HĄ÷rÆMę4Š(@ŒÇ+nڍ~÷݁Fť×č48śMœ8ŮňXpČëŃŁ›„“„4§ń§úm\Œqó™ý{$R¸ŐúE\ŹĚą Ĺ> &žĎ28ě˘_B6ă`Zśln"ŰŤc2űĚéÖŽ]Ľ÷Ŕ‰y—?2Ě0üLš4^3Âx Ł6O2fĚhFG2üÁXďERDśĹUŤVëÜ ĺ̒™2=˘ÚFÂ)S&çű–Ś|ˇ“O­ZľŤÄW?ńçŹqqŸš6}Ă0 ŸŃ¨w7aLˇĆČśm[Ĺz݉ţčHY;ąÎpŠpˇ9ŔÜoܸц|ďŹ2w׎ŻtsŮ`ܵӗĄläž=ű´DĚńb‚ľă›o67Ţ;ďŐ!3.ds¨ăŔ ĺO ő<#ĺŽűw¸íL * YѧĚď"*Öć&NŹÇqĚ7şk6 8Áy›;hcĚyăÓÁsŹŃŁßÓůćËpţ€Ţ×8Z ĐWED‚/ßáÄ\̟űIDęZ‚Bâ:XB“|ÔşK“ć5”“çV`‘?oއ2gÎ<¨„G9źë)‰ä+ŻźěľV€§ôGÍ×:…ˆPŔBáˇßn¨Q JÔ?†÷0źží€áF6(?‘] 3Dâ:pî¨ cƒbŻĂcŸA„÷?h„DҤI´ 7~C˝Â¨;ŒHŚ ćę)X<"’ Ţč9sf×i${ :t°ŚÁĆ"÷}ăŇĽ_% ].œ§JH”Ĺ@ť`QŠ4ۈ\@G­Z5tqŸ˜ĆZ8ań…Œçϟ3¨żKŞT)ľŸ ś+źŐ˝őY;Đîp‚1<{ölꠁ4ŽŢ"řýŃ 0 *í{ď˝÷h4@TT–@Ł}uÌŠ2uę cÜGGO`ŹeɒYŞUŤŚcß e52F ňők1&ą°E$AľjU4ËŇÆ Dľ›ˆ01ÓřZ”ĽČ<ÂUF¤aĂ׌{z••(€{ cO „*oáx2cĆCą7_#­™uĎ=wë…ěB„ŮO?ôű| h˖-ŤÖô…ŇQřˆň@y:ľUljkšě|ĹoOŸ>ŮPŽ­2Îé3ĂXuHď7˛3=ř`˝6Dvyë—ńs§ ŠPĄ‚Ka^ĽJ%ÇęÎ;AϞÝuţ…Œ2PšâÜŊČMƒ;í5kV—O>YŹQçΝŐčŞ4iŇČSO=aČÇŞA—’ ”„2§ 'úm\Œq(×dw0Śpr+ő‹¸X#DG˝ö6~ٜŽePÚs+üÚ˛aĂjŒ‡R?X0™0aŹŃçf¨ąĎ~<ëa0űó._2ĚđŮɓÇëo-[śĚčëÇőXX şărÎ[‡H郘7Á0‰4ě;věĐľ Œ§gΜu9X¸_3˘qÎG×R„hĚa]ťv-yřá‡%œřÓOüÁß9k¸ďž™ýú˝­Ćpü˛alA㙉HddňöĚt˘?z#RÖŔNŹ3œ"Üm #B ćRŃkšS:—‚ăFŐŞ•t­‡; Űşwď˘Î p˛@š(N@nĂqWĐŻ† ó^R .dł“ă 嫏9qž‘€•\ĂuÂQ ¸_%Jˇü. Ì%ďż?Föîݧ1ff:§Öăhg´éźy U§ućĚ-q‘3gNŠWďŐC!s^|ƒ ŠS'ĘęŐk4° @Đ.(Ĺ[¨P!cöşöPqb.ćĎý‹$"y-A!qżZÁ;ü|ď?ţŢaósťÓíŻš%ú˙k‰<6ź‡Ü^wţůç_7óőB!„Ä(1ˆ"ЧO/–ąJľF˘Óö"SŽŇäv)l›5kŠűˆÄCÚÔř<š=A¤ęzĂpşhŃBGË^ }xŠRĺäƍZ~$”ňa$áСoH…SëęŐ+„B!„ˆTŻ^K“ő˙ÂĹ­2ăZ‚â÷Üs7ęšýklWţ˙÷íż˙˙ý×műĎíŻç&6˙÷ö×sßoď)‘Ÿo•B!$H2€¨…RĽJzýěŃŁÇô/"lZ´6!ˇČD`Śę͛÷Y:W ˘ßĄ †'k‰[ ě‹Ă‡Ôż2Dnć"B!„§@Ś“K—.yýĚĺ˗]™"B™#ÝNs1Ž%!$&t° „Bqˆ“'Ojš^€r÷Ţ{Ż×Ď#U%@JŘ`JĂBâ8W \¨YłŚ’1Ÿ9Hg銲‰wŽ?!íÚu_Źă57ŇUŁ(\¸ B!„ÜĘlßžCęÖ}MŢxŁŠęgŹ€óüȑŁô/fŽt;Ο– „˜Ü%„B!$h8('Nü$ż˙~CŚO˙@ţüóOuʍWŻŽĎď;vL˙,X@!‘ęE˙ő×ßňÓO?c{Śž†:Ĺ%JB"ć3ç駟ÔzĎ$áň÷ßËwßíŃ9GçÎݤdÉâRŹX1ÍŽƒ×ŕśjŐ-ŇĽK+/ż\[!„Bne.^źčr¨_˙uŠ\š’<÷Ü3’*U*šzőŞfýôÓ%rúôiýLĄB‚Ę&z;Ο– „˜ĐÁ‚B!$ćΝç*î¸ăcÝA2dČŕóťÇŽĐżt° $ň:t¸œ;wŢő˙dɒJż~}äÎ;™$LřĚšuȖ-Ťź˙ţHéŐëmUŕoذI7+2gÎ,Æ ’)R!„BČ­L•*•ĺż˙ţ“#Fi9‹>úX7+Š-,ýű÷•`¸çb\KBHLč`A!„§O˙Ź)ďşë.ɝű1iĐ žä˗ׯď.X0G!‘ÇŮłgő/Ć5+ňçĎ'Mšź!3fB*Ýşu֍Ü<ţx™7ośŹ\šJ6oţ\:,—/_QGĎÔŠSIŽ\95’˛|ů˛’(Q"!„Bš¨ZľŠ*TP/^*_|ąK3Z\ťv]îťď^I“ćyęŠ'Ľ\š2AeŽpçv›‹q-A!1šĂĎÝaąďíď6˙7ˇ;Ýţš[˘˙ż–ČcĂ{Éń÷Ď?˙Ú&„B!„B!„B!„B‰(îšçîÂߍíĘ˙˙ţăąý÷˙ż˙şm˙šýőÜÄć˙Ţţzî{âí=…ům !„B!„B!„B!„B|@ B!„B!„B!„B!„ĐÁ‚B!„B!„B!„B!Ät° „B!„B!„B!„Bń,!„B!„B!„B!„B|@ B!„B!„B!„B!„ĐÁ‚B!„B!„B!„B!Äw !„B!„D ˙ţűŻŹ^˝V~˙ý†TŞTQî˝÷^!„B!„Ä-œ—B!„Ü„„ 8w\šZśmŰ.§N’Ë—ŻHҤI$]şôR¨PŠXą‚dΜÉňť/˝TWNœ8!Á2rä0ă7 şţ_ž|%ýý\šrɌS$ž śm.^ź(•+W—PŘźů3šçž{\˙7Ű&V­Z&)SŚtý˙ǏJÝşőm?Euš4i$SڌRśl)UęyIœ8ą„o×s×]wIęÔŠ$}úôRźxQŠPĄź¤M›Öňłî×Tˇî+Ҧ͛â”Fš¨b!mÚdŢź%I’$~}wěŘ 2kÖlÝŻUŤŚtéŇQÂĹĽK—dŊ•˛}űN9zô¨\šrUűÚć‰'7ÚŚœ<űě3>Ó˝{Oٰa“íűI’Üo´yyňÉ'Œ~]^ňć}NBaäČ÷eţüş?ţ[,Ž‡;ďźÓǛcźćT›,_žRú÷¨űřě„ cő÷|Ńť÷۲fÍ:ÝďŘąÔŽý˘8‰űő}öŮš˙ţűýú^ťvdǎ/tǎ-śŸűďż˙d˖­˛qă&ůîť=F_˝(˙üóݤJ•JrćĚ.%J”0äHiĎVř’G÷ÝwŸ+[ś(}N”+WV’%K&ńAǎeëÖíşŸ5kV™3çżž7}úL™8q˛î/_žXĺkBäŰoż“fÍZę~˙ţ}őžÔ)ÓdÚ´ş˙ő×ß蹈w–/_a´Ó;ş?kÖ ÉžýQ!äVŁk×î˛iÓ纏yćsţ€ův:őäęŐkú̘;w–dȐAHÂŚfÍĺçŸĎč`ȐAB"¸z6ýüóĎF¨­űíÚľ6ĆűËrť9ˇtércşMőwŠRĽ”¨¨,ĆܸœŽ%J$Ą‚ľ Ö4ĐuŹ[ˇZHÜôżÂ…‹Ť>˘FęŇ­[g‰K8/ˇ&>ď šőŕœ†Bt° „ĚĚÖEŐďż˙ăő_~ůUˇƒJ“Őđ׺uKGď …Űąmţřă9}ú´n0°NŸţ ŘĎ0–搸äďż˙–sçÎëöý÷{ô<şté¤ $§Č•+§źôRm™7ožœ?AƏŸ$:ľ÷ů=…çΝ§űpĚhٲ™„,ęŃż` őěƒh8[`[˛dŠ:XôęŐ#$ŁÂőëżéöÓO?ŠŇ´RĽ Ňłg÷ŰjĚ{âo›TŽ\QśmŰ&ë×oďžű^fϞ#Ż˝öŞ×cĂąÂtŽ€łÖ‹/ž ´ÉŰo˝{÷ĆzĘHl7n–3>Ţ˝{Jž<š%PĐďÍcmٲM›5j †7XœNNŚĂ řńÇŐA 2„ž-&'OžB;ś—/żüJŸš“'O“RĽJɃŚ÷ů˝÷Ţ{_ qă×é\AšĽX´č3fźüöŰo1^7×É;wî’ >’AƒňďA!$âb^žiÓféÚľ‡îýžä˗W⋫WŻJٲużaĂפyóŚB!„bB BH@Œ7A †… ÔčkD_źxÉ0 ЈÝţůGĐ.œ—úĹ8ŒËׯ_uě_ýŐX@Ó}a€´"[śŹ‰„Ú6I“&Uƒˇťw'K—.Óýš5kČă[í˘žĄ<†ŮźEŹăšĘ–-ă5¤‡„w5˘Ţa@=yň¤´nÝÖh‹~)şƒ×Ó´iăŻýóĎßF›^4”F_Č7ßěVĽŇŰo÷ӌŊ§hÖŹąąčß¤× úécĺ˛ý<"ö ˘ C‡özŻćŻżţ’ˇŢęíŠćéŇĽ•§žzRҧPŽ]ť&ǎÓ¨rœ"N4hdFHî܏ů<>"1îžűîŻÝ¸qCţQÖŻ_ŻĆŠ+VIŠ)ĽmŰVÉř;î¸ĂťA>Ô6éÚľł:WŔYgň䩚qÁ.šďěŮł2tč0ÝO™2…qŻ{çw‡$ŕđТE+Ł÷ D‰â’1ăCętúôٸqٜ9sVŽ?nȐv†rx”מ™"EriÓćfť˘_CÖByŒ BřMČ(™Ńďě#ĂO8Yłf­Ęúäɓ÷+•fmB„,§I“7´ßܸńť!?Ű !„€téŇϕf2lŘH}ö6Ü؆xýćˆk׎×ýěŮłË+ŻÔBšUX¸đ#>ü=݇^ŃĎĎ<ó´ąNŞY6áŘ}čĐ! úhßž“LŸ>9l™'É­ çĺ„B!7Ąƒ!Äo>˘Ńńࡇ’#†J–,™c}F­nÝŢ҅űşuŸI™2ĽĽdÉŽ÷Ý÷=żg:XdʔÉ0\W’„‚mƒRŢŽŮt°€óI ŠÖS¤HáH{fÉĽeŹ€7˙¸qeöěľ$ň#ÖÎ×cwˆ,@ůž={Ťówɒ%ŸÄ2„ ”P;w4 Ő0üÎ;ƒećĚŠśŃń‹/Q#:(Vʈ<˙| 00˜Î0ŔwęÔQJ•*ëźŕ3jÔhîÇ}Bƒ3Śjůo Ô‚ó 2 t ”-}ôąÔŻ_WR§N-‘ŠSă!Ô6Iž<šôęŐSÚśí 2}úôÓ2GžNpč×o +âś{÷Ž ŽlÄűďq9W4jÔPŢxăőXY=âý㏲c”:FźűîŻcŤrĺĘś÷mścÇN˙p`ůüó­†<.o˝Ő]â‚+˘Ó$ĂiĺĄPh͚5zNɢۅ‡~Xm!Ä”\[ľjěŮłWç5pöľ›gýůçŸúxŽôčŃőśÎ¸Ešľ@ö4ŹĹ™ß{oxŹr‹Č–‡y6Ö&pźÇ:őv,ĄB‚‡órB!„›Ä]ŽdBH‚‘Ř0Z”€°r XĐ#夊´\ąbĽÜę°m˘•ŐožŮ\ňäÉŁ˙Gś(zâ8­˜Q‰(͂úłNR¸p!—“ ˘€‘ÄŠhE×݇!Žá™PôąéÓ§H™2Ľ, ӏ<ňˆ :XK´Ď°a#$EjŚË„ŁŔ7ß|+ˇ;ţśIţüů\÷e$&Nœë3sćĚ•ŻžúZ÷ŤWŻŚ™p–@é€,8Č>ceÔBEů¤ŞUŤč˙1śŽůQ‚Ů=ŕ܀ą‡=°lŮrůâ‹]nPč‡~Đý˘E‹Şc¸|ůŠaÜ*„BœĎ 8šÜFŽ|Ď2K@ żS§Né>žťŢ˛BHBă‹/žÔl> ]ťÖąœ+dfŤV-\âNŻ‘ !„Bš` BˆßüôÓ ý‹š/Ľ$ęyvîÜA#äSĽJ)ˇ:l›h`Ô,[ś”ěÝťWłGüđĂ!)X°€ÄĺʕŃl`ßžýś™S‚Ľ}űśę؀űhWűQűx´hŃTîá`ҤŠúJłŢ˝{úŹ'Žű„’ČŹŇ5ˆî?pŕ`Hĺ }ôfi‹_~‰ǚHĂß6c ˙G•šsçŠAţ駟Ň÷Ž=ćrşČ˜1Ł*L'Ožr9 ĺÍűœĎĎżňĘËĆľ>Źű÷ŢZIx@K/5kÖR3ÎLŸ>SZ JdŞ€C ˛Ţ¤NJ.]úEęžž¤8˘ąá4‚t÷GŽ‘ß~ťĄeSňäÉ-+V”%ŠŮf˙@§]ťžŇ2V“&×ŇNS§NW™†L)pJŠ[ˇNŒR]čŸ(ˇríÚumŰâŋIƒŻϲT~327!}5œ‰ţţűCf>¨÷ŁNÚśr ż‡űú÷ďk›Á ĎdńYştŠ;vB.\¸`´ý}Z TŠ’ę¸j‰”žY˝z|˙ý^=ţÝwß%iÓŚÓvŹ]űŰ?čw'NÖűąmŰf-Ů´hѧzď`đM”čNŁÍ3KĽJĺľ ˜Ý}3A&˘ůó?RÇ+dƺ瞻%[śl:vpOBĽpáâ:^ĚZÓťv}ŠYXöîÝg´óżňřăyŒ{ŇDžxâqý<Ć7˛,Y˛TŁđČ+\ Ů޲ ŻZľZ6lŘh|÷°üúëeI–,ŠŃ72Hů´]í2ö˜ç‰syýő˛{÷ˇFť,ýűčxø˛7ŻÔŤ÷ŠDEe‰ń]8;uęÔU÷ýŠŠí^‘›ţČ2ŕŢQGüšçžŐvúä“%*óŃGá öć›-Œž”V?Ůüů uźŕ^CćȑCŰÂ;ô‰?ţTÇó™3?ëýA{"M|íÚľ\NgV˜mÚ¸q#Í6„RhK—ŽĐ2G8ŻO>YkŹ"‹Ű…kD z8; Âľ@üú{ž2d… JâϜ9KKD?ɸˇíc|ćŘąăÜpŽîcŽÖ´é–Çň”#/^Ô~ôČ#čϕÔyŐ. Q ˛ŞH‘č9é‹/žë\áűď÷č=ڷƒěŔý-T¨€źđBM•ÓŢŔ˝[źxŠ–Ö;}ú´–łĂwräxT3DٕŘsżÖ‰ÇŠ,X˝z­ömDĹ#u<ä;žC¸7ČŘ 8/ČK<óĐá°šy‡ŒaČLć ó™‡10~üŮž}‡>Ď0÷Ĺ<óόXÁś;({6oޝăa\ŢuW"CEŠ3)úÎeŔ”)UśĂíňl2šrĺŠ|úéů쳍ƽ9%ýőˇfŹRĽ˘ËiŮÁČšPäŞg˙C™I´ýΝ;ŐŃ™á Q­Z5Ż›Yk‡qăFë>ć‚vÜwß}:~ŕ}íÚoŢŠ%%‘íâŔ´o%MšDłižţzИ&´çŁI¨ýĎ$”yźż@ƒ11‰ű Ç0÷Ž[÷e}VŠŻg](słví:Ȏ_Äx e#M^~ů%Cfś‰uNNÜWO0ç3eLfĚř@7€őĹŹYÓmżđઋڳgŸk.awÝV„{nĘüŰ)™W˛Ń÷aɒeúě5ç*ĐÇ" ŮĎŞUŤjšVtzÎ꜆BHdA Bˆß`1°GdžŻ5jT—ŰśÍMҧĐľńbüÚÓ§OÖóŔ=nŐŞĽ–˛gřđšÂ)œ@îÜš Ew- 0ŔĂĄ`Q‡Ş?` ĂžŠ´XślEH§Nví§Ió€˙Ű ů~ýúhIdť8pĚ™óŢŁţýßQöń™„X'ůžűîuíŸůäSéŮłť”/_V‚áüůóŇĽKCyť?ĆëOPLb›={Ž ňŽ­ĄÉ0:őěŮËPřĹ̀‚ąyýú1UŽAIĽ/ gހ’´Ył7Uěä86”¸9r¸+"ß(óŚFZ“ß˙]ű66(´ÓĽK+Ná^ĎÝäË/żR‡›ŠS'Šâmƒńĺúć¨Q‡´/ž˙ţHKŁ4”ÇÝşőTw Tņű Ăž­O=ő¤í9˘Cá=a¤ŻcŹG/ÖĎęţ†(ěz™¨x –.‚aíçCťăă3ýF `Ŕ=ëŐŤŹ_żÁőZ´‚{*ŕ?ř`š*YŰ´i݆#“?ţřCŰŇťˇlŮÜö7Đ^¸_îý>|X7”aB!8•ř˘Gˇ\Ů‡ě€ x˙ýą*űÜŻ ÷úO—.b8k…”Bť˘/Ą đ{îσ Q…6@61Ťň^vrýŒ0¸ 6((Ł”“@śA {ÇYl0ěwíÚY*T(ë3čӐÉȐĺ~ďd;6Ü{ÎúöíăŐȇséÔŠ‹>ß܁\ÄśfÍZ5úúzF؁gfçÎÝ]s]ČPí6oŢŹÁwFŽ|ßö}§ÚĆסßî§ăÁČNl0|>űŹsv;nÇgý:wZw0o5jŒX;uęŕ÷ńü‘sNĘU2[ślĺ*űŕ† 2fѢ§v|'(§$Ěmý™ßÂAóH%‹ľá׊ű‰űęÎĽKŞsžíǧH(ĎG§úŸSóxoŔy ówO9†öÆ{ VŞTI ÁĚ͂ÁÉńéČ,ŠńăŢöî׍űęÍI/Üs+§ćßŔ)™NŮŕĐ0hĐ`ăŮÓŠĚü Ź?ýtŠ1އ{-ĹęœÇé9 !„ř‡„ż)\¸°NLFö—dɒ a۸sýúÍE˘\âď<ŽťGR ˆˆ^šrľ*a\‚7<"m°ŔG}[Ă8ę|‡bÇŽ]7•ŞeËfœ„‘(MšÔŞĚB(X`˜5Ł9’'OŚQˇ;ś ŒžÍš5–1cĆŤŇ ŠôŰ}űöéű0ĺÎý˜$Dc˘!ĄĚC[Äu™d°1 ŔP „Ë؇qtţ|t„XŠRĎť^GÔ3,  x ĽŢ5ăMš4We ÂE‹6ŽŻ¤FFAa gŠ={öjÔ!”ˇ&ŒąÍ܀¨ťŢ˝Ł•ˇ Ô×,;PA‰,ď˝7Z’$IŞÎ(Qƒű CäŇĽËľŻÂ@ G 3jҊőë׍ŠDÁ˘Œ"őp/VŽ\ĽJĂ>}úFĎÄ~EťsőęUm(."8ᨁ=D*!2 Ć'(Ž)5cĆ´€l ÜěĐĄłÄ23ÔŹYMŁrŃţˆPC$4’0Úĺʕ˕ŮÁ(›á¸ňűď7¤cÇvÉ$&Mš˘í %"d"k=A´œúEëE”'JÓ@ŠăŔŮÎ idÖŹŐqŻtéçĺŢ{ď•ożý^3ąŕž˝űî}Ž`l!’QÎ)SŚŇŇ>‹/V%)žPđ{^Œy­ZľŃˆ9C ÁPHÂ(‡TçpźAty÷î=eÁ‚šśĎňožůFŰ ŃgpÂ=ş|ů˛f“Aä- 0ýú Đc˜Qax&#BN?ˆ˜C„Ľƒ"ĆŇŮłçtżjŐĘśŽž€ÂŮ*V,Żí†ëÜ´iłž;”ÜÓŚÍ4ÎcˇöŒë˘E‹čb÷îď4Ęň~Ě3ŹÎý´EΜ9ô([„ţö„ąĎ(o†(”žƒ!}šZľ*Žű’2ĺÍĚkˆĚÄ3 ŔYc;GŽěšă׋ß0ŕ=ܟp׾k'uŘ6l¤L™2AďĆ î/@?ś2ćř’#Ÿ}śAű$Âŕ 9{öLWDu|ٰůLĂ˝yá…Ą šţ ‡ 8˙˘ßc.Žžädş™ĺ ŤŐŤW7Œ(O¨'ú""aÄÁÚc†K;fÎüŔřÍÝňęŤő´}‘ŃÇŔ؊–˝gŒó¨ŃЁCFŤVíTŹYłçZEŁĹ1Ć?˙<ÚŮŤ×Ű:Î}ó‚óÚěĹkjŚ1Če÷R N´ Öo˝Ő[űb´ŹŠ YoLYg,ÚçŇĽ‹,ˇăł çńć›mTdjAV0ô9̐…Ńďcǎ÷ëxţČ9'ĺ*äK—.ÝőŢ!kdô¸Ž şŰľë¤ň+kGŒ“ßŐg8ú‰]ƅ!C†ťœ+áë~ôŃl:oDŸƒĄČČâ áůčT˙sroÇňĺ+4ŔěŐW_ŃLč{{öěŃą ‡•ž}űr,›Îí&˜šœ`Ç˝Ÿ2ešžÖşuKɟ?żî#Ç;NŽOOŞTФý óƒ–-Ł3HÂażyófşo—e먼K—ϕĚÜą’뺥3Â=ĹuCŢΛ÷ĄĽóL¸çVNÎż’iᖍx&ci>“1ż+R¤ˆĘ68K!8ż‡ܛ÷Ţł/ŸƜÇé9 !„Č€„żÁD‹, 0ń~ńŗ5]&–ĄDžß °mnƒ™I0éĂs%@)Ň˝{cŐPU0Fć˗WĽPƒşu_Q…T¸8rä¨k˙™gž 䍺Ŕ„ŃB0~ăQŕ`!ˆ&”ڏ^drA$ŒUdčíB(m‚ž˛uëvU L˜0ٕŠß¸ŒşqŒ”EęŘą‹FwíÚCł; Ý:”Šqጆ4Ů&Čú.ŕ,``pw"ňĘtfZž|UH#GŽRĽ,Ć/ú–gj^8A ’ ĘK8čŔóĘ+u,…(gœŰˆC]™˜@Ő ŁŃëj ‡B Š(´Ü(!Ňźů›.%0”`v Z8W@áhG÷ąE:œ]`$‚1pčĐá˙7BůŸŠeĈ÷\FQ(ĺ<Ç 2FÁšeĐ ĄŞL|˙ýц!h€ř łH# X}÷݁1ä$RőBšYŻ^•Ąˆ*ófĂŃkćĚéZ.Ě$:+Â3†Ąă5B!Œ´ĺî DȖ#Fę> ŚŁGŠĄţö⋵¤mێ>ŁqýJžúő_ŐlG&p,ĸEäúś’%‹ŤcŠ{ę^œËkŻ5T-Œ4žF9ś Üfiwŕh§2(˙Ąü\ˇn˝mö/(đ!?Ű´yÓőÚó/ř`tÁo!j%LŞUŤěĘŞšƒŢ¸Ą8gmذIǀťçă'˘ÖLŁ.Ž×c‚6GCůŒ>„ţěyŽ(ŇŃמA 2îéŁK•*iȝ—Œ{ŮV#mQ.ml×WatDÄ{‡m-Jđ{fy2D7:(FTatŞĺ*ĆďľÖű7tč05FšË§ÁüŤRĽ ÚˇˆČgœÇرё€0–wčĐÎňťţĘD¤˘/˝óÎ ć`Ř4+ “ z'F†´ʃŔĄ ňdđŕĄ*§ĚĎŔXdfž@_™8qlŒvÁ•*U” ŢĐy ž%őë׳u,ÂřĂýwwŽƒž-HŠ,I˜×ŕŮ•EÎYŚ!ϋ^˝zƐ‹UŞTÖű 9a–"ó ŃçGa9/s˘m` 2$:rNixžşg˝Ă'RݎnÝŢUR,nÇgœ8Lăvˇnc=-ccŐü‘sNĘU8zb~Ûť~ăň †bŒń\…Q1”š˘ 2*bdG7žƒk]sČ.]:Z–6ŜF\'¤ącGĹHY2œ˜'ÂH‹ąí áůčT˙sroJőč§M›ăţáş (`ĚťŤÁz€pŹ3ƒ™›a˝06Mŕb•}Îéńé Ö<Řđ\0SŻLxÍ˝ýú˝ăٌçÖTkÖŹÓš1Ž%O<Ż)Üs+'çßNÉ´pËFČ<“‘é˝÷†Ç*ó‡18`Ŕťúü‡“”ˇ5m(s§ç4„B"ƒđ„ÓBnI0ůĂÂ?(!01‡bşaĂ7 eSU]0@ ížš]ˆôś­`Á˘>7D;„X4xdGEe‘řĘžŠSŁkbÂŕƒč’p'3zířńăŞTqiÜřu '.œ×żX0şG\ů‹Yş‹NĎt§î”*U.V)_ž˛F6ŕşŃ ĚŃHH':zf…ĎÍNˇ äHŸ>˝t‘XfZi” W”¸˘`ÁŞĐ0ÓCC9ĺÚŤqăfꐂڼáÂÝ1ŕ—_ÂSşŃDˆžPvš;Žŕţ™f˘Óť–`@ćDŠ(-=•˛Ď víZkÄ@­jo …ź§bŠĘňĺËťţă¸g”dę̚>üŁíoŔČÔˇooKƒá¨7  p†Qß_ÜŰ™QěÄP ˘­ .¨ °@ŔçW­Zf(Ţúéř´rBƒÎLőž˙AŻÇƒ\p7`™ }ÍRRĹP˛ş§ŠmѢ™ĽQ}Žoß^!×(6ÁxmѢiŹ×a Ä3ޤmŰ6ą~ĘFłážB{ľdÉ"U@{*wMŕźj:ŰxkWd jŢź‰ĺ{ř3Ľ˝ťă%Ŕ}3Ż6lŘ+•?@Ţp Ľć5ú Uöł˙Ź )Päšm~čБXű3Ăę<1Gx÷ÝhG<óĄŹś÷žmŰVśFuó÷’$š_ěg™˛9**‹ahĄűŚ’>Ü´mŰZkvţĘ9ŕ„\˜7Ů_Ŕ™Ń40#SŠLž°3>üptmay­ŒrŔ={ŇÔ{‚ ˆ„ľŃ[wß­€÷ÖŽČÄd—} ÷ÎTʢœ'ˆČւ BžŔiĘŹ×\ľjU ť 0~@™rĺĘaű,7ŰÓł-0>űě3݇AÝ[t&Ć,Ć#زe›íó mj?<Áď™ă´L™2ZFβe˸¸B)Eć/hK8ü<ëQŕzlE rÄý}”áˆkŕœN€ëÁłÍĚ'Ož MšźKvAŢÂČŕ-÷ž{n‡ĚTâV S‚îܬƟ7öîݧYŸŽŐ[†5ƒsËźy 5ýŚ•ĂI0 {i@ťçžđ8=™NPBöx‚gjU#­řęŐŤő`§Řˇă‡˘3_`ŹĂQ}Í3ŠŔ gĺH‘4ŠŠUSÉć‰űů{sŠq/ŃbĆRďßżß8ןÄ_ĚŹ0ˆŮ)ç׉~ ÇBÔĘ>sćœنó…ů“ŠRyw˘Dťž8ůۉ°TŠçeĈQŞp_šreŹZÖx Ŕ‰ąxqßóo$Kfo ¤=MGVDĚíd-ď ć&pA›Ÿ:uÚҐ|˙ýöĎ+üžiTF]nor(úX‰őŮxěX`˘`Áü ÷͘ŁuëÖĹv~ˆA[Ą?áúÍ4ĎqÉáĂ7Łłí˘0ƒFó<ŞN)gϞÓg Q&ÁŽ?÷Ěj7nü.`:’ęźšˆű ă°7źők;mł?Á1їńů™gžŃšíNpŤ?›Nœˆ–¸Ď?žGź˙Ž%}É9§ĺ*ÚŃ4*Űán(FŰzspđ‡I“Ćë_<ăĐ?˙|‹–Ű€üęÜ9Z_,7&čďć=ĆýňîJ |ůe`ŮiʈôçŁSýĎéyź/żü˘–ĆCi”üC•B… çö¤Ď>čĄĚÍ|ŽńéŚs‹ýűčóÄS–Ć×Ü*”ůˇS2-Žeăľk×ôš~ňä)ăšĎéß;v¸Ţǜ'sB!‘,!!c:&€Řn ƒUŤVËŹYę¤őň0 ˝ӜERŰ úŁrĺJNp˝HW‹lqáXŕ 1k׎%5kÖ*ŤC0Ŕ9)ͨÔđŽ ĚX"{ eB.^ŒŽDĂýK•Ęţť¸ˇvŠbÔE\¤â†Ân̘ńŇľk'‰TrĺĘ%3fL‘PqşM°ĐÇçҔC‘ˆ:먊Č')‘˘x=ƒ †¤J…ŇĆ”Ńhßž“Ěœ9Ő§ÂŢ~ůĺf$ "XŠ23u0fŸ}śŃňsŚ<‚3ÉśmŰ ƒm1 sź‚_ôßAĎłţx‘œ>}ZهSĽňí™|;ŰœH˝ß A$œG$?˙Í:0 â`‡ Ó3>ţ| P\”+WZ ˘ËdœŇ’`ŊUZ*̟?Ç6ĹŠťÂ#Bě!á­M]ýcŢ6ňiëÖ­˙˙­GeŕŔţjhˇŠżzőŞ„Óéj˙ţ–iŕÝAZűHňjŔ /ÔŇHZ;ĺn¸ŰŐÄĚPńŒTŕ0^8p@_ŤV-˛łW@Ś%O­(†źó…ůˆ},PéˆHy€˛ @äČáĂGÔdÍłţwâÄ7ç:ޜʐž3!ËY¨çzť<›ĚßÁ}6łďŮákÎáᐍ(!‡,Ţ@ŚoĽŹ6l¤źýv?ż2ĎüńÇ͈ńűîťĎľë6×`žî ŕÉ8uęń9‡ńrU‘Ń4řŽZľJq=ď‰ âbnĺôüŰ)™Nوď™ĎânÝşhŮdŤŒ ×Ž]—psB!q,!~:qťv}ĽŰźy }*Œ`HܸqŁî#˘%$nUŘ6$žiҤ‘ţ…"Q 0 yl8WěÝ˝x/T¨€äɓ[BĹ]áä^Ő=ÂŇÎăćŔƒş¨ž¸,7NěÚÄ Pţ÷ Íž}{ÇH+ eXßž˝\ĘĎĄC‡yuR •%Šť~îÜyrâÄ ŻŸÇâĈ÷\˙/]úůXŸÁ˝…|üâ‹/5RĘ(aˆąÝ DŁ 8Čĺ´Ń¨Ńëâ4˗ß<_ÔľöĹóϗtÝĎeËVJ ”.]Úe@™7o×ĎBÁűůç[âÝHPęĆtBąbţü….C`ɒ%Ĺ_Prˌvš3gŽ×ĎöîýśÔŞő’ IĂ ĽȜů۔üHŐîËŘ*› dŔ˛Ož”˙ńÍożÝpí{ăP@†[ái‚ŹXčKč7›7G;˜A_ޜďqŸŕźK•*ĽűxĆzs´Ä8üüóhĂlѢ…ƒrfÄ3˘D‰člY8–ˇ¨?86}ňɧę˜Šiš‘#îď—/łÄ2˜x3:şgT dÁ2Ł/^˘éŢíX´čŁ_W‘ˇŢęc^hĘ4§źÍľP›=>ɝű158_×j:ІŠmS˘Dté/œ/ĘĂŮGÓů3nˇg“{†>3+žpä]˛dŠ„J¸äę‚ m߃łéęŐŃY °vŠŠĘ"đă?j9ü†ˇ9@ ,wÇ-”ÜÄ58ÁqĆŒKRűÇ'NÝG§ú_\ĚăŻ\š"ë×o0ÖgŁl׌ČPhf披yV ¸Ë4ŤšC\Î{âŞ,X\Ě­Â1˙vJŚ…K6şĎź• ő7°$XâcNC!$n ƒ!Ä/P¢TŠ’şěŘ1éŐŤ.ŢŹ8uꔴisłŽ_5äV†mCâ›"E ťĘ( 2ĄQŁĆŞŔˇ2"bąŢŁÇ[ňá‡sô˙P"wéŇIB‹R3e2˘é2dČŕzŻ@›€łgϑŁGĹúţ”)Ó\e& .ä5EdBÁ[›˜ řŽ\źxI÷;vl'?üpŹĎ@‘Đśm+ÝżzőšË!# Šĺĺ—_Ň}DW˝ůfŮž}‡ĺgqżPĂՌÔB-ÓjŐŞĆú\͚Ő]÷sذáŞ,´ýőŁ>–ńă'é˙á„ŕiŔň8~ Őwƒ\ *d—pO‰ěP,öŮgşűűďűü{ŋŐ}”Aş^wîžűf?Oĺœtʔ‰V("c’1r k×îŇšs7Š]ťNź+ŔádÓťw?K%12¸Ě™3O÷Ó§O'ŊA›éÔCՌX~néŇe†LÜŹírń⅀äKÌŃbčç—/_Žő>"v1ŠńN`6 ¸“'OłŒ„ĂÖŰo÷řšč=”Áu '­ŸUg´>|\žT°`tÉ-Č(SN•,YÜ2Ň-ҨSç%×sŽ–îé°MĐ?şwďĽňí˙Ę+u$Xđ{wß}ˇ“şvíi™•Átć|°e*mDĆĄĆ+Œč‡PB6ć˗×č›iľÍNúYśoßîr˛:ľW6;–/_n;Ęő\7jAŁŽ)Rg›ŽlĆłöíŰŘ\ođň÷ďʕŤŽßđ—Š+¸Ę˝ †{íă‡Îčڟ6mşT¨PŢPČ>č2ćuîÜQŁ qC‡ŽP…”ľř Ć kPښĺXš7oęľVt\€žÝgëi_Ζ-›! ŽkťŻ^˝VűO]ťvŽ‘fß:th§}}Ę~ČČM/^ź¨ÎfxödœjÓŚu ‡7њaHاýéľ×^7 ľôů~ ç˜%K–Š"<**ʕv7ŔČßącUšĂp†~‹~§!´ŮáÇU)ƒ*Œ#pVŠT 8Çx‘÷ŚI“Z†Ď"Čôďe˖i$-dŽűX'UŤVŐgč–-ŰÜ^Ť" ¤KĆsŠáŃ_yuľŤKΜ9ôdöS^Ąü”?av<úh6Cś41 Čă ňRŻŢkFŹ¨Ů°'žOĎaŐŞľ˛tĘgČŐęŐŤĹ8"űôéŤc ѧŸM›6–řŔ—RĎ^2e ĂxŮÍň8/źPCď íÚuÔk~ňÉ'\iĺaŽąsüä“%:FŕPhÎĺv|6Ą/׍×@×ďż?V€K•z^׸?‹/ÓkŜ#ŁŁNËUŹË0W0ŕ]íťĹ‹ÓLˆ°_´hąËx‹c }  ÓÚľkuţŽ1ŮPŞTIyěą\z/ §€Ě@żo˝Ő#Ö2 †@˙qnuëÖ׹€š;ä ĆÖΐ… Đ1É8uęNĚăQŠKऌŹ%Đ7A‡ƒš4d ÎĎUĚłđ\C)Pߜc-Yr3‚k´H#WޜzÍ0ŽO:]ł;`Mˆ ™@\Í{đŰřMčúPŽóŹcđœG‹“81ˇň†Óóo§dZ8e#J}áúp 8žbŒ+VLĺt6ŰśmS†@‘pĎyâzNC!$n ƒ!Äo0ń?~Œaب k,Ę!ŒÍ ¤H…ą$Ž"˙0iöÇŰúůçKÄr°@ć €Éw ÎŃßť5ÚLŸ>%,fƒ H¤€E 6_ŔŘ §ÚJˆĄCŤřPH@Ąân°vĆňˇŢęîw4h¨ĎĎ`ю, Č@á Œ&ˆ4ÓÉBqä ˛iôďßײ#ą˙„Ň&ǏŸQŁĆč>ŇEÂAĆ={vWE Úqܸ‰ÚQQY\ď#CŽÉJA)…ž„Ź"łf}¨†(8ěŇ çÍűœ*h­J ˜ Ć+ęĘN™2]ĺ# ŘŹH•*ĽaœhëÓaĘz_r } ż Eą]Š×Pä˙ʕîĺAüĎśQ @~—âjőęŐňć›Í]ĽYLPźÂ˜ƒ х¨ą}Mɍvœhô™ˇÔqFAŤH[Î2P6Ć7Č؁{Ĺú•'_˝ző´”žŔstҤń飔ƒVuí3fĚh(ÄGčó:`ĚÜłgŸĘ.ÜDšƒ~…űwöěů°+ćĐnÜ莲F4k=Ł˝íý8’,@ǎ퍱wB•ÄčÇfÉ*ČN<â:Ž,`ě„ÂNą2ň-ĄŁĆŇđá臭ľŠ°…|Çó¸aĂ×$TęŐŤŤF;Ü#0ŕDeEŽ9dđŕwbĽĺţă?c”Ő‹Ď4ĺţĘŤ‡ ¤ŽVźôRm]ŔŮĆ1Dť§˝†Q ˛ŽaĂ7$đ<@ô*Ć?ćřˆRö÷ćwúϔ‚1^‡#FϞÝÔq”ĂćĆBٲe5j4>‘rŽ™0naÓ;w˝{ż%:řžGůŠśA6/Ó‹9/Œ|ŘÜÁ„A'X‹ŰńŮ™“çž{ÖhǁAeňĂw† dȆĄ˛bĹ*íĂř‹ÍŹ=ŕ0ŕ)L°vcÖkď3gΊń>˛Ě Đ/ŢK ů‹÷ŃŠţçÄ<V¸8d S ˜;wśŽ qö3ÎłŤŽľěŽÇąÖ­[Şn,ŇHš4Š4jÔPáĂ;(R¤qÝ7×ßq5ďiٲš´iÓ^×ŮŚŹ…SËÚľŤĎşęÜĘNÎż’iᔍGC†źkôőś:ż‡C6wđlęׯÔŻßPÂI\Ďi!„Ä t° „źk'N§űđş…ňéśQĎƓ4iĐÉ/-ĄDĆĹ%ׯ_רgŁW°ÜŠmă$Xș d‰ĆÉvÁ˛qăFɈ¨xDľ@Š ĺ ”(ˆ xüńţřSŮšó Ăř~ZŁ,|0:{äŒČNţ^á…ő>"júěŮ3ę(ŹFˆ@E˝y<'ŹâpʃÜěنć,ňꍯH|b%G Ÿáô—)Ó#Ćóź’F{fŽr×ůÎ;4ş{ٲaü×_Ť,.[ś´fH’$‰„ ÎN˛ŐŤWŐlX{÷î×g4~Îd˜Sáˇđ<´{ě1-ĎôŐW_k–ôDĎVŤVEłŒĄ"D,O˜0V "(÷„ˆN<1_,Y˛„ńliŕ¨ĂşSmĂ_ž|ůdáő8xFCV㙄Lčfə`¸]ŸM+0$ňÉb&?}ú”üý÷?ÚďŤV­¤m Ç'qRŽbM0cĆT-´eË•1—ˆĆŻV­šÎWB1ؚŤhd6Ŕ˝8ţœÜ¸ńťĘ28ącÜ ;š7Y„sčÖ­łĘo8‰8đƒŽô/č3mÇJ(Ŕ‰űčT˙ u(~8Ŕ kěď˝÷]WEEeŃ÷ŃĎŚOŸlȘU˛~ýgZŞĆzdAŔőbKq=Ď 8D çG-’#GŽčőšŮ(܉‹yŽƒçĐôé3TLJů*ĆœŰuÜö‡PćVžpzţí”L §l̞ýQăŮôĄ>×áźÇTŕ:qÜW^yٲÜZ8ˆë9 !„đăŻĆč?߻ÏżwŘüßÜîtűkn‰ţ˙Z" ďÁ"qçŸţŰőBü ŠFšč>źŔK”(.ÄyÚˇď¨ĆH¤5kşhŘ.ţÁvň ŒTcÌWĺĂʕK҉ćVƒňŸâ˘%QÎ rtѢ…^3óBH(Ŕ°jFfϙ3K˛frëČid:€‘wÁ‚9B! §de#!„ÜŢÜsĎݨľ…şÓWţ˙÷íż˙˙ý×műĎíŻç&6˙÷ö×sßoď)Îć˛"„ČŃŁÇô/˘˙R*脆™ ”,!ˇ"l˙`;ůŃO WŽ\tŽđĘBˆ ˘ŮąäÍű,+!Aƒht_>üŁkŸň†B!„Bt° „Üö -@:U'Ňö’Ř Rƒ‚i 7aťřŰÉ?LYĆ6ňĘBˆ œ+6ÔŹYS!$PŽ^˝Şe9jÖŹ-'NÖTőV8pPK{”Ö@Ý{B!„B! ‡ť„BnsPw,X@Hx8qâ' Mœ8ą<őԓB˘aťřŰÉ?LgÔĄ%ţAůOČí ęŸ˙ő×ßZť|úô™úZTT””(QL!$P덯ž–ţůGeʎ_HĺĘ$sćĚZzčěŮs˛}űvů쳍ú™ťîşKš7o*„B!„Bt° „Üö˜Ľh` ǎE~Ÿ{îšűDĂvńś“o.^ź(WŻ^“dɒJž<š…řĺ?!ˇ7C‡—sçÎťţÚŻ_5„BH  ĹŘąŁ¤gĎŢňÍ7ťe˙ţýşY‘ýƒňÔSOJŊĺĺ‰'÷zŒÖ­ŰĘŽ]_IŚL™ 99G!ń˕+W¤QŁ&ríÚuI”(‘Ěš5C˛f’Ű_˛ľsçn˛{÷ˇşß­[gŠQŁşßß%äVέZľŐýšsçË'Ÿ|¤ňƒÄ/NĚąřLH¸|űíwŇŹYK݇ŠlŮŇiP×™Ä÷}ńŐw#šß°OBHđ°D!„Äőëż. •ŚM[Č­ÎéÓ§]ű'Ož’°˜1ă™7ožËš"uęT’2e )UŞT ‡‘‘#ß×>íŸţB‰/ ĎfΜ%ľj˝$cÌWĺŃ/żü*˙ýˇ*ŕ9"‹}"Mš4Wĺ>o!áĹßy‚Ż94ŒiÇÇářľÇ}ŽţÓO§$Ą fŸ™0a’,îcá…‹ňűďż š5HHτŰIGtŤ@]WÜłiÓf׳׎/-?é÷%’Ϗ}šB‚‡,!„8N“&o¨˘ęƍߥC‡śB}ôąţM’ä~?~Źäȑ]˙˙ß˙ !„$4ţúë/yë­Ţ†rîs×kéÓ§“'Ÿ|B3WŔÉâđáĂňÍ7ťUČÉ7Ţh*ŁF”ěŮBHd“1cFiٲšŹ\šZňć}N *(ĚîÝťsťI†ěK+őęŐBnW*T(ŻĎýƒIÝş/ëž$Bn řL ᄺŽČ$ŇďK$Ÿű4!„,!„8ÎĂ?,cÌ’đ¸qă†\şô‹î#c…é\î¸ă!„„ưa#]ΊRĽ”Ν;IɒĹĺÎ;c&óťpႌ=VkĐBvîÜU>ř`ş$Ož\!‘ÍkŻ˝Şń 46"rĎ=÷HŸ>˝„Üšđ™@Âu]‘I¤ß—H>?öiB –!„Bˆ Dr›¤I“Z!$!łsç˛xńÝϐ!ƒL›6EJ•*Ëš<đŔҡoŠ[÷ý˙™3gećĚŮB!„B!„B!&Ě`A Š­[ˇÉŇĽËdϞ˝ň믗ĺţűKślŮ4"´jŐ*Ć˙ďńyÔ4E}ɟ~úI'N,sć| †OŽ]ťf6ęËšsç%uęTĆçfIʔ)ő˝ożýNš5kŠűăƍ–gžyZVŹX)Ÿ~şDŽ=*˙üóŻ<řŕƒ’?>ŠS§śĺń­~oůň˛nÝgZwľ:ÓĽK'9sf—š5kČsĎ=kű]ÔhGqœÇřńcdűö2wî<9pŕ \šrUzőę!™3g–ƍ›ĹřŢwß}ŻľMÖŽ])ɒ%“@¸xń˘,Y˛LóŘącšĘ Qš<ňˆ<˙| ŠV­ŞFĺXQ¸pq­EߏYyýő˛{÷ˇ2ţŮż˙€Fě˘ÝóćÍ+őę˝"QQY$ÜďU˙ţ}ĽlŮҖďýžśń’%Kĺ“O˘ďcâÄ÷idݛoś´iÓęçUaţü…zŸĐ‡î˝÷ɑ#‡ÔŽý‚”(Q\ÂŐV&żýö›žăš5ëĺÔŠ“ňÇj˙ŞPĄœŃ_ëhéŒâĹKég‘ŽÔ.ZćĎ?˙”e˖÷|˝9rÄ8î I‘"šäɓ[*VŹh\K1KŁ_ |˙ýY´čٷ={VÇg† 㳘^oŠ)b|ăŘłŸ‚3>ĐÍdúô)ňŘcšÄh \Ť;EŠ”píüŽí}űă?Œ1˝XVŽ\cÜëÚ™2e–J•Ęë˜ôŐ>álcĆ|ĺʕb|çŇĽK˛páDzeË69yň¤–€÷ŮgŸ‘ZľjHî܏Ůţž“cŽ3h´Í‰'äňĺ+’&Mă^“FÄęŢTţÇWű™ 3žŸ}śŃó§äŻżţ–‡zHŞTŠ(/˝T[BĹź.”›˜4iźžçÔŠÓŐ°őę5Ł˙fR9QšrE×wđŔľC⚃k½hĐŕUC>Ľňú{hdcXştŠ!ÓN¨ŒC_x䑌Ć8Š$eʔ’ťďžŰçyýő7ZčŔ4sCҤI´]_˝Ąq?łŠż>|DďŃW_}m<ťĎÉ]wÝĽQ0 ä7dt-IŸ>˝Ä'“&MŐż÷}úźeČÂ}~çÍ7›ËçŸoŃçÍ'Ÿ|*-Z4Őë˛ăüůóĆ|ežöiÔůFyĽ\šr×˙˘ĎHńHyžă87n6ĆʧĆy׹ď.\XŢxŁĄĘ‹7Ţh&{÷î5ć0ůĺ˝÷FŘ+Xዸž? o/^źTSČcŽ9Šąš#ÇŁ*ŤŠ+ęó<'N'O<ń¸fEÁšš÷óU<po<3¤ź˙ţXŁ?Íý˙ţH×zĎo´5ć×˗/¸}Ń1†ˇmC˙=mĚŮ˙Đ>™ćk. ‚yîú3O@Ÿ dmĘbČÜ ćÄřžů^ž|Ď}g”1—;eČŕ*§1O‚üówĚ8_͛ˇ@žřb—ŽůťîJdŒą(ý>ćźĎíŰwŇĎN™2Q<XľúĆ ›´˙â9˜,YRyôŃlRž|9CžWtdNčÉôé3~9Y÷Ń_Đ΁đĺ—_I‡őü‘†„1:.Ü Ç\ěƒfëż 1^sŸ§fϞ]f͚ë{NŹőœę7á|^šĎƒ† _“ć͛júYłf2{ŸŽ‘ŃńŹ€<XťŹZľFűŕĄC‡ô3¸Ÿ˜ocn”(Q"ŰßÂý]ľjľŃw7ß=Źr}÷Á3גOĺŤ]żňœ ţüóí“;wî”_~ůŐX÷§0ÖϙŒg_5u†´;óz7n¤ž~8G×@čoxäΝKď d™ŻvŤQŁştëÖŮň\ş˙¸xFc}†űďăÜ4xM×WcÇNĐ{†gţć͟I¸pâŮĎ`ŹŚNa<ŁśĎŤK~÷oĎĎöf\š˛˛lŰśÍ*k-úTĺúJ˘DökXŤľˇ:"ŠĚsÇSŸ˝&ĎdÜăň 5cÉ}O<×+Xk @V—*UR烞t0vxˇî4mÚBŰĎçšsgY~ć‡é}ĂýÇ9\ć^(„žŕ‰7]—;ĄÜ‹PúW8ˆŻőJťvdǎ/bźÖşu;×ţË/żd̡Účžż÷ĹÁĘH_řs~Ą<_MÂѧ#uÍI!‘,! ߀ď†ću1^‡RPlsçΗwßĂ{ß}÷IďŢ=u҆…ö AC´śš'P*ĂštíÚŮĺ\aŀďę‚Ĺ,îąÁ ŇłgwCAYÖöűXluëÖĂUÁ‹lXaąĐŤWOŸĘjL.GŽ|_â,Ş ,ׯ˙ău´6L¤?ýtŠŃžĂ˝NžĄXƒRr„I1^‡Ň8Z)şNŢy§żĄđ.,á ď^˝úČúő\ŻE/*ÖЇ}†2uš‚Ű´iŻ÷ÄFx(xąÁ™N V8ŃVGӅÝŮłç<^?j(' ž2lŘ`ń:uS%Ś;PmŢźE77 čk,0‚Ëń×_F‰az˙܁ƒú9)PP÷ë÷vDڇ†1şM›ŞŒwç ň÷Ţnk<Ž‹66ńgĚÀ ůčęŘpŸ ”…RŔ›R$Ôą ĹdçÎÝľ ݁Q׹yóf5ú"XůoE\ľ”Ů(óŕ)çŃÇFŁJňN:ˆŕ>AŮśmuĘr˙­ţýrëwŠUŤŚĚœ9Ke‡ç5͛7ßxɓ'Ř:߼KC™ą?Ćëč Ř HĆ6lĽň@îBN@)îÎĽKęsădřđ!â8g<ˇĄ(1A?ÁÄśpáGĆůvŠá\—@~›ý˝§Ÿ~ĘŻďAY_ż~]­Ý N:­Ę|+ XjŰś}Œ~ŠgŒŐŘLc—‘ň<‡Ňś[ˇžúLőü>”ë藾pRFř"œó´' ]prpďŰŔ”?P BůˆŒ'Ţä7žË:uŃžŕ”ÓŘÖŹYŤNĂîcžZľ*.‹•+Wyu°€C 5 TŠ’;WlŢüšźýv˙2  ˙A`{ĺ•:Foeůý¸|î:qkŐ)˘K—î:72ü3ÇlŁF ŁLcŰc`.ňöŰýb9ˆ`] ŠígŸ}Zź>ŮśmGíKîŔŔ 9Žmůň•*‹ƒuH xĆuîÜMŻýÁÓk:iO#[$ő §ÖzNô›¸|^âXÇżă5Č<´ÇÔŠ“ôyÖłg/ůüó­1>ƒó5ęŢ#8wY͡axÂó˛Çô]l˜Ÿŕš1tč`yęŠ'Ĺ0ľlŮJç˙&ćóc`Ѣ§ŐŮĘW™.<礲ŰHlxÎÂŹ2Ôűo>SfĎţ0Ćëř>ž%¸ƒ ”păäł-Ükx÷ó‚‘ü…‹Ž×‚é#v85.á˜ŃŹŮ›şśrÇ\ĂnܸÉX÷ ÷ęŹëNČ<;}8pŕ€np0„ŽÁ&VŘ­WplĚmąÍž=W† yW˛gTâ 80`]ć9ĚöÂZ cĄTŠ’(NęăťÝJúGo8)#ƒÁ‰çk8ű4ˆ”5'!„Dt° „ Ś’ŢçŐŤWQ#źNU€E6&G06L›6Y#aL1ƒ´ŰP.ěÜšK‡î‹UDژŸŠË{j˜>}†.ŞáőmzÉ"Ze׎]:ĄÄ´OŸž5iĺa eô›ośŃE&ĆpÄț÷9]œcB‹ÂńăÇ5Ş ‹"DŘŘM ńyLÄĄńŚň裏ęÄĘ+D"Ϛ5C?Wż~Cý‹CD9›$I’Düă¸.L˜Íó.R¤ˆză<׏YŁJšĂ‡ŤAϛˇď7ß|Łmˆ…Œ~¸W—/_Öű‚¨f(@úőđżöî^Śň˙řQ"e6K Ľ˝ŹŮ"űž$dKe+)Kd_˛+QĘE˘˛oQŮľü*[(K{˘P)…˙ů|Ż3Ν{Ι33gćÎĺó~˝ć5ë{ć,Ď9Ďó|Ÿď#sćĚ kt{8ś#°˝ą-ŃhőŃGktš°^§L™.[ślŃĘ@™2ĽŰ=ÚńľeËٍĆt&"X#Ąü^Wˆř~ôсŽ3,#*T¨8˘yţüEÚa4z´ű|…Aߎ]{­€ŚK—NK… 4RßłhŃÝ'ŃĄŒFiŒŒdDGŻ^ĎKą?6lXOGš`´–5hÄěÖíim´7ƒ,0ZŇÜO;f4vuŇÇ÷ÜSĘč<;şćškŽö´8öq Œ=V˙/ ű…YéwA>räh=îjŐŞ)ŊÝ-]tĄlßžC÷GTčQyGfťÎĘx­cp;ćMhTAŁ"F<\xá…:Úű(Fî SmîÜw´ŹDĂ–÷É'ť8ţżhŽU”q;v•ožůFŸ*THËmdpŔw`”>Ňűôé§ßă&šň?5ÖĘ ”ófc8F\Ý{o-—ąO,\¸DGÄL˜0Qü€Ě}ű&uľjŐBG(aYçÍ{GÁąc_0ĘűŹ\éwęÖ­ŁŁ~Đšpáb]^4 8D;\ƒáŘÄ>Žß @š†Î-Œ*Z˝úŁŕS ţjÓŚqŽAhőüóŁçZ”‡Ř§P`ůąŢŃ8‚FsŒörƒsů‹/&­ť\šręčŠn¸ŢŘf'ő{PžŁÓîh8Äţo¸&0UŽ\9œ?ՑX¸šÁńŐťw_=Ç`›)RD÷ŮM›6ipÎ?h„Bgbp'y˘œĎń˙1Ű đˇ ÔŐ}Ó,#pž~öŮ~F9ü§ëúđŤŒđ"–×8F͎0ŒŤ[ˇŽŃy‹^żáťçÍ{O;^ĐŕŒßé6ÇűôéŻç-ŇźůƒRŠŇ˝Zţŕ;0J×½=`Ŕ`˝Î4(_Š-ލćřřmTścFƒ†ëŚWŻ>şĎ"ëJ“&čľ0ŽW'ázĺ ˛íŕŘĆşśŠćźëĺ:ýź†třőíŰOŻ°Ýnźą°–Y7nÔl7(ł0jű”ÝČRˇĎ>Ű7pÜVŻ^M×ÎMß|łWË{lŰÇ9.Ö÷Ot׆zŹ7œßyזčDAóúőחĎ>ŰS˛M=ńD7 ”G™?aÂx ˛°ŠĺľX­Z5ôxuşNĹČx+?ëzŃî7ń<_âzoÌ7´\C™ƒk¨Ď?˙Rł>˘ăxčĐçuq~Aů…Ńϗ]–]žţúc9ćk=űŽd†°ÂţŮącg-Óç6t°âzĺŽA0ČőŚž={ë9'kÖŹśË‰sp,ẝ1­riΜˇuů°]ť>%Żž:ÉqŰ “Á´8×<ôPKšůć›ud7˛sa› ČA˝(˙;w~\"íöGG”yNA֊† Ž0j×d8GŸ‹üćçš-–ç`Óß7ŽąžÓăe$>kżďź3_żŰË>âÄŻăç2\§ayťu몣¸Q‡E É+ŻźŞË‰ő‚ëAó˜˛Ö˝ý:żůUćšľ' ě^ž|…ž°ĎbĆśľ U_ÁČü¤ëŸ5ËČ´iSRœKâľpÜʏć͛jv”I[ˇnŐí…cż˙Ćńp­^{ĺçů'’ýËOŠ]_A€ځPžźúę}­S§ÇŒzUq}ŒěX~ńłŒ —ç×XîÓŚDŠs%X‘gčt1ÎíF 'E”×\ř÷‚F×Z=ňČĂĆwlÔßńă_˛eďъ.ÄĐŕšsç2.źşş. .ępÁ١ďłÉ–iÍŃ@ƒL¸ŕ1bԙ†Ď́ϠqŠ˙AZáAŁ:šŃ™k…‘.¨  á ˆbF㸝ƒŐŕ‘qăFŰFŸ›Qů¸Ç9žGŠ"\˜˘Ń#ůńŰŹĐůĚŘVč8D…ËéÂë/ÖĆ&4h#Ő)ŠŃč pD!7jÔPb•JŹk„3ţFśăˇš,#–Ő„N¤GĂ*˜R"¸qƏu…†3¸)ă[´H^‰Bِ!Ă5ş›1cĆic3öUDŒ§ÜCG+FšĄR˛}űvm ÇˆŃpŕw˜!hp6lH˛‘g5jT3Žę벍6 <Ôč4™Š™č¸1÷I4Š˜°ĎF˛Ż˘ŃPĄ3;NĐ`ĺ–nĐHŠL ֈ|ZUŠRYZˇ~XYlëvíNń]ńXÇŚPÇ<Ęt’'Ľ“ĚŠŮzŹS. ! x]ťvÓŃ hHF°YáÂ7ŘţżhŽU4›Á(Ł1JĆZf"˜ŁÍPŃśŽü ćGůďő‡cÓ Ž@úX¤‘ľÂń‹Zاü€]h =zD˛ÎĐzőę 0i§¨܂†`ëČ]L!Ňžýぎ'§ňČlŹDg2#Xá÷áˇŕ7a2d˜Žf˛ÂwŁÁŘ2a¸dUŞÜ§Ë‹óŘľƒtžćÔ8^GŒ–lô`RŞŘZFšŮéĚšx¤¸8uÇĘ×_ď <žăoŮ+Ća4!˜Ĺ:ŠĺöńaĂFčs”7Á‰r>GgŽŮЅk2d—°Ž€CądÉ2˝&ŠWáEŹŽp4Gm˘Qóĺ—'h°” Ű S7´jő°ŕœŇ˘ĹƒÚ™lŰLJ5Ř (+p­Š2 Ç ,`YÎ`ÎŒ–s%jX`ßđšĄĹ„†b”ł€qsę@yŠýĄmŰöú;—/_ž"Ŕ"šóŽ×ë?ŻĄ߁߉ŕkÇ>ü ( çěXÖŕŽRœOž~¤ˇč´FYoýL… ĺ5us§NOhCłtV˜ŁQ–#8Ëú{ąO㜌m‹Ŕ$Œösꤎ 0 ׏čTyńĹńśY’by-†s&n^ŽSýŽëEłßÄű|‰ YÔWPo1ĄÜC'7Fb˝ă†rpđŕÉŽšF×+­ľŒF§pgÎ8—€™&Ü ĺŚnĂţ‹ßňţűŤR\{™pţDý‹8W™P>b[!Ë‚ť°Ź¸ÎC˜¤)G@(ĘjëzĹšżYŰ}‘Š×8Ö˙ĺU4ŰY:fÎLšžÇĚĉ/$;§ŕŠ[ˇśnlťXńűÜË:ź e 2ß`44ĘW+\g Ř çÇPűˆ?KüŽŻžÚeÔšŚ&D€ő|×]wHăĆMľěÄő2 |´Ö˝ý8żůUćyiOŔô ŒŔo>|„NĽbýŒ×ú ޑљŒ6Á!CIź˝őÖ\˝G]sʔW’Ő‡pź—(QÂ(ăÚę:E€pđďpâ÷ů'’ýËOŠ]_A˝ŹżpíčwćżËČpůq~Ő>m•uN"˘DŰIşˆčœňúëIeŒŞsJɎŃf,*gÁŠoQÉčׯ^HáÂëĺ—_Ő×1ŇĆülŻ^=BÎ7™-Ű%ҭۜˀ z3Ý$*ćÁˆŠ5SU>üđC)*<€ďĹ#ćý›oÎN‘fÍ ËžhGGڤŽÜ˜Đ9fœ™N°ۡogű.śÍ‹]d ˆTČěŇÇľisśBm`×řŠJFăĂîÝ_§x?Úu…(r4ćţ ŽT¨ž~ş›c:ŔčtĚ˝¨ŒŘÍľˆďéÚľS`4/ćŞ ×ŒIw˜—S€ŘĽőEĽŹkפ9*1R#P Öą]şCtŽŁQĐƒ†~Ťx­c+ˇcŢZĆŕsÖŕF%aÚ$łaN"=VQfa¤ ÁşgĎglËLtÜ9uޙü(˙­b˝ţĐpjvÚa§]?ö‰§žzÂq*H ]npă+ʇŞUĎvL˘Ă"8-:ś!˛1™öěů&ŮűÖ}óŻ:5ˆŕwšŰrăĆÍÚik…ĆHęüęk›Ÿ;>&n ˆő>xđŰÔĚ Đy¸ÁlЎ_Mšr ë×mĘąhtďţ¤í<Ô(łĚs”Ýy4QÎçłg'•…č4E‡¨]za4¨ŁcʍßeD(ąş~Ŕőç…ďéÔH]mm\5áZÖü¸Î4ç7śƒťLjX?ÖÎËĎ>ű,č÷Ý(KÜ`ňć:ÄčţpýđĂ÷z˛Ř\aB9;jÔp™?^ЉŠqŢőËOtąÍšP˛d‰Ŕz°;VpMˆŒ#€úƒÝHuě?([Ý:80mőÚA 9ʇŋ¤zpÎÇčLC˝ eÍřńc5ËJ°DÚ'bQ׋tż‰÷ů2OžÜŇĄCĘLoč 6Ë=čŇĽsŠ€&\+š×+(Ű0˘Ô ç“ ŢŃzFpç Ł›Í ;v|%npÝăđ€sŰ Ě ębvëehďŢ=ôw&]GPéöŸ3gŽfk´ŘSĐQhn˙XńűÜË:źFHWŽU0ĐŮq Ô>Ěďă#Ůí24âzÝćw ~ ~•y^Ú0ĹŽ_°ß#Ó˛Y˜ÂŠŻ`*]ş¤œŚóżÇŽ>T¨PAyő՗ßł8ŹŽčXœRs˙:×ڝř]F†ËókŹöiŤD¨s%X‘'˜îŔú¸qăFŽ ‡ÖŘß>F¨™čüĂHŽ7ŢHšk•4sÚ7Á섁ďf#ȇ~˜ě˝•+“*}¨0b¤™\đ=đ@#}Œ ‹Ó…>"„ , ń‚Î/§Y°6ţüţűoŽŸĂHG§´źhl7+|Ö9Oýć4b4x@‘"78F†_sMR­ÓďŒf]!}Ľ9my ű‘ľR ߃ 3~CăĆîű*€Qű÷Ż0: i&zn)EyoŚR\ąâ}I$n)‘b ŽĚĆc[…:ćW­Jj€C°WéŇĽ?‡÷ÍcŔŽŹ4EzŹ"e2F~ö ˇ4ÜhŔtâgůńX˜‹ÖÔ¸ńýŽß}˘víšâ4ňZ§9ąşęŞ+ŃčaéwMżýv8Ů{ŤV­4źš•GÁď[ƒ¨0ZĹĚ0€Ov+ŚŞUŤ8Ŕ`9Ěóę}÷Ýg\`˛vťíăąňĎ?'ôA~0˛B#—]Ă)ŕ˙™ĺF–ŮMÁ“Úçsœ;̑ô(#ÜEÝ2Yů]FxËëtĆĄŮmt\ŚLg;Ětžv0˛Ó‰™Ĺ‚ˇ Îăć9Š´>œâďÍěXßćš-yň$ĽäF– łC$öË/O™ş;Ţç]ż šőz"Řľ×&mŒŕG™ie–{¸îĂH'8+v—ăűćz‡÷Ţ[`ŰŠ‚:öX”[á@@Iǎ]ôZĺ:ZœŽ‹DÚ'üŽëEşß¤ĆůňÖ[oq,ƒŻź2) §NÓő™e#`ĘÍ`˜zĚ­óu§Œ“:MÜÎ[ŕVnY÷tVb ; q›Z×VX'đŃGE4*6šíżvíZ}ŒÎhť@6Ś Šő` ?ĎmąŽĂ›4¨çřÖWIÁ…nűH°X—îăL~vČZůQć…Óž€l!“'OŇŹ’Öŕ”pę+ö—ŃŁGĆ,Sj(šs'u ›YÄěŕX 5đ+˜ßçHíýë\jtăg‰hĎŻąÚ§­RťÎID”ˆ8Ey‚ "̋#;ÖhŮýűżľý ˘[×­Ű ;vě'žxJ_CCF5yáÖȸčCzc¤^^sd0:šB5d+v6Ľ7ćpľëHšřâđćÇôŇc4˙wß}ŻpšßMfęg;Ůłçpýn4žĄżäďż˙‘Xšäç9͡Na3ęŮä&Üueî'¨h…Jťí6ňb׎¤c"Œ”q;v°ÎMhŕpęŹ †Î-“ÓČ]ąź‰iN‘(ĐńîS™Ž˙;Ů{ńXÇVĄŽysy0ęÔmYŔ\t^8ĽôX5É Ô>\´čMÚÜĄ~—˙ńXfg/~ÓÍ7uýŽpÓę;ɚŐ[c…Ů0Ě:Š#¸ĂÍZ…šŁ 'X/IŮ^Îăht3G™Ý~űí!–1Łžg1mO0ŒN3”źlŁ‹/ÎŹŠő÷í‹Çę…&?ĐéňÁďÎƜ9sşXË4Ź{L+ŕ$5ÎçÖs‡Ýh|+”X~ť@żË/âyý€cŰ)íţů-[q kŠtŰXłŞŸ×Á(˘@y°bĹĘdéĎqŽ[˝zľ>F– 4ʆ ӆaĘ ”ű˜žS”+WƸF¸S°ÜöíxŸwýâĺXü.”[ÖŃťáÔî¸ă Œąƒi Ѝě#4ÇÔMČî‚ë7”ťnĺD<ĄqźWŻ>şĎŚDqŤ%Ň>áw]/Ňý&5Ηn×"ᔍŕ6˘° ƒŰ/żülěÓ?iǎ9˝˘[وufvÄ8ą$8đ­m`h¨6@€– ŰâčŃŁś#{ÝDşýqî0ˇ¨s,ÖűÍ7ß$üŠÄK4çśxœƒ/š$kČA,wŢy{`:§}$X,ŽKk™ćöž5ۃŸü(óÂiOľ^ę+Š Á ˜ŚAИĘSה*Uʨ#ݲlră÷ůR{˙˛JëíáˆŚŒŒV$ç×XíÓVŠ]ç$"JD ° "O: Ý­ŰӞ˙îȑßm_GĽ éݛ6=;íB8Ól\vYöŸ1SFZ—=éyR4íĺ—ç ůÖNÝ_=,‰Š˙Ţ~{žlذQ/öƒyí@JíQqńÍş2÷T܈Ŕ-0Ŕş˙5jämžiNËëĆLƒ^öksô$*_h0Štžgż§*ö*ë8fƒ˛p—Ç.Ŕ"ŇcŁaLÖ˛Ě:ҰŻ<˜rä‹ßĺ(~Ź?s´7RP†ÚŻrćto(Há”G€,h<>xđĺ;[ŢĎň;œÖ‹ő{ŢxăM˝yéţœ9“~'Ą"éT %ÚyŽSű|n=śC;đ[q]eN‘ŕô=ń(#âáă?Ń9ÂŃům7BÍë:fAçŚ0”˖%°Xż~c ‘Őš$čˆ>|ˆ 4$0zŇA‰ëq4ČVŞTIS§ńM´óŽWŃ\űšç•pëÁP†?Ú¨÷ô•]ťviƒýkŻMŐÖ3:e肬~~—YáhŐŞM˛çĄÎ=‰´Oř]׋źŒM;çKݰ˝ćÎ}GÓŕďŮłÇ6ë+TŚouůł×!Áőůđž'ťĺ{‡}\ůąý‘i#”HĺÂĺך-Buä5ű„Ó>,Çe´×ƒŃňŁĚ ˇ=Á~9ÂŤŻ¤&LS‚c`ʔiڙ˝rĺ*˝Úvě€ĚŸNANbŃ֘Úű×ůÔţ˜šed´ç×XíÓÁ˙?~Ő9‰ˆ,ˆČ“S§ÂO§ čźuňé§ÉGhüüóĎâ•Ý(ë`¸¨„ŕ‹@ó‚ÔËĹĄľ2IJQż-^źD†}>ąŒß?~šúę+FřŤ¤PĄŒtžçťhוšyéôwűL¤űM¤Ű^ökëgażŽVź×q(‘/Ď ‰•PŁÁiY,Ę7~Ž?/ŁÓ#ý}ŠÁŻ,/űƒÓgźü­Ô…‚rބQ?vóx§–D8Ÿ˙÷ßŮăĂKămúôöçşx—ą†Ń_h\5Ą“)ŕ‘^ŰäúëŻ×†Âąc_XÂ>QŤV yůĺɲsçNmŕ.P żžˇdÉ˝GŚÍ‹Śaš7oŽŚő^ż~ƒ|ţůliC0Ľn3gž)ŁG?/ůňĺ ü]˘wă!œëB§cĹtŐUWÉ´iŻę4‰~¸Fślů\SÜŁ<@ö=ÜfĚxCS¨ťM3O=zô2–ůľdŢV‰´O$J]/-/˝Řľkˇtíúd˛Ţľ?Śfé×ů5ű´üŞs%"X‘'HƒmzýőŠrĂ ×K4Ј8aÂ$}lŚĽ=zœŚ ł6ŕ:AjÇP~ţ9é39r$Ď.€‘HËkŚźuóË/g˙OîÜ9%5!ŸYššôŇlŇšsG)WŽlŠ9ôě˘ĘĎ7~Ź+sD ćFCŒ[EŔnŽb“9‚óŃŽZľBb!WŽł#ž0ŸőŐW_íúy¤¤rϜ9ł¤uńXÇá@y‰}ŤlŮ{dĈá’ZŹPŢaj'(ƒ9ęđ=ţ–˙ĄřąţĚeĆ(4žť5 ÄjžZ?™ű8ƚPżL:żYĎ[ÁűC(NóßZ÷LëeUŸhŠ?Ű1‰äp,-Z,˗'•'O=ŐÍ×ö‰r>ˇîщN_7Nó*ÇťŒˆĽ÷ß_h\ECj§NŮÎ7Œçx¨YłşLžüš^‡`|ôŃvšeăĆÍú~ľjŐRd—ŽjŐŞŠ7Ŕ~‡Lďžť@śmŰ&{÷îŐl S§NüM˘wăŁéP/0G§şq›ƒÜ„ëĘ{î)­ˇ¤żů]žřâKű!2”ôěůŹźýöŹdÇXźŕZA oź1KGCâˇ÷îÝW^|qœmI"í‰R×KKçK/ž{n€vţ`ßmŐŞ…ÔŤWG.ż3~ăvšâŠĐŸáH”óš5 5Ô~…9ˆQĆډwKëׯ×{t 7JŠ/fŰApěŘ1‰4’/ž”Ę™ó?›űO:‘Mâű‚-&Ož(%K&)aĘ&ëů5ŃÎťń`Î_˝mێón#P"\—]v™v\ 4@ÚˇD_C=壏ÖHjŔ4&Y˛d‘śmŰHéŇ%ő5œ/Ǎ{Ńöó‰´O$J]/-/CA‡ĄYˇnذ{9uţx)?ŽŰÇ Î•&óş.Ř_l y<~ňIRÖLdüɖ-›Ä Žť0ślqżÖÄčuŻ×(‘H´s›8vżúj—ëgpfrÚG‚Kǥɏ2/œö\'ŰŐŃŠŻxÉPă$sć¤éMCM c ŔńŰ×_´hŃ\fΜč^śl™çďHŤmvΧöÇÔ,#ý>żZůąOűÁŻ:'Q"b€y‚ů€14̛÷žk…ĚK–,ÓČw;Żż>SGÄAǎkCG׎ő9.śŢ|s–„ňńǟş6Ţ͚5'fŻB… ÉŢŤRĽŠŢă7`Ž;'¨L̙3Oc´ ˛kř!ŇôÖ šľă4Xj5Ä&?ÖUůňĺßyç]ÇĎa{.\čɎůËÍ‘łgĎ7h¸^ťv]Ř'Œ6ł̟żŔľ2żdÉŇŔ|’UŞÜ'ąŻŠHⱎĂqß}IëŃůčÔułbĹűşL^R‡ëŚ›nÔFDľ_źýö\Ç÷ü,˙˝đcýY3̞ý–ăß#Ýď‚ %ŃUŞT10‚/Ô9Ňú~ŐŞU1Ę˝L™¤‘ŇčüŰąc§ăw`qÚ'ŃđTž|Ňú]ťv˝ë¨%ě+ďžűž}¤VęŰvíÚč=‚1:(Tc+–óůçGiŚ-¨[ˇN ƒÄ/‰r>żăŽŰuD̟żĐőŘ^°`‘ă{ń.#b ~-Ű%ŽS!ćGŽ—š5“2K ńűĺš5IűEѢE5up$°6oţX^yĺŐd˜V(sîźó쾯őźé×y7Üë„ÔLĄ]ž|Y˝ÇńťtŠsĂ4˛ěmÚôąăű({QNϝ;Ďń3wß}WŕńącHj0;° •´yŒĎ™óśŚ˜Żk1/i×SťŽgJkçK7ýu<đ8xđ‚8˝vśa_r‚ f)Œ¤/X°€Ř/×_šqĘ ŚáŮż?ŠÍŰ"žSŕ2ƒÔ>ýô˙Œĺ8ŕřYÖÔđ~KÄs›nĺ$˛9™„nűH°D=.Łů~?ĘźpÚĐ6R˝z-yöٞɎ犯ôíŰO4h,#GŽ ; ŢĚP‹§+œk­"Ź°ď Ž‰ şNő´Q˘c H”óŠý1ÖíJŠYFúq~ĺ>íżęœDD‰ˆDäY‹Íôţ믿–!C†Ůvžŕ´oßţ2`Ŕ ŠWŻaŠQťwď‘W_˘K•*!•+WŇÇčĚ6;~^~ůU­ÄşA%ŹOŸ~z! sH›jȐ4óVh 5SbYĚQ-Áß?xđPůîťďôyłfM<Íç)sáçŸލR`MÓřÁÚ~ż,ç;?ÖUáÂ7F7ęcĚačÔx‡šŃżúę+Çďɛ÷rŁĂ¸˘>FÚÁyóě+ڈ\晞ҽ{š˙ţ&aw¸ˇlů Ţcä:,ě*-hh;vź>Ν;W˛Î×X¸řâłÓÄ2udźÖąW˜×Ňé:bÄHÍaçĂ?ŇmŐĄCGOÓohˆhĐ ž>FŁ-Ęeť,h8DŞH7~”˙^ůąţP˜Łž×ŻßhŰȇr~čĐᎍo‰Ł ŤV­ŹŃq7mÚ붟Ăţov|á[°`dď7jÔP÷ œƒ°­ěŚGÁˆŤI“^7Mš4Ö ¨<óLoŰiťđ?0Řđá#ĽyóV)]2f<;­S#Ršvéň„<ůäSrŕ€sDޤßÇ\´€súCľŐŽ ťĆÜďż˙޸śxN–J=ÔRü–(çst2ÔŞ•”ĺ#ś•ÝzٰaŁk'ÄłŒˆĽŤŽJÚ68—:°š:uz\3ßŕş ž€ĆÓ͛“"j׎!‘šŕ™gzéÔ˜KÚŽŁűĎ?˙Ô 6@€–ušżÎť^Ż˘˝†öC•*•Y€^xa‚Η Ůů°› ővƏѸM_œ¨eœ÷Ţ[xlU셗˛5\ąúüóCÓĘ ö|ŠßŻk1,ƒY'sÚgRŤŽgǏóe"@&'sý 3Íî\yá"^­\šĘś~…}×wfç^ăĆ ]żg„‰śçě¸Î,{ƒő$Ţę×OúŸ(sqţłkťŔľÇ¨Qc$–ńÜćŽi”ĚÜGĚ2.Ô>,‘ŽK?Îo~•y^ÚvîüJƒ31ľ$˛Z§ÝńZ_Y¸p‘fĺÂůY(ŹËaÍđÇöAxwŢy‡ŢŁgw­ŒălČçi&Ńֈş#‚ź&N|Ův˝ďÝťO3ä@8Y?éü­Dj4Żż íJ~”‘^ö];~œ_cšOűÁĎ:'Q˘‰nÂV":ŻÔŤWWÖ­[ŻŠ‰QŮýňËm:7tÁ‚ŒFƒSÚůhöƒ“:l0:Ô&T„1zŃÚ¨H"͜ŐÓO?e\̶Њrż~uŽg§QŁŐŤWŐNď&MÔD\ ?ţ—ŽÂCc .ÖЉôĚ3ݍ&\řöë×GÚˇ\—ŠK—'5ĐŁXąť%kÖŹÚČ1ţ˘@gÎmˇÝjTzšJ´n˝ő˝XGEs–+WFSŸĄ1Ňn.ă`HS‡Ôj¨P R‹‘Œe˖•Ë.ťTGzoذAŢóçĎH1wžňk]őíŰ[ZľjŁűÉ ACľC#ă‘Ć 1ŘѰ€mšfÍ:ÇďéŢ˝›ŽÇ\œ#FŒÖ}Ű=oŢź:2 hŒF# 5t¸s–"÷š5ku9pŒ6nÜLçnÄH”żţúÓ¨ ~n,ďr=ţPëŐŤ‡mŠG?aŸ7 ˝qăfa÷ă?Fů‹śü‡_ëŻgĎgäÁ[i=:ł0ŠąbĹ{uT Ę”ó8ţ1÷r"vf{ňÉŽzA  ЁőŒĆLL‹…†/3U2Ę:ăÁpL✉Ž/Œ„oÖŹ…6ţcŽY4˘˘<Ăܲř{Źo§ "×]w­ą]ڝŒ/lťŒőÜŇ8/W—˘EoŇ´˝h8YślĽN+h C&Ť+Ż<;÷ę”)SĽZľŞzź,X đ:ްďF÷Lš4A"ëß˙ÝXg›ô€Ž=œ#nżýVMÁúß'ßń•Ž05{°FŽ|^.˝ôRń["Ď‘áçěččBYY§NM]>”›7oÖňĺö?ţŕ8Â6žeD,áˇ# űA׎Ýôř¸ăŽŰôzŰkůň•zœ,X0n×Z8WaD$Íŕ'”“•+Gž… ˙ýd̙ňÍ7ßHëÖmĽaĂzúťĐˆßöÎ;óŘXÁŠőý8ďz˝NˆöÚ9sć4ö‰NÚiƒsSŰśjşlĚэrçĎwß] ĺ‚ť12ÚćÄF=‚1}´ƒqěÔ3~ßÍz.Ăú^źxi °eséŇĽ$^ĘÖH ĐçĄ%uJö2:Ď^MVFĆăZ ŰşÚőęő|„ÔęčL@@¤V]ώçËD€Î-tœ˘|G&Éví:Ψťcť/Z´HƒąĐá*ŚĹ~aÖŻ0=Ęœ‹ŹeĎ-ˇÜŹ)ӝ ˜űUťvíőxÄśÄ>‚×@li<ř`3Ąo8~ŤUŤ˘uFä7mÚ\ËSě¸ö@đűüůóľn†˛Ä-uzǎ]Œë”¤ëźˇßž•Źó3”D<ˇ…rĂ 7h›‚Ö>řŕÝGPwE§4ö;ją“HÇĽç7żĘ<ˇö„?˙üĂXÎ/4ł ę 8ÖQ× .ĂCŐWpźŁ  řčÜšS˛żˇNˇsjŽ\šô7`ź ˄ ěϸŽF]×Ń8âšŮ ąŒ¨ßÚe”Âą†ýçZ”iXV\ł˘L2Ëł ÎfńhŐŞ…x•Hç@ -ÖôčŃ]Ż×˝J¤úJ‘"…uÝbžöÚT=6˛gĎŽ7\Dˏ2ŇËžkǏók,÷iżřUçÄ6*_ž’ăšrĺ4žkžĽ&XQX†ŹŠłQĄAĺŁ÷íŕ1¸sç•W^Ó tîÜ1Ĺźr˜gşS§ÇľbšgĎÍdŃącŰď/]ş´VtqĄofİÂĹwŸ>˝%Qyž0aźQÉčĽn¸`Ć-FR÷íűŹ/ĺ)nTžQé3ÓŇ_sÍ՚^;T"0zŹS§.:Ĺ.>qłÂ:0ŕ9iѢľœĎüZW ącG˝u”płÂŠ'žčâ`ĂW_}ŮŘߞŐéqĐč`׀†ĺĆ>NĹ×jđŕ Ž *‚ˆ^–5k8°żŃ YRb­D‰âĆ­˜ŽśľţćNӆN?Ĺk{… ŽľŒąŰ ŘfşFżĄ"ŽyÔŃĄŒÎThјh…cĺܓO>íú]є˙áňcýĄ˛ţŇK/HˇnÝľÁÖššٌPŮO hT~啉:ŇnűöíÚP‚[04üŒ9L2ítëÖU;PŃɅNÂéÓg${݃ ™Ç0‘ŠßóÖ[ö)áŃ@>|řd#"Č2…Ž8ó\ŠŇ˝ZŽ™0‚ŢÍHl\Œ1\Ga”çPF:€Bšţěł=™Tü–Hçslď^Ťe¨qý…mj…đAƒúk玈s§Y<ˈXA'BďŢ=´ŕłfÍ֛:Ď+WŽŹŁ;ăĽnÝÚÉFtUŹXÁčxĘ"Ńx䑇ăď'ÍR˘ŮAPs—.SźîÇy×ëuB´×Đ~ŠS§v hĺ:pqłjÝşĽv68Xŕú ř”k3gžaű9”ŁG?vÄKŮ)t™Sœ üDzřqăĆ–1^×b=ÖިK>Ąëačˆ]šrY`YRŁŽç$Úóe˘čÖí ١ď€v:cűšS~š°Ü¸&Ăď `‘1c& Ś}䑜ő+@ĘüaĂťn›Ë/Ď+M›6‘§žzĆöxŇvčđˆ¤ó|‡ \ˇ]ŕZ×Č&ç`ąoß>˝Çőm8Á¨ç678ŚÍ}ĺŠ]™ęeq’(ÇĽ_ç7żĘGé˘ReŚh/Vě.Çxýý÷Wi'>iCkŘM…y~q†’ˆĐE¤u“&÷kăƒŒ˜3g–Vy 5Œ@ GáÂ×kٟuähaÔ4'Ož"›6mŇ c4`ŢJŻ•gt"Ξý†ąnfkC*˝ˆŕE'O›6}Ŕu>ťó‰_ë młfÍÔýMýű:‰Ň#ŁCAgçäÉ55=öš˝{÷ëüˆhTĂwaTĂý÷7Ěq ŸčDG F oŰśC˙FâäËw…T¨PNߋňl;Č"ƒNMth˘ŰőÇCŻŻHÄc‡eĚŰoĎÖFł÷ß_­e Ž{¤DG'8FZ"]1 b #;0ň "čřÄ([Œ@™Œ,mÚ´ň”Í$Ňň?R~Ź?Œv1_Œtýá‡ďuyѨ‡ôú˜2(i…šŁ,ÂH–}űökc}öě—iCl5těSö'@ F0ĄüBѝ;wéˆ2_ĄĄşmۇu*/sĚ"ʁbčŹE‡!ćXĹşŻTŠ’ţť†C4˛źřâ8M—żmŰvÝ'ÍěŚîݟÔé&Pn<ńDg‰žŁmŰ6:ę #Ä7mÚŹ#đ1â AŸěAg˛_ű°›D:Ÿ#SŔkŻ˝ŹŁ‘Šűl‘Ăh Čo”ľuô\če} î?eĘdÍ؂%ŹWŒ.ZôFiÜř~=ˇ§Ś¤í}ujFŹ;Lg‚ߊë.죭[ˇŇrĚmş>œţúë!}ŒŔ´H$âš-żö'‰p\úy~óŁĚłkOŔ9 ëő'th7jÔ@1'vőœ‡P‡ĂšŰ ׃NŒz÷îi\‡ä’őë×ëßáZ ­Áă8.\Xcp˝‰ üN”˜śç§ Ŕg‘1wéŇeĆşZ­Ó^á;Đn’7o>ýdöŠ4Ř:QÎ?č´łx‘Hő°˘ž6wî;:%! `›ůŏ2ŇËžkǏókŹ÷i?řQçDybBĆM"˘Ô–·ϼłyěvŸÎášyKoš7oÎź–!č†÷Ť4ý‰˙Ś y'˘s R˛=účcúŃťhŔ$JH#Ú Ac}üÔSOh;Ńš¤nÝځ‰QOČVAń…ř‚@ÇÜšł…:TĚѕož9C *(D$:9čě›3çM‰TéŇ崓”=ôď?PƒłĐšż|ů’dďmßžCÚ´IšŮʗ/'DDnÝŁbĹ*rüřq‚-Ú`u˘xqŤs"óۋ/NÔ ŻĽKĆmđů/Sڌ˜ßsô=s2čvúĚý)Ëí´ĺ>ř&ĎÝîƒs{O%nx<Q8zôh`Žh'{ö|xŒ,*DDDiF€>|Řő3GŽ Œ‚GF$Š/rb„&ÔŞUC(ő C({ö|xŒŃzDt~ §Ü°;ÇîÝťOď‘á'^YWˆ(mCW@ɒ‘ež!ň“uNdFƒ"EŠ0¸‚ˆ,ˆˆˆl`TÔěŮoIŁFČ3ĎôÔ9ˇí`zI“’ć™G:ĎŰnťUˆˆˆŇ‚7Iłf-ĺᇑďžűÎö38Ž3NďĄté’Bń5uęë:Šť`‘:Ž;&#GŽ‘úő_žŹŰĂÎΝ_Éüů ô1ŚYÁźŮDt~Úż˙€tíú¤QŸl"ëÖ­wüŇ›S@ٝc‘F0Ý ŚĂ!" Ĺ,70K˘OĎGç>żęœć~Í !"JĽ€”s漅˜“ľI“ĽnÝ::*Ë1.ćś^¸pĄÎŐ ­Zľ”K.šDˆˆˆŇĚ/l6TľhńÎ?|×]wHöěŮľCŁfß{ofP€RĽJpôlœ`îp\SlŢü‰q­ąH_Ť]ť–ëźç;9Ž9š1únęÔézmXłf5ɟ?ż^3"•ńƍeőęő3˜ˇť}űG„ˆÎ_˙ý÷Ÿ|ńĹV9qâ„tďŢC*T('e˖ŐĚ6xíÇ”eËVčT¨'OnyŕűS|Ďž}űôžóÍ‘WfšqűíˇĘE]$DŠÉŻ:§ůĽJ1ŕŸˆ,ˆˆˆôîÝS.ž8‹Ě›÷ŽüňËA™<ů5ŰĎĄŃ˝UŤҲes!""J+jŐŞŠ#ńG§i„çΝ§7;eʔ–ű ĹFv 2<Ůk×]w<ţx{ĄÔŕÚ Ć׆}ĺ˙Ű";věЛlŮ.ŃkHd° ˘ó׾×’ńăÇHŸ>ý4˜âƒ>қk9Ě6ĺůž}ôžDäË J$~Ô9¤qěŘrÉ%YĽhћ„ˆ(0Ŕ‚ˆˆČ'žzę Š[ˇśĚŸżPślů\~úéGŁBđˇ^Ôç͛OŁŞëÖ­%W_}ľĽ5Ȋ€Q@8Ď}üń':2™™.şčBə3—N}UĽĘ}Ě\GťwďŃNúżţ:.šsç–J•*ĘCľdjřT–#GyéĽdƍ˛|ů Ůśm‡Î%Qę—^šM ( )‹ëÔŠmlżlBDtóÍEeö왲té2Yłf­–ďGŽ•téŇeJv)R¤°fľ¨Zľ˛Ö=í̙óŚ…ŁGîz#JŃÖ9sćĚ)›6­"˘D’·ϼłyěvŸÎášyKoš7oÎź–!č†÷Đr‘ţĉ7%”L™2–6îNˇŁgîOÝNŸš?ešśÜßÄášŰ}đă`nďŠôBDDDDDDDDDDDDDDDDŽ`ADDDDDDDDDDDDDDD,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆB`€Q ° """"""""""""""" DDDDDDDDDDDDDDDD!0Ŕ‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(„ „ˆˆââŔ˛nÝzšýöŰ妛n"˘xaůCtî:uę”,_žRţţű¸Ô¨Q].źđBĄóÇącÇdéŇe’'OŠPĄź%Š“'OĘgŸýŸěŮłGţý÷?šęŞŤ¤dÉâ’%K!""˘”>ýô3Ů˝{ˇTŞTQŻíˆˆˆ(qĽóásélťÝ§sxnŢŇ[îÍ[†3Żeşá˝l¸?qâß BD” Ž=* Ü/üń§dȐAf̘&… ż|ţůň裏éăűKĺʕ„ź›:uşźüňd}źxń|ə3§%’ŇĽËi'j˝zuĽGîa˝ëňç\j]Sôl”ľK%kÖ,ňţű˅˘óĘ+ŻĘ”)Óô1Î˙¸ ´ÁňŚ}űÇe˖Ďő1žßEöXžÇĎW_í’gŸ}NžýöŰdŻOŸ>E žA(íXźx‰q^˘q yýő×IZ3{ö[2vě ú¸L™Ň2räóžţîôéÓňČ#äË/ˇęóAƒČ}÷U" ­gĎŢňÁéăŐŤWČĹ_ěéď:tč(˙űßɔ)“ŹYł:ĹűUŤÖ#GŽÚţmÌ%[śK$ţürçwHľjU4¸/œe –.]:šôŇl’#GNýÎŞU+Ë-ˇÜěř]ćň)RDŚM{U੮ťčăúčŁ5k˙O>ůT(uảs玁ŕ t’]~y)P @ÂWŒ3>°ďŕ‰ÎMß/7ޘ”ÁmÝş ŽŠÁćĎ_Ž(]ş$ƒ+ˆÜż˙ţ+‡–˙űż˙ÉŤŻN1Žýf2hĐPm#Œ­~˙ýˆ|óÍ72wą/^}5Ę÷rß}#ă#…sݲeˍs݇ĆůcžkqŽĂ~T˘D1˝ŢôŇAěWŮůŐWťttőÖ­Űż7Ôą‡ýöĺ—'ëăŋç;./Ž1qŽĂ5Ž“.¸ŕ˝(Q˘¸/—_~y˛Ď‡ť_źřâD]ö¤Ç)÷ Źk¤é^šr•|ýő×ň×_ÇĺŇKł)ŰŤKůňeĂžŽčÚőIŮ´éădŻuęÔ5đřËOtvüűHÖˇU´×iNŹŰtÓŚuzţĆłtÝĄŽqŃEÄWÇŔ˝RˇnٌÍň;ĂÝţ&Żőťm÷ÜSŢň¸”Œ5"ĹgüXáƒĺĘUÔ}ŇiY‡bě“ĺÄŤHęQ‘ns˙Ŕoܰa^ŕzűFWgČŕ­ŢbÂČîˇŢšŤËójŚLuý7mú€§k.S¤uęH×_$0rSÖtéň¤ţż!C†ËôéŻ%[GŘ/ž~”>6§qZ‡Ń\‡˜żš^˝şŇŁGwÇĎ=ňH=g,XиVœ!‘Šöú:šóĽyÍUŹŘ]ň ăt?5kŽŽ7ݏN,R¤°ń"ÎČdw-dűĽyŹ7jÔĐ1‹I4őhˆôřG¸íe&żËD†ëDLĽ†cÓé͙3Wł:Fz~ߨ'ŕŔąŕ7ˇ˛!ží$~\#cY?üpŃśöžq-ż_żĺNéŇĽĺá‡[ëß?üđŁĆňo3ęĹeěŘюߍk.+?떩]ż'"˘ř`€… ™hÄBĂÄ_ýxĽ6:§˙6Qę3Œ ˗“ý-*ółgżeTěߗɓ'Ů6” ‚םwă˘ö“dŻă˙Ď?÷é…%hŃ`ŠJx4Đ ÔŁG/˝ŕ ^NÜđđ?đżÜ*–h hÓćmLŠÖ)Ţ|s–VBě–4ôď˙\Ě+š˝z=Ť˙Ď žFŤV{öěŃŰźyď BmľňKćş3őM‡ŸĐ߀y2‡ ěůű,Ôšó“ş?[ĄŇ‡ŰęŐżQŽ:X&… 8Ä槟~>ÓšđžŃ 7ĐhÜ)mű÷Ř× 9eÂ~ŠŕÜfÍzK†ŹÁ#vĐh‚c0xB#*n¨dc_ŞXąBŠżĹűH}‰ýÎ Ž¨4âśxńRcű?ďKEÖÍŰoĎŐýĚęÓO?ÓF’×^{E;@Q^`;[ĄaܸݲfÍ:oŐi{ůU„‚ŤaÆeŘ_É^˙嗃zCăŰ{ď-4–yTŞŒöü÷ߍ΄‘ú{ƒíÜšSołgĎ1ĽťKľjU$V°]ą=ĐŠo•´ž>Ҁ4Î4Ŕ蘝Ôö;âQ69-§y|Ąń}úôyŒ a̘ń żöŻhË.ŹsěG(_ŹPcŕxDšá?ˇ3 {Źc 8˜ëĺÝ;ďÜŽmٲełý{?Ö˙Áƒĺé§{Ɏ;’˝ŽcŰ̙łŒNŸĄŽ ć‘*]ş”ŃiSžŃP†Y§TţŘGđŔ5œ[ Q4œÖöEܰ]ä1r䰐NĐůŃŁGď×n8×á†˙ýlĈárŰmˇÚ~‡Ÿeçüů ôťŹçmëą7hP˙ˆmqí=~ü„dߍk œ+qĂšö駟J$ýçHĽjżŔ÷ŽXáź_ 튧zč˙˛:t谖 ¸Ąż1GŽŃŹo?ŽÓźB˝¨C‡NÉցQ÷Ŕ>úÖ[okЂ[šÉöˇm}'˜ë1QŽ_ŹźÔŁüÚ&č¸}ôŃÇľSČĘŹˇ f̘QÚškçkŹ?ëšôďż˙Ź÷yňä–Püźžö˛ţ˘ně čtÄşĆuŚ1ĄóŮÜÇńú 7\oű=‰Rö"Úëk?Η`\Bhv§ŸîŠű™ ׉6lŇl°ŢRS4őhđëřvâg{Y´eHZ€^NŽ÷˘ś_"xˇzőލœ9si'˙ďż˙&Š%–í$~óŘOńX&+\káo׏YŁmÂĄÄëšËĎ2=‘ę÷DD[ ° ˘°ýűďҡoRhŤV-tÄ.*q¸ŕÄŢąc_,Y˛jpEΜ9td"lŃXžpáb­”˘ŕŔ!:Ę •Đ'ŸěŽ•@tuýúu42şi†(`\Ôă‚);ÍčěZľj與cǎ%ô5Œ”jß>iÔä…&ěĹ˙čÜů Íqá…j41˘1ZżgîÜwôâüď'Ÿěâ¸N^xa‚VJŤTšOʕ+§QĹhđó ëĘ @TxÝşuŠĘ-ƲdÖJ ˘¨QÂE6F˛"ę>Vć aXŻuęÔ҆r4€X3G` ‚ čnѢľŢăXEfS–,Y1âŕšçúëúGŁrŐŞ•˛é-'ĐЉN)üTܤć6r#VИm6žŕ˜oذžŽĐ@™ŽFstŽa!ö[geĘÜ#~Ăh”ÇďŹe§šž0b(,XŹŰÇFUOš4!Ũ›x”MNˉÎw,':P† ąŰ#Xœ:đyˆa7jTßءŽÓl4ˆyĺçţmمŸfpţ?žÇ ŽpźĄąˇOŸçtf4üÜÎ8ĆŃЏő‡rÁ#Řçp­2gÎŰşîPŽtíú”źúę¤Űҏőë–víÚë˛ćrĆ÷`¤$F.aäŃqŃQÓŚM‘źyÝG>†SNaš‘A#ŕÉLœÎ™(~ţů}Œy§:Ü#]/ëcőęŒšO5ťR›6íŒk€é’;wč@+œĎ:věŹçU@ç>:ÜĚk|˙ťďž§űQϞ˝uŸˇËŕWى˛ ŁňňçĎoŹ×coéŇĺú=8ö°˙̞ýFظFBv @ FŁ˘Ăđż˙Nęq‰@'hźĆń„ă°_TŤV-°_ŕšĘižq,#{FÖýâčŃŁş=ń>^/SŚ´T¨PAG0"đbѢ%ZŽâ;„1iҋžG㥃 ×f}´Ć8>§čk:=&ŋ×ÇȐa'ÚőíuZ8°˙ĄüŔ(EsčěF` :P.c˝včđ¸źůć ­“‹tűŰqŤď˜ŰFŤĺ&Lúj cǀßë1Ňc߇ó­Ó˛ć˗W"áĽĺ×6Áňc?ýűďăŇ­[WÍž‚z 2˛źňĘŤzĂ9×ýv×Á˗ŻÔ €6\ăÇuđ7ßěŐs)žŮeÜřY§ö˛ţüĐĽK'ý2~ňä)šÇ:öod‹üďvíÚŘţ}"ՅC‰öúÚŻó% ţ١o?=Fўq㍅użß¸qŁąŻ˝Śë uXÔďbŔJ4őhđłĚľM{Y°hː´¤B…ňcţŃX˜ٲ]*Š!–í$~óvűiƒuőxÁőÖÚľë4ĐĺŮgű׺ţÖx\sůYŚ'Zýžˆˆb‹D6ŒÂEöčŃ#4ÍŚŠ^˝:FEů!˝XÇĹ ć7Eg„ľaSˆ´o˙x !•6kĽúHĄŽ@˛ľ‘#NP }đÁVZq@CYaÄ˙Á ó&\€ŰčÂß"Ŕ#i ŽœĆĹô˜diËŃř†Ęp׎Ý4[:YĐ`Œ‹l;hŒA*JtD‡ ËkŽşÂEřË/OHÖ@ŠLÇĐŞŐĂڙ€ĆÔ-ôÔŠ 4ja¤żěţRűMœřJ`yŃnMqYąbiҤąŃÓEł@̜ůŚŽtŞŘGŁŽńý€JÖĉ/$[wČřQˇnmcY:i„ž¨pżüňKÉ"ń‘"¸J•ĘŇşőĂÚ8…éCÚľ{Ř1Ľ""š5kj46>x ľH}ŠĆFŒşEĂ FH"5Šöłi7Ň ĺ˗×Ć)Tňƍ{AGX!Í/`ߞ2ĺ•dĄŘ%J”‡jŤżRk>*sćHt6"ˆĘ„c hPB'*´™ŕ%5u$°ÍZ´hnlżłX¤Dç FClßž]oH 9xđŔdŰŁQŁFyÔZ×:|ƒ˘)Pî™ĺ Ę?ášÓčQŒ`@ĺöČ~œ6űé ACuŰ#˝vpškřżfçĘÝaÆ$ÉRŁF5MŻŽ]tX >BËâhSó[a{ôď?H÷I”ůČr€'Ť&MĐě{Ř&hŘą?ń(›ź,'RқˉId&jŢüAŰďĂČpü˙qăFGœ ĆĎý+š˛ çt4’&L—ŹěA‡ŽĐ`gvfEÂďíŒó7:űƒßiBś-ŰĐ膲ĺöC+?Ö?:řĚ`”ťÁ#ِ"çaĂFhcâřń/bƒÄM¸ĺT:5ľ#°ď:Xŕ=ŔyÉëČËp—ĹëúŔ¨kěC† Óѕá@'ţĚŠqŹ°Ď =ÎwhČ|˙ýUú­ü,;qý‹ëŰú%{Áž¸ŚFg:Îg8öPĆx…ăV€ëš#†%ËĒ”^¸–^'áwŽ1R§T0Żď­űF{;Xŕ=03­ĆŒ§AŘg0â78m;ą1bס8ΰmMîu °fÜBGX¨,/ŃŹo?ŽÓr)­űĘ<ěŸwŢyť^a˙B€đóĎKöˇŃn˙`nős[śYÎŁcŃîzُőÍ1ˆŔ/ŻË/ő(żś :lЙ:}úÔd!IYdîĆ›ęďFDzX×/:¸FŁx‚iŹ#Q÷Áľ42Úše“đťNjýůS•vîÜQĎĎč,ĂuEďŢ=Œó닁Šcž~ş›ízO¤şp(~\_űqž4áüő0aÂřdm<čx,P €î'ŘŻqH­‹hęŃ~—šv˘i/ M’Öŕ7™YšöîÝ'ŃŔtt„B… Hjˆe;‰Ç<ö3¸˘lŮ{t?ľfAÁőţĘě‡NâqÍĺw™žhő{""Š­´{uDDŠ iVƒ+‚¸­Zől$8.ԃG}áéůL{ö|“ě}n,[śHÓS>÷\Űl¸pDƒ"ěŘń•DŃҸ…^˝zŘÎ Ń”}űöTFp‘ëQă‘WF,\řžÎWÔßvŁĎ°Ě({4R›ó€ĆFĆuéŇŃąQ iv͆§žł?ٌ†MŞČĄb€ÎŠXŔšf ż~ýúŘŽ;4˛?ţxń Uť4‡ŘGĐ čŕÂČ.'ٲ]bt ľł}0fĺŮ0‚a^k(Z´¨c]ěkćţ€†ĺŕŠ<~řá{˝GCŠÝ(óB… ĘŤŻž,˗/NŃq…yWM%K–;O>ŮUG /^ź fÁ€}ąC‡”™B0ĽPĄłÇl—.S4ˆŁsÔ,pĚ !ŮĘď2Ŕ F`}9Gbĺʤ8”í÷ßßĐńsě›9sšôë×7Ův‹WŮäu9Q†>đ@ҜÇh”tj(Ć踂 H´üÚż"-ťĐéjŽ.ˆ7ťŇpGÚŕŤíŒ>'ؖćűč¤@jÝ`ŃŹ˙UŤVĘYt@ťÁČńŃŁGŚČâŒŞd"ĂTPÁĐQcNPťvm‰…pևő}L.L+âÖ°‹u3&]o7żËΒ%‹Űž“fcﯿzďŔzüđĂőń}÷ݧSŹ8Š\ůž@ŕtđšÎÜ/02pýú )ţŁ(Íý˘V­ZÉŢĂô6X\/4ně^fšÇ:/öď? ąéúöë:-nĺ“ő˙`ĹT)&żśżU´ő“ë1QŽ_‚…ŞGů˝M0šŢ :ĚMÁős_Á˙°Žă`¸Ćy݉ß×Ónë/çhlŒ€›"ĐĘN"Յ˝ˆöúÚÍůŇ ŮRŹőé`˜ćpž gşU?EZŽĹńíÄĎö˛Hː´Sń†Ý Ťƒő†ŹiČć…i›6mŽYeĄbĹ š1$5IJ˘˝F63˘âüěVďsŤÓÄăš+ez˘Ő(ś8E…-kÖK<}Îźŕfm4qŐkžőˆ˜Ç<Í?ýô‹|őŐNM— ˜Ë2ťvíŃ{Œž7/ţ bHč4B–,ţŽâGŠsŁń&¤a•‹/vn ÄHD4x€—´%ƒD„˙ý!S6‡ëČ 4 ľ,Řçnžů&/2Tˆœ ­¤éřńż?gŽŽp‚} uĹż˙N^šGeԄ(ˇ}Ó:˘f˙ţo“˝‡Ž]¤’GJOLۃԐĽJ•2-oM1*)*ř "˙‘"i˙рƒFu4ˆa~Ďxq+kĚŕˇyÚÝʿˀpŕ;p|÷Ý÷:Ú÷›6m źËă;.L~uœDśIÖ̋¤ó=^eS8ËYŹXąŔc¤ľ5čVŢF*šý+Ҳ ĺą9*řöŰowý4ř˘,ÁtLáŠĹvĆo U.ZŰřÖ5€$ÜőoîS´tš–#^*VźWF§ †K—.Mpˆ×Oĺʕ‘Xg}`{bű%e•úF˘}ú¸ýňËĎĆ9đ'í\1÷ˇ”ŰÍ߲ÓěĐq~?—^†3úNjyäĺ\wńřuní}ű’7X÷ ˛`t¤ŐňĺIÓĆ ă"xŸ1ĎľhˆÇ:v[ó\ ¸î gŽępEşžýşN Fmşšů梜˙ÇŻíoĺW}Ǐő˜(×/ÁBŐŁüŢ&ÖăĆí˝ŕ}ç2(Zô&×kiŔyÝŠĺ÷őt,Ž‹Ü đSLšôJŕ5Lœ…Ó”Hua/˘˝žśîůŇĘËu&ŕœ}ßĎ齊´‹ăۋhŰË"-C…`&ŻŰsúô™Žu?™űč…şOÉ2vě  ‚zôxZRK,ŰI‚EsŞœÄ9íKvA/ń¸ćŠE™žhő{""Š-XQÂÁĹáŇĽË4ĽđÖ­Ű´â •ˇšúB9t(iôíŽ;¤Q#oó<ŇçĹjJ„?ţDŁăŃĄm—Ą"ŠRCąŽZFjÁPůnBĺĹĎF%sŢËH–ĹM´s/C¤ŰęĐĄł#Cşuó^a?r$ů¨¤’Ć>4eĘ4­ü­\šJo€T kÔ¨nŰዊřřńŁĽWŻžFŁé.íäxíľŠzCE tčXCšeť´ŠiEźË4z˝ýö<ٰaŁvÚK­ăű×__~yI-ćöˆtâU6…łœÖ€ŹpFGÂŻý+ň˛ëěďłţn'9sćHÄb;_vYv ĹÚŃb-§MŃŹóűЈŞ“+ÖĐů‚ÎtĚç‹i7Ž=yřđaŮźů}\­Zľ˜-k¸ëĺ8ßp"ÖNŠlŮ5Ş`îL¤•^śl…ďlßžCGŸ˘štér˝a¤)ćÄ îÁq6mÚŤF§É&ůđĂ5˛eË皍9_~šUo3fźĄéęS+-f´âY`^çĄCŸŒ,@e8ţürőŐWÇřUR¨P=Î;vě"Š)5+éćöˆ×2DZ6…łœą,˙Źm˙ 5 Ęëgüŕe˜sîşqKSí×úO”F˛ÚľkjG:~3ćoĐ žžžbĹĘŔvĂgb-ÖAAťv햮]Ÿ t2ćł.X°€äËw…(pÜzë­ŇťwŰF_?–!Ö"=ÎěFšűŽ—ŐŤ?Дπ}ÄÜ÷íö‹ČĎľ˙H"ňó:Í+/iňOœHúŒu_ôsűűÍďő˜V:q›œ<:¤Űr'Z: OŞ ýé[–SźŽřq}íçů2­ˆ¤Żă;^íeç´e˜A0 pýěęŐ+R”c̗ˇŢšŁˇmŰ~NXD{Ě[łŚDÓN—×\ĄœŻő{""rĆ "J(/˝ôr ˛XąbyčĄÖ:÷\pŁtŁ‘3gN.[ö1b¸¤Ś÷ß_Ž@ E§NéüłÁŢ¸ČNmÖhL] ŇTšňä‰läŒSc…u4•uĈ“´0/!öKÓëŻO•n¸^˘u޲es˝a=~ýő7šJ‘đżürP>řŕ#Ł’ůÄňw×J,$Ęţ…őoŽôÂ4WnĐiiy‹íŒ9Ľą=Ý`=› ȟěőh×˙u×%ƒ8ž-ȍ—‘ě~03 [ŚAçĺΝ;őľ:ub›˝"œő9žˆčŕ÷ M{÷îŐÇ 6GmçŘpětí•(e§Œ6ĨV@ ńh™űś ‚.ąo˜ßë´_˜çÚ?˙üKS§uąźNsŞLýřăO1ŞÔä÷ö÷“ë1-ƒÁi›˜ç˛;v†íëś&R:üźɜŮ[]m‘ŠöúڏóeźdΜ9đŘ:…P0§ś7^ęŃń:žăŐ^v.A0őoĚŇÇYłfр°pajT‚'N|YÎE~óůňĺ <u-˙Í7{őŃN<ŽšâՆŽDo?""˘ä`AD ?˙ՎŠ,‘Ń­!ÍK ĚűîťOďQ˝jŐޟ]ąâ}ůß˙śxJ# ó7ăÂŢ:Ď{0Ě˜ÚиPąbE}lNáŁ׎Mj(SŚtŠ4‹ć¨FˇFwŹóőë7Řž‡JMɒIÓS|úé˙ÉţýÎótŽ]ť.YŠĂD…ŃŸ˜űćÍ{Ďľ3 ëK–,ӎ/ŤŁGę>=zô8ÇšlٲF WĚĐĐú曳dîÜyâäîťď <Ć(Ž´Čď2Ŕ)E¤ľ1Ó-ijŞ`$Č5×$uČ̟żŔľńőwޕęŐkÉłĎöMąßEŤJ•*z}ó˝:Áű 6–Ö­ŰÇČŮĎůY6ůąœh™3'éÂź˛wÝu§ÄB˘ě_HŻu ČtƒrÄ öłHϧąÚÎsćźíře—/OyŇ źçÇúŻTŠb {Ę^7}űö“ Ëȑc"ęČňšĘśzőŞşLř8ŽY“´ü8ďbm?8-K8ëĂú~ŐŞUÄŤżţ:xl퐆NE§ĆËD);Ý pˇ|ůňúǂŰH7”iďžűž­8m¤K7÷‹uëÖűĹZ}ŒăßiýWŞT)p]>{öqƒó,öˇH:…Ź×ţąLŮěÇuZ¸Ţ}wžë˙1×+ÖaM~o?ůąý:ăľď@"m“ňĺËé=ÎÇÖëŠ`ťwď‘Ď?˙ÂńýDŞSǃŸ×!fĆ™ŻžÚčL †ë)/YFœD{}íÇů2^p˝mr äľf2M=:^ǡíeç 0H~˙ýˆ>oÖŹi˛`œp4n|żä˗W#ƒ—[}'­ň㘿ăŽŰ5ó̟żĐőż`Á"Ç÷âqÍŻ6„p$zű%Ç "J(W]•”ލ/Hy ¤~ý8F9*LfăźSĹsfbÎ:1b¤ă…4*ŕčĐčĐĄŁÎ1 ćoĆ(L§ďŠS§ë:qbÍxńÇą­Đ¤IăŔ˙Cú@kš<F6öěŮGGŒa[4mÚ$ĹgPń236EşN4Ú>R§˘pRż~=˝ÇßöíŰ_E‚}˙ý÷2jÔI+Z´hŚ÷_ýľ 2Ěś +ř˝h,¨WŻĄ6̙ĐPƒ}†Ya×hłwď>Ł4iŸő;~ü‹Ćm‚źřâDM…jç˝÷[GŚ%~•H{8ěÖľ5eő|hű?>ůäSyýő™âĆ<ćţüóˆŢwÓ˛ĺƒz2żŐŽńbçÎŻä•W^5ĘĺŁÚĐnmÄôCůňeëęŐW§č: †2aذÚЌŃôÁëŰŻ˛Ém]z]ÎÁƒ‡Ęwß}§Ď›5kâiţŮHřľůĄQنÚЋí‚ňé×_SŽČÄĘI“^‘hřľ­VŽ\%‹-Nń:Ę_fCWăĆ “˝ďÇúÇČŠŞU“‚6múXŚM{Ýös .2ĘŁ5:˛ Ł]Ă٧B•SvËd0˘Ă7¨PĄœíŞp„ZŻëSŤat(UŞD˛Ŕ—P0GššţĐ8iŹ‚ÔůqýžD(;CÁń‚l_můĚ3˝mGîb;L˜0IŻšš7oetŘżeű]H5u Ž0÷ Œ͞ÝţwĺÍ{šŃ›Ôpmćԑ‹ýú™gzJ÷î=äţű›„ÝkmäŽuĘähŻÓ…߃sŸÝ~ŠňtŰś¤‘Ň8>ƒÓUűšýýćÇzôăźřâłmńHˇ(ŰÁl溘š”ÉŰqěŘńrŽńă˜G°Q­Zľô1Žď°ŻŰ}φ ]ő@<ŽšbQˇŒF"Ő(´ „ˆ(ÔŻ_Çč€ŮŽŮZś|Čč°i é1ޝ˝ˆpĆEzÁ‚Šë‚á‚ţŚ›nÔԌŤW¨sR"=;*A÷ܓ4ÂÓSôďßW{Ź“vŕˇo˙¸ÎaY˛d  •a\´š#q.źđBŁ1§ÄŇ*c&*]ťvÓ ;î¸M+çhčCt<Ý~3*BŚwß]  YłfMÄऔ}ěąG ĺ ş-š6ĹźŒuĽpá´˛ągĎ‘aF`ŢŇ[nš9Ĺ÷ AŠ4јłyó'Zů­UŤşfń@ĽfɒĺF#ČnŠV­Š,[f?owéŇĽďőŐWƲ4×ő‡mţß'uTÁüůóušnżýś) Ö% ×­Ű G_~šMjÖŹŽG'Ož’čH<ĚÉ UŞÜ§ëބ߉őNü=*Ŕřűźyóę(Œ._°ŕěH?3ŐĽ Ű 6hœyôŃĆňԓ[o˝Y쏋/ 4ž^ýőş ʰ—/_Iš1§ĺ˘Eó%ůUÜzë-ş_a?Ć\™ĺʕŃ-t(Ą,”?H“‰u‡~Ăe˖5ţÇĽ:ÚoÆ ú?ňçĎďx|Żżůs˙nÖý”eĘÜšę}7ľjŐÔβ5kÖé~׸q3k#Cd°eË:‚Ű#•{ö|&Ĺ4FXX‡€}rŔ€~|_ż~}ô;Đpҥ˓Ršr%#7K–,(ľpáŮż?)Ű ĽÍ+“_e“Űşt[N”šXÎůóéq ˇÝvŤŽ”Šżö/?ŕXhĐ žv b„Ołf-tĄœŔžƒóŘâĹKtŮpœ…éęÄŻílÂH4”ƒ Ő ŒÇčDü†wޙčpĂw UŽ•_ë˙É'ťę1„ňŚhpÄq„`ƒC‡ér™ÓäΝK:wî$áUNŮŠ]ťśą›´L8űZ-‰–—e ľ>ĐŘřÉ'I)ząŽ{őę!á@g<‚8pŽÄzm׎ƒ^‹a[šçÉE‹iy‡H§ X~”ą†ëĄöíŰÉ /ź$ťví’l)ŐŤW—˘EoŇôô8†–-[˜ĎşuëÖqü>üćőë7ęžaBęb7ÝťwÓuŠš­GŒ­MŘŢ8î ŕž@‡`˛p×S‘"…őoP.żöÚTݗôę~Šö:-\Č‚˛¸NĆ~Šăç'ŹW@<7ÁüŢţ~ňc=úq ˘L2 hWÁąƒc˘¸E0ímˇÝ˘íJvËm=:ǡíeç áühÂvÇzÁ5&2xX?ÖшCŁžĂń€ĚQřßاĐŢXąb9Wřu̡k×FĎϨOá¸Ăľžů=¸öŰźył^â\űă?8~O<ŽšüŽ[F+‘ę÷DD,ˆ(Ą ĄlëÖíšę ąˆîˇB×㏷7Ţ;čz1ůŘc퍈'´QÂüt’­\š,‘‹â ĆK˝ô‚ř¸ÅěŔýŠ ý†FŔŢ˝{č4p͚5[oVF¨\š˛Žüąƒ9!1‚čƒ>ŇĘlßž}Ç‘nw4>Zˇ‚Ëp vĎ=ĽŒĺdŰ1ěGŮj]z]N[}ű>łěŕ×ţĺ—nÝşj#6:KŃ5}úŒdďŁ#fĐ QOyĺÇv6e̘I;‡’FÄnHP`Â/Æ Ną-ýZ˙ččz啉:ڍćhź4;N­Žşę*ŁlHOěU¨rĘŽ;Pö™)•ŃĐg*R^–Ĺëú@çÁȑĂ4đ"\Ýş=a”[ôşĚ,&\Ł ÜGšpˇŁhËÎxxđÁfş ř-8.ßzË~ޜׇâÚaYślɞý2ͤ ´ †€ĽW_}Ů(3ŸŐőět]‚ăŠcÇÚ¨.¸ľiÓZr°o!` pž5j„ř-šë´p!ŕFFă°Ë/Ď#cÌr<üÜţ~óc=F{ –(QܸÓőkÝ7qŒu ‰˛M*UşWŽďŠŮ Đ9‹uœÍŠK—ŽzseŻ:5Ś=0ĄŽá–.>Öü¸Á9ŻsçÇeܸľcuUÜLŘGpaž'#íőľ_çËxŔčôĆzDĐ2QX§CuŸ>˝mň°íßG[†Xß~ľ—+BeOA[‚†:txė˛ëÇ-‚ĘŕĹ_Ňkfěç ?ŽyÔů^xaŹśKâXB>o… ńAƒúk€Ÿˆsُk.?ë–ŃJ´ú=šc€%TXzö|Z+)¨4"8FÎd͚Eo0#k0˙¸Œž˜4i‚L:Mĺ1— Fi jí˜Ŕˆ†ˇßž­ýďżżZ;‡QI@şX4Ü#ăEƒő´á6–0úŃŰož9[ŁíѐŠĘ FAÔŠSKjÔ¨ŽŠÁÝôîÝSrćĚ%ëׯ×nŹKŒФăÁ ŒTFC%ćCÜźůcƒíŰşu+ý>kƒU˘CA7őë×Őšˇ‘ĺ—_~ÖŹ9sćԑ7uęÔvĚP‚ŃS§N–ĽK—ÉŞUŤe׎ÝÚŔƒ‘3Ř>ˆŠÇ3Ľo0T0K•*eótDF4źbŰ ’sŞct€]Çńž}ű1z-ŃE[ ă :ސ^yÓŚMúˇćÂüŸfg!’gĎ~CotޢŁŐ°ţѸݴé!‰1r×Ȏ€eźđÂL:"¤`ÁžŢűÜłĎö”şukë(mŰvčvÇ6F§.]1B Ůqě ƄŽŠHa{̙3Kř12żű.ö=4Ł,4ç wmŮäe]Ú-'Ĺpě.|˝vúŃí…ű—_°żôčŃ]¸Đ ˝sç.-×Q#HĄmۇ%ţk˘°?ÎA&lˇiÓ^Ó´ŃëÖ­ÓsćƈŚ:uęčzt ”ńkýă\=yňD=×cdĘRœËQ! ž ĺ~$#4SÁp R­Zľ@ęęZľjxʈăײحltî#ŁFš!Ňm”éř~\7ŹXńž‰áZŋ7ŽZ8ž#­˘-;ăÇKéŇĽő÷b$ôĎ?˙¤A”ŘϑýçuˇĄÂĚý ĆČ\/AdćöÄ´"(7÷îÝŻóŰăűźƒŃÔ8fÍšś#ďË/żÜč~GSIŁw›f.Ń^§… íŁGÔcŮÝpžÉ”)ŁąŽŽ2ށ{ő|ƒ:ŽżśżßüXŃƒ(×FŒŽŠśQ  Ç:?|řw‰ĽDŮ&čŹĹ¨ýٳߖO?ýĚ(‹2ÖéĆľLaŁŁ¸Šžg˝LǏ:u›6­´NóĂß×mt€Ajňă:u.ŹktÂc˙G™…kÔՐĺc´Íőľ_çËxŔń‚ d5X´h‰fů÷ß˙ô܂Ě( B•—ŃÖŁ!–ǡ_íeç*d€Á~]°`­‹UŠR9ĹôYŃÂń]ŚLi˝îGĆÔyb—ü:ć‘ęľ×^ÖLRK–,ÓL9Ŕ3gmkjŰö!=ׇŻk.?ë–ŃJ¤ú=šóÚJ–Îă{é<ܧsxnŢŇ[îÍ[†3Żeşá˝l¸?qâߔĂ͈ˆˆÎŔœ˝H+ˆ†ĺ˗Ĺ2^źřâDm0BęŢÔnü¤řxâ‰n:ż-ڃ˜1cŞ%:Œ Â4h(›3çMĄ” `ڴ׾<睷c’.ŸˆRš:uz`„ćâĹó=u@Ľ5uë6ЁpČƒlDDt~Ȕ)ciăî”q;zćţdĐíô™űS–ŰiË}đMžťÝ?ćöžŠď""˘Ŕ(ČPöěůFďóĺKŒ6ç*ŒJ…"EŠ0¸âyď˝ňĂ?čgJ•*!wß}—Ľ5 ° "˘4ëÚk Éřńc¤OŸ~LńÁéÍNţüůeäČaœś"†P‘>věšä’ŹR´čMBç‡}ű’OĐh’1cF!˘´iĈQňË/ĎQ–đœ¤OϤ‡DDDDDZ­Z5ĺôéÓ2zô89~ü¸Ě;Oovʔ)-ö""˘´ˆDD”ŚÝ|sQ™={Ś,]şLÖŹY+ťwď‘#GŽJşté$GŽěR¤HaÍjQľjeɐ!ƒPěä̙S6mZ't~Š\š’Ţˆ(í2§ůšŕ‚ 4°˘xńbŇŽÝĂrŐUW ‘Wľk×ŇŹŚóç/”?ţD3ZüńǟrŃEíFš4óe•*÷1sĽié|ř\:›Çn÷éž›ˇô–{ó–áĚk‚nx/îOœřwƒQBɔ)ciăî”q;zćţdĐíô™űS–ŰiË}đMžťÝ?ćöžbžW"""""""""""""""˘`ADDDDDDDDDDDDDDD,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆB`€Q ° """"""""""""""" DDDDDDDDDDDDDDDD!0Ŕ‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(XQܔ.]NJ–,#ƍJŚNŽŰ ˇC‡IZÇ}0í¨_ż‘nŤ§Ÿî!DDDDDDDDDDD‰€DtŢiŃâ!í´{ä‘BDDDDDDDDDDDDDä,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆB`€Q ° """"""""""""""" á!"ŠŔ—_n•wŢyWśoß)?˙üł¤OŸ^Žšć)UŞ„4lX_rĺĘeűwĽK—“S§NI˝zuĽGîŽß˙Č#ä‹/ž”‚ ĘŹY3l?łk×ncޓĎ>ű?ůő×_ő5üßâŋIłfȕW^řě֭ۤmŰG“ý=žżdÉ2ç+W.•K.šDBý֋/Î,ůň]!*”•:ujËĽ—^*v>˙ü yôŃÇôń /Œ•ťîşS,X(ďžť@öîÝ+™3_dŹŻ’ňřă$wîÜúšăǏË[o˝-ďżżZžýö[šđÂLrĂ 7Čý÷7”ňĺËI´ţřăYźx‰~˙?ü GŽ•9˛KѢ7IőęŐ¤\š˛!żăÇ”yóޓ͛?–Ÿ~úQNŸ>-yóć“;î¸ÝXÎşř˝œüń§äɓG ž^ęׯ§ëŇI§N]ä“O>Óĺ™8ńEٸq“ą͖;ż’ŁGIŸ>˝¤fÍŽC‡Űn‘~מ}űŒíôˇdĎ~™\}őŐrď˝ĺu?Ȕ)“ëwŹYłV–-[Žűâożý.]tĄą^eŹó2Ҹq#ɚ5ŤDęĉúÝ|đĄěŢ˝G~˙ýˆą/gŐíR˘D1ÝrćĚ)~ř÷ߍőů–,]ş\÷ěŁW\qĽÜwß˝RˇnżĂŻe´ ĺż˙ţ“§Ÿî!6lŇç;vćÍLńšmŰśÇęý˙żüň‹ńťłČ­ˇŢ"­Zľ”o,"&L’3fę~ąfÍęd;uętyůĺÉúxÓŚuĆ>ľ_ŚO]>ýô3Ł,;$5jT3öÓŢÉţćäɓňŃGkeá…Ćçč>‰c÷ꍯ2>_ĂX˙%cÌśżÉú˙/žď¸~?ůäSăř骏‡ $+VHöžY~?úh;yčĄV˛eËçşvěŘ)‡˙ŚËs÷Ýw˃65ĘîâëyĺĘU˛hŃb9pŕ€–EX.”AmÚ´r,W‰ˆˆˆˆˆˆˆˆˆˆR,ˆ(,č\>|¤vŠŰšs§ŢfϞ#Ď<Ó]ŞUŤ"ą‚ÎÂéÓghgŸ‚pC C˙ţĎĽč ‡Óoýűďżľ3qŰśmňúë3eŔ€~(ᝣ}ú<'ŤV}x-ŠŁy…ŃážÝřž)ÚÁŘšóşüŚţůG;]qkٲš<öX{‰JzôčĽËnőË/ŰGF‡÷GRŹŘ]2hĐÇÎMth5VŐž={ô6oŢ;ňČ#mĽuë–â÷ršŰAj@ôĹ_ěú]čü3fźDŔÆ —?˙ü+ŮëIëí řź÷ŢB7n”mÇ5ö—ž={Ëƍ›“˝ŽýË,Ýť÷Ô2Ô ;8f׏Yc”ń/ Q˘a€…ĽWŻgľňĺË' ÖÓQăČ0đ˙÷?Yž|…fa0`Žč.Sćń2`D6 3ąyóښ坣[ˇnՎ?třöď?Đčč˝Vł \wÝľ2cĆ4ý›-Zë}ć̙ĺ•W&ž7K–,âőˇ˘ƒyéŇerěŘŇ­ŰÓF§ňóŽAóç/ĐŃçŐŤWŐě č”ţčŁ5Ú1ŠÎć)SŚË–-[4€ L™ŇşŢ2dČ`źö…ŽöG@:Pń?™!\Țđř㝵s#ýŤV­,wß}—fěŔ˙_°`ąffŔň<őÔ3FÇéý˙VČ1n܋ú ԗ…oĐĎíÚľK;Ƒ!Žč,Ž$Äi9łe˦ˉ@†ýű÷k00ĄŸłƒĎŁ#ŰŽQŁúĆ>pv çĎď=Ă2V<÷\ݡĚĺšçž{4{ţ˙Š+tApÉŔƒeěŘŃ)žcĈQŕŠ;ďźĂ؏hցŁGĘşuäíˇçj f̘ꘅŔ2'těŘYł@˜ß üfěcüŠźűî{ş]ä1gÎŹ¨2eŒ7^÷ý˘E‹J͚Ő4Ť2) A@ř:<.ož9CߋŲƪ ž1hĐY˝úC}ŽŔ XĂţmWŕűą=‹)˘ľÁ]řß^Ó~ýţßmˇÝ"]tQ˛ß}ěŘ1i׎˝/ŔíˇßŚű!2t`ÝŻ^ýŽ;dĹiÓŚąlÓqbĺ˙űŸ–tB9pŐUWeîŁl^*sçÎÓŔ0ŹlĂŕ`-Ű;v•ožůFŸ*THęÖ­%W\q…~ÇÚľëd͚uҧO?ý""""""""""˘D "ň #“ÍŽÍ{î)%Æ IÖŒ´öH͏)ĐŮ9|ř)Q˘xXĆ^źőÖ\˝Ď•+§L™ňJ˛ź[nšŮřŸ%䡇ÚjG2F ›:-ÍQő×_˝ěŢ˝[Ÿ;´÷ň[ëׯ+;wŐß:xđP™5kŚí#€€aXGt7jÔPł+`ÄśŮaŰšóăŇŹYÓŔgj׎%*”“§ŸîŠŔČtn€2eôď?H׌+Ŕr+vw˛Ď4iň€`ÚL˝€Žn,Ÿ SLœ˜4ZÚ“&˝(—_~yŕýŠ+ßŃXź‹|ýő×ĆďySʖ-ŁŰĂĎĺ|ŕĆĺDgö›oβžüU˙˙¸qŁCfşp‚mƒŕŠ .¸@ƎĽÁV•+W2:ĺ‡ęţ˛iÓÇ ƒ€:ÇąŹ€Š+ÝÁ‚ďťöڂĆţ3LGď#›Űô'Á–,YŚÁD`NŰ`…mpÓM7j°BŢ•NĎ)dhŔţ‰ýÔ Sƒźńƛň /éń0rähyţůaž/k,Ë dĹŔ2ö}L  Sš`ßwMœřB˛@ěuëÖ6ŽƒN$ŕşţ!ÓŚ˝ę8ľÎčŃcÁíŰ?’"; ÖĘ,?Öď!Ìre”Ä‚+‚÷ƒ|ůňJ‘"…uę#ƒaYÉÂZŽ2™Á8C&ë1QŤVMÍěƒýeQ"Iďńslá&"™1#Šcń˛Ë.Ői1ě:-oźąˆŽúFÇv:ľu$šß~řáűŔ˙˛›Ę˘PĄ‚ňęŤ/Ëňĺ‹#žŞÂËoEgp׎őńŻżґóNĐńj—.żM›łĚÁÝ´i“ŸAÇ3FyĂîÝ_K¸9Üväá‡J´čŕĔ Čň€ŹX+Lš€0ŕšdÁŚË.ťL†¨-”€ŒąXÎŢ˝{–ďÍ7g§˜&ĆŞWŻW2R #ŔȑĂSW˜ęŐŤxź}űÎdďĄcÜ\žâŋŮfŰ@ ö×÷ß_Vp`˙^°ŕÝGƒLČv€l-°cÇW 'ŮŔƒ6Ó @2Vř˝Źą*ƒ™A €ţnÝşÚ~nΜšéqúőë“"K hëńÇ;ˆW6q ŽŔÔ Ë—ŻÔÇ%Js,ĎdaN‡‚l){÷î“Xʖíißží{XF$ŚĎąÂą€ŕ-ț÷réŮóŰcż%–SLŮđá5Ŕ‚ˆÎsšŠŁŐƒ§Ó°B6„É“'IťvëÔ~˝;ŠSS8u$˘“Ó)›D(áüÖ5ŞËĽ—&ýĆ+ŢwüœSÖ ˆdɒP¤Č ’.]:ŰĎ]sÍUz˙űďżI¸VŽLę Egôý÷7tü˛|̜9Íč8î+ĽK— źŽNŃŐŤWëctZťeĽ@G1Ś8LŠBü^NtŢ>đ@#}ŒLÁ¸&d8)X°€D Ó˔,YÂń}dŰ0o,ƒšM—/_ţüóOŰď¸ůć˘gzÁtUŞÜçř>˛dĚxíň…Ť^˝ÚŽS˛@ăĆ÷ţ'ŚŔńsYcU˝üňä@0–­WŻglCk׎ŐÇĄŽƒš5kxěą $2­Zľ: cÍlcÇúž[°—0M‰użˇÂď6 xfľmŰv9tč°>Ć6túŔÔ#DDDDDDDDDDD‰†S„‘'{öœÍœŕ4’?^Đš>l؝ eˇt RĽJ~ˇŚČź‰p~+:›ďźóÄL{oç’Kœ;yÍÎ\ˇÎFsD¸9z>{ö$-FöG’ÍŁč=Ś˝dX@‡1˛Q ăĹ÷ß˙ŕ8 K4ËYŹXąŔcLIb×I}ńĹYÄoüń‡ą÷Ęwß}ŻpżiÓŚŔű˙ý÷_˛ĎgϞ]ł— řfçΝҨŃRŠR%ÍF€zdýđÖůţýôöË/?Ë?ü¤Hćö ^žpÝzë­ŽďŁăÝ´˙ˇâç˛Ć˘ š1cŚL:]+v—<÷\ǒ_ýU~˙ýˆ>uŕx˝ůć›äă?•PÜöuó˜@V˜PSá8Cf,Ł[Yä‡ěŮs¸žĺ8p@äďż˙Iöş Ö}ĹNѢ7iĐŚ """""""""""J‰`ÁŠIˆÄŻż <žüň<’šˆSŚLÓNڕ+Wé 1íČ,á62ÜM¸ż5Ož¤é2đń÷ßk&ˆDrčPŇ(ňHˇ›u:Ňú‡‚,&gx °g9sçÎ%g—ď°ÄŇž}űĺíˇçɆ ĺÇLńžSÖŚA@f죿ýöťĚ;OoP @͎Qż~]ɟ˙‰Ä‘#GŒď{GƒZöěŮc;e –Ë­9˛ťžé=‘ĺĎ?˙2śçŻâç˛ú]™S‚˜Đ™ď–ĂĚźá‘2×!ܰÎţĎďgLÖcŘś~÷Áƒż W:F€,ˆ(l‘vŽůŠuë–RŁF5Yśl…|üń'˛}űŽÁK—.×Ű˝÷–—ţýŸóÔ1éÄËoľ~ƏNlż™ËŻífí¤g}„łœ‘ţp-^źD†}>M˖?~šúę+ĺĘ+Ż’B… h֔Žť8~‚ě/-Z4—ĺËWę”&ťwďÖl$űöíÓۜ9oËŁś“V­ZH8víÚ-]ť>™Źă:OžÜ:5Jž|WH×h։޽űȏ?ţ$Ńň’AĺÔ)űíčç˛úľ/c?2ƒ<6lŘ$Ó§ĎвŎ5“‚[ ĆŮĎdżxý˝‰P6{e\,’Œ=DDDDDDDDDDDąÄ "ň$WŽłŁąúégكůj‰%/oyň䑖-›ë Ÿ˙úëotşdř嗃:mGž|“ĽsçÇ%áţVLoYłfŃÎôD“+W.ůá‡ä矑H +ˆÉËwüüóρÇŘFŢ˙÷ĺÄö5ĺΝSbS€˜Á—^šÍ؏:Jšreĺ’K.Iö9ťŹvn¸áz˝2ěŘąSÖŹY'ďźóŽüóĎ?2qâËríľ…¤L™{ÄŤçž  čđGpF˝zuäňËCgWˆ˛8¸mÓcǎÉńăÇőqŽ9}]ÖX”Aô“ŰnťEZˇ~XŰ+Żź*… ß ĽJ•Lńٜ9ĎN‹aÍfáä÷ß“hĺ̙”ĺ™O­'T°ŘÁƒIÇN¤ÇDŹŹëÇů5×8gmA@ˑ#G…ˆˆˆˆˆˆˆˆˆˆ(‘„‚NíAtŽAÇŻ #đÝ “Î)@"sć¤é3쌰Bçv8Đi‹Š(%`ćĚ過źe˖I¸Âů­ř˙÷˙ÓDž ’DtíľőŢĚňáĆ:J߄ОeK *řôÓĎ$ó3č žňĘ+ÄŤp–ó“O>ąüÝľ ȌbfŽčŃăiŠYłFŠŕ ŔÔ0áÂ42wÜqťtéŇQ^|q\ŕőe˖{ţŁěÝťW7lŘ@3`8, đÁ˙÷îÇ矞})L~,Ť_eŠjŐĘrß}u˙2d\pÁú7Ď=×_—7>‡iD`˖-ŽßŹ*Űśm—h]w]ŇoĆďٲĺs×ĎîŮóľb@pYd–ť`ň'Śô‰%L‰c2ËM'_~š•,ˆˆˆˆˆˆˆˆˆˆ(1‰YˆU€…‰DçŒź7GϟżŔľ#ňŤWŻ%Ď>ŰWGš[™ŁÚżújW ó:Fö[3X=zTV­ú@Fç„‘-[6 śˇÎo§Š%Âů­K–,•ß?˘ŤTšOQ•*UôÁsçžăř9źß°aciÝş­Ě›wös^ŠXą˘>F§'nNžýö[Yťv˝>.SŚ´\|ńĹâ÷rbż™3gž>Α#ťÜuם ÖíníöŃGkßCv‹ ʸq/:~ć曋ʅ^¨Ă „řëŻă–ĺs΀ŽěH‚@ěźűîÇăfĎ~Kď1U˛}˜üXVżĘ SćĚg÷ÍŰnťUşví¤=&O?ÝKłŒX!`¨dÉâú$ű÷'k׎K6J¤*UޘŽäÍ7gš~Öú~ŐŞU’˝gÍ&˛mŰ6ÇďX˝ú‰Ľ›nşQ§…PŰđíˇç QbŁë ":‡´lů Ţc”tßžýlłěÜů•ŚŮGj÷Ď?˙B;Ŕ­îźó˝GĹëŻĎLń÷ 2d¸8Á(íŢ˝űěoë” vA{÷î“/žH °Ë*‘%KRÇ*ڞp ˛đň[2věx}œ;wŽš‰˘|ů˛é^}uŠ|ňɧ)>ƒ‘űƍĐí˛sçÎëĽI“Ɓé 0ՃuÓďż˙.={öŃQçčnÚ´IŠĎ˜ßńçŸD꜃•ďžűNŸ7kÖ$Đí7ë|đĄíg°Œvűąiń⼺?Ϛ5[.\dű™%K–é!píľ×‰WW\‘/đŰäa—ąáÇ’‡ˆ_°ŢGŒm{Ü`›á˜‡ Ę%›JÄŻeőŁ rҨQCŠQٚ>ŢłgîgÁęׯ§÷ŘÇűöíŻĺU°ďż˙^F#~@Ö dڀM›>–iÓ^ˇýÜ{ď͗ĽK“˛Ÿ”*UB ,ěýŰożUƒ^ŕľ×ŚĘáĂ)§8Áţšqăf‰%,Cƒőő1P d›ĽâÝwßÓ)žÜ`Ý÷ď?Py¤ƒŹ[ˇ^ˆˆˆˆˆˆˆˆˆˆˆâáI|̂A” jŐŞ)kÖŹ5n댭 Ҹq3ŠWŻŽŽ*G‡ů–-_Čňĺ+´Óéö{ö|&ĐĄnÂçё‡Vt‚îŢ˝[ʖ-Ť#řżůć폿ÇHqt(ťýöŰä–[nÖ, čPD§l͚Ő%oŢź:ňý‹/ž4žăěČčV­Z¤řŽ[o˝EÓí#˜`čĐçĽ\š2Ćň˙ĽÓdȐ!äoýëŻ?ĺ˙ű\§sŔh~t÷ęŐĂvúˆD€mĐŻ_ißţq9qâ„téň¤TŽ\IŠť[˛dɢ .‘ýű÷ëçcv$› Č/=ö¨Œű‚NŸĐ´i c}ԕ…oĐߏitŠbô?´lŮ\ˇS°+ޏBˇóŚM›őˇBƒ]ʔšG;^ݖ3kÖŹşœóç/’’2 ë@łfM%VŠ/&ůňĺÓ,ŘW1ĹöŐË.ťT:,6lĐl*ůóçL ű ‚°^°Ż!CCéŇĽßą~ýzýȜ9łąŸ5ݐď8>ţřSi׎ƒÔŠSS—Ů<-Z¤Ç"‚ üȨФÉšĽÓ¸ÔŞ•tÜ:tHVŹx?0…Ś“yňÉŽ1YV?Ę 7Ď<ÓÝؗż‘]ťvÉʕŤäĆ‹$ŰÇJ—.%ŐŞUŃ}÷ŤŻž2ŽƒćzŹ\wÝľFYpRƒŽćϟŻÇĘŞPÓzxu‰ďAY7iŇ+Ć~ˇQłĺ řëÁ?Ÿ|’4-ö+”EÁěRśě=şŢ°ßľjŐF§jɟ˙cý˙Ą7đ^őęUąŇźy3ÝçQöřácŸjnlĂÚrĺ•Wʑ#GŒ×>Ň@œ~üńç@šlʔéeíÝťŻńxaXsˆˆˆˆˆˆˆˆˆˆ(!%|l@Z° ˘2xđ@>|¤ŃşX;ž‘E":Ї (ĽJ•Lń:,;w~\§LŔ(xŒRśŽTĆß>˙üP ´°ƒŽËÁƒHˇnĎh:í:13fĚ(:=&÷Ţ[>Ĺ{ČƀŕXŕ˙˜˙ëškŽÖĺ çˇf͚Eěoű[IѢ7Ʉ ăĽG^Úy˝|ůJ˝ťçžRĆś4ąBç::ŤGŤ,vS`ű<ňH[iÝşĽírÔŻ_G˙ţŘą?¤_żúÚŹY3#î˝.'śkßžĎĆ,{``_ěÔŠ‹NƒwÜŹĺbŔ€ç¤E‹Öśß‘+W.cjtÜ÷Ô tŰu`#¨ű[Ţź—K8şu{Böí;`těďĐŠ‚§@‡3öOLŠăG€ŽŠ˝{ż‘Í›?‘1cv§x˙ňËóŻŇÎ˙X-k´ez >ŘŘÖ /ž8Qn¸ášűîťŸ1d`dî°B`ö”k~X pë•W&űPoŮž}ťŁŕŹ`Á‚2rä0Űu=z<­ëJţŞÁV8ö[´hó ŹŸńăGK÷î=dëÖm:­Đ /ź”ě38Žp|?ůäӎ߃Ŕj척ůD.<űlOŠ[ˇśźóÎťF'é.ÝW]u•vŇ5jÔ@;– ŁžpáÂňÖ[s´ƒ ĎaŒ-Z4ÓQíN€ĎN:Ůč\&ŤV­–]ťvëwdÎ|‘ŃAOż§aĂzš-ÁNŽ9ŒNїeňä)˛iÓ&íĚE&…Ÿ~ú9Y€…Ýoýĺ—_ô˙äËw…Nƒ€÷.˝ôRI šcΜYÚ1äȁő†Qďl¨QŁş”/_Îő;ŢÖóć˝gt˛ltp˙ 2XďČ|q˙ý 4›€ŒšÇ”ČD˙ᅙ´ƒľ`ÁŽË‰ #Řî… _Ż™3ŹŢątýő×ÉěŮoțoÎ֌ čĐGöě[•*Ý+M›>˛c÷Ž;n—šsß2nďhötp˙ő×qÍô€uUŚLi͂€l"áBfÉ“'ęČ"ąoß>ýî\šrÇAqiÝş…ăq Œ=RłX,Y˛\ˇMŚLĺĘ+Ż’űîťWˇÓďđkYý(ƒÜ ü4h€fPÁś~öŮž2mڔ@đKRŚ•ž:%~ËW_íŇ@ [aßmÝş•–#ĄŚ¸‚&°îń™>öíŰŻ˙3{öË40ŹFšëĆ Ę˝iÓ^•YłŢ’ŐŤ?ÔL4ŘvĚŔvCVŒożýNâ!{öě2iŇ XBF#dŠ@ĐUΜ9rľź´iÓ*dF |e˙?|/mŰśI3ĺ0Ľmé|řlşÓ…x|KosŸÁro˝áľl¸?qâß BDDD”ú÷¨Ů .˝4›,_žDˆˆˆˆˆˆˆˆˆˆˆÎg™2e,mܝ2nGĎܟ ş˛ÜŸśšˇťIˆÇâąxx=™ŘĺVŻ„Ÿ‹…ˆˆˆÎ Čdʞ=ßč=˛ÝњѧŽXĹÔţý¤k×'ĽQŁ&˛nÝzÇĎaęÝťwëăŇĽK ."""" éż˙ţ“/žŘ*'NœîÝ{H… ĺ¤lٲ’7ďĺúڏ?ţ(˖­Ď?˙B?Ÿ'Onyŕű…ˆˆˆˆˆˆˆˆˆˆˆÎ é|řlşÓ…x|KosŸáĚ=nœynžv îOœřwŁĹĐ֭ۤOŸ~Lá&ţü2rä0šú꫅ˆˆˆˆˆˆˆˆˆˆč|—)SĆRĆÝ)ăvěĚýÉ3ˇ˙Î<7_Ăýi›{ť›„x,!‹‡×“‰W€…yďG€EI`‘M`ADDDqňĎ?˙ČŇĽËd͚ľ˛{÷9r䨤K—NräČ.EŠÖŹUŤV– 2% °8*É,Ě Šh,‚+`! ° """"""""""""""JSΕ‹ôžŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČAÜcR#Ŕ‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(Mń;Ŕ‚Ů)ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(řĂp$ŽHƒ:ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ[$}ű§%beАÓAj%Q\ŘĹ $Dü@ź,N{|Íú-ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÎmĄâ7đ]jg°đúcOIň(•ŕˆa%&kßžÝíT˜ß“*ü°8ĺűáţ/§ŕ Y%ťž}ťi@üú?‘žR8áţłÓ1~?řs %Œtéҙ}ůáĆÄęýˆ?Ď)Bb•aBż÷ôéSG„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĆŠS§Ížü˜Ć ÄC<,Ź"ů§]^?}ňä韅ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĆɓ'їď6ˆŸń1‹‹HČiˇŕϞÂýż˙ţó­QÂ8ӗčŰ瞡[$"ý;GŠ‘Áâ´ÍóÓ.ď ^éx.ǎŰ#DDDDDDDDDDDDDDD”0Ž=öő™‡ś}ý.‚ăNťźŠ5EˆÉ|ßłmŰśÝBDDDDDDDDDDDDDDD cűöť$)6ŕ¤D/îAV~Xœńz4?Ň)%YTː!Cv%ŒçŸjöĺŰMbŠf*óď­÷NďG%„'Ç÷ě[ďƒ§ z=ý™ÇÖ{Ü2œyž!č–Ÿ]püř?/dȐž„QŞ:yňÔć̙/ěd<üϸý)IY,Ź73łĹ)9€a˝I”a Ä~l˝w{ĚsđE¸,b™nĂ˜)Á+ĘźacČ?|÷‘QŞłôáŁOß.{…—XÇ)xć×!á.Äé0Ÿ‡‚qjҤI ° """"""""""""""J'N\#I™(ţ z+Ö11 ĘwЎżIçđ=Č)9;Eˆuz§›¸<ąŸ*Äîy¨×mů™ÁÂë…J÷NJëç˙Ĺýúőëć Ľš Öż'–ž|ąpŠ °űźHxӋ„z=l‘d°pűťt!ŰÝ;e˛H/ÎY,ŹŮ,Ěű $)‹E†ăÇ˙y!C†ô%„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆâęäÉS›3gž°“$e§@öŠ˙älŚ óŢz Î^œÉBžŰÝť=Ż;ň3ƒE°Ó_ł{=TęąyŒĎŸŔă5k>|]ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(îÎôŮŁ}řfßżˆsŔ„őfýźX>k'œ¸„¨ůÁ"ř˝PY,ÜŰeą°Ëd‘AÎf˛0łX¤?räČs™3_\Kˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(.Ž˙kŃĽ—^Ú_’%ĚěfćŠŕě§ƒ‡Ę^a÷Řzďö8XBe°đ"ÔsË`üžšAţĆó!C†źdÜ"""""""""""""""Šštéäř Aƒ&JR>úî̀ŠPýývď[?g÷8î"Í`áöˇéž;eł°Ë\a}ž^œłYXłXXď3ˇL[ślŠ~ÓMEĹÔöíŰúŢ~űíK%ij$D0%Xďƒ3XXłVX_ ÉB‚G3ľHHą°~/Ô4!ć˝] Eđ-xš gţĆ`Ś šŻýúëá'˛eť¤™QL=zěÍ\šrŒ‘¤ ‰ż$ijë´ 'Ď|ԚŐ"8ĐÂ)Ł…Ű´ q™â`a}láhá”ĹB$eö §l™ŒŰExţ×_ÇG\pÁ先ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ|uňäeΜšť$O`jd°pĘZ|ŻŮ+Dě§ńž˝"Ô{ŽŇKä"ů‡N?Čnž•ŕçÁŻŮ­xźnn gn'kÔ¨ŢďÔŠS[„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ|ƒžřęŐk÷“¤žzôŃ˙+gƒ+ÜúöMN1ŃQ8‰(¸2Htb™ĹÂé{ʟ őˇŘ0é÷íŰ÷ß?ü°ŽFšˇŚK—.ŻQT\ńŘcşżűîźß%)°âqŸD,ƒ§qʐ0_‹8ˆÂM4S„„úŽt.ĎӚܝ=N/Ƀ+ŹSƒ˜Że”S†d6nTŹX1ë˘E‹pş""""""""""""""˘ČaZš5ëö]˝zĹĆÓ˙ŒŰqI9%ˆ™Ĺ"8“ĹiഐíîƒŰ=őş'ą °°{Ď)‹…yďpa>°° ˛HosCĹEĆ-#ž>|¸kÖŹ—<(DDDDDDDDDDDDDDD–?ţřă9˛•¤ŕdŽř[RWXƒ)œ‚+Ě÷DěłYˆĂk"‘MU€Ez‰žŸsš8­óš]Ў cŠA´ ć{9•#GŽ1_}ľóŮ3ŻQhÇŃמ#Gö1’ԏ>xťĚN}ř"îÁby.âo&Ѝ§ ń#Ŕ[¤Či÷N­BÄ~´Ü›Ÿšşĺ–[–öíۧÁß_(DDDDDDDDDDDDDDDä}ëčcG_ťőżKň~yóŢ.¸Âúz¤S‚D25ˆ/ü˜"ÄËwĽ ăąÓ”!v­Ó‚˜Ď­Ż™ŸÍôú’4e^OˇjŐŞâĽK—i!CúBDDDDDDDDDDDDDDDęäÉS›7lX7­RĽJKR(0%Č’2 ‚53…5ŔB$e"ˇŔ ŻAnÁâń=ĎR#Ŕ"řy:‡× ¸°0Ÿg°|Ö`ažžÉ¸]h~%J”ŹŸ)SŚ*BDDDDDDDDDDDDDDtžúçŸV~üńćw,¸ý#Iӂ˜Á)Ě×EœłWˆx ¨5eH8Ů+.Ŕ"Ô÷…dávď%ČÂTa}`až ‹ ĚĎöęŐ+wťvíî͛÷Š ĚjADDDDDDDDDDDDDDçdŤřé§>œ}úԑӧĺ§'ţůöčŃŁ_ďŢ˝{çŔwŹ^˝ú˜ĺsŠřW’2VMSX)‚ƒ."™ $á‚+ ‘,ŹĎĂ ˛°{Í.s…]P…]P2\d7h:ËëÖű`ĄŢˇ:ôyëw¤űk`źěbóYëk" ° """""""""""""˘đ„`a„``a}Ď-ŔÂú<řąÓMBÜťR¸ýˇç^ߋJ<:ó#Ída}îgV ݎŕ˙›ŢĂc/Ë ,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˘ °°{픇ÇÁÁ^n"ţeŤHČŕ ˆWg~8AÁŻE\awo áuj§ď ľĚÁÝ0ȂˆˆˆˆˆˆˆˆˆˆˆˆˆčünpE¨ÇĄ‚BMb˝ˇ>>íÓ˝Űcˇ×źźç‹xvä§ ó}ŻAvŻ…›Ý á5S…[ŕD: 8 ƒ,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÎOá 8"¸e~p›:Ä)ˆÂ.cE$÷Ą^ ~l÷\Â|ßńîÄ÷;ČÂú8’Ŕ pĘXa}/ř}§Ď;ýąyŸˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(§CźîÔŕ%ŘÂ-Ł…Ý˙đHá5ۆ¸<—0ß÷Mjuö‡3eˆ— ‹H3\˜ƒƒ'Ňť|Î횸ź/.Ÿő‚DDDDDDDDDDDDDDçŚH‚܂+ÂÉ^a÷NŮ|&Üŕ‰p˛Vxyîő˝˜HÍNűXfł°>ö„‘Ţá{Ňť|ż[€…ÓknŻ{Ĺ` """""""""""""˘´-ځPŮ+œ^s ”€Saźîgڊ„ÍZa•ő~gł°>Žäýt˙.Ô˛9˝ćĺ˝h0ř‚ˆˆˆˆˆˆˆˆˆˆˆˆˆ(1Ä* ÜĚv ^‚!"ÉDN…—ç^ߋšDéŒ7!ÔÔÁ#É~ÎßÚýÓg$Œ÷‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŹÂÉîpZźe´~|ZźHD3ˆ—@ŻďĹE˘uđÇ2›…˝XxyÍË{DDDDDDDDDDDDDDDÁ˘Í^üZ4Á‘<öňÜë{q•AO4Ů,‚ŸGóŘÎiqŽđa°ĹZ$Áv^Ś q{ϏŔ §×źźw‰ŕW6‹ŕçáN/és§×ÂyŸˆˆˆˆˆˆˆˆˆˆˆˆˆˆČ*œ)Bœ^ çy$‘<÷ú^ŞIÄ VąĘfÎ{^žŃvŻĹ"čÂîšÓk^ŢKU‰`~YÄây8ŻEăt„Ÿń;Č"’çNŻyy/ŐĽ… ˆdŞÔ ¤đ\Á """"""""""""""ŠD,ƒ,ě^‹u`…—÷S]Z °0E›ÍÂî5ż>ęuŻďyiĐB$A‘~Ćé5/ď%”´`áY8˝i`E$݇zˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(R‘0x}=Ú Šs"¸Ňb€Dš%"Ó~Ä#cƒ3ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÎm~Ä2ŁE8Żš˝îőý„“V,ŔĎ ?_őžŸCDDDDDDDDDDDDDDçžH‚b™Ő"Ň×˝žŸŇr€¤‹â3~N„ Á` """"""""""""""ŠF8A §}~/ŇŔ ݟIHi=Ŕ˘ ˛ˆŐ{‘|Žˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(^ƒü¸ő^8ŸIXçB€…)–^Ţ÷ú™Xţ=[˘ Jđ#đ៏0KŕWV‰XS0x‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆb!܆X]Dňš„wŽX€ßSw$ęT Ř """""""""""""J›âtŕw0Äy\çb€„|ŤĎúńwDDDDDDDDDDDDDDD^DĚÎßĹęłiš`‘5¤Ľi?´ADDDDDDDDDDDDD”6ĽfđA,ŚńăoŢš`aŠG …ßODDDDDDDDDDDDDDhƒXä|°€hb,Á """"""""""""""ŠDŹ˘ůŢs:¸Η đ+ DDDDDDDDDDDDDDt.đ+(✎€ó)Ŕ‹ ]Q"‹EÄyXa:,Lń Š`ĹR<ƒÎŤŔ Óů`abđQhçe`…‰É1؂ˆˆˆˆˆˆˆˆˆˆˆˆˆˆčŹó:¨ÂŠöhADDDDDDDDDDDDDDç3Va€…7 ¸ """""""""""""˘s*B`€EätADDDDDDDDDDDDDDiƒ)"Ŕ‹Ř`đĽ&QřŒçu%&;œŘ)ODDDDDDDDDDDDDDDBz!""""""""""""""""W ° """"""""""""""" DDDDDDDDDDDDDDDD!0Ŕ‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(X…Ŕ """""""""""""""˘`ADDDDDDDDDDDDDDD,ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆBř.ŽŒ­Ö$Ý?IENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/library.png000066400000000000000000005212161522167256300221520ustar00rootroot00000000000000‰PNG  IHDRţŚ#Xć´˘UIDATxœěÝź[uŮđ÷.PJi ĘŢZ6”˝A6˘(ˉ˘ˆƒĄ"Šâ‹ˆ”Š â‘˝7RöŢŤ‹R {ŢűŢ甄$7wŢÜ~żŸĎšÉ9INrr“œ_ž§k*N×TÁ¨@‚?P  ţ@ü€ $řHđ*P÷DgŃ%4Nu˘â ‹´ Ű ˜°Q+Pi>Ű u5ƒđJăŘNíK¨-ĺŮ.‹ P —bś@Ç&ô AŰ R-Ö! Ĺ9ôҞ÷]¸XÜ´g(gą -ށ”ś¸Ď‚=MÓaĹ*´8VZëž ů´Ö î, Ĺ%ÄҒűŮVŰH€č,Ú*hӒővúđĎâ>iÎ}lévę(ÖŇ Ns.ߊĂ?9 ŇŸEšý„‹€Ö˛(2M˝n OtÖđHSîW[-Ű—¨TÍ Ű4ĺrmľlE茁”ĆާEľ\k&ZK{‡b{}‹jšŠĐŮÂ#­ŇiĚz*Š-@{j‹ö]Ő-œßÔĺ:źÎFiiXgQ„Zűňm­ĽÁ™śů´Ćú+Bgš´eŕ§%AĄŚ.ĐŮ´Fžś˜×”e:ŹJĽ´$ôÓÔé-™×’e*ASB4­ćięôŚ.Ó!UrĽš­šÚzzCóZó2‹BsÂ2íčin¨"Ă?•6iÍĐOKŚŐ7˝ąóC(ho­†in঺•§Ő7˝ąó;œJ ”4§ŇNsĂ=‹ş @%jËę>mިđOĽ…QšŹin¸§9Ë44˝ąó*U[Vři­eęšÖ˜yJĽ„PšŚéŇĘă-Öœe*Au3—iŽ×5­)óšJŸ´´ĘO[7eZs–čČÚ2ôÓÖăuMkĚźEŽŁOZ3ôÓÜyoĘ´ŚĚččšS9§ľC?͝Wß´ĆĚ[¤:rđ¤)ĄŸŚŒ/ę0PSćtt­üi‹OkTjĚźEŚ#OÚŞĘOSĎ7f^}óšŢĐ<€JМŔLi@§ľƒ>Í Ő5­1óÚ]G ž´V•Ÿś:ßPЧŠU€J×Ô LCÓŞSë…{ZŤPc羍Ž­Ý ,5q~›XT’ÖŽňÓÔiĺ<ĺÂ> }j9֚Áa ˝4'ČR_đ§Ą[ U•YŚŠaŸŚTjĚxc絉ö“´e•ŸŚ~ę ů”Î/­öSWđ§ĄŕQ*3 łi¨ęO]Á›ú‚?Uő,__埶¨Tn<5q~ŤiĎJk‡~šđŠď´´âOaاŽóÍ­öӔí- tM łÔŐÚŤ)UŞ8_jWýiîiCÓJϗOMœß*Ú+\ҔÖ^ĽÓZ+ŕSxZ.ĐSzZZѧĄŰŃĐm.=_Ą Łil˜ĽąUt âÔWá§ô´đ|u+Öwžži™×*Ú#`ҔĐO]ă- ˙ÔUá§žĄôz[ ¨ôrĺŚŐGč荚ţi¨ŞNU#Η€3¤Ô˛j@uMkĚxcçľX[‡LZ3ôSW˜ŚąÁŸrCauŸŽ%—ŤŻňO] ŇyĺnOC€ŽŞ%ÁŸÜx]ÁŸú‚;ĽŐ|ŞĘœo(T×icB?2üÓ=ľć†~ZłşOá´\¸§0äÓľĚeŰňŤ4 T:ż”ŕPéšü)7˝p^—’ĺë ţä–Ë…|şĽň!˘ęT&Şë6t)8mh~u™ŰŮ%ŐžuÝçúćľH[…LÚ;ôӘ*?…žŽŠá*@…§Ý †şBCŠärŠ‘ÓËţ:šŚ„WŞ9=ŢŠ*˜ż `¨*š\}Ő}Şą\JŠE­Ŕę;_nźąóšĽ-&Í ýގ$ě“;_îéZfzšP.čÓ#}öi(TWëŻRÍŮŢB@Ŕ˘Ňœ°J}—)×Ú+Ľş6šĐźôi¨\ŕ§ô|UËÔw˝Í 5fźąóšŹ#šúi¨ĘOi…žŽŠîPĎ´0𓛞ƌ3ŕ´ÓN[kľŐV[sŕŔŤôěŮkD—.ih—.]—¨™Ý; ć4WafWWW}\]&̝;睊S§žöĘ+ŻźxĆgźpçwN+X.Â;š›ęű”śűŞJ W˙iÍ @ĺĆ;ŻÉZ;´˛(C?ĺZp•k땫čS8żWÍĐ=ˇěÉ'ŸźĚąÇťĂХáďÖ­ë¨@ť[° ę‘ ĆÝ}ŃEÝuć™gžŸ> őĚŻć¤â`OšŠ@ĽÁŸŇV`)Upř§5ƒ?­úɝonč§°ĘOˇTžŐWnzTřé•[ćŽ;îŘ|Ô¨Ńű÷ěŮs—@‡1wîÜ[yäákwÜqÇGÓ§˙ĚMľƒ?…aŸŸŹ˘Ş`HŠéáŸrAŸEţYÁŸ†Î7śĽW( óäĆËľńęV2=ŞűôţdzřŮrË­ż ş@ÇU€|đţ?€"Ř3;-ŹTüYęn–Ríś`ÍiÖŘóĽZ%řÓ-ľŽślńUzžĄĐOař§[Áxî|Třéăß˙ţ÷—˝éŚ›NZe•UżÝľk—ĺZdü‰P.üSŐŔJC@)•Ľ’i)••oěź:uMmŻ1˝ĚĘM+×7­\żľ”jWꞆ~şNž<ůĄ€ĹGdE&OžrBú´cT÷T;w’RůÎS9ĺ˛+)5? Óęş§Ö×Řö_ĺŚ×ľąJŤţ”>…CLj?]Ÿ|ňÉÝ\âđ´Š ¤šsçĆ/ڞĄŞŞ*UW7ť1,śşt钺ví_BfCϞ=SˇnÝĐzpř“O>ůâ†nřß´0KŐ~"[RX‘'Şúär(ŐéӌJa埜.%Óş¤ň•zš:˝ŮšűmBcŰ|•;_W{ŻÂóu š`Oˇ’óÝ ćÇŐë{ßűސC9ôw5ç{$ EfϞŚOŸžfΜ™ć͛—€~ ebŠ})öŠŘÇ"T"´Že–2şć3÷<đ@´űĘľňĘ|R™óšÓ†žüŞ/S×r]_Ł5ˇ¤Pk ˙”+§Tx>†\đ'×âŤ_œ˙řăÔ§Oß˝ĐlD˜1cFNÚGTţéׯ_VhšYłf޸ÄKœž†~fÔ ó?9żŕ“Ą*‡‚ ĎW—œ/*=_xZßůRMţĽ]×ÔşŰ捞pPCé§Â@Pi(Şűt˝ĺ–[6ú€–‰ ?S§Núvű\ě{ą-’Č’¤‚lI*Ÿ;Š+ĎR8­Ą‚8ő]žžéÍŇÚšŰćŤ1Ő~J+ýäŞýäNsŐ~şÍš5çwÝşu•€&ŤŞŞĘBóçĎOŔ˘mż˜şvmíßďŔâeÁ‚ŞGúôéu|ZXá'Wő'Wí§´ęOaĺŸĆTýŠŤÚOSŤţ´KşÖJ56éT8ż\0(ĘUűŮLčš'B?üąĐtą/Ć>ű&Đ|‘%‰LI*ŽúSZí§´€M]ššyiŹ&ݧ5*ÔŇ6_šń.XŚÜňń tŮjŤ­÷M@łhíOŽőĐ2[nšŐ~Š c’šŸQŠo™TĎxCӛŹ=kwiĆôÂę>ĽIŤZ-żN:é¤ezöěšKšlúôé*ý@űfěŁ@óőęŐkçȖ¤‚ŹIŞ?“ŇP 6ö4¤­‚?--yÔÔ Đ˝fčúĺ/yť4ŮÜšsÓěŮłĐqĹ>ű*Đ|ŸdK"/Ó˝i—lqÖĽMÂ@M ţ´e"ŠĄrH…ăĽ}Ő˛cřđĺ f̘‘€ŽĎž -S-‰ŹIiţ$ĽĆeWÚ:?ÓhMM/ľT}}Í §—ş–œNďśÝvŰőďÖ­ë¨4ITY°`A:žŘWcŸíÝťw€öRUU•ć͛— ńŮ4†ęęęl]ştɆnÝşeC=˛ĄkלjDŐ|‘-ŮnťűßsĎÓŇÂĚIU*ΠT}rZj‡ş|2˝Táôş–i­ľ…ęY֒¤S]•€ 7z:ůä“×J@“iń•Ĺ> @{ˆ°ĎŹYłŇG}”ŚL™’ŚM›–}&đOĚ˅~BœĎ…ƒb™X6.—uÄźŽä䓿›Ë˜”Ÿ)ÔŇĘ> efZĽjP{Wü)Őw˘[ŹguÖY-MżÎš?~*GěłąďĆ/( ľEHgć̙­ňÓř C´ŽŽęľ}űöíU€>ɘ<–fN楖i× ?ĽE𧡄TCa r­žŇ€VM@“̝;7•'öÝ>}ú$hMř‰Ą-D(†˙İ(dLĘePę+OTÚŇ+ĽâĐOť‡€Ú"řÓÜ*>]9”.›==zô‘€&Qí*“}€ÖŸ3§OŸŢ.Ÿ7#X?héßżęŢ}Ń4Şú$c’Ďœ¤ş3)ĺڀ• ü4VŤƒUý¤ć„ƒęëyÖĽ[ˇ.Ë& I„ 2Ůwh-sćĚI}ôQť~֌ëŠëŒë^>ɘ”z ľfŽĽMľgđ§­î`śŢ.]ş.‘€&‰ží@ĺąďĐf͚•ŚM›–•¸î¸ í­ cŇŚY–öДŕOSoT—6ž_ş\ď4IuuťśZ‰}€–ŠŔ͌3Ңˇa„r“ŚfSÚj~ł—ofi­}ăZWšŢj…§˝¤xŕĄôż˙=ž^~ů•4aÂř4mÚôlހýÓ°aĂÓꍯ–6Ůdă´ŐV[¤ž}ű&`ŃxçwŇ=÷ܛyäŃ4iŇäšaR6}Ȑ!5Ăŕ4jÔćiťíśM#FŒHÔ/Zlu„ĐONܖŽ]ťŚ^˝zĽvR.sR8´Ö/nZW‹ŻŤ)a™Ćö5ë҈ÓráÜĐľĚi÷ONcčV0Äř€8?w@#|đÁéŇK/K7ÝôßF˙’¤OŸ>i×]wIŸ˙ügÓđáĂt“'ON@eĄŸ˙tDú‰đO{hdđ§đ|šŕOJu‡~ŤŕOáônŠvHđh‘ř0űƒœšžxâÉÔÖ[oÝtÖYgŚAƒ%¨d‚? ˝úęké›ßüv4[o˝e:őԓSG4qâÄôÚkݧUW]5 ˛Lbńՙƒ?ÓŚMK'Ÿ|jzěąÇSKDőŸ3Ďüi0`@ e?ˆlî"ŰKßž}łĄ­51řSřYęý´{đ§}ę#5Na¨Š—¨S´ůöˇż“&L˜XkŢĐĄËŚmˇÝ6mšĺč4|ř°´Ě2 ˘ż˙ţűiܸńéJ÷Ţ{óöIE—{ć™gÓŃG—Î9çě4räJ X4žő­“Ň /źP4míľ×ŽŮ7™š"މäB?ኧžNUUUYՐŽäžűîOguvöŤź=zŚSNů^=zT‚Î$öĹşB?ŁFm–vÚiÇ´ÁëýĎ~ňɧŇwܙy乢ĺcąŽsĎ=GĺX Œ˝ujO?|Ş$ń]GGý„¸˝{÷nŻďeZ’SiZyÚ6ŇÚʝolşr­žSńg`œŞř”3nܸtěą_N|0Ľhú˛ËŠ™~tÚcÝüˆoşéżé /N“&˝_4oذĄéŇK/JK-ľTj‰¨l°óÎť§ćřӟ.Nk­ľfęˆvÝuôńÇSó㧝vrÚsĎ=GĽWüŮmˇ˝ĘNżůćSSÄ~~čĄG¤ŠS?}žţöˇżNŤŻžZj-Ó§OOxhŃ´ÓO˙a5jóĆŽ"}ýëßĚŞ唆œ~úÓ3Óý÷?˜ßyçӉ'~+Ń9u֊?çœó›ôĎ^U4mĹWL'Ÿü˝,đSŸíýěgżHożývŃôC98}ë[ßHmíÝwßMˇß~g͗˙¤ńăǧ?ü(őęŐłć} ´ćšŤ§íśŰŽfŘ&+]Oąüŕ”t×]÷äÇ?ü°ŹU4…ŕOý⻉ٳg§JÁŸţýű§śôIş¨â355­âOaŤŻćTüŠď|jÄô"ëgk­hîÜšé{ß;ĽVčg‡śK˙ű_Ó^{í٨_Ä2ąl\&Ö?~BÖBlŢźy ¨Q)(BC1|űŰßÍöóő×_Żh™ącÇŚŽŚ4d8hPűôź‡öňŇK/§ŤŻžŚhÚ&›lœ.šä‚C?!–‰eă2…ŽşęęôňËŻ¤śď9"°tČ!ŸMüă…Y˘¨Ó§M›ž‘n˝őötĘ)§Ľ#ŽřBPhOń٧J ý„¸­q›iآţhÍ´‹Ë/ż"˝ňJńAžĂ;4yćOSŸ>}RSE_é_üâĚt衇Mƒ{—\ň§TŽÂö`Ď?˙|vşńĆ-óÄOĽŽćk_űJZwÝuSŻ^˝Ň†nžüĺăt&ż˙ýyE_ěFĽŸłÎ:łIżň0`@Í˙럥VX!?-Öën îůÎwž›U)*lX—7ß|3ü éńÇ;^¸čźć̙“*M%Ţć´21jĘŇ”)SҕWţ˝hÚöŰo›ľŒčŇĽiŸ˝&Mš”ţńŤÓţóŸ´ŐV[ĽSNů~?~\şçžűňËÄuíťďŢiذaŠľlłÍViřđĺ\nĐ –ľƒÎ,*űäB>ĽmąJm˛Iqđçůç_Č~]ĽĽ;ŠĄC—MgŸý‹Ń;3{ěń˘iŃŢŤ9ĽÝ#ü—ýň—?mőčŁ˙ËŽcĈŠ5]tŃĽŮş Eą5ÖXŁć˙řĐŹg´č›2ĺĂüü ýđ‡?N˙ú×UYh•ÖzŤ=ľ$D“kľžĚ2ƒł%=ŞŢĺ㇒çžűť4a„lźŠ-Ůsâ67看›ö ţ´f˘ŠKÉPËĽ—^–fΜ™2d™šl§6)ôóÚkݧżţőĘŹ5Çüůółi?üpv0ďG?:-zčgÓ¤IďgÓăŢĺ—˙5}ď{ßI­eß}÷I[o˝U˘uÄc]cÚťŃy”ŤěS—e—]6 :4˙ĽT´đ{îšçŇ&›l’¨-*¨TWW§nÝşĽöI=Ó=÷Ü[4>jÔfjďU—¨Šľůć›…rî˝÷žôŮĎžZKTřšöÚk‹Ś ><ýęWżL#GŽ”ŸĎÝ+ޏ2]pÁEůiъôć›oÉţßW˘Eń4OźĎ}żŮďż?9ýä'?K'tbÚa‡íĘ.óż˙ý/~ú™5ŸƒćŚ–ŠŰˇ˝žĎkŤJŹŤ:ľąJŤřÓĽ‘Ó€ĹŘŹYłŇM7ýˇhÚqÇ“ľęjŒ§žz:ýĺ/W¤x(; Uh=öČNc]ÇsT:óĚłňóâŕÝńÇľŃ×ÓÚ˘ĘQ„‘ŚN–Ÿśß~űŚď˙¤˘ĺ˘‚I,7aÂÄü´˝öÚ3zę˛óW_}M:űě_çç­śÚj5ŰăOiüřńéâ‹˙TsőŃôŃG§Áƒ—Nk­ľf:č ÓFm˜Z*ÂSwŢywşĺ–[ŇŰoż›&Ož\ł-ű¤!C–M›l˛qVQiĹW({ŮŇŰźŮf›¤ßýî7ŮAäżüĺŻYĽ…¸ß˙řǕEëˆ/˘rS\gTw‰j ={öĚ qűďżoZe••‹7ްćőăćüx´űęHÁŸŸţôĚt˙ýćÇwŢyÇtâ‰ßjđr/żüJúŰßţžž{îůš}anÍ~5¸ćžn\óąO>źvĽ˛7ß|Ť¨RJ|ÁvÓM˙NoźńFşě˛żdűKźÖü×Ҟ{îž_. wÝuwz衇Ó+Żźš>ţxZ¸ŒĘdkŹązÚvۭӖ[nQ6„Yzߎ<ňˆtČ!§kŽšśf˝5{͊Ę/˙űéśŰnOżúŐšE—˙ăŸVZiĽTNÜ÷Ë.ť"?Vb=~5Řą<ňČŁEă;í´cjŠwSüyôŃÇZ5řóŢ{ďĽéÓgM;öŘŁ‹B?!k_üâ‘5_€?^ÔâëĹ_Žů˙V~ÝąŸ]wÝżk^‡žĚŞĆ{’Ľ—^:­ˇŢ:iˇÝvÍöĽ†źńƛéúëoČŽsâÄ i̙Š_żžY ľÍ7ß,íłĎ^Ů˙źRŻżţF:üđĎĺÇă5ŕÁďÍţŸ^pÁ…é駟ŠŮż§fçý÷߯ěuŽűDÍAIiÚ´éi‰%ŚŐW_­ćŔŔöŮm˙ľŻ_úӟł_ Çścü.?ß1üü翏ů>ďťůđσ>”M+˝ŽĂ;4ľD;*žúć@§SřKú°Í6ŰÔH‰_tX́čŐú ťîşKZf™eňăąÎXwĄř%˙˘íBÖ[oÝüxüçÜs“7n\şňĘż]ćß8>-ąÄuŽsúôé5ŰćÇEĄŸRĘšüň+Rs<űěsé¸ăžR+ôSN´^;őÔ6¸\T9ďź?Ô9ęÔŠé裏Ťú)KŻşęęš”?O,"hPřz°?ü0UިbuÎ9ż) ýš;wNúĹ/~™UjČE]\gčçíˇßIß˙ţ)eC?Ľ"č÷Ăţ¤Á/㾥\č'ôîÝťÖŻ ďż˙˛ËĆm‹ F…âőœŽçƒ>(Ę.-ľĚ2Ĺëˆjr­iذĄľŞ×D;ŻxoQN„tV^yd~:´vľüŕ”˛ĄŸRń?ěë_?!͘1ŁÖźÇ˙ŻŇĐOЍśóî¸ăŽÔßţöwu†~ÂÉ'ŸZ6ôS*ދ|íkßČ*Őçă?Şy]9šÎ׊¨äwúégdՐ€úŐő˝@cížűŽéK_:ڍ‚oŹ3ŞĄßu×=ُqâ|éű÷#Ž8<pŔţŠ%Zz۝ĺçŠÚ}yŻžújŃřV[ŐÝ #>8ţđ‡§7:‰ľŃR˘Ô–[ŽÎŞÂäźňĘ+ŠľDť˛§žzŚŢeâú ŰlĹíüŢ÷NJGyTţCńc=žľ ‰ĺ˘BQäËŮ|óMłîőÉm›QŁ6KŸůĚţiŔ€ŮÁĆ+ޏ2;č–séĽNťě˛S>|xjŹ8€Ą˘ÂŰ•u˘šR˜ŚNý8]wÝ é­ˇ>=h_&\wÝőYłşźüňËŮi”!ŽĘ K-5¨ćâÇŠOŸŢŮôłÎúżŹZQN´=ůüç?—6ÜpƒěśDux\sL˙űß[˛×˜1Ű':ˇx~Żşę*Yk™ρ'Ÿ|şÎžő].šÎ:ë¤ŃŁ7ĎîOdr÷/Ä´¨ŹsńĹ”mÁ"DmϢňY´Ň[nšĺ˛ýčĐ!ŮühýS ZrÉ%ł/÷˘şO,U> _+_{íľŹâöŰo[Ďm_Ě[nšáYë˝WžVÄëMTüȉpĎ{ďË–/U† 6,­ťî:‰ĹCi𼥠LSEmĎ=÷H×^{]~ZT<öŘ/g­2ˇŢzËěůĎšXś!ąŸÜwß§!śŘ'ă˙ݘ1Űgżp}úé§łĘ}šöbNüĂ.LßůΧ-˙"tUď E[Ŕ¨~m˝^{íőtá…§wŢy'??ÂJ;î¸Cˇ+^âýDźÄ{#VČöů؟BTş÷Ţű‹.íÄöÝwŻ,\üôÓ oSî˝Iü˙˙ĺ/ĎŽšíżŻó:˙óŸ…m[×Zk­´öÚkĽ)S>Č^7 _˘uY´C‹–Ž@ÝZ#<“kó{Áç§ĺÚ~Ĺg—¨Z(žˆĄĽÚ8ř_„´îĹE`QšÔě-~I^¨ž JT“Č[â@Ö÷ż˙ݚŹŐéç?˙Ezä‘ÇňËĹź‘#WŞuů8ř]ßuˇD´ĐjȀý‹‚?!B ‡zHV'碋.Ššo'em}râb„„#ÚâœuÖĎó•P˘˝Č:묝žő­ď䗉qˇÜr[úâLuë­ˇŐ ]EےvŘ>?_*|ĺ+ǧ^x!?í˛Ëţ’U7Ş+¤"8ôŤ_ý2 8°hzč,Źl1Ď?˙÷i5VĎOŰlłMkf.›ľ,ɉŠFcĆlŸčübŸ* ĆDpŽRƒ?aĎ=wOÇ˙ľüř~&Ťr⦅śżŠŔĚóĎżí×u‰}闿<łV;­RŒ3ŚćľgŐôîťďÖŹk|:ĺ”ď§#–Ď/Ą‡e>őÔÓůi`¨/řöŢ{Ϛý˙KeŤśĹ:‡šľËšďžű˛×żBĽÁŸ]wÝŠŢם¨†SXQ&ŞóŹ°Â Š%&O.Ž"´ä’K¤Ö­˛^ýő˘çwˆ0p úÓeŮ˙šM6Ů(mˇÝśiÇÇÔúßâ óř˙V(ZńśáZýőj^Ł6ʂEą|¸ţúž_g˙ţýł•ožůvœ}ł0•†^şfßúz~ÚŰożU\ŞŻ_lťóÎű]QűĐÜí.­úˇöÚk×üoým>ěá¨ŃŁGeՌrâľ5{+­´b×ű˙‘G~.?-:ęآŕqź_ü gôč­S{zřáűS%h­AäÂ?^xI~ĺ‚9­ú ­ýŽ&jNśĽÝo°V_@§“ű|ÎŇKŞsŮżţőoůóú2dHÖv#Î:âˆĎ–˝|8Ťďş•cŽůbQű¨ĐóÍož˜?HŽ>ú‹ľ‚KuůęWżRëŔű[ŒÎ@…˘RNSDP¨ĐŚ›nRú qĐđë_˙JŃ´¨ÖSz€ľÔЧž\öŔjař)D Ł0ô“sđÁĽž}űćÇŁ \i:§Ň0ÝŘącSĽęßż_ÍëÁQEÓb_ţęWż” =řŕĂőŽ+ž—†~B„h˘RH„ţN;í”ôÇ?ţž(ô“aĂBQ…Ť>ńúúĺ/WgŤĆ¸Ţ¨bR(J‹АŔťďž—uí´ÓމŽ)WA*çÉ'ŸJ-őÄĹ-WXaDjm}úôIç÷Űěů•ćʉr÷?üh:돳Ó~ű˜ţň—+Šţ'/ź­OfՂr† Y&pŔgj­+zQyŤp݅aĺ‘#WJ‡vhúÁž[ł?žWúÉ)W}čĂ?JőůҗŽ­ú)wťĂńÇľÖuÄ˙ۨ€•ăőäŒ3NOƒ-Uçő-żüňEĄŸĄĽ¨ Xčý÷ľú€†´fx&Â?ńヺ~TӚĄŸ°ˆƒ?Ął´úh˛Çű_ž%T}âWëĽA€Ž.BžxâˇŇI'}??­°˛Î*ŤŹ’?üĐF­+ʍšRŮyńëý}zMŤxTږ-*+•Ű?B8…• ˘UP´ć*gŠĽ–L+ޏBŁŽóÖ[oŻó „Âë "¨ŻCTÖšŠQ1$Â#Ë/߸ \GŐAâő T´âZk­5ÓÓOÚNpâÄ őŽŤąíą"„đÎ;ß~§ć€üűiҤI饗^.Ş˘JCĽ˘˝OˇnÝę]&B<Ńv0ˇżúęk5÷cbÖÎ(”Vű‰°âŕÁƒÓ¨Q›gí¤rnżýŽ´Ď>{§–¸ăŽ;‹ĆŁZN[ˆ6•_řÂçÓa‡’Đ}ôąě˙ca;­œřßrŢyĚö‰ŸüäÇů/ËK˙?E˜ć‡?üqŮë+ ú„řŸX„ˉĘIń˙ë˝÷ŢŤŮ?&eˇ)n_ІžLßpĂňď…Jow´ĎÜ`ƒőË.{öŮżLľÖZk”žĘ*#‹ĆK˙Wm/ž‹Ď2ĽŸ#bZüˆöU Áľ—€&‰ SŚĚ͏đÁ”ŹíEŠÂVXáżřeÖú*FÇůœĎ~ö°T—Ň"qÝ­ĺěłĎJ[o˝UjŽmśŠť´q´ýŠƒ”ąôŇu$_f™âňS§NËúy7fÝޘ6mzŃ´e—Zv٨Ň՘Ţ|óÍü´÷ߟœęRŽ’AΤIľ/wŰmw¤Ćř裏_T‰đĎăZé'ŕWbđgȐeëœm˛ ƒ?SŚÔ_íŁwď^őÎá…Óu×ý;=řŕCYř§Ľşž°ě˛C˛€Aae˜]pŔţŮů{ď-.šžëŽ;':Žhƒőűß˙!?ţčŁ˙ËŰşBž ‰J4…A˘řzűíŰśm_TśŠ X1„)SŚÔź–—@ϖ[nQ´LTűičĂn„x~ň“ŐűŤőXwĄŐV[-uçŸAóâĂwTjL˛ &dÜËm‡hT(Ź7ś’PTĺ‰ IÓ§Ď(¸Žńe—ëvA…–YŚyízT4ţĺ/—ľgBŃŞĐ“O>ÝčjVɤIëœűvĄĽ–Z"5G„.şčҢ×ԍ7Ţ0í¸ăŽiÍ5×ČŞňÄv;˙ü?śIđgë­ˇŹyM;?͜9+饗Ҝ9sŇŁ>Z´Ü;ěUs˘cűú׿Vóš|tţ ăˇß~;}ď{'§łÎ:łŃáŸýÄe ƒ/ń?ě+_ůrjm_|iQŰĐíśŰŽÎ_ľF°)Bi…U ÷‰e–)n%!¨ßţöÜÔTż˙ýůE÷}Ŕ€ţ頃ŹYßfYđ)Zý}ôŃGiˇÝZ'ĚXzťŁÝ^]ď€E#~”ÓPËí†Ü}÷˝éWżúuŃz"”óľŻ}% ůœ{îďňóâ´ľ*˙4ÔźBDvŚÍ~5ŃVŸž~€EfÓM7)ö…Hă€T}­3Ö\sÍtƧ§ŤŽú[Z{íľę\.*áÜń݈6ŰlÓÔ<÷ÜóYŽœÉ~ř§-Ë"lÔ#څ<účcľŚÇAţ{hÚđáMk…T”zŕ‡Ę.•WâvŠ€WsŹźňĘEăĎ>űl‚R#GŽ”–ZjÉüřŹYłŇ+Żź’*ÍSO=SśúWTyńŗŠŚ 6,5Gl _c×Zk­ôłŸ‘ľ:Znšáů°T}UČZ"Z+młÍ6ůńh3öüó/ÔܮNj–ÓćŤ2Źžújéŕƒ*š­öŽ:긏uWCb™ŁţR­e# Vß˙ô抶“ŃR.7\yĺßëý2ý˝÷ŠŽ…­)GŽY4/öŃÂÖ`uß}ĹďMâ=ÍqÇ“ľL‹ĐO(ýŸÚĽ˙ËcÝu=VÇ÷•tÄ_H?ţńOŇ_ţrEš0abÚ^KĂ3ńŕ/yvQeđűë[ßȂ=QŮ焎/ú@ŽňO†Z˘“rÚ$Kăg@§łŐV[¤ž}űćÇ'Mz?Ýxăňă˙űUe¤­żţzé˙ţďéĎž8kÉŃЇĘn¸1[wN\ç¨Q›ĽE->€˙üçż,:đřšĎ}6}á ŸË~őŸs×]÷Ô:8X—ßţöź4}úô˘i˙řÇ?kUďŘvŰ­‹ĆKKńΝ;ˇhźô@|܍’Á…fϞ]ó%Á‹Ś 64m°ÁúŠ9vÝu—˘ń¨Ú×[*Ş%ěśŰžŮÁćhsőŐ×ÔŰöŒÎ%žťl°AŃ´ąct4Xúă/*ŞĆŻ ąOE@ŚPsŰ`M›VüÚ0dČ2ľöý¨ŔR.@ŘZvÝu§˘ń‡z8Ťü“łęŞŤ¤•W™¨ Ç˙ŐŹÚMĄxMţĘWž^3ď›éşëŽŻů˙óf&‹!ÎÇ´˜˔kqu˙ýŚ›nş9ľśxďPčľ×^ËB-QQ§Pěwńž!†B#GŽ”?ááhÕ3uę´tůĺWÔşÎř_úšĎ}1vŘçŇřăl™\Uź¸žÂJzařđÚĄž˙ü翊ľDkÄŘď ýîwçgŻ?…îšçŢôôÓĎdíFožůÖěu(ţÇmŻĽp/źđ˘Zí˝"čSŘĘŤ\ř'.sŃE§–P˝ˇa•UŸ úôé“öŘc÷,¨‘­8vÚiÇ,œsË-ˇä§ÇÇřPúŮĎÖ¤ƒÂńköK.ůSŃ´ÝvŰľ(pÔRQąçá‡mpšĂ?$kK–óˇżý=;¨–3xđŇiżýöM={öŹšŸ‡§?ţńÂüź˙űż_ĽM6ٸÁŰýúëŻ×\öói÷ÝwËÚyĹ/ůďťď˘ebýťíVŞéÓ§oÍÁϏóă˙ú×őŮ´UVY9­śÚŞŮśżě˛+ŇřńŸV@ˆƒ˜?ź{ÍÁÔuł§˙ţ÷˛V/…Ž<ňsÍîďó–[ŽÎˇi‹/ N8ą́‡dŐ˘âˉ^x!ýőŻËn{ Ď?˙|4:đŔ‹hWu÷Ý÷äǟxâŠěľ˘5ĹÁ÷¨hUŸŘGGÚ<5×mˇÝžíCńźĐ}÷=˜… ą|Zk­5Ss”śÝ‹}ë–[nÍZ,F5“h˝xÁ× ľŚľ×^;Ť.ôŢ{ă˛ń˙ť8\QřE$_oĎ<ó§é”SNKÜ5íż˙žůuÄu“Ď:ëěôď|;­°Âˆ4yňätýő7¤?˙ůňÔZâ:?˙ů#ŇŮgZIđĹ_Ź™vTÚwß˝˛ŰýÜs/Ô =EKĹh=´˝–†g ?ĎäÚ{•űŹ›VŘöŤÜgĄŚüiXGţh4ËQG™nşéżůVq,~˙‹_œ™Uľxěą˙ŐŹŰ5rȁ5­—iŇşăCë~tzÖŢ#'B/QU§5ŐŐöŞTT'Ę"@sńĹŁ¤/}éŘěö…C=8 ĺPĆvůĂ.L'žxBëˆƒ-]sĐňĺzsĚQľZ­łÎZEĄžh•Ăž{î‘N;íä,ptĆ?N_ýęńůj@Qéß˙ž!ĘŮa‡í˛ SKœzęÉéČ#Ę?†qݗ]ö—l('nç÷ż˙ÝÄâ%JŠ@XźŚ´fŔŻ1UpVk^đ'BCĎ<ó\z饗łĄœ\iîÂ_ä5Ĺ[ŒNçwAÍ~4'Ÿ7onúőŻ› … ƒ9m!^ ˙üçÚűp=ł× *K˙ţýÓ9眝UŽůç?ŻŞˇ}V9ń|Ţnťm˛ö[šjmmţ‰Vv?ýéOŇ7żůí˘öYQQë™gęo%šűmˇÝŚhZtă=Jaŕé–[nˆşœt҉iŔ€ůń]vŮ%]qĹ_óă.<ě°#Š.•…ć̙“fĚh–_`zä‘G‹BÁR* 1ęׯoúÁü_€öŸ‘âóKsÚ ZzéAéŘcIŰożmËDř§gĎ^YĽŸ–†~â67÷űŠVٕęÔAŠřtJƒ Ę~5•~râŕ_´ŹŠĐGs?0ĆAĂßüć÷ľŞÝqÄáYűŠE-zmśÍˆ*{íľg~<Şoü×kśÁóÓŽšć_ŮÁÇľ×^Ťě:ăW5ÎůĘWž–ŚLů°ě2ŸűÜeƒOGůůŹAi+¨’łîşë¤ /üCÍŔS‹BBĺ~řaék_űrjŠx~\rɅ5ŰáGYۑúD˜éç?˙iQ;ƒNË/ż\z÷Ý÷˛ńāü–Tßio#FŒHcĆě~őŤ_— NÄqßý׊ć8p`úÎwNČŞŠÔŐo‹-FeĄsÎůMj+QŐíňË˙Zë~FĽŁÂP•#*˙D™ř=÷Ü=wŢůŞ‚ż<ÝlłMjţg}9ŤbuŰmwdÓś ˙ŹˇŢşéüó—ílHŻ^˝˛÷(Ç{t­ęu1ţ˙wVśŻDű˛úD…ĂýÄ˙đBGý…ôÔSOŐ<Šë t„˜[+ř~ţóŸeďł"¨UŸĺ–[.űżŻOĐÚFŢ:ľ§‡ž?UŠř,ĐÜŕĎÍ7ßؤĺ#T_8¨ąâ6Ó0Á ÓŠśQMŁ0Řń÷ż˙#?Žć`×iMŽÚżäƒdĽĄŸ 7Ü }ń‹GŚE-n>ôĐ#ůń8xxŇIߎuPq§Ć¤ýëÚ4věŮx=óĚłŇe—]’d-gĹWHţó%éŇK/K>ř`úđÏ˛J@:řŕƒ˛6XĺD;ŻŘ\vŮĺéÉ'ŸĘ~ĺŘă`e|ŃżÚ Ńĺďż"ÝyçÝéÖ[oMo˝őN֎¤oß>iȐełŞ%űîťwŤś2dHúăĎË*ü÷ż7§—_~5˝˙ţ¤4oŢü´ä’K¤5ÖX=młÍÖY{3%…_Qő'ü Ń‚?aÇwHÇÍÚE(aöěšiŮe—Ššo§Ď|fż4t貊Ľ˘jɊ+Ž˜ŽšćÚôÔSOg!ÁîÝťeűlr"˜pÇwŚśA­6Ú =ţřEÓŁ•-ţ—œ{î9é˝÷ŢK÷Ţ{_öż}„IŮkvUUuÖJjĽ•V¨ůźaÍËŰe˙łr˘ThëđOüťôŇ kžô$ŤŘˇp?ř M:-ű’ťńúaźřT—¨Ň÷ý8`˙tă7e˙Ż'O~?k—í6WXaáz˘˝×’K.Yëňń?6ţżE…żxoíŔfΜ•UůŮlłÍґG‘­ŁľĹ˙ôoű›iżýöÉÚíEĽĄxŒŚOŸ‘ÝîŐW_-{|˘kŽ!Đ~â;š3f¤J"řÓ8mĽŐĽ‘óş4â´K㚥kÁinčöÉ´n%ÇsçÎ{0”ř裏ŇQG—ƍ+n/3dČ25ÓżöŢ{Ż:Ă.9q€đć›oMřĂ‹Ú{…¨ňÁ–¨ ÓY\}ő5é쳝űxíľW':§XU˛ÝvŰŤěôÜ/ŃJç74˝ÔC=œN?ý§ůń\pÁů‰Ž)ޤÜzë§-‘âľ>B‹¤,xŤ‹°SZů'Äó"Útł}:ę7}úôZ•š;ި\m ŰRϞ=śŹ9‰ŇÁS?9]P2TrZU0Tœ–ŠŽńúNKϗj°Ĺ˜Š?@§ż„˙ŐŻ~™žő­ӄ óÓ'Mz?ýâ˙—ţô§ËŇ6Űl“śÚj‹4|řđ´Ě2 ˘FŔ'ÂBńŤý{ď˝7[žTbÎ9çěNúŠEEݍb‘+…ýÖ[oga)‹Ž'BšĎ?˙|Ń´]vٹӆ~hšş*˙œ{îo€ĹFT@Ż”ŕOSŤľ/΀Noäȕ˛Š'Ÿ|Zž˝UÎĉ“˛ 714Ĺz뭛Î:ëLĄčä˘eÎjŤ­–ľČĘyë­ˇ:ˆhĺřÜsĎĽ—ČŞ3śeëŃŁgÚsĎÝä” ˙ôęŐ;GĽUŕiońă˜Ô̜93udqý§ń€ĹBTţ9÷Ü_ĽK/ýsúë_˙–ć͛—šŁgϞ鳟=,kÖŁG,ZkŻ˝v­*/돳NŮů™^ÎnťíœŢx㍴ćšk¤Í7ß,m°Á‰Žá?˙ůoşçž{ËÎ;äÓRK-• P„z÷…‹˙㧝vrXœD¨fîÜšůęĆMT^Ví§iş´Âr]ƜŻď´K㚥kÁinčöÉ´n%ÇsçÎ{04B´đşüňżŚ[nš5͚5ŤQ—‰›Ń2ćČ#HÆ KYT?:űě_çÇŁĽŮľ×^čœ˘mT˘¨ŘrČ!‡§éÓgԚ7fĚöé;ßův§˙u ĘS4G„~>účŁÔĹ8#üÓzöěąeÍIUÍ0ő“Ó%Cő'§UCuÁiéęŻď´ô|ŠúćeTü;ÇOß˙ţIéßřZzđÁ‡Ó㏏M/żüJ?~\š6mzśĚ€ýÓ°aĂÓꍯ–6Ýt“´ĺ–Łł–?t “'–_~ů,Ě9cĆĚÔŻ_żě5{ˇÝvM[o˝eʋ`̀jž –:’¸MíúéLTü€Ĺ˜Š?PšTü %˘úŒ3RG?čiď^v–Š?ťŢ1PŻ.]ű›  #ąďĐR´‰Ŕ͢ś(B?‰ŕ,ĆşvőŐT"ű.­!7ŃbkQ‰ëúiÍŃ`1}Ó,X€Ęű.´†^˝zĽnÝşĽéÓ§§ůóç§öŸkű÷ďďóm+đÓ XŒůr*“}€ÖŸ3—\rÉÔˇoßÔÖâ:âş|śmś",Ćzöě™f̘‘€Ęű.´śĺôîÝ;͜93͞=;ľŚXoŹ_űęÖ%ř‹ą(㿎jŻ2Î@ËĹ>ű.´…ćDŽé̙3'šűÝQ|†Vb1ü´ ÁXĚĹŻ­˘‡;PbŸ€śA>}údCUUUš7o^6,X° ŞŤŤł!téŇ%â‡*1ôčŃ#„}ڞŕ,ć"D0kÖŹě  c‹/OhoŕÉUîĄc­Rż~ýĐńŮW€B‚?@ęŮł§*"ĐÁĹ>ű*@ŽŕéßżęŢ]Wpčˆbߌ} ŕ7pŕŔÔ­[ˇtąOĆž PJđČëÚľkZb‰%Tţ"öĹŘ'cß(ĺ H –\rÉÔťwď,:ąĆž(ôÔĹĎ÷€˛ú÷ďŸzöě™f̘‘,X€ö­˝úőë—íőüęÁƒfϞ óçĎO@ۈś^QĺGľ- ą€ĺÂQůgîÜšY(†ŞŞŞT]]€ŚéŇĽKÖÂ+Â>1DŔ.*ý4…ŕĐhLčÓ§O˝Ž ¨8‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*P÷ĐTUUĽ 䇏Ąşş:?@{éŇĽK~čÚľk6tëÖ-?Ä8Ŕ˘&ř,2sçÎMóćÍKóçĎĎÂ>ĐQ†ĎË˝WđO÷îÝS=RϞ=Ŕ˘ ř´ŤúDŕ'U|¨TšJ•sćĚÉŞEř'†´Á ]̞=;;(˘˛MÚă˝n Q ¨WŻ^ŠwďŢ  ­ ţm*?1TUU%čě"č>sćĚě=p„€€ś$ř´‰řľóŹYł~X,Ĺűŕ\¨OŸ>Y €Ö&ř´Şř…s~ćΝ›`q 3f¤yóće hĐZ€VU~âWÍŐŐŐ řTă#üÓˇo_Ő€V#ř´Šřs€ň" ď›çϟŸúőë—ZJđh‘ÂÖ@Ă"0ďŁ#üÓľk×Đ\>QÍś`Á‚4mÚ4Ąh˘xďĽă=5@s ţ͒ ý8PÍă=5ĐR‚?@“ĺPD{ ůâ=ľđĐ\‚?@“ā‰éÓ§ ý@+ńh.Á If̘á×ČĐĘâ=vź×h Á Ńâ@ÄźyóĐú⽜đĐ‚?@ŁĚ™3'€śă}7Đ‚?@ƒ˘íŔ̙3Đö⽡öş@cţ š5kVŞŽŽN@ۋ÷Ţń !‚?@˝˘ÍŔÜšsĐ~â=¸–_@C€zůĽ1,ދ üę4{öěTUU•€öďĹă=9@]€:9ȋ–÷ä@}€˛Tű€EOŐ >Ý@sćĚIíí˝÷ĆĽx0;6MžüAz˙ýÉŮôe–œ^:mźńĆiŤ­śLË-7<Ŕâ"ޛ÷îÝ;”ęŇ Ëu)sžžÓ.uŒç†Ž§šĄŰ'Óş• 1o`œÎ;ďÁ´ŠyóćĽiÓŚĽöňć›oĽK/ýSzřáÇľüĆoŽ9樴ꪍ&X 0 őčŃ#­ŁgĎ[֜DŮűПœ.(Ş?9­*Ş NK‡TÇx}§ĽçKŐ7/#řÔ2cÌvŠřł`Á‚tÁ§ëŻż!UW7řůĽH׎]Ňžű;îčÔ­[ˇYŻ^˝Rż~ýĐ::Kđ§k(1wîÜÔÖŚOŸžN9ĺ´tÝu˙nrč'TUU§kŻ˝>[GŹ :łöxT€"q@Ą­ƒ4Qé';cÇ>UkŢ&›l”śŰnŰ´îşë¤Áƒ—ÎŚMžüAzć™gÓ˝÷ޗü‰Z—‰Ö_?űŮ*˙a˛W_}-k[ˇúꍼîÝť'€J׿˙ÔłgĎ´œV_ĺç ţ@…k6_çŸAVé§Đ +,ŸN8áYŕ§>Ď>ű\úőŻ“Ţy罢éűďżoúĘWŽKí-ś×+ŻźšŢ~űí4uę´4{öěě`L”1bů´ÚjŤŚ%—\2ńŠoź)7žfť L|Pj ˙űßăiěŘ'łóŤŽşr3f‡´¸şč˘Kł ÔZk­™śŮfŤ&ĎoO/żüJşűî{łó°_ZzéĽđ)íž őt–ŕŸ<EćϟŸÚŇŤŻžšţým¸áúéG?:ľQ1"ô›ßœ“~ň“ŸĽ'Ÿ|:?ýúë˙vŮeÇ´Ę*Ť¤öňä“OĽącÇÖlłŞ˘éłgĎɆ¨TôÔSO§uÖY+5*uíŞŰr{‰VÎÇOMŃŐW˙+M™ňa:tHÚgŸ˝@CÚú˝:Py|ë äUUUem¸ÚŇĹ_Zs=ŸţH!*ý46ô“Őt~řĂS҈Ëĺ§Ĺ:ŁrI{yôŃÇj†˙eĄŸŽ]ť¤W\!ľiV1eÓM7ÎĆťté’ÝŽgžy>Ýu×݉öÁđáĂҐ!ˤ­śÚ2tń^=Ţłä¨řäľučç˝÷ĆĽącŸ*ší˝šÓŽ Â?qŮOü^~Z´vŠëXnšáŠ-M™2%_mhŕŔţiˇÝv-ŰÎkęÔŠéöŰďĚ*˙źöÚiĺ•ßL#GŽ”h{L{íľGčlâ=ťJ’@ŽO@^[xŕÁ˘ńM6Ů(kÝŐ\ë­ˇnÚx㠋Ś=řŕCŠ­˝üňËůó;î8Ślč'DřdçwĚ*…W^y5@K´ő{v ˛¨řäľőA„ącǍoˇÝśŠĽśÝv›ŹŇϧ×ńD:č R[úřăiŮiÝŇ2Ë,Sď˛ ČZM͙3'őîÝťÎĺbŰżôŇËéő×_Ď*͟??őęŐ+-ťě˛iľŐVM+­´bÖ:Ź>3gÎL/žřRz÷ÝwӇ~”ć͛—úô铖Xb`9rdZsÍ5RˇnÝĘ^6Ú¤UWWgaŹ7Ţ(=˙ü ŮíůřăXςtŘag÷ĽĐ´iÓj–{žćúĆeçă> Đ? 6<­ľÖiđŕÁŠ1âv?ýôÓéíˇßMÓ§OŤŮŽ=łËF(lĈĺSsL˜01ýűß7fçwÜqű´Ę*Ť¤r÷7Z‚Ĺý?~BzöŮçŇű￟f͚•mˇĺ–[.m°Ázuťr&Ožœ^xáĽ4nÜ{Ů} QĹjřđáiýő×Ë`9'NJ×_CÉm”.źđ’üřžđšÔłgϢeZňŘś–Ř.ąŢ~ű4uęÇYť~ýúćď!C†4¸Ž?ţ8[GTćŠÇşk×n5őŇ5őşŮsźľÄm|őŐWÓ¤I“ŇŒ3kśM×Ôˇoż4tčĐ´Î:kĽĽ—^şěĺâőă˙[ř:uÜqGgŰů駟IŻ˝öZÍí^łžîŮăšĘ*ąÍ׏ő8ľözrâńîšçłűűZź>Äă?tč˛5Ű~­Ź­‹Á ŕWUU•ÚҤI¤ÚONTý)žŽIŠ­őčąđŁTbr!‘úŹľÖšőΏ ŔÍ7ߚŚLů°húŹYłÓ›ož• ÇÍŞ Őu](¸ďžűÓÜšó‹ŚGč!†qă&¤^x1íąÇnŠoßžőݜtŰmwd×YŸEuĽú裊Ů׾Ţzk§ŃŁG×XŠ ÍţóߚŰ=/?mţüŮéwŢ͆6Ú mśŮŚŠ-=ńēéąÇ/š6}úŒ,řôÚkŻŚvÚ)­°Âˆ˛—}ěą˙emß"DT(ˇ"Ź3fĚiĺ•GŚćjÍÇśšĆŸn˝őö4gÎܢéS§NŻ^ζպ뮝śŘ˘îÇ;śĹý÷?PňœŠĘn Š~-1wîÜŹ˝ŢťďžW4}Á‚Şšy×<&gˇu‹-F5řúëŠđXá~9ţܚçěälxć™çŇnťíRgˆ¨ľÖűâ]wݕ˝ŢŠÇ>Zưţúëdű‹‡ś~ĎTÁ Ż­"|đAq°e鼼–Šj!…&Ož’Úڈ#ŇŤŻžžżóÎťłv^ Uě¨KTŠ 0q?ʏâ iäȕ˛€O‚"¤ŠFÜrËmiď˝÷ŹUŮ%2wŢyO>‰ĐĹŞŤŽ’UbłfÍĚnë[o˝îžűŢ, R—W^y% s,ťě´ĆŤgUI˘şHaľ˘gžy&=ôĐŁŮůž=ťgÁŚÁƒ—ÉŽűƒ>ČB(łgĎŠYîůÔľk×4jÔ¨˛×żVżăŽ;łe6ÜpýŹzRUՂšűó^Ö-îĎO<•UÎYnšáŠ-Œ7>FŽ\)­łÎÚYŢxL^~ů•ôěłĎ×Ü÷Şt×]w§C=8ŤŔT(–‰ŰěŸÖ_ýŹRQÜîI“&f•¨"(s÷Ýw×<חJK,ądöœ?ŕ€ý˛Ë\sÍuŮiTŽÚgŸ˝óëíŃŁGţ|k>śÍՓ"œîÝťŚŐW_= 6,ť~8%=÷Ü YP*śWŘrË-j­#ŞďÜ{ďýŮůh}ˇĆkÔŹcٚőő¨šíS˛ YTČiI՟ŘF7ß|KVA),ąÄ€ěš9hĐÂ׈¨ĚUwâšůĐCdϡxž×%‚Ną]ٚRě QÝ(*ďD+îsěł7Üpc:č ł Omąž¨¸uűíwdŰ>öľ¨ŒűBlű>ú({ţE¨§Ÿ~Žćš58Ť@ç'řüňJŤ–T‚ÚˇšíďC„/^zéĽ,Œ-‹ţöˇdőWYeĺFˇˇĘyđÁ‡ł˙ę3fűl…"¸đŔfEk­őÖ[Żh™gžy6ۨŘcÝkľý‰6W÷Üs_"ŠJ(&ˆJ9ú‰Ę-ĺÂ!>úżěü€ýŇŢ{ďUTĽ%*ŰD{ŤnřOvˆ@ÂjŤ­– Şňš6mFÎ8đŔĎUމہŒűî{ Gmü)­–-ÍâqěŢ˝{VÍ'Â;ŻžúZ *Ű=ôíŰ'íż˙~EÁ ¸ýË/ż|şöÚë҂Őéő×ßLm´aśÎ\e—Aƒ–ĘśQŒ×UíĽ5ŰćˆpÖ=÷ܓOâ~F°¨đąŒŇÚkŻnşé欍Y„V_}ľ˘ý ‚T<đPv>Â+{îšGQ‹źűDőXGC•Śę3aÂ„Ź‚NîvE Ż0$ˇüňËeŻŤŻţWVčšçžŤ7řύmśŮިbW<ףĽY´7‹ĘXQ…)îŰ.ťěÔ&ë‰]ŽBŇîťď^t{cݏâŠ5ĎąëłJF–üX)2!Ú•Š0ƁîŸvŰm×ZÁœ&ĺäÂĺD5’ŃŁGŐ9?Ž?Ba̘1e[3EfťíśIK.90­łÎZőśúÚjŤ­Ęś§ŠÄRK- °Œ÷^j+={öH›mśYŮyԉŔÍÂŰ0žÖüiÓŚf§b)­–ZjŠ´ďžű¤#<"[Ws´ćcŰožůfúřăiŮůmˇÝŚl€+ŞĎlżýśůmUúçxŽEXlëÂĐONTĚÚa‡O×ŃQ…čóŸ?"í¸ă5ëÚŽVeʰÄKd˅h3WŸhŻWW›ž+E0DXiÌm˛žâ…L• )Ĺś6a‡~H›T{ cü ţym}aȐâţšŠ)-­{ E••öÜ#Üň™Ď움zőZŘękÖŹŮYűĽhĎtůĺW¤ťîş§ćŕýÔ˛ëxýő7ňŰŃ&Ź0¤T{KćC9͏YčĘąrrwCŰ*ˇĎŐeÍ5Wϟă7Űd=Ä ąD˜°œhÇW.€@ç%řŇę h7oźq;öŠüř=÷ܛvß}×Ô÷Ýw_Ńřú믛ÚS´Ű‰ĐśŰnU[yď˝÷Ň;3&L˜”ľč‰ö;Ż˝öZ5jłZ-ş ŤE°ĺă?Žózz÷î?m}–\˛îvNQi(ZHM›6-MŸ>=M:-ťM9ŐŐUu^śGşC*Q$WšĽŽę3M•~ꍭĽrbűD›ŹÖV¸]ëž?5͛7ŻÖźhOíČ"”íŁ˘Íو#˛@T„1ÚBKŰć˜2ĺƒě´gĎ^ő>?CŸ> ˇejâvćOšËEŤŽUNϢ}^kˆƒ˘ş‹ý%ś×ŒÓÓäÉSňëoh[•kĎ˙4řVßśiÉz˘RPŽÝW„ _|ńĽŹ˝WěŤo˙`ń řäĹAäśüńV[m™.žřOůńącŸĚŞţʎ^óÂ:Ď<óLQ(n´ŽZâşă ŃÖ)*ÄźňĘ+é‰'žJsçÎK=ôhęÓ§OZuŐUó—)Ź"ó\köěڕJ˘âĚłĎ>—…@ŚM›‘ÚÂ̙łňç[ŁÂHG-´ä6D(#‹ącŸČڟEĽ§B„––[nšŹTKCRíńŘÖ%÷P[SŸŁšŕĎŹY Ÿ7}űökđrĺÚž5EUUUzůĺW˛öb“&MLóç7?ŐP(,BLŃ*.öďÂ}Ł5×áž]vŮ9 IF jܸ Ůś˙šU8ŠvauUę óü ţymü‰śNoźařÉ9÷Üߌßüćœ&I˘‚ÇŻýۢim´~˝íˆÚS6Ř`ƒ4räČôŻ]—Ô˙ß˙/ ţ4w[—ś˝Š Ă˝÷ޗUÉYrÉ%˛öKöOK-5(Ť@să7%ZW„źV_}ľŹ˛Óťďž—ŢRš7oAŕˆi1ŒšR3fűŤÝ”ł¨Űćž,X° ÜÚRC"¸Ó\Qeč?˙ůoRʉ@ÍŇKJ ĚÚśE şäĺZő)JoďÂeę;ţÚŇőÄkÚĄ‡œľ|űí¨&6ᓪJóÓ;; O>ůTV=mŔ€ €ÎOđ($řäľÇA„c=*}íkßĚŢyç˝túé?M?úŃŠ˙Dč'.óśęÚľKú⿐:šeD5ŽçŸ1M:=Ť„’Ť’Ťn•;žđ…#SsDű­\0¤WŻži‹-F§•VZ1_m%'śYKśŢŠ6S,ÔŻ_ż´á†dC„šŚL™RóÜ|7=űěó5ĎĚôĆoŚÇ{,=şIëmĎÇś.ń˜G•ĄW\!íşëΊ9˘ŇŐôé3őœ)Ź‚ŐT>úX>ôłňĘ+eĄŹĽ—^şÖrŻ˝Öpč'ÄcWßkҜ9sň…â>śĺzzôč‘UŠ!D łńă'dmŔ&Mz?kgvűíwŚý÷ß7Đů ţ…ԁňÚŁUĚ*ŤŹ’öŰŻřŕôSO=“žńoe­ťË|ó›ßNO?ýlŃôŃŁ7ĎoK“'OÎŞŤÄÝ›Ş°˘É AKf§Qš#Ú95GT™É…¨śÝv›ŹúLi0$D5”–Š€KP¸qă\ž1•N:›8a“¨ötŕŸI}ú, y˝ňĘkŠŠÚóą­KT “&Mjv…ŞĽ–Z*;PNiľŞRQÍŚš˘N4hŠ´ÓN;– ý„ĆnŻńăëŽÇ㓳ä’Kśůz E 0^ďöÝwď´üňËeÓbű6÷u€Ę˘˝#PČ' Ż˝"D՟hůU(Ş÷œxâ÷Ó÷żrÖŽç­ˇŢÎŞÄçcZ̋e +ýä<üđŁéöŰďHm-*wDč%†gžyśÁÖDóćÍË*ž„¨ě“ŤňV^yĺüůgžyŽŢőDx śCih!֟łÔRu‡Ţ|ó­ÔRjÉÝć‰'eC]˘ęÍe—]ž=n Uš¨Ň­—|đĄŹ2O9˝zőʇOʅMrżÖŻ+OӞm]VYeáă­Ľ^˝ţJ9Ż˝öZV…Ś4đUŠÂ‚Uéů矯óň|đAÍĺ'ŚćĘmăh…Vß2ăĆ˝—ă…^¨7źűNî>śćzâ2 Ёď˝7Žěeă94|ř°üřœ9m ăü ů„äuëÖ-ľ‡¸žÓN;9m˛ÉFľćűTúÍo~ŸŽ=ö+iżýʆ8Ób^]˘2ĘŮg˙şÍĂ?ŃŚ+Ú…hŻsÇwŐYA$ÚńDđ%Ba­ľÖ,š!˘UW]ʈęAĎ=÷|ëšőÖŰÓ-ˇÜ–ţţ÷…–XâӐCQʉĐŔ“OÖ˝íšb˝őÖŠyü~”źëŽťĘśoŠPĚ]wݓľ/ŠĐOŽJPgÁŚh­íź}ôe—ůđĂÓĉ +ŘäŞŢęŮłGvZW ŹÖzlťu[0š;wN“珚R8pa›Şűî{ Î°W„Űî¸ăîtĂ ˙ÉśKĄĺ*Eˆ%ÂAĽ˘^˜’ÝŢ\ĺ‘ 7\żÎ–K•lčĐĄiŮe‡dσW^yľćń›–V[mľüăŸ_|)͛ˇ0¤ľŃFÖZDzË.›U¸‰çŃ˝÷ޟ=nž‰ŞJńKţÖzl ˜ÍçwÓŤŻžšzôč™V\q…F͏çó;ěn¸áÚŰ6/;9rĽ4bĈ,Վâyţúëo~˛|×´éŚ]´'‹çy‚âyüŸ˙ܔmŤaÆfëŐóĎż=gÖYg­ôÜs/¤ćˆçaěw´ťćškłu ´tV•+ŽăĽ—^ʞłą˝"´×ŐV[5˝üň+Y{żhŤ5`Ŕ€lťÇ6š0aŇ'÷­GÍ}ۢMÖŰfuÖÉZ!ĆăóŻ]›Ö^{­ŹýZ„‚>üpáv‹çGˆyQe €ÎOđ($řäľ÷A„¸ž/ůŘ´óÎ;ŚK.ůSnhH„K6ÚhƒtÔQ_HŤŻžZşűî{ÓYgý_ť†âŔýŢ{ďYsÝ÷dî#ÜŒʉ°Ć6Űl• JŁúýöŰ'ŤčĄ…‚”kwA§QŁ6ŤU5("ťě˛sVYhöě9eoÇK HcĆlŸŽšćşÔÖ[oÝěą[X…d~zúéňmʢ˘Ó&›lœ:Łxî´Ó˜ôß˙ޒŚLů°ŢÇmôčQYXŚTlÇ Eđ'BB1„¨ôłĚ2Ë´Úcϙ|8 îÜyç=Ů´ƒ> _!§ĄůpÚkŻ=ÓmˇÝž…jęzŽ÷îÝ+ŰçĘ˝V^ydÚnťmŇ}÷ݟíŁ/˝ôr6Úb‹Íkîϒ-ţÄvŒ Ý#ÔŽÄ4jÔŚŮźĆ6ß|Ӛű;+kˇAˇRýű÷KťďžkQűžÖ^ĎŚ›n’…Ť^}őő,´ôđϕ˝ŽUW]%{ž°xü ţy4ˆ …­¤ÚC´:óĚ3ŇřńăłÂŘąOdđŁBF„"ÜF˘ÍÔV[mUs~ůüeˇß~Űě´˝Ă?QŮeŸ}öÎŞ¤D՟ &d÷ŁőN„yâ ţđáCÓĘ+Ż’'ęËîťďŢé­ˇŢÎÂ}ôaNˆ–ZýűHË-7,Ťü×YN->řŔôôÓĎdëˆę3Q$*šDŕbýő×kőÇ4Ş‹,żüré…^¨Ůďe×Ű?B Æ Ż™żfV¨3‹ŞUŸůĚ~Y5—hĹőÁdŐ~˘RK´q1bš´ÖZkŐů¸őéÓ' }Eŕ-Ş÷DťŤ=zd}Bk<śëŹłvv™¨Ä4mÚ´lŕK.ŘÓĐü0tč˛éĐCţäžFeZö|ŰťÔRKfŻâ9Q.ܖŐnb=Ď>ű\Ö˘,îK׎ݲçÉʟí×ożýNj‰mˇÝ: ÚĹ}™4iRöxÄmŠęJ믿nÍssXzŕľŽwíśŰ.5ˇ÷ٚűýjÍ}ţ¸fŰtĎĎUV™=śq˙Űr=ńXŒłCÍś[#ŤXŐÁbťG ,^7†– Łz‹‡řßďŮrş´Âr]ƜŻď´K㚥kÁinčöÉ´n%C̋oPťÎ;ŻqßÜőŠęq°źŇ”Vţ qpü”S~UŰhH„s•ÇŽ8â°Ťů´őz TĚ#| ´\Ϟ=śŹ9‰/”§~rş d¨ţä´Ş`¨.8-Răő–ž/UßźŒŸESÁ˘#ŠĘ?ßűŢIY•œœ¨üó‡?\ 3¨Ô÷ę@ŰüŠD[œhMS‰Ę…z÷ŇĹ{ôúÚj‹§î  DP¨Äv_!Â?˝{÷LçŸAö‹čOüV€J'ô”#řÔRÉÁŸ0zôčl€ÎBđ(GŤ/ –¨”Ó­[ˇ,zńŢ<ŢŁ”ęŇ Ëu)sžžÓ.uŒç†Ž§šĄŰ'Óş• 1o`œÎ;ďÁ´šŮłg§™3g&`ŃęۡoęÝťwZOϞ=śŹ9ŠŞŚ~rş d¨ţä´Ş`¨.8-Răő–ž/UßźŒŠ?@Yq`ĄkW`QŠ÷äB?@]|‹ÔÉX´ź'ę#řÔIŐXtTűâ| ^}úôI@űó^hˆŕPŻ^˝zĽž={& ýÄ{đx/PÁ AńKă.]ş$ íĹ{oŐ~€ĆüÔ­[ˇÔˇoß´˝xďďÁ"ř4J´Đjږ÷Ý@SţÖŻ_żÔŁG´žxŻďšKđh’8Ąí´Žx-ô4•ŕĐ$]ťvMýű÷ĎN€–óh.Ÿ"€&‹_#0Ŕ hĄxOď­U՚áô@łäÂ?P@óxO ´”ŕĐlš=zôH@ăĹ{hĄ Ľ€Éľ&čŐŤWÎZC÷Đ úő뗺wďžfΜ™ŞŤŤPŹK—.ŠoßžBó@ŤüZMŔˆđĎŹYłŇÜšs°PϞ=SŸ>}´öZ•ŕĐŞâ@F˙ţýӜ9s˛PUUU€ĹU´óŠŔ*?@[üÚD؈aöěŮŮ Ŕâ$?˝{÷΀ś"ř´ŠÜÁŽ˙D  $菢fŕ~€ö ř´‹\hŢźyiîÜšŮP]] ŇuéŇ%őěŮ3zôč‘Ú‹ŕĐŽâ@H ýúőËÂ?š?žJ@T”¨ěÓ˝{÷ě˝m~Á`‘Éý*:TUUeáŸÜă1DU Üí%Şř䆮]ťfC„}rCŒ,j‚?@‡;˜˘54ŽŸ$@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $ř¨{€ ÔĽKö÷“Ó”ŞŤłżŸœv~‚?Tœ.]> ü|:-ű›Ż^ Ň?‚?T”řäB?“&MN~řav~ŠĽ–JC† .ŠÔy ţPa&{"ô3yňäüÔÜů˙,\Śs'ş&¨ šŠ>šJ?…rÓJۀuF*ţP‘,XШi•Š?P  ţ@ü€ $řHđ*ŕT Á¨@‚?P  ţ@ü€ $řHđ*ŕT î `˜6mZÚyçÝëœßĽK—Ô§OŸ4xđŕ´ÚjŤ¤-ˇÜ"łC6O˝ţúéđĂ?W4íÚkŻJÆ K•nŸ}öO“&˝Ÿ˙Ţ÷ž“ößżŔB*ţRuuuš9sfzűíˇÓwܕÎ8ă̴゚I˙üçUŠŞŞ*ŔâNđ¨S§NKçœó›ôƒœ’ćΝ›`q&řt(ŁGož oźQZqĹSϞ=k-sĎ=÷Ľ3ÎřY€ĹY÷ĐAœ}öYië­ˇ*š6}úôtűíw¤óÎűCš6mz~úmˇÝ‘śÝvŰ´óÎ;&X ţZ˙ţýÓ~űí›FÚ<}ń‹Ç¤>ú8?ď /N;í4&uéŇĽěeß|ó­týő7¤ącŸH“&ML3gÎJƒN+ʰ|ÚmˇÝŇ;lWŤ˘ĐÉ'ŸšîźóîüřŞŤŽšŽ¸âĎľÖ˝˙ţŚńă'äÇţóŸÖŹoű˘eŽźňo顿=/?ˇó?˙š> 4(]}ő5é쳝ŸˇëŽ;§ÓO˙Qš8qbşôŇËŇ#<’&Oţ -ąÄŔ´ćšk¤ƒ:0=*ľÔ”)SŇ˙{sV5i„ Ůö\rÉ%ŇĐĄCÓöŰo›vß}ˇ´ÔRK5¸ž‡~$ÝvŰíé駟M|đAÖz-ֳꪍdá­=÷Ü#őéÓ§ŢuÄărŐUW§^xąfSjśËRiŤ­śJGý…´ôŇK§ĆzőŐ×ҍ7ޔ|lz˙ýIiúôŠoß>5÷iXV9ę€öK#FŒHŕP† –žůÍo¤ÓO?#?íwŢIO?ýLÚ`ƒő‹–]°`AúÝďÎO˙ű?j­ç˝÷Ţˆ‡z$]pÁđô‹_ü,­žújůů<) ţźţúëiÚ´iiŔ€ůiř) ý„'Ÿ|şVđ犧ž._k­ľ˛ĐO9óçĎOďžűn:öŘ/§?ü(?=1<đP6|á ŸO_ţňqŠšţűß[ŇYgý_š={vŃôI“Ţφؖ]tiúÁž—vŮe§˛ëˆĎi§ý8 픊 R ?ühúóŸ/OgžůÓ´ţúëŐZŽŞŞ* D•>>'NJ˙ú׾éţűďŻylÎO ŠŽŽNçžűťôĎ^•/4uę´lxů嗳ůÇsT:ę¨/$€Î¤k¨Qݧ_żžEÓyäŃZËE՞rĄŸRăƍKÇóĽŹâLΖ[ŽN]ť~ú)B*Ď<ólŃĺʅ^ž|ňŠZÓ"HShë­ˇLu™7o^:餅~JE˜ćLÍŰ#BSĽĄŸRłfÍJ?üᏳŠDĽâ˛Ç˙­˛÷żT€N8áÄl—şřâKë}|"„túé?Í\ő‰őüă˙Źú)aT‡*wŸ*™ŕP1zôč‘6ÚhâiQ‘§P„;˘UĄ•VZ)pÂńé´ÓNIűěłwęÖ­[~^´¨Š 6x Ńćjíľ×*ş|iĺžrÁ—W^y%͘1#?ţöŰo× ńD ŹşÜ{ďýé7ŢH›oži:é¤o§o|ăkiÝu׊ľÜ•Wţ=5ŐË/ż’Î;ďEÓ˘…XTŔůяNK_üâ‘iŕŔEóŁ"O´Đ*ô\U´˝ăńˆ*Düăyé˛Ë.M'žxBęŰ÷Ó`Ö̙3Óĺ—˙ľho˝ővͲ)š-ĐvÜq‡ô­o}#}ôÓĐĄËfAިvT—xÜţú׿MŰlłMҟţtqşýö›ÓßţvEÚ}÷]‹ć_tŃ%Ye%€ÎBŤ/ ˘,˝ôŕ˘ń¨,“•].żüŠ˘ů돳N:˙üߌ^˝zeă{îš{5jótĘ)§ĺ—‰[wÜqgÚkŻ=łń­śÚ2=űěsůůĽŐ|Ę⺣ÂĎ[Œ.{™!C–)j)VÎÁ”žýíoćÇ=ôt ßN>úżü´'žx2 ˝ôěŮ35ÖWü5Ť(”!ŸK.š0-żüňůi{ěą[:ę¨cÓ´iÓłń¸Ž+Żü[úáOÍ/¨/}éŘôÖ[oĽ7ß|;rČAEáš5ÖX=kŻ›œŇmuÓM˙­UÉç䓿—öŢ{Żüřa‡’žň•ăł0U]Ţ{o\­ęEßýîw҈#˛óýű÷ĎBM!*8šRZyĺ•łÇ  łPń¨(WŚ™3gnţ|„b˘MTĄă˙j>ô“ŐeJ+Ý|ó­ůóĽ•y˘Xa„ Óřńăóó"X”SöyęŠâ6_[nYw›Żá”cŽůb­i‡vhŃ´Ž|đÁŠą˘’Qi¤†~Bf"xTčîťď­Ůžsňă›mśiVčÇ?ţaúóŸ/ŽUQ'ôî]ź­?účâń¨lT(ކ~B„v˘âQ}zô¨_żţú‹N!Â?Qééˆ#>[ólѤŔ@G§âPQŚOŸ^4^4yőŐW‹ćőë×7­żţze׳ŐV[dAĄœ×^ű´­ŐjŤ­šUčɅˆ"ôóŇK/§őÖ[ˇč2Æ KŰmˇMzՁ [‚EőŸŇëŤĎŇKJŹ5}ů嗫5mÖŹŮŠąŢ}÷˝˘đNˆL9xşä’?ĺÇŁU׸qăłj9Ľ"€4nܸôúëodA¨‰߯9˙ZzěąÇk-W¨04•ťÎr6ŮdăŹmX܆r"¸´âŠ+fՇr˘˛ŃżţumZwÝľÓꍯ‘U Šóń8tF‚?@EůŕƒÉEăƒ/?˙ţűŕp† Y6ŤšSÎĐĄĹa>ú8ŤÓŁGl<*ô\wÝőůůĎ>űlü) ÷l¸áúŮ´œçŸ!͟?? ŤźóÎ;ůéQe&ŞĺÔ§{÷îMšŢXďż˙~­iË.;¤ě˛ĺŚÇĺGŽ\)?>~ü„tŐUפoź1këŐą]JŰs-ťě˛e—Çm饗Ž3ř~üăÓŇ7żů­˘ŰËGk´Âöh#GŽL‡zPÚgŸ˝S—.]@gĄŐP1"TSXq'ŹźňĘůóŐŐŐŠšâ˛…—/­ĐóĚ3Ďf§ĹÁŸ Ň:묝o•Ť ôěłĎ]vÓM7N˝{÷N‹BKśIéĺăžöłŸOW^ůˇZĄŸÔ ><ŤÔÓZşík­ľfşâŠËŇ|&-ąÄŔ:—{ă7ŇĎţËtęŠ?lńöčHTü*Ć]wݓŚOŸQ4móÍ7˟_f™Ľ‹ćMš41k5UŽęτ Ĺ-§–\r‰|€'ˇŢ^˝zĺŰd=÷ÜóięÔŠéÍ7ßĚ/!—¸LTýyüńąŮ´gžyŚÖmŹŤU{2¤vŸ &ŚĽ–ZŞěôş.ŰńôÓZTgĈéŕƒHn¸aZnšáYkŽ;ďź;ż-JĹü@Vý‰vaĺDČkňäÉŠ!qűN:éŰéÄOHoźńfzá…ŇóĎż˜ľ^y啢eď¸ăŽ´Űn¤mśŮ:t*ţaüřńéœs~]4-‚'믿^~|ľŐV+š?cĆ̢ =…îťď˘ńUW]ľhűÓĘ@ŃúéČ#N{ď˝GTyęŠgŇ˙[N‰Ę=;î8ŚÖu,ŹÔóŤüřłĎ>W0otţüŞŤŽ’Ž&Mz?Ť Thë­ŰśÚOTŢ)uŃE§mˇÝ6mşéĆiĐ Aéˆ#>›ľŕŠöYaęÔiYhf˙ý÷K#F,ŸŢ~ű,ÔTآ,*ĺ~řaůńe—-n6yňé׿ţmúěgMK/˝tzó͡ŇĹ_’ĆŽ}"Őg=vKW\qeţś„xź˘ÂĎʟ>ţxjşéŚ˙Ś÷߯żÍ× AK=<ňX:ůäSł D´ŠçÎżţum­Vbč,€ĺá‡mp™¨`sÚi§”wŕd!’{ďý´m՛ožYg™¸œqƏłĘ8Ľ"@˛Ę*Ť¤×^{­húÂ6`M=ztú÷żo¨ľŽÂĘ@m!nc„`"č’sűíwfClŁ=÷Ü=­žújéë_˙J:÷Üß嗉€ÍŸ˙|yëýĆ7ž–šr˘E×ÚkŻžţůü´üăŸŮP(ÚŻ•V*´Â +¤#ü\şä’?ĺ§EĽž{îš/r˘mŰ̙3łŕW9›mśiö<(źĚ]wݓ u‰ FĽ@%Óę ¨HßůΡŇĎţł,°S—3Ďüi:ôĐC\ßđáĂÓĹ_ÖZkÍ:—)Wągă7̡ŔĘŮb‹Qľ–[rÉ%Ň:묝ÚR´úúҗŽ-;ݰ"Nlýč´˛‚ EęôÓ”¨JýčG§f!ŁşÄöüÉO~”rôŃ_Ź÷ńYjŠ%łőôí[[ޟüäÇi×]wN ‰m´çž{¤3Î8=t&*ţR„5"„˛Ě2ˤŐW_5Ť¨łăŽ;4\ ÝťwO'œp|Úwß˝Óő×ߐľŸš4ibš9sVYKŻŤŽş:˝řâKYËŽúg•t ížűŽiԨͲVZQ)gâĉéĂ?ʂ6C‡Í*čěąÇî5ăĺĂ=+ޏBúŰߎHW^ů÷tß}¤ńăǧ dŸ¸ěG^sÝÓź˝ąMâń‰ËüóŸWĽ^x1}đÁ”ěvląĹé裿† Ňŕz"|!Ľƒ>(ÝxăM銧žNďż?){œăţ˛lÚx㍲öbQő łéŇ Ëu)sžžÓ.uŒç†Ž§šĄŰ'Óş• 1o`œÎ;ďÁ@§×ľëÂčÉóĎżXvţÚk/ěřPUU]v~Ϟ=â—ŢU5ĂÔON” ՟œV Ő§ĽCŞcźžÓŇóĽę›—Ńę *ŕ˙ĎŢ]ŔÉUŸű˙ÎĚş&›dă„—$ÜĽPœRŞĐRęĽ÷뽾[ťĐB[(´´Ľw !žwŮŹťü÷9é™ĚNFwg5Ÿ÷ëu8:gÎHBöˇßó<‚ţCÁ`"ř A€!ˆŕ0ü† ‚?ŔDđ‚ţCÁ`"ř A€!ˆŕ0ü† ‚?ŔDđ‚ţCÁ`ĘŔ …ô5Ç#€Ą€ŕ4ö`0H6NE0 Ŕ€!耥(z\‹ (@żJ7ěC8)•POä! Пţ€~/Ŕ“J°‡đ‚…xŇműĺOô‚? OĹI4X  ąĆąź^oÜc"Ă>€@ řúD*[ľ-Őó%Ú¤"^0'Ţöč×ě8÷ŘXa@ /ü—(ôăŒŘz pÖm9r{äqŔ`ŕVúq<śnË6÷ů|ÝśŰWŹ`„@Śü“,đc“…}ü~x{ä<ňńń–S}^ ™dAœX•{Üíîkî16ĎĘĘrB@ţ‰ EžƒČ‚? #âľě˛ úXŕÇ&wť €äćć(;;ťkÄC< x`HŘ[ÁÚŚ€:;;ŐŢŢáŒ}utt8c\6öe“â€ ™@đôJź*?nuř°šąÁŒ˘˘Bĺää„<€Ąfo¸Ç&Żsc[AA3fÁŸććçF8w˛ýn Ş˙€L#řz,V•ŕ°š~l˛uťłŠ¸¸Čä†# öäĺĺ9“‹566…oŠłq1›,ä+DřôÁśXw˛ O{{ťs7“­—––v vä 8PXȧŹl¤ÚÚÚU__ŽŽ›ťwœĚ‚>îd¨ţzŠŕHKdčÇ]vŤüŘŕ……~lnw6Y•Zzŕ@e7ÄĺäŒvŞ˙´ľľ9ăhţąÖ_nő"üŇAđ¤,:ô9YŮb ýŘrQQĄ č,ÜSZZ˘Ź,ŸšššŐÚÚꄏ*Ü áĐ@R‰Z{E†~l ÂZ{ĺçç Ŕ>vٜ×ësZŮXšąđO$Z€tü % ýřý~uttú’pÇÎ,üccjěÉĘęţëşČ°ŐHÎZhýś(źˆ#YčÇţe6/.."ô$ach6–9ś=î)zěĺţ/räȑűísˇ˙Ľâˆ)YčÇ*üX‹/Ťř“““ă”*œĽľˇw8ÁŻ×ëTőąy$*˙Œý.ËŁňňŃÎZmm­3ˇĐťmď1ĂÁ’čЏ݉dÁ[1˘TRgcjťwW8cln;’ČđAsďaˇ˙eZĐg_ŘgßţĄâ­žŔ~˘ŤýX¸'rŸMnⲲ‘űݍ 1Słą5ˇĺWt›ŻČ19CË/öˇďĆőČmŠŮ>s¸˘âHIdĹkďeSVV–ňňň }6śfclîx[vvvř—”Tü 5{˙×: ŞűÄÂíů ĄXŐ~Źü°ÍińôŽąEŽš%ŞúŕHĘlÁćVzŘ&ë;ž““#=gcl6Ö掻EŽĹ$CđÄŤ¸•śyIIąôžľEŽ˝E˘ęH„ŕHĘ-1ě>XŸÔÜÜ\č˝˝cmű‚?Ń-żâ!řbr"ěî"›|ž,y˝ü3Čkł17wüÍDŽËńđ;Sô`‚­[qSPP ™ăŽšŮ\Źą9€Xţ€„Ü;‹ěNŁ˝Ákó•#™łwĚmďÍw6Gť/Š,D‰Pˆ^Cňů|BďőtŕĆăńˍšŮŘ[˘ą9ƅ@4‚? Žč`ŠŰ_ÜzŽŁg2q—Vô9đúÜ17w ÎEŕ$BđÄĺL˘Ë 3Аžž,ËĚg0ôEŽë¸ăqśŕH„ŕHĘ –¸˝Ĺ‘şţ~żÜçc0`čąąˇâăp @lHÇ@ÎŞƒŠ#řĐËY€†/Ż˘Ä ­PZ8u™zŻ2ůžóů ŒĎ€TQń$ĀBzzň~%zL˘}éVńĄúŔĐbă9Œĺ€DţdHşĄŸŢ†Ş"ŸÎFĂ­ž@Ś+)ŮůŇ9'•œ†>*ţd@ŞAščă‚Á :;;œeˇĎçSVV–3Ľ[ÍǤňZ múItč§˝˝]1óűýÎdĄœÜÜÜ>ţzţôR*Ő~˘illTSS“:+×ÉťöQův/”Ża‹ÔŮŹPNŠ#“ňš ~ľr‹ËTZZŞźźźýΛ,°“j¨‡đŔĐCđÄTIľ•Ձ&ÝЏ-WWWŤśşRů‹Łź5Ę t;ŢÓ^+ďî…Ę+îQËŹoŤiҙ5j”Š čDž;^p'Őę?„‡XcsŒŰ€Xţ€„üÄדJ?555j¨­QáË_Töî7’>ŢŰZŠ˘9_RŰ1UŐqŸtڃ=Z>Ÿ/îs% ĽţItŽĄäß˙~D?ţńOăîˇ×XRRěŞN:éD]zé%:î¸éqż˙ţżé׿ţłüźOˇÝöE 'ß˙ţôŘcO8ˡßţM]}ő•‹ą9 Á€čIčÇZ{ľˇw({Ĺ=)…~"Τź•VVŐ25ńCľľľiěŘą1[E>oŹđŐöą×X_ßŕL7nŇżţőo]yĺĺúć7żŚěěl vҐę]VąŽknnvÂ49kROdUźĽâgnTó?Ň˙ NĽš’’y˝Ţ„×/t …ʞĎ1ÇÝm›˝ž††F­_żAÎśÇŇyÍßůΡ0ŘüHA:e•ckۂÁŽíNűŽžrZ˝tŤÚŽ˙œ*ü XąţI'ä“JőŸáŇúëĐCŐoűŤ˜űŹÓ˙ţďoÂmŽlţÁž_‡2Mƒ™W؏^"§t—pż/_~ožzĂ (ńŻT8÷ëj¨ÜŠ;w†+ÖÄťŢDŻŁ'mˆ“˘˘"}űŰßĐŃGŢöâ‹/ `°Łâ8 őE%Y°&??OMÚS|ŠŞU˝•łýeůž]§ćłţGŰ;ŽĐ˜1cT\\Üí9Ł+ő$Şţs ľţŠf“Î=÷l­ZľÚYßšs—zŁĽĽE=ô°ćĚyU›6mRkk›JKKœpх^ K.šHYYą˙)n×đĄ}ĚY>˙üsőӟţXľľľúç?˙ĺœĎŽ-+˧)SŚčŇK/Ńľ×^÷\.żßŻ'žxJĎ<óœÖ­[§śśv••Ôi§Ş[nů˜ĆŽŤt,Y˛T?ü¨3ŻŹŹRvvś&LŻSN9YďyĎľ:č Éq{ÖYçw˝­]ň5wîlíÚľ[÷Ţ{ŸćĎ]{tđÁSôŕƒ$Gđ {}]­&Ńů#÷Y(§˝˝]Ç\Ť­UŇą]˝ĺkÚŽ’>Žć™_UEđJ§ňĎȑ#Ă­żb…u…‚bmO÷˜ĄĘ}ĎL^^ĎŤ2YpçśŰžćb"UW×hîÜyÎdA—˙ůŸiÚ´Š Ďeď÷š5kő™Ď|^uuőÝö-_žÂ™ž{îýöˇ˙Ť‚‚‚˜ç¨ŠŠŃ—żü5­Xą˛Űv Ů<účăzéĽŮşóÎß)@@?˙ů˙ę_˙úwˇíZż~ƒ3ýăęcű°>ń‰›ť˝§ąŘńˇŢú™ý^H Á0,őGkޤm˝˘ö[bôčŃ7ĺP-ěüźNŘó'j]Ł^óˇŠpÁ÷•ľgŠjNúŠSMĹ*¸X–Čë úO|özfϞ^Ÿ1ă8őÄŇĽËôéOŢ x™ââ"͜y’ĆÚ˝{ˇŢ|s‘’Ů´ił>ůÉOëŢ{˙¤‰'Ä=_[[›žúŐo¨ĄĄQgu†Ž:ęH§zς ĂՉě9ń‹_é;ßůVĚÇß|ó­Úşu[x۔)é°ĂuBbvŽŞŞj}íkßt͌÷Ę+sĂëVÁčĐCq^ÓʕŤœç ƒúăďqŞ }ń‹Ÿ‹{. }ď{?tB?V}脎WaaĄS ¤†ŕ6ú#ě“ęóÄ:Ć ËX;¤ŚŚ&˝ĺűŒŤyRÓęžW&än|\žšwÔ|ÖO´­ŁCĺĺĺ***Úďš";„ö†c~öł_†ƒ4Gy„.şčĽËÎóß˙ýýpčÇZpYđ%˛Ϟ={ô•Ż|ĂyŽÚÚ:ýđ‡?Öwü6î9_ý •”ëĎžKÇ{Lxű§?}Ť~ó›˙Ó}÷ýŐYˇ6^ŸůĚ­*++ëöř;ďź+úÉÉÉéşžďčâ‹/ ďˇŔÎ=÷üEwÝő§¤íÍŹľ—úą ÎO~ňCxâ áýö}xä‘Çşś˙Ě ˙üőŻčźóΉ˘rƒGŸřÄÇőńT>ŸO =Ŕ7­źR=6rťUâ9ďźs5ţëz'tĽs&hzĺßä uŞˇ˛ęÖŞäٛÔ<ëví^¨‘#۝0H˘°ĎĐúkǎúíoďčśÍÂ)Äy㍅áVS矎nżý›ájIé°ĐËśm{ۡ{îŮúÖˇžžß1ĆúÍo~ŠkŽš^MZ¸đ-'üb•sâůĘWžÜ-ôăúÔ§>ĄŮł_Ööí;œ×b!ĄwżűŇđţ–––n-šžýíot ý{Ö’ËŞţX°'ŤÎsÇżw–­rŐŻ~ő‹ýŽŮžvި¨ĐŸţtŻłÍBEvl&ź\\\¤Ë/żlŔ_÷¨QŁÂË7nJzüćÍ[â˜ËžŸW\ńn€GŤ/0$d:ȓNëŽxËtč'ŇÁOŃy睫`ńd˝6î6í.8N™âmŠPÉKŸTöŞTQąG••• IŻ)Őm=9f°ƒ1—“)((Đa‡ę,766iɒĽhÓ§^ž7o~Â×SQQĄľk×ĹÝüńűžsçÎţ€a%YČ$ݰOŞAŸčcăíKśÍÝnŹĘŠľšQ>^oţ¸V¸˛kk†ŞČ:Tđö/UřúŠĄzvíÚĺ´˙Šźžx×ëzSyo;ku5wîkáőɓ'Ç=6Vˆć’K. /˙ß˙ý>aĐć׿ţ>úŃ[ôťßݑR5žž8óĚӕ““ă,ďŘąS?ühÜc˙űť~FgœqşŠŠ ĺˇŢZ¤ůó_{lUU•Žşę:}ë[ßŃ#<&Đwţ€A/ŐĐH˘ă,„á÷ű“NÝŚtŽO´?ÖöTŽÍÍÍŐ9眭ƒŚLÖşâóőfŮM xs”)š›ŸUÉsRGĹj§ľUsssҰO:Ռ˘÷֐Uťůěgż¨ÚÚ:gÝ*řœuÖݎ)** /[P*Úu×]Łąc˝eŤřóŐŻ~CuuuݎąĘJ÷ß˙7ýío×ňĺ+tď˝÷Ť­­M}Á^Ă{Ţsmxýç?˙_=ńÄSÝ> {ÝqÇďí‰X€čć›?ć,Űă-Ô3{öËűg!Ś/}éŤNĐčůç_Ô+Żź*Đw˛0 ÄŤDcA 7$ŞžŇ“v_==ڧŰgĚ8Î r,[ÖŠú‘e:˝î/*Ô*| ›UňüGŐtňˇľ;xąFŽŃ5”×ëív§Űş‰Üë¸xŻ)Ů1™śnÝ:}úӟŰo{{{‡âŮł§˛ŰöĎţ3ÎűięԃĂËŻžúZ×1_rÂ@ˇßţMçŘââb}÷ť˙ŐľýËÎwî•WćęőׯŇ̙'jܸqÎśˇß^Ź;÷…†Ţ˙ţ÷ę裏R_ůÔ§>Ą×^›§­[ˇ9A˛ď~÷úóŸďŐGî\ĎʕŤT]]ŁÉ“'éôÓOÓ?˙ůݏçşá†č7v˝Ś7ÔÔÔŹŻ}í[:č É:昣UXXŘőşvjᡜç1ĹĹEúęWoč;Ŕ ÖӐ~ÚŰŰÕsB͕RýV…Zkčlí“ę3‰Î—‰pŃÄŽŠ`L6oŢŁUšgjFësĘu(<-*žťZŤW¨öřĎ9ď]yyš|>_8¤+°“ęśhýţillrB)Éäĺĺé3Ÿšľ[Ľ—…ŻlZşt™ł>ţg~őŐWę”SNv–gÎŻ˙ýߟ;•ƒzčag›ŠlŠf Ÿţôǚ8q‚@ß!ř†ÖÖVŐ×׍ľnˇ|ď<¤œOÉ×°ÉŮgQ“Ąü üŽŠď˘!ĺŻůť˛ŞWŠůŒj[{ťĆŽë„G"Ă?&şúĎPŠüÍZŠY…Ł &čŒ3NÓťŢuąóšcąkýŮĎ~ŹßýîN͛7ßi fUm*+ŤşwěąÇ衇ţĄÇ{Šúł~ýz'x”ŸŸçTţ9ůä™N[°ƒž˘ţ0jÔ(ÝsĎÝÎő<÷Ü Zťv­:::UV6˛ë5ŸŽ›oţ¨ňJü1YYYúĆ7žŞwżűRç|‹/ŃîÝNE­#Juä‘GčźóÎŐe—˝Ë9ô­TÓâIqŸ'…š'Îş;y#ćîäűĎ6_ÔdűJlŢőˋůÂqÜeŤšÓÚÚŇő ţÓ¨ż$Ť”˝żĄĄA•••ĘÚřŒňßúš<íuBú‚š#Ő|ĆŠĘĘĘTZZÚ­ő—‰íÄ ń$ ÷ tř`°°*˝^ŻGůůÎM56nâVdv—@fäädŸŢ5 vM ˙™˘ŚĐćÁˆ)1žg=ŃÉÖSÝ0lŰś˝kĹŁüü§’˛‡ŘX”ÍÝe99٧wÍŹ]DĂ恨)ôŸy0b EĚŁ'ĹYO4^Ž–ô.n‚?`?C!řk˛0PşAŸXëÖ.ŹŞŞJ ő *Xű€ —˙^žP@™ć+¤ÂłoSމ7ÉăËQ_ąJ@­oÝŁć×~Ľ`ăneRçřYj:çW*1Rĺĺĺá푞Xažx‚?`¸#ř@˙.ÁݐkíľsçN5VďVé‚ď¨hŮ˙e>ôăËVáY_Ҩ/ź­ü“?ާĄăÉÎWÁiŸÖč/.UáyßĚčóeďzCů‹­††F§%š+Q+‘tŽ8d IŤý4448•~źŐŤUöúíň5íPŚeŸĄŇ÷Ţ#ߨCŐß,TtŢ7•wÔĺŞđŁňW­U&ä­ů‡üŁŽUľ÷Rĺää(??żc콎Źć˝ŔpÖŮŮŠ;ďźKO?ýL×ŘCľ2a̘Ѻě˛Kuë­ˇ(;;[ž¨ř†­LTˆąÖ^ŐŐŐŞ¨ŘŁěőiäě[ű$ô“ĘÍyˋú‰”5nşĘn}Uy3ާL)|ëjÜĺ§ŹuœéégCŐŔpóűßß­űîűkĆB?ڞ˛JůËýΚ0źüCRo ‰ďîł;îvďŢ­šĘÝ*~ëTň֏Ľ@ť2ĘăQŃEßUÉ忔'+Wƒ'§@Ľ×Ýí\WFÎ×ѨÂ7ž§ŽöŐÖֆˇ'jůEŔp xꊧŐWž|ň)`xŁŐ@ ÍÍÍŞŹŹT¨vłĘćKYőë•qŻJŻý˝ňfź_˝ą§śI;*ëUÓТŞúfYff̈B,Îפň*Y¤ž(<ëKňdĺŠń™ŻŤˇ˛w/Tֆ'Ô|äľ*(héš ÔS´ '™Źô­şşFŢţ€^tĺŤJSSSŤěíŻŞxá÷äílR_(~׏zúąËżbł^^´Nó—oֆ‰§MĽ3Ž;Xçžx¨Î˜>Uédf Nű”‚muj~ůÇꭂewŞaĘEjhČQ~~žމ ńDz2đŠmlŐěUznu§VîŠ3@hÇĎ+•Jnj ęźC¤ĂÇP=ű™1++Kyyš*,,Tnîਤ ô'‚?`PĘtŤ§TÎTQQĄ–Ć,ťCk˙aT_(8őVœöé´ěz sŢŢ ˙ű÷kZąqwʏ۸łÚ™îv‘›"űYsϞ=Âđˇl[“ţťŕ”+ńdÂŻœŤ'ć­Jzœˇ Lů'L˝•ťţQ§ÝWźŘŢ´s{n5Ő~ł˛‚á_¸ÚÚ¨řs ˆţą@O˘đĄ0œđ“zôH§ÚľöŞŞŞREĹeżó/˜ýIy›wŤ?X•œü™MéŘŞúf}çîgŐßž÷çççNŚŕÔOu˝ Ţý32kĎŰ śÖŞŁŁSÁŕށ¸T*5Ľbĺ†€ádOpł›Mp`° Î#Qá ôÄ ˙Ä ý˙ů6Šßył”3%ľ 9źşBţ€Š=ˇ…’É™vśz+k÷› jooo‹ü{ZÍ璣˛@:flPŔ*//W8đÄ ˙<š´Ú üŘdË.B?`¸ ř„ĚIvL*Űc­űý~§ľWMŐĺżůSżţyü­Ůfȓ[”Ňą/˝ľVíĹŽÁ7ęPy‹ĆŞ7|ţF…śË>ž@ yŘ)Ő ĐůG €tŢ!X……”ź:PĹ ˙úĂÁĐďR pô4ôcZ[[Ö^m՛UňŇ­Ę[÷/ ¤Ź1GĽt\[‡_Ť6Uh Ů5´św&=.kĚę-oő*gŢŃŃĄLYœŻŻ_HŐŘ.<4¨ĂÇôʊ&0Ô)7—Š?˛XáĄ0ÜüýŞ/C?ś^[[ëTúńěX ’g?ŹŹŞĺhž˛Š)ˇ­˘VţŔŔ—âˇkŘVQ—ô8ߨŢß>ŹŘűůtv&ĽăşYĺzďńüSŚăĽOžJčŚüü<••• ˆţ!ô†#~úM_†~ŹUTEE…Ş*+•ťô*~ůsňśŐh0đKé¸ę† {Ꚓă-*Wo…j79skÍŢńŮöć;ó•w§ň8Véçö ’ˇŇ†#ŤôS^ŢűŸU1|XŔçń/§ƒGç9“-úĂM–‰ž†~ÚŰ۝ĐOGĂżţ_ĘŢľ@ƒ‰';?ĽăCľW*/G˝jŠvćÁ`ßźvŤüsţŃ­š˝ŞQĎ­îÔĘÝ!u<† ŸW*/”ŽÔy‡ˆö^8 x<eee)//W………´÷BLç9Rë~zš†+‚? _$ ’Äڟl›-766Ş˛˛RŢ=ËTúÚˇäm­Đ`“j@Ś0Ż÷AšL)ČMáZ|˝ŻŚăëŘŰRŹŻ‚?fdqžŽ›e“†Z}€>ץ ŠTWWŤ˘b˛×>Źâ—n”ĄloHé¸ńŁK4XL“üZB­uę­l˝3ˇVmˆĆŒ­žR^>FŢţ€>ŐĄŸŽŽíÜšSu{vŞčľoŠđÍËěT_hWžz+ÔR“ŇqăƊ5fD‘ÚčŇB•<řLńu%â v8sűxSi/–Ę1 %—]vŠúĘe—˝KŢţ€“jˆ#ň¸ŚŚ&íŘąCíď¨ä…)gۋę­Ę;K˛Sojˇ¤|ěŠÇNŃ@;-ĹkÔlTo=>gîńxŔčÖ[oч?|SF+˙ع윟üä-Ŕđ–%€>ғę,яq×­ľWmm­ęęꕽń)/ü‘<vő…€'[ ‹ßŁMžŁufËCę­ÎÝËR>öň3ŽÖŻ­Ô@zw×5¤Â_ąB˝”ď?KTň˜˛łłőšĎ}ڙ€tü}"-žÜőÎÎNUVVŞĽąN‹~ĄÜő¨Ż´eÔÂ1ˇhˇ¤Ž<ôP•ŹňXżŻ^ńď^ŽP C_NŇcĎ>~š4ZëˇWi LPŚsN8$éqVí'­žŹâŐúĄâ@úhőú]*ĄWkkŤÓÚŤmĎ•źpsŸ†~jr§i¨­hŞN;íTyäňř[Ő[ĄŽunž—Ňą^GŸ{ϙ(_zßŮÎ5$ÓžöyeBŔ›ďĚ˝^ţY .~Ă%ˇľ×Ν;ĺŮ2G%ĎŢ(_Í;ę+ۊNӂqŸUΈńşč˘ 4~ü¸˝;2T‰Śý§R>ö]§ŠsS¨ş“iöœ—Ě:2ĽcŰ×<ŁLhÉíĚ}>Ÿ‚? ăľůJĽÚßďמ={T]YŠÜewŤčŐŻČÓѨžňxőÎČ+ľlô4vüD]rÉE*-- QZ}#• mËt*˙¤ę'Ÿž\F—¨żŘsŮsŚÂÚ|ul|E™Đž7֙geс ]Ŕ ŇŃŃá´öjŞÜŚ˘9ŸWţňť¤PP}ĄÓ[ …ĺŸŇ†Ň ućëÜsĎQnnŽ<O¸őTGÎ(eB°ľNmËLůř‘Ĺůúă7ßçĚűڈŽç¸űďMůšZܙąĎ$P8ə[ĐʓBu%O†*0 @FőŚÚOKK‹śmŰŚŕŽ…*yćƒĘŢ˝P}Ľ1{ź^˙UŐĽ“OžŠ“N:1ö1nš`ŃeJókż‘)ČÄQúç÷?¤)ă2Su(–ąeĹúËíĐĄ“F§t|°q—Zßž_™1͙Sń }Ŕ `ĄŸ;wɡůEĎţœź­Uę+•ůGëőń_V¨d’.şčvŘĄű“““ăT—é(;V™¨^Ż–…w§ő ýüă{7éÜQŚŮ9ýÉGuä”ň”Óôâ÷ÓjY–H°ëŸ˘Áňăe{żdŞŞŞ´`ÁδfÍZp ăÖj0`Üj?­­­Ş¨ŘŁěÍĎŠpŢíśG}ĂŁőĽkíČwŤlT™Î>ű,ěw=Ć*Đx˝ůFĄoĄr‚Íʄć9?QŢą×Ę[<.ĺǔ•č÷_ť^OÎ_ĽŸ˙íeíŽiToŒU˘Ű>xŽ.?ýhĽÓ9ŤsŰBľ.y@™RŸ;Ey%eĘÎΊŰÂ+­˝6nܤwŢYŁ]ťvŠĽĽľëłőФ¤DS§Ź3ŽSaaaˇăŸţE­Zľ:ŐÓë˜cŽvd úóŸ˙˘tÜ|óGUTT”đ˜@  •+WiíÚuŞŠŠQ[[ťňóó4jÔ(~řa:ú裺UŤJäÉ'ŸÖúőşmł÷㓟źĽësȎů˜xŻkÌé:ďźsĺęęjÝüďFNNśó:'Ožäźçeeeę {/^ę,ŸvÚ,őD0Ôß˙ţOUVv~ń‹Ÿ‹ű˜]ťvkŊ•{Ű659ď÷ˆ#ÂߥȿG’ą÷óţű˙ŚÎNxۤIőž÷\ŤžXˇn˝óžěŮłÇůn؟'÷ť1}úąN˝Týţ÷w9çˆ4qâ]ýuqłző;zîšöŰţîw_U.Y˛TsćźóńögŽęęšnۛ›[œiëÖmzűíź暫T\\ŹžđűNxÄDąXhŞˇ:::USSëL˗ŻÔ…ž÷ůٲekxyʔƒÔo˝ľhżĐO<öwÁěŮsşŽyEԞ€öěŠtŚĹ‹—č]ďşDÓŚMMéœ/˝ôrˇĐOOŮ÷ř駟Ն ťmooďpާŮda%űnD‡ŰŇącÇN'ŹdašX,řÓöˇśś9ÓîÝΟÉ뎝FŁG§Ö~tŔ€ŞŻŻwůoý\›úB[ÖH˝5öj̝Źăg§ŁŽ:2a¸ÄÝgPŹJɖ‚#3ü1^VóÜ˙Uá١)]9Ů>˝çźδ}O^_ąE‹×íĐŚ5ÚSۤ†ć˝ďaIažĘGię„2pŘDvěM*ĄéúĹ|ĂcŸS vł2Šuô‰NřŞŻŞ{Xu›ČЏ}ŽĽĽ%ęěětB3Ć)vÜM7}ĐŠŕbŹBŠUM‰Ç‚ –‰<Ż;Oô8Š3аă{ě‰nĄŤŒbßIűsă†G,Lcá oü`+$Yx#“ÁŤHäśoł€Š˝ßn Î^׋/ÎvŞ˙¤V˛J;öZ˝cǎUşŹbŇoź™ňńs柲_čÇžCXŒţYUœńăWň˛Ę<‘áĽŢˆúÉÍÍq‚?ŽŞŞj=ôĐĂÎw#Ę?Ńěű1kÖ)űmonnŢ/X—Šââ˘p•*űűßB?.[~ęŠgôáß$@r@ĆÄŤęýÂ×~iŽo*kw꿌OGmŢ4˝]~ł‚ye:çŒÓś5Ńâ]ˇľďillRë¤óŹzH^eŽÚMÓKߓoÄAĘ;îző”yŽ?ߌęKM/ü?ľ­xX™Ôš5RžÉ§Ęçó:‘L´ôŠdŐNŹŽËZ]pÁyĘËËsÖ׏YŤgŸ}Ţůě-˜bU[ÜśUvœMńDˇ-š:ő`gn!–Ď|ćSqgĎsĎ=QSÓŢśqcÌNŘćËZrYpĂ5kÖÉ:őÔYÎ{eÁŤăV[ąpďśVJEIIąöśŰž}o ŤčëąöQnŘĆÚuYX#şT,ą–M.kçgí 6oŢâŹ[řÇŽ÷„ŽWŞ"3“'ONű;cŸľŽěsHEmm­–.]^ˇĎëŇK/ ˇ)ł×ňĚ3Ď:A{=/˝4Ű ŘÄc!™W_ŤL°öu‘ĄŸČkł÷ÚžnK7Ť¨öć›o9ߝtD~?âěϑű÷gäńÉ\}ő•N;2—ľŠł›űxťćĘĘĘŽ×5F€ÄRď/aö j“˝ůYő…íŧéqŸWΈ şřâ c†~ŒÜ)’…Ź‚FᘃU•Ÿ~[˘„ŹŠÎ#ŸRűÚç4˜5żö+gĘ´íE§jdŮ(ĺçç§ü˜t‚Ö"kôčQÎdĄˆK.š(ú1Gq¸&L^wĂ-ÉXŕfáÂ}!ľącËuČ!ÓRzěŇĽËÂĄsúé§%<ŢÂ8. UX{:÷=°JIçŸnˇ*.ŇI‡˝÷#Gî­rdáX•}"ˇYŘ&ŐjEąžëěłĎěśÍýóŸŞŢśů˛÷ßaĆ*3vZ⠌ľ?sŮű~Ĺď‡~ĚÁOézMg…×-¤emąâyůĺWÂŐxĘËÇčČ#POYPÍe߁+Żź<|mö^[hĈŇđ1VK7˜9qâÄđr]]˝Ó†+Zd›ŻČăÓe! ™3Oęś-•€€Š?`YĹăÝő–2)äńj͈+´qÄE7Ž\gžyFĘí¤Ü`…űKrŤúcᎠųTŢşR™ t¨î÷ŤäĘß(˙ÄAÖÖŚëő7Íů‰š_ţą2ĎŁŞQgkňˆÎűŰmOD¸§7U€,ŘcS"‘Á“’’ĽÂ--ű—,źă˛öbVuĹe-ĄŚN=8ácŹzDLŹĘ@֊Ϊđ´śî­`“n°Ă*ßXxĹŞŤ qD†/ě|VŃĹea›-[ś¨§Ü?ďŽtŞšŘľlÝÚóŕOCCƒć͛^?ăŒÓĂ­Čâ?f_őš˘˘Â˜ß‘I“ş‡]ěc -DäVŕą@áE] Ĺ‹—Ş'ě}Œ Yđ,şeš…ŚO?VsçÎsÖ-DcĄ§xáÇX,ôhÁ9ˇęÔŞUŤşţ>Ý×^ÍÚŚUVV…×­u[d(]‘ßűł_V6R€ä¨řŒßż7°Ő˛K™Ňé-Лc?­M#/ŇGć´o˛J/‘U}bU÷‰ćcĄüüŤć9?‘B™k%ÖĄö&Ő?ôń> ýHUůGhĔc`zđéIť'kádmžÜ*?Ä8á„äíŇ,˜đÖ[‹Âë˘H5€bZZ[ŰÂ늆,HqěąÇ8“t˘Y#ňœéV\ąŕĎÔŠSĂëÖ.,˛jĐśmŰŐÜÜ^Ÿ:őŕŽÇ¤˙ľĐ“U/zᅗ´ďZ'¤\)ÉŘuš`,tIĆZ|uvúeŤôن, Uš,$\2‘­ŘLŹĘQmmmzůĺ9áő“N:ĄW-ŹěsŠŹźYš*҄ ÝC>éV„˛ĎzÚ´}ߏľk×u{ŢČjPĽĽ%]SŠz˘ĽĽĹ9Wd%­™3OTaaĄÉQń  mX# oFţQҔ=^‹Ć}Bmšc5óÄ’V|‰ÄޘbĄűôřIS´q˅:ŞćeœUיý#ulžŻŇ÷Ü-oŃX ˙ŽĽŞ{đŁ TŻW_Y?âR9~|ZáŢ„ƒLEE…ţţ÷÷Űnu,6zôč¤çxűíĹÝÚY՘T´ˇˇkѢˇĂë蹊7,Lň /†×­2KŹpP"üąŠ5péččtśYŖňňrg92Řa硪CŠVš3çUgŠf‘3ŽÓqÇMwţlĽjóć}•†Ň­öłrĺ*mÝşÍYś Ů…žŸŇă,8óöŰ{[jYHŃ^=Ö˝nŤ"ôęŤsť=Ć>—hŻź27\%ĘZŤzę,ő†e"ĹŤVU\\”đqÉŘ÷Â? î­TeßýM›6‡[‘ß;.6p÷ß˙@Ěíb:á„ăjW€ÔPń Ÿoď?EZł“‡.’ŮS0]ó'ÜŚ`ńdç—óÉB?ąÄŤdÁŸňňŃÚYvžÚ}Šľ„ꉎsTýۓŐňĆ]N% ţjoTăłßRő]ç÷ič§*˙ČŽßîŸä@˘[-eŞÍWŞ,a!’‚‚ü¤ÇZ Ă‚?. ŮÄŤ´ÍB?ííűŞĹ¤Jt-=ôp¸EWvv–.ťě]iżgÔ°Ë´iű*ď¸í¨,ŕłqăĆđöC=$­`G˘kˇJBѕr’qƒ;fʔÔNÍÍÍÝÂ9łfŹ˛˛˛”ka ę¸V­Z­{ď˝OĎ?˙˘üIÝwß_v`‘ߟč÷ČK‘íŻ.źđ'|Ô$‹d-ßb‰Ţý¸d쵌7Ž[€hÆ˝ß‰ĘĘĘn­Đ9$3ß SŮ{fŸ 5TüĆZp555Ť˛p†ŠŰˇŤg<Ú0â"­y…FĽłÎ:3#-bÜjDî˛U՘<őPm¨šHG×ü[}%ŘZ§Ć§ž˘ÖEQŃš_WîQ—w]@ßeľC­Îs5ĎýĽ‚ťŐ×֍¸LÓŚN Wű鏀)((ĐôéÇ:ŸiccŁÓzŞąąIožšH‹-Ö%—\”0,f-žÜŞ8ćôÓOMĺiQÖćËea’qăz^ŃÉŽý‘G ˇ”˛ɕW^‘r˜%{Ýnő{Oęę朐HduŁĂ?Lé°ă­šPäu[pĆZ‡Y՘-[śęŞŤŽHŠzľŘÚľkďwÓ^oäy“™={N8teU‹fÎ<)ĺÇZ(ęŠ+Ţ­‡~Ôů{ĘXŘĹ^‡ëěłĎԚ5kĂ}Ź5`äużôŇěđúqÇë´8ë­Čç0ÖJ-–číяK•Ußq+mٲˇňRdŤ°°Ŕy]ö™ŚĘXîßÓ˛öeŤWŻvŢgŤĐ´yóf}đƒď§Ý¤€ŕ0öK]ŤěP9áRMŽ{YŮÁ4[Ńx˛ľlô Ú]<ÓŠŔ2kÖ)ĘĘÚ÷ϛtC%ŃmŒÜÇŰv ŽL™2YŻm>OS^UĄżR}Éż{šęţqٞFŚüSoUŢą×Ę[0J™¨Ţ ÖĽ˙Të›T°šJýawá ňL8Ń ž$Şö-Ţžt>_ ]pÁyáu ˘X ĂŞćXđŔÚftĐdĺçď_ýÇZ$-Y˛4źnŐoÜvXÉźůć[ęěô‡×S ĹbUV}ôq'{öËúčG?œô\v=n5;oäŸńDÖŽ]ŽPcߕ‹.ş ­öbĆ^÷7~ĐŠÚdՐěÚł˛|š8q˘N=őç{`ŸąŤ¤d_űş×^›çŠLQQĄÎ<ó e‚ý]ÉŞäÄâ>ˇ+Öw;G}T8řcß˝ÚÚZç3qYp,Ýżk-6jT÷żĎŽ=öhýă˙rţžľç™?ó™#řŒUď1b„JÇNŐ˛Ş넊ťĺ ůSzlcÎD-+żIMyéřăŚë˜cŽîuő˜Č OŹí˜2í0-oü€NÝý[;R}Í_ľNOŢŚĆgžĄÜCÎSÎa+çŕ3”U~TZ•€Bůˇ/RÇćšjçiuîx[ýŠÓ[ •ŁŽ×q‡LSiiŠł-žž˛ Uyᅗœuż?ŕT1‰UőgáÂ7ýŢijjŇŇĽËĂëvîŃŁ{ÖÖ΂O<ńd¸ęP^^ŽŽšć*ŰóęA. ĂŘľ-^ź7Ü´cÇN§Zë¨ŁŽT&X…Ż#<˘ëýÜ”ŠŻopB$#GŽLř8ˇĘŒIĽBËÂ:.űܞxâŠnűÝ*>Ž?ţńĎÎüÚkŻîVAÉŽŰÚłĹjŃVUUĽÖÖśđşľĆ2öţ-[ś"źÝ‚TÖ,Ţó[*{~ Ä}čC7*‘QŁĘœĎĚ CíÜšKÇ?cżăvîÜŮm=Ő°Z4űÎZľ$ˇ=›}?"ϝŠď‡}—ǏçźcUÉüý"˛uV$űĽúŒÓőL×/’y?Ľc*˙Ž‚ÎřhÚ}%ÚTzžśŒ8OEĽ:÷”“* ™žVy˝śÍ~)čĄÓ´mŰqÚŇ|†Ś4žŚ~čTűÚçÉxóGČ7će•"_ŮÁňä–Č“ß5/V¨˝QÁś…ÚęĘ>ţŽ)P˝Îië5PVşNĽăŃA´_Օžú<öŘÚľko€ŔB>Ö6(úyÚÚÚş­Çú~Ze ĺËW†×-¸’j[- ¸¸Urěš­BLOXŽçŸ1ô°ę<×]wÍ~SzĂÂnđÇŢ77řcםn›ŻD˘ßóxmŞ"EśJ'řăž_îrtĐ'šťßýĚÖ­[ďT‚rĹŞŽôĆo†—­ĐÔŠ;ËŃß%ŤúYů)Ţóçät(ű{ČZkšUwŹŞ‘}OÝöyîkXž|EÄc˛{ő÷¤UýyőŐ˝ßŮyÝZYŮH3F™ůýHĺť ř2(^¸'ŮcěÖgŸ}Ś,ČŃ’Ł4ŞaąF5-S^GĽ˛męĚ*RsÎxŐ­š˘éĘĘ-Đđ#t Ǎ¤¤$ĽçH&ÖuGż[ˇ EG}¤–6_­ą­+•çŻŐ@śÖ)¸ő uvMƒ]eţŃŞq†Î=îŘpťĄTŤýô´*6mÚě,ˇľľë™gžÓ™gžî|_,˛qă&§’OäůŹY´ †ƒ XJ5źS__Ż+ö†,8Ť˛…ZćĚyĹůž{î9NËşHo˝ľHŻ˝6?ź^\\ä„~ě{˜IV Ć*ÉTW×8•x\ÖţĚZňő–˝>k˝ľrĺęđ6{?“˝{ÝëąŔS&C&ÉX¸Ćž+nľ§çŸA^xS•ĆÚż˝ůć"'ä:öŘc”››ŤLą×nŻşş:͘qœN9ĺäđ>ŤđăěűůřăOęŇK/qBivm/˝ôr×ăęĂÇ[ŰľtۜE˛ŠPsçÎs>NJŠ=á홪öc!űóXSłďďÓTvp #řk‘cÁ Ť&ŃR4B-:/ź/2|3˘ëëÓŚMuą~‘ÝÓę1‘‹űDnłç<äC´kW…ŢňB§ďú_yƒÉŤt¨ZłĘ´ṫtÔQG„[ Ež×}ŐÖ뤓NÔʕŤœĐąĐ‰MŮŮY Cá0ËBŃ! \Ź^ýNxÝÚÉšmʒąJ0nĹűÎ̚urĚă,LŇÜÜâ,?űěsşőÖO„÷-Y˛´[čÇ´´´ęţó\Vč}ďť^=e!Žčçł G=ą`ÁáV[ögÇŽ;˛ą0”UŻI$˛ÚU‹JÇ 7| áţŋ—č•Wć†×żřĹĎuŰ_PP “OžŠ×_ߎkllŇ#<ó\%%Ĺ:ýôÓÂëŠ>_4k=fŐz̤Iőž÷\Űm˙üů œśZî˛ý˝çśŠ;äiÎşŘLee•îťďoNeˇOäľÍšŐłjS. YľĽÍ›ˇtŰŢÓďÇĂ?ţűŰţ,Zť´čđeŹöe€ýőüśO€4%ŤŢbżÔ>眳J>ö‹pŤÚbNFĺ´Đ™9óD]pÁyÎ/˝}>Ÿó¸čŠŻŽ3r›…ěZڋŐňQďb zs´¨ü™ě„<’UIľÚO*,´aAŠŇŇÝRtčgúôcuţůçîw |¸aűžĹ ďDŤŠŠéš>ý˜¸•Š˘ŰQEjhhŘďxťv vĞz@łGä{n­Ť=ôő„Ž,(c“ľ°Š~möçűÜsĎNzžČŕOt5¤ţ`™NH@ąż§ěť–,ĔŽč÷,zý˛ËŢĺ„"E‡~ěÚŽżţ:eggŤˇ˘ŤűXE¤Čöbé°°›űý°PXtč礓Nčq¨4Tüƒ‚ŰVËÂ!&ŒwŚž|.“¨-YŹc"[YăÔSOÖÜš*éŘŚŠő/ ‘‘ë6?眳5wîkZîšQ!ů4Ši$AOŤĘŽ×֒35cĆtMŸ~lx_:-˝hń×űß˙^€Äţ€>‘j¨'VŔ&ÓבŠxϟ¨ŇOäşÍĎ:ëL-X­eşQuySutőƒň†î:źEZ\ţQŐĄO8^G}Tx_Ś‚<„~öGđ ™ ő4 ’čůÓ ˙œzę,eggkÍŠ){œNŘó'ĺ4\5äLҢąŸPGîh6ëM›65ź/Q5ŸXŸá€ôü}Ś'­ź"ĂéT ʔxלNřgć̓TVVŚ7ßĚŇźŹŻjFŐ_5Şu†“ÇŤÍ%çh͈+TP2RžqšĆŒޟN Żdű ÄFđôŠž„";zţ1VůŚ´´DoźńŚfNc›ŢÖąU*'ؤĄŽ1{‚–ů ň§jüřqš5ë„÷' ý¤ @l@ŸëMřg Äký•NřgÔ¨Q:ďźs´xńmۖĽšy‡ęčę‡4žům EOś6ޏXF\¤œźBwä:ę¨#ĺóůÂÇd:äC( >‚? _Ä Ň vąBKé„ňóóuúé§i׎ÝZ˛dŠVä}Bš7ëÚç4žeI׃˙ýz˛´˝h–֏źLÁüњP>F3f§‘#Gv;Ž'ĄZ|ôÁĐŻ˛úOd$kčmřÇXKʞ˛‘ZąbĽvěČ׊ƒľŠi˝­}Jĺ­Ť5=ŮÚVtš6Œ¸XÁ‚1***Ňa‡ŞC™&Ż×>ާ‚=˝Cđôťţ¨ţ“,T’n(ŐđOäů˘×sssuŇI'ęĐCŃúőö€JPvóvmxS“¨ Pف֔=NۋNюŇ3äÉ/S^^ž:h˛?ü0g9R_…~$Gđ ˜čpGOƒ@˝ ‰¤DJ%ük[ôziiŠš6mŞÖŽ]§ŞŞ|í.=X[Ű.WiărMj\¨Ń­Ť”lUiέ=…Óľłä4ľʜœuM“&Mt‚JÖ˛,Ro>„~2ƒŕ4:đ‘J˛Ţ„L䶑#GjÖŹSÔÔÔ¤;wiűöj-.цŔŠZÓŃŽźŚ Ń´ZŁZרŹ}Ł|ĄNeJťˇHŐy‡ŠŚđ(Ő#ţ8egg;-źĘ‹ 5qâDMž<ÉŠRë=Hś-ŢgIč sţDčMřÇ$ űÄÚVTTä´Ń˛Ę:UUUN¨ŞŞZůÓU;fşŞ…ĘnÝŁźśĘkÝĄ‚Ž ĺwV);آŹ`› ň…:”jW§7OĘ‘żkî÷äƟU¨–ěrľäŽWkŢľLR ˇĚ ůŘä뺆â‚|•——;~Ź"Qź×ÝÓm‰ś§şÝüˆŇÓđOźíŠ…œj;ĺĺÎ U__Żęę' T[[§`Îľ–vM]ÇÖŞçě™ rrTV6RcÌэQe*,,Œ|Â=„~2ŕ@ ą‚9ąŽ‰ţ‰~lźóĹŰn! kf“U˛ PKK‹š››ŐÔÔěĚmňűýÎťŚ€łl-ť˛˛˛äóyť&Ÿrrrœ`U*,,pćÖÂŤ§aœLVůIőěŕ@ÉŞ˙$ ĽZé'r{źsYČ;6Ť„ÇĆ;o*Ÿé*?Š€Řţ$ŃŰÖ_&ŐPäžxűăŰ˝iÁŐÓ}é€řţ¤ ŐđéI(Ůă"%ťŽd××Űc{řIç8ÄGđ EŠ„’—‰J?}šéMőŸTö§{#řJ5ěr H'üczŠÜďę‹Ď SA?}ƒń ÁStŔ…A†}’…vŇ96SU~ľë‰TŸŠÖač.z,…ąÁ€J§R*aĄTC@ÉŰS}Uš‡)€žAđ$Ô=´aË´ýŠ”NőŸtŽ–ÉdťŻž„qüô‡}c*ŒŻ€dţ€ýÄŞd]†A‡îŇŠţăďJ74ԟú# €îcDąĆWsąü)s‚Á |>ŸĐ]şŐ˘דÇö…Ţ "1Đ36ćf_é řRćőzä÷ţ$ĐÓPäc]ýĘÄ`R˝ccnĆĆŕREđ¤Ě,ŕŃÖÖŚÜÜ!ąŢ€˘ĎЧçë‹p€Ě°17k!řŇAđ$e‘ƒ---*--R“éV^ś!ěy6ćfܛďƒŠ 2 âŠ\Ř;č uvv†{Ž#=CyІ'€žacm6ćfC/я‰ü E,ř|YÎśÖÖVĄçÜÍ`¸‰źF˜úŽľŮř‹˝EbL$Cđ$ĺ–śšĎçsśŐ×7™1˜6}úŸ;Öfco‘cqÉd 7ř …ÂëM~ż_íííĘÍÍ2+VčĆýúň9Đ˙lŒÍĆÚ"C?‘c7ܤ!* Š5А•ľˇÝWMM­Đ?˘ŤővŔŕ`cl‘cn.Ćq@*ţ€ýÄPˆŹřcƒ6ďěěTKKŤ¤ĎĆÖlŒ-rĚ-^ŕ‡ˆ…ŕˆ+r!şbLvvś3ŻŹŹT0€Ô٘š­EŽľEWlŚęH†ŕH*VŤ(ë9î–ŽŞŞ€Ô٘šŰâËĆÚh×z‚ŕˆ)ňŽ˘Čmnť/÷N$ŸĎŤÖÖ6Ő×7@r6–fcj6śćVű‰Őć+Ö@$‚? ŠXwíků•ăܑTWW§ććfˆĎĆĐl,ÍĆÔll-ŃŘ@2YˆĂBĄPxîns[}šěŽ$ëI^UUíŹ @wúą1´}Ő´}NĽŸČV_.Şý€TPń¤$ÖGnůá˝w'í-Ilőőő°™E‡~˘[|Qí¤‹Š? ĄČŞ?.Œ° ?îŔ„qƒ?ŞŤŤW{{ťFŢˆöVĘŽRkk›3VfăhYYYÎrdč':d€dţ€”E†€bzlŔ ˙Ř@ĆÖ­ŰT^>F4---Úł§˛[Őlˇ˝WôDŘôÁ°7ŕk=VľŸčÇÚöŽŽUVV9eeeĘËË0ÜľľľŤŚŚĆšAÎĆĘ,쓓“řÄ ýDގE€€Xţ€”¤ţąuŰnrssĺ÷űÉ8***œŽ‘#G(??Ÿ`Vl\ŹľľUľľuÎ qĆĆĂŹJś[);2č“Nč ‚? ŚčŞ?ŃŰb…Ü6`î˛[şŘ‚?věŢ~ćŐÎ~ŰWXXčTr{š3 €ĄŔĆžlŹËnzłę>ÍÍÍΘqŰzŮx—šă^îvw9Đăf ‚? ŽTÂ?î˛ ZŘ`‡ťî~¸ƒśnw:Ů`ˆ-ŰźžžžkŇ~ĎyŽČ9ПÜŔMô‘íż"ˇš".w{äsěŔ`kü+Vh'2ŕ}ldkŻD•ƒb­ÄCđ¤,şúOt ČÝ9¸Ůţ+ňń{+ý(fĐ'r›{0Üq.“¨ROŹö]Ń! xDč¤ƒŕHK:­żŒ;°YŃÇ&ˇÚOdŘ'V(˛}Пâ…tľëŠŽ”j•ŸxŰ!řŇŻőWäśxŃAŸXçŠÜ ´čÖ^îśXű ü€ţDđôXźę?&:dskŰšž¨ÍWô`G˘!ôD˘ŔMź}Š´ěŠl–ęůz‚ŕč•x{bmnűkp$V(r?Đß…|"ˇ§S͇ń. @FÄŞţăn7Ń!žčíą*ý¤:řAĹôDoÂ7ńZyEďOw@:ţ€Œ‰Wý'Ńžx$с TžČ´dŸxǧť 'ţ€Œ‹WýÇÝ)ŮqÉC¨ö€Ţčm' €ž"řúD˘ę?ąŽs%:ž2-QőęXŇ đř}‰ŕčSŠ€CŕýɏŠÚą}Š„yü€ţ@đô‹X T= ’`0‰׊żb, ô'‚?`PŁÚA0˜üý"^ŻôT*ţŔ@ˆżŠÜkŮ$ji@ŸŠ50/Čcƒ!Á`Péœ Č´Xmë]^ݎŰzä1‘a@ ?ü}"•Ŕ­ÇږęůmR+˜ccNń;Ń7ŽŮqŃA!@ żü—(ôăŒŘz pÖm9r{äqŔ`ŕVúq<śnË6÷ů|ÝśÇ % ôÁ1É?6YŘÇď÷‡ˇGÎ#o9Őç’IĉUšÇÝî޸ćcóŹŹ,'dáŸč Pä9€L!ř2"^Ë.ą ~lrˇŰHnnޞłłťAl0ÄÀ†„˝Źm ¨łłSííÎŘWGG‡3Ćec_6Y(^ˆą0 @ŻÄŤňăV÷ą›Ě(**TNNNxŔjö†{lň:7ś8ăaüinnqn„s'ŰďV˘úČ4‚? ÇbUůą›[ŕÇ&[ˇ;›Š‹‹œA`8˛`O^^ž3ٸXccSřŚ8łÉB>ą@„@Oüi‹řq' ú´ˇˇ;w3Ůziii×`GŽ€……|ĘĘFŞ­­]őőőáęŘšš{ÇÉ,čăN†ę? §ţ€´D†~ÜeˇĘ ^XčÇćvg“UůĄĽTvC\NÎh§úO[[›3ŽfákýĺV˙1‘ Â? @ʢC?‘“•-śĐ-ް°PŔÎÂ=ĽĽ%ĘĘňŠŠŠY­­­NřÇŞYČ úţ=Ađ$•¨ľWdčÇ*ŹľW~~žěc7Ęy˝>§ő—Ľ ˙D˘őHÁP˛ĐßďWGGĄ wěĚÂ?6ŚfÁžŹŹîżŽ‹ űPý$Cđĕ,ôœ ›ú’°1´`0 ĆĆŚpřÇçóu;†đHÁS˛ĐUřą_Vń'''Ç)U 9Kkoďp‚?^Ż× öŘ<ᐠŻRúą*?üąĺ#J u6ŚćŢ\gcmś9 ‚?`?Ń 6čšĎ&ˇĹWYŮČýîF˜ŠŮؚąŮX[tŕ'rLÎąĐę ¤$ňn#kďeSVV–ňňň„îúz†˛ÎÍ­Ů›;ޖ[b ¤‚Űó@BąŞýXůa›ÓâŤ{ ŞżĘ0Äs oŘ[ä˜[˘Ş?Ѩř’˛ÁˇÇ¸•śÉçó)''GšÁ˛‰ž.îlŒÍĆÚÜq7׹ą8kĆH†Š? ŽX}Ä­ä°ÍKJŠu Š•u¨0tŘX[äŘ[$Şţ€Dţ€¤"C$6řĐľEšššΆSp†ŔŕśwŹm_đ‡ą*Z}€˜Ü…ČAťťČ&Ÿ/Ë)5<ez@%SçËTYg÷z( 0xŘX›šYŤ/ˇÍ—;.gă8î @Lс[ˇSPP á$wQEžŁ/îĘĘôůšs `pqÇÜl .ÖŘ@,@Bn8Äî4Úüą6_9†Cx&“! œ˝cnĄpŐĆl@*hőö9 ˝ †äóů4”őtŔ$Ó|béMÉćčsŚ{.ڀ słąˇDcsŒŰ€h@\ŃAťÓČXńĄŞ'átÓŰę;ɤ:ŔÓÓ ƒHýĎssÇŕ\ŒŐ€Dţ€¸ÜŕHtYáĄ8ĐЗáţ.šœneŸž|vT˙č_‘ă0îxœm#ř!ř’rC nońĄ¤Ż?}Ý.,Áœt‚=ézô‹q+ţ ľq800ţ€4 ßĐO*Çöu((Ős$ á¤ęIˆđ@ đRGđ ;™ üô&dwgEN‘-Ӣۧ Ö¸áwŮzťGNąž/^ '•P: Ş˙ .Ŕ~bY†JiáLUĺIwż­gňűýá`OŚŢ77dSVV–|>Ÿ3š}ŢŁw˝™ ţč;Cy|ô/‚? ĄĄ4 ‰ĐO:űܐřq÷Űśv§śuVjs`6uVhk°JĄzľ¨CmĄľv͛˝j÷řÇ䆲TĚQžr”çÉQA×|ʧTSźŁ55{œÎ*פŹŃĘÍĘvžËXřĆ ša ČëěiˆđŔŕŔ H†ŕňú2đŤ˛Ogg§3YÇZxŮňžö:˝Őą^o6i™śj‡§V]{÷=ĐóŸ)ż' f_{Œ čš:öNYňibh„Śë č=X3sUyŢHegg;mŔܐťž¨ŐWoÂA逞Ađ i˝ ý¤ş=2ěÓŢŢŽśö6˝Őś^Ż…Öhqp‹śzŤ´”Nf`ü h‹§Z[T­'C‹ĺm÷hJ۝ŕ9HgyŇ‰šÓ”—›§ÜÜ\'d ›"_Oş Ş˙ ^Ŕ•Jč'Ý*?ą?ÎÔÖÖŚ--ťőRp•žő,ŃNŐí=ČŤaAŁMž=Ú¤=z8ř–Ć´ëźÖŁuŠçx’7^ůůůNČÂ?999Îc€z[ý‡đ@˙"ř†¤Ţ„~R üXĐÇB?ÍÍÍjhnÔóţĺzÚłDŤľŁOŤúôFĽő ŢЃĄ7ttëD]Örź.ĘšŽ’Âb& őśúá€ţEđ 9}úńűýNeŸ––Ő5ŐëĽŔJ=ŕ™§ž: %Ť´CŤ<;t_`ŽŽm8Y—7 ‘Ľ*** W2ąÂ:‰Ş˙ţ<ţ€˜˘2Š„múC˛ëčiŕ' :ŸúúzŐ´Ôë‰ĐŰúˇŢT§ICŮ5č÷zI˙ žĄkOѕÍ'ŞŹ°T%%%ĘË˓×ëMŤúO*­ż˙ôNŹą9Ć[@,@Bƒ%đcú*ôcm˝œi^`­îđźŕf†“j5énĎl=zSi<[7OwÂ?ĽĽĽÝÚeŞúƒQ˝7˜ĆćŔŕDđ ™ ýDŽŰrSS“jjj´ĽsîЋzÓłQĂY•ősĎSz1´BŸŠťHÓšÇŞŹŹĚi–¨úá€Á‡ŕôzúIśÍď÷Ť˛˛RőMúťgžÔę_Š%Ú˘Ďzţ˘÷vÎŇű+NSisąĆŒŁŹŹ˝˙<Œí$jýEř``üƒZ_„~ZZZTQQĄ]ţZýŘó¸Vi‡DíęÔýž×ôFhƒžŐtĽÚÚÚ4věX8űSmýEř``x0He"ôcëî6›[[Ż;węľŔ;ú´çž6ôi­g—>ăšWsŤşŢ›]Î{ůž%j—–h[:ű>*ţ€!)ŐĐOä˛UůŠklÔ_<Żč_Z¨ُšŐŽę1]ÚŽ[ŞĎUGG‡ĘËËĺőî͉Çjý•nĺdÁ0(%Ş“nč'hǎŞkoÖ÷=ëmmögA¨Ç{Ď=OÜÇ&ڟěąX‹/ќ9Żj׎]ĘĘĘŇÁOŃu×]ŁQŁF Ŕ nč'r[är0tŞÓTůőĎżýd@Zô=¤_úowçNMžŸo˙ă¸ĺ×O<Ž`3aÂxÝ}÷*,,Üď¸N8^żűÝŻőŠO}N‹˝í|§ţţ÷ęßřŞTÖ zË~žęěětćîd?˙ƒAĄ÷ěg7űYÚ~&w§ěěě˜?Ł`ř"řtZ|UWWŤľŁ]?ö<Śľ ýŁImÎ{ţ‹ŽĎ`̘1Î`ă`jůľfÍÚđň•W^3ôă˛Áҏ~ôCÚšs§łnŻ)ÚYgďT—˛góçż"żßŻ|HO?ýŹśnÝ欏[ŽYłNŃ?ř~tĐdĽbٲĺzôŃǝĘC{œmcÌvIW_}ĽŽ?~Ć~š˙ţżé׿ţÝ~ŰĎ>ű‚đňžđYÝtÓ ÎňŞUŤőĄ}ĚYśĘG™°2 ć_zéNE.óË_ţ´ëπ፽˝]Nŕ‡€OßrßßČöÖĆ~Ćľýüj`0źü"-žÔÔÔŹ4OŤ´Cč_ďh—ÔÝŘt–Ó¸ŘŮ>ŘZ~šçNĆÚ{=ńÄ#J… böł_ÔŰo/îś}ŰśíÎôřăOężţëŰzם.Ž{˜ýĹ/~儇˘íرәž|ňi]sÍUúÚ×nsmڙgžĄ˛˛‘ŞŠŠU]]˝ćĎ=aç7†C?ŁF•éŒ3N€áÇB>řqŤŽb`Y Č>›6Ý ?W óţ€A%_őő ÚŹŇƒzC˝ŽsG+ť.[˝nů•IGq¸fϞă,[ç˝ď}JKKŐ[6€úĂţÄ ýŒ=J_|‘ƍŤĘĘ*˝ôŇlíÜšË Ý~ű˙sřâ ÷;‡˝_ůĘ×5wîźđ6kGfŐxě1Vqgűö˝aśGyLťvíŇoűŤđű6cĆqúÄ'>î,ßuןÂç¸ńĆv}ůác’‰<Uzíľůá}îvc×eěó}÷ť/s*™gŸ}>ađÇŞ!š.żüݔ›†űŮÇ*ŁZđƒ—˛l˛ŕÝ¸c•€0|¤úOŠű<)Ě=qÖÝÉ1w'ßśů˘&ŰWbóŽŽÎ}żĽ˝bĄ &Řä.[ŁÖÖƒ!Mžđ÷%źŽW_}É `E‹×ę+ÝcĚŚM›uýőp–í}|ᅧc>gKK‹.šäňđľ=üđƒ)ˇ?0¸ŮĎ>öo~ ţ`豟cíç¸D­›1pŹ’°×ëQ~ţŢĎČĆIlěŔćî2Ȍœœl+SoýSţ3DMĄ˙̃S(b=)Îz˘yôr´¤- ź$R ýXŔÂ݆VúŢňlÔźĐç3‰ ĆÄűüb­÷…˛˛2ýâ?Uqq‘łž{w…ţëżžŤ .x—nťíkNřĆB,=Q^>F?úŃ÷÷ťKŇänżý›Nľ!S[[šl€ü¸;źţĽ/}^×^{u8ôcl ďŠ+Ţ­o}ëëámwÝőÇAqíÔŠkúôce+ďVUŠöňËŻ„żÇ?ƒĐ0L477ŤŽŽŽĐĎfŸ}†öY`č#ř† ŒÔ×׍Éߪ?č%ap¸S/Şšë3ihhč—POŞN:éD=đŔýNť-7XcĺÍ_yeŽSqÇ*×\}ő{ôë_˙NťvíNůźď{ßőqŤŮó|řĂ7…×_|qvˇý źá´Š3V…čúëŻS<—_~™ŚM›ę,766éő×h0¸ňĘËĂËO?ýLĚc"ˇ_uŐ0´ŮM ‰źáC›}–ö™Úg €Ą‹:Ž _Ĺ …¤Zí§ŠŠIz"´H•jTňÔuJ5 îjR¨Ş]Şďčş N…ťś7t(Ԑ:l î}@ű–ó|RvDŢş°ëŸ`YňeKE]óÂŽyIś<Łrĺ“ß5ϓFç*”3t2Ú{Ô 'ƒ‹őţö3œ;‹ŠöVŮąĎÎmÝšk=Ůöž?~œSçóŸ˙Ź^xáE'<łdɲđ݊ۡďĐý÷˙M˙řǃşćšŤôŮĎ~*fëŞH§œrrÂýłfíŰżző; ƒáŕѢE‹ĂűÎ>űŹ„%şí}°–b7nrÖßzëmç1í’K.Ň/~ń+'De×TUUĽŃŁG‡÷WVVęÍ79Ëö^^xáů0tŮżýíçq ?n Ë~ŽĎˈ‚?`Ȱ@ˆ…Jš;[őo˝Š>áÉťšYţő mîÔÜҨĐÖf…vśHAeRŇş8Ľ9ňN,&Ę3šČ™űŚ+4ĽPňe.“)é ]Ůy’rşƒ 3ŢÉŤŽsÓM78“…~–-[Ž9s^ŐěŮ/kϞJ§–ľ˙Z˛dŠţřÇß' ˙X˜(‘ŇŇŇŽ÷  ëűÚâ„~jkk5jÔ(gߞ={ÂÇrČ4%s衇†—-P3Ř{sÁç銧žq^ßsĎ˝ nř@x˙łĎ>ďl7Vm)??_†Ś––gÂđfÁ.ű9.ٍ0|ţ€~ÓŰj?úąj?Ď—ŞĆ“™; =Ő ,ŞThUBŤťŚő řôX}‡‚VU¨ëÚ\űOśWžCJä9źk:ŹDžcʤiĹ p ęŽĎäšĐR]Ó1Ëśđ U˘ĺäähć̓œéśŰžč´ăúń˙G Zťv~űŰ;ôőŻ%îăSľc,řcěźnđÇZŐšÜĘH‰ď;ŚŽŽ^ƒ…ľď˛ŕyć™çşž~úŮnÇšěçpZ{8ěgyűyÜýyCÁ0d؀c[gťţĽ7ÔSËôź]-˙ë ˝YšˇŞĎPÓTč:g2ňfÉs\™tü(e8Z:Źd@‚@˙ -ĐĽ'8w •B ]tŃ*+ŠO~ň3Îś'žxJ_ţň”ó1Ţ3fLÂóÖ×7„—KKKÂË%%ű–S)•ßŘŘó<턎פIViďźłF›7oŃÁOц ľnÝzç˜iÓŚjúôc`č!ôs`r?sÂ?CÇßĐ]źj?vיßЋÁÚăéaՓuę¸aŽ:žź@ÁmšĄŸ8BÍ~_ßŁŕŤŐqË\u\ńźß_˘ŕě]ň´ö_يŽĎfv×gdŸUd)řxŸk_illÔŞUŤiýú )=ćÄOPVÖŢ\|[[›*+ŤâťiÓć„çÚ˛eŤÓNĚx˝^1"źŻźź<źl!™d6lŘwýÉÂFýÉSW^yyxýĺ—ç8ó—^šŢšŔĐa?Ďú9pŮgO{7€Ąƒŕ芜ůŠÇî4ôűýzJKÔžwÔůĽҎf;|a‡˙ýś:.Nţ/żĄŕ“[ĺi ¨Ż=ĽĹÎgeŸY*zű݈eçÎ]úЇ>ćL7Üđá”,+++ëvĹżťqîÜyJä•W^ /sĚŃNřÇuâ‰ÇGœç5ń?{^yenxý¤“NĐ`rů嗅_ŰŤŻžćĚçĚŮűÚ-DuŮeĹn„ ôűŘwƒÁ0čuvvvM~mńWjg§z˘ó§KĽöž˝ JÖě­*~ş\W=ŻŔ–(´¨Zž>*źłşë3ÚÚőYŮg¤éO‡2M……βkţřÇ{o›ßţöŽđú¸qcťľäŠöđÏj׎Ý1÷544čŻ} ź~ţůçvŰúé§uťŘYśsüűߏ(žgžy.\ȂHöŘhVyÇŐßďˇU/:őÔSœĺ+VjĺĘUZťvł~öŮgŞŹŹL†ű™"•–Ä80Řwa ~Ž@ęţ€]Ń%^;(+1 ő|p™BJ?­âŮÔŹĐúĄK{PÁçwČ˙Ľę¸~ś‚ߘń*@ö˝\î|fŠśűĘtű/Ť6sĂ Żßwß_őďüˇ6nÜ´ßóZ;°/|áËNČĆůŘXÚŰŰő™Ď|~żóYĽĄĎ}îKŞŠŠuÖGŽą_ť+ťśO|âćđú/~ń+=ţř“Îűy]O?ýŹ~đƒ‡ˇÝrËǕ““łßľŒQ^śđMťňĘ+œš]ł˝–}Űió 5„~ďŔŕ—%€>ÖŰP‡:ýz)´Rň¤˙řŕ†:!†=­ ÜšZÁżŹ“çݓ•őŢi ÍS&źZĄřĎu>ťD•s’ąďNdE›t|řĂ7éíˇ—č­ˇ9ë칊Źl¤ĆŽëTި¨P}}÷P˜UŞyď{ߓđܡÜň1Ý}÷Ÿőţ÷ߨ㎛ŽńăÇiϞJ-[śÜŠPĺúęWoSiié~ßűŽ×ëŻ/ĐźyŻ;×ń˝ďýPúÓ=:âˆĂýë֭לmŰĂǟrĘL}ŕď‹y-§ž:ËŠ@džńŰu晧;ďŮœż_ľĄžpÎ9gu˝Ćç}´×oÌł:€ÁËmą Dr[y ƒŔ f•U –ř7kˇ^=Ęń ń…Zü ţk“:Ţ˙˛ü?Y&oUťzkw×gľ<°Őůěě3šššúŐŻ~ŽëŻżN^ďžöZ5žŐŤßqZRE†~Źύ7~P?ůÉĺó%ţÎXçŇK/qŞô,Y˛Ô -Zôv8ôcçúîw˙K_|aĚÇ[0çżřŠŽ˝öęđś;vjöě9ÎúąĘ9żţő/ť˝†H7ßüQ•—q–­ÂŇóĎż¨çž{A/żt¸B…=MÍ ŽŃLć|†Â1‘|zSÍ'Uyyyúú׿âu^xáE-X°P;wîTmmîąV\ăǏ×駟ęTș4ibJçľëţŢ÷ţŸN>yŚSmgÓŚMjoďĐŘąĺš5ë}đƒď×ÁOIx }ë[_×e—˝K>ú¸/^âT 2V1çřăg認ŽĐI'˜đ<ĺĺĺş˙ţ{œ DóćÍwÎaa÷ĎN°×đ<^żâ Ú|CId›f űŽôŚ˘/úNŞżiń¤¸Ď“ÂÜgݝźswňýg›/j˛}ö/MoGGç|€Œ°ÖCʰÉ]Ţ{÷_‹‚Á&Ož”ÖůbľúŠŢ+řcóĘĘJ'PńĄćßjkVz*đƒ% >żC=á)̒*’grĄ46_'ď˜JžËŇűź]SŁuOÁg”——ŤŃŁG‡C>‘aŸčŕOŹ P_‡ƒRuÖYç‡ď€}ůĺçU\\,ěeU†žő­ď8Ë'žx‚îşë:::ÔĐĐ  ţäää}ËŞ{˝ĺç87 ٸˆÝźdswdFNNöé]3ű%LĂ恨)ôŸy0b EĚŁ'ĹYO4^Ž–ôŽv*ţ€>+ô“*kŁä÷ThŇ6_ĎC?&űKÓŐąąQĄőI3Ëóĺ9źDŢŁFČÓ5y§–(4ŞoľB9^Š,ǙŔ€‹×ćËî:4oű7*ÔËÜG°Đ§œ;ϐ˙Ďkxr›ÔŘšwGIśź'Ž–çäŃňžR.Íë~m`^BĺyňŘd×řŸÍžś€‚+jZZŁŕâj…V×őYe ŔÝkĺ;kźB“ Ňzœ}f‹ý›taÎńÎg™ŸŸżw{?ˇűBßz㍅š7ďugšŹl¤.źđ|:;; H…ű}ąöŇ<ţ€AŤ˝˝Ý™żظˇÉg/s˝ň~ę(ůn=JŞjw‰†Fçj( ĺůä™9ڙœ>Š!—V+8ŻB!›vgđŽÍ@P'ˇ8ď]ş7ęBď|–nđCßßţöw˝óÎçs;w^8°wóÍăîO`qîReß‚?ƒ ÁĐďRi˙eÇX•›/ mQ&9ŐƒĆ ÍŔO<ĄlňuMúÂ1ŇŚ&^ŮĽŕó;$k ÖKÁ ájCéXÜÚíłLV݇ @CĂż˙ýˆśnÝÖmŰĽ—^˘ëŻżN†Žśś6é°ďLQQ‘0xüƒ–ßPg0 žz!MS‹ä›z˜|9LĄ•u >ťMÁŮťöľ8K“§'П.;}u]ŸĄ_?ažá˘ąąŃ™çććĘçóéCŚéškŽŇWź›Đ0„ ćj?@Ŕi)RC‡ xŹ˙ő\yĺĺ:ę¨#´pá"=óĚôÝw U_ß ˘˘Bíšçx+ô4hĐ@ĹŁžţ }łf‹ž˝Ázüř'UUߪg~:ŚĂáú9ăţďôňWĺÖňż]çţéA4~PŽâÁ—Ü%Ç뜍ęJ6‡SZ\ŁÖĎKĺœS.ç˘j×čU”;Żi‘snš5yŽŚO†’ĆĘ6śPöI˝ĺěŰ ić˜)›kŠe3˛Ő[óx+#;Ťx ţlٲE~ř‘Ďş)S&ľ ýxËČČĐ5×\­‹.şÔ'04sć>ÁŸ@Ţ|ómÝ~ű>‰MĹ!3™ăőŤŤtŔű<ś˛˛Rúӟ5ţ7>ëM…[SČL/żüގ;î]zéĹJNýO0ć}ř裏őÇ?Ţěó7óƍĽzýő7őîťďëşë~ŁiÓöRźééĎPIašrÓíŞiÜzŻ|]ŽÓďűŽCá˙ЏaÎ]R˜.€DĐšş‡]Ä=×hë˘ňăŽÓ;ţóƒZN˜ĽćK?’ăßKĺ\PĄŸ`ĘäxkÚn˙VͧżŤÖs>PŰý‹d[P%[_vmR“5'řń!ž‚?óć}ÝîzLežpú÷ď§ŠS'űŹ›3gnČc~řa…ţţ÷{ƒś!7!˘›ožŐ§’[mm­.ťěŠvĄćÜ/žř˛. gÝşőŽçűKĐż—›ššôç?ߦ͛7+Ţôôg¨(;EĎ]ś‡2Rś˙3—;üc‚<‘ ú1ç4çî•Ý mŘb€ŕˆ ţƒnžŕORŤşBŰ?ŤížErV6+Q9Wn‘ăéÔüӏŐrâ,ľÝ˝Pśďťˇ5Z$šě[ßC˙Ě`­€ŽO­XąÂg955Őj™‰É“'ů,WWר˘˘"čţ_=ß ÷˜Š<ˇŢúşĺ–›tŘa‡řěcîE ăÎ;ďVii™g933C^xžkýíúË_nśÎiłŮ<ŰgÍzˇ]%#˙űß Vľ #Ž8ĚjűuîšgŠWŻ"Ÿ}ęęę­JDń&>CîV 1śĂáŸ`ĄsNsn€DAŤ/—Ü!‘ŚŽţŹ­—ă™´#qV4ÉůÜ 5ť&Ű lَ¨äcəÝóżîľÚÜß´ ĐóâŠ"ëćÍžAÂ‚°-˛Üz÷îđ|………Ašřâ tęŠ'{–Mx(??_Ď>űœgÝÚľëôÝw ľűîc<Ë|0Űł=%%Eýë_4räĎş öTqq=đŔCžuĎ<óíťďt…rĂ żÓôéűx–M€č‚ .QUUľgÝÜšótöŮ?R<‰—ϐ;üsü]ߨĄeë5™đ ô<ý“ŕmżý€ @\rqŹÉűŇю7şţoÇ­6ă\˝EŽűŠů„ˇŐvë7˛ýP§žÔfŰzŻC}ę?°sjllôYÎÉÉQ¤rssŰ­3íą‚1Ą˘“N:ĄÝúłÎ:C>ë>ţřSĎăwŢy×gŰôé{ű„~ÜN8á8Ÿó,Y˛4d˘áÇů„~ óš;ěPŸuĺĺĺBp&¨ó‚_ĺč1Áž@•‚…~^ ô@éą°G]×´‹;M9^[Łfה´WoŮĎ-í–'âEzzşĎň–-[ŠÚÚÚvëŇŇ҂î?nÜXŮíövëMXg÷ÝwӜ9_zÖmܸŃóř‡|ۑ˝÷Ţ ŚĄĄÁgyĺĘUA+ <(ŕúţýű…<'Ú;h[řçŻĘ?îđwĺŸPĄŸƒý€EđÄ%›mk՟ÔVťRb\>zXäß +É&[~Şk”Č5p˜"[f˛œIZZ5śZAŐťćŐÍrvsřČńŮ&k˛Mě%űĹŁeŰ-_ÝĹîÜz?l6Z}|™*<ŢLŤŽśśś€›6•‡=Ÿďśŕ-ŔzőňmVQQéy\^žšÝţĄÂ?ŢŞŤk‚n ÖŇ,ŇVgđ,üsÚ˝ ôěĎvˇ–ÍăWço? ý€ż=€¸”””äčs(ľ-I )ŠŠ¤}ŠĺčŸ)çúúČHłË6éJę“)ĺ§ú„akvĘYŃ$gyƒuÎuuŇ:×|mœËkĽŚŘˇ83œ_–Ťu^šl PęOw•ŁWšşšÝá.ľM;/ˆćon‡#Ć_˛é ĄC‡ú,777kţüo4aža3gŽĎrnnŽŠŠŠ‚îßÚÚńśX}yĹźž‘ů ĹŁ@áô1÷c7B?`GAđÄ%÷[ş#YŐjRLšvRnžŹć_~.•7śßŢ'CI‹dŰ˝@IŽÁŰĐě€ážÎÄXœŠŽóőM—ÍLťű0Ů\ăRÎ5[äXR-çb×4żBÎĺ5R[Œ‚3ŽÓ8g­SÓěJúŃp%Ÿ3˘CáĽHĽľmý–fź ŔÎ&ž*˛N˜0ž]éĹ_üٸąTŸ}ö…ĎşI“&†ľXÎA™žűŞ{9M>fpś’\“°ue}›ßTČůE™œŸşŚuV+ ĽÉu·—¨uiľěšäşę™-ŠÖœŕÄÓF˴ӊ999š1c}đÁlĎşO>ůLŻž:SG}dŔcuŰmkWMçČ#W(ß~űjkk­çôśyóf-^ü˝Ďşţýű{2XŸ~úšgyáÂEÚŮEҊ­' ˙¸ú;ţőÄ%wH$ÝŃu9egŚ]I§Sň ăeżnź’NÚ.ô7ĚľîŐ[öËÇ(ůé”ňÄţ˛˙xن娳łKĺř`ƒşJv[řŕO<Sv4ńÚ8眳”’âŰçűÎ;ďÖ]wÝăS‰ÇT2í˝~ń‹Ť­v`ŢLĺ ńăDž|ş÷Ţř| ɜóîťďk„š6mŞçńAčłí‹/ćś{~cíÚu:é¤ÓtŮeWčoťK/˝ôJÜŹb-ރ?†;üc‚>n„~ŔŽˆŠ? .š Zł\˙żYđ3(ËjÓe&­¨UŰ[ë䜹VÎʎľEsźżQIű÷SW(˛ŢĂÄ€Aźý}6xđ ]tŃůş˙ţ|ÖżňĘk֔““mUé)/ßܮʏaÚr]}ő•ŠÄŹYďZ}ö™f€>üđ#-[śÜgŸK´Űnťz–Mş)S&Yą~űŰëuŇIÇkĎ=ˇś*űţű%zîš˙ŠşşĆšLĄÝwŁăŽ;F;˘Důß|^žrŹ.~xąľüŻ vŃţťú;‚? .řˇýJNŢúkJżÖ\!ŒĄ9Vő]8ZŽ÷ÖËńÂ*9TFu [UÇC‘čۚoÍÝďŠç9Šň=ÂżşN<8餴eË=ţřSíśŐÖnąŚ@Lčç–[ţ¤ââ> gܸąV@DŽrü[{š™Ď/yeťŞľżúŐUşôŇË´ys…ľlHO?ýk $##CW^yšvTńř Ć}–ţešvT@\rsŹD˝„%۔tČk2ÁÇcKĺřlSdǖdŠŤ ˛Zs˙ŕO<1ßÖ4ĺ×ÍÜĐĚ|gb´MËĚÍĎ^¨ślŸű÷ţxűŰçÜsĎÖ¨Q#uĎ=÷Ť´´,ěţ3fěŁË.ű‰ŠŠŠ :昣tË- ؂+55UżýíŻ4fĚníśčŢ{ďŇM7ݢďž[ňyúö-Ö 7\kU2Úš˙v@| řâ’;$24%ü7öОm÷Ů˙2EöďŤŐúĎĹrÎ-žs’MÉÇ–S]cHJą5ÇŕOKK‹'đł3sż~s/Ě=qâ&Ň78DÇüžßÔÔuŐ_;jÚ´˝4eĘd}ôŃ'úřăO´dÉRmÚTný­’••Š’’ť‡>ř@ :DŃÚ˙}­`ΓO>­ žs݃f+4qâŤęPż~}ƒŰŤW/ÝqÇmúňËyzë­YZžü•——ŤľľMšš99r„uý‡rĐý÷+Ä‚? .šC"ƒÓŠew&ŠÍśs3:ltž’˙6UÎOËÔvď"9Wű•FˇIöËv“sT×´Tł;l’ą5řOß4ĆfB`&d&sĚ€.ƒşŔŽÇTˇ‰Çŕaţ~ÜożÖÔvŮe´nşé÷ęóE‰É“'YS´nźńşˆö;ě°CŹ)^™ĎâÁĐ­L;!ÓJ)’}’“íĘÉĚRQ}şĘ2ëOl[ZeŤhVŰćF9ˤꊥUÎşVŠŢ59źĆŹdŮRíRśëW°‚4Ů\SRŻtŠoڜ]ŰZÉ6­’§ô–óľr|°QÎęfنd+ů„!rŽŇŤ!KŮŮYÖ{i]‡ë˝ {­ěÓQ&ĚŇÜÜźÓWř‰†ť*’ŘĽ°ăHKKSmm­€h™ĎâÁˇLĐ ##Cƒ7öLđDŽwÖÖËš¤JŽĽ5Ň:×ăőŽëŘPż5ŕKůО ȔmHŽl#r•4*Oś‘yrŚÇ0haˇÉvÔ@Ů]“[Wľ÷rR›Żô^éqńmŔÖÖV+ôƒč™ TccŁő>ĆcË6“žžnýŽDĘ|f_ľ=*T ó ˛úúíÚÔGs´V]ŞŐ)ŰĘ-jűžJZRm}œËj¤Ć6u‹Şf9Íô]•ľh=Ť ęŒČ•m|‘ě{É6ĄHÎôři—‰]‹­÷8Ôˇť˛ÂĄŸŘpßCÂ?ŔŽÁü­FđŃ Ú@üaÄt™HÚz…Úß]%fBňp=îœ'gäClާkű÷ľýoĽTۢ¸Ňć”óűjkr<űƒë†$)iB/ŮŚ+yż~räĽ(ž™{;1e˜őŘżâO´aŸÎ„ƒýÄá`Ǒ’’bMŚĹ/Žűó€řÂh=ˆ[IIIJNśk`^_őŠĎViÖĹZëƒßËńř2%„f‡Ÿ•IŽÉqçwŇÔ޲^"ŰŢ}\Ło1l #}ërT’ßĎ5(˜l˝—=Á´¨"ô{枚÷´§ŢWącZlüA$Ěgń‡ŕčv‘TrďcJHçççiřš‚˜lÍN9Ÿ_ŠDäluH—ŞŐ5٠ҔtÜ %Ÿ4LŽźřůőnhMž †ä{ŞýDRľ'ÖmżýtsoÓÓÓ ą™żŮĚ´#ţýtă× ąáţœ ţđ]×L°Ŕ ,íŮ0P1×Đ*g]Ťł˛Im,UӉoŤíÖodŰĐ x0ąq°ŐާÂ!捌⺆šˇ|+Ř1dff …Ď@ü˘âčqŢ€üŤ™ĐÝž¤ iĂUĐ8O•鍊gV˛lŠrVvâ[ůОőN—Š3d3íśŇí[ŰnĽšÉn­s&ۤ†6ŠÉ55śÉYĺzžŞ&iłk*oÚZ˝'ZrźśF-oŽ“í°Jž`´œ˝ÓÔ Ó5>m¨őŢů#ĐťŞOŹ+üxëL(ĺĂgëšçž¸Í´.ËËËÓ Aľçžă5vě;mË+sSRR ą™/m˜6N ńńEÄóŮ0ŸÄ'~S]*’ś^á˜ŚŢ˝ziěŚ~ú d…b&ŮŚ¤sFŞíŽďBîfë›!ŰČ\نçJý2e+ÎPRŸ É59S;\ą9œr–5ÉšžNÎĺ5r.sMK]ӊZŠ­c÷͉œŻ­QóŹu˛Ÿ>\Ég”#ľë6ŒŰÔWĹ}űXď]gu$ԕ•hZZZU^žŮšćÍűZ–čüóĎQďŢ˝ľ3"ü첲˛Źßď[[ż2.bÇ~Ěgń‹ŕč‘‚Üű˜đHAAŚ,ŹľRNu.Hä-é¤!ŽŃÍdľ=űƒTÖ([Qşň‘kJŻ¤QyrfŮŰŤ+p&٤žŽç4ӄ˘íÚä˜_!çüÍr~žÉ E­ÉĄśG—ŞmćĽÝř`ś=ôŕvǛ€Đ'Ÿ|ŞŐŤ×¨ŚŚĆş7ĹĹŚÍ#ô^ăJUĽ7hgĺ,ɔýâŃJ>o”Úf­“ă™ä\Qţ¸Š&uľ‚ĆtíÓ2RŮŮYÖ{ÖY ĹşÚO(Çs”žúękmŢ\a-› wđ§ľľUO?ýŹžřbŽĎq55ľÖ´té2}ôŃ'şř⠔ŸŸđ9L¨fΜšzüń§|~Ž–,YjÖYghʔÉ>ÇTVVęŇÚľëüÖWY×2gΗ:üđCu䑇+şóžčz&ôaţţhhŘy˙öޙ™żçÝ_ć@üăkš Çř‡:Âľ2%Ś ¨é ’3ĹŚ¤#J”ňČž˛˙a‚lĂrBîo•ŤŽ6}Ý` ě?ŔzŻÚ=ˆ÷7–U:2‹†Šr3věžeSőÇť$ţóĎżčúÉĚĚЈĂUP°=äcŞ™Ž bžeűß˙>ď967wűűl^ësĎýOÍÍŰ+?™óx‡~Ě5îşë.š:u˛Š‹űxŽ3…>űěsĹBwŢsÝĂTލĹ:XĚ{nŢ{$*ţ€¸çŽdŸú÷VŐÍ+U›a›ŤœÓ&%ĐOöýűŠmć9ţő}ťę>śšJ>´D]Y—%ˇ)MÓś U˙ą}=ƒĂÝÝćËčîę3î0›Šţc‚O7–jöě=ëM‹­K.šĐ*•n>ĎŚMŘ;ďźgm[łf­>ýô3͘1˝Ýůëęę5fĚŽşđÂó­vc&ŘóČ#iţüo­íMúţű%Vë1ÜÇúąŰ“tůĺ—iذĄÖ˛yŢÇŇŞřcźúęLM:ĽÓ €˜żhűľs0U~¨ôx¨řşE°`A4łoNNŽF ˘ië žŹĐQ•ňô˛_2Ú ű؆ä(锡J˝c/9ŇşöWż}6 ŇđÁCŹ÷(Ú÷5šőńĆPÔ]}Ç´çňvÚi§XĄĂź6Ó&,??Ďł}îÜyAŸă¸ăŽľB?Frr˛?ü0ŸíĎ3qâOčÇýźÇ{´gšşşFŤV­cţć TŐ;óúHLTüqĹ]Ý'Řc3UR2@űŹ˘ĎűŻUujŁŕ˙‘¤¤łFX“[W×cÉoĚĐ´Ş!0Śżg 0XkŻD ôDĘ˙›ŻŠŠŠÖ|Æ žuyyší*Ůív5ŇÓ lăƍ ڍ¨Đgš°°ŔgšššĹóŘűyÍš˝[˛iÓ& 2XŒůƒů‚imŹM1“y_MčÇ̐˜¨řŠ äççkÄŔĄ:bĹ!>ąr„őž˜÷fG ö„SZZćłěé˜]nÁžkĘćťŐ×7¨­­-ŕ~‘ŢSs|CCta¸ĆFÂsÂ3Áó7Ÿťľ3Ÿy/Í{Jč ąńŰč6Ţ|B­WőÇ|Ópذ!żf­ćUnВ‚ÍBĎŮĽ˘—Ć5”hȐA>­ŹÜBUűéŠ6_IIIr8şşĆŃVćyžůć[ĎrŸ>˝=!ŸŹŹí%Ň͡bŠŤŤó<ÎČHˇŞu†9>==MMÖň¤It衇„<&77Geî9€ƒůCZZšUýÔÝę‰ĹTŞ5Őz üěř­$¤ÂÂB=JG-ŽŇŠźĎՒÔ=AřJqŘuřŞŽ÷b¤ŠŠŠşłâĐkŻ˝ŽÍ›+<ËS§Nń<îŰˇŻžýö;ëquuUȻݗŠÎłdÉRŸýcĄ¸¸XŤV­ö˝{÷Ň~űÍđ,Ož<ÉçĎ>űœššśVâ1•Ť^~ůUUUU{í?Qą0qâĎăůóżŐ˘E‹}śĎžý‘Žšćwúýďo҃>l Ňw€“ äĺĺYS,ż\€Ř2ďű}"ô°ăĄâHXćۅťďž›6TŠĺů•ZS-tŸ’-šÚwă`íśĎ.ĘÉé|ť¨X1¤XŰôÖ[oš=--U\pžUîŢÍTڙ>}o}ôŃ'ÖňŇĽËtăԀT^^ފŠJĎžô×´i{)öŢ{/}ňɧڸąÔ +Ý˙1b¸ ŹŞC+Wޞö3•ŠLu ómĎÎęl‹2‰ÍT’1“i}lžđ`*™żËşŤ 3|™/g˜÷Ä|ź˙NŔމŕˆŚŇ‹Š„h9ŘăţýűkŘŕÁ:iIŁţ9nŽę“)/Ţ2Z“uʒ1>d¨dqëlľŸX0œfęŽfÚšŕ‚sŐ§OŸvŰN<ńxŤ˘Î—_~e-×ŐŐű´÷2JJčâ‹/°JĺǂÔ˝ä’ őŔYáółbBGţ¤łĎ>Sĺžß`˜żIÜaS=Ő€ĚÜ=™żQņů[Ěü}mžŒážLŕ‡/gě\ţ€nçđéČqîÇf0kĎ=ÇŤź|łNXśŤžÚĺ[9ýš9›ëÇ/ßUÓzkܸąa[|Euî‚Ě5uŐ@rJJ˛U}Đ Öë?~\Đŕ‹p=ďźsŹś_Ÿ~ú™VŻ^ŁÚÚZŤĘŽŠś3iŇM™2ŮÚ/–z÷î­_ýę*}ţůš7ďk•––ŞžžŢz^Ԛ8qOëyc1̀2€`Üa]'ŇYąE¸ÍÁÜdŮ=%yÍݓ}Ű:ťßdśĺšyssË'1áţž™Ü[[[ŐĐP/‡ĂЁKÔYĄ‚?ţŰź—ƒ=6Á†÷ŢűP3Kë“~k„Ž3}ý žn´8`_+źâ‹j?ąŹd‚.čz™™™ąąfÍZ%%ٔ‘‘iUvWu2s÷cŠŠ){ťfć[Ä5Űćm~“sŰÜá59˝ćţ“‚,‡šű?ööŰîÔä="š€G$@ŮsĎą:xŐp Ť)şĆđŞB¸z˜ĆßŁCĄŸPbÝţ+ÖUtĐ÷€žEđĝp`Á’QŁFiÄĐĄ:}ńęˇ%Gˆ­ţŽ{zڒݭ{ą÷„bB)ÁZpĄóĚ˝%ř@Ďâ_B@‰ŚĺS$łĎ”)“Ő/ż—ÎZPýíşpÁ ¨Í"ÓKŽ.Z0QlÖ=ĚËËól‹‡ OG˜ŔŠŠXD‹Şč™{fîĄâ ˙ęâB´a’H+ÎäççëĐCVżŹBťhźFT Ą ­Îך ÇŤ8­ŔşwćşEZq)ÔşHśuw€%%%EˆŒšWڈOŒŢ€¸Ń™H¨@ŠiQu衇¨¤¨Xg.ŤýÖ ‘Í)řąšţ7uC‰Î^4^%…Ĺ:üđC•““ł}{-źÂmďéĘ@&̒™™iÍ ´´gî‰÷=ń‰Zý a˜°ˆÓéěĐrZZš8`}öŮ粯–ÔĺęĹ‹TŸÜ"H™­):aŮŽUU¤K4mÚ^>pĄŸhCAńÂźF39ľľľYsó™1ó‰ ú˜÷ĚĚív;a(ÁWüĂ;ŃîjŮ<öŮgoőîÝKI_ÍWßo˛ő܈ď´&ˇZ;łľš:eéľfj÷ąc4fĚn>ÁX‡|â1d^/ahţ€¸*üh[4áîŘe—]TPP Ď?˙Bç/ÜS XĽŮVŤ%ŠM;“G’fŹŹ+7+GÓö›Ş>}úřěӑĐO<ˇřؑüqŠ+Ă?Fqqą9ä`͝űĽŇÖ§hüŚ~zcđR-,Ú¤Á¨Ę"šr¤zľfŤI?Mœ8AYYY>űúˆo@BŠ4üc¸×ůoĎČȰZ-_ţƒ.\¤Ó—ĽkŃŚMz}čRUĽ5jG”Ű”ŚĂVŽĐî•}”““Ł]Çí˘áÇľksëĐbŕˆ[ĄŞţŰnČ^FŽĄ’’úJ[•Śáó 5§÷:}:`jR›´#ČmJŐŢëiŇŚţĘIÍRɈÚ}÷1QWů‰f]4Ű=‚? ŽuEř'вŠţcÚ] X˘ *Ż&[{}]˘ů5ťdľ6gÔ+ĺ7ĽkŻ %š˛ŠDY)Ę띧1cvSßžĹ1ŤęCč güqŻŁá#TŘ'P+°ââbiőę5ZąbĽ˛k˛4ţŰţš_°As‹×kmnœ ~-ńŔćúßŔš\M,íŻq•ý”™–n~† j›’“}Œ$Ě,źCč çü Ą#áŸ@ë# ™`Œ É éRnnŽŠŠŠÔˇoą ˘ěúH\@BęlřÇWé'Üz¸1“ŮÖŇҢŠŠJ•——[A şşz•8ÓTŇV$5hëä%Řľ Î$šśŮmĘĘĘ´žłWŻ^*,,PJJJȰM,?áśEłb‡ŕ)’€MO‰4ücDSý'ĐţŢĄ–@ŰRSS­Ş;f2ŰÍdڂŐŐŐiË3mą–›››ŐŇŇŞÖÖV9ľľľYç°ŰíV%Óś+%%Ů:_FF†˛łł]S–ŐşË,›ç °‰U(ÔúŽî€Č1ćÂ!řňĹÄë C¤Á¤hŞ˙„Zn›{ť™LXÇL}ú(äţĄŽ9Vűw$ŘCč gřˇ0ţ‚!ř^¸ N$űu´ŇˇHŸ?Vş˘ňO¸mŮ]ƒŕÉ7ÜaÇgŰ/ŁłŐÜیPá Hś‡ÚŻ#˘ Ůt&ÔCč §mwa „Cđ´(ăzŮZ yoľ˙~]%’çˆUŕ'Ú}ď1Ś@ă/ŒÉ€@ţ€ˆš‡ěvťâU¤­ż"Ů7’€O´-ż:+–UyüÄ3ćf0˘AđD,))Immmjmm‹ëŕ[¤ŐÜű‘Vďéh•ŸhŻ'Z]ŐŞ‹'€ŽeĆÜ 3)‚? bfĐÁ@•––ŞDMőŸhö4ę¸XéĘŞ=~ş‡s3c1@4řÍ„eźęëë•hÜŻ!Úý#m—ÍţíóuäÚşëľ`+÷˜›űËwŒÍ€HPńĺß*k렃ÔŇŇbőOÄoEÓţËű#–mş‚+–:]Ý. ąaĆÚ̘›ÝžÔn̍ą @Hţ v{˛ľŽĄĄA‰ŞŁß˜Šee˙suĹ9;z<ş—k3ă2fěÍc5 ‚? ,wya3ˇŰíÖşęę%şÎ]şťĹW¸kčě9Đ3ÜcmfěÍ{, Z}€€üŰ[šĂ!fŔÁL­­­jjjRZZšwč%Ú6`Á΋ó…;w<cĆŘĚX›wčÇ{ě†/m€Pˆ € 4$'om÷UQQŠMŹR‚ľôŠvŠőő >˜16ď177Ćq@$ţ€v (xWü1ƒfŢŇҢúú툺"tÓSv¤×°#1ckfŒÍ{Ě-Ř8c; ‚? (ďA˙ 4)))Ö|ÓŚMr8ڑ%bp†°@|3cjflÍ{ŹÍL‡ńÁV ÖSŚç¸ťüpyyšv]ՂŤłâőş˜Ssˇř2cm]Ůţě¸ţ€€źżUä˝ÎÝîËýM$ť=I ŞŽŽŃΨ'dHlf,ÍŒŠ™ą5wľŸ@mžŃxK@Â?Ű[~ĽĘélVUU•’“íĘĘĘŇΎSWWgĽ™*?fl-Зźř˛ˆÁ”\p:žš{ťŐ—›ůV’éI^^žŮZ&ü´gB?f m{5mťUéǻ՗Ő~@$hő"čGîňĂ[ż´ľ$ą¸¨ŽŽ€í̘™čÇżĹŐ~@´¨řBňŽúăf#L…÷Ŕ„áţ´´´¨ŞŞZMMMęŐŤ—g;°3ÚZ)ť\ ÖX™GKNNś{‡~ü@ Á1ďP @°p‡Ě@ĆęŐkÔ§Ooeff ŘŮÔ×׍Źl“OŐlw{/˙‰°č‚? wŔ'Đr j?ţǚőÍÍÍjkkÓŚMĺրFaaĄŇÓÓěč›TQQa}AΌ•™°OjjŞ'ŕ,ôă=Ţć"!ř"IřÇ,›őFZZšZ[[­É p”––ZůĘČČ v(f\ŹĄĄA••UÖâ 3fŞdť+e{}˘ ýCđä_őÇ] đť ˜űąťtą ţ˜}ˇö3ßlm7۲˛˛Ź*@îžć h ˜ą/3ÖežôfŞűÔŐŐYc`†ť­—ď2c`îq/÷z÷ăhB?Œ›€`ţ€ " ˙¸›A 3Řá^v~¸1̲ůŚ“ 1ÍźşşÚ5ŠÝsxŸĂ{t'wŕĆîżÝp‡z̗ܼ>Ţ!ďšűxďsúŃ"řB ţńxđšŤ˙¸@îe3ča˜u&´ľ5˜Sî§p‡…Üç…@b!\¸Ć lë:ë˙­ew…÷žţŸ@Ëţç%ô:‚ŕ+P'XřÇ=páűxˇ˙ň^çqsŻ÷~‚=ˆĆż…vź>ţűzˇö U9(Đ2@0@ÄüŤ˙ř‚ÜŰ˝7źŰyżľŇ}ź×š÷z‚{œËUŠ'Pű.˙P°c˝úŃ ř˘Më/Ă=°á]ŃÇLîj?ŢaŸ@! ďöa@w Ň ŐŽËż"P¤U~‚­…ŕˆZ°Ö_Ţë‚ \ř}Ë{;ĐÓü[{š×ÚNŕt'‚? Ă‚U˙1ü@fnÚvy/‡jóĺ?Ř*D@*pl[$-ťźŰƒEz>€Ž ř:%XŞ@ëýŰ~ ňŢtˇP!ďőŃTóaź ÄÁŞ˙¸×ţ!˙ő*ýD:řAĹtDgÂ7ÁZyůov@4ţ€˜ Vý'Ôś`$ţ HžˆľpŸ`űGť  #ţ€˜ VýÇ˝Í[¸ý †PíŃŮ0N,AEđt‰PŐíçm‡t§hÇŁż]‰ŕčR‘€ü÷÷FUô„΄vü€î@đt‹h@ŽâcY ;üÝĘ{ŕƒJ>Řö=…ŕč1ţ"ú€xAđčp&ƒ€n@°$ ‚? a0ŕl—$ ‡ŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕ€ţ ˆŕĄšš͞ý‘–,Y*€ž–,a­YłF—\ňUVVYËçž{ś~ň“  §ü=˘śśV‡rDČ}RRRTXX ~ýúiÌ}t衇¨wďŢB×8ě°#U]]ăYžţúß騣ŽTw ô™¸ýö[5}ú>!;㌳ľbĹ Ďň™gžĄË/˙™bíůç_ň„~ŒÇR^xžRSSľł‹äłÓӟ//żüŠnžůVϲůoÍ̙Ż€DBđÄ­––•––YÓ×_Ď×C=b:Ž?ţ8!2mmmÚgŸý|ÖÝqÇíš6m/!:EE>ËyyšV8-͙3W?˙ů>ë>üđ]BJě`ţ€„Q__Ż?˙ů6ë1átˇSO=E˗˙ >˜­>}úč׿ţĽl6›z Á7L;ŻţýXMĽšęę*ŤŇĎŚMĺ>űÝ~űÚ{ďiVřč.ŚZ΍7^/€xAđčăŽ;VÓ§ď㳎ľľUwß}Ÿž}ö?>ë^zé]|ń…vV@\KNNÖ/~q™>üpś6lŘŕY˙Í7ßÜßápX­˜Ţ|óM-\¸H•VĽ–ââbMœ8A'œpœ†Śp***4sćëŽçýH7n´Î“™™ĄÁƒ[ՆŽ=öh…÷˙€öÓ-ˇü_Ŕý›››uřáG[­ŮÜ.¸ŕ<]rÉEę żýíľz⦅–Żąîסß.Đă?áú,}ŤşşzőęŐK“&Mԏ~t†† Üî<˙ýď˙ŹjSnýúőŐ /ü7čöĂ;DřÍ*--ŐĂ?ŞĎ?˙\ĺ囕——Ť]v­SN9Ůú„ňńǟčÝwßs]ăUVV¨ąąIšš9ÖçĐźoÇŹk9׳˙c=ĄűîűGŔsíťďžÇ~řŽősá­˛˛Ň Ô}ţůZľj•jjj­}úőë§qăĆę裏ÔnťíŞîĐџo555zńŗ5kÖťŽŸ—ľÖşáÇ[÷ýC;‚? î™@Ënťíâ<ٸąŹÝ~&ŹsÝu7jŢźŻ|֛ A+VʰŚ˙ýďy|ňIV˜Č„Šyíľ×ő—żÜnmź™ „ ‹l Œ<ŠŤŻžŇ Ý˛hŃb+p˛qciťs˜PŽ™žxâ)ýň—Wę裏R(ćúÍľ\vŮ/Źçv3÷šL8䯽­]˜#l6›ő:|đaĎşO?ý\JOOoˇ˙Çęú1ǛĐHź0÷óý÷?Đď~w˝s3Ÿ/6yűíYşéŚßkÌéę óĄ<ň˜UŐÇ߯ýť°ŸeĂTÂ1ű.Y˛TőúëoZŸC˙ĐO &uçwŤŤÄâgÇţó_´ ýx3÷ýłĎ>‰ŽŠ? •iŢźŻ}Ö ŕ[­ăÖ[oӆ =ËŚ-Đ9眭ńăÇY•qLű/SíÇ v˜1c†űÂłÝTZ1í‹úôéŁ@Ěó˝öÚLëřŁ> =™j/Ś…‘7S‘墋ΡŞđ 6T˙üç}Vhč§?ýšĎ~ŚĘŒť˝—Ů/ŚÝ“ đx‡QŢ{ď=Ťĺ—7Ó˘ÉT˛ńfŞÄÄî2U¤ĚuížűnVű­—^zŮő9Űô1š—_~U^xž:Ę´‰3ŚL™¤ýöŰ× “˝űîűVĹoO=őŒöŮgoĎň×_ϡŢ_o§vŞN9ĺDĺĺĺiůňt×]÷hѢEÖ60ú׿ÔmˇÝŞĂ?ÔjË5gÎ\Ÿ MĆÝwßéŠĺŽŘc4wÜq§Ď~ŁGv}^϶ڝ™6e˙ůĎs>!Ż^xŃú<űźvTŹ~vîžű^UUUűœť¸¸Ž:ęHŤÍšŠřcZż™÷€DGđÄ%SĽŞŞJ_}5_˙řÇí*đxŕžÇ&óÎ;ďy–M¨ážűîŃčŃŁ<ë&Ož¤~ýŠu÷Ý÷yÖ=öŘ>ÁŸ'žxŇ Q¸™ĐĎC=`…ÜLËŞóÎťPľľ[Źe™5ë+dźőÖŰ>-É  ˙ű_ĘÎÎöŹ›>}]sÍo4{öÇÖ˛ :<óĚsşüňŸ)˜QŁFéţűďö7N:éD 6L<đ gœ0SĚkÍĚĚ´ &řăĎŹ7S´L[%ďŕĎG}b]ťw{1łÎťrŒ `xŕţŠ77ß|“öß{héä“OÔé§˙ȧ:ĎçŸŃŠŕqꊧ認~áY>ýôÓtĹWé‹/ćz֙÷}\śl™Ď9z÷îĽ+ŻźÜłlÂlwÜq›ŽżţF 4Řő9˘‘#GZŰLĆLŢá7óžűˇ‚3ď•i5śjŐ×´ŇősÖŹťîú›g? ›0aO~řŃV¨Ë0?›óçŤC9Hą‹Ÿó3ŕý߂­ŻÁüœÜç9 Q™J]üăŸ@˘#řâĆ/ůëˆö>|¸OĽ™7ŢxËgťŮćúq3!Œ‡zÄÓ6lńâĹÚźyłŠŠŠŹPƒŠ äÍźC?† #˜ő_~9O#FŒĐȑí`„Ű›ožíł˙ŮgŸé\0LË,SČ^0Lť§PÁSőÄ?´q晧ë_˙zČSĹČ0ՑşĘîŻŰo˙›çţ™š Ç̘1Ýł›ŻC9DiiiŠ'&$ăú1L%ŁŽ:Ę šuśŐ—Š*d*0ůŻ;ăŒÓ}‚?&Hc>‡ŚŞ’á˙>oŢ\aU¨ńţĚçççëîťďRg™ó¸CkÁ˜ĎkjjŠ'řcTVV(ÖbńłcŞů‡žĚ6˙óyäáV•§ůóż‰ŒŕH(ŚeĎíˇßŞääíżĆřWHyë­Y>aoîЊŰ?ʰ‚?k׎kWUhď˝§<ÇE]`Mř_˓O>c…„üů?תUŤÔÚÚęóşź :¤Ý:ÓŇŤWŻ"mÚTîYçΈ5ó|x€^}ő5Ďş÷ß˙ŔüŠŤŤói esĚQŠ7ŚBN đYö˙ŹDŤ¨¨ĐÓÎ[IɀvëśWIš:uŠő90ŸĂƒ~űŰk­÷z=vˇ‚KŁFÔŘą{<g˜÷ĐüL˜ĎŁi}ś~ýëó[]]㳟šŚX‹ĹĎÎúőë|ś™Đ٤IˆiŃGđčţ€„aZM™–GYYY>ëËĘĘŰíűöŰď(UUŐÖ}Ÿm/ĐW\ĽĎ>űÂłý‰'žŇńÇŤÂÂBŸăzőň]žôŇKtŢyç(}úôiˇnăĆR(R&$‘••Šşşí-˘ţőŻXí™v$ŚęĎ?˙ů/ϲ Ÿ˜śSsçnoËdŞŹ~řaІšŢ-ތ žÓĄ‡ô˜ŇŇRŸVgF~~lŰ_ő”ÝvŰUˇŢz‹jůţű%Z¸pĄ/ţŢŞĘc>›n&Ür÷Ý÷頃l÷łÎ̙Żű„~Lhę˜cŽśxŚ˜ůš0•…Î8ăě. ţÄęg§¨Č÷çľźź\---JIIiˇďƍ@˘KüŻC€ÖĎ~öSŸę-őőőzŕ‡Úí7lŘ0Ÿĺ (Z%%”––ćłîŁ>¸ď˝÷ţC'tš~ýëßşŽçA+œěZžýö[íhŽ<ňpŸ÷ĹL՟††íŐyöŮgZÔ!01Unź™śbŤWŻzĚ}÷ýŁ]ĺ–ŃŁGkG`^—iueć&sÚi§ęĆŻ× /üWW\ńsŸ}M8čťď*ZŚU›ˇłÎ:Sżýí5š1cşŐrĚź'†UĽŽ‹ŸSĘ›š/Ÿ}öyŔ}Mk:ÁˇFŽĄĂ;ÄgÝË/ż˘+VúŹ;ě°C}–?ůä3Ťý‘?˘8üđŁtÁ—čć›oŐ˙ű?ľľľYŰLőýö›áł˙łĎţ§]čdýúőz饗ŹVW|0[?üˆ–,Yâu-ž×űÔSϨ˘˘˘Ýľźţú›Ž}Ôe—ýBwŢyˇŢ?pŤĽÎr7źkŸĺżo°Öc&2qâžžĺ… šŽ˙CŸ}Ž>ú(uÄa‡ěw­őúÉO.ÓťďžďyŻ s˙Żťî˝ůćŰ>ű÷éÓ[&ěŠDvĎ=÷ëG?:Wűď°N9ĺ =óĚ|ś›÷é€öowœwź@íÎęęڇwŞŤk|–M;=&ŘUZZŚP"ůě„Ű'?;S§NQjjŞĎţć~ÖÔřžÎ_|ÉŞ @˘ŁŐˆk?ţń%zç÷Ě ay;ꨣ4gΗÖcó:žţĎś˘˘B×ű1MaîőK/˝Ş~řÁłnóć ýîw×)33S˝{÷v]w˝çţz3Á’+Žř…ěvťYr˛]˗/÷,›ŞRć˝2aóy[˝zzčß>ǘ6YŚ5—[ jK7ßügíłĎŢÖšÎ8ătk]ßžĹ>ű<účă*))ą* ™Ÿš?œ­ťîş[áDňŮ ˇO,~vĚgäŕƒÔ̙oxžgŐŞUúяα>ëyyšš?˙Şýv@\3ÁÎyꊧ=ë>ţřSŤ Éĉ<뎝îw:÷Ü ´iSšľlB &Ä`Ś@L@ŕ7żšĆg N\vŮOŹ*"nľľ[Ź0B &hrÍ5żRvvśg]NNŽ~˙űôóŸ_áŠPcŞĽÜqÇߌiqtîšgŤŤ˜ÎkŻ˝îY^ąb…nťíoÖăAƒiß}ˇV:3fWmذÁłßŇĽK]Żĺ:ę¨#uýőżó9çě§ŰoϲÂQţŽ8∇oLľ–;î¸M_|iťp ~˜G0—^z‰úpŔ{HďŢ˝ô—żÜŇĽáŠîdZvÝwß=V•›pĚűu啗ëÔSOńYoBiżţő/•œ8çżté2knBaţÇúűůĎŞ=÷rŸH>;‘ě‹Ÿ‚‚ÝsĎß]ŸŁ>A5aB˙$"*ţ€¸—››k…:îšç~Ďşďż˙^oźń–Ž8â0Ďş>}úč˙¸WŸţ…^ý -Y˛L›6•ŠĽĽUůůy=z”f̘î:ćpĽ¤¤}žŁŽ:BÓŚMŐ̙ŻëƒfŤ´´T•VKĄ!C†hŻ˝ŚęřăUQQQĐs˜Ň3Ď<Š÷Ţ{_łf˝ŁŐŤ×ŞźźÜŞ„cBJ{ě1Ćj6mÚ^ęjćž<ňČCzôŃ'ŹJ(ćőćúÓŇR=ű™vK&<ő裏éëŻç[-śLŔ'##Ăj­ä"9úč#őŇK/űŹ3-˘LĄÎ2፛núƒÎ;ď\ëţ͙3×ő^nňźEE˝4|řPpŔÚgŸi]œę ýúőu˝gş>?čý÷ß×wß-RUU•ëłÜbľŤ8p ŚNb˝˝ző xó9}řáéńǟĐW_}mľ{3•úöíëig\uŐ/\皬_|I .RuuŐ:l̘ݏ ܔ)“]ďĹ˙…źŢH>;‘~žbńł3bÄp×ë~D/źđ’Ő*pÝşľr8œV[ą“N:ŃúďĆ|(-űŮ<5ˇYvOI^s÷dßśÎî7™mšfŢÜÜň‰Đm6n,ŐńǟäłîÚkŁcŽ9Zń,55eo×ĚášjśÍŰü&çśšĂkrzÍý'Y5÷ě/Ô6 Đ!Śj‹7Óţ젃şÁDě˙x@˝zŠŚŚVĎ<óŹĎśŁ>Ę ˙ {ü@DÖŹYŁGy,ං‚|ţ9@÷!ř€ˆ|đÁ‡×çädëśŰnUAAĐ}ţ "--­ęׯŸ***dłŮÔ§OíłĎŢ:ëŹ3TTT$t/[ öłxjn ˛ěž’źćîÉžmÝo2ŰrÍźššĺa¤ŚŚěíš9\SÍśy›ßäÜ6wxMNŻš˙¤ ËĄćţý…ÚfI€„CđH@€DđH@€DđH@€DđH@€DđH@€DđH@€DđH@ÉHN§S@WłŮlH@Ü Ř€xnœŠ`ˆ@!č€Dä?ŽEô‚? [Eö!€žI¨Ç{ ‹čN@ˇŕ‰$ŘCř=Á„x˘műĺޟč@— 40j°ÄápˆĆą’’’‚îăö!şÁĐ%" ü˜ĺ@ë"=_¨ő@$‚s‚­÷˙âšŮĎ˝o ° Еţ€˜ úqŒ˜ĺśś6kŮ<ö^ď˝ܕ~Üłl›šÝn÷YoƸľ#übŕˆ™p3™°OkkŤg˝÷Üűř`#}^ œpAœ@•{ÜëÝ_\sďcćÉÉÉVȄüƒBŢç b…ŕˆ‰`-ťĚˆ ú˜Ŕ™ÜëÍHZZŞRRR\ƒ f0ÄƀÂÖ ÖfjSKK‹ššš­ąŻććfkŒËŒ}™É‚€ ą@đtJ°*?îę>fŕĂĚ 3˜‘ĽÔÔTπhś†{̔d}ą-33Ó3ÁŸşşzë‹pîÉlwW˘úˆ5‚? ĂUů1fn?f2Ëć›M99ŮÖ °#2Ážôôtk2ăbľľ[<_Š3ăbf2!Ÿ@ Â? Łţ€¨ ü¸'ôijj˛žÍd–óňň\ƒiv&äSXX ĆĆ&UWW{Şc§Ľm'3A÷dPýtÁďЏűąťĘź0Ą37ßl2U~h逝•ůB\jj/ŤúOccŁ5ŽfÂ?Śő—ťúá"ü˘AđDĚ?ôă=™˛Ĺ&ôcggg)++KŔÎ΄{ňňr•œlז-ujhh°Â?Ś* šƒ>„@Güa…jíĺú1ŚľWFFşlgž(—”dˇZ™ą4ÄźŃú D‹ŕ)\č§ľľUÍÍ̈́~€0Ücg&ücĆÔL°'9Ů÷ŸëźĂ>T˙áüA… ý´ľľYfž““MčÌĄ9mŞ­Ýâ ˙ŘívŸ}˙€Hü… ý˜ ?ŚĹ—Šř“ššj•*žKkjjś‚?IIIV°ÇĚ˝ţ‘H@üC?ŚĘ ţ˜Çůůy93Śćţrk3˝Çŕ"Ađ´ă?°`ꎙÉÝ⍰° Ýˇ‘„fĆÔĚؚc3cmţď19ƒ0„Ľńţś‘iďeŚäädĽ§§ @ôĚؚcsˇQńD‹ŕ)PľS~ŘĚińtŽcós UőŔÁ–lp÷7Ľ‡ÍdˇŰ•šš*gĆŘĚX›{ÜÍ{, ‚? ¨@}ÄÝ%‡sss óĚX›÷؛7Şţ€P’†woq3řŕZŁ´´4%ž!Ő16›MčZ[ÇÚśŽ˝™ @îą8Ćf@8@@w_qóí"3ŮíÉJJŠĎ|b+ŘýdĐ vĚX›s3­žĚř›Yö˙ÁĐę äř0ËfŕÁČĚĚTźđŽFDč§űpßbË=ćfĆŕÍBđ„äv˜om ţ˜6_ŠęiNâ ď@çlsszŞţ0Ţ"AŤ/Ў÷€‚˙c‡Ă)ťÝŽžŔ@Güó~(? 93ćfĆŢBÍ1ŢüüAůmĚ7 Ócź§Ż%ŢÎˇŁˆĺŕƒQ‘sššÇŕÜcĄüAšĂ1ţe…ťs Ął>Ń vż:úžťĎÇŕ@hŢă'îń8łŽŕ…ŕËŢp÷ďîçíęcž˙}v°‰*€đĚŠťâă\ @â7ôC+°ČÄ*|ӑJ>„"AŕDŽŕˆ+Ńn¨˝H_¤h[ŔŃú vţ€v…Câ-0ÉőPšăÝťpa*úÄF"ŒĎ€ř@đ„ԝ ąótćzwśÁ“hC:‘T÷‰´˘!!€đCáüqĄłĄŸHC;|3jťP÷"’ŕN¨ý"”bŕ  sţ€יĐOWVڙůߡŽTř!üĐľţ€¸.ôăp8ÔŇҢÖÖVkYîĚywV‘p’’’Ź}“““•’’b- đěč:@ęhĹ÷úŚŚ&577+Üšů„č í¸ƒUfnî}jjŞŇŇŇ:ţ!Đ1@éHčÇ{]mm­5­nޤ9ś•úÁśIUśľČ!k/çś0‰ľ`“sŰ\~óí§´EžŻçÜ6żçň_żíxŻmÎpűz͝íŽÁëřhöu†ťżăîťu[Şk*HNŃčĚLí“ŸŻĄššĘÉÉąŚ`­ż˙ÄÁ茝+ć„ ý˜ůŚM›TQS­7ShnĘ*Ÿ@N܄~ÜçőÚ8pŁ ýČëźÎtß­çnr=ÚŘÜâšj4ťŞV{çćęÄŢE*llTŻ^˝ŹO  á€Č›c\Bđ„o-˛Ěő”——[ĄŸ'Ó>ӊ¤ň •sÔ塟ŔóíOu•pAĹ:ôcó ýDşŻ×˛iúőQUJ›[ô“mWç˙ sh_ÂI@5hŞÚOMMęëôFʡ!B?y­ŞłŢ#ó^mż7ÁßS…"—,€ŃÔÔd͗Ťl능Ÿ\{–ϧ‰™ĂÔ7%OiI)AĎ[ŮZ§nř@_nYyčGф~ä™Gú‰¸*P„ĄŻkvŻ›ŇŤŻ~žŰ8ĽĽ+˜Ćś6­ŤŤÓe›ôâ+UÝÜ0ôăžžďjęŹ5î÷ ]‡Š? n„Ť ÓÚÚfÍŤTď>1˙猙š=JtžN,˜˘Ái˝B†~Œ‚ä,ý´ßх~"Ž ´}˙AX†~źN`Ÿ+njú1Ňív ĎÍŐ#†ë‘÷ÓôžĹ۞ž}čÇ<ß断ď‘ű˝ň<}U‚? !˜ ˆ;,Қä Œ1ĄŸ+‹Tz˜°żŒm…#ŞœÓĄŸˆöUäĄm;Îo›wĽžĚ$ť˘‘‘œŹk'íŠéýúśť>çśyŤçşœ„{şÁĐ­‚…A˘Š,cÚ{ýŹ÷ĄŠV[[ŤÖ”Ż˘ńýDŘZŤKB?Ÿ3`čÇ:ôcćkJ7XŻ=ćčkĆ寧ԴvĄ…ÉůDúˆL˛âœwÄzěŒŃÖŔĚąy•š”ěłoĹćrmŮR#‡Ăôü5Î&ýˇeńśƒ„~"n­aG^™!ŸHC?΀×Éž[g˙řa™Î¨Ű˘üäŕż&%%);'W……˝dłm=>-ŮŽS†փ —ľý˜çr­tďëýąEđ$ żÍś@ËŢY#}ö*ŻŘ¤'Ť>ÓWmÔ Vż Ž‚yÔĹĄŸ !gGC?Š6ôłőšž­ŤÓˇË—ž†műfړ557[Œ–z÷ę-ˇúë_ß-SťĐĐ]hőâNŘVOB?f]^r–Ďn˙ŤúRŸ´­Ž>ôéžNď ‚Wí‘÷őާăĄEQ(řs ý˜Çu­mzˇ˘FO/_%oé úq†ŽîC/€Ř!řz\¨0Hť6_–ŔUvěIžżÚ|ÚşZQy|7aöuFä‰fßHC?ňýŘş,ôă˝ď{ĺŐňfÝëĄŸŔď[{zĆă?Š8D§žzŚ–,Y*˜hőşM,CZků‹¨Ň…~‡|ş>ôŁČB?Á7 ýČK}ë[ŰP°kč$óYąŮbs.ok׎Ó̙Żë‹/ćjĺʕڲĽNiiŠ***ŇŃ~űíëšf(99ąMž9ó ÝpĂŹÇGq˜nşé÷žmúűßďľîqmíÝsĎ}Žĺ;Á|+Č´ý8 $¤z…Ÿ¨Zk… ň¸Ďëőꑇ~l=ú‰ ‘ŢßĐĄŸŽ ďtD}}˝îźón˝řâËr8>ŰZ[[UWWŻŐŤ×X™ââ>şćšŤ­Ў(==ݚŹĺ‚‚€ÄDŤ/˜üC?Î ťűř†hbú‰śľV¸ :úQčkđ>o„ĄŸ Ĺšb\é§+”••éœs.ĐóĎżŘ.ô“››Łěě,ŸuĽĽeşúę_ëţű˙ŠQffŚîşëŻÚ˙}uňÉ'ꪍ~!˜¨řâŠoeŸ i“(*Ňř̃["ݜŁ0!š.ýD[(\'ÄžŠ2ôÓž]š÷:˙}ˇW˙éÎJ@ŚŇĎe—]Ą•+WyÖíľ×~úК0aO+c˜öWďż˙Ą|đa••m˛Ö=ôĐ#V °SO=Y;óÚÍ@ likmőěáyłĐO¸MŒB?ňż^u[čÇŮîzĺu śŔ÷×gßřŤúsĎ=÷ë‡VX“’’tőŐW¸ÖÝĽéÓ÷ń„~ŒÂÂBxâńzęŠÇ´Ë.Ł=ëM{°ŇŇRÄ#*ţ€´ŞOȃĚ˙ľśŹ*_§Á˝Xť˜ÇíC4ށ›ž ý(tč§ÝžĄŰŽ…­ŢŁ@×Ű~ßŔĄßçZYşQCúöő<ľo4şŞĐúőôß˙>ďYţń/Ňgœň˜üü|Ýwßßuâ‰§ŞŞŞZÍÍÍz≧­Ŕˇ+ޏZ}ô‰őřąÇÖ°aCőä“OëÍ7ßÖÚľëŹăfÍzÝ:ŸˇUŤV륗^ї_ÎÓęŐŤŐŘؤ˘˘B•””hß}§ëřăő $ó駟Y­Ëžůć[UW×(''[{ěąťÎ=÷l76ěńŢ×űíÖţűďpżX]/č@Ük äy¤ćsTˇ›ľřżÖE‘WŮ úÉś§iBî@Mɤ’ô|¤d('9MńŹŚšY•ÍMZľĽVŸ•–iÎŚ2minéTčÇĚď[´ZgmŮb->ąŚ2˘ĐOwśőň÷ /ĘápX‡ŚóÎ;'˘ărssőłŸýDO?ýŹľl/Ą444袋.ŐâĹßÝÇ܇{ď˝_=ö¤çšÜ6n,ľŚšsżÔO<Ľ;î¸]ŁG xžśś6ÝrË_ôâ‹/űŹŻŹŹŇ‡~d…y~÷ť_+55UŤë]‹ŕH8Á‚<‹ĺúSۇŠŞľVĐOş-YGôŮM'ő§L{ŠInjŞ5 ÎÎŃž}űŤŠ­M/­\Šg—-W]k[‡B?Ć75şfÁúˆöîŠ6Ć1Ç%ťÝńą'œpœ5Eâ˙ř—úIKKÓ¤ITTT¤-[ś(9yűŻÚwÜńw=őÔ3žĺââ>šř°ŐöŤ#bq˝ {ü Čż˘O ĐOŕ6^ÁB?™öýnř!JKÚń=JMJŇő“Ćëâw?VCk›W`'ĄŸpy­.l´xń÷zë­Y!÷ůÉO~4řSRR˘Ž2a¨Í›7kŐŞŐzöŮç<ë}ö[¸p‘' 7jÔHőéÓ'äyg̘ŢáŕO,Žt‚? áÄ:ôc×glBľ÷ŞŹŹĐڞRUWWŠŠŠÉZ—––Žźź|őîÓG…!ď‘Ž“G Ńc‹~ŘśĆ÷~Fúqďˇíř8••ĺy\YYeľý Uő'œPᥤ¤Č^łš†/żœ§9sćjٲĺV0§´´L---a-/ßěyě]i'ÓŽŤł:s˝ {ü (Ą÷y\˛“ŇtLŸ1J őőú~É"UWUľŰV__gM6ŹS~~FŢEÁĂL' ˘ç—­Ö––6żĐ˘ ýřż=Ż˙~VĐDŽWĚ´qcŠľ.kŽšÚšź™cŚMŰWmmmÖrzzš:Ăhţô§[´fÍڀŰÓÓÓ5zô(͟˙MŔí555žÇŢĄŚ`˛łłŐ˝^Đ=ţ€ÄAč'đÜ+—âľmbŢ@Ľ'@‹/öY°`žZ[[Ăî[UUŠy_ÎŃî{ŒłŞ’‘lהâŢzwÍFů†~ÂÝÇ ĄyĎ{Vjjކ˘ĺˡV4zď˝÷őŁńńڞ;ôcˇŰ]÷0Oőíˇ tŮeWx*ĺäććhŻ˝Śj=vˇ*ó 8КŻ^˝F'Ÿ|zŔsx?mm­Âń őÄő€îAđ$ đĄgŔĐOŕËäźAŠwŚŇO¤Ą7łď‚ßh„ÉĘČȸϴž&řS2ôh}ŔЏO5Ľž7}ú>žŕĎË/żŞÓO?Ő ńDâwŢő<>|˜RRRÔQ>ř°'DsŔű鏼1ŕűátż{EEŰ[ˇ™–[áŹ\šJ‹ëÝ#I‰f[Ţ âЏ‚‡~Ěž3ňď–,YUčÇ­ľĽEßż0čöAšYą ý8ăŁâq ÇYíž ú÷żč8S-ç駟ő,›đKg|˙ýĎ㍎ş"hkýúőAĎ1fĚn˛ŮśŢ[óZÖ­ žŻ ä|ôŃÇę¨X\/č@Br:ƒy|ÖG°oAJŚâYee…ŐşŤŁL‹0sŽ@ŠŇÓ" ýl›j뇥٤d€Ž?ţXĎň<¤§žz&ä1uuuşöÚŹV_FffŚN>ůDu†;|dŘíÁý~öŮç‚nëÝťˇŐjËíŢ{ďşďkŻ˝nľáę¨X\/č´ú 'lčG‘‡~Lb%˞Şpššľ|ŮRUTlV[[›:Ă´›*((ÔĐa#Ź`I8eeĽ×˙üň+\×ŐŹ[o˝ŮZţőݧ´´TÝý÷;ŰíťiS™őœţrRS" ýŘ|C?aBńâŠ+~ŽŻžúZ+VŹ”ĂáĐßţv—>ţřvÚ)šć5Ü|󭊇ë]ŕHLĄB?žę4áC?f˙pujLčgîÜ/ŹśYą`‚Cĺ囬*>“&OUZZzČýkŞŤŽoq]ϒ%KtŐUż´–M¸e—]FÜ×Tý ÄóÚÅ~ź÷ło<1ÁŞ{îšS?ýéĺZľjľľîóĎçX“‘——kľPŤŤŤ÷9Î´Őşä’ uđÁŞłN?ýTOH楗^ќ9sľ×^S•­˛˛2לOUSSŤ)S&é‹/ć=ĎžűÎĐa‡˘7ß|ŰZ~ć™˙¸żĽÝwc…–.]Ś•+W)55U—_ţ3ýýď÷Ş#bu˝ ëŃę $ž ĄEú‰¤BŠôŤĐ781çÇTX ä–[ţOC‡ą?f2ÍşŔçhTP‘„~˘Ş _Š‹‹őŘc넎óŠ\cTW×´ ýčÎ;o×Ĺ_¨XŘ{ďiúůĎęyîőë7čůç_t]Óz㍷ŹÍŘą{čşë~ö\řĂ :úč#=˕•Uš=űc˝ýö;VčÇ<Çu×ý6hŹťŻt-*ţ€ÄäňxW˜iî úqFPĄĆ´÷ę*•ę(SŤČTŚq3•„mŽ ;‡y ýČwß8Źř㖕•eľŹ:ďźs4sćëš3çK­\šŇ ą˜€‹ űŒ=J3fL×á‡ęÓ>+Î=÷lŤľŘţó_}ůĺŐ{ŹÇýÄkĹ€­ž@‰>ôckV‰&¤2tŘUUUZUbɄt†vżŢ}ŠľaĂúvëďţű>Ëüóž çčÓťXĄů‡{" ýž ;Pń$žN†~œŢĄgřđOffŚ&MžŞŢ˝űȞÜůÜ´9‡ óLœ4Uiiia÷7‡ň ÔQůůĄwv<ôă$ôĐc¨řS°OŘЏś-{´´tí6fő”ŃŁwŐź/稼Ľ%Şă’M;0׹a…¸ŸŃ„~œ´úč6Tü‰'L…šĄĎžňÚ7ţĽ§ghĚîc­ O¤ĚžťťŽÉČČ˝cĐĘIŠ>ôCŐ€nCđ$ŚN‡~üZ~%€źź|M˜0ÉjÝŽŮg„ÉÖ1‘úą…ý¸°]‹V_ ń8CUďń „ ý$X…šŒŒL?A••Ú´ŠLŐUUjjj´ś™vdyůůęÓťXůáĂAn ýŠţ€ŽGđ$œđAž`­ŔBě›` ­)f" ýřd_t Z}€ÄËĐj˘ ýŤţĂýÝČďüřߋUđ“uÁƒ‹ÔÜęPg™s˜s™s^â:ˇ“1 ţ€Äää‘×<ŞĐj,1 ý8šŸ ‹}łf‹ž˝A[šÚôř'uú}ßu*ücŽ=ăţďŹs™sţŰuîůkjţ€Ä(ôăôýŮ×oΡˇ˛eWÔĄî'čb%…iĘMˇ{–_ůşźĂáwčçĺŻĘ=ëĚšK Ӑţ€´-Ü2ôc#ôĄ Ąg4Ąúݢ(;EĎ]ś‡2Rś˙3WGÂ?B?ćœćÜ˝\ϐţ€„ăŰĆŤ“Ą'­Š ]ZôĄż÷  ¸[^üĹ؇‚…~Ě9ÍšE˛M„ĄĹ0ôS_ˇE5ľ5jnjT[[›â™ÝnWZZşrrr•™•Áž÷sűýŮśĐˆCîđĎńw}ن–­aţ1ž§2FŠÉż˙NčěH¨řSĄŸöaŻP‹_…› Oăt¨tăz•–nPC}]܇~ sőŽk5×l&óÂň ý„O ýţÝČu^đŤüc=&بňO°ĐĎ „~@‚"řWŞčB?^ażmÁ”•m´B4‰ĘT**++ ˝S˜Đ3ŠĐO˜Ű sEţ ú9ˆĐHP@b Ů~*ňЏ3DĹšŠŻKÜЏ[$ŻŁÓĄšC?TüÝ/Xřç´{X3™Ç„~ŔŽ&Y‰&ÚЏB„~B”¨ŠŠ­QÖěvť ‹ŠŹĘ=nŚŇϗsćëŰoyÖ}óÍÖǓ&kw‡ĂaÓŤW/kš-Ô5w$ôb_€ž(üăFčěh’pB…~lśSÔ!•Šný&¤SąšÂg -[ś˘ÝžK—Ž zž†ĆH+Ĺ.ôCŃÜáôq#ôvD@â‰ačǙPjÚ_ŤÍÍŢA„ ň ý(D@ g™€ĎËWŽŐ^éÖdú;Z}€ää ´Ž‹B?ŚýVĹćÍĄŰfŀݞěz.ßA(ÓökĈ!žö^n#F zžôŒ E&D'ŔýtúWL"ôâÔţťhé_Ś `GEđ$ďĐOŔpčGíŰ{ůĎ#`Â7 POČË/ĐÄIăŹÇ˖­´ć&´ç„=îoOJRA~ž"Ń.ČŁN„~4üăp8Ź@—™;]/ŇĚw&IŽĎ‹ÍfłćvťÝšÇƒ&GŤŰZÔělU‹ŁM­N×űCC9ĀÍőżd[’R’ěJľ%+ݞ˘´$ţ<xŮ 'úĐOű°O˘U¨IIIVIIeeejňÔ=ĺ Lą%%)##Ă ý˜GÄźC?îc°ĐOŔyiiiń~vfî×o'îPJJŠş›ĂőAŤmmT][“Zœ][] ;/ 3ŸŻ×gž^ÍRŤëżł6ť˛ěiĘINW’ fÁ˜‚„S˘ý$Î?îš`˝zőRĚu"ôălw•L¸ĹĹĚdî‘ ˙tW¨şĽAŐ­ TőA0A ŞÖzë3˜—œĄź”HŰ%@Ď!řOŔPJC?ä ś ˘RTĄgœŠL˜Ľššy§Żđ wU¤ÔÔÔ.kfZzU´ÔŠŮ5zš ž™P˝ŁY…)Y´×Á (Ąmß7AlގéŃyКż!I­6éÉNíѡMgŽkU˙ÜHĂ-ÁÚĽ ÷$nč§ľľŐ ý z&(ŐŘŘh…’“cű'ĖÖ&mnŮ" ޘ ÚĆŚjĽd+;9Mţ€ÄÓŃЏw0%P(Ž™ĐĎ5o¤kKSűëMąŰté~š:b 랼ž ^żˇVˇZŻ˘Ě˘Mą ýÄéý$ôî{ŤđOmkŁUéˆg&˜fŞĺ$§ â Á€üC?Š,ôăŐ˛Ş#ĄŸ††UVT¨ľ­M]ÉnˇŤ°¨HéŰ˙‘ŮTú ú1~ź_ŽÎž–íY>gZŽ5ěŤV]šO“ÂéTčG„~v6ą ˙˜J?„~(ĚgŐćú•ě$$˜öĄ[ŕЏ"ýDVŠč†ĐŃćzŽŠÍ>ëL{Ż`ŽÜ#łÝşŁ\ëBă#ęЏסAöŚEĄŸŘ3÷ÔÜێjr´ŇŢ Ç|fÍgâ Á€" ýDJlÎÝźNYŐ)"mčÇrßxBč§ëtćŢR鉊Ď.€xCŤ/x"ýD°oaÓ~ŤbófŤ"OW˛Ű“]ĎUŕłnžmšł6đŻnŻ/¨÷´÷r›ům˝Ćő‹đ:# ýXlQěŰłZZZ:U•Ą™{kîqJJJTÇUˇ4¨š“USŢ^ň…Žyí^U6ÔXËšúęĘGCóÄź7tÝ˙ô,gŚŚká/ŸV4ęšőř—ŻkćâO´ŞrŁšÚš50ŻXœ¤ §ŤŢYůaĎQáşć wœëł.9)YsŻxXůé9íöwşţcś÷˝—hCMšĎú'Îř˝Śđ|nŠöőr]ÓÔAťéüÉÇhlżá ç†7˙ĽÇžœvż=ú×+ÜŽDqőŤ×˙žyĎz|ńÔătíAçŠ#Ěg×|†óR2ń€ŕHLţA ýŘďëż>ťÝîňÉHO׀ÔÎת…eÉŞ PdĺŸÔZó#vßÚňˁžúŹF7ş}góZB‰(ČăLœĐaB)őᇳőÜsĎܖ’’Źźź< 4P{î9^cÇ¤łf´Á‡ë‡łşľAŐĐҤ›fý[O}őfTǕmŠÔ­ď=ĄÎXVžVüçOZ]Uęł~iůkzöëwôŻS~ŁI%ť*Z­ŽV˝žř31ţvŰćŽ]Ô.ôŠćś­ŻŮ¤| —ž›­ŰŽţšNÚcĄsĚg8'9]IśŁj€ÄFđ$ž@ĄŸm-¨˘ý8ˇčŸoÓŇŇU_m]úç:tŰ zěŤTÍߐ¤†–íWÜŇćÔ=ďÖXSFŠSăű9ŹĐOaćöX“y-˜=‚yMčÇë„q 3ĄŸđçnUyůfkš7ďk X˘óĎ?G˝{÷ÖÎ(šđOmkŁë#Ňą‰ĂéĐŃ˙RË7Żľ–““ějuDVŐĘTąŠmęřĎrcKł.zîfOč'Ş˘CĆ*35CţđľjšśXՇ.yîV˝~ńßTœ]¨h˝üÝě€ÁŸW~ŹhŮVE˘ĎW§Ň->Ą!֙šx뵛ś]ŮiŞ¨Ż yžßxކ÷Úţ9|kÉçşäżś›VesÖ,˛î]$& ÜU÷ľĐžů,üţ€ä2 ú <—OčÇĚ+›š2ł˛­Šžn‹Y–y™Yˇ•׾´k—,,hŢ.ô‡5ĹŇŻ~u•úőëëz˝NmٲEëÖ­×ěŮkѢĹÖöŚŚfýűߏęškŽVZZšv&îűŽÝY“ŁU-Îβ2RŇtý!ęĚń‡X–pLĐĺú7°'ْô×c/ׅ˙ů?EëłU <Ďšp¸'ôcôË)ŇuŻ‹˙{‹ľlZjEü™:hŒ^Yř‘ňymáÇş`Ę1^Ďű6ŐUZ' ÜEߗ­V´5U9iYžŠG -ŠĽgćż­ßźvŸőřˆ]ŚéŞgčúˇĐźľß렑“t˙‰×Xۚ[[őÔ×oę…o?ЊŠ jq´hhałët7ů(ë˝őבc>řažî˙ô-ŘřƒëżH6í7|O]đůŠ5óY6Ÿé´$ţ¤ĐłĽ‰'ÂЏ3`č§}hhő–Z ÎÎ řT}úŤŹL ţ1ĄŸŢŽ×ĚŞ*wŔćŠ V!)’ĐOĎWüéŠj?Ś˘ťŞMaaĄ5íąÇîzéĽW4kÖťÖú˛˛MúŕƒŮ:ôЃŰoBŸ|ňŠVŻ^ٚšeff޸¸X“'OtM“”œěűků̙očő×ß´÷í[ŹkŻýuŽˇŢšĽőë×[ëKJJŹç=zTŔk6-¸>˙ü ͝;OĽĽĽjllTNNŽFŽĄ}÷ĄÁƒ)VĚ=üilë\ű5ť-IŻž˙WŸj6áÜöţÚPSn=>sĎCľç€Q戊şíU‚úçśoéÖ;;űž ŐZąy˝†őW$ö2Ö ţ/-œíüyĹľě6cčžZ°a…˘e*Ő7oý9ˇŰěš0`´şJsk‹Îyöž{îVŃPŁ žý?}˝~‰Ďú…Ľ+ŹÉźî§~ôfävę˜'罊ëŢř§O;šW]÷vIŮjíRÓô4F)@Ú^YŚłĄăÓ˛RÍčřémś$÷S}]jkŤŐÔÔŘ­m¤:Ânˇ+--ÝjďŹŇŰG+M۠؅~œqRń§ťsĚQúꍯľys…ľl‚6ŢÁŸÖÖV=ýôłú⋹>ÇŐÔÔZÓŇĽËôŃGŸčâ‹/P~~~Ŕç0Ÿˇ9sćęńǟ˛*š-Y˛Ô:ţŹłÎД)“}ŽŠŹŹÔ<¤ľk×ů­Ż˛ŽeΜ/uřá‡ęČ#W,Drϛ­ę ›ÍUčgţúĽzěË×­Ç˝ł ôëÎV‹Łc×Đ7ˇČóřŁóuî¤#}śżťěKŸeÓ˛+ŇŕĎ^Ç(9ÉŽVG›uÍŚeŘŕ‚žÖňßoŻjtŔˆ şűă˙„=ߢ˛ŞiÚbľFűaó:×1ĎŠm[ĽĽk8Kýr{ŠŤźˇ|žUšh\ż‘˜_Ź‘˝JŹőż~ő^O€ÇźśÓĆězÍÉzvţ,Ť}ŰⲕÖ>˙:州sE{ĚęĘRýqÖCžĐiëvřč˝T×Ň 7]÷ń‡ŠőŠľÎ~Ś ţ€Äă ýk?&ôŁísłď›ĘÔĐÖŞ {đ_2ł˛ŹiGŇĐâĐgkjŁýl›… ýô|Ĺg7ŚL•›ąc÷Đ{ď}`-›Ş?ŚXvvśľüüó/ú„~233Ôżmޟ٠ጠ é\uŐ/ÚUţ1ęëëőß˙>oŰŻ_?×s”YĄ!ĂźÖçžűŸĆ§ÔÔ­íęLŘČ;ôcŽŃTĘÍÍŃʕŤTZZfg* hŻ˝ŚŞł"šç-Žî ̙ĐĚofŢg…PŒš@9i™V™Ž8dÔýgţ,ëńŰKżĐőo< +ö=Íj%ő‚÷­ÖRŢj›ęŠôÔ4M¸Ť§ŘĚEŸč'{Ÿ¨OW.Pĺśë5U†vé=X­„/{ńŻíÖ Č룛ťDŽ˜¨h|ľn‰ŽxůŽ€Űn:ěÇÖ=őfî÷ďţř“VĹăŐWgjęÔ)V5Îˆäžˇ:ťď}ů×ç/kQŮJëń~Ă&ččÝŚŤ31I3†íŠŮ?|e-?>ďukr›úh˛ńô˜2bDźĚYÚÝ9ˇ˙B?%]^LF*?455eˇi{ůůńűťŽî•˛őËăËŻyotî:ˇM=žęs§w%“žpĺY°'ˇJ‹nzňŢÎc^7cŐ÷˘šfVWžřÝΑhËWÄ߸1>}Ůšą˛š)ž}ÍŻc˝ą“☝ށ°Ţ˜‰]śĽ@TîÂŰ/˖JžY<ŻĎ™ťtaçśmÖëú}Ţvę&ýüi1ţt€ĄŠLčg)ÄśÝ9[?űž˙ĆMsgW ě‘ĹKâ+ˇß˙o痽`Ă?+[ÚâóW>÷Í]ŢëN?ŸzՆ1aäŞ?>~ęUÄkÎdu‡Ÿ˘c_\fĎ.…”‡t҈Ž\ýUÎčŃŁ;ď/_ž"Z[[ł@PŠjGqĽÇŻXŃťđÄʕ˝[ôEMÖjŕż ‹W,ëź?{é‚řŰý7T<6í›8r\ÄáŃ­tÜ?^5~jťŠ›Ćń//guÉ]˙ęźżűôí˘Ąž÷ÍzÌýłŕO’ĆXľ´ľd÷Ř~ß5ĹśqÁŘŤ'ΊľiĂqS:ďő˛ƒŞ Yőĺ1SÇLˆ™ žÉîß?űą.űď›óxôˇšaĐ|€ĄŠL'ý$Ůý^„~ňőf͉]wS|v÷]bęČÖŘŻ4ŢëS—ÍŒć­čÓxŻ<ô“d÷KG~ ’Ž?ľľľŃÖÖkCzž;ď\=rk˝őŚv†|F^=léŇĽeżlŮęĘȎď[ÝÎŇăGŒ+W6fëťíśKrH÷Ý]ƍk*˝ç=ŠŻŠć‚YƒŃӋćÄy7ţ1&ďŮóŮ¨°¤žŽ>.šóŸŮýauĂbŤŠÓă€-vÉÖ˙ńĐ-qÎő—tžă˜‰žxő6{Ĺg.;/ëVô—űŽëÜţúűŚXŢÔßyUçú”Ńcm:pË]ăëW_˜Ýżü›âcëYÝÁę'ˇ\šu9Úję&ąűômcˆą}z̞›ě7?ąj<Ú%w˙+Žů1}ÂúŮúżš-ĄÖßŇw`]ü†žJAžnâc˄~ňŰ-ŽăŻş6ŽŘ|“8zë-bTýĐţ#SęňsÉÝóâˇĎ‰ĽM­Ý„~ž@Ů Oš÷ˇŚl@h][Óî(˝ń—żü-ćĎ_Đšţň—ďŃyƒ 6ˆťîş'ťż¨ă;•:ŽűJÝy|đĄ˘ăűĂú믏?ţDçsl¸a×óŚ.?#Fô_°­š÷|Xm]4ˇ|đçGZqßc fĹ+Î}ovTȸ÷cż*Úňďžw<ťę3ijk‰plv˙ -wm×Ű,îŸóXÇĎĐďřő™ąÉ„őŁĽ­-žY<ˇóń{l˛}źvť}˘/ŇXŽWmšG\zßľŰśž˛Iöź˝ń…+’+IݏîšőH<ˇbőˆł#fěkӌő7ĎBRW?z[,Zš4^˙“OÄ[v:8Ə7?yogGڍúçIßÍB<}y̑;çÝřűhliŽĽËăđ},Ţf÷XŃÔ—?xs6‚-ď˘Ô_Ňw`]ü†¤ÎĐOښĐOůOémŢőfekküćáÇ⯏=ťŻ?5öěX67&&Žă†Ĺ`śheK,Xя.X×=ž8nxbq,kl+éčS.ôSĄ{O{Ľ÷ˇř11ˆ:ţ´ösŔ$/u÷IKęŇóôÓĎÄż˙}MÜsĎ}ÇL:%8`uw–Ýwß-ޏâĘÎő‹.ş8Ţóžăcřđáďo{üéO—Ć…‹ Žß5úĂŽťîŇüšăŽťâžűîíśŰśs˙5×\_üť˜4iblźń´8öŘŁcäȑą&ŞéřÓPSËŁ)łg—Ě[}ńęűľ5ľńŁŁNc~ůšxüšUٞžX8ťčą3Öß"Î;ň˙­Qđě ;ě_üéKˇŸ>rkĹ}ťOß>NŮçÍąś}ăuˆˇ˙úŒ¸wö̘ľd~|űš_íOĄœł^srŃH˛Ţ>fӉÄiŻzWœö÷ół‘r‹—vviÚrĘƹ۴íâ×w\ý)}§Ö5•J`PJ˙xŢŢ^ž}LŃćŇî?e­Šl) ýv¸éذ´š5ŽzrVÇ2ťl@(Jnť—Ő›cť}˝ŻxlwĎŐCč'ʿގ*uN*omuâI㮚››Ł?uÖםÝ?|xCźë]ÇeĄž\ę´łďž{Çľ×^Ÿ­?ôĐĂńšĎÓŚM‹yóćłĎu;mÚFą×^{FŘ{ď=ăúëoˆYłfgAĽď˙üŘr˗dAŸÔučąÇώKŠRw 5 ý$Ռ(Q7,˘ŽôťOôÎ8ýňĆÄQc㤽ŢX´oÚřőâoďţvüř–?gُžX¸*ô’Égwěúšl$ؚxĹ;Çđă:;ôą†cžj:ţ—Ρĺ”iŮšŽŢ鐨Ť]ű㊌ŒžżÇYqám?Ý{m<śŕŮXÖź2ŚvlßkÓ℗ŃĽłQ_óÖ]‹é֋sŽ˙]Ü3{fśí -w‹Ó9>žőď_GËžÓëXľ˙úRS徚*nk*ŹçKmÁmžÔ=ż­ŽdIűĆĽŰŚŚćë芝I ݤ%żßŇŇ+V,śśö˜>}ăč‹rAžŇm…ëůýüöŮgWýCű{úĎóXţzđë‹Îőęż˙9zúŠ6pSmč§7Çvú)óřýd›*{ý)ŰDĄ˝żůPŮĐĎE˙ېÝć#ŚňŔOađ§4T.´&AĄ4Ę*…^ú*uóI]qŞ‘B;ďz×;b˝őÖë˛/.źđWqë­ˇW||ęşs ďŠI“&unűë_˙űŰeëßüćWcذŐ!ƒĺ˗Ç'?ůéÎő#Žxm|đAësç΍óĎ˙QţŠdÓM7‰“N:!Ìk"uűŠvlŘ3+FsűŔű‚6ŹŚ.61!úۓO>Őńwíš9rTÔ××gő‘tÁMşÍďýŁĄaŘŢ7é?ŰZ˛´?ŰV°´ܖ.Qa˝ťŰŇűĽşŰ—ŃńšĘ[RĐŁpäИa ą´)u~é.Č3ÄB?ąśC?Ťv^\TJďušĐOĽÎKk[*‚­Iđ§;ÆŐÇřńăc“MŚÇË^öŇŘi§—Uu•Â:Ç÷ölě× 7ÜO<ńd,Y˛$벓şíěśŰ.ąÇť…zúĂÔŠSăă˙HÜtÓÍqŰm˙ŮłggaĄôźŠăĐŽťîœ=o {sŽŃuĂcaËň€Ą.}—Á`čŠliniŽá Ť˙1öŐÓŚÇĹ3gVňô˘¨ĐOۛĐO/ş•żâĐOŹž-úYőoŘq|jJŁ´ič'IAš5÷ľ˙ţűeK™1cűlŠÖk^sXśT2jÔ¨8űěouwŠhhhˆýöŰ7[RoBKcëGĢ–_™/P€A+PKße€Á 6š˛#ŸĘnf/^\tČ;śŢ6ްéćY矲ĄŸnC4˝ ý˝Ú^uŮé1ČSÎéeč§ť Oçy{86uúyóΓℽŚDĄYĎ-‹ňĄŸžGx­-ýÝE‡Žzű×v|Ć׏ ĘŇw¸vţˇ  Ž?Ŕ:•‚!íí˝ěţQĄËΕO=ď˜4šsěR]Çí{śß>[ş3ec|çŽ{ăŚYóúúéŰh­ŞB?űʏ֊.Ďľj{…ĐOŹ~˝{o:.>qŕ†1etďţH˜FhýőîEĺC?}hä2Pá Jimm°‘_/vé÷Ź/áŞńĂFĆňśŚhjk jjëłď0Ŕ`Ąă0ä”­Őqűךsâ™9ł˘ˇ&ÝiFAˆ&żí!ČŤžťŞc+„|Ö,ôÓőšĘo/ýěűÔA˝ý$O?;;ţpoŰó§.ӑhIăŽkňŢN6:`(ňÝÁ`P)ěţRąL™ĐOş]ÚŇç<üP̞ýlŻťźŒŞŤ-9wĄŸj-ň)äé|5úIF÷˛YKzOgÍz6žvő˛XŇTîuUîřSŐç:RWáŸţ—ŢÓźłV_ Ż­ÉĂĆ %é;›žťƒ‰ŕ0ä´§PO…qYˇ/^ßyđĄxřńGcás ˘ŠąąÇPkkK<1{VŸC?ĺoŁ—ĄŸšę­6ô•C?éŘǟ“ýěÝIď]zÓ{ů࣏ŗŽZˇoÇ~űúĹńŽ—ĹÄQQckÄ3K"nŸqŮĂľą¤ąŚ›×›BT)dľ*[ž6;űô$Ş455}×_ĄŸÜŘúߞš˜ßź4`°J~„~€ÁJđXkR¤˝˝=ÖTó˘ĽQ;bdD—ÍęŃZK[ŰâOłğ⹊ĄÎ—RMçœjíMč§ÚcŤ ýÄęsWJažĚj­â5t÷şV‡~Ňs46őnÄZ%J•4ž*…z; îĹ.™ś&ă˝*IŠaľuą yY4ľľ  ľőY§㽀Ą́/`ë.äQ¸/żß8g^t ý´×T­Ő§ĐOaGžjGkő{č'zúiŻ>ôSU§SuĄŸôžŽXŮşęe>ˇrÖvW \1bD 6,¨NzŻŇ{6ĄŸ\ Vl8||L¨•u‚u)}Ów1}'…~€ÁNt*uʡ׎XM󟋆I“Víč&ôSžsNt>Žđś(ôSőh­*ƒ<…ŞýTäéÍąU‡~ĘďŤúIۢś}UǖJžÁ2ţ+…YŇŇÜÜ­­­:•H!Ÿşşşľ?ld6ţkIËĘXÖÚÍí­k˰šş]7<űÖ˘Q…Ýü†ŒşşÚ, 1Śž>–Ěšu#GE݈˝ ýô˘ ĐOU›^„~˘7ĄŸčň˘—ĄŸöB?­-ËVśĆÄaMŮzúʆ‚<”žWy(…Ë^lA ôIĄŹ<đ3Ý}z|-Ż#€ŇŇŘÖ+[›ŁŠ˝%šŰZŁĽ˝ăó)éG}‘şúÔ×ÔfcćjęcDÝ0Ý}€!IeôňN?Ǐ––Ö˜>rTÜÓÚMłfGĂzëEmÇú…~˘/ĄŸčź-䉁 ýD/şu}ޞAžč{č§Ľ9byckśqŤq‹:>ŻÉŮg•=Dşf¤ Ëş ťP^ bc@eţuXŤŞUî¸QŁFeˇ;O’EURř¤uéŇh[ą"˘­uUĘĽ˝˝÷ĄŸ˘Ž8Ն~jşýôj´VĄŸÂpN…סFĄŸŞŽ]őR/œöśšě5ś6×FsËŞ$PmM{ě˝á’ě°üł*TÍgÜÝvŠš|R¤žž>FŰl4-ś[¸8ĚwśˇeÁŸść•Ks´v,mĎ/)Ó^ĆŠY˝­3ÜRE!—rŰ*=ŚěyVpڟlśZtžâ×Tţ15AŸĘ)•źÎ˘ó”źĆJ?[ńcŠ_w}]m Ť~ŠŤé¸­Y=FŹĂŽfĹöŽŃŁGeŸ•ŔŔŇń4zę“ÖǍ›nşIě9zLlTW ›Ž\Ż˙XÇg3=űŒŞů,X3:ţCJ Œl˛É&ąíÖł#z$nśx$XWRŻ Ç=Lz4śÝfËŘtÓM€ľCđXëRx§˝pFT7űĘ­'ťďž[´śśĆ¨§Ÿ‰í›âáśöx&ÚcIÇą­Á@VÓ“‡--F/ŠíÇ̊ F7Ç´i›eŸI˛&Ý~t¨žŕ0č• ˙ÔÖÖƞ{ž<îťďţxěąÇcz… Q%í˝<žďڟ_††Ţojj†Ĺć›oŰmˇmöX#˝ÖÁ`čMןrŰňđόŰÇ&›L'Ÿ|*ć͛˖-Ď:Uóü•Ź˝PĐşąŚaœşşş=zTL:56ŢxZŒ;śěyË=n?ýGđ˛ň0P žlżývŰť îźĐC=ýĽˇĄ€ľOđ”Şéú“oKJťĺ*_ęĹŞ6°Sé¸Ţlč_‚?Ŕ:ÓݸŻJűË}ş;WĽă+GąţęüÓÓűëýč=Á`ęKř§ŇöîB>ĺ‚%Ć~[›Ýzł€ň€nőĚY—ŻĄ§.?IOĄ"ŞÓ×đŽ÷ ďÔV€žţe•†j˛ČPM¸¨ŻŁźJ_ˇ.?ŐYÓî?՞Cń  ŤŇš‰ P‰ŕ0(ŹIř'ߗTsŽJ^lĄ 5)őÇř.+€5#řtŤ8œ‘î\8ŚÚđORM‡ŸŢyQş×Ÿaď5@%Ťë&j(@O€.ĘpJ5ëşčPM‡ŸrŻŃ¨ŻęôöóU„X3…uŤrľő Á jyqĄ­­-ęęęb T;˛kMďÉ 5 Ôß"!€ţ‘jn‰ú Đ‚?@ŐjkkŁľľ5ZZZ,ř“ŤfěWéńIvXş×—÷Ç{ PYŞš%ŠP-rŞ–Š)źąrĺĘXú.)\čkúžú,ş—jnІ"řô†?9=ĘĂyŃaůňĺąśŹi€§4°"Ô˝ţ~żźßŐÉknůĹwj*@5Œú**ˇľŞčŃÜܜÍ_›WővôW5çc`yŞ“jmŠćVWWŰĽćŚĆtGÇ [Ľ……şşúlۊ+bmÓągđóô^ŞľĽzJŞ˝Rcz"řô(o/œnëęę˛m‹-ŽuI¸dpńyô]^kKľˇÂZ@Oü‰(Ť4ȑݧ‚CZZZZ˘ąą1ÖľÂ3‚'k÷ ¤[ŞľĺuˇJu9€r€n•+4Ôׯ÷ľ`Ás1ؔRF֌÷``Ľ[aÍ-§TŁ>J¤‚B{{{—myǟT„HW!577Çňĺ+bÔ¨‘1Ř)’0ؤÚZŞąĽ_ŠćVŽăON} (GÇ ˘Â"CiǗaÆeˇsç΍śśśŞ—jjŠśVXk+í¸ŹëĐÁ GĺF=ĺW!ĽűóćÍ  zŠŚ–řJľ6ăÖ€žüĘ*źŞ¨p[>î+żŠŽŽ6VŹX‹- gŠ––jjŠś–wű)7ćŤ\ ŕĐŁrW­ůՐ]‘´páÂXślY•ĽZŞĽĽšZŞ­uW{čI}TŠ íí흷ůś|ÔW.]•”f’Ď›7?[=ztĹRč'ŐĐVwÓŽË:ýŽúĘéöTCÇ *ĺŽ8ĘŰŻş:iUKâT¸X´hQŤĽšYič§tėn?@oéřtŤ°ëO.#R‡Ÿź0‘äÁŸćććX¸pQ466Ɣ)S:÷Ŕ‹ŃŞNŮóbŊ•Y­,ŐŃęëëłű…ĄŸŇP"ôDđ¨Za¨\ ',ňđO*d<ńēąŢzScÔ¨Q/6˗/9sćuÍÎÇ{•.Â>@_ţ]äŸrëĺşý”>6mojjŠÖÖ֘;w^VИ4iRŒ1<ŕ…nĺĘĆX°`Av\Ş•Ľ°OCCCgŔ§Rč§°ŢVĘüŞRMř'­§íÉđáĂŁĽĽ%[RcöěŮYcâÄ 1räH#ŔxAIuą+VÄsĎ-Ě.ˆKR=,uÉÎ;e}zú¨Dđ(Ť´ëOéśráŸ| X~?o]œ‚?éŘUóĚçgűӞѣGg]€ň™ć  Šö•j]颡ÔÝgٲeY ,ÉÇzĽzWށĺuŻ|{~ż7Ąu3 Á ˘jÂ?ůýT´HŎ|=/~äEŒ´žŽtJŐt?Ý.Z´¨c‰.ĎQxŽÂ[X›ňŔMéméţ$ő¤‹Ü >…!ŸÂŰüń…çúzKđčVOáŸÂÂCa(ďţ“€ňőTôHŇśZ5Ź=ň§ČĂBů9ş#@č)\SZ[ľ-ű˙l=ďđ“[ř)ˇ^z^Ą /€• âT ˙䅋<ěS8ţŤp[^ÉĺŰ ŸC°€Á \ýŤ\h§0ŕSzláhŻî:•[¨Dđ¨Zi÷ŸŇ@Pžż°¸Q8ţŤđńŤ:ýDŮ Oáśü8Xň:WŇ]§žrăťJC@•[Hčč Á Wz3ú+É …}Ғwű) ű” Ž€ľŠRH§ťq]ĽŞíňSi@w€^Ť4úŤp[ĽÂEiЧܚ ÷ŔşV:Ú+ßVnżŔ°6 ţ}VŠűORJˇilWázwcžJ‹݅€„č‹î7•öU3˛Ťpę]@üúEšî?ůö¤4ÄSş˝\§Ÿj‹:ţĐkžŠ4ĘŤto÷ô†ŕĐo*u˙én_ĽIi ¨šç€ţÖSŔ§Ňń˝ÝĐ‚?@żŤÔý'ßW¨§ăz*†čöŔšXÓ0N‚úJđÝu˙)w\ގAÖŚŢÖŁÔŻ€$ř ¨j@ĽÇŇŐ€uaMB;?ŔÚ řŹ˝ •{, vjYŔÚ$řŹU……|x!öÖÁ`)-ˆ0úƒ…ŕ0hôT0 `mě† Á`ČPp€Őjr`ü€!¨>†ˆööö€VSSCŕ0hö0ôT§  Á`ô`(*­k ëŠŕ°Vő6ě#ŔşTM¨§°†%ŹM‚?ŔZQ)ŔSM°Gř€u!…xz;ö+?^X€UŽ0Ň]भ­-`0(WÇŞ­­­xLaŘGX€QMŕ'­—ŰVíůşŰը̊´˝ôÂľt\~lš°0€~×]č'/Œ¤őÖÖÖl=Ý/Ü^x y§Ÿ<Ŕ“ÖÓýt[WWW´=ոʍţú›ŕĐoz ü¤%…}ZZZ:ˇŢ>žŇýjŸzŇS§\çž|{~áZ~Lş­ŻŻĎB@)üS*<‡Đ_€~QidW*€¤ O ü¤%ߞ Ç7İaĂ:Š ŠRŁŕŔ°ŞƒuZZŁšš9›˛ÚWSSSVăJľŻ´¤ PĽZĐ€5RŠËOŢÝ'>Ňm’Šc̎†††Î‚ 5ŤÂ=iŠÍ.l5jTVKÁŸe˖gÂĺKڟwŇýčo‚?@Ÿ•ëň“ é6~ҒÖӕMcǎɊđB”‚=#FŒČ–T[˛diçEqŠ.––ň)ţúJđčľrŸ|IAŸĆĆĆějŚ´>~üřŽbÇđ€‹ň™4ibŹ\Ů‹-ęěŽ=|řŞ:Y úäK˘űĐW‚?@݆~ňűy—ŸTźHĄŸt›ŽlJ]~ŒôŕĹ*]×Đ0%ëţłrĺĘŹŽ–Â?iôWŢý') ˙˝!řT­4ôS¸¤śĹ)ô“î3:Fđb—Â=ăǏ‹úúşXştYŹXą" ˙¤Ž@)”}„€žüzÔÝhŻÂĐO*T¤Ń^#GŽ`ľtĄ\mm]6ú+ŐҒţ)dôĐ[‚?@ˇz ý´´´DSS“Đô ŻĽđOŞŠĽ`O}}ń?׆}t˙z"řTÔSč§ľľ5+P¤ŰącÇý@R ­­­5–,YÚţŠŤŤ+:Fř¨–ŕPVOĄŸÔá'řJ˛VĹ@ĎR-­ąą) ţÔÖÖfÁžt[Hř¨FmTĄ4ô“şü¤ŕOş?aÂřŞ—jjůĹuŠÖ–îÖŕŞ!řtQZXHE‡Â}iÉG|Mš4ąËŐH@÷RM-ŐÖR-ŐÚJ?…5šD(ÇżŇE* Ż6Jă˝ŇR__#FŒ ÷Rm-ŐŘňz[O„€R‚?@ˇĘuűIí‡Ó­_°fR­°ćÖ]×€R‚?@Rą!Ÿ1žZ§ĽŽŽ.čťTcKľśźîVX‹č‰ŕĐŠ´˜PnŽxŢrxܸąŹšTk+Ź˝*WŁČ ţ=*œ-žŠ[břđᏚUľśŐÁŸŇ‘_•ţ™ŇBBž^XdHWĽĽŽŽ>jký1úCŞľĽš[^K ër•jwţĹ(Ť\1!ÍOF@˙ÉknŠ'čTKđčV~eQşŇhUđ'ůj ˙ŹŞš­şř.ŐâŒűŞ!řtQXP(˝ßÖÖuuuôŸTsKľˇîjsĽ€ŠEƒŇíů|ń4sč?yÍ-ŻÁ媭Ý/NţŐ¨(/”śŽŠŠ  ˙ÖÜ ëq>@wę yq!Ÿ-ôżT{Ë;ţ¨ĂŐüzAą–P=Łž`Ňń(R8?źt;0đşŤĎŐÔÔ@NÇ [?°n¨Í=ü€!Hđ^ä\5C“Ú řCŕ@•VΜó˙đ‡h|â‰H-Ď= ţüçXzűí•ţTaŢĹÇ­Űl÷˝ńqëÖ[gÁœ°âĄ‡˛çš÷ˆ#âżťěęSĺÔ@ĽóÁÍ €u/BćţâąđŞŤbĹý÷GË…Q;rd4Źż~ŒŮc˜ôÚ×Ɣ#Œš††˛_~÷Ýqێ;mŰmćĚąŮfńBwűN;Ų;îˆŢzŮ 7ÄŘ=÷Ěî?ő•ŻD{ssvż­ą1ž:돘ôş×E›uîšŃ<xńQ›zbÔ bŠËĎwŰ-ćüô§]B?ĺ4=óLÜ÷Ś7ĹăŸůLĐżś8űěˇß~Q7jTLxĺ+cóo;†ř@Ź÷śˇEÝŘą1jťíbŰßţ6ÂŐݔĄă RÍóćĹ=‡+gÎě˛ŻŚś66Ü0Z—-ËF~•zň‹_Œ›oëżűÝAWcvŮ% ńô$˝Çš[l/ý÷żc Ľ‘^[˙ěgA˙™řÚ×FĂĆwŮŢşhQĚžŕ‚˘mSŽ:*6ڨ˹#ˇÜ2Á¤=ĺ”.ĄŸáo›œqFL=úč, ’4=ýt<ýÍoĆ3ßůN´ˇśŽ~ü‡?“˙ç˘~âÄxĄjklěÓŹń›ýëÁ‹ĂúÇWvűʇîüŮčƒŒqűîCQ_0-żűî˜űŤ_mšőÖń˛›nŠőßůÎÎĐOŇ0mZlţoĖçWt|ë’%1ű‡?Œžj|ňÉxüSŸŠ˙îşkÜ0n\\×Đ7o¸aÜóęWÇŹóϏś•+{9–Ü|sĹÇŢ˙Ś7Ĺľ55Ë“_řBlzęŤ_[ˇÝ6;×6Ý4֖Ň×ó`I˜¤t˙Źü Űžřúëăž7ź!nš:5Ž><ţłůćńĐńÇÇňűî+ű<Ď~÷ťEçšełÍĘ—BOés¸÷őŻ[6Ů$n=:Ž5*ťß߸j<\KKTŤ˝š9žţÚײĎćú‘#ăĆI“⎽öŠYçž[(Ť$}–ŸpBÜşÍ6ŮëHçH?ëÇĎýőŻQE˙úWö>ŢŇńšŚ÷*ý,é{Ň4kV 6Ď]vYö¸ľă÷˛ó÷cŁâžĂ‹gż÷˝ŹWwúűó+•‚…ߣě;Yň߈dٝwfÇŢžóÎŮw4ý7Nž˙Ýe—˜ů‘ÄŠ `đŇńĄŮ?ţqD{űę ˙hżUÇśr#ˆriŹW ,˝ýöÎm ţöˇ˜öńGoĽĐÁĂď}o´­XQ´=0šţţ÷xŽcIžmó›ťÇeĎ1ű'?‰Gß˙ţh]žźh{kss,ťëŽlyöűßĎ^÷–çœ5 ѓ‡Ţőޘ3DĆ`Ľ Íüß˙> ˛´ˇľun_ůŘcąňG?ŠyżúUlÓąL:âˆč­ewÜ÷v<Žń‰'şěK­´Ě˙Ă⩳Ίí˙ô§ŃØŞěIçKŸk.ť–ÜxcśĚűíocűK/- œţœ3?öąxć˙ţŻËžěgíXRˆmü+^‘ýź lPöůłs|űŰ]~–ôYĐń3ěxíľ1¤ßŽ>: )uŮ÷ěłŮ’BAiÜŢś_ăö٧Ëqýýů•JżŇ÷rÚG>źç=Ť7tü÷%~˛Ď­đż5Z,ˆĽiéřoIÚżÉç>ÓO;-€ÁGÇ„Rp P ה ”Úę‚ ˛°AžLűčGَžţÖˇ˛N&ĽĄŸR?wżň•ąěż˙í˛oÎĎž…tJC?ĺĚţя˛BO_s͐ ý$iŒTęvSú)”Ţ›ßţöhzć™č–ůó㮎÷˝\h¤Tę*t÷Ą‡fݟşóäç?_ú)ľđĘ+łîOĺÜ÷Ś7• ý”JA™ť:(Z/î˛ď‰Žç/ Şj|úé콪ŚóĐ@jëřĚî>řಥŸR)”şc­|ôѢíńůJŻíá“O.ږÂe›}íkE۞8ýôl<`ič§TzĎ˙ěgłP!0řţŔ ÓŢÔÔeźÎ¤ĂŻęąŁ_úҘňŚ7u.Ő>.—B<˙ż˙W´mÂŤ^Űýîwń˛nˆ­~ň“ľíśűŇ8ŁČ( ¤pÄŁ§œRtŽ1ťě’‘všëޘń׿ĆÄWżşh'ŐôôÓѝç.ż<ťšŐVąáűŢÓ>öą˜Üń3V)@•şádÎ??6ůüçcřĆÓ˛hQĚęĺ8śgĎ9'ëȒŤ92śüţ÷cgŸ—Ď™“ua6ujçţ<ÉǎUňĚŮgGÝŘą1őčŁcƒOŒQ3ft9&‰j]ş´ËkIÝx:ŐÔĆ';\qEźôÚkcłłÎŠúńă;w/ż÷ŢxŹ$@´âţűăŠ/šřÉ:Î3娣b‹o;6ůěgcř&›dÁŻu=ň+eŇž\mCCL˙ô§ăĽ˙ţwětë­ąĹ˙ý_ԍÓš?vRמBńůuűČ#Ť:Lu|ďrcvŢ9śůĺ/ŁŚvu0uszúë_/zlú=ßé–[bυ c—{î‰őŢúÖ˘ýO|îsE磞`ięřÇ˙ö––˘mĂ7Ý4ֆ§žúŐhkję\Oá‹m/ş( b$c÷Ü3&żá qű;d]X’4˛kÁ_ţ“^űÚl=u˛Ůô‹_Œ<…:RČ`Će—EíđáŮţQMcŸnš:5 %Š+΢kމŠoyKˇŻoÓOÎÂ5uuą&_w]<ţ™Ďt{Ěúď|gŒxÉKbM¤°Óä7žąs}Ł÷˝/nÝnťhž;ˇsŰÂË/ĎÂ-ŐZvçEëéüœtRçzúĚę'NŒgžő­,Ŕ“–ôšu§aÚ´,¨““R——‡O8!זKŸëâŽc&vŘŞc:>łŇŔÎKÎ>; eĺR—Şńwî˝wgçŁŮ?řAlzĆQ?iRśžş8•~ߡę8&Śr}ä#qWÇwŚ\wŠľiĚ{ÄŚgž™}Ż—w,rJŹ÷śˇ­ŢżË.ŃňÜsYH&ˇč꫋Î1Ÿ_’Bd÷vü6ϟ߹mxÇçşýŸ˙uŁG›BĽÝ¸^rÎ9Y¨.Ia­­ţóU;:~×F?˙:ŇgXŔ`"řƒLš[)0ĐRgÁ˙X´mÓ/|Ą3ôÓůZ&LČÂ…[ž+ţ ›2%6|ď{ť˛ÚÚ¨1˘3ř“4ϙÓíCRˆa‹ď|gC?ɒo̖î¤pҚFď´SQč'П<9 Ľ€UŽńЧ˘7ňUnńŐWg]hR *—şˇ¤ĽZés.ěF”ŢăÍ:^cađ'i*x­éy _{ú|6,1•Œ}ů˳גwlJÁ˛…W\SŢüćl}~aÇ X.+ ý$)ˆ˛ů׿w÷âg:([şS7jTŃzé÷z >żhm:ŢĎFę|ŁGÇvďm u•*} IČęřÔ44tnë ˙ƒ–ŕ 2iôOŠ–… c ­|řá.]@ž¨Đ‰ćšż˙˝h=uýФuńâXv÷ÝY Y9sf,úç?‹:“džďSÉŘ˝÷ŽšúĄSĘľýöeˇŘrˢőś’ńY=™ôş×Ŝ /ě\O—nŰqÇľÝv1f÷ÝłŔј]wą{쑅ŤŞ1vˇÝşlKކő׏ŚŮł;ˇŽú*í\“^ÇGĺ䡟ÎÇv|_ňŕOcÇ÷Ąčç{>@V*ąŇ­Ö^ž_%użi|ôŃXvĎ=ŃřŘcŃřä“Y€gá•WXň˝ˆĎďĄăď˛mëŽçHˆĘIßÁ4˛Ż0(ôÔמϞ{nźJăÁFw,éţˆÍ6 `đü€AfŘÔŠYǕ4n)×řÄ1КžÝUhnóU…ćyóŠ7´ˇÇź‹/Žgż÷˝XôďG¨-é¤2ŘŐ ÖŤí՚ňż˙ëýĺ/1§¤Ëňűî˖řŮϲő ›r䑱Éé§÷Řš¨ŚBŔ¤Ś›ŕI|_Rˆ§4lViŹ]úhŘhŁXńŕƒą.5>ţxôĄŘ …‹j ú€ÁŚ6€A%ášőÖE۞űŰߪzlę82í\\ziTŤ˝˝=úŞmĺĘÂĹýG÷żůÍeC?iQ—”NëĘ´~4öíxÝ-ÖńXЊjj˛ĐĆ6żúUŒŰk݊aŒ42nÎ/~ˇď´ScÍú˘_ž/ĺÎŃÝy{č 5Đ_{m֝çéo|Łkč§ăsąĹ1ţŔť?ÉZúü8öŘâßËŠťĐ.wݕg6yrĹă–ß{o<|â‰ŮďsŹÁg `špČ!Ťş8v(éՓşącŁnÔ¨˘Ž?+KFĺڛ›Łé™gb]IŁ˝|Ç;˛Ž8šĐŰđýďńű헍ĎJŁČRŕ.˛ëÉ@~Ëďš'űä'c‹ď|§â1 ÓŚĹKž÷˝Řâěłłă—v<z‹Żż>–ÝqGŃąŠƒ×‚ˇž5&qDƒ‡Ž?0­˙Žw­gĄƒăŽë:RŤŔě .( ý$˝ůGú‘[n™uĘľ55ĹŇ[oŢZđ§?­OűÄ'bËóĎς?çOďěpŇşxqĐwŠ#LęĆR?qbL<찘ţ™ĎÄöücěńěł15ug)°ôöۋ+ýaôŒĹĎŃń]IáœŢ*cUúýÉĽńSĽcÁÖŚÔMk壏vާŔŇËn¸!6úŔ˛@[ ý$Ő~ŻűűóŰťă|^ůʢmi$ŮÂÂXid[ËÜš1zÇł˙îźäœsbç˙ţ7^zíľQ[2ęmŃŐW0¸ţŔ 4úĽ/íň˙Š#Ç{ěó.ş¨(`Ń4kV<ö‰OÄĂÇ_t|ý¤IąÁ 'ŹŢPf¤P{Á( Ô}Ľ´;ĐăŸţt´ˇśvyÜCĎuËf›Ĺ˝GŸvZÖ)$W:iDÇqĽRG”Ć'Ÿ z'nşď oˆ˙lšeÜ0fLÜ6cF,žîş˘cjGŽŒ‰‡^´­fذ.!Ž55ţ ƒ˘aýő;×ÓçţÔWžŇ帜ĆĆl\UęđôŔ1ÇdǤ°I. ĽŃłçœS´-{ćÇ?ëRé÷şnüřěwŹH{{ĚůůĎ+žc >żÔŐ'íßę‚ ˘~„˘×“ƒ-óç?÷—żŒ;öÚ+nčřnŢxăxđíoď2ĆkÜ>űtéę”ţ .F}Ŕ •Ćď,žá†h|â‰Îmi ŇýoyKH#łRJ]€ŇŸÂ`Bޑ¤ĐăŸű\L~òN!ĂÖ_?Ś}ěc1˙č űǙŸřDçśÇ?űŮX~˙ý1ĺ˙7†Mž+z(žůÖˇbŮ]weűSx-}_68é¤ÎÇŹ÷öˇÇS_űZQ˜í‘÷ż?ëđ“~ŚZIăăÖ嘯¤ô{~ýЇbă<űÝIŁůžüüçcŃżţUńőůՍ×ů_ňÝďĆo}kŃë|čÄcť‚ń{ĂÖ[/–Üxcçús—_÷uT6ślř&›Dóœ9ńě÷ż_Ôá(Ŕ .‚?0H ›:5v¸ě˛¸űĐC‹Â?I I¤PY55ąůמSßň–˘ÍéôS‡–ŚŮł;ˇÍűÍo˛eë .ˆőŢńŽťçžąÉç?ć3Ç¤€@aH Ôúď|gL8č ÎőŠGs~ń‹Îőşť`ökkł Qi°€žmńíoÇ{ďÝ”IA’‡ ‚4ĽRŘdłŽďĂ@HAą…˙řGÉĽn2iŠ$’*ěJ3r›mbúЧĆgœąú öö, ––\§•‚n…Ą™ľ)$ťÇąäć›;ˇ=óďdKĄ‘[m•ž*čĎoęąÇĆü?ý)ű˝ÎÍ˙ÝďböO~’ýŽ&^őŞ,đWřţÎťä’lŠdňßă<0€ÁŨ/ÄFnťměôŸ˙ÄÔcŽ);ŞŤTŤ5ăoË:ątŃńřMÎ<łě㠃=Ó?ýéŘňűߏÚáĂŁ[çŰč”SbËóĎ/Ú<ń5݉>řÁnš‚ ăöŰ/č˝1ťí–}Ć)֓ÔjĆ_˙šVDÇw`ť?ý)6xĎ{z<´nôčŘú§?őŢöś.űŚîsąŃ‡>TńąégÝć Ëv­Z›ŇëOÝr*Iaśmş =%kăóKżżĽcşíř]- ڥיýwĽ'ŸńúÇŰţú× >‚?0Č塇]ď˝7 ĺŒŰgŸlŒR T7vlŒÜrËXď­oÍţa~ׇЉ‡Zń\œpBl˙Ç?ƄƒÎƀĽqMé\íííĹǝtRěöČ#ąŮ—żăöŢ; ¤QCő'Ć藽, üěr×]Y÷’ô:JmńďÄö—^“Ž8"6Ř {lzžIŻyMěpůĺ1í# ú.uXÚmćĚě}žxŘaYČ#ľęFŠá›n“_˙úŘňÜsłďĂ@wiIϛžkçŰoĎžŠ3OúÎfŸůzëeŻMĎ<3v{ěąlŹW9ŠÔßúVěřŻŔ#ĚşSŐ64ÄđiÓ˛ďěNˇÝŁśß>ÖľÄË~O=5Fí°CfJyFmˇ]śm§[oú)Sz<Ď@~éw{ëŸü¤(,˜ş%=řśˇuŽńŤ92űďĘËnź16ěř}O?OęĔ~Ÿ‡uü cvŢ9Ś}řĂŮĎ´UÇšj:>`đéůRÁžŤ)sżťŰš ëůR[p›/uĎoŤ+YŇž4ÄźśŠŠůúz­ôůŇzáŇÚń霼Ľ%VŹXmmí1}úĆôŻ'Ÿ|*jkkbäČQQ__555QWW—Ý.…jŞč tŐĐ0lśŽeńóˇ­%KűóˇmK{ÁméÖťť-˝_Şť}`ü€!Hđ† Á‚`ü€!Hđ† Á [555Ź}js@O€˛J‹ Š °v¨ÍŐü€!HđčVńŐDŽ,€ľş§ÓĐÁ ‹r…ÂmíííôŸÂš[Oő9€œŕźČőŚ`ŰÖÖ@˙Ékn}Š×/^‚?@ŐjkWýŃĄĽĽ5€ţ“×Üň@5üɨZ*:¤ŤˆVŽ\@˙I5ˇT{üz߀"•懖/_@˙ÉknůĹw•ęt…€ŠJ ŤŠÍÍ͝3Ç€5“jmŠć–joĽ„}€îţÝ*-,ÔŐŐgŰVŹXŔšKľśTsKľˇBB?@O€ĺí…Óm]]]śmѢĹŹšźÖ–jo…ľ8€žřPVéń|=ŇŇŇҍô]ŞąĽZ[^wŤT—(GđčśpPŽĐP_żjÜׂĎĐwŠĆVXsËőřÁ ‹rEƒÂŽ?Š‘n›››cůňô^Ş­Ľ[aÍ­RŕGĐ(G𨨰ȐßϗaÆeˇsç΍śśśŞ—jjŠśVXk+\cž€žţ=*-:¤ĽŽŽŽłýđźyó¨^ŞŠĺ#žR­­\  '‚?@Ś´PxUQáś|ÜW~%R]]mŹXą2-Z@ĎR--ŐÔRm-ďöSnĚWš]šuŕĹKđčQšŤVüjČŽHZ¸pa,[ś,€ĘR -ŐŇRM-ŐÖşŤ˝ô¤>ž—Š ííí]Ö ˇŽúĘĽŤ’ŇLňyóćgëŁG X ý¤ÚęnÚuY§ŸÂQ_9Ý~€jčřTĽÜGyűáUW'­jIœ ‹- `ľT3+ ý”ŽřŇíč-€nvýÉĽbDęđ“&’<řÓÜÜ .ŠĆĆƘ2eJç~x1ZŐ){^ŹXą2Ť•Ľ:Z}}}vż0ôSJ€€žţEJÇ}•ŰWř)” yř'2žxâÉXo˝Š1jÔ¨€›ĺ˗ǜ9s‹şfçă˝J—jÂ>‚@@)Á ‹ŇđOázšn?ĽMۛšš˘ľľ5ćΝ—4&Mš#F xĄ[š˛1,X] —je)ěÓĐĐĐđŠú)ʎ•†|„~€r€ŞTţIëi{2|řđhiiɖTŕ˜={vVŕ˜8qBŒ9Ň0^PR]lŊńÜs ł â’TK]˛óNمAŸŢ„~*üĘ*7ňŤ§đO>,żŸˇ.NÁŸtěŞyćółýißčŃŁł.@ůLs †‚TűJľŽtŃ[ęîłlٲŹ–äc˝R˝+ŐŔňşWž=żß›ĐşP‰ŕPQ5áŸü~*Z¤bGžž?ň"FZOW:ĽbHşŸn-ZÔąD—ç(iÉťý†}ʅ€ LJŔÚT)¤ÓݸŽŇŽ@ŐvůŠ´  ;‚?@ŻUýU¸­Rá˘4čSî\…ű`]+í•o+ˇ_ŕX›€>ŤÔý') ĽŰ4śŤp˝ť1_ĽĹŽîB@BôEw›JűŞŮU8ŹÚóô…ŕ°F*uě)ˇ˝těWšâHš0Pá~XŰş ůnďM7ő. ?ţý˘\÷Ÿ|{Râ)Ý^ŽÓOľĹč‹5 ßTĺUşżˇűzCđč7•ş˙tˇŻR¤4TÍó@ë)ŕSéřŢîč Á ßUęţ“ď+ÔÓq=Ctű`MŹi§?A}%ř ˆîş˙”;.×Ű ‚ kSoëQęWŔ@üTľ Ňă éęŔş°&Ą`mü֊Ţ€Ę=;ľ,`mü֪‡N>źűëŠŕ°Î”D }€ÁBđ4z*˜°6öC…ŕ0d(¸Ŕjľ 9‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCP}™çž{..žř’¸öÚëăÉ'ŸĚśMŸ>=öŰoŸ8ę¨#c„ 0XÔôĂq5eîww[Sa=_j nóĽîůmu%KÚ7.Ý655_ĐG˙ú×Őqć™_Œe˖—Ý?fĚč8í´OÇěŔĐÖĐ0lśŽeńóˇ­%KűóˇmK{ÁméÖťť-˝_Şť}ŁžxŃKĄŸO}洊ĄŸdéŇeq꩟‰ŤŻţw ‚?ź¨Ľń^ŠÓO[[[ÇŚcžđ…/Ĺ… `]ŤxHĄœGy4žyć™hllęńř3ś‹iÓŚĹĹ_RÔé§ĄĄ!N:é„8䐃łőË/ż"Î=÷ŃÔ´ęœK–,ßţöwqüńď €uIÇ^RčgćĚÇŞ ý$&LČnŻšćş˘í)ôsĚ1Gǔ)S˛%Ý?ńÄwóď_ëšŕ/O?ýtŻŽ1bDŮÇzč!]Ž}őŤ+Zꊧ`]3ę Xç–-[ßüćwâ/ůkŃö=÷Ü#žýíoV|\KKK\qŕqŐUWĹĂ?óç/ˆQŁFĆÔŠëĹË_žGźć5‡Ĺ[l=illŒ+ŻügvžG™Ůqžů1|xCLš49vÜq‡xŐŤ^ŮńZ^˝ľdɒ8řŕWműú×ϊ}÷Ý'^ě}tfsĚۊśýţ÷džnŘŤcÖśÓO?#ţţ÷Ë;×>ř 8óĚĎǚřřÇ?ŮĺŞÂäÔS?ŻýTŻŚŚ&úC{{{—m­­­%Ďëœŕ°NÝvŰíqć™_ŒgŸŐŤÇÝ˙ńůĎ!fΜY´=ÍY_¸pQ<ôĐCńË_ţ*Ž<ňâƒ|_ 6ŹěyîźóŽ8ăŒ/všB+'ÍjüńÇăŇK˙ťîşK|ć3§ŽÓĐÉ@;÷Üó゠~Öš>cÌřяΠN ‡ÝxăÍe÷Ľ€‘ŕôÎFm”úŞÖʕ+côčŃ1mÚ´Źž”ťě˛ËăŘc):öňËŻ(Zßxăé°ŽőŹ)XóíoŸď{ß{úšçž{;÷.ĄŸRmmmqńĹżO}ę3]ŽČJRxčƒüpUm™o˝őś8ůäf݀ ż\}őżŁšššěž˙ţ÷Ž˜={vŐ{ÉKśˆÍ7ß,ëć\çž{.ťÝ˙}‹śŸwŢă sçÎ͖_üâÂ8˙üłß~ş:랎?Ŕ:qÖY_‹żüĺoEŰF˖-ďöq˗/SOýt—ă&Mš›l˛Iśý‘GÉB?š4F顿˝$Ţüć˙íܖöŸvÚéŮU]šÚÚÚŹČłőÖ[w<ϊŽÇ]›uüÉ=űěłqöŮߋÓO˙l@HW7nl,^ź$ťŸZŠ_qĹ?â­o=6€ę¤úÎV[m™-˝qÔQGĆEý&–.]–­§‹ÖÎ>űœl)gěŘ1ŮcÖ5€u"xr)´óőݟűíˇoűásćĚí\ŻŤŤ‹O~ňcqéĽŒsĎý^üüç?‰‹/ţUGqgŤ˘Çýô§?/šÍ~Ýu×ǓO>ŮšžŠB_űÚWâ+_ůRźë]ÇĹűß˙Ţřĺ/‡vHŃy.żüąpá€5ľ`Á‚¸őÖŰ;×ëëëăÝď~gŃ1˙ű ź &Äi§}:Ťő$“Ž?~|Źk:ţëTę°s꩟Œ‰'Ć?ţqeˇÇŚ+­ţüç?műŔNŽ7žń EŰŇLö3Îř\|÷ťß+ڞĆtM™2%ť÷Ý÷íŰkŻ—Ç>űě]´-…ŠN9ĺqŮeWt††R§ Ç{ěßúÖ˙un{řá‡ăŃGgĆ[l^ń<ĽßĄłÎúRvž?˙ůҎďŸ;žŻEMMú˝Ř8>ř•ń†7ź>ƎŰĺ<Š+Ö׿ţ­ÎőžKAşÔé*înžůćX¸pQÇďĐäěľuԛbçwŠî¤ď綾ţ5ű~̝;'ťjrÔ¨‘ąÁĆ.ťěGů†ěűƒAŞ|ůË_ˆ/|áKądÉҲǤN?)ô“ţî 0ţëĨQŁăӟţńş×˝śęÇ\wÝ EE—É“'őGţOçz z̟ż klžůfńo|­âšŚNx@çúţűď_ö¸H3ftŃóŽXą"JKKk|űŰgÇŻ}QŃö™3gfËß˙~yœ}öˇbă7îňŘúęWżŢĺő577gœjůË_ţšˆ>÷šÓ:ާ‘ŃW---ńď|7 ‹vRJRŘ莝îƟ˙üÂřŕßozÓŔśžNcăŇĎŢŘŘX´=}n¸áŚlI]ŸžřĹ3cűíˇ+{ŽôŢ~éK_ÉžGštžŤŻž&űîĽ@MJ˛BťîşKđJÁľ§Ÿ~şŕu]'Ÿ|RôĆżř•¸ôŇżm{đÁł%…ŁžöľłbË-_ŇăyRpç˝ď}_Ń÷˙ŮggeËUWý+Ž9ćčŹ;VéՐé;‘žÇżůÍĹeżiIŻ%í?ţřwe]ś`0HáŸtĐĹ_×^ťşct1żďž{gă˝túÁ`HăšzęžRŞ´KĎîťďÆ ‹Űo˙oüô§?ËĆ&ĽK’şÎ|đÁńśˇ“)JĽ J5a”9sćtšÂkÓM7‰’BĽĄŸBŠűĘg?{FÖ}§&ľqyŢţskœqĆş„,Ęů׿ţuu_ĘB0}ő•Ż|­K°¤œ˘I]d&Nœt` „ô~ĽIORXĺ}ďű`œţ÷cŤ­ś,ڗ޿Ďţ̊ď_ :ĽýŰlłuô‡ôZJżĎy'Ś˝öÚ3 Tĺ.żüŠxď{ßSôywçOúsTęîš?řÁuźovŰ=jéŇĽqÚi§WźÂ1ůĺ/ŐqŽąqÜqo/ÚţĂţ8.şč7ѓÔńčüó˜c Ăaźř<÷ÜsEžaĂęcúôMbżýö‰#|cَ¸Iűu ď΀ÁNđX'zúI|đ˘őÍ6Ű,~ţó_Ä9çœ×%°‘:ÜüáŒ+ޏ"N?ýł}Ł/~üăŸ­oˇÝvąŃFĹ@I]iŇxŞ4ŽiŁ6Œ™3ßýî÷E]hî˝÷Ţřďď(łtÁ?+zRç˜O|âŁ1cĆöY Ô]ćÜsĎď-uĺ•˙ŒˇżýÁ,ČrĘ)Œwžsqś?…¨ wŢ9ŮíčŃŁ;ˇĽN>ĽĄŸƒ>(Ľ•Ćz=ňČŁY˜#ż"nŐy~0 ÁŸ‡z8ž÷˝s‹śížűŽY'¨4ÖíńǏŸýěÂě6IďĹ駟żřŝAšÖÖÖŹCNéwh‡fÄě——ÂR)¨sË-ˇFřÇ?ţQô|é÷!bKŇŘšÂŕĎŹYłăŽ;vzYUçNĄŸÔvüíokÇϰCG‘saŽşóÎť:Y°ŕšřîwżŸúÔ'+ž'…Ě’—ż|÷řŸ˙YU ˝íśŰ;Ţť_Ćʕ+;űń/ˆCyUçďEúŽ^xᯊΕ>““O~oGquă˜;w^ÇgňóŹCUî?řQöŻŻ÷×úÇżţuuœyćłQ.5INŁÍÓrᅿěŘ˙ůŘsϗŔPڞ Ď=ˇ¨hýÎ;ďŒëŻżąŰǤâÎg>óšřÉO~[ląyôF ˇ¤đP.@Ţ÷žŢ\ę­ŘHŻľ0\”Â'ď}ďű‹ŽťéŚ›‹‚??üpŃţăŽ{[Ö9&I]]R¤śś&îťďţŘ|óÍ;ދ-˛qgÉć›o–ÝŚ6օÁŸ3fdŰJ3&N9ĺýńŘcOdš-ˇÜ2>öąwîOďó”)“‹^óO<óçϏɓ'GJÁŻźËS’ÂE_řĄžŢŮ˙ýâŘcßsćĚÍś=ňČ#qÝu×Çžű§n?yČ%÷ęWŸýěg:ĎsěąÇ”ŸŐW—_~eŃúŽťî܆KFŒQŽIcČŞ ţ¤ą[ßţö7łĐW.]Éřţ÷Ÿ’ˆr˙řǕńя~(†^ń\éqgőĺÎQ^ťě˛svŢřcÇ¤ O –˝óďČ֟~ú™˘×ž|â‹éÓ§g÷Ó÷'šË_ëć›o–}óPŹŠúůÔ§NëöĂíG?ú‰řĘWžŘç ĆƒÚ"–-+9”‡~R8áWżúEüűßWĹĹ˙*ëNR¨ąą1žńoEo\~ů?âK_:ŤhŰ[ßzlç8ځrřá‡wé(”>Űoż}Ńśšsç­—vPJĄŽ… mKŻ?÷:ţřwĹ+_ůŠ˜4iRôĹć›oGý–8őÔOÄšç~Ż(ô“KÁ•RŠóLJÝ{ţýďk‹śt҉]FbĽN5ŠPĄÂQX×\s]ŃžôÚ?üáSŠÎ“îčCˆQŁFŚzüń'⡇*ږ‡´’ÄŮcÝŠö_uŐUE§îźâű…~’4/˝7…–/_ˇÜňŸnϕşô䡟Âך@…Žžúš‚çęzmÁ˙xi—ןÂ?§öéě{š÷Ţ{őŠ ”Jă˝R§Ÿj.0I]€żüĺłbѢE0Téř !5]ś¤Cgœqzçzę*’F\ĽŃTŠL.(zúé§cÚ´iѓÔĺçŤ_ýFQčŔˆ÷ž÷Äh›ožiŮíÓ§OËF|ĺRhŁĐ>űěż˙ý:×ÓHŞĂ}lťíśË6ąÍ6[ecĘ^ň’-ş9ÖÔźyóâŃGgfďďěŮs˛_7ß|K—ăJGi­Š§žzşKg™4bʜn(î •şţäžyćé˘};î8#ë’T*uŞyŮËvě8×Mą&.żüŠ.ŰöŰoż˘ő<°(Ô´xń’¸ńĆ›Şşq÷Ýw+ť=uo9rd˜Ę͚5Ťây&MšŘŮ ŞTjƒž~§rĎ>űLçý7Ţ86ÝtÓÎńjÉ/~qa6˛n‡ś­ˇŢ&1—î§‘tП.žř’˘ń^éB““N:ĄŁ†tpśžţ^~îš?荞ĆazčáŃŠÓńa‡ďyĎńŮĹ6ë’ŕ0d¤Î-…#™R€ĺCú`ŮcÓ¨ŤßüćâŹŰO’B'÷ß˙`ÁŸţđÇŮR(uJá˘ţ̔S__ߍíšJşëŽť‹F~ĽŤÖňšőšćxÝë^ďxÇŰÖ¨{M ýéOŽK.ůCôYJť%W\qe5… W_ɡ`Aq'˘ 6¨FYý bMĽnRĽnťíś˘őe˖u9ć˛Ë.Ż*řSiœZúţŚ.O) •›7o~7ç™RqßÔŠS‹ÖS0ŠĽĽĽó{zúé§Ĺ)§|8۞Kߙ›oţOśäŇŘšˇźĺ¨8âˆ×uéÔ}QÚŮ7…~Ž9ćčÎőt?]ěőÝď~?ú*ý}:]ä˛6ĆÂôDđ2&MšP´žţúëWW•:ţ¤Î#…]ćΝ•¤‚Oęň“şýJ…>űŮĎôźY×R‡šý輸袋ăOş4žzꊲǼŤŘ~úӟǿţőď8˙üsbüřńŃ[Šeö‰'ž\1đ“ÂEiÔTiĄ­ż­IĄć榊çéîźŐ´ ďÎl‚?šżţőŻ‚?Ŕ:'ř 3f̈oźšs}ٲĽÝż|yqהáǗ=.ľvţěgOĎÂ0…ŢôŚ#ăŁýА #¤ŸďíokśĚš5;îšç޸ďžűłŽ?wß}O477w›Ć0ýä'?‹}čŃ[ßýî9EᕱcÇÄQG˝)öŘc÷ŘlłMc„ ąpáÂ8ě°×Ć@*í:“Zk_sÍ?َ&OžX´^ŘUŞTáHŤž(×í§ZŠ{Ő?˙yu~řŤť=îé§Ë‡žŇX´ůóm›<ä:,^ź8žyć™Ř`ƒő㠃Œ÷ż˙˝ńýď7.šä˘ŘtÓM‹Ž˝ýö˙F_\sÍľEëgžůů8ńÄăc§^–…~’Ô™f mźń´hhhč\OÁŚűď zkÚ´‹ÖS0%u5*ľhѢ¸óÎťŁŻRĄ1użY—]vYÇ\}ő5eˇ_wÝ EáŻdŁ6ŞtšçGsÝŇe{ú9JŸcŁĘĐ›3gN{ÉKśˆ×žöđřÄ'>?˙ůOâüóż_ôŮ%ˇÝÖˇď#*óžFg—şüň+˘?zčĄ°Ž ţCF –ląĹEŰҘ Ůłgm›?~œqĆ‹śM™29^úŇ‹śÍ;7N:éý]0ď~÷;łŔĚPńĐCwźŢSâđψCyMÇë?1 4JÝWvÜq‡˘mŁF,Z/˝J­\x'u€Yş´¸“ŇFmŘ帿üĺoѝrŞŚŚć^“F^íłĎ^EűĎ=÷ź˛ă¸žřĹŻÄßřŚřřÇ?ç÷ƒ,–Űoż}JžŁ)žůÍo'ÝOŰRםžşăŽ;;žŤĹăćN8áÝqă×V\<đ€˘ă˙óŸŰ˛ďwwRpéĎž´h[ ߜsΚEŰŇűWŚ+ő˙÷˝ŽĎť¸łÖEý&ŃUh˙ýWwęšě˛+âřăßtHqÄ˙Äç?f—Ť+Óďâ”)SŠśÝý3¨FáßQ“óÎűa\xá/ł:PZ~ń‹ ăüókbęÔ)ńśˇ˝5N<ńݰŽő )rŇI'Ä'>qjçś§žz*Ž=öíqČ!‡ÄĆoĎ<3+.żüňŹPĄÔ‘ŚpdQUő|(‰Uh„ńوŁ3ĎübĹ×ń˛—˝4Ž8âu1X¤ŕM {䡔çž['ŸüÁx÷ťË:­¤°Ěľ×^˙{qˇ˜]vŮšh}Ҥâ‘W)Üńď|76ÝtzŒ36^őŞWfďa Q͙3ˇó¸łÎúz|ěc‰M6™óć͋?ţńĎqÁ?‹îŒ1˘Ëśüŕ‡ĹšýcˇÝvéx-“Ş:ćŘcÉşĎä!4 îÄßGů?1mÚFŻg~üío‹kŽš.۟ş@Ľű…?űŽťî’užI’rW\qeÇwäéxĹ+öĎÖSG¨űďż?ÖD:gŠWžňŔnóĘWž2ď•K?çWü#Ţň–7wű¸/}鏸ţú˛€Í…‹âŇK˙ŇeĚ×!‡ÜĽëNŠG}4űýzőŤËĆyĽ\ţ^ćŇ9;ěÎőô=JŁĺr7ÝtK|ęSŸÉĆÁĽNT <żűÝď‹Ţďdçw XSGudvŃJ~áRşŔçěłĎɖrŇě_ţňç1~üřŠ€!e˙ý÷ËĆpĽŤłrА“‚•¤CĽAŚ( ý$)$ŃSˇšd0F'ŸüžřÖˇţŻsŰC=˙ď˙}şâc6ÜpĂ8昡mŰsϗgÁžÂN7żúŐŻłŰ­śÚ* ţ$)dUřţ§qkGýÖ˘sĽđG "-[V~äW €¤cR$÷\•-§öé8üđWWuĚ;ĚČB]çž{~ç1)tR<)•žťďž[çzętôŠO}2 ‚vŚIAŸÂ°O "íźóËâ†nŠŢjmmŤŽşŞh[˝śůć›uű¸}÷Ý;{ޕ+Wvnťě˛îƒ?Š R땾ㅡĄBЍ™ž3ÝIŻI“&ǃ>Řmëřăߕ}Ÿré˝=ŕ€ýŠĆu÷Z’°J,XSi yŞœzęgĘv.T__ßqÜ'…~€!ͨ/`ČIc¸>ň‘SbřđáÝ—Š7'tbęxĄ{ó›˙7>řÁ÷ŰaĂz&u˙in^5fëÝď>ŽËذBésůĘWžăƍŤxLęŢôž÷œPv_ÚŠć˜ä¸ăŢŸüäÇzě^“ΗާSOýD—}iäŐç?˙šŠçH¨OúÔŘd“MŁ/nšĺ?Y'ŚBĽcźĘ9rd—qf÷Ýw_<ńÄ“şĽî:•¤Î÷žwvˇŸO’žKgžyz—NP…R[óˇ˝íŘ.ŰĎ8ăô8ôЃŁ'é39üđ×t<ĎçúËě_ţňběŘ1IűžńŻĆžűîC™Ž?Ŕôż˙{TźęUĹţđ§¸ůć[âąÇË:˙¤Q]ë­ˇ~ě˝÷žYG˜ÂN$/tÇsttĐ+ă÷ż˙cօ'A[˛diŒ1<&Nœ”}JUöŰoߊç8á„wǖ[ž$ë ôŔfďéčŃŁ˛î4 .ŒŠS§fa”sĎý^Çóü!_•BA˗ŻČ"ťďž{źăoM6٤Ç×űúבëşřâßĆý÷?=W*şvÝŠć˜äo|CěłĎŢń÷ż_×\sm̞=;ë4jÔČXý ˛Ń^oxĂÝvŘ9äWĹvŰm]ô۸馛łs¤÷.˝oÇ÷ŽŹťPw„ş“Ćs•ęiĚWîUŻzU\yĺ?‹śĽŸ3u:ŞäŁýPözűŰKâ‘GÚښ˜6mă8řŕWvźŻ1cĆTóÔŸű&qÁ?Š˙ř§qýő×gáĽÔ hűíˇË~ÓŘťrRř+ŠŇ1—^ú׸ăŽ;cîÜ9Ů÷$}~éw4}&ŻyÍaąőÖ[ôˇţIo˝řâKâÚkŻĎĆž§@Ó§OďřűńAľ„×wüul u5ýp\M™űÝÝÖTXϗڂŰ|Š{~[]ɒöĽK•k›ššŻx‘9ôĐ×ĢE‹;×O;íSYŢJ!ĄŻý[ën¸Aüţ÷ż x!jhśwÇMš şřůŰ֒ĽýůŰś‚Ľ˝ŕśt‰ ëÝݖŢ/ŐÝžŒQ_0 ţŔ$řCŕ A‚?0ŐôĂq5eîww[Sa=_j nóĽîůmu%KÚ7.Ý655_Ѓ††a{wÜ´u,‹Ÿżm-Yڟżm+XÚ nK—¨°ŢÝméýRÝíËčřCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ A‚?0 ţŔ$řCŕ Aő0D´ˇˇ ´ššš €AC°€Á §:•`0Xţ댠CQi]KXW€ľŞˇaá ÖĽjB=…5,! `mü֊Jžj‚=Â?Ź )ÄÓŰą_ůń@ŔÚ ř ¨r…‘îŠ%mmmƒAš:VmmmĹc Ă>@ŔÚ ř ˆj?i˝ÜśjĎ×Ýv¨FĽ`NĽíĽŽĽăňc˅}€€$řôťîB?ya$­ˇśśfëé~áöÂă`0Č;ýäž´žî§Űşşş˘íŠĆUn˜đĐ߀~ÓSŕ'-)ěÓŇŇŇš˝đśđń•îWűźĐ“ž‚8ĺ:÷äŰó ×ňcŇm}}}JáŸŇ Pá9€€ţ"řô‹J#ťR$}Rŕ'-ůöT>ź!† ÖQIŐ†„UŹÓŇÍÍÍŃŘؔվššš˛WŞ}Ľ%*€Ô€ţ řŹ‘J]~ňî>Šđ‘n“TĚ3ft444t<`¨YîIKmvaۨQٞzX ţ,[ś<ť._Ňţź î?@üúŹ\—ŸTŕHˇ)𓖴žŽl;vLV䀢ě1bDś¤şŘ’%K;/ŠKuą´¤OšđĐW‚?@Ż• üäK ú466fW3ĽőńăÇw;†źX¤Ď¤IcĺĘĆX´hQgwěáĂWŐÉRĐ'_Ý€žüzĽ0ô“ßĎťü¤âE ý¤ŰteSęňc¤/V邸††)Y÷Ÿ•+Wfu´ţIŁżňî?IaHřč Á jĽĄŸÂ%ľ-NĄŸt̘Ń1zô耝î?~\Ô××ĹŇĽËbŊYř'uJA <č#üô…ŕĐŁîF{†~RĄ"ö9rDŤĽ ĺjkë˛Ń_Š––¤đO!Łż€ŢüşŐSč§ĽĽ%ššš„~ yí,…RM-{ęë‹˙šŽ0ěŁűĐÁ ˘žB?­­­Y"ݎ;Fčzjhmm­ądÉŇÎđO]]]Ń1Â?@ľ€˛z ý¤?iÄWęřÓĐАľ*z–jiMYđ§śś6 ö¤ŰBÂ?@5j  ĽĄŸÔĺ'Ňý ĆP˝TSË/ŽKľśtż°P Á ‹ŇÂB*:îKK>âkҤ‰]ŽFş—jjŠś–jlŠÖVř)ŹÉ%Â@@9ţ•¨JáŐFiźWZęëëcĈô^Ş­Ľ[^oÓńč-Á [ĺşý¤öĂéֈ/X3ŠĆVXsëŽë@)Á GŠŘĎO­‡ÓRWW ô]ŞąĽZ[^w+ŹĹôDđ¨¨Üńźĺđ¸qcXsŠÖVX{+¤ëНúčAálńT|čŘǏÁÂŐOëVMMMĐwŤjmŤjoŠP^‹Swz"ř”•‡i 犧Ť‹ŇRWWľľkżq €ĎŕTésQ˜¨NŞľĽš[ő•ęoi˝0ü#TbÔPVi˜#­§ÂC2jÔ¨X[ ť 1´ř쪗×ÜR Ž\m Á [yp#]i´*ř“Ć|5Ä@yáń™toUÍ­˝łëZ P Łž€. Ľ÷ŰÚÚŁŽŽ.‚BƋCţ9kO °ZŞšĽÚ[wľ9ő ”ŕPQi']i”¤ăů<ƒí|믓ŔjyÍ-ŻÁĺ~€îţĺÁŒŇśÂýüXW§o*˝ď}ý^×Fňz\Ú&řtGđčQĚČg‹÷ç9×ÖăxkSÄ^ěR}$ďřŁTCđč…uú1 líęđM_C@Â?jW@ő€ľŞ7Ą›uząŞö}Ź6 ÓŰQ^Â?Őüş(üčPMľçčďăĽďOaŢ€„€łŞĎ/<‚?@ˇúŤ Đ_ažžž…‘žé혎jWm¨GřxąSz"ř ¸jB7ýřîéÝ˝§=…{ş;ŚÚî?Š[• ţë\wᒾîcŕU3꫚`@ßţŞŻ|ňíMMMŃŇŇmmmŰúkl˝Sm@'?.ÝÖÖÖưaòĽŇ9z ˙”'řŹ3݅~ҲbŊhmmíńřžöŃ?Ę˝ÇÝuůIŇ痖ććć9rdˇîčÁ`Ŕô%Œ“‡~ćϟË.Œ‘ˇ^#ďţo ›?;j››˘_|÷ç1 Ţ˙śPCäőˇ kˆć)ëÇň;ÇĘÝöŠŃă'Ääɓł}˝ ůt%ř”UÚéďŽ:ĺΗśĽî0łgώĆYĎĆzż˝ †Í M)¨5üŮ'łĽůÎ[bˎË:˙ʎŢzQWW×%Č#ܰJšÚœş PNmtŁŻŸŢŽĺĘ;ý,X° —.úy6gUkĺŇĽŮgœŢĽŒsXM=č‰ŕ°ÎĺŒĺ˗GKKkŒşíĄŸ ţuۍŮgœ>ëDń  ď€~×׎-+VŹČnGÝs[đÂ4ęžŰłŰüł.G×€ęţëTa#u‚Iëőóć/LősgeŸqúŹsÂ<}#řŹ5=<ÚÚڲۺ–ćŕ…)˙lóĎşa ŕ˙łw'prÔuţ˙?Ő=÷äžCrsB€@NAńeuŐE—u]ÝŸŽŽş˙UWW×uw]ń`×EDšÂMB ÷•’’LUßęęžîžžÉ=“×Ó-ꎎŞxdżyĎ瀎ü†p,~şŕčU= pü8üđłphţ€~‘Ö źlüŒtÁ0ŕ˘ÂCß7@ď ř B@żËWń…ę/‡~ÁĐkň…6s §ř™ȏŕ0ü% .‡žs€CCđôŤh؃ŕ,~.şŕ0ü}Šę-8Tü äV&ŔtË-ˇĘ÷ž÷oy÷WTTČŘącdöěYrţůçɅ^ ńx\ *ţ€GE—Ă×@~÷ííí˛cÇNyňÉUň˙řMůó?˙ ŠŤŤ€Á‚Š?ňŽžúC2wmňÎ;ďȃ>$ۡż#Żžúš|á _–_üâ%#JÁ y§œr˛œqƲœűŽ˝ö“ňůĎAž~úţyüń'důňł ÔńŤĚ`@ĐŢ Ůęg˘˘˘Bžň•/‡ë ¨ř€Ăޔ)GHMM477ËŢ˝{ó§űţřÇ;eŐŞŐ˛yófiii•ŃŁGÉôéÓĺœs–Ë{ß{Š e{ë­-rĺ•’bM:%ő9ˇćܡrĺ*šďž?ÉK/˝,ťwď‘ňň2™0a‚œpÂůŔŽ”yóćźvOŸA-^|ş¸Ž+×^ű ůä'?.ˇŢz›ÜyçݲeËÖÔuZRˡÉGLĐ?ţŕ°ˇ˙~úQăƍËyĚʐoű;ŇÔÔœą˝Žnˇ™ÖŽ]'ˇß~‡üčG?ącÇJokll”/ůŤ˛zőšŒíííí˛yó[fŇÎ˙űŸ“~đýŇ×ĎđĽ/}Eyä1‡ŕ{?úŃOĂĺ .8ŻÓţUŤž’Ż}íMľ›X,&^xœqĆ2S)gßžýr˙ý’ÇRŢxcŁ|ýë˙$×_˙ƒŒónj-ó7Ÿ‘Bîžű^yóÍMfůÝďž0cŸ~îßüÍ˙“^xŃŹO›6Uޏâ˝2gÎlqG^}˝üć7ż•ýűČżýŰä˜cŽ– ŽďŐgˆşçžűdűöwĚg\vŮ%ŚĘOkŤ_9ô‚?8,i…Ÿőë7ȍ7ţĆ^”ś°Z¸đ„NÇţöˇż3™˛˛2šţú˙SNY”ą_ĂBßüćˇMŝ§žzZśnÝ&Ó§O ÷1BŽšćĂyďEC9›6m6ˋ/2m´˘ž{îyyíľ×Íň˛eKĺ{ßűNF;ŽSO]"çœsś|čC1€~÷ťßw ţę3DičGŤ }á Ÿ7Á#00ţ`ČűüçżXp˙9ç,—?˙óšJ9šhő­„łgϞNëňË/3Ąőꍯĺ ÍdŰąc§ŠÄăyžŒ7Vžő­o˜Šš˙ţ䥗^–ÖÖ֜÷ -Ăňéíg‹ŕ{\pžźüň+rÓM7›pĚşuĎʢE'‡űďşëůöˇżVÁр̌GĘ´iSeęÔŠ2kÖL™2ĺůËżüë˘>oăĆ7ĺŸ˙ů_Ěň„ ăĺ›ßüǂĄ­ÎsÝuŸ ŤŠáÇÉÜšsĺˆ#&›ű8昣M˜HƒAšôö3€Gđ ˆŽ*“ŕđ3ĐŐf.źđüQ6źęęęÂŔĚȑ#äsŸűŹ,_~Ś ><ăü\trijj’żűťż7{âń¸|÷ťß–QŁF<çG?úiú9÷ÜłĺŸřsSĹ(űiĺ˘\zű@i ř¤Œ=:\ÖpŽľzőš°JÎWżúe9眳sžŻUyŠńo|KśnÝf–?󙿔 Žďňœ'žxŇĚ5ěŁAĄ|!І††œŰ{ű@i ř¤<˙ü áň¤I“ÂĺćććpyÌyĎôŃǤ+7ŢřyřáGÍň™g.“|äj)FKK‹™yäôźĄ íŹ]ť.çžŢ|P:bćślŮ*?üáĚrYY™œ~úiážéÓ§…Ë?üHÎó׏yF~ń‹Ľçž{Ţ´ěR“'O’ŻýŠno6mšĎ>űœ.ííífűG>r•Œ3&pĽiűĽíť6n|Sî¸ă.Ůžý™5kfÎ{čgĽ‡ŕp„ƒ_˝ę)ĆM7ÝÜĺ1z/¨šîşOglÇăňýď˙Kjű_›đĐŹ0S”VÔůÖˇžaB9šÜwߟdϞ˝áú˝÷ŢoŚBÎ8cYüŃĐË/ż"ˇß~‡ěÚU'×_˙“N÷ţ×}Ů—+¸ÓĎJÁ–4 3rä7nœ,Zt˛\tŃťä˜cŽÎyěźysĺÖ[o–_˙ú&y≕ŚrŽëş2eĘrŢyçȇ?|•tttäýŹC śi°çŤ_ý˛œyć2ţŃę?Ö˰aľ˛`Áńň‘\-'t˘|ď{˙–÷‡ú @đZŰĹŠ(‰őO(ŔĐWWW'Ç—ęęjŠŠMuŠÜç1wňŹŰ)™Ű)l‹gMşo„ÎŰŰ;V čڎHƒ :Ůem)ÔŇŇ,ŽëÉ´iSsž—/ÜÝ^hyǎfyü×˙Fúԏn”>ő™k¤O ňűßýő˙4óɓ'eTü)f9ŞżŞ(RężăĎn’ö'_•äÖÝâ5´ˆ3ŹZâ3ĆKĹ’Ł¤ü”š=IWÚWŻ—ŽUŻKbă‘DŇŸ:6uü<Š8űxqŞ+zâÁ2ż)ëHH_huŘečÇňšŰ¤éßďßŢeč'”œoţŸ?‰×Ô&ĐçwŽĚž=+\ˇáŸ­[ˇ ŔPÁ߸€>Wlë&í[ޚG”ž˛7ćĘţ=;¤Ż4ĹÚĽ~rŢ˙ؑ˛?Ńwů}`Ď.Ůďť`Q˨fn{Ów…Ę@@iëXˇŃTňé–Ô@ť×Ţ˝Şn,jřE€îĐń‡wżűÂNáŸ;+đ2ţ€’QYYićűćΖžňZE‡l|yô•ˇƒňÖI3¤ŻźvĚ,ŮĐŇ }eĂKkSď¨oÚŹ)űÝVUőMŤ5ýŤăé Ň_Ú×ôßg:˙€ĄŽŕčwů޸Ř0HĂqóĹëƒJ/njzľźC6<˙Œ¸Ž+˝ÍKÝň6i§Ě7Ö÷‹ÉKóçČkMâz˝ßŽËK˝“7^x&őŽŇűo'u˙N,őÝc–mČ+~€Á%šĽNú‹ťcŸx}W‘ ŔĐEř e@Żęnp#zźÂTWWɈŮ3eëŃGIo[SŮ.cžÔďß#/>ő°ôś7œ˝Ň(R?f˜źśüXémŤ/ű‡—íň\ĂémĎ­\! öʁ˜+kS瑱m=ö(1kśÔÔT›ďÚ:”ŸËkęťÖƒ?,5ľöţ›˙€ĄŠŕ(č>|¸Œ7N^_|˛$ĘËĽˇ´:ž}źHY\ŕPţC Á0 ˘ĄŽě€GeeĽœxâ ˛gć‘ňň˛Ó)üŁĄŸ;kZäՊŽNű6žňœŹřýĎMđĽÇ×Oýďg‡l‘qľOŇńĂ9nL6?Kţđrńb‡r˙ŽÜvŮ9ňâŃsĚ5]qĚç$SŸńjcłÜľŤ.u˙=˙čł?xË˙É/>Óißëĺ š+őîźCČßčýż”úwϙ% .ŞŞĚę …~”žňeÇHŠXz´@o°áŸYłf†ŰlřgŰśˇ`0!řz]o8Ì#˖-•Í''O_t~Ú~i{Ż_Ô6ËĘĘöźÇ<óČ=rë ßëQŰ/mďőpl‹źęěÍiţßŃ(Ž.?sŢIrËg/ëQŰŻÖŞJůߏ]!-]”qM3i(5=śď€üěíwzt˙ÚŢ떟|7őîÍ{ĚĘŞvůĺ°ćľýŇö^O_tź•ú—.]bžÓCE8(-ĺ fJ|ÖDékąÉŁĽâĚů˝EĂ?_|Q§đσŽ€Á¤Ř:éN‘űœ"ćNžőBS,2Nş­Rç˙đ˙ß'ôŠhťŹ-ą‰:9r„ô•h°cĈR[[+›ÚŰeÓźšOÝĂČşÝŇUôC+Ô€Ňäî: M˙~‡¸{ęĽ7ĹF“šĎ_*ń)cz“ŽyÝsĎ}˛iÓćp[YY\.ťěҢƞúŠś‹ĹŠŽŽIÝO™ ŃęD6řŁË wTT”/MÍôŻcęƒy2kň‚š™źČźŤ 1Ď^ÎÖĺ_xüôWđ'{=;đ]nkk“ŐŤ×˜ÁIď< …Üöř‹Ň×&˙×7#œĚpçŚ:éP“Ě8ωœĚ=§đ5łśéqS~úeé/Wœš ŕţGœ/“&M2­ÚŞŞŞĚś\ĄžîVű)´ŔŔó6KÓŢ%É-uŇbGŒ‘ÚĎ_*ą1Ăz“ŽwÝ{ďýňć›éJČúšôŇKdúôi2ţІJđ‡z€ OJ@#ך2oŢ\9ýôÓ¤˜pŽKÍcâŚćnęUŽg''ľLŚJOd› ő8ćŮ´is¸Đ ţ€>Ł•[<Ď+ú˜\ÇsžVwäʅ#eţÉŁ¤zbĽ)ńÓôĘoäőŽIr˙qgKkŹÜíDB?6Ü{4ô“ąŽÇG‚@b@N:‚‚ŔOpîźöarAÓ9.1\bşM˙~|ÂXń4Œ”šâŠid|”ÔTŒńĂgËźIËĽÍMĘ[{ÖÉËŰî=őŻKĘUÁ'ş­˜ ?T™Ôż˛U—-1­şZ~őˆ˙Č.ŽŻźdą9zĄ0”ü%Š?ję°2ůëON—ÚY5â™ţ\žx펌¨ň䔎rôŤż‘ŸMžXvŽVô‰†y2Şüˆ?%Łá‰TţŃJ?v[ôü`˙¸d…\Őc>rýCbq9rÜ"™4ödŮş÷YyţÍ˙“ćÖ:éO„w€ĂOĹǚ–]Í˙ý'‘öDîƒRƒí5?Wʗ%ĐŰý€ĄŽŕčw= ő{ŢěÉŁ¤7ÄSŸ÷É÷‘šckýtNGŕŃЍÎSłacE>ąýůךŤĽšź*ŁZŠüăfľňŠś‹n“ô1šś-n-×´)Őeeâ”;~G‹{ / ýÄ?@Oí+óüe˝N2ľ=žšOs˘Œń=y{Ďo¤Ąńé = ů†žňgɰ/^.M?ź[ꆖŒ}NešÔ\÷n);nş@o#ô1`Ľöx÷q•R{L­8ô‰A›Ô˝ÚŰŐűÖĹÚQŽź÷…Ĺu=°Ń^núąĄ7ó¸a›/­üăW˙Iď9ď‚ć‰ňm3ĽŚ˘\b•qŞNMU:•Ľţâ\§¸8ŠőŠ˜8ĺ1‰Ľ&§,&eŠ{ÔI!ĚS{¤,^%“Ç\FžLAŕđŸ5I†}ĺý›02Ü挬•Ú/żĐ€>łbĹÝB?—]v)Ą0¤PńôŠîV÷Éuü@´ý_)2ëœŃâ&é š‚=Ý ű† ý űň•Ňôƒ;ĹëHJíç/•ŘŘá}eăƍᲠýL›6U†*ţäpÁ)ľŠ!Ç´÷ňÚ=qŰÝÔ_T{"˛IŠ™Ü ¤ŠžX̕Ťö<áWůŃ)LŽ“šžk[Ę\9UĆÉeŐÓÄI݇™´ŠVô Ťţ”Ľće~((¨đcŽóËű„“ űˆ_éÇÎýNa~xh䨋Ľ˛ćd€žćŒŹ‘ÚżťB†ýýűýčsóćÍ3óŠŠrB?`Ȣâ(YQéG5ܑqǧţBş=őŮq×ońeŞó}şÚŁ+ľ3ŮĘ=ÓÇ6ʢŻÉęąÇ¤ś9‘ę>ś‚OÖś -˜VüIďďUÉ553ýcÁäÄýpOĚ€R۴ڏŤ!×%91×tŸóߥ†}‚.eŚ:‘#‘ÉlsdؘIGű[â&öJ_ jËŠŽč矎,\¸@†.UUU0üb B=]ŃXg,îW÷qÍ?!#Ađ')~Ë/­¤í´^rSë—wŹ•§“GK2ňńüv_™Ÿ X¤­Wtۇ˦JU,†s‚=éPr˝¤ňImöƒ%¸g'ź÷ŒŘMĘxn§J*G])-{ţKJ_…ƒ<(k×>+[śl‘ĆĆ&SÚ{üřńrěąÇ˜Š'ŸŰŘŘ(Ď>űœźőֳ쌞4DÔß<ńą2zôhé‰úúzyîšçÍu$›k͝;GN8aAęŢţďŻżž^^}ő5Ůłg´ľľKMMľL:5uÇˤI“ žűöŰŰÍóíŘąCZ[ŰRƒŽ•2yňdóÎŚN"=u(÷”í׿ž)utî=ďyˇĚ™3ťŕ9ú߲˙űż_¤žłĆpŰWźWŚOŸ–÷şQúFŽ)łgĎ2ź\˝Cdž2‚? ĎőfȧŻ+ǜ>9.Փ*D:\‘¤cŁzśâOę ç$ýv_N‡'ŽVţIz~őŸÔśáUíré֕rëg„7Ť˘çŚ+ýDŤü˜pPj}Ž;LŽ‹ô+ ‰ rěŠëˇóŽßjLďĹ´“ôÁ,KpŽ„łp%űŰĐő˛ŞůâTÎŻíM9˝ůęľ4hrÇwJGG"ÜÖŢîĘöíď˜éÍ77ÉĹ_d6ĹÚźů-šçž{%‘Hflßż˙€™^~ůU9ďźsL¨¨;ôş÷Ţ{_Ć˝ęgěÜšËL/żüŠ “hŔh $“IšëŽ{L()JĂ.Ż˝öş ß,]zŞœrʢœçŻ[÷Ź<ńÄƌmÍÍ-ć;ĐéôÓOË{n_ÝS1ô˝wüٲekFč§ť4ŐÚZ'ťvՙĎűŔŽ”aÆ ]!řJB44PՀjăžĚ?q˜ińĺĆ=ż•V,¸?Iˇô2A7uŒ­ö“đ8vůě˛ő˛˘eĄě)‘;ܓc[4tĄ7ÎŻ6„|°OŇ/‘:V+ü¸Áý%ý™tżëEŚ ’¤3A6$YŰüuObľgKňƒ?…Dƒ<}âŇJ?üă&<ŁU~N:éDSŚĽĽEžţŮąc§lÚ´YVŹxXŢőŽó‹şfSSSú)//“%K›Ş.ąX̉VŻ~:uýVyđÁ‡dҤ‰2f̘˘ŽŤ•~l觲˛Â\W+átttȆ o˜0ˆ†Šîžű^šęŞĘ@xěąÇÀÍ̙3dÁ‚㼺şÚTŮy晵Š÷]/+W>%cǎ•YłffœŤú6ŹV-:١oß>sŽVbŇskjjdţücĽX‡rOĹňC= WŻźňŞ™ëρV*¤śśF.şčÂp]×ď_żc xŐ×7ČC="—]v‰Đ‚?`Č3Źg=ۗOđ$^.âľ§ţâ>ŽĄĎ´ÎŇxŠ ㈟˘q\żâŚv<-΀üę?ĺŽ+WmTţsúĽ‘pOPĺÇKŻű 'ă˜anš‘ď˜`OjЧNŒĽ>OďFď%îa¤`ż ˙$üuNJ-ČRǘ‘DćÁóřA /]Y¨ęX5|ŹÄź&ěž|r• čhŔč’KŢ#G9=ܧ­łnżýŮśímSfáÂ2qâÄ.ŻůĆĂJ?çŸžĚ›77Ü7nÜ8™0a‚üîwż7ߋśžZśět)†‘lĽ­ę˝ UWWÉ3ĎŹ3a´ŠŃĄ´Ĺę‰ÖÖVyĺ•×Ěň̙32B)pŇPÍ/yŁiłĽ-Т!­Ęłrĺ*łŹ-¸>ôĄ„Ől´5šVӹ馛ĽŠŠŮ§ď´˜VW‡rOĹĐwźsçNó}k°çÔS—ä˝­X¤ôgL+7˘íÚr}Z!ęć›o‘şşÝć‰D˘$ZťJ[LžŽ3>ćʤâľyâľ{&ü㾼ŚVW\k(˜t8ז`śéB7~hAůŰrÔţ­â&%59&ôŁá]‚u'˝l›ď ÷Ť…Ar;’ćÜö¤¸­ 3%[u95ľ“Ţ“gŤ˙˜)űxYó üű! GÚăGIočëďŹ clÜčW.ŇŔG4ôŁ´2Ëňĺg†ëڞŤŘëZSŚŃi˙äɓ̵ýcۤXöPăƍÍ@ŠVÁŃj6ÝĽá 9i ¤ššYşkϞ˝ćę¸ăćwÚŻ•zf̘‘óţô3mŹĹ‹OéÔÂŞśś6lĹĽ­ż´ S_ßS1´ýۑGi–5ř“Ż ™Ç´jţźg˙œu‡ţÜhČˊţʐżB rňDÇAždĐâËÉ Żč_ü›*;AŐIŠßâ+˜Lč'釀bŠů‡w?*_Žůhşşm˝ĺfVů‰n›íTK"ľ!žş~L<1GRťLZ[?Ň´řŠëÇޔß,¨úăjŠ#˜§Ö“Šýz=˙˝ KYçЏ륻‹ľ•Í’ŞÄł2˜mÝş- jsĚŃ9ŃöO´Ńɖ-[¤ŃPŽś Ój5QÚŞÉśzŇPą.şč]&ĒŻÂ‹śü˛ŠŠ†ĽŸűîťß„j”L/^”ˇ‚M.ZAçă˙¨YÖ N.ZĄ&×ýéwauÔźœç}ôQň裏‡Çç;ގîŠú}čώVóŃŕ’śüš1ăČNÇŮ6_Zŧ˘˘B…ţü(­Œ”ď™ˆ"řŒ†jňUŃčOsâ2rLĽŠěăÄńj:OŘĘ;Ž *đźżůiy|äńŇâT¤+˙xś“错 ŽăůšžrmďeC?IżÚ B?ŽBň‚R=a‹/úq#Á3I¸œţńCAAU g´ v--é6IÚň)ŸÚښČ9-EU†šôŇ÷ČłĎ>'k׎“‡~4cŸ†D–,9Ĺ´Ž˛-ż•VŔyţůͲu …]˛˝ţúúŒĐOԋ/žTtđ§ ŽÜ˙&ŁĎĘ)'gě×÷Şş 7é~ ţŘăűňžŠĄ˙ŽkŸŮłgËúőL 2 zEž^yĹdéw=w˝\!úŒ?řÁő9÷é5N;m‰Œ3F(Fďüm@éëŞ âRYîˆ×î“gB@&d&O\łÍ3űÝvŸ9ÎNzœśk÷Ű}9ŚâŽ_őgD˛Y>°íQq“~Ľ3érŇÉZ÷ˇĹÄIćšĐNťçOI­âӖˇ5‘š"ó–čzÂ?&5%Ž´§.ÜŽ×ńźŒÉV˙ńĂ?^ŘţË.kŰŻÔ‘Ţ4•KÚŰŰÍ\ńx<ďqŃ O[[›cűöwäľ×^—ÖÖÎÇkĐDŤóhE ŢPWW'wß} ĄŒ=JÎ:ëŒn_(DŁ!–Ţđŕƒ™vbjůňłdÔ¨Qűí{í*Te÷ŰďŽ/™ Gi˜ČV^RZhýúőfY+iŐ˘CőĆĺ‘G“úúz Tü‡­aŽ'ÓG;"手8IżĹ—‰FGŤęˆßQËTúąUܠڎVáqýP€Ł…ULĺSZ'ľîď?Żő%šŻédŮ^96Źňc.áF*˙ëČiO}ˆ‰ŕh °Ôç'SS™çH\ƒAúa1G˘Y˙zžiŐĽU{lUŸŽČ\ƒD /{’tHüđO" vZŠEé÷’L&ó†´˝—UYŮuŕI[1Ý~űćşÄYśět™:uŠ íÜšKž|rĽěÚĽa{墋Ţ%G5OzJ[^ÝvŰĽ˝˝CjjŞĺňË/+Ş"QÔřńůŰśM˜0AՊ›”Z´č$9î¸ůŽŃ÷ÚÜܒńŽsąűíwח÷ÔÓ§O3mĘ´Ü+ŻźšşŚ_=HŤű´ľů!ĽîTNҖfýč5Ű4„ľaòjŐS&°ôűß˙A>üáŤz%LÚ¨ř['J›Ä“Ž_Ń'œüj>VýI†ŐlU ió"‚ü*@~ľŸ Šö“ÚžđŻUޑm} w•×ÉXŻOýŁĂKWűŃŠM§ÔA­žkćíŠ{nOD&×ßnó§Č5‚–_íYŐ:źÎa ?ôS\ĺ›RV]LŞlÓÔÔ9§Zşň裏™ĐOUUĽź˙ýď“Ůłg™`‹rŚM›*W^y… vŘc5tÔZéçÖ[o3U…4ôŁ×íN‹/kŢźš2aBçđśżŇ–R=ĽA3­ŞóňËŻ˜ő… ˜T.6źŇÔÔTđšv1ßĂĄŢSwŮ`ĎţýĚwŁl¸hذZ™1ăHé ŠE§aÆÉI'(\pžŮßĐĐ(Ď?˙‚Đ*ţ€~ĄížźŞ$3ąŁCĆ×h›ŽÔ˝Ĺ]‘xęţbž_áÇĚĹLŽř›Ě\oßóŤő˜šë™ ?şS+ű˜ƒ’ŽxAĺ *ţhËŻ…ÉÍňwţCvÖŽŘâ”ý?i/Ÿn é”tôÖ)‡Ň"lěŘąá˛Vŕ>|xÎăvîÜićZŃĽŤj: ÚłgŻYž3gŽÔÔÔt:FŻqĚ1GËęŐk¤ĽĽUęęvËäɓ¤;víÚe*ýh5ú3fŒô„V:zßű.—'Ÿ\%7n4íŠ&Mš$gœqşŒ7NzB˙=~ŕađ儎7í´ňŃĎŮąc§Š˜Ł­Çr{tűÁƒőáń}}OÝĽUƒô;ŐĎyóÍM2zô谕رÇÓkíě4¨őČ#šŸ­.@Wţ€’Ń_á Ô§Č ‰vńڃś^qĎLš&hŁĽ-ś4é†~Äśűr‚>]6ř#ţzRC>âˇúJŚ×'RuˆŰÖ$ťŞGúíÄňhíŘ!ń˛iÚč+59’ ü8&üŁĄŸXúq"ŃĎüĎĎůĄŸ m—xmż:"mżrUţąóJˇNúZo%ň9ňČéáϓ†Ać̙Ýé˜={öČŢ˝ű‚㝎آĄŤĐýG÷EĎ)†dnżÝoďĽU‹4´ÓÓЏĽ‰Î=÷l3*}Ÿ÷ß˙€Ź_żÁŹkŔć쳗žíąĺŠíľeÂ?r–_Á<áIyj~ĚöFyiúˆÜ7ď5H{űŤâVĚOâ˜döŃđś(‹ÉlŤ//řgú6źŒ–_ ćńŰ~ud‡ÜÎížjÜ R.͒O,V¸E—›ç˝ ë\vŮ%rçwI"‘”uëž3S”VŁ9˙üs3śiŐŰLCC{öě5×R'Ÿ|’ éuęëdŊ‡s~ö1Ç-gufĆ64R;wîĚţh(Ȇ~ÔSO=-ůL:ĹTęOZ1Él”ž“ťďž7ďńzzŸ–>Ť†xV­ZmB>?ţd§s–,9ĽSfßžýá{Ń@•VbŇÖe˝qOÝĽŁc=FÖŹńŤiő§\-äşŇÔÔ,ˇŢz[ÁĎŃĐZ‡ťƒÁ0č$;’ŻČ˙ǘފriiíÜhxkBŚ6´™J?˘w4řŁË&ôăúl ČńlÂ& ˙„ĺu‚ę:&řc?bR7ڐ ţۓ~şŒyBdÚÎ&Ů<žFŤs?C˘ĺQI–k*ţÄLřÇIÝfúńœŕśźđx/˜lč'ţIxéPvŐťmű5!šJ ŠŞ¨(¸?‘(ŕš>}šŠóěłĎÉÖ­ŰLř¤"ő cÌ1Uć͛Vą´âŒ†PôœÉ“'›pP”VŻŃó^~ůŮśímÓŞJżűÚÚZ™2eŠi6eʝîEŤ=řŕ ӆlÁ‚ă3ö™ŸÖ÷§Ď?mÚ4ó^wíÚe0ľľ52a¨ŇĘIŮ´•–ž˙íŰˇË ',C?˝uOÝĽÁ$üŃ0“V„ę ĺĺeŚ:”V¤Ňve'NŠáôÂqNŽĺBs'Ďşb‘šâÁśxÖ¤űô×ĺcíí…˙– MŤœč_Şëd—ľ=MKKł¸Žgţ2ž'rýE}ö6ťÝn—wěŘićŤořź ŤŠ”|:R÷Zˇwżš×¨Ľ›÷Ë؎DXÝGŰ|ůÂ0‰łÝlŤŻŒ´˝Çďůĺůű˘ÁÝnZ{šţÜ´ţŇ>[Ž_íGězBd÷đ2Ys„üĎPóçâTăWü'čBćdŢZř~:‡lşdXń§sř'ťőWmâu9Ú˝9ď=Ĺb1™4~´ÄcůĂ Í­rÚ§`–m#ŹqÂj™źtrTprœb˙¨ 04č/iĹĺęęÓ>[ÇGôOtn—@﨨(_*ţßňÔódÖäs72y‘yö$yÖ Íł—łuů[°Tü%I2ňUôhln)ü)O ŠL7V44H[kť¸ŠëLŢ×"cęŰčĹĉ{~‹Ż„“H R5âĹŇ-žlşF=?$ţ^?eÖ5ĐŁaׯţŁĚó‚eŇ?zZÇ͜Ű” u­R7Ą*ç3Ä[˛ŠŰŹ2­žb‘V_â9™ÁŸ Ő—çŮ ’ç˙éTC? ˙Ř)ľ-#řăjX¨Ufx÷弗Xę]TUVȨ‘Ă †~ěw“A€ŢEđ :őÍ-2ÉU°&aY<&ăFLo˜,ňÂ|))]šVđˆK˙Ň;š =ĽáنŚV@˙ˆ Ŕ ӑHJCĘ2 M-ґL úÁ0(íŤoĘŰ ýOۋíŻoô‚?`@9ŽÓŁcɤě=Řč÷—€ÓĐO"évÚŢÓď]#ř­Ööijm ŹĆ–Viiëô/‚?`Pkik—–v Púg hřŞ•ĐŔ€ řJJOÚ>%“IÓfĘu ˙ôĎó‚÷ž”@ď(€~˘ ŒôŐńnęؖÖsNY,&ńÔ+KÍ š’dę}ş 75wMŔJż—Ęňîý1˛ťaÂA]#ř rbů˙ŁűýöSíŇŚóÔ¤aô\Y<&UĺfŞŹŹ0óźâţ>‚;}V_`PĐ I,ć‡IœĘAiŠUřßM<#üĐÇţ€Wl@¤ŹĚŻôSV=BPšĘkFšy</ęxÂA=Gđ”œh$ş\YYićľg J“ýnŞŞŞÂmůžO‚?`Đ¨ŽŽ6ó1ӏŐ‰ ÔÄdôôŁÍR4ř€žAđôŤCŠř˘íŁŞŤŤdňô™R6nŽ ´”O˜#“§Í’ššę˘[}ĺBU €âü%!;쑯=Ԉ#dܸqR1ő„ÔŸdĘĽÁ‰—§ž“…2~ü8ó…Ű ´ů"ŕphţ€AE+ÉLž}z§ď}‹_%E#žçĺ]Ď>vÖŹ™R[[#ëÖ='űbžZ߲B’ɤÄS“CčĐĽ^Gę]v4{ňÎŢ™šüqËŞeěŘ1rŇI eâĉƒ>ÝŠä€âü˘P §ťçiđäźóΑի×ČśmoKeyę85ŐRQ^.U•UŇ֑0S{{"\nëH†ËKŢ˙ˇ˘é–QŁFĺüźĄ ×ťŢż˙€yžńŰîĎů^ěűjjëČŘ~dYľLš4QÎ8ătŠŹŹětݞž3AÝCđ”źBU€ěrEE…Ě›7WŚOŸ&Żn} ľ'QÔľËĘ*ƒëĆtđ$׳ĹbúîD\G˙HXüűZślŠTUU…ĄŸB-žóô‚?`ŔäŤú“k{WáU^^–ÚV)Ɋ"í­RŒęŃăĺÜsϖŠŠr3fL—Ç– K1ՔöíŰ'íí˛îˇOýžjÌ7}×]…|r˝Ť|@÷Ĺ ő$RSScć#Ś}ΤŮ'˜ĎŇsuŢŐ4Xó,ŐŐŐfŢ1bzŃם8ë3Ż­­•î"ÜĐťţ€A#WE™č6 ďTVVHĹäŁ%Y=śËë Ÿ0M㜰ŘTŻŃLOŚîŇ÷ĽĎ^>é¨n˝/}ÇŃ÷•ëó ůô=‚?`@ ˆäÚ×՜ѣGˌ3¤eŇbqk'H>Ă&L—™‹/N;Ó´řꏠM_ëÉ3čłĎœ9Sš'žŇĺűšľÄ_úŽŁŸ™ë>ŠŮVĚ>äW&h(Ăó<(š>żĐśX,&Ç7_öďß/;*Ť¤ěŔVIîŢ,‰ú}RV–”xĺp;qŽŒ8bśqÄd9öŘcz-xŇß–Ţř^ô}͟ŹěۡϟŻřmO˝ŻxCç÷5eĘćXűœ˝ú@~ŒŤ€Žü9e‡kúrĄ'á˘|áë´ÓN•çž{^vď.2m~§óǍ+'ž¸°Ëç*ĺÁ•îÜ[Ą÷Ť×ąďkϞ"Ó;żŻńăDžď+ßçöä]1xĐmŐ@ąţ€’P(ü“o_Ąí˛xń)˛sç.Ůž}ť466š}Æ “)SŚČ¤IĺpŇŐŕžŻ%K|_=i×E‹/€žCđ”ÎĐĺiűU(äŁň훻ż –ge  ?kÓ1ˇx<Öi̍qPÁPPöŔB<^–ˆč––Š­­•žÖ“0Oö=j8Ś”WŠšˇ|~ŚşŚcm:Ž˘coQŒ­€Žü]Ňß2ŇđˆÎăń¸ůíŁƒëű%řcuˇúOöš‡łz~ڊŁcmJÇŢlŤŻžŽś †ţÄrĘî#n×uŔA§D"!mmmҟčm>8đ=OÇŘtŹÍŽťĺ—ȅŕ((×@CYY™™ďۡ_ƒĽ‰ď űtŒ-:ćf1ÖŠAŤ/ĐIŽśZъ?:Ąż…¤-żš›[¤ŚŚZ‚řči °žÔWƒ2‡Ół u:śŚclÚâKÇÜrUüąƒšPńäd°Ëv*//7óÝťw‹ëş2˘÷Őߟ—oŠŸď>Đ}:ŚŚckŃąśě1Ć_@Wţ€.ĺ —ŘßBŇĺ={öHŠ8Ô LŠkEo?Ă`|ĽNÇÔl‹/kc ô­ž@NśÝ—ŰmśÝ—nÓßDrݤ´´´ĘÁƒő2rä)E ’tĆ;8:–Ścjeeń°ÚOŽ6_ŃĘ?šPńtŠPĺ˜ňň óIŚŚ&ŸŽĄéXšŽŠéŘÚ`Ž< @^…ŞţčŔ„ĺWţqeϞ˝f˝śśVdŇЏŽĄůżPWnĆŘ´ŇO´Ő—EľP *ţ€˘äú#[~Ř˙í$ż$ą\ůB?Ńńśě  ÁP”bÂ?şŽŰUeeĽ$ 3éÇŽ]ťĚÇčŃŁ¤şşš`Rt\ŹĽĽEöď?`~!Néx˜VÉś•˛ŁAŸî„~ň!řrĘŽú“˝-WřÇśłËśtąôXżŸů^ł_÷ŐÖ֚*@ś§9 těKÇşô—Ţ´şOSS“Sś­—Žwé˜÷˛ŰírwB?Œ›€|ţ€źŠ ˙Ře´ĐÁťn?ě †Žëo:é`ˆ.ëüŕÁƒŠI:}FôŃ9Пlŕ&{ž˝_ŮPţ’[4ŕ ůDçöüč5ý€î"ř ę*üxˆlő˛ë:čĄt›üÖ`žŘ°a!{B 7tŽÉ󡙚u[áÇ›řÉľž}]B? 'ţ€.ĺ âä ˙؁ ö‰ś˙Šnł"–Ýý ‚=(šĆżr…v˘ŸěcŁ­˝ UĘľÁP´ěę?ف ť?:¸m˙=߯ô#9ƒ>Ńmö8` Řq.U¨ROŽö]Ů! |çFúÝAđtKwZ);°­čŁ“­ö űä Eۇý)_H§PťŽěŠ@ĹVůɡ  ‚? ŰňľţŠnË7p‘ôÉu­č~` eˇö˛Űrí'đúÁĐcůŞ˙¨ěÎľmWt˝P›ŻěÁŽB! Bč‰B›|űŠiŮmVěőz‚ŕ8$ů*öäڞÝö+×ŕHŽ0Pt?Đß …|˘ŰťS͇ń.Đţ€^‘ŤúÝޞC<ŮŰsUú)vđƒŠ?č‰C ßäk啽żťűşƒŕč5ůŞ˙ڗo€$;TĚç˝­Ť€Ožăťť 'ţ€^—ŻúÝŐŐq] †Pí‡âPĂ8˝č)‚? OŞţ“ë8ŤĐń„|ĐŰ UŻÎĽť? /ü}ŞŘPĄcü ?Ůń¨\ĄÝWL˜‡Ŕč@żČ*6ĐĂ JIö¸VtüŠą,Пţ€’Fľ $‚< ”üý"_Żôb*ţŔ@ČżŠnĎľŹ ľ čm@ŸĘ50’/ČŁƒ!ŽëJwŽôś\më­X,–ą=&ö!úÁĐ'Š üčzŽmĹ^ŻĐv š‚9:ć”/°“ý‹kz\vPˆč/@Ż+úą#şžL&Íş.GˇGJ­ôc<şŽË:ÇăŰs‡ …‰zŠŕč5]~tҰO"‘ˇGçŃóó-űš@Wş âäŞÜcˇŰ_\łÇ蟏ŹĚ„€4ü“Š^ƒč-@ŻČײK@4裁ěvŠŹŹňňňÔ ˆ†8 x`Pđ+X디ŽŽikk7c_ííífŒKÇžtŇ Pžca 7ü‡$_•[ÝG>tŽt0cذZЍ¨<€ÁĆ÷č3żŘVSScĆĂ4řÓÔÔl~ÎNşßV˘účm@ĺŞňŁ:×ŔNşŽżŮ4|ř03Č E슪Ş2“Ž‹544†ż§ăb:iČ'Wˆđč)‚? Űr~ě¤AŸśś6óŰLş>räČÔ`GĽ‡ ůŒ3ZZ[ŰäŕÁƒauěĘJœLƒ>vRT˙=EđtK4ôc—m•źĐЏÎő7›´Ę-˝p¸Ň_ˆŤ¨gŞ˙´śśšq4 ˙hë/[ýGE@„@wüEËýD'-[ŹĄ]6ŹVjkk8Üi¸gäČRV—ĆĆ&iii1á­ ¤A ô!üz‚ŕčRĄÖ^ŃЏThkŻęę*Śż(‹ĹMë/KSţ‰˘őč.‚?  ŽB?‰DBÚŰŰ ý]°cgţŃ15 ö”•eţu]4ěCőĐ‚? ŻŽB?ÉdŇ Pč|řđa„~€.čšë&ĽĄĄ1 ˙ÄăńŒc˙€bü9uúŃ ?ÚâK+ţTTT˜RĹşŚcimmí&ř‹ĹL°GçQ„@1bP„ěЏVůŃŕ.5ROÇÔě/×éX›.GÇŕŠAđt’=° ƒŃ}:Ů_cÌîôŰH Ó15[Ó16kËüDÇäa  KŠým#mďĽSYY™TUU €îÓą5cłămTüÝEđ”ŤÚ–Ö9-ž€CŁclŃ1ˇBU˛ü]ŇÁŰc\KëÇĽ˘˘BôœŽąéX›w‹ŽĹt…ŕČ+Wq[rxĈáŕĐéX[tě-ŠŞ? 2čB´ˇ¸>¤śHeeĽnŰoY9Ž#(}ţX›?öŚ€ěXă; +@N6äí+Žż]¤S<^&ąŘĐ*8K'óL  <kÓ17mőĽăoş ˙ůĐę ä”ŃuxP5552˜E+EƒM‡#Ţ@i°cn:—kl ‚?  Ńß4ňƒ?ÚćŤB‚-ÝĂűčţ˜›VýalƒV_ “č€Bö˛ëzÇĽÔ1(Ň{˘ď’’Ň}CÇÜtě­ĐŘc3 ÁWvxFÓHińR5PŸúÜţěąĎÉ @ď˛cnv Î"đ !řň˛!ě˛ÂĽ8ĐЛÁ›ÁT-¨'÷Úß €Ţgąăqşŕ(„ŕč’ yŘŢâĽäPďçpl –ë™{:xD ÷čX‹­řC+{P ‚? Jg°Ą§ ˜ä–ý^şä!Đ[żĹ#řî†wz#ě3XC‡Zɧť× ô4@˙!ř:Ér)•ŕKwîc BĽŚĐ3Đén5Ş˙šRŸĽ…ŕ(h(~÷Á’îś÷ęIˆđ@Ď1žşBđ”źŢ ňŽU€Š *ś˝Ww@ Nô‚? ¤őFč‡ @🭘pOĄăŠ őţč@É:Ô >]ÝﺎYˇS1×)ľ PžpMööX,nˇË…Î/Tá§Řę?„zÁP’ú*ôŁŰ5ä“H$$™LšeŠ˝îPŔ‰Çăf^VVf–uęnȧ˜`á€ŢEđ Jݭ£ណŽ3Eƒ>ţŃĐö}Žź˝7)›RߢŐ$8ΓĆVGZěő]^Éţ›gąá–\ˇĄÇdn×ÇĚ _3˙5:_3sŸ^wâHĎ,ÇăţýŽ3ážQľq9ꈘŠúS^^nޅŇuÝ_QQ†‚2î:O€‡đ@˙"řr*śÝU|vąűsmˇŸööv3éňË[ÚdÝfWÖmJĘĆ:GęęăAx&zžc&GbŠ­^¸Íqb‘cŹšdďe-)'3ěă‡wěu˘gDˇyćŘX̉ëŮ]ŃSsÜC,˜'/5wá1ł'$ĽśRdůą1™7ɑӎŽ2Őô]i (WčPÂ?(,×Řc. ‚?  ţn{ՓĐOžmôimm•ŚŚ&Ů˝żEnyZäžEvŒĹĉĹÄÓĘ>Nf(Çů8Š}şÍ_śş˛áĐ%ýšň;^äŢěyt"ű<=:î‘ČR:ü“Ţ>ŞVŇ{7ç{ć'ZţÇq"Ÿăű‚+‡Á٘yž7ëü÷ńâV1Ď:idł,\ŞŤŤM(:Ŕ”ŻőWWQ Tg¨ˇ¤‡Žŕ(˝úŃ*?---rđŕAŮľŻEn]#ňű5Ž4ľéŢHő[idžPĚŽ ÎŽăŚ–ÓÇF>ág†ŽěăzŽd|Š ŕ䨔ŔxöŕŒđ‘ëenr˘ŸĺřϋśűŠ„~ĚDĘ9x°^~żĆ“Ÿ?ށ'ŹŠă˜@M´J—q=ÓÜ+ľĎ *éřŐ}\ł=Ý­+ŘěOoO‡~üČMpýŒóěgšAÎČ˙L:ŠŢăddě1ÁgŚ+ůĎ•<żR­>ä¤>}m‘Ě•Hţ)]Éȑ?˝äȓ<ůŘmňţ%u2bÄp;vlŻ„phţ€’P¨ÚO1Ą]O$RWW'uű›ĺúSąĆ‰Tń1g8‘*<âÇsLHŇ­˛lń{]ŕ1ŰS˙ˆŮЏDÂ<žmćE:áL2;vy‘"CÁAÁ‡Úű n58.ŤX¨ą÷Î$ĽË˙„÷"éű•ČĽźČ}¤‹EڙIşŐXcŤČő:ňüVO>s~ƒĚhk“‰'Jyyy§Ö_Ý ˙ 84Ŕ “/ôł}űvŮś')_˝%&oî6{L¨ĹžH°qLzÇVÚńœt•hʼnŹŰcm˙`ąÝ‚J=şÓMďK_%łBxéę?âDö算ň‘hÉI}lu Čýf|¸}.IW' ΍…Á t5$ ‚D^:&žÝţäG6îůÁGÚRď{ťL:UĘĘĘş ˙ oÄ`€uˇÚOö~mďľcÇŮşťC>÷kOŢŹóÂJ=6Ŕ“žŽiš•Ţ şHôřhĹť´łÇfV’tuĄČš~˙­Č9Ńí’ůYŽ#a/˛lˇ‡Ň÷jďÉÍ¸Ś ň„ĎŠTäEŽéW*Šœ—€˛÷˝ó€—zÇ"oďMš •žű\AŹBëĹî@a@É*ŚĹ—뺲k×.ŮWßn);HX‰Ç‹ü/ ú˜ŕ‹g“9aÇîwlH&R÷Ć6 s"ËюŤa›HK.ÜąŠŁ`łTúqěuÜŸĆ|‚cƒĹŒçńˇe€"ÍĚ2 CD‘€Ot=ňNl›2˙QÜôőHë3I‡ö7$dçΝć;č €ŢGđ ¨îBrU’9pŕ€47ˇČţɕ]ƒĐKX˝F2Şţˆ=߉FeŇŰ'ű +î8ŃĎL/Gs=ÁÍG¸ţr¤Oşĺ–ßzĚVęq"ĄœŒŚ_ö|‰†}źNŸeď#R(ă^Ç ŤIVŕ'|'Ýę+Ú.Ě îĂɸ/üź<ůÚ­ž´´´ĘŢ˝{ťUĺ'Ą €ž!řJR1íŁš››ĽžžAî}>)z)ŤęçĽŤëmŇ-šŇÁ ŞâřAt•›t{ŽĚę:é–Zéc‘#auŸĚJ<´ńęŕńźH•ń2ď)r}/ …÷gŤŮö^Á˝Úę=éJ<éë9Yľ˘ ôľl°)ö‘Ě–dşüÜO~żÚ“ŚŚćÔÔtH-żĐ}Ŕ€éiDĎK&“ŇĐĐ [wˇË/ŸôˇgW÷ń$Ěℕ|$Źüă…ëŃŞ;Nä32‚;’YáÇŕDŰhIŘ*K:mwƒNpmq;…}2[~IFUťŐ‰9éĘBŃŞ?śj“%9‚Cé+y^v#/ň,ţý†×‘tä)ýŢŇďúO¸ć;Ж~'‡ň {ţ€’SLĽ ý´śśÉ/žđL‹/ ‚*ačʼn6ô Ť×Ř6_aŰŻaĎ Ú~ĽĎ‹Vń [ƒEî-lßĚ=‰VňďĎoż,†'réëx%űY™| EŽ›JW ň"-ÇlŸhĺŁđźđ9Ňű;ݛc?=}_Mí~ř§­­Í|'٨úĐwţ€AĹVűiii•-umň§mHĆěőC/A@Ćoe•>׆gÂę?A„IŸë„ťźŒj܌Ę:6DdźtŘ'ŹŚ“ľn[t…mżlŰŽtů‰V'˛Ç§?6t˛Ç‡ĄĄčšy/zßÁ)öYlČ ď1L(eT/˛÷a[”éü—ó]čw’H$÷ô‚?`@ä ‡S!ŚššY\ו{žK˜uÓęĘIˇŔ C+ž ŮDB+’ŮΈ^Âv_şědgŇ­Ŕl,Ć ?/ŁŇn÷"-ĜHUĎßçD‚8ş_÷Ĺ ďS籰⎽O7 y‘ëŚŸŮ ?׉>Kć‹ Ş ۝H5¤X$ˆ¤á °UZ4­¨ä„ײU…î}>˛ZDzđÚ€ÜĘ`°Á —hkŠ^śŰÝ ěcւâ?žIÓd´ÇʸŽVťńs>žŒŹ‰Éˆšxf`Ƥ‚<É(䟞>ÂÇń/(śÉXĆURű\7¨9ž’ů™ĽîVÜŹŕRö­xÎÍŢ{°Ĺ•ƒMnć=;ţąž áD›–íżĚ; Ö5Gžz?\çČľçśISSł ><Ŕ@_!ř•ŽŽI&]yőívŮÝ Ĺ mĹËфៈt1a'ťL[&?üÔTYzĚ09œŹz­Q>ű_Űäí=‰đĽyŮŠ&‰´“tEĽôűöƒUMí"k6śÉň5&”UYY)č[´ú%ŁPK(ťŹĄmóőÜfmóĺE& Ă(škßx×ÓĂ\ ­¸IšýŤłťĐŇgţáľSSď3™nQfDچ…ĄŸč{vĹŸ’ąýÉőŽi÷ŐÚÚ×ůűˡ€î#řúÝĄ„>ÚŰŰÍůk7%Â_ž—ţÉ ŞD-ÁgÁ•Ô™2zšL_!‡ŤĽÇ—㎏đCPŇ9œcżŤtŰ.7zD°Ď?vý; ĘJ$ŇSĽjhh›ožEyäQ(´úƒ††B4T˘ížvHWŸą-ťLĹ ‚@aˇ*'ÝĚVŻŃšŤçš2˘š?Źó.DâŮџôRF ǓtG0'Üö֞¸ f•——‡-ÁŇ-ˇÜ*ßűŢżĺÝ_QQ!cǎ‘ŮłgÉůçŸ'^xÄăńœÇţíßţ<÷Üófů+_ů’\qĹ{Ĺůú×˙Iîžű^6ŹV}t…€ŢCĹP’ňľ‰J$’&řóöÁrłŽŮ­VŁ•fĚąA…Ÿô9nXČn Ă?&ěâĘáÎą‚6iN¸œƒ}ŻNş-˜}Ż-‰˜hę0ëá÷QÂíž4¤´cÇNyňÉUň˙řMůó?˙ ŠŤŤËyěöíŰĂĺmŰŢÎاՀ-:ÍL?ůÉ Đ_řwPŠ $“I3ߞל’ň‚J>AI[‰Fü@fWÜÔz,š~X ČóĎ)ŃÖRýÉ3ďŃ ŢGę˙LE$/]Đ'ZÝ'ĽˇW**íŘçĘäqžůŽňUĎW_ý!™;wNĆ6 ˝óÎ;ňŕƒÉöíďČŤŻž&_ř—ĺżřßÔĎLf>ţk_ű{ůńo‰'Č5×\-Ľ€ŕ4´Í—xvА†y2:NĽ;O‰çř•k´­W§6APh`›Q•†ŒWă¤g¨rM+5ń[¨I$(eNrý U˛Ňůś˝r’řߕśŇꉾhvĘ)'Ëg,ËšďÚk?)Ÿ˙üä駟1áŸÇB–/?+㘼KO3@)ĄŐčW‡ŇŢɞŰÚÚ&6´Vď‰Vđńź°âOXŠ&\JţŘM´ú2ďŐLŃ÷hÖÜČŤ ö…ď. ÷ĽŚ}őí­žŇç–. (}ĺ+_×50Pń”œhP$şŹíŁtýí˝Š™ۆʓ°2=3Źă•k´­•ĐâËň+&ŮđŽ}AĎŻ`›žMÇËčű%aŕĘq‚Sńç2gÎl)Öol4×YťvěÚU'eee2uę9őÔ%ňÁ^)'NĚy^ô˝ýď˙Ţ /÷ß˙€yöůő}/_~Ś\s͇eĈŔPAđ :ž­&ăy‘TO:Čc‚%^¤—­NăFŽ÷¤2(ß˙Ýky˙I22~ŕ&U˛œčşîÚGMí=nćHšpńŇ5/])ź˜ż=¸™t;ľ`݋Ź:śVPę-~ľŸRŻň“m˙ţý&ôٞƒ4˝áĚ3—…ÁŸ§žZ-W\ńŢNÇŹ^ýt¸Ź!šúúúœ!{Ü1ÇÝé^x`…|űŰß‘ŚŚćŒíuuťÍ¤Ą˝ýč&źTȗžôyä‘Çňî× Ţwžó=°‰ÚˇŻ]|đ!yěą'ä?řž㦛nN{}FĽ¨öövٰá 3ýîwż—ż˙űż“÷źçÝŻÓŃŃaÚś­\ůTĆö͛ß2Óý÷? ˙ő_?é^`°"ř\1!‘č1mmvŤ_•&ŢńēĚ,OĐę+hgĺ1•XWxßżecęăAx&u‡Ž§1šó|Š;uSłX:›cŽČJ˙ŘpŽëęsşrŐŮSŠ ţxámxČOŃv^a˛'¨äDߟ—^nępL`ɆşŞîS*€˘•{.¸ŕź˘ÎšôŇ÷ČŇĽ§ICCƒ|ęSeś-[śTŽťÎŻ>SYYťdÉbŠŞŞ’ÖÖÖÁŸ5ᲞżgžY'çž{vĆ1‚ٳǯH¤a˘¨UŤž’Ż}íÍšąXL.źđ9ăŒeŚÚĎž}űĺţű˙$?ţ¤ŠŹŁUƒŽżţ’Ď=÷Ü'ۡżcŞç\vŮ%&(Ł÷Ž×˛žűÝ C?şýĘ+ݐšsçHGGB^xáES)č+_ů™5k–ňŤ_ýZ~řĂ›ĺqăĆĘűŢwšuÔ7Üđ#9rd¸˙]ď:_.żü2ůËżüŒ<űěs’Vášá†˙1ËúŢ˙ýßż—Qĺčœs–›ŕѧ?ýW&źôÝď~O–.=Մ¨rYłf­šFôÝLš4Ń´Óv`/žř’šŸM›6ËŹY3€Á.&ƒˆ_IĆ Ă)~œč˙lľżÂßŇK˘ÇĽć1ÇÉ $/VžúSY…xNĽHźĘŸĘŞÄ1ËŐfŮ5˕fÝK-{ąJqĘüšż­2<Ös*RËĺâ8Ĺgźł[‡…ůńÂÖiţ;u3ŢŁ~öťłžRôůĎQ-:-c:óĚsĺ/ţâ/Mčçœs–ˍ7ţ\Ž˝ö“ŇWlEŰpi%J+ú.ľ˛Î…žËl{úé5ŽĄĽa–쀑Vđůíoo”˙říúą4ŒcŮ Q.&ŒO˝łĎć­Ćôűß˙ÁĚľ˛Đ?ýÓ×3B?–‚>űŮĎH!Vjoo—ÚÚůîwż•łľ™tţúŻýŠJţŃvfůh((;eďSC]–ś<`( řJVv5ŰŞ5Ą„ąű‚Ę3éƒü}Nf˜Ĺ?7}œg+…äţ‘̉§ţ/î÷ó2•zbâš6_1łěh5 X™Y÷ź˜ őxáöÔšz~,+/úɜhHĘ|\ťM$]c)ýţ°“îfśäůВ¨ŹTŔŞUŤM›(­‚ÓWÎ8ăt@QŃĘ=ŃőE‹N6“z睲mŰŰá1ZĄH[_Š\áĽa›ÓN;UňŃĘCÖţýűów≠Mĺ \:::dĺʧ‚ű=Ić̙÷:]ô.Ӟ+ :=üđ#fů‚ ΗqăĆ彎V˛U~´R>§žş$ď>}7֞={€Ą€V_ ¤ ˆřŐ~ží—e;bŮ*@bÚV•R% ؘÖcéű f^ĐRË ÂKŽ™ŃŕĎĂ?*Ď<łVn¸áÇrÔQó¤ˇi[°ů󏕗^zŮ|Ţu×}:ÜgŤűhčGŤůL:EŢ~{ť šL›6ŐěÓ*5şQgžšŹËĎkll”7ßÜdŽłk×.3_ľęŠpż>>ľľľy÷íŢ˝GZZZ̲„ )//7ĎŹďľóuvˁÍň°aĂ2BNšÔÔTKkkŤźő֖źÇč;ÎgÔ¨QárKKŤ0üýŚ7Â66Ŕ–™q2.śő— Ş86cŤÚ˜ĐŒ›uÜŔŠĽˆü€R°1r_^ôރ-~ČĆóOđŇďÄľÁîT2ŇŔ‘śěŠŰ–h†nÂďĚ n*ćˆăyávSČuüŰČžń˘Ő^/>%çž÷ž÷RÓ>ęk_űGihh4ó[nšŠWƒG–v4řł~ýSqgôčŃ&Ȳsç.łÉ˙ő^5¨łfÍ3ňţ÷żĎl[˝Úi“O>)çő7o~+uďˇĘʕŤLĹ l˝ńL{÷î —ÇßĺńcÇćăěٓžÎ7ţĆLĹ8pŕ@Ţ}ś˘‡ FĆŔ ˘U´R‰­z#y[vŮj?AëŞHPĹŻ äٔ 4/zA¨&w+2ϖř1kNx˙ţä„e‚ëţń¤sÄ^Ӊ„‘ü€Pşş-§dĂAšž‡ÁႠΓ}čfYĂ3ëÖ=+}ÁśčŇwˇf_GĂ=JĂIcǎ5˧ćˇŹŇűПyeŤć,]zŞŠ¤“íŽťî‘ŤŽşF~˙ű?˜Đ~w3gÎ0aŁŤŻţ|ík/?ůÉĽ7Ů{ëÉ1Ŝ›K[[›Ŕ cC1éVWfŤŮçˇÂĘŽTcö„Ű={bɄTźČ÷YYžüL>|xĆqšŞu— ')m!֕heŸ¨qăƅËűˇcÂI {¨řĽěŞ8~ŕ'Z-'͆glĽ ´„•RŤD+čd˜˘ ôqŃvMъF^F˜ŠřłąĄhKątč'R1ɆrTWĘőŢmťe555I_ąÁ[Učůç_0óÓOOjkkeÁ‚ăÍňsĎ=/k×úÇj+Ťe˖vşŚśÓЏúęWż,—\rq§Đjll”C5aÂxÓn̆ç ŰŢŢ./żüJŢë >Ě,kű3Đ}@ÉË”xžß"(]ÝFr´ÇJOŃíś:můU*´…V: ä?Ÿ˙LśRô9ÓÇfś* –ƒ}݉ţ„ďԑžĚ€Uö{ŽV`ętĺA˛5iҤ˘ĎsşYęH[oЎßŢ.Ď>űœěۡ_jkkä„dg>/źđbxo ž #FŒčtÍćććpyÌ’ĎŁ>&‡J+qĆéá˝˝úęky˝ýö;Lř'—x<.gŸ˝Ü,?ţř“ŤuttČţpťźńĆĆA0 7üƒŽ´đ‚j7‘śWŃcü=Áš×i›#š*× Źh Aƒ@Y{3*úxYGŇmşR'w+3/Ă ?ĂéžJż[/Ź–”ŽLäĎŹŠCĹ+… ǖ-[ĺ‡?ü‘YÖ`K´úNWŞŤŤM%UL+­“N:1Źtó›ßüÖ̗,Yl‚0Qśő—VĂąÁĘ6}ú´půá‡ÉyŒśűĹ/n”Ţđ\~ç_űÚ?ʞ={:óĘ+ŻĘO~rCÁë\uŐĽźź\ÚÚÚä‹_ü˛ěŢ˝ťÓ1ú×_˙ůÎwž—:ţš° 8?ţ„|ęS%gœqŽ,ZtZÎéĚ3ϕëŽűkY˝úiŔŕR&¨'ĄÜ' 9Ńĺ°k•ßĐ*ZąĆ-‘öTzOnF5Ł7Ľeľţ ĎwÂV\NË1×*2„ăżϤ{LE!{Ýđ=×÷oHź°Â­ ÔóĐOyć™urŕŔÁŒmzĎ”×^{]}ôń°2ÍG>r•Œ3FŠĽůó5‡zDćΝ#sćĚ6×_śěôœÇŸvÚŠňŔ+äąÇž0ŰN?˝sű.˝†śĂÚąc§™”m–MƒCG1ُn¸ádÓŚÍrÖYgʨQ#eďŢ}ňä“+eŊ‡eÌ#ÍžCĽŐ‰Žźň ůýď˙ [ˇn“|ŕjyßű.—yóć™ę<TşëŽ{Ěçëłęgç˘ďęşë>%˙ůŸ?’őë7Č?řašřâwËqÇ͗ęę*Ůžýšďž?…U…4ŕtůĺ—  8?ţńOĺç?˙U—Çi%Ů5k֚˙˙ů/˙ňZůřÇ?&ţ€A'wkĽt(&#*­˘´Ć2AW¤›šúŒm;ćßk$TSđ$/|SČ.‹ëÇuÜě6`¸Áç™đ„i)ĎIWIňěmŮcŃűCVĽÔ<-S1Ubôţľ’Íu×}Zşë3ŸůKůŤżúzŃę4JŰw=ňȃa5 ( ĺhđÇZşôԜ×Ő@śËRG9=ٞO”†‰ž˙ý1żŠ'˝vôúJĎýÖˇž!W_ýgŇžřĹż•d2)ˇÝöGŠŻoč4\UU%ßůΡL¨ŞkŽů°Ššôýď˙‡šÎoűťœÇuÔ<óŒ555čšVú)&ôĽc?ýé›_ř8ů䓼ŕtŇm°<‰”§1Ë&Ôcvy™˝ż‚ƒlu'–Úďz%Ńî+lŻeCIŮ}$k[˜ň2–ÍqŚ"O*2‡cޅ#aËŻ ‰ä~źŹkE×í~ąQĽŇ­ú“MĂ2#GސqăĆɢE'ËE˝KŽ9ćhé  ýŸ˙ůŠüěg?—^xQš›[¤śśVvíŞ“É“'u:^ƒ>ÚR,‘HČźyseüřń9ŻŤÇŮŕ†… ŃëÜzëÍňë_ß$O<ąŇT˙qS˙ŽL™r„œwŢ9ňá_e‚I˝EM_ůʗä /›ožE^}˝ěŮłW† Ť5ďóÚk?i* uüQZ=HŤ#ÝvŰíňÔSOËΝ;ĽąąÉ|?úœţyćsr…¨šýć7=k•Źăښz¨ęęędřđáć—N†˘b-Ű)rŸSÄÜÉłn§Xdn§x°-ž5éž:ooďX% Wh/hƒe—5 ĐŇŇ,ŽëÉ´iSĽ'rľŐĘޖQĄ'XśóúúzSÍä7Ž—ű׏Lˇ¸2˛đC=iUĺAš`%Ň>K‚śX YzTÜţőE2&~`EęO6UšŔ j˙HF¸&|ÎPň‰l +ičÇŰ!\6V~řWÇwůůW|c­<ůZsęOTeéŠ?ŃOł¤ČűL×%˛ŸďżŮóçě—o|ôhÓâiĈáýGçŮËšÖómĹ9óĚsM /ëç?˙9ţřărűôÓkL%[kܸąr˙ýwË`÷ŕƒÉ+Żź*ĺrÉ%ďéń˜VÚśím‰ĹŠŽŽ1ż4¤ă#úËK:ˇË w¤ţŒ°TüžőÁ<™5yÁ܍L^dž=IžőBóěĺl]ţĆ5ż2 mce+ă81ŠńLuŰÎKl„Ć‹´źJÍ]/ߟĂš—Ž˜c6.› GAËśă˛Ďě˜Ňá¨0ăzEˇ2ó˘ŸçoűţĚT˙ąmżě9éűńďÝóJé}px‹†~TžĐOŽ}ZÉv(ذaƒ™ˇˇwČwÜiB5C ­žŔŕ„Tlđ$]Qƶ͒tŰ//ł.Žă׌ńÄ+‘ŒŠçš™eĂę:÷Ÿ/ 1™‡ O fÁ† Í™ădmďňó˝Č52ď+xŠéťË:.ź/˙ ŞôĐOVŽ\%ßţöwĽŽnwQÇ/ZtšKCCůŽŸ0aź|ík/K—˝2gÎyíľ×Ír"‘4áŸË.ťtPTţ(Ŕ c+ÜDŤŃdTĘ ť{Ľ1­ ă媢8€‚{łĎĺnźHˆ)rĎ&ü“ť˛Ž Ůę<ąâ8Näó%Z)#ô#‘PPfľĄđ¸đť}­;ĄŸŢ¤ŸŠŸ=œwŢ92{öŹp݆śnÝ&CÁ0ř8NPř&R}&Œń$ô‰ls˘ )Ą Jкˍ’‚ MĆsFŽO/ڟĹ<Žiw Á‰^8¨šä_Äő×í˙›_Áȍ´ ËźrQ÷`ĂP‘w™ůŽrź;ÉŹšäy^)źN€œ˙€Ąˆŕt´­TXˆĆ~œt Ĺ`‚€LĆ< Óxéę5ÎŔGUœ jNF°ĆśŇĘžO/]]Ç_u%ZČ˙ˆdu7+Č˨,”co°˛×ő‚Ď ßwĆšD(E˙řľň‰O|ŞčíCá0ÔüƒP¤âLvŹHŐ­Făş68ăŻŰPP,hUžŃ°ż#c›ŸďÉъËÉŹ$śĺVŃ9œĚw)‘Ďöߣ^?źO/Úî+˝Ż^'@W4üsńĹu ˙<řŕ LĘ`ň"a?°’îmeÂ'A‚Ĺ [E*ä¤Öc1Gܤ-4°źĚ*:™-ˇŇĄœŒĚMŽs 'užn+2â~s^¸%Ź<źŰč=Ůu›†Š˘mÇĐ÷ţ€AdžylFaič$˝&’Ž–“>'R -ŕăw2ď7’ĺÉžeÉŢá„ëŃPNąĎćIĐžKl+/ ŰwŮëې• Ľ[Źšţű7ÇgŢ@ŠJ&“rĎ=÷ÉŚM›Ămeeq9˙üó`0ĄŐt˘ĄRÉhQ•úIŸče\ń]J 7•\Ęj×eîÍÎívűě^Fk3'x^?Çd÷§ĎéZäZNúý:áKő+#Ůë§+üDďÉ_rhöJœ†~î˝÷ţNĄŸK/˝DŚM›*ƒ Ŕ “Ž–‘/ŁÉW¸/›Ľ˜ł<żBM)ÄTüJ:é@š+'Sr‚Ѝx6¤ł ňNXm'úl›3)šŠÜă­˝ě5×ÖPʸçđ^ĹV r˛*”úyóÍMá6ú™>}š 6TüƒŽçEŞâ('Œşdnď|Śřa ‚5nIÄTœ ĺXşÝ–›ńŒŃ˙Ůă=ąx‚g‘6\v›SdŞÉ1­źŇmşÂkŰwVr:Ľ‰˘÷Eč”2B?`(˘âtÂT^:ÜV ‰9âšé^+ŇřkŚ.NˇÚaőÔ ëöŘűň‹eq"-śüwá瘪=ţ!ŠwŕÄńÄMˇKłU~t%ő˝Č{4÷™ăeVú!üJ†~îšçžœí˝ý€ÁŒŠ?`JWőIWœńƒ+žßŤ*öřˆńŰWE*ä˜y)4ű˛˛5öÖ2Şěd. ÷ŒŹ.—be„~<żí˜†¨lČ*ú9ş-łúOä<‚? ´úCŔ ”nKną•o‚*9žm˙eAA"Č,{fśuwŁ”żęO\˘íËlGœŒ NČł¤3ďŔuÍöékĽ›:Âw’Ž2䅕…L ­¤äemˇŻ3ňޝbű‹ôB?`¨#ř/ZiĆË ýűcŽm‰•î—e+˙řŐjüóš“2đŇA+mĘÚ 椓7^ä2ž˙>RËógŒblŰݜ:Ţ1Á'3mÂlŘ(š/ň?#ósĂvcŽ—#ŽJĹ ',Čů ;ůś„~Ŕá€ŕtœŒ$ŠmCĺ„kŇĄŸôńžmí%’ĽţŻžŠĂTźY[|[ŹŢő‰Äfź0ДdĘ>9˛Í‰T7WŽ›1Rş˘Ď^ßԞzi•ţëÓĘC‘÷~Žç…÷V –=/rç´ú $ýěg˙Ő­íCÁŠw ý\vŮĽ2mÚT*b0ČäŔ¸Ačċh‚őÔ>/Ł…V°ţyyóHNxGaÉ"ą÷í× –í1a{//˝-8Ď1'O–;ş¨0Ó+oí×AéŞIYďÎ/ŠäŻ{âeuY‹´ř˘ÖŞŚŚ&c˝ŽŽNz*űÜěk7n — ý€ĄŠŕtLůi'LɨţäTœ ¤”Şv½ţ˛V˛ńwÇdŐ+ťe …Ýť‚P“qß9˜*;ntC8ynR>tvqĺŞWž˛Ç|– SE–Ý0Pý B śy^äŔ@˜9sFĆúwžó˝…ôœţçÉŘ6{ö,Œć͛gćĺ„~ŔEŤ/0ٰV ŃœŒkŞÝ8A…ŸĚ°ţ3ćÄÂ6_Śő—)XăČʗëä‹á„RVVü˙K§Ď¤Ďf7V>ň‘Ťť<綾^–‡z$\?âˆÉň\Ž?öŘăŠ{|!çšú[ľľľľćçL&zúł  k—_~™ÜqÇ]˛aĂқć͛kŽ=X?^†2‚?`PрI̖ˇ‰T›ą‰'¨•ăWÁńŤŐh hâÇśśrlľ XLţëîőňĹ'Ă˚Űve´ô’0äD÷ŰeűœâʲcGɇ–×ćëwlĎ´Mło-(<sÂö^ž-2dVüĘB˛Jß@đňłBUĽ ™Lšƒ&˘ĺľ×^7 ĽKO•SNY”óüuëž5żŐÜÜbÂ:~úiyĎ]˝úéÔ´ŚÓšz/:͚5SŢóžwK,ÖšónGG‡ÜyçݲmŰŰŰ8˜š^2ż˝yŃEvŤĚz_\łąąQţđ‡Űe˙ţŰ÷îݗšÖ˜÷űž÷]n~Ť˛”Ź\š* ý”şÍ›ß’{ď˝/őý%Âm‰DRvîÜeŚ—_~Eޏâ˝=~Ç{öěM]gg—¸čo wW{{Gj:`~Nô~/˝ô™>˝¸˙Fčýĺ‹üŕűňšĎ}Ą×Â?úŃk–—ä/K ‚?`łŐfŇg<Ű+ŘV¨Ń5Ďo 溎9&ŒŇ8qůŻťß°ŕ_­Ç†iü Ýfď3 ň‚Đ’ç9é*<ŠiTm\Ž˙Ť…RŹß>ü–yöŒv]N:ô~ž˙Ąţť ‚@™Çä[XZ…Ć~fΜ! /ŐŐŐŚÚÍ3ĎŹ•ƒëeĺʧLĹ âDihņ~† Ť•E‹N6Çí۷ϜŤÁ=ˇŚŚĆTđ‰Ňę76ô3vě5j” Ę<˙ü ŚŠĐŚM›ĺÉ'WʙgžŃéžďż˙0 ŁU…Ž:jžźŐ€†V^ŃŕÇ˝÷Ţ/ůČUŚňK1zűšúďĐmˇý1 ý}ôQf0Ř>żŤ4T¤Á kŽů°ŠRS 4,óâ‹/wyœ~gÇ{LŢýmmmňŕƒ™÷˘lô稍Š6>ú˜ Ÿé;џŸ|´Ň ýTVVȒ%‹Mľ) q龆hôýß}÷˝rŐU”žzůĺW ôg^ߛҠš~÷…\|ńEćß3Ľď§ššŮüźŻ_żÁüœÝwßýňÉO~źd~&€ĄF+Íţň—?“Űoż#őçď?™_\Ń?—w‡ţ˙*sć̖ /źŔTú!ôPÚţ€AĹaœtPE[yéÜ˙Ëčh  ˘ŘUA`Eźpfmœ˜Ô7wČ͏l–=Sú›šcÇV+Jˇ÷˛Ąžôý;Á&Ç öšž9ó[=NŚŻ)ę3o~x“ź˝ˇ5őš•‘ęH™ďÍÔň ™Ŕż%ťő˜}ŻöžJŁîOkkŤźňĘkfyćĚrŮe—„ű&Mšhżü卦ő׳Ď>—üŃJAZFi[°}čŚ%–š6mŞüźéŚ›Mű.=N/ŃAP ) i;¤ĘĘĘ`ĎDSQçÖ[o“íŰߑ_|I–.=-ŁU“Vxą-ŚN:iaF0HĂ:3gÎ4˝Ç5kÖĘťŢužtĽ/ŽŠaĄ}űö›ĺŋ™ç°üđËpyúégLřGĂNÚJl é#VŹđĂ:~Úąc§yć\ôg¤§žZ† 5c9ŇLůhřJC?jÁ‚ă€L.úŢlĽ­ę3qbúž´bNuuUęgměÚUgÂd]ľžË6sć ółą~ýz9ëŹ3ňäkŔHéwŞ?Ťö{ĎgňäIáż/–ţœéý>˙ü‹ŇŇŇjŢÌG €žĄž×˙4Ú˘CWL-/řIb˘ałĎK‡}28~ŕĆ3q–˜üëÍ/É@HǕDċܯçI4 -َ}ţżťrNŃ-žÔżţîĺÔEËübNú=Fs;Nđ^˝|ďO$ă=kK5Ď+Š?ÚÂȆ:Ž;n~§ýúۋ3fĚŽÝ“ąOĂ6œąxń)B ľľľa‹/m߼ŐL,}~ýl5wîœHčǧ?ŁÇs´YÖę'ĚŘ˙ /šš†,–-;]˛iŕcůň3MŘf„ńRŒž¸Ś”Ł˘ÁKˇŐÖú!4é.}7únmľ™Cľví:óÝh՚sÎYn‚Y=ĄĄ˛çž{Ţ,Oœ8Ą[íŃV­zĘĚËËËňś‰łęęv›ů¸qc3B?V´ŇTöĎp1lŘMĂEZ'ýď‚VżRúœ]Uű)ÄţűŚôzŔ€˛•fşŁseɨî%‘Ž_áyŃĎt"'yNLśîn‘˙žëušö’ŁĽyéÉVó‘H (rßśL‘9:¨XôŠw)÷Ł¤XZígëî6‘xE𠎩ä_8ý]č_ńÇRŸéfUŇstĆ;w¤DŠýZąĺă˙¨YÖ N.‰„_M%ťŇÉÖ­ŰÂe­T’‹śśzôŃÇĂăŁÇ}ěcטyvčÇŇVMV´ÚŢýl i@Ei€IƒUUUŚ=Ň…'HąúâšZ">nĘŐ˛I?G÷i…mGŐĐРÇ—bč˝­Xń°ifiřE[HŰÚ,ہL"uĘ)'˘1c¤§´˘S{ť˙F+uEeZeHéű.ÔćK]tѝ̝ˆţŒDEŽzRv_ßĺ¨Q#MU& gĺ ČiđJĂmjΜ9a娞жrÖřńăĐ;ţ€AÆŞ+ź° –Ôúń›e9~2Ćoœĺ÷ŞŇj4ć¸HĐHˇŮóL!ÄX™|ďw/Éϙ%#k+¤ż„ žÉńď]Âŕ’Ęńď7ŽŃŠ<<ëůÖǎ“bm­k”ďßňŠ :iš#ÇźR/.Ę H‰i9´Q/ź­tˆĘžW4,1bĈźű›ššd˖-fyúôéűlő­“Ż“fFŽ!ÖËîÝťĂíú> }Žž#hŃóŁmĄôsmE•É“'ËţýűĺÉ'WÉ[om Ťi%­mMVHß\so¸´MśwÓŞJúł2n\f ç•W^5s­Ž¤ĎۓŠ?ćűÔĎQ'žx‚Œ;V˝ƒŕ4l…žę¸VŚą7‰VČńy­żĚr¸Ç^7fZ~‰Äĺ`sBţőw/ʡ>žHú‹š_L xyéçr‚¨OFÇłĄŸ)rý_Ř’ď§žM+91 6ĹÂϡŸŃéž$¨  LE eźO[ů§ťœ~.¤á…űďŔ´Ú*+‹› 0Q--~…“Ž‚ş_ƒ?öřbŹ^ýtŘÂé´ÓNÍŘW_ߐq÷Ýwż´ľľgŁcîźónY˛ä”NççŇ׌>oĄŞ5Ń}Ĺž#ýyĘ×L+ÓlٲUfΜ!ÝĄá•mŰŢ6Ëçž{NÎ EĹZłćósŁşSíç76ĘîÝ~ ěä“OĘ[ ŞXZĹIŤ))můU(l–ţ{ •Ťl Gßűňĺg…ű5ä¤1ĽĄbýď˙ţ<çv­ňsć™gô(¤ȏŕ(y™Uz<‰Ĺ‰F}˘UjŇQ• JN¤:ĺďIc[Y‰§ 2ůŻťÖËéó'ĘEKŚIЏv%ŤZŽ ÖäŘŚ _źrž|ąí˝ÔÍż)ż}xłHźJ4ää'zźt!/ö‰ź;ó ŕc*yᝅÇy^䝖ś|( ‚hĐaÔ¨QűŰÚÚĚźŤöIv{{ťCƒśÝ”.tŠŠ^硇6U‹.¸ŕ<™3gśů^4ôňŘcKSSłšŽVԙ9sFÁĎěëkzGŃ}övEŰWŮ`M.ÚfŹ;4p¤„”žďC Ô××ËK/ůĄ$­ôŁpŠĄďůЧV›ĺęę*9é¤î…ő˛ŐŐŐÉÝwßcŽ;zô(9ëŹ3¤§´ĺ™V|Ňđ—Vĺ9ăŒea0J+ Ů˙{ě1r¨4řôđÏČ9çœMřzÁ0¨hČśúÉUÝG2Â'^§í~ˆH"Ą–tĹM˙8ą˛Ôzš|öúUňĐ̋eú„aŇ×–dÁ=Ř FzŻfŤ‰ŕ¤–żőąůňŠ‹gKwh‹ŻřŮZSéǕXëqźě÷eďĂËČđ8A™Ű2Ín‹V˛ ¨ţŽćӕ+ŰH-Zt’wÜüNÇh5–ććB)Äčş-œ†(´Ý”ŇŔČůçŸ[đx×őä}ďť\ƏnÓŞ+Z5ĺ׿ţ­iÓ´nݳݪ~Ó[׌>oĄwÝWl…˝śmĄ–Ë„ ăĽ;}ôqimm“ŞŞĘC Č( FŮVWK—v]Ézýőő˛oß~łŹ-žş ”˘mĺnťíŇŢŢ!55Őrůĺ—ŇőÔńÇg‚?Z J+Ů@šmó5qâ„N-Ŕ ůřÇ?*ÆĽ˙ťŠ?´Ó€ŮţýäöŰď÷ż˙}&p8t1DüPL´:Ž™2×muœ°V8ó2ŚčőĚRŹL6ťrĹאƒMĹUs9$~ÇLŹą÷mB6&hă™?´Ź‰Ëżž´ŰĄŸmurů×ţ$űSĎäĹâŠ?ĆüS×ń"áŁŕ~Âwhߊ#áöŒ{•t R¤ĎŁ•~lŠ… Ȳe§ç<śŞŞĘĚľŐQ!vuuuÁăô3őłő4ěpŮe—äl7 ÇuÔźŒ€Ž5zôč0˜ŁaŽôĹ5ŁĎ[¨Ot_Wď(*ß÷˘”\÷ŸV3Zż~CxÍîÜCśýű÷›đ–š={–Lœ8ą¨ó4(¤íÝTmmœpÂé)­ôsë­ˇ™ “†~ŽźňŠľřʦᯊ ?<´aĂfŽ?ÚZMĺ ǢÁĚč¤?ƒZaJĂ>ÚZOßÉʕŤĐ;ţ€~ÓkŐ_l†Gƒ'A%@‰VÉIptćelv"—4á'–úg\źXšlÝÓ*ýÎ#Ň÷ҕrœđ>Äo?<ßü#kĺáď%§Ď/žň†őŃď<œz–6‘¸ţĺ~\bŽ:ąŐ{ě÷â帏tŤ´ôÜ ÂHâĽ÷Ű÷Xj~”ŢóŹ+˜œpÂńŚĹW>śşI}}ƒi•‹nˇUi UCy饗M•!úŃ -ů*iĽkřđü•چ Ť5s­Đ“H$¤ž¸ćŘącÂĺ;ó…věؑóœŽĚ;G.˝ô=Śş¤ôžO=uąiQV,}mmŚ4pSSS#›7ż•1ŮďoÓŚÍáś|VŻ^ă‡áR?ßÝŠöŁ?sös–,YlZ­őÄŽ]ťä¸ÝT幥mÓŐôžŽ>úhłŹa)}w›6m öý˙íÝi#éyř¨ŁďknÎĹáŒx ÉEŽx‰k‰#…$­36,{ ëĂRťëXIÜRÄJ˘Öą˛ÇÖ;¸˛ĽeěnĚäŽe˘DÉž&)ń4$šsˆ#ÎtĎLÓ]Ý]݀ëM DVH €*Tőď§ČÉĚ7 Ť¨ŽxńÇó,eąYH!Ľťîş+ŰţÎwž(Uk`ZZ}ťJÖ^* ¤đIc őT&˙09ĺe˘U~tďĂűvĄ:M#ú-ŤÚnťŤĆrśý™ŻžŠ_|çŠ˙ý—śÖ&h”źÝŘŕáÝMűjüÂ[ďŽöó݈iüŇĆk˙Ň#g#šű˘Ů\‰V÷žu2EÝ÷îIłŰĘŤ‘ż˘čuţjôƒEZ¤u_tď:6ląPŇëúă?ţ˝Ę/)ôóŚ7ýĐČÇ<˙ůwf$ľiúžď{ĺŚsŇxńü*_üâ—âcűDś}Ë-7 ý$КMŞź’Ú8qešťď~AśLëěŮłYp+9ţB|đƒznúůŔţ űýýĺ_ţ7?uęTŻNގsýő×Gé|öłŸËś=2qĺœ\Şžóž÷uÚ{8°?k×6ŤĐOîĺ/ż7žôĽ/gŻůąÇ^ô˘ŐjeWWŢŚ1Ýóô\ÓĄčSńX(u*Ć4ór8ÝŕIDôZSĽPKŻ’MÄ`ĺŸÎ™˝ Mo$ß źôŤ5˛śXíĆJź÷cÄ/˝óS1/yč§Wĺ'˝ćV+î¸~5Ţ˙żüŔ–B?ďţ衣Ń\íź—áÉóDůťe:•|Š-ӊgĺëV˙~ćůŞfŁW(ý߁ĺn ?Ç:?ăYTJ-…>üá?é…~îťďĺcC?É]w=żWçóŸ˙Bœ;wnŕřsĎ=—'ŠúJU@塇ž8úůéŸţÉąŠôž_úŇNĺ•Gy4[ĘţúŻż•UKIîšg°ĺ[Ş “ĹŮ<Ž™ä!– Öz­ŹŠRŕ%+žť[ýéŸ~6{˙)´ňú׿śöăRćšç:íŕ^÷ş×öB/E—/_Îî˙™3g*ŻńÄ;úI•~ę&qÓM7e–’TĽ(…ş’YţěŇ˙n}´óű—Ş8 ý̆ŮV`aő*ŇTÉÚ|5{Ą•Î:`tŰPĺçśűçu÷ۍÁJ?ŮC Y“,ú“]9ÚÍVźűcg{ç/ĎžňO#ß´:UŒvü›ďŽ_ýű/c‡Vbyč'o,m\5…ÚŃ+T¸_|;/蓪ĺ7Ż˘eZďx;*(ĽƒŤ€Ds‡K˙¤ĐĎýŃgĄŠ$U¨šóÎ;ă[ßz¸ňü[o}^8p ŰN„7žń˛JA)źňîwż7îż˙Őqâĉ8}út|á Ţ ľźá Ż••ÁŸŃ_üĹ_Ć'?Ů ŠĽj;ßű˝÷Ĺă˙MĺóŚj8Ĺę-ŻyÍ÷gŐeÖÖ.fUj^ůĘűâ/xAvŸżýíoÇC}ŠwÝןćţŢăRu?üĂgŰ)Źń#?ňŔ\Żyß}ŻČ*=űěéřüç˙ĺż3÷ŢűŇ8~üxÔąžžŢ ‡ĽŸqž*{ď{˙˙xúég˛ŠI?÷s˙ÍŔőSëýď˙ŔĆľ:­×Ň}<}úLś”ĽßÝô;źégüя~ź÷~ÓëžćšŠBQţżĽ$ľ{úé§ł0\jU–źâ/fCđŘ5RŔ$-W; •vĄ­WŁťî¤)VőŠHš´ű•l˘×>ŹĐţ+ËÉlŒgМĺývźűăÇă'Ÿ‹˙űţá8zhvíoZív/Čô†{Ż_ýű/‰xٍ13ç/ĹĎ˙óÄ§ţęd4–ömźţĺî›)śkt3>yľ¤ź…ZśWH@ †Ž6ľü*´ ËĎh–Z>ő;ƒ >“H•mňĐO’*˜|čC4ôüTIĺöŰoëíżä%/ÎÚE}ć3–…|ň OŃk_űý›*˘¤ .ĹsSĽ–?ů“˙8ôy_÷ş×dŐ`rŠÖ˙řĹüÁ‡˛çý‹żx([ŠR嗷źĺÍqěŘąŢX ¨äžűÝďœ?kŚ`WŞbôďţÝżĎB?)X”ˇĂĘĽöV霥!żťAúů'é=¤Ÿw])䒇Ă^˙ú×Uţţ§pP ý$ŠíUú->ţńOôB?IŞ<4LúÝMżĂ[‘~ç?ůÉ˙WŽ\Íö§­ö“‡Ĺ†ůžďš'ž˙űďfCđŘ5҇ďéôŽ4˛śS˝ŇŰĺˆJÄŕÇ셣U„Úí­Z݋dŘ77FW˛ÍOődźéíď÷ýÓ7ǝ7‰YHďćčÁĺř՟š7ţťˇž0ŚőŘSçâýóÄW9ˇń’WťĄŸĽě=dÁƒvţIíĐý ?ŃŻšTlŸ‘W>ŠÂcŁWAis”Ą7ęŒîtŘchĽ¨ ¤J9wÜqGVÁ'…`Οż‡ĚÚ"˝úŐŻŠç=5—şŐzŠÁ§v!PÓyď­vţˇé0Ĺ{Ú ýtŰ|uîggšíúýMB řLOŤ/`WIßxJ-iŽŽŽÇŮË+Ý:4ƒÁ•vˇ Mł* ŤDˇP „††+TźÉŻK‘:ež°żńŽĎǙóëń+˙đUąŢń{żóĄŻnźś•×´ćŇĆ+möăâíbČ)˝˙VwżŃ-fT¨’Ô}Ż•“şăĹÇĺ×íÝÇn?°Őć•8~x5{|jŔ|ůDX8ĂÚBĽí•••8räHܰ˙bo|X—ŞVŤUŃ6ŹÝÝnU>ÇfíÂcłXĚĆ:•KŤŃnŽĆo˙_ŒűßöžxüŠsą]ŰxŽ7˝ýßÇżţĂŻmź–ô:V6^ĎňĆël”^{^q2‹ď ë„wZĽpPlŽęS¨ô“_łŃŘ\YéƍŸIúŮŹŽŽŒü0‚?ŔśÚJđ#=6UűIýÍď:žŢMü[Mĺúá”rKŐ^€§]넊K´7ˇ`íTˇŮX7Ý8M3Ť´}ńčŠKńŞˇ˝w&­żĆů×ĎńŔŰßőČŮh§çoŽtŞEdŻ­•ż‡R´vá˝QU÷Šó^[ý÷ÜčWůé?~0ôźĂWb˙ţý˝ţóÓ¨GđŘ5R $…JöíŰw߸”w*/€ÚƒA—~€ĽŐmsŐ=ż|IďU˛¸vżN#úA˜ôŸvŁíćrˇŐÖJüú˙ůšxőŰޏ=9űę?ŠĘĎOţڇâ7Ţőš8łÖŽV:ZÉ*ĽŔOúżTĺ¨YŹĆÓ 1 źßÎKöĽítâűOç¤6kƒU~:ˇ)Ď ˝ě–Ť˝Ÿó'ř,„QU^ŠÇRşĽĽĽxŐÝGb_ójôŞň´+ŞĐÂ.ý+´ˇÚƒcyPfS՟ŕP;z‡SřgăOŞvc)bi5k˙őŘɋńę_xOüöť˙|(nźńĆxĺ Ď ~ňKżşM7úŇîWőɏgŐnzŐ~şÇş‰—v”[‡uĆÝcyU ü%ćŐRĺNë­Őlůí÷<Żúo˙mźç#߈i}řĎžźý÷ăˇßűĹěšífúYʞŻűfűŻąű^ůűÉŤLŘÜĆ,żWů[iîg´[Ý T?ü“ďçŰwY‹[o˝-kő•~F˝ŰVř9 ú̖ŕ°Ť¤đČÁƒăć›oŠ×Ţv!VšWşş'”*˙ô‚,YĐ';Ą~é?ŚÝŰďˇĹ*žŰŔô[†mŞ0´ń fsŠ×ú+ľáj5WăńS—âßůÉxÓŰ?Ş~űŻĎ|ů‰řÉ_˙`üŁ˙í#ńčÉKŔO E'đÓî§|^S§ O7“SlůU÷ źç(´/‹~čŠ;ŰĹža˝űPž—?xçsŮĎäȑ#>Űd9śY † ´›3^<–ÖŠŐ×ŃŁGâEwß/ţöÓńW§oč=ŽQŮÔÉ+?)ťV;ŐžiĺOĐżl.öS,Şy<Ś7Ţ)‘łqĽV÷:il)˛ŒuŞ~ÓnĆW=Ż~ŰťăgxaüĘ?¸?îźůHTyěŠsńżű™řđçí\ŁąíF§ĽW#ťV§^OŁÝ‹đlźŽFˇĽW˙ő^gwżxňĘ>ůëîżéîŃB!¤<T¸›ś_rětźčÎëăŘąŁą˛˛Ň ţÔmßVg€Í€…5,”‚?ǎ‹{îš;Ţřő‡ăgŽÇz{iĕ:Ą–,đŇ.†‚ZYhf ôy… <0˝vZâ7ݰL Ţä›<ӎn­~€ĽUčIךf#ŢóąoĹ{>ňŸăüđ‹@Ÿţňńo>řĽřđçëV ZÝxÜňĆC—6–fţ˘ďOď}”ŞöäyzzZQ¨aÔż+˝÷Řęnڍóň`Q??#˝Žt×ßz:^řÂű˛ŸIúŮTč˜=Á`×I!’ĺĺĺ¸ĺ–›ăĹ÷ÜŻ9u2>őݛ;!žnPĽsâĆ^ŤPńڐ=é‡YÚýŠ6íBeĄîɝ M' Ô(œŰÉ˙tĂ@ÍB(§ĐÉ[m5łpL¤HmşÚ­4¸ďůčˇâ˝ýfźě'âÜůőxěŠç˘ÝŤđłÔ­´Ôkş•ţŰęžŢźÂO1UŹpÔŤTźgcí(݋n۲F!`Ô(ö +†ŽşÉ t_ž˙†“ń˛ťoŽŰnť5VWW|śQ3v@ÝVOĹýâv ţ?~<îťďńw^Žç:y´%R˛^˝°O?ôSŹöSÜďْö›Yć'ŰQ~ŠŻ¤2*žÄ~h ”żśÂ{j”Î/‡ƒŠ÷ŚŃČŤ(uÂKGV.ÇOÜůHźđŽăq˙ýŻŽC‡ĹŇŇR˙Ú#Şý0;‚?ŔŽ™6RnůuôčŃxă žçöńw>GV:•څKzéTŻŠ ăô+ę´ŰƒŐ~R'o‰UźN§íUŤ_%¨[%'Ż(ÔnV×ɎgAĄ~Ő TŮ'~"ŻPԎ^)"úÁĄVzl^Ő§ŐŻÔ_WTęŐ)ę߇^ˆ§˙şóçęW÷é_ťXečđŇĹřń{ü˘;oˆx kˇ–ŞýTýlĆýěęŒ0œŕ°ęVýÉ[~Ýxăń#?ň#ń’Ü?~çcqǁg{múĄVwż[٧[ÉŚXĺ&Ď[eĎŃ;ˇŘZ+˘Ř,żh9쓇úÇ[ý˛B˝ŕQ˙Zůx1ÔÓ{ś€O÷uç•yÚĹj=Ý7Đ.{ň÷Ó˝ ƒŐ„Úy7˛Â[ďż˙´}ËţłńĎ<^œ…~Ţ7ß|sěßż_˜`‡,Ŕ.‘WËŠÚN”›ož)ŤBÓüř'âŘžÇă ß}.ţňôÍąŢ^é]Ł‚‰öY˝cňÁvˇP9¨°ivZ`ő˛9ůăťŰyWŻTs§QľŤEąmWĄ*ĐŚóóç|х€Qô[›ĺ×č˝ÜVž^꽟ţý‹^UŸvţÉßÇĆë^n\‰ď;ńdÜËsqűíˇÇýĐĆM7ݘľY›¤­— Ŕl ţ;Şŕ™äXůřŇŇR>|8šÍfVćK_úRřĆŽťO=Ÿ?u}|ëüőůŁ˘¨‰cýÎŔëČŤĺ źśŇšĽj>íÁ ÷Ęętžľű˜Ţ)íç|ž!÷ŁÝŐô<íÍ÷o`; mÇďeťÝżˇě{.~đ–'âśëöĹ÷|ĎËâţű_×_}:thdč§nĹŚqÇNđŘUĘa–rĺŸd•^˙ú×eíżžöľŻÇMÇţ6žűěSńçĎÜO^:玏fUx:‰Ąá˘~‹°ÂóôÂ1ŠŐVŻ,Î@;­^§Ľň…ť-Ă…çŮüÜíh—:řœý×?üĹsű÷Ťƒ!˘âşŤÍ+q÷Á§ă%ÇĎÄ'š÷óyńň—ż<îšçî,\•îń$ĄćCđŘq“VýţIR0eyy9î˝÷Ľqë­ˇĆ׿ţőxěąÇăůgĎĆšsOĹŁgVăo×ĆĹłëb=ű“¨dÉó=…VXYXŚPY'o‰U¨ŽÓŻ S|˝…jBýë7֝kô9řz…ǡ ăĺç*?g{ŕyËU„VëqÝꥍe-î:|.îǏßĎ{Ţ-YčçşëNdíÔVWW'ý¨ö0‚?ŔB˜eř'mŻŹŹdŐiRPĺčŃ#ń’—ź$~řáxňɧâ–Ó§cmm-.]zfcš×qúR#.^iÄšő•,sŠŐŒőÖRä::Ąš~• Fä•s:ů•buaá›ĆŔX  f_Ęa â{ŤzmĹçíW÷ifϹҟűš­l{ßR+ŽŽ^cŤWâŕžF”:pŕ`ěß]vßîźóޏăŽ;âřńcYŕgßž}Y;ľY†~ŘÁ`W˜&ü“Â,)Ź’Ö)¸râÄń,čóĚ3Ďn,Ďd˙3głąË—/ĹŐŤ­ĺj´Z),өܓ6óýŽvE§]¨ÔŞĺô[Š śKĄŸvá57Ž›‡‰ňjC}ŐŠÁńôŕüq­ě>4›+ŮxŞŠÔš/ů˝ŮŸ…ŁŇýšéŚ›ł°Oş_)<•‚Séœq!Ÿi>BA[#ř,ŒQUę>ŚŔé€Rx%…XR¨'Z<˜ľ°JűiY__ Ö˛uŞ”\šr%[’Nđ'îŒŤäçT[ś]~íŁŽ_>§ęšÓv ú¤ýöI÷!݈”*ů8Đoߕ>ů’ŚśRŐG‹/€ůüvaÁ şŐ€ňPK ň¤%OÁŸ´>věXo,_’ňşîkʏĺęźîŞ@ϸ÷5LůZůőňí´ä ´..ĹóË׏36j€Ůüʸ`ˤ៤<ž\’*ŻşvylŇŞDŰ­N@§¸?,č3ęzӌ×=@=‚?ŔÂŮJř'Šʏ kšľ×MĐŮJ /Ą€ŮüRđORˇúOń1ŁWeŃ+üŒ3IŘfa IΠ>Á`¤qœ~îIŤ˙”:§ęÜ˝hŤĄĄ€ů0§Œ#řT*jvj’Ąnř'™ŚĘOůœqçîu–ł ô˜ ˜Ly>Ĺü 0Œŕ°đęVÚJ{°açÖąÓ!ĄYOüĚ2ĚcR `~€‘ƒi{qŰ~ĺç%u@š­wv{¸e’×?ŻsČőçTĚŻăţ›T…lĘ-łvbŇĄnř'?7™śşĎ^mő5íĎmŇǙ”˜Lq>ŞjnĹ| PEđ¨-Ÿ\hľZą´´;a’@OńüIS~Üľjš{ŕžL'Íš%ćW€I4 Śfłó§Ă•+Wc§MJÉŞm嚯ÓËçÜň98€:TüjK“)ÜqńâĹءo5vÚ¤ŐŞ[´WŰ{2‹°ŽŔŔÖĽ9ˇ4Ď"řLÂ_ŔXy˜|Ňá… ąHfUŧX팟ěVŁŢÓVߗęIł“Ďšĺ_ž3ďÔĄâ0Tš\(VÁéL:DŹŻŻg=ÇíŰG[ŠT÷Ú¸ł–ćÚҜŰŇRsӜ›š`€‘Ę KKËŮŘÚÚZ,Ş˝PŠgѸ§ó“ćÚŇźKš{+2Œ#řŒ•—N뼼Ľlě̙łąŹLĎ˝Řů\[š{+ÎĹŒă/ R9đ‘ď§ ‡´\šr%.]şťI1Č"Đ2Č˝ŘiŽ-ÍľĺónĂćĺŞţ#UM4,/wÚ}=óĚłąŰU^öňDĘľö~]šc+ΚĺĚŰu,@IšPhˇŰ›ĆňŠ?i"} i}}=.\X‹ƒÄ^cR€yKskiŽ-ľřJsnUr櫀**ţC'ĘbVVV˛őɓ'ŁŐjP_šSKskĹšśr…fU€q€ąŞZCĺßBJۧN  ž4§–ˇřJsmÚłÓü*żUTËŰ}ĺßDZZjĆÚÚĹ8sćl㼚´4§–ćÖňj?UmžŞćčŠ€ąŞžmÔoůľš}#éôéÓqţüů†Kshi.-ÍŠĽšľQsoă,ŔirĄÝn÷ÖůXŢę+—ž•”z’Ÿ:őtśčĐĄĽĐOšCëWÓ^Ę*ý[}ĺTűęPń¨ĽęGyůáΡ“:%‰ÓÄř3gčKsfĺĐOšĹ—j?Ŕ¤TüF*VýɼɈTá'Ÿ˜HňŕĎúúzœ>}&.]ş7ÜpCď8\‹:•˛OĹÚÚĹlŽ,ÍŁ-//gŰĹĐO9”ăţľC@Už4a‘‡ŇDĆc=7Ýtc™Mpœ8q<8 {Jš[[[‹gŸ=}!.IóaŠJv^)ťô™$ô\“ÚuNRń¨TŽúSŤ ˙ämŔňíźtq ţ¤s;ý̟Ύ§c‡ĘŞĺ=ÍMh°¤šŻ4וžô–Şűœ?>›Kňś^iž+́ĺó^ůxž=IčÇź0Œŕ0TđOž&-ŇdGžŸO~ä“i?}Ó)M†¤í´>sćĚĆ›žŁxâśS¸)ŻËǓ<ԓžäV řC>Ĺuţřâ5„~€I-zđǧ|°ĂƅŠĹ P^ý'ĺűiŇ#Ic)Ôi ֎ü)ň°P~Q‚˜…qášňXg,űośŸWřÉĎ-~ŞöË×ú€…ľĐHŠřŒUÄţÉ'.ň°OąýWq,ŸÉĺăĹçě`TÍU…vŠŸňšĹÖ^Ł*Uí #řÔVŽţSĺNj“Ĺö_ĹÇw*ýDeЧ8–Ÿ;!ŸçJFUęŠjßU {l‘Đ0‰yҧuţ*€=h’Ö_I>ąQŹč“–źÚO1ěS*ś€í4,¤3Ş]Wš"PÝ*?Ăƀ=c.xÍťâěAĂZdžM\”ƒ>U×*€Vn핏UřJćú—V_ŔԆU˙IĘ ´NmťŠűŁÚ|•';F…€„˜Ć¨ŔͰcuZvۃսŔ4vCđÇ'y°Ŕ†UěŠ/ˇýŞšŠ Ŕvň)ŽORÍÇ|ě ŸYQń˜‰Şę?ůxRń”ÇŤ*ýԝüPń€il%|3Ź•Wůř¤Ç&!řḚ̌ę?ŁŽ › )‚ęń€3ŞúOŐyšQç ů0kŁŞWW™4Ŕ#đ kO|đ¤Ő0Wu@ŁÎř`;ĺóQUĄtŹN˜GŕŘ‚?Ŕś¨ Ő ô˜$`‘”羊óW沀í´Ű‚?í!cţ‚€=Jľv’ ěiíšc kť‚?ł ç´K ° ë•^§đ;Ą<UŻÚNFľ Ňźr(Űň—V_Ŕ\UMŒ ň¤ÉVŤ“\ f­Şm}ŽŮlěĎ)†}€€í°Á­šŕP'đ“öŤĆę^oÔ8ÔQĚIsNĂ;ĺ/ŽĽóĘA! ¸fműW*ţ37*ô“OŒ¤ýŤWŻfűiť8^<A^é'đ¤ý´ÖKKKăUÁĄQa"€iÍ:řٚ\ĂĆ~ҒÂ>WŽ\é×ĹÇŰŽűź0θ NUĺž|<˙âZ~NZ///g! ţ)…Š×€kÚL?ŘZ¤Š?Óž1ŸôŔÖ˛+M€¤ O ü¤%O űö­ĆĘĘĘĆ$Hš i˜đ`WčT°NËŐX__K—.gs_—/_Îć¸ŇÜWZRhXČ\,„i2'íX ŹĘ˘Š•‚ÚcŔ‚Vĺ'Żî“&>Ň:I“‡ŠŐŐŐބě6pOZšŮŰ<˜Í‡ĽŕĎůó˛/ÂĺK:žWRýv­vlü,Dřgťƒ?UažQŸ…JIƒŞŞü¤ Ž´NŸ´¤ýôÍŚ#Gg“°Ľ`Ďţýűł%͋;÷\ďKqi^,-)äSţ€…5.ˇŇŽ967;]ń§nUŸV÷źvĹ!ŰŞ*đ“/)čséŇĽěŰLi˙Řąc“űŽ)äsÝu'ââĹKqć̙^uě}ű:ód)č“/‰ę?°#Š™“ŞĽ5áuvÄ,‚?ăÂ;łlŮ5*ôŁ5lƒbč'ßÎŤü¤É‹úIëôÍŚTĺGK/ŽUé qŤŤ7dŐ.^ź˜ÍŁĽđOjý•W˙IŠ áŘU™“Şv^łzži5É'q“>Y{ÎÇËç] `ŽĘĄŸrkŻľľľ,ôsřđĄ8vě¨Đן4G–ćĘҜYš;Kshi.­8ˇVőe;`ŽňŒÉ¤Ů”yŸúüíü4n^Ľd×mˇ[g˜‹ŞÉ‡â’&*RĽŸ4QqôčŃ8tčP}iÎ,͝Ľ9´4—–‡ŠKŽźĚV!c2×,ËvŘŠŻáOóŰ#ĆŰWŻśŸ `ćĘ ĺɈ+WŽÄĺ˗ł ‹cǎŁűŘ,͝Ľ9´4—–ćÔŇÜÚ°đO"üóŃ͘Œjë5Ë\Ë\Í#ř3íi×\ĘçśŇz}ýŇăĚÔ¸ĐO*Mœ&(ŇúȑĂB?0FšCKsiĹš5áŘ^݌I/sĂ3)ăň+“šů?ě;Qń§]ąßqźŹ|ÓÓ~œ;wîŻ˜™qĄŸô­¤TŽ8}+iuuU{/¨)ÍĽĽ9ľ4ˇ–ćŘŇ\›đlŸBƤ2ƒ2B9ßŇq|[ěTŤŻÜ,ŢđŐtŻ|ĺ+ß `nĘĄŸôM¤|RâřńcԗćÔň/׼šśrř˜ŸnĆ$ýƒ{5śnG˙ážUđg\Ďł­źÉa Ё´Őƒ>řľf˘<ą&ŠÇҒ—!žîşŃlît–v—4§–ćÖň–_ĺŔOqN.€ŮyđÁ‘gLŞZ}ĺśŇŇ+|q=ěř–l÷§tuZz ëÖŠęţji˙ę'>ń‰çŽ^m}6€š(~Ű(• NËňňrěßż?€ÉĽšľ4ǖϷŠřó—˛%ŸřÄGž‹NľŸŞ JU6eX8(W'3“ćůâęô>k—Î͗+iđ‰'ţćĚTUľŸT~8­ľř€­IslĹ9ˇQU€­+dKRÖ¤*ĐS'ť2ďüLmóŞřӞđř¸ýqŇŁő;żó;‚?0i˛!ď1žJ§eii)VWW˜^šcKsmůź[q.˜˝nś$ĽkŻ”Í;ë2—Ü1šFÍńFĹxŁ4^ŢŽZš…uZ–şűKĽĺĐƲüÜsç˙éĆH7€Šĺ“ ů7ŠňɆ´\şt)ë9~âÄń8pŕ@[łśśĎ>{: íۡ/šÍfś4ŇŇv’ďÓŮřœë?9rřףú9v_Ĺ%oóUl6ŞíWšsUy;JăQ15Ç+ͲâOÝ4Ž<Ň$%”Šçݧő§?ýŠ0SĹŢâŠ×xú§7M@[יkëĚ˝çâ€ŮúĚg>ýţ(dL˘:Ł2,łRu~DýŒKń‰Mü™Ő“OSň¨¸“UiI?”֏ţč~ţęŐÖgؒ|bĄ8ɐWýYZZî}Ëؚ4זćÜňůˇ¤8/'[—˛$)S…ŒIŒŽę3ʤ™—ş&žÎ•îŃQ÷† +§TNWĽO#/Śý|đ˙ŘXŻ0ąâ„ByťŐjÇŇŇRě&Ĺžč“,°]Ҝ[š{57Le­›!I˙˜ŚLIʖ”ťPĺĆĺTŠçUmoťFLŻQsźQ1^+o—÷›Ľuž]\–JëËęC=ôć{ď}Ů˙ŔDŠß(ʡÓ7.\¸­oťíÖh4śňgÄ|Íkd‘ß3ť[šÓúÎwžČ@ŠíWZ§ů¨fł™­óm`2_ýęW~ó•Ż|凣Óâ+É Ë×ĹĽÜŢŤ8ą9TގŇö\+Í㯃öĆŤ’RĺZ>ŻęőcK?¸łgĎýŰŚ’hĘp53ďJ=*0/Ĺ9ˇâü“y(˜^ƌtC?)O’˛$Ĺö^ůą9źSűDĹy[ËČĚÄvĂǕ<6VU2Š*]Ľý´\‰NyŚÖ 7\÷ŻŽ\šň‰Ś–O.äŐÍNq˜Ľźwž L/eERf$:9’”!š›s'›s(­Âe†ľűš6 3s[ ţLóâ†ÝˆQUÚCĆZQ]í'/Ătšť\}Ë[ŢüO6ţHz(€-ZĚĐϢ(„‚˜œš$ŘŞ”IY‘čdHRvd=ú­˝FeNrò*UŐ~ꄂƙú€ĽŘšĆÇ㍊ńFĹ9U׎óŘôƒi>ňČ#Wžxâ‰O˝ĺ-o˝ŻŃhÜŔHĺ2Âyxe}ýr¤ĄcǎĆNť–Â4‹ÚZ €Ů:{öl6´şşš­›Ífś..Ŕh)ôó˙ń˙đ+ď{ßűNG'đs)úEdŠĄŸr{Żr‹Żňą(ě—Őí|5s[mő5ĎŞ?ĹíQŠÇŻĆ`+ígĺšŢőŽw=󖷼ů—ľý€ńŞB5‹VYgV×Ů yT¸ś,úü,Ş” Iِ”‰NkŻ”ŠĘ’ł&“Tü)oďhľŸdąŕYTýÉ×Ă*řäűÍŇXŁ;Ö,kV,ОŃţe%í?óĚ3o?|řČĎPéęŐŤŮ:őϗ4váÂůívÜqÇíąSŚ™ŕŘʤȢ‹ĘˇźöŽÇ˙›h6qđŕĄXZZĘ*ţäK’Ć€jĎ=÷Ü˙{Ýu'ţUtB<ŠŇOUč§ň)ď—Ă@ŐŐbČXÄt -śZńgÚĐ3^•˘JŞJ*úÁÓZkŃéŰÖşîşëţĺ7žńőßčŽ{Ô,*ä,zľU€€kÜZʀ\w݉ŒHʆ¤tčPlĹ"´ŕŇ `wŃę ęšzľőŮĎ|ćS˙×˙đ.:ÁšôáVjíu%6)Vň)"6žřŠöŠšÇj[Ží—^xŁb{Ôńü͖ˇ[Q8Jý¤^ţ×ĎՊkßXV7–}żŸÝX.€^űÚ×ýÔęęęß `al%ô3é9ł2‹çÚjp§ř„€€ÝîňĺË˙᳟ýł÷?išö^y¨\Á'^í'b|Чź5ĎŐŹ?Ş[ő§źß˜`=lťXő§Q+îçcKĽăű˘‚ĘÎýľ_űľßöśˇ˝é–[ný!U€¸ľZyşö@şľľ ŮŘmˇÝŰi\ˆfŘń'Ÿ|*;öógŢű––buy)ö5ÓşËÍÍO×7ţ,ź˛Öˆő‹xç­˙u–šá†˛c{­‚ ŔâůÎwžČ*ţ8p°Tń§3—ÓlŞřŔľ'U÷ůîwŸřřďţîď~ěÁ<ýPOŞîs)úAžrđ§Xé§Uڏ˜MkŻi[|Í, 4O|v2üS^ň`OÄ`ŤŻŞv`i;UZ)ŒÇŠŰü™6ô“ĆSđ'™Eđ§l§ƒ3óx~a €•öď?ËËË˝ŕOšˇIS7‚?ěQéދívëĚĆÇ;ß˝|ůŇăgϞýÖ7żůÍŻ˙ÖoýÖ×>úяž+œ—Â:ëŃŠđSó”C>ŀO9 4MKŻ… ý$‹ü)îOţŠŤŞôSöŠ ĽżšVşëĽP*ßü)âćÇNÂ'pŔN™&¨2ę1­Ňyă5WťËzTWô)ˇőŞjőUÜőźÓ„~ęě×=6ąy…JśZő§¸˝•P9ĐQÝţkŘyůzаTľ+ü*öÍ$Ą•VÍńŞ\W KŤô¸aŐ{ŠF1Ű ?;úIć0ŮîđOž*Vý‰ŘŢŠ ţ4Ć\żYz˝ĂŢwÝ{-ô,Şşá•öˆńâąVéüa­ˇĘžâńňąrčgÔő'YÚŽÚŻ{ljË1?é7j+îço´Q/ŽËĆ/j•Î/^ŁŐ?ÜŞŕOůľGŚŹÁ`÷›4řSŽŠ ţ ţ÷ËŰÖłđő>Fí×=ś%Ű2™śňOq–U€ę.ĺçmÖŘŽózÇüŐV‚?Uc­ŰĺN%bvŐ}2ô“lWČd’đOylŤĄŸŞuUp§n‹Ża×÷šËŰŁ˙‹fŇĐϸíqĄ›q-żŠëâv{FëQŰŁĆę›‰í ˜4&<^7üS56i5 bp§neŸQžFŒ4#ü,ŠIB,Ă2Ł*ĺŒj6,ÜSUágšő¸ąňvŐ~Lx|&ś;\2ëđOq{š@P2ŹÂOńXůř°ó‡=GTŘkÚcƇ…mꄀFUŞzŽ:ŸşŐ‰bÄ~Lx|fv*„2IëŻ:a i+ĺŰĺPOsÄyŁöcÄńqnCŔv™&ź2*ô3IľŸŞý¤UqΤĄžIŞüÔŮŻ{l.v2L2Ďę?Ĺíşá ćë4G\TđgŘبńş„€€YŰjpe\ľŸacĂîŘ,°Ś ÉĚł Đ´ău/¤ÝüI[8gցžI‚;B>Ŕ^3IxŚ=ăcÓ~Ꭓv{đ'ŮJřg^ÇŚ9`ŻŠŞ™uhÜąIÎYX{!ř“›g¨ÎńşçĚóńóśŐ°Ě,9×tŕ'ˇ—‚?ÉŹŞđĚ#ä#Ô\+& ÖĚ; 4Íy oŻ’YˇŕZԖ^‚DŔŹlwfÖ!k.ô“ěĹŕO2I(f^çÎâqťŐ´!›I7Żsw…˝üIŚ ŰěŚö]ÂDŔŹěd(fmÁfń˜…ˇ—ƒ?šíÍúń{ÍVĂ7?%×Bđ'ŮJg^!á `ݘWŔf+×ÝÓĄŸäZ ţ$ł ÚěĚÇŹÂ:{>ô“\KÁŸÜ<‚;Â@“™G8çšüäŽĹŕOn;Ă:‚AŔľf;C8×Tŕ'w-rB9ťÓ5řÉ ţ Xl×tاHđ§šŔbř)üŠG`{ úŒ!ř3=a €Ůň™‚ŕĎ| î™1ÁŸ˝CبKg€]¨ŔŽ#řťŕěB‚?° ţŔ.$řťŕěB‚?° ýHqrœ>\IENDŽB`‚bazaar-org-bazaar-b6e9a65/screenshots/search.png000066400000000000000000025050621522167256300217560ustar00rootroot00000000000000‰PNG  IHDRţŚ#Xć´ ‰ůIDATxœěÝ|uúÇńgÓĄ#)*ŘEËÝŠçŮ{;{ďx6ÔŰßłœ˝ëŮť˘¨ˆ€`ʍ HďBRw˙űLŘef2ŰKvłŸ÷ë5ÎNْČnžŮůÎóËi'K¤‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@Ę´.Gö‹$żW+ÂFqF@%züîâƒPPŻ„‡ß@r @‹3~/Š…  +~ŠĐf]ř¤ŤŒerč%™?;á"i’ĘÉČP&Rń3ěˆL"Â:ʤŔJź~VB>‰ŻŕNF€2%ÄËϙ¨ß"ĐR$*hËăśřđO&„O˘ůcý˝ę°Š5ˆÍý[tř§%T’řiÎßá"/͐‰ôš mÖRĂ#‘ü\‰Ú7÷HWцm"š_˘öM -1îĎÔ\űĹ a"/Éńű|Íľ_Zhiá‘x…tÂyœt ™1|—'Ćí‘î—ňZR%Ö°Ns„â}€D‹58“čO<?-´„ I"?ą…"Ý Ľ‰GžDl‹dŸ”•XB?‘Že[,ű¤ƒHB4ńóDş>Ň}RR:P˘š+ŃëCm‹ç}šC4a™dz˘ Ľeř']Ă&ń ýIJ.Řúpˇ‡ƒPHśx„a˘ Üxâź.Řúpˇ§œt ”DÓi'ÚpOswHG‰ěî“ČPZ…Ň-Œi°&ÚpO4ű„Zîv€t•Č?ńÚ'ĐşpśĽ”t ĄDŚqĹy9ÖuŃěц­ g[ŇĽZđ$^]~u;TĐ'ŇŽ?@ş‹4(jGâî‰W7 pˇ%UŞObéňN(–O¸Ýě÷ ´D° ŐE2ԗG ţŘoÇŠŚ{P°uálKŠTž$˛ËO4Ű]aŢ/Ôk ´.œmą LITX%ÖŽ?ć`O° O°}˘ Ľm÷Ÿć ‰DÚ 'ÚaşB…||˛\„{@źĹbńD°>ÜĄ˝ÜŹö‰÷P`áö„hŽIźťüDşÎ)Ŕăö ô 5äX<ƒ?„}@˛Dd ü 5ÄV8A ˇĂ>‘†}"éÎr¸Ű"Ůa’Dvů‰$đ(äcßnďö(ř*x$ŰZšP]o‚ÜAöÖů'€œ–%Âíq“ĚJźC?‘|‚ÍíĚaŸ@ˇŁíöÉH‘„Y íI×wˆŰiÚő'Úy¨uöŰNËáö¸HV¸$’Ą˝ěëâđ1ϝ=öš˝ŁO¨×ę5ŰoC褚pĂ,ávŃ Ä ÖáÇ>7ßöÄiěv°uál‹‹dL" ýZŽ5ü¨ĂO°Éţźáv˛ßĎi]0„~@ŞŠ4üŞŤŽ;ŒŰöP8“Hl݀­ g9Üm1KtČ$žĄŸ@ašpƒ?N“šťO–í~Á:˙ ١9˝žPţ€TKđǡ(ř,¸cďćăv¸*hNč'%Ă?9’8ц~âŮÝÇźÎî1‡|˛îî_ö€}ťÁî" ţ8­7osŮöüńíç ůd‹sˆČ#Ö0Q ×ŕ2ÍCm÷8źN—4ý9ýĚÁśĹ$Q!“d‡~ÂéňcôdIč.@ćyśi Űý$ĚőN˙€TIxĹćz_xÇmÚŢ`šÜśűëîăc?‰i(°`ˇ–ĂÝ•DL˘ ý˜—c űřnŰĂ=Yë@ž OŽl ű„ $úË.šß7! Đ\˘ ŤťÓĐ^"6žPl 9~ěˇÝö öźŃ„€ÂYw[ÄR)řmč'T—{‡ž, ʓĆŔo˝Œ9˛Őő×_?`›mśé_ZZÚ7//ż‡Ë%]ŽŹÖŢÍB0 Z„ŠöxÜ<YQ[[ł¸źźü÷yóćýróÍ7ĎýôÓO7šöÓđŽ€j%pŘÇ>ܗ[Bw˙‰g §ĺpˇE,ŢĄ•ć ý8 Áĺ4Ź—ŻŁy{žwĘńí{Í5×t<ăŒ3öëÜšëˆěěŹ!€¤khpĎ\ąbŮäG}ôłńăÇŻ–-ĄžzďT#Ö`SG {đÇ>˜H‡âü‰WčÇw;ÚЏšËOś8őĺ[Ż~ň}ű|ňÉ'{ 2ôŻyyyŁ)ŁśśöŁ™3gź1jÔ¨ŻdK@GĂ?ľŇ4řcű4l~ˇi‰<üăôiÖđOsBÝwH/eóř–†ńĘś­×î>›×ŸaĂö:™î>ŠMťMŸ>ő)SHƒ=ŐŇŘČüiŔÁ‰4,š!Ŕ½m—ŕOśÄG"‡ř˛ßú1‡˛MËžŰÚá§H—ŻşęŞ­Ţ˙ýËűöíwIV–Ťť ĽiĆŁWŻ^‡\~ůĺ]=ĎÜŠS§nňŽÎÝźY5öʉGŹ™§ý<]Ć%˜Hň4Q‰WÇW˜ëc ý(s'§ĐKš†€|“vůŃá˝\?üđØíśë­÷vĄ múő×_nÝi§>”ĆđŽűĽÝÜ&ň+Üî?ÁćöŰNˡև-ÁŸhşý  ˙8…~ĚáŸPĄíöŁĄMwe­[ˇî˘’’VÇ Ň^EEĹóíÚľ˝Wƒ;uŇţiđÂ?Űd˙8…|‚~ ţ„ÚR–$Ž+IJy]¨ y9XčÇ)řŁĄíę“;räČ’ŞŞMý´%%%Çi&däČŃ%ŇŘFł"šąçH‚eNě jDœوň+œĚL\dKlâŃí'œ!žÂéňŁsű˙0§ŸSO=ľÝ /źxwvvöP@‹’••ľőąÇ3xٲeSgϞ]#Ůˇm7͗xlË>Áşď„ú‰&ŕS((ÖD‘+ĚőÁ~řPeO\ëîcič'oĈĽ~8ńď˙ŕA€ËívĎ3fěœ'O*÷.ÖJă°_ŇĄż<â<˜y˜Żp†ürţË<ˇßvZľ>¤X‚?‰ěöc_Îk(Řä ýäIcđ'ťŞjӝ999ű ZźúúúϋŠ /—Ɛ4ä ˙¸CLĘq‰mˆsČi9ÜmeIâ…3–™Ó:§qӜĆ[iÚ(GC?YkÖŹšˆĐ@ćЬȚ5ë.’-#FĺHÓ܉ˆóČS>NŮ‘čł0q—#ńîđ_Nëý˛ě]ě˙̓Ž×n?YsćĚ9¨´´őąŔQCCƒÔÖÖꕐĆävťĹ㉺Ă8ą\.—deeéÉcĘË˓ěělĐ|JK[;gΜ_ ô4fI´ŰfKĚy´Ť/‡â‘-sç—mKœ;őDş>jŃu„;̗Óí@Ă{™oš|ÁžlŰílÓvý•ĺ•Wv:účÜ}+,ŞŤŤĽ˘˘BŞŞŞ¤ŽŽÎřbŁď!}/é{JßcŞSĐ<:vě4Ô[›ż;mÚ4îË7”—/ŕ#ˇ}óPÉÁ21ö ÷ńÂmKĄxB…œÚ)™oëä ţř†ř*ÖŰ6l¸Ą°°čŕ§A„ĘĘJ#œ 9´óOqqąŃ@ňmÚTőnëÖ­o”ĆĐOĽwŞß|ťaóäk(Č|Űcťí˛ß6σݜ‹řŠœ,‰Żp‡ů  •~2‚ěa íî“5qâÄ=ýVÚá§źźœĐdúžÓ÷žž$ŸfH4K"Śl‰8çNĺYĚëB5Ä v˙`ëŁďŽ?ŃóNˇ{§_ˇßÜ×í'{ÓŚšűłłł†qťÝFč žž^4/öŤ´´T˛˛â}].€`Ü3 óϗĆ?žŽ?žn?öŽ?ćÎ?átý Ôí'ŇŽ?wü‰f`áx%ÂM:™ˇ;ƒ|! _ˇŸÝ ý€Xý´ŹNŚ˙^#ß-Š“…ëęĽl“GÜîĆď^˛˛\ŇŚĐ%˝ÚĺČŔš2ŹOžěĐ5W€T¤ĄŸ 6ĐĺHŔÓ÷dëÖ­ ˙I¤Y͔xŕ_IcĆÄäÉÚ<7çR‚…pěŰCíވ'šO¤ĂyĘ+P§ŸPŸěÍËŮśIťýäTTTޒ——7Z˘ aŸžŞ’Ů‹k#şßŕyrěE2ŹožŠ¤ŹŹŒN?@ ŇÎ?mÚ´ÉSSSóqŤV%×JcˇíúÓ`›IŰ"ÎÝœ–C­w”-‘‹6řÉ0_Á†÷2€|“v.ĘťüňË;=zœDáΏĘĺţĎ*dEyäQô>Ď­–u•nNř)˘˘˘Bjk# ąHíĆĽS^^žHŽœœœžŐŐŐoNŸ>˝Jś}Âĺ´o¸š„ITŃp†íŠd9 ţd}öŮű @„6Öxäźײs6IŹô1ôąĘŤÝ4' üxżĚŠKߣ„ó€äڜ-ŃźLNd÷Œ9뒐0P¤ÁŸD&’ĚÝĚ뜖í݁Œ˙]ťv'ř"vőëeíŒ>Ö5ol 9UVV €ÔÇ{H.SśDł&öü‰HxٕDçgÂiz)Vގíű8MYśšy}öžűî[’5D" Ă{Ĺ3ôăŁŠ}ůčR’Mťˆ44D>d€äÓ÷Şžg HU:Lm]]1i Ť“Çă1&ĺršŒ);;ۘrss)++QQEOł%űî;ŞäóĎ?Ů(™mŰlΠ¸7Ď=Ň4 ä’ŔC~yBě“ń ţ„ł,–¤S N@ć_ş\sÍ5 ÓŻ kxŻ‘ý ĺ˜!%˛M§\cůˇ•uňę7ňŃĎÁ𢡊=źož óN@21Đ^ţ iŘ§ŚŚĆ˜ęëëƒîë ůBžăҜœÉĎĎ7ŚT ]sÍ>˙ü“ݤió3ßşhC<žű†ŠZ˛;ţŘĹŁőQś>Î;찍Dŕ…ŻŞBîsΈR9ex+ËşA=ňźS;Ůžk…Ü;iCČç řƒdŇŤ.C}! ľč{Vßťze4ĐÜ4źSUU—‹J´ÖŐI‡¸Ő°{QQQJ€6gLž–ĆĚIÄ&Š~ěšăˇjěłPa §Ąž¤UŤVý L?-Ť 9Ä×ŕžůţĐĎ/ËëdüűerűeňűęĆR"ŰuÎ úúú\@˛ÔÖĆč:‰Ç{Š@?ëÖ­KH'Y}L}l}Žćfʘ8fP‚°ç[\Aś'E":ţDűC¸Âœěű˙rsó{@˜Śý^r ö¨ee r泍ĽşŽńâ­Éżn’ۡëB>ŒL˙ŁFvčš+@2ĐíHOźwМ´­¨¨HJ]ŞÁ ž—””C5‡ÍćDgRœ†óݎŚËOÜť5×P_фƒ\AÖť˛ł][ @˜ž_ź O–÷‡!˝‡čšřS•ěÜ=ONŰŤ•ôé˜+eUnyűťJy~F…¸ĂřŞćťĹtüAňŇď]4—ššٸqŁ$“ÖżeeeÚyGňó“?Dú按SÇŸhs-Iň+™ÁŸDľ32×ĺĘj-aZ¸.ř Ö.­s¤ ˇńëŒírä¤a­Œ0j]˜%çl-}:äʍﬗĐĎF[ NÜnˇH?źwĐ6mÚ$•••Ň\4p¤ľpaaĄ$“)c’Č,KRB@ĄĆ&3‹ô‡u%xť}żSŮŚŕß˝´*ŘňŐÄţ ĺŐo*äŔ{–Ëß\)żŽhěŕ3vç"ŮĄkž„~.Nć"y<ž¤_\ xď ٚ;ô㣯A_K’ů2&‘fSľ=ęýăŃń'Ţ/>Ôc9­fž@Xt,éiÓž”ožůV~űmžŹXą\6nŹ0śľjU"]şt•mˇÝFvÝu>|O)**™ŁÎÔ¤çŐur×GŒË´ÖWšĺę××Éë˙lu|Xß|ůiY­HŹĽK—Éôé_ĘŹYłd͚ľ˛zőc}ǎ¤C‡ö˛Ë.ťČ°a{Jˇn]œď• Ą}-YYYÉöË)sbžâ•ĚőX1?W2‡úrnX'Kšţ’Â?ŇÚľkĺ‰'ž–÷ß˙ ŕ•$ëחÓĎ?˙,ožů–ŃjöŔGˉ'']ťrBh Úşd]eŕďUÖTlIţüžşŢň ̒őőRďöHN–KJ B7TnSIÓefţšPž|ň)™9ókÇí‹/1ŚŮłż“ÇR(§vŞôë×WMŐ××ClĽ}MŮŮْ““´(K ĐoŇ/tÂi㜴a˝œ$ű['W˜ëĚŰőˆ‹ÚÚZyěą'䨣Ž‘×^{=˘öąşŻ€Ž>ú8yčĄ˙J]]Ho˝Ú˙iĂ&ˇ,\[oÜîß%Wrłˇ|EĄĂ{ičG­ŘĐ ĄŸ+[DŚĄĄÁű7÷9çœó†~œhč‚ .–‡~Ôx €UEE…¤Ş|mĄr+‘ć`â.U.7sŮnřWeeerᅗÁâ+ZřyúégĺŸ˙<_Ö­['Ň×ÎÝsCîóڬƖ×=ÚćČřżś“ţseHŸ|šýˆvĆúşLš:D8°Gčç ×ňĺËĺóϧȊ+hŠô‹ŢëŽ'o˝őśx<‘_4évťŔŽ>F*Ą ɦߍjǟTĽŻ-–ďoČ)˒š–H^„+ĚőŽ óPm’|­’ěóěÍsßílÓşR×ÖÖ})ŕŕ?Č%—\ćx’źsç­dŸ}ö‘aÆJ׎]¤cǎĆúŐŤW˲eËeÚ´/eʔ)˛rĺŞ&÷íŇĽłÜ}÷éÝ{kĐ<Î8ălůá‡-ëvŢy'y䑇BŢ÷§eurćsÁ|ÚÔçŢ´—Ą} šlÓ(”Éë›ĂAÁůLn¸áFăK°źź<šő֛dď˝÷Ŕl͚5’δKv´sÝŽťöţÝŢ[vŘaéĐĄ˝ąn͚ľňă?É_|!ß~;ťÉ}tčŻ[nšÉh¤ş:˘7thr‘g̘*éD/’H—‹Űľk'YY‰íe“——ť§4ĺUžyŢ`šÜŚu:÷8ĚMâpŰi.–C­ˇˆwđÇé6ÁÍfٲeF0`íZëíV[uňŽ?M>ř z@üţűČ#<&ŤV­ślÓđĎO<*mŰś•XčřŐpDăÉ'“úK*:đŔƒeÆr˙ňő×_#cÇ,@źúB/Ü/ŢÎ{q˝Ě^\tŸlďGÄ1{”ČÁ;IĎö9RS瑟—ŐÉ3_n”Ż˙Ź‘P÷ȓ˙ÓÖń}>a²×^Ă%\'tšüúëŻţe{Čéꍯ•Ď>űÜż’ăŘ=ŠBź_ĺ<7ŁÂ˜˘}Žxißž­mš-ÉüůżË;ďźkY7pŕÎŢżŰ×JqqqČűk0čŢ{o/ß}÷˝ýŰoż#0Júöí#‰ C>öؓňîťď‹ŹŰj˝_ŽWa¤É“?—ž={ȅž2Äń¤7ŚKčGék-**Jxן– 9~C)1Ć€–ď™gž“yóćYÖsĚ?düř[Âý˜éćíˇ—üăhËú9sž“ÇR¤Ÿa}óĺ/ƒ"˙<—>ś>Gź\vŮ%2hĐ@㪡ÝvŰU.žřBZ’ÇÂř2ÚG;ý„úńŃ+BľĂ\÷îÝüëô1őąAC?:Ÿv)˛‡~œ,Z´XŽşę:K0 ­Ś&t×âT“ŽŻYš!CÇ-’ŽUý /Y֍ą\pÁšârEvěľjŐ*ůß˙^•÷Ţ{O†.×^{•,_žĚŇůGŸëđĂ•.]şHźě˝÷péÚľ[ČýÚľ‹m˜1 %ÓĄţ~řáGăś}X,ŸËG—ĘÂľ !;˙DJ‡řŇǎ§Ž]ťĘĂ? @K´té2™=ű;Ë:Ţ+’Џ†ôž—]vĽÝŹYsŒçčÖ­ŤÄÓłĎ>o<ś™^‘ÚŻ__ŮjŤ­¤˛˛BţřăO)++óo×.@ˇßţoyúé'$//OÄGş ˝•Lą„hÌ9ĘwěŘAÎ=÷:tHĐýőBÉ{ď˝_VŹXa,řáť }ÍŃ\Ŕ™i’ü‰g˘Ée› ‰'žxZŞŞŞü˝:u4†÷Š$ôóűďČóĎż }4Ięëëu3fĚ0NćÝpĂőň'ŤV­6Öë°bĎ<óź\yĺe/‡~˜ěľ×pA|č˙CýG{ŕĚâ ý¨ďż˙Á[ť˜˙-Üöˇ6rőëeq ˙hčgü_[KKŚżCÇ#ŮŮْ,úYKH˘ĺš>ýKËňŽťŽi8ŹwÜAvŮe%”óĺ—3äČ#˙&ń˘~Ţ{ď}˺Ν;ˍ7Ž“^˝zú×iW W_}Mž~ú9˙şőëËä“O>“ƒ:PŇQs|ˆŽÖďžď7cązőšéŚ[ĺňË/•ýöŰ×qŸožůĆ{L4޸ŕ!Vúšíßá$H˘r(úXI°tëřă s€ śiÓ&y˙ý,ëÎ<ótc¨ŽpčĐĎ>űœL›öĽqBËěŕƒ6ćúX§Ÿ~ŞŒ‡ۇN”óĎ˙gŘĎoÚĺHĂHĺĺýëţň—Ă媍.ˇě§ăcë~+VŹôŻ;䐹rÝuWˇőÄä„ ÷řˇmłÍ6ŢßǓ˛|ůryěą'卯ž’˛˛ ŇĄC{0 żuԑ2x𠉕žĐ˙ôÓÉ2qâDY´h‰ŹYłĆűť,”NśňžüÝĹč¨d>‰jf͝Ü˙}ňůçSŒN óç˙nüÜ˙űß –ÇĐ/´s“>çĎ?ĎőţץíĐ Ďů׿.}űö´Ž!LűĎvÖYgČI' /źđ˘źýö{˛lŮ2)-mĺý|ÇZÜ|óxËýŸţ™€ď×'Ÿ|Úűşő/ëPiďż˙vł}^ĂŮŹYł,Ëű쳡Äjď˝÷śfϞ×ŕĎňĺ+¤˛˛Ę˛î„Žkň÷*77×ntΜď-C|͟?ßű_çŕĎŻżţ&|0Q~řáď—ëkšDťüéßŢQŁöóţ­ŰMBY¸p‘ˇ>ůČxÎŐŤWIUŐ&ăok÷î=ŒPԘ1ŁĽcǎMî÷çŸ ĺěłĎő/ëg€žg,X O?ýŹń7SëóĎ?×řrzNýœĐżĺ•••ŇŞU‰÷ýŮ×4ëk×ßG¸4ˆýâ‹/y?ĄîvíÚCqÄ_ĽgĎ 4˝!z<îűÎQżO›0áno]ŸÓä˘Ĺ3fĘ­ˇŢa ý””DŢĹŐL_{~~ü†Qwö9†úĐâL:ÝŇígŤ­:ÉÁô>zĹž†NžţEďÉę_÷ѓT˙űţe Ë<öŘţŽ?8š1ă+9r„4=öĎž-ˇß~§ÝŰoż#Gu„ĺdřSO=c ý´mŰĆ,Ł'űĎ9ç\ٸąÂżNOvꤿˇc=FÎ;ďœ¨ŻžŃ€ŔŐW_g„‹Ě´ŻvDřő×_“˙ÇwŹ÷g<+ŹîďžűžÜrËmˇkPęşënđžžmYŻWé‰M^{íuď â#ä ϓœĄ[’ˇŢz[:wŢJN9ĺ$Ëz ě ď›//|Uq÷íňsěE2ŹoBżŒŠŘÔŠÓäĘ+Ż1>ç|-ZdLúqÝu×ČŒ ů8óć͗łÎú§ĺóŐLƒ×^{˝ńš`§Ą>ţřŮa‡źŸSˇ8† ěnšeźź˙ţ‡M֏šŸÜu×˝–×ňŮg“ôy­÷Ač'ůţžú迕Xi׳•+WI<™ßW>nwCŔý5ŒŤĄ9§‡úwčŃGŸ0>§ěVŽ\iL“'n _¨ĆśmŰ:>Ć#<.ďźón“łţ-Ÿ;wŽ1˝üňkrƧĘa‡"Ąh đŇKŻ0ę'úœ~ó͡šlÓżĺß|ó­1˝ôŇËrÍ5WĘśŰn#ĄhxčÚkÇYNRčĎ?qâGĆď@Ÿ{î9Tkđç”SN–űîťßżŹÇBˇÝöoă˜ÄţŃ.ŽşÎţ\zD,’üI{ô7Đâ|ű­ľc€^í,˘CuÔ1rýő7 ý¨´^ŻŠmŚ'´š“śÓN;ú—ő œ{ď˝ĎżŹ'Ţ_xá%Ë}.¸ŕ|iÝ:đDŢßÍż,Ą; ĺ<óĚsüIÎ<óœ&Ą':ôÚu׍ šß† ĺ ¸˝źź\N;íĚ&Ą;=YúĘ+ŻĘ­ˇŢ&hy´Œv‚ąÓŕŽv˙yäřvrňžĹF §]ąˇĺb/˝­ët›îŁűę}R-ôłvíZă߯S8Ai¸nܸY:ň˙wŔЏv9ďź C?v?ýô“\zé•!żtœ3gŽcčGĘ~ű°ŹÓ˘}müń‡eÝĄ‡†9 ů´ëšYűöí$VڝÎlíÚuO ĚÍľ?§q4TăDC:[oÝË?éP¤vxs ýŘi(檍Žu|_ţß˙=`űěĄ;˝ ÷Á–/ž˜*Ą<účcC?J?kœB?v+VŹ0ˆÚ(˜ňň ró͡üŹĐĎŻ;ďźËč* ¸@ß „K‡(>ëŹÓ-|ő1ľşvďŐ 1őś˝~?ţřcnąˆőľg‚–rš"Ă}đk6c‹áĂ÷ ¸Ż8ŽwcČЉÔwÜ1MÖ6Ôč ă3oŢ<‰Žěťď~ş>ży˜-}W^yšœtŇŠţƒâŻżţVfϞcě§Št(Ÿ=öŘÍ8pĆ÷ť2dwůŰßţ*­Zľ23Ď=÷‚1|–ĎO<%ŁGď/]ťv•péÉJ ™_“vÖŃnJ`ғ~ožůŽ÷äŕB˙vý2AO,ę0füöŰoĆ\Űď˝÷^Ţ­ídÆ RXX`ŹżăŽ;-…ââ"9ńÄŒĄCôľčđ_ú˙ŐwÂT‡Zѐ×ȑ#-‹†´–yŘ/ŸşćS:Ó.djŕŔ˝˙†‡˙Ś?ýôsK(A×iwŹ—_~Áq.Ľ!Bý,ŃÎgúšÓŁGO#ĐĽKcű=÷XťďčpD:˘vlŃýŚL™j}ô=ŞďeýĚdćĚŻy=ŒaÉôę>=ŃďsČ!C~ůh¸gńâĹĆţf<ɲܭ[7㽎Ě`ž„ ÂDJ˙]Ž=ĘűoqËŁkÖŹ•‹/ž\úôécüíÔ÷ŸĎÎŞďźóž˙}Ťô=yđÁcŒ+hóóó䧟ćĘK/ýĎ?ź˜†g´“ŸvüóŃ÷ˇšgŚCěpŔHéĐĄŁqŸgžyV–.]ćߎa%ý{ˆ~̞ýń ĂięűHk€Î;Űß~ű]ůň˙–űôčŃ]Ì9Đř[üóĎżŻÉW›čçÂţó ÜyçíŸÓ׊K;mˇÝś˛~ýzďçÂ7–!tč2 žxâń °x„g|C}˙÷żů×ů†ýŇcíjŚĄb•ŕŕ~ßĹfĐ\ÁŸHƒ:{„MťÚ˜ ˘LšôŠ?آ'łŻşę ďŤGnťív˙Igߜ޽ˇnr=ńěšc¨{…YŤV%–ŕęׯŻüăGÝq|}ôqc8Œ?üČżNO@jH(¸ăŽŰü“vŮe°÷„ţöŢ›—ů÷ŃŔĚĉ7:)= h]Ý|óż,<ôK…sÎ9ßTĐ”ÚÝ(PHAip莝ţí=áXjYŻÁ€O>ůĚżŹ'1|đ?ĆIEŸÝwßMştŮJîż˙A˙:íh4räAËŁ5œ‚?-…ž‡ŽźrË{U‡ĚÓ.?úůçŁď í˘…@Ú´i-sG6  ţ¨#Žř›\zéEŽ]Űô1őóÝüšŤďí“O>ѲŸ}˜ŻCôłÍGcK—né(ŁÝyşwď&ą°wřiÝşTâíŒ3N“?˙\dtł2Ó0šN/žř?ăoÍ5l؞˛Ď>{!Z;ýÂü˙{ٲîœsβ ĂľýöŰß.šärcĽáÔN8Î˙˜EEĹr晧{ߋKŒŠOŸ­-Á í4¤żëË/żĘżnɒĽF°ĆiŘ0ý{úď÷Ţë&Żűĺ—_ąŹÓżŠ˙ţ÷mţ°Óě/ťîş‹ŃÍČG;..Z´Xzöěđ9O9ĺD9účżű—ľƒ×…^b ęg Ář ş—$ӌĄťgŚ‚x]á ˙čĐžÇt ćÄ+ôŁâ}G„˘Éś$ý3Ô€§˘˘Ň˛l¨çŸßҁBC?:u2†íĐŰfÇœăýíCˆŘŸťšœ~ú)ĆĎáŁ'Ĺ.źđR˙IBuÚi§4 .ňĎžÓäÄűž{5@fÚ)'2Űmˇ]› ßSPP çwŽevë 54Ńu×]Ó$ôŁĚá'ľß~űZB?>˙űQޓ§EţeN‡MBËWVV&-…†Ď?˙Ÿ–uú^žä’‹Œ ‚Y¨÷ďYgŃ$ôŁ4DŁĂ4 pűí㽟ŤO[B?>Ön'eeë%é’K. 8TŁ>ďŘąYÖi!łyóćˢE[†ŇÇŇî)HMöaŻt(ČXi¸Ä,Ö ‘ý;uǡĘÉ'Ÿ`źçœhť{ žÝ˙r≧ĘË/żjů›ě{­Ú-ČGk ŞŮő￝ <ĐňŘłfÍń/ëűďoű‹÷ďţy2aÂí–ЏS÷ĄPŸ}'tB“ЏÓëVÚńËţ{í5Ě耴ÇťËŃG%W_}Ľ´mŰ&ŕóuíÚĹúQZ:đŔ,ëę -žá ˙œyći/މgčG5sđ'-´”Ąž b_ýH¨`ôęz{WTWXX(—^ząĺj~sgž}űĘąÇţ#ŹÇŇŽ˝{oí¸mčĐ!F¨hËsDÖńČ>,›vVr˘ż ᘇúý÷ßף'‚NĎůŃG“~`~>őÇ ¤}űö‚–­¸¸XŽ:ę#ŘŚpśŮڟx @Ieú3˜l>íÚľ3ş†Dňţ4(źĎAíţĽC -Xđ§ŹZľŇű¸+ĺçŸçZşv){čÁN__vvvĐ}>ř cCß{Xť égo˛I“ŹÝ~4t O¤Ś]vŮĹNĘgʔ)2fĚh‰Ĺ_Xmúď*t˜Jíś§CbΜů•Äůţűď-Ăiůč0W:<ćďż˙atăó}Yž`ÁË~Śšýö;ŸďŰog[–őžűăžëÖ­3:ĺhhvőęŐĆkš={v“ýB}—žăŽ;8ގżî˘˘BŁ+ “oźAÂľÍ6Ű8ŽďŐŤ—eYŸ’KżÓcűwjşÎ~Q/‚?ô^‘’’bďIŽZ˙˛óQRŇô |óPXęöŰ˙m }Ľ'ŁőśĎqÇ#ŘŻp×玗 ö.ŃÚ{ďŔ­őDŁž¤ GűönëŘŃz _^žŃĎ;œÇŽŽŽ–+,ëśÚŞłăž¸Đ“őţů§ÝęՁŻđ×î ŹZŐô~öĄ€)+Ű hů´Nˇn]Œ!ŔtR—]vąyä’n:wîp›“eţ؇D˛łwěąÓî,:LŃäÉSŒ$ą ö>öéŇĽł1|Đ7ß|ë_÷Ůg“ĺŘc?ˇÍÙŠC9DştŹÇŇżŹáýw(pŠv˘1‰ô čaÆI"ĺĺĺ}ƒľ‹Îwßý Ó§)ÓŚM7ţFú|ţůŮmˇ]Œa°”Ó{P÷ GyyšeYĂ0~8QŢ}÷}ÇđQ4}Ř_ˇÖńJćĺĺF´@`N!hM™ň…ÜqÇÇ zô9îšç˙źß Ô7éŇ­Ž;ĺ3+tüĐâčÉěuëś !łtéŇ&Ý_ćĎ˙]fÎüÚ˛núôrřáÖűÝťw7†‚ dɒ%Mž;UTVvLťŢ„ŰőŔiœî-Ű꼚4G›ßÚÚAfŘ}÷ÝdÌŻüË_}őuZ‚uŐqş*/Z/˝ô?šďž˙8ž/ľkvÓ×bď¸cÇl ţL™2ŐţüöŰ<ăóß§uëRŮgŸ˝ŠŤ[ˇŽ˛Ë.ƒ,ĂVÝ{ď˙y§ťźÁlܸѸŻŮ A;KϞ=$™Ú´ictâŃI8×\sŹ\šĘżýý÷'úƒ?ąü]3‡í6lŘ —\ryŔŔžŚţýˇľ|ĆłśűH%3fL4ŻŕϧŸN– îś|ßŕ ţűÖéó<đŔC’››#ŁG ąJŕOĘKtđ‡˙’Ž_ż~F‡ ôh3íöę`WC<7ÝtCĐŤÖőąÍ KŃ|đżˇéÁˇv#čĐĄCČÇYąb…qŕîô{X˛dŠeš´´U؝„´›‡vHި¨4=×rÇ}őůW­ZeY׹cč×î¤C‡v–ĺłĎ>SN>ůDĚöŘcďô/óÍŹ°ťYĽ’@ď)ľl™5 ĂúECĂ5˙÷X>S÷Řc79蠃dǡ7†ÝŇßۄ ÷$$řŁáĚ î’ĘĘĆĄů~úégŁŁ˜vW1;đŔnNHm§vŞĚ™s‘˙ cý;sÓMˇĘ¸q׆ţŃЏŢÇ|Ńża'Ÿ|’ÄŰsĎ˝` =飅8`”ăžl:䐹–ŽF‹-ôßnßŢú÷ICPăÇß"‘ŇáďĚ?ťţ­=ě°CĄ˙4řTZZjtúűߏ•x°żîUŤVŹ4˝('Ԑۥh‡ßťîşÇň8Ę9÷ÜsŒĎ˝÷Ţďߌóxuţ 5 xšĐěLÂŽšHÔсÍfˇÝvľ,O™2Ĺr@şrĺĘ C;őďß_nžůFyĺ•eűíÜO;áLj˝ŠHť„¤=ńýĆoú—5$ăúFiŘFÔĂQUUet;ąÓ“üŸţ…e]׎Ý$ö Ô´i_:î÷íˇłŒ×aŚŻhôéÓDzüă? `ׯ__ËÉlý÷7wî/’nžývś÷ý^ŃdýÚľk-IŐ­[w‰†l̟ąÚMěžű:PzôčáKUVVH"hˆpäȑţeí|˘C<éĐJf‡:Vúúöí#‡~˜eÝ÷ß˙ ^x‰ń˙5Ý碋.m˛ď!ťËvŰm+ńŚĂ\}ůĺL˙ôÚkoý2]Ă´fůů[†ĎęŮÓڝpŢźů–ĄÁÂ5cĆLËňŐW_!'žxź1dš†~TUŐ&‰űßUf,Đ˙ŤK.šBÎ9ç|ů÷ż'ČË/żj„„$^ŹáýPëxsgp ű_|ńF°G;ű\tŃů– |40‹üńIH–†Ë.´8Çď)EEEţe=Šôîťďů—_zéÇi;3ÜyçíňÔSWë‡:¨|çw-'Źô9őÄbsÓđŰnűˇĺÄă '''Ÿ|‚´jľĽ[ÂgŸ}._|^űcíćaüď/˂ ,ëěĂčŘ[ńÖÖÖZ–<ĐÚîwÖŹŮFË`3íÜńŔ[ÖuéŇYÜY˘qŕŁ-ËÚľIŸ×nńâĹ2fĚX9őÔ3eüř;äŐW_ :ěZýˇťëŽťXÖ9ŕR–ô ;s7ýlĐŕŸyh ľ÷ŢĂ%ĺĺ-˝;oŐ佯CŮ;đē=ÔŁ_HjŇgťíś“mś‰.,ˆä;ýôSŒn7fÚÁćňËŻ’ŤŻžVŢ˙CY¸p‘ńď['˝­ët›îă4ĕď9iҧoö€đŸţéý2ü.ŁŁŽ™žď&NüČ;}lYoŠtđŕAĆ0\>7VČË/żŇä9ő˝űĎ^ gőOšýö;˝_‘5kÖřŸÇ×ýĘgŤ­:7yŒ?ž$ń˘ażÚ[Öi×!ýűmŚaźŸţ٨ôoýO<Őd‰kÜGy´Éđ^ô1ĺĺţŃű<účc ş÷†–^ýŠ ………rđÁA =ľ˙ţٌpÎĉýëőŔQJ;îéÓ§wŘĎĄ'ÍCu¨1c´ŽbĽ{fĚř*ä~Ç{´1,™Ď‹/ždNGOĆýĺ/‡K^^ž÷çúřcĆXC5……ERVśÁżüúëoë´Łƒž„×ßýÓO?'˗oŽhܸyîƒdçwôޡLŢ~ű=Y´h‘ĺqO:鄨Ç÷Ö˙ĎÆ őÓŚ_@hwˆcŽ9ÚčĽ_N̝;WžţEăľë¤'*5htä‘G2Ç{ě.}´ĺäř×_#§vŠÄS8ďóĄC÷˝öŠ.”ŁŢ{ď}ď‰ö?eß}÷6@zÂýˇß~łěÓŤW/ăä}4śÚŞ“eYC7ŒÜwß}Œn<ß}÷˝ŃîŰŠ' njw! ě)óçż:ôЃéCƒˇ×^{ľŒťŃľĘlöěďŒ)RúY÷Ý÷ˇ÷ߤċ5÷Ě3ĎĘęŐküë&OţÜşigşöíŰJuu1ŘúőeMî衇řoëߟ#ŽřŤĽžxć™ç˝˙Ž—Č>űěmtëŃĄőôoŠŒ”†žfÎüĘß:_C‡í[łf­˙1îż˙ůç?ϖîݝɺuëäƒ&ĘK/˝,ń˘Ďů÷ż%>¸%¤ŤÝŠÎ=÷Ł6Ňşá×_kzŇ÷­= ńb ĎhˇSßđ^ćЏoyŘ/ó}ŁAđ'´Tţ0d€¨œzęIňţűř‡‡ŇÎ<˙ú×Mrűíă˝'ч'đ<đ@9úč#Ľcǎ‘<´qĐzĂ 7ZNňičEťęÄS aŻě´;‘/řŁšÇł’Î:ë ăőŠüăďFĐ`ĺĘUƲţ^zčšôҋ>ž‡ÚľkožzꙀű~úŠŇĽKËşv` ơ̋7Ďř˙0věÁrýőׁٛoţ—÷„äůţn@ڍéíˇß1&'z’UƒLą¸îşk䤓Nő˙?Ôç~úégÉ‰žÎŤŽşBY4řcŚC×TVVJqqąÄK8ďó’’⨃?Ґ„†×tr˘'íŻ˝ö*Ëy‘Ř{láŠjjjŒe}?ÝzëíĆdfć$‚ĚÁFýüsú2ŠMßg7Ýô/ăoÚ[o˝tř,'úďYCž:ü–Ż[["Â?:”Ý5×\éĆC\ůhW ‘3jÔ~˛çžC-ëŽ<ňo2gÎKŕI;ôéČyçýÓű9ąĽŁß~űW^Ů~Óđv2ÓÎBľľ5qňë°Ă‘YłfY‚ŒÚyÉ’ö)**” /<_$‡#éńK4Ă ›é°čgœqşŒąOŔ}ôSŚL5†ŹŇĐG´ŒzŇđžűţÓ¤ŰÍńÇk ?ŐÜtŹmó°Űoż˝rȖ!p´űĆůçŸçýŒóŻ{íľ×堃l2\‰^UŁáœsÎ9WÖ­[ď¸Ď 'ď|:é¤eęÔéM†ňřńǟüˇwÜqy䑇äꍯł„„œ{ě1rîšgKŹôßÇă?âý=Ü ß˙CĐ}5ĚtŰmˇHďŢ[ 2K§N¤gϞţŽSĐnWątßIś^˝ś6BŽ7ß|ŤcpB;˙ú×őFçhi€ŕúëŻ5‘†ĂÓaľcÉ-ˇÜ&‰rđÁcźŸ%5ů9ľÓ‘vJAúŃÎ?guşpŐɡßÎ y˝ňtđŕrňÉ'ÉśŰnct Ňż‰ ˙ 0Ŕűˇu~űm^Čýő đ#Žř‹ńwÓŢ˝N—˙őŻqňĐC˙5†/ F˙ŚkčGDfÚĹđÇ<Ňç7îšăŽ q ţ(­Ż}ô #¨Œţ]˝îşŤĽ[ˇŽÄŰĐĄ{I2͘1U҅~mđçĂߍh  …K_3B#ř Ĺ:ńÄă卯žś;^zé˛|ů2ď ęë#–Kťé‰m{čgĐ rĘ)'IsűřăOŒÎ>zňđňË/irRQOtžţú2kVc7= :~üňôӏ'YôęŐSžzęqy≧eúôéĆp%Ú HĂB:ź‡ƒĺD‡óҀÍÓO?#sć|g\ĺŁě:›~Ń Wí¨ţýˇóţży΂裏>’… ˚5kŒŽ:me Gvřá‡ĘÖ[÷’xŃPÇĂ?` ‘ňÁzOÖΗիWI]]˝´iÓZśŰn[Ł“‰oFKáĚĽ]ĚCÍ}ýőˇiüQěÓ!~žzęiŁk‘;Ôšsg2d9昿[† Œ–~Žč~:Dž†3ÖŽ]kźżuh=íÄsřá‡ďłDŇ÷ôîťďę}OmYoJ éI˙ÝzëMŢżß+źçfżVŻ^müpť=F°ŤGî˛ÓN;ȰaÌŰ>üR‰˙čßťűîťŰűď˙[oíńźYż~TTTďßkÜu×ÁĆߖ:|,ý›sÁçÁ]nPë}OiÇ1íěÓ˝ť>Î Ł{žS¨MA&Ü.ď˝÷|Z´hĄlÚTmüm+WŽ2:Üč‰vÚQî¸c<Ą …Ó/™ čo ‘ĺóÇ ţ¤ýL×á„t#íÎd–-//Oţú×Ăđq ˙Đ6hYŇ­O˛éĹ1ú]‡ɛĘô5r!OřţČÚůçŢ{ď’'žxJžţEŠŤŤ“hč‰äăŽ;Ć&,77W4ŻwŢŠI——wvÜÎz'‡vˆĚŸ˙ťě°ĂöFw0í„ÔđĆoĘÇâ¸íď—öíŰ `ŚáŸüü‰Gđha4D°iÓ&ă‹XŠMOŠü@ŞÓŻsR Ń* *..Š÷*€XüZ źź<şˆ)Nߣú^€hüZ¨’’ÉÉÉŠGߛú€XüZ°ŇŇRÉÎΊCߓúŢ€XüZ°ŹŹ,iÝş5€ĄďE}Oę{bőĐÂiŔ M›6RPP šžő˝Hč@źp™!JJJ$//O*++ĽĄĄA$‡íU\\lź˙ žţDƒ:UWWS}}˝H ÖKťüĐm @˘ü2/Œ jkkNnˇ[<ˆŒËĺ2†đҰN°ÓN?H€ ŚÁ„ÂÂBé'K¤‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤!‚?@"ř¤Ą€°˛źVV—×ɚŠ:)ŰT/ĺU RQS/ŐuŠ­wKƒ[€¤ÉÎÉËɒ‚\—”äçHiQś´)̑%šŇą4Wś*Íhn4‹ĺjeÁęjY¸v“,YW+ľőR…Ď7Őş˝“ČúĘ‘uÖíy9.éŢ.Ozľ/”Ţ ¤Kk‚@’ŕ€¤Ń°ĎĎK+ĺ×U'O€4ĽÁő?VŐÓgsEÚgËv‹dűnń€$ Á ÷ýâJ™ł¨BŻŤ %Ň`űŒß7Svů2°Gą ěY"H$ĚĚ?6Ę× 6ʆŞúűçgI§VŮŇŽ(KÚdIIžKŠó\Rë’—Hv–IŁC}éh´ŐuŠŹőHEGʪݲŽĘ-Ť66He;ŕ}5đŽÓóĘe÷Ţ­dHŸV‰ŕŠĂ~.‡ŰÁćŽËž)Ë4÷Mٛ×eŰ&ÝVŞóÚÚşé %Ě^X!Óć— üdy+üŢr¤G›éZš-­ Â=<šß†j,+oĹeő˛`M˝¸=÷m]”#Ăű•Ęŕ^tRE^^î0ďLýĺ›ç śÉłyî6MÓÜ>I€ĺ`sűmť`Ű Ä͢uŐ2yCzőî+Űv̓^m\tń@‹ Ý–yäˇŐľ˛`M]Ŕýt°ZKĎv yüqŢFđČPŸüź^füžŃq›v÷Ř=_tĘĄłZ4í4wU˝|ˇ¤&` Ą}[ɨíŰ €ćCđÇyÁ Ă,ßP+~żN–•Ő:nßľgž ěš+ůŮdŒďéď–Őɡ‹œťavm“'cvn']Zç €ä#ř㼍ŕAž_\)ďĚYë¸m@—<Ůľ[޴ƧĂ2×Ə|ť´Nć.wĘ2° ěY"’ŤĽr˘0ů—2™6ŻźÉú6…Y˛WßéŃ:K€L§Ař}ň¤oű™ú{ľ”mr[śżűÝ:Y_U/#úˇˆßĈŘ{ß­u ýěŘ5Oţ>¨ˆĐ`Ł5˛ÖĘZ3Űim­56DŠŽ?"ňćě5ňӒŞ&ëGlS :qˆ’%˛wď<éPœ%“çU[śÍYT)unüep€pń­<€°9…~Šółd˙m ¤k)]~€ph`žuA‘Lú­Z*kś ýŐXkŻ!ü l|3 ,:ô€=ôÓž8[ßąĐ!­Ąľ–ÖšÚLkn†ý.žŇä_ƌĄĚ:ľĘ–Cv(”Ö.9­ĽľŚÖÚÚLko­Á ‚?‚ú~qĽL›WnY§W%4 PŠr@ ´ŚÖÚÚŢůGkp­Ĺ ‚?ZžĄVޙcf 8?Kě_@čˆ­­ľĆÖZŰLkq­É ‚?úđűuMÖíżmĂ{qŚ5śÖÚvN59řüŕ蓟×˲2ëŐĹ#ś)ŽĽF‰ ľśÖÜfZ“kmNřĆ@‹ÖUˌß7ZÖíŘ5OtʉŁ5ˇÖŢfZ›kv41yîËr›Â,Ö+O$žÖŢZƒ›ŮktPXĚ^X!‹×ŐXÖíŐˇ@˛9z’Bko­ÁÍ´F×ZĚřę€Ĺ´ůĺ–ĺ]ň¤Gk€dŇ\kq3{­|{ŔoćeCU˝eÝŽÝr@ňŮkq­Őľf‚?üž^`=‰°kĎ|i•ďɧľ¸Öäföš@f#řŔđýâJKˇŸ,—ČŔŽtűš“ÖäYŚ,žÖěZť€"řŔ0gQ…ey`÷|ÉĎÍHkr­ÍÍěľ;€Ě•#2Ţň ľ˛x]e݀NÉ?\Xşt™L›6]f͚%kÖŹ•ŐŤ×ë;vě :´—]vŮE†&Ýşu Shm>{ń–z]kw­áť´Î™ŕůyŠu¨€ŢrĽuK’ĺĎ?ĘO<)3f|í¸}Ѣ%Ć4kÖwňŘcOĘ.ť ”ÓO?Uúőë'@K§ľšÖč ÖÔů×i OđÁňëŠ*Ëňś“sĄĄĄAţűßÇ䭷ޏÇöý4tŢyÉá‡&gžyšdg3&@´6l(“7ß|GfÎüĘčŔ¨´ĂâĐĄCźőÖĄŇşukAóÓÝüŃ~Ôöm@f#řd8"`}eƒ9Ë%ŇŤMâťýTTTČ-ˇŒ7B<Ńpť=ňĆoÉ…Ęu×]#%%%€Čč0ŤwŢyˇTUm˛ŹŸ?˙cŇzëňË/‘aĂö4/­ŃľVwoÎËk Ďp_Âý6ßć6WsW€eߔešűŚěÍë˛m“n+ŐymmÝtąéóËĺłšeţĺžsdôś’HÚéçÚkŻw ýěşë`Ůwß}dÇwÚëÖŹY+?üđŁL™ň…|űíě&÷ŃĄżn˝őf:˙$€´&MúT:vě ÇĐrhčçć›Çę`˛˛\2nÜľiţŮ´i“źóÎť2uętY¸p‘wš:˘űČÖ[o-ŁFƒ#šššŇœ>ú­Z~_]ď_Ţo@ÖŻTD.//Wżđt{§ňÍóŰäٖ6Ă~Ő××Ë믿!/żüŞ”—WHůD9r„ąü駓婧ž‘ÚÚ:cš˘˘Ę[Ă˝+'œpœ¤ş?˙\(&Ü-żý6_âiŢźßeܸĺŢ{œćůjÝ^ŤŰky™'KdŹ•ĺľR[żĺ‚âü,i]ncĐč<öŘ–á$´ÓO¸ĄŸ’’c¸‰=şů×éc>účŇô„Ř'Ÿ|öţuuu2iŇ$I_|ôë×GöÜs9꨿ H-úY´hqXĄĺëŘ3cĆLËz ýyäߌn6:éíO<޲ϗ_ΐT÷駟Éyç]÷Џ>î‡6_€[ku­Ů}´–ך@ć"řd°Őĺu–ĺN­ŰígéŇe2kÖw–u:źW$Ą ˙č}Íf͚cz[×ůśëžŠČ^łŰkz™%Gdʊkč¤8/ąÁŸľk­cÚˇo'ąęĐĄ˝ey͚u’L n5j?ůúëoĽŚŚV>ůäS9ě°C÷uťÝňŃG“ŒŰ;í´ƒtěŘŃX—h÷ß˙€ńúÔŔ;ÉĄ‡"Ýşu‘+dÌŻä­ˇŢ6B:ڝ硇î—ÜÜܰ{îÜ_äŠ+Ž6‚DYY.9r„ 4HZľ*–ĽK—ˇ~dŠfÍúNƍťIîşëÉÎÎYYYҡocŠÄá‡jt덏Ź2–kkëäŃGŸ0&'%%EĆ}RÉgŸ}./źđ˛DKk’+ŻźĚżŹˇÍuJ2† ‹†˝fˇ×ô2 € V]g=™Q›ŘŕO"4=!“Ü4:ĚÖđá䨨ĐX~˙ýîűŐW_ůƒI°ż1Oôů¤ŠŠ ™4éSăśWqÇăeŸ}öňžě+ƒ ”łĎ>C.źđ|cűʕ+ĺçŸűąëęęäÎ;ď2B?yyšrŰmˇČW\&ŁGď/{îš§yäßä‘G”ý÷ßĎŘ_ť˝÷Ţűš_ëÖ­ĺňË/1‚ťĄč>şoiiФŠ5kÖČţó€DJ‡EŐúÍÇţą‡~tŸ|XR‘˝fˇ×ô2 Á ƒŐÖ[ťÍä$8÷Óž}[ËňÚľąwçą?Fii+Iśüü|Łëúă?ĺ—_~uÜďƒ&óÂÂB#|“ +WގťńdIŚ]ěÌ-÷Ýw—źţúË2pŕ@ ×´i_ʒ%ˌŰÇŒ <¨É>ú|,ęÓgkďďh„tîÜY@j6lO7îZŁ›O şí†Ž5B˝ŠäÉ'Ÿ–+#žß´i3äŽ;&4 ˙ŘC?şî›Šě5ť˝ŚYę Č` śsŮ ž4 S§Žţ ˆúᇼ{÷n‹ďż˙Á˛Ü˝{wI&_ÇĄąc–wŢiěfóŢ{H˙ţŰYö[ˇnĚœůľq{äČFř':th'.—ËxŸ}6Y:č@)*jzroŔ€ţŠÉ“'óÜÜ9üđĂî§Á¨‡ŽüŠ|xţyňÉÇä­ˇŢńÖ*_ůkľ=şÉ!{Ă{ĽR§ŸŻžúZ˘5yň#ÜsÍ5W6‚T‡a0áncŸTeŻŮČýŕ€¤Ůe—]dÖŹďü˟>ŢÄâ‹/ž°,ďźóŽŇúôém„gćÎýEŚLůBÎ9çLKŔfâďüwƎ#ÉŇşu1boůěł)ňŰoóĺä“O“}÷ÝGvÝu°÷ő0†ůˆÖ‚ómˇÝ6iA&؆ eň曍žĽK—INNśtëÖ]öÜs9ôĐC¤¤¤Äń~ZœxâńƔ)4Í6H5 őd°d_-<|ř0ËňŹYsŒŽ?Ńúá‡,A"=I3|řpi.cÇdĚ7mŞ–O?ýĚż^ťí|řáGĆímśé+ýúő“dşřâ eĈ}ŒŰeeĺňÖ[ďʸq7ËQG+§Ÿ~ś<üđٞxń‰Ôşuëyǎ4ŻiÓŚËI'.Ď?˙’ĚŸ˙‡QčPX:é“O>+'žxŠ|ó͡ŇRh7˘hi]tőŐW4éöŁt˜ŇK/˝Ř_;Ľ˘dwíÚ8$2X^Žő Ţ# Ő­[WŮe—A–u÷ŢűRQQ!‘Ú¸qŁÜsĎ˙YÖ źłôěŮCš‹ž *)iěň3qâÇţő?ţřŁ,_žŇ¸}đÁI˛CY<ôĐ˙ÉQG!ŰnŰĎ{˘Ťń˙ý˘E‹ĺő×ߔ3Î8[^zé‘<Ź˜3.Š yičçć›ÇKUŐŚ€űTTTÉő×˙Kf̘!-ÁÉ'Ÿ(­ZK¤†*W^y™%ôŁĂ~éäŁŰtÝ7Ůkv{M łpDd°‚\kbŁş.ÁÉŻ3Î8U˛˛ś<ďâĹKĺĆo‰(üŁĄ˝Ď’%Ëüëô1O9ĺdiNyyy˛˙ţűˇýuž÷ő-5núéçĆ\‡Ă9r„Ä›Ű^ŤŚž}űż˙˙üç>yóÍW厝n—#ŽřŤäççÐ=ńÄ32sćL WűöíŒůęŐk4ŢëÎ;ďö)LCƒŰN———KşëĐĄƒœţyŠsĎ=§IčçŽ;&“=üŁűŚ"{ÍnŻéd–ąJňsd}ĺ–•ľi]Ř>ůË_7şĚř|÷ÝrÁËĹ_ ;í´SĐűëđ^zÂĘúQC‡î!Űmˇ­4ˇC9XŢ|ómăö”)_Č?ţńw™:uŞąŹ4üŽÂÂ˙íľk×J kÖDźÉĎĎ7~×:í˝÷pšč˘ËŒő“&}&C† ë1śŢş—ŃÉč×_“M›6ýŮęęę$77W@|˝ůć;–N?yyšF7œ‘#G˟~:Yžzꊭ­3–×Żß GyŒD˘}űś2jÔH9é¤RęďšÖV .4†7‹†/ô3yň˙:s7 _wĂTŁ5ť™Öô2€ VZ”mYލIÎÉ í:cňKƒ<—^z•\uŐ5ňŢ{xOâ,ňžÄŞ2&˝­ët›îcý¨3ž’I“>‘ćŚCí´ÓĆmvăťďž— 6ËcÇF6ĚWŰśmýˇůĺ׀űM:=ŕś+VĘL”˙ţ÷ą€ű ĐßčúŁ"éź´ß~űóşşzyűíwî§ĄŸ“N:MÎ;ďByçwÄόÖn}ú9ňČżIťvíŒIoŸxâń‹ľk×ËË/ż&Ď<óœ¤ýŮÌöţ ×ĐôęŐŤĺ–[Ć[B?z[×ůśß{ďý’Šě5ť˝ŚY¸Č`m ­‡eŐ:dTâOčUÔ×_÷ÄĘmňíˇł-ŰfÍúΘ"ĽĂ[L˜pq{˙ýGIs;ö`ůᇟdŢźßĺ­ˇť˙ôíŰ[śÝv›HĆ8Y×˝{W#č4eĘT9ě°štDúý÷?äšç^ ř|O˙ëÓçŘvŰmeđ`k K‡!ťďž˙xO ­5ŚŃŁ÷?˖­°,ľ_“}8`”<öؓ+­+N;íI%.—ËčYPot? ĺ믿•c=)ŕöiÓfS0EEáwpL„Ćš} {M łpDd°%ÖĄÖUš%YŠ‹‹ĺ–[n”G}Â{’ć-#¸‰Ź,— ś§|ůĺ ihh|ÝŠţŃĄłzčaŁÓĎôéWá|đ‰Ć!‡Œ•‡~ÔjâškĆÉA‘vŘŢšâ§Ÿ~’‰?–wÜ^,řÓşĂNť éďwăĆJš÷Ţ˙“ďż˙^öŘciÝşÔť˙zŁS’IŚthążüĺ0 —őqĹ—ÉĽ—^a rőŐ×Cn <Řű˙ˇČ{"rš|ôŃDzhŃc˙w2BQ qœ†§Ňş!˛˛RłłŒ†Î9ç,#ó⋯$|ˆŽ­ˇŢZš“˝fˇ×ô2 Á ƒu,ľž$Xľ1>'…ÂĽÎ>ű ă*ôÇRžůfVČű艝ÁƒĘЧžltĐŃ!î¸ăΔ ˙h fôčŃňĘ+ŻËzúȑűI44ˆóă?ĂyiWž7ß|ۘ|ştŮJ.ťě9÷Ü ďŻ]ƒţőŻë˝ÓÍFřgҤόɮmŰÖrÝuWK§N%ýűo'˙ţ÷mrÓMˇÁŁO?ýÜ˜ě† ŮMŽżţZă˙9ˆŸŽ];Ëďż/đ/ňÉgrÔQGXöůôÓÉN݄R…Öˆ'Ÿ|’ôęľľÜ}÷˝ţn†‰°˙ţ#Ľ9Ůkv{M łü2ŘVĽy’—ă’ÚúĆŤ˘+kܲĄÚ#­ \’L}űö‘ńăo–ĺ˗Ëôé3d֏ٲjŐjYłfäiÝş•ôčŃCvÚi>|¸÷vw˙}ľĂŒJľđvřyőŐ׍+Î÷ÝwŁĂQ4˛˛˛ŒaŃ>úh’Ń=çĎ?˙”úúéŇĽłńłvŘĄRTTô1tx°§žz\Ţ~ű]ůęŤodɒŲiSľ´jU"Ýťw—!CöC98äă˘ˆžxâQŁűIś|ů2ٸąÂč*¤Á ŘßčÎâoĎ=‡Z‚?O?ýŹ19r„1× Đ3Ď<'ąčĐĄŒ5RN<ńxIuűíˇŻôéÓ[îźó.ůíˇůoŰmˇăЊɢľşÖě>ZËkM s…űmž+ĚmŽ0ćŽËž)Ë4÷Mٛ×eŰ&ÝVŞóÚÚşé b/Î\)ŹŞń/ŘŚ@tJżkě”víľWCo´D6l“O>]*+ŤÂÚż]ť6ňČ#IiiŠ´d:źŮkŻ˝./żüŞ”—WHôŁtxŃż˙ý(yö٧äôÓO–ţýˇ•‰TaaĄlżýšŕ‚sĺž{&4kčGŮku{- ó0Ԑázw,ĎćnY^°Ś^úyO–¤áeNĂ~ä @KŚCjŽw­L˜pˇTT8wţ)))2:!îşë.’I4¸Ł Ň–ˇZŤ›i- łü2\—ÖyŇś8[ÖW6ËnČÂ2ôiîČŔŠEĂ?yňŕƒ˙•ÜÜ\šôҋ ĽÓđϓO>&o˝őŽĚœů•,Y˛L<ˇtëÖŐ¨ĆŽ=XJJJéKktˇŠÉżÖđZËČlá~“ď s›+Œš+Ŕ˛oĘ2Í}SöćuŮśIˇi_ÚŹÚÚşé *Ÿüź^füžŃżÜťCŽŒŮŽN9@Şřđ×Y°ŚÎż<´o+ľ}[źźÜaޙśŽ/ßĹůYŇŠUś´+ʒ6YR’ď’â<—äş$Ç{4@w $“vńŠ÷~Ĺ^]ç‘ĘZTÔx¤ŹÚ-ëŞÜ˛jcƒTÖ¸C>†~vďÝJ†ôi%R Áçm4ńýâJ™ł¨"č`@KĄCz ěQ,{ŇáHU-%ř“#`;{Ozč´|C­üź´R~]Q%ë+h)ÚgËv‹dűnĹŇĽuž@2ü4zD§Qۡ5B@ VWËÂľ›dÉşZŠ­÷.ňr\Ň˝]žôj_(˝;öĐ,ţhžа~ĽĆňĘňZY]^'k*ę¤lS˝”W5HEM˝T×y¤śŢ- n’&;KĂ=YRë’’ü)-ʖ6…9ŇĄ$W:–ćĘVĽ}4?‚?R‚ž8áä áËi‡ŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†ţiˆŕ†r€ŸÇă€LćršńC} 2őe|Q_€LG} 4Eđ…c€ŕBŐKX[Q_G}ęK€ŕ¨/Śţ Eă@ žěőUŚHS_Äő%ő%@XN÷hęK€řŁž ˝Î‡ú ´LŽ/;‚?H[á0ë˛Óşp/Řz€tčŔ6Đzű ÝϡŻÓÁrş@S_ĆúҊú 6ԗ@xţ -;hö} ërCCƒąŹˇÍëÍű 8ߕ2ž`]ÖŰ:ĎÎÎśŹ×ZËŠ…nި/đüAÚÔňV?¸ő@Y˜uň­Ď–RľX˛=ËDęWŠ4Źóî\á˝c­Ţ[ ďŻ+O$ŤÄ[hľóIl% ŽŽRíî! žVR[[këÁłNz č:Už#­/×7dÉ5Ůňç&—,ŠöČŞjˇ”×y¤Ć­'hВ0?Ë%Ľš.éT%Ý \˛uĄGúä7HŰlwFԗőžlŮäΓʺ,ŠŞŠö֖ľ ş?ß^DJ+B-ó˛E ź5fQŽHqŽ[ łj%ÇՐ–ő%Žp˙ĹşÂÜć cî °ě›˛Lsߔ˝y]śmŇmĽ:Ż­­›.h‘]%ăť:ŚŽŽÎ˜+—§JŠł~öţƒřA¤nĄ r{‰;o'Što/W‘ąJžsssýWŃ8,7×t$őe…wöMUžĚ\× ó+j ú•dɐvٲ[Q­”d7Žk)őe˝Ű%݅˛ŚR¤źZĽ"ŠEZem’œŹÍM$R¸žDňäĺĺóÎô‹ßňÍóŰäŮې+WÖŃÍ ™hŠxŕVš˛_ë:i“ՐÖőeƒäČÚÚBYśÁá—ÍD+ĹŽ­]Ň>o“dK}J֗H.‚?ÎŰţ .œ˜}“(×ÔÔřÇÁn=S˛Ş>?ŠÂ%î˘dCĂ˙řŮůůůţgßdšG‚ #Š/'UČkKë ü¤-č–#ű—T§e}šžĄ•,Zϡ—ŠB+ŞmEÚfoL™ú̓ŕó6‚?ˆ™ů Ů<śŢ֖¸zĐŹó‚ě5RX÷>Cz¤ŞÜ^˛)÷`Šnč`´ĚՃgűŽžQććD<‡[_.kȓ– Cz¤(ěŘ."]łkÓ˘žŹsČ⍚ 鐢t°­ę$×SÝŹő%šÁçműAłyŇś¸zĐŹˇ[ĺü"9•Ż ×ɤ:—Ô)ëűĆzđěkëtőLźžĂ­/gWçË# čňâ´\<łWś .¨Iéú˛ŇS,ó×fńí%@ŠÓją_{ˇť*›ĽžDój)ÁŸ,R€ďŕŘžl?hÖ+gJłgKNĺ+Bč xŒÚMk8ߐZŰŮë=˙޶娟5‚úrJeĄü÷OB?é@k6­Ý´†KŐúrƒť•Ě#ô´fÓÚMk¸d֗@<üAł 6śN:vmm­ńAŰ:gŽdW˝+H/ZĂi-§5ÖvZă:xVąs hÎXّԗłk “ŸŤŃ'ŒdHu)\ßčÓ5Ö|ÉŠ/Ť\%|{ Ђi­gÔ|1ԗ@2Đń)Á>>ś~Œf×ý(@"ńˇÂÇĹ H”ĆšogŁĚËËóׄń¸"Ű^_~ľ>íwS °ŕ‹ޤ^¨FIĐkКoxORęËľU(´tZó•Ćżžâ‰ŕ’Ć~"¡lQS‘:ĺ¸*Eę çľ šâńšËqykžœÜJŠw—řŰäšžíŃćĺHęË2wŽĚ݈Sđ'΅lńŞ?b:ŮáôâpĐ 5ŸÖ~m¤!ĄőeƒäJyľ …ÓšŻĄ0×[ÖG\_ÉBđÍĆé@ZÇFTE9Ëź' ŕ-H°ĎtŽƒ2›Ö~ĺuŰľ`vvvÔĘÁęË?ëňź˙!řcQ’˜p…ˆ—č ň`5NT';̏ĂA‚Ö~ƒň7%´žŹ‘B@fĐÚŻH6Ć\_‰BđÍLj4Ž”1œ=’+Ë™)Ţçĸ‚+^4ökŽ“2KcíˇQ jMčtĽL$œęËE5YUđ'ŠZ"şúƒš4§hj‘ŕľšSMQ}çť5ĄÖ~ƒň= ­/75d 2ƒÖ~EŮńŤ/x#řƒfa>đˇßvť=’Ő°ŠS"šÂ=Đ|B}G˙Ĺşů1-œÖ~ZŤCý[ U_.­‘ČDX_„_DXˇPç€ć° T§ŽŰĚ5SŘÇ Q€´öKt}šŠ^ďO­ ´ösťbŤ/D"řƒ¤t"Äž^’Ćú†u‚–-ÚsXц|8gńÎqLĚWů ! LŕŤý|ľ }€ć`ő@ úrUu˜Ý~"(B×%aňš" q<Ղxk?ďáň–îqřűmŻ/kÜŃȑ`kDňçŁ~‰K­ąšTĎřkú ᅀ اfó0_‰Ź/Ýa6”@úÓÚ/Ţő%Ob<ś9Z‚x…t<žčďkě#€xhrínĂy…Š´Ő?៖$‘5 ď í@›c ýxÂzź€÷&LĐl\ë— Ç c(Ęályş֗€Láq¸¤‚?*œĐOđqÔŁ¸Äöœ€ŚĚ_¸úľ|}č ˙vó6i"ÜŤ| ˙ &Q˝:đăx_ÇNjź ‰:eńÜxˇ G’ţŽá~ÇĄşœ@apP ĂüAŇŮÇĂ6ŻGËk—çseö•Č;ÔóśŘňÝź'Č>›żÔwÚ&Mď((Dř'łŤý[ˆŞžŒ*ôEŕ§Éăx‚oš!Ć}@f §g ťŘ×ĺ˛×".Ǥ“š.ÂP´áŸ¤Ő—ČŃԗ@˘üAłă€šĺ‰ĽËO¸O˜ęľđĎbăręËź%T(P(œƒ&Â?-OXC;šoˆ˘¸oŕ@Ođ°Oˆ OTÀ5}\€¨xœ*öÂvż&A ËS¸š EŘý'ÄAABëKdœXęK ŢţHşp:öýO“€í^Ą‚=Nűą ú‰5đă°_“Çj˛Ÿ,H< óâĹVo¸ÄĺźÝRŁ7 ćXęs§RĹtŃ@ Pčî?„ ƒüń ý„řąŢö8ŸW“đƒ@ĎËI4™ŠI×qůŰB}lÝ}Lß×[o7 EŇýÇü%?]–€c ý„řqxŒ€"‡šÄCǐ śÂšIbîÂ#Śc‡Ž=žŰMšőŘ/`(d÷ŸÂ?ÔG2ÁIič'Tŕ§é:óóH蒝Ó06ĐRěŒo ďŘśyŹÁ Ś]}Ëżĺ$@ ÇöĄ‡ő |…/áD/DčÇ1ĚcťŃ$8ěă‘Ŕ q OS˜€8r¨-\öT}ăĘĆEą.ëv—C§I(@¨qťÇşĎćî?ᆠÓüAłiډ…“é*’n?öŽ˙v€űŘϓٷه÷rťÍ¤4姇ÖeZHhIœ>żíŸsśďů׉§i‡qúFß)8¨űO´á¤'§1Ü˙Ǒ֗A˙î‡ú‰8đcűxB<ŸÓërŘ .ĚÝ{śŹ”Í+7ďŇ4ŒcÔ6› ü&! ëC7)kŘüŘá†BՋɬ/ĐňĹR_‰Bđ͎ć–+–ĐO¨Ŕo/üŁÜˇe˙~âüźöÇSMŹq8ńĆo-IÓ sˇŸ-!çáľÄľĺó۲vOs9u˙ 7üH¸ű!5ĹR#†s߸†~‚~…}ƒ>ÎŻÁşóKˆIăŐPÖUF1mţŇÄeŞI6}lÁœ&! ˙z˙ClŢ_l›ŘđoŸhńý%쨑JţHˆHC?ÖŽ=ÖNMĂ@[–I„…Ä90d>óöPç‡ďFř@zrúčrúöЏ?ČFŕ§ńţq7=żćßĎm[vz-M—Ă;yĆIfé(ÔGœ9Äłeďž˙˛šűSČßÁgó`ž.@–PG,‡ţą|ß/?—íű*ŕßűĄK—˙ÜŘ1‡{Ä!dzŹ&ë,/É!dy-!ÖDŔăT0ŰÖméęi šĚA ńwîń€|Á—e÷Ćç{~Çľš†ňu 7üczLžŤĄţˆť`áxÇžÜäbřÍáwÓÇó˜Nź™÷÷ ýĺ_vx\óc;q…ąO8éĆĺr…ü\3‰îťwËwüć/čÍËâ_ďňÚ'öđ_đ#zAşč ýXÖ;|Äăř1…‚š„}<ž×v›Ž? \N]s<Śućc ďë´yŰćŽ@ĆzS' ĆÆ- {řÇ˙ć’Ćl$ücyŽd6‚?˘Îy&§ŔM8Ą§@yH/ßvˇi_ˇŚ„ĚŰm!"ëë2_Ń/Aˇ@&p Îü?{lšr‡‚+ěńŒ5×­;ß˙yI‰ƒ8H–(QO!Ú˛,ł-ˇl‡ý"­E[í_v8^w„tG´Őţëĺn?ʴݖ´fŃśHQ˛DJ$ÎĂ%ďPw¨[ˇŚ3ď@v~+‘Ř lě}öŞę ëŤÂŮ{‰D"‘VŽüň[J•ˇëę}*I@öˇOčÁş ë˙˜ďřäůĺƒ{ ˙řž‚y §iô4ňÍ.¤Ÿ˛Ę.|Ś~źăUł˛źeűDě@ ‡Ëß)ŮŃ>éß'Öd„ íŠüH@™=d @T$QćŰÁ>%ĐDčŻÝČ?ăNůäé@ ‚Ó!ţ‚CĹ4BÍ4"Í,Ňˆ~šie’q4@pÚĄT™ÔSŢ^Vđ)<ż??CÁçAËÉ;ßĂPQ˜%‚ł?Čóź§§:´;ůÇĄŕďö‹¤ŸBš*ŇO…ĘO9¤—vJyߊcéI㈟=ŠŞÜ@ G)´—§řă“|rŰ^ 9çăT€| AD•ę?Uäoë.ä@ @ 8˝â@ ¸§O˜×ť’~0X Âđ=Ń'žŞO1Gry•óöO~/œÉ8š@ 8m˜Fô)o› í5™HĺĆÎűŐ}@RvđČ<ˇĂ”Bm‰@N˜‡üłŐ8LUűŠNíC%Ă`ҏŽTřIú]Ň˝Ži˙ƒ<ݘ4…tT2^Anżę„2 ^ Á4¨*Ăżđ]ĺ6šż^yŰ(ŞSĐ^¤°ŮfvOQ(SńÉvgňGô)xöVšz(Í é%Ş?@ ŕôBˆ?ŕа›Úž‘ŽŢ+I5‡ńbĽˆěs'4ĽŹě“O.Łńŕ“JůQ:~af™ÁéĆńÇwŞ—Č>.ý4{†‚čËŇf ř;“R<ťSR Q- H‡…URJň™5‘7'É3[pč)J;T"ý8˘ŽGúŃ>9§ŠôcţÇ[whýłżG;_ý3ÝžVIŘAČ;GčI’$_‡Eł”N¤ŤZW8*ŢłţöIrœÜD@ GĚ"ˇĚzżízűśEŮvđópś‰UőL'Ň}=šŚĽ§>@gŢ÷aŠ–Ď‘ĽđĐX¸ÇĽu} ĎU“‹‹f1ů‡DőG @ * ā@°/Ě;>4ôăM’Ÿ$ý$é'ą„¸x@öŚúƒ„TĐ ¨ś@)a0,°NŁlčMgޤ˝cŞ"¨ę&hÚ ‘@ o¨ůVW)ţhďwŚÉ3Ţ>AR,ůĺ6 RŒş4 ¨Ůˆ¨^#Š“ńť€ŸáZĺĘ>™ŚONꁌ‡üň!3|U˜KíÇSŰ)&ŸBúńHAŇOj×ßü˙‰nüţ˙NiÓ,říu^’[ü{Î-ĺź§‡\Ýżr@ ‚ă…*ÁÁ'—íƒ*ű­÷÷söJ†ü9şöí˜ĺú'?N—?üżŇĹý­íĐů‡óP3Č?äř=šü_“÷ÄƁ@ § Bü‡‚ij?Ői§íg >$†żŞ?Źâ“ÚőqlއšjEáYłGƒŇ$,’Šá§D8ňŒgçӔN(Ÿf‘ ž '•ˇśŞü:&őšŘWy*ďSeE#óĐ ožăĂŐ"ó@­ĂŰ?VkăglŔˆüđJTTôńC~•ąŰD_™,¨„7Xĺ­,n÷I?UY¸ď:Ím‘tÔ§—ţ÷˙;m}ýsźŠj`ÍĄ<ăäŔ}úßý7vţ,•ŸY¤Ÿrz@ ǺҌ™´ ŚŮ$ÎĆp䝙ßŰĎŠÁ6)+9‚˛Oâď&ݍßý˙R÷ůoŃ#˙ë˙FA­É KčŘÖRžÝS,/gŘ-4ŇKŒ}@ @pĘ!ā@p×°[ˆŻ˘úĎX݇gdťŘ^At–ÚŤ—ŠÖźLͅË&eͤľ3ÉČsM oMĺůLn8Ĺüž T î6xx?1mâŹí`Şň‡˘9VSŠń8Š?ÓÓ!ĽIŸÂćmJ†ˇŠ?x™›kT‹…!R–[&*KţQŞä̧˘??×Ңî#Ř+vSűq\]ĆWűńU~2Ň@/~ôŁď~Ľ0X6ëZÝŢŤßĂeÂNy€­ŹTVráĂ\Úň @ ‚ăƒÝúâóôáńݑv€*űÁ­‡Ýŕl ˇß´´ĺď D_ý˙ zâ˙ü˙"ţmŻtۗŠŞ?D]ňŤâěˆHlÁáB¤@°ġ"î7„ř#î)ĘýdGúącecĺˇpŘ/Ś~†Z‹o˘ĆÂCTo]&ŕŕî`"ü™'ů]Ľ p? Ó$Ëý‡łŇ ‚ĂƒOZŔŔ@Ěł|`žŰk÷oĐć­-ęwnRťQłaŐÜđ,WŮ'ľőřť`by˜ŻÝC~UĽŚBW͌Ż0TŚ…řŇăő9éÇüyéă˙Oę|ďŤďĹ Ścú€œkÇĺ_@™Täî9wŹňĚ}—Ö˙=M@ ÁńŔ~í]ß.mŕ=.OGčqʂQń:„ńšFú™ŚJˆtN!6lĽ‡˙Á?g›ßRy(˙v ůĺmąß´¨ţć‡Ř˝@ ¸[Řď;Fü—ŕ° ā@°gL’wôômSŇ8˛OUŢVá'eŇ„Gq@qRŁžD‹í+ŐĎc/1ˆî&Ş$Áń™$ FŁ|ŕđ¨ĺ­×럸߁ŕîÁ=ç'IĆŃ6ĚMx†×‡ľ Ł&Rňs~ÚŁ\g$ 'éVĽúS<śÜă‚ JígŇI?_ú#Úřâ§&Bs-//ÓĽK— ‡ź~ý:íěěˆ;ĺŮ÷Řđ.sy–‰?n°ďf÷~ögî—ÉBeE!y? @p|á“nüw|Őd?ż ]ÇlG8rowřŸĹĹENŰď÷yťO:vé`ż /ä ?‚++lĽĹ7ž“Îźóƒcň˛>˘]É?ü1ęŕ´C>@ 8.˜őύ@ Ř „ř#î ŞĂST“†|ľ„ôŇ<€eż'ŠŚQl–Ä zQ›ÂĆ3`ź`,7;mґ%}űĂGYMŽ>8îŚÁ„ÜĚŔűe ÂÉxҍă˛S×ÍÎ< đgˆúp3>łáœďŽk­Vă6=Ŕ9׍ĆÜű~řŸ*ŐŹŞ´îZűI!dM…gˇyfaŰ\˙şyž÷ â>.’|ě.: V•×řˇt~{‡1ŞVű™Ë†đH?ä‘~°îÖţ˙*É;řjľZÔëőřwťÝć{ÚWÜ)qđéH?ŘןV Ô!o÷ţÜ;Đűa<Ü@ÜG@ o¸> ëcůśy¸źŔfp—(+ÂvM2i0äý—6ˆŰů?žÉϡoߌľľľBynę?ÓęühFčqj=4&˙ěbŸXžĎ,Ő™pšpWH>â\ÁAqţ–*"ˇ@ LƒÁ]GUH(=5ÄWi[>Ł ážŕś rƒ‰}:Š—wćpňVŕţ€%ź;vüaF SÝ>P×pźş^8cQßGĄŕf‚–ŐĄšÍ&Qłą˝˝MwîÜáďÎqž´´´ë~xnllĐúú:ˇ ´‰+WŽĚľŻŽœůŽ4´ńÇą–Xp¨ŒhÂ0`šgyŔ„Î(ЍĤ2b‚Icžé;–Şůeé…ô˘éáž‚š0ÉJžŠöă“~|՟îwžDýWžŸrKČÁťßńœö‰‘Žœ”gŕ;”U„Üv‚đéfçťA8?ʆ?(çŕBu@ 8žpDŘnňo_8{Ŕ-x˙űaťđ [žŰí˛Ýď+Î^Ç‘~\ý˝rz÷ů"?샴N5ȕkpý*ŰNí7üŠá'űŽó˜Ąú3ľs 858°+v°@ î6f˝köiťřď?! ‚2„ř# 9IÇ9sJŰćéSłęOŞYńGó§]tÎ(†Ÿ-8ÂÁćć&ÂâĎĘĘ ;wŽŒpFÂQBHyPŽA7€é;,Ť°ő“y€ňŔŮéH4(3Ęŕ<ŽŸÎi 8窛!éęŔÍtÄŔ.ÎpŽŐĂ2Č]X(H)HCŇÁt%ŸYŞ?U @ĺu2& ˜˝ËV]4fô8ė#użýĹŠűăžĆ=„çł{–Ń|˘˙\Ćý…mţsÔOďfŘť0îXĺ™ţj‚ 흟ŘT@ œ”mcßđU|Š#ţŔŽ@Ăms}]GLvv?ú™Ž/éOđđ‰ĆÎ~šyó&űĐŻq¤$WFüŢůćçŠýúďw4ňË&Ť3*šP-˘< @pŇą/ťuŸśŽ&ą‘@°w¨yl“Şwӝ–žm%€Á]Ĺ~Ô~Rí~đ=ßÇ0cCFyłĆĆCç~ÎťgŸ}–ž~úi&ĘŔˆÁÇG}”Ţóž÷°âȐúžqă@,pŽĂ‹/2ŮƅsŽÄŞPQnĆáaĈ^xUR@VyŰŰŢFŻyÍkxœ›Ď?˙<;,q\GžąD‡+ظ˛ ÜX‡2b€D |?,CÇqŠ0ׯ_g‚ˆ?ţ8={–ëřęŐŤ\ŸŽ (7M°pěâˇSlqu˘‡#=¸Ž(#Ž…öŕŽ#ŽăČ;¨+”ŇďĘţŘcM\[8qmp.NA ůăš`ڎť.ţő8ŽpJINj@9œë4âęűÖ­[ů=€úC]=üđĂy{đkƒk„űm ßŃĐޑÚ ęľH˘ŃůŒ_¤E™_yĺ.?îu\Ësç@VbşŰ‹řWęž˙.LB ŔџR…ăžď Őŕ ˜´QhŞÚOqŸ1é‡#Í˙žçUžš.FÍQ€#€t ƒŽ€OŹyÄ@ΙŰÜ`$ˆ 8eEšáŠő‡‡Iî€STŕÔůÄP7h‹˛Äƒr9âŇŕÓŠŇ ÜNíÄŐ8ײ’Í^áś q\ťv^}őU.—SÍštéRîĚĹoœ‡ b ęepj.(ˇSrjN}ÉW×Ů\žNMÉ9zűŽ:weDŮA:r„0ˇíÂ9ŽsŮ)ăŕ<}%”˙8p^Žüƒóp~ <áÜ}˛@Řő 8…GFfíëfđ˘ŽA$C9PŸ¸n Üt×@:´/§N‚ëˆg9ëüđnšĂ}YžD6Đ@j"‘#…şçzUŸ5đÂ}ŮőâěĚÂX­gźj;ŚBí'ßâ…âľÓó0iÜso|Rŕ?§aýuţě}?>qČßÇW@p|ą›_ĆW,ŻsŞ?€ł#|U[—v ?ŒˇSrů•Ő†ŞBşü™üżq‹,‰ÚíĂ)Ć2sŤţĐxŸÂw!eœě‰\3Żm˜Çź‡y ŕîcÉźĎöŞźŞŢCS휲tÎr‰ŸG 8˝â@ 8ŒÇÂĆ3ąĘŰgŠý¸}-éÇîo•˛ßÚ7V쐹vłĹÔX Bp4ŕHp‚đáRH? y€Xŕ~ÎU–üŢŮÉI Ë@ľÄŹ 8UšóçĎÓaeCš\Č)i@Şš|ůrN´A™QV” Ä8>]zGzqeƒű¸ç…pg‡äŽçž{ŽV\1żÓúŮç"ŕœş.œÎçěČސŇ ^Áé^ő‡2ť0aîœ\Łm œ~C˝Ćíƒ4řÍáĽNĐnÜľC{Bˆ´ÝŕČ;€SäqÄ:\óťét´÷n‡ď…ŐŐ3LúárŘš¸śBÓ'î+žŮ‹[;/JŠ˘ÓžéÂÎďNT(e!ě=1F0ĄöŁÝŹůÉ_n]:čŇ~Quoúfĺ_ĺ}QÖíăfÚű¤Ÿ2ąH ÁÉ@ůý>ë}?üă>íŕŤůĘ?žrPŠŘ­óIÇžŇOŕŠ6'ýΘđŁu1ä—Sýą+Šţ”CůŠ?č¤bîţëŒtť}ć›Đ(ä@ 8-8č3żl햆ÓyďŞJŸĎœÄ$ń˙§Bü{ÂŢ&ÚĚ)Ť›|\ţăŮh(÷řxyŤĚˆąÓżGpâ(ă”J@:aáÁdR~ €ƒß hř38AŢp*" w 3Vą ×ý°]@žAYœSÓMp,œĂC=ÄD|Çâ¤ĘÝlHěƒô8wfpžČĎí˜až\Yq Ađéfc‚täʂcşpcNA eÁžîz€Dă–PĎŽěHwPҏ+Ž•?píHaX …öáB‹ů2đ(ˆ>Xđçć‡ŔB]^€k+.ä×qÎ ×ÇۜŁÜľ˝Yíő„P`¸˙Po.ŹÚ.Ží´a.’Î9óńݗď/ĂÝ#h?(3Ž%öEťÄuˇaźLůC_…÷ši ĄĎŤ°Îzc‘ŻSť*ŕę]7¤ł+(ŁŇFńˆ<ë iˆČSŇ>Aˆč@Fž{ť6 Pj|x§-ܕ‚ŞÂ{ůĺ”{D ‚㋲]ł×YčŽ<ě“wœýáu\żŔő×|ľAŔő!üüĘáżr›Ćí—~܌öŒôď3ůu™ŐŻÇćZ!ZěšăťIř™–÷\ǐ@ ްG˛O9*O€tëiô)›H 8â@ ¸+¨˜(_XR­KëJłíő8´—vNé_yŔy÷Č#0A㥗^bĺ@ôqä|ÇöYĆç,eˇD†Ă .$™#Jŕˇ#ŻźöľŻÍ~ü‹~™qnŽáŽź AĚ"PĚ äâˆ2ë˘N„  Ç<{ö,osŞC¸ŽE¨A=Č]…đ铭ö §ü„˛âÓŐĘŕČ-n›#ó ~QVGn‚’ĎË/żĚ$´%`VűŔoä{œáˆe ›HăÚŽ“#ňLî-ÔďŐŤW™ř㎎+–i¤(ԛk3h÷Ž „ßӎçÚ˘SöB[|Ýë^—oËřłrsŐr×sLJĐş¨ęc7Ű€ąďwR@P‰2‰g—´>šf˛ÝňˇÜ˜)‡´Ŕ˝3~_°ŢŐÔC÷ÍBv™/Ąsń€,—•#péĚ÷ÄŮX,›ĺ{ňYV…+žŚžpE Á‘Ĺ<ďói¤_ß~÷mŔ||EAסőűźĺ<Ë!Ä*ÓjđCE˛PŽúŁ2 +÷C3*`YHp\pÎ^Č>S3ÇńĹvCŽ^>=Ě$űLńuť÷ÚTA BüűĆÔ¤‰tcbO™ŕă˙o/“‚Ź‘#ÝęŁGi¤9@"p¤lŃă0$3ËJA2oxĂrƒ §¤ăˆ48ŚSńŠ‚SJqj9žcs7Ľ–˝daPÇNőÇéő_éېŰÝoŔ)äŕ\Ąüƒňăœq˝ŁŹ¨+§ 䜧öäęÖĽÜyšspućČMhKóŕ¸+ţe%ç4Ç5œŐöa Ş?NqëPťŠ÷8˛öŮ@]şë3­M8rŃ45Ą0ʊg=!š’“y\żŐ„&;ÂՄťE Ř+&Ź– Ÿ‚ĄâöÉҸ´…YJBnY*›Śi† óv”IÇď ̞7űB(‹•˛Ćlœ.łÄä .g­]YtąnŰÄٗÖľAŒŞ"ţťuÖ~âÜÁiÁ<jĘéŚ|BŻĐăúnUSN ý§úă>ý÷6ž;ĽÚ\0#ô°˝CEPĄcŕzĆüŸ’ ôŽ=öKúŠňÎMöŮ )hÎí@ 8˜5ÉĘmŸxϨjEf‡*ŸÇTPN %t@`!ā@pßP5Ś6ţí…(#ycfâŇš˙˜f0‚ €d2ŕä;ޤ (ĺ`Ů ‡M8Ú/PPü™>üphUĄŃ@č8lĺ$(#'ó¤›Ö.ЎœŇĎi…›];Ď˝ăŇ:…Ÿyűä,óŹü}gÝZ'ćsěSéŮŽ ¤Ÿń>ĹÉşö84ăEŐ éĐ ö=n˜Ĺő¤‹dŸěŁŹöă§óCf„ ÷mDA¨ňÁ/G{Ăx–ň +ödä<=śb E~{OKÄYČKc‹ÉtÄ''U—&áBşte•@ Eřaž|TˆËďT7ůŔ’“- ČWĘ“˜UáXŮ6{Ű0n"€ś[œ|L˛QŢ 1ŕí‡(žěJŚŃóŠüĚElŸ#ÍěňńG “ţLU¤ iD *О @Bţ$ā@pˆ¨rUŚŁI՟â''׋âĎ}A•łÄÍôĂ6•™NUĆ+ţfÍr÷Ú#iĺ}÷é˝đ^¤':śłúľťôy§{I\|ßyƒTZωRPÚáπÉ?َ6 ]C–ŹăśşüUžn ˇN ĐYŘ/í%ÖĽ˝Ž#ńÇW÷Á ĄDÄçn3ę‚“€~żO§.¤T ÁýÇ,ĹźYjAUđCžúĄĂü…áŞsŐ•é%j"?Œjž^ÂZœ>čÝU~v%üĚđYVۖSˆF{°CĹf‚㉽Řłü’s§4ăąLř™Fň@ ¨‚Á1͈ń <ö÷ě0_ăuă6‡Ü ůŹ%ÁĄ`–ÄI|ĎJ?0kfbY.SŒ\ŕŢÁŢoŞ(Ďď¸^ş˘jŸ\{÷3˙ÍŇ9‚|‡Œ˘ą2e]ő{˛â ßńཊ(ŒšzČ`˛çD"ó/Č$ŞäŸËśSǕřăˆ>žĘ@pZpóćÍ|Ŕü$!kĄhřŘc‘@ ¸ż¸_}äÉţš.w*Ă}IŕdaŚ­ˇGŇĎź„ŸÉcîNÚÍ&›U NŞžçť…VÜ>9ág;ĄL\ÜXI:(ůG œ|ńG Üu” ?vÝěďţ$úü7 ŕ¸Ăqwô”…7g*@{%÷ŒŠCÁ.¨4LtŃšăÍ@wşdœŒĂ|é ňONBدІýršĚďJ@Ůžľ4§˝U”ľP{ ˘‚ÂĐŹA†ăJüńż;"Uy›@pR1 Nń§<™@ œFX[J+…űĘÂzéęp_Tür›JáżdŔëXá ¤Ÿ™Ę=$Ÿbú=‡hF9Ĺ6‚S]"ćTmߍH]6YŞÓU€|_Ó¨*ô× [H&D 'Bü‡ŠyşťeŐ÷Y ő5îĺĆŘ`Ŕ t“ ßdm Íóŕłx$8â‚ “‰ĎL¤ŸúП˘ßű˝ßc˛ŰŸ­V‹>üáÓ˙ř˙ƒ677ů8EâŚO˘yç;ßI?üĂ?Lżó;żC_úҗčGôGéÝď~7}ôŁĽ_|qę3ęʕ+źď_ýŐ_ŃłĎ>K?ü0ŸňÇąžüĺ/Ó_ţĺ_21hp>8G” ÇzyŸŕź‘'ĘőĚ3ĎĐĆĆ€\Ypnřž[ŢÁýAÉÖRşÜUŸŠ˝¨čě…ô3‹đŁw#MË›Ş =b— ÁÉEŐž*{Á*™ ĺĚF• Oz.Ť˙ůG œ\ńG Ü3Lz*ĆŇüďŽÄF ea2jěäôgŢ ńG Ž.´˜ř“Śă+Ę#÷h]$‚ÎňńťuT'[fŹvÇŽŽůІIERTÎ×T( ÷ĹiUoÓfú3`]B1Á9°$Ąĺstĺ5ŻĄÁˆR3ź$ÔíěPkÔ§ —/Q/ҠףšÉłQh{s6Ÿ{‰¨ÓËd‚& zC}ůŠ?>áG œn|đƒ¤őőuúüç?Ϥ–żö×ţ=öŘcź :żů›żIoxĂč~ŕ¨Űí2‰f{{›ŢűŢ÷˛"Ď׿ţu&ôœ9s†–——égögéšçžŁ/~ń‹L˘ůŔ>@żđ żŔi˙ŕţ€ŢńŽwЃ>HˇnݢĎ}îsŹ˘€°ó–ˇź…žűÝďň:„ę=řâŃÓO?Mög–—˙ňĺËôä“OŇg>óţ Ő G}”ž÷˝ďńy€€„ĺőŻ=çR€üąţk_űďÇüÇůPöW_}•~ćg~†Ďç7~ă7xýűß˙~zík_ˊDżűťżKo|ăé}ď{Œ>űŮĎŇWżúUŽ üA-÷5ĄćCcWĎn…Ş|'ť’~ô,ROZú=ěS؟¨ň˜ĺ}&W H N&üĹŐiľ.X4ăĐ\ă}Tĺ§ć‰“ůČ őŸ˛:Đ~Č?b' 'Bü‡ŽÝfĎLN¤ŸT|‡~ÁIŹ0çf̏}´z"ܗ[_ő×Uł`ĆŰ|HV°TĎô-Ů4ZSe˜/­Ť˛ßPęű%]^˘ÇŢúVşd~ˇ^x–/žŁőÍ Î"BjSBÉÖ‰ŚF˝N‹Ť+¨„ݤšŮ>ÄÔН_=Kéh@ýTQHĽL*Ş&ţ7b´ĘÉÜ8—4ű^ľLÍ![\—^IđŕŘâ _ř=őÔSôśˇ˝žóďpX+¨Ý|⟠ŸűšŸăđ_?ń?A‹‹‹lo€XóGôGüůć7ż™?AÂDˆ`+|ĺ+_a’;ßżýíoÓ<ŔÄ"‡@œ‰ó×ý×ó˛€tsáÂúÁüA&#!ě†>ň‘0šçúőëôöˇżžńo°ú9XâBz8&ś ôňúÖˇžĹépż˙űżĎ$Ľ_úĽ_˘fłÉJ= ýŰűo9 ˆ= ýɟü oÇ1ŻS‚šŃ˙ňżü/LXú˙ŕpůœ—G lKŠÉp_ażř=îu Äć?ޘWígݤŰĺŐDŸŠűM+›Ž>ţŹuUű ŕĄBŐ§¸Ů#"{żýP_ş´Ţ÷J¸í~ů1łŘďZŐăiĄżÄ>„ř#“ƒ\ţ îîűh­§t ˝ź¤ż|0ë"ˆ)Śƒ[˜iž˜ĎœRQ9qRgýŘůž)eB@°?Lżé=!…Fލ“šőgĎQĎ|Ş-´hăĆ5VüÁŹŹŢÖ:]Ű٤Äünś[tcŁI BšÄ …f]2™žţy^u(í@ed#{¸ăBk]źx‘ˆđ`8.lŁo~ó›LČA(0”ĎÁOúÓ\>‚@şző*—ç E"„@zÂţ áxHƒç&ˆ= 4!ÎáŃ jbňŽvë'Ž9îég^ÂĎ´íĺď~šŞrNƒLn‚Ł2Ągb;yŸńN“Ę<4VäĄa§LJU1ďń'ŢaŠ€XIzNň„üN7¤Ç/î)Ęd Şžsqą3éő\Ý蔋NîŽ)'äŸ#ƒňĽ8@őߋ{ŕ0[Ç!žş`Né ËHÓXĺ§üÜ/$-őĽŻ*¸+˜â¸Żvđۆ:óĽ§ƒ ňšk,dł´ÚƒÝüüçi=ŞQˇŰŁg^x‘úÝ.ĂĽ:%eŠc fłÍ€ą2‡YťbćłÇÇO­s§ęć9Ćp4Ž,X&‡űrׁŕô*>ţđ‡éĄ‡˘……&ąŕ9ĽœţĎ˙9Ťí€ 2Ô}@xAh,ě÷îwż›I@ Č8üÖoý“{~äG~„‰; c‚¤Ónˇ9ÜBtA­đńYÍ <>b Ď#s@şÁţŔ§>ő)úť÷ď˛sţĺ—_ćPAĘ<Ó+v„/äW‘Ěcü#‰ń-…áţÉ?UçŞE)H 8‰â@ ‚{™‹)˜ł|÷ót^'ó“ÎŹŔĂ^œňó¤­rü“mw)ÔĚŔt€Q@ľTÓđβCHQÇ ÎćsşĚ— xĐŠUďÉgi0Áˆá_€x™>ţ¸ľüň@M™ô#N'śˇˇé3Ÿů h@Úyúé§é‡ř‡YĽç“Ÿü$Ýźy“ĂhóČ#0qD` ¨âžƒüBČ:_ţň—™xƒ´śý‹ń/ř÷wżű]ú7˙ćß°TÚËäGúó?˙s.Ăżţ×˙šw ,„0_ á;€ă"4|ĄŔş÷ďţ‡îşcŢ (śŻ­­1IřŘÇ>Ć$$œp>¨(ĄŒ8‚p|„AĂţ(öGş_ţĺ_ć:ůřÇ?ÎŰń<ĹvŕČAĎŃSÜ šGˆ@ÇSěîý~ŞT~ÉG—Ö§ĺýJDŸŠĘ?zvY@p˛0áPŐŰ(÷]şß9ą‡ź°^a‡J o;A퇖R9¨ĘޙJţŰH 85â@ ˜Ĺ /{ďĚę‰řÚĹźs…ŇĽutOÔH‚Y˜Őće R Ř ´/œ’?űÇ @Ş8&WűŮ;yGúľ‚épí°JŐ§´^WĚúÍÓšUĽö‰śœ¤Ćaƒ%á[Jҁ#A–Ěƒ´Ę’€đ=uDŸDĺƒnś—_ ”\Č<łÍ8 NĄŽ#ńDžżA˝•É?ŕđqçÄ˝ş;AžáŅłrĎ(Ţ —S¸é$ .[öüŔ:~gëœZBqA™Çí‹OđĚĹ3djÜ3Éë¤ĂwlĂ~. ˆ:€SďqÇ!ÇĘU"WWF„ęrya?ŽĚ-~>î7€°?ˆO.°ŠEPrç(%ŒgŽ“}y>Ą|;ŠńƒjÜ9 r§SŞ9HD‚#*Íď}‘~üß4IřŃŠU™$kŇNä]uĚňwżä@ 8‰¨đľ”É>öKáwţŠó„ăuž/ë=΂˝Đ`řžŚąé7DĹcföĐ~'<îw?@pt!ā@p Ě;3-žcFĎnyě–׎p6Ý?ě*˝¸‡ŇYHŞ<ĄjCn/gŽ÷ší˜ÂW˜™ŹJ Ä¸Ÿžwéş´Ís,Q@YĐ; \Oě˝(ďďţĄw݊Ađâşźçc–€IUů•ŰŽ*}×SśÝ[œD'_umîőLAÉ zţ+4­*„Á]Áî†ĆŽÎ~ĺI-ŰO N+ţäë0v‚›wůŠ>ř Ó`ş]Łěť!C¨ĚYtBœTľ ű%ä@€ç€O\ů•_ů~VřëĘiG¨qp¤÷|™–ś*ŻŞüü<Gř)—ÝOăP•9]9MU>ţ9U•S?‚ă€Â,uŃ˘gýŇ)8–¨´é|›&íí˝~Ę*?zJ^VÖ<Ż­Ž QŸÜ_8~VÂrůŚýžw›@ î?v#ŔLřŚ+Ćʄ_9˙Ě&p)ă÷É'z™ßiůüľfŐh=~ÓᝧÂüREţՁŕtCˆ?ŕČc/¤—}€ô}śyt6˝MMÝś—ź<yy›o抳~O#cŸNk\Ĺuťď•˙U”–Ö{ƒ^Ź`3ěřŻśą‚ŐdYŚa˘3ăóoöƒyę‹I?ţůx3ęrŇϔśŠ‹e´‹ƒ\QňĎaŔ^ƒĎüЅĎ1Ó2%ß1[Eî)9ţç,Çý˝ţ‚“…9žŢnVz%aYó,b3ll‰+iš LčœÄ9íћę`ę1UöüӅwůɄ?x#łĐA;;;$Ž9´íÔÎgŞQAú!ň @¤§ěŁm(]głĽÍŠ?Ă"Á\ë‰ăXOŒgîO!ńŔ,UťĐÁÇT{db˝š\ŻěM% ĺ­Ă÷Dĺš” ) CňĘ? ‘ OTzżŠűŽsÖJšUKÖŠ;NŞé2 ͅKćË×ÂéädˆšŇJŸTp÷1`RĽčŁËżľžJ€´N˜ěiĆ3šJůťt™Âó#Š=˝ŠĆöĂdŮł­şH¤,–o:Ąąě<ňUŞœK~~ĺ°gs‰ˇŻRžęÖ[Ő8­ÎF ÁA01W՟¤ZŁLwšÝÔ¤SůXzŻĎźű‹ĚW/ ZçXůoĺő sE š21@ˆ˙'ÓB|Öĺj=Uá˝@úA(/řNt<¤šiGÍvHő(0 ]łôš=ś ž¸˛Ÿł’řSAú9Fď6Áéƒ<7‚ÝQ}›¨‰Ż$!Ÿ¤ AŢÇBčć%âĎ0N)6Ža˘Í§y_А]çŠSţ1>V™č3Y‚˘”9PEőG 8Ýâ@ 8ҸWeu{äyěúü7~˘flPŮAŕaňČÁźF žůłđ[ěĘšP&şřŸv %ôśĆ”čuz;ÔíŢ ţΗi؉băĚ%}Šu‡\|űÝŽŽ2üUţ§´ˇŞJč2ʝdc_›ď+yĆßs>.´™%.Ĺy”p,‘Ÿ'žo#Č Ö¨ŃhĐŇęĂtöü›ŠŐ\ŚFÔ0[jfŠÓĄ@űüŮ˝ęÖĺ\[*“§ěŢĘ;xý擄ösSßKŕ™”ˆÉXIvćw:ąVxÄBő Gó7ŘYÎĚÜ’ĺH#ó ßawYůř(;ˆŚŤoÝýˇŹřă—CX@ œphÇ ”÷˝Ŕ˘hę [Ń'ý°ÚOœĐp00٧#އ)YjЃVhuŠEaĘÇđňÚSŮvó• GҟćDëłÇűڤ€´ BOb>óšÝŇ+ˇˇiŤÓ0ľSž‚Ä~R¨ě¸UFę)Nśç\ůUFAőG œhńG Yh=ű÷!ŠH´šçȜůěz*8 ľć3Ŕs‡ÓČIÁœ™Tł{,áaLv8ś¸MAš˙…őNÂnL™řłšłF/R:řŃďŃŔ8łFI‡b˝Ĺ$ Pa0ĺxŃi*śňŤRŠ,dœŮ8ąŻââcü}Qš@0š­q–mB:˜ě’lkhňˆňcöw.QŻs†z˝ †#ÓdëTo´hii‰Î_|ĹÁ2]}ÂĽ3ćÜC:48ça’PĆî™ ţ¸řĚ&ßOŹŔ”u¸x[éŢşćűÁÄ]kÚ^‰ňTMŰ#ö{öî19Ľ+ rI˙˝HRĺ_wßĚמöľôĐCeÇ#úÚמFˇoßaÇOX‹¨ÝnÓ ×ggüŽ˘ˆjľAŰŹßďó3& Ü.ÇދS×'ýTmŰk~‡2éG@ 8a˜óýžŰ)2€u,Ąg8úĘvřtľ=™g‰ôc§âŤ¤´şŘ¤KgčsK´˛ÔĘԃI 8Őâ@poŔdÔLĄÎý‡¤$j5ć}›{˛GkŰ1őGÖ÷ƒw•ĆäK§Ž¨uĹ$¨ą*˘żmćdŽ’cU&V ' Bü÷ }öŇv+ąŤIßCŇĎÁqƒřA™p—Œ-ĺĺ#:ĂĆ]‡ŐŘ4ŘęIJAZĂô\´œé~‚€:^[[Ł;wnŃĹ3!-ŽŽ2ń'Ń ˘°ĹJ8XŚĄŔÝĄƒŠá_Ş÷Ĺ@u0žBg~M§%Î~ŤĂ‡2sŠľ1StŚtýĺ:uśSş~ý:Ý2ä6¨˝°L.\ aźJýřŇ7ieaĹI:¤IB#SÇp†aąe9?* ő•Úű ŹwğŠîˆˇG5ŇŤüűp +VäďnKŇáěăv^\\¤ď˙ţ李žő­ůŕˆ>ŸúÔQˇŰĽUóL˙Ŕ>@őĽżdGO§ÓĄVŤĹ AtćĚţînÜźIngORÎť…űň >ű Ő%Ž+”r0{d[äîwÂíLAYÝÇ4-~ĐĎžsż@ öݒ_ţp84ŸŮd]ă'†_ǎÇŸP#˘/,óşíîuz#NWƒ?„!Ľň0”J5ćĘDŸě‡Ě˜N1„ř#îćüÉúé3ˇ&PŽŃĐ2ŠŞLO(p73éŔƒ\*“‰ôáŠüŁš˙ĺ,ć2čěě'kÖ̀">S ĽX݃ćĘ'“$*Ě#›XS<Z‹viďŻďî^1Ö§śšĐ ĎÖ ˘,´ËŽĹQSžPučÓNgÖ7oŇrs‹"ÝĽá ĎJ@Ş6 zŁĆƒÄ‹­şYjYáL 5)4ěěШoÚsGŁ^ŤQ˘RŠÍżĆÂ5Ě´ŽĚ˝ÄĽ2”Č>މŁM›Ž ”(\›ňžřë+ţ(2VÉŃLXJÀĂ}ŮCŚIdC~mÝ2UЇ4člÓÖÚSƍL{Ày˝šM:źCçÎěü~Äý:cƒéí۔vw(ZâOĘÍ,ŠZ&ţ¤%âO ƒfGu`źƒÚ”™•“욊ĆŃâY2•m–şšƄ fFîV óöSEýCppLe$O]_+°—zîšç˜čÓh6™źépűömzőŐWé•W^ĄwżűÝôĽ/}‰}ôQ:{ö,=˙üó´ššI/\`ŃöÖ6?gnßšcjEsŕ~)ü‚ť‹ŞaN8”WVŮśŃ06Ď(8–i{ړ%Ľűزeu4`ݤE@p?QTSu3ÚŤyÓ:Ň8i¨RűÉVL~ěÚIĺVm\ ZH+‹MńßŰîóĂäý!8đ‰č“nmmąŻ~=,Ź8–7QvŇ \5ˆ X$Ň؆őŘoÁřátţwä7ö §c H?˜ź5ŕ‰Ľšď™şńŻśZM㛏ĚýRw`î?:Hů†ű-ÕćČű Ne•‡ř*N];â7蘍ŠäRĹEEv€xŹď…*ĎňĘ ˜äóÉJD3JK•¤ƒ 5•‘ŚîÖő:]ţxé‚Ý/ĺĄăŢ TŠc‰1Đ]Ű šŚcťÔ¤ĆB“ÂV@LĺW3ňńC{•TV4 )Ő;4­ŃNç­ÝšFýđUęöz4L”„1=w†šf šŚűÔJťvÇÔtÖwht;˘ŢŐMęÜźÉÎ5sýWL;ˆƒ!uu‡ˇnÓöÖ)3@¤–s§ŇcPŞ2 1‹łóäŮCćsdqÚ§¸ÖĄ fۧâP™\7k…ü+T)¨G˛.Мń˝7X"RšÄŚw(1ψpó&)łŘz4.s~ů=ˆF ââ-cď4͗ě93e3šŠjĹë|ÍsşňÍŢî6΅YM¸îö:˘ nPۜäŃYiß-ýgžŕˆcvÝ[ű…ƒçŻţęŻňÁcěýŇK/Ńh4ĚÓ8"l…žűÝďć3*á8˝sűßéx†‚$Ôí÷hݍ"ňĚ"˙éG 8ţ˜zgŞ>ŤAŕna6ąCl‘ˆ=ĎÔÓC|áwšfĄŁłOă@O=Č&䔛4)Ái‡ ‡c#Ýbťicc ÁNň‰?Nńj׌ˆőFÝŘN}V4)y€hűűťđŐőzÓ ,ä˝v: 3…h\nwŸÁƒ~î'ôkT6ÔbC€™%ń§¨dGˆ*UTůŔň˘N)„ř#N `}ó›ß¤?ţăĎÇíË´ś~‡×[ʆOôŃĂ4âËsžuť!'˙ŘSÓÍ ă‘+ţhWâL֑¨™ÉŹhe3ażď­oĽůŕfğC@F:Ů1÷ 5ĂL˝†KŁýůÁw‡Iü™ŸR}:'ţÔTBz!˘zÜ8ÔˇáÚj܉fĺˆ Ľ$LH…Š,FŠĹL0sMF7ťtłŸ76ŹJ„4†ôîzo“nÝ^§ł—ˇČôČŠŁ7hKŰĐ1Hƒc“o’Iô6Í1Ězt쇃ĄXY3ƒŃ–,”¤1‡’ŕh›cÔM‡×]“?`/(2„žY×îĐ0ęPcÁЇEóHUY ëî/”shęlÁ”żč–(v­|ÉcŸ€ç+rá\Ë*]î>Źs*:ˊLóúfr´kf ěl{‰ϟ'ŕDBO!ľî–f.ŒďĂ^x‘—â!ĆŰAÂ/Üw”}XN]OÍz*üçĎŹu>ůG œ¨ˆĎ^ Çßř˝ô¨$ čń'/ŇčŐ;ôüŕ›4ęŽĺ„_ß ş×!ž0čÇ8H‘oűŰyÖřc=ĆĎŤ_üĹ_¤Ď~öłŹĚóšĎ}ގ˝óď4Rkôđź?ÖÁĆńś2žuWŽ\Ą÷ž÷˝lŁžď}ďŁo}ë[łŔáë9ÔźÎ&ى8 &í$#ă—IUߍ:ŕčŁ ú˘ %€źłĚ“…ž!|ˆP­Ĺz|G˙k,čżşžB¨aCÁţş|ů2ç‡}N›MU5áwžő‚ă⠋›¨‹Iđń€Xß<śy{ŽŽČęňR.”ĺcGĺp_Ţ*Ă}‰H 89â@ ¸'8h'ű }‚ét€\pý•ktŐ8rˇś6¨Űł•)üř&ň\Ů>aĽXŚ ŇĎ~ ŤŚDX­0¸T)˝;fN ĘRéBšźł3ű˘ăFćşqˆŸ;{ŽÉęŔĄ–Íq9ܑ6̸Ň~!źTűçŔčë\źZ˙89ĽjŢiČnÖň$w~žÝly<§$“¤zţv1łrƤŽ0R´˛҅3ažI:ßyŠY †ÎBUĄłŃLŠö¨ÉăJJń….Q7ĄF§EúFJ…ő#ęS3SŒhÔ8ßN§g:$–řÓ­Ĺ´S˜íĄuŁ˝˘¨ąÓ¤şZ Ú¨ÓŚP€g­FÔş¤iggHwîlY(Óů_šP­UŁľŰ;´ŐŰ ~˝K+Wiá‰UŞ/Aĺg‡U€ŐE<Pł}žžxm“b3HUk4ii9 ž9§[Ű\ŃŮr†ép!ÜԔ°xĘ6ösů;^ĹÎQÖ1óäUőŽłWţŒĂż÷ués/š”Ú;ŚńŔ´ĄĄ­}°áž˝œoUçSâR öÜlvPę)ÄTÚ]1cö+lró<Ş„ž#Č˙=qżUě3ĎąÁýÇnÎ[V>m.ĐăO˝›ŢňąHĄy 5kuZýk‹ts­OkĎo™}H°8#[…>H1ďĂTbb¸Éž?úŁ?br‘@°†’éç?˙yúąű1VęAý€ §¸' Tá;lT„C~żó;żC˙ň_ţKúĎ˙ů?ÓĎýÜĎŃŮłgéŮgŸĽ7źá ôĚ3Ďä3rÁ˝ĹĄ„tä0Ő>őúÖÓ÷›ŽöăˆëŠś |b’ (8“đŸŻPކýâˇÎ)€ĂräŘE؆u 2` i ĽŘY˜Ÿ ,żżyZúóŘₓ żíă~Ů÷Ž#ţ¸{ŒáťqŤŢy™]äƂ&UřŻ—ßŘb@pz ā@pß0wŒîC˜™ÓďuiíÎmşńęu^@ě <ŠŒŇ>5&Ý?ńÇZ^´7(Ş ţ¤*ŘÎX„\ŞŻ"˘MęžăSůę:Ş4@rH‘[Ć "ÔƝ5ę]érÜć ÜóDzÎů`öhÚ.A6’Éu¨§Óëň¨€žÁ\/möϕtIš@gј¸.+&ŞÉú-_Šq¸Ćą׹u<Ľy tą|s °”[&6"L–˘Őł]şlŻijÓę83üÝš„‹f@çľ…Ç4XŘ&şžĐRŃ|*Úv¨żc:蝀ş]Úkâ)Gˇ×747Á†Shś[Ü鏺uZÖ5ZĐŤ˜ŽţĆľuÚŮŮąíá|›V&Úź3 ×6í S-¤äą5Vtăú6ÝénŇNŁGźf™:wžÂ†q(„ĆŮ ěńΟUĆ Ńk_™I'Šâü>˝újJ[ß5ßU5ńg/w¤BŢÚ8,xIělŠ|@ ˙˛ŮÜťňdĹ]ŠÂĚ OégF!ö÷Ü(•;{6ä´$7ŻőÁč19NS¤cŽÂróü'grJT 8,”Šó8xŚ9‚ŞT‚ÁńĂ´çŔ…‡˘§>đzâ o¤NZ#›w|˘éŇšsô†^Ą/Ýú. :Y¸W=ßĚ˝ŰóíŽ0^PöA/LdŘŘŘŕőPöA(.؞'ćPB}ôQă…AŹoűŰô?˙ç˙dG;~ƒÔEŸ÷źç=ô…/|ó¸qă]¸p>ţńłŞ&öÇ,vŹÁ=Â6gŢď­ÍבخÁ<á‰'ž`2ľS Çُ öŔvI!@žÁ÷>‘ĆŠ›`_L0Ĺ6(-ÂŚ‚ÚO˜ů…ř3ßvÁń†SÇ‚ďP˝zăßČ÷î w_8Œ§SŘ÷ؘäŞÇďĹĚ=uš@ 8őâ@ *öAúQ“a6f}Çg˝VŁČ,pŔťYnáNŐ5ĄřsŻaÝţzŚďf<ˆńŐ§¤Ő>Ş”tb Ół‹Ë,řńžşrßâşŮeĘ8 ůťÍaĐťÔeĄ\ëW3Ą—Ű…ő˜Ăr3ĐÓ~ŕşqő*őˇś¨Ő´ä ’`6§1ű/‡@cş^›.œż@Ť+Ť–äc:ö †ƒł°]ả.uÖlŹď (T›–€Ś@˜‰ł™ t×1ľ”`)WŽi– f)GşĄ‚ʏöËíŁ§ľ!5ĎŃ÷G´ĺŮgžŇƒŽ5ö3“˛*üWyŰaS Ü?Ŕś{ďű?@ďxĎRR["=06ŘH3ŃťF }ŕC?EWżýzĺ{ߢt0,˝ŒzşŤŔ€ŇďýŢďŃË/żĚö(đ+żň+lżâ¤ z@üůú׿ΟpriżúŐŻ˛MŠő˜B0@ B=€(„Pa°sĄösýúuúô§?ÍáĐ÷;wH wĺÉ!•ż§­÷žťARMă}ÁtŔ‡^đVśl$ö”}ü‰ožŸŘb; €żošĘŹ@pRáČ?臀äĂ”b9֗Ą5ĺď.˙ÝćÂxQq\„ź1ľ›Ú§$N„ř#Nl?ZGß×j)ďHťÂćŠ$ţ/_‚Qe™ůăc%QAú*8Áí9:‡FZâ¨(ň=óî8ĹĐ`wc5 YŠ9%YœYiý—’ZÂM1 ZVëůˇÉĂčq ‡Íę(çyĚ*? f›ÚcU™LÓsâ¸~óZĐŢţŮ5BÓ_XŚÓéî™Á¨1a Ďŕ˜ÁŐZ8wŽÖoݤÁÎ65šv&O˝Qˇ}sAĎ\žH—ßřşńô÷¨ťśžuŐC:{PóÇ °lŹŻÓââ]8w‘Ťâ4Ś­Ű[´Ů٤Ë<`:?‹42mšiœ AŢkQŮETcî•ëäř5rH}>Táţ-U°˘Ź}á^s¤ßaQt`äë ‡ŠĄč iň6zˆđŽ{pŘ'ŇŽBú™E'ŻyÍkčoüô‡iőąhŤ§Š>Đ4쥏R•raé!úkţý׏ţę 2KS¨í,p'œY ‚z÷€~Ď7žńÂş?ýÓ?-|BŃgŽ]ť–Yčk_ű!Čáío;=÷ÜsôÉO~’’@ 2öd§jŞVÜÖ%K> 4ÍÖk!¤ s¤ř™§Ý3 í`ŇŕÂŻ:LďĚBƒ a•d ŕ4÷ƒ —fa('BŹg'?ĄUšÁ =uYČŁŠŕ#äŕÔAˆ?ŕAç€rä¨4M(Ž(MҊ Ż%’Ě™Ć Š™š]—dĄoI'‘Cc Ç0Nt¤E~čXąÁÇFŸM Čë\ř.7ŒBŞ×ęl(b_Ä,ç™<›q–SÇpĘBkјdŕ Ö^§Œ,sÁŞ B…+‡ÁŇdĂ~Mńšh5.Đngˇm"mĘËřˇŸ&4?ęäÎ#@˜(^ěÖ@‡%Ę4†bđ"4‚\ĺ%ČB˜yĘ/yĘń_WëŠWőłFBT˘Ľ 9ńŽŞTB>Ťě¤‰}•kÓ&FáxçČ$ ÓŹTě(ŇŢĄ&žP-ĄŞpjŕ~b>8`ZŘŽŞďÓÔ{ŞÔńÁńĂĺ˗é§ú§éЎżî„56U-ĽŽą‡ƒ”†Ć‹Íňƒ?ôAú⟁ž÷Ů?4vdÂáV˜že},~@ôšuë ŕîC“7¸™ŻœýFŃz<fş"‚ÎýtńhÄęnÝî˝ґŕ¨cżý8LÜ đuť‰ŞĺßÁiűł“¤ÚĎbźŤb™—˛‡›X_çţbe`ěśîi=÷˝ěöe‘LíN,„ř#N ę-ŞHţљÜ(>&˘dŰ`…ĺ"WňœNAFe ÄűZzAh °Z-˛ĎÉŕΠ+łҌrd’!–VŕH:'!ĺ,pđL)Ă0ŕ0M6ŹWœĽąçeĎÍŞý¨ě<˛âćD€Ź€ڎv„ŸC¸ăúĘâršďŞÂďc3éCÇ9é×šRŁ„ #óđAŠ­kŹÄBÚ^Ý@( ĆËŔ'ĐՌ&ëřęA––‡jŞ™ďĄ sbG Kš¸ňęRpľ9|=EňOZÚZ$)§Ü“Ők m|l아ä‘ßta@F§vŸZTŁŘTßŕ戆Śĺľ[ kÖCŞľęÔXhŽ4Ř6m,‘Ž™ŐĚ÷Čt<"ÓᨛúlšĽ60éđŕŠ Š”šĚľŃalŇőÍ%(Š…Ôk„dş-㘚ú˝!mő:T‹Mmšź”9fłŐ˘Ř엢c3˜cPXŰ^(b˘í”yG‡ qLXsŰČ?S:ĐĐS~˙§–LGn™´{J9’Ą@pĚpRďű=+ŸL™çU"ýř f2x!œ@Éń§~ę§č#ůՍ-8€­Ł01ACZÇÜó)†šFƒ!­,-Đß˙Ĺ_ ő>NkˇéÚ7>EˇoÜŚ­k1mÜ!Z0ůařÁ†féS‰Tę—U‚Iý*3xtŠ#—őUî677I œˆír|ąŤÂ]1ţJĹ0`.ôżTŽń|ŇÝ­rÎC–Ž:¤Í wÓî3řş7;Cęözcân¨˛ůă÷ŒUýůçן–&{ÉD-ŕôAˆ?@@T0Žrň7ě`ť%â¸Řʐ8 و˘zDqœäŹmGÖá|łO¤/çăţ1|¸ăŔˆ‹Â%RĄäÔůł›ě:{6…ŮOŢ÷#)íhŠŐôŠ7čňě$uĘIöżA Ęë)4߃4Ż&ědNž4‚RĂ,v€22iëľ1i#H5ë)1Ž&U€0ŠÖŠQŤłźmt19óÍľAӖLűiśŰtńÂyęĆ]žE°šąÁuŽ4ŤŤŤ´˛z–VΝŁn§CŰĆ1†6ŢhըݎąJd10Ó6šMB•'Ęä€ů˜ŚžńÝŞRGB{Ż ýŚ:ĄŃΈvvvĚué“çčüŮstăĆŤ´ŐY'i ĄÄ ąĘV̗ÓcUŽ$M0éážv^\}î?‚{†*gR™Ě3ďś˝¤G îY€>Äűß˙~zâ‰'ř÷™3gč'ň'éěŮłÔ7śZłRÂVrLÝ~BƒQBĂx@ŰĆfKˇťlŸ=ůşGéö­ýôý=ЇC 7{ôę ˇŠľC/ŢźCßť˝MWo­Ń wvh§×ˇŘÓăBÓ˝"řŕčĄlżćĘ=ZOŮF÷´G=…JöĐ  ;]lźB0ĽƒŔůđœ’IšŚ3Ó ޞovŃJ 8N6,(-"Ą:ő¨MT[ ¨P ŞŹTTśóý2Uţ7!Ý H 8â@ 8%ČRˆr5–<Ź’ÇÁr!œœŕaŚŠasH-ł:B&‚4„Ł eš=p8daxRíĎu%×ĺ$ýHpÄ#O§3&XâO˜ĹEv1”!Ul :'Ůc槙+ُs-*˘¨#ŔF`ş$6  4ŠGŹä‚h RQF€R™:’ bł$9‘IE!“ƒzĆĄc,cŞŐVXńű*6űĆšÚSË ZD˛ŁÄÎ,3RU"KzmUf@xŠ…ÇJYŠgˆbză{3ŠŤŽ‡B 2‘9÷Ȕ? ^wDížŠ€g$5¨€fő•Q—ňˆX-Máِ–Mý„Łˆúр† Óţ˘ [ŚWWŠťĐŚÄ´é¤O˝¸CËç–iqąNľú‚şÉąnÚjbj`Ńt@V”.™u&ť4ÄöţÖäßą^ V´ôŞŞöîĘuw sÖé ¨VÍ?•´×‘iŁśmütqŔćOkĺíGtďɤŁ(ěÎŃňC?ôCôîwż›>ń‰Oph˙Žzꊧč•W^ĄŰwnÓ—`bćÚÚZŚö—đ€=žóŰŰŰ44ĎÚÍ­-"Dbé8U$UÎĄÝÔ|ö’V˜ÁŃÁ[ßúVzó›ßLWŽ\aÂ÷‹/žHżýŰżÍ$öżń7ţ˝ç=ď6vFH-“v3LkŠn{źšçJ˙ vú´łąN[CčůhÚ^ }ěwéńtHW~ˆ.žémôȃ?D—_w–ޝ܌=sœ´śţ ˝řÂ_ыWżB˝çnÓÎő n úĆ.$KśďľŞŽiŤR°Ęb@Vľ“u,‰čŢ)ýělž˛GÓO LLn#oę›.ŽŽŘNޤľW_¤Ű/=MÍŰt8ÂüVN‡Ăšp܇…˛BŢnĎ_uŔ÷ŃQ~žű„/7 ŇůQŤČ`‚é˜6Ř î-¤ýž>L#°nĚăĚů+ôř›žŸ.?ňZ=[§¨Ţ§őŢyěç֞ žz!ţ‚cifň˜Ř3&¸Ć‰Ě Â=ą4˘G~ÉÂ3á@6”Óř NČÎ0 ƒˆ˘ZęőYýaŸ;üń(a2Θ´“u HŕËś 5™ęl.ř—ć<ěbQ˛J1Ÿa2âP?ďUŰ_ÜńM´qU"őjF—h÷Śł‘UK%T͜kjÎ/AŘ/S%uű]38ѠՅË|áC Lš`€đÓ^lÓ0ŃŤëŻR-Z Ë´ŒS ĆĄŁúýőťŰÔíBMhD—ΞĽ3ŘąŐÝ4Ű0HjŐh–——ŠŃlS˝Ń q#%0ĽCŞˇT3׹ ’Ŕ”¤$E…P_|šl”=Í`FľînŠ{™‘ňž›6Gms}Í9jtűf—Âţş)_CgĽ‘bľ¨îč&'ĎT’LŽgLťŠĽ%5ZĐˁ<ŘŽĹśŠŻ—:5ÚŮéQç•5RA—ZKšž|b….­’×)V}>w jTW)@ˆŽEŃĽ:-źq‘ęŚ~DU i§—ŇŤŻžJŰ[dœm‹'ĄŮ–PcŘĄ–LęDfČTčFc‹šg":ł˛BgƒeŞ54Ő[ćÚ-lD¸Ő(ÉDŞĹeŽ‹2ƒFŠšçFÔKz4Ň6Žřćös˝mÇ'ȉ?ţěť HÓĘČD–TT&ö¸ŕqů§DâăíŇĄŞ˘…•g¨gŻáyfG¨oÚßćvš&ľÚ5J2ŇOڅŐŔ”GqR}bĄ,‡ ;Ěá2Ÿœt4â‚ă„k׎ѡžő-4(ƒň=ö=řŕƒ´žžÎö^űÚ×ŇÖÖŰxŕÝâĎÖö6ďW5›ŤjVl9ŠOšp>U |@p4€gĆťŢő.zÍk^ĂöŕłĎ>KńA7oŢäűƒ•xf<ţřăôó?˙óœ†5.aW˜~DÓ؅íV“–bMţ€6ŒÍľhěěÍľ žx02öÜSďřAúŁ˙ϯЗżţ= ˙ç×iůĄ‡čÂŇ2=tĺ=|y‘źŇ4ß#úŔűßIg>ü:glBľŮŁá>Ýşv“žţ›tí•WéůŠnÜşEŻěly‚¤ň<‚SYöăźŰ´.|ęéÇ*r߁yŸ­­ÝĄď=ó=Zťqž cěpL:Cč0źSóIj‡!ţŒáŤ¤Wócž~Ý<뇃iíWÚőÉFńýąĹĹE~Ć Íűĺâö€V.=N+ú´˜)ô—ŐďÔXÎgüi3¤Š‘öťM KńG œPęUŚö3vxĂ֜4ľƒä*Óů1čEEKā!ŁŹŐXÁ$•\m‡źđ\.k=9ôŽźƒU{đqxą´ c‹|@řŠ×ęYX+bň„ ÍäĎrISgîŇQPĹŇĹ€9 ˆ]™şŃЉjV™ ëĄY˛ëľžâ!uűŰl×ÚPDI¨7ŘśşKaB*ŠH§Ě0íSwŘĄD%Ôçi\54ˆűÔbÎqŔëSľ`CJ™ď&)ĽAjňFŘąľÍ?üŽM~P‡jX1Ëť˘˝*;7:(üÊ?i˘¨ş`@ˆ´Ö"Vý!3( I™zŹŰÁž@Ýä)Ő*8L"vđÄڒĆú̀6ِ^ÜÚĄWĚ`LłÓŮsMşÔéňš ŁŤZŮk`ŠYuĄ^4 j˜zYUĽľ6jÓđö€^íwéúÍ폧”ŒL‰Ě˝ňp;Ľ'—ŰDćzŽ´q’-7F´°°`ŽY3ǁS7TŸéó{}oôŸâނӂY*îw• ZEpĎ'îW ˇô„Ŕ zű„+éěRoÁ˝‡˙ĚBź0ůëśńď´—)ŞŮ~ś3ť‹÷ŠGţ)ÚÍE[7ëˇ@ 8yoŠ@ . ráŻUÎp1ťąš^ŻqŘ'Â,$T’&y§Óv†Q„DŹbŸĚé^5+ȟľdá˝8̔Y8Äd…u̎üźäŢąĘΏŽ&PFœs˘#Š“×3Ôx˘lfŔő—*KöčvŠ?čÓň™e&q¤ň´|}˛Y]40 íŐßT€ˆaŇ F Ť,D*¤¸;"Ľ´´´DGe_Vqۘƽδa˛śŞCŮA„Ę ô@éčöí-zţů›Ôhj3ŔłHo~ó(ż.aPˇmZ'|}Śíc†›Rć\Č:ÓVÍg’hşuk‹ž÷˝›týōÁa,Ž•7^Ą ?bU&"SśĺŽ)ElCمe7˛áŰźöęÂÚĹqjŽ—ňőŔ‚°bLZę÷MŮwÝaq7óG;íőGŚ­&Ůs…¸ŁW– gŇ×ÇȆ3÷4ĂFفšWšŮĚ}@pÔńöˇż~äG~„Úí6}^xᅜřƒ_ׯ_ççŕŋů]÷Ýď~—Ă{a=Ý Ď$8‡nÝşE[Ű[*Ě"ů˜g˙içą@přpýźçA|ď{ßK<đ+‚}ĺ+_Ą_űľ_ăďóŕ… ôOţÉ?)8‡Ąj [,eÉJEKľEęšţËc–íôlnóóާŔ˙é~ţ˙ˇ˙Ť1`Ź'ĆDŸgS{@ë7Œ=ůíç‰Â6Ńšł´xá<-_ éĚů%zôŃ]žt†˝˛NΟĽˇ?őýôЕ×Óg~ďˇI ‡jRíćŤ`ďşASaýœřýö!e‹ `χyvł~ UuěüŘn›ć8zÎ†ľFL°ĐĄ6ibJă>uú;´ÝŮĄţHsp¸&ć’Őułƒ•žÔ]łűŐĚß: ˇ”fß9„•łĹ´Sł!L5Eř4ő%AFúQůy ůi7ť@Űc`śwÍÔjxz;CŽv5ěÇfI9´V) GYř9b2VŞV  Mž 7ˆk*a•@R零şŐÓŚžMŮĚm30Ť]°÷”–ms.Pż ´U+"Ť~"+ć€çĽuNž3ˇєâĄ)ԙC KJbŁlŃíŞY­+ęyâŇS>ăYí 6 †Ś ސ=ƒ˛Á´xÄJX¨óĘG A%ŹóC1@ÎxoŞ´”ĎA ÜOXŽ}Ç˙ń˙1/UšÇ&ŐtăĆ ţ’Ľű^ ĽňŰ~ÖĚ×ÝfĂVmݚ &N`ŕîäwÜk Ż˙ŕţ ‡ď‚vőęUúÍßüMŠşW ŻúO˙)Ť†UĄÂnŒi›ƶî× kÔ}č"˝đŠ9Ţ(ćt—.ѕ~nüßfË´^“jGźöĘ͐zˇBęťI7awkĺu´źt†ŰŃŇRB˙óÂc´ź{ďżńţz% ˛Ĺö#ȏŽ/…g#~ogáŤŕS<š ëKásPďčwdž—ÂÇ`ßâ™g}8$N¤Ÿ•Ż_,Hňť‰#nŰŹ|üN¨ż9%Zî“Ć1 ÁqĂůˆ~(˙wžî.šŽłČô‚ýc–Ę“łđÎ1ŮůhťcšGˆ?÷UuŒÉďíۢ‚ÝáŰÉż)O¤Ü+`[ĂŢžŰ66ԟż÷˝ď奞.<`Ć!FĂń3°ęžÔăp_eľŸ˝ź‹ĘäĄýä!Ž&Ä2'žŠÉ>9ůÇ#ú¤ů, ńKŽś `|ÁptŽZ@0üŕdc äňBY…žŔ*Šdj%.,ś…pŞ›ípö ÷É}‚Ń,TÎä/Kßp}ΰ(E)őÍůœ2 ÚtźM­F“ÎŐΰ BlEľşŠÇ­M6Q[Kç)Şˇčr뒏Đ4ŒCÚęoÓÚŽŠˇÄŹäŰëÇ|ƒÚ+ËtŚ~ޤiccëečĽĂ­w6hcsƒT­Eľć‚)‹iľŁ6-˜cÖ2ýAëĂĄâ Ń4:–u[ŠlšĹ”EGźŠéä˜a–ş+¨ńP”„źžĎdŞ0!×l´7y$R5j†m2WӜq†XâĄŚŽŠGĽú…]Sďujľ#ZhÔ8U:0é$Â='ć>Š)ÁF Ő͟f‹â44ëÍxQ;$}Ţt`˘‰>Isľ$4 ,ŹćR]Ě7,‡gń@˘ƒZ“bő ,8‘Đ”§ŮŹS_ˇMď¸f҅f‰léçVŻ2âÓU¤ŽťAúÉKŔKjĘ:4ç6ŠŁ,v˝ w–ŚxΤԪ59äŸNR&°áڏÜ/#ł> E„IłŞ’řsˇĘ.îćqŔNS˙™Eâ™E §Ż@pďńwţÎßá°\ ľ|á _`˛ĎA€~Ă>đúń˙q&>řŕƒă‰čłč”IÇQTceÇČŘžífƒŐ7V„pŽ–ťýGěÇčż~öS4čv&ěZíőą¸‡Ĺጡ¸ĐÍľkfÁńecC†ô؅ۤÂŐ&5'í¸Gy„ţú_˙ëôä“O˛“üO˙ôOégögéŸýłĆ}$(§aƒƒAŸşÝ‡TüПú)zӛŢDĎ>ű,ýůŸ˙9" úwČÇőď€ü˙1˝ôŇK. ý/¨Ž=ôĐC żżő­oQĂ 2žôňËôüóĎóžżôKżD˙á?üŽWüF˙ú~P u=~ň'’~â'~‚>ţńÓŸýٟąú"(÷ýĐńqĄęćΚȿ‘7Ňźĺ-oĄ~ôŁôú׿žŐă@$Eš ÇĆwWäß!Ťr&´ššI@pŹĄ‹*?ĹMžĘÖť’Ţ}ŸŻâ ?œóűíFě<,”ŐX ˙Uđ˙šÉ§ÁFŻ Oěˆ?xG ńç`ţßýƒžň|ňCô ŚĂM°FéÜšsʐŒI°Ÿƒř›,„WÇ$,ôÉî†ú0kkkYŸLŃҙžgĘHŤĹwٔcgďŕÔB,#@  r(,ó/-JČúN×ůw„Ŕ'ý8ű&ŢlĐązć}7çKQştîťëĚű“Ş ižs:ęŕPfIĘNíľí5ÚŇÔKúćœcv~€ˆejI )T6ü™ Bă°7jhg玌ƒŢ NtŒŁ0€JćëąhîK‹‹Ć9Đä㥙ä%÷.vîŚqüßŮŘäW‰É+ŕĐ ­oŹSÜPÔČOt z‚°VŐx[Ö¨;Ř abÉóeť rDĘuľŹl>X˙çΞĄˆ$–Íp]IYgÁmăŐ8Úůzgrţ(ĘłC›´p&˘ś˛rÂt˙x?Œ*Il˙!‚ QłY%5ă$b‚ŽÁhëęQ( ŁŹsdI?AhÚkgjTö~ŕ™Ç-´qÔoÂyŁ˝7YȤ‰M›ŘçF YľźPL|3Ÿ Ua-Č>›ŚzL‚ł.7čcîcąŒ‚$?˙Ě=Fw÷âŢA[Ĺ3ES”í]ËĎSG lAÉt‚îE‚#ŠąJŚâ؇žDđŇW HˆcH 8ZpŠ1‡…úąĽK÷šĎŃG>ňúĘWžÂä˜O}ęSů~PöáaÎ0(€Yźč}Ç;ŢÁ3„aÇţÖoý“€@ Áö˙ď˙=jPóIçË_ţ2§dHóăóuŻ}-‡dIç'L:”Šfę䝧żójľŰôŽw˝‹ž{öYŞ›r?óĚ3||œˆ@zăŢŔä˘đ÷˙>•~ú§šţäOţ„ŢkňńuÜ1çńŞ) ?Żźň §Ăů ˙úÂŐŤLFZ6ů˘|Ÿ˙‹ż ż÷÷ţ“ŢjCţ/˙ôŸŇŻ~ôŁtÁ”÷•,ʤ@ Ě"œL%ĎPu((Њôĺüđo€|yĺĘzüńǙ$‹w H?XđŽÁűäŇýž(.AĹjýţ€FCŤ î&úg†eŃ8žĐu:śiĄľČďd͓†´“vh=éÓŤzHĂZČe‡ĺe_˜yšĐ•ĺęÜçeę yG5\¤âId:˙$o"$űjo´Ô>Tć˅/HućOMÓ]¨Š Cw™ľßÜáż ˛sDŽżtÎrrŸŻĘ4<–)Nńžt˜őĄňcć9š§~Xžőχžš3Áłdqq1Ť[ž _'ěÝÝB—á9‰ç€çďn$u¤é犧ž˘÷ž÷˝Ź˘ Ň;lŕÞű îƒHäÔ2ałcÝa JÍĚŽđ=ńNó›†˙\œâűN„ř#N|OsuÇŮIR̐Î6!L—ĘśşY5™f*3LXČÔ{FĆQ |͒ř”w&óY7źŢć›Áz_ җš´aŔRÔ“ÚRŚVĘ)śŻYœńĂE. äŃŒÝĺÉ`ďo5…äđá"*UKQĘňĹ5jgFŤ˝ČĄşâtD=ăЈ üâ&ü‘Ń3Žaęf ˘%A“T‰ßézJq 9..xUQ݆ˇŇ̀˘Ľ-›‘‹V”ŽnąŮÝĄFŤaăřűL2 Óq R>6“şĚd$1Ÿs1ÁżĐŢo=7CUTVŁĂäĎ^‚Cfċ Ó1€LÄĄäŇČ8…ƒ: œBuۑ4ŰăHąjĐ0ߗfPÇÜPÓ Č¤Ť›ó2ëpžŒ_J…X׾°P§Ĺ…ÄÔI’ßĂ8ĄŽqVŐL^-x”)'TZš‰Ú‹šX` ĘAŮý—ňľ)Fh0SĆ8˛×udÚ{h.˜šö8"ŰöSć+qh˛€ cś…&s.ОN ąÂ] [ĘWdғĄ˝ĂďhkS„Đai۔'ĺOš=šľwdĹ B($ŐXń*WP6 Mť˜x°ňT ÇßbÓԗůmŠ0„˘“é7×Àۀ !¨ďśoJ 18ReŐ,čiä?CyÖą@ 89Ůĺ'ţŢGč6 邱ł×ľąswśhey…Bckžď‹ƒaĄąyš‹cl‹Ľ…&uFŰćs‘ö;cł…ĆF^z’ŢůĂ?CŸyćkÔëvÉÚ` #:Ξľvš;÷ÁÔŘĆŇ*łă2…J5ƒ5ÔÄL\,ßwá°@ŇÁá˛ŕ¤ÇDŕâŋ<g=ˆ2čuy`ŕÄČůăYˆýń, ł|ŃOĂvuP—]s„{nšVÚ4ů10lňÂňGŸţ´­ “ל)ˆ8čSŽc2Áö6­°‚)B×iíömj` Ă”a}m^}ĺÚÜŘŕúźeÎ iüü@üšcöA9VLž/˝đB~Žu“ĎŽ9‡ sŽ8ć&͚9ćĐÔ öA~8FŒ°Ń4œĺë.ƒ–W„@ ¸›ŘE•RWî2ť\ĺńr˜đ^á¤I ă}Ľ4ź+đěńĹ™üłažË{ށi䏁ăqyě ö͛7ř83ŔŽ2R†MÁžóă˛ńEüh˛HßGgéŇâEZh/đvź‡nnÓ×kôßőÝn5yŔç„ňbŔď,ř'ńŽ ‹î­Z‹UçPĆć7`WGj^‘{˙äďĄĚ\P:óMéˇÔŒÂm- 6‚ĎźWGz6‘žÝ0Űę×)íB:ڊSíîЁMŃĚÔĚa˙č=ˇôÜkŮĆ l'Š>45(vƒ™şÎ)EŽŕp ‰?žż˜'A*;˜ëhŽę¸ŸvÚ!ž™°ąĄ˘‰gějG$„ÄG„ą‚= űzÜó€ĘçnĎ]¨´AéÇ'ýŕx‡?äş#6jÚý~¨RřńÇ*ěAH œ|ńG œř”čIŘńőqš"-@ĺd6'đb}űrş6Î÷çyć :+Ž#Ä3-R%ś3éˆ?,ż›ÁŞf#QfŘąąŚTnÁ—;WUy=íŸ]U]yßőáuŕŚBYĹ˙iĐYŘŽfŤMí…%ŠŇ;¤‡}ŠÁţ@w32ui^fŕ 'ć35/1s­żˇY'jˇ0ÝŌŒ(ióUQŹĚ5 Mw˝nŽgË8՗ڴbœ"¤ÇŠ1ŽXKkw¨ŃlĐhgÄážTkDĄŞgÄÍ3˘á@@ŹŞV˘™ěĄË:…ôĂßuFţq-íδ/ł OYu¨ď€L3Ô J ΌL’šQČbԃ\cŇƙ—ĄnÎgŮTY=S—Ň!×­Ş™"H°°+ÔŹĚyˇŰ‘q2™ŽOd‰?LŢáĐj#ó™:Ż1Y çR3ů´Đi ¨ŃRL ÂńAkKp™qFěIłkë<2×T LŞĄUÇ Rv‚ÉVľ,˙ůĎď:ăZ î'ôţОËXS ~>Ľü\ˆGčÄ3Ďg)ńLEßĎX ňşgöÔrxđŐ5ń "łEŢý7ďŃ­í-Ş™üń}źuíą˘‹ń [ô}Ńzďâş´t‰óÂ$ĆnŘĄ[ëÜůŇČř'WW84$˝ńÎÂű ď0~ޛ×o{ťű"q^HâSëŔťďMěçÔʏœm’Ű(ިśľ]Şm žžć:„šÇ5EűŠ$~z§tˆOöĺ†ažnVřś˛ÖŐ_ŐäOˇŻ–ŮWGqjďžżŘ)Ĺ;Uym’ŰBŚ–ÍP˝ýÜzżX>lŹsiqŢřîŇůÇc˙œ7ĄŐ).švŽ}Ÿ;77‘Öm×÷Ÿ_>7!vZť+‡˛vÇKÓťHĚşOPJ&9e8%ž'xŢ MZ•rKüA;qĆ}ß HălďyŇC٤M¨`>üđĂůsĎ1ŘÓ( ňqQ‚ě9`›Sľü^îœ\4ŘűČĎIŘčřÎ îAűłď2*˝Ó&Ă|횋>9I ?ńG ¨8Ê.^ÇĎu@˜ô“Ä* pN?:íʅ.ĘLużCSîřäln­3âÂMv]š1lďwŽŮ™ZÍQęĂyÂѲ¸´H+Á Eiä–F- 5Ŕ\„P YJ´ľ°DŞšL1Ռqߣł,šęjƒŞmĎ8Ę{vf+;=[vŔŁ‚řă‡iR)uÉűÚŤ iÖY‡cŠ;):˘4\˘ţŔĆŁ{ŚÍöłŽ¸ŠĄ9‡QĆXZ0}¨ľ%˘óŤ‹ěŕęő0ƒ[e!î,ŸM”Uޞ^>iͅœĂőrł¨\Ÿ ‹ ćőLöÍoëPŔ=„ňâÚ5šuŇŚžuf‰ ”UŇ3‹í@)‘†ÄJN8Nœ„÷Çuˆ‡ŹRŘ@;‹GVń ĘFh‡őşbu%?Ź_U^¨ĎD›kfmófĽ'U˙ěDI]p6ĎrJűƒłŽ%ä ŕxƒšpXC† Łą3˘]ŮŢ,-V¸DßcL4Çç(ŇŽąťĆĆ|~ŃÚN—úŰ6\H×ŘNŹ7śiąŚ™hSIüŃ^–ĽŒüHjźSU?{00ů‰O|‚żĂŠeŕ×~í×řóӟţt!=œôŸůĚgxqŮž*|ň“ŸœXľ„+ٜŇůŔó¤#,ÓŇ8Ґ~€˙ţß˙{a=öjlžý­oçßËçü_ţËáϏ~ôŁ$ÇS@{´MÇyŒ÷sÄ îb°ďGźŕÂ{Ÿť…™™~œ1|38VNć0K§ŰÉɤÇűŤRů–ÚKtqé"]ZšLKfťÎ!éMşČöű/š1ëłÝ!—/Đ[Ţň4Ç9°„Aq§ü‘ gďȟđą`ĐűľŻ}-żOżůÍo˛j^Uh°Ł€ý Z߅sG=ăüq]ÝoŽ …4šzťŠƒ2‘(TňPőĄĆNľĘď.tŞŰćG@pŔňvA–đëÂĚázE™ď ĺÄőuÄ-\3?×~ü2c;ŕH ŰŰŰźiÎ߅eBšš ~űu8_ >V˘p~8œށś…íU G4ňË7‹Há“\™p@pú ā@p‚0I†);UŚÖ˘iĆxžR™Üf5ŽË…ä˘LZ–ט€Tj‰?Žěc%LUţÝ/™;VF˝Śœ„’‘†ČŰBŠQű4Ÿąa˜mÚľvcüލçeĄŐœńYފPQf "jšÓJ­K´ÍJ& ţÔkîš(ZX4Ě E+Ť+´°´BŞąLÝaLŻ^•†ÉÂ:Eőšéˆśhű΀ś:ë4%LˆI† $Ť@91ĚČĂuŽůzC=ČuN¸óŸ˛˘”_}¨xŽ>nbëÂ1ó2›˛ † u¸ÓŰĽQ’Ş‡Ć‰ÔçA‘îvL˝,œuB( YçG3JisAÓöĹłëuĄŘQ|Îayce–0kיęToP ű“BsÍj!œŠFŚŹ|…đ ™…vÓtˆšĆ954őŞ3Ľ Ô”ŻÇĘNĘ8jԂR LžŠšFÎ€F]KśBX/eĘš°ˆşo XA×Kç*?îűxí\’¸TuÜ "8Ybż+/I6ó]i=y•uĹ”żÝŸGďŹóv•j+w ii´ů¨äƒůy–ŮÄĆT_ÜĄ6ҘyiZ-Ÿ!¸ËÎ?š|NŞŇ§@ ¸pN#<Żád:Ȍ1v„şwWfŤ¸™“>vSüŠTÇŕú÷˙÷4¨g÷wŚ$P3ÖČđ°çě-ď?/´íÖ˛ÚH#ꃠͪŒŠąóšŹD Tj mź’ďv0䌁@ P5ZĽü㍼L{Ą(OáŰMP‚M#`Pׅ–œ§lUś5lräĂᘴógčœ\“N Ÿäʇň,..pŸĄâG-űÚmZĐ ÔL›LöíP0 4&[ář´ĆńÂlžăë1 ށp|wď“ŘpÄœˇ#ŇřpĘ%¸ön2•ëK9U_gě.*Ü8RóťÉn›# šăšś‡OGCůń DG Bٰ8˘Ž#šöâŤů“Yő(ťś(Ú$ěCŹÇyaÚžc=ňtÄ—ˇäíŸ>Z”;ś#Zšóö SŽž|â+ťżÎ'2!˝[PĆ.‡˜E }á¸ët7ÔqĐžđÜĂâHqî~ x‰r¸űÚľsţ<óđۅůeőĎŹüPôÄ6×ţą =ňŔ˝Š6xOŕw%i=9v43𐂂“ !ţ‚U ľä fsďƒő*˙žŃ^ĆŰSG°ôLúĽŹđ“ËťĹ!‹ťĘˆ°†;Ci‡ŕł2¨ImL$đhjrŔ]ĺiJđfMěŁ'ކËÉĽŃcu îHyr­‡Ç@P”mr'…ňç+uę›Î\LŚ#kęqšĽhľ–šÎl›ÂČtUŸ:ÝÚŮép\óö ÝčěFÍ+Đ# Ň>5TBK­†qz,ŇËÝ݊MÇpPw€0lđ)f6›nśüȈ?őŘ8SLg;P4 ЁÎ1.aŔKœbćœ$-“ÚěŤR…#§h(ĹĎOđ€đŠ"Śź44ˈÚőM_C'!ít"ŸECăČAĽĘtćM›îĘ932íŘtŔkM”Út|ş´­ÔَÍvM=…ĐR}ęö“GBÍv“Z 5Ż+0ů&h+pp˜ÄVü(R!Ŕ"2÷Hw0˘ŽŮÇRłeŽ­FŚnMý?Â+7›CZ0}ŤVÓ ™Kľ3ˆiÁ䚈'“g4ŇŽEÝžŚľ”vśí ßTć,jćT›T qĺbŚă$Š7šßÎ0'ŕ֔fÄ(׳ś¨üÚT…Í(´7ĚÜŔěĄ!0˙@ÎŃzL“ÉăĘť ĘŢónÉŠZZeÍ^eüŸěndž”é@ÖĚYŕ>Tƒěń¤˜ÇdłqHqhř€Fوý:uvŒĂ÷KťnÚqDډzíÎ'ęźč$ÄQÇžâH^yř4íXKŇ  9‘×ŕ‰'ž w˝ë]Ńőč‡ri}… Ŕ‘tœ’T9—Żœƒ´ŽüâČ>ŽpäĘĺŽo- cćcÜ:ˇŸŻďoÇń\ž8žËíß|\Ř.Ŕ'ůőęTŽœJž Aę÷) (Ťž”'¤8"ž#ů¨r}šźG.D—#Ć -=űěłtżŕBŒôƒg8žďh㸗!Éݏ§‹śŽç§SüÁłi}ÂÜn(ßűeř <óbŮՑZŐ‰>ŕtAˆ?ŕDAÍPłđăäí§ń,Ąœ„Ž;œ‰#řé\ż&WôQEV‹˘‚ŇÇ$´—Oń[1Yqh"C5eW=a *o™›=žäçŻ&…U3Š•é„5J"cT›ţ[+ÔTk(6¸U8‚N 1ŕI]łžAmČđ"ĚTŢˆj˜‘œšÎi2˘ LŠYS´˛Ř¤[˜5c^uÑŚ^DƒaŸ 2QY‚ ͧíœÖD K‹ÝYŁfFyłQ+匘DŁÉŞţ(­‹gĽĆD2Ľô!éŚh˘‚|Kš[VüaŔłŃpp˜Č•° U $i`œ@zŔ„ĽŰćR4Œhdęrdx¸Ł¨š…ł_lÉ(ľzÄŞ3 ĽôúÚŢé§ĆˆÚ Ě2 ™Ô˜ =ĂîŔ\Ó!Ґôm™kŘ2*ă@¨Áل VZށŕbŞ}d 8ŒSVa MÝGf€Â40寙cBÎxÄáɂ(äzOĚ1V–M~ŚŸ8’ Ó|<âYň•*ßşüĹżfĺ4śŽ™ád­pí(RXŞâÎU˝Î#ĚhUjţ-ÉBI+ü@e*`"ˆZAœd¤łĐ„Bťżćëlę%Ƃśoę6j˜k‘ă;ž'ygĐ'óŒŐž,1 ?Őäš ‚ĂQo}ë[éńÇgGӛßô&&ýÜšs'w,?đŔ쀇Łiข3 Î(8™!3íVŃźwĚŔžsćn0aIíă4Ë˗Ŕ.’@°GčŇw=Ĺ7ł+ ŚčĚĚĹvÁ]@AĹÇMŚŮÝĚ5vĘ.‚Œ¨2†ĄöŰم*Âŕ0BIžňĘ+űVvđ•Xœň‰#ţ G6œ’?pzů:Ô ;) áą@ÚB¸-GźC{ó‰hÓŕî÷}7 MAĽ |%ކO(Ÿ𼠽řĄâœzJđˇŕX(ˇťżńÝ=´Kśçv/Ÿ—óźç8ŤÎŠBd @pZ!ā@ ˜ébŞú§Vžqĺ`ŚĺĄiwů|D ˝ŔŠŔ¨ =ă÷¨€őx&MÂF5ˆ?LţÉfř˛ľ.ţm’u,“8ÎŤŰÎ>‰ř<­‘Ţ5ůĄ#›)%8Ĺ&˛†qŁŃ4ƒŤgéƍ[őˎ—8)Ěâ9j°eŒ™äŽo˝n A`ăÔŁŸÍő‚?fťŤÇá(Ěe‰Qר{ DˇęCZm+j7Z™´°Í̊0CˤKUòpRĘPgşpjI˝Üaf3‹z&˙HĹԈěuáhq1˘í„;n +ŐĚ9Žœqa°JíćBÖ<\˘šËúˇĂ˝şÔ!K@›ql|ýdD#SżÍf#şkăvlütÍJ›>ăÉ'ö•ďwŸř§]ŃI ‚C‡“ŇXÁ‡(wŠâţ„D?îézöüsĎs„‹"űNńrÔx€rĽ{?9‡é8FüÁ j?Á Á”[YÍłË4âOAŢR @ č ŸÎřť#z8ľ RłĎ!S2Á`ń3Ďü#V…paÔFńČÔSBa`Ę֩фŇO‹Ő~‚0Ȣqđ's>ćP.IXŠ% 5-´B:łŇ°ńŮűę‡Iw`:‹5sî*âpRö §&ψΜ[ öb‚‚ő)íŮNl™ßáˆWůŠŽ…SÚo„k9ţ} ˆ|m\ÁÁđÚŽ™C#ţwݧIŁ´A˝á€Śłž˛zLȤVŽ‰Ń ƒŠLÄę@q‚ß!+…Bž5(I1CÇ8–˜ŮcUgFfż^/ĽŰwv8ŹŘJťFľľéVRćĺWťôÜók\˙¨Ď„ΐ2yś#VŠGśŹívHÍFj:G;´ÝIčĆ-M›;}Z\×ôčE­$M/1N‘8¤-ăoxővU‰ju\WëœX\lŃĘň‚)ňĹŹŒ%Óᷝ´Tˇ˝ ˘Šk-—Ç*ŤfU\˜‰UšUżŇqíľŢ÷őÔš&‘ű{ę ôHZĆ­C}ÓŐě1W)UVŐd+m nPtRb˘Ť]EšďeĽ‚ĘŁNŹńfINť÷eřN ¸;Ŕ}çęwžóž…ŐĞţůç 3CŸ{îš|†œźÎ™ęfWB!Č9Žđ›gDš‡<Ď܅×Jżĺ7Y•ĐN1.Ţ๔ÇÝ;ߪ߳ěŽňśŞ´öůuˆĄ…‚Ó€Ň­ŽŞWwIi˛+45Ď)¤á]1śďD3CŽM- î6ň^ʆŕbBšÚ)Öĺr8b ŽA€)Ťú`‚đš_¸0ź$vĄŁ\Iŕ ”|8iIÓŠŘ t˜}׌Oęëƒ5^}ŠE´/𫖉?[ˇéë5şŁťfP{H/˝ř"JűŔ7”0ŕâţBFz‰łPU˜”uĆlďg BGy˘Ű^ŕˆ&{M_V : ě–'|]NAuďH!řě†2aDž.Ű/ܤ4_ŐĹ‹FŁ‘¨óœP¸śüŽ\ăČuŽD‰çčn*RҀřćžďäűőŻ 5Z–0őÝç:ôľŻÝd’ :YĂô ę5şśĚď˜z]tú ,rČŞÄtšnÝAüy(uŠÝPŤŃ˘ g›ŹtÓí§´śMtývBWŻ ĚžC&ţp˜+Óaźp!6‹q €ě4Ěů\ ŘŮiişš‘hĐÁLłľ\ŸůmˇŤâî .‡EŒě ”YpŘŻýAÚwwšöňo> T˜j‘yśÄčá2Ů'e:ZWţa§ ąĚˇé˚z™”F\Ś ?J‘Ş(ĂbÁQ€ăŰŔ úÍo~“ŕlęětč歛šü<Xřt3„ÝlŐiNc_ŮǑ‡Ęł*'D9<űGaŚß4§—@ 8<č'Řwâ űÉÓA N>ŚÉwKˇ[žÎîĆ Ž ńâŕ+ ěߟVö­!^xĄ@üÁkjŇýě{ŘíIi@W垤WiDŸÖŰôSžĽ­.Ő ~k˛Đp›Ötnš4ĂAB7oÜ Č Jű`żńŐ`˘Qę‘zŇLIƅľÂ#”ć Ç$8ä×"#Ąšž› ĂU&ËfŸČŸ ć$?§T[^/}š“ §ô˙ƒSLó}N­ß=kwňáŇ}ß :~á _ȟŐ8ΓO>É*CăVqDürMƒSÚĄéÚľkô­o}‹>űŮĎŇWžňöář(+řĚ3ŃÉm/OÜKą9WŰýžš5ŮS œ|ńG œ:ULgXٰGÍFƒنɀ:}H7Ž&äzčܲ1"UĆ­‹;쌻f˝A­z›äľzúqzƒ˘ĂxPčÎ# ŇůćcpÖÍŕ}Hëƒ5Úlb;Ů×zT§ZPăĐU0RÁ¤Çń‰ĎÔ?Ź™cˇXŽJ8C(Ŕ˜ƒ…Q#˘złnăŃ"ś­ÉCŐ ’{Y“‡Ç‰+›`!–tľĘ/P7Ꮀ O”]QŢnć8ńĺ”ZćźĎžYŚőŰ´14ƒ§˝.u{-ZN–müótHJ[)[ORm:*ΗتĐÄi>S+ŐŠ'Í\< =ë|ÔA&ükdUbPśÁŔ '=Ҙm`Ú)ë<WĘřŽh§cœU˝QËĆt7!sN‰9ç^ˇĎu"Nż?˘ÎvŸ‰`çΝg•ĐNĐ~´Ć,‡Ř´§”˘Úu›FŠéDuSß ęú44ŤnÇז\ÔŇsĎ­Ń /gԆI“IüŒCjs{h.Ś^˛Çu>?źp>Ű;š:=łÝܓb.ݚ{§Ç3چqĘ×c}}›îŹ›ućz&şaîeÚř‚Ö_Rľíă đ5Ĺ :™˛ˆƒq`‰?Žĺ/žŒą˝\ŽÍB]‰c ąs|*ĚÉ:ZƒhšĹ^+G•Ăw¤u**S€JG–čĽŃ&uë\;J“íşűĎą$?ǜ´ł Ç˛Ó¸˛ßĹgÂřŃ7˙†őa>KP ěpd˝řâ‹ëcĚŠűŕ={ušäşť?ý›ÂĎľœÝp”´âźö =ó§@ Çoľ¤GH€ďí°Bůvšěz§`QYîö´Ç ~ŒÓß^ č%ӟŻw‡ÂÜ?50ţEřuŘ `ü$}„ž™éÇ:Âpó~ˆăűĂ:Ž#˙ĚĘ÷nžăa…‡žvżI˙m~¸v}SžRÖźDÉYe Ćó>•—_~™żc,žüFXô˝D7¨"—âŕŮ âĎÓO?M_üâYĽă*‡…y&9Í &ā@0Bü§ Ę4› :łz†.]şD;ÝmzőöŤL6(@zřᇩQk2† o”7[-:ťr–.\¸@KËK´ą˝Nw6î°ě%ˆ?>Ŕ6ôÇh qe[ şzó*]ť­9Ow\ .ŻŹĐbkZś9~“‰@WŻ^0K'Şą4%âŘFľˆśˇˇh}cĺ,—iůĚ2Ýxő“`‡őšř§";ý(ÁĹoć^dĺV‚ b‚¸3  $ &Yxʨ+0űqÎčHƒČ‚ő 2D÷I'6݁q– F6~ŻUL@>ťÇ!žçДKŽöşĽ;|ž˜)ś˝łĹç‡mŰ;čšY6Ä8ÜśĚ9omŠ×ˇ3ź0CŹ×qf,8HœŘYiźmňîsý˘5ŰKÔ¤´´´HçέŇúÚŚ9Žž2š(Ś­Í}ç;ŻĐs/˜śŹ–MŰ×yç)—~ŐpX-WČ`Íš ĚýŃââş|ůažwvvśůźqMoŢ\Łgž˝NŻÜTÔ*SŽ€.=8¤Gž|*˛tž}•9iÔXCÇ'ýŘ]ôXi#kłś ćž$VőÁůsŹsĺÄTǀ›a&‘œőݘœfŽN4öCg6 kÔéö3⏦ZdňÉY™ČŢ/ˇk`ö™űŢ'*šr:R’+łsš6Šœçq¨[ÔŻ÷÷ËZ Ěî=ܡŽ”¸űŇżgĄěüńßíâ@ îŞČ?ţśŠ~ˇ]ětç—(űN+줲űZŕ ĂçÝĆźdœĂ"ŃNœ˙Ď—%˜÷D(Ž?˙ó?ge„ú‚Ş˛Żř3m_÷YEüÁ‚kÁžőím[égš?t?Í^ҕVŇ<"@ đ!ā@pŹáDWچď)FíĘfЀ(S§F˝AíV‹Œ9HŁ>ą˘…¨Mq42ëBއfŕźĐBmÉ, ÜĄ\^ZŚ–ŽP2Jh-Ý0ƒá1Ť¤Df°žÉĆ8ßŮęĐšŐsŹĐa1˙BŇbs™Î]8CqÓććEI†ŰŚó^‡şI“’^BŁNLËÍZmŸąJ1ŠŚŘŹĂ,žĹ…E"SĆá`HѨF+ŃZ]YĽV˔šÓB¸HgÂsˆ7F}50G­™łˆh4@§m—´şźJI# $4ůJŇű?“Ŕ]5'Ľ™čľ—ÁZI™ëՌ¸Ź 8Ź›ú3Bk§nbœ ƒ­o€€Ň5őŰ'ľśFNAˆi¨÷ě˜ő§Ô*şš1˘^r›Ă$%ń 3hĂ´Nƒ¤I/ŢŃv˛@)^‘aZŚÓĐZ;ŰhĂ]ÓůéĐöΐ†#ěoœ-枉ľi×qD˝Ąi‡Ă‘iť]sĄBS†€•mĐŚ‰Ő”4ÝŮÔôě5K0ş˝6¤ë7ë´še~›üűƒMVÂ5źrĺ"9{ŽćŢHM]öĚšöú5ęöp Í}ťŹ2â‹Îkʆýň1ŽýĽć €Ľ @ iŘŘĎL.SĹNŰ,âR+V9ň‚¨5ĄśE {łýЧG'Š}˘…ćŽÂ€?•yĆÔŃUdŽEŔDĹ4 Ěv[ÄFM™gY“…,IŽ˜ôĂDól ľg⏫3wniGIŁnŽ{ÉpÁ €Sů)“uœSÖ`ŸNČ> €ƒ˜ů{ÝWĆŠ@p—°—WŒoßkw×´Đ_Ž?>iĎď2L64WZE8 Š?ögÝkěˆđBíů`BßtâĎáő…î%ńGpzŕ?ÜDILć<ÍÄž˝ő‡‰’Xœú›ź_⏿ýžÂĎByć%Ńa>ůÁq…Áą‡ŞřVЬՎ@áV)ŠĚ`~{a‰Î?Gj”Ň­ÍkDMÍ A}ł: zŘ FؤK­Ëtqá2Ť@ĽD „ÚjĹ 4HGԌZ´°°@ŤŤŤtýÖuşyç /ŽĚ€˝T7ôyi7čąž0†üÔŕ%ŠâˆúJŰf żŃp{Dý­]šr…€sýúuŠƒ„ZçŰÜ ŘŢěQŘŻŃjt–ťđY9Kë76řX+t†FzH‘ްÇMCv‡ŚSÜeľU“oWĹÔMLL°Äş/(;ĐąŠŃ0îRŘ0× J™]ÔBjP‹ŐŠđťc:ř˝á ß; ¨óXIĐáÔRł˝o‰@‡Ó´Ó퐎"ęŽmŒčú[') „˝˛†~œÖ(ÖMZ[ŃVş@Ą 8ÄZ´°Jí3—¨˝ržę +¤MťHŠĆ$œ ; Ž.VnůwGü i>-ĺ"ń'Í +”“~řŹßgŤÓ§¸×1ĺŠß h}Ťf>“ M­Q˝ŢdőŠ…vĂÔ TŽ:´­ŹÉdėE‰És $žxƒ ޏĂŮ8CtńÜ"]šÔ˘Ĺćˆ6śľi—1“~ÖÖśŠŰ3Ő܈łđ_ż5Jë4J ĽŐŔ”ĄÁ÷Íh¨hŘ×LĘJcMˇ7͙\™Ú­ŻAMf•:”6ˇLžŠÉ˙Îmzä‘+ô䓏ĐŮłçŠŮZ4űÖM[LšÍq†5łéäŐ ÄÓ˛A}Ę[šbs'(TąßŇSzEĘTÚbˇ˝k3î Î őŝ­,\:œŸŮ§Y¸~ýc˘ţCłáÔ0Ť„ŸzÍѓjÖ&ÖëĄ §BŠë6ĎZâĘ‰?e@AĤšP q˛Řӈ?6mčÚ3LLGŕnŔ…ôÂ=ć‡âs÷*0+\@ @pš1+ÜĐq|psLÄU”ŤxOŮ\řœČŸ˙ÜkfTŃ)ś Şj{büZ}ăóƒ˛q§[ŕ׊ŐîĹŮ'„ä#8L8•tçě{UD_Š@ 8‰Ń@pęŕ$;ćf†„.üQ ’`ýN˛C-˝ĂĞ˛Œ,ž×jËI‚Źłž˝ÎëD§olB!ş° —öb›Îž=ËĄ}0[Ĺ î ü\˜Pŕ1˙ąAHś űŐj™Ářóç™čƒAţQ2Ěˀ}bmĘĆ6¤’NÍིÔŽœ…$:@ůp>¤˛¸žIl%{#Úîăčb`e-Ś^ąÁ*ŞŒTʝ¨X‚‚9?sÎ5“Ć3l Î9€PŁžŚ^ˇÇÇÄ6(Ó OžśË+źĎ‘†+иóŻ×•9ß>­ÝQw$ÍuPç YQ÷ČQٸ2Ϙęsř3mՐŒŠŕhÜ!ĘÂW!ÔI42ő—ÚĐ`ÜŢFY9eë/#žwFo{ŤOˇonó˝ĄuĚ÷AskHçΝŁVSÓK/őřžăşÖŠUČi6hii™ĎɆ1KČřxč¨÷ƒUţgŽ´ŚžŽoŰgԚЎ]‡?ŒBVÚá?´Wč‚ԟeX¸ŽTžőŐ ”UšümŕîŔŸ™–“Kd˝ň}hŸ3Ő @ œtŐţiU¸•rť´Ms8ŸÂ´3Çę?Z=ƒšfÂíž üšqJń”#1›üŁÄÍ!œ8ˆ˙R œvńG œ:€čÇ ô€ĺ #3°Íj :č479´ÔpD}ݧ~ÔŁÚ+QPč3rŸš”ŻGToÖ(ŠBžqăěľ'-rbĎ2‹ß䎄LˆŔ_<˛$¤Ĺ ­nĎa„PAÄĺB™A @ÚzdŠBĹKsĄIĄŽ¸|:ąiŢäe•@řŕó j„¨L Îđ1ˆAŒ2‚L2J |Ňc0 ¨ÓďŮzŠŐ9b–q%ĺ`Jćœ#&˛°2”†Ě€Ą Áaň ňYŞŰëQœĆŹ@1ńŞLŠ%X™k›ýAÂŔv PT§v{ZíćB¤Îa3Qřé羡ÚŐó§P–xŚADSśAâ ÚęlĐ7ő7ęPÇ´„‡Bř)Ô Ô¸.Ů)pÎ ™dÎ3fâS}Ái'PJ,!„ o‘]ꙆÝL˝‚d4Ő9źňŠ"ĹתÝjÓůóL7ikŁkś™ëh>2×yĐŃĽ‹ĐĘRnÝźfʘĐBťĆĺ tHK‹5Z]i›c&s?RÓ>ńg<‡ÍŠyżÖô¸âîĘáuöB¨łm?4íJG OíC{R& …9á„4w­íž´Kšh‚ÜăU*ż˛L°<-Žíňˇë¤ó,Ü ¸{Î)p98RrYal^Ě &@ KqŇĎŹĐ1…m9łg’,ÄvĹţţöq6ӉCjFYř|”LLÇţ„ĚŠëőäú92ŢÝ9,N„ř#N`HŐk5&#ŹŽŽJ4mv{ë˜úqŸ†ÉЌť§LŹ Â€uę 5ęęZëŢĄĽÖ2“it iDCę§1Ľ˝˜ë=Úęn1™¤ÖŠYkRÔ㟐Ä 3Ťg™d˛ąąÁd”VłĹƒúŁxHA¤8żÎ:éČümwśh¨‡´.RłŢ4eU4lޏœ˝áŠ:!ő¨KƒÍ!Ճ]ž|™âpDi“Š4՚!-,-ŃĘę2­ÝšCŰ[DĄŚ¸0 pkžýů IĽhB…ŔĆU,Ú% 2VvÍ*Kü!s ší&1őCJ% 9Ôˆ8zS¨,)e„U`ł¤3XCZ"Vš˜:i˜´ćXćú˜˝h”ŚJŐĚőZTtśŠ¨ŰąńŰ6ľ-3[Ł­­˜}Ú­5š m)sÜGéÁ‹–ČenSb&ÚI”‘a(äëhj€ÍćMTŞA7˜^E ş‹˜ŁóeŻŇˆ"sßÖk¸IFܝ2+U GYZeŇT "ˆ dč9ţf8ý…eĂýß÷Ľüg‚@ ¸(8îŐî÷˛@ @ ˜ťmF—‰ůłú•„Gü)‡ěRŽw?î›Wő TĺgŢI÷gˆXM„úRĽÍ{”~ŤÉ z—cÎŘ&CĺǢt{?´ŕ°pţiˁŕ°!ā@p*•%˜0Ľ(ĺ€Č“Œ˜ÄĂčPNQf}dÖŤ!­uÖi˜Ž˜ŘƒtP™úިCýN—vFŰjÔfPžf÷…ęˆA”°Š8ý^Ÿśś6y=™őľ€UX ¤ĚSy§ˇMŁÔ†ëBH$u@B ƒˆI­F›:q‡ś[¤ś~‹zj×hńěu2ű˜pÖŞj.œ?OÝN‡ŇuJFƜŁb5 Mó¸öćJăfăX#8#ZŕC—•Wě'ęŁ@ü ,ŃĘ<ľ°Ĺĕ^@şŽ)Č† Ň c çU@zŞ×h=JŰđ(|şoe–×&UL˘LM%jD4Źz 80íöľę-ž]sÍúľ&ją%‘í`ů˛ŔÓjnž.€ž{‹Ľ čŁjĄYĆ ;V ÇÎ4łőÁ,%EŮőVL& Műo5Gܞ čƒmŘq!ꚭ§Y_ŠYg- 2UOzkŔńÔA(Ş™űJ<8ˆEˆ M=őĚqă>-/Őéě™ÚÜjr;żuóśŮžCŁÁ6-\ZĽË—VLkZ\ĐbKłŃ#Whu‘h{yŘVtń\DgWˆzCE^ŔםUlŹîMV+—Ń-”/ŽĆR*BşűPłôŚg“P¤Śž–­ †6¤_Ă×ÜýŠ@ŕüŕúä{;Ÿ}tľ•ňJâ—ß뀪ü@ 8 ˜řŰjń3ę€ę”~\EÜ{ýšśśfĂüe÷Š}†‡üžtŔoˇ?>g‡@ NËáÍ˝0˝ťaŢ>ťvłćěNăőzŇ ĽfćSQ†,ĎÂgUţs`Ż>řЊ.ĄŠü§łA“Â<ČS¸T{*é€ű€„ ť7¨jgóŽ;ÉâĎţ *žŠţłĎ=Ó|Uf˙ňäĘ˝(’é)Jo÷űő ‚ă!ţ‚Óc Ą[˘IÍtk2썂qe>ŇžŚŽęňśĹö…IDř‡Áş$N¨Ÿô(í§ź})Zćđ]nPŽoÎJľ:5ę ŢÖÎÎ]{ĺ--.Q˝YgeĹĹŜü`ë0ř‡ň ě('uˆz[ÇL2Š“wŘäu4ŇŹ˜‚mžą‰źpŒŽNL^qęçţzĺKřnI6Ś>Ă^NüŃPÁ hŚH‚PgÚ |bĐuĄSżćZ¸ÁNšý×ëůöÜA’IUČ1’píLjKüQրOtJĂŘnĂľDI†6ßĄŠ˘ŁŃŁwÎ( Ą %ýmj™ö’„AÄáö–š‹C˜ąZŒŠ‹F#˘v;˘fCńš"ě[2‚úÎ /ľzȤ5lNş\ż8§QG݁­ÓǟxœîÜ٤mnŸ:/0)č.QŤ}nÝčć­-ş}ű‚Ŕ0jľÚtńâEZZjQťŐłĺ3×ćěšłf›mďƒ~Ç´á.ˇY>omĂçAČ’›čHc?wVáş´9¤ˆk8_Üsćę}ł`™ŤŒ°ăœz>@eżYů'ľ×ۅűb  暽(ö†óçĎÓSO=ĹĎ[<[?˙ůϛgéž7/\¸@=ö§ĂýíHÇ6€ÁňŇľĚ3ővĆű0iÖ<3@bҰ@ @p p\ÉęNí'ďGU+óLQ÷چËćĎUĺU^ˇ×úÓTÝżßĎuŘŰr=÷G얚HUP—Ćë­rxyjáüŘ˙žn÷ě2 î2üśé“+ÄO%8 8âŕžąeOyű´|Ş~ŤiäM@ ¸Kâ@ 8u@ˇaŸRTP=ˆhąÖ ÁhH[›Ôtihžc0 H=Ýç}{Þ€ŻQ=ŞÓÖp“zI—ń€mÉővFA‹6zëÔIvhŤˇAŢĹŠÉ+ XÍd DÇŹŘsmýeZ.PłÝ¤á—m8˛„!ĖzŁNý¸GwvnłŠ—#î˛*ĐŞ ć_3lS‡tsóUVÚ꙲ő{ć˜Cęô;´žšN}Sö”•qb./žnz ĎşŃsöXuőo/ź×Ě=Őd莃x ™Ř‘P×ČMpágdËË*JpŽh8W"1˘6u;ŽŹÎ‹ůĆІj3Ľ8@^fŸXąZŒJ‡Ĺ‚­=Lmä¨ÔŹĶÄכĂdĹ1Ť?iN1Îǎ5EľGzČ$;Ł)M@đ2mÉ,őzƒIQÍ\~Äói fu؅UŹ˘€ÂHQ"¤W`ÚWšőľŰ[Ła2G0łß…‹KŚŽëfŮ†cÂ”Š§ĐdŢhŐŠŮX0u?$hiĄëpR&Ś,/śŘ›ôŽiżw@6‹ŸÍěW§Őe„ú2e0eît;źmiaČB“LÄ dÍ˝0y‹gtAí'ľçĎm&đÚ/ÍjżŮöŹţJŐ9­šKűO˙tMC“×9,ĚĐŤ˜ ćyˆœ:–2m7 m>ó8ěXĘŽˇłń4ŻSŢlˇ<ě›Ę×ř)JˆŤL‘ˆŸ)ŮÎAFôqŽł‚lš¸ł‚Cˆ9 î€ěƒç.ˆ;[[[ˆ– A^şt‰‰B r:€Ř‹}@Ŕágyy™IƒČð]ÄĄ$@ Ü]řឪČ?ĺ‰4ł”&vłßËçěÚ׏¨˛‚EŐ1ćÁžˆV‡ˆŚTéSOţŹTÄ.Ľ›ß§č ´Qüš÷¸_*)G˘řspř¤‡Ýšó8ËŰwS›@ 8LńG œRŒI át‡)6‡´ŃÝbR3^`SB–’¤#şş6ŕyCđ;Vą1ś­áś9ág›ÂNhIIĚůqžƒ!˝x}Č!{†zČd î`‡ÂŘ¤Ý 8$–$ç7Œ´ą“ĐśÚ˘Ŕ OrPÚŮ˙ /#ę÷;´që6÷ž“LËpÝäą˝f‰L ł8’OJ2Ĺí-sŤRUŞÁ jOĺ’ŰÎľßAfľRÉ)ő˘őTĘ„Čœyˇ—$­QىP'us¨:ľšm“@)Ȝ_hňiD -śAŘRW[%¨ I˜<ĂGOÍď‡ă0`1ÂLiS,™a‚IÁ8/şr˙EîJ(çć0 ˙Ř!Ď@Œ "K†Ń*1KŔíˆ˛dˇ¤ć|ătÇ|ŻQłŃC—é‘+Kfú6Ýşő2 “Čd‰çs´˛źBőhhŽ<Ě'L{5őÇPŽęҙE ­EZ] EŰŹńb‰+šCU-.jZY ŠłPßśnʍ E ¤Ž˜WŕęBƒ HjÁü4×`ĐQ-L¨iFTϜiö>uÓůwnÎ4kΖGÖQťTqN$§&lœkćÚo˙~›öč7…pžŹťx– m)ŘV sÎ5&ąEQČۂ,#G+BĐ:ÍHPžł1?şś÷š.ť@ä tv?ŕ;żűU!x7ƒŘĺ3Đ*ĺĎ:ćS˘Đš×9…jĆaŇl6(2Ž—(°g ŇOCů>őBZƊÉ;f‰Ě÷zŁiž¤@ą'#=%şÎ$Ť(Ué€ĂťéD[˙ę×>#Iq(,¨a_„ű‚ŞPvԑy]ĆŹF”NUţ™ŽˆrřĆ˝›Őä”+2i}tšż,Í.ŘqÄÄÔmĚu՟ĽĽ:]ź`]z›ý€śş) “‘qb%ƉĽ)ŒŹG#ÔśgšcÄ ’ ť!š…6ČX‡řJšţĄ¨5â°\( ”ˆꌠ1Š8aU x4 Z`~SĘD:´’$ś VJ¨nŽqťŐ0ů+ăxëłbĐ+Ż`°Ű†ăSU GíVcűŽiš˝żsőĚĺä÷<1Ń' ­dx 2ŇOÖĆơŃ$Íɟ W,•ŁЌ÷¤ňîšăśŤ1ľH Ü%Ŕ‘2|___çO`{{›y^xá~GAńë⥟ܳ*? ľ‚„gÂćć&§›6ƒW @ X8âÂę>ţřălO?óĚ3loĎô×Aşqůě…ř3-Œ €‰ěĎĘÂśĎ$ţđ'Ý?轐ŠŽ7šĎ!0ů„EW'źE”O‚ďKůţ Íuš@{Á^ŮB%(-žÁý´ťƒĄŠœăzŚ‘|Ś…+çš! ‚Ă‚ŕ>˘“xˇł7ŕXr˛ěăV"×Qj×;Œž>ŕ4Áŕe[/ĐRSQ”˝ĄjZQÝ#ţ€ŕ˘T’łđűý‡ƒBH”°f˛ĹLJÁ6vÄ5Ĺ,Źaw@ńĐ*%aťÎfQaFŤ;ĺÂş@üŚCVcşďČřžó!­ą„ů€0Š$'59‡‘;W÷př(S'n†BŘ!\Lœ˜}ďôhs'ćç­í”[pˆeĄž"Ď,l†’œ\¸n¨óž)Ë`0ʎ1â㌆v×Çd`9ů52Ţ;Ś~ÔldŰ@ŞĂuKě9AéJ¸†;Ű;ô⠛ô­§7y€\;‘Ş#‘jUŔLb,/žřâÄ6<[@ä\ŘŻ^ŻG…|óŁ`s @ 8TČ{VpÜ?3/_žL<đű;`ĂoâÂçZ_ËtçüÎŻRv÷D9 ˜ű,ŤH¸ĎiJ?“Äűą×ťe…e/OpžŁijnť;_MJ ƒĐN”Œă̟Ůíéx;eŞÇ<“ďĚż(xöŧż` ˄ŌxƒáˆűCs=xŇçŁs Řů¸"RĹDĆy‘^Ćęď+ôi˝G€÷wq/ěą…Áý†@éŠ"şô{ĐJçjeE—ŤsěÚY™A *Äç?Ú+C!‹˘OžGqćÍäö] śkUúĚ~ej@čŕŠq¨ÄCŇĂŤź„ąUI5ňb‡#´ ^­ "WĹ4  ëCv4ëQŽh’ cĹJŕT€*N‚đF–CŠI•' ^…Ć׀°l_ĺŽLd’„™“!ŠŽŠŚí˘‹gMm&{'iŠŮ۔]Ú ‹SüąŇQŠUp܂X¨7¨ň¤ŽSČí-`˘OŤŐdRT˝nœ0zȊ=íH@PP´śśCˆ>séŠqŠE4Ä´šÓíő˜zÝőŚÎëÚÔ;Ž‹UâAY˜T…vąÄ…&HDćwĎ\§~H7×FTowéŃSZ\$v ą“q" †Cęő{Ćɖ˜k—Ro˜PkhoqŸÂhDľzJQMń|0>fłeę" LKWÜ'ÁœőË5”Őĺˇnm™źGÔl,ŃâBDÎ^¸6¤o?ÓĽNoÄף%T‹†ůŒ¸„,ăŕÁ'‡OSAŽ:4ił˜ŤU3×Ruéüِʇě >¤A7ĄőÍmę€X4Lhaa‘–5WţĘjÍŹhhڇ2ç  ńdĐ^B˜6{é‰i/hÓAŠNgŐŻ#Q%ö“/Žw§:§Çml?°„ťŘˆŤ•ň€ÚhŢƲ¸f9¨â°Búîr }s‘~Äs|×PV °ďNň~Kĺ ŽΟż@'zŤÉ=C§@îÜ{ž^ .˜;–u™´Uâ({rb´Ę?ËÄ ŕ$ öĹŠ!\/‰Áď‚ Č3 Ř8uœi}÷Y„ŸƒĺqĺrĘ= ćŔoƒňÁweÜX‡4Ž$äÂc_ĽđiŹż.ąŞ?Ž?ŇA]*CŘ6 -ČœÖ‚ÉğŐLžĆGÂOTŤÓ’ń=hň=ż´hœE Să+ę¨7AÄĘ)@ö™2ˇÎúňRó̃Ü]œV×׉owťů^÷™kEˆŻňs¸ňŤökZUů Áý€ŕžAӁúďó÷eÇÇqm!“ƒö’ćŐ´ĘGă=lqĆq`ž×C€!†dCt…5îŒ÷ş=v4Ԛ ^ŕx€2PżťCŁAŸŁ‘u<Ôj;6śś9ݚqŔɀu*yÖ ްbi™g%FvtŕXK‹ ´TkZ§Eeł‘ǧz÷LůÝsF˝ąâ‘9|ćëĚ`Ś Ý…çfgU…'šŐ“ŹşNJŰŰŰŚž­tőbc‰Žœ_4ií5XYiS?Ö´žžAS§ÚÔYŸ<Pú3Úo@ŁŘ†˙‚BHšĂ¤Ľ”°ęPš‡dc'Pšp^;;şu+Ľ_JŠFtéŇYžÖŽŽq]OŁnŽłšn5ł,´ÍąĚqśśv¨×QŹJó›sd=K-‚ӁiaÄ!'Ě16'węрĘ˙“°Ąw´ z Žŕyúé§YŮçŃGeßBń޸qŁękĘĆž2üđA]šr…Ţüć7łO꥗^˘ëׯł˘ň÷÷ŤĘsŚÚ÷w/p!ť\3řó{~7|wi°}uu•×#ě°Űá›ĂţIţ˙ĎŢőʲkŮÁŕd¸tËîľíŮÇ^sî­kʨ¤$u ކ–^ž ôë÷~ ľÔ’ĄŐřTP9U}ˇŽ?÷říÍréðç˜$#˜ą2sŮí9ÎÉ˝2# Ɉ 'Çö6lG:|`“QhŔ6Ÿ˛ČiOÄÉg ¤lYú˝ (Ié˜íqÇ_Ńű7oĐ÷˙ŕ÷éťť[´™Oi#Žčg÷ŇäxhŻ|QĽš!žľNÂłęmŔ;űÎy'ˆ?틼Z§iŸÜ#ĘőiÓŮڝ#ŤK‰ƒërRP@@@Ŕë‚@ü x…¸¸çÎŮ}ăü(D&ţś'WI/jAăháä؉—QĆƃ˜ŚcŞ˛„Î:âf ĂŔ¨*Š“Ć4Řč‹áĄžô|BĹÔ¨UEŠQ9Ľ–ü˘Řx0(Ţ`Łzœ̆ś6púÍ&9%źm{Ӑ^ňbÎǗ4ŸŒ…řsss—Ślđ‰ŠŠÄ$ŻĽƒí5ꐙÖú|á“ (Á˜$.óuňś”ë(ĺëD8ݞ4rĘbNERż¤K!ߐ‰aćú6~ށ%E´ąšIšNi0x /xmŮ`"ĐńqÁގ~d"¤+k0ޤka“ĂoE&\źňŒJ†ŞƒsîW3şoJ=n'¨őű|ţ(%rMQƤŹÓYřZ¸˙n :4bCĐxŽö"/Œ^@@@@@ŔIřDgŹ x= NŮLčŻń'`-< çôŔŢŔÖl°9Ŕ^†ß^HŠÓŕ}ÜDžśşví}üńÇôýď_ˆ?ŘĐ_|AŸ}ö™€@>B9^&\H/GîP”[ŘćîĺF˝9ŻŠ\Řî„ÁĆăosÎ_Čy ”H z„…/Ŏ„ź śăAĺ˜Üšř<óyÎöŞ!ĽüűđÎ#ÚÜťFwvśixó}ąHOGăZiĚ4‚űs>rzŃ4'Տž`Žz%ď™€Ë í ´ĘQhŮwŸřłŹö€€€W@ü xçĄ?:jí[sŘi3\m*'Ą[ű$iK1‰ô܄ŮęǚvӈvŞ‚¨Ôt;F˜Ł)Mć‡lHxFŮä)mněюžRqTŔV@ˇ’”ćݒž÷i0ÎézžKýyIQĄéh6˘ƒů>ÝJ3ÚíkSÁF†nĘŚ62¤\¤kůž2`\ŘS<ŸĐ̈́ ›1•ýU36^ÍD^8)g”čĄŰň=ŠVM:UŐ¸3Ż\ÁP­Jkę5ZPJb#*+ÄQ‡¤2ŰG2’żѕĽő:šúý”łˆĺˆŮ•9§×BŽJƒu˛ž„’šO‰ĆӈFÓZ 6˛ü}FÇŁœşÝMÚŘŕz:ĘĹ`STk.¨“j)YšĽ&ż,•TAżgČ[P :<‚:öĹÔí$ü‰¨×ďs;ftóƐ67K!úŒř|Q2 J ˆâ-Q_š K [–fą„¨ĘiŁQy­GĂeÎŀDą çśn‰H-é›ôR1ęp]zń´§Ú+´K¤jůü€€€€€ŐhŰ|#Ý:#q0ŇźFđČŻam-` –ŠëáđşĂ)ß@ń硿ý­lƒMč<Ç;ĽˆĘx=Éo¨üěíí ŮçŸ˙óN?úя$Ô2řţŐW_Ń_üĹ_ĐĎ~ö3úÍo~S“cÜń>\™•ă× Üf¸ćŃh$äGÜÁo °a´ ňăČ?°š€¤„}°›!˝SCrŞE¨C§ňăęűröp˝tŇD^)˘Ív ŮxBş4„Ą˛âú´Ž`8çăÇsúŸţçôôÎm!PAu¨ßësَ$ĎJŰ6X0î\ B.ű¨ ş€WˆwŤű]ăç˛çé*{sZŞşć…řşĚ˜'¨\5ń' ŕ-ƍgç8ˆö ZŻĎĐ}ŹĘOɰ& )›Či3˘|JÝHÓFŃFUPĚś‚˝˛ásśěS§xFYţŒUD[|Üh>˘˛¨čÚć *SMÓbHýš˘m6ô *Úâ<ˇ‹cşďҍNE‡G˘ŕł×ߣ(‰¨“äB ŮÖ#špÚjÂÊéˆŇ|N;QN׺‘ÔGCş¤¨œsšř cHě]QDŤ+Ł"ĂôX5 XFúYląŚŢ*!ëŕ"<:EÜřˆ˛LQŻSŮ:…ąÄ(âˆ%bŁJlʙ&š2¤OA⊏q&Śá$ŚétΆŽ)'9MŚJň‰ă.ńo\s‡â$Ś4ž‰şPˇ›„ŒăV%Ą×ś6;œwl B|ÍGÇĆe˘4E,ynżÍ.íî ŘpŁh0˜Iˆ°áˆ]I—Ć|ŢRg4ď°9Ÿ'§$EŹxî#՜Ż$ŤŒ˘‚OœTÄi’šçŠźŒüł‚ôăžż„šU]2ć—Av´ťŸÂ<0 ŕ\đU~Úzţ_ˇ? ŕĺa­â>9:༠´CŔ:´ÉÚ!‹^g ‚œr•Ş;. Öîî.ýŕ? O?ýTq€›7o ŠćŢ˝{V ßϒßUŢK.$H:@;oŒ›]Řxś!ÚXBSř|˘ONőÇŠMĆcęd)ېLˆw Ď6ŸŞ,ܕ˛i$˘ç+r:œ—ôůř˜Ď1…‡qÂyć”EΞVQéŃ~.dÜšDľĘŮÂ#îę°ŞéôŞÍW]ůjÍŻ×ú83ž\´/đjH?˞Ľuˆ/eœzŰ!—…öň c€€€× řđ qŃ&EçőEąśŽ|íźń^ AŐ¤Ď ¨UcźP‹iŰ劢XŒE†çTb ›››<ĎWˆZ%F¤IS6hăm[cŕBMá˜ţ` ŰŕA#B†!ßNÇ|?~ĚFŸç’Ţ1t>őÓţBžŻ Ş1Ć(ŽóKŠىH$WĽw$š„đ2¤. ’ÔüîőbŠWl;<< ‡ŸĐƒOřŘeŸBÚ*IťRGhŻ)ŰĂT4ŻŰ 疰j=)Š‘l†Çp° Ÿ˘˜ŃŃ DšÓ–t뚮 JŁŃ˜î?zFŁńŒ/Ź‘¨ĎąńĄ×ş˘䤣łŹKQ&yĽÝţՇnQĘŢ7aĽ# ŕM†ż )Ą1[žy'ˆ@´HÔÔľÂáiĘr熨L»ۍP<ş€€7î=žŢ5řęc:UŘ, „S˝bpçÎąg8˛‘ύKׅ“YuŸG1Uˆlą§˝Ří—ĂĽÄ^ś&܍+—Sšĺł†LŠýeU‡„âőŹŰő"Mü=?:¤§żü…Ôďd2ŚnĹö(św)6΢ýĂŞŽŸ—6÷ŘŠAż^ m§\[6„EWH];‘úŠó Kŕű_1ô[=Vö ?>Žć‚ŰĎUyćFŚB˲˛jbć™ {śS@[÷<NDŻ ń' ŕ\¸şçe„—ń*ń€^č Ő­šÉ°ň~Ú/f#Ľ–PÓË:´ťš%Š<ý4#ĹIo“Ţ ŠŤ”6›Ôď é…˙ËÇŠbF;ŰDÝ´OYš óA“vˇoPżťEYҧ^/•“N&SŇďď’Hz;\ţÝ+ŠĘ#Ů×Ë6(&x_•b`črâ^âObŚ›bÜtrćÍôd54d§ócY3JIŕš –ŞSż‘ŠđRâľk‘IŽ*Sů OÉ|DEր¤)N*ęö3ÚŮŮ N7Ś1vŽééłçŇŤ,S*Ř0“đőní¤Ôëf†ä“âü0P‘s <„Ś‹8oä_”JâľOg(G%ep&¤/ć9'›Š—×|žńžŒË áçŢý}:Íů\‰Ti>'ęŢe1U1çËmÎéŁNÄmިŤš­ÓÄxfĐćů'°{Ÿ+†íű~Ë.ŒXzK3ĐőÇ?΃^rBĎdâ&ŻíTË~‡ik@@Ŕ›‰ÓpmƒÝ‚¤7ż“ž¤řsľpjvUý+ŕÝBPüy3Úá|¸L¨ŤU‹ç—IťĘîpŮ|]Zßç†~đ.`QDçH†0Z_~ůĽěCČ/_ §­*qZ8™Ťleplŕ‡źáŔéʅď½휸ÜwŘáD˝‡sé\×Á„D+I—­1zkŹ˝`Ÿáď9ŰšĆÄő5ł0Ł­Í>íđg2™ÓńlNůŒŚN1H×.‡ô2uCmĽRţoÝň\m‡inŒi‹–Žĺ&´e3š3”hÉŻ€ˇ Žźă;Epd…¤˝&!ţɇGVGüi+œů㞵aĎQś€€€€Ë"ŢNř#˙KÔŒlkŰÂwcŘňÇgË&獀gžćݳŒQĹť•‚OŠOĺ NÁŕđfÁź—ÝwUŤő9C]­0¸rüež1ČłÚLňńüţ’ő˜(çÚĐ6ll™whÎőĚě‡L}˙ĆóóĎ>#ýË_Kýxá5;Ăi¨Ów뜔ă×áŽ<'Üä;:g^5§_š^Ţ0fOMXnuž|WŚu™ŸLof潉ĚJdţĄäŻ{‹FvżsZjf xqYîřř˜~ýë_Ë÷O>ůäÄţł*ţœXTÖő?KĎť ý|đÁ’סß~+ÇÜ˝{Wţ~óÍ75ĄGœéŘőgŘÔ`›Š6Ԁüt/Jĺ ńiŃćFŽ_żÎś˝ÚŰؔg ÂŃ?Úß§ůÓ§4¨ą{(ş˜ÓÝ ŢÜgŘ G°ÖďU!ŒÚs¨Ë„:’Wň+o~EĆFŐf‚Qu2…-zá›ZqŢľ ™HŻíX´Mœz{ŃśŹ^Í/8ýX{‰qžĐěĂÚžHíP_Ťîö9ü}A( ŕE#Ţnœœ\,,óŔqĎ?x;/é§Dęĺű—[Ÿěė+„^4:î‚n~KshĎŠŻz âȐO2!ţtę´XőꀧÍ8›rN›[ŻB!0¤Ľ>ęSző”nlÓć`ť)ĄŽÍĚrMőn˛A4ߐ—9äoZP“§/xY­\śŽu+ˇFń'f#ˆŽ"*ç >AŽ™ëg^ŠâÖ8“DJ.†X?>{Us˝ĽYĹ ^€‹¨*"ęöş´˝łEł<˘ńTS^Ό'Z5˛SÖíQ^”Tq]ˆzďKůźeJ– sy Ů7›•4›;Ő!KŒRvÄ4Ďů& ^ᘔÓV4ž }D“™ ’ŸA´ęt;TL siŹ§)Ů*)ë˘@„kUju œÖßÉ?mş śßŠgO}.o†~˛(ďs2c˝ĆćçŇýĎöŰeńĎO˝2í=Ű( ŕ̀r¤ć˅Ł,%Ď2’†=ţ€ě‚ŚŸšůŁŐ˘Ô|@ÚžŰ̋ľô˝ď~üŻţĽƒMŢ6ŁřOţ ýęßüżéýĺ_ÚEęć؀ÁUĚăŽaxN\tAç\ǝ˛éçuž|Ď[v÷žŐŢ|Łĺ8°ÎœúVŔ›Ž6AÇýĹXóŕŕ@?ŻţŤ_ýJś#ÔœŚîÝť'äŘTüźÖ)ţ\•ňˆ?}ô‘Œy"ƒţđ‡V=z.](łsîętť´1°­h‡Žď퉂Ńd:a{T"¤ \ýl>ŤĂyéĘZ,l(x¨H'ŠY‚Ę‹\Ă YŸ$ňěŔąHóâGăőhNďohzo/˘;ˇ3ş~­K;ƒŽއ9=ܙÓî §űĎ"Ú?˜ĐmFs¸Ę]zQýjWDO óâ´Ň;ÇŻúťŰž„¤ŕ÷šŽŠjâçyJŠWœłÎÇSüi‹ýżŸ¨V ZŕşśO˛âüjĺ8ły‰˝Xb×ĺzH›8őöĄąy6ĎŘŚŃ|ĹA?ĄŸŢaQ°ůTş2ŚSŹdPÄ7ëxŽÁšŘÖ(=ĹĂÚ ^7âO@@@Ŕ%qVO‰óťJî×Č^ˆřC-âÍK€jM(úŒ^•Řwęľ"kDQéF-J˝*ň¤|ŰĚúˇxî<*;ŃÉŮ`4Ϩ,LAH2L‚œG 6€‹ĺ#o­,ůŞ#†ŸÁ`ƒzÊŇa!ňÍsN/jAÖ83ŸŤÚ…ź´m'hPĺ(Ç|^ˆá$## XIhM•bLĘsR1ňbëˆćyQÇL–kŒ˘ş­…€”c†×3ęň~‚˘({!/Ă C)ueçq!՚ßňďúôa’đ–Á˝ŁđŢqŇÜx‡üýż˙÷ĹËúŮłgôŢ{ďÉ{ëĎţěĎčáÇtóćMú˙â_Đ_ýĺ_Ň­íkôőý{ôż˙ěŻ)}~żő2šÇüŽŁ>ŞKgƒžň¤¨hœőčOţĺ˙ƒ†×Ţ'­›SÔŐô'˙ˇIż{ôŒňŻżĄ$îrnŹ,™›ŢrŹUüĄĐŢL8u9źţŐżúW2§úŤżú+úÁ~ ßř=tWČŚOŸ>Ľď˙ű˘žńw÷w27kă'?ů ýň—ż‚*ˆ.ÜIJqüOúSú˙ŕĐűo˙ţôO˙TÔ<ţű˙ďKóě\Ë-înoo˜ńńăÇKŻË龎 ď üd˙^¨,ćŤŻž˘˙đţƒ< p/"Ôp/aüůüůsy&\ľÍ„Ψř|ç;ߥm^äŮ&âňýáţ!Ű[Œ h÷Ú.]ż~Cwö÷¤Ü{{{2^qi4Ňx:Ą˝ëÇtóĆMą=ágŮŰu$˜%3Ôăœ7řůqÝĚä;ěO›r-‡ülC8ř›ˇnˆÍuˇ[>Ľ?˝3˘ßĘš<ÚÜ8¤4É5ç× :źEtďăô›oôWó€~Ç6Ľç\ćɚZŃ­E{œĄĎ¨ržp ˝(›yí7Ůúťę ˝˜-í%-½˙.đá‡52ᐢ&>+˘ŐŢĽĐ+X"‹ßˇ[‰—۸ô ޏ/şžś ­ŞQ­wÚiĚÓî?ľěúÖl¸,‘çő7ŸďúZw§1ômŚŞUŒzĐŘšBϢcëŁĆKŇć­ĚXFěă°_Ă­KůŢëu齝ď‰âl62cQ˘‡b"ŇTÚŇÓź~¸ Zľ˘ţŰcĽ üđ˘ˆ?o´÷io?9#X„j}h‘|˘É?^/HVäťĘ˘Ś-š˛ˆKd|Ű˙\Ť.÷Dő ŠZ5ëqá}ꊡőS#˝ţˇWÇjIJľä܆9ŻęѲ˛nukńdž[ŇM@$_ĆH×!=0+Ž< ÔČ%Nw5”7ŃnO˜ŐÂőčSóZöą§ůĘX”Uć ÍŚ ‡Š˙ňzYĄŹďŤHÔyđ"LPDíuĚÇöix„cçźż˘X™‰ŒÖk*QQÇ̝LąĄЧâsĺ” ygnű8Bw” >Ś0 )¨!ď@™G ¨Qn§ńLŃÓCţ<-čÉóœ&ÓJ­Á#LŠ”óä”QĆeaŮx‚•œ šĺt¸_HxłT<ĐŕEI;E´$˘ťg8u"­LUň}‘śÖţžěD ´ó€rĎš#{/7!ź hUŘpqĎ2s>oÎż#„”ăúŠě§yFŔŁD ‹Ź„žťńę;¤MăÔ°źťAS})ďÁÚüöŻĆUÜkgAX ßűĎ߆Ĺx[cĄĆ;,‚ş1׏~ô#ńʆJźýnÜź!ÇmmlŇOţńŸĐ§ż˙cʅřÓăçu‡Ά¸0ýÇY6Ż]§ľ>äŤöĎţ”v&# ů•V÷‘ ßéôŢ^„P_o#ţýż˙÷⠁ErMM¨ĺDˆ5 î`!˝ŰíŃÖ֖(güîwż“wĐ2râęßű{OBó€° "Đżů7˙†îßżOމ˙đţCy˙}ńĹôÝď~—î,h[œ‹ÚŽM§łwZżüKVŤ“‹˝î%źžV[ÚWňmĂU^ߢmś=çwűŠ[˜°NAŞľżÝč×IۜңŮfö••ą­W­{qąC]nm ŕ*ˆ?o&ÜhĘăęŘŐěĺ°ą‘$|Sä/Š›ă4y“zńđ•Ů.’uümîű‚$щßő%ľ‰=K=ék}ô‚ôŠ˘Ę;×bŔŞĹŮx֙7ĺTK~{¤'g›Z8G9҆ŽáęŇĽRMůľr¤ ł-ŇM"…ËąňĘăžD g¤ jeŰziĚa‹uşn.y^,NkŐŇíÍy´LD¸# égxÓŃ!¤HyQ3íP›T˜Ř”ĺœ)JҘ&“1ÍsăYU•]šNśi6ŽÄXSSYě„údœ§óB>ŕ iňy;TňŠç¤ŸŮœĆœ—H4ł1&Gˆ/>!ĆTuŸTČ> áăHl,‹ŘXĂŰb "z~LTÜŤŘ ŽŮŽ%äԁ’Ź+ä_ ú“čţŽOĘĺšŇÓÇ#9Ś?Hhg'˘^Gą‘ÇÔÉú=s#ÁŰ#ˇăůąh̋Δ˂AF™ş0}ľ˘ „& ÍôI„Ż‹M_‡7 ×ç,ŽjÂO;⏽k*ăeRiŞĺ‰•6×é¨î›ľz–}6J HŮR|ͤąĽtkí_DEŠ^‚U$ ŕ’Đ–čę‡ú*í‚Â'Ÿ|BOxăöíŰB:Áť PZŔȣǏhĐďÓý÷)ăW@u8Ś/˙çßĐó_!O@~uytɀÓ/IvÇŰ×é˙ň˙—¤>ů™°ŸÓń”~ůó_ĐěëĎůŽŠSvZzQjŔ[† řđ6Â-đ?zô¨[R5xď`‘s0źŤđ‚BŤrĐĎ~ö3!}ţůç˛`ŽďˀźëXĽÚ 8•d_Mϧ˜őŞĄěšSČDš@Ň!çă?–żŘç“KƒB…ýŢďýžlšQT‚x 2#D ؎ý8ćîÝťň÷Ůł'R/;;;’7DÓŮTž›xňţBˆŽďG]ÚíŔQíŠ /Ćůu:™ä ťÔ4b{Ô`§žą%ęÓh;Kˆ=ú”ý§ŕ…“ĎJü9™ü”tşV¸ńíŮžăŠnqĚ1ŞvŘôjç'ţŹ*•>Ď œŠ7Œß:,{΢c¸ç¨ßg#ßyR7k*’ÖŚ“m­ăđŹ~úô™tŁÉdjó×t¨>ޝżMţQŽüł´ź/řđćâźă'ľ>ŤštÖż/ék~“'äxoĄÉ„9ŠXčŤÂë,Sřń'[~şS wâwM„häbütĽ8wvnA§ń"1‚%Í @Ѝň*‰=^šűľŹĽ9š íāމů켎bȂZĂޚĘňö9áÉĽŰ×𒠍 ĆÖŃp̟)/eGĽ[‘„lÜt„ŮŞ2éŘ0C čřhL%7ğBÔ}˛lƆ6D%‘ÇoQ˛/’đ`]Š{=ĘĂhfăËw( Áa ‹|h'RNBŢXŔqŃlŘĐcĆsšÍ1YƒŠ+y MJ.ăt>Ť QĆcFćœr6•ł‚Ô¤dÚfJť×ŽŇpfÍ)j9őęź9rŐ íýčÇ3ž^wđxƒŢÜŁÁÎ.ˇIA“ѐţîŻ˙’~ţ7M;ó‰(ţd•ĎhUyŻŕ@üy›ˆ?o30Ć˙ˇ˙ößĘwĚ}@@uŸ^ˇÇSÜHłOĂúO˙IćlxOx—­ň˙ żďŽŽ…Č…Ąe,˛˙Íßü x:řŞ@í0Go".ťPë'!Ź66äŻo;l; bL Ţ*Â݋ĆÇ Ď'ü…ÝȅqÇDžÍu67śvĄä‘Îcxž¸k€2Ô}y"œ!žAČ ¤¤‡í!ćf v">‘ú˜Lf4›N…\”Śšé͇Bô1ç5ő\|lSÁu<âńă„čkF’+Đrň<á? [ŕ9ëú‹ogž´5 ŠÚNżYœ§ŹśëÔĺÖ~şiZĺqß I_Ÿë"—ZŘęB{6aďušyęĚMćîq˙ך2¸Ö宗x”ž“çtâ\ďʬɄ÷nˆ?',ˇżş°ŕíă`kv„ćŠ.Ÿ6ᧉĽŹ×Ž<ůŠ?Đéˆ|ľŤĆC´„ôĄ^0ecb};r.Jń*řoże%Ú*–H )ŤŇR ôÔźŹëTô,ŚďĽNwÁť XçŮ*aóőĽMĚ9AԙMgtĚ`eBÜá˛nS„žŠłŘ™$)ő‰r 3 6Ěńßš|0Y‚ńEúlÓ`sƒşýŽÍל!ľ`|A:˛‹¨řtş)oŒaý}4žŇt:ŻĂŃ){ˆÁ()Ť#>pžN'Tńůn“-Qů1Ÿ)qA)˛÷š!.ÍiVĺTđGŠeq=á{!ž€s\šôuR˛Ä7ĐŰJŞ †6ng-ŠN%u’Œ˛nâ ɂëîq3‘ŐÁPpĹ÷ԍŲń“óŹĆ;߅ŘÓއŔÂ>­-ŠŘ˜ÚĄ8iŁ–Ś–DĎSĐ ÂŽ‚ q‘sŸáźnA˘‡Ú0–]^Ŕyňg˙…=Łď|ú) úúłĎčŤ˙ý/čĐĎ+ŻhZHÝzîĚ؁đfs_Őg2œůX7ß; îÝť'ŕżţ×˙JŻ3A:ŕu#‰ŽŘrVřv:÷v¨LBgáÇýĹ"3”´Ž‚řsÖ2ăÜFŮ⊐Ž>ăńlPŕiă`ŘËP6ŒRŰĆË‹ßPĐD]Aĺ y‚ŘăČL "Ô-Ę0(jŔž÷ěŮsś%l“*ÄţŐŘžÂ( ŠĹ#˘ŁAD§MĂEľôDőţş.ęĎeg5šj^‘j-ˆ­ÍZI,ÝŁŁćxÝ4Ş?ş9•VžźŠĹŘoę8ÔH)Ű>TŤ•vżśRĄ>1Kô’”wnť-RŃBšŐWv¸™ž[0Ó'ö*jœœÂ‹ůÎ}ښńő:˛O‡Rëa†IMQ€Ľi>-ِR‚áDŒ,\GQJibŇňԆŞyFš†JP$$Ą|6˘Í˝}çăŰBśÚŢěŇóýçt°Ŕi9?͙đź(NrRźż›r/뤤ůđŕÂNÔWŹbţ$|LNÓáHˆJ%/öEUl”~*CŔŠřź(ŁAw`Ż% (ŁKžţ26Y¨“2’cćʄşR^zőęęjÉwM ]DŽ—łŮ\äŽpžJÚk'“Ě Jmž˜\ÎůşŚÜř-ęaÚöKNžƒĐ¤ěѸ^¨)qƒ,B%żzl`ëőz暣ÚEä:ŽçAÔě¤Řű.実_‹Ć‹ÖC@Ŕť„…{Ä#ă5ńĺ)ŕ%ŔWüqđ vŤ”ýš ,ލÚiÚoy˝.ł“ťôYŇęVľ>ÍÚźVä”óž1j§“—Ť3¨*úŐ_˙ýâŻ˙!œ&RmUVŁÎę˘űă,rcöSĎđ*Ą×üGőtÄű]sC•™›źB8ҏQ0Žj§1ĚÓ/ŽËĺ M[ÜŮŚœCšżďed÷ŻžúJĘq˙Ţ}š'AŕńDCÔˆ; ,B˘ „~@ÔÁ_đšČ„C؝pÝČ Ç?ţ\ŽwÄ„ƒ ™80u:rgŻBţP@Ă~œ˘yR˛ujLű1§OŹ(L}% Ÿt<Ň×űڟćBú9ľĹÚCËwy~V›Ě i/ëÄ&˝§PżřŠpŞć0M'Śʛ?ÔűőňóIĺÍîDá‰NœńE˘m‹˙_.—÷%ť0/eóBMœŚ"9D6˘H ącÝ\@ŸX(YV~7’uerŠ.3Œ]đ+XœąŮMëČTŤg8ŞvÝp|˘ˆ 1cԟ„•R5QÁŐł ғjAAŠŢŁŽ2dŒRW2ůsFÇţŻŰL7wˆ¤Íźž˛Žw.ř3żqçT]SŽ6Î1đL›ÉÄ9Vl@Š3N‹D ęGůź˘ůŹ¤Ů´ŕ~V yźœ^7cCĘŚÉu0OyÂăL$Ē"ŸRĆF—;ˇw¸˙Ľ” ›Ş¤C6ä”đ„§€ěrDIJ”feY"}RÍ łĄ“¨ËŸ˜ó/h2Ëš\\çŇt†¤lX6üMŁ”]s_Ŕ <+ŘđTĘeýćínźňˆCBú!Ż–čÄlxY/×ËöŮ ÖŞ5?ó-˘jĹŠS2F(sŸK@:*x;?Ní§ňćŚč—J—–MEşîc˜lŠęú)×kĄŮŔ5s?×ÔKşRŸ˘ŢsMđGŰ8ÖMąôęňz×6B„Đ6g€}§(@çśť÷˘3öŸŐk,x—íńŕęý,uŮÍX/ÔEbĘŞS´.łSqÎĘG¸:[şŤ>ˇ:šA-ŘY+ů éœhw˛čŃîҖʄi*›Š> š)ŕm€žt‚€€€WžO+¨“Qâ-ᐂ‘˛as”›ťćjđė9u&Ż>é$÷=č2!¸ ˆ" Âű!ܗSr„"ۑîe‡ůPޟ˙üçňýhh.~öłŸŐ×îÂ}ážuaqAB=áZ$Tš-7:8y" †4 áxäçśăú‘ΊnťńyiÝ~Řěžńóc¤çtťSэíˆ6ŚäűtzH_ŒŸĐƒă‚ĎzŘĀ6Œ-ř„ƒS[wHţá™đrŃ&ýŹ&¨-YŁ9áǢÖ,=,îk?Ÿ`g f™€€€7řđN“QČěâďUaŐ`ӟ$˘‰¤>qŒ/óŰ ^ľ &ęLIžäđşs^IœĐĆ` RÄŻÂÓč,0*'ę¤6S„˙‚qĆzl:qŐLƋĂkŸ$á§ěw9ŇŰçC~ź?_u§Nłśm^üäXČ3âĽf~ĂSĄ*FbPNQŮɊYüDh­*Şj)ęÝÝ9žV ů̄FŃFęúŕŕA˙ßC‰§.!ĂŔ‚r*ĺYÖĄn/ćr‰lÔŻ×męUąŃ+ęZ×\ČH༠Lx/#yóĽiĆĆŚn]ŻP'rűŢ´Epš~ň•š m Ą× Ň“ńu 1Č^VQ%×M¤ŔĆčâˆ?hËuĹGg\˙î^ŔyjĽ0ëÉŻĽ-¸Dľ}Žź_Kň ˆ.P°YGüÍv— †K`Çl.îeĐ2@Ég֝sŚácŚiŘ!:`ÔÖaćÍ3vŤ§Łœž<Ô´?5Ű ĽNřőxS‘S [Ř˙ŽB)Z°lśĂ!Ůo vĐe¤˙ł֔÷!Ň­ßÎ[tŃÍ˙ť¸˝9ú´ó×Ŕţzuďs…Í÷V§6ÉËămîĎţźţjĄVţ6‘ŒŇ!ýčÓ="ĂÔ5 ŕ5A ţźŔ¤zss“Ž]ťF7nÜRCYvŻŐČŠG׋Áą^KŁłŽ˙Y?œ™Yę_›Ša#–0P{×÷hƒë%că†ĂĆĺFŠľ¨ˇ˛dUű{Ż%֛RŻČSéš!—@b 'ń‰óÓÉ5´3œŻĺp’Ôăyň şu˛U“Çč ;P=ą](‹Ý5¨RŃZH@؏đX…*DŚČK!ĎńDŚ(á˛i‰y ŇN§›Dą 7UVSŇE.ŰAţȧ ‡cúěw_Ň żAŰ4aC‹?aE˙AŒö4ă|c„řʅŹŇéAÂ9ć˛E|BÉ9ŠjNš„ŠŇëXĘTXĽ%¤|”QŽá˙’œç6|H-â9ę ÚXjň9[-C}ěĽ$e#vÂu˜Đb œ- đŁSjĄşD çŔ}˜d”B‰L™ű“IÔT€„œ–Ćř5ä5 (ĸ[IT&*gö€\ś&+{źpóˇŞfą#-ĚŁ•o|Á}›gÄ ™lźPáţx­ŕ „—'ýHnňń‰*Kş}Žu‹F­ţ˛Ę¨N–cUůÎvŢ™ŽPóQ´ŽÚ :‘ďIâĎňcW *ÜSď2^Ë9X@@ŔR8⏦päžec¤7ŃĄ#ŕí„Stáçź}rAŐŰţE^ ׀äă5~ČYŰńý"çź ÎuN˘ÁËÌË÷”Ç´Çlş˝D”Ž+śĽ!QbŰ҈?šł}:ŒG„0aŕ›ž-ż#ks[ČKÔ˘)S^˙‹žkœđÍPKÎxÁđjˆ?—˝ţŤ}zœŹßćnţ]ýź<9O^V˙‹gS ?Űk Î1EkZúpđ˝Ű%qÇź âO@@Ŕ;…Ÿüä'˘óđá:Řß_šF-(žvsż3 ݘ´=>A¤×ëÓ{ďÝĄżóÚšśGfč,Ä˝ö|UÄű˝ĄÔÍ.ZłîŚÎqF™ĚŸŁAÎęűŃF{š)Ňţ aŚ": š$‰+ŠUeҞs K­)Wdç4 ‡ĺI(K3ęöşów„żšL'4Oi>ͅřâ â”Udă×#Í|Bهs}wŤKÉńŒfóŠvwzîë›oŚ4<łĺ…Ó9ÍËcÎ+§´ŰŐ(ÜSP‚¨űʜ‚ÂĂ˙8Sڃ▉o?Ni4q˙(y;Ošăň6lź1ĘCŠŚŹÂMĘĺUcŠŁŘ|z%up‰lçŠ`둲¸FUÎČRl$^މZ[^ł {"~zőś‰×hÜŮ%=ÍéüPőglB¸‘˝‡t5ÚGōnH9¨c­çŇ6cVŮŮŚQôŃň[ǎřƒôžŒ7+c“é%ż˝+Ďŕb :ÎŤKǛ܆nďř5| ź^‹XŻnáŃ->‚Dy5mR5DŕÄ­Űďžuçm“sôÉäƜˇ]Ž“X˙|?™ikü˛l`uâW äNžoŰğŚD덱'Ë^8ď2ń' ŕÍAeç^~ˆm÷îm+űřű݆œp1ř}ýÔvÜ8ň,ÇƒÜƒąŚ łîŕBW9´ÉoŻ…Ă€^^dźü"ŻľMč Œ€bBů ˙ě Z[ 2d—ŠMˆóĽ­J‘‚O$ŸHňgł—?™ć‹Q Ť`ƒr¤ŹJŽńŇv5Öý§ÖśěşÚ†Ú_WoƒŇÍ]˘Ý›T ęFiӗ”´‡˛J=1˙'md‰?‘nú“* Rր( Öގöo1Ägă¢vë>[wýô›Đ‘~NüíoPśľ-dŻm ¸,°XƒĹGúšü˘DĂś59UK…ú\Š?˘‡čÜúí =o—?ËŤőyŸ€W.˝jüמƳŽ,ń‡Z I+Ęˆ?ëđZ:_œ€qůiŢg%MČą,đ á”~đá¸@⁏’kp,”{áÓa֍;_5áǝż&摺ôË6¨žžšpԇeĄĽĘ>ŁľľAyCyMÎđ:!Ţ)lllPŸ?ť{{gĽý6Ěb$M´„ęu{šé*mmX`Űšv6ww­Â‰ˇóŞÎsN›ÂŠkJg8Pľ~ŸXŃZ„ŞŠ:‰ÔšRw™ ;ú6H>ĺźՐjâ†h')Ľ26fY6€ÄťmΆŤ1eÁűÚăű¤×ݢߎh<,i:›J8°,KlœăŞ–§–ü•QŸÉ’„śśś¨ŰˈOĂç™IL÷ÉdęפÔrČCň7Nů{*ż‹Â” ąŰq=؏˛‹1ÇW ˝¨ĺ œ§“eďěđő~D4Ţ".̅É?ľ`ƒ‰Of6JxłČîW ,41śTÖMviO2Ë*ŐnCzÉ}v1âĎŇŁœ Po@´˝Kq`ˇ™pwÁĆđşÁ3"á-ŻěAUęQŃeB}­HŤÚyž…řsiĆgĺŹJ{–Ü2"R´tŤ[BXR‚5e /™wřđćŔ'ţ´×˝‡ń'ŕUĂŠţ¸0GŽtř$7Ř0ÎrÜYĆĽ°y´Ëáž/œC{Ş+@ÂvĄ×ϖţ¤PŠuşŕ}|6ˇ$}a[⢖Œ=§nˆ*řý ţŠRFe脖ĽďŘ:Gľ˜ýš ¨OOB'GŃkŇë“GŸ8‹r׼[yZ:ŐÔ]Tˇąçf§—’ŕŢFˆ>öv,†öBšĹłŞ…rúN|ř›­ň:÷„´×hš9šĂąĽ >f[3\ťýŘ pˆLÄ.çĎđŠLm[°_ňJŔSFĺ ;ŻŇ…8M’6*UZ-öF1óQŁ_¤č ÎŤ­ ‘™ĎПZ%¤Ë´O+ąZ,”jď­[D~›öň\8ľŸĆö&S4y, —~•<”~ek5Ő'hŇrdÁóAŸ6=“—€€€×řđN@A9#IŒ’HSŸŻňęĚ#˛‹Nä^Î<°4‹8ňŸ5RT•–úštbŽŰ”¨›dň}ŊĎŐŕ Ňz]^zÉŽöč_ÓŮŽŠ=×=‘Ůy.&EŸ~o“67vٸÔĺŹĚŤ\󌧬x*œGl$R擃čĂí‘t(q¤2†×(N(ń‡'ĄUSÉĺ+šńŚyJj O^yˆ°D4™—Tđž¸×ă<řX|:ą18YőL­çŠbž–ĹŻ]ňd?ޢ‚Ë6›ä4W4ƒŽĂ†•Ô„ťÂ„!ź: ˛Ř|źŽřsŔâ”U>Ľy5Śń\[rPÄż#*Ş’Ëץžâ¤OŰÔ킔’Yt\4&čłÖł('ERGIo@YöEŰ;—"ţ˜jÍÂąŔŤŰ ŻŤŐ żş%‘ĐVLP§’Ň.p3f]ҨßmĹmĽđşÂŰP‡1źČžô5­Uü!}’ŽCkŞ—-Ýč%䛫 ţźHĹ}‚­W”+(ţŹC ţźK–†ôjCîiűn*!Ż œs’ű~¸aăńXěç9çiĺ9U9KŸžôž âěÄGŢŕď}}6k‰Zň[­Řˇ zĹ_ZšÝŇôŮËtrßÉąľËšNCţ8—PĐ3ZŹRÍńąçh…ÖM¨E;"@uŽhœ—}_YŸ´ýŹşfľňŒ‹ż|2‹›¸mJN jŇO䑻pĽ6ó!˝” Ăś>ľËť{ö7ۍtfţ.˝"7Ďq…íŁ mç őš†Sť¨>5‹™ˇ\Î-XŮ,ĺ›%rłß´qăBg”ÜÝů3nÉMž 2[>l/<â_Lw Q‡hĘ×yí°˝´ŰJl‰,0Žę§ümLMŽŠbúUbk6HE-›!éZٟޢÖ(,)ZŤjż ú’ó-soŹ>^-qúhţ‚ÔeZHúoÉIÉ_łęć ő”)މŠáŸóĆ2:yUËž*˙ädňIůÄqŐ*˜w€żâů0ŐŚOŐIÚ74źî€€€€W@ü x'‰I,Ę$ežS’ŚGÉɑß2h˘7bĚvž2ŠJ‹ń B]˜ĐJ—ťH•B‰R5=\§­Š­HŞĎwčŢÎ9ëK­;óYóBŹ.íîޢ›7ާoîý–ŰđŠě)K~âڈę&đFA'–éf%2YE˜,t`¤švRAeÜĄ1?ńôZu(š'4úőĹń1Íf9%YG<$*źČ<ĘʨÓTPäA˜Ž8Ľ\et<ͨUl›Ňtʲy,jAPżv˘Ž }űMĹ;çlaI*Lë;/6iżĘ\ÖПbŸŠé„˙έŞ7‰“ž¨ľsÚŢĐÝ˝=ÚŮŘäbvŒSäb‰íÖ5ĄäŹVW[lĎłŕ’+Ž_çt(ýUŤÖo?ß=ՄíÍc:::ŚçGCzt8˘ŃĚ=KÍÝĐă6ÜÜܤÝÍ şž9 AÇÔwĹky'–ż+ązBßŔi^Q\ęĽűŃßsďy¸?Ńď>‘żMŢjů9Ăđ& ŕ#Ţ Č¤92#ŻĘóćY†“ƒduŠGňŤĹŮ"Nů3C3Q淚ôśóóą“—!Ý˝ŽmÚăpÝÚWľöˇóm;,pwč|*Iâ-Ӟȝ08¤tóĆmúÁ§żÇćŐCş}gĎĆĄÇ O|Eęţ‚ &ÄBübŒ˛RÔ j;0NÍĹ3 Ď41“'! Á”Ą‰ˆÍQ.Ç.SNĐfÔŽ ÖĚxž†x‘é’‘”uŒ>4ŸÍ%ܗ;Ÿ¨TąąA—”e„}çăÓG~BŰŰťV˝ę2‹…ŚP ąqÁŒt,]2Ë3@ŸBRŤźýžąŚśČ;Wy–¤“^C>ÎCˆ2˙iLEôB+# ŕpď‹č Ô [9ŰżëŹyę”ă/ňělŞ/šÇEŃ­ß>–×Ĺâ‘á}đ6Ă_„ôC{ůś§äĎ%ƒęOŔ›Ž‹ôaŸLpZŢgː΍~żOďż˙>ýŕć6ýŃvDwşć\E‘Ód2ű”Á•eáŐţ“Ę#ţœĽÜ'I.t‚ÄpŇŞľˇ%ąq"\Ő9Œˇ#śŸ=Š:tďů˜žüň[šíçK<@Č z´ŃËh3‹D‰đźD¨°DtK–CľţRc_Zq'‰?-â„8"´÷řżĎAüńĘă‡@ó‰?reÖĄB3l{Äö=8“ćE) 9JűÝ.eýmécIŇăşéZÇź“PbŮ*ë6ëĆíŚ ˛”˛×5Ű䎳QłoŻ!ăälš°MůglGܜńÓ_Ó~B˝Jć|YżCƒ˝můëŽő;™ÎhŸĘƒ‚}J§&ýʘÓŃtHŁŮ„ćóy˝n ¤Ż,Ł~}` őq||LŸNˆžĎéëiY×(ŽIH?|ělԥѓ'4łm´¨ű:l˜(˙w>ůýé?úÇô{ßű>Ű2ˇŠÓé,ÔĎŽ‹¸&.i–N­oO:ףă†Nk(Uk ¤lŠĹßög5ŁŞ8˘§ďÓŻóú?~ńkú‹Ÿý†Fž-dŇĎřúŃžGż˙é'tkoהź“PźÝ‘żëʡ9ˇŰˆű}Ţľ1çíĂńDţżúݗ4ü/˙­!ţźĆğ€€€w Ľ€(ą‚üӞç #˙5^´0Ź˙SS4?•őĆŕz¸<eőK;\ľ˙ü„ţřǏţčÇ?Ľímęt;Dą'ćśIłÄŘí=0Ҟ][-ÜoNńçěP—vŇPžrŹë˙Ííš Ťęmśw—\oůˆž>~@×7n‘Î;ô›/Ń=KüAzřoomnĐ>ýýáţ}úńmÚŰِýiżK˝k;ÔŮčŰţj#(Ż,ÔŞżž@îńłnn™œa\j˜żĎć9 ‡üLœÍm˜f´ń?zđ& Ţ\Ô4qű]FšzyBťf˙Á§íŒjяş<Ë Qˇ&˛-˜yÖr/ľĆŮBľ7œ~؟şÔŞr.!ţ¸ŻŃyίϰˇ™ž‚lň2XĘ÷viÎPÚ˜?­Ziő:šŘ —fłËjĘŃTtRJU/|•Žěwnż‘ÉDDŽŚ×čĆľOhsă&嘰T†hÓ(/™xĐQmTŐBř1DŸŞą?XĎ]-^_ĺÉďśJ܍,ńŠD ČM˛œáÄzôœ¨]+ \mËěČ?Ş–6ĆEqÅŃ6…tu‡Uwȉßb„RF˘X_ľjÄÉ6F9š%çY‚ŢB‡T }W6{ŒśćˇÝż2„ y9ĐÚýÍ˝Ľš‰´şčÓ+ ŕĹĂ÷ŚžJőÁűÜ;íY}u×quYŻ?ř–:ŕ]@č@o”ĚOô™LÎŞxđşă´1&ŁĄäąˇˇG7nÜç˘ĂĂCzöě=zôHČN ŤVYYbÓpiü´Î!J+ˇtżü~Şm |,ėođĎď˛QôśÝÜĘč(٤}5 .ŰSöGôË'éÁƒ#šN''ˆI5üpXËÔnÔBVĒ”í9¨çđĺŽ)S?UíÖ¨^œoˇ^&Ůł{™˘ďˆúĺœŢ§TöíWŠŽ-ńŸnŹhŤßĽŰ{×čúľk4čv(ĺrŁţGĂ1=yü”Ž‡BšŚśÓX{’xLyć=ĽuM֑˛[ŰęBěhDuČâvP§Ćöź` Śśj’#P5ńڟĽtűăÖö–(ΘĎ@Î "Ďx2ŚŁŃHŇnllPŇéP‰>ÉíâÚ÷Ýßüć7bœŒ&TćĽ5…[[T6 xçęÜů)mßžĂylňőĹ4Ÿt<<Ś|4§ń Ę:Ś\°łĹ:ŚŘ:¸ýĄúłŠ2ęE=Úĺžu›űŔŽ6}eƒŰţښŇ&_o–gÍ**gŢYˆý9ÉcĘfœ'ŸƒRś›ňńI<çýĽÔ›‚G]Ĺ6D5§Í×Z7ćëJ9=×űœŰ݈isşMĹdŰ(:ESšgcŠťŠ6”uú\Î.MŤœíŻ3°=2íߐúĎg3ŢN4N:4W‰œ/.Ô<Śî¸ bvČM}Ěí?Ś~ˇOwo߼Oî~BěÜĽ›ŮuĘʎ)‡*ēOq\~ü[ n‹Şť2fa'Ÿ+ňI@^sźx,~ČôMܞ•Ý`DçŠ1ö’ô÷úwÉmŸoŇ^”ŇOîîĐó ú/˝ż$ŞÇ†řł˝ŐŁO?}Ÿ>üh—űĎ#>řJöwű[´SźĎŸ›´łłÍĎ. ϐĘ5Qťďőş ßciAe—۝; ˆ[şâç ˇ-éBž9QRPˇ›sęš(@EŠŰň×:"D@@@€C ţź9XĘĆ …IÔi#\ ńŠŐ3l\ânjzŇMő_íš˝[œ_ÜfŞm˛ČÂyÉäü ëóÎăĹMmĆ ů{ˇZ_H ‹eŇç\[aPđ'ŘĘŐőË3ć]Ôp¸îÚWçšŢ˜ WîĂäÑaÚů9Dt"ŞˇnöšúO˘„ś}ţ¨úœ•לí[ĺ2““uĽmŁ}iëĎťě†^~ě‰PX^Ӗ¨¤Wže‘nĺßwKI?uB6¤YëŘŤ‡ö VΘ獙jş˜GěéğľGSCBŇľ„łďľśî xŐXräŇĹŢ˙gÍ{m‚Söś˙˘ť/^ŽÓJp*B XąýŐ>m—…ƒĆŒú•÷nkż“_FXđ€€W!´¤)mmm áŸëׯ‹ÓŇîŽÁ|˙ɓ'zgđďwo9"ŕßkΑŃlXQÝü~KŸż]‹4Ýîíô!ý'[4OşôLOé›‘ŚŻö§4…üp"ť…óœ öu{#ş€đĂUÂuĽëk—ń“d‘´§üŹ§5ś“Ĺ爎‰PgÁű]MwyÁ›řˇ"ţ¤\Ő(&‹â?j;ILƒ^676hĐéQš$öÚb:ˆ(IŔڕÝ\@r@“EU=ÄGŃ"´Ť+be‰?|L UŤć"¤ŽĘ„ŒrĄŔV93hŇKçmU5ŠsÎ3ŞJůk>šRměeE˝Í—"n|Jn!QhSÎČŠŕŹW,áۆ"śuw)ٸMÝÝ÷Šżš-d›x2Ľšęq˙› qĽČMzśó~ŘŰâşýš ¨ŁęF}ęńž =Ł->żŘ?UI×ՈśˆŻĄäŢ, Bč#œƒŠ…ßĺ|šQ¨ÖPá)§Hf‰&\ö<•ăR8$˛˝şĂАű_wR(ęćŇy"}0RšqSÇ݈ƒ-J˛>•EBj>Ł™ęP7N)ëmÄÔu5˘yĄi’ hĽr}lD݌ëƒď/u=ç­3JăŒűŇílîŇVg‹6řZU…ëᖌl]kCüˆ˝!ü¨Äö.NJąÎŸś3sóK{ľÚśˇk"˘Dîˆ?ŽäSęfˆbű{Cüá âşîE]ęň3ńĆöę¤Ý…3€Ůé$tmwƒŸ›=zxLăŃž›s[kwDÎ1ŐVÉ ő4GŹÔĆYYev!ëJô%¨űäⴊ{%Mů~(sn÷)ç>#E RůažđÚ"ŢyDŃɅqĺódĆŁţXŃ˙îöŃÓ§ĎęĐVđęŮÜŘůTL–Ÿ?.űDŽ”gśâÍĄ˝E(‘‘4ň‘Hƒă يcK€vű]ÚdŁAdCE5|ŸĹ‚ľyVřĹ+´ źFŁSÔ ¨ĂÄz’@ÖRŞř;¤ţÜž4Íř“ÔŞ6ˆ?ƒ>0ŽŔkŠΰ ů9ŠZÔŤx´°‘E~ü˜¤n:Ü_\?ŰoQĎ荨W´IaCşáť¨ăÄF톑ăÍ:ľ×Ň Ţ4 Ÿ<}úTž÷šýqű×ďç‘ŕ:+ŤďQô'Ô)ž ¸Ç‡ĂĄ‡>Ž4řŽúE˙r†.—O’y_˙~G˙E~hŻŒď‰Ź“Šd°´§E™‘ç ż!ĘH¸'\;Ą}Üý‚ó;8CóŒJÄëy!ńŔs)CˆŻ€€€×ţ‰ĂU( ¨Sˆ?ëG§1OS—[[üÓ,ŃúŒ×éÂ_˘Úô ęíypâjŔŰéÁ °Żńpj.\†Yś”/t‹És 䟀ˇ˜gďěěáçîÝťBráÄąíć͛bŔ獯ž[A›ôăĐżú„ ŰEE<×ďt)çĹö:ŹÓK€ł18ۨŻôSÚpSbg˛ö Ř<œ­5˛ 'ŻĂłjDĽľ‡1žţó­ő׌k74(9“¤+ľ„‹Ş„řنĂ'úƒU29MIÍŮč 6…ţfČi& ÎŰќmZó˛2 Żěٸ&ţÄÖś}<JŰH6ZGb; ŚÚv{n‡ß ĽUž4—AgB°HœdN›8gÝúŢA–TZTŠ*6ĎÍ'%•‰ŠKUň=X¤TÍľ¨EE,¤&¨Ÿ‹Zď,ÉIĘÇůâ^Ž:lc{°ĘúOšœœ/ÂĽĽiE.Ćż'“ -S7?şśŇ۟sÇcő9ĹœŚƒ5Ż~ßaRÓ9Ă}]öduq-éGUžš•%ü4Ą´,ůÇŻ|ňb NÔĜĄčŹíyĄ]2YhBŇŐç ď>PžŰ§ĽšągquŚÄŢ? ˝ażËŕţô•ČęKn­źŽğ€€€wŤbhşţgőŔÎmAä›ož‘‰ˆď˝÷ž .1‰šMgôŕÁ ^ťvMČ#œ ńÇzí`R"€L6Ž_—I0ňÄä ü;ť;BžhdͤŚ|R3(^¸†<ŸGúQœ`ŕÚAüšwďž\7ęäGP—Bž˙žÔ:؏tÎP(DžŔ‚ŘŇÄ­[ˇä˜ŻżţZęu†z‡á“MÔęő˝żż/“O^Ô5<ą° ű>|(i1‘ŔvçĽőşŽ˘uQ§ šŔ…kÝ`cŽF)ÔH?¨;7qGÝŁß;Ă b„#<<ÄP÷›ƒ c4`¸ž˙ŚŔ-9˘ŕ†qcgkťîƒÎ8…~ƒęýŮj„ÄgŻ}üŰożĽŰˇoKDƒœƒ>zĹń¨?ô}äcŒËqŘ!]OČ迓ń„ööJJ“TˆpŽp_ŕ|řB›3şň#Ÿ„AúNůĽśĎ‡Ům@@Ŕ례°l㲋Ć8š&U­=zý@鴱ŚźO k O!ţŹ}žŻť&Z͗ •ˆ?ŻŃkĘGŠ”yŽşi~T-^aĽ T+u¸•1ĽTxŠź“Ŕ|s~|`×rvçdƒßŘB~ÁžâćůN٧Mđń tî÷EaěhĽŘ9&ű˘ô8…[\żj8ĽÔAfC|ůűüżíňÖĄžtŁ0âŇ_š l3cű ě+IdÂ|eA#ŘkᆰNqt’ENčD IhÁ.ëŒw‘!D6ĄíŤĹëőh!'ŻŐ‘~Ş…m‹ŽZM;§˝˘.ƒą/Ĺňź–} XŠćDĆń§j]ě}ËՇ@˜HšnRš€ “hQEšç)͊Œň’óŇQm×Jů}"PbŻŻËçďňœŚU”ŠRś‹B˝W—NIŚT €¸ĺ‡řŇôŒŰaÂQ‡oDNt¨EIGŔAőÄ 9—a“Ę9‚ß]üŃP ŞTÓÇPŢ AŞň—%ăß%×B˛ĽÜ4m$]ÚಎçĹł‚bţŽž *Us¨VA†? ńľŕm¨%öým‰15Ó]T|"SVŸôĽüĺUşl×Íw˙’ÂE§Ś ™MZÉŠýÔŞ>´ ň#Ď4ŸÖ§]ÜlА°qÄL“JžĄý^—ş„˛ŠO—ٰ‹7>šÇ#JÉ\<öęŠŇX¤bŁđþܕé_žW¸' n˙‚ŠynČˤ^é+ ŕ,ğ€€€€%đůő놺.ü &IX€Ç$zź°Đ‰ž¨śń`#ن{! ¸Ř0úq&ÂXüws0€ÉžčőCÔLţV—OŠ“ciçuˇxĽWŐňĘ=ŰlĂyžŕúQř‹z‰GR@"ęuröd…<>˙üs1ŞŔŔ⤕‘ęUœçŒLÔ­g΃Iƒ#ˆ}H˛8Ůeçq˘„xŜRŤ/c”P§üžÄ\σČÚZĽŁŠ%UĄ~đ™Íć”ym´qő ‰(Ípˇ*A‡˝~łÝyś]úÚRwpď~Ąsäťćž€ĄgĆ 'K-镋Çn Ý觨/ô?ČxŁ^u‡4PSÂÇîĐǤG?Äńčă0şĄŽ@X‹SC˛BßvęTČý÷Á1ԄödťótĎ!(÷@ń}@ßĹ9@ Ňb ŠçâˇĂ;Ęös<× Ś…s"ż7QŠ) ŕ݅ó,őĄ[áF΃z1"–žnt‰Ąf ţź:Dí ´Wąŕcç˙˛ŤŰÄ"řĘtą,d-{~žVđs§Ę=źÍ•żV !eNtmkąpráԍâL%¤(ţ˜0IůäruC`P™AĘWŮü–÷š˘#OŘ|„h&e´ĄÔě9œů/X…h˛jěĎmŞűlCě˛MˇbXAqŇĄźäúć4žĆ4Š@Ž`űoϸş6ŞeşsońœbS´—‹kŚc ­„÷^ey;ň!ˏáýUŢ%=7ő/$Ž‘ “EłŒ˘yĚI÷J[nkłF˙ĘSR\žx’Q9ç]E*ÄCžŹĘŮĆ'šwšŐ;˘ wŘś_4W4ĎůXĐŽęŃ_ĂpXĐÎuŠm÷ §ƒ=ngŢc˘|L%—C5%>MĘyÇPÇÁ9+Ż]udÉ4ÖńÎÍń\HľŇ\ykžř|÷‚OŠşTÖKÎZQęKů$%—FűűtŒ¨îpţěĎĺBN'ëĐÖćĽÉ-śŃĺŢév{´ŃOŠ×áúŒAşš‰Šňçۖ­-ńGęՅF¨,QÇČ=f.@„޸DşâOQńzĈmÁĂ1UEeňbóň0{Żń' ŕąŞe|ťÉ;&NXřÇäc@ŢD$Q2Ńw~3‰¤z˛‹ÉľSĹM`ő zĺŮńB×P.—9ęÁŐŒ¨Gç ¤-ĘyA˘i÷öö¤ž@l@8•ŸĚ*¤8E ěsÇ;%çm„öqaš\0wˇpâĘä<°Ö^k-ľô" ÎąőbhÂŞŮÔÜĘ,ƒ¤RĎŞłC á§@ţA÷PŻ›EmŘAýż(íţš˘üÚż!˝˘hšLŮhW–ľźyz˝~MCżqä4Ô!ŕH3.túČ4¨#×§œÂúŞ#Y99pœů" ŕ$‡‘Ÿ!ŹQ}ŒëǒNE"a\FeݗQN–Ěős‰œeADęy^đ5dâŃđŚ í íž×—EMţ‰VçĽ.Žë4\B=煞wőţ—&5đÖ"„ú xŮhŢŃÂ6Gö—ßôňűfeźwK°fžjĘ D= ’)×yĚ#‹čƒÝÚîvNäĄO!§ú‹e§]Ÿ#Mř˜Ż=¤_V™'•*‘Đ4:Vâä_”fÁR+Gňß]ęÝđšÂĐ}[–ł‚řăB Ç­pŢË.K•U.9ś…}QěĂ=xpHßĺľÍÂ9Îą ×#ŞŔ6&méJś7ŔéËŘ<ö˝´öNŘäša;ŠŻÁ=Oۤ'üM%„RZ+†šm¨K¤OĄH”׿ęHBL5ăJ˝íÄäˆCý$§$FˆŚbEEY›-_çt256G„~âë4ÎqSyŢ%l3‰íľ=Ż ű‰3•ćˆS†ccKB;äl{) /ä{ÎH5ěN×֖a_ö:ęËnq,ëƒýZ§śQŮÔ]S_'.~EŹ"‹h çU؛b:r˜ł6Íř=Őu˘YÁ6qźŻ¸+Éő+~wÄÚŘhťl3¨˜6bŘÁeŕaD–Ňńb!™|n41×;H|L4­$W4šŚ˘¨oHŠ‘j8QÉö˝g.¤uźh1—SöĘ;‹¤UÉ÷AVĐ<Î)×9ĹmŠꪔúü;™—˘ř“”•¨ţp%ČGƒM¤ ŰEM$ž^ó,FWîšlh7Š^KďňE˙kŽ˝&cšżç~,,oËłŔ}źÎWyd×@Ú óĺŠ˙˜SۄڕŔüö/Á%ě3Ś×ťĆŰňüJ’Œú˝Œ:<Ę6dŐäŕ=¤ ĘľŻËź˛aźÉ ŁŠXHwh7Œ‰RäËm:<:ŚăĂ#yŢŐđ…8T\ ń' ŕŒXĺ\ƒIT` <ƒE|˛“Ë“šĘy0ąC:7éĎ@şAPöŔ>GúÁDÔĹßä‰wÔ /užyžŸöu[ƒÁĘ(|đŤÚ¸€şpd*!@$Iďőŕě˙ôÓO%˝ƒ +u݆NĂwçšäHUřŁHŽč‚m Ż /”ŠcՖ0ÉGž/3öůŤę}ΧDÚŠĐ˝ä—ţĆ͛RÝ8ĹŕŞÔ~^6Đ/ŕ]"FťŇ˛đqF)Vp†%|@JC˙Á>§˘äśĐĎĄn…şEviŃg’•xżAÂV&š=Ůďú$ňÄö?ţXž=¨w¨…á~r0|UˇÚi…PœÇNkÎÚńx"¤  öđ&aŐ"I@@@@@ŔyŕÖ1ţĆڍ—…pC/•=aÎs‘§ĎžÉb˛”…°°Šiˇ×Ą˙óOH˙ěBßš}‹úKĆďëˆ?ŞĽJçÖ~űéíşňŒůćŃCú˙üě/éüĹ_ŃăąuôP/ť†^8eĚ˝mżń] Ďţ˝¨î}RůÇ}w}˘ĚeШk%lĚý=€˝ö ”˙Ă?”2KÄ$ąĽăçĎöEeřÖ­[ÔeťŁqavČö fŠŞX8ʍóŔ:rŽ}¨7ߤżhŁd3˘.ěgU,¤5(5ő!Î{|,e1Â/6´ԛœb“uҝ[z•rů;ş^MUj=IÖŮîęÚ|/ľßŔ5)eąŠ>ňžvĘ=VČŔäKäXPP…R†TçŘ`Î!ňBŞ?ƒŇqGúŻÉŽ&űčEňj?ďt]6W2m.ż,ĺ/cŸX‡\ťľ^Âä•D ďG×ö͚řٚťHşŒ%%;‚7F†ŔfŽd˝řůôôé3î3ďLŻ-ń' €Ě€˛öšX“Ś‘ˆô'ŢFÉ‹ő˜c"ëäkSž¸ 4@0čÇD“Qů)LŒX§Ü‰a§Ű1ń=É[¨}tąŕŻź˜ŢžŹç)!żNz,ěuWGŻ Ś^v¸^Rř3“˛Ame7l~ăĺT{\ZLúQ_ ˜ŮJ<ŞH&÷2poŤT”YŚ ę%ŽČrC݇śęXoŹTŒăń¨&<@>u_LĎF‚8éMóŚu†şCŸtd•ŠUŸŁ&ęKŽqäÄ:G_Ć}€śůĹ=h˜őŞ Îů@›oooÉu`?ęýĐü|82™ó”ó‰b¸w×Ÿó‚ĂoăHľÁ¨jF¸˙îO _qdď^­Çýs‹ËćT„Đo77ˇÜ EĆ[”Ǐי#¸9u!äs;R—ź÷đ‹$ ú´˛öÁ5^*;îYs mîߌ×G:]KŽĽÝÄŞ0ÚPyQĺkÂŮaĽ cŐu)ő#D°XRG*1Ä„Łăž§˘Ę†şCŘÁXîG˝01qđú!ŹäźÓpq^ŕŤăxü LŠ] dßçH˜hşÉşL.y’iäÉÇF_d^ÓԐR*SğK8$(ýŘSXŕOW㤠3qű +˝)´şđDđŐć Ńd›ëaŁž˜¨–k&;X—9Œ•÷ÄoS×$a–C<1×ŇíV’Ÿ VŘ}ąx°ßZľ ŰIh$ *@œ€ç1ž'ŰÔľĄ—0\'IîO{Oƒný}őđŐ{`P÷‰#˛áŻHŻ8Nԙxoj 1˘ć%ŤÄc^¤ZŇyäö×Ý'Ëvuřz`črՎ˜Ó6Κ}ÎdYźyGFsňß.<Kë§G}‹D5dŁc3dC$ŒXˆˇ¤Ä8ś×Hż…ˇÝQG›xđ.og8!Ë=Ç\9Ú×á†ń' ŕM°X6ź–ýˆ>œ} ˛crŒƒŰ¤Ÿ^żGžƒşđš.ÔtiUŕ,€Ee,ř?yňDĆŢřq8Ô-0w-2ßŇ& S^Ĺbś ymćž=ß&ç–%*(ăňž9/0cô˝>˘ô‡żOŰž3YP'ü‹#ŇŁçűôń'ÓńŃPć4°Cp琅p [3–Bžôá€GŘ>ř¤)OĎť•źœZwfí. CÉsNĽ ;Ž}Ű;Ű&k46áÓ1ŽGĂ đŢ‚ >Ή ¤p}În{%4nÇ8ĽA@=śűfp„ÍĄá ś1ŽŚB”t6´×ą+ÎfS:âr?=> ŃlBC„Fd[Ľ¤`—!ĂI@SŽŁť0?€ŁĹ,śżRÔŚ"˜żFFľ$zô’´ŽÄSLtľĄöč&u-*SĄjEşś+ŽďÄŞ˘Tq‡4ĚâI$vđ„ŚÔŐOh'UtçÚşľłI7ł>UM> D]›¨;tXąM á" śEň;&ŁRE\Ň4)ů˝ĆőŐUôŒbúŰiFß–Ć q݈č{“˜6Ć9†#ęô ę(śńś¸Ăvˇüĺw ¤Š9n6ü-˘Rś¸ëˆ*!ţ¤¤Ë”đš+¸OÍʈ&iŸ 2öÍ}î×óŒíx|}YˇCéńĚ:ŽßńÜoăjÎ×ĚíLüŽ–OaĂ}ŮúCh1T^ ‰EԆ”#ŇxvzŁĚu„Řëşą…Ö!áČűíŁ-ĺWoS'zˇs%”GúqJ?TŞćˇá:-‚”#ĄţA”+@ĚY<żëŃĘI Ů5—8˛^ézż2:RM¸´śÇ@Eu˙•|…$eěąčSîî2+k;ŐBú|Ú-K6hoűQ'ý–Ţ„•œ€€€Ëb÷UN¤ĐÍb?&˝mňóŢÁDžëŠ$DR!3™Ŕ sÜMÚU­ęSƒŮŞ´1cIÔb)äG=â&•ą% ȤŐÉRFę‚äŸWG4qp*3ŽŽ!BEą˝ŹĂP9Ť1‚¨şN]ˆ0ařk¤× w,ďGˇnˆbÁ—|îQ‘Óő¸K?úţ§ôŰoJ¨šß}ý }Ę ˙?˝ž-‹o ϡŻoôé÷?|Ÿ~óóŸKÂL"ŕ]… O1ć×_-὜ę€ű¤ÜŰžj™˝äŞI>ˀgœaĂÁs ϧT„g~Łě° Í­š˜ ‹‰bžc 0‰SßćŚäYŽŠÄ8al<œ­Ď!â6~ƒ$ś'8ňYűŤSp:<\áŇ)O‹ˆ(đtk˘Ćúx>ă|NQČW]ŠĄśäŰdĎCžŒňňÖ6m\ߣČNPržÎiřdŸ ~–&Q"Ďç śŃ Œ(SĚiŽć:œŒě5ÎĹV)e§Ö÷ą 5ä;z-LE”ľ'ęvýtÚßŘ`yżZ´O6ΎԈY†‡÷ 6ď\śç\O%˜ŹGmœׁšŇőALŢLčýşŮÉhzXń§¤éМƺ[TZŠÖżŽŮVžrĂ$‹>—°<Őt”Wô%ŰĎ?/ ŹÓ´ˆio‘:™•ÓĺŠfűlGăô Dˆ"ürăzĆ;ŠďG>Fńń”“¨ •PŽŃÖ zl•H(°"/…ř3š%4áżhĎgżŤ3îkł‰đtĐV/Jcӏň•sţ Báý\ŐľĺÚR;É'ĽžÖMł•T‡Ö”Ń+‹œÝPž!í0_mŢOý[ˇšťM;‡=ťŇž‚˝_ńdžŽSžv!Î é§Şšg ÍľUn% ţp€–5Č’ŽČ'Ĺ-’–\Ř0ĽíZO}˝–déœ#…í0 HĘ"!Ő !cE ž]JůŻqNxýˆ?Jњp_FuĆ(Č4GNÁD΅üÁ„“€Š„ýš‰—Š[ŹÇ>nMś yA%Ţ{ÎŰŻ?č×J)˜đ΋ź&e:#3çąągkĺ‘č$˙ř@}:cŕH:0ŔČyí8tçCꠎďmëŚ/ÝW’Éw×Ę*h´ >0 /'uüŽÁ}Ä㋨Ž÷Şe p᎐őc ¨łŞVŽ} Ž§6^¸3Xůž}S\ßNÇ…ÄąÎPśŞŽ/R÷/ÁĆđB÷ϝ;w„ěóŁýˆž÷˝ďŃ_üĹ_Đ?ţÇ˙X(Ţ{ď=úó?˙sú“?ůú×˙ú_Ó?ý§˙T]ą`ű˙ă\ ţ8čđp xŤqÚ¸!XČÇâ˝SňAGćô6Œ7T+đÁÔŠ~¸°> šđa˜KaŽ…ßç#-Žwóźs@h<á]!IVŇ2^4EŘ_ąEXő¨.Œ‡üŽť{W­_ÜťGżţĹĎigď=şŽGúę‹/¨úđ.}ňáű˜Tđu,ďÄ!Ű0~Çű">Ż“Ňˇ_} †W˝w‡žřň sš[|ÝÓâëR–Ľ ęHámđŽ¤“ŻžúJˆžZ0îoŒCq¨ŠN!˙¸ýžůeáˆ?( Ę ŕůuśϴҒu°ďH<_ő¨ý4áś:r-xFÂ&„g ž ţŕ ˛ÓȪṇ|ńEa>˙üsyFş^Îî ŕ;ŽEÝ!oGÂw((ń¸˙ś”ö<<ŁńqŞÇ(3ʈôR>ś%ćYNç… UŃ;wß§ë{ň{txL÷F3:šĚjť.ÚڅN”yMƒ-Rl—â¤hÔ ¨ęM;g0ˇ˝!ć4ížŘVáźómŮÚsH; P¸GôvvĺúF%Űľç$˜(iƒ>ż›nŇ{7oŇ_ű1Ÿ}Ą<ć6žłíť2ś`đa$d}lދ˝ŒíÂżŻČŘǓ)Ňai^ç÷ťcŽăQY‡ŽšÍfMŃ&×oĘuŻ’™”CTőńnŤ:ÜĽ(!L”šŢĆQÔ|Źý¤´é„ŽńŽĺţů¨Ęé~ÂďčĘ´Ľ¨äńßŮܨęů˜Ş ÷cŰW—Ôň‚Ş—´.$q „ôNĺG¸8–˝b•m„řY'eŰ^FńgGł=çz˘Ďů]œŇă9 ×Uݏ›ßşţHćŹî÷ąÍVux›)H`>/[+sޅ+Đ'˘4ť2•"í9ô¨ĹĹ K˒_8Q”I¸ş)ˇá”ŰDǀ€€€7řŕÁ’Ć—ÂŒŮ]§ş!QKśq䓟´yüĐ?˘Ôƒđ9<ńŔ¤Çœç‰Sľé§VĺPf<ë”:|ݧřóŚ~"+Źę @%dWŽŽ\ýťXáŽxĺĐ6ˆ´%ÚćéH[Ž\žŽDń"ĂS ë&]jĹws\ŰóGiZ“~ š ŒšÔOb8˙Y‡6çHŐ&hřcP_ă*óbĚ ŕšßx~áŻS%ŤěŹÂ3žwB~xôPȀ;Ű۲ĎG8@âY†ďPę€Ma­œ2Đxlˆ?P3vPő<Ëö÷ůšÉϨ§ă,´ĎçČď@ ZHă+E‘Ë>Iŕ5rŕyŠ ›čęeĆ6Œ˙{\n„˘U"jń•˜„Eă9Ä?ÇŻ_żA×ř#áףŒŚŰ‡|’\Îq֙J¨gFˆżGP)5•y)×(ę%\^ĺl˝°ď Řđ_5=Ąž“x˘Ä㑅źp\†ĎÉymΑY`ˇ3}­ZЇÖN ß˙Ť[†DÝŽŸ†4ŃáöźšťEŰ×wĺúŸOç4ž—B˜Áůw7búäFJß˙ Ľďhşľ3§^ÎśĂń”ö6ů9ć÷X1—•ýK•”ąIś“đ‰Ó˜Žâ>•U,}é^>Ľ§łœŽ¸>“˛˘ ×'ú\>­l¨5EeĘďç.ßCŰEť\÷=ž„ŒëJ”„ öĽü7â.ŽşrCđ˙ĆÎV!Ü›{ÉuľŸ#ŽżăIIOřüů (˙€H4ăzĘ˜ŰÖÜ+şדs{–u WöŻ#ěEŮmJ7mŞ­\ű“aBUž|×­ţŞüß.>ÁĄĺĄžÎ}ÚG/ß^+Š%.‡ňŁDžÇśOÚqŮř "Ő|ľśjTq Ť%P ŃGÁƒ ŚŚ>J!ćÁ™Ďł#ţ€ĐWË5…ąM@@ŔkŒ@ü °0(ňż>˛›°›żf@iĄÎƒGŐ ô=(Ĺ,™áOŠ îšđAţ“9‹) ”Cd.ㆨŮů­Rűđ/”^;řóHČćz}Ň]łą˛Ä!OY2&IÎŤ°ţČA{'ÎŤă§űpńÇý0d/ţ„e–“ę>ł4ŠÉÓŐÄC܁tą; F‰4ɤďuŮ@šÉ–jÎÂц˜œ˛N—ş\w}nˤŃśú„횉ß[0Ár˝ëúúĺœë˛ÚÎ; Ç8ÂŒ^XlhßŢe¸E<#ń‹_Ôżá Œq€îßżOwďŢĽ‡Ęo,´ţú׿Ž=–ą€ŕ/Ü,_ź{xöô<ßÁŠ ‹ă,@âÁŘŢzœš)ąř"ŢGxÇüöˇż•š­SąŔÇ)z&<Ăť × ŐNGźxXŘôx Íy‘ôËÇéwźPţéők”ĺźË ƒÝźÁ‹ç‡ź„UŃďŢՎGOžĐFŻCýď}B\ڌ'T^¤ÄÂsş˝Á™mKyĄ^$jpVâkšĎćĚŰ}ŕ>wŰÜłŔAćű–ȲŕüÓĘŰ˙}ŐcPQîůúëú;ňÇł ÷źS2ĂwܡŁŃXţâ÷ŒŸ éŕůÔëw…‰îÝżgŐvž‰Ú ˆ:ÇCCöbŇC9ŁŰëRU4éÉÓRöƒt<<äz€ýc&až´¨Ť 鍯x °-ÇÁ-I ˘$­QďńçđČ,Îăů‹ç,ž;{ ~ƒŹ‰ó`!?Ľâ uŮěŇ„Ň­-ęěíQďĆ ę_Űăçű6ő;FÝZu+z˙ú{ԟÇô0(y_ër™3ŁâڧüüĎ)ŸćTĺĽT‚VĽÝe°›t’ç6 Ré^N~œý“ ™ÁڃĘ‰{iŞzômܧgŞK5ĄŻ¸ýđ;čP—ëˆvšÎćl‹řöÚHÔßágLĹ Ž{>§žŮ!Ýç{,-šĚx×es![u˘\ŽďĎ2Žř˝7%5MůwŸŻ75b;:ŚI4 #NČWő\ô¨Ół8§NQÁU(Er[Oœ?by`eCˆ‰}!Ŕ„Ár*>ŽŢľŽ9U ú˜íJZw,ăÔnŮG5 ÷v Y pÇë–ňS ˘uÝ_­Ţç+îxäĺöUş őeI?ʆSŢ  Q:ő1–”Ś­óuä.JiGÜ? œ5¨ĘʎElF‘ý[_ rÖůuĎśŘ?/ž>|$ĎQsIŤ1‡‡L@@Ŕk‰@ü x§a&ÍřfYőő€M-(=šńr$JJĽžwICüŠ{ƒâ…A :ÉŠÎ8@lĆÚ&oeYîŞĚŻ&ýźiđUwäˇŸůîOĘ×CÚXGüi§óżˇËňŽĄ60sľŔř  ú]ěy0aRś} ”‹…Ó,̈́˜–ZϢ ’°gŞ<{lxŻHÔ’eŞUůź-τ€€€€óŔ7zâ/ ˙çĺČPbX•W@@@@Ŕť ,Đăݲ‹ż j>\x¤|˙ŻSŇ\HGöqŔ9ęwŽóH˛ťńk†őZË]ž˜…}öí7ô?~ůsşýţ˜6á¨d§´76›2# ŘÇ{ťňőzw{a;Ŕk–ô[כíÝ´ő]Ó`×WÎ郛{.ů÷h6ŁżüĹßŃß}ő%Í#Ő,Şľ˝ŞZŽúaşđ6Á9é€ěçTŞ}•i_ŮpJżŽˆ!á‚<ŰŐÂB>ŃÉĐ5WDÂyݘŘ)ű€Ô‚ ŕˆK8Č<~;Ľ3kP~lđlńÇ)ĄMůży>őD \ż¨M'B B=áäő¤•îĽLS^t,ä Íí-97ęçĄĆ¤7ęDS._ĘË^‹„…ĽL8Ÿ9OAUVą­Ý7ávě÷ŠĂŰ8éŔ!.‘Ç ƚ¨„nî^§~ɆăÜä}űú-š>ĘiNŜĎ[”∧NJΝ.u@üÍ‡Ż?‡óHOĽGŇPĘňÜ3U-ôAĚ{67śhkcGH?¨3GHEŰ"ԇ˛ ńL;B„!—5źŒ–"ŒGŘX —€Ü2ŸP5=Śr|HĹdČ×PŔ˜(ĺô5Ý˝ĄéŁŰőűJ*¨EÔ床ˌ•˘§ăM•qxCëTPűáOŹé˜+úŢŹ Ż9ýdRĐĂi)až&\đŁŮœŽ&•ôłÍLĄňýˇĂůěń˝¸Ť¨Ú¨¸nšżT& ČBŠ8Öň˝Ű“žN*O ń,‘ÜŞAYUŁ’ÓĎ(ډŽšW§4ćô ŕ—9÷qđ}řŢÖčçŽÝŞ:ԕ„ťňˆ°ÚŤYŠňĘnÁ őĽ…”ť žC–Hc WTŐ݂ş…Űč“Ü樓ŽeŰčtB‹˙šo˙Ž?Š–)˙yLˇI֜°vč­Lݘ<›ă”zůJő¨ĎňäóŇŠ+šr¸ő yŕíœdůVäűurđŒž=|HĎřţş"o˜oÍBM@@@Ŕk‡@ü xçaIôml5ÇcÝ…“˜¤™tˇé<ń§5nŐ-›×šTKÔĘÓźus߸‹ÉůŽiă"ńŽýEĂ#é܉—ÚŞö€AŁßëŐĘ=ç!ˇ˝‹pIJÓúX$¤Ÿĺiœ!ąÎłez”‘Î хIÄB„óZžč"I­ iĆo?đ.q‹ß>ůç2Xˇx_‡ŠöÂؘp#favxtȋ–ş<áEě˙řżţ–&źHüĎ~úSúpo—ş/ńuȋÇ˙Żżřú˙ýů_ÓĄ¨¨…5żđś x×`BžwäÇ(§BYXße*’ËB̟ŚösUcQŒQё’„bóÇXÚĄÚc”FRŒąq ˆőH‡ëtŰđ ;î;ŽCţŽ•X''üń§(%üqůᘣă#q2Î‘Ľ@’pVĘä#!y,F”Ôäu‘ů€SvÇGœ—i*ˆQęG)ímmŃv§_Ť !Œ#HG V9җ¨şń5GŠm9Tˆ:Peń§šĎ„,"×ĺ’v+×áßjňŐJqPDşuű6ýđ‡?¤÷ď~@;[×ř\Š´ ?P’se;ć:ƒŞR]ß'úĽüťho^ÓĺĐ'VůÉăXÚ{ŸëçhЧœŻ ĺăj°aďš/úÉ%Y‡vú••6R˘t˛E‡q*őÔ+sţDÔMŒRś.4=ßNŽ Iî`6Ą9×{^Ňţ‡ŁÂÎtfÎCk—śŽĽ”ńůJž H_•QĚÎtBqÎ6~~ÄĄŽÇd „ĺČľ–UJř/ށdfîCW—a ĽŹůLԚ.ÝTźXĽ[ĚĆÖęĘg8=‹ă ĺ‡3Xh×EŚŽöúĐI&UĺYľâ - ÇšęŤ}۝˯1 ÷-ęžhH@˘šĹ÷Q„ö0žÚ2~r j ĎHݚĎ×\k/JîOńa<ҡ_|A_ýîw´ĎĎóĚ*Ă & ŕ@ ţź=Pő?gKęTdČŕľó¨iŇxŽuőœĘŸUóĺDδdK}ěů‹ťęVý<ĺ؋ô*ř~}.ßqĘq­ íéËę ֜@ëŐĽ.vÝgŽc;kyX´Ě;gČĂĽNIßLßĚżŤSŞVÇmí],nSâł´|’Ź˝–ĐŚÚi×îAĐW–Ó vćIsöóž$ű¨łÉć^Kó}) °žZŒ´X€áďśçôyaŒŠ/čđJąjťY<Ăťäˇ0~nž…“˜Y˜#˙ˇ?rnOńĂ}/-ńg:yV ƒœóúćđ˜ţӟ˙%ýâ7żĽď]ŰĄí—řˆ:˙ăç_ĐáńŞŁ…k x—`îŃiÂĎ'˜8•™6p߃ÄPUՉ퍎b QDM1Ÿ"FäKđ‘đEşMţX´VeEÇůńĘ{Ţ|đüĂ ô“ÉXÔ`˛Ô(‹‘n}ˆęđçzÎV‘ŠjÇü¨‰FʔOyW[FPęđ b‹Ž,–˜§\yA–éu{´šąÉűBx˜Mf4O(SFéşŰďÓ`{›: ôôťB’ĄgJą˘煂s’R§Bg%*BPĚôÔÉRŞ@*ŇšĆýEυô`H&Ęž{Ä+GʅhJ%ěY§Ű•pĆ }ôńÇôŁýˆîŢ}Ÿś67ĺđëôz4ć~xÄßS(-h$y‚]Q5őM-މż]ÓJŰRQć4p[=ĺ§cÎrVěP•ĎiĘí|8ˆčۇDwö6Šł˝AÝmę' Ý„ćWSMůvâˆg…(%PÍJJ2.k9§ƒÉˆĘý4„˘Wƒ($Í šĚ ¨T˙s†1ő:ő9ó˜űOŤZŽĽ• qUĉXLj?ü^žóź1ăţŚřžĐ üp+PÚÓň=×%Í Ä5WJWĂ;/˘‚ďÍe R76C-rA­GށzşňöÔË 5#E>Zű㏤TcÖ^6ôۉ0^Ş9omç­čŒ&gĎ0ěwŽVä0ů­ŰŐ¤ľĄżĚĽůyŞ%śV[3BňŠD *>°#7ę?hKsR¨4)Č7!-Ô¤đĄćY ’“”y™gŇČóˇŠě}`žMŽöéŃ_ŃŁĎż˘éţ:să5~j•žN‘:Iüöžy—A ţźE8ŻeÉ k˛„ă.´ţúă5ľěK‹Ń>ĹÂ×7ŘřľdZ|îăŻ$3u5Ů4™źĘFYFťŘ)ď_}Ję3í>ľzZLs[Á—Ý`‹Ć†ÖŽÓJńáŚäW™ăéůésŃ~NžáĽĂ›żź řގÎ+v™'őrŚ`‡ xťáÂdř în_öëËueÁ‡PÖ-đ—í™Ý’<Îčůƒ‡ôËǏyąôĺ ĆE ‹v„°9ďpˆě€Ŕ)Ű@ůÄő´UfüďŘ‚z;Ä×yČęZ(†9‹čźpő}^‡bXĄÉTDŁBÓźŹŹ’Ś!ސV6zžcтáŚá$x„„…sjJ“˜6Q•eş‡$źOk˘ëׯÓćć€ŇNDeÁ} $˜!÷ËŹ#ÍN¨Ô!ˆD bŐ!™L݋֜nHő÷R5ďA×.˜kń*c“Ű0-řĽ0¤b43”ôř˜JÎ˙iŐĄżîˆ˛-JŽďĐ×× Q*ğœzŠŚtĘ^rÝ)Š ”‘9(‹¨(QNňhĘőSő6Њ3)XóďDٜŠhÎcŠŃ§gЃ!mtůú“ž”żŠ Ę3Ę;%e]EÉ4Ľh”sőç4ÖS– œq Aħŕ:â~?U%ďÓü)„ő˘4Fž|ĺ XňŢÁšŰHăţ7ä F^íiÉ* ;RW}SęZ9]ë֘ĂJ•ÇăiR]ßU-ŤŞŇÍ ŠęfkHBőŽ´Ýî˙ŐÍĽi?ŸŔŁ-ÉőF~ä3Qč1a¸* Ťĺ¨šĐ_şć$)÷t1u!„Ą’TŠ…čcž$ä*č@ňâOœ5ŤHČ?•ďg5Ď#¨hU¸'$ü`dĘa UQe*˝â4ӃÇôü‹Żéđ‹űíOřžĺňTšü…M—śŸń; ŕ2ğ€€€@ľ¸aŃ: ŕeá´y]xœÎřď/˜ŕ/ š|`~ԗR x}Q/źëhá÷•Ÿ‡NzuŻ=×^;%ԉxqŞgőJ?őź§ ~?bÁ ĄNä…ř x›Ń&ç¸qŚŻnł íűŽM|)cMíˆ3•|x%œbţ@ÁfĹTń}=Ÿ˘úŁÝJżöȑšlęüÖ=ŤœňF-FBƒ$ćAJ”!ě"TeÇŢ&s§źŮ„7o‘%ąp;Ҁ[Ÿwę •%™=ŃâŃ´Ę(ƒ­.ÄÂMőz}˘8ĽÉxŸĘYAůvA1ŸtĐĐĆć%TŇwş<ďÇ4Ěg4SšŞ,ĄˆˇĽBü™S–V\ŻÍŤ9ułőť=ţôЌšuf”&™{J]Ôs—„ŚD ! W˜B9(ĐŢő[ôŃÇ߼OđCúáBwîܑyˆ8**:qŠˆ >VŮź˛JN†ťĄ„DdjŐô CXŠlŰ5äˆĘ,u_j)3ţ;ĺî4ĺM‰(ĽTœć(šĐg_đľm h÷ΈúI‡şý mӘ2:\ž~Ěů@‰'*„”QT)Ü/ äΗ0‹4 Ë9ÍJ,lšPO—4PАvVLi<.čđل’Ž˘Ţ`@qżÇŠůÓéE،Ó÷¸ź=>q†kăkĹšUEsBŰâÔ~DńůóšĄö3CہĚu,„šâöŇi‰Ž+D:íŤüœPłŃ­5dľÂRŠZˆŹÚ4nh?~vD¸…L,ŃŻ&ޜúŒičH5#§y ÔDž…űž˛÷Š(čhC‚Ş“rŰJť-jЧ—Œ[”˝2mC}•E%˝Lˆ|˛7–ż řDelHTčÇöžŻ@JĆwKLV–hTâŮŇ5m#ĘWP?›Ď$<ßłG÷éŕŃ#š>?˘x^R‡ÓǾǸ_Ůt!ÔĎ,ű|‘Pĺڄ} ś†€€€Ë"Ô)ă]Íý˘á“óΏő–ľŕ!E§t8uĘy–}_u¤Z˛˝5ŃĽĹ[MšçŮ÷žÖxIϖ€€€€wíĹ÷ÝÍ/cHŤ,‚1. ŕíÚ1ş‹Zń"3ă“jÍŕ™ßT.4ș’.†ŚP~ěď&Žb\čHë/˘Řĺ…$“e~^OӘúPŸ‰bšUsďk?ˆśáŰ˝q÷ŻJŐ|ŕ|N @h4|ϲ”’Ô(%ażO"tŠ=´ľZx|ľŸŘ(ţŘňę% ˘’š†óĘNGGGÔM;rm ŮŕüsúĄ‡ńű‘ŽÓéPQôL=čRˆ?=ŽklO%ĚW%ńťÓÉhRäœ_ak›Ô ćĆŢ úřăO$´×wżó]ş~}Oś›z.H—𐍂΄”+ęŔŻW7ĎŠ÷“QaŠ )"äÂוu:żq i×!%óž k×ęĎUůčŃŝBB EÇ7hăcNś ˛Ĺœćł”ËÓą}!ƒŔ “‚&ĺDęŻŕ~(!×z=Š#„Ýňçy8'ÚfVV l˙yNĹg÷h<‹éƒ>˘÷‹q>#ęvŠż˝M1çŮétIw*Cś@{ác;•´%é:o„s+Šî\…‚ڝ–ňE(ó<ŇŮM,9ĽŞj˛‡QŁŞé.­ô–Ęćúł;Eäçxň łĆ*ţ =#ǸQ'OŃŢŚ}rŸůažu ąF-Ş˛$;KüQ.ź—Ż&ĺߏ–Œçúáâř˘!Ąß˘ÎR-Şë7˘(Q†Ćű”(0ĹBÄsy!]e˙úAĘˆC/ň‡tďŢ=úú›očđđHžCćžD÷˜ÓUy#LúT ( ŕ2ğ€€€wgXŻasëɖ˘•x}b=}c}Ćg;î50É­ŠÓľié4ÚÉŤÇŐŐîy*FŻ=V‘nˆ?NzŐ%ÁÄ2Z•ď˛ó4+ů^ÖéÄ0ĐĚţk/°“°ń•ÝlUQml2żŐZ “Ë˝)Słýä÷€€€€€w m…śÁď"y-[txűŃU„‡ýv˘éZZ!â•QE) 1ăňMRɚpŒPFD'bc-…! ”.Qˆ•YPwD4MlXŽŇŞý4Ązą­!S•GTAŮÝ.QraŤˆNü˝ 5%”­(rĘ d—˘iʸŚÍ' €” Ž)Ž#!ˆĚË9Ĺ\'0‹ĺłœĘ˘”kA)„Ă_ĽJKú1ĄŒ˛Ź#őľłťGwß˙€>úřcz˙ƒéĆ­[ԇ˛M’PÎĺ“réœfyNs&đť2Ďűd+ţ”(_iƒIŞF-EŹzbĚ)4E6RUE‹zIŞţ¤YĚeâňuSšÎ+!5•9Úلš*šLóă =zđœ~•}MŮlB[óM:žŐ•~@ăLÂyP>éőDĄ¨ŇSQ‚ŠôŒŚ\–AżCťƒ> S\#×U\ ůŚŕý#ţ<Ž ęsenҌśŚSÚy:&ęvhďfFqŻKC>§ę”qÇýLú+ˆL™ĐR3VŚüép?ç"MTESnW(üŒČ\SĄĄjtč482×Ĺ)Uië]Y˛Vl땖źUĂ"ÖFíƐ~Člwd+UŐdœZšJQ“–hőŔaQhąÉڊ? żuŤmułY{Ü1 Ťćö;łýœđóŹOjžFQ“żO&j­m(›-”—J<3róܐgŠ,)‰­Ňy!őr–FżŠĚs¤*‹Ú •o§vK!Éóm€gÜѐž|{ŸžÜHłŮ\dÄpżđ­Č_ůŻ*jRŘeŕȁ[[[ôÉ'ŸĄíŕ𐺃]šż.ƒ@ü xUX28?‰hi†§ ßtB„>ăśWWCţY~řă’ů´SKěO}ď•R&KMšeF€UXô>QžËŞ'šÚWĽI-%'-#źKpĆuxÍÎř~™Ĺ”ć¸úĺEAëŇţ ˛ëP/ÖŇ•8ýgĘĚÚNlŚER€ňv˜-;ߋ֕lYĘŐú䝢9wTOߊ˘l”'xá*ŠÍBi§ R5ÝLéÂ( ŕőB—ďĘ;#F ŕőb˘ Ţś™ć´EGTđ=ÜW%Ç–ÇéˆoâŃĐúĎp`‹@ÔíąŢ€ Á‹ćƒžlZEŹ˙Cĺ§×ëHJ(l ‡ÇBŹI’ˆúýŽ]ř/ŒŠ ™gŠ|@ň5Jř)‹ś 7pßŰj†CçŸ!ɲNJ,4NřZŽi:›Đ<ď×Ďd_ýĺ6j; ´šš)uźpŘ7iXäRúŮ4§2Gá ^”Jř2!Ĺ ýôš7%÷ŢťK÷{ôÁGÓöî.Ľ$áö@[Đ“W%ĺ87ČĂh-wWzŒP`œ^Č= ţT†Č J#şš”§˛¤Ăψ„$łĚÖˇ˝ÓĽŸüÁmęoěrŁ~KóŻF”ŚTĚĚńň>¨šrúöËǤFnJôÉ}şyë:őt‡Šů̐Đz}iűA7Ś<ŸÓq™Ó°Œi;ęѝYNŁ,ĄŮ|JGńœfçCڏ'ôŤ~AOř<˝îœnq>Ÿć[´=ŰĄiń%ÓMî?‘öۈ{”t2šoćTe…ŮÁ˝ĚiޛSąĽi:"Úßçţ_ĺ4Ż zN#nŁšÓ(QĘm˜%;”Rfˆ&ňk@*ɨąéŽÔWýâT–ăH?ÖQRœ'ËŚ?*pÝš­&Čhi'!Ĺá=Ž]Ő*LĘćŰćň˜óPM֑ćŠ}[­…oVD´ÄÖŞj]dý@uMüÁo§řƒtć˝5ćaM SČ> d7… äú”çœş8Ö1Š?ŰĽUN:*˘”‚ŠĘzJó×ôóČ*ýTL)Gí’şŻŸBúą÷ˇÄŹŞƒ!Ý{DǏŸÉÄÜE5(޸YřžO !!iGpş \ˆŻ›7oŇ˙ńÓŢŢÝđ€&sâ{hƒ.ƒ@ü x+ŕ{ôú‹——‘Ě~“C{ľ•.ĺű\9˘çTK˙:ĺ m7+ĄÖ챋ŠV†Ĺq éX¨j{ŁkGîŠCuGŒ€€×Ý$˘;őŞ>uť1 RCüé'šz="ľéD Ďx1şÎ+O4šŇNaU/j2a´5;Ěó|Q&œH cˇÝ(č”UiŸ1ć/ĆíYľťť+żçó™@$Wɐ#ďŠiČn!ٸ×W⊪ł‘śôB˘%Y"Ä\ŘŻçϟ‹’Ď/Řwť]q@Ŕ>|\¨-üĹ>({ĺŸHŽ Çƒř3›ĚěľÎ… ‘Ä/ÔătА‡Ň4ŁNˇO›ŰtăćMzďî˘ôsóÖ-ęrž¸(ŠĘ(ô3™MšÍ&ü™JĄš(-UľşŞDQG[Qe9=ĘQŠ&IŐiŤĺZ'NL7n h{wƒî?ěŇţALĂ1ˇĂ47¤‹Ęä9ŸV”φT໤ô|ŇĄ&›´‘p™ďSBBrŐ"U=h×vRlóĐUíA Yo„9ŮV2LwńŽÁ@3:őňĎo2Á÷ä€'•“źŮGޤZoœl/iń÷’ďŻ 07Kš_`RŸö¸ťDW‹÷§šZôeÄ­žMgâ!„6…4˛iűŠćyÁ“ú\<‰ =Ťtný{8] o.ž2'‘ěWqT÷Çúlľ”63šşÓq_ŮZ;9łł<ăQ~œaj䕹żU*ą†mľ‚|ăŮâŽĆs\ť qíuK ő€>Id'}ŔŸM‘Nž´ é΀íwŕei_Pg4ý˙˘™Ÿő8ľâ9 Žćůđ Mz`8–/ź^Pz=Iő,Ďq}ŽG˝Řœ@/Ł­?ŕěm˝@, xóĐíŚtűÎ]ťu• ҈6(§Ž*!CS6ŐdSEĂy%–x\ĐóŁ’fŁ\ˆ,X(/˝…tGnhŰëœjěT.T‘ D'ŹÓéĘsf4ɂř{ď˝'iŽĹţÔDDţÄt’œˆďí0„äĽL( „°ތřŕ{?ëЍ7¨ĘKţT´żż/eĆţ[ˇnIčIPG(3ţŽÇcůëú‘6ćŮl"yČ5;‚ʉýř@í6?Řî@ÚŢŢ’ŔÝťwëóáZŞĘâĘ<O¤îĺ;¸„YłDŚÂÚČńݟ/¸şÄǞĎWR­Ś˛ôŠĎ‰@îakwˇ ÇOŞ…PK•UľĂoÔÉ˝{÷E5 őÔă֜ĄŰáúÓ^Jׯ_§řF*mxmP6Ů$őd$m7)§”A‰'1Jxgśu,}6úŞYkŁgdÉu–°B—,Š&ŇŃb¤˝ś-sAK7!­×w}uvŁ}m/ľŞQľ]Ů­yT–ôCşĺ˛XŢuáFQGP,řůâ–#ţp…ÉU9UÂ㘨Ž”´íÓÖ.íůG΁Đq“š´%úú¤žišçÜĆt0žŃdАc!ôw@@Ŕë@ü x§€Iq_}ő=yü¸ŢŽ˝E‘60œĂôÚľk<¸ßl ŘoˇNŻ!čhËVÇ׊‡¤ă#ʧ#™pa⡽ľ!D3HČhxZúŻŹŻ H?iˇ'—AYć=&€—Œ#Ł źQ›Œ$Ž‘Â5 œ“LaÜĂ1)OH:ЧöyŕÚ-ů˝œ”´˙Ĺ>š]`Ű×nÖ1@­ÍjńwkÎŃ6fžNCnLşţ ¸_Üźy6n&Ý ë‰q>Cěň>iŽ}ůůÓ§ôôÉ14 OmAňŚ<É=>Ňńp(ŘO”u9âJŸ ńlłŃ­MN?ČdżŠR.WlĽ|•{ČMć+}ćf›HĚ<ˇšYův̜ř¸221ΚťĺŞO˛š !EÍůS”0FZŘ7{—7›Mé`˙@Œć*U}_žh_žČĹiE˝~Fť;;´{í.ííu¸_w×ÔŰ黚Bľ&Ëđj*—Mî˘Ĺ´çkÜ3ăŇğ3ŤmäoŒb‹Ć°°fđ&ă]%žÂO@@@Ŕ›E—{^+#ƒą2÷e¨ç8zů› ᑰ- Ϙ÷™=&Ԉ^u@@ŔkŒ~Şčƒ­XČ3ý~J=„Üb›FB†č1fP–Et<ŻŘNĂ6=žĎ  ~Rą6>ëęg˙ëœO€ę4uČ ]sŇJ"$Ł ´H>|ľq€Äwľ¨>ăöľŸeËȊ&Tj,źz™‹—˛Ŕ|^if||LiÖa;j*öÜy>ŁńxČö9¨úŒĺů8î Ǒo`—ĹóށP )a}`‹ƒó[‡óĂš3ţ ŰÎ#×›P@xނˆGˇ­Ímşu뎄ůşyó˙Ţód:Ľç*M¤9—g2Óh|HGG´p@ϟ°pÄig4›ç˘ţ;]^˘Œáz(ăÄ'Š)Zly°-;r š!Ä*×Ţşió|6g›Ţ>×OWž ¤j!:RbŤÖ&6%ͧ|î9HG¨ćŒ26šŽ?#ÍÇv¸Žflďîsít2zţ쐎§šÚgMË\Ô_".[\ÎIÜJž.śyJČ2ž˜cî Ď(Ľű÷ń㙨JMfé3ÝQA)ךžĐć8Łëם"qőě› =tĚ×1ĽŃQJyTRŢ+Œ Ű!śŘśŢí÷ŠJ7h3íSÄvV!Łä˘@¤¸°VáƒjŘWşu_¨ş—Š:ě—j|#‹JÂS‰WŠH-‘„#Űg匭5ˇF€ř{žýŇuy9ƒ„qS’˝\´QÄA{›ň‚´DÖiľ)YR9PŮKąĺ˛ÎšVÚúŒšĐcşąa˘Ż”6ô– Vfr–źbkđWä݉M™íńBT+L›—ް„&ÔOlîQçŁÚbăř 2„ÓĂ3¤4DAŸřSŤš<ăźG3qOç4œđ=2ĺ>âϘíŐSţ‹ŠÜ^?źśğ€€€wNéçg?űýüç?§{÷îŃłgĎdŸHĂFńŇm‘^LŒWĺĆ Ď´Ɠ 2q‘K™Üń§ÓĄ¤Ó§8íČy7śĂĐ85ڑUrŢˆc‹ź[œJŁĘ!,x~J;­î1,.Ež× ĆAÜčdÉŻ¨Óś=„œG9˝ÖŠ?¸¤”'0=nťíí-şó˝[ôÝ?ůśoÂÓ$łjOta ýa xôđ!}öŰßĐ7_MOŸ>•6źĆô¤yÎiž?߉Ü^ˇCe~ČýĆxHÝŘéҏ>žFďÝÜĄžäu…¤#} ł%qă1“˙Š'ÔşäÉqe źÄ“jĘ'śŻ#x̓le<™ć%ÍŐgeâ–+îĎ#Ţ?šLEe aĘKe<ĄWˇ×•žŔĐsxpHŁÔ¸ŚœW.ŸeíŽîĘś>ŢxÚ|đÁ§ôĂVtăĆÚćëQj‘ŹrQ8ƒuÎťk-ĘńŤÓ!‘žhƞae’Ď>?”ž?xΠ€€€€7Íó]ňO@@@Ŕĺýť /ÂËÜ)Ă)R+ßʒ‚°€ŚâDT üEű*Ź€źq¨’ŽĽÚĐ3ę¨9ĽźjÛĎÚÇ%H@)uůŸTšó˝ž—d4ŒRIÎiŚQÔ<˛ôI͟ڕČ*nř @FľĹ8(BQČŘmKqpta˛žüňKÉÇŠýœ áU.<}œşŒŸl´¸Í¨™šOd‹^ű\‰áŽíklߛç% GôěÁC6‰ĺ´ł˝ÍöÔ.%‘’Íó#(Ä<§ăăCşsç=úÎwž#D\llPéá =PD >:2!ĹŘĆÜgŰ3 °§ĄlP°Ůăăß{ď}Îď:§É„ SZg;ţ‡&Ӊ8Ő GǢ(4âż°!úŕ˜Ë8ŚńdFÓYN3Q ožŢȚďź4 'N姲!” §čîˆhŁă!}óŗl×;˘'ŸĐó's*&}RĽ sšYT­ ů,˘ŁaÉv>M#îƒŰĂÓvĜűTT\&ÇGňwkӜ÷`>¤ń| Áęl7ĚG\ĆMbśI‚¤Úéa–Đ_O*şŻKQˇšđľ<<ĘéäŸęˆz÷KÚ{\ĐűěĐ÷ž—ňufôŤŸĐŁc!şu: ÝźZEϟQ^MŠťӖЈű@ћӐ‚voôĎŰâsŠĂŽ„^ëQ5cť„đ\eă)[;9˛ŸSǢšŽě‹Ě*-öX(jŠÔÖ/˛Đ|]Ú‚bˆSŻ.Í=AĺN™ł„ŞŠŚ|:“vŠ͟HˆťAŚŇ˜mĂ|oĎ$´ÖIĐĎ67ę Ö_óIUĂşi–„ü#—`É\ćŚ1ĺV–¤J-!ČĚMՄáBĐvf BŃ|âkŕ+ç[Ą­ťgԜT7Ä#ąË"’‚8:ƒ€UZŸ˝Őĺ OĐp^QV) “_Œq<9aŢxF]Č\‡0ä1).“ť Ů.Od6úœ.˝šI ţüâgż¤?ű˙ţOzúŮ>?ŐűtKe•âqXôr†DmĺHý4ŻŰ°ÚDŽ0˝>ńĂ?ţuŢűżRşń‘mÇË-źĄÜżOżřůĎéŻţę/éłßţ–žŢřĎ\;`ˆ%Ö)qĹÖ(ʔľăŚŤ3F˝ĽŞŐĘĽŸV†đ)NşŞŐÜ+ŸäUĽ !D YČ5„,Ұ$Ź(ŐÜ`ňyĹ×7ăÉŰ×ůäîžvŘާBT™ÇÜď"ş›u)C˜0śĂĎŘF ‡X*ŕœ8•k-šěç§ŠůZžZË<Ą^јmœ_Lh<’ëît“Ďť?Ő4ŘVʆ͟}qÄm6’ëÜŢák¸6e›;Ńăę€f“ufܜòMłęŃÓt‡F‡crÉ#â{m§ŮV_c¤r,ą§ée†đsúÄdȆÂ#Ct4ż¨Edˆ6d)şPŰłśH\ł4ˆ?¸ó˜Ę ŻÎ)çz‰;|Ÿ÷RŠúŠ85ƒTÎApÉůzć¤ř9Gâ™ćş›OIMâî_†Ä&/NĄ•”j:Xkˆ“Řä~Â5–˘J„öŻ/SŠúů ůÄ$d/q:m)ý¨ś‘ޝĽĎš>E ˙”Mw҆,„z‹bţ-ŽSIk” šń8 Čk‘U@26­ €–sűÍfxöđsŽĎ÷čć5zVńáüĚŰJ¨ŕ{&}v@4ž.‘°' ŕ5D ţźŔä “(Ł€€€ßnr pˈüâMKxŠ *Â&ŒCŽ’GĎqú€6DVľŢ c éđŕ9ýöwŸÓo?űéŮU9&Y#šOG”OŽŠĎ“‘ŽŒrĆ>/¨÷xŇwçŁOiď˝Ĺ8ĹCn1ĺŔDkjUR0œŽłTĘÖž‹ß\Ř8ƘđüՋôOˆAĽI9ŠîŇÄĘńőR†:Ěć<1{|Hż|Ló}ŒOěy[DŸeżT|üš#5šENVŰnߋ€‘m~œvϧޔS› Ҍ'\ĎîÓő›×h‹Ű™|¨ †Ă#cžňy Ý(ž€Íš–<םPÔɄ†íυsPí‰x"Çćšó„˜ŠŒ:ɐzÉu˘Ž|ř›D"5[ȤŞfUcŢĆqţë1çyĚůĺÜ/ŮřR`r ÂЌzYEšÂduLĺÓoiĚőpoä^N¨Ż­řłňP끇I=źÓ V˙.LnŢp8͝;wčÁƒ˛ c*!UółĎyč" žűŰđޏyó&ËĎIđĄřˆż0ÎcÁĎÎápdT9_Ýq^ólĂBÜvŚŐŔœ{. ă!śrç њň‘¤ D €€€€7>őfđnÁťö ŔŠ`(ÚdűDi áĆň=RʒŠęĘ&Ý˝{WţHÝomm[І¤Ë˛ŽD-HH3sCÂąm[/ć#÷wGß|óľ7’$–üA˜@¨+ź?ŠĘ˙ ĽL6ŻZqŢKS“źtăéz ęĺƒ?¤k×oČöáđPÔdj•×îö‹ŃŚçk˜r˙ˆşŠNB)ŰťĺýŇĹFůĆőG "Ű7+CpA˛śt¨ cĹöťń|LŠ2i'Ű÷Řśg]yĘ…”ő8™ËœŹŇ=zös;3ߋâŠ×ŘnžhiéxHšóK"CŔ*ş[´ß˝FGl ŻŞâ†4g$ůi­-Î0okő#ޔ!ż 9MŰţ9Űw%aĘ|ƒœ´ˆ†’‡ ĺUĚ ž†!ŻcpYťőՀ˛Í>żżMX-äP¸vvˇem`|ŔëÇü|Jô•ŘӘ˛^&ç„*;œ?q,”ŰwŻ]cűďŔp)U´ îăœvş“!CF”&J:ňťŠ ٰ1÷îë>ř€"năüţCšđ3éƍôŒďý§?ű=O) ŕuG ţźpÄ Ö1á>3쓆ńtFGÇ#“Bçr6 í^›Óľ=žÔđ@QGszĆů?ź˙€>˙ňKůÜÜʨ˓HŹĚčđÉęň$Én–PŻcĂPř‰Ržźm]2ő,ÄfEş¤;1Hyr ƒŕ܄˙š%c1Mr‹šˆš %/㝁 X,ń˘(˛Š/ćsMÇO‡ôěŢ>őf<š(M'œżT´P‚­#ăéąöâŠLmÔ!„Ý„BŰé€KëŽ]lBufŁŁŸ6˛ę¤f‡!*­ĘEŠdw‚r“–,5őŠGšĐp˙˜ŞŰ7y"E—€1| šfHYÎ’Ď\´†oźƒI&řÜŽ˜˜b’ŮrŽy[N)FÔOM¨ˇJ%62&MyňXĆWř Ă=žżűÝďÄ@˙!şą†`<;aPýń,ďœçHaˆÇůq>¤u†ýď˙űBŽ|ô葔énßž-ď<„8ř裏$?¨é!=ňǸVźIm~08/ťVŔŠBźŢPzýČ‹˝ř‡ ‹zPö‰?˜o_˙ŕ=*"ă qôü™,VQlŁtÄBÚäyŘÁѐ~üċœOhÄóĘœĄ6wxžČix~Y%(ŔVpÄóĎżˇű=ţöˇâŃOą!TVÂÁ­]6KźŢ§öÜ1ů'ű; ŕ-ƒs Áý ҏ#ë9âě/>˝hőpdăXá•}řcq÷$•Ú'ُŸ7!žš3Ô$%E+É>Ž(„źŒBzą0h[w\Í,ląf!ÂäsšCýږ[ą˝ ĎI¨Ÿ ( ˙äůsĘAŹáçäłgűźm.v^´żFxÂ}AšsNfԕÝBœA%üYÁۢP/ץ"qބ-ۄ¨ƒHލc ˜ _á’EĆé1πzK§Á"ˇŠJšŘƒ]/šn„LRńÇű’Ővؓ $>ŢŚNrúlďîw٢؊¤>Š öjcĎ3ÍŚ%t•ÂËk6á÷NĆőÔŁ4éPŞSNëH$ŸŇJ9˘JL­RĎ}ć aĘĘYi”r¸O‹íÚŞ ş$á÷ʙqúÝś÷bdď!7°Eĺ'wĽ úđ8$Â:FI?„#t„%ŽŇô(UŤ i„Z ԍ„EU­$džąąSjsÎ?Ÿĺrx—ű_Ěč”°î!ýš°ĎDZ€ʇœF'ĺQJSN[Dő™ĄÓĽ;ďżOŃ>•>ű˛yŢŮf xˆ?mŘÉ_*“ŠTÔwŕý0fCśÁs“.„Ă Šj÷š„IÚlȤ䌈Ć⑇8Րíd’6ŽşBüiźRÜé› (ŻpŤ–J 온šĹ'˛i!őęňX™ŔÄôb<ŠÖŮZ§s“{^+Qמî¸ŢÄ^;ę|fĂJ!}‡'Á×aaăPçUY{ČeŮHť6ÄżcŤÔÍ!ńłů\˜dťă}âţDŃو?ć8ľÔkáŇĐŤ<˜„c2Wń¤Úőăedź˛RžÄ¨¤/űśˇúľ1AÚ Ş<–ÓÉsCnӀĘ3ԘßFęUńIĎž†Ĺt Ă]žpfsž˜=}&´ďĚďL›ueň%Ążf0X€ˆfÚ°?ؤ÷Ţ{φԋh<šˆâN—Ű(Ëh›Ż7ɗ.tž(˜kś„.ÚoĂI3ő-YűÝ{Q f|^\@ţ[ćĘ#ţ,+oX4xŕżżđ\1ŔŘ ¨łaqbggGĆzxw9ď\§Źƒ}0ԋ—4żK‘ď˛O?ý”~ůË_ Qç׿ţľźŁ°ŘƒtřŔÓňýx?#ƒc1.şňAĆzxü‚x Ć'( Ň#OźsąeC™“äRŹâ€€€€€7xíě슲ĎgŸ}ÖlÇBW˘čńœOŻmSşľAƒ.=úöőoíQœňűŞÜĄ›lˇ(?˙•Gź`ÉóŻű[Áóțť7¨włÇ •<?Ţçżź ĚsËls›r‹úź˜zýÍGźxŤeN&3ţr‘żNY)ă´S>­“źú úúw#š—4ďRmĐ΀óćůӈç0“bÄRŠĚ|*‚ÚÍ)FčŚíÁö÷¨GŠîR§ęâTMˇęi$mTsšŽ(šPŞŘś8? T”ĐAňئ͍ë¤Óňőćů”r>hŒzK`+ŸR'}H›ÜÝoÝJhvŃt@ý”św2ÚjúŞ;Ľb8•:*Š„&GS!Ң ĄHž‚ &Nˇ<‰FeŚ`÷‹@TB?€˝™ŰROÄŢŠŤŽŠXé@ƙPšÎ”WćŁě}!ĘńĘDˆ”UĚ1!í †EwBCŕ„űŠbsˇ)sÓZ˘‘!Ń)K¤+ŃGS éâĎ|Čeg;mĽx}ctL^FŮ –şŸäÂ"îĹ=äNŸşpý u\Šó§őŢ5ŐźŰń;˛&f!äicC%D.čs˝¤ćZՌăqˆzR٧nj ňĆÚ*ŮŚn•É×ZZÔîáÔ,Ćd(Ékľ'!ŠńœŸ(62B"éů)'¨Ĺ8Ňž L§î?ăöéożř–žŠwăí޸C˝;”ƒ–Yƒ¸>•¨đ*ˆ?ď–ÉžşMn°DLŽ´•ŐâüŔƒČy.ƒ~lńÇM"SţČâV7ˇĚbЈ cóŃĄLŔ Ášá{ŠIf'ĄŒœ˜Pa˘iŇŮlÎiľg31jEÇc• ƒy*Xćf˜[ĎoaňëfRV_?™ ˘ňSš‰Ą§z1´O´WcÖŤ=rź˝^JÝB` \…ěŹC ĺ<¸§fŐ"Sžą™ Ů ]ł&]$ő3`c¤˛¤™„ó$˘ŰͨŰ3iç3‰[!ţ”ÎăßLćQŸÝ.Œ ]ăůŮOŸ/ĄŒD&řy.!§H7až|âŇT=šjQKŤi}%.ŰŤkOĺjU5žüđĐ0ńŽľőXˆkĎ$•‚üӑţÔçĹĘ´3‰tĄy‚§#ŰBŞžńąu€ŘËđ(ÁNŰIœóFqŽš<˛ŽÄŒ†‡(đHâ‰Ü”ű"%?ľDš§ ĽŘ˜4f#Ŕ'člT:< >řˆž÷ÝďđýL‡ŠăMęołńgž4Sš_@jĽ˘şă˝R›GĚŤŰĂ>7ČýńŇ@EÉÍV=wÎ ß`!gXóŹOĎתg™›ÎťŐJṆ+äÎyéçE@@@Ŕ+„ż€uŔÍ1ÁFÝV üŰoż­=ńl‡Ú”€Ę:ĚŞńú‰cw{° ;řź\x0GĄ'Ăr.ŰĄ$2<Ľqž86ďGNraÂPŽŃhHo?đÜáďçřâ`Qđx$ď‰tz&üŽčń\)ř„T'ăwËm\żNÜçĹ?M?˙ńűj‹ç†šçăĺ4Ł#ž‡mnô)ŸLyń–U§ž§MHńÂhç{pFŔ"pę-ö:ż|ůž‚đ.cDŒďpßbź â‡#ť`|(N~ VęŇśƒó•ęÉ9Eenćř°y‰˝ eó=|̖Ě!Űݎ§šÇ%–3ň÷™Š1ƒ;ŐGX2!uĚ÷HœŁT­ĐăœÔđ˝,KťÍZşl¸°^m;Œ{ź4Jçäí×ő>gWtJ;.L˘)dóg]ëÖGĆßÜŽýńHœBÝv3`/„ł¨8žqÝ ™Ş2DŒď‚ŘA̙Mfâ`2˝ĘŰĽŃ$Ăc%Š%YÚŠ•>ë0hDľÍOęHę˛qTąaŽ0XUY_č˙Ÿ˝?]–äH˛ƒA5_c˝knX ¨*vłřu ‡2Ó#|†áĚSđŮřţŁ˙P†K“ĂĽ›ÝŐ]ÝU@H ˇťĆ滍U3¸÷f&€LŽ¸áŤš™š‡éąŁG…ŸŤ"ŹłÍ —Ť\ÚâMB "KwŞü ˜ŢăĎ/¨. 1JťqÖTěuŮĺě4˝2—uĘ}.wŘeÄui ?B eĆü⌌/ŽŞ–ňřwÇżOüĚؚ1ߒ˛¤˘Ů„ÍSMë4Ďéää€Ú(§¨*hecL,㔆˛ąě8a\y>ŠčĂGcşwz(ŠDyŚD3”/Íř÷m¤!–ë}Y)örWĘ`˙$˜jQ×P iĄäK[“)E-ž9ŚŤ…DKB”A}7DÜuŰqHÔĚ%eOŤR>r:l‹”(ärj?Řő9Ú ď–XdDc¤‚Ă4סdŕTeŞř4u ţK1$˝˘9kM–Ąĺţű‹M"Ý"c ęVPĘٙ¤č)÷üú÷ip$JÄŽG>šnkŰPŃ Ý-ľOű¤’Ü:ý1M"smŻ,$*ň95t˙=$„uҒĘw*ÉÉ0đő“kłÉ”’}őŐ]^^ń1‰ä’>9ÉĹAśâTˇ"I˘ Te iżm´äBŽG”ćp:„ö#çMŘáÉőFMćR{ůŔş _oMŸ}ţ­—p¨ŚD6ęë%rŁĐHÍfŹŻăŢőéˇŰőşÓ:{ëÍN“=bî§ČĚ]Š8?ĐI…Sż&¨š6pŞ Ŕ¤,IËőft"3™Q™œňşv`§ÜĹáćŃބŸ‡¨ć’4pŽŮiŹŘAŞŒœgSwBäŠD!ŇÉđß hńşœ6وrŽßÉŃ1WnĹeÂyşˆžŸż —/T‚ŃEƒ`|SyÂ`Ć4‘~‚ë—kÁě’lń”ćˇÍƒŒ¨Žů9a§Ý Ú§c‡sLy:ašŸ—ƒ‡4É'”DÉ6rfŻŻZsłŽo]ăŃ*ăŽ1´“˘n°:´őNŸŃ$QQ­íՑˆöŸĂ—Ů6˛Ĺ“ärz@ţŁ+e¤€“—ż•…ă"˝P×˝:˜„âAB{Čĺ‚üćd üꤰŻG8 ,X°ˇÓüä‚7j`ô(ď#‚AşAd.@A€ÝűŻóŠ'‰dBëAöšR:ŕű}ů嗽ĄŚ0Ř*5ú¨oöĂťÜOä˘ çaűœőd\ĺńF~Bäe÷ťCn,X°`oąÝíqKţ-řëżţë›Űř “Îg2öż~~N˙^ŒĆě o jř÷˘Ź+ţ­ú#5P‘ŕ߄őÓĎiÄëşË Ot]Ëď‰ÄŘŻ§TŻԕě?óo¨UÎiĹ8HÖűF7=Úđ;,ŘíRĆtXvˆ'ˇŘ×}Žśi]żţó§dwĆ$ŤĽ’Jx‚žaÜXOɠҊ˙žN&BôY.‘˝ĄŤŞŁeM.ňśňË˙ĺď’ďő)R™#cŰ4MvP/Űz j’žĘľ5E˜ĂŔ’XżE˜Ö#9,Őp›ŰÇ×8Ćçţ„∠¸>°]=úvQĚ&’śEyGâÁ_|ö…(…ţéŸţ)˝÷Ţű˘č†:A{ŒÇ‘zŐrlë‰R Rő*óqŠŰő!Hƒ>âîxîAW8ZW´v÷ÝŒČފ˙Ř[€M¤–BÚâ(:Uâ˙ţ$ˢ^ŔҢÝ]íœ1ŮCĆdgŒŁ‹˘đÜ$§cžđ§@ü9Ű´tľ)Ĺ/K,<çTn0Áő˙îé1Mœz|:9¤Ł‡ŠŚTę+q}çĽü)JâŒ×iE‡ăDČVŢŁ9ăH?†@ŠřRUâá˙}đÁBüůěÉ ÚT6N¸Žń›i Č`(˙ŕyQ֗âÖ´˘` `jѐĽv—ÉźCŹ˜m'ę>(?ňéE’žJ s2GśˇAQqGŞ/˘`˙NÉn¨żššT^Ř,Ş;HM—§JĆăăňcĆĚ'МżEŮÇą{U+rž§*\ľű´|,ř%8Y;‚3žş~ˇsÇž/FćNތń„Ŕ;ŞČî-ťç—tîď!ňť"Ťř=“k.Żé›~žxsă‚vdŽAĂüź˘?=;[Đž¸¤ŤE!Ęť‡<óřz)Ď)Ţ!ܑçƗ)~‚ ö[ ţ ěgeˇ„HÓş\Ĺ"ŤőƒM™TIc‰âčd€Čŕę>cůlőZ3†íIši>fvnNîĐƒ‡čęŤO¨•źÉľ8eÓ(ĽCŢ÷€Ý'ü~TT6­ę–ž¸8§ŤüŒĘ_ÖRp˝¸iUn5ŽúÜśâ;u$ÔaUňœB—ňˇƒéyî^=SÖ`p/ .CyáW^_Aţń ß€0ĄŒ˙DVˆ; 9šuÔxšŐ4žiŽó8a癜măœ[ęĺkąŒł†Sr=Ż(ß,…Ř3›ŚźT4Ęqpşš´<-eě茞ˆŞŞ)5;rŚźgn% BˆRH֖}Ů[ÔÍś“đ9ůxȄF…Ö_7îod;ŕjHTĎ@FîŰ Ĺa^^›ŢÝŢ~ľ2Z§JÔľ/mHK ł’2ÚuÝËúŠƒ†4gČ]ĹBťćí_>_łÓe€+e˜ŕzyą˘@/QÜůď„(œk ‰çvÁNb'ţiesŞýAšˇ9çg#›Îitp-+ŽÖt8ăö<#ZSÍNş€"\ߗՆ?Í9>¤(;˘|O›¤’ĘŐsq°NÇ ĐŹŘŃJ„ä„´y–‰ů™›0801íTh#Ň×Úwę•äÚĄŢě~Úý#‡ŢŠ^[űlwăŒ_řłÝďqÔ”ŇléĺŁuîJÍ% Mgző!XŸBĐŁůݛţ˜Vó­iÎ1€űÁ‚űńާx""ďC!Jň:€ńXđÎÄ6˙~Äß/3}†ŸxŸ*ŘH˝˛Ď]6<ˇßW˘‚Ýß~’ČŸĎŰţ÷} “°Á‚ ö㲁Ăm†î$z řß,úąąRľŐš/ŕ ԅţŽČ˜żDťěLĽSeĹďb˝YăD2aŮ:…‚îú‚.>­0ăMiýňߞ`Á~Î6Tç…Ď Upřňˉ˘5?C~ĆyCŒrHXŮI)žOŕŘűţMmĹn˙ůŠąŽ 0!Ěą„5?öüz  o_Ĺ--ʎ.y(úœ_×UC›Ć ˜FŠťŮmüU+F—Ćԝ#Ž€řÓy &⑞ŢámU 5R$}xyŹÖëŘţžüpąXĤˆŽfhń¤Œ7Ľ H~Ż%üžK@l€Š‰ęŤÜi[Í îęÜŀ—@QmR%Ô`"M˙…ż‘Ś‹ŕśHÄ÷š8âWľ ÎRU őz%ÄL(ňIŚW“O5p‚vŃŔFô¨{cÁ˝áź1i0WrÚŽS•čýŔÎý_”-qb{—[Ž“íëŘüďRßďȒąű5…~SŃŐâšŇüœŽŽh4ŞQÍ÷Ý$HM–06‹@ArÍá,ŁÓ ˙=N4í]‚gŒ)ŽĆtx8cźš—”Œ"zx˙ˆ2`_|­ëó’&)Z9§{÷ďSÎ 5-[Ć3Ć# có—üŹŮLH-P’ Q¨÷đ5Z?Ź ?—úäö¸^GT4 Mg‡”Í tJ5÷˝§ĎĎš–Ś9cÎ9Ÿ‡÷ą5ˇ ? eÁżŤ›JR€i)áł­Џ,Öˇ˝^’ń/ž׿Ľ7^‘Éőp!‘„ÂI]e4xWs‰¨ÖŘÚPç[?äŔ´[í1ăžqŚ =+ćmńUQćQJK€Łăĺţ›Ď¸%Şd‘ŞŞ7PŇ1:OĽŒMň\H„9¸‡_RŒ‰ÄŸD5ž•mŚk%pUîé˝j˝_ËďâĹ"čT&\öäxBŮü”Ă!čĚŚs5Ć=Qäľa€ˆ<Ąí–ç5ľěláŘ<ó~JxC4Ú÷8âsÍďÝŁůŹŕőľœGԛ@*5ď{>:zŠB͏ÝđîrQ˘`P§Ďíîˆ?ˇI\{˛ęßG—y… |÷ďé#ÍVâŮGą´śÝ9ß “ÉÁ‚űą›oJDh–ő‘´Ţü;1X°`Á‚ű1ZŸ‚zoŘîé˘=U ™¸Çš›Ô5ƒm9Re_+ą5ÉÁ‚˝Üđ;'? ‘@ř‰ˆMrÁT[ĚęÓԟ‹ń+¤"äτżdŒŞ5ĹՆŞĺ55섊§:Ę;LŒ–eç59 ě2ԇëXĆÔ@Ţş •ÎᏨ‡Öˇá8Š*ƒÁÚ2 MĽŒŔÁ8˜˘žăHH?PůâńcÇtzzJ‡\wPi‘{盉Ač4ŠëÔ ü|Zy-_äW(6Č7u]éő­ ŇÎŕţěđcKíéď} đÓ§lÔQg}bˇĂ*‚RLÉż!ç‹k˛ü#凌UźCßű2QřŁńœډŽsşwB4ťóC9˝Ş…°ƒgÚń}ʟńł“ŇÇLy”Ó‹Çç´i×t˜3.ĆĎ×üč@HgHMšŠčŘÖł_uü‹ ”/ýKS)Ÿ/×tľaLěů%]V Ë0nY[Ĺřš|÷îż'ž9ŸŁźâű(#ćmi3ćś7˘ŞŢrĽ4řäňQąäíŽř§Č%†Y~ŚÇÜ.…¤R“œR˘xŻľf;Ú+>GÉíYÖT9B.úC’%Ňîq¤j?BÄjŹô-§|oźjаr˟͚1ŢĘĽ?,:š/™é‹oĽx‘˘řš‚Ú)Á¸Ůř˜†1l,QËŰӌPÉUnŽ„ŸÖřř|+žöół }őäŒ>˙üszvą¤Ť*ćw—ŕs~˙ń^nSËŘiĹż žw”adÝ<Í~ ꀓ ěí°ŕŻ ,˜˜%Ÿ YŇŕ$*Aë 0Ůf”&/ëŕĚ!w3œ68ÇŢ”A$čĄZ“aŔ+cěöŒť1;Oű´84Ż:Ôçďş^Xe ˇ[žœľ{ŽÝžjíO°bƒ öł5ŸrËŤţďˆ??%b㖬ŢăÁ‚ öă0CŢ×Á‚ýhÍsŕ_ƒLŕ• ¨†uw"˜\çççŻToôv§ÚסˇŽRřlc賅fö脠 šâIuT?Œ7ńţ5쬒]4¸ dä0?ĹŇ@dŃ +‹e\J‘#ţŔ€ÓAá‡|€˘}Œ¤%×T`(W2ě“|i‰z‘'ˇ€„” đi™xăťŕ)ľ”€Ő:Ě0w”`Žž‡Őé°KĄČ8˘ŠTEY÷‹ź’J´U@Ç˝C€Ň#‘œ§ÓŹP.표•Ľ˝Ą?ßž'çKbÁ’!项\_ƒ;šŁvţŒÖ‘Ôđ -×BţQż†ú4QZgv´ˇč– Éež:˘A?CímC#˜Y!W­A˘9?Ł´áű¨M'Ô0ćšD9cĺÜ6IJÓŃTɛvAŤBÓ,ۊ1žM%‘% cFý̂Fłď_1 ˘Î†ş Şt|Œ‰šî6ŒoÖt˝Z1\ŒĎĽÜo—ë%ŸwEMŒöW˘Č†ˇ]­6”§ą¤ŤiM›%R”u’çtt<áśe,•ۤ*ř™el´ĺkËk˛#ž ŸÓ+ţiĹ*‘ĆĆ ě”ĄűŔŢa•őŠ?čÓëCkEŐǐWŇ×W`üBâébáëJpVd(ˆ$ţ˜Ż“1ć7‚’–#í Ýń|#@š‰ŁďĽŒ­ĆŠö_š.<\–8…LTË{ÉôƒSůŠÚDˆR›Ĺ†â‚ńr°DŢ]łq÷cMĺk+ăPĺaÜߎĄđĎ׏A|jd.ďEŰt7ęJzú<ŢCPYę¸Ý­ž3~7p—Ňšž/( •Œ{wIźó^ôďcźĎ žĺ1ĎĹUA_=ž¤Ď>FŸţ˜–\–řđžźsVŤľ(CÍÉ2.ŠŔ…ÝúwÂO|,ŘOĆń'X°`Á`>_n¤ę/I>rN(˘0I‡úR!ç4,8g ţdă1;#PÇÎŃŠŮÁXӂŠŽaçÄHŕDóˆń!ˆ@‰ŐŇÔgŚ9;j 4u/Š\œóus°Ž„-Ż Œ„†ŻŻű´.˛ƒ:uôÄů†s€ČHs5 ĽWęPć=š4D–âŻWOűăÚ=§xHúé mŁJ ď)ę!zÝŘr˝v™:˙źmɡV˘áäó‰2övRăœ}—[xXˆÝŒÁvŔœŮ+ŕزӧ`œ˘˛ˆŮ)ÔÉreé Zq]m¸.Љ\KˆZ€Y2ĺ2Œ$…VżÍŽ$Re? WŤžôäKgn’}†wtŁď$ůődŎěâúАĽ‚6Ą˘B.h+Ę9ľH jmuÜo$$Ž;˘ČC]ś)]š;Žm>rBąÜ&S Ć­:Ż3^§ĐNrj&üeƎ iQćtŔő‘ĽcQěIů“ť>m¸| §ĐŔT)ä’ćs¤POQ[Qa"DńÔÜ& ň0çÄžżDmŹ5-­#ʐ€“qL×ו›;y*Ŕ9…¤łv~ÚeœÝRy?B•ŚA.ißĎ=™çŽ2žČÓÜň[g¨d*˜—oîÉ?&8˛Á‚űišW?kŰƑťÍ÷NúńĚ]šý`Á‚ öł6—Âćť°]uá!aŔĽŹżEÁ‚}mÔxƒ? BĎW_}E˙é?ý§>­—ŕ1˘¨ŁRXŐŸ˘oxžŰĆĽ~Ým뿉a2$s<~x~IŃî&Ëą/đĎŚłƒŔBUÔđ)“Šj ą‡*FŰ`¤–ëĹ ŮŰApýŽáďe‘Tç ň¨’t7Ŕ2̀şâę¨/óö݆ăxy Ę?úÚŤšěk>WĺÔŇGš•TZ‘inŠSw:wn-W"$(9AľzĚX°ŕ*źÍŻ÷ŠN(Ť(’8’ś{‚W[–{q˜I6ŇÖ.ő˘¨Ť$:u§D¨¸/ËśLńŕ=ţŒž={Ö§ ö8ˇ'‘ěÜŁÓíńm¤Wźšß~Ÿł.đđ.ރď˙ ßKqÁŘöAƒcźŒyWޞűj/˙â‹/¸ŹgÚG„RJz+Ü×ähBGIůAŠ2mÂáRꄺ˛j9M{ ăšĎůŢЧ/^Іë#gl8¤¨ô—kŮ/ÇZN¨/šÎ—ŞöžťX.úöőJ˙h›çϟ÷Žk$ęNŠÖ÷J<źMBRۂ—îNzęÚ+~ůöQÜĎşToq ŤíŁi­žďĺb!Á€ł9ăŐü‰ů ¨˘Gc¤ăr}#J$} ç-ů~ l‘zîŕčár>–ë ÂĐ÷ ř;Îuy%%<>8ĐZŢSeCŁx"X/ŇÔáů<8Dß6JŔCź2—KäžÁÄŠĹe-AŸmÁíU¨úRÍ×ij+ÁÔx–î2ŻúžâkÚvز Ę”ĆÉNĆ;ü+˙>ó9%ł8ÖýP Č=~ü˜>˙ü]\\Q:™ÓÏ(O%őߝţâcj¸|x—oŠRÎ,X°`? ğ`Á‚ýěM" \D‰wÚdENőǸœÔpbUúVƒƒőŽ& Cz¨]__ń@ń… Ó9†úšˆĽ€"šËřŰJäG„”`‡sjŚYTÖƒ0Q72Ž énÝ[]ł]áŁ<äÓh„Ž:ŕűKäˆ0ˆzyÊ?űĺŽ4ť"O Â×Ýäŕ„F\$ ;'c.×4‰ü+”“b!ăSă‘éƒ!›Z™űâXÇP°‰Čó„DdHœ” ­y)6+ŞŘů“H#[Sa**ęBÇuÍdq­iů<Óńˆ¨áŔhQKŰOň\H*2yÝşňPnSüůZćA"É)žMR•ľˆTiĹů É+=ůŤ˜XúŤŞšňg ‚‡B"śj $ŇîXŃş<쟎$Â1ą\§@TFĘ}sÓČwéŁp*c€ˆiŮqştŃędŠÜp×hžęHŠD"˜"‰ÎhŮéăLr'w]ĚNšFy§ űN&#vîRQqNe‹-Ľ|íÉx"éôz՟1ŃÇœa,š80ď¨|”Ťdô)žź ÁBäź,mÍdÔč6zɚĞ`Á‚űŮ,<Éہéű°á¤…DeÚngÝţšďş&ݢ¤f­Wœ|ő 5źsƒ ěç`ßćeo_şĽíTő3ńŘEŁ ˘ĆÄnüß9A^CűBŞ‘}yy#ë‘§aÝ:ç3ř`—aËË^‚ű1›'x`˛\&ԉúŕšťH:/SôńÇÝ6îô>˙7!˙ť,kYUĽKż5PŹ!ęUv|ú[Iqe4ŘP“ď8•qOŘéqžDΧ)uśc^Q1†r´IL$UO$xYępSIOĹ˙ň˝q„k Âl‰Š˘„@IY:šňKç4ąt”Í&D‡ăˆłX”}üWň˛dŹŤt ĘG1“1Ž(„,‡7îT°űŒT9D ¨ÂLŚSšĐt>sÄ #Ä,^ ű&qJăјFŒm*i›JÝ |ź=ŒÜÇă?Ŕ{@bč:÷lQÖŽł?Â8˘M)ŠŕOž<šAüšAÚšŃUĚŕt#Čąß˝Çؗż˝{…•rCöúœRţ>Iš^ ľQJkÓ¸UGç­–|Ÿ|˙ßťelÖ@•†űâ ¤ŽăfÔŇŚ)Dŕ}ůtIçĎWt}QŇşŹhU\qŸˆ¨¨Œ9ž]ŹŠeœ÷zY“dŚĘ4…XYÔ˘.ÓŐUŒçŽJ` |>ü (ż"ŻăĆYÖŇ´VĹŤ˘Ë¨¤‘(âH}Łr›ŕ<˘jb–1[Ň.ăůPúi-”l* âí}=§‚ƒ ]QŕaLžä{ݐ/üÇȧk9Ö=úCÎÇUŒeo ÁWÓ1÷3ţ GZ4Q˛eĚśóćíĚcČ3Ex¤ÖB´”ë'áżš„-c¸]ŮjşĎ”ąä˘ĄŐŐJâ…Güß ’’KR“™ZÔŞUÍýˇuŽf\*ě( ßG"ăśąQ•[r™;–Źg%R|ńwŽkœńŚ˜°é¤4FyŘˇŹœäÄËów™%eśVľ^~ś2~Ć Lwœť|Űôs.Í]Ll”Ćď˝őzCחPŇ_p}–”NhĆĎöôřTpę˜1ć‡ď˝O%ßʟ­ Ď5Î7œ‡Ą`Á‚{;-‚ öł7ă¤d}ô„8)NĂGăŔ4÷6j“î # ÓäřH‹ËËKzňô ;_ľ‹dЁĺ9œ~é3gçsq“|BŮé)UÇÇrM8z kňF#8ĚVęÓz;Ŕźm°éVź TĐH“7e~ƒéóz†ű˝w˙ÍuOęb’˛#mştL|đ.M'#ÄKćłÄS× ďr‰hmƒ;=ÇGš¤ZsŘĽHš>yrNϟ]Ą Ä읊7tQ\ŇĹőĽ´×ăâ3:Ű<Nůéń=:=Ő蒪ĐĘúcnŁş°|ěJ€’ďŐŹŚnC˙Dß(‡^Ű„ԃ#xĎšŽő‹ô°é‰>:H"L+ŃŇd4Ë‘Ú G´ ŕt-›5Ő¤ŔąW˘ńĎKĆŔ HIˆČôm’d=y§ś;aM…úôH-ν^[Á˘TR|áXœä˘%ňiÄ‘O>`ŕE˘D~B3Ł ¤!Ň@CŢ;'§ÇtttD‡‡‡ňý.끙ůçejĂÉp„ö†`Łů Ős°`Á~^6ŒśŐI §č&5üxđ%gřZ¤éíšěŸ¨ŰĆ`Aq!X°`Á‚˝i3?¤¸IőÁú6fü)ěÍ)aO}]ĽŰ`Á~ ŚřˆúëŔř|Ęíý}üŘt_ŃÇ'úí°ť”€ž‰a }ć ƨ 䐒:ü?}œ­}<ţbôF9IťRMäČ1‰#žč{{ż(?öAP_‚4ňźO†@0 #šä™*á€@€ŕŔŃHˆ?ëŞěKŢŁĘ‹šzŁęę|˝‡)џg–>˜XƇZ:˜4tYQ°qcĂĺ\tŒWu$¤†Ź­+‹'ď҄Íčˆ?|oůx$„Ÿ#ƁÇĉ*ZOůßşŘP‚@5—Ţ+gĚw<šPŤę °;ObJô˜¤NŮ(ęŰQ ş•$’i…¤Áu­`ĄŔÎş.—u>}ńâ9}ůĺ—BüAÓžíô´oŻčăąä~ł’$ößŐ˛žŻďÓ7÷0Łáćś"ڜső•\ЧHű5ĽŤ8§ëËFH,MýˆqŐ9cŹęŠ%™ćŠáÉRĘžYćtůYKłUE'÷Ž,­˙¸¤ŐóăŔ†Ű1Ľ%Ż#¤ś"¨ˇsŸYh暪›á%ʤ¤wîaßł?Ny >j¨jŸQ}ŃĎę˜hvLÝxF•kš{suź;U’kFą d%ÍWg{ĐçÓćqö÷ƒTNśEz ˝ˇvź1lĽojű—ěT!UíéŘ9hsvbç\ś9ƒěŮ(çz*¸ÎjZŹ2vFÝÔPOőzˇv—eýúýÇ;íep¨űž#÷DŽo’š$HĘýë|\”Ů7[Œh*™„|‰%ˆÄp?]že)1‡‡ •M¤?–6\Wé˜űî„2^ŕŘąLëu) Kpśä¸zÝ?;ó$kŇj4/#v´ÇăXÓPq}ś’^,’ČA +R˛WÔЈŰ]ĹaʡžŃŠ Řp$ě'\ŢĺEnvň)ĺěőúŞ>˝ƒúÚ ÷­M¤´š. KüäÉWôôéSmžĘ:Żřm:›Jż|ôč=¸Ÿîń‚÷Č]6$뼊°c=ňÖ`Á‚ýDm¨ęƒĹă~˝OŁřŚllÍŠ_7…Nř ě›OzŐ¤ šÍf˛ńCâO÷…q¨*$×7Č=űĎă›&Œ ŸÁ]¤îd†Č‡ívzHkX4Jt‘bý˝oÓáě*]J* žHĘu%çńxDóÉH*›ICe<ľÂO,*%Ŕ¸JŞ-ážÚ1HC)Č; °ĽŒ1śôëqCżšF4Ÿ§4Ícšđśé‘Ü0L´ŕólZ+D`ĄcŠ›.VŒĘĐ.Iż‡†Ti‹ň<—`´ĂŁC:88”2*Ń ’ööi˝4hmFłÉ\Թў‚á:ŹRU’őyĺRu}ŕčÖ7ą=&„ĹŸú Qô-՞†„ŔF§?cýĆšĘńx<ůgż†Ş5ˇŠI˙GŰGąS¸Hš![pyăVNÜĚgTŰTˆXÔ&Œç’ĆŒ7ŽŋwČ1eÉXďeKËŽ˘ÂV”3ŢŮ^TBXŠJŢÓpż‘>áRËŇTqŸFÎGŒĄÇŒ ‘ŞcŒ g—ŠâĎőŞaô—Űc2ĽŽąĆš;G 0ľs@6Ÿ?ⶌó‘J|ť Ň‚ˆ?uÁ0ß6Bę*•„űH­-¨ŻťpʝúĂźToŞ5Ł­QÍ}™Ż3f\/혓4zÝ`–ţ2K‚ ĘLNO˙ž+‰,ŢđąKĂĹBT(÷› <<11.•>žĹš¨á;ć ĆnAKů=•Œ2žţn2)cÔ*ů(9Ä)­—˘ iśęX$ämÁu1î›p+Śźcš Ô JÚ ă…’ŮLŚ*W‘EŰGrPBľŠâĎ{U4ŠŐ p´Zđýľ+jŁ–ŸĂVÚĽâžßđłw °ţÚő=ťA42ăb}?ŽëĆ)Ź×Ü*ĺh­Œp-lCO_/hÍm]PÄۨ՜!k=2X°`ÁŢJ ğ`Á‚˜u8ňŃŢâ"Č6"‘px  Ćxărö"˛ĽY/Џź ŐŮ.ŠăAtÄÇŔ9<>˜Ó{Očď˝K~đ!Î‰ŽĆe?řěę †/éââ‚6Łűdţ^wʎ@Á獜Ă× TœĘX-ŸDČ´Ę;[?uů|aH0ěL`—MŃ9ÇRnpP _ƒüóŠMÝ\T­ůRźqŇ⑥"a‡)_Q:Í(‘<ľÓ1™ƒ Ú˘BŃ|ąyŕĄ#Erúf“”rQ­1"ď۰ĂD‰'¤ćkT|l•–|žšŽîÓńá‘änžŢđ@ţŌ)×Նvř6‘Ę˜Âů?[|ÂŔ˙ ;í÷Ů \ÓbźŕpČ؉´éŔ‘Ž](ĐŽß,ŸpÔÍ^ä˝ć<í!ůd'd ęü‹Ł¸kĹGíLď‡tůŚ[źDDiŕ+:™f‰w-yĂőXÁůcg˛ĺO¤EŤĐ‚Ĺ}Q(ɈâńeŁn‡9oÍ žďőőŠ‹•œdY"g}-ÎW:BťŠú âsť”@Ú°’ËK{vć˛ÜPÂţlĚÎcÎű3žĎcČBgŻ,mŕt2DAꕔ<$á'Bţ‰÷ęuhŻŽúžÉ?x>ŃÇ?ýôSúŻ˙őżŇăÇ_0póLąŃ(ߖŒŰ Š?}ôýć7żĄCîÓi’ŢzNëÚ|ŇÝ)Ńq ęCÁ‚ öÓ4źo˝źţp’B@ůďQÍoř>JjÁ‚ ěť°^9ÂzxĚĂ I>P€ž–Ş]°`Áść~ D r|ö{÷î ! Ÿ‹ę4đ`(Á<éÇďs0? ăŁIů5g”aš\îŔhŰÖŰ´]•¤ˆó}Ä"_~ńţ ęęĐ_}őăGEy׺M]ęeýh¨PzkOń)“îŢEîJ,6Ę7ŻúvC_GĄđb¨Şz•ď¨é„<%íC›śÚRAŕ`ŒlÉĎJĂxçČÝs•&ů‰Šö ^Z׀ŘÇ+ŒwPGYD­źA”/5”JŸâ> r–(ęŐ­pÎ ˇ3ÔrâMŇK|%j1ĽƉŰ͒ ń5%˝ŽEî9ŔœŠî›-9Ś9™„ŻƒúărCÁ‚ýg\_ÜŻÓÄĐź™S—2žúΘ’Żo# Ş­˘rOĽŰî¨çH?FÝLr™C(Ż+iĎ)?‹HO‡Ôhă݇‡BČg‰ŤDŸjxÂ$ĆĽě$Z f.ľ[BoÔĘóާ t đNďwkŸúÄEŸRÎ=JśĚ{RŁÓ,îßmîT%{Žó˘(ĺž 0ďՀWüîŮpŸÄ{™+,–:?pv&Ďä0]ŸĽ0X ,ŘŰkř,X°Ÿ…™—n3;yŹuP¸űƒR8ď˜`ż˙ŕ=::ž/Ž$l"2NűůăĎčé§żyŐ5Üs7ř„ó7LéôäTœCW7:ȌœŁ¨ş,$Őş]Rőâ´§[E“ šçŠÇđŕŽ-Qf "Ä7Ř÷!>Š/bG7ŠŐɘń=ő ßąY1ts=dW5ŐHM¨‹él$Ş&™“˝…üćrľ”Á÷ČĂ+íÁuůîťďĐ˝ÓSVŰ×+Ü g7"–@€ý°ZݤŢHĹő$ňŻą:¨ˆČQ™bv ¸ž‘WŽC–ĽĐp)ÝžV}˝ů‰<ë"TęW•`š÷lęŃH%I ź´ťľˇ;űŃčA¨EN%ĘÂEhÔś‘üË­+œä[†úRs!r§uŔ új–%}ŰhŃä 飒Pˇ3ng+X­Ü˘ƒŕÔ‰ţhdŽM˛ČĽóŃP[U8ĘhSœóÇčzuŢ#Ţżýíoé÷ż˙=}ţůç’â uŒú°„wŽ— Ç; ÷Œýđ,żű´EJX˛{ Qű Ď’s˜ŕČ ě§iĂ­‘‹¸ő)żđ›ş?ŠđćĚ~‡7Á‚ ,ŘMť1ƧᄾŽßĐ§`Á‚}KŚUß'y×ůčC Ě?“ÖžzěřmˆăŠ}BÍ$;î ˛;ŘĄâF¤j8.ĽÔ0`jK˜”Ń]/ľ‡oňßcĆ݇ý]/Ö´\o4đŇa™wŠqFֈZřœńÍG3zďdDň5ÝKUÓI‘ńŸ‘*mI>H=f„ˆŘÄ+íÝ6măA5Ŕғť€ĎS4ŚPĚ ÷"Ť•O›ĆŁąĂƒęşîOß+łťűĂ6#D¸fŰÝŞö3$CţěłĎ„řƒż=aH XžĐé _‘¸ˇÉGśŁÁß[ýš7(ţ4ƒöňd&2k2Ë BČڈë'ɸŽ@<;ćD%oľą Č%‰ëëʎĘE!çuwĆ;Ć…úÄǛl$ ü6BPl")ş$-\œ ąKReYUŹQőîďQÎć‚c˘›¤ÄCÉđťöќŰo2›ŃˆŰYÔĐ[q ęjĆń›Jđa jĚGŒuÎEHĎŰĆőZÓHőŞYŚWӒŕ<—/ Šť>w„œtÝHTw ę3mEi*M e‹e2w4*2ĺ2b=î­q˙˜5” ĹV•P‡˛aˇ<ÁmËo~šĽÚ7 Šäˆy‘{ć%˝ďeýÉá1–”ÚLˇŒ)PZ>wj÷5>7ž›rťY¨÷”|Ě7¤ď=ę ^­DŞ&„ŔzĚhTUIkiۡŹ+#žĽÄ=łRwƒĚ č{B^"¤V,Köا'˙ ˙Ł˝Ë˛ÂOQTXŰŔşçĎ_đ{"–šÁ^W ˘źůšş¤ĺráÔęMŔJƒ öÖ[ ţ ěgbfgr{Í"ŸąwRý€0žAü™LŚt|rBďđűÁÁ‰ćZvRŹŢ1űă˙H˙řţŘYÍx ź•zÓáё8‡Pc’BˇPIJ NAâŕuušĄM™ŃŐ8›‰_@č(yĐ bĘÁÁœĆ\¤ÄŮčęęZrM'.šžrńz˛…ĘW–xP§>cÇäčđˆ™wëŔ‡Ś~’Œéugú€8ť­? 9>ăűDôäJá|#ĽÓrą¤ŻžüŠ>űôôäË'R÷ł1F´;ZY’É5dŕé[‹Ü'˘pžkv‚/.ÎeżŞyŔ~pŹN6UĽ™‡šJSŠeјňŒë9fG*‚ĚiěJíúĘk×ٛŽ\Ťj>.ÂÂO^ś]íb˘Ţ!âöNăAЎÁö˘ľœŞý@˘AőüŽa4ľ\Ű)¨2ě`'ę\Áy_­Ö. Ş ýKAU’h§Q&Š?pŞf)0#ŞVĹFŽ™ń?8eĹ…ÂîÇA˝˜żň,gěČ#†äśőf­`‚'2ýˆ ÷čI<˙ů?˙g‰Öňa*KţxD ‚8ĂvČ9ă]ňö˝˙ţ.‰GŔŹ­dô@Ô6ş=’ĐŸ C°`Á‚ý”Ěżçtźdeœ4ŒŞöëß4!ç6eŸ@ ,X°`ßľ Ç˙]ˇUĺ K˝ŠÄƒć+X°ok=ÁÁƙŔJ$X°T5ĹMâ>՗¤”:öýö—‘€žľ+Ŕ„~’Ă?Ě6XĚö$vťóĎ!Š2aß8ěH&őĺ}÷{™0î`4Ľ<&ë׍…¤nŸ1gDľşŁşĺúŞŘö*ěˇÝ{Ěיňźü=žÖ/&)}4Kč!—âÄ@şUl˙ŐPĆeĄbÝ á"uď=”)Ă@"ŠŹ’#Ě@Íc—šqÉ)$I e*ÁƒP júÚ[đ'<Šk¨Jóř°¨ľŁ­îqăŢѝĂŘV˝úŚýjúô_CĺM¨ü|ňÉ'ôĹ_ČąCőROţq•HCvĎ.™Ęď9ܖúśöÄŽíš<.j‰n${ WdŻž’ЏÍ×JNК?˘†ńVPeş*㳌ÜF‰ëďŽ=äﭯ矎Žv$)Ţv+ QÎQtŕ@_do¸Ăvˇşž‘ő„Ťoä.ĺ‘(ĺ‘˜ŽŮyŠŠBÎhHZń;…\ĺ‘{G_ŠLFN†h˜‘Eüľâ{‚řlÉő_ AäŇÍń kv’ě÷mž–mĹy<::ćún„pĽŠ –Öņ°J¤p“ŞŁ1;íř[¤qSDŻXPPŇXy^âéŔŕŘGâ°ěXu˕3€iůykxAĘ˝ŞŇš„ZœăŕĽaĺިč—k€}ßÎ@5X†ZpN TB}‚řUČSPšhƒ>üđC!ĺ9 ÖőRźrwžÍ#łšćÍO _pYƒ öSł]ésýéëńîÝž#5˘ŐƒęŒIvGŽô6Řwć{Ă6Oŕܒ}î&Tî§V¸]~?X°`Á‚ťÝ^ö[ß0LˆůÉhIĄăRąhúĄ˜†‡#ÁoZ ęĆüŘb+‚űŢ͓<<ůǓ}†ëTÁ{Ť.éÓÎ Ó7í ÷íM U)Zƒ÷IFşQ/CîĂnÉ?2ÜŔj"AU§i•ƒw†#ýřű5B˛BčFŐČű§“TL(sŞ Â”ÍąÎyá Šž ř3ąPý1źXńű*ë*!XŇdđŁpӒ¤OÂJë#ŕ†ăîáEÜýnÓy•lr˜ŤÝQí~ăëí œšc ˜¤Kr„iož7ŕˇţţ°÷ňŽďK 4xWÎĆßĂ>âϓ'OčňňrGíç%-ż§ć3źý­ŸsSńÇSź<íaď¨ ń‰şžÝwÔŚ‘cŤ\ňwţí1ľ(Š4óűÔ ”h ŕ|Ű] ŤUe¤áÝŁqýŚPˇÉ•`–8Ĺ*ŕähs¤mś¸6jrŠWfx›j2Ѝ™jCSĆG¤§nzr›Ş×0öŽŸU´oËuž^0NÁóOŠ[Ÿë}ň9:¤/ă9ƒ!ž^2ž3ÜËq†qP¤7“ôa۰WПęćŔ—;Ń\€şQŐés&L(ÚrʞS|m¤Ój¤c{´ćýŽŻ”ď‹÷‰Śü9ĺý•6ŔsE•]ú},%i1GŔĎaâ„EUj6q+×C@s ]ľM?hŃ(ÂůęäůďŮ:źěخٙ–úvH*n“ół’‹Šž°źxö=ůňs^ž  ;X3JŮW;Đş"D#h4†Č†ścާyž!qČń7\¤ňłœĐšvŕ˝AţN˜ÔuľS7ŻiŞIŹ:Äp #ďvG˝ä)îg2Nh2IiÎŰzƒ4jđý\ý°Š4Ť+E,ňUJŤEĹ×JžmŔţLĐh?>đúó4Ą1ŸG$c,Ń5’ĎYş+7X*J+€_QŻB• %˘¤Őˇš'˜ÍűXQş :b\<í4ݗ;Ƹ>/7HehԏľÖ˘$ÂHÔ)6 “cŔ8ší…' ~4 *T‚3Đ'@4‰5îźvm˛UIRźŐv ~ńűW ~×DŒ3ƒ\d%5Tüݍ-;Ů'Fú2¤văOÁôŠ%%m*÷ć•ďwë•vRä°l¤ÜÂł“F)u ÷s#íLÇřjAőŞ”zŔ&#~śj‘ÔĄdœRz8r Ü{X`Ť„˛ŽőiŔÚmpK¤ŇNTź—úŽűúRŹÜ_7J2#ĐâŰ7yőiއ˘ń$Ôk”ŕ;I3ćďŞDBţÁšřžâ1ˇĎŚ…˙Ť‹kIoöş†rú`I´ľ¨ Q×+Â𬠬Ř/vĺŔvô?´­WŠíűŢî}Lßî=,X°`?„âO°`Á~&ŚчŇ?ý§˙T&u0iƒÁď5OÔ`ÂüÂMĆřH89Šą?ř€~ý'Žä‘<ŁbUĐj˝”č7ËŐt2&S2y6¸w–;‘żD^ćT&ëONNÄŠN'4Oh̃îńf휮N"Z,ŸCœ9Sˆă–Î/ʼnیÚ8ę#J,˘b•E:ŚČ9EęŹŘŢé܍LQ‡IœŢĄÓní0ˆ˝yM ĚuşšĎdŕŽHąäV†š Ú@%„•ĐRĆ㑴§ŚŔj%Q0‰÷‡?üA&őĐćhƒń/ţýć7żĄEŐŇYÓ˘¨¤í|ڡ۪ę(pEŇs/2ć{5E\4yžł”˛Z‚śîŘYëÄÉC]˘ŻͤłœA“nEkî§Ň/Äô‘ƒ‰Gô“¨SG–H‰>ƒ(/M…ÂÎeŽ(ďH!%Őňş¤‚Pi?䑎ô8‰rC¤ĚÚ:°bĂN|ËÎkľ•9nĄœ ŇŸÎ?TĽé(Â`<˘°đ=Lˆ*.bwÄÉ_ý^Ű=^Ł\x!ý&ŽwĎ­ĄN°ÝHŠCqL8c’őŽIčm™ˇm{[Ş™ŰlŤˆAÁ‚ ö“6ź‹ńĆ_BœLčÓO?•ß—?ýÓ?•ń€Aż?öÓŽúőŻ-żˇ ýˇ˙ößä÷Űń.ĆŘăńăÇ2~ÁńP*yů4{ň;Iĺ,X°`Á~ňö˛ßüžŸÓżúý+ůúÝßý˝ř˝ňRŕ "Ů'ă˝óč]ú˙Ť˙OŇ%ô×őW2‘ˇo7 >Ź%˘m*˜Đě0ŻÖr›íŻ÷„o˙ˇ'â żíeęßŹ ´Ĺ‡:Ť`Ý0—‘x3üö„}ž­ĂĹ4đĘ:ľt+Ş!^Ą&q¸ý-Œńnśé܆őâHŔ0Ąb LxÍX9"Ś*(5ŒŁUýő  ´^­ód\zĽ¤ŸÍڐz÷Ą´m™Ăň*E7űŃNăˇŔ€ŹWüApß@Őjßzbßk´\đž#M˝†tUHمŕVŕbŔÓmç<ĆXĽ*UŔA ƒ"Tw(S'ÓŞ’Œ(ü e˜‘EŮ'‰,6rë;˝iQűG*(´cš 0Nž—jł˘juEőjÁˊşÍ5qc Cá&ř¤ŚkQ%Żë%%őŒĎvĚXéˆŰuŤŒciĆx•,öUí ĘíqS ŇR¸Žm…LŇ Ôm:| Y ÷ĘĎ׆űײe-yäj^—´Ú–\7ń˜ďcŹä)u/ X¤$(éCýˆZOlÍ}–J(uň,J:4u"Ť?/íŞÝ*Ůö)ßT‘ ő¨Ż+ĢvcEQ§‹š“YMR€íÜ$ŠťO-|$ăÔOľŠyŠäŘŰąUCűĺĐwŒ›qŠbŰy‘Ö6ę{Ďî¸ĺkl֘¨4ť€—Ž—ĎnlëŽgz ˘—ô}Í˙xĎÁ‚{k,‚ öł0?ö:8˜ ů2 ‰ŹŘq„ĎŮĹš8Q’Ď7Öh”X"SR:>9¤ű÷eŕżZ_Óâú’V•hĄrŽ$já¤5˘<˘’ą:Đ։Rft0ÉyÉh:Q^Ž)%uhZ‰ú ŞKĂçá…››¸ ‘ć\Ž8+ŠMGšf ň›i'opuŢś*.žpäťí^49F÷"őiKßRŸ3÷ű4ťó+J5H×5gé€'ŇĆŁ\ś1”,8>Ś{§§âôŤť¤ŠĚ ţb­ŞŁXçTm¸ŢÎ_ź /ż|LŸüńŞE!Ś˘÷ŢyW"A(Y×}qś 'ĎĎéŮó†ŽGDÓI+Ń8H[…ô^얐ď@P 1˝SźOöx‰˘—{qSťor\EßTeĚ0n­)eGů`Î}m6ĺű™HÄ":˛ ;úˇ8%âĺ%3)œâ"NŒ r1B‚#Š˘őéŔʈî&H3—f4ŸN)GWľĐdPŃÁyŞ%œÓĆtR÷ˆŹ˛kČŁŹ`€¤j$żzÁĺłŰDT—ŕüu˘ĽIä—H;ťh|ډGiÖ˛ÓH˘âĽNžŮúg/ŠáŻo ŤÍq›Sz3Îdť|;×!˝L)€źƒœě­ŚčęTš–Ń ('řŔíWl@@\Idžu@Ož|Eďźóˆž‰ms¨ÓVć8x­Á‚ű‰šŸ(ářwŢĄř‡żAĐšźź"éçϟ÷ >&)öă r6 ű`L5 ź‹˝‚Č>ؐqíHÝĂHęmT)íDV?o+o°`Á‚ v›í§ŞźÍćóšüŢOŔopov@PÁď~÷;Qűů›żůýM QÁ‚˝qŰ'ýÄ^䕟7­ţ(cŇş•I˙΁9ܰÇ/2!}ěÓ< ‰žRyŔÂcj†˛”1)Ťę8ásŠ­ŞŞň 2תMÂŘQ,Ş#žŹźŇšÁ8xo<Œc/Q$žźoŻJQ7IG ­ĆăU!S´˘ƒ1<ŃنčÓÂĐuŤJ!s°îGŒëśmŻúł[A´CüŮ'ýč8#Š<~;śůqż'řřÔżžŕďëžeź§Ž 5ě͆2Ć1Ç\o¸źoŃ&(;ˆEkĆ~P÷šş–÷3H? •|-\Ă+Ę8>‡güř۸ąxs‚/ť$NÚ%¤íUÉ ë‰hî÷CŸçĆšxŸîâŒnŮᥐ8šÉœń[ŤD›$ŽN°ËÖľOÓ2^o‘Şk,¤ #‘M7VâfĽK¤„"EŤÄÁÍäóÿǝĹ%¤żjŸŒř:9˙6FŒ/Š2Óę‚ڳϨĺO!ď@ÚĘ6ۊ°5BRČgŻełşbœîšž‡„碜¤ŚXóő7\P"îĘme‘Ş‹ńQŹC–Ž\I+”q{Gľ¤Ř’ů§0?ěG7üNXń_ Ţ R†hľvŕĄPKŸUBŠÂ‚ôY͒űćÂJ .>šŕÁ’>MxINíŢj;Ů1/ƒC!+‘É‚¤ŕk,­Œ48ŢöOvωäÂ*P+ŠJQĆ/š?qĎPŹűtŠ*Ḛë˝Yˇ";IűDƒŃȀIc‰öńI(ěU|„źˆzœ?-ËI9U T°äŚŽx!ŢŢr[9,şSň×đy1NůiH˙ńUçžŰ˙Ł4,X°ˇÎń'X°`?3.mM]WôůŸÓůŅJ´JţčZFj’o<čSuž)!˙đůĹcĆŽŮŃBJĚÎÁŃᑌŻŕtń$Çާ˜˂FĘ#ĽZ˛Ši6Ó˝tDśX‰âUˇ`Ç|žd_uĂĎ;đՂ îXëÎĽ cŔbą.¨9/śRË zwĘ}2“ Œđ쵕d"œáşîÄéǚů„ńhD+8Ęq+ŠBˆČA” ˘e¤‚ í9‹Ô§ {­ťń1řźíhłFˇľ8ŐNB›QŠúŞ„řƒž,QgpĐ Ů­zMҞ!Z‡ßËŐ˘Âľ—y„wÚF"Äśe0ˇ‘†Ÿ;ˇČ>Á‚ű™ƁH•xpp dź_5—Fc#Š—_×qÖ˛W…„üIČKëňÉ'ňĆ'&Vą/ţÖ÷~ݟ÷ëyBšŻ`Á‚ ö*{ŐoHŞ˙ń?ţGzŮç˙ď˙­žQ ý öÚŤHßűiťď:ćk_*ĺŔęf'X°W÷ńL’ ÜS~v…°'ř…­…œ‘†Č5G™€ĄaěŰTͧĽîËëoݎj4ĐŃ0ęÝî–wŻüUCńçę'‹‚2gŒřúeLłŠCQŸ 䜳˘Ą/7–‚Ü fDłQK!<Ý$ĹxLu_ńǧÜÂý/—+IIŚ˙’ň R§Ń %'!ȸ}ű˝ř–ŕĽţ‡íÉF¨OŸžŸXŞA­!éóFşŻŠÂm8АäcčîţuhgűKŻv *2+ĆbtÉX`Äx|ÂX{7šmʞH¤ĄJ,j;”5• ÓŽŻkťD0y¨ÉVEtŽťŘd#ř˘JĎÄJ*ƒz*°F%ʁ”–85ńŠž— ˛‹s˛›‹­Œ ˘Őďx(*ÁŘEE‡1ĘŚVœ5ĺ~…sQöqiźúZ“ôe­’ŇÚZ*PžĹtá&‡o:B Ę rƒŤíş˛˝Táˇ&ü›ŢŢş­SüA&0UQü‰4ú—3•žâOŰ âÝ „dDÇăş  9Žœ˘Ň –í”8b’­ ¤ÄK„:1ś„ä}#ęňĘÁŠĘçnŠVřTŞ:¸Ĺ]‡üđ]Đ+ż‹*ż>#^5ĺRu-UDB0Ť¨ĺËŕĄ, D­8Á T@ନŕŠFĺtę Ë Ű9D˝cgi‘F=ď;ďqfTQeŕäžöpľ"yMŰáG ž°—‘BńŠŘH{Ş‚wő-Eý(Ű×ŐŕpŁŽ)HS‘ŤO(eě(Ďç3ş÷ŕž:đ]2MG•ó2Îs:d2ë4÷ňâÉczGŁT”‰şV.D€ÁЉ“­ąrlë䝝â¤nSČ榆ćP_ˆ[qřf•$˘ˇ×ÜÚËÂý4`ë,X°Ÿź´÷“šŢđ>EzŻá÷Ąy€ŢŇĹĎ7üÜߡGZ_ÂĘO°`Á‚{]ŰOôm Š;çĽ`Á‚Ýfw×^÷YŚčžË“ÎăAʤýÔzĂăžÉłL˘qŠ–ý5ˆút>űéĆś8†.Ü3Ö ď ÜM¤e׺ŽL;EPeŠŕĽŐJą(Ť)ŕ‘x†'Á€„äUrü‹çŽ{óqK­(|Źé˘Žč cQ†q×ٌqŢÔj lľŞZşd|ďş´˘ř#¸ ăZ%cŤŁ¨Ű –ÜÖP_ĎCŐŕĸ?\\ƒąJŮŰƒźď  $ťm6ŹOUjW<uáÉ=HőÄ –ü5=v„ż‡¤=×K”u*đo•wÖH`Œc­Đ€Ëť´MFT\HE)ߑĘIŽS%€“ȇ[Çz´ľҁřÁő ?Icéł8–źá”ůQ „e!$Ÿ†Űs–1PĐoątC?PI;˝Âż|UE"1eÂô‹¨đŕš 'F™jţLBŽj¸˝×´Ě—xœÉ˝Ç剐ĐZH׾¨RľkĆt7%uu§ďϓĄÁĺ‰dţ@|JGîC†ŕ§u˸qܧ÷2˘ýŢ*ńďp¨_6MD Ž×đőšo—˝r­uЏ4UՂ˘žř#ŐĐ*‰FSlAŢJ ŠÎÄüi„€DR˙JúiŠîŐD1CýLÎĂŃ$—gΧäöĎVěÓĽř4}F–:W^áëëšŰŽ:\ô`Á‚ý,‚ öł2LÎüáP…gHtr|B‡‡’’ Ž˘á˅|^-74žÎd_¤XOĹŮšć'D÷Ţ?ĺçTœł“ÄŇ);Đ~ś^Š‹sbP G7I ˘šĄ5kźłćŔ^Úˇ3ÂP÷Ν8CÂ:hÍGv&Ęd‡óWŐú))Ăxŕl[Íďź—ę ƒ~HmFŽ´2J­8Ý?„mĺz_1p6ý˙ČiĐD—ŕÎŁ'Bż˙ţű4:žÓ˝Ţg NɃ$Ş !ńż)ˇ ö}üůâ@ѽӌW !…ó÷nţ~o­ž‚Sˆ{ÔôfŰžŕëOOOŮ9ŰPy˜vAeCýžUÓöÇ&&aL!QăĄH>8×1×Ď˝fJŃzĽŠM2KůIŞDHŕňńPôAŞ*D§$>Oć#˜Ô Ż]Ä×hœŃÁü@Č,xîŠ •ĘŐH unôŮtyľPbž>T˘5çó'4Ľ…‚ş8źwOÚuÄŰŢVPZów=‘É/ĂđŕÂýbńďŽŮ|ĆœÇ~°őˆś~ď˝÷č÷ż˙=ý÷˙ţßwž÷Ą˝ JŒ ,X°7kún˝›^ýިî`Á‚ ,X°`?{]÷>éÇ8<ńg?Ĺ×~ ŚoGwél˘-@€"%6$üe„Ŕ8j…3‘3Ţ9f@ š„řĂ“ęłšŚ ťć ýoŰ0–„”^ś-ɔDm™0–ŠĘ@o"§äQ2Ţ ĹŸ<ŻŁk@ĐqŠ@ŞÖUőčF}mÜx{ăJ— >śđů ţZŘŞâň˘ąô‚O˝j•tÄfšÓY|%Ń EOPžŚWŕAĽŚŢŚľj\ŕŚţÝ )ÄŤń rŰŚtńűh0f'çĹâŐE­Őëů”aS&ňŸfëŢ—ě^ŕ` jé%şâwöŽíŻă’ˆ”K śÇö &ŮŞä€p‚ďýÉČ"QWn¨ŠŹ(ä¤ÓÝŒ´Łd3mDr§j IŻ…ŕÁ8)ůőĂť¤PyęTýÜ@ÉŞšĆkAg۟چńČՂOˇážĘý•ń5jJUšŮŹÉ)ŮA”Šď”@äďq˜ŽĘś˘üӖ(_!Ďˆ?[_pkč—uŐ1.Ş)ÄZƒ,[CŽüěMU-ź[óuwţ ĽŸK ýN L`í ˆ3ŇjŽÎ¸žŠNĘd*^ ŽŁ6Ą¨ć§–ŻňQçą?˝‚ęÚXD˛źż]™'¨<'ąn¨’óYGüŃsăú 7;ôI§ŠŻůů¤Ę1˙ ˘D‘ů:7/Á7š š¨uĄXú É~¸; ëä9ŰnŸ+ ‘*KEĄó8P`'IýWťgÎJ惖+­vďŘĆÚ݀hťUűqÂň´÷„}K†[š;Ö ,Ř7ł@ü ,ŘĎĆ0P„bœG/á˜ĺ9Ýť˙€Öš 2sđß ;ĄWźoÍß7ë•LÂĎ懪 &0ń1°Dš¤|2ĽůÉ}:}¤ůžß™Zzp;9Ąl2a°FhÄ|Ţd -G —'k >IIT‡xô[6´ŮTT+ZĂ}vœžŘE’ŔIl­ŐČ!ł •gÄG4°­ °U~“HF¸lľcşÓÍąőwÔ[Ÿ^´ÓB‚uCĹő5UÓ)U“­ŮAďę´ß.R¨Ţ9‘ČÍż Ć~žh{@6˘ČÓs$ŰTŃŽ'˛Gy@"eo,KŹ8é¨ç8j(ÍbOSŽ›œF›N˘>ň r?$őŕFČSüÉm4{˝ĄI6Všg¤ƒ?Çm‡KBâůŰ÷ôđŔľҋĽT¤*ń\”xŢ6Ňśh“Öƒk[T~ř>l§ Éh™Ö;rY´?żY–ółĽĎ ŢůŢÍú˙í:hCŻIßnëhKÜFű@­JIUÇz:}@|řœ ąÉ“şwîë‘fćŮłg˝óD"ő2”~Ľ?3X°`ÁޘYť?…pˇíOî ,X°`Á‚űń١UoźK čM™ě%g\a č$śń‘3xxŇtÄřĐ|Lô`NôáĚŇaf]œZ+ Ë"­éœąĚĎę„ÎJĂ8fKeÝRľ"Á:´d]ş$¤’´` €€c!‰şy5›Ś,+Iâ>­ŻO‚‘…4E<Ŕ1‰_ńqOÜ&Ę%ä6XŒ\Ť„ČL§ŘhT-šŒîĊ¨wGNŸÓC-9ʨ pZ(ü ĹŇł›R‚0‡ŢソD‘Áv˜D!žŐtŞ.Eͧk=‰‰úŔ͛*KžýUímĂř Qr pGøĺŞđMŃŃ!_cDőj-ŞúV:“ś‰pn„,ÄW%rą˘ž,EuEvqFfł”6$×!™‚;nU nW‰?*5ä§şßWČV•‹Z¤[PuÝđm–”G­´Wd€ŮŸaô—˜ď'ŁŚLiUu´Y•]v4™ˇt|oL1@ŰúąŚţ"!ňđ%6T¤ż´žŹÇ÷zĹĎŸćŒ'ŠŁ#ŒA"äÎ źąáë´NqGďdKC°lźJEľ§ŕçşńçÚyOűíűP̑śu2LĺÉ1˜ˆĺ><+x`[ăHDFS€Ĺ&—6+‹VHPZŻ=ĺnP]ޜV•ľ0݃yŽéáX°Qy.¸Ÿá~‘qáĐáÎešŃŕÖHŐňĄüU–řúo+]ű!<źu NÚÜf;ż"¤&woĂgŔî—uďyŠüźyÉ,X°`ßÎń'X°`?K“ŽÜfŁ1Ýřˆ˛|$iŔŕ`Ţă‰t}ŔďŘąčŘ);˜ä4NIŮe’|ĂEKJvÔEă9Ý{ďt|zŸ>˜ÔôÎAJóÓSJáďđ˛kÖB@Ęy 9a‡FŒ;Ž caƒ8ŠH^6´^WJşFöęX'öáL*w†–—˝žÜŐ ´âXJ”TEČŠx2‚„[;ˆPřƘνpŮw‰?ĺbAËł3*ĆcÚd ]veŠž[qÔëžÜ’ŢĘ0BX‰éŢä@RŻ‘ä÷$š`L¸Ây`_ĂŃᶋóŒë%ŁhŁ †É"qኀäňÁ/ř¸ńŠA+:=´t0]ÓßţöˇT}^R]ü?w‰?ĂÔ_>ށv7ďţëWÚÍc”¤|öçFěŕž]\Đĺ5÷ŒĎ>c'n­;đ!QF8ʈlŞjÍĄG⸨Ú$aŽś6äÜ˙ŚăÄIłŰ“IŠ5žĆ4š°“*RA × ÷ÓÄĐPr٤\§üL”ȡÍ׍%ĎtĘ}šÇ._ÎĎÍ|:§űôđčHű$ƒ ăQJëŚE&˜žxqÍŘŔˆ>|@i”s™:!1ÁyamłŽi:1üĚ"˝^$Ž›DźóőüŤoa/ÜěÝĭ΁@Ö=dýmĽHP*'ą­ _¸Ćšďéף_ÓGý‚=z$Ę>0ŻŘäI<Říçő$˛ČŽřăU„đ$ĄŻEü ,X°Ÿ°łĹéö#§_˙Űš×=>y‚ ,Řwi_'˝Đ}żbA°`?Wł.Qěđ tţxŸÖޤ6˙ĚĹÉvzhˆŁŒKF1˝;‰Ččý#˘_M+:ÉSƒR¸Č6Ţś)=­ř~7Œť-;şę6tÉXÓŚÚIAđ?ž˜o˝jSţ.ń'Œ_ ^ ‚ÓśŽÜâpÎ f‡#7áˆ?źž„úO¤)ˆ@tPLD•Dd>”ĹŰWźŽ~ÖšűvË.”çVş3%ő 5Wáˆ@[ĺfOÜáǧ,Ę4P麘Š"–î#ţ욊Ű^Ú›"—IR]šţaĺđŕ—œ—ąiŕ?Ŕ†úţ4ůE9ŻâŹţzŰ˝űýo^Ň”‹ą đ"rLőŮ))Ajé˜(=d<}˘ĎBÇe­Żť,%Ľ–ÉÖŔ-ůŢAŠ<áDűŒ5ŞŒdk(ßđ=fc—aL’˛F×[Ĺ= ƒžFTg餖ą6Lt›ş ׌ŁVkŠ€—ńąJAHgŐT˘ź/Ał ţěqŘĄ#I˝˘‘ŹkEĽŞ<-ߟMkU,Ú#ýčţ 31BŰDŽÍřZ#;€ĄQÄsyĘeS>U[ńłQńóÂxv]8uđî@üE"îG1Ż_ň3ŔĎRÂĎn›[Ę&üĚ •H58[OúŇy‘žHŠ3#ĺÁ­^5"°ÔÖćFOŘŇ{ăÔ FŰ÷ 骑ćD!¨Ó罕ýő9)HӅYIű…y‹ÝwáägČĽŔŤD)-#ᕠÁ ÁŘ܎^aXk]ÇňAP)šUR啵ŸĐ´ śvöW”w 9Âő‹“şQş—ŰOPłsÁ‚ ö&,‚ öł0ăţgh;Ŕ•Gň"Š0˘ ƒÁtI%ň‘ÇÖ§ŕÂgĺä\łY)J%‘‹°@.éq¤Ę#ÉxD ; E<Č?Š–4ÉyЍTEQÓG_x‡œB Ž‘ĺˆáAjÍ.`ÓȎā3”!\œ?Ÿ7ÚéÎú{ó*"sh†1]Űíŕyv‡šň]ŰíŹ"ŹršŒÇrOëՊ×Ő˘źë$mYÓG­xUÜOÂNB´Žh“.Äaß\Żhůô‚ŠŤk!A^ŃÇWK*ÚFVc!ăôiÁĐcUŠŔ0ž}\˙°€ˆ ¤Źšdš8ß*˙jšŹ­%Ÿź%Ł8I…ŒV1ř‘ć Ůižx;čˈŽę"ä˜ aMžő†ň•꾋H¸och´lÖɉg˙űpÂ|ř{7ŘÁeçż3Á‚˝)f,ęᇇ‡‚Âŕ§#:”›áÇ˙PğWŮxÓ;§Súőý1=|xJf†Ţ1ç4Łl$YW‘|Ę-đßĎW9-S%ŸŹŒŰ”­Ü/ XQÍ/ŝşž81&„şň˜O•Ľş"Űw–O™.çĂżˆz…OmSkş+]šqŞF;tŒ[ćÜ÷‰G­#؀@Ä[|eHâňřëP}Ä/lóYňąĘÍŚěýÄăTɁŰŸ–„sÇs Ľł].(@KCă<>üÖśäŕA>…<SjÁâž˝mëgoƒ2—Ăľ˘žLgdŚÇĺţĄňS-Ş‹ĽÖŸI•ćHIvŔZśpcŕóRtU| •Ž ¤˝jŠR~$0”ńSœŤDnÓĐc‹4čoˇšÜÇËlgűöo´Q ĽĄŚźő—;tsęjlކVŒmˇŁT{uށń˝ ăĺë–ęŇĎSpßěâ^Ń_TlšNƒ A:,¸ďmHˆ?r}HZYĄŰô”#ĐI=đąEŃQl íŚÔłˇÜ˛Ś`ëDwË~"Mľ˛\?ňŘĺś>ßwÉÍ!çĄ/*ńÇž´ž-mçT€_C•ˆëw:JŸň }˛—SÁGyAÚCj>Č*pX6ŰĂtş•‡3 ,X°ˇŐ P°`Á~^6´EžŹƒÉňMŃ;Ÿř{y}Ą)Á܀űbB=Z\S>߈* “p¸ ń Ő 8f„‚đ “ů‘ĽYiŘŮČžÂü’~\”€"›ń $Ţq›ĐŘNČJ^ڌZ‘Ձš @ĹŮt,˙Îşš‹J٨űëĆĘŤwľ0pŚ~ ƒs€A:V”őNâ˘ŕxƒ$0ԓ¤ •”đ€}ąXĐóĎӗżýG:{ö‚Ž./ůÜą8ă>ÍRĂ×:şwBńAďô 2^b˝NŃ<ŚUýœűÄ:=‰˜y睱:ĎՂV—ăoFüy“Ć÷‹~ř—ů—ôď˙ýż§O>ů”ÎÎÎeSFzk.ďً´`é‚ë`Ň ¤î/qšK]ż˙Áôç˙ôOh:;rˆ*ůž~r4كůD"‘6/ÎčÓO?ŁeŁŃü-îÉ?ŚO?Ľ)ˇâPëtS‚<ŃĽ‚@pÖQśK~ŢpMDeL& U­‚&”'ňLAHˆMV1´GmĹP –ďm´¤„Ű_ĽˇĚĂ=~ů嗢ćƒg Ď3Ţ;÷ů_r¸zËś@ŽCŸ0-äůüóĎEńgë|Ú>âËż—^p{ăšÁ{őńäÉůŽmؤ+,¨Ď`Á‚űšŰŔŚGźM^hşÎŢ ţě˘wĽęzŐ¤ěëŘĄ&ƒ ěÇgűďîŰŢĺ7&"Ăű>X°7bžŘ8GGGňˇćŸŽŞiO"y $›˜ą!ˆ[¸?‹č×÷‰~ó(ćűˆé87tĐƔwŞľ¤˜ďZ§bÄřŰi›ŇbĚccŢw]=ĄR2ĆE÷řĽ*”Cá†'˙ă­ÚÇ>îĄę1ś×ŮĐtWQ˙ˇ?fŸäsŰşąžË_eJ?Cťżˆ‚LŰ+ëkŒŁ¨WćqAË­Ř2°°ĂĂ#iŕ‹ŘěF°et`ÓAđ‚Ü€ ĄoĚ犏"¨k˝ŢhšV’€UŕÌ'ůž^Ż˝˛IěŇk!řĎăuyBŃHp3!Z ˆÎ쪸ěţąß?śŸˇ†6ˆş X8#Ý#fü)9&3>˘ĽÉœ˘暞 )Ľl˝uÓA˝Éˆ&Œq¸ś(° Ui„,ăČ#%ă]›㜊]BřŚчë'ÉŽƒŠţ’÷[ó1xƢmkŸCÇu ăüb „€G(Ńpű Gôj?D7Ů!Ö;ZĹí‘~ŹQűČ߁ő‹Žé­œ˘ °N.ęzUIZŽ,ĺúHOUX:jkçĂBAÜjĘ,ýď„LŚUǟP¸/Ý§ŕ‡Ş†E^ŻÇP;˜Ŕó!͙Ţk䜎ş| q7¸o¤ÄR|*gPęWňTńLHŞ6§žImDBúÚOçóëÝbţŮS+Űż',cÜíŚĆ,ŒźŻ$ +—’ßü?Ł„Ď=ásˇHšS@;łb‡™ř–÷MŘQ@ú(d6YÓdšŠV<Ŕ]Ёüś  ¤“œf<Ž?eôî8§v‚üŮk*ٜ6ě\—ľVKvŚËÖ9Ű:ú%?4őŇvŰ^~g3tÓö]śďΊ˜ýUĺ+;9›ĺŠVě ŇdŹˆČťv2ÁÖŠ<ŹDŰŔąáţ‹g/čěů ú뫅Ô9" :ČäF-eďžŇť>â6M%ZfÎ4”™@„9ăz˙˙ţŐ˙î?ý‚>üĺÇtt|D9ˇ3E|ä4†CĎÉáá§Üf+š\ŇÉ –#úĂ?8ŢőĘ5÷´ßIMm˝ZڋA‡QA ó4ˆé\4üŚ8Ľ.J„ úK-˛ĹŮŻ>œeôKŽ›ßüâýه'ü}"}Ţ:§Ď÷“)÷˝4iš\0xpMUąa˘ Łâő%÷ÁźKiĚÇÜŻ!§Œ4s?c( ÖƒČ`1÷ft0Ӕż ÷ő&rŇj]Ňăë’ÎV…8]>*j:›Ňáń~žŘ顾Dütúˆ€ëD2ÎT€3 °N}ÔוĽ[=0ŻYýťťFĽÔ;׀@ORpՕŰĐŻ%W4—Ë“pćň>a ¤ #„*•^Îó ÍŚ3éűŸţÝżŻ'Ç0ô)˝„Čç€!ż€>˝Ă ’śůˆ˜”pA $yŐ3öxrUB‹)X°`Á~Šć‰“űéĄňÎÝëŢŐI˙ť5<ß~ş†ádĂţúţŒƒëŢUŢŇń'X°`ÁŢ~{šR˝uŸßťđŞěŮmĎü|=>|HżřĹ/Ä?Ž˝ď?x€żý0fÍ*égÔmť14ŸĚ藇†ţůqE˙lZQf7”1ž“ŘJökŁi5-;pĽMÓqkiĹXhˇT$†žbŒęş‰…ücy›TYŁkźJ9cŹŘQ-XMd˘AŠr+ę!ްáÂM´ŁĚ3|żíŤ#ďn(Ÿ ďĆČýw~!—îÇ*/Č׏Ź!öÄ|&™¨” 0łuŞěŞ$ÂńdJ}ô}řá‡̅ăţřÇ?ŇłgϏ6óŕá#!~|őŐW˘úŁřÎĄźgg˘úƒmG$iÄ6ŒŃĄ˙źóÎ#îK‡Rŕ=ăšÜžo3´Ű+f ˜ěŸ ř™á§­C¤‘ßv՚şr–c–АP RRIžŹF>B<’Ůšű6cs(“Ë‹ĺ @}đ. dbˆzĺýž?şJʒUĽ~ëÔżu;B.c ¨cÜÖvFr ˛üö`×d9ӁGŒĄ^Ó~Žbá,ĄŤ)őÇ*)ľŠĆXä>;>’ô]Pňń­>ëz đćŞjřY¨e 󤢽…ς­v˙z˛ €h÷ď`Á‚{,‚ öł2 v‘RŤFş Î:•H#30đî<‹N;qětĽ˜ Ł>˝VU—Ôđ 5ÍbŞĄPs}%űĚĆŁ~P)d€ŚâAô†lĆ×w”ą#ƒ^Y4˘˜0D´ŐZí|Ĺ4‹„ŸŒR:žćôŸŻN ćĄĂ/¨I"ú€Ď Đe";ąßĹϨÝA1n4 VĄ!]Ű6ę°J]FâČv&ĄŠB,Půi:#Žđ4íčţÁˆ>~çýé‡čOß=˘ăšĘüś[FtSűűt`^iÉd>śČcۈČĎ5X°`?MŰ%ůZe Ó ě›ŽŠOY ŠŽÔ“@‡i‡ä"˙ΞM2ý.ůôˇĹ~hâQ°`Á‚űć6üÍŮ˙ýńża°đŚěÍ|vě e7ҧƒčs[j%` oS:n`oIWӄń“iJbzwZŇĂ ĘʅŠŸ 1 $Ć62Ć;G]BFo*ĆsĆŔďŒ*{ű%—DI˜ŕWUg+Ş4MÜŞZŇQÜŤý?ÇŠnîŤůHöˆ?ˇíÓßßŢ126ÄŘ-ÁÇĐ •O¤˘„WqAUˆ*˝ÂúÖˇ€hĎ˝{÷§ÁqřŰ߃Žç5y¤FcÜ ëáœœ Ɩç#Áw€iÂ˙&ŁQާťŤßí`śž^ňąƒŔI°^FQ2•ôcŃěƒŠż 3{H–ż×͊luĹ8¸Ž@i+ĆÂÚJż§jÄřĽq>—¤ľńV™UiYz=ĆÜízÁ;AÉ]I+R˙\ŻPg°’:ާŤKms9őV+ě—ÎáÎşXîŁ —§ƒş>duŹSűéčíDßVRO őë]ŔęÍŇţ&KD˝ęO7ü6˝úŒŢó@Ýďň(=(DVČr.u]§¸˙­—yăŇ{9béźGŸć UŽƒŠŞ{Ô+ëŕůź3ý–›KđeĺŤN—$żFËßÉ=¨ş•%ëČ?ŻšŤŽaŒs0ˇaJşS śƒzSŤ×ˇBGqŤĎ%Ҝá]2LłĂ6í÷•іĽ*ţ(ńgęě&ߨĹ5Ăçŕ6šŤ0ˆ ,Ř[fř,X°Ÿ•Á*¨ł˘đççáŁwčôŢCYyՈGtiŹN¸H°’F` ˆ(DäÄůXŤŃhJÇ'cŕ"&çmfŮÔ´Ř,x`ŞňŠńiż–4ŽU†2ęnOᕉŕŔ5ŮąLÚ–—f0ř§mŠŽŰß}poť@ú´"ŸĽ˘,óˇ6Ÿ¸7ŹĎúďQ§Ä€'PEd(ÚNôŐâšâ'_‰Ô-œeq6ŮQ„SŽЫŒÖ˕´-#ho´#öő‘űŢšQůS5´ÇÉÉ)/ńĚhúŹL”Ťb7Š(ëŮSQ ß H ,ž€yĆŔÍ<§GîI¤((!ů>S#‡tQ9ł"Ęőő%ýă?ţ#}öŸp=ťt[V¤eWW tt*cœ˛Ł•:Ľœ€Özc´ˆGÚn^aąXѓ'×tyyI—× Z4VT‰ä9ł ]7F@hƒŮ(ĽIŞůťąÄĂ?]Ş5"u"='žËÔä”ÎżżIRô7DRů<îÚ.Ž8“Ü3œô@̃ä݃6Y­–ôüůsQĂy?~LŸ|ň‰ÔŔAƒˆűřăĺŢЖ{ĐŢ>ŐúăPŃç”ű& ĺAßPň–„nëŻ,Š”-ĺdŸsyđ\ẐŔMó”‚ ě§dűÄMYé¤đe `_ĘyÔ÷Źž3ńłw¨FQÚ˘ˇť?Ă2ů}†öśnń'X°`Á~źvŰďËmöb#‚ ćĚ+cě~,ŚÄĽ9/ŔyčTŢžŁU…*Üě␞0 äUĂÁÖXh¤ę™PVŠťśÇ‹@ŏhKÎŽŠ÷‰óű)uo „|ŮşÁčúÁšĄšÇaý}Ŕđ)ÚD‘Č)TP¨q$_Fř _|ńE_~¨Ľ„„‚űH"X 0 M?ę˝đ)¸ŚKĎ%Ás ”Y2Á4$†2/ňeCаkĆÝŕŤŕű ¤ß•‡q™˛“űD÷îSК﫸ž"suNڏҁ)śƧŠšsżJr2PőŽ:Ĺt)§ZHO]Żź#í‡>ƒ€ČhE%p/¨ńq¨ĎŠÄšr×˙’CUQ^ęÁKž¸M¨ˇăŝH´LŰc÷Y!ŽŻkÉî>ţš^i‡b—zjx¸ÝéWŰg‡ÄUŃńÄ%§Ú*é뵅¸&D#ăԘœď RRŸ9eňČ—ĚőW99ݎ˛DŽŸ,—čGݝc?+ą}–Œo [čłÂQÂ~q˘sÔ÷żíü„?ľ”ĎDˇűŽ%ϟQ!MuŚÄŸaŸĆé4í^Ý+œĂđźŕy֍g ]Ňœš—”&ş{ź¤ÁČ>hčű߃ ě›X ţ ěgb**Ź­ĐɅ$Ä;ďźC§÷É Đ;XI4íÁHő!%W0ä#›ÍšRޢ4Ńx4Ľ; ‘ âNœultČI[ňţ+ĘZCcvšMfhēL2ĽîeelŹN08čp’Q›A¤Ł”:Zvś}PŹDaĽƒ ŚhzF[gĹ1öŠwşm¤†cő#.˜đ0QůʍcäšFdJr (G:NLďpK*.Ţo>›Iş$D՛BUœŹĆ9-ĘŘ9˘ääP3>$nŔ†N—Ę–ęĎdĚu=Ÿó ÚyIÓĘ4%ęĘě" ó@ľçęúZœܛ¤čätÎ>÷::>ĄŃxÂődišŠDŞxľ\ÓâĘÉKóů@ú9;{AŸ˙ţSúęóÇT_Ż$꾏Zşě*†~¸n#î2Ččrť î/kjoUˆcTđqiŞ4W‹=}~.RĹ×ü -ůřÂ✍Čý’“Gޔ ÍĆt2Inršň¸Úsv$‘ …oě˘eˆnż¸iß& Ă= ĆřhŹ­ňN$)ń݃1s—sňÎpœA½żxń\Ҩáâϓ'OÄE[áIp7âł-ůý÷“{źĚ3ʂ÷Č:řÄţ¸.ÖcRß=ř4LCだ#ŠI.ŞŔ$ÎĺIqňĂöó`Á‚űŽĚń|ÔŽŸ{n3˙;Ű?ÍΤ„âő`îţäÂ0ĘŘîŻ{›,›Á‚ öăˇ!1ՓUýd™FÎňŠH‚ öíĚO8űŕ(|ÂĎŽ!˝zäŰdŔ]"(o$™,&FšĽ”ُ˜jog둮¨…r´U͔’÷]ۄ|›Wľa“4ő<šń¤ĂWUD•Bp>+ăk#ÄU×ܒuü÷á;kH0Úˇ}rĐţr›‰6‹SűQ‰!_![Ň&uŽ|Љ˙ЊrźW—îUFÖźeŸ Ňj•ŒÝN)zĚXś/j[^/{ÂR]_^ ÉĄX‚éÄ&ex(×g\ˇ`Aו×Ƌşž¸Ś‹ÉĺiÎXoMgçtńâ\‰Œ]ŻVkí‡\6\w{y~AuUoÓÝIvŘj֘ë}ú­Áńč')céŁcJć÷(›0Pِ­ÎÉ.Ψš|B´xĘeá*Ş;NYG| Ĺ` ߯éFÇ2şF[ĺŻöăÔYĐęŠlÉuQrEú¨|Jшąe€@ ‰Ĺ Ą"ďŽ@hijG\áßDŢjć-Ö5>5—'‚ ˙ś4ŮiG]|ĐŁČkű¸>eĚŕżrZ¤‰Óýˇ¤×w}F‚ţoKCnŠq%ƒŽHRŚ˙7 ŕ‰Âš`xÇřŞ~•řŻ)?_cţ̔ˆĺö$Ď$\͸/ć3 ßš˘{˛ůO˛îö]/0Âň“úă†áëńýnjá§1㎭ź_ÚŽŚ$ĺkę´ŞˇşFú:Gż:wŽ$ŸŸërÍ@D{ś QŐ—Z‹b!÷\°ď˝,¸nS+Îâ$Š%ŸxS”Tó3śiAŞé´Œi~XŇaĽ ÍÓECçk>–ׯę”6Ü/ ¨PľąSׅoBuSÁŽŮőjI‡ÜNXš¨“ž%vF§Œ'˛ó˜ÓxÎN2ć6‡çő‹ąaÝ[üľoB‚jŢ`~ýë_ QĆŤęȤ/_¤yŕhŚěÍz2ŽOŻő‚ŸßłłsIĽ†wŽ'ŸĄîýą>" ¤D€ öBWꁺ΃` ˘,؆<í¸ÖČťM Œ>ňËGˆá:x xö§ú§rI¸/܋HGsÝç㌂ ě§fĂÉO™x0I?šđ˛I˜Œďœtž‘Ýd„'|úHZOFűîGĂü5ƒŞN°`Á‚űŽME40żcříňJĄqôăS% ěÇb^ ŘŤOŔ‡?˙ś‚ŤĆV(͏ąŒŮXbt”Ęh,ۅ``rč:˛śŒY%Ë\1.÷ŽčiSŃ3Ć|žUŒM ×É¤Ó ÇČ+fh %k[MÖ*šFÓ}mӚ•5‡“űĂe8ŢŢMńÓî({­Oßĺ’GÉäż'E^ĹEÉIC⏠ĆđßBŘhDáÄ}<KîÜřţţćo$Řʓž F#™ŒI&+ೖäŒÚJJ5+őq}!Ř1}đţűrüůgOĽďŻAdBOž|*¸TÍďôóót&Ž­–÷tţě…SŸ!*ʂ6‹•`fCdPgiŸŃ`ďb=ŘÁZIސ}@Íô”j¤ şřŒşĺY`ĺËK˘’?›˘?\s(y…%éadkĆÖ{m#Ck%ńŻě Dň :÷Âś¤¸ŢđysţoN”1^Ču&Ş?Ď-.ŠŠ[ÁÝ!żo] 0# C6›M¸~¸‘ňKH,˛ 1ęÉ<UŸ;ëEvm] ŽK×%rÓŽ_qSóŠ›hË%˛.M—í¨’<مú:‹Ľ˙ş~Ű_|Ű<ҋŹĐëx„ďĄBiššxQößOGŠÎ{ؔě’ç–¸NŞJ8ާÄ+}}_ďi[šzäÚĹć4…H]?×EßŢă ă¨ʐ nvA.rĐg}ŸŘÖ%m =FÉ?tł}>Ąŕ␔­łŽŸe„XÂ0t°ŕZP2’´dF4ƒÜü‰ułJú‰öČ?˝&аÉo˛â‚ ě­°@ü ,ŘOÇĚŤ6F<ŔœŇńńŠČ9Nf"‰ŠA'‘bÂťŠJvbu;§˜ƒ‰Ç&‘0Ćyżrł&“,DE¨cÇ d 8[HŮ3çBVŔHTŇ$™’f씌˛„ĆěňAógNAărßZ˜' ĹÝ5%íšéěô9ľW+*ĎÎhýě);×3vž%ß1GLZů<žŹś{Î/ŇVő“Z?č¨ôćdĘ4¸ÎŚROľäw޲ü•}ßIšČK’:<˜S{˙žÎŽŘ—h¨ÄnąS6aÇŽ„CMÎ!g/¤č˜ÍgBz@ZĽăŁcqÄáŘt]ÚOډ¤iŤƒË•ĽgĎě`§\Ƅ~HJ?îM[Íľěƒ]€tčk5-VkĘӄ˘<끐 Ä6ž|ň”Î/.$ʲ˛..);żŕűm%ÚĘâÜčłČ[^3ŕb͍îgČAźŢrŸ˘żňľłák,ۄŽ+K— ¨IĹtľÓ\KŽ7-­ů¸ŞK¸]2nk(4u˛”ŤZ~FKDŒavÚ6ě`[~€=% ŇđžóěĘŕO–S>+ą†wčâ);Ť9Ď>ąÇŢňý›řipBA AŸ@Ÿń 9^5Š`xÉ šéă¤'Ţř\ę’-MDą Ž:ŢA ŢÄ>X  „thřŇńń‰¤Äy‚đƒČ1>>ZĐ÷ j\ůÇű8? ˝t˛[Ň÷+ěăIBˆ$kŰC ,X°Ÿ’ 8řď@Œ°ďTź‘nńOţäOč÷ż˙}OĐÄv#ňo]ěĆCőŸĆÁ+˙ I?CeÁ×Içu č‡RŢ ¤¤`Á‚űńŢĺ(Č]jhřđ7đŰvŰ{ţ_ţËI˙ěŸý3ú˙á?ЧŸ~Š6 ,ŘëŮ_Œ‹Ç“xöźUBĐ8`l{› $`1×Ë5óäüŸŚkÓ1†Q˘0Q¤W6†Œ •U$ŘĆ5^0ćsśéxątŃr‡QnU|H1UňŹŻŚbœúy"ÄŻŹě?íÎ9Ě `Ďö˜×ţťĚŐ=Avă}ç~ěŕťâŚÔŸżO´§ČŇ8ҏO-4$ĄÜżŮ–U.°˝4ck1ƒÓÖ+ň߹ɉQ^9ś'ŒőZŽĎ)@1>Áœ3şfüw ŤQÁž‰9× žşŽ¸Ď­•Tt‹y҂÷O<ďƓNzÍě’~öł}|­§œ0NGůŮŃuŮ5–ńŻëçT_>ĄŽq(*V ZŽ„xÓ×˝t†!“Â1MŹbמéI-f¸ŻÓťâ;/Q×öŠť,$m’L3Psí:G2JîAŠ1Ňň”˛ŮďĽ!öý֌˝óöŚVŇŃžâÖÎn ě֕Ű×:ŒżëvęłďCÚmuńj>v bÓ+ţt7Scő­âžĽŰÜ5ă1tM3ŔsüŹÄ-Ow0.žó2IitjxúH?Ŕ”[ÁĂ%[€(zůy%ýtÍnz˛ţy”iŰ׍Rj[śm_ŕ(NšŠ˘ƒź|ŕ™ľ~6›Béw{š#Üxľ-Ó))Ëő;iĄÎöé÷đLnSÂĄœľ`çŔ8Ątż^T”•ÎáŘ™gřœűëş÷Ŕ­žđţ#,X°`o™âO°`Á~fÔńÂĎű|ŔƒEKăéDT40iuľ‡Ě;čĘ$<;ęä"şáœĂ ł bŽ5I.d‡Ć , 8÷Dbň|•Đe˝dGŽŇkç–Ř›eę´B•&5ŠĘÚ6‚OO@íŚÓÉŚĹuÉýKzţü\TCVćݑ€’Ň'ęHŚNN>×RGěć4vň–é‹ë…ÜÚůwˇkj2¤÷ҔDFˆhƒœ†¸=\/ € r%ŠZąŁ†É;c:qv$˝öSކHݤ‚sŕœ¸FĚäqQ‡pÚŻÝŹžHýžxÖŃ˙üŸ˙‹ţîo'’M臶!qœ>D¨ÖPŒÁPŋô—%×ď(Śiž¸ţKÚ,Ô%îwĆ}ö­ŽĎс`ĂÎqâÎIZąmŢv\ĄÖ¤ĐqN‰(BÄPk„d%¤•\Óty•"”ËGmÁqÜ@޺۪Ra2e‡ŽÔЃƒvq~A­ŠĘ:!Ú̎ŽŮŸ´Ň_Ži<;ژÁ¤ŐŠžP 9ęeÁ’ť<âúÎP‚ĎtŞ}DÁÍł d3}نýńÁz¨ř p?řŽş‚TÉ&“izybĎo~óéÇH%%"ŸâËO8c?Ô5úŝDž‡ ś=éÎ?çĆh€ęśdɓá”$剑 ˙ŹWľ¤Ł A”mwkEĘźR}řă›#ÓoÓŕŘZHom›jÝČsŐ9ľŸ•,˙ël$UŐ}ŹŤ+Ż6lŸa¨¨Öł ¤Ÿ`Á‚ý(,‚ ö3ąHňöžœÜ㉛Š@>cž¨ŸŒٙJŠmŘyŞ05Â6oĘeĺÝ9˛v>m@Š’Ië…RÖÉI‚XůL¤a#’öV-r^hMcšAͤ'âDÉ` ň cšry)SU< UŃٓš Ş–kZ˜sZÖOčřä„ňČĺÝć^—îŠO"FśQ bwRŮď2ű’ýĚKő'ďOŸ}EăßBˆ˜Li2Q’iôźq9ŠU¤łŠcćSIőôń‡ż šë%ák‹!>féźŽčŠA‰+ÓВËY°˙0Šr:ĎéĂűčÇďĐŃÁ‘œŽ@’D4łsFâ<-ŽSzţd$ůżúňš>ýä’^m’ˆ +¤˛R<'ěŒe‘ĆçŹůy‚´*Č/+”ŰŁCžď9ž5zF6 öQ_P8ř|P*Ą@ÔV˘Žu°XÓhšĄƒiI#>_ÇŰŕ̎Ň?‡i4ězˇőĚť+—žÝůěsľłĂŇ œFu˝âOĽ‘KŁ|$9Ř'Iú‚Ő|&ŕęĂGdĽÜ—BîA›TňN,€ & >đ3đ †í8H?ďžóŽQ6_\ Űń<á|’Ż›ˇĄŸx§“Ý=@a $8L`㾄xhßlŸ ,X°ˇĹ†`-ˆ‘ üü“ňOäoźg}Ź˙ôŔ˝ŚE)ůýyѧH„a~ đţĹť6$jâwĂż›żŽ Á[űž“mř=,X°Ÿ„AáĘĄř]Bđz% ÚŐ†?ßŕŻţęŻčü˙!N,Ř람 ń Á÷cFođéŞ??Ź!u#‘Ž(‚÷€dš†ÉŤůmÜPŐ0–ĘËl°Ř8âÔ}ŽkZCĺ™˙˝ŕƒ?_zş˛tĹXć’wŤ"‡ýEAĆp¤A&+QćV$‰z%JÜ$Dř‰ýĄęlHŹ’ˆö˙öcđ}Â`ŢH%Ýĺ ¨“˙4 4lƒß<ŃŔD[… çKşŻĆЎŰúŢCçŘ^§„œŇŞ1nŒ|z\çg‡2Ćä2ؒM%ýWľŽ¨^Ôđ:Ƌą_Ĺmł2U]IU]*ŽCťę2;f0˘ÂŽú`úâ‘ÇŔüßf_ÔĆď3\Ş˛ľ Ž~WŞpď!ÉîžF°8s`gw÷“UzNÓéBœ­7Ô­Ż¨‰o,W’F x&Iđb¤Ä,ڌ§ŒŰç)ĺł ™ÉŒL>RŢđ8¨Â#UX§+˝ž˝ĺEňJQޟ(Źi’˝;˛[rJúÂő ęÉC[•ŕI!÷„nśÇ6öűóތĹvPsů'KCľVźŘĐúEEĹĎ]\ń'?ÓMÉőŠŐÁŇ ‹P&äÖn5§ăď†A¤ ň”ŸOs~Ŏůĺů’.Ej–/hć4›#Is/wťÓ7úçË*Ř9~{Ÿ> –Ś{iäeÄ:ß& ýŒů™„PšĽ‚żNNĺoźôsÉ.Ô|fłšœ§Ş!ů€ˆsyy%ÎęýűčWżú•€ŕ°brŰAě™LˇJ@~Áó0˙ý÷ßďSáúĂT^qœOćˇyr‘Hl•‡`Á‚ýÄ ďż?ţ˜ţţď˙žéŒÉ|ţáOźGA˜D!đŽ„,‰żńÎ×÷˝@ýƒuŞ‘0Ÿň뜈Lż~żl?¤Ývý@ ,X°Ż!¨ŕßţŰűZűţŻ˙őżč/˙ň/{5’ř%ÁEÁ‚Ű5Œů|@ mü¸ŃƋoJéçu}vŇîX˜ #ž˘âăvbœ&ëá’'uG˙颌żŻR:Žč`šÓ,Ń /ÔÎ/řţ֛R&Ż\ű˛čč˘dʊˇ7ˆ6K”đ#`  ŮI 0 4“rńuAşw)x<śâË˝Ż0˘ę6:ŽĆ˜;‘ ̛ŠŔźBĐđ\ĂÔai† 7+°Ľ^Čl‰řŻ?žYœĘ:ŚţÁVuĺˆƒtTr+Şî^Šh Z×ŔŘbƲâ.’´^ ôŒLΘZNcÔcÄ# mÔűC9E!Ý*ŠdĎ•€Ô2ŽÓöTŞ;: ďĐÁ˝Ž¨ąs˙Ô§ó˜Ż5l×Ó_íőąXŐ~@Ŕ°Ŕ˘vŹmÜŽv,aˇŸž€Ž­2$ĽîbŤŃvwŤŠž˛ËśŒ…3öžp˙iŤu‹g’,Eđ(cgPři:ÁۓéŒňĂ9OďLhĹe]ŻK[.3ž]ĆřÍtĚ\lRzś‹”ˇÇŮýod¤ý$’9Hł‘íI|÷pÄ0ŕ™ŽČîjzҏ€Œ#ęIy…oťô7ÚÒŞţ ćœóIŇVĚT •ľtţéšOůŢüFŘűL4ˆš‹45ZOJňĺ‰\™;ęI{¸n¨ĄÓ ćK˘ÄiÖ5Ě}0ތ´^PüY]CŠ˛ĄŚI#ÚŠ3OˆęŒí‰?fĆMˆ?BúÁ;$‘muU éó7ËĺBFeQIFš|ŕŠń]ÓřVľŽM÷ŠápfŤÚwß`Á‚{ -‚ ö31jîWÍ#‹A}Y>“čí‹K¤Đ:WřlóRSË$|4!<ˆŞOžÇ‘ć˝Ć ţéBT;ŕ@ŽÇ™ÄČ9~&J(…HĘîÚhBQ>ĺˇď˜ŕÖĹHĘ, FRT˝^ń ´dGărqĹĺZJ4ĐŮŠ‹Fré™+[¨§\ó~+j¸ŹĺIűˆ\„őé$n y— OçsVđ­GąĂ(ӓ1†§…Ó}}EEtÍm˛Éüp&¤ ŞLlú3a %H°ŚHYĹővüđ!űb˝8;Ł’â“Ą"[ŇĽI(*S˛ULţšŤć‡”<8¤ű~@ż˙=ş÷€rnŻEYHŸŘ‰ŕO’ĆS:œ?¤Gߥ뫔6Ť uŐ}žţ\&-EŻžm{K5źaSGÜH]AmŠU Ŕ (Í´Ň­œ:ćdmÄ÷Œ4Tiť +Îi>S ŮS8ćj$ĄE ŘńK;+§87žMŃşź_R—źÎĐl2ĹɝĚw ' Na€‡˙îjnß1—=s˛ąŞŞ€óŒ¸m'ÓŞŢU$A6â ňsˇŠt}yZ.DDAšG,ĚÝÍń5kyďS•ż° -Č7ž-ü„Ż(0š¨ź7đ^kź“ɘ% ź[ Čƒ3¸Dź› Ľ€\X‡sĹ.ž´ Ż÷ ?Ă÷Öă8œ"œňăxÖ@&Â߈HôŠ ƒ ě§lxGţÍßüÍÎ:?YFh+Q˛ămŤ^ ȓ*ýď—O ځöÉ3˝<úװs“D,X°`Á~Œöu~;źIxď öő ă>MËř7°aÚ)lƒ?îSíŰžjÍ0­Îˇ5?ľ<(al!KtœÚňĚ}mAŇk/Ç) KĎۈćźmžą4K,ĺ‘ŢCU[ZŽ1FVch͡q^YZ5VÎ"@ r°#¤#– %ë„T$^0ęËÔ:•Ÿwaš~˘ćUŮďZĐĂaž‹%eśľťu3Ż÷iȗíć•âűŕKˇ˙P1t?՘?wÄőj¸2"ŕÁü/6ŔÔř<’[ žŒhjRţdŹÇFň))ÁB.]Ѳö‚Ö^ŢöňcöűUŻgBžä×öÄ!ciűoxóÄ(˝gK ă”PĎŃzh…¸‰łÝN÷ďĺdĎ*ćˇ5ÍVpC ܧÚ.ÖIŒ˅ÚO˜oĆńččD‚&Ť…Ś$k@YŤ Q¤I(Ď ĄFÎN™z^,Î/j?‘¤k‹ú¤xDw#’ŸˇˇÝˇż_łťż‹lž nő'­o-#ž÷4O(§˘ř#ÄÄłF1WOV´:ăúŰd|˙ąKéE; EçĘx~ą ?~ń‚ÎÎŻU¤‘`Ň5;1kť–}W˜œ‚ZQjz)\ďďƒúąuŠbţ’|×ߏi*¤’Ö——2ÁV75=|ç!Mg3™L‹œcîďä“ů|ŽuĚ>DvďmZzřô);gJüY¤Rk%f™‘ý“<Łń{÷čÁŻ>¤~ń Q*x-6ŇÎĹbÉuů„Ű睞ܧ‡Ńá䞐$č˙Ď# TAŸŞÎm>Âúf–ĽÔÖXçŇŃŐą|ďe‘˘‹n=NOOh6›Đ†űTd˘(Ą9×w ĐŠaˆfdú¨4IwŇ"P+‘~<îbJŮ1‹œ"–äaw jŁuݧšŠŮ'ž˘Š9-ˇńˆK[lˇRK$ä— j4ĹŚż_uôş>ýž!´+$ëg‡'”MgJŁďÎŕX Ż eŸ_ţę—ôá‡öϜĘÇ.ľs]‚<ƒýчpO8îüc/ëč?Ô $ŔńœŁn´}NEąëQç^˝ç˝÷ŢÓžZr&p œ ÇăüJ~ÚĘÝâŮÂţđÂń¸ΉăAô‘úçó`îŃŔšî†‚ ,˜ł!ĐÓąŢ6uŔm€ĽŸ$Ŕůҏˇý¨ćťśßőýť´0é,X°`? ďó`Ážƒ˙Î;ďČ'üt ¤ic5ŔŘüpŸ‚{hw‘Ž=Ś2TŔů6Ď5Ƨ(Çh¤˜`Í8W[[Á@‡ć•‹*†×Tńd’–Áe ÔVĚh”ücí źŔRmăÔF˘^§'ć`Œü’źÇ*‡ăd˙~ŰpŸŰČ9#ĹâÇă}ŇţřúözęÇóf{n­xâϰNýö!Öz—Ÿ ”Ÿ¨WŽş°ގִTň?~&ŃDR|ĄN‘žiœőZořľn$žŸcöĘ˙šnTńsƛŹŃtó]ŐŞB÷Ŕ|ŸxéŠ]Ŕă sÄ1;ôłDĺŚâԆlĄiˇ,‚#Ӝl>ĽŘpyŕÍH=WÔČżGÝŐ9•JŔu6ž[űźÜ+í¸ţa]Ÿ6Î÷‹DoßźŹcíř“žhÓߋő*:śoëňąů”_;˘4ˇ]ÇŇNP"‚ýf3ÍhP0v{ůäšË5mVâF)b ™ęÎ=7ž’}qÍ^łlӘőDŃ7ňŠő;EŰgĺiĘő[•(áţ5Í6Ýnƒ:éďugvńfœwHüA0iÁ˜2ćM°l6_Ó捂ôď!_ŸNƧ'™ýÇ+ŒĄ‚ öăą@ü ,ŘOŇö9ř2Đĺ˘ę˛¸â‰ů-K* (e,h˝ź”\Ż"x˛Nä䆏WœA ¤(Î%ÝŻĐÖAxpŇň uüB %Q Ó“žç5x }Íg|Ńň`ťBꝚËUŃŐőJęËŤ˝8/hľîřź‘FQÄPJáﲴŁÉd&ęIy’ óžs01ňm#'ňˆ’ƒ MŢšOknŸâڊ2ăz™‘ĺsŃş‚Ăx>#:š’™äĎ's6:¤+Ś(͸­fܔ÷(JŽŠ3SĘň JŽč]ł <74Ÿ1xSŇoű ˝x’Ňfń>÷—ŒžoŰOéä^ÝňČ#˜ŕdG&×ý¸OfSşrLöçFď˝űóŒ?ţ\ˆLâŽrżĽ1Í' ă$|źĄ$c ¨M(AîkDg Š íĚÝ1τÜ3ř{äš)Ł ÝҒ{8[ u€†ŹćGÄWĘĎT‹ç"ęÄŕg.f'—“ öÄ9'öŁ’°Q"Šđ ˘6HÍśş˘Ńć’š ĺźÔŐ×AÎ;N•ˆg†Cœhřdnűx˝ş'%˙dYN3îO Dƒ:WGՊCéß^$%üi:-€ęxnúś|đŕ‹DYöm §ü˙úżţÝżwOÎĺÉX>ŞMӁ]Ęy°Ŕ9‡"ˆF؎k >Ռ¤‡s$ ´ŰĎzŁę('ś)i)˘`Á‚ ś5nńűäÓ '†“ şďvbŕUğ}RŃ]Űý>aň6X°`Á‚ ěí4ří^Mw¨Ŕ ţ>Ćrđšá‡űÔÜĂ1$쎽—'_e8#(H%#ĆwĆeî0ŚÁCP{ŢÔLÔýE] 4‚ÔƒdźqČş$ ;Ä2>Žy˙ySрä¤÷ ¤@!QŽݍ‘ŔŨ×#7žüŕžtâƒ2Ľu–’:ˇÍĄ°C‰6…XOíŔ*E' ő7€d$ˆ6]ѧüJlBc;ćë7´ŹVTv•`ŝy}l××Жţ4ÔůŮ~ˇˇœow]ÔŠâ8•/˛ýR 8횻ȆlÂ}‹¤qăŁůs›j¨¨bH{év¤sęs0™˝mč•‹Ş0úhĹuŽÎÇĎY]ŞÂ9ö,mDĺ@ś+,Œ-FŒ›Ő’˘ĺs˘Ő%Ÿ"&MĹOJSęu\gŞ?˝é|‰U} ĎA‡gžŒŤĄ>ڒqB‚j|+j8hي˙vC…ŮPqyóf'XwG)Ę AD>']OĘzY8Ľ:QÉuÚ֌!%=CćƒŐZŻßŹT)ží’lú;ŢËľCţŞĎ6ݜ|ł”Š_3ŃPgÚĎĹ0ÜĽ\nĆđźH´˘Ö4;ˇĐňÁňžâŞXółů@qÁŽŸJdL”đ~ěh–•Şj`€\ŐM/כ&ąLö§M+9káüE٘ňI1^oblG´ZúüË }ůĺ…LäŻVÉ=Üvą0ŕ…„‘ˇĘ`ÇÂ˙8…M!äăÉVšőŰhŰGÔ؝( Gü1>ýÖ7^Ý Ăȍh+#+”Ł˜źDŠą9űVŮVmˆžúę™+Ţ{÷=QQ[É\¨-ľŔJ˘yNů;§ 00˛)i]eě8̨Kęޤń˝#:8>˘%ďŰf|ÝqF6g§`šŚĆ‚Ä’3^qÄíő%Ů×áŒŰösĘâg4ćbÝżDżţĺ#.ˆbżăjŸQšzřƒźí •şŕ>4Yč›čĂIœŠĘďsrrD˙ň#úż˙?ţ‚~ůńG|ż–ň<ŁßţöďČ4kqJGÜ_“Ů„2îď"›äI)7\_*3QÇ}—Ŕé8§“ăCš3P”Ç:ÚJ ąşZ(Še49 BŐ4\ ;ť);kpţSÓr/ŕçŽË"žU'1)h…üsˆÔc–ëğőŠűüâœF‹)͊ EŁ”Ö_¸œ4çQ†ÜהJśÚ‰eşřďŻYçˆ*ɸď€L°J>Xp˙xv%םSĐÁţ>•ögJaüŽđďOĘAD ”v äŁ=zDżúŐŻčŢýű;í ˜â‘'yˆ;P đ7R†yâ~O56oÇą Bz52!ţpJâ0L ,ŘOĎöUun‹^źËTá­˝QźţێťmŰ~ú†W•ŰŸëeĺÓöM'—‚ ,Ř÷kŻú=GĂť=X°ďŢŕ[+đϝ÷ρŔçŞůÂ7÷“ý^h¨ŕ=˙}“ą ŒaůsĹË%igˆ˝B+†źŕ#ŒŁŕ܉űd'|Ľ_á>•˛Á÷ta­SjîZňş$‚éD[챓őmÚ­í$zźCŽP‚Ă–ůăĄk㞔3œ%߯‰ó™!‰Ęě3ÎŐĐĺó’.6—}çŕţ„>8Mę$›VS}Yw}L LmúśPgĚí%k@‚b\ĚôŐŮpý–ű:.˘ Ł-„—XqŮ XŰZ”—ěőą]#Á™=ńÇěÓyvé@˘‹b]z0Xë‰;˝ŸS_“šú™Í…Ťƒ–ĘŽ1Äś–{KÓVm¤ĺśBnť=ŘLŕkŠó¸'…Q_ž4ˆ0ŽK Đĺ~j †o‘h=˝âŽÖ:‚y;⽌”D‡”Ř %eN-?ƒqů”’nMqĺ”Ď›šĺ:E›3–ćŘ7ÚŢ}(‚Ő–¸ŕKŕŐ˘tÄŘZÇóŐ¤ŸĽÔo' <ƒ†.;Ćţ ĎKŒŻi3]îÜťWî*Iőd÷wߊŻjnWg(jÁ8o])[j !‚–ݏÍĐFžœfŇHČ|Jęq§xéűĹ×]-í+ŰŕN`’PNÇ;nU/ic îí5U­ŞĽ_TĎŠŠŞmđ G´ŕ~wŢšś ÓHž„5”œVŹ3‚A‹ }2a\xÂs) ]ńű–ąă+ţű˛Ééş.iŮtˆ ćֈiÍmT&ŘěœÂ™ÎĽH{˘˝7T4žl%ňŮ—Ö ż8"š¸ţ*)‰ŻřkvŽf:™×™ƒy\ŔM>Ę5ňä°!čăUý´•ś‹R{ď}z?Íéô˝÷ż3I&zcHĆŞÔőÓ§O{â } Ű@ôńŠ?>ĺś­V™¤Äą¨g´źňú;ԗ°ŕ|úH@|Px7H ;ţôiÎđ‰śđĐh3‹óĄŻâx,xoU <y‹T~ĺŹÜűÇ _ŕx”5X°`Á~Ę6ü˝ü:“  c['ůžý ł}$ćvżářĺ&Ůç–3ďü=Œlމj%zE ĽŰn#D  ,X0OüŮ˙ÝS ÄşôÁ‚űśćӀ'Žŕńřń~B_0™=ĺČŰÔ|ě47jŰqáëňp4P–몼/ÎW‚ UŒ-˜bťSLßÂÜzÜQuhŮŻßS0z ąĄLtCë–.6– •¸,@;äŸÚ}KÚŞz"8łS "ú:ś%qmR4duřýރIó”ˆőęÝo3}響É0˝×me¤ţÑśěsVˆűMiJ˛kĆČ Ĺ“ZˇÜ´v°˜AŔ¨Ľ›F, Űr H-؈ÚwŰ0r”eĐ-÷éŽ&‘pňŇ-8Wˇâňݍ1ŒÍ7c"Ɣ[Ćđlyɧâý;7U*’UÖąÝvÉcŽr\ÎˆJNŹßŹjÉő d¨ČŔ°žd\ú޸˘ËçôŐčKQ0ڈóğö5ú”ům÷Ѹ÷JâŔ=vů]Ůpœëf…$JđbSPÁď¨YmŞ =-ż’şé%ŞiÍőńbą˘Œç_˛ŠĄ*sď>Đú" ¸Îó–ň˛ŁëM'Ä+ÎÎŻ%łÂjUHŚŔŇP5“l|Új8Źuíł}SGŇëľ´§ľ×]oš{z9çćÁAŐ7X°`oĘń'X°`?SŚ9R!ŸŸŃŮŮ]cb]6,3pŽ`Rťě DŞmřꏘD‡˘ ř‘[—ŠÚH;C§ÜÜ ĂÚÖO°ëä{şú‚ňĺ§´qŠUó˘‘>ˆąJNáLvSKϐ‡CXńy6|OvRđ€w¤5v—}îçŒö×K< ˘~âĎŢ`•ha謑hz‰n°ƒ}ŹkɃw¨“€Đ’GŠěUŚńlJIŮRÄuŘM5Š ŠL;Bš( vWDÓĽ\¸d yUv𮮟r˝žsýBⴔȑŔœ nóŃHu~Čń¸—R5.ǸFSu˘ěă'" `qŇŹ™KáäSNŐ]ÝŤČŔ}‚NUńRËÄ&üÝĆçM''’c´Ž‘~męˆ?3vźňŇčUÜÇWBb+ŠVTgĐFP!Úl iƒ$ÍyßTžO2é:ŸżÚĺĹF ňqs_–t_NFŮG‰ Ţ[~–đü>.ôřńcJO/hÄÜü÷¤?g’Sx@]źÇľq„+Ź™ćÉ>è=Ü˙ĺ%)ůˇ++—´\’_›ˇă^‚„ăSś šg(ç†}ŚÓÉńG$mAtו´ohôJDžÜƒď؆{™Î‡°O°`Á‚ý\íe€›nŰţĘŘÁ8eWýő~‰śăĹ}‚śŕoWÚOýuš{ďJôM-Á‚ öăą× ęń)(aâ;Ę} ţ ö& žýW_}%¸ăP!>:üy<{đůa7đřăPŐöęqéë™'řÁ–Ť ýăÓőÄĐG㚎’7ýě[Gúů!°ĆסMWŃĹó o,_’˘ŹbŠŽĘź2SĺÉVt×8üő”לűônQń‘QěëuŇ˙öĂk)łÜ~Qe77ËvłŹŻVŒCjËýš5w’,ŰY§bÓő[tĹđš.ĺÝÎ} Œ(‡ . âŒx•}]â0HOüńjä;ĘBo؆ď1WÂđLU–ń͈ńMťŚëöšž7_Ňş^ß8ޙşlçŒçGtíˆ?˜’I‘!öŠĚ 4ő QeYÓŐęčJ˘j$aBeÍsC‚„5ŚŻB~Pݎ‚ŃÖ@ ęČžĺoľ`Á‚S ğ`Á‚ýäMÝ'eÚ_/ÎčŮóÇTŠúH­¤ @IŃČ “5UÓ;čĆI‹‚ˆP×%o[Sľ‰Š (Ë(ă‰wLž#Ż0ta!Y;âJçű$I5őR˘A 2,Ř*ŽR>瘌”Ż‰ŇŠhů€čcçHHXš¸Ł”‡ĄëޤZA 5ë+*HڤցuFČ$Î ’CŮHŽyŢAőĽ0yÓĂ×A$Ć ‹D‚UÚ œnĆţ­:|šIčŢјNN(R!u~ŰŁ*@nZSŇƒťˇ)ç|ĎGÔU-ž_ÓĹâ’ÎĎÎĽmAüb ň]OŃŃ鑤gŤŰ3ŽÍżĽ.ţ˙~AÓŁ/éý_”4?~A6†$ě ęIp”ŻqK÷ƒ oúüÎ^ńßSEEIGd6*6eÇ7K3Qၠ$V‘Ÿ˝wř¸î7÷ﲚךëé¸Zw“5úM °Ł¤‚ťy g ˛Ő‡ě0­čňůŠ)KŤ)ÂFÜŮY-4‡uĂmTs[Uh+qŞj.k*Ď ˘Ť*´ ˘ZœS.dÄ^ąó–ć)ĹID1ę^úi'é§ň4vűŠáůóJFßiť¸Ç Ÿ|ŞŻÜĽXCœx,0” äužüňKiŻ>úHöEš=Am΅cqţgϞI[z2~І¸W\N:ÚK}R9Žurrғźp~Ż„óŕçFy@ÎBŠ1‹óüƒk{đ?8´Á‚ű)š }„őmŠžŢ˛Ë.ŕţŇ=_˛Ý˜oţFğ`Á‚űńŰmI;ď÷0đ썙Wüy™ÝFâŽA‡Ę”ˇMżŽbe¨EjYOÔΈ¸ ö?¨mCçŒq]3üWpĹ,ŹDuoč+kÖŃ?ě6¸’ö’riĘłW”íŇ`=ůĹ3x\şŽ×!ţ¸#śŰ^Őzâőb$zŮ=5›áşÁśm™đĆńýfă `ôd˛DŽ”Ł)ž4ĂmĂůx}[q;w)ce9Ìź×V…ŕ÷ś‹ő^;ţRmë )ĂúöÁ>­*ڎ%?DM˛S>ęŽČ4ĺŰB.wQžŃďíßÓe|ąCüiż†zÔNőżÂ€ÁfŠbąRo€Çś? éˇĺž^G mřߒű #ůTŐǜá}*—%cąĄëÔŒśĐ°'ié ĚËl Š<š ťTT˝ ơ›nč†kYťźCü!ډMţ.fQ‚ ěMY ţ ě'm˝["‘5OĘ/xü\bľˇŽ4ˆf‰Ó)ÉÄłŃ=ńGĺŻk*‹ľKVS:ó›4Ś9}“ÄI˝ę‚żk|‚tƒ …,Ą$MĉK|ÝFědf<¨×4`Ś5’^J)8Huĺ”k˘Žb؁Šypšđ`=15U›%­ŻSšq™ňiĽr¤.ÚAéJř‘ôeâÄtâvhDńčűłm„Œur­2,ďrEؒ(ŁŁůœfB>1HŤş;ŽŠZ‘]ŰD2]›<§|<âúeGiUP§ě°wô|ł"U‰Ń:M¸ţOfS:<>”‹ĺmޤÎüĆóK::]ŇýGe4ˆař‰ô:ÇpPO­’°đ÷[0śƒrK&)´ô{Ű+ÀdéSôĎ!A„AHe‹;Ş:př¸FŁ_j§%uî°@vk" D¸HA‘Ĺş˘Ës÷L4|xDyĘŰůœÁÄź-‘~.ňŽQ%+I%Š^§łäž7…JđL&Š–Q3‰k˝§wŃÎěĘ] ů.únő˘Ń—đ ۍí 4ú|FB˛!Iš@̑÷ż+–Ë•Düaż÷ßż—öFš-¨ďř”ah'! rŁýž?ޟ¤Ÿ ‹/ƒWPʲ\< ˙€D…°Ë‹K9R˘”äSŻů("œd#˙NóÄY(X°`Á~Zś‘ë'Sn›ýąŮËË˝=ţuě›,X°`ÁŢ^UŘš ˙ýŁ`Á‚}Ÿś˙žŒřsaöşc5Đ1V?̀ÎĂféĎ4Ó70(†ŁźUűPbԐ@ł˙°=÷c¸áfÍżF[ŘÝ?ě0Օ}ů9öŰşĐ^ý7;ű  vśÓŢ7Óďł=RR„톔V悿ž<_Ü0•ą’5†WÜW÷Ů+ńKĹMÍNÝW‹"—šŮ‘y ř#-ÉřdWÇԘLÚśŤ+Íŕ0Eëˆ^ű*Žň<ʝ“†qmVó~Íi‘:l}'!kE úŁů}e˙HQíR}aîâ[lźĚ TÖšŒŚÝ’żËë˝Ę$“_̍iřŮĂżrŻĚŰżK~HŸ2›¸]ĐŹąv łóäŕţZdS觀>ÍQ$“8'@ó4‰ěyGŹneú#§Z˘\Ő FNJ[% -îˇß˙= ű44ýSJ!ĺZŻKałérR§Ź@Ôh$yjŤĹK>B_DjŽ{ IĆŚ[d´°ĐĄ §Y3eAů“Ívąi?A2sCŒŇ_>VŠ”^qN,ËRsL¨beȑÝŕ>7Ig Mť&ȍ\É-sśL}"¤ÁśŠ7“ŒsŠ3‰)˛jUś{'ÜĆ(+0űDa›Ň„Ł â&LBz֊čŔÜGYłE+ÍEZ zf˝éGć˜cBÚr7y΋ł&ąb)YsC)}MrĐΠ΀€ƒż‘Ň „jXĺhq‘Óiáo,Áç믿Śożý–>|Ȥ´ĘCŮhgxŹzP“IB8–mll°zŒvwwéÁƒü7úÁűďżĎß8śGʉǁ:Žƒżą-ĘÇąqnŘ'0TޏBĄx!äI<óü4‘ţ;UÖăŮ)JhW<öq ‘Óp§´N$) Ĺő†<ÇńžőQź7đťÁ Éő#ž*×UŽiŰč˝yupQWâXLš§ňtÖkP0•üsZ?˜ď˝Í*k˛Yiˇć.Ů~˛ęRAT˘cjCٔ͝j°d%mĄb›ěXĘ'AXÚ^֊Ý߯î$” tąđ#˝ d'풕űý:̎ďďŻ/-?I^HĄP(Ž”řŁP(^8Ĺ(śŘH4ŠŒgĘ)şlúœ”ˇľ)ł"&ÇŘ屙T i2QÔ°Qv÷ ẀOÛHҏM/FŹ E6˘źŃiS§ ő“.5š=ŠÂ„Szá!†‰9îˆI;Ó’tú%îx–˜”AÁ( ¨¸OÍέ­˜ÉüN×î HLťYŕ,`R–e/pĐzÜT,ź‘{i'䄸ݨmęڨͭLŽT ˇ÷ŠłĐŁ Ő`2–%B¤lÇ ĚdXk8Ś`rH‡ť}úüóďh{÷5ş}ęvRzţô öjEG6Ś9n”™ë˜‰âĎؔľ@OžŃá”–Zô2ü.BFcEŠ0:&őŒÔp’ś‰ăWŒNűÔjRŰĽ‰Ę\žë••eúÁ@“ƒ#jĹm=ßbő™‘š#ŤT“ĆŚOC ÁIšÍXZ˘~ "5B'}ӗGy .L”Ç1R& ąMcBŁ–M-ňP82یůĚ85]d‰V|Ď$ř@ŇhŃŤxÂ×fŚćú†|żšSbDËć|mî+TŁřsQâLÖňD°¤.Ăš€4Ă$)¤V3ßHâ ŇČ:P Âś !EÚ§Ÿ~J_}ő“n°H9’˘ `'O}LŇzI:3ŹĂ1@ ƒý}wü#şsç6Ýźy“ G86ęűĺK28•ŹŇHRŤŽŚP(Żüńž‘HŠç;žŁx~żńĆôć›oŇÓ§Oů9oźÓ„ź‰çđ[o˝•ŻĂoźđçčÎΎyßa’çťďžgĆŸńłőîÝťöÝh> ‹ĘťۃŒ‰íQ—çϟsÝ~ń‹_ĐăǏéƍœVëńŽŔ3ÇFzIüI\!• ę& ü‰%…BĄPź~@Ş_I [YRţfNÁ?üä'?Ą÷Ţ{~őŤ_ŃŁGčŞĽW(^%ři÷f­÷׼S\>.z]JjĺŮy6OßĎůXƒj)tÂ>2ŤŤ>s÷ĚĎőUů+'HœŞQʁ§AŠ€:fEPůłŽč#A~ž0?ZzŹ$Ž•@`nÌĘéËlťVƒ+[Hî€ňĘcĐ{ô<8îË­ôá;_Pů;ČéZ¨MŐƒ ń'+Ő%ŁJ2˝ž …âjB‰? …âľBćŘüĽ|öAĆ$¨üđ¤:řA”§|đ÷ETÜŘl×hśx˛(li!X1ĂĽöÂ:Iד82Œ‹fŘĚ#íBjQىöN§MíćˆÚ­„†ćXĂœؒLhoë€ŐVĆń×tç­=Šą´ Śť– †śIÍžŠDŰô(‰ˇiw'ĺ şáhĺĺ"œs'ʤq“~:4}ĆÔLż ʌ-“~š ý´™ücďŤƒtO $GC ‡cúäwŸ0ń}y×LL˛ł!É(Š­ňŽ5É2&ĹŽ_w{Óß;ލ’˜ríЂÓGMLŹ@ľŠ†š|™ĎĐl3žŘúňuÄyä$&KÂCŠ1Ü/ČÎi÷p˙˜Í†ýŘ|[U†ĽĺV‘Ë|.ľG;Ő)Q…X]]e…LĚbňăźĐ÷pNx`2ižphWLŢţîwżŁßţöˇôÝwߙţ× •ĺe&É~˘î3Ű´^BÜÁ7&{ńkމcI9†ď#łĎ˙řG3Éü9}üńÇôá‡ňݐ}°ž5¸—0Iě§ľ‘txř›'’řD§V)˝˘BĄP\ř%xîáYˆg0Řh„Ŕ "TŇ Ś†o<_1FÁłi5ąĜß˙ţ÷ôË_ţ’ßE˙ýż˙÷<˝Ł(*ŕ}`=žËŹzç@8Ćo?üáY ÇúěłĎřy1–ă݀mP&Ţ9x—uŮ˝CplŐ9J}‚'§˛=G{) …âúď†űo˙-ż{ţăüůrNq^ŮďŞ?űł?ٟţô§ô_˙ëĽßýć7šBBĄx9¸¨´B˙Âż€q$ű]Ó4˘‰ř)?Ľ¸¨dŠ_ÁWŤaUjłÇˆźŻşrđlŻD‚œŽ 0nˇ>”˙ Hńç‰çАtpNŘŔů༤„đ/°)¨,ąDČ%˛Ż"/ŰúařNƒ>MârťÍŤěcýĹ'łv˛9— ¤Ý„hƁݜfŢÂg)Çj,Çv++Ťf˙÷ œł´­l‹r¤ż˘í‡ƒĄń›OÜy{ä×Ő.ćŠ˙YĄ Tý;oŸbťĚŠš0 §TŁ SűŤź•ôÜh+œ ü‰8G،â—óç$Ŕ“ƒc];`_|r^çžb˙~ôţ$ŘOÚżîžEťK˙˝ jch'řUývÉŰ'+ĽĹ6ßŮön@!ŸB7˙sŕvŔó?ŇŻd:äűĘśs`Uó]™0>4ţńäbĆB ážžÎýŮÜS~ĐĐ L…Bq>(ńGĄP\k“ă ošHo |1dŕÚn›ÁŸĆcšc;‰îÖc`cƒ/|0č8c¸ŮBúžŠÚ‹4ĄŽYf‚Ŕ#ę˜iťÓvĆkÂG&->^Ű2iŒLT#7yž2y" WyŕÝj´ťŐ§A:ą # 5šnp:ŚƒQ§N'˜NĚ:(š˜ećď4sâL6x°Üh6h28˘d<ÉŰAˆ.—9”–Ź”Ä]Чp’ # "K”hľ#Úf&ÄlB6›…ލ(ňŔ@A[„1 źDŚÝ[ćş´: LâbĂ1„qÝÎI$ɀhx4ቴ,ŇsÓ.G;0Lj›ct˘ łß€FfßnF7q9ă1ԇžÓdÜ0•é/Č×xfÎÁ˝FӞůt‹öĂ‚˜č‚ZW Ξ÷ 6ÚÜ6čSœ N˘7M}“žé‹f2s‚>tfń˜RcPt2łŸé{-ô÷ăĐh„Ćp†á8q)όĄdţ p*ŻÔĚš ĎU8Ú8śÖ//ź]`ębĹ‰[ň>“Ř–Ĺ” ďć^ÉäüؖF*1s.f[NŽfútjĘáúNbîëŔ‰šVEj´Í5EńÇGYŰ5lŞŽň7Ď2âô/Ć0´„œVNbb_łÁŠ^oźq/W€¨ß?bĽŸGÓ'Ÿ|BřĂ8=×îîŽyÎtM_ëäFˇ85pŻ‚ř˝8MP&x6a;LRď;•~ăƒëÉéˇß~›Ţ}÷]žHĆ3Ŕ7†Ĺą#W>BjÂ÷x2*÷żŁ’ Ĺuƒ<ăľ777Y¤` ŮLÚ °`Ă mpÎOŸ>1}ÍöIŤŒöƒ…ý~úÓ?1ďŞ5öiáœ%Ľ˝<Ŕż†śĆz(–cżCg÷.S)ešűOH:a(~ĺÔ-ˇ­Pl] ȜĘ?e9ˆ‰RřŇ˝mOq;â^- ďeÜxע­~öłŸńr™‡€ (Šą@‰í@„AđöÇv A9ěS7Ktąţj”!ď{؎č[Ňţ>1팲Đo­żr74|™Ŕš~ôŃGܟňš"s°¤Éä|Ůn4špż‚ź¸´ĚÄd@[MFc&ţ´ĺlm?3ë콆v\__e-°cÚăËŻż˘ńÎŇ,V˘>¸.č×GÄ:ÍeR(Šó@‰? …â€0ď…/ż„ř“Ú;YÉĎŔŠÝŔ ťŹ„2쏘őÍj‰%Čd`08˜%φ(Râ4Ě s•ší%L"&0Ŕ1ÖtŹűE”kœ3XĚĚŕ11ű…  âę+fÝ0žĐhx”ŸE§Ý¤^wŐĚŚnĂŁm3ń?dc˘g겟°˜OŘcżáŕȋȅ$„P"ů(5Ç3çĂl§ 6¨Óëp9ťăâ BŠcǧYJ—9–Â1EÍmó=rW,bň]iŽíRŁ5`ĺ“FŘĄ˝'ĹÎŚ¨×m0ɘ˜s‘ŠŁô›MCłQf‰MĄ1Z˛6íď˛aÓa,[äŽ i™#ˇŹâ’Ů÷i2¤W3E/škšş°FťĆČŮŮÝĄ›!ő–S.çđ oę{`ĘBÚ¤%NƒDÍ9ń„bcÜ'v˘.Oł&íJbŹ‹hȲhÂj96‚(jŘT^–Ł2$îőÓIJ#c@ ŒSb˛ŒGÓRV˘ ¨iúF{÷‚1”Z–l3¤ÎGŽU‹âhP—śËćÁr吳ŘAě"FS&ü„LäY ĽIb DWd6eXĚéőV˝AĎśj9蜁Ujj¸č3NązŐ$ϔ—El´ýÔ\űî5;=s> t¸ăM—'˙ë*—Č>i™„öjF|Ÿv:-ŽY^^âsGdFśčƒŢĎŁ›`4C˙“O>Ľ_˙ú7ě8DްD~Ř'´rm9BŞŰ˕`œŁ|8ăđA˙…!О`(‰$Ä!´!Ž ‡&ąql8Kđ,Ăv8Ž8“ÄĄd â"íŒíOfú Šé‚JţQ(Żŕ,QÎRqăyˆg'œ¤x^ăYŒç¨¨á9 žŤOž<á}ń,†ĂË@î„sߞł˜Ŕóď,Ç$RŽŔ‰ß(Ďv<qLźű úƒőß~ű]Q ŻLĐŔ Š:ţú׿ćgˇ<żŤ“ŔyśšLĄP(ŽNš˜ĹťčŻţęŻň¨ţYűŕÝň˙đ<ńÇvK0݆„BĄ8 ęîAßçSýŽŽ?Ë8ÍNhŻ3IE?DEETV|`| Ÿ(€ń'€ß˘" B2ĹDśÖ16YŔ: FRˆâá÷đÓÖ^ˆ˛ Î c{ ěĐ~ `lzăܰۉßçŠvÂolś“´ë°'Đ~AfěňたĐÁe‘ýÇŘFü6€Ż”ôäézśőŒ˛ƒúúżčgś(ýŔÎÁ×XÍ$-ršĆě?“e’&mˆ 8ô—Í\G”nđ-„´/؟S5X"Q杸ŻŸĺj>Eš'ö“z?YஃËAsäˆ˛Œ ŞlV>v Ĺľő!} ~>´úlO,Ç=‰6@{ŕڣ߈ěQÜ[8´Ę@ż@?9 ۊ:¸(xĄĐ7ĽOâ˜ŇŽŇŸE5HĽP&ÚőŞ“ź ŕüĐN8G´ƒôv÷v9xŔytMÂÜÁ؜sßl{xpdŮӴ͂Yfď§eÓ~|}MAeęřÓŢQƒX%mŔNiS 1í#dź‹ĹL™hgá>xl| ™™šŮŰ …BĄ8”řŁP(^”]Uőœ2ŘŘ_$.}Ł—‡°ËŒXžŐšĄGĘČĺ0‰Ú5 KdárŹ29ƒb[͈ÉHb\b0 2EâČ"ŮI^]Yň$ˆ0ÉŁgҰIƒ8d˛Č7ĺ˜ýEŢç$ Öˆ’Üї§úĂäˆő2cp>Żá(ŚŁţ˜ĐÝn‹(2FmŤĎ†K3ęŃä°MGc&/A HPD‚’¤13ńšÎ‘y‘żCÔ ŹœF”ŒBę´ ^ÓŁ4nP–Z˘8ĎďŇd˜ŇcŒ/Źt(n (NG–´E-j‡]ęuqm#Z_kŇĘFhĘY5†˘ BnKF8ôxTD> VĚg‰ěc ”ňb[Uú–DkJ@X Gůľ+vÁ7Ť+Ť\œ ŁĄiŸ†Kí$r‡ˆŽ Ž;Ôi„gźĚĽ‚r“ŠP`r˛ĆŹâšć4s’č!śfœ’ ,žĚé$ŠeŠ,4“ˆü“‡˛¨;•Ňňß{b›ç†:!JŹĎŻożóďŃeĄ¨ęű­Ďmf đÔ‚ív‹ŰΜ/žř‚~ó›ßĐ×_c&vżgcN"ŮDZ˘xpoŔ!NŠĐĽŹČ˝‹rą=ŒqFżMŘÉSw‰Ü/ 8E›Ů÷?ř˝ů曹S@ž3žúˇťýĘčQ(Ż8äyő~Ëă<ŻńĚő÷˝L€đ|Ç1ł L¸ Äy+NUňl‡R\e ÓŢHV§ĘPM P(Š×’x€Ř ~žľ ŠKEň|_†Ł(|Ŕ/'$ ŒCŤă^ř@>„x‚ßBʐçxžŕفořî„Ô.?”!)ką~“Ť´ŕgőEI§$AXˇK{b{^„˜óĺřarWšq€\*>=<ŁáOç鐕IP.ʸ}űh‰WP%é.}Ńtœľ×T eóĚDéÇWyÄćA_YZZŕó€_UTĐ6 >ŔĎk VĹ튲đ b˜ř俢N_}eöóëć”}$…Yęůš‹T]֗hw ůÝŠ’Ę2>Lr>ţbo§T <ÖŘ͑IďräÇš‹Ę,Tiaă‰í(j´h7ř#Abú>ŘöŤŻžâm%EʗcI?Ĺ7ށMamq,,ÇvWhΞńőßžs‡ë}˙ţwš}l(ťœe됖‹÷Ɉƒ4ˇˇ‡ôđÁcÎŕĹł Óf(qä|Ťƒá€}šËˋ$^gi+`âR€eeÎ×9O(ă{üWżú×ÁćŤwhqó R(Šó@‰? …âő„ËŃËä ÜJybĄrRH.°H˝œÂ˘&‚´E<&)ŒßĎrR „V™ ƒ"oŽ1âĆc›ę Ĺ&EŽ]?_ŻU&őH^žßŠBYČvfä›2ĆPľiÚHš ™p8şÂ‘Jğ$-ˆ…Ć酢iŒ†ľľuZ]łéÓööčŮó]3ĐŢ ľőÓ8Ť5úԅRRcÂx™vˇ8ę}4:2w8VąS é2†” -Ţ0ű,:Iáą1XŽpNö¸P­ 2v&4˘&MŸŃ~Ö§;wîҍ;ëGP?بĄŮ…r6r67Ű´qÓ;HíŐ ĐG@ ą9˛ó´E[OܞƒŁ~ĺě/°A+×_Č?vYÂę?’ÍŞYšáőő56d­<, ź^N‰MżňUĆy€h™É8ćcŮţ‘°ŇMXU †9H>Žż#íÖXœ7fY<„BOÂ}ÝŞJĽLxłÄˇ‚ź"N˘Ě݋Üő*Ńl™Oü™Ń,‡G‡ôíwßŃf⶚÷ü"!×[rlKŢkůös؋bÄ?ţă?Ň˙ř˙Ăs;ĆđîWĘËňý%"†:€ý- 1ȟU˘Ě#?îwI#QâD8 Ě8Ţ0É`~ůË_掂ŚS“œŘR'!fY63?|•0¤P(Šů jB ! ŐAU{ …BĄP(Ž6ŚĽUşčqü ˜lƒ¨Řˆ‚J•ř3Ťžü$ŠrQp‡Do_šÇ€Ż $ŽZš/uŠäřAňÁb śb €óń)Ç#~0ńWŮvęçq>„T„ý°t†9i‡öö™Œpćţá‹ć_ $%•ľ˘Í$bssƒĎYŚ jthúȄ÷™ÚcÓć–ř#¤ !V‰b”¨ĺX!GŐŠ´xŘßč-÷¨;!(`uqžď<+ů˝?>Š,đ“ŠŢĎiüb8ov@fߢK@řĐçpîč ďŕ<% ľé$…—řE˝ ýQRЉ"—ß÷đ7ʒűPĹą¤•ĂršN/¨‚t¸ŢcKTl°ňNĆ÷ěđůôy{°âigŰĆxÓǏMęĐ*R÷q{dŚm{„˛ą-–ĄáŘ2§łˇżÇ*CiY\Gôđœ‚m› WBiIĄP\o(ńGĄPźB8i@x¤×Ié`˙Đ#J& 0¸ŹĘHʃÄ`wÇ úĚD¸Ůéź8ľŇ Ĺˆ?¤VŰ Ă6`0Rž„‡aľHEş|łl“s˜|3ťÁşM3…ąôp˜P<ÉŘŕr {śŮ.a’ʞíd< ‰)ĂT,ڜtx@ۏżŁÖž18ŰËÔ[\2˗ř\@q c˜Ž†LąĽÄĽů˛dšămx1ŕxЖą_w9Đ7ƒç˜úĂ&cŕ) ć Ëq6šĆđ ú¤Ći0˜CÖ´gŇăö<Ü čůŁžUz 2KrABłű# [ÖIq™q\¤-ĂXŸvűsgďěƒÇÔĺ_Đ÷OîĚ´[bh2Î=E| â¤Aýƒ€~cD°Ă' S>Ě5˛JŃÂB‡Fccxă˘EĂŁ&ą#]([‘iűÂÚ12H?NY'‹Ţ‡Č„îR‹‰9V}'0mi#::泲źHŤŤKœžŞŃ]ýbÓf™1ˇiűů}˙Í#sŢ#ZšÔ^4OÜ暣쥥E'gœ1Ń&žÄLš´2ęg6Bd8š0I *@hOô+hô4MEZP˝jFœOHti6Ś4N\˙sw§Ő*Ľó!ź5Ş]šJr•ÖuφSŘŻB>â6lýŃg ˛ &oaăşŔ!t/0ÔaźA‰ĆhĂ4ŕK.xN hţG>ˆ†‚ÁQ¤śg ćš!• ĘF~řĂҏ~ô#úřăy!‰Ă"IO6ň•ôŁP(×JüQ( …ŽÝŠŤŁůjÎuŰřëƒ\äl€ońóĎ?g_‘Ž}úé§ěŁąé×ç Śňë#I<)ËŤiÉ$xŰË>QÍźJ`/1Đf’n2€Ÿ" ôI˘œÂž˛;€vśÄŠcœ•źÍDľű˘}ŕű‘@1IďŇĂšĆůÁĹŮ 8OœI:¤ęyŔ ˇľőœŐÜA°€oÇĆ~V1)Ľ?ţńěsC{âźáűB‡eŘÄV˝?:tçáŠÓĺßBĐńO÷¸/Qęęűő/~U}‘Ųů{A‚Bę%pËüĆąńç‹>…óÇubž´ŤŁŕ;”>Šţ*Š÷„€'ǐ`?铌o! Ąoá\u‡•ŐŠđźjD.ő]–třüA$Ë}š TMl:Bœ'ú×p0fĽzôš6ߋĎŮ Ńvë덟=ˆ@¸÷CŻ<ěúŽř§P(WJüQ(ŻNCüAj¤ĚLžŹ=JôIęJĘh8˛šNŔ*<.Ełý#&7őLj6cfe#/lšFLţĄ"ŽźäV>1öá$3aˆ™đP°¸A†g‰5yđąjOAŠgBăxĚd6S§–‘ĆčĚPxŸŽvFf ; haBĚíč˜Aż9ƒqœŠÂIJdŁŰ‘.˛Ôĺ)Né¸Ńr~!lźÝm˜X0’{Ľ‚‚iƒO&Ř5ŚĆ™ Ś#NĽĆׄ/Ԉa1Ä|Çá„wyěďr‡ľÄb.=JšŚ­štřŔŢYŸŕmšńć]¨A;œő#ÍËŠÄJšŽiq1 őŚéˆŔŮçtb”ľ]ku¨ÄĄĘ`L\PŠŠĂŞ;Đ’iş­6-/.° 2J)š"븉ÂŔ‹Z^Z0ĆMƒ‰5ŕ ĄżFczţl›žţâc„ďP´Œ´jíNžfdĄ5㸸sçLyOždllÂŔj5.?›űe2˘8ĹýaÉ&PÎj7BŽRŮEˆXájCÎპ—ňő-AÇÉě&^ŽéüúOqVç×çŘŇiíHg‚(I¤ pH>ƒä#‘^pěŔ‰A0łÜéP_”'i%˘ ¨‹Âőç‘ďˆ2ŞN:1ęăAœKUĂq…ň଺wď÷ŃbÔćŠä.DťVĄP(/ …;Ô _…BĄxáOŢŐMäéBĄxy¨’~ęŇ,Uןg\'Ę<ž?AüUŐ!ń/TÉ;˛Ě_ˆşOľÎŐíüeÓ~σjyžşĐyI Bę‘Të€OüńŰĚ?H B܁bŕ‘Jőbßę[i{8‹lpŠŰD”‰˛Čđ˙DĆ×&dŞrŸŐf *Ž'yḼë=Ő/TöqÁ×}°/ œo§U–eÖiÚ×Ę*!MňúCŮýřa\;šr%8Ű ™EŽ8ŸVŕŽ›I {WÝü\ňžäË˙´2_ýŸwó}˛N ˆ˛™Ä˝*pŽđç *$QëDá×[RÇa=§¤Ę}ŒĹu´ÂA‰fBm{`=ÚĘŻçŹ{Ů'čŐ)˛Wë=í9ŕ+ ţóĘö ›&•–B9ŽÍ”ş ŠĚqR?g g6cĂŃŃĄS8/Î팾XĺłňőÉź.SůăL¨÷gŢGĄP(Î%ţ(Š×’WŮţ˛’Q›ËĐşźĚn… /8ÉMâTFf°ˆ}Ąn’šß.ş…ĺ$a÷7F#+í8öyœňGЌ˛cźěÇ2ą€şí(7ö‚$›Z ÇéƒzOAŤG‰ŠŸDšLĚŁYްŽc ¤ž' úÂŕR$ĺC× °˝ÜOß;.ŐZăřx™`Éݝ!KžČş†.H'ˆřA{Á@˝Óô`ŸűČ8 GöZ^ěŃd|/WŞš˙&ă„vvv9œ(ůłaPvšmŠ‚¨dÂi„Uąœę+%E…1IšĂĂœ(0}ˇˆ"Á~0ěEú7˘3˛Ü ăeDŽ”Vď$z€SęGăą=´ ç“ldÚN0J9}œ“ĆľN„éF!Úך ĘJbô‹4tîxKŇ\n}‰ŕÁńqÍYIőČ2Łp}őŸˇŢz‹ Šd<đGą09 P(×âőďĺ1ŘŤ1ZZ= ô P(מBHí|EĹ@Ÿý Ĺĺbž{좜™ű@ěăq ţD˙4âřJąŸäˇżŻżUSk gO6€_ €ĎDH:çęnF('kŕ7–ă|DńGŽűB|6řH8ľkŮíÂŔ*JšďČ4|Đc 6?ąÁŁĚeŽżŔi˛¸^WŻĄŮż>]ZľeYĽšăĆXę#ŕTc oý4âFŮËĹ*î‘KI†v ‹Ŕš!ŽűĘG, ُóńDüfuľuőuýT_‚ą5pÎ'ĹąUő—–(ůĄ…H0C¨@*eĺFNAŸ¨ ÍŘBŹ’žôë`Žn,÷‰ÔS ž^ý‡}ŚŽ\Q;b?ŤŮNTľüűMúŠްü‰XŽ@?l[í§~9ĺv+ʧÄůsŤ÷ś“m°ç‡ó@9G0˙Pm/Ž_fűRä?ú†üΘp”¸ýŁĘţ÷‹,MK˝ ÷ćüťî<˛)śłłëN>19?ߥc/…Bq1PâBĄxm‘ąNúsZ4J‰Ýď ‰š†Ĺđ ,'(0IÁ "aœXýœĐŠÖ°QS™¸@˛Ŕއ!ůIœšr@üi6Ł\&5 ŹLF˜Ů†F—óŁ€ AŘʔ•b lă8‡L*Kvp)ăŮÓO •„3ۛŠňŤ6ýąuYaB:žmăΜhN¨ É§ďj# já;0Řš`ŽA˜šh Měu(ę”jĺ•| őÚä`ěFőu‚đÔ{šVorr7šĆđcřKÂč‡MÚ0˙ŔPkCmÇ´UˇÓć”[L ]?ĘęuŰÔmˇœÓ"ąęTㄢxlúsÂýép<˘ţ΄ű%>cłlˆ4iidÚŽ-ŽĚ~ŚXŽWdӍÉuˆ!ľ Ň RÝAŽ• í OńPPtȌJKWÁů8‡CY9lƒ ÚLĆ6÷3dxĄňƒżĹ@ŸŘššaßşu‹‰\.$şL$žĹ¨Ć6Č3ë+Ä,”!BŮůb| fŐ ¤"„/$šGœNr<…BĄx• žÂYőy7‹$3-ÚqŽ#Ӌwć˙=ŞJA …BqýáOÜ BçČ'ç˝uǞýú.P(^H ¨ţř(ŞĎ’‚ž!˘ŕá§ń’tô( 劯DHBȑ”FŘV&âë‰ŘOR aAP% ůž !NČX_ŇiIýN;Ň|.’jI|[đĹ`=ˆ@B˛Ŕˇ¤ÂńQwi 8ŽGŮ"‚­Íäř•°]Ëřĺšf?ě}ŕ÷‘:9ž\/šŽ˘^/íĹţžRpC9ĺ–UőśDŚŃę1Qžö˘ˆ\! œ¤ÜҐŔU/՗Ł¸}Üľă4óŚűťĹţEńťűßž†úŠÁŻźÜœs¸ˆžçÁrŒ“s‘Tm’ÎŽJpKĹÚQČDŹâ›ńGއcŢA—-— „!ł4[öşJ?€œšgŚľ—ÜŇ?Ż]ĐפOË7–sj4×'ĐĎ%ŕÁ{ř-őávr„żýp<GúŞ\kŮOî1é#đCúő”ű őđŐŔäyá§°âŽ%JYç=â[Ú$đ|ăđ}J%.šâG•ö“zKJĂŞŠşÜ›=w_‰ow:ÎaŰŰÉ:>3 ä…Bq~(ńGĄP(dŔ'Qbp ˘ŃŒxP°Á1Ńň¤`œ¤–íăXÚV*¤VBú"ł< ʈcXF9,‚ŹŹ+řŒńbBa` ŔF‹&0 F}::<˘ńč W˙q!ĽáTë9¸Ń}˜(ĺˆ#člťÖ_%ŠžÂ¨Áׁm8/\+řăP–($Ą¸B"ĂrřĎĆPp'Kňń•v„(ĽĽçϞ3Aë7ŢŕrŃ^H…vŻmey‰ż%+t›şÍRş‘űAHRBćÂrôœę'í‚ínŢźÉű`ůÎÎNŢďŃ?ĺ~CÝńĽ(üH_ň™ʄ$˜Řůšá“DyB:ÂŰĄ (ċú•Ýäš!×Ŕ1PתŞŃY€ăăY…ë'eâ7׋}—ąO|ČBüCÇoÜŻňĺ"!4J…đpöł |Śł‰? …Bq5ĄÄ…BĄČňŹ’Š›p/äB-9†‰<Ą#…öF9Č3ĹoJƒœ dI1Až?6—6 Š u-Y*ë­´j‘6Ębß žS—9¤„‰?šłäŸ9•ÍžqĘ ?ăa—†ýCj6̿٣lbŕ _ř„Éď,5<=ćŰéŸNSş¸!Í٘OTün˜ßmsŒŃśhŒç%3o;ă“qŠ“´GŠ@Ć9Đnp6¸ @“MŒ RĆ(đ")\cČńƒ*š$ŤœsôÂŮ'2a)é˛ — ő–`SĆö Î_lˇˆ iˇťLÖĽ*?PB[´MżX^ě2q,Î:8Ü!zdŒŕɐvĐw؍˜€66m4äč cЛáœĂɈšČŃí"02‘Ž Î8,„ä#†&~ĂĄ„uŮ#†šÍA=<Uäßuž2ąßgŸ}Ć΂üŕ%#˝ĺT…@rœÖ&ö› …âZÁô ŚĹ„JVűźŽ’QëpĄçŹŞ;gÝOĄP(Ši(˝˙ô5ŁPź6EřŕđI7˘("ā(}HJsŮ^žEAH҈ Ą@ČŹ\ăMÎc;řKD‘E BX‘ßř–żEýXÔkp !jHę-Y.ę.ňű,Ä) œBÝńÁyâËĹŻ"ç"ÎE”S°\ČBBtâsp„>—F“ŕká]šB˛âăˇ[Ć7cë8%!&Ęc!  ËYéÄŠ7ă:´áÇńŇA‰Ž)D.i/ëßj°ß í Ÿ’(çř*P8ˇ“ˆ?Ň^B ߼´˝¤Żż”˜üúI˙˙›l#ÄźŞDA h6Űź|Xi dGň‘>W%ţŔw9Ž­ šŻŐoD9ąJĺđÀŐé´iaąÇóđĽŽFĂźĂĺ†cƒ ”ňwTJÓUľă|˘“„Ź"őŔˇçä~”>„ĺ˘č#jTrnŔÜrŞQžšřf%ŔPČQrŸ ŠOT~8ۀ ”m°N4R?š7Ť÷Ž=ʑíNRŒšŐŻDAKŽ1HP™ď÷˜üăßër˘=@’~$÷ŚO<ó•ĚD% e8…˛ĐŻä>ʕ˘Îx …Bń"ĄÄ…BńZ#„ť4O2Hơrň›(Ę% ńt'đ¤P‘Ż@QvKĘX9m6ŚPVzv%˜ň9ĽœRIÖH;Ö?HB˛ČŤ!?şÄ|!ĽĐY•Ä„`LEíČ9Œ3"4íGśa‘ţŤÝn˛ÔŤ5.bĽ “ ^V‘‰žŽ1ŹĚśé$Ot]‘š@Ş!r…ŠZËóçĎ­jŒiť9Ö¨śŠ3”âźďŘ(c°%Ć`­äkZR‘Đ§" †mÄ(⨞ŔćřNœDj XÖƒčšČĺ˙śdG€s÷RU–Ř_ö˘!†fćŇĉ”­¨ţŕÜ>zHýŁ>×ßŹŞĘ,ĎÚŞAŘeÀÉN‰ŔgŽDď îŰożeňQCt†¸?pýq?  ű#Ő×G}”ă݄}°]ŕ"Şük ę …â:CżţłĚwhž”ćkfďŤę9 …BĄxš¨łŤňżő=ĽPź€`?÷WšCŇčáCŇWɤťEŕ˙¤ŇĎBH+>ŔWe™xƒ ”j> w|řI„ôă×ŮŚŞs…(㈚Çy!Š3y:u×6řFž—Ň.Ňf€ßžrÜIœˇü3Rß\™¤ŸąÁ~ąSŹa?ŚŮ&Í5€’{fŐjĆ Y?”Uýśu—ż}ár!ܖř‚M§’&QÄż—„N‚ŸŚM~ éĺ -áżb‹Żä$}ĹO7'ţy}Î÷FŹÎß`ň‡Ôq ŸŁ ¨ ‘r D" ěĹ5AtׄŰ´?Ž÷)ÓIœZ˙ ČJ0ćxś= „žf ˇOŘ' ?uǑv´Ÿ¤ťŤöE? S'Bt´ ÚĺȡŰ$ĽžôE!ŮIJ,šG%­ŕ_Wl‡`CŸŒÇ}ÓŠa։_ŘWmBŰĘöroĘőôSňI“ó‚ßYŕŤőú¤%žď\Ÿ‘ö“űLöĂvUâšôw!JÉyˆj–ÍDmIîsŮî$œBĄP\(ńGĄPźň(˜=#‘Ýžć€ü]Ůpqğ‚ń6Ö¨ąŮÔĽ/"_™S_!ŤŢ“9⠔W°*>0ŇB[Y‡„‰’n*sä—<M' ń Ü“ÉÄă#3¸n 2dHAjŒDLřăHŽ|!$ŚłRr.BDbm4Ŕ0B¤LĆŞG ŘÎő˜Fl éŘ´ˇi´EŤRŤiˇ„$41Ű$ÖmŕzUIŽÄâßsŸUW˘‹!xĺ…ć"(]G_ŚŰér´ýĂ>!ÚŘüŐ*Dq*'<͈fůáhLýą1–ÇÖ(†BÔyŕl€Ô-úl#Nř>@ĘŽqjŽ#7tědVm+ă|„6^̊XAž[ťy/&e6MV8r%ĽŮ‹ď­â¸JÓ!Ë0CEIrŢĂ8déăýۗ˘"ŞH wvÍá4ŔΐnˇCKKË´¸¸G˙`›;;Űüm˙ŢaĺßŔ-žYţÚŃFŕ-CšĂë&îđ„°gôÝwߣśgv.ĺW`%Ÿ…Ä(†t~%)ŠkÂĎfyĆŮ1ÜÉ*fçSôyńŠu …BĄPÇSő– @:ŞW(^Ŕw‚(üȄšOŒĽ?˝ś•´RBúł*t01.ckŸTŕ+AűQň Ę"ƒLř‹oVŇ÷ńG|"B–Ŕǟ˜ŠOČ9 „(ńAROI˝DaDŇO q Ä*Iż$6€ 8Mě~Ö/;Ž˜ÄGa"Qސă|Âö i×D9 ÄQ6á”î.H uM’űŁ’Éő•![ÍŤr"*ÖŐmĺřr˝¤=Ť~A!sÉţUE–ęr~@ţfâÎ ×KŽ•DŚ‘–§ä„A~Œź^m;îîíĐŘřŘEu†űEfÉ%‘ëŇś˘œ3 ŇĎýó•i顜 Yá[ÎKC’:׏ŽŤŠí°ŸDِ{ĂOŸ'óҏ䞔”frš$őœ!ć>J€ű ×íŕŕŐčĹďŠúˆŸV꣧YGŽĄŸžĐnČóNÎAĄP(Ž#”řŁP(^mĚáÁb4;f˜Ń$QIľC PԆŽpa•UŹrФö˛Šť$ĺW@ibIL `(:ôX=­a>ĄűФbY@5óFE““Ě |<¤1Ň5EˆĚ|," š”MSnV’Š”cW§sţ]MŮ4ćQŒœSÔ0íyé9ˆ\DEă‹XÁŚÝ2k Ź›„ňĆĂ1Rs ĆƀNb;á7ƒRužň&ű‚ňÎědu*U\ëĚERĄü#gĚ-Ż,Cî…ú#cř7Œ1gţ#ŽrI¨96OŻËd–Ă8ĽÁ˜v‡ÚÂČuĆŤK9ťČŠ(œ8ŇP‹‰mń$Ł18V ęcDHo•§” (Élşś(l¸(†‹ ˊ du,š'łrYH‰:şV&t¸—8vw÷ňh+É=/9°Y‚ˇÝňdl/Ęmţ ßÝÝŽ(BÔ>V–ŘF!ŸřăǏŮŔˇQ0Î}ƒž8–ˆ™Á ć|áŚ/,--ş|î!;yöčéÓ'ôťßý–ó^ß˝{ǜ§5äq."ˇ,Ď;?ośBĄP\7ą[˘ĺwćÓ&|:u‘œ …BĄP\Č{iú8> Ţ+ŻŕťŘÚÚb?Ćń´ę>ycĺgϞĺétÄ'šzA‘đOˆĘŻôS%ţČ3HBĘńW§˜\Î,ʒú! JҎ ĄÂW9‹ÚĘb…|˛†¤öí !BÓRP•ž$M˜( ‰żĎ'ÄńvơTę'D™i„3!Hů„żOHBŕ‚™ŹóŐĽüŒŐó¨łOEÍ[e˛\ŕĎ{ř÷°´ďŞíĺg=đçŤ‰žB€zăůĹë’BIĚŻˇŻTŰëđěŤŢOţš`=P}ž(HĄP\(ńGĄPźđŃĹO‘â* ŠÁn5ݰ¨^Č 0đšŽ-R2Yypœ2ů!tQŤ|"†, ďÓäR‹ş rf2îŇhŘĘĺ9Ýfœą%i ßmˇľ@Ý^Ęę-1”[BćÄäƒV6‚łŤŠú3Ń8Šłů4!ČȀU^édPcĄ €äśő&ö85V*j?>y¨|äZŽŐ™Oŕ˘QNUÂÔ6ş ŕ8ůވâ$e ŕ6ˆˆ•kD3ÄŚŸŒŸĽôřé3:8ęÓ\HŰƒŇĂŘhsĺC(@Ÿ6eÚćOsgŠ(öˆzsŒ¤Śß!çÉÎ*m#J?žÁΊ?žcGî]?rGňŤ_hŤzŽÔí$ǔçÁÇé÷ż˙=§Ë‚á.š°ĺ>­sR̃„Ł˝â\ÉGňsbôŠCé$ )Vh2Ď2¤ƒšž5Ę#ŽŕÄĂů|řá‡ôöŰoĺ’ÎҗüH+%ţ(Šë ˙†w‡Č|ă™*‘—>Çłé1×ÖÖčéÓ§yŚą[UAçfuż ČEJ R( ĹË Şqů¤VĺŐôÎ;ďĐíۡéłĎ>ă@…BńęŔ'Ńř~–*g†üö‰:2a.)}$‘ř…xQwQ䐲„8 ~Q‘4S~Ę$˘^ö“1¸?y/‰óŞnčt¤žB8ŔzIOć×ßúý”Vđ3ššQ^gGŕ‘ýCGÔҌďßßľ9$]Q~­§˜śýëƒÓ|ßšœó=ŢŮb%D †qÉpć<ŘDyÔQŕÔŹŹŹ3k2ńvÜ?]:;KâI™,TäŹö˘s8łG”Łă>ž3Ĺ7Ö䞐üä˘`sѐ¨ÜŻœ3Üü )YqĘ|˙ý÷ôw÷wôŐW_q$Ř­[ˇxr“Ĺb”NŒUÁNŮÇd"şJ˛9Hsע••žĚ^\\Ě%~ńAů8/üýŕÁŽœÁśsž%#[ÚDÉ? …â:ߏŔ7žÝxfţů矤Ÿ7Ţxƒ˙Ƥ'śĂ{űá™)“ňŢÁX űíˇůd…éěš4>T( …â˘0ϸeů—Éc˙żýŰż­DÂgĽ¸"ţĺżü—ôӟţ”ţćoţ†žú⋙~j(×đaüËžFG"ÔBr/űč"őyĄL#dŒƒá+ÁŘßđ3ÉăcC|°2_UÁv¨“=ŕ›€r öť{÷.ű}$Տ¤ž‚ßJŇ_Á#ž! Âoœ‚œ$]×i!T÷Ł<ÔWŽ‹urlǒLřçö¸wďoƒŕ-&ó€¸HްˆÓ°Kş5ŮwhÚućv5űă8 `ŠB ś—sĆ6BúÁ1pžçU%ń ˘ţ˛“€kxăĆ Ž›(I@-ŕ“WęRxáoě‡öĆuGy8'´…´9üYŽĂiá¸Í&Ľ4kWB`Âůá\Ĺg+{Cî Ŕ'tUSS˝ę@?żsçNî“ÍSÉ\KP¤'ôÉjčč'Ň7.Ăţć#ŤYŻP(Ž ”řŁP(Ž=Ź!Ę´„bYy jDMęvz<Ľ‘•vd[ś •ďcYřQ~,+["ę%.5 °Uœ"Š€ó[šoc4, Ń)وž÷&pÄ ¤f>YEž|wŃća8ąÇLë؈Áe¸H‹ČlĐ ˝TYdŒƒĚ™iHĆŚNŤÁí‚Ŕ1bÂixŽGƒ¤LĄ)żIó’qdłÔK˛E–’äűůq&A~\ďؙŸ [–O>ˉ>ĹVĹwVÚ7+ŐŔ?żŹŽa BYqœ f/?âď0łŐĹŘFSŤÝ FŤ‘ˇ§(T_ dDp 4sÚ­Ž1~şV5'2™‹tI&ß4"s=Mżm´Œ1šźJÝÍ Š6ViŘY`ĂçţŃÖÖ.ŇűĆÚ?:0ĆcŸúƒ„†Ćžœd6ÍŇÂĽ~t„4‰œD”Î$ó3ľ mƒ Vłn’gĎhĚęCh]D8%.§xž_ćMĘ"ŰW`SY‰×ĂüFÚ-ÉP‡EKKËÔí-¸'˜Ţ¨ŇđY0eĽœ_Œ$ Ž™ŃhÂơ8(ŕÄ€Ó ˆĹĽEóœéŇ[o˝Ĺ†ůÁÁ~n  ˝°îXŇvÇj3ˇa:˝\<P7Ô N¤ ƒădccݜG‹Ö××x÷śé'Ýn‡×߸ąIËć\ڝśy64Źj”Ësnď›âSęČdžÚ …âŞŔ>[á\O™´y˙ţ}úÁ~ŔĎvQlĂx Žzź#álÄÇ*řĎS<áœĆDĘŠFÂ^¤sQ'T …Bq^ŕ=B+Ţu˜@“T˙M#ÚÖŚ9¸PĹ …Bńr!ĘâĎ ÁĎ˙>÷.Ĺ7")ĽDÝ~%Q(FY É ”oě'Ä!ůŠDü)R6ö%|sŁYŽg|2(Ëń-j8(CT—[œ†>ˉ8(uĹX^>Ůh  PŽsX1{ńG‚ŹD5őŇąOŕŰlU‹ýLĘé'0ţ9I-_ĘŔţ˘t-u(KÚŮo—óâŹę(86ÚJTޤ $E–Ě,óípҟ°-Ę@ß•V´Wëüp sÎđ ÁŕZ‘`ü~uYœ+ŕ+Ôi m O ůă>y]ˆ?¸Öčç¸äůÁDEIł…9yĘ',˘?É=ďŤ)]ĘÓ …BqĽ Ä…BńŠ ¨UÓŢŮhRŻŰcňO§Ý=•ą‡Io‰Fp…äňň›ă€°SV ¨:Ą9‚RفÁ)ň%è*ÔL@J :QÊ(ƨiŘHÉ$ŚhAJČG>„ĚAԌ¤]P”a•ä4IbO)(ŕ4URo>ž)'WvD9ńOc{QÇńt^vş+ÔËúŔŠ”^¨#Îżĺ|I€ř˜|âô is!p`š‡éł–ô翯›$÷Î__ř-ŠZ€¨BůjHŇ>Ž^s…!÷ÚB|Ůl—gE&éűxŽÉóIˆqŻS[) …@‰? …⾀D|řá‡üűË/ż¤Gńßžą!d™Ě‘Aś Ë`ŚĂ'°Ô΄ťň˛  ”4Bv¨AU„S„5Óh82Y+çÉr•é„É?u1Š z˝.+Ă4;]j´şNQȒfŃüĂţ?››šu.@E¨Ńűţ–;+ôYçKzňÍS^Ŋ?HEU"ţHűdeâkŸ‚”Ó]ůŠžęŤQÁ4⏔íkďřWEÚŤŘWT}2Ÿ´Řߙ[šňZĆn_2í嗷ü˝ńÖ]ZXíUjsz°‚q6|`úąä,G”ˆ8m„ź ˆ?ďż˙>Ý{ă Z_ߤ%ł­\kD–ˆ˘AŮA"çćˇńS‚˘żŰ/Ű3§ę4ń'/+ů ’ ˆP?ţńÇćœnťgĎqŹ paĄĺÔ}lů MýřÇ?ž˛÷IŠ>Ő><ť§ŸR0ĺŘîŻlVŚ×FRŹÉ3Q"ě殆BĄP\qHʂň˛ęł2)˝'ĺoźwńL|úôéܑĂJŢQ( ĹuŔ˜Qůqôe Œ,ŻŹäR¸ç†ąU‚V@‹7)ęF´°ÖŁţţ ?GĚŁůmSnG$t*ŘúĹĘkŤ‚găтćOЙE{đˆźQč¤~2›h,ŤQlńSS™ƒ ĐÔtQS‹k Ô^h•ś=G"`Ę˝ůÖ[ôŻ˙őżŚ_üâšSÁwv@]¨Á˛¸+yŽuQls„16OD^ŇÄdP-ů¸"SyăŔkŻŔ‘_ě‚ĐŠc ůŠFžäóšŤŘ4pâ`°Ćx“”ć‡üżŤccI%*:'•ëŁNůšNĽ§ĎÇxđý'uçUśł‡žÂź9´żŮ׃ęë'ǨƒżßÉç7`Ř,ČuBŠTŚŮ;ţub”]„¨%ŞF';¸  Ĺ!¤ŕŸě4H ZŻ#„@'d'iV‚괝bďх“Ţ´ý Ĺu† ĹkđŠ˜žQ’§Ţ"*EŞä‘+56E5rdŐ_˘V¤s%ʆ?Ůô}†)œ6Ď´ů˘ÝIpd‰ d|O1šĎרłÔŚÎb›VnŽš˝¸^ĺm‹MĆŠ“ąs,˜ś‹ů)Ží¸źSE˝J]d‹Ÿ:½rjÇĚڪŒPŠ˜ŠâO”Ż ҨşCń+´¤•źm˝ć÷ůDu¤ŸÓśž¨ţŔČY3}YňˆKdˆŸ˘ŽÎ™‚ţBČ2ţ6âh‘>ď˙ö÷ŻFîœĺTxv ”eŹâVj Ššh i¸ŠłHžC:îHşđÉЀJi˙¤ňó¸FRž.ăR´NAL ‚îi¨ëLvúԓ—Šç˙Ź)˘î¨UÚ3¨ű1Ç„ŹAĆׁĎßOíĽP(ŠSĂSžĺ}ő˛?ŞR¤P(×J U(§|A*“TB’r Ëŕ7‰DČ:,yšçLu[߇ä_žL稂Ÿę •ód•WI’:ľQˇž˛ýyŸę'ŸßůÉ?Eşä#VB•tKÓŽŻ¨îËßŘĘJ€*ł˙­ü­°vąŠńĆÜ{ĎÚoę”Édš<éÓUč¨KĄP\U(ńGĄPź–˜eŹ ű^&ŇĹ`‘ta2yžQA‚đó8‹„­0çAöÄ iƒ`,6M&ż¸ƒ” ů‘›M[Âi'gö+Ö1é§Ćŕćoş$rÜĘň’ŒÚ;اŁĂ}&¤t{]ălh1 $đĽtSKřÉ lc>š I˛ŃřüŮ3&[Ŕ9Ń[Z˘s˝|ÂSqÄş˛  7¤q€ěŚ!2Źú՗ǻ5et) Íב1“˜ŐŤđA;4]t „D Hdšąú¨ĺˆ!ă“ĎDUňş#ę(ór¸Ą‹ŁÓ:˜+ğŃČĘ&㘍ë+\>fP!Z Ž÷ÝËrrűĘ_âđš×Üî›kąmÎkâ˘NpoĂyA˜,eiâ‰ŮvwgÓômllXҚ 1×ß6ˇuĆyá ščÂq#äžňIÍéŘá{ż N&(ŠWUŽ|NrÖű$S?€ż}"íô}ĂŠ„Ú“đ˛žęhV(ŠŤ ˙˝2+0ß´÷ßy˘t*6‚>÷Š×ťÂg„熨eŕ7Łá—X\\Ěýš~ZŠW/Ëť‘•jpyľ˜Żä‹ ţŘţąkü_{űơ uýv•Oh‘ß/'E™óńWł_ŸĆN|P¤zK§%B˜ł üSŒ}lĐŁĚĹŘ9‡VłĹ?OôŞP(/JüQ(Ż=Ş0 7 Ú@c˘Ś"R’íN‡Ő/&IœŮČÁPŠ%‹ < Ďâ4ž-M Ô‘ĺJ;řo4qtÍÁţ?QQÓŠƒHndÉs,ň–ÝNŰäM&Í Bj)8vŁ™ú´ŠÓé1‰ WňX뗦ŽRmWŒ‹gĺE1Ó‡GôěésnŰŢBVV—Íßm&I€Řrzł”ĽMXψ‰ ?™śjľi8ŽiďŕˆˇŁ°IIЧĂá˜É)¸⤐öH…@D–Ĺß2eŕo´e;Ůă,´Š' | 7TU‚0Wniˇ[âż"˜ne_`łçyŠ2‘6Č œťŸK]$sáÔçŒíAž9ۅ.˙8?h3ÔFf_Ťeö•°ČI bű‰ËŸěKĄ2q×Ň]„`Ôívx;äCçŠ46uń1‘Ş×Oˆ>BF˛×ŤĹ÷ž/š”ľäeŸsżÄ<ÍsDHVB(D߁tsÄ˝Ŕž×Đ\ŤCsČ=‹śEš6´Rü…^ŁäˇĆ~8ô×Á`Č׎š&Ť&™ lôc7)-unśš|á91ě\pÎçEF/ĎsŚP(§Ţ…"//Do?bwÖ~>ŮĎd‰RĹĆY“"UҏO:šŻŢÉĽÝꏫg…BĄ¸˜5IX}Čd~>ĆÁNúĚW(ŽÎ36””TžĘ…’Á/„OŐ_ú*áj.ó—~Nâű~Ć<5\0Ű,8/çć<űł +Î{úŠ—ˆs_?ť|ĄSâ´MćD ţťśCkçQ(WJüQ(Š @˜xţü9O‰Âސ`olnRË|ƒ‰ŁŐľ5züč}ńĺL Ádü7XÝC&€˜Té¨0 \2“ô+++„b§ŐŚ˝Ý].űŕ8X‡oL*„r„¤[4“÷Ýn› +&KB‚ŽNˇnŢaČBüŠ’~răž.3Č/r\Đo#z˛ľgÚçjnŢšĹl7iŘ0i 'œcˇmĎŤiÚzŐ´Úv0Î@ť˘4lŃÖÎ!=}öĚƒZœr íÖ4× j*¸ŽqôîťďňŮ}űÍ7ů1ĐnčŁ ku„tbĘ:ŘßçőŹ,… 7! 2 ŽĂД ‚ČD÷îÝáăŁoomoQ8pőAn÷—+ŒŞÝK‚"ÔÚę˝űÎ;Ź’ui“ Ő4bt:pNrä77m€6Ä3„BüÝa‚[— 8¸ˇA8ůĚěŔm6@ű˘âZqŸw*N€Č'㺍ĚýҐDćőz]&TI?öŰgum•Ţzű-sÜŢÉ'Ŕ/ó“™ŕčß/arZĄP(N‚Lp ÖOÓjÇX)Ť.N‹ę*>Kˆz,Ÿőě;>!›•&Yg)ٿϞ&ě<ĐI`…BĄ¸ţ¨ž;D­ŘĆ™ŽáŠ× ŠSuD żáƒ@°‘ŹS(ćÁÁá§^Jł”Ž|­Ĺë{ý‹ƀOaŢÚř˜k˛lV¤ŁÚĘ …âęA‰? …Bá0M “C˘~Ă*ŘːžäN Xužđ‡‚S Â>řŔšâöĹÄ~Ǒ2&ckXc"Ią€ź}°†ˇ¤š´šLŔ¤ż?Č#ÖYůő€ŚMZ˝4g^0}EŇaő(ŘőéČMĘĹŚ}Ćű7Î)N0Áf ÉVkBÝnŰeČ;ĺü„ oßĂńĹi9-[E!7ń6Ž'9a‚U–bŤ€ňŰPR1uGfůÄyj/_÷Ĺś/ L?AŸâYîÚăĐo|(Zá\? űâ#éç„pÂd)łż´ÖĽ.ͧW{ţœÉ?PفrśCš8.ʐÔ'rO$h{§žeë”ĺŞBˆŹ°$6ë\Â6CČŞşćěúf_{!=˜ŸŽě2S}‘ÜG§<†¨ŚUůq÷4ΑëÝÄqŤH˜RŢNžÜś(}Ą]ďŢ˝›Ť4áůƒýđ €J’´mĂá ż ‰Š…ŸŞí„Ę‹09ÖÔ˘P(Ž?d%“2ś+ÔwN–U—ą űŠBăŹ}üż}˛Ď<ĎĺŔŒuBVĄP(cžL‡ű Ĺëř ę,ř Ń3ŇE)óB| +Č)Bq}P—Ő’ůƒY:pbé …BqĄÄ…BĄ ˛ă “äPŰŔ;ŤŔĂ;˘ #,Ç2QŮÁ¤ź8’" ŔžB¨ŔGHBŔ¤ţÎÎNNzB˜m#DV q’ťPőR‘LXĄÎm§("“ý™čŽ^Q Ţ =ÚÜÜäöD ľ‡ĐŢţ‘Ý 5“bIĘéτD‚ś’É2üŽšQNnáßf;¨Ÿ@Ýé8͒iËíݝüz˘}  ‚ăĂšŚFł‘O ćš}‰8úŁśSÇšJŕkő—ŠmˆóBŸůCÔc¤OC]Gˆ=6ÝV——c˝Ÿśĺbʓ MüE´Ô@üAcu&×ÇĽ}ĺظ^ŘŠŹz. žŽpl”BŐh<Î -|’A~ob{Š ”…@ ňS´\fűžHυ:Ł-pžĄKŐĹJH.ĺ—Hgƒź‡H{žú§<3ű@áűÝşu‹Ű‹S‡šgÔžÄŘDYVĄlÄ×/¸ö,ĄhÎóÉI?: P(^-¤8€)ë˙Y,‚O‘>ű*$2\&–DíDH@äńuëu;œ )§„($ğES§VŰ#¨pŞŻň9žđˆńĘáJú8fâliÍ ‚„vHj4CN“d7ÎXPŠ0P9UÎ?nÚryy‰‘i˙(ä´R‘#ŻŹŹ,3™ ¨ó ş =:ęÁŤÁi‘P9¨¤Ž@‚}ńÁ„^ŹöĂ™V›tM=mófŢ՝ݔ¸ í6oÜ ÄM^B dŞňł›ĄPłӏ†ƒŸŻŠ ÄŚ†éă(Gú5Öa{´÷m"×6!ßHi‡ă,™Î09Čôۉé“Ęy}iŚLÄj•HAřŰÖłĂ$–şÉVŔWÍáôfć8—˘öslrľZţŹuĐn릍Đ嚁~n&ć^^ŕ{÷ůx ˘œ¤B^ŢŮŤ:aä× &ĂјS9Ąűŕ<Ńn˘pÔlś8W'Ľtg~ş ”1á6ˇ¤Šƒvwœ4K9ľT䮇?ŕÇşÁđČÔeBËKËÔětš=Ë­WUůyům[Gâ™g[_şßH!…~Îi´`ŕ8#§ —‚SX™}N™ä*NąćÔPTl$ZłMd^^kW˛f_[Îű<r_ĐPN˛“ż÷?´%îc,Çv˜Tnˇ›ÜGŽ?O#ţpLŰ-:Ő%´óÔzçőu™ö— lLlG (Y¤îăő_°HqNJZáÜçŽP(×ĹŘĚŚĽÄř Ďéíím‹UI´qöÉ8::bň7ł>俥†'iEąéDAOœ‡˘™˜ąĆ=ó9Őť¨P(ŠÓCl-ą'ĘďĄÄ‘~Ęűŕ]ĽaźŰBXĄP( …âUDUˇ¤“ĺs5ŐÔ` …BqUĄÄ…BĄ Ůś2)ĹćťĆD=RÍ3ŕók˜„Ç䏤öÂo) ,˘Öá[Č>Pj‘H5ŠCč´jR&Ëœö*÷ćî/5ZÜVáÜ@ ˜Ha Büiq*#˘ţрӀ!}H&ăјĎ["ř…źÂ$-ÓŚŁń(_6"V‘‰72˜¨a ]ťđľ2m{xtHńdDÝvʉNî“#D_G  t°żo <.]U^€ţ‰>{xpŔNaôm|p˝Đ–(ËŚVkrۡ˛ďweU jŤ5űţĆ9ńoœgś¸@­Śš7M“ĚóŠúĐN C!Ĺž!-0 ęČ´Ň|J]ǁ2ą?ŽŃŔL&‹*UQáŔý/7Ą]‡öďúyő[­ŚéŰąSa*ś“ëŰ Z…Íy¤' …âÚBČÂx˙CEé&AüŮÝÝĺő˜đěĹßXˇoމ˘‰ýEŃíůóçLúrÝłgϸĚwß}—žţúkNËřĺ—_Ňúú:—ƒ÷)ޓ‘‡ŕo[ňâUŘDz>› …BqzČű?ţ˜ýŸ|ňI%ĐŠüú裏čO˙ôO鍯ž˘ßţöˇôřáĂ<-ŚBĄP( ō߯ÎńÔ)ö+ńGĄP\](ńGĄP(<œDňxŕ8E““ˆ?€L4áˇěă0…X!ۉ6YR Ť‰Ädf–[‘ȂX•ŸÚtX3”_čqŠÂŞş"~Î?séĄœę ”HĐŞ’LŽ’ů $ ´ Č&(„Nź}f^u#Fē‰ůŒŠŐjŰ2ůX)%fYęŐ‹&Ž1AHĆ׎\zŚ RۓP×7Nʃvâd 郜fçnúv5ݗ¤ěŇT]żŮG¤âó>Žë95&{0ňĎ?;K<ő.§hO1ŕG˘ o,+Ҹ$Źâ•°BTćRhĹiĚdôĎN§ŢdšwčżÍő¨m–3AˆŐސ"FT§ÂÚşăcÓw[NIČö}ŰcŃßń7Ęc•ŠŔŚä‚’žĂ0ĘŐŻŇqĆ÷_CŢȞźšxžŐ6ˆ÷wPż*4xYe;¤V(Wň.!㤲™c,<ńź•ç*žť2ÖXZ˛iEą-ŢsP Â{Oޙ ň€@ôčŃ#&Ąź÷Ţ{ˇÁ:”Űsé…8*ĘxÓP¤e!…BĄP(Î ź“Ţ˙}&´ţţ÷żĎ4üŰźAŒ…‚ÝçŸN …BĄP(Ż/đˇ.˝ˇOü‘ěţޤúRŃ…BqUĄÄ…BĄp˜mí3źńwUĺ$Čţ’–Ë_î˙ö˙žUČaŁIQ9˘€Uüŕ˙—’ÉŸş‚3Ełj„Ź\ÍČüÓp„nk¤ů˛iˆšć;mŮ×UA(ŠŠ ý`ŸŔ‘$˛rćEAĆŰm.ÎNܛI=¤¤Âţ|]żČSBTVćĆ ňÄąMĎh9dŮ™ŻľŸMH$˘H jUbčřÎa?ç1öńÓ­ńzó Ł°¤TR ˘3‚Ë8횞ňhܞŘÄaÄ żČ=GyÚ,ŰϊűŠ\荾š˙‚TĂçoÚ´ůŰĹ™ĺM×~uĎ›znHqóqОq‚TuŽP˜Y…ŞfĐdRœoŔ˘ZíĚý-jViN ˆ ˆ2/w¤ËMšžŽ9´ioĄgSO1,‘ D yş˝Ž™łmnUěvV1%¨Hrú9zAZŕß8HUČVe‚ PšP#j˜öF 9čsyJßA?‚QăŇÉŃąh†ě˜Jš>ˆűŔĎ{ řš…řxëŻ21Ű<ÎZŚU—ĎÇô L #—Ý%sä3Ű&ř@áýł l#Ęá”v5+lcäҀ­„\ĺď'í/ÇŞ-V(t*fÁôçFFRڔítňZĄP\#ěííń3qěćĎXs@ŢÁz* Búđ]¨8ÚçíăǏůYűôéSŢÄź đŒqHHĘ'Ľ÷R( …â"ň)”~ćT~ţđ‡?äŞtĄŽń …BĄPź"¨KçĺĂlő‰Bjż+Šë%ţ( …Cťťn (äůČdü‹‚%eđÇŐ}Ž)\R%Ú´Ýj•ÖűĂę(l]Ůj:!Cć4ŠŤÜ’§Šš˛5Í˝î¤ ˝BúQpÚşpZŠ"•Ÿ˘ŽDEČEDs*d˝T8ĺ›ĚS~˘,´)šňĺgú‡ŻÖĹiľ\z>y6L#r_oˇéTU4ĺcňŘ6ëTşĚ)͎ZŠŽóSzUSŕéä€BĄ¸@ .PŮGňj=UT—ÉöBÂoż …BĄP(Ž:@TU( …BĄxŐŕ“wDѧnČ˙öÉ?hŹŞ? …âŞB‰? …BAĹ ŽŽüă.ğ—Ľ^ňňI?Yĺ{@ NÚbƊÓçt˜™r, (˘›8ȏ}ąä†Şźhp•ô„ćé[YÔźOú÷ î‘iűž°“ăZĺŐĆ5pD>żČ}^Šą (śZŒSߑż/BôŠćœž Ňgܧ™#Deî҅Eoe›×ŰW9? …BńĘŕJŞô) …âÔĐ(u…BĄP(Šů ă&…Bq]ĄÄ…BĄp˜•ޡŸă¨# ]ŽŐĎń^^Ŕ ˜ĎńĹś-ą N‘5żxŇ˙MW<XĽ˙Í4‚ćY÷2úď‰]ÉŤP”ƒ8ćŹëe?.–ěS*ů„ő ďX›ĺÍtžXĄP( …BĄP( …BĄP\AT3<œ”ÎKƒb Ĺu€ …ÂĂI8?ÇŤżý‹d3шœ`ŠS(Q\ 8•ZvţJ3‘Ő~ť^eSKĺ¸gí‡'Ť†¤T÷›‹’unżiœ™Ě)ţŘ~ü˘ˆsŽ.ÓsźP€'úóÂËěfqÖvT(Š+ !wËűM~ Ś÷ę™Óś­SlCşLŽĺh‡Ľ}˛,ĽóÂWŒ›†şw˛,K’„^.äŞP(Ż'ęŢSçőcřAQŻP( …âeaÚMuů,Slq{?ë(Šë%ţ( Ĺ)Ą“gÁyĆ/*onpě×ěŁf3y6Óú‰5Ś /Šo¤Đ>ÓĚíS&'eţśn}~ŽAP_fyĎKFFyćRu‚ęf”×)Ë(ŤÖ/ź"ÎŻüt˝ ç+×5=~úu @ …BqĹĐl6kßÓpň ńƒč‚ôud>!f–CĺúŰÉś8†”ýPż8ŽůˇłŃh•œţţţßuużžó¨[NCŤŐ˘…‹˜V( E:⏼cx͌Gn8ešLŽ) Ĺ뉗í÷Đą˛śÂâX¸Šˇ|ZđŽŰ2ół9Ř9ˆb‘?/q, RĄP(Ž ”řŁP(§ÄË$ţäQá`Të2‹hńŇq֑qFÁy šÓě:wťÁ˜Žö$sAíő ŚF¸˘ŤĽŃ•@PI@'J娳‚‚:bUö‚ŇšyäąZ[0đ6Ë<…Ł”˛ )R°q„Ţš„ôú\,é§ŕőŔÉď;ú3eÓäŤÔ*V(W “ɤvšźą^&CŤŰžDœ™5NŹ;Ž_žŽ„ôƒ˛„”Śqi˙ă—ă“~Ś€ŞuŻ;§şeR/…BĄP\/ŕY\I.+žëŮlŤ&œQŽBĄxyP’ôËÄËW§ĚüŔľkˆěÜͧý_a[ą¸ł)6ť[[DŽćŰŰĺâ;.|ÂĹújyÚ÷ ĹՅ …â˘Ëfu#W:ŚÎâă$u…#šŘ˙ęŰ*đDpŚK†ú†FéšMšÂ™x1d˜™ä°šc5šĂÁ‘ˇEbĐU1’Š€ŽăŤBÇdÉO# Š]âuAŕyF˛DÁäA5ú Q(×ţ{ű4*ó¤›g_V(Ér8gŤ ˙{üńËźiĘt‚WĄP(Ž'đ\Ÿ™ŽQl"…BĄPœ/k|Źm…˘%_źw{/ő$›ž´L*~ß^ĄP(Ž*”řŁP(ΒţŕĽGŘÔLöł´'/iŇfž\š×š˛ âg]ŰŔă\eľçˇIФŠňMU ç<âFçÚwú'G•ßtʉEwĘJ:7fŞ'y¨ŽŤýx+éuGŤúGdó"d‚@[IĄP\KČÄ(RZAżýô\ŔIę9Óŕ“zd[?řĘ ~j1I/Vď ,ŤűĚzÎRôŠŰ÷RŢ­ …BĄxИĺˇ(“ú …BĄP(Ž6ŚŕĘr_éĐWÕmŞŞ˝b÷‹ zŹŞšŽ*Ž)ŠŤ %ţ( …ƒ?8Ź.ż’äŸ<Ť×ůtÓjĚ˝%Ůt\ŇřBJ žä鑢éh~IZs]*l˜ůiÁÔC5K2ŸĄ¤öœŘ8K´™Ëi$›NťţńÇëC¤ŠňÓ&$ŠSKÝV#+-?áĘV"Ž›_Î,_ĆM”§)ŞřşŞfEęÔ_řL=˘HŢVŘ<{‘ň9îřœž*!9› ƒ!č†C\5ŹK]Çćłkţş2o_)óşÝŚ,ϊ~Î=5[0Ÿâśâ ƒXRäŸ 6ńŰĆżą …âjÄűáď4Í48Qh• q@Ę1ŞŠš„lT~P§ˆ‡Tuă ߥ)ĺÔ)Uż}¨ÓRĄP(^]Č{ď‹ę¤Wő}ĄDO…BĄP(× e•ŸúŔÜi*ˇuvy•4+ŕFĄP(Ž”řŁP(tÜń5+rşĘ(>>fVŽ?sYtZdÓ*e>)ĽIJISÜ?¤t2˘†™ź MóĆi;"ż‹ms›Â˘řpNěœ Íwä1óš%„çä’:ć}™˜QuvŚqR°úŸ„b#ëYíĹě2ń'˘‚YÖ7Kžšż÷]ŒÍŇĄ§rsĹÔţ9{Ă üŤ–2 Íö˙ ťA”4Mˇ‰pżdBţ‘"=â×1âBĄP\ȸJĆ#öwý*ÁŚnßY˜6ÁZ•ŐĄfłYÚ? łcŠŔücű㠟\T>—úwĽO:Ş‹œÔ‰`…BĄ¸Ţ˜ö|ű8KsƒHĄP( …âÚ N˝§nýI*ˇÓÖUçNÚWĄP(^6”řŁP(5¨˛žgEGżŒÁ^uúeÖ൞é~Œçq*L›8ĘĚäŇŢî.={ň˜žüő?Ňáösş{÷.-ŽmPÖ] ŘÔ|<s=&´&ćď‘ůňgoo†CŤŽŇéthyy™V×Vim}•Úí6ďƒ3K˛”úý>†#n‹Č8,ąN>˜ä‚4§kţ7 #.ŻŰíň#zúř §ó¸uëuĚňf˟dK™řg(öÉ! 7‘†>ÔdňL&ÝBN“uÜÉzV7hVˇ;I¨f͉ĐLiř)Ńţşy'ëśó×ŐîŞ÷âŹvśœ9çŘęŠ)–SœiœŇ$ÝăIŘ0Q3ĐYœâçIáĆu:ĄëňoPţ›rŐŰĘW`šr ТҴÁJ] Ć5h‘˘lLQ#˛tŸ U^BĄ¸öŔxă|ďďďç•:88ŕńĆ€¤Ă7–aŒi„Œł´´Äc“iŔvxž˘ ď*~ˇ˜ńÖÉr”żGŁ×ÇA]D‰Hś­’Ľýą‡Ŕ'śWߑÓޕu§—ĺŘT‡ŞBĄPœţ3_Ţg€xSźÓđ~Äűď:…BĄP(ŠŤŠŞ],ËŞó;ÓöńˇŻłAýrý} …â*B‰? …âődieP–U~Ô°)dj<T5ބ9ĺëf‘0N;<ÍöÁ|ë‚ňr>BŽ7ÇérKËƚٜ“˜˜Ë,őBNˇ!¤Ÿ HeäĽëJKš\Z°dV Xˆ‚"WđEŕ"H?ĺßN 'W˝™§ěŕň˜ťgü%ł9öŢąĘä´\uˆ*w ¨•HAljmEď͎RŞnLPöIbÓg'ť4ĘŃ$yJąéť‘Y–% Îjŕăö>iW!󔞏ü#ęJB ŞIí&jZöwhîCÜk s4,ٍ–Íž‹Ś/ˇÝţ-ŻŽjô*Šë›F+Ľ……&˙nnnŇßţíßňrŒ?Ţzë-znĆ2K`ňËń7Ć8 (ßťw'Dˇśś¸<ŒîÜšCß~ű-˙2Ć<8FęĆG˝^÷qGˆĺŘŰaœ€ V}°=ŽóćMŢ˙ńăGŚ–(b3&ańßBňQ%üTeĘg9.Ťďęiřu¨* ĹĹď—ۡoóűăÁƒü.‰ăŘ˝GĘĎŰ_üâôŢ{ďѧŸ~JŸ}öí{}žt– …BĄP(—‰:˙v]é%“o¨•ţďć󗄉é7ążÇü8q—Ę5ŞëĘźiE”š™wuŁ ĐřŠ<żęi&Ĺ#ŤřĂ×*}ĎλロŤńxĂŕńăÇLňůôÓßóoQ÷Y__ç1 ŽłżżËÇŔ'bRr˜…ęŢ˙łČ?ţ6Őýdb÷$e …BĄP\/@a÷ç?˙9żGžůć&˛–&śźmńŢ{çwřý†íţ`ö-uăe’D …BĄPźž˜Ç^=I…žNé§,ŁP(×JüQ(ŻGűS†´`cŠ“ą)k`ś3)¨ÝmQŤÝt§ć:‚#7EćŸ( ŠËgŽ‘„śŠ0]ňOčÖĽÔägaԜŐxŢßÇSlHz/ić4ÍŚFL“%­Űśf š}˝ë $!ý'"c•dťY‡ÍŚ”|]ą^{@4’É[ŞœÁÔCŇ˙ĂÚcB퇨OIv`şëľ’oĚ`éËâ<‚„.•ô,'Ś“˛˛RRŔĚEw˝üç ĺäŠúrBóÄßhă +Ý&üE!&ŞoRz Ĺu„˙žÄؤšŻżţš ?g`˛s{{›—#-(:˘Ö#*>˜42>Řn43ąűíš1 Ć3‡`l‚öž>}ęĽkšíFü[đ ˛ʗ+çˆ2Ć8rÜş”_Ős­;˙Y¨~t"WĄP(^ €Č B*ŢxďӞńPűÝď~G_~ů%+ţŒa_“BĄP(|œ¤š­P(.UEŰY …u)°§)ů)°Ť6 …Bq•ĄÄ…BńZ ë(5ÎŤ‡ß|C<¤vœQ3ąľÔŒăâ¨őą‚8YNhÄ5<’P‚ô%ľ_‡Ę">Ç @ođԁ.Ä`œBúq€ZMčNśuc“–˙ä'´|疙œZä´VçD°#ĺ§łhXŇ&Ě0†É2€ 5DÚc˘MTzŕ\][Ł3‡Čy(ő‡#zňä OÄa;L¨}đÁfŇl•ž™ë:1“a8˘AüÁ“f ˝vjb2omm•ËÇąP—Š R|a‚FÁh0¤Ý˝mŽ+Ęšuű&­oŽÉ™1Er}Ěü%ŠGîIl?ÂüßĘ5ČŐ˘‚3;M-ˇęxôž|üČýŞ!3- ł.Ľ‡”1˝ Ôę„á4ŇOvQÝ˝T>âÔmŠ”}>3Śś4zU`›¤ iO‹ĘˆN˝2űů˘P(×§ŕl˜qÁ„ž={Vręaź’ Ć'BHŮăx0ÎÁXj=ט Ĺ6ř´˘ ÷`_ţKdĂŒA°ăü ŇĆ)(e` ‚ą Ć/ß˙˝W߀Ç+Bţ‘4_ţűžú–óŞꔀü˛fŠ …Bq}€wŇZ'=בâë7żů żű€P#Ţ ĹkŽéăă—ő|ź`§šBq áűÄŤ~ńyö̲‰…H¤6ąBĄ¸.PâBĄx=02ŤÝ|ýí'ÖęhB͉có8ńBŹ$+™maReŘŹ2“(iPLœĎöe5gő냋4ÚŚą-äăÂďžKÉ÷(ŮŘ  y—˘ă5j 9žŚ<ńR‚TN$ĘĚäS`&šü@ągqaSuÇmJ01föoľ[üß‡fmw˙€šČ”Đž™‹Í„D—đ;tŞ%PóA Śn§Mą™‹'cV1ZY^2ÇčQťŐb˛ĎţţOŞĹ“˜U€°Mjś<évttČNŃŔT=lÔíuyßX.“œ ä° ƒl ˛ Ë ůűU!ŠR@ŕ‘}wYĺňňîßż_ÚÇFu÷U~ŠőáąhÇ*éwZJ0żœşĺuż …Bńęö˛BĄP( `œ,jiÇëŘXĄxšđmޓě_˙ďi$ šąJź°Ü÷ľë˝ŻP(Ž:”řŁP(^ „“1‡ű=řžř„VŽhŁ2SJ\äá¤ 1MPv óI}|§5Â.ӑM˙} âĎ IfîRBa攇Lť¤ţçćwƂ6Lœ+UŞěĎÔÇňjČ?#ÝW‚¨ôĨgDŽ//-R§]Nw%Š,z˝.§ÝBšŘˇÝíđ7ŽupxD;{{´šžJožqžűţ;zj&ŐZ­Ö×V™¸ƒyˇÝb’ĎŢţmomSŻŰŚ[7nň1@Œ9:اçfßʈ…@Pih4˜ÉżC.‡ó†4ĽŇÝťwY™ČyRsŹ‚bd| Žgk”Qo˜PjÚ$ЍgÚłm_ą“ ĄI˜•ۏf_˝ŹöĘŮë“Ę„Ÿ`œdE™UâONßňOžÂF5,™Ź˛ÝIđÉ?Ž€bżSŘCuů”Ťë/Ł’úŃÉY'+#óHWŽÇÉ?OËŇ4ëňG6(vä÷l  DĘÉ2{ ˛ę Đ읡Ÿ™~˜ś)Kž<ć[ŮŤS@ ×JAr ;điż&“ŮG$ĚzŚ“/Ńx‚”1#jöv¨Ő9br^Ô´ý*ŠfS3* Ĺ5žűx×Ăao•t˘)GĆn˛@j[_YӇ_ž\Vär…L”_ÔÇŠ_§. ÎKÉăÇWć‘sŹ#ťgž5ĎŇěĆqÂA‡Rˇśń‘ŹŽ´9řđŕ ĽÁ0Ľ„}t¤P(^"ŚŮˇÓR~ů÷˙,ňÚŁ …âşB‰? …âő”X 3RptDĂjšI!úřğĐç=”ˆ? ú„Źôb“§ţ3f /Œř3{ψK0HűGŹŽsúO …ÎđŽÂ<*ę>ŽM]!F;œ0ä} ÝXłŐ̍ö†Yß2ŰAi5pZn?8˘ dŽ t|şÝ§-ťsű6Ýźq“Ő„ ćƒČý/žř‚=zÄ)5Ö×ÖŠcĘé‡}@BZ[[ăčFLđqô˝ŠŽ ŇRԌXAĹÖ+p™ťËë0cőÓ֓'L:Š–:Ô]ąŠĘÂn“Ns]ç%Ž•tŁźT[óŕ,ƒ§ĹüDœbűÓŽŻ.:]‹{¸LZ’ľÓUyĆă ;˛†řž óAü_ }$Ÿń$egÄ);Žŕ´ňWRgqQ‰Œ,>’ĆĽŐFJşČ’y‚ űšŒęŇĚҚPŤÝ0}>2÷ĆOjGM3ŠÝpĽsşş‰9~ȸÁQŸ÷F–§Ś´´62Á9çZ&ğşVSҏBĄ¸ž˛ÍˆZ={ö”€†ă!Ý6ŰmlŹS´¨%sŹ\$Ć4ŇxBă~Ÿžýúkúúťo¨š˛@›woYĽŁî2˝LTÓ~řËOÚ—ü3ËК÷8§%PŕLf œ@ťĆ‘ľHtŕ2Ápz-JL˙ šOÁůsx4d˛ÝgLĂÁˆVŇWĹÉĹűËÇS˘€Ă ÇZXlÓâb—–––Ě=Ô¤gOLY1—âĎjSÎŰ´ź˛hśëŃăǏ™„śşślî——)“ˆşLh{ţ|@ßłoœzmăŕj›Qá„Z=âr …âU„ 0šŇLli‹žjđŁ}L“3ŻŰśŞä3­œYe( …âjbÖóz–˝Tś;őńŚÉÖ*Š+řâ ˙‚b„|#J;c;ë˙*Ô3„ŕ#Dzř7ŕ˙˜xĘ8€oŕwŔq€jşZöĺqĐTĆu¨î |ÔŐOĽ­˜‰JVęÁvBü‘şI ÎéŔřQG ÄÂś8Á ĎD˘ČůĄF_ ΊŐlŃd8˘db CK zëŢ5Ìöśú´ˇ7bő…BńrŕSβ‡O[ŚOJÔ`…BqĄÄ…BńÚĂ*~yúމÜĹa”›“‡ĆŘë7äqp˛ŹĚS )K´dS”Bć­I=Š;.Í| i kŒ×5cü6`4g5ĺ\2l}\¤0bşˆ9r&´i„œâÉ4pF$÷ˇB2†ńˆŽ¨A^w™’xÂˑć+4†>Ô{ŕPXYYeĽ!¤ôšŒcë0˙ÝŘźA?˙Ó?eĺŸ{÷îŃĆĆ&őŒs Dőě=ÚĽŻžü’ÉptZPZ¤VФ`”R`&i”qjˇŔĽLăo¤7ëĚş15S 3‡@›VM-ă\ş‡.vyť\B˜ÎŠRBşüo8:¤­ëëó%ůÄ!]:N"ä\9#Ę]ŚŔ}JŤĐßR¤ł#jw[´dNŤŮÎŹ;—R&ţ´;MVüYZ 85‹ud5)ž€đch¸Ě3ĘXr_l`¤˘á„jĐ$n˜ý:ĆŐŤŚéă–,„m.dć6O&…óŹÓ ĚńcŠLż^,QwÁϡefŸ€É?vĚÝęZ‘š?1ク Ç™ßH6ĄÓ!¨ü­0…Bqőá§'Ňăe˝—üCϏDžOYÇN†TUůŞűKůYCü™Fţš(‡ŠBĄP(^f=ťO"w˛ý3%˛=œQfţţQćBq­yt˘‚ Č8UÖ ĄřË  #*Ĺđq ňšç öƒŻMˆ?˘ž#”/ŠŔdüuB"˛ţC›ęËGĽěƒk9Ĺn<Ťúƒ!űh$° đ'î­j˛ŮŽßĎÇű˘f4 ibʝäĺĄXĽĄśń îĐxdU@@‚RR#HéóϷ̒CzÝĄöÂ덗â“sDmlZĐk[Míĺđěu`%˙(Šë%ţ( …ŁqČDő8lĐaŁĹéź`Ž>\ěŇłn+ß֘§×WŔ2ł€GčŔ,|fœÇ&]Ś8ŃČ "Kۓ%#ĺű‘uÄÉvYšPšÄůśLT0˙đrĂĽ‹qB lç(JÁ Łr.lČĺzçâOŤŃâST^ÜwžRȔ—ÄPîéÓŢî.Ťô őˆ?¸rفMľÔí´iŐç ő<{öŒ>űň+v4˘ݸqƒnÜ˝Ko˝ůf݃Aüp0`ľ ¤ű:0ý'żýÔŞô ˝Wo‰6—ÖŠ˜k?J)ç92D›óstË („šË8Ś5Ó6È6Ěf­ý}3Ť¸HagŐRË2ű9;'B ‘,'íŘ>Uí[Ő ż:ă§ü}Ѹ֓‡BüqËő˛j1E€UsŒ‹sˇܧŕT"&ÖXŮhLěvlîůŠěě\*HŢ&–¸U,XŰh”î“ňýmŽ$´ykÁü˝`ʑi'ÇHhy-¤ťo-xű†^Єčt5¨|+ ĹՂ<ƒ}‡Ÿ8 eŇbŢçt§yďUI@'łkVQÝwžI_˙üOŁş§NO…BĄ¸ž¨ž+JďĎD­{Áš™ö–ŇwƒBq˝u(\ D‰GŇ^‰˙"ÉSiY?ĆʒL&ŰA¨Š>@’ňđ÷Ŕřݤ<ćÁg Ümlů ŘôĄĚcĘ  *˘áˆ†Śř‰;&Ҙ )~!ĄNŐg—‹PolÇŠĐُkĆ˙‘­Č?X‚PŃ ľŘ÷Ón´śÖeÓÍ[5{Śž'Ĺiď¨P(^ޤjZŻlJŞ/ű ŠˇŁŤJg˛NÇ; …âş@‰? …B10 ‡ăíĆ#ÚŘÇ%Ćx˜Ză-úŃ˙ňżĐĘ͛äOĆě|öÚúĂďéᣇœ“€ĄšžžNˇŢ}îţüçÔEDůŢÂĚÍźü=üäzd>Ű;Ű,? ÚäÍ{oĐ͡ߥ•ţZ=79ŸŮ8şĎţˇżĄoţá˙,rWCu&°2šËd°ĄÇz‘@~mŽžO6°Y˛7#":Syˆřyúě9§ëÚßßgő’v§m :K˔t{ůŕ†űýű÷éűďż§?ţńźţƍ›ěœŔí#ƒ{äéF*¤çŇóçĎšýĽ_M{ďĐúŸőhľÝŁŽqœ•á8`šcĄ­_5dęÖU}¸ç!ýT÷­Ú?ł&Ż+Ř84}ťé˘ß2'ůeFâTZVČŞmAő§NńčÄv™ăÂäe:b’wĹóý™řř+=Ó Č”źŁP(^Aˆ“‰ ™(˜—°^öĂqÄ7šŚ’ę‹hŸ)žœXœP"Ů7!ß<_öžoQEv&ýDÔîuLý.“ÉóŽT<‹ŠgRčĆý8îd2ć ,†nűI<áßZÄ^#nŒúGćźŕ+4ţÜć˜nŢ\ä B(=ŰÓÓÇťô|ßě˙pZÄĘô‘¨PźpČ3K;bç×ůc% |!2Ę>˛NĘr¤ŸŞđUôy+ŠWJüQ( *;ą`ňĽĆcő ?¤Ý,Ś­´Á‘!Ó NőĆ/I÷>úIęŕË˙ľAť÷ż§cHőäÁčDş¨ćň2˝qó&˝ńAË ”>zHáâ…7nĐá`@_ú)=98 ÇOs9767éŢ~Hk?ř˝óŻţő66KőýúëŻčń_˙ŠŰëRťŮ˛˛Šy”4h5Œń۴ğôŇ ČäSœ ÍÖ(ĎŐmħł‚ąĎQ˙ˆž˜v98<¤á`H ‹ ´h–ƒÔ!(ޤ”Ä ľŕtŔçŰożŁožů†îÜžC ŚýA¤ކÔHšî:fáôäąmď˝˝=V qčáĂGô˝š†˝N—SŠ=5Ëßşwn.-3 űĐß˙˙ŻĎ\Łáý‡4yüŒ>ţřcZšw—śvű´˝űœvśˇiĄ?Ąźý!ľ7nŃR–QH‹y­—Iú™žÝŤeáźĂ 0(Kt›  ÚIÖKňřT˛h1Ż'ŤŹĎ˙ *’ű’ nŽĂónŠP(× … ›D"˸ĹwüöÝ5p[:2ĆÎ)i˙śŠ8}bÎYR´Ěť~ÖöUćE  …Bq507ŃT÷ ĹkŞâD ?ľśƒ,śyĂóő€ŒŁĄć#ă[ŹĂţš‚đ.äBť|)§ÜĂš; f¨—G ç›ĹŁx@ŠŰ/2>Ŕ4°Űă¸(żáĽřŞ:KJńO5€ňČ?Ř`˜Ó‹;í€VV"VrNłÄř&ôôéžńOnÓŢј&IŮݚÉ?JţQ(^|ĺB_ÁÇ˙T ˘ŽS’ßu)Á|2‘ÚČ …â*C‰? …âľ}Â"•ΠѤýV‡â”öŰ)íŢ\Ľ˝[Ť´žžF!Eôě›GÔÝX§ŃÚ Ńę"ů†áóľeúŁű|ą˛ÂË—hźşB­^‡nNĆ´= hßĎ Ý­š}ż3ß\[ĽŻ÷VéńĐŚ­Ú^]ŁEóYZ_§ť7oPołLüy˛šNźšI|ř­mŢ řÉšěěŇĄŮ˙p<áÜ×YzqÚayWaá,ď›:MÝ6â`ÄqŹr&FRGšĽ´C3˟ĽT÷ˇüŽN×ŐáeŠ9¨3UĄP(.Ő´@žB<ÓÔ …ÂBRsÁŸČظş^ţöU2|řϕăëƒŇ¸Dů‰ąq×řbAü_b'Çężöă—S|Žřƒq¸¨j QÉß!M͘ݔß?Ú6žĆ!ö‡ĂŘ|ĆŚ#ˇeV§Ďku8˙U˝MqÝŕűŔ}Bŕ“~ęTńe<äŤůđ ČsMž-U’Sď…Bq•ĄÄ…BńÚĂCDdNÉcFÔo´ĚÇx í-öhws•zwďP6igHK ‹/t‰zćFěYöłü!ÖłâOZćsŤŰĄĂFHă(¤'€Ö-ÓlŇv§cöY0Ű/Đă›ŇkŇ[ Űćď-.QźźL´˛\ŞóÎň"Ý7Ÿ;oÜŁřŢƒu”ÄtdNŮłÓd\k^°Ń™G÷pŠ/KúąiŞ âŃ<ՒÁwfÚÝ śKhŔŢŢ.;#@ěŮŢÚĄƒ˝}ęÔz>˙üsę™ö{ă7lĘ­ƒC&ý@–ˇŮn‘injĽ-V$B”ÓĂGŒ˙”nŢşCď˝˙uĚžřÄp*Œ'”ěěRËě´}t@#S—ÖŇ"­Ż,ŇF'˘Oš sü-şń–Ů÷ç?fšáÁрWi9hRcmĆć›Â†i 'i|.EáH(;gëČ>Ó<ĺ(]ůwů¸g3fŞež2Ń&mŤçQý”žNy€üßăŃYí/ŤřL-í8éGű …âő…ďü“w“L``˛ÁWä9ků'[>œž pOꌦ*Ӗ×MÚÎRܓÖ) …âzA&ȁjzČ —úTBń:Ącü\Heěîîr 0yN˘ˆéŤ$ů“ČƒÇ×{Š¸Ě§ÍŞŘvýZťA?XnP×l˛ť?˘ÝABťIFçrEJŽń$Ë5ב ,ËIEÁąňgŽdÝ3O‚Śd⿔.7!J&P}iggďR(•ƒŔŽă˛ÇŇęßQźžç“˙\űzšşŞęă§÷jšů™ĹĹEţűŕŕ€çfÇ(ůGĄP\e(ńGĄP(26ۂcKA.yţüšËgÝbu™łD„CwóĆ ę-ôř÷ňŇ2­­­ąą}꺌6Ÿ6ęŐýűď(ŰÚvQäç°ćí˛ě…ëu`°ŒsŮfÚÁsč)*Í œ Řöxßźu“Óšađ=Ž8-Îމ-sއ‡Ć`Ł’67ođ>p`Ü˙ţ>§ýB}@üŮźąÉ#J ´˙úú:Ë#˘čáƒÔívé§?ý)íěîĐáŃ—ľ´ŘŁŻżúš–čĂ?¤ÍuZŘܤ?ýł?َŢy‡–7–hqm †fÔ¤•ĹZč,Đćí۔4{ˇWЎś™§™Őî•eő˙uŽ–ij@5­ěĘŹwÔ†ćOóőŠ’΁Y×!˙÷Ô¤°ŹtéÔîT(ŠéđƒcཌqŠ,—Ô_’’ŔžżĎ¤,˙wőď*PŚDc,"ę„Uéđ:ŘmŇŇ1ŞćÓętR˝ŚáeżłuňYĄP(N‡“žőłlьĘ~ŸŤĎc…âŐ|f?űŮĎřď_˙ú×ôřńăŇz<3fĽţ:Šç R{-›çKŰ-{§•Ńżşi|zfĹcóúÚ,˙t@ôĚů7'™ńw>uĽM_rru˛ŠŤŇ,8ž:+žXńgćŁ÷z8hŚŮ ĹUžO°ŠŃw…´č§ńŽ ¸ŠŽóɐ)`ccƒ˙ĆsN‚ƒŠ`…BĄ¸>PâBĄPHČFćÔ10áÓjP'왙™&-Ż.ĐŇň‚vÍŔ˛IkëÔîvčÉÓ§Ôl7m+7Ľ×íŃ훷˜œ÷śÝŘܤfŁI‡ťű” Ç4>8˘ƒÄއ˛ĚŠ1¸oßšĂ)ŹPŘĘĘ -./Ň8Óýčŕđ WďaăŇÔ÷ŽŮž×ľŞB­Î…‹ŠŠ_Híሂńž5ÜÜ>ÇÎ÷'!&Ńŕ ˛¸!tX• €‰8|wM;.,,ĐÖöŽxďÎc<ůt8-XbIF óđą1Áf–Fă|0”^GG}& !mŇ{ľĄ€mč°?¤ĺ•Už 3č_1ۃřCYBODô-={úŒn™kłhę‚úÜš{—F‡t8Úçˆ#äOâ Ľćľ§hq™’î:5ĚśažtÖľK“€ŚT5‹L7;ŇmŽą"ÚÉď+AĽş)•źMĽ2fŐď4÷ađ2Ă …âR!D<“1>šqăÝI׌˜ńÖŢŢ˝óÎ;üAäó7ß|“GY€D ĺŔ>ú(OöĹ_ÔNŹĘńŕÄxă¨ÂÁˆŠa5UBłŐyüwvuÔÁßv^脯BĄPź¸yó&ŰÉ A@ žńţâiüËżdÝ_ýęWôÝwßŃŠô} PźŔ˜ć#° xôč?06ĹscVl‡1+‚úđÁxy{{›Ç°ŘVíŘ~3<_ÚěŇ­fBëc3ś6Łƒv‹˛AĆ€‡qâźEzőăŠÍ ĚóÄ:ÉC’eÓˇâό˝ç<ŠBĄ8-dîŔłFžGó–…$64ĘBŔ0€żŤžvľ‰ Ĺu‚ Ĺkk62{„Ó1‘™Żi,v¨g ÜvŻK㝡héć†3€CcpŽyjýýOôŰO~K3Ć­“,6FíćÚ­-ŻŇĎţ$Ľ9cC7Qdöůő˙öwŚ8TB“fD“vÓÄzç˝w鍷ŢĚŮébˆŇßţÝßÚčó@˘Ďí¤˙_üůŸłaÝ ´xëm l€Ż?~DQ˙sĘF./ˇ;OÉ]íx—מŽAĎšqÚĎi‰?™Gśh™6Z —Ł CËËK<?ÚÜ`‡Áîî89Śüˆv°o űűLęyç]ÓśožE›ĆŃ9 éÉţSłď‚Đ–ăń„ AŰf‚o˙¨OڜąŮęL÷Ö×xŔx°Gżű†śž=7“€_Óćň­źyϜr~gôdk‹žüU0×ůho›:ćű†9ćâ͌ÍU^.˝-đ•{ĎqATâX’Ílë\-Śf"ď$ä ôH{W8/ů§žÎÓë3ë÷Ĺ ŁÁ§n]Ţ˙RďSČ8O­U”ś; m&óœWY†IćŚ[×nBB´É¤ˆsc}y˘¸$˝m‹Č1xQĽ_* Ĺ+_âă.D;ďěě°úŸŻŚƒ‰ƒAˆ1&4ŕŃ÷îÝăÉPŕ÷ż˙=}üńÇ<ćyóÍ7íČE˘,qF.//óD‡L~`{üţă˙ČcĂéĎÝěRД˝*ŽOŹP%ÔV …BĄ¸Ú8ÉvÂťîßýťÇúŤż*Ľą¨ďźýčGôŽąĽ˙Űűoôëú'ťč÷:¨şŤBq}€qí;w˜čţÖ[oń˝‹ořĄˆą.ük§âY€ń°lRÝ|çmV…Á”˙dbŒÎ‡é˙ń)69767Ř † Ł;fű7ďŢe’ÉęÚ%fŽ~9jüɡßÓgżů=MúCLš‰űÝlB‡ŒäĹĹc€w™P1t鏐ĘKŇZĄ^ ö :ďŸýâĎčçú/¸NQj&§†DńÎ=yđ€–L]˘ď›šH“’¨˛źđšü)ysY8mć2á§'g•˛"SN›­V›P ÈĆ)0ąƒsžh#oŕü&Ý˝s—÷;88äöĂő€3Ű †ÖŠRWˇgŽAˇG-s}Â(d5&ŹßßÝă‰?\c¤üşgŽůîŢ"Óúě8Ý1ĺ=4“€ %őĚqŇŁ›~b|”4he-ŚÖY~Š-]ž¸++'ĺW÷Ë(–I*“˛‚P•ôsQ䟫„\ŘGԉ‚bˇ­“á)¤N*ít(ČyňmđŔ§6Šľ¸˙[™mL§ĺ˝}žŃ…HMŤaŤP(^mŕ"ÎţđV5Ŕß#ŕ}…?üĆß؎ÇmfC҃a˘CƒO`\‚ńČ@[[[Ź>ˆÉ ŒáD6ď”ąĘňřcÄăťH˝YjÚŸŔSçŒ,‘@§ž˙뷗íÔŠŻP(ŻđŽÂ$<ŢO ˇâýUz—xŰbŇó ś~ňÉ'üžRë@Ąx5:ˆę 』çH@żâƒ1'|_˜DÇśÇŢşu‹—cŒçHđĂ›››ôöŰołŞĆĘxĆ`ȆxŽŕů‚ýąă_<{P~<čósĽÓjŇM㽚ąH ˝ u#2ţÔEZo´ŇďQĎřű˘pZŞBŤ^*üć՗€â Á˛Šłueß_^ˇeY›<ËՃŚmŤP(WJüQ(Ż=DM‡a„ ëş0páşňᇔüô'`QšĽL2A )ş‰1\߸{‡ŒŃŠČ—e—ţ *3o˙ŕ=é8ęńŇփÇf›oé`{‡'}v&Cz<8ämadßž}‹ÖÖ×P#Úzţœ bCdpad# ŽóţKúg˙üŸ3ńó˙áčŕŃsʉţđ{j6Ĺŕ–ź*“.Ţ0ÎՄ<ŠL(儔äUç);ŽV׹Š4šÔéŘÁ{<‰sĎL¤9rTÄl 8+ŕXŕ”i‹ËL˜‚cŰ -1a‡öEX‡e ^­ß¸EKf˘jO¸n’öăpo—†G‡™ĆţꍯčÝťˇ)ţéÇDaÉ2Ł›°d1™şaň/íŽŇÂ)r Ÿ0ďGžÂ|O›đó'÷fEöű¤Ÿ:e€óňŽ7Gˇ›G}ŕ"x˙2-Î;Ż ź큋 “=„üs6Ě$eŐ0vС0iÜnő¨ŰîąSŽŃčÖěKyŤMŞP(óă믿ć1˘…LƒńĆ0ťa ÇĆ xG`€ßř`ââáÇ5ńĆ< aŹfÇ/1ăyŽčj–EFcŒK€“Twě7͌`œg< đÇfӎ­NN…BĄ¸^8é]ŇĎúO˙‰ćÁ?ýÓ?qš/ŘĘ@¨ď…â•ű,Úű@͸đ˝÷Ţăq)ëřr ¨hŔ7†u Ý˝{—ËĄŔ2QůÁ~;|ËXŰÁˇ‰g|t7Cőg?ÍhœŮdĺK˝.­,ô(jöÍ1Ű´´˛J=ă‹Œ70>Řäř‰đžçńeÎĂsš2‚Úr^wg3~M‡\‚ĘwVů~5™SůŠş]pYU  žŸ°­H:mŠži~ Lu^˘<‹ćŕ„T}äŁP(Ž”řŁP(˜1eÄŮžĚ?Ilţ›jBM36l"OőÂ",S^6˘VŇÄŸœşÁ 0łO<ąyďÍ&OîŔPÎBkDb˘§a flI#̃RsňŕQă=cäJ>ŮAżĎ6şdUçšKƐ& ^ÁRh÷ú|ěŔ‘_đąi~,qÝ4'\ůÇ˙;c’T>äˆîß~Ăăëlę%V7)+ů:ńŔ=°| řŃ&=ă,č™kâ “Il&ä™É¸ŻéţýœÚŤŃlĐęÚ:Wx{g‡&fß!˘&Oîľ[mZ_]ŁŐĺes†œn`Ib&îŽúôđŃczđř =ÝŮĽľŐjöčÖÝ7)k7ŮáŃ1űGă .B ˇz“B¨8â“0ëę¸Ëz&L‹ě/H/ő“ƒ˛íyČ?WŰ&ĘĘ•O&éżwq‚zëőXÇ jŽ3ĹX&(UuM_ hbîń'Oş˙ŕˆž<92†§šŻˆĘMéƒnŃí[ŤŚ_oQË<œĐĎ;ŢśLőbWVځX …Bq €¤ăŃÉřř€cą#őb\öĹ_äËA"Şbä”!( a耓Ş6Ő+ĺëŞ#ÓŻű¨Ś÷Ş::ëŽ[ujž,çŚ:U …âbpÚçiÔ˘P(^9ˆB7|“ Ž[_Z/_żĆŞřic^×á×% lAoŘ~8ř7ŒEÝR&ԑ6L‚$ňńŸÁz`†ĘŰă>ĽÍ1Ż?ě§Ćó1|{jNŽœ;Ą1Îâ?Š1^Lwi).u ŽśĂăŮc–É9ň]ľƒ};şšĆ v9ěsůťŞäŰß …BqŐĄÄ…Bńڃů`†c‡ďxBÉhHéxÄSb–%ČF6ťNcś‡?édLclk–”ÂéĽ$gljŁO00dI\¤‡ŕ”Uó)ŕČ3p„ƒňȨfeC@”w(ĎSäH?A˜ďd)]&d0 ˛’0îy9)źífŒ>ąÂ Ź“ě˜šK"Հ†#›Š·۷o3é Ž }ţřÇ/čWżúúěł/čŢwčƒß§ô‘ŮŚGĂO?eˆ?‰ŠP{wŸnݸEk+Ť´şśĘ× UGĹţÎs:8ę={N?Ľű滅|ç›7轾5z‡~Ĥ$Ô5!Ď Z”…]sžČ/ŃI˜śÉ4Ă'äřĆH݄Ţ4ş“PGţąűNěŠX—?r&-š§|fۼގ9ˇËšć1łbœb;Ö>ůýýő˙<éÓÎś1dĂ -,ýßú ôÁ›tt¸OK‹}Řz‹6Z}j…űćHóŤJ) …âĺA@§CvbDĺ,ÔIœŸ” LţžFşlźŹă* ĹŤ °R(Ž.S D(V‚ŕ…KŠżŕGQÄt°RâÂŻ÷Á01čË/żäí‘ţ žML”ƒ_(öC ¸ˆąŻL¨CĄËDES–}÷ݡ”l5hЍiľaýˆOĆ!=?ŒhĐO8ŘŻ§Tý96śĚœU‡œ}ĎĚĆeŢׯ¸ k¸QÓróšŠÔÎUé'ts8X& B2#@mT…BqŐĄÄ…BńÚĂí€Ö î4GV‡ííÓdë9ě’46†đ€É&KK‹”dĆXŢĄC§Âƒ}Ŕ ß7ôł'O(1ăĞن.”z 4Y°AźÔŠčćB›gν˝CYj'9vw÷X­ƒKI'!Q9ț$)=1ĺ‡Ć¸nPH­~FŁ­-J Ĺ{Ěđ-łÝů×%Ú’ÚĆ|<śçÚî´č<Á9Gů@”Éœ?6ÉŔŃî/ß?8´†Ă#zôř‰qh<ŚRߴᶋâo6š´šyƒŢzëmęv{ôĂ÷ß§¨ŃäżoܸÉN´áh4¤őľ5ţýüé#&yáXp ˘Ą×ărlť†|}˜œdúA*äs…RG™+@fŠäOŢM+Ń÷~¤‚üŽF"T'ńJ‡ ŚG+U'Ýʤż" ÉYńňíŢě„ĺç ošraóuH;74ގ§Śß-Đťď|@++GŚżîŃÁ‘yÄczö|ÇÜ[cÚÝ~hž?ŽmÓ{ďÝťSë|ˇ˜BĄP(Ž4‚ZňNć‰FœFú‘ßWAÂ\â …BĄP(řż˙ţ{ţÄŒšŕżâ”}„żEAvđí=zôˆŕא4€ř-)żŕĂ6řŕDđŰɄş”Ëž<3Ţ˜eŰĆ÷9Řݧ˝C˘ă×X´â紗†ô nŇŢÄÔŮřcÖjŻxUfšY*8ýd}@ePő÷ź˜ĺR(^u\|˙ϜôźJűËeţ .ŕEžýőBü‘ý„ôă§ ˛BĄP\(ńGĄP(Čú %:՞FŁIi’Đŕ¨O{[ĎéđÁCÇOh8ąFëęę*“;ŽĚß šHT Ří­-|&Q`ś3QF/Ň;.-UłŃB§Áű‰”vżo >0˘Q&ę…ýDfĆ6Œp,‡Ąƒş•…´ŘO(Ţ> ąŠKťf0ZŠŘÎ.ϸ”A1:Gý#ŠGNGt–2Ä8@Yhƒ|€ž¤LŠ‚łmeńgooŸvL["8r L›‚DLĚáč˘Ă#VňA˝°Ď÷îŃâҒÔGLĐAJ6Şśˇˇh8čó5ńç[Óö‡‡܆űűôůç_Đí[ˇčŁ>⪌”XâT˛ŠBĚ)¸fŠűTÉ=uğcĺN!üŘďŹv)ŻŽü#ű8{ËűűôýëJLîÂatŃ`Ş^š™ţ54÷ő3 Â%úŃGšţ;âȸîÓłgOĚsbËôí‡ôüÉ6-.âYSťŮĽ›Güy‰'˘P(×§}MSÂťlLŤgIeqŠ:Đ´:*ÉFĄP(gF˝+§Ă´1ÚyË9 ŕoĽ!đŔż_(Ɠřţîťďřo!őŔ—†‰pAÂ߀őŔp8ĘÓߊz†(eČd9|z’ŞKŽňFŽŰĆv`š 2?Nˆž1E‰kĂxAŠo|°#˙ĽMĚv1ĆÜĽł ćŚokç+-šEô™çHŐ Ě“ŽÓE?CO*/›šg0G}뜘ˇ?Ö_œç5iNlžĘÁ œ˛zŞmvRŘ€'lZdÇţ˜}°ŹrČŕßřç'rľó< B[†e#š…ôĎ˙ů?Ł&…lˇÖW¨sk“î?¸O÷wDŽDÇČUSţÍżů7nyĄřňůg¤˙ď˙˝U2öóR?ĄÎÄNßŮߌ[PţĄœšaS˜Ľšd ]&d ęFiŤ‘GűYacl_ľR&гˇżGc㐠„<ĘAú.ä˙ěvqœđ@Î8 Źôěé3ÚŮŢĽAhŽ óPIşÁ)š6olŇťďžCk+kôäńú›˙˙ß°JP§Űá%Śš­ˇw݇ëŃbŽŮlľiqi™—w{‹ćúś¨?œĐÓg;´´˛H˝Ĺž9/smSrQH…ĘĎńF˘âÜŚÉAĄ1#—lV´ÁŹčý:•€y•¤źiéA.s˛sÚ1/Î ˛.׊.ƒALOžĐÎNFŤŤwM߂LögÔśŽČš€ZŃ"“€&ĆŃ’فšçżů~—nÝJč'-™*FŽvIQĂyŻ`^Ă:PúBĄxu‘Ť zďÂÓźg$߃Ôqëö9éÉ:ýŒýÂÚíäŘó¤’}qďU…BĄP\%œhóeŮĚWTuúťŘmş ŞP(Ž&'Á‡IĹ5 P)Ďý&%L{:œ ”›]ÎůWßYu+‹4pŠ?žř4}Žôö§CpÂďy1ĹŮWZžň§a–=qŮ{żđ: ÂCľ?Ÿdű^N˙ŸWůśęSŻÚÉՀ۪_\ĄP(Ž2”řŁP(^{`܁áíˆ=HӔLb&„lcřoţđ9ýŸfRݲÉ3ß _ţůż ˙ű˙ó˙A?‚Ú‹™đVÎ˙ç˙ýżŇ>ů”h(ľť4LJůáoÓÇö/h}i•úý#Z{ó.Ýüŕ=ú˙á?Đ'Ÿ|ÂÄ|pœN§Ă9łöłŸŃ_ţĺ_ҍ›7HDV0ćü}ú ýç˙üŸí„SœŇR?ĽľF—nßžMVHăɘzÎţ†’TÓc˘¸— wAŚIŚyä˙ÉFeb?ŚM='ă˜úG}ÚŮÚf˛–7Lű5ZV Ÿá`ČQE˘…Q5 ŁĂ>o“°˛RH­fD÷îŢĽ÷ߟîšď[ˇnńńż˙î;úŐß˙ŠîßżĎ펖IĚńiee…Ţ~űmӞˇř8 !á<:]~¨Ő1×5lĐáѐî?|Lo4îŃâę —‘rŞ5wąl›ŃXłWűĽTŰX>ÓTzň2|ľ'*~NÚˇş|ŢcÉß×Öľm]Ł”$ë/ń|ĆŁ„ž>=2ýŠI˝Ţ…!eáלNpii™Ň8˘dÜ3ĎĽ=:9éÇŰ@•ę=P˘i.t(1ŤYƖ‰7™¤1ЍšžB7Š `@e„ü ‚ &ĄjkűÔ+ť” .Žż“ŐľSŮšÚŇqč8ž#á‘2+ nŻ“ )ͰÚäüfÉŕĐľkŤÉíBĎh4ڧOŸŇÁÁ!Ÿ öA>rĽ˛Ěś%ŽC’dLĐyóÍ7é˝÷Ţăc={öŒ~˙űßł”1Z2Đo˜˛Ńţożý}đÁűLú ĆOž*ĎW•˙ĺŚůuqőĚý`nY:SÝ'Čk\i”ČȝNTř’óóhژLžýIÇ,ˇřńżgŸŃźŠ?Á”ýKżƒŮ…T[°>HˆŢ,Ô_ďÓ TĽşwZćÁť~ůż'ĽűšRłÂŻžMŮ´ćj”hĺwA‚›śí<đťŚÜ^żnžýeçSáŒÎóĚ>rćޔ ErVƒ›ŢócçóBR–wϝľ) Ĺˀ …˘™UĘI“”‰$bšZl7܃ş†DĎšÝؙ:‡ZŐ|qᜦ ¤˘´lbFQhI%ŽđRK˛p6ď˜Ë•_Ü1‚ ÝŽ'šm˛_râiŸ(¤‚@QIY%&=š4[ř bhŇĚŻĐ>8ď$Is˛–ƒčł´´ÄvÍFË|šźźßŇp4ácý_ěýé’$G– ľŐ÷đŘ2#rAfb)ÔŢěŽ^(rűĘeF„A>ĂČĚńřcd„ŢšWČ+ÜYM˛ťö (šgĆžť-zĎwTŐÜÜcÉȉDA`éáîfjjŞjćz>ýÎwPH ]ýţ÷ż—tlBÚáý@(jw:Ôć2nŢźA÷îݓ´`)‚QYKŻ%9ĎŁˆ:ݎÔëůŢ CY@Táb…› ~'Ÿ °@*]ŁAQ-ŠŢ]|ś%6Uě§S~v<(é×3*J´BCQ‹+ŻŢëłçŽ6WNy>ŃÇý]:ţ“"÷Ď 1gĺŤœ™’pVM]ň^]°űTsř žŞÝý+˙.ӔŃĺŽçjůzQž6 g+ŻöCîúh™řBĚŤVös§Żż_œ~eäź°:gÇŮ•Ž 6ŽÂÚWKĹWO Ű|őY+R/öŹöÓ´\ęJĺŢbœ¨7oŢź˝”yâ7oŢžó‡ D˛Š˘ ¤$Že‚[äi8^Ň@•â…dE@yiœ,IŁUfވĹÂ"RN''Gtx|Dn‡˘Fb‡”|×jŚtëöMęmŹŰ٤‰3)ThzŞŃH+užói$&=–FÝ (ăđĆĺë2'q ™(tEę-NJ…S_LÎ?1Č8؜R8Ř˝,‹ĽHúŒűiź&“ MĆźMŚ’ L”z"…BY¸ ¤ďRyE_>xđˆž>ŰŁ˙ń?ţ}úé§´ąą!ŸŸžžĘyAa)Ŕ667i­ß§ÍÍ Ł4„4jź/”„úŤ×ëň{%Ş+›[›t÷ý÷…Čur|"„!8¨ÚÝ\źD7‰-9ăv;ϗ\ąEô†ÝMŃágńšŞ1+g˛­’~Îôӊłř2’łĽů:{uá1/m֑|=ŃEPCýłWs˜_ÇÜ=¤]ŠÓ[t:8Ľżť˙Gzň$˘ýƒXTŹÖÖBÚ\óXÉ1i<ä {Z6<ƒ”*—XGXlĺa˘‰^§˝yóćíŰffÎWœŤü#ÄŢ0źô7ćžsż˝Wý=2żˇţŠë͛7oŢŢŽ]üąšĘByĎŔ›ˇoŠ˝ůGŐé ZHAM'¨•V:ҏ{nÔ`XďDáľö\AŠö-Ł ”АËqt"G2Ď9ˇÖ´Ÿc—Şű ţ u}ž¤BĺňjŢ3G†¤PW萛ëWǚńegöřÂ)‡ÔŽ˘şPM˛3T­m.z~^”bŃa ŞVO傁­•Ă5ĘóîŘęš­¸đĹŘŐ*kÉ"5â•ŁÖ ˆRiłPXqK,›Ŕ:sƞ3`ľçŻFQöş|ü㪎m›kŰaß*pŞúŚ/1†ôjşáh`ŐJ%^DŐZě˝2 —ZĹw1ž]áČyś/€gĎçsăs˘6nđ­źô˛¸ŚZŹ!8 ×`ÜߗٜK!Z(ö׆–šXó˘žjĽ4]aŘ/ěRÍC^°Ÿ ^dPBS[š×P5xÝ.Ő˝šŞŒ˙˛†ţ”ŕd‹xóćÍŰťlžřă͛7ovr.Ń"UĄerŰmwŘń éýľ šś×dňŽůbڌ¨żžN>¤Œ'óeae ´żż/é˘Öúk&5:mŠ„ŔŁ„ČóôÉš FBě9œOčáđˆŚÓ ÝźyS&°˜đ&I,űwřX]>ýô^řźÄĐŔž?ýÉOâM–SoÄY’ĘlLÁ|DgS>˝ÚäöĽ[Ó9Łĺ‚€ my!jHî:Kťř†k@{ npŽ0‘FJ­áp 1˙=™MřýƒÍŚf“­Éí´NIÜOĹŸË¨…ŃSiC÷ěŮ3ş{÷ސx@°ĘŹ#˘Ĺľk×čÚőëÔßX—4mP_B]ŕXŕýîΎ~ň|.mü>—łscWŽąĂçíXľĄ*ÍGPSżyŐ:N•O§hIńśHĺU'ţ,ŠX(.-ł9bW!˙œ‰4ÓŤůź ĽŸ7oú’ĎWˇˇkF‡ÖÖˇéůó1ýáÓg4vi4éđXE*źˆÚ-EýBĆvÎ(NB‰ ‡@2t¨‹qrő… }—ç͛7oߨŐÉą¸^҉č*Š-ęĘX¤űňć͛7oŢŢ-[MQ ;ťöŽůjŢźyű:Ě虿Ař AţQîmv °Ć.ŇßԉĘ~ŇRɫܤ§˘ ŹtÄ)WĺöՐBZĘD^]ržPČ:dË+¨ 2Ňʒö|Çǃ’;Uu‹a~Vj9ŽČÁ—´ŘH@ł‚ëSökç ÔČ ę,~ś Ť°M*5­*tK!0PlŔ#ń*őE j-“‚hAüqŞçÎ *ŹO_ÚăŇňIdAr’ţ (ő˛ęM Q]bÎfsš"-ý|ĆíœÓEř˘ôY „œ Ő\ˢ˝ĚéŹâŞáI€,SĆŇ#ĆvĂ‹Zž>‡řŁ–‰+^ĆěÔKaxŤXŮęoĄ˘Işœ%hÁřŽŽ$pU_˛}Œ\5řŇÜf‹›pŇÓőŻĚëjąşŢ~5†šń`Ć‚ŁQDdU÷ÍüA×r-Ţm3Ô3 œ%:mĂUŸű*׏űŮ0^Ě5ňŘRánľźó‚aW˙Žż^fŔ_ŃŻžřă͛ˇoƒyâ7oŢžóf~qr0“'ľ ƒ|´šI›~L?˝uÇ:X%EiHăɈţŰý/’*ŞdGŃĽ‹č÷ÖDUćÖ­[ÔdÇ%n7áőȄ˙ôůý◿¤l4‘sfź€?kĆtăćMúÇ˙řW‹O8H+ ž`RůŻţŐż’÷u‰ß{wîŇ?˙ç˙ܨÜd­ůűÁDԂş_~NńÉ!ĎJ'ćúhu˘[ž4˙e u&<˙‚ćĹY6“v1 #yQ,¸n\ďŃŃ!H*Ž/żü’ööétx* ?hÇ(„sœŇÖÖ÷ŃuşySŃÖć5!ţŕóœŰ#ŠŮqÂĘAv‹{¨ 6ПMІĎ;őz=!Ç;–žaďď˝˙>ýŕSŤÝ”}›”ąqČQnˇS)ÔSż˝IŤńžÎ8‹Ć7Ť-ç¨ę¸ăľvúRőËœĎË>ŻÓ‹ĘzUĐťI zs†ű¤4 3ŚÚŰăg ™Ôw'''G žEׄtzzBI ą–MDŔ.›Ž]ô§ÜnŢźyóö2ć”ó\şP€‡x­§ZuäÚUsó ě‡ă0W@/dcűš7oŢźyóö.ŮE \güśŻ$đćÍŰ7j˛ĎŘ@Ě8Y̘Wƒç°mŕdnáœqş€ç˛ĘbZy h1v)Ób-i -O‹˙łV2Ƨ Q%Ž™Wź/“ËxË­‚MÎĺίȝzšU}qóë†i­ŕ×Rd‹…„’|ŢÂ୙ÎůřŒˇ ď–ăQ˘LţŽI¤“pAü uĆ<ďpž sĂŚüŃIHtZd4œ i˜Ďi@¨Ł-Ţ)°ƒ@$d.36A‹NŁdąĹ\ƒţZx‚*` `ß× ˙ĄÓjÓľMZëu%఑6(I“Ę7‘-E䝯=› ůe(K]¨RŇY4ĘJŻë:Ýg…ř#X œ,ó’ÂŇHň8Ň0ŚńŘ`ÍŒŐ>gŹv8Y Ü*ĹY|ĺĽ1‡”ÇVƒŻĂxŐ -j\e 5~żr9)_÷ú:cé›[´šľËXzۜŸ{ްÔ0[Œ!ęÔxhB2˘ĹľżMâOő[ZŃ°ŚŚCüŮŰŰŁ§Ož‰Jü|>‚YRŕ¸ĄQ:r„/7F¤ÝEĹĄä˝(˙l=ęğú÷#‡ŮďÜÚƔ#¸)űjh:ŽśčO<'p<Ɓ|†:†lƒcЏeQ.Č?Ž&Z/ˇŠr›şÔ§ŽĐ†5‚Ěřę†ö. Ü~MĆ>>Ă}GżwäšUÜӑ‚–Ôľ”Z"։@uC\fřü‡‡‡˛.{Л7oŢŢuóÄoŢź}ç͊Ş.Ś 6}V NŘőĘŽ]§7“V*¤NŻM÷|E÷˙ =yô%3 ÎŮQúńO~Bwwo9¤Í[ĘҀ=›ŹĹÎéá€~ýđí‹~ŔŃÔ´łśA÷Žď “c8|˜`>}úŒŽ?ŁűŸ|&LJáŒÍŘařđöúń~$ÎW6ŃvΓÖÁXŹčđšLzŤČë 9Rţ׋ç-œ]qö-QĂ,°A)ŞdÄńšŠ'ÉD胃QúQ8Ŕç¸v˛,ŐĽŁá)ˇu)XŻťFIœ°Łź&m>ŮŠ:5 v¸V88Î:L.…H’>Œ˛űt4˛c•ł#ŃŞ‰ĺs‹şÝś8˘p4@°(šżĂĄź˘lô>ßŮّTaŤmrŠésvŃ6oľ9 Ş÷Ż=m âT’ŒéœNNNĹA‰š˝‚*ŠĂHЂ𴽽%í rŽĹÜŘXGďˆŻĎ $ÇcŒŽŮŮG™pşđÇá˘Č†Ő刓(÷U$ǁ†Ďp~×_f ĽŽNwqÝgćeM˝¸‘ĎÝ^śĺ}Ȓ9@Ä`\SYbFÂul2–€ôç'p`]ˆîwŕ0P˘ĐŚ$ E˝Ć€@Ţ fSÁ5CŢosëýä{ß§÷oÝfqS0Żv§Í>FbˆK–ř#mÇŘސąQ༠A{ěp]ÎŃRYúŰđ:tEʨh?N¤œ˛0x+H_Œ;i+ íŒÁŃýű÷éł?ţ‘ô§ŸPţ,güoĆeŘôÉöŹ _wˇP­-ą řJ…Ádń{ÂOł ň‰ Ŕ˜sżŽ§sQrßŮ٤>üˆ~úţŠŽďÜ48˛Š÷âq$DKëÁßöŞĄ(K[;Ž6pWDłôš8_í˝&ş T5>‹Ş•Z =ůz?ůäSúßţőżĄ_ýęWB)ň‰ěŒřTŒŁěbíx6úë3>vĆăÄ”¸ěú_ŇtŻ>G­ĘĐ'€ÝzF›Ď‡ó:Ľ˛Y\ZˇŔ“PżČŢ×#B ÓeERÂý 2×d2•{šg´’4O­´­ŞˇŸ!Ĺr٘ąĐ •ŘVćď¸?śś6ˇŢ˙8´Ů˜ŰÜŠgŐłéÁ‚3$ \Ǩë\ó`Ú r!0ůůóçé͛7oďşyâ7oŢžóć$)EfV¤`•:ŕˆ¸)Řěd “äOĆŻwÖč$jĐŕé~őˆşP´áI°#î}H˝$%šącšŸRĎj“řÖ`‡óäčXҁar 6ű)ŤŚm'-:Éżß^#ĹߏůOsĘNhĘKLNAä8=9%ĹŇFö÷č”' ë ; p˘’@RŒ’90Ź{Kţ1˘ż5˜™@Ť*?sˆ ´¤ đt‘ 0|Şbĺà „úäřXœâ7v… Ňœ  ‘ňDţwżű‚žóž;;šR6yqîúľkŇŚâ¨5b ˇ1!ŹČš5[ ÚžśĹV*ŠÄPçgϟŃÖöľЌ,ôĐł˝ç”0Đí6i:IDÝiś6’‹SY ĺ˙Íßü ;$[v`š–žB‹ë >Sg?Âf:Y•ýŻ.Ň×pxxD<0jS|řç<öDŮHڊÍ}‡EÎżüËż‚úááĂGBěůéOĘ×Ţă6˙­‹~@„ČPPdúĂţ }…÷8n08rÎÎÎuúÁ~(íów÷s9öąĘ,šH|‹Ż¨œ9Ô ‹­Ž)W‰ž˙ýďsŮ˝ęúÎoŰŤŽîW%ý¨+ç.Ţá˘`Ą(¨żžňcƒÇÓ脎‘jŽŻ;mĐĎţâÇt<ŢŁ“Ń> NsnżP€´YŇ8ă{ˆ8KQlĆ˝DBŠZtMĺ[_ ]Řd~qڛ7ošćÔăđ[ßĚEžĐ€ˆďŽ­őĺ7żóříŕ'HŔbP¨°šĚýŻ˙ő…ç­"7˝yóć͛ˇ7l/RřĂŐ?űg˙Lp‹ů/˙ĺŇwn!ؕßśżýŰżń_˙ëMż‚rń|~éšß$AÁ›7ooŢD ­3fśĆ‹ĺť˝>}Ř]§´iî}žëđ”4R:Ż 5Ľ MUČܡ‘+Ú.j3V0†ąÎÔ˝RŃf`ˆQ¸]Ł ¸ć¤řłœçÎÄńÇŃý2ڃšI[>Ęrp `Żź˙.cŠÝ( ŽŘ`œ­ÇŘ*Č/ţ Ä!FĽhbŸ5Đ"iƒŘ\,IGќWş@âď˛RXE(|26™[RË(‰é¨ŃĽG9ˆ Á|`’K-Ú Ş'‰™˙ˇť]j­­1ć_€Żád4¤9S sd\F…Ś˘ĆkŒ‚š04ҋAńńą ĆŔnܸI7oŢbCo­'ţ‡#0ń0fŒ,âr[ŒgÂůđĂĺ9˝lŘŽŢZBHš †T䟚Ň[ŒâON”1v›•*Ć0lH|­_=z`ŐiĚďA0*˛ímnŹąßtÚŒ…\Ţl2ěŻ(fěcĺBü!JDń§Ĺý3^Ţi%Œqóu˝î˝˙‘iŻ Ś2HšGB{uJŕÄĚŁŕOď,ZzĹ;‚hšˇé<şˆř#˙č%ҏĂ1nşŒ~ţégôôé1–?™ŒÝˇf\ń˝}Öú}!łD¸Wx,ŘÇ<śÁ—Ś‹tĽ¸łZÇŞOőrÚjiÁÜy5ˇF9ăýŠDNÝË)bŃœ™D&­ˆ[NW>çrL EKcëLk¨%śOŐ> ýĹܢRšZBrÝpž5ž/0ŢAŽĂřŐ~ĆŞ{=ăűs•üăŇç­ţíˆ?őT{usäh!kŮżq}8çęžŢźyóöޚZyóćÍے-$%*òŮ<Ä$˛‹É$/Ć#O5Rƒ)ŢŕL ą3ƒ÷˜˘JH)˙€%ýľ–‰ť“fš„!‹‰ŇJc_>Ž\rgsĘg&•Ţ#úŇá¤ń"Qœ+:5„Ÿ*żíęĺY‰×ŻsIßĺš.:MçŽä[ńş*-ŽëŔ$“x—jĂ9 ~Źń¤jAÎéüŕƒťtďî=úţ÷?¤ď}ď#ş{ďž+ ńPœ§h#RĽĄ‰?qę8hG‰¤Š  'g ˘ŇZM˜4 Ŕ<|ôH$pă$˘ŁĂ#QšJ¤Žq(;íNĄÇ@dáKÎmNjů@Ťy‹%ˆhŠg%‚‰Çˆ=pX †„ú˘MŃp:Ń Ű /~ýë_ńž!—AééęŚS(1=“ĹO¤Q;ZXĽHAůPńŁőĹ_ЃĽ-“jTb€ĚƒĎP8V8,şâ܈ÚŔgˆ¤p*?č#¤Q{úě}úé§týúuşÇ}ýőÚ×xg\R4RÓuş-âGˇqB#zôčKé›kסhS§ĎNđf‡Ĺ~Äc2g4ŤŰ[# Ó(V _şz}˝kń°˝7oŢţT­ž0 +Ôíđ;Ľ:üâˇéóĎ?—ďĄć‡ß+üžštŹřMĂď*~űp~ŸhžŸƒl¤!×8ŇĎ׸˘ďœC˜Č’–™•ŠEžęEžÝz°?8ˆt@;c d› ;:B âvG˝áěbűŃż'°ź˙>Ýźq‹¤2jHÎaquéW>ŻqŠ“2їNŇŻp2pn#e›Ë+˘˙Ą°soď9uŰ-QBŞĂŁC!˙ 8ľ˝ÝÝž}[œ5 ×ˇšMŤ ˇę`­:Uî{—F ă×ůŢ{ďÉ5ÉAÝ?ţřc!Öü‡˙đdŹażżţ뿌˙řÇôo˙íż@řg?ű™|Ž…P´Ü ź(B;Ý˝{—~˙űßW’§’˙űŕ€~ň“ŸĐ?ý§˙TĘřĎ˙ů?‰ , jA8?ęčň3;ç ÁŸýٟIĘEP?Ôç]°Wćčb.Žäwçń7܃ôÉ'OůúsZ[ëRwłMíľ5)e:Ńł§_ň1ZˆP[ë˙}ĚeťgƒŔÔó{7oŢź]l[[Űôď˙ýżŕŐ€A6Ĺo~—đŰ =üîa~dÎÁĎî˙ţß˙ťüz•oŢźyóöŽüŻń/ţŕöýĺ/I?˙ůĎeÁ źfP7oŢžys´†H1†Č˜d ÁŒCö“,Œż,˛Ít!’&Czb|K3–Šbţ „‚füY e$ŕ/Cđ\`9'Y)ŠPńĐeAó ”t?aЄż™ňŽ9tYŕv|0#.ٜ•"ˆ.×o-Œ˘xT@Œfźĺ‚óqůľ4UĘpŒb6ŽfŮE.;.kŠž P5t¤,I€R…š”`&Ŕĺs€(ŔxpłÝĽţĆmlo‹˘;R~ӍÇ´2äK'Eé§dĚwJÓYÎçɈK@O ňL›Ôjvk6éŔśkˇ;R–Q÷1çuţÔ_Ú ˆ ţŔ/šýŢ-Ɗ*°­âSJ¤Žš˘•Mż¤Œjxý?Ą˝X2†řđâ*7Eč*ĺ“`­ęYrkčŻ4áqŐl0žŐ d'´ń\RW¨Čľ¤‹Bě ĺjź‚ ?žŽ˛ƒ’<Ňb•.˜äČ ÍFŽđł !IŠ*ľRŠ+Ý5ÂĚ*ń粢äsJJ‘]()Ĺ<ćťÝ6cÝ Ľ˜úƒBéިœ7MiE’-ŞŇOšÁ¸駗kť4ŞśĐ„xT¨í§öü—]䆀&}aS´m,ëŞâ4‡fî3K€‚(lă›*‚\ĽDŐĺ[E$÷FUkËX%U*9˘OÄ#Zä>6)žœ¨č[2ľúÇĹg™Í8" Ę,ëň߆X‚Łń°ŠPŮÝŮĺš!­´ŘT*d'ŇD I”ŒUrÄŠ*?°T3… ŃxEôz˝Ž,ôá|ŘnÜşAëëôÁďSÎí 8_wîŢĄÝÝI÷UÚÜŕP\BtÂó˝ç4žN$˘Cƒ–LŻlôÂvy]sj:hÇ?ţńUZ@\€żXŔD›Aኺ  P$Œ;”ňĆČ<ˆÉ ťśĹŘÄb(ÚçŔ™ ㋢FučHČC¨ öƒc‹EU§đ„žAŸÂůÁh.y­gҨ3Ž­;sŻŃ*/řneÓöU)zžR—`Ę„źÓëćôŢm(yľ$PjFÇ'ŸÓúľMZ_ëbU1 ëŰƒ 6˘F ‡5pƘ>Ű>ęü,çž÷ć͛7r) `: ‘}ŘV ĘřÝ4ĘT-†~ůĺ—Ő>Ż÷űä͛7oŢź˝%;oŢźýi™ ÄEiI ʘĐ$0$’( ¨h0’XƤ‚‚žňŚsu"RI‹&AF4ŚYPŇ8ĘiÂŤJ󰤚(fhY ʄ>ŚČ鐞Ć!DYç(i&D!ĆAU" ýäĺ‚âO6Ľ~AÔ_Ţ| Á' yc|iÂŰ<Ěĺ*B }„F[ˆ<%ґń#ŕťˆFľʈ(VVÜČÁˆ&Hq”đń­RQP>Ëťeá*DiLîľ×ˇŠˇyú[×)mw)I›‚_ЏK×NËIŽ Ń ,H1Ž;)4/gŒSN¨ĚÇ\EÝV‡6ÖŻQďújŽm žľŃNéNżI[= CŞ'˜SŽö՗_Ńo÷[ú”1şźČéúÍ] x?@¸’€UU ;Ô´Ź`ŁljŻŔ¨AQHRĂ[ŗPȁ¤xRE ę;h+}Uű^>Ť‘%t]Q^kŤ¸˛‰ŮeĆEÄý’Ä<ćx°ąm[CŘblœmˇ[čd˙ íwڔܸA 㣰JUe^JTžĚ{—ćŢá„n”_ő~P‹FłGÖe/ĂĐ 4iÓ8ë˛R­ŻZíƟ+č¨Ź0y§1ŘWeńáęUŤŞřŰa›–BűTí:ÔŮkĂ9¸Iů>Gş;eĆIœrše:3„™2˘R‘=ŻÁgy(ó=ĺŇT]€—ćłB™g†Q ČŠw™kpD¨Ő:šš-ţ"­–V ™oő¸z߸}$‚ ʲ`°Č~`şŔ}l‡UŠĐ\zł•ú éçŕĺ'ű ”ލ3ßg `ŸfŒd{˛7oŢź}Ěźyóö7DŸH¤Š 搅ĺ ăd:ĽĂý}Ú[ďĐł^lIHᕠ9bë˝Ô˝ś!‘ &=TI^‡öƧÔ(Ôŕ‰t٘‹rIĆNÓ˝?¤Ůxbädá߂dԌč‹çŞG ŔsŃI6Ł¤×Śť?řHHî" ËSěß~ň{ŠÂN᳣CR''"Ú;: DʡKö1î²Sóu›ŞČç™^Ž Ăň—źŮź‘DÉ̅<2žŒ%-”a ¸Ôf‡šŐl™RŘIČć&í”#ţdY^IçşöRVĹ „ŹŚUar$ )@üAޏfł!錰°×ę4icsnßž%Ž($QQĆÎÎőJĆבgPœđç|ěÖévŠťśV[Ôt1ńǴ֛6Ýâę‹MlHĄ…ś…ZĆËW_}EwîÜĄüŕr-ř ‹˜Ř@đAZ°Ď>űpť–BÂqš•c‰j2d5HňĐ@>ƒÚ˙żřEľHŠ>ÄqŘ\Ţf´!ÚßaƒÔ1ú Ź8jEPBżŐFŠ×j3uńçzeŤ€”qd_ůŹŢ#GÄÛˇÇw—úý=|xŔ ű}J¸ę÷:=~̧?ĽÝ>ˇ!ňs rY.i&Mžüă͛7oWľËäÖ˝yóć͛7oŢźy{×ÍŇ$Ł“Ž6Ѹ4DÍEń§(sĆ=5çi”Ä[Dą}ĆüŽ;ĺB@śÉ]zŞRQŹC‘Â'Ł9Ńޤ CŤ’aÎT ř)ö/ śR#lĐZPR›wJĽ2\Œ¨ XÄk‚PH$P‚!•WŒM™>°ŮˆëCÉÄŕş/}EdSúś… ʂ’ Ÿ××ŕëJQRk)`ĂŚ˛aQťŰłj?×is{‡ŇւřÓh­ńľÇ´É˜ăż4ŃŃţs~™ŇńdJzžQ9á6O)ŕ‚×z[´uăŽÄ­5žć‰¨­Ăœ2 đOźG ‚đ~űŰßŇă'E%‡ đLÓńţAhR˜IűZrĚy đşF2¤G q—ލ‘łŞ)P4J,ţ5œł^.]<ڞ9cłÓ ͸ýtĄĺ}‘grmÜĐ+îQPo*ř]AQqó1˙ü)÷GÂ݇ărŠZë%-ŁĐÂýDaA*Œ×.H/Şb‡œ0xwć­ĎQÎ3§ŽŁ„ôSVÇiU;ÖażŽńőňwP΁9LÚ­§§/ľJ9t.MeA\şHńXaľŸD0l‚úJE‘rÍ¨ŕ„˛)‡Ó—Śn…¨kЊP#—RZzS-͘I—E5\˛^]ŤkäŁ.l׳}b6âJĘŔ†I5ˆľƒ˛¤&ݗ¤óŞ‘ń§zoËęŸ×NSćsš)ěSČíßRőS~Î5řĘM­¨”qé͛7oßóÄoŢźyƒŮHGŽAÄMžě=§żţˆ~˙ˆ™ÔKŮÝş}‡ţęŻţŠś67%‚ÁäN.鋯ž¤/îi”9řł‚L˜qěöć6ýĹ_˙5;Ó9=ú”’v“Ú›}QbAš$“̐Q& Ń/›[ôĂ˙˜š†e§—R×˙ňó˙F˙ćßüŠzÂçÝfĄmӃÝ՛”žY%He:ŝšÍšŽSŽsj'čçJL捧2űrť([ś‰41Ž“űD™ ŒPV€ ŸťľľI›źA‰§ČMqN°?Ôj$Ý;ßčw8_ Ŕ@ZWRłqß\ż~Ž_ť&¤PŒŻ’<̑MĂŇ ˆ* ؀ü#yĎㄾ CAĆé÷×E:ö/ţâ/䚡śƒvÁxC]a¸n!Yń{¨ü¸#¤5Áu}üń÷¤MЖ á€L„ąęT~pô×͛7Ľ˝P6Ô{Đ/hcGňAĐ&ŽĎÎËŠ™śŠeßáđcŮ×„ŚłŠœç›ś*.ĺŘ2/ăâÚˇśÚěĐöčƍÚşnŇŇĄí×Ö:Ôi‡KŠóźyóć͛7oŢźyóć͛7oŢ^dŔu¸ügŞâ‘ÁłŇćL'”/ŠƒHđ:,ţ㘔ńˇ~;ŚX•65Say Vi[5"€ÜmÂĺ ç潐‚Hp4쟗Š˘"¤0N{ęáű cTšÁ°ĎœăgůLţ†JzÜHIĹńGČCHĺ…4T ˝SĆc-řI¨B!ý„dŇ&iÇz˛Ä}~řü i.ě Ţ@X•ĂŔ ~7ÚBü> ’Ć:cśˇΧšžůč„îńš`‚ŁÁ)ŘK‚y!ŔP5şÔż=˘mžN”ŰMš]#Ćż&68/áöޤo¨w˙ţ}úűż˙{ փúOʸ0°:”'i‡Ą:ÄľrŠ‹,.ššĘh9 TY\=*DíÇM’ŰŹásďTÓ1p­•ę-ˆŘ×Ő 8 ”ÓĄ3ˇŸeŮĚŞ ŋ1‚óB՞÷-…q•†đÇőŁSęnÜ V§oÎ l5L$՗wň¸’X^ĺ҄ ¤­`ˇ:Łţrî{Z&ŻK÷ÉE”›ÚŻh8ŽkhŁśXL{*ďĽíƒ H?\WÝpż$ŒŚi"í'c%4ëŘcÉ(2Ůţ, AIîMî”Z’Œš\mk ^/ą’ĽÍöŠmđ2-ˆkΌ{¤<3şPäjˇÍŘDĘźhĄJ%-ˇr?„ľ{¤R‘˛×WÚ{ ýl8š;/Î5ĚCj܇Bđźyóćí]7Oüńć͛7ŤâœUqXyň ÇjŸ•_?ČčďT.`8RI ք>řŕúÁžoB0áçc†Ó1ýňˇżbË|6§ń€›™ÉĎŰ_ëÓGß˙žäwŰžłžF×ďܢŇW÷ż’ɤ¤KS!At;=şyű6ýčÇ?Ň Y)Qü˙˙Ëڟ˙üçR{śŘ)ÚÄ9Öű´˛3˜äňď֯󭾨SŰ)ĎwfS¤0BjŁžČĹVR­•)ă¨[=džEÖA!' gŃ1܈™ń+&ëpœ%Ż8_vťÝrĘZ‚V[ΏýŃǨëzřÓiw„hGÎ:1œťżÖ3‘.ÜOč#ÔM˘|š !4A™PаS G͐¸č 7îŐvy¤î¤S7¤#[-ŘÉŐVŸ\r.´×űďż_9LHÍĺ @Œa´-ÚʼnÎ\ĘK8ʎ0{ťtľôúŞ\ĽŽ~ŚiĚϘ6÷Ÿq4uŔŕW0ĺ1ˆ÷mIˆĆ˜8ńć͛7˜ßUR¤ökoŢźyóć­2í˝y{놻i˘ ^ʇjĚŃxD ŮDQL!̧^f%‘¨Ţ]Ć ľô(Aę,È(&=)šAłE”0ÚŮUŒ—ń&Ä›ŢK—…¨GCe˝ Íą%ă§ ˜!˙ąMaŇ)/ŽgĽQńžń FP!â2€­5Ӑşź’çod´"`b°9Ĺ߼ )“2)ľA[&e‘9Żawŕü@+K~ŻÓˆĘ$$™äKŽÍ"†ń‰ńAl [Ú`6%`MĆ27Z]ЎœżĚ¨îŽýąÂ}ÉVć3š1fx˛żGĎ~Á×Ę-•iĚ×Sœ>'•OĺxŕŽ!×gÎ× ŹJŘ_|ń…†`Ŕ( )d,[Äő(ƒHŽßBQ<áĂĽě2¤Űů˘ŢŁ,"ŕv憽´SK§…Oĺ űŁ~ ÷Ź‚ĺ ´:‰Fú1Ńc˘ \°Z­3J›b,@š1¨Ň”2*…ä5ŃxtL袲˜Šú{w4ĄnoƒÚĹi“ű/ĹQç:EÜHëVŐÝ,Ť­ŞŐŐ`$ˆłVš^ŰVĘŢ0ş’5Ňľ_&ř× ĺ—ęËdŸ3ő€ądŕĄNÁŐpÜDÚEË>°é̒ d˙ vמ˝“%•BkS5Ů#ˇˇQş LŞ7›‚ ÇDÜ>¸ íĽ¤dƒňîSź ‘§0÷‹Œ•Ŕ¤ƒѧ´ęëH(Ůd­Ä\šśęFZ/ÚkQ[m벨Ťš'jîyđčĎ( …Ü|Ř6ţn6[üšVJôrŹŞü(ŞĆ<Ę0›?rˇsQŁĘćź h:äű—ǝ.SŠ/ԄJĆÓA Â9qœ7oŢź}ĚźyóćÍZĹ^g°’ŒĺŠ L˘ľ‰rŔ$NH(ž˜&‹ć-™ąf‡YӄSÉ1 gN\mŇQéÜȲf<™“4›Š3‹%üˆ'ŹV[&¤2 G*0œA™|ĚK2­°ľoKëČşÍH‹6˝W`ĂZŢ.¨V}ÂÎ,4r';+yÍ÷ƒ“Ý˙ňž¨¸„ě4b2_¤ücŁwˆ";yŒŁ^,$=:xÍó’Kv6'3~ÍĹAj0¨Ç %@Ȃc°Ćƒ.Jéœżß[ŁőuJ>NčƍÔj7…ÔƒsdąĘ9NBTúÉ:ĂPB4Ţ áĽŹÇ˝źŮH'7+|łKŠŽ““–^W–×FWepŻÚqŠÄ rçÂgp¨¤íŰ­JvŐ^썢čÜşžyźX]ź]îł8ú<3ŽîŐ*Ť‚‰ •ě˛Â“Ŕ}¤Œ‚–ďiý–ÉPŢźyóö͚ś‘…‹š‘y^.€ŢĹ>.Ruń7}mŚ/űaŽkź{óć͛7oďš]ňUj}‰ŸckŠśËE^ďEą6 §J€ň“u˝˝][%źŠcżÎáőmťI€°JÎŰŹĚi0Sθ˜ŕ9üY”Íôől`‘!ů<§iYĐ4 (Gş&ŢgŞúЁË)žTImÓuŐŚ^dpł9C1ͨɋës^Xρ‹2NTÚ>k2žÚŕăZIIq8§‰ é ŽD–4Ëů=/ČOGÓˆ6×ű´&Ô0ž7žI°ß ĚéqGÓ¸ EMëe@ˇF!ug–Äu›0ăzŘŕ>W*OpĆVĆILŁ&ă¸-(Ó0Έœb…!˙äź šޞLśęÖ:ĄŻ9š˘HŢJÔŠAaLi;˘Vo‹Z-jw2h@ůt ăŁúň—?§ĂűŸŇƒMĆ) ďäBřAʢ8‰eĚByA…‡‡‡˘*.ę+üŌąĚÁéNO†4á6ˆ›9Í#`ǁô,Ž×ásnx:˘Š(&ŔĂçH“T°Îv„Th|~`ŰÚpܨvx§#ËńgIíGŐ2Q)Ł6‚™kƸçSĆ´¸źˆń^&F‰qŇQ!¤ŹPEG™ŘN-݈ű*PŢWŃd4ĺ>‚ҝvű´ÉíŐhwy<ŚD‰Uâö‹›ÜŻą%ý˜mUőȑ}VUbI@Фü§-AJ ˘îH>F_ŰW`ţ ‹LĆy•ß=\;;‚Ö„>¸Oű{{˘v$ Y+ř˘đcŹz˝d ŔĐłe›ßUç;*ާ0s÷rÄ}ŢĄ95tA‰ÔT˝¨ËŰ°äűÔü†{ÇzH=ßűXçฑ?υřŮWŇZ%<6Se—=pOŠJÂ׉gČ܆¨"ýEkWËj*€v5jCBŇśżL‹[¸őüç8ˆfőô^ Ž Ţvä+íH]¨łžźżŞđqG˛‹ŠßË#šOŽiv|LÓýç4>9 éh@ă05gcüNčË}ŠqJç¤2{ŁV+ţëúńs/oŢţôÍźyóćmÁŻ"„‚ ˇĄÍSŤ”ý<;Ţ: î)B['Ú䷞˛ł<ŸÎŘÁ›ąăhŇR‰„)O‘ÂŤÍÖ(ML„‰{ŘšCdDfXţˆžIŮń3Ô"Kć ž›ŽhÚ~Ż•eŘŰ+RŘ­Ş%˝iĘE&Օ6Z8…RI{z‰Tai2žĘk ltJĺD.ˆ3 ů„šZ‘qPßáp*¤Ÿ““S‰Ś€ĂÇ 0PŇnAžĺ#Ú¤ĂÎŇw Ăʉ6‘ Ą¤oťś˝Mi#ň’sn ‰RĘ+ÉUlÎů…3Žhü ‚dműëëÖ!aG2|3éžVŠ(—™sh–Ž“~.&-ţžü,u|Í(2Egˆ8á×~6wu˘ŃĹeźisą'Őy/!︈ sżSWw •ĘřŸléłäZŞĺ;Ú§™öćÍŰwϖ|őßś 0óüfť9ĹŞ´ť7oŢźyóć­fúő‘§ú[ŘÍ,#/űxÎŻ)݊q7o/m/ă\{ŤĚQ˜üqĘxYȘeŔĆźŔ-J X´Ä˝ ˛ŽY ?dƒÄfüÇ1oSP<ř˜I‰ĹtC.j!eUˆMZđ÷Ľ’Ĺůš% ˆ’ˇÔŚu—ÉI§"I 6Î Q#šĺÍř˜H5Œ­őăńI)ĘĚ3&gŔö0Í訑3ÇőĘCşskƒgu˜Ş)ů%iÉ<ƒđÝ<(i2†ČĐYńqš%ţ=™q{Œ ΋ţŠńĂ0Ö|ŽÂ(ľ#P4(ř1ŇFN)ˇ -P‰ďŽmPˇ×§â”+< _žÍťœ hxđ”Nž"eㅢ"Ţőq¨—¨PU鼀o‚âü`—§§:>>1Š?­Mxe/ΪɸŔÖŇŞŇ `ž O4›\×YNó„1Ö¸ f`ˆRjZ}*;âO]YĹdHZF&…`Ň-ˆ V‰ĹŮEyŻ˘řžNBZ)EyF–hÎă! ů,“Ô`šŻs<P6PÜhQŚ ňÓ嗴Ů!śšÍ ćhˆ?gS;š:×˙FÝAj)ůĆ&°Xż̘uD Ň*ű íá[–™yE›ŠĘ˙x"Šňhß,çϐîŒÇ.ˆ??âđâĚŚŻł-Euň0l!ţ îtĐ-hčú5@ýj'ÉŠíú_Č5ĄÜ¨Ď8/锹¨uř#kÚs´Q’śˇ}Š„¤„<„q჌éH2ŒŸăِ٠—$"Q RKŽj ú_žU˜ÔZ´ä“ťő eÉjçšé溣j ˘. 'tš€Đ–š NŃgľż%}Ą\‹M ÇO€XĎŠ˜(ěÓětŸÇŮH€g€ ŐRŰŮ Ş˝y7ĚăŢźy[1Oüńć͛7˜2™RŠ%ŮI‰zP´ †`â™I/"E@Ŕ)-#ßEˇażvÄö÷ö)O ¸Hš™Sö¨×_§>üˀňŚQ“Áq•3'ŚŃh-9kŃr:˛wŘ´U8˘"“ë[ľvť#ŠŚ@Œ¤Š˛íˆôTń9šąTÍa0Žk)0Př9Ř?Ą˝= ÇKdR!{rĘeϸŻÚŘX§7vš}sYÄçýěŮ3qČŕdCęŽvłŐ¤;ŕYÎ研~Ů'jpÂq~¤şúÉO~"㎔?ybH\óš%’’wřťb—ůu˘Ž }ˇM֋ë¤;/şĆU†Î™/˝yóćÍۛ°ËTtMqŕźô_žä͛7oŢź­ŘkšÇ¤=)+ă*Çxóö*ö:*Aßu ­‚|d‰ ň?Ĺ<–WůŽ?Oěkě‹6ÄŘĺ~žs;ÎůžÁ+ú'‡˘?oÓéLúcŔřô€ńe`Á¨˙óýÚßßçĎVńgŮ^ř›kű\Q–¸‚űĐm۝”î­%ÔOm˙ ™6”taÇÇÇ´w2 ÉÉXÚOpw{bĎm!śŘ ăŔžĐÇd‰NHe')ö,NâĎ,˜WęQ…6D¤H-Ň{! YčŐ s_‰âO- §Ô|ŐYH…çę×étdĂßNŢŠV9âĚÝO’~-ŸQlç,¸G°áوc‘N exţńy¤ěFÓ§úňćÍۡĆ<ńǛ7oŢČŽďÓ2é§ÓéRŇjяˇ;­› &}QÔ¤Ík×éÓĎ>§Ă“ ă@Ô`0‘<<8 ţ:Ĺě°lň+ą#ňd¸ŮlPĹô‡ßţŽö¸\œgĚNö€7¤ýúŕŢűĆq( ăÄ&H-ŐŁ1;żýŐo¨ŰëŠRösˆ‰č˙ňˇ˙‹Ô5âIę:;m°ŇšŢëĂ9…ĎÇ2‰E!eśwá­(„Hz'˝Đ%™1š†c§Čĺ:ń“oLŞˇˇˇ—ˆ?ÎůV6u‡›´ĎEŃg$Î7ˆ9p|]y˘Ď×Éé‰LÜC;IďőÖD•çčřHTyđţœ¤`ţˇŰ-‰A]Lô…–6‡“9Ď ŮGT…lÚ¤*ƒ5m„Γ'Očč蘎ńřŔ5>zôˆ÷ ŮyoQ‹Ţž­vłZůlY[Švœ~qŔŔŤ`lß ˛Ď’Š3ďôĽ˛>tuÓľśW/ŽĹ×Ńl~Éۛ7oßVťŒôăˆ>őô^ŤÇxň7oŢźyóVł× ţ¸>ĚS'ྷoľŕwr7oÎŽâ×ç‹ĎčkłóÎ÷.›Kő•ňY‘Ó„Y´OÓ̚ IL3A‚„|YkeN×yż–Š$SÄ˝ň–šqɌ4oyŐ¤tâĎ´Q É凼¨Î˜Zđ>Ń1–NÚt@9˙=äý2Ţćă|\îLö‹ q‚‚ň¤I•Đ€B:ŽÁä1 B#ĆÚň KŕţăܛX™´SPř‘ôB†Ř%f_”"^đW—˸ŹĘiČŰDV…hĽÝ´IE%ä2˘0c\S‚ #*ű̓ă EÜ>ÜnÍN‹ÚÝíhŻRT–JkT`‰2%_?c¸a)$đMœ€ c°Ď„\’[lÎ`ŐŔ:3˙<88$ŐhSŃęQ™4–4H\+öĎ2ƒÁš`FĆ´Ó÷“Łň<˘”ŤL&Ą"”Iޤ@đeIĽĄ~cˆ9u%vwžęä §„¤ĐŠDůǤ^viľâ8”qZŇ}U Ň\#„h ÚÄď‘ţLTĽd˘ĚÜňyů+n—BČiÓaƒë‹~œńÇŠÉPRů‡ÇHiŒ§—P(Œâ LżĎ ő„@Něšď !ţŘՁҨČƒžq;N'cy…úź@LbüŘôé`H'ÑoĐFsť#@u)xWúÔŚĽ˛×îRUËqcŸšzTmÚ­„Z­”š폾轭mś ń ă+ç>:ĺ:äŒ_ĆŇ.őŚŽ ’šśä9>q‡Ű˛%ęG1ß7 ˇK,Šű&ӂ˛퐺lĚňlŚĺşq}Ìďő™˘" Şßs›YÎâžjĄ&dÉK ţ¨ŔĘáq m PĂ:הbľ@h—- °ŞAn­}•9&0ęYrĚ3sž˛¨Ôł4ßĂŮ|BŮtLůlB%ß+P1ÂÚ ŇđľÚ-II†ëEŰcÍýq–¨ô5ÍcVZxH˙Ÿż˙Ľ8Dd˛Ópr|L˙ë˙ăŸĐ˙ó˙ý˙’އřn6ĽŒż§_~Aéo>Łhř{>ďŒsyÖ˙1éĘʡCüQ–šď˜˙8)H3PĹyřč!=xřP9Čы}ńŠ Ÿ-’‹˜JB3ë¸"ŠáđčPR}Á™EdČ?8/(ţH@šˆS5žçϟQŠÖřóöœr?ŽdŸţz_úßĂ)• N§M?’óA%D(!úőéçÖ­[ôŮgŸŃp8 vÇ\ ˆ?y^ŇőÝšˇňvŹ’‰­đ‚ę~ġƒýú+ŹÝżŻ|-wˆKĚw^Ž03ŢÝ羈÷}ÍÇ|˙ďźC=ď͛ˇwÝVYÜsŤŽňó˘ă<éǛ7oŢźyłöšŠ?ŽQ-ţCęń>†ˇˇeocŽ÷mœGâ„îŻŐӜąÂq̋ÚHëӊ)陴S{zN#(є9m3Έ$L; ČB;/$M J{kŒfa‘=%Q x˙š iŇ )4ĽINąšAE g vITš|œű䞈íă‚ćüÝT5Ç4Ş, v´Ŕœ&mÁa‚fF/K•ŠĎÂ?_Ì~ŐiŸëB@ÂőĺĽ{J%ř^Şí!>WČmF9ŸóDe´7ĎčI8ăăOTËęęâ[Ą(ń4',Ăé( Á|*$ĄvÜ FœšFI•Ń,›’âĘG͔Ďh™\ł–Ŕ@ä¸r¤… 4 -ˆ>h“éd*„Gpˆ}vfóœFĂ1ӓ'OŠLZ”^‡KےqHԂ öŃBV™Î&|Ü\ŇŤaŸSŽCZ’%-%„gÇ ąĄ…ÔćbRfřď—×™ Ň;ÂŢ(”k6^8,Ę…pL‡B •$Œ2}†ćFš˘žĂýMPĘ1JîŞHddę"¤|ŧŒňHŰôLhűœq×H0×(Jšmľ˜š4¤`ZđŘiđWäiW(ýŕ?Š;_7_|˜óű,ÔuNů)Ęš.YB ¤ŤĐ†!“Á?ˇŞ1%TĄ@ŕO¨ŕńź}ž16›”y9cĎü!šˇŇŞPÍGŒĺ´ôë* m`ˆUŘJŁźcRŸ)QąŠBKT“ö „”âLĘ÷AˇÍý’jţlN›\ďmn“í،w¤Ńƒ.ՈďŹ|:¤9ŇVĄŢĘŚ=ă“E\7„Ú‚ˆŐçś˝­'|źćr[6cšńçă\Ó@#Ľ]N7ÖKęŻń˜IľÔ$˝,7˛ĎG<^xěć&užl‚sjZđ°Y˙Có*}8|30Ä$š-C:‡ëRżAÂBĘ5ŢĐ^€eM6€™?E­ÉœËôaQ›‹Dą 8F 5ĆŞĘf4Ńüô€/bD?űb0ŕb ÇHť§˛U…Ć*ŁR´¨Ű[Y\šŇďZŞ—7oŢžëć‰?ŢźyóćLS-Ó.;%9ĘžŒ° řă˙˜vwv…h´žš!Ž҄žĐçÓĎéŤ/ž”IëÎΎœăŤŻž˘˙ő˙ţOčƒ?”jźƒÎ —GTŢ*ŽŽ#~Ź*ľž ¸M"‰ŕ`XÉÜÉtBHŇĐóçĎEţ׼8ƒƒ RŢťÉyÝ$ Âh Ë{!ţ°ă Ň”xĆ\HW ü˜\PšĘäŽGÚH„8çcÄís|b•€řœíözŇëëBüi4&:ătŔeL*‰ÝííkBJ‚¤/žwňŞřDŁŁŁ#Šöw’˛¨×}R”.ôć…;I==ń’#őš$’oÖVŻć ™-Ň8Q‹ŰŻk -,}I­őRŞ?Ő č ßÔ Ů]ňć͛ˇo]ś°¸Ş4ŕ͛7oŢźy3ö*ą őßÔ:ńśţ{QzNOŔőćííší`îő“$˘4â…îSĄąôœoK¨ýˆRĆź¤ÝŹ vlŇé x.Č ŠsĆ ,H•Iů¤C^¸×ź Ď‘ŒWÍA*š……YHŸk!a9‹čd6!S¨ˆŚHýr—‘Аß7¨ Mŕ^Bé…ëÁŻc^ŠůGŒ Nyß9clsÍŕXŘ&ü~OtlőÜĄă˝ĆŸu@Ü&BżP!{0VIFńç”céD/ˆ?F˝ĚЌhŰ~ZČ5P ÜK¨MzʌŰKČ-\žOWl262ֈÜV%ˆ \§Đ*ɨ*%ŐBiXgPSxŐŐӸٚěą>>žGa{6ú×)č8…I••…´ĎdžŃńč<ŸK{‚,1- ᦙ„Bâ9Íš=ů˜˜ˇ”O0áq QN!éĆć…(ń…Ž)š"mŻEŇEA Xh`żřS‚“ě˘$•Fđ[8…˛_Y(QŁRŞ´[@q ˛KČxqL˝ĆDĚXn) ,ůä„Ęو‚Č¨Ô˜Ta‹śsj?¨ ^žB#+T"°”űEnjY'MŒ“¤ŰKcęścJÁLá*ă{qJqŚĺú5”˛,ËcsĘ8ôŒńč˘䞌ęţă~ć{Řöő¸ ÷ĘíĆżçű#E€rD§|SESĹxw@ťÝˆÇ˜!†)IUńXgL~Ć=˅=ľŻB~çŤPÉĘ0žĽl8rÖB( Œë^Ő@˘ Ÿ_BŔ*+|]Ć<žAlKűr‡†65¨{‰Š’iOŹ9¸őž„˙ƒV1<Ľéé1Í'Cîc~^qŃ>ŕă…B"‹ŒRř…NéĘQ~´'Ůxóćí5Oüńć͛7“ˆśzWMBńv(â nhI*đI[ĘLáăőöíۢ"ƒ4OÚJf‚‚‰´FzA &Xčpćp&ŤÓůTĘń$i¤B6R œjäĐľ9݀´Rpđ í:ç ęEVw"ż1łĘŽŞő÷ƒ5f\:UK ózd˜UܔŠjĘ>Ţźyóćíë6Ořńć͛7oޖmĄ6úŠÇ×Ô~źy{űvţőMcbﰅłL‡ĚňźJ!Uđ"÷”ąľĚŚňydMh™TJ ë‘Q‹žÖćEö4eĚMüĎqf\ş?$ÎÂ˙źToG Ca…YŠU˜€´ b*CCäż{yވJP‘ŰVeEFšĘ éˆq;ŕŻZ4׌LĐP7`şxľ#¤!‹m žVĽ¤rÁ~B˛Šľ“¤‰f>— ž Qüj°`h eA&l+J7Ü ˇîöşŇNŔ% ‘Ie˖˙ôŮTŁ%*¸k–ëćk†ňČ?1ăŤŔ$ýMę ˛zíąáş€š–enđi2”Š7˛} éśtnŽĽ )…ź?ž›r=@„hŃcV‘“ž+°„š˘†k)ľLZ"Z>%0TăşIőĺČT2Něő›tXćx´o§RŻ ńÇ´Ąć~˜I_`ĂîQŇ⏠žŹK@Öh¤ —•Hy ÂXę!㣙Ż5°*O8Žő&2D%—B–*,œŤŤśĹ¸@7Ü/&ÍTQ#GŘşč71°ä¨ĎbI$„ŸFŹ*┢°âÜs˜ˇD>7ç*%ř4á>Ăý<綝čČ Ž%ˇ(2âäzš.¸2´Ĺöö6Ýlt#iKM¤­ćAJS>>ärэ4˘–Uĺ7Dš@ŇőážŔůŽó ĹɈŻeś ýâÚŤŤTW&ĆÜ˙Ĺś¤„eĂľĄŚBtĘ(ś÷‚zCKx[sĎ|Œůه燛íŽ\›Kˇ†ľ¤ĺ“ű=ŠÍ:Ń[´‹IÓţ÷͛7o—›'ţxóć͛˜qžœDŹLŇÁĎ ‰P*Žö)ržXćČ)HʊÃMĆOž›ź_dĺ[Ë.×21”É(< JČá\Jţj̈áŘ6SDĎÄ&öEéČAĚ.n“€^‡rţű`2˘Ó|NłH‰\l™<žČÓ€ńÎÇ#bCŰ\Á•ÂL-ŔŃ!˝ ŹL*Ί‰óîőë´Öí °Đlś„ücH;­­ő„ܧǘ%ű(-Ҩ"éÉŻ ďœŸŃfďůˇýĄHÝ"Ň+0üsë•rŒpĽ@Ś‚Ó—ç™´ČîîŽLđö…í?éŢ˝{tçÎÉý‹_plátźô÷7˘ ĐI›źm°ږ>žłÓ íu#7HHpg|î“ÓSZëŻs;4ŽëŇý’Éúš_éĹŚiÜLďjZŐŤÇ- \%ř,/GţšęŽ//KĎbž_~]j‹ŻĹ\ZŻ•(՗¸`˝Đ橗ZŰĹ%+‡ÖţVőŽS˧WËEŸS‡‹żş‚X,yóćÍۡÉ<ć͛7oŢź˝‚˝fđÇĺ>Ü9AV^}ĎŰm#xfpś€ęoäŇ…‚˝!}Uu9ż*‚œf 9”Ś}güz˜”čŒ&Œqő‡\CĘ!­("IuM‡”đ~ż™1,9ö ¨â€pPU˜Řˆf,”bČ.ö›`Ť@ꅁ¤ŇŮ!„J č26Ő*H­¤¸NóŒ1UŽ+RsAĽ‚ Á~\ˇĐFkhƒt_xŻŁ‚ -!VXRÂ‰Z —CIÄ`´چTB8cŠn§€ńKâ뉸ž1Ôb °cäjcDV§„ŰE—Faç/ČĄÝP¸‹źł´¤ÄZ< ŠĄ…ë…%ži$œSĆ{ź\/eIŤĽ¤ÝŢĘŕzŔ)u!$Ô”œ/”TSʒo qjĘxs6P™ÍäÜ]`ҌŸśůďAŠHŠŐlSĚ[ ůúgR6UÄ%’ţKJK”}ȨŔ_Ç9r-mĽ¤š î irт8şÇÜ9Ŕn‰Ű,g }2庉ŇOI“ җń6ͤ]¸[ů˜BĆN•FŠ ć 2‹ßÚţ-rŁS$ śpťFČ^VJĘ-ůMBDž!…‰"×§Fź’~AתڸaHoÚô­Q6"Qš űťŞŞ!U)$a˝ M d”RŰ ŁíR÷ą%ţ€\RTľp- Źá&ÂuĚç ůž|Îm3oDÔٍ_ç\FĆ=<…"Ö3xʇƐ–"‘MĹ÷1Ż?ÜXoĐíľ”vgZË!s uÄ["}¤ — E¨€!đ€ď śDŐGî ě"é#!Öđuĺnt×tŽ@ł§Ú÷x €Œ$šDzĄžłŠ şP`§řăČUxĽ%!çÍDąk ¨łřžLApäͤ*TUWq¨"gŐՄĚ}#ëBö*Í:ŠU-RŞÖ™_Ł]ˆiźÄDÍă"Ţź}ˇÍźyóö7ĺ@.ŔńA„ &Ɉ„?Ć0ţ +R’˜p§4ôčÁsž<9oń¤<6xiźEáŽřjđÄťxb ň¸QB­FK@NNä2¤­56úěčLéáÉíĎÇ4Oفb!‰­:OH‘îK!Ę„ĄĘm¤Jdć<˘Á×i˜`† ˜É{@v—úöÄ2ŐRgD1ŐŞ ™ >dr1Ďć&˘âčŕž‘§Y&°8‚ăˆŐ1ąŤ“7íJźČ9Y&ý¸×79Ś—ÉD b•^8ěWşhŒA…bZXĹ}gÚ]-9şKíŻh%*î%%e=žî͛ˇď€]5ˆ_dôć͛7oŢVlō|Ť+UŹţĆşĎü”ˇŻĂ”ĹÚtMĆŘ-úŸÝ—޸}ŰĆľƒ2Dń'I(NT$SsóME-‡Ň508s]cĆ/žEă˜ľyŸÝꤗĐ&ĂsHřűć<ácC§ńńyĽé4Жđ %ł’čË `„!3؀Gŕ†ł ,Ü l íĘlJH#fĄ^d’ZŠé‡qŔ řl¨„{‘ ËƤŹr9—áD\|ŽTY|Li‚1h˜ â`Ѝ˘ZˆtŰzIÚŹ2RLÄçâDR… gÄ|ąŃđ†‹HĂé„ĆBž*čŕt@ƒYĆďIČĽ(š”H¨›E˘Đٞ"2”’âLÚÉDHI’2ÁŤĄ€> ‰ć yn*˜$3Bʅäďƒj=÷aĘ}…&eV…¤Ü* Ô^JăO'=<=•WhşŒ;OĘ&őDí$˘QˇG͝›ÔeLv˙h@… ފĆ*JƒÉ&!㿍D”R@–(rĆqgFĽ'ŸqpEMţžë5¸ÜÄ(ŠH%‘„,fˆ\ŁńŒŽ&˘Ę„ †’J,Vąb¤Ť$źäţź0#=sÍ4Ć H!ÜfIFI,„7QźŠ “š,´ QEi”úsC„‚EVáĹ}Œä$¨Éđp‘ńr°×J<Rż!…ßq(Ë.Pť›ĐŚEƒ‚Ďľľ­ˇ&•ß‚ĺtoĘÁJÚz:Ę$h*÷ŞĚhtĚÇoĆm^>1ŤKŞĹc6L)‘.B0˛Q"jđţ4ŁÜŻw;sşÓMč_ok ‘íw5GňĺĎů\ŁĂ Ľ™!‰Ą•~lÂ{r›f¸çÂȨ{ŐĄhQä1¤Ÿ Â3ÍŘwĄŞX+ATˇŤ˝ůę06ғ)ű x÷ˆ¤ÍCş7(qIň=°Š¤ĎĀ”ŽÔnˇ㇠Wŕҡšç˙7[¤: OřžE éÔ°&ƒľ…ßĂČf l ÁĺÚט<]`Ťż*îwîF=žěž+řUŚż}Gł'–'ÎPU:>=eČw"—5Č7ŁŃXÚRąň„!ŠĂIĐÂŃkwÚ´ąeŇyœgóÉÓ§•DíÖÖ­őzňşżż/d˘ř‡°2ŽĽDUěěěP÷ŮÝݧä\ËW_}%Ż(ö{öě™ô˙ŻýkŽëHBý~_TíX6okNţ ž‡Ł§|{ěÝ^ź­ÝZ_˛řŹl‹şŕűúűęöxńľWĘ_Ţźyóö°óĎ#ůxâ7oŢźyóślő8¨—ľŐtĆuĐyţL=ĺą7oŻbFĂ)_ź_˝ŔœşđĘ ”_šUž(+v‰˘Ďßóű”ťĄżU2÷xŔřh\‚(ĺó€"UҁÎiľTň{YŻŻ‚Ë´(Ň8ŕ#°ŠHŃ%Ë÷eM=Ĺ*ɔݗŰUźĐ´\YnTzČŞý‡JÄITМƒ˛1">GnËa (ŠE~ÍD1\KÚ(ŠŹ‹œ´* Ą€Đ“CŐLŢ?ą › IUAǤƒ y&D“ęŒ(iľ¨ŐíјąČůl*߃Č$Ş/äŕ]-îťk˘C`ŇŞšÔ_ Ä!› ŠçHm48>|YCŔłůoHÍ ˝@ŕÉfs>&ĺr¤Ĺ "%d ľĎc=°˙ˆą×SŢJJ)cÓ3>÷ŔśCbLŁIÝ­kÔßžNŃý‡ÜŻAUç*]°k80N“ÇFxŞćëéŞ68,Ş@Ą=ܨťƒV‘'/L*­×e %ő,—öÄţÍ´dl7śę>Ąŕlč?§8$Ł×bű¨ú7WHMVpűƒQĘŻłiFI‰şNŒWž^Œ?ž  (F҉2’Q˜Éí5‡ť1ŤŹâO(˙ňŃš?sx6Ů6h7"ę4ÂĽ{ ÜFvA2 (ۘ{ŘwŁ‘R{ŁEkŒIonRÚęĐL!Uވ4Ňóč˘*…ş%ܝ° ľÄmü>SÔȸgPĚĘiNP~*Eí 6d7´YęŢ@?hŁt?Ă˝Ź0ŹČ<&} JĽ*ř×A᪠°T–Hcvň°Á–şšôÜ2„"§öďR~D˘žËx̢ú?7ý#ÄÁ˛Zˆ„üfTŠ\Č´¨Ů”`9Ć –eUźL†Ě*ŐQóˇTíĂźyóöŠć‰?ŢźyóVŠĐƒC•¤ M&c>Óď}qôLÔtŠźrDôč‡?üäłÖ4“h L8OOéđčP zJDp(‰`h5[ôÓ˙DdK1y  ˆĂ“qE@6™ńä}nŁ dO› uÖzôч˛ƒ–H¤ŒłçŸŃżűˇ˙§Š+;ëÓSŠ'CÉă{ópHw@üQľˆ‚ş8ĘŰ6çbRŽŹ„Ś‚•\ťőJ:Çy‰¸]x;ä6FţÝĄČx˘Í‘ł9IâH@eg:™Ę$NVŻ×ˆ9pŘ@ :Ř?tax˙çţç’űwűÚ5IÇuôđ!ýęWż˘ÇOK¤˘@~öłż ˙řÇt÷î]Údg ÎęńčŃ#)×Đ_ëӍ7čüŁ8¨P‚“Š”a ™üá.2ŕ-MÜß|ŕÁwŰ^ľŰ,ň˘Â]ÄśRësAs'?l%ž^hÚE¤xóćÍŰwÄŽBęyéŢźyóćÍ۟¸˝NČUHˇŤűťc<ůÇەĚúÔŻ6‡Sä‡Ů˛aa|< 1d`Z&͔Ž/Ő=JT)a#}P7DšĆ¤ŰŽÇĽ(“Ú)ľ((mH˙Łúâ]ş4D¨…”ĽM &Ę6ޟůPÚ(LŕžÎf4Ëf"ß#$ ţ/ăsáUˆA%Ôs g”sŘôY˛?ˆ ŔJŤęŽŤ@=‡ÁPE.(k)Ÿôt*ŻÓhJIełź śÉ[‚7źq㌟î{zrL“ńPHDRrTiŰŨ¤,¤3lÔ_nď@ŇD ń‚ńÍ'Ó!c¤˘¨ĂׯřźŔ…ÁÇC­iłDŃj삝" Քڀ%Of)ˇÝlKc›ąëFž A ű 766čdk‹’f9ś,AŤ$—ŽÍvfR>: ŢěŠö€˛N’˜”V8úbČu‡Jťôˆhgž#ŽBQ&)Ë\z'2×'ďm攑ŤŇŁŐ"•œô?”Ÿňš`É.ľV’DԁŚÝŽŽÇţhOŰäëD˜ÔQ&Íę‹űJď´Ä“&ϤO+/}Vš1ę=fŒ–†„VXâXiӓŐîG u}`Ő7o^§Ÿţä#ş}kWTm†“ýáÁ)OÖ ¸( $ôߢ´U[’ăB›ćtRžĐpfƇ˛„6¤‹ŤĆ$ˇl}2ŤäRŁ:4Ş:KÄßúď=­`˙/ű`ÖŐ}č™0ް~ƒöLqŸČúKdî‡<—q>F˘’äÚcyAßŘ׌‰†¤`3 P…Űđúdݎ‰!źĚüč̜Ę˙čyóö7OüńćÍŰwބAŻlH‡DŁ@Z˛¤!OţN†Czćô€'ż×Ž]ă `‹ž?Ňöö úŕŻ~J;ť[¤ƒš‰PŕÉç/~ó+z´÷€î?x@{OŸQƒ=¸6;Ćëô˝{Їßű!5Ř1<>>Ś¤ŰĄöÖ&ěÓƒŻž¤Ă“@Ş•­Ă“öŰ÷îĐ{;;ô“ď}L˝ľ5Ăzˇsˇs˙_Ń÷+v"w)é´čŮÁĘNeBڜ4AZžƒĎů)ß`ç&*“ž şęˇgâDŒyâ`ÄGc!΀Óa' ywMŢäRr!cb UlŽŽíëOÖç"űÚ@z4žäˇ[=!ţ`~t|*m u ”ł˝˝-¤8A˜äŻő×čúžĐ˜ßďPŻŰŁuîŸVťĹ BFGěŒOç3ĆrÉ{ÇőD˙ŁĚ§OŸJÝ@jľZr^ěóńÇ‹Sâá#Ł 4Ÿ›şBŞDV¸ôí‰ţœ{˘ŹŤ–?žGeĹŢ 3î>^|híŞe˨oN6V䄵yVźÄ5×Bôň™#/YÉg}AuŐůyóć͛ˇ í"ĹżĐč͛7oŢź}}vU‚†'âz{V&[^XžšWśƒă°`lHúOv|‚˜Ň‚â…ěœqˆ24:eađ*Ă?ŃB ʕ˛ŞĽ(€œđk›Ă5Ňę@-ŚĚ… F!ă!T*ę;šQä KIƒĺúxd -.ŚÚ‹ Wu Üęŕ”Q)2!˙ Ođ:ËxŤĐ#őă}Dő'/…pJJ"%iœ˛!đU!óZZÂQĘ{ˇxyŹĄšŢŒß†Ľ^ÄYqš%”? ÎŘތqBŠ$HF8O"…!ţ đ0‚ہ ä΅ƒ€łąľ%Ę.qŁIMĆŒEN÷y„˛9)‘jŁ$˘mĄ ɑ` ů*1Âw°„–ŮdL{OI٨2ˆ"(Ĺš%ŐRA|)ťx|φ§˘8Tf3* #gBQ™BK†‹Ë %•9Ú^ԌJ“)elłÁßá:]§ł }-ÝĎ㍐€OUŠ!%V1‡&Éߤ †Ł MgS‹kCÖ #ÁOp3$ľW@+-A­béWgBřÁ˜ bNWZxbŽ=˝ôY2 EAJĘćďf“™IŠ’H`nČŕČRĽŒľLˆ$ Qlľj@y)jTBŚA[—&=Řr4ŽŐ'I 7Ϥ^ŘÄż ţäŇ'˘X#$0c|şvŤĂřt›ŢťťIw?ŘĄ[7ŻK?Ý?ŚüÓ|J*RÜOŒAgŃ ęQŻ1ˆLMzüŹ›jš Ĺ4Ց¤áKxě6‘ž/„đUŚ!˜lŚ A˛Ĺ#Cś*ŹŞż(_–LT*“ŠÄÁĹś bI 0MőOÎÂŹľŘŕRT rIÉEs!é@Š iŰpžDRđrŻ"ˆˇ´ęߑÔЧŽmmR—=÷oÝŚ­kŰKdƒËg|ţč+ÚěľH7B:Óđd_ępšłăŚRv°•qâĄ.Tc€¨o`˘ ůäđH˘Šŕ@Aľç˜7\'Č9ŮƆ€ !̀ s||"Djp,üMD| "ŁÝîńŽ08eÇ'Çâ„9BRŁ C:á˛úëëtű˝Űt˙ž‡íŕđP˘%Z(ŤÓ5ŚÉtĆÎçˆŰ)•Ś““S9ż l¨‰ýÉ?ˆAPGuĎrQüqŃEp¸•SÉż…ů¸žôóZĈý\€ýmö$óř*ă^ŸÝ”“ śĎˆ—eݨeňOu&­jiđȍÇŐŐ~\$–÷ĺźyóćíŞvق'ţxóć͛7ooÖÎűÍ­€üoݎóěŞ$ąóö3Á9çG/9\é*㤤iÎóäÉI-ďČ?ŠćŽ éxćAɛĹ9„_Ą ą*.%IÚz(Ĺ źPţź—€DÁ$”1ă^ ”R+ćAŇŕ/Ű%/Źóë„ (Bö(ŞH9Ąv„-dÁÍPĄÂ˛yȐWJQCqiwrĘňÂŚФ~ ň€hĽ›Œë ŇNŕSK4ÂIŐ&˙!eČJź­ó~c5ŁiŃ>cЉ”c뇅XfSQA{ĺńœJ\'Ž JG¸ŽŔ¨Ě4Đ&IB9ă¸H‰Ôˆ#j0ÎŮhˇ¨ĂŘäh8¤ÁÉI`ăt8 Jć<”ń–›˛”Ic'D ţHEą¤ş G@ŕś i>S *ć[[Bň˜ hĸëP›>) x$°ËÁú&÷ŠżľÍxfŇf›TܔfĎO âDÔíĂ´A3ĆE' §äs“z lN ×uRdĐh"+eÔ¸$őˇ…âTH0łyAn;]gpPiűDŰŰÇÇ<îbÉŃ&ŮĂĐ÷ ¤#Ţ{<7$.(É&}–(Cť‡šŇËŒ'U ʐKŹĘ úGŽÇށ9 űCI—SÁÜĆŁŠ!zÉVHP'Ž˝äö…ÂLͨiՃîmNMƐC!d!Č*@™¤ă2iš&Ü&PXëZčHqůŒFӐžĎϊĘoui˝L A`ăë Ě÷¨d ź¤ë úŕăcĐjőyě|ž?gGt2ާQ6$JJЁ˝ˆÇŨ:U<šżCŐăńĚçĺs´ƒ˜Ô¤H{͘nlnPƒŻ˙é^ÚÓZ‹‚ŚQ‰Ęf9 '4ŸÎ ‹ É',MCkç@2TÁ úĆDP˝ŐÇö^ hA Z Kö˛DĹ)ÉŔbłĽÉÍ'Ď'(7ĽPŢRŚôPҨņ0„WeČ>íV›şÜ—ŔůĄâTŕ>nň:DkĘ÷ŔŻoĚý6ăćâ~Š ^†qíÎĺTÁč혢óÉ=ŤťóýUçZ~NćÍ۟śyâ7oŢźŐĚÉ9ÎlÄ&[FSŇA‰RÍhd>_>ŞB‘Í4Va˜[‡ÓIç‚•ŻنˆO$ß0$-ů}Ύˆ!ž˝ké}ĆŁ1=xř€ö÷öčôôT&툀Üíýű÷… Đ­[ˇh}˝/NŽű‚Đcäaą%|ý!ţ$I“č1=ţœö÷„T„HQj‰Z(źÁ9zk=‰†@š(íâN‡ËIčѣǒŞíÚÖÝŘÝĽ÷ßżG7oŢG}ůŢ{ďI˙Ąlô5ţFű÷ŘyBů;;;´ťł+ä!çŇIˇŞšä°ˇďŽ9ŇNíşˆˆ$Ď˝ú˝ś¤Ÿz9W|†(Ÿě˛7oßMóżˇŢźyóć͛7oß^;—tŃgi—s=ŕ‹ç…ŔŽ€ aq„ŒŕOˇŠăŁ Á‚śó`ą°Ɗł°M ą†œB‡˘)˙}Td˛€Ÿçâ÷^(š •)JtIA ć3Ś‘‰PśŞŢ Ť˘˘céBn1Ĺ-ŹËyKÉfĽl ‰ÚF!*/™Ź÷+)‹K5¤Q€yŠł(5C=&В… ŞîĽM+ćd€´(ű(jľULM^"KšĚP›ŔI§$Xž(ţĚHó8ÉEj% ˜şj†ü ›ŠŒ"I̟7ťluş˘îŢ]ëSˇżNĆ#őxHsƇC~ŒŠœó–ĎmŠ´Bp‚lź˜(Âđ~óńLR ő‰!ĺSŇӑIqB™¸Ÿ'Ŕ‹Ą4”Íi<<•ńŢlwIĽmRa"çK:=ŁÂTšÔ_PBĎtaI>źˆ˜Ď¨9ᲁ—ŔĹËĹ˝h‰+…°JQf™ço ŐF #Ŕ(Câ‰E}Ĺ)B91l%ýjˆ0ůâ~ŠDe#M´¤cîW-éŢܧ âYâҤAÇŞŚŘîĂHŠçËĐf6ĽSš˘ HgŔفű†q(„ŸÉt"Š?MƅƒPÉF¤Ń*ĄVĽ´ôŢă:ĎCNÁŠŁ†HĄwĄŃ)üHŞ´$•sŻwCşšĽčÎÍuşűţ6moˇ¸>\—ěXÖ)†ĆÚAbâA&!ľťMjĆ=Ň<†1žš|C&a‹ű7ŚÉ¸ +iSžÂF‹Çf‡ëŸŃń1_ç4Ł(áëJÁžg ÉE3!Ŕ‘%Ö)!ґŒ÷@ŠšŞ˝–sśŔŠÖčĹZĘyĎl÷ šDĚ9Ż„ĺÂhC˘ “Ż™6¤ĺyaU}`ő´g nËzŠIuÇוś(iušÝĚ59ŽŞ?‘aĄQ8źĽľuáŰs—.ů­ňxˆ7oß]óÄoŢźy# 8V={j6§0Ë)ΊüwëtDě! ‹>9Qcű”‚ွ\Ţ”`ŒsŃMic’ŃĆ4§YÁdH뉦ľyA­;,\VÄNU9yůt1—Ůâmˇ ;F%˘eŘúüşÎ[gÂŰŸ›'ąőÉ^{<ĽMž„7ĽĚÖń"vřŕ\őАRŽw çŃ*ĆK´Gę7/8S•~Šâ<ń$Ä€( ćČÄ9Š+rUp,E!9z“XČ;’g—=łś ă¸8N)‰Ôî´Ůjđ„]Ńp0Ś˝˝=zţ|&“ŠLâą_ŁŮ‚&űPíY[_“t_ ý€ „zásLŕ! RäUçÜŚ7oŢ ťwîĐÎÎuQ#‚Ai$ ”żá>xđŞ5[MvžűRÔ~F|=7oŢ•!RE|Mcő˘_ć4ęO3íL_đŢÝ5őח3+˝$3ěŠ3A+&ŞË\çc™&= ˝#ŚVţöĽ7oŢžć0oŢźyóćíë5ŸÂËŰëŘ"ŕĺbĺĆşŇϒş›çšĹeRô9Ńď„ Š€ńЈą7ew”]¸ĺ(p‹v‡^,vC e¸ć˜qN!ypóOŚ hِg”†M tXÇ‘w„¨ T?,ŁŽ!h]ÉUý U‘`EÁsĄŒ˘-A¨öŢĽňR65„€Ă)ŔDá#´J%†€ÔF:–Sč¸˙Źr HNÚÖ?e<"i'¨Š$QÂם ą Ĺ˜b'ˆ¨É߁¨ŃŇFDĄ­;”SšiLëŒIWÔó•Ł!ŽĎ<Úߣ“ƒg4 ¤~ŽđSżn׎¸“*<őéÓ§‚IŚŠI[‡Ď€ˇ‚ř#„¤žRM¸ďƒĂŠâOŇŚ¸Ń’cP÷`2ĺ%ओٔ Ś,`fSšŽĺ;(UŒmpfd€ľŽÂBĆˆ?šđ0›^)°$SQďŃfě8ŹÄ&p2d|ˆBOXő ΃[`grŒ#řŐú0ŹúO”“Ź‚ˇěňЁ#քҗ0`Ď&U• ڔöç×cŢ&ŤNćŒű„*´/ŮŔa|†ţ‡ Vks˘řŁÇÔ:â{"ŮńžlÚŚ°*‚âĚý ‹EĽŚE[›k`úŢÍuúčv‹Žo6Ľ>Řm6ŸJ}ĐŢ#^ˆ­:>đő.cć÷nߖ1Œ€Űüh@Ń<şá{#…Ű„ćq ¸y*mX>—I“•óýzžm‰5˘j†ŇÖZŻŞŞ]íˇ_ŐHBu ťţ¸6jAvŒ€DĆc. UíqnHTh[ݢŽh7ž$˝˙WߝŽě‡žB6”+Ď;ä[$<&ł˜Ç`^őWiÓŹÉř á†#ԞDŐűŅ×Ň}šO.­—zkőöćÍŰťcžřă͛7oäˆf"ŇL$KÄéÜBÍ'OŞ|Á[ł‚6Ů1Š|A”Hň[6Cë_<ĽŃô`LÓŒ’0 ŽžÓÎфnœNŠ—•ÔçÉq‡‡ft2¤Ýă}t<¤.OÂyƒm‡)}|8 [Ď(ůň!ŃÉhŠžý?> [ŸEéç"k™ĚÇü@/dň—ˇ>Oö<1Ž‘ˇ["[,S})ŃkˇšU&yqqBŘá:a˘-Qüwœ¤ĆœĎe2 Ç Ş=˜ŽŻŻKĄ˜œăšUa&ŤˆĆjpYŠ¤ĺ‚ŁtÂmv|tB_}ů@”z´uęI-rľă386ˆr@žjy°œ]ŕdĂŃAÚ1ÔßźąKť×Żóńmv˜3!,őzkźĎu)8î‹/ż¤O?ý„Ţ˙ŕúŕŁĹÁúřăďӍ›ˇ…@„ëEąFÓ8ç9{/ŮâŐë*ýĐGŽZÂwŚqŃ= _°ÁjăţŠçŇÚE.šLďIœ’^”é˘ÚÖĽœç[/­ŞöůuX>FŰ˙ő+9zuŞ“ŇŤ×]ż"oŢź]Ő<čňv͡ˇ7oŢźyóö ™Zy­ţjąŢţÔÍŠpԈKéâhQtŐTa—™#§ź‰˛ŢesˇŠW"Jó9弪”8"QŽ!Iľ„Ą€ăT`@ä8ç ”ÔŽ!Đ  \ÂŘ×dŚŠÁű´Ł€â &$âʕ!ÍhŤBNA |ěˆl‡.H;"ĎŁb‡?,6âé'ŽOn1”ĽôédIFd€p^hóDš.…EP‹Á?ľ–„˜(Xl„(B55ţ Řř”‹1ʘ"ŇgEq$8'°I(ű@™ĽĆÔäśISޢHI¤Ű˛8Ľ¤; Ź‚ĆcŒ“Nâf›šmƒŽ'dâ6đkf9H)™ľČ’ľ LBl:™ ńAMšŒ'ŒŁ†Sî›\Č2˙§Ő„˙=,3ŸŽ(N[¤’Ś€˛nGĘc¸[>›M§4/ Ę#’TmB¤Č&4žĐĤAŤNŠÉ<äq!•ŤnÎQšţRÁ‚Œgř ’ĎËôł^¨Á‚ŔsĐ6hc@ť.ýúF„Z¨Ź´š \ŁŞT¤2§($‰Á”U*m3Öaą¨¸“¤&ÓĽ!ű¸çţž"]Ňz1n ’ú×…wô˙*4PŚ‘rB<śƒeDԘć2Đ/Ś.ޤDR§V]glúćîݚѼ÷/ˆ+ŁŃ˜NNřu<1Š8Xoč¤|Žľ˘L°ôßßrL–ŇIÉ}vĺœRԄŚ|}§Ž+Ąn›Çžâjsßóu|ođ!eČ}Ą ,–´Z‰ÁŰM;-‚%]Ú>š‡-†ę”ˍʝ%Ů)Ӂ:Kfq„œcĆí _¤MŮMŽwžČýśƏëu„-eÓÂŐĽPR‚Ą~S¤´ăSŕţÇZIĚí!K!ůbŢ 5ău†ljˆHů2˜6Łl9eÝŰł—Á3Ô%Ç]%u˜7oŢţtĚźyóćě˘ś˙@ĺ6á‰b éšŘaŰ`ˇp"ÎTa$#ůŻŢđ”żů5=Ýß'њľóžŮgŸSóŕ„v vćš]žh˛Ś´ĆűGtđÉhÖí gZó4ř˜úłLźŽ•§ěłłŘĺI|ńŕíĽ˙@'ěÖ§gáă§tužÎĹńK4"kjňy×ŮąŮ! Ř1Œ ë(ť(sľôfíŨ&ŕ׎]ŁfłÁ“s㸂Œä")0YwQGÎ@Ú'`OŽ4L" ¸M•0Gôřɉ^€š" ß 'Ä´e•/ÎTWç0e M´†­'Ř˙p đŮłgυđƒó˜Ôa™bŔ8{{ű´śžN›Ç'ŇÝnČučˆü,œ18ž­,… \Ďër%Ôż×/}äwĹ^D|[%úÔ^őŤ´áňýQ9ú´Œ…W`FřăČn/c ÂЛąłww˝ćŢźy{Uű.FÂ{Ž7oŢźyóö§işIĘú5ľxĄĘÓzŮx oŇvé慄œúbňĘFęĹŢ+p&`HNÍâŞć”r^ĆŢÔ|X-a|W7ŔQ’z*‰¨âBôQ…YŤˇmź.2t óZ€dRů䐿1vٲ8ă$RTČzrA Ć!g’>¨°Š9Ś,%‹ńŒ˙ń>9Č:˛J,Ę?Č|xÁžËĐTˆ DąD/lHľU:‰ś‚Ú)c”ŰF @6F‡–ěaČ řƒ„ÄדńuäeÄ űJ*ĽĽ”@ĺŚJ[ć|1oŸ疌eĄŮJŤˆ#Ş8 ¤1%)€R!I(IUĆľ يź4‡ 0Pnœ*;­ő˘5ű[týöű4a,ňŠéű{ôœńÎÁé M'Pg™sđrĺ€jHM$‘ôE ‹€ÄĄOîôú˘Ž¤OJÁ[EĹd‡ůBY>!Œ(ŕcô4Ľr”ĐřpÔĂg§]ÁF‰Że–†TĆEąů¤¤ă3!šRO`IWŠŻ ׇӅB°‰?ľj)6˜Vԁ P_SwŞČ}Ľ!˙ˆY…—j<”´¤đdVY"Uh3ÇBÔ ”ŽŇ}™g‚6ĺ,ůŚ( y,›Cé'§PŐ,jqŸ‰‚?#ĆܖxEű'HăĆXąJ˝¨Jé\Ho˘^’(Ôŕ ąĹ݅8#ăřQA͂zĆźš×: ínľhçÚş}@f‰yMĘ\ą¨Hq|ŢÁ‰Q´?>ŇŃá„&“\ęŰjÇt‹żťÓ˘áNL!‹­ë-ŠóÉ ăŕӀĆӂŚÜ°n[FűdQłÓ˘`÷k}q;œLřž.RšcěÎcÉ|0ƒ DÔlÄ<ޔ!ĽI qhƒą^b×Md°öů¸Ź?ť„˜e [:X˘%Ĺ-ęNšŻqFž/ćYÄí ),ćçWĘk ö›ɪⶀhÇe'qĘ} ů ÷ŇBő[›űŻÉë6QŤK!ˇk1R9(ăm:ÓäŔ d6<ű´%˛-Ć싱ĺW4UßÔR›QúĄĹűŤ*yLƛˇď†yâ7oŢź]`PŚÁűz3Ś ąRľd¤G!ůŕç?§§QlćľÖyńä&‘ťťťâ ‚¤§ăřŮ3úőżűwFFr›m ËPďv;B†Đ ŮR|öž?§ßüú×ôűß˙^n%ƒČ¨ůˆŸç–'śčO´1rY Éă՝ŻřîÁƒ P°#ƒ}îŢ˝K›››B^!Č”P÷ IGÇ çE˝–äĂ~p˙Œ‹Ýݛôá÷žGëŘ×˙ň~g­ŮBj™ÔăŔ ŒAó^-r™×öšĘ9–öSúk éxGћ7oŢźyóć͛7oŢź˝%3Ť˙•ż{)hÉç~qŕŠK}˙Ű€.ó˝ëi—žMćZBRz!Ý=ăl ƲJ…XFŮń(ľŮ óˇ.JQ[™22Éhٍü€p‘†0ƒžO!eRQ`UyDE§FH<‚x†`”z,ց}źX.˘$Փ>ʐUúq×؅xGƒ*JŁ­,ĘçÜ´Š?A¤…ôőĂ1˛Ş.N=Č֣ԋ€Iá6—)•(śŤŇĽ-Ë)(Ch ”q ‚4Q6핈Pg¤răÉŚ3Câlž™zƒŘĆ3îœ4;‚77ťSŠZ= c¤ ЍŐîĽôlĆçS6ËxÍłšUąQ‚!‹şzI[´ŒČç–},ÎTBýgŽ)+WFŠfžĘë\TÓ #Óě ś›4k'T"]<ĺŒÔä„&“_[.XÓ"šMŮëś<% ŮÍŕ`$ŠI.­[Mč§âRHqVmZšŻ4Œ4ŁŔc¤ŸJsŚŔŚňrAŸP“ŞÎ Ĺ*e rţŔjƒ`6—ďĐž ŤD ëdÓ;e§ŔÖAăń„ą^ŁZŸĄń‰(#á3 "ľJ38Š‹ŞEŞQU#˙$q@›ý&ݸś&¸óľ6ÝÚnĐÎvOÔč›Í6÷G c8ô}>oŇd–ŃŃŃ čŕ`F =›TcŞEiXŇZ7Ś%EŞ&úý„ĆýMö&|-|߯1Ďu™äSšń5NůZAĆ:Ďi8ÉůÚBŇAÂ-Ÿň¸Qź>‘Ił$ÓÎq_ĺv¤K-Ƹ!N•äÔÇľ^ ŞtCƐJűw=0˛nPcBJÁxQőYűŕz#•0xŕń cQ-‹ÂJÁͨ-˘Ú4ĺźn0ĽVŤÉ߯ɾPТ0‰ůš€ÔuÜ_|?P0ÁęŠ<ăf<>dă>Č2Ł&t6HôŐěŹÂQí;÷´VDËižŞƒ/&đxb7oŢČźyóćmA¤śsś˜'ťĚH¸Bßg—'Ú˝bAť …2šń&‡”6Ç"ˇlZ§D[_Ů0Ý 9tíD˜„ ú3=)ŮD"DR‡’bžĚĂĄŠŁ^ŠéiŮ`ęώŒűžkf%Ey)Ń śz2i%{ăšżšŐ‚őÎ4˘"çŸe˝Ă‰:=9Ś“ă#:99™NLšĄÔh¤vŇE–8Ť˜¸;eěH?s‘÷œŃ˜Űţɓ'ôŐW÷éŤű_Ńh<˘­í-ş&Š›z$J=׎mQƒĎŃ[ëŃúĆ:;S†\ÉN”g DN*Dp˘'§"—‹s÷ű}qʐŠLڿף­­-!4ݸqCœ/žřÂäőnˇŮIť& ú¤%ȢŻ=°>Ű)gžÁůżĹţş˛ŇęßçŠűÔw5@Uőú&ĚŢ/ÚÉé â­hÓdœÓÉé â@‡UéʁŽŐ×Ü3%)?ŻZ °….RĘD.­šGíÉŻlu‘ůG/…Ÿxóć͛7oŢźyóć͛7ooŃ, Č|Ę;,†žŔu„0 ,ďżibĎŰ8?XDM„´́ô“ĺ6EÔśKľ Ęč¤Č x ‚ŔUŔRA&]/ Ë‚;°Œ°śh­BޞĘJ „¨BNá)’đˇ2DK ’WécIťĽ„cIˆNIG[˛RE"‘úsYá‚(âŰľ?`t’.}B3龸ćŞÂ|Í×`ƒ=gÁŒŚüwXšý€GhG×ŢdpŤJYŠ÷ăÖ&˜ NšŽÜ¨˘[ĆšŃëP™2Z6Ó|pH§Ç´ˇˇ'+ԁP/ŕ¨Ř\?áoÝép3Á™AŒ˜gŒ}2­rSŸ}Äý‰ęyh•€P@.ĘčAŤAĹZ ’B›ŇsŠłSĘ$‰€ľ\ĽäR#ü8sJZ&Íׂ¸EŞ~˙’MŮeűȎ˂jĘŘĽZŽČĽçÔäiž!áԉ?Rv°P˙Aš´ůlnĆĽE4%‘2‰ ČMâHÎ#Ä+ƏKK˘ě8›ÓŹČč„Űă˝ŐjŃúúľšÍŠDˆ”R’~ęœűŻPöůř{wčΝ;´ťÍ¸5c{ÍН tƒ2ÔúřńcO¸ý›]>oAt°Ęیën‚ZÓ”€@jJýEá~0¤ ×ÁÉŔą“‘(ă–űž1z`ŕűűű¤řťŁ™ŚńÔ<˙ 2ƉÜCsÁđ3!…QIŤjgşRîZŒ mîćÚ+ާűrőę=Xç šŕH¨éŁg‘éW@ą%Ąţ ţŹ­uůÚcš&W×_ZŇś…2Đ&°)˝űj6GütçƒtĹ×/Ů .P„ŤŘ´~ŠĎ/6uÁ9VžY•<’Çg˝yóślžřă͛7o6HÁš$ ű/QaHś6"$j$žV2łFşÖě)AČ[d9LE2ÖE••łB6˙­‘Â4ˆ|­™<#7p ‘Á˛Ň3ç0ş:™0Ň–ŁÄAwk˙ŇÍŤrÄuzubş˘•i{í/UĹÉTôˇďéŕ”>ýä:<<  ;‰˝m´šÂ´ÇüTň_§FĺÇEG˜\žĽ8zó<Ťň[ƒĐsxxDżţőočłĎ>cG爏KéŢ˝;Ôît%ďřt6•óźwç=ę°ŁźžšNۃm!ţt:mŠ™sŽŽď;–óĺÖ)3Žř"ĺ&ůp$`(÷ć͛˘ôç uýĺŻEżűýďEąčÚľë´šRPO‚ óťťłSíűőÚJÇ.ń[]Ô{ć­óşč…ĹžkœG˘šŘyşˆô+ŠĘMž´i l´řű™#˙࿒A™ě ŚôđŤM'9Doĺ~€pFrœ8¸pVű›<–Ó)-‡ĆŐ#Pœ9RĐËŚ[ŽJŇqČźyóć͛7oŢźyóćÍŰ×iËĆE*?J-–—ĎŚDyąß hhƒîćVÍăŰe/đIŤwl„ąnfş~ćGa°I˛D‹Ňž&čĐb dC†8„˛J‡„|Q 9„ b$ϖ]¨/U ŠĽ ňCŠ$(üâO)*9NýGˆAD&E”#™ˆŹJaHQF‘^„9š€N%„ƒÉšúËůEyˆńÚĐ`Ž˘†r0şŞG&×ň“dƒZŇ,éœë‘-Ÿ b.#$$(›óî3ÁcK!@E|˝1×;(4Ę#Bb*öśHwĽœ˘Q)>$ ĹH%ľÖĽĐá|>Ľé G `‹í5jĐř䈏-$đp>Ďš>ľœm¤$ŔřkϤoň27}¤L›?’ôT!§ä‚…ĎCćşf W¨Ĺ šY> yżźS1Q9Ë­˜M]Ă)ŰŢč_Kî0ýiąĽŔîéĆéjCŕ‘N48ˇ¤ĺ*j*2ľÓéFżŕ>beńGČ?ĘŚSU*0đg3׍ýc(Ĺ@Ý(J¨•´(i4%UúRŇ|M ƃ 1^7rĄ˛ƒY5žĄhŸeŠvŚ”űűO'sQ Âőť'ˆ* ĆŔ×ű=şwg—ž˙Ńmzď˝[´žÖĄ˜Ś4Ÿ…ˆx2Ó`\Đţá =|Č}=žRŇs]rQŇ?:ńބć|͍nĚuKŠ5…Ş=ß|}§Œ_OyMcéĚĐ×XPą6÷U¤$•ŐÉxČ}:§ăŠ–1A-(˛Ä÷Yˆň&—–Ď­JčęŮŕ‚ĺ:ľŚz<âYâ -”l-ŽÖ´—)›Šq •Şli"•R}!8ęűî“îÜk!éÂ`Łčcđ[HŰŁŽ1‚(CŹť _łŞ#†)ˆß XM¸MĆ\7JOŠzĎQ1ş*ióź]ŤŸ›t•ęÜ}Ş5ĄÚw>—7oޜyâ7oŢźŃYZ€pÜ$J/XęBüҏKÇSîP Ž#řˆ°§# č`y¨—Aű}ȓö„˙]T]Lü1ÎUšp|´!˙|Svޙ[͖%ËŹ‹Ó 8q,Q 6’OQE`sę;˜`ĎDég"ŃW_~ů}ĹŰ_~IÇGÇ´ľľC7nܔt\qšŇ`46ňŤÓ‰D(ŕ¤éš@¤€ş#I}U„€žápÄNň6—R˘) čŐMƒr{Ýmomӝ÷îˆ3‚c]ůbETM3/ž…ŔŃŰ1¨÷2fłŢŽ}Í<D??¤ƒ=çcwYšČH›Í˜śCs "ŢŇľ;ą–ŰFWQ4oĆ<éǛ7oŢźyóć͛7oŢź˝œˇ ŞlhÚeűŻçxŐ÷ތŐĹŃÚÂň‹Ôor_fŻŞÄsUĺ÷ýU$Ô+Dő™4F!ĽHaϸBČxbP •”Ś|™œ~U/? RTĐaQ˜P3iJ‘"-Ď,Iƒ+@ –ĽAPˆăDTQp)Y‘Ů ;|iuCC‹˘D…6JS „švŠx)H? äŘq‚ôR‘6ě,ÜcÇPEźĹ˛ź ㍸Œi1•qьb*ŁLˆ.šR6$lAbĐHßŝœq—ŒËš›1† qA1_§š“F:$¨@‡ő˜@”~ ̜FŤ‘Â( iŁü˜÷ËÝřTҨU[IZĽPĂGm ’”ZÝ Úšv‹śFCRƒCěŃÓ§Oéäđ˜R}ـC¤$+˛L i6řXn‹1ă¤Hr ˆ_1ˇ ˆZEܒŻQçҎą¨ńř8I› ?Aîʐ8 D’ńœTnU–¤ý]ĎšěpĽ˘#ۢ_W6e—Siލq7ěwFUŠ\źjűˇŽlEŽ$!|#!ů„HĂ&äŸPđuŁ@¤L*°Jő d7îą@ ^ÜH\e~Ľ&Eé:Ľ­śÔw–1ś;ÉŚ “QN#Ćě& ôG֋0ÂVKÓdš0î­¨ßi<+h0DPęTđnT=Ą^ŻKˇvˇčÇߤ}¸ÍǢ“§Ü?9íMčţýgôôů  4œL‹žĐ Ş7ᔱňšă) §<cMóфš\§Ű™b,[ńyÇ\Ď1œŠB=ÚmÂűŒćCŠĂ˜Nłcšˇf<Žó˜ď_ž (BrÄ÷őfŻ#şŕĺB|˙đPŠD˜ iă2ĂҲ˝@ň ”˛"ŘŽ)í˝Ŕůę–ŽĆ´!äŠĹPŃnĹ.:r˜@Ö+TM@LÉ5 ˆN ­YţœeLbAáŸ×°Ć€ąP mc°%ă÷1ÖRĘ5Qk)hĆÇÍř~˜đý0žçü\ă×,ЄÓ|O…6€Ű]#]@Ü9ĎV•’Vƒƒ]Ę3IKTOóU'gŤŸ^Ş‚Wsö;OňćíOĂ<ńǛ7oŢ^œ+şÄ\Żď j“$e" .9çČXřcČ;Ť…żL=ß­Ľy¤ÄęłăŕÔ|d‚Ě× r 6Čg‚|ă$5KK˘qfŽélnHœţîwżŁ_ţňW• ?űłŸŃO~ňSɁ gŕůÁ!;mCvŽ™ă@<:<ܗt] í`ƒó sç†!/T…ŠÜ÷ŔY˘}S/HŁ6Ůů˛ęW(˙|ÄBcžřă´x ׃şěďP§;—úż(OüŤÚš`ءh˘~•ŞŽ6Ű7BţyĂVďŁélFO¨AĘ9h+NjT~\¨“ĄŐÁŠđ÷îˆT°Ň´žž—ö˛7oŢźyóć͛7oŢźy{ě<<ă<|ŁNŠŠă Ë>łŞ)&XÜŕą+gv_`ő€ľzýŢ}łä ¨“#@­(ya( „ˇ9”jxáÜmfo-iˇ”ĹńڌŸmś[˛˜<,#ęöű†Ô6ä}zc\.žÁDˆQ$Ay0ŕP/î2>r °ˇ,›ŐkgҚ‡!Ÿ/ĽÍľ&5Źâ R+ 'c!@ŐŁÉ[/ˆ)U†,SĚO0~8š ‘EAe%='” ´„1=P?^Äâęqd#Ë­Ľ-ń$&Qűá…˙,… žîy0­Čb:Ę)…Ę2—oˆU15łl6š&H‹÷™Oűœ›CŇĘÜ>ލăRTÉŤÝƊ$Á˙@­$L(JšŻŘ_§^śICĆ)3wôž( g’ś7nŻ<›JýMűZ&‘Čćŕ5ŇꊀL3Ěľä˘"¤Ǥ95˘Ü ›I‹Â“!1i‹@ƒĚƒsĎ% \P}VVŠ4dĂ)Ťkv @čsY†q`S-•\ŁPĽ‘MŚ…äŇ4A1J[…'“nŤA/—J.‰Ž+‘r…ÄÂc M ˘?y>‘@Ú86ĘH¤IínŸşk›ÔiwDľ*št:˜S:)(Éš˘MœsfŇâŮGŐtF˛_Šžj!ŠJ0i! YŇ$&%UA¤´{mś7ÚrüdÎă7‡˘PF‡ÇCzüüîetp2b"Č6Qhˆ,3ëÓ\1˜đ}ѐ=‚č3äqgž‰č"Ĺ}čHŽ Øď׎´EŤ×ŕ1ÄíÓiʸ(BESnÓŃtĚC#§ÖœŻ=Ć˝ƒąŸY‚‰Úž.CnǢ"ň8şĹcvy1Łţź<›ŽŞőBhkĺyŠ{AĆhź”FŽŐlĐúZÖ76Eýý‡â‘˛°°d1Čmڜd!“ĎAlŻ9$‘Q`J˘b ó=&Sžß"!vÍš!q_ĺ6e›ZUĄ#:çwč|;čšŞđŁě:’ťďëęuK*A()užBĐeď˝yóö§gžřă͛ˇďˆÁyŒFnś 3›XŔ“šHá0#˛QpqŸBäi+ŕŃ&ZŘűŠ"]Ÿŕ–¤/BÔ2ČMHÝIÝüם¨>÷5nU}AżĆúÖ˘őŔ*Ui¸jä$} ˘—ŚČ\aýoľ(ĎL0áÜa Dý :ŻŽŞŤ(i¤âˆƒLS.śF˄J?Ăѐöy; З_~IOŸ=cgj@×wvčÖíŰtűÎmZßÜ ^ż'’§>nĚ`Ŕh2˘Ć8ĽÎ¤-ę?¨GťÓŚÝ›ťňjŸťĹNAÁĺ?Ś˙öó˙AOž<ĄÂeM˛ŃD3v€ ݊h´S§ÓŁÝŸQÂÁÖö5zôč1ýę׿g~÷úŽ(ěƒtdP ÚŢşF[›[6Ć\ĺjË.uîŇWtYr”ĚVŠKr#˘’ŐŻ—^•Z=QéžˆžěíŮÎúWK9ľLřї|gĘŹ˘CŽâp­6Me"(-q*ĽÍßňjĆş‹[9çěçGśm]óęzšëŕaDťˇăPœsS<sČçä䏍SGTOM˛ó7úÔhŕBž+gČ>‹Z]™|Śj”E÷L‘‚iŸł„ĆÚ9ț7oŢźyóć͛7oŢźy{IťL¸ţű~Ť^^ ]J‘Réeż™…ÎŻ#˜ëmŸx0ł/”'aüÂóa‘D‰mĆžţěă(e Řđˇí댟Yü)/éöÖu*yqŠŮĂcrÍuş ˘ƒčƒú7n5 śs×­HHŘ˙úö&Ýť}]‚a'§§t˙ńCó1PčŘŕĹţÝnŸ:ICžŇ“/ĐAž/„´˘Ţ2@Á8ŕ47A†QQŤ×bܧ0d„ŞEwť Š şBĘ#`“‚LH¸vwx˙¸ÖíÉţcngƒ!œœH° ‚!#n ¨ĄKj*KŔÁŤŮŞó‘”U˜'mę‡vÚîoÓv§%Ç!˜ěůţsů¸>cĆĂŃą m.¨–¤eăëA˘HÚçÁd6›Ęą šąá6§–îRuUĘZ(“?Çu%a)ă߀h1ŸAÍ=“”RyŽ,HóůŽCy…!U‚+;ŽiĎܔ‡4iý~Ÿżo1K˝:OD=;Ă9¸żńý›;ŒË6Œ‚ׯ™6EŠÇăƒăŁÁOqž„ű?ËÇ<.˛…úo >žV‡˘ ’ăq=nŁĂăcـóŽřüP–*콃ńR΍ďĄČs0˜Đp2b–3ô[żż&›#ĝghť#>×ÁáŘŚŠbü:*‚TÜ Š7í¤żĐ&Ÿ0ŽXŽŃőë×ĺÖ×7…lg‚mEZœďɆ´G1Í)Ę:U'6ĹáLagš/i‚u¤Z3ă*]MkAbî/Ęéľí ŚFđ´ŸÉó'Md|ŕžB_`[ëuéÚÖ&cí›r­ }Ą8ŁÄ_ië!X ŔőÎŚ3Úßߓ21Ţ;źu´ŰÚÚľ-^+č€_'• ÁÉŃĽuŻ“RW‰ KŘźZĆdľ^&FŠJ…Ę~WťŻVżˆ´s™ŤŻ7oŢž;ć‰?ŢźyűŽ&UšlJńÄ5Ŕćœ,ňÇ&⥲réČĘE4XđhřÁŞĎ9÷UşĚ–ƒ–^PŞ:˙8ť§#ţĐŇů×qžiZ€&K‡¸Éě K=t‘5Ą:Ă8wä7a×6jÄ8™3*Ůiš„Ÿ‡Ńý‡é÷ż˙„~űŰߊ '—‚ýčGtóÖMęoôŠŐiSŔÇ6FŠ Ľ ÂĎéé‰Dáßűř{´ł˝+NV85pzâ$ćsĐçüRę D•Ȑ¤đńdŔ•˛c°#ÉéĆ'´}í:ýđG=}öœ~őŤ_ÓřCşuë6őš|¤ ƒ¤+œ‹SČŤ˛SčňZŸíÍ ^"ÇÂ)pZ%ĽŰŕ}°´o=œR‹(˘óěÍşgI:ËçľÁjÔň1ő×óĘ­i‹<çާa6Ł((ŠR R1nY𵗁IEĽm°œŕ2Ę2•E$Ş?g×6͑źŚÍ ˘4ăs´ř}“ëÓi0ÖB‘Uww[€Ŕ‘HJ­ 7‘YžƒÚČ ş€Ü˘FĆuE\*pSv@ůăşÝEťöÍóR×Ö7„řsr|LƒpČÍšŸě(dŸŇ(*Ąçó1ćęÔɑ~LT¤•Q˜fZ')8uö…:Öň= źs†ôH!Ňc™”ZŔ§pîź0„!Ico‰K˘ěG‚ă; ¤źÉřn]ŇZ› ÇŇ˙ü쯭QÚHřú3!OGăJ= UŽŰé´¤^jfČ"Ň[C{%|/´řţZ_ëŇćZ‡ÖCĘxš"g3 5­§%5cƒ{j¤‹c||Îĺyœ„3n㣠Ł’2ĆŹu”PÔhň–Ę9Ń.IIŕm§ÓĽŮpJCžŽź1Ľ˜ű`<ͤGńlPÁ˜ńňĐě“@”“ř×| ľ+žŸÜc×)S9•ĺˆTvJTżÜf‰mH%‡4]Ľaśţ‰ “QŠ2ŁËźBÝŤŐjSűżŮlIťá~@˙­­Cí§Çˇ`Ěă˘ŒŠČĚs_SU/>žÁíĹ#up$ĹÇB¸Kh2ç5ˆĚ¤lĂ}Œ:4¨-dŽŃ„Ç ÷š’1Hę7Ôݙ\śÍhŕTżęŞ]dŸŁćŢZŕ§ő{ʑ*qß ™÷Ç} Š-Ć˝¤öăpaZƇ_ű'Î˙Hzóö'gžřă͛7oŢޘaň ‡ ŃC &ňqhŘöě06*găě1ˆNá顐škŸîßżOřĂčáĂÇôäŇsŕƍ]!×|üńÇôŢ{ďŃÖ֖L’q^Dľ †Cq|ż˙ń÷éŮţ3úôÓO%-˜äóEžlƒ¨L’Áě‡s 'Nçg|Î?ţńěDNh:™‘óiĂŔLś‹\Óóçűô˙đ 9?ękÄů>|hrłĂŕá?ř!Ľ<‰˙ý÷%ÝXÝI¸z›.Úé˘6—Wů×(˙œ5CŨcKß*ueiŇWľŐňM=Ô%űŻ^ťŰŒ-Ťî@9Ţ ;ˇďjrZ’ťšv gŽQ+Äž—ÁHk čŤšňN 7oŢźyóć͛7oŢźyűmŻ0ďîđyéŔ*Ui§úCˊ?çî}Gͅ ĺŔíˇesٔS/’Œß) ę"ŞHfU2ś§(m§ÔíˇisťCŰë]^ąžE'ƒ”ĐépLýq‡F§C:QÎÇĆݘśÖŰ´ľ˝-D¨jœŽéttdÔż a2?ĽvˇI˙ྤňůěó/d˙Ö{ťÔJzôř>ăƒ!}řч”—9ŒĆôŒD{´Ď+[ˇś7裏>RĎ `\Pg”§¸–€FĐLTБâ'§Œ˙žéœŚIÚ$â}Ń'ą˘qQ>ă…|S,™AŘB˛ă‡EHaŽD!^‚ř3 ‰˛Ă2DÚ'੍&]c4÷ą’űeH‘‡ňlňšFć%jIĽŰ”U7jtzÔŕgć1@ ˆË[›”BŞčĽř yŚ:2œSěrżO¸ŻM`tX˘Ü}ĺxť×Ž]“żÇ|v××eV‚?—A/Q:/5ŘEűzóćíO×<ńǛ7oß ÓĎlľ)ŮžF­÷îP2RŔŽ…1L6SQŰx{•iÓ7Ľ†a|×*—Š›7(h5%‚çUYŤ×çDŸöóŘqfŔ@&¸ÉBoHQŊçˆ48f ýě=ßŮŕĎ>űŒ>ůäÚŰ? S  ’Ď˝÷? ď}ď{BŚŮŮ˝ÁÝÚ ؃Ł#9#˘…0q>Š{pp Ě˙ƒƒCÚŘ<GQxEÄŔúz‹‚Ldș"B`ďů>ěął<7“ňĐTůŔA3 $Ĺ ʁ˛ĐهDŞä¤÷ŢťÍuŢéQLム¸b+şOÂŚEj¨eIĐ굞Î5˛AżLżŸő.¨Çë8Ë䜳ßÖUˆčĚů´CěhUń§žâl<„0ĺ.5ËEVŠxšWťii˘%"mÁ¸yłwo݉ŤŰj?/‹]Ž˙őĆŹÎ7r`ŤN˝yóć͛7oŢźyóćÍŰ×hç-9’xćzuh˝ŔD1˘,hĄđć˝×ŐT-ß&˛!j9źř˜AIžŰqČm8â2…Ä‘ÄÔęu…őęœ .,z†€V!âä˘tƒz‘(Sĺ¤jĎĄ’Ď‹śŸňľĺĽŽĐ ži JŠ I—NKÚŕşěííQ<;Ľ÷’ ­ÇZŽ­,BšOCšń€˜đýpÂýôŒĎ‹óçĂMO>ˇ}ŽąPžľxĚň˝‚z– #•f#ŁŽƒv É`5 ›ËˆůžiđˇŇˆ&\Ţ(CůP´Q˘źٟy‰%ґAmyBú‘-•W3"ÉŔŕÎŃäž3ęWjé4ĘXŒßó=”¤MŠ#Éh Da Aź&ŕ˜ŸK%t)mB˝*MŒ ×,ăő†Šýî÷ż °1;!;Ě[ŰôţŃĆĆ6Oę§\ƖDŒ‘‹™‘ĽŠHCBśä™ýű÷ާ]úěÓĎ$ZäţýGtxp(Ń)°@™Vx(šÇ\çnˇGţç!`ž/żüJR}šźĘřŢHćž×Ćşz]ř ň‹ŽH/t†řłJŃ5™ĎĺźöĆ żxœÖICuÂÉę÷D—R{źşlÚńz=˛|Îz[Ԏ|ęŃšZ(ţœKţQŤoÂÚß™XKԇäćśď"éłQoÚ*_ťŽ(őfŻý*yŞ˝y{“öڌ7oŢźyóć͛ˇoyăÝ7CĄxů…RĂŐT@HPViäYČV´œěëą×ń/žMžI–Íéřčˆfƒ#QçÖ*˘{őe!ę,<ŔJ95ŁbĹ},ÖĎŚ3!˘óËłLČ&X¨ď÷űtűÖ-Áʀ­í3îv̘ڜ󥨽šžFť[Œá6!ŽŸŠr#ŽlnŽŃÇďíĐ­íuQĐ9:ŠR”3@ü(ËâÜëPVźäąœ ¤¤=ËLĘ&ZRŐ^˜I_DľŔ<}%ÄWoÔä´TɁqJŠŢX"Žmƒë% đŚ÷ěŮ3Šăc ýžQ-żÁxç&ßĺö6ŠŚ )ËŐÍ)Š „Áç@żŕo(ŹďnščßL0MœÇĄńĘrĘ?Ž´cŢ/_'žƒŇ îčŃh*iÜ K.Ă1’âɏ>Ŕwă|l–@D›Ď{=ŕcÇBt&ŒWœ _ýŕƒ¤~ř|ČcˇöĆx,d*´ĘÄ9PÔe{{[0Y\ ĘG:0T°/Ž“@ˆfRƉĄ˛„ňoßž-ġńĘňCQwÇŤ!D%Ť˝ť+j90¨ÎäůHę‹ý hÎŮű(ă{áDÚݚkÇ`c“Ň<ŚfdĘϏ ŠtĆßrî8j2آůĚÇÜg8ŸßhgPâ0Ćń}QdŏŸž\o˘byE@  ŚŇ/hť‹ƒVŠjßF٤pš‰ŇŕĎ!o:¤X•Ž c!@ŇObˇŘŞâ‡ĹŇ´9W{0u°Ťšéłą¤Ű؞Ď&4$ÝÚ'‰#WŘçéÓ§ŇŚÝ^—?ĺřáp Ď­ÂŚŽŰÚěÓîőM괍:žI#i—Üż¸'qg˘Ţƒń]{ŸŰ4|FŻęLuSţAyx.âž2vńh¨t­*Ř-aüKkf/g~^äÍŰwĂ<ńǛ7ooŜ3żôŮK8öŻ;/ŃÍŃVH­kÔÁ{…–ŻQţËNš Żáěu3żŠ;ó ţhuń>/, ýé8ž8ď?şO4=Ľ›7oRÚ iĆNÖźœWšoaPâÁć@€'OžÓŹ{Dô!çÚëą3ť-DlČůźłťcfääÍ šÂq:ˆŃętD4ađ`‹÷ÇäůČŞ!Ş {ăpFBö´.œ2LôQÔQ37nސqwĚŕ‚´ÉYÔRČŰüĹ_J/¤űýďĎůs÷|‰śEzł´MšýŒßĐÚć6ż& lď(˜ˇŰ-ůŹ3™ˆzzQäa űA­Ÿ-tPˆZ͔ś6ú&´ŽÁu+3Qüi5ŁeI?îţĂ­•'źŠPkĆEŔ÷˜Ś }˜"M՜4‡"jđgŠůœŻ%RĘĂLĆçœbçHM•0öźI˝Ě”kŘŘŢŚăĘ:n1đ8ž&í’MfüŒĎ‹Ű"§&–Ó´Ҝ?Lšžc-jNƒoł€F<ć# ő"Ć UShÓˇ{آքϗĹÔŐ-ž?2é#ŁH3§)ż‡’<Ôg”ÔŤII{fÔ˘ýQHO”Œ7UᑦţeÉ×Éĺ”=ƒ×5„óŽ'Îy$)ŸKA)‹h֜PÎ}˘ ü„TR!Ć.Ú)‘`^Îô\TŞ(ă14I%ÍŮ4äžLRš”Sš%sJú=žˇĘ凋2ŠjaˇĹűl҈ËÍx\—zĆcœÇiٰ! Ü‡W–řƒttH­€,™t_‘Kóˆk–ŚÍőś&9mîޢiTĎ#lký>uס¨ÁăŠA(ˇŞŸSŮÂ9™ƒź&˛\T˝đ}6çýbM]˙Šďa!:ń8!Uٜ›d8Ł2šĘx›”†ˆw4Ěh˘y̅m~†iĘŁőśnĐ5ŐŽž'¨_é~GTŤ^§”UďYĹô ĆŞ–|€šś{Ü]“VĚa°Uďbß3 Ľ5€•ß$Šzóö3OüńćÍŰwÂÄšˆě#OŘĄI@[3ý*ΚzľŠŇBŘĺ]ˆîYL_Ť6`ěłyÓ˝˝}úŸ÷w4;~NűˇK[7C:-'4d‡Ly—˙ś"ţ 4ÄÁ…˙á‡VX€NW"5Ž_ߥľő5‘w…ÉI2" @B¤ "…˛žžn"0ĐŘŢÜv?rD˙ć7ż˘ĂŁCşwďžD<|řHŽ‘F87˜üˆQčűß˙>}đÁ‡ôÉ'ŸKťˆŇČÚŞjý~÷ťßŃßüÍßĐîî.ý⿐șGO‹š@ˇn݇ü…˝pÎDźÎ˝Ŕ÷ŚŮô™ý—˘Řž%sw-%ŕ’Ögżťä˝Ľ^."đeĚpYc ßźş•ědťńn ˇ–˝öÚÇÚË^Ľ^ö& žů’mu^.č( +P˛7oŢźyóć͛7oŢźy{%;CîqŤĽ@ŘŞęqđSS\qŞ?ʒ~J^°ÇÂiťÓ§­Ű˘ć˛uzŤZ”^˜Ž‚uŞóԃwÜ9j* ü8ƒŁ-Ž[*ˇţîk„ţŽZśŁ@ ęX„×+jȲ€oŻÓ¤P3xŞ(ˆ´›´t(&śÓ‘Ŕż§y“rJ¨˙ÁŸQ|ýC*󜚌Ë!8.ĺö?ᶚ” ę~řjź7ŻÔLŕ"ĚЉ‹Ë6‰Ňć&ő3ÓŚ ×iˇ¨\[Ł1×* şu&ÔĎ š.˝^—Z|žý(¤#{yŤIt—ńEH5ĹuYş@eH?•ć6c5š.­*MA].{=Ď(+K3>%]˜Á@ŽJAM' xłJ!/vĄÝ-ˇăşÂ’żămgsG°ŇŞŤ¨BQŻĺ‘1fBPŠA™ˆiëFhŽÇqłáT*Œ÷Ͱ)x$ Ő¤bŽčŮÁŠ ¤őÂ8ˆ&&­TnÓ/e՝€Âć:dGhŚ*šÜëˇ>¤¸šA4B¤MßUZ‚Č?a3çĎđŸŁ˝  “‰úÉbđÜŃn5äüťSُ”pť[3J;Ë) ޞeĽŽŢd,˜ÚŰÜž!ľŽ1śŰÝĄ[™‡1ƒďSŢp|Wu…œ†‹œƒhÄ˙­ßŠŠą9‘ňđ9Ž€ Oxży4§öő†ŕZşÝ§ąJ$ÝLHI-ęGťFé‡űc>1œsĹ×ԆbÍĚ‚2–<çëŃüšńxȚkmw¨ß¸ÉŻ 8Ĺ9gܡy^ˆâ<ęEc\î?îăľ>ýń¸G'_E† ƒeŞám¸ł͋”6̓t<>•ôb¸ˇŒŞ!Áäi!Šű&ÜďHM…>•ĺhs.7j*“†+š˙CÚÓÜ9Ÿ'Ez<Ž_+ٞ[PéÓňrПd e4:ćgŔ„ë_D|>>gŔÇĽ6¸)Űä‰QŸšńŒą…ą#ë2H!†lx,Tšęz[ŞCčmÝ.=“Đ÷ŔřŃ˙*¨+ŮňœŤ+{ü,,ˇŰç6IIÇE%÷CjQ)^›yL4IwŽSuŹ4‘t|Ge‡N†Š×-ć4s?7všŢ˘řߊŚô~zƒvxlťç‰S+2ÉĂjřn,ćZRj=XŐŹ/„TGţńYwmƒŽÝźC­vOî7ş@íG)UŠýŸKě9‡tŽ)ďzóö§hžřă͛ˇwÖŢäÜC&]QT9ą&ĂPÝ;^qĘéŠ&e˝FEß â18ľŞrUäŽO§ě°ˇ)ínˆŁ= 4aGŚ ?`:Œč8" H×°ĂŰhw¤äô5 „ů‰Ŕ$ ™čoln°óÖ¤¤‘Z§‘9ţ)ë÷7čîÝ÷…´ľuMdo…D&bĽŕóÁ—<<>ćc›˛Žîät$Nf§ÓăcŘyä×0@4BBwďÜŁť7čɓ=vܛÂsň´ÂęgjF;;;" ‡¤Ł÷îÜĄNˇK=~ż˝ľM­"1’ETÂŮ–ŁĽWŔŞŔ ÜrŸŇĽű—űßť ]FëZVýŃÔqá\]|‡ŘďŽ:pô˘Ü7‘ů"Gƍí *A5臐ęKąĂF)×ě&éâ/xېœăçĺ1_ŽC<{éĽÍęű˜>Ś+YÝY|SZ˝Ô\í*őł‘:üá ÜăűťĎŸˇěöŠO‹3Á'ŢŃôö§aߌrŸ7oŢźyóć͛7oß[%U˜‰%ý`í\ëPM›ŽřäŔŤfÓÉ}ą˜ đ mň7->î˝vX‰Á Ü9K‹g••šľ%2źE˛ĎŤ™Şˆ< ˛¸t>zeŸ‹, ĘĄř‚T[&Mq|ÄXÚ ĆÔ¤MrÁâş˝ž|?;=%JfÔëo&>/H Ŕě` ,&SŠ“ul{J*!Ţdŕ¸ŔS˘´KÍ,Ł&Tl’DŽÇ˘ůlžPÇ×jňţĄ|^._“ZîĄ*厼–Ś_ĄÂł ŐÝUMU…ĎŠ•€.ŁÄ×7kN ËćFC9'0F`ž‹´\ ěs#Ë1yfž‡Ň 6ˆ'H—†Š(Ř s—žĚœ<@Š;Á›Q*ćĆH*áöi Őçâ[k RĆ˝š=šÍŚŐ}TÚtDr QÍBżňFXĽ%ƒbА˜j#u@RŞJkä>|VЊPćÚżžŸ¤Ńjľd˙NÚŁúO™ĎiäB˛D­nŁ_ĽrĂ8€ŹueJy–ŕ†ó‚\Ś˘œÚ­uC˜á>ÉůóLçć›VIŔxłIË,{ŽąĄb*ă’âcÂE^őŻ!ąTpŰP\P3ęQĐ˨“çŐľ¸ë•4lĹâşQĂás1N|R4i6H+5$¨9WiƒăjjRŃęPmRžLĐIfé]SC#I›ĺ(đL[ŁžĄ!îcé­9Rľńx“P”rx0QÄűˇůłŚ˝ęĎŘŔŽécÖ=7xżŠŐʋt bĘy›-œ*âOŁK7šk´5_N†śLšcÂheŰޡţ-䟼J(iďČ(e a$ް!űÍĂ&•i(Ď\›Ü‹ÜFcJäƒŹ…ß^§HZfœv;9Ľ péĺş[ qIîšĚ3ÂźľĎ‰ŠŹ#ůŃÎMŠ•şîˆNŁ(ćR§Ń2ț7oŢ.3OüńćÍۡŤĚ?j܆Ë÷;łB|Ţ>/>&ľ&Ż2ń–Ipqá1/埿ě„ë‚ ˙ć •¨ß$i D ućۋެ&Ł ňŹÓÎ{!ý#ţdxrHiŤMsžtÇ<éŽčtKš°Ó5žNEVÎź8$ĺbňlr>ŰRC# ‡­Ől Ć‘oÄ! 3ÚĄúcr‹C1‘ Y6p§×ŰÔ­­I9&}ŽĂŰr8âaÁ~DŽŔ‰˝uóŚ( Ľ|ܟ˙Ł?ŻH?pQW8š #]ť~úk}9ßř#Éą )\H˙ľ{c—ÚÝ^ĺčžÓüK [ŃkÎxŇKŽňUÔr4-ŸălÁő¨'}NŐŮ.şKÔŮďÎS1ĐEšY‘A^ôů˓՞ڐZ‚×ĐĽB÷ŮÉ;Çż(ç 4,˘šŔŠY’ΞˇŢ¸TŰů%n÷×&Ć\噼ú˘uŠ@îˇX!Bk‹’řßTŕœĆW+ř'şŞfÚUWźyűŚmő~]Xöv5;/íăEmšúťU˙ţ˘ßČoŞ?^4×s$ŘŐw?~źyóćÍۡŃÎóWëßyóVˇĽ@ z@”|Nľn]- V_&Ő TZŕ­j^׌#%X4í*!$Hj.{ŒśŸJ‰¸NřĄZĐĎĐB§ţž˛sćŽďšU‹ďN…â%Ž ÔůŠÍVEÚ(Í ČÖ^c,ĎpěąaM‘=a|!jt„ŹłDŒL0˛đqČű˜4mޏIýSëĘ$ĘR%’ZyTWY­šëWMśßĎi7ÖŞ•ýĽ/éĚîś­€*ĆR žcΞ(<(ŸhU‘ĐäŻjœ+ŠSKP(CSÚě0Śi”ˆŤD$ú1Há輺ş2ąf…ťÎ@î Sc!ˇÝÚz(¤”*6͎wĂ-XNä>Cť6Ű˝eekޏŤLĹRË÷é:^iúÄ0ě˜6K{o’DhS™[Ő*˝THç‚@Ľ‹~WĂE}Ґ1b;~\yř" ű:äSńgAä>ç:ńŸAŇ0˜ľ˘%•e „qŁK-Gł×R]oőźYŒ3> QŠ+CĽ´Ť"˝2žĚ¸Ă Pˆ´oqےLD/íŤ%Ŝć:—|˝ŻtęTŽź†#âŘf‚Z ŚKEu†éÔÔęˇ˙eżńîjUíľüÁ’E Žssu\ŠÚ˝´‚Ôţľ•Š|éŔ]okž]dv’f$çs5tĘţčG“fĚ}şü,— N}žŽÎźˇĂŁzćŠ%ârŤĄÇŽ_w­ úEP ‚ĽcíN´Şösö^­ľ•ÇźyűNš'ţxóćík1e'rWqtßĘÄM2enfüç}Q_fél5…ô.9˙Śîh‹ż}‰ŇT Ń' şěŢžCłímű9Îą˜|ÎłœfóŒ’$–ý/-S"^ Ů'´Š†ŞČ$hŸB]rA`óG&˘A‡+eŠ]2P°aĽ™ó\diEšVS­ě@Ŕ l˝n×D pýŢť{ˇrB+O Ć?ČHN](°˛ˇ×vvä8vsk“żďˆäíK-ÚŠłD s}Ƒ;oAôź÷î3­WK:gş´BTK.˝KÔůߟKţŃőréĘmt‘hIňt•`riŃőú†fƒ˙„ˆ+}ƒBľÉ”s޲ŽeuÔŰš›Ő7ŕŤ)‡á-Œş|÷¸ák•ůąw€–UŢ?}ďsŸ7îI&™¸ť;!\‚'‹…ěÂ"]ląŔ"aaż Ĺ5Fœâ2!2ÉL2îňü˝k]_ŸŞŽîjťöîó˙/éš-ŐŐŐ}ďť÷T3Ä˝ß$b8*?ľxJL5[3%XD*ŢĆ÷ż?U>áÁ´¤ďůRíŻëA1˝/0kÚ=Śg(†Ĺ(z=éˇHĂż,šäßTŘňďf;kW?Ťđ=–rňš:L|ř>Â÷lś[Ÿ›T>îü¸ë%fűôŕfřŮ'QÉgˆŁÚ_ ó7Č´3bŻáţŚŮś]ÂaŹŻ*đŰ7é0íÇŔ~˛’Œ8Ű´œz¤Î+ŹHŮN?^Ľ•ą\ĄˆŽf˘œ¸JXŔŻžŔÇ SÔŁ"_࢜źk{ś)•Ł™Ipôîb¸ú XĚż`ł˜ůDSEÎ —ĺ~ŸˆÄ= =Ňu%kĺ}a‡]}ƒ˛¨xˊݿŒćÓĐH3Te­˜ňĽFÁjá`%ö•sV‘˛SᛨĆů÷Uâ ŤŤS‘ąçŘńëđx´ű9~B†ĐÇë˘,S¸“r#i?e"÷“`ëčÚ˜Ö@ř˜XŚŇY:šEđŐĺLa5H}Վ?ŚÁE9m)ś=~hExm:J@ÓH łg;ĎĽËżŠ!äĎd)uŰÂmŸv@já?¨¨ŽgX†qĚyÁ9͖ž¨×ŔĄČ  tHşűÚ::üA'ň˚Î8ݖŽîn2g¨ĽŠ缈ű|hOąĎ[üąřá€€Ł•[BńĂ'"žhrݙ!÷ď˝Ĺî5< ¨_Ý~Ô¨‘3XÔUošMÜůSŸ§éîĐ3OŞŒđăŐÝxĚ߀ž‡TDœ(ˆ?‡"\&ţtý}d†,7…gEVÖ´âƒÁ1Ś  { Śńc/žţ'4QJ—ˇŹxÁŠí”Čóm¤˝t_ţůäm{׳´oǰ‹*´‘&Î/¨5ţĆ ÝgóŤ•{~MÚĄ+ ՗ă(4™ ő÷÷S__Ÿ ťÉłŐ;Ú;dú¨ź›Ť—g­łăjďŢ˝*§ąaÜĺÝ<şœŞ­­˛ŮŹ\ŘůĹp„]G|ŒËpZ)NQ%ëpCáŚŇ*‚ —íá2Z-.s;ć9NĄĹm-m¸ŐćÁzƒ.¤VšĹUi㌠¤ükîíéĽí;v(ÇĽcđňsjmk•3eä NAČ{WN25k…Ÿçđđ|^ nt˘ĄĄAůʚššcu!ľž2re$ ç}ĺ÷ŻYć—NwX&cf,wüĆm;׳˛dŘҞžęíí•ŃŠtNdNłŚ"ŠçP(¨č ŮlF>g]–ËHŽ%ä`šţ[`ÂQ/t„Ľrž’/x2÷ĹO’•#i'¸EÁçÄë Äá™6ç ¨œŇŮLÖËoΟCÎ‘Î áżżŹłĐůŰĺż[ŽţÄĎ/\>çG¨rŽƒŁ„pKůůđ÷NŤłČ<ó…`jBśX Ôň9~_˛nXgK~~ůšü–sóŢgł9çťdXŚďjćďéüˇä÷/ÉυŠóîŮ6•c ă*Ų‚ŻŒÚąp4°Ľ….ĺˆiĘ˝vąíRčHvZ`cśMŻÇ MEŹ“.ź]J˘…¸|-nC8ş…Ż_Šr<ŒY% ą œ6›†ĺRJ,A€RŒVř#ë°˘v‘<ěFëÓd˝,ŸüťgÔ4Ĺö„˘ţ‹Yј&IüSŕĎőq>ŘœŽ‡_SÂąIĽ]ŞRáčh?ÁOH¤ŞŠ€ź}˛ą"63˜ÂD̏°9đűxÇ‚˘@¤-Ř ‹~d;;O‘ÂuZĽýĺß`şá`ŇâÚ1ľŤ/˛a 8rN˙Ô?0H[śnĽ ÖK1;ޗ,^Bs†hń;Žx}˖-^*mTą“ěű<hhH ‰XPÁtuuÉýęţÔ9|ŒË,\¸Pçşuîq°óž…H[vq{XT¤Ďçcş=Z˜¤áT|­ń$ E ?‡tœđ˘Ü1˝{ű芧ž‘ë|ż , šś`ąř'ĎŃryy˙2ʏsĎüźvíÚ%Ĺ ň92;vě ááaęîî–Ď2eůŇ™‡ÜYř=tޡ…‹ŇÔÜŇZäÇ˙œŠó՞ǞóWE>b1Űúő땸Ęůüđ3ćgŢܬҙ1,řa ŃřsË^řyry1ÎçsňłĎď „ń~ůźHMr=ey•bÂŒýN0E…ńŐą`'iŸmk܈7IoťœA˜wţţňÎýä`yÖůčí퓝˛ÎŽ”ó2@ۡo—Űóç7IąOđłćgÄĎW=ăfšÍŸQv„ó3›3g͛×(Ďágj~4řď^Šłxö‡ł=<<"ϗ9Ĺůš.lsŢł&g_–r˛ţlóuů˝äďÉąHoöœ6çúmTágW>Çł¨ý÷<c†ůET-nÔ)$ƒQęĆćw$ę<óáď >Ž_uy“8G]Ü@Rš˘ł^ÁF xی~Tk;%Ü.m§q ވ˛˜đÇ*úť4śv€vˆęß\śőžŃÖ $áÍÓŠ’k„mý;'Ü(Ë@gaFa ĐEhć ?é':3ˆ?%ć$Y–mpY‡/äa1•rň“cĽ{ŸŃ€¸ÇŠąTKŠŰưÁ`jRJTc }Ěc–ŠĆcFâ1…=%D?äN˘Ň§Š˘ăVxg´Mf›ÓFš>4iߌƒaÂN<đÂ"=ĐŔ"  ë×{Çľ#h,l(„"qđö3Ď:j X€ÂĺY¨Âh1€)baďăc,ŕg‘wŁŽ°#Ÿ_ľČG_ŸËuťi§ř_oŞÂ‘‹::Úĺg…Ÿ wXĽŁő÷ôɈ&2jŠsœŸƒ8đ:?sítĺsľăŻQŠ&|‡ŹţđóÔiI&„!oEU˙ˇô÷Śwó3e?ţ ńóŇçpä§p4ŽŚ¤ŁYńłârüŹëęëdm\†iáŸ7{ölšđç2.ľKIcźáýzÎŻüYć÷‚łhHĂu˜ß9:âcʔ9< Î°ń[ˇqăFęq˙>_ˇ…ß뎎.ő‹…UŞÉ uš+ü`ŹŒ=ŇUł;ÁPąüt~9?˝Łţ=âżQ3ŞN1qNäćäá„ůĎf]ڏČD FĚH?ĹR_Eœ- ×óÚ&’gf›eôł0Ÿ‘NCVŹţRÄ “âÚT,ľXřüJŻY.I˘)s0N?wý=_Žŕ'üţ•ş6G5<1„•!0ÎŽ Źč úr;‚ţӛŕg(é׳kUÁ€€]ÚŔ˛ź+đáĽ]hvŁ€t!aˆ{"‚ŸťŽŹANS„~ˇ)ęŃŰڏ…?ĆqÝ÷ˆ€ô>+X_¸.ł~€đ0ŚhĄ‚ď`Šó/[ŽxYhsÂxNőĆK9gę”;ě gç|>ώ1›věÚM˝==îžź/°0¨ĄĄQ–áHĘyĽę`g͖-[g/íˇß~˛<Ÿ72ÂiÄúd-.ŇłďY8ĄĹ>˝‡ëP)–”óP‹(8ÝRsó°,ĂŰ, ŕs9 ×ÉpYŽĆÂíéěěô„F5{PUă;V+ ágÔŃŃ)ó°s„Ž6âůěœ}ťvî˘\&K-­qŚIŚL’ŠŃ8“ólTÄN?&_-™ji8ĽŇ¨™âP”r÷Gl*hľozl¨&rD˘čGsIXlÂ’ĚujÉČĎ#ž¸0§˛Ňƒi|œ*éTĘí(G.˙Mô9ŸwţŒśrä$çü™7#dUňŠő]J÷kœúU#”ŘČ­[węřo˜Ÿ˙mÖ9węű!ďEămS\ĹωS ZVFţň3S˘Ÿ&/U`__żüБ˝dę.ŽrUpŁšíŕgŰîœ#Ăě ˋśsÇ)DRœšd]œ:ŒYüž:owÂ-ÖVMé|Ć茂KŇL–`čӂ %"Bôgľëč6Y7Ő^ů0Ž˝ŽĺĎö2#……DI‚-´QßCů@[>f ” R č¤¸ÔY‘ťpŰŚĎçď4śMô1ý˜”n,ŽŢČlľ˜gŞW螼ýG_S–óӐ ËGIB Sž¨˝ţÄ>n™đ$ŸˆHNJFů‰›œeQTô“Řž2ĆMÓ5Ü]S˛lĺ†O%m¨ę ;ĐçϝŻ/ÎvWç,Ę8NtN‡ÔÜÜä8ĐŰ<‘Pss‹t¤sYvŕ§Rʈko~ĺsřV•`ěůÎ粓§ĽĽ•şťg{ްšsçš)şx B9ŲٜLąÄâNŃĂÎ3^:;ťd›ŮĄŚ#z(áĎ Œ’ŁR45”íŔˇźü=՚‡!w%Ša<)ˆ['jlh¤ŮÎóá=œÖ(ë<ƒŹŒĘŁ˜ ő,ÔÔÔ(Ĺ\†ĹX,ĐÎ?)xh¨§‚-…Ó!qš°–ćf%Ĺunr} R(ŐŇÚę?7üąÝWŽ1NŢŤy3ň.-ó^­’O'řœBçXqÇÝ­ Œ÷REšÉÍÎ}óçËvž…L}××'E?œ’‹ŸĆdD)çYʈ6,œŞŤ3Ä<Îsts|źŤkľˇuHQKgG5Ô5ĐđĐˆŹ§ÁŠcüş|%偟˝:í ĹâÍ´ýČÎłŠw>ŁMę; ŮůÜěłß~RŕĂŸÍÎ÷ ‹tř´8ó )̖ϦĽĽÍyÎ*Kڜ͞=G~7°P'ăü͏ x÷B!ď‰ uôţě3|=ŽŹdŢJ6›§9sć9ŸçfÚłg|ď.Z$?ß:틟йDĄD^V‰gZţQ/"ť;Ŕš˛üpˇÉ"+v˝ču-ŽŁCě—-˘NľĘß ZȢ삜ŒřĹżGZäRŰm‡y Îí^ďĽ ĺża-dáďůťfDô Ă×fűEłl#đůZ”¤ĹŽZœÄß źÎőęŚEMáČ4Ip\ž…Ł|=˝Ďť/CPdLéÔd\ż>żš.śôďťRňwŕΝ;#÷Íĺů~ůšśÍô˝0:Â#/üĘuŞÁˆzÝ͝;×űŽĺó¸Ý~Ž[ A#°€ťˇż_Š6ӎ]ŮîÔÁŠ)úűúeJSúËt’ĆÍ4/&Ä’P"ŞšR§łQŒBTa˜ZDllSÔclâĘAź'(Šˆ(8 %×C5ęږgăŠ1 ˊÚ~^MűËLóe¨ö}Aě/˜ĘÄN6˘„ąĘÁM1Áˇ/,ú ‹ý˜ő&ľ5ŠÝdUď_L~ üŒ F_>´ż’ŮŐ%ŽSm`Gé1›Ĺv˜1,"ávł3˝ąQH§‘ŠčŁ 2—r–ŠÜ*ľ„vxńÂçsŤYH4gÎ\šëĺTHÚiĎ~ýčsTjž)ćáˆC,váW•~L=.ßŃ1,`--Í*zMŒŠ'úŃ*Q§•~ĺTiœ2Ń3áůٲ#ŸIWg—|něÓNIŞK§Qb‡ż/fz*~f­Í-^ú˙}i’ĺ›bÚŤţVČ`1÷Ş@T\y*PÍXž#˛văo“?3úyđsc1JÎu8ęô(*UTłÜ–é˝\œl˝S‘N[Ľɝňü™•Qm śŤXŢ3˘qŔŠŮĆzšP˘!%ü)Hяó‰Łú:çžmůŮb!'đłTéĎęĺóĺűovţ9-GœbAVőç¸ EgŇ9/?ŻÎzÖqó÷ŠŮąăÜt]:-ŁS é7”Ű,c‡4יÉd=a‘ŽŚS~Ői‡rÉçV^ÖßQţš‰˘ `°BŸ8Ěß0ţ>äżEţ;–g‡Wâkˆ^U Tô—ş:ý{/hţźy´téÚškˇL5ȜÌMi–cG°XsóćM´b˙ýi玝tČÁӳώĄŚĆ&YǢE‹¨§ˇWŠ5ůťa׎]Ô5Ť‹–,^"ë8蠃čá‡qěŽVy;œ:8ăADĎŽy–ć8v×˝g÷)–a´Ž|¸ˇg/ľ9mQß}őŇVY´xą<‡Żłwo-[śÔißfçůřφ‹O.\Dśó=ËÂ_Ž;›ËRƒSĎ<ç~Ů&Řśu+mذA §Ď:ëLYnŸ}öĄ?ýéO4×)Ă͸žœcuvvĐźůóĺöóĎ=GCŽ-'E?îc>ě°ĂhႅôĚłĎЉ'œ@ˇÝvťŒ’6oţ<)źěqîeá…4ߊc—óœ9’ˇ‹…>,ěfÎ:ëlşç÷Ps_l+ž~Úi˛M*‚ىr}[6o‘pŽäĆQ!ťœ{•ĎÉŠăüœO7Ýr‹íťďž˛ŢVçˇ`őęŐ´sűy|M~/–/_.żűš~śY8Ľ)?wn7۟:•$یźže˖2Egf*Ł6­KŐĈVK×YI? L7’BÁý–ť[ċÜó"âOb$u›őűéÂâÇŠČźAŢájCi˜ĎI&LRŒFŘ ‰}Üsă?rf˘Č>˙ńőǡ0“€đ0*’=ĹĎąR8ř†‹vy ěÄOľ¨h;%dHťéuT;gÍęrgÇ×yłůŮŃŻţjŚšŸ’C×Ăxv˛3Œ÷łG§őaÇLkk‹˝GGŕH"|œëćˆ4ěˆăóy]ףťŚf§縌 â8â̔“ aäQ—Ű"şÍ÷U—NSşĽYĽę2atdMř93: ‚~ü\ŮićĽ>IĽÇ-dIKÇ 1ŁŸŁœ=ţS$•V§ŸŘçĺFáŇQôç™?›fZF=w!Ďzż~†ć{¨ĂˇűŃRŢ9RDä~fŤ˜ä9!˜Ď0ĺŚ5Ówź­RŇŠźYun$ޯӛɨn:/s`R‹~´XJFňpĘćÝčTúz\‹Šäsĺ÷Ŕýđ>wîűä6V ägß9ŻĄ˘ˆYŇ)Ź?ëü}Âet$‰ń$•rşĽ˙=oFŠ?§š+ú¸ \’m÷{Ę0x¤ŤŔÉ2ĆwĄů˝hţN™ő›ňĂR¨ßź‡ŔsţŻ÷Îěîî˘#<‚ÖŻß@ ć/”ŰO<ń}ôŃR@xÝu×ŃYgœ)Ó˛xeŢÜyň8ŰÇsŹŒč6=ţřăRôsΚçČ2gœq†Œ6sâ‰'Ę{řîwżKmítĘÉ'Ó3ŤW˲o|ý¤0eŐŞUž€…*>ř ü>d!3ż°‡Ĺ*ëׯ§úĂęiďŢ˝tđÁÓÝwß-Ëę{äó:÷qţyçyŃy6mÚä ˛š˝Ë–-“őlݲU ŸÎ=ç\şĺ–[čˆĂ uĎŻóD1:Ĺ"GâsYłuË)ÚŃ×cX|ňI'Ńc>JÇ{  ÓłĎ>KgžyŚÝvŰm´ň€•RľqăFŮ&T>÷Üs´téRzꊧč`çXŤó]ă7҈sü˜Ł‘Ÿ5kÖČ÷တßĂsgϑĎçá‡–ĎŒEG+VŹ ž~ZşdŠl§ˆ=ŮyĆ,xšĺ´}ńâĹ´úЧĺűŔ×âĺ”SN‘őr4)ţçvň}nÝşU ;ůŮďŘąCţţp[Ż˝öZ ř(ލŢn6Ĺ ĺ |"А3‹,+fVzyQBÁ%lgS\„˙0:J˙xç1†čž§÷ycJ/ň?(@˛"ˇHpœĐ$’F–őŚ*ĺŘÁ2Vüń1ŽgçXVŹ0Č o…ĹA1׊ťŽß˛h9ŔôÂ@U$9ȊžCVhP(0 ‡&K˜醠X†…:ĺ;äUz íÜOť)sę"miǟvŕë)\ ŠdÚ#YŽýV$u†ŽGG`’řm0"ţL*rjÚŽ`ÄÉČ:B‰ vŔ‘*ëˇü”$ŚŕD?w3‰Ÿ*ÉxŽîő´#e'Tú’<ńŰaš"~žĘŕŽR Q#ĂšöďayŠ@T§ÁLšÂh”)Ȓ”´˙7î™Nnó}Đ™&ŁyÎJ‰¨Ľž@͈|dy˘&!ŁSčHű>ż[¤”U¤Oаţ`Ě)Ű( ţŇYEZĆŽ.#…Č]ł¤¸„S`­\š’?üp)’9öŘcĽd˙ý÷§ŢŢ^Y†…4,*ŃâN‡đw‹Zřv¸‹QXœĂ˘dŽOG<äóŸ|ňÉŔýňw—ÓâĹ%K–HA ‹uXĂŢĎeŸ~úişä’KdŰř;‰ŁűD&ÎŮfíÚľRÄщ8˛ GÜaŃ͜9sT„D÷{ŒĹ.9ˆëŰwß}e9Áˆ…G|,xäm MŐ{ĂícQĐśmŰä˝ó÷5ß' “ôóŐ)ÍxŰÄišř{”×ďťď>ů ř™ą‡×šđđ5YˆĂ÷Ŕb%n XXÄχëár,şÚ´a#F˛4Ü?@śckڜknvŢŤă?^F.Z¸h!mqî•oßgrńýń3ĺgÂϚĹ? ‹…¸~~.űşŃƒŕtP’QüTĉôzą4”ńýŇ2€Ó ůůŠNQњ]‘ŻŃÂJ…EFdÔyW1ړüG[ ŚĹÇqŹ˘ĺMšíGđ‰Ä=ĄzJ‰~ĆzÜ 0ő€đ0ޘ}îp_Ú,cQ ¤M$ĆÖŐ+ë.ÚWNĂšpŰTԝF)ńE9éœŇQ6t:žĺ|÷…@\F xŠ(*ęţفźS?§ńĐ)3‡älvvÚŮím2ÝD*5ţQ;J‘ôžÉááŽw$´č‘Ąá!u@‰­ę˝g§SOŠTĎą¨ÓxŐËKŞvĆń6;ń8ň—á4(źŸŰČďŁ#ˇČˆMdË÷L :tý™ł¨Í–÷OÍHJŁć]2ć3Çetj43Ľ”F§[ăçŞ#Ćčs¸.v&ó6?o~Î젌cüű'VÂk™gťĹő !?s ;î8#ŁRd32Ľ—j‰Kɔ^ ˆTôŞçóË÷ŚČPÓî8Ţë'zÜux_#ŚÝďԉrœ™î–Äh?'čƒę(ýeݜÖD|™Éß?ŽÎ32œĄĹ‹—HqÉ3Ď<#ŁÍ°x†żcX$˘í.ĎŰ,Laą ŁĹ,a{†ą€„÷ąř†ÓgąP‡aNĹŻ7ÜpƒńľdÚ@§.ŢĎżľ,bQ oł­ÂmbqŃwÜ!Ĺ:źŁ×„aΝwŢ)Ďărü[Â6×őƒ8Œhćܡ‡ŰŔíźţúëeyÓp[8Ň XĂuňőůŢĂđýţío“Ďˆď•ŻÁë|.ŸÇ÷Â÷Č÷ĆíçEGÔáśđ˝ßzë­^zQţ<<đŔRđĂía{‚Ër˝źđ}p„>@üşŃy߸ܰӞmNŰ˙ůčcňŢzh´yëÚźe3­[ˇNś‡#é6Š”g-˛],4âçŽŰĹuđł3ŁĚąT9Ľ˜˜ÁŒÖŢ*HT$˘O¨0iŠ18XnÔä¨CÁ´_Ş> Ě:4÷‡@^ÝaY‡ťn~fŁ˘ 0ţŔT ”=9˛sÂëft˝?N d™çŔ-*úIŽo”Lo üŒFż˝Œ˛VQÇď˜Ű%eľÓwĘë4^i7ҎiOˆbFŃ‹>ŚëđˇÝ¨ŠŘHł$Č˝6yÂo bŠ!„]ŠáAAs‡ TOpCQ#V Ě×$Őť)R‘kŇňCŞŸfd%)Ć"?eU ń‘ŞŕĂ^ áýCŞśZÇ]xPŹT=úy0^ęĐýé3ZĽSŻiQ GRšË;m÷Ž=ÔÓÓ'#„ {â~ǢUŤ=˛eËÖŔöŽwxçŹYłÖŰżuë6şńƛ)“ ”ç´cţ=ŕ…ِŸ‹Hď¸ăNO4š‘˘Ç`jŐ]Î=íŢ˝G^ďšçž'?2ĎóڎˇO.ĚÝw˙]žŽ]ű555ÓźyóhddXFóٰaŁ—ć3ü =00H>ř\ׯúzşý|ßk×>ďԑŁ8îšçŢŔ=<ôĐ#žăIŮ}OxĎđŮg×Ę{Ęç ôÔSŤe› v^žoK%ňÝyď=^ůő›6IĄôóĎ­ó>y,âĽXĐeá‹@Tűk!ěgšýj˝-ˊ҂ęŔzŠß0üĆMIĘąĄk%ţa}tOŘCą 2ĆĄÔ1wňĹ } JÝO­Ć‹Œ-• (AhśiˆJ ~Ücń>Ťd]‘vA0 ŔŒÂ@MwÜľďL"$^đ;é~]#A”œ<3Ćp[Řq%Dƒ+úQÂ˙(N>p:句źčá¨)š¤A%ލ—Ž'•†ŻÇ)´¨BŠb&YšŻrˆĺčç`Žó˝ęˆ2áóu4Ÿręć}%@—ç)ËOíežË§ç *őš™ţĘ*ĽXő`Žč~BŤ1—,ýž‡Ëĝ5čôTDnŠťl䳍SÖéútT 32G@P'éDńOůâ@šPôw™ťĺf vĄ„~Fî~ăhATÜçG>ëĆJłS\Dݧ?—üy᨟˜tœRlŞ| ČďuýjżóƒĺÚh=dÔ@eđgNšŞŒcf0y-݌>ĎűV˙!\yŕA´Ď>űĐ?†ú{c˄…BźƒmŰÎÉkŻYłŚd;Ěh[Ł…Ł*áNr],naršźˇSŚr3řŐw΄ϴŒ×ĘŰʑ8ކŸS°ŢŇđýé6ŞóíçšęĹ2Öu[´›)ĺ<ő|„Ťç˛•Ć[ €ŇśeÔL„™âĆ łŤSÉi–úń2Eq‚Ÿ¸ó̉7^ÔÁ¨łĚ œ|5öŤ]čLYĘS)WüĆů¨žˆŒ:(4!-,˘˜ĎvX¸n ˙`ŞPlÜ$VPś]Âëá1Î"Ç#➠D?‰í.b“ŚţĘŚŒ>¸[.:{'n_¸Î$筟˙tb ‘tšE:ŞŒ=čč'a”hD­ËŔ<݇ĘG_'V†âž?‹~&_D•ň‰ Lz­)IUş×Rkl%%^üŒ]ď\b…AGqYŸYSÔ&Ęs­Ô0OúôˇÍ÷EŚ>Aá?3rgGЊěŕ˙đ'z™ššůütä żcŚž…ˆ˙nłÜżďPğ0,úŃÂ+ (&Š’Üž2Ď8˜ć+p$ô;Ü_-ŢšEÇĽ\ƒŚÜ˛•ÔbîÜ9ôęW˝’fí,ĺfíKűͨŔ‘eD0ňO-~eF2cIôťÇ ŽÇŘzOjélőÔżu‡ŒâԚUɍ…Ń˝űćo˙˜ŘSŚ<˛Zßł˙WŹjlP•RŮ /0é)6>ᕉ‰úX/"ţ!Šx'ňęT+AáZŒČ?UxíŒPBü`ŠPL:–dۄĹ>˛Vź¨g´˘Dű`ćá`ܐś‡ĺĘŚ°řÇHůeÚJ4ąÎ*nW}}%M֑iŁç˝œ_W%jşŽtšÓ]5řçV8FVECĚPM‰sޏ%„?qâ5Ľé°â+îY—I,zđZćF¨ Ł šó•Ф´š Ł\Ď-žćŤÔŸÂ¤#ĺwřô>ľ[GyŤK;ĎÍŐO%Ő~śÓbđ0ôć}ď'td €Úîh'CÄ!ašÂ ţťf{ĆÝV§WţÁœ;w.]rÉ%tŃE/ŚľĂmôÂWĚĄöÜnZżîyÚ´n­LSe2Zœiwń˘ź‡}ĘI'ÓŹ3Ž ji¤T˙=pßýôÜ˝˙Ô1ƒ¨ZĆEH `ʑr#“ÍODŹî!U7nż>ŮŇ@–œř•ŕP‹8ł`ÜLěru¨¸řǤd +ĺÇ<Éĺôţpšŕ5CýӊrŁé81űăDAV™‚ăü˛E? í†8€é „?€qG÷ŤCýůˆąH÷%w҄SÔ˛ĘkâhlސíFƒšł?:p¤%Jż3‚$Üýހî=Ň:ˇăáŚÓNëÉbóĎ´žGŃŻ–iö0”ČGˇÓ|ŁMQŕUŽăËŒI? Úą@TéˇqŘáŐŐŐEÝÝÝŢő–.]F/yÉËčCŁÖPnďfÚç čńgž˘ăO8‰.\čł)›ÉĐskŸŁ­[śłgĎŚă?žvěŘIőő ´xń"şíśŰЧ§G–yÍŤ^E÷Ţ{~ö™ôčcŇăO=Iç6‡SyůűRHɚЎ€iüL‹˘âÖňE“S"LߕŽčď[|ęËČ:ďE4¸h6Ůi‹RN‘ĹËOĄ]Ď}œvîŘAiaK—W:*ˆy }`ępꊧJAÎđđ0qÄtë­ˇĘԕgŸ}śüÍßźy3~řá´gĎşů曩ˇ×OĘ這ĄĄĄ˛ŽĹ6ĆG?úQúáH‡z¨Œđúƒkž_ÖšŇŃöăĽ-ćçEč_(9äÚ–ŰÁśĘú™*=ýƒiG5âFDŁü”‘ȸŽúĚ?ËŚČ;7Aŕ`z;ůłX™"bŸŕz‘rIBŸb˘ŔŒÂ@MIv›…Ęyâu†ß9:{˝íqtHQę“Đ1ółÇ}•_X§uŞîpŇš„ÂűkíČófX’/ʛH0^630żďĂŰń`Ş ř|$~ź߲‘Ç]a˛pż7Ռ`;˝póçϗŻšk׎]´iÓ&]‚ŢúÖˇŃA$m+ö_Fƒ…AŞßÝK™\–ţöˇżQ}}=Ő7¤iٲe´hÁBZ˛x ­_ˇŽöîÝ+ŰyŕJç ˆć̝KƒƒtĆgH'!;ăÔÓ¨ľĽ•śďŮIçŸ>=öäT×ŘH´‚VŹ<@ œvÚzhhjDŚžE˙śš"2„?5y65Î_BCuÎ{áKĎjŚó_řBZˇv-ľĺóň¤ş*„?&üťŚÓ%łHçů矧;wŇ~űíGmmmŇ.¸űîťĺďüžűîK+Wޤ“N:‰věŘA÷ÝwmßžÎ9çÔËçďłĎ>RĐĂvEkkŤ´?ŽžújÚśm[¤ Ž= Ż9oŢ=‹*đGŠ~-cČ2_ý‚~yă^ŔÔ%]łXŮRâľAáÔ\Áô_eô­hŞ/ż äŐkރ $×0=ŠxÂf{%6ŠO1ÁO‘úJŠ~~ř`C0}đ0f„Ĺ=ÚyfŚőŠë䍈~ŽlK‹,`€ $ń3¨Łóxľc¸Ę똳Ç,2"ŒďçX_ÂzŁúFÜđ52q°Ł€,€ĐóĽŤÚăw„őŤYąĺU§¤ƒÁŕŹS4-Ł-'ćó˜Ífeş.v1|]Vă裏Ą+VxŠüRő”jj |sšÎőEôłĎ]Ev꾊w=•zœZç\÷ěŮ^ýü7Ĺ48ÎşćŚf’ł˙űűčÄO¤Ľű,§Ÿţü::锓ŠŃqž1i§ÍíuÔÝÚNů‘ÍÂË2’⯨ś¸é.… 觍´¨Žą‰RŇvpŢ#;fŁó~×;NÖt!K)çäŚ<„?0Őa[ PPßçlh‹uX$Ăbś¸ GůšńĆéšçžŁŁŽ:JFűaÎÓO?íŐĄa›€…>,źáşĽ¨'.3SI’Łr˘öövY÷Úľke;ăŕśłýĂ×ĺ…ĎŃöJć,öx‡U püzązÁÔ$$ş‘ťBâF„„>áč?&ŚH_B×%Š ÄŚwŻ)Nf eŠjŠé[Ĺ˔! Rľ”/úLo üŒSŕíGűÂÁÎşťÇ†HČwťęU˝fÄFKĽĽb˘Ÿ˜řŃU [F;MۑŁzÍ(ö51"ÍTęœAvh¤SěŕąÂó7Ŕ|•ëdEŢ;- Ś„—ˆČ •‰˙FÓŠëŘ ś_Ž9ćXZ´hQäáŘCű­XA/şđEtý ×Ëj ůĺÉŚzÇ٧…CĚŞUŤ¤SđŸ˙|œžyćZž|šL˙ŃŢŢFW\q]tŃErF~.—Ł_ýęW˛ ##ĂôČ#ĐĂŤs…?NýVŠÂn• Ăřá›úۖż+~żĂÂ3łt ^BÖ܎ŔŮůË_hËćMԒ‡đŚ+Ú>X˝zľŒŘóä“OҒ%K¤Xţž{î‘ižXޟ˙üçtňÉ'ˈ@aXŒĂ ~4lƒ„BŢoŚę*Ćç>÷9Ż>†S—rJ˛8X€üĐCfŞëČšĹÇrÂ.Ť¸Č€iC)ŃM1ńOřüHô&F¤vNj€"őP‘6šă?Ť€A)aq1qŽą7ö¸UÄö)&ŞTôq4ÓcBŠőq>5mtđ’-|ݰĺsyĘň~ôBÝéBŇçd<NʘKčt]Ş€m*v°Č,Ťë„ń§ćőËc~ęFí¤´JlO3Š}W”Dß?ŽŹo˜ióžöFü§%\WuÎý/ä#9)¸0?ü}ŻÇü˝VXúŤ`lˆęzeÜo+‹Œô^ް%ôśEéYóˆöě"*?]ˇßv+eŸ[O˘ą‰ ëÖ°—•–0˝‘ś“ÝÇ2Łüh?łÂŰďíqŘ1 SjÄ?Ląč?ňx™€ÂÄř)Â`Ś˙˝÷{űQ ÁOL=e]0­€đ0ć„>ŞŻ7CG;Y죜ŔišŞKĺ);ź•śoź—fÍ;˜fĎ;Č9)íԚrŤÖƒB˙L5&Ěŕ´Ę; çv{cGVđŒZ fUßrľ'ZE:GĹN ¨Q˘•Z‰ÇâLÔ[]Á<ŞCQgů‚ ť§ţžçiώ'IäśQKƒMőuę{žŹ`´>+üč4_f4 Č?P#Lç‚!ň‰¤ű Ů1MKW­}’FƒŽąqvttýˇ‘ŇÍ7őN& ý>4FH ޟ}Díwßý‚Ľşęú}ԟ /j&’˜â4:śSt<Ŕ Ďž†×ÁĚŔîv‰ţcn{űŸ!("B qóo$+!îIÜŃ ţŞŚźPˇ˘hĘwÍíX;kŹăąIćŒO§mJĽ-ŞŻWÝx;ˇ—zv95‘sœ%9çNy"ŰÖŮwŒ°ĐąŃ\Ú"üeĘôá'żj`úSË ž+˜D”1ůbÎŕ9*-’Ż‘Héđ=˘@Â.ОORďî5”*ě‘ßë鴼ʐűýíVdŠ€,Ťxż}VP Ľěˇ7˛›î˝™ŽÓ}1Í+!ëÎ?ȲœĂv ”Ät–ň,al‡„¤cÁŸœR3żüĽw—ţJ&すş+ä|ŠŮLEt0˝4p4yżĺÇ˙=ŒM˙YFŽ­ŠIĽ6şˇ+!ú&Q¤ë3)3"`Rňˇ#á¸UÁţj?ĹŽ˜~@ř¨ 1}ďÄrDQAÁAĽř˛-ĺ@ŽŻKš)żR”/ Qfh#íĘ즞]S.GÎ>AŮŹă`sœkétJF R>9UżöĎŠuuA}]al$ľyšӝäNŚżb…öé<:–Ľ˙Ѣç;[Ľj$ő˝žržŤ3TČ RK“Mőn*GˇŒŮŽp´ŸŇíČ0:ÔG7:‹X {(>ݗŢgét_D-+ŚćĹűQnűĘçó”ÉdźşDÄA!r!6äţŤöř˙Şh/Â8{m/2ŤLŰ;Ţß­yAËH“ę.VœÍcŃD‰NŚĽ &bV…W +íîK“Š‚Š?Ą÷@„Ľ`LŞ„>+E@žšSË:KŘî –SˁG{bj2ÄÔIiž"/O0D`šPśř‡)C¤ëTĹă…AcIŚńac”‰śÓ(?ĹęLO üÔoV<…g§Ëƒm9¸#ü-Wě#S|9 %Öą]A‡őą)o娐ŚLnŻăTł)—”É:ű×ş:Ë ó+ź>ŽH÷‘Ń>OŢAÓÔéĘ`˘ßx䓓éů…č˙–e }ôŤĽľĆ \-Ü$Wřă z,)b1ü6Ś´ŐS]}Őqğ´ĺ‰„źADh?žČ(|­Ř{ą˘÷@Q"‹÷9LN÷ĺ˙qč¨?lÎđ뜳_EŰy•ü,644P}}˝q ‚bâfYą1_´ěȜő.<árőł’} ĚÜă!BˇŒíŔ;äL¨˘Äq BÔţW$lŁÄÎúlÇf2E?–ůÇű^ÝuË,ă 0=(KüŁ ĆÚYšeˆ}(Ů)ZRÄPÎ8MQP)ť˘@ţ܄ž¸ë$Vâ}œŔBؔJÄ3”m9Ď] šœ“ [Ś÷Jł@(-ç1‘]°Üq; ä Ź“!"łM"´€řŒ?řЁń!8†nĹě i<á ……?Xgą*c“ĽE=Î÷8o75ŚŠą!í =ĺGGRQßŮĹgďÚN”‰i”$(FYË ë4_Á´_Aݎy: =űüó’–éž´ř'P5˙¸t0"K*¨E’˘˘ĆĆF?2V*e4łř_€(vXŠľő}ŕˇg"‘O?úÁ ˙łQLřc?Žˆ?Š1ÂňĆ]Däľý賨ăč3üÎC8ڏ÷j¤ű Ř\ „B`ęĽ'Ą ż^ČźF˜rAĽ@ôp˜ÔJ8S–¨FbŸrŻ˜ž@ř¨ˆ°,n&Žš/¸.˙%=k9ؙÖÎdĄÁÎĄ´ç—K‘Jw ˘HœĹvέ+X”ˇ%m"!EAžăX }Ź@ YŇxŇ ţ=„ĐgL7Â}@łƒiE&Ů"7ꏹmFâ D뱂ž´ó}͑~řŐ0X**ó•˘Řh?fÝÁ{@GTGěLbýyŢ?ţ~S,¤ÂűP ęż ýgţŤŢGŰöP~ă3ÔÚÚJMMMR¸TÄŽ("üáÖ¤,÷ďŔŞüď`4‡ń'6$Š­„פ:J’Šő/…H˜ĚŇ´ß!´đľ—QŃh?jŃ8+ÚZˊu€Ą0˝(;ú*Ź^ĘÇ9Tă>§ĺ|†Jľ ŸC˜9Tűo•k}UX?~ƒ˜Ů@ř¨Qi$Źhß[!‹ú#?*¸Dˇ…ďô2+ęŠłŠŽ"ťŢŚ‚ĚŚ˘ýHáO8Ĺ…E?›Ň ‘~3‘’‘BŃ},2ˇ­H'¸ŒmřÔŐĽźH?2-˜{\÷wUj0‹Ě_áśĆď/=đž/ˆGĽ›ő†›’ÂňVUZQ-řa;FÚ(˛LŠ„óž÷†ŇŽ_}ƒrŤ–U˜zÔŠüˆ?śűŮľĽ­œ9_Šň"ţ$`ŮĆi”ďSŇűQäDÄŁdŹ˙™öJëÁÇŃź‹˙Mü–Rü{‘}|Q ڏ9#!VMD¸NkʎţăŸÜ.r^’ÓU„=FU­RĹď ~› „?€1')ęORßŰrĎIĽT”ËńvąŁ+•NÉH?şžBśs\E)•R#VQ|´ś' ę1D@DIűH€ř0Ý ÷ Íč>fŻłjËš!ŠčŁ^-O‘ňÄ@–—LŽSđúĽ˘ýX%îeD"ř”šąËŇýšćůžŕG…üńţ(ŐŘDóßđÚsÇoh×_N˘Pˆ´¤áOÁM7ĆéÔ¨YÔFřĂő &L3<(úѢĺ‡Ü@–!ô!ŠKńY&ŁĂ FśX’ŽFŁţ¨3bR~ąp™SršâŸúŽŮÔ}ŢĹÔ}îĹdg†Š04@v.ă˜<śgˆS WT䩓CţA^ŢąŔîą°Q`÷L𠁨á­W‚ť|ĂŰíOřËě đ(N}Ľ[Ú(ŐŘěętRÁč=r’—/â ¤ř v6ĘOŕ7n&îŠZŘĂč[˜d`ÜP.ţ*&,îI.W<ęü˜Ů6Ââ%Úąd ŽęCîLwął˜÷qD OđăzĺL˙Y`Ýs°šĺŸ@SîF`úQlśl`Ÿb@ä§öŇű Ż+ÁZOYî>CôcŠBĂç—ęçƉƒ(IDľě~vBQ,/ŔĽ3}yú-ř‘ CâyŽăc1;Ŕʆ&­ôqӐ o[^6°Ď‡ó“Rœ­ĄĘ%h/ĚçP'Ŕ˘ ÇĹD乏ŕkŹčÇX÷E?Ćš u'‹•ŔL'ŠXA0Ć`,0Z üԜrŁţčTîQ˙ůâălJ§-ĺDj˝íʤSj{Ö̈?Dţ6™‘~Œ`ęŐtžE +Œ Ś;q}ĘŘč:†Đ'°mYŽ Yqú$ŃO\‰í mPŽ]á"A‘2îDéß~ËňîH”Dű ˆŘ.!Űź˛'tćëĘXA–!’ĺŒ}˛z?üׁť 6¨‚MúŻŽť?.zO@Ě#÷§‚eQ("ú)ŻšćP{aƒjúŒ  ŻLţjB\tŸŔqňĹ?:ʏ)ňmÜcąâ3 vŻéF2E>I‘}Â)žÂŠť˘QĐŃLoâ:˘ĄMŒĐ'¸íďü/řń˘řP˛č‡ČJżŃ3Ă(QQ~ÜLBÔšNžˆYP‚řG–KɊX°cš™",F$/é–ąź ¸ qEÄ>AŠ €ęIˆ c…E4ą{ʘŕ'.jOHô‰úcöh.Œ|0FŔa ŚţƔ$AöŻi'ŻĐ.CäcŚýňš\š:_§Sç{WąŒ n9˝,?=‡Ź-,ô‰i¨@Ú Ŕ4Ţ⢾mEŽĹ‰€‚ĺ‚‚˝Ď˙Xą˘? \Ňuݲ1mKj3‰¸ĆH8ęOŔpŐ;V1ńű)ŽˆB}ŠżÜk‡@ŞÎH­řÇô…cě–P.ń6łeźFŇ{é}aÁ{N$ľWDČC”˜,Nô“ĐÎh´˜y@ř¨ -Ü î‹Śň2÷kWšˇ]Düă­ťâż>Ó!çşŰ,ŮǏî#X‘(?EŇ{%ůËŕHL7’E3ÉŰáh?ázŠ ~˘ëq˘ŸâőČW*ÝfŠ÷xť­hԟ¨ąŁ^ ń˛UřÓlĹ?ú-rS)‰!p3@n}""ô1mŁMĄöáoUcť[ăžŘG‹üÄ wbE?)żîĐšqí 6+ÉđA˜y@ř3bĹA/ţĄĐžˆřGîŠF˙Qçču#ĺ†!ň ;Ş“üeţľŁ„B0Ő)&‹‚’„>ćvx˘mXđŁyűSzĽ"ßÇńéČŹ˛Ú@Q\ă!1ęg<č˘1Q Ýč>‚xFť›ĘËÖÎ,á§î2Ł˙˜ ţü{Ą )"ҘâjßxňŽ@u$+˙śuXěŁËzý2?üoJŸ …[Ş#Ž˝ˆö 5%9ľWtPčăí Ľýb„ôr ůbĄ¨H;ĺâD@˛d(yíäh?CLO’žŰЉgĘMýżMąQ~ÂĺS)+VŒiiC1đ˜˘)˝üB^ŽPËžmŕ†đq_Ô.Đ吧Çq'Ż+ÁO\ô+$R„+pśĚô^VHđăŐýP#:!*%ÖVÔđwZ}ŚŔ'*"CčLď¨ËŠOń'J4đcDA0€đ0Śř"CčC†Ó̊OűĽžxÇ;Èţ÷ř˘Ÿ¨Hž*üŸ°o,, ßĚ4ŠGý‰–+ś/,ř‰/c ‚bę mP3\ƒÂƋíFJŒř‡ńĚ2Ä?DnJ/Ë/ëč?aőGŐćÖ"ýÄ Ş‚Oy"˙¸€E  ‚ŻLŒčÇJ<ĎQ´-V)Ě üT)ę îˇg—+ţ‰~ 1zń@Ą+m3SůűôşŹĆ%™`Ň<`Ś‘4^ޟm'Ně#_+ü$ÖIĹŰf…˙H Ź¨?~iňR‰’iô„Łřů9ŠTÔ •LG˙ €Ô™î‰ŽŕG„?~…a÷XD0XP;ŠEěî¨(( ~źsK‰~ŒëúÍ*eë›ýô 3 c‚) „*˙•+ ^+čLGő‰Ká›NfĺF?+–ňKŽ—üÄí3˚żĹŽŠ×1¸F…k@DŁţÖJ@5˙RYîů^ôo;HU狀ȳU|#ĹS[Ą„?¨QƒßX XĺÁăž`Ç=fÚCĆţŔśý$ †ŹP{„Gč€ÂŔ¨‹züýÁ¨?‰ĺÜWAAń‰ŸÎKÄĚôr…:dńEě5Íč?ú¸Ş_Ęā ő€éF9cäq߉EüąYGé}ÁcLĘ>‹4TLô_“ő§ˆřDz„ĹGRDüĂ;…gŸ¨U}†ˆ´Đ‡ź(@ŞZaÔŻ[(B"`¤`”ÄŰÓ1ĆşąúcÔüčóŹh”żŽ¸ýÜOI˘Ÿ$‘Ě üŒŠ”Eś/ţą gŽÜ&_üŁ÷ëňaąOźˆ(Näůç(>ŗٖđ~Œf Ißwqű-JăŰo%úŒó¨t}qŰTŽ!ţŃ{Ę˙™yâŁ˙h1‘{]§NŚ‚ü„D@ş"ż ŢőDLë!üŔ(‰5ö­ĐfHčcŹĹ81݈ňăVd…> „ÚhŔLÂŔ¨1=ĽŽĹGá ŠĚýŚP§˜Ř§řţ HˇC• ;ú(&ŇŚ+eEýIH p*%”I¨SüBf)˘ý€jG&4x?üIâFĄN6™U™YIhB~ 0íŔ Fůń„@ó÷‡ˆ?ĘÔÄŮď1b pJ/u4Fdˆ„‚b ĐăD?–UÁ}ŔôÂŔ˜˘]DEâ˘řč?jBëńbŸpZŻđqݜEˆŠÜŔŒŁŘwŸ™ý[ţń$ÁÜ.Q‡5Nů đ j…˛WÔjqń”ýXŽřGc¤ţ"]“ű˜ }ľ€1d\ƒŒ´vnD ˙ž Č߉żԈ“Â*nłˆ §¤ŕÇ??xŒ˘Ç¨˜čv0ţjBXĚ<ć;ӄˆ/Ÿ”ú+|ʏoŤxdˆx1ßóú0S)%"°ĘqP˛Ř'ŽźU˘>ßŕ;Şi'&Ѩ?UˆbR‘ą+ 2˘ ‘k!쉤ř2AŢ._jK‘ŹdUż[:(Ú)*ř §ŘăĺŠ~ †Ěd üԌRâŸb‘{ÂĺäşqžHEüc‘Ě6Š"÷`^ƒ`FPÉš•VżřvÜšĽ?f=Ĺ"%@)j!ţ! E˙!ŠŽĹ\OčGňŞĄĘjŒoĚ'nGÄ>Ćzů‚Ÿhˆ~ < üԔRâ&,Ú)ýGîs_ĂQ€âęSű’ýaBT> „H@€éFľƒăI§%ď/.ö‰+SI}Ԟ2Ä?D†š'!úQDDĄ‘!2 Šˆr(˜Î4ěTK)ű:bĎQüÇ v?ÁŐ¸cĺ‰~@řЉÔń§WÔŻ÷Č}Ć9q" ]6YôSzL+DLjĄ™)íˆńTRv”‚č‚@" Jœ]RRüŘŻ\FZÓQ‚(dyľ„č>"C|Ô‹ĘTú[ŢîĈvŠ ~"ÇËýX•ÎL€i„?€ !ŢÉ/ŇĺŐţh M’Č;^DT.Ő ‡`˛PŤď°’éś*<ŻXuý€ąŚ,ń#m Ă& .e€ˆB" +ź#؎Ă(␃*ŐRaÄľ+źŻt ŕjĽ‚Ÿ˜kPůý˜î@ř’<Á2Q1OřüpqŃ}źcEPňšĽ(Ő.˜.ŒfŔźÔ™%B5ü”ޏ"a KŠBçG˘˙01 šťŘ_JŹŘ9>˘HΧJľ$١â 'n% {j*úm˜a@ř˜pŹÎŹ$yŽI)1P˘Hť`&Rí7`9ߝդ M}¨JüԈţ:fž°eĘúëJNKfÖP[*ţˇ?ZŹv‚ŸČ9%Ú3cJ9‘ü˛ţŕL9" ¤z‹ %ÖKĘĄQdš§@đƍ⌏č?Ş`Ԇ *}BőwˆęevF% J*1ŞËNŰk-`YVŠ ¨â(?‰őŔôÂŔ¸PÄż–Pž´H×ڜôbjO5_ąŐ~/ă댚ĆIYŃt=r—ŸLm†˘yeŽŻäô]eŰNĺ(Ł˜1ążËH˙EŐ ~bĎ-ăz0S€đ0nTý'x^pđF”¨ ’ąřĹ 8ľ?Ż…řăů Ś”!ţaF# œ+ĐIúP‹ę?ďřCŔ˜PyŠ­Ř>@-?‰őŔĚÂŔ¸™ř^ńůń:˘ŠĘ06ľ§ÖŃŐđ] Ɣ2ÂĆG˙‘GÜ×ÜŠÝ B Ŕyřŕ`RÂ8Oě $žgU^WYőŔĚÂŔ„2ZP°ŽĘ{Äh/ 3€‰H“ˆń{0Ž”)ţaŠ €d‰`˝& B ˙p AP9Ŕś@)j‰s4ЎŞUt ˜9@ř˜4č׌ľďĘ L8ř*“‚2s’ĆŚđ –0ÖEü5LŒ:*ąKĹËřƒ@•T=FRÖy5ű”}=˜9@ř˜Ô”3–ƒ‰í0yÁ˜<˜r”)RE+y%㯗DB; ^Ŕ¸QąÝQ^ůŠíŘ? „?€)Ć}Ps*ŠâĽD@^Ʉýˆŕ€ŠFĺvJUâeŘCP ‰ @ꔨsJ”<ż‡Â VÔ^\3ę…ü@Y@řĽ0OUä-ćřUç-…3 KÍӏBěáTBœCJT}§V3!ĺaM D>P ü€Ń’ä¸G1Τpŕ„c „?0VTęčBÔLv ä€I„?0Y€# @¤0ĺ€đ€)„?LA ü` áS:`ҰěĚ 6n˘ąäwgv˜9lÜ8Dcɇ6˜9lÜHLZń€)„?LA ü` áS˜‚@řŔÂŚ ţ0đ€)H„4ą,‹Œ?ţŔ0]E>qLŐ{…` 0ՁđjÄLűLJ˝_&;ţ0 kŁŕgz~_a&ţ0…˜(‡RŇuářŔL‚Ÿ™…ů~ĂL ü`3ŮI˜ €™ ?@`&˜DLu„@˜ ÔÚfo6Zm0‘@řŔ2ÝgŠC€éÄhmˇÉbűMD;f‚ČĎö.`źđ€qdŹ,ľŽżÖŽ 0UŠÖÎBJ0Ĺdxăa{"ú`źđ€1dŹăĺ8IşN­`*PíÁĎ䣜÷¤–v.l[Ŕxá5dŞ }ĘeŹ;`Ş3‘éŔ`;žZÚŁ˙`Ş3SĹě°áŔTÂFÁTú”Şo´Y0])×.ŤÔ~ ;r˘3ÓŮF3Ÿi5÷ ńŚˆVdŹŁ Pk ü B&Ł“fŹĎŻ´S;B t´0ÖT*úÉçórI:o2ˆ@&ňúĺ\{*ŘxşüšJĽ(N-ń&úT&)€É „?”I-;ÄŁŠk":ćq׏¤c;b]':Ř ŞýäršÄăá퉲a&R„RÎľÇĘÖ­ĺ=ëűŕ×BĄ ÷Aü€ÉÄ>ľ“ŔdŠPŤqľőŒw$ Ńˆy*9ż–B t°0Qh;ddd„zűúč†íşkюŒMś-HŘ6ąy"mWřĄŹ!˙SŻŞn~‰;Oď#ýJn=P—EŃ}úz|NčÚj_č<ăR:Žnƒl_éśxu„Úl”OY)UŔ-ŻÖǞJěHő -šÝTG‡w¤čřŮőÔŇÜL 0™€ŘgüŔ%˜H ü ‰ˆĘSÍy㉨œkľ‚žZ 0“ľ űĘý ŃőŰ ôëí$Ĺ>F‹guy‚c—ů"/šŒֈŕyr"âYĚĎčóxW*eyUP ^Ë˝–ßFY^ël¸Z[‹„WݰÝKǸ.; d"ˇœžüř×ÖçyĘyMU‡íü痧q˙T⨑ĎËYväéîźÓĽśrtň\ń§˜řś*ƋąüLW!Q­m4D*㠄?„˜Ě˘RĺmŰ,Ú)ĄłÝńÔ3–ő’JĽKąkWšŞĄ!PĽdtŹ0֘śJ&“‘Żwíĺő,Œ S!oťÂ…ehW,˝í pĚW3"OčĎYˇm-*ň 3™W/ĹÔëߣ-TýźáE?ň$GÂ=Y?ĂdńĎD˜}l‹Óvâ[m)ëب+Ćs2ăL˘‘Ęa€ąÂ\j-šŠuY>Ć"SěcîĎlĚh(ë,9›2vŠňŽ3ÇŮMś•Rn!éĐŃ3şmĺŒq–”łžvv×Y65Ś5×§¨Ľ!Mm,öQ˘žÁ̘" ~5;­ŁŐ˛Źy:ŐKtdĹL6KdpHÚZn$Ÿ`fŽ€G‰Z((˜1ő-¡}D ˜}ň˛gyÉž‚Ő_q$lËH×V‘‘ćˏ*¤¤=Ş^˙˜[ŻĺżŞęD(í˜é#Œ{rŰŕŐob'SĽÄSŽÖČ+'ţŠÄ_Ukó#=Š6Ŕi€ńg<&2N–şŤaŹŇxUZ7˘˙€ąÂ0ă O-Ëą¨‡E7üŞE>YÇąÔ?’§>ÇÇ0PHQNÔQŇÎqŽĆúłöôo’šÚJIGА3­Ó”wöeœƒyçŢ&)rj§Fk˜Zëmjo°¨­Š^Ś0`ŃĂŻőőőr)uĹ:śŐˆ€Ć2b@˜bś[Ą`ťë¨<ĹŽřŞ OăEťq8f´ żaDĚńŁěˇźN&,?‚˛ýt]:ސˆ‰2$<‘’ˆp„ŠČ-ă؈V@äÄeRîF0‘źśéGgťÄŻZއÍŃ&)…Hřu¨¨B䉄Ş%îmM}ś]¨¨<Äé¨c59q4çL6Şš‡J&VslAPk ü L*MűPmĆűp„ŸL&Cƒ#YęÉZ4ŻŁ)ôiĐľzçé” ›ÁK˜`¤ĐyĚS|i-˙MӐp–,ŃÎŹł5 ¨)5D-éu5Ľ¨ĽŠ˝@,Ң R÷ŸÔÉ-ˇÓŒŽ2jÉhœ!ÂĎĽĺ Z|Œoaé9JŒcůŠšÜˆ6f´ hZ0]‡×Çó¨ 3°ŽŸ.+(Ŕń>‹śŒ2Ÿ˘K•§`.Ë2Ä<)Żßň$żáŚĐ‡L1ĺE˛ ÓÔnę/ăm1…RĹRUŠhhtőŔ>ŔřPë Š•–ÎT“ŢŤŇ‰Š°@-đĚhj!ÖŠĽ ˆE>͇E?ü:4ۡ>=L­ĎĐÖނüűZБŚăöi¤sjŚĆ:|ڐ…FŮWŽ”ĹHOĽŇ^™B  p‡\ьđ 8^š/˷Ʉ{Ě,ăír8ŞRuތÉăĽ3Œ>ĄęÓůÁX€cY)CÄCŽ0Čľ§źôaŽřĆÓńhą’ĺ_š ąÝë—ç×+ô=9;l!Ü6ęű°<T*ĽÚgťmđ#ŐVüc>Öą2a—0z`§f"ľŠň3Ń‚Ś ĺÜS9cŒĹĘ!úńŔ~ĆŔŒd4˘ŸZЁ´ŕ‡Ĺ>ƒƒƒÔ;"hŻÝLC˘…*'NüܟXÖŰGČQ´l°NŰš`_žŢYęhWÖŚŽ^ęh죜ś6jiińҁÉzF!ň)u âŸÉ Ţ|đ!ůü;îXĺč›älؓ§oŢÚK{‡ěŔţuťóršÍé¨^vN'-ëĆĎ)Lu*ľă˘űü88Âß˙˜%-OüèbޘEGúń<–WŠĺ¨rä tę/_”#źkë Wücť˘yUOtä§ӂš‚ نČFw%}/)+(r’B[]OE "2ü¤Ź”×6žśmŰň€Ô˙Xę^m÷IúĎDËE9"zžŞ=)#]Y-SyoĄ;ń“ŠhŁ3°Ó ™ŃLVœŽBŸj(7ÂO-&*0S€ýŒ-ř †R˘vPp:Ž|>ď;,*¨GâŸţţ~ęËĽhŻÝB#b´’1âšQŽřÇÝ_śř‡‚őşÎ˘ŒHŃö\3íÍŰԕ çYÄ€Šś>Ą#̃Ď|Œ#Ő××Ëí¤Ž3:ԓN]wéĽďĽţó š}Ě1GÓ˙ţď7#Ń &šlAĐ˝ĎečÉ-Yęąe§s$—üwźgĐŚ+oěĄ}f×QGSŠYÔ@'í×Hői|`Śáů˘/zé˝(*Î1Ĺ?ZäcŠÂś˜ŹÔˆŚăîÓ˜€íf™ÇČ˝žgŚyĺí<—ą˝–ÉkŰÂ;—Üö¨ęlϞÂżkp ŢeÝ(Ad{ŽdyÍł¤HČVŞ ŐŚ”nkZEúŃQlőt¤ČG?Wc{Â'uC*Bđ".ˇř'élR0˜*6:;F'Ú)vŒÇ7YĘ qV3r:dťń~‹ä źÄýNV;‰Ń,ŰL7`ż㠄?`ĆQm'Yďgą–S6éŸĎ‚ŸœEťě6ʈZţ)šsÉɘe]…ř‡ĚSŠ”˙đžŹHю\őlš• Ö†joo—éż*ékażňłăó9‚PľâŸ‰ěLóű~öŮ/ˆ=vŔűÓĎţ“RUĐŐW—ŽšćÚŘcW\ńzŐŤ^A“{ď˝Ďs(0?üˆ\N8áxš,<ł=GßšŤz†ěŠÎăëÓŰrrýţuúĂŁƒté´r~=˜ž„m=™âËçĂvrĽ2ĄÔ_伧qC"db? šy,˘Ŕ1áĽţňĎ#W3ă c Â7Ýtyvîš‚W‰#őIśŻ?rŻ)“…é4[ź%Œ;•ÂĄ‚ťíŠ€duZ¨dŤ BrQé˝DA źů<ŢU*"ĂbeŞEŠ´ŸęLE=ň#\*ů’+vrŸ÷xŠ&š8ű’íĺ_üâ§´lŮŇÄ󆆆čŒ3Î ěűČG>DŻ}íŤiŚ]1mtv:Œ~<3 ‹|ô¤F=î&'7’oăyăt”pMšŢčąCÖ˘§œçĹĎJn;öŤžœ¨Ł›kFŠ|2‰f‚}yîšPoo†K/}‡łź“jÁ/ůkúň—żęm/\¸€ţô§ßŃTö0ţ@řfŐt’Í}ÜéáĽw8G{ső4d×QN¤HPĽ2îvQ­Ůťk;mz~ m^ż–6Żs^×­Ľžž=”˘gěďĽáÁAYśšľ•ZŰ;ŠŠšE.]Ý´xŸ´xů~rY˛ďţÔ=g^H×SřÇuF1#vŠśŮÍDlłr'9Óz_hd…öłť¨Îqţ4× ęŹˇŠŁľI ˆxIęPOĽÎ´ćŮg×К5ki˙ýW-wÓMĽŠĆœ9sŰüěťťťi˛ŔŃŻŢÜCůĘú˘ąp¸ZŽëC/čB§Ś匈•‹îÇÝr/–a*iĺŠđRt‘'VŃGľčǍΣ.yŇmoš1}\A›k‹tú+ɇÜH>Â}Ľ8H wȍԣě2? +÷ń…FĄ´c: Œd9uœő”ĺ§Ó" Ęť"ΏŻĹëś<ٖ œö¤SiŇQ”삺'}ž|ÂÎő9*zvŕŒ§ř'é#2‘ö(‹ĺżđ…+éꍿE`tŔFŸX`§@mE?,ňáI,úa{a(—§Ő#6=‘ŻŁľvšvŠ4 “coĽÓžůJZdmybkoĹ2Żgn Ăłź…Q6ĄŐŰĘ2l0Ý&aŘŐf;E°*2J’ŽÄ)ŒP™Ńňţqy͂3) 4?U u:ŹĄ@6ZÔŇP'…0z §ĘœŠ“Kű” ě7`b€đ—b˘~Ýšs'őöőÓÎ|3őÚ&|V ˇiÚ§iŐýwÓŞîŚ'ş—úzĘ> ŻW.&üí–Ŕv{gzô‰tÄ §ŇǝJË÷?Đč|ŠââšË˙”,ë弨NxÎéœ;cԟOS›Óќ=´ƒFFFä`ľHíŕ3Ăä^ýôź/ńřO™ĚMő _…/*r×ůQ‰$śŠ´cšG”ł'ĺ “´MŁ„@*•˜íś#ĺؒîźqŠź˙HŃOJ•çhAÎ5 ZŢ y”üp{ü`îő‰|•ëQňĹ?ޛEՒőgr:pžńoŇ駟JłfÍ"P=°Ń'Řé@EŁý”+úámüôôôЖáýI´Ó?Ä,ĘjqŽ-Ô9ÚôÓ&ŹUúZDŽ•UJ<¤÷hÁˇcŤq„Fió†ĂöčŔp]ązWPä›Ü"(î‘ÉTůň +$˛bŻë‹â‰ö8.•ëómtkž…NË ŃK‡zhaóuuuIi/T#ţ™ě éb_rÖáá‘Čţľk×Ňý÷?čmó{ńş×˝6śŽĂ;”@ŘoŔÄá˜1TÚQÖűúúúhhh˜vä›'LôłaíjşýĎż˘Űţř´wך(Xht獿— G:őź‹čœż’9úy<¸×؅múž’Ĺ?¤ĘZńâf¸˘Ý™458ď żGGý™,ižUËé˜íŰwĐĂ?BÇ{L¤ό˙ë_ý¨Lmm­2˙†  Tϓ[˛4V<š5‹)LĘIç•tžyŽp˙ó:î?ʗ`Śë"_¸8ćŰAŢšZäQH‡ŚĂřxö }œ˙l.KJôc ^D×Hŏ{–LáĹçÚŽ˜GxQ€d{Ÿ—˘ŸŹítŠi<á”÷Ţq#ýꚫh͏–uN:ÍůĽ›œĽ…›×fŞŻo”ÍT*í-ŒíxIüĹŚ\.CŮě0e2ĂÎ됳ŒČCIp4 óSšpč‘tń;.ŁĎş@9dĘ˙č]ń˝i1ńĎ@!MCٜ˙đŒšşşşŠĹ?“v h§ĂŠ✠÷ß˙íŢ˝ÇŰ>ţřăhőęg¨çž{őööy۟úÔĐK^ňâHšOúżčĎžŢŰ>óĚӝNü—#ĺöěŮCżýíďexýúő˛łßĐPOłgĎŚ#<‚^ô˘Ęv…Yťö9şřâŕLâ?ţńˇ´hŃÂHY~żxŕA:ř™gžu-۝Ďgžć̙M‡~˝řĹŇ)§œLľ˘w¸öłPĆŁncO%ÎŰuœV@Ňlˆe o‰Đ‚l_Ě#ŰŢ1ťŕŠo,-`aŰN ˆ”8ˆ´FGž§˘đ–ŕđ nţČÔ_ÚšĂbŸœ/ěqlA9CŰŠU[Ёźšű=Q’ĐiÁȍ.dyQ†źH?ÜţT^‰ŒHxQ,+/mRá(íî/HĽ]ąPJĽ˙J§Ľý¨c ŮŠ‚JĆ˙9ö­%”HČ.¨§Ěĺýço‘FĤ`ôĂS4FL”:ţ<)Vanźńfi?|ňI4ž~t„<ôĐĂŇ>ă~ŇÜšshٲĽŽ x!sÎY‘ŸúÔgé/šÁŰîîžĺ´çĎg˜É[Ţň™6KsÚi§Đ7žńŐ@v^ţîw {⦅֭[çÚŁ ŇŽ<ę¨#Ľ­{衇ĐhKý#š‚nťíoű˘‹^äŘă˙)÷§?ý…>ó™ĎyŰ,*şăŽ["ĺ8u Űňwßýwymś˙ůł×ŐŐI|u֙tá…Ȉ­&“ŮFg`§@2ĹĆ35<ޡcÇÚÝ7@?ËwН…V×üÁĚVa!2ö Qzč:úŸŇ ›Đ5Ԙ -Bç¸b O!d…Oöׅ0&"E‹›űäíâü¨ŽÇTťł™źÝëآßËuĐłš4˝Éîq~s4oŢź’⟊–ňk˛Ř—šZyVK­íş0;wî¤ď}ďŇÎëééuĆ`ťeşÖ‹/~ sĚŃ%Ďgۚmgąóűǟ;mżń8žBľö0q@řf•8m̲œóšˇ{ T~ كüíúů˙ű ­}jUѲě0inn§ÖÖN§łĐEMMmT.,âEÓÜ=—Ĺ?ƒƒ=ÎŇ+_“„@Ď>ń}îƒď¤e+VŇŤßú^:ë—u;ňZüŁ”+ţ!-+Ó~ĺRÔéŹđ{ŐŃŃáî/żă<:ŮÇ{4ýß˙ýĘŰžőÖŰčŁý÷Hǖ;Ő&Üš^ľęq/ŘŮńĹ/~™†‡‡űy@cppHÎjćNěŮgŸIŸý짜ĎT3U ‹>ţńOƜáaślŮ*—›nú+pÂqôůĎvÔa…7ěÉÓĆ=yŞ––‹–ĚŞŁgśçâëߝ—×X֍Ÿ[˜ ÉbjĄ^uä! AŒ+âńŁđ¸Q~¤ÏJŁÄ3śü_žäFéŃâ9K:ręHšŠłtꯔ{žk?Ɉ?ş.žÁv_őbťž7ňˇ]D#ţ´Ô§iaG-éhĄ…mÍ4ßYoŽKS“ł4:Kk}ZVWpţÉćiŔą ˛šőg ´­ĐY†iëŔíČ:Í,¨Ş]‘OŠĹĽF" Ľţ DKGńĎDđĆ7žžžöľŤźmśá~ůËëœţBĺ3d ÎłžęŞoŃu×ý"rlÓŚÍršçž{ińâEôĺ/‘_ĄĽK—PĽŒˇÎŔNĚtލ\ŽaŃĎśmŰh÷Ŕ0};ŰMšĂ"mYA]şwĐŐůx ,ă|s§)° 6’nˆ‚iÂâl3+Z•eŢsXTR3™ZŁ"OśřqKG–TϛĹů2Mš{řÖl íśÓô~Ńë<˙m´`Á‚Q‰&›0h˛Ř—3 śąŢţöwŃŽ]ť˝}[ˇn“Ë­ˇŢNozÓčx_ʍžíăo|ăčżřel˝Ú~caűžđY9Šs´Ŕ~&–0ƒ)%Ňʃ…4÷ßq˝űe§Đç>pI˘č‡5łf- }ö9œ:čDZžüPš3gIE˘ŸráčA|­%Kt:X'Čkňś)2ٰöúÚţ+˝ű•gÓýwé qŁţ>8יľźŢç0ŕöƒ˙aŞMá1,Z´Hvd5ƒt÷Ý÷Ęđ,ŢŰoż#° ,şxv/ĎŘ‹~â¸ýö;3XʅSśń,ď8‡BŽ8ôîwżżäű^ŒLNĐ7oíĽá\uŸ:çôƒçwŃG_ŘEG.‰Ÿ}Äu˙Ďm˝ňZŚ7vžŕ,9š,Ůš˛łwqÖ3#îk† z=çŹs„EŢÎ ;çńö°ZFT™Âđ ĺ‡ú)?č,C=TęSKfŘ9'ŤŽçĽsĹ;¤„G݇EpęĄôĹ ŽĄŤ_~"]qĆ!ôňƒӁÝ͔vژwî#ŸÍÉ×/Ü&§m…\A:¸˝œ˘ŒE=^´JçžŘ™eKĄë“lĽUbaÜŻž żÚBÍV—I؄r_‰ˆCŠňßé8Ór2ٛ< ،NĂűW_ý=ކ~ôăąN™0›7oĄˇ˝í]ńÎqÇ+g‡›°“"ś!ÍgŘŢŢFgœqšˇÍ"ôĎ~öóeŮřߎŠj˜ 6zooŻcż/Vô†gÔż˙ý—Ë •0Ţ6:;*#NôĂQBöÓ˙fşhUžŃ‹ĐŁÓˇZz!Ă*2D@z!CÄcî7“<ÂW‹Šž)‚‹ Ů#‹jŁđĘę{­‘RÍĎś-ČE ŒgÁëćé[C]´w`Hžśm‡š9uw&‹}9SŕžŰžŚč'ĚOzýđ‡?Ž=ƑˆâD?a8ÚŇ{Ţs Ňh€ýL<ţ`î| Şs–łÇvvĹŽí[čĘż‹>wů›ië†çcË´ˇwӒ%ŃʕÇÓ…+¨Ľ…ŁŰŒçŹK^“ŻÍm`1P[[üLÎ-Î=|ćňˇĘeű–+ţąâÄ?D•‰,*¸ď~Żź:§PGš§Ÿ~Z`ßő×ß؞뎝eTÍ~űíëź dxýńŕ?řQŕ™rř˙o~óktŰm7Ń_ţň{ljđžŔě’[nšž~z5UÂç?˙%9cĹ䤓N +Žřˆ\N>ůÄŔ1NMŔ3—ŤĺÖ§‡iďPő!b_~t+í;§Ž2yA›{ ‰ĺö ÚtŰę҂)S ówQŠoň˛G†”Hg rý{×gŮKš^çľ×yíq÷Ší|żZĎőő8ĺu>Ç}ÍěÝEYgÉőě˘ĚŽ­”ŮÍË6Ęôě–ĺóCƒŽĂ!çŠw´FČu)ř‘‚ŰĘä]ń ‹“ň2ŠŁŮ¸Żš-mo˘ˇ˝}÷Ő'Ó÷^} }ഃéŹýŇě–ĆČ}oٲ›śmŰSą˝•JY´ow]xŕúˇÓĽŤ^|}đԃé”%]ÔH6ĺ˛,RB BÁm‹‘ňJđĂŰňěœ+ěąĺ"ĹLÂ]w­Eýčç‚|ńşË]ř§Œ•ÍĘ÷ď{ßťűŘšR*U˜_ţň×2ZŒÉžűîCüŕĺ2…ÁË_ţŇ@ú(śk?ń‰Ozbqś9…€ eâîŰL‘Ŕœţy^t’ü÷-pü ƒ¤+Żüýß˙ýLÚĽ§œL5ń›ßüNFŞ–Š`Ł˙ęWż‘ŠÎ4ŇnžéŚ?Ó_˙z=}éKŸ§Yłşźăě<ăT•0Ţ6:;0ÓŠ$ÚOÜ6 C{űčg™vz4ßä Ąý…BŰcą˜"œ¸ýÂö…Ëyç’ zČ[ä‹(˝Pd;ÜsŸw očR§ÝÍł(=ăŘĄ9Űm;Ú­×ůY?’Ť§ˇË÷€ß‹rŢłrßď‰d˛Ř—3…;vJá5Á^zé;äó9眳"Q ŽšćZi㙰ČvކĎyŐŤ^A˙űżß¤ď˙;2J§Ó<÷Üóôío_MŁö0ń &˜öTŰAňgOçS(ZöžŰo¤˙ůôżI#ú˛Ď|ƒN8óTyÇÉňŰ~›~uÍ7(3o°vtĚĄšs—:ƒ¸-%ëK§ˆ–/*8‹MË:ËbőÚŇ$¨šÉŠŤUPSŁş§‘ŒE}ƒ  X´nKŠ68Ëú­)Zˇ9Mœ×B‚­ÎЏ]źd2C´k×fgŔygäYsԟÇî˙;˝î]—Ó+ßünŞŤK‡+Ň=ęŔźë{ďř+}ăł‘Ďó_?őe:ńŒóČ ĎŤł>č:Ü÷Fż_ՄŔ­öźZÁ3‚y6ł9 ăď˙ő÷÷S{{ťÜžéŚ` ÓN;UžňěńŕŮgŸ lżímoqœ+'ËuNąöÖˇžY:vx;<ƒř°ĂĽď|çŰR`Â\tы褓N¤}ě^™7Ń_˙z+˝ôĽše^L×^ë×ĂNŒţó :üđĂź}===ôČ#ŽĹukXřóŢ÷ž›ÖŻß@ëÖ­“ŸĂo}ëž0hŊýä ôóÎťĐs qű}t˝ŕçQ5L }M`›Sî˛ÍŹ9ďźs[˝~öłŸKűœítóš—b"ltv:ÄSjŒ“óď`ooݝm˘ŰłÍŽÉ#|}łg—Ć ż˛E…Ç’ÚRĆ~};˘D=–תČ*r†YŤ—üŐ?C§5 „ň¤Äĺ*‚dĽđˇfie]–Îéé•vSsssŃßʼn›,‡Éd_Î8ĘŇŐW‹ZZ”­ň†7źNÚ\l{iXuă7Ń;Ţń6šÍĎřÚk¨çĂţ ´á4Gy„L˝űöˇ_ęEĽbqřťßý.9Î[ °ß€‰Â0cŠdvE)ŽţÂǨŻgZ˙üGËţěÜş™žňŃKééÇŒăŽ^W×<š={‰LˇUŒĹól:áđ<x„ózXž:ÚJ݇ęD:~joŐeą2¨ňa1ĐăĎŚéţU)ş˙Ÿu´z]šě! ’/>@Š“víÚä .ěv4üă÷IGwŕxÝäĚ3O—ŻăĺTĐNÍ_˙z‹t,tuů3ˆßüć7QľÜṕíÖÖE( w@~ř9č€ö§ý÷_!ŸŸ9¨\ś÷U÷ě8ßôŰOí݇7dčŽgJ§2ŘÚ;>ď€ńGŚŁrlŒÎŐËÔ^œ†K HřŢ |čb8'd¤•†+ŸŚş\žćŐ7R˝ĺ¤÷őRŻc'mŰçrp,)ç[ŮHlŻŠ¤ŘGŚ+¸QqlhnK#˝ňĐ%ô˘ƒ—P}ڪȉĂňK—Χ´sőuéšÍBŽKYtô˘ŮtÔ˘nÚ=4Bˇ<ťîٰr…´ăDHSšŻ•Nťö\ZŠ›x?;cx[:gœcĘ&`'q„ ‹…âžrÜň]?’śĄo#NńżüŰż].Ĺ*™ŒˆꊧĽ…ĽěbśšX¤crůĺď÷œ2—°-Ëĺ57Üp“ç˜Yž|zč!ôÄOzÇŮYd PîźóoTK—.Ą#Ž8ÜŰf›óŐŻ~%ƒď§ĄĄ>0|Ϟ=T-SŃFç÷€#î°Js ÇËĽ&ÂFg`§@yD#—d„™Y›~ži'Ű@3učVHămЍž'œŹtƒ\K*ICá‹YţI6yŞăT_ŠEÁ{”u„E¨;¸KŠä]{PŚËľ•gŢĆľĘ Ź˙t°ŻďĄ&ç=áßěş:ß3„>a&“}9SřЇţŐýhXŔóűß˙‘žyߤÉ”´đ'üŒybćk^óŞHÝ,¸:á„ăčŢ{ď—Űlçňzľ˘yŘoŔÄá1˜犝eôŮ8BĐUŸźœúz"Çt:­b~Îô‚SrôŠóň´dž]yĘ Ľ™čÄ# rqLÚž;E7Ţ]Gź˝ŽÖo‰Îŕ`Ň˘EűSw÷BÚśí9ę öÉUtŮë. Ë?ő:íüG›,üŮ7ÁCE “*kéÜä~gy*vœšÍÜů?űěłčüłˇ˙Ţ{•SáąÇVÉYÎî°iGČx…üĺ4äTiqhя†ŸqľÂŸRŔ~ĆŔ´ŚÜÎňhfßó‰+eŞ/űăW&–ăÔ^?řę§éĎ?ż&r,ŽŁšs—IáLœ%녧ĺč•çç"ŃyƃůłmzË˲rYőLŠ~ss=Ýxw}$XSS+íłĎá2ňĎöíë(ŸĎydžűéK}˝ôѡÓŰ˙őTW_ďŸhˆŢwĹçé*™ę‹č˝W|.ĄEŽP¨„Ľ?U˘ţ0ěŕ0 şskvr™žđ‚qżÎá˝jŐăÎ#wř9M/šîîYô˛—˝DŚ‹s $žíłpáBkt¤iÝî|âńÖĆuľ¤č̕MňďďÚż÷Óé4Ń1Ëeçôűw÷Ń@ŚźżĹŐÍv0y/Gžž‹U8­U:][fÖŕíÉô“k!ťĄIŚbĺt_2ڏLďUpĹ?bw˙kZNo8j_•šŤ ÁíԓĎ(Ĺ˙ŐUŸÎk4Ějn¤×žť˙BúăS›čÍťÉśÓŽ Ů ž§“:'Žţă,Ü˝M\ńPl7•‹Ÿˆdę/[ŠRŽďJ¸QĚÔ_A§ÍTÄüźrTĆoź™ž{îyš=44DßţöŐôÉO~BFdIŠNłsçŽŔöüůóŢaŰ­§§WÎŽwí}v}íkWÉ} uVŻ~F S¸=<đw.ż/zхą÷tË-ˇŃŻ~ő›ˆ}<–LfýüóĎĽťďţ;]}02ĎóĎŻ“Ë_ţrƒÜćYôçž{śLżľdÉâ˛ëŸĽ OZäßóááڒ2͗:@Á×H%似q"Ë+!"‡KJ§C!„Ěěcd g¤ŚČô-|ľŽĺ‰’|ťž>¨‰[ćÍęú˝\b*ŠÜ˛Eät”"!‚÷#ŒűVZ'‹Âˇ•G #˜ ;†饙 5 SkkŤOŐɋ“Ížœî,X° ńóąxqОëëëwúnyůů ?cćć›oĄrŕg\-°ß€‰gbFp˜ÄTí焳. ŸÜń$ýäö'Ó| Ńç.sŹč§˝}6íż˙ąą˘NÉuљyúĺ׆éÓďËŇ+uÇwânĂgޟĽß}sˆ^˙˘5ĹLíěœG+VăÜ[w`??Ó?\÷}úäű/ĄĄÁŠß ó{â™çÓuˇ>B?ťĺ7ÍWR'8(č‰[/—ńtć%Á!lçϟçmoÚ´YÎ`~ä‘Çĺ.źđoxďx íĎŠ’Řłg/]{폝€ˇËđғ™c—7=žfGŽ~v9uE˝ďŹzÝńmň؍O ŃS[sT.Ǖ¸€ÉÇDŮB˜s­“iN –!ŰŕœĚ.Ȩ>źm˛ňľĎ҉‹fŃľŻ=‰ŢrÜţTŸ.Żű72’ĄÝťzh׎=´s×ęďtŮó4Q°č-GďGď?q%u7ÔQvd˜ňšŹs9šŘ[-Î3°eę5[Š{äśí Џ"ˍĐD¤ž‘ü×Ů%\Ż9vFËDۙěř˙¸"ŕ8ř󟯧7ÉYÖIŒŚÝ*z•>ے§Ÿ~j ĚwÜ)_ďšç^™6KĂQe-ZŠďŁý8]qĹĊ~š››eŞ‚Yłş¨ÖLfßÓĎ~öSô…/ü—œžäâT,zĂŢL?ţOšěŔN€Ęáhx,śřëH#e„J]E ‹0^ľ%xÉ;ër)ČWŢ')[ëÓ)m•1ĺýî *gť‹yĚM§ĺ˝šç˛ýćžR#XňBÁöĺœö¸íÔŰ^ťu;kSAžä6Żň|ŸŞ>ŁIşůz>ţ32n7r̎îăűŇíušę4‡n¨—QY3]˜ öĺt§XäĘbĎa4ĎČ´É+ö0ń âă@oý×eo¤§{0°Ÿ;GĺgΜ¨‚űM/=;Oďy]ŽćĚ M™$,šOôĄˇĺ蒗ćé^OšŤŽĚžG1Zşô`Úťw›L˙ev<ť˙ďôńK/ŚĎ|ë'Ô9Ë‘ˆČ’ë§ř 2ufƔ‚?ě0řáâíc‡‚™ażýöĽ؟Ş%Чórƒg żő­o–ËśmŰe¤Ÿ'Ÿ|Jž˛AĎŕf8íÂ÷ż˙Cúŕ/§r˜;wN`Ű Q;Vœ{P3Ýžz˜ö &w¤ů8óƓÚččeŞSš~wž~˙Č • ‡Ť=Űš€éI­Ÿőŕ9żräĤ™Ŕv ٜű˜Î[:hňÔՔŚ+Î8ŠNX>'nbv"§ŽţŢAÇfPżëě´č¤ĚpĆąŮÚĺ ˙DqŕÜNşâĚĂčOn ť6ě”âz/}ˇKČ(IŇËâ؈,ňQ.MVĘ&K¤d$ ÝÇRĺÜ4j–žŸ-´8Ę)On>´ ˜Ź3ˇYňŞW˝‚~ýëßĘmv$|˙ű×R[[›œ!GŘ>Űž}ťo{íÚçbËąs ؙĐß?ŕ|vтóéźóΑűyÖó{ßű)řŃT’‚aĺĘčÎ;˙ćmł3…gŤqd“ţţ~zĹ+^C˖-Łý÷_!——żüĽE;ţI4Ö[tŮ9ôĺ{h8—ü÷nvJłyAß˝Ť'—•Ełs8×hŹ›>5A;1NÉí­űJ…ěٙaGŠJŒržíĄgšŠ ˇ<–wgYgА˘|!GłëBסi`¨—lǁ`ç¸lÎËÓŔB#çwЧÎ?‚ć´4RŠ”^X7Tˆž“ËçixˆmU›ŚŮLN ŠřY44ÖŤ´cRď8—^uŘrZ9ť~úŘ:ƌd¨žąQ9˝Xôcĺ_WšR2ú{Zސm[2eĽx=ĺ\ż Žůš-\!{´l%rSYElĎŠĆe—˝×ąˇîňÂ˙ßtÓ_Šłł#ą<Űg&ƒƒCô裏É8aîşëîŔö)sꊧȈHďŔ)ÖXTNZމ°ŃŘéP<‹Ďkł)ęžp™#Ü8˘OވÄărńß桎W Ăćm!dy" ´zeaYáÉ{AńOäj"ž!Šßܰb +\ˇ  ĆHxÂ!+ćŚE¤Î¨ČK ŚŁQđŠę3v;včęa‹Žm´ĺ{Uíďădd"íËZyVK­í: ‹ˇzča:ţřă"Çî¸ăŽŔś™ú‹íÁđuu°ąö0ń ŐcȎ-écoyIDôĂbŸ}÷=""úi¨ôŻoÎŃĎž’1D?S‡Ł˛é§WŽĐeoĚÉe&|Żűíw¤óÚŘżuÓzúŘ;_M;śnŽVhŠu‚hşÂłƒ:ĐŰ6Ĺ3ě$ťŕ‚TTĎ~6ůă˙é€ţđ‡?–) ’xć™gé=ďšĚšö‹éœs. ˇžőrp?|žécRŽ3Asá…Ag ;#Žşę[‘rßýî÷ežéUŤ§ßţö÷tÍ5?UnďeÝu´´ťtǗ;Ľ_şĄ‡>˙—ÚÖW r)ˇ~ÇhĹŢ<“—ž}ŚŢ}ŚÝK¤=KeÉJůşwéJšěYźżłŕě?€z–ňâěwÖůXĎ2Ţޟz—Ż ^g_Ÿł ,ٟcë,Ąu4$TęŞLf˜úzwS›c*ÖôKńNůU 7ą”ŽzŮ 4§ľşđç|/M-ńçd¨`WgŁ ÓÚu[hýĆí´nĂ6Ú¸yĺňĺ˙چ9|A7}ôŒChi{“›ú+G…§7+x‘tĘ/! dË}ÂMéeÉ}z‚¸znš/ůG¸ÓŔu™é`˛XăĂţ ˇÍާ]ťv'–gĚźysűžń˙‰ĚVfQ ;lLâŇ^ąłá/8ßŰćt$l›nŮâĎć>űě3cmHÓŠĂ,Z´(RćÁ˘íŰwĐXP{=ř\Ů>çgaÂ×řĂţ”XĎ&˙Ї>B/ůŤéôÓϑю{lU  Gě<í´`Š5~Ęu8N”ÎŔN€xâlWţMŕý˙̤¨ŕźćłĘĺ(;œ—ëŇ.r#üřŮş„'H7ÓXQLĘ+1Ď%W dKű+ŸqçzŮÁĺœk2y•ŽË6Cđ¸'i;KhŰĚŹ?fżĄHůŸŸjŒüăÂM&Ď3ďB÷ä7%pmŰ<_—őӝy)d…Ësj1N5&ŁÉTłäڜňŮđÂűV Šúă˘ÁLĺôUi_ÖbĚłÔÂŽKâk_ťŠű~ń‹_ĘąZ“3Ď<Ý[?á„㊝{–ˇÍїř9„áĎ"§eňŸř¤,Ă;Gě7`bÁŻ$˜śŒ6gđhéëŮCŸ~ďëi×ö`čÍÖÖN™ţ*ĽŚ!{,œ+č ˙–ŁĂWŞÔSž<đ–Wč„#]ńľzÚ´ÝżNýľ|ůĄ2ňĎŔŔ^o˙Ží[é˙ň:úĘľżŁŽŮÁp¤jö5݈˛"˙Œ&šĎd‰Ä3†Ÿ~zud˙QGI . JŕpŽ<ŻĄK.y›ă8…fϞ-gZsş.v°$ĺçč>\‡î„ó,íů—÷ŃťŢővZąb…ě(ţíowÓő×ß8ďŘcŚrYśl){îŮtë­ˇ{űŘiŔšÁŮÄNHžé}Ď=÷Î{őŤ_9ę÷Źłš< ,碎¸îčk`&ŔżEi7×5R˝ł˜Ń~ÜĚ.ÂłktjSËnT[O&‘s?íœóš!;3D˝Ý´Űą-—?˙5PŠŇuőŇŽš;ŘO۝ßötv„šZč3çEgě;Tńi¸˝Í-”uíł#AÇG7Şfę;6lڥҐš e¨żoˆfuwUŮâY͍ô“¤ëV­Ł‡ˇíuĹ; ňѧ딭J§ŮC)ö¸8ö;_,gŸ|{ź}B…ĐÚwß>Ď҂ m'N]Ç sÎ9gÓYg™%?Nńúĺ/ŐŰÇvă›ŢôVzéK/˘ŽŽ)4ůË_nœˇté:˙üscëä4^˙÷żňśôٟŽs:°88Ҥɾ×ţH^‡…çl‹ňý|ýëWŃXR[ý炘Ď~öóҞf‘Ńć͛é˙¸Ż¨ÎâۘÎ,˝÷˝ď–mJ;ŸsśőżůÍ P‡ŸYš3ž'ŇFg`§@ń1J}L§^˘§ m¸˘ …ŽwcĐĆŤÎ87&˘Žˇ&# çZ~4 HţNX–…Č2Ĺ<îőâ˘ç,Ókžą„‚…DĚ!ă¸öÇąÁrŁy‚&’Č2k1ĎQĐSj§ţƒœĚ‘Ęă˜(ű˛cžľ v]Ď>ť†.žřŇFćgâp$$ś Mą6?ă7˝é Ž řmoßŐWOFiçgŘŮŮI6l¤ëŽű­YłVîšçąÝżËÔmŁö0q@řf4c‘Ú‹ÉŒ Óç>p mz>¨žďěœK‹鼝uB>őžľˇĽ-S™ƒWúéW˛ô…ďÔÓÍ÷r<ąđi˖gЎw§ˇËĆuôéź…žř˝_9ÎŚĐ,_Ůá÷sq—˙hŠĽűšĚźđ…/ł]ěЌú¸™ÓĽxĹ+^F?˙ů˙Éđ°d¸íś;źíśśVzýë/Śď}ďąuđě÷ż˙=ôŐŻ~ĂŰÇ3K>üá+(‰E‹ĘNf%|â“ň­[ˇyűxŕAšÄÁáy°`´ş¨X76ůž]8}Â7(ŽUßHiNÉ%ÓrŠYżÓC(Ą eJ‹H:ôyÄŃhňy"Ĺ'Kyg€Ř˛ę)ť}#ľňÎzŠŇŽM5Ë)ťťo/5vÍŚ/Ÿˇď<Ş őÔŐŮN#™Ţ‹Łü4Ô×QKk Ľ-?}Dšäs™f˘ŢŠ#—Ë{ű‡†34k”Bš:g`ű’#÷ĄÎŚzşíy5CľŽř=°do—MüT:EvJpŚ/*¸N&Kß R)/âvčhńš'˛”%:R}ä#˘űď°,ÇĂk_űjşďžű鞞~]lÔ†Ÿ˙üg#)4|t€°s1g„ϝ;GÎPŽă‚ ΈĚŮ^䈔&ěä`Á:§ź jiŁól÷C9XÚž&ľˆÍżüË;éë_˙fb=úĐżŇŰß~ŠLßŔ°č _¸2ą<ż?—_ţ~Ş„‰˛ŃŘ這ÄhĆ%ůw€u([ř+ÓłYźš 1MÄ8 ­†@zӎ?ĎÓŕ¸őŞđÎu°Č8›M1™ĚL&?k)GŽë×kęwDDËŁVDđlOhóĚ˝ Ôq/•Žóp ^Ô!ŠśÇ#ĹTÉ÷°-ŤôD…Bő/'óŘćDؗľóŹľ˛ëÂ,Y˛XFoäB?řÁË]zé;ä8ŹÉ%—źQŚÓ˝÷Ţű˝}7Ţxł\’řŘÇ>Lííí4Z`ż„?`F1ĄS9ÍŔç˙ő-ôôcÁPý,^ź2RţŇ×来úNßdŚ­…dŁe ÓtÍŻýŻî¤ęgaŠž}r}á×ҧŽúŐŐ#"…Ĺ?zWľBŠÉÜYîîN:!0s–gĺžwŢ9T)ööłŸý}ü㟔3_Âp˝_ţňK†˝ĺN2N|űŰW{3ɒ8ě°C:ż C•Ŕ3W~ôŁďÓWü§Ěa]ŒN8ŽžôĽĎ×$/úIű5Ҥ˝CľMŻ7Ť%E'îW]š@qřűˆż‹řU/2¤ť]ŰżăÉ;ľed™tÚ[8• ż‚‰ÇŞŤWöGŽq?‹ŚHÄ2'3Bű\ëĆÖŽÇŢ)äIä ”˛;1Ý(gFwÍŚşŢ˝ňs —yƒ˝tůéűŇÁs[jjß°H§ÎYš›]÷§4#ŞĆœf{ƒ?żŚč‡im­Íď$ßóK\B őôűg6Škʝż“:~;,¨ČN9ĎÓŞ—ß|3E*§JKĽ-×Ďă>?S@NćLtň…[îŃŠ&ÜgűEÝćLëb\yĺäŒaž\ ݰ]yŕ+‹–ă¨?ć d ĎT–‘—b8őÔSčuŻ{­Lm ZxVôX jiŁó}˛ë}ďű@ ՙÉ{Ţs)~úiEDědúć7ż&Ó3pTÎbp îzč!T eŁ3°ÓÁxűöĺT…?§ňóęŹg„kŹYI ”¤(@‘_Ä"(Z—Q˝>OŤDpô.$żaťÓnľnŽŠzрRäÚť$#4ZMŽ„öy’¤°Č8QWe… t]•J×eÇ}(XiŹƊ=aÄš!>Źż[ŚRDŸr˜ű˛VcžŁĽVv]Žô_˙őişôŇ÷DŇŢjŢň–Kä†?__űÚWčż˙űë2Zc1XPŢŽnY `żŕűö%㠄?„­8č_ý4=ú;ű8˝×˘Eűöńo܇ߞ§Wżpj§ö*‡wżŢŚŮł ô•ď§É´i8úQÁqj™iżžçNşöŞĎÓť>ô)wOxĐÁ]HrłL‡ô‹^taŔŠpĘ)'ÉA÷j8ăŒÓé§?ýĄł\'g{ěÜšËůLśČ)ďxÇŰdçyŰśí%ëá>ö7żů=řŕĂ´qăFęď ŚŚFé9ňČ#dČž^ľp=W_ý-ŮÎ?ýé/´ző3´}ű9{mΜŮRTÄŃÓN;•jE˝ăčťôŒúęÍ=”Ż‘Í]ç Pq\7 6pşAž˝ÇćéŢANBßwx–(w¨š͎Vž&O°ŔŽ á;]üŠĐĆlkßSâšBříĺ1™nĘvmY““nQhŁáY (5Чç Ë2só9jËgäßH“3hkéÓ5‚f̙ÔŐPßPGKĎul‡ž„ťľ­™ÚŰ[*Ž‹DĂνň˝756lÁ3Ý4gż_­÷eäK=V›E@Vk'’|řIłřGe™°ź4 JâcyďĄ~˸îhꯊ §bşá†›čńÇ˙Y˛,;M>řÁËéĺ/)ýţ÷”âíۡÓĐаŒŇł|ů2)Úá”Pĺ>8BΡžő˙"ßĺ,*Ćż˙űżIá ;/8u;@ŘŚeűđ oxLłđéO˙%ľ´Ń9eŰčěđâ™éě(âďsśÍYäÄĎłGIúăKřߜśýCŠŸřŮp]łfuÉ<,œâç[­ g"ltv:k`_žœj$E.ˇÝÔTÂJ{ŸŘ13cÓ+qűEh‡0”Ď"X4"3˛ĹĽťJ Ţ(U0R~yE ćʝO× îŠť€zvň1Ia^Œ;–űüt›~3Dń:ZG7Š´{#ӍTžÄDؗľó-ľ˛ëÂŹXąýěg?Śď}ďűŇÎăčŽl{ą›ëĺôŽIđsűřÇ?*ßśßřďÜšSŽĺvt´;Ďxš´­9˝WWWŐ Řo`Śűö%Išż”V™ÇŹ2^­„m˝¤ŒW˝¤Ý}éĐÂÇx”-•Íćî!0i wLÍEŤ\yĐpxxHvVŮXŽŐőŠí×ŰIggÎíűgyN‰ű9>ů›u47ˇ9†ôa2Ĺ•ŚĄ^Đ]^ sOČhŞń׿§č“ßL“9ٛ€őë˙éź÷ýŢ>îč~âżżG'ŸŁgÄĚR2öÜUNŠ… ę݇;ĐIęé6ë”Ç3ŰsôÝťúF=#…g pgtĺüzŒî$s‡9nöHŚŠŠIv š3=•ظq“ óßÜÜ"‚őě 3ş90ΘŰŐڗ•ڍáu<<\2ľ ˆ‡xáŽ3˙>Ö*ĺ (Žç qBYŽÇE¸íúžřGőűäqrmOĄ"ýpš/őKÂ΂źqäšĆ&ęijŚNÇŮdňôSëčôÓ{¨ŤťËt¨—Nmň Đ“O>ď‰e˜9sşhß}Žk˜enOccƒ\|‘P9^ŸL&¸ţaęěj§†ş`z¨°ČůĎÓŰöŞHÔŕ\ż ŁűŘ)[d*8ç¤y_ڍü“’ee ĄÄ?* Ľ&¸ ś[}q’ré5ŔŘ;ÔؗŁöĺä%0ž)LaKqĽ…Nş|0˜+Hׅ)¤ ‰jŒr–kńúľY¤"舠í'b´Ejˆ‹Ő$‰ŕďqp Ýţ>˛{÷”śľĺ|–­ÖvJuv“ĺ8î„;vk•/&ň˘GšW“˝€TJ:ŮŚda˜ˇÉÖĎĘ Šś0> Ś;°ßŔLöĺč€} @íđĚ*MáĹ?Ú<‹g WÚ°Ě;?ěWţű;¨żˇÇŰǸŋW:• Zőƒo+Đy§V֖éÄY'Úô‘w}ń;žƒ†ŸŃ’%ŃşuŤź÷iĐéůŠ÷ӕ?ř­TÍFÄ?Œ;Ăh0ǂ˘ź|Ď* ˆŽ6ĂÉÓh’ łaOžţçś^Ú3?;Ľť5E8§“–văç€ZŔżťCCCŽčŒxŕ…;Î---îď)+‚î ?’řˆźcśŸ-ÁsÎ(ۆ'Â.¸Q”“Äâ5é:ęď˜ĺŒŽ '==Ă´~ý&šż`556S›vŒKěÜŃË0ťvőĐźył¨Ł˝•jíÜWÁis]*EľŚ.můĚI™‚qWaűîâ×Qżó]˛z/‹¤Ü˛uÎó,¸’Ş´ĽžłĽžŻ˙%ÜňÓSh‘–zĎříQŠ 獴'S°'k`§ƒj}Y[`_Nn¤ÂśŁe˜žĺ •ôĆ,`h\bE9ţ…ÝéĚÂMp%0Ą:"Ś˝–o Ťöjqľyšş($ţą"÷ĽlťÂŽ-”}ě>Ę­r–çž&k`/5Ő×QŤăXŹŤOQ6—§ÁĄĘńĎH÷BJď{ Ő~<ŐvĽşç¨ˆHĄ‹ŁÝ22¤Ľ˘Ejąc[8kŤ{ œ0sǂÁĚö˜ŽŔžŹ-°/¨řëŔŔőööʛݢ­äyżýáˇé™>Ř7ţžÔÜÜŘ÷î×ŮôúóÚĚvźúA;÷ŘtÍŻ|W §D›7oÚžýyoßӏ?LżűÉwé5o{Żť'^üł'ßD­š őőőŃÜšsĺnˆz@-Xćt4?÷ňnşíéazh}†śöŞźň :ÓtěňF:ç fjŹĂç €Z088(gɀÚĂ::^kkí…@cE&+Áˆýǟ!,„™“ŔVł‹ŮńÁęáFŒjœZ‚8Š:z᱇Đđ}˝´{÷€weś{V­ZMr ľˇľSÚ 5Ěuííémm>›§ZÂłš†œë Ȕ^œNŹŁŁ•ššj7cŤŽĄžĚďŚ;{äs›7ˇËšWőD)œŽëMGěC_˝w5őd2ĘńÄ'-wśă”ań§ĺčœ,ýBŰŚ–ţßw4šo——",?y[Ĺ Łv:(ؗcěËÚRŽ-‘”v6°/\& ţ!cĹ S“ŽĘPť˜UˇE"t‚07ľyëŘZśí[Ś˝r_ýkúŞË;/fÜOĹŮzÔ´şH.K™î¤á[~GŠ ŤéčC÷ĄłN?†Ž}˙y´ďâŮÔŃÚLéú)Öa›Ĺ?ťŰuőšôŔ#OŃ=ťŽžřń׉VAgż„Ž:™ˆ# ejJ ŤÓx¸Šŕrç~ElsuÚ۸ń`sü˛œąLŒw‚Š ě70€}9vŔž`ô@řŚľč,ów6›Łţ|Š2˘řŸ §řúő÷Ż ěkoďŚî}œÚë]Żĺ5ŻĚť_G´vƒ ŰďóŸÇěًhh¨úűw{ű~ţÝŻÓéź„ć/Zę>šč @–Ň22SƒădâЀœÔh0¸Ăyáa-rÔ]o`@ž‚ąE‡nkkĂě™Ăśƒ€˜˘rĹ=$˝/ńťOĽS‘~”óÂv+aąsoŰ,HąeĘŻCtŃťOYFŢť™v˙ăÉ@Ö=żöîÝëŘSłŠžąŃ9mIáÍŕ`tP*]_Yš/n_ÎąYPŁÄ6ƒ4Đ?DĎŻßFÚNÎPoß-_6ŻfůÚůšľś49uΗĎ̏ĚOK}]rřžô­ž•:Ľ`Çvžkň|<#;EœŐAŠyŽ ¸dËŔJäűfœc”ňR~EB‘Ęű€ńv:Höĺřűr’!ÍH?TOŒŒĆC‰m„ąAńO@Ú#â…@Ţa\Mm"Ą1yŰK•ĽE@Ň~˛|™Q¨ro5hö9vW6C6GÁli“v6 ~†~} -kČқ_÷BşčěwR{c e)“)ÎӎÝ;qnjđĚuě꺆jpÚv́ËčŹă˘Ôű/ŚÍ;zéwž“ţď—ß Í?˙ľžüj>ó˛#‘“ …řžěřv›ťT؊Ŕ~SؗăěKŞ1ÄŔ?ŕŹ,Ý[(­*ýÎ?F#ĂCŢ6§­Z´č€@™% ˆţó}6úwÜŻ˙ôe‚žYG´yť˙`-ڟ֬és:Ď*%EĆéÄ_óŐĎĐ'žz1ß(:tŃSh 6§Óßßßţ˜œ°X“sÁřÁ===˛óŒßË1ŔňSEŠ1Ž;Dh‡†ĺ;K´8H:lůżýťOE˙)Č×Öú]ů˘ŁŠĹÎĐQGLÜ˙´c/ů!҇‡łôĚęľ´xŃbjjnĄ††zéÔX´píŮÓťˇľśPkK3•snďŢ~ç#rĐeöœŽŔaÎěŘľ—ÂöŮČHF:[ę;k#üŃx‚î2Ę.ďr•WĚŁż<ˇSŠÔŇY‹RuÎłe‘żĽć—sÔ"žÎœt]ĘfńŰĄ„[–kĽ´ŔKĚRDţ€‰öĺřűr!öůZt3űlLD cÝ2ő@V‘ Z~+×ć1OÄö”­m`¸šéł”ćÚ‰Đpj!/>™[˙@Vfěś.JuĚŚîĄôń÷ź†^ů‚I8ŸÉáÁÚľŁ†œW-ޖb}^ <ޘ—˘đĄÁaĘ÷ŮRÜîXÔdŃ{ŢřBşôMџoš—ţçškiĂMżĄö7_F郎Tv˝͔gŠ„çƒ1a˜˛Ŕž`_P)`PI L&#Ó äS4BŝÝ}+Ýḉ}óçďCé´ŻŠs|.ôĽÔŢęö`ąxK›óLžôďDő†‘ŸÝüůËÉäˇÝH÷ßu‹\÷ßI]"#Ň4˜#ůŢéÜŞ•F0~p.ltš'~öü€ÚĄ"ţčČ?–tč(@nO,˘„@ŽóÁA-„ń°D¸‘8•ç´úř™ӒŽVjjl˘šóćŇ…ł"mxňŸĎQ__Ż3@’ólœöŽ:ô}ŠŁŤÝ,i¤%‹çŃʕKŠŽ‚ˆ?y§ ,úa8zęErš„L&—pnžĘ“čŒgď3ŸVt4QÁqąXJŘÎ3jvś-#*ńŤĘEĄß/IÇYŢ{§\śáŔ’Ú,0€}9ąŔž˘cZÂĽ¨üRä‰k„ä×öąĽ­ÉśQÁąő8U•\x˝ _U7źĄˇh2†ŒýnÝş)ä ľĹoŞ_Žmŕ‚ÓŽźsÍŹMůLrĂyçչ߲yŮ6á´eäś?Ńěn ëžúşç/˙~úĺËčő'ďGţń§čegEĂýƒ42”‘˘ĄööfęžÓĄÝNý Žý+…ř΅sŇvTßPGuuišo˜Ł9{ű9u­óyžčŹăčßžţý%GPöŤĄK ƒ¸Â}.RŔdźĘ›ŇŠ{˝ç¤o´Ř{`2űrb} @e@ř@ţ!á0r{íâá&Ů9đÝ+?Ř×ŇŇA]]óűŢ÷F˘ƒWL~ÎD-‡ěoŃ{ŢxdÎ3œOÍÍí}?řúů™Ŕ_üÓk7Ę÷ŽŁţ˜źp>ltÚ&~ř˝ŁCڛ3‰ľŠŁ…"ţŤćǍ#\tÂČŮĎ2ě úSpŁý8Ç.î¤ W.’Œşúzjďh§ƒŢ'ҖM[vÓîÝ{d¤-hás:;ŰčĐ—ÓQGěOK—ͧĆĆŞv†píÔŢŮQşÔ;Ç9ÂPŇšŚ˝V œ#^řźćeNç—ĹTyőlXücŤgޟ•0VŇgHé%\ĄÚ§ý:ZÔ`b}99€}Y;ކhű„|qŰ3,äÉgó”ÉSf(ç,YůšuŘđ1oáíagż.3˜Ľ,ogň”ϤŞÄę†ř]˜â ňE//qb!ňÓçšuŘ!…H|#÷ŢAŻ8÷dZłęyúóďî ­ ô‘w˝’K…čţcS"|śEťgˇS:ÍvtĹ3y[Ľăý,âë46ÖSkk“\ďŮÓOkWo¤­ëˇŇ;/~ýţÚOŇĎßGƒ_ý‰Ţ=gźw¸ÇŔńJßN™0ĄŔžœŔž | üӊJ#ź„Ëłh$›ÍŃ`ޢaQ<Ţ]7üžśnxŢŰf‡Â‚űĘ쿜ču/ĄÉ¨ˇ™T˛^NtŔňŔŁ“)żtfÓşľô÷ż^ďmlj†í4 ç…|ů˝4)öžÇÎ5Œ ÜQă\Í`rŔď:Ď5Â2Ĺ?z]^ ?ů9\ljí:¤°¤ g ł ĽÎ)÷ŸgBÚ,âT[­-­tŘa+Šą!hŻrŠŞÇW=MCÎ{Z坷Ň)JĽŤěţ9oáô`Ž#$eEëŕYÔsC鿘ƌjj._dđ…Ö­ßF›6ítŸCí˜ŰÚHg,™+Ÿ ;Žä,wůÇňŘĘŐĎ%­É–˘,Hś§ey瘝L°/'°/'-´aas!gSv$OŮAđ8öOFEńá¨:~t˘¨âZﰂ~ÜH”}'?’S áŹ\Wś•0âWTňPŔ°ň‚ůÂk]֏¤é‹ÂŮŮÚąŁ—ţńĐúű?ž¤ë~{—sŸĂŇ~ă(ší§gď€ÂëqGś;fľĘó[ڛ(ÍBˇœâŤąąŽĚÔ­{óYD4Ťť:;[ih`˜–Îí¤_|çctţ’:¸ňƒdďÜŽžˇŤśąeŰËTžvőÂěËÉěKĘ X9Ęéz EËq‡í7?řf`GúijjőśŮ9ó‘wYT—žäŞ›I°¤S}ěÝ:§ÓÝâtŽƒŃ“~ţ˝o¸N U0NüÓW¨“ď!”Ř0ůŕďftš'üžŕwsô˜˘Á‡Œ”^¤M_d ŁźéGŠLÜT%ţyËŃËi?Çé@ň4K.œß|ÖŹnZś|^¤ŤWoéžrůœˇŒŒdŠŻ`Œ} œJĄ…öYś€Z[›ŠžžŽşť;héâšEâ'RČ:NŞL–lŞ=/<`Íj¨S)żňś+ţQ),„Pł×ů}bAP0"“mDfŇmőŰl‡ 9Œ°/''°/'QsdŽŇ“ɓł=!Š-tĘ.ۈNcű˘ĄmQáŮŁá¨5^ô-h‘Šš TŕH@ĂYçşYĘą(—Wv•Ą, Fž1˘ýPPP­Łĺ„ĎUf˜EŠůKhý杔Íĺ¨uv ˝őug˨Ž\dŰÖ˝ôŔýŤéć[ŚGYK}=žƒ°ąĄŢąĄëĽźť­˝ÉŐ×§ qź ţţ!jni¤9s;¨ŠĽRŠ”ź—ţŢ!ÜÓG_źâ­ôš–Ńŕ×?Föž]*‚dÁŽd‡Ÿ—'"Sؗ“ؗ”Â0í)7ş‹Ěĺ<<";Žv}Ńň÷Ţ~­_ó´ąÇ˘ŮłĘźô\˘c›ü˘›É˛u°Eži(ćĚYˆúłaíjş˙oˇ¸[ń⟁||ŮđJç Œ=###čœMbř˝á÷Œ/ÍWPěŁf)[ţäfË ŮڙaŹë4T…u5ÖŃĽÇŻ]Ƣt]ă°h§#Ž8 Ҍݻúióć­ŇŽeQKoOíŢŮCŮL&śŮůBž†Gh``ČąĄňT-iÇaŇŮŐFű._H+ö]D‹ÎŚć榊ę¨wîkŮňů´lŮ|) Ż5uÎł{ŃţóĺłľíźűŹm×AcŠź,hÂuBYîLtňŢc˛şĽÍRă ěËÉ ěËń§-Čť} ‘ [2–e' ŤĄH<Ň "#2/Ŕ!7ŠM8˝• ˇ, \ňś'Ę e)ŸQB a›‘~„gk"…"™" }ôĄÇÓŞgŸŁĄź˙UÔÚŇ,Ënßź“žőĂ?ÓŻü!]uÝ tĹ×~FýóyRĆˇŞŻŠŠAnsTĘz9Ó Œ;˛ŘÚÖDÍ-J¸Îуöě쥝Ű{hďî>ÇŽ¤wŃßő şđĐy4ô˙>Cbd˜âŇ}U^ŽX“ؗ“ؗÂ\řǂ;cýů:Vń?__sU`ťłs544{Ű őDďycÚsü`)ošě͖ăđńŸkCCutĚ <ë_~ߌ´ä‹źą+Mš”ěOg\ĆŽÄ600@`rĂďQ>_˝đcŚă§ůLéeÇľŔňkšëŇůĄ#Ď؞č­Ç,ŁćútäZétšZ'Ç~űď#g,›°ˆĺńUŤiĐy?YŕÂŃwd¤ TÔžĺĎ­ÝJ?ą–žxňyzęéu48@Éeó´uënĘfK>XÔĐX/gGWCƒă„ŠŻŻŁąâč…Ý4Űqö¨”j‘ áFY˛ČK+a{Î,탲ŒuÓ?GŒ7°/§°/kOŃÉkÂÎxb;(@á}涗L#˙ÄÔŒŠnă v¤Ŕ:WiĆň:5˜\ť×H‹%BŠ$Odbkl Ú:Zč?ţőőÔÚP/GY¤ýťţAšý!ęęžE÷űźŘNmin čŽřŸTŠŁ’§(ç´o׎^ęŮÍ)żňž@ßmfĎöúŕŰ_FűŰťiä7×xbrľˆč˘Ĺ?Őź§Ć ؗSؗ$á˜6TŮ%\ž#Äär9ę+ígíSŤčŮ' ěăČ4&/;/EsťiB)Ýűp]ůżčâ÷=IGżđAZxÜ=Ô~ĐßäÂëÇ\ř <Ćeî{¤Ož3‘Ě›mŃEçż–ÂĎvőăĐşgŸ2öXޚn}ĄNž—aevą÷?tź 6 Óh㲨eǎ˝´woŸˇ/3’ĽgžÝŕ88r˛#™,mÝśKŚ ›ęđ;sîňŮ2§üâgmť)Öř}ł Ž“Ëđc ßŃ㿇ŚóGG°0žŔf™:ŕ˝Gt„mżˆ˜@3"´.ĹÎĐۈ Â™y¸ŒBžŕ]ř‘yȋĐs.§łĺˆ@ŮFň”ç”dܒ,ď Œf™mUĆ2Ö=C…?~ŸžúšËhŸ…łŠŠšÁłŻďź˙)نžŢ~úÓďn¤GzœZ)i˝šöşZ÷ˇł™<íŢŃ'ëmmoŚŽY­Ô=ˇƒşçtPGg›ŕs{rƒúÄű.Śş{ţBůŐŤź jţsŒH˜ÔŔf™:ŕ˝ ž˙ĎŢW€Éq]YŸjćшF4b[L–QfŚ81Ćą8qpƒťűo˛›ě†7ŮÝlŔ&33ł ’%Y –,摆ęŻóŞ^uUOwOŞgôŽžŇTžzUÝuŢ˝çŢ;pĄ” C4üwcđŮŚ§%Üvů ť>çä"==Ëţě3ơ]wâ4u‡Ë;đ‡Žâág+pŹ2žsŚž!(Ś{ZńÜkŐŔ/ąŁŇqËľ#ńĹO•bܘtœ|ćz Ď˝a ć­@xö-ű¸ššÎŢć­ŸŔßřžc/ß#ćř›îCG  ~ăžňފAš‚‚‚‚ AKK‹ŠÂBŕ˝â=ËÎΆBĎ Ä<ŹĄ`eýÎŤĚ—f•3ËXkÁLú#Âą 2˛ţPHLˇ-œˆœ4âů|˘ÜWć͛Í›÷şśkjlǁý‡0vl)Ň32bfĐ –ŞŞú.ËĆr €ŇBĄÜÜ,ă<đT:aôĺřşăîżĹí׏Ć÷żU†âB?ĽŁK—yđŇۑk`;…?ożô4>ýő…ÇăuŘ"œŚ ÍAr`–pËĘĘrŐěŽŰA§    Đoŕ Œő†xĎŇÓӅ°DĄФ˙@łćâšěˆgąÎéĐ#%Ň˝n[01ţŠŹŹ?™™[:#F䥪ŞŃľÍö÷bŢü9ČÍ5‘׳Áń¸O, í%ďÂŕ:,XZĄš™Ć7ݸŽ ddô0Ýk8’–M,Ćł{Ş ÇOP~XňK {áŃźÂ!äőyÄ2ňMf(>%éٲD@âĆ)Š   0XPürhBńËÁ]Ę –ÖÜAQ4[œc s¤MƒŸ'ih.é{ßĚ@;ŽŘô.^÷*fىœöV4eć`kŮlźźř2źsęYhóĽAŞ€4ˇ˛[Ňěl‹ćFrŤ`f‰łfNF 3„چ–Č>/žůcçâ'żzÔ°‰QX˜‹˙úţ0ţŠHËȀÇç%óE¤ŸÂč0셭člüžx4֘›i÷I[k'š›Z´ěŹB„düMĎđ#;'CdúĚőçă‰çŢAýĆUđ.<&ǖý ; Ü;S­‚‚‚‚ @ńËĄ Ĺ/şB}@§B‡ˇ„g†Ů°r9ęŞ+íĎtäćşkz]ůŕgűyäŮ |ëG{PW@€ÂĄż<\ާ^ŽÂ/˙cnźz$ěC§đ‡}ě5V^ľUŘźf%œą,*,)ňÂ3“S‡ţ((((( >˘K.* đŢĺĺĺAĄ'‚ł\—™ĆZăĚ#,a[d΋Ň_aąáů“KP˜™8 %…?>ż_”űšyĘDTUmu­?t¸MM(Q ż?­‹Č'-͋ѣ‹Œí*ÜWa8<ŇÓWř ,żUU]g<‹âsSs ƕŽDšż29.]ˆç÷T žČ~×=tČPä"Ÿ°qO<^ëŻG‹”ůłš}/Ĺ=Öş÷ä(‘š‚‚‚B˙@ńËĄ Ĺ/˘œ,ÁŒ™mF  ťô5fY-ÍNa¨I9ľľ#9S<¤i’ňĘKœ1sĘŃÝřĎ{˙óöo$F4TĄěř~\˝úěš0¸ěsxyţEčđů-.e@‹’Ůb%ƒÖ˝ţ4–ägăĘs梣3ŒŒ˘Qś5#Ř\opšŽšh1Λ†VĂŚ9gÖTć[ƒŹĆi‘ #ßËČÎS3UW 1¸<9ůł`9yYĆş0:;tí~ 'GĚÉđăú+–â÷o= Ďź3ypˇJ ˙=*㏂‚‚BŞBńËĄ Ĺ/ÜPÂ…ad3űÄŰžłłÓTő†3ĚÔ°qđÎKOş>çç—çˆÄ„ąŔěéƒ'ü u|í{;qĎăÇbŽgšťeç.Ă駟Žšs碴´EEŚPŠŽŽGŽÁöˇcĺʕx÷ÝwťÔĹŹ­ŕŽonÇťkęńËďO‡ß78Ίy§h˜XŞáŕQ™>׃ÜÜbÔ×GSË_z Î8Žđ$ fŰtŻqO˘„›N§K2ĺ¤QPPPčřnĺ¤04!ď_ZZş‡n•ň2Ý%Ό?0)vö˜Ľ¤„N$lF[bl}žvĆč¤ÎË¨ŚŹl–á:kVďĽ $Zš;pčĐŒWŠĚŒX9-5ŒQ€ÖśTW›%żČšŚM-E:EG'Ř7 „lŃANŔŕvý%üÉNóaFQvÔľŰŮ~tĂ!C!ŕ÷Ţ –™p–€ˆ”kФI–ţRPPPPp(~9´ĄřĺŔBčKdĆ+“$äź˝EDýâÎôăÜ؂u×*skП‰^i,<őŘnÜóë/`dC…{7؛1Đôƒ;đ‹?ţ>7a&ţzéxeţEh38^xŰjîD8Ř_q)|ł—c˄8^ ´ŁcŰ\óĂťĐŃ҆Žvƒťzźđgç"­¨5ǎĂăócáây"ł#4ŠN ƒUÄ*ްaÓ8tíAœ:}<.ťpŠ(˙•ž™‰âącQWQ@{‡}Y,őĺwháłł3Œc…ŃÖҎ֖´ľu"#ӏ‚,|üňłń—G‚đ‘đmv%ƒÔÍĚä'š[+((((Ćâ—CŠ_*(¸Ą„? '=(řĄ#Ą5` `=ńż0oů`…k…?N\yĎŹA=hm á–/oĂkďÖtY7qŇD|öÎ;qíÇŽEff–…âąęb›í+))1œ=# GŃ<ÜtóMhllÄĂ=ŒűîťîČďż>RŽ#Ç:đĐog#+łœ-݁%ÓţřPČţ\PPâţlZőŽC”Łw-HŽůŒ{Ęž.^üLů§    0xP)r‡>xŐŔ9yČhĺHв%řqĚKç‹-’ä…g„čGGĄá@XVÖ}śEiœ‘ž˘âb”Mqmłcű^,X8Ąě3“MÔ1ŇŇü˜4q F*BČđŠřÓ|ĆńŇz\îa 1~Ăącf´d—ůťIßLŃ'ö ’n/Uˆíľĺć>™í',˛ yş8iLAPÄefÎIя)Rbq…„â—CŠ_,˜™&ĐÜYz\[8ĘišśpˆÄŁU+Qč˘wÖtdvvŕî˙w[ô .“ńéÔC;đ‹żü?|Št*~Ťg`]v&O‡´ětTWŹĂć7Eۄ™ČúŘgQ:˛“ɏĹgžf83 ÎeŘůBáÚŰ:đΛ+qĆ9 P6nDD˜m? áńç–ăá'ßBc];ŠGöÁŽŻF]Cžôůăż|“ÉŠ ŢY8j” [˘fńźŽŽj›c…‘›—!˛˙dçf ‘|c}Ť(ÖŃ@Aq.–ÎŸŠ•߃o̤.Á‰˘żĂJůŁ   ŠPürčCńK…ż&‘‚ !ŮČ[–‚"ZB‰ ‡ö|„úš*ű3Ë|eeĺڟiçżâźÁůJ1ÓĎ'żŇUôCqË?ýó?ášçžĂ7Ýd´/>cđjO†łÄçőEý5×äçăó_ř<Ţ|ó |ĺ+_×ëřźúN nřÂVQl0pĹů^—ż&33OôšDmuŘc}Ň\$ZCćýHVą­˘ľú@@L Cę>öšfgň×]ËdM+ˇ ›ĺt+Ïn-ُ䪣áKRHNG…ß0n0­ń…§vŃş:T‰ÖÖëŘąáőyi#[ˆ~R^ŻŁJ ‘›“‰ŹĚ Œ],„JńŔl–d €‰“ĄułGć#Ă*ëśôćâž0%“%Ö÷a—‰†7×+ą‚‚‚Â`@ń’áuaŘbrX“™H$Îą˙ÂąV™Z[ŁŽëö$šŸ­ýtë¸r1Éş—0ýŔ֞ˇ×ŘʑÝřŮŃmřJÓ1ŒĚÎC°%Œ›/Z†Ÿ~óv\2FCăÝßĆń kąnĹř´ŐT˘ŁŽ Gâ™ŢĂ%×]†˛Šeˆ¤*2Űśrí6|çA¨Ă‹’â4Öľ˘ŚŞ ~oFĆ_ţöŢxwƒMîhs,(ag4bFŸ+?ÄŁĎ­ŔúM{pp5Ş+ÄąÉSó ł‘ž‘.˛AÖÖ4cÉěŠĐwŽłxž)嫇#}Š    RPźdx@ÝG…”đGá¤^RŇH<‹Îö“§ŇdÚ$ cGyŹe;}ýßw !ŽăǏÇ#<ŒĎ|úÓH7œ6„š“×pčřÄd‹|ń\'ś‘Őřę×ţAdţai0'ŢZY‹üÁîAšĆqŁ=˜<>Ňżtleeĺuš'î%wTSS‡š–/}%ęQPPPa“ƒFO"#Ľ=ˆˆHŠ~ÂŚ€] …qé/ šœH Ź}Ć˙㎣WßŔćíťq´źűöFĄaŁźőŇĽhyáAăšéDKc#ÂÁ tŻmŐ h¤ÇhmŠ”ÍľŽšnpäaë=r¤‡GsKěŒáňs đÝýÁŕĘ­vK(¨ĎĘË×÷ükkđ›‡_Gsf.~ň§'°vű^TV6"™UzëÎČLCZŚz(„iăǁövƒˆZýĂż!DúLAAAA!Ľ 8Éđş— &”đGᤇ…tčţ„ŰmYKřÁây^Ť†ôŔNš+CŒŠ@”…23™ëu÷d8üĆčlŃؤĎ)Ë}ĽĽĽ#?ż‹—œâ*7EńĘGŰ÷‰RýîlčlCh߇Ž| ÁWAŕšż!řüß|ă1„ןýĐnčÁÁă`ܙw’-§0˝0ŰÎňcާ°päD>;ďŤ1O!4k^SÜ ƒĹI†Ô˝8˜™aĆâ3–€Gc"3{ě >ѓn˙íšEŽśYí˜~tVŮ—›¤Od[´ţM1–|˛őĆ߇ßÝó ž{čiLŮ´çd6ʲ˜łđTăř~¤BÎČą8\݆š§N5ŕą?şăŕÓĘJQT‹şĆz!„ˇ×’ß1Ïqć†Ú6<ôě6—ăßěź|ĂyÄß}—\qţçîcҔIxćľU‚Sˇˇ,ᏎŚĆ°,KžÖ7ˇÁčDpĹóЍżÎŒIvż)((((¤'>P÷RAÁ„ 'œN΋rĆŔ žô„űmß°Úő9;ťŔőyńS5 $jëř§ît-7ŽżýÝ˙Ą°°c°ŤYÂŻ٢Ż%’YuŒŠqýŒĚ1ţǒŃ>F=ێ(?ýů¸ő“ŸÂŃŁGís~ý?>ÂgŁ¸ĐÄ’y^<úB$Z;şĎˇ­[eĎKߚ Št v ŻK:œó ý‹Tް Aöý÷WaŊ÷ąsç.TUUď‰ rssD–ťšsgă’K.ďV…xOYNTĄX|äYŚřGÖTĐŹl>fVASLç٤š™nfŤ™7:Y~/z.MQwvN6ŚĎ˜Œukˇăřńz{Ýöí{qćٍČĘÎśJTőé­Ínzá˝ŰşdŮÇo¨^aüÝł• ƒ6}>´S—ţ-#Śy=LóůœäuN+Ę17Ç Î,efOŠŚ4>^ëzěűkr˰p4™ËúاŠ›*((($„â—ĂŠ_dĆA+܄R2iÝa?ÓM ěä“&4ç>֞zÔŃě̇†­Ž˝YĆÄݚ‰–BgŸćŘ%”–ŽĐ”2FL„kjáßżž€)¤cLóďÓ7ЀŽP#˜ëqĚÁ LšoŚ—Mưzů ̟6#njFMůqŒ?míČL3ŽMr2ŤĄŮ™¸đěYxđéwáďđŁÍߎŹĚ,×uçĺäăÁÇŢŔgoťBF †l騏iÄýŰś|„>܃ŒtŸa? ťŞ)7š|{kŇŇý˜>}~ü/ŸÁďîy‡Ží‡˙ŚoA÷x#˝¨„? )Ĺ/‡żTPPÂ…a€d˘—ăm×%Ń!ĹńíuŐhjˆ8P8LOϲ?sl¸hś˙Ÿ=¨Š 8ÎëĹřCcź\(œš1řôđŻC$E@fVsšę{ ˛D@"zÇĂ2Ć>acŇ(ţŃPTT„_ţę—řÔ­Ÿ˛Ë˘ŐŐđŁ_îĹŻ~8‰%s˝˘oĽ'##[ô}Ř*WŃX_‹†Úä\Ć @fţi76őűyŒč‹h$ăhQÎ…ä!ßІuëÖăŁGËťŹŤŤŤÓśmâá‡Åž/}éóČĎĎÇ@ďĽK/˝Ęľě?˙óGX˛d1R ź§jŕœ 4;“fŞyL'Š‘˜Xu¤XRƌú5K$˜;†qĆř"ô2ëOfFŚÁ ‹°tél<÷ÜJ›˙67ˇĄU”6č;‚;7!đÁ›ĆÜ}-s‡ ôíë ďůž3.1ź7“1P f6Ëłńł'šäśŁ˛3ŸáGSȌÖfиfGGJzi€ÄŃ͝e‰śc ĹúŠ_&Ĺ/Orˆ’^ffЉƇh yt×Nć;OáűłľÜgp/yľźŃ˜ř”{űčiičźësđ~őŤH›<Ůŕ[^Q+´ó#tţâżá}ôqÀׁ ĆĆăíۍ˝č´H'Ő2l€§îţ÷g8đēhżůĐŚÍÄiËNĂŽ{p̘&̘ˆ´ĚLł<™uV_šˇ\ť ĎžśVd÷iiiEkk›ÉuŘ6Ӛcy[ň˛3ík*Y‚ěŒt44ľaĺ;ˆeŮĆńłłÓ ۤ_ěßŢމƆvŃ#uĆąëVR€_}ďóřâżŢš?€6ëôH)ݏ‚‚‚BJAńËä řĽ‚ÂЂ*őĽpRC ZťyÇ9°×ő9==ÓőybŠ99[öęhEîÂý˛żóÎĎ`ÎÜ9Śč‡´ČźyD #űĎë3K})ňx­u–XČľżuźiÓŚâ‹_ü‚ëÜ{äëĐkfŸŽăţ™JKˌso"Ľ"ĐĐÔ]÷ZAAAAa`‘Šĺyä1|ç;ߋ9hŽőoźńžň•ŻăȑŁPHÍ{šŠ°%Ț,óĽYY€î™xQşt{g!Z\ę.ó „’Ş @žć5ř]n^ŚMŸŒŇqĹöş€qŒÜÜLô :kŢ@`իɋ~œčlCřÝç ´ QŢÖď‡ßď7Y”峏2^Ěú#ćÍŹ>a]ˇË¸™âŽHŹ|¤˜‚‚‚‚Â@BńËáĹ/űš=§w-)wŠd˙¨žá=›ޡzS}¤ěWÔ~& 2÷ GľƒL‘âš<˜‘Îż˙żšiÓgŔ̐ \ôœmÖ¤˙í„W˝Ž›o2҅ŕ'ǘ2ěŤ1Ż-Ø;eËĚűŃÂó­˙‡†—_Á{ďŽGZ^žámAX–ś•m4v:uî)řň§ŻBg°Sđˇ°qt 657ŁžĄYY^üŒÜŹ ű\ܡ 0×^~†Ů—0uÍŧaüřbŮĂčěˆpâu[vă_Ţó2Œś\vńR„vŹąd_)((((¤ż~PüRAA Nb˜ežĚĚ1-Ą„Ű=°Çő9--Ëőyâ8ł$Ŕ@Nżż÷0:‘áôȑ%¸ýŽŰ]퐌ŽB wć „čG ~4k{—Ç:˙ͷ܂qăĆ٧ uüéĂ~ݓƹŚ˘EWî{˙ČátK§9§đG ˛†6řŢąă#lٲU‰ůR|݆Ăa¤^xá%üĺ/ůČĚĚĨQ#Ĺ{1ǏWŕ_˙ő{hmmĹÉŢÓP(…ÄĐ% E’O閰ößH† ËĽ ĘNI45ľŕý•›q`rrťLù?^¸fi­ôô4dggŁ/lXŕŽučxћޅžw&…Őz´Ď¨Ě4ÓqťîSX7Ë2˜>$ÍvüŘ÷LÜëŽńô Ă uuuXż~ƒń^8…Á‡â—ĂŠ_ö?Ź’&w‰79Ä>ĐŰÖW!řŕ"ü믠čš˙Aîă˙‰Ŕ/ž€ŕłżƒŢŇčŘ×1 QuŢ(îEˇ[ƒ1uŠńŸţ 7ß,Ä>˛‡Ň5“+§Í›ěޝ7ÝÝŕŻŃß.ÍÚŮÓڎ’wV`ŃŻďƍ[×b˙ËoâřrěÜř*T ľĽUˆç™‘‡Y//9kN™6i~ ٙ>LW€k/; ?˙îxćţŕŞËĎ6Űew D[ż|Çřú]Wăň áűßş _řÔ%Żö[ühk @ňyŸß żĎŽŤ7ĺÇdÉ))5ż‚‚‚‚ @ńËá Ĺ/TŠ/…aŠd‘R_šťu˘…?Ńâ“hqJ#l yć˜kٍ7Ýd˝čB™(h]ČrvÉ çś |~żˇŢz+~ţóŸŰËzúž˙Ó GÓŔ9;&Žë&ăĎÁ˝Q{XôÖ˙AłmɊŁ,ĂŚM›ńöŰďĆ]/t%%%8唙˜4ibÜmýë˙mž3gśHí¨0đŘž}^{í 1ë­7‹ű¤08X˝z ÖŹY+ćůpůĺ—B!ľj‘|N~÷ť?vY~ŃEŕ&Ă \V6I|ćŔN]°÷îÝgoW^~ ÷Ţű€H›{˛ƒ÷–Â7œœ“ü!l }l>Ą™YcDš/–‘Ň`‹H"ǀđŇ䎄’Ś$6ÉţÎÍËBŚ%ŕIÉďüiiČÉÍĹŘŇ1¸äŇ%xőĺP\”×§{:° ÁÍďŁß°ţ- `P4 Š‚‘Y~KĚcBF‰‹(m[čĂĎŚPŢűŔz 0uěž}öyěß@ĚáśŰn…BňčččŔĂ?ŠÎ΀řŽ‘űc(âÉ'ŸĆáĂGPXX€;î¸ CŠ__(~Ůż°éHŘńŮ^QŚkš#›!×7T#ôˇòi#đřňł3pčpţůg÷ ¤iśţíťđÝţďĐr‹Ln )wąN§ťÎ`ƒV¸My˜˙_‰ŘٍŇmvŘomüóŔ÷ŕĂlٌđĎďÓĎŔcźƒ#–žҌçgé‡[ŢłuK–ŕřůçĄÜ°Ÿi>Ż1ůĚĆśŔĘşFTלŕw?ú2&N.5¸rŚÁ™ýČÎˁO<‘f‘dœşąkˇ^ťĚ –„EřĚm;;ƒ“Ĺ 4œŒ*)Bmc3^~g<˙§ˆÂ –Č CünŢwßhjj÷îć›o0ÎÉq÷â™gžó#F㓟ź9éź…7ß\Ž­[{|°xńBœ}öYčŹYóV­Z#ćďşëÎ>h(¸A{-íśiĆwüË_ţ"âAńËá Ĺ/Nv(áÂI Šţ 艭őĺ÷š>G‹O&÷ ¨Ĺíć=Ţnć ŕęŤe]M˝ë¤;&Ȉd3mo8rDč„íˆe×>şó¸—Nößüć7hkkg.7Ú´ńĂ&,ž7p5D'v“ń'úޘˆ˜:Ăć}JJߎŽN1ŐÖÖaçÎ]˜8q.ťěĄěVP8™ŃĐĐhĎ×××C!őjżľ4VF×ěţüç?‹oźŢľŒ†HÖŚž={žő­˙‡Ýť#‚ß矟ţôm1ƒ9ŕ^šr•aH| }´Óx.„P–Yůćϟ‡ŤŽşÂœK0kŐWżúMÄÓůJ¤Z˝l1Ó=l1ŕV˛”—ĽŹŚFŠ€d9°°HěVVér–dee`Á™vö™d łţbúŒŠ(..D~AąŸqćhÝŽŁž7#Ď=tbhLs§Ycţ°]Î@”4ŕ_gş^č]5@2 GŇgœˇŢzË>őŰď×bńź Əu}žt×çĆzޛXą?沰5(MľÔ Îďâ|i7 ýěŢ˝Űp6´ ‡ ŁľIôԀYádĆg,EKK‹PîŸwŢšPH=¤ŇŕŠĎĘ;ďźçZĆH˝čAłá ŸĂĎ~ö߮匢á Ú –~ůń†Í›ˇ¸–ÓŘÉßmN4”^{íŐřâŽw(A œ“@$Xˆ{ŐŤiş%ŃZjI°Â–3Ć\<š },ŰjfýÉboŠ€2ŒçÚçőő*Ła`Çč͍Im+HIŚć8pt0v2z ž.2řm0$„M}áHŁłÓžŁÓ*l ¸4ɧâÔŻÍEügş1‹‡Ś( 'ÎČHżouuő"V ’GAAÎ:ë a?~\ÂLœ Ĺ/żTH˛DЃ–ş•>Ńۗď˙f\sŮY8\^‹S&MËÉ­˛ Y^Q‡Ď^ś˙ô/¨Úú>Ěf#śćΝŃŁS#Ă犧ž‚1cFÇ\÷îťď÷ŻYY™qłú0s‘‚‚Âđ‚â—Š_*( W(áÂI…č`ś¤›Ôom-ͮϏ{űÜ:Nřł~‹Űá˛xń"ńˇK}m™Ĺ'ěAŘc {4ÖľĽ&Ě^؊4Î cŔ ‡lPX €Â‘l@Đu—hÁÂ.áφ­ zíš9vę´ľ6Ű×1Ĺ?šš´đg0Jz%ƒńăÇwQSKĐÉđâ‹/ăХâV+ÉقóĄ p˛"??ŸřÄuPH]¤ŇŕŠ†Éč2ÉZƒĹł&cÚřŃXľá#ŰVć18Sqa.BA4Ö6ăĆËÎĆ˙˝ń"´YgB?~úę—ŕŮł#r=˜5Ś(ڏ¨Ő1ŻEÍËL™î˘_z×­Ĺ"Ňć/|­[ĐńóŸĂĎ`ѧ{úś\hÁĹÇwŁ~ŤGŚĂ§ÍĂóo}€O^z&vmكés§!3+3Âá&ĹpHG§?••ľh.ÉD^I1źšůhŞ8ŽĆ†d¤§ ńš8ŸąŸ?# aĂĹÂÇY[p´˘ąVĽš]CŠŃĤpţůç6ÉC"KŻOŸ>Íŕ”š1ˇ­ŠŠÁúőĹ|NNśaÓ<ŠŠ~â V­Z-„?éééB ¤  pr@ńK7żTP>PÂ…“ö Kë›đ'‹Ú¨!Ůłß}ţiÓŚ‰żŽŹ>B¨CńE?Śŕ‡Ůn4ăEg'őŮŹ’0÷bc›pșý'l‹"óć4cĆ W[vďkĐkϊĘLí¤°ďM<ńÇ'–Ľš#&pĐyůĺ—âŻýťAţBřđĂíJřŁ  ŇHĽßÚýű¸>§ĽĽ‰AqŕWżşŰ5hftŕ-ˇÜ„9sf‹ÔźLŸ+Ó˘L~ć™g`ٲłEśˆ_ýęÄ@ô˙ń_\Çýä'oÂi§-óŠ–Ub(žG‘’.§čÇĘ$"‹ĽűĹéÜА“ÖˇĄY]}vě8 îUVf:f̈ě3ÓOoDĚôŁ×V%ŢFˆn çˆa¤j5źŚtŸYÁ“XüSq€!fLçˆŢ€%šŕô§čńł ątĐx}ńä÷z ‡Â–°Ç¸W>+SŚÇ3hVˇąÇëąË@Řn´•KĐůÂčlbʔɆĆţĐąÁßGFp+((( (~ŠřĽBňĐĂf0 $I.+™Ö5׎íÇÜ%eČ4žĺ†ŚV›ĎpËźœL ~Gn7÷”)Čzr9:žý?řvŻĹ͗ŸžőM”äg#d<ˇžĎݰ)ŮPHGŒ<@zÜ<‰Z¤˜saä9ńhđϛ˙"°YfzV€b…2űyńŽ(üĹ~ÜuĹĺřôć˜=}<ćM™ˆ›÷`Ti ŠGš%q˝Ůyˇˇ@ËĚEĺŢŘżç0˛‹ŠÄÔŃÔ/Ĺô#Ź?ŒúÚf—„ŞŠ­ Ímh qĚw™^=Ň÷–Z~HŮć™ç­ˇŢF ™"Ţ|sštÉ2aü}TPPPHU(~ŠřĽ‚Âp…ţ( {$úĄ—ë´nJˆŹ2D ˛36ăĎąJwËčŃf”‚,×ĺńXY~8ŻQŔىr^fŚ+:™ăKOŘ*}e9œÄţş(bf krf˘ă#Ź[óĆöŁGŠŃśťvło#ˆî{ ěqt,ńćJpŠć¨q‚i'L˜€}űöŁşşF­Ţ8ďH á}üřq47ˇĂ@cǎżysPšëQŰłźqÚi‹áK„•+ßÇÚľëĹ<é,…ĐđşX7ÖL!\%JœĽ§§!//'N0Ú8×]Ţ΁'Ÿ|‡çäš„Rž™’›ÄqX҂„9"Z__7‰c666Šţf˙PtEÇYĄĂ0N1׎ݢÍ$یœâšHžő!Ó'ŻZľFĚă_Emm->ř`ŃćĂhiiQJ—\r‘kŰśĹůxŒ$`™3g`áÂb›ťďţřËlSń"Ű{ú,Eˇ™ßľŻýÄőoٲU”!a?syaa!N9e&ćΝó;Y^~ =ö„˜§(nÌéö:öÁ}÷=ˆd‘ŸŸ‡Ď|掘ëZ[[ąiÓfq­ě+ţN2bmܸqĆ˝™e˙+tE*•UäoŚEE…˘~u4řýă÷"řÂß"âČ‘ŁŽź<ć/~ń_˜6mŞ˝ŒßŠQŁFâOúŤ˝ě‘GgţŽ3ínŹ~÷ŁSňŚ Rľdf*A×5+Č:lń‘pTjMŹ‹$2yšĚ°˜ĺď[9Ď΀ůLń÷łľ­ƒgB†ń|˛T•&9a ĄĘŁÝnCAM{ €Ux§<€€qÝ ‹tœVZˆÜŒ´ÄâŠ~Ť/gď~SÇĺť:—ă*ŸĎk „âl“f |„ŕÝëČŕd ˇěČxMs”ű [â kű20Él?̖IţĂß*ůZ[ŰÄşž œďäüc‚ˇglÝş 55ľĆů|Ćy'áœsβ934‘cI.Âű&9Z<ŽĺäHŢ÷ÔSψů+ŻźÜő›,Áß]śq÷î=‚7˜ŃÝi‚ťS?ĹzŽ$×,,,Ŕw܆x8vě¸ŕ6äHŒŹ”܆ýŸˆËv‡hŢÇ~\ż~ƒŕP<Są“Ó1 ŸďôL5Ď~bĘwöŁüůě°ěű•爏<ôĐ#¨ŹŹ˙r>‘łďGޏŇŇą¸á†OtنŒm`_r\ŔçiĈâšĺůc˝Ď‰Ţpd…Ô‡â—&żTH2ÓL$ŻsĽ&kYYwŒżÍ_‹œĚ4d܍źŃÚXdGÝxśŚMÚŞířÉ>‹Bc|\SQĘň:řŰZ1ËÁ¤.’+Ńük—ń˛iŽ=œˆl¤ť74g)2ě3ţBçś­~ű_öĘkˆ~#BĆ{dĚSĎâżÎ]†züuŕ捰`ę8ÝsÇ÷—ŁtöLކ?'U7˘`Üxźśr3N›5ŢôŠđů˝hŤŤÁą}Ǒ=˘Äŕňac<^ƒ4ăuŘĐމzĂö¤4žĎ9ąůśM*‡hŸĄ ˆÜďgÚí˘y$ßŮ\Op]<^Çď<ËĐ0°‘ďhž›É1ȗřŽćo^<›grÂŢ"YNřţűŤ˙ ȋřüÝŚ “}ĚwGox]uuľaĂÚbźKŽܰŮŕ˙š8†ä ń˛4%‹T˛Ůň}Ɍř•••Â&ÉýiŤŁíš\QA!Y(~iBńK…á%üQP ş}´ľś¸>G‹O23#Cځ@K‹űĺę$ěRücfůŃҌż!ş’˘2ýXŮ~œŽ™-H—‚‘ů'’ý'le˙‘˘qî<÷`Ąš98 ×ž•ĺ>váC”ńËDŒڍ+<¤•ž,Í AC<Vɂ†ő—^zEî aŤ­­Üçž{ŽKIÎÁVvv–„spםđ‡T"Ďx>z*úáő…^2@ ŽĺHr˘*N”kŽšcǎIx,Ÿ{îy‘!I‚ŽŠiéŇ%8ăŒÓăîOc#˜œ‘Ç"QćtĆKű<`&hyá…Eۜ¨ŤŤI<%—^zq\džóXO?ýŒˆžŠTž~úYap‚Ž9*űŮ7ń˘ś$zű,ĹӆŇYČAž,iljƄ뮻śKiżÁď3ď N°N}CĂvqóçĎ5ŽsYĘ L´ˇˇť>Çűîňűöď|‰pŐUW"ńć›ošÖ}ö™1‰|†ďż˙!ăwŹÍ>ż‹EEEPŚĐ,7‡ĺTŃĂfĆ)1łÂhvüľÉMd™(füńŁ/((ČCɈÔÔ6blédgĽ;˘‘ľë­M‰×[%śŒwő“‡t´éYbů+•a”dľ`ćH/2|Ýüގľ˘ˇ 'd—ńú<žn~Ł‚Žc!Ýxçі&ďSÄaf:ÇŹýĹłdƒfeüI5šÉgKrł ĆŰ"Œ)SŚaßűšfeeĄ?Ŕó‘#PP#A~ …ŸüäÍâ7™N'ß#Ǣ#€Ó’%‹´$…FäB|Ÿ;AŽIţȉœ÷škŽęq„:Ż•ü‘!Ăp˘ŕé /‚란|ěńǟt‡Ůí핂3ó<ätń„Ř݁b"žç(öq‚ŽNäI|†řŽs:xfÍ:Ő¸ÎwD_đ9ŕçxŕzi<ŽŢŽË_{í Ń÷uwâčŃr1ŃYÄ÷ň¨¨€”h$Ñz Ĺ/R0‡#˘ÁfÂhk^:ç÷ěë Ď_şEgLr éđźjFŮ8 [ˆČ‚h,Ÿ>qŹ(kE2~KGçáÜÓg#ĐŠŁź˘Aˆ„ĘÝX4Śhy‚Étň‹ŽI~ÉDäÜK‹™˝ÇyLŰkœ?mî<čĆo}Űç>'„@aűź‘miEĚ4:ĺ´ŐŤđƒ/żzů=ź_’‡›Ż8#‹ Đ=¨=^‰ÂqéhiëŔó÷=ƒk>q| •5V!łd4ë3DöČÊ dü‰×^Ó܆Í[öĄ°(GU3Î7ĹT€Sďůşvɋ.ş<𰰕˝ýö;.~Éߣ+VŠů4ƒœłeÉFńYg$qŢyçB!uý[ÁŹýf`sbůňwân+Íü=RçĄ '÷Š/&6Ĺ<Ś8Dˇč–ƒčŇ‹ŹX“őŸ“ÖóŒ~N¤§ů0}ć$;ƒĆď–×QÝ+:ÔŃ˝(‡˛Ą#ˆ6="”ÃM˜VlđGŻo"2×Ţ{áᥰČRăôU|“î5ËKČ{(ËܚY‚x?#ĺ˝ŕ(Ůf;ŐRéRźM8 {Œ&Ďŕ{ŽÂŠţ*!ËcŇŘNGŽĹw<+iÜç{Úäœ/+›„ɓˡá{—ü‹íaćȉ' žŇßŕńŸyć9[ôCŽÇž`„9Ĺ,äxŒ`—‘_|aO_|Ů~7PĎČxňQf[ä1)(˘ř„ü‡ďڞ˛Ič-čxĄ‡Ń•źf$$×ăýÜźyŤ¸ ƒnżýS"#cOŔwÔ+ŻźfgCĺýd[éINĘsČ,¤çĐ@,Ámß}w…žhLŔőůj´áůůç_í JJFˆă0Óy>ĎMŃšE\7ß|ŁXÝqd…Ţ@ńK…”‡ńÇą`óŰ(\÷´Č¤R‘ ýôk!sji騊7ě993&¸čcéhŽ÷mľrŒ÷feU-Ç$JŠďˇÎŚ6PbIWž7˛‡ Kş”ŕŘ|PƒKYšőŸ.Ôĺ"#íԌďeúoîF‹a÷ÉÜť şZ˜€×°‰œúÁj|őćO`˞ƒřëŁ/#3;gˇľ•đoڃŇ1Ł0kĘhdkN+C ž•ű›S żał ´ˇĄĽšÉxßgăŔĄJĂvęEŔ˜*ŞkĄ]˝ÄĄďŇÜĄšđG€ż1‹/YlČ5hŻa 0‚ÁdŇŢDwŹĚ/.3ƒ„´ŇÖFťš y ßď䍴×<üđُíś[{)q(ź“yôčQÂţDgżäu´‹uÇëÖ­[+Ţó Ţ$ĽHˆÜˇźź\ptrPň6 ľzšń3•lśNŃOff†}­<Ż•śM_˝†"żTPPčO(ᏂLń‹ć‰ďlÉĚĘFSC˝ý™"Ż7ňőimӐŸ;p˙œl/jë#žüFNz]ÍúgÇöƒJ/üÝýĄ)őe95â!úaĆk …ܢŸŚ¨ 99> dßÖV÷Ș}ďDf–řÄ˙p>dĹŐáĚLŐJp`Óá2’ŚŹl’P|;Sć2í#íTtóůaˆSŹAC;…? ôń„?2˘œ}ÜÓ 1ä’Ůt–.=ÍľžŽ!ŠHč(‘QœÄBUUľh˙ő×Üu$ŠĹĹĹÂA@Đš=ˆä”QKL?ëŒ"ŚŘ‡Ylx :śz 3ŠůuńbBá‹tÂńze*e–rXźxQÜcҀÂHzžc‚i„Ą˛?úXźŽ×_3f”şD_ŸĽh050ŰěĚ^Ĺyîšç>1ŕç}âóěw—ŠE‹Ć]Ď‹ýđţG?kÎ{Cƒ YÎ4Áźnř PźEńŸwŚPUHMť¨ĚJĹwšőÎç=:/‘hđěDtŚ …á)rF5›Âöoł˙Ŕćip8d"ľ<ýŔU˜ř&-Íĺé%Ň2şÝ„mÎO÷!Së°Ĺ?˜ăĽ ť˝Ś$Î1X0łJjŽČt] ¸¤çIfúńČűŽŮĽżR RXA!łÓŔĎ÷Ź,÷Ĺ÷~ (V&§)+›d/#żxçwąqăfƒËlË(ĐužŤ)^aűýMĐ91ÂrĽ]Δś›Ü‹ýś˙~Á­’ĺÜěGiPĺq˘9’YÂtśpšßźńƛ¸óÎO÷Şt/A'ЅžďâĂtą )%ń<|/]}ő•č U.2ĹĎ yP4_ڃNrFŠËęęęlţÉţâ˝¤ŁŠb':Šb9¨(:—QíÓ§OweśäqĽč'VvE:š8xůĺWˇĽĐˆYâĄ;ŽŹ Đ(~ŠÚ°DËa§}Ěř]ßţ>.Yś…ů9řËŻF‡‹Ą§eš†łœÔ4´˘ąšÓ§v@U5Íčč !ĂŕxŅYđűL)MZš™éićĄ ž×ŇҁŠŞ&¤ΚĆ2Zv˛í–8˙jĘ+ůStŰľÓ˘tAN5RÔńĺ–^ăˇ>íŤ_…÷ßH¨)*Üśţ+ŻÁźe˜ęÓ.jpŔůfŁÓ°ľN0Ţ?őűvĂÓنÎ`*ĘëŃŮ4ŒM(™R†ăý÷úťkqö’Spěxƒ(!~äx%Eăŕ)geW4ې[ÂÚP(Đa Ú† ›ĄČYڒhbɧX ]JŠ~Î<ótœvÚ×z‹<đÍ7—‹w<ůĆÇ>v †;h_\¸p>–-;Çľœ™ś@fň‰Ç똍C–>cŚrq'%/Ł]—”Ü˙­ˇ–‹ěî=y_ĽŠÍ–ÜRŠ~FŒ(Ç  P‚•çĺľ:ł')( (~Š  ĐŸü )ې¨'Žű—˜ˆŸ˜Őz´›Ft;E˜2ß YîËÎÖ’SAăoƒ &Çvöžv֟+˛ýxE…ëÜcDŰîÚ[ÜbăŽÂŸl罉 ím#ƒ}o‡ć›=98fdrO@ÇÉżxޏâ2Q2*–ƒ2é`Јşˇ4’Ë4­ťwďŽYϕĎ×°ô´ űŹÍ}ůĺ—v@JĐČď÷űŹ6V&<ËLĹşN S¤ĺđáĂ]ÖÓIáŒPŠU:€höc_ĘOŃ1F# qúé§uýü]şä’‹„‰`&DĽęX†-žCƒNYvƒ}O@tÁç‰őxčëł ś#VÉ:f푆" hČčĐÉôĘ+݊yŠzřźE Šxo¤Sđ˘‹.ŒYœRÎg€ÎL7NDyśx(++s}ŚQ’˘´hĐüĆ/ť&–œq‚úlĂPE*ÝŰT…nq1!šC¤K‘˛ľŢe7wŚV9-+qśMˆ•<ČĎĚŔǍ×YŠż #˝m¸xD&e#-aCf˙”šę´B"r]@dkňDJEŘN•Mćýeq°°ŒfO đwfďŢ˝bžŹl’Ë ł¸4RˆŰ ąçІ“Ű‘×ÄčŇa@žŮŚj "Ľ ȇbY?őŠ[đůĎŽGB{FZč“_ÄâHä•,[@.JGůsoAŽĎĄBĄşźżt$‘öű°č8ŠWş—í—ˆćĺÎ,?20 R”˝=!ű’QďńJŞr<$ł6Rp埡ŃHđ†żL Ĺ/\pd,š`ZŐaŒS‚ŮÓ'ĄXk5~¤WŰ*őÂŃ¨ŹŠG ¨ŁąŠ‡Ž5˘ÁřŰŢD}c;—7śBAvćó#?'ƒ3ŐŐˇâxU3ZÚXľő#t†M6$‹•ÄĐęŔRŒĘ•HšŹ9ësYŰÚÉstˇĽPwf‚#ŁĎ˛sDĐc"¤55ÁßÖfžcŒ6łÜ™×°uQÍů€ajmé@ue*öBfńH+ d ´sŔćí‡đěkë‘îO6ŒÝ{÷/ľłÍ–ĐÉRküKĹ>ěž°>´SţŔt&łl)A4E'œ¤h˜ĺŔbl$/ ‹ýHßČwź¸UƒárŕsÎ9;ć:ňf uˆXźŽö(Úiźx啗ÇäŻÔČĚL´ąE—RíŠbłeöm‚ßŰË.ťÄ%ú‘  O^Ť‚B2Pü21żTPşPNjXŻ1ƒOü´ßnqIWńIK›Ž¸á$ý€i“s°}W$ÓÎG}dë™QmŠˆ—L‘€×ĘćcfűńhVÔšĺ\’a'B4$łţčVÖ‘ĺÇE—řÚľËmĝ>%g@Ż˝ľÝ=0ŽŸDßGRaŤ†6ˇ÷ Ќ?ŒNĽ˛›Ń 2r&==-a֗x`mw‚!9čŠNéHĐ ĎŹ3˘BtZX>e)˛ž–ů’`ú^:ŒâĎ(ŰČô´ąÚ(ÁÁ.Łăƒ@fjĄŔ'$žó‘ÁŚĚâĂňNN‡F4č< Ă…)ˆ{Fż$ ń"Ąäz3Rţ=18gtw,‘Ď1CHŃ‘(ű‚FŚhއž>KNÄsşNÁ ˔ĐPŃđ^łď;.żü2aœ‹†ź7,cVV6)îń(pbö+ޓƒBÁTú­eäżKÎ÷#Ŕşű-ĺŕ6ÚaÉň3EEn'âwŢ!2 w ĺĚyƒłŒČîŁYq˚”i‘čcŤT”Č&ƒˆ8¨š3„T‚§°űŒfĚč“aźfĘÇä ŕ”†á7Ëx'S”đąŃŒwFţ¤ :…X<"Ř҄Ę⠚CüŁkŸ”C¸•*ŕť?4ŸĽXüŠĆyFiŒâ=÷Üôń˛BŇ(O~Fޘ(Cß­"uÇz gć™mŰśăüóKşüŚŃYŇÁAá”t“?R ĚŽÔ–b•*u‚|\Šk(j&Ÿě ČĂF$řZ2“—Dôý2ƒrDĐŰë}+߯|—:łCRô%ű’mNôÎá5ňŮ%˜yˆc!GVZPürřBńË€°ď!BMÚZ u´";3~ƒ¸\zÖ|<ôţ3ĐO9ş/áâRTîy•ľ(.ČA0`=ŰÖţ›;P›ô´tăđ>8Z/žőMmx热ČÖÚEiWR'2Šč–węxěl>˛™ŽÎľšs kI,‘fŻ“tLËÍ5íŸÖ÷ÓůtšJYYyěýŒ˙BÁ€ŕąm đgfĄ˝Š †="§ÄäI>ăýwčX%śě݆ɓ&ĄšžYđখT4}|ĘYľx—ÖZŸÂŔP J” =ŒďaÚ*żi,ĎvC[‹ f[¸pAÂăó7VňŠT(âΠ.Ńď 9‘̆čäuěĎ={L{3(&*‹Ćńłýp|@ŢÔSŰ퉶ٚĺŔˆy>#UŽs˜ÍmQPčŠ__(~Šp˛C Nj˜/Ôtc€—¨Ô@wŸć–D‰dűŽ…s đě+ÇěĎÖoÄÇ>öą.ŰIr [>ź>1…ëôXĺ%˘…?°ÄABôŁ[%żBvéŻhʎ"1mČkojNśÔW4Ěk ŠNÎHYĽďłĎ>ßí6]qĹĺ=ÎŚ >ŒŠĽ¨ˆPX2ŽŠVĽˆ%ÖýŚĐCš8řŽţČyFFşˆ2î+8 c–ţŮ>Y@fă‰ŐF‰Xb'‰-ÁHk§đ‡Ľ Bť+˝@çVo…?2’‘̉œC„SčĂH§xŸDǑ)=ůüÇsĘI°wôś,ÍÉYĘޏşŤŠ).13ƐŻx„ %bŸ˘‘đä Ü˙7Qdý)ţI÷ů,ÁŒ&!ÝÚZFżÇţ4¤ ˜ńG‹PdăZ´ˆĂĘź­&ŹűŤi‘ůî/vđ “Č™M'ŕ0•8Ë_ŇHČ(ăžňädރ‰~Cäůťă˝ű‡˜ŽœĺILŽ;~üxÁÉz“BpŚNçąlo"8Ĺ4’ßöä8|NČůČőŘŇńBÄş_t&­^ýŘÂ¨’’ˆ°ŒYkĽ¸'ÚéD)ŃsrúD×Ř×V:PürřBńËţ‡ý8ĘMĄ˝Mr˜lŽœôœÓćŕýMťąĺSĐĎšú˜É¨olAu}ťąn–ň‚ŰĘ×ĐŘnŘć:‘-Jʒ8Rƒˇ×nˆ˘<|÷Αö/›Í,70Ĺ?vƒbľŇ$\Z—39vҵؖFÍśhvö„ ť‰ć ŠŒqô€ńĚ­Řq9c:0ڤ9ŮĆŘŢçAkC“°śÔ7"#; şńÎ#ďhmAŔřžžůţfźžb3N™<ĘĆ áOVN6\*œŘšœ›ďVǝpřŚq¤<ŒůłÎŕţY%řD^ĚŤV­2Hu{ĚԖ$ŮRřc–Ł(l ~5‡Ú5-ăÜNˇ2ţČcDƒd{őę5ŽeçU‚ţ.w‚AwšÁ܂DéŰśĂ{›şÂŸD`ö™)Sڈú×ůůůč x/Ię)sěŘ1;w­­­"Z„`TEoIÉ´­Œ^ĄA@ďeú㞨šĽÁ‰"işSɈ¸œméiІčóQ˜ŐÝýa ŹDčëłt"@aëÄěÄK)MČž˘Hčž{îG˛ŕóŤ„?¤ÚŕęŽ;nĂűďŻv•Uůío˙ ˛|ÝtÓ ŽlŽ=ňČcxíľ7\Ç8˙üs]ĽB˜Ţüᇳ?đÁ:ńĹ‹učżţőoNŘ1ÂéLqäUW]a÷QŹß,ů[”ŠPçîAĄˆIąĚL´í‹r^"żżĹĂtSdf”#uąŽ%Ĺ2ţŢɧ"źůý„Űhš7i2aNr˜0Š„öůŻW\€­“ˇ2ýhžˆHÜ;)ćŇ­ë֓ťhS04pźYß fŮ!ˇJ: ČďúCźĘŕď ŚĚH kÖŹÇŁF}ŔŹ=ąĆWń šÁL7ƒ§@:x­t1['3'ötć0­<ŁË›zź˙Чž"„?y˜Sř#Řçљ‹œ}™L`„„tz) o(~â— ÝB֑ľý œš:ZŰ;E‰,żWçŽY†Ÿ˙ýyt”N‡^6mţ´ŽőÎŞvă=“†œě d¤ů ţcvt„0ž÷Öś:ŒíhŘşkża/žűĹk‘CÍłvvI1SđɰăNŸhÂ~~cđ*ÉÁěKD—üA¨[ţŠŁÄ5ŃÖĽŞě|¨ë@ ö0Öö"3;ݰ…¤!;Óo\łYŮ;q<ön߉ęúFÔ7wßŐ"TŻĆŒI“Ä65•5đů}đř˝Řwř(´›>M#`rbxč~„ýƒĽß{oĽřLŃO˘ďrOěRmn|ż÷Ö6”Н†6Y™=ÓÉ뜼iýúbJ˝ÉŽy˘mśÎwX2öŘîúTAABńËżTP^PÂ…a-*ęÚ ó%°Ä!ńQ:q Öâuűsg§űĹvŕHh@#}/(¸ą™8Rnž—DýľW_Ă5×^s{^Ż,Óef52Mą^Ňn‘P8!ćég\ƒ„ńĽYX8ˇp@ŻýŕQˇŹŁĂÝ÷ă&MM¸?Â&YJôÂ?‘é˙mÍH Š0ŠŠŠÄ ݎ`”îSO=㪹LGÓ˘RHÄČçQŁF #|˘:Ď2/ŸŚč•éô%.Ÿ—Ţ–ůŞŹŹÄ3Ď<ç"‹ŹEËÁyyyv:jœ öB2ŘžDŁ÷d|ÜĎĽlk2¡DŰô׳4˜`Ÿ7ß|KĚó™şôҋnßKۅk@ڐzƒ+–•űĚgnǟ˙ü7×ňW^yML|6XbĆĚfĐő7fäČ|ń‹wš–™"˛ĹbŔLđ{öď|ŸřÄÇD~—ř=xüń'EvNü˝¤CůÚkŻśĂíY_ß`/c´ŰÂwí%—\ä°Ÿh¨sp”ƒŠ”ůŇ,Ńš–ń;Ť™" S3Â\9!Ö˂nü”T´ô őŚŚVTV׉ <%%ČĘL^Ô@řg/Eŕ#ÐÜŃ˝Q§GŻ­\ăŮ.;%ŠMőMŹ)2NŇ0î‘×âĆ03Ůž3ŤôĹ?šx]:ʁ‰˝|‰ô3¤°B‚żs݁˘Ţá.ü!ř[Ď´ć´ĐqqôčQńűËßp–ŕ´ví:‘e3QIҍd˘Rĺ6=ĺ’|Ţxă-×%gߑ둟“÷1í|<żÓ(ÍHkž ™QŠíă˘ŹlR§LoHЇPüRńK…Ŕ*őeĎňúŻimëDkG@\&Œ›/= ÷żü„oţžaX›†ę†zŒĘÉ5ž“ÚÚVGłlŤ.2Ůč6/jďčÄáăUřËĎż€‘ů9h<^ƒHGS`‰4K#…;ŽB¸rOąłé ŠcEÖ4śŠĂżýŠťyŹ5şÇ ËÓź˜}ŐÜDSc!ă{ Ő ˘ś5•uâúÓ´t´7ˇ#ß°Ńćg#ݰŃ­¨CŚńůŁ=űĐ9Öŕł#ËřĽMx^ť˙† œśĘd3ě%ËKNŚ-É𹍳_Ë~5mśúpú˘) (żTüRAa¸B NjČ´îžPGÂíJŁÄ%ŃⓇ6BŰc8„nšn<ţűˇ‡úC=ŒË Ăt"aˆÝ şKî<ńēŽeˇ\7N´m ą˙ťoŁEWĽÝ4+CPoSř4íZV6 •+ߡ…ÓŚMDĎu+!đńŔÔł……":šäĎ)ü!H,c7¸rÉgsɒE˘žu_KšőYY™‚43UmwpFÖô$é$ŃɜǹM2™ˆbA:UŘÇÝe`§xčŻgi°ŔÇ/źđ’ČJÄÁɕW^Ńm„<ĹvŒl§ďškŽ‚BďĐąâ@‘1ü~3&ÍÍ-bŠ…źź\üčGߏ9xýçţ–1 ţ;ý8Ÿ9FŃ8#iœŕó÷Ío~­ËrfĄrFč0‹Úo~ó[1OÇé™gžTA*ŢŰT„n˙ľ ´V(:LĚčfÍZ+Ý1s™ń[ľˇž÷ď—XčěbÇÎĆ_Sŕ^[ׄ9ł&ţŸAŇ36˙,tŽyýăzçcüńvkľî4KÁ@é™éBź4P¨lé‘éűPˆEuy—´H9 ÍĚňCA˝Ç#E]–›*E"¸Ł…?ɀhŹëî=™ęHf<Ă{XV6ÉćŢźîňňcÂŘIĂ,9/źđ">ýéۓŠ(vnĂwÉ`;yžD\™QŮ2+#ůmňÇmśE?ŒČ_śě!‹ÎjČŹR݁ţ02ŃŁ|Ÿńý&łóÄ pöĺ'?y“(I§  ĄřĽâ— ÉCˇ„?Ö'hţ !ta9ŻĆćdeř'=gń,´´đÔŁ?…gĘ”WDéˆbÚ;í–áh‚c‘˘ƒĺĺ¸ň˘EX8g˛ń­sŹtokľVÚX&Ä4ĽAş+ůXćL÷cĽhlŠŞŔŤw܎ӎIuâ…4Ď-ÄŠą“‘ŸŸ)2ľ´u˘Í¸Ţ€Á5uƒßy~ňœźšžIŘź'LOó#'+y9™âóńšFƒ&gđz°}÷>č×ţ‹Ľë×#Y6öd$Čw Úé-Ĺ >$î”NšâúÜŮév‹Œ?˛ŔM_üô¤ů#_Ů#GŽŕńǟ@˛}˘§d#÷Ý{ŸČ !‘žćmčë>x$qßč{4ÍÜ?Zřs2DĐ‘CŒ0Œ7W^yy\q’݁iű FCS ÂÁVee•XÖŰl?T…×֚F˘yóć‚o™LűFŤˇt#Khôĺ<ǏW1]"8kRËýz FgüŽóœ‰@ÇW<ôçł4ŕ@DF!œuÖ"Š;DîÍq!ÔЈ—ŠĽ?÷šĎŕ?ţăťâNK—.Á_ţň‡¸Y08˜ţíoÔďßčŃŁđ‹_ü|8áś=w%ǀ‰Ŕ´ďĚš,h¸•™~.şčBÁýc•2M†ëQ$Î̐ÄîÝŚ(\žÓčźaäi4œ}ŮgU8ů řeW(~Š&91ß9üë7~Ë3sqŹŞN”ęjď Ú^zÎ<ÜpÖ ŕĂwpěx%<,ďeŰăd+[cŽžš Wœ3ß°ç´ÜÉ#ŁóňčQ#° ÄjNţ$‰•柇čGˇŁ;6ďlmĂćżýO.= 9ožxń‘ćĹ1ăŔdvźŇNă­Ć´''‚Ć{(?7 Y™éY”‹ c‹1y| ĘĆó…?ŚŁKňŒĎ#ÄňqŁ‹P˜—%D?PÍ-Č2ŽąeÇN´—ßŐ1ÓM;_Ą$ޞÓ‘I Ëe'§AžăÉ3şł§Ńî,…ÂNn@ $'L˛ ݉K’Í~Ct"8í‚N^GąäZśRĹfËkeš3˘ťţ˘°LńH…dĄřeW(~Š 0< 2ţ(œÔ/LŸ†D”˝ťŒ?Ńآ#/gŕČBéŘ,Üqó$üůţˆ!ú/ţ N?})&OŘôü[ślÁ˝÷ŢçZvç­e;f`ëć64…qčhß2ţđŢКńg A7‘(ú˜ƒłî˙Ź3KăŃž}űmżC3gÎ@oŕž$j#vŹg= 9féYë–őĘcĄŞŞŞOŸ3Ś‹ţŁÁcÓŚÍX˛dqĚíäz‚Q=Î:ž=Żk͚ľbž×•HĂňńПĎŇ@cýú ö€ƒŮ{âÝËh°ěNŒfbÔ?ďU<ĐAJăDj0Ń4†ĽŠ̉sÎ9 gœą。Ňř=[%ž“ŞŞjń|3ťÁŘącĹ@ř ϷŎ‰ŔRwżüĺ‹gŽb3:Ši¨dŚFŰĐńyƧăâ‹/ŒmÂcüţ÷w‹H›>Xk *™2;ٔéƒ-Ó=tYűŔRˆˆ|0V†ŸH@˛™Ů!ÝZďąÄ?! Şië@}{ýĂY2łŇ‘Ÿ—†F“ĺfff ˝Wϕ†´łŻ@G[+ÂÇ O(3ŒMsÎLzsşĎěĎŔţ֖łĚšG–ö"Ÿˇ25qĽnŠ€aŽkš]ň‹>M „Ź(î),wžÇgΜŮíöS§NÁ[o-żYÜwţüyHE83ÁА/L"ccEE…ŕ“̛77ć6ăǏ7ţ_-ć“}‡ą-2+ć֭۰xń˘¸żÝ[ślĹęŐk0aÂń>ęm´4Ďèîxücƍö|OJ¸9y9ßAńŒ(Šm›1c†¸fňŢóÎ;×řkîÇl§ą ě,KÁ:3cr?žă]#QŹWzB2…*œ(~ŠřĽBrĐőˆHĆüĎ ˝xŞjęŃŇjpÍ2FäŘúó‹Îœ‡1%E¸˙šwązÝ&L7އŮ2™NÔą),`áěŠ()Ę7žőz:^‡Ź@'ŠdőSŔ-š–ҝr"ëxÎă[Y1]çuŞ|Ě:š‚Ÿ…:;đáăaőţ ŰwîÁ&-G´R„łÓւčloĂČPKľN×;QR‚u§,BgnŠ‹ráőyD6N‹˘Ľ°Áí|Ć2ŸŒÖŕ(9&sľő­"ŰOŤq˝;†~Ă÷Ĺ:Í*+˙ş;Íş|ąTP'h[áo$ŸMţśM˜0>îśë×otíçDpžBś6ĘÚÚژ"kÚ÷ďߏd@^'ËíÄB<^Çí§NŠ?Ü.8šËąĆŰĂí˜Íď‡d‘*6[^kYY™°Ă‘˙‘ד7Ćű3™˛¸ Š_*~Š 0Ą„? '5¤$7Ï]ˇ"Žť˘pÄH䢊ŢTş‡Ă!´ˇˇ/Z“đ“SnŘ҉óÎĚŔ@âߞ…§^<ŠšZ“đe˙íůţôç?ŠŸd~řƒŮ DQažű­îIE_ąnS§qŢČȘ}Ξ—Č/,S\÷47Ó|ŮWçź×ë$-IĺŔŒƒáŁGŠ´˙îç“âŚmMf€ĆÁ-ŐŢǐJáFą˘“ëA‹˛Ć}â1YB,ÚaĆrŻ˝ö:}ŹZľZˆ>řwôčŃ(-ëچĺ ^}őő>Ekłż¤ƒhőęÄ`5ÚčÁă;3ÖĐšÓ[G" !ŁF™ŒXš˘X "$a…ţ|–e­\šJĚçććŕŇK/Nz_r萣ɎP>Ÿą„Rl˝üňŤb^•‹ řRqŕLđ˝ţů犩?@#|ńD|ɀ߯/ů bJU¤Ň >•!ä<şf;8l!ˆđżˆŚŰ€Ľ¤B̲÷0śÝ[ۊEcóĐ`š‚ŠSÇŁśŚAdÍ)(̅ĎďíĎÁëCÚĹ7"¸ö wl@Ąy Í; ˜i}W’|—ň;ĆçOďÁ>˝Ae[§uďĚ(wQ‚M̛˘,‡Č5oŢsK+„ÁÍđă Üťv™Y{h¸K&Óűuʔ)ˆN@Ă_Oœƒ'ă{š\J–2•ŘśíCÁQăSSřăNju<†DOúbŸ×_SD§“\uŐ]Ć•••‚_2ăšTtű{–%}óÍĺÂ(ÍÉçd”3ű)şt„lWŹw´s,š{÷,]zZ—m˜MhíÚőHłf"Ÿýž!ĎŠ3ĆËóćŒÇĂ/ŽB­aטkpÍąi %@Z†"™áP÷¸Ô<‚gŮĽźtÍĽ1ŠĐ)ÝĄ@'öžüÖ˙äG¨Ý° kŒ3ž¨`Öô)ř֕Ë0aühdŚyŒ.ĄŞĄ><€{6íÄîý‡áYˇŃ¸žBä!Ëpššbœ0ŚO‡yĆÔŁľ= ěk<żĎ°ľe¤ůĐŇ<şŁ3„ŚćvdĺçŕÍ÷V!8ëBĂ8:ŢĹOíwŇA v鵓šÔY’–é0fɘhP´!ËÖ2;`tćëţŕ„}ŰŔvďźóŽ˝öj—h‡÷˜\&Ů,Ť´ű˝őÖۂóDƒ×(3sÇâu ĚýĹg–Ľî?öąkb–Ş]ąb%6n4 {R,•lśîË Ľä×_˙ń.×ĘěÝä =â—=ƒâ— CJřŁ0,!‰i2ŰQ8ÁŻ!ĂéMˌťíŹ…§cő[/۟[[láąns睙‰DQA:~ůăů¸ýËkěeĺĺĺřć7ž…˙ýĺ/*đ{ƒşş:ăŘßäىťśĹE+r"Önr”ZZę]Ÿg/N1ęlCvN†¸ÇÉ '†Z 0Ft°FëÁƒ…°ƒä†bböěYÂřO1˃>,JtdPÄEç#>(r 2[ŚoMhYöI.ë-ŘVFđ°Ýt$<účăâx\’t;vL ÚiđgÖ^Ç@âĽóĎ?/žř˛4?ůäÓ""™ƒz*ĹŮ_t^´ˇwˆˇ›7oEoŔkšôŇKđŘcO'ÝÓO?+DG˙° ŒŇá5SD0"'ٌ5ńŔR=ô¨8SŽH S ł˙iL`ôPź(îţ~–LľüŇK/Ű"ĹqăĆ%ĚbD8ËXp@uŮe—âńǟFţe?ŃŕÄR Ź3Ďç”Î0s{݈žPč öé@Ś×V|ôVŕ9”Ń;ĂźćL6E?şő›¤YžÝ*ż`ó 3AZĚĚ?ëĘëűMřCdwě¸Gi„Ž×ŐŢÖ!˘Ćş#œýK/†§l‚ë—#\qIaôhóυV8ƒĺďŕý …Â"ŠIpť=umVö%ŻLô—8Ü)Óe9Źp⸙UE:z’‰‘\GŃůÎ\śě¤čäĹÉCaM12y)×ńşÉib‚ ČńČÁč¸3fŒx÷ÓaÁk—BŚ/UŠ*(da˙ł lË˝÷ޏ9sf‹qů,92ä'4ś˛ŒV_xĎŘ^Љxnňfr Éç–~ˆe –%`ُk׎Ľ[GŽ,œ\”˘1 ‹V­Z#Ćěwr ŸcfD$×ăşî@q;ű’":ĆňÚDăUöű’ýČ>ăX€×KÇżÓ H!oi1ËnsĄD?'ż~8ůĺ Ŕ*-ëĚŽš8őď?ŽŠęzdŁĆŕGéé>ř}ÁBNV>yĺ9¸ôŹůxă.l؞Ϙv{Hş=Ďr˜>c֗ągĚĂšKf šą áşF&´ĽľŇŕý0 NX&R´ Ů픟e[óš&lźż÷žţ*Öü䧨ű`5FëÇz|XŽbáŠÓ o­Ú Sĺfeˆ÷lNN&>vŢÜ~őŮFŰB8RYcU hhn38bůٙkź§Bü­#—çĎϰÚiśŠşžM#RřSYÓżń~ÝsđŽwz /žĆů;´IZÔUČKŃ÷ćdĹyç-ĺJY‹ŮÄÉ+ř'Ď#Ď J–+e–R œŁŃœ°Żŕůsr˛…°™"&Ú1iW˘…ď(r4fĺHś Îdž ›DGň:ňs™m<ŻŁMŽĽí)pç9ďťďq 2ň{Kű"ŰŔ@@‚Aˆ=ąáŚ’Í–rîÜŮÜ&켟VňyrYYBŽvI>;'N´ív ÝAńËáĹ/”đGá$†‘ ÓŘŹnH(ü™łä,—đ§ĽĽÁ\D˘ ÖněHĘąĐWÜřą xwUţâ(ůľ{÷n|ţŽĎăß˙ă?„Á´?ŔÁҡ˙ĺۂČ;ńĹĎLĹ'ŽÁŔÚMîě!ěs'xO!Řք̒<;ĹßPő$Ţďˇß~W8{ő@Ü~ű­bŕ+Ĺˆqp˝bĹű]ö?űě3ÁMFŹAAQ2b—΁ޖ ’ŕŕ•3DŮÖčZĚ~żW\qšqď č ’`ƝÁ#œœ`t ˝ţ,Ĺč”^xQ\ôŇéćE'ĚXÓ×ç–Β뎝VœÂ%Cœâ-‚ĽxmÝ úëYĐ!AF2Z,ĘĘ&š̐ŕź7tpqŠż|.idPˆ f…˘ńMač#:×B+nЁ Ś0§čƒ†~žëé0r˘Źl–,Y×ÁB!Ϲ瞃wß]!˛Ž[;kUIÉ-ÝSîuĹ—‰hmňF gdöA'ČiŻźňЉŠbžÖÖVál’‚'˜ń0^Ä7ů&|ŽeÉĹé4ă}żúę+ńÔSĎŽ‹äă˛Ë.1m ĐůÄ>—H”íG‚“d_2 ž"¤XŕsË)¨0źĄřĺđâ—Kd)Pe|Ě)FhÜ,ě?RŽyČH÷ٞŚcJrL‘´΍(ČĹ5,ÂUç/BSKjšŃŢ€ßŕ˜šY(*ČŮpLQDfİ%ƒXǐÎţm1ě>ežĹ)”‘Öĺ_‡H( âđňˇ°ţg?Ĺqă}’kp;ćŁclóߞ4Œ*ÁâSOĹ´I#ŃL.s s§ÜĆhkŤŃvNłą'Ąöł: ŰHGKť}áV~GťšZ¨kh7K|5´˘3‚n˜7n݁đ%˙=-+ŇĎ1ýÄź5'ąđ‡v—›ožĎ?˙˘°-QŹ,ËNP`Ě,:ąx ŃWNŘWĐž|ůĺ—áŮgŸœ’śL)Ź‘ Wăő&Óro3˜łçźŽ`  Ű$íÂffŸÍ]ś#Ç%Ďëi&ŒT˛Ů2X“_!f\âľFgĄdpšöž=JôŁĐ3(~9| řĽ‚‚ %üQ8éAŇKg8ڛn7÷4wŹ)B1‡ŇĞA=F阁/)őëŸ.BeUž{娽ŒQŞ˙đ•Ŕw܎Űnż­×ő,™>ýąGĂ_˙ú7QJ̉Ë/ƒ˙ůS‚ź€ćpyG„? ˇś6şś™{ÚŮ Ą÷Ôă)Ö)ţh¨gßpŕÌ+čp,ëL3],#R¸ž™›řŹ3Z„QÎLďJÁÇňĺo'u.:ľ"SÄ&cźď ßtÓ "z—Î…ššE–%˘48`W§z Ŕkb–Ÿ7áđá#" œŃ+Œ&怚ΚhŃLoŔh•;î¸M8ęx݌Äá÷L<]}U9Áű|űíŸĎ#Šx>:D١tœđÚXĘ,úóYJeđŢ|úÓˇ ѐź74`¤ĽůĹ÷ŞŹl’ˆ,R‰ÁţQçáőŹwӈď,Ľ;„.4;ĹżéÉĐd90ŠF(Ň"|ruyĄ0üIˆ/:Ú;q´źÁ€Y~“Ľ˝Ć”–ˆßćž@–#ë4xF–ŠI:1t†[ËŹ9Ň}3ȂťuR…u‘Ч;|XÝ,ÚŹy4ą˝nĺńý"„=ڃJˆ~Ä=ÓmĄźuú ĚůĂ÷73ŹD—EH^#yšßu†Iéňs2Efœˆ0Z‡Ś9ĎAëf[É\ĽžőŽě܁ÖęJde‹{LDJš*c'ƒŘ˙úkXűóŸŁfĺJ”d!NZwŔkź26HZmCFfá´ŮS#eÉ1ă_ss[—\ŽN“Ź]ˆô›Űƒ8^mڈ›ZÚ Ţъ´ŹLźľj :fœ }â<3ۏ˝ˇ<¤•óÇ:šÖĺ֜źÂ‚ďńoź^œQŕKűů'EčäK “+$ƌŘœ°Ż ÍđÖ[oÁúőDć" Č'™íś5ڔhăL´łö–×IĐ>UV6IŘęŘň& cœ—śÜŢpÜT˛Ů˛ý~ńoÚ´Ydżdßsě;~üx,]şDŘě”đGĄ§Pürř@ńKÉžńľ$×iIüŐâ|–“ÇńWN^k™7jâ:ćŤötvşŚPH87ş„F&ů—Ëmm­ÂŰS‡wŹÁSô2Ű)Őž—)1ˇěŘ }Ěě„ç¸ăÂ9¨ŻŠ˛—Mš4ÇtDĘ1|éÓy¸ëSš ´ś…đÉĎżWŢě!AŁíő7\o Ž)H“ ÎŤŻźŠ‡zGí˛ţŠ‹Çâ?œa^ŘDüáŢFüéţˆ!šBŤƒˇŮŸ GŒÂ˝onIx íř̝9Y8A(„rrä|ôŔ'Ö@h8f ę-X/ůƒ։>šóÎ;›;8ĎťÂŔƒ“ż˙ý>1Ď4Ěóçσ‚B_ŔgŠbR…Ą ž;S|Ig<ŁŽ33ł„ÁÓ,Éę!ůœósoůeOxdŹył$ކ9óŮ|4‡WD3ë{Yóasy(hÍ3Ćg!œ ńâóąpT^ńŒű/P_׈ƊW;‹G†óźˆcEˇ\z¤Ô—nŻrŻw^[ź}bľŁ ÇÖŃmŰ#ŰĆicߎíčşOĚöDíŻ=ŰzďWľÁëóĂĂçÎxć<Ÿ1ĎgĎ#A…Aš%(’˘ ë|†ň)źo™Yr(ş”Q2\3Ńr…5k>°3ßÜuםý"  PÔţÇ?ţEüSŹŁ2ô(ôżú8YřeOŃťŚÉG+Đ áâ?ěCU›&„÷ŠźÁ¨řeœ×‡Ç˙~6žőÝ řó}{]몪Şđűßý÷Ţs/–žž‹-ÂôÓ1jä(ˆˆ‚ÚšZTTV`çΝذ~ŁaL^7ăÇ?3 ˙óĂF_ Î ŠˇçĽ7Ýma_;ąŕĚóƒ)‹˛ŇÄ}‹Î~¤^´˝ż72U-[Jô3tŔúŰ$Ÿü˝‹‡ęęˆóx0‰˛ÂđEffŚ8qđ*$]7łĹŔâšî2_r^3óÉ0s ąĹ$`)ăwšĺj„đ§;dfŚ‹,+ăů]Fڊpę Dşř:w<˘Üš,ĎŚ‹{hŢKĂŽiV$¸nÝ߈ÓHwÖ¤PPP°ÁH|™!ˆŮúŠ_}(~9ŔtG&‹ŚOű?űS”ÖԙšiBaäçeáčą&ăoňsÓ ťfüvëhkóÆŕ×ŁYśÔ0‚Ć>!45w`óÎ}XšiĆüóӚ;2˜ě”Ł,cÚđż˙‹1‹bĆÇŽ“tü5ŽÖqdÍjŹúáQýć›(2ŢgŤXX[Fë‘Ë€?3ăF•bW]ďm؄ O_(ĘÝjőm(ÎĎ€Ç -Öâ%§‹DwŠ~tóOĐhCM]Ť(ńŅ4ŐÔľ!řţŁĺŘUQgŠ~źiQ˘%™Ú3"&ҝëě–ëâ:RŠ_}(~Š ţ((Ŕ,÷UXX€c•ľđ‰ťÝšW|ź‹đgôč2 L>ÄÖ흘;kpœ.~żw˙| –9 ßř×ő¨Šíp­ommĹňˇ–‹Š7QœŽ_˙çb|âęńLlţ°GʃögššÜíç]ń‰„Ç4Vٰ8ŻÇĺ.âcçÎ]hl4ł01•ŹBęƒÎHŚŔ]˝zń[5W]uEĚ2€ý1›ÁĚLMŹ ĐWđÝĘ)şl¤ÂЀź É@sü1Ĺ<2ŮüHmˆ\Ç,ńĽy†ÓĹôNHÉ;*ń­Ľeݞ•g܄1hokÇĎČđN_ą Ő6ŁÎp^ůŇźć=bi‹×KO“ěN۝ŁËiŠť"Ë$(řa ‚ŮWnj …ţ€â—CŠ_<"‰&ťšB¸°ůWaó–P°x!ŞëZĐaDajëŰP×Ўě,?rŒ)#ݏֶNc›6tĂvš~ v8Œľ[w##Ӌ[Ž<Óóó ˙zĚ`gy6ĚŤžś˝ ŻęVT~íë˜ó…/"ˇt,</‚(_ľ ›~ý+|ůdƒ˜gěH ¤7ę Äe<ˇů´¨¸č|,h áĽ?>y“ŚcçţcđűŇÄFlsA^&ň˛ýśHs’9w— ÖŃŘ܉úŚ„CşŐ5ś˘Ąą]đň#UX˙Ń^„.űôüQvkˆd’´‹‹iv"ʨ^Pä\AAA!•ĄřĺІ◠n(áÂI ™ý‡ősrr Üo,ďđ^pćů(1uՕâs8BSS-ňňFŘŰ<ţ|ó  $n¸v.\6 ?řŻm¸çĄ˝čč Ł/`Şß;?5ßűç9(*ü—ćĎ5ť>łCĄˆ¨¨d4ć.=;á1‚M5ȝ4Ŏ튲üôűöí†{֙f™˘¸¸SŚL†BęƒĎ}ee•¨ď}đŕ!Ü{ďý˘F8ë|“ˇ´´ˆ5Űś}h nĚȆ%KŤš¸ ý†ŹŹ,5p˘ŕ˝Sč!4͊äľâ‹5Ť¤”ŚYÎk…%š™C›„řG;ö`żáxŘpŹ ÇtŸőÇç󊲮Ńe˛’ĂĘŁőF˙{ĹÄžb˜„8 vČ84/Ź,@y›Ä1ĚeŞßt˛˙‘arëÖm¨­­ËO;m úŠ_](~9  GqB‡9,4űb4UěÁşˇăôysĐÔÜn‰e˛›a| š%`2 ‘QÇ <öHE5ŢZłÉ°xpËŐg`ÎĚ2ĂŢPŁ‡Ť0W–I‹j­Ľ‹™aąľë~ösŹ˙Őo?i"ŇssĐT~ íÇĘQděťÄ؆˛YҋVM™í'lđ´]ă'ăČŮgŁcÜXÚtÔ6´cLÉTďš9S§ĄĄĄ Á@Ȱaf#Pۂş˛łŇ™îCşß+2ÉJźÁ`íA´śŃnLş%Ěoďűľ˘Ó8ůůŃę*|°ő#.řôQSÍžľŕřŘ9}Ĝ]oçꛩVAAAAaĄřĺЅ◠n(áÂ°EtIŻDČČČ0‰ČD‡Č.cGúFÁëőaŮĺ×áŮű˙h/ŤŻŻt ^yŤŸż=ăKýLeŕ×?[Œůú,üţoťđđ“p¤źľGÇ76 Ÿź~žř™é;ćĤÇcڟWßvˇ›}ěÄyW~BDŅqs<ń đŢ& %抎ŢZŽććű3ł \vŮ%ŞŻ†.žřB‘Ĺgóć­â^ŽZľ&ćv,łdÉ"!üQPč/ĐůÇtŤńJI*¤&xĎ•T0Í3í’OzÄ`ž.5QÂKfˆ4ˀyĚ „čÇྯŕ B€áąíǓţ(ôŁß×V5‹>R-)öąĘ{éW¤ź—šŻíÚ˛Bž‚]ćMAá$Ţxă-ײSO=Ó§Oƒ‚BBńËĄ Ĺ/Bfn‹p,IŠCĽ˘'pÎgPńĘŻđÁÖąxö,řŒíŤ™ąĄUˆ˛2Ӑžć3)PŘ#řφí{đŢĆ­˜ĘdL0‡V!+#šŮ[5„ş´‡Œh¤1iLŠŚ˝ }ć+gq‚‹ˆŕGs\G§ÁŃöŒ-Ăę)sq4':ő¤őĺHó{ ۔ł§ÎŔ{k7aTÉHŒĚË3~8ÖрܜLqĄp'šš:œÎ™ÁŃ$ě4ľuĐÔŇa8|#" ĺĺŘ´{?:Ďť áńs]d/–Ţ[vąIPX‹¨ƒ’4Q+((((œ(~94ĄřĽ‚BW¨o„°@OD>ą@‡7ăĹy(oŹAZ~IÜmĎżę—đ§šš­Ć ÓT–†Œqî}5áßžYŒąc˛đŁ›|gÖoŽĹŰ+*°Ńřťko#ʏľ˘šĹ̜““íCéŘ,L›œ‡…ó‹pŢŮŁ°pn‘Ísńˇ‡EJ°oŮÇNœwĺő ŃŮPŇ˘|!RὍĺ”IŒŚ&łŹű}9aœqĆR@ač€÷ďüóĎĂlĂ ÇĚ>G–ŁąąÁ`HÜ×ÜÜ\Œ?NŹ/,,„‚B#;;[ÔĘƒPH}pŔĚ{ŚĐsČě0şLůońSÁ7œóşƒ-ËD1˘á°š^ý̞üđ|iýÉËčp;Ô+'9ÖU6 ÝčŻßĘř#űßÎîcŢÝřxdý6Ë)Ľuý((œĚ¨ŤŤƒßď3~ÎtŠ,“œŠ_-(~9ˆëvꛢhşKŒ˘űłĐyŃ? ü˙ĂęÍ[pÚěŮH7l˘Ą`ő­b"Oőů<"ťdM}=ŢYˇ%EšČ2xSN†SŚCŚaOű}~tdçÂßPëjŠ-‚1ŔĐ™QË=ŽőaÇ|ČëĂö1“°şl6Şr „Mƒíń{=ČÍIGv†ië ‡5,ž{ Vo܂ ć ´xBhlj3ěYmđĎL~ż^c_Íc šYҋöŽÎ€Čîą'kÉ-ťvá`m F…ÇĚ´DB‘ŤéBý˘2ýčîö•™SAAA!ľĄřĺĐ‚â— ąĄ„? ' œâ XB!Ś„1˘ű?ܟPř3yćLŸ˝ťśm´—UWAiétűóóŻ4ăŽOĺcdɉűŠQŔłdAą˜† ŽWńâk-ŽeUU‡]ŸgĚ]„IÓOMxœŽÚr”Ě™3Í_OĹ>'ł8ˆ‚Ď}îN( ”””‚‰Ëi˛d Bęƒ÷JĄ÷ Aß.ý¤[%QĆBüCĄśĘ{ifš//—yÍý<†ÓĽ3ˆGˇĂmłÇ˘?ĐÚڎęÚă{،ŹĚtŒ(.@n^ ĽCvz† /îŤ1úÝgŠ{4SäŁiVÉ/ş˘Xšu"ŐŹÜĐ|,źĄŇS°}íc8r|=ŚMš€Ň’x(F7öóy˝xřĺ•ČĘHCFZşXžć÷ tt1:UÜy2đޜÓqŢŚđD ×őŽMz}Ř:j"VL˜şĚ\SĂ\VQ:2'; ířŒsezü=5Ż% ŁŁ3ˆöŽ€ČHDyNfΜ?G**ą}Ű6lذ&ŽÇ„ ăQ›‡4ătcżÁ';Ú;ĐÔҌŠŞj”WGCPCpʙŸz!ôĚSîŕtZt˙:—ŮýŞťŻUwf5’b ((((( (~™ÚPüRA!1”đGAÁž4JJF`÷Á- …?tÜđŮŻăžýE{Y}}%ŠŠĆ/łŽ$t?űU ţs)|>%*I„PČčŤ_׸ÁííÍFŸVšśťńsßčV Ź?ŽSćÄ,óĽ    pbÁßf:ĆŰÚÚ :ČĚĚTďÍţ€łŹŹľH–Đd °”đŻpĚĐAQ‹(3Ĺh`–ž ‹Ź?żZ{×Í)+Mő ńÄ(ŃœŞ˝­ľ5 ööu(2śIĎHĂŔBsľI”Bs d8iŞŒv56śˆRśŁFĎkď<Őśbg}üéě|!ňĄĐĘĚäc Ämł„=ŚčGh–8ČáőQ~…Ĺ/SŠ_ž Č 5ˆˆdĽ/룓yY"ƒ~ŽœŽŽËţľűÖ`ÇŻaçž7jJGÄ¸ŃŁqŹş g̟…â‚\ädf ÍďwZ;B‚ŤŃAş~ěĂ:Îýp ҝ]JyI ŽˇË°šŽ ŽffĂăóŮm"×ó{ӄĐ;ĐDfF&0ZZZ4ţ ˘y‰nö%݃‚Ľ1#F śŠĺ•Őذv#š[[wó|Œ:C:B9˜ŒđüsĄ—ÎŇł"}ěk]Úîş§¸ÇĽŠÜŠˆ:Š0*((( !(~™šPüRAĄ{(áÂ°AO˛űÄŰ>-- ééi(ÎÍ@sc ŇňŠăëěKŻÁĂż˙o=¸×Z˘ăŘą=(+›goł÷@'x˘ŸžĽ ńqďŁőŘ˝ŻÓľěŘą}pŽŠÇ•MÙ]•đ8ŐâŢ1sďe4œ.•HAAAáÄ ;ŰČŞÁsj€ƒfyOú) íŒ0sţD2ţ@D]‹’RöŔ*ÖĚr_a)bÝküŐąťąo?†[gFo‘m8g˛ ĂH‹#Z-+˸ď9™ŽśĂXßćâÜďč n<i˛łŇ1jT‘ČB”k´ÉďóşÖˇśuŃÁˆîŠĘ:L˜0Ţ^đ4^Ý;ŽÁë÷[eÖźfy/Mł2˙x„ŕGą5ˇŁEœ;štÉčy͕ńGAAAAáÄ@ńËԂâ—'NńŠ‹žčîY—¤EłţóřœrB“– óđ&4í}ť×oFfšmííXłiĎ:­Y‘ý'-Ýg‹Ą3 \k['>9ť3ň°äŕ̨=†œ@ťAwE~K´¤ebońŹ3ŰĆNAŒĚ3Ža‰ă˝^ݘd)/ˇąąÍţœ,[ošĎźœlt:ŒvľĄĂ“†öѧלá‘S °áĐ5x <7B2c'â(/Žúlĺwčy,~¨éˆŤxR|QAAAaHAńËԂ◠ÉA ˘››‹ącÇ`ÓG{ <ĆńŽo˙ß˙ŇÍö˛ś6fŠŠ@AÁ({ŮďţZ‡…s31w–J? Űv´ă÷Ôš–ŐŐU}ŮäZvç?~żKx4ZË÷bćŹ)ŞŤ‚‚‚BŠƒ5‰UÚÜ FɨH™žCw9W4łt—Ł ”-đÂk[]łC„5 OÂŚHgI™ůG7…@?z˙.Ÿ\ŒÂ ?zƒŒŹtL2ŐŐőhnm3¸n6Š ňÁL>–"h8^(ź‰F€ŃÚÚŔVŘWEšv¤vtw0r}ŚřG”EózŃSźy°ZˆŠüiéV™/Í,łfiŕ1ď oŽˆĐGĽż;d^‹‚lQW)§    Đ(~™Pürŕ‘0đQ×ă(~4Ç˙pe.Œ,°fYVkâtN\Œ@[=:Žď„§b7ĘŤ÷áU`ĆÔŠ˜2q<†#4 ÚÂ!fÓ ‚(÷Ľă™Ésá›p* :ۑ ĄÓŸ†úŒlojĆńŁŐ5˘PdćŃŹl‹^Šp,ţ űCd ßr\bČŕ„-F;šš›ŃŘbŘd›PoœŁ#Ź!X0á’9Í<úˆI€?Ă}Ńá(Ţ{Ö˝0ŞîWtŢĄŽ™}䕐ż".TPPPHM(~™PüRA!y(áÂ°GO31SLqqrýűhރ?§0î~ Ď<§_p9Vżő˛˝Ź˘â áP)6|ć×+ÔńíVŕá?G~^ĎÍMa|Çč›@ rBĄ*+¸ś;ë⍹řœ‹+hÜŤźt……Žl?*ł‚‚‚Bj‚6ÇƒfĂHŤ0ř HVŐÄîŘĹŹě0œ‰ˆ,ÓżĽ1…!bbÍŹ+Ľ[5Á%èďá§ďŔ_0 ˝ENŽa$ÉɲÎŘĽd{): ÇâËZ 'Çŕ"#ŞÔË|y{!úię âĄÝŐđxýfŚÍĚö#ÄV03ţяÇ*ůŝd‰6Mł{,Rň –Ç.ň     p‚Ąř剅â—)f× ;2Ö8”>œuiOôŝUÇQ,ŁÁ‰K‰§Q}@ůVlüč-|¸óMŒ5 ŁÇŒBQa!˛Œűžîó!-;čě좝ú`‡š[PS[‹ň]—‰é“&"'Ë,­Ĺóz5muÁkA”ő űsę ĐŃŮ)Śvăřű0[e›ń9¤ůÎ.F¸°Ą‰‹.š˝`,t†}u‘뾤úNęÍső8 ’t-zS‡b płC-,o‚‚‚‚„â—'Š_*(ô JřŁ Ěú3ɈnŰťůÓ%Üöó˙ňlZőÚŰLŐ/…+Gî„ §ÚŰŻâ?~V‰_ţt ”ĆÄź?řŻ =t-//ßcôadYzF&>óßďöx-Ć~s§—‰{§    04Ŕ›Ď0sđLƒŽÂŔƒýÍA3˙*ô/Ěě/ژ‡n!"‰QúKfśŃlQ‰š˝Č<#÷çźđÚPœƃ;ŞqËŠŁąptďłšŐŹb—ŚňçôůźÜßC–ůŇ´+kÉ4ÚPZZ‚–ć6ŃܜLŤlZƒvT %¤ĂËRb˛¤łIŠţśÜ5â3ˇÖŹě?R .E?‘ ?rŽŸ`e”‚‚‚‚‚ Š_>żLč2ăTś8łŘDs'ÍţĎ"6Ń‹*neđÓиůĆ4őĺŘWž ďgëhÍđ<Š%żź~3ubg‡)Ô [ŠnźĆúڰŽ Ű>Ɯ"§ăvaŠ}Ba„t“K NěKƒž– ==zF™ĽpÎĂ8:˙ú)÷8D:Žş]Đ]JM\ˇÜëvaWHńŽnçňŒŃÇ@‚”@Ńs°ł0Ůeņż|(~Š Đ;¨oŒÂ°BOłűÄڞËŇÓÓ1rd 2÷îC Ľţěü¸Ç1ş7Ţő Ü÷›ŸÚ˚›ëPSSŽââąö˛wßoÁţV‹/}ś ŔÝŞĆň÷Z\ËjjŽ˘ŠŠÖľě–/ý3FŽ—đXćzdj1˘XÜťX|œËT …Ă‡ ŞŞ Ó§OSĽéNzpWPP€––U7{€Ąęa4ĚĚ0Ś3@e˝„Ă"’?Ə8…AVú˙°]÷K8 XZĘý@č|řĘkťđúÍóíď˙ ’Ôdeg˘Ą>Rj•mţœp]“•™ŽěŒ43J]×{,DÚPш74ŔG!ły-ÁČ´Ä-,/:]–ZÓíRÂ%$„YşăŢÁňŠn'éżcÇG‚ăL: ,e\‡}űöŁ´t,F …‡ęó“Š_żL1,Ůĺžşá'ŽmœZĄˆÚE‹Žf痊)pĘĽĆ9ƒđZöf4u4Aël7™U==Z8=0ţ€PdbL]ŘŢL fe4& }ŕË0ţŚÓĚLœ !n˘Ĺ0ŕnl8Îő:Ż8Ň.ɎCÓíčËÝТ÷śąłk*((¤ N´­Vq×ԇ◃Ĺ/z%üQPˆƒüü|”•MÂś]˘đÔ3n{Ý_ĆęĺŻ`×Ö ö2–ŤĘĘĘ5^R‘ 4žŻV”űşő†BœĚxôéÜóPkY[[łŃg]ËfÎ_‚k?őůn×|x;ćLŸ$BރÉ'Ÿ|ZĚoذwŢůiá\=ąfÍXľj˜żëŽ;ťúîÖ+ /đţRźÉşŮPč?°&SŤ(™†#ŒYĘ ŽŒ?1K ! ̒Sa™ü‡ŰˆĘ_^ó€˘ä—Žý͝řǡvă—ÎŒÓ-Í­ho뤏ȸď>dge~’$Ţ1F#˛ŒmCĄZ[ŹĚ:y9đÇHMKo›QÝŔݎ”Cóą}‘,?š3ăét˛ŞzY뭌LňäŽČy™ńÇ,Ď&?(H<÷Ü 8z´\Ě_xáů˜3g6NfPőđÏﶀŕ|ˇŢz3Š‹S3d(q/ňiňj–zžăŽŰ\ëşësĹ1O(~9pPürŕ‘LpcW˜˘]‹Ÿą&ÁžöŒ”ŹŰňu31Ž=ď‚ÁŻÂéy'묚Ł-á8z+O¤™ľg,Aľ˝SĎŁEÍÚşŸˆpťËÉäĆąÖ#Ţg-˛›î\îËýzĂOTPb Ŕ}÷=€ŚŚfц›ožŁFJjßâ™gžó Đüä'o>á6Ż7ß\Ž­[ˇĄˇXźx!Î>ű,ô†ůĂţ„ööűóg>s{íď/žř2vďŢc>ďźe˜?R 'ÚV;”Ć Š_$żTPč;NNOŁÂI‡Ţdxńűý‚`ezCÝîëőůńí˙ů r "‚ΏŮ)J9ńżżŤĆŤo5™ăŔ“pzŸö˙úMĽŤO‚Á€ŃWš 9yř§˙ü˝čŰîĺ ٍ¨XÜ3'Tf…TDCCƒ=ßŇҪ҃źóÎťřŐŻîS8†BďÁ]^^ž˜˘ÓzöĄěO5hxč–ęÇf3ŇYŁI‘ ëč’hžH!ŠtŠOb_I°ožţĂ_cäŘńI—÷H x† N9eڈ‚ŻŹŹÄ… „’]AAÁ ~/81Ґ‘OíííPHŹ=Îč#e|\čvů-mgőĄŕ$lg‰D3›Ű‰¨l:W(B ›œŃĚ>ă5Kj섏߯)ö1Ĺ?šŮóüXáë&•ÔDhŒŠëńX÷.r?uľm+š\ąđ čäYšň}äććbѢ…8ŮÁtđgu>úh'Ə‡I“&Ba`Ąú\!żěżBĐť~°mfŽ’Xš#“=#čŠăV*M"Íý1ÖzüúXáŰ[mŃâÎľŻšA—M4yNÝą…Äăśz—÷g;PŘ˝Ż#ӐŤ˝zb"'O.%[÷ěŮ‹ŞŞj‘Ľ;^Çl6 b~îÜŮ=:š,ASO=cĆÄ.ôîťď‰Œ6Ě~/Ť3)˜Řž}Î<óŒ¤]Ü~(ÎO´­Vqץ Ĺ/űĹ/úJřŁ0ěL*\ç6ąśw.é+–,ťWßzž{ŕOö2–°:|x&L8Őtú€‚ ßţA9*ŞF⶛Šp2ŕѧęDڧčÇ̊ô‘Aˆš]Ű~ěö/aéů—!YP ,Kä\ڞ)œhx Ç㥗^ …îÁ'ÖWçš)t9˜V™•ܠэýDcĚ 'Ńĺ˝`}6}ščay!#œašDYcš ˜}Ć*ý)bq{؋[Ÿßç>> ăó2ĚçHOOCK‹ťÎ!ű:Ĺ?R8„HÉŻ$!ĹDĂ4T+cľK–,“ÂŕAőšB<(~™żZ°ůgČĘ<É/YjÖUžTsŠfĚ ÜÇV°D‰aş,Fd˝ć<z#r‰¨}"fZÍ>ĄĽŻ7ŮX´6I‹>gÔőˆEŚGˇ§ťĎë˜5ť@wu…Ň:h—+tľ)z˝.’őŞ[N Î?˙\:tHd"Y˝z ŚOŸ&„ÝąPSSƒőë7Šůœœlœu֙HPôOřłjŐj!üáďB ąQR2BŔZ[Í >ÓŚMMjżmŰ>G‰ŠŠJ¤*RÁVŤ¸ëІâ—ÉAńK…‡ţ((8ĐťúŮn|ć›˙Ž#űvcĂűËíe-- 8zt7ƍ›a/ăiţ÷ˇ•†C%Œ/}śĂŐţĎëźűO•řű5]Ö=ş ÍÍîô˙‹Îžˇí_ŃW(ńŽ‚‚‚Âđ„rP …ÄšĺÄ÷÷pPs€Ě÷Rr’Rś¸\fü‘ŽŤ4”f9]Lńœ×,¸ĺ`Đ-AJX3Ĺ*!‹Ÿzů7€Šön|îC<÷ń9(ąÄ8ůyđú<†áşS”HKOCvVŚąť§ÇN†6ăű÷CKkDH”‘‘†É“K‘‘Ţ˝ř' ‰k;QŠýWkŔŸś‡ÇçƒĆ4ŃěCM3ĹSVÖÓf§÷1@vs-aŃá23tĺXٛ¤óčdô(((( 7(~ŠřeŞ ŻAŒ˘˛,—…‚B<ŽER7ĆÎäc•6u}†CŘăRź ’Č>žĹŸř1şÝńŃQÇěş\śŮ™KQyh-ú€zœ,=ąNćştSĽ;?ÎóÉ#Ů:Š?Œ'orö•`Ö†ţ–Ú{ܝĘÁŠŮŮŮ" Î[o˝mü>ĹßkŻ˝:ćśožšÜţ˝d™0•ÝzxaôčѢUss‹(÷•Œđ§źüęęLť?3HĽ˛đGAĄ?ĄřĽâ— 'JřŁpŇ ˇ˘žž¨ź>?žóËżă{_¸mZk/olŹĆ‘#:JK§Ű™ˆ?ß[]{:đƒƒüźáőâkjá‡??Ž7Ţnt-ç} č‡}âÄôŮ đ/˙ýgч=Ao˝ƒíœaŞÇ?˙ůo‚ŕ1Ň䦛nH¸ýÁƒ‡đôÓϊůĽK—ŕŒ3Nď˛ÍącÇąeËV?~MMMb`Í HLÇ;{ö,‘.18řzěą'Äüĺ—_*ĘĽĹIčo~ó[1?oޝơįýâ~ž~úiFOmůđĂíĆŔŽNîźóWFŚD`JŕUŤÖˆůŻ}í+˘žňÚľë°k×năښ ƒC–H˝ĘóH’ŘŘ؈uëÖăŔƒ˘3łŒ?‹/DIIIĚóČ6ϙ3^x~Üö°ŘOĹĹE¸íś[cnÓŇ҂͛ˇÎѢ-źfŚ;vŹ8>Ółöś ě{FѰ?kkkĹŕ:-͏#Fˆ6ďo_ÉrœƒQ LÝËűĚ،h`ű?Qô'řâ5° UUUâ>dd¤ßł1♙2erRß÷čď÷),,Y ć͛+Œ^NÜ}÷ďÄšßâꍯçVčČAŁ‚Â`Ł'\2⊈Sú fé/͉mGkkfĆMfü1žw]ř äsŻá`sˇżřž¸v˛ücňňsÁ×nXřbô¨ÉŁĽŠŐ%ú!((âť6á…J,Qv"„?[Şšń_돒”CóúM5ÝÇčSŻ•ÝÇ*Ă Ťš×™Í'r×Ě 2ł5I'XDÔe­–OP ‡{ď˝_Őóňr îőé˜Ű8yÖ˘E pÎ9gÇÜîŻýťŕ]……¸ăŽŰěĺO>ů4>‚qăJqýő܋%˜ŸQҗ\r‘%í<×]wÝ)ޟ|Ç>účăŽs‘gýęWw۟żôĽĎ㥗^؉§žzƞ_°`Î=wY—vWWWcÓŚ-Ćxëˆh?jĚÜ*ßáń˘ÓœřĆŻ}çÎ]ÂĄAnD#-š,ßç,o[wŮŃýJČţ县ţ‚[‘°䗒Ó̝;§Çc˜žđňqöŎĄžžžÇmé/ŽÖ$ęóXíäóĚň äł>ŸOœL4*ďLJó@ň;9nÜ8ƒĎÂȑ#ť=FoÇv ýĹ/†*¤ŘÚă !M á¸ÉH î8šO˘‡˜Ÿ#KO iâęƒ4‡)ŃÁ"Š{ş…ó0Îr\şćfsRĚŁéîś:¤;×9ם´VŃ=Š# !Ąë—ÎĐĄžďů~$g˘í‹Ľżř^r‚Y]¸žŕşxź"ÚĹąmhä䑴CĹűŽĹ/cďaÉŻźňň¤3Ó$ƒdšĹűďŻÂŹó_řÂ琙™wŰţŕ ˝ĺÁ=ďŰ´aĂ&ŃÇlŤ¨’2ŰmľĽĽĽ ˇíĎžeŸňÜťwďϙ™Ń)MŘ)i˙ćłë;˜Ź˝¸§śĂd‘¨ä:ÚX?ń‰ëD˙óš1yg“¸>rÍůóçŠĚŤ)Ĺ/JřŁpҢ;!P_aé™řŢŻďǡ?s5ďŰm/olŹ1Čçvƒ¤bđČ ˙•M¸ůÎvüěűĽ˜7; ĂŰwśá˙ýű-¸–‡Ă!QŢ+:ÓĎŘ “ń˝ť@FVďČ1ŃÝ=;ŃkjáŔ Ý ’h`—ˆN7ËA #m8Xv"liWŻ˘™Ë/żlĐ˙ /ź$đýÖÖV1PŻ­­ł—qđĘÁ]}}ޏâ21¸yţů„!˛_›p’°Żşę Ńß^ë+Żźę:?Ań œ.œeËÎAOAAŃsĎ˝Đ%†ƒŐ#GŽŠiýú ÂQOŕ4ç aç…^ýœŘ4ú0]î@Őęĺ űŮgŸ7 îŹb2ý0':)ṵ̊äM,Äű>••UbÚ¸q“1đż3g΀‚‚‚B˛0Ĺ<€]ŢË)ąĹ$Ś‹ÁpŮ˙‡Ĺœ‡' ÝpÜh4‰ŇşUú f90›kÚqë‹;pĎĺ3ŸÚő•ňƒąŁĎBÁä˘Ňüéf[z˘ƒa9Ř Sa;yéźňyŃÓËŘPٌŸŽ;Œ Áł}Ć{GóřŒ>óˆŇ^šĚňĂNÔdšÍe•ŐGJ€ŕşO˛xCD$$ł˙ÄÂ`d*+›dźw7 Ł/Ĺ×4‘Îě34˜™„L1Éĉđîťď '!Ż}ôčQâÚé@`ŻžúšˆzˆzątŞńđ<4l,X0_dâ<C4VÔÔԊ1čŒhNt˛<ňČcśă­´tʈHa`ö>Œ„§Cˆ‚O~ňćGďôÇ9(^{≧Dđ{ĂýiüĄŔm:8xżx, šn¸áýţýb-f ŘŠ “’B#:člâ3CG ż40ą ąœSÉ|Ÿ(đzőŐ×ĹóTV6Il{Ë-7ŠwŸÜN.“θdł])(( očLjY"Ęć¸JYBQz*l †<˘Ü—™óüů˘mĎëv\|Pъ=ó!źâŒÉé‘ezzěă0SÇ@źY…ě6ďT_FZ×ňq°ňXţgC9đŔçO3Ë{‰ˆjŤź—&łţ˜}Ťk‘Ě=Î{ĄË0og'Ű”ä}Ňějş%ŕ:‘˜2eŠm„çű;ZřĂ÷ßŰUUŐâÝ-śpfڙ<9v¤69Њď‹÷%#ZÉӈ‚‚Äš’’¸ő֛Ĺüƒ>"ţúý>‘eG‚Ć÷ .8ĎćtŤW –ŸsÎY‚cŃܒ™Ů‚Ů!ů'÷"?)//|„ďđ×^{C?:BÝ ň7žĎÉ?éŘ`˙PpÎs°oț^ýM!ţSkppŢyËÄ5Ó9H.Ăčfś…<÷ƒÖâôӗ&}ÜŢň•ĺËßź–ÜžăЏŮĚŹ6q,FßÇrúôG °_čpăx‚N1r^ňa°ży ?ţ$nżýS‚+Gƒˇwß]!ć9`”ř¨QŁÄďłń¤łiăĆ͢ĎceŰJľą‚‚Bę Y{%ßqü˜6BĂćc–ŘĹ­ZSŁw—v'JňŁÇZ§źĹ˝Nsü/łň¸.Õ.GG˘Ę\qôJ‘1B:Ü5`‹žĹ"gťľ¨ÄkŒ{ÖŃŁˆ˙Ňcśdrą&îg˛AQŠ$***™ľŒÇ÷"šK€+WŽdÄYg3ŰIw6(ÚI)f íá‡Yˇ{›5e(ĄŻ¤?ypwŕďË}‘ó““’Ë‘ĆŁÓć-…)Á FfT^÷3Ď#Îô@@ÇŻ_g^¨Ăwţq,–.Zƒœő›Zđł˙=Ž=űÚťŹkkk6HđNăÝëFŸ„ţţQŃWý…TŽœĄ`%''[ 88 ˆ'üĄXB8Pq‚ƒ+9Đ(+›$2Ű8 ĺ™0<$üŻżţ†$„F‚ƒŞůóçNŠsŃŕőÖ[oq ž(Ža4Ł^čtáŕ’NŠ$˜Ň”‚ :żhô˘ń€Šqű<ˈŢëŽű˜Ť L­Jçt–p°ŰáEOŇr晧ă´Ó–¸ÖәŔół~:t40}qOĐ×spPůÚkŻ‹>ŕłG„tČIđ~q°+SB3{ĐâŋПŕ@ß%~çY˛ŽúčëXžümĂAľU8—č¨Z¸pk›džOsçÎiuů}ză7… ŒŰHg'™Ň‘F#ˉ(mŁ  ú0}2ă‰mńNfŁ1~T#B 82ĹPŔÂĺaÍ!ţĄăÂgÇhďŞďĕOmÁCWÎÄ̢žóÇźÜ,Œ[ŒcÇjívŒ1>çd\™™hţÝaüć2ë7‰ßÔg÷UăOŰŞŒ~ŃŕőĽ‰Ňhœ(đaĆ$ÓˇĽ]iţžëpfúą2ůČ{aŞ˛Ě,?0K5Ř÷ÉvZÉť)Y'–{Ž;Fˆ˛čtĄŃ—|Č )ŠÎĎ7ämtŽDG˘JáĹcĆK2÷0ÓKO˘d)`‘ŃĘ#F‹d~ŽŽ`–Üϙń&Öv3ɒl/ůˆ“ďŇšAÍw8Ł`ßzkšL°-ąŔ>aôŻ3Ű0ĚJCJńß÷555(..Ć@€B ŽbÎł ÷ÜsŸŕ"tZp ‘ě˜§ˇ|…Ď …YÎgĽ;č¨{čĄGĹ3EžËéÓm°@‘YŹ,Cż2ŠžýN!3a:ÁgO‚ ŽMœby–áuQ,ĎgžcrKyOˆTŰ)((¤.œ6Kçź|'/˜Ž§6wšbó˜inŹăˆ˙ő.Ú˜Žş—xYuë]٤@.=ăÝ m´Ř›DŰmő.3ˆšŽÇا›ýt-~_FC‹˝œoÉ2Ä=sň'çť<Őł‘{ĐĆĆ/žĎř.§ŕAf?!?¤(<zbƒ"ŸĽÍďcťĂ}ĺ ýɃťƒ´R ôţűŤĹ˜€ü%ž˜H–ůĘÍÍ<6^ĆŃţÇA%gu†ĆHű–•MvJÚă÷ďß/iÉňŠžŘű ŕŕwÎcSœÇń ł/(Ꮒ‚‚ÂÉ ĺ™R8Šp"Q´üüŢ0sž{PtĆő­aëJ|îėžyßűńQTT˛Œ–ŇÓńŠ ţí‡Gq×WÄýÔÖ3Č÷–.˘ŸiłćăżďIˆ'j@ÍóĘôŞŒĐĐ ۡď5=ˆbD‘™™! éąŒÂ8÷Üebžƒ1Š/3őڤU<0%it–#^§sĐĆA•Sp#á4 Đy2Ń#ź?ąÚ@Cݟý짅c,Y0˛GŢ+ŠÄ˘!4ŠĐÂA;#Ľz‚ţ8…i4ö§Ÿ~ZŃÁgý’K.˛ŒŒ†îĎçuĐPíP’ŕ÷@f!`ĘÝh$ó}bÔ6ŸIŢk`˜•BAAAĄ7ÁՖœÄü 6ODDBž˘y1ĂĆ<ł˙přĆß)Í'ś×…ŔĹ'ŚĘ ×?żoŹC_áő{1ft fΘ`đq˜9sF,2N3p9źŢŽCÓč˛9Ńč ëřż-ĺřĂśJ*Kŕ˘ŸK‰ţóX˘ĎěgŮď‚ÂztVłű÷ž7Öör™Ž[" ŮyďN°Ÿ†ďÜI“&‰ů#GށŽůYZZ*棍ď܇űeee š2Łc{š Ŕ *l7ůĘą ÷4€ËˆtY6Čyb•8c_83ěP3P H:VfʑÎ4^= FöÇ€Q´B! A8…PNôG,Pˆ+ ąhŃB;ťsĚHę„| –ን…“Ů0ů),,0îáœ.ß­TŰ)(( =đ˝L.ľ Źů™a‹ˇ˜šÉ'uůO‡{’ëăÍGMŃKO˛&7˘Öšv3Onr,šŢąLr/ëŸ)Ŕą&÷՘ëŁ.Ę<\çjźă dűĺaŁŽ+Ű Çyíżî큨ë×o­ÍĎĐ1oRžAßľ”ŕP˝ßO,aDŁSt‰×L0ˁĹBOlP2hŽŽh~1Ѥżxp˛ ˜H žĽ¸'•••˘ě1Á˜ńĐĐĐ`ĎóY‹fŐüÔ§nÁç?˙š‰¨SÉvxîšçÄóؙ"˘-ŇÇŮч°Gˇű_řĆÂč˛NףÄYĐĐű7˙‚ÉM8`/gäŤĚTčţ° “Sh!łń‰Ä'ŠĽNĄźx§§§%äMMMvťëęâgÄrň…Dë=|Ž{fö9Ńmp:O˘át0EˇĽ?8Ú`"^Y; g@‚óůá3H§ ŃŰR Š:śSPPH-$˛U9×ńB{ÓE3fXj‹sß8‚ŁpŒíýćj›Žtƒž]4Ý#îóý™ě}M5,[vś `ö>–‹‡žŘ XމUˆšš#Lô…ƒô7î ćΝ#ţňűő‡ÜOH–•MJČ'ű ^YÇYęęžűŔŞUŤ­‡ŢgßI%Űa˘ą!ż?„ĘVŽ   pr˘wE=†0œ5°ű řéˇŃXoHţđ“Áiç^s;Żá”řě?ýs–œ_ďŤhjˆ7™ń‡™qęë+1fĚƒ¨š‰q(¤ăĹWëÄ4z”—]\€ëŽ*Ƅńƒc|?^Ŕ+Ż×ăŠçkqřH|'R{{‹q{ŃÚÚÔe]VNžúý˙ĹY_DHś?{‹T@SĐÁjŒ(+›dŻc­a‚‘ĹŒu‚)r%X'š;Čm˜™†„żˇľœÜ`ëkżţú"“ ďĽĚŇÄ英cNJ˛ĚŘԓLHňţ2šˇżë@÷ç9ä1’ÉhääG§&î œß…{îš?éýÚÚÚb#™ď“‚‚‚BĂÖřX‘á†Y|ÂahRücđVďFŸ5z:(dĄCĺżô ą—ńAóËBâšÄúĘvœ˙ř6|iŢH|yŢXř˝ƒóá1Ţ/i†:#˝ç<ՌHőZYtt8U5UmümŰqź~¤Qô‰üx­ĚGF‡‰~˘ JôŁfö'K~éüăœ7 ՚šňtΚCˆĽÉlLr;D–ĽhЧř€źŇÍ+çYfHžˇ9O‘Ë}Éě=r;c(” pžĂׯß(ŚdŕäŃHe'ۉ@oűŁ?8Ú`˘;Šßďüžă)gv#ç|Oł|FŽĄĆv =G<ť&ݘ™oîÔQX:Ą+ř"| Ębďé8„ćZk ›u)oÖşî€sÎťvŃşn§'^íÚL‹ybS`ł]ńlżÖĚ ěşY—}}`7Ů&ƒ77?‹­˘÷5Ö/ŔœŠcĹ˝‰÷ť=”8őX†ę˝÷VŠĎý$˛-őÔEqmĽýi?JUôžƒô?î $@ ƒ >üpťČn#Ÿa¸˛˝Ä`–ů"ř|]wÝľxńŗ…ă5k֊‰śŮQŁFŠ,Šl3¤%‹T˛ŞńŠ‚‚‚‚BwPNzÄ+Ők"•Än˛üúąˇpĘüŽííÍŘż ĘË÷D96!§çžŞDƝŤnř?ţŻ#x}y#ęCčŻ2^-m:ÖŹkÁŻ ˇ~v7ŽřÄ1OôĂś–—ďĆž}›cŠ~ŚÍšo\ó›ÝŠ~ş ˇĄßďĺbÚ´ŠbđFHĄÁ:Č2ŞĽ?ŇĄ:Ż˝żo';ĘĘ&á3Ÿš_|Ą(… #ž8Ŕe=ň×^{<đPĚ´ˇÝa0žŮžœŁ'Ň@]KoŸgń˘  jˆ82"d„Eˇ~?eé)™­F3E.f9+ÍüX‚!óĚţăC›îÁ/6Vŕ’'?ÄĘ# ,x6äĺeĂoqž"d\˙S{kđé7öâőňfă’ÓŕIK3łüX×­1ۑáÇc˙Ő-ńýŔƒH‰.qôčŒKşľODôc.ƒÓçc˙Őu§CěĢŹl’řK.) Բ̌3‹œ—ëXşJňĎDežR ˝ĽľŠ <†GKŚ˝r›=ŽTc;…îŔŔ›qăĆâęSĂČMłRŰ8˛Ý¸łâ˜“fg­qdżq0Ľ.;$:˘˛á¸`-ĐăěŻ'Ú7ę0Îm]Ë[ČăÚNž;şézěóꚽ›őEŽCwě9¤Žă\=+ŒńăK5óÉ@ƒ‚‰dăÉžCO&aCo9H*đ`)ęĄ ‰6P‰íŰwˆż99ŮŽ ×ÁBAA>ůɛqíľW ť:3RĚěŘqŹXń>ţţ÷{űTöLAAAAA!•ĄÂƒú_úˇŸăîďS8žřŻ?OjŸŁKńÓż>…gď˙#ůă/ĐŢÖęXŤŁžžBLššE()ŒŒŘÄŁĺxňŮZ1y çτńé(›˜Ž‰8eˆżŮYcň¤ŰƒŹLSď×ÚFss-­!c ăŔÁv:܉ƒ‡Úąßš‡ťItt´˘şú(c—8ĘČĘĆÍ_řG\űŠĎ‹ŒGÉ 7ý9ÔŔ(ÖafJÔ}űö‰ů8Ët¨ŒD8唙]ösŚf‰†Â„çij2#d(2r̓ĹÉlPNŚLű”I)Ňb9 fţŮşuŽŻ@mmˆ4šĺ–› äýetk1D֟ţ8đŒěaĘŕîŕÜŚ? ]ň:řlůË_DoĐÓ‚‚Â@Aˇƒ†-ńnf¨Ń-'„fĽŚŃ5k>ě1çIë4ă}fDwXˆZÄŚaŻy4ęWŒm÷5ńÉWvăÚÉřęüą˜Z‰Ąž‰—ŽĂ=;Şp¤5(2úPěÌBâ⽖ G3KviŤ_XMłr(iš•‰ófš.ąšnfSŢ.ˋÉ꣝Ô=vćČ}mŸR‰)1‚őíˇßóő0óŕ‘#ڏgҤIövœß´i Ž5łĘŹ…ÄPţ0j^‚%'.\…Ô@p´ÁEr‰8jGG‡1V3eÎŇ&Îg0N ƒ=śSPPH}ÄËć˝ÜůŮ9O[ÓčŃŁqęäŃřĜ ÜťÖëNˆăÔT8„*šEp䦚î$<Ö|=Ft& Xésbě˘Ç:"çˆ)rdéą÷ GB‹}ú¨ÍcŽłű" W›˘/ŃŃGp­ŇݛÁÔçbv3'ŮźŮ~+Ćž UALOmP2ÓOoíGŠ`ÇLś ýÁANŚtŐŞ5ÂvJ[vYŮ$qďŽ-ˇ×Ä3›Lßňźl'‚™ŽĘˏaçÎ]"#QGG'^xáE|úÓˇť¸X<(ŰĄ‚‚‚‚ÂP‚ţ( kôŚŹ—sŠ/H`őáhđĆ˙şœvŢĽ¸˙ííč)(„ůřgţç]u=îýՏąü…ÇťlÓÔT+ڜœBŒB M‹Ź‹B x8 $čXb›X–Źš9~}ŕ%Ë.Ćţőg9fz‚žôg8d€œĺ”z3°8h‚(ü C":‚Y€öîÝ'ÖŃq+íhqq‘=řđaQŽ!řKgKS9a–Ń0áLYá˜Z×ď÷Yir[nכkgÍvN§žz žyć9ARQQ‰ÚÚZť”F"ČűËß–'Lˆ_;şˇ˘ţ8GqqąţPÜ$Ekń ł Čýú ň:x/“íßxÇ şű>…EŮí¤Š>SPP芁(ë„éʈˆOäoŽî˙ŔÔźĐ/Áě?šUÖ şůĽ3¤‡ĽżüĆźąĚś3:>ťż ĎíýŒËĂ׎ĹÜÝ:O˜áçőƒux`g7ŒkđˆŒ>BřŁY™ŽY}d–$H>¨éV'ÁńV%Ť—5ËAŁ›))Ň _ś +˘ňq8”48>ڈPšĺ†X*śşşFźGŽ,Nň>ç;nܸRąŹ˝˝ĂŘśÚţ””ŒčuɢÁ$ééiÂpO>˘:čŽ6˜ŕó]^Ů '—u^ ŸA–-á÷ČšM<ÄâŐý5śSPPPp‚ĺƒfÍ:•UŘ[ŠŢU‰KTnqÝ)h‘%haď$ws†uל;CP …QLaŽƒXÉŹ;ŃĐŹc‡ÝűČśG*vé]Oí<}—6i]2iÖqímt ;-“ł¤Şç”…pÎT¸ݕtÎč‰ Šź”ÜŐšŸ„ÓîD{^<ÁFoŸÉ@śĄ;{˘ęv‡žp̓ůL3ű9…4 h%ĎŮ˝{=níi™Żţî['233…ÇJďżżZŞhƒŸ;wNˇű+ŰĄ‚‚‚‚ÂP‚*őĽpR"Ůh Ż×üŠ„+¤)*oţä˙đď˙÷ J'Mš 6GŽěÄΝˆ2`-- ƒĹŔsńœ<7ŰŔśÄýŒ+›†ď˙îa|ďîz,úé)潑÷*ÉŢë1cF73J`Ϟ˝b€K1ŻĚ×ȑ#QXX ć™UŚłł3îń™^U˜g̘îZç '$˛]Ă ňÚYV-^VŸŠŠ Ĺ ĚRĐłjŐj:t8ć6|ÎčT“ŕ`<đ>Égtýú ˇ}ůĺWEzÚĺËßîŃoAœC>OěżM›6ÇÝßšžŃI‰Ç=ĹôéÓěů7'ܖƔ}űö‹h)'zň}Ú˛e+ţřÇ?㥗^PC’‚‚‚‚X-Ý'šÇQvJŠ‚,ąĚl7˛ô—.„0>čŹłě•ĽżXËoMĆ:_Ţ,oÁǞ߉Oż˛Ż¨Cg¨ű,wƒĘś€űÜl´ë§Žáp›Ń. ~Ź Ť´—Ďş>ŤĚ—ČüăąŇ‰ň^^ťěW¤zƒn•F3Ë9}@vé/—Çáň’eÖN1離pČ>~ €m˘źź\Dśăƍs qÎeSŢËĚ?ƒ•íÇ)hë-(úŸ:Ő7ŃŮŔŹ‹ń@îĆ÷8šśÂŔŁ?8Ú`‚0QŚĎ 6ÚóňűEđ9ž6ÍźV~8ĹŸ˝ß˙ţxęŠg\NźţŰ)((œœH”5ڤ¤sfŸŠć…pęȐ)ěĄhG&=Ćd-w–Ó-‘Môţ’xEÖŸc­łÚŽ[ëôpŒíŤ9ŚmŒ^&ŽŤ‹ckbŸmÇťła—ĎÂősCâđ^${߆#zbƒZż~Łk?'RÁŽ)Ű ĹÍą@Ţš˙~$ƒŢrTáÁsćĚ)˘Ą”‚e…{LĐ}K[.ŸąÍ›ˇÄÝfüřˆđ,YţŠl‡ C JřŁ r@’žž.ćƒMľ ,>ç"üîé÷đÝßÜŠłćÇÜ&‰`nĂΝkŒżäýÚŰű?3Kgg;ęęŽ ‘ĎŽ]ˆsňÜlC,Lœv žńăťńO˝ƒ…g]€Á@°šFÜ#Ţ+b¨ šĽŔçŔöŕ”e”8HŠ‡Ĺ‹‰ż4üR˜ÁO48ŘyçłÔSŔ˛ÔƒPÉA Ł3œ%$ŞŞŞ°fÍn(-59öŹ]ťŽËúöövźţú›q÷§“ęůç_0úf­čăXE™B–ŕ€\öuwŕ}‘÷Šƒć>Xs;fŠâóBĄëi÷äšďs0ŞG^ÓęŐÄ@ąŸ^{í ă7Ă4@0őpt;ŠŽcőc˘ő4"HCŢńö4€0…ďsĎ˝€{Ë÷%™ďEbz1˘›ÎŃčh=gMűĆĆFďńČ#Ĺ|îˆăǏăÉ'Ÿ6žŻc‡mă3÷裏‹kVPPžˆT1°rÎX™mLqJDüŁËĚ6šýxíňWâŻűx…H÷ř…H“ ăďťířňňý8ýŃ­řŢĘŘPќtPsĄ5‹űkńľwöâ/íġWăxťquž4Ń~–ö‚×!ôágÍö˜} ™×/ç!K{饔n ‚dH8{Őě R=Â9…A–ŕG×l–-ú17ľ2 Ľ†řGŠwęęꅠ‚˜4ib—íä˛ýű ŚĆë8  ůŢLd OćÝş`Á<Áł˜=ó…^Š!źbĹJźőÖŰxŕ‡]”“ Éň•ž˘ż8ZwbśžŠ†ČUů|ÄÂęŐklůot9>ƒ˛ŻźňjĚgšc‹W_}]<§ý0Ký1ś#čl#Gä8&–CŞľľU˙ńǟŒ›ĄˆÎ*ƒçJŚěą‚‚ÂŔ ˇĽžœëeůřÓ&ŕŽ3B˜=:,؍%ž‘“îúŹ[ÜÇ=!jޙFH‹ĚŃóľtוnŐľ{GĆÝ!"Ňc´YÓÍ6t˝žhR‚ ]÷ł)!Ż9NťšíŹ‘a|î´ ŚO/îAO2”ˇ2_D˛6(r†;>óäŠŃŁKKÇÚó|?ó˝ Úą˜Q} ŕlĂ;ďź×ĺ]ÉçôÍ7—'ü×Wr˘y0ƒű¤m}/EĐRÔôGßž÷ŢJkZWčÄvJô$ƒb؇ŘoO?ýŹČb_W×5ŕ›÷ýKŰfź@Pföz≧đâ‹/w›ÁIAAAAĄ˙ĄJ})œ´HT[‚o4W%T„ü@‹% N;÷Q&kí;Żáążü ťśĆŽˆ §ĽĽ^L•• ÂďEzzŚaÔ5'Îű|éb Ŕu^ĂiÂżrßP((ţ’Lƒyn3Œ„mößxŸh̘ť7|î˘Íƒ;5îWS•ńwLL2ĘŮ~$hXšr•¸P@A°LT˘śR,DGS’ŇYsď˝÷‹Ak ÓČK‚ÍÁ˛L/zńĹŮÂ('˜Î”ƒ)â™gžiXǎ+öc”ř‡î/’ţÖÖ6 ̙3˸śíâűÎzÔUUŐÂŃE‘ Ż•ƒ@öĹW4JDƒŰ͟?ëÖmޞ‡zDô%݁`tÚčŃŁťd@bD|nŘŻűŘ5ŽőěS9Oƒ űľ?˧)((¤$-ľ NéÎL)ŚŚEdüUĚYúËk,7xœŚ…Eö†SŸG”ţ‚WĽłŒKăACPÇC{đŕŽ:gzą´$ ‹Fĺ`ŃČlĚ*î_ƒeČhËŽş6ŹŠhÁşŠ&lŽnEf&‘ŮG‹dîŃdÍĚl¤I‘ĐŕxŹţ0Ĺ=ŚÇXćŐl?‘]=ÂçDúQˇĘ|éŽţ”B ݌L—Ť˜{{™%(•(&ËđÝÍ1Œţ”•M겗˝ýöťö6܇ѬƒžżČW)Â~㍷ă;—\B:ÇXڌď[žéřŕ=#ßĎĚĚďP‚ĆúłÎ:CřÉçîťďÁŁšžĺČG>úh§(ťJĐ1ŃӲà Éđ•ţBp´îŸŸ'ţrœBQ53*đšéŠ“eáÂů†#l“×đůÉËË|˜"~>§Ëiđš˘Á˛gŸ}ŚSQ,˙ýŠgŒß%>ł[đ:é"–,YÔ%óCŒíÚÚڄŠŰ#2äŒ3NwmłbĹűv`ƒžřĹĎťœŃĂHç#Áó'SţBAAáÄ"QZţŽ.]şTdĐřźv mĐąb݆°î(g9=љ\saťĚ–̏čPD‹z—ý"Đťů˝Nł‹é"˝ŽfggtAŰfçą"cí˝ô9œsşë×Łáʞ0nœBŮÄ18ýôĽ ßm'S) žŘ Čő.žřÂ.ÇŕśäŒ|_ňÝ˙ŕƒcŢźšâ]LnÁw(×QdDţ7ŕůůŽ%‡Ľ˝bYrŠ›(ţev>rŇdŰĐ’*<˜ÇdœcО˛Ič)úŁo)Îa`+ů%í•ä1cÌv\ŠŢy )NbÉŻXÁńМåŠŐŮĎD Ŕ 7|Âľž×(3s™śÍQöŘLâĹ_˛ýüťâŠË     0xPÂ…aDƒŕîö#1dyš˘ÜLTWFćČ ,đü§wИďۅŻ>‹7Ÿ{•ĺ‡ăîCĄN[[ł˜,OvÖĹWă‚knĔSćâD ­ň Fäe‰AďUoÍ'r°MĂ4r€DÄ+óĺI3 ł°P(@ńP4ŇŇüĆv—ÇČPźÂ$ŘmÚ´EL4Ś_rÉEBŘ2œ@‡Ř9眅wß]!>óúŠ€ý~Žšćę„UhH§Á‚ƒqů9ȍH—-;= ů7ß|ŁČúÂA2Ęlj‚‚|\wÝľÂ0ĐSôÇ98¸ťţú‹HmčŘҙŕ#“.˝4ś(Ď&…<˛/9Ń)t啗'ľž‚*çuđy–Ć'8čŚS&^ÔQ2ß'>W^yEĚďEbR(ćlŸ3)xŠŽźŽ—)*Ö|źe4ŕ*(( Hw‡™ĺGw•Ir čżâÓ9bf˝ ™Ëľí€1EDó¨˘üU1aIh^ľ:^9Ҍ—7‰ĺc˛ý˜–—Ž)ů阔—aLé—›†Ÿ9Ćoc,ŐÖŃĄŚ5€ƒMí8Ô؉M8Đ܎=uh…‹ĂٟŁć™¤ÖCÁ×ôżx<‘ţ~)Ң(Ë˙¤Y™~Ěe7—óŔVÁÎŕcŻÓ"ă M“BůY´#NϜƒäftŕĹÂ駟&œŔąĐ׹]0tEĆwÇ39öű˙ěýůł,[v߇­ŹŞ3Ýsç{ߣˇŸM iÔíۡœWöÍýßům ƒĚ r‡hyッ:‘í˘„?řM÷w˙Śü7˙Í뾛Ő¨°Fçۤ óÚ Ť`Ł żƒzŔÁ˛ľ/šŇĹľ…ô›żů7\{/ňŔ€Í¸¸ŽmŸšyŰ×k/ÖٓérŃ~Ä÷§.B!‹…ÂB Ą 4:źŃ@úł˙ďËŕŕPvŽ]žw…wŢ˙şü˙ű˙Łüţ˙î˙ ˙âOţąüă˙ç%öG O~)—É­ťŻÉ/ýúoËżńť˙Ž|űW˙Fî=h\<$ǟýPžňż%ŹS…YG €ˇß~+Ř9ăƒĆeŒ€Aƒ7ÜçctF@ ˘„ý1R čUžfpţÖßúŸš F=`”'*jŘ#oĐhžŠ#;…‘¸ög˙…WÂ(\T¨áąg\ƒ*áŽ˙ďţîżí~;\?Œh†řĽ—tL˘BŽpb™b]Őśyüżóﻑ$Čż 5PÄ(aˆiđűÎ3z¤‹c`Äţü˙ŻÝýƒ‘ÜQ„ Fbáúbߍ‚˝ďßűŰN8Ľżƒu[ˇ]Ďă÷˙÷Ü3„ó@#„Bý~Ď˝p|ˆÜޞŤ˛ç ĎČ͛7]㞇˛Ćđďü;ˍ6W1îëz^ ŇQl?sŤĄp*żó;˙ŚüĂřî9 Ć0Z Łŕp-pď˝ńĆëBYłŠËg!ď,Ʉ+QŚňÉĹ?QŠŞ—őId^k"wˆzúŠH%뤈ČĺOćqňž“†Ú^ěÄ?ŇCú^*J2BŘ­/OOĺďKęă&+Qá`ɕä=ŠůŃĹX^&ĘŁqš&÷Č#ĐîhŘ2„ë;RĎ}c’t°)ő$!\Ę=ýdŢ~°Š—…Úr'™^ˇÎě—wĐdëŇUŮy뵊­°G×M„URřd×_G°ÇžH¤ľÇŸË°QîK혪FglSѡ†ť |GçĐplGČ†ŁŁ#'°!uěĘoű]‘ŰôöCČrО3ë<˜‡Ä?ź„wĹŢއň­7Îĺ˙‘|ţ˙čăHΆ…œĽD–(DĺVÉLŃěďLd›m&]h炙&ĽĺxT!ă„=ĺŰ"î¸$™čGęKENšŽ'VP4ąábç(ż昑éÊň}ăTě“]Ť(šäaŻm^i-ä•íĽé!bŔüż˙í[.-:Źmš;„BČŞ°,ű˛ Ú´e†ÖůËiX÷/œ§=?{|.đƒHţô'ą<9‰p&!Á˘éM揸lătĺ˛[S}1P<_YâtŸ[WDžűU‘ßúFrÜŮsƒŸ Ҁ0Á÷vŇĤ}H!„ŹměKŔoůz°ťťľ"<Ÿgó‘7ĹŮ|lŚŘĚýIJ–Ťćţß>UŰôřCś‚6#˛C#eŔwżűËŽ’˙ŮgÉóǟĘέˇdçúéďHÔ_ÎŁ!Ś˙ůßýOÜňłÇĺӏ?”Oňcůü§?–Ď’éĹÓ'rzňRN^ÉËĎää8ő–qpĺPŻÝƒĂŤ˛p(×nޒˇžňźő՟KćďËŰďÝ Vx4”Ńů‰\źx$ç>“ţř\Ţď+î7m:T|VᣋQ#áe…B!$DŢ!UúK˝ÁNŇÁăä)“ĺ:­ĆN°’ œ†'s„pZIVě†3÷2‘Ëx"4ÇÎ+PŹb"ąŢÄjŇu+őLćq&üÉéL?.I/ Q–y1’,DDzÚý,œ™žżä猹Ĺz=DŠĄż˛2šuqq?-G_" ó›ôšWś_Ţ[Ő׺ !„BZŇĆëOhż A ÉÇÇrďŮXN‡˝4ljˆă/Ğ-MĽ ŸC6˝e/s‘:O>!UR{â¤Ŕă*ɒzý~$ƒąÜ˝ÉŻôä›oöäkŻíȕý獞ťáńžOf”HŃ!„Bé ČÖÓ´˛Œ 2b4C¤—†ńË{"É4ŽÉ?TI‡€.śŁýërí+ߒĂŮܛűܸ}×MđŇłJ\=•ŁŸýĽÄgGÎÝeČmkmŹëd‚sÓ˝ýź÷ŢĎÉ7żůóSĘٲ|Vš˘ 7Ž‘pNž;`B!„,kś”/ŠIׇ ýe!źTŒáK.‚gvúéß2°¤â–qÚi“yąA¸/'BgO2wťĂDQoAQœu–Œ3/9śLqîPg˛-ÎĹ>Y˙+[œjŒŇăd‚—gŢK;ŽRGJ™@)Sŕd>~&‚'“n„GyHŽÜ#’ŠwŠëÜľ3'1VMFşKěßý”í5šŐîdÇ!„BÚ0‹řËż‚P5ó ԟ}öš\;<•_ú@˝ĽzďÔĆI÷mbűVHs֎Ü.ËÄć=ŐŤgëq áÝŸĐÎ٤-rÝÚ+ !„BČúÁf˛5t1RâÄ2EüR¸s{đŕ‹G !OŐqÍ ÂÄë…{ŕŁ˙Tdďşžő5Ů˝žvşââ艜ÜűąŒŽËŢŢ^r~×§Ň4Šäâz!ć3bńb$ ⒇ö]—‘3÷ďߗ'OžĘĹŅ !‡űg0čťxńBY–ŮXŸzɑ‰‡'ŘÉ3N”yĽÉ„4N~‘ór“‰tbxا˝<ŞĚ‰{Yú~&’ÜÓĎċNöÇ8]/֕q^Ę^z‘ÉđŹđÎ+‘ń˜“ |úђ˳'šŘGAi^i/ĚÄۑî>ůČoăšÇ¤ŃëĹO>*Q“ÉCBz…B!¤sfœ×‰tݕ+W\¨ůŻýknPÚăÇOäŮłgn âůů…kłl˲Ĺńu´ľÝ5tüTzĂ9Řۓťďž#|đžóÔ3K…śÍúu=ţ܍ę÷{ňÚkŻÉwżűË΋!„BČ,äbž\Ź"ŠřÇy­IˇĆšxĆtŚźÝdŢu4„WbŤˆőEňpazŔąń°cÄ2™ŚXžĚ‘nËĹ8™G!1â%§О0b’zţÉDJšĄ^śżŕź™üš(ý%&ĚWœ/ťœcOü#’{úÉdRFdÈI&ţa' !„B.ŸŚâŸŞuŠÚ7MlšMľąßşČX—!„B!łBáŮ*ę\äśő4Ikחmťs玛Tt˙ţ>úH^ÜűDˇdďö›N”Ĺ?X!bšxţHN}.Łdwg ‡;;rűľ7Ťŕťwď–îٕhÖJô2+Ůż˙űż'„BY Út–„śŐٗ—E0ô— kĄ´; ’Ô ú°‰ŁĚ;Nę(YŰsé‘Núń쎞Ťď D˝ę¨đEKĺńź$+ţčM< Lœ#˝8÷ä‰ ŰĽe”ĚăĐD´$yx-+Ŕ‰§Öĺž~DźtfŽBŠHĹ?2E*ůQaRVôŹüq–ż4üýŮÉC!„Y˜Ľ=łl}YŰĽÝVś˝,í&3kűâ:śWB!„ő†Â˛u\FeyÖJ4ÜęţĘŻÜv!Ŕ>ůäSšwďK9;;“ó{?ÓĎ ýkweç:Ś;ŇëďČ2ˆGrţü‘\<(ŁŁ‡2HNgwWönݔ7Ţx]ŢyçmšqăFpßËŞ,łM!„ŽYOšČ'÷v“•ŰmŒRá 5qćŃGʎ 4ŹCŞ3\诉& –nWŽő2”űë1őŒ FĹ6i2ĎDl“‘jmŒp'Űh˜ąÉšMN8÷ş“ pR‘“˜ô*Š&×CĂ{é~…0_RĎ)_1‰¨tˆB!daĚӞ Ú RôˇWĽŰ$šśÎ2˜ąn[“í„B!„TAá!ڎüinŢźéŚo}ëäáÇň駟š0`ńčH.î?‘ă/~ ˛{ Ńţué_š)ƒ+×d°weŇűĐą OexňBĆ/ŸĘčäšDçÇ2ôĺ`gGä`_îÜš-ożýśźţúk.|UŐů…躲ĚJ2!„B.›U˛?rOD~č/ę*Ô@ĺ3ď'5/'^ƒâińO&‚ńĹ?Ž,…cÇŠ€ÇmčI˘Ëˆyň0`˝Thg~‹4YšaV~#Љ­§#ŃÂA-ŁÉ#WMÂ|ИgâłhrVV(%™wĄŘäaŻ}zLÚ¤„Bé–&âĐŚíŇn+ŰJˇmĚ#ڙˇ}”B!„&PřCś’&#śŰŠ|šnSš¤é%*ŻžúŞ›ÎĎϝřçţýűňčŃc‡"çO%>{"ه#šˆ“N›Á~ňTď'ó=éí^IŚ}‰ú;ŇŰٕ^{$˝Aę)h<źם1Éhx&q˛_œĘčěXäâL˘áŠH2ő“2 úý´lý$űkWŘezíľWewwˇ´ü!–!j›†B!¤ŽU÷4ѤřĄżRq bzŅZ&}<žˆ`âHÔō ýeźâ¸ýâ˘řGrxaÇ&2š44˜ńÔKKCd„;.‹8ʄ@QîĹȕ2żţqú+“ýdaŔňĐ_q4íý'6WȜg”Ÿ[,…€e™0h’G$…Hfsš—´O !„Ň%u!kAÝveÓ˝ü”Ń…÷Ÿ6ůB!„2/ţ­eńnłŽ”i›fooυŃ„ôöôé3yüřąźxq$ÇÇǂ§ÓٓBţăěďqŕ8}sœ<€ú]vwĺʕ+ríÚU†ěćÍΑ–ŤŤJp“4]T¤YŮ&„BH|[°‰m¸JL<ňxâ‘\,ŁŢtl8+' RO?˝IlŤ˘ H˛´N”‹xüĐ\™ ˇŘË2ăWÇx(*pŹ(GÄĆ›äźđäx !ĂüĐ_V”íĺ;ń’dC’Ežˇ Ü5PÁÑČäšřĐ%„BH4Ÿ7ř4i­cÝÄA]Ře] ~h'B!„. đ‡l5MĹ? ‹‘2󎦱‚q0˝÷ŢWÝşńx,/_žLŚc9::rŸžž:OACF. ćašŕQ󝝁óÜłżż/‡‡‡rőęŐd~Ĺý4Ą2VąJ‚ śé!„˛}Ěę˝űőű˝Äž˝řTîG˛jä™xĚI2&ôW&Îą^qT“ qÄ ‚â˘ŔÇx ʎęÖř@Śú+ÎE9ńO&˙Ʉ8yhŻ,TŘDkň^4ó%ŽěŘôz-bă(;Y-Ť'”ĘË,ĆQP6w¤^$w˘Ą[函%„BYME;šśMřŽYmâMgYí˘„B!„4…²tfíhšlÚT”ťřÔĽłiŃŃpýúu7ŐíSĹ,•ÎŽ+´Ź B!džďü"íK?oڟ={.ż5ţTţoýŻÉŞRđŞ“Éd ^qb/„W–KŒw›¸ŕGĹA"bŐ9’ ‚2aŒ-AMÄ>Fl“nëĽŢ…œ—!ÝéŇuN‹Ž÷/ßńMňŤ'Ď@z>f›ŰO=e!Čtž‹z˘,Ź™)ƒ^—(šä‘ ä#ůîž6ď8=˝ýB!ŤËŞÚ—łŇ•÷ŸPZ…ĄžłíCB!d3ŕ7ŹţĽ °Źr€.+ĘMD@~şŞ´ĄkӅ+ŢYXT%vŇB!důřßîśßýŽíËP‡Š]‰řűo<9ů‡˝ˇĺat ŤŘERúË Z bgžpTčS ťUŘτč*†›ib#ÜqyfyMÄ6V¤aÇŹW"?ôW”ë…&ÂńŽI!bą8-Ďdwă!(+C~N’‹œ&ނ&âŚ^2Ýí]Č_Űy*˙öő3w´÷řD[•BY<Ťf_vIARÓöʲ}š˛ŠŠUʛö!„˛ţĚc_˛((ü!$cQĺYź÷̒ś.ý,´ýP-RĂŠ4!„BVxýůמýWe÷{ߗż#ßsëfąË–ŃIҤĄ˘ĚŚŞJëĎwěxÎýËÓiČŰĐž6ýWżú5'úis|B!„Žh3¨Ńß§í~móŢDf=?څ„B!d‘PřC–NąŇ“˝] mÄ?v°lŃP(ý˘Yeń+ӄBČ:2ů~ĎŠĄ˜g3ώUŢŤźţ€÷ŢűŞ›˙ä'?‘ă㓹;`|BÇďŠE‰€–ťL´^—ÖON—Ś­ÚżěŘöˇ+ť6ŘąĎ믿.ožůmOB!deYž}yŮĚŇŽŠűYś5źW]y%„BȦЍ}IH×PřC–BYç‰RÖ@ĚŇIc÷kłož˪ŒŻ‹h‡YB!dý¨ ŸĐäűžhű˛Nüƒżß˙˝\dŠł×śľse•윌÷Xë›n'„BČ쏃}šfm× ĺbSíÖEýŽ´÷!„ÍĄ ű’EBáY)ôĽ8ĽßďË2™u”ŒîkY”(´OŰý›ćľČýťúňŁJ!„Ź'°ý@Óoy›o~űrVŠYc@(˙uwŻ;]z­œUôC!„Ĺ˛*öĺ˛čBT•/І׉BŮ<Úڗ„\6ţ•˘×ëÉh4’áp´çşNšYňi“ן@‹ţř,[čÓu^„BY°ýlÁŽéŇž,Őyň׃U áş.\Öu™Ç[Ď<ރ!„Ň ëb_.šŽÚ6I=´ď!„Íf‘ö%!]@áY)đ˛D%éôôTööve•čr¤ĚŹB Đžm÷Ÿ…eyşě< !„˛`űáŰž¨Ž™6öe×Ÿśâ°j^~şd“l˛.<ĐF%„BVƒU˛/WŠ€ş‡ś!„˛=,Ňž$¤ (ü!—NY§ˆ}Yˍ×eYD%y!PhŸËQθ؄Bil? (măd_ś}ŮFüŁë•:QY,ó\ăyźÍ’ŽB!łłnöĺe3o[äśB;ŽBŮ^ćľ/ Y4ţĽâW˘Ó—ĽČĹŅ‹•¸ęŞÉEU’ťÎwUC~-+_B!„ʰů`űőű˝)Űo[  ű˛LŔÓ$M—Hv˛Tłjö_×bÚˇ„BČâYEűrŐ)ť.ŰjŤŇf#„BˆĽkű’E@áY:ţ ąß$/Đ 999‘ĂĂCY'ÖE4/úB!¤+`óÁ€ héŇ3Ë,öĺ<âÝćńꏛöV=mŽŃ˘ŇB!dvVŐž\GhżB!„,Ćž$¤k„ŽŹę ó~żďÖ={ö\ÖuőŚÓ˘ňí:˙Ë:΢ËO!„ŐGm>؀Ö&œ—.ěË&öI3­Sf‹Í3‘ ó^#^OB!d5Yeű’B!„Ź‹˛/ ézü!KĂmădc‡rvv&{{{˛),ÚsĎŞw>°s„B!Řz°ůlĽŮÚ ł 1–a_6őda˜ŻrVŮnœUÄE!„ĹłIö%!„BY>]ۗ„, JŃČĽĐd´] nţřńŮd6}öڟ!„Bćśžľý”Ś^tšnŸÇžlŰ14Kú&S—y­Ă´jĚZśU=B!dSYű’B!„Źóؗ„\&ţĽzŮŮ3xyb~qq!ÇÇ'˛-Źz‡Gë^~B!„\°ń`ëYۯ̆hbW,ŇžlkŰ,ÂZ7ĄĚşÓĹőĺďB!„\.ëd_B!„Ő§kű’EBáY*öĺč7Žďěě¸ůƒd<Ë6˛N#ŸůA#„BHS`ŰÁĆł6ŸoSĚj_,Ňžœ§<´—V‹E Šř[B!—ËşÚ—„B!d5Y¤}IČ" đ‡ŹĄĆvÄJTˇi>" ë˜XŐăB!d3m[ślžE /a_Î[śm´ŤęD6˘Ĺ6üž„BČ*˛Îö%!„BY=.Ăž$¤KBČ%`ÇSËv˝ž(á* ë  Grrr*Ϟ=—7Ž ™†B!„Ź °é`Ű ý|´LČMŽţíŰ9~šeؗZ{ěyĄ=ˇŢđ÷#„B–Ç&ؗ„B!dučŇž$䲠DzTĆÝŮŮuJʧOŸĘ˗/…B!„Ź'°ĺ`ÓÁśƒWeÎËeؗ]••Ź/ź!„ĺ˛iö%!„BY.—i_Ň%ôřC.•6ŁfđBUґ3cyřđ‘[><<B!„˛> Ň [.íŮqśFĘXWšJ›Ń2Ť`_ÚruéˆŹlÔ!„BV‡Mś/ !„BČĺł(ű’Ë€Â˛2„^–ę27UUîČĹŅ{á‡Cšqă†B!„ŐçŮłgňôéłBĽŮw‘ťˆŃ2˰/)ÚŘPC!„Ź.Űd_B!„Ĺł,ű’Ž đ‡,;jFÁK#dô… 4†"*ĎxńžÉÝťwóí„B!dľHG;99‘'OžşŽ ť ŁuÄł­(ˇŠ4ĎíKB!„ő„ö%!„Bé’Uľ/ é ČҚ̭Ť<ŰXÚř[]ŽĄâŒ´iĆGn;śşQ4‹‘/bB!„ů€ › óňĺKg‹u‹Ťń°měkŹ÷cbƒşJsűö%!„BČúAű’ö%!„BH—ʞ}IȢhzF ˇE ćQɲN=3׊Ÿ­ë{ś]Çüüü⏄Ź%ĄxŮvţÖeź¤őemç:AĄ‰—¸n+;†.űsB!„’âÇ­Žr_ŤatVŘ ˛­$Űšîoóč˛ŇLű’B!dő }Iű’B!¤KÖŮž$ŤĂîîÎ_Of0̟gó‘7ĹŮ|lŚŘĚýIJ–Ťćţß>ľ•zü!K§näŒ˙Rś•]M§hUcŹCE:­@Łb-ůz;ęŚ V¨ !„˛éÔUN}[,]çţÍc`ű•a[Q-űův]iŚ}I!„˛´/i_B!„tÉ&ٗ„Ě …?d%ńGʄ֕˝pýŠr(/ťB!„”c+Âv]hű*W˜i_B!„Ź´/i_B!„tɦؗ„Ě…?dĽ)=ü 4ćp{k—ŤÜäú/éŞJ4+؄BŮ4Ş*ŹeŰĘFĘXŹ{ÝŚů]&´/ !„BíËâ:@ű’B!dvśŐž$d(ü!+Oو—Đzßmn輪LŰí„B!dBU%ŮŽo3fŮvíKB!„ĺAű’ö%!„BH—l˘}IH[(ü!kChôŒŽ~%Ř_)ÓôĽÍ3„BŮ4抟†F΄śˇÝvŮĐž$„Béڗ´/ !„Bş„ö%!ÍĄđ‡ŹeŁgŞś•˝Řý u“ăB!„luä˛ômˇ-ڗ„B!—íKڗ„B!]˛ ö%!M đ‡Ź%eŁgt›Ľ.]ÝKœŁe!„˛ŠĚ[™í˘B˝*Đž$„B™ڗh_B!„ĚíKBšAáY[ŞFτŇ)m+Â|ŃB!„¤´ľ‹Ö͎˘}I!„ršĐž,ŚSh_B!„ĚƦۗ„”AáY{šV ýôŽŠ!„B)ŇE íu…ö%!„BH÷Đž¤}I!„Ň%Űl_âCáŮÚV CűB!„ŮŮ4›Šö%!„BČrĄ}9˝/!„B™ÚTdSĄđ‡lö…Í‘0„B!‹e*Ë´/ !„B.ڗ„B!¤K(ö!ۅ?dŁi›mB!„l;uámŻ(Óž$„BiíËjh_B!„´ƒö%!Óô„B!„B!„B!„B!„˛vĐăŮhڎ€Ą”B!¤ßžÚ6ű‰ö%!„BHˇĐž¤}I!„Ň%Űn_’턲q´­,Ó=.!„BH˜&•bkKmj%šö%!„BH7ĐžLĄ}I!„Ň ´/ IĄđ‡l eŕ&cVž !„BŠ \g#ůeMż)hڗ„B!ÝAű’ö%!„BH—Đž$d…?dí ˝ĐŤ^ňăńX!„BH5!{Ş×땦ą•ĺuŻ@Óž$„Béڗőëڗ„B!őlł}Iˆ…?dmiRaĆrh]ÓüŞÖB!„Ź;e۲ő~ŇiÚPeyÝ*Đ´/ !„Bćƒöeڗ„B!óAű’fPřC֒ŞJłžĐą<Ü2ţśëm:B!„RŽ”Ń 0–ń7ćý~ż°śVȅîŞWži_B!„\´/i_B!„tÉ6ؗ„TAáY+ę*̘PY‡ůz;ˇű—ýÝô¸„B!ëL]E64ňE×k„ŚÁ|0¸J4*Ď~EŰćąjhڗ„B!Ý@ű2…ö%!„BH7Đž$¤9ţľĄĚĺ-^ܨ(ŁÂŒI×?I^Ţ?>ؗ“ů§ÉËű~ň’~–Ź?ĂžB!„Bڀęî^2ÝHŚW{ëíÄ{/ąÁ>89•[ÉüüüÜUŠQyƄŠtYzU*ĎmíËăá@œí˃ă<:îÉóÓHŽ/D.ĆŘW!„BH `î$ćâ•‘ëűąÜš2–WŽ ĺ•˝Sš2Řű˛—œ×ÎţŽ$'(q/JÚ,ccűš!„Bf#ąĽł*1§’˙`X%ś×Ĺ鹌“ů:ڗ„4Ľé5Ü5˜G%Ë:őĚ\§~śŽďMŘvóóó‹?˛‘”’ŃŃ1nŽ’—ó?˝vUţ$yQČ2!„BČĽđľÄ6űkIGĆw_ÉŐl4 *Ď;;;ů(šPeyYč6öĺé°'?}yU>|4/^Đž$„Bš ޸Ë×î ĺ+‡G˛?Ř,űЧ˝Ť2NÎaLó’B!äRčA”ŘfgG'ůžUś/Éĺąťťóד*Ďłůțâl>6Slćţ$%ËUs˙oŸÚa§ţ•&4JFc^ŁÂŒ ËO“—ň˙űú5ůď1:F!„BČ2€Áţ7“ßyţBn&v*̨~’ÇĎŢŰŰË+Î:öYpş}ůýgˇäO>ÝĄŕ‡B!dE€Šř×ŢžoŢXOűňĘÍë2ěłĂˆB!d•Œb9~ú|eěK˛(ü oŁđ‡Ě­4Ű8Řř.qQiĆüó+Wä?żzȐ^„B!+ B€ýGG/ĺÍăcç2•gĚuô °ćEUž›Ú—φWä>;dH/B!„!Ŕţú[/ĺĆ`=ěË݃}éě1¤!„BȊ‚`ă“39?9]Ş}I–…?ámţšđ+Ív‚[\Tšń÷?żq]ţłý}zůYG8tžBČ<°bľvŕűOOO嗞ĽŁgPyVךĄŃ3]Wž›Ú—Ÿœ\—đŃ>MB!„ćâ˙äýSyç`ľí˃k‡2Ú!„BY}úçC9yńr)ö%Y.›"üaDa˛hĺŘ_ö+Í9ónݒ˙3E?ËżŐŹ!„2ü­¸ň°Ý`ĂiČŘvž˝—§÷–g>n űňáäď˙˜˘B!„u6l7ŘpŤj_ܸFŃ!„BČŰ 6Üeڗ„t …?déTĹĂƄXŘçççîEűoߖ˙|wGČ%ŔŽSB!›żmK6l9Řt°í`ă•UžÁ<•ç6ö収nËţ”ö%!„BČşśÜŞŮ—Wn^—Ń€Íî„B!ël8Řr—a_Ň5v@–J]Ľą°ńbĹüĎnŢ čgQ,ŕĂď!„Ëdn÷ŞĄď]śvlšk‰M÷§Ďœ‡ß 1ł-öˇ„=Ńöˇmc_~zzƒ˘B!„5śÜţ7äíýŐ°/Ż\żJŃ!„BČăÄ?‰Mwüühaö%!‹€Â˛4ę*ÍPSԔŸěËśż/¤Cćć\š°‡"BŮl:ŞŐ}—fŞ|ٽؗđíKB!„u6Ýßţڙܔĺڗ;űť ďE!„˛ŔڃmwqzŢš}IȢŕđ˛2ř•fŒ’AĹ˙_Ż_Ę?:`Ɛ&~ŁF#ŃOU8•6!„Í撾3}ËĘĘIćWśv’ŔćĂß3˙6UÇŞ°/˙ä‹ëü9 !„B6Řt°í–m_Ż!„BŮ `Ű]†}IHWpY ţ /Kť “şČý˙źrW>¤Jr>fú,*ďš÷#„˛ÔŮeߕŠýüď]ăQş퓙mďß|đĐŮ|űűű…‘1° í(š&ŁfÚؗ?<ş+_źŕďG!„˛)Ŕśƒ÷őŤËą/ŻÝš%Cš—„B!Ă8ąí`ă˝xô¤3ű’EBáštĘD%V% ÷¸˜žíîĘął#dFZˆk{ńé"MmBČ6RY1júmđóíWrűýiTIŁh.`ăý뉭wSC#$Ëú„ŽU幍}y:ޕ?ů”ö%!„BČŚďÝŻďJ4ź\űrgŘg€B!dӀçl˝Ěî›Çž$dŃ0ÔY:ĄŃ2p›†ů?źyƒ!žfĽai­KşŞĐ&5ĄVBaUšL„Bś“Nžqƒ0`q}ŘŽVß$~ťfWÍŮzĆöł×ÜڈmО/đü2B!„ 6^jë]Ž}šýŞB!„ÍśŢ"ěKBş†ČJ qą1‡{\LǃüżźE[ÓBđÓ:ŠŃN („BHg˜‘eߥ|t…żÝŽş°ŰJFiň*ƒŢfśŢż•L‡™ý‡ëŹnrç˛/ĎÇůó{´/ !„B6Řzßź>č’ěË^ż/#zű!„BŮX`ë9›oö%!]ÂVorŠTĹĆÖíp•†ů?§ˇŸö4×Ä-E=Ąő­óhşBi*TUߔŹÂ寂B †" V VřƒŤ ›ď7>r6`?ŠDŰkÜ$VvűňÓSzű!„BŮd`ëÁć{˙Ęĺؗ‡7ŽĘH!„BČ&s%ąůŽ?›Ůž$ä2 đ‡Ź~|ltýéΎÔôbľë4ű4]×d!„Ň!QP@ÔX4‹ˆâŸVŔćű ImŔÝÝÝÜ&ěbDśo_ţč1íKB!„M6ßűW.ÇžŒ“ŽB!„˛Ů¤6_÷ö%!]Báš4|áˆ.ŰxˆPEbzşł+ňeٜŽD?%żQiúyTć× †!d3™ń[ßjŻ!PĽČ•„Łř§`óÁöťyq‘ą•g˙ZŰĺ6öĺÉhWžxÁ߄B!dӁÍŰď@k_ö;2ŚyI!„˛ńŔćƒí7[ۗ„\ţĽŞH#6"řřđPHCfý´üÔ {ęÄBeű•A‘!„lĄw~ƒ Q\!ŞŠÝŰPŠ(.÷ţCńO7ŔöűÎÓ§ÎôÝ圊(Wٗ.h_B!„l °ýŢî/֞ܝr lĹ"„BŮ`ű?1ˇ}IȢ đ‡,UDB!™Vœcůé.Ă04˘­čgVÁOĹ~3y*;&!„â}J+Ležxźĺ¨˜Ů”čNJzfQüÓ °ýž#i' lÂĐH™6„ěËG§´/ !„BśŘ~oď/Öžěí d$„B!d€í'ś_Ň5ţĽ—GŇ t,Ÿ1>öÜ´ý4ü4IXnäq¨) BČfТ2űBâĆڊ•ýr”Š€š€*Âą‚7?°ý`Vوľżu}ůä„ö%!„BČśŰo|}ąöĽô{"ôůC!„˛$śßźí—„, ČĽPćŐĹ_…$¸Ďc=mźč4ýÔ~šˆƒ*AeëBűBŮlźóƒ•¤;…uŹ ¨Fԉř'Ś×Ÿ:ÔöS[P)ťŽq ›Bó|vĘ߀B!d[PŰo‘öeLŃ!„BČÖ ś_ű’B r™PřC–JlD%śýLH%łŠ~ęD:U‚ŸĹ@SéJŇÔBa!„l-F×NĽ÷=ňčşl9śB›˛Š—fkó÷@ž÷Ÿ€ČˆâŸn°śŸÚ…łşË-ł//„B!„l Öö[”} §?BŸB!d+şAçł/ Yţ•@+ÍPIâď3!łĐZôS!ţ™JSľ ¨lšn=!„ÍĽÉť? öąë+˝ýX!î8DЍŠ÷Ÿ6âR lż4dB6zşŰŔˇ//ĆB!„BśŘ~‹ś/)ú!„BŮ"˘îíKBş„²bÄć_$n6­ąč§Ąŕ§•¨ęoŠřň#I!XQMaľˇ>$ň1çíđÖ{żM“č1$Pł˙\â/™ţę:wš„B!ŰĂÄö[œ}I!„Bśڂd5Ąđ‡ `‘˘ŸÖB Đńü2…– ›řŃ$„m$*üd‹ßă‘'Ş ÓŐDč÷XŻ?]Š!„B!„B!„B:„Âréřń°ízRC“k4čgĆuĽb ˛2śUž!„ÍÇöxŰěw! „á˛é˘Áć!Pp]⟠MŇl9Uvb™˜Šö%!„B)ƒö%!„Bé’YěKB …?dé°Â<MŽ_•č§ÖËO™ŕ'ŽöüSęí§JT,´BŮ"**D…ĘR@蓧ńD>S" ‘ (äý'´ŽTüS˝ţĚÇ<׏ö%!„BńĄ}I!„Bş„íżd• đ‡M" °i,ú)řT ~ę<ţԉ€BËeë!„l>ĄJR(ÄWţgTLű„> @Qŕص⟸Ľ×B!„B!„B!„Ž đ‡uĄ{áD?u˕ ›Žę¸Ţßuĺ'„˛e”f|?Jl„?6[oE@"ĺ l9˛Ëb@łˆ ÁQÍ ]çB!„.Ą}I!„BYg(ü!dS‰lB뛊~jÖ5Őzüi#f"„˛„ÚăáOä Ś?ÖăO…§ˇ^JÄ>ţr@ü3ɤd=!„B!„B!„BȂ đ‡5%n# ™EôÓdťČÔňÔzŻ|­Ă~BŮ*ܗŔ̈́Ä>Rôřă{ÝQŽ/,‹çéÇŹk-ţ‘zŻ>ŒőL!„B!„B!„EAá!ë@SAL\j+ôwSя÷÷›IÇĺŻ$Ó7’ÝŢNŚýžě$SŻ×ˏ=d<çv*”oEYvůŘ9|šÄŢsS6ßT"/DRٜ*üç÷ ž öý›ďŽŸÎŚŐtúąű•ťěš'Óóäďϒ|żŸĚ˙i˛ü…ő„㉟˙ԉ˛Lý]ň+Ppz"„B!„B!„BČÜPřC–†ß‰ˇéë Łěşy˘žôOĎ;Ů^'úy3Iú{ťťňëIçěůůšŒĆăttĚ&ëĆٲßIťnżó*”ž!.—Đ˝şďŁĐłŞ" Bšŕ?C˜TĐS—ߐÚőu˘Ÿ˛|äx39ţÍdţ­dţ{ÉôÇÉß˙U’ö ™|ęÄ?Ů&ŰTŕŁŰËD<÷ĚDŮűhÖ} !„BČvCű’B!„tÉ<ö%!‹‚²tXanO𚅄6žĄDT)úI:c;ůXý§űűNä3GLľřŰzóQ/ ŠvćZqĐ*C?d›ŢKlÄ$]á zŹ×(ýŘo…/ęń˝ĂůyÚý}rmÄAż–ěűŤÉôIţţ”S=ÖIšřÇűäËiŚÓ!˝‚VţÚ3Ďűˆď2B!„âCű’B!„t mD˛JPřCČ&≂ű5˘~0˙_$󿡡çD?îŘ0^űaźTŕĘÂťŘ0/áSXîÇrYǧ‡•Ë…đB÷ďE2+ö˝oßkţ÷"ŽĂ}Bž‚l>e‚Ÿ&Ď´†îúO’ézň÷‹oʕł‘řÇË'ţ‹B!„B!„B!䒠đ‡uF;ET—ËŹ×Ű÷\eׇţn›ˇÍ×>(ę!Ťˆ˙Ž÷…:u÷ł/$Ő9ň ‰ÜŞ< Ő=#Ąg÷גéżNŚ{ĆëK‹tZV ‡üŞôúÇ óE!„B!k Űa!„4};„eCá!kDيfÓ4ÖcaţÝd•ő°ŕ{lĐZkçŤ ę䵆=…á5š\ćšŢzż÷ű}7ŸŐÓN(ÜQH<§ÇTĎ[8Ž>ƒv_›WŮqŞ`ƒ™•ˇťžlîe}Žôţś÷ł/ *úű´ĺ—“}ţ;ä›íŸ‹yl^uĎQĄO™`‰B!„BČâ`{!„E2ëw†í„„Ž đ‡ R$ˆzĘÖűóo$ÓĐ šü×Ę2”Źymh’î2Yv§, ˝Őâ„ÓÓS7 šGCŐQö}ćŹřÎw8şżwww ĎŁRčţ˜[qP]9™…Đ}TćĽřďűPxŻPžeŢľ,şż>'öţˇ‚UÍĂćůÍdúďPI˝üćiAHx˝WF>c„B!„ršPŕC!d¨únąm‘Ň YGŒxgj](żÎî˜^‡W‘Šđ]!ąOČ3CyąËC#Ůšď-č2Y•ŽZtËŁI˜ óósyúôМ9Îţţž\šrĹý]F™Ÿ¸A>˜Ź€G Ą‘ŠÔSŠ– ë |@ٰŒ2őłĐ}łÜWźIĄwş/°Ńšď­îó‹‹ wŻcŽuÔéňl‹ŞpĎČÉɉű[ď}^vvvŚžĺ­t…n(έç˙™yů‰ážâzo@„ËƒB„˛Ů°CČv°(›Žś"!„yéÂ]Ľó„Ő‡ÂB6‰˛Jiˇą^Ž˘ó4 úńCľ„<MY- …h m§!CVˆž={&GGGNHŃÄ řáÔŢË*äŃ4ş]Ĺ*řÁ< !O t;ŇbžˇˇWXüPüýâĹ w,¤ŃIÓZáEŐ3ć?§dťQ‘Ž ëhÁ}i…:öţ IqbÂ}Ž ϕŢÇÓážőŸëČ)Čóřř8Éá™888půUq-=@~œČxňą}Ź×Ÿ ‡B:‡ß"B!méúŰÁś BV‡.žoڗ„BÍ"<ůřmŹ„bĄđ‡UŚA%´4̗/öŃüBŢ źô.X‘ç$ä˝al…<˜”6!1o°,łžěĘ?ĹŤ ϟ?—Ǐťß ˘ z€ŘżaRĎ%5¨ ¨& /lƒpĂkŽŁ˘"őćƒ9„=bLX><|ŘiRŚ×˛Šŕއâ!€čëÄbK=ú@œƒŠt˘äńîuő˜?„BČӆřeäŁÂ#äáćđœ‚ő*¤°ĎTŮó ?Fś‡˛włŢ?’K=˙¨€Í~[B˘›~Cüo‰˙Ń´!AŠ˙}˛iP>‰0Ą|JL˝^Uœ|*ŕŃgEŚ˝˙ˆ÷w#(î!¤Ŕâ:QŘ9C!¤ ÝŘg Á@Čbik;śI?Ż]Jq!„luśŢŹ‚ńYmJ €! …?„Ź •ÉŚŰ‗Ů"ăőGçuşMźý‹—‹UDEŔ  {4’z,ŕËŕ¨řÂý‚x šsçŽ%üô§?uéßyç: Âő`‚źU¸ƒźňQĎ@(‹†1‚PŰ0WAʂš ‡|ĄD•ЇĎ"QpÁkî ÜłVä†{÷­őćc…f:é3˘áě4ŹňVŢˇ˜ô{dĹ?Ö /˛b"¤A™ż>{xVÔ+P˙ť¨^~BŢ4]Ů3Rą˘V˛tÓ)ŽB!]ŇäťŇŢfŁˆnčZđÓ4?Šy!„TŃô;Q5Hž.MK!¤)ţ˛n”ž×‰ažD¤ŇۏTebMßԐ ĺGË`*÷ě^]ôž… áƍšČÁ†ĂÄí¨8Š4B"aB:ˆtʰ" űŒ¨wD_řqƒ 2ôxXýúuw üí{Rń˙ÖňóÜnĘ~{ÜWťá^„g)Máî? G×ÄۏnĂó ‚4ëÝGĹ=z/‡žMţßzLü¨§-”KËÖdDNţ ”yýńÄ?šĆý-Śk(tŹ 1!›ČěvŐěö;j!„4Ąy}'ô]aBMW"ŞíB钦/ŞŇŐőą5 #Fť“í„ÂB6¸ćŤ0׿=žA⇠^ł“îEÓŘüěÜn/&\&ËŽĐŰkHVsŢzë-çąDńĂgЇ„NE X1‚†ŕR/(đ„}°^ÄAźpóćÍ<¤°""ű|Š ńÉzNÁv IVćaŤĘ+ ŕ>€ˆ÷ľęŤ.lœý&¨¨ÇŢĂußŸĐˇ ŕůyĺ•WŚDD*2Şő ç{úń˝űdóÖážŮ"fłc.šă…ś!„l. ;DŞł¨ĘĂߗٰ é’&öŢŹ‚žŞŠó“BČöbűę҄ҕmŤ5ÜHŮ.(ü!dŠ­púo{˘ťÜ¤2ë‡ZŠ3$üa„Ź#ęŃG=ďřX&˜ čąË6Tţ†çˆ}ň ˘ˆŠÔCɢž“×”ĐH>ŤŰG“ Ą hĘhóý¨ŁLˆZu <[eĎgƒćŢ~Täă/ćŮ>R#PbE›l íżv°đ{E!DiűM¨Y=IVfÓŮ´ÍEG´ ™fN›őB™—6‚ŸYÄ>U6c“öFśI˛}PřCČş2*âfaž&›ă‚ˇŸ:„žČ'$üńŠG Ş<–e”ŹŠ1Dƒl˝ą˘ˆpčo ‘<”@ ¤ŢTŹ÷žEĐôţâ}¸}Ě{ĎŐUTýőuD ;aşę<ÉE>F¤—mFážüăÇ1=‘­Ąůű#ž/vĆB™“(dł…zɚشš†aiK 7ݰgžu^!„BꞥÁ‹!!PŘ§ŹÝłI{(íMBś ŮJ=ůş@ÚüoÓÁ)űw!Q‰T†bÇ Ů4üçŁî™ČŢIŕőDz­ĄîY:ÖˏN%Ţ}Ś*ĎŘWdJDČŚÓěŰŃ>äBśqśý—BČ6ĽOĽňl;oc0p}Ż™¨+;!ëÎ,˘Ÿ&ëę–ËÖÍoƒBŮt*­ˇŃOÝ:_ÔTDń!PřCČP)ŢŠZço×4%BÝÖT{^ƒŹQRV‘ÖźCo?żeąě <QŰÍ*Ü„l-!ąN÷U'ę)ɧR4DȚ2řŚtߌ25ů7ߟBČ&“Ú\ľc˛ÝżeٞłvƒY]%Ţi.˘mHś•.D?m–›´łśń.TíPBYÚÚbUö[•UhçۑuËeÇĽř‡(ü!dSń„>“ŐŠŻçő'äąDçeîëÖů„Ä-Ź“MĽńˆR ü—ŸA˛őxŢ~üJąţ+VžÉR˙ÝhŃaŇŘŚœą†ß8BŮN Ź ƒŞĂ0„lŔzĹ?„řt-ú‰ëÚ@' ĺŰdööNśŤBČúz‡×ŮfMíˇČś!Ś+$qĂ_ś Š!uPřCČ:QQy-&›ŽČN­ł“ˇŽ×ë<đřÂťMóśƒŚ)U;—lˇÇYŤbüĐ[_şhäY…g­¤âۘ }Ä|+Bë‚ŮC„Ź9łˆ~š~ŚÓ̖OŁ}!„l>uuü’ !!PPÔJDń!m˜Ő‹Oiş&i¤č‡6&!„l6a;q:M[ŽÝ{ů‡Aeb ťÜ丄Í†ÂB6Ş §íĚ,ŹŽW2űŢ~Tü{Â"+XhRQ^UĎ?Ë*ƒo´‘ífY†zh´&dŰ>ž(°E=d+čDôÓBđSˇox˙p^„BśŞODÓ0 ^—ĚtGK‰(,ţIó dŰi<¨QfýÔ ~ü6ÍşüŞÖ…`{ !„Ź'u^sBéʅߓíĄm‘çMÜú„<ţÔy˙i<8‘˛qPřCČŞŇAĺ0TÁľëc#Ňż1Ç•ůb{(]™'ů^LVQđٰrNfaŁšî^[ô˝H‘!ܡJżYéŠüďŠď[&ňé¤ÂS0Dևś›v‚ŸŠm-„BĺiJŕ÷B֛Z;Şź#&ô ˆźź§;x&â:Py'Pš÷vȐmgŃOSÁOă}Ľyť%ŰR!dł({݇ú˝üőU*B ¨Ą¨É2!d; đ‡uŚŚ#ĽńžŮJw„Ńt#WČ3ýŰ(Ťhx”7Ę].4Ęś›Ëj4*óĚE‘˘§0ÇOŰf_B6Œ*ŃO™ŕ§LěÓĘ#ˇomš!„Ź7Ţ{˝j„ł8ӝ8&ŻbĆ^›A¨‘÷ŠČvŇTDW fŹX'Ţş˛yÝşŚËMˇBYʄ>ţ6ßœUü“çĄß%łŽN:VŮąig˛šPřCČş“yę Ž÷–㲴6Ÿ€ńâ‹tz˝ž¨k$`}U80‹MWe@]6Ť „ Ńľ]Ô=‹¤ě8źÉÖřúŰŐ+P­¸ÇŒŇ!dShăí§­č§^đ7Ę;¸ÝŰż vÔBČzĐ4Ô°ĆčČ´ Č7óŚrŞUy˙i#ţ!„i$Úń–Ő[ůâ@Ҹ܄BV›°ć§ŠŢŻîďş9úŘňĺĚFőÔť’ÖB…?„lq• '´.›Bb Á }5řÂkTčÜzď yűąÂ_ů\f-ťBLáé‚Đ}ÔdÝeţţţRůč÷pä !" Ct…?…őÎ–ć bžáí… B!d}ŠŹˇě°Ş‘ŮŚM"¸‡Íʈ}ĚĆiPľ÷Ÿ6v"mJ˛mT‰lڈ~ŹŘ§Źm˛H*ËYśŽBČć˛É&ëÔö›NřXĎüŘţ6ˇŽĽřǡËěIڙ„l&ţ˛‰ÄŐŁQĘwK;6÷÷÷Ýr™ÇŸPžžĄ;nĘY%#ƒÂ2MŞĘ–zü!dI¨Ř§QRŻ‚\""dS(ˇfý”uŇTĽ)ţ×7¸=;k!d=Šśż “•SŰÓĎDdwL×.ĹqąƒF .ŢJĹ?E!›NáLU[Š]gmE_äŰŇ˙ŘíR*ţŠ/GĐś\r{"!„Q)ú).E?á´j÷aun‹Ş§ŸdnE@.ĘFśW,ŇŠř‡˛yPřCČşą¨J¤É×zü)ô4ËŇĺ6CšË6H–-úQhˆ­/ł6V)Ťŕń§n!Ď"żľ|śČҝč'0‚Ú żP*ř)Ű^zŹe$„˛TŚ(ž÷'"œÂv3Z{"Ô %.xöGY†ČuҔy˙™GüβÔ‰m sóˇ/ěÁ܉’IćăŘ đQě3%(’€]([Ő:B!ëKÔ@ô#5~RRJĹ9÷ŒÝ@ÄHzúmóňTď?!ńR%ţ!„lţ˛a”u‚Hf0Ä5ëŞ\˙Mĺß MIW-„X6Ťŕń‡ ›C˝LœĆ?!Eʎ÷ˇiHžZר‡íĄŠč'4*ťlť'Ý6ÁN—*QQٲŸžBČ&1-Ü Čž|"—śŕůÇvÔē4nűÔŕ¨l9'ëzšh6ń!›ĎŹb™ś˘Ÿq&öFÉ<ą$ăń” âť ĐŽWˆ€dös!„˛>Ô ‚Ĺ?“Mţ`xý&šď’ôňmq(ÄW@ü3ŤMI[”ÍƒÂBś_dÖ[BŠáˆĆŮ$x/˛”4ŢFqLo=„hŢAÓDôüd7qŹÎ;„…@~łR!„l%3Ĺ×}4 Će:câLŕS)=ŐY•lËfœěßë7˙IÓ˛ÍÔzř ¤ ÔŰD?ŁńHFŁQŃóϸ˜vbBŞč<Ž,‹˙wŐ:B!ëË,Ÿ|.‘MlÎ(š,ÓžOç"žäż~?rß,]‡Š—ĽŠ˙”yýa?!Ű…?„l:M+œqŘKĽŠaMWľ\śnYĐ"‹ é}ĹF"BV€6ßN~3ȆÓfvśŕ­ŤýLo zř14ÉBśŞL$Se –s˛V!„lmĂ0÷ ‰€ôß8띙tÖ ÔÂD”gŹGőž2Ś×M‹ŘQCś‘ZŃO@đă{űqBŸxâůgäź˙¤˘rl‡N$1zSŃQ¨Ě„B6‹Şţ­¨ÄťOä‰Äłg*Ş€§?H/KżßKC|%ÄýžŰŢ‹Ł‚čG˙śy—‰~ĘlGڔ„l>ţ˛Ą´ŞlvT1Ĺh ĄA!d%ińmdřl%łŠ~⢗—FâIz–Ł´ăÉčë2á_&Š•Ý•L!dÉÔ0*vĐÄfŸ|9$Ę×ő’^š,žI+iˇ]2Ż!ăQş­Jücä´%É6SçA'˜6ö˝ő'ú 1]\Čp˜zűÁó OŽ‘ł/“i8ĚěL™ŘŸyţĹcÚmyyĘĘ×p=™ž3É*0ëłÍűwu)ým*~łŘz÷kGNö‹2Ż‘ş˘Sˆ}d”|ƒűr‘ŃHzƒTô“‹}D ÂVÍ_ˇITć‹v&!Ű…?„l-ÍBG‹îĎĘ(!  =„ʁďb^™n“+ÔdŁ)ůžŐutT‰~üQÖyWÚ­ęFjťQÚC †J…F^ščń‡B6 oÁ‘ŮžĐGŹ÷í ÉćqKĎ)~ܗɉzr!LDQ/R‰On–v¸”ڍąC~‘-ŚĘˎoŰŠĐXO?ý\œŸË„?çîąÚŰّAż/Pďe$Qü;rŰâąř”Wk;†˙ –•Ҝ7•‰XB. źd!’zo@švb”Ů›ýäe" áčn€dvc_§E>š_ÁŽ ÉëźţB6 ŮXŃ$„Bş…B‚B_„“­4ŰŚE?qž+Î:jb~a”n§‚ŸŃđ\ĆÉ\÷+ń—–cŞź´‘ !d ,đÝ[†Á÷řŁë‚!żtt6Â,ônäľDý4C˛Ĺ˝ü›ŚáŠŁŽÓJ7’ť`3z^ ěœ!Ű@UhŹ:o9q…ਗt ŽĆЧŸTô“ŘŁąôĐɊ){^ÇQυSéŰçNőęĄ÷T\˜Ih‰2?Öë^MB!T!ŤC4ýWJ•‰Ęsyńţ†9rž#7GĘ8ó d=ŮĐ^…ü3/’ąHă_~Ú „lţ˛Mřž !„Ň~GɖŃŘ[]•睢Ÿ\ěăźú$6Ł /\Ł—Äř{˜tܜťí…|Ä<“ĄcO˝ň‰Lm$ź—Dź!:Ů:kąŻĂă ¸Ú4ýyjď‡E˙ÎUüu/?:QśŤ/˝Á@ú;ű˛ťEöoɕŻČţ•kNÔë÷ÓNHzŃäűf<ü„GXÇRÖ)yށŮf " @;Śŕégœ œ]9L:POO]€žýƒä9F‡)vt˙Äî] Ďp.d}n-¨ó5kžęAƊNt›Ž~şm§ĚťHęůל*ý¨x!őč5Î×ő2ĄmhżâťaĚ3Ď×üžv9”“r"$ŘŃżÝîˇa,çgç÷Ňű´ďś=ăICvČťý}âđşőgţë?ű‘ĽôXí‹ĐÖć›]§ßÉQك÷z{“,j°j"XJş^d° űWoĘőWޕťď~KŽ˝úŽޔÝýäƒ0r˘파3o"â:łÜTTnëő‡MĽi0_L`;öóš˙Œeč<ţœ9O\Ww÷ŕ6!{'˘ƒT”>Źß­~çwÝú2Ź ÷Îůůš[ˇłł#ý~?~`›Š8ݤ Hˇ­÷M•˜G˝pŠ÷-+Źqb†ěږ‰€ŹŕűëďƒëŽßZ_źcóˇżÓĐyŽ˝ČĂÁ`ŕ~7Ěm:Ěąółä˝Ą÷˙4+UAṨ8ÖARɡk4LÚEâôý2%÷`ň ¸ű:ó|UöŽŤňú㏲ŮPřCČşBń!„˛°3‡l “FڐG_ô#ygÍČ5pźă'_Čó{ˋ/>J…?ĂÓ¤l˜ĺcź Ä–t”­_Ö㉷~)eŒĂeIg›)üYŠ{ä˛ËÓŐńT̓=wîzĄçÄ?“N‘Ü‹—鈝<ły˘,Ťx",rď™N;Ťp?Ç%Uöř’Şňߤ‡h§'x'K')Œ÷ËFĹ_¤ąđÇý4/wyÂú<â܈ű?Ó´őwveďĘ 9{ů"YŃwÂśčŐ÷¤×Č`gĎ] <čŰL; ŁüţŽ˘Xňď—ç ¨Ţë!›KĐă[ŮCÚŕŕČ:ÁAěžAŁÄžźHěË~˛ ŞNŸjĹxžH„ĎŢzPęí"ۆ{B}Xo/!ԞAړ“—~oo/˙+ôÁvx’ÂąN$!4DŐ( WŹËűhvT@4?B×ŝĽ“îŸ{Ë2Ţnpn;V`=㔥eޡ€ć×ËCb6Ü!=ň G…?ČˊwüüT(„ ‚.ţŕšáwÄ´ťťëöŐßË8ÎŃŃQ~ ˝ýěuWqĘdßٞŻ˙w?ó@đˇŸŹ?úŔ˝ˆű żóţţţÔ=ěD “{*Jß;ÎËŐ¨/ăţ8o;ŠüV•´=V˝!›…?„B!„B T5FçŰĚhĚĐ~ąůřyH&ĐNŽžĘÓO>”÷>–łgetqîzhâ ž“Žd=öJ ürţœ[Ő0ţq§Ă­‚X˘;ââ?ľëÜć—=v^SŞ“xχ”ßgmďżŘ íœNA˝%dFľ=›hgÇ8ĹYLJëtÍň|ëQD!Nl1×o×l[üooϧÉú•>~4šf}& ‰/Ľ'%ÇíËHö’ů [Ž’Î‹bfe ŇÔu3h9ÓšMÍ~+=wĽU)eGťŻ”Äç9ů4É+ëP]ČÎţUě_qË˙¸2öÄĽÉŁy‰vŹh_LĹhě`g^™ÚM'ä¨l˛˘ů÷Çy˙‰Óđ)RüžĽ!ú$˙6łoQţ|-ţ5=ˇđƒH.6QpMŃąţěŮ3'ŢxůňĽ[a˝Ď ób!| C"őŁy`=–ÝËę&äUűŁł_EHŤůŠfV×ÁÁ;6ňCůU`TÖÁŻ˘œ›Š_ĘQ Î ů¤9<<ĚĹ'ę iUĚŁžrŞÎ_=č¨ĐyŠ ŤLĽyŠHűXáz ˛B™0娠ÉznÂy]ż~ÝĺƒßGOœ˙ăǏ]Ż\š’轂}ĘöÇś[ˇnš<öÁ6ݡěú €cßšsÇýĆdÍI~jQĎNĎäéÓ§rďŢ=÷űżőÖ[îtI˛÷‘VˇĆ#g€ž“ąz”̨ EG›‘í…ÂB!„B!5Ä͡‡:2bÓÁo:h\gKҰ…Nԋă#9yzONŸ~)#ŒźޞĆ-őž坧iw˛ˆl´§4<Ł–.MÎürÄS)ő„ŃN€1?“†ńŞĺM"Ž‹ćuëÜÎ:ýÂ'\ˆĂ†vǍLš1ď™Î˛A!\ƒ+Š×ńІîQˇžˇ ČčuS!‚Š”T¨dĎՆÓôöwđÆ…Ž•Jř^ŠtBŮ0ÇąP>NĚ ł´ź@ĹR Ě ԛ‘Ţ*Ś*ţř`ˆ|ôˇ7nܲş4śIă´˝Cď Jj<VëKˆĚqpC´ŃGÇ :v˛Î™źń9Žó0_nduŇo2Їš×Ÿ4I|w”­/”% §&űó ŽiGÔutŻňńő=E“÷öľŤˇäŰőyűŰ.Ž¨č<{úüD~ü“űňů˝GÎăÂů :“{˘˜¤3Ť?ˆd7 ĎŃô]ƒăă•„b‰=O=MĘmßľ˝ěľáG\'Š¤â€‰P§Ĺĺ‘íÇ&EŽŹ?—Ó—Ďdx~âÖ :gdňM›x(Ę m–Ă#ąýÎvžm'do†&}nŐ˛ŠmÇéX;GłP9Qf{‰äĎx$ú=΍ĚK…Ďů|„ŽŸ†\‚°C;ŐUxĄ‹Š y¨ őäßÖ ţ†'+ŇńĹ%QţýHżCt¨`EçŘf=ůĺS4<nVHŁâűL¨hGCXŠĺP“ [Ň0•ă‚ŔB˝.WŻ^uűéˇ^R×WóSQŽ˝ž8&ňÄßöźŐS˝Žšˇ `TĄa´ôwŲőnş'4?[;SŃkŚ×UĹJ8ޟGE_ę%HÎišüpoöˇ šĘđwÖW‹ĐďŃtĐwîź?ô>Í=Xy陋óšŞá˝4oӎPŃîA{’Bá!k?B!d˝`…›Ź7ŰłBPPŮŃlE?Š ˇŁ îk|qžţŔöQÚX:HcŻě:ď"ăń(sŸş‰ÇHދ‹óźHö9ë÷ľá?i˜>Č÷W÷ôggçŽa{âjżÎCHL{whújčŚ ĐîřĹc.ˇŇţü‹ž]&ű×/îř…˝Í_ęb¤&Sëě$6űɤSC;"™tlÄfw W4žQm3ĘŁ&˙jž™rÁ ŐčôšyóŚ{ÖĐAŁĎ:J4tBÚš‚ç]Ü<6ď{Âđ̲żŕF8Ł#%i¤é0BöĹ‹Ł¤CĺLŠĄ‰óAŇIu˜…Ż@gÚEşbŇX>i4×ëV¸ôľ"B[ř!Zœč璏Ÿ˙Vąěő卻ňŐ7Ýú‹áHŽOΝŘkwgW’WłÜxüŽ{ÉB˜8ëŹ@ř”äw}ő•W]§‡vv˝<’—’l™(RŸX&÷ÝÎîN>"űťŽš$ě‡ůÄsФsżďîמë@hměFőŻéÇ#őDԟxˆ\hŇů2L:ůd˜]Šäžź8“ŃYŇ9Äń†îť2ýÄŮĽ*ŽśöŻŃëw­i/â¨{WY]ÖżÇqú A¸žqć} 8y[řœ-âœWą}ZĹęGĂ7xí`ꭨחq‰ U"*’ąĄĺě>Ös/>UŒJŹđÇ–hšŤ„?v˝ Wt mŚĄË𭅍‡9öSĄŻ}ĆTX…üTŒƒü4”˜^ď\Ě`<üůÂa=Wľ-5Í3÷Š’ycjęI§ őö¤“^ ç…ăŕźT$ĽĺQĄÓźÇ÷ą÷Ŕuˇ"5˛|B‚ÔŞe ç†zP!YA –ŐůŇzÓŘk?‘)ŤUďuśA˛˝PřC!„B!dâŕ:_čăoCgéx4”ŃĹy&LgÄihžB€˝yýő7ĺđĘaŇÉ|áź7\9ź’t濔?ţ‰<}úd’s<ńްłłçŻžúŞźóÎ;ŽŁYÝąĂĹöŁGĺ‹/>O:§_H]{jœ+f¸:…ݢ™$ÝOf;ţ*´7Ď[†ËŰ?öćĹżă6Ţf2ńC,EďvTrĄł žU˛‚Bŕ€ŃŁxÎҐ Ł’rfĎZĄ„ď%q<߸=˘T Ł Őhźţ+寸Nš/żü҉7а9–Ń1Ä6č8IuAc)zĹJĂ1Aœ÷Ę+ŻČˇżýíd~׉vŇΡ‘<|řP~řá‡ňŕţƒźsIĹ(iřŚ4ßĂäÝđŐŻ~ŕ ű=}úT~úÓOÜ|‚"=‡˛ą~Łúôď‡/e óvŘLíżŕă důťŽrÜwr"ýłO¤÷ňťßÎOÎĺůł¤cěbě:ĎN2<Ç2rS$c'¨IĂ ĺjňţÖˇžĺ~g˛^&ďńăä^š˙Kůčăääô$íńÄLîě%ůßşuKŢzë-灣ĄO’<ž$ßüžĎž>KClD“ËIÖůŠű!ť’˛Œ{Š'íˆjÇcÖIëź!Œ ťœŁœ§ĎóěŁ÷Ć؝&‰ÇžÁ˙Ţů^€üN˜XŞŚuŰ Y? ăiOpqpŮ?ś!~đěEž…P_Q´öŁ]ˆÖő„Îďqˆ&ÔˌäřXŹ×(˙Ű_ĺM#”Ţ/Mcď9ß[˜%ÔW¨SßzîąéŹ`„źĺčuŇPDH‹o.D?*ŒÁˇ˰ąTPdŁyęńBם ÎóÄUzNšŻ-gîÝ+Ž !ĚćÁţ–öˇRą’ •ěyiH°Eˆql9l(6˛ţ¨Ç*}†@joö§CÖeŢę$űśŮÇ<ýÄĹSŢŹ@áۖŽ0ű1ź!Ű…?„B!„BZăwş”+#Š" ťŢ‰ĆŠč'Ý&ĆťHş÷î`Wnܸ™t_•çϟ;o?ˇnÝÎF“~&>"×΅ŽŰƒƒ+rxxŐÍwvv`0ؑë×o8!ăĚţĺ^3ć︯ÚZßŘśěă/ťăyžó/óŢŇü|ÚZčVŘľČτ&q‹fÔłŠlGŽíę;áO?k ćűű"=SäÔ;‚Ţ÷ޤ#›ÇůvÍŻ!Žťvíšë,Ráň}ôčQ&čÁíĚ;‘fORŇçöŕ`_^{íŐdzÍ=ďNČ!éčvx‹A^Šx(öDiăřîîŽë¨‚pHGł?~üԉţ—őÎâwŒMŽÇt'Ýd›/ě(žĂâšźăGš˘jrĚńđL.ŽČđe֜xžÜožĺ4ůŠŽOväüô0lš{/Šň·Ýä~˝yó†eB„‰m7n^—‹aňű~ÎĹůyŚÇO—zYG fwîÜqŽ8:'ń;Ÿ%?ęéŽîp‘üôÝóŁh6ĉzGЎEŽ$ůNฯ—ˆdűăǏŒg¸ éwĚvž;4ŤĹ>’‰úŠB3vžmŁé÷5d‹ů"‚‚­ך)™-ăżďW…şkQÖiŰ&˙U|ÇĚ#N-ŰŰ(őü×nßE˛Ş×ŢżţřŢá;đTŽzź ‰QüskzŽ!ÁÔ6S&#ëő0z†&Í‘ů†ak—ŠWó×!TˆžŐO>ůÄy…+|xćŇPv¤{Á;7r[;Š 4Áó!ŃééIî-Č/§^_RŮëşMřBľH&#óĎĎGrtt!/_î¸A\ß×dpráD8říNNö#ťgœÂ* Ł•˝§ÓCůţ÷żďB5žűî;îՐ"6\HęÎ)*Üë:é:ťMю_ý-ń7CxpŕžŇPö{ăC8†´ˇoߖ—'Çrzvâ‘e'×đÄb<üdyD˘žt”śőČDdˇin“Œăźă‡ŁłÉś0m/V§-žż‹űĹq\œź|ŮÖŮT<ĚSžYß —ý. c—çÝö|VĽ°J‚$ő˜BˆšĐFĐGądžWc3`Ęű^ÄŮ(Š2ĐTŽĆn¤ IČv@á!¤ŕ„B!D ۆőö˘Š€ôt\Œ]&J:f‡.Ěpwč }„jÉöS'ÎÁf“Š.\ç.źŽ`~~~ć<†¤^HúîďÜŠEíšĚkoűţó˛iׯ}~‘Ć]ĘCqŠçŹôN=h¨@ĹąˇćĹ )Tř#=çHK}F¤ÂlzҲŘemźŽŐˑNŻ5úüâyDŽg„!(Ăh<̏ĄŢÂR!I4u}°m”yC‡ RAx@ß”NÎ/{1äNgjëĆłnŚżěă›ÝĚŽg"ŸÇ˛ż7NŽkňô“÷l˛ýä4’/D?ËŃ1Ţťăä7ˆÝýä<ţôŇ9ŢÁđ´śťť— šňpĂź3"öF5k˙„őĆd'ßél’С̊ëTPęŚáȅ\Ýłz}ŹWˇ*ű[=&ؚžYe|Ű0ôüN‰Lý4š((ÎżsQ/››wGWÔĺé{fđLMʲˆňΛG›śc˙´ŮgŢň.ű=ÜőńçÍĎżçô÷PQřźĺĺí§eżC‘}J6_ho”ĺ“ú“˙ÄĹĐĎž GɡiŽźŮ:(ü!„B!„ŇŠŠŽŻóBŹŔg’2ŸOB뱎™đŘóŮçŸÉľŤ×äęŐC9<<íÜ?<<k׎ş}t4ODpUîÖŁĂ˙öíW’yÚŃ ÁĎŐŤW“Nę4l–ŐëCÍYË|lűţó˛nçoŇGĄgĄY~S›Žąó(‚~„ęőú™hFC}ĽÇ¸ĽB—ąyĆŇőQÔËç“)+Žúŕ™ŃđXŲgŸ˘lĘśáŃe"ČIˇííďČÝWn˵뇩זd]ršIY L§xœ –"+ŕÉĹř˜ŕüÜšgǍ'Łô<‹žc&ëÓß,ÎŁˆŠ`ŠđËdóH*CˇĺířUiźy{ż”îżŔăëjÓńŻP¸ž§Ăž|ňdGžžFi˜,üăSA$¸á0–ła_ŽĎc9ÂsTĎ]Ě^Ôw9Œ“űóĹóňłŸýTîŢ˝+ďžűśěîí:/A/žźpž€đž×÷qúŰHś=ęÍ ƒ4äňÁz‚#ä‰íę “ •O@ŘöôéSůôÓOe˜ÜűřVx˝@ćŮNüÉłbExîoýIÔë;eĘ;˙󒐍ĽĚŒżž(˜)î;ńňS´-ń­ŔłeČl§zg|bUڐč§-]&şę žľ,Ąó‰|ʄ?mŻcč|Ű\AY™ýőĄ˛‡ŽQŮrčj+Ú*#ô ŘyŮ:[. €RBż;ŻÍjz†Ş–›ägC gkÍ_ĺŢTӹڒ“:Í›# Ůn(ü!„LᏒӊţFCŘŁGiŒ{t˜Ŕ7:S°-uŮ}!ęB#+ľM]Śk^‹VůkŮŐ-˝şyGĂ5ʏmpá ÷Ľ~F5!„Bˆ2‡Ř!_h”/4deű{V% ŃőTF‰Mˇł3pbx9;;uŰRń‚vŸNlX؀&‚ĄTŽţü™ ÷’Ú‰“NŘVçՊmß^ÖXôl´ÉoŇ0Œš˝×ńçxœtdFý|ťmDy@Ńő“í*úą$Š@–ÇNxďß˙RŽŽ^ČÓ§O\ő><{đܓIzŚöK=é¤Ď|ćEĆÉß'§Ç.?xűŃ0cĎ,ŽĄ‰î-çÉťáIRŽqćíő? A• J&Â(­ëbŇëç_űźŹążŢţ]шî~ŽŞßŰxĚ1Ť÷_äń§3H˝c¤KçĂHżˆäů1~{xęŘ,őꔆćęAbĺ„@ą !—yÚÉźQžČه]çűľë×Ü"›'OžäżwĄ>ž‰ŽôÝ aęóŚ Ë‡ß×ţ~zżë3ƒoŚP'Š’†2;wSŢ^…ÓNŽiœ}şŚżmn÷\áÓ˛Łe–}ŮŚ„ç"ĽŁśM!cŃviŞöű8 u†ŞÖPŮť`ńˢŽ5ËžU–E–Ů ş—Ë–Ű\—коisü2ę„oUb {œŽî˙u§ŠŒ,Şß˘ÍďţD¨Ç măŕ7M˙yüĄ¨‡˘PřC™•`uo ÔxŔşű÷ďË˙ńťĆÓ>ř@Ţ}÷]yóÍ7]#ÜO~ň“¤Sć™Ű#ąďÜšă„A!đ7ćvd%°ŁńşyĄa Úř|űöm× ř§ú§î˜żüËż,o˝őV^ť˜F5!„BH€’Qi%‰M5ń„0i¸Š§:OÇ;[ö'ě;ꐠƒVĂÄř¨đ6-ěA„jďa;ÖŤ-J8YEB‚ű÷haĂĐ=?e›—%ݖNĹĆâ8×Řzačž÷˝ďšú„:čű@ŒY‘G¨"żř‹żpƒ6ŹD<ČßCa݇°Ď>sőVÝ6Žĺâ< ű§u[}Ţ'b*ë™%^Ťm{?L~ŸÔsHĹ7CôăL†ľ¸^*üIîżLˆćŽYňß0šöăŹó]’[ ÷ źďŕýŒűż îőČŚ¸<2A’ŢOý`?´+č@ő¨°G_[ˇˇmvބĐýçQř–Ů *ȚˆĚŇâTuĘÄ5Ű Ů fí8­ýH\ ń5•Śmœô‡Á‹:PŃžŚEŸÝłčŮŚů× @ŞÖ5ÍŻ eBERćc™tqüYŻa×çŢä7Ľ0ĄŠ~Ö[Çę"ŸÂw 6óxě<šęň”¸qâŸY÷#„Ź.ţBŚđɀvŒÜťwOž˙ýď;M:Âş'7oŢte4ŢĄ*IŽ¨š~ýşAüŁ ŽH‡ 7í°żşőֆ\+ ˛qä‡}UD¤=Čh# ň{üřąsэu_˙ú×]c1ʉü02ç¤eAYöĂ:-;ÎS }OFĄ†tK„BŮ‚‘^'i¨sF—cŻÓ4”żë”IląŃ0ířÍśҗuZ¸P4™W_აU$ާGľä¤ëŠőڐđ§Z¸˘ wDńŸĹâó<96ňDý Sči˛ĐńýrA‚ŠěřŔ÷Ö`ӊĞ<IVnżŽ[ćĺ'^ş—ŤAľ+˘š8Šw'ó>źřdW+żTqšž§^p°*rޗŇű7]7Äűü屜Ÿnť´ăĄ—Żˆ2_Qzl­÷ă}îŠV!(łżł?Шě> §;Hčš°ërÁOžž˘S&=`1'vş-Ć&CËaťrzť˙˝TrhĂCťŸ}/říŒ~[¤‚tÖű]{r",zBń=ůBÔPšÄť&žGu7– ˜lúĐűOĎŻé{Ȋ§´Üe!sýňűŢ`ü÷´DU!§^+{ÍĘĘä—Ďś)ŰňéőV:?‹ Mążś Ť]HjmŒé˘Qţ[ăo´Y‡îťĐuŐ|íqCĺ]MËŔď]Š֋.ďcýf¤ď‚(7°§žićۂUQ$Svf¨l]„!ë…?„RlŻ_~ůĽŃ@8ƒ‘v¨4cÔĚWžň7"#ďĐč‹őý|ôŃGŽ’‚ĺˇß~;÷ţóđáC×iƒőđ Oţřců'˙äŸ8ą&"$uă ć8öC9 nB>Ż˝öš+#ňŐN&œŻz2Ňëă{.˛×ŽB!d¨lpŒ‹Ţ|ümv˙Éöi ŮÚPöŚóUS•w•u*4iL 5’Ůőlx%—‰˝˙üťÉ=éţ-¤÷ó¨ý´-Ó؉? čŃ0ĎśŢčé‘vODIeĎSY˞K?˝?(#ˇxB(˝ÚyVJI&Fáł wĆIÇlœu¨ťËd~Ÿ(폈3/@ý…ęrÚ9‘y—r˙e!Ŕ ď÷ČźđłěrńOřŢ­ ˝÷Ëî™ÚóÍĘV8‰$‰řV˝ç ˘Ÿ,b§Kv]ôş…ŽĎβÁ4ą-›ˆ‚ě߅ĺÜĆ;ń¸Š[Đî‡vDëAíŒhÔ€ëuXa‰}ŚýďJě}{^@ę¤Ţ(UT‚śGéqtťć‡Ža´Mę`Hőv^˝NPěz,ë!ӞS: Җ=t|żüşŻľT裞;‘'ňQřMP~ükĆčőŃśZż|ęAčuôĎ÷˝°?ڇQ.Í_CC"=ö+zdLƒe\/kÇaݎ㠝i,e×U…QČCŰşíďцËúžđ;FHsŚžeů÷Ľ˜ĆŻ÷řË ÷=Y"VĺłIČfBá!d [qŇĆ*T6 ˆTpPЁhëP!ťvíZÁ˝6ŇCŕƒšVlżřâ‹Ük†[Ŕ~űŕ˜?ýéO]^¨°Ŕď­[ˇ\~pՎĘҢ<Čóƍňo|ĂU?˙üsW.­¨â8¨¸!TĘ>ůäW^ˆƒP é€ăb;GH˙Ţ{ďšý!Ň 7ňןąʀ4˙hŃoD¤ŃD!„MŚYÇi1̗Ouä:MĂyK]§|•Áާ‡Ź:Q ˜ŢŢ-8Žx°Ţě|’6ípMşA;Ö|T•¸)–IČ([Ö8ŘąœŠşKm¸’ăqG>"Ą°T¸d˝Źó;ßör]K4QV‰ÄEMžnĆzuŐ(çĐ\ ýÖůr”v™Ä!o?ޡŤp/9EO&f*„đ˛—ŸŰČŚŃĹűÔď5 ӝ¤2é(31†śu˘­m|˜ëw m…(hĹ8 öƒŔű ­űXńŽSEžđGĹEęšţVoâÖ ňG[eČłŒ–Ł­yŘď):pŇ Pp<´Łj[Žş¨çěŁ^ÔŐӌőVŁçŠżQn¨Šçn÷WÓ؅Ź)”´Âü­mŞęË*´Â\Ż™Ųô`żĐď2ęůëůá Omď¸Ö*(Ҳa_ŹłĄ'öEť˛^cţh>ęQJݟő@¨żľ@Ťŕ ż ~_řƒ´8––[Ż!ňƲŠŐߘ˛äfdœË ›3qšäő˜î=Ń%dýĄđ‡2*Öe¨ y ¨Áük_űšźňĘ+ňĂţĐ g´i݋ę5‚T„ Bĺë!đ÷ ţ¨8š>řŔyíůĂ?üC—ţ~áÜśýčGn;öĹôçţçNœ=¨lýěg?sĺůÎwž“WŘT|„|~üăť “ }ţĺżü—î\QÉČ_=Ą† §6 `ć¨Ü˝ńĆ.O[ŃŚqD!„m'Ô1Sč ő@yÇLAO“c*Mě2 €Č:P&Źţ­{™ő‘2ąDAT#Ć Š„ (‡–!c{” J0i§Ąő6 ËnŐŚÄńĚB”M"żžf]đwD‚ą:݋yL‡(äĹ7ÍË8ľ ţ}[ĚÔĽ(ŮŻř3[ y<˙;U™…JŰŇŹˇĎeU^*6A›ŁzmA›"„h th'DťŁś{Ş×Í3äíNJ~T4ƒI=Áh;Şz˝Ń†Z. yř˘€ýŃŠöMx_G{&öU/;*ÜÁĘ7ß|36ůď!ŇŕüTäÔcŽ‹z–ŠşžŘEý°ŠW˝ČŤ€Fτ !•¨aŠ„?đŽƒŠ"*/¨€ĄB‰ *ęÖVHŐŘĐP^¨ř =*ZZůAzlWA*YZqB:xôÁü[ßú–K‹PcXF éîßżď„?H „=čüâ/ţ˘Ť˜ŞkX”G+Â:ŇűCx„ < !-Ę„Ę –ő<ŐÝ.ćh @…ŮVĚhTB!dť(iđ÷F`§ło•^~ʘöt2Yçˇ3Íę= U§›5˙ËbŢăo{ůŰî{sý{žű)$R[ÁšßÉYxćĽ(öťLŇKîŻ\ˆ˘ĺ°aż űô˘,ZŐj\ŰĺQrţŃô=ľ[TüˆzrŽ”d­p÷Šd÷ĂTŮ}Ż?qńťç |˛ÚSűyŽŰE"¤fý>TuˆĆĆ37 ľ¤Ą Ô+‹˘„ÚöTx˘!•Ź'ő@ă{Éąž|ԍ”臏ŇüT܂öG+ÔciűŚ¨Š˘i[Ź ęĐóÓvRĆSËd'˙:éţ ňÁ˛z-Ň4ţľľ×éŐCć§^ŒěľÖ뭞uTÄd˧B*{l ĺf˝śŰY6oëĹɢގ°Ÿý ôşéžz<˙}˜^+”+Ôioďë 鰟–šěž Q&J*˘(ϨP źˇë^[žÉş’Nןé:.”çrëMÓŁ˙Ö#‹n’jTd‹;7ěýř™&?ž‹ó˝,ŻÉęUž’Ľ#Šńďů'ďŤ÷Ů䖉K;c&é\Mz}ŘCś˜*oţßę ÁO§‚ÓüY”ôńíe!ź´ íh#ź}űv.ÂP4>XŠh;D{ĄŚúĚŞëFŰ ľTŰ=mč,+Áßږ‰śQ˙8ÚvjÑŮwÎ ŢŮoÝşUőeĎC˝ľŰ}ľýVKâظ6ö<Ź(Êcěţę)I=ďŕzXŻA~č,˝.Vă—ÍfSÚ^­eĐëţčuՁŚö~Ńü­P+äŐ燁°ś]ŮžŠWx¤Q1PHô¤ĺWń’z*ň/´Qcžęšjˆ0äí87żźuB™Ž(ÍrźP™CçT•˙ŚśÉwq^óćaŸSťÎćMf~œžý3őM Ô˝Ú ňř˛PřC™B]ŸëHˆb ‚AVG6 bńÚkŻš @:RBäĄnR­ëSÍ[ŃJˇŽěŔß𨣥źPąŇÔwďŢuy˘ŞnSQ&ü9ŇáXzqnqš2NňŒrÁoš0ä1ąŁŇăĽKqáBÖg+ă¸<ť=_¸°é7YÂDśD,űs7^Ů8żV^, ÷­˝ţ‘Řëž>c‘ąň$˝!śĆœ‰}šÇ"Ö;iŁ*<üĐś$dťĄđ‡2…¨Üiˆ.„ŇB÷ý÷ߗď|ç;nTBn!l„A˜ ČQ/>ę†U=ýˆj ćAŢâKG†¨đGE6ÖMŽ­DjŢ@=ţ |îh܎´PO@˜– ¨IGŻźńĆNźôƒüŔyřAHąW_}5F(Ż ‰t$‹?”ä „BY{Úv˜–u´Ş¨ *o¨ÍS-ą+äâ|•š,—÷Ĺß#Z‹kłÎ”ýŽśÓ¨ę ˙>mCăMçWűť7Čż*şüëGśG…A(ZÓzĄ˙|§ĹŘ`îD,Ó4}ţý‘á‹~oř÷iŮńZ{HČ;ăŔź˜ś?´ş§ Â! ćIČŚŇDSH;Nßéî žľ+şuń8™ÂĎ~H„3+h´"_ S棭xÖ/ë"Ţz.úw›ňŘ<Źg _ôSľoÓsŠ˝wo奋R•Jžuhü€É#—ĽäyŽ;N‹YŚŰ„ăLDĹ/ŚLš é'űé˝#˛Ÿý>î˛B YQ­=ž˝ß˘É1ócËtYM!Učă u&žŽĆů§Jëj.u/ąš°r˘*^[oýŘÔ ý|đ߸p>“őşĂŘ{ŽĘ˜—¤6Ý2ˆ+ęĂóäÚ4O˙ř…{Pź{;[ďî,őÂŐyŮWîî 5óçĘzó§2o[Ą6 ڋ„lţBڰ†‚ş(Ĺxč!ˇŕ˘ˆbţ Â{ŕ6ŐƆ` ’—¨Î TĆám"Âʃ¨H+Ě !엺¤ĹBxůA>(ö‡čçő×_wb!”ށPFďíˇßÎ=áź°ŒĘ'öÁ„üQNĺ‡k\eŔ2&”űŕąeÔQ!7ż„B!ëH]‡ĂŹŰ+;pj;v˛FČ(ih×ŐĽž Ć%KŚŰtÔ2&¤ƒxqqîlHÁÚpHŤ.÷aęhe)Žâp˜ŤŠŢ"u¤ˇ†‚ŐcUy†´3ľź8'ŘźŘowwϝ×ĹĹ0ĽpźáP˝nŞ}r>*ơĺAc"B^Œ“üÓý‡“–řgZěŮ2ĺÖľ$τŢĆŚ?ĽĺĎnŕHYz;ŻÎ'tŸ¨b‘hCşí°°}ör?â‡1šČł*=ÍĐpůH:ťóc=FŐďyË"…ŢL™töšœâ˛Ž3ÓŮřkfćÎ"Ęď'č ”> îUôlPčU-‰ŸÂvH7éœiťMĹzњZ_ąěݟJ?ŽĎsVlČŹ:ĄLŮž‹J? :tžýuü„ŇÎtóGl„1ue˛s%.Ř4öĹoĄÝ××fÚóő퍴Ρe˝˛HÁv/}ňýŃŰľQMoPăFňcńőţ1üKŻ×Đż2ęÓĽhł™ď ‘Ņ}Š”˙Ô6/™Ęǜfp}{űWÜSÍoˇnŢ mÉóĐśŸ˙>­zďEţ…{ŻxßĘd•YżœëśňSíꝜ˝…ЎsőíGB đ‡2…ó¨˜ Ň ‘ D?o˝ő–ë4€Đ Ţ`Ä;čD€H뵒¨Ąˇ řÁ:ě‡ő6  ó`=€Pů@hŁ1ĽąßŻţ꯺ĘÂaţíoŰĽƒĐ  8ŽĆ ţĹ_üEwlˆwŔoýÖošŽ¤Çö_˙ő_wů T™–‚œÎ÷+_ůŠ+ ňEٰŒN€ň"-ʧ.ÚYbŒ !„Bśš˛Žo´šÄ6f}ąĽ+ŽŢ'’źĺRĹ-°+5Lƒ†¤Ěv؃ˇoßvś*lťŃh(÷ďĂcĺcç‘ömÓ}aÂţC~*p×ÎůÁÎÄňýű÷] ĄěŃ{÷ňOę#ŃÔő=öxţ1l>š8Ű[oÓW×&piçć‰Ůš”a“Ż{9Ń\śŠŢĂ˝~/ľ 3A[ŐsěďßćwX…ď!!dqPřC)Ĺ  xAgF!ŁĂ• yĄ„5ŘŚŁB´cëą?@‡ śŁ3؆etFt˜¨ˆF=ü O ŮĽB tÄŔ@Áv”B †íú7öŐtz.˜#lÇńF…FčBzü­ëQfŽPVlÓóÂľ¨ŞđB!„l3vŠORŐ5اÓîn*Ń°´Čؐ Qփ { vܝ;ˇsťó7Ž;ϕ*čę•ölÂwß}׼‡ÍŠă@źƒm*‡`ǃčů¨˝¨v+„A؎иŘW˝hBl‘ćŘn˝HÂŽ†í‰sƒ A„=8xŹD:xŰDy ĘÇţ°K!.RiQ&ě‹uXFyŽyB¨„ňîěfĄlűIůNdg°ă~žÔ#Pœ{HÂů#_Çe^‚ż/fJű°›„˝Ľé=QÜg^VĽqÓëÔ¤Žš †ôůĐż‹# ›ü&łyů„ÎŻÝ9‡đ;żęîłBCy&|)N‰ŚÎifšÝ;E“ś÷ż7ÜŰʏb‘˛0áÓíŕÎIę˝grśťqđvśw{íţ2ÝiڞćG$d[ˆ€|2%œ^ťślmóÚî×Ö{Ď,říŠ*PŐöÍ2щcă: Ő5(ŁÍŻËNć<ݍţ­:nŮşśB?M;¸L€T&ŞÚ^—ˇ/6*KkĹI!ąOYŮBçúƅÄ:~ŢžŔÇOcˇ5¤\]?‹Mb̊íšŢď‹,Óú’Uź:úů‹Ď_Ȓnî+HœYŔ[ű[˛}PřC™Â~¨œĄóAĹ4:Їa[1Ĺ\C/¨étě§FŠn×ă¨AŻűkűtˆhٰ^GzűŒVRľŁÇŽ@ĐüľĚ*f(ţ­Łť­QĽÇŐüle˜ B!„lÍíšđˆÔŘ&ő’PžžgCř›ě“O>qá¸ŔÄfCGÎ(ÓzxxU<¸ďlIČ!°I=ߌr;„@*ƁMŞ!jałB´ţĂţĐ e° ąěQÁvD˜Yü ’XĆq‘/ç˜C„Î%xúüóĎ݄rüüĎ˙źŰeĂ~(3ŇCpƒăa=ňýĆ7žáňRáűמö5÷7<ůh]Î?zôHţüĎ˙\?~쎁c#=ʄă˝<’^bĆGC'`BĂĺţށ+ރ á‘'–Őó&lj\#ˆž÷˝ďšňŮĆy6 ףšłVüN™2Ęę$óth5ĄŘXÝnÔiŐy…FɇF¤űéť"Vľ é„ËŽ3Ďu<ýdE5 ňϞůŚEąçŐg:ŁŚĎ3ߥd›ńŸá6´zć ť6”zfÔĐŽJĂŽĂü2ÝĽe€ýwÂ# ěOŘv@íÍyóSďéhs'|X)ąř6iH”bi"‚˜:d@LŁů„ňՑüôž]ÚˇŞ,6ż:[ĘŻJŕŃÖŽ÷;öœĘIUB &×cżłžłý˝›ÔÝü}Ëʲőý žž~Żb™~žŞ÷3ŚŚĐn$„PřCŠA=ç„Pń rĘđ+we•DzJ­ż˙"*żUą¸“šB!d+ń@"• g.|QœŠ ŕńçÖ-ozňůç‘ ]…őiˆŁXĆY‡kЗĂĂ+rő꥟8Úw6+ţ†pç0™2űůůEŇÁą/OŸ=s‚ˆeĐكpXŠsů䓟ÉéŮib/öœÍ8ŘIE:Č<Ž]ž×Ż_s§ď9Ř˙,Irz"˝ÄV|űwděF“]'ÓŁGłşŻČ;ďž#ÉßŕôôL^źx‘tB˝t% y_ż~Ă ŽĐ˜‡ü!B´“H…?HĄRj§ÜőÚŮÝqóÝ˝]9ďťőđöƒkˆô{ťűÉńÎÝůŒFcšyó†›ďď§ĄmďžňŠ+oęh,üą ą'iĐá‰6:Fٲő_öăśm)ľeŐvşĎĂźĺ5ˑ ´Ě—ědŘž;0 ţ‰+žqBHç´ůöšÎӚô°ł4dŞ~[!V˘ őÂXÖ&ŠýąŻzžTđ7l2ě§vY`ƒŞ˘sŘ]užĘŹ^%acZńłg÷÷ó˜!´ƒçŃ8ţ†÷Kě!öƒPžě:(8.Žzw×kŠÜQ;Đr~u‰ŞÔžg–śÜč'´Üt[›4Mňh*÷ŠTWĽmSv_ä QʄC–¸Ëß÷2)A]ÖąąYXĺ#„Ě…?„B!„BZĐŽ‘˝QƒwŁ-Úń:N''ôÁߣdËHĆńXâqÚ 0@Đҗ~2żzíPŢ;řŞќŸĘłçąşÎ˝,}ß |<řR^\‘;wo'%ű.$@؎c] ϓýěSwÜäĄŔ0Š[C'ŘF>¤y™ěƒüŕuů|üńGî\љEč”Âş~ŕŽ3ňÄőAţČOXFgšŽň'ĺJ(›÷r/?Ž(…OúŠńôt‰˘ŸBOČËÝćxqőr”-7É7÷vEYŠOtl: Á„ýšî”ąßˇ4´CŞ÷áłNˆĽŠˇ;yK÷SÁ Ä)°ĂÔťl%Ř?ęů§ ؀ýŔkl2ذýě¨ÔćJť^šxţŃňŕ˜ë¨çœ244ĘOŒ˜~úӟ„?°Ů ţyçwœHCÔú¨Ç¤W/=8ˆx`/śŔžÔ ׂ*\WĚqü.)ÖJŇ„!m=ô´ó6uyâ żŁ–ĐMV0TćɨŠpľMżěóx,ÚfÁJ—çş($ŠŔ˝€şš>“ëžŮ‹2ý,–~çJňăoGČöBá!„B!„N 5' ~B 8ďłŃĆŤ—I‡ÄO~ňq.ćAgć:BYÎ“őŻţ•ýŹ ™čLÁßč|ŃŃŮ*¤Ag y°ŻŽHVąöU!ĚłgϜ .ČώôÖrjžÚyЁ‚ ybŽ‘â?ţńÝžČ ÇŔ>(ć*BşAŕÖăK(‡Đń!3{˜ÓO!—LĽ€ŁF4 ›F9ÚźúęŤÎ‚`B ľÄKА^H{÷î]Wˆ€`3ÂĆSlŠ6žš˘6"?˙čý#ůđÝhdžú‚G#~é—~Éy/zóÍ7Ŕ)„ Ü!$B> ŠÇ őŕSŽF¸Ś°3!ŚÇľÄńp}ş$ˇƒ¤úw.˛4ÍżŽUńŔŘVđcçjă—Őݚסú^HęĘӔyŒÍCÓëť(ĄEŐ}Ü$Z׎2(4閺g‡×›R…?„B!„B–K°a+“¸F­h˛|q~!OžtAř‚ŽŒf§U=ĘCuŕœŢ^˘Pždaş:q4l˜xš°űiŁđtžu8?é_b˝WlRď÷2:sŠšöÚ˛mđţ'„Ě@<-.÷Qá6&[ PICŚ^Ăk…€`BEČbxśÝ…őŠCHóĘ+Ż”ćĄÂkˆË‘vD3î ż2Ż?jăA`ô駟ʽ{÷Üą5˝ ľqžożýśźńĆ•ĺPÁˇŠÔ‘Ž <UyRPŢ7n8ń†Ă9áZVyNš¸ľŕ2Z(}Qů6ĄĚCK¨Ň%!ŃA›paeűÎŚj¸ě{ Nô3ŤđÍ߇“ÝۧÁëÜBŹČ߉˘PřC!„B!dnňĆÄV Íą”E ËCHĄár˛6o˙㤳äÜí3%'/ă,“qĹ` łÔ"|”6¤Ąsf^Ú7şFîš6Ů-ňBl…|c™žč‘ĚĐŹ]ůPTéšÍŢ?[Cž ŁN =śAf/yÚčŻÇŻwßżŹN+˛áĚő~XŃwËÔwŤE؅x⍝4„4ŁˆaÚö‘F@œą ´ÂsdYƒ‘ěF閮:•áEçúőëÎŽƒˇ\ÔS <Ü@°˛Sá!âˆd Ř×zśÁöťwďş4žđEĎű‡nžH ÔĂÖC4Ní?{˝=š}űvbĚZŠ7ĄĄ+ĂkŻż.׎]—¨Ä&Á5Ŕń. ×ä­ˇŢr"”ŻĚ“L8W\CoC¸.?†ő!ŻIł2ü”‹OŞÖ•S•˜ĽjżĐĽ‰Ŕ˘L SrŤ*ť\ŢkŃĄ ĘÎǞo™řÇĎŤÉşm¤JÄVwŸęßóźOˇFŕ$’ŚĄ^›0ďďŔg‚bĄđ‡B!„BȂŠśÄĽéR D$ăŃ@âqĎubˇ‡Œ]㗠'zĂd:K֍œ×őž˛Ě˛6Ł\Óőîß|™{ëI*f›–਀měFy&÷x4Nľ?î~UŃOweÄgę˛ÂD-Ät sgFŰוĹ=÷|gRF—Çmň‚ĺç~îçœW|oŢ Â;ʍךP¨*džő­o9Ń P(ßső AM]˜,‘Ä;úwS ŽůůŸ˙y9;;›’őŒÇąěîîĺůŚ6Hö>2ŢUđôć›oşk1ʀk„sÂ<$ä°ëŕÝčwŢqb!\/Ěái°?Ž…˝ŽóˆÔăOÔBÔ\%üięĹćçQĺń§ŹsžĘ3Nڄ2ó…9Mźé” ›šˆvRűś]=ŚL2g!Ôź÷G—Ça[!› …?„B!„B–BWĺX=E2ŠóüSdşa=ý¤cšÓĆá¤â;ť‘ŃÚƒĚu߉ç bCł Đéá7ş˘C,؆Î"ä‡uŘiuťŽtF ÖiÍá js˛yôzýäˇďťű ˝$ťm'b˝/p¸{#ﺋrń›Hu#-ňF‡&í0Ô{ ˇąvH꽌mçççÎˁß!ł”{ ŤD ŃOž~1VđĂ燐ŐÊ|[sx A,g`‡aÂ|C!bĄ_ lI„fĽ×K7{™‡œ‰(&-#śíěěŚ6k…§œ\XĽR˜"šŃ1Mj.K”ŮÖć@đĂăŕŕJr쁝š`^•Ëqllě([ťëvSFűväÎ͕˘ŸţŔw"ÄWRB{väRĎ1M=žäůWÔIę„&eyú˜&Ÿ6ߗ*!N¨eçÚ*ŤŸOŮšÚgĎOßôüě3Źśě6{ËÄjeŸ&σŇFˇľ¸wŻ!d5Ąđ‡B!„BČĘĄ hzGNücG¨•5řúŁŘúƒHö÷öĽ7H…zb^¨ŕ 1YEAHźĐ™uśŃ٘=zäś!$ň{ůňĽË y éÁƒŽ#ĺý÷ßw#ĂFb äŤ!ěsďŢ=9:: 7¤.`D!š<Đqvýú5w¤÷:ď’ű.;Ń îܘđűC˙…úIŠŠźĘ:j°ŒCĚ0á^ĂýŠ{0÷ŒÜ=ŠaK÷âÇĺŋŽŞÄÇŤÉňU‡#”7ţž„2F™ČÖˇ#!lÁˇQż›°ŐĂ ŇŞ§îťŘŒ¸0‡đgw7ą zWÝqS;t"nŒ˘žDőö3Aođ/Šu¨*žH 9I`=ü¸`ݎĆe'°]GbcťzgÁú§OŸć}0! „ÚđŽ""ě0 č؁ŔC˝ŹhŁu(„ÄäBˆ´sBRçšÄßn:…ވëŽçĽÝÚ6ââőÝۉäŐ‘ÜšŐO:枥.dˆiؗӳ9:‰äů‹Xž>;–ăń™Ŕ÷“öŤÄk§ůć#äóÜă|ĄĽv“{}g°“Üó;ŽCîbo(çÎóĐÁ•çš@=˙ŕoܟà ămŞŘ/™vŚXŢI‡ŽČźd/š„ŰČźlŠGŁĺ4`ëCc;>ÓyÚ/ڛô_şŃş=)ްqÁ›KdBKEţaŇ\ĹßhÏÄńԞľĺĎSG^YŚ“će.Ëk–Ʌß-ś|…;ŻáťŠxí âwlŚ˘8„ÄÔz´J֍łüىˆnŃ÷dÇ÷3΍j„,ý^ŠhŔŠ`ďŠÍf…ř>–‰<4­/4oXšBđäÓOŽ•zŠeúÓĐFł6]Hô#ćĎŘŚ1‚äżĚÖM“ëĹÝÝw>öDYŃa¤‹ąłK˘~şěţ.¸ävĆä]?…{ýĆÓël>qŃ{çÔqâ¸đť…Ňú^jŞ~ßY웺2Öí[ľŹčš…l0+˘izĚĐő)XůœPŮŞ<ĎÔyąąy‡JŰHŮšWyc -“–,Ŕ$t6ŻţA!s@á!„B!„•C… ń„XFć\ä#‘w“ΚŤ×e˘qbŸxÔ9=‘łóĄŒFĂtôk➁ëěďe‚xëQńFzŤ˜Ň@ Ď=şŒ0ş˘LašU8„eäkźąźúŕ\l(0ő*ÔČÍżű§E#`°Łßî•ü]’]5hƒô†c{'ŰĹäš^ŮĘť7_Č{oŒĺÖ­ vzrzňB.†gnűÉĹ@ěĘÎ$>{!ĂӗÉĎw%™Ňp]ř-S K:˛÷K*¸‰óKěúŰĆÉ32ËÉqr˙ŸžÉnrż^=źęD@ރ‹™Ÿ¤/dx~‘ †ŇLŇN?'ĐÇF6“uĆEiœhȅÍĂ3™ ěÉóĺźˆ†.I˝9OZqźœćë8ĘË_¸óUPĽe”s4™QňŚĚîńŒbęDŻ…Č$\IÖY•]#;ײ4!}DŮqôć ĚqәŽuçšJSâĐ3›_ ˝ßâbÇDĂwÖťŔuŘSoTýŢă…wáÄsçr~žž{ÇŁ8´‰¨ˆ”&ç5Üž˝‹„l!/&ežWÔ[JH2ťŘ BĚŮ:ŤIŘ-‘j{+˙\äťĆî-™ˆ2˙Ôxžc욪ŕBíé*‰ďEĆć[%Ji~]‹ÂI-Óěůɔ Čż/Ş<ҔÝCšŢîĘÖűIŻk(żÜţńýuuÂ'˙w ĺŻ÷Gh__Üc…X:ůÇőˇŐ śücV1oýdöwŔbˆkę^MϡíłCQ—đZBć‡ÂB!„B!+GÚAŸ4âG}×ŮŰëĹŽł>’qęń§9ď);;É´›če°Ëî‡G™Ç^˛ŽŸ7JBŒáśÁC –UL€×t&C°ŁéŕŠiUüƒ<đ7xţüy.ŇFil×ĺǏçyű ė椪Ożú š Şś×Đúř3x%™˝1;˝žƒŢHŽî\Č푝Wáqg §;đútę󚐞<ŰĘNď$ůëT˘xO&Í5q>˛Ţ =ôňz—ŢŽÎĎÎe9rמ={žĚŸËŮéůäZgBľ,Óěy:çüaÝŤŐŃGŠď„ˇ„M§ß1R!čDl`—­§ ÝîBn‰†ůďuݨĐËihŻ]gťćiĽđ…0ku9*¤-ÇMţ÷.ö2,¸żâBAč§ Śp˙D…,ŹŔĽĚŒ˙-óż!ĄŒÝćﺌv>9ˇÉ÷Đ JBű–‰ęÄuŘň†źŹÔĺ+U}ƒCËuůÚźëҕ­+KÓVüReW„Ň5=F™řlۨşWš\YŻŰÖňčđźÓ÷Ĺ&Ő˘ !˂ÂB!„B!+GŢřeF ť—á¸Ň•ă$Ý/2§bt¨ěě%ŰÓetŕŔóĎÉéą:XĎ>÷źxńÂíŁ!4 öS!Ž{ď޽ܝvč`:’Ŕ_|‘‡Ó˛Cđpž -°˙ǃçió 7š˛“š-Ĺë5L×4żv@svv*ÇÇéý%˛—oĂý{ôňL^“ÉLH–ŔŸx\‘܃É(ڄʤbŕ o]Věˆi¤×°sځiÝč\ÓÚÎRÜëÚajC†ĽŠř!÷”‹áp)“ç1Ę;Ż_ż.ßüć7ĺő×_wď“ý˝+rxĺfrűůů곍×ďú xüÚ5×%,üIˇES˘Ÿ˛má}{E˝Â9ŕZĆń¸pNQĄS7îě5ŃFčS÷›†:ęl^śCÔďÎÓť0^ăܛšDŁä~:–GîËG}$?ůÉO“ôŸĘÓńłÉž™8+Î{ORáNŰÎIBČf€ďě˝ńĹēc*Ŕ¸oŢjďÁ ¤ŽS¨Š°<@"ňĂ>ú´ŕ’Ú§âźE,c˙ťwď&ű\ÉÓŚá -QÉß)ąžÇźÎáÜVVńŘšÍ2*xţ™oÄęh$ĆŮ\ž&$pţ5𱞓|ď-ţz?o[ÎÂ7"JݟŚ/űVO?œoŮ~~že‚[~ߍMé÷-.÷T&ü)eŘđÁš^ŻySš\żĐyŘ}l¨ŻPú*ńQ™g›ž“ďÝÉó2ążáŞ0Ý&Ťx4Č+$Ü:::í1<ŻeBL*!óBá!„B!„c2ĘŢë2ĘľľkAĹ7nű˘ A2Ľs„4Šăd÷˛Ž›8ďźQ‘ćÜ ÓFĂsĄcF;…€Ś­ŁČŤ€WŸÍIťđXąÍ,÷ú%÷ŸŸČÎޙ<öĺʕ}ŮD.LŃŃŃą<9ËĂăĄ<~v!'çI‡áx4üFât‘äa¤l¨:íŕŃP VŚŰŹŤđDŸŕ‡ˆšÖÉ ~t_őř3ńŠËPâ\(´*"(Ëáᥟůć›nJ…y'ţô÷RŐĺšwÇpgŽđ›íćů¸ŽFţ俏dŞfYě<ʡWŰŮWüŰut9QORÉ:˘P‡ŽQHÎIȡĤŸŮëd“öÂąéţ˛]çČBwšűއPy’ü†đĐÉńń‰{†>x"G/Žłwüh1ϛ!dÁˇ öÝŔ ůę‹aą él+`E@ … iżqę1ŸTč+ůwËZödďOŸ$בěpÔAƖ[e-wżÝÓ­VĎӘ~62“éƒ~óL_ôÇë“LŤ™Fš§‘ş§ťďRˇî­-×XH<œt"ČȈČĚŞŹ*?ULIáÇ[xv›9lĺí!˘¸ś҇B4‰˜¨Ÿ”Ç;D"âĎ&2I~˙:ţ<\žöž{ş‰č¨ÓžcşnBޟ"킾>áPźşš“”ň}şČvNšŇ÷#ĎOá&żĆť ˘ ą4Ţ!f—žöfr˙%ĂMHmń]XIľNd˃Áp;ńÇ`0 ƒÁ`0 šôCLřYŽŽią\R‘Œ6ĽOÄĘVŤ`Ź)jrĹ2ă›(Ř5L1Z„p‹fŔX“&dMĎĹžŘ4஭m€ďă‚vĽq1Żč_\Ň‹`ôť¤ƒŮ2Áäěěœ.Ž*ş\,ézNÁˆ8˘E= uő/ &ÐX”Ą^ŽU)Qˆ‚’ę>uREé›iŽ mÚȢ]ÓĺPmđx‡H<ňŒ4Ćç;Ćé/—č7PKfęőgu|Ň×Ŕľäzš° äýÄŐ\§y÷ŇÚ9›H?ŰlúAWßu$nŠ??§ˇiw⏎oˆŒuS|Cy¤űt9J/ĺĜ>âO~żšŘŁ÷K<şĚľBĺP™÷őSó}ťd6a›oć@üŞ[}Ç7ŢŐ˝|¸{âŢ)pokůl0n #ţ ƒÁ`0 ƒáÂńŕŁçäU [DâŤřŒŘ…RQTiđˇ QČôŔô8ŘrŽN *Óׯvń łş…8!Dž`™ßBĐÓů@sž-Ä ŮÖŘŢŕmř°Ź<˝šŽčl5'z;§ÉřšŽfK&{@)ją Vř‰u:ÔG* *4ŢÇş‰šĺ“›"]¨hŽÔi 7ôˆŤ$­$ËńGĄŁ˛ÖşÇd_ŽřSŐç}ôţyG­1y$„ЎoßŇ÷ß˙HçoĂł~ “ľ0E„9ˆ?uf”Š‹ü–¸űŒY*×ÝçťŰëmB­ÔuZâOîălCDůH“ž}vLEů%}öůIŞÓn˙uVxľđ./ĺd¤ƒáS„ôű Ös||Ěű@ •wŽă}Š5^…ôR–÷Şô!řheHyżČš:śĹ-ćÚ÷Ő5E0%yo“jÝ|Ž*ăîŠ_ťŢşÂ żłóo"ŐôíËUgňkő‘at˙†nHŤôxťçşD´1ŽžßۄŐD—Ą°úř6}ţ›Ňť úν‰ěŃwíœä-űsâOG_Ůő…Ý”FG^ňřúňl(Ďó´mŞgťb—ús×ŘŚ|%ÜP=ÔyÖö]ůď`\Ű\ó“€Üú‘Č8JďoTÓ4 †m`ăÁ`0 ƒÁ`0<8ô ˜E‡ ƒb+eŒ6œť3‹gÁ Sđů0ş@ńCHB`cĚü–}!@č™Ęš4çČ,ňžAňmŒ†.n(ÔCÔ66.k&{0áĚŁbgś:Œ.%“´[şŞˆuq‰!őT×?Q7őějŠ/DžźÓs|Ť $çČ~ßÎÎÎX h]ěůƕâl !Žż#‘ŚRiy?•€ÖXW1˝HîďňrE×WQÉ!ގë™ä2ď›űúˆ?}ët4KÓfâOžţ6 Ý}Ýí(7רD,S&•ľőžŤ( —şźînfżÁ`ř0w&?'''üE›đŮgŸŃéé)ż%Œźú˝ŔşĎM•ô5yHśő{;]!%>ϤöŽPFb`&cgŤ z9Îub‡ÓNă>×U”ßňţ“}Púqäz•U†ˆůű/Ď9ڎ…ŒÜw,ťŻOÝq˝éş 29‘DŇÔäě÷°‰L˘÷ßDŹäulŸţQž—›6y˜žüč#ÓäůÔQq¤uÂŽŹ‡\Çöĺ§.ď>rŽ—ßËŚ|ši˙]ő tÚö9~[Ü&îĄzžçuß1`ëӁKý÷ťŤŹş‚îąÚ †OFü1 ƒÁ`0 ÅŰáٰĽľ[cxî§5Œ§amĘî`@TĐӀ6Ô4Äĺę `÷bißńGâ×Hý÷qóžul".¤lQx}]ÍŠZŐTAՇP VŒ% ‰žÁŢhń'ÔŚXłëŽËŽ>cśĹMr$Źv˝ —>cžU¤ N~´âÄßÚp]ŸX1Ńű…÷zi]g!ÝŤUňŤ˘Ĺ"’ ˘]ÔÇüoˆ%ŠÄGžńŐ]ˇť:żI?;Ü&ŇŃÇLüá݉ËĂ3y“íÚ›NäYÁÄ dďNŠMžZ7jÎ`0|Ş éĎIŸNť w˜ůťąŻŻ&Ę?}FńíŃמslÍűg¨}˘pŽôy0ЏÁ|×Ű ę>Eóţ#Rď?×C´YWüč#ěˆęĽěÓ}hM‘ü"ˆä×éRř>…ěšNÉ㹉ô“ßc_™ć$M˜–őI(ĎŁ]ÎëKŁŽO÷Ď$ž{ž"ĄÝ”–źžlŞ?y˝í+‹Šď~GˇÝ÷]f0 űˆ?ƒÁ`0 ƒÁ`xC;šč>ˆ÷ń[•üń¤†Eř]5۞@|ˆĆ€•Î? çObTWDľĐ Z‹ë/œ†*ˆĚ °ŻođYČr|ÍHąĎŕą˙˜Íú+Zcž‡ Żĺ üS/L\ŤâÂŔE֘ˇ=×9bâHŹOŠŕ†g ¨˘ëŤ9ĺ¨ńˆÔ˝ŤŤ+ŽËb˜"¸ŽătŠ:+őUĺţĽďZP—ź!n?!M YH“A´ňŸ(°É9šH,×ň•¸ ÝČť•r­+ié[†6n ’ŢÖäçlK^ÉďE~ë¸u?MökŽúş’ÎĄë÷ýÎďC_OƄ8'ϐ\'W“Ě'Läż5ÉŹďy”xÄĺ­(ü݆pň.÷q ]'¤ü‡ĘtÓ>›H'ůţ>r×§ů–ťŁŘŒôc0îFü1 ƒÁ`0 ÃDTŒ„‡˛,šmOz ł˝'.lœAg‘A°ĎŠŞaxÚ ƒĚ Óů@ľŹőÂD>hž„ňs Ÿ*2†/¨Za`>’Xą*؅*ęŘÖŤ‡kŽ%;‹9ťĂˆ,0†€đƒz b›&ţˆ2O>ăş˝~kÔˍ,â/7Ćč8|FLaMœ= 1÷6YҖ@QĆĽźOďIqŠpÉXɆŮ:vbŮM„!}ŢĐ1š_]N9ůGçw~\Âčűϕƒt~j2UŸ[ănmN{NNŃ¤ŞžrѤ#˝ď>qbß}a_’ˆnűňý9úŇż)żďť$ä஢{ ßNƒáà ƒÁ`0 ƒÁđŕĐ "‡˙Ľš-**)âú‹U`ü 9ĺ]ŮFă}|}ľ6č/˜˘ć#ŰŢw]‰â‰ 7Tč4çƒŕ}ç>~đ{rU$őľŻŢčm=¨îąĆŚËËK6tÁ]˜Ž_ROĎÎÎÔ(ŰČqŠçBlÓĐ,mˆ‘°bčęť?}^Jj–ödˆ|OƒŮ:?ĺ7QBŠŠD=ŹťÄŚÖčÚ5‚QşÎÍĎyNü!ş[âĎÇi(hëWkp,\Ń1´ˇTPmTŐçőČ3 †O C}˛mÔfôyšč˝ń'[tŇ’;”~˜?Ę*f#ŐżA§˘äĎ+RšŻ+­ ď\BšżHăq˨Š=h`ĺjšÓ‚j—ÔZŠ’FEÉaůŤ:’u’ ŰHŽŻ#š7ń~Řľ§‡šĎŠ/Ďjy nP”Zc"QR⛊/ܨ×o˛ˇďÜWVůÂűżr-*aľ0DPÉË0'áô•ń&ă|ŢgČĎÍÉ,yœ}䙡ëč>˜vIŹÓ!×…%é×éo}ş˜“›r"•Nƒş4Áź¸#ýS­TÓWîZĽű´RT‰ëśŘöŢĺz÷IâŘTO†;‚ĄoŮžíü{y(œáîpŸőĆ`0|:0âÁ`0 ƒÁ`0$˘Ą€’;óIýA Q‚œ ¨2‰kih ž–^ťęZŃ}Łoßó>t /l@óńůuBˆĎŐcxŢ}>¸Ă-AÜQńhBN•fŇkäĆ-mŘʍC€6čäëÜčľ­ě}Á{áugÖŁŃ˜Ý‹€PĂůNŘśŹŇś—2đÔOŇŮâţýŽáiCxŻöš0w†Œ;÷xYm´”gĎ˜ÄxŘq÷Aĺ3TlƒÁ rўL§Ó† ŞI Bú×°}éD]q+‹÷Íéé)ÍfłB¤>Ĺ6ýn.B›W„x*zűö,lŻččxBÓŮ(‘ZѝćĚ~ÚiÔŧDťšXĐĺĹ]WKšB;;ŃÁÁ““q¤ßâ32+„Ä‘ˆ°),H?PôUM“Ń„ DCMśę(y´–żC$­ŽLä­‘K$^ÝOAŮbą_ť!CçĄÜ•—V™ŃIň’~˜VIÔŽśtúuzé#őĺĽÄ-ŽŇrÂřJҌz..%Ic~_B˜Ö}DšGœƒß¨ë˛_ž]Κřƒ}pM+ůĄďÇóţ%҂çIí¸fNX߅̲-ieˆ“c×ýˇ…ŽBˆň:“óűśó°‚m E›Â?TlKŽť9"şsÄžěýu­ ç#ţ ƒÁ`0 ƒáA†źj^007‡ůBĐŐĘşpcŇŚďŞf;:6€‹%5łVt" aÁđáĂË@:ľäjČ?ĘF‰/ÖÉÜ؁KáÝÖ†|_fJ÷ÍŽî3Đ Ţ_vźłÍF¸Ě@F$zw$Œ¨šĐ&#–ˆ?Ł`œtŽuš•„(*,D÷+ńb˘aŒÇwI7o6LßÍşD ꐞ\oZűáď­{üî35ŢsžöžÉ{ĘBňŽW-ć 62¸¸ FÜ ­ž%˙đs˘Ó•v|H†)ƒÁp˙"‚üšŕŋźýŮgŸŃŃŃQG‘$'ičcôç?˙™ž?NoŢźaŇĎßţíßŇt*Äż!=ľz˙DÎ˗gô?˙ç˙–Ëkúíďž Ď?L‡‡‡4™ oźšîöS7¤Ÿ?˙áôćę‚ÜÉ>yDϞ=Łq9n,E‘„R'Ľ5!~¸†”)éŋ$’ׯ_Ójš˘ăƒ#:<8dâTT Œ ?.˝d E€˜@Bý˜œźŹUg˜ěR¸˜ŚtžQ¤\„d‚c ü`ÁťCܟ áEČ?rOrÝ8é …%šX$™œôŁÝŁiľ!Öô4‰UÎë#ţ4ůžŇ‡|ŇNŸš€x$o„ôƒ:Š5öă\Ň„D„pČ+š7š­žƒă‹gű 8‰°ˆG“zt9Kšßˆ á4!ń‚ŘS(•WŠ ĎŽáéË Hâ"´ôm÷>t3ä&5möߐçççźÖ÷Š f9é,wŮô€úH{}¸‰5Ďťîĺß,CŘMůÉ5ßwz?ţô­ ĂG#ţ ƒÁ`0 ƒáĄŤ4R”⤠ë °aPš¤ńGâŘŻâ~×Ä38˘r÷ë 4-’ޏ2( זŰŐŁžŕ}ƒý›čľQ­o–˝“mEţÉi2÷9˘ÝĆŢŇŞ(SP‘P Ei§:ŰE×lEëţ‹‰/ŢĽrôԍΠâďBˆ3÷ÔäÉšSÜ@VşĎćłmžŮř,ĎĘ$Ć[Ĺ çŰçH\ĐčČŹ 6 }Є!~ţůgn/NNNX'7\ëm9/WţĄ˘?ýéOôÓO?ŃçŸNżűÝď(*ĺ´ďyŸÄw(Žy*ŕşVşa8ëWôOúžć×ttRŇáá$źÇÂŢcŢľýYvÄUW ó ?ŕĹEŮ“C„‹ŤkúůÇçô˛W4y|BžŞčÉÁ15˙ŽďÁš óń]/ɖţARłÁ.“Žtńę “2ÝiÍ×3™FÜeś}‹î[Ĺ3ąŠVääNr"Œ@P‰“q¸˙"~PKbĹ"W§ź­:$ëëy"˙DW¨‘<âôâţŕÚ „"äďt:áź•žÝžQ"2UŤŠóFúžăďŚĹbݞńvTŐŠ9¤q–Ľ¸­ÂńUˆoĹVlG˘MŤD„<”¸šüKupBRÓŻU˘TÔŇ)t]őœv¤ńňňŞQéąkň%’˛Z×m‘Ä$ęŠESţHď|ąŕü}Š‚Ë~îuÖŃ]]LťÜ+ň›ă çĎÂs…ümóÁwŇĚŰČ_çi —‹ĆkšL§ ‘ ëŮlăaRYŸ‹DÖâźK]8×(CI}”|óÝu:˜BŇM}ŸĄnPż‹Xݘ0ëâˆëuŁ4F1/v˙—ҲDš]^]qݑçŹ(\Rł31 ä(”U‘žäm•úU#şŠVYQňĽšR"ěe=]žgÔoŚţý=ŸCűÁ­ýčI˜şŚ÷ťľó7•›WĎÜÝBÚpƒÁ`¸ ńÇ`0 ƒÁ`0 đĚ736żavăMęHhYůDkŽŔ´ÂĎ&÷Cd áúÝUxH€AFíśÂi’PcűüO™UźÇš^–J +˘%’/šF_¤ă>‘C*OărD§NÉŻŞHF™ŃĚŠ §-‹Š 㹊JD [ÔžfuŸî „k„sĆa˙!܄kš@A§L„ýţ—žE­ŘNňžL<vATvßϢ¤ÝußÇmšh÷Ń€ßösJŐ}@”!„‰eÉ]ěŇk4n⋊1“ppĽÖ{DŐGTp˘Ë¤˛qK,—Q†•pÂ?¸w•:Vbâń¸Iă$… Ć‚ăUë_$ôL9|2y2^ŃĘuÝ6E×\e{ß99Cň…\ʧř6Ä9LşńńŢŁ›­6ĺ9ŕź)ĘNŸP9GeźÔŁÖ^ŃÉ݇’źá8jßMo"kéú…ýHŽ…(pQBźˆKúi¸V\ ÎOWţ<;Mžë¨ZîđŮŠbŰ ~ó7N$›Ĺşć˞Ťş")S͸ü ×u×Ý|Ĺ:ŹóĎsT˘F™hłaůŚĘ;cYbU,Ýv˛{oŰz›ţY§ ]ßA’o!ď{Îkúí.§ƒé‰Ţß*™ƒÁđ.aăÁ`0 ƒÁ`0đťfřÎp=›­ŽLňŐN8í„vőáě•&„ďlçŮћ;íX÷ rňOŸs[Ő×qUćČwҟ™ d =Y=Á×>ćźéłŰQ\ŽnsĐ55ż|KäŃF˘č’–tZľ“uĺ#ĘÂIZÚ|ĚÝ%ëŚiŽú CČ\ޡU$zŠFâśÂšBÍvD+¸€,ů˜äG[&:K#é‡ ƒĄB˘YçŰożĺvj*űnÂţĹżřôë_˙šŐ\@úůěłĎÖÂAgšŹUšĄ&őŮł'ô˙ţż˙&ě—!î ťú‚ĚŢé ÷ů/ţŸ˙‡–‹+ťLf3VŃŮ P˛ yőő×_ÓÂW4:> ŃlĘůŮ4ĹŇ×HŘźžŘ>ú8ÔaŸž2š BG$ŚŹŐÂčşhB}j„›€4†řqŻB&Ň.ÄqÝĆÄŇDŰ|űmᡐ.@RA=‚ęâÂq¤]Ž…:§U5ÁF>؇ű—cr=&,ąKŤrë÷1â|Ŕu%%úž$|ßýb$(M’[ŠxďOž<é(`ąjÍrÉnĹpŢáá!ç –m°_~ů%§ה8‘qŰ*y#ĺ&ä"}ß}÷•ץ]ëÔm€ű‚ÂĎjŐuőľ-pŻâ’đéÓ§MžKţ Ż˘*ÔäĆzźë=çůšFŹęÉç>Ňäű@_Úuúúîi´šßˇ’Á`0ź+ńÇ`0 ƒÁ`0 <>*v°sg$ _7ƒęMœšUxl°ŇG‡î OŚÝ.FˇĂű>˙V¸˝˛ń<Áť¸םÝFńO×(X­ŃT֒—×›=Ň/lą´ůÍÓ7 Ŕo:wÍP’ {Ýgnŕ6ť§ †×ŰŮçP­BNs?)|Cňń‰ZăŠ3ű]_y}ưs͌ęüœáDťƒíÝŢ;qí#Ş÷č™ű-ÉG\´űă:‰a C MŹČ!ZŔHu@ČŰĆ­ƒ< ńXşáš_i )Ť–(‘őŔ^u´˘ĂĂQX>ă…sŤDvę1˜o$†FŚÍt6 ËçkG+×˙>d\Fœ s2ŚŁÇčŃOǐ‰QwIě2,]}ý=Żv@ígŠ%ťž$Ÿ„h˛+ʲ\#@ÜĽÁéŇőőD|ƒ€ř€°ĽÓđ>ČH§&ŽőĽa(]}d­¤ĄI[¸Ž‹gl<Ó.@ÜBÓńBÚď‹ô íúžv…”cN”çˆŞPűçĎ.ČI>š<żIAô]¤Ť_-l=mCD&˝ď}– ƒańÇ`0 b¨ƒöą\Ď`0 ƒÁđp!3pYŚ< ú[÷ťFŞZń€ťžÉş-6 îí2đgƒ„Ÿ&x9ţz/´ qOљqżĂ VŮ'çˆńŕŚú,D•Ąďş÷Edq=FMßČ˙KIm+ç?4ĂŮu ŁŰś[9Ľ504ęAD­‚Ů[†Ëi2Řm°SŰÚWüűyŢ ĂÃ6řŠ+˘Ü}Ł@Yä÷.ńď"ő+¤ĂҎAp„‹É†/ZQA×íť…hŘăëfŰů–Ů\Ë)r օ€L*<>{}ąâ VęčĘË-Ąu…$Cœpő…s‹ě˝Ř!ď×2‹’KŸzȇM´yW$Œ!ě˘â¸Oœ9‘Fˆ9ë°-ŸŤ›Ž'ńěZę÷Ř]Ögy^ä÷}"'ŇäŞTz_~Nž˙Ą@÷ĺˇ!Ŕ ĂC„ ĂňŽ›HŞć3,DRôś {ƒÁ`0 ƒĄčcB饎²fŠŘ0ŁY‡ň°sTÁáY{‘ďGüz&qK6*šŒđ}„!#ňÖ108öĘ0§K$D¨Ą¤‰qÝΐďW~lÖ6ÁŘ´_c[@1ePžo đüćřÞԑ+üČž~ĽĽÍD›!#äşRĐŚB2.Šé.[Ÿ›Ë§_âÝá†Y×>3rűFK#ť7kł †Ošü#}ş› şBęƒ&劒ť †âOX’.`ˆ7ŒżVš{ӜHłžÖžtrż Mđ€ÂĽĘäV ň8¤ŤM\-uěÔčƒœ¤ˆ˛HŤâŚś'÷ GER5’źőА›Qš6ÄÓí§čű×ĺˇ véŁHüšt˛íutw‰›ŰşÎßúTT4tžCy§{›źÚxw3îëď&ĺĚűÔç}÷˘żwoŰGĎ >} †ĘčĄ| ĽmH j!Č`0 Œřc0Ö ;Űř@¸şş˘‹‹ :;;cßÄäKáKła ŐilgƒÁ`0 Ă]"GŇĎ內ĺB z:M¤X;3MWŽýÓјčŕpDŁQKüA˙ňű ˛ƒôóöí[îçŠL?ŽĄO|yyŮRlĎ0×­úˤŸQę–Ă Ü!ÁŸŒTCÚ$ě-Óv0$šb ś´G‘}4é¤ď›Lxž1üő‰†04#7×ôž^Kď{ƒßLÚŮp˘ZßwúýĆ}ѨڪGšs¤HşŮí˛u›Ô~œ°ŽÜđů÷ţ4eϘ‹ű|‡H§Étůšž7ƒÁđqCż#ĹE úČ#Ű@“ÄĽÎ>ˆŠs­B˙Ž}oŢ´ÇD÷_Ú î`"gúúŐfâĎ2tEj‰śýđqIŽ,A>*˙TJ¨đŰ;V„Rë‰Pű†îWL$ţӴٞžřŞ]YíÇ]â&˘ÍmˆiďBF†Tšî 7ő{ďť–ý>őy—xń |›úŘGzżŠMŐä9!νú™OpZrčÉ:ƒÁ`xh0âÁ`č:/čpŁs ŇϏ?ţH˙ôO˙Äża(L):‰§§§ôő×_ÓăǏyfOßFýÇDƒÁ`0  A]†ÁNO‹šRqŃ0˘g+v 9ž5”°çęËh¤Aőřř˜ ě8„œw`ú´ ¸ă\üĆţ|`ۢ€‰ßƒxĐwÖa­ok•ŽŽA&𤘠ęڊëɲ.čşŃ"ŒçŁ-ŤD4#Ľ°siuƒč ­á¨ă28 S[g „ëë덆„ž™ťCuZŤŰŕßM3ŔďÍ,cڕşăˇŘß÷“Ĺ/‰ż1ű‰/}.ÎnB3ŁŮ9ö óŽĐÍ{ŠjşŒ×‰=NméÇ`ř‘żŻ†ŒşűôŐD2Ç.ď;ŻÂCY‡űŤLŇŃqÉĆ5͚J9mJ:żľâŸRţLOr5ĆyÄ ďăř đÉhŻâ‰œĐˆ3 ͌Ł) 1y&äiîiŠ7dŠVß@™ˆK)@Ť;ĺ}ó}O$~MNŃך ť*žÜ­Ę¨!ĘĽćŽU†wýŁÓ-ŠŤÚë ˇo{ýĄgőĄä;SpWĺ¨=8ÜEJˆ7Ďť!ÍCř>ÖĎFŢ&Č:Ÿ\1ôĚ ĂCƒ Ărşóós&ýü‡˙đčőë×ôŤ_ýŠ?v~ůĺ&üü›óoč÷ż˙=}ţůçlDŃ,}ƒÁ`0 ƒaÄ>ĽĂH;•#Viŕžj&A —z03’Ť î`<(Ň 2#ŤfđçĺpBčáYɉ/×<Ž=ţœűÉPžŃŘ á§ ŽO§Gôěô˜ëËl†a˜y0x-šî\-jz{UÓëłKzőę­.Ż(z0Ň*ţ5(Ąú†ş†: ŇÚáá!ŻĹşş őxAexfđ­†ý¨żPsý駟xb‡Ä%ČľóźCł`ů<14Ňşź˙§ţ lgčČiJ­D<ßßČ˙ÉëήğN9ßBńç>Ę;7ÄD˘§ľ­ƒaş-C˙ ď?1x˸çmÇ.oÓÎ11wI#ăń(ź§ŃśeŠ–üłűNčle—ď!ťm?ŔwIĆœÝ{Xú؅ }ؔ?ŁbÔž:üJ×I^ţLű‹Űîßrœ~KRćď<)OMĚB ýy!čȡ@ÉÄŚíÉy}‘󡪎ĽpőĽýŽĄóážp×äüݎ>˛ž”číŰŢŰC"ţlęWhťî*]7ŠÚl‹üťA4HŻósßç7˛|?iŐ¤SîC~kääűĆ7 Fü1 ƒŮ 0^``Ş?ţőŻÍl7`,Á~ "#,Ü$` Y:IP9ۏYĽŇ‰B'uVdĆő]8 ƒÁ`0><´†î‚]đLhw|œÁ •ÉdDÓT(K6RÔ5ˆ;މŤUäk$Uľq}‹žrŸňĽ €ÉČŃÓG}óů(|÷Li6SČiޏčrîéçsv|A—g5]Q¨kÌ˘1ŮmR­ÉŢeV˙I$8ÔiŠűB^•WÇPü­2AąV×ŰkDŽÂݗVŔňß=şohL“÷ô]Š…dšRQVP)4§ďzýň'7´t @ýF—üwO¤{+ţě'7Äë(‘árҏĎěÜÖ †ýnÔ}žŰŞ^ÜŚŻÇď^ů@„)KüŞšď#—šY3|=­ Ôl+â'˘-ü0ńďm¸%ő¨H.­œ*~ÔǏr1ţN+ěÖô^ŤLîMÝ }ˇ%é'GŢGˇ\zż”˙m$ď“8ś îzRîÍŞwMŹ‚•Vh‘gw_ľ¤]ößŢeţ˝ ôŠhé>Ž–#çˆËŻ÷ I‡¤ečY‘ýúúś ƒá!Áˆ?ƒa šSlŁC rH<˙ú_˙k&ô ó5 >^źxÁ¤ °ďż˙ţ{&ÁňíˇßŇżúW˙ŠăřĎ˙ů?ólh 0‹’Đ_|A˙ößţ[úÍo~Ó0öoË:7 ƒÁ`0|ŕ;E!ę! &`šrœ‰ %˙餠ŁĂ1ĚĆLî!‰?s,ĄOşâY|+6¤”%f*Ł^ϊ•z^&CaQRC“ĺă÷­V?Ţš…Ňš!'m´1nuÄűĐŽÁöÁž}ü]ŇoˆrÄZ\ÚĘÚđnѧ虓|´m)˙ĆĐ.˝~א6X–ňE7…ƒÁđĄŔˆ?ƒĄş“ŁÝ~É@2€Ab0 Œ(¸ƒ‘PčŒCŞ${°ý÷˙÷ěě믿ćAáŸţ™ăQq<{öŒ×ƒÁ`0 9-6gť(ÜĂłĄŮ‚‡¤ˆn ŠšÜ¤U:Š*5ť0Ŕ6úľL@?;çţŠ č ąGfŁo rRp~#ź„ŕ  ôe0š“ŽuÚđéĄFźi9§ƒŃŠÇĄnŽMüU"ĽĄVT˛{Źë°ĚCm^Réf‘["Ć4cżovŠŽkşŽĘd‹ŃhĚŽDęşU끥ÇPĎĽţçńÉďźţj—)2.ŠAŘWŽ˘>(ČůZQčăOĺ’ÖM;•AÜemgg+S’ëÓşąm ›‚óžnÚŞMł“5Éë.Ńk°Ľ]°nDvJŃÇ7$¸DĆę¤ßÚ]ƒÁ°ÝÎÝA{Űv´1žóşŚÚç 8Ň nD9ĺţ‘HľrZ¨s´{o輺 <›ž¤{MĐńĘŐż3¨ym ÉG§°ë˜Ź{a—Ĺż×ÓŹË9rMş“Ń/)x 7fœ3¤oŽ•PôúSŸŤYé§ÜľŠ‘a?čş)ßż2A—YŸ2iÓwóm7šŰű¸&Ý*Á)MͨɡŐMĎŮ}ő‘ ƒáž`ăÁ°éČČ 0:7‘GÜ}=yň„“ĄčóŐW_ń ó˙ď˙Ďůťżű;Vú‡ř>ç€,ôĂ?p'đwżűŸ˙—żü…(8ŽÎ< +Fü1 ƒÁ`0ÉĄÔ(AúńiÖ'°Z´˜řПl%űŃŻ,Š88 埫ëŤfvďbž —Ż^ŽĂsŒçPMĐg5 ˜œv†˘(›qH7|íSýw[S:˜•TW‹HÔšZŇĹůEřĆşlÜÉŽő*’Ô؍FY4ÖCuK\) ¤^Bíi⏸łÓDĄź^ Ą'—ě—0â2Oo܋%ň¸ú2wÎ4 x°Ia]ń'*÷ô€şĆA”Ú-i›œ[ĽcݙŘ}Œ|[nŃŐː"Đ]aťxÝZť˝+•Č`0|ş2H߄ťsŃŁU2ęHzAż6ú˛ÍZłđŽ%(OŠ[,č˙U”9×JÇҖˉ?íśwä ‰uSŤ”ěR;âvŽ×jďä ˙öš”_ŕ_^~Ă~áŰn*äŐhTĐńá!UuČť˛PŞ…%“€Ţú\ĺÄIç§Ú‡Â˝Ł?#Ş”Č™!.–÷͛ĄţĆťÎëľlľëDůžĐÄ,]żĽüDe´QňŞżë„Œ3HÜęyż !IA5ţ‹. Űţą訛áÇ`0|`0âÁ`Dßdžt„ĂGÓgŸ}FőWEß|ó ťú:;;ăđPîK°?˙ůĎL‚KŻ7oŢđ A=â0/.żp<÷ˇl0 ƒÁ`ř´!ƒá5ťâJ¤š0Pˇ űŞ0rˇZŐ´ÁľÔ(ă€âhŒAţ2)8WŐž䫂Ąe5_ufbđѧIQńÁ &\'â LžőÂiR¤ =˜lł ‹UE?ŸĎiújI~žŁf4*B˝Ž˘ŞÔŤˇ=9§7g‹ƒŃeœ…*ƒŕ‰çÂŔô(ͤ])‚š<úH ČwI"Ëŕg Ő3ŕő@ˇKυ<P2FĐŘň(wwŐX„”ŃŚăĂrUßî§~2NçÜ Š=›ĎkŘśŞ$r>ąPp¤h:›2ákę˜Ě¨ÖE Ş |'ŽkĐč›uí:÷K¤Ő'ödž:‘g—ë °E<ƒÁ°ůű)žďâűUČ­zżîjĂ÷Mă˜-Ѥۺ2ń'˝[šż Ľ<ňiTl[Už+ŁáÜÓt đœNt]űî­S>]SX>BĆ~Qćë#Mh—ˇâ4%.î ď•ŮhÖqr(;ZT×qěęsÔô!đ‚ńkÄ×.ąu+ôźl¤ŘnĐéŕĽdɤÉJýŹß7ń"ďĺuIžƒDĄ1'%ôőŻ„œ­ËSéoşž Ó'T‹ŽG+Gćń儥ü›I/r:írž(Č1^\ľ‰ęä§­RËQ?/ŰžoRäňnŞEĐíž&Vç*Kr=炈…řđ=ƒş€}šř#iĹ1čIâ’îJF‰Œă6´ ˇ$ýxn][M5/÷ĺic=×ůŽ×úŰß`0Œřc0ÖĐך›D,˙ţß˙{úëżţkî°AĄdwЉCg‹Ě•Áć†Ń:„———lHAœ'łŞEvŢ $ƒÁ`0  }Cô-çséWśFŽÂŐQ٧$&ůŔÝWY,x űyĐ8|őŽ&u-,đűÇ1 ÷OĂ dŚz˘•|´‚†ôusIz PĐ7{×?Nlš°~>Żč˙ü|Aߟ-Â÷ÎŰP?ƒął÷=ąQoštt5ŸĐ|AüťňăhLKdJJ+0¸Ě¸_&BžÇä,w§•“Ń`ŕ* ţHćUĽ2ŘDâH4ˆic!žÍLž‹¨ŮýX$âŐÉ`SĽgŚṕď(a}ßvšüâo“áEƒ~ľSľĘąU,149%‚LhďŕNî`ęYI‹*f—Á`]ĽöMĹ':Sđ‰DÔ´_ԒžřŞ>m¸D Úą|݆<ôíeÖT+š-GʨDƒÁp'Ŕű çĆ:ľąűEýQŤCÂđő&tĂľí_­獡"Ůי‡ţĂՕ§ëĐ˙…Ą÷ǧG4 ý]Œ§"ܨ,šwv5ĚUTˇ<Ž„>4ĆlůžNŽůŢ0™SŒţ\ó2Ü'ÖM‚ZBĐd4ڧNiŢ/Ó]‚Œ{Jů4Ohâ=0BFcČŤSlĺ!‡ !K&PöŠ\$\îRIq ˆs_ż~ÍĺĎ#YFęľ&Ü ĽG”TqޤMHH&ôŠŤ䄠ŁÓ¨ű‚Bč‘xkĽâ*jŤXä|WîRéCü.C^˘N  ŔsˆüCůćů% ;ęňöüţ駟¸~œžžr8Ä ]@<ŇÎ i ĺňĂ5eŇ6ę€0˜Ěۨq‡”%ß8†ý'''Í75—h3Š,Ýď ş]íü{^OŕÉ×ú¸}ß †‡#ţ †5äč(I?c•| ţËů/éoţćoš[tâ°.żD˝ÄčŘĄÓ…鈢ó ďtŕö qKçOwŹ ƒÁ`0 Ÿ&š™‚<źę"Ôŕ9MZ­çOg?*Y ˆĘi Tf5ň ŚŹŐ@761Ŕ)3"ą``šÝ…ßb°´B&‹[1=3ÜúˇŸ&Ťš^^„ş{ŐɇzâÇa‘ńĄbƿǡŒR“Ză”ăYó9hŽ,ëŠßb ďäSzOČű[î§J†űńh̤Ňq¸ˆŤp|„h݊’2 MÔaˇţL§5“ÝpŸĐő=ČŽĽËűćqlż¸xbőćq,ßv-ű3žU3ňÁ`x€0âÁ`Xƒ|ź˛lębPîťđዎ]>  rĎßţíßŇ?ü@ß}÷]š•=gBĎŻ~ő+&!Ž—/_ňqů ~úô)ýöˇżĽöĎţH˜ÚÁ`0 ƒAĐD|ďŔqťáł‰ťíś+ j2ĺ:q_€OôiSPňłŽąýaôeĽo*FĚÖ.–$-’ž|@Ő ˇŒc‹Ąd<‡Áň‚ @R‡Ĺh#3üíBˆ?lT†ů+óhâ~Ăh¤ëpŽf%á䘨cÉ3ô)×}}ëýßš"mă;ťHĺwÇŕ•ţ6ÔĹ=ŠuD\Žš~,KŞĄ¸şÁŃ>vÖś~xßŐňĂŽBÖˇľ §ç”aýÍé1 †MB6ŤÖ¨÷ŚŹ1)ń˙ńéçŸćwT0Ä`.çÉř¨î‹jUŒqŠj‰%DőDH~č)¤˜,Ţ䒆]ň,/ĂrĹdžU5˘ËŤ 6T㽌}P œĄOއý‹ĺ",Ëؖ:ÇďaéűW—WWNNČÍşůw˘óĹy¸—üč"ÂýÁ¨_‹đ.)˜—Ł0šOÂ6ň÷{>>yÔ(x‚NŰîwÉ:iW¤ť"*ÖľQäo„‚V4‚* üK!•×lÄw$˙Ď:ťČćôíúęëé~”ďy÷ËD|[4}ÁDäŃŽ˜ő‚Ëář¸ăśIúz8Ž}⢠ĺ†ă} PÚ€ô#sR9ę8ęˆ`şŻ(Äo!i ‰[Hu˘Dƒë .™|,“0¤ż*yĄŻßqI÷`(­ťÜƒžü"yŒź—‰×ę ňĎ"ňIˆY…oŞB >ŻÎÚ´mř΂ڪcá˘yŽˆ]úDţYWÚÖ§5 w #ţ †5č‹tňŕâëŸ˙óÎqxňN):éż˙ýďůŘ÷ßϝ@~žüňK^DńGçčŒBâÇžýö[ŽżýśÎŽÁ`0 Ă'™Ą]a€-S\TŃB­ĺlˆnëaAȈ{ţôE_3ž“ń9ƒÁ~&RP’÷. 6ž—eěĂő1ŤFœ/˜N řĹKĂ$¨­Q“,"ÚËâ~ŤóĘů:ö˝ŒRO›™ôěję>1)ÔKóZÂłęOs~šĽNÔQ™ňPŐIŞľ¸ůâoŠşynŕ‚‹ŞŤP/Ó ÉdŸHŒórNťc&5ƒÚĘr—Ž%šŽń!5…2TŐl@¨ůžşŸ{2Ov‚äwÎQölúNřö$1řD,t*źr¸•‘Yşńşľô oo@>9OĹł`É(ĘčćëŕpFO?{DłƒM@"zęÁľľ|<›Ę žŔ –b•;Ť]•ÚF•Z}Ť‰˜ÔŢłë˝×üő­Đ‚sxóöQť2kř˜Šş]U)#k› Ă&Č{+Ÿh¨UUDÍGÔ*t´=B´ĐŞ$eRXCźXËűPˆrŽVS馋˙śŰÍ/ô3ËD؝4Gʤž‚˜&)íŁĐîO@fŸMŠX•ějŤ FxVTo/Ň™X™]‘„5Ř8•ňgłŚ­%EAźŘX_FA…ŕţ }!ČwóyzđËHY¨&­čÉô‡ösőƒWĂĘ5Î([5Ÿ´9+=ŽCyŒ˘á}úäL-؈ÉCň>őY94;÷€V˝ń^Th’6ňWČÜRﴂD…EgBÂ丐yąށíœř#@Y÷)ôČdt´*Ťžž Ďu—<BL—:*J?še_^ šý}aWŇŃ>$Ľź y/D=ä……h%ű´ň˜äl7€ÎCY4Ń e&$F!MŠR˜„"™Ž/OżÔE™nŐ§tkâ“Ózę}ŤbĹŠ"í*lhÂUN*íš5ƒÁ`Ř Fü1 kÎš| Ŕ:hŸţ9wÖ0ű%'ĄÓřÍ7ßpX¨÷ ™M RüÇř 7aXĐĹ6ÎĄźso0 ƒÁ`řá[bfćšâšÜhސzęÎěhß0ăťfučŰz ŠĆF&ć,é:x–<ëąnfĎ ‘Ą`ŌIRAÁ,ďŠÎ/ÎŮŔą˝Âaćä<’…œš%œŇ̆ _aBc˛&Ä[rë&í­ó‚Üç=”óůÔíÎ}˜ßžn"ř5b†ę]¸G)ś–Č#ĄŁŤ ×ŮĽÁŽ0< 40œ-ăŒÝƏ䎎Šőxšˆ*SÚuęŤP`ŽdđÚ #‘=j™˝Ú˝kü]ƒŻjł Ô^ˆĂťŚ\† éĎ?âsXČ5œn˛\şˇňör‰ćZZ•‹şÉhĘË9߉Ă;m˘TDגbœ’§‰çŻ“}âwnżWíSŻkârmĉĄäťDrÝĂĄi*'Áˆ1ÓéłcúͦÓÇÇôňĺýô}08‡śěÍ*ş[đÁ Ą-¤eq7âl…•Ü24]•0u˘a ZŞ7úyŽMCŃkm‘śQeQLoßěl§É?mýK\ĽćZŽv7š ƒFţîÁ¸%&#b\ &)Bń\ȹV9ĆIŃoÄ"D Q#FN^Âáý}xtČŽq*Ľ.YşVՏ÷•.‘Őcw:žt~„,Űě4ŐiÇ8­\Ł–űF \Ś÷E˘o™Ţ /J-‚š ú zóöŒ^źxA——ńgÎ=ˆď˜=pńçÉń„Ć_žĐáéaC>@î΢ ˘řá…¨pÇÄ!´ä„—>Čx8úošÂ>âŔx<ŽIýB>‹OwňAՐ5°ĺ‚qwéJ]”4‰’Ő9 ˘INŠÓdŘ r‡¤čSć‘ă:~ˇRt˙M§[ԜާâĎť¸v^dBľ”łVE’:BÖBü‘6AČ]‡ş!Ţ„¸%í–&\i×rŽ)„2 ‹:&éČŰ6)?ŽgX‹z7Ýă|ŔNŢuŐ¸ÁZńľkˆŐŞl$÷8 œťŮ Ze¨ÂéVűeÝXüťžnęmŸQŚÍc!Ľ8§Ťy:&)Mré0‰ą-Qš:†ˆ}ú”ű|ť…‹›”Dt[ ˆ;% 'Ilˆ…ň÷†´o“î=ťý‡?ŐQ‡ŠMôá>ř )ᴃ¸eĄ”ţ–ţ "oŃš‹âé\÷ ţ‹| ýj¸Ť›0|€˘*b՜ŢűőYę4 výw¸ Y2~UĂŕ_°ë_N0÷k<ĕ°œśîę‹öĆMăŰZÁE‡×çčńvMtâÇMßZeؖˆtSšĽß)$˘MD˛]Ą]ŐęďŹF…%ŮňăďďâÚůähÉ÷")€ĺĹ`Čš>őjžÜúm[?wŮ;ÂťnÍSK[ržu–B㉠¨Ď&ÔKë† .ğ.iżý~ę˘B[Y„ö`6㉠#ÎCţxaE0r)Fh•äů\˙ć§4сš}›ĐŰçíyŢ%-ôëľÁ`řđaăÁpď@'nżţÝżűwź fľ|thČM3 ƒÁ`0 Ÿ˘q<śŐĽW˙ÚpůüÜVýN &ę~' NŠ\6î“Ň Âz?Î9őÜŘŁÓĄńô`m> hdwĂvˆ5]ĚçßO‚|śm4@ŽŇŹŮý꜎o×ó›đn`˙'ˇFTÉۉÖ’‡“}5)ËŞ"ýĉ:pŸÖżţőŻéËŻžqŰ+@šţ感ĽďžűŽŢź~KŤ`XA”ą~¸Ź= †9\ѤäąĆ:ŠŒřSôXKŠdĺ\›4DüIk—ňakm÷ÍF*cx2 †ĄßC˘pŁQśuѤăƒźüşŢ:úHŒqżË9ś=IňŠwşF…ě9Ó]9ŸÚÔôŰëVךuoF։çD€đ: yűčř˜ęĎ>ŁăŁcÍĽř^Qó~š‘řÓ%ń/żFŤoŽO'cV%šŻj… .jŰĄ ľ„[Ą*ě/GœÎÜ Ű@+B A+ŮÜÔ7Eů­ĎôĹ! 1úźŰâŽĆě7Ýł|{És™_S`Ţöqď´+4ÉŰk ľC}¸ú1Ýq3$oęôŁ““fx…é+}{Ż|§ýč'ţ´Űë´p(‘Öttx@ÓQhß1Č'. ĹÄ4Ę`EŤj&űÖwQíŰxďYß~hťs™ÂĽÁ`¸ Œřc0îčŔ@ č÷ż˙=˙Ć ů¨ŃƒČúˇ ƒÁ`0 ˘ŕƒŮÇatžÝďÖt´[™†ř“ ̚€ĂsŤŮem=ş-ńaˆÜc¤Ÿţ–Çw¸Jú“}nŞGžÚDvĎđ_Łś§”hűj2ÁĐĚáŽA‡uÝßkńw'î6\(G”›$úl|bśřDœŚ‹´o帤é,VŃ_Ăęń!˝zů:NćQšw|@ž>bw1×ő%Ďvžx}Ĺî_`섽İV9 ƍQlCů" •qMÉpĄ,ώɢžRN m­BRL~AŽ†ÔŽ?<›;Ÿkß^SŇÔ!Hš.qŠgn“Á`0ôŁď˝Š]ÝťÎ;ŹNÚŰź_Ýa›€úő&?üĆM˘ĺ˘Q0bĚfä=b÷C3=q”ŤS×í3Ź˝ŚNœNk˙{› ëaÁgˇĽźřnA.Śî‰ě°-ylh2Á&ěňĄ‰ ÷…}Ćđeěżď^´ş|ĂÉłĽ' 2ˇQďď‚řłĎýírwQ?6exچńhB‹\ńÉUĆt ăşĎżë´]"Đz‹cGÜ÷]­–‘¸ăEŠWČîmˇLä=ý,ˇä}J]ăÝňZ˙î(|6ś0ëĹ †ŰÈ?ƒáN1ÄŔ{\| SzS‡Ç`0 ƒÁđiCdÜă@ugä:ꙏű–) ¨ľź7&–÷Đç|_ }ďu(}ˇM÷ŢĘ1™áÉ­Ď7oŽű}ëŮ]×Ď>b˧?ź¸mˆ?šy3ËCyž\ÇRŞNńéNmcXˇ0 $ŇK‡TFő&ł`X=ŃÉŁ)ťGüĂ?~GŻ_˝á 7_|ůŒ~űĎéčË)}Vœ’CG0z.ŻćÁ L$늣‚O–ŢÚĂŔQ+Ăo‘ľŸĘčÂň­ç[2ęľŢvíe&sNœ˘DÜń$†\VŸđNqŠôoę7•ťîűŔ`04r×*÷}Ąë|*cŸfŇúőôîˆ?ř†X.L Ţőu˘¤wéh4aŐźâžĘ!÷ž)ě6ĐęRzűCĂĐ3¨]ˆP&Ô.Îô9"ńgßkě˘řóĄA‡Fă Më˘!úÄ'š‡V˜}suCt€\ĎqŸ\y_]­hTéÜ7ýOQâĽQýáźďd”azĐg?c’¨ˇ~’ßkƒáŽ`ăÁpçčëź 3.’¤Űžg0 ƒÁ`ř´Ń |9ÝWô7v{ ,7ČnßĹ@Žőąď9ic3‰ŁKnx_řÔI?ůvNč"ýő—oČšž8¨U˝i6ťîŰx\4"0Ëą5UđŮIŮĆ ů§ ćzăɘNOéřř€U~Ţžš ďż{N?˙ôŠNNN8Üż~BĎŸŇÓŻszŽšŚëˇ×ÁđąäíjŒąUšyĎF"’oÄČÚĺ\v,ąqŰSÇ߁Ęߪh‰<”âöŇ6uó&'ň4s˝E凨1˛ä$(ƒÁ`ŘUŁ‹Ă÷ŐŰ&^&Ś$ײŔ6ßm IˇŃhŠ ÝdűnéÓůC)ƒťÄ ڈm6މŠŮ\ťv]łz6úŰlS÷㽂×[‡4í:§ĹĐCF}ęŢ˙ô‰´ŞŻ•Ĺ墑żŞWÍ[ľ(Gc~A]ÄßÔOž‹*˛áťĺŽČůď‹r—ßúDíGÜŰę뉁ü˜á!#ë°šŽšS‹ź'ž=ÝYű•×<Ő3ŐtóÎőCw7<÷K&؀÷^8ŻŽśđ—kWhľëďŚďSޝť“gď&źVՊjoőÚ`0ÜFü1 ƒÁ`0 ĂÅ÷ _!ŸŰ•î6܄u6ŤáÓEtuUł;­ÜÍuÜn !âşĘ{גŮGÚŔÂugĎf3úňËŻčääˆ~úé'úáűôň—_čěě‚ Çczůň)<> 'OžĐ¤žŇ›:Ł‹—W‰hSĐÜ/SńĆeĆ×űSmßŔžB5sٍn3âŠ}Ý{ľTŤÜĚÜĆcí‡Á`ŘQ~Ńę URW¸oôő5qáúúzťžb§VÄTźÂĎŇSGĂižŒw.3*JšŽĆ4†ÚJr9ă;¤œ‡…ëÓ áłmŢÚł˝{żĄĚń>ŽjZŐŽy§6§ŻUwgß Cĺ{—Şœďă=xŸŞY}Äyn…Č÷žżąŹďą-\ĎfŸNçl˛NËďŁé8#ő°NAý§VDڋJ8ĺέ‘zt?^î¨Ó‹Đo_.–ąŢ[ľ2 ˇ€ ƒÁ`0 ƒÁđpáŠ.ů‡ŕFԑ°CžşýÉk7P*ś‹c Ú}Ô­čňţk`׸ŘÝO´_ ;ő–T2JĆüŽn"ţPCřńÍoţWDY°Y—eTŐ=<< ŁŁVfxńâ%ýđĂOt~qE׋E0jÖôňő[úńÇ_čäô„N}Nłƒc:<>Ű3O‰&G—Á칸‚"B0¤…KŽœ˜gUúŇ-Jiúto˛3ŰźěΊnŰ`§îŘĺmľĘaErŞI'ęQQp´ţÔXűg0|Ęe,âÂbÁžŞ!l¨ m-âA{ ,}*čCďX9śŽ ćó9ďÇѭѨě(`ĘťĹ%â,ă 'SüÁ]Bá˘ň‘0Q'—7ȏÉdBn<Ą:źK*ߜŢ%ţ„ßż›D;Gˆ?mäTUÍů‚řEé/ ´Ö9mhwu]nˇ×P¸ůQoČďœÔä|űŇĐô"(ýÔ$ožýűXΗk÷ąŻk)ЇRßçKOš RwĹ~ëřöMŸ¸ŐÂibLŁű3ęűĆ5QߑqăĹŽ–zňťďyÉ!Ďç]•ßú”—$Q޸6HÚűćŁ.kÜĎ]ćń áđŕŕŕVĺŒřp݈@ú×ťÖkÝ^!} j"nÄW"}Eˇ˜ý†—+?ÜF!žÉxÔ¸ý“{ŕ˛Üâ} e<ż^püwńœHyđ3P™âÁ`¸Œřc0 ƒÁ`0 †ÇĆěVŰ{Óď6Çôčěw7†ámÉű đ˛ęëŐ'3ßPǒąn€¨ŕ(?ÖsAˇłČďByőŘgKçťkSžůížšÇŽCţaL­ V-šĆ'×* ׆-8ˇfă%ś1Wš,‚d:ŚŁăC: Kí :;_ҋŸĎčĺŤsZŤm]”´×ysvEúÓ OŽéŃÉ7t4Ó쨤'ŸOƒásL×o z[]Óe J°587†/Ú E",%ĂqŘ_+Cu0ŃľnąvŠř“ö5YMÉnCžeţ8ávޙԉPÔ„š\ĘI=Ş]—Ź$çĹË[j0|Ş€öňň’&Sv#ˇě‡ąë}Ł4œ||Ěä™>ƒüMďâ!喋‹ ^˙ŁGh:›†Ľß{–ZŢ\ńÇQˇť‰;D‹Ő’Ëbd††k&E¸Ű“"đ.yőęǍ´"ż‘ďĺtBˇâ{ńâE0ŕŻ8žĂĂĂ[ n‚ÜÇbžčÜňj Ž˝yóŚCŽ8==mÜVí P?P‘7¨Pö“ú˝+PϤÎáyA}řüóĎ7ćď]ö3›ň…ZáHÍGźěKÔŃőyŒ8ů9Úłü†ç˜ÎĎĎéőëל_~ů%ˇyŘm LČćűA~|őŐWœ7ű俐VßóçĎ9žožů&ş‡ÝBLB˝ůńÇy҇źFÜűÖÔëďż˙žăţâ‹/čm“uö‹ďšăű‘y=ˆďôâÓ¤ť–8ŽË¤Ż|pĘř§?s÷ńÝśB™ m¸şŽď”w5AÉ`0|œ0âÁ`0 ƒÁ`0ŘČ̓˝ERż (áe‡_ۆ+Žs‚\ â†YƛpÓŕŕ]ŕ.âÝ7ŽĄón›ŚűŠ÷~ g^Ś)ő I$Ž\ç8uÂűę“:6đúýˆ?ŰbSž x…ÓʝĺA/zH@9pŤ8\ö;ŔőǝTjňźuĘVŤCŕSZĂ2ü€jÂÁÁ„>˙ěi0ʜăČ<ςéœ..çěƄŠ’%W׋`H{ ¤żĐW_žŚĎŸăôtÄŽżXýbÂCĘUAe ô.şHńQÝA€jč5ĂpM”ś}úĘŢaťNľŢłaş!ň¨űhÔ~œkˆ9.]Ăg™ć’Ě+Zu\0čl^ßŘšP ĂG ô)aœA@‰í}pžźăˆwIüő, aĚŚ3šNل‰mlLŻŤ/'ÁUWء(˜1Oj(ˆ'’–ŚTÔ4@C&~”aŠ];Cľâ!î°ŻŽÂűd•T~Bţ”ĄV”ZzI0“]פßúŰíđ–˘Ő"ިԇuŘqpM6nnvý-ě†_nJŞónQ,Ľ!ŸˆÍMĐ.˘öƒřQéٗ0 „5Q5Ť}ăe‰OžĂŢńq‰Ş žŁmŽż 8WŤîۖ߶şQ]E0QcĘÝFmCüÁ9RÖBbß>ôyEŇt[E"‰OŇĚ e›ˆ?ŽS5/t=żfĺ-äĐhBĹ6Ď,Ęq)Oîĺ.úŇ!nůP6(oiň|܆ô }Aœ¸iDíjßśK\}‰ ŃmËY\}‰jâ˝Q‘¨÷P›łyx>Žš˙wľÇ'Ç2h(kqč‰ŤĹ˜Ÿ ž‚‡öéQˆ{TşŚ=Ņô$Ą|BƒŢ,ËP1ĎPűä_^ţ(‡Ëy¨3ç ­™ť/ƒÁ°?Œřc0 ƒÁ`0 †‰HürEÜŽo ţčßj_9rÁ¨ňv–#d1ĂżyđłZ53Śăů1‚*ZRKxĐD q{Łf€çń˝OâĎ>ř°I?w—ś„mOü‰FŽŻűާZJÝšŽEDfŇwłĆwŚÄşDɗx^k€ę۟×Ő>2P^—ő˘g,kҏ,0,T ěçIĺžŕčf‹ßíâÎˁ‚ %2ŒŽ7Šđ#Ė´‚=˘Qú ËdTŇÁń„NÁÍ׌kŐbuAËú*ěS9; űF´ Ěź^ĂÄjš˘łł zţă §Ňgż كŠÎß^ҨxK“Ů[:q\—×Ápł˘zUв¨háĹőW0.Éľ ÜzšqXÄ5I÷Q‘ˆ:Á¸nŹŞŁňO…mĽᨚ˝ök“´¤ř#ŽÄpţRžž"Ó¤šNÉzşĂ"ţ°ÚnƒÁĐBÔ6ؕ•"ĺ }†Qď-¸•Á;Ť¸#¤ MЗU   š3ÔßÓۢ¨"ď`I_~]‰řťqŞ6ŐšFńÇWń݋ִPŞÜśşh G\HĂ$‘°€@ă<­+ŕČű=˝×a(GxWŕ}+ţ8ŞŕRr:á÷ňl2AއřáVǍq=öŞN˙;–WŮŤ2Mh:ž˛ŇÖX&aŸ8Š=<éÍܞáŤńŠI?xLjR”ԣ޸R>qż‡I¸ŽSoVŁo‹z‹Dňzľ-ÄEއ…Ë0Ĺš/pˆ‹Ô‹Ąřz Nˇ‡´ăúň<é4äŘć{Jňחřn›?ۤCîd\SžďüşŰäűy#ů#ńuű™ťAĘŘTŻw‰OÚ(ý{şĎk÷[ ?c‰/´'“é8>Ż .S ˡőzڐ˝/š}šNƑˆît|=iě!ţ`=ćú5âžëŚçdtůKÄr˝˝ËEƒÁđiÈ?ƒÁ`0 ƒÁ`xpˆ™‚ꪠŤË`$™ěŹÖ0;ƒĽOÀÜŘ5n0 ˛°ĂüĹĹe0€,šëŠëqł Ž2óT”Lp\ČAZíƔA}âĂ%ţÜsŢ÷şŚčh~•ž˘1]‡ő˛7źgˇIc&OÄ#`¨™Hˇ3ĘP3čL áGŒ0éű¤žň ľ2,J=­25žüwß,WMŇŰrM}\‰, __mÇüšĺEńÝEÔw:erëú#׋y­ ÁńRžˇú8M\tQ§„ ¸y ;Ć!o§#zöŮ)=}zʎ—LZÍVtúů”>ŸœŁnI—Ť‚.ŽćôöěŒ.ß\Ňüő"´Ÿ5ýüâ5== ĺô킎ŚK:˙Bnú#?'WžŚëé5­ćÁ˝FÄůŠĺ"ƒˇ>I§jŒ0.\ۍ‹ íáŐXłŰŻ‚VĹ4şƒ[…``št´răNîDžkÉQú‘őFÔ:şsI­â&ŤĆŽëHčö„69güƒáĂŚ÷‰ôĺÎB[ůÝwßą:ú‡šÁýĹǏóZC“Ăľţ&ňH¸Śź›q˝ÓÓÓ5%’<Î<>qőĹ$Q ¨?Z҃Đo$ňÝBŮiĹű|žZ° ”=Ɠý+mź-óÖĹM‚¨ĐíKˆy_hň)-BęŮtے?îúܝÔáĄűÜnń|h˙‡6‰Âđp iíˇŒ#ęmgőZÂŇŐĂNü ›“ ƒáV0âÁ`0 ƒÁ`0„ĐPWŽ– OóëvŔMfS–É PgŠ;ÇxěxöđxIÓ鄎ňH¨c^âIu̗ăârAfôiâŽ#Ű0bČč0üP0D¸-9ăžâ}'Čg“ťîÎ<ý˜áţxv@‡“ƒŚžĆŮí1\ĺ ZT%͗5םĺî•ÚYź<“őšş¤ydś¨,؇z,FL1¤ĄŽÂ×PZąJâÚ+[ ň|źk4yŐěiGŇEqÇgBNÍ ţ. jŽł^Ëזc2ÉԴğPŽpéPŒč`]UŹAüőiÉduřšq…|cřňDä*ɐÎüm˝ •Ŕľ&7L ĂÅ&gšŤJź{ţůgş¸¸ §OŸĆś4ź#ĺýˇCho5!(SŢҏÁq\^^r<˘>‚×{őę_aá'_âÔżówë—!ÄĺžÉxBłqTň9KŽĽˇĺ vb_"žßŞFw]Měę݄ŸËП˝źź˘Ťů5+řA}ƒď[Š´uҍ~xZ\Y¤ˇoűâ•3ŕjr>_pš(DEĆř˜Pň)ʤŁŢˎ]B*FűžjsaJÎŇsíëN_ ý1\ƒ•TĘ"ËŐW ˇFz–0QĺgÉĺŠ~•\â7FÍ÷C*ßťpę˜ĎÖ*”“4čužFŠ—CožöXQŹł şůŇć÷P|č#\_Ço§>Ľ,ęáŚpëůŇíŤĺἏy*Ď_ŤŹ4¤’â~ˇé‹DřöY֓>†MmYČ2tí<Ÿ…t¸âúr'œţXŽŁŒ”+Gę¸%Ž} ů›Çô‡ó)ßkËą§cŰűťO§gVl¸. źUsYvĆö ý~\Ž–IíwÔÖńÄoŐ!Ń@tդljgXŁ.ŕYĆ1QňŃă ú†şĎÝ~Žš|^É7ul ƒaKńÇ`0 ƒÁ`0 Î%÷a€Nde0TČ8BÄ× "ąχzOIŁ0`‡5î0ĺĚVĆZf[c ^( 6"ŸKŞł‹°p-l‹Ë„ׯ_7$ íňčCĆ}ŠóÜWź)şŰQÓzëřóôŁî|ýőgôĹÓc&›Ą~Á@ÄĆŚP—˚Ţ^Žčĺë3úńÇC=źJ†  Ą>Őđwäűë‘ä¤ŢŠ;qI!őőőŰĐ~űömăÚ¤/Ý}˛öű`ÓYˇ™ĺ ÍĘínťÖxŕ}Çčŕdűçaeřčřˆ‡şăđ—żţ‚~÷˙ů-}ÖŘv“]ÔK&ţ ,_ž˝ ?ţđ3Uîzóć 9´—P~Ş#Ůëő›ýĺϿЏ8Śožů†žLƒAű"´Ť×‡ŃРşëĐVą~ŽŞQ¨//íě™×‹1Żăś ÇĆźŽ†Ź˜îś,˘+üŹťAkĎŃĆmďűLĘƒÁ°=Ä ,îdŸFT~źŕ>”}¤?‡wĽ¨Ř}ńŝţŸ¨IłĎu&Twţüç?óťí5ú  Ńm4€ś÷ɓ'üŽÖČŰĂź? ľĘżüů/tâÇšˆűł'Oů>ߜŸÓ2Ä[Ł˘8‚ťŞI|ťŐUş ДL˘ĄD¸)´ :­Ë˝ ńAńgv0 ýŸ[{ßŘŠőž†ËČđ.Š–ÁňT˛łGbNľ–ďŇoŠ„‘ČBI]_ÓjTŃ,–ůţW5wÇŘőVHúöěZ,ĺŢ5ËTΈ›Ë/+O Šjž\tĘ Ž01!ŕiČ7ܛV”r‰ô%„hĄ‰<8Ň?Ęú͛×LčžÓÓÇ!ŢHü‘ëáwÓifă,O •­V#&U``ťN†éʤяlŒ?šqYĐe€U~ šáÄE’6źČ`+ö‹ű/íbé㐢÷;îß>ŢžěigžîÓ˝Ćşrxx@Ÿ}öťĚŔŔ÷őő ŁŤ1řIšÚDťs4+čô¸ †żZĂĐÄŐÓăŒXáçú2Ôĺ )U4ŚńŮ2pî…˜hIĆY| Żęh ‘ľ+ŞÖ˝‡‹F:çŰÁt‰Ť%Č´Ď_{ńú.MłQkŠ bi ĂƢNîúťuUjаDÉ`çť3ă}óƒâlŕưç›0ńÔtßňבš5Ë\âÖČŃÎ Žů˛~2Áş,BšĹĽ‰Sł™ăď)Œs“ĐŽĚ&třř„‚ńŘű2ԗ`ňó°Íp<o}0˛UhÂ2^Ăh¨[eXŠĆĄ°,kş<_ŃwĎŻččpJŸ} eGł02ęÜá#Xç`ἆRŽ?!ސ7“E¸—eĹ3Š‹EŘlcŁE4°b=žĂˆR%ƒc0śVpAćŮ ŮÁ˛¤éň‚U­8Ďš)/xÝÔ]NŸ´Š¨ŸPŠeÍ,%-ÓŹúăđÜLÂ}Ž+8Ĺ W1¸Ëƒ’…#G]ŤuŠhó|›:ÔWVR=ňýƒáÁCún}ĆpQu€†~tđŢÄť]T@ođëE˝?żnKčh‰ABGźř #ŸâaWYŚ?~yˇEˆ$ŢA`Oďů*Šeu˘şÖží@(B‹Żű{w8—Ý|…<)Bf˛ŞAĽßHí™ô^%ľ¨9ÄJ‡)źâ#é'ű‹˘NĖB•Y\ ç›{ÝĄ¨ř5O˘–,°be™k&R1éń‡ţVňC/sěŤV-q+źóŞŐÓ8|Oężë4D¸ś@Ô¨'‚ěWq?ýôH@éÇűÓ&Žś uNľĘ6B䥤ʣݰĆô”…gZe¤ś~Q§˙9Ô§’<úžSrĹš÷œ|‚ˆqX#_EM2'ŚĄž€dŽp¸Žvߌ]Ďś××}zM˘ńk÷|™×@\ fÔő$ ç;ńIžéňĐ>XiśŽ œBôČ]üĺ.ve.áű’t= HKBŔq×lIpÝgĄÍßťH8!9"_¤í’ 29ňz“§[ˆbB¤CŠ ť>%¤ü;¨/>ě‹ewĹžŁŁĂřÜI™šWżŁâdČ{Rä4´E ]ĹşxKVđ u­ľ}÷Tž„ŹSEŇ*:×Ä=˘~#âćťďšŞŐ󷉀%ů(χ( Ë3ŘmobŰhôƒÁp[ńÇ`0 ƒÁ`0 žů ­ä˝+0(ZĽAV ĄŇSó2A‘'ÎöĂ'ní'a€r‘*Wa? I|šä5¤ř„‘m đĹÁײ™i)á1h- =€§Ă#mő`}>hű~ŕłőmâ¸+ô›Ěľë‚íŕwŠż{Îv…˜gϞŇßý˙ŽÉ?/_ţBß˙=ýáŕYűŃE@E9ŀëp5§jţ‚çŻčrŒ‡3Ě/Ă`utˇŹ&t˝z­W4Ş.iâC\~Ćä‡ vŞČ‘hís]jĎä_Ą.Â5fA‡´ŒÓŔ|ăRAÍJĆÉlŹZ.řź"škß*Źč;áaötm ¨Ç™â-™ŽNňű0\ˆô?ž‘čöŽ-‹]]šíOžÓY'‘Q‡)ŐX'("iÄë0l.hI?Í?mŹÄ÷)$,xžÉ>šҪBŽ!Ĺ8Ą4đäń“`œI3Ę]cŮd€Čxq}IęĚÉř˝]ƒÄ?ü‘ę˙găĐţœŇ†¸(XŹčňbNó_^“{yMŁ‹ŠFËpgu,/(÷üđ˔ĆÁŘňřçcŞgĂšahpzA‹"´w傊é’ID\§}0ôžŘ>ž×ĆŽ…jLăPG'ő‚Fő•n@PzX\Ňb~]!^„€gĄŽ…Ş#Ź_„¨ŽJD› Jŕh*ňŞF†ĘĐ,<‘Lš ëk7ŁUr÷hů9=Z<Łƒĺ “~ڞlDMĂs‰sźřşáĚMŃoYŸ\omJeg„ƒáCCŽ2–+÷€4đ×ý×Ü扑ďzqő%†}­×gţÎBźőWը/\k!ŁŕwŽöłMü‡‡ôíˇßrüL@€A>‘>˙üóF˘QwÉëđ˝ý/M(€k1¤é…q=E}č#G•"čH^ňű,s­T4Ę6Ýô6y“]qŔđ…űď裃´ďŠ&LÜ1égU‘¸/Bx,Ľ"¤ôŻtZŘĽÚŮ“~ţËů/Ü/ÄžŻžúŠ—Ą2Ôĺ¨'Č}Ë>MĐęŽfˆl0ç>ß%8ďő~řţëýŻLęÁs‚şˆŤcÁ‹/čď˙ţď™$ĺ ‡k Ń.O__šócrďšL' Oú{LâĐîgEŮeňꍐń„är‘Ꝇ7~! Ľ[_WHWr]¤7Ş€ŽřúrxśrEŚ<>!ää$FěĂ7í˗/ůü/żürř“Ÿ'éˆK`yN%ĎEĺ6'nÉ7ľüÎă“k!ŸQ‡đűí7t2:igğ¨IP…+:„"(—á:Wáu‘Ÿßđ‚śšŐđÝŽ"ŹŞUVÇ|r+XŻÝ‡˛đ}řäűżs/‰ŹŽÓŰ÷Ý"e".‘şţ7mSj—ęč[— ƒá60âÁ`0 ƒÁ`0Ţ/ôäăÎ(<Ďt-’ÚfC¨öKV†¨=Œ˝Im'…/J d‚4g÷‰Ü>Ř0+؀ĚFĹ>1<Č Ÿ äÉěKMü‘Ázq&2ř™Ôž?ôĺîgżó´ďBĘŮ'Ü.ůĂĐŻ~ő-ýöˇż ĚočɓSVďA]Á,o!“‰RK3[-iŻÇ`č̈ůiŐ%UËhôş^‚řł˘ůe8gyń !“xO '“ĄĂ[ńěSˇrƒív'QcÔĂé‘$2| ,r?-H\ťÎÉ"y–çšF ěřä8g‰Uň”fQ@[tvvŢ̌NŽP’ňOJwó–g˘‡p%˛ę ŻGě~%*îcÇź˘Ő"–– ŃTp# dP;đՊëëŸţô'ňĺ5ýöř)•ÓĎÎż<K㢢QᓛˆU0š.ÂďhÄ,< ľĄí¤dÔtKvÄEŤytĺęů*Dăèj1+é8Üű躈łÓÁPx}@ŲLnR0űťĎHœa}5‡+–&ţŕú‹ş¤‹ţŤEl—ŒĺŢ73…Ţ•OSďŒóc0|pĐĆůźö0D”e…š¤ěӆq˘ë‰ŤL @-yu]1G]¨ˇw„k‚ü\”ń?—MЀ܇M䟾|% Q^b7şZ„¨ŮîöäâŻr< ďŰ:8:Œî̚{ÍŇEęű‚ˆ•D@˘*ʲC`é#wä})!‰€ěƒ4çŞ7Ű@ĘW }ź•‡ŰˆOgEQě}ţ×_ݐ›pĎŘ×çú Ę5OžţŹqß,ʕ˜,×Oúý …H8܇(ym ™x‚uTΚp ńHüť’ˆJLB¸Úˆ jFH +8Śş×çŚm›´ PvP*fłő6/mŹ7‰ń+*’<Çé9”Ç ('ß,˜LĂşnűázHNÓ%#˙żůÍoř7ňr蛃÷ßŔ)—I¨cZÁkˆL' ”䏣i0n #ţ ƒÁ`0 ƒá=#›ÍŠđŒ>(§ÄA> Ö×NČ?Ťdh‡˛Or ;p]íÄ7̝ŇhܤE™đŞ#ŸĎdÔkĚřď3"őš' ěžŢ-nw˝›¤ftşÝˆ?"xƒëˆô?ъ×ââŤ/ RţŤĘÓŮĺ’JΊFtp ٚ]}]\\QřOç׎.Ž ş^Ö´ô%UŽĂU‰ż“!(Ć]ńýˆáDäţóÁřƒŐ´^ŸuÝmÖ0”V­MŸáTHF’˘~%ĘX:ťűf­ßĹĚóÍđÍÂę)sEž} Ď•ř‘^>цŽ,zTjn‚vľĺ›“x†űŤP ŮGTƒ¤Żá˝ďĽRëţ„^ë>Ɛá{#´ážÉŚśÇý É˜đoËč$ ęüě!üčß:ÍBŽ€˛Ó_|Áy 7_ Lˆ"M~îŚř}Ċ>˘Ě.ů§ű‘ű@ΉAČ2›Žr̐âUś˝MŒşíłŚÝ;BJP– ~čăB̑pű\_Ž+×F\˘0/q7¸-ňú¨ăë#Xő×ízOÜńIœűÇB(‰˛<ý¤}šg…zşnŃőŽ”E$T]5i߈7/ÂMJmk'ońřI>nƒćýa}NƒÁpKńÇ`0 ƒÁ`0  í@y]ť`÷´\$˘zâo™¨ÇŰÎ'’H@ɘď0[ď€UZĘ"“ëč’î FI!CˆBdĐę˘ $Ňď2ăZr5"=3[‰1Čđްiú%í1”ýôÓĎôúőKúá‡éüýřă<¸Ż|ŮĺU¨&ŻÎ!ă?'÷Ë"\őfŒm‹[‚mŚČŒVu¸Ă4úzŐĚReŗƒ“!–‹%߈Ě0ROű\hwuZ)HęŞVŠŇaĄX4Ç |ĺ’#ŸŻ r ái\ f´ŞVkçiÜDţÉÉBť Ş`śpMŃŃVĚ˙čŽ éZFG_Ʌ@œAŒöŽHb.Šß@š¨Ůgä—3Ěô?¤ŮdÚŒ\Ń´WLÔy~W‘˜F/š|ƒ;4ĚP ˆ ŻÄĆ*Ş>Ľ2ýŐ7ż˘Ăă#úéů zőó+:{sĘ#¤)´âŞĂďVX,h…ýÉ(Ú=*’ŤÜcuŘ7wtU-čőó zţOočôY0důÇ4 Ç~~ž¤‹7׊\Bžj&NÎfŁpŻS:<ózŇ6 6ŞĂŁ)Œƒ!ЍhBR]dPXG1Ÿő"äxˆˇźŒ¤P§A AQ(„[U“Ą<ŞđŹřHf+|xBB:Ë圉AP8šĚBœ“ŚŃ"¤ëšĆţ:Şą‚C6ƒ[\ł‰ĺ¨qc0>vDŇ3őrŐ¨”Čą\Áqŕ÷ęŐŤĆĺ”,Dä. ńă]ĺ@ďĽQ‘dď˜~ÄRÎ;TĘ)›ňAßS‡ OĂğMäb!< őśÍƔ{řĄ¸7߇÷…-@hŔoPVšxŃGüůPą/™äŽŽ-$”ť"˙H:>ŮIĐąÍ`—w tßâş ń%ýĆý@Iâ߃D˝ÎDwë2‘ď`ýüîJüLƒ÷ÝîZ6ŠfÝ-[—”W&Ňbźg¤sĆaśi?âĽĐţďWŽu?éVŕűߒPd0 ›`ăÁ`0 ƒÁ`0źčńłl°Ş` ŻŰ€ŽRóí:n'rЈÝ[9o—$śÇLţ‰ŸÄB–ŕK§™Č0a`Y اIů¨ ŽFcţŞIť–č×0"Đ}#WýhŚ„÷ż ŽI?ß}÷Ďę‡K$~ž˙ţűĆĹ×P×•ŁŤ…§Ë`h‹3hPˇV‘XĆŚŽkM SęŞĂÝŐ䛙ŸE™hźëĚ F812ĺŽć‘–Ď룝Ľ§MŇ/¤,Hă"š$ĐçHX=0/†yDI\nźK4ϗňOZ’â+ýřHđĄä $Ţî%ş„Ą•LzÁ"Š>Łącâ 4^° Â!ň0”Z]p›U­–´\Ěéęâ2ԟEJ;!N‰´!)Í> řŒąPúÁĚz´[Ż^ž˘?˝ ůE(n]GŔ*ľpąńUŠTWâ}᜼îŕ÷2”ŃŮë zţÝ/ÜF~ůĺ—4:˜Ń/Ë×4{Τ¤U(ÓU(?¸/›Nk:8 ËÜ3`6H㏠1AGSzôhF“é˜|9aâˇŸŁç!3ĄNÚÎâŠj¸~+bĐ $ .Ż`ugÎ+ü‚ócä—4­Ż¨¨ć4ÂóBÇ4Cš¸‚U›ŠŽĆZĹT5Ĺ"éK˙Ąéó6”›nxĎ’GšŞ‡(žl(0Ć>T9čNô&°Ö߆üÓäh)ƒ>uźŁżůć>Ĺ,Ř'ßšź q8~›ú'IŰ>„3}m‰OOXŘDË ćˇ…ž8!÷$ÄýśK|:Ď7)töĺ]ŽĚłëuEů2˙>čS€ŮTvúyÚv"É&bŽÄ'y}v!âĺß›ŕqf¨~éďéxď]˘MtÓçÔwÚ)G´Áő ú溞ËŘŔ>ŕţ>ÝšúŠ6ÁúŠƒá–0âÁ`0 ƒÁ`0ş3Ýxp˛Î] ůDęńŰuÜvĘ]—¨§ÖEČ•ëe쁤̰făs8ŽA_= ŽI=ZAE y8ĂÁžEľ€˙ößţ×Ô °Üd°ńŠNˇ+b՗f&q9ięaœ=Ď>ëČKݢXł %g÷Pšâ >qAĆ×O×CŤ-—|LÂëzy6„řĂYÖŁđ“o7÷›(â= Â=ˇ{nځ˙}ِvŕčřˆNąÚ’ Ň žu¨/ĄźżMڊÉ^”T„ŞĘÓb™›rc™ÚöÉm Ep)"ŒóëKVh€‚RКÖÜ/DclÁw_×Ja@\ăđ0mÜóç×49,éwżűGôóÉs:u#uTý‰.ć´\-čüň-¸ž„ľ Ő°9 íälBS(΢:ĹQČÇ`h™¸D¸ Ç3ŽăąŽDe ŇEbTá—!˙Bý\]sţP ŞŻŘW|J&ź•nĆéńf1 7@6žœ>ćvmHŽÂ˛đNW\PěŮcÍ× Řtm‰máłgĎř} Ę~@TŤŁŹUżh;7Ţ]”Ôé4y¤ř“uśy?Ë{C“ë5vÍ{éW ­xwË*KĹý˜ˇD˝0şxĽľţî Ž —(ů^Ő§üބ€"}°!˘öś´‰Ű6ź#w%^č2Đ铉kD3UîţŽ_Ŕ˘œ…ë˄ ,ëý×äďŚz(1)?QŽšoˆâ#ťgÝP˙ˇ…&xqż(}/Ü6>IăŽőfrßň{čڝmţFň[ˆB]¸ŹŸď6¤ĎsýŠőlĹýuîÓťýܖ5ę0Z“`ý9 ő{Âb0á“âďÚűŠAââ %đˆŰR_ľúŽ$ôŔźF´QE“ÚV)N­đ#ńäČUbÜuOÂďc„š[ŰKÔJ‰yj'öÖüŞ_ł°9˘jpˇ0EáhŒĂłšNi\Nš<ô5 00 řP/*şžZĐüzžŽPFąF°%íUArĄ’JuŞ$ߋŤi<ÓÓϟŇÉŁcş8;§7oŢŇĺY0ĎCŰśŠîŹź|<š1Š$ŁčúJZ=×\Şq……ź^zşxť˘óחt}ž ÉфNƒqüúŮ5ýüóĎ´ŕŮęѝXľ uk‰Ř*ň*_}Ä;žDőŸĂŁĂ¸Očŕ5‚J6ŽNŚ!ĚAAĺx‰oĄŢCöĘI­ €qç’j–Á@S…<­/Š,âĚ˙Šž eq ˝%ÍŤ’pGÇ„Š¸¨5X çQěID Źď‚´€8ދ ýœžžö*ëÝÇ6ń#nKDU7•ťöÎDmŠ˜ Рπ>Ž&ţn•v^Ö3`\ת"čc Ľwyçϓú â!Jú!ăj{÷Hk7@Ă˝c\OúS¸'”-“Ľ2 ’§ňÝ „Ůˆş˘ţÖĐávâĂůŻ&rlƒüťEꁐ#„ˆƒźÖ÷z_üB“=%˙č8”ÂŒ‰@ V]ĎŻCť‘HT ÜÍéÍj΄Av}•š\Š+ŹCúˇ?Ň~Ą¸9}^ĺŤWŻî˙xć11Il|8˘g_=ŁI9Ľ?üŻ˘?ţLW—Ą\Eßg%ÄAĚqŽ5˘Ä6RUőDÂň>‘ą˜ęÁ23_-éť˙ý-żüœž>{Ć >gWgtvyŇ_PáÓ sŹë‘jŰ|źźԖE¨—ĄÍ}ť Ë2äóČQČVvżP–#šÍĆtt<ĽăăC:::˘Ůá”ü,Äö d1 y0^1Ůł EřwEgtÚďę’B;~UŇ$<Ő¨¤óů2=?ü Qrç&ϗ°˝ź*#˙ Ÿ äý#ď#QcŃÇö5üB9D"´…hĎ@Ňš+Ň2‰”tü:˝ŰQkׁřÄŕ_%ô3vɏ!⏠$üF˙}ë<î]ČĺKEDfˆË ćvwq%ŘäęKHŃB`˘EN@Čű‡}}vßZuóq"Oö%ÖQG”F%Ÿˇ% ô)5.ZÓ7 ҧ 7ĹqČu… .×Î é›ňH%+!¸K>ß%‘Šďţu>Jz…`ˇäyŇß­ßmˆ?ˆDBŠÓˇUýÁ=‹é6ńĹŢjż€ô ĄNHTÎľ„ům ä=i÷đmĚç V מĺ+қÁ`0ÜŒřc0 ƒÁ`0 †€ţ™ŔŹĚ1‰Ćjßʋ¤ŕ“ČʟâÓLž¤°‘HBŁącrPU‰bP$Nl3T(ƒ2ŘŻ—>⏠”÷­ß/ń§Ľ@ěuöGüéŢď:ńgˇüĐçŻĹśEE™u÷|ĚÍŔ—h¸˝ëRŰję’ÄP›oI?Îťf ^śoŞż}¤ł]ËŃ§ŠąNTäžrăK‡,”Čo ĄČQç9šĺÇçéń˘ŚÝDĐ( Gă2Y'˛ˆíEœ=_ÓՅŁĹźNŽ@üŠŮŕ¨ÉLqA=(9ţ†pEŠ3‚1ř˛fB”âeňËwĺ8?‚ Mm(}šűyşöěÝlŔuÍQhSFt} ˇ`ÁPĐxV#z(Ů(<.­dˇnEWŁSŞGĄźüˆŞđ\!Ţ)c^ˆtQv|"ý¸†ôŁŇř^Ű`ƒÁđž É?˘ "űM Ŕ>‡AęŃŽň>ŸnĹ ÔbôŢşĎŘŚąI1˙˘€¸óř]ś–-q „řľëNI;ö!.´ÇPBZ)W˘ťc˝?’ť[ŻśÔ{´Á@[=éŕŔľeR{)v4ý#O‰$ČűƒƒĂG˘ˆ(dć˘I§§.áš!0űś?R¤ř‘ŢQ9j$J\ó§É ÚĺVXÉj2ĺ|ámUˇť7Ü~N+Â}GcžO‰Oę÷`|ˇ$Îh oß\oQgšîęţŐćËĺ}SÔiÜ´ZPŽČuÄš6އvD\őîB Ԑ4j—˝ß>é×ń ńç6é -‘8śĎß@â’úŹ ›ęlĽey3Ä%ß.éۈpٓ“c¤”ăžm|ňŹMWKvAśZ™ť/ƒÁ°?Œřc0 ƒÁ`0 † vQT |@“ńDö&ҏ ôŐÉ XݜŁ'aPƒîí,:1Eď?XŞ焆!ÂĹű#ţé§÷řĹßwź,Łá¤%’ő“\"Ľľę;mjęD’cÄĘ%ŽVuĚgqž#âOJ`cÖŰć|1dŠęŐŞZ­Ýó;ERŮiˇŠ!É ×WWôćĺ]_Ö͌ůůbÎé nS­Śa]ĆsźďU8hó&ˆňʡěĹľrAzŽŽéł/?ŁÇĎNŮ}ńú’Ë%Ý6 Zk™k˙9YǙńżüň œąńářđ€žř⠚_.čuuFWËÝ]ÄřSýI—Gž^b˙|NoŢź Ł’UÁ–ăFŃâĎčhDăƒ1‘ĆGÁxvöSęßw{j0>DhҜ̾ŞÉ÷ßĎŞ 0.Ă8üŐW_ąšôš}JĆgyÇ šf_ă{Œ'ĆŃK°číť ˇÝôŮa´çoßžĺřĄÄmŠ2tKŠ{9 ÷ˆë"œŒv¸ ęjtşlíłľ[?–őorblŻŢŻŹöÁž~v#p0Š4˝WAt);{Ő?ăžBîâˇHƒ´–Î5RďZŒ˛cSţěé“ř6ÚBdPÖś˜°M[ĆçúČK;ÂwIăňL5ĎiŃO†Ňރ1­]rŸŁËoˆ,łĎ3źŠŸ—ŤÓÜĆĽT_^ǡ/ń­3áŕéÓńćDÉÎHĹď7Ś"č9ڞł{únˆ]/Çď?ŠŻˇAóN)ýüć5ÍMýÇ`0ÜFü1 ƒÁ`0 Ă{G3|›Œ2 †Ó˘4wQސ]â9XŽë,śĚ\ĹŔœ¸Eş ńg{ř5ťE>@ün ×íŕřŢ1źcCűí@ë÷ë;ę$űĺG?&˛užfˇl'C×a¨Ąˆ$ňHŠ%ŞzîCü‘tnT+Ú͕|7Ž!c§vwÇżAŇťĎGmú^CűÉĽ0ćü(*„…íş‚ô?\c\ŃůŰEtk–ČJ0Śěvmœň;)-$#˜ë1VtÉ?Ýtxm•<”s”*Ňt6Ł/żú‚ŽžŇY0ܞ]źĽ nŻŚiś{ó'ţpjgó;-\ÇŘrGI•@ ńF˝TظĘt˛ KE‡§GôÍož Ş^ŇübAWçWr!ÎhŹéÜmfďm”tW'žŤ%-ćɕHŘš‚ű5ŐĘIIĺÁˆ&ž)?=žŃěň€&GSvĹV:š<†+´8C}\¨¨‹řŘřśŽFąŸć ƒ w""QÔ8==%qĄ)F]!ƈůŚw*I•뤨 sŔäź#ŁŞÜu$Xpă%fnąŠíŤô‚˘;¤ŤËKŽ+Ş™Œ™ěŽëj×3˘r”+TŠŇŽ!]ť(Ľœě!ţôĽŐ÷넥|uk§{~í ä—é§ă‰R٢oĺŰ<Üý$ƒVíoočüsmźˇšDžżyym nl݉VísŐ(l p)äąůVtëjŹť|nCĘyŸ¸ ˛Î{EŸBĺÖHýç[Ôż[ĺ_ţî>p„ř3ťşdĹƒÁ`¸ Œřc0 ƒÁ`0 †÷݌ـ.&čůJ͐uBţŃŰ=âo°î×Ő\íW–ń{Cń'ß6âĎ]\ď]úŻWl ţ„ŁžKüqÂpK+)nQœ&ě)ęŽ1h_⏤ůśˆžŃZÂO>ˇĎݝ,lˆĹYŰfH-kořÜtŚĘ—ó~ċó“°Ć2fŸŞ*“ţó`€]ÄYťÁ Je1ŽÔ@VʁApԔ/Ťý¸ĚXçńË­§+î#ľ¨ŮčŽŒśG'GôĺןŃäxDŻŢź ËĺY°LÖ4~T&2k|Ő]ŽŇ ů´Í~ś¨!uꊃk`đŒh2ŽJżœQ=ť âxFő7_ĐhFôÓw/čĺ 4БÄ2Q]iIň¤S?]‘ÓŹ˘Š:ôźÎˇ—ŒŽđĆąň´šŻ¨:Ťh^Ěi4š ńÁ0;ń}ŸžNhü›C:ř☌ft0?¤qUR™^œĺ…§Ž­<ŚŞƒá“AŽnŃ!áŞw˜vÝ%ŽżŽŽŽ˘[Źé”IABjÝF᤟çϟÓŮŮŸˇCß|ó “l˙őőUˆ˙˛q˝ľâŽ8¤í/ů ]^^˛:ŃÉÉ#zúôY“n–$Ţ>ĹŻň@ݎEK/ÉĎsk!֏Ľ3wšćÉÄ7˙vAS扝ž†4Ľ÷J䔺Żąi["Ü'íętŮŰY݆řłÖ ţřDXžš÷t‘vĂWî†ktűňZŃEÝ ńsčÄşn÷ýqˇőŤ!Ž÷=9É`0| 0âÁ`0 ƒÁ`0|2ŕűB‘Ů Z×Jqť ejnÎt%×ď›ôC=ę>năńűÇ~D—ćěŠôĂG(7tŕö'ţčuŠŒĽćĽÖŠ{ŁŽťMüId‰–âŇB 9Á'2[KĘ eŠ8tďč!ýänäˇ#ű˜„Rt ŤzéSÂʍ˛7%ĂuŹâCĽhČ?äŁúĘÍBUůf)Ň`;+â8q d—]Ó'&ß­ËKńĎ8ĽéGŒTłƒŸŃÉé1MŽĘđűNŸœ#ń1%ĎckÚÜh~4DŸHÔŠ™|ÔÔM•QYĐÁ¤¤É¸dCŮá阎Ťs:Ÿ—Áˆ|BĹÄG" %#ŸOj?žR=•˜\KúÉ풵zꐁ$\ÇŽčŤ|YS•b]+Zœ/›z6šOińhDţČS9-iĹﺌěIŞ1N:÷΃Áđp  C*x ĹŔ˝2Bđšˆ3˘ř#J$Zé'ďmzŸé0 r@¸^î(†mŰÎîÚ÷Ć/ lTňq ĺ&Pt)™Ôöš‡ú6­K,ěIÔő¸ŁŢCľ‡˛[RýYÔˇŠC‘,•ŽYKz\r™Sq<(ƒaB•‹Ł+Qţ^H} (ô‰k(„ľ#Ž/—é”Őú‹Ą˝ďEN éď“Ä˛Ş“ëJ÷ëÖÎŽ#[´š/*},äcŁUŽşĺŕ۰Q9Ş ß¸!rE“ž<˝‘¤#ÁńuH^Ľ#äkˆ7>ńľŠúŐťS9zJűŐ˝#-ŃM3q˙ŠŁ÷\Ż?Kr=(3eüžăxýş˛O<—šsu#ţ<|Ėi—rRß=żvďč=Ź:âuŁo0 ˇ€ ƒÁ`0 ƒÁđp໸ĺ Í€ľ¸Ҋ?Úő×ćôˆű#˙Ź~ô5ÉH?wt˝˝I?¤H w’&×0„XĄ źH lŘcE+ęŠDţa°BKM­:‰ÄŁgnˇĘ-÷ Qtq74‰G+ţÄäúäď)ž9]7a;Ť xżf˜ę+˘|Ýűîěz6^ŐŃđŘ%!ľu¨/m^‹ňrČ Â´FDŠE›'ĆImŽš˝ƒ›+(C<>} ¸uąvÜXëňŤďŃW´Ź—ŃK]ú—GHĚČĹľ”ăۡoéj~Áizýă9ť’y—Đ%ćë¤{Ő şh6ƒÁprŽŢööŰoże˛Ú_}ŕö ä ‚ÄýWó^S䂡xœ÷ůçŸÓ“'O"i#‹„řƒE~ú‰Cň[‘{RŁ'éW_1­c&Y8˜q:¸-ýŠÔ)‰ď˛š }ŽËóá}‡‡ëŽŔä " )8y¸÷uyuňoE ێGV9šLÇTŽ_sľZ6Ş€ŤeT(Âo¨"Cz‡Ę¤ŸĺrÁáA…ű‡e׏áźx˙]\œó9GGÇ|l-_Ťş§Üâ›ĺÎ*MŤŠËŤ,ľůĚľ¤ŕD° ť^ťşćňÁyâF ÇqżL •L|é~łôçâ~¨¸/”ĂHîÇwëLţš]ť˙ăxި›U]Ń­Vo#młŮTš>ëƋpggçáœE~:4JUŃľÝ5ßŃl:ăăqŇrň3’ąĘÇń>Ç1&XĽk2ŒŸ‹xq]ô_ŽCžr=i˙¤q‡Ô–ƒ_#—a˝Żś>trчœ~ˇőÎ ¸­äćŸţ~z÷cƒácƒ ƒÁ`0 ƒÁđŢg€ŽÂ€öˆÂŻ40Ô<㳍TĄ‰;.čó¤%$œúKŮ^ę=v{ŹŘšf–śŹŰ°YČF2÷ ě’aöÁ‡Eňśo6śŹŸŮ5 ­#wĄ¤H-RŮ8Ś]ŮľńűÄŠ -^‘ÜÔU}v­Ąä Bď[~‘ʌ›}Š3úxCŒrŞ›sÄСIőgŤd5ědxěš~ž—:Î<łĎЉŁ{˰ŚŐ+ßčó g{<§ Uš‹wÎôůUÓOäÍŐ՜ž˙đ ^̢QxĺĹSW§íčćs{}!7ůtÝ V|]NÚ˘p2;˘ţŕBؗŤDŚ$ş| ¸— ÎŽ×IeUˇÖ3ď:âTőĽn˜§$/;m^ÍJ’¨ę*ŞŐ}n…’nrŻĂIÚ3¤JE9"ćk_=1’&äé_ŽVt~~Á qśž&×ÜK$šx&Ŕ\_]ńűŹZ‚ < yxMłƒIXž˜˛  Žůޏ$ÍšÂ^A؇sVPšşdĹ<¤ $'gAzűć-‡ŸNŚkğaĆg(Xŕ> —ńő5“šÚôÄwgŽ<I,+VpŠÄŽEŁr$qâ‚JŽ/EŁďçšŔ˝žŸŸóńK™vuŞŚ#˙_ż~Í÷€oŠńxÂuZ:’vI/Â8>›M ń˘ă÷›Ż‘tU'˘ĐŒÉ9HŽ#>îëU5Ÿ‡pLCy…5„…k:Ź‹Uń'ćS̃GĚ×H̃:"x?ÔŻ~˜ý62ĹCÄ>Ó|çüÍÇ7_ű!*ţÔŮ7ƒÁ`0ě#ţ ƒÁ`0 ƒá˝BT}Śł)…‘{vľcBĹ3A+reM›L"ŽCţqń'Řs7âÝ üĺ†ú´7#Iچ‰JFüŮ'Ümî;rAgčş!‹P$:t¸F]uŸŤ\3ß ÄŻm(ßcöéP6†-˘ÁYÁş^‹ńKöł'e}MuçmĄ‰G‘ÂąAń‡ôRłAŽ*VŤ˜Nvâ„Z#'Véü‚Ďń¤] JţkâN›–Îłœ6ó´ůśj¤3-‚1ě5”v– zţËK*ÇeRˆ‚§­b Ä}ˇŽ5ťt]×q)MY4í]ů,źçkVË`ŔźŹB DѐrҍNŸvÝĺÇĆwҗľ×J KJßC”R`#⒍˝Á0čO¨vŃĽŒ&€šnÎ nÉ}n)Äć"f1>Dh5MüéSáâéÓ§}SYî V€¸É9QÍŹTł/˘ŤŻqó{_0‘ăęšI' ćä˘˜w‘tňT}@čr ÎqtšŒďTJ?9ŚŮÁ´!žˆť3!“ŕZ |HúŁËŞx>ܗh"î؀Wo^ł˛ ŇrJěÔôęŐ+NˆQH—†&iő)ţˆŤ/Ü3žCÖ–„łlÜy‰ ŽáRGp>ƒ–É-–„Ődgš'g|ăš+îC|¸š!č = ôH}ÎCţ!_äžp}„/™´T˛.7¤i‹Š?Ť”F—îgÜ䙆 Z…coޜ1ĄHČB—VKňŰ üD’ĐˆŻƒň$çŤDü‰ůŠILrnLO›_Ü÷ U0’~Śéšž:=ä ő]ŽnŁ:ix_č>§ƒÇˇ-ĎŚęźżňţ†ľ:i0n#ţ ƒÁ`0 ƒá˝Ă[ErP‡} ÝÔ q]Ż‚ńyĹ  #Ë őYdN\ÁƒŢ…+ŇŔ{Ü×ôĘ`ó@tw4 œĎk׏‡Ż×5Œďžž›JˇˆaŻëîmݎ]¸ťš˙Âg4 MĘăóâşnŒÖ‰ C”pZM&Cžíiť+ë´.—şę>Ú@#ĆÔüöąBBíMf=ŽÜŕşKk ŽĂĂXS]&IjX) ŹF‹‚É$íÄZ—]˛y—?ŁŃĐ9”}a߉7H„TTÁăç|AţíysKEâU‘x7ŻÖ*P7\1ěú"Ÿ!ß[ˇm””ˆtśšžjľ‰˜ć;eŚŇî„%ח—5Ďö_…EԋZÍßIJš†wŠJ;ÁuŘ{ƒá‚(ĀlŇBNüŮQ)鈈Sˆú]¸=˘ ťĹ’=x÷„¸...Czá:ĘŃŮŰ ~gA9PGďöh“˘KŚyTe ýî!RH ۀŘűÍÝăq_Ááäžá~ ď~t˜ ú+óů2ši ďł2…)c|Ť]‚yĘÍBz"ńÇF٤°âkjŁ L™ˆ)3V˝œ_5lűř˘ZÓ§Ô4Lüiď¤(Ę,܂›ýčV iWu'„+‹öžFă’ü†›Ířޢ&íHŤ ‚J[ťyEXźÁ@J–÷ öĹ|Œd]Ź‘ź˙–‹čfŤ•)\Œw”ś™ËţÁeŽânoɄç—C‘Ň:ffžŤÜiŽ/i‰éˆőŽx<܁ŞѨIGÁĘKŔ(•“žä'öÁĺҀz…”ŽÇ žu¸şđÍýÉk[ĘšéMmřč;ŚË{_ŐIĂűĆňâŽŕśĺéš ƒÁđąÁˆ?ƒa}Lř‡€|&€Á`0 ƒáă‰/Ż/hľœ§=Ž˘dƆĘÍ.ĆS–şÇŒSYdF2éţ(ßß žm?xRC_8ëöq=S6=˛mŮÓgüę;G<Œ:^ś‡°#3ÇoT ňEc€Ů÷Ůę3Đéű›žyÖ8fňĂŮ" e†ý&÷-}ůœç[—Ě×b?RS"6[|vG_§k¨růőšÜoŠĎŕ•Ż×Žë<&ż—‰¤š˙$>ÔOp\˙íbŕÁúnöƒÁp@x1'ꘜRJîţk€ôeqW•”ÍŽľú}]RœÎuH7\`´˜×!~ôe#Ń$&M'ݢfŇĎł§ĎŘVXůčŮztúˆĆĄß\”ĹZZ…ŕ #EřxDÇLJ!ď+Ľz‰D ­ČűeľŠŽšr—^}Žž Wt˜ŕçŕpFŤ¤ŔIAQ™Š0ěęk:ݑřă9OžœŇÉÉQŤźWDâNOœhÓż)Dń°ŚÓꘉULJJď`VŽ yď™\3b‚L$@šuW_¸Çô­‚ý“阞V՚‚’%Š8Ř'Ş?łŮ8)éDE ¸kƒjĐĺŐ%_űńăÇśs?Š.Ąœ´ë-Qb§Ő#îGI:˜ř%ĺ•ŢëEV~’^\ůŠu×uÚMőˇÍďXÎŁtŸ­ŰľžžËPŸˇCž÷ďvbƒá6¸Š­ó‰eO[F'ă÷WţV÷ Ă}Áˆ?ƒa ş,ţxńQˆZ|(ňqƒf‘N ţŃÚ Đ›Žƒđ˜méQ|T .ÄŤý  ƒÁ`0>%´ščÎç×4żžJDzA:ßYŠ_qţi5ŠypłsĂP;÷?Ů@ŽŃ§­ŤŽ ˆ–Áiôsa€rĚrö˘żg¤ŽÔ cjf×ęoNYRI‘c9‘Ŕˆî‚9‡J§Ť„˜&|´J0đ…3Č+­§ƒ2žć:‰€#Ž'ňo2![Č"őOęŕ ‚’Q髏›fRËq­öŁ,šzPn$ó¨dҍ!=Ť(ŕš\Ž *VąQÎwŒ C†?đ›nŘď“ÚŇÍ ő˝3“BŽkKÝGK—şćz¤Ž\C\ňN“%%ď“}¤Y÷΢!…{ŠĎ˛§Ďd˘&âӚŤĹČäi󃺤žX ę–G^FŠ^SkŕÉK°Yż_›ŽÁ`xภńGĆKńĄ}@ýţÝÝ>­O„tŞŇâ_Źbü ˜:ţĄwÖ0„¨Tşďţ¸ÜM}„ŚŘ—íż<Î%šr§/;‹3'pÜÓČ f÷Šëž hr™Ô@ČKŰÖ¨őÁšţüƒBP ‘Ľ–<ž?ťŠß=§§œJ-íZ—nű’˝ëďœţÉ7“ ĘŤĺ@ŰÁíţna¤ƒÁpŸ0âÁ`XƒŒĹÇfĆüń¤˙ôŸţýđĂźq0€|őŐWô7ó7ôë_˙š}`k˛N>{2|ÖގoßŇ˙ř˙ƒgĚ|űíˇôĹ_đ ýąŐ7{Uâ3 ƒÁ`0|,hI?ä˘$>fW˘—?pĘŚĄs‹(ż_`6v”âŸĚčÉĚxî07oVaYŁČ2,sîß>yň„ŽOX:ű_žü…×2[$ytMONNB<â:;;çţ킥ůăĚc&%ň\Nlş/§ †ÚSҒ&t†ůúńfSSń  v#ZăÖźM؇Ł>îÝ4<Ih%×/,Ú@'Iœý2QĆ'dŃßnZ ‹iš‡A´q&ußś‹E;)ţäł°7óůľç$ŸÁŢОřŠ]ťYŤăz6ŇĆ˝–ůLâę3vľßˇzŰ ů†¨‡ł(¤ăř;÷ŢëÚĐŃZ„ůq'ń*˝Ůľn2ŘIY7üŸŽúPS‡ äńG˘q$JU¨ÍmĹ48Ż“íÔíŐ1Z.–Ÿ,’|ϋçĽö´&gM¨Áđiď=ôϞž>ćţœŒ3ކô`ŹďOźOOOO›> ŢľŰ#o°é'ü9{{ÎĚժNńŃÁфűą)pęKěv藲’LíAg eIéE~ósro<8|ikěV)M;Ţ˙fşűƒVäéSŸŮëdkţťąO…ëĘX˝Ô}l÷]ťŸ€<˜9‹Ţr%Ę|1|BŘš¸oGZť-Ź~ †ű„ Ă´ź(‘ńQřóĎ?Ó˙ů?˙‡~üńGúěłĎřcšřŔ•AěĂG Ô{dö(:2˘ÄŰs>O¨qŒ%úӟčüüœăŔ>\?úţ7ł!ňY˘ƒÁ`0 †<§Œő1eŮ%öcTTL•î;Öiń,ŠŃŔ˜ 4‡‡|A¨üIýUôqú˘w||Ä}Ô؏á°5śĂĂĂî˜÷K_ý`„Á5„!’ü¸NÚ2œëJŕôžŁŒrď ĆľĄ´Ý 7T2Î)É  ,buí ni„ô“)Űu—ôCb„Ě,šcm´’ §ÓécÚ[s˘ Řźb˝rBü!ľ¸NÖ †OʆWDb,úhP°šK5ĉ÷(”Đą îMdštڤŽÖÚpŻßÇDoŢžeâĎŁGÇôčô„f đśíů>ŽžĐ?`ő™eT’žŔ6辟ÝMŹűvŘo˙ i!é!íÖŘk˘óĆIwýM’O”ÝÍ-\_ż)ĺBoFw ÂňM‚đšŇŁÄŐ(ým—šlýnŃGôŐKQXŇa›8üĄĂos˙q—ňőť6wŠü{§ëvĎ`0n#ţ †5ä31ńˆűAúůťżű;žmňÝwßŃ˗/éř, ţƒ^ě‘GÜváöż:1˜ óúőkÔĆq||C)űáę d"Ě|ł Ž%ň˛ćúË`0 ƒáÓBk¤×†ëv` d†ŁŁăŽŕ>Ľ&ÓčA`!‘㡸äŠîb@ÎóůčŻĘ1qŘ/qâú§úľBl×nđ}ŮÉ$ş!ĐR˙2¸‡žŻáăžc~űŰoč×_'ĽI0¸­ŽCĽŠFŸ‹ëŠ^ź^Đ?˝˘?˙ůĎtľ¸Šî§œz(­űI2rLęŁ,řÎ őu•ęŽLŘ` pꮜŤŸ!íđ7`XáŮ(ÔőľË:˝ÖnĆ¤Žła+2š´ŢŐLlqaևÜuUłżˆĎڍiuŁ}Žż-6•_$ĹlV4şn2äÝ˙é'š‹ź/ňsZU œđĺa-Ékâ‘"ýpžőؕuVíŞ&a0>MČűIޕw!†ă]ľyçn~§čöxsă5ž”!ţ1+™œŇńÉĄ{ÚőĆšűűý”–‹%ů*’ŢŃޔîÍĒ!˘e)gw˘Ňö%ţhRƝßĹÄR=Î.ۂ]ŻßUÜ=ž!UŸÝÔ~î űç}ĚϢ󭧝ß6yřcßqű&źżzĄż“đ5 Ă]Ŕˆ?ƒa z0V:"2óű0ƒF ™­ŒD-@řAŘżüĺ/ěş a1Đ >€a”ŠîÂqă8öAQçŕ7ˆAřGÜ0ŞČÇtwćv;Čm0 ƒÁ`ř˜Ńčň–ƒK*&Svׅ>#ú¨ a!ͤuIBŒýމ%ŤUŐ°_ˆď˘ÚÀ|`ÔA<ÂČy˘˘"†1,”ĺˆÓ qöĎ´5|Œ zt<Ľ§Áh÷ôńÍ&á;gęĆjÉźĺ(|O­ zýj@ž•€q“D‚ĺ m4’o6Ô/|ˇi—]¨÷ušŃ.3Ěßp¨§2Ű]“~:×IńËŐD‰UžGŠűBv“gUâ]UQQČÓÍßo÷2Ó5ť\Lg™H?ŇŐuJúOîŔo¸ ďnşőđžPĚŕ~ňŤöhej×níÝ44q‰Ÿś!÷d)5éN§K‹5JD­"‘ÓŰMLZĽJ{Šč Ěg3łSZ}J›“Ć]ŒuœÜ莍•§´Ť/–rkŠ?)Ęć6Z`0´ˆźżd\Qމ2yQúwżDy—é÷ž@“ˆ@ŚÁ9›Ń}ˇČűSâĎߏ¸\úáHˆ{”\|u]{őŠéÉ.îMŤ§KüŘf—´Ąď‹űFßá&’źăE#­ŘęšÝâĎĐevî¸FóčCÄ>ăŮť)ţ c¨żőŽGn7ŚďÖČ?]PŰçéskö„]âۇqš,jkR/—áŰĚĆ ĂmaăÁ°ýÁ'ƒČ†"ˆ9˙ëý/žĹ|¤Bѝçϟ3é @ űˆë/|Pbö ÂÁ—a ÷ŕ:Ř˙ĺ—_rgqăřO?ýÔřĘĆ1( ÉŹë|VDď,Nëź ƒÁ`0|4ĐĆنÁž(J^F㆜%IËľĘĎršbƤo  /yuuíޞ:j<2 ‡8ĐO#ŠôĹe-úĂb8‘ӚŇ1.á\Ăďm]+>\ÔՂ—ŻčüŐUWż„zéŠZ\†˛Ÿł›ëUIçËCşžź˘zuE­X]ÇťQë†Ęyvľä›úŠzˆď)=ŰYĐˆZc#ę ¸hÎÝ"ľĎń3AÍ3…o<Ômů“ú.îĹéáďťĹœ*⯇çő]ŕwV~ĂńD:rqa1¸ü+•‹ŻtL%(E J.ż›ÄŠđԟBŸ…đC„Äœ—q‹°QP7Qš$¤ ÍzŃĄ}ă!Ák% áĽ<ćŘ| ßĺ6ů.c¨CtÂFݲpÖ|ƒĹ˜"üčĽv0Їv2Ź=/qFt-×äg…Ú…Z[łd—Á`0äŞ BÎƂńÇ?ţńLđĆXçăǏš?‰÷ŢŤú–BřěűîŕÝÝĘú^a-IÜŠß9ńgč`b%â!ďlq5ŤăEŸ“0“-óűˁ OBž`­1HüfćZŕţŔޤQűů”ˆ?ëqÜîîß5ѧűäƒ÷y߆:ę> ýô+-ńçă‡KţAűŒď$,€t“Ď/Ďy҄Á`0ÜFü1 ƒĐaЅ‘ěǤČČă„é´ÄŮ×đ!Ŕ Éyâ ç2óçBâ^ńq-łT:×ÖA7 ƒÁ`ř¤ ô;ŁŘCœĺ hžŮ-łąyfs":č~m4Ř\S]ôĐ%>H8ěƒaFHC˘„¸Ľ/+ @”W„UPF 9CîAĎô6|źX.töć’~ńŃ-]OuMŐjÎuęz5˘Ëú”Ţ^Ô´\\EŁ„"‹xaĽeŠ)9ń§RŞ>úűÍ'˘YÖÔ}2?KŘĎëöšő,šŽěÇýiŐ~.Ăŕ5\‰xwOó­´ĚćăŮv#ągŢgj?i§?˘!řŽńÓsš­ŸŢoló˝{ĝ–^ݧKÉÜ$Jj;ŃPÜ*ŚĹëwŻâԵڔ§mß52o´:żžŸ Ƿǝ×G.ˇé¨oâŚCŒ:NT‹ę”§Ęp§É?ű™Á`ř¤wńŤWݘä#};Lf0Ž)ęy91GŢżůoށăÄťXޛ“ɘĂÍç×áz—tvö–ăö쳆ŕž9ţÖĐ 7žčŸ"~QŁ”qXŮ/éÎ'xJá:¤ăę2’4AďG~ŻŁŸށ$$ŠHł”žFvMĆő"ţĐÎŘÇŐ× zßýwMÄ˝ËXoIüQß=Ü%×Â7d×Ë-ę÷jK§ţ>T|¸Äí*&Ƌ‡ ŘÉáťÉ ĂmaăÁ°,–Ů Xăă3PĚ|Ag3Cd†(>…ôë_˙:|´>ăY2żüň ť{ńâEăşë‹/ž`őŸožů†gÓ ~}°@1 Ž…x°Ć‡+ŽČƒÁ`0 †bœ€!CÔr`ŔŔoô=…đƒ5Œ78&űZ— ÓF‰Gú”BęaÓ˛_7fkuQň‘}BvĐdŸ>RF›ćÇ/á#yŠkĐ铡oa}ß‹0˜űóĎ/iuąŠ&Á€X„şWEw[sGoć :żv<đ[×cŞřŸŮ<ŤČŹnm¸“ľÔ˝x<YšvšáČ?řŰë LĽŁ{Z" 1‘Ł?ę>Céć¤tď]Q„–üYZżf]WM›˘Ű„ťÂZ|Î÷ŚCˆˇüĆ]Oo—(ô$k˝"ߞŁ“<ľ~š˜\×PyWůԒٚ”t„"ôŹýÜFě‰ÖH?ƒÁ° ¤O'}Éü$JŽ8&Šç áݍąKLLĚăÓ}ĹÜX ňĆ9AÂÁšĹx*ŢAϟ˙Ä㼸Žł:Ď.FlÄ %vŹ%ˆ[ČXď˘\4ďBăž5úÓ ý`ě÷őüÇ安6‘b7žŸ†ŕ:Ť]p§o€ć…sD‚ű"'Ü.˝ę´côÍÖúąŢó\7\'LJˇX{ßx×€Í ďŸożý–ŠÉ˜ ƒáś0âÁ`XC߀žžÁ â\tĄsI\ž%­ĹŕĄgBç$"}\>ŠeöŒ\GhŠ[̔‘ŮŁw=0k0 ƒÁ`x¸čë?jC‹oĐwqB~cţ#Œ8ÇÇ'źÖnÄŕAપ;śŠœä#}YmÖi“}˛ŕş:QEĄ>‚Ďű!ľ[Ÿú~ówšŞéíłV‹9MŻkšŒ &ţřzE‹ů‚.Doç5ÍWŁh8d"ÖŤ¤Œ‚o¤š]Űá{ĚĄžŽ*&Op˝ôâjŤhfękc&;‚ ě䄵< §'<”ŞR=E+!ŘhW_~ăz YĎ×[Wľ>Ń>îż:ççjĘ@ˋŻÉoL`vţÖhçŃëćúXw{›kôĽłČö‹ĘOŠU\‘´5.Zş¤–8" ę9ńÚ:vSž ż+´€ áÇű¨˛Ô]ÜâÂXí$íâÚ&-Iő˘áýtŒľŰUś|ÎżÁ`ř¸áłś_ďNL\ĸŁLNÄFLnŠ&Ÿˆ˜Ç+ë<ŒîGęeąXrÜXĐoE˙ô.Ç9Ľ+c­}}†k]xʸ­¨á7÷ŸŽB?f•Ôˆň66oGˇiƒűÚ\˙@Hœ˘.÷Ą }î÷šďŰŚŰÝâčz`7°ßđĄâĂ,˙÷˙ţ_ú‡řúüóĎ9>|â€Â!̟ţô'v!˛fÇŕ#thFőđ PƒÁ`0 ĂǀÜ—&ţ0Účpmż1Şóˆš$ÎÁoxĐÇ˝žš‡~lTăъBâ ƒqÚh"D !7ˆÂΓÇĐżł¨)ŠťFő›\0Ý_żvC†ď §ňˇŚ‚ŽięH0ř-áZj*΂‰?Lhó%-Aô΍Â:×\¨×~É LlŔ$Œ>Žő*8WęňršbęÜt`[”ŚžŔ‘ €ň'ώVź‘z/u[ŽCąčę⒖Ié5î´ąSť×vU]őkňďšMĎçiFč٘˙W[´ŚÓgřÝ˙Ýúú>3ÄůôŻ›Š<.wŁýÍíU˝vÚ]—""5&Z/ż7)ţ¤KčvŔŐ´–Šę>d‰q…:ďŕFf‘Ę9ľÉŠřĂjRX|Ań_ÉÄV‹âxÇ ˛žIDB‚–Ű•ôă˛魍3>fܤĚŝßţöˇźďQLpÄĽVŇÁXäŽŔ˜(”ĚťŽž&ŰŹčâ+ŞĽ‹ëŘ]€´a<5wő…űŔľqżčëŠkÎ!h×´B^—¸ŘMnru[– 4|ge_8<Ěţc0 }0âÁ`Xƒţ Äo|ětóŤ_ýŠ?,AÖÁÇ)śńq é[a&ËLk°•ńˆhvđ!‹8đńŒjř0•ŮĄ\–pŔď˙{6˛ ůh˛÷uď,ƒÁ`0 Ăǎ.)˝Ońę'Ĺu3“™cS3›GŁ1–GŤÖ —wM°ë‰ZĽVşe 9ýŮK|'ýďťÎÖTĂÍčć/̋K_ĐĘGtő*|Ó,ĄřëŘuYDľ“°řä^ „†¨˛ˇ‹f: ŹËetˁYĄ8Ď%ľ!ţˆşn=ďÎú×Ę<څžVjĺţa=żşnîG\=K~>şÄ›.é县çvÖăń]w}EĘżť{ĐjŒK9)ečůŰ÷9K ]&K[.[ö1’4.ÁÚK&ŐNjzY‡UžĺýuĚ÷žoú"š‘k˙%âޏ2Ä0^Ső‰ĺךč‰ëË}3˙ Ÿňw(ţĐĂ%Ú%~plâÎÁ8hź?ÖÇÇÇŹ¨Ž~fžFqMII 0'•˘˙zňhÜÓzš†H„0‘DٞŠhĐ7őuű.DZpˆBX#(ť ë }ÝÔß=?żH}Ý2őĐ^wJvhŻÔ“ś^Ď^Í;kűś˜ß‰lüaĂƸ =Xç‡>&ěú9n0 ;Ŕˆ?ƒa ňŹI9˜Ľ"ƒřpĹG)ˆ> Ě#ŰŔW_}Ĺ3d0đ+D!|Ěňlęëk>Ž™3ˆłP „Ap|Lă„G°5Žz6ő‡˙ag0 ƒÁ`nęŐEň‚k5ZDŻ7šaĐd¸ŤL<-ŠdÔňNĐ•>ą$ĝXŸ;2éżÂ0r“şĎĐ1ăźxđJf†őI@ˆĄ–\ă\0Ôů’×•ŸyˇßEž’ŰŽ~ľ‚–řâIÇQ‡tŁŻR˝ÔĘŽÚ՗Ź5YH“Ř\ć&DÂK\š[gšžä*_ő>Ÿ˝ę2űŔľŽŞś?Ĺ5ę\Ű^ťnóeÝ­š^ߨě“Âé|íOƒ¤CӟÄmÖÍ÷ä\{Ţ&ň“K†Úć>’ĘPŁLF-ń¨qF­jˇżőjř#á"Ť%ž QzЃHçˆtžębśaƒÁp´˘ů9ľ‡ŒŠqĘßüć7Üvź#ËMď˜mŢA¸6ĆIĄtŽ÷%ޓ˘°ăŕżMŰ•,Ać]%Ä›ÝŽłGy˙‡ži9n~űLŐ „¸¸…Ň%ťş űĘpýYH× ÔÂř.&lVhŁÓűýŒăŇ?қ7o#Ah6ĽŮtŽUvăoŢ šôŰŚ[Č?ŽMrúíŢłý =“•B:ĘŃ*˝ó>÷]X˙oń"üÔž1t}{÷îw<ćŽ}˛}!ë CŒřc06ƒmř(ůk|„ÄƒŹ˙?{ÚdIŽe‚ú63sŰ| ÷p%—ČČĘĽ*łŞf˛Čž™ţDŠđˇ–HHQ¤‡(ä)BV““KWVVfE.ąůjnť˝MŃ8¸P(žžŐVwżÇ]í˝§  P(Ŕ=8nš0 ĆJfđáqB9dżC0hqHÜ0`p‹80 Eüřa ţˆ$nžĘPňBĄP( ĹۆDƒ=NjšÁ wóZ‡Ą|6”Q–’(<ń§OĽ3z­6ŻNÉ ˘ä“ö?Ńď•ă­`č‚DtmFčďz„\Ěj}W“ZF–BŽdąš˛…¸);/–!0]l?_ęÄj3üçżţ‚JŰq˝ň “~ZnlcA†Znëş#b8kyꆩç^ˆj˘&ĺÉD&¸örĆ;އţ÷p0äŐůžŽ&ԎŒä‰:^QŔ+Sůz w~5áÝÝ5¸Ĺj"Ľ—ܰšťkÎăh"ˇ\ĆxŻ2$ĹĎnŤX!3çX¸ţH†ŠŤ!LĆPÉ0X˛QŐĄ, U5ŔÄűëcLžëŹyzŽÉČ@ÁŸWňŰÔČ?9bÝ7Bč!Ż:÷]śŒm‡ŞÜřtÄĐ<.‡Î`|BŁň8¨-…z’´ď›ŽÝfAě,üVśČ;ńť{äăľfČĎ ö‰’”ľvŠŞRý]0˙é_­}T(7âşďP,R„˘ř<¤$pźe3ć='Ú!¨šŁXĹÂDoékŠkؐŰřÎÄ"KŮppű—“,XĹHୟ”ˆ=‡‡GtćâDL}ąˆnA ůÁ&ó¸˜Ă]ďő"ÉWΑOé+§|qK†óđě›ßűÍď'qkÖJĆo&.‚ôŁX“Cƛƒˇ­ZhKĄP(ŽJüQ(HZůJfńý,+8…Đ#a° AŘ/îdeŒœƒă˛TV‘bAČűöƒL‘ş•0ÓV<Ž:!œOP+ …BĄP(Ž61ĘËdč˙•ÁŒţ`˛Š¸ęĎQBp¨ŁÝ‰źGv—Oé¸I‘öĄfX3H§¤éłÂ˜“şä!wAćódc˜¨Nl˜Ö˙Ěű§U?wY"D=~ßęÄŁ›Ú]^´<ÎÓßg—[3Oˇ˘m"g3!„ŔaŰîۍm/†/iÂřđebܲäëKAŐňxÔ˙ą3ş:ß 5>8Ť Ę)ýłSH65âGŒŞĘcH­Rk¨„J÷źŒƒęŞĂÔąRŇNţLH>r•˘|<—…Ků˘*!nI˘XTÔ­Śđü–äţÎÍJľ%¤B˙O_ÂŞAd‰ Ž3c&֌KĎ¨Š Đě‹ ŤC…s­w—^Ք…<ÁGÚT“~&ä$K‰‚O˘šB1î%Ô{ĆAąÇÍpVqs{my˛<ĄĄ}íjüAR6&6Ř žYÓaĹ+ËŽî —B‹ŻqX¨Ď—06#ˇ!CWçKż’¸ÁiŞ÷VÚ0ÓLťŞî­\ĺ$-Ë$Ÿ …âÍÚ"VěhĚšô]5‹¨3č ‚H„ř/\dake 8‚Eґö ďJôOAPGŰöôéÓH°IóÝ*ňžâüwH< ţ€´„kŔœ­¸§"“l˛Ÿ(Cœ‡ý|­nÎś܈VůŻG9°Ű0ˇ&œ‹8@züř1íîî„÷Ű´rŠúF)0ߌ…˘ěÂôźTŁ­şâÂĚŮ÷&U[›Œk'ú_¤P(ŠK€ ĹŇÁ¨|ǀ-÷9-Ť,räáRĚrŽ*„`4 ct€ŚP( …BńÖ ň"q†˘Ńœ m7`zżîÖ×ÖšÚjľă´ĽŻG‘ŒfőEg!ď§ÎrCśřţeH?9ÉhuŁČy 6Qö¸\\ţg„ŠQňňĹcŚ0ýb„ü1=b“˝˜ÔVľáMBećž.áç\ž5cÄ&4Őýi¤ˇ&ˇ+y˜‹—~š§šŐ27V,šlYČ5&( P0RŠ„NŹ/Ň•T㍿^Đ–ÝVuž´abHaő¨˘Ę^ú;!˙x˘&Ő y×PŃŇ|ÇŽ ƒű8&dB‡G¨j^ą§,ƒÂƒҘÎÜ՝„¨ŠHnóŠUíp9\ŃĂ1z8fnŸméő˛ŕ.Źtďmv ţ¤íś *ZÖ$Ĺž!)˙ÚE5˘~s !…Bńö`Ú;hˆ›WĚgŚŽ.I{I˙wb_Ő?­Šă˜ŒřcÍB•Ä…ž1Ťç„üƒä# IBÖĹőŔ¨ť‹ áÉX'‰TžřÓçëé÷Ďčô䔎ŽřüÓÓ_/,ň\Žř“*n^,q'Ď_6Ž:˝7 Í÷˙]CtgŤgţ͂Š˙•ťzO …ⲥÄ…BqcOçD ! Ľ+ŞÓđśIj> 3m>š˛ZĄP( …Bqe°”¸nŠúf莭ŻSˇ×­6˘šşľľuę´;5ŁD“[˘Y¤…Yd„ŮD…Ĺ'ŽóxŞ´—íŸŚä{Č?×Űż>ţgŸo2˛ÉD¸¤uk‰ĆÇTŐOÖ(čږúâĎJ§Bń ŽÎLH“ 9rŁë4őŸô™†…D–˘Q“űąKČĹPJÄKžĎ@[¤‘ócبr# S†‰7 Ďp[ŇŻÚ8żŁŠŒRłž8%nNî⌸D´ž”SĆ˓Pţ6´CQ )U=cwiƒŞOĺ*&˝é&əđ.1Ś"Y]ĹmV(7čGByüöömnnĆŊç%ţ@íGˆ1P0ßÚÚb‚Lęújęiۨöƒ ޏž={Ćí×ýű÷ů¤+}ŮÂ$] nçć÷9Ąž…"|"ď˘ÔŽrą§ÜÉź,>ďÜšIBP˙Áu‚||x×iž”ÜƂQ\?ť÷ňůbW¸îŘZĎ÷Ă76ÖŠˇe¤nPœ(‘)߯ —•fŇx°řúŒx‡çć“>cEl6+ş§˝^X›öÇÍť|W …âĘ Ä…Bqc1ÍŐÁ*ŤŽSL›LV( …BĄP\=/ťŕŃŘX' a4€Ą>‹źřŒrŤhł;¨ýL¤Ý@$ϏMűź:xcÁrÉćDŸeN˘˘ó\÷*ůżx\ů'\]ö›(ŻŁu­‘”čŇ´đ`žáÎfa/Mî“ćžcăSĎrqwUϕ•v&Qůše‹›4 Ď7ŞÖĎ'JI\‘ÔČcRŸ#ÉY^ DĄ2Žúç:’\lÔ~Š×VĎ_5Ž6”¸ă2ËŢË2sˇZT’HéXv‡'顉Lô*…ňCDq‚{0[ĺ [5Űh(Żą$úˆŤŻô>%ˇŚRěiž˝–˛ Ĺ[ !śŔĹÔöö6+×Î;7¸żż‰?ˆéLS9oÂ$ůŐˇącVô3?š7Šż~<ń‡jDɨř3 îŕüAPl"ĹiZEP|ţü9‚„"OˇÓف ÎéúŰ ×aŇ>ă7ŽyŻ”Ľ+Ł6mll%ÎM¸*›!n„Úş”žĂe’RÔßCL"â;ĺÖĘ\Š˝9/…>Çâe*JSe ú˘~´—|ŽŢpß&%7Ł­pýB!ă—ĺŘ=g^ę“۝ÖÍ-ŸJĄ’–~źâsśÄx׀E­Ýx3 ×1űvqĐďó=T(ŠË€ ōE5Ąé‰:ŇáO÷7aŢ~ĚŚD˘&ůy%) …BĄP\,+qXžƒNEiŤ~`3{Â\‡ƒÁ;ďďÍëçMWŢąŞ%MßÓœĎˆp}R“}]ÂP ńŤćăíîS›äŻG:ŽđżmP ő2u˘ÉŁ :™Hˆłrp™`#Ă ś5y^R‚FîVŻIUŤé›ůüÚ@yYdü–ä'će‹‹qGŁĹ‚ĺn|Ȓ„€“.b1 §úîI3žfT„_o,Ťß$u‹`19ËP´Ź@yŠů5„öł#2ç^ŚĺLžźxüˆ6#“ß$M6‚OP"SʕœURwůŽůÄu%4şH#˛î“Ü3ďf,şC#!#Y)ĹšˇĆfŠ\t͊d …âząę܈ Ą ýA]H?ŤÄçI –ۤŮoˇ[.ţ^řŢć-Uűáw‹k ţčBď'É7ň‹MâfŐőř"˛1,Ú^y^˝zEOŸ>ĺď÷îÝŁťwďŇýť÷cźB ÂńŁŁŁH,BPZáÇőňŮp´dŤ:ć÷™ĺúAŽ!„ĚŰцƒpr|ÝşvÜ=Ú¸u‹Šn—Ţ(H'%Ÿ›_đ>q}ë÷Yy ęČÖö6ŤI˝30TS:e.˙Œ"Ü˙Yš ;śwśŠWônčËÖÇ@ ş#ŕš8>:ŚŃhȅV kľß,łś\G˙Ě+­ąŰĂáeřhV( %ţ(ŠŠiƖŚcÓö5…ÉI? …BĄP(Š›O óŁ7›‚™řMKOćńú•ÓĺJç.Şř3›´:ůÇ&ę žAuň ž—“ÇŒŽZL~UůżXœWIfîůšĐˆLpS庨ţ™œÎ^zdń\_nšrÎęUj)De[rW[MĎVžhc–ŐmáK)+ŇŇ×%+×íź`Ś–ąxŸ…–*ý„â*k"Ďą|‰Ćz…?Že  čF‹•}â3îój@´1­¤ Ś­ÓĹ'÷ŽÂs*ő ĺ0 ™ŕƒp8˘ę”ˇž=}J_ý5ˇŸ~ď{ôŕýži/×Mć÷bë_]čo[éšJ˙rŕšéőĄ{…âÎy•WźKІ‚üƒűyćÚRyż( ĹEC‰? …â@JÚI÷ÍB].ˇZMšvçM$+ …BĄP(ŽAÝg\z÷&!ţŔ 1śălŢ1ďżÍ˜=,›Ă,Bŕ™.?6=Ü椟*îeĎŻ ŹÍ˜f9&‡]QńĽvţ5â˛É?Ć6í˜Qţ9ń'OŢâM˙‰ĐâOíź÷-s<Şťˆšqaů¸1ěĽEʼ֎$źE;™Ž/MÍ[$'Q5&ké§Re°E0T#çŘZţó6kz™Iz6Ž<_bŐą•ÂQ U…1#*že=͔ü“0ĂýS(Šó¤ŸßýîwtrrÂî´ŕśëţýűLšĄ€bM÷‚•W@ÎŮŰŰăśę9pEf˘uÚvO¨YJűLţ˝öÖâE.ľ@î! Ýnvy;ń.ddŮš/žř‚ž?FëkLFŽútvvâĘj—ÖoâőŞoG'Ç´ż@_üéKÎÇ˝ű÷čáŁG´qkƒ„4*Ů­Ť´ůóí×DâՊ}˛Š{í-dăgś‰”t•ÄŸI’Éšˆ?L2 sáÝ&ţÍcȚbI}EđŒ\ÉŮtŮ0ç!~™Šü¤ÄŸFƒc†táĆE@ěKŸó!V37ëëžřsxx@Ď;mÚڂ ŻÄ•Łmą˘Ĺ˗/éŋ.Ç´žąáňsćĘJ6‰§É)ń'Ě Oëœˇ%Ć˝}ýú5ěď×\“ĺňŰŢŮáßĺć&]Şţ!îîB dň’Őn@¨÷bí ü´ń'_0>”BžYĽ*¨IŐÎeJwýW¸¨Ç #­ŸœÔóž—VŤÍŞQRo—ÂŞýÚ9(ݘ•ŸçŇ+FĹ-ŞúŔ¸×xŽţřÇ?2ń äźŰwnÓă'Ů­ň†{rzvĘŽĄ¤NôĎzôzď5}ţ/˙¤ň<›''§tęâš_ “Ňv§ Jdç•Ŕ–U¸2ľ$|ýúú,ŠY‘ĐHsdŁƒ>×”ø„‹żvT˙šÉH‡ż§¸?î~†Ž—Tý …‚ĄÄ…Bqc°č„nęŽkŢ*ëy 4>…BĄP( Ĺő@ Ýe˜,6Á¤Ě.yŘMĐhĄţZŁť-+†3•ü~Ť¤šˆ=yÎóó'rE7öćé Ćdqšż’ólóç$“hâL˘Ťš2äłb=ś˘“:‡ΌgF]ŸeP”óqÜťLÌvKĽăLËŽ Ź“w×U)Ńz÷\Uz‘&eĽMä#ḉŽąDQǧ“Ś>ÉsoL î í rS‘ą2&”ÂM$ôŕ<€FÔă É4 ÂŒD (Şúx#n+ÄYp\žěÜ÷˛SeŒ$_Őu[ވMI°ęœXź>1ScÁW÷5ú”Hیč“˙N`E‘"=Ď4‡U(o&„Hc, đ â€p J ÓĚ#ŠJ<)`Đ˙ňË/9.¨Ĺ@MčΝ;|ěŐŤWLü1›ŔĄœć'ßä]$a@VůÓ˙Čńł+­$~á‘ń›ň/Dž$.ÄdégŸž={ĆŹwvîş÷٘žůć>ÖëtéĚĽďQ0ńç›ožŃÓožrţnÝÚ¤ő :Ř? ŻžÄ;Ę2ţ:Eą§NľŹˆ?ŠëŁÉnVőŢŠíŚĹűr’žR[ő¤|>ĄěN ˇ<ę}9q=†:!„ła¨— Ô¸ÔB=e¨y.žjsęD‘Ôcą[ˆ*ŽC\Ι@ ˇjES:ĄŽăţ ŢI_ő ÷ Žç°PdÝŐ­5—g¤–wÁf"r/ Üż#WŸđÜ!O¸x>YľĆ]×Yp÷ë_˙šţĂř\=zDß˙ţ÷éoţćočƒÇšŻŐāMÜŃ!>č4 BögögôńÇÓ˝{÷¸,¸=˜wÝů—TĄi4qă ë­y˘ßrgÓĄR—ˆžžÍŽ ĺ€óĽk˘d“‚ŮMCřs U1OŇôęn%Ťţ( Ĺe@‰? …âC>XÍÉ?ł&o§Éä* …BĄP(Ž6}źşBQ­Œ Ý缕}“¤6^ŔXîâ⧉Q# kL+éÓÍŁhZšł÷ÝD,“O%É/\k¤ŠźEëÄÄ`śţg\î˝ŇĂĘ %jƅëŻGl 2T3nÎ"5Ľ* ţKŒ…B =Ů÷bžPU‰ŰÄčm]é!A!'UŸ‰Ž´R—0”d(°y‚A9ä%śsePĺĄ*ýśí.H?ŁpTÔĆuNIë{ź}Ľ!6䜤@'H?)ąŇH„1îŠlÓtďȘ ľ#łdfélÍů\ŽĽ&’BĄx Ćh:`œßŮŮaC=Œóˆ8Ţ´`0%ÓL#MŞřX6Zƒƒ4?ČFčŸ6ŠúäŔ.q]~ |QfÇDľGâÄľˆĄ= #Ş# ˆ É8îÄ ~ ö˘Ăł>ÔG†ôúő>uÚ'ôâÎ+÷z ý&ţ´éĹł=wŢKÚwaĆcCëÇôęĺž;i€ÄŕÓĹuŕőÂŰmDŤ÷kÇöĺ:„ô„{Á$’VŤy^w…š^6ÄolPwŠ /!ä˜&Ň‚Ç)Pl Ä`=Qű‚ňƒ2ŔÖ „šó@ˆ_ň}ćơȳ1¨ƒáţŠ STŹ^˝|IOŸ>eB]Q´čă?Ą0é­{É.ؘĐ4Ö M˘`CÄĎĹŮé?3ŠëŔ÷źG>ůĐ+ů¸k‚{'<˙/Ăľ€Üw]ڍ“`đ÷˜Ő˝‚ŇĆ3˘ڎÝÝ]ţţčqĽˇ ň~MÚF•ŢŐWló–íşç<.ŞŤ5.KîG9Ŕĺؘ]Ÿőc/ B4BYŁm¨žłó=ýpá†öŰÖößϜ¤ĽŁm…BqQPâBĄxŤ0Uv¸3);4¤P( …BĄ¸‚:6zWcă8.ýŔTËó BşB1žnQăŞő›s^3—@ˆ §˛˜f XőšŠÄ[ŰIE Š’ŔŹK̍W“ 1łÓçóLFś ­]Ľř“ĹlP2hV(3Lˆ4ńšLF|1Ś~,˝¸&őˆœřSĹ)¤(gl-Đ& iŠŹÚé]vfaWhdç%?ţ“’ň ‰sM ůźŐ œ0ÄÔHO‘ T+”čbCĄP(r€đóÉ'ŸDŁ:Œž0Ě Ḩň¤˜Gn@\|đAÍŐ6ÄBÂ#~lŘ?ř9'mŰ`řGü EŔ8-ń  źźëŇüK_W\)aƒúĐ(¸ ˘<Ę૯žbҏÄőô›gLB89>Łő5(ŒœQ§%n˜ÜűŠěĐë˝zůüž={AϟíÓŃ~ŸÖzŰL ˛Ćîă xtDĂQŸnmn0qakkŤÖXwĺ‡kňĺ¤[››A‰ä|f­ ¨°¸ň‚Z âkM‰Ż.Ů\Řť.,ňpq¨ČŻ(şŕ~ Žlşr°\@á>Ł~mln6şq[|}4ƒkăř摉ҺžÉǔÁ}܄âOęBĚÚęÜ)ý_œr Ň̑ťößüć7ô?ţÇ˙ _ţň—Žlvčßü›C÷îßçr`bÍ2X˛K0pcŃÃĂH>A}ŁŰóŠL¸opĂŇĎż˙÷˙ž•¤ž÷˝ďŃO~ňúčăéöÝۜ&tŕ^ę\?úя¸^˙ô§?Ľď~÷ťôţهî~o’¨mBA Žó΂"rOž<áň„×ÖÖ6ťŰƒúĎâĘPf‚ôă9Řž@P¸ţšű‚śŻťlýŠ6˙U¸+Ă5ue&nË 3wřƒlaQĐÉąkW^źäđŰ;Ű˝–ŔąK¤-´9¸~´ ˇ6]9t(‡ ŇSľe m֎Ë?ťÜßă!…]|hĄP( A‰? …⍃m˜˜Ě 1MžÚĘď)Çu2PĄP( …âš`irţŰřă0‰\l”‰cŞV ‹|}*˝î-&‘VTćČVi‹áEÂH8…bZ…uF1gô+Ę@2 äŽOP¸‚+ŠańŞŻSÖ;„řa(!‹Ôt­jéˆaE6qQ…ş*u4şĚ0&ýŚšxbĘĹÎF_ç3Ä6jśxkšÍPQ ÁFę˙BbĚůœK0&%śx˛Œo/JV8ăB•Š Oc;Xßz—E8Ç˙­l5 qČ%‘‘ö8‰şäÍťPôíWJüŠť?ÄuÉ”ŢŐ—Ż‡ă߸˛ŰYQăÎ(ćLJľR DɢTČV¤c›`U~&úţšĚ-ĎőE×ÖIɲBĄxă‘*ţ¤č">§Ô'‰Ąuŕ]źH)ÄĽ€~¨|ω?ŠOÓ{şíâŮvń7ÍoJœÓňşƒ‘$’Ä%“ŕ†ÇÎĂoœë]ö´™˜tˆ?ÖNO6Řl Ľ–ŃŃúi ţœŇŃáŠ3zĐÁŃÖÖaÄO•ăˆĂąŢĺëů‹çÔítéă?Ś÷>¤;.ýóşŔÂ}čš8zŹŔ1]1éwƒÁž›(ź,‹2¨=A5.źđ>[opĽdCšň÷čőţ>}ýŐWô/żűk>úč#zřč­mlœ[ń'şŰ óęß"q&äJĆoü~WQŠŽŚÄŸ¤×˛P?Ą>őő×_łJސÂb]’@/}ŽŃhLgý ¤’\čGKšŽĂń—Ď_ĐçŸ˙žNŽůš d!ţˆ’ž%<' Ď L8.!tłzM;ś9pՅ6nžź˙>őÖząďoˇ˛Qů¨,™üóŢ{ďńo„–šˆ?62O&N/YżLúŐŞ,˜po)Š_´8ńh‘Ż?ă0ŕűÍ~!…6˙EL ţÔ7¸9&zˆž÷°ŢŽ+âúßrž5‘řCŚô…zNĂhŞřIeuźŁŹ3iRcb E%Ÿ"Ů䥑*Ş!/ÚŇ+oňś„¨ŔČ÷EےEĂ!N¸'ĘăoúŇ{#Á(¨ĆђM]ŞŞ#d`éߊ{QŮI•[@ÄůӟţÄç|űŰßvý-Vĺ9ÇGě‰?čŁ/‚t@J€˘ž#ˆ?PAd­ßŁ—{Cî‡`ƒúfŤĺćHóԅ‡2З_|AżůçßĐĆúýěg?Łýřǜ~NÖZP΁ŠŒ´ëÓ(Q€šnތŽ*J PwYĂ5C%(px1Ůß{ÍŽŞž„ű´ý}ş{ď.mş1ČÖćVCŞŐőÁĹÔŤ—ŻčĹó<AߍUc˘Ű¤sž÷l( N6!ŇÎŁţd Ňs°AE}ŒvKHěůXNÂO‡ôŐüwĂcą÷îżÇĘO “˝˙ţűôřɓč mY \÷÷čË/ž¤üÇd ˆ#>ř€?ŽĽ@~ uÂAšůi%j8¸˝nŐxPWĄĆr~§ŞLPš˛'ŠôfBěďÄ>Šš¤ţtr;Ď—¨b%×sŃW_~ĹdÄß˙ţ÷ÜΠlqŘ`ŃZ*>÷^íą;1ů„>ůÖ'tkóV(÷ŁöŕÎÝťŹ&%Ś;wď¸űüS&őřzÜáKzúôýáO ˙ţß˙ţËů˙qYý/˙úĄŰťô‘ť;îĄ@OOńܗôâůKúő?~I‡G´ëęńŁGktggĂĹçĆmE›GEäS{ą …â˘ Ä…BńĆ!'î4ËżĎ3ʤŤľÓ¸ …BĄP(W‡ź÷•Şmđjť°Âߋ–ßZaÄVĺ!&‚11< YĆŢxY5m0Á)}LÔK:yŸPˆD˜T‡!F\'ĽŽrőÉË/•Eç#çJťpĄ d d˘T–N˜lŤ u*G–ŤZ˙ĺ}űöžN\îÝżO|đxŠRĐň@˙˛ČC…YVAHú?őˇŽVsTr-Ô\ĺ—qtßeřÚwww9ž]WĆkkkt€ŒutxÄ÷Œ‰î:P˙ťQIɃ]•š}■džď|űŰtçŢÝZ|ŹřČœżŒHĆĽ„g.yfÓú> i˙Üfą.]˙Óv§ţŮ佉(bɞó—}9–tęÚ&¸`ƒŰbŒËk*žĄœ§]–,iHšh7AĽéƒ>`’š@úI] â|Œľ°ŔâĺËtčÚŒł@ƒ˘+…śé‡Ľk;Júćëúĺ/>g• 'îšľn̡ąśA›Ű %Žž´[ŠP(.JüQ(o ňAqžŻéwžň/ŸäMäÓö+ …BĄP(ŽďťÉá–3œ­uȎN]ÝíÓĐ‚O;nâx—NO°ň|Č$ É/&’™6‚•Ň ťŐŘ/ą÷+¨'.Œ]]=<:aÜ+ ,ŒL~<5Ř |wcŁ Sđ3•Łil%ĆAv5!“ěa?6ُçƔňĚŤý”´˜žý,ĺŹyFŐĆűÜ Î#nEĹ+u˜^kEpbÉ%Ş,5B I˜7ÉgNąÁ0㕂L=Žxž‰ 9֓ž ´EţSH^śŹě˝$č˛W†ô$îULBĐ~ Ă=‡+Žq ˙xœ•ëŁr<đ¤ŸJ-Čß[qAá=}UŽ9<; ™‡ďŢ@hMłĹÖT7 ‹awĆ T%vVĆőź ÇhK 5–IfVLëOBŞJ÷Q–+›˜‹L$ RKBqówᡡw˜!}ş”ಠ¤Bú•řb ^đ~LIóâ‘wOT Łę=%ńă7T^÷T­Î„°ËvéЗĹű™o\:˘Z”Η˛2‰{Ă¨’<ŢííN›í0zŁLá~kc}ƒ ,>ߎ/[îýÔIÓ0Á{AœĐÉŮkŽwßÂqëŽŻăz —pÍŘ99eă>ŽäÔ!¸ň*A&zôë_˙šţîďţŽ~űŰßň}ůŢ÷žÇVQrý´QP¸ä‘üŕôńÇÓw?ý._űĄť)ŕ ä Ę6mÔߍ &ŽKy íüźUá N}ţ‡ĆíÖâ.’|WĽ~ä>29 ‹'Đ?ůkÉg ĺ°ŽqÇ}âšĹoy^†!ĎŤâäř˜ÉéPuĹ=ÁýýÉO~B>ůĐuYJÚ{éëîŰȍű@ÖéJ>ŹŽŽ úýł˜_ wŇLL‚k¨ă#Żŕƒôĺů™†#7n•x‘6xp>ťáscŕng5ĹŁŘţeˇĽÖŻ]GIĺœڊƒĂ&ÜaŒőŒóń,ĄýIí$ęĆúĹńqă˘o "RąKˆ|˛ť0W_7؝á-ÇÜNĹó ą ÔĎ@Jüń~ěŇŢĽĎ>űŒß¨÷/]ŰźŢŇ~ćڇßŇ˙üů˙tőů€Ÿ3Œő  u÷ţíŢ“BĄP\”řŁP(n4ćMŇçŞ>ůdmú™‡kŕËąeWę( …BĄP(VGł ¸"*°FƒĄšš†7ŒxăČ“Ŕ­Â$NŮčÂ+ŒŮőWÉŹ!o$U Ÿ¸3ćŒR% @úƒâÎ+5Ȥaf“}CąĄs’ÎCÔąTŸŐ˝ŇĎőoŽ#g:x}D/ÚŻhÔ?˘5gü Lü…‡› ?íы“3gäąL`łĄŽ3é'ştň+˛axcĂ\ic˝L•hRF0ŠLОšBÖI• Ň01âŠę€_Rҏ¸ŕK]† żŤ¸ ť –lŃnL‹żIɨ‘äí­ňŒŐWźűôšk>n­˛R_ îWS ˙„ýeśęۤßý‰L´ §”†łMŸ'ű`c%NJă2ä?´s˘BŠü‡ ͨ­Ż@' “—ƒżO2 çĚđMcir ߉BßCVÍĘę.ŸŇŒSMąŞÓSăU;Óôłłę/#…BqĂÁŠŽo(†űó*…đރíˆˆ[s–Aޘ NÄ1Ú8ŔűuŮ&Č*8†tŮ`˜GŸäqű…<Ŕ= ¤7`¸~íÂy2Ë)Ýšs×Č7˝ZiQa]ÜŽ/ş-W—%ťýĹţű˜Cď*­ú šË*ü†ţΝ;L˜ˇdçČ(§''‘ĚĎÄ0ˇ¸hƒ‹`\\ ýüç?§Żżţšó %'OžTW„qBP 刟˘ŹřZLčs„ř°¤ ěűř“éý÷ßç{:ˆKŽőě˘ęo^¸‡ŰčË-AüI!*P[Ą,đžÄő­ßeƒ]˛šr…‹(6śwśéÓď~ĘîžR`üŘ Ş˛x{˝‹)˙ ĂuG°HőÝťű× DłU‚ž Ä"jnmPÎG$llŹóóˆ{‡{ˆç ßť˝n2†Ąúp˜hr{Đţaێ.ď&ŃeŽŰěęí“Oź"܃‰2PJDGó<.}; ‹4FŽ= ܘoHÜŻˇ YS(ŠóB‰? …âĆŁI‰g–âO:=+Ź“­’| …BĄP(ŽQ>€űuTÉţ{Ż•S’śďĎa˘+Ł_đJť‚ ĐlHhuyňńđ ÔqÉ ­Vĺ*ń˛šDčŚýÇY¤ńŻŹvMŠw }^1˙ŠF'gŹ0ľŢkŃZä1éŕ´G{ v¸[ëI4†ZĄnzś‡l!ęäd´iăÂdŽA¨Rďą,G?Ź­Î—ăœŽ8îOI3"­ßaˇbް…ďŕ4¨"‹Š.ßŇt›Ž#]ä1‹°3q^Gî’e–Á¤"üPŚ[9uĹâm fjS[CęĘÄďrĹÇ!䎴ĚąaçőűOáă‹+šm$čL;7ś§”´wI†WmżjÄ&#×[ 1ő<˘zڑôԚ|™%¤¤ř ďUäQ(—!Ąíľťy}ĹŚăySޝˆSâ‚m-|hë–m™EÉ›Wî9Ľ?ýéOLţ€‹›”ź‹ôĹ}ҏ]ßîŻéôä˜Ý_u×:´žąFÝ6uG%őĚŘßŰ„íĐáx¨ľHž ÎúŃEˆ1)¨ü€< ž×ĘMž,Y S˝pý1(ů`\€xďżwŸnßšăóéöA%ôĺ˗ôŸ˙óf7^PëŚśťĆŰťn4Q÷¤Ă.ČţęŻţŠž˙ýďÓˇžő-&ő|řŃGœoëŢQp&.¤@‚rˆFˆnŠóžŢjěŇĘnÍzî<t€-ײrZ‡ŽžˇÇg7H/[Á•ÚÂďg&‰š8Aô@}ęş{ ÂÖmˇyuĘ%ŁuŰNȋ”ƒźçńűź¨ÂŐo(ˇź÷ŢZŰX§[ˇ6hss‹‰#) Ö$hráľl8ԇv˛d7ˇ'Óˁú2Ç{ç6?+rţŸż:‘&mŽö÷Ü8ú€Ő­ĐŸGŻťrŮŮ]˛>@•h?¨WalB žUムA¨ü Ĺť}÷ś{^ołÚúƒwîŢa’”€xÜŽkbá%űƒÚ‘„â€ ^ ĘDˆWŠýţ‡ÜfĄŢČľĽ"Ł.ĆW–öö†ôŮ÷žĎĺđÄľŻOž|ĄĽ­]×O7_ÓëĂýJ”“ …âb Ä…BńĆ!é¤č´đźÚ4#Ľ“´ůšJR( …BĄ¸J$Š”ôó‚ĄîmęÚ@ÁÄŒŐŁQˆ=ލťĂąĽ›Ĺ*ď ?IZlŹń„ ô˝ŮFâö•A^ůÁdžěˉA‚źď(DäEńŽĄŞŁąĄĂÓ6 Ž^ŠŰŃzŻ`CÉɉŰ%ÚőÇ‹ÝŢ˝ĽăÇ+m¸IĆ0bd”ş*ĆŁ”Řb"ŽU)đ„cR§ą?'ţČř +v‡p…ŽËJ}Iƒ] ¸ßbWxB J]iŐbŚ.ŠbĚ2„žZ3ƒBĂÂáDHÚ5!¨”á~ĘԇÁ?Ü=vkUţŠMŰÄ@ž2RPöŠ.Â>ŸŹ'˙ř\ˇ’L%JD}]ÍČd¤œ4˝E4a˘°”ú\ąQMnĂƙYÚ™EĚ ‰J2Lń§Lîc]UŠfÖQ(Šš@ßĘ=xgĄ_ˆ>ŤG†÷ŔŠ6 Ę%ňŢM‰ľ)ň>­ě“w‘¸ŽEšŠâÍ´5LićĆÁUJHĘó'dbé€ü#ďoéSąWŽço@ůn–\8vYtrDˇNoą[ץ–SŰľűm¤™Fî˜Y¨tQ—ž\ž={JżüŐ/éé7Oůú}đ=üŕÝá䝓şŹ9hg{ǕC›eëáŠŔÇL÷îßó䜬Ÿ#D& XŐ1ô够VH×á{™°}ˆđK—C¸ŽŻžţŠž={Ć÷÷ƒÇ™Ä´HG !éäń›ú'úüóĎY% ¤ îKĐr¨Č˝Ä}Đř;ô{Ď[č_ŠmQç{hËř}ĺhˆÎ݇Ʃx–A,úâ‹/čŽ>€řŇÚcw°ĎŽđŚÇßÔ,!<ÚR}~ůŤ_ї.Ţăăczřđ!}ü­OjŠ8)Q{~^ËZëˆjČÂ­Ä…Ł•Ĺ>‡IfýQ˙אt%Î2éLN{ÎŹń$} FśľľéęO3qˀ`Ůk1ĄđŰßţ—ńĂ÷ßçíý‡¨ť6¤ƒ“—UÜYv …☤§Ývű <čöí]6ŠœžžE˛‚Ź´Ćĸ¨—ń™8.űSW`šAĆŹzĹjҐ5Ĺ;+š-üŤ¤. Š÷iDCőGDgŽžrĺ¤ÁpĚDŸv×ŇZ†FăŮą3hŒŘ)†wé„HLɓÍějŔŐ]ÔY1¨‡¨sXyŠý¨{)‘G܄ Ń­"LŘHä™6꟝ŃÁţ âOŞşŕŮ㧍"AȖźŮT•%űœŞŽ“ě_dŒÖډ0B\ňe3iŹ­çąŒüQŻ ąą39Ű{„°Ă×>ćx¨Fţ!öŚĹi#<ĘĄpŸĽÜ„ărŒ1™C}ȧ…ϲ"żXůk…Đƒ?…߸‚’YPúĄDE-^O(‡˜÷¸…tLBśÁw}Râ&• U(ü5h^ ŠźŃ$aŹ”Mj—™›BĄPLH?˙ř˙ȆY¸Šť&(> /ˆ}x§Éďe ď@ˆ3é{d%?ŇĚߣ)šĄIoĐ€ë)¤R úӈKށ2ˆ(Jä<ěƒÂŠ(ŃŔ¤…k€źƒWĘČý­i$B ÝĎw‰‡'ÇL6كâNp1…´Q)FAĺÇżüŽe@5[ţ\ŔđŢŤ=úů/~N÷wG_ő5+ůüđ‡?¤‡ß§nčŰc̀~ ĘäG?ú}ç;ßa5zZî} ľ ‡~ĐČ÷'Po„¨…ž?Ô_LáU™PF(/”!žŁĄâÂIJr4Ńw"ĘÁ`ÍőÝPGçQxN\^žżxAżřĹ/č˙űüLЀ ňöřƒŚş8š@Fćéço˙öoůYBÝűŢgŸŃwżű]ÚĚęT—P>¸˙ČTSÎŤ|…—ƒýĂŘič4úý3΋ŕźáź˘ÔGý™w?Ü˝—xšÖzŹŚŒ\=ĹŘŕ<@Üüăš>@áęôä”ţěĎţŒĄ^ˇ2E*AT‡Ěš˘á`HGŽŽýň—ż¤˙Ď˙ţż3 ížło}ű[ě^ đ|śra Ô~0°˜JIż#y<ŻíŕęĹŇ\iĘfj ‰óç`ӆrEŸtÂůCVíJÇüşĆnßHŃvŔeÜ=×΃,„6yTIĄP(. JüQ(oŚIŘϛžŚÔFÉ? …BĄP(7^GŒĚ”¨NP$űěNÔ+dç8ř¨)ˇGE ľ(U”UĐBě˘&˛Y=%(§ÁAŽ‹ŚîJńŞ)úÝBJüiŃ „Ű LňŽüJńQ 4 ü´‹6kł#žJí'R*yĆ"›(üH]“•ůR'SŁ[ŞnÓ¤ őß§]ÁP˜şœ’ź ah–Űd›‘<šĆlóĆ^çZÍÜVýĎSüŠ&(Ťqö §mŒĐY’ö)Ąšć˘;ÔËJ&ÂáKáÉBÄ|ŽÝú}ąqcűaI“z˘âÔ#vzH•Ť.Y!NÁ•Ĺkd偐PZGŹM(;!ď6’~Ň­*—ÉćÎćú@ hRł¨Ę8ć5œŸ’×bůؙą) E#`4ąĆ\=„¨€ř’íf0V//H xWŠk-l˘°ƒcHďvv •ôCĺݚžsÓw­¨ęÁ>n7âGzČ7ŽKšŠšPô@F‘ţoŞŒ.qbC $ÜYżĎíąô=Jy‰MjaPˇLňAů"ăńˆŽ ¸&¸ b—AÝJľj<˝VŢ{đ€ţâ'?á}Ÿ|ň /h)ľň+ŠÚ{9ďkXy_Ӌʫ9Žx%˘Űˇoł2I§Ű]9Ţ1ܚĽ) ä^ĘHż‹.žj _"ܦṜ–Ď2”ęĚĆ­ ęŇrD.օ”RL!ĺ,V ŮuňĚĎůîmďlDž.3‘Őĺ¸'ŒđL€0ˆ:×\Y÷—Žć"ÓnxśÓ¸ŰmCŽM(ÖčŢ=ďÖokóV$ œŸ…Ś2Ů …â" Ä…Bqă0ŤżČäpÓdrÓ÷Ź8r"‘BĄP( …âzPwwCaŇŽLú…T‰RPjü ¤‡0ËW3łk°Ż’¤%ý@LVŚ*@ŒB¨#Š€ä|1̤nhď.,ť|łźŇ“ëŠÁ*~ŠäœvËď9Ä×%|5q%­ŻŢu’Ęp4dă‚( ČÄşŹĐ‡A€1éŔ|ŕ3uc×äz$V&§Š@é¸*uĽźPY,HôYśń9ŤH+™ńą´őq˘­嚪g9=ťN,Ź.ÝÖňC‰ÂŤI{Ŕ÷2%Ýţ]ç*چ똎ŇژÔ8Ć(ŕz…1ĆŃd…ľoŸ‘NJ빪ĚQejD čřú{~EÝZÉf@KDç‹]ĄPźë€qÄźĄp5RĐçĽÇUÜ á —G ů€8„4`üF\Ż^˝bҏźżS2ă,şô rÁW_~Éń#ď [@9H\Í y]0íÝ"éľ2— ŘP6((°Şű-ďĆľŢÝÚÚ¤M—îÖÖ6­wÚ´6îӚëď@ŁÝŞ›Ž#:;îO”Ňyf=Sp×X(7ś2ĺ˜Ć×ď l•ŰěŇ yĂľúúöwżC|đ—[žţöîÝ{ď‡ň“ |űÜż˛ąěZ_~)7îR{îţ †4¸l ř]ŻÖ/ńń ůJavÝoÜëóu÷ĺ‹Oô >ýôSzôř1ÝvĺźTüI‚ťł˙÷˙öżŃO~ňvóˇaŸ|ë[\çWĘôJG. ā|I_÷"ʁU™ŒżÍrő…p‚YáŽ;Ün@mëéÓ§ńć"áűďżOŽ^x6 ¨+ˆ—ÓwaqnYúţQ´ÎM„b*÷Ź"ŢÇŽ ˝ď|÷ťŹ‚…gŽŰBLJťŽI°Đf'ōĽđœÁÝ?Ç^ŹWXB´ tÔřöăöÝŰœŻ“ |Wƒř|Úř×L°|$Óu  ďÚŰoíl7şđBžÓpŰ;[u…Ź$ÚҍĺîÝsßéľH¸Zq:pŐť°ŐŚä…BqQPâBĄxă°čÄa“š’y …BĄP(Ţˆ[žW¤ߛ+(˜”˝Č‰˛Ž*˘ěÓr“˘˜ĐlľÚÉJi/ă‚„¸îJI ˜HŤ*” IňŢBŔ€ť0D‡óꚐ_}í4&ž{ó*•,^ą PuP?ŘĽWťKDƒş‹rO “°ď'‰[Ą_0P§@řA=Łž$ĹHˆß˛_;0LĽä Ôؗ+žćă%¤S&nžŇóRŃ4TrúśFŞš°qŮ"Ě()…˛…ňN ĺĽrÄ$Ă3íÁuUôą%*8ž„•_QúLX+.¸âސގ3žŇĐŤĺŇ Űš\`’—œ/ aŃ=–äËVuÄfYąţäJ‘(H´@Kjä?9mwíź ˝ śŕŠĚ5Ąî9ďE˘ 4"q¨Ĺy ĺ%š•¸R ˘Zť<á̤7mZűbŞößÖÉGR÷|q—DKÔĽźő36¸8›…‰ŽŇ ĹŰnAřÁűLH p3n¨¤8 ÓÔHŇöJÂąR3†‹ę‡ňřňĎô˝É¤ [NěR1â—ľyŢĺqĺR ˆëˇĄ .á 1 oôEźŠPǕŰ}ÚÚŢöŞ7.™ľ˛E=÷^Ĺď ×bĂ1Ý2-Ú Ž´ŕ ¤Ší@îÉU•pţ˛îŐaŞřpm< ţđGźďń“ÇœvÖ[ë´ž6ݝˆ<†ß›eźĎm,&hÉxÄő٘ôí‰ňbňÎ)<śŕš5(ĺŕ{‘t2ŠŹ>­¨đ€Źbޏrűŕńcž+!Ô?”ăgßűß[Ô#ćúłj~šnnlDň‰zg‚ňęyëF‘ő‰—…ĄşÚK+¸ÔĹVWÁŞůŽáP_Ěěň‘ë–ďö\ ŹĆăŇ@;€Ď÷źÇdšŠ}䌎5B›úƒü€Ë$'~bš˜¤Ë˝ŕ8ăx!ßá{şđƏůCQ”śňüú€q—Š˙ Ď-<<ć9SÔëw’(v{~D8›\ĎŔ_ĆQĹdK P(ŤC‰? …âĆÂLČÂÎ^ů˜OZça›T …BĄP(7 bŕ„|L‹79ęż$łÖđŠU"x"ÎMşwœA“—v7N’‚Đă.W­ŹĆďjśĎ$nƁ¸á'ę„Čă ý(ĺŸŠ*ĺ!ď^ĚÇE7 ÚžLؔ¸Č fŒÇž< Ž €1Vy–žŽ— g!˘Xá]đçŘ̎ý÷ńhÂĺžC Uށ Pvjj7D36QhBS|ő˛˜<–“ÉÇęĺiF!7C—}ˇőÜ>¸îóÇŹąáŔ†P\đ‘x"ÄŹđ;Uü żk9Żl]ŰQ`…2VŒ—\ž|ý֓†Řbą&C<ŮFň–}pŁd[ČŁĹĄ\ߒ\˝é–vŕ~Ÿń§§ńxC+qkŰru˛óĺ aDâ>ŒŐÖřœP1É֚b &[s}ʲśŒ9ůn›Œ^Śą™CľŹśfő&ZĆf÷ĎÖ÷Mˇ Ebľ U(Ţ€ 5 ´‘0‚ăÝ)m(ÍĚry# j)ÁV⅂ö Q]dA%ĆÚhh÷ŞŢ ťĺ”ř›”× ¸ IWHJŒîB˜c{~>΁â >…trOJ$†2öĄP6 u ˙8Ţ IŰ;;žźÜťamÜáĎ´b9ťţřÝŢ­oßfňÍéÉ)š~z›îßżĎyIëBżćŕŕ€0•"žç’ĺ]í1tńl…ë…ęĎţëý b§Y ‡ú"ŽAî/ĘŞ$ź `Tőť@đ‚ş“¸x½fŇB˓ň´O\ý…qÇÉń1PNĘjTWEŞN*ŽŰŘÝ$H–ËGHžî9†ú ip]’Ě UBŘ<ҖR§Ç~! )<Œ/*IĚ˙ÇdýLnkÜ˝rڏSŤ]Žń‹€p-Ňžőú™"҂×v„:<ş>W‡ …âí† ōÇ,ţ´5MrśédwJšśşUĄP( …BqÄ×_óú)Ą‚á…Ÿ(É}żšŤD 9w„ˉ ٍřb'ĺx傂K¤—f=Ń'–I 3™Š\”ćŃfekkJXj.¨űŇçÁL¸W\&!çM%ýÄăű~'ěSR(o>Đ_LÝHÁˆ Ľôő°ßŨœCHâŚ+ŁL‰8V Ô ˛  íŠ‹Šœđ“Ć›“f[í+ˇ4ľD9‰&ĎsŞ „ôĄřáÉ(-nŤ‘O,П†AŽqQ *!ěÁáëcŻą’‡(ć´ÜťĄ[¨°ž/žçkÝ´hŁč‚ÄżAŒ8 .ŒÄX vt|Âĺ9SądSÜ逤ł]qyçĹ9ă5#JxePéă˛-ëD­şkJKó誸^Ô9ůˆťŻâ”^d\…íźî˛R€”ÔYU5¨BDḥôăňq]Ž˘ľ*đl‰+ŞcWĎŚ”ʰeŐ¨äj$ż{nĐĆ­ěŮk"Ç,‰ú°lŘ4A0ŐjîÉAşBĄP( …âúaÂŞk/‡Ď{ň~łŇ “˜X…YëNW%Q(ŽRS‹ŒĂţh(şiu´ž"˝‰ląČs5—`tŠĘ?!Tý8Í¤í¨…łą~š„(’Ť|͂1yQ\BLŞÚâoIÖÎVxhRĂW"EQՙFŐ%6DŠâ(ÓřŤöŸŢmI<›LęŞkŃ)×nr‘—qGí%ĹŤP(Ţm€\š\1'‡(C¤mő,ácÄ@ýĽiRT8Äe§|Jˆć˝Ď§đp4 ˘kX…eĽŃ^ťG­˘2ˇĄEĽ’őőŕ&­ÍŠ?MI#ÜÖÎâOú{UKĂ%őŮdŽŕńúĚĽwË*óůçÁ¸´L¤:tuüŋL2kˆ°˘R(˙Í­M×n{Ő´EŤc~ëĐ3şgůĺŤWtxx@ýţ`"ďˆú–Ťhż7ˇA Ýtőałfa¸ŒžlŤi^ĄP\´uQ(7ůJ–˛?ŸM§2öŇ1ĚäÄ`š•Ű …BĄP(ŠËĚ˜ŕ†ÚO:á?1ĎjëËúj*Ůąi)­%)R4JƒÔĆ"ym+ů˘dăa“k8Ľ7œ^ů¸>Ăęm^ľË­źű*šcŢe_(s&ýäŸÍ$ĄĆTĄđcƒ@ÜlÝţLü— űD!ł:–äŃŰÁükńŚ%¤#k‡.ů>Ť ‰Ť/kźß':Śčş+.†k Ÿ– DľŔwĘu|Ś”ł\CÓţ n/˝Œ]&ją}Š7 ˘ě%‡č†3܋Ť×2ĎR âÄw(D Ź'ŞĎ7Ě YhÜĽD!úĹźÂUö{ˇľŠJÜň-ČJRpáŐn‡@*ąĄMEü˛OÎÁĽÝi{•!—ť}{—66nU×e˛E—Ů[î`.ťÁ=ÇđŔ¸×häęÓŕ”ö÷ŠYę]&ţ¤‹YQvPMęöşLPůGîă?„°oîqm}śśˇčřäÄ='4MýD¨Za ÷oa\ ńe%źĹéˇmvŠ Ź­ƒP×iN;ď~NÉî+H]P€ť>s1EeěÖć-Woś™đłáΊŠf-q}'Pąşĺ*…BĄh‚ ōAN̙5:mp.w‘˙‚HďŚajĄŇT( …BĄP\1Řm¨ÝrƈVş“*k@Ş˝ R›0QĽŁśż1ąUĄäEŠşžžp7Ş]Ś&9oăÁ˘áü*ž›Š&5šoŒfœń˛şmÔÁvGäC'ś†öŁż;Âj‘ř~jşÖÉËYËbŔ„›ŇĘŕ„|Ě>˝šŻšPp`ă.yĽ~“—* ĄĐž‰"O$鸟–#ňd„şí”ŕ~̆x*×]&P|ZTQ|$]od–Ş[ăˇI.M˛+˛™ššç7§˝´é5Í1)Š› h@ŇąŁ1ԔÂSׁËÄÂČ ć m‘JA)Yf„ř#Ģ”řƒ}BAź˛•y:Š4‚xĘĺɏČ;HEpŻ…8omnf*w>p/×^Ÿ|ň =zônßžÝ~ÁőÜ0MsĂű.s̃Áž?NżýíoéőŤ×ÎĐÖĄÂř‹(<É˝}ďÁ{LšÚŮÝqŁď’kžŐ÷žOťˇwéăO>âgŽ xžV6Ĺ €kŽÚîŮ—†­˘ĺÇZŐaé‚RÖĄnNďnđϞđs:"Š(ëƒk{ÁŸBĄPÜ4(ńGĄPÜH,*ß´ż‰ÔÓtnŽ´°L§BĄP( …âĘŔć暼ż­/f›‡™CÍR݄ó.IÉâ‚`++źâJ‘Î.Űh—3);"[x0}ôćŢ? $—t ”–w|#ŕ•r@úąÁ•7žáäqaĽĘ— VX!ĎÖ)¨É­ôÄžběbĂ6Š*=ń‘4Uć›âŕT#á(]ŹRú<ŰIő ’Ä,c]Ż8DAÁ„bňĎ0ZD<ńŠjÇüŞ÷”ĺ‚ö7!˙Pu_Ť0ĄŽ› @QžŞáŞs.=ŚçŇ QęlBńváźí…xfÍAÎJ7ýLŐÍó¸RŐň¸V'ČâH;M5ÍĽ’ŃÎÎ}đř1mŹ{5 ¨žŔđ #ůúúťޝF7˝W|~€„Ôáń!ííďŃŤýWôňőKÚ{˝ÇîĘ@šj­ťF÷ďźG››\fěN năŠf_ŠŤîÉŚŤă °)Ţ< =ŹT~fkŇŢŻz‹ĹĽĂk…BqCĄÄ…Bqc1ÍÍ×´ďéYÎO€ň¸ă 7IKU …BĄP(n8̤Ľ_lÍóöůfŻâ˝`ňœô§…Ÿö;'íËVam$˙ĚKwŮü)–ÇÁĂ•–kČĂ4Ľž‹z>¸>^Éľ™ĐLćŻć2‹‰Ł´‰ědlŢšşžŽž)6j•ąüYK?+ŸąwďelWóâ”iăĐYŠľéFŸ*żžô“Ş9d÷.‹gŇriş˙R§s×eW ×+ TW Ps{{‡üPššČ4‹@ćá~ë›ožá}<`bĚ2 Bľw%!ţ§OŸÖâĎß&Ła.Vŕš ĺ & ď 5´ŰôäÉş}ű6ÇYyČÜAœ(&H,Śţm^ćć5Ó×ÝmHż?čÓ˗/éůŤçô|˙)íďŃ­Ý ęlśŠ,J:=;Ą˝˝3şľ˝A?üáéńƒ'ŃuˆSĆ,‘ŢUżĆ–M˙m/\tů/[<šţbéG2śi<×,˙˛ÇĎ^ĄP(ŽJüQ(7fbĹkóÄrÓdgz~şâ& #ŽżŇ•-ŤŹĚQ( …BĄP\C}Ú/L ńTůJ˘œ>{vÖä{Ř8nćß%ÉÔĽ-چžó{fJ!=jĚCůGH uTĺ DŠI"´k–üëŔy“ľY]šF4‘`.ŰĆcčœóŇňˆÝp…ˆňL žé˛>ĆŽĆ4•źęžÓéŇúúmÜZĎ{ÜJƉވ+îś8iʉj;ńž†ď5…–;ˇ L/ě§ ő§fĺ *Œ§a„EPŔ3žýäy–üřč]úśí?9űP ¸-¸—qűŠTŐŇB,Şö1¸căr¸ţ‰ą¸MŰÖpŽIĘߤ×ë˔Œ˜ŤÓ-żu>­Ô­ ŒŚwďŢc÷ pËqć ŘŁPi!†ř™˜ÖkiyrŐDä˛\LůŽP(ŢÜÖw\[żÎmˆ¸ë9ď\ Ú&¸vwwŠcrޞ Mí~~ůů€âOÁ­ó ůńyG(—iý)7l÷ďßgˇ_0 íş8Ěë4]v§ŠźâĎÉÉ)ŸSxƢx[ť[ŽkŕŢĎ­!uN[tF§nß&=|ü>|ô!)ÄÜ?Ĺ[„eHt …BńA‰? …b.VŻ29œN~ŚáyƒńôźœÔ#+n$ އCŢđ]&QąjeYßŢ …BĄP(Š‹†MţRâš'%p4Íô׍š÷oÔMű“bŕ6éšÍÚYF™<ϋbšn˛Ľ”GЄŠĘUˆZXžę7›šˆIHt!đŞ#ŤÍŢĎ6ĘĎ;WTNšęLCř 60ɃŠS~jnƒLFšX&ţŒ8˛č¸mqR[¸ťÜüůŹř›ž§eó?q~<-'áMŞž”ĽĽţـƒ7ÖoŃí;ťćK$žD'-Œ%[잣j3R"b–Šk!]x)lwď¸8,Unšć.ĄĎę˘7ˇŰnƒ>_WJˆáPéIá™fҎi1ŮĆ×7ďîLTŕvd­܏ Ÿ˘j'ßÉÄć2'QBŠ˘,p풸 š,9ß­˙l˝ œ76nńX]ގ( őéőëןÁˆ-D(É{ňôQ3y'iÉĐto‘ůšj…T(Ţ6ŹJlE[ƒ6JžO ӔVŽœÖ”!ŢČ÷&řWĘrů—xĺ="mąb9tÜ{*Lë´ćďgQҨQŤŰbbęÎć6‡Q( …BĄ¸JhďCĄPĚ݈y2íč舿§S?ˇÁG„Ág*ť Ňą zóŐĘ9(_ĺ,ƒgŹŔŔ†ßí0ЧĂuœžžňwďśźŞüŁP( …BqݨŒž´=ŕ~[ýxeÜĎI;ľţa0NĂĐ\Ž=ńŰť)hąëžr\)ip =U”ţ˘ô+SĺYŽgĺˇÄ#[OSP߀Ą[zŇ<Ľ$wń4ŠÉĘqqË ńŕÚS÷ˇiý÷4–űČ֞ËV~.Sť,f]†Qß֔~j¤@ŔâűeŤĐ)mퟨ„WšăË]7ĺĆG&ýŘę ňgŹéœ4îÚ?{ĺ›ÁĐ$qÍTů GnxćĆŽC7ŽÝ¤[něúđáű´łł;ąˆŔ3"íDˆ%Ô§Y×R_¨UřĎôxz;ę÷F5U›‘Žk‘żłłSŽŞ7^¨Ąj÷§j#Ók'P2fžlC‘×2>CB&RUžń ń'oݘ˜SÔÇÝłĆß^ĽcƒÇëc*ĆńpSóüůsÚ{ľç(ü6QŮgý{őYôySňBńś@Ú'ĚeBší ÚUl2§‰}h[dÎ0…(’Éw‰sŢ{QŔŞeggüiśH"ł'Śýŕ xg Ż`ç┾oÚÖJź:˙š,üűJyL ťr-Mŕűf"śEݢKV7† …BĄP(ŽJüQ(H ˆžœœ°_éßţöˇŃ4Ža0‰Ő ~ř!OČ˝xń‚%sżýíołďçó¤;‹Ü“îňIgLd"ß2@R‡(ţ`Âad žäQš–…BĄP( ĹĹ}NeĐŤ0řC”@„řľ ôU…đc÷­[ˇŘŐ¸>ƒţ0ÝÓ~Ł×DâŒl8†~rÚW•đbźƒ˝ŹŘN HŘ*Cţi$í´?ě‰ţ|QŹôűýŠmÉҒţmJN ű¸~!!!ĹăźY¤'ĹŃËřĘ7żg&Ű×d l&ý$ę[śîJši̖ŸËϐ-ěbÇI9‘nÚqţţBĺőüŹĆĎ-Ú„ŰŢÚĄíÍŰîYđϑ”žo8•q˘LŸ!Ír/ŤN *Ë GţŹĘO63Q–ţłŽV‹źČ==ń‡om¸öŤŰĄY€ÂŃŽÍĆeT3J7´B JŰ˝ŠĚ3Ü˝ĐR•/i;¤ýˆFÓLńőÁrž°Ľ żŐľ×QľeTť/h3éřč˜Jwm˘^QŠ%éŘ\ĄP,Ěsţň—żä6ĺ˝÷Ţc—VwîÜá>AhńýĆSߙ Î ˘-öěGşč“. K”ťEůęŐ+ną0}ß&…óˇb3{mLč^h˓˜MaݝםĎ<><ĄăłăęhQŇ`اţɐĆ÷>,gçw2…,řyó?á’Á5}M˙Nt„ŹP(n*”řŁP(!@LâabƒŃßüć7!‰ń“ݍ"˝˙Ç|˝ í#ʐĐwGzB„4ŃGžF R,‡NŰ¸ąŒĄnǰ;%ŽłŚRŔŇÔČŐżŃĐÜĆl$긣­ĽŇS!‚Ĺ…ɸHöc“ąÍrĽŐH îŠf-~H régMMꚆRRs‘ ŽßýŃËľ=jˇÜłp6r÷Ć=CݞűěpŮx˛ĚČݏ3B“2 Š5Ąř3+ĹęůGŰ5œšű:âßBúńßMśńŢP~~a)%ĺ CaěRŕ4řE/ăÚ9ݤ}’ú"ű+PéÉ?$őĂłz¤ŒFŽlƒa\x˘WŮX,Bú)™„4.mˆ{vŰb#Q¨狺/6š@üIúhsĽP(…¨œƒŕň7úgčĄß„öîńnE˙ ý­iq4‘€RĽqy7‹’Ň@ŸPW‚X´,F _şöwˆ—ˆyĹi/ó<6ĺWą(\ďŹÝ˘ő[ë´5ؤłaż"ŁogÜ;ۍWnő6éÎö]궗WĂW( …BĄ8”řŁP(!Ťé0Ј/ť_~ů%żwď“0!šťťË9ŽIĂĎ>űŒ7ŽĄ?ĽM|ŁÄĽ­ßEŐůAř?üá|}k}°׎ó? ObœB>Aú#’ôľĎťÖş†Ţ3tgˇË ş7Ž “)˜Źu6˘ýĂ1˝ŢďÓëŃ!Ž,•fǝيJ;‹÷÷FK¤#jR<Ţ D/N?¨œ‚ěőÍ7ß°á17 ŚĆAĎE1ľ|äĞô™Ë]ŘůčZ`˝TMP‹ńn8ƒííĄžčŮӗ\n ŚcM›T˙e ďÔČBÖfšGľ“|JÇĐvfޓS'ČgžŘˆ>I4B Ş’BĄPLŢ˜ăÄ;R”wĐ'Â{ďHěbvŠi„âřâ‹/xnqŕý,ęč{{{Ü÷Â|dŽ$´(p.Üš<"-ÄóčŃŁ8_Šźˆ ąiätíŰ-îomďđ;Ž??’>”ńďKy/ö:k´ĺĆ …BĄP(W %ţ(ŠFČ@Päť1ŕĹŔ4] ,F ‘Ő†ƒď0(HX‰ŤO`čŔw,Ä=‚¸ŔŔÄŸŻżţ:’Œ`Ě@0ŕF\ˆaa,Áo¨aË+7¨Ĺ„7ň…´Ĺe‚+W â%ż,î6œxńű10Ç9؇<¤Ť˛uuŒBĄP( ĹŐB1ź‘Ű–‹VÁnn:íŚĂą<öׂŃ߁¨Śj…5ČÂw;¸kâO/¨kř€ř ‚PŞŔáI-6˛Ŕ蒪QˆW)c_ŇÇłQ#éŇżwdč—"]é˙˛r\ňçˆźń_”D­ÇĂA4ř çH°×ý~ôšd´ß{.@égwŤC1Ĺ&­uÝ4LŮ'[z˛×ńé؇œŃČý>;Ćęý’FŚ#OśY´ôS×oBFĂ=ć:ęKJü‘ú8 š{0QĘ 2r\ęŽÔw>6OŹšžşč-1ßČBż?dH}ł šŤ/öȕl*zŠbĐu=[ÓĚĚRuZdď'! ÍHß45 Śö¨Ťńşďvvţ …b¤O"4ŢYââ s•čOὊăóH–Ó0áz3ŠEqOúwŇ?Ěó6SĽ'°Zó0˘üH´)^m3Wá>݇m-8˙Řř(đĎ.§Ţ¨P( …Bq^(ńGĄPL@€2q+Sh°DLc)ƅT ƒ×§OŸ˛l{ŇÉ9(ýŕ?ŕ0˙őżţW&ř .x0ŔĆ~(á<}0ŘĆŤQőŤ_ą+p°a?ŒżűÝď˘˙jÄń駟˛Ń+¤a´ŔBâ‰čŁ>b"OŞh$îpXэřPHçÇ?ţ1Ÿƒ¸1xÎ'JsčŕYĄP( …ââ!dë&ŃÇ%Œ1-ÚXßpýž ęu{źňĆtĹNNNšßˆmĐF…ÉTŐBîč˙ĺ„OűŽ'J=Bw´€¸çżA\-Iß9%!‰Ę!„œž“$ä7âc TGäœÔý„äż%ŻB8ŁúÓČ?ÎCô­SeüF\ á}e\CîRw^˙W1(K(Ga|‚pý5<ą;^@×oŽţœö-Ť¨žœőÉÝ]V§árĎÔvš ÷Ÿ]…â •P4íaŐ?Y_żQ'ÔQN•:Ú¨˛Er-ŠBŒäyI‰Gi|cvu2v XÄkÂS^ż›°ź*BÝŐW}–­kzžš Ńӎ-cöŽáfÓxâ13ągFźEŒ_>cžŹËśM …b5ŕýüÁDލxŸĄO)Äě_i{‰ó?~'úXBŹFܘ›äž;–ťÜŒÚ읎Ą „ž›¤kW°Ŕ<‚ŻbjŻ(yÓdďĐ,°MöëťIĄP( ĹUC‰? …béj|˜Ž´KW#K8L2c CĆ?ýÓ?1ąN„Ç>Lfc`‹+$oA°l Žq~šüƤ4>˙ô§?qL`#ß˙ţ÷lŹ€JLr#ţ?ţńœ'ěUńo-n ˆy•­;Žô…ÂVßŕš„đ„ýŁŕ7[Ę!ŸUCˆBĄP( Ĺĺ@úž^ą*"–WܢĎu1¨ŔˆâűŚí¨h3C?pűŒťYr}ɑ;îÉAetů#}[¸ÔAżaZ-O¤=żŰőŠ—~Ĺś¨˙˜Z>ĽŸ,d p„üă㹏V4iHž×âÓqÚGG‡‘t„ý^…¨ŕxD­GŒBš‘HV•KxQîÄyâŢ ĺ ý|QžĚÝ˝šź_ńŠˇÝŸnËĐZ§E=ˇÜTL9*™TƒęÜ),ľÝđÇĄ–űAÁ$zBšOú‘ą‰Ăp…œĆŤţňŠ„Çý—:–ťjşTWŇń_ĺk™Ďa%üÔ™yô˜ËòĎňr‹]źË˛ĺˆ?GâŒŇl4áƋ‹Ód6ýV(ŠI }Á{ 䙘ÇĜĄ~đ~[ňŽhŠHyp\ž7)ţäŽ8S@ůr­˝ŢŘÂÍR(Ę];*–™űKß8 …BĄP(ŽJüQ(C‡LěĘŞ` v1(… ÎÇyŕ 7X{7ŢÇ4žcůěŮł¨„óĄâƒ f¸â™ůo}ë[ôŁýˆă‘se5ʏ׆Ii¨áźżüËżäôß˙ýßł‘âłĎ>ăU.ˆÄ(Á°"ňöXšƒř$¨!/P’źôóüůsóńÇł;2q'†ü"Yľ=m…¤Jĺ* …BĄP\<@ĆńdQńbé÷Ô?đ'ú“BţAŸ}şn§Ë$!ô÷žúęŤHşDq虜ő‡TŽm śœŚ­€üň Ňzůrϝs]Ž™ĐPFnFN*H Ąi‹2Ľ„gô9…°!‹ĐŻFž„d!D ÷d¨fWBţň;úÚšę|džă’îŰ_ś‹kÍ\†1̸úaFjűÔľ#şŐquĚŐÉrd]˝ëÓŔžŠrDvtćÇ‹jçŤaœ‘×1Üg!ăŕ>b,Ć÷9#q 1GG䯴>ůô„9W>ŠŞ•OE (Ž%ÇîY*Íuń\*ŇR˛kUĎbc˝i¤ť@˜éq^”bŇŏW—[>™WÇőŠ1 łˆ?Mßĺ4‰]&OŔŞVĄPĚ@Ţ.bž ńŽ2k‘&%Ţ‹*Ä!NÄĚ"I˙Mž7ç}5U‰OÉ? …BĄP(o”řŁP(&hÓI[lƒ" Ťř ¤Ť‚Ĺ•ˆ8ř ňŒČŮâ \q á0Čą$^dEŒŹ†–teE Â>zô(şf€QBöă; řńűađAÜ0úŕÄ |F\$ˆ;q퀼""ë+ח´S’Oţ]ĘMĄP( …Bq¨ú˜ŐgÉîľĐôD¨ďxEgDíǓ Dbc_.%J°Ú Ç3bâ~ š!5ćČ9˘¨2W!ĽЁH\lI?Ň+ľŁ&!5‰+ŚÁ`ؘŽs MÉGžýÝôúĽż>ł\ŸôĂuEřŀLOéő‹S˛Žžoti­ăĆNă!ťýGCÚŰÓÉŃ)‡î~–îţS]!ߊPOQňMnlW[B˘Ź§cŠoé˜fB§Aą''ĘďÔM^ÜŽ™tás0Š˘Ď¨çŤéż *˘¸úňdŤŮ§,¸s~^D@iâ|+ !Ă ńY\m5˝sH?Ť)Nć í'ćE1Ĺź>”­Ó<Č9˜×”źbžďţô=[đgątk‡žČđâVv™óôkvšÚv+Éű´÷Kű-BŽBZŞ˝†ë΢Z¤:ďţ) ĹŐb9b˙äŚP(ç‡ Ĺ\¤Ť[Rrod0*Deđ>­Á*gPŕÁypɅA4\xaĺ5V=#Nāpbt‚ŽDůéB˝ńI^dŁ|B7uS&Dœƒxâi`%ܑáű´AĽŞý( …BĄP\Ä`3y˙ł•[+Ü%ÁřqÖ?ŁVŃŞőŰ-Q!)jŽŽ„Än ܄Ąo;ŽnR‚…¸0‚„¤+ÄđœÔdHjRäIĂ`Ÿô}Ós|üUźç%á4)‰‹(ďžř´UĺŠŐĐwc”gĎ^Ňńޙ+ăuŰÝZˇŹěsr2ŚÓaA}ÓĽţˆŠŹëÝcŮ2֑ŇÚHĐĈߨ—˛¨"UáÉëY‘ŐKŠ ˛ "'ĆEňžżrŔŸiݗ0€ü–xŠĎö'ąEńi‘,4-ęX ’˜YńxSř‹g.{msĂÇě]ŢXXÇŮ …â<ŔűsŽŁţ€çĺÝ%}ÁYnąš ‹E!ď (&˘Ż(ó™óúkMdÚôXJV•JôYĽoËÄÜß.ůšEź ţ`Ž$ů&wdM@ßóˇÇnŢ×Ů[ëŃş;_úĚÓH<čżă:€ľžűÔjT4œ…śK{}}ËŁÓië;BĄPÜ,CŢąžš.›BĄP\ ”řŁP(&0Äđ2ƒc‚ €ă,b˛Š:päƒĎ'OžđŕÄl˜˜Ćęk¸ Ă .š0p7aH鈚¤é?Ί]¤!Ňň~řaTB~0Ć~‹ěĂqz$m j&Çąű¤ wc˛˛Z”ƒp?KŢ7…8 …BĄP(.LN`w[Ăj§2:V'Ž]bÔńKÁîťşÝ÷3Ń˙ƒëŻvťĂűZ­6!šNgRĐßDß}Fôďü9EM2U!’ß)ŮBHÓÜ)äF‰/ݗ„Ś‹@ME&SëLěK´ť<¸ÄBQGÎ x4¤c{ęę×)ľ\ÝÝčš2vÇ\ő˘uˆş•ŽN–e‡ĆÖŐ=ëgqĹßqS,„7Qj’ű(ÇS5VVĺ)Ѝ˘ÚDĐeŠ”'cŸŃpDcˇ Ăq„RŒ$?˘F ű8ÎňâÜT]ňg ÇEě.+şrY*‰UŸóPEӟDšfyĹ!U÷Q(+ŕźýy'Ęźé" BÓŇn"‹Ë{XúeůĆçŒÍŇďŘeŻ;žű]ůĺ‹LžB?šëúĆkkŽ=…ř#} ô­ý2á7ř&1ľÚLž7´8ń Ý#ôÉџA™ß¸÷ľBĄxGąźß”üŁP(.JüQ(ƒG: ň \l‰ÎÓ§OŁ;q„p ˆ=ˆýä'?áĄÄ ĹlPĎÁ' )/_žŒcy„ŘŇA˜T‘ńă;Œ5BBúó?˙sz˙ý÷é›ož‰Ž˝ CˆÄ"œsçΝčn ń€$ůAZ¸Ăo|‡Va ‰}>äk’ľ‹ ,›äă …BĄP(Ť"_ —MŽŐźčˆ%ş2A{oG1ý<^­ěúŹ0<”%TR*˘ŽĄż¤„ ôqށŇGL•SĕÂ4âĎBWmϧö‘’ŚőKSŖÔhu#IW€œłÔšŞj8ՙŠO[T@ɧĺĘőqT˛™ËŮë¨tÇKťNśly–Ĺ4MÇ=Ź 5š"âH]”ďi˝–ń Ć@ŘäžśƒLÎMŻQ”\ŁBOFţbŃŔm˘†%*Mu+uťŐąVP#¸jä÷ű<÷˙]FtőEÓV˛łëX[ĄPĚŢ˜Cź˝˝çqWš ć 1‰ď<ŕ¸Wu?5ÍŐâ0'Ůšü{J;âÚ1:üŢwóˇěşÔőkqݜ>ú0äފüƒź ‘Ţť4ł.˝Žť›<׺žśîBśh™vŻY€ŞP( …BĄ˜„ ĹŇUË")5œO?ý”?ÓU, ę`Ŕ…Áܡżým4Ţ˝{7*éŔĎ5|QcŔ‡ý܁D„+řށ#”x@âqŔŔQ„Qż'6äˆFřD1đDÄbL„§Ę>ˇdh1 ŽďâRL0éëéHŽOˆC˘ú“–BĄP( …âŞ‘Ż¨Ë\ç€uQ3W}WqU$ŽÂ<1ý;o¨HWQ ‘!%ċ˛‰‹1lůAřÎď:+ťž‘“xšŒLÓVŤkżw „ęigś ő¨Ő'Źő(ÜWkÜŘÄ/m‹g ŮCX“˘”uDi'WŸ˛žńFeR÷SČ9ů}ŻŐcŐŠä{ú™ĆÉ?ö]s7OófYMœ‹×ĐšX4(î˜ŮĄíJM™| ĹjůAĚbÎQČ.Ë(ôL‹s‡x׉ByúM?WsŞâ—ůŇîo,˙nŔź'ćH‘o!7ćŇڐ„ÍTˆ|č‘ë{ŔĹ.ú ąŻÍ´ćŠř3ěŒ8Ł~Žií쀷NťC ?7)ţ4öCk´RŠ'Ĺ;ô}ĎÎúąţޅę ěâˇ3ÖSŘĺ‚χłOť5o –mˆě9+ Ĺ|(ńGĄPL@Œ"/~Ş1ˆÍWwb?ÍĐAGČ5ř)œ ™rďƒŮťę‚‚Č6č´ă7ÎĂ1Iuq˙…řŸ'+ąAôÁ€qˆŃEŽƒ„¨řżcˆ ›ŰRW_ ďL[‘~bQM1Šn–ŤŻe°Z˝ŸGÔ[–Čg%3t#ą’„BĄPźů9HůţŚ UčCVܔůžHh˅ôúěÚËÍçnďlšwýˆĂÁď驛űůŘ ŻÝa"Oí˝Ď$`ĚÁÂEi‡Uşô-+ćÄc íŻäÄçúëŘÇ ěÚč‚1/ÂóÚüçÍ.ßM‡ůs^pH?đB0ťů}gx˝÷šţű?üwî˙ţÍĎ~Ć^ŚĆ7g8Őt{ÎSÄs˝7˝ă÷˙Ś_˙üü䋑– ßtŽĽĺăT(ŠI(ńGĄPL w[`€iÜ&äáňC¨5M” Ąh„4 đ4Í/ň˝Ëq"Ýt-ýg7„WňBĄP( Ĺ偽 °Q H\_Y ^ř7L^ÝÄ6ÁŃjÔ*ځÄÝöa-ńdą3Yđ÷V2Ď8€”ŕ +‹ĺSň‰¸}ŸŃŻb–>䄉2ZĹi‘IźiÝJcŇxVCNřH‰@9égÚyŠPŮĚÂoĂ >%IŮ×'u­Áą–ŻĂäÍ`!†ÚgębKˆ?i=E},Ą`…ĎPWólÉŘ.'čä†5űpO”ŽRLŤOŹ7ěąě:ëO^ž&;fgü>Oz)Îe6 QŢĐgĐJ%|oíDPc["CáMc˜ô×<‰˘ůq(Š7x§Â­>YP(s–)Q&EJϑžÓwíź9Ćeŕăs•ƇţˆŔŇ7ň{:×;횲âWżX˛KwďÜáOQ¸1^HńE"}'ö§Óž3Đjw.悋°‹NŰQń'퓦y͉?X´ ľ çŸŢx‚÷˜ďŠÜ;ÔA) )o„kˇý‚Úv¸ˇodá…ôsĽP§Ą°uŸçĎ_ř׳gťgˇ֏‹yß4uKÓÉÚ,Ɠž¨W-jF]9ĎińnŤÍÇßĆú ‹j|ŰĐş!×yŇĎ,ŰĺU(Š)PâBĄ¸rœwĺěe­źÍWźć“ÖMŢéy5ŒBĄP( Ĺ“wĆEV÷ÚHň“~ŇWł4śc6âś[PŹěŇÚZZډ9|Ž)8 Ü{Y>§ôŤ—ŠŢÇL]|ĺFď"ŹRŽÄęS™ˆ­ÎKű’ő+šNđ™nö,ŕ*ĆŁiçL#őżËXfüÁ!’˘ľ Ź$b>é˕š„WgLtîEüÁ‡÷dÄ|ég Ťő­m\T+“äšâOnœ“cŢmŊ8K ŞIQęć Ľv˜JD' q~j]š\3hĺgÉŢÔrĆÇy{—˗*łäő›ěsâόzkóp&(TBĄx[pxxHżűÝďčŐŤWü.ľ>účŁčZK.ć†ć&p;ĺ} ˆhŠ/GŽŽ7Ÿ{ď†üŽ—]ŇŘßßg˘Čذh2oë*RA9—Ě‹ ńź÷ŕ=ş;žű KEƒź)ĄNüŠőŸ ĺąIť }‹Űřź_"ŸŠ‹RŮ×鴊玟oÉDŽăăcS lťÝŽŤƒŰ\îú€_ý”lnnŃÖć&/śívß.˘ŽĺĐďűrŔxn{{‹I?żúŐ˙Eϟ?÷°nëúúÚ:ýčG?b/đ đśużßđ3ŽëŮ÷‹Z°˙ä䔎\ۅţ?/ŠŢŘx+ëƒoϸĐcl˙6^§BĄP\$”řŁP(MF…BĄP( Ĺő˘( Żl%ވ5+áIp%ßC Ф §Çâţkjž˛şÜ¤ř“âOa*ŞĂ˘äž›WwĚĚývEC˙™Ľô5m˙<źYT“ÉŤ/^ź`â:0ŞC}Uń\éGŇUĄUň÷ęĐő  v2†ßďíÄëAţĹE(ö‹kÚ ežˆyDßÚĹąŮiG˘p:ůÓťěŞ+řpÔ Ů×wvýe#m(~ZžˆŸőK¤ëÜÔ/şITü¸ŻF!t˜0ôY‘Ä:Kǃú!*JŐž!a^ż~M{{ŻXQ$ĄSW_őuşs÷.mlŹß`öâkĘŤ¨b~ţG9`C}_ëő¨ĺĘzss“Ţ{ď=~FgyxӀëĆ}FŔłŒçw}}ÍՍ˝zľG‡‡UŘ2¤(„šËőaƒŢřrq9xe1ÞXőh8vcüťÚ­6 †&>",Ęaš—ˆócŮţź™üU-ĂśŹˆBĄPL Ĺ;|<Ÿôf)ý¨ADĄP( …âň˘Nj°HgĹŞ>šWŐI]‰+Žq9žCj)ăůéţ WIç˜L_Uĺ˘&đUńŃ~íl\V˙n|€łlşůx&_Ř0MM`Rє˙NŹÄ_!¨Ő™ěPn–ô1S(Š›(ŞÜťwÉ ý€ÄńÍ7ßđ2ŒÇBŞIąhßJ*ţ žyáÓ÷˛mPüôűŹR˘Œü @@ĽH‚<ÂŽ ǛŇ7`†I4“jh^ḛ́[-,BÎřoÁ$üTu†k÷۶ҋ¨7č H_DÂŚ.ťLíƒß™ĽWŃÄ>1üß$‚ ť Ú‡ Ş×ôňŐKŽOŸ|ň‰ťÇť´ „|ćÝĄ&ş|ţůçLüWGPŠúÚmüĂšŽţěg?Ł'>!ß|ňOşÝ?‹âž ?>¤Űťť\ćX$‚şńśAže!ęŕóĹ_Đţë}nGzČĘe˙ň;Úźu‹ţć_ýÍ[CüÁýĆ˝GS’.p…Źă#O@¸ƒ+¸_üâLźűŮßüŒ?~L—†Ľ9SIX´Eh3‹IBĄPœJüQ(—ŽtI:YduIS\Mß/ MůI'¸WÉłBĄP( …bYTý<ż*ş ţĂN aC¨ ż"îÁę“ju7\š‘e1X^­źč=íO*Ă“‹.8ŽH’Râ\PˆBĄ¸<ˆ\y7:-VţşBŒ‘°ÓâXT51'‚ĎËŰŹ4X[.ÝÓ0ř "„„I‰Jхmzn;==ĺrŔoÖEńH\í…uçŒÜ!ň´ˆJëĘÍ2‰U mEdaRJ †{q/ĆÎyY)hB)éëGÁĽ™Cˇ×ĽŽť_­¨řsď‡PŽ/žż _˙úŸčË/żdĽČ@ƁK˘jÜ1É!q›&  mAőćřřˆ^źxÉĨ—€ †kł+(ŻĂ On›[&sŠkŃŐr˜×lH÷Z\ĐáDâ:ń×ÂŽyە1Čnâ m4ŇBY1sŽĎĎâbhp+;dĆA<“¨˘v㕼úÜ>Ą.€ř’T9ńl˛k0w=„ĂśěĹ܄űŸĂŤÚä;y7pîűs÷ě˝Ţ{ÍíÚ´ăGGGü{<îŃŮéY˝.ăú§\ăźsQˇAjĚç%´ĎŤP(.JüQ(8ď¤đ2„œó’w.‚ü3Œ4¤4­œÎ›'5) …BĄxˇ!rמLcâ.ż"ŘLHk7÷˝,/,ś~1]Ł’c:šÖÜĎ[Ź_ś8éGńvŕň•?3ľ)vśúTp“kŻ&L]da§Ówšž•‰řuťľ‹Ž?—_// 3WL›ěSĄP(.L"ŘŢfĂ9ÚQ6 œƒßâ:6%ŇŚ~äX2Ä패R.ƒ<|ŻŰŁ÷îßç|">äUÔ1q= 20ˆcNü]”D†_NÖFŇ”3 "‚0P?‚A]Ę ŒNˇEE+qÝĹğž;ç4†G:pżĂŽČzmbŃ$S’ ĘĄK­Â睨ŠqN™œ#?ň×ŔÎöŽť?›|mw_ź"] ŘŐh̤ŸżýŰżĽßüć7\W>űě3zřđ!mŹoxŇŐ<#ń•Źb‚ű‚ë•ň–?pÍ 8ě¸{ź˝šĹeň—-PWL|™‰†ůs”ŽŽ]ČM˛ßAřYsϒ'€ŒiQĚhšhâË<Ď vFŻôăÉ](qe âwćŽš:ąćžŁŢÁÝ>E- $´ćLMI– >ŤzŔĘŕ]˝A˝lÝ1ps%ŹW/_q˝śmÍ÷ž÷=nłËáÂŽ_ć+–9Ż ||tÂĎťBĄP\”řŁP(ŽMŤZV%Ȝ÷üix[ĺP …BĄP(ŢXľďę¨`Äâ}śt&Žîâ¨Nţ™\˝B&I ӊ‹GBX 䟫ŔźglŃ ĹâX„üŁP(‹T!'…fć+ -0< qhÚ;T ÷Mń4AâÎż ŠVA.ŸMŠĺ×Ӕo(NůGňŸŚƒ9\‰aČPL ×Á mCݞqiľƒ›4m'Ç'ôűĎ˙@ß|óĚĹi˜ăUp6¨Ó%—Ţ€C>ˆ ˇD%ä9%° Ń„Pv<Žڈěš÷Čß`čó’ň‰rBÝiˇ[KÇ篍ŕű".áĘ¤”>;;Űtűö.mlܢťwîr¸HÜz îšQBBËÉm^Qim.ąćM†o/ŕzĐDW֖‘ř„ňXë­ąňŃö6Ęcvw˝{9yVßŔ}[Q´c[ ¸ ř6 ×ËÍľ?LLětŻŚfJ:5…)(ž[ŇD …⢥Ä…BńĆᲠ:łâ×Im…BĄP(Š7Óúy%ęŽKą.JaĽŠ^^Fý›EŘÉóWţňR B˜ÚoĚžŠEÇľÚ) ĹÍ?‚{&q bƲsŠÓö áAҒďO†§Ľ )ń.˘@âZ ”E1˘°ržôŃGLh٤çϟ;#üśw6čÎÝ]glżăŽošŒvčŮÓWôĺ—Oé7˙ô9GÝš}Ÿşí;Ôëvřœłţ^ďÓëý=Ú?xĹ.ą>ţřcVąC=ňˆüTƒď0äƒü‚ňE~@|ŔĆj:×Dxş{~än”VţŐżúWôńŹôóá‡OčăO>arÎ2Žžâ.wԖ€ÍMď~N\>Ô€ű€ňhťýő…ą ”Ă+ޜÇŐŽ .­Vxę´ŁŤ']Ö×ÖçEќ•7Ä՗ĎžE %•łĺž ÷\Ŕ^k‘úđÝ˙¸>QC9€(ˆgocc#ş€ťw˙žwÖ*÷fáôÎýY 6[U$Oâj‘’ Ĺe@‰? …Bр&…"…BĄP( ĹՁWM0j´ÝÖĽÂ}zĺŸĹҁecIŸJ;)§÷óęĆYFli~wP)‹f't+Ćľ‘í˘TU݊Äôć`škÂeĘÄĐ2&ŠUîáě[tžű7ĎšČń‹Ä‚ĆQ…BńÖ@ˆ9 ŹŔ 2 pž÷â„qÁ‚H â^f‘÷Ţ4ˇ˛˘@ BČ8řĂż¸yÂĆFm2+ľf Ô nq…k€ş” Ep !]mp}PYÁ†k‡Đ`اîڃđţđƜdZŹňsv:¤ŁCW6Ăő:÷{̛i Ý5 Ý˝ĐÁţ1={ţÂí;ŹT‚tÄĺŽůC‹"“ä á˘QߘkşA™|ú駜Ÿ0áÄcŠ•âó.ż*Ĺ!;ašA\ć-~ŸyrÚ ~WáIpŁř˝(Ü3Őër× äˇTÝëmöd—ƒ(aĄ-Ŕó†ç$ ¸źÄ\,p\TÚ@,š}ôî×ĐnŰÄ5˘’} ĹĺA‰? …âĘńŚuDŐ˜BĄP( ĹŐ}0L”ľ[ënŰu“ekKOoc:m<>ŁÁč5Šƒ&ƒLĺžÁ„ß6 kiUƒąÉßnœWů§ŚźwVŠđ˛`tşbŐ$i'WŢi:gŮ|Ż:.b7eJţYy‘Éďúm0S~W;§Ýś*~›}6…›u˙ćwě"ĞŤ"˙čŘ^Ąx×BH,Łţ€•T`(¤ŸšěťÍ3FŃ~ƒ źAÚÇĚßß äˆâ—@üŕ~qpw„w+÷k—$Eńq@\jaCŮŕJ@BjůćóĎ?çkţÖˇžĹ×úňĺK—Ď1}ôŃœŻ~ßőąÇhď7œąŰ˛Ş;wî0ńFyÄâ•iő]<žĚ„ćqžŁęH.¸Fqő„´đ×/Ę?HÇYýăútÇ.ďýĎŽŐťęęşkň×c‘j.˛ę˛ŐááQüˇf˘ř‚űޞ`ŹzáWŹx33ž˝ƒƒ}zýzŸżďîîťgkëŕËa¸´ŤŻy ;­x3/v 888Œ×˝żŔ¤| fšőkÎTóîkš˙K$€gBž´[í „%í8Ú¸DŰľJz‹]˙âğAěň{ĆDH”ŕąÓ)™ü @[ĄP(—%ţ( …BĄP( …âĆA&ň ôcKŹ ^qřjŰÔ*:îË0XÄ ňŔo!‰}Q¨1Š]8(9&Č?iľY€s& •´=%ušNęt~ź"żĺy˛ľüčˆU0Mů§ |ă& Xq##m–ÜĂÔŕ!Ć@1<#,>Ů%ŒÄ!ŹCźˇ(IH7+>˝…Źwç8žH}Ň:§P(.ů{o•sb5y˙ĘţEâĘż§í{Ú.çkÁYC´Bţó߈OŢ’.Ţx'!/řĽŘ‡°Bş1Le.ÍHŤIöLPílľ Z[ďŃĆĆ:“@´Oű&Ň?Á>!SíěěđUQů˜Ľ…w%ׅrÁľ´Zm_~…žŻŠËڀNˇĂ!k֖$@-ˆĺ Qţȸ$ęťnůŮوŽŽXŠŠăÚÔnŠM 3÷“:úŇ…BqQPâBĄP( …BĄP(n$˜œSŽŠzLăQŸVAť]ŇÚ-Ăä1„cĽ >ąš‡ř `EeşRPV…çyšÜ5L;ŚP4Őü-ä ĂxєŒ “ű`|B=—z++řĹE‚?R5ôxž7,yaa>Ms6SY(üSLGZ~ˇoߌŸţô§ôđáCţ …„gϞą[ŹtFű$ę ¸¸×pm€UĎ@yuaa0}˙ý÷ŮXŠ6żÇžůć›7TPwÄĽˆ(dœ˛ťmž ś źűĐŢŢŢáţ^7¸‚‰.ł–$ÎČűm$ÚQ.žwßyH˛ˆJ;OŸ>ĺßď˝÷ǟ’˜“kËĽ­Ĺâö ď´őřŽwCJ`e!źo ŘóýďŸîÝťIĄ á GFěşkw÷mŢÚ&cńšĹ{ˇźp}÷6ď×÷žľAԂ;°Ž‹gĂĽS:ƒřmž\ŇÁ˝b>ň",ŇÂ;Ÿi?‡Ë`5oZ&۲ľŢúź÷ş5ĺЅĐeźľĺÇ%pí…{ƒűěěÔ]}-Ý˝şbśšů›‘Ęaww‡żoťg$1)‡íí-Z_[ŸEsVŽXńfÖůvČQ§Dé÷?*üXâgb)ş7čţçŔó~t䕰Pݰh‡Ëaw›ĄćbÉëŸb^Öť=7Ö˛ŽŻţň˜ž?{A'Ç}*ě6ÝZ_sméľÚ˜ăxIĽ‹¨4‹Ő…BĄXJüQ( …BĄP( ōƒ6°bn0<ŁA?R°Ľ+žMĽĚSwĺT{ waMÁĆkʏĂ=T0đ ă&Ńq.âĂ÷T1EV=ËďtC:âîA”8€tŐň2ŠAЎ]7ąťšćęUŻĹ“ÔŹÎBB¨qő+B‡DgîŒoĂĄŤGő-Źü'OꙎ˘_\Lˆ q×!ę1ŽÉ~=0ŽONgfľa5˙üzÜh贍Q2QÝ˝ǑžbëżÍ´psP;˙†AĘ÷m҇~HŸ|ň ÷ Fkiqϰ÷´W8ŽşƒűŽs=zÄFT´M0Âpˆ0ŇÖá7Ú,¤‡ś ń >œƒăŘ_|ń…3ÜždňŰ …âMƒźŃÖÁP.ŠjŤ¨ý¤@›*yTĐś –!ČÎĘ÷ţžwu$Š7ŕ—3-w@÷Z˛/w'†0ŇW \|4wä}ř˝SZŢJt؝ĄD¨út:^qŸLŇ1žo^–ă¨b‡>9śÔĺšôçYŃĂ˝Ăđ^½“ű&ýo ™kząçމU?i‰ŇHüÁĂ&ߍtdüQŚĺđFĘH:–2ŠĘÁĆrxۉ?é=OÇ ˆ˘>ĚĂLü™xDf É$őá<é-÷8Ím­›{hƒŕƒÉ‡5GTö{4ęˇŮM`ť7 Ű*šđF …BqqPâBĄP( …BĄP(ndĺąçďŒÜ‡×Ăé§ĹRŮ]ęöÚÔnľÝ>bCŒ0PÇ#&L0i§Ó *'~bP2 Š#†!p.Œ˘œ‚ÉEQBxAˇGD-†(fŔđˆ1" T×Hď.@úůîƒ=şďęÜíŰÎpŐ Ć _GNúD/Ž úćů!ýńOG´?8ŁŇl¸IŕvPÜĄÚDő´ş„g2ÔŐtŐ<Ň@]Ĺ„Cý…ąR”c™0OU­řšáţĎ,CćT…[š‹abľĎÜMţ6 áćNňăćÍŽ§.]đ)äÜG˛pqßđ†Wܡ_˙ú×Ü.ýŕ? ű÷ďóy/^źŕă¸×Ož<áý¨řýüůsnŸRc*Ú>¨ ááŠHažţúëč › ĹۊUűhB(’ďNţŽ|ż†’ŮOÝzaCűţúőkîĎâ(ú âBä (ĄŻ‹wÂŁ UšľuŻŔƒsĎΆŽ3Ńs{żÜĄÇO†dÇ]ÚXß⸎]?š8ĄÓłCŽëđ*v'î×ătđÎĂ§źŤäUJi˙Dú.ŚU\i;M ä“ńĐżQ&‹ÔćHë?÷÷ř~/_nń{ZfŔښoŹĚ¸bâËL̸w¸f)ÔI”ƒՀ¨T-Ysű‹ŮďóÖŹyůł \ŔÁÁaTtÄó ĺ#ěCfQď–RüáL5ヨűżDGGÇń9đ‹\ťsxĚż™čÚâUÓ[Ś*YŰ|Fş>b\vŠ?€Âp‡îŢ˝KkDg‡îY~ݧß˙ţškť^Ó{œ‘BĄP\”řŁP( …BĄP(ŠQüą>-ťŠ <ĆMđnâŻÍ‡Vťî@Îň"ЂŞ Ře0XWĺŠq†řޏ`h€!Göâ'Ý`œ-_ĽŹ ? A×ÍşÜŢ4ôčv›îÝëŃúZĎŹ|ý,KCG}g´jwéôt@Ž:Ó!´Vzž nžB\3]j…ú,$ Y­/Çd5}ęĘ#/w'&„ërkINôiúäç$§rR‘@Ôzä3d v<îÎ~§nÇĚŔMTţÉÉ?9qP\tÁКś5PÁGŒĽPœŔý‡;¸…ą A0ĄN ]KŐËÄő!CˆÄŽD nKR…BĄx6„vÝä „Ëî†dVń›Ńç“6]ˆ*B‘ţĽ(싼ăÓpŢöě•'ĹMm'¸żé€\Úý4.ůÂľƒä.ýY!ă] yG\ˆżŽáÝw;pWăóŐßaYëôčáÝ{ÔłŽlJׯv†ďŢZÇş]\ŽO0.A˘wéőĎ\š}vűüá]˜““¸ĎO÷ý Sşn7˘q‘W_—u‚Ö´Ű™fŰĐňžwtˆń\/<“řţVôLVš—KŠJÝxŹz-oHřvÔúLn>Ă´T´ÇŽ=´dVyţ …b(ńGĄP( …BĄP(7<ůß*‚Ű™doňM›`€Ŕ żnˇÍnŹĺŸ“ üƒ-Œ|‡^íÇązÇĹ0’zÄЍc0†`ÂŽ0ŮÜ .”<ÉČ÷q˘a'5Z¤Ť“ď(Â=ęę‹7vrýcUŠq—Nű›ŃX¸şó ”púh$í%Ę%)Ô?ćPAÚ÷Pˆ†=ěD\䉱Ď+dë(°Č*ŮÜ6E}`Ú'€¸Ëá|ů}ynäűź°ľpĆs†ÎKP™vţe=żšŔÔ6ÜS1Ćâ>aVż?{öŒýéOâý8Ť Ąę#Ęd8żaĚĆ9¸×âĘ é`?âňę ”¤n|őŐW´÷jăŕvô`ƒšĹ´Ű:ď~kťŤP(fAÚ´ŸżůÍo؍u†O?ý”?çołwsţŐiÓŃÖâżŃނ°‰vyšZLJE{†ăôĄčÚi(ň ŸŔŢއĄŠn)„\Šśá˜čéúˇč×J>AOAö+Jv1é6ôĂA Ž"| ţ [Ô*ß{ŸîwŕšËĆţLߎčőČő7Zˇ\ޝáťpý–§'|]ˆď¨ôڄ€ľ{{—îÜšM›[›áXâR+ôSŽăą'EÜ,ýţj3ÓŐl$˙Śů=ÖnˇččŔ+ŰÜu×݅˛M8vŰý^_[§•qŊ7ç!5t\9><âďw]˝F]ÁVĘĘ+ޘůAfcӓcŻňt7¨ŐĘł řRŠ?oĐýĎ2z?Ń@ůˇĘíUw‘rXňúĎúŹ_ĐÁQ›Ž\űüüů3×ď>vc<ßßţΟíş{¸îڏ/iď5) ŅC‰? …BĄP( …BĄ¸‘đäL ˇx]~C}sżĂ!Œ ÎpăŹLR0ČMżť}ÎBC ă‚w˙…cě^éřŘJŽ#ąg}}'N;n •LĚč÷q…3 2ي|‘žřo c¤ßŻĎűSş[SsY oŚ.˝FĂ ĆmnRÚśŠ„âĎؓ9úWÎZn‚*@ż$3ÓŢ0äZÉúţjŢZʔ•~F4苏ß?siŒšž qD &ŘǤgô+ů)ăĘůhB‹’<&¸ŘŤŻŔO .˘˝ÄP9pů)ƯΗźÖÔ|źĎď[ŔH’‹ßÓ>ď\“^ۜ¸/&k*ßep…ňÇ?ţ1 ßObіŔ( #-Üzá^ţöˇże2—¨1€„âŮĆœ ‚¸&„›|ÂĐ —-6¨Eො‹ú‚´°ĄƒqsvɚŠÇ\/­ŽÜĽ‚*)Š‹‚(ĺĄ Eď/´› B˘ÝDťˆž_jl_&n‰íŞwđ‰´đ.Ů%'Ľççq5íCÜhóіŁÝG w"~¨šĺq§Š—âÎQTćrĹ9ń Œźîěîr!&JßÂƢ÷mhÝĽżwŁkPg)Ăfžuýd@Ä÷Ý I›ĎĎúϢLX˜‚ű÷… ýŽň Đ|žMT(Ęő ý9ř˘4M„ ˆCá{ۍqşAÉŠ],OxŠá?ćĹ-ýIůŽçoŮg°1+7ˆř“› î{§ĺ˛v š´—%@˝ÁÄn¨z.|űžť¤ŽĚąfĎpTô„ZqÇă­í6˝÷Ţ-w ×ĎVÓźBĄ¸hë˘P( …BĄP(Š &#đ˘XLćy]đŕ5,áÎŤ•ÁűtčŒ=ęt;ž$î Č@nČ[ŒœÉaÄäě;ĂČÉéIt_€ ŁŸD¤ TFwaˆËŤľŁaBÎO âňA '皜żT†›”qœĺráÍţfĹD#›ă™žFĺrúg}꟎ČnnPw­Cˇş=WoŒ3üčŘŐßăă3:>Ňp„úŇć‰ě22oř2”úЊŔhD"ĄÎÉň{[ŇŒŒŚˆőî1„Ä#ĆH~LBŹČœ!YolEŹu^éďP˘.#ŽňÄ]~łŇP9ćźłˇ°H_Şßęö.xŸĚdHkÂe›„źTŸ@sJ“ŽCL ?5Ć1­^ŮĚĐ>ł˜ă§‰ĎFAűűô?˙ç˙Ÿ~ýë߄4<  źHűWżúUtK(Ć[ԕßýîw|pĎp``F˜Ď?˙<śQB\@’đ‘°ĺŇ‘H\żL'ŰL'ýTW˝ˆ"Ă$IŇ+]řXň˘žF°LĎW(ŠER”q@lA[ˆž“Ř ¨ĺ_„ts„Ô’÷SbK.ENŔi ‡ÖOˆK˘>™’Pjާ2ŕz ’ˆžxWˆňNz­8ż/Ďŕ̽ۍ÷ZŐżl ę Z488˘“Ł#~‡TĢ“Ň˝'txě•č@8•>´¨ŚHÝ킴ZŽçŤ^%FĄ'„.!§9:şT dăÔýŠÜWžWŮíAšĽ|÷.\ý8ezćĘę\¸bâËělLýŕŕëŚ|żƗ˝bâËüĄĎ|‡u‡i9¸>b™Ő“=7ó3ESr˛Tđů¸ŕŽŘ‘{&đ<hŁĐ&IšPZK^˙J‘9ô ‘vxL÷ţűí w(ĽĄג …BqPâBĄP( …BĄP(n& Č29;G9ŽÜ&¤†akÄ éd{:é^n˘­=fş1•ŰŔbʰâXH>•›.Oč1.î"ĂӕҩF&ü9OĂaŁçzP'ýTűŽ3ý%Ŕ“7א:tęŒiű§Ô* Î6¨ŰmHÇn˙ž›Ă~˝?$Řx@f 4Š ƒa+Ôk@ę^Jâp5s00qłáž…ĚâŃN ‘Óó_Fc˘¤+†ÄԕIş_Tłx˛QpŮŠhś"-eTHůOĆ[ÓŹÉČy„ś9žMՌă>Wő ż)ÇL” ň€ńó›ožf᚟Ąłŕňŕ˛áËv!-ĽUS˜H/'˙˜@vËUÔҰ)”üŁP( ČPƁťL`L†mŹ(杧O‡w"Ň@QúŚ ĐJżX´›Üg˘ťFäůuQ蛅TńďɧźĎEí‡Ý{š4<s =ÂT›5“$ y“Ąż´Ä ŠäA4oŠŞú5‘dĺúw­”č3G$oé%TOŝž+Ţm@ݦӽޅ%7ŇŽĘ÷›d mˇ Ő¸ťđóDß~ťqƅKƒ …b(ńGĄP( …BĄP(7Ćx2(YŒ<)˘ÁŐŽUŤmMÍHďŽĄM7×ň+ŹaĐu üö.ú‘ř#F¤ŐǃŃŘ㏬NÄäGÎ⃄ť9 Ĺu SX‘ű|xĘ+ÜYޞ•Ť 5˘Ła^oÓѨËuî˘Ű­„H#+ŢńŤňń C€ßŽŁ ń,=7%ĽĺŞiőyÄsr„ĹoCĺůAžĹýÄ)J3Šb̢dŒ™F?39AŢä*#ĆaŤsŚĽ??_ö\ÜłœÜł™§wU˜ŽV1Í=ŽógW …˘ xGBŮíFjLĆű ÇĐ•ťežƒ…¨+ďbÄ)}Ňsš…uáAČyôčŸ ň’¸§Eź ŒL‹ďi¸5’SÚoMË} ‰ś\ÜYâőë-!˛éúnď`ƒjue 7§gDkŽ?ÔjM’b‘ň+d%!0ᚶwśiË}żIˆ‹BGCČ8dňÝoي]…fň֖żV\űÎîN {ŽwÚ+ޜÇŐNŢÚÚâoŰŰ[îÝŚóŕMuő…{.J7xśˇĎQ7čţ/ qĂ 67ošöʗÚ qű5K^˙<Ě ńÜÎ ĘB¤z\ŽiďĽa‰źi_UĄP\ ”řŁP( …BĄP(ŠQ<Ŕťá;c\ä'Úm\qĚîťĘ“~˘„˝^›ÚÝu{ސ Ę<ÚĆĘYďsA ` ĄB\!?˝V@w"ŮAŒň‰°b°HUPd%łŞOź°šś‹˙6t“žý ú0ö¸îÚąĺ:Šju\yŸĐ \‹<ß))ĺrņxŽń ]zrei[€s`L…ą9w‘–ˇĐ†!Ďbœ—ÜťœÄ““˝×ţţ>ď‡aéĺjdâ~&%Ԉ˛ž‹JĘ žăú^˝zĹçß˝{—É’rŇħÔ qă7΅AĆe|G¸×Ż÷gş-łVˆ e­J™ÎU” ¤wŃpŞP(ŚŁ‰Č ˆRސgR"eŠ”|(mÓ<\t;dŠ"TJü‹ö5ŃüńÇôřńă؏•w‡ôĐćďŽý† 4ĘKŠëŻ–{wƆFg긞ľ''WáŰÜÓY§ő­Mşwď^xߎ™ÔwHŞĆ)×âŐ6]>ŽNh4ÓŰ;Aô‘ützzFă‹V˝bśŮ٘;ꇍĐG¸U{Ŋ7ó]ĹÚš*3(‡"¨Ůœ@s|Îçŕ†Ü˙e1rýE!€Ą: *ŁKcáë73OqÇôr #š) ¸M[ő …b”řŁP( …BĄP(Ёš ~p÷Ĺ$vŕ]xŸŇŤw¸cŚ,xRźÄşš˛r†O¨IŒKĂqTF\QPű)Bz6’$Ä0.űŕîš“}šJ‡|ŚFéTíC Îo?DíÇ$¤`l[tf׳ŔśVŮÓžqÝ|şŢRpI7ŕz/¤/lö[\Ň BČ^y§U#}äŞMĆB(aawęÚNŒ/)aČ]}ĽäŒ4XŸp$nÄsMe*Áß2)0VĎĘgŃň+Ćo9$ň„˛hˇ*bŠ(=¤*5 LvqŰx8ŠŽÂ¤}aJ˛r`Zœľ° 9UJÝ˘ŹąÄđzzzĚçŚJ9bMŐ#Ň6GMř„ą6uG(×+äD¤#ńJ>ad“kExٚČeëëklŕ•:&jFžýśÜ>‹Ş҂Ę3 y›ĺÎË+żŮŘŽŚę@âćqů§ŇĄP(ď*„P +Ú ĎiÇ6|ÁRT!imZŰ&mĎAş‘ź"~icMJ†ľvi;âA¸ ´ƒö;%ÜT}ß!ˇŐLŠO‘fÂEŃî´ickÓľý‰âŽÉŰ(ü§ů‡ý'٨”#—Ĺď¨öťŁř‚ëÝ n̈́ô.˘íî9bČ÷wíVť*‡Öť[Z‘LHł•śŽŐ¸oüŃŮú^˛ď‚YR …❇ …BĄP( …BqCPŁţTd„œ7 Fţ,k+ćl Y;iňőFc|8œ”RĎŃŃQâֈœńĺˆWćŞ0"ĺĆfo¨?†n%ýź ¨ŒW Ž?…ŻW0üą;ŽŇŕR˘CŢ4ˇM@Z_›H>Műj–).ŚRˇKé&ó˘ÖâTł) ÔtíôĎ1˜lĂuDăi9ŚŃ8Q¸ąuUœ”@#űäz@˜iťß%ˆ&ś"çČy˘ř%D ! HúŹŽÓw^iHÜĽ ńF\‹‰‹!‰ËÁápŔŞ?˘*$e#Şcâ íŽ( Ľm•´e¸˙ˆĹÜMö§Ä"|ÂčŒăB’ŒŰâć ęTBJ˛—˜`äŇ8véJů iGňb™¸si‚ŻcŢŇű›ÖáyäŸôźXŻ Ĺ;ƒQPŤő´ˇˇߓé{`Č{ힴˇč7ŠbMNĚĚŃDJ÷ 1GTč´Çh'Ešŕ6„Ďršˆź`DGű.Ÿ1Ţä:A8°D5bФmĹ?făZZ‹mtŇWŔĄÄ5gÔ[‹ŻöÁęœčƒoiŰ=)â=Źôr‘×}Ŋ7łř óâNűŻ3ë߲Yšbśš×Ió\`}¸A÷•Čęý¸rˇäő/Ÿ<‘.Žů2¨ ÜBj’tźÂe§GJ€¸œRˆ08Kű(ńOk/q}ČWJĘ뙴卤ľŁ(Š˘Î*çĺDÚ&RiŠüݙOű”łHCé~źclą\C—’“L8 äÎsa^V”wy˝¸iď+~Gß8W_Wý<źŃğ ŔE&În ţLA÷¤Ă¤F…BĄ¸ (ńGĄP( …BĄP(76ů †y÷˝Ó‘˘S­œřSű\ޘ–‹Ćsďú űËrš‰6kÇŃp?ĎMĂjä …˘ŽşąŔÄŮcĄľá ˜Fž™…UëfZ˙…Đ!żSB î6¤ŹT¸üƒŰLş3&ş=K‰?ţzăĎŕʋϮĘ# 9F–Fƒ!˝ŢŰŁƒgNŻŹHJŠŤŹTľ(^Őď…(툝,QzU†Ôőš(•Éő§+ŘAÄII+ňťŽ>T2yŸEqĘĹ_uŽÓ)ǑŹxĹɏáxĘňˆNOĎIЌqÁřb‘7BT&¤ ŇQz?S—†(î¤u‚óOˆTřţňĺËÄĹ"5yŇz×&W—ĘQ‹& š …âÝÚě­­-ş˝˝ĂŠg VŇ~.Ű6Hťƒś˙ŮłgüýţýűwęŽ1ßO¤MăżwďÇ/Şp>˙ąlË&ŠB¸n¨ýačΞčćýÚŽ* …BĄPÜ((ńGĄP( …BĄP(76ýk˝K. ŐňFézX[[X—˙N#őŠ?‹r‰ÔŢą(q˘Q}BĄ8'„äÂ䗙ķ‹‚eĽ­‰|L1öĺŠÉ˙,MYO[šć1C€Dԇ*Ż!šÚ \}č4(ŃÄó—,'KŇ&Ŕčš*Ď@ÁFÜvI>"ĆxBNÓ˝I].†!­”5łů€âÎěňňn¸Ě”ł'›ĺÉënV˝ŕómýř4 …BĄ˜QQÉegg'şňäŞm ŢGG‡ÜNíîîĐööśwIU#žúV0ďKú}ţӇŤž  Ŕe8ůFü)QIH˛fIęÚ`¨ś‰›É EJÂm:ŚP(o%âh„ …⺥Ä…BĄP( …BĄPÜŘĘeWĺţĹÔÝ]UVbzj­Pź{°v’†“*őĚsYR‘ßź%pšŰ“ZœřĚ|cĺ:^5×eä‰PvNűPW€Y†*"ÝW‰â€RŇSŞěŁ&€ĺPWöi“–őěČč\*˝‡ …"‡AŃBxŐ4Şľýýq˛=›$- KS ľ‹âÂɔÚeV(ď$–iü icŠP(. JüQ( …BĄP( ĹÍBŕ D<0KdóŹÍÎ[&|Sş ĹۊfƒeńbŞńĐř?MGsň$f›ž×re'd‚ĚD{‘eáđÂ3•‚Ă8¸Žš •ŞŐ$z7 qHT&ŕ˛%w3&†äÔ­VŞ.”şZăr>u)SšÓŞâĹwQÜAúŠ;‰CғK–Ű*iJ^+×hTs–~ÖËb94ĎŇcłTŐ*ŐśÜmފĐf^Ąx+!í9Ȝ§§§Ź°Ŕ5”Äm—¸đĘÎícŞîS&*y6ŞWŚm'Ÿ‘¸jœNź™Ýx Iy‡kGŕÖ­[Ńu$€k@[Ÿ"Ď˅b^[Š,J…BńVC;Œ …âúĄÄ…Bą2ňÉ=…BĄP( …buLş-˛5•ąđÉo93]bu3…:PAÉ?Š{łęSô’•ŠÚ4ĄîŚÉŚ9'¨ůXĂĆP“pclFř™“¸D1‰ŻxŞĄ • ędŠ*A‹ŔpVëy™g˘­­HJBúś×빁V܆Áp B ÁëëëF”…`Ŕŧ¸ët:üűÜ× 1ć"ě‡kńKź8~ttÄűaŘFě“|IźT,Z-ßćbśÁ`Ŕůńyó}Lᄌšaňű]†cBTZtţ w7QŢsŒÖ|~âNĄP(RHˇWűűűôĺ—_ŇŻýkŢ÷ŮgŸŃƒ¸˝yí'ž§(ËĘ]—´żŠŠƒ'ýŒŁk-| am6Ú_iďWźÎČJřĂx×G}Äń=}ú”ăđŽŠçťLˆ›ör@ …BĄP(Šk ĹR¨ËnϘŒU2BĄP( …bIąÓIWŇÚ\ń‡¨NúÉ÷Ď#ůäżqçe8Śý_ĹŰ ă ąŁćrËÚĆ1  t<ĄôTę–5€Ähj*Y™Ć4“ăšM@:eţ¸ÖÚKÂ=Z•~CýwSęíÓ¤Q5Uz€!ŸBÂ~™…Čˆ[1l˘>8Eq(%ţˆ‘ZE  ™€Ńa$^ü–źâœJ)Č_ŒÉB@Â9>žŮJ?çGý…0•X6mß´W’yĐÖ]Ąx;‘śhÓ@ŒD[ 2Íćć&+…9ŮćÔÝÖTިz7˘=…šH“ŇţKť;Ky§Úmâ–Ďɂx RŃŢŢ+˙˝űÔëöčää„Ó’ś%) …BĄP(G5íűœ‰+…⌀ÇAôćĂÎ ŰÔE{LÍ•ŒEÁ W„Ő.é?Š¸Ńŕhę$‹‰ą¤¨Ńtƒe]pÇVŞ;”‘DŽ!hÎřvşˇ"ćŔ C0ĘFe”ięú hQ#­lŘŸŢ šB JÝѤăwÄ%J@ř<`pŽOÓńF钕Răˇ÷÷žˆĆěô:c= ůsĺn&‰žéu]‰ÁÚ\wHĄPÜHIrgg‡>řŕn—ąA‰HŰćÉ6LŢEň‰]hĽďj˜6ˆöq˘…úғř¤-m‚oMą+ř{YzwbŽ}&SrVĘŇ˝3Cj­H(ĺQÚĺ…Úf×};0ƒÝđsůř–ĹW+3wÇB‡*Ěťţ›öŘÜ´űŐ¸čë?/ŹW•MĄP(. JüQ(+!<*ąGĄP( …Bq~dR?TwËŕJ&ˆ}„ţ§‰ę!G@Ôäę‹zĂľ(•ˆ)WúłŐţ|Őö2ý\ą{1š2¸Ş_>€™rR˝žÔInÓÓY˒$rb…1šŁQŮ''Őlp•%ěę$žşŹ Žľ(!™I˝•*&‰=’ž™$úT Ÿ.5Ä9 ŚŚřs"H]-Ç+뀈#FZ %Ţ`÷0Šk!ýpî‚ń8UbJ :Њs$ţtL/ BéqŸ—1ˇŸN—Ż\ܒÇeČKE KÓ>¸źCa›jĹv;l“ĎŐ Ô“o…BĄ¨ ¤I(˘íîî҇~Č$s@ţÁţ””9 y#ČgJĚ)ř݉ř%´÷â†1WĎkĘ[őÂ2T‘XŤž.ނž¸´Ííu§Óć´Ä•d“ą+#N*o ´Ď ¸.hÝS(%ţ(Š ¤+4›öOű˝č1…BĄP( …˘ŠKžŕÎg<Q8 ‘ű´Ľ7xĄ Ăw0zO5b„ÝŰíö‚Ą…xŐ´¸:€a¤(*Ł;ŒÚ8^­„>oßö|çŸ×@cˆ&ŠË‚ÉČ>&¨äu ˝%UŇ:쏪~Üdw/ť•M 2rĽÖŠę8SH<łÂŚäŽŚ´S‚JJ°Ťg?!1›˛˝!Mj_–ÇTŒÓ {…Ü“€¨h:ŻžHúÓ&ËnŃ‘]â @ĺ˘JO˘^”ЉJ’€ÎÎÎjŞ š ľ´}KËR\zÁÍK“jC~NžFÓxżéxEî9ăßB˛VaŐ5MŚ›Ňvo+­ oLO‰Wb÷Žä ʔ˜lĎy`*ňQš BĄxk mH>÷ďߏn…83 3I5ň% äÝ*Ţž}›ĂJ|BŕĚÉ´Ťô÷ŕŽěŁ>âs×Ö6Xńגş|T( …BĄPźPâBĄ˜ x1‘xpp@ϟ?ç•/éJ@ &ˇˇˇŮ÷5V”ˆl¸BĄP( …Bq.ŘDc4Œ.op `u ôG˝A#UŽhŠÇ[ö;ÁĽNÁ$QŘ@żvmm-ފF:''Hgœ|Ѝxˆ!>u­#Žt$>Ä-ĘŁŃ˜Ő1RwŠKšN‰ˇNœPźyH‰>†fëŽŘ:1‹ŮéŠţŨŠbKZŻŇú$Fq%î¤f׳*ďyœF*š0†RíjĂgş/K.‰ÓľŚ8*˛Pڏ`+…ÚIoQ&( ŐÓŽ~×ă욤˘ĚÇDŇT]›\ß4/oęőcAʉęśđ…ałój¤ŤęNčÂ#…Bą ŇöďHhڇ­˙F—t<mů¨äďč_šš™'­Ż'›źkj Ä?áw‹Ďyqsü­ÉöN\•ĽÄăy„Ÿy¤`…BĄP( ś‰˙›˝?—fKË:Ń™;÷Ţßü}g¨3×|ŠIpź%‚V#(˘ÝWŻţ~ĐŤ8Üöś#Ęm[ş@EA¸"\&ąiĖ DŞ(¨šęœ:óůć=çϊx#VʌČa™š˙˙ďäɌˆ+"sǰb˝Ďz^„?0‰~nŢźéŢýîwťwźăîšçžóvˇöŠŃ0Ÿđ Ÿŕž~úi÷†7źÁ Ä">Ö[ťçۅ›ÔOjÂ"ľ˘Ô 3 ßBí ëg€ŐáŒ玜NâxŔżŢöśˇy‘Ď3Ď<ăÓI¨#' 7˝éM~˝řĂ~´łÖš~ýş{ňÉ'}ĐD—rŇr=p_šrĹ ˆÂ—ęzď{ßëƒZW[´Lĺő€ŽőďŢ˝ë÷KűóĆ7žą\vëÖ-ż/ږÖđÁÝc=ć뉿_SŽn8;|ŇÇMóXq)4Č]:,ŤŒ2u;r9Ił`H×md‹t4t{ť{n?íťţÁ ›Ör ˛LW˘‰mœ)­ůk= o6ÝĺK÷\,]R„ÚąB" ĽľU[ł›Ő‘ťńô}űTű(7 N$.RűÓz$ŞP}椒;­lřúň`іŸď… Ů6őŽuU^ő™‘úrP×5¤ľ÷k—:î“^żćŢôř˙ ľšŮsű÷˝ř§›ýíˇ:÷Ě ˇÜűß˙’{%[6L/şaŇ+¤’˛ä]7Mǃ mĚĹĘ^ö ĽăɎ% H곞צ'óçĽJ—cŰoJSgĺ-Xĺ¤ŕŠó°¨/+'ŃO' ]Ň2t™Ś•ÇŰď›$v Hźç‚eŕ*%@…BĂĎN]QŇšşŰPąíňKVâ˘ŕ›B!*¤ƒÍźĎ‘œË‹ĘÄëŹ?öuüڈ–`8Ř?pˇoß.ď_aŠĚ™HóÔ]rŕÉ]~ö˝řçŕ ďîÜšSť…*ä(k/ źx\}¤/nş‹—äęg÷îĂ $řŐďĄ6ŠÚ °: ü€ŠŘC§=ŰR{˜ľÎdšIxó‘|Ä sTöƍ~} ô`Šĺ/˝ô’éČEHó•‹Z›ć$ᎄAzpÖr=ŒŞĚC=ä*ZO/ŐĄ2ZWÁŞWÂ"ÍS9íŇ,Řţ†#o˘,Iôšp 1‡žŃ¨SŠ‚”EAóô’ŰĎFYëöÜĺ,("ÁĎ@Ž?Łź Ťˇŕw уŁBž‹öKŽŢĂôćГ$ì͛§â’HÇ<Şk8ĚĹ>&°0a9üřŃÚ˝őÚ×5ˇJk—Ö˧cî*°L¤ĺńźŢš‡.Üă7Fť°Šă-;چ˙ˇ˝ť×unÝÝžëÜĆځë&Ůqäz’§8“´¤>¸×~Ř1˘ăGÇ ;ćŹj)=ŹŹ–ëYJeíx›† ŒtĚŰsĄŐeőŰ|sƲsĽrě Ĺ}$§UiÎr' `Íâs' Ld’*‹T(ä —\ľĽŠ4ř5'–ţ¸âwwĺ†ŇĐzhŽ8ëůHôŐFrDËS|žÁA†ô`Ľ°{ÚĚÂ#0Wť´XŻëې;YŸäw&OÚ/ĺĽlśk‰O ›ÝW/^źŕŰŽjój“ľl—ŽVńĚőÚw€Őá4ÚłktŒ `H¸ó#?ň#^¤c˙ř÷9ńhäˆĘŞ#Yâ•×<=Pžđ žăW.<ę€~ůĺ—}ý6­ňę ÎÓ)ôź€GB}–đGő†śőŞ[ëhŰÚßw˝ë]~Z?Şçř€i”ś Œ´nřýšŔ`q°ŮÂ;‹¤ŁÜń' €XťPQľ÷$úž|ůŠëvT>ńmĎýýžť—ľďoďx—ĽdčúeťľßřŃÚZGuHŹ`˘m[ď™ ­ŁśąÚ‹–"An?ŞSËLČ#źĽ§ÍECyYmßR{™ĂČDiążűe*°0’ýËH:cj¤¸žhß÷0Ď J=§ăěΝQ‘î8ÉáěšgxťôÜË;WÜýűťĺß˝“f/äŇéűĽcJĎk:v- gééÂăÇÄ:öŒg.UMn¨ŐńW‡ń€ Ą:l€ˆ‰Źţüœ9đÎůNÔ÷˝ń¤Őy0 Ýg‹ĺŠí!Ł)čÉĹzŚ4Ë JŘ#1Ď(IŁÔ^ŐôŘ1—Fďöf<6Ť=>ŻőťŸźđ‡ç€ŐF÷-97޸zÍť›Ťc(d¤Č:›fmş÷ÜGoşƒ˝[îţ`ßíďšđ'i]uz[¨ZžžždýŁkîÚőËîľO=ánŠoŔMťf†iĎ4ĐV„?0FhŐ.Ž0šŠy fX°E˝rŘŃĂŁDA¸°JuřJ¤ě'žx—‘¨GËôRǰ֗čç-oy‹×:ę¸ÖKËľ-=”jű&DR „4ďCúP™âK}śÎfŰgFL,!…`Áˇĺ’NéŔ pÇp”şžÄ<ĂŹýŠ`KŇÍţëĺB†ěs7›ˇ™5gɤ_k§ŞžÝÝ=œWŰQí]kęłÚ’&Â1!P]šđ'ÉĘ梽4-§K Š)­ő•*̄Be­jât헹ţ4ľĹa9c{:înďôÝćÝ=ˇšŕŞşĄK‡}ˇŸƒ÷÷şî•‘ťuˇŸ•Uťu—Hř“v 7œŮž_tĚ蘞ƼǓO˝U8ň„Ž?ćŤúĚ1AĎzvNŘ3b~^$U(35!O%źą´\iŕ TłÖ)„GIa¤ä˝R[7-ÖˇÍçŮ{ĺ=~ŽŻ÷ÜFöÜyńňE×í­ĺżaö7ÚÚŢr{ŮyďEQŁŘm))ӋÍôű˙έř§<ŢűýşžíĆb‹ ŕä°ű“ ĚÓľV‚ÖĂ_ÖÜ͍]×IîťŃ0kJ˝N+ځƒXËň€ŃZž*sccÝ]˝vĹݸq-ŰßÔ7ƒąšŇébIľ=ő{čžgíOX hÝŔ–şŔ^z”PG)ľô€üiŸöiţů=ďy–(0"re‡¤ŃKŽ>çŘhRĽě’8ÇRuŠźF?›č5Ży_.ôŽŔ‰L5rZŸ|QyulŤźM4­—ęŐţ>ţřăîđ#{lD*€ĺÂĺy[ŇĎ)Rt97eí@i%˛ƒűnkOŽ*/fӝ2uPˇŰËÚŚ›ŢqD­—ŒôYN>[žÎ~čă-&ěŮ/‚ţšÓ@ÄmI•ó‚…Ô•iÁÔ~śÔG6=hDů  0Yú0s’XÂŇ#Ů+L7˃šU3n?{VynkÇíe˝/—†JőľézžčítÜÝíĄ{é֞ť{ŕöúkn˜dĎ-i/Ť§[Y,§ŐôT_1ącTüů´uę:i=̙VŻR´“ZŇłœNń*} ädâŸHřcő‡[‘Űϰ3rë=ďţđčcš×žáőîňŐ+î ŕ^yőU÷~9Çžň˛Ű͞u‡Ła.Ú)âlj4{x–Tm+Oz”ď>żă˘˜•ŁÜiŸŔ˘đư…8Ě&^b˝ŢřĆ7zaŽJß%ąQĐÂlÝ­ †T§ÖуąÄ; †H4¤őlĨʊ9ů¨œŢĂQŤ€Ńú–:!Ü_‰ŒT§ś­wŐkŠÁ,‡ő˛§I8ä˘\L“Dqŕ|2qűˇľłW”Š Ź÷Öݕ+—}›°_¤é˛— ÝĽ—ł‡ nBNSűŃږ•@§>?LŻ4’cH2,…Aůź\Ü îm+‡čgI1áJ1ŮŒÜÝ=7čÜĹě8ŢÜëť^˛ŽŒuţYgk;[ž•8şŁQǍĚÓĆň[éčN:ŽSŚ–KĘöźfǑˇó7áqVşjóósoPˇ™°Í°T_śo–ęËRڍҺŔ'uQŽR´źŠeţ×HŤô^/‰ §Ëű˙“ČĽĽÂ(Ä?i’şA'{6˝rսᾯsoxÓÝž~łťríŞ˙{źđҋžd§ŰńŽ´z&­3_ęŽ$řw~Ař‹‰ĽžÔýJýˆęoÔ<őOj@ŁîťaŸbźn~k)$ŠĽŰÎź× ŘŮ,œž˝.ľ7‡>…lrˆf° ü€‰„Ŕ&¤17YäĘąGB=?öŘcţaů™gžqˇnÝňóÔ1ŹÔ^rޑ`čĺ—_vżň+żâ¨%ޑƒÖS}Żýë}]ď|ç;Ëô`ŞCŰŃ6-]‚ÖSŹN´ŞçÉ'ŸôŽ@ę°ŐvĚ­Hńá(í¸3œŽA€ĹeLlŒgJ0ńOŁĄÖÍ])ÍYÇÄ=jƒŽ­)EěŔ—+×)śgŽ–,—°4Îáü˝˝}ż˝ƒƒ~)8Ň6ÁvnúďWlĎ­Ůš7JGńZ˙][DnţťťüÜîâ8˝g!ŘrZ" 5— ‚ü:ÎůĎUř´Yř#—ŮOú¤OrOĚǸ?č6ź+ŘĐ]šzŐő˛ßúÂĹ eúžÚůibŹ9‚ąÚ3Ę?ëéŠjťo‡9Ÿ‘`Źv-Pߣ̟}öY÷ëżţëţ^đŚ7˝ÉťˆkŁÚŠşßÚýą\¤;‹ůĐ2ÔÔ>űőܟ.Š„­U-őɤub*jëîěěúőäҎđŕüđĆGyęÁV˘ĽëzÝë^ç?ŤĂYžę,UG¨‚‘đFÓZ_Â=dZZ/uT?ňČ#žó÷ůçŸ÷ÓzŮ(=”JźŁŃ5IŘŁ˛Ş[ĐJ׼—ŔUÖ…T÷Ł>ę×˝šuŇ*˜Ä?Z.$8Ňžjű<ô,ćŢĂ´AeƟ–ő‡.ţôzëšPŔť˘tJŽş5ďlR[/kw抟œoKŞí)šŢŐö4QşĽ *A„ęŐ|•ϝŠŇŔĤrŞ}Ď@ ŽÓĎůäŕÓôÜ(ÍĹ8N"’avŹč5ĘËČ]ĆwĎxLářă_ůŽăŐŇ)wťkţ˜†ţ¸Ô1gÇĽŚ˝ł•›UÎU~+Ĺ@żwĹąf­Ży&Œ&ÜŃűŢ^5Ď^áŔ ĆXţ8vš[PŞďT<†ľŚ÷Š~žrŸ]áčŁóľŘ}^Oşn­­eÓ=—/w…#PţëĎ´ŮŰ0ŠR˛…ýÎČݸ~Ă=ţŘăî‰Çs—/šľŢZ.–Ęţƒ<Íô/°W)Ŕ[ícŇôGoá8áŸá ĄIćr °˛„׾ŰÔOŠ~Ms67¨šţÔÖő˙KŞWy˙N˘RmׯIN?ÖÓwĽGŁQ!äM& ĘigŹ.`Œ0ĄÎ_‰~,—:[%ŚQ°ăЧžňŸ%˛Q9‰p´ŽB&ĚQ9 …4JTb nܸá;RŸ{î9ż i–RL⟛7oú‡Q ~$2zó›ßě?ëAÜ,äŐkűĽ‡rgÂ4`ŞWŁtôKH‘:É\s\”4ȤiÚŸíHĐąHΗΝMÖ ąNZˆ:5ń‚OQ¤ţňuŠźě˝“Ő­öŤęV8 0W%×(öűŞbVđ/ţŽ>[—R!_ˎ§KEZě8>6^ŤŇÍćËí§›‹dŠcÔęJ]˜:d>„‰LdNU–LÓaYs¸˛éřř­Ň׍ƄjślX¤aŽâ I ÔËÓxՎňžŤđ%EŘ4O;ś–˝ziÇő Ń^Żłć6łßj=;ďş] ˛ó/ÉAŢHĄ´¨Cß5ű[ôťŮďPüMقýľÔ]şpÁmH蔭çF…OéQ:ÝŇʎÖsëŮ{jŠČę;=a:\BŞ/—žŰÂĂô‰őc;€ŐĆî…ęŰ4tÍĐŔE .´űf˜ ł\÷”Żëş"ĺmĚQ°Ár/^ímćt,-§aíTX=ţŔ–ţ@ƒĺHč"ŗăŽ €ô lĺ´\ëJ(Ž.1ťw |ʃXurěQ=*Łl y$˛lŐ§tar’hČ^ăŰ։mŁrlÔjlyBš/€e iř¤ŢI&™24ˇ÷Ôn”PGî)>ř_ŒPÂöŁŢÍÝŇ^yJŮŽw ÓYš¤P<¤úĂ4ş•W“p~.H“ˆLŽQë•đ'5áOöĘ>wKŇ)„UŠŞÄĺ‚5§ťť{ţšFB9ţKK§ş4ÂÜ ěšË„?Ž_{7Ą #šČ]ňm5šT5ÁPŕpUÓmř/¤á˛óÁš1 ¤řýrUšż4/Űďč#ŃÔP˘˝źŹÎá<5XvţŚ•ăO’M¤ţtĚń';łşöłs˙ţ˝{n+{]ęvÜz'/Żů÷îŢő݃ě÷† ό“D@0Ć^ę& |¸€ĽĹT¤‰tOŐŕAő'ŠĐ᎜îԋ[“`=źăľ9ý„ŠÁŃoÚv9­ĘŻu×Ęňí˘FW á`ľ@řcÄ›zČŐ݉u$Č1э:žÍęÝ f)oÇZ&QÜ~ôYn>*óŘců:5’FŐZŚT_JŚQ–ÉáGË%ţQK fŰ GąŘČLłcˇýŇüŚďŐ6@€˘ˆwTíś@Z!gN^¨MĎ-ŁQäđ`B %źčGŻÔՄ9ÂD;&Œ…íÖޕsĐÁAżą›đÇéy›8zDÂő‰_‘ş'ţťœövśž\ŠFšpĽpż1˙ź"ÁJ7iMKlĺtŹŢž}ťě0đî@rB&ü1AOěhbĎKV>|N ŸŰšČpůrsžŞż†u\Ző؇ŚŕŠ …ĘĎ>š ܅|…nXœ?Jë5Lów˙ěé䔿űÍdŤuGšXČ˙6ÔíwS˙.Ůűn/ŰNŻë>ôĄšŢć†{Şˇ–ý rąŸ~cÍ×K´r“œŒ3ٕ†T_âěR}Ĺ.?6?.çđÜWߥœĚ5/Líö?ŽŻ;ĺÚ;ž%…Z=_čĆŽmiźn'zĽń(?v Ńs!{[›˘Ř WO”K[óÜrŢo}|˙óÍY~šp‚ ü€1šh-­–°_á„Ĺö9 jřÚ^Ď;ţŘ< ~,M—ŹÍMHó4ňZË5ON@ucŁmÂÖa'u(:ŇË:ČăďËBіtIŃžsE'Yh‰RŐŤ˝#ˆO÷Őńő ‡#˙˛´Cyb 04{ťąŰ–éÂL|ž*ъ+śáŠOŻ9ůžżp|9œŠCţp-ţŕ…^Ł •b*›Ý-byáü0,¨×@.R^ŔS?ţóĂ?/Ý ŞľR;]ňcÜ”ĺ1—śí÷8yÚ­*Z+ŸŽ§°KÂgÉ"ŽiŠťŹ> —ĘZĺ{ţ2a”}ÖňaQ@ţt‹`Şö*úTŰîő択\ář“ř÷ƒAVćöm÷Á8[îÜ˝Ýwůę/zé•WÜűß˙?ekk;wë˜xŻé—š4=÷ŠžŠŸé𺚣ĽĂcq4Šşĺü3­\5ĂÍHҲ‚ľÎڜlvâ‚ü™Uƒ2*ŻŮÝnÇÍrÍŹŇ:X!ţŔ5›ö ĺWŰHÇ05XS*-ÍÓúóHź#ŸĐGóLL¤é ßéŞyćŕŁůĄ )ś•ˇeĄŘ§%:űnMа řGţąŰ麍ކ[뎢čqxšyeÝ§Rқ„9‰ŻËŇ%„¢*h2€YmHK™§•iKTovގAKŻ ‹ü÷<Łöîůje'Ń÷ő˛3ŸŇˋg˛÷‘(*ŐÉE9ł¤Ł˘lío”SűL:0’–‰<ߘ˙XdsíAÁ(qIZ$ăô\ńg_ŚPłuŠß Ňń%&ţ)ż‘>ňƒc”VÇfyZϤűtôĺëäx”TBšÜ!¨Z? +Ńy¨óŇ˙ěĹłl’/ßŢŰsüČG܋7_u›żön×í­ůşöö÷ÝÝ{÷ÜöΎýÄ.GEľáˇvSIÇ~ŮóEzf—€Šzŕ’ę9Ă ę€ŐáL$´Ĺn-×ŕ°ů!ćúŚ kBŸšFظqáO,\ ‡`ѹЎ H,ŢuÝ´;A¨]w…¨ĽÓršđ§œçľ aŠ×đyvrc’öTIU{ŮD§ĹçM€s–ĎM.ŠŇĐőǕ‚9FšŔŞŞ#ٸć#´v87îBě6ÎUuÔÝjÚÎżŚÁŐÎ5ě’m̜y"[˜r5KšŹ¨ĎŁNRŻŚ|-6…:ˇÂbKç˘O–’Íßď÷Ýţ;îÖÝ;žÎđg|c]Ă7vł^/ŇPxw9˛č§ĹcÖľ˜pž0ĄËÎΎ€hi/zmŘŢxčɑˇ´ű÷śr{ÉI:Á@HßţŒ„đSPęĐťwďzaë¤ţWX>ţŔMyŤMPŠjŒŚÔ`muÍÂaGZŰ{ě@§kÎË ‹JâÝ:lŞ)UÂOjÂwfx>ÚœÔvŽ‹Iťë+Hü3e›Çń§šŸ6 Ţđ˙Ňćg@›WOi—´ÖŰ4˜dLBSˆŇ°Ž´î—î¨OWúeŽşbŘö,Xm“.ú=˘íŔr2 Üýű÷Ý`˙ŔÝž}Ű÷ Ý#$~9ěýuŘďşýýž;QҎŰÝŮwýč îćÍ[nóâšĂ ˝`%Wí{˜đGƒ2Ż^˝ę`u@ř­49üĚťŢibžMD6 ËĹxŰ2v͙>ÂÝ ,2ýäÎTšĘďʰ'É͂ƜOć{ś 2m.ŞMžy7‹{J§›ŇÄ+-…7ľRĄ WšO‡ŠŚÓ`żl~čúj靫ß)H÷í_%ŢŞ Ęth°*Řŕ KŽ´âáĄřxRęĆ0]8Ź.áÇůWv'Œľo;ŐçÔ>›ŁĽ-Ÿ]ó$x:Šč „?0F8Zs^ńĎqĽŐ:ęúm–Ţˆ–Ëé“Ö&–ÔŇ]Î4&’Éc /œ$vŇ9Z꣰Žř٨ń,_;ř˜{BűłVV.­„8Ś´ąĐe8ôŘŤŤŔäښO:ÚśCArŘˋ€Ňʁ(-śî™O̒̑ň –†)Ŕ}áÂ˙.ˇ +&R:r˝k™D?÷îÝóeˆŹ:żŻ\šân\˝ć._žěÖ××ýüř~2/[÷ÜKĎogŸvÜI˘kדO>éŽ]ť’ÝłűiqKÔnw;ó;Z†iĎT7Ź •&O› &.wŰ=Îşb xXb’´ţŮOŇ΃壐őäŸÓ<gžV5œ3"ő˘$Ÿň|Řë}T/ŇI­†“ű{N{†K‰“Ň……bžyśUŚç*Ň3YŻ6Q‰~,ŗ9ţřmۨ6ćŕ|`ǜ\.,%œŚőŽyĺq“˝äôĂľŕ|Ąë€œžäřeiţ”˄ šűÜé“F/çęíř>˜Ď …łÓ÷ťjĄŔـÜŽ „?°°(qp°ďĹ?9ňgK÷ŐčhS1 Áţ%,p“?:Aé)„:c)ŠěÎkJgÔ4ÝD(hˆçM˘m›ńňiŰ]UŽËů稿SR[=­ÍHJĄO. Ń’N9z䗦iי-ߟ¤p¤)lâă{žŻfśŕđÓ&jKŠ˘ß÷ћ‰nbQNá~´{&ü ë˛ň–úËöŮžöJƒm8smąsp,€:™Ł[°(°˙ţ}˙YNjͳcŠÓÉď:~BńĎÉËîŕŹŮŢŢvĎ>űŹ{á…ÜŤŻžę]żžxâ ÷ĐCšŤWŻşK—.y!Đřý`1Ž şŚĺ) ü5̡| W3Ľ7›*üá6pöĚ÷ˆĐ ÂXXFYv0¸Á _̑°"Nu9…i‰Ň, ›hÔs/›^Ë>çŠ^Ö××}0GŁĄÍőAŸý6‹ŃӃÁ |×2Ľ‚Q@('ŘvbÁƒ-ÝHT‡9OEŽĺć^RŠŠőm[VÎÓB(ím/tGŃg•fű'OC’a˙˙NöˇčvBąŠţVďd•˙uź­ďšhEÇźK“J÷3Ëö‹EáńT{Ş<ŤŇÄ śěŕŕ A´:PŇšąoˆŮÂW“č'N÷îsÓvĂc?ޖ˙MáË;]Őo;PޟĆJ­‰Äâ$XNÂëć\čOO`e‰ćĚL× }śv^,ĎçšSş>Lpä)Ú~şŸű6_qOďv×ü˝K⟵ľn´ŠÝŻMŕ‹ö`U@ř‹Ë˜OZ( ‚é1P‘L)M Ç8şUڃ¤ăGAkDˇDˇnÝňÁ’P¤ĘîîŽ)đ#ĄFŤŒę•H-3 /„ †TFé#\‘pH塜śüť„;ŞO#ĘľŽĘZy˝k?L|¤ýźv횟~ůĺ—}}?ü°ť|ů˛ßžĘj_­Źö˙ć͛nĐŹ|@ç°Î?§áˆ¤cn}cÝő˛żo%źq…H;ç¤Í:8Čwýl ŠăjTŽŸđxŇşvŮ1 cXdžĘÚń!—€Xź;ţÄĺÂňĄ§rćą ă¸ƒŐ´żW-}W´Xdgő…)ü|`ÓĄŰ0&9>œWtď|ꊧÜőë×}ťPí(ťŸŞ%ńŒîgc×ÎSš–& Ÿ+G;‹3\=˜– K11ňšŁńúŕLÓ„?°@DÎI5?těč$Žňtťš#Iĺ˜CFÂ9EÎ+çô˛÷5/šrĺJ™žA #T§Ä5ZŽ ŇØ㏉*LÔŁ—‰.ĚiĹR*ŘČq•1‡äčĽíŮ<ŐŠý°ۜ܌%čŃ6€Ňś•–Bű,!^śĎqč]ÓÝ˝{NJS˘!y–˙˙ĆzâšŢq׎ôü1•ť>ĺŽUú;őˇ˝×uwďíš›ˇnşá ď=v|úŻŔ)'ÜBšşąD>­Çú†?ޤ”ĐHǖD?ƒěřł‘˙&üŃą˘c[â X°3îj¤. –Ç‚›Wwţ™|đľŐŃTŚ)5ŘřţUż}3$o€kĂY;Lďa›-wĚiŸ¤g’“ĽşŻšŁ9ţŠ k" ľ 4/ߎj5˜ă fv 'p ü€ĹÂÜ|ŠŔD§“”а4JYŠ“”ş`}}Ămnćb•ɝz$–Ůóď6ŞšÓY÷Šžôę­ő˛ő6}0Gu*°óŕƒz‘Ä2ŞC‰|ä $ą„6ÜXŠ! ˜c­ććR‰LH¤mhZ" sđ‘˜Çœ€nܸáˇeÂ!í› —$А3‹Ö7Ą“FĽëłžˇöAĺ…ę0§ ˝Ű~ĽĂ.'HZ žŐ#i—/8÷–'†î'î.šŢz/űťďúŔ›ţŢ{ƒM÷ň˝ î™çďšÁދng;[ëRvÔörÝ[Ůsc‚¸´žÍn˘ăl͗߾ż•mgÝ]ΎáÍěéŢ´=ďxŤ“\wJ§´HůUŹcâśPä#ĚĄ(L…g‡]ź­6‡Ą&ĚiÁśkďVOů+Xý…0Ş­ţ\DÄs^ڎŽ-°¨Ěr}˛2–ŇUm7amŽÖ:äŇîwěş7Ťs œ2M)$ƒ˙„?°€äbŚĺč3J;Î"úÝľ¤ÜtKÇ<$„ą4\&°IóęŃ7~$I^„1÷îÝóe,˝— $PĐDB;˜ÓŽÄ &¤°ĆÜ~B1Bˆ–›ŁŠD<ühzYÚŻ;wîŠꘐǜŻíčłęÓ´Ţ- …š É%H˘˘8˝œ•@˘×MÝ—†îŃë÷ŕavœvÜîŢ 8˙A6=Řt6RˇŢíťľ$ű[ť´ĘfW}¨m!îöS}żŔŽa­Ťw;t,™Gǎƒa§sč˘c˘—VËLČfbř˜ă€/:sĄ[?+SŒ49ő4VărąăOSŮxŢYř1,"MÂ+€ó@¤Ä ďyMâPKÝŻßVďń^JcGşJĚjN–I'­9Úw0Aoó>ÖwRő¨]`Ž|IÍ]sá~“Ŕ΂˘ŸŁřěß}ŠbŽE8:`aQ`BA˜$YwŁnž"I9ü(x!‘Kżŕyyä5îęŐk^d)†ƒÔíl¸ťwˇźsŽ„7ƒÁĐô˝řÁFsÇ r$Ô …4/˝ôRmôˇ¨ŽĹá´íżÖQ ĹŇwYŞ÷šçžs/żüră÷ˇuT^űT99˙}Bą…´´Ží÷¤N'Mš˝S (…ßu–r'%‚Ńq'—ÄjĂôšřëŢîş{iKËö}9/ĐHÔWŮßZi:’j h-ŐWŽĽv Š$l3Ž#:>LDîsŒÜ~l]oę#‚Ö7ç*͗MÇťęžuëVQ˙pĚhŇ6ăeMËăÔbá|]Ę~ó4]zwŸřű'§ü}Ž{{ÓÎżdÉ˙^°XXťH÷ŘYÄ?ł’ˇĹŽÚžŻwńÍ=ń–‚ÚŒŇvöűC'MoRč’Ň4߇t4ŸČ[żƒÚ ^(”ŽVŰ/Aţ łŔ1§K’ä"{•#-ŇPp8ţŔŃHwĚÞKźéH$ůčg;~YˇťćöööÝćfßuŠô[Ž,tGžá0úHt!Á‚ ~ź“Pˇ[ž$ R`ÄĘJ,´ľľ]H’Š?Çl(=™Ü‰îO-y¸Ÿ7]€žěót)Çë§ůçýƒĄ{ĺŢ~ŹŰu÷÷ÝZˇç—ëxŇńwo§ënmÜŤw‡ngŻď†Ł\¸ÓI ą–ëř´`žîNîV5,Rh%/ÉÉϏě|8Ř?¨íË~v>h':IgÂţ&őÁÎĄá@”q•kŒĽˇłiűŹwÜéź1QšÎÓ0ľWhU”feL ×ę`“Ú)Oá×IęËNš¤řwlő%Ií=ţ<Ëşv-ĺ7?˛'6°póŠĎ؊‚X ŔŇcéUw6vJgČzJĘÝč;ťYűíXkwŤrž„:÷îÝwş•olęţk×rľgűs ,ľízvżžtńâY_eOD?0 #p–¤Ĺ58˙„?°°(°‘ oňôZŠC{G¤¨ŘÚÚqýčó^)pôŢM$DŘČ#Iá€Sˆ(ʀvâS…Ů<ޞÚf>=*R„ΛHh08h ŽĆ⛊[ĆökĘq엏?’6źHäzŸŕä=ĽÓá8D?MŽbńŤŠ\[úłĐjŇšę˛r“ęJâ‹őŒTőş#‘Ą‚49ᤠ¸Ť#aÓ5Km9 ]|Ó1[.ń0aw[ŞŐiô’ěŐu'9NŢ˝wŰ]źÔómƒ9ËvíŹXŞŰK—.š7nರŘ}°ávČućᜠłtbÉŮGî(rĆńĺ“ %21QKmeA}^뎝 —ÜúúŚ!t:ÝŇą$w*é”.@śŽ˝ŤNmł×[ĎÖŻD8ƒEađ݂X 6 ýh𣴎;烏+˜8ňHł›eŸűƒ‘ť˝Ów[ƒ˝ě¸ëgÇăŔuëşţřôŰßůwšý¸$wĎéxÍV> Ԏ9šéäÇYâ…9–nËjćź~gţč˜/wą8vMŒÓ$Ź ÓĆYzaiä4]šh kÇź>×ÓŞ¤c.=ąhdě÷ŒD-śżM‚—&׆2ĂW:ý4ţĹŽ&'ŁřúžÂtƒm.HąĂEźźiš„?óžOšč'iŹż­ÎÓ:gJ(ę" pzĚăXV^'[Ēv; yî„Iý6”ŢśŤk}xÝŃ?ż˙í;Ń´dŘÍÚjgźvĽSڇĐë§vo›ÓŃsVhłŹ>ŕä(„ ­‹Ł”MÔĹ Ů{'­šŹ4•5ÁOń0Śîâŋ…ˆg=ű|É]˝zŐ "vw÷|jŻP<`Ž? iT´ĘIđ` s>1„,U˜DŰŰŰžŽŁ¤’XFÎúťžž îČdn?ţs')…7ů1Ówn´ëŇQ§HŃĽtXÁżV¤ČęfŻüřň›t”Ă#×[ďUŠ´Ö{… ­ç-cšÖqŞ2&˛ Ś˝´ĄŤ• Ó²ö{Š^-WÝrJéLěXë2!‰ÍÓKót~Än ł:÷řß. ĐÚöL节Â}łň‹Bü]›|&MŰź6ÁOü{´íƒyúľéMéÔŚšűŘzľ:Š$MűąXiqZőŕűä˘XÎ ŸşW^ťrĹ=pý†{đÁKÇqXˇąu/ťÇíoeŸśÝ‰‘]>.\ÜtO>ń„ťvýJvŸMs×K—_Zşj'é¤ŐÇčgíím︚šé&rŇͧy/SËÇj÷sŽ~€…$-ţ\$üŃ+YÜÖ/,ŕäQ„â}ďU@Xb‰źkŹrňHĘ´E +şA:Ȃݕk‰‰ rA†Äy*Ż8m‘9ŒřTIN)~P)˙JšŔ!tZ1‡•ixXšbJeN ~6Ýh¨ce˜ż;>ŐW’ěşěˆÉŽ•5ŠřăPŽ>Ă4/_ˆYě8”h-‘=P1ms2W 8eV(˛yöžĄ°ĂŽůŘY' …Â;_ěs~ Ëí„őLL:obńËI‹şÚœoŒvÁJs]"üÄżK[=MÎ?VWč`&ě:eBŹĐĽ)ŹgŇď; ľíOě×á ǟÄ%3šť…çҒ1Eô §ƒŽe¸Hü-ŹŢI×°ŚűŔp°ëşkťîdÉĹćWŽ^ńiš˛€ó)ž\!üéę^”ŽďéřUH÷ƒőőź+Ńńę€č–…´¸BĹ˙l)ŔáAřÇČ)rí„ÓA0¸š=_űą0ţ)şÇlaŮś×yÁňtACŸÚKb‰ťwďzáO^ŹSŚC2si1§sV1Fp7G ŸÂŠpS9on?wŰÚažŚ]×߿䆝 ůq`Çnń9 Ů)Ź—}(Üv\R:[ĺ</Ňą&QŢ÷öËcÔD:&í8 EkaЄ?öźfǧ˝‡ĺbgKogeüž6×ăB˜Ä§( Oń6ąĚ4G˜śőNňü2gĽŚt0aęŹ8xżÇżeüú;Řß"NĹ&ěo ‡ě:ľąąáÚBgBÁm•‘ó˜98…Ákľî[ř]BB!ŘahŞż)m[žîfűĆö)iüĐGpćzśš¨ľ 9§]ÇTބ”‹L(žŒ…›í$\†tLő3Ď˝‡˜„?°ĐX€;GđQŃ'–Aáń”@hőńÎZÍ ĹŇxI Ńét‹ô\ke`ǂ@˛ źÄBĄđÇöË- ŹŰgŐ}”€8,1I.˙ń’´4qĂAύĘ~XĽŠ+ĆxJě˘cŘur_÷jĺJˇŚš Ŝ›&üŮŮŮ)S}5Ľ× …'6?™Ä)¤Ź. Äb˘P°‹wŞ Ť+^ăÎ6ą˜(¤MŕÓ4?؄‹ŁD5uMË’„5& ƒÇúí-Ľ_|ž‡‚ű=U‡œ'ěˇUý&ŘŃßoooŻö÷‹÷řˇśzŻ]ťęŢřĆ7úT†/˝ô’˙˝}ěQ7Ęöé™gžu/żüJ)*Š]Ÿš°zőÝőÚ/ű>&pŒSš…”űčŞßË~O­…ÇVř'‰Ë‚-'ÎĚ Ú˝hüŢÖŁëŘýű÷˝hR×r]§Ž\šR^űÂöŢ"cm[Ą{–‰Ň›~-ßĚČţ×)^‰.żĂ3¸ŢƗÍtZמBŇ0ŻqŕlŃ5ˇŤAGY?D'hĎwőœ–]ËFĺř‰Ůږ~ á™2ˆ’x›“ƒ3Qű†>+š…(xQú‡ůŠő‘ÜU€Ç§GęeAűľ^°vĽOľN§xՅ qĐ=NiŠÂőěłmńĎůĹ7…ĐGäGg5Útpˆ¤Ń‰ á„“÷îÝóÇÓ@—;PŮq&츌…cŠ?’zŞĽđ˜mrBĹ?qşŞŚď[îw’ťý˜[K˜^*<ŸŚťúĚ%ü)÷Ĺ €/\¸ŕŽ^˝ęŽ]ťćƒŠć˛#ĎÖ֖{öŮgÇžBŃO.,ĚÝÁT×őë×ý29ŽŠŽ×źć5~Ÿ_~ůĺňˇ–b‘Oě¤é‡~Ř˝ő­Ÿá÷ń]ďúU˙}?é7ţ/$úПüéěX9(ŎmżŃřo–x‘Ň<ŕ÷_ßUűŚß@ď ”ŰńR?˛}ώNĄ^ÓşJWŁß‚ě&’Œ×υTn1ŠňLÖ?OZ%Š\čjÓp ´§kÔľčšçžs/źđ‚{őŐW˝[Ú[Ţň÷ŕƒú2Ůuíű+ÔfN‡ŕ° ü€łe˘óD§m]ůGţ•ťŚ˜ĐÇďuG9ůŹűIöř›út_㊣ك°ł @ŘďzČŕK!ěZŘŕM@ŤvŻJ4gÇfšçö*–›()ßý1¤żK[iŮ1ˇWŒäˇŸ4”ŮH˙ă"ŔĹóýŽL/ä筛ŠlXŰ~„˘•Xddď5aӘŒj>LdŁkD:ćVŁĎńhl^źŻMőh iôţĐCyˇŸ×˝î)/Б㏉ťęBĆđÇpĽĐ¤,“ýťxń’{ík_ë~čawóćmďőć§ßävśˇÝŻžëן€Gي‹5Ýôk^žü⅋îŠ'Ÿr׎_óâĄÁ ďS%j?˝ťÄŢ~(&8OƒóAǡ~/š=üđCîÍo~łəčöíŰn{{§íeëOq—˙|#GĐ&_+kŽ>ľűj:ŐE΄ŒrŐÓK׸‰)žÎ\Wbîů”öW÷űÜ&:—Y˙ƒ‘ŰíoťţÖŽJlz bÄ4řkk3řéč^•śśéá,>ť{şéxĄéë×ý3ÂfÖ6îú~ WşeĆ´> ü€c%vš1WŠýźą s҆–cHĎ wş ŸjÝRp‘ÔĹ?ćˆŃäf§DzÄßýXâ6'üŠ}Ĺ´pĂI ÷žbx}.čŠD@–~¤şáŘż"0WŽňŘÄŻrœÇwxž„˘ťY:›ëŐń:ăcłě‹1&ěI›Ó‹•Ëœ łwţ[ XÂaéž$\‘ť‚ÄVmßÁžŤ9™xH.O>ů¤䑇ÝO=ć]ƒ>řĄšgžÔś=–˛-Qj€nqĹë"žđŤ^ů5°ëE?ţűÇçâ”sóňĺËîÍo~Ú=ýôÓţłžďóĎ?ď>đ¸{wďš;ˇď–×÷đˇunşollzЧŸ~‹{ë[ßężúŤďvůȇ˝ĂĆ­[ˇÜ;#ˆÎ…?iq/•N‹GŇ 2€c%nOÖć7ĚkÂV…™öYBĚÇÜ_ă{ě1?OŠž,ŁŽ÷Ö­Őť˘’üQ —BSč¤6žN.Ţşłíśw˝°x0Deëó ăŠ$™,Í]{şcÂçÂŃŰćúcB…ŽŤĽýJwöĺ÷?Jđ˙äƒ>͙(Šc;Uв3xvôk˛Sœ •°­úÎIëVNŽ&ą\ěŞÓtNľ9ބËí=N‹Ő´Ĺűמ=W#ţ‹ÓjIźŁk‘Áę ˇ2aŮP$eŰ çůôƒY'żę¸”š¸qĂ;脁ĺÖß8W‹9WsŮq­ńMSůžw˲ięŚÇC‹ĺkk=—hGÁqšÉ=ČĘšÓQqě)ëâ?…ß[Ľ1čŽyĐŐŤ×|0]ŻÍÍ Ůoąáˇ“$pJ0ş€ÔýâÂ{sljÄD5”W˜ߘl™Ľ)&cAĽŽÉ žę§t‰–žĐ\Ţô~ş¤Ń{KŠčbŽď­űŠ}žtö˘ÔŃĐíö÷ÝÖΖOÝ(׾4nžĽ‰cľ3ľĺIäř>%HŔşŢ[RŽE73Ň}ĚAÜîŕ\9-zÉ—ľ„ÝzvÍ^/ŽŰb/ť˙„…ź)ÜŇ>œA ç„?pbĸÓ:e`÷´–œxˆktI{Ia{mAŽÔ;ޤQ qp5°Ňď'ŔěĎ5ˆgL`ÁČ´6]rgvěśu&Çó'=ç…E§‹tĆEƒá{Óçś´`őúŇZůy:É`”ĐEÁ`˝äĄi‰V(–SÍG?úŃ2:Œ…ĎĂ6_ Ďźđ ŢĺçůçŸsĂŹ“˙ö;nď öÝLX3.ęĚţl¸šŁTüMBeäj$ˇ#íŻĂ(mmmš›7oúeɄ ƒ­­˙ňË/ť÷ż˙ý^4Ľ:ďdß[ż‡–79'Íz9;f;–f=ćYě°(´č}Ę%5—š&Ꮥł”^ĄS×ß&§ăř/Mł¨2ۑ@I÷)űÜś#Yëşîĺ .ö]˙`Çír‡şŃ 4:’PœWšNÉ ×đ\ŘěšË7nxÁ¨łe~hüLfń?I´˙éŮś§&m˝Ł6ţFŻÚĹ´ö6ą}=śšđN—9ƒ›•BĺŞ,uŽ%lPRč.B•ÓďÜlŰ˝u+MŇ0rżó¤E ŻRŰ÷W7ĚŤŢé”m´šűÄb’0ŐHčn €L Łň“RšLšnڟśéĂvŠŰw’„˝,ŗ1z…˘•Iű¨2{{{^,$ńŒ„0Js%7žƒƒ?Ýä€4–ĘĚŐE< ÔjîÜšëëş˧˺uóśßŢÖÖśŻ?N3IPcß[˘ ”îŢ˝ëĹ>ŰŰŰ~{z×wż÷xů´ÖŃžźňĘ+î=ďywĽHőŞíżĘLsŒZ(ĆţÖ's-g47œwBŃć¤kƒ]Câ“öŢśžÜbÚʧSŽŁG'­íƒOݕ(—]wS—§CŹŽĂ–2ĆÖib˜Í?Čî[}ŐˇÖuéZÇíngp Nŕ;5]ǚîq“Ęw:›.š¸áÖ/_*ć ü8á3ô œ/K$üŠű™Ő ç.š Ľç‘ŔyáœóvĚÎş,ÍÁ˜RÎP ĎNŞ÷jĹź\Ҟňˁ˝8 ¨S˙1W­ŒÂ…>6Ä8œgĹw´ í,ëN“VŔŞ’tŞÔtž[=ňpO\×ĺiŽěœĺN)ΜkňßęPnHqҤĺčLŰÎą¸X:&ü S•űLä)˘& FŞuĆ|ܘsO“X$M+aŐaĎ1‰zärcŽ5rQÓuI̢圽0}YSŠ2 fät#‰\ŹsÇ׍ő$ŠÇşxŠřC%i-˜-1ŇÝť÷܇>ôᬎ۾~˝úžŤŮţígÓ/zžƒhrźhBußž}Űýň/˙˛˙Ži[ĄŘČŚŰÉŻ­ćú#ńęŃß?\ßDUńďˇřŘ=Ě&Ť{Ző–ÖŚď`.âöfé„Vs}tľ{P~ďMÇŽ-ąXu^ĂÁŠ\§L|Şk§K”†Ě„>rĽ3ńĎ쨉:ókq×_Ď%ŔÔýÉÚ)§Á$áOş˙Ž$V8'4ĽŒmršxMH pŢ@ř‡bŃNۨĐIëŔ˘wf*žç^˝Ł)wÉ;Ľ†¨\šÖ„;ăíMsČp'̤ ¤3,ŁCn%IňéţřÍóŐĆÔ&IיxŔŸ;Z–&…č')ejšNÎÉŁ=“Ć÷6HäĆËDŽ?á|ż_IR ÂaÇő4'‡&ńOS}­ŠÂć͊Ž=ćF#‘š KĂ%AK¸q`ŮŢľž9ďh?ČŐťÜônÎAąč'ü}$ë×3áHŘóž÷ź×§ĐzńĹý˛~?w'’đGŰ0‘M“¨(&tüąďÝöűŒ‰“ÜřqaßKű ŕrXŢę6ǟŁâO‚ś;áěGŇÁ™9ęXŚšř´• ďVňoŁ mĄš–…×ęĂ^ovwY]ƒR˙—sÜ׎\)¨Úî¨účŇŮíşšŰˇť…`u8šK—.{a§ŇWžŚčÇ3ç~_.öľŰ îGI“ˏ‹Śĺ~’Ě1w‰8Ť/@XᐄOIòyž,’9–§öĹÓqÔ4éli×eŽzňé&הć7›?júű¸ąňs €Q–„?03MšM„¸áƒř˘uŕŔ Ń"ŠŰ‰Ž6RťšƒËÁůçBDĐŠßIƒŕ'tŰP‰Žď,u'×QÚŃtí-B”Ć’i}yâ\rĹĘafň1ÚŻ‹s ŮRƒ&|7ډQŚîoÓt’úÜ7a Tl:ăřÔ(-ŠžÚś~˙aá` ŕŽ}ŽƒŃŐoš_˙Âĺچ„?ď|ç;˝‘„:âůçŸ÷űĽ€ąćľŐ=éťŰ÷j+ßVWő˝Uǰ&šśÍF§Łł"Ʌxúš0Żŕ%š¨měŢWS‹I8Ó@3M‚ŇYÖi:u퓈1ĺ"9Ç´ E祐¸ţ@"”´zÍmÁ7ÍRĎšýý=Ÿrgçž[ßčf×ysĚK]'qn^ǟ˝ý}ĎĐýBŸŤWŻúßDżÍY0ëŢ÷˛ýÝÜ܌ұÍ"ěY áOŇ8wiîIË8í˝OË˙Ĺó‰9LfaĎ$aPH,\I˘÷řspŹÍł˘éřź9™oÍŚý=^|Íé„eátqß:ź[vçŞÍok_NÜ>íL€s Â#š˜ˇPÎ  ˘‡BĄ‹1ŁA=€ŮH˝k$†ĘéĄ,ě Žb`Y˜6şşmš‰|םŇ&4—ˆ4­R(+RR("LJ‘ćÚÂ1ĽpW)DEú§öiˇťćSěäAüŽ˙,äŒ1ĆŠoę.Ay'sŕ"äëHŠÉŁ‘ŹSŰ|Ä$߈śŔúŃD?gÓžĘW˙őžgá>e˝ůTZý•ły4ěü.”5ę÷ŚAǸD+iűˆŘ$Ţ s‚q‡úBqÍů1œśS*AƒŤ„$¨˘ň.Ɵ‹yQE"W­Q0ĽSzΓň˙ů֒J15śŻóžOĄřGŻ0UVüěn'Ün¸mŕ„éśšœxš÷łŮĽbwwĎżŞMk›ˇ‹zBA+_Óżw~M3ŃĽmź\óącŸUG’ŒÜ$G`_˛áď“ßSܙbÇRęŹ#›¤™ÖB_ œWňűˆ›x‘Şľ5' îň˛âĽ{“Ú‚&â´şbńꬌ†&ş D?Gş^÷ţ`žwčv|›UýŤÝnuîxaŤ›‹ľîĐmŹoä)+{ëŢ)îňĺËKxÝiú˝–“eůíi?Őf˛ö”=ŰÁ$ě:5GńŠ­xPMP~lý˘=Yř¤‡ßżŚÝ›ißďŘ-ĘMß_ź¸'őöý=Ęî_cĺƒÁSáźđ=.ç„?0FŘáhv¸7oŢtĎ>űŹoLżá op7nÜđ‡;wî¸~đƒ^ôš×źĆ‹}4šPĺ4jäʕ+^(´ąąQ4\’Z',…=Iâć‰ŔZ]c[Ę$ag[đ-˙Ÿ–˘/üéçéňŔŤseę¤rÝ ZJ›”ŐŃíö܅ ˛@G.řQűôâĹK^PtďŢ}ˇ?ÚŻVIM`ÔŠžśóĽŽuÜZŻW¤ŠÉÚ¸C$ďűÔ y{Ú:ŰżŻĄŕ!ÚÁ ßÁĘOé´K'/Ď˙ŚgŮńw–™dú槍–oű}Óćí%iuD+„šŚcĆĽĺ9”¤}§‘œyZŽu˛w #\.ąĐŤ(‘–ű—”B–´}W’ ťÖúýš×H*›4Šşě$U 5ň$V& ߋm–—•@čÔ\î‹>†ŮŚ’4֗TâŸÄU˘ĄRŐδNqĺčŮ8Č2oaĘŤiŽ:ńńgŰĎS†u\e&vüˇ}§¤ĺs{9í^x kÜĹ´ş–‡×fۡIŽAMÓ5ńĎY]ť’đ #8aĐĽí=ŹŚ= 3Óöĺőŕdhjƒ†óâĺmĺëďy[Mi˘n\żîŽ_ťîۂv=ôů™q˙ŢžëďßË>mš“Dƒ,{ě1wýĆ5×팼ř]VřcýźJŚś°úqóZ]wŇ˙ľkuÄ?0˘ăXŒ;AA#É<çK2ĺů2‰Ú›qŰ3^_íö‘kűj˙ƙoÍImĺăaÚăe¸u˛­íŹŐ„=‡˝G!8ßpG€1„z Tîççž{Î[‡ç#MşžA"7Ÿ_|Ń˝ë]ďňí§Ÿ~Ú]ťvÍŻŁ‡G•S}V—€ĺcšČőëʞBß`b“jTvŘhiRjŁľK'ФđW¨2źëO!‚HB1DáŢăĹ7‘cFŮ!é'ňt ęHüŁŔĎäbvľUĺ–Śë‰_ŞSű`/ľu5Jş×[÷ű< };Xĺ,xřĂvv¸i˙s‘+GŁë;Ť-ýp8Kjžśvvôw85ž‹Ŕ¤ßç°ë§nZ§ńZöˇ˝Ř[sëkĹHýŽô+ŮŞƒ\Ԗ"i×őGůłW8ňÎ5Ü ĂF;˘eőëůŤˇŢó˘5ëDśăPÇĽ ĆĐ|[Úćh0l¤Íä ü~ŠŤÄ8ţ N+Ÿ°˛´ÁŃ ţŢ@(ćiŘ +ăßNŕ™s’Řgš“P¸?MÎ@“ÖK[NßJ 3 †I)‹ƒş3‘+_mU}—f;Şkľ˙MűĐĆd§ŁłčG˜vÝLƒ3ĺşńtăgçâ‘Űç‘ImÍ&ńO|­ Ý*ágţŽ{ßúú†o÷ÉŮFmˇ°îđ}† ɡ§”ŠżÓ,ŰŠßuożr岝žőˇşDé¸*Ěn'ź|ĚöԆ•ĐǡŤWöݞ†pâ°.hÍ,ˇč'M—wß;nź{UvLĂ$ŞgçÚźąp§‰wÚ/ÁŕÚ5ل5ŠmI˙ráO’$áZA…iĐ>unzó(×ę_>Îâ,°Ü„Í95ž§%.Ź& Ď> Âq€sÂhÄzTîçgžyĆýŇ/ý’ď4Öò:ˆĺćcó•L‹Ż}íkË#†Ž4á(gIwˆŔâP҄bŸ†rAľŇT%Ş^˝RĚSĚ÷˜PfT“äî(Ö+˜§>¨ŇĐŞă,´~ďv,ľW§|ЃXmڇzȏ˝zőšw­ĚSŠĽeŞÚÜQ#)ƒ!ZŽ4ˇŻžúŞŸ/ĚÍÍ ŢíÇśŤśŽKڎ„;š âWž"7ŠŞĎZ_mi­űüóϝۡogűśŸm{č`ůĐßóÚőŤîş9ĄŽgÇd¸KGý|´ňÁŔmíÜ˝­˙ÜŐ”.RÖ <É5Ş•ě¸“ëęľ×ý´Ň5ŰKčX׹ĽcMÇťŽc ň8íű}iâXžĹŇćýosj8,łŽÜϗł Zf?K‡}% Ş‚.ł|ŻIŚśň‡ĺ¸‚švÝ? Âôsi ÄKŁ`U=S’ľcę#ĺé÷˜D“ř§ü•{ĺĘŃÓîGł`îŽQÍSڧ:^„iÄÂWˆ]ë—7ÍňŹiťďí~q6÷‡ă`ŮĹ?ܡ–‘´ĺs\,{I{šř§œW y\1x§tĽŢőVČ7)´„ĎŐňJÜRۉ~FÎx)ËľęŽŇHYŁŢ†ĐQ(-œH'c‹sţ•nž…(?q• uźmyÜ"JX5ţ@#á×( p¨#ZĆ @h„ŒÜ}^yĺwëÖ-?˙ţýűžŒę¤VÇłÖÓ|?šľčLÖruz?řŕƒ~ZiÄذ€Œ:ŠˆQ§ľ:§Ăý€E ňÔg׆`ׂľćjÇŞ‹HEuaJ0s­Č?űŃoQ 'w˘ěxÇľՎÜÜÜpýţ kżîâŸ*č“×QmR뎯÷|ťÖÄéł ľEÍĺRĺ%”ňvąšýh Ţ/]şč÷;Oő5đuޝlmŰţ ďÖ|ůN.^ň)zr!“Ň,ŹuןxHßĂ •Š—í“9´´˛Ü1ƒ3dÖŕ\Ü1=Űs‰•^ď%÷čC]wĺjĎmʍGÇúHB˛ÄítݝšĽŚnwűśŰß;Čş­7œ|’ą‘ŤMŰŠ„ÝľŽëöşšűOoÍż6˛sB"ŸÔRzŁúuHő˛ĺyç|2š~ŰDVŽ#çŹŕ'ŠŇyUŒ;[Ľg&ÜXvrŸćżOůۑߕt˜ł9•]¨ĽĘ ׄ4_MAšZôŞőšNżŔŹ4ľ  §ŐřňP i)mĐbÜţ˛yVvúŞmů<çyXÇä‹á(k÷ö%O]Ů~œZsÚäDyz„Ű´ß_hßͅ^čűX˙´Ú÷ůß"…őŘßČÚŃśĚÜcńXř÷ ˜k˝úşmP€ ˆWŤÓÖľVżŐ'źËb1¨ŔœDÍ)4<śbwŔđřś~sű=lŔ‚P}ąŰhîx•ÎŐ÷ą áůS?ŽÇEĆašx?Śg'ĹŞ´yĚŐśű'ľÁŇáß ‡ËŒř ˙Ěźžˇ˙m°ŠžÉ'?OŞăźŰŮČŽTŮq6Ę"¨-šÉNŠ]óz%źÉŽďn^^˘žííżlcc˝vŽä¤#?ˆEőëYYçŽ j‘ŻĐtţůçŠ^Żë÷ť$úČ=(Mí;¨Žěš~c­*ď—Ń„Ëíâ?~PčԜ1#žĎĹÇą30ţŔń…ˆž~ýşń( "Á0ôYëH–€GB L–đGĚrŇ´5fő Łüԟüɟěˇńs?÷s>•˜ś•O.š§žzĘ}â'~˘{ôŃG}™4ŔBRڧ :ËÎe/ŞFÍŚşôP(lŽ-˜­Ďy‡ŕš žLˇHk¤ŽĹőŹý¸ąžéE?ŠÓlkk+k§îfÜ{ž1UGŚ7䂛áHmŇƒŹ­ş[tVýôÖÖ}żoDh›yˇ+ƒľďělgĺ%ţY -× 1ĎĐwŘIx¤e{{;î [Oű›×Őńiœ|p ë(ífÓţh|'k!6ŇţKPŻśuމ_Ľ~qłÄh˙›8¨16tJđ.ţÇFÔ'­‹7z÷ČŐ{îľôłçŁ}×Ë:ŚGCĽ•ëgé#ˇ3ČŽŰ WłéŽťóĘžŰÉţůÔnIŻŞ%í{ç;ęłcŽ?ě¸ýţžťw˙ŽťˇuĎ]Č΅ë7ndçFÖůžuœű€`_ʃěŘëş˝ěŘęgŸuźz˝B'iŻ4ôđkľZpŞDsIÔÁ_Ę ĂÉu°ŸˇçÕř,!í#ąŰƒ2ńg€óL(<˜eyěۗ5Á] řž×Mí- #t Űevoł€źšŁ/áď#Ąůý{yę19´ˇĽ>ŠĹ>Ą ĺiîżýţB}Ăć@/$¨WY U?sžž,OoŞ?łý=,ĺ“ú°C1ŒĽÎ ËéűŞ.ÂXşT=K¨?[e匨6š•Ń`Őß$źĐúZ׎ë˙ÎSľ]ńĺÔ§ŽýP]ZŽş5?Oœť—ÚŔŮPŠ(ôۨ^ËŐ˙ޞęGzN1ą”‘§6~Ŕ—W_ž~cŐaƒvs!FţĚ15lĎŮwąśLëč{iŢY‹a–{ž”űŚŽEýŢúťŘďlçĽ ÄLxe¸PĐfB,ű;ÚńgÇх ›îĆ×ý3ŠŽ=#çď´L1-‡YĽŸÖßusă˛ëfĎŁaî`;fÇÉÚĽl[\€—=Ç(őŕúzן/}÷ŇK/ůe:uÜĺÇFâ9ŸÎ¸?(ƒçƒnôŹ.,ý˘bLÚ•í$ÝÚy\9üäçŰ({6 u˝u\p>xÝ]¸¸é–‘ňZ\ŔD힉ÇgýĐŢ8ż ü€1bĽżPĂL .5DőşsçŽoˆŠA§š= iž–ĺ Ć=?-áϋ/žčëąFŤz@Qš|ä#žq( mG =˝ě#fŮöËĚ´@Íx9kˇ™‹O”ę+ŠD>ŽAŚyŮ´pý‘ƒI7űg–Ý&ň9¸QŮ!mŽ9jťć#(G^| ÷źƒt膃¤Źç­i6˝ç ÖĄjÁĂ\0őŇçľ5lÜňËlä­ÖÉßóÎ[ľi­łtËxŽšţŘßTŽ=ţxcö,˛ŃŰôĎĎ>v?u÷ÝBřs -šÍ ëŮńłYîgţŒźćë‘{ŠŘß?đóő=uź˜ HŸ|ŕŒ={çâ ˙LŹÁ4#W—ýäá*űť×…?šőÚ%ˇ1Z/§}jđ¤uč„;éż{2ĽúđŠîăež$hO&ąĂĎěmİ=ÚśíM€ŐáŒa#­ál IŮhgk@ÚCŒ­g˜mŠ yĚ9HJpŠÇő`g6Łz¨“Ä? ¸čĄÄŇ.„ő‰ÚČ8q&lŠ€Jič– 7Őmço,0Z –ZGu’Ö&œYKÖ\.JËÎ÷|$oâGŞœĆU{3Aťî÷ďţý-Ÿ˛Vďę$´ś¨œ{´ÖaŠ:l4q<":ěWŮ<ííí˛”ľšö& bĽůşvőFÖVî•"{˝ltä0ůËG:Ę­í‡Ăn1ŠwÝ[ „x§Šű÷‹€”žĂÔSœäŔĽOqĹÂŃ)–™X- …˘pt´ĎC9bÚƒŞaȎE :”)ŇĘńÇśm%˙}ň 8€UĄ ×A˜¤ńžÖxI‚˛nBż}phrö‰ďIáźęüĘĹĺqŰŞ|˙ŠZˇm˜ŤJ(OľjíźövŮŹ˘ŸrÜt’ĆrĽŮcđť˜cRť˝&öYaŽÚăďyĎ{Š6ú}÷ĐCůöťŢŐ×,,ő–ú“…DBj÷›K¨ v ëËśĎń|kϘ˜BŰŃ˜žlš‰§Ő§ iBA†mŰúÎíůÁśe}ĺšSéFé$eÎůÖÖˇç‹YŰý&6˛v™ýNV—ŐaÂs„ąAťś-Œ˜X*L“:AYŰQeőwRĘ  ßčŹ ˙ŢóR<ޞ:ą¨ŃŽ)kCŰß!tüir#‹O&ž7 šYyąPqŢçÇÂzöŞ…lÂ8 „&z^Ůl{‡Ň|›ŮďôÝZŻSƆäĚe"šüzš_ťLhç|:Ň,Éĺb!‹-Ů97ČśˇˇwPŚŰS߀ŇyuJ‡Ňâů˘ |ö)ć8Ľ" ŻšuĂÖĹţhşŰéć÷­ÄŐÜ~šú’ÄľĚŸěţ“ĐîXyţŔMË löŸö@bóŐ0 G Šńڇ6{ˆ˛‡&bVN <=źÝ¸qĂ?ŘŮIӈŚĎp64J!P(ÚĹŰYĄz:˛Í—tłÎÁľžK˛NČNWA ňÎ:ýó.=ŁŞC7Ż{tܧľQś6j7&t˝0"ěě÷ÂĄ~1R7É7•8LËQIâjÝ*X /R/ćČG"›CQůőuĺ…MÖśNĺý˝}§ŻŚý ?śm­ˇÜš‰Ř)ç°u÷0o}óŒĐŻ8ŒÜÍí=wńöŔmÖźŐž2× łŽî­­wëţČ˝t§ďnßÍ:ˇ˛řTžE§Żţ?Jźř'ńNQŮó–oAg~îžU űš˛ŁXÇô~Öa^ó Čâ˜VóhJđϋŇÂíGŸÂÝGë–ARWĽú˛y~D°ž‡‹\\MšÂł­'ŇöĺŠ;\ŐÇĘb<÷—ÁiVł{Tw}ÓuײŔUwm<Љ~Ćú1ŚdÎ3“+q ź6?ŠÚ]ĺšçšR¤´×kbŸILv™ˇ0KůP¸”ŒŻŸVwWľŻ- >‹đ'oœť3Çö&š1Šţ&üąż‹‰LňŚýBü ëŸ6wűťšcŽ Bń–Ęk{6hŔÄáöŹ_;ÇŘ>[9sľí†ýâś?–Â)ęčűYŠ3si‰ą8՗őËëeŽ;öw77ٰžđ{é{ęł9…ýöVĆţÂęąç#ÍĎS6ő}˝ÓΗ“$vü9ě ‰łzƲßT/‹Ť˜ ,ö˜°ĚĘŰqn#YšP˜fĺ-=ś=wçoKç6,œœ:Ĺo‘ďOWÎş^„’_W”ꍯ2#Ű:$ Ҳ^yŒĘ‰ĘRżŠž\Œ—ÔÎ)8 ůü˘ç_›gν˘ ‘Đnůl?&üńŞš˘Ď ccsŁJżđR RsEîĎ}QŰąMH–0ţŔDŹaŻĆ—Ä9– Ř"f jŽ?ąJ\C‰yĚéGbŸ÷ž÷˝>/łrk}ÔĐzJ÷Ľ:Ÿ{î9˙0ňä“OşŚQ=pFԆENc$EńÔw zą<˜‹~Y‹K8Q{›Y‡ű…ËŮëŞŰ۸äŇţŽĽš¨Ç;Śh_˙ ¨ťęČK‹!Ď{žLßÝĎڛaÇľ}rzZtrŤc4ë¤ď­š ŢzżăöŐŮŢ×ČWK56ňőćâIél˘uóŃŻf­>Š:›ë§ńökŐImHÄq˙ţ=';t'…Ůa˝ËË"ě˙aŇ{‰Śă|ň÷ ;zwîïˇ÷]'šéGŘ^̎÷4;Öô´ťçÜށžł:n÷ ë¸Ďşi:iĎ[ěç[Ęţe=Ő띞ŚfÇćýl=ĽĐşĐťPëäw­ ˘PœĽ˛ăMŁćă‘Ň&&ň’˘n \ůó*ɂŮů0eAĄaŢÉnç‰|ĐBÁŠŃhÉĹk‹FR˙œáüJ'lcÚ%ţáiÁ,“3Äĺën}ó˛ë­oJ T éŞë~ŹwŃźÖ­8€óŔ$QĘ<ëççUÝU1♈ö<œ^ą“Ʋ ąŔë_˙z÷裏úvƒúƒ50Ԅ2ÂÄ昣öPž˘¨ŞÇÄBö `Ç€š˜“Hxě™'LÁk/`¨ż[ýŮĄP#›Œ @]}żÔ>j–™řHŰÝubÂőŹ}%än ‰âzÂßCËMd zÂÁˇá~VƒŞďŽyö÷Q}) źCcböˇńńţ=ĂăÜę=E˜Ú×^yšě<…p~^Ů3oţşxq”ĹiŽůő};żł‘˝˛ç’Q7wŃ˝=׊6gRˆjY;żzNŽImŕŒžƒž§š/Ç(@Ţ ‰őžRˆ]¨Žç(ŐWţ°Ľ”ĽÄëřtĘËL>X)űĚŻ.ivúÉ?×EŤGxŔęđĆíöŕ¨Ć™dö  2! ĺzŇ+OĽĐó‚}ÖC•Ö3›Ö<_ë~ůPنŁĘkšĽJńe֏öĐ6Fx¸X4"ĹI唻“$^lă;ŐɧětĂ­_şć.=ř¸ěşý­—ŰšçÓůżÚŘÜÚ$n *PŮ{×÷IŰłÎ{ĺؓđçb>ŇPmĎţÚ ?ŘČJžŐ>ŤƒÔF çűŃ+;1óýH gžĐĺ( Ę;×$ú^앢i<°ZĽS1˙żîQ8ÜśMlÓŚîö΁ťłˇíĎľNĎ]ÚěűŽsš úęŢ]Ď:Ö{n8Ň1ĐÉŇNQOâűś%´ŮčmřóiĐz—ž ›jƒ/| ¨pŞEÁ(ëL[BÇhoí ńÜń#ę‡w08(GçnBé؀aŁőUŽ–Ş‚ţä ™2=…4-NYœ&Κ3źÚë,`ÖU*ťOm^Đ]yč ˇ~ńŞw˙ŠšGÁÚľVÜş]N8Œ ‚’¤îˆ6§k:˙JŤŸUĽkőn%k}w˜ř{:Gqçbôav/ łýNtפּşI!~ߡö´GeÚZÝ×;ɑSŽŠúˆ|đA˙9tüág›6ǓœéŽM‚›Y8ěz“ˆżĎQŠ~‡łÁŔŃ {'Kj ˙ě[7ńőÉFtËG ÜŽ'ĹźNš^*ás9g”=ăÄ"ç$ u˘mŚ^PŐíç¨\ˇˇ.ˇýęHâď1 ÖŻśł,”×âĕ—$ľĎ"v ?OjržœţŔáĄ<­?ü°ř˜SĎööś/Ť3•ŃË\€,ł¨Ă^â-oy‹Żëă>îăJ+Ç[ˇnyQ!zŕ{ěąÇüşÖ(ő 'OłĺCp1iD%îąiçęŠůKó•Ž:Ţő§ť–¸ÍË7Üő'ŸöŽ ÷_čšíQęöűŢMdäÂv`}¤nUˇ›Ö ď4;{kƒŞ˝é-ňł€ŽpĚŽ\A9˛¨-kíR „ Ş‘˛šĹşÚÂ&Đgk/ÇmŮąýl ܘ¨–˛ăŐ%EŠŹbÄv’ÝÔŤkîŞŮ˙łsa­čđľNs dVÁţř]Ťž3×Rڙ@ͧü8AżPěc˘œ0 ԚΟ˝ý=wç޿Ϝńˆt[Ďö#ŹWn?žožĄł™g;XlŇňüu>ĺŚŰ¸ň ťńäÇşkOźÁ]¸z#;{ţ6ÉíÇ>×Ä΍M—óá>ç‹1XM§ž]éŠö—/[¸Nz‡’Ź}§ű“/îěěú{RM°wHúýƒ˘}™ݍÎ$ <ĎĺЖ§ŞĽƒl˙÷˛ýß)„?U`<łĎśß}˙[ ƒ4T“ÜfNš¤hĎŘçůÚËŘ_vŚ3 ™$:UŚý­tý‘HrP•˙žcĎůM˘t{ž Ż“ľ ‚⊛,”LŚ'˙•ŘŠŠĆtÚVşěů”äĹsS)řquąOłűOŇzîMZŤ Â# âč!PÎ<ńŘč ô`¨Ş–ăXi €hZ"!}Ö:fĂj9…ľžę“đç‰'ž(-W_yĺ/ţŃgŮťjšYşŔŮÓÜß, [O‚ ŻFA €\׼4\¸ě.?řDhr'…ÍŤŽˇł•ľ!÷ŠŃËŢV'ĚEšsQż_˝0-Üx|ŠĽ ŠöinOż~ů˛Üv. ‡”Äue‰/á\†ÖsáĎşRÝji?6lnlćŁ AƒŇ‰iýţÁ ÚŘqJQVě¤ík:ʐę¤ö_ľŹQ ÔdŤL'Ň☊ĄŁ¸F/ńÇąŇĎ%Üt˛ăňÂĹüœ:Ř„?Î;^uLT:ţŘĎRœM-Łý;Yp°ßťčşűűn*iýriuĚŚăőč~ć vŹEÇcí}ĆęŚ Źńľ-H `~XŇôÖ\Śö1)˙Ÿëw:Ľ)RGý—Żg÷¨ÇÝőÇߘ;ţ\¸ę:>˝E7=Ľ‰É+;|Ŕ…@ œŹm9&(O§ˇ-Ežn rőŰÂéŽHM9Lsw‰š…ú2MřS•ˇsѝ­˜Üݸ­˝Źî§KŔšO3śçŠśF8Ůx OęűPŞťk˙ßĎîéˇďŢrƒ]çÝ~jědîĐľúv%„Ň[í[ľ/ÖwwÝfŽv›Ö–ƒă&™ŕ`wÚˇŹĄOU{ŕĎÇ˝ŹzÇďy&-Żg!Ńő-:&UŞîĆó79Ę94loR}Éą Ə˙¤–úšŠlxőÎ]V‡noo׋ěžş÷„bW ‚fßĎĂ­ËÂ#źůëЄO=őT™#ŮFXků#<âӈŠÁnëY†1_8vŚ\JĹ@ŰşEçjŽ?ľeEGb…$• IÖŚěeÁ‡ Wœ{ŕą,€Ňs| úťn°ŸUún4˘ŸQĄ%¨D 5‘A(­ń“š GíPĽůʇ/đQ°ś+C‡´úZ.QĆĹk?šŰułý^SGœËá÷ń$­/Q|ńŰô˛őÖűUО´ţżř—sQd(˙4VtRgč4áĎy%ŢăĎóR -Zť’söüsÖÉÝ)F̎ŇÂů'ɃůqŤ aףŁ2ýR§śłŮďy‘ARŚńňŽSz/\ä–ĺGÎŮąjÝI1Hˇr JBYń!­Tf5Tw÷ŕ`bڐ¨ś°Ň ËmvÚxčžÖQ;[˜÷ŒˇŸN*y ĎƓtn‹B{Ü&šlE•§R¸ÔÎŃd<Rœ'yÔĽwŽoúű“R}ÉéGBŐľő Y Ý „:şŻX Ë☂˘zĐŚI  ‘&˙čóĆ$Ǹ00Ze÷ÍŹíś‘ő-î§ťî`˙ŔťŒoíî”í\Ľ­ômKW4•ŞFk5ݏř¤ő™žá q{rŮe׈Ä]莝* NąVůMŁŔxís]˜œ›‰ÜÖÎ}wđÜžĺiž*IřaŽŢšo8ňmÝőuß6>¤łašÚ¸í?1×őyIŠ{x%$?ďĎ;§M˝GŸŰŽŁ`Öq?Ÿ5mŻ˝ž´ąülu'㳊édŹd§Öź ۙEÉb–îWk˝ľ,Ö6ôńś| †+_V_č;ţŒ‰Ď]Ăśŕ\€đĆ0ëwő˜cŇw™Ĺ|hńŢ)R5ÄŠö .O8/Wú0˝Œ°ár–yŚ ąŃŮú0Iä,ŚR8˙¤y ´ÓÉÓŠł+I6˝§ÓŰpzçŸáPéžúEŰłp)@iđŮš Ý˜şąQÜ I‚ˆlˆ}ŹóŘú‘S/Ş0Áˇńî).qe盵_ťé¨ÔZ¸âťşj—Ž@ÚřfaĘ–ĚPĆ˙ą§,ŸeO‚ócGƒźœ+…vœŠÔuuǃ*…Wˇé*™î Đ´;˝ě‹oŒŇ9ťtĘŹ†ĺ3ý Î+łvÔĄC˘đ']ŕ?MS`#Z–ÔSUĐĽşî›Č'ąs¤Œ˛$Ľ´łśîÖ7/yąOŇ]ó.oÝŢş…Z_ž8ÇGg7í>ižŕüŇvœľmŸ/šěç˘ J4¸ű}ďŚ0ä)YX†ůý´l§ĽĽ@;m|>§ŸŚSbÝ${[[ËۑUă2^'ZnÓ.˜tUťS˘řlݰ?pťűť^ˆ;XÄaćy`ąˇŰóďgƑn1K&ú)˙ǁĽ°>ľ,ąƒ3 ™<6 ]}ŢÄéŁîĎô睌ÍÍąÉbš$8Áón‚¤œW.+烟’* łˆ5HŢÎúD4Jóü1ś]ƒţŽdR;sZ´á;Ŕę€đĆ€Ž"Ą%xۨ›ăj4ĐhX˘ŔE1/IܘëO¸,ďĘÓäXrMXËR%6Ďڟ#9čŒÔ™;,E4>đ‰~ĘĎa`ڌä¤ĺ[ jŁćœsëÎDÓŁ˛T10N†Ež/;q€ŽińńuŠVGܜDÇg0ÓUAÂş íŘHÓ#~ O­eĎę0ŮĺÚţяϳţţÇB­"úXxźU÷ĄşřÇŐzň˛ţŢ´~ÁżKô“tóô^–VČîg•ˆÔŰŠ×ݰăęL‰XH›§öę¸ődÝĽJď5y§GW¸ŰH<Ž­JÇÚôÝ h7*᏾!‹Ššľ3“`~RŲ5/”űŚ™Ż=Ř|Î/?ÖFIƒz%÷9Ę5;wţéťdt†× #ßt–쎕̽`Á9Ëß?‰Ž<(.3łŠˇĆ šE§&đ‰ç'Őő8vô)ŰŃg˝włJߏ”ąŤöÖ˛÷^.ôY—ópö.!Pם˝š8łĚßc’…>p>@řc49íŘŇPř#ĚőÇćŮş46V…†ĐB’4Ť ’ćΨ|QR•N …p'ńÁ•źckm=kgő¸šk,ŕâE?e;5h—† |fäříS-•C,˘¨Ö8^VB^°pÔú]t!PR}.Sz•eëBŸžŤč I:…č§“ťŐ™č§śŢ˜Đ§e_'ŒĐ8o„ýˆé„śĽŒ*(ę|:LďT^´˝ËOöYmÄAX•ĂĎÚAßť-ČńÇőލ™7)+!ľ-Ťće}Y¸OńŽ|Ň5!=Ä:Ťm)€ĹgâȊ…§É].œŸ“U‹ ,ó.?E;QBTĽp–řg˝ˇîÝ}”J\íL˙Žôä­­)Ę;•¸ÇÚĽÉxjݏŮä,IĚ`őAřirřIËŔKÚhWßú°KMÜÎKÉPű\čƒ\(ö Ś•Á–VÇUZ8€gmÉn>˛-í#´Ç}ÂéJÜSE" ŁŢF­ˇWiż,ăÁ‹¤yy,ö)ʆ Řĺ'vęÉE”rĄÓ¸llÖrăű>X"(ŤÇŹ}…mmËpšh›ď]şŠ@ézXU;Pî JďĽvĺhsä./şápP }F^ô“ľG#Ś‹M#ayŘŚ—5â}:^ńíT€ÓbbŰ,Մ?őÍy[ЕíÁN"GŸN!ňYó➵nˇ|÷÷Żnî*پ餞NZśŠÍ8Š ŤÂ€%ä4„5ą¸'l$4‰~Â}€:ÜaőÉĽ<ůÇşиÓO%ţń#Ö,͂OcxńŹÁ“NZ|ŽD=iÓ´sÍ.@Ĺ|çĆGe— öXšF6ťqńł%I“Ś“¨AĂ.Ŕy¤Íő'iđ”Ž?ž<ÝWéړ¤uqO0ťQşšŘ§t¨Œ„>Ąŕ§5î\(FĘ÷‰ö+Ŕ2Ҹ˜EXŚ`hKű €ÜX™X ¤@NSŠŻ`g÷ŕźc}‰mďEĄÖ6[S`Öť&d‘dčܨţHôӉÄ=ľ—Ť„Œ…=cŽ’é§ږËMŇ.Ŕnk_6‰~ü´wîÉÓxUB {,Ľ—•mßͤQôž$ČÎ#`ŒYGÜL[wZ=‡mlœt`†FŔŒ$ąëOR‰l˘Mé˜ŕęâŸjýŞżŞŮí'iólĹüCąAť1můěÂí¤XZŸŰ›‚2ůT}^-(Š€\‹¨šŽ ~üz<`3& öŁm{Ń>@N(ú‰?Ǥcí:L‹sSçŁD?^œ—”ĺó—+?cb×.üąw ‰˘™şo°ŘĚÓÜôž¸çŸâ~”˜Č'pórŠ×kŤ'im÷śĎ€ŐáŔ˛RYN‚YJŰÔĂŔ}V†Ęѧ6ťŠdҜňŤUüÍsŽ9ľW“Č՜†šЉúWiHńĹŮ °ĚLŮ<Ö1.žIĘ~–qĽú2áNîîÓä TM Č´î/w$8§ÄmĚŘőÇEËŚŐ%GI ¨ZšŻ$mNéŐ4í?ťfáOˇH1‚Đ`ľ˜äœ3&ř‰Ä>ĺ˛hڜ}Ěĺ§rúqS…>c÷ž űç„?ç ˛ËŚsţá6źůZçŽř>˜$ó?$s…Ł$™ĄĚÜâŸ`ôu’Œš˙řĎśâ˙ĄŘ§žvˇŸÖQŕeVƒ‚3ÎMÔ´‰sŚ {ŚŻ×´<ޏ6ÚŔŞś%›>ˇ˝ÇâŸY\ęۨZ™Mu—őMŘ€ŐdáĎŘtƒŘ§ţŢźlžĎÓˇ1Ű~Ŕj‚đ`E™%Hv0Ç˝‘‡g8Ÿä›rŞĄí9›ř'_>‹Č'ŔԗťrţS›¨n?ŤĹźšÎ̂ŸŞŽ™—O„{Ź>óŠĘ[üÓ\ˇ ęŹoÓę,‰ŰťV’Ö{ÉáOÓç$‰§›…=łĚ›&úiŰŻ6čĎX=ţŹ:e`d†r0ű=‘{'@3AűłIüă\,đq5÷Ÿš–×Úşő@Ž•Œ;łŇ4ŽV‰ć F{Ć5lçâÓä04}[퐁óÂ<‚ iâŸyś7ţî"яsÝ~ś™Îš/°˜Ćő§ŢěKć~oőLY7ţď~Őˇ7ކŹÚŤÍârŹŤEť Ś˝Ü$aÎźďóŠ~—œ_ţŹmW-ǖG" nřp^{HN’ńM4ĎÍů` °ŹŸř§Z'v˙‰ÓYľ2΍‰€ŹţZŠ`dv¸o.ŘV3œÇKM2ĎHçy:킟ŠĺZˎďŔy&noÎ#ţ‡őtlŤŰיާüŠOa?çƒYuŚ}žGäfXgŇçŚiXmţ,Ą˜ç¸ë€“ť'rŻ…•eŠřGŒMZÜ\=XSQÝâđšű4‹}˘ö3ç#Ŕ9aüz?™ ŽVđ3^w}˝Šű p™Eü#“ú+ͲMŁU\ް–Yî!“ćF ÔԆœGčƒčţŹ"‘8¨íAv|ľŹ8Ż$ÉĚĹÓFŤČä6ĺńO>c6÷Ÿ@Ô.ŠNš†ŃáăBůú9J0`u™ŘžKŚ &LZ+‡ý´C VYD7MófŮĘél鞌š ĺU5‹}ÚžŹł8ţL›ž$ü)&fZgŇçipX]ţŹ­˜ŚŔ‡ć/Ä> ÷ČđžŮTŚyUîŤp^™Oü#šÜ\9UŻ9$fŕÓ Š/N&WËÁaEŰՒÉĺ&T’™Ök^ˇž>TĚ+ţ­éšŹ‚C85M[ýńz1ˆĚ–›YEŁÓćĎ*šGđ3mYŰ<X}ţ,;ÁˆčąůQ Ľů´ „Ú›çi÷Â$ĹëľŐ°b´ŠÍŤ.˙ˆŚÔ_ăËĂsŚ]äÜt!P}ű3^8_V˜ök|Ň֎k-3ťP¨qyC3íŔ 2Š]9‹řGĚâä˅ő¸Łďw¸íIe`ő˜Őů§i^“ŘgZšY@“ćͲ –„?ËLƒ¸gćŃĘ- p‡żOÎ" Xrć˙4Ž3Qdu¸˛žąt qg—›¸ÇŒş8§L nĚ,™Ođ3k=ł­°şEüO79ţÄÓq;rÚ7m˙ÂmŔj3‹sÜÔy3 |3Ý6o–e° üXTćń´V‘T´ ĹĄ}NŠŔyĂÜ|Ęű`đšíAýXî™Üwa 9ŹřGĚ"ŞĘyű4žwÓZÍÉ1´­`ɘĄ5k °Ö˛s\hóĚK›řGLr˙i›>Œ˜|zťˇĽ KĎŹý~­ĺću:Äô´ůp~@ř°jL jM×4ZĆ€ŃؙôÍ6œ3f˙ˆ9@ů‚ZšzŮŚó,ÚÁŐŘ€ŐgśČ!FFŸ€ŕ‡` œWŚľ)ۖ7š˙ˆ´Ľ-9iş\Ż-˜ęfŁąNXÝ›Óiç°î=łÎ;LX~ţ,hgf+ÜĐŃ'œžěÁvZ@`•‰ď…ńý˛,,ç5V›Ôˇ°BĚ2şÉýÇÖcëOU‹&‰j%éä8׃đfÎ`Î<Űć0›řGLs˙™6Ďć7 tÚÎĹŁČ9żÎÉ!ڋG÷ ú€„?ŤJ˜6a‚`¨L÷U¤3IiŔyĽ¸şŕžX_Ü ŕIÍĚ.ţí żt’(/и^L˝ÎQș9đ1ĽÜôzŽAlpÎ8JJ­YÄ>“ćOýő<Ĺő`ń9Ž6YrČ6äa„=ˆ~ áŔ0öŕy&΋—î>ĽČ§ĄžQöÖqçÝű<ĄČĘL{hnЧ>Ƀ7Źł‰|Éŕód/1MTœX@#Éq tćť÷pŻgÖ6ĺ¤ô_F:A0>‹ŕgŇňI¤´KV‚Ł\ż+:꺇)ŤÂ€U LçĽéŘѧM4š˜čÎpččvŔyA÷>ORwýqM.?ĺdô$iŔÎ m#°'Ź|nOaÓX˙aÎ9F_ŹÇŘţš=P2˙6 ÂLfÖ6ĺ´r“\%§‰Íg=O§‰`ľ8ě5ţ8Ä<ól›{ŔůáŔ˛ÓâÚŁŰz |LdďqúŻ@ôĚ`€đÎş÷ľŚů Ś›„=I, Ö8Ě/ňkEÓéÔúۘyťœŁç–ŁCN&ŕućq˙1f5•;lű’óÄź÷ƒ“ríážpžAř°ÄL}ŽÝ}Š4_éž‚é_98pżicĂœtýˆ†éÚ{üš¸á<3KfÂÚ ófŤƒóއŁßO¸'yĺłś?gv•œP`NCźĂ} DÇŔj“4¤‰–áüěő3{{ŕ<áď} ÷ĒčÚęň$E›ôč Ó^łpr÷”ăšç@ČaΊđ\œ5…ĘͅšÓ}ĹeŒŚÔ_E˙9eŸ%úŢű÷Ý÷j˝ě•ď“>—ŰqޚĚ+ç7Ažm€ŐŚE “´¸ć$Mnu‘cOëgÝÓBŚĘ&MN?łyf(ƒ Ž„?ËN[şŻ&§ŸŚĎćňăŞÔ^&řqÁçDbĽEąr…€ÇDA~{č'üě)ޓ&!PąOˆ|Ŕˆc…>Á{›Č§\֐Ęk,˝W ˛e3‹‰bQPŰg€áŔ˘ÓćŕÍŻš5­ ÚBe°ÔEâ— ~Ja ~ QŸoőĹ `{cB p_âĎpţ˜"˘i5 ~bqN‹ťO<˘ §i~ĂžŽšú´ €ŔAř°dLM÷Őćú­:ýřiW‰{JgWˆBĄO0?‰Ňz…"Ÿ´aÚŻŰ ňiü>€Î "˜1‘Ođ9NÇՔžk˘KĎ,N@aů†ýčöÓřúŔń‚đ`™1‘Oń>Ńő'tňąYÁçpzLüŁ‘ĐgZZ/›—OŚugŸŚ4_ár8ßD™śt_I$ôirüiM6č§iý–ýmMMp üXEš\â´`öŮľ‹ź˜'Hő—iLëU‘Ň@ř“LüÄbÄ?ç›ĂˆjBWž‘N› Ç?3‰~jť €řŔ€đ` iL÷5Ĺő§–ÚËĘŮŞŽEŘă ÷ŸŘŐ'œ.śťţĎ?ś]Ťß5¤ü Iœ+ÚŇiMú<ćřăÜ̂ŸIŸ[E?M" I¤ißŕˆ üXvBwŸŚůhŒÄ>Ą#sÄ?áç˘ŢXd.?ĄťO;ţŰM§8ýL " XNćż49ěÄócqO1Ż)Xc™D?ľm5ŐݰŻńţœ–6qOKšŇő'\/ţě\•lšř§Éѧ˜_Śô*ś {â_6ż\Ÿ4_ĐD,˜irŐ çǂ{OŸŹqyÓţ…ĺâeó|G€C€đ`IiKé5qššŽAěÓ&ţ ?A˝5ǟpÚšVPY%)ž`ó¤üjű”Ëš~âé óZ§ŰöŁeŸIó'€U!÷Ô5ńüyĹ?VMQWéŘ ~PXĆMHőĺ\łČ§Ń Î-™dŠŰNŁëÎ$PXfšČg’č'Ţßy]ŽÂ€eašŤOCŮą”_SÄ?bĚŮ'Žłř €jó"áOÚ"üiů ü8ŸLqΉ§“!NÓü&QPŤPTn’čgZŠŻŠFGáŔ*Šƒ!ţńŤšşŰO,ôiŰŞ‰€,(:Éń§-ř‰řŕ|1A 3ŐńÇÍ(:„ŔgnѢ8Eţ,9­Ž?MeZÄ?Â×Đ4ĎęČ+5‰}l~Pgţ1MÚo„?ç‹I‚™hŮ4!P›hLđ3çźĆm¸IťN„?ËDčč3K™ŕó$ńOé Wĺ\ă<×RW(5ĄO(*ŚŰ‚ź€`eIć˙4şý„ó§šóLsů™ĽŽh?fşwq€cáŔ 0ćúsńĎ$G p›ÁśĆęô+4ťţä“-ž`?ŕÓrH&ˆ&:˙„Ëg5̟WôĂ˝ N„?ËF‹ëϑÄ?a=ĹűĚBŸŚeMŰ÷•ś{âr˘ížpH÷ŸĂŚŽvD?Üçŕ˜Ař°BJü#„@m ĆeQÝą'möÄű9i)Î`š˜WÓP~V d1ĎQP­Ü„팕8aţ,#-Ž?ů˘)â¤ájKÓ5“(ŞťŃíÇšzĘŻpżŇiÂŠçЉšŚesŠt& ~‚ĎÉ‘Ď\˘îcp üXV+ţ‰Ś[ݢĎa¸2mÝĽ n?ÁźśTeSÁő`58Źf^ןhz&מYĘ7L#ú€łáŔŠ2ŻřGĚ"ňĺƒíL“â$MĽ Žt1S€sÇQœĆ֟75Ř,ëšĹŤ'€ef‚ëOž8™ě¸MO5LÇĄÎtÎý –âępž™UDÓRn^ŃÎQ?ëŒp'€eg^ń­#ćŮň)ĚdÂ~ÎäîÓT?b €Ő䐢˜š\€ćušľ‡č΄?ŤŔaÄ?M뾀ňY ˘Ÿ„@ľÍšCBŕBŽ˜ţ+Ÿ5[9D?°Č üXf˙ˆŠî?áź`ţ˜(.ge tŔIsHŃM2‡°çЂŸIu3V‰)⟼ČPžpâü8čŮ*Ş" ÇÇ ÷”dNQϤ:“YďaÜëŕAř°j49ř4k…uÄő49ü¸ö`h:i]€câHiˇŚŹ‹ŕ„?ŤĘ î?yą  ŤÇ˜äÔP&9d4aż`őHŽC°€ ü8ŻRT­>9š—`‡@+ĚŔ‰¤‰ä ÂXHţ­ƒSĺ0Ž>‡¨`QI¸o9Ďş“ĺË>ŰŔ9âŮn`ŢXŰpp~Řr‹ ÂhdR4%ý,!ˆ{`Ő@řss”Ŕ)˘!8 ˆw*ţŔŠBŔŕxč8X:ţ,!–„?KȚ€Ľ#MSËC’$ŕ¸Ař°ŕ ňY~šţ†ˆŕ¨ üX0úœâż3B ˜„? ‚ŸóýýŔŹ ü8cü@ ˜„?gÄq ~-Ç%ŘAÓ@řpĘU ƒŔgąiűűVŔƒÚ@řpŠV´ƒŘgů ˙†‡ńh}Ä?‚đŕ”˜WźC*°Ĺä8Ä7‡!ţ€„?§Ŕ<˘›łÁdfý˝gčĚ›Ę ńN˜Y…"Ç]Ζřď4MŹ3ń„? Ŕ41ĎaĹ>ˆ„N–yÓtͲ˘˜„?'Č,›IeŽş>œ,“~űiâžIef˙ „?'ÄQD;'ĺ§Ç,?“@ˆ`Έ&ńÎýű÷-šˇ/ł pÚĘiţ•+WjóöŔ$ţœ‡uěišÔT`p:4ý-ڜ|š–M:&ŚĽ Cp>AřpĘ4 <žţ˙ţÁ÷żĎÁůĺo~Úż?ţřcľůˆ{ ‰Ž€ce^‡\{ ç'˜„?KŠžˆăĽK€łˇ8.šŇ{MJůE:0€ó€ä¨<œ'ŕ™T?m>€Ĺ nł!‚Xꃘ&đ`É9‰Ž€Ś:y°8:‹ÄĄÍpú ęă1–łč ˇÉ%Ŕ|,K€'ŢOÚ}'ËÜn?EűěźśŇÚÚŤmż›Í_ĆvmÓąAűš@ř°$,ęčp6ÚYöݸĚĎaۀłˆ~’âŐI:yť,˙ϝYŤÓ6lMÄ3HekóÂeŤâŹtXą"!€ó€gŃRŔ"ąßOݏýúŽű…ěťîý@ČGŻvÝo{ý†űŹ˝ŕ6Ö¸NŔépÜm¸yę;é6Y۞Ѐy Ý瑹Ý}"teět:n­ťćşkŮŤ+ńOÇjs§NœJ˝P\g‹(-ć•ď3źň˘ÍďËֆ=|` ]pö üXP–qTĘ2[ç@çŸÁ˝÷˝ďuűąë}ôˇ @óNŽŁśáŽŁ 8ŠŽ“l§-bű•v)ŔbBť `œYÜjÔśévťŽ×ëšő ˙.!ć§n”kdâu“ňŽţŠŹ4ޓ‰úş@'­OíS[Ú­†euáO2ś[I1‘„3]ńeŻ‘Ä=Ł‘ŸśĎĺ{üš(‹‚‘PЃ¸Úu‹wZ€clh,7˙á?ü¸űăËÝ`0pëëëîďý˝żăŢúÖĎp‹ĆÁ0u?űÁ}÷îçÜý˝‘ďLŘëˇ_ComÜßű÷ú×ÜŐ͎űřÇ×ݧź1ë(ír­€ăá0í¸Ónű7ˇžY~_ÚŹ'í6€Łc)žşŽül^Řt›^¤Ťă(•b]aKÁL üI‚˙%ĺ{łđ§řD^>iZ }R›N‹biŁ€Šö^”ž]í=)öťSŚ5ËŢ%pęXzł$ßx!Ţ1AO)î)އáÚť^Y?‡ŢGĽHëjű“Ą]°˜ üXVńáĐ8÷ďßwżëw˝mbuŢ<đŔ ÷ř㏻ˇžőÓÝç|ÎŰÜĂ?ěŕôů‡˙đťďţîո썞ę+łżĺgN\ggÇ˝ímŸçöööƖéoü#?ňďÝ"ňmßö^ô#ܡűw.œđç˝/őÝ7ţÔ=w'M4 uDüú‹}˙ůż|xßýŔ/mť/yëU÷–Gzŕ(Ěۖ[´ś_ź?çŠýśěß}–öe÷ţĚĎü¤;N>űł˙;w÷î˝rúËżüo¸ß˙ű?φĎýÜĎw/żüJ9ýe_öĽîż˙ď˙ ;kţŘűB÷Ţ÷žŻuš\ÔÎ{Ík^ă>íÓ>Ő}Ţç}Ž{ňÉ'ËçďľČĐnhŚÍág˘{cíCRŠ]$¸G^Äbëw ĄŒD3Nâ§;I§ŮË×T*‚L íKZšůT"WwĎqÁçŔYgˆpJ7‰mBq‘śí˙+„>ĹţJÔä…MÚw›^[Ëż[őƒű2žÍQ úQ?‡˝$óG¨ö€ř¸8- iíKmű… YĺCîé§ßœľy~‡űÝżűłüŮţj˙7ő~á‚˙ŹyZćĹL…¨ciŔŠoa"˘¤“×Ű)܃ֺkĽđGے RżŸ—)€$˜qçŤďö¨Üťwß}őWűůŸ˙…ŹóoűżŹ´ë„?gŔi<4ÖňZϰ={@>é¸˙ŒŁt^O<‘Ű˙ŤƒáΝ;Ţéç•W^­•ű˙ŕşO˙ôßáÓŔŮŁÎŞűąŸp_đŸß¸üöíŰîç~îżşeä‰'wßôM˙?ˇˆ(‡řźvÂł ‘FŞű3žŢtł2Kë¸ĘœǑâjQ‚!§Ńž\&!{ŘžlC58:űąă~óoţMţłŽ‘{÷îš_ţĺ_qĎ=÷|­Üżř˙ҡĺëoý-îź@ť `~Śľ­,e•D4[;;n{{ÇŰ-„55áĎúşť°šé.^źč._šěŽ\šęŽ^˝ę0]ĘćI@#áLŘo>LĺUMťŇÝ'wűy’ś­žíËÖ֖ť{÷Žé޸MďE^ř¤Ë „?rüÉÚ)Ú˙őJ¸¤ďĄýžt钻¨WöYŠĽ$ęî@&dJ,Ľ™ĎVľÝ4żťféÄ:^äEGJ-Vˆ–*ď݆…řǝ)‹Ô—úПúÉţýŕ ďnŢźéžţ˙7 ‘űľ“IüŤí:€Ĺ‡ž>€Sć¤FqëÁ_Zqîçyśg˝śŽČ.š{m{ŕÜüƒŔ}Ćg|zmž:qţÉ?ů§îťżű_Őć}˙÷˙€űÓúOšóˆŽý:&ϊ7żůMîýď˙@9ýď˙ýŰ[…??úŁ?VZl‹˙řóéŕhźűůwRźű…:`fŽ*č9m YÚ]Ëěč3o›÷¨ŰZô߼Š} ‡CíĎI$~Űoű­>-oĚw}×÷¸ôţImŢżúW˙ú\ hˇ´s˜6žwüÜAżďśśˇÝ+ŻžęnÝşUkśÝţÁžލnݡÔ"Ḁ́˗ݵk×܍7܃>čĘ^Ăěł'kÓôJ1pRě[ľĹ6я-ËË~I‰îŢš›í×M÷Ę+ݏWł}ÔŔ(íŁwý‘+Qvo5öY‚œě• —zšëĎĆF%`ĘžËĺ+WźxI/M_2P!dęÎ>NÝ Č^áď™ŰJ‹žŚ"{Y‘V-w3JkżÎâpÚmŇŻůšŻk_Jŕő#?ňÜ×}Ý×{wCCó>ó3§{ŰŰ~ˇƒŐ€vŔâƒđŕ9Nя=P[îi{ˇ‡î˝ý}÷ęÍ[îÖÝ-ˇłß/ň[§ĽU­Ç|qţ˙úĺ îÁ×ÜőŹ#ŔŠŠÜöiŁgŽëĄ÷Ÿv$şú‹ń˙ă~ň'ʏž14z¸ ý–˛Ňýˇ˙ößš÷źç˝îĽ—^ňóyä? ůó?˙÷ů Ă´ßű§ú?ůźÜżň+ďôG{{űîęŐ+îőŻ˝űżăS|Ş1kC9'ýěĎţ÷áŘŰüŞ“ćńÇsżé7ýF÷ű˙çšOř„o\÷ł?űżswďŢ+§żů›˙YśÝךoüĆoöżƒ~Ďďůl?bH#‡ţÝżű÷eٸáŢţöאůsîĎť˙ň_~žœÖ¨ěĂ8ÚźéMoôVw˛N,!g&ýÖúcŢţöŠMk›“„?ßű˝ßç]ŒÇ{Ôýŕ~˙X9Ÿ˙ů¨6ďťžë;Ü[ŢňôXŮĂţ=żôKżĚýřżŁœţ}żďsłßüqM|đƒr˙Ç˙ńoÝ/üÂs/żü˛ďčšvíŞű˜y‹űŹĎú]îs?÷sŽŐŢůîîń.:şŕü1Ťč'.wR:M)ŤV] ÔĆq:­b[öCúpyoW;ggg×=üđC}*ťŻ˙Ţěţţ™ÇroWý¨}t3{nQ{NÁ¤?ő§ţ„JÎĂŻţęť}ôżýˇ_Ěöůe˙÷yčĄ}ĘRľE>íÓ~Găzqűëˇ˙ößćžážÎ˝ă?éžýŰżÓ˝ď}ď÷iJžďűžÇˇKçáýą˙‡űŻ˙őçÝü˙М÷3?ółî°Ś}VmfƒvŔlĚÓţ ˙IHł˝˝ívśw˛űŐnُ× źŁŽú%jŮŘŘô"™{YŸËnv_†Ţ §ˇŚt_=×ít˝)Ž^ůŽ¤ĺťŠ^ęƒ CAPę˙ÉíǝݿŸőGžę^|ńE÷ÂóĎű~9[ďdűŮR|•X[*ůŮ>ĺW.ŕé*íWÖŠô^řČíG‚}'ői\3ŁÂh}]iŔ$Z+@Ú+)~ô/-ž‹i[ĂQŢך €Bβýˇh}Šú;¨oéS>ĺ“Ý~á/űËÄ?űg˙Ü÷ăľíďqľß>çsŢćţÎßůß|ťő›żů[ÝţĎ?›őÝÝô}S÷qëţČůżťOýÔOq“ĐßZNE?ôCo÷űuëÖmßÎzôŃGźČ[ßQƒ›ˆűĐžň+˙Ž˙Ţ?ó3˙Ů}çw~—Żosj§ýŮ?ű%ĽS¤P™ýŻ˙{ç;ßĺŰÜÚŢg}Ögş/ú˘˙§?Ś'qZmvƒvŔâƒđŕ8ŽŽęń–¸Ůź=€ęłrzżďĂuž;pŻŽ]wűk—Ýŕâƒ.˝ř°KČŢŐŻkişĂa*ÁźQ?{p|ľď:ĎŢvkűwݕýŰîɍ÷ćGp=ň°üh{&҃Ăq¤@üӎ:#ä ^|ńĽąrtüżńĺľNzC˘ ˝äLó)ŸňŰýƒđőë×ÇĘiäŐ_ýŤ_ćÇëżí_z˙śoű÷w˙îßj|ř–čHŢ Ž„č•KŽ^ß÷}˙ťűŕ÷ťżţ×˙ęTçY@ɗü9ż˙1 l„A íŸD8M#¨őűüüĎ˙ˇąőƒžË'ňow?üĂ?ę§uüJŕŁňýÍ$ś1Ôqńş×˝ÖÇń÷œF“+•Ąŕ[z}ëˇ~ťďôĐą|Tžš5pĎ޸Ărq=qOŢXsď}Šß\˙́ßĆk y“™Öśk[nóE0đqÜ@“ÚWZŚvœ‚'qšĂЁćYŃhEͳeu<ęŢ.§š˜~ô9˙Ň˝])A˙Á?řJ/ň= zŚřÇ˙řëĆśŁ€ÚŠ?őS˙1 Ú|ăLué\R]ßó=ß;śLí1˝ÔnSń+žâoÍ$(R›öoý­żëŽľCáÚÉ ~6ľÇ§íÓaÚŮgŐf´Ű꛸ťÄgŽ>/\đ9/lć)Ŕ”j+ť_ěf}…;YżŠxvź8hŰííîš4ť÷zk^@#çœ /şž‚ňtŐ[ZüW |Šo~ŤZ˙¤úqÔĄSý<÷Üsîĺ—^ňâ$-ďJxSqJ/žŃ÷Şśí]v†ĂŇEŮ~;­§6Ź€ô˝˝“ŃŐŤţžzíÚőěýZ!şěÝ6| °ľ1÷Ÿ<ŗĽ+\€ŠÁ’ůO\¤óŞĂÂĺhTěŻ+Ë,gŮ.•ů/ýĽżŕţćßüßĘyĎ<óŹŔ(rČqˇßTßłĎ~Ôý‰?ń§ÜíŰwĘůę›úéŸţ˙úâ‹ÜŸűsŚq}ľžěËţ—ą>4ŐkýŞçüá?ü?řAšÓúĂĺ‚ôßńîkżöëkóŐ÷g˙ěŸwßđ _ë~ËoůÍęy|ˆ~łoűśáżżD6 4<­6{mżh×,ǛżĆ8Ž{Őą[<ŹďŁyŢűšřšwťo}çm÷mŻ<â~ę5ŸęžyËg¸űO~˘Ű{ř î`ăjö°Ÿ¸ÝŰűnç•lÝWłýWł÷›;nďćś˙ź­yٲÝ[{no+ëHÖÝţ•GÜî#oqŻžé“Ý;_˙îűÝÇšo~Ç}×Ď?ă~úŐ?Ŕkl?´:ŽďÍčo˘Ž™ý=žř‹˙dŁč'FكUV 1ĺŻüőF‘HĚÖÖś/+WĄ ‹ ‰ƒMüŔüŕXڃ&ţĺżüîFяв`C~ěÇ~˘ąŹć›#–Đč/ź9 :Ţc‘Œž{ĚŰßţĂľi,ŠsžŸ$Gý{ÎÂ_űk˙ßFŃOĚsĎ=ďţ̟ů[˙–ł˛ßOÝ×ţŘ]ˇŰ?Üőb-kńüĽßsÝýľĎšî~ă“Í#žT÷×ýř]ż-€6Ž"úą6^&ü9ŘŰqű;÷ýkoű^íľťuwě—i{5­ŤměnůíjDśašöł>Ş{žßg‘^GŮ˙yÖYtoo ÄčŢţÇ˙řŸ:t ÓţĎżyâv^~ů÷ĺ_ţˇj)SŰĐ댠QŒÚE ´č˜Ÿ„Ü'•Şâ¸h žÍ{źĽ}VmfÚm'ƒünőݸ~Ý=úČ#îŠ'ŸtŻ{ÝëźťŻŢŸ|â /Pj// ęt|Űs{{Ë÷#ÉůGŸŠ´[iáäĺ=i•ĆŤlĺ&⑨žîëࠟőamť;wďzᏜ~nŢźéű tO—HéB‘ŞËœzŽ^šęŽ\˝â‰Ż靎*…—^—.ůÁ‡ÝŽß ˙=˛:ĺ„'QŃGŸ{Î}ä#É^vĎ<óŒo§hŰZ~˙ţý˛/UŽHÖˇŞ”ÚW[Ś×ţţë¨}>Ę4ޏgŻlŽ˛ďĄďzŘv檣vĂĽKkó~ögnŹÜqˇßtLüĺżüĽ5ŃO̡|ˡ{Wě_ôE˙ŻŠ}hú{K¤3‹8\ŸúO›őě%1ˇ„Ůąč'ä…^ĚÚĂťqŮiľŮ ÚuËZ€ä¨>eWÖÁŤzô0Ş ý/źď÷Ąî#nűąßŕÜë:n°Ÿ=4dŸˇöľBŢ ĐíyÜľőŽëô6źăwsoô!ˇZ˝FYżú(‹ű Šě¸¤°ąMťënó!ˇ{ý!÷J/{xůč=÷Đ+ďrŸđŔš{óëŸ*FĎ9ˇ`ŠóĎ8ę¨ř…_řĹÚź¸ăţďţÝżWsJá¤<ÚâÇü'źŕÇШŻüĘŕ]^ úŐCiČýŁďdŃh) ţšŻůÚňAQÔßřß”žĘOëýęŻţGľő•^ě˙ń/ň)d7Ťú0ľÁżů7ߟ-˙B÷š×źĆľaű­‘A˛ĂŐ1˘ôWBÇĘç}ŢďÍG˙˙˛üOüÄ;Ü_ýŤiě8úŃýąÚôďţݟ5& šuŠé÷U§™F>đş÷ž÷}ľT[qš/‰…^xáwőď9 ˛Uţɟüľyú[Á|žťvíšw;ŇČt Řéúő÷ţŢWeŻop‡ĺÇ~}×ÝŢ9źőďüćKî ­šýě÷ܝö@â­í‘űń÷ěşßű.:€y™$ú @lmÝww>ňnw÷ýżŕv_ůK‡GQϋڇ—˙wă~—ťtăa?ŠVAţ&–=ŐWŰßdgŁYË.s[V÷vĽ7yĂ^ďţŕü>0÷KżôËîđ˙,ďíjýĎ˙óßôéFçiW}řĂqßú­ßQ›§ßíł?űwšßř?É_´ľgŚĄ‘×?őS?]ŤGiT—žQ4Âü[žĺŰü3”ůëżţŸeÁŚżÜZ§‰Ą€|ë[?Ă=đŔînŔźxńpmÇ8ˆ¤ýRvVŽÚÎ>Ť63í6€Ă1K?˘ŽßŢé'ű,1Œ„4&D‘¨@÷Ž{Ůő[Šą:…›oroW¸íűéŃ(wŸŹ˛lU‚–ą÷Bý“ĺŇ G‚˜~˙Ŕmoď¸{Ů}óNÖćUťW•“űNĺŔÓËxÔY™4˙2ŐVš§5î?z ô^¤2Ë;űŢÍH÷{Ÿöl'ŸçEMĂŹÜđ’OuśÖ[óŰ,~źŤO’;˙?Őňđo‘ďäh”úÔ¤Ř?[ŻŹď„Y†śŚţś‡n‡ę3 9‰ö›őO}ň'˙ß|¨ţţ4+}VČw~çwťO˙ôOŤÍűŠŻřű^dcH¸ôĹ_ü…>—Ž!ľľĎvďs(8Ś’BM*pŻŠŽ˘f•!yÉŃMqô>äö¨d4ĄŔ‘c¨>@ĆáÝä 6R¸ŠŽ<.ƒUö0Ś ڰČđŤ`ڟOáâä+BŢňAäëŸg–˙ ATDVë UˇđűÜyĽ3›öŠVmŢAi8fw!Aƒř'] §TÇÝŰĹ?¸&°˙_˝z-ýńâdŐɢEŃQˇ°ą‹„ ů$Ď?űŮ/9IŐŔ.öśZD´eË֘u ôWżúűo$ťˇßţkúöˇżÇ#ÇFŽŒš Q ëŰšs'Ş%uÇżľ…`cÌf{ŢE‹ÎçĎł>Îľk×Ó9ç,˘dŕłđĂţ€ku'⢋.¤ťďţ›ý]ŤŞ:ĚIýäÉ'ŰËTUUqŇë%Ú F°ÁBőĆŃĄĐGŸœO§ť y”YCů…Ž Ł×3¸v(ćÂŹ?˙ůܐP.GĹĽ őÇ++GQ{xgg ľ—űčźIfĂÁƒ+ëép}jUj[ŇĐ B"Úë ƒßNܓޏŚC+ĽĆý[čx śPÝÎőÔ°wőŸöuď>‘ĘËűň=.“΋L;Ľr™ś”÷Ę4FÍĽX ńń|îs7Ůbćř{űI'Mâ{;â{pŃE¨xf&}ó›ßą—AIˆE.šä"ʔgžyś•“Ďwżű­˜řěşëŽárŻV'űŒr˘NC菁O7Üp“-Ř~ěą'Ôq–;F’XňˇżýeĘe2#š_}őő˜yˆ ŰB6âěă3KÜ&‚Đyč2YĎčű4ĐÂÜđ`ьš[ŕ}~Ë=ÇYöĘmĹ/FJᏽ!Óů‡L1‹sÔ˝' QłĺŢŔeŚx´@œT }Řśj#É4ŢÔD¸ˇiˇ˙XesqL!őTu‘Z5?Čó1a-NŇ✗[oŰĽöŰzÂkŸěR`楲Čĺ˙pÉ/ľXëó¸Í‚ 2˜ŃB'‡ąŸwfüvőŐWŇמv›ý7D7ˇŢúZž|Ľ=íRřĚč8 íŞ/żźŘ~íŮţóYd­™1c:BDi- âćTÂŹ˙îť˙DÇăż/¸ŕ<Ý<účă1Ë}ă_cÁŽíuˇÜňĽ˜ekáOWĆěN$ŽA„îƒĄčˆčG'Ž°Â­RÉŃň5´Čt ôQs ň™ďނ|ňyÉE(¤o#śçŘ.* 7Piž›ĘŠ Tr]@îţh€§œRďs…öSÍţzŞm PmŘM…ƒČ0†ü#ČÓż€…@-*@o‚ťÇOU啴´ ’Ö}°•&;čäń#Y„dS{’ŢŢ(ţšíśŻg´ÜŘącháÂ3íżŸ{.śÄTqq}á ­ëUń‹ŸW,ĎŔ Ă{?ó™řyźSj`/^üZĚśĐřÇ?ţž×.żüŁ” łqÉgwHÚR‹ŕd˘€úáččŔ „PÎN $đΒ#GŽŕF„ö˘żŰgž9/FřóúëKčK_ú‚ýÜÉÔŠ§p#—s?:“Ž^Ďt Ą%8œ|ůË_´E?loîÜ9|ÎƍŤŚqÔŻ_9ľ—ƒľéË}$uÄo˜SʍuŤwľĐ’җÉŘ_Óžm ‚ĐťI˙éÎ.5P[C–>@͇wQŽ čĐŰSË s(2éLŽAŃXŻ;‹œ´5>ËĽňm2%[6S÷Ÿ\‰e_|ńĺ´ËÜ|ógů1Ů˝ÝٙŕƒŽ§ł FméDˆw „˜:^`‚¸é+_šľULJ“ř}8p]qĹÇZ-‡Î3ŚŮN’Čľđ<•řüż˙ű;mýüóŸ÷łŤ"ŔőŻ­­cǢ Ţkľ,:ĽÚB6âěă3KÜ&‚Đš¸bý÷ Äpř=Ç=“vځXĆc‰} ÍöÂ÷ŹĂ´šąœ}â?VŹd‹qČářcpy,ÓI(Ŕ˘U bămŞőęýČSD?Z¸/9˙ÖĎc݅ k[a[üƒŘ•'Kčƒ{!Ä9úžŚˇĹîBdś—xźž˜m9}}xżÜćňú˝F$'ňöŮů'l˝!âëŠř‡¸T›ç€ĆΊßpîoşéĆVó &w 𚀠ąˆoW]¸đĚяńDÔş]uăĆM\ĆŽŠ‰@; ýhG;…?Ú•Ń DF%%ĹTWWoĎCŠéʘ݉Äu‚ ‚Đ}Ꮰd™övrh—ŘŰcdĚë;khď€S(<Îc ~Ž4łŹˇ0Ÿ`ŇÜž“hóbčŃŔňžäĎSÉëĐbľŚbNL÷ qŘę+:EBĚ#f";9F˛ŒäżŸúŰÜ'•L7Rő{oÓĄę&:V:’ü§-"—ݐZę#¨o˘`هBÇҊźąôţîƒtrč:qÔP.÷ƒmˇÇýGœZ3hĐ@úÍo~ɍ$šxgŒ ITŚŁ¨¨H˝6…–.}˞[YÍé§Ďäő†ŹëŽĎœZ`K‹¸ÁœpÂxnüϤŸ_XůŽĺĘPŠ  55ľ1ËĽÂŕxҁ¤ŐىŇfˇÝí$Š/YĐŢ$WŁżßgŸ˝ˆnżýöß…}ŕŔAިÓ¨ —užˇłÉöőŒ'ţsd”cK>ł]Ĺŕ2}őœ>´~O€ţńvéÓýéŮ%T^äf[â{—Őg´.ůő!čß}ńÜÜBÇ6ż•S˘Ÿ(Ől~“Őű)<ýRnœG#6:hœ Ž”Ě:Ţ´Ľ\Y:O&qjw‹eÝۓ‰>Î8cvL'ÂÖ­[Š-덅H8ÓŚĆq­S¸N)ö (cgŮ[€}NÖqÔˇoŸ˜r ™rÇwŚ]ćŸ¸ŽŚOŸFĄ˝qvWÇĚ鐸M!J{%YxbDE.úš^ŸnDťÚ=–@Ľ¨°ˆŠŠ‹¨° K`áu-Z‰ĺřc—ôr8ýÓ(ś$oŰ˙ŔůĎ͒d^n›Ä6œ˘'.Gš,ç¤_‹n“bŽSˇgę”ˆaMÁQˆSšÇkš#ÁÝÚŹŸÔń"ĆŐűçhäR§3l‰…´ ŰYĎĂĄ0ż$—OÍKv|A.ǚ8÷NœƒÄ:+~Ă łDí[Æ k5Ď)”Žß8¤'ű>ĆǤˆÇ’ ͇°Ý ÎKüŔ=€öt§đÇé”Ů•1{[¸NArţBioÇ>U4âBĹżyÇ>ZSv*5 KÍ5*ĺŽk"—ĎOyĽů0ŮĄČś-äÝň://˘‚a}9I@ q’ƒŇŇ~žo¤i HšÖčŒTEÉŠşş:nt/ďƒ;őTľěď´?(埴€\ý ( âö@]3\,DoŠi×ćUtć¨;Đ`”j{j‹ř' ŢQŞ ×ŐIü(ŠŠŠ¤ëŚŹŽŽáˇLÄţˆ×g8Iżbű-ďÚ՘Ń>ƒL\Žö9™ÄŸmçŁĐŻżţÔ˛g/\Řľ1łÄm‚ ł—§8ăÄph3,Tmr° b8Šs[—ý‚đÇ㶅/ZŘăĐ÷˜óŠu 0ŰőB#‚->ršôDoÔUˆbă( pôč’YÖ2f9ŽhůądÇŽÝ´óD?Úm(¤ćCŕQŁîů^|^ˆ›Źr^ęý^?ľŠuâăůˆ+b  Gˆ…#aŐ kşÖ1ăüňţ÷âöĚÇcc4ÄsšÎŠß’ľ§koWÍÖţtÖő滛=‰ëAĄű ÂAČíý 9…;ÔüŻďiĄ=Ă氘&t¤‰\*-(/ C%ąáw—PYŐF6 ĺŔŁQ‡NôgaN˛@ż-ű…uh`vFŒnď#œˆöěŮKEŞ‘x’çőŃŽf•ĚN8‹Š†Ś–˘`c›˝´{řiôDC M9¸†ĆmŚňrsäE{JDô†d îz´óŠďĐÚľëb^‡mźč'Ű|ôŁ—˛ jm/[ö6_óxp=0RxŐŞŐ\7űŞŤŽ°çăßś%ń 1éä“'ńȔcÇŞ)›ŕł ąÍ“O>mĎCŠ-œSŒdv~ţçĚ9˝U­ńŽ€Ýń‚œç#lÚăŞÓQ:r=ÓŃUÎEńœŚ R54l=¤˝]O×Í*Ś9cňŠĐ碉CĚŃSĎż×H÷)SŚĚ#A„Ž +M‡EƒZjŤ(ÔTGšN¨ą†.˝Ÿę†N Ćą3ŠtČŰ=2žîŁĽŰgçčr=:>Y<š.N=Ţqěo~ó _ž‘Ѳšˇ;;łM{ĹvéHetř•—÷ĺÎĂ\pž]R˘­d+Îîę˜Yâ6A„ăƒ.ý…8F—řr[ĺś"V)08Ŕń'ż ŸÝx´Đ†‡ GŠ/ťĘWá~Œ-ÉaŰÚ°ÇÝŞŒ—ŢOíH„ ńŚvJ$žqţ…í9]B–ëOł%ţčG ‚ęęjŮyűĄ5_­ĚŤćš\nÇ1ÇĆöq‘#FTsÜV90#l¨íÂq@!>׺äRo˙ŕœÇ‹”ÇŒm?Ďĺř­­8K˜uÇ+f—¸NAş"ü„,ĐŢŔ#Ŕ1â@ŐQzĂ{"Ő. ć#Ží/) Ż;HĄ7Ÿ˘ŠŔAŘżœňF ć‘••ŁZ)÷ă÷!ޡ˝Çƒ÷#ůFă/&” ‚ľr1‹™ >8p _Ă+Żź6ëÂG$g'Ć;ďŹćÇ7ß\Újšl‚ΓŸ˙üWvăĂşuëiذĄ1˜ţyÔ^’5"dÚ¸ĐŢ뙎řĎօƶÎvý9kB˝şš‰Ž6$%„×Na6ěTŻi L ń‚ mw)Ą÷’¨“@ŁG<s_ôă¤qď&žö!oÉň÷%O^ať~뻋S‹}ňň)ݤœJ‡ŽWĎ ¸óB—QíÉÎ?ń÷öƒ“ßŰăăÍ>}Ę Ăs‰NH§ëĎŢ˝{.‹sŸhTx˛}ž9s:ýáˇÓńŕăż–žň•[Š3ČfœÝ•1łÄm‚ ǧÓâ=Ŕ÷Uţ[˝†ż1¸ŒËqy*ŤœŖî2Ë|EĹ?ŃçF̲¤KƒĹ[ŮeťÜ1ĺťô~z­ýĚ/(`!kÚ/ě“.DZŒ|¤wÁ,÷v 0YŸ†ĆF˙´´l—užŸňňóXđăńşMˇ!O´”ŕü"‡đÇŢśÝÖęć9Ř>J‹…Tťg(ąĎ ˜’CO1K}}ě}|ćĚöó\Šß€ÓÜrËÍtĂ Ÿ˘\ĽŤböx$ŽA„îƒĄƒíýŔA§ŞŞŠśď?L+úM§úf…Áĺ' űú)°a-őۡ‚ú÷-Ľ’Ša4xp9"ŚN°á°đÍf§C˛Ž €ű‰O¤qăĆŇîÝ{hϞ=œ84V˝Mn[FysŻŚˆŤ€uMTČKŰGN§Ć}[hUóčˆ‡ĐŃŒ^âüŁšőÖ/Đňĺ+í2M°ä˙ӟîŚoű1ËA„őúëoŘŻYł–—ŐTÔ×^ťv}Ě<\żx°=¸: 8€&O>™'€ó˙Ŕ˙Ś_˙úwö˛“lŘđ͛7—–,y#f=ŸüäuôĹ/ŢŇjýhhé N9e >Œ?ű­5k˘ÎIué¨÷LÁ(šyóÎŕŇ ‚¸ĽKßrź^ÄŁź3%ž´ÄѣǸÜܡœ@ź“ í˝žéŔçÎ >s%*vă7óëcǎáéÜsĎaW¤öçsŃ­ ËčçĎWSS0ůą!2čŽ%ľĘĚQ˜ Ô6ž¤ś‘ç•2ƒ‚ ÄŇŢxO߲›Š;nŹćŠĺ ő*ŕşY6vő›t&•őíkťŸôT÷Ęř{{CC#;PNzjŤe—,y3ćďqăĆQ[€HzëÖcÖ÷ŮĎŢŘjšĺËW´* ćdôčʘżĄcŻ­ĽŽslĆŮ]3KÜ&‚Đľ J|y,‘—˘ŇÂËՐŐ#ĘlšĚĈ~2ţ8?F\ůŻxâE?Úé˘ŸŐśRRRÂb$ě/—cA’;ĺń˛đ'l4D €GLpýA;îpWG{Ęr5Y‚ ‹|ět䵝‡ŹCŒűÄ9é}7˙tEĹ?áĂjŰĄ ob ,„k@Ô%ĽŃs ýĹ/~3NňSŚLś˙Îľř nDÎŘÖYú4éʘ݉Äu‚ ‚Đ}č]˛sAČŽ;F˘uŰвÁ3ŠŚÁEĄŚ&ňb„‹JȟýM¨Ű@Ç âÎú ćsяWł;“Î#Ao´ŃâSoË9z „§Ÿ>“FAĘýTąôod|°ŠŠpƒBăáf:0h=w¤”… ŕDź­´ˇĂ­;‚DîźóΉ™÷řăOŇśmŰcćĹťÉ áťăŽ;[­óĐč‘콡ßţşúęÓg, ~ôJş˙ţc–Ĺu?묭֫ˏŐÔÔĆĚ2dHŤeQR ŸůÎââ‹/´ŸŁŃŕďż/ćs†ă팆”űŇŕ3 ń•fáÂmMN<¸6‡ÝöĄC‡čĎž;ĺz:z=Ӂߢř}…cFÓ9yíľ×Ů Ľ'ž{îúýď˙Řj™ś2˘ÜKĂËÓ_G46üôšjúń3Őt 6L™’éúA4F ˇ'¸7 Ý# ęMoҞĹĽc‡ńýWť7ľZśĨ‰îíżýíď[š žřâË­JҞţš1Çç&ńe šv‚Ÿ˙ü瑘y Ř"3fLg‘Jô=utĎ=÷ľZŰżöÚO˛#Îwžóßź Žgސî|e;ÎîʘYâ6A„ă„&ř-g7ü|ů ßçI=‡łÚôt9*íÓß^I 2…>ÔJđò GLd?OQâ űWáOI •••ń„Réř­ŇMz9źMÁŸżj;…#&8¤`˝Řbš–ćfĂ ÷?ß Ü~(ć\DĚɎ űXđ ‡ŐzŁ‚#v‚ŕČ]őd0ŘđŃG§üúVűÜM1ąNŽĹoçÇb0ߪUŤ[-ˇk×nZ´č<şţúéG?ú =ôĐĂ|mťšlĆěmEâ:AAčČÝT:@{’7ˆ~>Bďě:B[FŸAőUŞ#(˘‚ňŠěŢFƒś-ڞţE4jÔHýčÎx§Ř'›ű”n$NŞ×ô(f”Ă´}űvZż~•Ôm¤í/oŚÂłŽĽ–Z/5m¤CĽƒčŮŚ:;´“#,††śîkoqţšĺ–Ďą“ŒnüGăÂíˇßĄşččŒœ€ă•W^ľç!ůÜ˝{7͟?ĎÄprrîšgÓĐĄŃNŻ×3ňîBh¤€p )ťví˘ťďţ[Ě:ŠŠ šźˆwpůűßďĺŃÄřüb˙_{m ýć7żŁÎä ĎçýÖ"8Ú8AI„Î`öěÓŮ.ˇşşŚŐkmMŞ1 *žüĘ1`46FhŁé7ޤt_ńŽ^Ďt aëSŸú$—9Ó ÓîşëާK/˝„ŐPVě‰'žŠyßi§Mĺ2…ĽŹ 3Í2jŒˇy݅˘‡!{ô&ŃrOĽĺŘ~:đÖČżđÓĂk~|<š*Fíńk˘{űűďoT8Ÿâ˛OčLƒ˜÷™gž‹yâ=” u‚ÎEg\ôČ#ń<Œ¨†¸ý /ŕ2śN1ś ‡Ä;555\Ţ*U™/˝Ď(ąÁł1ąOˆGĐI´Ž‹ ˘㍥ôą]FšBşó•í8ťŤcf‰ŰAş–xg'ÚŃĆm ~ěyÎeR8ţč'fˆuĆ1 Çź4ƒ ľXÂ$”őB›§ńŕţ§~2čˆí@@äď8]€´ČŠ żŽjëęԍ÷1ń?ţń/Ž×0Ą˝ 1ë•W^N]M6cöö q ‚ ä>"ü„vҞdíȑ#ězłtOí5‹ęśp˝çů\ú@UT< zę),üqn'ۂŸLו‰H/_YYIƒ âQŽí;čŔó˘đěOR¤¸5 tT%ôĎyĆÓŮG7ňňí˙ôĐȏ$ňŸ˙źßž÷ć›ËxDŻł¤ŇwžóM]ŔRWóÖ[ËyJ?ßúÖ˙‹™wýőŸ`G–ýűđßHt1úS2>˙ů›šq@HôěłĎŰŻa=Ÿ˙ü­1Ë#9Ĺś÷îÝG>wÓ§ŸÖJä&MšŘĘN8[ QęœsÎfÁ•Œ*ƒĐĽ- Ś=2ţőŻb棑ĂéöôŠO}‚E5ń#Š4˝ž™€ĎćŰo/ąF㌳ńĆ „EřŹfƒICü´rG u“ˇŻŢš B:DÔ}i:¸jwżGyc§˛8"ݞ(FÇ˝âgŮí*žO柃β˙ř9~q‚¸Ë—~đÁúŢ÷~ŔN3ß˙ţwštń§?ýɲ)V_“˘ˆžŃ™”ŒO|â:ZąbĽŠIVŘóžţEž’ńÍo~;s…tç+ŰqvWÇ̡ ‚ Ĺ)˜cXŽ!}QQ‹‘Ŕ!ÜÂ:„/Î÷Ä ~ŇÇźnľo^Ëńq&]⫕'Ĺńé}Œ/Ľ…6ő¨öF´Ů°˜Čăf'8ó@| ńlPM!”ăňzc9:Ž7FôĂB¨HŒJ‹z XoŔrúÁ~h“?ĎßcbÇdíNÎn65j!—×OůĹęKřÜÝ4źŹ€&NœŔľzuؕ?™É>9“׹cÇp ¤ĽK—Qţţ%´š~ĺO8•š6P]q˝K4좪Ş*yÚ‘Do˙@ԃΧ‹ĘŚM›ŮÍřô"IýĂn§•+ߥ§žz†—9xĐŹ} ç $x°|…SP˛ó6xp Š/~MMݞu-e˜–••Ňˆ#hÖŹźžţýűˇz˙מvżŽ¤ď­ŠŠe——“NšD×^{5͜9ƒ~đƒRg˛`Á|*VŸ­úú{0Rş3Á1BÔÇM{kgc$Îď˙[züń'Y܃ňy¨=[^\sœK,§˘Ł×3Đ8†ë~Ůea"ýPsç=řÜ-Xp&]tŃ|\ŮÂçqŃMóJéW/VS(K9’Wýü`Xˇť n} ľNďčăv6"ÜC‘@㻆ß=!ť´'ćąOϢńČ>žŚÎňTm‰GťKěŠ{űýחšt'b‘UŤVŤ˜ň 566ą›!ÜzÎ?˙<.5›ěާˆŇQ’j͚ľtäČQţ]BÇMČę\ĂośƒŃŕ´ D–ƒŕB—Ď~öD ŘŒşFâ`ě3ň 珌9’c¸*öéӇrLÎWśă쮌™%nr‰/%žěM8ýz ‡KÄ,Ś8Ę[iaţŰą’čzěňZ#ţąŐ?ąCŃŇWúó…GnĚbŹ„mxN>şôŚ–`@=Fř>ËÎ<áH´M҈-ćeŽCÍ_ÎĚĺrG…Ü(=f¨ß•fű;Ţk?Úâj”ë௠8€ă ]´haR‘ź“\‹ßwŢ}÷ěl2Yp`DűV0âśí N yóćrÉÔ\pŽĎFĚŢ$Ž„̐řRâKA8ždzGueřš+ƒGW’żőäv<ęÉcÍóÄMx­@p 9‹3!ЎŽŐ*W$\MMœ Ą“;WikGFÒ}ËîýôöĐ9T$Hn— Š *|é/TQVČN,H’ôú;ËĺďĹhRÜ`;rcÍ$AŐǁí-Yň†J˜ŞčƒÂńäž4ƒš×Q^ßpl70ŔB$YmM|{‹ó9—\ňјr Ëüď˙~Ÿ„žÇƒtגڏ4ÂČ"42Œ$es$ÉH˜ă„Ôä[#gť[9ÍÝť÷¨ ȅvC=:\ÎÂqeFwV|™Š“O|ź đůEGţžÍŤéčňÔiš˘ňÁ4üÔ3Š|䉔_RNŸŘžg“@c-5=DˇŹŚ˝ë—PXuţ¤ĹW@'_űţ|­R“°ŒF’řTâV!—čę˜Yâ6!—ř˛}H|Ůśř2Qü˜,vLCęŇÝ;ś}HŮÂy|^uá\ZÖÇj„š VĐ>N#­đÇěŘÓçăȑ#\rhǎí\ŞłşúyÜ*(,ŕmůŐ6]V{$Ę6 čߟ㪲˛2Óő§.Š€ĚýkŚú†zŞŠUq _ťĺůąĽź~->˘dmŘ­?Öé`QXmŁšš…ęëë¨žŽžË•j~^^>•Şc…¸pIGg§ţ ŚcÔč1üˆÁ]ńÇŚŸÇݧ-ńŠ ´‰ëĄ5_śŢ_šwü~ßlő€›[­őŽ› ë1☠ÇcüDIţNő˙<ž´qü„6ĐVŃ nřąp´ş–Ţ8“Ex”G^ą‹ň_ř3Uô-ŚyóćđH-”IvččČqźÁöÉŽ1ÝNŐ|cH"´űnދEŻżž„hď´qƒ‡ň'FÍGëéČŔQ´d÷ZšŻ–ĹÍÎ5‚Đ^0G7Ži:ťĚ—pü@ĂŔO>ZNookĄ÷÷¨ś9B;Ž¨Ćś`ęßĘ|Ÿ‹*ű{Š$ßÍ5Äa',#‹rŒŒp÷,Ąí Ąî­…™ÍQ~BŰhKüćR#',¸’*g]Ŕ#‡…ÎÁ—_ÄâŞc§Đ¸š—ŃÚÇ˙HGvź—ň=ŠÄ_Ҁ#t7ŽGĚ,q› H|Ů1$žěŘ= vEŤXOBqKŒ&ş&í‚ă,ó]&ńď;úľpâKq‘.ľ•éąXb,ˆxô>b]şÔ—ŽŃđ7>Żůá|ţ‡CÜ>Š÷…#ŚăáM,Ԋý$>&óXź^ÓĹČç3; …BڈJďóx{ŠóĐű¸N˘H|Ů1$ž„ě#ÂAȐś o°(1U__ϟąÇ{"ćs­ÓN›JBĎ sÇĺóv Ńď×ĐцģŽĘ‹ÜôĽ…e4ź\Ÿ\Ł11:‰łĐqĐđ€ ÷WŒ.Ĺ(ĄsH4Rťm¸čä‹>KĂ&Ď%ĄëČ+îC3Žű&­ţĎočŕŤ“.}ŰJÜ*Or!f–¸M8^H|™]$žě)$řD§ˆCČă(3Y— ُuĹXnUę‹˙çj5*ŢE aŚč>AôŁËŠŕ9îqř\ęňaNGˆrŕęƒvP.żšeĘÂĄLbľÄ‚(ƒŠË—¨ďśíľ4ŁC¸…ĎĽ‡IćëZđŁ÷Qˇ BwBâ:Ąˇ#ńev‘řR˛‡|{!ړ€AôƒÚÄ/íŽPĂĐžĹް’ĆĺhÌӍ˛˛2eÇ@G?‰+ŹÜ!@Ú˛e ‹~víÚʼnđUW]I˙ţ÷żiʔSxŮř2[™”óĘtYŔ"ń=ăŒ9,ţŠ^~?Ńy7QĂĄ05Ő{iyÁITŃ´‡ŞŤŤiŕŔmę0‘–ŢÉƍ›v` ńäë_˙/š6í4zhH8˙¤Bž„îlqßÄŁĐšhűaÄ2zŚcdťa~Ěl)My<ńÓđSЇ˞JşŒyÍ]ös‰=…îB.Ç̡ …Ä—]‡Ä—KZ˝\&ó #ÁQŽSŘb8œ~âĂ^§q"™č2†a$tđ‰ßˇVŽ@™¸î¨öNv[PŸżšÚZţBĐŁËzéXÍŮ^Š_ÓSP˝ßEQaÚPuš]ƒZďťáœěc‹ž?ŹK Œô„™ř~456’×ÚžĺŔđşŁ$™žĄ;#qĐӑř˛ëřRڏ›AHI[;vpăŻŠŠĄc5ľ´eäLj8"O~1yęjitíFš8q7.+˘ŸDŁf4HX<ȢŸ;vĐ%—\L{öěĄ#F°böčŃŁtŐUWŃúőëŐóctěŘą6o#ѲÉĐ 7ś=kÖL1¨š_žŸŠűçQ°ąžň‹č˝AŢ_ˆڊŒŒé}ŕ3}Rn3“‘7éœŕ.tÚi§RӛËhóÚeT0q65m¤=#O˘-{–qŠ/ěc~~> B2ŕ…I„î <1 Ç4#@ílář&7 !dř&RdŁŘDoZúŇV:úSőĄŁ —qĆŕΘ7>ţM BW#1łĐ›řňř"ńeöAű^*Ňľ :Ł-&á6Ɉ›"4NńŠyćdńqOÜÖ Ë'N„ ˛řĹëeq œmœ.;Ř6„7ś(F˝%ˇ¸ěeD2Au^ŕń Ä>\ęK­3¤ćŁŁbŐ84řl-ÎÁ#– 9„?.WÔáŃ>Đ8QSěÎDĎ-9ŽÂ}œZ\„ýlR—p1hRmžěţƒó€ˇYÎ?‚ Bî!ńĺńEâKAh"ü„$´GôSWWG ´~gՌKƒ T< ˆč•шŠţ4}úi,fI´îLˇ—n9$¸ýÔ×7ĐΝ;Yôł{÷n[ôŁ×™xÄĐ+ޏœ~řš4iżžLüŁß›‰ř$ZN‹FŽÉÎH‘uďŇÖęÉ[Зšmě{*mŢCľľľ,’’_‚ =Ї áBÇBvČ$žk˘BZâ:‹ÖĐtjŚ|˘#jćŁGIČ\7ňĂ:HsĹ4Y]%AĄ{ ńen ńevÉä3,úŒ—ŻŘŽ4(9EE]fČjŤKé8cPLʍŰPt=póčEˇ}Bü‚}…jÂs-üÁІŮŇÜLaőÁL&`˝AŤĚ\~đ7źp×ńŤÇSřc„>x/:!:Â2j§Ž?Ś‘‹ô9‹Š€-óĺ°rţłŽĺž´ŔˆĹHjŰ,i~M„?‚ š‰Ä—šÄ—‚9"ü„´UôŁ“>eňażŠÔx,ByĽEÔ˛~%M(4čÔS§° &шŕLˇ‘îu$‹(ďńў=ťéüóĎłE?Îmjń jdB1 Îĺ—ŒyäQš8q"/SVV–Ö•¨˝ ˝ýńăÇÓáĂGŠjőƒT{öçŠńhՖĐꝇiÖ8? ŠJJJDü#‚Đƒ¤9ˇĐ×B’çÄdŰb˙ UĐýtŐPr—*DşŽĄh"]f<@Y ‚ ä6_ć_fšÚڌ–‹X]I^w[„¸ůů![đÂËĔÓ2bD>ΕčůŚËOŹHČíö°“ FĺCôŽŢůů”_PŔ]n ďPűŕÎTř‚öD8ţƒTŤÚ ў‰ƒh‹őęˇŰעŁxŢ ąO@˝ë…Cä‚đâ%Űď%:ôŚG‰vĐ,)ŚÎƒÇ˙ŕ!îÁţĂÝű‹ď ÚqáŠ$ÂA„ÜCâËÜBâKAČ ţBŃ $D*M´bç1Ş1Ž"‡›ÉSšOĺűߥ‰§Ď !C†´* ĐÖm¤z ÉâxŘOçœsíÚľ‹†j m’‰$ŁDŮe—]J?ţ„zőD^â˝l˛mg’˜&á9FýLž|'ę+ßy… §žEŐ!Ú>č4:Ľe+yąńďÍd{’0 ‚ äř]—¤9÷Ŕ5Á}SlsŰGf1A TL˙t}†ę¨”„îÁšByÔLŇÓöźŽÄ™Ł ‚ d‰/s‰/łC6J‹8#UŰÍ"ˆb¸źV2á]ţŤuyŻčŸ†í’Ł'ˆf\.wL9--jqĆ@K€çŰń†Ň ŰS-áO“őÝÇç SłUJ ŽF>5Ďy|Îm‡ĺ˝b6ANݏË>F2ZťűŘŃó ë™ĺž<śđűąönjsŁŻ^÷XÎ@zA„ă‹Ä—š‰Ä—‚ţBíä YÓÉĺŽA§RSuˆňűäSóŠĹtú¸Ń4räpť–uś? ëţýűYôsřp-\¸ 6Ňő¤S•Ý*--eá@_|1=óĚ3vRŽ×R9üdęţ“hYü qŃÉ'ŸD;_x™Ş=g‘Ąó&>˝˝Łšć÷ó>aé(AčŢŕ>)5ąs\46Ö_Č>^ĽsDôÓ YíšASŒľ49ÁkŸ ‚ _$žĚm$žě8hoě(v™/´óYëŒDL1KŒČÇ)ü1U>­\bÜsH‹~˘ď3=!v´A ݐ.ŤĽ&ířƒĎ—úRË{,QďoƒăOÄh]ŠĚt*ŠŘۋ8K}%8¸J.ˆŽľw:Ę{ĽŢ+rʤĚŐş¸=V‹Ÿ¸Ź+Ϛ¸ÔWWŔŽ?–óÇÚ/űPľÁOŒä'Öé‡ČétdDßăhˇtşiá~ˇ°ßúœD,ńö—K YË ‚ lj/ť_ Brä[!íŔ™4jˇԑŢ?d ‹V úäQËOŇÄńc¨oß>œlśG“î5$ś¤ÚÚ:Ş­ŤĽůóćŃĄűа¨ČŽiÉvą ŽŁźźœśmßNŁ+GŇšçžK/žř’ýş.šĽ÷ŁŁî?Î÷@Ř3jÔH˛őUŞ -Pó"ÔâÉŁŐűšiAi…UşěXŞí'ZˇtŔ‚ $iî>ŕZA ,d4čƒĂB Puw Ý-ÔĎ[Mĺž:ĘwŤÎO ŕŃ °áŚćˆ#*V ‘|:,ŁŁáR ęÎě§!üŘV!żÄĄ‚ ‡Ä—݉/ۏˆ—MÜŞ“Ěç÷™ŸűĔ˛2Ň ˘ŚXąoPušjˇv!ˇ\‹|'t-úh§XľazĽŽ’Ĺ[.gŠ/”SĂy=`  ¨¨°Ű/KԄí9Ëyšűś\wZ,ťź—ĺŒ¤ŸÚę†uřqžçˇUîLO d‰}ti3sžuNĐn\ŕpţAŽ_v$ž„ÄH$)™6äÇ/‡L0˘wöÔRÓHŒ 5hxč ˝€Keľg˝É^ӝýŔ鼰ZZ4oî\•І震6Đ /ýúÓ T"ŤžäöłV üÇ7ŃŔŇôťĐľÎĽoźÁŰŹ¨ VâĐQíן‰'ŒŁW–?E…s/ĺri{LVIü6•řšÉşsԋtŚ‚ t¸‘SčŕZᚊxĄă蘨1’ŃÚ]M‘§™Fů÷ÓčüÔĎ[C>R#?;2ú}nňš=äň¸Éăör'H$ H¸™ĄˆęHA™‡f5S}ڌb:čK6Ś˝Śî5’Y}#HAČ$žě^H|Ů~˛yδ“D'žxĄ+ăA­K}™oĐ+Œ–¸Ňď‹™âŸŐnéľĘ]AŘâś\}tů2´Âą§  €…@nˆ„Ň´ÍrŠ2ľŒ.!VPXHMMÜ>օ‰DŞuƗÓď‡říŞů„ ÔˇIiPÔíǖB9×ĺpűąľAö[\fY5ËőGŸg]⠇ԾécŤüŽAŸ+AĄk‘ř˛{!ńĽ $F„?‚Đ% U‚Dí@ßIÔRgP~ПKž¤‰ĆQŸ>eœŕڍ$Kjľ“P˘ZÔxíđáĂTSS‹9túéłxŢwî‹î}?•”{čëĽÁĘ9Ąu§Ȅ#°–uŃú÷ŇżWW‘Ń⢑ĺoÓ]6‹fž~:­\žœÇŞkg:Ĺ=œ7œăóýڕ3d•Ű2%ť´ýy\ŃcuŹ • šˆA­ůe§Ë˙˜ĺÄ ű:DŹRcúšéˇÎ…Äš‚ ]‡Ä—݉/Ą5ňmĘĚí'™čn?›wÁ#)|¸…\ž<Şí§QŁNŽqČiëöŔře1ďŘąctčPĐÔŠS9AüŮcďĐOŸřňúS]u#ýâéwéןžO<âNëúc&“˙óŘz2‚ň•ĺŃWÜLe~şńźŠtęiÓhÍŞwhôčŃ\şĚď¨1žČ(Őń&z]'ˇĹĹE4qÂxÚľn ĺO]H- Dť|CétőţDŸTŰAŽ?°wş'¸v™ş ­ŃąÝáͧ\§ŔÝBS ?¤IŰɟ—OĺeĹTR2šEěÁëőQ1Ś˘bĐż?57ˇPy]ŞYEőĄŇ Cm‡ÇxjëęhۇŰh÷ž=´g÷ţń0JßBÄ] Ţáű€hŘđa4|Ř0vttŽžB™0Lô§Úš*9źf…7Ňű #(d$îÜ ¨´őP°/ •Ńń *ü!Aá8"ńe÷FâËś“i[bŚëŠőh÷§ăľl„ ËÔ&:ĎĺXÎ|…lg[cQ3ÇźD.9FÜ6¸őÇăl_5ë_'%Y_ŤöY—9ĎéÄÓj]ÚČ ˜â_öŒÖG„­9ĹM,äáMY˘Ÿ )ú ´´°ăť9¸4h—úĘćľA’#ńe÷FâKAˆE„?‚†T‰–.óu¸dUGF)Qx÷j2ůĚV%ą2Ý’ťP(L……E4aÂęÓ§OĘĺď_ň>ÝrĎzršvşjs>‹šjˆţřŇűôóOÎă‘+î4ż{a!/yó Á%ČĽ’˙ź|şňŽŐô|ĄŸÎ6ž†>7éűzč?<‚f$´‰áœŇÔÇŃŤ{ö’ťtE \ôáŽcTޡŸoŹ[AČ}Ä"ˇűƒk(‰svđůŽOÚubÁNšUü>y=fœĺń$9 xßŇᔗ[N#’׎]KËŢz›ÖŹYKŰśmks'ś{ňÉ'ŃÔŠ§ŇüůóhČŕÁ<‘bYYĚŞŤŤŁţŽ GpFT§ČŞ—ĐâęŠtT=v-˘řAČ$žěţH|Ů6:Cř“¨´—ţ;Öů‡çZoŚŘ˛_śř†bŢC<đÎáZçČŁKX9Ű îG˘ý'ÇśPË-Eâ܊ŒóœëÎsŮűâ"#őyÓŽ?dărDNŰ#ëDßëvšÉƒÉ퉖W‹č}4K|ĄÜ €ŕüŁŚdƒA„ÎAâËîÄ—‚E„?BŻ&]ęu¨HĂá¨:Bţ“)\ HĐKŁ”đHgŒĐ@t­ćd‰›s;HŃ9„ŐëŻ/Ą|äÚźc/ýüŠuä÷ů9Ĺ?ŸÇK-jű]~¨ fąŚ5­ľ=ň{iÉćĂř‹“ěÄŰ5;zZš›hĹÎj˘<Ż=Ň'ÂŻvçŃĺ^E7ŹŮMaԟś’ؐzôť"ôߗO§AúŰvˆ8nç1Ľé:ÖNűZ<:t…Ţ^Oy3‡R¨…hˇQLÓÉź'ţˆë Bî´-…ŽúŢ.t/N/~N*ÚECLéƘˆГO>M/˝ü UUUĹź÷žĘĘJ:á„hȐ!źî‚‚óOCC „6mÚD‡âĚ+WžĂÓ]wý…N:iwŢštÎًl×HˆŇY3Cŕ^uä(]ćyƒž:v:;ĺc ‚ t _ö $žl‘, Š8E1ÎżÉ0Ű.cÄ3ĂánCä,őe-uęq”ÁâmY˘ŻşĆ~5ůTűŚžđbIí€cXÇČí˜ ĘrĹ`íwD‹~ĐF‰ç*ĺ)ąĎšLĚ CŠu>âr\ÉŢѐó4Κ^ZđÓę˝,+Š)ŰĽĹ?hou9DPdĘ~éI—)A:‰/{_ BţBR%›x Â<î>ROTę!×MÁýűhâřą<šZ×iv1VžŚ˛ŽŐ‰đŽťx^cKˆţöÚ~őÍˇrka˘B•8ť [ôřšĎCďl¤ýUŐ4x@yÂN =oÓŢŁ´óh@˝§€GœhÂp RżőA7ÝţŇ>Çvń˘J^ BôĂkýöŽ€xqS˛Ň^8?pđqޏÁ1ëΟ˘ĆCd¨U7×ŐQKů=Š:W¤ăE!7ŔďťĐ3Ŕľ”Äšű1"ď M*ÜA•#G´éúíÚľ›îż˙zů•ĹwtJ̝;—-ZD , éÓ§g<’ęđáĂôúëŻÓŤŻžJĎ<óŒŠmwĐťďnŕéďť‡Žźę şä⋒–sârši`˙ţ,~?7˛’î?|…IFC ‚ ô$žě9H|™9ŮřÜëV2[ÔŁžĂ‰Ç S2 ¨ŕĹpŽŔ^§a•ş2ˆb–׃+Bž§!Gʧ…?éśCÝvŞĐő~¤;Ž Őڍ'¸ĺřŕšc•űĐmś†9ßOŚĐűVëŃ⠗ľLŤśSç?k0¤a99]~œËŮűěţ¸=Śř‚ ŻĎËÂ(Ÿă\@ź°Žď G"$‚ t._ö$žţBŃ (S$bGš1˛D}™ň\Řóő™5’“4ÜdŞkkšlWłú;//ú••r˛‹¤7Őú!€A’ šľEű—PßţůTô“×m8sm•ĆţÍë p\TWŚŐŰŤčÂĺ<ŇĹ—źbž[%œËˇ"ŁYm7O%ÝaŠ[ĆőxJ˘ĽP6, ú‚Ć•űŠź´˜ŞT§NEĹ`;ĄMwîtb^W_Oľ T Î‹KL”râ *Jü´Ď@âŤň˨Ąq•ŮAí˙ˆ0HĄk€Ă‡Đ3Ŕľ„“ĄĐ˝˜Qź‰čg7z|ők˙śmŰNűë]Ôˇok§87ŢsĎ}ôČŁŮą\}nşé&şîşëhřđáÔú÷ďOűŘÇxúýďOoźńÝ{ď˝t˙ý÷Óá#Gčü=üđ#ôĹ/~ćÍ=#á:^}íuúńB_řÂçé˛K?˘öżŠŽŁńůťicó(Az_ö$žĚ8)f -úa§qŸíTîů8ÝpŒ.?Ž?ČH üa§Őډ6P´żáą °ŰA}j>˝(˙ĽžcŰhԃ3mŻcáj“…Ó$OęĄ֭ޏ˜íŽ6ářŒ8ÇrěoŘrى„-aĺ@DąGéü#FŕżœłĚ—~]îԎ?ětäqs›ož?ĎöŻcę|4Šç(˙ĺIŃž*‚ d‰/{_ ‚‰„^K:GŸtóu§HuX%Ę!•ÜŞ~oăQ•töăÄüé:ƒŽEF‹A$ŐeDăUgÇIƒŇ AФ¤$麑đ]ň oI!ĺ{]d4ФÔKddŕôërA5㌼˘ gœ Ţc&ĐaË%ž´MϲŞ0Ü'éŠ17ä°ňŕmÁű}Ȍytř€T˘jŽěIUć ĺşP>bץĂôÎÄÔ\¤’^u.Ý~7=BsŽíĹĐטöś„M+ßŐÖ7RqQŸwś BN’ËŁeиźlŮ[ôć›Ëhó横ę07ö–”ÓĐĄCiňä“čœsÎŚaƒ×ŇB÷ ϤžîZ*-mĎ;rä(wŒ$ú~ŽXą’~ţ‹_ą;˜0a}ë[ߢkŻ˝ÖŽIłâśyóćńôŁýˆ~őŤ_ѝwŢI‡UŃ˙÷hÖ̙ôo|­•0Šşşšż§ÇŽłçőëSDŁŠđGĄ— ńeĎCâËĚŔ€šçčřmjyůůŚ0&bśŻľrü1âĘ|šâWg+ě÷hÇ->ç_ę9—÷˛âJ0¨–Ĺ÷tÜÎ_ÚĘ*Ăĺ|Ž_ŠƐ%üi°ĘĚB„őBřâ#K€_ÖKŻOťţDřŘM÷ráľŽ*ąP(ęúC­ŽŰvM"ŁU›˛˙hKĄh 0ď'v bš5ŠóýňBČ$ÂA„NEâ˞‡Ä—‚ ÂAhE&˘ ­b[|%ŚăOžJ^›ë¨ŠŠ™–CľĺÔrŹŢLâÔ{›ę"´iĆ<ňŹxo>H* nĎoŮߎ1œE5x,ËóĐţZƒÄ t?f"ęóŇŇ­Gń;a ~ČL”˝ęy$ ĺ;jÔF˝™×GÂŞ’ăň"3‘ßł{Mœx"?w&Śń ŒŔA§ÍŽCGhůI3U’PçÎÝQSSq9-),ĽS6žE-ÍMjŸ˙ů›¨ŹŹŒ: ÜĎÎ=÷˘˜y?ůÉiúôi”k,çBĄ{Pčnfaśłüęü˝ęi˘~ýĘíyř ţă˙˘űţńîô(**˘Ż}íkôío;ăR^íeđŕÁôË_ţ’nťí6ýCíĂŰË—Ó 7|–žýoŇôiŃď\~f¨ďŐ!Cěy>ŸŸJźYčAş_f†Ä—=Y:ŒSřă6ÝfÜ^/^œŽ?ś@ĆH]ęË)üÁs˝È:’ŰełĚ,‘MÄ^ÚĺtI+tdşR8{;ÁX„>87\ŘŇÜ̢´BHÔ¨ćq)ł$Ÿ˜ă%´c˘4™Ë÷Ğť¸çFëŮŃÓW6M‹Ľú%}ŽpîáęÏjßyyœ#ő7ŽÍkš ‚ ‡Ä—™!ńĽ t/Dř#ôJŒL.)–×Ik¸°/ B*Ďë;ˆ– Śţ¨­U‰t´Ó [ýázÚ8g>•ŻZnŽvąę^ÇcÖvŠÎ™~ôÎŞwLáOžJř"*&$~é÷ŸE<>7m>Ř@ľu TZRĚÉćKŤśPžßCsO6Gď>\K;Ž6ŁVYĆçĹežęWdţ„ěÜľ“&L8Á|-‰D?Őľu´ę¤éT_§+#ÂÉ8żOs¤š‘Şó é­'Qżúő|N Ť‘áhƒYŸ qüşEČ#‚; Ą2×xđÁ‡čŻ˝'Łű–yůĺŜD˙ô§?–Ń3”›×THއ"ŃÍ(Żŕ,5‹Ž’ď~ďű´zőţ{Á‚,žÁČąŽŰťďžűčňË/§n¸Ž9BßřơéÖ/ŢB—]viĚrNx”4EHAčH|Ůóř23|Ůr_ÔÂˑÇíˆcÄ*q6ö{Í'śÉó˝ěžŁyB;i8ÂBÝĄŠ6Nnół„?ş„Ä-ڙǝĄđűoXëĐmŞÜŽj9aň9[‹sż­˛].WëmÎ1Ž?d‹Ł(ÉůŠÝžŠüŃ%ŃB!Sěăń´Řű‹őŕščóŁKą‰đGĄs‘ř˛ç!ńĽ ˆđGbH– ƃ$ ó‘Ć Á,‡mä܋. ŸJtkëÉĺô°v5ÂR÷ž=ľuTŠŢ÷8…?Îdëf;\ŸŠPTšŻ^¨3sÌ,ˆß`vąa{ö-÷­¤Á} h‰%üi †(ÄËRćX#V°Ÿ—Ď‚=J…‰Kšů\ŠäߑcÔ÷1Ÿˆ99çÇ`DKai1‹áÁ๢ýŻŠą‰ššš]ßíލ¸ˑ§¸¨ˆż ,ţqĽw8gÇkP ÚSu;$œ~°žŇŇRęSVF%%%źHœ(Çeo'l}Ö OŤ˜ÓˆuńąO %wŠwrŽŸy”(cA”!] .?AŠV_ňŤGě7œ8Ĺą@čÍôśXGčz$žě™H|)"ü„6cX#XĂU9Fů}FҚu{hçĄ]tîS)ܢ’ˇ$Ţ(ԅü°!2“;GpáLŤŞŞ¨ĄĄ‘věŘN—^z)íŢ˝›6ěŤ% š U"ěÂHʈ°Z0ěX¸Ź¨€J óíżƒa•0‡áD Š<<ŕDGĐ Ľ›ŤčhŐAşéŚĎĐ?˙u?2eŠJP°SQ|ŇŹ˙nD‚ëś„P 7ŕĄp Az{Ă* ĐźłO¤ć–@Ě9ęˆĐçx‹‚ÖŽ]GŻ˝ś„Ÿä#Seĺ(j oż˝œ–/_ÉĎaůxţůç’ĐÔż}˝TT RWŇńA*ŽááѥC‡¸D (**¤ŇŘąchüřq]2 lßžýôĐCós|ŢN8a|Ěëň™4š6˛ŸÇ?ţńĎ­ć/Z´Žşę ű÷÷ăUŤVs‚ďœŸý{ďý'Űćövpm%qîţÔÖÖŇWnű*íÜš‹;Kî˝÷^ŰäǧŋÓu×]G<ňýăŸ˙˘`(HŸťYž™ŕŒ/3ĺôÓgŇ̙3(›üîwwpŹ}ňÉ'ąíx{y˙ýôâ‹/óó뎝š @݉l‡ŢŽ9Ž˝ßďŁ[nů ­ÁŕĄřˇę8r€ďňė=‰/ÓSR\LŮÂlĎ4Ĺ).ˇKľďáÜGË_ĹLNw˛ĆZO ÇúlGŠś—âşśZ¸ —ń"ÓĹŻk÷,ąO~~>‹\|–ëOŚÇĄ;=Xôƒ÷˘łÖWŹÎ4Îc˛ŰľđeľŕL¤öűŒs˘×ojôŘÉőśČČŔńÇÖ ŮnHaË ÉtůńiÁ“zݧţ6,÷Ÿüź<Ęw¸ućČ#ĐVľ˙~ŞŻŻçAžůŤ5’N„ŽŁZ/~U5˘4´z ż˜śný–-{‹Î>{‘ę,FǓÎüL ݋°ă~“ Üwß?[ŐěžéŚéĘ+/™‡ű jSŸtŇ$úŻ˙ú´eËVűľ§žz†>őŠOĔIŇŕ^´té[ôĘ+‹ŮőŞşş†˜ î‡S袋.h%îܸqÝzëm”ˆo}ë{öó\Ť—k×Vh;č|ÓëŃ)ňř㏫{ČٔK “ŕß˙ţˇęđż…îşë.śšFLyՕW ‚`ţ–Ł# A^ĐÓ;Ă$ž”ř˛7ăt ď..‘…Úá†l;šč ťhÉ.§ěĹixWç+ú‚ĺŽ1"<ą“Žšđ=Đív[¤ÁĂ"šä—ë˛JviqPşăŔţšU‡ž_}ý*vôÁůÇrÍń;ĘaŠXn>ńhw"˛e†â>‹1‚ž8×#ŠëOtžőśřšç†ŻÇésălŻŐ˘ \mżčÂY" ^mhŘI;věävŞ9sfӔ)“ЧđúëKh͚uüüK_ú‚”aëdzcŹ#t=_J|)=ţB’%†fŔYËB–{6č`á~ö˙šp(’Rh‚e uß ŞäSŻËšî#GŽp0ťaĂť<úN?ĺĺĺT :g&.¤çžs1ý{É{ô˝Çߣ-{Őť<އÄGnŸ›ÜqJěEŘps'Oœá„”ŰçÁWŤ=†¨(P‰h œz"4ľ˛˜~zĹt:{ęX{)ě7,8ŻťîZzčĄ˙¨Ŕă$BĘĘʢ۹DNM†UGŰJôŸ'˛ěxUŇďńŇĄ}űče_9^ßŔŁ?1r'Q)Ąž*ô‰Łł1Ş ęĺ3ϜOBbŕŘsÎ9‹ž†ÚˇPƒůóç&TpœFW˝óÎ*zóÍeöß>Ÿ—FŒÁvžřŒCdƒßԆÇďĹŁ>N žÉ#ʏň™4š”\á3ůúëoÄ̛6mjŤ¤Ů ž÷7ßüúéO3ŁhT;Á}ďG?ú)­[ˇ>f>â+0=ůäÓěěöšĎ}śŰ—Ŕ“Äš{ƒűǏ~ôÚ¸i7î@\“k˘ ::îźóNA|˙ý÷ӟţt 2„Î8c ™qęŠS2rČA#Ÿ ݋>}ú¨ŐÓšÁâ¸+ôt$ž”ř˛7“Íëp7,!ODýłKYĄiŇ'v‰ü8žšŒ¨(ęřă(fMZDSJĚńˇ›ýšůń˜Š˜‚Ë–Š÷ŕ}ëýëýšőkjrYn:1çAď öA}á@ÄËQ˘vŕŘ?œ")§0HŸ/ǟÖů.1 [ˆd@äŁĎ“žçxŽË€ĺ ťwďQż=OŠ6sP'ömذĄ|OĘĎĎăAk{ö쥺şzlźúęëtřđq=ÚEoŒu„ŽGâK‰/Ą§"ÂAȝÜáF‰ÎöŻük=˝çBSƨ¤ĚíĄ@KŒ0Ę|š)éIBĚ+ˆY'ŔȉcÇŞiýúutíľ×˛ej˙ţýů&nXŽ>HŹŽš7‰.?},˝úînztĺ.zć˝C´ëP#EÂnj­¤qQƒŃL-qu?4Š„ĚUŰLÁ€›Ěl?ć ŐŻ„AăĐE“GĐG§¤9“†ŠŐzY0ä2‰U÷‡fAÔĺ—ŒžxâIőĘ œd[śÄúX›`d5*$ ę\š\Ź$ĎC[ë|tĂż>¤{>>–Gíŕܸ­ä<ÉÄ@ÝY$AŐÇ>v ŠÁyrŠĎœěŮł×ţ \Ź s$ľZôƒĎ'5PÝǏňƒűl=WŽ\şĺŋ_ăďZeĺ(:ČgRĐäRrľzőšVuŻ3ůœâ;÷ŕƒ˙LšL]]}ń‹_ĄƒĽ\ßĎÇ’ ßüć׊;#‰s÷!ßhŐmńŸ‡ĄĽËĚűËÝwßM]tĺ2ˆńîšç.uůňË/ÓOö ş{Ě<¸‚_Ç=Ňç B˘ŽŽUFÜĆÁpeĺ(Ąg‚ľš4Şśł‘ř2‰/{ép2ĄuۗŁ\U$™0LjiŰ´K}QŹC-ü1œĽ°hˆĎ3ŒÖœ$Çsv9ŽäŰqWz űÍ1˘rŠ{˘ëqo'-ö1lÁOtj]L‹Žâ×i;Y.@šÚŤŸzęi[ô3a ,Ę())iľ,œ'^}ő5.U˙oß>4uęŠ$mĽˇĹ:B×#ńe,_ BĎA„?BŻ"Ó2_ÉţŽŠŠaŃĎ ěŁäŃвjršs-Ź`0B!•˜ůŕÂCɓThkÂŢü˜őB4ŃĎşuëŘ5ĺ˝ŕôƒZ×Z âąň[lĂëËŁESÇňÔÜÔH‹ßÝCK6´ěxM‡=ŠGeŒTR˜ŻÄÚntŸ*úÓ-VRľ-ě חVŰË÷zčŹIƒiîÄĄäńEQ`?ëqŒÄÁű ÄA™2ˆ}Î:k!˝ůćRŢo]g['­ŸŸĎ+ňKăœň_^QË1Z Dl­Ł x;Ĺ xz‹ëĐóhllä€ď Tö#GŽH¸,~` ťďţ ?˙Üç>§î×SwÎDpü™:u* ţßţ˜ţpÇďř a|žĘd'ě¤÷š*IAčšH|)ńĽĐ1Zľ›‘vźq[(ľđGżĎů$^ôcNŃmÚ$kŁK$Jń™ĐÇĄ…3ń⇽NzяcžËţża œœî=QŃO˘c4bśé Y˙Z‹’­Ó°K~E Ł•¸čxňŇKŻŘe—08mćĚI—7n,;J˘\oSS3—ý:ńÄ ÇÍQ[!_J|)=ţB† „ j:z”vL:ILqň¸]đŢĽP0La5ůó|ěę“0ŻE‚Š’WE%v§~PŢ ˘ŸƒZVŠů E,^ˇé(ąÝü‚Bş`ĆxžŇăâýőz˘˘ąĂŇ7-JűÎPŘŕcÂű=qöť:ńFIˆ0ęă”SNĄÍ›7ŤÎUTTDĎŁ?ĎĽ*‰ǟP„ęœj~{ÝÔRŰo¨Ľƒc/¤mÖЉyyěz‚óÔۀSÍC=ĚĎĎ?˙\:á„Ä×֎p{FŰ dœYÌÍÁŁłźŐʕďp çdŊwxýű÷ŁüÚVۀXeíÚu VWWŤkkPqq 6L“bŽ}˛c€m%FđoŢüÂwߡŇŇRŢ×ÓN›š× 08§ď˝÷>ď#~,÷íۗ&N<‘8:bĂ uK‹YËwÖŹIE?N°ÍSN™ŹŽÁzŢœ?œ/'<ňŰ2ĂŁ `ÄśvíÚÍBĆźř` Ľßý„c˜Ó‚ëüŐŻ~ÎßG F54îşëŻö<4~"qFŁ'>§‰F  ńގäÍréÚ É“żúz›ÔçÝüźâşýę׿ĺşSŚLĄßüć7ԝ@l ńς hăƍě*yŮe—rě9dPšÚD4§ !im6‹'lŔÍXĄ–ă|ÜŤQŇaʔÉűtčkÖŹĺŰ@ …ë}ꊧpL)@8H——@îx1 ö5ŃhtŕŒO.żüŁjŰý9ŢşőCŽŠŠ éĆ?MŮîUˆŤ1ŔńâĺAƒqü5dČŕ´ďÇq"öÁ=÷-s#ţ™4i"Z‡{ޏ‘řˆżš›[8Ä9G܆X6Ýŕ‰lÄ_Ř|śp>Pű€źaÌiźŽŽ°|ů zë­ĺüüK_úšĹ5Ĺ=Ÿ \St>˘ĂRÇěřěĄĚîŽ;9–Ćţ >œ­ő“•ËÓą5\ şO:;u.ţDží˝.™îĂţýhýúwůša´/օďŻţ~äŠëi:$ž4‘řRč(vA.ۘ&žĽţ8V]_TŰ'Š%kĂó˘Şű1Q)ŻLáý˛Ęj–[QTTëČ=!ű$ÚzG$üŹëßöřŒF&˘Ľ.÷GÜK~ŻR‰~4ˆĂć͛K/źđ—¨GÚ´i§Ůݎ7ëh‚R:x?JÚŕž 1ÚôЏßZŹ#žMď÷ż˙cŤßŐŰo˙ƒýüâ‹/Lˇś7>M‡óÜ}ôŁ—r;Ž íkGŽĺs2jÔ(š;wŽ}G›bnܓău`˛˜ŰS}öł7$+<účăüü Ϗšgi:;։Ď[đ™+--ąŰĽqŹ‚‰/M$ž„ž‡´ Bœn?MMM´ÚUDĄ0\w<T‰.ˇjH‡-qŒ9J$¸ńxÔMÍÍMęĆĄ÷ßŸŽşę*Í H&úѰÇzM—C˛AĎŃÚFzo÷aľK;Š„X…šŠUźP×"Ÿ§™ŢŰžjšą ƒÂú^čâ¤)•Ѝ Ÿ}¸ćś bĄÔişSüƒ†\Ejk+¸4^3]H\ň+B)–ńR(ĄP ĚnJŮÝ‘;ĎGáŚzÚ1Iڌ?ŽŰ§pĚńż›N2‰Á˛‡ŕ˝řŐÎEˆ1!ţD;)~c;*ŠÍV|šŹ˙ŮgŸç˜%ş0ˇŤAuíľWóůE<ä<żˆš!¨Á4}úiě&ŢYtfŹ’ĺ-` ×4]œ-š€Ä—‚ dţ˝žV#C$„¸ů˘pËŢýT;g>E6$— HŃHˆNˇĎĂžţć8Ň4‡m—úR _a ŐÔîŚfu3ŨϏ|ä €›z:ŃOëUZeŔ"oqĺŚ]tÁ÷žUB1‹xâ q“QRJT “žö´šď&[¤Ä˨ż#Í´é׼FćýŨ„LŃâ(‹!ţ7n­ZľšĎD:ýúő'‚ŰDŽ4ĽžÔů †"ěřƒF‚p(DJŠCÍÔ4r­zuÍăăőśw¤DOĄ‘W +ôČ첲RNЎmŰĆ6HlŃqÝu×p#F cä –yřáGů˝••ŁhölS‚Ć'e‚äɕ×ëᄣ) ?r䏶@ă:F¸€3ϜŸt!˜A’}Úi§răJĂ!)Ĺč[ŒÄÁz`- AČń ĽĽ…•îŘ0tčî\)..fA’l$Ť]ƒ‹O|âş67ŕűď @îŽsŐJ’ăĘĘJŢěö)Ńöń;öÜsĎó(_ÔɆšřŹźýörnYž|%_GŒę :z­ŸzęűłQařÜbtŽ j8XŽžúJ~Mč˝8]Íîٟ5'ŻžúzŇeuŇŹÁçWgĄł•w€J<-TZ6„˙nV÷Ż{oŸŁÄ׏Y'ěěl~ü㍸ăQŽ›˙őŻčË_ú"ĎÔżÚň!˝Ű8†Â”ů˝SH :*–,y“Ÿűý>ŇÄË €Ćuž—-{›Gˇ§Ł°ˆwp/Gl…ńśĆé\;źůć2~Ž‘á“'ŸĚ›âs‚†~äjč(BŹ„Ńŕɀ°ˆď°ÝkF6Ŕ ”Űó¨>âᆩĎ'âeÄŢkÖŹăy蔈géŇe*ŸZĂĎ!tĂ52Ä<_čLÁ:Љ„- ź@ŒçÇńřăOÚ.8ßf VŔůÎ7FĐëŃ gŸ}VŤ}ČFüĺýäŰ× ą(Ž:§fë‰N úúzŽ9á€řŰ@'˛1 vɒ7¸ÓűRQ1ˆ­î!@BGÎŰ /źH7ÜđŠVńD6ČĆuIJëxŁŢqŒČpŒX':Ůđý€ŽŻ˛r ™!ńĽĐŐŕ~›-ĐĄLŘøÝKą_w.Űj%i?eL„].Sôƒ6$ÜńÁ„ç¸wńkęQ;Ťŕ> 1Óv-Âű‚ęw żm!ő<¤Ö‹p<ßZg""ý7ŻmáHTüßF'úqşţPŒˆîGQ'Ľhů.óCđ„c÷y}äWű‹ó‚ " >/Ö9ĐÇxźŮľk?öëWŢ&g>#§Ó‘I ÖŃ8ď}ţůí6`^++Gńś F …ő žB܈pÍ5×\ÉďĂ˝÷O=OVáˆé$›ńi:°.Ä-8´áá3ă@ű$ÚŮŕÚQžăx!fĆńŁ=ń8öiĺĘU*&ÉmÇŮŚłcty ÎFˆłq˝ćÎ=ƒ!W‘řR„l"ÂĄ×Đ‹Tý4"y|ĐhjŽ “O”>ż‡š›„šX˜ÂIf0œZH‚×ŕřS\LŐ{kčHŐ!Ztî9|cmčljŰe&łNN‹z!ďSŒćG=+ňtőÝŤ¨ČŚ}ţ|Ş ÂÍ'öź`ů‘ýĚuşŰžńâŒ^źxą 싸qš úڍ ‰Ŕ)Gţ„ä;Ąś'ĆM-A~žWT@MGƒ´cü4:ĽqŸ;0ôś{;Š !@ȃ‘łÎó‚d°_ż~Üá T$|˜&ź_ƒ„:‘Ĺ˝9Úć%NâČ")v6TVŽâäI7,!ţ0(™˝*’RŒîpލĹ÷‰',lą$‚aßťthŃ„Pń#ܑ\"Ą|ĺ•Wš3 •K/˝„Ú‚ÓŇ›ś‚sĽGů@ü“HřSUu˜ËlATă´/FóŠë|w–đ§#ם5şą'‘“;БóÜs/đu@ś%ô^Đ8éŁţq/2f‚ó;oÁ R%ĎNâGş B6™R¸úőícÇ~O=ů47ôâžđ?˙ó?ԝAŁúwžóúž :´ŸĽ_w-Çql>ďŞĚßO[›łß`ݛŔˆ>]öB+ŽřXŒ¸Âd”á‚í>~ßygľşŸćŘ"SĐAóÚkćď%čŃ!ä™­ËŃ"&AGFŞ}ŐĺP& ńŽłą(č\ŔžBX˝xńŤ'űýÇo3`Đ‘m× ^Füĺ,‘†ó q>÷Ł SąŒ3^F\ŽGÚ㚠dŞÎ{â5ÄŘĂáPźđą“ĺ=gÎé1Ż#ÎŻŹĹâäۡoçm:Ďe6â/œ-ú8 çÂé>†Î>ÄÓ¸^č Ęč\ç‹$>żˆ7áŕ‰x@řœ;?ĂřüA‡%ˆ˛_w†…}GŻK*pÍt#?փQżÎ8ĺÎ&O6Ď7„˙/żü œ:R˛¸7!ńĽĐŐ =2[Řî>Dě^"ŸVĺŚl˛m˘ó)Ć) ˆ*đ˝Ŕď}ĄzÎŤů¸ƒ`>„. Ąş .@€é”8|ďpnę¨QM-ęý¸?556RƒÚ&~ăąÉJńŢFLף°ľ˙.§đHŸ˘§ű<Ů˙Čaä˜Sâ+ę:äVßű<ľ´ż!Ž-dË<žv\]Úb&—űřŠÚ!šŐĺč!Ňî ŇĹ`وCŕpg ÝÜÜ~ßޅ8qś…imë˜Mˇu˘}T pŸN$RËv|š”FĂ6*+GŮóÇźţúŽ+ľpNMNgpÄ5ظš´gv†đ§3cLň”/Bœű+â:Ä?-++…Ä—‚ dţBH˘Al厽Ôtú™ŞŞădŐçuSS$ŔÉn¨A•` r ąÜ`ŠOIyjrťî˛ÂwŠÄډc†Sgá˙|řᇴpáBşço§ '‘§˘‘”Ž?x?ĘŚ,ÇœÓp(L.݇KŹE0z§o ˝š˝šÎWß°Ä—ęŠn>éŔšĐ #F OxäAT1pŕ€v5đ"šÔÉۢEg%Lœ0rĺÜsĎŚűîű „tâďD ŃMdŁ}Ÿ5kŚ-HÁčŰŽţ Ą#aF'+kÎ ˆ¨°âűÜV‘śŁi­°ó=ÎuĹ3ţ܄×džNovďŢMEGŽ5FNŒČNV>E8˙°”F‡J4Ďq˝4€ĺJ-e8a9Aă)lľăKéĄę嗟‹™÷­o}—GżiŠ‹;f÷í܇îŠŰ-n*šL™§ú{RYÓ%D˙~č?üüć›o7Üp;˙ C˙??LŸťů&ž?@ń“ŰEř㣳ăGěĹ/đFŹŚG–Ÿţy 5Ńiwá…çł 8~ë1Ňg FTëąp JTŽ ţˆő6Ą÷â!l?Q'âˆ3ΘĂ#Şuů&tś$ńCgˆ~4 œ#úŃ ~;÷ÜsŘYńűúőTl˝Đ~Çő™ĎÜŔb˜üüźяq:2ĐůŃÓńΏˆ…4ˆ÷qć™ólgœx˛Ađ^”#KTrŰĆőBÇ[6@éÚřç ÷|¸žœˇDÂ5Äűč 1Ţtôş¤B_38+ţš c|÷pŽĐYŠœ÷Œ\ţH|™‰/{6GŽŁŹś"ËqĆďĎăE] KˇăĹ~ŒX—Ăń$*üŃĺÂ,G›ę lÁüő›ŸŻâüöëßv˝QŰŠ{yCc#‹vtéŻTčWąĎhS­WmŞŤŽfˇÄ¨ĎţöŚţčsŘgnçu|cËzE~ § Č ‡ë>1Ńň`úźŘŽJ.Kô¤Î?Eęž^Źâ­<Ő~ć˛ĘŸÁńëjTq\ ‹nOíÁ):ëhůŤd¤‹Á˛‡@ěWɆ†Ć¤ƒÜĐNŞĹÖ'ŠŰґíř4,UVŽj5ćĚź/îďNяírc›ĺÇSgЙąN&y ~sŕ"ˇ'l_ ńH|™‰/Ąű"ÂApŹĚ‚Ă˝})„ös.=ĺ&žJ ƒ <Ň$ĎďĽćęšƒV=fJ*âäĎí˘•ÜUÉęsŒz„;N2G”TDŘ:V—ëR)ŤáâyźykPŽ,˘ćűTŽVˆŹĺƒaƒŒ¸Ĺ_ć¨ƒón¸ ľ5>Ćy8xđ 3†žáEý4ľ4“Ą(ĽđÇÜf¨%Čb:ˇjëŞ! ĢŻĎK†ÚŸ@C Š–ǸÔ$َœŹ yMT'š-ŁłăA1čÓ§,Ľ-<ěu1*"Ž;w&].Yˆj`ÁŰŐŕXőďF‹¤bęÔSlˇ%$ďłgŸN™‚Ćv :vÚ :â4ÉŹŔŃř€ňÉ@˘ á:ä@wFă{Ż5"0`SŞď2MĐŕ0Z îSBבKżłřNĆ'ň]Ÿ8ǃäV ţ4°żÖ”—Ç6ŢpĂőtíľWSOGĘr›Ńyű(ż°˜G ƒĺ+Vđo':žúŐŻRśAěľęwhůňĺ´oß^Úŕß7ŕĚ3vě8:돳T re4Ţ~ůË_Śo|ă<:ôłŸš‘ˇY˘śY^ľŠÝMT) ěĆţT̚5Ăţ ÖٲŌď#ڊŃRY9ŠyĐš‚¸CNO‡vńA™ŘT.*ŘFĂ)0ěëÖ­ŚËářńăSvDĄCŁŠC*§@LŹc%•Ó!Fw§s[@gC˛‘đ(gŞŒ:˛08pL8…?÷ątNŒÎ˜ 1”óœ8sƒ ާ ´ú=×eXâÉFüe–•ÝÁĎqMSuě`Ô>ĄPŁŁ$ťŽÁ ˆDŕˇń8bb”ˆč :r]RĄ’žfÉň@ 0u$žěšH|™žlwźi×ý€DÎ?úšĆ~ęr ‚,—#*ŇŰąž´^iˇť§gÚ^ç˛Ö§ß°JzaB› —ů˛J}ŹőF’ Ź}äŇc.Żýˇ˝ŻŽň^ö‘Ćˆ~ [çŁONźPH—úŇĺ՜çۊ9fk˝Ř_, Q”AÇÄOg›S6IădłńG*m J˛j҉çŃńi:’Ĺ:ˆcĐţ‡AĚŠúĐf áO{Ž7:+ÖiKŢĄóőׂ!_ö\$žz;"üz5ŠĘ9k>ăyƒ/ŸŒp„E2uóđzÝ,`A˛ŠŃ!¨gTsM)Œ"–+ĎĎî,Hdž{îyV¨ˇEüć@ŁA0:%vkŃŚ_쉛÷ŮYŃK/ ^ËĺX6~‰čzCęذ|ŚÖťý Ŕ~óÍĽ´}ŰNHĘúő#S Í)oŔx n?á`„|yfG˘ÂBŻ:ďć( Œ– řňTăöaV2ă:!@ęí7v$ăH"!<9t¨Šţţ÷{yô ‚>$CŮHÖőh$g\ž-ÍţŒdIfۚjŸ2´t&ÚŸ­tÖˇč<ĂČZt ÜV[pZwę‘đmEM˛Î7Œ¸Kö]ÓYŁ~Ű{­QŚL“îsç<ŽcŮ)d>7zäŐńągœ1ŰŽű0 ÎRő—Œűîű§]ŢŕűęŠSěżá\Ľ-źn`ěéH Üf|Á^ęSm`~áůůńźóÎŁ!C˛g͏ß租~šú÷ƒÔÔl6ă;T ËMę^ŃÁ+ŻźBżúŐ/iěŘąô˝ďýˇjä]@ŮâúëŻç’_ř}_šňv‹ĂgӗWD#óĐ{M•$´[tü‘IšO,Ž=îɉJĂ&Bߗ!DN÷›‚Ü!‘đűŞĹpH‹Bř 5ĽŒ R‰#P"UŮ1aO˛Î—ÁƒS:đ^p\ˆé9âhŕčƒ8yd;ăňšřQŤэŃްjG9W8;"7>|8 ŽRŮÇg#ţÂőŇBžtą4>řl`Đ@GI։äĚS}ő(ŃÎÜ‘ë’ §?ÖŐSř˛ç"ńezŇĺńmB—›Bi-Ż'VčÂOâ\n(‰đ‡âK}™O¸lV$Ě‘ˆ ĂŞ]σ˜Ô˝ żm.ŰqČϏ˜‡ßlţ,d؞‡vؐj÷0ËĎń60ĺŤőŔa¨Ŕ*/–ÔńÇůˇľ?ĎťŮ(Zś‹"ąŽF)Z)ŚMŐYâËüŕ7 í,˙Ž>ëˇ>h9ţxx Š‡ŰF\hÂář“fxšl­ Rž2Ym#Ź‚ß˝ęĆţ͛77­ř'l \Ć˝¸ĽŽŽÔxÍ_ö–Uď‰c#r4nH>Ý0{}|Ţx6ČôF…×ÓZhŁ÷Ł%^~y1%蔁ĹhJh\Ž$;cŸ s÷ƒ6B>ŒBÂ~ ‘Ŕëfw%ÎĽ!€*đĐaum† Žŕ ¨=J=ąÎĂœGÓŚMe猚ĹčOtĆaT0&”€˜={ŢڊŃNżagŕÚÝČô3ŇŢĎRż~Q:VǍKmaďŢ} ×ŐS0ÚůĄëΟšîJŽ%W(/÷éO’îžűo1óQçă`qmŽök-ŘCĎ}îł1ó žœ1c'Ěż­ßúÖ÷čcť”Kf  ż˝˙ůĎ#<ş “.˝ˆÎx –CÉÄęęhí{ŒÖÁž đœsĹ$ěÇIœs—Áž#äöĺŰ×#*с€Žƒ .¸€˛Á|@?řţóďqYi)ĺaÔśÚ>˙-ŞŸgá đčjtž`0˙Î;ďdë{8ecäňe—]ĆŸիWŰqĘ) ôíăn)ƒzV\—‹t4vÎ侞lôqWÇĄ_|!u„LŽ5Ő2Żźň*‹~4ř^ĄFCa^Ż+ľîÇ*őe&×°–e”úŸĎďUçÁĹŽD.ő6{ԁ„šłjNwWp-´{’I”Řśmw˘tÚŇĽoqëĘĘQÔđĹ(Ŕ/šä"ęÉčN1„߃tŁvúi먝r…\źś‚I…ď•E;ÖŹ]ˏłfÍĘČa#GŽa§Üń˝Ŕ}BÇŤâ‰ y›¸ƒ§ĹëăyŤôޞŔK/˝D7ß|3ýýď§Ž˛páBkżŽŇÎ]ťhÔȑŞS"_ĹçőőÖŃŃP) mą%Ňá\ ™‚Ď ~3ŮF˛‘ĺÎ}7ď š:őTĘe2qt.ăüνS‹~ čOsçžÁůU|<š‰e;ž‹••Łě¸ ´űöíç†^lzO?ý }ęSŸ´÷!ńW[?[ÇĂQ łČ¤Ă˛=×%ÎeßäR|GřRâËŢL&ĺ|ŇĄ[´`&h9Đŕ7ČŽč–DÓĽĆ.ĺ˜o>FŰíůśH†bÄ?!Ť´‹Ă-Ą‘ncŐŰsŁ\Ťú ŕľđ'žÖîCŸhî ŢŁ'=N9šëujWçyŕsa•ŕâó€ýÓűqˆx´ŰOœčǰ…@FŹ+c_"+ÄÉ|Î-áîăhKŐeŔpž\u‡ű@ţř~ ,LˆśŢLĂqÜO>ů4Ę:͙3›ÚJ6âÄXZô'o8íĂÉ"ţ{…ŞĄťĹ§ŮâřÄ:m‹-!_J|)=Š‹#ô ::JŕHS š˝*XľF°5mž)öcŽßď1Ĺ{H8ÎrĎ|ćÓôýď—]2aćĚéô—żü‰dúř—ąL:őŤŸ%ÁvĂ ×'Ý'4°ć ÎQşBî1ČŒ ×6źÇóçϧlđ›ßü†Ăó ňŠ °€…?ĽĽeTZVʍBhTÁ玘NÍŞ3^÷Üs=ńÄÔQƎ˝`ĂťďŮó=ž<*÷Jăo{Ŕ5Eg€Sd:`-pÝ1ę0St ‰rąéF8'‹ťôčsĐb‚}űöĽ—őů„ÜYę`űöüˆß`”J1bxÂßb”Ri+řîâ—P¸€ē°’×d#ţÂőňűÍźňŠ@'aw¸Śş!9H)ŃHÜtdr]RáźfťwďNšlź F.#ńek$žě= Í­Ł“>׍ź&§óMŒhĹpŠœeź(ĆŮ'őD —‹G‹ÄÝÎ}Ä÷Ýń×B%tTÂeî>x X"Ýč\—ó˜ÝqçÁ9ŮďqéżÝŐ69Î9=ęđ}‘â€L×iĄöWMKü” Ţ/k˙Ž7Îߣ7ŢXšńű č@§0âĘövŔf#Á>čĎȢEgq›Y"1]{b)'Ý->M‡óšĽŠwÚ#źéhŹÓÖźEťƒ B<_śFâKAčˆă ¤@7HľÔ´vrŚr/žyăßLÔk^<]gVĐ řüÖß.^/Tí˙źüňŤôĐCÓÍ7VݘűŃ‘ŞƒôĎĽŰč{OmĽşz•Á‡‡­h3’şd!Q„ëO$áü×[ę§ęŃMß@÷,ŰIw||*XŞ:ĘX\ňă˙„† Ş:›Î`!3Áo‚ÖĐôNłĎ*é˛> ‘¨Ł gÁÜšsčôÓgňwzٲˇ81E­y4"ŁáhȐ!üŮ:돉čŕ˜ö›ßü‚0ęßGńۊŃ6(ŮwúéłčěłĎJÚ؉uÜyçďy¤ Ę~:TĹóáޕ’HŮBFËä6ežzĘóGKÄjÁäÉ“ŠŁŹ[ˇŽ–żý•ő)#Ÿٍý*öó=`ÄŚImŽX6cÔ0‹ÇĂ­ZżůÍo҅^Č1cGŔąĄSŰŮą]”ď§rFë%Ąm v7nťËhŰ}ċ‰8vě˜-Hűc[~Đ Ť|.Ö­[ĎąO"0  ™đ y˝÷Ţűěxˆű>Ę3$ŰÁrC† ćßŰăâ:í“ÝWˇëї8ŽŘ÷šĺ?ňř;W˜tŠ:Jŕ" Á žsSŚ$ţM0…toósçý;ńŽWee%çx=QIk >ÝĄsFFÇľMć~€ăŘž}{Ňut交n}űöQßÓj>ŸÓŚ–4žŔ5}űíĺ*żÁ1RŽÇÍ_J|Ů[ÉVűVź#0l1 ÚÓ\q"‡¨ĹáůƒĂő&ŚDV ąO˛ýŇBŰ1ČQ. !ËÇ9şŻA”€ß†°ĺšă<ÎřăM´]óüąjOŒ8ÄëśŕÉQńË1Ă*{Ě•›˘˙XÎGŽří›#ş_ć.ĺDŰfeĺ(ußȢmÄďźłŠď-Š@÷úëKř9â†L:›‘8DDř LFŚ˘“dtˇř4Nç™’š-ĽęěďŹX§-y îŸpNÁ˝xúôiiŰX…އė_ BOD„?‚dľÖţşě‘‹¸AćůÍŻRŽ?Fşuş 6FžŮxËIŸ•Ü")˜7o˝öÚşýö;č{ßű•ŁvgC aŔ`^Y>ľŰÖšIš˜i.‰C †Q~KˇęđŮ\ĽŽW%ąý¸ÜúяţOŰCTp2›“-ÂŃÉ~ŔëgŃS&{T ŠH|qnš„ZÄ żęĐq{ÜÎ<ß^S˘„¸7Š€ĐąđöŰ+ř9ĄQ“5”ŔçÄ;Ó 8Ň× Éu" ˘‘Ż/^üŞ K&YJŸ{î~Ţ]˂!ٝ0á>Ż)„Ŕ֖ń áÔîI¨ŸŤG´ˇu[(ńőŇKŻđďÂc=ÁŁ_ Ç­ôWŻ^CË—Ż´ż_gľ0+6ŕ‰đx˘ż‚Ç+!BăŇ+ŻźĘÓ°j^´haŤF4ę î1 eÁŽHřr1qhtZ°`>OŮ |h@ÂÔ^0úć–[nć)WÉĽ$^ˆĹă2ČGAňZ÷ 42kŤú &PGy䑇ÍQŃ.ˇ/BÜÁÄ=-ŞĂŁŽƒ˜¸S#h•1ňČÍxW—M›6ŠŘa1sÎ9ÔN8ázć™gh—CřÎRo# íăÔS§pŒˆÎˆçŸ.żüŁ­„¸îĎ<󜝿$*c€˜!™¸âq8B<ŽÇŠŠ .]ż^x)eg!öqśóôÓĎŇĽ—^’°4Ŕ›o.ľŇÇłě’%opŠ.”vu‚QŇ/žř?Çů<ůäظGIĄâĎXž|EJ'4›.~˘&íâ_ĎFü…X€ĺđيż^pEŁvwçQ—`{ýő7č#š8f´0>ť8g(]‘ŒŽ^—Tŕš!ŸŔçšŘE]ĐꚡD7žƒŘÇ˝{÷Ś–ĺ _ś ‰/…T8¤?1B-\!Š _œ´˙ėť2œ%°˘B™LÝŰÄ1řŽCЃűdMu5ŐŤçAË݇Űůp (!ŚćAüƒ×źÝ˜NđŁ÷Çšßě\i8…8=TTĺ8>űŹQ´ÜYİJ‰™"ڰv'Š:Ů+˛ŽKźx)8çœE,ž@l˙ć›ËX\ŠśŞř{9Žƒ_{íuu]Ěßkt\w¤ôpGă§3ĺ–-[ićĚ­śA+WŽ˘T8ݐk%rźěnńi*œ1'ÚǎÓ*V@œA2:3ÖÉ$oÁor \í!¤„x$žl_ B÷@„?‚Ü(Đ0Ý×ëŚĂĐIŘɅĄ^3÷*ń)€Ĺ¤ Ď#”6E’‰dľ ŘúÓe?"9Dƒ0#ŚżřĹ/éë_˙}÷šy´äĂ'镍ä)ôr)ŽLéŒ<рýmcÝő™tęDsd*œ~ ú9ýô* #şŃIuПGF8“}rQ %ČY3‚œ: ňš[ }J-VwľđŰľkwp¤#Q ęDŔńe͚ľÜˆ‹äID7°REĂÉśmŰ9Ů>ŸW%K§ÄźA Fó`D–C'…ąTVŽâG\“óÎ;—ţóŸGx;xDÁ śƒÚHœőväá3Ý]9óĚyę<îať~8ń ą…ŁœŒpN!pr–h€:ž˝@­ó÷Ö[˹э*a$.F:iA>7şź—ŢÇd–žŮŔ9R Śq^¨Οm|~1Ę )ű÷ďçňhř|âź`Ä5FĄTŔ5ŃĎńŸ ŠľŢłč,QĄĐq ݈! ;rZˏ3†::)–-]Ć!şT„§*ć ¨Œ0557ńßč`nQ ü-şü  ;zPÂíŒą€Ć§â“ROú˜JH ăgœ1›… ˆ5ţńą€÷RÄ݈@wäLŸ~ZBá7b8ŘěÜš“6mÚĚůbQ€ß’ ÎdńrGyŒďĺˆ' rĆ6p/Ç6ŚL9™Ö­{7អc`ΜӹC#ďťďŸ<ŇB"Ź8lŁÓ4‰Äđ]ä8>řçČŁ3oc4Î'\cŔi§Ú*nA\GI|{ěqš<ůdÎłđ}G§ŽŁŰ!ä׎Ań Ă ůÎ7\eąŽÁƒs<u ÓDw”Áşńź“lÄ_Ń>yňIjš ÜYˆë…ý@ŢŤËébä;âč‘#GÚ9DŽ‚˜ť¸¸HĹě <0ŕß˙ţţĐš‡řçŸK\{\ŁDtôş¤Ÿ\3ŒäĹuť÷ŢđuDC=~Łń™Áľä’Ţ곈Ň'Ý!—–ř˛ç!ńefdŤŹ=îĺË5Ç.őç(ÉĹŃR^ŚŁM,úoi­ŠcY[uŽÁŔ=ť|W‚[z:΄ÓO“ęŹG›Huuľşˇa÷ˆPÚ+Ź…?ę˝ú˜–ęÇhٰ=Ö:cŽŐq íT‰Řë$#Ú~@‘}LNOüńƖE3ěőC”Á Ź_(9†Xż÷˜œĽÍœç§-‚ŠÎ÷ü‹.şžzęižoឍűÜScỌ{"ÚŠœe.{ĽsJGGă¸vĂ͢śśŽŰŮ/á>ŽŰHŃžą+’ĹRń›âZݖŠöS-8éNńi:đ}ÂyB,~‘ýër#_€ ×ŻŻX§=yKź_€Ä—=‰/A„?‚Óý„h ępßT]Ż’1Żtçĺű‰TGH ˘˛”;pQP=G-ěTÂÎŤąŽüÂŘŃ%Vâ‹çhН:u ˝óÎzŕéškŽŚŸ\>™füh …  xŠÍé_–ňEŻ:ćP}€Î:Š/]6ÇIţóŸ˙R%2ƒUP?•­Üăvô9 ĺ°m.×ÍNłłQ!s†h¤9hžßŸç‹MRÉpDľ“÷Ď7UźZÍëÜnwpűŃŁ<Ňń‰O\›Qŕ‚ç‹/žˆž~úNp€%JÂP˘ă /Hhé~ĆsčŃGˇ…'WŸ˙üÍö9EGFT`;şäŚxЀÁçwë çýꍯTĎp‡*Ë1цŒříČh&€HhÄxőŐ׸ńBÉěsKJŠŮé§- r{ČĎĎgq—ś}ňɧů3tÓMŸĄŽ#–/~šŞŤk¸á&hěéˆKč8řĚ AHčţŕZ š‹ĎĽbO—מ?C„ĄAť# LMuM5•ŞX#iŃaŒÎ t̸U<ś\]Ô6¨ąÉỏD7´Ćł|ůrę(z”mcCÔáÇíöß-Ž?耂ű(âŐŤ×śZŸ5ş9 tĐŕý‡cô5řä'ŻłË!Á9÷hÔkâžŽÉ F?C¤LřP& ššŢ–SˇŽŤ!bżř⠏ŰČż>}ĘT§ĎyôÄOąđSŽé“|Nс§;ń4čřC‘Ź3,×%\pž}ÍĐŮšté[ ŽĂËçźłóˆl"ńeĎAâËĚq–*j/ú7ĽYÖ“GýĂ<‹XbĹ&ş„U"˘Ž7Ž’WŽRUŻxÔď:~/ă'í¨Ží”ąOÝ"CÔŹâJ~Cđs說˘ĂţÔÔđ2Gű)âˆp‡čśŘÇ*ĆëwœƒľŘH/ç1ĺLqež˘ŚVb JęqŕF„}׼Čŕ҉űžxÄ9Ńâ(źćĹ:DZ¸V9TţräČÜ.†1(ď‚ăƒřS<¸ż Ž9ĺ”)” :‡ŕs†8mœČSľ]"V;ďźsč_˙z0é>ŕř1áx!XÖ%iá"ă,]Ű]âÓL@ !Ť ÚFŰ$B:ŠŹłšăëd’ˇ€Yłf¨ŠűF:‰/{_ ‚‰!:ů\1ˆťś“oÜ$2ŕÎb ‘ńđče) P°%ÄĺRÁŠ$lŐaßÜr”Š˝…1B-ţÁHf×ďżż‰–Żx‡fΘF_^¸~÷ň>rĺľÁőGÎ%+ą•ilĹBęđźyaúé'ł€çÎ;˙Źňűą5=ňăE?ú˜@$żˆÜ–ľmJ ”M37ňÔyŽ„Íçţ|Ÿš؆ÇKÁ#ÇhčŔÜů$ő;Ł Śő§>őIŐY˛žGa;vŒÝaPč @§L˛ďżâŠąÓĚž}űř˝X x”őŇ`ô.śƒQ7HœŃDBčÜŠŹĹ#:z‚Ňbž+ŻźœG´ ą#ĎpŹż óŁxPž"[ŁeľƒhŒn‚?ś‡ďś‰Q,X&›ŰLPŠŠ yôh*Œę¨ĐŠ-ŕXąř˝y÷Ý÷ŘéŸK4:a?tc|†…ă ž÷’8÷ d´LnăuĹZ)B| {Ű ~cYđO}ŸŃpŽ8׍:e\ę_8âךÔý Ÿ†úFá~e–KÜYŘ˘ŁčăkhŒ }—{)w:Hş+ˆÝĐąŃÓčÜĐĽăâţŠŃžˆ'“×‘@ŕ¸t §Ń€{5\~ŕR ë}l÷xÄ7č0A „6“}­ŹĹŰˆmÄčdđëBœ„‘ČÇ{0F›_s͕\˘e•°pŒ4hwZ$rNŇ ĆÄhrtfěŢ˝›c0”SèrœGźžL ŽÁ6pM‘ŕ|›ą“sžĐY–ěH|Ůsř2s:ň™iԎ?ýX^†KRáĺhcźŰŒáôú‰Ѳ^ń~ƒXäŁţĺŤß4tÄaŇÂ-vÁ HĒxâFüNáţ°_ÝgXœ; BŰŤ'ü)PëD|‚ç}Tl˘…MJ{ázăźÁmž¸¨ˆ6eÄ(hoNEgĆ: QނrÔ$9lŘ0vœ'p!_ö$ž“L搜 _seđčJňˇžÜŽG=yŹyž¸ ŻĄÚ—‘łÄ$Œq ‘ś;ERÓ¤:+Â.´3÷!ŮźřýH2ѐwך”օÔtŹ– KŠhăúÝôŸť^§Ąc†ŃřŃCińóoÓđIC铟›ĎAf:<‘}ěč‡ÔˇO'GÎÎ{ČB\€Ń|÷ťß˘˙źş†ŽüăZň”§Ý†W5‡jšč/CßťjBň{Ý4ő[Rą7LK~x'ľuÎOüĆă´˝ÚCn/FŚ$_§ĘiŘegl?ƒ6ü߅”WXB˙űż?˘yóćŠ`},7"Ćë8œCŒRýkšQ1\­#ŔŽ=‰ŕ ĐOüă-Ú°d3Í\0ęšč˝ďÓ9×L§ŮgM¤Ćş&ňŠ$řţ:ş~`>;­ ńˆŻL€OwpAčn葙B÷ňÎR рZPPȍ޺Q_ßßcĘ$šŰńeґΠbFçsýGœŁGŃ›jéw+űPśŠđĽ‹úŻ Ìâż_{íuúÁ˙ümÔ;*°yîšgéśŰnău4ü˘AßďóŰ1k(lvŹ ‘ bŸ†ú.ÍPW_cóևĺ:ÂK/˝ÄĺÂаóÂóĎđ<4źoÝs„ţQu6e›"O Ý{­?Ÿč؉bÎLbO‰;AڏėݟŢ_śĽ 2Q,ŠKŕźůćÔ.ô:q|Žuk! Ž"”˘Â"ňůýŹ#Xbvɉ8n’Ź›Lń ťő¨xßO ŤUąŰփ~Ž% ě{¸ڝÖÖŘĐ@GŁý*~E9§*Վç”ůBÜ_ň ű_¤âS~P&:úWT°ë‡hÝ0’8Ś;œ×ą?>k`b[ˆ‘‚j Cśc- J"˛—S\~š›šX„€öĐŁę8X|ŠÖQ\RÂm§}ÔwÇŽE?níb¤Îân”ZÂ1œuÖ"Ţ/-–řS!űH|ŮýÉĺřČ}¸{ŕ÷ű`Ō łÖz ÇM†őqL†ă1~˘$§zŒOZGqü„4h;ÚüŁ‡ÉŐJô|~‹WB*(đłÍ­Ă …!ryR—˛ÂčOaŐďiâd ˘SřŁ]đˆQœŰwěŕůĎ˝ť—°.#SˇŸôDks§˘ —ĎM[ŤiÍöC4kR ¸Ć(ÖDN?DŃF 4¸‹R(’z76„#|.ńGžÚŢąůÜo•ő20ÚÜŻÎýž”?â”V7RAářƒ†LIœť7-%t>!Œ…0˘!úšÁ‘­Ł@TÍń›Ëě4AĚëőy­NâR8AřŁ:7 źŠgńOęmC”ÔQ´p¨Đńĺ9Łk\đA„ăƒÄ—݉/ŰFť\âůt{™C7tTE -Xi-tJ$™ÁrŃŐĹ;ŢđĆĚR_jýxôz}źŰŮĆ*†G†ŕŢh 史hÎx˜ŕ$á —řŠ$ř˛„X.k{Ř1ˆł Ţ1|\I{FxÄ1œ‰ÔţĹ8ýŘN@Flύ-ďĺŒąĺŹĚmĽţX†7ćSCŻ“ ‡XTá­őś,w!K"n­ŞŞbˇJ]Ţ óg&‹+q p~Dě[h9卿ľ&F˜“äý\rŔíâR_d›0JŸ…”ďŠţDWÚJôƒx4śE?-áÁ…âKřÄçA˝Çí¸ž.‡CS[Žą ‚Đ~$žěŢH|)ąˆđGčŐ¸Ň tČtüÁh”áúсښT‡ŢâĎ÷Šář&ŸÇ@Ńa~Šżý^sđu’ž$žnQę$qY#Râ1ĂmŰžÎ?ď\zű>úŕˆ >üĹ<"§ ó§9˛&Î"—2‡Ď—×GŻn:L_WϞ=‡6Ź_O#FŒŕÄÖ)‰&ŰęXÉ3´€BM-<’%Ő!¨Î%ÄT›Á*Ď+đYvźn‚qĐ`ż×śĺAr4ÄJâÜ=)t*„ÜĽŮČS9aîd@ŒWRZÂóń7:M @íečĐĄ4|řpÚąc‡úŤOĹ[n—Ą;ą¨îÔhi1Ë}Ąc#Î=÷\ę(‡âÇRëxF}7D¤Śť BOGâËî‹Ä—m▤´E˘ŰçP’ŠČvÎւsuą"ž×j“ün[ýă~Ăë7¸-3 ÚîćěnƒďŹľN´áé2\X1$D݈źWMMÂvR'XJfőďߟ]*ËËËŠŹ´”ËŠůšt™+ĆáČŢ}Ţti-Őžéa×öčůą(}6˘FBя-üAÉ0‡đG ¸ĐţąĘĆĄ$˜ŰáöăśJ~q)4Ë}^Ač$žěžH|)ąHoš 8p ôs3!uŃŐůąĺžĘű“Ą4ä…čü@˘Áčbő<Brśěd¤‚—eŰd9ú8Gdëí7Yn@‡äǗ×î ŁE%€ůčŘ vƒőzźŃhLaˇ!ż—V쪣C‡ĐŔţýhďŢ=,üÁş‘˜:G—ë䜥Ľ™\¨‰Ö˜~[OÁĺÎ@^œă`˜ź^Ů@‘ćę܍<ČŹKn)zSjgA„Ž÷PŒžÔ÷4Ą{€k&˘ÚîAKÄOrłűŽßí§ĄC†p§âŻÍ›7wHř.źđBúŮĎ~Şâ;żÝ! bG̋ň_-mhĂű/˝ôRę(860|Ř0{:˜jĂ]WÓ]A8>H|Ů=‘ř˛}QVpšlQ D'Z4nęclŸXˇ#‘đÇ\N˙a.g‰~Xü†#6Óíh‘ƒĂŽSuš/=Ą„,ĘĆbJ'úALZ\\ĚbŸŠŠ žHĺ}űĆ~Î î=TˆvF”ľXƒš†-ńˇŢxń-Œ´˜Âxő¨ËÇhqÎAXV‹~¸šUęK;‰{ B×!ńe÷DâKAh|#! H@1b¤¨¨‘ň_|†Œë?KMÇȟç'ŻĎkŠR\y|~ Ećd^::ilšÉŹ3ŠŐ‚#(Œ‘ 0çż˛ńĘn}iŠZíż˝^óńޛfłhIż†’e>×ĘŢӋc¸R—×EGރ´rëAş°?•ŒćŮu´ă6úŘęŕôă1Ë0¸ŹšŐ ÷ „Ôš4K‚Áé§" ľŸyů^Š¨Ćƒ‚žĹ|ä~<ídusϡk`ÇŻGA8ţŕŠĆN]žRČm0eŤƒAčt˝5 ÉďółťbĐ Úˇ?mÚ´‰Î8ă ęˇÝvÝqÇtěŘ1ţ;^¨ŢVŽťî:7nu[ř3|¸=Żą%LŐ!Šë.‚Аř˛{!ńeűÉÖ(v.ďŃO(Ä킡 ĺĆ­ŰÎâlŹšÎ˜Ďź¸(Füc;‘ŁÔUŔvƒôđ >/§?XÎešî˜Ž’[“ ,Ď€iČŕÁ4lŘ0\QAýűőŁ’’˰P=ÎąČeKD;óXŻ{Řyˆx€gl‰˛Ö%Ďl1T‡$-ęÁoSss 557ń9Ŕ<|ĚA˘ć9Â2|ŹsŁŻ‚×ţ #3ĽŰ“ ‚u$žě^H|)‰q“ IŃ#Op)/ďKăű÷Ą–‡¤Âň"rG‚”ç÷°; 27ŒAh ą#Mę›9hłËŹÄ'ś.`{ŕŔ~:}ÖLjnjb‡ĘóŮÉiŚÄ$šjš6a$:~¤ĺôŁ~T'Q˙•L† reXôË Ë"ĂCŻm2Ë,œ*Vós[ý`ä+-¤ŕ˛7čo„ŻIYY™ˆ|ArŒČşr­şGBĽ<ŞZSYYɏ+VŹ ŽŇWuŹ|÷ťßľ˙v–~h+ĽĽĽôĂţ: „ćkÖŹá畕Łěůč`9ÇA„Ţ‚Ä,ÝšVí⏎NůxôűՔÇÂĹ=nˇęR_É'Ę๎ľ°&Ě%XŃśiśo†c&ÝN¨Ë€éýL%vAť–E9/8ZÂĺei‡ŠiĐ A\ö îHöą:Ž=ßy>Ôk(ŁĹî:8–‰÷>îXl_çąRbяvűËQ€Ý~šŘ5q+^ó8Ęy‘Ł,XçÊ­ńŸľzżA„ŽEb–îƒ\+AHŒ„^C2qHüüDË!ICgĹĉhŹ –•Ť¨ ź\%Š,m ™1GŻ„ aÄĽÝ2TžŰâ6MˇâĹ2°ƒĹźťvs‡ËŇ÷vҁę;í´ľŻĹ÷śľ˜p˜Ü; Ä(CÝ×ě&Ÿ—^˙ŕˆz¤ ăÇŃöíŰx˝Řw'Úń§1‰“tՎC•›bŸˆËM`›Łźâ"2˘Ńű?¤qăƲ•Żł4› ‚›`†$dšŽ‘Xäv?úPCS‹ý÷”S&ó㍯žJŮŽ?×\s utdüóŸ˙¤‘#GRGyűíˇŠĄĄÜ*ö›<ůdž‡¸Ů‹đGĄ7!ńe÷@âˎśĆöNÚiÇcMZěâvť˘mh)E?qî7ŽRW1ď#ŠÎpŮ,ÄfÖÄqZ+‘)üÉĎĎçÁ–ÔAĘwažvŇb¸ů@č3zĚŁŚŃŁGłŰœ úhËy-÷ uüÇńë ëÔeÎČÚ÷ˆ˝ŸŃ}ľ?-}FFb§ítĄÚE!úÁ#œ#p^ľop6Š-őOr[űŠcĐÇ!ßA„ŽGâËîÄ—‚ůfBœ% ƏOľľu|o-í<Œü……äՐËSžĎC°km ŚĄ˜łDA7á˛H‘0öéۗ˙^üŢ>˘0ęNŤd”ÚFźĚĆíp#2,‹AĽůźC™JgX0ä÷Đş} ´u×!7j(Ű×b}ŘwmEŹË–ṉ2Š&fđëáěq vQň¨#Ž„‚äËCĐUHĽOÜOCĆTҔ)“íd9žLÄ\Šć ‚ Ů ¸hmll$!÷Ŕ˝×Hč~ě–ScÓűďÓŚžĘ[ˇnĽíۡŰ@íńŇ_˙úWŽő}ôQj+]}×]wŃĹ_LŮŕĺ—_ćÇącÇr'ŕÎŁ@Ĺâ22ZĄ7!ńen#ńeÇiŻÓbüűMWëŸAqNJ^ę‹bŰăÝo"ńŻťZˇIZ;cŠaT‡\mĐś‡R] C†p[(օ¸S’„C>KUTTĐľÜŕÁƒy0`_KôĂ岏6ȘýtěŒPɈŠ˜´hÇéH1ĚÉ^™[ę+WŒÝ~Ź_ř=jRSsS3EÂň°Ó’šx?-Q“ž´čG‹}<Öë‚ ÂńAâËÜFâKAH!Ct2ÁIuu Őżü8ő™˘’¸ý †U’ŚžNěTćQ#şlUÂuĄ†t˜(œo d´8˜őŸĂ´cÇv:káBžˇdËQR™"”ió~§zŃRâT@řÎ?Ž:ÝŠŢF™ă˘@M„ŢŢz…?••Ły$‹ĎgţŹčăщ:܍̜9( Ž?-Au^CäË3ƒŹp H%ÆQá§ĄűÓŹY39iÖçMbA„î’3üvŁ“^ČĐXŽEťB÷Ł*TÎnŒ-.ဘ #UUUôŔСżýmę(řŒ<üđĂô˙÷ôă˙8ăďđ 'œ@˙űßéôÓO§l€ß|ŸĎœ5Þ_ßĐD{Z’ ‚Đűř27‘ř2;tTřż.ŰÁĆ!ú‰ţąÂr gô<{NŤ÷Ů šˆK‰ĄľÎ)ráɚ —ăRwƒ+*ĚR^}úЈ#¸}Qˇ'j\ŕŠŢŻźœĘűőcgvýx˝śč'ŐůŠyÝ劊xÂŰů'bš‘ĂőÇéçř…Ř킟†úFŐYÜdťýř­Ň]xôŔ‘Č!üqŠ~|–đÇm‰˜A„ă‡Ä—š‰Ä—‚)ő%”Ţ!Ćů7Ň9sN§áűŃuáˇUâ™ORI¨×L ƒÁHrŏ˝B•(† ľz Jb$˘Â‚|Úşc­Ţ§Œ|ŻUš+3ĚE#4Ş_úaEŸ|ĘDđ㱄×ç§ŢŤâżO›6G•‡ĂNvíý°’ę€×oŠĄŇ­Ž?óüäšU'VD%Á…eô ×rYZHgœ1‡“ýd˘ŸLÝ~A„ăŹÜ‘¨ šŽމĐ} .ÚHuuőü7ÜĎ^t?ż÷Ţ{)[ ŚúÎwžC|đ}á _ Aƒ%]î´ÓNŁ;36lؐ5Ń@™Ż-[LwŁł-˛çW×5Ї-$‚ ôN$žĚ-$žĚŠËpĽžœ%śZ—ŰŠ$_˛u’#jUžËQş ňĤî8wg.ă…ĎĘ Š .ß5iâD:ĺ”Sxš2e O§ŕQý=iŇ$7v,—ü*ďŰWľ™šN?Îr[z˙cŽ×z-bšď›ÇŢ7§ř'úžHěqŕůB­1ׇT[°Y⍥ĄQMőüŻÁ­¨@ľ#Ł-9ĎrüAšZwźčÇ*ń•¨˜ ‚p|ř2ˇřR2C„^…Óöľ=ďx?jHžyć| ^Ś˙-Ř{”Â-”—WH555fYŻŚ&ľł?ůEä ›nGŠ`ǟćšň¤ţů}ě9x͛w[ů:’Ú‹‚AŽHÔđ;,śšÇŒ’‘‘2=ƒ­MChdÍ{\&œ{î9t˙˛HçŐW_Ľ Pś6lÝqÇtűíˇÓŞUŤčĂ?¤p‡:bĐQ3|řpę &'žx"an+;ď AĄ÷"ńen ńev ¨6Ž˘[ż |A9ŞP(¤Ú ÍśEĚs륃1"˛Ú ŁvćąíІ=~Đé¤Ă˘Őî1 ćůt‰+ŸĎtłąÄ.Î69-~Hńd‹jÄ>"žĂś!–Á:üşdĘaŠyËĽo„u–˙rE݈âD?,üaÁOÄŇů8~(Ëz_(b÷öŚŚFłĚJ|Š×Đ.Šß% ^Ä#ŽÍm ČţĈ~,ç"źÇ%ÂA„ăÄ—šÄ—‚9"ü‹xQP"‘Sü{ŮłÎZ@K—žEÔn¤@Cí,DM°Y6+Őś°Žp„\E%*Ą­cg$vHá˜çt؀y'ŚĹßőҗî_Cv4çłđ&œÂţ‡×Ż^ďWěĄQƒĘŹ}Oś$ŃŔŇ•ieRHĚŤ6jV‰u¸‰>sÖ`úţGO!ˇßT>—••ňcĐj˜pŽč1ŠŠů˜S&ä†é$ÔÜ p~ŮFg5ahöěYÜŃäýˆť B÷ ;ëëëIčz b–šŘ=‡]Aރ`-‹`p]GŽAS§žJŤWŻáŇ\Ůţhđý>}:O]Áśm۸třčeąç­ŽĽ[†PXĚlAz=__$žĚ>ŮčhÔmeö $UPM–˜]˘31尌¨řĹZ śĚWœđGˇ×A¨Ăe­Ô#FçkLj[đşĎa lňź,V‡G”ĹŠ¨eő~`Y á=ŞíďqAđCVű'e†YZËĂâ9E?sҎ?ÚĺÇv:ŇĎă\”đ^¸žŁ´Ü~š››ŘÇ G˘˛˛2ţ^ގc}ü.sgXäľÄLş\֧˜šÝŰ ‚ ä__$ž„ś!ÂĄ×ŃןtâŸţýűÓŮgŸE+VʤË\{h¸{+móO!ˇJŘ Œ!ˇ?ńzÉLž}ůä1mq ‚<žxâúůĎŠ:iÎT)ÓhÁŠciՄ úĺÓďŇžŢJÁ€—ź …$ű­ÖˆPeE>őíSlÔIäřc=ö/É'ˇ ´‘4iÖŁvBľÍ4Ľ˛€~ső4:󔱼^4üĺ/Ľ~ýúŠ›pߌ]q#‚|j>ä@H’“šţ<šG5—ÓÇűo§…“úÓŔýiÌé,´jŤčG„@‚ š 74r"yYˇBç‚óű4…žCĐđŇÍ#¨ôŘQ:ŘlůÄÇŻcáĎ+ŻźBK—.Ľ9sćPw&üNŔUháBSȄŃęuuuô^ădA ńe×#ńeçQ—A'c|˗‘ŕuíXq”˝Ňn3şÝ.*rqČ{¸NŻ×ˆŮ@Ěű´ăĺb“‡:5OĐ‡ˆĹ-dŠ{0!Žă’Xj9vŇm…1=Ś;:ťƒëyqŻgrü8lĂçółĐ˘ĂZ7‹~t™Żř’hvi3Š-D:łÄZ˜ ÚáăĎˣҒţ@ôƒżľK‘Ţ'—.őĽŽ:”ą>¸a,ú‘6MA„œAâËŽGâKAhňɄ>ŠÄ?H`çϟGďžťA%fďј˝/S͑+ČWRFĄĆrůZ‹0úٍo!ů￟Üç,°UĂX’a$pˇYťv=˝ţúkôٛnڞŇúÖĺłčŞYŁécXJëv4‘ŻŘOÁpkŸ$°‘P&†Ű—݁źî䥾ʋóH­Šjł$Č+ńV˜˙Fęé;—ŽĽ^qš:.łSé˙ř'íŰw€Ž`!TŸ>}bŢ[ZZJǎUÓŔőoсŃă(č2]}âXCíŻG+Œń9eőĂTqŇ;v4vÚTť!"žx*R-'‚ ěˇŞ7q06věAČ$p¸w444pŠHĄózŘ=› •4Ąnôă‘Ô§žz Mž|2­_˙.Ýzë­´rĺʘ‡îĊ+čž{îáçżîű8ŞŤŤéX¨”‡ú ‚ h$žě:$žě\jkk3ZNˇrĽćq‹.3Ĺ‘Vžxáý<đ‡+–‹ \{° -úŃŚËŔuĽźšTű'Ä2Á´jŤÓŰN0?Ą¸‡żŐ–čś\ˆ€.Ő łűzÄ)ú!-–˛&§Ó&~_ˆššÄWwCřƒőAäÁ&´‰âřą=ÝîkRÔ!ÝYś ë‚řǕč¸A„ăŠÄ—]‡Ä—‚Đ~Dř#ôJÚâú“ly§řĎŃą‚?:UŠ^}œvOKů•ă¨éX5†qŔ›–Y$‹…JŠéŠÇi\i‘J‚Ł71˝N¸Ű ´„pĐšűŽżĐĐĄƒéškŽŚ1Ăћß=‡ÎţŮËôöőä+Ék-ţÁz"!š{Â@˛v’)z\Ö—ýJéā´|gÜynr AôAé„úFúőÇO˘/_t*ǖ­ŇC˙~ˆG]3š†Făƍm•¨›5­ ŠB›ýţJ>u#ŐŹSëđ˜î?„„9Dy%}ČŐXKĽO>H}Őy™6í4?~\Ě9N&ŘénBžľk×ŃkŻ-IúşßďăĎ„T'œ0žĎo.ă‹/žLďżż‘÷ď–[>óړO>M{÷îăç(wňÉ'‘ B[(˛FB˘ÁvéBö@#7Ýe”L×ŃÖX3T‡‹iW`0•>Jƒ+ĚđÖ/~nţÜ-´fÍşăŽ;čË_ţ2u7ЁrË-ˇpg̉&ĐšçžËóń÷á#5´ź~ Ůă‘GŁÝť÷¨|¤]ý'HĄ;#ńeç!ńe×ŕÉbš'Ý2čl!ÔB§+-čąĘyÖ;l‡đ8aPŤÉrśĂ5a´ďYÇĺ˛DH,ü‰ßádí`mhăöDËYGOŚ›ŽÚՖB™ŻPČrü1υ-üqOĚsv а`I‹~0Ą#ŕ7‡Ý”ÔÄNFu[r:™ť-яß*÷ĺA ´6 xAŽ_v_ BǑo Ä‘ŹŁ&™řGĎÇ4bÄpęÓ§Œ–,yƒüďžM[ŞPəs)4óâHŁDˆ‚kÖŃřćZ:yúTůču˝!C†PEE}đÁÚźůŞŤŤ§˙ř'ôľŻ]U^űÖŮtŢ/^Ś×ŢŻ‹˙`-!őԝ'ćyîIc8lpýí'ô§ĺ[w“Ť ´ňÇý44Ň]7NĄĎžĚ ňŚMĐłĎ>ǢŸĘĘQ4a öq8ύ>Œp9ůäITSóm}á%ňĎ?›ˇáńť8_÷řˆšVo QﯠbŐÉ0oŢ4hĐ ˜zŢŠŽW&ó2y-W‚jŞf§¤-[ś˛›ŇœG%%%”ŤÔÔÔŘĎ1ú^Ą= ąĂ=‰3Qј*´8ća”ŒÝ*ô|V4œ@#ň^§~ĺ}řşC”}ŮĽĄG}ŒžůÍoҙgžISŚLĄîÄ÷ż˙}Zľj•Š]ôĽ/‘Á‘ŁÇčh¨˜ö ‚ $CâËě"ńe×R×ÖÖ.tű+pŞą&7‹R\­„.Dąn>ZňŁ[D:Y˘¸ÖŔ"ź†ďڐšđŮA›œ.V Ś"],AŠŻl EN8Vă Ěeq‰ŻPHíŸÚg8ř˜˘ŤŹ—Uâ+Qůݰă8ëŐq˘= :€qŒč Ć1ău{pěv)™mœˁ¨Đ* †v^.–ČůHAČ9$žĚ._ BöáĐkI5ť-â=BÜđĎ9çlzë­ˇŠčč!Úüˇż HůĂ!*PAžşy•—•Ň¸Š§Đřńăí÷;×°.$ƒŐ 2˜Ö­[Ďóő‹_Ň×ţß×)ݰˆ^úćŮtö˙˝@Żmj°Ĺ?xťÓ¤ÁtÂpł#ÄíN%„1Óŕ…“ÓOŸÝAĂLč]ŃĎß>{*]żđ$޸=˙ü‹TQ1ˆ]‰ Pr6ċtô91bq†‹J׿KGżšZšŠ!˘ŰK݇&÷-ĽâÁj§łŔĹŽitż{†űĎTő98p`Ě<”z;vě‹~›h˙ţôŘcOĐľ×^łjçE‹Î˘ĽK—ńľCy6A„Ž€D“n0Ĺ9°ŇGĂ1gĄwQ*ĄMM#)ď`>„çÝxă§iŊ•´{Ďşćšk¸l:ş/žř"ýä'?áçת}‡ă@ÍŃŁÇhIí\A„Lř˛cH|y|ČÖ0Ýf‰ĎŔúŘ­›ń7Îr_F|‰Żż h=,ëýĄT—˝ÂdXő˛đŮA;ž‡pĂÁsˆŠ‹Šě×:Ĺ1ÓrŇÎBKńŽůd.{bE?ÚľČtúiŚúúŞľD?püÁąjq“-‚Rż3ţhń•]vL-‡e˝–đî8ě$ÂA„nƒÄ—CâKAČ>"ü„$´Uüt’Š›ýźysYŹ“HĽ:`@š8ńČօ ‰ţÜšgPEĹVZž|%ýügż Ż˙żŻŞ›b!=󵅴đ'/Ńňm-ä+ö›Éh …>2e”Z‰Bě蓜]“qĆsčšç^ mŰśsçÖŞUŤićĚ”‹Œ5’'A„lâłD!R@Fd$ÓÚ:^0Á=ÓgYÄ#az7›š‡Ó‰-ŃX 6É˙ó?ß§ĎßňEÚ¸q#]}őŐôŘcĺ|ĂĘ{ď˝ÇB%|ß§LžLŸţôőökő{ĐhŇáP ‚ B[ř23$žĚ ˛uîŃaŠn‡d—ŤôYÂÂw@?7˘ĽžllácFœPH‹ŘUH}ŻŕäTŸŁúé˛^ˇčÁ~ú3ć×NÝ˝ÄW<řʜwŢ9ô—żüËÁm)W…?‚  îĄ:)D*î#zŠnPíé ľŰjĆ˝WO¸W$ť ˝ŁuĚ3zt%Ýö•/ŃĎ~ţKzć™gč3Ÿů ÝsĎ=9íÚľKĹ@çŠÎ”Ł4`ŔúŢ'g?çŇ9#‚Đ}‘řRâË\'[×!Ţ]ýɎwú1'~…íH'NřcÄ b@–;NX?Şď“>]ZŒKpYB LŮţčöT-úq٢ŸˆĺJd  ú ‡#ćk†ăx"ŚăOÄą˙ř}@f}]ťt=r„ŞŤąHˇőBpŸŻ…?hśÎ9ď8Zâ§яj/Ö.HzżA„î‹Ä—_ ÂńD„?‚†t%Á@"ÁŽ&Ţ%Đ(Ń2:ů52#ůď%K–ŇŻ~ů+úŻŻţ•–őĄWžšˆć˙ßK´~K#sZ_š_Ă`0D7Üp=ŻË ĘŐ­]ťŽăÍjuÍuŹ‹vғOžÄűž |n§˘=ƒpĚhgEűě 'Œˇ+‚Đł‘řR„ŽF„?BŻ'“¤2g h™TŽAé^Ož$ éDy¨yóć°řç7żţ }ů+_Ś>}úĐK__H3ž˙4Ýź`œőţ†”P:  ŤćÔń#čœńĹ4ařú—MçDyéŇe*!Ú@ƒAôs'˛ÚŃ(Ů1%"“cNć”éz;˛L.STTh?GâéLF‘ň‘‹ŠŁ ą~íľ%­í‡áiÝşwU§ÎLš1c: ‚ ‚}>~ÝľT__O>řýóŸ˙äFč˙űßÜpŸ źýöŰtńĹł¨1çĎö3:}G€KUU=üđŁ*N Řó ęƤ/]t0ooźń&­^˝śUL_SSËbGthŔšRÇáŘÄ@čüŘż˙wú¤ę$‚ÓĽ&^„ƒ8÷Ĺ_ŚÍ›?ˆ™ăÝťwOňŕáVšŠ5kÖŇ믿A‚ ‚ĐSŃâgÉ)ž?;ÚáR9ţ˜Ż;VčŠÎÔ˙°, }Đv GŐ~nGŮŞ‹~ŹrZü¸Ý–‹z-b• ÔP Đb;0)D?, YŔŒB=Ő74°ËzQa!Ç҈]ď@ŘăvťnďÔnÚé§PťýÄ-Ÿk,[öż6ǎUó´aĂűtţůç˛K}"öíŰOO?ý ˇ1:A\şuë‡AA˛…2˙€L@Îĺ2Ĥ*ćÉ ˙̟†j¨~“~űďéÖ/ÝJôŁWž6Ďvwqˇ!iô°3Aw||*6ŘrzƒGd Pë…č#Xô>$:†Dűߖůé^kϲ=aôC3 Ćgă‰'žâ$ôéSĆŁ¸ľ;Fä ÓďG‡:>0Â:§čŁÁ'O6‚вoß>NhŸ{îy*//§ö‚ýX˛äM~ŽruŘOěŽ:§Ä#Ą^śěmn|™3g6 ‚ Bw Ł#“ťšĎÝ|Ç řÝôěłĎŇi§ĆâŸSN9…Ž'wÝuÝzë­\v1ÇĎ~úI;„ä`ôSO=ßÉŮłgQeĺ(Žá ‘ËśmŰš3ăńǟdםśĆʰjŐ~ŽQˈéŕ0‰Ž,tr`$6:` ĘéßżMŸ>Í~/œ€ üpŞLVÂąŕÖ­˙Ÿ˝˙Œ–%;Ď3ÁiŽ˝Śî˝enUĄ<@€ ‚ …D˝‘ČaˇÔŖz(ÎŹ^úٟšQĎRKÓZ3ÝjR\­^”h[MѓA€ ’đa ( PćVŐő÷ŸďŽř"wîŒHwňœ“yÎóTĺ͓;vě0ůíŘoź_^NAą@HŰ'—q×]šĂ‚Đ œśOë¸yó–pů;çýź*4h÷§ú>wćĚi˙¤¸ĹЊŠŽĄĽQźŞÝ~ŞRű×ŇĘÂ+”‚ŸVčŐ)Ҋ9sÜ9ˆxŮç"KJŃQâS‡5źłNšn/úŮób=<ˇĹ –ćK‚ /ňIť}½ň”`;^°â~Ž_÷˘yĹšëMšÝ']÷ŽčţHĚS'úń)ÍZ-/ňÓÄB*ŻĎšž_'ƃB÷„ĺ )Ξ=ăÝ}îžűnżžzęŠlއü˝źw˝ë÷|ÜťîHě-1şöąöƒ„á>ř€?)nÔýF=°(aşîoţŔ|ßŔž˜ĺýD‰m$ĆŃ˝QŏŠ1učXşÇúŤżúëžÍ­VÓ ĐĺňŁc{ůňeë*ÎüČG>ćËżéMoě[‡–Sœm˘­çĹ/~‘w8’ŘI핋âqÝŤ}ŰŰŢęf€‚qm&)2­°¨jşĽţRÇŁ'ţůˇî'ţ˙Ä˝ŕů¸§ž|ҝ9}j˘ůŞO6ůŢŻk/ݏwżű=ŮMóGýÍt‰~ŹÖ9°g?e']ć8ˆ~ÔUŠq:;Śá“ zšůŇĽgüߏ<ň°Ş9´Ž|čĄý€ŮĎýÜ/ú˛¨…?ęhščGtĽ;ĹEꔫS­”Zß4čĆȟýŮűýßXQG^7F ľńŐŻţż ýĹ_ü•{ţóŸ_)R8L&őĚŁH7Ÿů?˙Š˙˝}ÍŤ_í§}˙÷}o+žv˙Óżů˙šĎ~öłîžáÜżř˙ÂýÄOüÄĄ§ţúň—żě~üÇÜýÖoý–˙,‡Ÿ˙ář•öůj˙ţ•_uĎä÷ľ_űZ7ĚsŒyăĆMŸňJń–f Ĺ^ŃHŘ/ˇž§ŸžäcCĹ`ă˘Á2 ĐĹt?řƒßßçĽú58ň żđK~G#ĄđGąŠR$hĐC/uÂ=ů­ÔBƒ%!Zż‰~ޞ´~éK_â+ßůÎwůA éię*nßŢđńć÷|Ďwń´5œźE,ޓH&i$>…Q™ę*uÁť–čĎő&úęOý•‹[Úí%ˇ’ÝS\]Éď!6”nKżÓQJ°Y:5Št*Bř#´]ťŮ}5šüH źľšĺă™Üíg/›ß)ś˝—îŤŰÉÓ{mďl{×mĹVŠ\ťvŐ;ÜXŞ+šs‡˘/âÉÖ[+úÉöšîˇyˇŸľľÜ(›ŢœSяh\h[č‡ţvßýBĹPŠí~é—ţSśżş^x:î䍿ď÷Ťö‹œÄ%ú yÍk^í]J$ôń‹ąYßO”Gńc,ÖŠjłśY1˘ ĂĹ#<ě–”¸\í•řGąos+N•ŕ^|Ó7}C_,ʇ,UÇťŢőű~›żřĹ/úóQB(€Y0ż‘%Ŕ0‰ dŇţažëqĘUMŻúlâ=í 矍ÍMwwö÷SOM&Ґ;Œ:OËY'î÷~ď÷ÜŁ~qŔég”čg’íŰĎ>ˇě˘#я:ƒf-ŤŒĽiřG˙躡żýŰܡ~ëŰ*óĹę g•—.]˜ŻĄýĽt Uśşęä~ó7“›–řŁžó,žýŰż­Ż“nčƇl}MÔŚ'z`rvŇśKťňłž*ýПúi÷Ż˙ő˙ÔWîoţ͡š÷S˙Ťża݁úO˙ivóý5îÝď~ˇ; 6ł˜ő_ţË™Ý,y)úůÎďř[î'ň)E?BBŸüÉçţÇő˙-§é rm'TcOcWĄ˜NOl ‹ÇEƒ?úŁß}ß÷}űŽďxGeŠ8ĹŁ/{ŮKýßřŘŕ˜Pźiiť4 "ńQzş\čŠîžđ}óţâ/ţŇż_źxOmz=UmmžĐŻCOY#ú€“€‰P$úY^Yö÷˙$Ôi6[…x=ýtÓŞÔ_…űOđw(Jźđ§é––—Üjvqm}Ý­­ŽůßXMwŽW珜Ĺ~$ňiľZŮvľrˇĄVťźˇ$ĎÖv.ŕŃkskÓ -tżM÷Š$X‘Č#˙ťăË{ÁĎć†wů‘ĂËłĎ>ăe._š’Ĺ5ˇ¤3ň˘‰čuK÷L#Š ĄčÇŢĂ_k…čǖ‘ (™ă4_CéžsŐý .xIݛŒÓlIČ-Ą”řúŻ˙şяĐvżő­oö"ęžç™3gúćĎú~˘čoxáÔÎW›M´ŁűáĄčÇĐ9­{°ćL¤6†„q§úYUźéMop?ň#?ä~ěÇ~ŃĚ„?“şŐ”¨j~<ÍţVÚŻ7˝é[˛ŽŘE÷?˙˙˙?xsńâ˝î‰'žpă я:pşyŻƏ?ţ„ýh@HQËŻ7nۨm™ÖÝgŇeIô#ˇřĽNŞ—~ćgţc™A4UOšëć7ęň` i€-DçÇ{Ě˙-qPU‡ÖP\OOŠÎĎ}îsţo=q3ĚĹG–Ŕ<ň°˙[ƒ4şá“qťťęŇ¤éś á°ßű˝ßíţÁ?řűeyäa÷Ó˙î'ÝţŔ÷űxáŸřDvóý­Ů ń7¸w˝ë]ňdśQţŐżúWŮşq˙ěŸý3/ šçîťÝżř˙s÷ß˙÷˙ρ›ßŠAžď{żÇýĂíľscË=ť{ÚÍ3GščĽ RŘ| l<÷Üsn´źœ},ľpĄ]ƒl!ĄƒĎ§?ýéeoÝşĺ)…Ž˝Ń ľŐžćk^5t‡ëůҗž\YFƒvűIe 0ď„÷ÔE.ĹZräQŞwsŠ‘t'?erŻžéŽRü㠁ËŇҲżx:ťżčpźŔ%_‡bKƒeN=clŔŔ„VOł• }ÚEj1Ĺ rűQ&˛=ďŘłăďƒ)ÖÔK1‰ŹŰŮŮÍî7íywA €tďi§pR™[7ošë×ň´^Š=$úšrőJnřú×O­{ŠD(Úž% x§áą%­,çűe}}ÝżtݎďçÚ|ĺ+_ńűŁ Ĺ„Uâ90 í‡ĐĹ'FűçG~ä‡ýȏ<ňp9ý î'Ţ˙ýCÓŞY›•ö5lKŒ˛ź˙ţűüßćŇn„ÂřO|âS•ý)íŻa÷`Ś…T_L“Ś!΋=ŤĺŞÚNłżĺüóć7żÁ˝ç=ěţíżý)÷ă?ţ}‡F3ÍŤCXu’•×ř7ó7łNíŐ2˝—ڇ˘Ÿi?Ó°Ÿ’EýˆGý‚ ăîťďňŽ>ŁžŃąĘsŽ_u7nÜđkĎ>űœűň—÷óőSˆVtłC˜+PşĄ§ď•w{´s,Ň Ń(TFűC˘$Y)T˜gŽ*&édŁ_ܺםĘâçÝwŃÇ?ńO~źśźţť˙îe7Űż5‹!ŇýՇ?ěţäOţ$űümî/xAv#ţGÜýĐš—źä%nZtó]NB?˙ó?ď~í×~­tŃ Č÷}˙÷ş˙ęGţoľ"fĹŁ˙äŸüß{ۧáĆM÷™Í—;DƒxŠë‡qď˝÷–KüłŸËË—Ż”ą§âPĽ-0âřSmSÜ)qWäÚŔüő_ŚěçÄiž×:Ż+ÖĄý`\˝zľ˛ N?°¨ÔǙ˝Ô[VÎÄ2I!˜qĹ}D‰^$v1‘„Ň]•˘ŸĘűšýÓâ"şo¤ßg1ű,1Ž5l=JŚ&7šŚ´ečö™ŕÇţv=碆劽Ź|7ÍS{íloťÍM yrÁÜѡłm•čgo7wűŃö›đgwwÇ;I(äĹ?Ů˝,Ĺ5Š5neąN7+ݏA˘S&j’xGN?ýąL_ŠŻbŸČ•ćTąl™ćŤÝ.…PóŠ„Öř‡ďńűíçţ—|j­‡~ČÝwß˝#ăM—ËĽqš˜ë î'Žj‡ľyTœ)tLĹĆĆf_şŽç?˙˙đŚŇŠÉyőńÇ÷lęĄ]í‹PÔ0kˆ4j˜Fü.2n=ś\•Đ'žNłśŢwß}î-oyŁ{Ď{ţȋţń?ţ1/ú‘óD@ayĄ:™z2Bƒ0׎Ýtwß}§{ë[ßâ;"V6Ősú¨íŢ/‹&ú‡WżúUî[žĺ›kŸHŃ`ŠŇ!|ć3ŸuO=ő”bi\Ô95tób–ňmnßî=ĺ]eÉ–Qz„?0ě'N< >xëĽîĄĺ÷şŤŮ ëswÜ1Ö2şIýoţÍżv˙ř'ÜĎ˙Â/ş|ŕƒŮÍóGÝ?˙ç˙Üż|đÁ,Î|‹űĆoüĆěćő‹ÝK_úRoűŁÁ ?>ó™Ď¸O~ň“îţ菼(Lů¤˜âťżë;Ýüŕ÷Ý>Ą__~â)÷坻ÜÓťÜQ3Ęó(°AˆaŹ­őĘhPeR$*×y˘ 4¨6)ôHřŁeĺĆóČ#—ó>ýéżöďJůŸ_á9ôżń[n\Śi#Ŕź;d§Áż>ů–Ä'"ÍÓ˝¤<–Őߊ˙œż§.ín?‰ëÓúÄ VMϝ˘Wü:ŰKKšđ§łW:5’F)„‘#wéi–éŽ?5/Փb&ľSőűT]{ť…€gŤHďuŰ;őäN?;…ÓĎ^ŸÓĎÎÎś@…î@ý(F2çlsI—xGiĚVÇߎţS:…˘ŸőlyÝ{ÓçEýˆWžň~|ŕňűW÷őrNT˙@i\Ť„9ˇs/°ŠŁ¸Ÿhmžté÷ţĂύ˝œÎţčœřžďů.÷;żóN/Z—[ĽöŸ^:ć÷Üsˇ{Á žď^ńŠŻęŢ0 †P'궞që&ŞYy=Áűć7żŃ;˙üÔOý´űo˙ŰčE?zÂ@" +/‹V•מżüË˙9ëmxŃĎ[Ţň摢Ÿý ~fÝą]dÁĎw}×w ŘÇę •ßú­ßńŤłY'úŃ͌_ýŐ_÷e Y(ë˜ęÉ=a˘  XÇźŽqÎËĂŕ<Žâ-€Ăţ}ťŐ]użsőëÝŰÓ¸›ˇ6ݝçĎşĺěĆrł1:Ółnđ˙˙ň˙ă…ż˙űŕ_O>ő”űň—żœÝ˙ţ"Ť{ bhŕ$ ‰ŃŔÓŤ_ój÷śˇý ÷†oůćąĹ ?:]w{cÓ]zöŠ{zűŒ{ĎőWťEä0Î ĘLRfŇ6éŠo‰~ nH¤cą§Ytüń˙imzZü=ďyŻz\qę#<ě§+ý°ÜƒDěö#ŚE5¸p\čs”iHxŇK›•Jyăô‰~,ŐVŇpÝě÷T˘™ň™óŢťÝNéö“ö)~Ў´‚ý.‡Â‰‹––,í×RQoˇ¸Çč|,*ŃËĘęŞИřǧ c’@ÜÓĐöâsüÉ[‘ ˜$ υuŮr.Ü)Ň{%ŃąŃvHôŁmÓv–.A…čÇC1âňyŕëžîu^ÜŁ˜Mâ履~ÚďG s4MŻžđîŰżý[űR—ö3łˆł§mskŞôĂ?üwÜc}É}ţóúr岊óőЧžöŻ}č/ÜŰßţítłáŔĚJÖ5N}Ä>UÓőR'"˙äiż~ú§˙˝űąűŢRÔŇ~)”:ů…üâ/ţRÖŮÝ͖šÇ˝éMoô4Ő]ם4Ý×$eŚá8 Eôä‡rE?ńēîÉ'ŸrŸűÜçýI̟ýŮűJяćÝ×}mĺ-–Ł:FOçzšiáSÖă2é:Â2§Nv!˜ŞŇ°5Ďěs˙éʛÝkˇ>ë^¸ń„kťÚ˛8‘pă…óŽ]ŘĎ+Óóßü]˙zěK_rţŤťř#îŃ/|Ńßđ7ńˆlđŤŹđ50˘¸óĺ/{Š{Ík^íSœ9sf ÜF6hp隍nwűööe1B÷ŒűČ헻Ďn=ŕRwtń߼ǞŹ >ŤĐSĐĆ8Ž†bJý(5°\)ł†ƒń‰Oş/|á ž_˘4Ľůꇼ,;obÂśţđ˙mw÷Ýw;€“FaÔă˙I|:ŠĐůƗđó$œÉ…?Â]Śágu˝Ř§S:Ţč]Âč䢟Ôţ/V­żüť_üăE:Ž™ľŠ•×S”íĽžĘ…?Ď(V\Z^ň"/˘)-† gŸFŇsĹ î…v;]ŸŇKďťێí2UזÄ;›^¤ż5=wöŮń˘‰€Ěĺ'wÚ(Ä?›žŒ‰8Ě­Gí\/Ňs•˘ŸČ­ÇţÖôV!ú‘+ýn?}˘Ąý.˝îu_ë_:r—kăG>ňQWJܢ{”oxáËŹűtWăÜ Źâ(î'j7nÜôN¨ßůË흏<ňp)p×ůĽ{źz0S1ľÎĂßţíßqďďý×ĹăĂ@ř0ł…ő Ťs’ô_BÇžóĎÜ{ßű'îűßţw÷Ł?ú÷ýŕËc=ć;ŽýüěĎţ\6hŁaÝßř†Ňé§Ş:­ËĎA ŽœW˜oů–or˙Ç˙ńËţď?ýÓ?óÎxPĺ‹_|Ěżë)ëwźăŰkëŇMŽ*Ôq_Zjű§­őT˙04¸÷ôӗܤh++ËŢVůńÇż2˛źžÚÖ;&Hý0u̲Ů]vzë•ţŐNvÝjöŞbĽąí^˝űy÷ŔőÇÜéÓg˛ŘâˇÔ^*ç?üĐCţő=ßóÝţón6 ňTvăZbr{2ZńăşO°ćîşóNď@8ŒŰˇnš§ŸťšĹ!{î#/pnݗšƒ1h7üŮLW\'Ĺpôśbś{ď˝X[Ćâ-qîÜřń–Ĺž:ÖJaPçÚT{†ČŃG <ęih‰Řĺz)$‚ŻJ} ašĄmDř' sâIťŠ3 ‘N!ŞŃ{Žű)”A&˜‘ŘG)źŇ=/–‘¸eł˝Hü’§ăęeLČŽÍ•’ëŞ[—ń¤Ä;őô„GşżŁ—î9ęĽt`Jś,ˇŸ,Ţ4M.űÉ}}Lż¤6š$o—OG–ľ_ŠĂ,U—Ä[ŰŰŢéÇD?›[›ščg+m뵓;ü¨|ţž/cŤ.í­G wźŕ§Hëe‚sęą?|ˇmő˘ŸŹź–=-§ŸÓ§˝pHuhűëÜŐľ]ęĽtU?űł?ŸK›^Ŕ .\¸ŕ…?ŠŮLä]‡ö}|Ďó(î'ŞÍţč!‡QBúIŃ˝xŸzé>îűŢ÷ç>nWüűŐ_ýJ0 ţLÁ¤Šť&Šs˜¨j^ŐrVöžűîsoyKžöëß˙űŸńOl?üđĂžĚü?ë;ěĎ{Ţ}^ôc‚Ą¸Sƒŕçh¸xń˘{ń‹_äŸQGYOŃźöľŻé+Ł›3âÜšsľőč†ŇźUĄcţČ#ř§MôÔÉĽK—ź Ź =Ý=Nęˆł˝čE~yłł­ˆşzőj9 $ĄÓ°›0ťiŰżŞ¸Ń]sďşö:wGó–{íÎgÝ#7żäíwál6`‘ VÄżÉrzđÁ˛żp“ §ŻŻß¸ĺnÜźĺvťM÷á[/tŸŢz(k×btKŤžěŽ˙Žú|Ř(nŹ‹ˇ4(öéOçŽ<ýh€c\,öTjŮaŠÚLŔ3 ľďüůsîʕŤţ)qľE1ݍJó%§*˜Ę}ěc÷ĺâA"C˘4šrŽŇ9 p\HĺvÓu^#uŒRw5łż˝ëOZřő¤˝”_†Ęď)ŐU!üÉ]nś —›NY_žl_˛ŻRˆ3Đű7 %BY=sK‹T¸ö4[…đ§­W. q…kšĺeě”öŻĆ;ůííćiÉv÷J‡ ~rĄO(úɅ>^đ#Q˝GŸÜéh§t9Rz.ŻލH˘¤•/ÔĐk9HGÇ}i×$ú)Ҙ*D?z™[ĽřZ”{›Ú‡Ü(MŐ×~ík˝'FŰ%Ü´oC^ň’ť/|á‹~+6•[P:Ž?ó3˙ŃǖŠí^őŞŻöӏâ~˘îĂŞ ™t?VŰP‡îĽjŸ\źxO_<Ş{Ťz¸RçŒmKŒ\ůűs˙÷8‚y€qAř°Of-&šdž‰$ ‘řç˙đ˝î~á˝…č;ßůťžOţŔĎóýU˘ŸaŃiçMĘIúTńMßô ~ Dä~đC>§śn:üčÉuÂŐ!ŸŒÖPżűťżç}ęP'TUĄ˛ß˙ýß;`1Ť']Ţ÷ž÷ťiyőŤ_ĺS>¨3˙ťżű.żŽxF7i~çwŢéˇUÇ])AćiRwĹŠż%ŚšÖ9ĺţđúkÜră•îÁĽ§ÝK7Ÿp÷<÷˜k´V˛›ńKn}e9Yv+ËËyşˆ!(ąA—[z{ÓíuŢŮçó[_ĺžŢ=¤)ťŽ3Ší$̊4ŠĹţËů]˙tą¨Œ°‹ŞAsŇ ĄRŇ*ÍWĚ>đÁ‘N’†Ú÷'ňgޑÔęVj†‡z°v <ýážÇ=÷Üe÷đn÷7ţĆ[Ä?T\Ť"AZ0˜g&Š5 ĹYěţÉöŽ kZeź™;÷t{uŚš8Hn9ZngˇH{ľ˝SŚś2L)ĺIŁ•Ö7§O”§ĺĘţĎbžn!ŘąôaöŽé{rxÉ~Ż“Ŕí'ĺëö%%öń.?ć𓽼€Gqe!\RŞŽBôSŠ}ÂÔ^E*łü•ףx(°--ˆ$ĘŃKŽ<ËĹť>K@RĺŇŠ~ĚѨ/˝—D?Ů}/˝ë>^(ú™Eżŕ0úŠľtŸNhŸ롞m Ěĺ˗ݓO>é˙Ĺ _řß]˝zÍýůŸĐ ¸ózčœP\§taz˝üĺýçÚaßO”ĺŸ˙ůźČüÝď~OS\%6Ň˝Úwžó]ţď8-˜bŰ\řÓôąr• Ş\/Q.Š“€đ`†ÄŻý†uüÇ…mPçęmo{‹űËżü°űľ_ű wöěYďô˘ÎP(úُ‹Ď˘t\ §ŻůšŻvőWńlu>ßüć7•óeŠ+ᏞDů…_ř%?xŁŁ:ťĘˇýÉO~ĘwVíię*îťď^÷Ő_ý ÷ą}ÂwĆeŃ+‹Y=ąŁz4¨ŁzVWW˛A˜‡Üç>÷y7)çϟwßüÍßčţčţġçç~î|Ű5ŁcŽśę Ů÷Š×˝îľCÓSĚqŹVťYlÓjtÝ"ąÝmťĎm=ŕ_KÉŽťo鲝óĆľěýŞ;ßzھݎávi’ `4”ň ™?ÝQbŽl ĽŰń6›éşť´{GöşčžÝ9ç.í[HąOĂĺÇobŐÓ§Oůň÷˙ý „ĽÍşvíšwÉQúĄXŤJř#GĄřňCú Ţ}÷]ĺSŘęOč<˙ľ_űu3Ţ˙ý~ ëƍ>Ń\v4đsůň•‘m}ŮË^ęţěĎŢ_ÄšôÓ$tśŸ_ůĘWř§Çő4ö§?ý×žňőČšHíşrĺŠßÎۡ7|y=ŠčŽşWł#כě÷swo׋zÂôSćăÓd™č§›O3ዄ0öˇâˇzяsÄ?•łŐŒ(ŐWKâšć´šEşŹŚwŮqĺo~ZžĽĽPŠăB˝\´#‡młîyáD?ĹËR–…BŸpűşĽ ?9+ÝXžvŹ]Śö’[OŰŢ}[[ľbĐĺǖ—čGń’Ä>zů4ar ZĐ_­(^”Z1—b=Ĺ\Š3%Ž’ŕG”Ý×˝Žoyí›oýÖżéţĎ˙ó?űă űŃrԑřGűDîŒZ^÷"…\ă”W‡}?QÇéŰží[Ý/˙ňŻřřTď0=üđCţXŢşu˧ł{Ł÷|Ă7źžŻ‰Ô%ü‘‹–ś]Űtď˝÷úşľ%d2qşR~Šn€YđŕŮŻhœô_ŁćŰ ”:Eꌼ˙ý(oôŰ<Ÿ |ŒvL:o}FóúםިĂůńŇ7u|… ÔQžyó–űÓ?}ßŔňę ßźyłVř#$&Ň)¤Î˛ÖóĄýeß|udßńގgƒG“‹~ŒWżúk|§˙˝ďýcď@$1SŒÎŁńÍ€EŜHÎŻş…e'mťÇś/ú—ťO[i츕dÇ-5v˝0¨č†âśł˛;ÝvöŢrÝU×Iî8pŚ˝›Ĺ)+ĺńœç6°ř›î?ý§_öâK{˘•ďřŽwTn‡âK ÂŐG(GźůÍoô1¨Ü&ßöśˇz§ f(ž‹c:=ő,ą== Ži°CBŁ.ÍWČßú[owď~÷{}Œ|íÚußżŠBíP{Žr‘°ĺöĆmw+ť´ľłŤu’Â-Ç }ňÔ]i7í işÝŕe‚˜Â‘§Đý¤AÚŽÁô^cŢÓLĚů'ń➤…ŻPَ\žö şýčľçöäúăӔízqĎöNžĆKn/ćň#ĄšŮK4š ×*D:ÍfËßăjľÚ^ücŸ†ŹpîɅI>WŸź˝¸)tů‘ˆE˘/úY_÷‚˝$źÖźY:ý&jď;Ţńíî×ý7˝ű Ô+Fűę ořf/‰Q,šôüöo˙Ž•Ë•Ň\ÇCyäażŽŞűӇ}?Q÷ĚĂ6+ĺ—^1z@ňío˙v/’QlűĆ7~‹űă?ţSßŢżř‹żŞ\Ď]wÝéžűťż“{ă0Sţ"ÓŚ›…Hóî¸ăßS‡ÔŚíGÔ3iç„ÎĚäč&:ޞŠŐM ˝×w}G9_é ô$ˇD;JÉĽ§\–——üÓ$rtŇŔÎ{ŢóŢĄëĐqyë[ßěG”wű™gžńOIŤĺ~ýë_çĹFűţ=ĺ˘Ô z [ůżő¤‹uŽÚiJǁžőĂÝľŢuw´6Üľ˝5wŘę.š-ˇädîsxxMęÓ>.‹ŠzźŠĂŒƒő”ů˙đßńiˇ}ô ~ĐbeeŮÇsrĚQƒşöhđBƒď˙Ÿ{÷ş‘räšçžťý Ëă?îcFăr”hGóĺ44.ZƄ?Šőů(ô˝’ ç•Żü*/ŒW Ź6Ş­hťďžű|˝Ş`‘'íWZ¸áHsóÖMďB"G•2ĽV7un§pťéxçŸ^Ę-W}ŇŇĺ'MSÓÜxQ‘­Łˇžň/7ŢFŘ[.ţIň óďĽ&)ćóĘw…BĽ"5—˝LŕÓKáľëŰ­Z$ŕqÁz3Ołp*E>Ř§N”—0ľ—ĽSl(Á^^đSü-яœƒ´ŽQ[ŽËQÜSľ˜R.5ršyöŮgý}G‰Ś”rK÷řtŻoXü&§ńżűw˙+_‡4rúQÎ\źxŃǎşŻ9ŒĂžŸ¨6˙˝ż÷_{§#kłâ鼼ś§yäaßŚŞžXIíýčG?–ĹË_)âÔÔoł̕ó‘îÁrŸf͸ŃE2ćźdŒ÷¤ćł˝Áť˝šĹ´fôŇ!ބOKťţŢ烌/‡Ĺ_ńźřóíۡ˝Cß˙ţ_vďšúR‹ĹrcĎýă}½áë_ĺoԛë1/Ÿ_ů•_óߥsçîđƒ+‹‚Ň%üęŻţş˙[NE/}éKŔŹ8Şř˛îž\ÝçřoKôŘXfŰ ~nškWŻşç._ö"‰_LÜ#§œ]‰cvóYŽ^Ý@ěÓ[_䲓vŤËUlaß[ot`ü8( EA&¸é[Cî>d.Fů+p1ĘÚÚ)ÄAĺąÓKü˜˜§˙”Ÿfłp#JJw˘¤˘­Ľ€¨¤-+D?+Ej/sřY[]-S{ľ-MŘ>E???wё MÜŽŞżŤ>×M€é˜$žü/KKíoĚޤ‚żQźw˘WZźwƒWźÇ/WóyŘ{üwĚHŽ?sŔ(ǞiĘÖý˜˜řgš?pçéë:4 pţü9÷š;?ęžŘzÚ}vó˘ƒĹ ;ęî-ç>ĺžw÷Yďœ9Jô“Ł'Š…ž ŽJp\ŘO<"ÁJ;‹I$0‘ĂŒ‰‘Ě!Goooší,’Érr‡ N q…ű9ţt1O‘Šž*[1™đ'¤W4ۘ0§ €‚wÍËţÉ>çĎ ć@EJ˛žh˄:ćř“„őV ČŰhëłşBˇ ě)-˜‰~$ň1‡ŸUšüdÇcÉD?ĹúÜ÷{gą)ŔÉáŔq x?ł#ÄŠú,ŃČË_öRw{ă#nĺúžűř­űłâĽyfľšăŢrǧ܋ÎÜtŻ|ĺ×űžQOĆľk×|úń˛ěűaé9N“ˆ‚$F‘ŔäTV^‚Ľc Ób)ŘĆ挝uű–kßjgodÓv]goŻ_ĚŚţҲ…đ'\tz™žö)^ńjdöJuL¤SĺƓöKŽuło~č¨TN \‚‚u¸ MÚżű˜ŕGb+ďôS¸űŹi˝–ły*cŽBŞ#Ö;+ˆ7 îŹĚ!“třĂߏŸ Ađ09Uâ 666Üęžč^qúI÷‰›÷şŻls%×E4´’Ž;×ŢpŻ\v_}öˇś”¸oüĆor§OŸ+BÄČ=žyćwőę5Ÿ’äƒüw"hľšîľŻ}8ILëä…?ívîü“˝w‹dîtźŰĎś[şu˗3ĄÖľ|SyyńO™&Ź[Š€Ň ąĚÔBsŃq˝mˇ÷>‡ž gžŞňᴐtjÖćŘŐ§Żi=g 2˜D?‘Ï}–őn/}–ËO6_âe[î0!Ć€„?sĘ´Ž>Ć´" i;t6ŕ83lpfœ•yÍk^íŸ^űâcî‘ ĎfË<ă&á°Ň7Śł/-uŻzŐ+ÝÝwß=–č‡Xx<ţň/?ě>ó™ĎöM{ó›ßäΜ9ă`xLŃç’ÓlzŃIé`ÓízAíććŚîěîíš­ímˇł˝ă§Ť`Ÿ“OW–Ó ÁOˇ"ćœZü‰~âm‰ˇŤOŘě‹xůž¸8JI6˜,éUš 5Ł´^­vťtřY-Ä>ˁŘÇ~Ěĺç cAâL„?sÎ4 pšƒ†Î'Ŕ Ub źüĺ/s<đ<÷řă_qĎ=÷œŰÚڞ‰ ç¤‹‚f“jg}}ÍÝsĎ=ţéó8őĎ7ŠA˛†ßĎŻ{Ý׺|ŔŔř˜łL(”Q,¸ˇˇçö:×Îb˙{ŚĐ Ë˚ˆÇפţj¸ƒ‹-øŠĘ˝§üť&žŮŽ05˜"ô);&řńbŸŔ姝˝|zŻÂńÇÄ>ąŕ'n?ŔQđ`A˜Öř  S 'I]ęŚ)u”@!Ăâ<œ~öϨŘu\Ÿi܃ƒďűžďq‹ŔßţŰ?ŕŽ;u1ăŹîíYúŽ0•W˜ĆŤj iđ ä?ĽťNP×a9ŘTŽ'v[ŹYśďs(îŠHÝ ~źČÇÜ}ôn˘Ÿ@裿ŰĹô– ŠwŸPH5Ôľ…űˇ'„? Ä´î?Őč1‰ř§jš¨$ŞAP5“ÄŞ“ˆ{f!0˜°îď:âůĄŕG‰TÚEş*ÍÓgŸŇŤ!7—X|U'@ŠSwŮ4‰{*?})źô.çžHĐcŸĽÂéÇć5"×$[çaQ'’"€„? ČQ €čTŔIgš'ľ'ú„ńÖ¨ő›Mǰý6KŃÇEJ]%ÁĎęƊOý%!ŒÄ?ěďná´(”‘TËŤHĺ  áNéęˆ~´bqO(:JąŔ4 üX`CDÇ`|&Mí0ŠÓ.?“1n,;izbd˜5ąëĎ4ËK´"Ą+\~VWW˝č§#ˇŸ‹#+÷@E°X c˘˙.1O!čń" ČéGŻxůđ%Žjżáđ“€đŕwţöŰ!Ľ3 PĎ(ןýŠ|FŐ łaZǞqŽÇ ވăÄQqĺ8„b!‰Zě}E˘ŸBđłˆâńQŃT,’ŠĹ;ń´>APđޡÎ1cňŁdX›ŕä‚đŕB‡ŕh6ˆ3ęéáEpXDöëţ3nÄâ0­ g?qDčTŁ´VZťeí8IŃɸąÜ˘ÄlÓś“˜ŕdđŽœY<ŮNjýzt|9Î:ĆřěÇá‡8şÇ~7Śu€Ĺ`^ăËYťůí4§ýsÂâĹăłáî0ßđŰ óÂ82Ş:ľp˛ŮĎÍíÎ/Ç”'5˜1é 1ôţ˜ľƒÇ`ţ˜ˇřň°‚Lz+tpĐsnNY‹Ł‹/‡ĹˆUóFĽüše‰(h6ĚĘjÔ´qƌ;öËlâK€YƒđŽ„şÎ­Ąy\,NŁŇ'Œ›Žé(ăËIS6Äm;ˆöŔd´#Ç!ž|Ç;ž˝\O̰řQĎ|1Š@‡ř`>™E| p üšÂ.ŠÝn×5›MÇĹ~bÜň4é—#žœTü.Â`Íá°ß2ÜĐ˜_ć%žÜŻëMăş˙Ôm 1ćÁ2Í94Îň¸ý̓Ɨ‡ ˜+†ët:no݃đŕ„ ŘO(œ5‡_„™´ŽkŚă nČp“`žY”řr\ĄĎ¨˛UĺŤÖGÇŹœ8ŽGĂAƗłáĚşXŞó˛ľľĺ–——ű)<¨™Łˆ/g!ŞŤŽŽŔb0Ońĺ(WČşů“ˆ‚Ây!Ǐ†ý:MM+ú!V882ž˜ŕЩ봆ˍ wöěÇĹ~ÂQŚąłŸ×řň @př0ˆ°X,Z|9‰řÇŚŁDE0_L+ŢáX-ű/$ip¤ÄŔübéÜîîn™+Ž/Šůű)ŒŸ˜™Śł<ŻńĽÝŕŔâŔ1XLć1žg˝ĂŁDJÄ,óÍ8ÇhŘüýœ?°f_ŕȉ/ˆÍfËOŰÜÜtpźQ̧ŘO1`Č~:Íó_283Ÿ„Ç…c°¸Ěk|š_ńĆ81JĎŰÓîűqA㏎ƒˆ/f Šž`.:Rś´zo6›^5yýú ˇžžîŕř˘˜O(4ŤÜYäĘ^”ř˛îŠÁnĘo=žŹKďÎ7&‰‰ć‡qÇ `>8¨ř`– ü#Ă:.ÖA ód뾡ˇçśˇˇÝňň˛€ă‡b=Ĺ|a§9źš=éÓÉÇ)žä&?ŔäĚ{|9JÔSˇŢQĺ Äăóɤąý4ç( łŽ/ ¤hp(LbSŤż[­Ü.÷ʕŤŽ'ŠőÂŘĎÇîžřb!žœTÔ1MůQ/˜ łŢßӔ€ƒe?ń%Ŕa‚ă UOˇ„OĚčâ)ő¤,s766ÝÚÚŞ€ăƒb<ĹzzZFą_Ő3Ć8eâK€“Í"ŗUu*oĚÂՇ¨ůaÚcÁ18xf_$8ţŔ‘^ă'!ÚíśöŮg]ˇŰup0Ňöąžž” ­rIž–!ž8™çřrÖ@°X0p4T| p üšĄębi–ššŞ˛ívwwýwooϝ={ÖŔüsýúuwíÚőžNsl‘{OË_ONJ|ˇ!Đń„B€Łç¨âK€YđŽœđŠCQ=!cTa9Őyօw{{ŰÝyçĺ|˜/ň'žŸó9ął)žkľZţď°Ów Ĺ~:ĐėǓ“_Vmb Ĺ‚B€ůâ¨âK€YƒđŘ.ˇj^ŘaхÖ:ĎşůˏťťďžË­­­9˜666Ü3Ď<[Ś@íqă×8ĺQóˆ/Ž7ėőm€É9Ěřŕ AřGBR“+[T=-/Ťé;;;ŽÓé¸gŸ}Î_ˆĎŸ?ďVV–[[Űîʕ+~ Ăr`/--•äşNs÷%SäĆ&ž8ž_Ŕ,9Şřŕ AřsĂ8g}ÖtąźźěseëĽ óĽK—ü…ůÜš;Üęę*) Ĺg›››îęŐk~`C(.ÓÓÎöÄsŘQž¤Óźˆ/âK˜%ó_Ě „?pdTYćŽę<‡š´őˇYŽŠăŹ˛yĆË~žć­ŻŻű§h,#b€ýĄL1—/ôtĚíۡ},&Ě×ňa‡šŻ5=Ή-Fuš'‰ßˆ/âKâK€Y2Ďń%ŔA1îY˜Œ9/ă=ŠůlŻFđnŻf1­˝4ďŒŢwvvßç`!ŠĘ—NÓßöYiťX‡ďö’BSq›Wˇűż@Nœˇz˜}­u„5XvĂNrřnˇu̲ÓL| 0__̒EŽ/a~XZjcöŚŔüFńމ^ińŢ ^iđż\Íçaďńß1#;8ţŔ‘3ęəř˘vv­œu M)4Méź­Žľ+§‡OÝ ƒ5wFuNăX,Ÿć˙-s`ǝᰣ\ő9Žw֝fâK€Łƒř’ř`–Çř`Ö üš Ş#[×yś nř´ŒÍ§Ů…ÜŸŹ §@=UqXU§7ě ÇeCkܸC<ęó~ŰM| 0___̒E/f ˜+â§gâľÍ/ĘÖYŽ—7ŤÜގr8-´Ô€UůŤŤ:ÍUöˇq'şnِƒč4_Ěėėłä8ėłáĚqç9ž_Pí‚>Ł—=-v–Ť:ŃĄý.äÔurăÎq<˝jţ8OĹd§™řŕč!ž$ž˜%Ç)žŘ/`.‰Ÿ”ŠšVwÁ;ĘUu…ó ž°#NŤš?ĎfâK€ů€ř’ř`–—ř`? üšŚîéw ő.ŰŰđó0›Üř"=ŹMŽĂ:Źuóꞔ íuÇ­ď0!ž8ˆ/ű§ âK€é9Šń%Ŕ4 üš§î‰—ŞéąmnŐE˝Ş3΀Ă:ÉáôIž†9긋řŕč ž$ž˜%Ç1ž˜„?°0T==cÓEÜ Ž§W=)3îE›'fูŸÎkՓ3Uó'wŘ_ĚâKâK€YB| 0>`Ą¨{zfŘźş {ÜĄg˝'‰Qäşň“Î;Jˆ/âKâK€YrâK€q@ř IÝÓ36/dTšQqž–€ăĘ~;łłčPĎ Ä—ű‡ř˛ń%Ŕţ!ž„?°° {zŚŞœ1iG˜ =@ΤqѢĹQė‡ ńe9ƒř`:Ž{| PÂXxĆí@ÇĺCx* ŸYäĐ^Tˆ/fń%ń%Ŕ,9Éń%@ Â86LځŽZŚç¸ĹTėG ńĺŕ˛0=ÄTp\Ařǎđ‚Í“0ËIč,_ė0KűŔIák&͏MGN:Ł:Â'˝ŁL| 0ėĂ!ž˜ âK€AŕX3é0(@†ÇW'-~"ž˜-ėėłä¤Ç—p2AřǎI;ËŘăT3N§8ŒĽŽk'šř`6_ć_ĚâK€„?pl¨ëÓ1Śó Џ:ÁŁb¤¸ŁlĺKšř`v__ĚâK€`ኺ ťČwť]ĂŠŠ§Fm™°łźčhâK€ŮC|9zšA| 0š“_Ä ü…eœł>WMˇžaӝşŽmÝôxBĺŹlUgyŃ:Đėűƒř˛âK€ýA| 0`!Öiś ş>w:˙Y‡ÓĂr0{RĆ:ŔúŹżőŢl6űŚ+ÖŞ˛Đ÷Î3ń%ŔáA|I| 0KNB| 0 „?°PŒę0ëĽÎňŢŢ^9=|—Żű{Üő,2Ł:˛UOžŘt€°2zoľZž­ÎsÜŃ똡4ń%Ŕl žĚ!ž˜ ėăƒđ†:Ë[]¸ŐQV‡Y/›žą×rĎmݏg7[îęfĂ]ßJÜĆŽs{]-ë`ÔßmeýáľśsgWRwnľëîZÝsw.ošľÖžŰŮŮńbužőRGşŽ=/çIă˝–{|gĹ}eŤĺžŢj¸Ëۉť™Ĺ—;Š/L‚"ÂĽ,\<Ĺ—–SwqĽëžˇ˛çXÚrgš'#žź•ÝŹ|ęňŚ{úšŰîŮ+îęÍlڎŰÝë"ä˜ńíě抾%wîĚŞťëüšťxçşť÷ÂZ6­ľń%Ŕ¸Œ{Ć&cÎKĆxOj>ŰŤźŰŤYLkF/Í;Ł÷Ý÷98–Ô=%cOÇěîîúwąÝi¸/Ý>ĺ>%ŒšÉŕ0¸x:u/<żçZżĺ–›ůÓ4ę<ˇŰíň)šŞÎňQu '‰/7˛řň›§ÜGŽľÜcˇ‰/ƒ‡×S÷5wěšWŹŢrkÇ,žÜÜŢsŸýň ÷ŠGŸu_yú†€ƒçyϸ—żŕ.÷âϸŐĺÜežăK8<––Úߘ˝ŠÓqŁxďDŻ´xďŻ4x_Žćó°÷řO üšŚę)Ëy­ł^úźŮiťżž~Ú}ěé&n>GČŤîí¸—ž˝éV›ťžĂŹÎł^–S;î,vçyÜřňfˇíţüći÷ÇĎ4qó8*˛@ě÷tÜןžéN7;žź˝šç>ňŮËî{7€#äë_ő<÷5/žÓ­Ż6ç2ž„ĂáOő<„?0Ş:ĚöRGy{{ťĚƒý×7Κ>ŃFđ0GźţyťîĽgŽ–ůł———ËŽł˝Bş=I|ůţŰçÜ;Ÿj#ř˜˛Ŕěí÷íşoX_ĚřňßšâŢűĄ/!ř˜#Ţüú‡ÝŤ_|~nâK8ţTĎCřű&ě‡y°őˇ,qŐiÖűÎš{˙“ë¤ô˜S”ěîťíÎ47źeŽ:Ďzˇ§gDŘa>¨Îó¸ńĺłÝ5÷›—ÖIé0§(ŘwŢsŰÝŐXŒřňʍ]÷ř)˝ćĽűŻȝ?Ó>ŇřŽ„?ŐóţŔžˆ;ÍáKś¸ę4ëďŻlžqď~l—€୏lšç­ŢđcužÍ:ˇęé™YwžÇ/?˝}ĆýŇă+¸üĚ;YŔöĂnš—-Ďw|ůčˇÜožçs¸ü,ßő–ťÜęHâK8ZŽ‹đ§áćëǟăNłžœůü­sîżˆč`QPěŚÎR(ś‹ă=#ţ<-“Ä—ąqÎý"˘€Ĺ gQěŚn^ăˏ?zÝýĆť?‹č`APěŚî0ăK€Y‚đŽœaů°őR.읝Ą}ôöy÷g_n;X,Ă)–SL§ŘN1^]çYě§óă¸fŰŮ ‰bž¸ó<+†Ĺ—żýl_:XxçcťŁŽ/ßýĄŻ0čpLPlwń%ŔŹ@řGB|AÔĹ2œ§—٧}îöî雉€ăb;Ĺxf™w˜ĂŘPŒÓ™ž$žüŕ֝îąŰėÇĹvŠńŽ*žüŘ篝Ż<}ĂŔń@ąÝÇ˝>Óřŕ Ař‡N݅/TIĘ:MŻ­î’űŕmNj|Ľíc=‹űF=13Źó•A€cĘÇ>ĺ@âK€Yƒđćˋ­wYŚůüŘiË}üRËŔńäcOˇ|Ěgń_řr+[ןć;Źřr{ˇë>řń'O>đą'|Ěwń%Ŕ,Ař‡Ę°ÜŘ6ߏҞ˛…ŰŔq'ůz1`HwŒ\ٓėŸŢÁíŕX“¸<ć;¤řňŃ'n3čpĚą˜oÚřŕ0@řsAœ;›â˝ÚvpźÉcžtŹ<ٓP_~ô:ń%Ŕq'ů'žüôžspźÉcžŮǗłáńĐ>‡GŠ"őÚě,š§o&Ž7ŠůűY(Âř°.†6Ż*žźŮ]rÝ&ž8î(ćSěwĐńĺí͎űĘÓ7oóÝŢěN_ŕȨş*7˘¸˛ťîŕd`ąŸĺÉ™¤Ł<,ž|břŕ¤`ąßAƗ—Žî88\şşíß÷_ŕČ1E¤’yÇ9u—ˇIĂpRČcż|E1á~írŤâË'wˆ/N yěw°ńĺ3W6œ ňŘovń%ŔŹAřGB…nށNÝľ­Ś€“b?ŀĂbÄQŒŠ//m_œűt|ůÜŐM'Ĺ~ű/„?p(Ô]ěâé–ńúVâŕd`ąŸĹ‚ưrŇřňň6ń%ŔIÁbżƒŒ/ŻŢ@řpR°Řo’řŕ0AřGŠ]ôâÎőĆŽ€Bű…qá4äşřň&ń%Ŕ‰áć!ėˇ6vœ ÂŘożń%ŔAĐrs€]-'â^×Ŕ aˇc)ň pć8žÜ!ž81lB|šË L€ĂNvsÖń%Ŕ,Ařs†Š#œ8"LƒŕDPfy=Ŕř’˜'b@˜OţŔ‘ͨ"Iő üC'·N‡ăÇfÁ¤ż'…ŽĂâÄşcL| u_Ŕ,™&ž8hţŔ‘C‡yq™˙cÇšpx}‡Śîw‰ÎÖb˘ă9íą#ž€âK˜%ű‰/f ›ŮßäঠŔńá Żéűë<Ĺż_tĆ฀đF˛?ÁĎÁŠ{xâ `ž™ČfŘľ~ňúą]]|8†0Kˆ/`‘Ař•L/¨™|9Ä;Ǘý^ăGßxŻŞź›őa۸Á‹ÂčcňÚńĘO=đ‹(ŕx3BpS÷ű1\¨.3™, d|qÎčrcŐľOQNA‹ÁP1Í8×ňŠĺă߀úuL&R˝ˆ`Q@řGF<`‡ˆă蘕ŕgh=éŒÄB°pLs}ďßT-‰sĆKŰeeĆsBt4Tňă âKˆ!ž€Y˛Ÿřŕ @řGćŁeż˘ŸÚĺ‡Ô;zœ'“^çhdŠŻx~R˝lu‡k|śŁc?1"ń%Ä_Ŕ,!F„yáŔ fź¤ ?é„â ˇq'rÍ°k.ŔŠMńNŻŐ €˙Ŕ !†â+€™đŕ„2­čg\ÁĎ`šIEAށ€“B6đ3ě÷ Z4(%íţƒřŕ˜CĚ přĆľ—ř NN ÓŚÚXndžóQóÝ>S‚U.ĺŕ(™b€e˜°ŚB4(ęM/Büpě@Ôprç7€řŽNӈ~Ş?á´ţůéČe‡ÎŻŠ§˛9 Á8‚™4MĆ[6U‰€Ş@ţďH„řŕqHq!ń'Ŕás ńW|]'Ö€á ýřżÇü űŒ“Œô_Njžëzí`Jľ¨f`,ŚďĂ0Pż(ü K˛]“Š`N˜aLˆ˜`ž™ä:˝o‘B X@ţœ †ß,!úév+§× ~fäT[n RŇ~ɸb™ĄN8+\‰ÇZú4DQÁ~§ŸjŻ#űM Ĺ?áźb-ŽNüƒëŔ˛ÎžĹ=CâY8H&‹ťęŽ÷SÇoŠcƒJŔ<€đŕ„0‰č'.;Jô3Zđ3Z4X÷áOfĚ#Ŗ•n>…č&Љ„5ą(é/ڛ%e]UâŸxžmâ€9aʸorąĎd"y8 Ć˝ţÍâ߄‰cš*ËŞiG€Ď4˘Ÿ !OZ![ §Ś˙ŞaŔá3lŔcČ`Kůô:ţŁë Ş”‚ĘŐbŸ`fO Óďţ3 ńĆsăNjSÔKl pä ëT]§ë˧C\(GRáRY9 ŕ@řp˜6ľÁ0ŃO,ř§Ě8BŸńR1đ0—Œü˝‰œ|ü¤A ŸžČ'@I{ebĐ0PŻLĎý'tšVüƒëŔ3fü:^œ›Î Ž…I˝ëbý"UËÄĺ‡×;Ql‡řć„?'šzˇý uđô ŸobŸ¤xU9őŚ#šr AMßĚžë{’œpĐ$tíŠ\qő Äęp˙éOý‹ŕ™™ŕ'~ŮŞůÓ,ăQăM˛\Őľ= RŔĽÂšĺŤ@É(GKÄ?0 ü8ąÔ‹~Şz†‹zĆü„Ó‚ÁÜržQé2Ôߎę­a°`ŢH\R=Ŕý”>iÇšFOü“ ůœŕŞŸô‚ €JSĄbâ0ńO8HCĘ/€#bŒŢᢝ …Ⓢy&ö— 'qS }üƒn‘uóuýŻwóéE“19!ţ€9áŔ1'teHj-_n˜ËĎ(ÁOQŸŁO•Ȩ.%X4očvŔ‘bŠý.?Ą8Hó:`y¨x QNńš7YËçňŸF Üé•)?ĹúRçŚ˙ 2N“}‰~ŇŃeƒXuŇuŰľl"Aq)@5u1â8‹şdČő5R~ë2Ň>—É*GĘ}€˙ŔƒđŕD2|Đ#|*n”čgPĐS/řqćŃ`óĚÝ'S˘×Ş6Öoƒ,GM.橛™DƒAő¸~ŃOYƋsň6?)^iŇp]Ľě Ęćœ˘| î™NüÓ+ 3fT|ˇÁŐ?†{O:$F7ĆDˆ0‚IÜtB††rĄt`ę(Đ$ ŠÄ?‡Â€NŐŕÄD˘ŸP,äE@ů@IOŕ#ą-gÓÓn:ЖąŽ?ŁŰlőŔœP1đ˜„C4i0ČŇ'ôq˝T]៤ŃpIÚȲ—2„Iü“ťű$‘ĂOńwęjĹ?ăš÷ ţ˜9S‰~ĆüécĂő uďŠő Ůk ˜ˆňŞ9ŚXŚ6N‹AƒI`݀ădžÎd"â˜gţcF ”TĽ×Şýô•Ż™“OšÂ |\áňÓéşn6ݢ•1áP<’VŹ7HwŽ’ęAž“dPěSÖT¸ý„óI#˙řWÓKI“D2<+XÚkE(ňKüSëú3éžöÁ D?#Ý!ĂXÖEÎ=cŘnĐ1hD›`ŇjĄÍ@ąšéńRiĎD?Ą<ř\/˙ –‹ĆŞspĐ ü€ŠŒH| t\Oô§öJ GŸngĎuť/ôéd§Ůß~zšż—)ž‚'Ž{ërýë':WŸž揑Ž?U.?ýŸsąO *@ü4š-×lľ]C/Ío4ýoŠ—ň$–r,­˙¸P¸S/ţ€`Ö˘Ÿřď:ÁOM|;PGĹ:ńpT küeˇ" W,$œ}ěú/Ńxżŕ'­IDŽ´W„¸ć„?'Šáƒ•ƒ}ƒ"éPяóƒŤÝě²“ÝTŰsí%çšI^WwoŻtřIôž¤EŠŻ¤Woc*˙Ny˘`źf'uâ§ł›˜ćN>&ß)R3hLŚŃTŇČ=ˇ—ćÎrŠ[Î~2’ňůězń+§ůĄ‰\}Ÿţ€Ů’ÖˆŇ+ç3ĆŽ•6m‚őŒ•îkœů3"öŞ.SłĽ•ö‹€P­P­űĎ #ŃHÇGäpČ ü8é¤Ń HmúƒŃ˘Mi%]ˇŇÜu§—:îŽSmˇśÔpM˙d]ŤHń•#ĐŔĐé@ş…ž'Đpf}Cí°×pR ŸĐ''CĘ$ĺôŽk¸Žťzk×ÝÜMÝVÚîÉű'u}âOŚý ęé˜ÁőŕP"Ž™ZôS8JöĽx&Ü Ä@őĆuőW4ŘŔÄ×ĎJ—ŸAPĹgŮš˙ěëÁ§ĽÉd$Şt˙ŠOý…řć „?'QŠ ŸnĹ=ĹôRô“§îňN?Iםjďšť×ZîÎSmw>{­.7˝ëOčÖ`. šć˙ęť#gƒ1ńÓunˆŰO2âó(˜Ÿé›Źţá{8™bŔÁQőť0Ęg?$UWť¤žtÝôNÖŒÍŽť˛śăžťíÜĽŰwkך˝´‘ľQ–@ŹTŁĐ%MKńO™ňŤœÖKů3rpöÍT˘Ÿ8>ľÜ´Â᧯δVD4j=Ł"=Ҁ '&ňé•ęŸ—TN#wYw…(v8Ő¸˙ěKüpH ü8ڌ8) Eeű9ŇčIh+:ýHôÓíěşVşë–šťî{ů§Ý˝ç—]ťŮpÍFâď™%ľé^‚›fĺżI0˝˘m55ŐÂ8٤i˙¸0F u #řĂŇ(˝W§ëÜýwuÝÓWˇ{üŚŰťśĺnwÚŽăÚŽ‘˝\#é9˙¤n`đ&MŁô_ńߕOk3č055˘˜ąE?˘œnýŔ˘3â—VöŰłśÜtŤíÄ5\Ç˙6ůú´§ňpů‰™ČőgÔ|‡a)žFŠ~"ÁO(úüŘgWáěÖă˙čFë˧›+ÚHńî?CI*“ťJwœžŘ­Ńpi§ăíů÷B̓&ůőYŸsáN^ZĚכż´{1]Ă]­űĎxÎ?cŠúâK€ƒá¸jŠËˇ?;-QşiÇu˛ÖFŇĘ^ŮÍŽtřšŇĄĽIĹPęđ›d“”՞4xYmIe ű§TŐ;‹ö¨h6›ĺßUĚľ“EÖśFÖěŚŘÉ~—:]×ě.e>ĹUžL ‘Näú‡I…č§ovč§˜—ş\ÜŁ4´ąŕ'íŽW,ďúE?i…¨¨\ˇ" ŮI†]"ăŢs\fó€Íťî$…˜ŚŰť{P:XZŠ/‰€ ąí‡ˇ<ÎK{—ţbůÉĹ?ó€Ě@jŻaşqŠŻ`š\éć,dřĂlzRzgWBĄnqłŹ÷´\ž~Áĺ4NOĺ5|_g­`&o“ĘśŰíě}şp{ŮńöÎvÖžÔß Ô °ŮúŰí–ˇ§ź›¤ÜĆnVfwŻăŰšź´\š­óp[ć^:„ţÁđq6†•ídż;;;ţ\Ľëä¨zľüööśżŤţVŤĺŻ÷ő$Ĺłă´ďjŔż‘_ƒÓ´ĚI{Ž?Î?^ýŰ=•ÍŕŔŒ¨ˆ3ÓqŇeĹŽ<5˘‹ MôÓsüIK÷ŻÔ_BaO…ăO•ȧˆQ+ŰS+üAůPɘédsN°L’+†V.iô;žlîôSÖĺE@YŸ>‹sˇŸ\ dąaŻ)I/Vˆ,zŒbĜžđČ"n€#áŔ1dä Jßü´˘L…ŰOX>ręvó”*΅ƒ$Őěîîšë7nşÝ]×h4KĄŽ7Şgo/{ee„v[ŮMşVłŃťšo“_nĎ&Ÿ9sĆ-//ťičçňĺËŮŕôŽkŻŹřű…hÖúϜ>ĺÚ͖/#–—ňvůĺ˛27nÜňĐ.\pkŤk`Ń‚FŘF<‘ÚďA°L\F˘]_…Ž“ŤŤŤnÜ6iŕ~ssÓ/ďŻÉ­–[[[sçΝŤŮ źóNti'Í@Íđ‰mçJ‹ŸbýŽ?ń`M0˜cƒ@5: ôě—z‡Ÿ‘˘ }|úŮnţˇ˙X<Űí ~ ńO,bweí…Ŕ§Żn[_šŻ§ žf#úFe,ĺ…?ayřt=mỐW¤đJ‚ĺ$ ę¸$‹uőn(y’ö~LđîĆ˙DmMëS~`ôŕDZ‘!ůT áő7˝şYA9älnďƒşŠO&wšIȣʚŚkďĺŽ;éf[łŮȟĐsvăŻá×ÝŮÝqŤ+ˇśžî–ÜtˇÜvwvÝľŤWÝ͍ ˇ´žć­śŻ[ËťŮú›Ůzĺ:!ĄŇňnĎąb'ێ›ˇošĺö’;›ÍoůUĽ ˜wĚigooŻtÚŃu/wVkôR) ůý0§Ÿ[ˇnů—–×´IŰ!áĎSO=ĺ6˛ëóéÓ§ýt{Iz ň4”Îő9Օ×ç2݃jQ‡ŕ`Ik„čBőtPX;ý”Ÿť=§/J/…ę]”\âş}1Ź+ŽÝ@P”T ‹úSÄh^c\ź]qĺH+ţXd*㏞iEß_˙”N>˝űš PQ"5'Ç@¤{âÚí~Lԓ϶Řp”ř§Żtß4€ůáŔąg„űOoÂŘn?6ˆŇ-žœÎ=łőŢuŁ#4`ÜZ^v‰Ä?Ů îĆÖVöÚöb Ő)ÍŠľu×ZZrÝŹěv6h|űć-?ˆť˛˛âZŮ ł†S~:ży×Ůí¸fkĎuşeˇ+×ŮÝu7ŽÝpĎ]żć›knĺô)ď ÔÉnę]˝rĹŻ_nBíV6轾ăĹ Ç4Dęîu]{)ňĐn&śŕ(I˘ÔV–^K‚˝ ]Ϟ=ëŻĹaY[žÎéGučďq~b$řůĘWžâëyđÁ}† Žr1j/Ľ/›ýF%ĺ¨NZŽđ¤Ĺß˝AŸ´4"ÝŔ %2ľx•CĹ­eJŻâűnßýÂýGHĚÓJ:.éěĺŽ>Ýź‹e›Ĺ@o(ě5= Ä?šH(Š-U}œ%H~ŕX‘Œ˜˜$1YŢOzE“B äE@|RZ‚şŮ?Íś—jŚ^|Ž>{.hO Q‘ńĄâŸ4ŠNůUçúS7"‚y$%˛€#‚Řŕ@@řpҘ˘c?ŕöÔÓ-žœÎË䳒aëHrю,ˇőžÄ2ş'R%ívvonŠpÜŃMśFńrţ}/¨ŮŢÝőâŸvť“ âd÷ňR?3ő`ˆB ĽîZËĽ×vwÜvŤ™ľÇů—2‘ue'ž˝:v㱛ćOŒŰŞe­V1ˆÜŤ`Ń]|B×ý-Çď¤Q Ş9ZN˘˝Ós GuZz/Ąw †žôOúÄąÓĎ8Ž?ĹÂ.N÷U9Ćfě´´ašÔŇtš>§Ÿž^e:Ž,Âěîşĺl°öô’sëIÇ5ť{ŽYÄoŢá§k"÷n.úqů@qâÓäŃő°çabAá…á5`Ü8;ŠýPšWôˇ#„BŘ?Iq˝ Ô6á̒´ďqš4/Ú§ &$š€Ű×Ýčyů(ÝW§Ůq[Ů睊Űé6łű ÍźLš; ë÷c@üăú{óÂĎō¸<ĽŠ \ę\ŮďRŤéşŮŕď’\v˛AšÝnnŻÝ–ÓO6ŕ’îv\7(îčÉťl™–n ?ŘËK­lŢŽ[nĺ"›•ĺś;}jÍťő´&t’YZjgŻ;ÜĘŠu×ÚÜpˇś6}z›fłĺΜ>ížw˛ĎN7ßžbWřĽl㗳Ápďü<—X Ě7&ěŃuOi˝$ö11 ,Ă_u˜ÓĎ~ۢ:î˝÷ŢžuŽz–c3šP ąßśp€& Ň8XŮ4šÜŇ}őÍ€Ă!ŒK×.Ÿ–Ťš§•i˝zî?Î^ÖŃÝsgš]w˙ZĂ=tŞé$;lNfţťŢläéa„ÄŰíŚoxGĘÔí¤\řS ›'ąĎéţ˘şřÚ~ž×ëNšÖˆ´ćŽ×pԝ˙œăڇľĎĚymŕÚ3Áž–vł“˝šI×=Ńę¸ëŰŠŰęŽÂR|6ş>%˜îGX˝ö9y7bןňk°ĹŽţ>ě›řE6‹ÂžŁéŞXŠžœ ţœ@ŞnVŚĹÓÓŃÄJąOřdľÜ!Ěa;IěéçúŰ ­l@e}yŮ­ś—rw ż—§óOţeŹônđĺě%ĺ/~ˇłę.œY $Ž Nˇ[ílpş ĚL´GœmťÄHV×ÜŮĺż­Ű׍'Á ׋\řcĂ?ů˛,'üɗ˜7bAţ–CO8ŕ"ěÚÜfťlZ5Ĺő<ů¤…ŠÇtŠIŇ{J;_$Ťȓ۳Ą?Më őţ.œČĘYÝN)đńéMü#AOWîŒďď°ě:n­Ýp§VŰnuĽé’ÝŽŰŰÝq[Ű[~šöň’(úk™“Ř1űť•V]IánŠř.)†zä3űţŔ슺F+0¨bąçßřXęXĹwubîZŃτČÔ§™Ęő-ukIÇ˙6츌Űëdë– \7ťŃěúţ}eŘR^‘ňk„ëŔŘěSěshž9ţŔ0ŁxxT´1ŐZ†¸Ž9 ’~+˙@üSüHv]ˇLŠĐť!§§ŕRŸ.ĄďřŁ§Ş›őe’Ą´žĽŠÓţ`÷ žšÄ­6ÚA}ÁüŇQ(é›?Yڃ4¨`žH‚'E8Ś ËfťFa/ţçĘŇţ¤ůoS’ȧU¤űJ¸. c ĹBs˙gĽ ˝çđşüH¨ŁÔł>ýŹO﷗ čŚY\×umšřdewnßvť›ŰŽťˇëLľŢIö|ÁćRˋ€šţš—zŃOÚąÔaIî‘•+ŤĽ Ëĺ@ń`tˇƛHŇÄEšX>wSaD›ßˇ/*ö‘-ݞ[[š€ŠYħÚ͗S›­CówvvĘő4wĚp}Ą˜ÓŽőćŒĎ… u×ćnůp@Ň×>ŐŠwŚéŐťĽ•ÜÝÝ-×mÓĂőřTl…sSü›díox'Ń<5Ľ•ł:­l#p —Öî'ŤSíćôžŹî°Ma{ă6‡ű!ÜŻV6n_[ĂcfŸmű­>-ŤóŔöMźŽx;ŇĐ+Z—';ߔzSuŞźmcţŕDťœ ˆŤÎ;/TxŒu>¨> ‘Ă˜$l§°óۄ$áöŠűžXýńňńráţ´zŞÚcçz(dUÇ+Üö˝Ô~Ş×>Űů§:m}ÚĎz×gŰÇá~ ŰďűđœłăŽ3ÜnŰ.ťN…"œř¸Ú>RÝyěfe›lťÂĺl›ęž;râŐßśÂcŽŰŽ3śOtœ|y[Y,¨WSۗvźăO7+*ń6Sň$úY)Fę™ýô‹€zŠĂőöŔ"šŠ–B°ÍŹâ÷€ŤÖ2QôŽ9Ž5éäóâłÁÍ´Př“ťý„ƒ,ٍˇnáރ‘0ŔÂR5˜c„žĂć ‰éyźę§řÉęý†%ŐÉň4•=çKçĺËô č„ Äa€`&DąŚ RĘ֕őתÂéÇť•Ž_zĎFtÓŚw—ÜÚÚv7Ÿ~ÎĽŰn}}ÝľW–\ş &ď7nşĆRËľš­2˝ŹŽŠUgŁëv˛Aę[ˇnĺƒőłh@šÝr¤QŒ ĐV9 4đźśśćž5MďúŹulllřeÔMß „Eƒ››–˘-Żşžyć?ŽĎšóćM?(~Ď=÷¸S§NůuhţŐŤWý˛Z‰4LhaƒüĄŔĆD"jż‰]4_m4QŒ}6ń@<ŻĺT‡ćKˆ$´˝ˇoßö/•?{öŹ”WôŽ6ëďëׯű˛Ţ•)ŰMם>› Eonnúu„‚F¨>ŐŻ6j;TV/+Ťé&L1aˆÖŠégΜńűɶˎć‡b›oeÂ}d/›nÂko(ą˛öw(ˆ Ď'-Żé:Ž*gÇĆDc&˜2ń×éÓ§ýť>kč<°}Ž#YŮ6hšö—ŢőŮę×ß:vžŠwÝu—ŻSűGëQ;5]ű_ďúlbŒ:ńęÖy!Âă­6\ťv͡ëüůó~{l›­śœö‹Rƒš 'ލž§Ÿ~ÚˇEő›DËŤÍB봗 sô wTVŰ­úϝ;çë 0§DűţŰ÷;O!ď?­WÇCĺtž ÷âŽ;î(ˇSőj}Zî… ţ]Ÿ5=.…Ç´ęú˘zěť§}ŁůvÎŤnťÖXLx¤ĺB!š žě˜č8kťUˇÚŤmăFĂĘŮńąď­ ŞâóSÇřňĺËžŹÎ+ /@a{T§ŽÓ&ňŇ~Ôy“§ľőwóQŠ—?ŒÔí&NRŸ4éöņśď|[´I‘̍ďú30­6΄ńƒb•žZLÄ=<8F>xYĎ ‰ŁÓuŒ‰­‹ŽNяfxƒ>|ç—b=Őgâ˙j&8#xěşÚyăúĹÎ9ńçý’îs~űq'8­ĎÎoű.HH Ń´ŹŚëřŤ>;žś%QY ™˜Äö‹­ŰöÖgÇ[ĺm˝ćŕŁviy;^öý2!œŐmÂŤËęŐňś/u Ônc;Oěťaç}č$ŠńÂkG,ć6Ą°ălíŻţXűc­Đ˝Ę=ÚŐo߅Ş6Ůw×eá5ÔÄLö˝ąsĘÚ~żÂk‘ĘŘľ×öÎ‹ë’źŇüwB/eWúFé,”§ňöe]˙Ŕā03&ĺŒUrŒúf"čIgPœ,†ŠtƋ-BU1Iëi_=c€ŽN:áSŐĂŚO`ŰŕiůTő@ ‰ĐzČJÝĐ[C_“šB˙œa2ŃĎŕچ­Ÿŕć›:qϸ.?G& ~Zú…Ĺo•žôŽAŸ¤1îŤşNwfI:jđ(íwLÓ´zš˙Ű@EĘ/ ôjŔŘÜ}jÚÔmeƒŰĎ>űŒŰšzӗY=ľî…?77nťK—.šĺő5wöž;Ýú™ÓŽí•łAčŽňżä9ţt‹u›xCëkeĎÚčeöĄG˜.ɄĄ(ÇD&|Šţ„Šnä bŢX]o´ź9‚„)DŽ b‡˜ĐŃÇÖem”°!t,2Q WŹŹ VĚĹ~ĚqGÓMˆbâMłí2‡­OeľÖFˇŘzĚíĂęS9m›9öč]‚ s ˛TOz—€BušŕCői}rČŃg›n3öل>&2ńAč8bbŒĐ(vf1ń‡ ›B§%XŘç°Ý–BɄś_ÔnaçGěÜd瞵Ń^ÂUv.YY;wí0AEčHd7jíGfŘym5ۇuŘvÚţ:4Ý>ë| CÇĘ\¤l_kY…B(Ő'‡üґ–bF™đÇžwáw0܏vž‡i¤$Üąď’íO­Oeě›ŰRx|í¸Ş}ćüeŰhß ľQíŇťöłÚŞí3‡! ™¸.tk …6q›m?¨M7ń“•łí0,ŤĂŢm‡.?qę4űnš*N~'´m:?´}wŢy§˙n†$™”ÚŻďŁ0W)-cÂ"ű~Úw ;őŇ&ţšdżŢŃ­“ÍSü×Hźř§lW)Ďm$ĺđ“;CŚE8‹ŕGđƘ♑Ľ†Ô3r ÓĆAŹ]Ű -â>0,8N}.=“<Üx *üŃí{аN˜ÓŤ}÷ĆěćZčô“Fó‡­˙° @€Ĺe”x'|Â{’ĺ’ŢşçL<äËiIĎÚgŹ'NŸEp@XDŞż‹¨OücçŸÜ¨[Śú’‹ƒęëd_՝Vⲥr—ŢžîÚ{›^řł• LßJw]’Íë4ł˛JűŇHźP°!aI7—H ´’ 4[jƒä­Bˆb˘ŃhvĽŔşmpŢrBᇠŽŰ@{čŢaŽ1&Ň0ÇŠh=̄Î=VNŸCLaăąSˆ-k.#JŤcƒę&b°vZ{Źq0{™ G˜ÇDT†ľ]ë3Ą‰Ö)‘‡ ŚÂtX6čo"*sóQ›Mx zĚAÇ[yڟŢ>ľś™đGhšĘiÝ&Œ°ö™ăPUJŽPžáńÔrś˙… B'!;6V><6vžŘşlXz(˝Ťý&JÉż&išŽP:5…çoÜ^[&<_Ťáţ1Q— ťbç—đˇÔśŰę7Ǚf!Ź ŁLđeűÁÚŚŽ3Á‡a畉^ôŮÎ sčŃť a„íkŤ ÜÂďS¸žĐ*ü„ß'ŰV;Om˙†×€PäfűĚÚjíR[ľ_Ăó-ü…缾'<íŘY›mِPŔ íÜ SŁŮţ ŻOńő$$üŰ5ŇÎĺđÚdhşŽŸľ%ĆśQĺBń];Ârš`4[G'ťŚ8 §ZŢ!Nq DĄ>ĺWCß=-— ˝ń?<Ý‚ (˜…ŕ§ŚŽÚžËX÷ü惞¨š.ŽąţăŔůIő˛1üŘŁ†¸˙Ŕ‚ƒđŕ˜‘Śűë§cŢT°rý˘"ĽVHšÇpLI’Á”s)~ńżOIů;՟Ą!ő˘€ŞœŇűó —@\nŻrNä2”5wúŘü´p˙QúŮ\¤žý@ÍľˇúźťÜV×=uëŚŰžu=›Ÿ €//šSĎšőťďvËçĎşduŮíúńŢěť,qM#ehyMiŒvvźřEëjiä‘ä ôë2÷(6(mbÜÄΖVJÓĂPĄ#GěěÇㆠÄ6o"ĽjŇrrČ1ąFč\b‚sľ1ˇŸĐůǃL°ŠˆÂkĄćI\c隬‰{ĚÉćŽ;îđƒűćFb‚~˜‰Ľc jtLl[Í1ČVVő› DŘąą}i‚•Ó4Ri˙¨.KóeBˆ˜+<Ög{ář @Ź=ĄĹ~căăîKˇŘ~3Ą‡œmB'˘°.}Ö9Š2qÎ~ˇB!N(îľzLŘdBsřQ;uMdaÂ-í/s˜2a•-cí4;Nś.˝äś!lŁ}ŸLěcÇÎŇu™’ío•żxńâ€CŽ ćÄJ‘ć/tK˛ďB¸ob1Ąc’mŸmO|^„çCXÎD3ú[ŰbÇ:ôişŽăšsçúRÜĹű*<–&Ř&°ŃzěŘŮž ÝsěxKĹŚăiu(ś‰—Tż9ń˜ĎœĐÂz ňhžž_Ąŕ+ÜM3G+űޙƒ“ľŐžw&F’3Úfű܋ڒ¤L'^ Ă:Ůy'O¸Vö=ęća*“ˇŽ€Zţ7%—ďdÇżź.úŢH×ýІˆ‰ŕ˜ąÎ$bŸÚ˛ŁVŽüŽ˜$ł”QsˇTĆM$"n‡áôH+œ˘iá`Ěŕ‚q~ëĆ#tűqőĹóÇŠ/\~żLş~€Ĺ"Ț_‘KZ\֋߬¤p I*:‚ą˜‰ŽŔě˜dP)™ť>7Ÿt`^éňăEŠËÓ|9É~\WťŚ˖ÖVÜŮ{ďvŰíÄuŻ,9§t?Ůô•lŕúü… î܅;ÝňŠľŹwÜtFöăÄÍl0Ú5Ęő™;ĚröRK––—ËÁ Œ:Á€čřÜkšƒÔ&ęątBˆŻţ„)kBW‘đ=lgü.Âň&>$71GŘ^؄Űnm ÓZYÝaę-9X}Ąs‹öĽ,2‚^°77Kc%L”dÂJ„B•5’ âsŠJţ‹&ěÝÜaô˛ĎĄ[‘ľ'tř‰Ăő‡ÂŁ8eRxŹMЧR˛ĺŹžĐ=*,Ö§`›”°ý&¤˛TY&` kŹ&đ°l&üąíŠ…3"TŮşĂĎá÷ŔD6:oLäcî[śÍś_ĚŃ)ţŽXÚ°ĐGőš˜,腢¨Xž—&ěłöŠXŔu˜˜@K˜ĘÄ\śmv˝ H6/<׾żTN× ýmŰlßCs2çŠ*!œ]_ŞĎÓĐŮɈ?ÇÎ@ĄSS_˝Îz\ń;Ąď‰R6fŻDI!]qľĎöM˘ď^śž†öEĊ&5*jîîă÷ЃLjřgÁϸbŸtĚú†Ö pˆ$CU?ƒ˘ J!и" i@Ü#†á З %´¸N QK1ăüšňOW,0ZC“&c4`’™Éˆů٘ĺ7ŢŐ&řŤ°ÁšŕđI]:|p˄>… /öƒ˛Ý ¨[™Ó†Ňę,šťîşË­Ÿ>ĺîż˙~×ńƒ˝‰OçĺÝa––ÝňŇJŸč#Ţ Ó÷řÁqM DNƒÍĹ@věěaË[aŞ)+žŞR}…ĺbaJ•Ȥę=Üsš&xpŰŠaBŃN(, ˇŻN\ÖŚ/’8ŔœjLhdű&üŰöG¸Ž¸ě… JAUëN؞¸}uóDœN)lO躔V °†B“đłí˙ŘqÇŚĹN1vŽ…Ë…ëχđŘĎB¨[Už7Ąp)NeçzčđS•ękŘqąm ŰaBŸX€fÇ$vŠ:>ajźp› (ÖŐÇřźvŽ&Ź Ĺaö}ą3OxNЌ„>úކiďŹ.ťžHä:qUšýւR×íÉ|źƒO3-ä';8ďčSüž”‚Ą ŞŇ}ĚJô3 ̟˘Ž‘ŒÁÄ$SމĽC”?łę„@CD@U´Á!ţă€I:đ9őd‘=Y]qSťœVsĂťšY˙Xîˇ>~źŽůoRüž–ÁÄŐtŘ|GŽo‚ł ů˘süVLOmŒ˜lőĘŚĺ@mßňöw7wöŃŠš ¤EYďΠí†[Y^v­v/mŒŻBZöBÄŢČ>´ŇBě“$Ľă°AëĘNC°öŰü¤ŒcˇŹ ŞDăÖOÓŚ*QÎ,ˆ]~fÍ(!G,ţ™ÁĂA˙açÂ$çIplT™ŞţiH.,[%Ž VąŕhÚďᢟu=!űšF44ȅJĹm Ÿ*˛ŽĽEzHý¤ WŚ“xÔ\TŢ/Ÿz ´ďaŠŢš7rŽ#ӈ~&ü¤/ëjÚ1ć÷uŽż×0?TĆăôŇzŃP, %ęŐ €˘ůA3˙ŔąáŔ ĽN¨˙H×ÝŔödŤă 8&ýő óĺÓž簁ŘC…@ĽXoPŹŢľ´_i‘şŠkŽ?rjčř2‰wýI]6LëZŚ[nľÝRŇjÉE?öu×÷ž‘ş—ŸĄí>'Ólë˜ĚrůqDűţT 0öË~Ú8kęöß°>SŐű˘P% çxďg›G ÓĆ=ߪ\•ÂyuÇi–çŮ"‹FßĂĘ9EłšÍÝ"ĆËS}YX˙ŰŃlż=5ŠĐ/­†×­„XńÄ3ŠčgZÁϰĺt?éDí\´ß(˜c˘¸˘śOYó€fe …@I™•¤Źź?u× Ä?p\@řŐôÝdŐů/DD`(~‘Ň软éކÉĄĘůÁ÷ŮŚş~€ś›;˙Ş^@‰˙Ž§ŽĄ4?J9S8{t:×ńĺ;eKš>EPËż‡ÄB­cooυi˜,…Mˇ4GaJnä^d׼ڊÚ÷ ńărqşŽpýaýąŁIÜVko¸]ś/láv„ëŰTU•Łjk‡ío[NÇRű]hşíĂ:G˝´Œ°”PÖNŐoőéłć‡eâşTśjÇiĄüů–˝ÂăގN`rÂŤ/<ŽueÂÔ]6ÍśÇöOUZťŞşl9ŰÇń:âs(ţ~X:Šşó´jßŮö…ŰÖžÂĺŞÚPő˛ăŚ06`žČ˘1đg^śç›–žK)!S;ŢĹoHš‹ä”4šůůâ§5]>Ś0fş/€&ýŒ!řŠűŒL6Ëďĺœ|Çŕ™ Ÿ34IÓÁ~]Tu(ލ!–ţ 9?ţœöŮ)÷7Ć\đôuß;Ŕ<™–ć˙Oxs/9@u `˙TIČ-ÍWY˘[ Ęťnáđ“ǧ˝[——oDƒö ‰?XżłłăśśˇÝÎŢŽiţňҒ;ľśîi¸BĆîîŽŰŘŘđâMWú›ľľ5?ďöíŰž~MÓK)˝L$#ôˇ ‡L|cÍSę-‰b‚ Âö6Ď+ąŔÁÄ0&ްňz…ÓĂmŒˇwkkË˙mŰe"Ü(Ĺ–Ś…Â§Pˇż<&˘ k(1Q•Ú˘6Ÿ:uĘo—ćŤm7oŢô˟9sĆ­ŽŽÔ {TĎvvě…ʆűŘćŠ>}Ö|G• Ű×ciĄ^@–—5ÁÎ7ľÝÚżžžŢ'b1!M,ÂŞhÍŤ_í1NŒÚž†Ęonnúišžśáůdça¸˙uĚôˇö™ö­­Çç@¸ŻM` ăBQT,R Ď#ű^čč%tžÚ÷ÂD;á9_ő=°}3í-kçcX6lăqaœóoޅ?}iËߌü7&I˛ż“\¤ß *¤iRŠNK˙ĽżI/ŒăAâÓːó}ŃĎHÁO:|ůüĎ1DŐułxŹĆaŒ˜¨Hžâa °îž{A5U" ‘ Yˆˆ÷a@ř%U?Žă/ËoĚĹŔÝŘĹů8Ɖ#+bĎ4 ćĺäŢg•qŤ‰ƒŠw•â€ ŽÝ]wăćMˇšľéö4€ßí¸Î^ÇľŰ-?OBŃÎňזW˛÷\dţÜşuˋ>$ZĐgܸqĂżŤ‰A$D1QL,p Ĺ`˜đÇ-*Żúőn ,„ő™€C푠BďŞ[eԆpD¨ź9śh*c‹P`bB šôŽr&‚ąőzŃTą&ÔĄ3Ę…"\˜đ#lŸm“ +L\d‚¸WÚV‰°´ßmşíËp[B’í+­Síą}­őZ›ľŢž}îOÍŹž˘=jŤŢľŻm‡hyŐ§uš˜DuŰöŰ:m›L8¤uk›gÓc7ĄP¨Z%Љ…5ášl˘.;‡Ăůj›ă†Ú¤óՄ?Ú^ţŘ9mb8;ŽĄ;“ŤöUx\CŐžOáńˇsDŸMŚW(Îą}ŤsDËj{…śÁܜÔ ÷ěťfő{q`śŒŢÍŮ*ÜVŐĽíĐtۖ𜎝ťÂărœŠ:çXř“šŕ§pűIRünä)żű~šŢoßžčZžčNN0#ŚýŒtů"řŠ Őľc˜Đ¨7q"€1Ęýr n‹§iuUý¨ ţŽ Ĺî?•Šż&˙Ě1`€řuxŮü˝´^÷OĂ9€#§|ż6?CÚיL*ŚŔˆ|ě˝tú1! D?…ČĽI~ŁiŻÓuˇ77ÜsW.ťlPemŐ;ţČáE ĺ×rç–ěťvý”{ŕî{ÝĘҲɍ\R2$4‘(ŕôéÓ~Đ˙Úľk^ ‰a$ú1á… ÂRZ^ő˜ˆHÓMdab—PÄ q… źťH˜‚JÂ-ŻşŽ_żîß%ÔŃv¨źšË˜h#t—1WmÇ0‘öśÍDQqJłP,d‚ aŰŹeľ^Eh=ZŸÚŚíąm W´œśGűIËŠ-ŞGóMŒĄm5÷%aŠĄS fb7[ˇMłöšXω‰T|]IŁ4řP™Ý˝ÝR¤Ľă}˙ý÷űýŠrLŚ6›ĐEŰŠELpbÂmƒöť–Óú-ř xB—';–ĄăM萣c{ńâEż˝Ą°ĘÎ[­'&Ůůşâ˜ŘĹDBvn‡çŠŚkšöŤÖŤWěţŁr:?í{˘íťrĺŠo‹‰”tŽ }7ěܡănßŐŁsĂśQű˙ěŮł}Â+ĺhë<1W&­ßÎííŰkŁĘ_ştÉ/ŤíŇzĚŮÉDG&3ń›ÖŻvčem ĎŤŘő (a@!Mráţnę|Hrąć¤đ4ţí™DB'“IE?U.?ľ‚ŸaÎ>ľë‰Ššń„BĂKÜç’Lv=žbBQ&rĺ‰2Ş6P­h\÷ŸIÄ?s ÂMUÇżxęuT1€Ĺŕ N^ÂC€yŔDŇ1ĚĂČâť;|šÂé§kş&öIţ*œş…ëĎ^gĎ%<­‹R~)ő×vwĎ5 !FťŮĘĘtĘü ąëĽ+2„>K  ƒ‰DL;݄Ž"&*‘ŔŔ>› Ĺ^aę Ő+aM S…i=ćĢúLä Ą‚ Ô'˜Ŕ#v*ąv™;‘ `Ba’0!č˜@Ă܋ÔM— E‰PaÎD†í'v˜ˆÉöA(2ŃöšŘD/›fŰiő›€*|Y;bǜPĚ:Üt;Ej4sCJ‹ôj…ČHóŹ}áŤL-—m‹šýh›$´ …V&ú1§-#щ rlßÚzÂs$_…çŒm“;žönĺľ؃ŽľĂÚfűÂÎos–ŇL/m“šăHTcçž‹Pœ¤úM´Śşu„˘&}ŻŹ­ZNç‘ţ6q Ě˝)N[nŸĘÚůmâ%;÷mšř;jÇÍö‹‰öl›T}7,í™DJáw7>ďN‚돘GKb!_šßÜO‹ËPţ“;ü¸đË \íöő†úŔÔ˘Ÿ1?c‰}ú4?ieفyý3öG äéŸ ~L|Í+E=áÂý}Ťru 4XÎ!ţăčFv:îÍ€š'xŞsěň!ŁÂżř9Ӄ…`  b€­9D?‡IZ1:Ů2&vÉł{龊”^iŕđSĆŠAş//Ćiůz ZKš3Én'OÝ%矖ŇX™ËIťçěö sŽ SJ™@ÂŢľýmB†PôşÁhšKT‡ÚaŠĽL0cÎ(aŠ,Ť#t}ćŕcé¸LŘcB‘PĐ`Î)&p Ĺ8&\S™°&l݉7”Lć cí1’Ő#† ^,í–mC,–°}dÇ@m0!‡0§"‰-Ô.jsŠ÷yźĐ•FíXeçWÓ˘ňŽbR rl_Ççp˜şLŰ1Š…!&.ą´T֖0•• ÄěX„Ë…b'ęŘ9bÇŇÚdukߊ=&dÓ~Ń÷ĂÚg疝#śŸŞÎçŘ*Ţż&ˆ3qŒĽŚ3—#OKáf稚Z…ű*t$2aW,v˛ő‡ŽCćTdË­×ć‡ßŰa˝śýa*śPŘgßŰçáyóC™Ň~/Šô°–îËÜ~ňićԟćŤJÔÓ7X0VCˆC3)úŠüŒĺ ÔŻŠÚKK‹łlťL ¤}Ľ—ę ĎçPP„h2ŞœÇöUŸ+zpݞ¨'˙œ§†ôé":öš \~Óżˇn č§řIFŎ œxö!úęň–ŻűLěüĂu fEM\‘$ąč§—U¤_ôăŠ7{}çXT%Şt˙™ř`‘@řűčŕO*š8`ĆfŇŠĆ\ޞč€ý2ŻŹŽ¸öňRéÂT4˘Ź?—ŘďÔ,~ŤÂ”Y&€1‡ľM˘íŰXh2I1ÜÇĄ;§ví{bÂşřűŚ2‹ÓŒU­OŘ÷Ě܈l}&Đ ÷i,` E>ćH¤ý4 Ç1Î÷˜‡íö7éSWş¤y‘hZř űŠœ<Ăc9Ć,8ĄŘfŔÇEŸk„<‘čg¨ŕ'­Yאëä@UqęOäŕjŇŕ&qR 1÷0§ŸZPűĽţ%ţÁőŽ`JâÜ €E!uÎĽűœż6`œďÖLNďćPŐŕU!ôIÍ1Ś*X—–˘ ä^câšP\¸zŒo䊯äHŠVÂTA&h— ]?ĚÄ\~„Ś™Č'Tî\X\Ňç#áOžÖkŮ;Ôt‹tdyťĽKMYGcKÝvWÍł`r@ )Ö.ŕX;bÁJ,„ ÷O(´°”JĄp(t€‰SI…N8ĄĐČŚĹëŰd".š%™Ř'‡Tﯤ\6œž/“ϡóĹD^&ŚRʰF+wb*î;6śÎĐľ(nó~°vIşů„b an5“śĂę Ĺm˝ó´ŐwLěřĆÂ;ŢqŰÂś„çŁSmcčš~תś+Lg甉ŰbGŽiöAńőb“ŽżĘ‰Čڇԃ?ű]Ϥű§’đgċ€}ż!Â˙6č:Úě_(89ŔÁ‰%­>šč§RđS,J’Ądź?‡í ÁTQĺň×Y÷˙ŻÓ„auőV‰RLĚSľ}ńźXh:;ŮüXpŻ7Léö†)íâ2ă|7SřSUǰőW †Żłîó¨öÇe÷%ü‰3Ć9ŽHŮçŚ$愓Ťć#ú‰ËŒXŽOě– Ö=ĐžŠŻ˘˜†:ńLÜoŽ˙N‚ĺŤD@ů͙ /ú ö"#‹ëÇ˙Äíˇu,`(éÄ"€ů r€(UuDë;§ů\Ç0ŔhĆœ­xr(ÄÜü lĹňá ž)xŇŢňş?#ĄO;{uťJ”řtN$”–ąuÇm1ąFőSk5%ŤˇXĘťťôßIęßęŞz{ëWŠ4˛˘Í4íĺ˛Ďč6ző)˜÷:˛[žƒƒţuŸ8íŃ0ח´x˘N.6žAjŞpŸöŽÉ P¤7T‡Qĺ‡MËäÎA ~”msňhzŁ‘ßALKQXˆ€šŮ†J€dÂsš ŢýްĹÝŒMň){Ůzv÷öÜ^‘ÖŞ<ż­F@řéČíŒqöK(´ ubNěŹTunĹ Ł„ëĎßXüŁtpJ f北Ń8"Ľaçg•`(<ßMgŻ8%Y|nO" ŰnÝ÷d˜¸ŞŽN;XU• ÷ĺ0FíŰiꈧűýď†ß)~Ż+ŽŠŤÖďƒ^8YŒü=Ä<ů2ă‹~ú?Ĺ ë?Q˝a]Ų˝v§Őmtő_€qđ÷WBăa÷[‹ůIށŽE@e˙'N?śŹM›TüSúӈöa@řpâŘG?,<˝ń`ë?ď?ˇľž°P¤Š%2OÓŞAŠÔőë˜ö\8Ň­C˘+řÁřnęťťťţݗ)đĂTUá2Ö.ďÎRˆ ÂeK7•$ołš”ëĚ^nÇ/ŁW(L°eűŇdĽ˝M÷ӔÂlŻëŇ˝BŘ ‘J+°oöśÍ?ľV°ťBÄ28ŔSfĹÂŰn›_Š7ś+G•8$Ž;‡T † ^Şę‹ˇľY•ňýßu]ŸúÇś=?ťöövÝććŚß÷ŤËŤýçDCŽ?͢­*ß-î=ÚśŠţŢţ(Ĺ>Ž<-zZŽěďNZHÔśŠśű: ܀đ§nLâ˛R‡ëVGœ"OŰU•>OÓ$Ŕévť}n9á÷+\Ç0AŒŐ§ďŠĐňaZ0ŐŠ|”{UçRüwŐç¸muÂŚp^¸ĄˆĆŽÚÂRŘĹ"š° áő%lŁ^–"­nŮ*QPź=ážłéáq—Şő‡T ~F‰F Ăivýśr†Ľ{Ó5?íÔšXĽŽO,ďł4ŇÁâś? 'vŘIŤćš E?‘ŕçĚé5÷ŔÝ=wsgĎŹť••ĽŠŻőU[pp÷MĆGqĎÖ֎ť~ăśťôě5÷řă—܍›vł#ď—bs˙)ţqŽďáĎ2ş/„>Ă ˜_ţŔX¤třáŘl“žŰĂž4˛ŠX]‹ĘÝd-$ 7€ůaŘÓćĺç4Kű‡ÎúKótIůݞnm˝6¸fńw\ż~Ýíěěř3Ľů9sćŒ71މBĄŽ–ÝÚÚňŻíím?MËŹŹŹ¸ŐŐU?8o„bŐĄňśŹ‰T^ËęĽzJq€ÄIiÇoޤ—"[~okۡYŸÖڊk-/ݑ¸!éí/؏ĹśMj‹ŢCaÂŔ1 „ z7á@•€ daP\6ü.?íŔf($Pľ˙$đév÷źř'/ŁťîćÍîÉ'Ÿô§Ď˝ďuwœ˝ĂďßVłášĹS…{^|Ľewłĺş…pŤ•˝ú… ĄđÇoCĐ&­×ŸŮzuěMÄś×~łň펓kÎďřOťĎBÁÎ šhŮąöî:˝óƖť}űś?ÇýyšÍ×ţŃ6ž={śŻŘ>2PUűíÜźuë–˙źśśćż#ąŔÇxšW•Ę̄JqýUëłw;Ďľ˙ýŠDsF';śśóďłíűŮľBíW=Úţ0X•FëÜŘŘ(÷­‰ Mô¤W,v%¤ą}¤ö¨l(Ŕ˛ălÇŠO Yąoę>[;Âďi•اNü3Źžx{őYűőƍţš u >wîœßĆdŻŞƒ5Ĺýb –:Á]0żĘľ'Žc”čçôŠU÷Š—żŔ=üĐEpÜQŒżşşě_ď9ď^őŠçťÇžtÉ}âS_p7omˆ}ęÄ?ĹVĹüÜü§WŚVÚO?„?'ˆtš›[ ŒÝ¨Ż?÷cYMŐç*jnŞ—ó’ęŇž@ő`A_‘¤ş5ő$•kž<O áÓ¤Ô¤ţ8îěgŔjˆŸtZ4|2Ţ>Šwké{~ž§ę-ç\ŸĂ† tkŔX/ţčďk׎ůă .¸S§NšŘĆĐ50݁gŤëęŐŤ^`Ëi]"€pű´œÄFhy[ˇ~[%hĐrwÜq‡[__/…;ć {SJ[ł“­sϋ ÁÁÖŚk/ľ]ëĚY×\[uIťĺAiąý˛ÝĆďƒt@d;’ąăˆmť˝lš‰Ş– Ĺú[ëÔ>Đ2Zoězżđ<¨3čh9‰KlBw;oşÝ¤o™˝Ž˛=ڟ׮^qĎ=űœÜyáŽrßy‡ ˇç?;{Zv3[É-—4ö\ŤŃĚ>/;ˇ—ƒ$wQš79ŐFY]ÄÜ1gŠŮvMľagŰˇŚ„Ú9‹‡ąĽ?—Ónĺçv\KעŠśX9šQ™ƒ‰LěxzᏉ{Šť˘&˜ żzéż|ů˛eŘwDuIô˘ďˆ^ńńŒŤ°óCu¨Na./VOř&’ÉŻy;Í1É^jwč¨îťĐĄËÄ&&”Ši;ŮéVďÚ`őŠÖv˝›ËŽś+(…"(͡”e& ż3Uߍ°žŞ}kßY-Ż6ÄßM…ž˝I~ţ…Î;Ą ĚžŻůS´=!KvmŰhëŇň&ś´ĺĂuXŮŘéG/];Ÿ}öY÷ÜsĎůóLű7XŢyçî%/y‰ťpţüĐž`Ţćxr$Ƙâ> ńâÉ!­œÖ/Đüť_ôSžŁ#D?7żđů÷ť×˝öeœ_p˘yřĄ{ÜCŢí>ô—í>˙…'Ő )ţ)côHüă Ĺ=ĹßUŽ2 óÂ8śŘŔšÝ”Ž&’×$ŁÄ?Ăn°%.žuÜďđŁôĄu¤I´ö¤: ěżĎ× A.‰Ę ż!8POR+[*iľšŮ úĽę8ٌ ^ˆ>ţrÝb°?-ÄaŞ!ŘŔł7Šź“K1ށäO}ęS~Úë_˙z/Ŕ ߅š˙(ÎP=§OŸö‡Ç{Ě~řá‡Ý=÷Ü㝃lßĂ—Üźyӗ×úĺŠrĺĘ?]‚•óĹ@ľĘK|ÔTťźÎ"[Xěu÷ÜÖöŚK:]ˇž­wgcÓ]yü+ŽŃMÝÚóîwËw]pÝ3ëţĆW.č–&Hf„dB˘Đ…(tđŠ:Ů ŁíĎĐĄE˙ȩÎĽ<’Ń9`řÚ=Iü¤—šŤ„űÝÚ:؛ŠöŁöŠÄÚ÷Ş+lK˜’MŽ<Öţ\‘ ´ :ŚO?ő”ťqýşwô9uęŒ[_[ώĹZ7eÇŔmšÝîŽŰÚÝr{é5×h_ʖÝp¤‘Őˇž“;łb§˝ aŠ˝ěÚÍ,nj"‹´kťĄŃI]Ť“Çp VI¤sĺ†OçÖ8ľîk+έś\Ú ˜ KscHü%!‹šĚ4yŒć%JY}ć4ŁóÔ;YUÄwÚڇ›[ů9­ýoÎ<ńůˇÁ•˘ P´aărLŇąŐńąs뎝îňß c؄çR,üѲĎ<óŒ?OlűôˇśCŰcšPc‚K5f)ţź¨Ź•Ÿ§&ÜS™P裿Mžűą`ÍÚ~Â Mä§rŞWó$TŃţ˝űîť}űĂşLđcâ•Ó9m×sŞ2!Ő0\xĚěz—ÂeLädŻR0Öj{[(ĘŮÝąTxiyý,ŰÜ^ʅU[ůyiÎiĄ˜JËJ(ŠvH¤Łk_č8Š´lĄŕčŇĽKîƒü űÜç>çŻŮ&üąůĎţóýős5Ťˇ×gŠ•É*!PiZ>Ś éżłœ†c‰~ŠxćŤ^ţ|÷ŞWźŔ@ŢGřşŻ}™[^YvŸüÔ}?9ëU'ţ1|šŠ”_ Â86„WvÓ×nčW'ąK‹T[˝ŠÉŸ´ {<. —Hňˆ3œßˇź žę/ŚUŹÎžxŇׇśƒe‡1XÇčeťÝüćš=ő, €™?ďĆ Ő9ĂŘ`w(RPĚ`ÂŹčwÍŇ~…΁q=&üąx-oB˜ˇ:âeÍÁD/ŒˇtaŞSŕ–Éť™HźR¤xŇ~@˝ŰqÍ4˙-vË]×nś\ş'Ǒl{6ˇ]w}9+Ů̗Đúsc¤’đ—ŰbŚĐŮ$Üwą8 Ćâ.s )]e’Ńi‡lyj„ŠĐ4˜ˆľ;^śQ žzn-ýŰĄ÷Ţ9ť’tËărăĆuwýÚ5˙ˇÄCgϜőm—okGN?ŰnckĂ eşÉˇÚşœĹlˇü>ŢÝ=ĺno4]g7”­ŽŹš3kg]Ň.ŇReŻF¨3—ăO7ÍĺăreÚÉśçć†ëngÇ3ŤŁáăŘ×]ĘśŤŁcoçTűĹN=ŢŮŚpgÔKŰĄsÚ-6MbĄ¤xŠQőišÄ:&ґ E/Ÿ*Š\čœ4w&KŰ‹b,}ž^&´Ň:íűb)ŻTwœ/>OLÔeéř,“ľÍśŃœ˘ě˜š ĎÚ`îE&Pń•B€gÂ?kŁţÖq÷˘ťBX Îěşaג0í–mŻľCý­Cç‰>›đGíRýڞ0e™-k×%aőÇ"Fű.Œó=łsÄžWć’dóătaś>/Ëţ;söŒk'mˇłťăĎa)śL hb_Çzî¤k•í§¸mć>d)ÜL€e뎌L ŠuHč#ÁĎG?úQ÷ůĎŢo—–Óq3QĘJX¤}ŚU3ąÎř"ÔÁߔiœVŚ]ű΍rűq°gяœ~ý ˘Ô_Ű[ŰšóëŽ'ţqâýaŽ?á<€9áěFżnţĆAu¤IOÚăo÷t9~J’V ĆsěIҨdYyľđÇőľ$ţŤ‡nlŰ ZL7Şwg…¸=őŸŽ~iiĎßčo4'ŕˆIÓÁľr<­'ş E8Ąť†~WőŇďšÜb^ö˛—ůň–ć+vہkCkŮ˝čE})ˆÂôWĄ#JčX#!‚ÜO48­:ĚŠŚLÉ#ˇŠČůFŽ.ÍÜđĹ/sďCšnvŁŤéE ŰŽ+ˇĂĽâ÷ŮßŘęúT_šP@é§ň{VÖ˜ŘÁÚŰż?{ŸĂm˛Á{›:˙T:ĹDŸľßÍĺHBFXú3íÇđř™0AűĆ o˛yÚr§1‘Š–‰…Ząp¨tkéŚĺţ–‹‰~t<äȢ×ňňJŕ8’ :Žßźž Z7\ke×5Ű=1™rmćuŽŻrKÍe×nŠ­˘SŐÎEÝLôé؊ăą{ó–kdű!ŮZÍ8ăşË-/źŘŮŮ-„!ÝžýŠc`űMő´Ú-/ŽQÝÍčŘj鳄ÚwĄÎjB'mčxjžś[ËI̢ýsß}÷ůzĂăin?j‡œ\”śÎD'Z^uŤ‰2„ÚhâÚŮšnq˝ŽŤć}á _đóő=Ó17 ľĹD5&’˜Ä\ľTżÎ--ŁňśŻÔNkƒÚĽéŞGçŁÚ-G! Ůů˘śËĹHe-5ŸĘ…ŽCĄŤĽ´żUN˨=ćd‚$ľ!ÄŘ÷,^…߁Şďf<-ţ:ĹßĹP°§v=őÔSeyˇâÜő×űDU:Ż´ż´=jż9Z—Rjű”gquLľßTĎôYnPZÎś9s™°Je?ţńť|ä#ýŹO˨őé\|Á ^ŕĎ>đžă0Ěčg6 °?Ćď‹ÁńŁĘí'­8'F‰~Μ^óé˝Náď%b Íë^űR÷Ěł×܍›n¨řg uW:0×XdŠ€cƒněÚ ‚=š^…Ý@öA\ł•?IďňÔ ťÝܒ^4dußlř÷őÂ-ż§AŔ"ő Ş˙ôj fşqoW=­v§ śâ›íÞ .­ô­5CDC6ؙě%CŸě˜ešŒ`PۼՃhUn5Ąč'›Ŕ!HXšŁř71îčo4hĐڄ*á2ąëŒš÷ ­/\Ć~ăťÝÜŐĹ<üż>Œ(]şůôFŤ,­eƒěqlmšŽDZ0‹ TNn2áࡼ ĆÍŃÚVÄń„ýö[\nwՀ|LônNB›RœZ­Ş-–ČB&†0–¸-ńň=W'‰"v˛ă¸évłuŻ­ŻšÓ§Nť3gNçb(Ťnᰓí×ÍíMwăÖ wůęĺěÄšĺÜRÇ­zíSÖţÍÔßlÜÜŘőŽ: Í.œßóiˇň=ďúŢ5ݧCƟ9tŹ][Ý=ˇ“vÜJłšJ˧Ý=ˇľšĺnąŽK''у9G…űĂÄ/&Ž—xBeÍůEÓěű`ó*ŃZź˙ęžcŞĎ\qBW+˝Ť^s¸˛T\ĄJxnŮŕ#Úü[YvÖx?—~ů­Mß5–şŕ đŰż“§n6p#ěIüQé7ň!§ŕó`6X^^ę{ň@ô~Ç\-ŞŠĂ1˝_ pl Ůá`t˜ĆGƒŰ&`°y&°°el`ŮDÇá včT!ÂTA6ßĚĺ˜!ç ľé™gž)ů3fůovĂuŠ4_–5´Lűlť›ˇnşnśür;ű=^ÍӃůőuŇÜEŚţäżëI)2‰ŘĂ6VĹuiŔ&ÄőŃýUBĐ…(x„mÔž2Ç 8%RŘŽ\ô”Ÿ&*˛ťťçśwňÔTš/÷—óçΚőSkYÜ´”;Hîv\ÓçKś?ˇľĎ7n¸çŽ>ëv:›îvgĹ­ÎE_{; wýĘmˇł•ĹbJˇśî$űé$v~¸üXťĽŰHýź$IýMÉNöy#ŰÜîúŠ;{÷Ýníěé,ĐjgëŮsiv<ˇ;žńášd"ľ_ąžŢ-e•mˇ9ژ[‹ŢÍm't÷Ńrr˛9sćL ˇýöZl­ézÉaĹĘV‰vT§žGO?ý´wQ2ç͓›Ž9K™#uŘą4'KÝŤc+GM—0ĎśŮÚomĐtŤ_ó$F1÷ď\ă\)x˛TeVÖҁŮ|űžYťTFűÔDBćŚéśŽđ6!Ąę’ƒľGÂ+•ˇôkćTeâ+•łk‘wý*„]v1’Ž…]kÂőV}Ďl_…bvU‰uTV瀝;Ąk“ÚÚ–JËÎmłŚYŞ5;śĄPMÓĺÖŁzľŐcéôÂԌáţ×r*+Ç'ŐýÄO”űLnCryŇto:Gľ ^Pş¤ŽaŘg7Äí‡ţPCZăÜ;ŕčˆ~ú„>áßĹyúÔŞ{äĄ{ŔT¤)z 8ôÇeŃŽ×÷ŮnHZ]Z^7ń{N]?XŚÉüÉp0Cę?ĂÄ$}˧iŸHǖ6ŕoÂařÖŔźýöĹ.ąc…ŐiˋPĐ ŘŔaÚ Řŕť l}&ć(Ý*’`o”ŸÉ&&ííĺńŠňľ”ŹŘÖ"•U.ʗó÷żLDüև‚R„Űƒ0V°ř!vˆŠ:Vu‚˘đ8Ď3ńşĂýhŽ2ZÖUˤ}‚°ÜQ)wÉSC)éĘĘŞ[]]qwœť#ű{š+řĺťů>Sü¨¸ŻŃjxˇž­í=ˇwmÇÝÜJœôÝNânßŘőďf(ÚëęVaďŽa~(ě8ę˝áŠcœŤYÝíÓëţfäňŮÓnůÔşKłă™ě6ÜŢňŠo§‚–Šó*z[š[a)äD(Ě–ZNMŰÝŮőuŞ.}öiąV×ú„"ÂÎ[ĽšłőíuöĘăa1˛ęVaš,%ižGĄř'<>ĄŤ qôŽ6›ˆĆbQsžąďŽ?łś-­ćŰ —žƒ–âĘҁé=>ĎĂ8×ŇŅßkŰR{Š\xžŰçđo­ßĘŘžŐgź˜kNłŰąłýn.ŚśĄ{’ŐWˇĂvŰú­˝ŰţËÚţPżÁÚŁňvě̑ËD‹v^éoűđ:iß'ŰgöV&bę}G{éýB‘ŚÖŠtŒIX&Á9<Ů6iţŋ‹ÔnuˇčC|›Ćúm“qΧ@” ţÎŢxŕ˘ư~Qšt'zţŕȈÎÓ>7L˙J‡G=xŕ÷ÉO}1?‡Ňźž¸ŕď|ÂpúĂƒđŽ=ćđci,ô¤Şž>Ö éőőSn5äJŸpăĆMˇąľÝ(^u,ź~k# >݃ĐőrÔi/i@*ťŃî48ŐrŤŮĺÝ÷ěłĎř“ [ÜJV‡nYk@D7öuĂz=ť9­Î‰OĹ ˇœ$x.p'kß­Mwvő”{衇Üwč&úř=t ܸqÝmnlö=9ʁmżnŞŰ“ÍO>ů¤oƒ Š} gíł=a,l D7óďşëŽr°Ł'¨ęŒ9 ŕĆ\¨Â (˜çßňt—~ ŮžšáĂčĐýÂR$ŮťŽĎ;çűBG“*K˜ĚD3–ňKżĹ–J(gŘź9™¨ŒÜ*lpßÄVŢÖßH,őQopŢ˙~"ŰŽüŠľ¤ČˆÖ/|*A‚‡M¨a‚í"…ۧ_ ZĚQĐ;"¸ë ßmžĹ+Úć$bű_XŰÂ6ř¸*‹ml9í ô‡î†Ą;PŘŰNK´SˆŚuÜśŰÍRŒŃLrŃś-/1¸b˘s;çź3T š-ˇš˝•o{ˇé:;Ůńn­”N2UŚrŸ¸ţ”ŠKËKîÎťďöŸ%š÷t´ż/8ŇyÖÎöÉéłgJg /*K,mmę(‹ŮBQšD>ć ¤řśL3çě÷šĎŮń×3žĆÂkäŰNbˆâžŠ ń(Ű*”oÉT¨ý„›źŒ+‡űn• …bzřwźÉ˙Vâ"ŁDEř­PLŠËôC2™IćGEĽTýa˘Ěą¨¤îŁ$ Ĺ%ƒ …Bqĺ!3ÁĹ鎏sh×9¸‘MŔfgtĘŠž[ś\ˇO/śv™ÔqńÚŢŢćú\` -Çj”Z'tˇ×ĽV×͘ŢkRé7Œ dů˝Řš~FüiŮQ/Í1ąÝIźŰ˘Ze‰ŠŽÓ˜l泐vÜLvˇL‚—XĹ#|Đ7ägŃJP@Ú Î{”U‚BĄP(†âŢCß3A ŹŞ<ÔoĘeŤ0ÂßŘGŕZÔ6$-ē|#Ó ĄśL„%ąA$]O¨ˆ"Ajygc;šÍGđ¨×œďÉ8Ij.cˆ,’Ś}§ƒĂǑ82räŐA> üRQ¸Nłŕb1E–eBĺ”QńBüÉUŠ˘˘MŃǙœQy Ď[™¸!vŽ<¤ ĺs^ŢŻě ý$šÉsŻL, ‰<’ŞLžĂ嶅ç§ü7ĘăşB?€<„‰ ţČóëAĂ'ŠŁPŁżˆŠßYĄŕżBáaĽYTUŹjŠ –›üŮ, •ĽR(ŠŁÁ8•OFJ ĹeB4ÜKm0ĹdXAŞlždÜuăƈ&Sú1d*UŞŇy…W^ś^c#Š %ţ( …â•‚B˜Q‡°›şÂé5ď€îřYçPţaG˝*Ëě\™˝ Gsł‰€Ly`bye…p8}‡ýnwÚLüa‡šÝvoŸëqA””!°YŔ+„iŚAŢ™ÝpÂ#p€ ƒ ŞĐR‚É6€hŒ 'ůŹädâŔ“BĄP('‘ňö%‚Jy!" x ”?ĘitÂ:ř˝oƒĎĄN˜ZT–É{9 Ś ŠďÖr^ţY0.&ź×#çťâ6bťŮ4#őpť"/€î˙q$ÁąHP25L.‘¤1y@=LOVţ †u²ňöĽ}Da%$5„Űe%!Q‘ž++ý„űÉ’ ŤÁD†%Š­=W)<.Ű4¸&šś˛:u{›ŘţŠçhyĆÚm7čúJ›SĂ"—ëú˜ű=ňőŕ\Ď՛ś–ŕú‹‚š×hä)+űtŰöB’ t˜Z(ÜVŢ÷Ձz—Ö+3 ‹$1††ĺŇ´ňXË)Žäďr*'I$ëËuU)˝„ę#iZ=Ť8 ô—ëƒöRO) **çÍúđ}Ëq†Ş#Źęç>=VŠÜ{$MÝěŔ>Ďěƒ"˘ Ղ$T‹­­4Ó¤9kťugmôĽ˝Xz٠Đ~ҞWsŒ¨za4óԖ'UúEbPÄMp ,˙.Ÿ9Îđ˜GaœÂd™Řž?ů„D Ş2Ą˘VH2•˜,&ë˩ڀđ~Ŕś 듿aÓʲŞô\Uä“ňßň[Ôk互çP&ÍH„éŹdŮ0Rżě/­¸ga ‘(L+&ŰOk‡}.żËĎżadżđťź~Ԓ;ź„OYő‡×“Ÿkc"M÷Ľ¸ÔPâBĄ¸xĐ1ˆâˆÁ3ľ{Öůëfćć3iggf9ÍH5˜‰=gćĹ\×Öq\KhyaŃŽ›s8Šá„÷Ž{Xƒ¨NĂ{L”;ąM‚kľ;´4xv=ö[f× ˝Źżäa<ăÜś=ąűšmştÓŢ ŘĘŤę,ˇľœ:Kʗ 2Ržźý°ëźüˇ¨×HűĘĎç[ěä°\UűG]ĂUÄ:éłQ7ůžôž ű|TÓ^cĺó2ŹŢQíŞú{Xů*`|Ž_ŠÓ€™fÜnŐ~äo÷ĺČB˛NÝc …b2x{Ä~˙{߼˙ňŸüôƒżú.ľ[ŽÔf9‡ĘÝI=Ŏ3šKýD§8ĎƍÓ@üiX?őý÷ާ÷ß˙÷ék?űsœ´NĄ˜™šU0Ř•~ĆŞţTŐŤĎŇ …Bqe ŠYÇ:ݍ›í‹áAl=uŸ"`;¸˜iÔ¨)slkŇҌ˜\bTs ƒČŕçL­NBß)ţ­z“iÄÁ'— áŇ.ŐÖôęا ł•šŚTĚȖ”d ĄoĐřőôG[‡‡Ü&ür\gŘž.I ڊ?Š‹˝ Ĺd¨Rý¨R- ˖ýÂŃUďĹpťŠqL_j9Í°Ŕůdžř"ë|%Y;d{ŐŁ`–ÉÇ+ŇdŞ5yC˛Ü̔xq4Đn_ů@ŽgČł?*Ě ú1;ĎY iuĚ)p|†%ÂS&ú¸29mÇőMä҃eǖƒL8ŕŸ!JŻŞČ“ÉMÖVS> S<Âh ă¤ě˛21kągÔő^nWůŢ*RʄšquĘň*âŃ02OUĂîŰěZ÷d›2­LüľŻi>cĘ$ŚaDŚ2ąŞź~Ř~ĘĎŔauKůŞ:Ş0jűňšuÎĂďpűđ]EĆ:6Nč\*^Lzńj?† •Ő~D-HĄP(&‡ł"żńżOßý‹?§vű˛‰éĺEÎĄMǃŘÖG­KI#§ń“Ć#(Z˙ô÷żűúýß˙}&ţ”i_™]8°­â*áX˜Q>mi¨úƒqš(ýLJâž+JüQ( ŕHß'”žHýŸjI ?Ř{Uę.n ¨Ăä¤,€`8xĘş˙°Ýň2“żg˝*Ě€•żŃŢY¤+ół™E („,—t`ůlfRźâˆt$¤P(. BĽ—Q6A˜ŽGoĘĘÇ *Ÿh0úˆ0‚K‰˜e… JŠ­&cţäżCĺCôóPϘßëŔńOÜEüĄ2;,`r§žŘZ°łffĺňÔ*HĺJQ"ôršˇÂŢ •Ëű-'Q0EâQ!•WĄ\ĺĎAwdĹюÄQŻŐňßÓ˘Š8Wľ\ŢUĘ?“’Äś.§á+ďłJÝg¨źžŠ¨"ËÂ~Ă-á6Łp–ă˜*Ô¤űŸ„řsœíĂsUngůœˆ˘Î??ĂŐUŻ8k˜œ¸3,͗űĘÉ­îËżł€Ś°ŠŤ‚ô÷s4rӀ c nooQ\é+?ű3Ôé´í;ń÷.uÄ$ř°ŞÉ-ÎŃś˘Ž{r}äí^ž¤š‰”™Ö“ôËqˆ?ÓZÍGGDŢ㈜ő^w˛÷ŒS ['Ÿ˜×uÇ Ý?0Ůc"x˘OvqŚ•;˜ŚFCu˙í&˘Ä57Aöŕŕ€ććHńęá8Ď͌ÔăgÝTŞţČÄ `"?ipßIş/^Żc Ĺĺ‚ …BqePŘy⠈?źĂ/Š aœŠ?…@O`ěůÝ3´‹Ś–Ž/íˆ7AŞą°u>”ď~|p˘;ŇÔ~âs `* …B1ř XŢYĺô3BŰRř;$ۇř;çďŘúéw÷wŠŰëřĽƒ……yNŃ%ă„íí ݧrż|őo¸6üŕGďxĹ7NP(Ž“ϸĄag‚t_e§uPDĄ¸đPâBĄP(' 38AćŹÜuQŐţ§„Ć5Ó |˝dꌪŹaçŕâŃ@=JR(“cň–(ţŔщq˝”öET#8ÉᜄB„›:cSq֘&ŐWš|4˘Žˆ˛iËUŰGĹŇšS°ĚގJëŤU‹LŽř}š8îuŢC’Ž)$ yDŹ)űD¨ť`îY ş @uăĆ Fˆú‹(I`A‚˘úƒ ţF iP—( IĂc6ó9<&ĹŮ@úçLŇË Ń×§Ö¨řdi7lPń4ÎV˜:RĄ( “{Č=˛jäoSü§…Bq$9&ĺ(~üńÇ<Ţr6PE‚†ú"ĆA/^ź qBˆřyr’žcňNm-cd}ńX[ßfđŘLÁĎjh2Ґěż7Ţx#ł1ö@Œa jŻ ž`ÝÜÜź?nŃÇš­(’ ěҝžX›}†ńdšŃ(óÁx2ŃŃćĹóstâŘ,h—(Ů íÇ2!ÚŁ_=zÄöVu;ň:QĆd„ŸAâSŰ]˘;wîpŽř“ŰvRo¨*$ Ÿ8oitŃқ).BŐ–î+[[ńŰDšrŻÚýŠK%ţ(Š „…âBĄœÚŤŔ=g˝¤Ř˘źßqĎéGŢőX˛Půž‘\.âf‡Gîs9 Ąn!{ˆŠ–/,,duŮÁ ÜĎÖIJ2ü ľ I˙‡2ƒׅşd9– ůëËőŐ횡a-R(ÎB€ ßcÓ|Ÿo@=o Ĺ ăcŸÉ,•býîRu›śśś¸VĽńDh)#)ĄtƒńŇÁţ!ŤŮ¸÷ę áÄ˝ÓâÝHüž 喫 —óRŻÚW$ƒ§k‡ą)+sVä99ŠřsrV´rĐW™í űę>/^ź¤$NXD+…СׯŻs\äĂëF=˘l’ÎęÇ>ĂtWĹÉĆĽ(> ˘Ěc7•-Ü÷EăLáGN=¨¤Đä|âna­¨î2é˘xÍ,)aÂNƒVŽ]§Ĺ…ĹĚŽËŢ ‘oź(˛F¤/­+ŠcęÎe1‘T¤űr%%ĺ—!Ş¸ PâBĄ¸ÁCßv0î0(ŃY֊Ip6×I(ýXąď‚!I—NSyëŠéPtŢxÉGŢ2S_f1Ąź eŹnŻc,…BqT˝Ĺđ‡d=œ˛B*€’ˆ8Xe™“tŸËfg é Tá}¨MzÁ0­C?š Žh‚uŐ×AŚtG“ď}Ś:ş/Ňpݤ×qYMEf ‡÷„¨öȌgYl˛ÔK~{Ź!IżBž¨ó)OĘ!ŇOÝ}Љ!ŢÄłÔ1¨ćƒ&8Člf,“{÷ż (.:Ć)˙9;]÷7šŮö¸&äzÄľ‘zbXîS8ecSƒŻF} QTĺÄýý}§2cFŤÁđ#Ţ&Ô§ľšý[wf]â-ăÍaH/[ÖŔwŸząs@ÉĚ<Ťá0˘ŒRDB‰˜Tž2ĄFÚ*:–á&Śš6ÖÄq`Ű$‰ 靇ok˛8~Ëä5ĘśssłŹ`ƒ}ȤŘ Š`œ‰6 ™=Műl˛ô˘OÄJ„ů#ĺ˛ëź’N Ul“—Ň~ő#RŽŠÖLX)U÷{†*+•ĽB–n†:%őYť{L~?‘ÉÎVБ”Ť ™<]/•úšuƒ¸OÝď”?ѧ “ÂĐIbĂ׎ф2âOö)‹ž0Ő¨L×ĺŐʆć=P‚âC‰? …âB‚ mkđ‰ü¨8™ËÎd…âě1œřd!˘Ëjj0SqT:­+5aš(Ň1”BĄ8‰E„‰ Ą ZVűQÂŔEĂq‰? ¤ˆFťÉÇÁDĂő\~÷–× Cń}e×ý("ď°txR÷Č˜%™ć ˙H˝rßI@Ľ<3šœ6`Úsc˘ă^#ŠłF¨ô̈́řGƒä-×lť~ý:ŤDő˝?Ÿ0X§Pœ2BO9ľ‰ –›źôQžu …âUE ÍbˆA@yšši˙ŽŮwcÝž7˝ÍUkĐŹOš*L|ňľ¤Đd•Ćţ$ďMCu[ݣ˙ÍßúšœřcĘĽŠhüő#ú“oŸ6ŰŠľ[yš(LFÓHěEźß…H^Ůl+$™z+ ăŔœlFÚ˛˘F)ÄY‡mą ą öˆ] Ű×&×Ną=\_öa¤PژĽwîRóĆ]WgžçŒ|ŕږÂ(&ÓOŠŃoӃűQş˝›Ť l[šˇiíÚ5jÎ͸ˇ†§"˘™ĹĆĂ÷˝=ŠíżÍ߼ÖÖKšľÇ Ź˜Ú ä‰ň ĎŻÇźŻMሹUŻ×ϖ%ą;g 1őSĂäŸ\ąĹŮ}ĺ7ŁyĄ@u\qupźŃ[xÝɍáČ<>LkHĄ¸DPâBĄ¸ŕ€ąt°|ťOľ P\4dƒ Áˆ€ˆ/@ăj}J=˘íím^†} (" Čń?zďŸĘÄAäU|äúŔÚĚĚ Ýşu‹îÜšĂéąfú#0WßiŠ?AqŞ0ż§xn˘˜úźQ(Ó *|㲜znŢźC=¨´P‡Ő}š ÷žŹ™ˆŐARq“ľ(#ŞŔ.$Mű$śJ4(ĽľŮ:-ôwů¤e-Š0ĽG۵لfďh &ů˛™—:%Ž(§“¸@}œ)쌂¨öˆ} D&Y6̐T] KŘ#JH!ůËQߋ/x~Ł/Ą’´˛˛Âż%tž.ˇFÝ´Oí…UúĚ/˙:őŢţ…Á>) =¤˙ގ^Џţ_˙Ojîě$űŠfçiĺ睞ô3ƒz1ą OřÉH@G@ćăKëöż:ő˙čŸQúţčŕńJ;­Éë1ŁęłóÚsIÚgŐŚ¨– Ý^Ą˜ ĄzĎăô2č ńŠ‘PâBĄ¸ŕÁ‡wxˆ 'f… /‰ '–ăˇíĆK¸ă#ҜâIĎp6*ŒJ lđł„Í_VАşŤ–…3Uՙ¨P(^udšÂЍäŠaŮÁo…BĄ8iˆm7ŠČ#Ď,Q,“Yݚćë˘ăx¤Žl[hÖť#śCţš€ďłŁ(UU“u‡×YU.L é#śśśhooÇ_Ë!ŔâĆ|äÉ?ĄâV|<⏷Kڧä›üSú­8aTŻD`ú„ü âc,?Ž›ŮŮZ^^ʞߒvĐqşâL i+–ÓH‚ Ň* ĹäˆřŮÁţio{ÍŮwăĚLĂÚ\uksŐŠN1§@ŢÝÝľśŘ>ŤËˆż<ƒqI§†=Löގs˛źIě'ÎR?Ë ˛ŘQ–Š$8tę~‰'ƒŞhČ䏱gCš â ˛|şÝŽ-Ô$e—ԏZŃÇ Š€ě[ś-žŃˇá6âŤ| @9Ç+œ„ LߓÖM)ĽVˆI-űPý¨ŹŽY…‚Чo;T¤âSČÂPVůäż ×žžGƒÉ&÷Œ¸ŢĽLTZV*oü}ŞNkĹe ĹĽœvϞ=cőÚľkź ězźÄadcÖ#3ŕü ։SŮ9–ë™Á‹z1óżQ/ÖešŒÉňX&uáö2#ż!ëŠEĹe‡:ÇA>hç˙Ç8ˇS(ŠÓ€yB%‘˛’„)ÎCšűiTÍç…ă’(÷+­fş‰ę9[ĺ]:ăĂOyYUŮŞ:½H“đÖ[oŃúúşŤaötX@üń÷Ÿ‰ -›‚üSIü1ĹŐĺŞ$՛ĄbŕÁhřáTPfĘrƒŸů2“_g›/7éý÷? ÍÍ­Lá~ř ž?Î×ÔŠ3…śŘ YüӇŒBĄ8"ahwwßúś1y6Ľ^׎kŹŐŚ>ííí2ń~mSŕ?‡Â ’bX‹Ĺ>ޞ[ńd6Žŕ ŻQŐi“j{ýœřBC‰üîŘžG!ç䞆­ŁVŻqPíË6 lÉ*ŔŚ„˘äáať0ů×őÍ ™ĝůů&?! Ę>…Tc4¤Ł‰öŃnw¸>Q ĐŻeŰXú0Ž7hĆĆ) ĚÔľŰĆžÎĎŇúuzŰŚ•ŰÁeőů6€ŘJRĎ~úţ“úł'çq ´KÚV!IĄĚŇŇő{ ííś}ڤŃc ÄF–——9NbY-ą×„­/Üâ2XžÁ*L'œMÖ&1ßͅO)Î'ĺqüž|rOőčrHš/Cz*.”řŁP(.`ÂŘsř˜`XÂÁĂQ X8ű°Ć* [0îAIN1¸ąˆ?X °ô1řÁ2Ô†Ä圳^ UĘÂ0ëV\ED•KÔ7§P G9X8řˆŒ†ü=ÔIŽP(ĆĄŠŒ ÁůĚ̜řS&).N€ô35.śâĎIŒGŞ=<ÉŞ<& Îa=ĆBáDˆň=ŢO›Ý¸qƒîŢ˝Ă3ĐĂqTAqK*(°@Ś ţ …żç‹?ę/ßóú 8iřűˇĚň˘&Uî~\;Ÿ>|HŃqŕjQýžó Ŕ?ŚöP(.&OŚĎ…B19ňśĄýƒ=zšů’2ËôŰü~Œ(ĺľqiĚĂŞ=™Í;›)ŞÄ7˙šŘy­–óÍĎĎ4éĹógœ’)ŽjZżřĘâ"Ĺ^‰?ŽĹ.唭Żçí:ŘČ;ťťAŞ€Œm—ÍÍ;ű°Óíą:$|îBžÉśř|\´ű„ßaaľŘ÷˙‹ĚŸ’nB;eEą$•0ÍlÉBnť˜*ą¤BCœB&—ŠíB쏢= I­NsśžĂý}ęvşŮq!ž€ÔĽ{‡…v CӞŁĺľ5VGŮ'őYRO(EŰvw÷čöĘ:ŰđŘ×°wZˇgŰł}¸MësKt؍ho§M“ŒľĐwčOÄnŽ_żÎ§śĐ_čŁÍÍM&ZĄK Ä,ăZŔËłeŚ`őë›Q1&cí %ý(—JüQ(—’J O?ý4“ŠÄw`¨ Ń8 M|‡ =Ř>”÷G Œ}‘úô)ękÖhćY„Ö E9÷0ÜQËEžĆ* WhT1ůW ÆŃ%Ow˜rě+OŻÝWÇ fSč <nŠitHĄP(NbGĘßâŒ-ĎŇ Ś}U\œńg̚ téĺý^ĽtĹł€ű)ľÚ­ŒL! ¨29bTÂűă/fgçěßĹ{ą@Î*†É%ţ\ Œ'ţ”Ó-ćY?Œ˝vę…1˝ťĆŸ#pˆĺ('$ …âr@Ÿ3 …bzQâŕđ€ýä ţÄĆŤ(’Słq gk9ŰÍMf­ť÷lęČ"kkËü><üâPÓť}ëu­=N­ďý`ŸŒŸ¤ÁÖłűDŔä™nŻKŚž€ÂŻő4˛ďcťM7î;ţ 3Uŕzl[ĐOđë—÷SV‡ej€ˇ'`ł"!”ą-úofĆĽPs¤)—ް]Ý.ó-oćŸ8Žplbđůęö˛nLüÇx˛Qdí˘ś="o–0 e;Éąď2“(Čě@‘% óßâ#Š`Č('Ë垘d†ýe†‘‘† Zčě1—]Ą8]čăPĄP\4ŐFŹ#ş#ß;KńŘj4j´¸0kÍľYbc†ĘB^—ęUȲMXŢľ!ÍěWŘŹ’nLö:CGvhŸ&I˘$Ľ#cXżýefޞťcU:nÓÉ7ćÔxŮőę5aʃnÔĽ¨“„Ür݆ý°ÎLƒ:ÂĚi|’$PŒŁ˜ű*rD‚‰/űĆI9˜ B˝fĘ{΃b¸eF7RSŕ¸ú˝~ážĺgOůÔ}jůń,žâçBä‚7üœáŮůůÁÉóőđ jťßŽ}ˆĹŰńyËÇ­qsp'ĆG&ŚHú„ŕď#ýůúŒJßž2×8ן ÍĹ5]ŔÇĽ‰HůÁÍŘÍČĹߎíŁĂƒĂ;L…bž……?ËeżŢ”›^ąáü 7ŽâtŠż`:ŒęŻ!ś’S°đx¤P •sˆB9œ‚Ňž{öX›â`˙€z.őłY ŽÉˇĆ+úÔ­­›'‰Œ{ˇz´ŰßaUĄÔôٖą? ÄVŸéS ˍőˇsh˛-MáGŕaťEígϨ٘ľďpOfńv‹+3HĚqe$””żŒßd …㬍 iĄŘ÷žÝ2ÔáZ›bggŰÚ347ç>PE;°Ő:̔‘pœI{ňěĆ~vÂ"cí9{>LŤKśżx{gçéŮ6Ÿ˝pĽŃOŠ×š¸qœ‚Sť×ĽOwö˛~ Ż ňý׾užÜÎÇĂT IšŰŤ5Š}Řś—M߈Ćß´8LŚFż Ajđ^luů›űĹ÷˝?Ř:ěů‰fŃáö˘Š-Pęţ\ç¤)M2ŮDgöžâ{Fߍ—n6ŞüČĽ˛Gb6Ŕ Ô~‚ JHJS(.”řŁP(.ŕ Ĺ,!üˆ<<žA‹żC@ąÁl`€"D ‘ÜĂ>Ě1‹ ŘNäę1SűňöƒrX&Ć)‹Ą<ýŤNŞ:ţqĆŇŐčłČ @BŐ:[L6S(.t,ĽP(Îmë”ŢzŮŚíCÚÝŰ噚ĆÚtŤŤ‹ôöŰwiíÚ˘ Č‘b;b'şěG؍řŚř($ŘŤb‡ YucߨßXž´´Äő‰*2őB^—Tł¨OěQ7Ăt&#Ľ‡űżŁP>wŐsKO ÓÖeŁňöB”Są?\Ż _ŻÎźMýĚ끀őXřťLĐč>Q”rzNŤ žXŽ¤ŮŹ_ƒ)óĆ!‡7†ľˇŞs…´“ÝC>Řű=ĽŽŐé´ů^”ŮÝ×Ö×ů~ldA š Ő%•™˝_Ű6(ôřŃCîc(ĆB­v~nžËp`ƎIźÂwřL‘ç ęçg‡­)ŞEVÎÚŇOłŮປx6ř4ՙŇYgi+˛ÔUƘ1ŁçHGĎoWQg0ű_έ̭(4ĺ"”c§=NQqúŻŮŮŚŸŹóú\ËIL§}o+S##ü”Ë󇊍‡WqřZ÷r”˝ GőjĐl‹*zw^čüŠÖÖŮßŰŁC!&ľZ˙:ĘŐ8­V‡fybˇëƒ¸ŃľMńďf~?ۅÝ~FZšˆŐhLƒuˆĘ@ŠžmČÁĄSť)§žĺ<‚ßߊN;+ÇôULFü1łÄÝoŒ„ô.“C€^ĎĽ#&Œdű1ŽĚă6°śdO”˜ŠíŒCB‹‰2Rzˆˆ YŮcOG]aŘilOCŠÎĽ‰ÔŠŰO—Rlˇ°,`"EÁßTŠŁř”Űő˜—Vm“7¨1ˇŒ9rÂREԁWÇ;Ż•ä“ 2Š+ %ţ(ŠKË ×Ŕ¨"cЧ١uŕ$đR žČ,TЧ`7 y'$ň ЏzD^˙bż˘ ö‹ňhžaƒÂ6N|`żŹ˛¨¤Ÿ‹‰ilśł~[#ЃŮۅŮŃŠ› .×gř™¸ŢÂvšB ŕ'r—lCƒJAUä:ăťAú‘ ˘¤ 0čPúýžúŮłgœvbĎޡ¸G(ëűÔS¸Ż™œgď}}đźŮ|ů’gšoomůtgłLęÁzóÎövF0ň`ÄJ6u&° ź¤¨F9IÁçĆÁÁ>śížZ]]ĺú…źˆg„¨ a=–šv-ńš­ěťÂ/3¤Oň* Î7EŮ Ž˘p˙ţ„Ëő!çĎę’Z’ĽňF™T•jŞŠŚ¸˜đ™ŠŻn…B1-˘ŕŇH<Ĺs¤ü~ť!S•Čz˙ę{ŇQ?˛>ö¨F­¤ÎËĄ"”ŤP`G¤Ô÷IÇä].˅ěů˝AŰĘJŠ#Ž(;ŽprFůďęžČŐ,Ľ\¨ś*dž0;@^÷pXôŮl§MćĺSÚh‹šˇ)ˇIˆI~ťÎӏiŽľU9pHlůĽî.­tśiŚ?<Ýîqp`j#„Üs„ôŤÓRŽV9Q‡<ňcs9n ĚíÄĐܗúß˙{˙kÚZśÇ×^Ł53ţ“B1- Â?'RPĄ¸ř˜”řăÉ …Bq>€A §e8Z!˜É(ň@¸^>2ĂZę ů)'ŽS@7RwŮÉŚ E WŁÔ~Şä˙Ë}yp^Ä…⤠…Bq•PžŮ))ľ$ŕ.eđ6]ťÝĄ­MjľŞ$H;Ÿ~ú)“m„h#Ęϟ?Ďěq‡vŤŤŻÍäy°?8ގm`ëďÜšĂßňŒ°żŹmę’Tś(ƒśĄ- ­KjŰŞ”_úL‡hÂe§¸ť“+~lČő‚ëäUööůťuëVŚşzťý(„ĄsAŐ=”M1v „ţéçţýűüœŕąŞ(ŇÚ2¸ßq_ËËËôúëŻgŠ2 ÖƒíY]ÉâÚľkôöŰoóŘ÷ž,ÇyŔýޞ[ž(ôć›oň˝ţčŃ#nŰíۡłgśýđŁYh}}Ď+y¢LŽA:,ü޸~>˙ůĎ!ţ\.dęE ĹĂ´é …âHđ\Řiބ’^Őů˝ƒ”Ť>EŰmeĆzIĹĽŰëÓű~D?ـ~ŽŠdCUğżó܎vhc1řčăr ˇ Ú)„Ř1°ƒ†#'¤`Ř]°yććf9í(€}č•eň1ś•‰ ’ĆJHH˘ú$žř4 ˝Ö!}ëOżI?|ŻBpŇ}6îóKgˇ¨w°G͊÷RÇţŐ_ţ9ýř‡Ed< ç(HăJ#;ŚÝyJQ{ű˝Źm˝ŻĚEQŃn“kśőéĹÁSşýůTżvH3/ˆ>Öŕ´âx¨TţV– Ezľ)..&(¨âBĄ¸ÂMęóË ZˆŽ ) 䈒->r?ăŢ Š˘h+ű‘´~˘\&jˇœŠÍׇż]pk‘‰‰­V’Ľ!”ův! Ešş€^:ÁóăźŔí’ČXvӌŠ>*aBq0ĺ}ĺ—) ŤČTLŽ´2Ž„uݤO›óœ=łw¨ÖŽ¨ŮŠgŚĎ€j‹_ž¤Ž‚ƒZL:múo6[tsv…ҸçV0›áGříc÷ńŻŢ[Łűć[”Ö"^ԏ‚şyqÖžlżÁCrôŘ&.l#öŐ$ăĄvű>ůäzňä ˙!G‹-%„}ßĂýŘs˝gíą­TßÚŹ(QmďZK‘šŚšˆ@…çĺ'd^ÚşŁáď ÝBJ<9'öv{Ÿ•zˆrÂÎč>­Jő•)÷ HřX5îSŻ“Rœ&˙ą×¤ÉҀ‘‰Kë;R1eťŒŚ$ő¨ â’B‰? …âB‚g4[g&n!°!,úId$]u2¨"ţLZö2CDéĹ(<Ż#S“TqŚŮQ(Šł†~řY‡bAú.Í/4¨9“đŒÉF#fP­î{ŕքƒz( xŽ€ź¨ţ„ła]0=eťËEGʄ||#0/ő`=ĘŁŹz "éeQż$}”C=¨CHFŞöŁ8)ądii‰úŠ˝Ćíő%ŠžŚG‰ŕ“E¤ "uśł:2˘G@úȍ5mpŔ”ö™ĺđKü=~m}fíýwmm-'ţ)(BĺXß%ĺŒ Ĺ‰#›` P\ \t⏇ŠWě(ő.fQŸ‘JD˜’*ü­˜ĺ~9đ‰˘+CţÉzň›Š‹‹ł~žĺÁďDŸ­ …âĚŚ€­Ő ÍĚÖlੳęěLlľj6 ^§z#ą6hÂRđI-Δ{$E€€š(IbyčFp´[ąwÂ4GI@¤˛—墄z…<)ËBĺ!)'IY‡1űŢýő(×řä(2BЈßM Uý犝’ôSšýŔΚ_ćě÷ꂽĺůPF˜2Cˆ{ňüŔď˛"ĐqrEYťAH‘íĂůRbGŮł§Ţ—ć+ĘBJ}˙<’.4gÇ)Ç*„Ľé+?˙F‚YŹĐVóĎÇĎ˝Bq™Ą×°BĄ8>˘ %ÂŁ)S( …ÚkڽѼö]˘ýç}j/ô(Š +¤Ž2ąz‰Ť­Á&ľś´łÝ*QAŒ#y{ÂOěŸ{‡YťRŢG_xÖ%şŁáhŰ:;†˜< [I&nŒ˛Ó„ěíT…Ćg$xpRJß1›ś˙ŠçŻ!í_ĹIBŮ>ŠcáBńŞřŁP(.$Ä@ŹYC{Χ\p-Oţ™:ĘŐĘÉ  ]iUĽńGĄ¸ČýěŁSÝď$) …⤌‹uJ Z_o°ä–-çT:ą Œ7(N"VĆhÎ43gŻ8|ĂŔ6PžŚĺŞzΖ%꥞TT&˘‹*HčD Eŕ”ĆgŘ~d_ Ĺ4ČúS.ô5&Š=ÇmcEÄśN  ëŁrĘc”çmKłĆO a űŔţ„ čTˆ˘ H5BU7k—‹ĆaL"Ńöö68fŽÇľěY$ߎPŮ:QŒŠ M>gÉÜüœ}nŻÓ쏺1— ř?L•¤‚BĄPLˆŒ+SqĄmśőđîŽ×¨Ţ¨ó¤ˆz˝ÁdŰ>ÔOͤj+ŚňO~§ókݾļßɉH˘đ2 s,ßńŃśuv\š)üČä‹|ňČŕxKĆ~n w*a‹ccÔőqbű&šœ4*ë4e•ŁłëxW_6Ÿ‚ň ˝É ŒŠs„Ž˜ ŅEyĆ ™Ŕá|\łĘxSƒîř(Ďp1ižĺËăÉ? Ĺe@ůŢC ˆgnš„YƙďĺIfŚťzÂŕ …Bq 6pŕşç“ ~G çô)ŠsBb§Ű!ęďŒÎ e}ř, ë-ŻŤú= G!D†Ďa8ĽĂý…¤Ąiۢ8L:j9Š37é8IR˘4ŐKsĺQqɉ#cŢń# č°‚[Ęűç~€´ÂŠú"TńÄ$Ţ|zćw‰Ţň˜¤ŤĐgAü)Ž/o@cÚr8ŐŠňs'}Ŕ׍}Ţşgî4՟Üoˆ žB˙yAŮ2‰).‰QJňQ(ÇDöţ |ŻŠ´Ä^I'œ‘§g_˘}˛ďبe uÜ'깉HIU!'$ďŮ4rueE"7iˇ—K[[ͤ^ňj.¨Ł¤Î#uUë-Nˆ#gĘĄ­ŰbĚ*cÉľľ5zůňevźŽČ’Á'°ë[ÖśňŔJĄö7Ԋzݞs'źoĎ7QśˆhäŇóťF5f¤P(.:.ńGŸ¤ Ĺ+ŠPé§ăT‘<‹}_Śz/ Ş_BâO(*ĺÙôá븳ŽߪÜŃíýQa`‘ҰWÓŔö•é!܂ʿ˘pÉô×ĚqC{ăŽÓa}—ϝ/d–Oþоƒu8$vw÷xđŽgń4p˛Ĺ]ŸÝ]#JS(çĂęp~´čĐ:*1 J+ËKœJ&í;/i­ćˇ°=!ľžľľÉĎĆk׎ŃĘĘ -,,˛RpŇCE ěŠ$bEfN⟌X|}—l ŁďbŤŔ}’_? \Dœö`PćJ“/oźĺ*$šVÍČ}ɡŒŻŔ%ő!ľH?Ý,­Čx&› GŃDś/l‘íęZ;„dąCLEJ, ö`6T ÇÁ~Żňc ż#÷Đ(/ý#ğź˘é9cánŽřC™) …BĄ8Qŕ= {Ď}{…•ao÷ÓđÖF•2~g ž¸VŻě!g{Ÿ=h3V‘ĺ§I­+ŞAHůuăĆuzńâšýźČRÝN‚ŘxϹﯟ-Îţu{>š(ázżţőŻÓżř˙"'ë$÷0Ă[řwdr@\ŤS?H +g—éćőLfzššIiˇďţŞ=Ņý㯘<ăü\Ž…BĄđ¸đ#RUüQ(eĽ™M}V8N`f”ŒůŤÄ Ż"ň„ßRfX_—gŸ8¨ś'*+ţ¸Ro?P *9ƋÁ'aZŹqZňĎYŒ}ŞÎ™ ě€pś‡âňŔ=sáxčs0Ŕďvť•‘~ŽBžÄő’…t_\\TâBĄ838RNÄŰN§mŞĎčÁ'čŃŁGôôéSv@ŽŽ­ŇęŞýŹŹňßkk×8•ˆ|Ÿžő­oąňٛožIŸűÜŰôĽ/}‰ @xžá9‡t†Iyö&ďŻŐjóžröxJg f63\ć˙ňś•űŰo™­S(&G~ݰMbD5+łőSk?€Ük×§Yŕ ´uĂo_wdňYĺţoă÷™$ÍÍĎÚűŞÁ×8îĎŅĹĚžŒź=íŇôŐ2P'Ďěýžłł“ľ?LGŚ0ƒ˝uŻ›7oŇňŇ25›3SÍâVîV­˘ŚĎ2҃˛ŃŠŠń*Ţ5˙íe*Nę\Á×]đĎäV…MY)˛ßďą˙ŞŽŸÄ’ŸCUűŃţ­bŸ‚L[ ”bĂîîîr]Íksö|jęŘFiŠŚŠ+iŘÜS˙~jŘ1jłaǨ‰SŇĘíůšł‡ť~<+Ç2ŠÂw˙Hůƒ>Ŕ˜ŘMôsŠaĺ¸fšMę'}ęŘ1roBRS!;@ŐţGťâŠŕ˘>3ÔöS\p(ńGĄP\X0IÄJœą{6J?ÇEŮ0–9BZg8‡é$Ęi)dfjšŽ‹H°(“ŸFwyÝ$ۜ&BG3‚=kevě5xpxŔĹšYjÖÝëłcaű­–ýv×'o‘œC|ÂsxÜ ęŒř„q>Óƒŕ‚I‰nŚD9Ę oű `’k*œ-ƒßplJ9Ą/:Č)ŰtYŐç 2;fĄMîSɝ=.ËE„(Ź!°….SôIťÝaů޲ҏ<ß°]šżäzŮ>(+ŰŁnĚhR(ŠłˇňŹßÝÝaĐǟđ˛VűŔ~ă™ÖŁZ=a‚"žâ­Ö!KĄüńÇL€\X˜§[ˇnň6îůď@çÄźBŐCŕ¤l›aśR•ňby˝B15DeĘŰ@aú:śaÓ~Fn󙟜›)T ťîeśnŽúĂťł÷Q=Ćlë|Ü•e˘ĄsĐŤ÷ƒz  ťššÉğĽĽ%Jˆ˘ŹKϐđx‹ öţ†MgĘ)Ż.)B‚ÎŽŮłÜqĎÍÍgĎ.~ZťOžqB°Bšđ“§/Œňk$°EéUö'çuAIIö7Ž*żnŚ›ĄP(ŠË€WNˆň”JŽ=ĆŕwŻ(œĂŚ;wpxŢ/" ˆ}—$“F\lăÇ0ýłđpÄFŇĚG8´f {R|ü°Cń]Šíá_ŰÝŰĽ†]×´žçţţ™Ň$hs„+ ~ćžőëuÉůî` łÖwjÜáÝiŻĽ(2^ÝŰĽĎĆžşv_‡ŚÍéĂfî8AÂßM(ěÚőý1䟁ŁĚČHÁľU–T\!DJ°Q(Ž„ó"ţ8_Đé•W(—ĄŒü‘ś?gŁ Ü?ŒvČt"ŔT^Wŕ0ţ1ĽpŽŽŻŻgyˆaAžó쇐!¤ůT)ů„ł †ÎÜĆ|–H?űv$ôbo›>ůäŞG1}áľ×¨šźĚë÷[múŕń3ÚÜŰăß1Ďnhđyâ8ÖŹęČŰěhÇňz&‡§†–ę3´83Góóó4;;SHEŕpŠîĽA(Âëđ˛%@ągĎ#Î3‚řâxpă{aaďCš~q_â#ÄDÜŤ8WHƒs'D˜Ë9.7KǑÔÄQ%3Œžd/únjžr‚eč/̖• FŐ§P(§÷œďgĎn–ˇĎu(üŔ ‰gřőë×ůˇłĂ˘Ďt8dńŹťsçݸqƒ Œ ÂňxƅÄu‘U?)f?Ž „WÉŃ+“"“˙‡u‰6!‘¤×íą*O×ř€‚ĺůďIOüÁýŽ{smmm;Ř~°KpʰÝq_ă~ť÷=?˘ËŤR(cJ'§9´ăR(™Ô›wŢöĂ˝{Żš “-‡őŸ~ú)moo{5ł:?űđm'IۚC]:¸ÔĂńAý˛żŽĎ‹JJřŽ„Á˘’JÉsŒŠW úîV(ŽŇcÜĘŃâżiřúňşB3„ˇK#÷>´Ţl]Öž¨˘ŒÔ˜?#ڇ–Ş9JǍŰ&ŞÜ† í˝´H{ÁG|Ú~S&ý°yě‰î)Î/ěŕ4ŤK(ĚQŠ-BúáIv š_ťN+_ţYş{÷=yň„˙úŰtřâ Ťm6gšÔ>ě3f´SQ™r7>°1žíŹÝ¤[Ÿů,˝öľŸ§ľż˘Í|‡ö÷öŠî A°Ý¤ŽĐO_ĺی( ⌠*Ô Ž­Ł‡öŹlЍĎ‘nžţYÚ|ô ţđŻčŕĹSZjĆ4g}ÝÖ>켣Ő3 |ă•Aƒ‹Ůd˙14B}ŚP Hq1íey.—ńUQüŃg€BqU`œQ}UĐ÷ÎS8™pÖˇŠd6$Pv8 ńŸĺĺe”É4!.BP稳.ńÇ푃„í!HťE/íůŰľ/6š~çúŠ?›vôbďŔt0Řkďfdžé@řéő=ń‡ĎĄKg€`$bu ‚ëÖ)Ţírąľ€ř3šôsěžňłšô…Fœ“ň`đ2Ş ˆr îSĚGpççßr?"x!çׇܻr‚ä‚îă˛Ňe€ŤC#yU݇8f¨_ _Pý„~Á5 ÁnÜaýŁęS(Š“…)üŚšÚÄÜü­oŹSRK8€ő×9°gŘÜě;.ńƲ7ŽÓ—žôE^÷ŮĎ~†ƒÖssłţ]Ÿř=űŽďQťÓöď†./“ô@ĆÄG4qM)YWT˝^*—÷pyg—XľäŞřW/ۛOfĂq‚5~NÇvźToÔý„ˆÚŕuJ …BĄP\lGĺHËM`J #EÇąA‡~JśZ4Ś|žŃÇpGjý(9Ąa'"ŰĆĹ%„l{X˜&žbămśÔš([ТL‰zĹğzƒśvvhvažŽ}ţË´řóżBýůEZ¸Ý˘[Ö&zô˝?ك-ZY^¤ŽľŮúc‰?noĄ9 ţ¸´ßeűxýg~‘nőgčůě ÝüŐť´nzôýď~—âŢŰf°+kފ5!ü¸I­HŞŐkt¸ˇKőĽUZůâWéÖĎ~Ň•Űtmă.ŘąđŁď˙uw_Úqô+Y 0čŠĘv‡qH>źpd łö-Fjuž-´ťg+°ĐT_ …Bq†€SNg@R݄3 ád–´9B’´Câ8­RĐ)ŤţœWP˝L ˙.“ €QD‘ó$ ŸˇśśčŠý<ÜޢžÄŔI}}yĹgĘc0Ľ P ›ŠÎ[rţŕ„bž ëĎ/#´Ŕ™^C~eŸ „ >Îa :3S;y„âϨY — Šŕœ‰ęŽÁŠPi ÷Šp„쓆Dň×Kób[w>_ 3KŽ×0x%׿*ű(ŠóAภ>.ĽÍËŻŹ,qĘŽˇß~;KAˆ÷° šťg={ó stm}Ţ|ëM§dƒÝ( b'ޜŽDÚĺ€:ď٤Lî•çâq܄ŁçB^ĎÄ8É%÷ú ąŻ.2"ĎŢqöŘüqD~üaŻí[f6(eBPD=ƒT]Qś˝›ýěgy}’ż ËŁęȖvťĽ ë|ôá‡LTŞH<ëëLđŮśś<Úźdíq(р vˇŹ]žď•m`÷Cí $”Ǐń˝żąąÁö˝ €Dö~oňv>b煪—Řĺ1[ű'?ů ={ö,Çá™!žńÚžŃZ$UlUĘçĐÎ…O…J”bsa|v<~ü„ŢyçÇôđŃC&〘(¤#|°ďĹĹ&6á<˘Ż° c ô úőŁîƒýC&őŔ^Ćţp, @žýöçhum•'MźÜܤ?ř€ž>}ęHVžŽ~”㍠3ęÚHBBNrʨ†SA°Ňš ŠÍĚ6iye™ĎËÜ\•}}9'( …BqŃqRiŮĘő\ÄT_IU+óÇÇGđ˝›@śÉocmŹŮĽUÚ¸s’ĽeęŰĹÍšyűű.m~¸jm¤ßgů)ĘŠG…öR>Ň ' Ă^…ĺˆľŤî}áK”.,Yˇľ­vç‹_˘ďX›•vF’ĘĽOŠeLN†Š„ŕäţžłăĺ×ޢćâ !˙Ac~‘ÖîžNť÷JťŰĎüD‚1ˆ*úĘť?ű‹HúVq6ĐIŁ ĹŃ Ä…BqĄpD.˙…AYľÎN8Pĺ7ËÂźâ~ ńGR}IŔ\HÂŇľ QiłĘm9kT‘@ʤ¤2y)ÜVgiH› !pŚę‘söŻ/ŻĐš Ôy&łJ‹słÔ´íݰD ß: ¨×Ľ&< XO8 ÷mm‰­ŻQ㠈¨t:nЈëdŽŢ š¨FČ9ő1ÕXśw˛syV=6ŒŕuŮ!Š\$Ľ—kĂYÝrOĘLm”•.‰ŸA^NyvYPNŮ抒,ČTú“äWNw&őŤOĄP(N`#xÝívě;6ć÷3‚Ëň\BŔŮĽ%첓Ď|QşWĘěîîĐN b&ĘoB ŸwásTŸ}ÇĂeíżËn+šÔąfőꐉľWí˝ű•‰0Iív‡g%×X)(’xŔK6ňM~&1…Ü×/_žd‰iĐî‡ĘA°]Ňő÷)ˆú(űńƒL6ŮńęŹPťÁ˝[÷)KyŇEjěŃ;˛ˇ¤řR‹€„ ƒv€ř‚ú%ÝłŘůň&€pŰËPôw´aß+ÉóF”'Y&ăN9vGjߣݝ=ÚŰßĺ Ň7á˜rff—I?˜ Žöăސ‰äšÖď§Lrގ‘mÓ“„Ä6ĆßŘm™^ư˘‰6ŁĎyr…í#9&|cžšŽLůI5^…ś%;θ ý5Ül}…â*@ƒ^ …˘ę1PÖÚ9oú+=tŠÔX˘#! ě’L ÓÚGÖžě§Ž)zá][Źc§™n”T*bŽŘe@Ô1śrhëě۟}ëoŽy÷ŔúˇížfÍhĺœĐG_řťĹÉ'Ű@hˇewÚĹPL´ń^Vn2H;ˇßbĚ@•` …b8.ńÇ YŚz…Bqć¨2ŠËÄ8pĹĄ+„I§ą¤ž’Ěä ëyúFٍú2.€tÁ‘pPţć™óA›Cň’lkĚŮËtß îΜń3Ö ż~}ƒgb°Bwö_ßOMi6ëtçÚ*Ďc^˜qNöšëëÔYYäYĂ<óÖPŚîƒc…Ă˝ć =pŔ é Rö ĹvĐÇ;ţŽŮv@ÖŢL1ć"Ϛš¨ó`‰¤=(ÓĘ3zÂűUxäRĐe› "Š(p}ş{3ĘfśWĽ-C0g}}VVV˛íĂrB„ˆBҰú …â´ ö‚Ň|đmooŮg]́ärŠ b#Č-ĎöŞ4<ĺYĺ‘˛M•2Łbz\öžťĚŰHR}y‡;§Ę˛6ŔŇň ŤžÔř˝yĽ,VŔ˝˘ź…ş8ĹĂ luŒłDGR’†éą@!ëąÄ s°=ĆkPř„ŞÖË8ğí­ílL[QÔ|`a[Üç Ž€82ËoźAˇoßÎČ?<[BľW(á m˘ř#v¨Ř—ř D˘Çsý ՔSia´˙Ţ˝{tëÖ-VĆÁąüěĎţ,}ţóŸŁýƒ}V!“[ŘíŔ‡‰NöXQúő˘.´g{{›ŰvëÖ>˙=âíoܸÁä%ą™Q~㘹=ˆâîË'´őޏ趵ŰV­MšˇłKĎŢ˙ő^<˘8í{Ž’Ä Şĺ˙ŠlE‘œ}“íŽő3÷čůŸ˙ýĚ/ü"ŐV6X ňџýĎ´´űŇŮéÖލ„cdňżšĚł1™pQśŒ?QœĺVBA}ë9íżóŞ-4höÚmę˝|Jď~—ZϞŘqB”ŠĺÔ&ëČŁ¤S!¸M ľ/ĎÚ׊s‚™pمĹYN’œcJ…Bq…!ŽH!Č\śž¤”&Qć™TIĽ*˜œwP$ ‚U‘|†Š•ƒggušŇ˙-ƒ¨ü؀FsŚI‹T~ٸ٠Ë îüÖëŽ,Ń´ż™ÍŽY™‘+ÁCQt’c–ˇĄ´H(9Ňńb! çfÚgLŐ˝wYƒ“čGZŞeŠ?xţ"hE QłTáómäY…zćç‘ÖbŽ÷ĄP(g HŠďďďуOГ'9Ý€ęçś,3>tyFJz™ÁÔ•ʆőžJűĐ)&Ą¤Šó†#ţŕ>BJź™ůşqŁÍ$™ĆĚĽ=Ă)žşö;Ž\rŻdh]Qđ!:î=Ňˆň°ĺ`ŤHŞUŘŕř8ĽŽ~aě!śŒ¤YۛSKÍĎs DiÚ­6˝xţ‚D ”‡bLčôbďŁNNćUn„<(űĹ2Š_Ň8KY`D)6˜f°ĺE‘GRЊ  ʀ(#¤v´ D¨”ř“Ľ:kľ˛˛’ú ~B_JżÍÎĚŇúľőB~ ůmÁţąOô!ڏv‹€2ř屝;w—@Dˇç˘ß “(†Máá[0DR5Ę9Ö´ł …BĄP(.Q6ĎüÜ,uöwéŃű?Ą'Ý-Xűó`˙€şŸžOfo‡Éᰗ0eń•őyOކ„-6cm÷ž­ëŏ˙šžőň)ĽK×Řž{˙‡”Ŕ&Ť7ȰÍ啉L1EužqĚäżłýş}!X×GéĹčé{?˘o[[Ó,ß x÷<üˆwÁڕl÷ůIŃîČԛ­P(.N‹‡r&Ámş(Š‹‡ŔŠ'ŠtdĽ¨ĺ\L€˜¤ü$ä—aJ$ăś;+TCU›Ć)üœÉËă'Ůe¸çqŽâ˛BSxndŚn¸.T2ÎƐߊłÁIç.ëšsŠ?IŚřŕo~ćććŮA!Ši’~œ˛ŇĎäV(Šł‚a˛IJ‡­züř}ňŕÍZgkř,*“w Ű ż‚ßůßyUËÜňŤ !ř˜‚Íç>nůtˆčr˝^‡Ůńté€óŐďvčăüŐMZX„šiDׯߤ¤9Gť—:`Ć:óçšN­ŇdDˇi>˛MůúŃq°Ż#gk€t`̢‰[ńß Ş@ *= b‘ƒ@VQÁ¨ę€ÜE —/^Ňáţ!oEIă,¤!|° „!Y`Ÿ°›P‚7(ƒŕ‹( !č!ä ŘéłÂęF;Đ!Ć`< ű˘ŒěGˆŰ2Ś@=Ÿ~ú)ŤA™Šł^źxĆűB;@RB[PŸ( Šő ŃűD_5l0ę;BňAűQ7ŽŰŁ^(řč,—ăPR™Ą>ŹňR9U"~ĐoMVR˛žMš¨śąĺš’fçA2! iHĄ¸ŹĐëWĄP { D¤@2ޏaÎ Śh’KbŐ§FŸhŚç”! s˜4Š׃ßӜţ¨ŘG‘ mĐI{ëčm7iŸÚP\´6óîě ĽÖĆüé_Q 6ŽőšľlýÉÂ5j&ֆ9ÜaűŰmč'†ijYĽÜůžgsn‘ÚPP´űÚýč>Í%(ęuiˇŰ¤z śskŹ/Ú¤!ëŔô”.ťuHsóKÔśśŢvŰڎý”fӟľ´Šc?sľ:+ęw­­çę m˙ę¸ăG÷}ŮƄ …Bqö8¨KřTW(Š‘‘2säΑaĺOopqÇĚ(âĎ4ä„ó$T™ĐĘÂWĽ6VĎI Ü3&[ ¨ˆňœËäTžŹÖhř*ňʨną ʲߞˆśqĄšĄ­ˆFƒiŽ9§hôVĺ2Š‹‹ňůqç2qé<ˆ2Ĺ jDŮłę;îTäÔ '‚I ý€H¤P(gă5hoƒáĆ4” O‹zшÚgAëk˜ďT<Âőb˙WĽXť ¸ ç^ě¸ňő*VĘťEzœúÎŤbÎ̲Ó&qěғíC2Iƒ664;ӄ>&!ĐcÄř{ŔÚ÷{E‡ÓŘ>•DQÂ:´ D$´KśÁ:”éś“( FČI2>…#ě_&ʀPbs l†”Ăř  Ř‹0š&**büÍjG>ć|ăŘ1‹[ěAƒPűE˙ÉéĂPI m˛śÁś U\%ŞEr:ÂPÚş-?Ăí_ZZ¤•Ő•ÂqŕbBLP˘RÎ)ńGĄP(WĘôۘáw}}~ţł_ ĹĽyÚŮݢżx÷#z¸šS*w>­;O`˙˝žľłŰ }áçžNoŢŮ ý?üˇ”vz4cmŚ_ýÍżE÷Ÿm҃ď‹Ň^€ĐSś°Kś=PŻ7؆o[›î×ăA-ks}ë[ߌh‡Öfűˇ~ă7™źóÇôß||ÓÚMn˘Ťkďˇéó_řÝýňWé_ţˇ˙_J÷É4çč—ăˇČěďŇ÷ţüĎŮÖ<‚ŠŽ˘đ|™ŕ;:÷ó¨P(SŕĚY:ÝZĄPœ?B˛ ˙7hđ‰ňœˆ“U¨tZĎŰQŠş&1œGňcX÷M)&lâ|'lYý8mҡkŕˇÉ‰>˛ßœűă‰AálęZÓxř9$2ŰÝ˙]ćő¤&Ź_/y=ŚÔb3b€sÖÄŢUp.ËÁšł¸G)c)FŁ|ŽÜý•îżČŤœ2†ĄÂ@Ů8 ȃ`K[ĄŚ§BĄ8/DYŔĎ#¨IŠÇ2âÄöřŠ“Şě:ł¤4ň¨~H€>O3Ů,¤Iş,¸hç=œ<ŞSJŞ*@Uppn$•”+çěUƒ9ulO€áňśěs¤ÂŞ535ŘR™ô؁¨Qc\'ׯ_ĎRHy\W •H™2i¤ęޗôV÷îÝŁĎţóYz­­jś2RTŰĎTF€źóÚkŻŃÚÚZ–ę çmĽŽ-5œ>ř€×AäŁĎ}îsÜłss<+úńăÇÜﰗ@pš}ű6ßPĺ"CĄŒŒž?Îő ßń‘{EˆO('ąm‹#×ŔŚăÔ^ -Ávú!ťFüžD™§ÓîđŘ*:hťz`bŸřö˘<ę–ëJʉâG h1iČ.{byss“ĎQxósĄ2ń}zóÖMZťśj‡‹źĎ!WHáœJş/!ţ( …âbáU ڟĽő?ŚLr>ů1_?ě|˜ ŸdŠ#Í‘†ćí{üoŢ\˘ßţľŸĄť‹Ö.€bVčßůĘĎŃ˙šč_˝ó’śşÖ1Ăěű´˛Ó`¨B`d2…ăƒŹŽEíúě˝ô+_žGŻßťC?٢ď~˙ŻčĎ>>´ë#ęÄ g#š=PŐÚdŤ |ĎP5LťôčÇߣíűÖö›_áĺHŠűWňMjÁÎlˇüqxť=2ůĘC_m§cëMÔíџţéŸRŁYŁ…ůĹ ël}ëťČ)ž†ŮK\W‰L;7f{WÎ_šľDqc/†ďHO<ĄĽšă\›ĽŽÝü‡ßůőí1uű=w†AԎr"ű.^eĹXn':/rJřp9R\Y(y_Ą8N:úrqČĹ …âR#TˆBrČ8 ÂĄA~z¤Ÿáű˝źźžPNőĂśqśťÄ™}é<˛^Čeœ¨<4‹ľŸ`ď9ń§b}%ą&8OUł1ä< ŠG^–îj4…y …VFQVž˛m/ń‡ËW\kapé´1œôĂ˙“˘a˙” kŐ灞؋ę<;§×ëOHqéšճ´ …â ŕŢĎEŰĎ$̂tNĂŃéG˛ÇâătÜďŤ œĺ=“$P ěűőސ öFNđj‚š­x9:-?ˇŃ˜ßg‡rš9×§yĘYœéb ßíŠÄ8˛œźŰe}Ďnsxhƒ DIjvÜĆŤŒ;Ř0ŻŽß?ULŽÖ1‰mË|mţÔŽ_öv\j*[(ÁÇ ňĚňĘ ][_§ĺĽĽŒ8“ŠŮ>áeoÉ@ ő€Ěť(ńd+{6}Š+Q5!>>ű e™ƒúÖíţ°-ę¨Ůőׯ3)' ˆr!Ÿ;f.{˛"ö{.÷…ă/V ň“nşŽś¸uąWä%l…öĄýBä 'zˆ‚HHs ś?ŰLŇŞŰ:°=ú5Tĺ1~„´źźÄŠŘ@ęZZ†BQ3#˘†Éžë’úë4'•(§ ˝~WzUO3œ™“żÉe&Dn,ŘmˇhˇŰÉĆ@.­îĄˇ#KăÓxüž3’? i&ĺ6K:Ů(NنĎ&^řłßŒĂý{S \x˛ ŠuĐąÇÓ§˝´ÇdŠÔbě#íť°)aëN\}n'˛ý: ¤P(—'ú8ťH˜Ł˜>ߊ+ q^D k×qf%8u&!ţ\P„mf÷mÎ!+U .ń'Ű``= ířź¸, TJÁX…$żqa6Í%$ţœ%FĂ0Ř?Ձˇr9—z%á”őúär ú( Ĺy"ňĎ6 J÷űŠËkű$É8ăçG9/dł49oř}bÝĚ>(Ÿf393bBŁžĽŸ”Y¤—eňyžw!]ĽihS@ĘČ]BrnĐď d8bœO…Ë6ť#ƒ€Ľ›ZÍ)F˜ QkPlËך5JꉳIq>yX$o4Á§Řîüďńzن*u&NiľźÄ„›Ř’ú>””¨Ždăž4ůĆ~ćfgéľ{÷˜ƒĺ†đzqěßHi…˛˘’ƒ4Xř{gg‡ËBQäqđň úýŚ]ÎĘAHŰeżťď%I×ÖOAÖŝĐV(ő ýj,„; ö@ńiřQďÂźm[,3˛D‰‹í;n––x†˙°Ô}(ÇťMÓśĘGhÔ~$ÍXv*=ń*‘h+ގZ}„:ĂgĹɒ9 …BĄPҒ-+ę<Ö2 ‹óôőë ”v÷)SZ]DŠŃ9zşłGőĽ:˝}ď:=ŮÜĄývŸĚ9Ř÷™ŇOäěfżC7Ż­Ň˙öËŻŃńg6¨M&‰čˇž°J{ďÍŃ"ś ĄŮ ?6*O tśYěˆ@^ '2“ů`‹eÜ1‚đƒT\2!6"ţ`3ŠJç°̨،ف—”¸É~źŕęŒíśujDŔ½ž#f“*ەlךC˘“ąü†‹§R('†Ł<`üÓéb࢞mAř@Ÿ˘ Ĺ+ŠË꨼€rÄ ËĎć!9íyˆč<˙7Š+Ť,pÜy7tZ§óP"ýČwETQ¤#SlňH~đ< Ë$„†Ż U|ůb Ťˇç8×Ĺe{ń†ˇˆ\3ƒˇ:ýŤ1ÝŮFÔS(ŠKˆ „ŒR(tRťŤ Œú}ľQ|;Ĺ%GěŠJľŚ‚ ß=—˝ĎÎŁýŽäƒżň>ڊ6e’ËHń9œMŠóRŻšt_błťŠbGžwčŔţÇĽ/a*˛q¸AşN]Ś"•,UÔף&uD5—ž)ʏ$ý´'l#)Ť„äÍÁá!/—@ śeQĹÁzb8-Wpźa6ŽŤžŠ11!Ű˙Ćr(éěěę”t[Ýn‡8凰 ëv J=čźÝN/}€<ôěŮ3.‡”b¸úi—Ëńž2ˇœ#쟐ÖŮˆß>š~žMź >ażG…ąW~2]Č+T트†‚gEqLIJţQ( …â,źŚů]oßĂ{űűÖ+‡ćŢ˝s'K' Rű[7نýäӇŹPřúëŻ}ň!˘ )cRQĄeĽGݐ R츎éZ:.ôçQmذqńů€˝‰úaťĄž­­mjś‹ŞőŢv›6ł@¨Ř*Ÿp\—§ĚíňwŻŰW;MĄP\f$ü\ˆ‡ÚYŞČ<Ł>Š%ĽP(.'LQ`ĽČó cȍMhœNšâkŇňálŇě÷őŃtő°ƒ_fZr;R/ĹIžÝ‘žš& ŞDr‚Â…ÇIě\3ŃŇ(— ĺ@Âř>vy7sVWTБ ×UԓE/“ ?5Őd13Śż_uŒS˙QžBĄP(Ž‹*’7ÁĺŔ|Ől×r—çy Ł6Ă2â Ç:IŃ  VȢœœŐgrNřq@¤ăzQŢŽ|Đ O75Nt˙€Ç 01ŠüsR˝:Ź~K×(Z‡-NK…@E0ĺţđJU jÚ6CĺeĂçë§?}—ëż{÷.ˇďý÷ßçď;›őçĂíK>hŻŤšž…cEŰfć樆ë(P|6A& . ”ńË%ĺĹ0Ia–TĘu+ …Bń*c¨k7"Ÿ:Šć>.­dŸd*–Žœ ŇPuí+{Ď$TÉůŕćçŮÖŮmuŠkbęô­­gż őé¤PvǙ?WŇW ?žšéÓrŠS]™ë×V)ęwqĹô¨uieś~BöŚ´ĂľK&¤ˆú!š-vaf?É6QJG…ŰGjíš}śŐ`óÁ–ƒ×ď;ťt˜­4ގĘcr‚ áxů\ůţvJR.%™¤ľŔśĺ4ŮĚiŠ=Y ׂmwĎŕ0ýÇäŸAžPv.u, ¸ěĐkXqĄWő´ngÁľ#>+ňi›•+Ş÷™ů==%Řüé‹ôí˙”~ćËoÓŹľw÷(ľ~ŐnTŁOžÓGÂv čCÇÁ¤G "úŹÝŐâü5jnťŽľKś­tĹűűůÖ6ľť×)ľvĆÓgĎŮŚEZRĐnÚiDžżô•Ń‘*e†6)ŤFÂć+•ÍŚ”Š_‘/ű:ÜNl>!ţ¸q‚÷ű›2ąßPU /3u|ýtqź÷˛úA§‚Ú@ŠłGČ9ŠúLĘÂ<׋÷$ˆ?ăČ;ăÖOťŻđCĽo}r*—šzĈĂ4cżżğĐč-Km–Ë ›ýzˆ?˛˙žéóöyú†„׳ĄŸćç r2Žk{D'­řS†äu<˘Ł†+ż„„5€(ĘRyUŸťŃ´L:ôEއ(PĽŞ"…ëĂĺ‚Z-ÉR^( ĹEC9MŒb2ä)ĄŒWyÁÄúA1@ˆ €X[,˛¤EZ[[ËHŁÔ^. ÎłýU“ Đ÷8O Š1ý~Ç9“2 ƒ =Ăćć§ŒŞ×Lę@Ş6@R?Á^ą$K>#9Ľ–iŽŢ„k|-@˝mťAHb˘‚ƒqbŰ~đ7Ć’b$ůQ"ŽAlËiěľ’jPLjmřšmľéĹótŔŞ7†×ăšEŒSŻ_żž{ĐÖۡoór!ěěx‚ÍăǏš“P~ϧĺŠđűɓ'ÜěCˆ6¸gDy÷ҒÍ✒ť7EŃIę•ë}%„źđžÄ˛fłÁ!´W”ˆ°>úˆë2öë żA ’ţ‚ڌ~Â7śE’ž,ź6AđIj ۓL҂şTżËŠEŽ@uź@ĄBĄP(— CÇ%Ś˘Ü”c˜Čôě'Hɚů`Ś0ópżK˙ŸŸ>§— ëô‹7Ź27Cí˝ťŐĄ˙ń›?ĽžŰ1@dßóGđő fœ—:ÉJ[›$6ôk7WčoýňĎŃg­==ßŰŚ˙ţ÷éŢ}@ĎŰuú‹>ĽßxcÝÚ]ŻYű#ám?yjmjҏ^Fô/żý>™ÚbćŻ=*"ß§ńžUZRJĚ?Ȣ;î¨G‡ge,Âśť÷ɃÜ.vańgÔř%lŁ@Ú_ĽÚęÖĽ~Œŕ‰CäSĂFAxw@ŮČůĺz“ťNyűČ×wنˆ&&ĹPŸŒâlQĹ9)óQNr?G]?ÓD\Ś%Ö—4éţ¤Zö3K …âĘ@Řâp6†’ęĂĘVd`pGüIÁnˇNÖfŻZG¤éułň4…c>…ó9Š­s˛N3ł3Ô°ŽĚ¤QcřD¨â~ ů¨ŒHČç<ś‰a`ĘäĚłmLů*SyÖmȜOŃׇÔmľ˝źçhSfń‡Šő ęś/ŕ8n6üĚY및ű<t@üń†â7ňô,ů2ą§|úËÄ Ąőř“äDŒ*ˆ?yB3XĽs"Ć‘ÄŸâvƒk"%ţ(ÎĂŇ5TА…¤8Ie€Ąň~ ĹŮ!'Ý#XlĄJCœĹ°ŰAbŮAřA~<˙a ‚xr„(ĽAAř€tr@¨ü3jŞb2„+pž„€…s"łAhiř´M2ă€Ëíđß8‡Š­gaq™Ë°t{3ÖŮÁŠDeü>YůsŠ{IfăšŘÜÜäöaż¸&pm ]˛œŰÝui¸D‘D’( x° u ůLˆ?řF]B0Âö¨ßźż^Ÿś7ˇłYŇB"BIŘ×3l= Ô`=?X' > ęNŰÖ=W Ąý Â(' XBȑ{DŇąIŰQ/7hž…L„óˆýâTlmm˛ŠŽíÇq QIˆPŇ|PęŔq4MjÎĚRÚOšn9¨űŃŁGź ěŸ,př œ¤4ĂoěÔ € „߲_NX Í)q*4¤ł1’ů…ůŹ …BĄPŃČ5âK.ŔËDQč'öc&šÔ78hßá]ţčÉ3ú˝?|L‡ŸťMŸyű3ôŢűďŃżůɧô Ńť¸NÎóéœÜ ÓŁĽĹyşžl}Ç^QrgîPÇÚ˝ČM•O05ŐńG쿚=¸{ˇ6č×~ők´žşDýŽƖVéˇ~ăWč ń-ú×ß—0×ř_üńŸ‘5ůč[K4?7K;=ń’ţĺˇîS7ŠĹSMŁ{Ăľ6‘Œ_IĹ-3e|wěŤRĆYŮLÍŇŰDq;ۍ_SńĄ‹jP Ő…żŁFe Œ(ż|\wv?Ö1ß2ż<Ć]q”Ĺ!ÄwŸŻsé\ůw\í¤Ęvçˆňߒ’ mOŁ>™:R°%Tďרoj|­pî€ČPaB]˜Â 9ŽĚU-T(§‹–˙žôŚ3§źţČĺĎ2äDpOź^ˇŁ(VâBqŮůF0Űş,#Yvü—× dő‚Ńm[G˛5ŕwŸ>ĄÎă‡ÔßŰÍöoG“0iŮňłKË<łsíú:5g—Š>[ŸhűĚX-´7X’RyU‘hě䄟xp'Q>p‹d¤äkĚĺC ľ;třř9m?yĘŮNË:Úál5ŁgzäÝĹĂ’ÔW–iö×incĂć8-€ŒŇŒ'ŔdC•Ě`Ż:—“ž×˘Ň÷hd/Ś(\fJ›OV—S+ ip_Y}ŃđÖ3PzhMm˛…BqҘ&ľ–ÁІuçć`˛5HĄP(Î ĂގŁlČIIBŻ:„ôţ‡Š" ?€`§ś8ł!ţČűý-)”@‚ƒ¨ţ\†s0jŚěy—Âqú}ţĹGT–$“(ł Ď{)FÔu8(`Ç>] |Ý9yAťŸÔ“ě<‘}joœJ ReA= ¤> ,ƒśźűîťźĘ9ÍFƒĽÇŠ â,€2B>Áqáú"š¨Ů`[]pü7oŢäžřä“OxC3ÍV’ )8&V$ŕ}°ŐŐUŽGH3Pî‰HG˘¸ƒ{j>’KˆWĺÔ^hťfB%ůýIpÇôöő¨§˙ŕđ€‰?hŰúú:}öłŸĺc@}¸7ĄD„ö IGúIŇq5ł™ŠśÇGˆNrŒaZ?”‰ íĂ1Hz/”G<|ř˙Fj1!6‰­ŘœiŇľkŽůYb˙ÍÍĎň7ęS(^5¸p§BĄ¸ô8i36œĐi판d-óĂiĽb‘Ĺ#ž0ÖśÉÄú’#ö''ěG‡X욥ťŽ¤Î`ČŰqžvRúţf›öŸîÓŁí>mšÖÄ3m(I oţŕýÂĎ‘~ĺ­%śyşý”>řô)ýŢ_?¤|pŸ^D3Ak˝Ky IĽ´ĄÜ~k7XăoźůÝYˇśI|Hýll=ić{Űô‹wçčÝćčƒç‡ôNo†ŢůýďŃ˙ň 7č3ŻßŁďż8 ?˙‹ż¤˝Úźí’™ŹG™ó2•UěĄ|Eî­-Œ¸żM֏„IÄ~ť|R§W¤L‹ż#ďű7™S;č›ňÄŇ4ˆAԃ¨°‰ˆ\áYӋ3}Ë×ĂŃçé挹#%őíwĽÔ¨ĎĐljűź ĺǚ˝"űöüá:íł2$HIHeëR͙K# ăĆEůŐĚżů.Üđ˛ŒĽ~…â,މüI§ƒ3ť™ĎkŽőQH@Ăśá'dżožŘwůMR(WĂÉĂR\U;ŐĹşutőNťĂ’íO­stď§ďPűĹs_́˜ř3™sĽ[‡d­Akˇnӂu ŻŹ.Sb ĐFsBâĺF˛ÉŠî…f§•Ç’[ëBýÉScĹ>.‹i¸ň T`('Nöú´óô9=|ďžÁšżłm6`&•xĹŔ°O"_ş`óˇ–Šžşâf4 0üŃ p0Z´Qf‚†ƒAŮöڤ“mPŽ[üv’˘Á`Ă89yÉSíR $×TŮĚÍâ ňӔi˜żJA#šśŚó ,)^m ČĘLx™íîRž,‘BĄPœ-„ţJďóQŞe'ó ąœ&ń$Tü‘tAL*ˇĎ}IŚUŹÇAI͈ÂIŮöťČŐżçAúF:B.úWHW8o8G8ňwßĎ:îُ+çˆ/g|ćŹ~W1Ëý¸Ŕy` *Ěl7SÚýqlňnĎ]]O–_ Ć´|ŠŻlVľ'çŔž‡/2l‰TpŒŘFĆ2žŔ2†¤ODiŠž vƒńăŢţ—ÝÚŢʈ)˘4’ˆI¨űE?ă:G˝LžęvܘƜo˙`ßÍÜŠĹš@.Š|  CXżťłËۀ°„Žéő{9Ąg~!K}ĺTg\śfŁ8X.Á=ěçĺdڈ Đ6œcôu-¸?ű~wÂ6db‚ÉGĄšˆO˘ŕ% ˝rďbšŸ%m€ce"Q b>s˝Yk+:˛Ę[ę.]ŞçBqRPâąBqEpŒ[ٌX*żďóžQᯈč˜J#ă9 Îśˆ­2ÓhŇßţŐŻŃçŢţŒ}˙ońşz-ŚĎž~—~{ţěn[ß}‹¨DVŠĚ ÁĽ*ąlĂÚDëü7T§f¨9Ó ƒÖím0 ší,:ĚśŮÚÝŁ'/^Z[ŻSđťÎmĎËăúůóçYkąEË$ç8č^翏 Nú<üÉOż.)"OáŇSşJÍ’‰ńm“˛šç8߯‹ävÖ°qDř7ŰßGâDŮĺČwƒKŮՏűl÷Í.ÔhëÉ&ľ›Öž>hPcŤNéAâ´Á}čLZŸ`ř˛~|[eŞ´)œsňvzT˜Ź-d %ţ(gpLh´Óâ(7ăšÜŔ§Aü9 ŠGś żĺďň§źœŸ—ÝnűA­6÷3¤P(.?—}řř!ő>éeŠÉDYHÚyýúuş÷Ú=şšx“—ůľ!#qŠˆ$ćv:Ľ-ˇl~aÖíśłvŒƒ~Y°AŻ×ßxƒëď)÷x{žNěŘÖ~jIĎ ú 2\7˙âޖ”qBüڎöByýŒ”Á6h+ÎęŔˇ;çH6Ÿľ}Uu-+ …BĄ8>}7Vʘ) ńS/ÝďŠÍ\C5kKÝٸF_˝ˇBÍŢŚŤÇžëçfęÔ:hŃçfRúů7oŃ_>˙0ŰF4f}ÚUiÁćAˇÂÖ6ěŰEşZ˘ĺ,…mˇßĽN×ů…ń[üż(űă“FĐB ƃ‘(łD#Ťčƒ27<˙,)ď´‘ŇËůŸaűŔžbď H ôPČŮNŽĹŠťČ˘ŒXâýڞDË1dL6‰ˇŘż˘z$ĹSěÇ4ví0 ţŘ6ôÔčw˙ó߼~˝CqŻNőւ_ŔŚ­ťˆ)TE—Fň'ŒńDĹólřźDY!!ý(ŽŽ•׿N Ĺ4DŽΠ礌ú'ţ;şŇ0 ™VŻ/CŹŽř§Á{ȑŽP(Ł šł8÷h×:a7Ÿ=ĽÝGy=?}fÍOf\uŹğĽľkÔłŽMČO&d SkœaÖSÉł˘ň“ŽÜ¨r …Ő#šsŁ(0d#§Hű˛Šq 1âӘŠĄ|ö<ń‡ĆČǛV(íPű`—v_ž —OÓKŰ7ő´GɄł+9ßnękv}ƒşŽ§ JýJ„3t1‚Zf‘Âů,ŞČU\ˇÎw8§q*c€‡<3€ßI-áY­ĆÂ0Sv˙`g× ÍjŐ<+˜gľć33@ęÚ˛Řßü‚ŻwoŸgâbvlSŒ2Yűgffyvne‰IŤP\$ˆƒ÷‚h<Ăźß#…BĄ8]DŁ—؋HŘ8 ŒL”™6Ŕ.v$ŔxƇ˙T!Š*˛ND„ä!Š˝¤Igt’x•ČĂÎ7úTÎGŘß°K%•¤ŸÂ2ŘÖőZ=SfŠűu˘ŹÉ ?>“DšúOfůOy ÉľÔ´×ĘŇň2Űúsłš˝/ŠÉ`WˆzŽ3I‘Ĺ)ĺR§ú‚ŤwRŃ‘”SřĆţ$—Ô‡ăšŔö°_ Ź3ߝg2 ś˜dۉ6bLâ ÔwPmZ\Z¤ĺ•e&Ąm˘¨$÷~ŁÜľőkůËř#$ŁfżÉăšgĐ|@ŔA;ńvsŠ Żśj$˜¨oń8÷œŸD!÷?RVŽ=ć™Őţ_pŸËXFTĐV!މZđl›˘kٟKŹ“‰Ý œ¨ů´1 ƒÓ’ĹÜô§>Ě˙ô˛]˙úú§6ˆŘéřΝą‡ůōyzëŢ]j¤Î65A„•ÉJ&Ÿîk|há'›DOž<ĽnÜ iMNŹ˘‘FěGQÝűOŇĹŚGšË?h›W}ěa‡čŸýż˙găUm´ĎţHËžóË6ŽĆUŠĎňœ^TôUhTŕ8ř÷ţOJüQLpLüŸeâϸŔ¨)ýmFŹ?œWŞ/Á8’Ď$Ŕăßüđ‡?üéőë:{\Ą¸JŮžÇFHˇpîbk@'0VS8R{ĚřwŤ#főOJüAÉNœPÝôůSł†vbś‰ş†zť{˜>@^@œ‰Ä^dč‰.~6-d@ĘA*]Ä ç+ŘÖĐćöz噈Uiě˛~œ\¨'1Ł?ĘfÝfs@úIʃő[g>fó֨хFÚĺOłż{ÜO“ww>C¤Ń÷3"˙ÉhëAůS\~?Fě(đŕ*Äą-˛úp\‹#ÎňĺĺUJšŽřƒA fçÂĄŒíÔŕ7œň˜y+JB ţěîí°ƒ8šA"‚ƒťzúś<Ď2śÎë;ľ;źěɓ'Öé˝ÇôqNéÔ+-Řśßž}ŰSŠş/ …BĄPœLać"K('ŻTÍjö÷eDxŒGY? ’* ĘŘDÔR‚Řm€(.ÂśC _ˆ B•Řwř”U'Eů ŠY_T]ĎBć‚ -8'bOr.pް egçZ™už¸°Čöqß§K‚4şľěfL€°śŽéűűĘLeÓ21ÉśIŽ%ěŁQËSsÁśÇ¸ŕţýűQÍ͒NóTXv[“ Šłąž‘)Í ™`B¨çŕxĄä#„”őőuzýő×y[\›řş`ű‡}~8ĺÖĚL6N É3řžvíZŚŹ$ëDeI”ĐϒśěíˇßfU#š‰ňťéűd‡´A4áţËŞe’Ş ĺMEp',ţ“er.ä˜ĺZpĘByzćŒÄeۊc“gÁĆĆăúCż˘˙%…šN%ěÖ­[´śśĘ0ëQŸ …BĄP\fTŮŻ˘ŇăR™LĽe˛ŠĄA'¸ďüĐýžĄn/ĺÔŽ&Ě^>ŽĎŞĐƇĄ§Ön€ýh xŘĄ-k8Bšs3ŻĚ6é‹÷nŃ/žqƒîŽÎSShúŕŔĐň.<ëĐćÖVÖ7‡śž÷<Ľo|;Ś_ţů/ŃÝń÷ˇoýŔůŢűô§?ţ„vťp¨ÓY€é5> %ĹEkGP­/ş{°GŚÝ˘š=AąőE´]úŐQ˜ŻŰăşťFżú‹_ …ţN°ĆůŐ ĽţĂN#GÓůŻŇŁďď<˘ýdžă ýhxÖšŚ$­ŤĖ>ÚEÇB"*ĆliđÍMăďĆow9=ć8ĽG~|%ub%ţ(g pLČÝĄ}:>ÎŐńtRoľaY~‚Ď0†Tmő;żó;?ţľ_űuR(W˘#Üjhđ‚As˙á8Ĺ ckH ąĹĚÄŠžú&bIĚŘ×SĎÖkăÖhoďż ěwëĚŹűY§L‰˘Ŕ¨ľ&ŸWžpTkp§Ţ–pnvü ëy;Ię˜~Ém4ŢĄĎŰň,Řőť5;HK|Šě/á}F>…›ů^śß`śf2k‹`ŚŽu(G=§Z”úAßôY‚u˛Gęą|Ŕ¤ÁŒé|3ę•P>cîďp†Ž–ŕ,Ç`ǟ§íŠŹÓźSPü‘˝ů,Ňvaö ÖIz (ý@ń‡Ôś 6HšŠ0­—¤AH˝”ţžu\cКÔsâ8ťeîű[R 0~FŹJŘ+ …BqňpfĽÉH˜MZ•’ FţQŒ† `‰Ň˘(üŔö‘žS| -ˆŇŒ!„lűNmŁăŁŹâ$Š?’˛IR0Éy •€œjŽĄEj6gěX!˘ăuŸfŘŮî‰WűáQf˙ť9Ó*HĹŹśiěľ#ś6k|=KśÍ Ҁ$"öľÜˇ˘&%éĽ@ځgyi‰Ç¸ą×Zß×+ÄůĆľ…šë´˛˛ĚË×ÖŽqú!C‰B’Řůň|ŇKř ‘ąK¤˛SÜŇ瀐dp,˛­(äTÚŞžcáš?6 ˆ?Ó |ކíš{÷._ ţˆZ>TęuůşYôççpueĺXD@…â2Cm…âŠŕˇň° ›řÍĂŕ›˛#SŞŒ)‘›)ŰkuéđŮ.m}úœöžlsÚQç9?= Ö§OŸÓ?٢ˇ?óĹű/š=­^J{m˘Z }ëC§ÎIˇ3ÖxseŽţć›7čŤoÜŚ…zœ)Î/­X[-˝Gď>¤˝—Ď­kşžígˇÝĽóăOił“ŇĎ˝šNąľgß{đ)}ű'čńNŰĆ:5dŠłr%~üŐ´ţćšŮjw[”tĄoÇO{ťˇ­OżKݸF3Í:űsĺŸÁŤ€írؘlŹ…~{!ÇřO”—ŻŽiÄ!TŒĹ`ŸœÍ{𤞍x]FONLâc@2‚Äý6H`1Ĺ=œŁÄţ]ŁĄ7Ň ŚĹEˇ)D-ŞrÜ iGލž,ů‰rÇTřĎr&:g Bńjŕw~ç˙öc˙gUŞ/AŐ˛i`JßĂÖ g=jŁ˝ŁČBĺƒ‚ODŐŠžúßřĆ7öúýôϓ$V /…Bqî`˘Šu^śwvčĐ:4Aüib&&fŁz€t`v‹jn–­ä´;Tł†ű’up6źłťƒÔdÖš‡ŢĚĚ[Œ-;Ŕ°Š~|ؑœÚú0“4Έ?‘Pđ' ţ€€”řôUŚžzUžČ[˘/Ŕ‡ˇĚ&™˙*Ŕ!ßąý"o”‡óNu ˜‘łÇ2‘هăĺîíňfĂIéÍeŘ.-ͲŔöĄäźʐî_ýB,âŮŇI˘Á-…BĄP(Nڐş&ń{y÷ĘG5€đÝŐŢĎăŽç8Nj>…íľ’Tˆď%Ň ú8LŁ$˄4!Ä!Uœ^ľŕé°ó(ËA&ňJů<…$. †şi­ÁŠny†rÍQ$5›-ӈAúIŠÖďQŒÉHAąŻĂ”Rżţb¤“ŠŮĹmĺîÓ{Ż˝FsóóLü •ŒpĄ]/Š83°ýí˜Ş2P Us„Ä#鍰 ŽM4œÂLÝ×ÝçؚË×uQQlP5§\>ÜĆőq\Ăý’K¸.źOÂzĂďň߲ă‚űýˆÁ”ŞöŕÚAßŢťwĎ—¨aV;‹¸Żűn\fĎRšÍÍĎň÷I?ŠË%ţ(WǸ•Ť6 )fş2}$‹hچ:‡mÚzú’žň„vžm1č´ßřA§Kż÷ďR7™§Żßkrƒv:ôxkŸţđŻ>Ąl[ŹĹĘÇś0Ó¤ťkKLţYŽa˘)ÚčĆkŤ‘]ó]°OŸÜ˙ˆúAőí~žˇ#úáýç´ĐL¨ś°Lßż˙’ďt¨Őét!ÄŹœřűô^˜Ü‹ěëŤ+ô•7ޢۡoŇÓ'č;ܧ‡›;lg׏M¸ËY‡ŸW!÷3єăŐ^‰‘&œÔ;°•AüaŰt‘ő˙’LlüdYß3FHKţť÷Ü6q‡'×ú &9⏯ł|­Ÿ ńgĺ[)RTˆ†,&E^ůÇţ?km\LR _šzřđ!“äOňŘ E5Ŕ-ůĆ7ţ`œÚOUŞ/Są|9H`†ü}ꘖř3ŒŹs(ŰUűËÉËĹŚIŐ>üä÷Ä…â '~›Ëĺč€1Öˇ†Ż}*ő÷­#sˇM‰´@ş“ęöݐ`tâMH”0ËÓtŠ:Ö %™9;cßY¨đŘíz}䏢č°ĺŒ@đZPŽŰăş"S÷†Ąáú˘˝§ƒŞ” APţéHl §5Đó öé9CąőÖGiBdNwFÇQGüÚÚZ–‚@3"i/łdő'pčƒ0„r˜A Ŕ‘'4ˆ8âlx–3ĄŢÂrpF×*Rxaßґ֯7ęʐýWd6ľĚčU( …BqşpAű˜ß×.­ŽSţ‚OXĘUÄi’~’:ę"A§ŐŃ}2u}[ˇ6÷,Ôs`ĎÚűhę3ŽO< ˜Xbżą ßř€x377ďmtç‚rˇE~$˛ĎIžËŠbÇĹäuŒ+Wź'Ę÷H!UXß0ń+|>†$§Ü•ŞO˘6•)„jEʊ”˛".Ćdʈ˛Y=áń™N’P( …ÂAŢŁ!ФŠ‹ œJqpłmx°ÖhŇÍ;ëtďÍŰ´w¸CőŮ&ĽœţŞO'ŤĚí@śŰ"çśţÁÖ=ůăoŃýť‹tëÎ]zą×Śüä§ôţV‹ (ď édkóMę4cj×ú´<ëâ FtSkŘż——œĐ|p°Ć+É zÖ˙n şQöÉËͤÁő'¨îÔ0ÔÚŹwW–čŢžKżüůuZjD”.­Đb­E˙懻ôto—ł Ţö ˆßÁé`űŘŰéáYZąvnű°ýŰň#ĘČ7řfeĄâůú[ŸĽ]ťżŽíQ…{só%’1Eú~Ř-P+ŞBYy*ĚŹŔ×,“Ő„ř#ë|]^…É]Ý1űů#Ż‚c’ŇƒŽq#śS# TJФ6a*/ď”|F†Ř}R‰§řôĆb3GŃŘŰ#řËՅ ¨ŚomÝ˝=_Ŝ5ę<Ś‘É čƒü>7•Aôł€ŽŚWŕ–ř?Á5Š"ô”oŞß§y›LU÷i)ţŒ# #ôLş}8é?ţÇ˙ř˙éú;˙R(Š&u2ŸRrjuŹĄś“Rs×ТąeĚ~=D:)k$Z§8›i ‚Xă1QĹ>Ĺâƒ}&ňĚZĂŇŁőý”˘ý%‡jZăťÇ'ҊQŒރtbcQß~z kˆÚzlŮÚó=2ö*?H˙5ÜŹ k5:˛‘,Á††ke•ĚĚE\un÷k’üƒAfŽcö-:™Ĺą `0Äľ‚œ<œ÷ˆ”žĘRü˛ $FٍX.K§VBčüFbye™÷Wódq~K=Žî7ÚŚPGśBĄP(§ ňńžît;6đ?ÇdyχďâŤN9 ňĎEÁ°sŠD Éŕl]ʈ?ŽŒS§†WƁÝ;;7G+Ť+לbNÂÎů>;؍W$Śčou„8"Îną§Ă{UĘĂAžťťË QÔ5´eowU‚„Đ/|Qď”ÔZNý§ÉŽwŮWîßź7ĘËĆý>.NŽřS"÷˜˘Z‘|łręa›ƒAaJ>I—&ĎOôФB“”jĄrWT"řřdë˛ß^áIҜáG”äŰę­ŤP( ĹÉoÝ*ëKó֞[Ś…Ĺ9&ÜJ˘¨ÓŠc˛y 5ű¤FżÜŚëQ‡h~>Ý:¤Ÿ>Ú¤˝¤a €ŁqƒQ­Ď’ž­ím2vŔјcUŸöć&kä%Š5hť˜ý°o—§”@bľëŤ=ëdíÚÁN2;CóˇnYgę<™x†z&ĄĂÝę>ߤôÁcJÚÔ´Žřdf– >0:­Ł›@@Bş1۞ŒÖk‡T[˝IľůUŞĹ Gúš€ÎTČBÄ s˘—) GCfŁĄ,ÄA{n&nŤBĄP(ŠS‡…‘^ćΝ;ü şÄđţG* ’•)P톼¤đŞ%ŃQ×_2 ›É9lš˘™In˛ÎÁ Gz˝Ń¤••VÎiŘ{iŎ_"¸i°łÚ§gú”L žýĘę2Š >Š9y™œ GüÎÎŤ{†Š?˛÷řR˙v{ŮāpĆX Á™ŽcÂłbgg›I+ 6a9ʂě‚YĺřĎ!­Ö!×#*E˛NHI3„Ą¤BRMUz/ aĺĽzĺcVTą˝ N)l'íÍŇ"wşÔiw¨Ýjs?aš¤M>äôi–&MČT˘l e|ËX. ‘›áŒó`űZ-˜źA.ŘÁŠŠvQŁYˇAHQ_Ő¨ƒâՂUŠ+‚cÜĘfÄ vN’ęËż>ËA6ëˆć´[iŇśŸőăkRŞ{:Í騠ŻÂ3Iż¤vœś}ŘĽű/čă]˘ľľ:Ĺű]VŘď§1í$+ôýüöÚŠm{Ł’ŕ2€ČÍÝÍÚSZ ľœŢ)΋…ľœBĹßÚL8>Q˝‰‘f–IO‘?gŠSš1ăҝćÝłöŰ!lIL°}*űělŘsüqŕ#öXF Ż˛˝l›nÝžMO^<Ééa3 ză{´śžL}đ)=zř‚[°ź˛Hˇoß°6őŽ]öˆćçćiii•ö­}˙ţ}śľ×Żo0‰ëŚý.6áÍ7Ymks‹­ >kă Ç`,ĺœŐŐUkĂöčĺ˗Ôéua=íť4kósžX>xLm{Ű]ÚA†ŘśËÖŢ__ĺ{ëÉűďَ= cűkŐŽ[^Z˘ů…9jÔę9aÝţÝO ?ž={ƓęP˘Z^vJŁČ`rNěÜm:8ŘĎěi”]´ăŒśľ˝ˇśśx9úçś0&^ŻD„˜ú ë`“c܂:đűŢÝťt÷Î]zúô)Ÿ_™ =-qj†+Ž ě˝ř?[Bîi)ŠžÂ ŽËż‡˝ÁŚ]~â8ÉČä¤ÄžđwŐ:A4áöňw'ůć7˙Í÷kżöëJüQ(ç •›Ö@k=~LÝ^‡­ ü&œłöśżťK?ý”z֐[[ZŚŘk;Ö Më Íu)ą†hD!ťźÉ*BÎńšˇżG›Ö=kŇŸąNÔĆÚEśŢś-űŘsŰďHÝw?˘™V—Ö76h~yţÔłűěXG­é÷¨a Dˆv@<ÚŢĽš›wiay•ařŞOi*HŞąppŚS( …Bqţ€#ŽŮtiCß~űmfĎĚΰ#Îgš))ˆČ–&ű-Š~äűR"› mýĽCHZ™dšbƒ.šČ'"O:ƒ„Ÿ¨†¤émĐ íą~DŚD@™t’JĘŤűŞ?Bž SMÁá ‡6œě˘:˛ ŕ=˛íIéö­Ű1Eˆű¨eń<@9l ťö=œőXwëÖ-&ů`?pžżűîťźďˇŢz‹66ŽsyŒŃ?~ÂN{ԁňv†uŹ–ƒ1œm#Ƈ!‘§œ mĂśfŁ!(L}†e¨ œ!eq˙•”{äÜĺ$ŁÁ2a:2ô>h> ţ€‰YÓϟ?ç2ëëëü>AA…%Ç,DŞLĘ~pŒ8Ÿ8'‡vF  ×l}8ö$ ˙ŕřą?LXYťśjƒ+.ýšŞ¤* …BŔä_Óž!Ż[(ŰŠWjŠüĹyߢ-}ŰŹíÝ}úŢ~LőƒôŐĎÜľ~ö&ˇň{?ř˝óӏčţƒĂ‰ŰmJßĂ֟ş˝.=´öçű4č ŤoĐlÝŮxPŮÚÚfUĆN2SÁ~’IfÔŃŘý„ir1ź_úŇ)úЍrö­]÷,S¤jĆۋ‹óLŇqM¨DÖč3Ÿý Ýż˙!ŰßHöŐŻ~…žýíďđ1ů+_Ą/~ń‹ô_˙îďVî6sŁ ‚ĚۛíN›ëŻŰąěWŘĘČß<Ć­í6ێ’â{ßĆU[mŰ˙9ö%ÖľŰ]úüç?Ok_řmA]ĘŤ™ĆśÝ×oݤdo‡ň m>x@ťÖś?8Üç ąˇł˘O”Ůî|Üöd€„qŕă\­ýÚúřc†={cbŤ_p›Źl›š!ďmQä(CR UýŐ9.34ŐŠ‚Â1áf%{ĺ8ťkIhÁ¸"'‘‘#ŇMqIaüĂj0v %Š=,“'Yj.!˙ŔQŽŮź/^ź`’ Č0 ˜ŕŢĆzq¨Ł.@ŇT‰ŞŕG˝¨„8ÝEऔĂ~@Âś ŠđĚŰZË?{ö”ëĹsߨĎü-żą?!đČ1`š,"Ú Â ‚҆ŽO)*üéĎ5¤&CzttżßËҝ˘ äöI>ĐŕHHĄěÁ‰ÍÍMîOp>ćfćř8°ű– ž%-‚PÎĘa”Ň‚.h ö‰ş>|˜)űŕ8|Œ¤řJčŔŽg■\Ľ˜ąnżĄ°ŠcU( …B1DÜź bâőö=Űw¸+őĄ„ˆOlß˝q”ës§˙„ű~`m˜§‡´Ű}AďďÔhٚąľ~đ´Kď~źO­ža˙wŽŃĘ?…¨ě —ˇ/ƒöŐŒKčŔچůáKúxŤM77ŽQˇuH<ۤOěqĆLT鍳´Óˆî÷šôćĚ5ŞÓäö‘Ąü_ǐ421ýĎüM{PÎŢ쳂SĘßěă?řˆ *›/ˇüӖľ1˙§ő‡Ö.ś×œ=_››ťôűż˙lOÂÎűřţÇźÍâŇRĺna3Â>„]Žż…°žD. -=PÂق-›5×ö#lgŇ™„NÎ`ťűŮł—ô™ĎźMÍ_úš]¸E‡/wŮĆ­ĎÍÓľkkGٙĄx—Ç# őWżë”=aű...s;>ůäzüř1ľ[Ü>ě÷7ß°ă烀­ź(i†c›zR§ғy"=+jze!Âžóďđv°ˇĂ~]:Pţý÷ߣGöˇř E5úýôĎÁ)!÷ÂčRQŐ§Źî3Ή4)ÁgZL]Ďić"ŠrďLŁ „Nƒßň=ěo”ďŘĎĚ˙ńý—żökżŽÄ…Bqö@ŞŹž}´śě÷ž5úśş”´ÚÔhj6 ŐŁ™¤F3Í:Ýş1KýĂŞAŠŇ>×nQ„Yłő&<´Î lŸnpáBžqnÎÖľj¨çííŰTűź5DoŢ"žűp¸GŃNćM“6î˝In›­ŘŮŢaqÖ;đ™GąľkßźI-köÉĚÎѲ5T琞*‰ˆ4˘P( …âŠÁ™7Š“÷śśž]ʘ˘ňEUJ*Ěe&„2îGYYĄDŸó+ĚLQD8ńáЇӜÚŠsÖc/"¸NEš$8Ôá(ÇošĎáT‡ÚLŰ.Cš*(ÖŔŠ/¤qö‹Ł$(Ą~lĺ<ŮÖŮýpä?yň„÷ç@šZTp$UÖËö˘О Ŕ`8F&×ř`TÉpě8nŽĺQFR mh#ęE9,C0Ő—lż`Ÿ îŕ8EÁ ԃ:Qú‡ÓľůYĐh3ց…íąÍœ/Ć䞙Ř/Žĺ˛T`žÔ$ä$@ΖĄ.Iu†őčwěëąeřŕíěůi4ę´aƒ_č­ŕ)ěôl0ĘľśJüQźjĐ÷—BqEpJŠžRĘSŹ:Bö;r\ŒŠm\=m*€a՟=jooҒľ_fV­búôÁýŠŐí—H?'“PCH­=łˇťK͙YjwşôěĹ!ěmŃă'O­ďżK[˝”Z}CK v=§Tudű*ś[ô§ń—ôăwţÚúţ÷*ËȄUIoËśYŢÚĄ=˛QžœŽ8¨$qj8UŠ˘`Ë֚§ŇîW¤WsóŒ ]ܤm(IîłRśăőţş-6 öŞ+e,ŹpyśŢDR#ۗŽ ß§¸ćó˘Ŕ)ę•QEŞ\ŘÍß˙ţ÷éţłmě%˘FĎ bú(KŽ´ŰΜľłaď3|ěĆýi|şb÷ś3+a‡ăď?piŰ(÷AŔŐLqŽâ(Ąf”ű+ j„őqŰľykÇZě;!ýc,đ駃IG|řř1\ÖOSŽéÎ3ˇHĄ pIČ]Úx0 ч¨š‹R%N3)ŮÇL¸ěDpŇğiˆ=ѐż‰F†BR¨ýˆň¨ţü…}üóŮŮš˙) ĹYÂ+ţDiBľ~L5kŤ&í>D’.ˆđ1őcť.iXĂĎ:”ăő[N݇ˇ3˜q9Ă9}6,‰2Éǎ5ç)šu—’ŰÖ[ťJ´ˇOĆÖm{Tłu,YGiÝ:G[vyĎzÖ¸Ez݆u×—xÖ&L֚5"S–¤„‘šrÎÚÉČŤ …BĄP(— pŚ‚ďLÔ-xŠ'ąŁLëĹ˙łů"ŘG'çzwÎ;3t7'éä7Ů…?Ž•Tź8 @DCţ> ŘiŽYŽžŔr œý ž ‚`<˘–#Ş\âÔI&@˝ŢČÔgDĹeđ@@/’Š $¤ňÂłBfĂšň˘$„!ÁĄҎc¤ÝŘˆ7h7ęĹĚhĐ&bP/ډő¨OCŠďQűAycđýŔ€2’‚ d ŹžPŐGfsĐĆ+ö‡śH›DĄ(mڜ"@fc{ ĄnÔ%ý€c¤ý8nl#d-l#$#”ç ţƒv 33ăԋęő׏ *$w) …BĄ8˜ČŽ}bk˙Ä3Ź6ol¨?đÇ]7.ş@.â4Â.Ą>hIąKĹv#A­aÎt˘z ŃÜÓbGÜȂš‘ŁXľű qěÓ/é5š]Y§ß˙“oŃN§ĹŠ9żú7>Ołi›žůţc[.ÎęK{AtéŮqꓨNOölPiŘńČceĂ~únŔ+Ęś#ÎqŻç݃ŇäŐ•%śŸľŸÓßüwţ&˝ţŤw¸MéarÝąő×éý÷Đ?ýŻţ€~üŻjíÄ=nKżÓ=!%XŞű~J#*ڞőäą=k<ŃÚĽšœńc›¤œ÷‡‘ëHžsBĆ( K‰'ţ™žłÓÝř#fEPYoúyšb^Ó÷ĘrńQ82}ľĆiÉ]Z0¤.K?q)ťčLůIě~aÇ˙Ýżűw™ őŢ{ď]hŰüú瓊Q8<<řçŕ’PQíGř'eŐÁ0ϰ2Ç!§Šř3 †€ÂőáßU˛Ťđ¤†óěďüÎďüŁ˙ä?ůżţţ&…BĄ8cŔ˜„“3E‰Ăƒąĺ;֑škČńü-ß{š čgz†3Ň3‰wkhĹZ!9F;ç§CÜŽ'¨÷@nŇ`‡~˙lTîďQďÓO¨m7čŔ!kŰÇljś WW( …BĄ¸bpĞ”gL:’@Źs¤ !ý8DŮwF’‰&s$ŸLľ˘<fźŻ œąW˝~ÄĘŠa2ćwU]\ň˜nŤ”žěź!Ž›|hD=ŽÇ+Ţ9LŔůńH5Ízƒ‰-ř$(ń€(EÄy‚Č"PÁö œ,ŘńŐŹç`H9ŘŽőP5äŕľ×^Ł×_É9Ř?ˆ-¨ëą=ĆW’Ž ŒÍPöˇąą‘)ěšżĄpƒgˆ1˘ƒĺB B}h+ČC’2 u˘!˙`{ŒŰDÉí–ö !G‚¨ýĽ!”áTśýX†ţÂ~°_Iń%ĘER7ʉŠĎLÓ+%ľŒ „öq ç}Š:$°rhöYŕ_űÚ×8Ę ńIHhWHšáý7›ŽäŐOűTł}Ź÷°BĄP(#0ůpŕ ť:ŠNxśÂ)Ą`żds/űѓ§´Juś×@ ˘8ľžý>m={fí*ŘĽÉČşaƒŢÚXgŠú.@ Ş/Č,ňśk;ruLscíŤFc†÷9RIÁVsi´Ý'śq Řý ހřsp°O?úÁŘ&^ˆďŇü’=“Đwžý=úć7˙ÄڂNÍ6 Ňť’Ÿ€S•DQčěuűöÓËú´ŹÎrNäŇČÚcf{›dŹsćާDŽřăČ6䕮ÜČ&ň B(/d"´)ąż…Ř#ŞYů>“ŒÄĂMKňunrƒX:őc”­#Ć㏃ˇkÜ)OŇvÇ*ŰsŒhôp>ĂI*ůF{˛×í?ý§˙4kŤ¤>*$Ö%“Żäˇ['ž …âTp šťœpKĘŠ˝ĂĘG:3•řSEҙ´\ÁO4¤\Ř)UËCşĽxnĹ×fVíüƒđěďý˝ż÷Ÿ}éK_ţIĄP(Î ˘ýâMÝZw5č餞'j°řô`tşÇrśś­QŘŞŐ)mX‡gRç¸R„źÄLÁčIźĄÖGŐՙĺ8ÖzĎ>ňvv)ÚÜŚúa z˜vű”||Ű˝#?sF"ťP˛Žs6z­ˇcšív‡˘ýš]íS6ƒ×ÇůAMÓÇí@ €›v˙ÇiCy˙găś_p%FúçQ( ĹŐDŽ ’9Ěh0՗ ěLtŚ<­î|RnDğŞaö4ğęň'\—ţ*O‡ňńOšőy ‡í§źü˛ؙăÉ=…űFţ0ĺSÖoű'ńzD˜<Óh2ŮÎ(ż@Ń$C°\}D}Ni\@ Áúůš9žá 5!Ś <Ɗs^ˆ3žH:-”Áű ¨íĂ6˘´$)şÝ§aČľŠĆçNŇT(ŻÎÇîP('ăÜÉĂnDÉ,ŞJóu‘{ځËŤ J؉ě÷śčE{LoĽ‘ąY›ÍĆ~ú|ĚłŸ8މ'ĺüÉö&†ôӈŐjc—Ŕ“QŠHk#5çhkďĐĆ/Qá‰0Ţ^äď;6 a]+kWHć ÇĆŽLHđ€ýwăÖM^v-^Ľk‹ŤtkËĺUJă”nýÜMGŕoĚvŊ5Ý×h~ć:™Ľ<%Yd7ż&ë˘â1ŽÝšƒýĺČƆl\öƒ”ł¤cŒ‹öÇîŘăžáţ‹ŒS$Z\]˘ímŸ‰yÂPDŽě’\Ô@­ĆbwNPfLQĺČ’šÖfGŮŞ4m“â¤QHXáÍ*äXđŚĽS…â4đŁýđ?‡„ŸŸP`ŚJůg”(Myyůďq$ĄQ8Ňî4†‘‚&Y^ĺ" É>1夥pyĆůŘj_űÚ×ţÇçĎ_~aiiń˙@ …BqJ( EđŸ}˛Śľ”:5zŹŐˇÎŰž]ŃëPÔmSŇCŢa÷Řj[ăk×ęýľuZZ^Ąšz“ę]H~ö3ŐÄŠ#[Cźf˝şńyea,íÝ@uűYÜޡ;śÎQ°öM—vŠ5 SëTŽĄ„œ˛ë”|îsv``çÓžľŕ6í§}ŘŚ~Ď=fMሆ´N ĺˇWTJ0]Véčšzź Ž7¨VŇĎůC …BqŐ N%8žr§XRp” 8˂żßٍ÷Ď%Çť,ŰcáďÉH?ٖ‘ß&śţäޅ'Ň_•Ç?9΃řSž††Í„|œ™f˜'h„0b Tbć č“8˛ >¸—AAšŤO>ů¤ .BŠ„@láDH. Ďą&|&„ßĘ@IőÝž}› + ÎHú+qHK{„ź#ę<řżAZ‘ŰBq$I-†ş° Žeą?Qőçă?Śű÷ďóߢ°#ÄËúú:]P‡ŹCۄ,„}Ł‘’LˆK’š u\ż~=K€ś`7śE{ô–Aé¨uآF˝Aë×ÖéÍ7ߤ›7} Çˇů7ŢČG2ëý‰óböô¨űľŸ$SŞľăX;~}řđS;6^âíŽ_ßČúř83Š …BĄP\%\\Ú”Č ůG~(¨ĺDqÁďě"¨ü›ĐŽľ?'›“ŠŰp=^AżĂńmÂLbËT`KăĺĎٸÂß˙űßŮťž<‡ ŰϾ˲¨J"ýî\–mô™ÄŠďdG7‚ř35ވ?ö¸Œ#ţ`ÂtęRƒ‰?kXńÇĆGpnČô¸eóö8‘â ł9}xäK1‘]j˘üü&ąW÷ ™ˆáţ–󆯆 ftÔŰĺDnłđú+LŚ°ě”•\ş4(‚üŻÄĹi`gg÷żw„ˇ\’ä#˘˘ŁMƌ"…żŤ0íň#ă,R}Ušy&YVĽú*ýHGgŞŇ”“€@cÄ[gf}}í˙qppxÇ: ~• …â´Á1 kŹÔŹQÓ°Îŕfj˜ĽČŒpk>ÂYÜďZĂË9˜Ű“„ĎŇ ÍŢşMłÖx4O_Rz¸ďË0Ţ0‹F?Ř˙ĆńĘŮ´´ŤR8v=ŚŢŁ'4ӆťKíçϙř[lÝć %Ö9‹`ŒúśŢŽ5­óˇËů‘#–ŠtFŁ;'u)~OŇ'hĚďӆ–Ż&ŞřÇ …BĄ¸l'’({¸œŸ.hτꨟM))Ťý„çğ|&íŮs<éŔ~gMüÉÓNˇ¨čĚŞőŐqmr aš)_‘'âŹ3îx'í÷¨ÔĐb˘é%Íłăó.NaPۏwOpęݚëSżC# šŇCŮoc(ď˂¤şaçm•˜ż"ʤƻžI&h›ěŢ}}RĄVw­BňlĎ$–Č…DYŞpHzT­ěţÉ@,Ż"Ń—(Ž3jŽ"ďLťü——ŁnfȲŞ'Öű× 3ľđ4nüöo˙í˙č÷~ď_ţßíËĺk¤P(gĺ0ŽëÖAş¸¸OłŽ›ĄjĂ6ľ餝F“j7oьuž&O‡El aâpŔÂ1ZˇËë^ţ˝ŒnťCťĎŸSçĺK~ŕőív/îߡF|‡ćí6pÖÖPŻuآÎä śű=ě§´mŽmĐĘ˝7hÁśÓ9R•đ P( …âňCœ—.ľ T,rçŤaXZœť3ř§÷ąEůˆľŞĚ™Ŕ9Wř{xŤre’$“‘Ďˆ@q<@Ţ0Š))w‰g “ý'Îěq˝ !ú”‰@“‡áĄqÚ§X<îŚkî6+m2b{}%Műݐ-¨2żŁýsöMZr\š‘+ŁEUGDDŃ9Ů蒢­°PZů&7YÁ;ĽŁÂfjÇQ ˘ “fb§‚ÓOłśHĐd•7nd)šđ-é˛ęľzŚĂéˇę5?Éáh}(BIĄUč _§ÜS’&KśšwďŤáŕY”oŸŤAáÄ6ŇVĘâŘ„Ô„ß ĄÔ)Ž}3Ԍ°–ƒXƒ64=Ąĺ„(#JEꆒTP?ÜP"‚ş{Žyrúa~VW֘($ŞIœnlRőßGŤkktÝî[Rąő lŽ)ćÚčČcx^‰zSsśÉä­FłA …BĄP(BT h*M¸ě˛ŕ"*T)ý„* 2 •h…řăĆ:Пdb ŠS9˝S:œź!ńĚföËD‘Rěf,ƒM™œýŢëôŮÎ8EP•ă‚Qšö3{——W‘K"Ŕ͔5}Jş|uD9'#§cT&B”‘¤ˆ\ş/4IăâČ+Ď ,ƒI×>]ţŤŮąI-ŞšT`äIQ…I9g‡*§`ĆGéże\rŢ䙰˝ĺśTŠ-Ëd‡ă¤(S(Ş`ŸCßW„‡=8tR˙;$ř„Ÿ*ÇŰ(gܰ—ňQnÄ#ßź§5]fÁ‡ŚX’} S~I99)Ţ#š˝%0Ő)úŁ?úŁ˙ŕ?řű˙çôţó¨ä…Bq:đp)p„ZéěőÔhuhv~‰ękŹX§4lksТt˙€şť;ԇ3óîŞY<ľŽŰžgf÷çf¨ˇ3ĎQÂĚŃ™Ś'؀Âü՗(Zœ'¤Âm™mņşóM6ćÓn›žwíƒ0Ľ… jX‡mmfÖ uŕ0śNV¨ţ´;]jĎ/Rsuš˜)şşBÉL“e-ľş‚iŻP( …Bq PvŞBí'Ç̰1´Šřé§+ŠŸŞĘa%N¸ŞvT•—oYW.7čdM3•Á˛ŁÉ92c.t¤%^a#$„ÇÂNč’.<Ž0mš”ű -9§ą\·lÖ)D#qZĘţóóč†ű …`Ű*猴-üŰŐKL" ŽegząŻMÖN7 6˘şu§Ý“zí=kLoSÔwŇöT›ľśú5ksťÔK1+ŚÔX2žű‰IfQAŞßT}ű?*ćěƔÝ3y*řŰĎyĽâ͐˜ĚtÔŚ#Ť9E?­¸píżöÚk|킜őQd&3{%Ó,őű1áţOˇŸ%ŘîŚLj •t„řƒkOHD8vQîA_ᡤĂĚpšžC"’ôSşĆ$\Ÿř "€ń$ˆ?PÚ"‹ÖVÖět–Žtźůs]AG 6ĺ –Ž_ŒäzˆˆtâŻâUƒÎvW(ن-΄0žS>|Œ#oÝč\'3\]8;ŤĆt(“~„dc|ú&WƧý˛ż÷˛mË㞪w‚…Ę€‡}H [ Ř‹ąŻŤŃhR§śôłvV‘}Âu%Ÿ?ÎőŐëž\â‰?°Ea?şvšđěTw)g!Ȏ%ŘÇc‰ľ21Ž˝:NĚĘEĺ}LiŸĎ‹¤"đOznÄăԃĎ>^’+ú˜,…[¸Ź*myß§{ŤšźpÖ¨TŽň÷ƒ “טT–f㛳˙*Ž.@úG\r„pGpsČŔłJő‡‚ueŇOUš2&Yv*ŻâăŚóŕToSöyQĹ߂*ş8(Sőƒ7.ú'˙䟼ü裏ţ˙üŸ˙˙ąŚýR(' ÉːZk~–ćŢ~›ú7¨vŘľ†­ Ź bŸV54h‚„łłCݚuj߸FfiZ˜­ikŤ˝q¨ÓĽFťE1琍Š_ŻQ)Áě÷lÍîĂ:śűÖž_Oéĺ­5ęÎŰÇšu΂…žîžAukź7oߢćŇ2™š-k^ŠuG]kđŰ6ÔmđdÁۍ•UZ|űłÔظFҁŮöpş’€ …BĄP\^ˆ˛Mg8î)Ё¤"ä@œVáGÚ#ß!I&› Yhw\"٤^HźŠyéř2GÚ ˛@¸Ž`HȃP Î6I%H,…ٝA]přĘ,<.ŕD†2‡8î¤lŮů§3ÖI$!IJ6qôĄ Ź–™)7u2•“0U>֐<„ú°?@RI;ä˜YÓ. @ázîƒ2ôv™un?~ü˜ö7Ÿí>ٍłĎNáxf‰âŐ;4żvƒ•Rf`—{œL)&tl˜)|<á1Ÿ%L˜3 „Ěkň#ů˙ˇw/ĄŇ¤÷}ÇŸŞžŸ>ˇ÷ć™L6ą°#¤…6Q0Y(2!qoD6ĄMŔ!‹,Ä… ‘AŤ$ŤlC6Yx•E ™’Ř’ÁŘ Œl„„Źyçú^ĎýœŽňó{.ŐO×éîSݧű\żŸáLwWUWW_ß§žúŐ˙™Ö9Ű´ĂևtüľôńĘĐ˝ףπÎZŽCXĹĎ}ş˝EzĆđ‚ÁŸyí|N+ŇĄĆáŸx`Ĺý?,ç76ý,ësŞçKâô8,—ŚéuQUžôěŘřXéď•Öłš9tˇő™W埯|ĺ+¨Ş%ŠrR§†˜(ڇu†€Lr°kňvŇ>[ąR[Ćž)ʐÎĚüöNz†=V/śí.R?ŃŁLŚŤŠŽŔ´&Yu‚nňx“+MÚiՙ*ćĚŘ{ůÂś#űćůłgŽjŤŃţ›k˙ĺ­sűŹq›b<ýĽi?˙ůĎÍďţ§ß5yËeCđçÍ7ß4ßüć7ÍŹç> ÇOŞg+Ÿf‹śŐ—9*íö7 W‘5žś…)ëD‘Üż~ŽÚkUĂ´4§v?đ´ô˸ýŰj‹ŻÎřs3Y™wrž™ŘˇHű Ž;@3/řS?*îŰÄžŕ˛4ź×oţć?ú×ď˝÷ޞńC{)3C?ń/Vý‰‹TüŠ__E¸çR˝ë {VŔgÚ2ÓB?őöHý•ô4Â|Ę´H˝}}˝ąƒůäɓąššőO \VřeŞš÷j¸Š?3x-7Ĺî+Śsf…şŇâ-Đء >ýÔ6şíÁ€Ý “ şž4{ˇg†ƒĄiˇÚڧ39ŐrœĚ=ÜRČ6ÜĎěÁđâäĐnŮ C{ Ĺv€w7†fxR˜^`zŻžjÚĂM{˙Ü:öFfœř’ßüöĆŔô_yhZţ ÎRk①Şţ€[l\ ÇLVţÓFśsU–QGm1ôöĺÔGU‡ îVŒÔĺ;Đ\yór˛‚Žî+é¨őT„łń\Ĺ!e™iŕ%v¤j͏A‰t]ÚWéFŰĄęEŁŃŮDŸÎřÝh-[Śă~˛,œ:ůWŒJŰŮk۔űîľŃv)`ĐjuÜźŃYaNĆqUküٚ Äč5Sh(žĄ§çtrrV=7­ë4yMݟÝUžÜ{ůŇu:+¤ŕ^çd9M׺őœó‡ś-ÜkšmĐşö]ŔžŰíŰeKs|tě*cf!0ŕ:Ëq%˘*řcŰËşßÖVáޟZЁ 74oxÍuŠ€î÷ěŮsˇ.Ív;fłm;Ϗlťűů3sđä‰é>7­S_ńgtb?šVg`Š­M“Š2ŠmËťÎá‘:4céř´JŽIKą$›¸œY\ŞŰgAUćÂŚb gîĎ?×zs– *š T#”RĐĘďVĹ!ĽB%ŸđyŠďY|Ě镰˛‰pRúÎŞ0•†Čâ˙šľ•IĂ<ąň•žCąúNúÜŇżú:ҰOŢK×c(-}>i…­4 ¨Ďî,ő3śÓ×J!?UJˇ5˝tŻťi8Ź×ÓŚĽQzť>˝>Í̘śśFţ*‚?Ó=ËŢgVȄŰq˜/S›ĺĆĚ ň0ŹŤűđáĂ˙ă˙ř'żúŤżöŻěíĺęŔj(l‡ŻéÚËHĺ!ýtşî€ŃŠý;8Ř7Çĺą)üŁ­­m3ÜÜ6u‡3ݎXÎÖ´ęӓcWNóă?6{ϟťFŞ:kw<0[ť̨mŘtzŽÓ9kűƒW]5úíw@9ţŐ°dyÚqp'řýđL0ý•#_1"„Zí̜›§O?6ű{{.čŁöÎîŽk“šŠ6§gnúčĚvˆžŞóɸLQúQěmŤB†ý‹ŐG&†¨˛ Ëź|ńÂm•†×étťžDw¨žĄë/_žtmś8Î3ŰĆÓcŠ7´ć7íĽ:K×Cš™nˇ3QŰ˙ĂHńŹLŤi($ƒ´Űlť2ťŽđ犖gZŚçoŰNĹĂĂSWHŻ…ÖshŸÇÓ'Ȏ˝‡j#.đäž÷sĐHŤćĀF /h=Z_ ţ¨]j;bÜśéyk˝˝~ßôű›ŚmˇEŻůÉńČěďŰ÷Źevvr÷~<{śçî+ŊI#×Ö-ĂkĺŤů`RáÚżz|…çâĐöęľm‡Râjť?zôČ˝îěśwg{Űź˛ľaz›]“Űvx۶Çöľz°šeنű”ä]łgŻuěüÜÎĎ\9űž;[×u—>Ě#“CdŐ+ Œ/ËÚŇWŘ7†/B'sŐŻ•c&Ć,×=äŊP Ůš÷e{gŰWŠĄ ƒP[żŞűř÷~\5+~Üw!lo|ă ń`J ë¤C…Ĺ+ńsűřńćɓOÝgÎ ÷‚+ip(~4L×[o˝eśˇwěźqĐ'}l=ĎX5+~văA­_ŸSŃP zţńšÔ+ňč/~ÇŇę>őđNúş¤—Ó¤UÁüJĚĺ+í„G&ís?ҐöOÁČ,üfůÇgź‡ŕOżß3۝یgŔb\K 3‹WSÁRęAŸY‡‰Kż¤ń-.ĽeŠp4œÔ‘ů9ڗ…aŒ3ť_ÔnˇÜţŸ*ú¸ŔŽńmv!Oö#ҀŃäţˆoâ—sۆšă÷qýóQUŸđżŞł†ĐP˸mŐ7TmE8Żőźxń2LUîŘMÓşěŃ2űű‡aˆ+_Hn|(ŔďúúÓ U$o䆑2&)“=J(vÎƎːWrŐôçş-óś ÔiťöĽţô˜žŇ‰B Gn[uůňĺžŰvľSľݧ(NíݏŞí’x†^:Ė<űm Փ´>˙ź7ÜcšőžîšëzQdŽŇ‘ťî*Ů÷mßžo/&*°¤‹4|ĽIű{îö‹{.@Żűůmőa ˙:Úçxŕ‡ř:śĎűčH§}ÓˇoůČţO•7ŰĄrfĎnkż;'s7@|Ť°ŻĄýËôŮ(ÇŘŽÚR– ŹTeâguČĆ ĐU+KS?ŕŞ*…ÍńŽÉŽž´Óښ–„hš=ě8$ă]§&ßËÍŠýÜh_Fg~ŚC[qčťř)ĘÉĎA\ŸžN'DŘ˙bhGâ2Žęjţ¤CÇů MÇ~Ö^š>úĐ<~üŘÓö÷÷'†ş‹Ą…Ůô˘°™Nćhť0˛ęąt}ö´ ú.hš‚QHËřÚ‰yň䉻­éZŻŚÇaôüP]›ŐĐzn8ŽJƒ‡Ú>­+ż‡éxZwŹž4mČA˙ކŔU69ŽN°ŃčúŤŐv,ó!]&Í6î#HüąZŠ ÇGŠPu)ŤUuSt|ĹśEłňjżZeRmX‡ˇă~A=ôŸ~žŞŕO ŕ_ŁYÁb‡?ňOjŠ},qżXÔŃŃá{çwţă÷ż˙ýŒ˙ŇŤłę$\Ő~âő4ؓ†~Ň0P”,­_ŸwYż>íöJ­*ř3íߔ&óęËÔ/͔ëĆLV˙™ţÉ´‘™|l]?Óűö˙Đţý›wß}÷ż˙úŻ˙˝Újĺ_6î˝ô¸ťÚ á|els&q 5PÔ9ƒ?öâĚ.4ÚšěŃgMÖłpždΎLqfž{ćô“ÓíČÖ٢›ęÜTŁ'ÔÂĚu†wÖ6;ĂmÓî¸L‘Ś.őoďłoú†öńt~ą†XĐf¨ŃŐDMłÚ/tü ŽW´¸]\ě'”îöŕ[!tR˜ÓŃYuŔ]:ŕŒÇîúÓ4ö÷ĎěýZîŔž?ťq<î| ߤC`Ă7Yu0]Y:ŘŻeˆZig­ÖQmYşmІŁŃîäđF (ܐegUu×9ÜwBĽ"Ńźx{\5hÜńŚđ€‚J (0ŕ‡kUŻ—ÖëAĺDE”Xb\ˇŠëŒŻKÚąŤ—¤Wâ|ń‘ !ĹđTÜśŘ:~ޓďQ|,mC|?bő”x—KßçÓÓ3×*n‡í°Ż¤ŤVRßŃ}Öî›2—L­#߯χŞę—őŔύîŘĚÎǖÎ/’M?ۉďcŚ!Žíţ*˙¨ň*ˆ(§ůnČśŁcspxŕ†4vŸ×P!5[â°töłúĆëo¸y~řaćlš÷;íôŸ%}ţb˜FŸUiőťŚu*¨˘Ö?OiČ/V°ŇoO5t ýźxńÂüň—żŹÂ<ąÂ~ ´]ňúëŻWß|áSŰ+ş­őżňĘ+n9ÝWúŽJ–˙‹ßÝOŰŽu˝öÚkUČPëřĹ/~á–ŃYŮZˇśCĎ'†šęŻK§ŐqŻżűŽ˙=,“ď–Ë}żÜ 'ăƒ$ń{Ľ÷5~ĎT9ě#ű|ß˙}ˇOŸ>őë ßww0ŚW {ăÍ7LŤÓrżƒţ}#ř÷ÝuânZ;Íjř7eěѝţÚÄžíyG!ąZó>3éPŻqŮYËűPť?‘%ÝßQűëđȇš3Ÿ^qďóů<ĚdJ%Ťčhü‰ŰŠ}Ů?ů“?mťV•YŇź­­ó…/|aâů÷|pĆokřź–ómśĺ†Šbíđ'kťĄ–ËśťôU“ňxÌÉíÁýŠŚR<÷áZ~ ’+­U˙=œř]0ÍÎ_§*!AĐ—dţč÷˙˙ýçŻ}íkhĆÁ…~tĆNäŠ~҃ĄĆœýԐNť>-ě3KšäźĆÖ]ńgšYĄžyóÓŔO=ü3íw+†~bŔhĘşÔC˘S{öƒđ#{ů‡ďžűîßůň—˙îoŮ´~ø×ęiĂĺא…>5ކiĄ_Śžíü|°kš=˜Pš|?4ômGíŠ=8pŹ3źíí3ÁşhNö|)tiöęݰĘýÁĐŽŤk×Q¸Nh b00>…Žł`KW‚2sCTężźç~EKŞý€[l\mŏü”UĂK{@Y•dÎÎĘP@şg›eţ€ř ?´ˇű.ŕŃíěÂ-WfzÔąW‹SťLË 7†nČŠQr :wĂ[ľ2Wý"rK-Ş~ßWěpaƒŇ÷!¨úĹ`ŕ+q´ZY¨ĚŃ ‘Ž}ßáX­—ů˛ăE™ťÎ_7ČQá;UŤaBŠôŞyçÚ}eRöťt݁ËýŘénŰ Jmƒ=tťq[ôÜüvëvœ§űčůšJ>1Ô`_ uúşŕOAh}Eĺ!T 1!.`3¸ůşŸëXľł´^mŁ*2Ĺ×FĂýřΉëlÖsďő:Ś› ZĄ#<íät0CĐI÷×}ŞŞ@ z„pAʈ˘Ę&gŁ33ÜsR Ąkߣ0RnŸ×pӌT­óŘvzžMŮÝ0­á–iŮφ}AMĄłŞHĎCĺ2S$•Pâ˙bYýńĺÍQÎř‹ŚŸľéć¸3KÇŤ9*ß?™ƒ_šĽ°”†DV(DĂkišž}ŸüĐű§@‹vÔ?ýŚĎ›6 č CˆKÁ•>ř šŻ÷\—1”żŸńˇBówvvÜ>VâKËOŤöď§ĎŚSŰ­y1ŚÇĐ4|´­7†čbP)‡ŇŞ:ş= ß7Ń}cŐ=žś-~ˇ\e#ť\L÷sŻńA…Ů´=šö駟şőhůř.L*ĽU´ôk˘á$–lb™P…)VúŠAŸ&Ôm=–ś!ů§×IĎ'†Šü÷SaÂţ)Ü2ŞŠŤí}đđA¨~Đ_¸_8Ü ×ú]œňĐiĹ7TSŹřS.°Ş›œ¸…˛ŞoOo/?KɰşŞZN€Ňj˜ą˝u. äöƏ[ěçÎń}sa?üá͟ţäÇîůžœ„öxîőW~ĺsćťßýnľlÜöĎ_¸a´OOÎέoü|šžĺCťÄńűЙń™óŘwťÓČśAs{˝ůmÚ=ť“‘Ű?vC­ľüI?Wů‹PňUítÔŹâŰöpÎu›7ÔW|.iş0Łâš°Ÿ•˙őŁýđż&ý錺iU~ŇJٰŠYŐ~Œ™ěŠ_7SŽ›†ó×j•ÁŸi!žYóf…{Ś-sQř'žYi՟t]ůœőčÍW/‰zÚ1ôöŰo˙ťo}ë[˙ŃŁ7žB őHBéŽń Żţr'łÂ˜Še%Ë)}ľ~Z,ůď;gÇĽ˙]÷łíŁÖuŔÁ5ˆŠpżB ${Ŕ#oŮ/íě,탞=`;Ç[I)Çˊ˙Ч™4ą\o§÷Ťž§žGôƒ tvéÎFěÚŰá:´ŻćŕAźˇ ËL4˜ç<u‚vzf¨aśěú4ŹÖEĺ5W”†:Ó3Ű5˝ĚvPo ýLűš™íŹlř3Ěm#gďÉóÉăܢ{ś“Tźműxožő–Ůyő3&ßŢ4öĹ÷¤V^Uńńˆ˛…Â:ŐŃ٢››îu9łWzśĄŰ.Ž[făłľą˝íČ¨Ł˝ĺ†?Ë}CÚÄňĽe(™źőUŚ€ľăóśjţ Oť:ă;=čťJî œÚŮňƒ^Ű ĎtÉţŰd˙ÜĄCŽ/3W%Ŕ„łéeľÓœŐ~ÚĂÇdÚĎ=űĽËóÁ…l˘C+˛č"ľ/‡×qĘĂ}3ŤZż´K]˘OWűs|ŠöhsŒr¨°mĐ"AŽ‘ŐözËvĆĺś-4ŇÁçÜô3ŰβżýN×°VU UŤčúvdqęž˙.¤ŇŮ2ŸyĽměŽÜď„.$ űöś]`DŸIm›K—ăĄtBĂ8VBÉĆCKĽâč(„\ˆGˇĂr1ÔŁđŒ~“şö7RU_ž°Łö>úÍÔs„ܐD}{@˙Źp­KQšńVŤ]U*сó,yÁcĺŒÜUŹńçϔ&{ÚL š;qSĂĺfgwłš§×CˇÝ:[­ęˇwŤsUrÚžbĚ_üĹ_ş÷ôŃŁGf`żGa-JbĹ&Qľ&?DݞîKŁďŠŢ W pŃńń‰[—ž# •ĺ‰[Ú-ńß…M67ˇÜr››ĽyőŐź Űš26n{u?='=îÁÁař‰ČBuąŁęńý÷ľcŸÓ†ťüĚgŽÜ}üóšď´ÖŤuj~§ăC4[[Ł0 ˙,é5ŃĺłgOÝóĐöhš‚Ez vvv]°ćý÷ťíxőŐWÝo„†"óAŠ‘˝ďsráÇÚĐ_ ÚéwćřěÄ­GCti;ĆŃ÷ißžćşA…´ÍϞů@‘§×Ëܲz÷÷Üď˜ßnăžçîî÷š*ô¤ —î§ílôðž’+ŽCŰ[oŤëq]°(|>bŕ(m¸ß^÷]ý =9kš>Œś†Ú֐á/oűáşu™ľ|;ŃQŚDbVí_Ďźœ8~ź•á§ĺ|[†6ă•XwűrĂv`Vż~ÉoĽĆßĎ2ü”Ćaăźń°„ăżbb9í۸ßfUdq-(ý{ăÎ2 Çlߋ†`ŇP™î‡'óÇ/łĐŻ›M¤ŽížKëŘľ6:ŚkűŁmێŘÜ1‡ťGn}ů’ĎNa×kŰ!CŰćĐĺîĄmÓă}ˇý™Ż`ŻŰ[;}ła—Ý,:ś˙Ŕţ›Űaç¨7ĘSłi—nŘ}ĂSťüîžéş@I˙Wwď—íŘ}žáöŽÉ‡Űf{gßěÚĹGYű\Ÿ˙ćΖێíüÄmÇY6H溁’ÍlőyĺÄóűĹőYqšędŒ¤*ń˛†=‡*Βa‹'tóýĽoç}Âń–Šóú˙eۗ¸U÷ůŕƒ÷˙Ď~đƒ˙ýÎ;ď|lĆ9}ŕÍäp&iđ§L–-jˇY,ôS˙˜6}Ö2ÓŹěgeŐÝߍ ˙Ěť4fvř'K.ëۑצĽ÷…ůjQtěĺCű÷{öúď}őŤ_ÝúÎwžóˇ?÷šĎýÚööö߲>oŮ/î#ű…WëŠoŘUŕ$żýőŤ™Op;d…űńmŤóŰvLś‡[fÔ󍅔lWŞÉl§Ľ=äaŽŐQm;cŸ}ř‘ůđŻţĘuśvmg­Šc´gÓ:HŐRŁBźźŹ:ŘÝí,îÔĽ;vfňôÜó¸„ôWŕÚů ‘ĎĽř0ť ńę¨QĐÇďűđŒŻŕáćzf~˜˝Öžšˇdň¤óZ§—:ë:UđŚuŚĐIßuęůj6]׌K;y …Şg8îŇAB=׉öŸďÓňg4šx`1&[ńžžs6­<ŁęEÝV˝Ë kVŠę…ÎÉXĹEòv¨D¤ĄlO\¨Űë„ŔĹF5dRzFl<đ§Ç R:¤SŹcB +Ëşœzé_?ěRËwŢŮ×Irű~˜Óž’W>Ȥ˝ ÓęöMŠ!Ěô| ^r•“\ˇôȌ ˙^ß™ě\mvA/áUŸm>Žž”&ˇ{â v˛Œď8ŸĽYŽ'ŸŻ{ę§ö}oéľoˇŞa‡‡ĘÂű)qZüÇK€çëž1¨+ţčö` jU›&VŢŮ÷÷(TZmšę\ƒŽkšď¤śCóu[ěk…Ď_î'žŠOdQÚoÇiUĺŚ,c°>—Ć}ţĆŃĐ[ş˙ţţžűJˇ]ƒ^{íłîŇmć‡S•mżâéOۨĄĘb…MóĽvîŃýő–ĹĘB''Ç~ˆ;74˘,hH5…‹b˘2jB•Ęü÷Ęśâç#wòÜsŐ6ů HY¨ldĚÇÝcčľŐkŇëő]đg8ܨ*:4T^đŞ?˙Ü5őƒsXĽúáNSkÇË4ÜŰÔžÚL˝]1\œçÉÉĎŐÉ—“ždÝÄ׿ţćˇűˇ|EVCÝ~=Ú7ŰÚÜr$‰ű_Žjî`ËdÝa˜ĽŃ‘PdţY´žsě-Sń'ě…)đVhđćřšç>ҕˇĂ#÷|:g]wŒĽˇaŰŕj˙Ú}ƒBU€ŠsŐJăŤpfîD¨‘˙ź„“bŔ¸  ÇŕO¨ÚZɗ ™üqťEŘ?.C‰?DŰ>ńœpéĂrd?ĎíÇćťú ťŻűłŸţô§ö˝ď}ď'ď˝÷ŢËd9ýz¨Ŕˉ9橇|ҀO= 4/č3+ô3/ t-ĄYÇ7'[`ŢŹŰM./š–'ÓŇŰů”iőĺÔ+Ô —-s>04ëq™_“n™×›_7p]– ŞĚťOQ[î˘@Í(üšé}J3;4m™yťLč§ÉíŚóśŽPɲ់6ł.gMŤzL¸Ěg,S_.^ś’żtz=ô“ŢĎ4œ> apÓ,Z)NOƒ9qţ(ů+j÷›U˝'­ř3o9cV[áçÚB?˛Î€ÉU‡âĺźPZőǘóáiÁŸě‚őçľíőź›žÖ„~ŔMŐ4źRɞÎ+jËĎzŤčIç×çŐC?óÖżČĺźëÓn7ˇ´śYŸtPˋ楷ă͒ééeÝEóSEmůtš™ţćN ţÔˇÝLY6f Ápű-ü™Ž™üIçÍ ţ¤ˇë×gý™ .ç|ć=yˇ›Îť”Ť™,[ů'˝˝Ę*@M˙ꏛ7¸Ţd{/BđÜT— ţL›V4¸^é4ů3fuŐ}ndčGŽ*d˛Hř§>í˛ĄŸi—Ó‚;M‡řšľŢ‹śš~}Â?ŕŚY4ôsŃő‹B7 ů•^Ś×Ë]Îť>oZ“y+q•“lÁůMĂ?ÓŚ-Z ( î4­ě3/Г™‹M!ünŠEB,ł2ó*ĺĚlV¸gZ…Ÿe./šVż>íśYpţJ\u¸dŐáŸôú2 ™Uá'WŸ?kůYaŚĚ¸kĘ ŚĎ Ű4 ÍŤ4í1š|šV'2sn›çŻĚu…PúŤIhي@ńz=ԓĎYnŢm3gž™łl†ŔUY&ź2/ôłHľŸiˇĽ˜˛Ě˘ĄžEŞü4šÝtŢZ\g˜dŐŇëMĂAůŒőäsÖ?/ř3kÚźéMŤvŮŕĘEŐ~fM›ŕ‘béŤŹěscŤü¤nB€dŐŐŇëËĚĎŢď˘m›5­ÉźË fYW@eŃJ8ӂ5MB:ËTîY$üÓävÓykwSB"‹d.bŤ~}™jA‹ÜwÚýf-c˜pÓ-R §4Í*ŐŻ—ŚYpç2Cy5 (5w%nZđdŐVq˝Iđ§É´&ónƒËVűŠOťLČg™ëMn7wĽZććšLőŸúíË\ŸŚ4ł“g„xŔ}´LHfZЧÉp_óć­"đ3kZ“yWî&‡UVUý§~{Ńa–˝=kÚ"ónşE†úš5m‘Űˁ–šÝtŢľš‰RëŞţłČź&ˇîŤUŚM[GhÚíYӚ̻V7=ř#Ť ˙Źăö"ÓîšrÉeVţYćöŹiMć]ťŰü‘e†ĚşÎ€O“ĐÁ pWŹ3ü3mÚş?Mć_ťŰü‰.[ýgÚ´U-sŃôŚónŤeĂ4˄}–]fÖ´&ón”Űü‘EĂ?łŚ/řYfúEóî’e‚5M§_6Üs'B?rƒ?˛lUu ßu~ €ŤśŠĚ:+-2mŢôŚóoœŰü‘U†V9ý˘yŤźŔuX&$łÎ*@ËNo:˙FşÍÁÉ.ąĚŞ=‹wů€ťf‘đLšâyË~š.s#Ýöŕ\&üłŽyË,p×4 ŐŹ:tŃźE–šąîBđ'Zg¨ÉüŚËŹóţëvٰĚ*9÷:đÝĽŕŹŞ Ď:B>„zŔ}ąh°fÝa e–ťńîZđGV=×Mҋ X•ŤĂŹ:¤sďB?rƒ?˛H(f]ËŽâ~ˇŐ˛!›Eeo…ťü‘eÂ6ˇiř.ÂD`UŽ3łŽaÁVqŸď.˘Ť­úţwÍeĂ7~jîCđG.ÄYWˆ‡p¸+Ö°šĚzďtčGîKđGV´!°°Ť ëÜůЏܧŕO´Žŕa €ĹŹ#œs/?Ń} ţDWÖ! áÜŤŔOtŸƒ?Ą€Űé^~"‚?“Ül÷:ě“"ř3 €›…ŔO ÁŸf\-‚> řł<Â@ŤAČg փPŔ$Â=+Fđçî lš"„snĄÜ¸uţˇÁŕ"řÜB€[ˆŕp ün!‚?Ŕ-ô×ů7öt÷ĐIENDŽB`‚bazaar-org-bazaar-b6e9a65/scripts/000077500000000000000000000000001522167256300171205ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/scripts/countries.json.in000066400000000000000000005676701522167256300224600ustar00rootroot00000000000000{"features":[ { "N": "Fiji", "I": "FJ", "C": [[[[180, -16.067], [180, -16.555], [179.364, -16.801], [178.725, -17.012], [178.597, -16.639], [179.097, -16.434], [179.414, -16.379], [180, -16.067]]], [[[178.126, -17.505], [178.374, -17.34], [178.718, -17.628], [178.553, -18.151], [177.933, -18.288], [177.381, -18.164], [177.285, -17.725], [177.671, -17.381], [178.126, -17.505]]], [[[-179.793, -16.021], [-179.917, -16.502], [-180, -16.555], [-180, -16.067], [-179.793, -16.021]]]] }, { "N": "Tanzania", "I": "TZ", "C": [[[[33.904, -0.95], [34.073, -1.06], [37.699, -3.097], [37.767, -3.677], [39.202, -4.677], [38.741, -5.909], [38.8, -6.476], [39.44, -6.84], [39.47, -7.1], [39.195, -7.704], [39.252, -8.008], [39.187, -8.486], [39.536, -9.112], [39.95, -10.098], [40.317, -10.317], [40.317, -10.317], [39.521, -10.897], [38.428, -11.285], [37.828, -11.269], [37.471, -11.569], [36.775, -11.595], [36.514, -11.721], [35.312, -11.439], [34.56, -11.52], [34.28, -10.16], [33.941, -9.694], [33.74, -9.417], [32.759, -9.231], [32.192, -8.93], [31.556, -8.762], [31.158, -8.595], [30.74, -8.34], [30.74, -8.34], [30.2, -7.08], [29.62, -6.52], [29.42, -5.94], [29.52, -5.42], [29.34, -4.5], [29.754, -4.452], [30.116, -4.09], [30.506, -3.569], [30.752, -3.359], [30.743, -3.034], [30.528, -2.808], [30.47, -2.414], [30.47, -2.414], [30.758, -2.287], [30.816, -1.699], [30.419, -1.135], [30.77, -1.015], [31.866, -1.027], [33.904, -0.95]]]] }, { "N": "Western Sahara", "I": "EH", "C": [[[[-8.666, 27.656], [-8.665, 27.589], [-8.684, 27.396], [-8.687, 25.881], [-11.969, 25.933], [-11.937, 23.375], [-12.874, 23.285], [-13.119, 22.771], [-12.929, 21.327], [-16.845, 21.333], [-17.063, 21], [-17.02, 21.422], [-17.003, 21.421], [-14.751, 21.501], [-14.631, 21.861], [-14.221, 22.31], [-13.891, 23.691], [-12.501, 24.77], [-12.031, 26.031], [-11.718, 26.104], [-11.393, 26.883], [-10.551, 26.991], [-10.189, 26.861], [-9.735, 26.861], [-9.413, 27.088], [-8.795, 27.121], [-8.818, 27.656], [-8.666, 27.656]]]] }, { "N": "Canada", "I": "CA", "C": [[[[-122.84, 49], [-122.974, 49.003], [-124.91, 49.985], [-125.625, 50.417], [-127.436, 50.831], [-127.993, 51.716], [-127.85, 52.33], [-129.13, 52.755], [-129.305, 53.562], [-130.515, 54.288], [-130.536, 54.803], [-130.536, 54.803], [-129.98, 55.285], [-130.008, 55.916], [-131.708, 56.552], [-132.73, 57.693], [-133.356, 58.41], [-134.271, 58.861], [-134.945, 59.271], [-135.476, 59.788], [-136.48, 59.464], [-137.452, 58.905], [-138.341, 59.562], [-139.039, 60], [-140.013, 60.277], [-140.998, 60.306], [-140.993, 66], [-140.986, 69.712], [-140.986, 69.712], [-139.121, 69.471], [-137.546, 68.99], [-136.504, 68.898], [-135.626, 69.315], [-134.415, 69.627], [-132.929, 69.505], [-131.431, 69.945], [-129.795, 70.194], [-129.108, 69.779], [-128.362, 70.013], [-128.138, 70.484], [-127.447, 70.377], [-125.756, 69.481], [-124.425, 70.158], [-124.29, 69.4], [-123.061, 69.564], [-122.683, 69.856], [-121.472, 69.798], [-119.943, 69.378], [-117.603, 69.011], [-116.226, 68.842], [-115.247, 68.906], [-113.898, 68.399], [-115.305, 67.903], [-113.497, 67.688], [-110.798, 67.806], [-109.946, 67.981], [-108.88, 67.381], [-107.792, 67.887], [-108.813, 68.312], [-108.167, 68.654], [-106.95, 68.7], [-106.15, 68.8], [-105.343, 68.561], [-104.338, 68.018], [-103.221, 68.098], [-101.454, 67.647], [-99.902, 67.806], [-98.443, 67.782], [-98.559, 68.404], [-97.669, 68.579], [-96.12, 68.239], [-96.126, 67.293], [-95.489, 68.091], [-94.685, 68.064], [-94.233, 69.069], [-95.304, 69.686], [-96.471, 70.09], [-96.391, 71.195], [-95.209, 71.921], [-93.89, 71.76], [-92.878, 71.319], [-91.52, 70.191], [-92.407, 69.7], [-90.547, 69.498], [-90.552, 68.475], [-89.215, 69.259], [-88.02, 68.615], [-88.317, 67.873], [-87.35, 67.199], [-86.306, 67.921], [-85.577, 68.785], [-85.522, 69.882], [-84.101, 69.805], [-82.623, 69.658], [-81.28, 69.162], [-81.22, 68.666], [-81.964, 68.133], [-81.259, 67.597], [-81.387, 67.111], [-83.345, 66.412], [-84.735, 66.257], [-85.769, 66.558], [-86.068, 66.056], [-87.031, 65.213], [-87.323, 64.776], [-88.483, 64.099], [-89.914, 64.033], [-90.704, 63.61], [-90.77, 62.96], [-91.933, 62.835], [-93.157, 62.025], [-94.242, 60.899], [-94.629, 60.11], [-94.685, 58.949], [-93.215, 58.782], [-92.765, 57.846], [-92.297, 57.087], [-90.898, 57.285], [-89.04, 56.852], [-88.04, 56.472], [-87.324, 55.999], [-86.071, 55.724], [-85.012, 55.303], [-83.361, 55.245], [-82.273, 55.148], [-82.436, 54.282], [-82.125, 53.277], [-81.401, 52.158], [-79.913, 51.208], [-79.143, 51.534], [-78.602, 52.562], [-79.124, 54.141], [-79.83, 54.668], [-78.229, 55.136], [-77.096, 55.837], [-76.541, 56.534], [-76.623, 57.203], [-77.302, 58.052], [-78.517, 58.805], [-77.337, 59.853], [-77.773, 60.758], [-78.107, 62.32], [-77.411, 62.551], [-75.696, 62.278], [-74.668, 62.181], [-73.84, 62.444], [-72.909, 62.105], [-71.677, 61.525], [-71.374, 61.137], [-69.59, 61.061], [-69.62, 60.221], [-69.288, 58.957], [-68.375, 58.801], [-67.65, 58.212], [-66.202, 58.767], [-65.245, 59.871], [-64.584, 60.336], [-63.805, 59.443], [-62.502, 58.167], [-61.397, 56.967], [-61.799, 56.339], [-60.469, 55.775], [-59.57, 55.204], [-57.975, 54.945], [-57.333, 54.627], [-56.937, 53.78], [-56.158, 53.647], [-55.756, 53.27], [-55.683, 52.147], [-56.409, 51.771], [-57.127, 51.42], [-58.775, 51.064], [-60.033, 50.243], [-61.724, 50.08], [-63.863, 50.291], [-65.363, 50.298], [-66.399, 50.229], [-67.236, 49.512], [-68.511, 49.068], [-69.954, 47.745], [-71.105, 46.822], [-70.255, 46.986], [-68.65, 48.3], [-66.552, 49.133], [-65.056, 49.233], [-64.171, 48.742], [-65.115, 48.071], [-64.799, 46.993], [-64.472, 46.238], [-63.173, 45.739], [-61.521, 45.884], [-60.518, 47.008], [-60.449, 46.283], [-59.803, 45.92], [-61.04, 45.265], [-63.255, 44.67], [-64.247, 44.266], [-65.364, 43.545], [-66.123, 43.619], [-66.162, 44.465], [-64.425, 45.292], [-66.026, 45.259], [-67.137, 45.138], [-67.791, 45.703], [-67.79, 47.066], [-68.234, 47.355], [-68.905, 47.185], [-69.237, 47.448], [-70, 46.693], [-70.305, 45.915], [-70.66, 45.46], [-71.085, 45.305], [-71.405, 45.255], [-71.505, 45.008], [-73.348, 45.007], [-74.867, 45], [-75.318, 44.816], [-76.375, 44.096], [-76.5, 44.018], [-76.82, 43.629], [-77.738, 43.629], [-78.72, 43.625], [-79.172, 43.466], [-79.01, 43.27], [-78.92, 42.965], [-78.939, 42.864], [-80.247, 42.366], [-81.278, 42.209], [-82.439, 41.675], [-82.69, 41.675], [-83.03, 41.833], [-83.142, 41.976], [-83.12, 42.08], [-82.9, 42.43], [-82.43, 42.98], [-82.138, 43.571], [-82.338, 44.44], [-82.551, 45.348], [-83.593, 45.817], [-83.47, 45.995], [-83.616, 46.117], [-83.891, 46.117], [-84.092, 46.275], [-84.142, 46.512], [-84.337, 46.409], [-84.605, 46.44], [-84.544, 46.539], [-84.779, 46.637], [-84.876, 46.9], [-85.652, 47.22], [-86.462, 47.553], [-87.44, 47.94], [-88.378, 48.303], [-89.273, 48.02], [-89.6, 48.01], [-90.83, 48.27], [-91.64, 48.14], [-92.61, 48.45], [-93.631, 48.609], [-94.329, 48.671], [-94.64, 48.84], [-94.818, 49.389], [-95.156, 49.384], [-95.159, 49], [-97.229, 49.001], [-100.65, 49], [-104.048, 49], [-107.05, 49], [-110.05, 49], [-113, 49], [-116.048, 49], [-117.031, 49], [-120, 49], [-122.84, 49]]], [[[-83.994, 62.453], [-83.25, 62.914], [-81.877, 62.905], [-81.898, 62.711], [-83.069, 62.159], [-83.775, 62.182], [-83.994, 62.453]]], [[[-79.776, 72.803], [-80.876, 73.333], [-80.834, 73.693], [-80.353, 73.76], [-78.064, 73.652], [-76.34, 73.103], [-76.251, 72.826], [-77.314, 72.856], [-78.392, 72.877], [-79.486, 72.742], [-79.776, 72.803]]], [[[-80.315, 62.086], [-79.929, 62.386], [-79.52, 62.364], [-79.266, 62.159], [-79.658, 61.633], [-80.1, 61.718], [-80.362, 62.016], [-80.315, 62.086]]], [[[-93.613, 74.98], [-94.157, 74.592], [-95.609, 74.667], [-96.821, 74.928], [-96.289, 75.378], [-94.851, 75.647], [-93.978, 75.296], [-93.613, 74.98]]], [[[-93.84, 77.52], [-94.296, 77.491], [-96.17, 77.555], [-96.436, 77.835], [-94.423, 77.82], [-93.721, 77.634], [-93.84, 77.52]]], [[[-96.754, 78.766], [-95.559, 78.418], [-95.83, 78.057], [-97.31, 77.851], [-98.124, 78.083], [-98.553, 78.458], [-98.632, 78.872], [-97.337, 78.832], [-96.754, 78.766]]], [[[-88.15, 74.392], [-89.765, 74.516], [-92.422, 74.838], [-92.768, 75.387], [-92.89, 75.883], [-93.894, 76.319], [-95.962, 76.441], [-97.121, 76.751], [-96.745, 77.161], [-94.684, 77.098], [-93.574, 76.776], [-91.605, 76.779], [-90.742, 76.45], [-90.97, 76.074], [-89.822, 75.848], [-89.187, 75.61], [-87.838, 75.566], [-86.379, 75.482], [-84.79, 75.699], [-82.753, 75.784], [-81.129, 75.714], [-80.058, 75.337], [-79.834, 74.923], [-80.458, 74.657], [-81.949, 74.442], [-83.229, 74.564], [-86.097, 74.41], [-88.15, 74.392]]], [[[-111.264, 78.153], [-109.854, 77.996], [-110.187, 77.697], [-112.051, 77.409], [-113.534, 77.732], [-112.725, 78.051], [-111.264, 78.153]]], [[[-110.964, 78.804], [-109.663, 78.602], [-110.881, 78.407], [-112.542, 78.408], [-112.526, 78.551], [-111.5, 78.85], [-110.964, 78.804]]], [[[-55.6, 51.317], [-56.134, 50.687], [-56.796, 49.812], [-56.143, 50.15], [-55.471, 49.936], [-55.822, 49.587], [-54.935, 49.313], [-54.474, 49.557], [-53.477, 49.249], [-53.786, 48.517], [-53.086, 48.688], [-52.959, 48.157], [-52.648, 47.536], [-53.069, 46.655], [-53.521, 46.618], [-54.179, 46.807], [-53.962, 47.625], [-54.24, 47.752], [-55.401, 46.885], [-55.997, 46.92], [-55.291, 47.39], [-56.251, 47.633], [-57.325, 47.573], [-59.266, 47.603], [-59.419, 47.899], [-58.797, 48.252], [-59.232, 48.523], [-58.392, 49.126], [-57.359, 50.718], [-56.739, 51.287], [-55.871, 51.632], [-55.407, 51.588], [-55.6, 51.317]]], [[[-83.883, 65.11], [-82.788, 64.767], [-81.642, 64.455], [-81.553, 63.98], [-80.817, 64.057], [-80.103, 63.726], [-80.991, 63.411], [-82.547, 63.652], [-83.109, 64.102], [-84.1, 63.57], [-85.523, 63.052], [-85.867, 63.637], [-87.222, 63.541], [-86.353, 64.036], [-86.225, 64.823], [-85.884, 65.739], [-85.161, 65.657], [-84.976, 65.218], [-84.464, 65.372], [-83.883, 65.11]]], [[[-78.771, 72.352], [-77.825, 72.75], [-75.606, 72.244], [-74.229, 71.767], [-74.099, 71.331], [-72.242, 71.557], [-71.2, 70.92], [-68.786, 70.525], [-67.915, 70.122], [-66.969, 69.186], [-68.805, 68.72], [-66.45, 68.067], [-64.862, 67.848], [-63.425, 66.928], [-61.852, 66.862], [-62.163, 66.16], [-63.918, 64.999], [-65.149, 65.426], [-66.721, 66.388], [-68.015, 66.263], [-68.141, 65.69], [-67.09, 65.108], [-65.732, 64.648], [-65.32, 64.383], [-64.669, 63.393], [-65.014, 62.674], [-66.275, 62.945], [-68.783, 63.746], [-67.37, 62.884], [-66.328, 62.28], [-66.166, 61.931], [-68.877, 62.33], [-71.023, 62.911], [-72.235, 63.398], [-71.886, 63.68], [-73.378, 64.194], [-74.834, 64.679], [-74.819, 64.389], [-77.71, 64.23], [-78.556, 64.573], [-77.897, 65.309], [-76.018, 65.327], [-73.96, 65.455], [-74.294, 65.812], [-73.945, 66.311], [-72.651, 67.285], [-72.926, 67.727], [-73.312, 68.069], [-74.843, 68.555], [-76.869, 68.895], [-76.229, 69.148], [-77.287, 69.77], [-78.169, 69.826], [-78.957, 70.167], [-79.492, 69.872], [-81.305, 69.743], [-84.945, 69.967], [-87.06, 70.26], [-88.682, 70.411], [-89.513, 70.762], [-88.468, 71.218], [-89.888, 71.223], [-90.205, 72.235], [-89.437, 73.129], [-88.408, 73.538], [-85.826, 73.804], [-86.562, 73.157], [-85.774, 72.534], [-84.85, 73.34], [-82.316, 73.751], [-80.6, 72.717], [-80.749, 72.062], [-78.771, 72.352]]], [[[-94.504, 74.135], [-92.42, 74.1], [-90.51, 73.857], [-92.004, 72.966], [-93.196, 72.772], [-94.269, 72.025], [-95.41, 72.062], [-96.034, 72.94], [-96.018, 73.437], [-95.496, 73.862], [-94.504, 74.135]]], [[[-122.855, 76.117], [-122.855, 76.117], [-121.158, 76.865], [-119.104, 77.512], [-117.57, 77.498], [-116.199, 77.645], [-116.336, 76.877], [-117.106, 76.53], [-118.04, 76.481], [-119.899, 76.053], [-121.5, 75.9], [-122.855, 76.117]]], [[[-132.71, 54.04], [-131.75, 54.12], [-132.049, 52.985], [-131.179, 52.18], [-131.578, 52.182], [-132.18, 52.64], [-132.55, 53.1], [-133.055, 53.411], [-133.24, 53.851], [-133.18, 54.17], [-132.71, 54.04]]], [[[-105.492, 79.302], [-103.529, 79.165], [-100.825, 78.8], [-100.06, 78.325], [-99.671, 77.908], [-101.304, 78.019], [-102.95, 78.343], [-105.176, 78.38], [-104.21, 78.677], [-105.42, 78.918], [-105.492, 79.302]]], [[[-123.51, 48.51], [-124.013, 48.371], [-125.655, 48.825], [-125.955, 49.18], [-126.85, 49.53], [-127.03, 49.815], [-128.059, 49.995], [-128.445, 50.539], [-128.358, 50.771], [-127.309, 50.553], [-126.695, 50.401], [-125.755, 50.295], [-125.415, 49.95], [-124.921, 49.475], [-123.923, 49.062], [-123.51, 48.51]]], [[[-121.538, 74.449], [-120.11, 74.241], [-117.556, 74.186], [-116.584, 73.896], [-115.511, 73.475], [-116.768, 73.223], [-119.22, 72.52], [-120.46, 71.82], [-120.46, 71.384], [-123.092, 70.902], [-123.62, 71.34], [-125.929, 71.869], [-125.5, 72.292], [-124.807, 73.023], [-123.94, 73.68], [-124.918, 74.293], [-121.538, 74.449]]], [[[-107.819, 75.846], [-106.929, 76.013], [-105.881, 75.969], [-105.705, 75.48], [-106.313, 75.005], [-109.7, 74.85], [-112.223, 74.417], [-113.744, 74.394], [-113.871, 74.72], [-111.794, 75.162], [-116.312, 75.043], [-117.71, 75.222], [-116.346, 76.199], [-115.405, 76.479], [-112.591, 76.141], [-110.814, 75.549], [-109.067, 75.473], [-110.497, 76.43], [-109.581, 76.794], [-108.549, 76.678], [-108.211, 76.202], [-107.819, 75.846]]], [[[-106.523, 73.076], [-105.402, 72.673], [-104.775, 71.698], [-104.465, 70.993], [-102.785, 70.498], [-100.981, 70.024], [-101.089, 69.584], [-102.731, 69.504], [-102.093, 69.12], [-102.43, 68.753], [-104.24, 68.91], [-105.96, 69.18], [-107.123, 69.119], [-109, 68.78], [-111.534, 68.63], [-113.313, 68.536], [-113.855, 69.007], [-115.22, 69.28], [-116.108, 69.168], [-117.34, 69.96], [-116.675, 70.067], [-115.131, 70.237], [-113.721, 70.192], [-112.416, 70.366], [-114.35, 70.6], [-116.487, 70.52], [-117.905, 70.541], [-118.432, 70.909], [-116.113, 71.309], [-117.656, 71.295], [-119.402, 71.559], [-118.563, 72.308], [-117.866, 72.706], [-115.189, 73.315], [-114.167, 73.121], [-114.666, 72.653], [-112.441, 72.955], [-111.05, 72.45], [-109.92, 72.961], [-109.007, 72.633], [-108.188, 71.651], [-107.686, 72.065], [-108.396, 73.09], [-107.516, 73.236], [-106.523, 73.076]]], [[[-100.438, 72.706], [-101.54, 73.36], [-100.356, 73.844], [-99.164, 73.633], [-97.38, 73.76], [-97.12, 73.47], [-98.054, 72.991], [-96.54, 72.56], [-96.72, 71.66], [-98.36, 71.273], [-99.323, 71.356], [-100.015, 71.738], [-102.5, 72.51], [-102.48, 72.83], [-100.438, 72.706]]], [[[-106.6, 73.6], [-105.26, 73.64], [-104.5, 73.42], [-105.38, 72.76], [-106.94, 73.46], [-106.6, 73.6]]], [[[-98.5, 76.72], [-97.736, 76.257], [-97.704, 75.743], [-98.16, 75], [-99.809, 74.897], [-100.884, 75.057], [-100.863, 75.641], [-102.502, 75.564], [-102.566, 76.337], [-101.49, 76.305], [-99.983, 76.646], [-98.577, 76.589], [-98.5, 76.72]]], [[[-96.016, 80.602], [-95.323, 80.907], [-94.298, 80.977], [-94.735, 81.206], [-92.41, 81.257], [-91.133, 80.723], [-89.45, 80.509], [-87.81, 80.32], [-87.02, 79.66], [-85.814, 79.337], [-87.188, 79.039], [-89.035, 78.287], [-90.804, 78.215], [-92.877, 78.343], [-93.951, 78.751], [-93.936, 79.114], [-93.145, 79.38], [-94.974, 79.372], [-96.076, 79.705], [-96.71, 80.158], [-96.016, 80.602]]], [[[-91.587, 81.894], [-90.1, 82.085], [-88.932, 82.118], [-86.97, 82.28], [-85.5, 82.652], [-84.26, 82.6], [-83.18, 82.32], [-82.42, 82.86], [-81.1, 83.02], [-79.307, 83.131], [-76.25, 83.172], [-75.719, 83.064], [-72.832, 83.233], [-70.666, 83.17], [-68.5, 83.106], [-65.827, 83.028], [-63.68, 82.9], [-61.85, 82.629], [-61.894, 82.362], [-64.334, 81.928], [-66.753, 81.725], [-67.658, 81.501], [-65.48, 81.507], [-67.84, 80.9], [-69.47, 80.617], [-71.18, 79.8], [-73.243, 79.634], [-73.88, 79.43], [-76.908, 79.323], [-75.529, 79.198], [-76.22, 79.019], [-75.393, 78.526], [-76.344, 78.183], [-77.889, 77.9], [-78.363, 77.509], [-79.76, 77.21], [-79.62, 76.983], [-77.911, 77.022], [-77.889, 76.778], [-80.561, 76.178], [-83.174, 76.454], [-86.112, 76.299], [-87.6, 76.42], [-89.491, 76.472], [-89.616, 76.952], [-87.767, 77.178], [-88.26, 77.9], [-87.65, 77.97], [-84.976, 77.539], [-86.34, 78.18], [-87.962, 78.372], [-87.152, 78.759], [-85.379, 78.997], [-85.095, 79.345], [-86.507, 79.736], [-86.932, 80.251], [-84.198, 80.208], [-83.409, 80.1], [-81.848, 80.464], [-84.1, 80.58], [-87.599, 80.516], [-89.367, 80.856], [-90.2, 81.26], [-91.368, 81.553], [-91.587, 81.894]]], [[[-75.216, 67.444], [-75.866, 67.149], [-76.987, 67.099], [-77.236, 67.588], [-76.812, 68.149], [-75.895, 68.287], [-75.115, 68.01], [-75.103, 67.582], [-75.216, 67.444]]], [[[-96.257, 69.49], [-95.648, 69.108], [-96.27, 68.757], [-97.617, 69.06], [-98.432, 68.951], [-99.797, 69.4], [-98.917, 69.71], [-98.218, 70.144], [-97.157, 69.86], [-96.557, 69.68], [-96.257, 69.49]]], [[[-64.519, 49.873], [-64.173, 49.957], [-62.858, 49.706], [-61.836, 49.289], [-61.806, 49.105], [-62.293, 49.087], [-63.589, 49.401], [-64.519, 49.873]]], [[[-64.015, 47.036], [-63.664, 46.55], [-62.939, 46.416], [-62.012, 46.443], [-62.504, 46.033], [-62.874, 45.968], [-64.143, 46.393], [-64.393, 46.727], [-64.015, 47.036]]]] }, { "N": "United States", "I": "US", "C": [[[[-155.402, 20.08], [-155.225, 19.993], [-155.062, 19.859], [-154.807, 19.509], [-154.831, 19.453], [-155.222, 19.24], [-155.542, 19.083], [-155.688, 18.916], [-155.937, 19.059], [-155.908, 19.339], [-156.073, 19.703], [-156.024, 19.814], [-155.85, 19.977], [-155.919, 20.174], [-155.861, 20.267], [-155.785, 20.249], [-155.402, 20.08]]], [[[-155.996, 20.764], [-156.079, 20.644], [-156.414, 20.572], [-156.587, 20.783], [-156.702, 20.864], [-156.711, 20.927], [-156.613, 21.012], [-156.257, 20.917], [-155.996, 20.764]]], [[[-156.758, 21.177], [-156.789, 21.069], [-157.325, 21.098], [-157.25, 21.22], [-156.758, 21.177]]], [[[-158.025, 21.717], [-157.942, 21.653], [-157.653, 21.322], [-157.707, 21.264], [-157.779, 21.277], [-158.127, 21.312], [-158.254, 21.539], [-158.293, 21.579], [-158.025, 21.717]]], [[[-159.366, 22.215], [-159.345, 21.982], [-159.464, 21.883], [-159.801, 22.065], [-159.749, 22.138], [-159.596, 22.236], [-159.366, 22.215]]], [[[-166.468, 60.384], [-165.674, 60.294], [-165.579, 59.91], [-166.193, 59.754], [-166.848, 59.941], [-167.455, 60.213], [-166.468, 60.384]]], [[[-153.229, 57.969], [-152.565, 57.901], [-152.141, 57.591], [-153.006, 57.116], [-154.005, 56.735], [-154.516, 56.993], [-154.671, 57.461], [-153.763, 57.817], [-153.229, 57.969]]], [[[-140.986, 69.712], [-140.986, 69.712], [-140.993, 66], [-140.998, 60.306], [-140.013, 60.277], [-139.039, 60], [-138.341, 59.562], [-137.452, 58.905], [-136.48, 59.464], [-135.476, 59.788], [-134.945, 59.271], [-134.271, 58.861], [-133.356, 58.41], [-132.73, 57.693], [-131.708, 56.552], [-130.008, 55.916], [-129.98, 55.285], [-130.536, 54.803], [-130.536, 54.803], [-130.536, 54.803], [-131.086, 55.179], [-131.967, 55.498], [-132.25, 56.37], [-133.539, 57.179], [-134.078, 58.123], [-135.038, 58.188], [-136.628, 58.212], [-137.8, 58.5], [-139.868, 59.538], [-140.825, 59.728], [-142.574, 60.084], [-143.959, 59.999], [-145.926, 60.459], [-147.114, 60.885], [-148.224, 60.673], [-148.018, 59.978], [-148.571, 59.914], [-149.728, 59.706], [-150.608, 59.368], [-151.716, 59.156], [-151.859, 59.745], [-151.41, 60.726], [-150.347, 61.034], [-150.621, 61.284], [-151.896, 60.727], [-152.578, 60.062], [-154.019, 59.35], [-153.288, 58.865], [-154.232, 58.146], [-155.307, 57.728], [-156.308, 57.423], [-156.556, 56.98], [-158.117, 56.464], [-158.433, 55.994], [-159.603, 55.567], [-160.29, 55.644], [-161.223, 55.365], [-162.238, 55.024], [-163.069, 54.69], [-164.786, 54.404], [-164.942, 54.572], [-163.848, 55.039], [-162.87, 55.348], [-161.804, 55.895], [-160.564, 56.008], [-160.071, 56.418], [-158.684, 57.017], [-158.461, 57.217], [-157.723, 57.57], [-157.55, 58.328], [-157.042, 58.919], [-158.195, 58.616], [-158.517, 58.788], [-159.059, 58.424], [-159.712, 58.931], [-159.981, 58.573], [-160.355, 59.071], [-161.355, 58.671], [-161.969, 58.672], [-162.055, 59.267], [-161.874, 59.634], [-162.518, 59.99], [-163.818, 59.798], [-164.662, 60.267], [-165.346, 60.507], [-165.351, 61.074], [-166.121, 61.5], [-165.734, 62.075], [-164.919, 62.633], [-164.563, 63.146], [-163.753, 63.219], [-163.067, 63.059], [-162.261, 63.542], [-161.534, 63.456], [-160.773, 63.766], [-160.958, 64.223], [-161.518, 64.403], [-160.778, 64.789], [-161.392, 64.777], [-162.453, 64.559], [-162.758, 64.339], [-163.546, 64.559], [-164.961, 64.447], [-166.425, 64.687], [-166.845, 65.089], [-168.111, 65.67], [-166.705, 66.088], [-164.475, 66.577], [-163.653, 66.577], [-163.789, 66.077], [-161.678, 66.116], [-162.49, 66.736], [-163.72, 67.116], [-164.431, 67.616], [-165.39, 68.043], [-166.764, 68.359], [-166.205, 68.883], [-164.431, 68.916], [-163.169, 69.371], [-162.931, 69.858], [-161.909, 70.333], [-160.935, 70.448], [-159.039, 70.892], [-158.12, 70.825], [-156.581, 71.358], [-155.068, 71.148], [-154.344, 70.696], [-153.9, 70.89], [-152.21, 70.83], [-152.27, 70.6], [-150.74, 70.43], [-149.72, 70.53], [-147.613, 70.214], [-145.69, 70.12], [-144.92, 69.99], [-143.589, 70.153], [-142.073, 69.852], [-140.986, 69.712], [-140.986, 69.712]]], [[[-171.732, 63.783], [-171.114, 63.592], [-170.491, 63.695], [-169.683, 63.431], [-168.689, 63.298], [-168.772, 63.189], [-169.529, 62.977], [-170.291, 63.194], [-170.671, 63.376], [-171.553, 63.318], [-171.791, 63.406], [-171.732, 63.783]]], [[[-122.84, 49], [-120, 49], [-117.031, 49], [-116.048, 49], [-113, 49], [-110.05, 49], [-107.05, 49], [-104.048, 49], [-100.65, 49], [-97.229, 49.001], [-95.159, 49], [-95.156, 49.384], [-94.818, 49.389], [-94.64, 48.84], [-94.329, 48.671], [-93.631, 48.609], [-92.61, 48.45], [-91.64, 48.14], [-90.83, 48.27], [-89.6, 48.01], [-89.273, 48.02], [-88.378, 48.303], [-87.44, 47.94], [-86.462, 47.553], [-85.652, 47.22], [-84.876, 46.9], [-84.779, 46.637], [-84.544, 46.539], [-84.605, 46.44], [-84.337, 46.409], [-84.142, 46.512], [-84.092, 46.275], [-83.891, 46.117], [-83.616, 46.117], [-83.47, 45.995], [-83.593, 45.817], [-82.551, 45.348], [-82.338, 44.44], [-82.138, 43.571], [-82.43, 42.98], [-82.9, 42.43], [-83.12, 42.08], [-83.142, 41.976], [-83.03, 41.833], [-82.69, 41.675], [-82.439, 41.675], [-81.278, 42.209], [-80.247, 42.366], [-78.939, 42.864], [-78.92, 42.965], [-79.01, 43.27], [-79.172, 43.466], [-78.72, 43.625], [-77.738, 43.629], [-76.82, 43.629], [-76.5, 44.018], [-76.375, 44.096], [-75.318, 44.816], [-74.867, 45], [-73.348, 45.007], [-71.505, 45.008], [-71.405, 45.255], [-71.085, 45.305], [-70.66, 45.46], [-70.305, 45.915], [-70, 46.693], [-69.237, 47.448], [-68.905, 47.185], [-68.234, 47.355], [-67.79, 47.066], [-67.791, 45.703], [-67.137, 45.138], [-66.965, 44.81], [-68.033, 44.325], [-69.06, 43.98], [-70.116, 43.684], [-70.645, 43.09], [-70.815, 42.865], [-70.825, 42.335], [-70.495, 41.805], [-70.08, 41.78], [-70.185, 42.145], [-69.885, 41.923], [-69.965, 41.637], [-70.64, 41.475], [-71.12, 41.494], [-71.86, 41.32], [-72.295, 41.27], [-72.876, 41.221], [-73.71, 40.931], [-72.241, 41.119], [-71.945, 40.93], [-73.345, 40.63], [-73.982, 40.628], [-73.952, 40.751], [-74.257, 40.474], [-73.962, 40.428], [-74.178, 39.709], [-74.906, 38.94], [-74.98, 39.196], [-75.2, 39.248], [-75.528, 39.498], [-75.32, 38.96], [-75.072, 38.782], [-75.057, 38.404], [-75.377, 38.016], [-75.94, 37.217], [-76.031, 37.257], [-75.722, 37.937], [-76.233, 38.319], [-76.35, 39.15], [-76.543, 38.718], [-76.329, 38.083], [-76.99, 38.24], [-76.302, 37.918], [-76.259, 36.966], [-75.972, 36.897], [-75.868, 36.551], [-75.727, 35.551], [-76.363, 34.809], [-77.398, 34.512], [-78.055, 33.925], [-78.554, 33.861], [-79.061, 33.494], [-79.204, 33.158], [-80.301, 32.509], [-80.865, 32.033], [-81.336, 31.44], [-81.49, 30.73], [-81.314, 30.036], [-80.98, 29.18], [-80.536, 28.472], [-80.53, 28.04], [-80.057, 26.88], [-80.088, 26.206], [-80.132, 25.817], [-80.381, 25.206], [-80.68, 25.08], [-81.172, 25.201], [-81.33, 25.64], [-81.71, 25.87], [-82.24, 26.73], [-82.705, 27.495], [-82.855, 27.886], [-82.65, 28.55], [-82.93, 29.1], [-83.71, 29.937], [-84.1, 30.09], [-85.109, 29.636], [-85.288, 29.686], [-85.773, 30.153], [-86.4, 30.4], [-87.53, 30.274], [-88.418, 30.385], [-89.18, 30.316], [-89.594, 30.16], [-89.414, 29.894], [-89.43, 29.489], [-89.218, 29.291], [-89.408, 29.16], [-89.779, 29.307], [-90.155, 29.117], [-90.88, 29.149], [-91.627, 29.677], [-92.499, 29.552], [-93.226, 29.784], [-93.848, 29.714], [-94.69, 29.48], [-95.6, 28.739], [-96.594, 28.307], [-97.14, 27.83], [-97.37, 27.38], [-97.38, 26.69], [-97.33, 26.21], [-97.14, 25.87], [-97.53, 25.84], [-98.24, 26.06], [-99.02, 26.37], [-99.3, 26.84], [-99.52, 27.54], [-100.11, 28.11], [-100.456, 28.696], [-100.958, 29.381], [-101.662, 29.779], [-102.48, 29.76], [-103.11, 28.97], [-103.94, 29.27], [-104.457, 29.572], [-104.706, 30.122], [-105.037, 30.644], [-105.632, 31.084], [-106.143, 31.4], [-106.508, 31.755], [-108.24, 31.755], [-108.242, 31.342], [-109.035, 31.342], [-111.024, 31.335], [-113.305, 32.039], [-114.815, 32.525], [-114.721, 32.721], [-115.991, 32.612], [-117.128, 32.535], [-117.296, 33.046], [-117.944, 33.621], [-118.411, 33.741], [-118.52, 34.028], [-119.081, 34.078], [-119.439, 34.348], [-120.368, 34.447], [-120.623, 34.609], [-120.744, 35.157], [-121.715, 36.162], [-122.547, 37.552], [-122.512, 37.783], [-122.953, 38.114], [-123.727, 38.952], [-123.865, 39.767], [-124.398, 40.313], [-124.179, 41.142], [-124.214, 42], [-124.533, 42.766], [-124.142, 43.708], [-124.021, 44.616], [-123.899, 45.523], [-124.08, 46.865], [-124.396, 47.72], [-124.687, 48.184], [-124.566, 48.38], [-123.12, 48.04], [-122.587, 47.096], [-122.34, 47.36], [-122.5, 48.18], [-122.84, 49]]]] }, { "N": "Kazakhstan", "I": "KZ", "C": [[[[87.36, 49.215], [86.599, 48.549], [85.768, 48.456], [85.72, 47.453], [85.164, 47.001], [83.18, 47.33], [82.459, 45.54], [81.947, 45.317], [79.966, 44.918], [80.866, 43.18], [80.18, 42.92], [80.26, 42.35], [79.644, 42.497], [79.142, 42.856], [77.658, 42.961], [76, 42.988], [75.637, 42.878], [74.213, 43.298], [73.645, 43.091], [73.49, 42.501], [71.845, 42.845], [71.186, 42.704], [70.962, 42.266], [70.389, 42.081], [69.07, 41.384], [68.632, 40.669], [68.26, 40.662], [67.986, 41.136], [66.714, 41.168], [66.511, 41.988], [66.023, 41.995], [66.098, 42.998], [64.901, 43.728], [63.186, 43.65], [62.013, 43.504], [61.058, 44.406], [60.24, 44.784], [58.69, 45.5], [58.503, 45.587], [55.929, 44.996], [55.968, 41.309], [55.455, 41.26], [54.755, 42.044], [54.079, 42.324], [52.944, 42.116], [52.502, 41.783], [52.446, 42.027], [52.692, 42.444], [52.501, 42.792], [51.342, 43.133], [50.891, 44.031], [50.339, 44.284], [50.306, 44.61], [51.279, 44.515], [51.317, 45.246], [52.167, 45.408], [53.041, 45.259], [53.221, 46.235], [53.043, 46.853], [52.042, 46.805], [51.192, 47.049], [50.034, 46.609], [49.101, 46.399], [48.593, 46.561], [48.695, 47.076], [48.057, 47.744], [47.315, 47.716], [46.466, 48.394], [47.044, 49.152], [46.752, 49.356], [47.549, 50.455], [48.578, 49.875], [48.702, 50.605], [50.767, 51.693], [52.329, 51.719], [54.533, 51.026], [55.717, 50.622], [56.778, 51.044], [58.363, 51.064], [59.642, 50.545], [59.933, 50.842], [61.337, 50.799], [61.588, 51.273], [59.968, 51.96], [60.927, 52.448], [60.74, 52.72], [61.7, 52.98], [60.978, 53.665], [61.437, 54.006], [65.179, 54.354], [65.667, 54.601], [68.169, 54.97], [69.068, 55.385], [70.865, 55.17], [71.18, 54.133], [72.224, 54.377], [73.509, 54.036], [73.426, 53.49], [74.385, 53.547], [76.891, 54.491], [76.525, 54.177], [77.801, 53.404], [80.036, 50.865], [80.568, 51.388], [81.946, 50.812], [83.383, 51.069], [83.935, 50.889], [84.416, 50.311], [85.116, 50.117], [85.541, 49.693], [86.829, 49.827], [87.36, 49.215]]]] }, { "N": "Uzbekistan", "I": "UZ", "C": [[[[55.968, 41.309], [55.929, 44.996], [58.503, 45.587], [58.69, 45.5], [60.24, 44.784], [61.058, 44.406], [62.013, 43.504], [63.186, 43.65], [64.901, 43.728], [66.098, 42.998], [66.023, 41.995], [66.511, 41.988], [66.714, 41.168], [67.986, 41.136], [68.26, 40.662], [68.632, 40.669], [69.07, 41.384], [70.389, 42.081], [70.962, 42.266], [71.259, 42.168], [70.42, 41.52], [71.158, 41.144], [71.87, 41.393], [73.055, 40.866], [71.775, 40.146], [71.014, 40.244], [70.601, 40.219], [70.458, 40.496], [70.667, 40.96], [69.329, 40.728], [69.012, 40.086], [68.536, 39.533], [67.701, 39.58], [67.442, 39.14], [68.176, 38.902], [68.392, 38.157], [67.83, 37.145], [67.076, 37.356], [66.519, 37.363], [66.546, 37.975], [65.216, 38.403], [64.17, 38.892], [63.518, 39.363], [62.374, 40.054], [61.883, 41.085], [61.547, 41.266], [60.466, 41.22], [60.083, 41.425], [59.976, 42.223], [58.629, 42.752], [57.787, 42.171], [56.932, 41.826], [57.096, 41.322], [55.968, 41.309]]]] }, { "N": "Papua New Guinea", "I": "PG", "C": [[[[141, -2.6], [142.735, -3.289], [144.584, -3.861], [145.273, -4.374], [145.83, -4.876], [145.982, -5.466], [147.648, -6.084], [147.891, -6.614], [146.971, -6.722], [147.192, -7.388], [148.085, -8.044], [148.734, -9.105], [149.307, -9.071], [149.267, -9.514], [150.039, -9.684], [149.739, -9.873], [150.802, -10.294], [150.691, -10.583], [150.028, -10.652], [149.782, -10.393], [148.923, -10.281], [147.913, -10.13], [147.135, -9.492], [146.568, -8.943], [146.048, -8.067], [144.744, -7.63], [143.897, -7.915], [143.286, -8.245], [143.414, -8.983], [142.628, -9.327], [142.068, -9.16], [141.034, -9.118], [141.017, -5.859], [141, -2.6]]], [[[152.64, -3.66], [153.02, -3.98], [153.14, -4.5], [152.827, -4.766], [152.639, -4.176], [152.406, -3.79], [151.953, -3.462], [151.384, -3.035], [150.662, -2.741], [150.94, -2.5], [151.48, -2.78], [151.82, -3], [152.24, -3.24], [152.64, -3.66]]], [[[151.301, -5.841], [150.754, -6.084], [150.241, -6.318], [149.71, -6.317], [148.89, -6.026], [148.319, -5.747], [148.402, -5.438], [149.298, -5.584], [149.846, -5.506], [149.996, -5.026], [150.14, -5.001], [150.237, -5.532], [150.807, -5.456], [151.09, -5.114], [151.648, -4.757], [151.538, -4.168], [152.137, -4.149], [152.339, -4.313], [152.319, -4.868], [151.983, -5.478], [151.459, -5.56], [151.301, -5.841]]], [[[154.76, -5.34], [155.063, -5.567], [155.548, -6.201], [156.02, -6.54], [155.88, -6.82], [155.6, -6.92], [155.167, -6.536], [154.729, -5.901], [154.514, -5.139], [154.653, -5.042], [154.76, -5.34]]]] }, { "N": "Indonesia", "I": "ID", "C": [[[[141, -2.6], [141.017, -5.859], [141.034, -9.118], [140.143, -8.297], [139.128, -8.096], [138.881, -8.381], [137.614, -8.412], [138.039, -7.598], [138.669, -7.32], [138.408, -6.233], [137.928, -5.393], [135.989, -4.547], [135.165, -4.463], [133.663, -3.539], [133.368, -4.025], [132.984, -4.113], [132.757, -3.746], [132.754, -3.312], [131.99, -2.821], [133.067, -2.46], [133.78, -2.48], [133.696, -2.215], [132.232, -2.213], [131.836, -1.617], [130.943, -1.433], [130.52, -0.938], [131.868, -0.695], [132.38, -0.37], [133.986, -0.78], [134.143, -1.152], [134.423, -2.769], [135.458, -3.368], [136.293, -2.307], [137.441, -1.704], [138.33, -1.703], [139.185, -2.051], [139.927, -2.409], [141, -2.6]]], [[[124.969, -8.893], [125.07, -9.09], [125.089, -9.393], [124.436, -10.14], [123.58, -10.36], [123.46, -10.24], [123.55, -9.9], [123.98, -9.29], [124.969, -8.893]]], [[[134.21, -6.895], [134.113, -6.142], [134.29, -5.783], [134.5, -5.445], [134.727, -5.738], [134.725, -6.214], [134.21, -6.895]]], [[[117.882, 4.138], [117.313, 3.234], [118.048, 2.288], [117.876, 1.828], [118.997, 0.902], [117.812, 0.784], [117.478, 0.102], [117.522, -0.804], [116.56, -1.488], [116.534, -2.484], [116.148, -4.013], [116.001, -3.657], [114.865, -4.107], [114.469, -3.496], [113.756, -3.439], [113.257, -3.119], [112.068, -3.478], [111.703, -2.994], [111.048, -3.049], [110.224, -2.934], [110.071, -1.593], [109.572, -1.315], [109.092, -0.46], [108.953, 0.415], [109.069, 1.342], [109.663, 2.006], [109.83, 1.338], [110.514, 0.773], [111.159, 0.976], [111.798, 0.904], [112.38, 1.41], [112.86, 1.498], [113.806, 1.218], [114.621, 1.431], [115.134, 2.821], [115.519, 3.169], [115.866, 4.307], [117.015, 4.306], [117.882, 4.138]]], [[[129.371, -2.802], [130.471, -3.094], [130.835, -3.858], [129.991, -3.446], [129.155, -3.363], [128.591, -3.429], [127.899, -3.393], [128.136, -2.844], [129.371, -2.802]]], [[[126.875, -3.791], [126.184, -3.607], [125.989, -3.177], [127.001, -3.129], [127.249, -3.459], [126.875, -3.791]]], [[[127.932, 2.175], [128.004, 1.629], [128.595, 1.541], [128.688, 1.132], [128.636, 0.258], [128.12, 0.356], [127.968, -0.252], [128.38, -0.78], [128.1, -0.9], [127.696, -0.267], [127.399, 1.012], [127.601, 1.811], [127.932, 2.175]]], [[[122.928, 0.875], [124.078, 0.917], [125.066, 1.643], [125.241, 1.42], [124.437, 0.428], [123.686, 0.236], [122.723, 0.431], [121.057, 0.381], [120.183, 0.237], [120.041, -0.52], [120.936, -1.409], [121.476, -0.956], [123.341, -0.616], [123.258, -1.076], [122.823, -0.931], [122.389, -1.517], [121.508, -1.904], [122.455, -3.186], [122.272, -3.53], [123.171, -4.684], [123.162, -5.341], [122.629, -5.635], [122.236, -5.283], [122.72, -4.464], [121.738, -4.851], [121.489, -4.575], [121.619, -4.188], [120.898, -3.602], [120.972, -2.628], [120.305, -2.932], [120.39, -4.098], [120.431, -5.528], [119.797, -5.673], [119.367, -5.38], [119.654, -4.459], [119.499, -3.494], [119.078, -3.487], [118.768, -2.802], [119.181, -2.147], [119.323, -1.353], [119.826, 0.154], [120.036, 0.566], [120.886, 1.309], [121.667, 1.014], [122.928, 0.875]]], [[[120.295, -10.259], [118.968, -9.558], [119.9, -9.361], [120.426, -9.666], [120.776, -9.97], [120.716, -10.24], [120.295, -10.259]]], [[[121.342, -8.537], [122.007, -8.461], [122.904, -8.094], [122.757, -8.65], [121.254, -8.934], [119.924, -8.81], [119.921, -8.445], [120.715, -8.237], [121.342, -8.537]]], [[[118.261, -8.362], [118.878, -8.281], [119.127, -8.706], [117.97, -8.907], [117.278, -9.041], [116.74, -9.033], [117.084, -8.457], [117.632, -8.449], [117.9, -8.096], [118.261, -8.362]]], [[[108.487, -6.422], [108.623, -6.778], [110.539, -6.877], [110.76, -6.465], [112.615, -6.946], [112.979, -7.594], [114.479, -7.777], [115.706, -8.371], [114.565, -8.752], [113.465, -8.349], [112.56, -8.376], [111.522, -8.302], [110.586, -8.123], [109.428, -7.741], [108.694, -7.642], [108.278, -7.767], [106.454, -7.355], [106.281, -6.925], [105.365, -6.851], [106.052, -5.896], [107.265, -5.955], [108.072, -6.346], [108.487, -6.422]]], [[[104.37, -1.085], [104.539, -1.782], [104.888, -2.34], [105.622, -2.429], [106.109, -3.062], [105.857, -4.306], [105.818, -5.852], [104.71, -5.873], [103.868, -5.037], [102.584, -4.22], [102.156, -3.614], [101.399, -2.8], [100.903, -2.05], [100.142, -0.65], [99.264, 0.183], [98.97, 1.043], [98.601, 1.824], [97.7, 2.453], [97.177, 3.309], [96.424, 3.869], [95.381, 4.971], [95.293, 5.48], [95.937, 5.44], [97.485, 5.246], [98.369, 4.268], [99.143, 3.59], [99.694, 3.174], [100.641, 2.099], [101.658, 2.084], [102.498, 1.399], [103.077, 0.561], [103.838, 0.105], [103.438, -0.712], [104.011, -1.059], [104.37, -1.085]]]] }, { "N": "Argentina", "I": "AR", "C": [[[[-68.634, -52.636], [-68.25, -53.1], [-67.75, -53.85], [-66.45, -54.45], [-65.05, -54.7], [-65.5, -55.2], [-66.45, -55.25], [-66.96, -54.897], [-67.562, -54.87], [-68.633, -54.87], [-68.634, -52.636]]], [[[-57.625, -30.216], [-57.875, -31.017], [-58.142, -32.045], [-58.133, -33.041], [-58.35, -33.263], [-58.427, -33.909], [-58.495, -34.431], [-57.226, -35.288], [-57.362, -35.977], [-56.737, -36.413], [-56.788, -36.902], [-57.749, -38.184], [-59.232, -38.72], [-61.237, -38.928], [-62.336, -38.828], [-62.126, -39.424], [-62.331, -40.173], [-62.146, -40.677], [-62.746, -41.029], [-63.77, -41.167], [-64.732, -40.803], [-65.118, -41.064], [-64.979, -42.058], [-64.303, -42.359], [-63.756, -42.044], [-63.458, -42.563], [-64.379, -42.874], [-65.182, -43.495], [-65.329, -44.501], [-65.565, -45.037], [-66.51, -45.04], [-67.294, -45.552], [-67.581, -46.302], [-66.597, -47.034], [-65.641, -47.236], [-65.985, -48.133], [-67.166, -48.697], [-67.816, -49.87], [-68.729, -50.264], [-69.139, -50.733], [-68.816, -51.771], [-68.15, -52.35], [-68.572, -52.299], [-69.498, -52.143], [-71.915, -52.009], [-72.329, -51.426], [-72.31, -50.677], [-72.976, -50.741], [-73.328, -50.379], [-73.415, -49.318], [-72.648, -48.879], [-72.331, -48.244], [-72.447, -47.739], [-71.917, -46.885], [-71.552, -45.561], [-71.659, -44.974], [-71.223, -44.784], [-71.33, -44.408], [-71.794, -44.207], [-71.464, -43.788], [-71.915, -43.409], [-72.149, -42.255], [-71.747, -42.051], [-71.916, -40.832], [-71.681, -39.808], [-71.414, -38.916], [-70.815, -38.553], [-71.119, -37.577], [-71.122, -36.658], [-70.365, -36.005], [-70.388, -35.17], [-69.817, -34.194], [-69.815, -33.274], [-70.074, -33.091], [-70.535, -31.365], [-69.919, -30.336], [-70.014, -29.368], [-69.656, -28.459], [-69.001, -27.521], [-68.296, -26.899], [-68.595, -26.507], [-68.386, -26.185], [-68.418, -24.519], [-67.328, -24.025], [-66.985, -22.986], [-67.107, -22.736], [-66.273, -21.832], [-64.965, -22.076], [-64.377, -22.798], [-63.987, -21.994], [-62.846, -22.035], [-62.685, -22.249], [-60.847, -23.881], [-60.029, -24.033], [-58.807, -24.771], [-57.777, -25.162], [-57.634, -25.604], [-58.618, -27.124], [-57.61, -27.396], [-56.487, -27.548], [-55.696, -27.388], [-54.789, -26.622], [-54.625, -25.739], [-54.13, -25.548], [-53.628, -26.125], [-53.649, -26.923], [-54.491, -27.475], [-55.162, -27.882], [-56.291, -28.853], [-57.625, -30.216]]]] }, { "N": "Chile", "I": "CL", "C": [[[[-68.634, -52.636], [-68.633, -54.87], [-67.562, -54.87], [-66.96, -54.897], [-67.291, -55.301], [-68.149, -55.612], [-68.64, -55.58], [-69.232, -55.499], [-69.958, -55.198], [-71.006, -55.054], [-72.264, -54.495], [-73.285, -53.958], [-74.663, -52.837], [-73.838, -53.047], [-72.434, -53.715], [-71.108, -54.074], [-70.592, -53.616], [-70.267, -52.931], [-69.346, -52.518], [-68.634, -52.636]]], [[[-69.59, -17.58], [-69.1, -18.26], [-68.967, -18.982], [-68.442, -19.405], [-68.757, -20.373], [-68.22, -21.494], [-67.828, -22.873], [-67.107, -22.736], [-66.985, -22.986], [-67.328, -24.025], [-68.418, -24.519], [-68.386, -26.185], [-68.595, -26.507], [-68.296, -26.899], [-69.001, -27.521], [-69.656, -28.459], [-70.014, -29.368], [-69.919, -30.336], [-70.535, -31.365], [-70.074, -33.091], [-69.815, -33.274], [-69.817, -34.194], [-70.388, -35.17], [-70.365, -36.005], [-71.122, -36.658], [-71.119, -37.577], [-70.815, -38.553], [-71.414, -38.916], [-71.681, -39.808], [-71.916, -40.832], [-71.747, -42.051], [-72.149, -42.255], [-71.915, -43.409], [-71.464, -43.788], [-71.794, -44.207], [-71.33, -44.408], [-71.223, -44.784], [-71.659, -44.974], [-71.552, -45.561], [-71.917, -46.885], [-72.447, -47.739], [-72.331, -48.244], [-72.648, -48.879], [-73.415, -49.318], [-73.328, -50.379], [-72.976, -50.741], [-72.31, -50.677], [-72.329, -51.426], [-71.915, -52.009], [-69.498, -52.143], [-68.572, -52.299], [-69.461, -52.292], [-69.943, -52.538], [-70.845, -52.899], [-71.006, -53.833], [-71.43, -53.856], [-72.558, -53.531], [-73.703, -52.835], [-73.703, -52.835], [-74.947, -52.263], [-75.26, -51.629], [-74.977, -51.043], [-75.48, -50.378], [-75.608, -48.674], [-75.183, -47.712], [-74.127, -46.939], [-75.644, -46.648], [-74.692, -45.764], [-74.352, -44.103], [-73.24, -44.455], [-72.718, -42.383], [-73.389, -42.118], [-73.701, -43.366], [-74.332, -43.225], [-74.018, -41.795], [-73.677, -39.942], [-73.218, -39.259], [-73.506, -38.283], [-73.588, -37.156], [-73.167, -37.124], [-72.553, -35.509], [-71.862, -33.909], [-71.438, -32.419], [-71.669, -30.921], [-71.37, -30.096], [-71.49, -28.861], [-70.905, -27.64], [-70.725, -25.706], [-70.404, -23.629], [-70.091, -21.393], [-70.164, -19.756], [-70.373, -18.348], [-69.858, -18.093], [-69.59, -17.58]]]] }, { "N": "Democratic Republic of the Congo", "I": "CD", "C": [[[[29.34, -4.5], [29.52, -5.42], [29.42, -5.94], [29.62, -6.52], [30.2, -7.08], [30.74, -8.34], [30.74, -8.34], [30.346, -8.238], [29.003, -8.407], [28.735, -8.527], [28.45, -9.165], [28.674, -9.606], [28.496, -10.79], [28.372, -11.794], [28.642, -11.972], [29.342, -12.361], [29.616, -12.179], [29.7, -13.257], [28.934, -13.249], [28.524, -12.699], [28.155, -12.272], [27.389, -12.133], [27.164, -11.609], [26.553, -11.924], [25.752, -11.785], [25.418, -11.331], [24.783, -11.239], [24.315, -11.263], [24.257, -10.952], [23.912, -10.927], [23.457, -10.868], [22.837, -11.018], [22.403, -10.993], [22.155, -11.085], [22.209, -9.895], [21.875, -9.524], [21.802, -8.909], [21.949, -8.306], [21.746, -7.92], [21.728, -7.291], [20.515, -7.3], [20.602, -6.939], [20.092, -6.943], [20.038, -7.116], [19.418, -7.155], [19.167, -7.738], [19.017, -7.988], [18.464, -7.847], [18.134, -7.988], [17.473, -8.069], [17.09, -7.546], [16.86, -7.222], [16.573, -6.623], [16.327, -5.877], [13.376, -5.864], [13.025, -5.984], [12.735, -5.966], [12.322, -6.1], [12.182, -5.79], [12.437, -5.684], [12.468, -5.248], [12.632, -4.991], [12.996, -4.781], [13.258, -4.883], [13.6, -4.5], [14.145, -4.51], [14.209, -4.793], [14.583, -4.97], [15.171, -4.344], [15.754, -3.855], [16.006, -3.535], [15.973, -2.712], [16.407, -1.741], [16.865, -1.226], [17.524, -0.744], [17.639, -0.425], [17.664, -0.058], [17.827, 0.289], [17.774, 0.856], [17.899, 1.742], [18.094, 2.366], [18.394, 2.9], [18.453, 3.504], [18.543, 4.202], [18.932, 4.71], [19.468, 5.032], [20.291, 4.692], [20.928, 4.323], [21.659, 4.224], [22.405, 4.029], [22.704, 4.633], [22.841, 4.71], [23.297, 4.61], [24.411, 5.109], [24.805, 4.897], [25.129, 4.927], [25.279, 5.17], [25.65, 5.256], [26.403, 5.151], [27.044, 5.128], [27.374, 5.234], [27.98, 4.408], [28.429, 4.287], [28.697, 4.455], [29.159, 4.389], [29.716, 4.601], [29.954, 4.174], [30.834, 3.509], [30.834, 3.509], [30.773, 2.34], [31.174, 2.204], [30.853, 1.849], [30.469, 1.584], [30.086, 1.062], [29.876, 0.597], [29.82, -0.205], [29.588, -0.587], [29.579, -1.341], [29.292, -1.62], [29.255, -2.215], [29.117, -2.292], [29.025, -2.839], [29.276, -3.294], [29.34, -4.5]]]] }, { "N": "Somalia", "I": "SO", "C": [[[[41.585, -1.683], [40.993, -0.858], [40.981, 2.785], [41.855, 3.919], [42.129, 4.234], [42.77, 4.253], [43.661, 4.958], [44.964, 5.002], [47.789, 8.003], [48.487, 8.838], [48.938, 9.452], [48.938, 9.974], [48.938, 10.982], [48.942, 11.394], [48.948, 11.411], [48.948, 11.411], [49.268, 11.43], [49.729, 11.579], [50.259, 11.68], [50.732, 12.022], [51.111, 12.025], [51.134, 11.748], [51.042, 11.167], [51.045, 10.641], [50.834, 10.28], [50.552, 9.199], [50.071, 8.082], [49.453, 6.805], [48.595, 5.339], [47.741, 4.219], [46.565, 2.855], [45.564, 2.046], [44.068, 1.053], [43.136, 0.292], [42.042, -0.919], [41.811, -1.446], [41.585, -1.683]]]] }, { "N": "Kenya", "I": "KE", "C": [[[[39.202, -4.677], [37.767, -3.677], [37.699, -3.097], [34.073, -1.06], [33.904, -0.95], [33.894, 0.11], [34.18, 0.515], [34.672, 1.177], [35.036, 1.906], [34.596, 3.054], [34.479, 3.556], [34.005, 4.25], [34.62, 4.847], [35.298, 5.506], [35.817, 5.338], [35.817, 4.777], [36.159, 4.448], [36.855, 4.448], [38.121, 3.599], [38.437, 3.589], [38.671, 3.616], [38.893, 3.501], [39.559, 3.422], [39.855, 3.839], [40.768, 4.257], [41.172, 3.919], [41.855, 3.919], [40.981, 2.785], [40.993, -0.858], [41.585, -1.683], [40.885, -2.083], [40.638, -2.5], [40.263, -2.573], [40.121, -3.278], [39.8, -3.681], [39.605, -4.347], [39.202, -4.677]]]] }, { "N": "Sudan", "I": "SD", "C": [[[[24.567, 8.229], [23.806, 8.666], [23.459, 8.954], [23.395, 9.265], [23.557, 9.681], [23.554, 10.089], [22.978, 10.714], [22.864, 11.142], [22.876, 11.385], [22.509, 11.679], [22.498, 12.26], [22.288, 12.646], [21.937, 12.588], [22.038, 12.955], [22.297, 13.372], [22.183, 13.786], [22.512, 14.093], [22.304, 14.327], [22.568, 14.944], [23.025, 15.681], [23.887, 15.611], [23.838, 19.58], [23.85, 20], [25, 20.003], [25, 22], [29.02, 22], [32.9, 22], [36.866, 22], [37.189, 21.019], [36.969, 20.837], [37.115, 19.808], [37.482, 18.614], [37.863, 18.368], [38.41, 17.998], [37.904, 17.428], [37.167, 17.263], [36.853, 16.957], [36.754, 16.292], [36.323, 14.822], [36.43, 14.422], [36.27, 13.563], [35.864, 12.578], [35.26, 12.083], [34.832, 11.319], [34.731, 10.91], [34.257, 10.63], [33.962, 9.584], [33.975, 8.685], [33.963, 9.464], [33.825, 9.484], [33.842, 9.982], [33.722, 10.325], [33.207, 10.72], [33.087, 11.441], [33.207, 12.179], [32.743, 12.248], [32.675, 12.025], [32.074, 11.973], [32.314, 11.681], [32.4, 11.081], [31.851, 10.531], [31.353, 9.81], [30.838, 9.707], [29.997, 10.291], [29.619, 10.085], [29.516, 9.793], [29.001, 9.604], [28.967, 9.398], [27.971, 9.398], [27.834, 9.604], [27.113, 9.639], [26.752, 9.467], [26.477, 9.553], [25.962, 10.136], [25.791, 10.411], [25.07, 10.274], [24.795, 9.81], [24.537, 8.918], [24.194, 8.729], [23.887, 8.62], [24.567, 8.229]]]] }, { "N": "Chad", "I": "TD", "C": [[[[23.838, 19.58], [23.887, 15.611], [23.025, 15.681], [22.568, 14.944], [22.304, 14.327], [22.512, 14.093], [22.183, 13.786], [22.297, 13.372], [22.038, 12.955], [21.937, 12.588], [22.288, 12.646], [22.498, 12.26], [22.509, 11.679], [22.876, 11.385], [22.864, 11.142], [22.231, 10.972], [21.724, 10.567], [21.001, 9.476], [20.06, 9.013], [19.094, 9.075], [18.812, 8.983], [18.911, 8.631], [18.39, 8.281], [17.965, 7.891], [16.706, 7.508], [16.456, 7.735], [16.291, 7.754], [16.106, 7.497], [15.279, 7.422], [15.436, 7.693], [15.121, 8.382], [14.98, 8.796], [14.544, 8.966], [13.954, 9.549], [14.171, 10.021], [14.627, 9.921], [14.909, 9.992], [15.468, 9.982], [14.924, 10.891], [14.96, 11.556], [14.893, 12.219], [14.496, 12.859], [14.596, 13.33], [13.954, 13.353], [13.957, 13.997], [13.54, 14.367], [13.972, 15.684], [15.248, 16.627], [15.3, 17.928], [15.686, 19.957], [15.903, 20.388], [15.487, 20.73], [15.471, 21.048], [15.097, 21.309], [14.851, 22.863], [15.861, 23.41], [19.849, 21.495], [23.838, 19.58]]]] }, { "N": "Haiti", "I": "HT", "C": [[[[-71.712, 19.714], [-71.625, 19.17], [-71.701, 18.785], [-71.945, 18.617], [-71.688, 18.317], [-71.708, 18.045], [-72.372, 18.215], [-72.844, 18.146], [-73.455, 18.218], [-73.922, 18.031], [-74.458, 18.343], [-74.37, 18.665], [-73.45, 18.526], [-72.695, 18.446], [-72.335, 18.668], [-72.792, 19.102], [-72.784, 19.484], [-73.415, 19.64], [-73.19, 19.916], [-72.58, 19.872], [-71.712, 19.714]]]] }, { "N": "Dominican Republic", "I": "DO", "C": [[[[-71.708, 18.045], [-71.688, 18.317], [-71.945, 18.617], [-71.701, 18.785], [-71.625, 19.17], [-71.712, 19.714], [-71.587, 19.885], [-70.807, 19.88], [-70.214, 19.623], [-69.951, 19.648], [-69.769, 19.293], [-69.222, 19.313], [-69.254, 19.015], [-68.809, 18.979], [-68.318, 18.612], [-68.689, 18.205], [-69.165, 18.423], [-69.624, 18.381], [-69.953, 18.428], [-70.133, 18.246], [-70.517, 18.184], [-70.669, 18.427], [-71, 18.283], [-71.4, 17.599], [-71.658, 17.758], [-71.708, 18.045]]]] }, { "N": "Russia", "I": "RU", "C": [[[[178.725, 71.099], [180, 71.516], [180, 70.832], [178.903, 70.781], [178.725, 71.099]]], [[[93.778, 81.025], [95.941, 81.25], [97.884, 80.747], [100.187, 79.78], [99.94, 78.881], [97.758, 78.756], [94.973, 79.045], [93.313, 79.427], [92.545, 80.144], [91.181, 80.341], [93.778, 81.025]]], [[[102.838, 79.281], [105.372, 78.713], [105.075, 78.307], [99.438, 77.921], [101.265, 79.234], [102.086, 79.346], [102.838, 79.281]]], [[[138.831, 76.137], [141.472, 76.093], [145.086, 75.563], [144.3, 74.82], [140.614, 74.848], [138.955, 74.611], [136.974, 75.262], [137.512, 75.949], [138.831, 76.137]]], [[[148.222, 75.346], [150.732, 75.084], [149.576, 74.689], [147.977, 74.778], [146.119, 75.173], [146.358, 75.497], [148.222, 75.346]]], [[[139.863, 73.37], [140.812, 73.765], [142.062, 73.858], [143.483, 73.475], [143.604, 73.212], [142.088, 73.205], [140.038, 73.317], [139.863, 73.37]]], [[[44.847, 80.59], [46.799, 80.772], [48.318, 80.784], [48.523, 80.515], [49.097, 80.754], [50.04, 80.919], [51.523, 80.7], [51.136, 80.547], [49.794, 80.415], [48.894, 80.34], [48.755, 80.175], [47.586, 80.01], [46.503, 80.247], [47.072, 80.559], [44.847, 80.59]]], [[[22.731, 54.328], [20.892, 54.313], [19.661, 54.426], [19.888, 54.866], [21.268, 55.19], [22.316, 55.015], [22.758, 54.857], [22.651, 54.583], [22.731, 54.328]]], [[[53.508, 73.75], [55.902, 74.627], [55.632, 75.081], [57.869, 75.609], [61.17, 76.252], [64.498, 76.439], [66.211, 76.81], [68.157, 76.94], [68.852, 76.545], [68.181, 76.234], [64.637, 75.738], [61.584, 75.261], [58.477, 74.309], [56.987, 73.333], [55.419, 72.371], [55.623, 71.541], [57.536, 70.72], [56.945, 70.633], [53.677, 70.763], [53.412, 71.207], [51.602, 71.475], [51.456, 72.015], [52.478, 72.229], [52.444, 72.775], [54.428, 73.628], [53.508, 73.75]]], [[[142.915, 53.705], [143.261, 52.741], [143.235, 51.757], [143.648, 50.748], [144.654, 48.976], [143.174, 49.307], [142.559, 47.862], [143.533, 46.837], [143.505, 46.138], [142.748, 46.741], [142.092, 45.967], [141.907, 46.806], [142.018, 47.78], [141.904, 48.859], [142.136, 49.615], [142.18, 50.952], [141.594, 51.935], [141.683, 53.302], [142.607, 53.762], [142.21, 54.225], [142.655, 54.366], [142.915, 53.705]]], [[[-174.928, 67.206], [-175.014, 66.584], [-174.34, 66.336], [-174.572, 67.062], [-171.857, 66.913], [-169.9, 65.977], [-170.891, 65.541], [-172.53, 65.438], [-172.555, 64.461], [-172.955, 64.253], [-173.892, 64.283], [-174.654, 64.631], [-175.984, 64.923], [-176.207, 65.357], [-177.223, 65.52], [-178.36, 65.391], [-178.903, 65.74], [-178.686, 66.112], [-179.884, 65.875], [-179.433, 65.404], [-180, 64.98], [-180, 68.964], [-177.55, 68.2], [-174.928, 67.206]]], [[[-178.694, 70.893], [-180, 70.832], [-180, 71.516], [-179.872, 71.558], [-179.024, 71.556], [-177.578, 71.269], [-177.664, 71.133], [-178.694, 70.893]]], [[[49.101, 46.399], [48.645, 45.806], [47.676, 45.641], [46.682, 44.609], [47.591, 43.66], [47.493, 42.987], [48.584, 41.809], [48.584, 41.809], [47.987, 41.406], [47.816, 41.151], [47.373, 41.22], [46.686, 41.827], [46.405, 41.861], [45.776, 42.092], [45.47, 42.503], [44.538, 42.712], [43.931, 42.555], [43.756, 42.741], [42.394, 43.22], [40.922, 43.382], [40.077, 43.553], [39.955, 43.435], [38.68, 44.28], [37.539, 44.657], [36.675, 45.245], [37.403, 45.405], [38.233, 46.241], [37.674, 46.637], [39.148, 47.045], [39.121, 47.263], [38.224, 47.102], [38.255, 47.546], [38.771, 47.826], [39.738, 47.899], [39.896, 48.232], [39.675, 48.784], [40.081, 49.307], [40.069, 49.601], [38.595, 49.926], [38.011, 49.916], [37.393, 50.384], [36.626, 50.226], [35.356, 50.577], [35.378, 50.774], [35.022, 51.208], [34.225, 51.256], [34.142, 51.566], [34.392, 51.769], [33.753, 52.335], [32.716, 52.238], [32.412, 52.289], [32.159, 52.061], [31.786, 52.102], [31.786, 52.102], [31.54, 52.742], [31.305, 53.074], [31.498, 53.167], [32.305, 53.133], [32.694, 53.351], [32.406, 53.618], [31.731, 53.794], [31.791, 53.975], [31.384, 54.157], [30.758, 54.812], [30.972, 55.082], [30.874, 55.551], [29.896, 55.789], [29.372, 55.67], [29.23, 55.918], [28.177, 56.169], [27.855, 56.759], [27.77, 57.244], [27.288, 57.475], [27.717, 57.792], [27.42, 58.725], [28.132, 59.301], [27.981, 59.475], [27.981, 59.475], [29.118, 60.028], [28.07, 60.504], [28.07, 60.504], [30.211, 61.78], [31.14, 62.358], [31.516, 62.868], [30.036, 63.553], [30.445, 64.204], [29.544, 64.949], [30.218, 65.806], [29.055, 66.944], [29.977, 67.698], [28.446, 68.365], [28.592, 69.065], [29.4, 69.157], [31.101, 69.558], [31.101, 69.558], [32.133, 69.906], [33.775, 69.301], [36.514, 69.063], [40.292, 67.932], [41.06, 67.457], [41.126, 66.792], [40.016, 66.266], [38.383, 66], [33.919, 66.76], [33.184, 66.633], [34.815, 65.9], [34.879, 65.436], [34.944, 64.414], [36.231, 64.109], [37.013, 63.85], [37.142, 64.335], [36.54, 64.764], [37.176, 65.143], [39.593, 64.521], [40.436, 64.764], [39.763, 65.497], [42.093, 66.476], [43.016, 66.419], [43.95, 66.069], [44.532, 66.756], [43.698, 67.352], [44.188, 67.951], [43.453, 68.571], [46.25, 68.25], [46.821, 67.69], [45.555, 67.567], [45.562, 67.01], [46.349, 66.668], [47.894, 66.885], [48.139, 67.522], [50.228, 67.999], [53.717, 68.857], [54.472, 68.808], [53.486, 68.201], [54.726, 68.097], [55.443, 68.439], [57.317, 68.466], [58.802, 68.881], [59.941, 68.278], [61.078, 68.941], [60.03, 69.52], [60.55, 69.85], [63.504, 69.547], [64.888, 69.235], [68.512, 68.092], [69.181, 68.616], [68.164, 69.144], [68.135, 69.356], [66.93, 69.455], [67.26, 69.929], [66.725, 70.709], [66.695, 71.029], [68.54, 71.935], [69.196, 72.843], [69.94, 73.04], [72.588, 72.776], [72.796, 72.22], [71.848, 71.409], [72.47, 71.09], [72.792, 70.391], [72.565, 69.021], [73.668, 68.408], [73.239, 67.74], [71.28, 66.32], [72.423, 66.173], [72.821, 66.533], [73.921, 66.789], [74.187, 67.284], [75.052, 67.76], [74.469, 68.329], [74.936, 68.989], [73.842, 69.071], [73.602, 69.628], [74.4, 70.632], [73.101, 71.447], [74.891, 72.121], [74.659, 72.832], [75.158, 72.855], [75.684, 72.301], [75.289, 71.336], [76.359, 71.153], [75.903, 71.874], [77.577, 72.267], [79.652, 72.32], [81.5, 71.75], [80.611, 72.583], [80.511, 73.648], [82.25, 73.85], [84.655, 73.806], [86.822, 73.937], [86.01, 74.46], [87.167, 75.116], [88.316, 75.144], [90.26, 75.64], [92.901, 75.773], [93.234, 76.047], [95.86, 76.14], [96.678, 75.915], [98.923, 76.447], [100.76, 76.43], [101.035, 76.862], [101.991, 77.288], [104.352, 77.698], [106.067, 77.374], [104.705, 77.127], [106.97, 76.974], [107.24, 76.48], [108.154, 76.723], [111.077, 76.71], [113.332, 76.222], [114.134, 75.848], [113.885, 75.328], [112.779, 75.032], [110.151, 74.477], [109.4, 74.18], [110.64, 74.04], [112.119, 73.788], [113.02, 73.977], [113.53, 73.335], [113.969, 73.595], [115.568, 73.753], [118.776, 73.588], [119.02, 73.12], [123.201, 72.971], [123.258, 73.735], [125.38, 73.56], [126.976, 73.565], [128.591, 73.039], [129.052, 72.399], [128.46, 71.98], [129.716, 71.193], [131.289, 70.787], [132.254, 71.836], [133.858, 71.386], [135.562, 71.655], [137.498, 71.348], [138.234, 71.628], [139.87, 71.488], [139.148, 72.416], [140.468, 72.849], [149.5, 72.2], [150.351, 71.606], [152.969, 70.842], [157.007, 71.031], [158.998, 70.867], [159.83, 70.453], [159.709, 69.722], [160.941, 69.437], [162.279, 69.642], [164.052, 69.668], [165.94, 69.472], [167.836, 69.583], [169.578, 68.694], [170.817, 69.014], [170.008, 69.653], [170.453, 70.097], [173.644, 69.817], [175.724, 69.877], [178.6, 69.4], [180, 68.964], [180, 64.98], [179.993, 64.974], [178.707, 64.535], [177.411, 64.608], [178.313, 64.076], [178.908, 63.252], [179.37, 62.983], [179.486, 62.569], [179.228, 62.304], [177.364, 62.522], [174.569, 61.769], [173.68, 61.653], [172.15, 60.95], [170.698, 60.336], [170.331, 59.882], [168.9, 60.574], [166.295, 59.789], [165.84, 60.16], [164.877, 59.732], [163.539, 59.869], [163.217, 59.211], [162.017, 58.243], [162.053, 57.839], [163.192, 57.615], [163.058, 56.159], [162.13, 56.122], [161.701, 55.286], [162.117, 54.855], [160.369, 54.344], [160.022, 53.203], [158.531, 52.959], [158.231, 51.943], [156.79, 51.011], [156.42, 51.7], [155.992, 53.159], [155.434, 55.381], [155.914, 56.768], [156.758, 57.365], [156.81, 57.832], [158.364, 58.056], [160.151, 59.315], [161.872, 60.343], [163.67, 61.141], [164.474, 62.551], [163.258, 62.466], [162.658, 61.642], [160.121, 60.544], [159.302, 61.774], [156.721, 61.434], [154.218, 59.758], [155.044, 59.145], [152.812, 58.884], [151.266, 58.781], [151.338, 59.504], [149.784, 59.656], [148.545, 59.164], [145.487, 59.336], [142.198, 59.04], [138.958, 57.088], [135.126, 54.73], [136.702, 54.604], [137.193, 53.977], [138.165, 53.755], [138.805, 54.255], [139.902, 54.19], [141.345, 53.09], [141.379, 52.239], [140.597, 51.24], [140.513, 50.046], [140.062, 48.447], [138.555, 47], [138.22, 46.308], [136.862, 45.144], [135.515, 43.989], [134.869, 43.398], [133.537, 42.811], [132.906, 42.798], [132.278, 43.285], [130.936, 42.553], [130.78, 42.22], [130.78, 42.22], [130.78, 42.22], [130.78, 42.22], [130.64, 42.395], [130.64, 42.395], [130.634, 42.903], [131.145, 42.93], [131.289, 44.112], [131.025, 44.968], [131.883, 45.321], [133.097, 45.144], [133.77, 46.117], [134.112, 47.212], [134.501, 47.578], [135.026, 48.478], [133.374, 48.183], [132.507, 47.789], [130.987, 47.79], [130.582, 48.73], [129.398, 49.441], [127.657, 49.76], [127.287, 50.74], [126.939, 51.354], [126.564, 51.784], [125.946, 52.793], [125.068, 53.161], [123.571, 53.459], [122.246, 53.432], [121.003, 53.251], [120.177, 52.754], [120.726, 52.516], [120.738, 51.964], [120.182, 51.644], [119.279, 50.583], [119.288, 50.143], [117.879, 49.511], [116.679, 49.889], [115.486, 49.805], [114.962, 50.14], [114.362, 50.248], [112.898, 49.544], [111.581, 49.378], [110.662, 49.13], [109.402, 49.293], [108.475, 49.283], [107.868, 49.794], [106.889, 50.274], [105.887, 50.406], [104.622, 50.275], [103.677, 50.09], [102.256, 50.511], [102.065, 51.26], [100.889, 51.517], [99.982, 51.634], [98.861, 52.047], [97.826, 51.011], [98.232, 50.422], [97.26, 49.726], [95.814, 49.977], [94.816, 50.013], [94.148, 50.481], [93.104, 50.495], [92.235, 50.802], [90.714, 50.332], [88.806, 49.471], [87.751, 49.297], [87.36, 49.215], [86.829, 49.827], [85.541, 49.693], [85.116, 50.117], [84.416, 50.311], [83.935, 50.889], [83.383, 51.069], [81.946, 50.812], [80.568, 51.388], [80.036, 50.865], [77.801, 53.404], [76.525, 54.177], [76.891, 54.491], [74.385, 53.547], [73.426, 53.49], [73.509, 54.036], [72.224, 54.377], [71.18, 54.133], [70.865, 55.17], [69.068, 55.385], [68.169, 54.97], [65.667, 54.601], [65.179, 54.354], [61.437, 54.006], [60.978, 53.665], [61.7, 52.98], [60.74, 52.72], [60.927, 52.448], [59.968, 51.96], [61.588, 51.273], [61.337, 50.799], [59.933, 50.842], [59.642, 50.545], [58.363, 51.064], [56.778, 51.044], [55.717, 50.622], [54.533, 51.026], [52.329, 51.719], [50.767, 51.693], [48.702, 50.605], [48.578, 49.875], [47.549, 50.455], [46.752, 49.356], [47.044, 49.152], [46.466, 48.394], [47.315, 47.716], [48.057, 47.744], [48.695, 47.076], [48.593, 46.561], [49.101, 46.399]]]] }, { "N": "Bahamas", "I": "BS", "C": [[[[-78.98, 26.79], [-78.51, 26.87], [-77.85, 26.84], [-77.82, 26.58], [-78.91, 26.42], [-78.98, 26.79]]], [[[-77.79, 27.04], [-77, 26.59], [-77.173, 25.879], [-77.356, 26.007], [-77.34, 26.53], [-77.788, 26.925], [-77.79, 27.04]]], [[[-78.191, 25.21], [-77.89, 25.17], [-77.54, 24.34], [-77.535, 23.76], [-77.78, 23.71], [-78.034, 24.286], [-78.408, 24.576], [-78.191, 25.21]]]] }, { "N": "Falkland Islands", "I": "FK", "C": [[[[-61.2, -51.85], [-60, -51.25], [-59.15, -51.5], [-58.55, -51.1], [-57.75, -51.55], [-58.05, -51.9], [-59.4, -52.2], [-59.85, -51.85], [-60.7, -52.3], [-61.2, -51.85]]]] }, { "N": "Norway", "I": "NO", "C": [[[[15.143, 79.674], [15.523, 80.016], [16.991, 80.051], [18.252, 79.702], [21.544, 78.956], [19.027, 78.563], [18.472, 77.827], [17.594, 77.638], [17.118, 76.809], [15.913, 76.77], [13.763, 77.38], [14.67, 77.736], [13.171, 78.025], [11.222, 78.869], [10.445, 79.652], [13.171, 80.01], [13.719, 79.66], [15.143, 79.674]]], [[[27.408, 80.056], [25.925, 79.518], [23.024, 79.4], [20.075, 79.567], [19.897, 79.842], [18.462, 79.86], [17.368, 80.319], [20.456, 80.598], [21.908, 80.358], [22.919, 80.657], [25.448, 80.407], [27.408, 80.056]]], [[[24.724, 77.854], [22.49, 77.445], [20.726, 77.677], [21.416, 77.935], [20.812, 78.255], [22.884, 78.455], [23.281, 78.08], [24.724, 77.854]]], [[[31.101, 69.558], [29.4, 69.157], [28.592, 69.065], [29.016, 69.766], [27.732, 70.164], [26.18, 69.825], [25.689, 69.092], [24.736, 68.65], [23.662, 68.891], [22.356, 68.842], [21.245, 69.37], [20.646, 69.106], [20.025, 69.065], [19.879, 68.407], [17.994, 68.567], [17.729, 68.011], [16.769, 68.014], [16.109, 67.302], [15.108, 66.194], [13.556, 64.787], [13.92, 64.445], [13.572, 64.049], [12.58, 64.066], [11.931, 63.128], [11.992, 61.8], [12.631, 61.294], [12.3, 60.118], [11.468, 59.432], [11.027, 58.856], [10.357, 59.47], [8.382, 58.313], [7.049, 58.079], [5.666, 58.588], [5.308, 59.663], [4.992, 61.971], [5.913, 62.614], [8.553, 63.454], [10.528, 64.486], [12.358, 65.88], [14.761, 67.811], [16.436, 68.563], [19.184, 69.817], [21.378, 70.255], [23.024, 70.202], [24.547, 71.03], [26.37, 70.986], [28.166, 71.185], [31.293, 70.454], [30.005, 70.186], [31.101, 69.558]]]] }, { "N": "Greenland", "I": "GL", "C": [[[[-46.764, 82.628], [-43.406, 83.225], [-39.898, 83.18], [-38.622, 83.549], [-35.088, 83.645], [-27.1, 83.52], [-20.845, 82.727], [-22.692, 82.342], [-26.518, 82.298], [-31.9, 82.2], [-31.396, 82.022], [-27.857, 82.132], [-24.844, 81.787], [-22.903, 82.093], [-22.072, 81.734], [-23.17, 81.153], [-20.624, 81.525], [-15.768, 81.912], [-12.77, 81.719], [-12.209, 81.292], [-16.285, 80.58], [-16.85, 80.35], [-20.046, 80.177], [-17.73, 80.129], [-18.9, 79.4], [-19.705, 78.751], [-19.674, 77.639], [-18.473, 76.986], [-20.035, 76.944], [-21.679, 76.628], [-19.834, 76.098], [-19.599, 75.248], [-20.668, 75.156], [-19.373, 74.296], [-21.594, 74.224], [-20.435, 73.817], [-20.762, 73.464], [-22.172, 73.31], [-23.566, 73.307], [-22.313, 72.629], [-22.3, 72.184], [-24.278, 72.598], [-24.793, 72.33], [-23.443, 72.08], [-22.133, 71.469], [-21.754, 70.664], [-23.536, 70.471], [-24.307, 70.856], [-25.543, 71.431], [-25.201, 70.752], [-26.363, 70.226], [-23.727, 70.184], [-22.349, 70.129], [-25.029, 69.259], [-27.747, 68.47], [-30.674, 68.125], [-31.777, 68.121], [-32.811, 67.735], [-34.202, 66.68], [-36.353, 65.979], [-37.044, 65.938], [-38.375, 65.692], [-39.812, 65.458], [-40.669, 64.84], [-40.683, 64.139], [-41.189, 63.482], [-42.819, 62.682], [-42.417, 61.901], [-42.866, 61.074], [-43.378, 60.098], [-44.788, 60.037], [-46.264, 60.853], [-48.263, 60.858], [-49.233, 61.407], [-49.9, 62.383], [-51.633, 63.627], [-52.14, 64.278], [-52.277, 65.177], [-53.662, 66.1], [-53.302, 66.837], [-53.969, 67.189], [-52.98, 68.358], [-51.475, 68.73], [-51.08, 69.148], [-50.871, 69.929], [-52.014, 69.575], [-52.558, 69.426], [-53.456, 69.284], [-54.683, 69.61], [-54.75, 70.289], [-54.359, 70.821], [-53.431, 70.836], [-51.39, 70.57], [-53.109, 71.205], [-54.004, 71.547], [-55, 71.407], [-55.835, 71.654], [-54.718, 72.586], [-55.326, 72.959], [-56.12, 73.65], [-57.324, 74.71], [-58.597, 75.099], [-58.585, 75.517], [-61.269, 76.102], [-63.392, 76.175], [-66.064, 76.135], [-68.504, 76.061], [-69.665, 76.38], [-71.403, 77.009], [-68.777, 77.323], [-66.764, 77.376], [-71.043, 77.636], [-73.297, 78.044], [-73.159, 78.433], [-69.373, 78.914], [-65.711, 79.394], [-65.324, 79.758], [-68.023, 80.117], [-67.151, 80.516], [-63.689, 81.214], [-62.234, 81.321], [-62.651, 81.77], [-60.282, 82.034], [-57.207, 82.191], [-54.134, 82.2], [-53.043, 81.888], [-50.391, 82.439], [-48.004, 82.065], [-46.6, 81.986], [-44.523, 81.661], [-46.901, 82.2], [-46.764, 82.628]]]] }, { "N": "Timor-Leste", "I": "TL", "C": [[[[124.969, -8.893], [125.086, -8.657], [125.947, -8.432], [126.645, -8.398], [126.957, -8.273], [127.336, -8.397], [126.968, -8.668], [125.926, -9.106], [125.089, -9.393], [125.07, -9.09], [124.969, -8.893]]]] }, { "N": "South Africa", "I": "ZA", "C": [[[[16.345, -28.577], [16.824, -28.082], [17.219, -28.356], [17.387, -28.784], [17.836, -28.856], [18.465, -29.045], [19.002, -28.972], [19.895, -28.461], [19.896, -24.768], [20.166, -24.918], [20.759, -25.868], [20.666, -26.477], [20.89, -26.829], [21.606, -26.727], [22.106, -26.28], [22.58, -25.979], [22.824, -25.5], [23.312, -25.269], [23.734, -25.39], [24.211, -25.67], [25.025, -25.72], [25.665, -25.487], [25.766, -25.175], [25.942, -24.696], [26.486, -24.616], [26.786, -24.241], [27.119, -23.574], [28.017, -22.828], [29.432, -22.091], [29.839, -22.102], [30.323, -22.272], [30.66, -22.152], [31.191, -22.252], [31.67, -23.659], [31.931, -24.369], [31.752, -25.484], [31.838, -25.843], [31.333, -25.66], [31.044, -25.731], [30.95, -26.023], [30.677, -26.398], [30.686, -26.744], [31.283, -27.286], [31.868, -27.178], [32.072, -26.734], [32.83, -26.742], [32.58, -27.47], [32.462, -28.301], [32.203, -28.752], [31.521, -29.257], [31.326, -29.402], [30.902, -29.91], [30.623, -30.424], [30.056, -31.14], [28.926, -32.172], [28.22, -32.772], [27.465, -33.227], [26.419, -33.615], [25.91, -33.667], [25.781, -33.945], [25.173, -33.797], [24.678, -33.987], [23.594, -33.794], [22.988, -33.916], [22.574, -33.864], [21.543, -34.259], [20.689, -34.417], [20.071, -34.795], [19.616, -34.819], [19.193, -34.463], [18.855, -34.444], [18.425, -33.998], [18.377, -34.137], [18.244, -33.868], [18.25, -33.281], [17.925, -32.611], [18.248, -32.429], [18.222, -31.662], [17.567, -30.726], [17.064, -29.879], [17.063, -29.876], [16.345, -28.577]], [[28.978, -28.956], [28.542, -28.648], [28.074, -28.851], [27.533, -29.243], [26.999, -29.876], [27.749, -30.645], [28.107, -30.546], [28.291, -30.226], [28.848, -30.07], [29.018, -29.744], [29.325, -29.257], [28.978, -28.956]]]] }, { "N": "Lesotho", "I": "LS", "C": [[[[28.978, -28.956], [29.325, -29.257], [29.018, -29.744], [28.848, -30.07], [28.291, -30.226], [28.107, -30.546], [27.749, -30.645], [26.999, -29.876], [27.533, -29.243], [28.074, -28.851], [28.542, -28.648], [28.978, -28.956]]]] }, { "N": "Mexico", "I": "MX", "C": [[[[-117.128, 32.535], [-115.991, 32.612], [-114.721, 32.721], [-114.815, 32.525], [-113.305, 32.039], [-111.024, 31.335], [-109.035, 31.342], [-108.242, 31.342], [-108.24, 31.755], [-106.508, 31.755], [-106.143, 31.4], [-105.632, 31.084], [-105.037, 30.644], [-104.706, 30.122], [-104.457, 29.572], [-103.94, 29.27], [-103.11, 28.97], [-102.48, 29.76], [-101.662, 29.779], [-100.958, 29.381], [-100.456, 28.696], [-100.11, 28.11], [-99.52, 27.54], [-99.3, 26.84], [-99.02, 26.37], [-98.24, 26.06], [-97.53, 25.84], [-97.14, 25.87], [-97.528, 24.992], [-97.703, 24.272], [-97.776, 22.933], [-97.872, 22.444], [-97.699, 21.899], [-97.389, 21.411], [-97.189, 20.635], [-96.526, 19.891], [-96.292, 19.32], [-95.901, 18.828], [-94.839, 18.563], [-94.426, 18.144], [-93.549, 18.424], [-92.786, 18.525], [-92.037, 18.705], [-91.408, 18.876], [-90.772, 19.284], [-90.534, 19.867], [-90.451, 20.708], [-90.279, 21], [-89.601, 21.262], [-88.544, 21.494], [-87.658, 21.459], [-87.052, 21.544], [-86.812, 21.332], [-86.846, 20.85], [-87.383, 20.255], [-87.621, 19.647], [-87.437, 19.472], [-87.587, 19.04], [-87.837, 18.26], [-88.091, 18.517], [-88.3, 18.5], [-88.49, 18.487], [-88.848, 17.883], [-89.03, 18.002], [-89.151, 17.955], [-89.143, 17.808], [-90.068, 17.819], [-91.002, 17.818], [-91.002, 17.255], [-91.454, 17.252], [-91.082, 16.918], [-90.712, 16.687], [-90.601, 16.471], [-90.439, 16.41], [-90.464, 16.07], [-91.748, 16.067], [-92.229, 15.251], [-92.087, 15.065], [-92.203, 14.83], [-92.228, 14.539], [-93.359, 15.615], [-93.875, 15.94], [-94.692, 16.201], [-95.25, 16.128], [-96.053, 15.752], [-96.557, 15.654], [-97.264, 15.917], [-98.013, 16.107], [-98.948, 16.566], [-99.697, 16.706], [-100.829, 17.171], [-101.666, 17.649], [-101.919, 17.916], [-102.478, 17.976], [-103.501, 18.292], [-103.918, 18.749], [-104.992, 19.316], [-105.493, 19.947], [-105.731, 20.434], [-105.398, 20.532], [-105.501, 20.817], [-105.271, 21.076], [-105.266, 21.422], [-105.603, 21.871], [-105.693, 22.269], [-106.029, 22.774], [-106.91, 23.768], [-107.915, 24.549], [-108.402, 25.172], [-109.26, 25.581], [-109.444, 25.825], [-109.292, 26.443], [-109.801, 26.676], [-110.392, 27.162], [-110.641, 27.86], [-111.179, 27.941], [-111.76, 28.468], [-112.228, 28.954], [-112.272, 29.267], [-112.81, 30.021], [-113.164, 30.787], [-113.149, 31.171], [-113.872, 31.568], [-114.206, 31.524], [-114.776, 31.8], [-114.937, 31.393], [-114.771, 30.914], [-114.674, 30.163], [-114.331, 29.75], [-113.589, 29.062], [-113.424, 28.826], [-113.272, 28.755], [-113.14, 28.411], [-112.962, 28.425], [-112.762, 27.78], [-112.458, 27.526], [-112.245, 27.172], [-111.616, 26.663], [-111.285, 25.733], [-110.988, 25.295], [-110.71, 24.826], [-110.655, 24.299], [-110.173, 24.266], [-109.772, 23.811], [-109.409, 23.365], [-109.433, 23.186], [-109.854, 22.818], [-110.031, 22.823], [-110.295, 23.431], [-110.95, 24.001], [-111.671, 24.484], [-112.182, 24.738], [-112.149, 25.47], [-112.301, 26.012], [-112.777, 26.322], [-113.465, 26.768], [-113.597, 26.639], [-113.849, 26.9], [-114.466, 27.142], [-115.055, 27.723], [-114.982, 27.798], [-114.57, 27.741], [-114.199, 28.115], [-114.162, 28.566], [-114.932, 29.279], [-115.519, 29.556], [-115.887, 30.181], [-116.258, 30.836], [-116.722, 31.636], [-117.128, 32.535]]]] }, { "N": "Uruguay", "I": "UY", "C": [[[[-57.625, -30.216], [-56.976, -30.11], [-55.973, -30.883], [-55.602, -30.854], [-54.572, -31.495], [-53.788, -32.047], [-53.21, -32.728], [-53.651, -33.202], [-53.374, -33.768], [-53.806, -34.397], [-54.936, -34.953], [-55.674, -34.753], [-56.215, -34.86], [-57.14, -34.43], [-57.818, -34.463], [-58.427, -33.909], [-58.35, -33.263], [-58.133, -33.041], [-58.142, -32.045], [-57.875, -31.017], [-57.625, -30.216]]]] }, { "N": "Brazil", "I": "BR", "C": [[[[-53.374, -33.768], [-53.651, -33.202], [-53.21, -32.728], [-53.788, -32.047], [-54.572, -31.495], [-55.602, -30.854], [-55.973, -30.883], [-56.976, -30.11], [-57.625, -30.216], [-56.291, -28.853], [-55.162, -27.882], [-54.491, -27.475], [-53.649, -26.923], [-53.628, -26.125], [-54.13, -25.548], [-54.625, -25.739], [-54.429, -25.162], [-54.293, -24.571], [-54.293, -24.021], [-54.653, -23.84], [-55.028, -24.001], [-55.401, -23.957], [-55.518, -23.572], [-55.611, -22.656], [-55.798, -22.357], [-56.473, -22.086], [-56.882, -22.282], [-57.937, -22.09], [-57.871, -20.733], [-58.166, -20.177], [-57.854, -19.97], [-57.95, -19.4], [-57.676, -18.962], [-57.498, -18.174], [-57.735, -17.552], [-58.281, -17.272], [-58.388, -16.877], [-58.241, -16.3], [-60.158, -16.258], [-60.543, -15.094], [-60.251, -15.077], [-60.264, -14.646], [-60.459, -14.354], [-60.503, -13.776], [-61.084, -13.479], [-61.713, -13.489], [-62.127, -13.199], [-62.803, -13.001], [-63.196, -12.627], [-64.316, -12.462], [-65.402, -11.566], [-65.322, -10.896], [-65.445, -10.511], [-65.338, -9.762], [-66.647, -9.931], [-67.174, -10.307], [-68.048, -10.712], [-68.271, -11.015], [-68.786, -11.036], [-69.53, -10.952], [-70.094, -11.124], [-70.549, -11.009], [-70.482, -9.49], [-71.302, -10.079], [-72.185, -10.054], [-72.563, -9.52], [-73.227, -9.462], [-73.015, -9.033], [-73.571, -8.424], [-73.987, -7.524], [-73.723, -7.341], [-73.724, -6.919], [-73.12, -6.63], [-73.22, -6.089], [-72.965, -5.741], [-72.892, -5.275], [-71.748, -4.594], [-70.929, -4.402], [-70.795, -4.251], [-69.894, -4.298], [-69.444, -1.556], [-69.42, -1.123], [-69.577, -0.55], [-70.021, -0.185], [-70.016, 0.541], [-69.452, 0.706], [-69.252, 0.603], [-69.219, 0.986], [-69.805, 1.089], [-69.817, 1.715], [-67.869, 1.692], [-67.538, 2.037], [-67.26, 1.72], [-67.065, 1.13], [-66.876, 1.253], [-66.326, 0.724], [-65.548, 0.789], [-65.355, 1.095], [-64.611, 1.329], [-64.199, 1.493], [-64.083, 1.916], [-63.369, 2.201], [-63.423, 2.411], [-64.27, 2.497], [-64.409, 3.127], [-64.368, 3.797], [-64.816, 4.056], [-64.629, 4.148], [-63.888, 4.021], [-63.093, 3.771], [-62.805, 4.007], [-62.085, 4.162], [-60.967, 4.536], [-60.601, 4.918], [-60.734, 5.2], [-60.214, 5.244], [-59.981, 5.014], [-60.111, 4.575], [-59.767, 4.424], [-59.538, 3.959], [-59.815, 3.606], [-59.975, 2.755], [-59.719, 2.25], [-59.646, 1.787], [-59.031, 1.318], [-58.54, 1.268], [-58.429, 1.464], [-58.113, 1.507], [-57.661, 1.683], [-57.336, 1.949], [-56.783, 1.864], [-56.539, 1.9], [-55.996, 1.818], [-55.906, 2.022], [-56.073, 2.221], [-55.973, 2.51], [-55.57, 2.422], [-55.098, 2.524], [-54.525, 2.312], [-54.088, 2.106], [-53.779, 2.377], [-53.555, 2.335], [-53.418, 2.053], [-52.94, 2.125], [-52.556, 2.505], [-52.249, 3.241], [-51.658, 4.156], [-51.317, 4.203], [-51.07, 3.65], [-50.509, 1.902], [-49.974, 1.736], [-49.947, 1.046], [-50.699, 0.223], [-50.388, -0.078], [-48.621, -0.235], [-48.584, -1.238], [-47.825, -0.582], [-46.567, -0.941], [-44.906, -1.552], [-44.418, -2.138], [-44.582, -2.691], [-43.419, -2.383], [-41.473, -2.912], [-39.979, -2.873], [-38.5, -3.701], [-37.223, -4.821], [-36.453, -5.109], [-35.598, -5.15], [-35.235, -5.465], [-34.896, -6.738], [-34.73, -7.343], [-35.128, -8.996], [-35.637, -9.649], [-37.047, -11.041], [-37.684, -12.171], [-38.424, -13.038], [-38.674, -13.058], [-38.953, -13.793], [-38.882, -15.667], [-39.161, -17.208], [-39.267, -17.868], [-39.584, -18.262], [-39.761, -19.599], [-40.775, -20.905], [-40.945, -21.937], [-41.754, -22.371], [-41.988, -22.97], [-43.075, -22.968], [-44.648, -23.352], [-45.352, -23.797], [-46.472, -24.089], [-47.649, -24.885], [-48.495, -25.877], [-48.641, -26.624], [-48.475, -27.176], [-48.662, -28.186], [-48.888, -28.674], [-49.587, -29.224], [-50.697, -30.984], [-51.576, -31.778], [-52.256, -32.245], [-52.712, -33.197], [-53.374, -33.768]]]] }, { "N": "Bolivia", "I": "BO", "C": [[[[-69.53, -10.952], [-68.786, -11.036], [-68.271, -11.015], [-68.048, -10.712], [-67.174, -10.307], [-66.647, -9.931], [-65.338, -9.762], [-65.445, -10.511], [-65.322, -10.896], [-65.402, -11.566], [-64.316, -12.462], [-63.196, -12.627], [-62.803, -13.001], [-62.127, -13.199], [-61.713, -13.489], [-61.084, -13.479], [-60.503, -13.776], [-60.459, -14.354], [-60.264, -14.646], [-60.251, -15.077], [-60.543, -15.094], [-60.158, -16.258], [-58.241, -16.3], [-58.388, -16.877], [-58.281, -17.272], [-57.735, -17.552], [-57.498, -18.174], [-57.676, -18.962], [-57.95, -19.4], [-57.854, -19.97], [-58.166, -20.177], [-58.183, -19.868], [-59.115, -19.357], [-60.044, -19.343], [-61.786, -19.634], [-62.266, -20.514], [-62.291, -21.052], [-62.685, -22.249], [-62.846, -22.035], [-63.987, -21.994], [-64.377, -22.798], [-64.965, -22.076], [-66.273, -21.832], [-67.107, -22.736], [-67.828, -22.873], [-68.22, -21.494], [-68.757, -20.373], [-68.442, -19.405], [-68.967, -18.982], [-69.1, -18.26], [-69.59, -17.58], [-68.96, -16.501], [-69.39, -15.66], [-69.16, -15.324], [-69.34, -14.953], [-68.949, -14.454], [-68.929, -13.603], [-68.88, -12.9], [-68.665, -12.561], [-69.53, -10.952]]]] }, { "N": "Peru", "I": "PE", "C": [[[[-69.894, -4.298], [-70.795, -4.251], [-70.929, -4.402], [-71.748, -4.594], [-72.892, -5.275], [-72.965, -5.741], [-73.22, -6.089], [-73.12, -6.63], [-73.724, -6.919], [-73.723, -7.341], [-73.987, -7.524], [-73.571, -8.424], [-73.015, -9.033], [-73.227, -9.462], [-72.563, -9.52], [-72.185, -10.054], [-71.302, -10.079], [-70.482, -9.49], [-70.549, -11.009], [-70.094, -11.124], [-69.53, -10.952], [-68.665, -12.561], [-68.88, -12.9], [-68.929, -13.603], [-68.949, -14.454], [-69.34, -14.953], [-69.16, -15.324], [-69.39, -15.66], [-68.96, -16.501], [-69.59, -17.58], [-69.858, -18.093], [-70.373, -18.348], [-71.375, -17.774], [-71.462, -17.363], [-73.445, -16.359], [-75.238, -15.266], [-76.009, -14.649], [-76.423, -13.823], [-76.259, -13.535], [-77.106, -12.223], [-78.092, -10.378], [-79.037, -8.387], [-79.446, -7.931], [-79.761, -7.194], [-80.537, -6.542], [-81.25, -6.137], [-80.926, -5.691], [-81.411, -4.737], [-81.1, -4.036], [-80.303, -3.405], [-80.184, -3.821], [-80.469, -4.059], [-80.442, -4.426], [-80.029, -4.346], [-79.625, -4.454], [-79.205, -4.959], [-78.64, -4.548], [-78.451, -3.873], [-77.838, -3.003], [-76.635, -2.609], [-75.545, -1.562], [-75.234, -0.911], [-75.373, -0.152], [-75.107, -0.057], [-74.442, -0.531], [-74.122, -1.003], [-73.66, -1.26], [-73.07, -2.309], [-72.326, -2.434], [-71.775, -2.17], [-71.414, -2.343], [-70.813, -2.257], [-70.048, -2.725], [-70.693, -3.743], [-70.394, -3.767], [-69.894, -4.298]]]] }, { "N": "Colombia", "I": "CO", "C": [[[[-66.876, 1.253], [-67.065, 1.13], [-67.26, 1.72], [-67.538, 2.037], [-67.869, 1.692], [-69.817, 1.715], [-69.805, 1.089], [-69.219, 0.986], [-69.252, 0.603], [-69.452, 0.706], [-70.016, 0.541], [-70.021, -0.185], [-69.577, -0.55], [-69.42, -1.123], [-69.444, -1.556], [-69.894, -4.298], [-70.394, -3.767], [-70.693, -3.743], [-70.048, -2.725], [-70.813, -2.257], [-71.414, -2.343], [-71.775, -2.17], [-72.326, -2.434], [-73.07, -2.309], [-73.66, -1.26], [-74.122, -1.003], [-74.442, -0.531], [-75.107, -0.057], [-75.373, -0.152], [-75.801, 0.085], [-76.292, 0.416], [-76.576, 0.257], [-77.425, 0.396], [-77.669, 0.826], [-77.855, 0.81], [-78.855, 1.381], [-78.991, 1.691], [-78.618, 1.766], [-78.662, 2.267], [-78.428, 2.63], [-77.932, 2.697], [-77.51, 3.325], [-77.128, 3.85], [-77.496, 4.088], [-77.308, 4.668], [-77.533, 5.583], [-77.319, 5.845], [-77.477, 6.691], [-77.882, 7.224], [-77.753, 7.71], [-77.431, 7.638], [-77.243, 7.935], [-77.475, 8.524], [-77.353, 8.671], [-76.837, 8.639], [-76.086, 9.337], [-75.675, 9.443], [-75.665, 9.774], [-75.48, 10.619], [-74.907, 11.083], [-74.277, 11.102], [-74.197, 11.31], [-73.415, 11.227], [-72.628, 11.732], [-72.238, 11.956], [-71.754, 12.437], [-71.4, 12.376], [-71.137, 12.113], [-71.332, 11.776], [-71.974, 11.609], [-72.228, 11.109], [-72.615, 10.822], [-72.905, 10.45], [-73.028, 9.737], [-73.305, 9.152], [-72.789, 9.085], [-72.66, 8.625], [-72.44, 8.405], [-72.361, 8.003], [-72.48, 7.633], [-72.444, 7.424], [-72.198, 7.34], [-71.96, 6.992], [-70.674, 7.088], [-70.093, 6.96], [-69.389, 6.1], [-68.985, 6.207], [-68.265, 6.153], [-67.695, 6.267], [-67.341, 6.095], [-67.522, 5.557], [-67.745, 5.221], [-67.823, 4.504], [-67.622, 3.839], [-67.338, 3.542], [-67.303, 3.318], [-67.81, 2.821], [-67.447, 2.6], [-67.181, 2.251], [-66.876, 1.253]]]] }, { "N": "Panama", "I": "PA", "C": [[[[-77.353, 8.671], [-77.475, 8.524], [-77.243, 7.935], [-77.431, 7.638], [-77.753, 7.71], [-77.882, 7.224], [-78.215, 7.512], [-78.429, 8.052], [-78.182, 8.319], [-78.435, 8.388], [-78.622, 8.718], [-79.12, 8.996], [-79.558, 8.932], [-79.761, 8.585], [-80.164, 8.333], [-80.383, 8.298], [-80.481, 8.09], [-80.004, 7.548], [-80.277, 7.42], [-80.421, 7.272], [-80.886, 7.221], [-81.06, 7.818], [-81.19, 7.648], [-81.52, 7.707], [-81.721, 8.109], [-82.131, 8.175], [-82.391, 8.292], [-82.82, 8.291], [-82.851, 8.074], [-82.966, 8.225], [-82.913, 8.424], [-82.83, 8.626], [-82.869, 8.807], [-82.719, 8.926], [-82.927, 9.074], [-82.933, 9.477], [-82.546, 9.566], [-82.187, 9.207], [-82.208, 8.996], [-81.809, 8.951], [-81.714, 9.032], [-81.439, 8.786], [-80.947, 8.859], [-80.522, 9.111], [-79.915, 9.313], [-79.573, 9.612], [-79.021, 9.553], [-79.058, 9.455], [-78.501, 9.42], [-78.056, 9.248], [-77.73, 8.947], [-77.353, 8.671]]]] }, { "N": "Costa Rica", "I": "CR", "C": [[[[-82.546, 9.566], [-82.933, 9.477], [-82.927, 9.074], [-82.719, 8.926], [-82.869, 8.807], [-82.83, 8.626], [-82.913, 8.424], [-82.966, 8.225], [-83.508, 8.447], [-83.711, 8.657], [-83.596, 8.83], [-83.633, 9.051], [-83.91, 9.291], [-84.303, 9.487], [-84.648, 9.616], [-84.713, 9.908], [-84.976, 10.087], [-84.911, 9.796], [-85.111, 9.557], [-85.339, 9.835], [-85.661, 9.933], [-85.797, 10.135], [-85.792, 10.439], [-85.659, 10.754], [-85.942, 10.895], [-85.713, 11.088], [-85.562, 11.217], [-84.903, 10.952], [-84.673, 11.083], [-84.356, 10.999], [-84.19, 10.793], [-83.895, 10.727], [-83.656, 10.939], [-83.402, 10.395], [-83.016, 9.993], [-82.546, 9.566]]]] }, { "N": "Nicaragua", "I": "NI", "C": [[[[-83.656, 10.939], [-83.895, 10.727], [-84.19, 10.793], [-84.356, 10.999], [-84.673, 11.083], [-84.903, 10.952], [-85.562, 11.217], [-85.713, 11.088], [-86.058, 11.403], [-86.526, 11.807], [-86.746, 12.144], [-87.168, 12.458], [-87.668, 12.91], [-87.557, 13.065], [-87.392, 12.914], [-87.317, 12.985], [-87.006, 13.026], [-86.881, 13.254], [-86.734, 13.263], [-86.755, 13.755], [-86.521, 13.778], [-86.312, 13.771], [-86.096, 14.038], [-85.801, 13.836], [-85.699, 13.96], [-85.514, 14.079], [-85.165, 14.354], [-85.149, 14.56], [-85.053, 14.552], [-84.925, 14.79], [-84.82, 14.82], [-84.65, 14.667], [-84.449, 14.622], [-84.228, 14.749], [-83.976, 14.749], [-83.629, 14.88], [-83.49, 15.016], [-83.147, 14.996], [-83.233, 14.9], [-83.284, 14.677], [-83.182, 14.311], [-83.412, 13.97], [-83.52, 13.568], [-83.552, 13.127], [-83.499, 12.869], [-83.473, 12.419], [-83.626, 12.321], [-83.72, 11.893], [-83.651, 11.629], [-83.855, 11.373], [-83.809, 11.103], [-83.656, 10.939]]]] }, { "N": "Honduras", "I": "HN", "C": [[[[-83.147, 14.996], [-83.49, 15.016], [-83.629, 14.88], [-83.976, 14.749], [-84.228, 14.749], [-84.449, 14.622], [-84.65, 14.667], [-84.82, 14.82], [-84.925, 14.79], [-85.053, 14.552], [-85.149, 14.56], [-85.165, 14.354], [-85.514, 14.079], [-85.699, 13.96], [-85.801, 13.836], [-86.096, 14.038], [-86.312, 13.771], [-86.521, 13.778], [-86.755, 13.755], [-86.734, 13.263], [-86.881, 13.254], [-87.006, 13.026], [-87.317, 12.985], [-87.489, 13.298], [-87.793, 13.384], [-87.724, 13.785], [-87.86, 13.893], [-88.065, 13.965], [-88.504, 13.845], [-88.541, 13.98], [-88.843, 14.141], [-89.059, 14.34], [-89.353, 14.424], [-89.146, 14.678], [-89.225, 14.874], [-89.155, 15.066], [-88.681, 15.346], [-88.225, 15.728], [-88.121, 15.689], [-87.902, 15.864], [-87.616, 15.879], [-87.523, 15.797], [-87.368, 15.847], [-86.903, 15.757], [-86.441, 15.783], [-86.119, 15.893], [-86.002, 16.005], [-85.683, 15.954], [-85.444, 15.886], [-85.182, 15.909], [-84.984, 15.996], [-84.527, 15.857], [-84.368, 15.835], [-84.063, 15.648], [-83.774, 15.424], [-83.41, 15.271], [-83.147, 14.996]]]] }, { "N": "El Salvador", "I": "SV", "C": [[[[-89.353, 14.424], [-89.059, 14.34], [-88.843, 14.141], [-88.541, 13.98], [-88.504, 13.845], [-88.065, 13.965], [-87.86, 13.893], [-87.724, 13.785], [-87.793, 13.384], [-87.904, 13.149], [-88.483, 13.164], [-88.843, 13.26], [-89.257, 13.459], [-89.812, 13.521], [-90.096, 13.735], [-90.065, 13.882], [-89.722, 14.134], [-89.534, 14.245], [-89.587, 14.363], [-89.353, 14.424]]]] }, { "N": "Guatemala", "I": "GT", "C": [[[[-92.228, 14.539], [-92.203, 14.83], [-92.087, 15.065], [-92.229, 15.251], [-91.748, 16.067], [-90.464, 16.07], [-90.439, 16.41], [-90.601, 16.471], [-90.712, 16.687], [-91.082, 16.918], [-91.454, 17.252], [-91.002, 17.255], [-91.002, 17.818], [-90.068, 17.819], [-89.143, 17.808], [-89.151, 17.016], [-89.229, 15.887], [-88.931, 15.887], [-88.605, 15.706], [-88.518, 15.855], [-88.225, 15.728], [-88.681, 15.346], [-89.155, 15.066], [-89.225, 14.874], [-89.146, 14.678], [-89.353, 14.424], [-89.587, 14.363], [-89.534, 14.245], [-89.722, 14.134], [-90.065, 13.882], [-90.096, 13.735], [-90.609, 13.91], [-91.232, 13.928], [-91.69, 14.126], [-92.228, 14.539]]]] }, { "N": "Belize", "I": "BZ", "C": [[[[-89.143, 17.808], [-89.151, 17.955], [-89.03, 18.002], [-88.848, 17.883], [-88.49, 18.487], [-88.3, 18.5], [-88.296, 18.353], [-88.107, 18.349], [-88.123, 18.077], [-88.285, 17.644], [-88.198, 17.489], [-88.303, 17.132], [-88.24, 17.036], [-88.355, 16.531], [-88.552, 16.265], [-88.732, 16.234], [-88.931, 15.887], [-89.229, 15.887], [-89.151, 17.016], [-89.143, 17.808]]]] }, { "N": "Venezuela", "I": "VE", "C": [[[[-60.734, 5.2], [-60.601, 4.918], [-60.967, 4.536], [-62.085, 4.162], [-62.805, 4.007], [-63.093, 3.771], [-63.888, 4.021], [-64.629, 4.148], [-64.816, 4.056], [-64.368, 3.797], [-64.409, 3.127], [-64.27, 2.497], [-63.423, 2.411], [-63.369, 2.201], [-64.083, 1.916], [-64.199, 1.493], [-64.611, 1.329], [-65.355, 1.095], [-65.548, 0.789], [-66.326, 0.724], [-66.876, 1.253], [-67.181, 2.251], [-67.447, 2.6], [-67.81, 2.821], [-67.303, 3.318], [-67.338, 3.542], [-67.622, 3.839], [-67.823, 4.504], [-67.745, 5.221], [-67.522, 5.557], [-67.341, 6.095], [-67.695, 6.267], [-68.265, 6.153], [-68.985, 6.207], [-69.389, 6.1], [-70.093, 6.96], [-70.674, 7.088], [-71.96, 6.992], [-72.198, 7.34], [-72.444, 7.424], [-72.48, 7.633], [-72.361, 8.003], [-72.44, 8.405], [-72.66, 8.625], [-72.789, 9.085], [-73.305, 9.152], [-73.028, 9.737], [-72.905, 10.45], [-72.615, 10.822], [-72.228, 11.109], [-71.974, 11.609], [-71.332, 11.776], [-71.36, 11.54], [-71.947, 11.423], [-71.621, 10.969], [-71.633, 10.446], [-72.074, 9.866], [-71.696, 9.072], [-71.265, 9.137], [-71.04, 9.86], [-71.35, 10.212], [-71.401, 10.969], [-70.155, 11.375], [-70.294, 11.847], [-69.943, 12.162], [-69.584, 11.46], [-68.883, 11.443], [-68.233, 10.886], [-68.194, 10.555], [-67.296, 10.546], [-66.228, 10.649], [-65.655, 10.201], [-64.89, 10.077], [-64.329, 10.39], [-64.318, 10.641], [-63.079, 10.702], [-61.881, 10.716], [-62.73, 10.42], [-62.389, 9.948], [-61.589, 9.873], [-60.831, 9.381], [-60.671, 8.58], [-60.15, 8.603], [-59.758, 8.367], [-60.551, 7.78], [-60.638, 7.415], [-60.296, 7.044], [-60.544, 6.857], [-61.159, 6.696], [-61.139, 6.234], [-61.41, 5.959], [-60.734, 5.2]]]] }, { "N": "Guyana", "I": "GY", "C": [[[[-56.539, 1.9], [-56.783, 1.864], [-57.336, 1.949], [-57.661, 1.683], [-58.113, 1.507], [-58.429, 1.464], [-58.54, 1.268], [-59.031, 1.318], [-59.646, 1.787], [-59.719, 2.25], [-59.975, 2.755], [-59.815, 3.606], [-59.538, 3.959], [-59.767, 4.424], [-60.111, 4.575], [-59.981, 5.014], [-60.214, 5.244], [-60.734, 5.2], [-61.41, 5.959], [-61.139, 6.234], [-61.159, 6.696], [-60.544, 6.857], [-60.296, 7.044], [-60.638, 7.415], [-60.551, 7.78], [-59.758, 8.367], [-59.102, 7.999], [-58.483, 7.348], [-58.455, 6.833], [-58.078, 6.809], [-57.542, 6.321], [-57.147, 5.973], [-57.307, 5.074], [-57.914, 4.813], [-57.86, 4.577], [-58.045, 4.061], [-57.602, 3.335], [-57.281, 3.333], [-57.15, 2.769], [-56.539, 1.9]]]] }, { "N": "Suriname", "I": "SR", "C": [[[[-54.525, 2.312], [-55.098, 2.524], [-55.57, 2.422], [-55.973, 2.51], [-56.073, 2.221], [-55.906, 2.022], [-55.996, 1.818], [-56.539, 1.9], [-57.15, 2.769], [-57.281, 3.333], [-57.602, 3.335], [-58.045, 4.061], [-57.86, 4.577], [-57.914, 4.813], [-57.307, 5.074], [-57.147, 5.973], [-55.949, 5.773], [-55.842, 5.953], [-55.033, 6.025], [-53.958, 5.757], [-54.479, 4.897], [-54.4, 4.213], [-54.007, 3.62], [-54.182, 3.19], [-54.27, 2.732], [-54.525, 2.312]]]] }, { "N": "France", "I": "FR", "C": [[[[-51.658, 4.156], [-52.249, 3.241], [-52.556, 2.505], [-52.94, 2.125], [-53.418, 2.053], [-53.555, 2.335], [-53.779, 2.377], [-54.088, 2.106], [-54.525, 2.312], [-54.27, 2.732], [-54.182, 3.19], [-54.007, 3.62], [-54.4, 4.213], [-54.479, 4.897], [-53.958, 5.757], [-53.618, 5.647], [-52.882, 5.41], [-51.823, 4.566], [-51.658, 4.156]]], [[[8.746, 42.628], [9.39, 43.01], [9.56, 42.152], [9.23, 41.38], [8.776, 41.584], [8.544, 42.257], [8.746, 42.628]]], [[[6.186, 49.464], [6.658, 49.202], [8.099, 49.018], [7.594, 48.333], [7.467, 47.621], [7.192, 47.45], [6.737, 47.542], [6.769, 47.288], [6.037, 46.726], [6.023, 46.273], [6.5, 46.43], [6.844, 45.991], [6.802, 45.709], [7.097, 45.333], [6.75, 45.029], [7.008, 44.255], [7.55, 44.128], [7.435, 43.694], [6.529, 43.129], [4.557, 43.4], [3.1, 43.075], [2.986, 42.473], [1.827, 42.343], [0.702, 42.796], [0.338, 42.58], [-1.503, 43.034], [-1.901, 43.423], [-1.384, 44.023], [-1.194, 46.015], [-2.226, 47.064], [-2.963, 47.57], [-4.492, 47.955], [-4.592, 48.684], [-3.296, 48.902], [-1.617, 48.644], [-1.933, 49.776], [-0.989, 49.347], [1.339, 50.127], [1.639, 50.947], [2.514, 51.149], [2.658, 50.797], [3.123, 50.78], [3.588, 50.379], [4.286, 49.907], [4.799, 49.985], [5.674, 49.529], [5.898, 49.443], [6.186, 49.464]]], [[[8.746, 42.628], [9.39, 43.01], [9.56, 42.152], [9.23, 41.38], [8.776, 41.584], [8.544, 42.257], [8.746, 42.628]]]] }, { "N": "Ecuador", "I": "EC", "C": [[[[-75.373, -0.152], [-75.234, -0.911], [-75.545, -1.562], [-76.635, -2.609], [-77.838, -3.003], [-78.451, -3.873], [-78.64, -4.548], [-79.205, -4.959], [-79.625, -4.454], [-80.029, -4.346], [-80.442, -4.426], [-80.469, -4.059], [-80.184, -3.821], [-80.303, -3.405], [-79.77, -2.658], [-79.987, -2.221], [-80.369, -2.685], [-80.968, -2.247], [-80.765, -1.965], [-80.934, -1.057], [-80.583, -0.907], [-80.399, -0.284], [-80.021, 0.36], [-80.091, 0.768], [-79.543, 0.983], [-78.855, 1.381], [-77.855, 0.81], [-77.669, 0.826], [-77.425, 0.396], [-76.576, 0.257], [-76.292, 0.416], [-75.801, 0.085], [-75.373, -0.152]]]] }, { "N": "Puerto Rico", "I": "PR", "C": [[[[-66.282, 18.515], [-65.771, 18.427], [-65.591, 18.228], [-65.847, 17.976], [-66.6, 17.982], [-67.184, 17.947], [-67.242, 18.374], [-67.101, 18.521], [-66.282, 18.515]]]] }, { "N": "Jamaica", "I": "JM", "C": [[[[-77.57, 18.491], [-76.897, 18.401], [-76.365, 18.161], [-76.2, 17.887], [-76.903, 17.868], [-77.206, 17.701], [-77.766, 17.862], [-78.338, 18.226], [-78.218, 18.455], [-77.797, 18.524], [-77.57, 18.491]]]] }, { "N": "Cuba", "I": "CU", "C": [[[[-82.268, 23.189], [-81.404, 23.117], [-80.619, 23.106], [-79.68, 22.765], [-79.281, 22.399], [-78.347, 22.512], [-77.993, 22.277], [-77.146, 21.658], [-76.524, 21.207], [-76.195, 21.221], [-75.598, 21.017], [-75.671, 20.735], [-74.934, 20.694], [-74.178, 20.285], [-74.297, 20.05], [-74.962, 19.923], [-75.635, 19.874], [-76.324, 19.953], [-77.755, 19.855], [-77.085, 20.413], [-77.493, 20.673], [-78.137, 20.74], [-78.483, 21.029], [-78.72, 21.598], [-79.285, 21.559], [-80.217, 21.827], [-80.518, 22.037], [-81.821, 22.192], [-82.17, 22.387], [-81.795, 22.637], [-82.776, 22.688], [-83.494, 22.169], [-83.909, 22.155], [-84.052, 21.911], [-84.547, 21.801], [-84.975, 21.896], [-84.447, 22.205], [-84.23, 22.566], [-83.778, 22.788], [-83.268, 22.983], [-82.51, 23.079], [-82.268, 23.189]]]] }, { "N": "Zimbabwe", "I": "ZW", "C": [[[[31.191, -22.252], [30.66, -22.152], [30.323, -22.272], [29.839, -22.102], [29.432, -22.091], [28.795, -21.639], [28.021, -21.486], [27.727, -20.852], [27.725, -20.499], [27.297, -20.392], [26.165, -19.293], [25.85, -18.714], [25.649, -18.536], [25.264, -17.737], [26.382, -17.846], [26.707, -17.961], [27.044, -17.938], [27.598, -17.291], [28.468, -16.468], [28.826, -16.39], [28.947, -16.043], [29.517, -15.645], [30.274, -15.508], [30.339, -15.881], [31.173, -15.861], [31.636, -16.072], [31.852, -16.319], [32.328, -16.392], [32.848, -16.713], [32.85, -17.979], [32.655, -18.672], [32.612, -19.419], [32.773, -19.716], [32.66, -20.304], [32.509, -20.395], [32.245, -21.116], [31.191, -22.252]]]] }, { "N": "Botswana", "I": "BW", "C": [[[[29.432, -22.091], [28.017, -22.828], [27.119, -23.574], [26.786, -24.241], [26.486, -24.616], [25.942, -24.696], [25.766, -25.175], [25.665, -25.487], [25.025, -25.72], [24.211, -25.67], [23.734, -25.39], [23.312, -25.269], [22.824, -25.5], [22.58, -25.979], [22.106, -26.28], [21.606, -26.727], [20.89, -26.829], [20.666, -26.477], [20.759, -25.868], [20.166, -24.918], [19.896, -24.768], [19.895, -21.849], [20.881, -21.814], [20.911, -18.252], [21.655, -18.219], [23.197, -17.869], [23.579, -18.281], [24.217, -17.889], [24.521, -17.887], [25.084, -17.662], [25.264, -17.737], [25.649, -18.536], [25.85, -18.714], [26.165, -19.293], [27.297, -20.392], [27.725, -20.499], [27.727, -20.852], [28.021, -21.486], [28.795, -21.639], [29.432, -22.091]]]] }, { "N": "Namibia", "I": "NA", "C": [[[[19.896, -24.768], [19.895, -28.461], [19.002, -28.972], [18.465, -29.045], [17.836, -28.856], [17.387, -28.784], [17.219, -28.356], [16.824, -28.082], [16.345, -28.577], [15.602, -27.821], [15.21, -27.091], [14.99, -26.117], [14.743, -25.393], [14.408, -23.853], [14.386, -22.657], [14.258, -22.111], [13.869, -21.699], [13.352, -20.873], [12.827, -19.673], [12.609, -19.045], [11.795, -18.069], [11.734, -17.302], [12.215, -17.112], [12.814, -16.941], [13.462, -16.971], [14.059, -17.423], [14.21, -17.353], [18.263, -17.31], [18.956, -17.789], [21.377, -17.931], [23.215, -17.523], [24.034, -17.296], [24.682, -17.353], [25.077, -17.579], [25.084, -17.662], [24.521, -17.887], [24.217, -17.889], [23.579, -18.281], [23.197, -17.869], [21.655, -18.219], [20.911, -18.252], [20.881, -21.814], [19.895, -21.849], [19.896, -24.768]]]] }, { "N": "Senegal", "I": "SN", "C": [[[[-16.714, 13.595], [-17.126, 14.374], [-17.625, 14.73], [-17.185, 14.919], [-16.701, 15.622], [-16.463, 16.135], [-16.121, 16.456], [-15.624, 16.369], [-15.136, 16.587], [-14.577, 16.598], [-14.1, 16.304], [-13.436, 16.039], [-12.831, 15.304], [-12.171, 14.617], [-12.125, 13.995], [-11.928, 13.422], [-11.553, 13.141], [-11.468, 12.755], [-11.514, 12.443], [-11.658, 12.387], [-12.204, 12.466], [-12.279, 12.354], [-12.499, 12.332], [-13.218, 12.576], [-13.7, 12.586], [-15.548, 12.628], [-15.817, 12.516], [-16.148, 12.548], [-16.677, 12.385], [-16.842, 13.151], [-15.931, 13.13], [-15.691, 13.27], [-15.512, 13.279], [-15.141, 13.51], [-14.712, 13.298], [-14.278, 13.281], [-13.845, 13.505], [-14.047, 13.794], [-14.377, 13.626], [-14.687, 13.63], [-15.082, 13.876], [-15.399, 13.86], [-15.625, 13.624], [-16.714, 13.595]]]] }, { "N": "Mali", "I": "ML", "C": [[[[-11.514, 12.443], [-11.468, 12.755], [-11.553, 13.141], [-11.928, 13.422], [-12.125, 13.995], [-12.171, 14.617], [-11.834, 14.799], [-11.666, 15.388], [-11.349, 15.411], [-10.651, 15.133], [-10.087, 15.33], [-9.7, 15.264], [-9.55, 15.486], [-5.538, 15.502], [-5.315, 16.202], [-5.489, 16.325], [-5.971, 20.641], [-6.454, 24.957], [-4.923, 24.975], [-1.55, 22.793], [1.823, 20.611], [2.061, 20.142], [2.684, 19.856], [3.147, 19.694], [3.158, 19.057], [4.267, 19.155], [4.27, 16.852], [3.723, 16.184], [3.638, 15.568], [2.75, 15.41], [1.386, 15.324], [1.016, 14.968], [0.375, 14.929], [-0.266, 14.924], [-0.516, 15.116], [-1.066, 14.974], [-2.001, 14.559], [-2.192, 14.246], [-2.968, 13.798], [-3.104, 13.541], [-3.523, 13.338], [-4.006, 13.472], [-4.28, 13.228], [-4.427, 12.543], [-5.221, 11.714], [-5.198, 11.375], [-5.471, 10.951], [-5.404, 10.371], [-5.817, 10.223], [-6.05, 10.096], [-6.205, 10.524], [-6.494, 10.411], [-6.666, 10.431], [-6.851, 10.139], [-7.623, 10.147], [-7.9, 10.297], [-8.03, 10.207], [-8.335, 10.495], [-8.282, 10.793], [-8.407, 10.909], [-8.62, 10.811], [-8.581, 11.136], [-8.376, 11.394], [-8.786, 11.813], [-8.905, 12.088], [-9.127, 12.308], [-9.328, 12.334], [-9.568, 12.194], [-9.891, 12.06], [-10.165, 11.844], [-10.593, 11.924], [-10.871, 12.178], [-11.037, 12.211], [-11.298, 12.078], [-11.456, 12.077], [-11.514, 12.443]]]] }, { "N": "Mauritania", "I": "MR", "C": [[[[-17.063, 21], [-16.845, 21.333], [-12.929, 21.327], [-13.119, 22.771], [-12.874, 23.285], [-11.937, 23.375], [-11.969, 25.933], [-8.687, 25.881], [-8.684, 27.396], [-4.923, 24.975], [-6.454, 24.957], [-5.971, 20.641], [-5.489, 16.325], [-5.315, 16.202], [-5.538, 15.502], [-9.55, 15.486], [-9.7, 15.264], [-10.087, 15.33], [-10.651, 15.133], [-11.349, 15.411], [-11.666, 15.388], [-11.834, 14.799], [-12.171, 14.617], [-12.831, 15.304], [-13.436, 16.039], [-14.1, 16.304], [-14.577, 16.598], [-15.136, 16.587], [-15.624, 16.369], [-16.121, 16.456], [-16.463, 16.135], [-16.55, 16.674], [-16.271, 17.167], [-16.146, 18.108], [-16.257, 19.097], [-16.378, 19.594], [-16.278, 20.093], [-16.536, 20.568], [-17.063, 21]]]] }, { "N": "Benin", "I": "BJ", "C": [[[[2.692, 6.259], [1.865, 6.142], [1.619, 6.832], [1.664, 9.129], [1.463, 9.335], [1.425, 9.825], [1.078, 10.176], [0.772, 10.471], [0.9, 10.997], [1.243, 11.111], [1.447, 11.548], [1.936, 11.641], [2.154, 11.94], [2.49, 12.233], [2.849, 12.236], [3.611, 11.66], [3.572, 11.328], [3.797, 10.735], [3.6, 10.332], [3.705, 10.063], [3.22, 9.444], [2.912, 9.138], [2.724, 8.507], [2.749, 7.871], [2.692, 6.259]]]] }, { "N": "Niger", "I": "NE", "C": [[[[14.851, 22.863], [15.097, 21.309], [15.471, 21.048], [15.487, 20.73], [15.903, 20.388], [15.686, 19.957], [15.3, 17.928], [15.248, 16.627], [13.972, 15.684], [13.54, 14.367], [13.957, 13.997], [13.954, 13.353], [14.596, 13.33], [14.496, 12.859], [14.214, 12.802], [14.181, 12.484], [13.995, 12.462], [13.319, 13.556], [13.084, 13.596], [12.302, 13.037], [11.528, 13.329], [10.99, 13.387], [10.701, 13.247], [10.115, 13.277], [9.525, 12.851], [9.015, 12.827], [7.805, 13.344], [7.331, 13.098], [6.82, 13.115], [6.445, 13.493], [5.443, 13.866], [4.368, 13.747], [4.108, 13.531], [3.967, 12.956], [3.681, 12.553], [3.611, 11.66], [2.849, 12.236], [2.49, 12.233], [2.154, 11.94], [2.177, 12.625], [1.024, 12.852], [0.993, 13.336], [0.43, 13.989], [0.296, 14.444], [0.375, 14.929], [1.016, 14.968], [1.386, 15.324], [2.75, 15.41], [3.638, 15.568], [3.723, 16.184], [4.27, 16.852], [4.267, 19.155], [5.678, 19.601], [8.573, 21.566], [12, 23.472], [13.581, 23.041], [14.144, 22.491], [14.851, 22.863]]]] }, { "N": "Nigeria", "I": "NG", "C": [[[[2.692, 6.259], [2.749, 7.871], [2.724, 8.507], [2.912, 9.138], [3.22, 9.444], [3.705, 10.063], [3.6, 10.332], [3.797, 10.735], [3.572, 11.328], [3.611, 11.66], [3.681, 12.553], [3.967, 12.956], [4.108, 13.531], [4.368, 13.747], [5.443, 13.866], [6.445, 13.493], [6.82, 13.115], [7.331, 13.098], [7.805, 13.344], [9.015, 12.827], [9.525, 12.851], [10.115, 13.277], [10.701, 13.247], [10.99, 13.387], [11.528, 13.329], [12.302, 13.037], [13.084, 13.596], [13.319, 13.556], [13.995, 12.462], [14.181, 12.484], [14.577, 12.085], [14.468, 11.905], [14.415, 11.572], [13.573, 10.799], [13.309, 10.16], [13.168, 9.641], [12.955, 9.418], [12.754, 8.718], [12.219, 8.306], [12.064, 7.8], [11.839, 7.397], [11.746, 6.981], [11.059, 6.644], [10.497, 7.055], [10.118, 7.039], [9.523, 6.453], [9.233, 6.444], [8.758, 5.48], [8.5, 4.772], [7.462, 4.412], [7.083, 4.465], [6.698, 4.241], [5.898, 4.262], [5.363, 4.888], [5.034, 5.612], [4.326, 6.271], [3.574, 6.258], [2.692, 6.259]]]] }, { "N": "Cameroon", "I": "CM", "C": [[[[14.496, 12.859], [14.893, 12.219], [14.96, 11.556], [14.924, 10.891], [15.468, 9.982], [14.909, 9.992], [14.627, 9.921], [14.171, 10.021], [13.954, 9.549], [14.544, 8.966], [14.98, 8.796], [15.121, 8.382], [15.436, 7.693], [15.279, 7.422], [14.777, 6.408], [14.537, 6.227], [14.459, 5.452], [14.559, 5.031], [14.478, 4.733], [14.951, 4.21], [15.036, 3.851], [15.405, 3.335], [15.863, 3.014], [15.907, 2.557], [16.013, 2.268], [15.941, 1.728], [15.146, 1.964], [14.338, 2.228], [13.076, 2.267], [12.951, 2.322], [12.359, 2.193], [11.752, 2.327], [11.276, 2.261], [9.649, 2.284], [9.795, 3.073], [9.404, 3.735], [8.948, 3.904], [8.745, 4.352], [8.489, 4.496], [8.5, 4.772], [8.758, 5.48], [9.233, 6.444], [9.523, 6.453], [10.118, 7.039], [10.497, 7.055], [11.059, 6.644], [11.746, 6.981], [11.839, 7.397], [12.064, 7.8], [12.219, 8.306], [12.754, 8.718], [12.955, 9.418], [13.168, 9.641], [13.309, 10.16], [13.573, 10.799], [14.415, 11.572], [14.468, 11.905], [14.577, 12.085], [14.181, 12.484], [14.214, 12.802], [14.496, 12.859]]]] }, { "N": "Togo", "I": "TG", "C": [[[[0.9, 10.997], [0.772, 10.471], [1.078, 10.176], [1.425, 9.825], [1.463, 9.335], [1.664, 9.129], [1.619, 6.832], [1.865, 6.142], [1.06, 5.929], [0.837, 6.28], [0.57, 6.914], [0.491, 7.412], [0.712, 8.312], [0.461, 8.677], [0.366, 9.465], [0.368, 10.191], [-0.05, 10.707], [0.024, 11.019], [0.9, 10.997]]]] }, { "N": "Ghana", "I": "GH", "C": [[[[0.024, 11.019], [-0.05, 10.707], [0.368, 10.191], [0.366, 9.465], [0.461, 8.677], [0.712, 8.312], [0.491, 7.412], [0.57, 6.914], [0.837, 6.28], [1.06, 5.929], [-0.508, 5.343], [-1.064, 5.001], [-1.965, 4.71], [-2.856, 4.994], [-2.811, 5.389], [-3.244, 6.25], [-2.984, 7.38], [-2.562, 8.22], [-2.827, 9.642], [-2.964, 10.395], [-2.94, 10.963], [-1.203, 11.01], [-0.762, 10.937], [-0.439, 11.098], [0.024, 11.019]]]] }, { "N": "CĂ´te d'Ivoire", "I": "CI", "C": [[[[-8.03, 10.207], [-7.9, 10.297], [-7.623, 10.147], [-6.851, 10.139], [-6.666, 10.431], [-6.494, 10.411], [-6.205, 10.524], [-6.05, 10.096], [-5.817, 10.223], [-5.404, 10.371], [-4.955, 10.153], [-4.78, 9.822], [-4.33, 9.611], [-3.98, 9.862], [-3.512, 9.9], [-2.827, 9.642], [-2.562, 8.22], [-2.984, 7.38], [-3.244, 6.25], [-2.811, 5.389], [-2.856, 4.994], [-3.311, 4.984], [-4.009, 5.18], [-4.65, 5.168], [-5.834, 4.994], [-6.529, 4.705], [-7.519, 4.338], [-7.712, 4.365], [-7.635, 5.188], [-7.54, 5.313], [-7.57, 5.707], [-7.994, 6.126], [-8.311, 6.193], [-8.603, 6.468], [-8.385, 6.912], [-8.485, 7.395], [-8.439, 7.686], [-8.281, 7.687], [-8.222, 8.123], [-8.299, 8.316], [-8.203, 8.455], [-7.832, 8.576], [-8.079, 9.376], [-8.31, 9.79], [-8.229, 10.129], [-8.03, 10.207]]]] }, { "N": "Guinea", "I": "GN", "C": [[[[-13.7, 12.586], [-13.218, 12.576], [-12.499, 12.332], [-12.279, 12.354], [-12.204, 12.466], [-11.658, 12.387], [-11.514, 12.443], [-11.456, 12.077], [-11.298, 12.078], [-11.037, 12.211], [-10.871, 12.178], [-10.593, 11.924], [-10.165, 11.844], [-9.891, 12.06], [-9.568, 12.194], [-9.328, 12.334], [-9.127, 12.308], [-8.905, 12.088], [-8.786, 11.813], [-8.376, 11.394], [-8.581, 11.136], [-8.62, 10.811], [-8.407, 10.909], [-8.282, 10.793], [-8.335, 10.495], [-8.03, 10.207], [-8.229, 10.129], [-8.31, 9.79], [-8.079, 9.376], [-7.832, 8.576], [-8.203, 8.455], [-8.299, 8.316], [-8.222, 8.123], [-8.281, 7.687], [-8.439, 7.686], [-8.722, 7.712], [-8.926, 7.309], [-9.209, 7.314], [-9.403, 7.527], [-9.337, 7.929], [-9.755, 8.541], [-10.017, 8.429], [-10.23, 8.406], [-10.505, 8.349], [-10.494, 8.716], [-10.655, 8.977], [-10.622, 9.268], [-10.839, 9.688], [-11.117, 10.046], [-11.917, 10.047], [-12.15, 9.859], [-12.426, 9.836], [-12.597, 9.62], [-12.712, 9.343], [-13.247, 8.903], [-13.685, 9.495], [-14.074, 9.886], [-14.33, 10.016], [-14.58, 10.214], [-14.693, 10.656], [-14.84, 10.877], [-15.13, 11.04], [-14.686, 11.528], [-14.382, 11.509], [-14.121, 11.677], [-13.901, 11.679], [-13.743, 11.811], [-13.828, 12.143], [-13.719, 12.247], [-13.7, 12.586]]]] }, { "N": "Guinea-Bissau", "I": "GW", "C": [[[[-16.677, 12.385], [-16.148, 12.548], [-15.817, 12.516], [-15.548, 12.628], [-13.7, 12.586], [-13.719, 12.247], [-13.828, 12.143], [-13.743, 11.811], [-13.901, 11.679], [-14.121, 11.677], [-14.382, 11.509], [-14.686, 11.528], [-15.13, 11.04], [-15.664, 11.458], [-16.085, 11.525], [-16.315, 11.807], [-16.309, 11.959], [-16.614, 12.171], [-16.677, 12.385]]]] }, { "N": "Liberia", "I": "LR", "C": [[[[-8.439, 7.686], [-8.485, 7.395], [-8.385, 6.912], [-8.603, 6.468], [-8.311, 6.193], [-7.994, 6.126], [-7.57, 5.707], [-7.54, 5.313], [-7.635, 5.188], [-7.712, 4.365], [-7.974, 4.356], [-9.005, 4.832], [-9.913, 5.594], [-10.765, 6.141], [-11.439, 6.786], [-11.2, 7.106], [-11.147, 7.397], [-10.696, 7.939], [-10.23, 8.406], [-10.017, 8.429], [-9.755, 8.541], [-9.337, 7.929], [-9.403, 7.527], [-9.209, 7.314], [-8.926, 7.309], [-8.722, 7.712], [-8.439, 7.686]]]] }, { "N": "Sierra Leone", "I": "SL", "C": [[[[-13.247, 8.903], [-12.712, 9.343], [-12.597, 9.62], [-12.426, 9.836], [-12.15, 9.859], [-11.917, 10.047], [-11.117, 10.046], [-10.839, 9.688], [-10.622, 9.268], [-10.655, 8.977], [-10.494, 8.716], [-10.505, 8.349], [-10.23, 8.406], [-10.696, 7.939], [-11.147, 7.397], [-11.2, 7.106], [-11.439, 6.786], [-11.708, 6.86], [-12.428, 7.263], [-12.949, 7.799], [-13.124, 8.164], [-13.247, 8.903]]]] }, { "N": "Burkina Faso", "I": "BF", "C": [[[[-5.404, 10.371], [-5.471, 10.951], [-5.198, 11.375], [-5.221, 11.714], [-4.427, 12.543], [-4.28, 13.228], [-4.006, 13.472], [-3.523, 13.338], [-3.104, 13.541], [-2.968, 13.798], [-2.192, 14.246], [-2.001, 14.559], [-1.066, 14.974], [-0.516, 15.116], [-0.266, 14.924], [0.375, 14.929], [0.296, 14.444], [0.43, 13.989], [0.993, 13.336], [1.024, 12.852], [2.177, 12.625], [2.154, 11.94], [1.936, 11.641], [1.447, 11.548], [1.243, 11.111], [0.9, 10.997], [0.024, 11.019], [-0.439, 11.098], [-0.762, 10.937], [-1.203, 11.01], [-2.94, 10.963], [-2.964, 10.395], [-2.827, 9.642], [-3.512, 9.9], [-3.98, 9.862], [-4.33, 9.611], [-4.78, 9.822], [-4.955, 10.153], [-5.404, 10.371]]]] }, { "N": "Central African Republic", "I": "CF", "C": [[[[27.374, 5.234], [27.044, 5.128], [26.403, 5.151], [25.65, 5.256], [25.279, 5.17], [25.129, 4.927], [24.805, 4.897], [24.411, 5.109], [23.297, 4.61], [22.841, 4.71], [22.704, 4.633], [22.405, 4.029], [21.659, 4.224], [20.928, 4.323], [20.291, 4.692], [19.468, 5.032], [18.932, 4.71], [18.543, 4.202], [18.453, 3.504], [17.81, 3.56], [17.133, 3.728], [16.537, 3.198], [16.013, 2.268], [15.907, 2.557], [15.863, 3.014], [15.405, 3.335], [15.036, 3.851], [14.951, 4.21], [14.478, 4.733], [14.559, 5.031], [14.459, 5.452], [14.537, 6.227], [14.777, 6.408], [15.279, 7.422], [16.106, 7.497], [16.291, 7.754], [16.456, 7.735], [16.706, 7.508], [17.965, 7.891], [18.39, 8.281], [18.911, 8.631], [18.812, 8.983], [19.094, 9.075], [20.06, 9.013], [21.001, 9.476], [21.724, 10.567], [22.231, 10.972], [22.864, 11.142], [22.978, 10.714], [23.554, 10.089], [23.557, 9.681], [23.395, 9.265], [23.459, 8.954], [23.806, 8.666], [24.567, 8.229], [25.115, 7.825], [25.124, 7.5], [25.797, 6.979], [26.213, 6.547], [26.466, 5.947], [27.213, 5.551], [27.374, 5.234]]]] }, { "N": "Republic of the Congo", "I": "CG", "C": [[[[18.453, 3.504], [18.394, 2.9], [18.094, 2.366], [17.899, 1.742], [17.774, 0.856], [17.827, 0.289], [17.664, -0.058], [17.639, -0.425], [17.524, -0.744], [16.865, -1.226], [16.407, -1.741], [15.973, -2.712], [16.006, -3.535], [15.754, -3.855], [15.171, -4.344], [14.583, -4.97], [14.209, -4.793], [14.145, -4.51], [13.6, -4.5], [13.258, -4.883], [12.996, -4.781], [12.621, -4.438], [12.319, -4.606], [11.915, -5.038], [11.094, -3.979], [11.855, -3.427], [11.478, -2.766], [11.821, -2.514], [12.496, -2.392], [12.575, -1.949], [13.11, -2.429], [13.992, -2.471], [14.299, -1.998], [14.425, -1.333], [14.316, -0.553], [13.843, 0.039], [14.276, 1.197], [14.027, 1.396], [13.283, 1.314], [13.003, 1.831], [13.076, 2.267], [14.338, 2.228], [15.146, 1.964], [15.941, 1.728], [16.013, 2.268], [16.537, 3.198], [17.133, 3.728], [17.81, 3.56], [18.453, 3.504]]]] }, { "N": "Gabon", "I": "GA", "C": [[[[11.276, 2.261], [11.752, 2.327], [12.359, 2.193], [12.951, 2.322], [13.076, 2.267], [13.003, 1.831], [13.283, 1.314], [14.027, 1.396], [14.276, 1.197], [13.843, 0.039], [14.316, -0.553], [14.425, -1.333], [14.299, -1.998], [13.992, -2.471], [13.11, -2.429], [12.575, -1.949], [12.496, -2.392], [11.821, -2.514], [11.478, -2.766], [11.855, -3.427], [11.094, -3.979], [10.066, -2.969], [9.405, -2.144], [8.798, -1.111], [8.83, -0.779], [9.048, -0.459], [9.291, 0.269], [9.493, 1.01], [9.83, 1.068], [11.285, 1.058], [11.276, 2.261]]]] }, { "N": "Equatorial Guinea", "I": "GQ", "C": [[[[9.649, 2.284], [11.276, 2.261], [11.285, 1.058], [9.83, 1.068], [9.493, 1.01], [9.306, 1.161], [9.649, 2.284]]]] }, { "N": "Zambia", "I": "ZM", "C": [[[[30.74, -8.34], [31.158, -8.595], [31.556, -8.762], [32.192, -8.93], [32.759, -9.231], [33.231, -9.677], [33.486, -10.526], [33.315, -10.797], [33.114, -11.607], [33.306, -12.436], [32.992, -12.784], [32.688, -13.713], [33.214, -13.972], [30.179, -14.796], [30.274, -15.508], [29.517, -15.645], [28.947, -16.043], [28.826, -16.39], [28.468, -16.468], [27.598, -17.291], [27.044, -17.938], [26.707, -17.961], [26.382, -17.846], [25.264, -17.737], [25.084, -17.662], [25.077, -17.579], [24.682, -17.353], [24.034, -17.296], [23.215, -17.523], [22.562, -16.898], [21.888, -16.08], [21.934, -12.898], [24.016, -12.911], [23.931, -12.566], [24.08, -12.191], [23.904, -11.722], [24.018, -11.237], [23.912, -10.927], [24.257, -10.952], [24.315, -11.263], [24.783, -11.239], [25.418, -11.331], [25.752, -11.785], [26.553, -11.924], [27.164, -11.609], [27.389, -12.133], [28.155, -12.272], [28.524, -12.699], [28.934, -13.249], [29.7, -13.257], [29.616, -12.179], [29.342, -12.361], [28.642, -11.972], [28.372, -11.794], [28.496, -10.79], [28.674, -9.606], [28.45, -9.165], [28.735, -8.527], [29.003, -8.407], [30.346, -8.238], [30.74, -8.34]]]] }, { "N": "Malawi", "I": "MW", "C": [[[[32.759, -9.231], [33.74, -9.417], [33.941, -9.694], [34.28, -10.16], [34.56, -11.52], [34.28, -12.28], [34.56, -13.58], [34.907, -13.565], [35.268, -13.888], [35.687, -14.611], [35.772, -15.897], [35.339, -16.107], [35.034, -16.801], [34.381, -16.184], [34.307, -15.479], [34.518, -15.014], [34.46, -14.613], [34.065, -14.36], [33.79, -14.452], [33.214, -13.972], [32.688, -13.713], [32.992, -12.784], [33.306, -12.436], [33.114, -11.607], [33.315, -10.797], [33.486, -10.526], [33.231, -9.677], [32.759, -9.231]]]] }, { "N": "Mozambique", "I": "MZ", "C": [[[[34.56, -11.52], [35.312, -11.439], [36.514, -11.721], [36.775, -11.595], [37.471, -11.569], [37.828, -11.269], [38.428, -11.285], [39.521, -10.897], [40.317, -10.317], [40.317, -10.317], [40.317, -10.317], [40.478, -10.765], [40.437, -11.762], [40.561, -12.639], [40.6, -14.202], [40.775, -14.692], [40.477, -15.406], [40.089, -16.101], [39.453, -16.721], [38.538, -17.101], [37.411, -17.586], [36.281, -18.66], [35.896, -18.842], [35.198, -19.553], [34.786, -19.784], [34.702, -20.497], [35.176, -21.254], [35.373, -21.841], [35.386, -22.14], [35.563, -22.09], [35.534, -23.071], [35.372, -23.535], [35.607, -23.707], [35.459, -24.123], [35.041, -24.478], [34.216, -24.816], [33.013, -25.358], [32.575, -25.727], [32.66, -26.149], [32.916, -26.216], [32.83, -26.742], [32.072, -26.734], [31.986, -26.292], [31.838, -25.843], [31.752, -25.484], [31.931, -24.369], [31.67, -23.659], [31.191, -22.252], [32.245, -21.116], [32.509, -20.395], [32.66, -20.304], [32.773, -19.716], [32.612, -19.419], [32.655, -18.672], [32.85, -17.979], [32.848, -16.713], [32.328, -16.392], [31.852, -16.319], [31.636, -16.072], [31.173, -15.861], [30.339, -15.881], [30.274, -15.508], [30.179, -14.796], [33.214, -13.972], [33.79, -14.452], [34.065, -14.36], [34.46, -14.613], [34.518, -15.014], [34.307, -15.479], [34.381, -16.184], [35.034, -16.801], [35.339, -16.107], [35.772, -15.897], [35.687, -14.611], [35.268, -13.888], [34.907, -13.565], [34.56, -13.58], [34.28, -12.28], [34.56, -11.52]]]] }, { "N": "Eswatini", "I": "SZ", "C": [[[[32.072, -26.734], [31.868, -27.178], [31.283, -27.286], [30.686, -26.744], [30.677, -26.398], [30.95, -26.023], [31.044, -25.731], [31.333, -25.66], [31.838, -25.843], [31.986, -26.292], [32.072, -26.734]]]] }, { "N": "Angola", "I": "AO", "C": [[[[12.996, -4.781], [12.632, -4.991], [12.468, -5.248], [12.437, -5.684], [12.182, -5.79], [11.915, -5.038], [12.319, -4.606], [12.621, -4.438], [12.996, -4.781]]], [[[12.322, -6.1], [12.735, -5.966], [13.025, -5.984], [13.376, -5.864], [16.327, -5.877], [16.573, -6.623], [16.86, -7.222], [17.09, -7.546], [17.473, -8.069], [18.134, -7.988], [18.464, -7.847], [19.017, -7.988], [19.167, -7.738], [19.418, -7.155], [20.038, -7.116], [20.092, -6.943], [20.602, -6.939], [20.515, -7.3], [21.728, -7.291], [21.746, -7.92], [21.949, -8.306], [21.802, -8.909], [21.875, -9.524], [22.209, -9.895], [22.155, -11.085], [22.403, -10.993], [22.837, -11.018], [23.457, -10.868], [23.912, -10.927], [24.018, -11.237], [23.904, -11.722], [24.08, -12.191], [23.931, -12.566], [24.016, -12.911], [21.934, -12.898], [21.888, -16.08], [22.562, -16.898], [23.215, -17.523], [21.377, -17.931], [18.956, -17.789], [18.263, -17.31], [14.21, -17.353], [14.059, -17.423], [13.462, -16.971], [12.814, -16.941], [12.215, -17.112], [11.734, -17.302], [11.64, -16.673], [11.779, -15.794], [12.124, -14.878], [12.176, -14.449], [12.5, -13.548], [12.738, -13.138], [13.313, -12.484], [13.634, -12.039], [13.739, -11.298], [13.686, -10.731], [13.387, -10.374], [13.121, -9.767], [12.875, -9.167], [12.929, -8.959], [13.236, -8.563], [12.933, -7.597], [12.728, -6.927], [12.227, -6.294], [12.322, -6.1]]]] }, { "N": "Burundi", "I": "BI", "C": [[[[30.47, -2.414], [30.528, -2.808], [30.743, -3.034], [30.752, -3.359], [30.506, -3.569], [30.116, -4.09], [29.754, -4.452], [29.34, -4.5], [29.276, -3.294], [29.025, -2.839], [29.632, -2.918], [29.938, -2.348], [30.47, -2.414]]]] }, { "N": "Israel", "I": "IL", "C": [[[[35.72, 32.709], [35.546, 32.394], [35.184, 32.533], [34.975, 31.867], [35.226, 31.754], [34.971, 31.617], [34.927, 31.353], [35.398, 31.489], [35.421, 31.1], [34.923, 29.501], [34.823, 29.761], [34.265, 31.219], [34.265, 31.219], [34.265, 31.219], [34.556, 31.549], [34.488, 31.606], [34.753, 32.073], [34.955, 32.827], [35.098, 33.081], [35.126, 33.091], [35.461, 33.089], [35.553, 33.264], [35.821, 33.277], [35.836, 32.868], [35.701, 32.716], [35.72, 32.709]]]] }, { "N": "Lebanon", "I": "LB", "C": [[[[35.821, 33.277], [35.553, 33.264], [35.461, 33.089], [35.126, 33.091], [35.482, 33.905], [35.98, 34.61], [35.998, 34.645], [36.448, 34.594], [36.612, 34.202], [36.066, 33.825], [35.821, 33.277]]]] }, { "N": "Madagascar", "I": "MG", "C": [[[[49.544, -12.47], [49.809, -12.895], [50.057, -13.556], [50.217, -14.759], [50.477, -15.227], [50.377, -15.706], [50.2, -16], [49.861, -15.414], [49.673, -15.71], [49.863, -16.451], [49.775, -16.875], [49.499, -17.106], [49.436, -17.953], [49.042, -19.119], [48.549, -20.497], [47.931, -22.392], [47.548, -23.782], [47.096, -24.942], [46.282, -25.178], [45.41, -25.601], [44.834, -25.346], [44.04, -24.988], [43.764, -24.461], [43.698, -23.574], [43.346, -22.777], [43.254, -22.057], [43.433, -21.336], [43.894, -21.163], [43.896, -20.83], [44.374, -20.072], [44.464, -19.435], [44.232, -18.962], [44.043, -18.331], [43.963, -17.41], [44.312, -16.85], [44.447, -16.216], [44.945, -16.179], [45.503, -15.974], [45.873, -15.793], [46.312, -15.78], [46.882, -15.21], [47.705, -14.594], [48.005, -14.091], [47.869, -13.664], [48.294, -13.784], [48.845, -13.089], [48.864, -12.488], [49.195, -12.041], [49.544, -12.47]]]] }, { "N": "Palestine", "I": "PS", "C": [[[[35.398, 31.489], [34.927, 31.353], [34.971, 31.617], [35.226, 31.754], [34.975, 31.867], [35.184, 32.533], [35.546, 32.394], [35.545, 31.783], [35.398, 31.489]]]] }, { "N": "The Gambia", "I": "GM", "C": [[[[-16.714, 13.595], [-15.625, 13.624], [-15.399, 13.86], [-15.082, 13.876], [-14.687, 13.63], [-14.377, 13.626], [-14.047, 13.794], [-13.845, 13.505], [-14.278, 13.281], [-14.712, 13.298], [-15.141, 13.51], [-15.512, 13.279], [-15.691, 13.27], [-15.931, 13.13], [-16.842, 13.151], [-16.714, 13.595]]]] }, { "N": "Tunisia", "I": "TN", "C": [[[[9.482, 30.308], [9.056, 32.103], [8.439, 32.506], [8.43, 32.748], [7.613, 33.344], [7.524, 34.097], [8.141, 34.655], [8.376, 35.48], [8.218, 36.433], [8.421, 36.946], [9.51, 37.35], [10.21, 37.23], [10.181, 36.724], [11.029, 37.092], [11.1, 36.9], [10.6, 36.41], [10.593, 35.947], [10.94, 35.699], [10.808, 34.834], [10.15, 34.331], [10.34, 33.786], [10.857, 33.769], [11.109, 33.293], [11.489, 33.137], [11.432, 32.369], [10.945, 32.082], [10.637, 31.761], [9.95, 31.376], [10.057, 30.962], [9.97, 30.539], [9.482, 30.308]]]] }, { "N": "Algeria", "I": "DZ", "C": [[[[-8.684, 27.396], [-8.665, 27.589], [-8.666, 27.656], [-8.674, 28.841], [-7.059, 29.579], [-6.061, 29.732], [-5.242, 30], [-4.86, 30.501], [-3.69, 30.897], [-3.647, 31.637], [-3.069, 31.724], [-2.617, 32.094], [-1.308, 32.263], [-1.125, 32.652], [-1.388, 32.864], [-1.733, 33.92], [-1.793, 34.528], [-2.17, 35.168], [-1.209, 35.715], [-0.127, 35.889], [0.504, 36.301], [1.467, 36.606], [3.162, 36.784], [4.816, 36.865], [5.32, 36.717], [6.262, 37.111], [7.33, 37.118], [7.737, 36.886], [8.421, 36.946], [8.218, 36.433], [8.376, 35.48], [8.141, 34.655], [7.524, 34.097], [7.613, 33.344], [8.43, 32.748], [8.439, 32.506], [9.056, 32.103], [9.482, 30.308], [9.806, 29.425], [9.86, 28.96], [9.684, 28.144], [9.756, 27.688], [9.629, 27.141], [9.716, 26.512], [9.319, 26.094], [9.911, 25.365], [9.948, 24.937], [10.304, 24.379], [10.771, 24.563], [11.561, 24.098], [12, 23.472], [8.573, 21.566], [5.678, 19.601], [4.267, 19.155], [3.158, 19.057], [3.147, 19.694], [2.684, 19.856], [2.061, 20.142], [1.823, 20.611], [-1.55, 22.793], [-4.923, 24.975], [-8.684, 27.396]]]] }, { "N": "Jordan", "I": "JO", "C": [[[[35.546, 32.394], [35.72, 32.709], [36.834, 32.313], [38.792, 33.379], [39.195, 32.161], [39.005, 32.01], [37.002, 31.508], [37.999, 30.508], [37.668, 30.339], [37.504, 30.004], [36.741, 29.865], [36.501, 29.505], [36.069, 29.197], [34.956, 29.357], [34.923, 29.501], [35.421, 31.1], [35.398, 31.489], [35.545, 31.783], [35.546, 32.394]]]] }, { "N": "United Arab Emirates", "I": "AE", "C": [[[[51.58, 24.245], [51.757, 24.294], [51.794, 24.02], [52.577, 24.177], [53.404, 24.151], [54.008, 24.122], [54.693, 24.798], [55.439, 25.439], [56.071, 26.055], [56.261, 25.715], [56.397, 24.925], [55.886, 24.921], [55.804, 24.27], [55.981, 24.131], [55.529, 23.934], [55.526, 23.525], [55.234, 23.111], [55.208, 22.708], [55.007, 22.497], [52.001, 23.001], [51.618, 24.014], [51.58, 24.245]]]] }, { "N": "Qatar", "I": "QA", "C": [[[[50.81, 24.755], [50.744, 25.482], [51.013, 26.007], [51.286, 26.115], [51.589, 25.801], [51.607, 25.216], [51.39, 24.627], [51.112, 24.556], [50.81, 24.755]]]] }, { "N": "Kuwait", "I": "KW", "C": [[[[47.975, 29.976], [48.183, 29.534], [48.094, 29.306], [48.416, 28.552], [47.709, 28.526], [47.46, 29.003], [46.569, 29.099], [47.303, 30.059], [47.975, 29.976]]]] }, { "N": "Iraq", "I": "IQ", "C": [[[[39.195, 32.161], [38.792, 33.379], [41.006, 34.419], [41.384, 35.628], [41.29, 36.359], [41.837, 36.606], [42.35, 37.23], [42.779, 37.385], [43.942, 37.256], [44.293, 37.002], [44.773, 37.17], [45.421, 35.978], [46.076, 35.677], [46.152, 35.093], [45.648, 34.748], [45.417, 33.968], [46.109, 33.017], [47.335, 32.469], [47.849, 31.709], [47.685, 30.985], [48.005, 30.985], [48.015, 30.452], [48.568, 29.927], [47.975, 29.976], [47.303, 30.059], [46.569, 29.099], [44.709, 29.179], [41.89, 31.19], [40.4, 31.89], [39.195, 32.161]]]] }, { "N": "Oman", "I": "OM", "C": [[[[55.208, 22.708], [55.234, 23.111], [55.526, 23.525], [55.529, 23.934], [55.981, 24.131], [55.804, 24.27], [55.886, 24.921], [56.397, 24.925], [56.845, 24.242], [57.403, 23.879], [58.137, 23.748], [58.729, 23.566], [59.181, 22.992], [59.45, 22.66], [59.808, 22.534], [59.806, 22.311], [59.442, 21.715], [59.282, 21.434], [58.861, 21.114], [58.488, 20.429], [58.034, 20.481], [57.826, 20.243], [57.666, 19.736], [57.789, 19.068], [57.694, 18.945], [57.234, 18.948], [56.61, 18.574], [56.512, 18.087], [56.284, 17.876], [55.661, 17.884], [55.27, 17.632], [55.275, 17.228], [54.791, 16.951], [54.239, 17.045], [53.571, 16.708], [53.109, 16.651], [52.782, 17.35], [52, 19], [55, 20], [55.667, 22], [55.208, 22.708]]], [[[56.261, 25.715], [56.071, 26.055], [56.362, 26.396], [56.486, 26.309], [56.391, 25.896], [56.261, 25.715]]]] }, { "N": "Vanuatu", "I": "VU", "C": [[[[167.217, -15.892], [167.845, -16.466], [167.515, -16.598], [167.18, -16.16], [167.217, -15.892]]], [[[166.793, -15.669], [166.65, -15.393], [166.629, -14.626], [167.108, -14.934], [167.27, -15.74], [167.001, -15.615], [166.793, -15.669]]]] }, { "N": "Cambodia", "I": "KH", "C": [[[[102.585, 12.187], [102.348, 13.394], [102.988, 14.226], [104.281, 14.417], [105.219, 14.273], [106.044, 13.881], [106.496, 14.571], [107.383, 14.202], [107.615, 13.536], [107.491, 12.337], [105.811, 11.568], [106.25, 10.962], [105.2, 10.889], [104.334, 10.487], [103.497, 10.633], [103.091, 11.154], [102.585, 12.187]]]] }, { "N": "Thailand", "I": "TH", "C": [[[[105.219, 14.273], [104.281, 14.417], [102.988, 14.226], [102.348, 13.394], [102.585, 12.187], [101.687, 12.646], [100.832, 12.627], [100.978, 13.413], [100.098, 13.407], [100.019, 12.307], [99.479, 10.846], [99.154, 9.963], [99.222, 9.239], [99.874, 9.208], [100.28, 8.295], [100.459, 7.43], [101.017, 6.857], [101.623, 6.741], [102.141, 6.222], [101.814, 5.811], [101.154, 5.691], [101.076, 6.205], [100.26, 6.643], [100.086, 6.464], [99.691, 6.848], [99.52, 7.343], [98.988, 7.908], [98.504, 8.382], [98.34, 7.795], [98.15, 8.35], [98.259, 8.974], [98.554, 9.933], [99.038, 10.961], [99.587, 11.893], [99.196, 12.805], [99.212, 13.269], [99.098, 13.828], [98.431, 14.622], [98.192, 15.124], [98.537, 15.308], [98.903, 16.178], [98.494, 16.838], [97.859, 17.568], [97.376, 18.445], [97.798, 18.627], [98.254, 19.708], [98.96, 19.753], [99.543, 20.187], [100.116, 20.418], [100.549, 20.109], [100.606, 19.508], [101.282, 19.463], [101.036, 18.409], [101.06, 17.512], [102.114, 18.109], [102.413, 17.933], [102.999, 17.962], [103.2, 18.31], [103.956, 18.241], [104.717, 17.429], [104.779, 16.442], [105.589, 15.57], [105.544, 14.724], [105.219, 14.273]]]] }, { "N": "Lao PDR", "I": "LA", "C": [[[[107.383, 14.202], [106.496, 14.571], [106.044, 13.881], [105.219, 14.273], [105.544, 14.724], [105.589, 15.57], [104.779, 16.442], [104.717, 17.429], [103.956, 18.241], [103.2, 18.31], [102.999, 17.962], [102.413, 17.933], [102.114, 18.109], [101.06, 17.512], [101.036, 18.409], [101.282, 19.463], [100.606, 19.508], [100.549, 20.109], [100.116, 20.418], [100.329, 20.786], [101.18, 21.437], [101.27, 21.202], [101.803, 21.174], [101.652, 22.318], [102.17, 22.465], [102.755, 21.675], [103.204, 20.767], [104.435, 20.759], [104.823, 19.887], [104.183, 19.625], [103.897, 19.265], [105.095, 18.667], [105.926, 17.485], [106.556, 16.604], [107.313, 15.909], [107.565, 15.202], [107.383, 14.202]]]] }, { "N": "Myanmar", "I": "MM", "C": [[[[100.116, 20.418], [99.543, 20.187], [98.96, 19.753], [98.254, 19.708], [97.798, 18.627], [97.376, 18.445], [97.859, 17.568], [98.494, 16.838], [98.903, 16.178], [98.537, 15.308], [98.192, 15.124], [98.431, 14.622], [99.098, 13.828], [99.212, 13.269], [99.196, 12.805], [99.587, 11.893], [99.038, 10.961], [98.554, 9.933], [98.457, 10.675], [98.765, 11.441], [98.428, 12.033], [98.51, 13.122], [98.104, 13.64], [97.778, 14.837], [97.597, 16.101], [97.165, 16.929], [96.506, 16.427], [95.369, 15.714], [94.808, 15.803], [94.189, 16.038], [94.533, 17.277], [94.325, 18.214], [93.541, 19.366], [93.663, 19.727], [93.078, 19.855], [92.369, 20.671], [92.303, 21.475], [92.652, 21.324], [92.673, 22.041], [93.166, 22.278], [93.06, 22.703], [93.286, 23.044], [93.325, 24.079], [94.107, 23.851], [94.553, 24.675], [94.603, 25.162], [95.155, 26.001], [95.125, 26.574], [96.419, 27.265], [97.134, 27.084], [97.052, 27.699], [97.403, 27.883], [97.327, 28.262], [97.912, 28.336], [98.246, 27.747], [98.683, 27.509], [98.712, 26.744], [98.672, 25.919], [97.725, 25.084], [97.605, 23.897], [98.66, 24.063], [98.899, 23.143], [99.532, 22.949], [99.241, 22.118], [99.983, 21.743], [100.417, 21.559], [101.15, 21.85], [101.18, 21.437], [100.329, 20.786], [100.116, 20.418]]]] }, { "N": "Vietnam", "I": "VN", "C": [[[[104.334, 10.487], [105.2, 10.889], [106.25, 10.962], [105.811, 11.568], [107.491, 12.337], [107.615, 13.536], [107.383, 14.202], [107.565, 15.202], [107.313, 15.909], [106.556, 16.604], [105.926, 17.485], [105.095, 18.667], [103.897, 19.265], [104.183, 19.625], [104.823, 19.887], [104.435, 20.759], [103.204, 20.767], [102.755, 21.675], [102.17, 22.465], [102.707, 22.709], [103.505, 22.704], [104.477, 22.819], [105.329, 23.352], [105.811, 22.977], [106.725, 22.794], [106.567, 22.218], [107.043, 21.812], [108.05, 21.552], [106.715, 20.697], [105.882, 19.752], [105.662, 19.058], [106.427, 18.004], [107.362, 16.697], [108.269, 16.08], [108.877, 15.277], [109.335, 13.426], [109.2, 11.667], [108.366, 11.008], [107.221, 10.364], [106.405, 9.531], [105.158, 8.6], [104.795, 9.241], [105.076, 9.918], [104.334, 10.487]]]] }, { "N": "Dem. Rep. Korea", "I": "KP", "C": [[[[130.78, 42.22], [130.78, 42.22], [130.78, 42.22], [130.78, 42.22]]], [[[130.64, 42.395], [130.64, 42.395], [130.78, 42.22], [130.4, 42.28], [129.966, 41.941], [129.667, 41.601], [129.705, 40.883], [129.188, 40.662], [129.01, 40.485], [128.633, 40.19], [127.967, 40.025], [127.533, 39.757], [127.502, 39.324], [127.385, 39.213], [127.783, 39.051], [128.35, 38.612], [128.206, 38.37], [127.78, 38.305], [127.073, 38.256], [126.684, 37.805], [126.237, 37.84], [126.175, 37.75], [125.689, 37.94], [125.568, 37.752], [125.275, 37.669], [125.24, 37.857], [124.981, 37.949], [124.712, 38.108], [124.986, 38.548], [125.222, 38.666], [125.133, 38.849], [125.387, 39.388], [125.321, 39.551], [124.737, 39.66], [124.266, 39.928], [125.08, 40.57], [126.182, 41.107], [126.869, 41.817], [127.344, 41.503], [128.208, 41.467], [128.052, 41.994], [129.597, 42.425], [129.994, 42.985], [130.64, 42.395]]]] }, { "N": "Republic of Korea", "I": "KR", "C": [[[[126.175, 37.75], [126.237, 37.84], [126.684, 37.805], [127.073, 38.256], [127.78, 38.305], [128.206, 38.37], [128.35, 38.612], [129.213, 37.432], [129.46, 36.784], [129.468, 35.632], [129.091, 35.082], [128.186, 34.89], [127.387, 34.476], [126.486, 34.39], [126.374, 34.935], [126.559, 35.685], [126.117, 36.725], [126.86, 36.894], [126.175, 37.75]]]] }, { "N": "Mongolia", "I": "MN", "C": [[[[87.751, 49.297], [88.806, 49.471], [90.714, 50.332], [92.235, 50.802], [93.104, 50.495], [94.148, 50.481], [94.816, 50.013], [95.814, 49.977], [97.26, 49.726], [98.232, 50.422], [97.826, 51.011], [98.861, 52.047], [99.982, 51.634], [100.889, 51.517], [102.065, 51.26], [102.256, 50.511], [103.677, 50.09], [104.622, 50.275], [105.887, 50.406], [106.889, 50.274], [107.868, 49.794], [108.475, 49.283], [109.402, 49.293], [110.662, 49.13], [111.581, 49.378], [112.898, 49.544], [114.362, 50.248], [114.962, 50.14], [115.486, 49.805], [116.679, 49.889], [116.192, 49.135], [115.485, 48.135], [115.743, 47.727], [116.309, 47.853], [117.296, 47.698], [118.064, 48.067], [118.867, 47.747], [119.773, 47.048], [119.663, 46.693], [118.874, 46.805], [117.422, 46.673], [116.718, 46.388], [115.985, 45.727], [114.46, 45.34], [113.464, 44.809], [112.436, 45.012], [111.873, 45.102], [111.348, 44.457], [111.668, 44.073], [111.83, 43.743], [111.13, 43.407], [110.412, 42.871], [109.244, 42.519], [107.745, 42.482], [106.129, 42.134], [104.965, 41.597], [104.522, 41.908], [103.312, 41.907], [101.833, 42.515], [100.846, 42.664], [99.516, 42.525], [97.452, 42.749], [96.349, 42.726], [95.762, 43.319], [95.307, 44.241], [94.689, 44.352], [93.481, 44.975], [92.134, 45.115], [90.946, 45.286], [90.586, 45.72], [90.971, 46.888], [90.281, 47.694], [88.854, 48.069], [88.014, 48.599], [87.751, 49.297]]]] }, { "N": "India", "I": "IN", "C": [[[[97.327, 28.262], [97.403, 27.883], [97.052, 27.699], [97.134, 27.084], [96.419, 27.265], [95.125, 26.574], [95.155, 26.001], [94.603, 25.162], [94.553, 24.675], [94.107, 23.851], [93.325, 24.079], [93.286, 23.044], [93.06, 22.703], [93.166, 22.278], [92.673, 22.041], [92.146, 23.627], [91.87, 23.624], [91.706, 22.985], [91.159, 23.504], [91.468, 24.073], [91.915, 24.13], [92.376, 24.977], [91.8, 25.147], [90.872, 25.133], [89.921, 25.27], [89.832, 25.965], [89.355, 26.014], [88.563, 26.447], [88.21, 25.768], [88.932, 25.239], [88.306, 24.866], [88.084, 24.502], [88.7, 24.234], [88.53, 23.631], [88.876, 22.879], [89.032, 22.056], [88.889, 21.691], [88.208, 21.703], [86.976, 21.496], [87.033, 20.743], [86.499, 20.152], [85.06, 19.479], [83.941, 18.302], [83.189, 17.671], [82.193, 17.017], [82.191, 16.557], [81.693, 16.31], [80.792, 15.952], [80.325, 15.899], [80.025, 15.136], [80.233, 13.836], [80.286, 13.006], [79.863, 12.056], [79.858, 10.357], [79.341, 10.309], [78.885, 9.546], [79.19, 9.217], [78.278, 8.933], [77.941, 8.253], [77.54, 7.966], [76.593, 8.899], [76.13, 10.3], [75.746, 11.308], [75.396, 11.781], [74.865, 12.742], [74.617, 13.993], [74.444, 14.617], [73.534, 15.991], [73.12, 17.929], [72.821, 19.208], [72.824, 20.42], [72.631, 21.356], [71.175, 20.757], [70.47, 20.877], [69.164, 22.089], [69.645, 22.451], [69.35, 22.843], [68.177, 23.692], [68.843, 24.359], [71.043, 24.357], [70.845, 25.215], [70.283, 25.722], [70.169, 26.492], [69.514, 26.941], [70.616, 27.989], [71.778, 27.913], [72.824, 28.962], [73.451, 29.976], [74.421, 30.98], [74.406, 31.693], [75.259, 32.271], [74.452, 32.765], [74.104, 33.441], [73.75, 34.318], [74.24, 34.749], [75.757, 34.505], [76.872, 34.654], [77.837, 35.494], [78.912, 34.322], [78.811, 33.506], [79.209, 32.994], [79.176, 32.484], [78.458, 32.618], [78.739, 31.516], [79.721, 30.883], [81.111, 30.183], [80.477, 29.73], [80.088, 28.794], [81.057, 28.416], [82, 27.925], [83.304, 27.365], [84.675, 27.235], [85.252, 26.726], [86.024, 26.631], [87.227, 26.398], [88.06, 26.415], [88.175, 26.81], [88.043, 27.446], [88.12, 27.877], [88.73, 28.087], [88.814, 27.299], [88.836, 27.099], [89.745, 26.719], [90.373, 26.876], [91.218, 26.809], [92.033, 26.838], [92.104, 27.453], [91.697, 27.772], [92.503, 27.897], [93.413, 28.641], [94.566, 29.277], [95.405, 29.032], [96.118, 29.453], [96.587, 28.831], [96.249, 28.411], [97.327, 28.262]]]] }, { "N": "Bangladesh", "I": "BD", "C": [[[[92.673, 22.041], [92.652, 21.324], [92.303, 21.475], [92.369, 20.671], [92.083, 21.192], [92.025, 21.702], [91.835, 22.183], [91.417, 22.765], [90.496, 22.805], [90.587, 22.393], [90.273, 21.836], [89.847, 22.039], [89.702, 21.857], [89.419, 21.966], [89.032, 22.056], [88.876, 22.879], [88.53, 23.631], [88.7, 24.234], [88.084, 24.502], [88.306, 24.866], [88.932, 25.239], [88.21, 25.768], [88.563, 26.447], [89.355, 26.014], [89.832, 25.965], [89.921, 25.27], [90.872, 25.133], [91.8, 25.147], [92.376, 24.977], [91.915, 24.13], [91.468, 24.073], [91.159, 23.504], [91.706, 22.985], [91.87, 23.624], [92.146, 23.627], [92.673, 22.041]]]] }, { "N": "Bhutan", "I": "BT", "C": [[[[91.697, 27.772], [92.104, 27.453], [92.033, 26.838], [91.218, 26.809], [90.373, 26.876], [89.745, 26.719], [88.836, 27.099], [88.814, 27.299], [89.476, 28.043], [90.016, 28.296], [90.731, 28.065], [91.259, 28.041], [91.697, 27.772]]]] }, { "N": "Nepal", "I": "NP", "C": [[[[88.12, 27.877], [88.043, 27.446], [88.175, 26.81], [88.06, 26.415], [87.227, 26.398], [86.024, 26.631], [85.252, 26.726], [84.675, 27.235], [83.304, 27.365], [82, 27.925], [81.057, 28.416], [80.088, 28.794], [80.477, 29.73], [81.111, 30.183], [81.526, 30.423], [82.328, 30.115], [83.337, 29.464], [83.899, 29.32], [84.235, 28.84], [85.012, 28.643], [85.823, 28.204], [86.955, 27.974], [88.12, 27.877]]]] }, { "N": "Pakistan", "I": "PK", "C": [[[[77.837, 35.494], [76.872, 34.654], [75.757, 34.505], [74.24, 34.749], [73.75, 34.318], [74.104, 33.441], [74.452, 32.765], [75.259, 32.271], [74.406, 31.693], [74.421, 30.98], [73.451, 29.976], [72.824, 28.962], [71.778, 27.913], [70.616, 27.989], [69.514, 26.941], [70.169, 26.492], [70.283, 25.722], [70.845, 25.215], [71.043, 24.357], [68.843, 24.359], [68.177, 23.692], [67.444, 23.945], [67.145, 24.664], [66.373, 25.425], [64.53, 25.237], [62.906, 25.218], [61.497, 25.078], [61.874, 26.24], [63.317, 26.757], [63.234, 27.217], [62.755, 27.379], [62.728, 28.26], [61.772, 28.699], [61.369, 29.303], [60.874, 29.829], [62.55, 29.319], [63.55, 29.468], [64.148, 29.341], [64.35, 29.56], [65.047, 29.472], [66.346, 29.888], [66.381, 30.739], [66.939, 31.305], [67.683, 31.303], [67.793, 31.583], [68.557, 31.713], [68.927, 31.62], [69.318, 31.901], [69.263, 32.502], [69.687, 33.105], [70.324, 33.359], [69.931, 34.02], [70.882, 33.989], [71.157, 34.349], [71.115, 34.733], [71.613, 35.153], [71.499, 35.651], [71.262, 36.074], [71.846, 36.51], [72.92, 36.72], [74.068, 36.836], [74.576, 37.021], [75.158, 37.133], [75.897, 36.667], [76.193, 35.898], [77.837, 35.494]]]] }, { "N": "Afghanistan", "I": "AF", "C": [[[[66.519, 37.363], [67.076, 37.356], [67.83, 37.145], [68.136, 37.023], [68.859, 37.344], [69.196, 37.151], [69.519, 37.609], [70.117, 37.588], [70.271, 37.735], [70.376, 38.138], [70.807, 38.486], [71.348, 38.259], [71.239, 37.953], [71.542, 37.906], [71.449, 37.066], [71.845, 36.738], [72.193, 36.948], [72.637, 37.048], [73.26, 37.495], [73.949, 37.422], [74.98, 37.42], [75.158, 37.133], [74.576, 37.021], [74.068, 36.836], [72.92, 36.72], [71.846, 36.51], [71.262, 36.074], [71.499, 35.651], [71.613, 35.153], [71.115, 34.733], [71.157, 34.349], [70.882, 33.989], [69.931, 34.02], [70.324, 33.359], [69.687, 33.105], [69.263, 32.502], [69.318, 31.901], [68.927, 31.62], [68.557, 31.713], [67.793, 31.583], [67.683, 31.303], [66.939, 31.305], [66.381, 30.739], [66.346, 29.888], [65.047, 29.472], [64.35, 29.56], [64.148, 29.341], [63.55, 29.468], [62.55, 29.319], [60.874, 29.829], [61.781, 30.736], [61.699, 31.38], [60.942, 31.548], [60.864, 32.183], [60.536, 32.981], [60.964, 33.529], [60.528, 33.676], [60.803, 34.404], [61.211, 35.65], [62.231, 35.271], [62.985, 35.404], [63.194, 35.857], [63.983, 36.008], [64.546, 36.312], [64.746, 37.112], [65.589, 37.305], [65.746, 37.661], [66.217, 37.394], [66.519, 37.363]]]] }, { "N": "Tajikistan", "I": "TJ", "C": [[[[67.83, 37.145], [68.392, 38.157], [68.176, 38.902], [67.442, 39.14], [67.701, 39.58], [68.536, 39.533], [69.012, 40.086], [69.329, 40.728], [70.667, 40.96], [70.458, 40.496], [70.601, 40.219], [71.014, 40.244], [70.648, 39.936], [69.56, 40.103], [69.465, 39.527], [70.549, 39.604], [71.785, 39.279], [73.675, 39.431], [73.929, 38.506], [74.258, 38.607], [74.865, 38.379], [74.83, 37.99], [74.98, 37.42], [73.949, 37.422], [73.26, 37.495], [72.637, 37.048], [72.193, 36.948], [71.845, 36.738], [71.449, 37.066], [71.542, 37.906], [71.239, 37.953], [71.348, 38.259], [70.807, 38.486], [70.376, 38.138], [70.271, 37.735], [70.117, 37.588], [69.519, 37.609], [69.196, 37.151], [68.859, 37.344], [68.136, 37.023], [67.83, 37.145]]]] }, { "N": "Kyrgyzstan", "I": "KG", "C": [[[[70.962, 42.266], [71.186, 42.704], [71.845, 42.845], [73.49, 42.501], [73.645, 43.091], [74.213, 43.298], [75.637, 42.878], [76, 42.988], [77.658, 42.961], [79.142, 42.856], [79.644, 42.497], [80.26, 42.35], [80.119, 42.124], [78.544, 41.582], [78.187, 41.185], [76.904, 41.066], [76.526, 40.428], [75.468, 40.562], [74.777, 40.366], [73.822, 39.894], [73.96, 39.66], [73.675, 39.431], [71.785, 39.279], [70.549, 39.604], [69.465, 39.527], [69.56, 40.103], [70.648, 39.936], [71.014, 40.244], [71.775, 40.146], [73.055, 40.866], [71.87, 41.393], [71.158, 41.144], [70.42, 41.52], [71.259, 42.168], [70.962, 42.266]]]] }, { "N": "Turkmenistan", "I": "TM", "C": [[[[52.502, 41.783], [52.944, 42.116], [54.079, 42.324], [54.755, 42.044], [55.455, 41.26], [55.968, 41.309], [57.096, 41.322], [56.932, 41.826], [57.787, 42.171], [58.629, 42.752], [59.976, 42.223], [60.083, 41.425], [60.466, 41.22], [61.547, 41.266], [61.883, 41.085], [62.374, 40.054], [63.518, 39.363], [64.17, 38.892], [65.216, 38.403], [66.546, 37.975], [66.519, 37.363], [66.217, 37.394], [65.746, 37.661], [65.589, 37.305], [64.746, 37.112], [64.546, 36.312], [63.983, 36.008], [63.194, 35.857], [62.985, 35.404], [62.231, 35.271], [61.211, 35.65], [61.123, 36.492], [60.378, 36.527], [59.235, 37.413], [58.436, 37.522], [57.33, 38.029], [56.619, 38.121], [56.18, 37.935], [55.512, 37.964], [54.8, 37.392], [53.922, 37.199], [53.736, 37.906], [53.881, 38.952], [53.101, 39.291], [53.358, 39.975], [52.694, 40.034], [52.915, 40.877], [53.858, 40.631], [54.737, 40.951], [54.008, 41.551], [53.722, 42.123], [52.917, 41.868], [52.815, 41.135], [52.502, 41.783]]]] }, { "N": "Iran", "I": "IR", "C": [[[[48.568, 29.927], [48.015, 30.452], [48.005, 30.985], [47.685, 30.985], [47.849, 31.709], [47.335, 32.469], [46.109, 33.017], [45.417, 33.968], [45.648, 34.748], [46.152, 35.093], [46.076, 35.677], [45.421, 35.978], [44.773, 37.17], [44.773, 37.17], [44.226, 37.972], [44.421, 38.281], [44.109, 39.428], [44.794, 39.713], [44.953, 39.336], [45.458, 38.874], [46.144, 38.741], [46.506, 38.771], [47.685, 39.508], [48.06, 39.582], [48.356, 39.289], [48.011, 38.794], [48.634, 38.27], [48.883, 38.32], [49.2, 37.583], [50.148, 37.375], [50.842, 36.873], [52.264, 36.7], [53.826, 36.965], [53.922, 37.199], [54.8, 37.392], [55.512, 37.964], [56.18, 37.935], [56.619, 38.121], [57.33, 38.029], [58.436, 37.522], [59.235, 37.413], [60.378, 36.527], [61.123, 36.492], [61.211, 35.65], [60.803, 34.404], [60.528, 33.676], [60.964, 33.529], [60.536, 32.981], [60.864, 32.183], [60.942, 31.548], [61.699, 31.38], [61.781, 30.736], [60.874, 29.829], [61.369, 29.303], [61.772, 28.699], [62.728, 28.26], [62.755, 27.379], [63.234, 27.217], [63.317, 26.757], [61.874, 26.24], [61.497, 25.078], [59.616, 25.38], [58.526, 25.61], [57.397, 25.74], [56.971, 26.966], [56.492, 27.143], [55.724, 26.965], [54.715, 26.481], [53.493, 26.812], [52.484, 27.581], [51.521, 27.866], [50.853, 28.815], [50.115, 30.148], [49.577, 29.986], [48.941, 30.317], [48.568, 29.927]]]] }, { "N": "Syria", "I": "SY", "C": [[[[35.72, 32.709], [35.701, 32.716], [35.836, 32.868], [35.821, 33.277], [36.066, 33.825], [36.612, 34.202], [36.448, 34.594], [35.998, 34.645], [35.905, 35.41], [36.15, 35.822], [36.418, 36.041], [36.685, 36.26], [36.739, 36.818], [37.067, 36.623], [38.168, 36.901], [38.7, 36.713], [39.523, 36.716], [40.673, 37.091], [41.212, 37.074], [42.35, 37.23], [41.837, 36.606], [41.29, 36.359], [41.384, 35.628], [41.006, 34.419], [38.792, 33.379], [36.834, 32.313], [35.72, 32.709]]]] }, { "N": "Armenia", "I": "AM", "C": [[[[46.506, 38.771], [46.144, 38.741], [45.735, 39.32], [45.74, 39.474], [45.298, 39.472], [45.002, 39.74], [44.794, 39.713], [44.4, 40.005], [43.656, 40.254], [43.753, 40.74], [43.583, 41.092], [44.972, 41.248], [45.179, 40.985], [45.56, 40.812], [45.359, 40.562], [45.892, 40.218], [45.61, 39.9], [46.035, 39.628], [46.483, 39.464], [46.506, 38.771]]]] }, { "N": "Sweden", "I": "SE", "C": [[[[11.027, 58.856], [11.468, 59.432], [12.3, 60.118], [12.631, 61.294], [11.992, 61.8], [11.931, 63.128], [12.58, 64.066], [13.572, 64.049], [13.92, 64.445], [13.556, 64.787], [15.108, 66.194], [16.109, 67.302], [16.769, 68.014], [17.729, 68.011], [17.994, 68.567], [19.879, 68.407], [20.025, 69.065], [20.646, 69.106], [21.979, 68.617], [23.539, 67.936], [23.566, 66.396], [23.903, 66.007], [22.183, 65.724], [21.214, 65.026], [21.37, 64.414], [19.779, 63.61], [17.848, 62.749], [17.12, 61.341], [17.831, 60.637], [18.788, 60.082], [17.869, 58.954], [16.829, 58.72], [16.448, 57.041], [15.88, 56.104], [14.667, 56.201], [14.101, 55.408], [12.943, 55.362], [12.625, 56.307], [11.788, 57.442], [11.027, 58.856]]]] }, { "N": "Belarus", "I": "BY", "C": [[[[28.177, 56.169], [29.23, 55.918], [29.372, 55.67], [29.896, 55.789], [30.874, 55.551], [30.972, 55.082], [30.758, 54.812], [31.384, 54.157], [31.791, 53.975], [31.731, 53.794], [32.406, 53.618], [32.694, 53.351], [32.305, 53.133], [31.498, 53.167], [31.305, 53.074], [31.54, 52.742], [31.786, 52.102], [31.786, 52.102], [30.928, 52.042], [30.619, 51.823], [30.555, 51.32], [30.157, 51.416], [29.255, 51.368], [28.993, 51.602], [28.618, 51.428], [28.242, 51.572], [27.454, 51.592], [26.338, 51.832], [25.328, 51.911], [24.553, 51.888], [24.005, 51.617], [23.527, 51.578], [23.508, 52.024], [23.199, 52.487], [23.799, 52.691], [23.805, 53.09], [23.528, 53.47], [23.484, 53.912], [24.451, 53.906], [25.536, 54.282], [25.768, 54.847], [26.588, 55.167], [26.494, 55.615], [27.102, 55.783], [28.177, 56.169]]]] }, { "N": "Ukraine", "I": "UA", "C": [[[[31.786, 52.102], [32.159, 52.061], [32.412, 52.289], [32.716, 52.238], [33.753, 52.335], [34.392, 51.769], [34.142, 51.566], [34.225, 51.256], [35.022, 51.208], [35.378, 50.774], [35.356, 50.577], [36.626, 50.226], [37.393, 50.384], [38.011, 49.916], [38.595, 49.926], [40.069, 49.601], [40.081, 49.307], [39.675, 48.784], [39.896, 48.232], [39.738, 47.899], [38.771, 47.826], [38.255, 47.546], [38.224, 47.102], [37.425, 47.022], [36.76, 46.699], [35.824, 46.646], [34.962, 46.273], [35.013, 45.738], [34.862, 45.768], [34.732, 45.966], [34.41, 46.005], [33.699, 46.22], [33.436, 45.972], [33.299, 46.081], [31.744, 46.333], [31.675, 46.706], [30.749, 46.583], [30.378, 46.032], [29.603, 45.293], [29.15, 45.465], [28.68, 45.304], [28.234, 45.488], [28.485, 45.597], [28.66, 45.94], [28.934, 46.259], [28.863, 46.438], [29.072, 46.518], [29.171, 46.379], [29.76, 46.35], [30.025, 46.424], [29.838, 46.525], [29.909, 46.674], [29.56, 46.929], [29.415, 47.347], [29.051, 47.51], [29.123, 47.849], [28.671, 48.118], [28.26, 48.156], [27.523, 48.467], [26.858, 48.368], [26.619, 48.221], [26.197, 48.221], [25.946, 47.987], [25.208, 47.891], [24.866, 47.738], [24.402, 47.982], [23.761, 47.986], [23.142, 48.096], [22.711, 47.882], [22.641, 48.15], [22.086, 48.422], [22.281, 48.825], [22.558, 49.086], [22.776, 49.027], [22.518, 49.477], [23.427, 50.309], [23.923, 50.425], [24.03, 50.705], [23.527, 51.578], [24.005, 51.617], [24.553, 51.888], [25.328, 51.911], [26.338, 51.832], [27.454, 51.592], [28.242, 51.572], [28.618, 51.428], [28.993, 51.602], [29.255, 51.368], [30.157, 51.416], [30.555, 51.32], [30.619, 51.823], [30.928, 52.042], [31.786, 52.102]]], [[[33.436, 45.972], [33.699, 46.22], [34.41, 46.005], [34.732, 45.966], [34.862, 45.768], [35.013, 45.738], [35.021, 45.651], [35.51, 45.41], [36.53, 45.47], [36.335, 45.113], [35.24, 44.94], [33.883, 44.361], [33.326, 44.565], [33.547, 45.035], [32.454, 45.327], [32.631, 45.519], [33.588, 45.852], [33.436, 45.972]]]] }, { "N": "Poland", "I": "PL", "C": [[[[23.484, 53.912], [23.528, 53.47], [23.805, 53.09], [23.799, 52.691], [23.199, 52.487], [23.508, 52.024], [23.527, 51.578], [24.03, 50.705], [23.923, 50.425], [23.427, 50.309], [22.518, 49.477], [22.776, 49.027], [22.558, 49.086], [21.608, 49.47], [20.888, 49.329], [20.416, 49.431], [19.825, 49.217], [19.321, 49.572], [18.91, 49.436], [18.853, 49.496], [18.393, 49.989], [17.649, 50.049], [17.555, 50.362], [16.869, 50.474], [16.719, 50.216], [16.176, 50.423], [16.239, 50.698], [15.491, 50.785], [15.017, 51.107], [14.607, 51.745], [14.685, 52.09], [14.438, 52.625], [14.075, 52.981], [14.353, 53.248], [14.12, 53.757], [14.803, 54.051], [16.363, 54.513], [17.623, 54.852], [18.621, 54.683], [18.696, 54.439], [19.661, 54.426], [20.892, 54.313], [22.731, 54.328], [23.244, 54.221], [23.484, 53.912]]]] }, { "N": "Austria", "I": "AT", "C": [[[[16.98, 48.123], [16.904, 47.715], [16.341, 47.713], [16.534, 47.496], [16.202, 46.852], [16.012, 46.684], [15.137, 46.659], [14.632, 46.432], [13.806, 46.509], [12.376, 46.768], [12.153, 47.115], [11.165, 46.942], [11.049, 46.751], [10.443, 46.894], [9.932, 46.921], [9.48, 47.103], [9.633, 47.348], [9.594, 47.525], [9.896, 47.58], [10.402, 47.302], [10.545, 47.566], [11.426, 47.524], [12.141, 47.703], [12.621, 47.672], [12.933, 47.468], [13.026, 47.638], [12.884, 48.289], [13.243, 48.416], [13.596, 48.877], [14.339, 48.555], [14.901, 48.964], [15.253, 49.039], [16.03, 48.734], [16.499, 48.786], [16.96, 48.597], [16.88, 48.47], [16.98, 48.123]]]] }, { "N": "Hungary", "I": "HU", "C": [[[[22.086, 48.422], [22.641, 48.15], [22.711, 47.882], [22.1, 47.672], [21.627, 46.994], [21.022, 46.316], [20.22, 46.127], [19.596, 46.172], [18.83, 45.909], [18.83, 45.909], [18.456, 45.759], [17.63, 45.952], [16.883, 46.381], [16.565, 46.504], [16.371, 46.841], [16.202, 46.852], [16.534, 47.496], [16.341, 47.713], [16.904, 47.715], [16.98, 48.123], [17.488, 47.867], [17.857, 47.758], [18.697, 47.881], [18.777, 48.082], [19.174, 48.111], [19.661, 48.267], [19.769, 48.203], [20.239, 48.328], [20.474, 48.563], [20.801, 48.624], [21.872, 48.32], [22.086, 48.422]]]] }, { "N": "Moldova", "I": "MD", "C": [[[[26.619, 48.221], [26.858, 48.368], [27.523, 48.467], [28.26, 48.156], [28.671, 48.118], [29.123, 47.849], [29.051, 47.51], [29.415, 47.347], [29.56, 46.929], [29.909, 46.674], [29.838, 46.525], [30.025, 46.424], [29.76, 46.35], [29.171, 46.379], [29.072, 46.518], [28.863, 46.438], [28.934, 46.259], [28.66, 45.94], [28.485, 45.597], [28.234, 45.488], [28.054, 45.945], [28.16, 46.372], [28.128, 46.81], [27.551, 47.405], [27.234, 47.827], [26.924, 48.123], [26.619, 48.221]]]] }, { "N": "Romania", "I": "RO", "C": [[[[28.234, 45.488], [28.68, 45.304], [29.15, 45.465], [29.603, 45.293], [29.627, 45.035], [29.142, 44.82], [28.838, 44.914], [28.558, 43.707], [27.97, 43.812], [27.242, 44.176], [26.065, 43.943], [25.569, 43.688], [24.101, 43.741], [23.332, 43.897], [22.945, 43.824], [22.657, 44.235], [22.474, 44.409], [22.706, 44.578], [22.459, 44.703], [22.145, 44.478], [21.562, 44.769], [21.484, 45.181], [20.874, 45.416], [20.762, 45.735], [20.22, 46.127], [21.022, 46.316], [21.627, 46.994], [22.1, 47.672], [22.711, 47.882], [23.142, 48.096], [23.761, 47.986], [24.402, 47.982], [24.866, 47.738], [25.208, 47.891], [25.946, 47.987], [26.197, 48.221], [26.619, 48.221], [26.924, 48.123], [27.234, 47.827], [27.551, 47.405], [28.128, 46.81], [28.16, 46.372], [28.054, 45.945], [28.234, 45.488]]]] }, { "N": "Lithuania", "I": "LT", "C": [[[[26.494, 55.615], [26.588, 55.167], [25.768, 54.847], [25.536, 54.282], [24.451, 53.906], [23.484, 53.912], [23.244, 54.221], [22.731, 54.328], [22.651, 54.583], [22.758, 54.857], [22.316, 55.015], [21.268, 55.19], [21.056, 56.031], [22.201, 56.338], [23.878, 56.274], [24.861, 56.373], [25.001, 56.165], [25.533, 56.1], [26.494, 55.615]]]] }, { "N": "Latvia", "I": "LV", "C": [[[[27.288, 57.475], [27.77, 57.244], [27.855, 56.759], [28.177, 56.169], [27.102, 55.783], [26.494, 55.615], [25.533, 56.1], [25.001, 56.165], [24.861, 56.373], [23.878, 56.274], [22.201, 56.338], [21.056, 56.031], [21.09, 56.784], [21.582, 57.412], [22.524, 57.753], [23.318, 57.006], [24.121, 57.026], [24.313, 57.793], [25.165, 57.97], [25.603, 57.848], [26.464, 57.476], [27.288, 57.475]]]] }, { "N": "Estonia", "I": "EE", "C": [[[[27.981, 59.475], [27.981, 59.475], [28.132, 59.301], [27.42, 58.725], [27.717, 57.792], [27.288, 57.475], [26.464, 57.476], [25.603, 57.848], [25.165, 57.97], [24.313, 57.793], [24.429, 58.383], [24.061, 58.257], [23.427, 58.613], [23.34, 59.187], [24.604, 59.466], [25.864, 59.611], [26.949, 59.446], [27.981, 59.475], [27.981, 59.475]]]] }, { "N": "Germany", "I": "DE", "C": [[[[14.12, 53.757], [14.353, 53.248], [14.075, 52.981], [14.438, 52.625], [14.685, 52.09], [14.607, 51.745], [15.017, 51.107], [14.571, 51.002], [14.307, 51.117], [14.056, 50.927], [13.338, 50.733], [12.967, 50.484], [12.24, 50.266], [12.415, 49.969], [12.521, 49.547], [13.031, 49.307], [13.596, 48.877], [13.243, 48.416], [12.884, 48.289], [13.026, 47.638], [12.933, 47.468], [12.621, 47.672], [12.141, 47.703], [11.426, 47.524], [10.545, 47.566], [10.402, 47.302], [9.896, 47.58], [9.594, 47.525], [8.523, 47.831], [8.317, 47.614], [7.467, 47.621], [7.594, 48.333], [8.099, 49.018], [6.658, 49.202], [6.186, 49.464], [6.243, 49.902], [6.043, 50.128], [6.157, 50.804], [5.989, 51.852], [6.589, 51.852], [6.843, 52.228], [7.092, 53.144], [6.905, 53.482], [7.1, 53.694], [7.936, 53.748], [8.122, 53.528], [8.801, 54.021], [8.572, 54.396], [8.526, 54.963], [9.282, 54.831], [9.922, 54.983], [9.94, 54.597], [10.95, 54.364], [10.939, 54.009], [11.956, 54.196], [12.518, 54.47], [13.647, 54.076], [14.12, 53.757]]]] }, { "N": "Bulgaria", "I": "BG", "C": [[[[22.657, 44.235], [22.945, 43.824], [23.332, 43.897], [24.101, 43.741], [25.569, 43.688], [26.065, 43.943], [27.242, 44.176], [27.97, 43.812], [28.558, 43.707], [28.039, 43.293], [27.674, 42.578], [27.997, 42.007], [27.136, 42.141], [26.117, 41.827], [26.106, 41.329], [25.197, 41.234], [24.493, 41.584], [23.692, 41.309], [22.952, 41.338], [22.881, 41.999], [22.381, 42.32], [22.545, 42.461], [22.437, 42.58], [22.605, 42.899], [22.986, 43.211], [22.5, 43.643], [22.41, 44.008], [22.657, 44.235]]]] }, { "N": "Greece", "I": "GR", "C": [[[[26.29, 35.3], [26.165, 35.005], [24.725, 34.92], [24.735, 35.085], [23.515, 35.28], [23.7, 35.705], [24.247, 35.368], [25.025, 35.425], [25.769, 35.354], [25.745, 35.18], [26.29, 35.3]]], [[[22.952, 41.338], [23.692, 41.309], [24.493, 41.584], [25.197, 41.234], [26.106, 41.329], [26.117, 41.827], [26.604, 41.562], [26.295, 40.936], [26.057, 40.824], [25.448, 40.853], [24.926, 40.947], [23.715, 40.687], [24.408, 40.125], [23.9, 39.962], [23.343, 39.961], [22.814, 40.476], [22.626, 40.257], [22.85, 39.659], [23.35, 39.19], [22.973, 38.971], [23.53, 38.51], [24.025, 38.22], [24.04, 37.655], [23.115, 37.92], [23.41, 37.41], [22.775, 37.305], [23.154, 36.423], [22.49, 36.41], [21.67, 36.845], [21.295, 37.645], [21.12, 38.31], [20.73, 38.77], [20.218, 39.34], [20.15, 39.625], [20.615, 40.11], [20.675, 40.435], [21, 40.58], [21.02, 40.843], [21.674, 40.931], [22.055, 41.15], [22.597, 41.13], [22.762, 41.305], [22.952, 41.338]]]] }, { "N": "Turkey", "I": "TR", "C": [[[[44.773, 37.17], [44.293, 37.002], [43.942, 37.256], [42.779, 37.385], [42.35, 37.23], [41.212, 37.074], [40.673, 37.091], [39.523, 36.716], [38.7, 36.713], [38.168, 36.901], [37.067, 36.623], [36.739, 36.818], [36.685, 36.26], [36.418, 36.041], [36.15, 35.822], [35.782, 36.275], [36.161, 36.651], [35.551, 36.565], [34.715, 36.796], [34.027, 36.22], [32.509, 36.108], [31.7, 36.644], [30.622, 36.678], [30.391, 36.263], [29.7, 36.144], [28.733, 36.677], [27.641, 36.659], [27.049, 37.653], [26.318, 38.208], [26.805, 38.986], [26.171, 39.464], [27.28, 40.42], [28.82, 40.46], [29.24, 41.22], [31.146, 41.088], [32.348, 41.736], [33.513, 42.019], [35.168, 42.04], [36.913, 41.335], [38.348, 40.949], [39.513, 41.103], [40.373, 41.014], [41.554, 41.536], [42.62, 41.583], [43.583, 41.092], [43.753, 40.74], [43.656, 40.254], [44.4, 40.005], [44.794, 39.713], [44.109, 39.428], [44.421, 38.281], [44.226, 37.972], [44.773, 37.17], [44.773, 37.17]]], [[[26.117, 41.827], [27.136, 42.141], [27.997, 42.007], [28.116, 41.623], [28.988, 41.3], [28.806, 41.055], [27.619, 41], [27.192, 40.691], [26.358, 40.152], [26.043, 40.618], [26.057, 40.824], [26.295, 40.936], [26.604, 41.562], [26.117, 41.827]]]] }, { "N": "Albania", "I": "AL", "C": [[[[21.02, 40.843], [21, 40.58], [20.675, 40.435], [20.615, 40.11], [20.15, 39.625], [19.98, 39.695], [19.96, 39.915], [19.406, 40.251], [19.319, 40.727], [19.404, 41.41], [19.54, 41.72], [19.372, 41.878], [19.372, 41.878], [19.304, 42.196], [19.738, 42.688], [19.802, 42.5], [20.071, 42.589], [20.284, 42.32], [20.523, 42.218], [20.59, 41.855], [20.59, 41.855], [20.463, 41.515], [20.605, 41.086], [21.02, 40.843]]]] }, { "N": "Croatia", "I": "HR", "C": [[[[16.565, 46.504], [16.883, 46.381], [17.63, 45.952], [18.456, 45.759], [18.83, 45.909], [19.073, 45.522], [19.39, 45.237], [19.005, 44.86], [18.553, 45.082], [17.862, 45.068], [17.002, 45.234], [16.535, 45.212], [16.318, 45.004], [15.959, 45.234], [15.75, 44.819], [16.24, 44.351], [16.456, 44.041], [16.916, 43.668], [17.297, 43.446], [17.675, 43.029], [18.56, 42.65], [18.45, 42.48], [18.45, 42.48], [17.51, 42.85], [16.93, 43.21], [16.015, 43.507], [15.174, 44.243], [15.376, 44.318], [14.92, 44.738], [14.902, 45.076], [14.259, 45.234], [13.952, 44.802], [13.657, 45.137], [13.679, 45.484], [13.715, 45.5], [14.412, 45.466], [14.595, 45.635], [14.935, 45.472], [15.328, 45.452], [15.324, 45.732], [15.672, 45.834], [15.769, 46.238], [16.565, 46.504]]]] }, { "N": "Switzerland", "I": "CH", "C": [[[[9.594, 47.525], [9.633, 47.348], [9.48, 47.103], [9.932, 46.921], [10.443, 46.894], [10.363, 46.484], [9.923, 46.315], [9.183, 46.44], [8.966, 46.037], [8.49, 46.005], [8.317, 46.164], [7.756, 45.824], [7.274, 45.777], [6.844, 45.991], [6.5, 46.43], [6.023, 46.273], [6.037, 46.726], [6.769, 47.288], [6.737, 47.542], [7.192, 47.45], [7.467, 47.621], [8.317, 47.614], [8.523, 47.831], [9.594, 47.525]]]] }, { "N": "Luxembourg", "I": "LU", "C": [[[[6.043, 50.128], [6.243, 49.902], [6.186, 49.464], [5.898, 49.443], [5.674, 49.529], [5.782, 50.09], [6.043, 50.128]]]] }, { "N": "Belgium", "I": "BE", "C": [[[[6.157, 50.804], [6.043, 50.128], [5.782, 50.09], [5.674, 49.529], [4.799, 49.985], [4.286, 49.907], [3.588, 50.379], [3.123, 50.78], [2.658, 50.797], [2.514, 51.149], [3.315, 51.346], [3.315, 51.346], [3.315, 51.346], [4.047, 51.267], [4.974, 51.475], [5.607, 51.037], [6.157, 50.804]]]] }, { "N": "Netherlands", "I": "NL", "C": [[[[6.905, 53.482], [7.092, 53.144], [6.843, 52.228], [6.589, 51.852], [5.989, 51.852], [6.157, 50.804], [5.607, 51.037], [4.974, 51.475], [4.047, 51.267], [3.315, 51.346], [3.315, 51.346], [3.83, 51.621], [4.706, 53.092], [6.074, 53.51], [6.905, 53.482]]]] }, { "N": "Portugal", "I": "PT", "C": [[[[-9.035, 41.881], [-8.672, 42.135], [-8.264, 42.28], [-8.013, 41.791], [-7.423, 41.792], [-7.251, 41.918], [-6.669, 41.883], [-6.389, 41.382], [-6.851, 41.111], [-6.864, 40.331], [-7.026, 40.185], [-7.067, 39.712], [-7.499, 39.63], [-7.098, 39.03], [-7.374, 38.373], [-7.029, 38.076], [-7.167, 37.804], [-7.537, 37.429], [-7.454, 37.098], [-7.856, 36.838], [-8.383, 36.979], [-8.899, 36.869], [-8.746, 37.651], [-8.84, 38.266], [-9.287, 38.358], [-9.527, 38.737], [-9.447, 39.392], [-9.048, 39.755], [-8.977, 40.159], [-8.769, 40.761], [-8.791, 41.184], [-8.991, 41.543], [-9.035, 41.881]]]] }, { "N": "Spain", "I": "ES", "C": [[[[-7.454, 37.098], [-7.537, 37.429], [-7.167, 37.804], [-7.029, 38.076], [-7.374, 38.373], [-7.098, 39.03], [-7.499, 39.63], [-7.067, 39.712], [-7.026, 40.185], [-6.864, 40.331], [-6.851, 41.111], [-6.389, 41.382], [-6.669, 41.883], [-7.251, 41.918], [-7.423, 41.792], [-8.013, 41.791], [-8.264, 42.28], [-8.672, 42.135], [-9.035, 41.881], [-8.984, 42.593], [-9.393, 43.027], [-7.978, 43.748], [-6.754, 43.568], [-5.412, 43.574], [-4.348, 43.403], [-3.518, 43.456], [-1.901, 43.423], [-1.503, 43.034], [0.338, 42.58], [0.702, 42.796], [1.827, 42.343], [2.986, 42.473], [3.039, 41.892], [2.092, 41.226], [0.811, 41.015], [0.721, 40.678], [0.107, 40.124], [-0.279, 39.31], [0.111, 38.739], [-0.467, 38.292], [-0.683, 37.642], [-1.438, 37.443], [-2.146, 36.674], [-3.416, 36.659], [-4.369, 36.678], [-4.995, 36.325], [-5.377, 35.947], [-5.866, 36.03], [-6.237, 36.368], [-6.52, 36.943], [-7.454, 37.098]]]] }, { "N": "Ireland", "I": "IE", "C": [[[[-6.198, 53.868], [-6.033, 53.153], [-6.789, 52.26], [-8.562, 51.669], [-9.977, 51.82], [-9.166, 52.865], [-9.689, 53.881], [-8.328, 54.665], [-7.572, 55.132], [-7.366, 54.596], [-7.572, 54.06], [-6.954, 54.074], [-6.198, 53.868]]]] }, { "N": "New Caledonia", "I": "NC", "C": [[[[165.78, -21.08], [166.6, -21.7], [167.12, -22.16], [166.74, -22.4], [166.19, -22.13], [165.474, -21.68], [164.83, -21.15], [164.168, -20.445], [164.03, -20.106], [164.46, -20.12], [165.02, -20.46], [165.46, -20.8], [165.78, -21.08]]]] }, { "N": "Solomon Islands", "I": "SB", "C": [[[[162.119, -10.483], [162.399, -10.826], [161.7, -10.82], [161.32, -10.205], [161.917, -10.447], [162.119, -10.483]]], [[[161.68, -9.6], [161.529, -9.784], [160.788, -8.918], [160.58, -8.32], [160.92, -8.32], [161.28, -9.12], [161.68, -9.6]]], [[[160.852, -9.873], [160.463, -9.895], [159.849, -9.794], [159.64, -9.64], [159.703, -9.243], [160.363, -9.4], [160.689, -9.61], [160.852, -9.873]]], [[[159.64, -8.02], [159.875, -8.337], [159.917, -8.538], [159.134, -8.114], [158.586, -7.755], [158.211, -7.422], [158.36, -7.32], [158.82, -7.56], [159.64, -8.02]]], [[[157.14, -7.022], [157.538, -7.348], [157.339, -7.405], [156.902, -7.177], [156.491, -6.766], [156.543, -6.599], [157.14, -7.022]]]] }, { "N": "New Zealand", "I": "NZ", "C": [[[[176.886, -40.066], [176.508, -40.605], [176.012, -41.29], [175.24, -41.688], [175.068, -41.426], [174.651, -41.282], [175.228, -40.459], [174.9, -39.909], [173.824, -39.509], [173.852, -39.147], [174.575, -38.798], [174.743, -38.028], [174.697, -37.381], [174.292, -36.711], [174.319, -36.535], [173.841, -36.122], [173.054, -35.237], [172.636, -34.529], [173.007, -34.451], [173.551, -35.006], [174.329, -35.265], [174.612, -36.156], [175.337, -37.209], [175.358, -36.526], [175.809, -36.799], [175.958, -37.555], [176.763, -37.881], [177.439, -37.961], [178.01, -37.58], [178.517, -37.695], [178.275, -38.583], [177.97, -39.166], [177.207, -39.146], [176.94, -39.45], [177.033, -39.88], [176.886, -40.066]]], [[[169.668, -43.555], [170.525, -43.032], [171.125, -42.513], [171.57, -41.767], [171.949, -41.514], [172.097, -40.956], [172.799, -40.494], [173.02, -40.919], [173.247, -41.332], [173.958, -40.927], [174.248, -41.349], [174.249, -41.77], [173.876, -42.233], [173.223, -42.97], [172.711, -43.372], [173.08, -43.853], [172.309, -43.866], [171.453, -44.243], [171.185, -44.897], [170.617, -45.909], [169.831, -46.356], [169.332, -46.641], [168.411, -46.62], [167.764, -46.29], [166.677, -46.22], [166.509, -45.853], [167.046, -45.111], [168.304, -44.124], [168.949, -43.936], [169.668, -43.555]]]] }, { "N": "Australia", "I": "AU", "C": [[[[147.689, -40.808], [148.289, -40.875], [148.36, -42.062], [148.017, -42.407], [147.914, -43.212], [147.565, -42.938], [146.87, -43.635], [146.663, -43.581], [146.048, -43.55], [145.432, -42.694], [145.295, -42.034], [144.718, -41.163], [144.744, -40.704], [145.398, -40.793], [146.364, -41.138], [146.909, -41.001], [147.689, -40.808]]], [[[126.149, -32.216], [125.089, -32.729], [124.222, -32.959], [124.029, -33.484], [123.66, -33.89], [122.811, -33.914], [122.183, -34.003], [121.299, -33.821], [120.58, -33.93], [119.894, -33.976], [119.299, -34.509], [119.007, -34.464], [118.506, -34.747], [118.025, -35.065], [117.296, -35.025], [116.625, -35.025], [115.564, -34.386], [115.027, -34.197], [115.049, -33.623], [115.545, -33.487], [115.715, -33.26], [115.679, -32.9], [115.802, -32.205], [115.69, -31.612], [115.161, -30.602], [114.997, -30.031], [115.04, -29.461], [114.642, -28.81], [114.616, -28.516], [114.174, -28.118], [114.049, -27.335], [113.477, -26.543], [113.339, -26.117], [113.778, -26.549], [113.441, -25.621], [113.937, -25.911], [114.233, -26.298], [114.216, -25.786], [113.721, -24.999], [113.625, -24.684], [113.394, -24.385], [113.502, -23.806], [113.707, -23.56], [113.843, -23.06], [113.737, -22.475], [114.15, -21.756], [114.225, -22.517], [114.648, -21.83], [115.46, -21.495], [115.947, -21.069], [116.712, -20.702], [117.166, -20.624], [117.442, -20.747], [118.23, -20.374], [118.836, -20.263], [118.988, -20.044], [119.252, -19.953], [119.805, -19.977], [120.856, -19.684], [121.4, -19.24], [121.655, -18.705], [122.242, -18.198], [122.287, -17.799], [122.313, -17.255], [123.013, -16.405], [123.434, -17.269], [123.859, -17.069], [123.503, -16.597], [123.817, -16.111], [124.258, -16.328], [124.38, -15.567], [124.926, -15.075], [125.167, -14.68], [125.67, -14.51], [125.686, -14.231], [126.125, -14.347], [126.143, -14.096], [126.583, -13.953], [127.066, -13.818], [127.805, -14.277], [128.36, -14.869], [128.986, -14.876], [129.621, -14.97], [129.41, -14.421], [129.889, -13.619], [130.339, -13.357], [130.184, -13.108], [130.618, -12.536], [131.223, -12.184], [131.735, -12.302], [132.575, -12.114], [132.557, -11.603], [131.825, -11.274], [132.357, -11.129], [133.02, -11.376], [133.551, -11.787], [134.393, -12.042], [134.679, -11.941], [135.298, -12.249], [135.883, -11.962], [136.258, -12.049], [136.492, -11.857], [136.952, -12.352], [136.685, -12.887], [136.305, -13.291], [135.962, -13.325], [136.078, -13.724], [135.784, -14.224], [135.429, -14.715], [135.5, -14.998], [136.295, -15.55], [137.065, -15.871], [137.58, -16.215], [138.303, -16.808], [138.585, -16.807], [139.109, -17.063], [139.261, -17.372], [140.215, -17.711], [140.875, -17.369], [141.071, -16.832], [141.274, -16.389], [141.398, -15.841], [141.702, -15.045], [141.563, -14.561], [141.636, -14.27], [141.52, -13.698], [141.651, -12.945], [141.843, -12.742], [141.687, -12.408], [141.929, -11.877], [142.118, -11.328], [142.144, -11.043], [142.515, -10.668], [142.797, -11.157], [142.867, -11.785], [143.116, -11.906], [143.159, -12.326], [143.522, -12.834], [143.597, -13.4], [143.562, -13.764], [143.922, -14.548], [144.564, -14.171], [144.895, -14.594], [145.375, -14.985], [145.272, -15.428], [145.485, -16.286], [145.637, -16.785], [145.889, -16.907], [146.16, -17.762], [146.064, -18.28], [146.387, -18.958], [147.471, -19.481], [148.178, -19.956], [148.848, -20.391], [148.717, -20.633], [149.289, -21.261], [149.678, -22.343], [150.077, -22.123], [150.483, -22.556], [150.727, -22.402], [150.9, -23.462], [151.609, -24.076], [152.074, -24.458], [152.855, -25.268], [153.136, -26.071], [153.162, -26.641], [153.093, -27.26], [153.569, -28.11], [153.512, -28.995], [153.339, -29.458], [153.069, -30.35], [153.09, -30.924], [152.892, -31.64], [152.45, -32.55], [151.709, -33.041], [151.344, -33.816], [151.011, -34.31], [150.714, -35.173], [150.328, -35.672], [150.075, -36.42], [149.946, -37.109], [149.997, -37.425], [149.424, -37.773], [148.305, -37.809], [147.382, -38.219], [146.922, -38.607], [146.318, -39.036], [145.49, -38.594], [144.877, -38.417], [145.032, -37.896], [144.486, -38.085], [143.61, -38.809], [142.745, -38.538], [142.178, -38.38], [141.607, -38.309], [140.639, -38.019], [139.992, -37.403], [139.807, -36.644], [139.574, -36.138], [139.083, -35.733], [138.121, -35.612], [138.449, -35.127], [138.208, -34.385], [137.719, -35.077], [136.829, -35.261], [137.352, -34.707], [137.504, -34.13], [137.89, -33.64], [137.81, -32.9], [136.997, -33.753], [136.372, -34.095], [135.989, -34.89], [135.208, -34.479], [135.239, -33.948], [134.613, -33.223], [134.086, -32.848], [134.274, -32.617], [132.991, -32.011], [132.288, -31.983], [131.326, -31.496], [129.536, -31.59], [128.241, -31.948], [127.103, -32.282], [126.149, -32.216]]]] }, { "N": "Sri Lanka", "I": "LK", "C": [[[[81.788, 7.523], [81.637, 6.482], [81.218, 6.197], [80.348, 5.968], [79.872, 6.763], [79.695, 8.201], [80.148, 9.824], [80.839, 9.268], [81.304, 8.564], [81.788, 7.523]]]] }, { "N": "China", "I": "CN", "C": [[[[109.475, 18.198], [108.655, 18.508], [108.626, 19.368], [109.119, 19.821], [110.212, 20.101], [110.787, 20.078], [111.01, 19.696], [110.571, 19.256], [110.339, 18.678], [109.475, 18.198]]], [[[80.26, 42.35], [80.18, 42.92], [80.866, 43.18], [79.966, 44.918], [81.947, 45.317], [82.459, 45.54], [83.18, 47.33], [85.164, 47.001], [85.72, 47.453], [85.768, 48.456], [86.599, 48.549], [87.36, 49.215], [87.751, 49.297], [88.014, 48.599], [88.854, 48.069], [90.281, 47.694], [90.971, 46.888], [90.586, 45.72], [90.946, 45.286], [92.134, 45.115], [93.481, 44.975], [94.689, 44.352], [95.307, 44.241], [95.762, 43.319], [96.349, 42.726], [97.452, 42.749], [99.516, 42.525], [100.846, 42.664], [101.833, 42.515], [103.312, 41.907], [104.522, 41.908], [104.965, 41.597], [106.129, 42.134], [107.745, 42.482], [109.244, 42.519], [110.412, 42.871], [111.13, 43.407], [111.83, 43.743], [111.668, 44.073], [111.348, 44.457], [111.873, 45.102], [112.436, 45.012], [113.464, 44.809], [114.46, 45.34], [115.985, 45.727], [116.718, 46.388], [117.422, 46.673], [118.874, 46.805], [119.663, 46.693], [119.773, 47.048], [118.867, 47.747], [118.064, 48.067], [117.296, 47.698], [116.309, 47.853], [115.743, 47.727], [115.485, 48.135], [116.192, 49.135], [116.679, 49.889], [117.879, 49.511], [119.288, 50.143], [119.279, 50.583], [120.182, 51.644], [120.738, 51.964], [120.726, 52.516], [120.177, 52.754], [121.003, 53.251], [122.246, 53.432], [123.571, 53.459], [125.068, 53.161], [125.946, 52.793], [126.564, 51.784], [126.939, 51.354], [127.287, 50.74], [127.657, 49.76], [129.398, 49.441], [130.582, 48.73], [130.987, 47.79], [132.507, 47.789], [133.374, 48.183], [135.026, 48.478], [134.501, 47.578], [134.112, 47.212], [133.77, 46.117], [133.097, 45.144], [131.883, 45.321], [131.025, 44.968], [131.289, 44.112], [131.145, 42.93], [130.634, 42.903], [130.64, 42.395], [129.994, 42.985], [129.597, 42.425], [128.052, 41.994], [128.208, 41.467], [127.344, 41.503], [126.869, 41.817], [126.182, 41.107], [125.08, 40.57], [124.266, 39.928], [122.868, 39.638], [122.131, 39.17], [121.055, 38.897], [121.586, 39.361], [121.377, 39.75], [122.169, 40.422], [121.64, 40.946], [120.769, 40.593], [119.64, 39.898], [119.023, 39.252], [118.043, 39.204], [117.533, 38.738], [118.06, 38.061], [118.878, 37.897], [118.912, 37.448], [119.703, 37.156], [120.823, 37.87], [121.711, 37.481], [122.358, 37.454], [122.52, 36.931], [121.104, 36.651], [120.637, 36.111], [119.665, 35.61], [119.151, 34.91], [120.228, 34.36], [120.62, 33.377], [121.229, 32.46], [121.908, 31.692], [121.892, 30.949], [121.264, 30.676], [121.504, 30.143], [122.092, 29.833], [121.938, 29.018], [121.684, 28.226], [121.126, 28.136], [120.395, 27.053], [119.585, 25.741], [118.657, 24.547], [117.282, 23.625], [115.891, 22.783], [114.764, 22.668], [114.153, 22.224], [113.807, 22.548], [113.241, 22.051], [111.844, 21.55], [110.785, 21.397], [110.444, 20.341], [109.89, 20.282], [109.628, 21.008], [109.864, 21.395], [108.523, 21.715], [108.05, 21.552], [107.043, 21.812], [106.567, 22.218], [106.725, 22.794], [105.811, 22.977], [105.329, 23.352], [104.477, 22.819], [103.505, 22.704], [102.707, 22.709], [102.17, 22.465], [101.652, 22.318], [101.803, 21.174], [101.27, 21.202], [101.18, 21.437], [101.15, 21.85], [100.417, 21.559], [99.983, 21.743], [99.241, 22.118], [99.532, 22.949], [98.899, 23.143], [98.66, 24.063], [97.605, 23.897], [97.725, 25.084], [98.672, 25.919], [98.712, 26.744], [98.683, 27.509], [98.246, 27.747], [97.912, 28.336], [97.327, 28.262], [96.249, 28.411], [96.587, 28.831], [96.118, 29.453], [95.405, 29.032], [94.566, 29.277], [93.413, 28.641], [92.503, 27.897], [91.697, 27.772], [91.259, 28.041], [90.731, 28.065], [90.016, 28.296], [89.476, 28.043], [88.814, 27.299], [88.73, 28.087], [88.12, 27.877], [86.955, 27.974], [85.823, 28.204], [85.012, 28.643], [84.235, 28.84], [83.899, 29.32], [83.337, 29.464], [82.328, 30.115], [81.526, 30.423], [81.111, 30.183], [79.721, 30.883], [78.739, 31.516], [78.458, 32.618], [79.176, 32.484], [79.209, 32.994], [78.811, 33.506], [78.912, 34.322], [77.837, 35.494], [76.193, 35.898], [75.897, 36.667], [75.158, 37.133], [74.98, 37.42], [74.83, 37.99], [74.865, 38.379], [74.258, 38.607], [73.929, 38.506], [73.675, 39.431], [73.96, 39.66], [73.822, 39.894], [74.777, 40.366], [75.468, 40.562], [76.526, 40.428], [76.904, 41.066], [78.187, 41.185], [78.544, 41.582], [80.119, 42.124], [80.26, 42.35]]]] }, { "N": "Taiwan", "I": "TW", "C": [[[[121.778, 24.394], [121.176, 22.791], [120.747, 21.971], [120.22, 22.815], [120.106, 23.556], [120.695, 24.538], [121.495, 25.295], [121.951, 24.998], [121.778, 24.394]]]] }, { "N": "Italy", "I": "IT", "C": [[[[10.443, 46.894], [11.049, 46.751], [11.165, 46.942], [12.153, 47.115], [12.376, 46.768], [13.806, 46.509], [13.698, 46.017], [13.938, 45.591], [13.142, 45.737], [12.329, 45.382], [12.384, 44.885], [12.261, 44.6], [12.589, 44.091], [13.527, 43.588], [14.03, 42.761], [15.143, 41.955], [15.926, 41.961], [16.17, 41.74], [15.889, 41.541], [16.785, 41.18], [17.519, 40.877], [18.377, 40.356], [18.48, 40.169], [18.293, 39.811], [17.738, 40.278], [16.87, 40.442], [16.449, 39.795], [17.171, 39.425], [17.053, 38.903], [16.635, 38.844], [16.101, 37.986], [15.684, 37.909], [15.688, 38.215], [15.892, 38.751], [16.109, 38.965], [15.719, 39.544], [15.414, 40.048], [14.998, 40.173], [14.703, 40.605], [14.061, 40.786], [13.628, 41.188], [12.888, 41.253], [12.107, 41.705], [11.192, 42.355], [10.512, 42.931], [10.2, 43.92], [9.702, 44.036], [8.889, 44.366], [8.429, 44.231], [7.851, 43.767], [7.435, 43.694], [7.55, 44.128], [7.008, 44.255], [6.75, 45.029], [7.097, 45.333], [6.802, 45.709], [6.844, 45.991], [7.274, 45.777], [7.756, 45.824], [8.317, 46.164], [8.49, 46.005], [8.966, 46.037], [9.183, 46.44], [9.923, 46.315], [10.363, 46.484], [10.443, 46.894]]], [[[14.761, 38.144], [15.52, 38.231], [15.16, 37.444], [15.31, 37.134], [15.1, 36.62], [14.335, 36.997], [13.827, 37.105], [12.431, 37.613], [12.571, 38.126], [13.741, 38.035], [14.761, 38.144]]], [[[8.71, 40.9], [9.21, 41.21], [9.81, 40.5], [9.67, 39.177], [9.215, 39.24], [8.807, 38.907], [8.428, 39.172], [8.388, 40.378], [8.16, 40.95], [8.71, 40.9]]]] }, { "N": "Denmark", "I": "DK", "C": [[[[9.922, 54.983], [9.282, 54.831], [8.526, 54.963], [8.12, 55.518], [8.09, 56.54], [8.257, 56.81], [8.543, 57.11], [9.424, 57.172], [9.776, 57.448], [10.58, 57.73], [10.546, 57.216], [10.25, 56.89], [10.37, 56.61], [10.912, 56.459], [10.668, 56.081], [10.37, 56.19], [9.65, 55.47], [9.922, 54.983]]], [[[12.371, 56.111], [12.69, 55.61], [12.09, 54.8], [11.044, 55.365], [10.904, 55.78], [12.371, 56.111]]]] }, { "N": "United Kingdom", "I": "GB", "C": [[[[-6.198, 53.868], [-6.954, 54.074], [-7.572, 54.06], [-7.366, 54.596], [-7.572, 55.132], [-6.734, 55.173], [-5.662, 54.555], [-6.198, 53.868]]], [[[-3.094, 53.405], [-3.092, 53.404], [-2.945, 53.985], [-3.615, 54.601], [-3.63, 54.615], [-4.844, 54.791], [-5.083, 55.062], [-4.719, 55.508], [-5.048, 55.784], [-5.586, 55.311], [-5.645, 56.275], [-6.15, 56.785], [-5.787, 57.819], [-5.01, 58.63], [-4.211, 58.551], [-3.005, 58.635], [-4.074, 57.553], [-3.055, 57.69], [-1.959, 57.685], [-2.22, 56.87], [-3.119, 55.974], [-2.085, 55.91], [-2.006, 55.805], [-1.115, 54.625], [-0.43, 54.464], [0.185, 53.325], [0.47, 52.93], [1.682, 52.74], [1.56, 52.1], [1.051, 51.807], [1.45, 51.289], [0.55, 50.766], [-0.788, 50.775], [-2.49, 50.5], [-2.956, 50.697], [-3.617, 50.228], [-4.543, 50.342], [-5.245, 49.96], [-5.777, 50.16], [-4.31, 51.21], [-3.415, 51.426], [-3.423, 51.427], [-4.984, 51.593], [-5.267, 51.991], [-4.222, 52.301], [-4.77, 52.84], [-4.58, 53.495], [-3.094, 53.405]]]] }, { "N": "Iceland", "I": "IS", "C": [[[[-14.509, 66.456], [-14.74, 65.809], [-13.61, 65.127], [-14.91, 64.364], [-17.794, 63.679], [-18.656, 63.496], [-19.973, 63.644], [-22.763, 63.96], [-21.778, 64.402], [-23.955, 64.891], [-22.184, 65.085], [-22.227, 65.379], [-24.326, 65.611], [-23.651, 66.263], [-22.135, 66.41], [-20.576, 65.732], [-19.057, 66.277], [-17.799, 65.994], [-16.168, 66.527], [-14.509, 66.456]]]] }, { "N": "Azerbaijan", "I": "AZ", "C": [[[[46.405, 41.861], [46.686, 41.827], [47.373, 41.22], [47.816, 41.151], [47.987, 41.406], [48.584, 41.809], [49.11, 41.282], [49.619, 40.573], [50.085, 40.526], [50.393, 40.257], [49.569, 40.176], [49.395, 39.399], [49.223, 39.049], [48.857, 38.815], [48.883, 38.32], [48.634, 38.27], [48.011, 38.794], [48.356, 39.289], [48.06, 39.582], [47.685, 39.508], [46.506, 38.771], [46.483, 39.464], [46.035, 39.628], [45.61, 39.9], [45.892, 40.218], [45.359, 40.562], [45.56, 40.812], [45.179, 40.985], [44.972, 41.248], [45.217, 41.411], [45.963, 41.124], [46.502, 41.064], [46.638, 41.182], [46.145, 41.723], [46.405, 41.861]]], [[[46.144, 38.741], [45.458, 38.874], [44.953, 39.336], [44.794, 39.713], [45.002, 39.74], [45.298, 39.472], [45.74, 39.474], [45.735, 39.32], [46.144, 38.741]]]] }, { "N": "Georgia", "I": "GE", "C": [[[[39.955, 43.435], [40.077, 43.553], [40.922, 43.382], [42.394, 43.22], [43.756, 42.741], [43.931, 42.555], [44.538, 42.712], [45.47, 42.503], [45.776, 42.092], [46.405, 41.861], [46.145, 41.723], [46.638, 41.182], [46.502, 41.064], [45.963, 41.124], [45.217, 41.411], [44.972, 41.248], [43.583, 41.092], [42.62, 41.583], [41.554, 41.536], [41.703, 41.963], [41.453, 42.645], [40.875, 43.014], [40.321, 43.129], [39.955, 43.435]]]] }, { "N": "Philippines", "I": "PH", "C": [[[[120.834, 12.704], [120.323, 13.466], [121.18, 13.43], [121.527, 13.07], [121.262, 12.206], [120.834, 12.704]]], [[[122.586, 9.981], [122.837, 10.261], [122.947, 10.882], [123.499, 10.941], [123.338, 10.267], [124.078, 11.233], [123.982, 10.279], [123.623, 9.95], [123.31, 9.318], [122.996, 9.022], [122.38, 9.713], [122.586, 9.981]]], [[[126.377, 8.415], [126.479, 7.75], [126.537, 7.189], [126.197, 6.274], [125.831, 7.294], [125.364, 6.786], [125.683, 6.05], [125.397, 5.581], [124.22, 6.161], [123.939, 6.885], [124.244, 7.361], [123.61, 7.834], [123.296, 7.419], [122.826, 7.457], [122.085, 6.899], [121.92, 7.192], [122.312, 8.035], [122.942, 8.316], [123.488, 8.693], [123.841, 8.24], [124.601, 8.514], [124.765, 8.96], [125.471, 8.987], [125.412, 9.76], [126.223, 9.286], [126.307, 8.782], [126.377, 8.415]]], [[[118.505, 9.316], [117.174, 8.367], [117.664, 9.067], [118.387, 9.684], [118.987, 10.376], [119.511, 11.37], [119.69, 10.554], [119.029, 10.004], [118.505, 9.316]]], [[[122.337, 18.225], [122.174, 17.81], [122.516, 17.094], [122.252, 16.262], [121.663, 15.931], [121.505, 15.125], [121.729, 14.328], [122.259, 14.218], [122.701, 14.337], [123.95, 13.782], [123.855, 13.238], [124.181, 12.998], [124.077, 12.537], [123.298, 13.028], [122.929, 13.553], [122.671, 13.186], [122.035, 13.784], [121.126, 13.637], [120.629, 13.858], [120.679, 14.271], [120.992, 14.525], [120.693, 14.757], [120.564, 14.396], [120.07, 14.971], [119.921, 15.406], [119.884, 16.364], [120.286, 16.035], [120.39, 17.599], [120.716, 18.505], [121.321, 18.504], [121.938, 18.219], [122.246, 18.479], [122.337, 18.225]]], [[[122.038, 11.416], [121.884, 11.892], [122.484, 11.582], [123.12, 11.584], [123.101, 11.166], [122.638, 10.741], [122.003, 10.441], [121.967, 10.906], [122.038, 11.416]]], [[[125.503, 12.163], [125.783, 11.046], [125.012, 11.311], [125.033, 10.976], [125.277, 10.359], [124.802, 10.135], [124.76, 10.838], [124.459, 10.89], [124.303, 11.495], [124.891, 11.416], [124.878, 11.794], [124.267, 12.558], [125.227, 12.536], [125.503, 12.163]]]] }, { "N": "Malaysia", "I": "MY", "C": [[[[100.086, 6.464], [100.26, 6.643], [101.076, 6.205], [101.154, 5.691], [101.814, 5.811], [102.141, 6.222], [102.371, 6.128], [102.962, 5.524], [103.381, 4.855], [103.439, 4.182], [103.332, 3.727], [103.429, 3.383], [103.502, 2.791], [103.855, 2.515], [104.248, 1.631], [104.229, 1.293], [103.52, 1.226], [102.574, 1.967], [101.391, 2.761], [101.274, 3.27], [100.695, 3.939], [100.557, 4.767], [100.197, 5.312], [100.306, 6.041], [100.086, 6.464]]], [[[117.882, 4.138], [117.015, 4.306], [115.866, 4.307], [115.519, 3.169], [115.134, 2.821], [114.621, 1.431], [113.806, 1.218], [112.86, 1.498], [112.38, 1.41], [111.798, 0.904], [111.159, 0.976], [110.514, 0.773], [109.83, 1.338], [109.663, 2.006], [110.396, 1.664], [111.169, 1.851], [111.37, 2.697], [111.797, 2.886], [112.996, 3.102], [113.713, 3.894], [114.204, 4.526], [114.66, 4.008], [114.87, 4.348], [115.347, 4.317], [115.406, 4.955], [115.451, 5.448], [116.221, 6.143], [116.725, 6.925], [117.13, 6.928], [117.643, 6.422], [117.689, 5.987], [118.348, 5.709], [119.182, 5.408], [119.111, 5.016], [118.44, 4.967], [118.618, 4.478], [117.882, 4.138]]]] }, { "N": "Brunei Darussalam", "I": "BN", "C": [[[[115.451, 5.448], [115.406, 4.955], [115.347, 4.317], [114.87, 4.348], [114.66, 4.008], [114.204, 4.526], [114.6, 4.9], [115.451, 5.448]]]] }, { "N": "Slovenia", "I": "SI", "C": [[[[13.806, 46.509], [14.632, 46.432], [15.137, 46.659], [16.012, 46.684], [16.202, 46.852], [16.371, 46.841], [16.565, 46.504], [15.769, 46.238], [15.672, 45.834], [15.324, 45.732], [15.328, 45.452], [14.935, 45.472], [14.595, 45.635], [14.412, 45.466], [13.715, 45.5], [13.938, 45.591], [13.698, 46.017], [13.806, 46.509]]]] }, { "N": "Finland", "I": "FI", "C": [[[[28.592, 69.065], [28.446, 68.365], [29.977, 67.698], [29.055, 66.944], [30.218, 65.806], [29.544, 64.949], [30.445, 64.204], [30.036, 63.553], [31.516, 62.868], [31.14, 62.358], [30.211, 61.78], [28.07, 60.504], [28.07, 60.504], [28.07, 60.504], [26.255, 60.424], [24.497, 60.057], [22.87, 59.846], [22.291, 60.392], [21.322, 60.72], [21.545, 61.705], [21.059, 62.607], [21.536, 63.19], [22.443, 63.818], [24.731, 64.902], [25.398, 65.111], [25.294, 65.534], [23.903, 66.007], [23.566, 66.396], [23.539, 67.936], [21.979, 68.617], [20.646, 69.106], [21.245, 69.37], [22.356, 68.842], [23.662, 68.891], [24.736, 68.65], [25.689, 69.092], [26.18, 69.825], [27.732, 70.164], [29.016, 69.766], [28.592, 69.065]]]] }, { "N": "Slovakia", "I": "SK", "C": [[[[22.558, 49.086], [22.281, 48.825], [22.086, 48.422], [21.872, 48.32], [20.801, 48.624], [20.474, 48.563], [20.239, 48.328], [19.769, 48.203], [19.661, 48.267], [19.174, 48.111], [18.777, 48.082], [18.697, 47.881], [17.857, 47.758], [17.488, 47.867], [16.98, 48.123], [16.88, 48.47], [16.96, 48.597], [17.102, 48.817], [17.545, 48.8], [17.886, 48.903], [17.914, 48.996], [18.105, 49.044], [18.17, 49.272], [18.4, 49.315], [18.555, 49.495], [18.853, 49.496], [18.91, 49.436], [19.321, 49.572], [19.825, 49.217], [20.416, 49.431], [20.888, 49.329], [21.608, 49.47], [22.558, 49.086]]]] }, { "N": "Czech Republic", "I": "CZ", "C": [[[[15.017, 51.107], [15.491, 50.785], [16.239, 50.698], [16.176, 50.423], [16.719, 50.216], [16.869, 50.474], [17.555, 50.362], [17.649, 50.049], [18.393, 49.989], [18.853, 49.496], [18.555, 49.495], [18.4, 49.315], [18.17, 49.272], [18.105, 49.044], [17.914, 48.996], [17.886, 48.903], [17.545, 48.8], [17.102, 48.817], [16.96, 48.597], [16.499, 48.786], [16.03, 48.734], [15.253, 49.039], [14.901, 48.964], [14.339, 48.555], [13.596, 48.877], [13.031, 49.307], [12.521, 49.547], [12.415, 49.969], [12.24, 50.266], [12.967, 50.484], [13.338, 50.733], [14.056, 50.927], [14.307, 51.117], [14.571, 51.002], [15.017, 51.107]]]] }, { "N": "Eritrea", "I": "ER", "C": [[[[36.43, 14.422], [36.323, 14.822], [36.754, 16.292], [36.853, 16.957], [37.167, 17.263], [37.904, 17.428], [38.41, 17.998], [38.991, 16.841], [39.266, 15.923], [39.814, 15.436], [41.179, 14.491], [41.735, 13.921], [42.277, 13.344], [42.59, 13], [43.081, 12.7], [42.78, 12.455], [42.352, 12.542], [42.01, 12.866], [41.599, 13.452], [41.155, 13.773], [40.897, 14.119], [40.026, 14.52], [39.341, 14.532], [39.099, 14.741], [38.513, 14.505], [37.906, 14.959], [37.594, 14.213], [36.43, 14.422]]]] }, { "N": "Japan", "I": "JP", "C": [[[[141.885, 39.181], [140.959, 38.174], [140.976, 37.142], [140.6, 36.344], [140.774, 35.843], [140.253, 35.138], [138.976, 34.668], [137.218, 34.606], [135.793, 33.465], [135.121, 33.849], [135.079, 34.597], [133.34, 34.376], [132.157, 33.905], [130.986, 33.886], [132, 33.15], [131.333, 31.45], [130.686, 31.03], [130.202, 31.418], [130.448, 32.319], [129.815, 32.61], [129.408, 33.296], [130.354, 33.604], [130.878, 34.233], [131.884, 34.75], [132.618, 35.433], [134.608, 35.732], [135.678, 35.527], [136.724, 37.305], [137.391, 36.827], [138.858, 37.827], [139.426, 38.216], [140.055, 39.439], [139.883, 40.563], [140.306, 41.195], [141.369, 41.379], [141.914, 39.992], [141.885, 39.181]]], [[[144.613, 43.961], [145.321, 44.385], [145.543, 43.262], [144.06, 42.988], [143.184, 41.995], [141.611, 42.679], [141.067, 41.585], [139.955, 41.57], [139.818, 42.564], [140.312, 43.333], [141.381, 43.389], [141.672, 44.772], [141.968, 45.551], [143.143, 44.51], [143.91, 44.174], [144.613, 43.961]]], [[[132.371, 33.464], [132.924, 34.06], [133.493, 33.945], [133.904, 34.365], [134.638, 34.149], [134.766, 33.806], [134.203, 33.201], [133.793, 33.522], [133.28, 33.29], [133.015, 32.705], [132.363, 32.989], [132.371, 33.464]]]] }, { "N": "Paraguay", "I": "PY", "C": [[[[-58.166, -20.177], [-57.871, -20.733], [-57.937, -22.09], [-56.882, -22.282], [-56.473, -22.086], [-55.798, -22.357], [-55.611, -22.656], [-55.518, -23.572], [-55.401, -23.957], [-55.028, -24.001], [-54.653, -23.84], [-54.293, -24.021], [-54.293, -24.571], [-54.429, -25.162], [-54.625, -25.739], [-54.789, -26.622], [-55.696, -27.388], [-56.487, -27.548], [-57.61, -27.396], [-58.618, -27.124], [-57.634, -25.604], [-57.777, -25.162], [-58.807, -24.771], [-60.029, -24.033], [-60.847, -23.881], [-62.685, -22.249], [-62.291, -21.052], [-62.266, -20.514], [-61.786, -19.634], [-60.044, -19.343], [-59.115, -19.357], [-58.183, -19.868], [-58.166, -20.177]]]] }, { "N": "Yemen", "I": "YE", "C": [[[[52, 19], [52.782, 17.35], [53.109, 16.651], [52.385, 16.382], [52.192, 15.938], [52.168, 15.597], [51.173, 15.175], [49.575, 14.709], [48.679, 14.003], [48.239, 13.948], [47.939, 14.007], [47.354, 13.592], [46.717, 13.4], [45.878, 13.348], [45.625, 13.291], [45.406, 13.027], [45.144, 12.954], [44.99, 12.7], [44.495, 12.722], [44.175, 12.586], [43.483, 12.637], [43.223, 13.221], [43.251, 13.768], [43.088, 14.063], [42.892, 14.802], [42.605, 15.213], [42.805, 15.262], [42.702, 15.719], [42.824, 15.912], [42.779, 16.348], [43.218, 16.667], [43.116, 17.088], [43.381, 17.58], [43.792, 17.32], [44.063, 17.41], [45.217, 17.433], [45.4, 17.333], [46.367, 17.233], [46.75, 17.283], [47, 16.95], [47.467, 17.117], [48.183, 18.167], [49.117, 18.617], [52, 19]]]] }, { "N": "Saudi Arabia", "I": "SA", "C": [[[[34.956, 29.357], [36.069, 29.197], [36.501, 29.505], [36.741, 29.865], [37.504, 30.004], [37.668, 30.339], [37.999, 30.508], [37.002, 31.508], [39.005, 32.01], [39.195, 32.161], [40.4, 31.89], [41.89, 31.19], [44.709, 29.179], [46.569, 29.099], [47.46, 29.003], [47.709, 28.526], [48.416, 28.552], [48.808, 27.69], [49.3, 27.461], [49.471, 27.11], [50.152, 26.69], [50.213, 26.277], [50.113, 25.944], [50.24, 25.608], [50.527, 25.328], [50.661, 25], [50.81, 24.755], [51.112, 24.556], [51.39, 24.627], [51.58, 24.245], [51.618, 24.014], [52.001, 23.001], [55.007, 22.497], [55.208, 22.708], [55.667, 22], [55, 20], [52, 19], [49.117, 18.617], [48.183, 18.167], [47.467, 17.117], [47, 16.95], [46.75, 17.283], [46.367, 17.233], [45.4, 17.333], [45.217, 17.433], [44.063, 17.41], [43.792, 17.32], [43.381, 17.58], [43.116, 17.088], [43.218, 16.667], [42.779, 16.348], [42.65, 16.775], [42.348, 17.076], [42.271, 17.475], [41.754, 17.833], [41.221, 18.672], [40.939, 19.486], [40.248, 20.175], [39.802, 20.339], [39.139, 21.292], [39.024, 21.987], [39.066, 22.58], [38.493, 23.688], [38.024, 24.079], [37.484, 24.285], [37.155, 24.858], [37.209, 25.085], [36.932, 25.603], [36.64, 25.826], [36.249, 26.57], [35.64, 27.377], [35.13, 28.063], [34.632, 28.059], [34.788, 28.607], [34.832, 28.957], [34.956, 29.357]]]] }, { "N": "Northern Cyprus", "I": "CYP", "C": [[[[32.732, 35.14], [32.802, 35.146], [32.947, 35.387], [33.667, 35.373], [34.576, 35.672], [33.901, 35.246], [33.974, 35.059], [33.866, 35.094], [33.675, 35.018], [33.526, 35.039], [33.476, 35], [33.456, 35.101], [33.384, 35.163], [33.191, 35.173], [32.92, 35.088], [32.732, 35.14]]]] }, { "N": "Cyprus", "I": "CY", "C": [[[[32.732, 35.14], [32.92, 35.088], [33.191, 35.173], [33.384, 35.163], [33.456, 35.101], [33.476, 35], [33.526, 35.039], [33.675, 35.018], [33.866, 35.094], [33.974, 35.059], [34.005, 34.978], [32.98, 34.572], [32.49, 34.702], [32.257, 35.103], [32.732, 35.14]]]] }, { "N": "Morocco", "I": "MA", "C": [[[[-2.17, 35.168], [-1.793, 34.528], [-1.733, 33.92], [-1.388, 32.864], [-1.125, 32.652], [-1.308, 32.263], [-2.617, 32.094], [-3.069, 31.724], [-3.647, 31.637], [-3.69, 30.897], [-4.86, 30.501], [-5.242, 30], [-6.061, 29.732], [-7.059, 29.579], [-8.674, 28.841], [-8.666, 27.656], [-8.818, 27.656], [-8.795, 27.121], [-9.413, 27.088], [-9.735, 26.861], [-10.189, 26.861], [-10.551, 26.991], [-11.393, 26.883], [-11.718, 26.104], [-12.031, 26.031], [-12.501, 24.77], [-13.891, 23.691], [-14.221, 22.31], [-14.631, 21.861], [-14.751, 21.501], [-17.003, 21.421], [-17.02, 21.422], [-16.973, 21.886], [-16.589, 22.158], [-16.262, 22.679], [-16.326, 23.018], [-15.983, 23.723], [-15.426, 24.359], [-15.089, 24.52], [-14.825, 25.104], [-14.801, 25.636], [-14.44, 26.254], [-13.774, 26.619], [-13.14, 27.64], [-13.122, 27.654], [-12.619, 28.038], [-11.689, 28.149], [-10.901, 28.832], [-10.4, 29.099], [-9.565, 29.934], [-9.815, 31.178], [-9.435, 32.038], [-9.301, 32.565], [-8.657, 33.24], [-7.654, 33.697], [-6.913, 34.11], [-6.244, 35.146], [-5.93, 35.76], [-5.194, 35.755], [-4.591, 35.331], [-3.64, 35.4], [-2.604, 35.179], [-2.17, 35.168]]]] }, { "N": "Egypt", "I": "EG", "C": [[[[36.866, 22], [32.9, 22], [29.02, 22], [25, 22], [25, 25.682], [25, 29.239], [24.7, 30.044], [24.958, 30.662], [24.803, 31.089], [25.165, 31.569], [26.495, 31.586], [27.458, 31.321], [28.45, 31.026], [28.914, 30.87], [29.683, 31.187], [30.095, 31.473], [30.977, 31.556], [31.688, 31.43], [31.96, 30.934], [32.192, 31.26], [32.994, 31.024], [33.773, 30.967], [34.265, 31.219], [34.265, 31.219], [34.823, 29.761], [34.923, 29.501], [34.642, 29.099], [34.427, 28.344], [34.155, 27.823], [33.921, 27.649], [33.588, 27.971], [33.137, 28.418], [32.423, 29.851], [32.32, 29.76], [32.735, 28.705], [33.349, 27.7], [34.105, 26.142], [34.474, 25.599], [34.795, 25.034], [35.692, 23.927], [35.494, 23.752], [35.526, 23.102], [36.691, 22.205], [36.866, 22]]]] }, { "N": "Libya", "I": "LY", "C": [[[[25, 22], [25, 20.003], [23.85, 20], [23.838, 19.58], [19.849, 21.495], [15.861, 23.41], [14.851, 22.863], [14.144, 22.491], [13.581, 23.041], [12, 23.472], [11.561, 24.098], [10.771, 24.563], [10.304, 24.379], [9.948, 24.937], [9.911, 25.365], [9.319, 26.094], [9.716, 26.512], [9.629, 27.141], [9.756, 27.688], [9.684, 28.144], [9.86, 28.96], [9.806, 29.425], [9.482, 30.308], [9.97, 30.539], [10.057, 30.962], [9.95, 31.376], [10.637, 31.761], [10.945, 32.082], [11.432, 32.369], [11.489, 33.137], [12.663, 32.793], [13.083, 32.879], [13.919, 32.712], [15.246, 32.265], [15.714, 31.376], [16.612, 31.182], [18.021, 30.764], [19.086, 30.266], [19.574, 30.526], [20.053, 30.986], [19.82, 31.752], [20.134, 32.238], [20.855, 32.707], [21.543, 32.843], [22.896, 32.639], [23.237, 32.191], [23.609, 32.187], [23.927, 32.017], [24.921, 31.899], [25.165, 31.569], [24.803, 31.089], [24.958, 30.662], [24.7, 30.044], [25, 29.239], [25, 25.682], [25, 22]]]] }, { "N": "Ethiopia", "I": "ET", "C": [[[[47.789, 8.003], [44.964, 5.002], [43.661, 4.958], [42.77, 4.253], [42.129, 4.234], [41.855, 3.919], [41.172, 3.919], [40.768, 4.257], [39.855, 3.839], [39.559, 3.422], [38.893, 3.501], [38.671, 3.616], [38.437, 3.589], [38.121, 3.599], [36.855, 4.448], [36.159, 4.448], [35.817, 4.777], [35.817, 5.338], [35.298, 5.506], [34.707, 6.594], [34.25, 6.826], [34.075, 7.226], [33.568, 7.713], [32.954, 7.785], [33.295, 8.355], [33.826, 8.379], [33.975, 8.685], [33.962, 9.584], [34.257, 10.63], [34.731, 10.91], [34.832, 11.319], [35.26, 12.083], [35.864, 12.578], [36.27, 13.563], [36.43, 14.422], [37.594, 14.213], [37.906, 14.959], [38.513, 14.505], [39.099, 14.741], [39.341, 14.532], [40.026, 14.52], [40.897, 14.119], [41.155, 13.773], [41.599, 13.452], [42.01, 12.866], [42.352, 12.542], [42, 12.1], [41.662, 11.631], [41.74, 11.355], [41.756, 11.051], [42.314, 11.034], [42.555, 11.105], [42.777, 10.927], [42.559, 10.573], [42.928, 10.022], [43.297, 9.54], [43.679, 9.184], [46.948, 7.997], [47.789, 8.003]]]] }, { "N": "Djibouti", "I": "DJ", "C": [[[[42.352, 12.542], [42.78, 12.455], [43.081, 12.7], [43.318, 12.39], [43.286, 11.975], [42.716, 11.736], [43.145, 11.462], [42.777, 10.927], [42.555, 11.105], [42.314, 11.034], [41.756, 11.051], [41.74, 11.355], [41.662, 11.631], [42, 12.1], [42.352, 12.542]]]] }, { "N": "Somaliland", "I": "SOM", "C": [[[[48.948, 11.411], [48.948, 11.411], [48.942, 11.394], [48.938, 10.982], [48.938, 9.974], [48.938, 9.452], [48.487, 8.838], [47.789, 8.003], [46.948, 7.997], [43.679, 9.184], [43.297, 9.54], [42.928, 10.022], [42.559, 10.573], [42.777, 10.927], [43.145, 11.462], [43.471, 11.278], [43.667, 10.864], [44.118, 10.446], [44.614, 10.442], [45.557, 10.698], [46.645, 10.817], [47.526, 11.127], [48.022, 11.193], [48.379, 11.375], [48.948, 11.411], [48.948, 11.411]]]] }, { "N": "Uganda", "I": "UG", "C": [[[[33.904, -0.95], [31.866, -1.027], [30.77, -1.015], [30.419, -1.135], [29.822, -1.443], [29.579, -1.341], [29.588, -0.587], [29.82, -0.205], [29.876, 0.597], [30.086, 1.062], [30.469, 1.584], [30.853, 1.849], [31.174, 2.204], [30.773, 2.34], [30.834, 3.509], [30.834, 3.509], [31.246, 3.782], [31.881, 3.558], [32.686, 3.792], [33.39, 3.79], [34.005, 4.25], [34.479, 3.556], [34.596, 3.054], [35.036, 1.906], [34.672, 1.177], [34.18, 0.515], [33.894, 0.11], [33.904, -0.95]]]] }, { "N": "Rwanda", "I": "RW", "C": [[[[30.419, -1.135], [30.816, -1.699], [30.758, -2.287], [30.47, -2.414], [30.47, -2.414], [29.938, -2.348], [29.632, -2.918], [29.025, -2.839], [29.117, -2.292], [29.255, -2.215], [29.292, -1.62], [29.579, -1.341], [29.822, -1.443], [30.419, -1.135]]]] }, { "N": "Bosnia and Herzegovina", "I": "BA", "C": [[[[18.56, 42.65], [17.675, 43.029], [17.297, 43.446], [16.916, 43.668], [16.456, 44.041], [16.24, 44.351], [15.75, 44.819], [15.959, 45.234], [16.318, 45.004], [16.535, 45.212], [17.002, 45.234], [17.862, 45.068], [18.553, 45.082], [19.005, 44.86], [19.005, 44.86], [19.368, 44.863], [19.118, 44.423], [19.6, 44.038], [19.454, 43.568], [19.219, 43.524], [19.032, 43.433], [18.706, 43.2], [18.56, 42.65]]]] }, { "N": "Macedonia", "I": "MK", "C": [[[[22.381, 42.32], [22.881, 41.999], [22.952, 41.338], [22.762, 41.305], [22.597, 41.13], [22.055, 41.15], [21.674, 40.931], [21.02, 40.843], [20.605, 41.086], [20.463, 41.515], [20.59, 41.855], [20.59, 41.855], [20.717, 41.847], [20.762, 42.052], [21.353, 42.207], [21.577, 42.245], [21.917, 42.304], [22.381, 42.32]]]] }, { "N": "Serbia", "I": "RS", "C": [[[[18.83, 45.909], [18.83, 45.909], [19.596, 46.172], [20.22, 46.127], [20.762, 45.735], [20.874, 45.416], [21.484, 45.181], [21.562, 44.769], [22.145, 44.478], [22.459, 44.703], [22.706, 44.578], [22.474, 44.409], [22.657, 44.235], [22.41, 44.008], [22.5, 43.643], [22.986, 43.211], [22.605, 42.899], [22.437, 42.58], [22.545, 42.461], [22.381, 42.32], [21.917, 42.304], [21.577, 42.245], [21.543, 42.32], [21.663, 42.439], [21.775, 42.683], [21.633, 42.677], [21.439, 42.863], [21.274, 42.91], [21.143, 43.069], [20.957, 43.131], [20.814, 43.272], [20.635, 43.217], [20.497, 42.885], [20.258, 42.813], [20.34, 42.899], [19.959, 43.106], [19.63, 43.214], [19.484, 43.352], [19.219, 43.524], [19.454, 43.568], [19.6, 44.038], [19.118, 44.423], [19.368, 44.863], [19.005, 44.86], [19.005, 44.86], [19.39, 45.237], [19.073, 45.522], [18.83, 45.909]]]] }, { "N": "Montenegro", "I": "ME", "C": [[[[20.071, 42.589], [19.802, 42.5], [19.738, 42.688], [19.304, 42.196], [19.372, 41.878], [19.162, 41.955], [18.882, 42.282], [18.45, 42.48], [18.56, 42.65], [18.706, 43.2], [19.032, 43.433], [19.219, 43.524], [19.484, 43.352], [19.63, 43.214], [19.959, 43.106], [20.34, 42.899], [20.258, 42.813], [20.071, 42.589]]]] }, { "N": "Kosovo", "I": "XK", "C": [[[[20.59, 41.855], [20.523, 42.218], [20.284, 42.32], [20.071, 42.589], [20.258, 42.813], [20.497, 42.885], [20.635, 43.217], [20.814, 43.272], [20.957, 43.131], [21.143, 43.069], [21.274, 42.91], [21.439, 42.863], [21.633, 42.677], [21.775, 42.683], [21.663, 42.439], [21.543, 42.32], [21.577, 42.245], [21.353, 42.207], [20.762, 42.052], [20.717, 41.847], [20.59, 41.855]]]] }, { "N": "Trinidad and Tobago", "I": "TT", "C": [[[[-61.68, 10.76], [-61.105, 10.89], [-60.895, 10.855], [-60.935, 10.11], [-61.77, 10], [-61.95, 10.09], [-61.66, 10.365], [-61.68, 10.76]]]] }, { "N": "South Sudan", "I": "SS", "C": [[[[30.834, 3.509], [29.954, 4.174], [29.716, 4.601], [29.159, 4.389], [28.697, 4.455], [28.429, 4.287], [27.98, 4.408], [27.374, 5.234], [27.213, 5.551], [26.466, 5.947], [26.213, 6.547], [25.797, 6.979], [25.124, 7.5], [25.115, 7.825], [24.567, 8.229], [23.887, 8.62], [24.194, 8.729], [24.537, 8.918], [24.795, 9.81], [25.07, 10.274], [25.791, 10.411], [25.962, 10.136], [26.477, 9.553], [26.752, 9.467], [27.113, 9.639], [27.834, 9.604], [27.971, 9.398], [28.967, 9.398], [29.001, 9.604], [29.516, 9.793], [29.619, 10.085], [29.997, 10.291], [30.838, 9.707], [31.353, 9.81], [31.851, 10.531], [32.4, 11.081], [32.314, 11.681], [32.074, 11.973], [32.675, 12.025], [32.743, 12.248], [33.207, 12.179], [33.087, 11.441], [33.207, 10.72], [33.722, 10.325], [33.842, 9.982], [33.825, 9.484], [33.963, 9.464], [33.975, 8.685], [33.826, 8.379], [33.295, 8.355], [32.954, 7.785], [33.568, 7.713], [34.075, 7.226], [34.25, 6.826], [34.707, 6.594], [35.298, 5.506], [34.62, 4.847], [34.005, 4.25], [33.39, 3.79], [32.686, 3.792], [31.881, 3.558], [31.246, 3.782], [30.834, 3.509]]]] } ]} bazaar-org-bazaar-b6e9a65/scripts/countries.py000077500000000000000000000104221522167256300215070ustar00rootroot00000000000000#!/usr/bin/env python3 import struct import json import sys from pathlib import Path try: from babel import Locale except ImportError: print("Error: babel library not found.") print("Install it with: pip install babel") sys.exit(1) try: import gi gi.require_version('GLib', '2.0') from gi.repository import GLib except ImportError: print("Error: PyGObject not found.") sys.exit(1) verbose = False def log(msg): if verbose: print(msg) def read_linguas(linguas_path): languages = [] with open(linguas_path, "r", encoding="utf-8") as f: for line in f: line = line.strip() if line and not line.startswith("#"): languages.append(line) return languages def normalize_locale_code(lang_code): locale_map = {"zh_CN": "zh_Hans_CN", "zh_TW": "zh_Hant_TW", "fa_IR": "fa_IR"} return locale_map.get(lang_code, lang_code) def get_country_translation(country_code, lang_code): try: normalized = normalize_locale_code(lang_code) if "_" in normalized: parts = normalized.split("_") if len(parts) == 3: locale = Locale(parts[0], script=parts[1], territory=parts[2]) else: lang, territory = parts[0], parts[1] locale = Locale(lang, territory=territory) else: locale = Locale(normalized) territory_name = locale.territories.get(country_code.upper()) return territory_name if territory_name else None except Exception as e: log(f"Warning: Could not get translation for {country_code} in {lang_code}: {e}") return None def build_variant(json_path, linguas_path): languages = read_linguas(linguas_path) log(f"Found {len(languages)} languages: {', '.join(languages)}") with open(json_path, "r", encoding="utf-8") as f: data = json.load(f) builder = GLib.VariantBuilder(GLib.VariantType.new("a(ssa{ss}aaa(dd))")) for feature in data.get("features", []): country_name = feature.get("N", "") country_code = feature.get("I", "") if not country_code: continue log(f"Processing: {country_name} ({country_code})") translations = {} for lang in languages: translation = get_country_translation(country_code, lang) translations[lang] = translation if translation else country_name coords_raw = feature.get("C", []) poly_builder = GLib.VariantBuilder(GLib.VariantType.new("aaa(dd)")) for polygon in coords_raw: ring_builder = GLib.VariantBuilder(GLib.VariantType.new("aa(dd)")) for ring in polygon: point_builder = GLib.VariantBuilder(GLib.VariantType.new("a(dd)")) for point in ring: point_builder.add_value(GLib.Variant("(dd)", (float(point[0]), float(point[1])))) ring_builder.add_value(point_builder.end()) poly_builder.add_value(ring_builder.end()) trans_variant = GLib.Variant("a{ss}", translations) coords_variant = poly_builder.end() entry = GLib.Variant.new_tuple( GLib.Variant("s", country_name), GLib.Variant("s", country_code), trans_variant, coords_variant, ) builder.add_value(entry) return builder.end() def main(): global verbose linguas_path = "../po/LINGUAS" json_path = "countries.json.in" output_path = "../src/countries.gvariant" if "--verbose" in sys.argv: verbose = True sys.argv.remove("--verbose") if len(sys.argv) > 1: json_path = sys.argv[1] if len(sys.argv) > 2: linguas_path = sys.argv[2] if len(sys.argv) > 3: output_path = sys.argv[3] if not Path(linguas_path).exists(): print(f"Error: LINGUAS file not found at {linguas_path}") sys.exit(1) if not Path(json_path).exists(): print(f"Error: JSON file not found at {json_path}") sys.exit(1) variant = build_variant(json_path, linguas_path) data = variant.get_data_as_bytes() with open(output_path, "wb") as f: f.write(data.get_data()) print(f"GVariant saved to: {output_path} ({GLib.format_size(data.get_size())})") if __name__ == "__main__": main() bazaar-org-bazaar-b6e9a65/scripts/install-deps/000077500000000000000000000000001522167256300215175ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/scripts/install-deps/fedora-rawhide.sh000077500000000000000000000007631522167256300247450ustar00rootroot00000000000000#!/usr/bin/env bash DEPS=( meson ninja cmake blueprint-compiler desktop-file-utils python3-babel gtk4-devel libadwaita-devel libdex-devel flatpak-devel libxmlb-devel appstream-devel glycin-devel glycin-gtk4-devel libyaml-devel libsoup3-devel json-glib-devel md4c-devel gtksourceview5-devel webkitgtk6.0-devel libsecret-devel libproxy-devel malcontent-devel # lsp clangd ) dnf install ${DEPS[@]} bazaar-org-bazaar-b6e9a65/src/000077500000000000000000000000001522167256300162205ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/article-list-schema.xml000066400000000000000000000001331522167256300225710ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/bazaar.gresource.xml000066400000000000000000000447761522167256300222210ustar00rootroot00000000000000 style.css internal-config.yaml progress-bar-designs/pride/pride-flags.yaml internal-config-schema.xml main-config-schema.xml blocklist-schema.xml curated-config-schema.xml pride-flag-config-schema.xml article-list-schema.xml release-notes.xml countries.gvariant bz-addon-tile.ui bz-addons-dialog.ui bz-age-rating-dialog.ui bz-all-apps-page.ui bz-app-size-dialog.ui bz-app-tile.ui bz-apps-page.ui bz-appstream-description-render.ui bz-article.ui bz-article-tile.ui bz-banner-view.ui bz-bundle-install-dialog.ui bz-category-tile.ui bz-context-tile.ui bz-curated-view.ui bz-decorated-screenshot.ui bz-developer-badge.ui bz-donations-dialog.ui bz-entry-inspector.ui bz-entry-selection-row.ui bz-error-dialog.ui bz-favorite-button.ui bz-favorites-page.ui bz-favorites-tile.ui bz-featured-carousel.ui bz-featured-tile.ui bz-flathub-category-section.ui bz-flathub-page.ui bz-full-view.ui bz-hardware-support-dialog.ui bz-inspector.ui bz-install-controls.ui bz-installed-tile.ui bz-library-page.ui bz-license-dialog.ui bz-login-page.ui bz-preferences-dialog.ui bz-progress-bar.ui bz-releases-dialog.ui bz-releases-list.ui bz-rich-app-tile.ui bz-safety-dialog.ui bz-screenshot-page.ui bz-screenshots-carousel.ui bz-search-filter-popover.ui bz-search-page.ui bz-section-view.ui bz-stats-dialog.ui bz-transaction-list-dialog.ui bz-transaction-tile.ui bz-updates-card.ui bz-user-data-page.ui bz-user-data-tile.ui bz-window.ui shortcuts-dialog.ui icons/scalable/actions/app-installed-symbolic.svg icons/scalable/actions/bookmark-filled-symbolic.svg icons/scalable/actions/bookmark-outline-symbolic.svg icons/scalable/actions/bug-symbolic.svg icons/scalable/actions/check-plain-symbolic.svg icons/scalable/actions/circle-filled-symbolic.svg icons/scalable/actions/code-symbolic.svg icons/scalable/actions/community-symbolic.svg icons/scalable/actions/connected-squares-x-symbolic.svg icons/scalable/actions/copy-symbolic.svg icons/scalable/actions/cross-large-circle-filled-symbolic.svg icons/scalable/actions/delay-symbolic.svg icons/scalable/actions/device-support-adaptive-symbolic.svg icons/scalable/actions/device-support-desktop-symbolic.svg icons/scalable/actions/device-support-touch-symbolic.svg icons/scalable/actions/device-supported-symbolic.svg icons/scalable/actions/explore-symbolic.svg icons/scalable/actions/download-plus-symbolic.svg icons/scalable/actions/drive-harddisk-symbolic.svg icons/scalable/actions/earth-symbolic.svg icons/scalable/actions/edit-clear-all-symbolic.svg icons/scalable/actions/execute-to-symbolic.svg icons/scalable/actions/external-link-symbolic.svg icons/scalable/actions/eye-outline-filled-symbolic.svg icons/scalable/actions/flatpak-symbolic.svg icons/scalable/actions/flathub-symbolic.svg icons/scalable/actions/folder-download-symbolic.svg icons/scalable/actions/gamepad-symbolic.svg icons/scalable/actions/globe-symbolic.svg icons/scalable/actions/go-previous-symbolic.svg icons/scalable/actions/graph2-symbolic.svg icons/scalable/actions/hand-openyay-symbolic.svg icons/scalable/actions/heart-filled-symbolic.svg icons/scalable/actions/heart-outline-thick-symbolic.svg icons/scalable/actions/horizontal-arrows-disabled-symbolic.svg icons/scalable/actions/left-large-symbolic.svg icons/scalable/actions/library-symbolic.svg icons/scalable/actions/license-symbolic.svg icons/scalable/actions/meeting-symbolic.svg icons/scalable/actions/media-playback-pause-symbolic.svg icons/scalable/actions/media-playback-start-symbolic.svg icons/scalable/actions/media-playback-stop-symbolic.svg icons/scalable/actions/newspaper-symbolic.svg icons/scalable/actions/open-book-symbolic.svg icons/scalable/actions/parent-symbolic.svg icons/scalable/actions/paintbrush-symbolic.svg icons/scalable/actions/people-symbolic.svg icons/scalable/actions/person-symbolic.svg icons/scalable/actions/pip-out-symbolic.svg icons/scalable/actions/power-profile-performance-symbolic.svg icons/scalable/actions/proprietary-code-symbolic.svg icons/scalable/actions/puzzle-piece-symbolic.svg icons/scalable/actions/regex-symbolic.svg icons/scalable/actions/right-large-symbolic.svg icons/scalable/actions/sad-computer-symbolic.svg icons/scalable/actions/school-symbolic.svg icons/scalable/actions/server-pick-symbolic.svg icons/scalable/actions/share-alt-symbolic.svg icons/scalable/actions/share-symbolic.svg icons/scalable/actions/shoe-box-symbolic.svg icons/scalable/actions/sidebar-show-symbolic.svg icons/scalable/actions/sliders-horizontal-symbolic.svg icons/scalable/actions/smartphone2-symbolic.svg icons/scalable/actions/software-update-available-symbolic.svg icons/scalable/actions/star-outline-rounded-symbolic.svg icons/scalable/actions/square-filled-symbolic.svg icons/scalable/actions/thumbs-up-outline-symbolic.svg icons/scalable/actions/timer-sand-symbolic.svg icons/scalable/actions/translations-symbolic.svg icons/scalable/actions/user-trash-symbolic.svg icons/scalable/actions/verified-checkmark-symbolic.svg icons/scalable/actions/view-more-horizontal-symbolic.svg icons/scalable/actions/view-more-symbolic.svg icons/scalable/actions/video-reel2-symbolic.svg icons/scalable/actions/zoom-minus-symbolic.svg icons/scalable/actions/zoom-plus-symbolic.svg icons/scalable/actions/permissions-legacy-windowing-system-symbolic.svg icons/scalable/actions/permissions-microphone-symbolic.svg icons/scalable/actions/permissions-sandboxed-symbolic.svg icons/scalable/actions/permissions-screen-contents-symbolic.svg icons/scalable/actions/permissions-system-devices-symbolic.svg icons/scalable/actions/permissions-warning-symbolic.svg icons/scalable/actions/app-safety-ok-symbolic.svg icons/scalable/actions/app-safety-unknown-symbolic.svg icons/scalable/actions/app-safety-unsafe-symbolic.svg icons/scalable/actions/auditable-code-symbolic.svg icons/scalable/actions/ratings/advertising-symbolic.svg icons/scalable/actions/ratings/advertising-none-symbolic.svg icons/scalable/actions/ratings/alcohol-use-symbolic.svg icons/scalable/actions/ratings/alcohol-use-none-symbolic.svg icons/scalable/actions/ratings/audio-chat-symbolic.svg icons/scalable/actions/ratings/audio-chat-none-symbolic.svg icons/scalable/actions/ratings/contacts-symbolic.svg icons/scalable/actions/ratings/drug-use-symbolic.svg icons/scalable/actions/ratings/drug-use-none-symbolic.svg icons/scalable/actions/ratings/gambling-symbolic.svg icons/scalable/actions/ratings/gambling-none-symbolic.svg icons/scalable/actions/ratings/human-remains-symbolic.svg icons/scalable/actions/ratings/messaging-symbolic.svg icons/scalable/actions/ratings/messaging-none-symbolic.svg icons/scalable/actions/ratings/money-symbolic.svg icons/scalable/actions/ratings/money-none-symbolic.svg icons/scalable/actions/ratings/nudity-symbolic.svg icons/scalable/actions/ratings/nudity-none-symbolic.svg icons/scalable/actions/ratings/smoking-symbolic.svg icons/scalable/actions/ratings/smoking-none-symbolic.svg icons/scalable/actions/ratings/social-info-symbolic.svg icons/scalable/actions/ratings/strong-language-symbolic.svg icons/scalable/actions/ratings/strong-language-none-symbolic.svg icons/scalable/actions/ratings/violence-symbolic.svg icons/scalable/actions/ratings/violence-none-symbolic.svg icons/scalable/actions/on-the-go-symbolic.svg icons/scalable/actions/we-love-games-symbolic.svg icons/io.github.kolumni.Bazaar.Create.svg icons/io.github.kolumni.Bazaar.Develop.svg icons/io.github.kolumni.Bazaar.Learn.svg icons/io.github.kolumni.Bazaar.Play.svg icons/io.github.kolumni.Bazaar.Network.svg icons/io.github.kolumni.Bazaar.Work.svg icons/io.github.kolumni.Bazaar.Audiovideo.svg icons/io.github.kolumni.Bazaar.Science.svg icons/io.github.kolumni.Bazaar.System.svg icons/io.github.kolumni.Bazaar.Utilities.svg icons/io.github.kolumni.Bazaar.Mobile.svg icons/io.github.kolumni.Bazaar.Trending.svg icons/io.github.kolumni.Bazaar.Popular.svg icons/io.github.kolumni.Bazaar.New.svg icons/io.github.kolumni.Bazaar.Updated.svg icons/io.github.kolumni.Bazaar.Adwaita.svg icons/io.github.kolumni.Bazaar.Kde.svg icons/io.github.kolunmi.Bazaar.github.svg icons/io.github.kolunmi.Bazaar.gitlab.svg icons/io.github.kolunmi.Bazaar.gnome.svg icons/io.github.kolunmi.Bazaar.kde.svg icons/io.github.kolunmi.Bazaar.google.svg bz-install-controls.wdgt bz-transact-icon.wdgt bazaar-org-bazaar-b6e9a65/src/blocklist-schema.xml000066400000000000000000000007141522167256300221700ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/bz-addon-tile.blp000066400000000000000000000062161522167256300213550ustar00rootroot00000000000000using Gtk 4.0; template $BzAddonTile: $BzListTile { accessibility { labelled-by: title_label; described-by: description_label; } child: Box { orientation: horizontal; spacing: 4; height-request: 64; $BzTransactIcon { margin-start: 10; margin-top: 10; margin-bottom: 10; width-request: 48; height-request: 48; valign: center; halign: center; info: $BzTransactIconInfo { group: bind template.group as <$BzEntryGroup>; paintable: bind template.parent-ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; }; } Box { orientation: vertical; valign: center; spacing: 4; margin-start: 10; Label title_label { xalign: 0.0; ellipsize: end; single-line-mode: true; has-tooltip: true; tooltip-text: bind template.group as <$BzEntryGroup>.id; label: bind template.group as <$BzEntryGroup>.title; } Label description_label { halign: start; label: bind template.group as <$BzEntryGroup>.description; visible: bind $logical_and($invert_boolean(eol_label.visible) as , $invert_boolean($is_empty(template.group as <$BzEntryGroup>.description) as ) as ) as ; xalign: 0.0; ellipsize: end; single-line-mode: true; styles ["dim-label", "caption"] } Label eol_label{ visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.eol) as ) as ; wrap: true; wrap-mode: word_char; ellipsize: end; vexpand: true; lines: 2; single-line-mode: true; halign: start; hexpand: true; label: _("Stopped Receiving Updates"); styles [ "warning", ] } } Box { orientation: horizontal; spacing: 8; margin-end: 8; margin-start: 4; hexpand: true; halign: end; Button install_remove_button { styles ["flat"] width-request: 32; height-request: 32; valign: center; has-tooltip: true; visible: bind $invert_boolean($logical_and($is_zero(template.group as <$BzEntryGroup>.removable) as , $is_zero(template.group as <$BzEntryGroup>.installable) as ) as ) as ; tooltip-text: bind $get_install_remove_tooltip(template.group as <$BzEntryGroup>.removable) as ; sensitive: bind $switch_bool( template.group as <$BzEntryGroup>.removable, $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable-and-available) as ) as , $invert_boolean($is_zero(template.group as <$BzEntryGroup>.installable-and-available) as ) as , ) as ; icon-name: bind $get_install_remove_icon(template.group as <$BzEntryGroup>.removable) as ; clicked => $install_remove_cb() swapped; } Image { pixel-size: 14; icon-name: "go-next-symbolic"; margin-end: 4; styles ["dimmed"] } } }; }bazaar-org-bazaar-b6e9a65/src/bz-addon-tile.c000066400000000000000000000175221522167256300210240ustar00rootroot00000000000000/* bz-addon-tile.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include #include "bz-addon-tile.h" #include "bz-addons-dialog.h" #include "bz-entry-group.h" #include "bz-full-view.h" #include "bz-state-info.h" #include "bz-window.h" struct _BzAddonTile { BzListTile parent_instance; BzEntryGroup *group; BzResult *parent_ui_entry; GtkButton *install_remove_button; }; G_DEFINE_FINAL_TYPE (BzAddonTile, bz_addon_tile, BZ_TYPE_LIST_TILE) enum { PROP_0, PROP_GROUP, PROP_PARENT_UI_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void install_remove_cb (BzAddonTile *self, GtkButton *button) { int removable = 0; if (self->group == NULL) return; removable = bz_entry_group_get_removable (self->group); if (removable > 0) gtk_widget_activate_action (GTK_WIDGET (self), "window.remove-group", "(sb)", bz_entry_group_get_id (self->group), FALSE); else gtk_widget_activate_action (GTK_WIDGET (self), "window.install-group", "(sb)", bz_entry_group_get_id (self->group), TRUE); } static void bz_addon_tile_dispose (GObject *object) { BzAddonTile *self = BZ_ADDON_TILE (object); g_clear_object (&self->group); g_clear_object (&self->parent_ui_entry); G_OBJECT_CLASS (bz_addon_tile_parent_class)->dispose (object); } static void bz_addon_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAddonTile *self = BZ_ADDON_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_addon_tile_get_group (self)); break; case PROP_PARENT_UI_ENTRY: g_value_set_object (value, self->parent_ui_entry); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_addon_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAddonTile *self = BZ_ADDON_TILE (object); switch (prop_id) { case PROP_GROUP: bz_addon_tile_set_group (self, g_value_get_object (value)); break; case PROP_PARENT_UI_ENTRY: g_clear_object (&self->parent_ui_entry); self->parent_ui_entry = g_value_dup_object (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_UI_ENTRY]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_empty (gpointer object, const char *str) { return str == NULL || str[0] == '\0'; } static gboolean logical_and (gpointer object, gboolean value1, gboolean value2) { return value1 && value2; } static char * get_install_remove_tooltip (gpointer object, int removable) { if (removable > 0) return g_strdup (C_("Install Controls", "Uninstall")); else return g_strdup (C_("Install Controls", "Install")); } static char * get_install_remove_icon (gpointer object, int removable) { if (removable > 0) return g_strdup ("user-trash-symbolic"); else return g_strdup ("document-save-symbolic"); } static gboolean switch_bool (gpointer object, gboolean condition, gboolean true_value, gboolean false_value) { return condition ? true_value : false_value; } static void bz_addon_tile_realize (GtkWidget *widget) { BzAddonTile *self = BZ_ADDON_TILE (widget); GtkWidget *parent = widget; GtkWidget *source = NULL; const char *prop = NULL; GTK_WIDGET_CLASS (bz_addon_tile_parent_class)->realize (widget); while ((parent = gtk_widget_get_parent (parent)) != NULL) { if (BZ_IS_ADDONS_DIALOG (parent)) { source = parent; prop = "parent-ui-entry"; break; } else if (BZ_IS_FULL_VIEW (parent)) { source = parent; prop = "ui-entry"; break; } } if (source == NULL) return; g_object_bind_property ( source, prop, self, "parent-ui-entry", G_BINDING_SYNC_CREATE); } static void bz_addon_tile_class_init (BzAddonTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_addon_tile_dispose; object_class->get_property = bz_addon_tile_get_property; object_class->set_property = bz_addon_tile_set_property; widget_class->realize = bz_addon_tile_realize; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PARENT_UI_ENTRY] = g_param_spec_object ( "parent-ui-entry", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ENTRY_GROUP); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-addon-tile.ui"); gtk_widget_class_bind_template_child (widget_class, BzAddonTile, install_remove_button); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, logical_and); gtk_widget_class_bind_template_callback (widget_class, is_empty); gtk_widget_class_bind_template_callback (widget_class, get_install_remove_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_install_remove_icon); gtk_widget_class_bind_template_callback (widget_class, switch_bool); gtk_widget_class_bind_template_callback (widget_class, install_remove_cb); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_addon_tile_init (BzAddonTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_addon_tile_new (void) { return g_object_new (BZ_TYPE_ADDON_TILE, NULL); } void bz_addon_tile_set_group (BzAddonTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_ADDON_TILE (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } BzEntryGroup * bz_addon_tile_get_group (BzAddonTile *self) { g_return_val_if_fail (BZ_IS_ADDON_TILE (self), NULL); return self->group; } bazaar-org-bazaar-b6e9a65/src/bz-addon-tile.h000066400000000000000000000022711522167256300210240ustar00rootroot00000000000000/* bz-addon-tile.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-list-tile.h" #include G_BEGIN_DECLS #define BZ_TYPE_ADDON_TILE (bz_addon_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzAddonTile, bz_addon_tile, BZ, ADDON_TILE, BzListTile) GtkWidget * bz_addon_tile_new (void); void bz_addon_tile_set_group (BzAddonTile *self, BzEntryGroup *group); BzEntryGroup * bz_addon_tile_get_group (BzAddonTile *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-addons-dialog.blp000066400000000000000000000303451522167256300220420ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAddonsDialog: Adw.Dialog { content-width: 500; content-height: 550; child: Adw.ToastOverlay { child:Adw.NavigationView navigation_view { notify::visible-page-tag => $on_visible_page_tag_changed(); Adw.NavigationPage { tag: "list"; title: _("Manage Add-Ons"); child: Adw.ToolbarView { [top] Adw.HeaderBar { title-widget: Label { styles ["heading"] label: _("Manage Add-Ons"); }; } content: ScrolledWindow { propagate-natural-height: true; vexpand: true; hscrollbar-policy: never; child: Adw.Clamp list_clamp { maximum-size: 450; tightening-threshold: 500; margin-start: 6; margin-end: 6; margin-bottom: 12; child: ListView { styles [ "navigation-sidebar", "installed-list-view", ] model: NoSelection { model: SortListModel { sorter: CustomSorter sorter {}; model: bind template.addon-groups; }; }; factory: BuilderListItemFactory { template ListItem { activatable: false; selectable: false; focusable: false; child: $BzAddonTile { group: bind template.item as <$BzEntryGroup>; activated => $tile_activated_cb(); }; } }; }; }; }; }; } Adw.NavigationPage { tag: "empty"; title: _("Manage Add-Ons"); child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: Adw.StatusPage { icon-name: "application-x-addon-symbolic"; title: _("No Add-Ons Visible"); description: _("Your current filter preferences are hiding all known add-ons. Try adjusting them."); }; }; } Adw.NavigationPage { tag: "full-view"; title: bind try { template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.title, _("Add-on Page") }; child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: ScrolledWindow { vexpand: true; hscrollbar-policy: never; child: Adw.Clamp { maximum-size: 450; tightening-threshold: 500; margin-start: 12; margin-end: 12; child: Box full_view_clamp { orientation: vertical; spacing: 4; margin-top: 12; Box { halign: center; spacing: 8; orientation: vertical; margin-bottom: 12; Image { pixel-size: 96; paintable: bind template.parent-ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; visible: bind $invert_boolean($is_null(template.parent-ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable) as ) as ; styles ["icon-dropshadow"] } Box { orientation: vertical; valign: center; halign: center; spacing: 2; margin-bottom: 8; Label { label: bind template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.title; justify: center; max-width-chars: 25; wrap: true; wrap-mode: word_char; selectable: true; styles ["title-3"] } Label { label: bind $format_parent_title(template.parent-ui-entry as <$BzResult>.object as <$BzEntry>.title) as ; justify: center; selectable: true; styles ["dim-label"] } } } Box { homogeneous: true; margin-bottom: 12; orientation: horizontal; halign: fill; styles ["app-context-bar"] $BzContextTile { label: bind $get_size_label($is_zero(template.selected-group as <$BzEntryGroup>.removable) as ) as ; clicked => $size_cb(template); has-tooltip: true; tooltip-text: bind $format_size_tooltip(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.size) as ; lozenge-style: "grey"; sensitive: bind $invert_boolean($is_zero($get_size_type(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>, $is_zero(template.selected-group as <$BzEntryGroup>.removable) as ) as ) as ) as ; lozenge-child: Label { justify: center; label: bind $format_size($get_size_type(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>, $is_zero(template.selected-group as <$BzEntryGroup>.removable) as ) as ) as ; lines: 3; ellipsize: end; halign: center; wrap: true; xalign: 0.5; use-markup: true; }; } $BzContextTile { label: bind $get_license_label(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>) as ; clicked => $license_cb(template); lozenge-style: bind $bool_to_string(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, "grey", "warning") as ; has-tooltip: true; tooltip-text: bind $format_license_tooltip(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>) as ; lozenge-child: Box { spacing: 6; Image { icon-name: bind $get_license_icon(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, 0) as ; } Image { icon-name: bind $get_license_icon(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, 1) as ; } }; } $BzContextTile { can-target: bind $invert_boolean($is_null(template.selected-ui-entry) as ) as ; sensitive: bind $invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ) as ; label: _("Downloads/Month"); clicked => $dl_stats_cb(template); has-tooltip: bind $invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ) as ; tooltip-text: bind $format_recent_downloads_tooltip(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ; lozenge-style: "grey"; lozenge-child: Label { justify: center; label: bind $format_recent_downloads(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ; halign: center; use-markup: true; }; } } Box { visible: bind $invert_boolean($is_null(template.selected-group as <$BzEntryGroup>.eol) as ) as ; orientation: vertical; spacing: 8; styles [ "card", "colored", "warning", ] Label { label: _("Stopped Receiving Core Updates"); margin-top: 8; margin-start: 8; margin-end: 8; wrap: true; wrap-mode: word_char; justify: center; styles [ "title-4", ] } Label { label: _("This add-on uses a runtime that no longer receives updates or security fixes. It may become unsafe to use."); margin-bottom: 8; margin-start: 8; margin-end: 8; wrap: true; wrap-mode: word_char; justify: center; } } Label { visible: bind $logical_and($invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.description) as ) as , $is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.long-description) as ) as ; label: bind template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.description; selectable: true; wrap: true; wrap-mode: word_char; justify: center; halign: center; margin-bottom: 6; styles ["dimmed"] } $BzInstallControls { halign: center; margin-top: 6; margin-bottom: 8; wide: false; entry-group: bind template.selected-group; state: bind template.state; settings: bind template.state as <$BzStateInfo>.settings; } Label { visible: bind $logical_and($invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.description) as ) as , $invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.long-description) as ) as ) as ; label: bind template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.description; selectable: true; wrap: true; wrap-mode: word_char; xalign: 0; halign: fill; margin-top: 12; margin-bottom: 4; styles ["title-4"] } $BzFadingClamp fading_clamp { visible: bind $invert_boolean($is_null(template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.long-description) as ) as ; max-height: bind $get_description_max_height(description_toggle.active) as ; min-max-height: 170; child: $BzAppstreamDescriptionRender { appstream-description: bind template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.long-description; }; } ToggleButton description_toggle { styles ["circular"] visible: bind fading_clamp.will-change; halign: center; child: Label { label: bind $get_description_toggle_text(description_toggle.active) as ; margin-start: 16; margin-end: 16; }; margin-bottom: 12; } $BzShareList { urls: bind template.selected-ui-entry as <$BzResult>.object as <$BzEntry>.share-urls; margin-bottom: 24; } }; }; }; }; } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-addons-dialog.c000066400000000000000000000531241522167256300215070ustar00rootroot00000000000000/* bz-addons-dialog.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-addon-tile.h" #include "bz-addons-dialog.h" #include "bz-app-size-dialog.h" #include "bz-application-map-factory.h" #include "bz-application.h" #include "bz-appstream-description-render.h" #include "bz-context-tile-callbacks.h" #include "bz-context-tile.h" #include "bz-entry-group.h" #include "bz-fading-clamp.h" #include "bz-flatpak-entry.h" #include "bz-install-controls.h" #include "bz-license-dialog.h" #include "bz-result.h" #include "bz-share-list.h" #include "bz-state-info.h" #include "bz-stats-dialog.h" #include "bz-template-callbacks.h" #include "bz-util.h" struct _BzAddonsDialog { AdwDialog parent_instance; GListModel *addon_groups; BzEntryGroup *selected_group; BzResult *selected_ui_entry; DexFuture *selected_ui_future; BzResult *parent_ui_entry; DexFuture *parent_ui_future; BzStateInfo *state; AdwAnimation *width_animation; AdwAnimation *height_animation; /* Template widgets */ AdwNavigationView *navigation_view; GtkToggleButton *description_toggle; AdwClamp *full_view_clamp; AdwClamp *list_clamp; GtkCustomSorter *sorter; }; G_DEFINE_FINAL_TYPE (BzAddonsDialog, bz_addons_dialog, ADW_TYPE_DIALOG) enum { PROP_0, PROP_ADDON_GROUPS, PROP_SELECTED_GROUP, PROP_SELECTED_UI_ENTRY, PROP_PARENT_UI_ENTRY, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static char *format_parent_title (gpointer object, const char *title); static int get_description_max_height (gpointer object, gboolean active); static char *get_description_toggle_text (gpointer object, gboolean active); static void size_cb (BzAddonsDialog *self, GtkButton *button); static void license_cb (BzAddonsDialog *self, GtkButton *button); static void dl_stats_cb (BzAddonsDialog *self, GtkButton *button); static void animate_to_size (BzAddonsDialog *self); static void on_visible_page_tag_changed (AdwNavigationView *nav_view, GParamSpec *pspec, BzAddonsDialog *self); static DexFuture *on_parent_ui_entry_resolved (DexFuture *future, GWeakRef *wr); static DexFuture *on_selected_ui_entry_resolved (DexFuture *future, GWeakRef *wr); static void set_selected_group (BzAddonsDialog *self, BzEntryGroup *group); static void tile_activated_cb (BzAddonTile *tile); static int sort_func (BzEntryGroup *a, BzEntryGroup *b, BzAddonsDialog *self); static void bz_addons_dialog_dispose (GObject *object) { BzAddonsDialog *self = BZ_ADDONS_DIALOG (object); dex_clear (&self->selected_ui_future); dex_clear (&self->parent_ui_future); g_clear_object (&self->addon_groups); g_clear_object (&self->selected_group); g_clear_object (&self->selected_ui_entry); g_clear_object (&self->parent_ui_entry); g_clear_object (&self->state); g_clear_object (&self->width_animation); g_clear_object (&self->height_animation); G_OBJECT_CLASS (bz_addons_dialog_parent_class)->dispose (object); } static void bz_addons_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAddonsDialog *self = BZ_ADDONS_DIALOG (object); switch (prop_id) { case PROP_ADDON_GROUPS: g_value_set_object (value, self->addon_groups); break; case PROP_SELECTED_GROUP: g_value_set_object (value, self->selected_group); break; case PROP_SELECTED_UI_ENTRY: g_value_set_object (value, self->selected_ui_entry); break; case PROP_PARENT_UI_ENTRY: g_value_set_object (value, self->parent_ui_entry); break; case PROP_STATE: g_value_set_object (value, bz_state_info_get_default ()); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_addons_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAddonsDialog *self = BZ_ADDONS_DIALOG (object); switch (prop_id) { case PROP_ADDON_GROUPS: g_clear_object (&self->addon_groups); self->addon_groups = g_value_dup_object (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ADDON_GROUPS]); break; case PROP_SELECTED_GROUP: g_clear_object (&self->selected_group); self->selected_group = g_value_dup_object (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SELECTED_GROUP]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_addons_dialog_class_init (BzAddonsDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_addons_dialog_dispose; object_class->get_property = bz_addons_dialog_get_property; object_class->set_property = bz_addons_dialog_set_property; props[PROP_ADDON_GROUPS] = g_param_spec_object ( "addon-groups", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_SELECTED_GROUP] = g_param_spec_object ( "selected-group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_SELECTED_UI_ENTRY] = g_param_spec_object ( "selected-ui-entry", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PARENT_UI_ENTRY] = g_param_spec_object ( "parent-ui-entry", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_ADDON_TILE); g_type_ensure (BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER); g_type_ensure (BZ_TYPE_CONTEXT_TILE); g_type_ensure (BZ_TYPE_ENTRY); g_type_ensure (BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_FADING_CLAMP); g_type_ensure (BZ_TYPE_FLATPAK_ENTRY); g_type_ensure (BZ_TYPE_INSTALL_CONTROLS); g_type_ensure (BZ_TYPE_RESULT); g_type_ensure (BZ_TYPE_SHARE_LIST); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-addons-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); bz_widget_class_bind_all_context_tile_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzAddonsDialog, navigation_view); gtk_widget_class_bind_template_child (widget_class, BzAddonsDialog, description_toggle); gtk_widget_class_bind_template_child (widget_class, BzAddonsDialog, full_view_clamp); gtk_widget_class_bind_template_child (widget_class, BzAddonsDialog, list_clamp); gtk_widget_class_bind_template_child (widget_class, BzAddonsDialog, sorter); gtk_widget_class_bind_template_callback (widget_class, tile_activated_cb); gtk_widget_class_bind_template_callback (widget_class, on_visible_page_tag_changed); gtk_widget_class_bind_template_callback (widget_class, format_parent_title); gtk_widget_class_bind_template_callback (widget_class, get_description_max_height); gtk_widget_class_bind_template_callback (widget_class, get_description_toggle_text); gtk_widget_class_bind_template_callback (widget_class, license_cb); gtk_widget_class_bind_template_callback (widget_class, size_cb); gtk_widget_class_bind_template_callback (widget_class, dl_stats_cb); } static void bz_addons_dialog_init (BzAddonsDialog *self) { AdwAnimationTarget *width_target = NULL; AdwAnimationTarget *height_target = NULL; gtk_widget_init_template (GTK_WIDGET (self)); width_target = adw_property_animation_target_new (G_OBJECT (self), "content-width"); self->width_animation = adw_timed_animation_new (GTK_WIDGET (self), 0, 0, 300, width_target); height_target = adw_property_animation_target_new (G_OBJECT (self), "content-height"); self->height_animation = adw_timed_animation_new (GTK_WIDGET (self), 0, 0, 300, height_target); g_signal_connect_swapped (self, "map", G_CALLBACK (animate_to_size), self); gtk_custom_sorter_set_sort_func (self->sorter, (GCompareDataFunc) sort_func, self, NULL); } AdwDialog * bz_addons_dialog_new (BzEntryGroup *group) { GListModel *ids = NULL; GListModel *groups = NULL; BzApplicationMapFactory *factory = NULL; BzAddonsDialog *self = NULL; ids = bz_entry_group_get_addon_group_ids (group); if (ids != NULL) { factory = bz_state_info_get_application_factory (bz_state_info_get_default ()); if (factory != NULL) groups = bz_application_map_factory_generate (factory, ids); } self = g_object_new ( BZ_TYPE_ADDONS_DIALOG, "addon-groups", groups, NULL); self->parent_ui_entry = bz_entry_group_dup_ui_entry (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_UI_ENTRY]); if (groups == NULL || g_list_model_get_n_items (groups) == 0) adw_navigation_view_replace (self->navigation_view, (AdwNavigationPage *[]) { adw_navigation_view_find_page (self->navigation_view, "empty") }, 1); else if (g_list_model_get_n_items (groups) == 1) { g_autoptr (BzEntryGroup) single = g_list_model_get_item (groups, 0); AdwNavigationPage *full_view_page = NULL; set_selected_group (self, single); full_view_page = adw_navigation_view_find_page (self->navigation_view, "full-view"); adw_navigation_view_replace (self->navigation_view, &full_view_page, 1); } return ADW_DIALOG (self); } AdwDialog * bz_addons_dialog_new_single (BzEntryGroup *group) { BzAddonsDialog *self = NULL; AdwNavigationPage *full_view = NULL; self = g_object_new (BZ_TYPE_ADDONS_DIALOG, NULL); set_selected_group (self, group); full_view = adw_navigation_view_find_page (self->navigation_view, "full-view"); adw_navigation_view_replace (self->navigation_view, &full_view, 1); return ADW_DIALOG (self); } static char * format_parent_title (gpointer object, const char *title) { if (title == NULL || *title == '\0') return g_strdup (""); return g_strdup_printf (_ ("Add-on for %s"), title); } static int get_description_max_height (gpointer object, gboolean active) { return active ? 10000 : 170; } static char * get_description_toggle_text (gpointer object, gboolean active) { return g_strdup (active ? _ ("Show Less") : _ ("Show More")); } static void size_cb (BzAddonsDialog *self, GtkButton *button) { AdwNavigationPage *page = NULL; if (self->selected_group == NULL) return; page = bz_app_size_page_new (self->selected_group); adw_navigation_view_push (self->navigation_view, page); } static void license_cb (BzAddonsDialog *self, GtkButton *button) { AdwNavigationPage *page = NULL; BzEntry *ui_entry = NULL; if (self->selected_ui_entry == NULL) return; ui_entry = bz_result_get_object (self->selected_ui_entry); if (ui_entry == NULL) return; page = bz_license_page_new (ui_entry); adw_navigation_view_push (self->navigation_view, page); } static void dl_stats_cb (BzAddonsDialog *self, GtkButton *button) { BzStatsDialog *bin = NULL; AdwNavigationPage *page = NULL; BzEntry *ui_entry = NULL; if (self->selected_ui_entry == NULL) return; ui_entry = bz_result_get_object (self->selected_ui_entry); if (ui_entry == NULL) return; bin = BZ_STATS_DIALOG (bz_stats_dialog_new (NULL, NULL, 0)); page = adw_navigation_page_new (GTK_WIDGET (bin), _ ("Download Stats")); adw_navigation_page_set_tag (page, "stats"); g_object_bind_property (ui_entry, "download-stats", bin, "model", G_BINDING_SYNC_CREATE); g_object_bind_property (ui_entry, "total-downloads", bin, "total-downloads", G_BINDING_SYNC_CREATE); adw_navigation_view_push (self->navigation_view, page); bz_stats_dialog_animate_open (bin); } static void animate_to_size (BzAddonsDialog *self) { const char *tag = NULL; int target_width = 0; int target_height = 0; int nat = 0; int cur_width = 0; int measure_for = 0; int cur_w = 0; int cur_h = 0; int delta_w = 0; int delta_h = 0; int delta = 0; guint duration = 0; tag = adw_navigation_view_get_visible_page_tag (self->navigation_view); if (g_strcmp0 (tag, "list") == 0) { cur_width = gtk_widget_get_width (GTK_WIDGET (self)); target_width = 500; measure_for = MAX (-1, MIN (target_width, cur_width) - 48); gtk_widget_measure (GTK_WIDGET (self->list_clamp), GTK_ORIENTATION_VERTICAL, measure_for, NULL, &nat, NULL, NULL); target_height = CLAMP (nat + 50, 150, 600); } else if (g_strcmp0 (tag, "full-view") == 0) { cur_width = gtk_widget_get_width (GTK_WIDGET (self)); target_width = 500; measure_for = MAX (-1, MIN (target_width, cur_width) - 48); gtk_widget_measure (GTK_WIDGET (self->full_view_clamp), GTK_ORIENTATION_VERTICAL, measure_for, NULL, &nat, NULL, NULL); target_height = CLAMP (nat + 50, 300, 700); } else if (g_strcmp0 (tag, "app-size") == 0) { target_width = 500; target_height = 300; } else if (g_strcmp0 (tag, "license") == 0) { cur_width = gtk_widget_get_width (GTK_WIDGET (self)); target_width = 400; measure_for = target_width - 48; gtk_widget_measure (GTK_WIDGET (self->navigation_view), GTK_ORIENTATION_VERTICAL, measure_for, NULL, &nat, NULL, NULL); target_height = CLAMP (nat, 300, 700); } else if (g_strcmp0 (tag, "stats") == 0) { target_width = 1250; target_height = 750; } else if (g_strcmp0 (tag, "empty") == 0) { target_width = 500; target_height = 500; } else return; cur_w = adw_dialog_get_content_width (ADW_DIALOG (self)); cur_h = adw_dialog_get_content_height (ADW_DIALOG (self)); delta_w = ABS (target_width - cur_w); delta_h = ABS (target_height - cur_h); delta = MAX (delta_w, delta_h); duration = (guint) CLAMP (delta * 0.6, 200, (target_width < cur_w || target_height < cur_h) ? 300 : 600); adw_timed_animation_set_duration (ADW_TIMED_ANIMATION (self->width_animation), duration); adw_timed_animation_set_duration (ADW_TIMED_ANIMATION (self->height_animation), duration); adw_timed_animation_set_value_from (ADW_TIMED_ANIMATION (self->width_animation), cur_w); adw_timed_animation_set_value_to (ADW_TIMED_ANIMATION (self->width_animation), target_width); adw_timed_animation_set_value_from (ADW_TIMED_ANIMATION (self->height_animation), cur_h); adw_timed_animation_set_value_to (ADW_TIMED_ANIMATION (self->height_animation), target_height); adw_animation_play (self->width_animation); adw_animation_play (self->height_animation); } static void on_visible_page_tag_changed (AdwNavigationView *nav_view, GParamSpec *pspec, BzAddonsDialog *self) { g_idle_add_once ((GSourceOnceFunc) animate_to_size, self); } static DexFuture * on_parent_ui_entry_resolved (DexFuture *future, GWeakRef *wr) { g_autoptr (BzAddonsDialog) self = NULL; bz_weak_get_or_return_reject (self, wr); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_UI_ENTRY]); return dex_future_new_for_boolean (TRUE); } static DexFuture * on_selected_ui_entry_resolved (DexFuture *future, GWeakRef *wr) { g_autoptr (BzAddonsDialog) self = NULL; const GValue *value = NULL; g_autoptr (BzEntry) ui_entry = NULL; const char *ref = NULL; g_auto (GStrv) parts = NULL; BzApplicationMapFactory *factory = NULL; GtkStringObject *item = NULL; BzEntryGroup *parent_group = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); if (value == NULL || !G_VALUE_HOLDS_OBJECT (value)) return dex_future_new_for_boolean (TRUE); ui_entry = g_value_dup_object (value); if (ui_entry == NULL || !BZ_IS_FLATPAK_ENTRY (ui_entry)) return dex_future_new_for_boolean (TRUE); ref = bz_flatpak_entry_get_addon_extension_of_ref (BZ_FLATPAK_ENTRY (ui_entry)); if (ref == NULL) return dex_future_new_for_boolean (TRUE); parts = g_strsplit (ref, "/", -1); if (parts[0] == NULL || parts[1] == NULL) return dex_future_new_for_boolean (TRUE); factory = bz_state_info_get_application_factory (bz_state_info_get_default ()); item = gtk_string_object_new (parts[1]); parent_group = bz_application_map_factory_convert_one (factory, item); if (parent_group == NULL) return dex_future_new_for_boolean (TRUE); g_clear_object (&self->parent_ui_entry); self->parent_ui_entry = bz_entry_group_dup_ui_entry (parent_group); if (self->parent_ui_entry == NULL) return dex_future_new_for_boolean (TRUE); if (bz_result_get_resolved (self->parent_ui_entry)) { g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_UI_ENTRY]); } else { g_autoptr (DexFuture) parent_future = NULL; GWeakRef *parent_wr = NULL; parent_future = bz_result_dup_future (self->parent_ui_entry); parent_wr = bz_track_weak (self); parent_future = dex_future_then ( parent_future, (DexFutureCallback) on_parent_ui_entry_resolved, parent_wr, bz_weak_release); dex_clear (&self->parent_ui_future); self->parent_ui_future = g_steal_pointer (&parent_future); } return dex_future_new_for_boolean (TRUE); } static void set_selected_group (BzAddonsDialog *self, BzEntryGroup *group) { dex_clear (&self->selected_ui_future); dex_clear (&self->parent_ui_future); g_clear_object (&self->selected_group); g_clear_object (&self->selected_ui_entry); g_clear_object (&self->parent_ui_entry); gtk_toggle_button_set_active (self->description_toggle, FALSE); if (group == NULL) return; self->selected_group = g_object_ref (group); self->selected_ui_entry = bz_entry_group_dup_ui_entry (group); if (self->selected_ui_entry == NULL) goto notify; if (bz_result_get_resolved (self->selected_ui_entry)) { g_autoptr (BzEntry) entry = NULL; g_autoptr (DexFuture) object_future = NULL; GWeakRef *wr = NULL; entry = g_object_ref (bz_result_get_object (self->selected_ui_entry)); object_future = dex_future_new_for_object (entry); wr = bz_track_weak (self); dex_unref (on_selected_ui_entry_resolved (object_future, wr)); bz_weak_release (wr); } else { g_autoptr (DexFuture) ui_future = NULL; GWeakRef *wr = NULL; ui_future = bz_result_dup_future (self->selected_ui_entry); wr = bz_track_weak (self); ui_future = dex_future_then ( ui_future, (DexFutureCallback) on_selected_ui_entry_resolved, wr, bz_weak_release); self->selected_ui_future = g_steal_pointer (&ui_future); } notify: g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SELECTED_GROUP]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SELECTED_UI_ENTRY]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_UI_ENTRY]); } static void tile_activated_cb (BzAddonTile *tile) { BzAddonsDialog *self = NULL; BzEntryGroup *group = NULL; self = BZ_ADDONS_DIALOG (gtk_widget_get_ancestor (GTK_WIDGET (tile), BZ_TYPE_ADDONS_DIALOG)); if (self == NULL) return; group = bz_addon_tile_get_group (tile); if (group == NULL) return; set_selected_group (self, group); adw_navigation_view_push_by_tag (self->navigation_view, "full-view"); } static int sort_func (BzEntryGroup *a, BzEntryGroup *b, BzAddonsDialog *self) { const char *desc_a = NULL; const char *desc_b = NULL; gboolean has_a = FALSE; gboolean has_b = FALSE; int result = 0; desc_a = bz_entry_group_get_description (a); desc_b = bz_entry_group_get_description (b); has_a = desc_a != NULL && *desc_a != '\0'; has_b = desc_b != NULL && *desc_b != '\0'; if (has_a != has_b) result = has_b - has_a; else result = g_utf8_collate (bz_entry_group_get_title (a), bz_entry_group_get_title (b)); return result; } bazaar-org-bazaar-b6e9a65/src/bz-addons-dialog.h000066400000000000000000000021411522167256300215050ustar00rootroot00000000000000/* bz-addons-dialog.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry-group.h" G_BEGIN_DECLS #define BZ_TYPE_ADDONS_DIALOG (bz_addons_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzAddonsDialog, bz_addons_dialog, BZ, ADDONS_DIALOG, AdwDialog) AdwDialog * bz_addons_dialog_new (BzEntryGroup *group); AdwDialog * bz_addons_dialog_new_single (BzEntryGroup *group); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-age-rating-attribute.txt000066400000000000000000000005271522167256300234150ustar00rootroot00000000000000prefix=bz name=age_rating_attribute parent-prefix=g parent-name=object author=AUTOGEN include="bz-context-row.h" property=importance BzImportance BZ_TYPE_IMPORTANCE enum property=id char G_TYPE_STRING string property=title char G_TYPE_STRING string property=description char G_TYPE_STRING string property=icon_name char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-age-rating-dialog.blp000066400000000000000000000015241522167256300226050ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAgeRatingDialog: Adw.Dialog { content-height: 550; content-width: 640; title: _("Age Rating"); Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: ScrolledWindow { hscrollbar-policy: never; Adw.Clamp { maximum-size: 600; tightening-threshold: 400; Box { orientation: vertical; spacing: 24; margin-start: 24; margin-end: 24; margin-top: 24; margin-bottom: 24; $BzLozenge lozenge { title: _("Age Rating"); label: "?"; importance: neutral; } ListBox list { selection-mode: none; styles [ "boxed-list", ] } } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-age-rating-dialog.c000066400000000000000000001071071522167256300222560ustar00rootroot00000000000000/* bz-age-rating-dialog.c * * Copyright 2021 Endless OS Foundation LLC * Copyright 2025 Alexander Vanhee * * Author: Philip Withnall (GNOME Software) * Adapted for Bazaar by Alexander Vanhee * * 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 */ #include "config.h" #include #include #include #include "bz-age-rating-attribute.h" #include "bz-age-rating-dialog.h" #include "bz-context-row.h" #include "bz-lozenge.h" struct _BzAgeRatingDialog { AdwDialog parent_instance; BzEntry *entry; BzLozenge *lozenge; GtkListBox *list; }; G_DEFINE_FINAL_TYPE (BzAgeRatingDialog, bz_age_rating_dialog, ADW_TYPE_DIALOG) enum { PROP_0, PROP_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL }; typedef enum { BZ_AGE_RATING_GROUP_TYPE_DRUGS, BZ_AGE_RATING_GROUP_TYPE_LANGUAGE, BZ_AGE_RATING_GROUP_TYPE_MONEY, BZ_AGE_RATING_GROUP_TYPE_SEX, BZ_AGE_RATING_GROUP_TYPE_SOCIAL, BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, } BzAgeRatingGroupType; #define BZ_AGE_RATING_GROUP_TYPE_COUNT (BZ_AGE_RATING_GROUP_TYPE_VIOLENCE + 1) typedef struct { GList *attributes; } BzAgeRatingGroup; typedef void (*AttributeCallback) (const gchar *attribute, AsContentRatingValue value, gpointer user_data); static const struct { const gchar *id; BzAgeRatingGroupType group_type; const gchar *title; const gchar *unknown_description; const gchar *icon_name; const gchar *icon_name_negative; } attribute_details[] = { { "violence-cartoon", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Cartoon Violence"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding cartoon violence"), "violence-symbolic", "violence-none-symbolic" }, { "violence-fantasy", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Fantasy Violence"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding fantasy violence"), "violence-symbolic", "violence-none-symbolic" }, { "violence-realistic", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Realistic Violence"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding realistic violence"), "violence-symbolic", "violence-none-symbolic" }, { "violence-bloodshed", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Violence Depicting Bloodshed"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding bloodshed"), "violence-symbolic", "violence-none-symbolic" }, { "violence-sexual", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Sexual Violence"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding sexual violence"), "violence-symbolic", "violence-none-symbolic" }, { "drugs-alcohol", BZ_AGE_RATING_GROUP_TYPE_DRUGS, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Alcohol"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to alcohol"), "alcohol-use-symbolic", "alcohol-use-none-symbolic" }, { "drugs-narcotics", BZ_AGE_RATING_GROUP_TYPE_DRUGS, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Narcotics"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to illicit drugs"), "drug-use-symbolic", "drug-use-none-symbolic" }, { "drugs-tobacco", BZ_AGE_RATING_GROUP_TYPE_DRUGS, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Tobacco"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to tobacco products"), "smoking-symbolic", "smoking-none-symbolic" }, { "sex-nudity", BZ_AGE_RATING_GROUP_TYPE_SEX, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Nudity"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding nudity of any sort"), "nudity-symbolic", "nudity-none-symbolic" }, { "sex-themes", BZ_AGE_RATING_GROUP_TYPE_SEX, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Sexual Themes"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to or depictions of sexual nature"), "nudity-symbolic", "nudity-none-symbolic" }, { "language-profanity", BZ_AGE_RATING_GROUP_TYPE_LANGUAGE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Profanity"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding profanity of any kind"), "strong-language-symbolic", "strong-language-none-symbolic" }, { "language-humor", BZ_AGE_RATING_GROUP_TYPE_LANGUAGE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Inappropriate Humor"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding inappropriate humor"), "strong-language-symbolic", "strong-language-none-symbolic" }, { "language-discrimination", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Discrimination"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding discriminatory language of any kind"), "strong-language-symbolic", "strong-language-none-symbolic" }, { "money-advertising", BZ_AGE_RATING_GROUP_TYPE_MONEY, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Advertising"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding advertising of any kind"), "advertising-symbolic", "advertising-none-symbolic" }, { "money-gambling", BZ_AGE_RATING_GROUP_TYPE_MONEY, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Gambling"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding gambling of any kind"), "gambling-symbolic", "gambling-none-symbolic" }, { "money-purchasing", BZ_AGE_RATING_GROUP_TYPE_MONEY, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Purchasing"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding the ability to spend money"), "money-symbolic", "money-none-symbolic" }, { "social-chat", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Chat Between Users"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding ways to chat with other users"), "messaging-symbolic", "messaging-none-symbolic" }, { "social-audio", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Audio Chat Between Users"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding ways to talk with other users"), "audio-chat-symbolic", "audio-chat-none-symbolic" }, { "social-contacts", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Contact Details"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding sharing of social network usernames or email addresses"), "contacts-symbolic", NULL }, { "social-info", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Identifying Information"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding sharing of user information with third parties"), "social-info-symbolic", NULL }, { "social-location", BZ_AGE_RATING_GROUP_TYPE_SOCIAL, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Location Sharing"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding sharing of physical location with other users"), "location-services-active-symbolic", "location-services-disabled-symbolic" }, { "sex-prostitution", BZ_AGE_RATING_GROUP_TYPE_SEX, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Prostitution"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to prostitution"), "nudity-symbolic", "nudity-none-symbolic" }, { "sex-adultery", BZ_AGE_RATING_GROUP_TYPE_SEX, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Adultery"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to adultery"), "nudity-symbolic", "nudity-none-symbolic" }, { "sex-appearance", BZ_AGE_RATING_GROUP_TYPE_SEX, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Sexualized Characters"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding sexualized characters"), "nudity-symbolic", "nudity-none-symbolic" }, { "violence-worship", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Desecration"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to desecration"), "violence-symbolic", "violence-none-symbolic" }, { "violence-desecration", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Human Remains"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding visible dead human remains"), "human-remains-symbolic", NULL }, { "violence-slavery", BZ_AGE_RATING_GROUP_TYPE_VIOLENCE, /* TRANSLATORS: content rating title, see https://hughsie.github.io/oars/ */ N_ ("Slavery"), /* TRANSLATORS: content rating description, see https://hughsie.github.io/oars/ */ N_ ("No information regarding references to slavery"), "violence-symbolic", "violence-none-symbolic" }, }; static const gchar *content_rating_attribute_get_icon_name (const gchar *attribute, gboolean negative_version); static const gchar *content_rating_attribute_get_title (const gchar *attribute); static const gchar *content_rating_attribute_get_unknown_description (const gchar *attribute); static BzAgeRatingGroupType content_rating_attribute_get_group_type (const gchar *attribute); static const gchar *content_rating_group_get_description (BzAgeRatingGroupType group_type); static const gchar *content_rating_group_get_icon_name (BzAgeRatingGroupType group_type, gboolean negative_version); static const gchar *content_rating_group_get_title (BzAgeRatingGroupType group_type); static BzImportance content_rating_value_get_importance (AsContentRatingValue value); static gint attributes_compare (BzAgeRatingAttribute *attr1, BzAgeRatingAttribute *attr2); static void collect_attribute (const gchar *attribute, AsContentRatingValue value, gpointer user_data); static void process_attributes (AsContentRating *content_rating, gboolean show_worst_only, AttributeCallback callback, gpointer user_data); static gchar *format_age_short (AsContentRatingSystem system, guint age); static void update_lozenge (BzAgeRatingDialog *self, AsContentRating *content_rating); static void update_list (BzAgeRatingDialog *self); static void bz_age_rating_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAgeRatingDialog *self = NULL; self = BZ_AGE_RATING_DIALOG (object); switch (prop_id) { case PROP_ENTRY: self->entry = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_age_rating_dialog_constructed (GObject *object) { BzAgeRatingDialog *self = NULL; self = BZ_AGE_RATING_DIALOG (object); G_OBJECT_CLASS (bz_age_rating_dialog_parent_class)->constructed (object); if (self->entry != NULL) update_list (self); } static void bz_age_rating_dialog_dispose (GObject *object) { BzAgeRatingDialog *self = NULL; self = BZ_AGE_RATING_DIALOG (object); g_clear_object (&self->entry); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_AGE_RATING_DIALOG); G_OBJECT_CLASS (bz_age_rating_dialog_parent_class)->dispose (object); } static void bz_age_rating_dialog_class_init (BzAgeRatingDialogClass *klass) { GObjectClass *object_class = NULL; GtkWidgetClass *widget_class = NULL; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_age_rating_dialog_set_property; object_class->constructed = bz_age_rating_dialog_constructed; object_class->dispose = bz_age_rating_dialog_dispose; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LOZENGE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-age-rating-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzAgeRatingDialog, lozenge); gtk_widget_class_bind_template_child (widget_class, BzAgeRatingDialog, list); } static void bz_age_rating_dialog_init (BzAgeRatingDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzAgeRatingDialog * bz_age_rating_dialog_new (BzEntry *entry) { return g_object_new (BZ_TYPE_AGE_RATING_DIALOG, "entry", entry, NULL); } static const gchar * content_rating_attribute_get_icon_name (const gchar *attribute, gboolean negative_version) { for (gsize i = 0; i < G_N_ELEMENTS (attribute_details); i++) { if (g_str_equal (attribute, attribute_details[i].id)) { if (negative_version && attribute_details[i].icon_name_negative != NULL) return attribute_details[i].icon_name_negative; return attribute_details[i].icon_name; } } g_assert_not_reached (); } static const gchar * content_rating_attribute_get_title (const gchar *attribute) { for (gsize i = 0; i < G_N_ELEMENTS (attribute_details); i++) { if (g_str_equal (attribute, attribute_details[i].id)) return _ (attribute_details[i].title); } g_assert_not_reached (); } static const gchar * content_rating_attribute_get_unknown_description (const gchar *attribute) { for (gsize i = 0; i < G_N_ELEMENTS (attribute_details); i++) { if (g_str_equal (attribute, attribute_details[i].id)) return _ (attribute_details[i].unknown_description); } g_assert_not_reached (); } static BzAgeRatingGroupType content_rating_attribute_get_group_type (const gchar *attribute) { for (gsize i = 0; i < G_N_ELEMENTS (attribute_details); i++) { if (g_str_equal (attribute, attribute_details[i].id)) return attribute_details[i].group_type; } g_assert_not_reached (); } static const gchar * content_rating_group_get_description (BzAgeRatingGroupType group_type) { switch (group_type) { case BZ_AGE_RATING_GROUP_TYPE_DRUGS: return _ ("Does not include references to drugs"); case BZ_AGE_RATING_GROUP_TYPE_LANGUAGE: return _ ("Does not include swearing, profanity, and other kinds of strong language"); case BZ_AGE_RATING_GROUP_TYPE_MONEY: return _ ("Does not include ads or monetary transactions"); case BZ_AGE_RATING_GROUP_TYPE_SEX: return _ ("Does not include sex or nudity"); case BZ_AGE_RATING_GROUP_TYPE_SOCIAL: return _ ("Does not include uncontrolled chat functionality"); case BZ_AGE_RATING_GROUP_TYPE_VIOLENCE: return _ ("Does not include violence"); default: g_assert_not_reached (); } } static const gchar * content_rating_group_get_icon_name (BzAgeRatingGroupType group_type, gboolean negative_version) { switch (group_type) { case BZ_AGE_RATING_GROUP_TYPE_DRUGS: return negative_version ? "smoking-none-symbolic" : "smoking-symbolic"; case BZ_AGE_RATING_GROUP_TYPE_LANGUAGE: return negative_version ? "strong-language-none-symbolic" : "strong-language-symbolic"; case BZ_AGE_RATING_GROUP_TYPE_MONEY: return negative_version ? "money-none-symbolic" : "money-symbolic"; case BZ_AGE_RATING_GROUP_TYPE_SEX: return negative_version ? "nudity-none-symbolic" : "nudity-symbolic"; case BZ_AGE_RATING_GROUP_TYPE_SOCIAL: return negative_version ? "messaging-none-symbolic" : "messaging-symbolic"; case BZ_AGE_RATING_GROUP_TYPE_VIOLENCE: return negative_version ? "violence-none-symbolic" : "violence-symbolic"; default: g_assert_not_reached (); } } static const gchar * content_rating_group_get_title (BzAgeRatingGroupType group_type) { switch (group_type) { case BZ_AGE_RATING_GROUP_TYPE_DRUGS: return _ ("Drugs"); case BZ_AGE_RATING_GROUP_TYPE_LANGUAGE: return _ ("Strong Language"); case BZ_AGE_RATING_GROUP_TYPE_MONEY: return _ ("Money"); case BZ_AGE_RATING_GROUP_TYPE_SEX: return _ ("Nudity"); case BZ_AGE_RATING_GROUP_TYPE_SOCIAL: return _ ("Social"); case BZ_AGE_RATING_GROUP_TYPE_VIOLENCE: return _ ("Violence"); default: g_assert_not_reached (); } } static BzImportance content_rating_value_get_importance (AsContentRatingValue value) { switch (value) { case AS_CONTENT_RATING_VALUE_NONE: return BZ_IMPORTANCE_UNIMPORTANT; case AS_CONTENT_RATING_VALUE_UNKNOWN: return BZ_IMPORTANCE_NEUTRAL; case AS_CONTENT_RATING_VALUE_MILD: return BZ_IMPORTANCE_INFORMATION; case AS_CONTENT_RATING_VALUE_MODERATE: return BZ_IMPORTANCE_WARNING; case AS_CONTENT_RATING_VALUE_INTENSE: return BZ_IMPORTANCE_IMPORTANT; case AS_CONTENT_RATING_VALUE_LAST: default: return BZ_IMPORTANCE_NEUTRAL; } } static gint attributes_compare (BzAgeRatingAttribute *attr1, BzAgeRatingAttribute *attr2) { BzImportance importance1 = 0; BzImportance importance2 = 0; const gchar *id1 = NULL; const gchar *id2 = NULL; importance1 = bz_age_rating_attribute_get_importance (attr1); importance2 = bz_age_rating_attribute_get_importance (attr2); if (importance1 != importance2) { if (importance1 == BZ_IMPORTANCE_NEUTRAL && importance2 == BZ_IMPORTANCE_UNIMPORTANT) return -1; if (importance1 == BZ_IMPORTANCE_UNIMPORTANT && importance2 == BZ_IMPORTANCE_NEUTRAL) return 1; return importance2 - importance1; } else { id1 = bz_age_rating_attribute_get_id (attr1); id2 = bz_age_rating_attribute_get_id (attr2); return g_strcmp0 (id1, id2); } } static void collect_attribute (const gchar *attribute, AsContentRatingValue value, gpointer user_data) { BzAgeRatingGroup *groups = NULL; BzAgeRatingGroupType group_type = 0; BzImportance rating = 0; const gchar *icon_name = NULL; const gchar *title = NULL; const gchar *description = NULL; BzAgeRatingAttribute *attr = NULL; groups = user_data; group_type = content_rating_attribute_get_group_type (attribute); rating = content_rating_value_get_importance (value); icon_name = content_rating_attribute_get_icon_name (attribute, value == AS_CONTENT_RATING_VALUE_NONE); title = content_rating_attribute_get_title (attribute); if (value == AS_CONTENT_RATING_VALUE_UNKNOWN) description = content_rating_attribute_get_unknown_description (attribute); else description = as_content_rating_attribute_get_description (attribute, value); attr = g_object_new (BZ_TYPE_AGE_RATING_ATTRIBUTE, "id", attribute, "icon-name", icon_name, "importance", rating, "title", title, "description", description, NULL); groups[group_type].attributes = g_list_insert_sorted (groups[group_type].attributes, attr, (GCompareFunc) attributes_compare); } static AsContentRatingValue get_rating_value (AsContentRating *content_rating, const gchar *id) { if (content_rating == NULL) return AS_CONTENT_RATING_VALUE_UNKNOWN; return as_content_rating_get_value (content_rating, id); } static void process_attributes (AsContentRating *content_rating, gboolean show_worst_only, AttributeCallback callback, gpointer user_data) { g_autofree const gchar **rating_ids = NULL; AsContentRatingValue value_bad = AS_CONTENT_RATING_VALUE_NONE; guint age_bad = 0; guint rating_age = 0; AsContentRatingValue rating_value = 0; const gchar *const violence_group[] = { "violence-bloodshed", "violence-realistic", "violence-fantasy", "violence-cartoon", NULL }; const gchar *const social_group[] = { "social-audio", "social-chat", "social-contacts", "social-info", NULL }; const gchar *const coalesce_groups[] = { "sex-themes", "sex-homosexuality", NULL }; rating_ids = as_content_rating_get_all_rating_ids (); for (gsize i = 0; rating_ids[i] != NULL; i++) { rating_value = get_rating_value (content_rating, rating_ids[i]); rating_age = as_content_rating_attribute_to_csm_age (rating_ids[i], rating_value); if (rating_age > age_bad) age_bad = rating_age; if (rating_value > value_bad) value_bad = rating_value; } if (show_worst_only && (value_bad == AS_CONTENT_RATING_VALUE_NONE || age_bad == 0)) { callback (NULL, AS_CONTENT_RATING_VALUE_UNKNOWN, user_data); return; } for (gsize i = 0; rating_ids[i] != NULL; i++) { if (g_strv_contains (violence_group, rating_ids[i]) || g_strv_contains (social_group, rating_ids[i])) continue; rating_value = get_rating_value (content_rating, rating_ids[i]); rating_age = as_content_rating_attribute_to_csm_age (rating_ids[i], rating_value); if (show_worst_only && rating_age < age_bad) continue; if (g_strv_contains (coalesce_groups + 1, rating_ids[i]) && as_content_rating_attribute_to_csm_age (coalesce_groups[0], get_rating_value (content_rating, coalesce_groups[0])) >= rating_age) continue; callback (rating_ids[i], rating_value, user_data); } for (gsize i = 0; violence_group[i] != NULL; i++) { rating_value = get_rating_value (content_rating, violence_group[i]); rating_age = as_content_rating_attribute_to_csm_age (violence_group[i], rating_value); if (show_worst_only && rating_age < age_bad) continue; callback (violence_group[i], rating_value, user_data); } for (gsize i = 0; social_group[i] != NULL; i++) { rating_value = get_rating_value (content_rating, social_group[i]); rating_age = as_content_rating_attribute_to_csm_age (social_group[i], rating_value); if (show_worst_only && rating_age < age_bad) continue; callback (social_group[i], rating_value, user_data); } } static gchar * format_age_short (AsContentRatingSystem system, guint age) { if (age < 3) age = 3; /* Translators: Age rating format, e.g. "12+" for ages 12 and up */ return g_strdup_printf (_ ("%d+"), age); } static void update_lozenge (BzAgeRatingDialog *self, AsContentRating *content_rating) { const gchar *locale = NULL; AsContentRatingSystem system = 0; guint age = G_MAXUINT; g_autofree gchar *age_text = NULL; g_autofree gchar *title_text = NULL; BzImportance importance = BZ_IMPORTANCE_NEUTRAL; gboolean is_unknown = FALSE; locale = setlocale (LC_MESSAGES, NULL); system = as_content_rating_system_from_locale (locale); if (content_rating != NULL) age = as_content_rating_get_minimum_age (content_rating); if (age != G_MAXUINT) age_text = format_age_short (system, age); if (content_rating != NULL && age_text == NULL && age == 0) age_text = g_strdup (C_ ("Age rating", "All")); if (age_text == NULL || (content_rating != NULL && g_strcmp0 (as_content_rating_get_kind (content_rating), "oars-1.0") != 0 && g_strcmp0 (as_content_rating_get_kind (content_rating), "oars-1.1") != 0)) { g_clear_pointer (&age_text, g_free); age_text = g_strdup ("?"); importance = BZ_IMPORTANCE_NEUTRAL; } else { if (age >= 18) importance = BZ_IMPORTANCE_IMPORTANT; else if (age >= 15) importance = BZ_IMPORTANCE_WARNING; else if (age >= 12) importance = BZ_IMPORTANCE_INFORMATION; else importance = BZ_IMPORTANCE_NEUTRAL; } if (self->entry == NULL) { title_text = g_strdup (_ ("Age Rating")); } else { is_unknown = (content_rating == NULL || (g_strcmp0 (as_content_rating_get_kind (content_rating), "oars-1.0") != 0 && g_strcmp0 (as_content_rating_get_kind (content_rating), "oars-1.1") != 0) || age == G_MAXUINT); if (is_unknown) { title_text = g_strdup_printf (_ ("%s has an unknown age rating"), bz_entry_get_title (self->entry)); } else { if (age <= 3) title_text = g_strdup_printf (_ ("%s is suitable for everyone"), bz_entry_get_title (self->entry)); else if (age <= 5) title_text = g_strdup_printf (_ ("%s is suitable for young children"), bz_entry_get_title (self->entry)); else if (age <= 12) title_text = g_strdup_printf (_ ("%s is suitable for children"), bz_entry_get_title (self->entry)); else if (age <= 18) title_text = g_strdup_printf (_ ("%s is suitable for teenagers"), bz_entry_get_title (self->entry)); else if (age < G_MAXUINT) title_text = g_strdup_printf (_ ("%s is suitable for adults"), bz_entry_get_title (self->entry)); else title_text = g_strdup_printf (_ ("%s is suitable for %s"), bz_entry_get_title (self->entry), age_text); } } bz_lozenge_set_label (self->lozenge, age_text); bz_lozenge_set_title (self->lozenge, title_text); bz_lozenge_set_importance (self->lozenge, importance); } static void update_list (BzAgeRatingDialog *self) { AsContentRating *content_rating = NULL; BzAgeRatingGroup groups[BZ_AGE_RATING_GROUP_TYPE_COUNT] = { 0 }; guint attr_count = 0; BzAgeRatingAttribute *attr = NULL; AdwActionRow *row = NULL; BzImportance max_importance = 0; BzImportance attr_importance = 0; BzImportance row_importances[BZ_AGE_RATING_GROUP_TYPE_COUNT] = { 0 }; GtkWidget *rows[BZ_AGE_RATING_GROUP_TYPE_COUNT] = { NULL }; const gchar *group_icon = NULL; const gchar *group_title = NULL; const gchar *group_description = NULL; const gchar *attr_description = NULL; g_autofree gchar *description = NULL; g_autoptr (GList) l = NULL; g_autofree gchar *tmp = NULL; content_rating = bz_entry_get_content_rating (self->entry); update_lozenge (self, content_rating); process_attributes (content_rating, FALSE, collect_attribute, groups); for (gsize i = 0; i < BZ_AGE_RATING_GROUP_TYPE_COUNT; i++) { if (groups[i].attributes == NULL) continue; attr_count = g_list_length (groups[i].attributes); row = NULL; if (attr_count == 1) { attr = (BzAgeRatingAttribute *) groups[i].attributes->data; row = bz_context_row_new (bz_age_rating_attribute_get_icon_name (attr), bz_age_rating_attribute_get_importance (attr), bz_age_rating_attribute_get_title (attr), bz_age_rating_attribute_get_description (attr)); row_importances[i] = bz_age_rating_attribute_get_importance (attr); } else { max_importance = BZ_IMPORTANCE_UNIMPORTANT; for (l = groups[i].attributes; l != NULL; l = l->next) { attr = (BzAgeRatingAttribute *) l->data; attr_importance = bz_age_rating_attribute_get_importance (attr); if (attr_importance > max_importance) max_importance = attr_importance; } if (max_importance == BZ_IMPORTANCE_UNIMPORTANT) { group_icon = content_rating_group_get_icon_name (i, TRUE); group_title = content_rating_group_get_title (i); group_description = content_rating_group_get_description (i); row = bz_context_row_new (group_icon, BZ_IMPORTANCE_UNIMPORTANT, group_title, group_description); } else { group_icon = content_rating_group_get_icon_name (i, FALSE); group_title = content_rating_group_get_title (i); g_clear_pointer (&description, g_free); for (l = groups[i].attributes; l != NULL; l = l->next) { attr = (BzAgeRatingAttribute *) l->data; attr_importance = bz_age_rating_attribute_get_importance (attr); if (attr_importance == BZ_IMPORTANCE_UNIMPORTANT) continue; attr_description = bz_age_rating_attribute_get_description (attr); if (description == NULL) { description = g_strdup (attr_description); } else { tmp = g_strdup_printf (_ ("%s • %s"), description, attr_description); g_clear_pointer (&description, g_free); description = g_steal_pointer (&tmp); } } row = bz_context_row_new (group_icon, max_importance, group_title, description); } row_importances[i] = max_importance; } rows[i] = GTK_WIDGET (row); g_list_free_full (g_steal_pointer (&groups[i].attributes), g_object_unref); } for (gint level = BZ_IMPORTANCE_IMPORTANT; level >= BZ_IMPORTANCE_UNIMPORTANT; level--) { for (gsize i = 0; i < BZ_AGE_RATING_GROUP_TYPE_COUNT; i++) { if (rows[i] == NULL || row_importances[i] != level) continue; gtk_list_box_append (self->list, rows[i]); } } } bazaar-org-bazaar-b6e9a65/src/bz-age-rating-dialog.h000066400000000000000000000023571522167256300222640ustar00rootroot00000000000000/* bz-age-rating-dialog.h * * Copyright 2021 Endless OS Foundation LLC * Copyright 2025 Alexander Vanhee * * Author: Philip Withnall (GNOME Software) * Adapted for Bazaar by Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include #include G_BEGIN_DECLS #define BZ_TYPE_AGE_RATING_DIALOG (bz_age_rating_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzAgeRatingDialog, bz_age_rating_dialog, BZ, AGE_RATING_DIALOG, AdwDialog) BzAgeRatingDialog *bz_age_rating_dialog_new (BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-all-apps-page.blp000066400000000000000000000031121522167256300217500ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAllAppsPage: Adw.NavigationPage { Adw.ToolbarView { [top] Adw.HeaderBar {} content: Adw.BreakpointBin { width-request: 360; height-request: 100; child: ScrolledWindow { hexpand: true; vexpand: true; hscrollbar-policy: never; child: Adw.ClampScrollable clamp_scrollable { maximum-size: 1500; tightening-threshold: 1400; child: GridView grid_view { styles [ "search-grid", ] min-columns: 4; max-columns: 4; margin-start: 30; margin-end: 30; enable-rubberband: false; single-click-activate: true; factory: BuilderListItemFactory { template ListItem { child: $BzAppTile { group: bind template.item as <$BzEntryGroup>; }; } }; }; }; }; Adw.Breakpoint { condition ("max-width: 1300px") setters { grid_view.min-columns: 3; grid_view.max-columns: 3; } } Adw.Breakpoint { condition ("max-width: 900px") setters { grid_view.min-columns: 2; grid_view.max-columns: 2; } } Adw.Breakpoint { condition ("max-width: 700px") setters { grid_view.margin-start: 3; grid_view.margin-end: 3; grid_view.min-columns: 1; grid_view.max-columns: 1; } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-all-apps-page.c000066400000000000000000000106221522167256300214210ustar00rootroot00000000000000/* bz-all-apps-page.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-all-apps-page.h" #include "bz-app-tile.h" #include "bz-entry-group.h" struct _BzAllAppsPage { AdwNavigationPage parent_instance; char *title; GListModel *applications; GtkGridView *grid_view; }; G_DEFINE_FINAL_TYPE (BzAllAppsPage, bz_all_apps_page, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_PAGE_TITLE, PROP_APPLICATIONS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_all_apps_page_dispose (GObject *object) { BzAllAppsPage *self = BZ_ALL_APPS_PAGE (object); g_clear_pointer (&self->title, g_free); g_clear_object (&self->applications); G_OBJECT_CLASS (bz_all_apps_page_parent_class)->dispose (object); } static void bz_all_apps_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAllAppsPage *self = BZ_ALL_APPS_PAGE (object); switch (prop_id) { case PROP_PAGE_TITLE: g_value_set_string (value, self->title); break; case PROP_APPLICATIONS: g_value_set_object (value, self->applications); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_all_apps_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAllAppsPage *self = BZ_ALL_APPS_PAGE (object); switch (prop_id) { case PROP_PAGE_TITLE: g_clear_pointer (&self->title, g_free); self->title = g_value_dup_string (value); break; case PROP_APPLICATIONS: g_clear_object (&self->applications); self->applications = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_all_apps_page_class_init (BzAllAppsPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_all_apps_page_dispose; object_class->get_property = bz_all_apps_page_get_property; object_class->set_property = bz_all_apps_page_set_property; props[PROP_PAGE_TITLE] = g_param_spec_string ( "page-title", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_APPLICATIONS] = g_param_spec_object ( "applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_APP_TILE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-all-apps-page.ui"); gtk_widget_class_bind_template_child (widget_class, BzAllAppsPage, grid_view); } static void bz_all_apps_page_init (BzAllAppsPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwNavigationPage * bz_all_apps_page_new (const char *title, GListModel *applications) { BzAllAppsPage *apps_page = NULL; GtkSelectionModel *selection_model = NULL; apps_page = g_object_new ( BZ_TYPE_ALL_APPS_PAGE, "page-title", title, "applications", applications, NULL); adw_navigation_page_set_title (ADW_NAVIGATION_PAGE (apps_page), title); selection_model = GTK_SELECTION_MODEL (gtk_no_selection_new (applications)); gtk_grid_view_set_model (apps_page->grid_view, selection_model); g_object_unref (selection_model); return ADW_NAVIGATION_PAGE (apps_page); } bazaar-org-bazaar-b6e9a65/src/bz-all-apps-page.h000066400000000000000000000021051522167256300214230ustar00rootroot00000000000000/* bz-all-apps-page.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_ALL_APPS_PAGE (bz_all_apps_page_get_type ()) G_DECLARE_FINAL_TYPE (BzAllAppsPage, bz_all_apps_page, BZ, ALL_APPS_PAGE, AdwNavigationPage) AdwNavigationPage * bz_all_apps_page_new (const char *title, GListModel *applications); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-app-permissions.c000066400000000000000000001234761522167256300221430ustar00rootroot00000000000000/* bz-app-permissions.c * * Copyright 2026 Alexander Vanhee * Copyright (C) 2022 Red Hat * * 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 */ #include "config.h" #include #include #include #include #include "bz-app-permissions.h" #define DOES_NOT_CONTAIN ((guint) ~0) G_DEFINE_FLAGS_TYPE ( BzAppPermissionsFlags, bz_app_permissions_flags, G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_NONE, "none"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_NETWORK, "network"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS, "system-bus"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS, "session-bus"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_DEVICES, "devices"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_HOME_FULL, "home-full"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_HOME_READ, "home-read"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL, "filesystem-full"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ, "filesystem-read"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL, "downloads-full"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ, "downloads-read"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_SETTINGS, "settings"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_X11, "x11"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX, "escape-sandbox"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_OTHER, "filesystem-other"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_BUS_POLICY_OTHER, "bus-policy-other"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES, "audio-devices"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_INPUT_DEVICES, "input-devices"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_SYSTEM_DEVICES, "system-devices"), G_DEFINE_ENUM_VALUE (BZ_APP_PERMISSIONS_FLAGS_SCREEN, "screen")) G_DEFINE_ENUM_TYPE ( BzFilesystemPathType, bz_filesystem_path_type, G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_SYSTEM_ROOT, "system-root"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_HOME_SUBDIR, "home-subdir"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_HOST_OS, "host-os"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_HOST_ETC, "host-etc"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_DESKTOP, "xdg-desktop"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_DOCUMENTS, "xdg-documents"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_MUSIC, "xdg-music"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_PICTURES, "xdg-pictures"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_PUBLIC_SHARE, "xdg-public-share"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_VIDEOS, "xdg-videos"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_TEMPLATES, "xdg-templates"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_CACHE, "xdg-cache"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_CONFIG, "xdg-config"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_DATA, "xdg-data"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_XDG_RUN, "xdg-run"), G_DEFINE_ENUM_VALUE (BZ_FILESYSTEM_PATH_CUSTOM, "custom")) G_DEFINE_ENUM_TYPE ( BzBusPolicyPermission, bz_bus_policy_permission, G_DEFINE_ENUM_VALUE (BZ_BUS_POLICY_PERMISSION_UNKNOWN, "unknown"), G_DEFINE_ENUM_VALUE (BZ_BUS_POLICY_PERMISSION_NONE, "none"), G_DEFINE_ENUM_VALUE (BZ_BUS_POLICY_PERMISSION_SEE, "see"), G_DEFINE_ENUM_VALUE (BZ_BUS_POLICY_PERMISSION_TALK, "talk"), G_DEFINE_ENUM_VALUE (BZ_BUS_POLICY_PERMISSION_OWN, "own")) struct _BzAppPermissions { GObject parent; gboolean is_sealed; BzAppPermissionsFlags flags; GPtrArray *filesystem_read; GPtrArray *filesystem_full; GPtrArray *bus_policies; }; G_DEFINE_FINAL_TYPE (BzAppPermissions, bz_app_permissions, G_TYPE_OBJECT) static gint cmp_filesystem_path_pointers (gconstpointer item1, gconstpointer item2); static int cmp_bus_policy_qsort (const void *item1, const void *item2); static guint app_permissions_get_array_index (GPtrArray *array, BzFilesystemPathType type, const char *subpath); static guint get_strv_index (const gchar *const *strv, const gchar *value); static void bz_app_permissions_finalize (GObject *object) { BzAppPermissions *self = BZ_APP_PERMISSIONS (object); g_clear_pointer (&self->filesystem_read, g_ptr_array_unref); g_clear_pointer (&self->filesystem_full, g_ptr_array_unref); g_clear_pointer (&self->bus_policies, g_ptr_array_unref); G_OBJECT_CLASS (bz_app_permissions_parent_class)->finalize (object); } static void bz_app_permissions_class_init (BzAppPermissionsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = bz_app_permissions_finalize; } static void bz_app_permissions_init (BzAppPermissions *self) { } BzFilesystemPath * bz_filesystem_path_new (BzFilesystemPathType type, const char *subpath) { BzFilesystemPath *path = g_new0 (BzFilesystemPath, 1); path->type = type; path->subpath = g_strdup (subpath); return path; } void bz_filesystem_path_free (BzFilesystemPath *path) { g_return_if_fail (path != NULL); g_free (path->subpath); g_free (path); } char * bz_filesystem_path_to_display_string (const BzFilesystemPath *path) { g_return_val_if_fail (path != NULL, NULL); switch (path->type) { case BZ_FILESYSTEM_PATH_SYSTEM_ROOT: return g_strdup_printf (_ ("System folder %s"), path->subpath ? path->subpath : "/"); case BZ_FILESYSTEM_PATH_HOME_SUBDIR: return g_strdup_printf (_ ("Home subfolder %s"), path->subpath); case BZ_FILESYSTEM_PATH_HOST_OS: return g_strdup (_ ("Host system folders")); case BZ_FILESYSTEM_PATH_HOST_ETC: return g_strdup (_ ("Host system configuration from /etc")); case BZ_FILESYSTEM_PATH_XDG_DESKTOP: if (path->subpath) return g_strdup_printf (_ ("Desktop subfolder %s"), path->subpath); return g_strdup (_ ("Desktop folder")); case BZ_FILESYSTEM_PATH_XDG_DOCUMENTS: if (path->subpath) return g_strdup_printf (_ ("Documents subfolder %s"), path->subpath); return g_strdup (_ ("Documents folder")); case BZ_FILESYSTEM_PATH_XDG_MUSIC: if (path->subpath) return g_strdup_printf (_ ("Music subfolder %s"), path->subpath); return g_strdup (_ ("Music folder")); case BZ_FILESYSTEM_PATH_XDG_PICTURES: if (path->subpath) return g_strdup_printf (_ ("Pictures subfolder %s"), path->subpath); return g_strdup (_ ("Pictures folder")); case BZ_FILESYSTEM_PATH_XDG_PUBLIC_SHARE: if (path->subpath) return g_strdup_printf (_ ("Public Share subfolder %s"), path->subpath); return g_strdup (_ ("Public Share folder")); case BZ_FILESYSTEM_PATH_XDG_VIDEOS: if (path->subpath) return g_strdup_printf (_ ("Videos subfolder %s"), path->subpath); return g_strdup (_ ("Videos folder")); case BZ_FILESYSTEM_PATH_XDG_TEMPLATES: if (path->subpath) return g_strdup_printf (_ ("Templates subfolder %s"), path->subpath); return g_strdup (_ ("Templates folder")); case BZ_FILESYSTEM_PATH_XDG_CACHE: if (path->subpath) return g_strdup_printf (_ ("User cache subfolder %s"), path->subpath); return g_strdup (_ ("User cache folder")); case BZ_FILESYSTEM_PATH_XDG_CONFIG: if (path->subpath) return g_strdup_printf (_ ("User configuration subfolder %s"), path->subpath); return g_strdup (_ ("User configuration folder")); case BZ_FILESYSTEM_PATH_XDG_DATA: if (path->subpath) return g_strdup_printf (_ ("User data subfolder %s"), path->subpath); return g_strdup (_ ("User data folder")); case BZ_FILESYSTEM_PATH_XDG_RUN: if (path->subpath) return g_strdup_printf (_ ("User runtime subfolder %s"), path->subpath); return g_strdup (_ ("User runtime folder")); case BZ_FILESYSTEM_PATH_CUSTOM: return g_strdup_printf (_ ("Filesystem access to %s"), path->subpath); default: return g_strdup (_ ("Unknown filesystem path")); } } const char * bz_filesystem_path_to_icon_name (const BzFilesystemPath *path) { switch (path->type) { case BZ_FILESYSTEM_PATH_HOST_OS: return "computer-symbolic"; case BZ_FILESYSTEM_PATH_HOST_ETC: return "emblem-system-symbolic"; case BZ_FILESYSTEM_PATH_XDG_DESKTOP: return "user-desktop-symbolic"; case BZ_FILESYSTEM_PATH_XDG_DOCUMENTS: return "folder-documents-symbolic"; case BZ_FILESYSTEM_PATH_XDG_MUSIC: return "folder-music-symbolic"; case BZ_FILESYSTEM_PATH_XDG_PICTURES: return "folder-pictures-symbolic"; case BZ_FILESYSTEM_PATH_XDG_PUBLIC_SHARE: return "folder-publicshare-symbolic"; case BZ_FILESYSTEM_PATH_XDG_VIDEOS: return "folder-videos-symbolic"; case BZ_FILESYSTEM_PATH_XDG_CONFIG: return "emblem-system-symbolic"; case BZ_FILESYSTEM_PATH_SYSTEM_ROOT: case BZ_FILESYSTEM_PATH_HOME_SUBDIR: case BZ_FILESYSTEM_PATH_XDG_TEMPLATES: case BZ_FILESYSTEM_PATH_XDG_CACHE: case BZ_FILESYSTEM_PATH_XDG_DATA: case BZ_FILESYSTEM_PATH_XDG_RUN: case BZ_FILESYSTEM_PATH_CUSTOM: default: return "folder-symbolic"; } } BzBusPolicy * bz_bus_policy_new (GBusType bus_type, const char *bus_name, BzBusPolicyPermission permission) { BzBusPolicy *policy = NULL; g_return_val_if_fail (bus_type != G_BUS_TYPE_NONE, NULL); g_return_val_if_fail (bus_name != NULL && *bus_name != '\0', NULL); policy = g_new0 (BzBusPolicy, 1); policy->bus_type = bus_type; policy->bus_name = g_strdup (bus_name); policy->permission = permission; return policy; } void bz_bus_policy_free (BzBusPolicy *self) { g_return_if_fail (self != NULL); g_free (self->bus_name); g_free (self); } BzAppPermissions * bz_app_permissions_new (void) { return g_object_new (BZ_TYPE_APP_PERMISSIONS, NULL); } void bz_app_permissions_seal (BzAppPermissions *self) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); if (self->is_sealed) return; self->is_sealed = TRUE; if (self->filesystem_read) qsort (self->filesystem_read->pdata, self->filesystem_read->len, sizeof (gpointer), cmp_filesystem_path_pointers); if (self->filesystem_full) qsort (self->filesystem_full->pdata, self->filesystem_full->len, sizeof (gpointer), cmp_filesystem_path_pointers); if (self->bus_policies) qsort (self->bus_policies->pdata, self->bus_policies->len, sizeof (gpointer), cmp_bus_policy_qsort); } gboolean bz_app_permissions_is_sealed (BzAppPermissions *self) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), TRUE); return self->is_sealed; } gboolean bz_app_permissions_is_empty (BzAppPermissions *self) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), TRUE); return (self->flags == BZ_APP_PERMISSIONS_FLAGS_NONE && (self->filesystem_read == NULL || self->filesystem_read->len == 0) && (self->filesystem_full == NULL || self->filesystem_full->len == 0) && (self->bus_policies == NULL || self->bus_policies->len == 0)); } void bz_app_permissions_set_flags (BzAppPermissions *self, BzAppPermissionsFlags flags) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_assert (!self->is_sealed); self->flags = flags; } BzAppPermissionsFlags bz_app_permissions_get_flags (BzAppPermissions *self) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), BZ_APP_PERMISSIONS_FLAGS_NONE); return self->flags; } void bz_app_permissions_add_flag (BzAppPermissions *self, BzAppPermissionsFlags flags) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_return_if_fail (flags != BZ_APP_PERMISSIONS_FLAGS_NONE); g_assert (!self->is_sealed); self->flags = self->flags | flags; } void bz_app_permissions_remove_flag (BzAppPermissions *self, BzAppPermissionsFlags flags) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_return_if_fail (flags != BZ_APP_PERMISSIONS_FLAGS_NONE); g_assert (!self->is_sealed); self->flags = (self->flags & (~flags)); } void bz_app_permissions_add_filesystem_read (BzAppPermissions *self, BzFilesystemPathType type, const char *subpath) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_assert (!self->is_sealed); if (app_permissions_get_array_index (self->filesystem_read, type, subpath) != DOES_NOT_CONTAIN || app_permissions_get_array_index (self->filesystem_full, type, subpath) != DOES_NOT_CONTAIN) return; if (self->filesystem_read == NULL) self->filesystem_read = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_filesystem_path_free); g_ptr_array_add (self->filesystem_read, bz_filesystem_path_new (type, subpath)); } const GPtrArray * bz_app_permissions_get_filesystem_read (BzAppPermissions *self) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), NULL); return self->filesystem_read; } void bz_app_permissions_add_filesystem_full (BzAppPermissions *self, BzFilesystemPathType type, const char *subpath) { guint read_index = DOES_NOT_CONTAIN; g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_assert (!self->is_sealed); if (app_permissions_get_array_index (self->filesystem_full, type, subpath) != DOES_NOT_CONTAIN) return; if (self->filesystem_full == NULL) self->filesystem_full = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_filesystem_path_free); g_ptr_array_add (self->filesystem_full, bz_filesystem_path_new (type, subpath)); read_index = app_permissions_get_array_index (self->filesystem_read, type, subpath); if (read_index != DOES_NOT_CONTAIN) { g_ptr_array_remove_index (self->filesystem_read, read_index); if (self->filesystem_read->len == 0) g_clear_pointer (&self->filesystem_read, g_ptr_array_unref); } } const GPtrArray * bz_app_permissions_get_filesystem_full (BzAppPermissions *self) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), NULL); return self->filesystem_full; } void bz_app_permissions_add_bus_policy (BzAppPermissions *self, GBusType bus_type, const char *bus_name, BzBusPolicyPermission permission) { g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_return_if_fail (bus_type != G_BUS_TYPE_NONE); g_return_if_fail (bus_name != NULL && *bus_name != '\0'); g_return_if_fail (permission != BZ_BUS_POLICY_PERMISSION_UNKNOWN); g_assert (!self->is_sealed); for (unsigned int i = 0; self->bus_policies != NULL && i < self->bus_policies->len; i++) { BzBusPolicy *policy = g_ptr_array_index (self->bus_policies, i); if (policy->bus_type == bus_type && g_str_equal (policy->bus_name, bus_name)) { policy->permission = MAX (policy->permission, permission); return; } } if (permission == BZ_BUS_POLICY_PERMISSION_NONE) return; if (self->bus_policies == NULL) self->bus_policies = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_bus_policy_free); g_ptr_array_add (self->bus_policies, bz_bus_policy_new (bus_type, bus_name, permission)); } const BzBusPolicy *const * bz_app_permissions_get_bus_policies (BzAppPermissions *self, size_t *out_n_bus_policies) { g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), NULL); g_return_val_if_fail (self->is_sealed, NULL); if (out_n_bus_policies != NULL) *out_n_bus_policies = (self->bus_policies != NULL) ? self->bus_policies->len : 0; return (self->bus_policies != NULL && self->bus_policies->len > 0) ? (const BzBusPolicy *const *) self->bus_policies->pdata : NULL; } BzAppPermissions * bz_app_permissions_new_from_metadata (GKeyFile *keyfile, GError **error) { char **strv = NULL; BzAppPermissions *permissions = NULL; BzAppPermissionsFlags flags = BZ_APP_PERMISSIONS_FLAGS_NONE; g_autofree char *app_id = NULL; g_autofree char *mpris_id = NULL; g_autofree char *app_id_non_devel = NULL; g_autofree char *mpris_id_non_devel = NULL; g_return_val_if_fail (keyfile != NULL, NULL); permissions = bz_app_permissions_new (); app_id = g_key_file_get_value (keyfile, "Application", "name", NULL); strv = g_key_file_get_string_list (keyfile, "Context", "sockets", NULL, NULL); if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "system-bus")) flags |= BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS | BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX; if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "session-bus")) flags |= BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS | BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX; if (strv != NULL && !g_strv_contains ((const gchar *const *) strv, "fallback-x11") && g_strv_contains ((const gchar *const *) strv, "x11")) flags |= BZ_APP_PERMISSIONS_FLAGS_X11; if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "fallback-x11") && !g_strv_contains ((const gchar *const *) strv, "wayland")) flags |= BZ_APP_PERMISSIONS_FLAGS_X11; if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "pulseaudio")) flags |= BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES; if (strv != NULL && g_strv_contains ((const char *const *) strv, "gpg-agent")) flags |= BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX; g_strfreev (strv); strv = g_key_file_get_string_list (keyfile, "Context", "devices", NULL, NULL); if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "all")) flags |= BZ_APP_PERMISSIONS_FLAGS_DEVICES; if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "input")) flags |= BZ_APP_PERMISSIONS_FLAGS_INPUT_DEVICES; if (strv != NULL && (g_strv_contains ((const gchar *const *) strv, "shm") || g_strv_contains ((const gchar *const *) strv, "kvm"))) flags |= BZ_APP_PERMISSIONS_FLAGS_SYSTEM_DEVICES; g_strfreev (strv); strv = g_key_file_get_string_list (keyfile, "Context", "shared", NULL, NULL); if (strv != NULL && g_strv_contains ((const gchar *const *) strv, "network")) flags |= BZ_APP_PERMISSIONS_FLAGS_NETWORK; g_strfreev (strv); strv = g_key_file_get_string_list (keyfile, "Context", "filesystems", NULL, NULL); if (strv != NULL) { const struct { const gchar *key; BzAppPermissionsFlags perm; } filesystems_access[] = { { "home", BZ_APP_PERMISSIONS_FLAGS_HOME_FULL }, { "home:rw", BZ_APP_PERMISSIONS_FLAGS_HOME_FULL }, { "home:ro", BZ_APP_PERMISSIONS_FLAGS_HOME_READ }, { "~", BZ_APP_PERMISSIONS_FLAGS_HOME_FULL }, { "~:rw", BZ_APP_PERMISSIONS_FLAGS_HOME_FULL }, { "~:ro", BZ_APP_PERMISSIONS_FLAGS_HOME_READ }, { "host", BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL }, { "host:rw", BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL }, { "host:ro", BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ }, { "xdg-config/kdeglobals:ro", BZ_APP_PERMISSIONS_FLAGS_NONE }, { "xdg-download", BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL }, { "xdg-download:rw", BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL }, { "xdg-download:ro", BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ }, { "xdg-data/flatpak/overrides:create", BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX }, { "xdg-run/pipewire-0", BZ_APP_PERMISSIONS_FLAGS_SCREEN | BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES }, { "xdg-run/pipewire-0:rw", BZ_APP_PERMISSIONS_FLAGS_SCREEN | BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES }, { "xdg-run/pipewire-0:ro", BZ_APP_PERMISSIONS_FLAGS_SCREEN | BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES }, { "xdg-run/gvfsd", BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL }, }; guint filesystems_hits = 0; guint strv_len = g_strv_length (strv); for (guint i = 0; i < G_N_ELEMENTS (filesystems_access); i++) { guint index = get_strv_index ((const gchar *const *) strv, filesystems_access[i].key); if (index < strv_len) { flags |= filesystems_access[i].perm; filesystems_hits++; strv[index][0] = '\0'; } } if ((flags & BZ_APP_PERMISSIONS_FLAGS_HOME_FULL) != 0) flags = flags & ~BZ_APP_PERMISSIONS_FLAGS_HOME_READ; if ((flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL) != 0) flags = flags & ~BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ; if ((flags & BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL) != 0) flags = flags & ~BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ; if (strv_len > filesystems_hits) { const struct { const gchar *prefix; BzFilesystemPathType type; } filesystems_other[] = { { "/", BZ_FILESYSTEM_PATH_SYSTEM_ROOT }, { "home/", BZ_FILESYSTEM_PATH_HOME_SUBDIR }, { "~/", BZ_FILESYSTEM_PATH_HOME_SUBDIR }, { "host-os", BZ_FILESYSTEM_PATH_HOST_OS }, { "host-etc", BZ_FILESYSTEM_PATH_HOST_ETC }, { "xdg-desktop", BZ_FILESYSTEM_PATH_XDG_DESKTOP }, { "xdg-documents", BZ_FILESYSTEM_PATH_XDG_DOCUMENTS }, { "xdg-music", BZ_FILESYSTEM_PATH_XDG_MUSIC }, { "xdg-pictures", BZ_FILESYSTEM_PATH_XDG_PICTURES }, { "xdg-public-share", BZ_FILESYSTEM_PATH_XDG_PUBLIC_SHARE }, { "xdg-videos", BZ_FILESYSTEM_PATH_XDG_VIDEOS }, { "xdg-templates", BZ_FILESYSTEM_PATH_XDG_TEMPLATES }, { "xdg-cache", BZ_FILESYSTEM_PATH_XDG_CACHE }, { "xdg-config", BZ_FILESYSTEM_PATH_XDG_CONFIG }, { "xdg-data", BZ_FILESYSTEM_PATH_XDG_DATA }, { "xdg-run", BZ_FILESYSTEM_PATH_XDG_RUN } }; flags |= BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_OTHER; for (guint j = 0; strv[j]; j++) { gchar *perm = strv[j]; gboolean is_readonly = FALSE; gchar *colon = NULL; guint i = 0; const gchar *subpath = NULL; if (!perm[0]) continue; is_readonly = g_str_has_suffix (perm, ":ro"); colon = strrchr (perm, ':'); if (colon) *colon = '\0'; for (i = 0; i < G_N_ELEMENTS (filesystems_other); i++) { if (g_str_has_prefix (perm, filesystems_other[i].prefix)) { const gchar *slash = NULL; if (filesystems_other[i].type == BZ_FILESYSTEM_PATH_SYSTEM_ROOT) { if (perm[1] != '\0') subpath = perm + 1; else subpath = NULL; } else { slash = strchr (perm, '/'); if (slash && slash != perm) subpath = slash + 1; } if (is_readonly) bz_app_permissions_add_filesystem_read (permissions, filesystems_other[i].type, subpath); else bz_app_permissions_add_filesystem_full (permissions, filesystems_other[i].type, subpath); break; } } if (i == G_N_ELEMENTS (filesystems_other)) { if (is_readonly) bz_app_permissions_add_filesystem_read (permissions, BZ_FILESYSTEM_PATH_CUSTOM, perm); else bz_app_permissions_add_filesystem_full (permissions, BZ_FILESYSTEM_PATH_CUSTOM, perm); } } } } g_strfreev (strv); if (!(flags & (BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS | BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS))) { const struct { GBusType bus_type; const char *keyfile_group; BzAppPermissionsFlags unfiltered_flag; } bus_policy_types[] = { { G_BUS_TYPE_SESSION, "Session Bus Policy", BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS }, { G_BUS_TYPE_SYSTEM, "System Bus Policy", BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS }, }; if (app_id != NULL) { mpris_id = g_strconcat ("org.mpris.MediaPlayer2.", app_id, NULL); app_id_non_devel = g_str_has_suffix (app_id, ".Devel") ? g_strndup (app_id, strlen (app_id) - strlen (".Devel")) : NULL; mpris_id_non_devel = (app_id_non_devel != NULL) ? g_strconcat ("org.mpris.MediaPlayer2.", app_id_non_devel, NULL) : NULL; } for (size_t h = 0; h < G_N_ELEMENTS (bus_policy_types); h++) { g_auto (GStrv) bus_policies = NULL; if (flags & bus_policy_types[h].unfiltered_flag) continue; bus_policies = g_key_file_get_keys (keyfile, bus_policy_types[h].keyfile_group, NULL, NULL); for (size_t i = 0; bus_policies != NULL && bus_policies[i] != NULL; i++) { const struct { GBusType bus_type; const char *bus_name; gboolean is_prefix; BzBusPolicyPermission permission_is_at_least; BzAppPermissionsFlags flags; } bus_policy_permissions[] = { { G_BUS_TYPE_SESSION, "ca.desrt.dconf", FALSE, BZ_BUS_POLICY_PERMISSION_TALK, BZ_APP_PERMISSIONS_FLAGS_SETTINGS }, { G_BUS_TYPE_SESSION, "org.freedesktop.Flatpak", FALSE, BZ_BUS_POLICY_PERMISSION_TALK, BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX }, { G_BUS_TYPE_SESSION, "org.freedesktop.impl.portal.PermissionStore", FALSE, BZ_BUS_POLICY_PERMISSION_TALK, BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX }, { G_BUS_TYPE_SESSION, "org.gtk.vfs.", TRUE, BZ_BUS_POLICY_PERMISSION_TALK, BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL }, }; const char *bus_name_pattern = bus_policies[i]; g_autofree char *bus_policy_str = NULL; BzBusPolicyPermission bus_policy = BZ_BUS_POLICY_PERMISSION_UNKNOWN; size_t j = 0; bus_policy_str = g_key_file_get_string (keyfile, bus_policy_types[h].keyfile_group, bus_name_pattern, NULL); g_assert (bus_policy_str != NULL); if (g_str_equal (bus_policy_str, "none")) bus_policy = BZ_BUS_POLICY_PERMISSION_NONE; else if (g_str_equal (bus_policy_str, "see")) bus_policy = BZ_BUS_POLICY_PERMISSION_SEE; else if (g_str_equal (bus_policy_str, "talk")) bus_policy = BZ_BUS_POLICY_PERMISSION_TALK; else if (g_str_equal (bus_policy_str, "own")) bus_policy = BZ_BUS_POLICY_PERMISSION_OWN; else continue; if (app_id != NULL && bus_policy_types[h].bus_type == G_BUS_TYPE_SESSION && (g_str_equal (bus_name_pattern, app_id) || (g_str_has_prefix (bus_name_pattern, app_id) && bus_name_pattern[strlen (app_id)] == '.') || g_str_equal (bus_name_pattern, mpris_id) || g_str_equal (bus_name_pattern, "org.freedesktop.DBus") || g_str_has_prefix (bus_name_pattern, "org.freedesktop.portal."))) continue; if (app_id_non_devel != NULL && bus_policy_types[h].bus_type == G_BUS_TYPE_SESSION && (g_str_equal (bus_name_pattern, app_id_non_devel) || (g_str_has_prefix (bus_name_pattern, app_id_non_devel) && bus_name_pattern[strlen (app_id_non_devel)] == '.') || g_str_equal (bus_name_pattern, mpris_id_non_devel))) continue; for (j = 0; j < G_N_ELEMENTS (bus_policy_permissions); j++) { if (bus_policy_permissions[j].bus_type == bus_policy_types[h].bus_type && ((!bus_policy_permissions[j].is_prefix && g_str_equal (bus_name_pattern, bus_policy_permissions[j].bus_name)) || (bus_policy_permissions[j].is_prefix && g_str_has_prefix (bus_name_pattern, bus_policy_permissions[j].bus_name))) && bus_policy >= bus_policy_permissions[j].permission_is_at_least) { flags |= bus_policy_permissions[j].flags; break; } } if (j == G_N_ELEMENTS (bus_policy_permissions)) { flags |= BZ_APP_PERMISSIONS_FLAGS_BUS_POLICY_OTHER; bz_app_permissions_add_bus_policy (permissions, bus_policy_types[h].bus_type, bus_name_pattern, bus_policy); } } } } bz_app_permissions_set_flags (permissions, flags); bz_app_permissions_seal (permissions); return permissions; } void bz_app_permissions_serialize (BzAppPermissions *self, GVariantBuilder *builder) { GFlagsClass *flags_class = NULL; guint i = 0; g_return_if_fail (BZ_IS_APP_PERMISSIONS (self)); g_return_if_fail (builder != NULL); flags_class = g_type_class_ref (BZ_TYPE_APP_PERMISSIONS_FLAGS); if (self->flags != BZ_APP_PERMISSIONS_FLAGS_NONE) { g_autoptr (GVariantBuilder) sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (i = 0; i < flags_class->n_values; i++) { if (self->flags & flags_class->values[i].value) g_variant_builder_add (sub_builder, "s", flags_class->values[i].value_nick); } g_variant_builder_add (builder, "{sv}", "permissions-flags", g_variant_builder_end (sub_builder)); } g_type_class_unref (flags_class); if (self->filesystem_read != NULL && self->filesystem_read->len > 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantBuilder) sub_builder = NULL; enum_class = g_type_class_ref (BZ_TYPE_FILESYSTEM_PATH_TYPE); sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ss)")); for (i = 0; i < self->filesystem_read->len; i++) { const BzFilesystemPath *path = g_ptr_array_index (self->filesystem_read, i); GEnumValue *enum_value = g_enum_get_value (enum_class, path->type); g_variant_builder_add (sub_builder, "(ss)", enum_value->value_nick, path->subpath ? path->subpath : ""); } g_variant_builder_add (builder, "{sv}", "permissions-filesystem-read", g_variant_builder_end (sub_builder)); g_type_class_unref (enum_class); } if (self->filesystem_full != NULL && self->filesystem_full->len > 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantBuilder) sub_builder = NULL; enum_class = g_type_class_ref (BZ_TYPE_FILESYSTEM_PATH_TYPE); sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ss)")); for (i = 0; i < self->filesystem_full->len; i++) { const BzFilesystemPath *path = g_ptr_array_index (self->filesystem_full, i); GEnumValue *enum_value = g_enum_get_value (enum_class, path->type); g_variant_builder_add (sub_builder, "(ss)", enum_value->value_nick, path->subpath ? path->subpath : ""); } g_variant_builder_add (builder, "{sv}", "permissions-filesystem-full", g_variant_builder_end (sub_builder)); g_type_class_unref (enum_class); } if (self->bus_policies != NULL && self->bus_policies->len > 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantBuilder) sub_builder = NULL; enum_class = g_type_class_ref (BZ_TYPE_BUS_POLICY_PERMISSION); sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(iss)")); for (i = 0; i < self->bus_policies->len; i++) { BzBusPolicy *policy = g_ptr_array_index (self->bus_policies, i); GEnumValue *enum_value = g_enum_get_value (enum_class, policy->permission); g_variant_builder_add (sub_builder, "(iss)", (gint32) policy->bus_type, policy->bus_name, enum_value->value_nick); } g_variant_builder_add (builder, "{sv}", "permissions-bus-policies", g_variant_builder_end (sub_builder)); g_type_class_unref (enum_class); } } gboolean bz_app_permissions_deserialize (BzAppPermissions *self, GVariant *import, GError **error) { g_autoptr (GVariantIter) iter = NULL; g_return_val_if_fail (BZ_IS_APP_PERMISSIONS (self), FALSE); g_return_val_if_fail (import != NULL, FALSE); iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "permissions-flags") == 0) { GFlagsClass *flags_class = NULL; g_autoptr (GVariantIter) flags_iter = NULL; flags_class = g_type_class_ref (BZ_TYPE_APP_PERMISSIONS_FLAGS); flags_iter = g_variant_iter_new (value); self->flags = BZ_APP_PERMISSIONS_FLAGS_NONE; for (;;) { g_autofree char *flag_nick = NULL; if (!g_variant_iter_next (flags_iter, "s", &flag_nick)) break; for (guint i = 0; i < flags_class->n_values; i++) { if (g_str_equal (flag_nick, flags_class->values[i].value_nick)) { self->flags |= flags_class->values[i].value; break; } } } g_type_class_unref (flags_class); } else if (g_strcmp0 (key, "permissions-filesystem-read") == 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantIter) paths_iter = NULL; enum_class = g_type_class_ref (BZ_TYPE_FILESYSTEM_PATH_TYPE); if (self->filesystem_read == NULL) self->filesystem_read = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_filesystem_path_free); paths_iter = g_variant_iter_new (value); for (;;) { g_autofree char *type_nick = NULL; g_autofree char *subpath = NULL; if (!g_variant_iter_next (paths_iter, "(ss)", &type_nick, &subpath)) break; for (guint i = 0; i < enum_class->n_values; i++) { if (g_str_equal (type_nick, enum_class->values[i].value_nick)) { g_ptr_array_add (self->filesystem_read, bz_filesystem_path_new (enum_class->values[i].value, subpath[0] ? subpath : NULL)); break; } } } g_type_class_unref (enum_class); } else if (g_strcmp0 (key, "permissions-filesystem-full") == 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantIter) paths_iter = NULL; enum_class = g_type_class_ref (BZ_TYPE_FILESYSTEM_PATH_TYPE); if (self->filesystem_full == NULL) self->filesystem_full = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_filesystem_path_free); paths_iter = g_variant_iter_new (value); for (;;) { g_autofree char *type_nick = NULL; g_autofree char *subpath = NULL; if (!g_variant_iter_next (paths_iter, "(ss)", &type_nick, &subpath)) break; for (guint i = 0; i < enum_class->n_values; i++) { if (g_str_equal (type_nick, enum_class->values[i].value_nick)) { g_ptr_array_add (self->filesystem_full, bz_filesystem_path_new (enum_class->values[i].value, subpath[0] ? subpath : NULL)); break; } } } g_type_class_unref (enum_class); } else if (g_strcmp0 (key, "permissions-bus-policies") == 0) { GEnumClass *enum_class = NULL; g_autoptr (GVariantIter) policies_iter = NULL; enum_class = g_type_class_ref (BZ_TYPE_BUS_POLICY_PERMISSION); if (self->bus_policies == NULL) self->bus_policies = g_ptr_array_new_with_free_func ((GDestroyNotify) bz_bus_policy_free); policies_iter = g_variant_iter_new (value); for (;;) { gint32 bus_type_int = 0; g_autofree char *bus_name = NULL; g_autofree char *permission_nick = NULL; if (!g_variant_iter_next (policies_iter, "(iss)", &bus_type_int, &bus_name, &permission_nick)) break; for (guint i = 0; i < enum_class->n_values; i++) { if (g_str_equal (permission_nick, enum_class->values[i].value_nick)) { g_ptr_array_add (self->bus_policies, bz_bus_policy_new ((GBusType) bus_type_int, bus_name, enum_class->values[i].value)); break; } } } g_type_class_unref (enum_class); } } bz_app_permissions_seal (self); return TRUE; } static gint cmp_filesystem_path_pointers (gconstpointer item1, gconstpointer item2) { const BzFilesystemPath *const *pitem1 = item1; const BzFilesystemPath *const *pitem2 = item2; const BzFilesystemPath *path1 = *pitem1; const BzFilesystemPath *path2 = *pitem2; if (path1->type != path2->type) return path1->type - path2->type; return g_strcmp0 (path1->subpath, path2->subpath); } static int cmp_bus_policy_qsort (const void *item1, const void *item2) { const BzBusPolicy *const *pitem1 = item1; const BzBusPolicy *const *pitem2 = item2; const BzBusPolicy *policy1 = *pitem1; const BzBusPolicy *policy2 = *pitem2; if (policy1->bus_type != policy2->bus_type) return policy1->bus_type - policy2->bus_type; return strcmp (policy1->bus_name, policy2->bus_name); } static guint app_permissions_get_array_index (GPtrArray *array, BzFilesystemPathType type, const char *subpath) { if (array == NULL) return DOES_NOT_CONTAIN; for (guint i = 0; i < array->len; i++) { const BzFilesystemPath *path = g_ptr_array_index (array, i); if (path->type == type && g_strcmp0 (path->subpath, subpath) == 0) return i; } return DOES_NOT_CONTAIN; } static guint get_strv_index (const gchar *const *strv, const gchar *value) { guint ii; for (ii = 0; strv[ii]; ii++) { if (g_str_equal (strv[ii], value)) break; } return ii; } bazaar-org-bazaar-b6e9a65/src/bz-app-permissions.h000066400000000000000000000145531522167256300221430ustar00rootroot00000000000000/* bz-app-permissions.h * * Copyright 2026 Alexander Vanhee * Copyright (C) 2022 Red Hat * * 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 */ #pragma once #include #include G_BEGIN_DECLS #define BZ_TYPE_APP_PERMISSIONS (bz_app_permissions_get_type ()) G_DECLARE_FINAL_TYPE (BzAppPermissions, bz_app_permissions, BZ, APP_PERMISSIONS, GObject) typedef enum { BZ_APP_PERMISSIONS_FLAGS_NONE = 0, BZ_APP_PERMISSIONS_FLAGS_NETWORK = 1 << 0, BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS = 1 << 1, BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS = 1 << 2, BZ_APP_PERMISSIONS_FLAGS_DEVICES = 1 << 3, BZ_APP_PERMISSIONS_FLAGS_HOME_FULL = 1 << 4, BZ_APP_PERMISSIONS_FLAGS_HOME_READ = 1 << 5, BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL = 1 << 6, BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ = 1 << 7, BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL = 1 << 8, BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ = 1 << 9, BZ_APP_PERMISSIONS_FLAGS_SETTINGS = 1 << 10, BZ_APP_PERMISSIONS_FLAGS_X11 = 1 << 11, BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX = 1 << 12, BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_OTHER = 1 << 13, BZ_APP_PERMISSIONS_FLAGS_BUS_POLICY_OTHER = 1 << 14, BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES = 1 << 15, BZ_APP_PERMISSIONS_FLAGS_INPUT_DEVICES = 1 << 16, BZ_APP_PERMISSIONS_FLAGS_SYSTEM_DEVICES = 1 << 17, BZ_APP_PERMISSIONS_FLAGS_SCREEN = 1 << 18, } BzAppPermissionsFlags; #define BZ_TYPE_APP_PERMISSIONS_FLAGS (bz_app_permissions_flags_get_type ()) typedef enum { BZ_FILESYSTEM_PATH_SYSTEM_ROOT, BZ_FILESYSTEM_PATH_HOME_SUBDIR, BZ_FILESYSTEM_PATH_HOST_OS, BZ_FILESYSTEM_PATH_HOST_ETC, BZ_FILESYSTEM_PATH_XDG_DESKTOP, BZ_FILESYSTEM_PATH_XDG_DOCUMENTS, BZ_FILESYSTEM_PATH_XDG_MUSIC, BZ_FILESYSTEM_PATH_XDG_PICTURES, BZ_FILESYSTEM_PATH_XDG_PUBLIC_SHARE, BZ_FILESYSTEM_PATH_XDG_VIDEOS, BZ_FILESYSTEM_PATH_XDG_TEMPLATES, BZ_FILESYSTEM_PATH_XDG_CACHE, BZ_FILESYSTEM_PATH_XDG_CONFIG, BZ_FILESYSTEM_PATH_XDG_DATA, BZ_FILESYSTEM_PATH_XDG_RUN, BZ_FILESYSTEM_PATH_CUSTOM, } BzFilesystemPathType; #define BZ_TYPE_FILESYSTEM_PATH_TYPE (bz_filesystem_path_type_get_type ()) typedef enum { BZ_BUS_POLICY_PERMISSION_UNKNOWN = 0, BZ_BUS_POLICY_PERMISSION_NONE, BZ_BUS_POLICY_PERMISSION_SEE, BZ_BUS_POLICY_PERMISSION_TALK, BZ_BUS_POLICY_PERMISSION_OWN, } BzBusPolicyPermission; #define BZ_TYPE_BUS_POLICY_PERMISSION (bz_bus_policy_permission_get_type ()) typedef struct { BzFilesystemPathType type; char *subpath; } BzFilesystemPath; typedef struct { GBusType bus_type; char *bus_name; BzBusPolicyPermission permission; } BzBusPolicy; GType bz_app_permissions_flags_get_type (void) G_GNUC_CONST; GType bz_safety_rating_get_type (void) G_GNUC_CONST; GType bz_filesystem_path_type_get_type (void) G_GNUC_CONST; GType bz_bus_policy_permission_get_type (void) G_GNUC_CONST; BzFilesystemPath * bz_filesystem_path_new (BzFilesystemPathType type, const char *subpath); void bz_filesystem_path_free (BzFilesystemPath *self); char * bz_filesystem_path_to_display_string (const BzFilesystemPath *path); const char * bz_filesystem_path_to_icon_name (const BzFilesystemPath *path); BzBusPolicy * bz_bus_policy_new (GBusType bus_type, const char *bus_name, BzBusPolicyPermission permission); void bz_bus_policy_free (BzBusPolicy *self); G_DEFINE_AUTOPTR_CLEANUP_FUNC (BzFilesystemPath, bz_filesystem_path_free) G_DEFINE_AUTOPTR_CLEANUP_FUNC (BzBusPolicy, bz_bus_policy_free) BzAppPermissions * bz_app_permissions_new (void); BzAppPermissions * bz_app_permissions_new_from_metadata (GKeyFile *keyfile, GError **error); void bz_app_permissions_seal (BzAppPermissions *self); gboolean bz_app_permissions_is_sealed (BzAppPermissions *self); gboolean bz_app_permissions_is_empty (BzAppPermissions *self); void bz_app_permissions_set_flags (BzAppPermissions *self, BzAppPermissionsFlags flags); BzAppPermissionsFlags bz_app_permissions_get_flags (BzAppPermissions *self); void bz_app_permissions_add_flag (BzAppPermissions *self, BzAppPermissionsFlags flags); void bz_app_permissions_remove_flag (BzAppPermissions *self, BzAppPermissionsFlags flags); void bz_app_permissions_add_filesystem_read (BzAppPermissions *self, BzFilesystemPathType type, const char *subpath); const GPtrArray * bz_app_permissions_get_filesystem_read (BzAppPermissions *self); void bz_app_permissions_add_filesystem_full (BzAppPermissions *self, BzFilesystemPathType type, const char *subpath); const GPtrArray * bz_app_permissions_get_filesystem_full (BzAppPermissions *self); void bz_app_permissions_add_bus_policy (BzAppPermissions *self, GBusType bus_type, const char *bus_name, BzBusPolicyPermission permission); const BzBusPolicy *const * bz_app_permissions_get_bus_policies (BzAppPermissions *self, size_t *out_n_bus_policies); void bz_app_permissions_serialize (BzAppPermissions *self, GVariantBuilder *builder); gboolean bz_app_permissions_deserialize (BzAppPermissions *self, GVariant *import, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-app-size-dialog.blp000066400000000000000000000142711522167256300223220ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAppSizeDialog: Adw.Bin { child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: Adw.Clamp { maximum-size: 600; child: Box { orientation: vertical; margin-top: 6; margin-bottom: 18; margin-start: 18; margin-end: 18; Box { orientation: vertical; margin-bottom: 24; $BzLozenge { title: _("Download Size"); label: bind $format_size(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.size as , true) as ; importance: neutral; visible: bind $is_zero(template.group as <$BzEntryGroup>.removable) as ; } $BzLozenge { title: _("Installed Size"); label: bind $format_size(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.installed-size as , true) as ; importance: neutral; visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable) as ) as ; } } Adw.PreferencesGroup { margin-bottom: 15; Adw.ActionRow { [prefix] Label { label: bind $format_size(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.size as , true) as ; use-markup: true; valign: center; width-request: 90; margin-top: 8; margin-bottom: 8; styles [ "circular-lozenge", "title-4", "grey", ] } title: _("Download Size"); subtitle: _("Amount to download from the internet"); } Adw.ActionRow { [prefix] Label { label: bind $format_size(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.installed-size as , false) as ; use-markup: true; valign: center; width-request: 90; margin-top: 8; margin-bottom: 8; styles [ "circular-lozenge", "title-4", "grey", ] } title: _("Installed Size"); subtitle: _("Size on Disk"); } Adw.ActionRow runtime_row { visible: bind try {$invert_boolean($is_null(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object) as ) as , false}; [prefix] Label { label: bind $format_size($choose(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.installed, template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.installed-size as , template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.size as ) as , false) as ; use-markup: true; valign: center; width-request: 90; margin-top: 8; margin-bottom: 8; styles [ "circular-lozenge", "title-4", "grey", ] } title: bind $get_runtime_size_title(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.installed) as ; subtitle: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.title; } } Adw.PreferencesGroup { margin-bottom: 15; visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.user-data-size) as ) as ; Adw.ActionRow { [prefix] Label { label: bind $format_size(template.group as <$BzEntryGroup>.user-data-size, false) as ; use-markup: true; valign: center; width-request: 90; margin-top: 8; margin-bottom: 8; styles [ "circular-lozenge", "title-4", "grey", ] } [suffix] Button { has-tooltip: true; tooltip-text: _("Open user data folder"); icon-name: "folder-open-symbolic"; clicked => $open_user_data_folder_cb(); valign: center; styles [ "flat", ] } title: _("Your User Data"); subtitle: _("Caches, settings, and other app data"); } Adw.ActionRow { [prefix] Label { label: bind $format_size(template.group as <$BzEntryGroup>.cache-size, false) as ; use-markup: true; valign: center; width-request: 90; margin-top: 8; margin-bottom: 8; styles [ "circular-lozenge", "title-4", "grey", ] } title: _("Cache"); subtitle: _("Temporary cached data"); } } Adw.PreferencesGroup { margin-bottom: 15; margin-top: 4; visible: bind $logical_and($invert_boolean($is_zero(template.group as <$BzEntryGroup>.user-data-size) as ) as , $invert_boolean($is_app_id(template.group as <$BzEntryGroup>.id) as ) as ) as ; Adw.ButtonRow { title: _("Clear Cache"); activated => $delete_cache_cb(); sensitive: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.cache-size) as ) as ; styles ["destructive-action"] } } }; }; }; }bazaar-org-bazaar-b6e9a65/src/bz-app-size-dialog.c000066400000000000000000000142611522167256300217660ustar00rootroot00000000000000/* bz-app-size-dialog.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "bz-app-size-dialog.h" #include "bz-entry-group.h" #include "bz-io.h" #include "bz-lozenge.h" #include "bz-template-callbacks.h" #include struct _BzAppSizeDialog { AdwBin parent_instance; BzEntryGroup *group; }; G_DEFINE_FINAL_TYPE (BzAppSizeDialog, bz_app_size_dialog, ADW_TYPE_BIN) enum { PROP_0, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_app_size_dialog_dispose (GObject *object) { BzAppSizeDialog *self = BZ_APP_SIZE_DIALOG (object); g_clear_object (&self->group); G_OBJECT_CLASS (bz_app_size_dialog_parent_class)->dispose (object); } static void bz_app_size_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAppSizeDialog *self = BZ_APP_SIZE_DIALOG (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, self->group); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_app_size_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAppSizeDialog *self = BZ_APP_SIZE_DIALOG (object); switch (prop_id) { case PROP_GROUP: g_clear_object (&self->group); self->group = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * get_runtime_size_title (gpointer object, gboolean runtime_installed) { return g_strdup (runtime_installed ? _ ("Installed Runtime Size") : _ ("Runtime Download Size")); } static char * format_size (gpointer object, guint64 value, gboolean use_fallback) { g_autofree char *size_str = NULL; char *space = NULL; if (value == 0 && use_fallback) return g_strdup (_("N/A")); size_str = g_format_size (value); space = g_strrstr (size_str, "\xC2\xA0"); if (space != NULL) { *space = '\0'; return g_strdup_printf ("%s %s", size_str, space + 2); } return g_strdup (size_str); } static gboolean is_app_id (gpointer object, const char *id) { return g_strcmp0 (id, g_application_get_application_id (g_application_get_default ())) == 0; } static void open_user_data_folder_cb (GtkWidget *widget, BzAppSizeDialog *self) { const char *id = NULL; g_autofree char *path = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GtkFileLauncher) launcher = NULL; GtkRoot *root = NULL; if (self->group == NULL) return; id = bz_entry_group_get_id (self->group); if (id == NULL) return; path = bz_dup_user_data_path (id); file = g_file_new_for_path (path); launcher = gtk_file_launcher_new (file); root = gtk_widget_get_root (widget); gtk_file_launcher_launch (launcher, GTK_WINDOW (root), NULL, NULL, NULL); } static void delete_cache_cb (GtkWidget *widget, BzAppSizeDialog *self) { if (self->group == NULL) return; dex_future_disown (bz_entry_group_reap_user_cache (self->group)); } static void bz_app_size_dialog_class_init (BzAppSizeDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_app_size_dialog_dispose; object_class->get_property = bz_app_size_dialog_get_property; object_class->set_property = bz_app_size_dialog_set_property; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LOZENGE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-app-size-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_callback (widget_class, is_app_id); gtk_widget_class_bind_template_callback (widget_class, format_size); gtk_widget_class_bind_template_callback (widget_class, get_runtime_size_title); gtk_widget_class_bind_template_callback (widget_class, open_user_data_folder_cb); gtk_widget_class_bind_template_callback (widget_class, delete_cache_cb); } static void bz_app_size_dialog_init (BzAppSizeDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwDialog * bz_app_size_dialog_new (BzEntryGroup *group) { BzAppSizeDialog *widget = NULL; AdwDialog *dialog = NULL; widget = g_object_new (BZ_TYPE_APP_SIZE_DIALOG, "group", group, NULL); dialog = adw_dialog_new (); adw_dialog_set_content_height (dialog, 500); adw_dialog_set_content_width (dialog, 600); adw_dialog_set_child (dialog, GTK_WIDGET (widget)); return dialog; } AdwNavigationPage * bz_app_size_page_new (BzEntryGroup *group) { BzAppSizeDialog *widget = NULL; AdwNavigationPage *page = NULL; widget = g_object_new (BZ_TYPE_APP_SIZE_DIALOG, "group", group, NULL); page = adw_navigation_page_new (GTK_WIDGET (widget), _ ("App Size")); adw_navigation_page_set_tag (page, "app-size"); return page; } bazaar-org-bazaar-b6e9a65/src/bz-app-size-dialog.h000066400000000000000000000021761522167256300217750ustar00rootroot00000000000000/* bz-app-size-dialog.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include G_BEGIN_DECLS #define BZ_TYPE_APP_SIZE_DIALOG (bz_app_size_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzAppSizeDialog, bz_app_size_dialog, BZ, APP_SIZE_DIALOG, AdwBin) AdwDialog * bz_app_size_dialog_new (BzEntryGroup *group); AdwNavigationPage * bz_app_size_page_new (BzEntryGroup *group); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-app-tile.blp000066400000000000000000000043521522167256300210470ustar00rootroot00000000000000using Gtk 4.0; template $BzAppTile: Button { preferred-width: 270; styles [ "card", "app-tile", ] child: Overlay { Box { margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; orientation: horizontal; spacing: 15; can-focus: false; Image { pixel-size: 64; paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; styles ["icon-dropshadow"] } Box { valign: center; hexpand: true; orientation: vertical; spacing: 4; Box { orientation: horizontal; spacing: 6; Label { css-name: "app-tile-title"; styles [ "heading", ] xalign: 0.0; ellipsize: end; label: bind template.group as <$BzEntryGroup>.title; } Image { css-name: "app-tile-verified-check"; styles [ "verified", ] visible: bind template.group as <$BzEntryGroup>.is-verified; icon-name: "verified-checkmark-symbolic"; pixel-size: 14; accessibility { label: _("Verified"); } } } Label { css-name: "app-tile-description"; xalign: 0.0; yalign: 0.0; wrap: true; ellipsize: end; vexpand: true; lines: bind $description_line_amount($is_zero(template.group as <$BzEntryGroup>.removable) as ) as ; single-line-mode: true; label: bind template.group as <$BzEntryGroup>.description; } Box { css-name: "app-tile-installed-pill"; halign: start; spacing: 4; visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable) as ) as ; styles ["small-pill", "installed-pill"] Image { icon-name: "app-installed-symbolic"; pixel-size: 12; } Label { // Translators: As in 'The app is installed'. label: _("Installed"); } } } } }; } bazaar-org-bazaar-b6e9a65/src/bz-app-tile.c000066400000000000000000000215001522167256300205060ustar00rootroot00000000000000/* bz-app-tile.c * * Copyright 2025 Adam Masciola * * Layout manager adapted from GNOME Softwares GsSummaryTileLayout * * Copyright (C) 2013 Matthias Clasen * Copyright (C) 2019 Richard Hughes * * 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 */ #include "config.h" #include "bz-app-tile.h" #define BZ_TYPE_APP_TILE_LAYOUT (bz_app_tile_layout_get_type ()) G_DECLARE_FINAL_TYPE (BzAppTileLayout, bz_app_tile_layout, BZ, APP_TILE_LAYOUT, GtkLayoutManager) struct _BzAppTileLayout { GtkLayoutManager parent_instance; gint preferred_width; }; G_DEFINE_FINAL_TYPE (BzAppTileLayout, bz_app_tile_layout, GTK_TYPE_LAYOUT_MANAGER) static void bz_app_tile_layout_measure (GtkLayoutManager *layout_manager, GtkWidget *widget, GtkOrientation orientation, gint for_size, gint *minimum, gint *natural, gint *minimum_baseline, gint *natural_baseline) { BzAppTileLayout *self = BZ_APP_TILE_LAYOUT (layout_manager); GtkWidget *child = NULL; gint min = 0; gint nat = 0; for (child = gtk_widget_get_first_child (widget); child != NULL; child = gtk_widget_get_next_sibling (child)) { gint child_min_baseline = -1; gint child_nat_baseline = -1; gint child_min = 0; gint child_nat = 0; if (!gtk_widget_should_layout (child)) continue; gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, &child_min_baseline, &child_nat_baseline); min = MAX (min, child_min); nat = MAX (nat, child_nat); if (child_min_baseline > -1) *minimum_baseline = MAX (*minimum_baseline, child_min_baseline); if (child_nat_baseline > -1) *natural_baseline = MAX (*natural_baseline, child_nat_baseline); } *minimum = min; *natural = nat; if (self->preferred_width > 0 && orientation == GTK_ORIENTATION_HORIZONTAL) *natural = MAX (*minimum, self->preferred_width); } static void bz_app_tile_layout_allocate (GtkLayoutManager *layout_manager, GtkWidget *widget, gint width, gint height, gint baseline) { GtkWidget *child = NULL; for (child = gtk_widget_get_first_child (widget); child != NULL; child = gtk_widget_get_next_sibling (child)) { if (child && gtk_widget_should_layout (child)) gtk_widget_allocate (child, width, height, baseline, NULL); } } static void bz_app_tile_layout_class_init (BzAppTileLayoutClass *klass) { GtkLayoutManagerClass *layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass); layout_manager_class->measure = bz_app_tile_layout_measure; layout_manager_class->allocate = bz_app_tile_layout_allocate; } static void bz_app_tile_layout_init (BzAppTileLayout *self) { } struct _BzAppTile { GtkButton parent_instance; BzEntryGroup *group; gint preferred_width; }; G_DEFINE_FINAL_TYPE (BzAppTile, bz_app_tile, GTK_TYPE_BUTTON); enum { PROP_0, PROP_GROUP, PROP_PREFERRED_WIDTH, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_app_tile_dispose (GObject *object) { BzAppTile *self = BZ_APP_TILE (object); g_clear_object (&self->group); G_OBJECT_CLASS (bz_app_tile_parent_class)->dispose (object); } static void bz_app_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAppTile *self = BZ_APP_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_app_tile_get_group (self)); break; case PROP_PREFERRED_WIDTH: g_value_set_int (value, self->preferred_width); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_app_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAppTile *self = BZ_APP_TILE (object); switch (prop_id) { case PROP_GROUP: bz_app_tile_set_group (self, g_value_get_object (value)); break; case PROP_PREFERRED_WIDTH: bz_app_tile_set_preferred_width (self, g_value_get_int (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean description_line_amount (gpointer object, bool value) { return value ? 2 : 1; } static void bz_app_tile_class_init (BzAppTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_app_tile_set_property; object_class->get_property = bz_app_tile_get_property; object_class->dispose = bz_app_tile_dispose; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PREFERRED_WIDTH] = g_param_spec_int ( "preferred-width", NULL, NULL, -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-app-tile.ui"); gtk_widget_class_set_layout_manager_type (widget_class, BZ_TYPE_APP_TILE_LAYOUT); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, description_line_amount); } static void bz_app_tile_init (BzAppTile *self) { self->preferred_width = -1; gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_app_tile_new (void) { return g_object_new (BZ_TYPE_APP_TILE, NULL); } BzEntryGroup * bz_app_tile_get_group (BzAppTile *self) { g_return_val_if_fail (BZ_IS_APP_TILE (self), NULL); return self->group; } void bz_app_tile_set_group (BzAppTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_APP_TILE (self)); g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); if (group != NULL) { gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "window.show-group"); gtk_actionable_set_action_target (GTK_ACTIONABLE (self), "s", bz_entry_group_get_id (group)); } else gtk_actionable_set_action_name (GTK_ACTIONABLE (self), NULL); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } gint bz_app_tile_get_preferred_width (BzAppTile *self) { g_return_val_if_fail (BZ_IS_APP_TILE (self), -1); return self->preferred_width; } void bz_app_tile_set_preferred_width (BzAppTile *self, gint preferred_width) { GtkLayoutManager *layout_manager; g_return_if_fail (BZ_IS_APP_TILE (self)); if (self->preferred_width == preferred_width) return; self->preferred_width = preferred_width; layout_manager = gtk_widget_get_layout_manager (GTK_WIDGET (self)); BZ_APP_TILE_LAYOUT (layout_manager)->preferred_width = preferred_width; gtk_layout_manager_layout_changed (layout_manager); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PREFERRED_WIDTH]); } /* End of bz-app-tile.c */ bazaar-org-bazaar-b6e9a65/src/bz-app-tile.h000066400000000000000000000025211522167256300205150ustar00rootroot00000000000000/* bz-app-tile.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry-group.h" G_BEGIN_DECLS #define BZ_TYPE_APP_TILE (bz_app_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzAppTile, bz_app_tile, BZ, APP_TILE, GtkButton) GtkWidget * bz_app_tile_new (void); BzEntryGroup * bz_app_tile_get_group (BzAppTile *self); void bz_app_tile_set_group (BzAppTile *self, BzEntryGroup *group); gint bz_app_tile_get_preferred_width (BzAppTile *self); void bz_app_tile_set_preferred_width (BzAppTile *self, gint preferred_width); G_END_DECLS /* End of bz-app-tile.h */ bazaar-org-bazaar-b6e9a65/src/bz-application-map-factory.c000066400000000000000000000076621522167256300235330ustar00rootroot00000000000000/* bz-application-map-factory.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-application-map-factory.h" #include "bz-util.h" struct _BzApplicationMapFactory { GObject parent_instance; GtkMapListModelMapFunc func; gpointer user_data; GDestroyNotify ref_user_data; GDestroyNotify unref_user_data; GtkFilter *filter; }; G_DEFINE_FINAL_TYPE (BzApplicationMapFactory, bz_application_map_factory, G_TYPE_OBJECT); static void bz_application_map_factory_dispose (GObject *object) { BzApplicationMapFactory *self = BZ_APPLICATION_MAP_FACTORY (object); g_clear_object (&self->filter); if (self->unref_user_data != NULL) g_clear_pointer (&self->user_data, self->unref_user_data); G_OBJECT_CLASS (bz_application_map_factory_parent_class)->dispose (object); } static void bz_application_map_factory_class_init (BzApplicationMapFactoryClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_application_map_factory_dispose; } static void bz_application_map_factory_init (BzApplicationMapFactory *self) { } BzApplicationMapFactory * bz_application_map_factory_new (GtkMapListModelMapFunc func, gpointer user_data, GDestroyNotify ref_user_data, GDestroyNotify unref_user_data, GtkFilter *filter) { BzApplicationMapFactory *self = NULL; g_return_val_if_fail (func != NULL, NULL); g_return_val_if_fail (filter == NULL || GTK_IS_FILTER (filter), NULL); self = g_object_new (BZ_TYPE_APPLICATION_MAP_FACTORY, NULL); self->func = func; self->user_data = user_data; self->ref_user_data = ref_user_data; self->unref_user_data = unref_user_data; self->filter = bz_maybe_ref (filter, g_object_ref_sink); return self; } GListModel * bz_application_map_factory_generate (BzApplicationMapFactory *self, GListModel *model) { g_autoptr (GListModel) backing = NULL; GtkMapListModel *map_model = NULL; g_return_val_if_fail (BZ_IS_APPLICATION_MAP_FACTORY (self), NULL); g_return_val_if_fail (G_IS_LIST_MODEL (model), NULL); if (self->filter != NULL) { GtkFilterListModel *filter_model = NULL; filter_model = gtk_filter_list_model_new ( g_object_ref (model), g_object_ref (self->filter)); backing = G_LIST_MODEL (filter_model); } else backing = g_object_ref (model); if (self->ref_user_data != NULL && self->unref_user_data != NULL) self->ref_user_data (self->user_data); map_model = gtk_map_list_model_new ( g_steal_pointer (&backing), self->func, self->user_data, self->ref_user_data != NULL ? self->unref_user_data : NULL); return G_LIST_MODEL (map_model); } gpointer bz_application_map_factory_convert_one (BzApplicationMapFactory *self, gpointer item) { g_return_val_if_fail (BZ_IS_APPLICATION_MAP_FACTORY (self), NULL); g_return_val_if_fail (item != NULL, NULL); return self->func (item, self->user_data); } /* End of bz-application-map-factory.c */ bazaar-org-bazaar-b6e9a65/src/bz-application-map-factory.h000066400000000000000000000033101522167256300235220ustar00rootroot00000000000000/* bz-application-map-factory.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_APPLICATION_MAP_FACTORY (bz_application_map_factory_get_type ()) G_DECLARE_FINAL_TYPE (BzApplicationMapFactory, bz_application_map_factory, BZ, APPLICATION_MAP_FACTORY, GObject) BzApplicationMapFactory * bz_application_map_factory_new (GtkMapListModelMapFunc func, gpointer user_data, GDestroyNotify ref_user_data, GDestroyNotify unref_user_data, GtkFilter *filter); GListModel * bz_application_map_factory_generate (BzApplicationMapFactory *self, GListModel *model); gpointer bz_application_map_factory_convert_one (BzApplicationMapFactory *self, gpointer item); G_END_DECLS /* End of bz-application-map-factory.h */ bazaar-org-bazaar-b6e9a65/src/bz-application.c000066400000000000000000004346721522167256300213200ustar00rootroot00000000000000/* bz-application.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::CORE" #define BAZAAR_MODULE "core" #define MAX_IDS_PER_BLOCKLIST 2048 #define CACHE_ENUM_BATCH_SIZE 64 #include "config.h" #include #include #include "bz-application-map-factory.h" #include "bz-application.h" #include "bz-appstream-parser.h" #include "bz-auth-state.h" #include "bz-backend-notification.h" #include "bz-bundle-install-dialog.h" #include "bz-content-provider.h" #include "bz-donations-dialog.h" #include "bz-download-worker.h" #include "bz-entry-cache-manager.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-error.h" #include "bz-favorites-page.h" #include "bz-flathub-state.h" #include "bz-flatpak-bundle-result.h" #include "bz-flatpak-entry.h" #include "bz-flatpak-instance.h" #include "bz-gnome-shell-search-provider.h" #include "bz-hash-table-object.h" #include "bz-inspector.h" #include "bz-internal-config.h" #include "bz-io.h" #include "bz-login-page.h" #include "bz-malcontent-service.h" #include "bz-metainfo-preview.h" #include "bz-newline-parser.h" #include "bz-parser.h" #include "bz-preferences-dialog.h" #include "bz-result.h" #include "bz-root-blocklist.h" #include "bz-root-curated-config.h" #include "bz-serializable.h" #include "bz-state-info.h" #include "bz-transaction-manager.h" #include "bz-util.h" #include "bz-window.h" #include "bz-yaml-parser.h" #include "progress-bar-designs/common.h" struct _BzApplication { AdwApplication parent_instance; BzApplicationMapFactory *application_factory; BzApplicationMapFactory *entry_factory; BzContentProvider *blocklists_provider; BzContentProvider *curated_provider; BzContentProvider *txt_blocklists_provider; BzEntryCacheManager *cache; BzFlathubState *flathub; BzFlathubState *tmp_flathub; BzFlatpakInstance *flatpak; BzGnomeShellSearchProvider *gs_search; BzInternalConfig *internal_config; BzMainConfig *config; BzMalcontentService *malcontent; BzNewlineParser *txt_blocklist_parser; BzSearchEngine *search_engine; BzStateInfo *state; BzTransactionManager *transactions; BzYamlParser *blocklist_parser; BzYamlParser *curated_parser; DexChannel *flatpak_notifs; DexFuture *notif_watch; DexFuture *sync; DexPromise *first_window_opened; DexPromise *ready_to_open_files; GHashTable *eol_runtimes; GHashTable *ids_to_groups; GHashTable *ignore_eol_set; GHashTable *installed_set; GHashTable *sys_name_to_addons; GHashTable *sys_ref_to_addon_group_ids; GHashTable *usr_name_to_addons; GHashTable *usr_ref_to_addon_group_ids; GListStore *groups; GListStore *installed_apps; GListStore *search_biases_backing; GNetworkMonitor *network; GPtrArray *blocklist_regexes; GPtrArray *txt_blocked_id_sets; GSettings *settings; GTimer *init_timer; GWeakRef main_window; GtkCustomFilter *appid_filter; GtkCustomFilter *group_filter; GtkFilterListModel *group_filter_model; GtkFlattenListModel *search_biases; GtkMapListModel *blocklists_to_files; GtkMapListModel *curated_configs_to_files; GtkMapListModel *txt_blocklists_to_files; GtkStringList *blocklists; GtkStringList *curated_configs; GtkStringList *txt_blocklists; gboolean flathub_remote_initialized; gboolean running; gboolean had_cache_on_init; guint periodic_timeout_source; int n_entries_incoming; int n_remotes_syncing; }; G_DEFINE_FINAL_TYPE (BzApplication, bz_application, ADW_TYPE_APPLICATION) BZ_DEFINE_DATA ( blocklist_regex, BlocklistRegex, { int priority; GRegex *block; GRegex *allow; }, BZ_RELEASE_DATA (block, g_regex_unref); BZ_RELEASE_DATA (allow, g_regex_unref)) BZ_DEFINE_DATA ( respond_to_flatpak, RespondToFlatpak, { GWeakRef *self; BzBackendNotification *notif; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (notif, g_object_unref)) BZ_DEFINE_DATA ( cache_write_back, CacheWriteBack, { GWeakRef *self; GPtrArray *notify_groups; gboolean update_filters; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (notify_groups, g_ptr_array_unref)) BZ_DEFINE_DATA ( open_flatpakref, OpenFlatpakref, { GWeakRef *self; GFile *file; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (file, g_object_unref)) BZ_DEFINE_DATA ( open_appstream, OpenAppstream, { GWeakRef *self; char *id; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (id, g_free)) BZ_DEFINE_DATA ( enumerate_disk_io, EnumerateDiskIo, { BzEntryCacheManager *cache; }, BZ_RELEASE_DATA (cache, g_object_unref)) static DexFuture * init_fiber (GWeakRef *wr); static DexFuture * enumerate_disk_groups_fiber (GWeakRef *wr); static DexFuture * enumerate_disk_io_fiber (EnumerateDiskIoData *data); static DexFuture * enumerate_disk_entries_fiber (GWeakRef *wr); static DexFuture * check_for_updates_fiber (GWeakRef *wr); static DexFuture * cache_flathub_fiber (GWeakRef *wr); static DexFuture * cache_groups_fiber (GWeakRef *wr); static DexFuture * respond_to_flatpak_fiber (RespondToFlatpakData *data); static DexFuture * open_appstream_fiber (OpenAppstreamData *data); static DexFuture * open_flatpakref_fiber (OpenFlatpakrefData *data); static DexFuture * backend_sync_finally (DexFuture *future, GWeakRef *wr); static DexFuture * backend_sync_save_groups_finally (DexFuture *future, GWeakRef *wr); static DexFuture * init_fiber_finally (DexFuture *future, GWeakRef *wr); static DexFuture * init_sync_finally (DexFuture *future, GWeakRef *wr); static DexFuture * flathub_update_finally (DexFuture *future, GWeakRef *wr); static DexFuture * cache_write_back_finally (DexFuture *future, CacheWriteBackData *data); static DexFuture * sync_finally (DexFuture *future, GWeakRef *wr); static DexFuture * watch_backend_notifs_then_loop_cb (DexFuture *future, GWeakRef *wr); static BzEntryGroup * ensure_group_and_add (BzApplication *self, const char *id, BzEntry *entry, BzEntry *eol_runtime, gboolean ignore_eol, gboolean installed); static void fiber_replace_entry (BzApplication *self, BzEntry *entry); static void fiber_check_for_updates (BzApplication *self); static GFile * fiber_dup_cache_file (const char *name, char **path_out, GError **error); static gboolean periodic_timeout_cb (BzApplication *self); static gboolean scheduled_timeout_cb (GWeakRef *wr); static void network_status_changed (BzApplication *self, GParamSpec *pspec, GNetworkMonitor *network); static void disable_blocklists_changed (BzApplication *self, GParamSpec *pspec, BzStateInfo *state); static void show_hide_app_setting_changed (BzApplication *self, const char *key, GSettings *settings); static gboolean window_close_request (BzApplication *self, GtkWidget *window); static void blocklists_changed (BzApplication *self, guint position, guint removed, guint added, GListModel *model); static void txt_blocklists_changed (BzApplication *self, guint position, guint removed, guint added, GListModel *model); static void init_service_struct (BzApplication *self, GtkStringList *blocklists, GtkStringList *txt_blocklists, GtkStringList *curated_configs); static GtkWindow * get_or_create_window (BzApplication *self); static GtkWindow * new_window (BzApplication *self); static void open_appstream_take (BzApplication *self, char *appstream); static void open_flatpakref_take (BzApplication *self, GFile *file); static void command_line_open_location (BzApplication *self, GApplicationCommandLine *cmdline, const char *path); static void open_generic_id (BzApplication *self, const char *generic_id); static DexFuture * preview_metainfo_then (DexFuture *future, GWeakRef *wr); static gpointer map_strings_to_files (GtkStringObject *string, gpointer data); static gpointer map_generic_ids_to_groups (GtkStringObject *string, BzApplication *self); static gpointer map_ids_to_entries (GtkStringObject *string, BzApplication *self); static gboolean filter_application_ids (GtkStringObject *string, BzApplication *self); static gboolean filter_entry_groups (BzEntryGroup *group, BzApplication *self); static gint cmp_group (BzEntryGroup *a, BzEntryGroup *b, gpointer user_data); static gint cmp_entry (BzEntry *a, BzEntry *b, gpointer user_data); static gboolean validate_group_for_ui (BzApplication *self, BzEntryGroup *group); static DexFuture * make_sync_future (BzApplication *self); static void finish_with_background_task_label (BzApplication *self); static void state_info_set_icon_themes (BzStateInfo *state); static void bz_application_dispose (GObject *object) { BzApplication *self = BZ_APPLICATION (object); dex_clear (&self->flatpak_notifs); dex_clear (&self->notif_watch); dex_clear (&self->ready_to_open_files); dex_clear (&self->first_window_opened); dex_clear (&self->sync); g_clear_handle_id (&self->periodic_timeout_source, g_source_remove); g_clear_object (&self->appid_filter); g_clear_object (&self->application_factory); g_clear_object (&self->blocklist_parser); g_clear_object (&self->blocklists); g_clear_object (&self->blocklists_provider); g_clear_object (&self->blocklists_to_files); g_clear_object (&self->cache); g_clear_object (&self->curated_configs); g_clear_object (&self->curated_configs_to_files); g_clear_object (&self->curated_parser); g_clear_object (&self->curated_provider); g_clear_object (&self->entry_factory); g_clear_object (&self->flathub); g_clear_object (&self->flatpak); g_clear_object (&self->group_filter); g_clear_object (&self->group_filter_model); g_clear_object (&self->groups); g_clear_object (&self->gs_search); g_clear_object (&self->installed_apps); g_clear_object (&self->malcontent); g_clear_object (&self->internal_config); g_clear_object (&self->network); g_clear_object (&self->search_biases); g_clear_object (&self->search_biases_backing); g_clear_object (&self->search_engine); g_clear_object (&self->settings); g_clear_object (&self->state); g_clear_object (&self->tmp_flathub); g_clear_object (&self->transactions); g_clear_object (&self->txt_blocklist_parser); g_clear_object (&self->txt_blocklists); g_clear_object (&self->txt_blocklists_provider); g_clear_object (&self->txt_blocklists_to_files); g_clear_pointer (&self->blocklist_regexes, g_ptr_array_unref); g_clear_pointer (&self->eol_runtimes, g_hash_table_unref); g_clear_pointer (&self->ids_to_groups, g_hash_table_unref); g_clear_pointer (&self->ignore_eol_set, g_hash_table_unref); g_clear_pointer (&self->init_timer, g_timer_destroy); g_clear_pointer (&self->installed_set, g_hash_table_unref); g_clear_pointer (&self->sys_name_to_addons, g_hash_table_unref); g_clear_pointer (&self->txt_blocked_id_sets, g_ptr_array_unref); g_clear_pointer (&self->usr_name_to_addons, g_hash_table_unref); g_clear_pointer (&self->sys_ref_to_addon_group_ids, g_hash_table_unref); g_clear_pointer (&self->usr_ref_to_addon_group_ids, g_hash_table_unref); g_weak_ref_clear (&self->main_window); G_OBJECT_CLASS (bz_application_parent_class)->dispose (object); } static void bz_application_activate (GApplication *app) { BzApplication *self = BZ_APPLICATION (app); new_window (self); } static int bz_application_command_line (GApplication *app, GApplicationCommandLine *cmdline) { BzApplication *self = BZ_APPLICATION (app); g_autoptr (GError) local_error = NULL; gint argc = 0; g_auto (GStrv) argv = NULL; gboolean help = FALSE; gboolean no_window = FALSE; g_auto (GStrv) blocklists_strv = NULL; g_auto (GStrv) content_configs_strv = NULL; g_auto (GStrv) locations = NULL; gboolean preview_metainfo = FALSE; GOptionEntry main_entries[] = { { "help", 0, 0, G_OPTION_ARG_NONE, &help, "Print help" }, { "no-window", 0, 0, G_OPTION_ARG_NONE, &no_window, "Ensure the service is running without creating a new window" }, { "extra-blocklist", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &blocklists_strv, "Add an extra blocklist to read from" }, { "extra-curated-config", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &content_configs_strv, "Add an extra yaml file with which to configure the app browser" }, /* Here for backwards compat */ { "extra-content-config", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &content_configs_strv, "Add an extra yaml file with which to configure the app browser (backwards compat)" }, { "preview-metainfo", 0, 0, G_OPTION_ARG_NONE, &preview_metainfo, "Preview a metainfo file by selecting it via file dialog" }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &locations, "flatpakref file to open" }, { NULL } }; argv = g_application_command_line_get_arguments (cmdline, &argc); g_debug ("Handling gapplication command line; argc=%d, argv= \\", argc); for (guint i = 0; i < argc; i++) { g_debug (" [%d] %s", i, argv[i]); } if (argv != NULL && argc > 0) { g_autofree GStrv argv_shallow = NULL; g_autoptr (GOptionContext) context = NULL; argv_shallow = g_memdup2 (argv, sizeof (*argv) * argc); context = g_option_context_new ("- an app center for GNOME"); g_option_context_set_help_enabled (context, FALSE); g_option_context_add_main_entries (context, main_entries, NULL); if (!g_option_context_parse (context, &argc, &argv_shallow, &local_error)) { g_application_command_line_printerr (cmdline, "%s\n", local_error->message); return EXIT_FAILURE; } if (help) { g_autofree char *help_text = NULL; if (self->running) g_application_command_line_printerr (cmdline, "The Bazaar service is running.\n\n"); else g_application_command_line_printerr (cmdline, "The Bazaar service is not running.\n\n"); help_text = g_option_context_get_help (context, TRUE, NULL); g_application_command_line_printerr (cmdline, "%s\n", help_text); return EXIT_SUCCESS; } } if (!self->running) { g_autoptr (GtkStringList) blocklists = NULL; g_autoptr (GtkStringList) txt_blocklists = NULL; g_autoptr (GtkStringList) content_configs = NULL; g_autoptr (DexFuture) init = NULL; g_debug ("Starting daemon!"); g_application_hold (G_APPLICATION (self)); self->running = TRUE; blocklists = gtk_string_list_new (NULL); txt_blocklists = gtk_string_list_new (NULL); content_configs = gtk_string_list_new (NULL); init_service_struct (self, blocklists, txt_blocklists, content_configs); #ifdef HARDCODED_BLOCKLIST g_debug ("Bazaar was configured with a hardcoded txt blocklist at %s, adding that now...", HARDCODED_BLOCKLIST); gtk_string_list_append (txt_blocklists, HARDCODED_BLOCKLIST); #endif if (blocklists_strv != NULL) gtk_string_list_splice ( txt_blocklists, g_list_model_get_n_items (G_LIST_MODEL (txt_blocklists)), 0, (const char *const *) blocklists_strv); #ifdef HARDCODED_CONTENT_CONFIG g_debug ("Bazaar was configured with a hardcoded curated content config at %s, adding that now...", HARDCODED_CONTENT_CONFIG); gtk_string_list_append (content_configs, HARDCODED_CONTENT_CONFIG); #endif if (content_configs_strv != NULL) gtk_string_list_splice ( content_configs, g_list_model_get_n_items (G_LIST_MODEL (content_configs)), 0, (const char *const *) content_configs_strv); g_timer_start (self->init_timer); init = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) init_fiber, bz_track_weak (self), bz_weak_release); init = dex_future_finally ( init, (DexFutureCallback) init_fiber_finally, bz_track_weak (self), bz_weak_release); dex_future_disown (g_steal_pointer (&init)); } if (!no_window && !preview_metainfo) { if (locations == NULL || *locations == NULL) new_window (self); else get_or_create_window (self); } if (locations != NULL && *locations != NULL) command_line_open_location (self, cmdline, locations[0]); if (preview_metainfo) { g_autoptr (DexFuture) future = NULL; future = bz_metainfo_preview_pick_files (); future = dex_future_then ( g_steal_pointer (&future), (DexFutureCallback) preview_metainfo_then, bz_track_weak (self), bz_weak_release); dex_future_disown (g_steal_pointer (&future)); } return EXIT_SUCCESS; } static gboolean bz_application_local_command_line (GApplication *application, gchar ***arguments, int *exit_status) { return FALSE; } static gboolean bz_application_dbus_register (GApplication *application, GDBusConnection *connection, const gchar *object_path, GError **error) { BzApplication *self = BZ_APPLICATION (application); return bz_gnome_shell_search_provider_set_connection (self->gs_search, connection, error); } static void bz_application_dbus_unregister (GApplication *application, GDBusConnection *connection, const gchar *object_path) { BzApplication *self = BZ_APPLICATION (application); bz_gnome_shell_search_provider_set_connection (self->gs_search, NULL, NULL); } static void bz_application_class_init (BzApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GApplicationClass *app_class = G_APPLICATION_CLASS (klass); object_class->dispose = bz_application_dispose; app_class->activate = bz_application_activate; app_class->command_line = bz_application_command_line; app_class->local_command_line = bz_application_local_command_line; app_class->dbus_register = bz_application_dbus_register; app_class->dbus_unregister = bz_application_dbus_unregister; g_type_ensure (BZ_TYPE_RESULT); } static void bz_application_toggle_debug_mode_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; gboolean debug_mode = FALSE; debug_mode = bz_state_info_get_debug_mode (self->state); bz_state_info_set_debug_mode (self->state, !debug_mode); } static void bz_application_bazaar_inspector_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; BzInspector *inspector = NULL; g_assert (BZ_IS_APPLICATION (self)); inspector = bz_inspector_new (); bz_inspector_set_state (inspector, self->state); gtk_application_add_window (GTK_APPLICATION (self), GTK_WINDOW (inspector)); gtk_window_present (GTK_WINDOW (inspector)); } static void bz_application_donate_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; AdwDialog *dialog = NULL; g_assert (BZ_IS_APPLICATION (self)); window = get_or_create_window (self); dialog = bz_donations_dialog_new (); adw_dialog_present (dialog, GTK_WIDGET (window)); bz_state_info_set_donation_prompt_dismissed (self->state, TRUE); } static void bz_application_search_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; const char *initial_text = NULL; g_assert (BZ_IS_APPLICATION (self)); window = get_or_create_window (self); if (parameter != NULL) initial_text = g_variant_get_string (parameter, NULL); bz_window_search (BZ_WINDOW (window), initial_text); } static void bz_application_show_app_id_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; const char *app_id = NULL; g_assert (BZ_IS_APPLICATION (self)); window = get_or_create_window (self); if (parameter != NULL) { app_id = g_variant_get_string (parameter, NULL); bz_window_show_app_id (BZ_WINDOW (window), app_id); } } static void bz_application_sync_remotes_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; g_assert (BZ_IS_APPLICATION (self)); if (self->sync != NULL && dex_future_is_pending (self->sync)) return; dex_clear (&self->sync); self->sync = make_sync_future (self); } static void bz_application_about_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; AdwDialog *dialog = NULL; const char *developers[] = { "Adam Masciola ", "Alexander Vanhee", NULL }; const char *special_thanks[] = { "arewelibadwaitayet https://arewelibadwaitayet.com/", /* This array MUST be NULL terminated */ NULL }; g_assert (BZ_IS_APPLICATION (self)); window = gtk_application_get_active_window (GTK_APPLICATION (self)); dialog = adw_about_dialog_new (); g_object_set ( dialog, "application-name", "Bazaar", "application-icon", "io.github.kolunmi.Bazaar", "developer-name", _ ("The Bazaar Contributors"), "developers", developers, // Translators: Put one translator per line, in the form NAME , YEAR1, YEAR2 "translator-credits", _ ("translator-credits"), "version", PACKAGE_VCS_VERSION, "copyright", "Š 2025-2026 The Bazaar Contributors", "license-type", GTK_LICENSE_GPL_3_0, "website", "https://usebazaar.org", "issue-url", "https://github.com/bazaar-org/bazaar/issues", NULL); adw_about_dialog_add_acknowledgement_section ( ADW_ABOUT_DIALOG (dialog), _ ("Special Thanks"), special_thanks); adw_dialog_present (dialog, GTK_WIDGET (window)); } static void bz_application_preferences_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; AdwDialog *preferences = NULL; g_assert (BZ_IS_APPLICATION (self)); window = gtk_application_get_active_window (GTK_APPLICATION (self)); preferences = bz_preferences_dialog_new (self->state); adw_dialog_present (preferences, GTK_WIDGET (window)); } static void bz_application_flathub_login_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; BzAuthState *auth_state = NULL; AdwNavigationPage *login_page = NULL; g_assert (BZ_IS_APPLICATION (self)); window = gtk_application_get_active_window (GTK_APPLICATION (self)); auth_state = bz_state_info_get_auth_state (self->state); login_page = bz_login_page_new (auth_state); bz_window_push_page (BZ_WINDOW (window), login_page); } static void bz_application_flathub_logout_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = BZ_APPLICATION (user_data); GtkWindow *window = gtk_application_get_active_window (GTK_APPLICATION (self)); BzAuthState *auth_state = bz_state_info_get_auth_state (self->state); g_assert (BZ_IS_WINDOW (window)); bz_auth_state_clear (auth_state); bz_window_add_toast ( BZ_WINDOW (window), adw_toast_new (_ ("Logged Out Successfully!"))); } static void bz_application_flathub_favorites_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; GtkWindow *window = NULL; AdwNavigationPage *favorites_page = NULL; g_assert (BZ_IS_APPLICATION (self)); window = get_or_create_window (self); favorites_page = ADW_NAVIGATION_PAGE (bz_favorites_page_new (self->state)); bz_window_push_page (BZ_WINDOW (window), favorites_page); } static void bz_application_quit_action (GSimpleAction *action, GVariant *parameter, gpointer user_data) { BzApplication *self = user_data; g_assert (BZ_IS_APPLICATION (self)); g_application_quit (G_APPLICATION (self)); } static const GActionEntry app_actions[] = { { "flathub-login", bz_application_flathub_login_action, NULL }, { "flathub-logout", bz_application_flathub_logout_action, NULL }, { "flathub-favorites", bz_application_flathub_favorites_action, NULL }, { "quit", bz_application_quit_action, NULL }, { "preferences", bz_application_preferences_action, NULL }, { "about", bz_application_about_action, NULL }, { "sync-remotes", bz_application_sync_remotes_action, NULL }, { "search", bz_application_search_action, "s" }, { "show-app-id", bz_application_show_app_id_action, "s" }, { "donate", bz_application_donate_action, NULL }, { "bazaar-inspector", bz_application_bazaar_inspector_action, NULL }, { "toggle-debug-mode", bz_application_toggle_debug_mode_action, NULL }, }; static void bz_application_init (BzApplication *self) { self->running = FALSE; g_weak_ref_init (&self->main_window, NULL); self->gs_search = bz_gnome_shell_search_provider_new (); g_action_map_add_action_entries ( G_ACTION_MAP (self), app_actions, G_N_ELEMENTS (app_actions), self); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.quit", (const char *[]){ "q", NULL }); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.preferences", (const char *[]){ "comma", NULL }); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.sync-remotes", (const char *[]){ "r", NULL }); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.search('')", (const char *[]){ "f", NULL }); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.bazaar-inspector", (const char *[]){ "i", NULL }); gtk_application_set_accels_for_action ( GTK_APPLICATION (self), "app.toggle-debug-mode", (const char *[]){ "d", NULL }); } BzStateInfo * bz_state_info_get_default (void) { GApplication *app = NULL; BzApplication *self = NULL; app = g_application_get_default (); if G_UNLIKELY (app == NULL) { static BzStateInfo *fallback_state = NULL; if (g_once_init_enter_pointer (&fallback_state)) { g_autoptr (BzStateInfo) tmp = NULL; tmp = bz_state_info_new (); // state_info_set_icon_themes (tmp); g_once_init_leave_pointer ( &fallback_state, g_steal_pointer (&tmp)); } return fallback_state; } self = (BzApplication *) app; g_assert (BZ_IS_APPLICATION (self)); return self->state; } static DexFuture * init_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; g_autofree char *root_cache_dir = NULL; g_autoptr (GFile) root_cache_dir_file = NULL; g_autoptr (GListModel) repos = NULL; gboolean has_flathub = FALSE; gboolean cache_has_flathub = FALSE; gboolean result = FALSE; g_autoptr (BzAuthState) auth_state = NULL; g_autofree char *flathub_cache = NULL; g_autoptr (GFile) flathub_cache_file = NULL; g_autofree char *cache_version_path = NULL; g_autoptr (GFile) cache_version_file = NULL; bz_weak_get_or_return_reject (self, wr); /* Here until Ubuntu fixes its apparmor crap. */ #ifdef SANDBOXED_LIBFLATPAK if (g_settings_get_boolean (self->settings, "check-for-ubuntu")) { g_autoptr (GSubprocessLauncher) os_check_launcher = NULL; g_autoptr (GSubprocess) os_check = NULL; g_autoptr (GError) os_check_error = NULL; gboolean os_check_result = FALSE; GInputStream *os_check_stdout_pipe = NULL; g_autoptr (GBytes) os_out = NULL; os_check_launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE); os_check = g_subprocess_launcher_spawn (os_check_launcher, &os_check_error, "flatpak-spawn", "--host", "cat", "/usr/lib/os-release", NULL); if (os_check != NULL) { os_check_result = dex_await (dex_subprocess_wait_check (os_check), &os_check_error); if (os_check_result) { os_check_stdout_pipe = g_subprocess_get_stdout_pipe (os_check); os_out = g_input_stream_read_bytes (os_check_stdout_pipe, 4096, NULL, &os_check_error); } else g_warning ("Ubuntu check subprocess failed: %s", os_check_error->message); } else g_warning ("Failed to spawn ubuntu check subprocess: %s", os_check_error->message); if (os_out != NULL && strstr (g_bytes_get_data (os_out, NULL), "ID=ubuntu") != NULL) { GtkWindow *window = NULL; AdwDialog *alert = NULL; g_autofree char *response = NULL; dex_await (dex_ref (DEX_FUTURE (self->first_window_opened)), NULL); window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (window == NULL) window = new_window (self); alert = adw_alert_dialog_new (NULL, NULL); adw_alert_dialog_format_heading (ADW_ALERT_DIALOG (alert), _ ("Ubuntu Troubles!")); adw_alert_dialog_format_body_markup ( ADW_ALERT_DIALOG (alert), _ ("The more recent versions of Ubuntu have messed up default security rules, " "making it impossible to install apps from the Flatpak version " "of Bazaar, please just use the normal package for now by using\n\n" "sudo apt install bazaar\n\n" "You can then remove this Flatpak version with\n\n" "flatpak uninstall io.github.kolunmi.Bazaar")); adw_alert_dialog_add_response (ADW_ALERT_DIALOG (alert), "ok", _ ("Continue Anyway")); adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (alert), "ok"); adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (alert), "ok"); adw_dialog_present (alert, GTK_WIDGET (window)); response = dex_await_string (bz_make_alert_dialog_future (ADW_ALERT_DIALOG (alert)), NULL); g_settings_set_boolean (self->settings, "check-for-ubuntu", FALSE); } else g_settings_set_boolean (self->settings, "check-for-ubuntu", FALSE); } #endif bz_state_info_set_online (self->state, TRUE); bz_state_info_set_busy (self->state, TRUE); bz_state_info_set_background_task_label (self->state, _ ("Performing setup…")); root_cache_dir = bz_dup_root_cache_dir (); root_cache_dir_file = g_file_new_for_path (root_cache_dir); cache_version_path = g_build_filename (root_cache_dir, "cache-version", NULL); cache_version_file = g_file_new_for_path (cache_version_path); if (dex_await (dex_file_query_exists (root_cache_dir_file), NULL)) { gboolean wipe_cache = TRUE; if (dex_await (dex_file_query_exists (cache_version_file), NULL)) { g_autoptr (GBytes) bytes = NULL; bytes = dex_await_boxed (dex_file_load_contents_bytes (cache_version_file), NULL); if (bytes != NULL) { g_autoptr (GVariant) variant = NULL; variant = g_variant_new_from_bytes (G_VARIANT_TYPE_STRING, bytes, FALSE); if (variant != NULL) { const char *version = NULL; version = g_variant_get_string (variant, NULL); wipe_cache = g_strcmp0 (version, PACKAGE_VERSION) != 0; } } } if (wipe_cache) { bz_state_info_set_donation_prompt_dismissed (self->state, FALSE); g_info ("Version incompatibility detected: clearing cache"); dex_await (bz_reap_file_dex (root_cache_dir_file), NULL); } } else bz_state_info_set_donation_prompt_dismissed (self->state, TRUE); { g_autoptr (GError) mkdir_error = NULL; dex_await (dex_file_make_directory_with_parents (root_cache_dir_file), &mkdir_error); if (mkdir_error == NULL || mkdir_error->code == G_IO_ERROR_EXISTS) { g_autoptr (GVariant) variant = NULL; g_autoptr (GBytes) bytes = NULL; variant = g_variant_new_string (PACKAGE_VERSION); bytes = g_variant_get_data_as_bytes (variant); dex_await (dex_file_replace_contents_bytes ( cache_version_file, bytes, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION), NULL); } else g_warning ("Unable to ensure cache directory: %s", mkdir_error->message); } g_clear_object (&self->flatpak); self->flatpak = dex_await_object (bz_flatpak_instance_new (), &local_error); if (self->flatpak == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); bz_transaction_manager_set_backend (self->transactions, BZ_BACKEND (self->flatpak)); bz_state_info_set_backend (self->state, BZ_BACKEND (self->flatpak)); has_flathub = dex_await_boolean ( bz_flatpak_instance_has_flathub (self->flatpak, NULL), &local_error); if (local_error != NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (!has_flathub) { GtkWindow *window = NULL; g_autofree char *response = NULL; AdwDialog *alert = NULL; dex_await (dex_ref (DEX_FUTURE (self->first_window_opened)), NULL); window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (window == NULL) window = new_window (self); alert = adw_alert_dialog_new (NULL, NULL); #ifdef SANDBOXED_LIBFLATPAK adw_alert_dialog_format_heading ( ADW_ALERT_DIALOG (alert), _ ("Set Up System Flathub?")); adw_alert_dialog_format_body ( ADW_ALERT_DIALOG (alert), _ ("The system Flathub remote is not set up. Bazaar requires " "Flathub to be configured on the system Flatpak installation " "to browse and install applications.\n\n" "You can still use Bazaar to browse and remove already installed apps.")); #else adw_alert_dialog_format_heading ( ADW_ALERT_DIALOG (alert), _ ("Set Up Flathub?")); adw_alert_dialog_format_body ( ADW_ALERT_DIALOG (alert), _ ("Flathub is not set up on this system. " "You will not be able to browse and install applications in Bazaar if its unavailable.\n\n" "You can still use Bazaar to browse and remove already installed apps.")); #endif adw_alert_dialog_add_responses ( ADW_ALERT_DIALOG (alert), "later", _ ("Later"), "add", _ ("Set Up Flathub"), NULL); adw_alert_dialog_set_response_appearance ( ADW_ALERT_DIALOG (alert), "add", ADW_RESPONSE_SUGGESTED); adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (alert), "add"); adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (alert), "later"); adw_dialog_present (alert, GTK_WIDGET (window)); response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (alert)), NULL); if (response != NULL && g_strcmp0 (response, "add") == 0) { result = dex_await ( bz_flatpak_instance_ensure_has_flathub (self->flatpak, NULL), &local_error); if (result) has_flathub = TRUE; else { g_warning ("Failed to install flathub: %s", local_error->message); g_clear_error (&local_error); } } } bz_state_info_set_has_flathub (self->state, has_flathub); self->installed_set = dex_await_boxed ( bz_backend_retrieve_install_ids ( BZ_BACKEND (self->flatpak), NULL), &local_error); if (self->installed_set == NULL) { g_warning ("Unable to enumerate installed entries from flatpak backend; " "no entries will appear to be installed: %s", local_error->message); g_clear_error (&local_error); self->installed_set = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_free); } repos = dex_await_object ( bz_backend_list_repositories (BZ_BACKEND (self->flatpak), NULL), &local_error); if (repos != NULL) bz_state_info_set_repositories (self->state, repos); else { g_warning ("Failed to enumerate repositories: %s", local_error->message); g_clear_error (&local_error); } /* Revive old cache from previous Bazaar process */ cache_has_flathub = dex_await_boolean ( dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) enumerate_disk_groups_fiber, bz_track_weak (self), bz_weak_release), NULL); self->had_cache_on_init = g_list_model_get_n_items (G_LIST_MODEL (self->groups)) > 0; flathub_cache_file = fiber_dup_cache_file ("flathub-cache", &flathub_cache, &local_error); if (flathub_cache_file != NULL) { if (dex_await (dex_file_query_exists (flathub_cache_file), NULL)) { g_autoptr (GBytes) bytes = NULL; bytes = dex_await_boxed ( dex_file_load_contents_bytes (flathub_cache_file), &local_error); if (bytes != NULL) { g_autoptr (GVariant) variant = NULL; g_autoptr (BzFlathubState) flathub = NULL; variant = g_variant_new_from_bytes (G_VARIANT_TYPE_VARDICT, bytes, FALSE); if (variant == NULL) { g_warning ("Failed to interpret cached flathub state from %s: %s", flathub_cache, local_error->message); g_clear_error (&local_error); } flathub = bz_flathub_state_new (); result = bz_serializable_deserialize ( BZ_SERIALIZABLE (flathub), variant, &local_error); if (result) { self->flathub = g_steal_pointer (&flathub); bz_flathub_state_set_map_factory (self->flathub, self->application_factory); bz_state_info_set_flathub (self->state, self->flathub); if (cache_has_flathub) { dex_promise_resolve_boolean (self->ready_to_open_files, TRUE); bz_state_info_set_busy (self->state, FALSE); } } else { g_warning ("Failed to deserialize cached flathub state from %s: %s", flathub_cache, local_error->message); g_clear_error (&local_error); } } else { g_warning ("Failed to decache cache flathub state from %s: %s", flathub_cache, local_error->message); g_clear_error (&local_error); } } } else { g_warning ("Unable to ensure cache directory: %s", local_error->message); g_clear_error (&local_error); } auth_state = bz_auth_state_new (); bz_state_info_set_auth_state (self->state, auth_state); return dex_future_new_true (); } static DexFuture * enumerate_disk_groups_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; g_autofree char *groups_cache = NULL; g_autoptr (GFile) groups_cache_file = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GVariantIter) iter = NULL; gboolean has_flathub_group = FALSE; bz_weak_get_or_return_reject (self, wr); groups_cache_file = fiber_dup_cache_file ("groups-cache", &groups_cache, &local_error); if (groups_cache_file == NULL) { g_warning ("Unable to ensure groups cache directory: %s", local_error->message); return dex_future_new_for_boolean (FALSE); } if (!dex_await (dex_file_query_exists (groups_cache_file), NULL)) return dex_future_new_for_boolean (FALSE); bytes = dex_await_boxed ( dex_file_load_contents_bytes (groups_cache_file), &local_error); if (bytes == NULL) { g_warning ("Failed to load groups cache from %s: %s", groups_cache, local_error->message); return dex_future_new_for_boolean (FALSE); } variant = g_variant_new_from_bytes (G_VARIANT_TYPE ("aa{sv}"), bytes, FALSE); if (variant == NULL) { g_warning ("Failed to parse groups cache from %s", groups_cache); return dex_future_new_for_boolean (FALSE); } iter = g_variant_iter_new (variant); for (;;) { g_autoptr (GVariant) group_variant = NULL; g_autoptr (BzEntryGroup) group = NULL; group_variant = g_variant_iter_next_value (iter); if (group_variant == NULL) break; group = bz_entry_group_new (self->entry_factory); if (bz_entry_group_deserialize (group, group_variant)) { const char *id = NULL; bz_entry_group_reconcile_with_installed_set (group, self->installed_set); if (!has_flathub_group && bz_entry_group_get_is_flathub (group)) has_flathub_group = TRUE; g_list_store_append (self->groups, group); id = bz_entry_group_get_id (group); if (id != NULL) g_hash_table_replace ( self->ids_to_groups, g_strdup (id), g_object_ref (group)); if (bz_entry_group_get_removable (group) > 0) g_list_store_insert_sorted ( self->installed_apps, group, (GCompareDataFunc) cmp_group, NULL); } } gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_LESS_STRICT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_LESS_STRICT); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) check_for_updates_fiber, bz_track_weak (self), bz_weak_release)); return dex_future_new_for_boolean (has_flathub_group); } static DexFuture * enumerate_disk_io_fiber (EnumerateDiskIoData *data) { g_autoptr (GError) local_error = NULL; g_autoptr (GHashTable) cached_set = NULL; g_autoptr (GPtrArray) entries = NULL; GHashTableIter iter = { 0 }; cached_set = dex_await_boxed ( bz_entry_cache_manager_enumerate_disk (data->cache), &local_error); if (cached_set == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); entries = g_ptr_array_new_with_free_func (g_object_unref); g_hash_table_iter_init (&iter, cached_set); for (;;) { g_autoptr (GPtrArray) batch = NULL; char *checksum = NULL; batch = g_ptr_array_new_with_free_func (dex_unref); while (batch->len < CACHE_ENUM_BATCH_SIZE && g_hash_table_iter_next (&iter, (gpointer *) &checksum, NULL)) g_ptr_array_add ( batch, bz_entry_cache_manager_get_by_checksum ( data->cache, checksum)); if (batch->len > 0) dex_await (dex_future_allv ( (DexFuture *const *) batch->pdata, batch->len), NULL); for (guint i = 0; i < batch->len; i++) { DexFuture *future = NULL; const GValue *value = NULL; future = g_ptr_array_index (batch, i); value = dex_future_get_value (future, &local_error); if (value != NULL) g_ptr_array_add (entries, g_value_dup_object (value)); else { g_warning ("Unable to retrieve cached entry: %s", local_error->message); g_clear_error (&local_error); } } if (batch->len < CACHE_ENUM_BATCH_SIZE) break; } return dex_future_new_take_boxed (G_TYPE_PTR_ARRAY, g_steal_pointer (&entries)); } static DexFuture * enumerate_disk_entries_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) entries = NULL; g_autoptr (EnumerateDiskIoData) io_data = NULL; gboolean has_flathub_entry = FALSE; bz_weak_get_or_return_reject (self, wr); io_data = enumerate_disk_io_data_new (); io_data->cache = g_object_ref (self->cache); entries = dex_await_boxed ( dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) enumerate_disk_io_fiber, enumerate_disk_io_data_ref (io_data), enumerate_disk_io_data_unref), &local_error); if (entries == NULL) { g_warning ("Unable to enumerate cached entries: %s", local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } for (guint i = 0; i < entries->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (entries, i); if (BZ_IS_FLATPAK_ENTRY (entry) && bz_flatpak_entry_get_bundle_path (BZ_FLATPAK_ENTRY (entry)) != NULL) /* refrain from restoring bundle entries */ continue; if (!has_flathub_entry && BZ_IS_FLATPAK_ENTRY (entry) && g_strcmp0 (bz_entry_get_remote_repo_name (entry), "flathub") == 0) has_flathub_entry = TRUE; fiber_replace_entry (self, entry); } gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_LESS_STRICT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_LESS_STRICT); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) check_for_updates_fiber, bz_track_weak (self), bz_weak_release)); return dex_future_new_for_boolean (has_flathub_entry); } static DexFuture * check_for_updates_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; bz_weak_get_or_return_reject (self, wr); fiber_check_for_updates (self); finish_with_background_task_label (self); return dex_future_new_true (); } static DexFuture * cache_flathub_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *flathub_cache = NULL; g_autoptr (GFile) flathub_cache_file = NULL; bz_weak_get_or_return_reject (self, wr); flathub_cache_file = fiber_dup_cache_file ("flathub-cache", &flathub_cache, &local_error); if (flathub_cache_file != NULL) { g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GBytes) bytes = NULL; builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); bz_serializable_serialize (BZ_SERIALIZABLE (self->flathub), builder); variant = g_variant_builder_end (builder); bytes = g_variant_get_data_as_bytes (variant); result = dex_await ( dex_file_replace_contents_bytes ( flathub_cache_file, bytes, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION), &local_error); if (!result) { g_warning ("Failed to cache flathub state to %s: %s", flathub_cache, local_error->message); g_clear_error (&local_error); } } else { g_warning ("Unable to ensure cache directory: %s", local_error->message); g_clear_error (&local_error); } return dex_future_new_true (); } static DexFuture * cache_groups_fiber (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *groups_cache = NULL; g_autoptr (GFile) groups_cache_file = NULL; g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GBytes) bytes = NULL; guint n_groups = 0; bz_weak_get_or_return_reject (self, wr); groups_cache_file = fiber_dup_cache_file ("groups-cache", &groups_cache, &local_error); if (groups_cache_file == NULL) { g_warning ("Unable to ensure groups cache directory: %s", local_error->message); return dex_future_new_true (); } builder = g_variant_builder_new (G_VARIANT_TYPE ("aa{sv}")); n_groups = g_list_model_get_n_items (G_LIST_MODEL (self->groups)); for (guint i = 0; i < n_groups; i++) { g_autoptr (BzEntryGroup) group = NULL; g_autoptr (GVariantBuilder) gb = NULL; group = g_list_model_get_item (G_LIST_MODEL (self->groups), i); gb = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); bz_entry_group_serialize (group, gb); g_variant_builder_add (builder, "@a{sv}", g_variant_builder_end (gb)); } variant = g_variant_builder_end (builder); bytes = g_variant_get_data_as_bytes (variant); result = dex_await ( dex_file_replace_contents_bytes ( groups_cache_file, bytes, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION), &local_error); if (!result) g_warning ("Failed to cache groups to %s: %s", groups_cache, local_error->message); return dex_future_new_true (); } static DexFuture * respond_to_flatpak_fiber (RespondToFlatpakData *data) { g_autoptr (BzApplication) self = NULL; BzBackendNotification *notif = data->notif; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) build_futures = NULL; g_autoptr (GPtrArray) build_notify_groups = NULL; g_autoptr (DexFuture) read_future = NULL; g_autoptr (DexFuture) reread_timeout = NULL; gboolean update_labels = FALSE; gboolean update_filters = FALSE; bz_weak_get_or_return_reject (self, data->self); build_futures = g_ptr_array_new_with_free_func (dex_unref); build_notify_groups = g_ptr_array_new_with_free_func (g_object_unref); read_future = dex_future_new_for_object (notif); /* `reread_timeout` defines how long we are allowed to spend adding to `build-futures` before we update the UI later */ reread_timeout = dex_timeout_new_msec (100); for (;;) { BzBackendNotificationKind kind = 0; if (!dex_future_is_resolved (read_future)) { g_autoptr (DexFuture) future = NULL; future = dex_future_all_race ( dex_ref (reread_timeout), dex_ref (read_future), NULL); dex_await (g_steal_pointer (&future), NULL); if (!dex_future_is_pending (reread_timeout)) break; } notif = g_value_get_object (dex_future_get_value (read_future, NULL)); kind = bz_backend_notification_get_kind (notif); switch (kind) { case BZ_BACKEND_NOTIFICATION_KIND_PRESENT_ID: { const char *id = NULL; id = bz_backend_notification_get_generic_id (notif); if (id == NULL) break; open_generic_id (self, id); } break; case BZ_BACKEND_NOTIFICATION_KIND_ERROR: { const char *error = NULL; GtkWindow *window = NULL; error = bz_backend_notification_get_error (notif); if (error == NULL) break; g_warning ("Received an error from the flatpak backend: %s", error); window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (window != NULL) bz_show_error_for_widget (GTK_WIDGET (window), _ ("A backend error occurred"), error); } break; case BZ_BACKEND_NOTIFICATION_KIND_TELL_INCOMING: { int n_incoming = 0; n_incoming = bz_backend_notification_get_n_incoming (notif); self->n_entries_incoming += n_incoming; update_labels = TRUE; } break; case BZ_BACKEND_NOTIFICATION_KIND_REPLACE_ENTRY: { BzEntry *entry = NULL; entry = bz_backend_notification_get_entry (notif); fiber_replace_entry (self, entry); g_ptr_array_add (build_futures, bz_entry_cache_manager_add (self->cache, entry)); if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) { const char *id = NULL; BzEntryGroup *group = NULL; update_filters = TRUE; id = bz_entry_get_id (entry); group = g_hash_table_lookup (self->ids_to_groups, id); if (group != NULL) g_ptr_array_add (build_notify_groups, g_object_ref (group)); } self->n_entries_incoming--; update_labels = TRUE; } break; case BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_START: { const char *remote_name = NULL; remote_name = bz_backend_notification_get_remote_name (notif); if (bz_state_info_get_has_flathub (self->state)) /* We only count instances of the "flathub" remote if we have flathub, since that's all we care about for the UI */ { if (g_strcmp0 (remote_name, "flathub") == 0) self->n_remotes_syncing++; } else self->n_remotes_syncing++; g_debug ("remote '%s' has begun synchronization; " "now currently syncing %u remote(s)", remote_name, self->n_remotes_syncing); } break; case BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_FINISH: { const char *remote_name = NULL; remote_name = bz_backend_notification_get_remote_name (notif); if (bz_state_info_get_has_flathub (self->state)) { if (g_strcmp0 (remote_name, "flathub") == 0) { self->n_remotes_syncing--; if (self->n_remotes_syncing == 0) self->flathub_remote_initialized = TRUE; } } else { self->n_remotes_syncing--; if (self->n_remotes_syncing == 0) bz_state_info_set_busy (self->state, FALSE); } g_debug ("remote '%s' has finished synchronization; " "now currently syncing %u remote(s)", remote_name, self->n_remotes_syncing); } break; case BZ_BACKEND_NOTIFICATION_KIND_INSTALL_DONE: case BZ_BACKEND_NOTIFICATION_KIND_UPDATE_DONE: case BZ_BACKEND_NOTIFICATION_KIND_REMOVE_DONE: { const char *unique_id = NULL; g_autoptr (BzEntry) entry = NULL; unique_id = bz_backend_notification_get_unique_id (notif); entry = dex_await_object ( bz_entry_cache_manager_get (self->cache, unique_id), &local_error); if (entry == NULL) { g_warning ("Backend notification references an entry " "which couldn't be decached: %s", local_error->message); break; } switch (kind) { case BZ_BACKEND_NOTIFICATION_KIND_INSTALL_DONE: { const char *version = NULL; version = bz_backend_notification_get_version (notif); g_hash_table_replace (self->installed_set, g_strdup (unique_id), g_strdup (version)); bz_entry_set_installed_version (entry, version); bz_entry_set_installed (entry, TRUE); if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) { BzEntryGroup *group = NULL; group = g_hash_table_lookup (self->ids_to_groups, bz_entry_get_id (entry)); if (group != NULL) { gboolean found = FALSE; guint position = 0; found = g_list_store_find (self->installed_apps, group, &position); if (!found) g_list_store_insert_sorted (self->installed_apps, group, (GCompareDataFunc) cmp_group, NULL); } } } break; case BZ_BACKEND_NOTIFICATION_KIND_UPDATE_DONE: { const char *version = NULL; version = bz_backend_notification_get_version (notif); g_hash_table_replace (self->installed_set, g_strdup (unique_id), g_strdup (version)); } break; case BZ_BACKEND_NOTIFICATION_KIND_REMOVE_DONE: { bz_entry_set_installed_version (entry, NULL); bz_entry_set_installed (entry, FALSE); g_hash_table_remove (self->installed_set, unique_id); if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) { BzEntryGroup *group = NULL; group = g_hash_table_lookup (self->ids_to_groups, bz_entry_get_id (entry)); if (group != NULL && !bz_entry_group_get_removable (group)) { gboolean found = FALSE; guint position = 0; found = g_list_store_find (self->installed_apps, group, &position); if (found) g_list_store_remove (self->installed_apps, position); } } } break; case BZ_BACKEND_NOTIFICATION_KIND_ERROR: case BZ_BACKEND_NOTIFICATION_KIND_EXTERNAL_CHANGE: case BZ_BACKEND_NOTIFICATION_KIND_INVALIDATE_REMOTES: case BZ_BACKEND_NOTIFICATION_KIND_PRESENT_ID: case BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_FINISH: case BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_START: case BZ_BACKEND_NOTIFICATION_KIND_REPLACE_ENTRY: case BZ_BACKEND_NOTIFICATION_KIND_TELL_INCOMING: default: g_assert_not_reached (); }; g_ptr_array_add (build_futures, bz_entry_cache_manager_add (self->cache, entry)); if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) { const char *id = NULL; BzEntryGroup *group = NULL; id = bz_entry_get_id (entry); group = g_hash_table_lookup (self->ids_to_groups, id); if (group != NULL) g_ptr_array_add (build_notify_groups, g_object_ref (group)); } } break; case BZ_BACKEND_NOTIFICATION_KIND_INVALIDATE_REMOTES: case BZ_BACKEND_NOTIFICATION_KIND_EXTERNAL_CHANGE: { g_autoptr (GListModel) repos = NULL; g_autoptr (GHashTable) installed_set = NULL; g_autoptr (GPtrArray) diff_reads = NULL; GHashTableIter old_iter = { 0 }; GHashTableIter new_iter = { 0 }; g_autoptr (GPtrArray) diff_writes = NULL; bz_state_info_set_background_task_label (self->state, _ ("Refreshing…")); repos = dex_await_object ( bz_backend_list_repositories (BZ_BACKEND (self->flatpak), NULL), &local_error); if (repos != NULL) bz_state_info_set_repositories (self->state, repos); else { g_warning ("Failed to enumerate repositories: %s", local_error->message); g_clear_error (&local_error); } installed_set = dex_await_boxed ( bz_backend_retrieve_install_ids ( BZ_BACKEND (self->flatpak), NULL), &local_error); if (installed_set == NULL) { g_warning ("Failed to enumerate installed entries: %s", local_error->message); finish_with_background_task_label (self); break; } diff_reads = g_ptr_array_new_with_free_func (dex_unref); g_hash_table_iter_init (&old_iter, self->installed_set); for (;;) { char *unique_id = NULL; if (!g_hash_table_iter_next ( &old_iter, (gpointer *) &unique_id, NULL)) break; if (!g_hash_table_contains (installed_set, unique_id)) g_ptr_array_add ( diff_reads, bz_entry_cache_manager_get (self->cache, unique_id)); } g_hash_table_iter_init (&new_iter, installed_set); for (;;) { char *unique_id = NULL; if (!g_hash_table_iter_next ( &new_iter, (gpointer *) &unique_id, NULL)) break; if (!g_hash_table_contains (self->installed_set, unique_id)) g_ptr_array_add ( diff_reads, bz_entry_cache_manager_get (self->cache, unique_id)); } if (diff_reads->len > 0) { dex_await (dex_future_allv ( (DexFuture *const *) diff_reads->pdata, diff_reads->len), NULL); diff_writes = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < diff_reads->len; i++) { DexFuture *future = NULL; future = g_ptr_array_index (diff_reads, i); if (dex_future_is_resolved (future)) { BzEntry *entry = NULL; const char *id = NULL; const char *unique_id = NULL; BzEntryGroup *group = NULL; gboolean installed = FALSE; const char *version = NULL; entry = g_value_get_object (dex_future_get_value (future, NULL)); id = bz_entry_get_id (entry); group = g_hash_table_lookup (self->ids_to_groups, id); if (group != NULL) bz_entry_group_connect_living (group, entry); unique_id = bz_entry_get_unique_id (entry); installed = g_hash_table_contains (installed_set, unique_id); version = g_hash_table_lookup (installed_set, unique_id); if (installed && version != NULL && *version != '\0') bz_entry_set_installed_version (entry, version); bz_entry_set_installed (entry, installed); if (group != NULL) { gboolean found = FALSE; guint position = 0; found = g_list_store_find (self->installed_apps, group, &position); if (installed && !found) g_list_store_insert_sorted ( self->installed_apps, group, (GCompareDataFunc) cmp_group, NULL); else if (!installed && found && bz_entry_group_get_removable (group) == 0) g_list_store_remove (self->installed_apps, position); } g_ptr_array_add ( diff_writes, bz_entry_cache_manager_add (self->cache, entry)); } } dex_await (dex_future_allv ( (DexFuture *const *) diff_writes->pdata, diff_writes->len), NULL); } g_clear_pointer (&self->installed_set, g_hash_table_unref); self->installed_set = g_steal_pointer (&installed_set); fiber_check_for_updates (self); finish_with_background_task_label (self); } break; default: g_assert_not_reached (); } dex_clear (&read_future); read_future = dex_channel_receive (self->flatpak_notifs); if (!dex_future_is_pending (reread_timeout)) break; } if (build_futures->len > 0) { g_autoptr (DexFuture) future = NULL; g_autoptr (CacheWriteBackData) write_back_data = NULL; future = dex_future_allv ( (DexFuture *const *) build_futures->pdata, build_futures->len); write_back_data = cache_write_back_data_new (); write_back_data->self = bz_track_weak (self); write_back_data->notify_groups = g_ptr_array_ref (build_notify_groups); write_back_data->update_filters = update_filters; future = dex_future_finally ( future, (DexFutureCallback) cache_write_back_finally, cache_write_back_data_ref (write_back_data), cache_write_back_data_unref); dex_future_disown (g_steal_pointer (&future)); } if (update_labels) { if (self->n_entries_incoming > 0) bz_state_info_set_background_task_label_take_printf ( self->state, _ ("Loading %d apps…"), self->n_entries_incoming); else { fiber_check_for_updates (self); finish_with_background_task_label (self); } } if (self->n_entries_incoming == 0 && self->flathub_remote_initialized) { bz_state_info_set_busy (self->state, FALSE); finish_with_background_task_label (self); } return g_steal_pointer (&read_future); } static DexFuture * open_appstream_fiber (OpenAppstreamData *data) { g_autoptr (BzApplication) self = NULL; char *id = data->id; bz_weak_get_or_return_reject (self, data->self); dex_await (dex_ref (self->ready_to_open_files), NULL); open_generic_id (self, id); return dex_future_new_true (); } static DexFuture * open_flatpakref_fiber (OpenFlatpakrefData *data) { g_autoptr (BzApplication) self = NULL; GFile *file = data->file; g_autoptr (GError) local_error = NULL; g_autoptr (DexFuture) future = NULL; const GValue *value = NULL; bz_weak_get_or_return_reject (self, data->self); dex_await (dex_ref (self->ready_to_open_files), NULL); future = bz_backend_load_local_package (BZ_BACKEND (self->flatpak), file, NULL); dex_await (dex_ref (future), NULL); value = dex_future_get_value (future, &local_error); if (value == NULL) { GtkWindow *window = get_or_create_window (self); bz_show_error_for_widget ( GTK_WIDGET (window), _ ("Failed to open file"), local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } if (G_VALUE_HOLDS_OBJECT (value)) { GtkWindow *window = NULL; BzEntry *entry = NULL; BzFlatpakRepo *repo = NULL; BzBundleInstallDialog *dialog = NULL; BzFlatpakBundleResult *bundle_result = NULL; const char *id = NULL; window = get_or_create_window (self); if (adw_application_window_get_visible_dialog (ADW_APPLICATION_WINDOW (window)) != NULL) window = new_window (self); bundle_result = BZ_FLATPAK_BUNDLE_RESULT (g_value_get_object (value)); entry = BZ_ENTRY (bz_flatpak_bundle_result_get_entry (bundle_result)); repo = bz_flatpak_bundle_result_get_runtime_repo (bundle_result); id = bz_entry_get_id (entry); if (id != NULL) { BzEntryGroup *group = NULL; group = g_hash_table_lookup (self->ids_to_groups, id); if (group != NULL && bz_entry_group_get_removable (group) > 0) bz_entry_set_installed (entry, TRUE); } dialog = g_object_new ( BZ_TYPE_BUNDLE_INSTALL_DIALOG, "state", self->state, "entry", entry, "runtime-repo", repo, NULL); adw_dialog_present (ADW_DIALOG (dialog), GTK_WIDGET (window)); } return dex_future_new_true (); } static DexFuture * init_fiber_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; const GValue *value = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, &local_error); if (value != NULL) { self->flatpak_notifs = bz_backend_create_notification_channel ( BZ_BACKEND (self->flatpak)); self->notif_watch = dex_future_then_loop ( dex_channel_receive (self->flatpak_notifs), (DexFutureCallback) watch_backend_notifs_then_loop_cb, bz_track_weak (self), bz_weak_release); if (!bz_state_info_get_metered_connection (self->state) || !self->had_cache_on_init) { g_autoptr (DexFuture) sync_future = NULL; sync_future = make_sync_future (self); sync_future = dex_future_finally ( sync_future, (DexFutureCallback) init_sync_finally, bz_track_weak (self), bz_weak_release); self->sync = g_steal_pointer (&sync_future); } else { bz_state_info_set_allow_manual_sync (self->state, TRUE); bz_state_info_set_busy (self->state, FALSE); bz_state_info_set_syncing (self->state, FALSE); dex_promise_resolve_boolean (self->ready_to_open_files, TRUE); // Only check for updates if connection is limited. dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) check_for_updates_fiber, bz_track_weak (self), bz_weak_release)); } self->periodic_timeout_source = g_timeout_add_seconds ( /* Check every day */ 60 * 60 * 24, (GSourceFunc) periodic_timeout_cb, self); bz_malcontent_service_start (self->malcontent); g_object_bind_property ( bz_state_info_get_auth_state (self->state), "authenticated", g_action_map_lookup_action (G_ACTION_MAP (self), "flathub-login"), "enabled", G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); } else { GtkWindow *window = NULL; bz_state_info_set_online (self->state, FALSE); bz_state_info_set_busy (self->state, FALSE); window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (window != NULL) { g_autofree char *error_string = NULL; error_string = g_strdup_printf ( "Could not initialize: %s", local_error->message); bz_show_error_for_widget (GTK_WIDGET (window), _ ("An initialization error occurred"), error_string); } } return dex_future_new_true (); } static DexFuture * init_sync_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; bz_weak_get_or_return_reject (self, wr); /* Do nothing */ return dex_future_new_true (); } static DexFuture * backend_sync_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; bz_weak_get_or_return_reject (self, wr); if (dex_future_is_resolved (future)) { g_autoptr (DexFuture) enum_future = NULL; enum_future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) enumerate_disk_entries_fiber, bz_track_weak (self), bz_weak_release); enum_future = dex_future_finally ( enum_future, (DexFutureCallback) backend_sync_save_groups_finally, bz_track_weak (self), bz_weak_release); return g_steal_pointer (&enum_future); } else return dex_ref (future); } static DexFuture * backend_sync_save_groups_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; bz_weak_get_or_return_reject (self, wr); return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) cache_groups_fiber, bz_track_weak (self), bz_weak_release); } static DexFuture * flathub_update_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; bz_weak_get_or_return_reject (self, wr); if (dex_future_is_resolved (future)) { g_clear_object (&self->flathub); g_assert (self->tmp_flathub != NULL); self->flathub = g_steal_pointer (&self->tmp_flathub); bz_flathub_state_set_map_factory (self->flathub, self->application_factory); bz_state_info_set_flathub (self->state, self->flathub); return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) cache_flathub_fiber, bz_track_weak (self), bz_weak_release); } else { g_clear_object (&self->tmp_flathub); return dex_ref (future); } } static DexFuture * cache_write_back_finally (DexFuture *future, CacheWriteBackData *data) { g_autoptr (BzApplication) self = NULL; GPtrArray *notify_groups = data->notify_groups; gboolean update_filters = data->update_filters; bz_weak_get_or_return_reject (self, data->self); for (guint i = 0; i < notify_groups->len; i++) { BzEntryGroup *group = NULL; group = g_ptr_array_index (notify_groups, i); g_object_notify (G_OBJECT (group), "ui-entry"); } if (update_filters) { gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_LESS_STRICT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_LESS_STRICT); } return dex_future_new_true (); } static DexFuture * sync_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; bz_weak_get_or_return_reject (self, wr); bz_state_info_set_online (self->state, dex_future_is_resolved (future)); bz_state_info_set_allow_manual_sync (self->state, TRUE); bz_state_info_set_busy (self->state, FALSE); bz_state_info_set_syncing (self->state, FALSE); finish_with_background_task_label (self); dex_promise_resolve_boolean (self->ready_to_open_files, TRUE); return dex_future_new_true (); } static DexFuture * watch_backend_notifs_then_loop_cb (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; const GValue *value = NULL; BzBackendNotification *notif = NULL; g_autoptr (RespondToFlatpakData) data = NULL; g_autoptr (DexFuture) ret_future = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); g_assert (value != NULL); notif = g_value_get_object (value); data = respond_to_flatpak_data_new (); data->self = bz_track_weak (self); data->notif = g_object_ref (notif); ret_future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) respond_to_flatpak_fiber, respond_to_flatpak_data_ref (data), respond_to_flatpak_data_unref); return g_steal_pointer (&ret_future); } static BzEntryGroup * ensure_group_and_add (BzApplication *self, const char *id, BzEntry *entry, BzEntry *eol_runtime, gboolean ignore_eol, gboolean installed) { BzEntryGroup *group = NULL; group = g_hash_table_lookup (self->ids_to_groups, id); if (group != NULL) bz_entry_group_add (group, entry, eol_runtime, ignore_eol); else { g_autoptr (BzEntryGroup) new_group = NULL; g_debug ("Creating new application group for id %s", id); new_group = bz_entry_group_new (self->entry_factory); bz_entry_group_add (new_group, entry, eol_runtime, ignore_eol); g_list_store_append (self->groups, new_group); g_hash_table_replace (self->ids_to_groups, g_strdup (id), g_object_ref (new_group)); group = new_group; } if (installed && !g_list_store_find (self->installed_apps, group, NULL)) g_list_store_insert_sorted ( self->installed_apps, group, (GCompareDataFunc) cmp_group, NULL); return group; } static void fiber_replace_entry (BzApplication *self, BzEntry *entry) { const char *id = NULL; const char *unique_id = NULL; const char *unique_id_checksum = NULL; gboolean user = FALSE; gboolean installed = FALSE; const char *flatpak_id = NULL; const char *version = NULL; GHashTable *name_to_addons = NULL; id = bz_entry_get_id (entry); unique_id = bz_entry_get_unique_id (entry); unique_id_checksum = bz_entry_get_unique_id_checksum (entry); if (id == NULL || unique_id == NULL || unique_id_checksum == NULL) return; user = bz_flatpak_entry_is_user (BZ_FLATPAK_ENTRY (entry)); name_to_addons = user ? self->usr_name_to_addons : self->sys_name_to_addons; installed = g_hash_table_contains (self->installed_set, unique_id); bz_entry_set_installed (entry, installed); version = g_hash_table_lookup (self->installed_set, unique_id); if (version != NULL && *version != '\0') bz_entry_set_installed_version (entry, version); flatpak_id = bz_flatpak_entry_get_flatpak_id (BZ_FLATPAK_ENTRY (entry)); if (flatpak_id != NULL) { GPtrArray *addons = NULL; addons = g_hash_table_lookup (name_to_addons, flatpak_id); if (addons != NULL) { g_debug ("Appending %d addons to %s", addons->len, unique_id); for (guint i = 0; i < addons->len; i++) { const char *addon_id = NULL; addon_id = g_ptr_array_index (addons, i); bz_entry_append_addon (entry, addon_id); } g_hash_table_remove (name_to_addons, flatpak_id); addons = NULL; } } if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) { gboolean ignore_eol = FALSE; const char *runtime_name = NULL; g_autoptr (BzEntry) eol_runtime = NULL; BzEntryGroup *group = NULL; GHashTable *ref_to_addon_group_ids = NULL; GPtrArray *pending = NULL; if (self->ignore_eol_set != NULL) ignore_eol = g_hash_table_contains (self->ignore_eol_set, id); runtime_name = bz_flatpak_entry_get_application_runtime (BZ_FLATPAK_ENTRY (entry)); if (!ignore_eol && runtime_name != NULL) { char *runtime_checksum = NULL; runtime_checksum = g_hash_table_lookup (self->eol_runtimes, runtime_name); if (runtime_checksum != NULL) eol_runtime = dex_await_object ( bz_entry_cache_manager_get_by_checksum ( self->cache, runtime_checksum), NULL); } group = ensure_group_and_add (self, id, entry, eol_runtime, ignore_eol, installed); ref_to_addon_group_ids = user ? self->usr_ref_to_addon_group_ids : self->sys_ref_to_addon_group_ids; pending = g_hash_table_lookup (ref_to_addon_group_ids, id); if (pending != NULL) { for (guint i = 0; i < pending->len; i++) bz_entry_group_append_addon_group_id (group, g_ptr_array_index (pending, i)); g_hash_table_remove (ref_to_addon_group_ids, id); } } if (flatpak_id != NULL && bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_RUNTIME) && g_str_has_prefix (flatpak_id, "runtime/")) { const char *stripped = NULL; const char *eol = NULL; stripped = flatpak_id + strlen ("runtime/"); eol = bz_entry_get_eol (entry); if (eol != NULL) g_hash_table_replace ( self->eol_runtimes, g_strdup (stripped), g_strdup (unique_id_checksum)); else g_hash_table_remove (self->eol_runtimes, stripped); } if (bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_ADDON) && strstr (id, ".Debug") == NULL && strstr (id, ".Locale") == NULL) { const char *extension_of_what = NULL; extension_of_what = bz_flatpak_entry_get_addon_extension_of_ref ( BZ_FLATPAK_ENTRY (entry)); if (extension_of_what != NULL && g_str_has_prefix (extension_of_what, "app/")) { g_auto (GStrv) parts = NULL; BzEntryGroup *app_group = NULL; ensure_group_and_add (self, id, entry, NULL, FALSE, installed); parts = g_strsplit (extension_of_what, "/", -1); if (parts != NULL && parts[1] != NULL) { app_group = g_hash_table_lookup (self->ids_to_groups, parts[1]); if (app_group != NULL) bz_entry_group_append_addon_group_id (app_group, id); else { GHashTable *ref_to_addon_group_ids = user ? self->usr_ref_to_addon_group_ids : self->sys_ref_to_addon_group_ids; GPtrArray *pending = NULL; pending = g_hash_table_lookup (ref_to_addon_group_ids, parts[1]); if (pending == NULL) { pending = g_ptr_array_new_with_free_func (g_free); g_hash_table_replace (ref_to_addon_group_ids, g_strdup (parts[1]), pending); } g_ptr_array_add (pending, g_strdup (id)); } } } if (extension_of_what != NULL) { GPtrArray *addons = NULL; /* BzFlatpakInstance ensures addons come before applications */ addons = g_hash_table_lookup (name_to_addons, extension_of_what); if (addons == NULL) { addons = g_ptr_array_new_with_free_func (g_free); g_hash_table_replace ( name_to_addons, g_strdup (extension_of_what), addons); } g_ptr_array_add (addons, g_strdup (unique_id)); } else g_warning ("Entry with unique id %s is an addon but " "does not seem to extend anything", unique_id); } } static void fiber_check_for_updates (BzApplication *self) { g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) update_ids = NULL; GtkWindow *window = NULL; g_debug ("Checking for updates..."); bz_state_info_set_background_task_label (self->state, _ ("Checking for updates…")); bz_state_info_set_checking_for_updates (self->state, TRUE); update_ids = dex_await_boxed ( bz_backend_retrieve_update_ids (BZ_BACKEND (self->flatpak), NULL), &local_error); window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (update_ids != NULL && update_ids->len > 0) { g_autoptr (GPtrArray) futures = NULL; g_autoptr (GListStore) store = NULL; futures = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < update_ids->len; i++) { const char *unique_id = NULL; unique_id = g_ptr_array_index (update_ids, i); g_ptr_array_add (futures, bz_entry_cache_manager_get (self->cache, unique_id)); } dex_await ( dex_future_allv ((DexFuture *const *) futures->pdata, futures->len), NULL); store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < futures->len; i++) { DexFuture *future = NULL; const GValue *value = NULL; future = g_ptr_array_index (futures, i); value = dex_future_get_value (future, &local_error); if (value != NULL) g_list_store_append (store, g_value_get_object (value)); else { const char *unique_id = NULL; unique_id = g_ptr_array_index (update_ids, i); g_warning ("%s could not be resolved for the update list and thus will not be included: %s", unique_id, local_error->message); g_clear_pointer (&local_error, g_error_free); } } if (g_list_model_get_n_items (G_LIST_MODEL (store)) > 0) bz_state_info_set_available_updates (self->state, G_LIST_MODEL (store)); } else if (local_error != NULL) { g_warning ("Failed to check for updates: %s", local_error->message); if (window != NULL) bz_show_error_for_widget (GTK_WIDGET (window), _ ("Failed to check for updates"), local_error->message); } bz_state_info_set_checking_for_updates (self->state, FALSE); } static GFile * fiber_dup_cache_file (const char *name, char **path_out, GError **error) { gboolean result = FALSE; g_autofree char *module_dir = NULL; g_autoptr (GFile) module_dir_file = NULL; g_autofree char *path = NULL; g_autoptr (GFile) file = NULL; module_dir = bz_dup_module_dir (); module_dir_file = g_file_new_for_path (module_dir); result = dex_await ( dex_file_make_directory_with_parents (module_dir_file), error); if (!result) return NULL; path = g_build_filename (module_dir, name, NULL); file = g_file_new_for_path (path); if (path_out != NULL) *path_out = g_steal_pointer (&path); return g_steal_pointer (&file); } static gboolean periodic_timeout_cb (BzApplication *self) { gboolean have_connection = FALSE; gboolean metered_connection = FALSE; if (self->sync != NULL && dex_future_is_pending (self->sync)) /* If for some reason the last update check is still happening, let it finish */ goto done; dex_clear (&self->sync); have_connection = bz_state_info_get_have_connection (self->state); metered_connection = bz_state_info_get_metered_connection (self->state); if (have_connection && !metered_connection) /* Do not do periodic sync on metered connections. The user will have to manually refresh instead. */ self->sync = make_sync_future (self); else bz_state_info_set_recently_synced (self->state, FALSE); done: return G_SOURCE_CONTINUE; } static gboolean scheduled_timeout_cb (GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; gboolean have_connection = FALSE; /* Use weak ref here since the source tag of this callback won't be tracked by the main application obj */ self = g_weak_ref_get (wr); if (self == NULL) goto done; dex_clear (&self->sync); have_connection = bz_state_info_get_have_connection (self->state); if (have_connection) self->sync = make_sync_future (self); done: return G_SOURCE_REMOVE; } static void network_status_changed (BzApplication *self, GParamSpec *pspec, GNetworkMonitor *network) { gboolean was_connected = FALSE; gboolean was_metered = FALSE; GNetworkConnectivity connectivity = 0; gboolean have_connection = FALSE; gboolean is_metered = FALSE; was_connected = bz_state_info_get_have_connection (self->state); was_metered = bz_state_info_get_metered_connection (self->state); connectivity = g_network_monitor_get_connectivity (network); have_connection = connectivity == G_NETWORK_CONNECTIVITY_FULL; is_metered = g_network_monitor_get_network_metered (network); if (!bz_state_info_get_busy (self->state) && ((!was_connected && have_connection && !is_metered) || (was_metered && !is_metered))) /* Wait a bit to prevent flakiness */ g_timeout_add_full ( G_PRIORITY_DEFAULT, 500, (GSourceFunc) scheduled_timeout_cb, bz_track_weak (self), bz_weak_release); bz_state_info_set_have_connection (self->state, have_connection); bz_state_info_set_metered_connection (self->state, is_metered); } static void disable_blocklists_changed (BzApplication *self, GParamSpec *pspec, BzStateInfo *state) { gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_DIFFERENT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_DIFFERENT); } static void show_hide_app_setting_changed (BzApplication *self, const char *key, GSettings *settings) { g_object_freeze_notify (G_OBJECT (self->state)); bz_state_info_set_hide_eol (self->state, g_settings_get_boolean (self->settings, "hide-eol")); bz_state_info_set_show_only_foss (self->state, g_settings_get_boolean (self->settings, "show-only-foss")); bz_state_info_set_show_only_flathub (self->state, g_settings_get_boolean (self->settings, "show-only-flathub")); bz_state_info_set_show_only_verified (self->state, g_settings_get_boolean (self->settings, "show-only-verified")); gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_DIFFERENT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_DIFFERENT); g_object_thaw_notify (G_OBJECT (self->state)); } static gboolean window_close_request (BzApplication *self, GtkWidget *window) { int width = 0; int height = 0; GList *remaining_windows = NULL; gboolean reap_dl_workers = TRUE; width = gtk_widget_get_width (window); height = gtk_widget_get_height (window); g_settings_set (self->settings, "window-dimensions", "(ii)", width, height); remaining_windows = gtk_application_get_windows ( GTK_APPLICATION (self)); for (GList *l = remaining_windows; l != NULL; l = l->next) { if (l->data != window) { reap_dl_workers = FALSE; break; } } if (reap_dl_workers) /* If no windows are left, kill the dl-worker subprocesses to minimize idle memory usage */ bz_reap_default_download_workers (); /* Do not stop other handlers from being invoked for the signal */ return FALSE; } static void blocklists_changed (BzApplication *self, guint position, guint removed, guint added, GListModel *model) { g_autoptr (GError) local_error = NULL; if (removed > 0) g_ptr_array_remove_range (self->blocklist_regexes, position, removed); for (guint i = 0; i < added; i++) { g_autoptr (BzRootBlocklist) root = NULL; g_autoptr (GPtrArray) regex_datas = NULL; GListModel *blocklists = NULL; root = g_list_model_get_item (model, position + i); regex_datas = g_ptr_array_new_with_free_func (blocklist_regex_data_unref); blocklists = bz_root_blocklist_get_blocklists (root); if (blocklists != NULL) { guint n_blocklists = 0; n_blocklists = g_list_model_get_n_items (blocklists); for (guint j = 0; j < n_blocklists; j++) { g_autoptr (BzBlocklist) blocklist = NULL; GListModel *conditions = NULL; GListModel *allow = NULL; GListModel *allow_regex = NULL; GListModel *block = NULL; GListModel *block_regex = NULL; g_autoptr (BlocklistRegexData) data = NULL; blocklist = g_list_model_get_item (blocklists, j); allow = bz_blocklist_get_allow (blocklist); allow_regex = bz_blocklist_get_allow_regex (blocklist); block = bz_blocklist_get_block (blocklist); block_regex = bz_blocklist_get_block_regex (blocklist); if (allow == NULL && allow_regex == NULL && block == NULL && block_regex == NULL) { g_warning ("Blocklist file has an empty blocklist, ignoring"); continue; } conditions = bz_blocklist_get_conditions (blocklist); if (conditions != NULL) { guint n_conditions = 0; gboolean ignore = FALSE; n_conditions = g_list_model_get_n_items (conditions); for (guint k = 0; k < n_conditions; k++) { gboolean condition_result = FALSE; g_autoptr (BzBlocklistCondition) condition = NULL; BzBlocklistConditionMatchEnvvar *match_envvar = NULL; BzBlocklistConditionMatchLocale *match_locale = NULL; BzBlocklistConditionPostProcessKind postprocess = BZ_BLOCKLIST_CONDITION_POST_PROCESS_KIND_IDENTITY; condition = g_list_model_get_item (conditions, k); match_envvar = bz_blocklist_condition_get_match_envvar (condition); match_locale = bz_blocklist_condition_get_match_locale (condition); postprocess = bz_blocklist_condition_get_post_process (condition); if (match_envvar == NULL && match_locale == NULL) { g_warning ("Blocklist file has an empty condition"); continue; } if (!condition_result && match_envvar != NULL) { const char *var = NULL; const char *regex = NULL; var = bz_blocklist_condition_match_envvar_get_var (match_envvar); regex = bz_blocklist_condition_match_envvar_get_regex (match_envvar); if (var != NULL && regex != NULL) { g_autoptr (GRegex) compiled = NULL; const char *value = NULL; compiled = g_regex_new ( regex, G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED, &local_error); if (compiled == NULL) { g_warning ("Blocklist condition contains invalid regex: %s", local_error->message); g_clear_error (&local_error); continue; } value = g_getenv (var); if (value != NULL && g_regex_match ( compiled, value, G_REGEX_MATCH_ANCHORED, NULL)) condition_result = TRUE; if (postprocess == BZ_BLOCKLIST_CONDITION_POST_PROCESS_KIND_INVERT) condition_result = !condition_result; } else g_warning ("Blocklist file has a envvar condition " "missing a var and/or a regex pattern"); } if (!condition_result && match_locale != NULL) { const char *regex = NULL; regex = bz_blocklist_condition_match_locale_get_regex (match_locale); if (regex != NULL) { g_autoptr (GRegex) compiled = NULL; const char *const *locales = NULL; compiled = g_regex_new ( regex, G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED, &local_error); if (compiled == NULL) { g_warning ("Blocklist condition contains invalid regex: %s", local_error->message); g_clear_error (&local_error); continue; } locales = g_get_language_names (); for (guint l = 0; locales[l] != NULL; l++) { if (g_regex_match ( compiled, locales[i], G_REGEX_MATCH_ANCHORED, NULL)) condition_result = TRUE; if (condition_result) break; } if (postprocess == BZ_BLOCKLIST_CONDITION_POST_PROCESS_KIND_INVERT) condition_result = !condition_result; } else g_warning ("Blocklist file has a match-locale " "condition missing a regex pattern"); } if (!condition_result) { ignore = TRUE; break; } } if (ignore) continue; } data = blocklist_regex_data_new (); data->priority = bz_blocklist_get_priority (blocklist); #define BUILD_REGEX(_name, _builder) \ if (_name != NULL) \ { \ guint _n_strings = 0; \ \ _n_strings = g_list_model_get_n_items (_name); \ for (guint _i = 0; _i < _n_strings; _i++) \ { \ g_autoptr (GtkStringObject) _object = NULL; \ const char *_string = NULL; \ g_autoptr (GRegex) _regex = NULL; \ \ _object = g_list_model_get_item (_name, _i); \ _string = gtk_string_object_get_string (_object); \ _regex = g_regex_new (_string, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &local_error); \ \ if (_regex != NULL) \ g_strv_builder_add (_builder, _string); \ else \ { \ g_warning ("Blocklist file has an invalid " \ "regular expression '%s': %s", \ _string, local_error->message); \ g_clear_error (&local_error); \ } \ } \ } #define BUILD_REGEX_ESCAPED(_name, _builder) \ if (_name != NULL) \ { \ guint _n_strings = 0; \ \ _n_strings = g_list_model_get_n_items (_name); \ for (guint _i = 0; _i < _n_strings; _i++) \ { \ g_autoptr (GtkStringObject) _object = NULL; \ const char *_string = NULL; \ \ _object = g_list_model_get_item (_name, _i); \ _string = gtk_string_object_get_string (_object); \ \ g_strv_builder_take (_builder, g_regex_escape_string (_string, -1)); \ } \ } #define GATHER(name) \ if (name != NULL || \ name##_regex != NULL) \ { \ g_autoptr (GStrvBuilder) _builder = NULL; \ g_auto (GStrv) _patterns = NULL; \ \ _builder = g_strv_builder_new (); \ \ BUILD_REGEX_ESCAPED (name, _builder) \ BUILD_REGEX (name##_regex, _builder) \ \ _patterns = g_strv_builder_end (_builder); \ if (_patterns != NULL) \ { \ g_autofree char *_joined = NULL; \ g_autofree char *_regex_string = NULL; \ \ _joined = g_strjoinv ("|", _patterns); \ _regex_string = g_strdup_printf ("^(%s)$", _joined); \ data->name = g_regex_new (_regex_string, G_REGEX_OPTIMIZE, \ G_REGEX_MATCH_DEFAULT, NULL); \ } \ } GATHER (allow); GATHER (block); #undef GATHER #undef BUILD_REGEX_ESCAPED #undef BUILD_REGEX if (data->allow != NULL || data->block != NULL) g_ptr_array_add (regex_datas, g_steal_pointer (&data)); } } g_ptr_array_insert (self->blocklist_regexes, position + i, g_steal_pointer (®ex_datas)); } gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_DIFFERENT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_DIFFERENT); } static void txt_blocklists_changed (BzApplication *self, guint position, guint removed, guint added, GListModel *model) { if (removed > 0) g_ptr_array_remove_range (self->txt_blocked_id_sets, position, removed); for (guint i = 0; i < added; i++) { g_autoptr (BzHashTableObject) obj = NULL; GHashTable *set = NULL; obj = g_list_model_get_item (model, position + i); set = bz_hash_table_object_get_hash_table (obj); g_ptr_array_insert (self->txt_blocked_id_sets, position + i, g_hash_table_ref (set)); } gtk_filter_changed (GTK_FILTER (self->group_filter), GTK_FILTER_CHANGE_DIFFERENT); gtk_filter_changed (GTK_FILTER (self->appid_filter), GTK_FILTER_CHANGE_DIFFERENT); } static void init_service_struct (BzApplication *self, GtkStringList *blocklists, GtkStringList *txt_blocklists, GtkStringList *curated_configs) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) internal_config_bytes = NULL; g_autoptr (BzYamlParser) internal_config_parser = NULL; g_autoptr (GHashTable) internal_config_parse_results = NULL; const char *app_id = NULL; #ifdef HARDCODED_MAIN_CONFIG g_autoptr (GFile) config_file = NULL; g_autoptr (GBytes) config_bytes = NULL; #endif GtkCustomFilter *filter = NULL; GNetworkMonitor *network = NULL; g_type_ensure (BZ_TYPE_INTERNAL_CONFIG); internal_config_bytes = g_resources_lookup_data ( "/io/github/kolunmi/Bazaar/internal-config.yaml", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); g_assert (internal_config_bytes != NULL); internal_config_parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/internal-config-schema.xml"); g_assert (internal_config_parser != NULL); internal_config_parse_results = bz_parser_process_bytes ( BZ_PARSER (internal_config_parser), internal_config_bytes, &local_error); if (internal_config_parse_results == NULL) g_critical ("FATAL: unable to parse internal config resource: %s", local_error->message); g_assert (internal_config_parse_results != NULL); self->internal_config = g_value_dup_object (g_hash_table_lookup (internal_config_parse_results, "/")); g_type_ensure (BZ_TYPE_MAIN_CONFIG); #ifdef HARDCODED_MAIN_CONFIG config_file = g_file_new_for_path (HARDCODED_MAIN_CONFIG); config_bytes = g_file_load_bytes (config_file, NULL, NULL, &local_error); if (config_bytes != NULL) { g_autoptr (BzYamlParser) parser = NULL; g_autoptr (GHashTable) parse_results = NULL; parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/main-config-schema.xml"); parse_results = bz_parser_process_bytes ( BZ_PARSER (parser), config_bytes, &local_error); if (parse_results != NULL) { GListModel *override_eol_markings = NULL; self->config = g_value_dup_object (g_hash_table_lookup (parse_results, "/")); override_eol_markings = bz_main_config_get_override_eol_markings (self->config); if (override_eol_markings != NULL) { guint n_appids = 0; self->ignore_eol_set = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_free); n_appids = g_list_model_get_n_items (override_eol_markings); for (guint i = 0; i < n_appids; i++) { g_autoptr (GtkStringObject) string = NULL; const char *value = NULL; string = g_list_model_get_item (override_eol_markings, i); value = gtk_string_object_get_string (string); g_hash_table_replace (self->ignore_eol_set, g_strdup (value), NULL); } } } else { g_warning ("Could not load main config at %s: %s", HARDCODED_MAIN_CONFIG, local_error->message); g_clear_error (&local_error); } } g_clear_error (&local_error); #endif self->init_timer = g_timer_new (); self->ready_to_open_files = dex_promise_new (); self->first_window_opened = dex_promise_new (); if (self->config != NULL && bz_main_config_get_yaml_blocklist_paths (self->config) != NULL) { GListModel *paths = NULL; guint n_paths = 0; paths = bz_main_config_get_yaml_blocklist_paths (self->config); n_paths = g_list_model_get_n_items (paths); for (guint i = 0; i < n_paths; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (paths, i); gtk_string_list_append (blocklists, gtk_string_object_get_string (string)); } } self->blocklists = g_object_ref (blocklists); self->blocklists_to_files = gtk_map_list_model_new ( NULL, (GtkMapListModelMapFunc) map_strings_to_files, NULL, NULL); gtk_map_list_model_set_model ( self->blocklists_to_files, G_LIST_MODEL (self->blocklists)); if (self->config != NULL && bz_main_config_get_txt_blocklist_paths (self->config) != NULL) { GListModel *paths = NULL; guint n_paths = 0; paths = bz_main_config_get_txt_blocklist_paths (self->config); n_paths = g_list_model_get_n_items (paths); for (guint i = 0; i < n_paths; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (paths, i); gtk_string_list_append (txt_blocklists, gtk_string_object_get_string (string)); } } self->txt_blocklists = g_object_ref (txt_blocklists); self->txt_blocklists_to_files = gtk_map_list_model_new ( NULL, (GtkMapListModelMapFunc) map_strings_to_files, NULL, NULL); gtk_map_list_model_set_model ( self->txt_blocklists_to_files, G_LIST_MODEL (self->txt_blocklists)); if (self->config != NULL && bz_main_config_get_curated_config_paths (self->config) != NULL) { GListModel *paths = NULL; guint n_paths = 0; paths = bz_main_config_get_curated_config_paths (self->config); n_paths = g_list_model_get_n_items (paths); for (guint i = 0; i < n_paths; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (paths, i); gtk_string_list_append (curated_configs, gtk_string_object_get_string (string)); } } #ifdef DEVELOPMENT_BUILD if (g_list_model_get_n_items (G_LIST_MODEL (curated_configs)) == 0) { g_autofree char *dest_path = NULL; g_autoptr (GFile) src = NULL; g_autoptr (GFile) dest = NULL; dest_path = g_build_filename (g_get_user_data_dir (), "example.yaml", NULL); src = g_file_new_for_path (DEVELOPMENT_EXAMPLE_YAML); dest = g_file_new_for_path (dest_path); g_file_copy (src, dest, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, NULL); gtk_string_list_append (curated_configs, dest_path); } #endif self->curated_configs = g_object_ref (curated_configs); self->curated_configs_to_files = gtk_map_list_model_new ( NULL, (GtkMapListModelMapFunc) map_strings_to_files, NULL, NULL); gtk_map_list_model_set_model ( self->curated_configs_to_files, G_LIST_MODEL (self->curated_configs)); self->search_biases = gtk_flatten_list_model_new (NULL); self->search_biases_backing = g_list_store_new (G_TYPE_LIST_MODEL); { GListModel *main_config_search_biases = NULL; GListModel *internal_config_search_biases = NULL; if (self->config != NULL) main_config_search_biases = bz_main_config_get_search_biases (self->config); internal_config_search_biases = bz_internal_config_get_search_biases (self->internal_config); /* Main config biases take precedence over the hardcoded ones */ if (main_config_search_biases != NULL) g_list_store_append (self->search_biases_backing, main_config_search_biases); if (internal_config_search_biases != NULL) g_list_store_append (self->search_biases_backing, internal_config_search_biases); } gtk_flatten_list_model_set_model ( self->search_biases, G_LIST_MODEL (self->search_biases_backing)); g_type_ensure (BZ_TYPE_ROOT_BLOCKLIST); g_type_ensure (BZ_TYPE_BLOCKLIST); g_type_ensure (BZ_TYPE_BLOCKLIST_CONDITION); self->blocklist_parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/blocklist-schema.xml"); self->txt_blocklist_parser = bz_newline_parser_new ( TRUE, MAX_IDS_PER_BLOCKLIST); g_type_ensure (BZ_TYPE_ROOT_CURATED_CONFIG); g_type_ensure (BZ_TYPE_CURATED_ROW); g_type_ensure (BZ_TYPE_CURATED_SECTION); g_type_ensure (BZ_TYPE_CURATED_ARTICLE); self->curated_parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/curated-config-schema.xml"); self->cache = bz_entry_cache_manager_new (); self->state = bz_state_info_new (); bz_state_info_set_busy (self->state, TRUE); bz_state_info_set_donation_prompt_dismissed (self->state, TRUE); bz_state_info_set_parental_age_rating (self->state, -1); state_info_set_icon_themes (self->state); { g_autoptr (GError) bus_error = NULL; g_autoptr (GDBusConnection) sys_bus = NULL; sys_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &bus_error); if (sys_bus != NULL) self->malcontent = bz_malcontent_service_new (sys_bus, self->state); else g_warning ("Failed to connect to system bus for malcontent: %s", bus_error->message); if (self->malcontent != NULL) g_signal_connect_swapped ( self->state, "notify::parental-age-rating", G_CALLBACK (show_hide_app_setting_changed), self); } g_signal_connect_swapped ( self->state, "notify::disable-blocklists", G_CALLBACK (disable_blocklists_changed), self); network = g_network_monitor_get_default (); if (network != NULL) { GNetworkConnectivity connectivity = 0; gboolean metered = FALSE; connectivity = g_network_monitor_get_connectivity (network); bz_state_info_set_have_connection (self->state, connectivity == G_NETWORK_CONNECTIVITY_FULL); metered = g_network_monitor_get_network_metered (network); bz_state_info_set_metered_connection (self->state, metered); g_signal_connect_swapped (network, "notify", G_CALLBACK (network_status_changed), self); } else g_warning ("Unable to detect networking device! Continuing anyway..."); app_id = g_application_get_application_id (G_APPLICATION (self)); g_assert (app_id != NULL); g_debug ("Constructing gsettings for %s ...", app_id); self->settings = g_settings_new (app_id); if (g_settings_get_boolean (self->settings, "force-adwaita-icons")) { GtkSettings *gtk_settings = NULL; gtk_settings = gtk_settings_get_default (); g_object_set ( gtk_settings, "gtk-icon-theme-name", "Adwaita", NULL); } bz_state_info_set_hide_eol ( self->state, g_settings_get_boolean (self->settings, "hide-eol")); g_signal_connect_swapped ( self->settings, "changed::hide-eol", G_CALLBACK (show_hide_app_setting_changed), self); bz_state_info_set_show_only_foss ( self->state, g_settings_get_boolean (self->settings, "show-only-foss")); g_signal_connect_swapped ( self->settings, "changed::show-only-foss", G_CALLBACK (show_hide_app_setting_changed), self); bz_state_info_set_show_only_flathub ( self->state, g_settings_get_boolean (self->settings, "show-only-flathub")); g_signal_connect_swapped ( self->settings, "changed::show-only-flathub", G_CALLBACK (show_hide_app_setting_changed), self); bz_state_info_set_show_only_verified ( self->state, g_settings_get_boolean (self->settings, "show-only-verified")); g_signal_connect_swapped ( self->settings, "changed::show-only-verified", G_CALLBACK (show_hide_app_setting_changed), self); self->blocklist_regexes = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_ptr_array_unref); self->blocklists_provider = bz_content_provider_new (); bz_content_provider_set_parser (self->blocklists_provider, BZ_PARSER (self->blocklist_parser)); bz_content_provider_set_input_files ( self->blocklists_provider, G_LIST_MODEL (self->blocklists_to_files)); g_signal_connect_swapped (self->blocklists_provider, "items-changed", G_CALLBACK (blocklists_changed), self); self->txt_blocked_id_sets = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_hash_table_unref); self->txt_blocklists_provider = bz_content_provider_new (); bz_content_provider_set_parser (self->txt_blocklists_provider, BZ_PARSER (self->txt_blocklist_parser)); bz_content_provider_set_input_files ( self->txt_blocklists_provider, G_LIST_MODEL (self->txt_blocklists_to_files)); g_signal_connect_swapped (self->txt_blocklists_provider, "items-changed", G_CALLBACK (txt_blocklists_changed), self); self->groups = g_list_store_new (BZ_TYPE_ENTRY_GROUP); self->installed_apps = g_list_store_new (BZ_TYPE_ENTRY_GROUP); self->ids_to_groups = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_object_unref); self->eol_runtimes = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_free); self->sys_name_to_addons = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref); self->usr_name_to_addons = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref); self->sys_ref_to_addon_group_ids = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref); self->usr_ref_to_addon_group_ids = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref); self->entry_factory = bz_application_map_factory_new ( (GtkMapListModelMapFunc) map_ids_to_entries, self, NULL, NULL, NULL); filter = gtk_custom_filter_new ( (GtkCustomFilterFunc) filter_application_ids, self, NULL); self->appid_filter = g_object_ref_sink (g_steal_pointer (&filter)); self->application_factory = bz_application_map_factory_new ( (GtkMapListModelMapFunc) map_generic_ids_to_groups, self, NULL, NULL, GTK_FILTER (self->appid_filter)); filter = gtk_custom_filter_new ( (GtkCustomFilterFunc) filter_entry_groups, self, NULL); self->group_filter = g_object_ref_sink (g_steal_pointer (&filter)); self->group_filter_model = gtk_filter_list_model_new ( g_object_ref (G_LIST_MODEL (self->groups)), g_object_ref (GTK_FILTER (self->group_filter))); self->search_engine = bz_search_engine_new (); bz_search_engine_set_model (self->search_engine, G_LIST_MODEL (self->group_filter_model)); bz_search_engine_set_biases (self->search_engine, G_LIST_MODEL (self->search_biases)); bz_gnome_shell_search_provider_set_engine (self->gs_search, self->search_engine); self->curated_provider = bz_content_provider_new (); bz_content_provider_set_input_files ( self->curated_provider, G_LIST_MODEL (self->curated_configs_to_files)); bz_content_provider_set_parser (self->curated_provider, BZ_PARSER (self->curated_parser)); self->transactions = bz_transaction_manager_new (); bz_transaction_manager_set_config (self->transactions, self->config); bz_state_info_set_all_entry_groups (self->state, G_LIST_MODEL (self->groups)); bz_state_info_set_all_installed_entry_groups (self->state, G_LIST_MODEL (self->installed_apps)); bz_state_info_set_filtered_entry_groups (self->state, G_LIST_MODEL (self->group_filter_model)); bz_state_info_set_application_factory (self->state, self->application_factory); bz_state_info_set_blocklists (self->state, G_LIST_MODEL (self->blocklists)); bz_state_info_set_blocklists_provider (self->state, self->blocklists_provider); bz_state_info_set_curated_configs (self->state, G_LIST_MODEL (self->curated_configs)); bz_state_info_set_curated_provider (self->state, self->curated_provider); bz_state_info_set_entry_factory (self->state, self->entry_factory); bz_state_info_set_main_config (self->state, self->config); bz_state_info_set_search_engine (self->state, self->search_engine); bz_state_info_set_settings (self->state, self->settings); bz_state_info_set_transaction_manager (self->state, self->transactions); bz_state_info_set_txt_blocklists (self->state, G_LIST_MODEL (self->txt_blocklists)); bz_state_info_set_txt_blocklists_provider (self->state, self->txt_blocklists_provider); bz_state_info_set_cache_manager (self->state, self->cache); g_object_bind_property ( self->state, "allow-manual-sync", g_action_map_lookup_action (G_ACTION_MAP (self), "sync-remotes"), "enabled", G_BINDING_SYNC_CREATE); gtk_style_context_add_provider_for_display ( gdk_display_get_default (), bz_get_pride_style_provider (), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } static GtkWindow * get_or_create_window (BzApplication *self) { GtkWindow *window = NULL; GList *windows = NULL; window = gtk_application_get_active_window (GTK_APPLICATION (self)); if (BZ_IS_WINDOW (window)) { gtk_window_present (window); return window; } windows = gtk_application_get_windows (GTK_APPLICATION (self)); for (GList *l = windows; l != NULL; l = l->next) { if (BZ_IS_WINDOW (l->data)) { gtk_window_present (GTK_WINDOW (l->data)); return GTK_WINDOW (l->data); } } return new_window (self); } static GtkWindow * new_window (BzApplication *self) { BzWindow *window = NULL; g_autoptr (GtkWidget) main_window = NULL; int width = 0; int height = 0; window = bz_window_new (self->state); gtk_application_add_window (GTK_APPLICATION (self), GTK_WINDOW (window)); main_window = g_weak_ref_get (&self->main_window); if (main_window != NULL) { width = gtk_widget_get_width (main_window); height = gtk_widget_get_height (main_window); g_settings_set (self->settings, "window-dimensions", "(ii)", width, height); } else { g_settings_get (self->settings, "window-dimensions", "(ii)", &width, &height); g_signal_connect_object ( window, "close-request", G_CALLBACK (window_close_request), self, G_CONNECT_SWAPPED); g_weak_ref_init (&self->main_window, window); } gtk_window_set_default_size (GTK_WINDOW (window), width, height); gtk_window_present (GTK_WINDOW (window)); if (dex_future_is_pending (DEX_FUTURE (self->first_window_opened))) dex_promise_resolve_boolean (self->first_window_opened, TRUE); return GTK_WINDOW (window); } static void open_appstream_take (BzApplication *self, char *appstream) { const char *id = NULL; g_autoptr (OpenAppstreamData) data = NULL; g_info ("Loading appstream link %s...", appstream); if (g_str_has_prefix (appstream, "appstream://")) id = appstream + strlen ("appstream://"); else id = appstream + strlen ("appstream:"); data = open_appstream_data_new (); data->self = bz_track_weak (self); data->id = g_strdup (id); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) open_appstream_fiber, open_appstream_data_ref (data), open_appstream_data_unref)); g_free (appstream); } static void open_flatpakref_take (BzApplication *self, GFile *file) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *path = NULL; g_autoptr (OpenFlatpakrefData) data = NULL; path = g_file_get_path (file); if (path != NULL) /* We must do this synchronously so we don't lose access to a portal file */ { g_autofree char *basename = NULL; g_autofree char *module_dir = NULL; g_autofree char *staging = NULL; g_autofree char *dest = NULL; g_autoptr (GFile) copied = NULL; basename = g_file_get_basename (file); module_dir = bz_dup_module_dir (); staging = g_build_filename (module_dir, "bundle-staging", NULL); g_mkdir_with_parents (staging, 0755); dest = g_build_filename (staging, basename, NULL); copied = g_file_new_for_path (dest); result = g_file_copy ( file, copied, G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS, NULL, NULL, NULL, &local_error); if (result) { g_clear_object (&file); file = g_steal_pointer (&copied); } else { g_warning ("Failed to copy bundle to %s : %s", dest, local_error->message); g_clear_error (&local_error); g_clear_object (&copied); } } data = open_flatpakref_data_new (); data->self = bz_track_weak (self); data->file = g_steal_pointer (&file); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) open_flatpakref_fiber, open_flatpakref_data_ref (data), open_flatpakref_data_unref)); } static void command_line_open_location (BzApplication *self, GApplicationCommandLine *cmdline, const char *location) { if (g_uri_is_valid (location, G_URI_FLAGS_NONE, NULL)) { if (g_str_has_prefix (location, "appstream:")) open_appstream_take (self, g_strdup (location)); else open_flatpakref_take (self, g_file_new_for_uri (location)); } else if (g_path_is_absolute (location)) open_flatpakref_take (self, g_file_new_for_path (location)); else { const char *cwd = NULL; cwd = g_application_command_line_get_cwd (cmdline); if (cwd != NULL) open_flatpakref_take (self, g_file_new_build_filename (cwd, location, NULL)); else open_flatpakref_take (self, g_file_new_for_path (location)); } } static void open_generic_id (BzApplication *self, const char *generic_id) { BzEntryGroup *group = NULL; GtkWindow *window = NULL; g_autofree char *corrected_id = NULL; const char *original_id = generic_id; const char *matched_id = generic_id; gboolean case_fixed = FALSE; group = g_hash_table_lookup (self->ids_to_groups, generic_id); // This is needed because KDE likes to mangle IDs just for fun... if (group == NULL) { gsize len = 0; len = strlen (generic_id); // if it has more than 3 parts and end with ".desktop" then cut it off. if (len > 8 && g_str_has_suffix (generic_id, ".desktop")) { guint n_dots = 0; const char *suffix = NULL; for (const char *p = strchr (generic_id, '.'); p != NULL; p = strchr (p, '.')) { if (++n_dots >= 3) { suffix = strstr (generic_id, ".desktop"); g_assert (suffix != NULL); break; } } if (suffix != NULL) { corrected_id = g_strndup (generic_id, suffix - generic_id); generic_id = corrected_id; matched_id = corrected_id; group = g_hash_table_lookup (self->ids_to_groups, generic_id); } } if (group == NULL) { GHashTableIter iter = { 0 }; g_hash_table_iter_init (&iter, self->ids_to_groups); for (;;) /* screeching sounds */ { char *key = NULL; BzEntryGroup *value = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &key, (gpointer *) &value)) break; if (g_ascii_strcasecmp (key, generic_id) == 0) { group = value; matched_id = key; case_fixed = TRUE; break; } } } if (group == NULL) matched_id = original_id; } window = get_or_create_window (self); if (group != NULL) { gtk_widget_activate_action (GTK_WIDGET (window), "window.show-group", "s", matched_id); if (case_fixed) bz_show_error_for_widget ( GTK_WIDGET (window), _ ("Malformed Link"), _ ("The link used to open this app has incorrect capitalization and may stop working in the future.\n\n" "This is most likely caused by KRunner sending incorrect app IDs")); } else { g_autofree char *message = NULL; message = g_strdup_printf ("ID '%s' was not found", original_id); bz_show_error_for_widget (GTK_WIDGET (window), _ ("Could not find app"), message); } } static DexFuture * preview_metainfo_then (DexFuture *future, GWeakRef *wr) { g_autoptr (BzApplication) self = NULL; g_autoptr (GError) local_error = NULL; const GValue *value = NULL; BzMetainfoPickResult *result = NULL; g_autoptr (BzEntry) entry = NULL; GtkWindow *window = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, &local_error); if (value == NULL) return dex_future_new_true (); result = g_value_get_boxed (value); window = get_or_create_window (self); entry = bz_appstream_parser_entry_from_metainfo ( result->metainfo_file, result->icon_file, &local_error); if (entry == NULL) { bz_show_error_for_widget (GTK_WIDGET (window), _ ("Failed to load metainfo"), local_error->message); return dex_future_new_true (); } bz_window_show_entry (BZ_WINDOW (window), entry); return dex_future_new_true (); } static gpointer map_strings_to_files (GtkStringObject *string, gpointer data) { const char *path = NULL; GFile *result = NULL; path = gtk_string_object_get_string (string); result = g_file_new_for_path (path); g_object_unref (string); return result; } static gpointer map_generic_ids_to_groups (GtkStringObject *string, BzApplication *self) { BzEntryGroup *group = NULL; group = g_hash_table_lookup ( self->ids_to_groups, gtk_string_object_get_string (string)); g_object_unref (string); return bz_object_maybe_ref (group); } static gpointer map_ids_to_entries (GtkStringObject *string, BzApplication *self) { g_autoptr (GError) local_error = NULL; const char *id = NULL; g_autoptr (DexFuture) future = NULL; g_autoptr (BzResult) result = NULL; id = gtk_string_object_get_string (string); future = bz_entry_cache_manager_get (self->cache, id); result = bz_result_new (future); g_object_unref (string); return g_steal_pointer (&result); } static gboolean filter_application_ids (GtkStringObject *string, BzApplication *self) { BzEntryGroup *group = NULL; group = g_hash_table_lookup ( self->ids_to_groups, gtk_string_object_get_string (string)); if (group != NULL) return validate_group_for_ui (self, group); else return FALSE; } static gboolean filter_entry_groups (BzEntryGroup *group, BzApplication *self) { return validate_group_for_ui (self, group); } static gint cmp_group (BzEntryGroup *a, BzEntryGroup *b, gpointer user_data) { const char *title_a = NULL; const char *title_b = NULL; title_a = bz_entry_group_get_title (a); title_b = bz_entry_group_get_title (b); if (title_a == NULL) return 1; if (title_b == NULL) return -1; return strcasecmp (title_a, title_b); } static gint cmp_entry (BzEntry *a, BzEntry *b, gpointer user_data) { gboolean a_is_runtime = FALSE; gboolean b_is_runtime = FALSE; gboolean a_is_addon = FALSE; gboolean b_is_addon = FALSE; a_is_runtime = bz_entry_is_of_kinds (a, BZ_ENTRY_KIND_RUNTIME); b_is_runtime = bz_entry_is_of_kinds (b, BZ_ENTRY_KIND_RUNTIME); if (a_is_runtime && !b_is_runtime) return -1; if (!a_is_runtime && b_is_runtime) return 1; a_is_addon = bz_entry_is_of_kinds (a, BZ_ENTRY_KIND_ADDON); b_is_addon = bz_entry_is_of_kinds (b, BZ_ENTRY_KIND_ADDON); if (a_is_addon && !b_is_addon) return -1; if (!a_is_addon && b_is_addon) return 1; return 0; } static gboolean validate_group_for_ui (BzApplication *self, BzEntryGroup *group) { const char *id = NULL; int allowed_priority = G_MAXINT; int blocked_priority = G_MAXINT; if (bz_state_info_get_hide_eol (self->state) && bz_entry_group_get_eol (group) != NULL) return FALSE; if (bz_state_info_get_show_only_foss (self->state) && !bz_entry_group_get_is_floss (group)) return FALSE; if (bz_state_info_get_show_only_flathub (self->state) && !bz_entry_group_get_is_flathub (group)) return FALSE; if (bz_state_info_get_show_only_verified (self->state) && !bz_entry_group_get_is_verified (group)) return FALSE; if (self->malcontent != NULL) { int parental_age = -1; int app_age = 0; parental_age = bz_state_info_get_parental_age_rating (self->state); app_age = bz_entry_group_get_content_age_rating (group); if (app_age > parental_age && parental_age != -1) return FALSE; } if (bz_state_info_get_disable_blocklists (self->state)) return TRUE; id = bz_entry_group_get_id (group); for (guint i = 0; i < self->txt_blocked_id_sets->len; i++) { GHashTable *set = NULL; set = g_ptr_array_index (self->txt_blocked_id_sets, i); if (g_hash_table_contains (set, id)) return FALSE; } for (guint i = 0; i < self->blocklist_regexes->len; i++) { GPtrArray *regex_datas = NULL; regex_datas = g_ptr_array_index (self->blocklist_regexes, i); for (guint j = 0; j < regex_datas->len; j++) { BlocklistRegexData *data = NULL; data = g_ptr_array_index (regex_datas, j); if (data->allow != NULL && data->priority < allowed_priority && g_regex_match (data->allow, id, G_REGEX_MATCH_DEFAULT, NULL)) allowed_priority = data->priority; if (data->block != NULL && data->priority < blocked_priority && g_regex_match (data->block, id, G_REGEX_MATCH_DEFAULT, NULL)) blocked_priority = data->priority; } } return allowed_priority <= blocked_priority; } static DexFuture * make_sync_future (BzApplication *self) { g_autoptr (GError) local_error = NULL; g_autoptr (GSubprocess) refresh_worker = NULL; g_autoptr (DexFuture) backend_future = NULL; g_autoptr (DexFuture) flathub_future = NULL; g_autoptr (DexFuture) ret_future = NULL; bz_state_info_set_allow_manual_sync (self->state, FALSE); bz_state_info_set_syncing (self->state, TRUE); bz_state_info_set_recently_synced (self->state, TRUE); finish_with_background_task_label (self); refresh_worker = g_subprocess_new ( G_SUBPROCESS_FLAGS_NONE, &local_error, REFRESH_WORKER_BIN_NAME, NULL); if (refresh_worker == NULL) g_critical ("FATAL!!! The refresh worker could not be spawned: %s", local_error->message); g_assert (refresh_worker != NULL); backend_future = dex_subprocess_wait_check (refresh_worker); backend_future = dex_future_finally ( backend_future, (DexFutureCallback) backend_sync_finally, bz_track_weak (self), bz_weak_release); g_clear_object (&self->tmp_flathub); self->tmp_flathub = bz_flathub_state_new (); flathub_future = bz_flathub_state_update_to_today (self->tmp_flathub); flathub_future = dex_future_finally ( flathub_future, (DexFutureCallback) flathub_update_finally, bz_track_weak (self), bz_weak_release); ret_future = dex_future_all ( dex_ref (backend_future), dex_ref (flathub_future), NULL); ret_future = dex_future_finally ( ret_future, (DexFutureCallback) sync_finally, bz_track_weak (self), bz_weak_release); return g_steal_pointer (&ret_future); } static void finish_with_background_task_label (BzApplication *self) { if (self->n_entries_incoming > 0) bz_state_info_set_background_task_label_take_printf ( self->state, _ ("Loading %d apps…"), self->n_entries_incoming); else if (bz_state_info_get_syncing (self->state)) bz_state_info_set_background_task_label (self->state, _ ("Refreshing…")); else if (bz_state_info_get_busy (self->state)) bz_state_info_set_background_task_label (self->state, _ ("Writing to cache…")); else bz_state_info_set_background_task_label (self->state, NULL); } static void state_info_set_icon_themes (BzStateInfo *state) { g_autoptr (GtkIconTheme) user_theme = NULL; g_autoptr (GtkIconTheme) system_theme = NULL; g_autofree char *user_export_dir = NULL; user_theme = gtk_icon_theme_new (); user_export_dir = g_build_filename (g_get_home_dir (), ".local/share/flatpak/exports/share/icons", NULL); gtk_icon_theme_add_search_path (user_theme, user_export_dir); bz_state_info_set_user_icon_theme (state, user_theme); system_theme = gtk_icon_theme_new (); gtk_icon_theme_add_search_path (system_theme, "/var/lib/flatpak/exports/share/icons"); bz_state_info_set_system_icon_theme (state, system_theme); } bazaar-org-bazaar-b6e9a65/src/bz-application.h000066400000000000000000000020221522167256300213010ustar00rootroot00000000000000/* bz-application.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_APPLICATION (bz_application_get_type ()) G_DECLARE_FINAL_TYPE (BzApplication, bz_application, BZ, APPLICATION, AdwApplication) BzStateInfo * bz_state_info_get_default (void); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-apps-page.blp000066400000000000000000000063411522167256300212110ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAppsPage: Adw.NavigationPage { Adw.ToolbarView { [top] Adw.HeaderBar { [title] Revealer { reveal-child: bind $is_scrolled_down(main_scroll.vadjustment as .value, carousel.visible) as ; transition-type: slide_up; transition-duration: 500; overflow: visible; child: Label { label: bind template.page-title; styles ["title"] }; } } content: Adw.BreakpointBin { width-request: 360; height-request: 100; child: Gtk.ScrolledWindow main_scroll { hscrollbar-policy: never; Adw.Clamp { maximum-size: 1500; tightening-threshold: 1400; Box content_box { orientation: vertical; spacing: 10; margin-start: 30; margin-end: 30; margin-top: 8; margin-bottom: 50; $BzFeaturedCarousel carousel { margin-start: 3; margin-end: 3; margin-bottom: 12; hexpand: true; visible: bind $is_not_null(template.carousel-applications) as ; model: SliceListModel { offset: 0; size: 7; model: bind template.carousel-applications; }; } Box { margin-start: 3; orientation: vertical; Label title { styles [ "title-1", ] label: bind template.page-title; xalign: 0.0; wrap: true; wrap-mode: word_char; } Label subtitle { visible: bind $is_not_empty_string(template.page-subtitle) as ; label: bind template.page-subtitle; margin-top: 4; xalign: 0.0; } $BzSubcategoryList { margin-top: 12; margin-bottom: 8; category: bind template.category; flathub-state: bind template.flathub-state; } } $BzDynamicListView list_view { styles [ "flathub-page-section", ] hexpand: true; scroll: false; valign: start; noscroll-kind: flow-box; child-type: "BzAppTile"; child-prop: "group"; model: bind template.applications; } Button { label: _("Show All"); visible: bind $is_not_empty_list(template.all-applications) as ; halign: center; margin-top: 8; clicked => $show_all_cb(template); styles ["pill"] } } } }; Adw.Breakpoint { condition ("max-width: 700px") setters { content_box.margin-start: 10; content_box.margin-end: 10; list_view.column-spacing: 9; list_view.row-spacing: 9; title.halign: center; title.justify: center; subtitle.halign: center; } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-apps-page.c000066400000000000000000000345241522167256300206620ustar00rootroot00000000000000/* bz-apps-page.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include #include #include "bz-all-apps-page.h" #include "bz-app-tile.h" #include "bz-application.h" #include "bz-apps-page.h" #include "bz-dynamic-list-view.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-flathub-category.h" #include "bz-subcategory-list.h" #include "bz-state-info.h" struct _BzAppsPage { AdwNavigationPage parent_instance; char *title; GListModel *applications; GListModel *all_applications; GListModel *carousel_applications; char *subtitle; BzFlathubCategory *category; /* Template widgets */ }; G_DEFINE_FINAL_TYPE (BzAppsPage, bz_apps_page, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_PAGE_TITLE, PROP_APPLICATIONS, PROP_ALL_APPLICATIONS, PROP_CAROUSEL_APPLICATIONS, PROP_PAGE_SUBTITLE, PROP_CATEGORY, PROP_FLATHUB_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_apps_page_dispose (GObject *object) { BzAppsPage *self = BZ_APPS_PAGE (object); g_clear_pointer (&self->title, g_free); g_clear_object (&self->applications); g_clear_object (&self->all_applications); g_clear_object (&self->carousel_applications); g_clear_pointer (&self->subtitle, g_free); g_clear_object (&self->category); G_OBJECT_CLASS (bz_apps_page_parent_class)->dispose (object); } static void bz_apps_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAppsPage *self = BZ_APPS_PAGE (object); switch (prop_id) { case PROP_PAGE_TITLE: g_value_set_string (value, self->title); break; case PROP_APPLICATIONS: g_value_set_object (value, self->applications); break; case PROP_ALL_APPLICATIONS: g_value_set_object (value, self->all_applications); break; case PROP_CAROUSEL_APPLICATIONS: g_value_set_object (value, self->carousel_applications); break; case PROP_PAGE_SUBTITLE: g_value_set_string (value, self->subtitle); break; case PROP_CATEGORY: g_value_set_object (value, self->category); break; case PROP_FLATHUB_STATE: g_value_set_object (value, bz_state_info_get_flathub(bz_state_info_get_default ())); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_apps_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAppsPage *self = BZ_APPS_PAGE (object); switch (prop_id) { case PROP_PAGE_TITLE: g_clear_pointer (&self->title, g_free); self->title = g_value_dup_string (value); break; case PROP_APPLICATIONS: g_clear_object (&self->applications); self->applications = g_value_dup_object (value); break; case PROP_ALL_APPLICATIONS: g_clear_object (&self->all_applications); self->all_applications = g_value_dup_object (value); break; case PROP_CAROUSEL_APPLICATIONS: g_clear_object (&self->carousel_applications); self->carousel_applications = g_value_dup_object (value); break; case PROP_PAGE_SUBTITLE: g_clear_pointer (&self->subtitle, g_free); self->subtitle = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean is_not_null (gpointer object, GObject *value) { return value != NULL; } static gboolean is_not_empty_string (gpointer object, const char *str) { return str != NULL && str[0] != '\0'; } static gboolean is_not_empty_list (gpointer object, GListModel *list) { return list != NULL && g_list_model_get_n_items (list) > 0; } static gboolean is_scrolled_down (gpointer object, double value, gboolean carousel_visible) { return value > (carousel_visible ? 400.0 : 50.0); } static void featured_carousel_group_clicked_cb (BzAppsPage *self, BzEntryGroup *group, GtkWidget *carousel) { gtk_widget_activate_action (GTK_WIDGET (self), "window.show-group", "s", bz_entry_group_get_id (group)); } static void show_all_cb (BzAppsPage *self, GtkButton *button) { GtkWidget *nav_view = NULL; AdwNavigationPage *all_page = NULL; g_autofree char *all_title = NULL; guint n_items = 0; g_return_if_fail (BZ_IS_APPS_PAGE (self)); if (self->all_applications == NULL) return; n_items = g_list_model_get_n_items (self->all_applications); if (n_items == 0) return; nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (nav_view == NULL) return; all_title = g_strdup_printf (_("All \"%s\""), self->title); all_page = bz_all_apps_page_new (all_title, g_object_ref (self->all_applications)); if (all_page == NULL) return; adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), all_page); } static void bz_apps_page_class_init (BzAppsPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_apps_page_dispose; object_class->get_property = bz_apps_page_get_property; object_class->set_property = bz_apps_page_set_property; props[PROP_PAGE_TITLE] = g_param_spec_string ( "page-title", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_APPLICATIONS] = g_param_spec_object ( "applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_ALL_APPLICATIONS] = g_param_spec_object ( "all-applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_CAROUSEL_APPLICATIONS] = g_param_spec_object ( "carousel-applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_PAGE_SUBTITLE] = g_param_spec_string ( "page-subtitle", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CATEGORY] = g_param_spec_object ( "category", NULL, NULL, BZ_TYPE_FLATHUB_CATEGORY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_FLATHUB_STATE] = g_param_spec_object ( "flathub-state", NULL, NULL, BZ_TYPE_FLATHUB_STATE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_APP_TILE); g_type_ensure (BZ_TYPE_SUBCATEGORY_LIST); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-apps-page.ui"); gtk_widget_class_bind_template_callback (widget_class, is_not_null); gtk_widget_class_bind_template_callback (widget_class, is_not_empty_string); gtk_widget_class_bind_template_callback (widget_class, is_not_empty_list); gtk_widget_class_bind_template_callback (widget_class, is_scrolled_down); gtk_widget_class_bind_template_callback (widget_class, featured_carousel_group_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, show_all_cb); } static void bz_apps_page_init (BzAppsPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwNavigationPage * bz_apps_page_new (const char *title, GListModel *applications) { return bz_apps_page_new_with_carousel (title, applications, NULL); } AdwNavigationPage * bz_apps_page_new_with_carousel (const char *title, GListModel *applications, GListModel *carousel_applications) { BzAppsPage *apps_page = NULL; apps_page = g_object_new ( BZ_TYPE_APPS_PAGE, "page-title", title, "applications", applications, "carousel-applications", carousel_applications, NULL); adw_navigation_page_set_title (ADW_NAVIGATION_PAGE (apps_page), title); return ADW_NAVIGATION_PAGE (apps_page); } static gboolean filter_by_category (BzEntryGroup *group, const char *category_name) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (group), FALSE); g_return_val_if_fail (category_name != NULL, FALSE); return bz_entry_group_has_category (group, category_name); } static DexFuture * filter_applications_fiber (BzAppsPage *self) { g_autoptr (GError) error = NULL; g_autoptr (GtkFilterListModel) filtered_model = NULL; GListModel *all_model = NULL; const char *category_name = NULL; BzStateInfo *state_info = NULL; state_info = bz_state_info_get_default (); if (state_info == NULL) return NULL; all_model = bz_state_info_get_filtered_entry_groups (state_info); if (all_model == NULL) return NULL; category_name = g_object_get_data (G_OBJECT (self), "category-name"); if (category_name == NULL) return NULL; filtered_model = gtk_filter_list_model_new ( g_object_ref (all_model), GTK_FILTER (gtk_custom_filter_new ( (GtkCustomFilterFunc) filter_by_category, g_strdup (category_name), g_free))); g_set_object (&self->all_applications, G_LIST_MODEL (filtered_model)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALL_APPLICATIONS]); return NULL; } static AdwNavigationPage * create_split_page (const char *title, GListModel *model, GListModel *carousel_model) { AdwNavigationPage *apps_page = NULL; guint n_items = g_list_model_get_n_items (model); if (n_items > 48) { g_autoptr (GListModel) limited_model = NULL; limited_model = G_LIST_MODEL (gtk_slice_list_model_new ( g_object_ref (model), 0, 48)); if (carousel_model != NULL && g_list_model_get_n_items (carousel_model) > 0) apps_page = bz_apps_page_new_with_carousel (title, limited_model, carousel_model); else apps_page = bz_apps_page_new (title, limited_model); if (g_set_object (&BZ_APPS_PAGE (apps_page)->all_applications, model)) g_object_notify_by_pspec (G_OBJECT (apps_page), props[PROP_ALL_APPLICATIONS]); } else { if (carousel_model != NULL && g_list_model_get_n_items (carousel_model) > 0) apps_page = bz_apps_page_new_with_carousel (title, model, carousel_model); else apps_page = bz_apps_page_new (title, model); } return apps_page; } static AdwNavigationPage * create_standard_page (const char *title, GListModel *model, GListModel *carousel_model) { if (carousel_model != NULL && g_list_model_get_n_items (carousel_model) > 0) return bz_apps_page_new_with_carousel (title, model, carousel_model); else return bz_apps_page_new (title, model); } static void setup_category_filter (AdwNavigationPage *apps_page, const char *category_name) { if (apps_page == NULL || category_name == NULL || g_strcmp0 (category_name, "adwaita") == 0) return; g_object_set_data_full (G_OBJECT (apps_page), "category-name", g_strdup (category_name), g_free); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) filter_applications_fiber, g_object_ref (apps_page), g_object_unref)); } AdwNavigationPage * bz_apps_page_new_from_category (BzFlathubCategory *category) { g_autoptr (GListModel) model = NULL; g_autoptr (GListModel) carousel_model = NULL; AdwNavigationPage *apps_page = NULL; const char *title = NULL; const char *category_name = NULL; g_autofree char *subtitle = NULL; int total_entries = 0; guint n_items = 0; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (category), NULL); model = bz_flathub_category_dup_applications (category); if (model == NULL) return NULL; title = bz_flathub_category_get_display_name (category); category_name = bz_flathub_category_get_name (category); n_items = g_list_model_get_n_items (model); carousel_model = bz_flathub_category_dup_quality_applications (category); total_entries = bz_flathub_category_get_total_entries (category); if (n_items > 48) apps_page = create_split_page (title, model, carousel_model); else apps_page = create_standard_page (title, model, carousel_model); if (total_entries > 0 && !bz_flathub_category_get_is_spotlight (category)) { subtitle = g_strdup_printf (_ ("%d Applications"), total_entries); bz_apps_page_set_subtitle (BZ_APPS_PAGE (apps_page), subtitle); } BZ_APPS_PAGE(apps_page)->category = g_object_ref (category); g_object_notify_by_pspec (G_OBJECT (apps_page), props[PROP_CATEGORY]); if (n_items <= 48) setup_category_filter (apps_page, category_name); return apps_page; } void bz_apps_page_set_subtitle (BzAppsPage *self, const char *subtitle) { g_return_if_fail (BZ_IS_APPS_PAGE (self)); if (g_strcmp0 (self->subtitle, subtitle) == 0) return; g_clear_pointer (&self->subtitle, g_free); if (subtitle != NULL) self->subtitle = g_strdup (subtitle); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PAGE_SUBTITLE]); } bazaar-org-bazaar-b6e9a65/src/bz-apps-page.h000066400000000000000000000027251522167256300206650ustar00rootroot00000000000000/* bz-apps-page.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include #include "bz-flathub-category.h" G_BEGIN_DECLS #define BZ_TYPE_APPS_PAGE (bz_apps_page_get_type ()) G_DECLARE_FINAL_TYPE (BzAppsPage, bz_apps_page, BZ, APPS_PAGE, AdwNavigationPage) AdwNavigationPage * bz_apps_page_new (const char *title, GListModel *applications); AdwNavigationPage * bz_apps_page_new_with_carousel (const char *title, GListModel *applications, GListModel *carousel_applications); AdwNavigationPage * bz_apps_page_new_from_category (BzFlathubCategory *category); void bz_apps_page_set_subtitle (BzAppsPage *self, const char *subtitle); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-appstream-description-render.blp000066400000000000000000000004661522167256300251300ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzAppstreamDescriptionRender: Adw.Bin { child: Box { orientation: vertical; TextView text_view { notify::has-focus => $text_focus_cb(); editable: false; cursor-visible: false; wrap-mode: word_char; height-request: 25; } }; }bazaar-org-bazaar-b6e9a65/src/bz-appstream-description-render.c000066400000000000000000000514241522167256300245750ustar00rootroot00000000000000/* bz-appstream-description-render.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::APPSTREAM-DESCRIPTION-RENDER" #include "config.h" #include #include "bz-appstream-description-render.h" enum { NO_ELEMENT, PARAGRAPH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, CODE, EMPHASIS, }; struct _BzAppstreamDescriptionRender { AdwBin parent_instance; char *appstream_description; /* Template widgets */ GtkTextView *text_view; }; G_DEFINE_FINAL_TYPE (BzAppstreamDescriptionRender, bz_appstream_description_render, ADW_TYPE_BIN); enum { PROP_0, PROP_APPSTREAM_DESCRIPTION, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void setup_text_tags (GtkTextBuffer *buffer); static void regenerate (BzAppstreamDescriptionRender *self); static void insert (BzAppstreamDescriptionRender *self, GtkTextBuffer *buffer, GtkTextIter *iter, const char *text); static void compile (BzAppstreamDescriptionRender *self, XbNode *node, GtkTextBuffer *buffer, GtkTextIter *iter, int parent_kind, int idx, gboolean is_last_sibling); static char * normalize_whitespace (const char *text); static void on_map (GtkWidget *widget, BzAppstreamDescriptionRender *self); static const char * get_link_at_coords (GtkTextView *text_view, double x, double y); static void on_click_released (GtkGestureClick *gesture, int n_press, double x, double y, GtkTextView *text_view); static void on_motion (GtkEventControllerMotion *controller, double x, double y, GtkTextView *text_view); static void text_focus_cb (GtkTextView *text_view, GParamSpec *pspec, BzAppstreamDescriptionRender *self); static void bz_appstream_description_render_dispose (GObject *object) { BzAppstreamDescriptionRender *self = BZ_APPSTREAM_DESCRIPTION_RENDER (object); g_clear_pointer (&self->appstream_description, g_free); G_OBJECT_CLASS (bz_appstream_description_render_parent_class)->dispose (object); } static void bz_appstream_description_render_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAppstreamDescriptionRender *self = BZ_APPSTREAM_DESCRIPTION_RENDER (object); switch (prop_id) { case PROP_APPSTREAM_DESCRIPTION: g_value_set_string (value, bz_appstream_description_render_get_appstream_description (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_appstream_description_render_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAppstreamDescriptionRender *self = BZ_APPSTREAM_DESCRIPTION_RENDER (object); switch (prop_id) { case PROP_APPSTREAM_DESCRIPTION: bz_appstream_description_render_set_appstream_description (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_appstream_description_render_class_init (BzAppstreamDescriptionRenderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_appstream_description_render_set_property; object_class->get_property = bz_appstream_description_render_get_property; object_class->dispose = bz_appstream_description_render_dispose; props[PROP_APPSTREAM_DESCRIPTION] = g_param_spec_string ( "appstream-description", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-appstream-description-render.ui"); gtk_widget_class_bind_template_child (widget_class, BzAppstreamDescriptionRender, text_view); gtk_widget_class_bind_template_callback (widget_class, text_focus_cb); } static void setup_text_tags (GtkTextBuffer *buffer) { gtk_text_buffer_create_tag (buffer, "code", "family", "monospace", NULL); gtk_text_buffer_create_tag (buffer, "emphasis", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_create_tag (buffer, "paragraph", "pixels-below-lines", 12, NULL); gtk_text_buffer_create_tag (buffer, "list-item-ul", "left-margin", 10, "pixels-below-lines", 4, "indent", -12, NULL); gtk_text_buffer_create_tag (buffer, "list-item-ol", "left-margin", 10, "pixels-below-lines", 4, "indent", -18, NULL); gtk_text_buffer_create_tag (buffer, "list-number", "family", "monospace", "foreground", "gray", NULL); } static void bz_appstream_description_render_init (BzAppstreamDescriptionRender *self) { GtkTextBuffer *buffer = NULL; GtkGesture *click = NULL; GtkEventController *motion = NULL; AdwStyleManager *style_manager = NULL; gtk_widget_init_template (GTK_WIDGET (self)); buffer = gtk_text_view_get_buffer (self->text_view); setup_text_tags (buffer); gtk_widget_remove_css_class (GTK_WIDGET (self->text_view), "view"); g_signal_connect (self, "map", G_CALLBACK (on_map), self); click = gtk_gesture_click_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (click), GDK_BUTTON_PRIMARY); g_signal_connect (click, "released", G_CALLBACK (on_click_released), self->text_view); gtk_widget_add_controller (GTK_WIDGET (self->text_view), GTK_EVENT_CONTROLLER (click)); motion = gtk_event_controller_motion_new (); g_signal_connect (motion, "motion", G_CALLBACK (on_motion), self->text_view); gtk_widget_add_controller (GTK_WIDGET (self->text_view), motion); style_manager = adw_style_manager_get_default (); g_signal_connect_object (style_manager, "notify::accent-color", G_CALLBACK (regenerate), self, G_CONNECT_SWAPPED); } static const char * get_link_at_coords (GtkTextView *text_view, double x, double y) { GtkTextIter iter = { 0 }; int bx = 0; int by = 0; g_autoptr (GSList) tags = NULL; GSList *l = NULL; const char *href = NULL; gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_WIDGET, (int) x, (int) y, &bx, &by); gtk_text_view_get_iter_at_location (text_view, &iter, bx, by); tags = gtk_text_iter_get_tags (&iter); for (l = tags; l != NULL; l = l->next) { href = g_object_get_data (G_OBJECT (l->data), "href"); if (href != NULL) return href; } return NULL; } static void on_click_released (GtkGestureClick *gesture, int n_press, double x, double y, GtkTextView *text_view) { const char *href = NULL; g_autoptr (GtkUriLauncher) launcher = NULL; GtkWindow *root = NULL; href = get_link_at_coords (text_view, x, y); if (href == NULL) return; launcher = gtk_uri_launcher_new (href); root = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (text_view))); gtk_uri_launcher_launch (launcher, root, NULL, NULL, NULL); } static void on_motion (GtkEventControllerMotion *controller, double x, double y, GtkTextView *text_view) { if (get_link_at_coords (text_view, x, y) != NULL) gtk_widget_set_cursor_from_name (GTK_WIDGET (text_view), "pointer"); else gtk_widget_set_cursor (GTK_WIDGET (text_view), NULL); } static void text_focus_cb (GtkTextView *text_view, GParamSpec *pspec, BzAppstreamDescriptionRender *self) { GtkTextBuffer *buffer = NULL; GtkTextIter start = { 0 }; GtkTextIter end = { 0 }; buffer = gtk_text_view_get_buffer (self->text_view); gtk_text_buffer_get_bounds (buffer, &start, &end); if (gtk_widget_has_focus (GTK_WIDGET (text_view))) { g_autofree char *full_text = NULL; full_text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); if (full_text != NULL && *full_text != '\0') gtk_accessible_update_property (GTK_ACCESSIBLE (text_view), GTK_ACCESSIBLE_PROPERTY_LABEL, full_text, -1); gtk_text_buffer_select_range (buffer, &start, &end); } else gtk_text_buffer_place_cursor (buffer, &start); } BzAppstreamDescriptionRender * bz_appstream_description_render_new (void) { return g_object_new (BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER, NULL); } const char * bz_appstream_description_render_get_appstream_description (BzAppstreamDescriptionRender *self) { g_return_val_if_fail (BZ_IS_APPSTREAM_DESCRIPTION_RENDER (self), NULL); return self->appstream_description; } void bz_appstream_description_render_set_appstream_description (BzAppstreamDescriptionRender *self, const char *appstream_description) { g_return_if_fail (BZ_IS_APPSTREAM_DESCRIPTION_RENDER (self)); g_clear_pointer (&self->appstream_description, g_free); if (appstream_description != NULL) self->appstream_description = g_strdup (appstream_description); regenerate (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPSTREAM_DESCRIPTION]); } static void regenerate (BzAppstreamDescriptionRender *self) { g_autoptr (GError) local_error = NULL; g_autoptr (XbSilo) silo = NULL; g_autoptr (XbNode) root = NULL; GtkTextBuffer *buffer = NULL; GtkTextIter iter = { 0 }; int node_count = 0; buffer = gtk_text_view_get_buffer (self->text_view); gtk_text_buffer_set_text (buffer, "", 0); if (self->appstream_description == NULL) return; silo = xb_silo_new_from_xml (self->appstream_description, &local_error); if (silo == NULL) { g_warning ("Failed to parse appstream description XML: %s", local_error->message); return; } gtk_text_buffer_get_end_iter (buffer, &iter); root = xb_silo_get_root (silo); for (XbNode *n = g_object_ref (root); n != NULL;) { XbNode *last = NULL; node_count++; last = n; n = xb_node_get_next (n); g_object_unref (last); } for (int i = 0; root != NULL; i++) { g_autoptr (XbNode) next = NULL; gboolean is_last = (i == node_count - 1); compile (self, root, buffer, &iter, NO_ELEMENT, i, is_last); next = xb_node_get_next (root); g_object_unref (root); root = g_steal_pointer (&next); } } static void insert_url (BzAppstreamDescriptionRender *self, GtkTextBuffer *buffer, GtkTextIter *iter, const char *url) { g_autoptr (GdkRGBA) rgba = NULL; GtkTextTag *tag = NULL; GtkTextMark *mark = NULL; GtkTextIter start = { 0 }; rgba = adw_style_manager_get_accent_color_rgba (adw_style_manager_get_default ()); tag = gtk_text_buffer_create_tag (buffer, NULL, "foreground-rgba", rgba, "underline", PANGO_UNDERLINE_SINGLE, NULL); g_object_set_data_full (G_OBJECT (tag), "href", g_strdup (url), g_free); mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); gtk_text_buffer_insert (buffer, iter, url, -1); gtk_text_buffer_get_iter_at_mark (buffer, &start, mark); gtk_text_buffer_apply_tag (buffer, tag, &start, iter); gtk_text_buffer_delete_mark (buffer, mark); } static void insert (BzAppstreamDescriptionRender *self, GtkTextBuffer *buffer, GtkTextIter *iter, const char *text) { g_auto (GStrv) parts = NULL; const char *p = NULL; const char *http = NULL; const char *https = NULL; const char *url_start = NULL; const char *url_end = NULL; const char *chunk = NULL; GtkTextMark *m = NULL; GtkTextIter si = { 0 }; g_autofree char *url = NULL; int j = 0; parts = g_strsplit (text, "**", -1); for (j = 0; parts[j] != NULL; j++) { chunk = parts[j]; if (j % 2 != 0) { m = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); gtk_text_buffer_insert (buffer, iter, chunk, -1); gtk_text_buffer_get_iter_at_mark (buffer, &si, m); gtk_text_buffer_apply_tag_by_name (buffer, "emphasis", &si, iter); gtk_text_buffer_delete_mark (buffer, m); continue; } p = chunk; while (*p != '\0') { http = strstr (p, "http://"); https = strstr (p, "https://"); url_start = (http != NULL && (https == NULL || http < https)) ? http : https; if (url_start == NULL) { gtk_text_buffer_insert (buffer, iter, p, -1); break; } if (url_start > p) gtk_text_buffer_insert (buffer, iter, p, (int) (url_start - p)); url_end = url_start; while (*url_end != '\0' && !g_unichar_isspace (g_utf8_get_char (url_end))) url_end = g_utf8_next_char (url_end); url = g_strndup (url_start, url_end - url_start); for (char *end = url + strlen (url) - 1; end >= url && strchr (").,!?", *end) != NULL; end--) { *end = '\0'; url_end--; } insert_url (self, buffer, iter, url); p = url_end; } } } static void compile (BzAppstreamDescriptionRender *self, XbNode *node, GtkTextBuffer *buffer, GtkTextIter *iter, int parent_kind, int idx, gboolean is_last_sibling) { const char *element = NULL; const char *text = NULL; XbNode *child = NULL; int kind = NO_ELEMENT; GtkTextMark *start_mark = NULL; int child_count = 0; element = xb_node_get_element (node); text = xb_node_get_text (node); child = xb_node_get_child (node); kind = NO_ELEMENT; start_mark = NULL; if (element != NULL) { if (g_strcmp0 (element, "p") == 0) { kind = PARAGRAPH; start_mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); } else if (g_strcmp0 (element, "ol") == 0) kind = ORDERED_LIST; else if (g_strcmp0 (element, "ul") == 0) kind = UNORDERED_LIST; else if (g_strcmp0 (element, "li") == 0) { kind = LIST_ITEM; start_mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); if (parent_kind == ORDERED_LIST) { g_autofree char *prefix = NULL; GtkTextMark *prefix_start_mark; GtkTextIter prefix_start_iter; prefix_start_mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); prefix = g_strdup_printf ("%d.", idx + 1); gtk_text_buffer_insert (buffer, iter, prefix, -1); gtk_text_buffer_get_iter_at_mark (buffer, &prefix_start_iter, prefix_start_mark); gtk_text_buffer_apply_tag_by_name (buffer, "list-number", &prefix_start_iter, iter); gtk_text_buffer_delete_mark (buffer, prefix_start_mark); } else gtk_text_buffer_insert (buffer, iter, "• ", -1); } else if (g_strcmp0 (element, "code") == 0) { kind = CODE; start_mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); } else if (g_strcmp0 (element, "em") == 0) { kind = EMPHASIS; start_mark = gtk_text_buffer_create_mark (buffer, NULL, iter, TRUE); } } if (text != NULL) { g_autofree char *normalized = NULL; normalized = normalize_whitespace (text); if (normalized != NULL && *normalized != '\0') insert (self, buffer, iter, normalized); } for (int i = 0; child != NULL; i++) { const char *tail = NULL; XbNode *next = NULL; next = xb_node_get_next (child); compile (self, child, buffer, iter, kind, i, next == NULL); tail = xb_node_get_tail (child); if (tail != NULL) { g_autofree char *normalized = NULL; normalized = normalize_whitespace (tail); if (normalized != NULL && *normalized != '\0') insert (self, buffer, iter, normalized); } g_object_unref (child); child = next; child_count++; } if (start_mark != NULL) { GtkTextIter start_iter = { 0 }; gtk_text_buffer_get_iter_at_mark (buffer, &start_iter, start_mark); if (kind == CODE) gtk_text_buffer_apply_tag_by_name (buffer, "code", &start_iter, iter); else if (kind == EMPHASIS) gtk_text_buffer_apply_tag_by_name (buffer, "emphasis", &start_iter, iter); else if (kind == PARAGRAPH) gtk_text_buffer_apply_tag_by_name (buffer, "paragraph", &start_iter, iter); else if (kind == LIST_ITEM) { const char *tag_name = NULL; tag_name = (parent_kind == ORDERED_LIST) ? "list-item-ol" : "list-item-ul"; gtk_text_buffer_apply_tag_by_name (buffer, tag_name, &start_iter, iter); gtk_text_buffer_insert (buffer, iter, "\n", 1); } gtk_text_buffer_delete_mark (buffer, start_mark); } if (kind == PARAGRAPH && !is_last_sibling) gtk_text_buffer_insert (buffer, iter, "\n", 1); else if ((kind == ORDERED_LIST || kind == UNORDERED_LIST) && !is_last_sibling && child_count > 0) gtk_text_buffer_insert (buffer, iter, "\n", 1); } static void on_map (GtkWidget *widget, BzAppstreamDescriptionRender *self) { gtk_widget_queue_resize (GTK_WIDGET (self)); } static char * normalize_whitespace (const char *text) { g_autoptr (GString) result = NULL; gboolean in_space = FALSE; gboolean at_start = TRUE; if (text == NULL) return NULL; result = g_string_new (NULL); for (const char *p = text; p != NULL && *p != '\0'; p = g_utf8_next_char (p)) { gunichar ch = 0; ch = g_utf8_get_char (p); if (g_unichar_isspace (ch)) { if (!at_start && !in_space) in_space = TRUE; } else { if (!at_start && in_space) g_string_append_c (result, ' '); g_string_append_unichar (result, ch); in_space = FALSE; at_start = FALSE; } } return g_string_free (g_steal_pointer (&result), FALSE); } /* End of bz-appstream-description-render.c */ bazaar-org-bazaar-b6e9a65/src/bz-appstream-description-render.h000066400000000000000000000027411522167256300246000ustar00rootroot00000000000000/* bz-appstream-description-render.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER (bz_appstream_description_render_get_type ()) G_DECLARE_FINAL_TYPE (BzAppstreamDescriptionRender, bz_appstream_description_render, BZ, APPSTREAM_DESCRIPTION_RENDER, AdwBin) BzAppstreamDescriptionRender * bz_appstream_description_render_new (void); const char * bz_appstream_description_render_get_appstream_description (BzAppstreamDescriptionRender *self); void bz_appstream_description_render_set_appstream_description (BzAppstreamDescriptionRender *self, const char *appstream_description); G_END_DECLS /* End of bz-appstream-description-render.h */ bazaar-org-bazaar-b6e9a65/src/bz-appstream-parser.c000066400000000000000000000660441522167256300222750ustar00rootroot00000000000000/* bz-appstream-parser.c */ #define G_LOG_DOMAIN "BAZAAR::APPSTREAM-PARSER" #define BAZAAR_MODULE "appstream-parser" #include "config.h" #include #include "bz-appstream-parser.h" #include "bz-async-texture.h" #include "bz-category-flags.h" #include "bz-io.h" #include "bz-release.h" #include "bz-url.h" #include "bz-verification-status.h" #include "bz-flatpak-entry.h" static guint parse_control_value (const char *value) { if (g_strcmp0 (value, "pointing") == 0) return BZ_CONTROL_POINTING; else if (g_strcmp0 (value, "keyboard") == 0) return BZ_CONTROL_KEYBOARD; else if (g_strcmp0 (value, "console") == 0) return BZ_CONTROL_CONSOLE; else if (g_strcmp0 (value, "tablet") == 0) return BZ_CONTROL_TABLET; else if (g_strcmp0 (value, "touch") == 0) return BZ_CONTROL_TOUCH; else if (g_strcmp0 (value, "gamepad") == 0) return BZ_CONTROL_GAMEPAD; else if (g_strcmp0 (value, "tv-remote") == 0) return BZ_CONTROL_TV_REMOTE; else if (g_strcmp0 (value, "voice") == 0) return BZ_CONTROL_VOICE; else if (g_strcmp0 (value, "vision") == 0) return BZ_CONTROL_VISION; else return 0; } static gboolean calculate_is_mobile_friendly (guint required_controls, guint recommended_controls, guint supported_controls) { return (required_controls & BZ_CONTROL_TOUCH) != 0 || (recommended_controls & BZ_CONTROL_TOUCH) != 0 || (supported_controls & BZ_CONTROL_TOUCH) != 0; } static char * proxy_screenshot_url (const char *url, gboolean high_quality) { g_autofree char *src = NULL; g_autofree char *encoded_url = NULL; const char *suffix = NULL; if (g_str_has_prefix (url, "https://dl.flathub.org/repo/screenshots/")) { suffix = url + strlen ("https://dl.flathub.org/repo/screenshots/"); src = g_strdup_printf ("https://dl.flathub.org/media/%s", suffix); } else if (g_str_has_prefix (url, "https://dl.flathub.org/")) { src = g_strdup (url); } else { return g_strdup (url); } encoded_url = g_base64_encode ((const guchar *) src, strlen (src)); g_strdelimit (encoded_url, "=", '\0'); for (char *p = encoded_url; *p; p++) { if (*p == '+') *p = '-'; if (*p == '/') *p = '_'; } return g_strdup_printf ( "https://imgproxy.flathub.org/insecure/%s/%s", high_quality ? "q:90/f:avif" : "dpr:1/f:avif/rs:fill-down", encoded_url); } static GdkPaintable * find_screenshot (GPtrArray *images, const char *caption, gboolean match_highest, guint target_width, guint target_height, gboolean require_flathub, const char *module_dir, const char *unique_id_checksum, const char *cache_filename, char **out_caption) { const char *best_url = NULL; gint best_diff = G_MAXINT; guint best_res = 0; guint target_pixels = target_width * target_height; if (images == NULL) return NULL; for (guint j = 0; j < images->len; j++) { AsImage *image_obj = g_ptr_array_index (images, j); const char *url = as_image_get_url (image_obj); guint width = as_image_get_width (image_obj); guint height = as_image_get_height (image_obj); guint pixels = width * height; if (url == NULL) continue; if (require_flathub && !g_str_has_prefix (url, "https://dl.flathub.org/")) continue; if (match_highest) { if (best_url == NULL || pixels > best_res) { best_url = url; best_res = pixels; } } else { gint diff = ABS ((gint) pixels - (gint) target_pixels); if (best_url == NULL || diff < best_diff) { best_url = url; best_diff = diff; } } } if (best_url != NULL) { g_autoptr (GFile) screenshot_file = NULL; g_autoptr (GFile) cache_file = NULL; g_autofree char *proxied_url = NULL; BzAsyncTexture *texture = NULL; proxied_url = proxy_screenshot_url (best_url, match_highest); screenshot_file = g_file_new_for_uri (proxied_url); cache_file = g_file_new_build_filename ( module_dir, unique_id_checksum, cache_filename, NULL); texture = bz_async_texture_new_lazy (screenshot_file, cache_file); if (out_caption != NULL) *out_caption = g_strdup (caption ? caption : ""); return GDK_PAINTABLE (texture); } return NULL; } gboolean bz_appstream_parser_populate_entry (BzEntry *entry, AsComponent *component, const char *appstream_dir, const char *remote_name, const char *module_dir, const char *unique_id_checksum, const char *id, guint kinds, GError **error) { AsDeveloper *developer_obj = NULL; GPtrArray *screenshots = NULL; AsReleaseList *releases = NULL; GPtrArray *releases_arr = NULL; GPtrArray *icons = NULL; AsBranding *branding = NULL; GPtrArray *requires_relations = NULL; GPtrArray *recommends_relations = NULL; GPtrArray *supports_relations = NULL; const char *title = NULL; const char *description = NULL; const char *metadata_license = NULL; const char *project_license = NULL; gboolean is_floss = FALSE; const char *project_group = NULL; const char *developer = NULL; const char *developer_id = NULL; const char *long_description = NULL; const char *project_url = NULL; g_autoptr (GPtrArray) as_search_tokens = NULL; g_autofree char *search_tokens = NULL; g_autoptr (GdkPaintable) icon_paintable = NULL; g_autoptr (GIcon) mini_icon = NULL; g_autoptr (GListStore) screenshot_paintables = NULL; g_autoptr (GListStore) screenshot_captions = NULL; g_autoptr (GdkPaintable) thumbnail_paintable = NULL; g_autoptr (GListStore) share_urls = NULL; g_autofree char *donation_url = NULL; g_autofree char *ratings_summary = NULL; g_autoptr (GListStore) version_history = NULL; const char *accent_color_light = NULL; const char *accent_color_dark = NULL; guint required_controls = 0; guint recommended_controls = 0; guint supported_controls = 0; gint min_display_length = 0; gint max_display_length = 0; gboolean is_mobile_friendly = FALSE; g_autoptr (AsContentRating) content_rating = NULL; GPtrArray *as_keywords = NULL; g_autoptr (GListStore) keywords = NULL; GPtrArray *as_categories = NULL; BzCategoryFlags categories = BZ_CATEGORY_FLAGS_NONE; g_autoptr (BzVerificationStatus) verification_status = NULL; g_return_val_if_fail (BZ_IS_ENTRY (entry), FALSE); g_return_val_if_fail (AS_IS_COMPONENT (component), FALSE); title = as_component_get_name (component); if (title == NULL) title = as_component_get_id (component); description = as_component_get_summary (component); metadata_license = as_component_get_metadata_license (component); project_license = as_component_get_project_license (component); is_floss = as_component_is_floss (component); project_group = as_component_get_project_group (component); project_url = as_component_get_url (component, AS_URL_KIND_HOMEPAGE); as_search_tokens = as_component_get_search_tokens (component); developer_obj = as_component_get_developer (component); if (developer_obj != NULL) { developer = as_developer_get_name (developer_obj); developer_id = as_developer_get_id (developer_obj); } long_description = as_component_get_description (component); screenshots = as_component_get_screenshots_all (component); if (screenshots != NULL) { screenshot_paintables = g_list_store_new (BZ_TYPE_ASYNC_TEXTURE); screenshot_captions = g_list_store_new (GTK_TYPE_STRING_OBJECT); for (guint i = 0; i < screenshots->len; i++) { AsScreenshot *screenshot = NULL; GPtrArray *images = NULL; const gchar *caption = NULL; g_autofree char *caption_str = NULL; g_autoptr (GdkPaintable) paintable = NULL; g_autofree char *cache_name = NULL; screenshot = g_ptr_array_index (screenshots, i); images = as_screenshot_get_images_all (screenshot); caption = as_screenshot_get_caption (screenshot); if (i == 0 && thumbnail_paintable == NULL) { thumbnail_paintable = find_screenshot (images, caption, FALSE, 400, 300, TRUE, module_dir, unique_id_checksum, "thumbnail", NULL); if (thumbnail_paintable == NULL) thumbnail_paintable = find_screenshot (images, caption, FALSE, 400, 300, FALSE, module_dir, unique_id_checksum, "thumbnail", NULL); } cache_name = g_strdup_printf ("screenshot_%u", i); paintable = find_screenshot (images, caption, TRUE, 0, 0, TRUE, module_dir, unique_id_checksum, cache_name, &caption_str); if (paintable == NULL) paintable = find_screenshot (images, caption, TRUE, 0, 0, FALSE, module_dir, unique_id_checksum, cache_name, &caption_str); if (paintable != NULL) { g_autoptr (GtkStringObject) caption_obj = NULL; g_list_store_append (screenshot_paintables, paintable); caption_obj = gtk_string_object_new (caption_str); g_list_store_append (screenshot_captions, caption_obj); } } } share_urls = g_list_store_new (BZ_TYPE_URL); if (kinds & BZ_ENTRY_KIND_APPLICATION && g_strcmp0 (remote_name, "flathub") == 0) { g_autofree char *flathub_url = NULL; g_autoptr (BzUrl) url = NULL; flathub_url = g_strdup_printf ("https://flathub.org/apps/%s", id); url = bz_url_new (); bz_url_set_id (url, "flathub"); bz_url_set_url (url, flathub_url); g_list_store_append (share_urls, url); } for (int e = AS_URL_KIND_UNKNOWN + 1; e < AS_URL_KIND_LAST; e++) { const char *url = NULL; url = as_component_get_url (component, e); if (url != NULL) { g_autoptr (BzUrl) share_url = NULL; switch (e) { case AS_URL_KIND_DONATION: g_clear_pointer (&donation_url, g_free); donation_url = g_strdup (url); break; default: break; } share_url = g_object_new ( BZ_TYPE_URL, "id", as_url_kind_to_string (e), "url", url, NULL); g_list_store_append (share_urls, share_url); } } // make it even so the link colums stay neat. if (g_strcmp0 (remote_name, "flathub") == 0 && g_list_model_get_n_items (G_LIST_MODEL (share_urls)) % 2 != 0) { g_autofree char *manifest_url = NULL; g_autoptr (BzUrl) url = NULL; manifest_url = g_strdup_printf ("https://github.com/flathub/%s", id); url = g_object_new (BZ_TYPE_URL, "id", "manifest", "url", manifest_url, NULL); g_list_store_append (share_urls, url); } if (g_list_model_get_n_items (G_LIST_MODEL (share_urls)) == 0) g_clear_object (&share_urls); releases = as_component_load_releases (component, TRUE, error); if (releases == NULL) return FALSE; releases_arr = as_release_list_get_entries (releases); if (releases_arr != NULL) { version_history = g_list_store_new (BZ_TYPE_RELEASE); for (guint i = 0; i < releases_arr->len; i++) { AsRelease *as_release = NULL; const char *release_description = NULL; g_autoptr (BzRelease) release = NULL; as_release = g_ptr_array_index (releases_arr, i); release_description = as_release_get_description (as_release); release = g_object_new ( BZ_TYPE_RELEASE, "description", release_description, "timestamp", as_release_get_timestamp (as_release), "url", as_release_get_url (as_release, AS_RELEASE_URL_KIND_DETAILS), "version", as_release_get_version (as_release), NULL); g_list_store_append (version_history, release); } } icons = as_component_get_icons (component); if (icons != NULL) { g_autofree char *select = NULL; gboolean select_is_local = FALSE; int select_width = 0; int select_height = 0; for (guint i = 0; i < icons->len; i++) { AsIcon *icon = NULL; int width = 0; int height = 0; gboolean is_local = FALSE; icon = g_ptr_array_index (icons, i); width = as_icon_get_width (icon); height = as_icon_get_height (icon); is_local = as_icon_get_kind (icon) != AS_ICON_KIND_REMOTE; if (select == NULL || (is_local && !select_is_local) || (width > select_width && height > select_height)) { if (is_local) { const char *filename = NULL; g_autofree char *resolution = NULL; g_autofree char *path = NULL; filename = as_icon_get_filename (icon); if (filename == NULL) continue; resolution = g_strdup_printf ("%dx%d", width, height); path = g_build_filename ( appstream_dir, "icons", "flatpak", resolution, filename, NULL); if (!g_file_test (path, G_FILE_TEST_EXISTS)) continue; g_clear_pointer (&select, g_free); select = g_steal_pointer (&path); select_is_local = TRUE; select_width = width; select_height = height; } else { const char *url = NULL; url = as_icon_get_url (icon); if (url == NULL) continue; g_clear_pointer (&select, g_free); select = g_strdup (url); select_is_local = FALSE; select_width = width; select_height = height; } } } if (select != NULL) { g_autofree char *select_uri = NULL; g_autoptr (GFile) source = NULL; g_autoptr (GFile) cache_into = NULL; BzAsyncTexture *texture = NULL; if (select_is_local) select_uri = g_strdup_printf ("file://%s", select); else select_uri = g_steal_pointer (&select); source = g_file_new_for_uri (select_uri); cache_into = g_file_new_build_filename ( module_dir, unique_id_checksum, "icon-paintable.png", NULL); texture = bz_async_texture_new_lazy (source, cache_into); icon_paintable = GDK_PAINTABLE (texture); if (select_is_local) mini_icon = bz_load_mini_icon_sync (unique_id_checksum, select); } } branding = as_component_get_branding (component); if (branding != NULL) { accent_color_light = as_branding_get_color ( branding, AS_COLOR_KIND_PRIMARY, AS_COLOR_SCHEME_KIND_LIGHT); accent_color_dark = as_branding_get_color ( branding, AS_COLOR_KIND_PRIMARY, AS_COLOR_SCHEME_KIND_DARK); } content_rating = as_component_get_content_rating (component, "oars-1.1"); if (content_rating != NULL) { g_object_ref (content_rating); } else { content_rating = as_component_get_content_rating (component, "oars-1.0"); if (content_rating != NULL) g_object_ref (content_rating); } requires_relations = as_component_get_requires (component); recommends_relations = as_component_get_recommends (component); supports_relations = as_component_get_supports (component); if (requires_relations != NULL) { for (guint i = 0; i < requires_relations->len; i++) { AsRelation *relation = g_ptr_array_index (requires_relations, i); AsRelationItemKind item_kind = as_relation_get_item_kind (relation); if (item_kind == AS_RELATION_ITEM_KIND_CONTROL) { AsControlKind control_kind = as_relation_get_value_control_kind (relation); const char *control_str = as_control_kind_to_string (control_kind); if (control_str != NULL) required_controls |= parse_control_value (control_str); } else if (item_kind == AS_RELATION_ITEM_KIND_DISPLAY_LENGTH) { AsRelationCompare compare = as_relation_get_compare (relation); gint value = as_relation_get_value_int (relation); if (compare == AS_RELATION_COMPARE_GE) min_display_length = value; } } } if (recommends_relations != NULL) { for (guint i = 0; i < recommends_relations->len; i++) { AsRelation *relation = g_ptr_array_index (recommends_relations, i); AsRelationItemKind item_kind = as_relation_get_item_kind (relation); if (item_kind == AS_RELATION_ITEM_KIND_CONTROL) { AsControlKind control_kind = as_relation_get_value_control_kind (relation); const char *control_str = as_control_kind_to_string (control_kind); if (control_str != NULL) recommended_controls |= parse_control_value (control_str); } } } if (supports_relations != NULL) { for (guint i = 0; i < supports_relations->len; i++) { AsRelation *relation = g_ptr_array_index (supports_relations, i); AsRelationItemKind item_kind = as_relation_get_item_kind (relation); if (item_kind == AS_RELATION_ITEM_KIND_CONTROL) { AsControlKind control_kind = as_relation_get_value_control_kind (relation); const char *control_str = as_control_kind_to_string (control_kind); if (control_str != NULL) supported_controls |= parse_control_value (control_str); } else if (item_kind == AS_RELATION_ITEM_KIND_DISPLAY_LENGTH) { AsRelationCompare compare = as_relation_get_compare (relation); gint value = as_relation_get_value_int (relation); if (compare == AS_RELATION_COMPARE_LE) max_display_length = value; } } } is_mobile_friendly = calculate_is_mobile_friendly (required_controls, recommended_controls, supported_controls); if (as_search_tokens != NULL) { g_autoptr (GStrvBuilder) builder = NULL; g_auto (GStrv) strv = NULL; builder = g_strv_builder_new (); for (guint i = 0; i < as_search_tokens->len; i++) { const char *token = NULL; token = g_ptr_array_index (as_search_tokens, i); g_strv_builder_add (builder, token); } strv = g_strv_builder_end (builder); search_tokens = g_strjoinv (" ", strv); } as_keywords = as_component_get_keywords (component); if (as_keywords != NULL && as_keywords->len > 0) { keywords = g_list_store_new (GTK_TYPE_STRING_OBJECT); for (guint i = 0; i < as_keywords->len; i++) { const char *keyword = NULL; g_autoptr (GtkStringObject) keyword_obj = NULL; keyword = g_ptr_array_index (as_keywords, i); keyword_obj = gtk_string_object_new (keyword); g_list_store_append (keywords, keyword_obj); } } as_categories = as_component_get_categories (component); if (as_categories != NULL) { for (guint i = 0; i < as_categories->len; i++) { const char *name = NULL; name = g_ptr_array_index (as_categories, i); categories = bz_category_flags_add (categories, name); } } if (is_mobile_friendly) categories = bz_category_flags_add (categories, "mobile"); if (g_strcmp0 (remote_name, "flathub") == 0) { const char *verified_str = NULL; const char *method = NULL; const char *website = NULL; const char *login_name = NULL; const char *login_provider = NULL; const char *timestamp = NULL; const char *login_is_org_str = NULL; gboolean verified = FALSE; gboolean login_is_org = FALSE; GHashTable *custom_fields = NULL; custom_fields = as_component_get_custom (component); if (custom_fields != NULL) { verified_str = g_hash_table_lookup (custom_fields, "flathub::verification::verified"); method = g_hash_table_lookup (custom_fields, "flathub::verification::method"); website = g_hash_table_lookup (custom_fields, "flathub::verification::website"); login_name = g_hash_table_lookup (custom_fields, "flathub::verification::login_name"); login_provider = g_hash_table_lookup (custom_fields, "flathub::verification::login_provider"); timestamp = g_hash_table_lookup (custom_fields, "flathub::verification::timestamp"); login_is_org_str = g_hash_table_lookup (custom_fields, "flathub::verification::login_is_organization"); } verified = (verified_str != NULL && g_strcmp0 (verified_str, "true") == 0); login_is_org = (login_is_org_str != NULL && g_strcmp0 (login_is_org_str, "true") == 0); verification_status = bz_verification_status_new (); g_object_set (verification_status, "verified", verified, "method", method, "website", website, "login-name", login_name, "login-provider", login_provider, "timestamp", timestamp, "login-is-organization", login_is_org, NULL); } g_object_set ( entry, "title", title, "description", description, "long-description", long_description, "url", project_url, "search-tokens", search_tokens, "metadata-license", metadata_license, "project-license", project_license, "is-floss", is_floss, "project-group", project_group, "developer", developer, "developer-id", developer_id, "icon-paintable", icon_paintable, "mini-icon", mini_icon, "screenshot-paintables", screenshot_paintables, "screenshot-captions", screenshot_captions, "thumbnail-paintable", thumbnail_paintable, "share-urls", share_urls, "donation-url", donation_url, "ratings-summary", ratings_summary, "version-history", version_history, "light-accent-color", accent_color_light, "dark-accent-color", accent_color_dark, "required-controls", required_controls, "recommended-controls", recommended_controls, "supported-controls", supported_controls, "min-display-length", min_display_length, "max-display-length", max_display_length, "is-mobile-friendly", is_mobile_friendly, "content-rating", content_rating, "keywords", keywords, "categories", categories, "verification-status", verification_status, NULL); return TRUE; } BzEntry * bz_appstream_parser_entry_from_metainfo (GFile *metainfo_file, GFile *icon_file, GError **error) { g_autoptr (AsMetadata) mdata = as_metadata_new (); AsComponent *component = NULL; g_autofree char *xml_contents = NULL; g_autofree char *xml_path = NULL; g_autofree char *xml_dir = NULL; g_autofree char *module_dir = NULL; g_autofree char *checksum = NULL; gsize xml_length = 0; g_autoptr (BzEntry) entry = NULL; g_return_val_if_fail (G_IS_FILE (metainfo_file), NULL); xml_path = g_file_get_path (metainfo_file); if (!g_file_get_contents (xml_path, &xml_contents, &xml_length, error)) return NULL; as_metadata_parse_data (mdata, xml_contents, xml_length, AS_FORMAT_KIND_XML, error); if (*error != NULL) return NULL; component = as_metadata_get_component (mdata); if (component == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No component found in metainfo file"); return NULL; } xml_dir = g_path_get_dirname (xml_path); module_dir = bz_dup_module_dir (); checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, xml_path, -1); entry = BZ_ENTRY (g_object_new (BZ_TYPE_FLATPAK_ENTRY, NULL)); bz_appstream_parser_populate_entry ( entry, component, xml_dir, "local-preview", module_dir, checksum, as_component_get_id (component), BZ_ENTRY_KIND_APPLICATION, NULL); g_object_set (entry, "remote-repo-name", "local-preview", NULL); if (icon_file != NULL) { g_autoptr (GFile) cache_into = NULL; cache_into = g_file_new_build_filename ( module_dir, checksum, "icon-paintable.png", NULL); g_object_set ( entry, "icon-paintable", GDK_PAINTABLE (bz_async_texture_new_lazy (icon_file, cache_into)), NULL); } return g_steal_pointer (&entry); } bazaar-org-bazaar-b6e9a65/src/bz-appstream-parser.h000066400000000000000000000032321522167256300222700ustar00rootroot00000000000000/* bz-appstream-parser.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-entry.h" #include #include G_BEGIN_DECLS gboolean bz_appstream_parser_populate_entry (BzEntry *entry, AsComponent *component, const char *appstream_dir, const char *remote_name, const char *module_dir, const char *unique_id_checksum, const char *id, guint kinds, GError **error); BzEntry * bz_appstream_parser_entry_from_metainfo (GFile *metainfo_file, GFile *icon_file, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-article-list-view.c000066400000000000000000000200041522167256300223350ustar00rootroot00000000000000/* bz-article-list-view.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-article-list-view.h" #include "bz-article-tile.h" #include "bz-curated-article.h" #include "bz-curated-articles-info.h" #include "bz-dynamic-list-view.h" #include "bz-env.h" #include "bz-global-net.h" #include "bz-parser.h" #include "bz-yaml-parser.h" struct _BzArticleListView { AdwBin parent_instance; BzCuratedArticlesInfo *articles; GtkWidget *list_view; }; G_DEFINE_FINAL_TYPE (BzArticleListView, bz_article_list_view, ADW_TYPE_BIN) enum { PROP_0, PROP_ARTICLES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * load_articles_fiber (BzCuratedArticlesInfo *info); static void load_articles_then (DexFuture *future, BzArticleListView *self); static void bz_article_list_view_dispose (GObject *object) { BzArticleListView *self = BZ_ARTICLE_LIST_VIEW (object); g_clear_object (&self->articles); G_OBJECT_CLASS (bz_article_list_view_parent_class)->dispose (object); } static void bz_article_list_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzArticleListView *self = BZ_ARTICLE_LIST_VIEW (object); switch (prop_id) { case PROP_ARTICLES: g_value_set_object (value, bz_article_list_view_get_articles (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_article_list_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzArticleListView *self = BZ_ARTICLE_LIST_VIEW (object); switch (prop_id) { case PROP_ARTICLES: bz_article_list_view_set_articles (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void on_bind_widget (BzDynamicListView *list_view, GtkWidget *widget, GObject *object, BzArticleListView *self) { if (!BZ_IS_ARTICLE_TILE (widget) || self->articles == NULL) return; g_object_bind_property (self->articles, "aspect-ratio", BZ_ARTICLE_TILE (widget), "aspect-ratio", G_BINDING_SYNC_CREATE); } static void bz_article_list_view_class_init (BzArticleListViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_article_list_view_dispose; object_class->get_property = bz_article_list_view_get_property; object_class->set_property = bz_article_list_view_set_property; props[PROP_ARTICLES] = g_param_spec_object ( "articles", NULL, NULL, BZ_TYPE_CURATED_ARTICLES_INFO, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); g_type_ensure (BZ_TYPE_ARTICLE_TILE); } static void bz_article_list_view_init (BzArticleListView *self) { self->list_view = g_object_new ( BZ_TYPE_DYNAMIC_LIST_VIEW, "hexpand", TRUE, "scroll", FALSE, "noscroll-kind", BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX, "child-type", "BzArticleTile", "child-prop", "article", "margin-top", 12, NULL); g_signal_connect (self->list_view, "bind-widget", G_CALLBACK (on_bind_widget), self); adw_bin_set_child (ADW_BIN (self), self->list_view); } GtkWidget * bz_article_list_view_new (BzCuratedArticlesInfo *articles) { return g_object_new ( BZ_TYPE_ARTICLE_LIST_VIEW, "articles", articles, NULL); } void bz_article_list_view_set_articles (BzArticleListView *self, BzCuratedArticlesInfo *articles) { g_autoptr (DexFuture) future = NULL; g_return_if_fail (BZ_IS_ARTICLE_LIST_VIEW (self)); g_return_if_fail (articles == NULL || BZ_IS_CURATED_ARTICLES_INFO (articles)); g_clear_object (&self->articles); if (articles != NULL) self->articles = g_object_ref (articles); g_object_set (self->list_view, "model", NULL, NULL); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ARTICLES]); if (articles == NULL) return; future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) load_articles_fiber, g_object_ref (articles), g_object_unref); future = dex_future_then ( future, (DexFutureCallback) load_articles_then, g_object_ref (self), g_object_unref); dex_future_disown (g_steal_pointer (&future)); } BzCuratedArticlesInfo * bz_article_list_view_get_articles (BzArticleListView *self) { g_return_val_if_fail (BZ_IS_ARTICLE_LIST_VIEW (self), NULL); return self->articles; } static DexFuture * load_articles_fiber (BzCuratedArticlesInfo *info) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (BzYamlParser) parser = NULL; g_autoptr (GHashTable) results = NULL; g_autoptr (GListStore) store = NULL; const char *uri = NULL; GListModel *fallback = NULL; GValue *value = NULL; GPtrArray *list = NULL; uri = bz_curated_articles_info_get_uri (info); fallback = bz_curated_articles_info_get_list (info); if (uri == NULL) goto use_fallback; bytes = dex_await_boxed (bz_fetch_uri_contents (uri), &local_error); if (bytes == NULL) { g_warning ("Failed to fetch articles from %s: %s", uri, local_error->message); goto use_fallback; } g_type_ensure (BZ_TYPE_CURATED_ARTICLE); parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/article-list-schema.xml"); results = bz_parser_process_bytes (BZ_PARSER (parser), bytes, &local_error); if (results == NULL) { g_warning ("Failed to parse articles yaml: %s", local_error->message); goto use_fallback; } value = g_hash_table_lookup (results, "/"); list = g_value_get_boxed (value); store = g_list_store_new (BZ_TYPE_CURATED_ARTICLE); for (guint i = 0; i < list->len; i++) { GHashTable *item = g_value_get_boxed (g_ptr_array_index (list, i)); GValue *v = g_hash_table_lookup (item, "/"); BzCuratedArticle *article = g_value_get_object (v); g_list_store_append (store, article); } return dex_future_new_take_object (g_steal_pointer (&store)); use_fallback: return dex_future_new_take_object ( fallback != NULL ? g_object_ref (fallback) : (GListModel *) g_list_store_new (BZ_TYPE_CURATED_ARTICLE)); } static void load_articles_then (DexFuture *future, BzArticleListView *self) { g_autoptr (GError) local_error = NULL; const GValue *value = NULL; GListModel *model = NULL; value = dex_future_get_value (future, &local_error); if (value == NULL) { g_warning ("Failed to load articles: %s", local_error->message); return; } model = g_value_get_object (value); g_object_set (self->list_view, "model", model, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-article-list-view.h000066400000000000000000000024621522167256300223520ustar00rootroot00000000000000/* bz-article-list-view.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-curated-articles-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_ARTICLE_LIST_VIEW (bz_article_list_view_get_type ()) G_DECLARE_FINAL_TYPE (BzArticleListView, bz_article_list_view, BZ, ARTICLE_LIST_VIEW, AdwBin) GtkWidget * bz_article_list_view_new (BzCuratedArticlesInfo *articles); BzCuratedArticlesInfo * bz_article_list_view_get_articles (BzArticleListView *self); void bz_article_list_view_set_articles (BzArticleListView *self, BzCuratedArticlesInfo *articles); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-article-tile.blp000066400000000000000000000032671522167256300217160ustar00rootroot00000000000000using Gtk 4.0; template $BzArticleTile: $BzListTile { overflow: hidden; activated => $tile_clicked_cb(); halign: fill; width-request: 275; accessibility { described-by: description; } child: Box { orientation: vertical; styles [ "rich-tile-card", ] Box picture_box { styles [ "rich-screenshot-box", ] Image { icon-name: "image-missing-symbolic"; pixel-size: 96; halign: center; valign: center; hexpand: true; visible: bind picture.visible inverted; } $BzAspectPicture picture { hexpand: true; ratio: bind try{$get_aspect_ratio(template.aspect-ratio) as , 1.77}; paintable: bind $get_image(template.article as <$BzCuratedArticle>.image) as <$GdkPaintable>; } } Box { margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; orientation: vertical; spacing: 5; height-request: 60; Label title { css-name: "app-tile-title"; styles [ "heading", ] ellipsize: end; xalign: 0; label: bind template.article as <$BzCuratedArticle>.title; max-width-chars: 18; } Label description { css-name: "app-tile-description"; xalign: 0.0; yalign: 0.0; wrap: true; wrap-mode: word_char; ellipsize: end; vexpand: true; lines: 2; max-width-chars: 15; single-line-mode: true; label: bind template.article as <$BzCuratedArticle>.subtitle; height-request: 36; styles [ "dimmed", ] } } }; }bazaar-org-bazaar-b6e9a65/src/bz-article-tile.c000066400000000000000000000151651522167256300213630ustar00rootroot00000000000000/* bz-article-tile.c * * Copyright 2026 Alexander Vanhee * * 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 */ #define BAZAAR_MODULE "article-tile" #include "config.h" #include "bz-article-list-view.h" #include "bz-article-tile.h" #include "bz-article.h" #include "bz-aspect-picture.h" #include "bz-async-texture.h" #include "bz-curated-article.h" #include "bz-curated-articles-info.h" #include "bz-io.h" struct _BzArticleTile { BzListTile parent_instance; BzCuratedArticle *article; float aspect_ratio; GBinding *aspect_ratio_binding; GtkWidget *picture_box; GtkWidget *picture; }; G_DEFINE_FINAL_TYPE (BzArticleTile, bz_article_tile, BZ_TYPE_LIST_TILE); enum { PROP_0, PROP_ARTICLE, PROP_ASPECT_RATIO, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_article_tile_dispose (GObject *object) { BzArticleTile *self = BZ_ARTICLE_TILE (object); g_clear_object (&self->article); g_clear_object (&self->aspect_ratio_binding); G_OBJECT_CLASS (bz_article_tile_parent_class)->dispose (object); } static void bz_article_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzArticleTile *self = BZ_ARTICLE_TILE (object); switch (prop_id) { case PROP_ARTICLE: g_value_set_object (value, bz_article_tile_get_article (self)); break; case PROP_ASPECT_RATIO: g_value_set_float (value, self->aspect_ratio); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_article_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzArticleTile *self = BZ_ARTICLE_TILE (object); switch (prop_id) { case PROP_ARTICLE: bz_article_tile_set_article (self, g_value_get_object (value)); break; case PROP_ASPECT_RATIO: self->aspect_ratio = g_value_get_float (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ASPECT_RATIO]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void tile_clicked_cb (GtkButton *button, BzArticleTile *self) { GtkWidget *nav_view = NULL; AdwNavigationPage *page = NULL; if (self->article == NULL) return; nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (nav_view == NULL) return; page = bz_article_new (self->article); adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), page); } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, const char *value) { return value == NULL; } static float get_aspect_ratio (gpointer object, float ratio) { return ratio > 0.0f ? ratio : 1.77f; } static BzAsyncTexture * get_image (gpointer object, const char *uri) { g_autoptr (GFile) source = NULL; g_autoptr (GFile) cache_file = NULL; g_autofree char *cache_dir = NULL; g_autofree char *checksum = NULL; g_autofree char *cache_path = NULL; if (uri == NULL) return NULL; source = g_file_new_for_uri (uri); checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1); cache_dir = bz_dup_module_dir (); cache_path = g_build_filename (cache_dir, checksum, NULL); cache_file = g_file_new_for_path (cache_path); return bz_async_texture_new_lazy (source, cache_file); } static void bz_article_tile_class_init (BzArticleTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_article_tile_set_property; object_class->get_property = bz_article_tile_get_property; object_class->dispose = bz_article_tile_dispose; props[PROP_ARTICLE] = g_param_spec_object ( "article", NULL, NULL, BZ_TYPE_CURATED_ARTICLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ASPECT_RATIO] = g_param_spec_float ( "aspect-ratio", NULL, NULL, 0.0f, G_MAXFLOAT, 1.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ASYNC_TEXTURE); g_type_ensure (BZ_TYPE_ASPECT_PICTURE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-article-tile.ui"); gtk_widget_class_bind_template_callback (widget_class, tile_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, get_image); gtk_widget_class_bind_template_callback (widget_class, get_aspect_ratio); gtk_widget_class_bind_template_child (widget_class, BzArticleTile, picture_box); gtk_widget_class_bind_template_child (widget_class, BzArticleTile, picture); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_article_tile_init (BzArticleTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_article_tile_new (void) { return g_object_new (BZ_TYPE_ARTICLE_TILE, NULL); } BzCuratedArticle * bz_article_tile_get_article (BzArticleTile *self) { g_return_val_if_fail (BZ_IS_ARTICLE_TILE (self), NULL); return self->article; } void bz_article_tile_set_article (BzArticleTile *self, BzCuratedArticle *article) { g_return_if_fail (BZ_IS_ARTICLE_TILE (self)); g_clear_object (&self->article); if (article != NULL) self->article = g_object_ref (article); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ARTICLE]); } bazaar-org-bazaar-b6e9a65/src/bz-article-tile.h000066400000000000000000000023221522167256300213570ustar00rootroot00000000000000/* bz-article-tile.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-curated-article.h" #include "bz-list-tile.h" G_BEGIN_DECLS #define BZ_TYPE_ARTICLE_TILE (bz_article_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzArticleTile, bz_article_tile, BZ, ARTICLE_TILE, BzListTile) GtkWidget * bz_article_tile_new (void); BzCuratedArticle * bz_article_tile_get_article (BzArticleTile *self); void bz_article_tile_set_article (BzArticleTile *self, BzCuratedArticle *article); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-article.blp000066400000000000000000000041531522167256300207560ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzArticle: Adw.NavigationPage { child: Adw.ToolbarView { [top] Adw.HeaderBar { overflow: hidden; [title] Revealer { reveal-child: bind $is_scrolled_down(main_scroll.vadjustment as .value) as ; transition-type: slide_up; transition-duration: 500; overflow: visible; child: Label { label: bind template.article as <$BzCuratedArticle>.title; styles ["title"] }; } } content: Adw.ViewStack stack { hexpand: true; vexpand: true; Adw.ViewStackPage { name: "loading"; child: Adw.Spinner { hexpand: true; vexpand: true; halign: center; valign: center; width-request: 64; height-request: 64; }; } Adw.ViewStackPage { name: "content"; child: ScrolledWindow main_scroll { hexpand: true; vexpand: true; hscrollbar-policy: never; child: Adw.Clamp { margin-top: 20; margin-bottom: 50; margin-start: 20; margin-end: 20; maximum-size: 800; child: Box { orientation: vertical; Label { label: bind template.article as <$BzCuratedArticle>.title; wrap: true; wrap-mode: word_char; margin-bottom: 12; selectable: true; xalign: 0; styles [ "title-1", ] } $BgeMarkdownRender render { styles [ "article", ] spacing: 12; hexpand: true; bind-inline-uri => $markdown_bind_inline_uri(template); } }; }; }; } Adw.ViewStackPage { name: "error"; child: Adw.StatusPage { icon-name: "computer-fail-symbolic"; title: _("Failed to Load Article"); }; } }; }; }bazaar-org-bazaar-b6e9a65/src/bz-article.c000066400000000000000000000302071522167256300204220ustar00rootroot00000000000000/* bz-article.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-app-tile.h" #include "bz-aspect-picture.h" #include "bz-application-map-factory.h" #include "bz-application.h" #include "bz-article.h" #include "bz-async-texture.h" #include "bz-dynamic-list-view.h" #include "bz-env.h" #include "bz-global-net.h" #include "bz-io.h" #include "bz-rich-app-tile.h" #include "bz-screenshot-page.h" #include "bz-state-info.h" #include "bz-util.h" #include "bz-window.h" struct _BzArticle { AdwNavigationPage parent_instance; BzCuratedArticle *article; GCancellable *cancellable; AdwStyleManager *style_manager; GListStore *screenshot_textures; GListStore *screenshot_captions; /* Template widgets */ AdwViewStack *stack; BgeMarkdownRender *render; }; G_DEFINE_FINAL_TYPE (BzArticle, bz_article, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_ARTICLE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void dark_changed (BzArticle *self, GParamSpec *pspec, AdwStyleManager *mgr); static void load_markdown (BzArticle *self); static void load_markdown_then (DexFuture *future, BzArticle *self); static GtkWidget * markdown_bind_inline_uri (BzArticle *self, const char *title, const char *src, BgeMarkdownRender *markdown); static gboolean is_scrolled_down (gpointer object, double value); static GtkWidget * build_appstream_wrap_box (const char *remainder); static void screenshot_clicked (GtkButton *button, gpointer user_data); static void bz_article_dispose (GObject *object) { BzArticle *self = BZ_ARTICLE (object); g_signal_handlers_disconnect_by_func ( self->style_manager, dark_changed, self); if (self->cancellable != NULL) { g_cancellable_cancel (self->cancellable); g_clear_object (&self->cancellable); } g_clear_object (&self->article); g_clear_object (&self->style_manager); g_clear_object (&self->screenshot_textures); g_clear_object (&self->screenshot_captions); G_OBJECT_CLASS (bz_article_parent_class)->dispose (object); } static void bz_article_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzArticle *self = BZ_ARTICLE (object); switch (prop_id) { case PROP_ARTICLE: g_value_set_object (value, self->article); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_article_class_init (BzArticleClass *klass) { GObjectClass *object_class = NULL; GtkWidgetClass *widget_class = NULL; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_article_dispose; object_class->get_property = bz_article_get_property; props[PROP_ARTICLE] = g_param_spec_object ( "article", NULL, NULL, BZ_TYPE_CURATED_ARTICLE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-article.ui"); gtk_widget_class_bind_template_child (widget_class, BzArticle, stack); gtk_widget_class_bind_template_child (widget_class, BzArticle, render); gtk_widget_class_bind_template_callback (widget_class, markdown_bind_inline_uri); gtk_widget_class_bind_template_callback (widget_class, is_scrolled_down); } static void bz_article_init (BzArticle *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->style_manager = g_object_ref ( adw_style_manager_get_default ()); g_signal_connect_swapped ( self->style_manager, "notify::dark", G_CALLBACK (dark_changed), self); bge_markdown_render_set_dark ( self->render, adw_style_manager_get_dark (self->style_manager)); self->screenshot_textures = g_list_store_new (BZ_TYPE_ASYNC_TEXTURE); self->screenshot_captions = g_list_store_new (GTK_TYPE_STRING_OBJECT); } AdwNavigationPage * bz_article_new (BzCuratedArticle *article) { BzArticle *self = NULL; const char *title = NULL; g_return_val_if_fail (article == NULL || BZ_IS_CURATED_ARTICLE (article), NULL); self = g_object_new (BZ_TYPE_ARTICLE, NULL); if (article != NULL) { self->article = g_object_ref (article); title = bz_curated_article_get_title (article); adw_navigation_page_set_title (ADW_NAVIGATION_PAGE (self), title != NULL ? title : ""); load_markdown (self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ARTICLE]); return ADW_NAVIGATION_PAGE (self); } static void dark_changed (BzArticle *self, GParamSpec *pspec, AdwStyleManager *mgr) { bge_markdown_render_set_dark (self->render, adw_style_manager_get_dark (mgr)); } static void load_markdown (BzArticle *self) { const char *uri = NULL; g_autoptr (DexFuture) future = NULL; if (self->article == NULL) return; uri = bz_curated_article_get_uri (self->article); if (uri == NULL) { adw_view_stack_set_visible_child_name (self->stack, "error"); return; } adw_view_stack_set_visible_child_name (self->stack, "loading"); self->cancellable = g_cancellable_new (); future = bz_fetch_uri_contents (uri); future = dex_future_then ( future, (DexFutureCallback) load_markdown_then, g_object_ref (self), g_object_unref); dex_future_disown (g_steal_pointer (&future)); } static void load_markdown_then (DexFuture *future, BzArticle *self) { g_autoptr (GError) local_error = NULL; const GValue *value = NULL; g_autoptr (GBytes) bytes = NULL; gconstpointer data = NULL; gsize size = 0; if (g_cancellable_is_cancelled (self->cancellable)) return; value = dex_future_get_value (future, &local_error); if (value == NULL) { g_warning ("Failed to load article markdown: %s", local_error != NULL ? local_error->message : "unknown error"); adw_view_stack_set_visible_child_name (self->stack, "error"); return; } bytes = g_value_dup_boxed (value); data = g_bytes_get_data (bytes, &size); bge_markdown_render_set_markdown (self->render, (const char *) data); adw_view_stack_set_visible_child_name (self->stack, "content"); } static gboolean is_scrolled_down (gpointer object, double value) { return value > 50.0; } static GtkWidget * build_appstream_wrap_box (const char *remainder) { g_auto (GStrv) ids = NULL; guint n_ids = 0; g_autoptr (GListStore) ids_store = NULL; GtkWidget *list_view = NULL; GListModel *groups = NULL; ids = g_strsplit (remainder, ",appstream://", -1); n_ids = g_strv_length (ids); ids_store = g_list_store_new (GTK_TYPE_STRING_OBJECT); for (guint i = 0; i < n_ids; i++) { g_autoptr (GtkStringObject) string = NULL; string = gtk_string_object_new (ids[i]); g_list_store_append (ids_store, string); } groups = bz_application_map_factory_generate ( bz_state_info_get_application_factory (bz_state_info_get_default ()), G_LIST_MODEL (ids_store)); list_view = GTK_WIDGET (bz_dynamic_list_view_new ()); gtk_widget_set_hexpand (list_view, TRUE); g_object_set ( list_view, "scroll", FALSE, "noscroll-kind", BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX, "child-type", "BzAppTile", "child-prop", "group", "column-spacing", 12, "row-spacing", 12, "model", groups, NULL); if (n_ids == 1) { GtkWidget *clamp = NULL; clamp = GTK_WIDGET (adw_clamp_new ()); g_object_set ( clamp, "maximum-size", 375, "hexpand", TRUE, "margin-top", 12, "margin-bottom", 12, "child", list_view, NULL); return clamp; } gtk_widget_set_margin_top (list_view, 12); gtk_widget_set_margin_bottom (list_view, 12); return list_view; } static void screenshot_clicked (GtkButton *button, gpointer user_data) { BzArticle *self = user_data; guint index = 0; GtkWidget *root = NULL; BzScreenshotPage *page = NULL; index = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "bz-screenshot-index")); root = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (button))); if (!BZ_IS_WINDOW (root)) return; page = BZ_SCREENSHOT_PAGE (bz_screenshot_page_new ( G_LIST_MODEL (self->screenshot_textures), G_LIST_MODEL (self->screenshot_captions), index, GTK_WIDGET (button))); bz_window_open_screenshot_page (BZ_WINDOW (root), page); } static GtkWidget * markdown_bind_inline_uri (BzArticle *self, const char *title, const char *src, BgeMarkdownRender *markdown) { g_autoptr (GFile) file = NULL; if (src == NULL) return NULL; if (g_str_has_prefix (src, "appstream://")) return build_appstream_wrap_box (src + strlen ("appstream://")); file = g_file_new_for_uri (src); if (file != NULL) { g_autoptr (BzAsyncTexture) texture = NULL; GtkWidget *picture = NULL; GtkWidget *box = NULL; GtkWidget *button = NULL; guint index = 0; texture = bz_async_texture_new_lazy (file, NULL); picture = bz_aspect_picture_new (); bz_aspect_picture_set_paintable (BZ_ASPECT_PICTURE (picture), GDK_PAINTABLE (texture)); bz_aspect_picture_set_ratio (BZ_ASPECT_PICTURE (picture), 0.0); gtk_widget_set_hexpand (picture, TRUE); gtk_widget_set_halign (picture, GTK_ALIGN_FILL); if (title != NULL) gtk_accessible_update_property (GTK_ACCESSIBLE (picture), GTK_ACCESSIBLE_PROPERTY_LABEL, title, -1); index = g_list_model_get_n_items (G_LIST_MODEL (self->screenshot_textures)); g_list_store_append (self->screenshot_textures, texture); { g_autoptr (GtkStringObject) caption_obj = NULL; caption_obj = gtk_string_object_new (title != NULL ? title : ""); g_list_store_append (self->screenshot_captions, caption_obj); } button = gtk_button_new (); gtk_widget_add_css_class (button, "article-image-button"); gtk_widget_set_hexpand (button, TRUE); gtk_widget_set_halign (button, GTK_ALIGN_FILL); gtk_button_set_child (GTK_BUTTON (button), picture); g_object_set_data (G_OBJECT (button), "bz-screenshot-index", GUINT_TO_POINTER (index)); g_signal_connect (button, "clicked", G_CALLBACK (screenshot_clicked), self); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_widget_set_margin_top (box, 15); gtk_widget_set_margin_bottom (box, 15); gtk_box_append (GTK_BOX (box), button); if (title != NULL) { GtkWidget *caption = NULL; caption = gtk_label_new (title); gtk_widget_add_css_class (caption, "caption"); gtk_widget_add_css_class (caption, "dimmed"); gtk_label_set_xalign (GTK_LABEL (caption), 0.5); gtk_box_append (GTK_BOX (box), caption); } return box; } return NULL; } bazaar-org-bazaar-b6e9a65/src/bz-article.h000066400000000000000000000020241522167256300204230ustar00rootroot00000000000000/* bz-article.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include "bz-curated-article.h" G_BEGIN_DECLS #define BZ_TYPE_ARTICLE (bz_article_get_type ()) G_DECLARE_FINAL_TYPE (BzArticle, bz_article, BZ, ARTICLE, AdwNavigationPage) AdwNavigationPage * bz_article_new (BzCuratedArticle *article); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-aspect-picture.c000066400000000000000000000237471522167256300217420ustar00rootroot00000000000000/* bz-aspect-picture.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include "bz-aspect-picture.h" #include struct _BzAspectPicture { GtkWidget parent_instance; GdkPaintable *paintable; double ratio; }; G_DEFINE_FINAL_TYPE (BzAspectPicture, bz_aspect_picture, GTK_TYPE_WIDGET) enum { PROP_0, PROP_PAINTABLE, PROP_RATIO, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void on_invalidate_contents (BzAspectPicture *self, GdkPaintable *paintable); static void on_invalidate_size (BzAspectPicture *self, GdkPaintable *paintable); static void bz_aspect_picture_dispose (GObject *object) { BzAspectPicture *self = BZ_ASPECT_PICTURE (object); if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, on_invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, on_invalidate_size, self); } g_clear_object (&self->paintable); G_OBJECT_CLASS (bz_aspect_picture_parent_class)->dispose (object); } static void bz_aspect_picture_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAspectPicture *self = BZ_ASPECT_PICTURE (object); switch (prop_id) { case PROP_PAINTABLE: g_value_set_object (value, self->paintable); break; case PROP_RATIO: g_value_set_double (value, self->ratio); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_aspect_picture_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzAspectPicture *self = BZ_ASPECT_PICTURE (object); switch (prop_id) { case PROP_PAINTABLE: bz_aspect_picture_set_paintable (self, g_value_get_object (value)); break; case PROP_RATIO: bz_aspect_picture_set_ratio (self, g_value_get_double (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static GtkSizeRequestMode bz_aspect_picture_get_request_mode (GtkWidget *widget) { return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } static void bz_aspect_picture_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BzAspectPicture *self = BZ_ASPECT_PICTURE (widget); *minimum = 0; *natural = 0; *minimum_baseline = -1; *natural_baseline = -1; if (orientation == GTK_ORIENTATION_HORIZONTAL) { *minimum = 1; *natural = 160; } else { if (self->ratio == 0.0) { int base = (for_size > 0) ? for_size : 160; int w, h = 0; if (self->paintable != NULL) { w = gdk_paintable_get_intrinsic_width (self->paintable); h = gdk_paintable_get_intrinsic_height (self->paintable); if (w > 0 && h > 0) { *minimum = (int) round (((double) base * h) / w); *natural = *minimum; } else { *minimum = base; *natural = base; } } else { *minimum = base; *natural = base; } } else { int base = 0; int h = 0; base = (for_size > 0) ? for_size : 160; h = (int) round ((double) base / self->ratio); *minimum = h; *natural = h; } } } static void bz_aspect_picture_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzAspectPicture *self = BZ_ASPECT_PICTURE (widget); int widget_width = 0; int widget_height = 0; double paintable_width = 0.0; double paintable_height = 0.0; double scale_x = 0.0; double scale_y = 0.0; double scale = 0.0; double draw_width = 0.0; double draw_height = 0.0; double x = 0.0; double y = 0.0; GskRoundedRect clip; if (self->paintable == NULL) return; widget_width = gtk_widget_get_width (widget); widget_height = gtk_widget_get_height (widget); if (widget_width <= 0 || widget_height <= 0) return; paintable_width = gdk_paintable_get_intrinsic_width (self->paintable); paintable_height = gdk_paintable_get_intrinsic_height (self->paintable); if (paintable_width <= 0 || paintable_height <= 0) { paintable_width = widget_width; paintable_height = widget_height; } scale_x = (double) widget_width / paintable_width; scale_y = (double) widget_height / paintable_height; scale = MAX (scale_x, scale_y); draw_width = paintable_width * scale; draw_height = paintable_height * scale; x = ((double) widget_width - draw_width) / 2.0; y = ((double) widget_height - draw_height) / 2.0; gsk_rounded_rect_init_from_rect (&clip, &GRAPHENE_RECT_INIT (0, 0, widget_width, widget_height), 0.0); gtk_snapshot_push_rounded_clip (snapshot, &clip); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); gdk_paintable_snapshot (self->paintable, snapshot, draw_width, draw_height); gtk_snapshot_pop (snapshot); } static void bz_aspect_picture_class_init (BzAspectPictureClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_aspect_picture_dispose; object_class->get_property = bz_aspect_picture_get_property; object_class->set_property = bz_aspect_picture_set_property; widget_class->get_request_mode = bz_aspect_picture_get_request_mode; widget_class->measure = bz_aspect_picture_measure; widget_class->snapshot = bz_aspect_picture_snapshot; gtk_widget_class_set_css_name (widget_class, "aspectpicture"); props[PROP_PAINTABLE] = g_param_spec_object ("paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_RATIO] = g_param_spec_double ("ratio", NULL, NULL, 0.000, G_MAXDOUBLE, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_aspect_picture_init (BzAspectPicture *self) { self->ratio = 0; } GtkWidget * bz_aspect_picture_new (void) { return g_object_new (BZ_TYPE_ASPECT_PICTURE, NULL); } void bz_aspect_picture_set_paintable (BzAspectPicture *self, GdkPaintable *paintable) { g_return_if_fail (BZ_IS_ASPECT_PICTURE (self)); g_return_if_fail (paintable == NULL || GDK_IS_PAINTABLE (paintable)); if (self->paintable == paintable) return; if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, on_invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, on_invalidate_size, self); } g_clear_object (&self->paintable); if (paintable != NULL) { self->paintable = g_object_ref (paintable); g_signal_connect_swapped (self->paintable, "invalidate-contents", G_CALLBACK (on_invalidate_contents), self); g_signal_connect_swapped (self->paintable, "invalidate-size", G_CALLBACK (on_invalidate_size), self); } gtk_widget_queue_resize (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PAINTABLE]); } GdkPaintable * bz_aspect_picture_get_paintable (BzAspectPicture *self) { g_return_val_if_fail (BZ_IS_ASPECT_PICTURE (self), NULL); return self->paintable; } void bz_aspect_picture_set_ratio (BzAspectPicture *self, double ratio) { g_return_if_fail (BZ_IS_ASPECT_PICTURE (self)); g_return_if_fail (ratio >= 0.0); if (self->ratio == ratio) return; self->ratio = ratio; gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RATIO]); } double bz_aspect_picture_get_ratio (BzAspectPicture *self) { g_return_val_if_fail (BZ_IS_ASPECT_PICTURE (self), 16.0 / 9.0); return self->ratio; } static void on_invalidate_contents (BzAspectPicture *self, GdkPaintable *paintable) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void on_invalidate_size (BzAspectPicture *self, GdkPaintable *paintable) { gtk_widget_queue_resize (GTK_WIDGET (self)); } bazaar-org-bazaar-b6e9a65/src/bz-aspect-picture.h000066400000000000000000000025601522167256300217350ustar00rootroot00000000000000/* bz-aspect-picture.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_ASPECT_PICTURE (bz_aspect_picture_get_type ()) G_DECLARE_FINAL_TYPE (BzAspectPicture, bz_aspect_picture, BZ, ASPECT_PICTURE, GtkWidget) GtkWidget * bz_aspect_picture_new (void); void bz_aspect_picture_set_paintable (BzAspectPicture *self, GdkPaintable *paintable); GdkPaintable * bz_aspect_picture_get_paintable (BzAspectPicture *self); void bz_aspect_picture_set_ratio (BzAspectPicture *self, double ratio); double bz_aspect_picture_get_ratio (BzAspectPicture *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-async-texture.c000066400000000000000000001024071522167256300216140ustar00rootroot00000000000000/* bz-async-texture.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::ASYNC-TEXTURE" #define MAX_CONCURRENT_IO 8 #define MAX_CONCURRENT_GLYCIN 32 #define CACHE_INVALID_AGE (G_TIME_SPAN_DAY * 1) #define HTTP_TIMEOUT_SECONDS 5 #define MAX_LOAD_RETRIES 3 #define RETRY_INTERVAL_SECONDS 1 #define TEXTURE_LINGER_SECONDS 2 #include "config.h" #include #include #include "bz-async-texture.h" #include "bz-download-worker.h" #include "bz-env.h" #include "bz-io.h" #include "bz-util.h" BZ_DEFINE_DATA ( cache_entry, CacheEntry, { GdkTexture *texture; DexFuture *linger_timeout; }, BZ_RELEASE_DATA (texture, g_object_unref); BZ_RELEASE_DATA (linger_timeout, dex_unref)); static GMutex texture_cache_mutex = { 0 }; static GHashTable *texture_cache = NULL; static void texture_cache_ensure (void); static DexFuture * linger_timeout_finally (DexFuture *future, char *uri); static GdkTexture * texture_cache_acquire (const char *uri); static void texture_cache_store (const char *uri, GdkTexture *texture); static void texture_cache_release (const char *uri); BZ_DEFINE_DATA ( load, Load, { GFile *source; char *source_uri; GFile *cache_into; char *cache_into_path; GCancellable *cancellable; int retries; GWeakRef self; }, BZ_RELEASE_DATA (source, g_object_unref); BZ_RELEASE_DATA (source_uri, g_free); BZ_RELEASE_DATA (cache_into, g_object_unref); BZ_RELEASE_DATA (cache_into_path, g_free); BZ_RELEASE_DATA (cancellable, g_object_unref); g_weak_ref_clear (&self->self);) struct _BzAsyncTexture { GObject parent_instance; GFile *source; char *source_uri; GFile *cache_into; char *cache_into_path; gboolean lazy; DexFuture *task; GCancellable *cancellable; int retries; DexFuture *retry_future; GdkPaintable *paintable; GMutex mutex; gboolean cache_acquired; }; static void paintable_iface_init (GdkPaintableInterface *iface); G_DEFINE_TYPE_WITH_CODE ( BzAsyncTexture, bz_async_texture, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE, paintable_iface_init)) enum { PROP_0, PROP_SOURCE, PROP_CACHE_INTO, PROP_LOADED, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * load_fiber_work (LoadData *data); static DexFuture * load_finally (DexFuture *future, LoadData *data); static void maybe_load (BzAsyncTexture *self); static DexFuture * retry_cb (DexFuture *future, LoadData *data); static gboolean idle_notify (BzAsyncTexture *self); static GMutex debug_n_textures_mutex = { 0 }; static gsize debug_n_textures = 0; static void bz_async_texture_dispose (GObject *object) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (object); if (self->cancellable != NULL) g_cancellable_cancel (self->cancellable); dex_clear (&self->task); g_clear_object (&self->cancellable); dex_clear (&self->retry_future); g_clear_object (&self->source); if (self->cache_acquired && self->source_uri != NULL) { texture_cache_release (self->source_uri); self->cache_acquired = FALSE; } g_clear_pointer (&self->source_uri, g_free); g_clear_object (&self->cache_into); g_clear_pointer (&self->cache_into_path, g_free); g_clear_object (&self->paintable); g_mutex_clear (&self->mutex); if (!g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, G_LOG_DOMAIN)) { g_mutex_lock (&debug_n_textures_mutex); debug_n_textures--; g_debug ("%zu %s object(s) in memory", debug_n_textures, g_type_name (BZ_TYPE_ASYNC_TEXTURE)); g_mutex_unlock (&debug_n_textures_mutex); } G_OBJECT_CLASS (bz_async_texture_parent_class)->dispose (object); } static void bz_async_texture_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (object); switch (prop_id) { case PROP_SOURCE: g_value_set_object (value, bz_async_texture_get_source (self)); break; case PROP_CACHE_INTO: g_value_set_object (value, bz_async_texture_get_cache_into (self)); break; case PROP_LOADED: g_value_set_boolean (value, bz_async_texture_get_loaded (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_async_texture_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { // BzAsyncTexture *self = BZ_ASYNC_TEXTURE (object); switch (prop_id) { case PROP_SOURCE: case PROP_CACHE_INTO: case PROP_LOADED: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_async_texture_class_init (BzAsyncTextureClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_async_texture_dispose; object_class->get_property = bz_async_texture_get_property; object_class->set_property = bz_async_texture_set_property; props[PROP_SOURCE] = g_param_spec_object ( "source", NULL, NULL, G_TYPE_FILE, G_PARAM_READABLE); props[PROP_CACHE_INTO] = g_param_spec_object ( "cache-into", NULL, NULL, G_TYPE_FILE, G_PARAM_READABLE); props[PROP_LOADED] = g_param_spec_boolean ( "loaded", NULL, NULL, FALSE, G_PARAM_READABLE); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_async_texture_init (BzAsyncTexture *self) { self->retries = 0; self->paintable = NULL; self->cache_acquired = FALSE; g_mutex_init (&self->mutex); if (!g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, G_LOG_DOMAIN)) { g_mutex_lock (&debug_n_textures_mutex); debug_n_textures++; g_mutex_unlock (&debug_n_textures_mutex); } } static void paintable_snapshot (GdkPaintable *paintable, GdkSnapshot *snapshot, double width, double height) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->paintable != NULL) gdk_paintable_snapshot (self->paintable, snapshot, width, height); } static GdkPaintable * paintable_get_current_image (GdkPaintable *paintable) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->paintable != NULL) return gdk_paintable_get_current_image (self->paintable); return NULL; } static GdkPaintableFlags paintable_get_flags (GdkPaintable *paintable) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); return 0; } static int paintable_get_intrinsic_width (GdkPaintable *paintable) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->paintable != NULL) return gdk_paintable_get_intrinsic_width (self->paintable); return 0; } static int paintable_get_intrinsic_height (GdkPaintable *paintable) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->paintable != NULL) return gdk_paintable_get_intrinsic_height (self->paintable); return 0; } static double paintable_get_intrinsic_aspect_ratio (GdkPaintable *paintable) { BzAsyncTexture *self = BZ_ASYNC_TEXTURE (paintable); g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->paintable != NULL) return gdk_paintable_get_intrinsic_aspect_ratio (self->paintable); return 0.0; } static void paintable_iface_init (GdkPaintableInterface *iface) { iface->snapshot = paintable_snapshot; iface->get_current_image = paintable_get_current_image; iface->get_flags = paintable_get_flags; iface->get_intrinsic_width = paintable_get_intrinsic_width; iface->get_intrinsic_height = paintable_get_intrinsic_height; iface->get_intrinsic_aspect_ratio = paintable_get_intrinsic_aspect_ratio; } BzAsyncTexture * bz_async_texture_new (GFile *source, GFile *cache_into) { BzAsyncTexture *self = NULL; g_return_val_if_fail (G_IS_FILE (source), NULL); g_return_val_if_fail (cache_into == NULL || G_IS_FILE (cache_into), NULL); self = g_object_new (BZ_TYPE_ASYNC_TEXTURE, NULL); self->source = g_object_ref (source); self->source_uri = g_file_get_uri (source); self->cache_into = bz_object_maybe_ref (cache_into); self->cache_into_path = bz_maybe (cache_into, g_file_get_path); self->lazy = FALSE; maybe_load (self); return self; } BzAsyncTexture * bz_async_texture_new_lazy (GFile *source, GFile *cache_into) { BzAsyncTexture *self = NULL; g_return_val_if_fail (G_IS_FILE (source), NULL); g_return_val_if_fail (cache_into == NULL || G_IS_FILE (cache_into), NULL); self = g_object_new (BZ_TYPE_ASYNC_TEXTURE, NULL); self->source = g_object_ref (source); self->source_uri = g_file_get_uri (source); self->cache_into = bz_object_maybe_ref (cache_into); self->cache_into_path = bz_maybe (cache_into, g_file_get_path); self->lazy = TRUE; return self; } GFile * bz_async_texture_get_source (BzAsyncTexture *self) { g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); return self->source; } const char * bz_async_texture_get_source_uri (BzAsyncTexture *self) { g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); return self->source_uri; } GFile * bz_async_texture_get_cache_into (BzAsyncTexture *self) { g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); return self->cache_into; } const char * bz_async_texture_get_cache_into_path (BzAsyncTexture *self) { g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); return self->cache_into_path; } gboolean bz_async_texture_get_loaded (BzAsyncTexture *self) { g_autoptr (GMutexLocker) locker = NULL; g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); locker = g_mutex_locker_new (&self->mutex); return GDK_IS_TEXTURE (self->paintable); } GdkTexture * bz_async_texture_dup_texture (BzAsyncTexture *self) { g_autoptr (GMutexLocker) locker = NULL; g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), NULL); locker = g_mutex_locker_new (&self->mutex); if (GDK_IS_TEXTURE (self->paintable)) return (GdkTexture *) g_object_ref (self->paintable); else return NULL; } DexFuture * bz_async_texture_dup_future (BzAsyncTexture *self) { g_autoptr (GMutexLocker) locker = NULL; g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), NULL); locker = g_mutex_locker_new (&self->mutex); maybe_load (self); if (self->task != NULL) return dex_ref (self->task); else if (GDK_IS_TEXTURE (self->paintable)) return dex_future_new_for_object (self->paintable); else return dex_future_new_reject ( G_IO_ERROR, G_IO_ERROR_FAILED, "texture is in an invalid state"); } void bz_async_texture_ensure (BzAsyncTexture *self) { g_autoptr (GMutexLocker) locker = NULL; g_return_if_fail (BZ_IS_ASYNC_TEXTURE (self)); locker = g_mutex_locker_new (&self->mutex); maybe_load (self); } void bz_async_texture_cancel (BzAsyncTexture *self) { g_return_if_fail (BZ_IS_ASYNC_TEXTURE (self)); if (self->cancellable != NULL) g_cancellable_cancel (self->cancellable); dex_clear (&self->task); g_clear_object (&self->cancellable); self->retries = G_MAXINT; } gboolean bz_async_texture_is_loading (BzAsyncTexture *self) { g_return_val_if_fail (BZ_IS_ASYNC_TEXTURE (self), FALSE); return self->task != NULL && dex_future_is_pending (self->task); } static void maybe_load (BzAsyncTexture *self) { g_autoptr (LoadData) data = NULL; g_autoptr (DexFuture) future = NULL; if (GDK_IS_TEXTURE (self->paintable) || (self->task != NULL && dex_future_is_pending (self->task)) || self->retries >= MAX_LOAD_RETRIES) return; if (!self->cache_acquired) { g_autoptr (GdkTexture) cached = NULL; cached = texture_cache_acquire (self->source_uri); if (cached != NULL) { g_clear_object (&self->paintable); self->paintable = (GdkPaintable *) g_object_ref (cached); self->cache_acquired = TRUE; g_idle_add_full ( G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) idle_notify, g_object_ref (self), g_object_unref); return; } } if (self->cancellable != NULL) g_cancellable_cancel (self->cancellable); dex_clear (&self->task); g_clear_object (&self->cancellable); self->cancellable = g_cancellable_new (); data = load_data_new (); data->source = g_object_ref (self->source); data->source_uri = g_strdup (self->source_uri); data->cache_into = bz_object_maybe_ref (self->cache_into); data->cache_into_path = bz_maybe_strdup (self->cache_into_path); data->cancellable = g_object_ref (self->cancellable); data->retries = self->retries; g_weak_ref_init (&data->self, self); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) load_fiber_work, load_data_ref (data), load_data_unref); future = dex_future_finally ( future, (DexFutureCallback) load_finally, load_data_ref (data), load_data_unref); self->task = g_steal_pointer (&future); } static DexFuture * load_fiber_work (LoadData *data) { static GMutex queueing_mutex = { 0 }; static guint concurrent_io = MAX_CONCURRENT_IO; static guint io_queued[MAX_CONCURRENT_IO] = { 0 }; static BzGuard *io_gates[MAX_CONCURRENT_IO] = { 0 }; static GMutex io_mutexes[MAX_CONCURRENT_IO] = { 0 }; static guint concurrent_glycin = 0; static guint glycin_queued[MAX_CONCURRENT_GLYCIN] = { 0 }; static BzGuard *glycin_gates[MAX_CONCURRENT_GLYCIN] = { 0 }; static GMutex glycin_mutexes[MAX_CONCURRENT_GLYCIN] = { 0 }; GFile *source = data->source; char *source_uri = data->source_uri; GFile *cache_into = data->cache_into; char *cache_into_path = data->cache_into_path; GCancellable *cancellable = data->cancellable; gboolean result = FALSE; g_autoptr (GError) local_error = NULL; g_autoptr (GMutexLocker) locker = NULL; g_autoptr (BzGuard) slot_guard = NULL; guint slot_queued = G_MAXUINT; gboolean is_http = FALSE; g_autoptr (GDateTime) now = NULL; g_autofree char *async_tex_data_path = NULL; g_autoptr (GFile) async_tex_data_file = NULL; g_autoptr (GdkTexture) texture = NULL; g_autoptr (GlyFrame) frame = NULL; locker = g_mutex_locker_new (&queueing_mutex); if (concurrent_glycin == 0) { /* Ensure we don't overload the system with work; aim for # of logical processors divided by 2 See: https://github.com/bazaar-org/bazaar/issues/497 https://docs.gtk.org/glib/func.get_num_processors.html Eva Thu, 23 Oct 2025 14:19:44 -0700 */ concurrent_glycin = MIN ( MAX_CONCURRENT_GLYCIN, MAX (1, g_get_num_processors () / 2)); g_debug ("Allowing %d concurrent texture glycin", concurrent_glycin); } g_clear_pointer (&locker, g_mutex_locker_free); #define FIND_LOCK(name, _idx) \ G_STMT_START \ { \ locker = g_mutex_locker_new (&queueing_mutex); \ \ for (guint i = 0; i < concurrent_##name; i++) \ { \ if (name##_queued[i] < slot_queued) \ { \ slot_queued = name##_queued[i]; \ (_idx) = i; \ } \ } \ \ name##_queued[(_idx)]++; \ g_clear_pointer (&locker, g_mutex_locker_free); \ } \ G_STMT_END #define FINISH_LOCK(name, _idx) \ G_STMT_START \ { \ locker = g_mutex_locker_new (&queueing_mutex); \ name##_queued[(_idx)]--; \ g_clear_pointer (&locker, g_mutex_locker_free); \ } \ G_STMT_END #define RATE_LIMIT_BEGIN(name) \ G_STMT_START \ { \ guint _slot_index = 0; \ \ FIND_LOCK (name, _slot_index); \ BZ_BEGIN_GUARD_WITH_CONTEXT (&slot_guard, \ &name##_mutexes[_slot_index], \ &name##_gates[_slot_index]); \ FINISH_LOCK (name, _slot_index); \ } \ G_STMT_END #define RATE_LIMIT_END() bz_clear_guard (&slot_guard) is_http = g_str_has_prefix (source_uri, "http"); now = g_date_time_new_now_utc (); if (cache_into != NULL) { async_tex_data_path = g_strdup_printf ("%s.bz-async-texture-data", cache_into_path); async_tex_data_file = g_file_new_for_path (async_tex_data_path); } if (cache_into != NULL) { RATE_LIMIT_BEGIN (io); if (g_file_query_exists (cache_into, NULL) && g_file_query_exists (async_tex_data_file, NULL)) { g_autoptr (GBytes) bytes = NULL; g_autoptr (GVariant) variant = NULL; GTimeSpan age_span = 0; g_autoptr (GlyLoader) loader = NULL; g_autoptr (GlyImage) image = NULL; bytes = g_file_load_bytes (async_tex_data_file, NULL, NULL, &local_error); if (bytes != NULL) variant = g_variant_new_from_bytes (G_VARIANT_TYPE ("a{sv}"), bytes, FALSE); if (variant != NULL) { gint64 birth_unix_stamp = 0; g_autoptr (GDateTime) birth_date_time = NULL; if (g_variant_lookup ( variant, "birth-unix-stamp", "x", &birth_unix_stamp)) { birth_date_time = g_date_time_new_from_unix_utc (birth_unix_stamp); age_span = g_date_time_difference (now, birth_date_time); } else local_error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "key \"birth-unix-stamp\" was not found"); } if (variant != NULL && age_span > 0) { if (age_span < CACHE_INVALID_AGE) { RATE_LIMIT_END (); RATE_LIMIT_BEGIN (glycin); loader = gly_loader_new (cache_into); /* We assume we exported this file, so uhhh it is safe to not use sandboxing, since it is faster :-) */ gly_loader_set_sandbox_selector (loader, GLY_SANDBOX_SELECTOR_NOT_SANDBOXED); image = gly_loader_load (loader, &local_error); if (image != NULL) frame = gly_image_next_frame (image, &local_error); RATE_LIMIT_END (); RATE_LIMIT_BEGIN (io); } else g_debug ("Metadata file %s for cached texture at %s indicates this resource is too old (GTimeSpan: %zu), " "reaping and fetching from original source at %s instead", async_tex_data_path, cache_into_path, age_span, source_uri); } else { g_warning ("Couldn't load associated metadata file %s for cached texture at %s, " "reaping and fetching from original source at %s instead: %s", async_tex_data_path, cache_into_path, source_uri, local_error != NULL ? local_error->message : "variant parse failed"); g_clear_pointer (&local_error, g_error_free); } if (frame == NULL) { if (local_error != NULL) g_warning ("An attempt to revive cached texture at %s has failed, " "reaping and fetching from original source at %s instead: %s", cache_into_path, source_uri, local_error->message); g_clear_pointer (&local_error, g_error_free); if (!g_file_delete (cache_into, NULL, &local_error)) { g_warning ("Couldn't reap cached texture at %s, this " "might lead to unexpected behavior: %s", cache_into_path, local_error->message); g_clear_pointer (&local_error, g_error_free); } } } RATE_LIMIT_END (); } if (frame == NULL) { g_autoptr (GFile) load_file = NULL; g_autoptr (GlyLoader) loader = NULL; g_autoptr (GlyImage) image = NULL; if (cache_into != NULL) { g_autoptr (GFile) parent = NULL; gboolean reconstruct = FALSE; parent = g_file_get_parent (cache_into); RATE_LIMIT_BEGIN (io); if (g_file_query_exists (parent, NULL)) { GFileType parent_type = G_FILE_TYPE_UNKNOWN; parent_type = g_file_query_file_type (parent, G_FILE_QUERY_INFO_NONE, NULL); if (parent_type != G_FILE_TYPE_DIRECTORY) { reconstruct = TRUE; result = g_file_delete (parent, cancellable, &local_error); if (!result) return dex_future_new_for_error (g_steal_pointer (&local_error)); } } else reconstruct = TRUE; if (reconstruct) { result = g_file_make_directory_with_parents ( parent, cancellable, &local_error); if (!result) { if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_EXISTS)) g_clear_pointer (&local_error, g_error_free); else return dex_future_new_for_error (g_steal_pointer (&local_error)); } } RATE_LIMIT_END (); } if (is_http) { if (cache_into != NULL) load_file = g_object_ref (cache_into); else { g_autofree char *basename = NULL; g_autofree char *tmpl = NULL; g_autoptr (GFileIOStream) io = NULL; RATE_LIMIT_BEGIN (io); basename = g_file_get_basename (source); tmpl = g_strdup_printf ("XXXXXX-%s", basename); load_file = g_file_new_tmp (tmpl, &io, &local_error); if (load_file == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); g_io_stream_close (G_IO_STREAM (io), NULL, NULL); RATE_LIMIT_END (); } result = dex_await ( dex_future_first ( bz_download_worker_invoke ( bz_download_worker_get_default (), source, load_file), /* increase the timeout as more failures stack up */ dex_timeout_new_seconds ((data->retries + 1) * HTTP_TIMEOUT_SECONDS), NULL), &local_error); if (!result) return dex_future_new_for_error (g_steal_pointer (&local_error)); } else { if (cache_into != NULL) { RATE_LIMIT_BEGIN (io); result = g_file_copy ( source, cache_into, G_FILE_COPY_OVERWRITE | G_FILE_COPY_ALL_METADATA, cancellable, NULL, NULL, &local_error); if (!result) return dex_future_new_for_error (g_steal_pointer (&local_error)); RATE_LIMIT_END (); load_file = g_object_ref (cache_into); } else load_file = g_object_ref (source); } RATE_LIMIT_BEGIN (glycin); loader = gly_loader_new (load_file); #ifdef SANDBOXED_LIBFLATPAK gly_loader_set_sandbox_selector (loader, GLY_SANDBOX_SELECTOR_NOT_SANDBOXED); #endif image = gly_loader_load (loader, &local_error); if (is_http && cache_into == NULL) /* delete tmp file */ g_file_delete (load_file, NULL, NULL); if (image == NULL || local_error != NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); frame = gly_image_next_frame (image, &local_error); if (frame == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); RATE_LIMIT_END (); if (async_tex_data_file != NULL) { g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GFileOutputStream) output = NULL; builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_variant_builder_add ( builder, "{sv}", "birth-unix-stamp", g_variant_new_int64 (g_date_time_to_unix (now))); variant = g_variant_builder_end (builder); bytes = g_variant_get_data_as_bytes (variant); RATE_LIMIT_BEGIN (io); output = g_file_replace ( async_tex_data_file, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error); if (output != NULL) { gssize bytes_written = 0; bytes_written = g_output_stream_write_bytes (G_OUTPUT_STREAM (output), bytes, NULL, &local_error); if (bytes_written > 0) g_output_stream_close (G_OUTPUT_STREAM (output), NULL, &local_error); } RATE_LIMIT_END (); if (local_error != NULL) g_warning ("Failed to write async-tex cache metadata to %s ;" "The image will be fully reloaded next time: %s", async_tex_data_path, local_error->message); g_clear_pointer (&local_error, g_error_free); } } texture = gly_gtk_frame_get_texture (frame); if (texture == NULL) return dex_future_new_reject ( G_IO_ERROR, G_IO_ERROR_FAILED, "texture loading failed"); return dex_future_new_for_object (texture); } static DexFuture * load_finally (DexFuture *future, LoadData *data) { g_autoptr (GError) local_error = NULL; g_autoptr (BzAsyncTexture) self = NULL; g_autoptr (GMutexLocker) locker = NULL; bz_weak_get_or_return_reject (self, &data->self); locker = g_mutex_locker_new (&self->mutex); dex_clear (&self->task); if (dex_future_is_resolved (future)) { GdkTexture *texture = NULL; texture = g_value_get_object (dex_future_get_value (future, NULL)); g_clear_object (&self->paintable); self->paintable = g_object_ref (GDK_PAINTABLE (texture)); if (!self->cache_acquired) { texture_cache_store (self->source_uri, texture); self->cache_acquired = TRUE; } g_idle_add_full ( G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) idle_notify, g_object_ref (self), g_object_unref); return dex_future_new_for_object (self->paintable); } else { dex_future_get_value (future, &local_error); if (self->retries < MAX_LOAD_RETRIES) { if (self->retries == MAX_LOAD_RETRIES - 1) g_warning ("Loading %s failed: %s. Retrying in %d seconds. This will " "be the last retry, after which this texture will remain invalid", self->source_uri, local_error != NULL ? local_error->message : "unknown error", RETRY_INTERVAL_SECONDS); else g_warning ("Loading %s failed: %s. Retrying in %d seconds. Retries left: %d", self->source_uri, local_error != NULL ? local_error->message : "unknown error", RETRY_INTERVAL_SECONDS, MAX_LOAD_RETRIES - self->retries); self->retries++; dex_clear (&self->retry_future); self->retry_future = dex_future_then ( dex_timeout_new_seconds (RETRY_INTERVAL_SECONDS), (DexFutureCallback) retry_cb, load_data_ref (data), load_data_unref); } return dex_ref (future); } } static DexFuture * retry_cb (DexFuture *future, LoadData *data) { g_autoptr (BzAsyncTexture) self = NULL; g_autoptr (GMutexLocker) locker = NULL; bz_weak_get_or_return_reject (self, &data->self); locker = g_mutex_locker_new (&self->mutex); dex_clear (&self->retry_future); maybe_load (self); return NULL; } static gboolean idle_notify (BzAsyncTexture *self) { g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LOADED]); gdk_paintable_invalidate_contents (GDK_PAINTABLE (self)); gdk_paintable_invalidate_size (GDK_PAINTABLE (self)); return G_SOURCE_REMOVE; } static void texture_cache_ensure (void) { if (texture_cache == NULL) texture_cache = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, cache_entry_data_unref); } static DexFuture * linger_timeout_finally (DexFuture *future, char *uri) { g_mutex_lock (&texture_cache_mutex); texture_cache_ensure (); g_hash_table_remove (texture_cache, uri); g_debug ("Texture cache: evicted '%s' after linger (table size: %u)", uri, g_hash_table_size (texture_cache)); g_mutex_unlock (&texture_cache_mutex); return dex_future_new_true (); } static GdkTexture * texture_cache_acquire (const char *uri) { g_autoptr (GMutexLocker) locker = NULL; CacheEntryData *data = NULL; locker = g_mutex_locker_new (&texture_cache_mutex); texture_cache_ensure (); data = g_hash_table_lookup (texture_cache, uri); if (data != NULL) { dex_clear (&data->linger_timeout); return g_object_ref (data->texture); } else return NULL; } static void texture_cache_store (const char *uri, GdkTexture *texture) { g_autoptr (CacheEntryData) data = NULL; g_mutex_lock (&texture_cache_mutex); texture_cache_ensure (); data = cache_entry_data_new (); data->texture = g_object_ref (texture); g_hash_table_replace ( texture_cache, g_strdup (uri), cache_entry_data_ref (data)); g_mutex_unlock (&texture_cache_mutex); } static void texture_cache_release (const char *uri) { g_autoptr (GMutexLocker) locker = NULL; CacheEntryData *data = NULL; g_autoptr (DexFuture) future = NULL; locker = g_mutex_locker_new (&texture_cache_mutex); texture_cache_ensure (); data = g_hash_table_lookup (texture_cache, uri); if (data == NULL) return; dex_clear (&data->linger_timeout); future = dex_timeout_new_seconds (TEXTURE_LINGER_SECONDS); future = dex_future_finally ( future, (DexFutureCallback) linger_timeout_finally, g_strdup (uri), g_free); data->linger_timeout = dex_ref (future); } bazaar-org-bazaar-b6e9a65/src/bz-async-texture.h000066400000000000000000000034441522167256300216220ustar00rootroot00000000000000/* bz-async-texture.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include G_BEGIN_DECLS #define BZ_TYPE_ASYNC_TEXTURE (bz_async_texture_get_type ()) G_DECLARE_FINAL_TYPE (BzAsyncTexture, bz_async_texture, BZ, ASYNC_TEXTURE, GObject) BzAsyncTexture * bz_async_texture_new (GFile *source, GFile *cache_into); BzAsyncTexture * bz_async_texture_new_lazy (GFile *source, GFile *cache_into); GFile * bz_async_texture_get_source (BzAsyncTexture *self); const char * bz_async_texture_get_source_uri (BzAsyncTexture *self); GFile * bz_async_texture_get_cache_into (BzAsyncTexture *self); const char * bz_async_texture_get_cache_into_path (BzAsyncTexture *self); gboolean bz_async_texture_get_loaded (BzAsyncTexture *self); GdkTexture * bz_async_texture_dup_texture (BzAsyncTexture *self); DexFuture * bz_async_texture_dup_future (BzAsyncTexture *self); void bz_async_texture_ensure (BzAsyncTexture *self); void bz_async_texture_cancel (BzAsyncTexture *self); gboolean bz_async_texture_is_loading (BzAsyncTexture *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-auth-state.c000066400000000000000000000342141522167256300210600ustar00rootroot00000000000000/* bz-auth-state.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-async-texture.h" #include "bz-auth-state.h" #define SECRET_SCHEMA_NAME "io.github.kolunmi.Bazaar.FlathubAuth" #define SECRET_LABEL "Flathub Authentication" struct _BzAuthState { GObject parent_instance; char *name; char *token; char *profile_icon_url; GDateTime *token_expires; BzAsyncTexture *paintable; gboolean loading; guint expiration_timeout_id; }; G_DEFINE_FINAL_TYPE (BzAuthState, bz_auth_state, G_TYPE_OBJECT) enum { PROP_0, PROP_NAME, PROP_TOKEN, PROP_PROFILE_ICON_URL, PROP_AUTHENTICATED, PROP_PAINTABLE, N_PROPS }; static GParamSpec *properties[N_PROPS]; static const SecretSchema * get_secret_schema (void) { static const SecretSchema schema = { SECRET_SCHEMA_NAME, SECRET_SCHEMA_NONE, { { "service", SECRET_SCHEMA_ATTRIBUTE_STRING }, { "NULL", 0 }, } }; return &schema; } static gboolean on_token_expired (gpointer user_data) { BzAuthState *self = BZ_AUTH_STATE (user_data); self->expiration_timeout_id = 0; bz_auth_state_clear (self); return G_SOURCE_REMOVE; } static void schedule_token_expiration (BzAuthState *self) { GDateTime *now; gint64 seconds_until_expiration; if (self->expiration_timeout_id != 0) g_source_remove (self->expiration_timeout_id); self->expiration_timeout_id = 0; if (self->token_expires == NULL) return; now = g_date_time_new_now_utc (); seconds_until_expiration = g_date_time_difference (self->token_expires, now) / G_TIME_SPAN_SECOND; g_date_time_unref (now); if (seconds_until_expiration <= 0) { bz_auth_state_clear (self); return; } if (seconds_until_expiration > G_MAXUINT / 1000) self->expiration_timeout_id = g_timeout_add_seconds (G_MAXUINT / 1000, on_token_expired, self); else self->expiration_timeout_id = g_timeout_add_seconds (seconds_until_expiration, on_token_expired, self); } static void save_to_secrets (BzAuthState *self) { GHashTable *attributes; GError *error = NULL; g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autofree char *serialized = NULL; if (self->loading) return; attributes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert (attributes, g_strdup ("service"), g_strdup ("flathub")); builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); if (self->name != NULL) g_variant_builder_add (builder, "{sv}", "name", g_variant_new_string (self->name)); if (self->token != NULL) g_variant_builder_add (builder, "{sv}", "token", g_variant_new_string (self->token)); if (self->token_expires != NULL) { g_autofree char *expires = g_date_time_format_iso8601 (self->token_expires); g_variant_builder_add (builder, "{sv}", "token-expires", g_variant_new_string (expires)); } if (self->profile_icon_url != NULL) g_variant_builder_add (builder, "{sv}", "profile-icon-url", g_variant_new_string (self->profile_icon_url)); variant = g_variant_builder_end (builder); serialized = g_variant_print (variant, FALSE); secret_password_storev_sync ( get_secret_schema (), attributes, NULL, SECRET_LABEL, serialized, NULL, &error); g_hash_table_unref (attributes); if (error != NULL) { g_warning ("Failed to save authentication to secrets: %s", error->message); g_error_free (error); } } static void load_from_secrets (BzAuthState *self) { GHashTable *attributes; GError *error = NULL; g_autofree char *secret = NULL; attributes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert (attributes, g_strdup ("service"), g_strdup ("flathub")); secret = secret_password_lookupv_sync ( get_secret_schema (), attributes, NULL, &error); g_hash_table_unref (attributes); if (error != NULL) { if (!g_error_matches (error, SECRET_ERROR, SECRET_ERROR_NO_SUCH_OBJECT)) g_warning ("Failed to load authentication from secrets: %s", error->message); g_error_free (error); return; } if (secret != NULL) { g_autoptr (GVariant) variant = NULL; g_autoptr (GVariantIter) iter = NULL; variant = g_variant_parse (G_VARIANT_TYPE_VARDICT, secret, NULL, NULL, &error); if (error != NULL) { g_warning ("Failed to parse secret: %s", error->message); g_error_free (error); return; } if (variant != NULL) { iter = g_variant_iter_new (variant); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "name") == 0) { g_clear_pointer (&self->name, g_free); self->name = g_variant_dup_string (value, NULL); } else if (g_strcmp0 (key, "token") == 0) { g_clear_pointer (&self->token, g_free); self->token = g_variant_dup_string (value, NULL); } else if (g_strcmp0 (key, "token-expires") == 0) { g_autoptr (GDateTime) dt = g_date_time_new_from_iso8601 (g_variant_get_string (value, NULL), NULL); if (dt != NULL) { g_clear_pointer (&self->token_expires, g_date_time_unref); self->token_expires = g_steal_pointer (&dt); } } else if (g_strcmp0 (key, "profile-icon-url") == 0) { g_clear_pointer (&self->profile_icon_url, g_free); self->profile_icon_url = g_variant_dup_string (value, NULL); g_clear_object (&self->paintable); if (self->profile_icon_url != NULL && self->profile_icon_url[0] != '\0') { g_autoptr (GFile) file = g_file_new_for_uri (self->profile_icon_url); self->paintable = bz_async_texture_new (file, NULL); } } } } } if (self->token_expires != NULL) { GDateTime *now = g_date_time_new_now_utc (); if (g_date_time_compare (now, self->token_expires) >= 0) { g_date_time_unref (now); bz_auth_state_clear (self); return; } g_date_time_unref (now); schedule_token_expiration (self); } } static void clear_secrets (BzAuthState *self) { gboolean result = FALSE; g_autoptr (GError) local_error = NULL; g_autoptr (GHashTable) attributes = NULL; attributes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_hash_table_replace (attributes, g_strdup ("service"), g_strdup ("flathub")); result = secret_password_clearv_sync ( get_secret_schema (), attributes, NULL, &local_error); if (!result) g_warning ("Failed to clear auth values from secrets: %s", local_error->message); } static void bz_auth_state_dispose (GObject *object) { BzAuthState *self = BZ_AUTH_STATE (object); g_clear_handle_id (&self->expiration_timeout_id, g_source_remove); g_clear_pointer (&self->name, g_free); g_clear_pointer (&self->token, g_free); g_clear_pointer (&self->profile_icon_url, g_free); g_clear_pointer (&self->token_expires, g_date_time_unref); g_clear_object (&self->paintable); G_OBJECT_CLASS (bz_auth_state_parent_class)->dispose (object); } static void bz_auth_state_finalize (GObject *object) { BzAuthState *self = BZ_AUTH_STATE (object); g_clear_pointer (&self->name, g_free); g_clear_pointer (&self->token, g_free); g_clear_pointer (&self->profile_icon_url, g_free); g_clear_pointer (&self->token_expires, g_date_time_unref); G_OBJECT_CLASS (bz_auth_state_parent_class)->finalize (object); } static void bz_auth_state_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzAuthState *self = BZ_AUTH_STATE (object); switch (prop_id) { case PROP_NAME: g_value_set_string (value, self->name); break; case PROP_TOKEN: g_value_set_string (value, self->token); break; case PROP_PROFILE_ICON_URL: g_value_set_string (value, self->profile_icon_url); break; case PROP_AUTHENTICATED: g_value_set_boolean (value, bz_auth_state_is_authenticated (self)); break; case PROP_PAINTABLE: g_value_set_object (value, bz_auth_state_get_paintable (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_auth_state_class_init (BzAuthStateClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_auth_state_dispose; object_class->finalize = bz_auth_state_finalize; object_class->get_property = bz_auth_state_get_property; properties[PROP_NAME] = g_param_spec_string ( "name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_TOKEN] = g_param_spec_string ( "token", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_PROFILE_ICON_URL] = g_param_spec_string ( "profile-icon-url", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_AUTHENTICATED] = g_param_spec_boolean ( "authenticated", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_PAINTABLE] = g_param_spec_object ( "paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, properties); } static void bz_auth_state_init (BzAuthState *self) { self->loading = TRUE; load_from_secrets (self); self->loading = FALSE; } BzAuthState * bz_auth_state_new (void) { return g_object_new (BZ_TYPE_AUTH_STATE, NULL); } const char * bz_auth_state_get_name (BzAuthState *self) { g_return_val_if_fail (BZ_IS_AUTH_STATE (self), NULL); return self->name; } const char * bz_auth_state_get_token (BzAuthState *self) { g_return_val_if_fail (BZ_IS_AUTH_STATE (self), NULL); return self->token; } const char * bz_auth_state_get_profile_icon_url (BzAuthState *self) { g_return_val_if_fail (BZ_IS_AUTH_STATE (self), NULL); return self->profile_icon_url; } gboolean bz_auth_state_is_authenticated (BzAuthState *self) { g_return_val_if_fail (BZ_IS_AUTH_STATE (self), FALSE); return self->token != NULL && self->token[0] != '\0'; } GdkPaintable * bz_auth_state_get_paintable (BzAuthState *self) { g_return_val_if_fail (BZ_IS_AUTH_STATE (self), NULL); return GDK_PAINTABLE (self->paintable); } void bz_auth_state_set_authenticated (BzAuthState *self, const char *name, const char *token, GDateTime *token_expires, const char *profile_icon_url) { gboolean was_authenticated = FALSE; gboolean name_changed = FALSE; gboolean token_changed = FALSE; gboolean icon_changed = FALSE; g_return_if_fail (BZ_IS_AUTH_STATE (self)); was_authenticated = bz_auth_state_is_authenticated (self); if (g_strcmp0 (self->name, name) != 0) { g_clear_pointer (&self->name, g_free); self->name = g_strdup (name); name_changed = TRUE; } if (g_strcmp0 (self->token, token) != 0) { g_clear_pointer (&self->token, g_free); self->token = g_strdup (token); token_changed = TRUE; } g_clear_pointer (&self->token_expires, g_date_time_unref); if (token_expires != NULL) self->token_expires = g_date_time_ref (token_expires); if (g_strcmp0 (self->profile_icon_url, profile_icon_url) != 0) { g_clear_pointer (&self->profile_icon_url, g_free); self->profile_icon_url = g_strdup (profile_icon_url); icon_changed = TRUE; g_clear_object (&self->paintable); if (profile_icon_url != NULL && profile_icon_url[0] != '\0') { g_autoptr (GFile) file = g_file_new_for_uri (profile_icon_url); self->paintable = bz_async_texture_new (file, NULL); } g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PAINTABLE]); } if (name_changed) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_NAME]); if (token_changed) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TOKEN]); if (icon_changed) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PROFILE_ICON_URL]); if (!!was_authenticated != !!bz_auth_state_is_authenticated (self)) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_AUTHENTICATED]); schedule_token_expiration (self); save_to_secrets (self); } void bz_auth_state_clear (BzAuthState *self) { g_return_if_fail (BZ_IS_AUTH_STATE (self)); g_clear_handle_id (&self->expiration_timeout_id, g_source_remove); clear_secrets (self); bz_auth_state_set_authenticated (self, NULL, NULL, NULL, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-auth-state.h000066400000000000000000000032061522167256300210620ustar00rootroot00000000000000/* bz-auth-state.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include #include G_BEGIN_DECLS #define BZ_TYPE_AUTH_STATE (bz_auth_state_get_type ()) G_DECLARE_FINAL_TYPE (BzAuthState, bz_auth_state, BZ, AUTH_STATE, GObject) BzAuthState *bz_auth_state_new (void); const char * bz_auth_state_get_name (BzAuthState *self); const char * bz_auth_state_get_token (BzAuthState *self); const char * bz_auth_state_get_profile_icon_url (BzAuthState *self); gboolean bz_auth_state_is_authenticated (BzAuthState *self); GdkPaintable * bz_auth_state_get_paintable (BzAuthState *self); void bz_auth_state_set_authenticated (BzAuthState *self, const char *name, const char *token, GDateTime *token_expires, const char *profile_icon_url); void bz_auth_state_clear (BzAuthState *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-backend-notification.txt000066400000000000000000000012521522167256300234450ustar00rootroot00000000000000prefix=bz name=backend_notification parent-prefix=g parent-name=object author=AUTOGEN enum=bz backend_notification_kind error tell_incoming replace_entry invalidate_remotes remote_sync_start remote_sync_finish install_done update_done remove_done external_change present_id include="bz-entry.h" property=kind BzBackendNotificationKind BZ_TYPE_BACKEND_NOTIFICATION_KIND enum property=error char G_TYPE_STRING string property=n_incoming int G_TYPE_INT int property=entry BzEntry BZ_TYPE_ENTRY object property=version char G_TYPE_STRING string property=remote_name char G_TYPE_STRING string property=generic_id char G_TYPE_STRING string property=unique_id char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-backend-transaction-op-payload.txt000066400000000000000000000004641522167256300253530ustar00rootroot00000000000000prefix=bz name=backend_transaction_op_payload parent-prefix=g parent-name=object author=AUTOGEN include="bz-entry.h" property=name char G_TYPE_STRING string property=entry BzEntry BZ_TYPE_ENTRY object property=download_size guint64 G_TYPE_UINT64 uint64 property=installed_size guint64 G_TYPE_UINT64 uint64 bazaar-org-bazaar-b6e9a65/src/bz-backend-transaction-op-progress-payload.txt000066400000000000000000000010351522167256300272100ustar00rootroot00000000000000prefix=bz name=backend_transaction_op_progress_payload parent-prefix=g parent-name=object author=AUTOGEN include="bz-backend-transaction-op-payload.h" property=op BzBackendTransactionOpPayload BZ_TYPE_BACKEND_TRANSACTION_OP_PAYLOAD object property=status char G_TYPE_STRING string property=is_estimating gboolean G_TYPE_BOOLEAN boolean property=progress double G_TYPE_DOUBLE double property=total_progress double G_TYPE_DOUBLE double property=bytes_transferred guint64 G_TYPE_UINT64 uint64 property=start_time guint64 G_TYPE_UINT64 uint64 bazaar-org-bazaar-b6e9a65/src/bz-backend.c000066400000000000000000000226211522167256300203670ustar00rootroot00000000000000/* bz-backend.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include "bz-backend.h" #include "bz-transaction.h" G_DEFINE_INTERFACE (BzBackend, bz_backend, G_TYPE_OBJECT) static DexChannel * bz_backend_real_create_notification_channel (BzBackend *self) { return NULL; } static DexFuture * bz_backend_real_load_local_package (BzBackend *self, GFile *file, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static DexFuture * bz_backend_real_retrieve_remote_entries (BzBackend *self, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static DexFuture * bz_backend_real_retrieve_install_ids (BzBackend *self, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static DexFuture * bz_backend_real_retrieve_update_ids (BzBackend *self, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static DexFuture * bz_backend_real_list_repositories (BzBackend *self, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static DexFuture * bz_backend_real_schedule_transaction (BzBackend *self, BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals, DexChannel *channel, GCancellable *cancellable) { return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Unimplemented"); } static gboolean bz_backend_real_cancel_task_for_entry (BzBackend *self, BzEntry *entry) { return FALSE; } static void bz_backend_default_init (BzBackendInterface *iface) { iface->create_notification_channel = bz_backend_real_create_notification_channel; iface->load_local_package = bz_backend_real_load_local_package; iface->retrieve_remote_entries = bz_backend_real_retrieve_remote_entries; iface->retrieve_install_ids = bz_backend_real_retrieve_install_ids; iface->retrieve_update_ids = bz_backend_real_retrieve_update_ids; iface->list_repositories = bz_backend_real_list_repositories; iface->schedule_transaction = bz_backend_real_schedule_transaction; iface->cancel_task_for_entry = bz_backend_real_cancel_task_for_entry; } DexChannel * bz_backend_create_notification_channel (BzBackend *self) { g_return_val_if_fail (BZ_IS_BACKEND (self), NULL); return BZ_BACKEND_GET_IFACE (self)->create_notification_channel (self); } DexFuture * bz_backend_load_local_package (BzBackend *self, GFile *file, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); dex_return_error_if_fail (G_IS_FILE (file)); dex_return_error_if_fail (cancellable == NULL || G_IS_CANCELLABLE (self)); return BZ_BACKEND_GET_IFACE (self)->load_local_package (self, file, cancellable); } DexFuture * bz_backend_retrieve_remote_entries (BzBackend *self, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); dex_return_error_if_fail (cancellable == NULL || G_IS_CANCELLABLE (self)); return BZ_BACKEND_GET_IFACE (self)->retrieve_remote_entries (self, cancellable); } DexFuture * bz_backend_retrieve_install_ids (BzBackend *self, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); return BZ_BACKEND_GET_IFACE (self)->retrieve_install_ids (self, cancellable); } DexFuture * bz_backend_retrieve_update_ids (BzBackend *self, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); return BZ_BACKEND_GET_IFACE (self)->retrieve_update_ids (self, cancellable); } DexFuture * bz_backend_list_repositories (BzBackend *self, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); dex_return_error_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); return BZ_BACKEND_GET_IFACE (self)->list_repositories (self, cancellable); } DexFuture * bz_backend_schedule_transaction (BzBackend *self, BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals, DexChannel *channel, GCancellable *cancellable) { dex_return_error_if_fail (BZ_IS_BACKEND (self)); dex_return_error_if_fail ((installs != NULL && n_installs > 0) || (updates != NULL && n_updates > 0) || (removals != NULL && n_removals)); if (installs != NULL) { for (guint i = 0; i < n_installs; i++) dex_return_error_if_fail (BZ_IS_ENTRY (installs[i])); } if (updates != NULL) { for (guint i = 0; i < n_updates; i++) dex_return_error_if_fail (BZ_IS_ENTRY (updates[i])); } if (removals != NULL) { for (guint i = 0; i < n_removals; i++) dex_return_error_if_fail (BZ_IS_ENTRY (removals[i])); } return BZ_BACKEND_GET_IFACE (self)->schedule_transaction ( self, installs, n_installs, updates, n_updates, removals, n_removals, channel, cancellable); } DexFuture * bz_backend_merge_and_schedule_transactions (BzBackend *self, GListModel *transactions, DexChannel *channel, GCancellable *cancellable) { guint n_items = 0; g_autoptr (GPtrArray) installs_pa = NULL; g_autoptr (GPtrArray) updates_pa = NULL; g_autoptr (GPtrArray) removals_pa = NULL; dex_return_error_if_fail (G_IS_LIST_MODEL (transactions)); n_items = g_list_model_get_n_items (transactions); dex_return_error_if_fail (n_items > 0); installs_pa = g_ptr_array_new_with_free_func (g_object_unref); updates_pa = g_ptr_array_new_with_free_func (g_object_unref); removals_pa = g_ptr_array_new_with_free_func (g_object_unref); for (guint i = 0; i < n_items; i++) { g_autoptr (BzTransaction) transaction = NULL; GListModel *installs = NULL; GListModel *updates = NULL; GListModel *removals = NULL; guint n_installs = 0; guint n_updates = 0; guint n_removals = 0; transaction = g_list_model_get_item (transactions, i); installs = bz_transaction_get_installs (transaction); updates = bz_transaction_get_updates (transaction); removals = bz_transaction_get_removals (transaction); if (installs != NULL) n_installs = g_list_model_get_n_items (installs); if (updates != NULL) n_updates = g_list_model_get_n_items (updates); if (removals != NULL) n_removals = g_list_model_get_n_items (removals); for (guint j = 0; j < n_installs; j++) g_ptr_array_add (installs_pa, g_list_model_get_item (installs, j)); for (guint j = 0; j < n_updates; j++) g_ptr_array_add (updates_pa, g_list_model_get_item (updates, j)); for (guint j = 0; j < n_removals; j++) g_ptr_array_add (removals_pa, g_list_model_get_item (removals, j)); } return bz_backend_schedule_transaction ( self, (BzEntry **) installs_pa->pdata, installs_pa->len, (BzEntry **) updates_pa->pdata, updates_pa->len, (BzEntry **) removals_pa->pdata, removals_pa->len, channel, cancellable); } gboolean bz_backend_cancel_task_for_entry (BzBackend *self, BzEntry *entry) { g_return_val_if_fail (BZ_IS_BACKEND (self), FALSE); g_return_val_if_fail (BZ_IS_ENTRY (entry), FALSE); return BZ_BACKEND_GET_IFACE (self)->cancel_task_for_entry (self, entry); } bazaar-org-bazaar-b6e9a65/src/bz-backend.h000066400000000000000000000103761522167256300204000ustar00rootroot00000000000000/* bz-backend.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry.h" G_BEGIN_DECLS #define BZ_TYPE_BACKEND (bz_backend_get_type ()) G_DECLARE_INTERFACE (BzBackend, bz_backend, BZ, BACKEND, GObject) struct _BzBackendInterface { GTypeInterface parent_iface; DexChannel *(*create_notification_channel) (BzBackend *self); /* DexFuture* -> char*|BzEntry* */ DexFuture *(*load_local_package) (BzBackend *self, GFile *file, GCancellable *cancellable); /* DexFuture* -> gboolean */ DexFuture *(*retrieve_remote_entries) (BzBackend *self, GCancellable *cancellable); /* DexFuture* -> GHashTable* */ DexFuture *(*retrieve_install_ids) (BzBackend *self, GCancellable *cancellable); /* DexFuture* -> GPtrArray* -> char* */ DexFuture *(*retrieve_update_ids) (BzBackend *self, GCancellable *cancellable); /* DexFuture* -> GListModel* (of BzRepository objects) */ DexFuture *(*list_repositories) (BzBackend *self, GCancellable *cancellable); /* DexFuture* -> gboolean */ DexFuture *(*schedule_transaction) (BzBackend *self, BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals, DexChannel *channel, GCancellable *cancellable); gboolean (*cancel_task_for_entry) (BzBackend *self, BzEntry *entry); }; DexChannel * bz_backend_create_notification_channel (BzBackend *self); DexFuture * bz_backend_load_local_package (BzBackend *self, GFile *file, GCancellable *cancellable); DexFuture * bz_backend_retrieve_remote_entries (BzBackend *self, GCancellable *cancellable); DexFuture * bz_backend_retrieve_install_ids (BzBackend *self, GCancellable *cancellable); DexFuture * bz_backend_retrieve_update_ids (BzBackend *self, GCancellable *cancellable); DexFuture * bz_backend_list_repositories (BzBackend *self, GCancellable *cancellable); DexFuture * bz_backend_schedule_transaction (BzBackend *self, BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals, DexChannel *channel, GCancellable *cancellable); DexFuture * bz_backend_merge_and_schedule_transactions (BzBackend *self, GListModel *transactions, DexChannel *channel, GCancellable *cancellable); gboolean bz_backend_cancel_task_for_entry (BzBackend *self, BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-banner-view.blp000066400000000000000000000020511522167256300215430ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzBannerView: Adw.Bin { hexpand: true; vexpand: false; margin-top: 20; child: Box box { hexpand: true; vexpand: false; halign: fill; valign: fill; height-request: bind try {$get_height(template.banner as <$BzCuratedBanner>.height), 250}; overflow: hidden; css-name: "banner"; styles ["card"] Picture picture { css-name: "image"; hexpand: true; alternative-text: bind template.banner as <$BzCuratedBanner>.image as <$BzCuratedImageInfo>.alt; visible: bind $invert_boolean($is_null(template.banner as <$BzCuratedBanner>.image) as ) as ; paintable: bind $get_image(template.banner as <$BzCuratedBanner>.image) as <$GdkPaintable>; can-shrink: bind template.banner as <$BzCuratedBanner>.image as <$BzCuratedImageInfo>.can-shrink; content-fit: bind template.banner as <$BzCuratedBanner>.image as <$BzCuratedImageInfo>.fit; halign: bind template.banner as <$BzCuratedBanner>.image as <$BzCuratedImageInfo>.halign; } }; }bazaar-org-bazaar-b6e9a65/src/bz-banner-view.c000066400000000000000000000206751522167256300212240ustar00rootroot00000000000000/* bz-banner-view.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include "bz-banner-view.h" #include "bz-async-texture.h" #include "bz-curated-image-info.h" struct _BzBannerView { AdwBin parent_instance; BzCuratedBanner *banner; AdwStyleManager *style_manager; GtkCssProvider *css_provider; char *instance_class; /* Template widgets */ GtkBox *box; GtkPicture *picture; }; G_DEFINE_FINAL_TYPE (BzBannerView, bz_banner_view, ADW_TYPE_BIN) enum { PROP_0, PROP_BANNER, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void dark_changed (BzBannerView *self, GParamSpec *pspec, AdwStyleManager *mgr); static void refresh_background_color (BzBannerView *self, AdwStyleManager *mgr); static BzAsyncTexture * choose_image (const char *default_variant_uri, const char *light_variant_uri, const char *dark_variant_uri); static void bz_banner_view_dispose (GObject *object) { BzBannerView *self = BZ_BANNER_VIEW (object); g_signal_handlers_disconnect_by_func ( self->style_manager, dark_changed, self); if (self->css_provider != NULL) { gtk_style_context_remove_provider_for_display ( gtk_widget_get_display (GTK_WIDGET (self)), GTK_STYLE_PROVIDER (self->css_provider)); g_clear_object (&self->css_provider); } g_clear_pointer (&self->instance_class, g_free); g_clear_object (&self->banner); g_clear_object (&self->style_manager); G_OBJECT_CLASS (bz_banner_view_parent_class)->dispose (object); } static void bz_banner_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzBannerView *self = BZ_BANNER_VIEW (object); switch (prop_id) { case PROP_BANNER: g_value_set_object (value, bz_banner_view_get_banner (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_banner_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzBannerView *self = BZ_BANNER_VIEW (object); switch (prop_id) { case PROP_BANNER: bz_banner_view_set_banner (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static BzAsyncTexture * get_image (gpointer object, BzCuratedImageInfo *info) { const char *image = NULL; const char *light_image = NULL; const char *dark_image = NULL; if (!BZ_IS_CURATED_IMAGE_INFO (info)) return NULL; image = bz_curated_image_info_get_uri (info); light_image = bz_curated_image_info_get_light_uri (info); dark_image = bz_curated_image_info_get_dark_uri (info); return choose_image (image, light_image, dark_image); } static int get_height (gpointer object, int value) { if (value == 0) return 250; return CLAMP (value, 150, 400); } static void bz_banner_view_class_init (BzBannerViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_banner_view_dispose; object_class->get_property = bz_banner_view_get_property; object_class->set_property = bz_banner_view_set_property; props[PROP_BANNER] = g_param_spec_object ( "banner", NULL, NULL, BZ_TYPE_CURATED_BANNER, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_ASYNC_TEXTURE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-banner-view.ui"); gtk_widget_class_bind_template_child (widget_class, BzBannerView, picture); gtk_widget_class_bind_template_child (widget_class, BzBannerView, box); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, get_image); gtk_widget_class_bind_template_callback (widget_class, get_height); } static void dark_changed (BzBannerView *self, GParamSpec *pspec, AdwStyleManager *mgr) { refresh_background_color (self, mgr); if (self->banner != NULL) g_object_notify (G_OBJECT (self->banner), "image"); } static void bz_banner_view_init (BzBannerView *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->style_manager = g_object_ref ( adw_style_manager_get_default ()); g_signal_connect_swapped ( self->style_manager, "notify::dark", G_CALLBACK (dark_changed), self); } GtkWidget * bz_banner_view_new (BzCuratedBanner *banner) { return g_object_new ( BZ_TYPE_BANNER_VIEW, "banner", banner, NULL); } void bz_banner_view_set_banner (BzBannerView *self, BzCuratedBanner *banner) { g_return_if_fail (BZ_IS_BANNER_VIEW (self)); g_return_if_fail (banner == NULL || BZ_IS_CURATED_BANNER (banner)); g_clear_object (&self->banner); if (banner != NULL) { self->banner = g_object_ref (banner); refresh_background_color (self, NULL); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_BANNER]); } BzCuratedBanner * bz_banner_view_get_banner (BzBannerView *self) { g_return_val_if_fail (BZ_IS_BANNER_VIEW (self), NULL); return self->banner; } static void refresh_background_color (BzBannerView *self, AdwStyleManager *mgr) { g_autofree char *css = NULL; g_autofree char *light_color = NULL; g_autofree char *dark_color = NULL; const char *color = NULL; if (self->banner == NULL) return; if (mgr == NULL) mgr = adw_style_manager_get_default (); g_object_get ( self->banner, "light-color", &light_color, "dark-color", &dark_color, NULL); color = adw_style_manager_get_dark (mgr) ? dark_color : light_color; if (color == NULL) return; if (self->instance_class == NULL) { self->instance_class = g_strdup_printf ( "bz-banner-%p", (void *) self); gtk_widget_add_css_class (GTK_WIDGET (self->box), "card"); gtk_widget_add_css_class (GTK_WIDGET (self->box), self->instance_class); } css = g_strdup_printf (".card.%s { background-color: %s; }", self->instance_class, color); if (self->css_provider == NULL) { self->css_provider = gtk_css_provider_new (); gtk_style_context_add_provider_for_display ( gtk_widget_get_display (GTK_WIDGET (self->box)), GTK_STYLE_PROVIDER (self->css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); } gtk_css_provider_load_from_string (self->css_provider, css); } static BzAsyncTexture * choose_image (const char *default_variant_uri, const char *light_variant_uri, const char *dark_variant_uri) { gboolean is_dark = FALSE; const char *uri = NULL; g_autoptr (GFile) source = NULL; is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); if (is_dark) uri = dark_variant_uri; else uri = light_variant_uri; if (uri == NULL) uri = default_variant_uri; if (uri == NULL) return NULL; source = g_file_new_for_uri (uri); return bz_async_texture_new_lazy (source, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-banner-view.h000066400000000000000000000023121522167256300212150ustar00rootroot00000000000000/* bz-banner-view.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include "bz-curated-banner.h" G_BEGIN_DECLS #define BZ_TYPE_BANNER_VIEW (bz_banner_view_get_type ()) G_DECLARE_FINAL_TYPE (BzBannerView, bz_banner_view, BZ, BANNER_VIEW, AdwBin) GtkWidget * bz_banner_view_new (BzCuratedBanner *banner); void bz_banner_view_set_banner (BzBannerView *self, BzCuratedBanner *banner); BzCuratedBanner * bz_banner_view_get_banner (BzBannerView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-blocklist-condition-match-envvar.txt000066400000000000000000000002631522167256300257360ustar00rootroot00000000000000prefix=bz name=blocklist_condition_match_envvar parent-prefix=g parent-name=object author=AUTOGEN property=var char G_TYPE_STRING string property=regex char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-blocklist-condition-match-locale.txt000066400000000000000000000002141522167256300256700ustar00rootroot00000000000000prefix=bz name=blocklist_condition_match_locale parent-prefix=g parent-name=object author=AUTOGEN property=regex char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-blocklist-condition.txt000066400000000000000000000010601522167256300233410ustar00rootroot00000000000000prefix=bz name=blocklist_condition parent-prefix=g parent-name=object author=AUTOGEN enum=bz blocklist_condition_post_process_kind identity invert include="bz-blocklist-condition-match-envvar.h" include="bz-blocklist-condition-match-locale.h" property=match_envvar BzBlocklistConditionMatchEnvvar BZ_TYPE_BLOCKLIST_CONDITION_MATCH_ENVVAR object property=match_locale BzBlocklistConditionMatchLocale BZ_TYPE_BLOCKLIST_CONDITION_MATCH_LOCALE object property=post_process BzBlocklistConditionPostProcessKind BZ_TYPE_BLOCKLIST_CONDITION_POST_PROCESS_KIND enum bazaar-org-bazaar-b6e9a65/src/bz-blocklist.txt000066400000000000000000000007401522167256300213610ustar00rootroot00000000000000prefix=bz name=blocklist parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-blocklist-condition.h" ensure=BZ_TYPE_BLOCKLIST_CONDITION property=priority int G_TYPE_INT int property=conditions GListModel G_TYPE_LIST_MODEL object property=allow GListModel G_TYPE_LIST_MODEL object property=allow_regex GListModel G_TYPE_LIST_MODEL object property=block GListModel G_TYPE_LIST_MODEL object property=block_regex GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-bulk-install-dialog-result.txt000066400000000000000000000003331522167256300245430ustar00rootroot00000000000000prefix=bz name=bulk_install_dialog_result parent-prefix=g parent-name=object author=AUTOGEN include="bz-entry.h" property=entries GListModel G_TYPE_LIST_MODEL object property=confirmed gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-bundle-install-dialog.blp000066400000000000000000000427121522167256300235100ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzBundleInstallDialog: Adw.Dialog { content-width: 500; content-height: 520; width-request: 360; height-request: 294; Adw.Breakpoint { condition ("max-width: 400px") setters { install_label.visible: false; install_icon.visible: true; } } child: Adw.NavigationView nav_view { Adw.NavigationPage { tag: "main"; title: _("Bundle Installation"); child: Adw.ToolbarView { [top] Adw.HeaderBar { title-widget: Label { label: _("Bundle Installation"); }; show-title: false; } content: Stack main_stack { StackPage { name: "carousel"; child: Adw.Carousel carousel { interactive: false; spacing: 64; ScrolledWindow { hscrollbar-policy: never; hexpand: true; valign: fill; Box { orientation: vertical; spacing: 16; valign: start; halign: fill; hexpand: true; margin-top: 24; margin-bottom: 24; margin-start: 24; margin-end: 24; Box { orientation: bind $get_header_orientation(template.runtime-repo) as ; spacing: 16; halign: fill; valign: start; Image icon { paintable: bind template.entry as <$BzEntry>.icon-paintable; visible: bind $invert_boolean( $is_null(template.entry as <$BzEntry>.icon-paintable) as ) as ; use-fallback: true; pixel-size: 96; halign: bind $get_header_halign(template.runtime-repo) as ; valign: center; styles [ "icon-dropshadow", ] } Image { icon-name: "application-x-executable"; pixel-size: 96; visible: bind $invert_boolean(icon.visible) as ; halign: bind $get_header_halign(template.runtime-repo) as ; valign: center; styles [ "icon-dropshadow", ] } Box { orientation: vertical; spacing: 2; valign: center; hexpand: true; Label { label: bind template.entry as <$BzEntry>.title; selectable: true; wrap: true; wrap-mode: word_char; halign: bind $get_header_halign(template.runtime-repo) as ; xalign: 0; styles [ "title-3", ] } Label { label: bind template.entry as <$BzEntry>.developer; selectable: true; wrap: true; wrap-mode: word_char; halign: bind $get_header_halign(template.runtime-repo) as ; xalign: 0; visible: bind $not($is_empty_string(template.entry as <$BzEntry>.developer) as ) as ; styles [ "dim-label", ] } Label { label: bind $get_version(template.entry as <$BzEntry>.version-history); selectable: true; visible: bind $not( $is_empty_string($get_version(template.entry as <$BzEntry>.version-history) as ) as ) as ; halign: bind $get_header_halign(template.runtime-repo) as ; xalign: 0; styles [ "dim-label", "caption", ] } } Button { styles [ "suggested-action", "pill", ] valign: center; halign: center; visible: bind $is_null(template.runtime-repo) as ; label: C_("Install Controls", "Install"); clicked => $install_cb(template); } Box { visible: bind $not($is_null(template.runtime-repo) as ) as ; Button install_label { styles [ "suggested-action", "pill", ] valign: center; halign: bind $get_header_halign(template.runtime-repo) as ; label: C_("Install Controls", "Install"); clicked => $install_cb(template); } Button install_icon { styles [ "suggested-action", "circular", "circular-download-pill", ] valign: center; visible: false; halign: bind $get_header_halign(template.runtime-repo) as ; icon-name: "folder-download-symbolic"; clicked => $install_cb(template); } } } Adw.PreferencesGroup { margin-top: 12; Adw.ActionRow { [prefix] Image { icon-name: "drive-harddisk-symbolic"; valign: center; styles [ "circular-lozenge", "grey", ] } title: bind $get_disk_title(template.entry as <$BzEntry>.installed-size); subtitle: _("Additional dependencies may take extra space"); } Adw.ActionRow { [prefix] Image safety_icon { icon-name: bind $get_safety_icon_name(template.entry as <$BzEntry>); valign: center; styles [ "circular-lozenge", ] } [suffix] Image { icon-name: "go-next-symbolic"; } title: bind $get_safety_rating_label(template.entry); subtitle: bind $get_safety_subtitle(template.entry); subtitle-lines: 1; activatable: true; activated => $permission_cb(); } } Box { orientation: vertical; spacing: 4; visible: bind $not($is_null(template.runtime-repo) as ) as ; Label { label: _( "Installing this app may require adding a new software source. Other apps from this source will show up in Bazaar.\n\nOnly add this source if you're sure you trust it." ); wrap: true; wrap-mode: word_char; selectable: true; halign: start; margin-bottom: 6; styles [ "body", ] } Adw.PreferencesGroup { Adw.ActionRow { activatable: bind $not( $is_null(template.runtime-repo as <$BzFlatpakRepo>.homepage) as ) as ; activated => $repo_cb(); child: Box { margin-top: 8; margin-bottom: 8; margin-start: 8; margin-end: 16; spacing: 8; Image bundle_image { pixel-size: 48; } Box { orientation: vertical; spacing: 4; hexpand: true; Label { label: bind template.runtime-repo as <$BzFlatpakRepo>.title; halign: start; ellipsize: end; styles [ "heading", ] } Label { label: bind template.runtime-repo as <$BzFlatpakRepo>.description; wrap: true; halign: start; wrap-mode: word_char; lines: 2; ellipsize: end; } Label { halign: start; label: bind $format_url(template.runtime-repo as <$BzFlatpakRepo>.url); ellipsize: end; styles [ "accent", "caption", ] } } Image { icon-name: "external-link-symbolic"; margin-start: 8; visible: bind $not( $is_null(template.runtime-repo as <$BzFlatpakRepo>.homepage) as ) as ; } }; } } } } } Box page_progress { orientation: vertical; spacing: 12; valign: center; halign: fill; margin-top: 24; margin-bottom: 24; margin-start: 48; margin-end: 48; Image loading_icon { paintable: bind template.entry as <$BzEntry>.icon-paintable; visible: bind $invert_boolean( $is_null(template.entry as <$BzEntry>.icon-paintable) as ) as ; pixel-size: 128; margin-bottom: 12; styles [ "icon-dropshadow", ] } Image { icon-name: "application-x-executable"; pixel-size: 128; visible: bind $invert_boolean(loading_icon.visible) as ; margin-bottom: 12; styles [ "icon-dropshadow", ] } Label { label: bind template.entry as <$BzEntry>.title; selectable: true; wrap: true; wrap-mode: word_char; halign: center; styles [ "title-3", ] } ProgressBar progress_bar { margin-top: 16; pulse-step: 0.05; width-request: 250; } } ScrolledWindow page_finish { Box { orientation: vertical; spacing: 8; valign: center; halign: fill; margin-top: 24; margin-bottom: 24; margin-start: 24; margin-end: 24; Image end_icon { paintable: bind template.entry as <$BzEntry>.icon-paintable; visible: bind $invert_boolean( $is_null(template.entry as <$BzEntry>.icon-paintable) as ) as ; pixel-size: 128; margin-bottom: 12; styles [ "icon-dropshadow", ] } Image { icon-name: "application-x-executable"; pixel-size: 128; visible: bind $invert_boolean(end_icon.visible) as ; margin-bottom: 12; styles [ "icon-dropshadow", ] } Label { label: bind template.entry as <$BzEntry>.title; selectable: true; wrap: true; wrap-mode: word_char; halign: center; styles [ "title-3", ] } Label { label: _("Successfully Installed!"); selectable: true; halign: center; margin-bottom: 16; margin-top: 8; styles [ "dim-label", ] } Box { width-request: 40; orientation: vertical; spacing: 8; margin-top: 8; halign: center; Button open_btn { styles [ "suggested-action", "pill", ] halign: fill; label: _("Open"); clicked => $run_cb(template); } Button show_in_store_btn { styles [ "pill", ] halign: fill; label: _("Show App Details"); clicked => $show_cb(template); } } } } }; } StackPage { name: "installed"; child: Box { orientation: vertical; spacing: 8; valign: center; halign: fill; margin-top: 24; margin-bottom: 24; margin-start: 24; margin-end: 24; Image installed_icon { paintable: bind template.entry as <$BzEntry>.icon-paintable; visible: bind $invert_boolean( $is_null(template.entry as <$BzEntry>.icon-paintable) as ) as ; pixel-size: 128; margin-bottom: 12; } Image { icon-name: "application-x-executable"; pixel-size: 128; visible: bind $invert_boolean(installed_icon.visible) as ; margin-bottom: 12; } Label { label: bind template.entry as <$BzEntry>.title; selectable: true; wrap: true; wrap-mode: word_char; halign: center; styles [ "title-3", ] } Label { label: _("Already Installed"); selectable: true; styles [ "dim-label", "caption", ] halign: center; } Box { orientation: vertical; spacing: 8; margin-top: 24; halign: center; Button { styles [ "suggested-action", "pill", ] halign: fill; label: _("Open"); clicked => $run_cb(template); } Button { styles [ "pill", ] halign: fill; label: _("Show App Details"); clicked => $show_cb(template); } } }; } StackPage { name: "error"; child: Adw.StatusPage error_status { icon-name: "sad-computer-symbolic"; title: _("Installation Failed"); }; } }; }; } }; } bazaar-org-bazaar-b6e9a65/src/bz-bundle-install-dialog.c000066400000000000000000000417661522167256300231650ustar00rootroot00000000000000/* bz-bundle-install-dialog.c * * Copyright 2026 Eva M * * 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 */ #include #include "bz-app-permissions.h" #include "bz-app-size-dialog.h" #include "bz-application-map-factory.h" #include "bz-application.h" #include "bz-async-texture.h" #include "bz-bundle-install-dialog.h" #include "bz-context-tile-callbacks.h" #include "bz-env.h" #include "bz-flatpak-repo.h" #include "bz-release.h" #include "bz-safety-calculator.h" #include "bz-safety-dialog.h" #include "bz-state-info.h" #include "bz-template-callbacks.h" #include "bz-util.h" struct _BzBundleInstallDialog { AdwDialog parent_instance; BzStateInfo *state; BzEntry *entry; BzFlatpakRepo *runtime_repo; AdwNavigationView *nav_view; GtkStack *main_stack; AdwCarousel *carousel; GtkWidget *page_progress; GtkWidget *page_finish; GtkProgressBar *progress_bar; AdwStatusPage *error_status; GtkImage *safety_icon; GtkImage *bundle_image; guint pulse_source_id; }; G_DEFINE_FINAL_TYPE (BzBundleInstallDialog, bz_bundle_install_dialog, ADW_TYPE_DIALOG); enum { PROP_0, PROP_STATE, PROP_ENTRY, PROP_RUNTIME_REPO, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * install_fiber (GWeakRef *wr); static void bz_bundle_install_dialog_dispose (GObject *object) { BzBundleInstallDialog *self = BZ_BUNDLE_INSTALL_DIALOG (object); g_clear_handle_id (&self->pulse_source_id, g_source_remove); g_clear_pointer (&self->state, g_object_unref); g_clear_pointer (&self->entry, g_object_unref); g_clear_pointer (&self->runtime_repo, g_object_unref); G_OBJECT_CLASS (bz_bundle_install_dialog_parent_class)->dispose (object); } static void bz_bundle_install_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzBundleInstallDialog *self = BZ_BUNDLE_INSTALL_DIALOG (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_bundle_install_dialog_get_state (self)); break; case PROP_ENTRY: g_value_set_object (value, bz_bundle_install_dialog_get_entry (self)); break; case PROP_RUNTIME_REPO: g_value_set_object (value, bz_bundle_install_dialog_get_runtime_repo (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_bundle_install_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzBundleInstallDialog *self = BZ_BUNDLE_INSTALL_DIALOG (object); switch (prop_id) { case PROP_STATE: bz_bundle_install_dialog_set_state (self, g_value_get_object (value)); break; case PROP_ENTRY: bz_bundle_install_dialog_set_entry (self, g_value_get_object (value)); break; case PROP_RUNTIME_REPO: bz_bundle_install_dialog_set_runtime_repo (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean pulse_progress_bar (gpointer user_data) { BzBundleInstallDialog *self = BZ_BUNDLE_INSTALL_DIALOG (user_data); gtk_progress_bar_pulse (self->progress_bar); return G_SOURCE_CONTINUE; } static char * get_version (gpointer object, GListModel *version_history) { g_autoptr (BzRelease) release = NULL; if (version_history == NULL || g_list_model_get_n_items (version_history) == 0) return NULL; release = g_list_model_get_item (version_history, 0); return g_strdup (bz_release_get_version (release)); } static char * get_disk_title (gpointer object, guint64 installed_size) { g_autofree char *size_str = NULL; if (installed_size == 0) return g_strdup (_ ("Unknown install size")); size_str = g_format_size (installed_size); return g_strdup_printf (_ ("About %s to install"), size_str); } static char * get_safety_subtitle (gpointer object, BzEntry *entry) { g_autoptr (GListModel) model = NULL; g_autoptr (GString) result = NULL; guint n_items = 0; guint n_picked = 0; guint n_total = 0; if (entry == NULL) return g_strdup (_ ("N/A")); model = bz_safety_calculator_analyze_entry (entry); n_items = g_list_model_get_n_items (model); result = g_string_new (NULL); for (guint i = 0; i < n_items; i++) { g_autoptr (BzSafetyRow) row = g_list_model_get_item (model, i); BzImportance importance = BZ_IMPORTANCE_UNIMPORTANT; g_autofree char *title = NULL; g_object_get (row, "importance", &importance, "title", &title, NULL); if (importance <= BZ_IMPORTANCE_UNIMPORTANT || title == NULL) continue; n_total++; if (n_picked < 2) { if (n_picked > 0) g_string_append (result, ", "); g_string_append (result, title); n_picked++; } } if (n_picked == 0) return g_strdup (_ ("No special permissions")); if (n_total > 2) g_string_append (result, ", …"); return g_string_free (g_steal_pointer (&result), FALSE); } static char * get_safety_icon_name (gpointer object, BzEntry *entry) { BzImportance importance; if (entry == NULL) return g_strdup ("app-safety-unknown-symbolic"); importance = bz_safety_calculator_calculate_rating (entry); switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: case BZ_IMPORTANCE_NEUTRAL: case BZ_IMPORTANCE_INFORMATION: return g_strdup ("app-safety-ok-symbolic"); case BZ_IMPORTANCE_WARNING: return g_strdup ("permissions-warning-symbolic"); case BZ_IMPORTANCE_IMPORTANT: return g_strdup ("app-safety-unsafe-symbolic"); default: return g_strdup ("app-safety-unknown-symbolic"); } } static char * format_url (gpointer object, const char *url) { g_autoptr (GUri) uri = NULL; const char *host = NULL; if (url == NULL || (uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL)) == NULL || (host = g_uri_get_host (uri)) == NULL) return g_strdup (url); return g_strdup (host); } static GtkAlign get_header_halign (gpointer object, BzFlatpakRepo *runtime_repo) { return runtime_repo != NULL ? GTK_ALIGN_FILL : GTK_ALIGN_CENTER; } static GtkOrientation get_header_orientation (gpointer object, BzFlatpakRepo *runtime_repo) { return runtime_repo != NULL ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; } static void install_cb (BzBundleInstallDialog *self, GtkButton *button) { if (self->entry == NULL || self->state == NULL) return; adw_carousel_scroll_to (self->carousel, self->page_progress, TRUE); self->pulse_source_id = g_timeout_add (80, pulse_progress_bar, self); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) install_fiber, bz_track_weak (self), bz_weak_release)); } static void run_cb (BzBundleInstallDialog *self, GtkButton *button) { const char *id = NULL; if (self->entry == NULL) return; id = bz_entry_get_id (self->entry); gtk_widget_activate_action (GTK_WIDGET (self), "window.launch-group", "s", id); } static void show_cb (BzBundleInstallDialog *self, GtkButton *button) { const char *id = NULL; if (self->entry == NULL) return; id = bz_entry_get_id (self->entry); adw_dialog_close (ADW_DIALOG (gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_DIALOG))); gtk_widget_activate_action (GTK_WIDGET (self), "window.show-group", "s", id); } static void permission_cb (AdwActionRow *row, BzBundleInstallDialog *self) { AdwNavigationPage *page = NULL; if (self->entry == NULL) return; page = bz_safety_dialog_page_new (self->entry); adw_navigation_view_push (self->nav_view, page); } static void repo_cb (AdwActionRow *row, BzBundleInstallDialog *self) { if (self->runtime_repo != NULL) gtk_uri_launcher_launch ( gtk_uri_launcher_new (bz_flatpak_repo_get_homepage (self->runtime_repo)), NULL, NULL, NULL, NULL); } static void bz_bundle_install_dialog_class_init (BzBundleInstallDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_bundle_install_dialog_set_property; object_class->get_property = bz_bundle_install_dialog_get_property; object_class->dispose = bz_bundle_install_dialog_dispose; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_RUNTIME_REPO] = g_param_spec_object ( "runtime-repo", NULL, NULL, BZ_TYPE_FLATPAK_REPO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-bundle-install-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); bz_widget_class_bind_all_context_tile_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, nav_view); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, main_stack); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, carousel); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, page_progress); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, page_finish); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, progress_bar); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, error_status); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, safety_icon); gtk_widget_class_bind_template_child (widget_class, BzBundleInstallDialog, bundle_image); gtk_widget_class_bind_template_callback (widget_class, install_cb); gtk_widget_class_bind_template_callback (widget_class, run_cb); gtk_widget_class_bind_template_callback (widget_class, show_cb); gtk_widget_class_bind_template_callback (widget_class, repo_cb); gtk_widget_class_bind_template_callback (widget_class, permission_cb); gtk_widget_class_bind_template_callback (widget_class, get_version); gtk_widget_class_bind_template_callback (widget_class, get_disk_title); gtk_widget_class_bind_template_callback (widget_class, get_safety_subtitle); gtk_widget_class_bind_template_callback (widget_class, get_safety_icon_name); gtk_widget_class_bind_template_callback (widget_class, format_url); gtk_widget_class_bind_template_callback (widget_class, get_header_halign); gtk_widget_class_bind_template_callback (widget_class, get_header_orientation); } static void bz_bundle_install_dialog_init (BzBundleInstallDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } static void bz_bundle_install_dialog_update_visible_page (BzBundleInstallDialog *self) { if (self->entry == NULL) return; if (bz_entry_is_installed (self->entry)) gtk_stack_set_visible_child_name (self->main_stack, "installed"); else gtk_stack_set_visible_child_name (self->main_stack, "carousel"); } BzBundleInstallDialog * bz_bundle_install_dialog_new (void) { return g_object_new (BZ_TYPE_BUNDLE_INSTALL_DIALOG, NULL); } BzStateInfo * bz_bundle_install_dialog_get_state (BzBundleInstallDialog *self) { g_return_val_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self), NULL); return self->state; } BzEntry * bz_bundle_install_dialog_get_entry (BzBundleInstallDialog *self) { g_return_val_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self), NULL); return self->entry; } BzFlatpakRepo * bz_bundle_install_dialog_get_runtime_repo (BzBundleInstallDialog *self) { g_return_val_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self), NULL); return self->runtime_repo; } void bz_bundle_install_dialog_set_state (BzBundleInstallDialog *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); if (state == self->state) return; g_clear_pointer (&self->state, g_object_unref); if (state != NULL) self->state = g_object_ref (state); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } void bz_bundle_install_dialog_set_entry (BzBundleInstallDialog *self, BzEntry *entry) { BzImportance importance = 0; const char *style = NULL; g_return_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self)); g_return_if_fail (entry == NULL || BZ_IS_ENTRY (entry)); if (entry == self->entry) return; g_clear_pointer (&self->entry, g_object_unref); if (entry != NULL) self->entry = g_object_ref (entry); bz_bundle_install_dialog_update_visible_page (self); if (self->entry != NULL) { importance = bz_safety_calculator_calculate_rating (self->entry); style = bz_safety_style_for_importance (importance); gtk_widget_add_css_class (GTK_WIDGET (self->safety_icon), style); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENTRY]); } void bz_bundle_install_dialog_set_runtime_repo (BzBundleInstallDialog *self, BzFlatpakRepo *runtime_repo) { g_return_if_fail (BZ_IS_BUNDLE_INSTALL_DIALOG (self)); g_return_if_fail (runtime_repo == NULL || BZ_IS_FLATPAK_REPO (runtime_repo)); if (runtime_repo == self->runtime_repo) return; g_set_object (&self->runtime_repo, runtime_repo); if (self->bundle_image != NULL) { const char *icon_url = NULL; icon_url = runtime_repo != NULL ? bz_flatpak_repo_get_icon (runtime_repo) : NULL; if (icon_url != NULL) { g_autoptr (BzAsyncTexture) async_tex = NULL; async_tex = bz_async_texture_new (g_file_new_for_uri (icon_url), NULL); gtk_image_set_from_paintable (self->bundle_image, GDK_PAINTABLE (async_tex)); } else gtk_image_set_from_icon_name (self->bundle_image, "application-x-executable"); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RUNTIME_REPO]); } static DexFuture * install_fiber (GWeakRef *wr) { g_autoptr (BzBundleInstallDialog) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (BzTransaction) transaction = NULL; g_autoptr (BzTransactionManager) ts_manager = NULL; gboolean success = FALSE; g_autofree char *error_message = NULL; bz_weak_get_or_return_reject (self, wr); if (self->entry == NULL || self->state == NULL) return dex_future_new_false (); transaction = bz_transaction_new_full ( &self->entry, 1, NULL, 0, NULL, 0); ts_manager = g_object_ref (bz_state_info_get_transaction_manager (self->state)); dex_await ( bz_transaction_manager_add ( ts_manager, transaction), &local_error); g_object_get (transaction, "success", &success, "error", &error_message, NULL); g_clear_handle_id (&self->pulse_source_id, g_source_remove); if (local_error != NULL || !success) { const char *description = local_error != NULL ? local_error->message : error_message; adw_status_page_set_description (self->error_status, description); gtk_stack_set_visible_child_name (self->main_stack, "error"); } else adw_carousel_scroll_to (self->carousel, self->page_finish, TRUE); return dex_future_new_true (); } /* End of bz-bundle-install-dialog.c */ bazaar-org-bazaar-b6e9a65/src/bz-bundle-install-dialog.h000066400000000000000000000035471522167256300231650ustar00rootroot00000000000000/* bz-bundle-install-dialog.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include #include "bz-entry.h" #include "bz-flatpak-repo.h" #include "bz-state-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_BUNDLE_INSTALL_DIALOG (bz_bundle_install_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzBundleInstallDialog, bz_bundle_install_dialog, BZ, BUNDLE_INSTALL_DIALOG, AdwDialog) BzBundleInstallDialog * bz_bundle_install_dialog_new (void); BzStateInfo * bz_bundle_install_dialog_get_state (BzBundleInstallDialog *self); BzEntry * bz_bundle_install_dialog_get_entry (BzBundleInstallDialog *self); BzFlatpakRepo * bz_bundle_install_dialog_get_runtime_repo (BzBundleInstallDialog *self); void bz_bundle_install_dialog_set_state (BzBundleInstallDialog *self, BzStateInfo *state); void bz_bundle_install_dialog_set_entry (BzBundleInstallDialog *self, BzEntry *entry); void bz_bundle_install_dialog_set_runtime_repo (BzBundleInstallDialog *self, BzFlatpakRepo *runtime_repo); G_END_DECLS /* End of bz-bundle-install-dialog.h */ bazaar-org-bazaar-b6e9a65/src/bz-category-flags.c000066400000000000000000000123561522167256300217130ustar00rootroot00000000000000/* bz-category-flags.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include "bz-category-flags.h" static const struct { const char *name; BzCategoryFlags flag; } name_flag_map[] = { { "audiovideo", BZ_CATEGORY_FLAGS_AUDIOVIDEO }, { "development", BZ_CATEGORY_FLAGS_DEVELOPMENT }, { "education", BZ_CATEGORY_FLAGS_EDUCATION }, { "game", BZ_CATEGORY_FLAGS_GAME }, { "graphics", BZ_CATEGORY_FLAGS_GRAPHICS }, { "network", BZ_CATEGORY_FLAGS_NETWORK }, { "office", BZ_CATEGORY_FLAGS_OFFICE }, { "science", BZ_CATEGORY_FLAGS_SCIENCE }, { "system", BZ_CATEGORY_FLAGS_SYSTEM }, { "utility", BZ_CATEGORY_FLAGS_UTILITY }, { "trending", BZ_CATEGORY_FLAGS_TRENDING }, { "popular", BZ_CATEGORY_FLAGS_POPULAR }, { "recently-added", BZ_CATEGORY_FLAGS_RECENTLY_ADDED }, { "recently-updated", BZ_CATEGORY_FLAGS_RECENTLY_UPDATED }, { "mobile", BZ_CATEGORY_FLAGS_MOBILE }, { "adwaita", BZ_CATEGORY_FLAGS_ADWAITA }, { "kde", BZ_CATEGORY_FLAGS_KDE }, }; GType bz_category_flags_get_type (void) { static gsize g_define_type_id = 0; if (g_once_init_enter (&g_define_type_id)) { static const GFlagsValue values[] = { { BZ_CATEGORY_FLAGS_NONE, "BZ_CATEGORY_FLAGS_NONE", "none" }, { BZ_CATEGORY_FLAGS_AUDIOVIDEO, "BZ_CATEGORY_FLAGS_AUDIOVIDEO", "audiovideo" }, { BZ_CATEGORY_FLAGS_DEVELOPMENT, "BZ_CATEGORY_FLAGS_DEVELOPMENT", "development" }, { BZ_CATEGORY_FLAGS_EDUCATION, "BZ_CATEGORY_FLAGS_EDUCATION", "education" }, { BZ_CATEGORY_FLAGS_GAME, "BZ_CATEGORY_FLAGS_GAME", "game" }, { BZ_CATEGORY_FLAGS_GRAPHICS, "BZ_CATEGORY_FLAGS_GRAPHICS", "graphics" }, { BZ_CATEGORY_FLAGS_NETWORK, "BZ_CATEGORY_FLAGS_NETWORK", "network" }, { BZ_CATEGORY_FLAGS_OFFICE, "BZ_CATEGORY_FLAGS_OFFICE", "office" }, { BZ_CATEGORY_FLAGS_SCIENCE, "BZ_CATEGORY_FLAGS_SCIENCE", "science" }, { BZ_CATEGORY_FLAGS_SYSTEM, "BZ_CATEGORY_FLAGS_SYSTEM", "system" }, { BZ_CATEGORY_FLAGS_UTILITY, "BZ_CATEGORY_FLAGS_UTILITY", "utility" }, { BZ_CATEGORY_FLAGS_TRENDING, "BZ_CATEGORY_FLAGS_TRENDING", "trending" }, { BZ_CATEGORY_FLAGS_POPULAR, "BZ_CATEGORY_FLAGS_POPULAR", "popular" }, { BZ_CATEGORY_FLAGS_RECENTLY_ADDED, "BZ_CATEGORY_FLAGS_RECENTLY_ADDED", "recently-added" }, { BZ_CATEGORY_FLAGS_RECENTLY_UPDATED, "BZ_CATEGORY_FLAGS_RECENTLY_UPDATED", "recently-updated" }, { BZ_CATEGORY_FLAGS_MOBILE, "BZ_CATEGORY_FLAGS_MOBILE", "mobile" }, { BZ_CATEGORY_FLAGS_ADWAITA, "BZ_CATEGORY_FLAGS_ADWAITA", "adwaita" }, { BZ_CATEGORY_FLAGS_KDE, "BZ_CATEGORY_FLAGS_KDE", "kde" }, { 0, NULL, NULL } }; GType type = g_flags_register_static ("BzCategoryFlags", values); g_once_init_leave (&g_define_type_id, type); } return g_define_type_id; } BzCategoryFlags bz_category_flags_add (BzCategoryFlags flags, const char *name) { g_autofree char *lower = NULL; if (name == NULL) return flags; lower = g_ascii_strdown (name, -1); for (gsize i = 0; i < G_N_ELEMENTS (name_flag_map); i++) { if (g_strcmp0 (name_flag_map[i].name, lower) == 0) return flags | name_flag_map[i].flag; } return flags; } gboolean bz_category_flags_has_name (BzCategoryFlags flags, const char *name) { for (gsize i = 0; i < G_N_ELEMENTS (name_flag_map); i++) { if (g_strcmp0 (name_flag_map[i].name, name) == 0) return (flags & name_flag_map[i].flag) != 0; } return FALSE; } BzCategoryFlags bz_category_flags_from_name (const char *name) { g_autofree char *lower = g_ascii_strdown (name, -1); for (gsize i = 0; i < G_N_ELEMENTS (name_flag_map); i++) if (g_strcmp0 (name_flag_map[i].name, lower) == 0) return name_flag_map[i].flag; return BZ_CATEGORY_FLAGS_NONE; } bazaar-org-bazaar-b6e9a65/src/bz-category-flags.h000066400000000000000000000040721522167256300217140ustar00rootroot00000000000000/* bz-category-flags.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_CATEGORY_FLAGS (bz_category_flags_get_type ()) typedef enum { BZ_CATEGORY_FLAGS_NONE = 0, BZ_CATEGORY_FLAGS_AUDIOVIDEO = 1 << 0, BZ_CATEGORY_FLAGS_DEVELOPMENT = 1 << 1, BZ_CATEGORY_FLAGS_EDUCATION = 1 << 2, BZ_CATEGORY_FLAGS_GAME = 1 << 3, BZ_CATEGORY_FLAGS_GRAPHICS = 1 << 4, BZ_CATEGORY_FLAGS_NETWORK = 1 << 5, BZ_CATEGORY_FLAGS_OFFICE = 1 << 6, BZ_CATEGORY_FLAGS_SCIENCE = 1 << 7, BZ_CATEGORY_FLAGS_SYSTEM = 1 << 8, BZ_CATEGORY_FLAGS_UTILITY = 1 << 9, BZ_CATEGORY_FLAGS_TRENDING = 1 << 10, BZ_CATEGORY_FLAGS_POPULAR = 1 << 11, BZ_CATEGORY_FLAGS_RECENTLY_ADDED = 1 << 12, BZ_CATEGORY_FLAGS_RECENTLY_UPDATED = 1 << 13, BZ_CATEGORY_FLAGS_MOBILE = 1 << 14, BZ_CATEGORY_FLAGS_ADWAITA = 1 << 15, BZ_CATEGORY_FLAGS_KDE = 1 << 16, } BzCategoryFlags; GType bz_category_flags_get_type (void); BzCategoryFlags bz_category_flags_add (BzCategoryFlags flags, const char *name); gboolean bz_category_flags_has_name (BzCategoryFlags flags, const char *name); BzCategoryFlags bz_category_flags_from_name (const char *name); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-category-tile.blp000066400000000000000000000014331522167256300221010ustar00rootroot00000000000000using Gtk 4.0; template $BzCategoryTile: Button { styles [ "card", "category-tile", ] child: Box { margin-start: 16; margin-end: 16; margin-top: 24; margin-bottom: 24; orientation: vertical; spacing: 12; valign: center; halign: center; Image { pixel-size: 48; icon-name: bind template.category as <$BzFlathubCategory>.icon-name; visible: bind $invert_boolean($is_null(template.category as <$BzFlathubCategory>.icon-name) as ) as ; styles [ "icon-dropshadow", ] } Label { css-name: "category-tile-label"; halign: center; xalign: 0.5; label: bind template.category as <$BzFlathubCategory>.short-name; wrap: true; wrap-mode: word_char; } }; } bazaar-org-bazaar-b6e9a65/src/bz-category-tile.c000066400000000000000000000107531522167256300215530ustar00rootroot00000000000000/* bz-category-tile.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "bz-category-tile.h" struct _BzCategoryTile { GtkButton parent_instance; BzFlathubCategory *category; }; G_DEFINE_FINAL_TYPE (BzCategoryTile, bz_category_tile, GTK_TYPE_BUTTON); enum { PROP_0, PROP_CATEGORY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_category_tile_dispose (GObject *object) { BzCategoryTile *self = BZ_CATEGORY_TILE (object); g_clear_object (&self->category); G_OBJECT_CLASS (bz_category_tile_parent_class)->dispose (object); } static void bz_category_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzCategoryTile *self = BZ_CATEGORY_TILE (object); switch (prop_id) { case PROP_CATEGORY: g_value_set_object (value, bz_category_tile_get_category (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_category_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzCategoryTile *self = BZ_CATEGORY_TILE (object); switch (prop_id) { case PROP_CATEGORY: bz_category_tile_set_category (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static void bz_category_tile_class_init (BzCategoryTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_category_tile_set_property; object_class->get_property = bz_category_tile_get_property; object_class->dispose = bz_category_tile_dispose; props[PROP_CATEGORY] = g_param_spec_object ( "category", NULL, NULL, BZ_TYPE_FLATHUB_CATEGORY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-category-tile.ui"); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); } static void bz_category_tile_init (BzCategoryTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_add_css_class (GTK_WIDGET (self), "category-tile"); } GtkWidget * bz_category_tile_new (void) { return g_object_new (BZ_TYPE_CATEGORY_TILE, NULL); } BzFlathubCategory * bz_category_tile_get_category (BzCategoryTile *self) { g_return_val_if_fail (BZ_IS_CATEGORY_TILE (self), NULL); return self->category; } void bz_category_tile_set_category (BzCategoryTile *self, BzFlathubCategory *category) { const char *category_name; g_autofree char *css_class = NULL; g_return_if_fail (BZ_IS_CATEGORY_TILE (self)); g_clear_object (&self->category); if (category != NULL) { self->category = g_object_ref (category); category_name = bz_flathub_category_get_name (category); if (category_name != NULL) { g_autofree char *lowercase_name = g_ascii_strdown (category_name, -1); css_class = g_strdup_printf ("category-%s", lowercase_name); g_strdelimit (css_class, " &/", '-'); gtk_widget_add_css_class (GTK_WIDGET (self), css_class); } } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CATEGORY]); }bazaar-org-bazaar-b6e9a65/src/bz-category-tile.h000066400000000000000000000023561522167256300215600ustar00rootroot00000000000000/* bz-category-tile.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include #include "bz-flathub-category.h" G_BEGIN_DECLS #define BZ_TYPE_CATEGORY_TILE (bz_category_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzCategoryTile, bz_category_tile, BZ, CATEGORY_TILE, GtkButton) GtkWidget * bz_category_tile_new (void); BzFlathubCategory * bz_category_tile_get_category (BzCategoryTile *self); void bz_category_tile_set_category (BzCategoryTile *self, BzFlathubCategory *category); G_END_DECLSbazaar-org-bazaar-b6e9a65/src/bz-content-provider.c000066400000000000000000000444771522167256300223170ustar00rootroot00000000000000/* bz-content-provider.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::CONTENT-PROVIDER" #include "config.h" #include #include #include "bz-content-provider.h" #include "bz-env.h" #include "bz-io.h" #include "bz-util.h" struct _BzContentProvider { GObject parent_instance; GListModel *input_files; BzParser *parser; GListStore *input_mirror; GHashTable *input_tracking; GListStore *outputs; GtkFlattenListModel *impl_model; }; static void list_model_iface_init (GListModelInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzContentProvider, bz_content_provider, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, list_model_iface_init)) enum { PROP_0, PROP_INPUT_FILES, PROP_PARSER, PROP_HAS_INPUTS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; BZ_DEFINE_DATA ( input_init, InputInit, { GFile *file; }, BZ_RELEASE_DATA (file, g_object_unref)) static DexFuture * input_init_fiber (InputInitData *data); BZ_DEFINE_DATA ( input_load, InputLoad, { GFile *file; BzParser *parser; }, BZ_RELEASE_DATA (file, g_object_unref); BZ_RELEASE_DATA (parser, g_object_unref)) static DexFuture * input_load_fiber (InputLoadData *data); BZ_DEFINE_DATA ( input_tracking, InputTracking, { GMutex mutex; GWeakRef self; char *path; GFileMonitor *monitor; GListStore *output; DexFuture *init; DexFuture *task; }, g_mutex_clear (&self->mutex); g_weak_ref_clear (&self->self); BZ_RELEASE_DATA (path, g_free); BZ_RELEASE_DATA (monitor, g_object_unref); BZ_RELEASE_DATA (output, g_object_unref); BZ_RELEASE_DATA (init, dex_unref); BZ_RELEASE_DATA (task, dex_unref)) static DexFuture * input_init_finally (DexFuture *future, InputTrackingData *data); static DexFuture * input_load_finally (DexFuture *future, InputTrackingData *data); static void impl_model_changed (BzContentProvider *self, guint position, guint removed, guint added, GListModel *impl_model); static void input_files_changed (BzContentProvider *self, guint position, guint removed, guint added, GListModel *input_files); static void input_file_changed_on_disk (InputTrackingData *data, GFile *file, GFile *other_file, GFileMonitorEvent event_type, GFileMonitor *monitor); static gboolean commence_reload (InputTrackingData *data); static void bz_content_provider_dispose (GObject *object) { BzContentProvider *self = BZ_CONTENT_PROVIDER (object); g_clear_object (&self->input_files); g_clear_object (&self->parser); g_clear_object (&self->input_mirror); g_clear_pointer (&self->input_tracking, g_hash_table_unref); g_clear_object (&self->outputs); g_clear_object (&self->impl_model); G_OBJECT_CLASS (bz_content_provider_parent_class)->dispose (object); } static void bz_content_provider_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzContentProvider *self = BZ_CONTENT_PROVIDER (object); switch (prop_id) { case PROP_INPUT_FILES: g_value_set_object (value, bz_content_provider_get_input_files (self)); break; case PROP_PARSER: g_value_set_object (value, bz_content_provider_get_parser (self)); break; case PROP_HAS_INPUTS: g_value_set_boolean (value, bz_content_provider_get_has_inputs (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_content_provider_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzContentProvider *self = BZ_CONTENT_PROVIDER (object); switch (prop_id) { case PROP_INPUT_FILES: bz_content_provider_set_input_files (self, g_value_get_object (value)); break; case PROP_PARSER: bz_content_provider_set_parser (self, g_value_get_object (value)); break; case PROP_HAS_INPUTS: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_content_provider_class_init (BzContentProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_content_provider_set_property; object_class->get_property = bz_content_provider_get_property; object_class->dispose = bz_content_provider_dispose; props[PROP_INPUT_FILES] = g_param_spec_object ( "input-files", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PARSER] = g_param_spec_object ( "parser", NULL, NULL, BZ_TYPE_PARSER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_HAS_INPUTS] = g_param_spec_boolean ( "has-inputs", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_content_provider_init (BzContentProvider *self) { self->input_mirror = g_list_store_new (G_TYPE_FILE); self->input_tracking = g_hash_table_new_full ( g_direct_hash, g_direct_equal, g_object_unref, input_tracking_data_unref); self->outputs = g_list_store_new (G_TYPE_LIST_MODEL); self->impl_model = gtk_flatten_list_model_new (g_object_ref (G_LIST_MODEL (self->outputs))); g_signal_connect_swapped ( self->impl_model, "items-changed", G_CALLBACK (impl_model_changed), self); } static GType list_model_get_item_type (GListModel *list) { return G_TYPE_OBJECT; } static guint list_model_get_n_items (GListModel *list) { BzContentProvider *self = BZ_CONTENT_PROVIDER (list); return g_list_model_get_n_items (G_LIST_MODEL (self->impl_model)); } static gpointer list_model_get_item (GListModel *list, guint position) { BzContentProvider *self = BZ_CONTENT_PROVIDER (list); return g_list_model_get_item (G_LIST_MODEL (self->impl_model), position); } static void list_model_iface_init (GListModelInterface *iface) { iface->get_item_type = list_model_get_item_type; iface->get_n_items = list_model_get_n_items; iface->get_item = list_model_get_item; } BzContentProvider * bz_content_provider_new (void) { return g_object_new (BZ_TYPE_CONTENT_PROVIDER, NULL); } void bz_content_provider_set_input_files (BzContentProvider *self, GListModel *input_files) { guint old_length = 0; g_return_if_fail (BZ_IS_CONTENT_PROVIDER (self)); g_return_if_fail (input_files == NULL || G_IS_LIST_MODEL (input_files)); if (self->input_files != NULL) { old_length = g_list_model_get_n_items (self->input_files); g_signal_handlers_disconnect_by_func ( self->input_files, input_files_changed, self); } g_clear_object (&self->input_files); g_hash_table_remove_all (self->input_tracking); g_list_store_remove_all (self->input_mirror); g_list_store_remove_all (self->outputs); if (input_files != NULL) { self->input_files = g_object_ref (input_files); g_signal_connect_swapped ( input_files, "items-changed", G_CALLBACK (input_files_changed), self); input_files_changed ( self, 0, old_length, g_list_model_get_n_items (input_files), input_files); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INPUT_FILES]); } GListModel * bz_content_provider_get_input_files (BzContentProvider *self) { g_return_val_if_fail (BZ_IS_CONTENT_PROVIDER (self), NULL); return self->input_files; } void bz_content_provider_set_parser (BzContentProvider *self, BzParser *parser) { GHashTableIter iter = { 0 }; g_return_if_fail (BZ_IS_CONTENT_PROVIDER (self)); g_return_if_fail (parser == NULL || BZ_IS_PARSER (parser)); g_clear_object (&self->parser); if (parser != NULL) self->parser = g_object_ref (parser); g_hash_table_iter_init (&iter, self->input_tracking); for (;;) { GFile *file = NULL; InputTrackingData *data = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &file, (gpointer *) &data)) break; commence_reload (data); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARSER]); } BzParser * bz_content_provider_get_parser (BzContentProvider *self) { g_return_val_if_fail (BZ_IS_CONTENT_PROVIDER (self), NULL); return self->parser; } gboolean bz_content_provider_get_has_inputs (BzContentProvider *self) { g_return_val_if_fail (BZ_IS_CONTENT_PROVIDER (self), FALSE); return self->input_files != NULL && g_list_model_get_n_items (self->input_files) > 0 && g_list_model_get_n_items (G_LIST_MODEL (self)) > 0; } static void impl_model_changed (BzContentProvider *self, guint position, guint removed, guint added, GListModel *impl_model) { g_list_model_items_changed ( G_LIST_MODEL (self), position, removed, added); } static void input_files_changed (BzContentProvider *self, guint position, guint removed, guint added, GListModel *input_files) { gboolean emit_has_inputs = FALSE; g_autofree GFile **additions = NULL; g_autofree GListStore **new_outputs = NULL; emit_has_inputs = g_list_model_get_n_items (input_files) == 0 || g_list_model_get_n_items (G_LIST_MODEL (self->input_mirror)) == 0; if (removed > 0) { for (guint i = 0; i < removed; i++) { g_autoptr (GFile) removal = NULL; InputTrackingData *data = NULL; removal = g_list_model_get_item ( G_LIST_MODEL (self->input_mirror), position + i); data = g_hash_table_lookup (self->input_tracking, removal); g_assert (data != NULL); g_mutex_lock (&data->mutex); dex_clear (&data->task); g_mutex_unlock (&data->mutex); g_hash_table_remove (self->input_tracking, removal); } } if (added > 0) { additions = g_malloc0_n (added, sizeof (*additions)); for (guint i = 0; i < added; i++) additions[i] = g_list_model_get_item ( G_LIST_MODEL (self->input_files), position + i); new_outputs = g_malloc0_n (added, sizeof (*new_outputs)); for (guint i = 0; i < added; i++) new_outputs[i] = g_list_store_new (G_TYPE_OBJECT); } g_list_store_splice (self->input_mirror, position, removed, (gpointer *) additions, added); g_list_store_splice (self->outputs, position, removed, (gpointer *) new_outputs, added); for (guint i = 0; i < added; i++) { g_autoptr (InputInitData) init_data = NULL; g_autoptr (InputTrackingData) tracking_data = NULL; g_autoptr (DexFuture) future = NULL; init_data = input_init_data_new (); init_data->file = g_object_ref (additions[i]); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) input_init_fiber, input_init_data_ref (init_data), input_init_data_unref); tracking_data = input_tracking_data_new (); g_mutex_init (&tracking_data->mutex); g_weak_ref_init (&tracking_data->self, self); tracking_data->path = g_file_get_path (additions[i]); tracking_data->output = g_steal_pointer (&new_outputs[i]); g_mutex_lock (&tracking_data->mutex); future = dex_future_finally ( future, (DexFutureCallback) input_init_finally, input_tracking_data_ref (tracking_data), input_tracking_data_unref); tracking_data->init = g_steal_pointer (&future); g_mutex_unlock (&tracking_data->mutex); g_hash_table_replace ( self->input_tracking, g_steal_pointer (&additions[i]), input_tracking_data_ref (tracking_data)); } if (emit_has_inputs) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_INPUTS]); } static void input_file_changed_on_disk (InputTrackingData *data, GFile *file, GFile *other_file, GFileMonitorEvent event_type, GFileMonitor *monitor) { if (event_type == G_FILE_MONITOR_EVENT_CHANGED || event_type == G_FILE_MONITOR_EVENT_CREATED || event_type == G_FILE_MONITOR_EVENT_DELETED) g_idle_add_full ( G_PRIORITY_DEFAULT, (GSourceFunc) commence_reload, input_tracking_data_ref (data), input_tracking_data_unref); } static DexFuture * input_init_fiber (InputInitData *data) { GFile *file = data->file; g_autoptr (GError) local_error = NULL; g_autoptr (GFileMonitor) monitor = NULL; monitor = g_file_monitor_file ( file, G_FILE_MONITOR_NONE, NULL, &local_error); if (monitor == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); return dex_future_new_for_object (monitor); } static DexFuture * input_init_finally (DexFuture *future, InputTrackingData *data) { g_autoptr (BzContentProvider) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GMutexLocker) locker = NULL; const GValue *value = NULL; locker = g_mutex_locker_new (&data->mutex); dex_clear (&data->init); bz_weak_get_or_return_reject (self, &data->self); g_list_store_remove_all (data->output); value = dex_future_get_value (future, &local_error); if (value != NULL) { data->monitor = g_value_dup_object (value); g_signal_connect_swapped ( data->monitor, "changed", G_CALLBACK (input_file_changed_on_disk), data); g_clear_pointer (&locker, g_mutex_locker_free); commence_reload (data); } else g_warning ("Could not init object watch at path %s: %s", data->path, local_error->message); return NULL; } static DexFuture * input_load_fiber (InputLoadData *data) { GFile *file = data->file; BzParser *parser = data->parser; g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GHashTable) parse_results = NULL; GObject *object = NULL; bytes = dex_await_boxed (dex_file_load_contents_bytes (file), &local_error); if (bytes == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); parse_results = bz_parser_process_bytes (parser, bytes, &local_error); if (parse_results == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); object = g_value_get_object (g_hash_table_lookup (parse_results, "/")); if (object == NULL) return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Parser returned invalid results"); return dex_future_new_for_object (object); } static DexFuture * input_load_finally (DexFuture *future, InputTrackingData *data) { g_autoptr (BzContentProvider) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GMutexLocker) locker = NULL; const GValue *value = NULL; locker = g_mutex_locker_new (&data->mutex); g_list_store_remove_all (data->output); bz_weak_get_or_return_reject (self, &data->self); value = dex_future_get_value (future, &local_error); if (value != NULL) g_list_store_append (data->output, g_value_get_object (value)); else if (local_error->domain != G_IO_ERROR) g_warning ("Could not load object at path %s: %s", data->path, local_error->message); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_INPUTS]); return NULL; } static gboolean commence_reload (InputTrackingData *data) { g_autoptr (BzContentProvider) self = NULL; g_autoptr (GMutexLocker) locker = NULL; g_autoptr (InputLoadData) load_data = NULL; g_autoptr (DexFuture) future = NULL; locker = g_mutex_locker_new (&data->mutex); dex_clear (&data->task); self = g_weak_ref_get (&data->self); if (self == NULL) goto done; if (self->parser == NULL) goto done; load_data = input_load_data_new (); load_data->file = g_file_new_for_path (data->path); load_data->parser = g_object_ref (self->parser); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) input_load_fiber, input_load_data_ref (load_data), input_load_data_unref); future = dex_future_finally ( future, (DexFutureCallback) input_load_finally, input_tracking_data_ref (data), input_tracking_data_unref); data->task = g_steal_pointer (&future); done: return G_SOURCE_REMOVE; } bazaar-org-bazaar-b6e9a65/src/bz-content-provider.h000066400000000000000000000030101522167256300222760ustar00rootroot00000000000000/* bz-content-provider.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-parser.h" G_BEGIN_DECLS #define BZ_TYPE_CONTENT_PROVIDER (bz_content_provider_get_type ()) G_DECLARE_FINAL_TYPE (BzContentProvider, bz_content_provider, BZ, CONTENT_PROVIDER, GObject) BzContentProvider * bz_content_provider_new (void); void bz_content_provider_set_input_files (BzContentProvider *self, GListModel *input_files); GListModel * bz_content_provider_get_input_files (BzContentProvider *self); void bz_content_provider_set_parser (BzContentProvider *self, BzParser *parser); BzParser * bz_content_provider_get_parser (BzContentProvider *self); gboolean bz_content_provider_get_has_inputs (BzContentProvider *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-context-row.c000066400000000000000000000054221522167256300212710ustar00rootroot00000000000000/* bz-context-row.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "bz-context-row.h" GType bz_importance_get_type (void) { static GType type = 0; if (G_UNLIKELY (type == 0)) { static const GEnumValue values[] = { { BZ_IMPORTANCE_UNIMPORTANT, "BZ_IMPORTANCE_UNIMPORTANT", "unimportant" }, { BZ_IMPORTANCE_NEUTRAL, "BZ_IMPORTANCE_NEUTRAL", "neutral" }, { BZ_IMPORTANCE_INFORMATION, "BZ_IMPORTANCE_INFORMATION", "information" }, { BZ_IMPORTANCE_WARNING, "BZ_IMPORTANCE_WARNING", "warning" }, { BZ_IMPORTANCE_IMPORTANT, "BZ_IMPORTANCE_IMPORTANT", "important" }, { 0, NULL, NULL } }; type = g_enum_register_static ("BzImportance", values); } return type; } const gchar * bz_context_row_importance_to_css_class (BzImportance importance) { switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: return "green"; case BZ_IMPORTANCE_NEUTRAL: return "grey"; case BZ_IMPORTANCE_INFORMATION: return "yellow"; case BZ_IMPORTANCE_WARNING: return "orange"; case BZ_IMPORTANCE_IMPORTANT: return "red"; default: return "grey"; } } AdwActionRow * bz_context_row_new (const gchar *icon_name, BzImportance importance, const gchar *title, const gchar *subtitle) { AdwActionRow *row; GtkWidget *icon; const gchar *css_class; g_return_val_if_fail (icon_name != NULL, NULL); g_return_val_if_fail (title != NULL, NULL); row = ADW_ACTION_ROW (adw_action_row_new ()); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), title); if (subtitle != NULL) adw_action_row_set_subtitle (row, subtitle); icon = gtk_image_new_from_icon_name (icon_name); gtk_widget_set_valign (icon, GTK_ALIGN_CENTER); gtk_widget_add_css_class (icon, "circular-lozenge"); css_class = bz_context_row_importance_to_css_class (importance); gtk_widget_add_css_class (icon, css_class); adw_action_row_add_prefix (row, icon); return row; } bazaar-org-bazaar-b6e9a65/src/bz-context-row.h000066400000000000000000000025271522167256300213010ustar00rootroot00000000000000/* bz-context-row.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS typedef enum { BZ_IMPORTANCE_UNIMPORTANT, BZ_IMPORTANCE_NEUTRAL, BZ_IMPORTANCE_INFORMATION, BZ_IMPORTANCE_WARNING, BZ_IMPORTANCE_IMPORTANT, } BzImportance; #define BZ_TYPE_IMPORTANCE (bz_importance_get_type ()) GType bz_importance_get_type (void) G_GNUC_CONST; AdwActionRow * bz_context_row_new (const gchar *icon_name, BzImportance importance, const gchar *title, const gchar *subtitle); const gchar * bz_context_row_importance_to_css_class (BzImportance importance); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-context-tile-callbacks.c000066400000000000000000000277401522167256300233430ustar00rootroot00000000000000/* bz-context-tile-callbacks.c * * Copyright 2026 Eva M, Alexander Vanhee * * 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 */ #include #include #include #include #include "bz-context-tile-callbacks.h" #include "bz-entry.h" #include "bz-safety-calculator.h" #include "bz-spdx.h" static char * format_with_small_suffix (char *number, const char *suffix) { char *dot = g_strrstr (number, "."); if (dot != NULL) { char *end = dot; while (*(end + 1) != '\0') end++; while (end > dot && *end == '0') *end-- = '\0'; if (end == dot) *dot = '\0'; } return g_strdup_printf ("%s\xC2\xA0%s", number, suffix); } static char * format_favorites_count (gpointer object, int favorites_count) { if (favorites_count < 0) return g_strdup (" "); return g_strdup_printf ("%d", favorites_count); } static char * format_recent_downloads (gpointer object, int value) { double result; int digits; if (value <= 0) return g_strdup (_ ("---")); if (value >= 1000000) { result = value / 1000000.0; digits = (int) log10 (result) + 1; /* Translators: M is the suffix for millions */ return g_strdup_printf (_ ("%.*fM"), 3 - digits, result); } else if (value >= 1000) { result = value / 1000.0; digits = (int) log10 (result) + 1; /* Translators: K is the suffix for thousands*/ return g_strdup_printf (_ ("%.*fK"), 3 - digits, result); } else return g_strdup_printf ("%'d", value); } static char * format_recent_downloads_tooltip (gpointer object, int value) { return g_strdup_printf (_ ("%d downloads in the last month"), value); } static char * format_size (gpointer object, guint64 value) { g_autofree char *size_str = g_format_size (value); char *space = g_strrstr (size_str, "\xC2\xA0"); char *decimal = NULL; int digits = 0; if (value == 0) return g_strdup (_ ("N/A")); if (space != NULL) { *space = '\0'; for (char *p = size_str; *p != '\0' && *p != '.'; p++) if (g_ascii_isdigit (*p)) digits++; if (digits >= 3) { decimal = g_strrstr (size_str, "."); if (decimal != NULL) *decimal = '\0'; } return format_with_small_suffix (size_str, space + 2); } return g_strdup (size_str); } static char * get_size_label (gpointer object, gboolean is_installable, gboolean runtime_installed, guint64 runtime_size) { if (is_installable && !runtime_installed && runtime_size > 0) { g_autofree char *size_str = g_format_size (runtime_size); return g_strdup_printf (_ ("+%s runtime"), size_str); } return g_strdup (is_installable ? _ ("Download") : _ ("Installed")); } static guint64 get_size_type (gpointer object, BzEntry *entry, gboolean is_installable) { if (entry == NULL) return 0; return is_installable ? bz_entry_get_size (entry) : bz_entry_get_installed_size (entry); } static char * format_size_tooltip (gpointer object, guint64 value) { g_autofree char *size_str = NULL; if (value == 0) return g_strdup (_ ("Size information unavailable")); size_str = g_format_size (value); return g_strdup_printf (_ ("Download size of %s"), size_str); } static char * format_age_rating (gpointer object, AsContentRating *content_rating) { guint age; if (content_rating == NULL) return g_strdup ("?"); age = as_content_rating_get_minimum_age (content_rating); if (age < 3) age = 3; /* Translators: Age rating format, e.g. "12+" for ages 12 and up */ return g_strdup_printf (_ ("%d+"), age); } static char * get_age_rating_label (gpointer object, AsContentRating *content_rating) { guint age; if (content_rating == NULL) return g_strdup (_ ("Age Rating")); age = as_content_rating_get_minimum_age (content_rating); if (age == 0) return g_strdup (_ ("All Ages")); else return g_strdup (_ ("Age Rating")); } static char * get_age_rating_tooltip (gpointer object, AsContentRating *content_rating) { guint age; if (content_rating == NULL) return g_strdup (_ ("Age rating information unavailable")); age = as_content_rating_get_minimum_age (content_rating); if (age == 0) return g_strdup (_ ("Suitable for all ages")); return g_strdup_printf (_ ("Suitable for ages %d and up"), age); } static char * get_age_rating_style (gpointer object, AsContentRating *content_rating) { guint age; if (content_rating == NULL) return g_strdup ("grey"); age = as_content_rating_get_minimum_age (content_rating); if (age >= 18) return g_strdup ("error"); else if (age >= 15) return g_strdup ("orange"); else if (age >= 12) return g_strdup ("warning"); else return g_strdup ("grey"); } static char * format_license_tooltip (gpointer object, BzEntry *entry) { const char *license; gboolean is_floss = FALSE; g_autofree char *name = NULL; if (entry == NULL) return g_strdup (_ ("Unknown")); g_object_get (entry, "is-floss", &is_floss, "project-license", &license, NULL); if (license == NULL || *license == '\0') return g_strdup (_ ("Unknown")); if (is_floss && bz_spdx_is_valid (license)) { name = bz_spdx_get_name (license); return g_strdup_printf (_ ("Free software licensed under %s"), (name != NULL && *name != '\0') ? name : license); } if (is_floss) return g_strdup (_ ("Free software")); if (bz_spdx_is_proprietary (license)) return g_strdup (_ ("Proprietary Software")); name = bz_spdx_get_name (license); return g_strdup_printf (_ ("Special License: %s"), (name != NULL && *name != '\0') ? name : license); } static char * get_license_label (gpointer object, BzEntry *entry) { const char *license; gboolean is_floss = FALSE; if (entry == NULL) return g_strdup (_ ("Unknown")); g_object_get (entry, "is-floss", &is_floss, "project-license", &license, NULL); if (is_floss) /* TRANSLATORS: You can omit the "software" part if your translation makes it obvious we're talking about "libre" and not "gratis"*/ return g_strdup (_ ("Free Software")); if (license == NULL || *license == '\0') return g_strdup (_ ("Unknown")); if (bz_spdx_is_proprietary (license)) return g_strdup (_ ("Proprietary")); return g_strdup (_ ("Special License")); } static char * get_license_icon (gpointer object, gboolean is_floss, int index) { const char *icons[][2] = { { "license-symbolic", "proprietary-code-symbolic" }, { "community-symbolic", "license-symbolic" } }; return g_strdup (icons[is_floss ? 1 : 0][index]); } static char * get_formfactor_label (gpointer object, gboolean is_mobile_friendly) { return g_strdup (is_mobile_friendly ? _ ("Adaptive") : _ ("Desktop Only")); } static char * get_formfactor_tooltip (gpointer object, gboolean is_mobile_friendly) { return g_strdup (is_mobile_friendly ? _ ("Works on desktop, tablets, and phones") : _ ("May not work on mobile devices")); } static char * get_safety_rating_icon (gpointer object, BzEntry *entry, int index) { char *icon = NULL; BzImportance importance = 0; if (entry == NULL) return g_strdup ("app-safety-unknown-symbolic"); if (index < 0 || index > 2) return NULL; if (index == 0) { importance = bz_safety_calculator_calculate_rating (entry); switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: case BZ_IMPORTANCE_NEUTRAL: return g_strdup ("app-safety-ok-symbolic"); case BZ_IMPORTANCE_INFORMATION: case BZ_IMPORTANCE_WARNING: return NULL; case BZ_IMPORTANCE_IMPORTANT: return g_strdup ("dialog-warning-symbolic"); default: return NULL; } } icon = bz_safety_calculator_get_top_icon (entry, index - 1); return icon; } const char * bz_safety_style_for_importance (BzImportance importance) { switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: case BZ_IMPORTANCE_NEUTRAL: return "grey"; case BZ_IMPORTANCE_INFORMATION: return "warning"; case BZ_IMPORTANCE_WARNING: return "orange"; case BZ_IMPORTANCE_IMPORTANT: return "error"; default: return "grey"; } } static char * get_safety_rating_style (gpointer object, BzEntry *entry) { if (entry == NULL) return g_strdup ("grey"); return g_strdup (bz_safety_style_for_importance ( bz_safety_calculator_calculate_rating (entry))); } static char * get_safety_rating_label (gpointer object, BzEntry *entry) { BzImportance importance; if (entry == NULL) return g_strdup (_ ("N/A")); importance = bz_safety_calculator_calculate_rating (entry); switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: return g_strdup (_ ("Safe")); case BZ_IMPORTANCE_NEUTRAL: return g_strdup (_ ("Low Risk")); case BZ_IMPORTANCE_INFORMATION: return g_strdup (_ ("Low Risk")); case BZ_IMPORTANCE_WARNING: return g_strdup (_ ("Medium Risk")); case BZ_IMPORTANCE_IMPORTANT: return g_strdup (_ ("High Risk")); default: return g_strdup (_ ("N/A")); } } void bz_widget_class_bind_all_context_tile_callbacks (GtkWidgetClass *widget_class) { g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class)); gtk_widget_class_bind_template_callback (widget_class, format_favorites_count); gtk_widget_class_bind_template_callback (widget_class, format_recent_downloads); gtk_widget_class_bind_template_callback (widget_class, format_recent_downloads_tooltip); gtk_widget_class_bind_template_callback (widget_class, format_size); gtk_widget_class_bind_template_callback (widget_class, get_size_label); gtk_widget_class_bind_template_callback (widget_class, get_size_type); gtk_widget_class_bind_template_callback (widget_class, format_size_tooltip); gtk_widget_class_bind_template_callback (widget_class, format_age_rating); gtk_widget_class_bind_template_callback (widget_class, get_age_rating_label); gtk_widget_class_bind_template_callback (widget_class, get_age_rating_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_age_rating_style); gtk_widget_class_bind_template_callback (widget_class, format_license_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_license_label); gtk_widget_class_bind_template_callback (widget_class, get_license_icon); gtk_widget_class_bind_template_callback (widget_class, get_formfactor_label); gtk_widget_class_bind_template_callback (widget_class, get_formfactor_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_safety_rating_icon); gtk_widget_class_bind_template_callback (widget_class, get_safety_rating_style); gtk_widget_class_bind_template_callback (widget_class, get_safety_rating_label); } bazaar-org-bazaar-b6e9a65/src/bz-context-tile-callbacks.h000066400000000000000000000017561522167256300233470ustar00rootroot00000000000000/* bz-context-tile-callbacks.h * * Copyright 2026 Eva M, Alexander Vanhee * * 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 */ #pragma once #include #include "bz-safety-calculator.h" void bz_widget_class_bind_all_context_tile_callbacks (GtkWidgetClass *widget_class); const char * bz_safety_style_for_importance (BzImportance importance); bazaar-org-bazaar-b6e9a65/src/bz-context-tile.blp000066400000000000000000000013001522167256300217410ustar00rootroot00000000000000using Gtk 4.0; template $BzContextTile: Button { styles [ "context-tile", "flat", ] focusable: false; halign: center; Box { orientation: vertical; spacing: 4; hexpand: true; Button ring_button { styles [ "lozenge-ring-button", ] halign: center; valign: center; margin-bottom: 4; child: Box lozenge { styles [ "lozenge", ] halign: center; }; accessibility { described-by: label; } } Label label { styles [ "context-tile-text", ] justify: center; wrap: true; wrap-mode: word_char; xalign: 0.5; } } } bazaar-org-bazaar-b6e9a65/src/bz-context-tile.c000066400000000000000000000167521522167256300214270ustar00rootroot00000000000000/* bz-context-tile.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "bz-context-tile.h" #include struct _BzContextTile { GtkButton parent_instance; char *lozenge_style; /* Template widgets */ GtkButton *ring_button; GtkBox *lozenge; GtkLabel *label; }; G_DEFINE_FINAL_TYPE (BzContextTile, bz_context_tile, GTK_TYPE_BUTTON) enum { PROP_0, PROP_LOZENGE_CHILD, PROP_LABEL, PROP_LOZENGE_STYLE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_context_tile_dispose (GObject *object) { BzContextTile *self = BZ_CONTEXT_TILE (object); g_clear_pointer (&self->lozenge_style, g_free); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_CONTEXT_TILE); G_OBJECT_CLASS (bz_context_tile_parent_class)->dispose (object); } static void bz_context_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzContextTile *self = BZ_CONTEXT_TILE (object); switch (prop_id) { case PROP_LOZENGE_CHILD: g_value_set_object (value, bz_context_tile_get_lozenge_child (self)); break; case PROP_LABEL: g_value_set_string (value, bz_context_tile_get_label (self)); break; case PROP_LOZENGE_STYLE: g_value_set_string (value, bz_context_tile_get_lozenge_style (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_context_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzContextTile *self = BZ_CONTEXT_TILE (object); switch (prop_id) { case PROP_LOZENGE_CHILD: bz_context_tile_set_lozenge_child (self, g_value_get_object (value)); break; case PROP_LABEL: bz_context_tile_set_label (self, g_value_get_string (value)); break; case PROP_LOZENGE_STYLE: bz_context_tile_set_lozenge_style (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_context_tile_class_init (BzContextTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_context_tile_set_property; object_class->get_property = bz_context_tile_get_property; object_class->dispose = bz_context_tile_dispose; props[PROP_LOZENGE_CHILD] = g_param_spec_object ( "lozenge-child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_LABEL] = g_param_spec_string ( "label", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_LOZENGE_STYLE] = g_param_spec_string ( "lozenge-style", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-context-tile.ui"); gtk_widget_class_bind_template_child (widget_class, BzContextTile, lozenge); gtk_widget_class_bind_template_child (widget_class, BzContextTile, label); gtk_widget_class_bind_template_child (widget_class, BzContextTile, ring_button); } static void on_enter_notify (GtkEventController *controller, gpointer user_data) { g_autoptr (GdkCursor) cursor = gdk_cursor_new_from_name ("pointer", NULL); gtk_widget_set_cursor (GTK_WIDGET (user_data), cursor); } static void on_leave_notify (GtkEventController *controller, gpointer user_data) { gtk_widget_set_cursor (GTK_WIDGET (user_data), NULL); } static void on_ring_button_clicked (GtkButton *ring_button, gpointer user_data) { BzContextTile *self = BZ_CONTEXT_TILE (user_data); g_signal_emit_by_name (self, "clicked"); } static void bz_context_tile_init (BzContextTile *self) { GtkEventController *enter_leave = gtk_event_controller_motion_new (); gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect (self->ring_button, "clicked", G_CALLBACK (on_ring_button_clicked), self); g_signal_connect (enter_leave, "enter", G_CALLBACK (on_enter_notify), GTK_WIDGET (self)); g_signal_connect (enter_leave, "leave", G_CALLBACK (on_leave_notify), GTK_WIDGET (self)); gtk_widget_add_controller (GTK_WIDGET (self), enter_leave); } BzContextTile * bz_context_tile_new (void) { return g_object_new (BZ_TYPE_CONTEXT_TILE, NULL); } GtkWidget * bz_context_tile_get_lozenge_child (BzContextTile *self) { g_return_val_if_fail (BZ_IS_CONTEXT_TILE (self), NULL); return gtk_widget_get_first_child (GTK_WIDGET (self->lozenge)); } void bz_context_tile_set_lozenge_child (BzContextTile *self, GtkWidget *child) { GtkWidget *old_child; g_return_if_fail (BZ_IS_CONTEXT_TILE (self)); old_child = gtk_widget_get_first_child (GTK_WIDGET (self->lozenge)); if (old_child == child) return; if (old_child != NULL) gtk_box_remove (self->lozenge, old_child); if (child != NULL) gtk_box_append (self->lozenge, child); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LOZENGE_CHILD]); } const char * bz_context_tile_get_label (BzContextTile *self) { g_return_val_if_fail (BZ_IS_CONTEXT_TILE (self), NULL); return gtk_label_get_label (self->label); } void bz_context_tile_set_label (BzContextTile *self, const char *label) { g_return_if_fail (BZ_IS_CONTEXT_TILE (self)); if (g_strcmp0 (gtk_label_get_label (self->label), label) == 0) return; gtk_label_set_label (self->label, label); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LABEL]); } const char * bz_context_tile_get_lozenge_style (BzContextTile *self) { g_return_val_if_fail (BZ_IS_CONTEXT_TILE (self), NULL); return self->lozenge_style; } void bz_context_tile_set_lozenge_style (BzContextTile *self, const char *style) { g_return_if_fail (BZ_IS_CONTEXT_TILE (self)); if (style != NULL && *style == '\0') style = NULL; if (g_strcmp0 (self->lozenge_style, style) == 0) return; if (self->lozenge_style != NULL) gtk_widget_remove_css_class (GTK_WIDGET (self->lozenge), self->lozenge_style); g_clear_pointer (&self->lozenge_style, g_free); if (style != NULL) { self->lozenge_style = g_strdup (style); gtk_widget_add_css_class (GTK_WIDGET (self->lozenge), self->lozenge_style); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LOZENGE_STYLE]); } bazaar-org-bazaar-b6e9a65/src/bz-context-tile.h000066400000000000000000000031121522167256300214160ustar00rootroot00000000000000/* bz-context-tile.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_CONTEXT_TILE (bz_context_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzContextTile, bz_context_tile, BZ, CONTEXT_TILE, GtkButton) BzContextTile *bz_context_tile_new (void); GtkWidget *bz_context_tile_get_lozenge_child (BzContextTile *self); void bz_context_tile_set_lozenge_child (BzContextTile *self, GtkWidget *child); const char *bz_context_tile_get_label (BzContextTile *self); void bz_context_tile_set_label (BzContextTile *self, const char *label); const char *bz_context_tile_get_lozenge_style (BzContextTile *self); void bz_context_tile_set_lozenge_style (BzContextTile *self, const char *style); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-country-data-point.txt000066400000000000000000000002571522167256300231370ustar00rootroot00000000000000prefix=bz name=country_data_point parent-prefix=g parent-name=object author=AUTOGEN property=country_code char G_TYPE_STRING string property=downloads guint G_TYPE_UINT uint bazaar-org-bazaar-b6e9a65/src/bz-country.txt000066400000000000000000000004341522167256300210760ustar00rootroot00000000000000prefix=bz name=country parent-prefix=g parent-name=object author=AUTOGEN property=name char G_TYPE_STRING string property=iso_code char G_TYPE_STRING string property=coordinates GVariant G_TYPE_VARIANT variant g_variant_unref g_variant_ref property=value double G_TYPE_DOUBLE double bazaar-org-bazaar-b6e9a65/src/bz-curated-app-tile.c000066400000000000000000000110421522167256300221330ustar00rootroot00000000000000/* bz-curated-app-tile.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-curated-app-tile.h" #include "bz-app-tile.h" struct _BzCuratedAppTile { AdwBin parent_instance; BzEntryGroup *group; }; G_DEFINE_FINAL_TYPE (BzCuratedAppTile, bz_curated_app_tile, ADW_TYPE_BIN); enum { PROP_0, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_CLICKED, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void bz_curated_app_tile_dispose (GObject *object) { BzCuratedAppTile *self = BZ_CURATED_APP_TILE (object); g_clear_pointer (&self->group, g_object_unref); G_OBJECT_CLASS (bz_curated_app_tile_parent_class)->dispose (object); } static void bz_curated_app_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzCuratedAppTile *self = BZ_CURATED_APP_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_curated_app_tile_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_curated_app_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzCuratedAppTile *self = BZ_CURATED_APP_TILE (object); switch (prop_id) { case PROP_GROUP: bz_curated_app_tile_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void clicked_cb (BzCuratedAppTile *self, BzAppTile *tile) { g_signal_emit (self, signals[SIGNAL_CLICKED], 0, NULL); } static void bz_curated_app_tile_class_init (BzCuratedAppTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_curated_app_tile_set_property; object_class->get_property = bz_curated_app_tile_get_property; object_class->dispose = bz_curated_app_tile_dispose; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_CLICKED] = g_signal_new ( "clicked", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 1, BZ_TYPE_ENTRY); g_signal_set_va_marshaller ( signals[SIGNAL_CLICKED], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__VOIDv); gtk_widget_class_set_css_name (widget_class, "app-tile"); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-curated-app-tile.ui"); gtk_widget_class_bind_template_callback (widget_class, clicked_cb); } static void bz_curated_app_tile_init (BzCuratedAppTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzCuratedAppTile * bz_curated_app_tile_new (void) { return g_object_new (BZ_TYPE_CURATED_APP_TILE, NULL); } BzEntryGroup * bz_curated_app_tile_get_group (BzCuratedAppTile *self) { g_return_val_if_fail (BZ_IS_CURATED_APP_TILE (self), NULL); return self->group; } void bz_curated_app_tile_set_group (BzCuratedAppTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_CURATED_APP_TILE (self)); g_clear_pointer (&self->group, g_object_unref); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } /* End of bz-curated-app-tile.c */ bazaar-org-bazaar-b6e9a65/src/bz-curated-appids-info.txt000066400000000000000000000002351522167256300232300ustar00rootroot00000000000000prefix=bz name=curated_appids_info parent-prefix=g parent-name=object author=AUTOGEN include= property=list GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-curated-article.txt000066400000000000000000000004141522167256300224410ustar00rootroot00000000000000prefix=bz name=curated_article parent-prefix=g parent-name=object author=AUTOGEN include= property=title char G_TYPE_STRING string property=subtitle char G_TYPE_STRING string property=image char G_TYPE_STRING string property=uri char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-curated-articles-info.txt000066400000000000000000000004241522167256300235560ustar00rootroot00000000000000prefix=bz name=curated_articles_info parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-curated-article.h" property=list GListModel G_TYPE_LIST_MODEL object property=uri char G_TYPE_STRING string property=aspect_ratio float G_TYPE_FLOAT float bazaar-org-bazaar-b6e9a65/src/bz-curated-banner.txt000066400000000000000000000005161522167256300222660ustar00rootroot00000000000000prefix=bz name=curated_banner parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-curated-image-info.h" property=image BzCuratedImageInfo BZ_TYPE_CURATED_IMAGE_INFO object property=light_color char G_TYPE_STRING string property=dark_color char G_TYPE_STRING string property=height int G_TYPE_INT int bazaar-org-bazaar-b6e9a65/src/bz-curated-featured-carousel.txt000066400000000000000000000004301522167256300244260ustar00rootroot00000000000000prefix=bz name=curated_featured_carousel parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-curated-appids-info.h" property=appids BzCuratedAppidsInfo BZ_TYPE_CURATED_APPIDS_INFO object property=disable_auto_rotate gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-curated-image-info.txt000066400000000000000000000006511522167256300230340ustar00rootroot00000000000000prefix=bz name=curated_image_info parent-prefix=g parent-name=object author=AUTOGEN include= property=uri char G_TYPE_STRING string property=alt char G_TYPE_STRING string property=light_uri char G_TYPE_STRING string property=dark_uri char G_TYPE_STRING string property=can_shrink gboolean G_TYPE_BOOLEAN boolean property=fit GtkContentFit GTK_TYPE_CONTENT_FIT enum property=halign GtkAlign GTK_TYPE_ALIGN enum bazaar-org-bazaar-b6e9a65/src/bz-curated-markdown-info.txt000066400000000000000000000002021522167256300235640ustar00rootroot00000000000000prefix=bz name=curated_markdown_info parent-prefix=g parent-name=object author=AUTOGEN property=string char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-curated-row.txt000066400000000000000000000010041522167256300216210ustar00rootroot00000000000000prefix=bz name=curated_row parent-prefix=g parent-name=object author=AUTOGEN include="bz-curated-section.h" include="bz-curated-featured-carousel.h" include="bz-curated-banner.h" include="bz-curated-articles-info.h" property=section BzCuratedSection BZ_TYPE_CURATED_SECTION object property=featured_carousel BzCuratedFeaturedCarousel BZ_TYPE_CURATED_FEATURED_CAROUSEL object property=banner BzCuratedBanner BZ_TYPE_CURATED_BANNER object property=articles BzCuratedArticlesInfo BZ_TYPE_CURATED_ARTICLES_INFO object bazaar-org-bazaar-b6e9a65/src/bz-curated-section.txt000066400000000000000000000010351522167256300224620ustar00rootroot00000000000000prefix=bz name=curated_section parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-entry-group.h" include="bz-curated-appids-info.h" include="bz-curated-markdown-info.h" property=title char G_TYPE_STRING string property=subtitle BzCuratedMarkdownInfo BZ_TYPE_CURATED_MARKDOWN_INFO object property=appids BzCuratedAppidsInfo BZ_TYPE_CURATED_APPIDS_INFO object property=list_type char G_TYPE_STRING string property=enable_bulk_install gboolean G_TYPE_BOOLEAN boolean property=overflow_count int G_TYPE_INT int bazaar-org-bazaar-b6e9a65/src/bz-curated-view.blp000066400000000000000000000046151522167256300217350ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzCuratedView: Adw.Bin { child: Adw.BreakpointBin { width-request: 360; height-request: 100; Adw.Breakpoint { condition ("max-width: 700px") setters { content_box.margin-start: 10; content_box.margin-end: 10; } } child: Adw.ViewStack stack { enable-transitions: true; transition-duration: 400; Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "star-outline-rounded-symbolic"; title: _("No Curation"); description: _( "There is no curation information provided on this system. You can still browse apps on Flathub" ); child: Button { label: _("Browse Flathub"); halign: center; clicked => $browse_flathub_cb(template); styles [ "pill", ] }; }; } Adw.ViewStackPage { name: "offline"; title: _("Offline"); child: Adw.StatusPage { icon-name: "connected-squares-x"; title: _("Offline"); }; } Adw.ViewStackPage { name: "content"; title: _("Browser"); child: ScrolledWindow { hscrollbar-policy: never; child: Adw.ClampScrollable { maximum-size: 1500; tightening-threshold: 1400; child: ListView content_box { css-name: "curated-list-view"; overflow: visible; model: NoSelection { model: bind template.state as <$BzStateInfo>.curated-provider; }; margin-start: 30; margin-end: 30; margin-bottom: 50; factory: BuilderListItemFactory { template ListItem { activatable: false; selectable: false; focusable: false; child: $BzDynamicListView { hexpand: true; scroll: false; noscroll-kind: list-box; child-type: "BzRowView"; child-prop: "row"; model: bind template.item as <$BzRootCuratedConfig>.rows; }; } }; }; }; }; } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-curated-view.c000066400000000000000000000172751522167256300214100ustar00rootroot00000000000000/* bz-curated-view.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include "bz-curated-row.h" #include "bz-curated-view.h" #include "bz-dynamic-list-view.h" #include "bz-entry-group.h" #include "bz-root-curated-config.h" #include "bz-row-view.h" struct _BzCuratedView { AdwBin parent_instance; BzStateInfo *state; BzContentProvider *curated_provider; GPtrArray *css_providers; /* Template widgets */ AdwViewStack *stack; }; G_DEFINE_FINAL_TYPE (BzCuratedView, bz_curated_view, ADW_TYPE_BIN) enum { PROP_0, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_BROWSE_FLATHUB, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void items_changed (BzCuratedView *self, guint position, guint removed, guint added, GListModel *model); static void online_changed (BzCuratedView *self, GParamSpec *pspec, BzStateInfo *info); static void set_page (BzCuratedView *self); static void release_css_provider (gpointer ptr); static void bz_curated_view_dispose (GObject *object) { BzCuratedView *self = BZ_CURATED_VIEW (object); if (self->state != NULL) g_signal_handlers_disconnect_by_func ( self->state, online_changed, self); if (self->curated_provider != NULL) g_signal_handlers_disconnect_by_func ( self->curated_provider, items_changed, self); g_clear_object (&self->state); g_clear_object (&self->curated_provider); g_clear_pointer (&self->css_providers, g_ptr_array_unref); G_OBJECT_CLASS (bz_curated_view_parent_class)->dispose (object); } static void bz_curated_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzCuratedView *self = BZ_CURATED_VIEW (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_curated_view_get_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_curated_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzCuratedView *self = BZ_CURATED_VIEW (object); switch (prop_id) { case PROP_STATE: bz_curated_view_set_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void browse_flathub_cb (BzCuratedView *self, GtkButton *button) { g_signal_emit (self, signals[SIGNAL_BROWSE_FLATHUB], 0); } static void bz_curated_view_class_init (BzCuratedViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_curated_view_dispose; object_class->get_property = bz_curated_view_get_property; object_class->set_property = bz_curated_view_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_BROWSE_FLATHUB] = g_signal_new ( "browse-flathub", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); g_type_ensure (BZ_TYPE_ROW_VIEW); g_type_ensure (BZ_TYPE_ROOT_CURATED_CONFIG); g_type_ensure (BZ_TYPE_CURATED_ROW); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-curated-view.ui"); gtk_widget_class_bind_template_child (widget_class, BzCuratedView, stack); gtk_widget_class_bind_template_callback (widget_class, browse_flathub_cb); } static void bz_curated_view_init (BzCuratedView *self) { self->css_providers = g_ptr_array_new_with_free_func (release_css_provider); gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_curated_view_new (void) { return g_object_new (BZ_TYPE_CURATED_VIEW, NULL); } void bz_curated_view_set_state (BzCuratedView *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_CURATED_VIEW (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); if (self->state != NULL) g_signal_handlers_disconnect_by_func ( self->state, online_changed, self); if (self->curated_provider != NULL) { g_signal_handlers_disconnect_by_func ( self->curated_provider, items_changed, self); items_changed ( self, 0, g_list_model_get_n_items (G_LIST_MODEL (self->curated_provider)), 0, G_LIST_MODEL (self->curated_provider)); } g_clear_object (&self->state); g_clear_object (&self->curated_provider); if (state != NULL) { self->state = g_object_ref (state); g_signal_connect_swapped ( state, "notify::online", G_CALLBACK (online_changed), self); g_object_get ( state, "curated-provider", &self->curated_provider, NULL); if (self->curated_provider != NULL) { items_changed ( self, 0, 0, g_list_model_get_n_items (G_LIST_MODEL (self->curated_provider)), G_LIST_MODEL (self->curated_provider)); g_signal_connect_swapped ( self->curated_provider, "items-changed", G_CALLBACK (items_changed), self); } } else set_page (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } BzStateInfo * bz_curated_view_get_state (BzCuratedView *self) { g_return_val_if_fail (BZ_IS_CURATED_VIEW (self), NULL); return self->state; } static void items_changed (BzCuratedView *self, guint position, guint removed, guint added, GListModel *model) { set_page (self); } static void online_changed (BzCuratedView *self, GParamSpec *pspec, BzStateInfo *info) { set_page (self); } static void set_page (BzCuratedView *self) { const char *page = NULL; if (self->state != NULL && !bz_state_info_get_online (self->state)) page = "offline"; else if (self->curated_provider != NULL && g_list_model_get_n_items (G_LIST_MODEL (self->curated_provider)) > 0) page = "content"; else page = "empty"; adw_view_stack_set_visible_child_name (self->stack, page); } static void release_css_provider (gpointer ptr) { GtkCssProvider *provider = ptr; gtk_style_context_remove_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (provider)); g_object_unref (provider); } bazaar-org-bazaar-b6e9a65/src/bz-curated-view.h000066400000000000000000000023201522167256300213760ustar00rootroot00000000000000/* bz-curated-view.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-content-provider.h" #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_CURATED_VIEW (bz_curated_view_get_type ()) G_DECLARE_FINAL_TYPE (BzCuratedView, bz_curated_view, BZ, CURATED_VIEW, AdwBin) GtkWidget * bz_curated_view_new (void); void bz_curated_view_set_state (BzCuratedView *self, BzStateInfo *state); BzStateInfo * bz_curated_view_get_state (BzCuratedView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-data-graph.c000066400000000000000000001175631522167256300210220ustar00rootroot00000000000000/* bz-data-graph.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include #include "bz-data-graph.h" #include "bz-data-point.h" #include #define LABEL_MARGIN 75.0 #define LABEL_MARGIN_RIGHT 35.0 #define TICK_LENGTH 5.0 struct _BzDataGraph { GtkWidget parent_instance; GListModel *model; char *independent_axis_label; char *dependent_axis_label; char *tooltip_prefix; int independent_decimals; int dependent_decimals; double transition_progress; double rounded_axis_max; AdwStyleManager *style_manager; GskPath *path; GskPathMeasure *path_measure; GskRenderNode *other; GskRenderNode *graph; GskRenderNode *overlay; gboolean wants_animate_open; GtkEventController *motion; double motion_x; double motion_y; GtkGesture *gesture; GtkWidget *tooltip_box; GtkWidget *tooltip_label1; GtkWidget *tooltip_prefix_label; GtkWidget *tooltip_label2; int allocated_width; int allocated_height; }; G_DEFINE_FINAL_TYPE (BzDataGraph, bz_data_graph, GTK_TYPE_WIDGET) enum { PROP_0, PROP_MODEL, PROP_INDEPENDENT_AXIS_LABEL, PROP_DEPENDENT_AXIS_LABEL, PROP_TOOLTIP_PREFIX, PROP_INDEPENDENT_DECIMALS, PROP_DEPENDENT_DECIMALS, PROP_TRANSITION_PROGRESS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void items_changed (GListModel *model, guint position, guint removed, guint added, BzDataGraph *self); static void refresh_path (BzDataGraph *self, double width, double height); static double calculate_axis_tick_value (double value, gboolean round_up); static void on_style_changed (BzDataGraph *self, GParamSpec *pspec, AdwStyleManager *style_manager); static void refresh_graph (BzDataGraph *self); static void refresh_overlay (BzDataGraph *self); static void bz_data_graph_dispose (GObject *object) { BzDataGraph *self = BZ_DATA_GRAPH (object); if (self->model != NULL) g_signal_handlers_disconnect_by_func ( self->model, items_changed, self); g_signal_handlers_disconnect_by_func (self->style_manager, on_style_changed, self); g_clear_object (&self->model); g_clear_pointer (&self->independent_axis_label, g_free); g_clear_pointer (&self->dependent_axis_label, g_free); g_clear_pointer (&self->tooltip_prefix, g_free); g_clear_pointer (&self->path, gsk_path_unref); g_clear_pointer (&self->path_measure, gsk_path_measure_unref); g_clear_pointer (&self->other, gsk_render_node_unref); g_clear_pointer (&self->graph, gsk_render_node_unref); g_clear_pointer (&self->overlay, gsk_render_node_unref); if (self->tooltip_box != NULL) gtk_widget_unparent (self->tooltip_box); G_OBJECT_CLASS (bz_data_graph_parent_class)->dispose (object); } static void bz_data_graph_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDataGraph *self = BZ_DATA_GRAPH (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_data_graph_get_model (self)); break; case PROP_INDEPENDENT_AXIS_LABEL: g_value_set_string (value, bz_data_graph_get_independent_axis_label (self)); break; case PROP_DEPENDENT_AXIS_LABEL: g_value_set_string (value, bz_data_graph_get_dependent_axis_label (self)); break; case PROP_TOOLTIP_PREFIX: g_value_set_string (value, bz_data_graph_get_tooltip_prefix (self)); break; case PROP_INDEPENDENT_DECIMALS: g_value_set_int (value, bz_data_graph_get_independent_decimals (self)); break; case PROP_DEPENDENT_DECIMALS: g_value_set_int (value, bz_data_graph_get_dependent_decimals (self)); break; case PROP_TRANSITION_PROGRESS: g_value_set_double (value, bz_data_graph_get_transition_progress (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_data_graph_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzDataGraph *self = BZ_DATA_GRAPH (object); switch (prop_id) { case PROP_MODEL: bz_data_graph_set_model (self, g_value_get_object (value)); break; case PROP_INDEPENDENT_AXIS_LABEL: bz_data_graph_set_independent_axis_label (self, g_value_get_string (value)); break; case PROP_DEPENDENT_AXIS_LABEL: bz_data_graph_set_dependent_axis_label (self, g_value_get_string (value)); break; case PROP_TOOLTIP_PREFIX: bz_data_graph_set_tooltip_prefix (self, g_value_get_string (value)); break; case PROP_INDEPENDENT_DECIMALS: bz_data_graph_set_independent_decimals (self, g_value_get_int (value)); break; case PROP_DEPENDENT_DECIMALS: bz_data_graph_set_dependent_decimals (self, g_value_get_int (value)); break; case PROP_TRANSITION_PROGRESS: bz_data_graph_set_transition_progress (self, g_value_get_double (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_data_graph_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BzDataGraph *self = BZ_DATA_GRAPH (widget); GtkRequisition natural_size = { 0 }; graphene_point_t card_position = { 0 }; if (width != self->allocated_width || height != self->allocated_height) { refresh_path ( self, (double) width - LABEL_MARGIN - LABEL_MARGIN_RIGHT, (double) height - LABEL_MARGIN); refresh_graph (self); refresh_overlay (self); self->allocated_width = width; self->allocated_height = height; } gtk_widget_get_preferred_size (self->tooltip_box, NULL, &natural_size); if (self->motion_x > width / 2.0) card_position.x = self->motion_x - natural_size.width - 10.0; else card_position.x = self->motion_x + 10.0; card_position.y = self->motion_y + 10.0; gtk_widget_allocate ( self->tooltip_box, natural_size.width, natural_size.height, baseline, gsk_transform_translate (NULL, &card_position)); gtk_widget_queue_draw (widget); } static void on_style_changed (BzDataGraph *self, GParamSpec *pspec, AdwStyleManager *style_manager) { refresh_graph (self); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void bz_data_graph_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzDataGraph *self = BZ_DATA_GRAPH (widget); if (self->path == NULL) return; if (self->graph != NULL) gtk_snapshot_append_node (snapshot, self->graph); if (self->other != NULL) { GdkRGBA widget_color = { 0 }; gtk_widget_get_color (widget, &widget_color); if (self->other != NULL) { graphene_rect_t bounds = { 0 }; gsk_render_node_get_bounds (self->other, &bounds); gtk_snapshot_push_mask (snapshot, GSK_MASK_MODE_ALPHA); gtk_snapshot_append_node (snapshot, self->other); gtk_snapshot_pop (snapshot); gtk_snapshot_append_color (snapshot, &widget_color, &bounds); gtk_snapshot_pop (snapshot); } } if (self->overlay != NULL) { gtk_snapshot_append_node (snapshot, self->overlay); /* tooltip card */ gtk_widget_snapshot_child (GTK_WIDGET (self), self->tooltip_box, snapshot); } if (self->wants_animate_open) { AdwAnimationTarget *transition_target = NULL; AdwSpringParams *transition_spring = NULL; g_autoptr (AdwAnimation) transition = NULL; self->wants_animate_open = FALSE; transition_target = adw_property_animation_target_new (G_OBJECT (self), "transition-progress"); transition_spring = adw_spring_params_new (1.0, 1.0, 80.0); transition = adw_spring_animation_new (GTK_WIDGET (self), 0.0, 1.0, transition_spring, transition_target); adw_spring_animation_set_epsilon (ADW_SPRING_ANIMATION (transition), 0.000001); adw_animation_play (transition); } } static void bz_data_graph_class_init (BzDataGraphClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_data_graph_dispose; object_class->get_property = bz_data_graph_get_property; object_class->set_property = bz_data_graph_set_property; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_INDEPENDENT_AXIS_LABEL] = g_param_spec_string ( "independent-axis-label", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_DEPENDENT_AXIS_LABEL] = g_param_spec_string ( "dependent-axis-label", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TOOLTIP_PREFIX] = g_param_spec_string ( "tooltip-prefix", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_INDEPENDENT_DECIMALS] = g_param_spec_int ( "independent-decimals", NULL, NULL, -1, 4, (int) 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_DEPENDENT_DECIMALS] = g_param_spec_int ( "dependent-decimals", NULL, NULL, -1, 4, (int) 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TRANSITION_PROGRESS] = g_param_spec_double ( "transition-progress", NULL, NULL, 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); widget_class->size_allocate = bz_data_graph_size_allocate; widget_class->snapshot = bz_data_graph_snapshot; } static void update_cursor (BzDataGraph *self, gdouble x, gdouble y) { double widget_width = gtk_widget_get_width (GTK_WIDGET (self)); double widget_height = gtk_widget_get_height (GTK_WIDGET (self)); if (x >= LABEL_MARGIN && y >= 0.0 && x < widget_width - LABEL_MARGIN_RIGHT && y < widget_height - LABEL_MARGIN) gtk_widget_set_cursor_from_name (GTK_WIDGET (self), "crosshair"); else gtk_widget_set_cursor (GTK_WIDGET (self), NULL); refresh_overlay (self); gtk_widget_queue_allocate (GTK_WIDGET (self)); } static void motion_enter (BzDataGraph *self, gdouble x, gdouble y, GtkEventControllerMotion *controller) { self->motion_x = x; self->motion_y = y; update_cursor (self, x, y); } static void motion_event (BzDataGraph *self, gdouble x, gdouble y, GtkEventControllerMotion *controller) { self->motion_x = x; self->motion_y = y; update_cursor (self, x, y); } static void motion_leave (BzDataGraph *self, GtkEventControllerMotion *controller) { self->motion_x = -1.0; self->motion_y = -1.0; update_cursor (self, -1.0, -1.0); } static void gesture_begin (BzDataGraph *self, double start_x, double start_y, GtkGestureDrag *gesture) { self->motion_x = start_x; self->motion_y = start_y; gtk_widget_queue_draw (GTK_WIDGET (self)); } static void gesture_update (BzDataGraph *self, double offset_x, double offset_y, GtkGestureDrag *gesture) { double start_x, start_y; gtk_gesture_drag_get_start_point (gesture, &start_x, &start_y); self->motion_x = start_x + offset_x; self->motion_y = start_y + offset_y; gtk_widget_queue_draw (GTK_WIDGET (self)); } static void gesture_end (BzDataGraph *self, double offset_x, double offset_y, GtkGestureDrag *gesture) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void bz_data_graph_init (BzDataGraph *self) { GtkWidget *inner_box = NULL; GtkWidget *label2_box = NULL; GtkWidget *icon_image = NULL; self->style_manager = adw_style_manager_get_default (); g_signal_connect_swapped (self->style_manager, "notify::dark", G_CALLBACK (on_style_changed), self); g_signal_connect_swapped (self->style_manager, "notify::accent-color", G_CALLBACK (on_style_changed), self); self->motion = gtk_event_controller_motion_new (); g_signal_connect_swapped (self->motion, "enter", G_CALLBACK (motion_enter), self); g_signal_connect_swapped (self->motion, "motion", G_CALLBACK (motion_event), self); g_signal_connect_swapped (self->motion, "leave", G_CALLBACK (motion_leave), self); gtk_widget_add_controller (GTK_WIDGET (self), self->motion); self->gesture = gtk_gesture_drag_new (); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->gesture), TRUE); g_signal_connect_swapped (self->gesture, "drag-begin", G_CALLBACK (gesture_begin), self); g_signal_connect_swapped (self->gesture, "drag-update", G_CALLBACK (gesture_update), self); g_signal_connect_swapped (self->gesture, "drag-end", G_CALLBACK (gesture_end), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (self->gesture)); self->motion_x = -1.0; self->motion_y = -1.0; self->rounded_axis_max = 0.0; self->tooltip_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_add_css_class (self->tooltip_box, "card"); gtk_widget_add_css_class (self->tooltip_box, "floating-tooltip"); inner_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); gtk_widget_set_margin_start (inner_box, 12); gtk_widget_set_margin_end (inner_box, 12); gtk_widget_set_margin_top (inner_box, 12); gtk_widget_set_margin_bottom (inner_box, 12); self->tooltip_label1 = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_label1, "heading"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_label1), 0.0); gtk_box_append (GTK_BOX (inner_box), self->tooltip_label1); label2_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); icon_image = gtk_image_new_from_icon_name ("square-filled-symbolic"); gtk_widget_add_css_class (icon_image, "accent"); gtk_box_append (GTK_BOX (label2_box), icon_image); self->tooltip_prefix_label = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_prefix_label, "body"); gtk_widget_add_css_class (self->tooltip_prefix_label, "dim-label"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_prefix_label), 0.0); gtk_box_append (GTK_BOX (label2_box), self->tooltip_prefix_label); self->tooltip_label2 = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_label2, "monospace"); gtk_widget_add_css_class (self->tooltip_label2, "dimmed"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_label2), 0.0); gtk_box_append (GTK_BOX (label2_box), self->tooltip_label2); gtk_box_append (GTK_BOX (inner_box), label2_box); gtk_box_append (GTK_BOX (self->tooltip_box), inner_box); gtk_widget_set_parent (self->tooltip_box, GTK_WIDGET (self)); } GtkWidget * bz_data_graph_new (void) { return g_object_new (BZ_TYPE_DATA_GRAPH, NULL); } GListModel * bz_data_graph_get_model (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), NULL); return self->model; } const char * bz_data_graph_get_independent_axis_label (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), NULL); return self->independent_axis_label; } const char * bz_data_graph_get_dependent_axis_label (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), NULL); return self->dependent_axis_label; } const char * bz_data_graph_get_tooltip_prefix (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), NULL); return self->tooltip_prefix; } int bz_data_graph_get_independent_decimals (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), 0); return self->independent_decimals; } int bz_data_graph_get_dependent_decimals (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), 0); return self->dependent_decimals; } double bz_data_graph_get_transition_progress (BzDataGraph *self) { g_return_val_if_fail (BZ_IS_DATA_GRAPH (self), 0.0); return self->transition_progress; } void bz_data_graph_set_model (BzDataGraph *self, GListModel *model) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model)); if (self->model != NULL) g_signal_handlers_disconnect_by_func ( self->model, items_changed, self); g_clear_object (&self->model); if (model != NULL) self->model = g_object_ref (model); self->allocated_width = -1; self->allocated_height = -1; gtk_widget_queue_allocate (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); } void bz_data_graph_set_independent_axis_label (BzDataGraph *self, const char *independent_axis_label) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); g_clear_pointer (&self->independent_axis_label, g_free); if (independent_axis_label != NULL) self->independent_axis_label = g_strdup (independent_axis_label); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INDEPENDENT_AXIS_LABEL]); } void bz_data_graph_set_dependent_axis_label (BzDataGraph *self, const char *dependent_axis_label) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); g_clear_pointer (&self->dependent_axis_label, g_free); if (dependent_axis_label != NULL) self->dependent_axis_label = g_strdup (dependent_axis_label); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEPENDENT_AXIS_LABEL]); } void bz_data_graph_set_tooltip_prefix (BzDataGraph *self, const char *tooltip_prefix) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); g_clear_pointer (&self->tooltip_prefix, g_free); if (tooltip_prefix != NULL) self->tooltip_prefix = g_strdup (tooltip_prefix); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TOOLTIP_PREFIX]); } void bz_data_graph_set_independent_decimals (BzDataGraph *self, int independent_decimals) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); self->independent_decimals = CLAMP (independent_decimals, -1, 4); gtk_widget_queue_allocate (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INDEPENDENT_DECIMALS]); } void bz_data_graph_set_dependent_decimals (BzDataGraph *self, int dependent_decimals) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); self->dependent_decimals = CLAMP (dependent_decimals, -1, 4); gtk_widget_queue_allocate (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEPENDENT_DECIMALS]); } void bz_data_graph_set_transition_progress (BzDataGraph *self, double transition_progress) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); self->transition_progress = transition_progress; refresh_graph (self); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_PROGRESS]); } void bz_data_graph_animate_open (BzDataGraph *self) { g_return_if_fail (BZ_IS_DATA_GRAPH (self)); self->wants_animate_open = TRUE; gtk_widget_queue_draw (GTK_WIDGET (self)); } static void items_changed (GListModel *model, guint position, guint removed, guint added, BzDataGraph *self) { gtk_widget_queue_allocate (GTK_WIDGET (self)); } static double calculate_axis_tick_value (double value, gboolean round_up) { double exponent = 0.0; double fraction = 0.0; double rounded_axis_fraction = 0.0; exponent = floor (log10 (value)); fraction = value / pow (10, exponent); if (round_up) { if (fraction <= 1.0) rounded_axis_fraction = 1.0; else if (fraction <= 2.0) rounded_axis_fraction = 2.0; else if (fraction <= 5.0) rounded_axis_fraction = 5.0; else rounded_axis_fraction = 10.0; } else if (fraction < 1.5) rounded_axis_fraction = 1.0; else if (fraction < 3.0) rounded_axis_fraction = 2.0; else if (fraction < 7.0) rounded_axis_fraction = 5.0; else rounded_axis_fraction = 10.0; return rounded_axis_fraction * pow (10, exponent); } static void refresh_path (BzDataGraph *self, double width, double height) { guint n_items = 0; double min_independent = 0.0; double max_independent = 0.0; double max_dependent = 0.0; PangoContext *pango = NULL; PangoFontMetrics *metrics = NULL; double font_height = 0.0; int independent_label_step = 0; g_autoptr (GskPathBuilder) curve_builder = NULL; g_autoptr (GtkSnapshot) snapshot = NULL; g_autoptr (GskPathBuilder) grid_builder = NULL; g_autoptr (GskPath) grid = NULL; g_autoptr (GskStroke) grid_stroke = NULL; double rounded_axis_max = 0.0; double tick_spacing = 0.0; int num_ticks = 0; g_clear_pointer (&self->path, gsk_path_unref); g_clear_pointer (&self->path_measure, gsk_path_measure_unref); g_clear_pointer (&self->other, gsk_render_node_unref); if (self->model == NULL) return; if (width < LABEL_MARGIN || height < LABEL_MARGIN) return; n_items = g_list_model_get_n_items (self->model); if (n_items <= 1) return; for (guint i = 0; i < n_items; i++) { g_autoptr (BzDataPoint) point = NULL; double independent = 0.0; double dependent = 0.0; point = g_list_model_get_item (self->model, i); independent = bz_data_point_get_independent (point); dependent = bz_data_point_get_dependent (point); if (i == 0) { min_independent = independent; max_independent = independent; max_dependent = dependent; } else { min_independent = MIN (independent, min_independent); max_independent = MAX (independent, max_independent); max_dependent = MAX (dependent, max_dependent); } } rounded_axis_max = calculate_axis_tick_value (max_dependent, TRUE); pango = gtk_widget_get_pango_context (GTK_WIDGET (self)); metrics = pango_context_get_metrics (pango, NULL, NULL); font_height = (double) (int) PANGO_PIXELS_CEIL (pango_font_metrics_get_height (metrics)); g_clear_pointer (&metrics, pango_font_metrics_unref); num_ticks = MIN (5, floor (height / (font_height + 25.0))); if (num_ticks < 2) num_ticks = 2; tick_spacing = calculate_axis_tick_value (rounded_axis_max / (double) num_ticks, FALSE); if (tick_spacing == 0.0) tick_spacing = 1.0; rounded_axis_max = ceil (max_dependent / tick_spacing) * tick_spacing; self->rounded_axis_max = rounded_axis_max; independent_label_step = MAX (1, n_items / MAX (1, floor (width / MAX (font_height + 10.0, LABEL_MARGIN)))) * 1.5; curve_builder = gsk_path_builder_new (); snapshot = gtk_snapshot_new (); grid_builder = gsk_path_builder_new (); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (LABEL_MARGIN, 0.0)); for (guint i = 0; i < n_items; i++) { g_autoptr (BzDataPoint) point = NULL; double independent = 0.0; double dependent = 0.0; double x = 0.0; double y = 0.0; point = g_list_model_get_item (self->model, i); independent = bz_data_point_get_independent (point); dependent = bz_data_point_get_dependent (point); x = (independent - min_independent) / (max_independent - min_independent) * width; y = (1.0 - dependent / rounded_axis_max) * height; if (i == 0) gsk_path_builder_move_to (curve_builder, x, y); else gsk_path_builder_line_to (curve_builder, x, y); if (i % independent_label_step == 0) { const char *label = NULL; char buf[32] = { 0 }; g_autoptr (PangoLayout) layout = NULL; PangoRectangle extents; label = bz_data_point_get_label (point); if (label == NULL) { switch (self->independent_decimals) { case 0: g_snprintf (buf, sizeof (buf), "%d", (int) round (independent)); break; case 1: g_snprintf (buf, sizeof (buf), "%.1f", independent); break; case 2: g_snprintf (buf, sizeof (buf), "%.2f", independent); break; case 3: g_snprintf (buf, sizeof (buf), "%.3f", independent); break; default: g_snprintf (buf, sizeof (buf), "%f", independent); break; } label = buf; } layout = pango_layout_new (pango); pango_layout_set_text (layout, label, -1); pango_layout_get_pixel_extents (layout, NULL, &extents); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, height + LABEL_MARGIN / 10.0)); gtk_snapshot_rotate (snapshot, -LABEL_MARGIN_RIGHT); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (-extents.width, 0)); gtk_snapshot_append_layout (snapshot, layout, &(GdkRGBA){ 1.0, 1.0, 1.0, 1.0 }); gtk_snapshot_restore (snapshot); gsk_path_builder_move_to (grid_builder, x, height); gsk_path_builder_line_to (grid_builder, x, height + TICK_LENGTH); } } gsk_path_builder_move_to (grid_builder, 0.0, height); gsk_path_builder_line_to (grid_builder, width, height); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (-LABEL_MARGIN * 0.75, -font_height / 2.0)); for (double value = 0.0; value <= rounded_axis_max; value += tick_spacing) { char buf[32] = { 0 }; g_autoptr (PangoLayout) layout = NULL; double y_pos = (1.0 - value / rounded_axis_max) * height; switch (self->dependent_decimals) { case 0: g_snprintf (buf, sizeof (buf), "%d", (int) round (value)); break; case 1: g_snprintf (buf, sizeof (buf), "%.1f", value); break; case 2: g_snprintf (buf, sizeof (buf), "%.2f", value); break; case 3: g_snprintf (buf, sizeof (buf), "%.3f", value); break; default: g_snprintf (buf, sizeof (buf), "%f", value); break; } layout = pango_layout_new (pango); pango_layout_set_text (layout, buf, -1); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (0, y_pos)); gtk_snapshot_append_layout (snapshot, layout, &(GdkRGBA){ 1.0, 1.0, 1.0, 1.0 }); gtk_snapshot_restore (snapshot); gsk_path_builder_move_to (grid_builder, -TICK_LENGTH, y_pos); gsk_path_builder_line_to (grid_builder, 0.0, y_pos); } gtk_snapshot_restore (snapshot); gsk_path_builder_move_to (grid_builder, 0.0, 0.0); gsk_path_builder_line_to (grid_builder, 0.0, height); grid = gsk_path_builder_to_path (grid_builder); grid_stroke = gsk_stroke_new (1.0); gtk_snapshot_append_stroke (snapshot, grid, grid_stroke, &(GdkRGBA){ 1.0, 1.0, 1.0, 1.0 }); gtk_snapshot_restore (snapshot); self->path = gsk_path_builder_to_path (curve_builder); self->path_measure = gsk_path_measure_new (self->path); self->other = gtk_snapshot_to_node (snapshot); } static void refresh_graph (BzDataGraph *self) { double widget_width = 0.0; double widget_height = 0.0; AdwStyleManager *style_manager = NULL; g_autoptr (GdkRGBA) accent_color = NULL; GdkRGBA widget_color = { 0 }; g_autoptr (GskPath) transitioning = NULL; g_autoptr (GskStroke) stroke = NULL; g_autoptr (GtkSnapshot) snapshot = NULL; if (self->path == NULL) { g_clear_pointer (&self->graph, gsk_render_node_unref); return; } widget_width = gtk_widget_get_width (GTK_WIDGET (self)); (void) widget_width; widget_height = gtk_widget_get_height (GTK_WIDGET (self)); style_manager = adw_style_manager_get_default (); accent_color = adw_style_manager_get_accent_color_rgba (style_manager); gtk_widget_get_color (GTK_WIDGET (self), &widget_color); if (self->transition_progress > 0.0 && self->transition_progress < 1.0) { GskPathPoint point0 = { 0 }; double path_distance = 0.0; GskPathPoint point1 = { 0 }; g_autoptr (GskPathBuilder) builder = NULL; gsk_path_get_start_point (self->path, &point0); path_distance = gsk_path_measure_get_length (self->path_measure) * self->transition_progress; gsk_path_measure_get_point (self->path_measure, path_distance, &point1); builder = gsk_path_builder_new (); gsk_path_builder_add_segment (builder, self->path, &point0, &point1); transitioning = gsk_path_builder_to_path (builder); } stroke = gsk_stroke_new (3.0); gsk_stroke_set_line_cap (stroke, GSK_LINE_CAP_ROUND); snapshot = gtk_snapshot_new (); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (LABEL_MARGIN, 0.0)); if (self->transition_progress > 0.0) { g_autoptr (GskPathBuilder) builder = NULL; GskPathPoint point0 = { 0 }; GskPathPoint point1 = { 0 }; graphene_point_t start_position = { 0 }; graphene_point_t end_position = { 0 }; g_autoptr (GskPath) path = NULL; const GskColorStop gradient_stops[] = { { 0.0, { .red = accent_color->red, .green = accent_color->green, .blue = accent_color->blue, .alpha = 0.75, }, }, { 1.0, { .red = accent_color->red, .green = accent_color->green, .blue = accent_color->blue, .alpha = 0.0, }, }, }; const GskColorStop hfadeout_mask_stops[] = { { 0.0, { .red = 0.0, .green = 0.0, .blue = 0.0, .alpha = 1.0, }, }, { 0.75, { .red = 0.0, .green = 0.0, .blue = 0.0, .alpha = 1.0, }, }, { 1.0, { .red = 0.0, .green = 0.0, .blue = 0.0, .alpha = 0.0, }, }, }; gtk_snapshot_append_stroke ( snapshot, transitioning != NULL ? transitioning : self->path, stroke, accent_color); /* Gradient under the graph line */ builder = gsk_path_builder_new (); gsk_path_get_start_point ( transitioning != NULL ? transitioning : self->path, &point0); gsk_path_point_get_position ( &point0, transitioning != NULL ? transitioning : self->path, &start_position); gsk_path_get_end_point ( transitioning != NULL ? transitioning : self->path, &point1); gsk_path_point_get_position ( &point1, transitioning != NULL ? transitioning : self->path, &end_position); gsk_path_builder_move_to (builder, start_position.x, start_position.y); gsk_path_builder_add_segment ( builder, transitioning != NULL ? transitioning : self->path, &point0, &point1); gsk_path_builder_move_to (builder, end_position.x, end_position.y); /* close the loop for `gtk_snapshot_push_fill` */ gsk_path_builder_line_to (builder, end_position.x, widget_height - LABEL_MARGIN); gsk_path_builder_line_to (builder, start_position.x, widget_height - LABEL_MARGIN); gsk_path_builder_line_to (builder, start_position.x, start_position.y); path = gsk_path_builder_to_path (builder); gtk_snapshot_push_fill ( snapshot, path, GSK_FILL_RULE_WINDING); gtk_snapshot_push_mask (snapshot, GSK_MASK_MODE_ALPHA); gtk_snapshot_append_linear_gradient ( snapshot, &GRAPHENE_RECT_INIT ( 0.0, 0.0, end_position.x, widget_height - LABEL_MARGIN), &GRAPHENE_POINT_INIT (0.0, 0.0), &GRAPHENE_POINT_INIT (end_position.x, 0.0), hfadeout_mask_stops, G_N_ELEMENTS (hfadeout_mask_stops)); gtk_snapshot_pop (snapshot); /* Push Mask (mask) */ gtk_snapshot_append_linear_gradient ( snapshot, &GRAPHENE_RECT_INIT ( 0.0, 0.0, end_position.x, widget_height - LABEL_MARGIN), &GRAPHENE_POINT_INIT (0.0, 0.0), &GRAPHENE_POINT_INIT (0.0, widget_height - LABEL_MARGIN), gradient_stops, G_N_ELEMENTS (gradient_stops)); gtk_snapshot_pop (snapshot); /* Push Mask (image) */ gtk_snapshot_pop (snapshot); /* Push Fill */ } gtk_snapshot_restore (snapshot); g_clear_pointer (&self->graph, gsk_render_node_unref); self->graph = gtk_snapshot_to_node (snapshot); } static void refresh_overlay (BzDataGraph *self) { double widget_width = 0.0; double widget_height = 0.0; GdkRGBA widget_color = { 0 }; AdwStyleManager *style_manager = NULL; g_autoptr (GdkRGBA) accent_color = NULL; guint n_items = 0; guint hovered_idx = 0; g_autoptr (BzDataPoint) point = NULL; g_autoptr (GskStroke) crosshair_stroke = NULL; double graph_height = 0.0; double graph_width = 0.0; double fraction = 0.0; double point_x = 0.0; double point_y = 0.0; GskRoundedRect rounded_rect = { { { 0 } } }; GdkRGBA line_color = { 0 }; double rounded_axis_max = 0.0; const char *prefix = NULL; g_autofree char *line2_text = NULL; g_autoptr (GtkSnapshot) snapshot = NULL; if (self->path == NULL) { g_clear_pointer (&self->overlay, gsk_render_node_unref); return; } widget_width = gtk_widget_get_width (GTK_WIDGET (self)); widget_height = gtk_widget_get_height (GTK_WIDGET (self)); if (self->motion_x < LABEL_MARGIN || self->motion_y < 0.0 || self->motion_x >= widget_width - LABEL_MARGIN_RIGHT || self->motion_y >= widget_height - LABEL_MARGIN) { g_clear_pointer (&self->overlay, gsk_render_node_unref); return; } gtk_widget_get_color (GTK_WIDGET (self), &widget_color); style_manager = adw_style_manager_get_default (); accent_color = adw_style_manager_get_accent_color_rgba (style_manager); n_items = g_list_model_get_n_items (self->model); graph_width = widget_width - LABEL_MARGIN - LABEL_MARGIN_RIGHT; fraction = (self->motion_x - LABEL_MARGIN) / graph_width; hovered_idx = floor ((double) n_items * fraction); if (hovered_idx >= n_items) hovered_idx = n_items - 1; point = g_list_model_get_item (self->model, hovered_idx); if (self->rounded_axis_max > 0.0) rounded_axis_max = self->rounded_axis_max; else { double max_dependent = 0.0; for (guint i = 0; i < n_items; i++) { g_autoptr (BzDataPoint) p = g_list_model_get_item (self->model, i); double dep = bz_data_point_get_dependent (p); if (i == 0 || dep > max_dependent) max_dependent = dep; } rounded_axis_max = calculate_axis_tick_value (max_dependent, TRUE); } snapshot = gtk_snapshot_new (); graph_height = widget_height - LABEL_MARGIN; point_x = ((double) hovered_idx / (double) (n_items - 1)) * graph_width + LABEL_MARGIN; point_y = (1.0 - bz_data_point_get_dependent (point) / rounded_axis_max) * graph_height; line_color = widget_color; line_color.alpha = 0.5; crosshair_stroke = gsk_stroke_new (1.0); #define APPEND_LINE(x0, y0, x1, y1, color) \ G_STMT_START \ { \ g_autoptr (GskPathBuilder) builder = NULL; \ g_autoptr (GskPath) path = NULL; \ \ builder = gsk_path_builder_new (); \ gsk_path_builder_move_to (builder, (x0), (y0)); \ gsk_path_builder_line_to (builder, (x1), (y1)); \ \ path = gsk_path_builder_to_path (builder); \ gtk_snapshot_append_stroke (snapshot, path, crosshair_stroke, (color)); \ } \ G_STMT_END APPEND_LINE (self->motion_x, 0.0, self->motion_x, widget_height - LABEL_MARGIN, &line_color); #undef APPEND_LINE gsk_rounded_rect_init_from_rect ( &rounded_rect, &GRAPHENE_RECT_INIT (point_x - 4.0, point_y - 4.0, 8.0, 8.0), 4.0); gtk_snapshot_push_rounded_clip (snapshot, &rounded_rect); gtk_snapshot_append_color (snapshot, accent_color, &rounded_rect.bounds); gtk_snapshot_pop (snapshot); g_clear_pointer (&self->overlay, gsk_render_node_unref); self->overlay = gtk_snapshot_to_node (snapshot); gtk_label_set_label (GTK_LABEL (self->tooltip_label1), bz_data_point_get_label (point)); prefix = self->tooltip_prefix != NULL ? self->tooltip_prefix : ""; gtk_label_set_label (GTK_LABEL (self->tooltip_prefix_label), prefix); line2_text = g_strdup_printf ("%'.0f", bz_data_point_get_dependent (point)); gtk_label_set_label (GTK_LABEL (self->tooltip_label2), line2_text); } bazaar-org-bazaar-b6e9a65/src/bz-data-graph.h000066400000000000000000000046131522167256300210160ustar00rootroot00000000000000/* bz-data-graph.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_DATA_GRAPH (bz_data_graph_get_type ()) G_DECLARE_FINAL_TYPE (BzDataGraph, bz_data_graph, BZ, DATA_GRAPH, GtkWidget) GtkWidget * bz_data_graph_new (void); GListModel * bz_data_graph_get_model (BzDataGraph *self); const char * bz_data_graph_get_independent_axis_label (BzDataGraph *self); const char * bz_data_graph_get_dependent_axis_label (BzDataGraph *self); int bz_data_graph_get_independent_decimals (BzDataGraph *self); int bz_data_graph_get_dependent_decimals (BzDataGraph *self); double bz_data_graph_get_transition_progress (BzDataGraph *self); void bz_data_graph_set_model (BzDataGraph *self, GListModel *model); void bz_data_graph_set_independent_axis_label (BzDataGraph *self, const char *independent_axis_label); void bz_data_graph_set_dependent_axis_label (BzDataGraph *self, const char *dependent_axis_label); void bz_data_graph_set_independent_decimals (BzDataGraph *self, int independent_decimals); void bz_data_graph_set_dependent_decimals (BzDataGraph *self, int dependent_decimals); const char *bz_data_graph_get_tooltip_prefix (BzDataGraph *self); void bz_data_graph_set_tooltip_prefix (BzDataGraph *self, const char *tooltip_prefix); void bz_data_graph_set_transition_progress (BzDataGraph *self, double transition_progress); void bz_data_graph_animate_open (BzDataGraph *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-data-point.txt000066400000000000000000000003261522167256300214330ustar00rootroot00000000000000prefix=bz name=data_point parent-prefix=g parent-name=object author=AUTOGEN property=independent double G_TYPE_DOUBLE double property=dependent double G_TYPE_DOUBLE double property=label char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-decorated-screenshot.blp000066400000000000000000000004171522167256300234370ustar00rootroot00000000000000using Gtk 4.0; template $BzDecoratedScreenshot: Button { halign: center; focus-on-click: false; styles [ "flat", "decorated-screenshot" ] child: Gtk.Picture { paintable: bind template.async-texture; content-fit: contain; halign: center; }; }bazaar-org-bazaar-b6e9a65/src/bz-decorated-screenshot.c000066400000000000000000000116661522167256300231140ustar00rootroot00000000000000/* bz-decorated-screenshot.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-decorated-screenshot.h" #include "bz-screenshot.h" #include struct _BzDecoratedScreenshot { GtkButton parent_instance; BzAsyncTexture *async_texture; /* Template widgets */ }; G_DEFINE_FINAL_TYPE (BzDecoratedScreenshot, bz_decorated_screenshot, GTK_TYPE_BUTTON) enum { PROP_0, PROP_ASYNC_TEXTURE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_decorated_screenshot_dispose (GObject *object) { BzDecoratedScreenshot *self = BZ_DECORATED_SCREENSHOT (object); g_clear_pointer (&self->async_texture, g_object_unref); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_DECORATED_SCREENSHOT); G_OBJECT_CLASS (bz_decorated_screenshot_parent_class)->dispose (object); } static void bz_decorated_screenshot_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDecoratedScreenshot *self = BZ_DECORATED_SCREENSHOT (object); switch (prop_id) { case PROP_ASYNC_TEXTURE: g_value_set_object (value, bz_decorated_screenshot_get_async_texture (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_decorated_screenshot_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzDecoratedScreenshot *self = BZ_DECORATED_SCREENSHOT (object); switch (prop_id) { case PROP_ASYNC_TEXTURE: bz_decorated_screenshot_set_async_texture (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_decorated_screenshot_class_init (BzDecoratedScreenshotClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_decorated_screenshot_set_property; object_class->get_property = bz_decorated_screenshot_get_property; object_class->dispose = bz_decorated_screenshot_dispose; props[PROP_ASYNC_TEXTURE] = g_param_spec_object ( "async-texture", NULL, NULL, BZ_TYPE_ASYNC_TEXTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-decorated-screenshot.ui"); } static void on_enter_notify (GtkEventController *controller, gpointer user_data) { g_autoptr (GdkCursor) cursor = gdk_cursor_new_from_name ("pointer", NULL); gtk_widget_set_cursor (GTK_WIDGET (user_data), cursor); } static void on_leave_notify (GtkEventController *controller, gpointer user_data) { gtk_widget_set_cursor (GTK_WIDGET (user_data), NULL); } static void bz_decorated_screenshot_init (BzDecoratedScreenshot *self) { GtkEventController *enter_leave = gtk_event_controller_motion_new (); gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect (enter_leave, "enter", G_CALLBACK (on_enter_notify), GTK_WIDGET (self)); g_signal_connect (enter_leave, "leave", G_CALLBACK (on_leave_notify), GTK_WIDGET (self)); gtk_widget_add_controller (GTK_WIDGET (self), enter_leave); } BzDecoratedScreenshot * bz_decorated_screenshot_new (void) { return g_object_new (BZ_TYPE_DECORATED_SCREENSHOT, NULL); } BzAsyncTexture * bz_decorated_screenshot_get_async_texture (BzDecoratedScreenshot *self) { g_return_val_if_fail (BZ_IS_DECORATED_SCREENSHOT (self), NULL); return self->async_texture; } void bz_decorated_screenshot_set_async_texture (BzDecoratedScreenshot *self, BzAsyncTexture *async_texture) { g_return_if_fail (BZ_IS_DECORATED_SCREENSHOT (self)); g_clear_pointer (&self->async_texture, g_object_unref); if (async_texture != NULL) self->async_texture = g_object_ref (async_texture); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ASYNC_TEXTURE]); } /* End of bz-decorated-screenshot.c */ bazaar-org-bazaar-b6e9a65/src/bz-decorated-screenshot.h000066400000000000000000000025611522167256300231130ustar00rootroot00000000000000/* bz-decorated-screenshot.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-async-texture.h" #include G_BEGIN_DECLS #define BZ_TYPE_DECORATED_SCREENSHOT (bz_decorated_screenshot_get_type ()) G_DECLARE_FINAL_TYPE (BzDecoratedScreenshot, bz_decorated_screenshot, BZ, DECORATED_SCREENSHOT, GtkButton) BzDecoratedScreenshot * bz_decorated_screenshot_new (void); BzAsyncTexture * bz_decorated_screenshot_get_async_texture (BzDecoratedScreenshot *self); void bz_decorated_screenshot_set_async_texture (BzDecoratedScreenshot *self, BzAsyncTexture *async_texture); G_END_DECLS /* End of bz-decorated-screenshot.h */ bazaar-org-bazaar-b6e9a65/src/bz-developer-badge.blp000066400000000000000000000031151522167256300223550ustar00rootroot00000000000000using Gtk 4.0; template $BzDeveloperBadge: Box { orientation: horizontal; spacing: 3; halign: start; visible: bind $invert_boolean($is_null(template.entry as <$BzEntry>.developer) as ) as ; Label developer_label { label: bind $get_developer_link(template.entry, template.entry as <$BzEntry>.verification-status) as ; use-markup: true; xalign: 0.0; wrap: true; lines: 3; ellipsize: end; wrap-mode: word_char; natural-wrap-mode: word; selectable: true; styles [ "app-developer", ] } MenuButton info_button { icon-name: bind $get_icon_name(template.entry as <$BzEntry>.verification-status) as ; popover: popover; visible: bind $invert_boolean($is_null(template.entry as <$BzEntry>.verification-status) as ) as ; styles [ "developer-badge", ] has-tooltip: true; tooltip-text: bind $get_verified_tooltip(template.entry as <$BzEntry>.verification-status) as ; EventControllerMotion { enter => $on_info_button_enter(); leave => $on_info_button_leave(); } } } Popover popover { has-arrow: true; position: right; child: Box { orientation: vertical; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; Label popover_label { label: bind $get_popover_text(template.entry, template.entry as <$BzEntry>.verification-status) as ; wrap: true; xalign: 0.0; max-width-chars: 40; use-markup: true; activate-link => $on_popover_label_activate_link(); } }; } bazaar-org-bazaar-b6e9a65/src/bz-developer-badge.c000066400000000000000000000320101522167256300220160ustar00rootroot00000000000000/* bz-developer-badge.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-developer-badge.h" #include "bz-verification-status.h" struct _BzDeveloperBadge { GtkBox parent_instance; BzEntry *entry; GtkLabel *developer_label; GtkMenuButton *info_button; GtkPopover *popover; GtkLabel *popover_label; }; G_DEFINE_FINAL_TYPE (BzDeveloperBadge, bz_developer_badge, GTK_TYPE_BOX) enum { PROP_0, PROP_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static char * get_developer_name (gpointer object, GObject *entry) { if (entry == NULL || !BZ_IS_ENTRY (entry)) return NULL; return g_strdup (bz_entry_get_developer (BZ_ENTRY (entry))); } static char * get_icon_name (gpointer object, GObject *status) { gboolean verified = FALSE; if (status == NULL) return g_strdup ("info-outline-symbolic"); g_object_get (status, "verified", &verified, NULL); return g_strdup (verified ? "verified-checkmark-symbolic" : "info-outline-symbolic"); } static char * get_verified_tooltip (gpointer object, GObject *status) { gboolean verified = FALSE; if (status == NULL) return g_strdup (_ ("Not Verified")); g_object_get (status, "verified", &verified, NULL); return g_strdup (verified ? _ ("Verified") : _ ("Not Verified")); } static char * format_app_id (const char *app_id) { return g_strdup_printf ("%s", app_id); } static char * format_website_url (const char *website) { return g_strdup_printf ("%s", website, website, website); } static char * format_provider_name (const char *login_provider) { if (g_strcmp0 (login_provider, "github") == 0) return g_strdup ("GitHub"); else if (g_strcmp0 (login_provider, "gitlab") == 0) return g_strdup ("GitLab"); else if (g_strcmp0 (login_provider, "gnome") == 0) return g_strdup ("GNOME GitLab"); else if (g_strcmp0 (login_provider, "kde") == 0) return g_strdup ("KDE GitLab"); else return g_strdup (login_provider); } static char * format_provider_url (const char *login_provider, const char *login_name) { if (g_strcmp0 (login_provider, "github") == 0) return g_strdup_printf ("https://github.com/%s", login_name); else if (g_strcmp0 (login_provider, "gitlab") == 0) return g_strdup_printf ("https://gitlab.com/%s", login_name); else if (g_strcmp0 (login_provider, "gnome") == 0) return g_strdup_printf ("https://gitlab.gnome.org/%s", login_name); else if (g_strcmp0 (login_provider, "kde") == 0) return g_strdup_printf ("https://invent.kde.org/%s", login_name); else return NULL; } static char * get_developer_link (gpointer object, BzEntry *entry, BzVerificationStatus *status) { const char *dev = NULL; const char *method = NULL; const char *login_name = NULL; const char *login_provider = NULL; const char *website = NULL; gboolean verified = FALSE; g_autofree char *escaped_dev = NULL; if (entry == NULL || !BZ_IS_ENTRY (entry)) return NULL; dev = bz_entry_get_developer (entry); if (dev == NULL) return NULL; escaped_dev = g_markup_escape_text (dev, -1); if (status == NULL) return g_steal_pointer (&escaped_dev); g_object_get (status, "verified", &verified, "method", &method, "login-name", &login_name, "login-provider", &login_provider, "website", &website, NULL); if (!verified) return g_steal_pointer (&escaped_dev); if (g_strcmp0 (method, "login_provider") == 0 && login_name != NULL && login_provider != NULL) { g_autofree char *url = NULL; url = format_provider_url (login_provider, login_name); if (url != NULL) return g_strdup_printf ("%s", url, url, escaped_dev); } if (g_strcmp0 (method, "website") == 0 && website != NULL && *website != '\0') return g_strdup_printf ("%s", website, website, escaped_dev); return g_steal_pointer (&escaped_dev); } static char * get_popover_text (gpointer object, GObject *entry_obj, GObject *status_obj) { BzVerificationStatus *status = NULL; const char *app_id = NULL; const char *website = NULL; const char *method = NULL; const char *login_name = NULL; const char *login_provider = NULL; gboolean verified = FALSE; g_autofree char *formatted_app_id = NULL; g_autofree char *formatted_website = NULL; g_autofree char *provider_name = NULL; if (entry_obj == NULL || !BZ_IS_ENTRY (entry_obj)) return g_strdup (_ ("Developer information not available.")); app_id = bz_entry_get_id (BZ_ENTRY (entry_obj)); formatted_app_id = format_app_id (app_id); if (status_obj == NULL) return g_strdup_printf (_ ("The ownership of the %s app ID has not been verified and it may be a community package."), formatted_app_id); status = BZ_VERIFICATION_STATUS (status_obj); g_object_get (status, "verified", &verified, "method", &method, "website", &website, "login-name", &login_name, "login-provider", &login_provider, NULL); if (!verified) return g_strdup_printf (_ ("The ownership of the %s app ID has not been verified and it may be a community package."), formatted_app_id); if (g_strcmp0 (method, "manual") == 0) return g_strdup_printf (_ ("The ownership of the %s app ID has been manually verified by the Flathub team."), formatted_app_id); if (g_strcmp0 (method, "login_provider") == 0 && login_name != NULL && login_provider != NULL) { g_autofree char *url = NULL; g_autofree char *linked_name = NULL; provider_name = format_provider_name (login_provider); url = format_provider_url (login_provider, login_name); if (url != NULL) linked_name = g_strdup_printf ("%s", url, url, login_name); else linked_name = g_strdup (login_name); return g_strdup_printf (_ ("The ownership of the %1$s app ID has been verified by %2$s on %3$s."), formatted_app_id, linked_name, provider_name); } if (website != NULL && *website != '\0') { formatted_website = format_website_url (website); return g_strdup_printf (_ ("The ownership of the %1$s app ID has been verified using %2$s."), formatted_app_id, formatted_website); } return g_strdup_printf (_ ("The ownership of the %s app ID has been verified."), formatted_app_id); } static void on_info_button_enter (GtkEventControllerMotion *controller, gdouble x, gdouble y, gpointer user_data) { GtkWidget *widget = GTK_WIDGET (user_data); gtk_widget_set_cursor_from_name (widget, "pointer"); } static void on_info_button_leave (GtkEventControllerMotion *controller, gpointer user_data) { GtkWidget *widget = GTK_WIDGET (user_data); gtk_widget_set_cursor (widget, NULL); } static gboolean on_popover_label_activate_link (GtkLabel *label, const char *uri, BzDeveloperBadge *self) { gtk_popover_popdown (self->popover); return FALSE; } static void bz_developer_badge_dispose (GObject *object) { BzDeveloperBadge *self = BZ_DEVELOPER_BADGE (object); g_clear_object (&self->entry); G_OBJECT_CLASS (bz_developer_badge_parent_class)->dispose (object); } static void bz_developer_badge_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDeveloperBadge *self = BZ_DEVELOPER_BADGE (object); switch (prop_id) { case PROP_ENTRY: g_value_set_object (value, bz_developer_badge_get_entry (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_developer_badge_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzDeveloperBadge *self = BZ_DEVELOPER_BADGE (object); switch (prop_id) { case PROP_ENTRY: bz_developer_badge_set_entry (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_developer_badge_class_init (BzDeveloperBadgeClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_developer_badge_dispose; object_class->get_property = bz_developer_badge_get_property; object_class->set_property = bz_developer_badge_set_property; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-developer-badge.ui"); gtk_widget_class_bind_template_child (widget_class, BzDeveloperBadge, developer_label); gtk_widget_class_bind_template_child (widget_class, BzDeveloperBadge, info_button); gtk_widget_class_bind_template_child (widget_class, BzDeveloperBadge, popover); gtk_widget_class_bind_template_child (widget_class, BzDeveloperBadge, popover_label); gtk_widget_class_bind_template_callback (widget_class, on_info_button_enter); gtk_widget_class_bind_template_callback (widget_class, on_info_button_leave); gtk_widget_class_bind_template_callback (widget_class, on_popover_label_activate_link); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, get_developer_name); gtk_widget_class_bind_template_callback (widget_class, get_developer_link); gtk_widget_class_bind_template_callback (widget_class, get_icon_name); gtk_widget_class_bind_template_callback (widget_class, get_verified_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_popover_text); } static void bz_developer_badge_init (BzDeveloperBadge *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_developer_badge_new (void) { return g_object_new (BZ_TYPE_DEVELOPER_BADGE, NULL); } BzEntry * bz_developer_badge_get_entry (BzDeveloperBadge *self) { g_return_val_if_fail (BZ_IS_DEVELOPER_BADGE (self), NULL); return self->entry; } void bz_developer_badge_set_entry (BzDeveloperBadge *self, BzEntry *entry) { BzVerificationStatus *status = NULL; gboolean verified = FALSE; g_return_if_fail (BZ_IS_DEVELOPER_BADGE (self)); g_return_if_fail (entry == NULL || BZ_IS_ENTRY (entry)); if (g_set_object (&self->entry, entry)) { gtk_widget_remove_css_class (GTK_WIDGET (self), "verified"); gtk_widget_remove_css_class (GTK_WIDGET (self), "dimmed"); if (entry != NULL) { g_object_get (entry, "verification-status", &status, NULL); if (status != NULL) { g_object_get (status, "verified", &verified, NULL); g_object_unref (status); } gtk_widget_add_css_class (GTK_WIDGET (self), verified ? "verified" : "dimmed"); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENTRY]); } } bazaar-org-bazaar-b6e9a65/src/bz-developer-badge.h000066400000000000000000000023351522167256300220320ustar00rootroot00000000000000/* bz-developer-badge.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include G_BEGIN_DECLS #define BZ_TYPE_DEVELOPER_BADGE (bz_developer_badge_get_type ()) G_DECLARE_FINAL_TYPE (BzDeveloperBadge, bz_developer_badge, BZ, DEVELOPER_BADGE, GtkButton) GtkWidget *bz_developer_badge_new (void); BzEntry *bz_developer_badge_get_entry (BzDeveloperBadge *self); void bz_developer_badge_set_entry (BzDeveloperBadge *self, BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-donations-dialog.blp000066400000000000000000000062431522167256300225700ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzDonationsDialog: Adw.Dialog { width-request: 450; follows-content-size: true; child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: ScrolledWindow { hscrollbar-policy: never; vscrollbar-policy: automatic; propagate-natural-height: true; min-content-height: 500; child: Box { orientation: vertical; Box { orientation: vertical; margin-start: 40; margin-end: 40; margin-top: 20; margin-bottom: 20; Label title { styles [ "title-1", ] wrap: true; justify: center; margin-bottom: 5; } Label subtitle { styles [ "dimmed", ] wrap: true; justify: center; margin-bottom: 15; } $BzAppstreamDescriptionRender { vexpand: true; appstream-description: bind template.release-notes; } Button release_button { styles [ "pill", ] margin-top: 15; margin-start: 25; margin-end: 20; margin-bottom: 15; halign: center; has-tooltip: true; clicked => $release_page_clicked(template); child: Box { orientation: horizontal; spacing: 10; Label { label: _("Full Release Notes"); wrap: true; wrap-mode: word_char; justify: right; } Image { icon-name: "external-link-symbolic"; } }; } } Adw.Bin { styles [ "bz-donations-dialog", ] child: Box { orientation: vertical; margin-start: 25; margin-end: 25; margin-top: 20; margin-bottom: 20; Label { styles [ "title-1", ] margin-top: 10; margin-bottom: 20; halign: center; wrap: true; justify: center; label: _("This release was made possible by users like you!"); } Label { margin-bottom: 20; wrap: true; justify: center; use-markup: true; label: _("I love making Bazaar, but I cannot do it alone. Help support further development by donating on Ko-Fi."); } Button donate_button { styles [ "pill", ] margin-start: 20; margin-end: 20; margin-bottom: 20; halign: center; has-tooltip: true; child: Adw.ButtonContent { label: _("Donate to Bazaar"); icon-name: "heart-filled-symbolic"; }; clicked => $donate_clicked(template); } }; } }; }; }; } bazaar-org-bazaar-b6e9a65/src/bz-donations-dialog.c000066400000000000000000000216011522167256300222300ustar00rootroot00000000000000/* bz-donations-dialog.c * * Copyright 2026 Eva M * * 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 */ #include "config.h" #include #include #include "bz-appstream-description-render.h" #include "bz-donations-dialog.h" #include "bz-template-callbacks.h" struct _BzDonationsDialog { AdwDialog parent_instance; char *release_notes; char *release_url; AdwBreakpoint *breakpoint; /* Template widgets */ GtkLabel *title; GtkLabel *subtitle; GtkButton *release_button; GtkButton *donate_button; }; G_DEFINE_FINAL_TYPE (BzDonationsDialog, bz_donations_dialog, ADW_TYPE_DIALOG); enum { PROP_0, PROP_RELEASE_NOTES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static const char *bz_donations_dialog_get_release_notes (BzDonationsDialog *self); static void bz_donations_dialog_dispose (GObject *object) { BzDonationsDialog *self = BZ_DONATIONS_DIALOG (object); g_clear_pointer (&self->release_notes, g_free); g_clear_pointer (&self->release_url, g_free); g_clear_object (&self->breakpoint); G_OBJECT_CLASS (bz_donations_dialog_parent_class)->dispose (object); } static void bz_donations_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDonationsDialog *self = BZ_DONATIONS_DIALOG (object); switch (prop_id) { case PROP_RELEASE_NOTES: g_value_set_string (value, bz_donations_dialog_get_release_notes (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void donate_clicked (BzDonationsDialog *self, GtkButton *button) { g_app_info_launch_default_for_uri ( DONATE_LINK, NULL, NULL); } static void release_page_clicked (BzDonationsDialog *self, GtkButton *button) { if (self->release_url != NULL) g_app_info_launch_default_for_uri (self->release_url, NULL, NULL); } static void on_map (BzDonationsDialog *self, gpointer user_data) { GtkRoot *root = NULL; root = gtk_widget_get_root (GTK_WIDGET (self)); if (root == NULL || self->breakpoint == NULL) return; adw_application_window_add_breakpoint (ADW_APPLICATION_WINDOW (root), g_object_ref (self->breakpoint)); } static void bz_donations_dialog_class_init (BzDonationsDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->get_property = bz_donations_dialog_get_property; object_class->dispose = bz_donations_dialog_dispose; props[PROP_RELEASE_NOTES] = g_param_spec_string ( "release-notes", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-donations-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzDonationsDialog, title); gtk_widget_class_bind_template_child (widget_class, BzDonationsDialog, subtitle); gtk_widget_class_bind_template_child (widget_class, BzDonationsDialog, release_button); gtk_widget_class_bind_template_child (widget_class, BzDonationsDialog, donate_button); gtk_widget_class_bind_template_callback (widget_class, donate_clicked); gtk_widget_class_bind_template_callback (widget_class, release_page_clicked); } static void bz_donations_dialog_init (BzDonationsDialog *self) { g_autoptr (GBytes) release_notes_bytes = NULL; g_autoptr (GError) error = NULL; g_autoptr (XbBuilderSource) source = NULL; g_autoptr (XbBuilder) builder = NULL; g_autoptr (XbSilo) silo = NULL; g_autoptr (XbNode) release_node = NULL; g_autoptr (XbNode) url_node = NULL; g_autoptr (XbNode) description_node = NULL; const char *version = NULL; const char *date = NULL; const char *url = NULL; AdwBreakpointCondition *condition = NULL; gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_set_tooltip_text (GTK_WIDGET (self->release_button), RELEASE_PAGE); gtk_widget_set_tooltip_text (GTK_WIDGET (self->donate_button), DONATE_LINK); condition = adw_breakpoint_condition_new_length ( ADW_BREAKPOINT_CONDITION_MAX_WIDTH, 500, ADW_LENGTH_UNIT_PX); self->breakpoint = adw_breakpoint_new (condition); adw_breakpoint_add_setter (self->breakpoint, G_OBJECT (self), "width-request", &(GValue) { G_TYPE_INT, { { .v_int = 350 } } }); g_signal_connect (self, "map", G_CALLBACK (on_map), NULL); release_notes_bytes = g_resources_lookup_data ( "/io/github/kolunmi/Bazaar/release-notes.xml", G_RESOURCE_LOOKUP_FLAGS_NONE, &error); if (release_notes_bytes == NULL) { g_warning ("Failed to load release notes: %s", error->message); return; } source = xb_builder_source_new (); if (!xb_builder_source_load_bytes (source, release_notes_bytes, XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT, &error)) { g_warning ("Failed to load release notes into xmlb: %s", error->message); return; } builder = xb_builder_new (); xb_builder_import_source (builder, source); silo = xb_builder_compile (builder, XB_BUILDER_COMPILE_FLAG_NONE, NULL, &error); if (silo == NULL) { g_warning ("Failed to compile release notes silo: %s", error->message); return; } release_node = xb_silo_query_first (silo, "release", &error); if (release_node == NULL) { g_warning ("Failed to find release node: %s", error != NULL ? error->message : "no error"); g_clear_error (&error); return; } version = xb_node_get_attr (release_node, "version"); date = xb_node_get_attr (release_node, "date"); if (version != NULL) { g_autofree char *title_str = NULL; /* Translators: the %s format specifier will be something along the lines of "0.7.6" etc */ title_str = g_strdup_printf (_ ("What's New in %s?"), version); gtk_label_set_label (self->title, title_str); } if (date != NULL) { g_autofree char *date_full = NULL; g_autoptr (GDateTime) dt = NULL; g_autofree char *subtitle_str = NULL; date_full = g_strdup_printf ("%sT00:00:00Z", date); dt = g_date_time_new_from_iso8601 (date_full, NULL); if (dt != NULL) { /* Translators: this is a release date label, like "Released February 9, 2026" */ subtitle_str = g_date_time_format (dt, _ ("Released %B %-e, %Y")); if (subtitle_str != NULL) gtk_label_set_label (self->subtitle, subtitle_str); } } url_node = xb_silo_query_first (silo, "release/url[@type='details']", &error); if (url_node != NULL) { url = xb_node_get_text (url_node); if (url != NULL) self->release_url = g_strdup (url); } else g_clear_error (&error); description_node = xb_silo_query_first (silo, "release/description", &error); if (description_node != NULL) { self->release_notes = xb_node_export (description_node, XB_NODE_EXPORT_FLAG_INCLUDE_SIBLINGS, &error); if (self->release_notes == NULL) { g_warning ("Failed to export description node: %s", error->message); g_clear_error (&error); } } else { g_warning ("Failed to find description node: %s", error != NULL ? error->message : "no error"); g_clear_error (&error); } if (self->release_notes != NULL) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RELEASE_NOTES]); } AdwDialog * bz_donations_dialog_new (void) { return g_object_new (BZ_TYPE_DONATIONS_DIALOG, NULL); } static const char * bz_donations_dialog_get_release_notes (BzDonationsDialog *self) { g_return_val_if_fail (BZ_IS_DONATIONS_DIALOG (self), NULL); return self->release_notes; } /* End of bz-donations-dialog.c */ bazaar-org-bazaar-b6e9a65/src/bz-donations-dialog.h000066400000000000000000000021021522167256300222300ustar00rootroot00000000000000/* bz-donations-dialog.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_DONATIONS_DIALOG (bz_donations_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzDonationsDialog, bz_donations_dialog, BZ, DONATIONS_DIALOG, AdwDialog) AdwDialog * bz_donations_dialog_new (void); G_END_DECLS /* End of bz-donations-dialog.h */ bazaar-org-bazaar-b6e9a65/src/bz-download-worker.c000066400000000000000000000407311522167256300221200ustar00rootroot00000000000000/* bz-download-worker.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include "bz-download-worker.h" #include "bz-env.h" #include "bz-util.h" struct _BzDownloadWorker { GObject parent_instance; char *name; GSubprocess *subprocess; GHashTable *waiting; GMutex read_mutex; DexFuture *task; BzGuard *write_gate; GMutex write_mutex; }; static void initable_iface_init (GInitableIface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzDownloadWorker, bz_download_worker, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)); enum { PROP_0, PROP_NAME, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * monitor_worker_fiber (GWeakRef *wr); BZ_DEFINE_DATA ( invoke_worker, InvokeWorker, { GWeakRef *self; DexPromise *promise; GFile *src; GFile *dest; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (promise, dex_unref); BZ_RELEASE_DATA (src, g_object_unref); BZ_RELEASE_DATA (dest, g_object_unref)); static DexFuture * invoke_worker_fiber (InvokeWorkerData *data); static void terminate (BzDownloadWorker *self); static void plumb_data_input_stream_read_line_async (GDataInputStream *stream, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); static char * plumb_data_input_stream_read_line_finish (GDataInputStream *stream, GAsyncResult *result, gpointer user_data); static GMutex default_worker_mutex = { 0 }; static GPtrArray *default_workers = NULL; static guint next_default_worker = 0; static void bz_download_worker_dispose (GObject *object) { BzDownloadWorker *self = BZ_DOWNLOAD_WORKER (object); terminate (self); dex_clear (&self->task); g_clear_object (&self->subprocess); g_mutex_clear (&self->write_mutex); bz_clear_guard (&self->write_gate); g_mutex_clear (&self->read_mutex); g_clear_pointer (&self->waiting, g_hash_table_unref); g_clear_pointer (&self->name, g_free); G_OBJECT_CLASS (bz_download_worker_parent_class)->dispose (object); } static void bz_download_worker_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDownloadWorker *self = BZ_DOWNLOAD_WORKER (object); switch (prop_id) { case PROP_NAME: g_value_set_string (value, bz_download_worker_get_name (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_download_worker_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzDownloadWorker *self = BZ_DOWNLOAD_WORKER (object); switch (prop_id) { case PROP_NAME: bz_download_worker_set_name (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_download_worker_class_init (BzDownloadWorkerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_download_worker_set_property; object_class->get_property = bz_download_worker_get_property; object_class->dispose = bz_download_worker_dispose; props[PROP_NAME] = g_param_spec_string ( "name", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_download_worker_init (BzDownloadWorker *self) { g_mutex_init (&self->read_mutex); g_mutex_init (&self->write_mutex); self->waiting = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, dex_unref); } static gboolean bz_download_worker_initable_init (GInitable *initable, GCancellable *cancellable, GError **error) { BzDownloadWorker *self = BZ_DOWNLOAD_WORKER (initable); self->subprocess = g_subprocess_new ( G_SUBPROCESS_FLAGS_STDIN_PIPE | G_SUBPROCESS_FLAGS_STDOUT_PIPE, error, DL_WORKER_BIN_NAME, NULL); if (self->subprocess == NULL) return FALSE; self->task = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) monitor_worker_fiber, bz_track_weak (self), bz_weak_release); return TRUE; } static void initable_iface_init (GInitableIface *iface) { iface->init = bz_download_worker_initable_init; } BzDownloadWorker * bz_download_worker_new (const char *name, GError **error) { return g_initable_new ( BZ_TYPE_DOWNLOAD_WORKER, NULL, error, "name", name, NULL); } const char * bz_download_worker_get_name (BzDownloadWorker *self) { g_return_val_if_fail (BZ_IS_DOWNLOAD_WORKER (self), NULL); return self->name; } void bz_download_worker_set_name (BzDownloadWorker *self, const char *name) { g_return_if_fail (BZ_IS_DOWNLOAD_WORKER (self)); g_clear_pointer (&self->name, g_free); if (name != NULL) self->name = g_strdup (name); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]); } DexFuture * bz_download_worker_invoke (BzDownloadWorker *self, GFile *src, GFile *dest) { g_autoptr (DexPromise) promise = NULL; g_autoptr (InvokeWorkerData) data = NULL; dex_return_error_if_fail (BZ_IS_DOWNLOAD_WORKER (self)); dex_return_error_if_fail (G_IS_FILE (src)); dex_return_error_if_fail (G_IS_FILE (dest)); promise = dex_promise_new (); data = invoke_worker_data_new (); data->self = bz_track_weak (self); data->promise = dex_ref (promise); data->src = g_object_ref (src); data->dest = g_object_ref (dest); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) invoke_worker_fiber, invoke_worker_data_ref (data), invoke_worker_data_unref)); return DEX_FUTURE (g_steal_pointer (&promise)); } BzDownloadWorker * bz_download_worker_get_default (void) { g_autoptr (GMutexLocker) locker = NULL; BzDownloadWorker *ret = NULL; locker = g_mutex_locker_new (&default_worker_mutex); if (default_workers == NULL) { default_workers = g_ptr_array_new_with_free_func (g_object_unref); for (guint i = 0; i < bz_get_n_download_workers (); i++) { g_autoptr (GError) local_error = NULL; g_autoptr (BzDownloadWorker) worker = NULL; worker = bz_download_worker_new ("default", &local_error); if (worker == NULL) g_warning ("FATAL!!! The default download worker could not be spawned: %s", local_error->message); g_assert (worker != NULL); g_ptr_array_add (default_workers, g_steal_pointer (&worker)); } } /* Check if any of the subprocesses need to be recreated */ for (guint i = 0; i < default_workers->len; i++) { BzDownloadWorker **loc = NULL; loc = (BzDownloadWorker **) &g_ptr_array_index (default_workers, i); if (g_subprocess_get_identifier ((*loc)->subprocess) == NULL) { g_autoptr (GError) local_error = NULL; g_autoptr (BzDownloadWorker) worker = NULL; g_clear_object (loc); worker = bz_download_worker_new ("default", &local_error); if (worker == NULL) g_warning ("FATAL!!! The default download worker could not be spawned: %s", local_error->message); g_assert (worker != NULL); *loc = g_steal_pointer (&worker); } } ret = g_ptr_array_index (default_workers, next_default_worker); next_default_worker = (next_default_worker + 1) % default_workers->len; return ret; } void bz_reap_default_download_workers (void) { g_autoptr (GMutexLocker) locker = NULL; locker = g_mutex_locker_new (&default_worker_mutex); if (default_workers == NULL) return; for (guint i = 0; i < default_workers->len; i++) { BzDownloadWorker *worker = NULL; worker = g_ptr_array_index (default_workers, i); g_subprocess_force_exit (worker->subprocess); } g_clear_pointer (&default_workers, g_ptr_array_unref); next_default_worker = 0; } static DexFuture * monitor_worker_fiber (GWeakRef *wr) { g_autoptr (BzDownloadWorker) self = NULL; g_autoptr (GInputStream) input_stream = NULL; g_autoptr (GDataInputStream) subprocess_stdout = NULL; bz_weak_get_or_return_reject (self, wr); input_stream = g_object_ref (g_subprocess_get_stdout_pipe (self->subprocess)); subprocess_stdout = g_data_input_stream_new (g_object_ref (input_stream)); g_clear_object (&self); for (;;) { g_autoptr (GError) local_error = NULL; g_autofree char *line = NULL; line = dex_await_string ( dex_async_pair_new ( subprocess_stdout, &DEX_ASYNC_PAIR_INFO_STRING ( plumb_data_input_stream_read_line_async, plumb_data_input_stream_read_line_finish)), &local_error); if (line == NULL) { if (local_error != NULL) g_warning ("Could not read stdout from download worker subprocess: %s", local_error->message); goto err; } do { g_autoptr (GVariant) variant = NULL; g_autofree char *dest_path = NULL; gboolean success = FALSE; DexPromise *promise = NULL; if (line == NULL) { line = g_data_input_stream_read_line_utf8 (subprocess_stdout, NULL, NULL, &local_error); if (line == NULL) { if (local_error != NULL) g_warning ("Could not read stdout from download worker subprocess: %s", local_error->message); goto err; } } variant = g_variant_parse (G_VARIANT_TYPE ("(sb)"), line, NULL, NULL, &local_error); if (variant == NULL) { g_warning ("Could not interpret stdout from download worker subprocess: %s", local_error->message); goto err; } g_variant_get (variant, "(sb)", &dest_path, &success); bz_weak_get_or_return_reject (self, wr); g_mutex_lock (&self->read_mutex); promise = g_hash_table_lookup (self->waiting, dest_path); if (promise != NULL) { if (success) dex_promise_resolve_boolean (promise, TRUE); else dex_promise_reject ( promise, g_error_new (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "The subprocess reported an error downloading '%s'", dest_path)); promise = NULL; g_hash_table_remove (self->waiting, dest_path); } g_mutex_unlock (&self->read_mutex); g_clear_object (&self); g_clear_pointer (&line, g_free); } while (g_input_stream_has_pending (input_stream)); } return dex_future_new_true (); err: bz_weak_get_or_return_reject (self, wr); /* give up on this subprocess and wait to be disposed */ g_mutex_lock (&self->read_mutex); terminate (self); g_mutex_unlock (&self->read_mutex); return dex_future_new_false (); } static DexFuture * invoke_worker_fiber (InvokeWorkerData *data) { DexPromise *promise = data->promise; GFile *src = data->src; GFile *dest = data->dest; g_autoptr (BzDownloadWorker) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (BzGuard) guard = NULL; g_autofree char *src_uri = NULL; g_autofree char *dest_path = NULL; DexPromise *existing = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GString) output = NULL; g_autoptr (GOutputStream) stdin_stream = NULL; gint64 bytes_written = -1; src_uri = g_file_get_uri (src); dest_path = g_file_get_path (dest); bz_weak_get_or_return_reject (self, data->self); g_mutex_lock (&self->read_mutex); existing = g_hash_table_lookup (self->waiting, dest_path); if (existing != NULL) { dex_promise_reject ( existing, g_error_new (G_IO_ERROR, G_IO_ERROR_CANCELLED, "The operation was replaced")); existing = NULL; } g_hash_table_replace (self->waiting, g_strdup (dest_path), dex_ref (promise)); g_mutex_unlock (&self->read_mutex); variant = g_variant_new ("(ss)", src_uri, dest_path); output = g_string_new (NULL); output = g_variant_print_string (variant, g_steal_pointer (&output), TRUE); g_string_append_c (output, '\n'); stdin_stream = g_object_ref (g_subprocess_get_stdin_pipe (self->subprocess)); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->write_mutex, &self->write_gate); g_clear_object (&self); bytes_written = dex_await_int64 ( dex_future_first ( dex_output_stream_write ( stdin_stream, output->str, output->len, G_PRIORITY_DEFAULT_IDLE), dex_ref (promise), NULL), &local_error); bz_clear_guard (&guard); /* Check if we've been cancelled */ if (!dex_future_is_pending (DEX_FUTURE (promise))) return dex_future_new_false (); if (bytes_written < 0) { bz_weak_get_or_return_reject (self, data->self); g_mutex_lock (&self->read_mutex); g_hash_table_remove (self->waiting, dest_path); dex_promise_reject (promise, g_steal_pointer (&local_error)); g_mutex_unlock (&self->read_mutex); g_clear_object (&self); } return dex_future_new_true (); } static void terminate (BzDownloadWorker *self) { GHashTableIter waiting_iter = { 0 }; g_hash_table_iter_init (&waiting_iter, self->waiting); for (;;) { g_autofree char *dest_path = NULL; g_autoptr (DexPromise) promise = NULL; if (!g_hash_table_iter_next ( &waiting_iter, (gpointer *) &dest_path, (gpointer *) &promise)) break; g_hash_table_iter_steal (&waiting_iter); dex_promise_reject ( promise, g_error_new (G_IO_ERROR, G_IO_ERROR_CANCELLED, "The subprocess was terminated")); } } static void plumb_data_input_stream_read_line_async (GDataInputStream *stream, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_data_input_stream_read_line_async ( stream, G_PRIORITY_DEFAULT_IDLE, cancellable, callback, user_data); } static char * plumb_data_input_stream_read_line_finish (GDataInputStream *stream, GAsyncResult *result, gpointer user_data) { return g_data_input_stream_read_line_finish_utf8 ( stream, result, NULL, user_data); } /* End of bz-download-worker.c */ bazaar-org-bazaar-b6e9a65/src/bz-download-worker.h000066400000000000000000000030461522167256300221230ustar00rootroot00000000000000/* bz-download-worker.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_DOWNLOAD_WORKER (bz_download_worker_get_type ()) G_DECLARE_FINAL_TYPE (BzDownloadWorker, bz_download_worker, BZ, DOWNLOAD_WORKER, GObject) BzDownloadWorker * bz_download_worker_new (const char *name, GError **error); const char * bz_download_worker_get_name (BzDownloadWorker *self); void bz_download_worker_set_name (BzDownloadWorker *self, const char *name); DexFuture * bz_download_worker_invoke (BzDownloadWorker *self, GFile *src, GFile *dest); BzDownloadWorker * bz_download_worker_get_default (void); void bz_reap_default_download_workers (void); G_END_DECLS /* End of bz-download-worker.h */ bazaar-org-bazaar-b6e9a65/src/bz-dynamic-list-view.c000066400000000000000000000664311522167256300223540ustar00rootroot00000000000000/* bz-dynamic-list-view.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-dynamic-list-view.h" #include "bz-marshalers.h" G_DEFINE_ENUM_TYPE ( BzDynamicListViewKind, bz_dynamic_list_view_kind, G_DEFINE_ENUM_VALUE (BZ_DYNAMIC_LIST_VIEW_KIND_HBOX, "h-box"), G_DEFINE_ENUM_VALUE (BZ_DYNAMIC_LIST_VIEW_KIND_VBOX, "v-box"), G_DEFINE_ENUM_VALUE (BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX, "list-box"), G_DEFINE_ENUM_VALUE (BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX, "flow-box"), G_DEFINE_ENUM_VALUE (BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL, "carousel")) struct _BzDynamicListView { AdwBin parent_instance; GListModel *model; gboolean scroll; BzDynamicListViewKind noscroll_kind; GType child_type; char *child_prop; char *object_prop; guint max_children_per_line; guint row_spacing; guint column_spacing; char *child_type_string; GtkScrolledWindow *scrolled_window; GPtrArray *box_children; }; G_DEFINE_FINAL_TYPE (BzDynamicListView, bz_dynamic_list_view, ADW_TYPE_BIN); enum { PROP_0, PROP_MODEL, PROP_SCROLL, PROP_NOSCROLL_KIND, PROP_CHILD_TYPE, PROP_CHILD_PROP, PROP_OBJECT_PROP, PROP_MAX_CHILDREN_PER_LINE, PROP_VADJUSTMENT, PROP_ROW_SPACING, PROP_COLUMN_SPACING, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_BIND_WIDGET, SIGNAL_UNBIND_WIDGET, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void refresh (BzDynamicListView *self); static void list_item_factory_setup (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory); static void list_item_factory_teardown (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory); static void list_item_factory_bind (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory); static void list_item_factory_unbind (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory); static GtkWidget * create_child_widget (GObject *object, BzDynamicListView *self); static void items_changed (GListModel *model, guint position, guint removed, guint added, BzDynamicListView *self); static void bz_dynamic_list_view_dispose (GObject *object) { BzDynamicListView *self = BZ_DYNAMIC_LIST_VIEW (object); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_clear_object (&self->model); g_clear_pointer (&self->child_prop, g_free); g_clear_pointer (&self->object_prop, g_free); g_clear_pointer (&self->child_type_string, g_free); g_clear_pointer (&self->box_children, g_ptr_array_unref); G_OBJECT_CLASS (bz_dynamic_list_view_parent_class)->dispose (object); } static void bz_dynamic_list_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzDynamicListView *self = BZ_DYNAMIC_LIST_VIEW (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_dynamic_list_view_get_model (self)); break; case PROP_SCROLL: g_value_set_boolean (value, bz_dynamic_list_view_get_scroll (self)); break; case PROP_NOSCROLL_KIND: g_value_set_enum (value, bz_dynamic_list_view_get_noscroll_kind (self)); break; case PROP_CHILD_TYPE: g_value_set_string (value, bz_dynamic_list_view_get_child_type (self)); break; case PROP_CHILD_PROP: g_value_set_string (value, bz_dynamic_list_view_get_child_prop (self)); break; case PROP_OBJECT_PROP: g_value_set_string (value, bz_dynamic_list_view_get_object_prop (self)); break; case PROP_MAX_CHILDREN_PER_LINE: g_value_set_uint (value, bz_dynamic_list_view_get_max_children_per_line (self)); break; case PROP_VADJUSTMENT: g_value_set_object (value, bz_dynamic_list_view_get_vadjustment (self)); break; case PROP_ROW_SPACING: g_value_set_uint (value, bz_dynamic_list_view_get_row_spacing (self)); break; case PROP_COLUMN_SPACING: g_value_set_uint (value, bz_dynamic_list_view_get_column_spacing (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_dynamic_list_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzDynamicListView *self = BZ_DYNAMIC_LIST_VIEW (object); switch (prop_id) { case PROP_MODEL: bz_dynamic_list_view_set_model (self, g_value_get_object (value)); break; case PROP_SCROLL: bz_dynamic_list_view_set_scroll (self, g_value_get_boolean (value)); break; case PROP_NOSCROLL_KIND: bz_dynamic_list_view_set_noscroll_kind (self, g_value_get_enum (value)); break; case PROP_CHILD_TYPE: bz_dynamic_list_view_set_child_type (self, g_value_get_string (value)); break; case PROP_CHILD_PROP: bz_dynamic_list_view_set_child_prop (self, g_value_get_string (value)); break; case PROP_OBJECT_PROP: bz_dynamic_list_view_set_object_prop (self, g_value_get_string (value)); break; case PROP_MAX_CHILDREN_PER_LINE: bz_dynamic_list_view_set_max_children_per_line (self, g_value_get_uint (value)); break; case PROP_ROW_SPACING: bz_dynamic_list_view_set_row_spacing (self, g_value_get_uint (value)); break; case PROP_COLUMN_SPACING: bz_dynamic_list_view_set_column_spacing (self, g_value_get_uint (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_dynamic_list_view_class_init (BzDynamicListViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_dynamic_list_view_set_property; object_class->get_property = bz_dynamic_list_view_get_property; object_class->dispose = bz_dynamic_list_view_dispose; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_SCROLL] = g_param_spec_boolean ( "scroll", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_NOSCROLL_KIND] = g_param_spec_enum ( "noscroll-kind", NULL, NULL, BZ_TYPE_DYNAMIC_LIST_VIEW_KIND, BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MAX_CHILDREN_PER_LINE] = g_param_spec_uint ( "max-children-per-line", NULL, NULL, 1, G_MAXUINT, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ROW_SPACING] = g_param_spec_uint ( "row-spacing", NULL, NULL, 0, G_MAXUINT, 11, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_COLUMN_SPACING] = g_param_spec_uint ( "column-spacing", NULL, NULL, 0, G_MAXUINT, 11, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CHILD_TYPE] = g_param_spec_string ( "child-type", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CHILD_PROP] = g_param_spec_string ( "child-prop", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_OBJECT_PROP] = g_param_spec_string ( "object-prop", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_VADJUSTMENT] = g_param_spec_object ( "vadjustment", NULL, NULL, GTK_TYPE_ADJUSTMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_BIND_WIDGET] = g_signal_new ( "bind-widget", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, bz_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 1, GTK_TYPE_WIDGET); g_signal_set_va_marshaller ( signals[SIGNAL_BIND_WIDGET], G_TYPE_FROM_CLASS (klass), bz_marshal_VOID__OBJECT_OBJECTv); signals[SIGNAL_UNBIND_WIDGET] = g_signal_new ( "unbind-widget", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, bz_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 1, GTK_TYPE_WIDGET); g_signal_set_va_marshaller ( signals[SIGNAL_UNBIND_WIDGET], G_TYPE_FROM_CLASS (klass), bz_marshal_VOID__OBJECT_OBJECTv); } static void bz_dynamic_list_view_init (BzDynamicListView *self) { self->child_type = G_TYPE_INVALID; self->noscroll_kind = BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX; self->max_children_per_line = 4; self->row_spacing = 11; self->column_spacing = 11; self->box_children = g_ptr_array_new (); } BzDynamicListView * bz_dynamic_list_view_new (void) { return g_object_new (BZ_TYPE_DYNAMIC_LIST_VIEW, NULL); } GListModel * bz_dynamic_list_view_get_model (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), NULL); return self->model; } gboolean bz_dynamic_list_view_get_scroll (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), FALSE); return self->scroll; } BzDynamicListViewKind bz_dynamic_list_view_get_noscroll_kind (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), FALSE); return self->noscroll_kind; } const char * bz_dynamic_list_view_get_child_type (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), NULL); return self->child_type_string; } const char * bz_dynamic_list_view_get_child_prop (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), NULL); return self->child_prop; } const char * bz_dynamic_list_view_get_object_prop (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), NULL); return self->object_prop; } guint bz_dynamic_list_view_get_max_children_per_line (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), 4); return self->max_children_per_line; } GtkAdjustment * bz_dynamic_list_view_get_vadjustment (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), NULL); if (self->scrolled_window == NULL) return NULL; return gtk_scrolled_window_get_vadjustment (self->scrolled_window); } void bz_dynamic_list_view_set_model (BzDynamicListView *self, GListModel *model) { g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_clear_object (&self->model); if (model != NULL) self->model = g_object_ref (model); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); } void bz_dynamic_list_view_set_scroll (BzDynamicListView *self, gboolean scroll) { g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); self->scroll = scroll; refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SCROLL]); } void bz_dynamic_list_view_set_noscroll_kind (BzDynamicListView *self, BzDynamicListViewKind noscroll_kind) { g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); g_return_if_fail (noscroll_kind >= 0 && noscroll_kind < BZ_DYNAMIC_LIST_VIEW_N_KINDS); self->noscroll_kind = noscroll_kind; refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NOSCROLL_KIND]); } void bz_dynamic_list_view_set_child_type (BzDynamicListView *self, const char *child_type) { GType type = G_TYPE_INVALID; g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); if (child_type != NULL) { type = g_type_from_name (child_type); g_return_if_fail (g_type_is_a (type, GTK_TYPE_WIDGET)); } g_clear_pointer (&self->child_type_string, g_free); self->child_type = type; if (child_type != NULL) self->child_type_string = g_strdup (child_type); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CHILD_TYPE]); } void bz_dynamic_list_view_set_child_prop (BzDynamicListView *self, const char *child_prop) { g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); g_clear_pointer (&self->child_prop, g_free); if (child_prop != NULL) self->child_prop = g_strdup (child_prop); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CHILD_PROP]); } void bz_dynamic_list_view_set_object_prop (BzDynamicListView *self, const char *object_prop) { g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); g_clear_pointer (&self->object_prop, g_free); if (object_prop != NULL) self->object_prop = g_strdup (object_prop); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_OBJECT_PROP]); } void bz_dynamic_list_view_set_max_children_per_line (BzDynamicListView *self, guint max_children) { GtkWidget *child; g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); g_return_if_fail (max_children > 0); self->max_children_per_line = max_children; child = adw_bin_get_child (ADW_BIN (self)); if (child != NULL && self->noscroll_kind == BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX && !self->scroll) { gtk_flow_box_set_max_children_per_line (GTK_FLOW_BOX (child), max_children); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MAX_CHILDREN_PER_LINE]); } guint bz_dynamic_list_view_get_row_spacing (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), 5); return self->row_spacing; } guint bz_dynamic_list_view_get_column_spacing (BzDynamicListView *self) { g_return_val_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self), 5); return self->column_spacing; } void bz_dynamic_list_view_set_row_spacing (BzDynamicListView *self, guint row_spacing) { GtkWidget *child; g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); self->row_spacing = row_spacing; child = adw_bin_get_child (ADW_BIN (self)); if (child != NULL && self->noscroll_kind == BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX && !self->scroll) { gtk_flow_box_set_row_spacing (GTK_FLOW_BOX (child), row_spacing); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ROW_SPACING]); } void bz_dynamic_list_view_set_column_spacing (BzDynamicListView *self, guint column_spacing) { GtkWidget *child; g_return_if_fail (BZ_IS_DYNAMIC_LIST_VIEW (self)); self->column_spacing = column_spacing; child = adw_bin_get_child (ADW_BIN (self)); if (child != NULL && self->noscroll_kind == BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX && !self->scroll) { gtk_flow_box_set_column_spacing (GTK_FLOW_BOX (child), column_spacing); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COLUMN_SPACING]); } static void refresh (BzDynamicListView *self) { if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); self->scrolled_window = NULL; g_ptr_array_set_size (self->box_children, 0); adw_bin_set_child (ADW_BIN (self), NULL); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VADJUSTMENT]); if (self->model == NULL || self->child_prop == NULL || self->child_type == G_TYPE_INVALID) return; if (self->scroll) { GtkWidget *window = NULL; GtkNoSelection *selection = NULL; GtkListItemFactory *factory = NULL; GtkWidget *view = NULL; window = gtk_scrolled_window_new (); selection = gtk_no_selection_new (g_object_ref (self->model)); factory = gtk_signal_list_item_factory_new (); view = gtk_list_view_new (GTK_SELECTION_MODEL (selection), factory); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_add_css_class (view, "navigation-sidebar"); gtk_list_view_set_single_click_activate (GTK_LIST_VIEW (view), TRUE); g_signal_connect_swapped (factory, "setup", G_CALLBACK (list_item_factory_setup), self); g_signal_connect_swapped (factory, "teardown", G_CALLBACK (list_item_factory_teardown), self); g_signal_connect_swapped (factory, "bind", G_CALLBACK (list_item_factory_bind), self); g_signal_connect_swapped (factory, "unbind", G_CALLBACK (list_item_factory_unbind), self); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (window), view); self->scrolled_window = GTK_SCROLLED_WINDOW (window); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VADJUSTMENT]); adw_bin_set_child (ADW_BIN (self), window); } else { switch (self->noscroll_kind) { case BZ_DYNAMIC_LIST_VIEW_KIND_HBOX: case BZ_DYNAMIC_LIST_VIEW_KIND_VBOX: { GtkWidget *widget = NULL; if (self->noscroll_kind == BZ_DYNAMIC_LIST_VIEW_KIND_VBOX) widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); else widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); g_signal_connect ( self->model, "items-changed", G_CALLBACK (items_changed), self); adw_bin_set_child (ADW_BIN (self), widget); items_changed (self->model, 0, 0, g_list_model_get_n_items (self->model), self); } break; case BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX: { GtkWidget *widget = NULL; widget = gtk_list_box_new (); gtk_list_box_set_selection_mode ( GTK_LIST_BOX (widget), GTK_SELECTION_NONE); gtk_list_box_bind_model ( GTK_LIST_BOX (widget), self->model, (GtkListBoxCreateWidgetFunc) create_child_widget, self, NULL); adw_bin_set_child (ADW_BIN (self), widget); } break; case BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX: { GtkWidget *widget = NULL; widget = gtk_flow_box_new (); gtk_flow_box_set_homogeneous (GTK_FLOW_BOX (widget), TRUE); gtk_flow_box_set_max_children_per_line (GTK_FLOW_BOX (widget), self->max_children_per_line); gtk_flow_box_set_row_spacing (GTK_FLOW_BOX (widget), self->row_spacing); gtk_flow_box_set_column_spacing (GTK_FLOW_BOX (widget), self->column_spacing); gtk_flow_box_set_selection_mode (GTK_FLOW_BOX (widget), GTK_SELECTION_NONE); gtk_flow_box_bind_model ( GTK_FLOW_BOX (widget), self->model, (GtkFlowBoxCreateWidgetFunc) create_child_widget, self, NULL); adw_bin_set_child (ADW_BIN (self), widget); } break; case BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL: { GtkWidget *widget = NULL; widget = adw_carousel_new (); adw_carousel_set_allow_scroll_wheel (ADW_CAROUSEL (widget), FALSE); g_signal_connect ( self->model, "items-changed", G_CALLBACK (items_changed), self); adw_bin_set_child (ADW_BIN (self), widget); items_changed (self->model, 0, 0, g_list_model_get_n_items (self->model), self); } break; case BZ_DYNAMIC_LIST_VIEW_N_KINDS: default: g_assert_not_reached (); } } } static void list_item_factory_setup (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory) { GtkWidget *child = NULL; child = g_object_new (self->child_type, NULL); gtk_list_item_set_child (item, child); } static void list_item_factory_teardown (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory) { gtk_list_item_set_child (item, NULL); } static void list_item_factory_bind (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory) { GObject *object = NULL; GtkWidget *child = NULL; object = gtk_list_item_get_item (item); child = gtk_list_item_get_child (item); gtk_list_item_set_focusable (item, FALSE); gtk_list_item_set_selectable (item, FALSE); gtk_list_item_set_activatable (item, FALSE); if (self->object_prop != NULL) { GBinding *binding = NULL; binding = g_object_bind_property ( object, self->object_prop, child, self->child_prop, G_BINDING_SYNC_CREATE); g_object_set_data_full ( G_OBJECT (item), "binding", binding, g_object_unref); } else g_object_set (child, self->child_prop, object, NULL); g_signal_emit (self, signals[SIGNAL_BIND_WIDGET], 0, child, object); } static void list_item_factory_unbind (BzDynamicListView *self, GtkListItem *item, GtkSignalListItemFactory *factory) { GtkWidget *child = NULL; GBinding *binding = NULL; g_autoptr (GObject) object = NULL; child = gtk_list_item_get_child (item); binding = g_object_steal_data (G_OBJECT (item), "binding"); if (binding != NULL) { object = g_binding_dup_source (binding); g_binding_unbind (binding); g_object_unref (binding); } else { g_object_get (child, self->child_prop, &object, NULL); g_object_set (child, self->child_prop, NULL, NULL); } g_signal_emit (self, signals[SIGNAL_UNBIND_WIDGET], 0, child, object); } static GtkWidget * create_child_widget (GObject *object, BzDynamicListView *self) { GtkWidget *widget = NULL; widget = g_object_new (self->child_type, NULL); if (self->object_prop != NULL) g_object_bind_property ( object, self->object_prop, widget, self->child_prop, G_BINDING_SYNC_CREATE); else g_object_set (widget, self->child_prop, object, NULL); gtk_widget_set_receives_default (widget, TRUE); g_signal_emit (self, signals[SIGNAL_BIND_WIDGET], 0, widget, object); switch (self->noscroll_kind) { case BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX: { GtkWidget *child = NULL; child = gtk_list_box_row_new (); gtk_widget_add_css_class (GTK_WIDGET (child), "disable-adw-flow-box-styling"); gtk_widget_set_focusable (GTK_WIDGET (child), FALSE); gtk_list_box_row_set_selectable (GTK_LIST_BOX_ROW (child), FALSE); gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (child), widget); return child; } case BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX: { GtkWidget *child = NULL; child = gtk_flow_box_child_new (); gtk_widget_add_css_class (GTK_WIDGET (child), "disable-adw-flow-box-styling"); gtk_widget_set_focusable (GTK_WIDGET (child), FALSE); gtk_flow_box_child_set_child (GTK_FLOW_BOX_CHILD (child), widget); return child; } case BZ_DYNAMIC_LIST_VIEW_KIND_HBOX: case BZ_DYNAMIC_LIST_VIEW_KIND_VBOX: case BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL: case BZ_DYNAMIC_LIST_VIEW_N_KINDS: default: return widget; } } static void items_changed (GListModel *model, guint position, guint removed, guint added, BzDynamicListView *self) { GtkWidget *bin_child = NULL; bin_child = adw_bin_get_child (ADW_BIN (self)); for (guint i = 0; i < removed; i++) { switch (self->noscroll_kind) { case BZ_DYNAMIC_LIST_VIEW_KIND_HBOX: case BZ_DYNAMIC_LIST_VIEW_KIND_VBOX: { GtkWidget *child = NULL; child = g_ptr_array_index (self->box_children, position); gtk_box_remove (GTK_BOX (bin_child), g_steal_pointer (&child)); g_ptr_array_remove_index (self->box_children, position); } break; case BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL: adw_carousel_remove ( ADW_CAROUSEL (bin_child), adw_carousel_get_nth_page (ADW_CAROUSEL (bin_child), position)); break; case BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX: case BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX: case BZ_DYNAMIC_LIST_VIEW_N_KINDS: default: g_assert_not_reached (); } } for (guint i = 0; i < added; i++) { g_autoptr (GObject) object = NULL; GtkWidget *widget = NULL; object = g_list_model_get_item (model, position + i); widget = create_child_widget (object, self); switch (self->noscroll_kind) { case BZ_DYNAMIC_LIST_VIEW_KIND_HBOX: case BZ_DYNAMIC_LIST_VIEW_KIND_VBOX: { if (position + i < self->box_children->len) { GtkWidget *sibling = NULL; sibling = g_ptr_array_index (self->box_children, position + i); gtk_box_insert_child_after (GTK_BOX (bin_child), widget, sibling); } else gtk_box_append (GTK_BOX (bin_child), widget); } break; case BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL: adw_carousel_insert (ADW_CAROUSEL (bin_child), widget, position + i); break; case BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX: case BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX: case BZ_DYNAMIC_LIST_VIEW_N_KINDS: default: g_assert_not_reached (); } } } /* End of bz-dynamic-list-view.c */ bazaar-org-bazaar-b6e9a65/src/bz-dynamic-list-view.h000066400000000000000000000066741522167256300223640ustar00rootroot00000000000000/* bz-dynamic-list-view.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS typedef enum { BZ_DYNAMIC_LIST_VIEW_KIND_HBOX, BZ_DYNAMIC_LIST_VIEW_KIND_VBOX, BZ_DYNAMIC_LIST_VIEW_KIND_LIST_BOX, BZ_DYNAMIC_LIST_VIEW_KIND_FLOW_BOX, BZ_DYNAMIC_LIST_VIEW_KIND_CAROUSEL, /*< private >*/ BZ_DYNAMIC_LIST_VIEW_N_KINDS, } BzDynamicListViewKind; GType bz_dynamic_list_view_kind_get_type (void); #define BZ_TYPE_DYNAMIC_LIST_VIEW_KIND (bz_dynamic_list_view_kind_get_type ()) #define BZ_TYPE_DYNAMIC_LIST_VIEW (bz_dynamic_list_view_get_type ()) G_DECLARE_FINAL_TYPE (BzDynamicListView, bz_dynamic_list_view, BZ, DYNAMIC_LIST_VIEW, AdwBin) BzDynamicListView * bz_dynamic_list_view_new (void); GListModel * bz_dynamic_list_view_get_model (BzDynamicListView *self); gboolean bz_dynamic_list_view_get_scroll (BzDynamicListView *self); BzDynamicListViewKind bz_dynamic_list_view_get_noscroll_kind (BzDynamicListView *self); const char * bz_dynamic_list_view_get_child_type (BzDynamicListView *self); const char * bz_dynamic_list_view_get_child_prop (BzDynamicListView *self); const char * bz_dynamic_list_view_get_object_prop (BzDynamicListView *self); void bz_dynamic_list_view_set_model (BzDynamicListView *self, GListModel *model); void bz_dynamic_list_view_set_scroll (BzDynamicListView *self, gboolean scroll); void bz_dynamic_list_view_set_noscroll_kind (BzDynamicListView *self, BzDynamicListViewKind noscroll_kind); void bz_dynamic_list_view_set_child_type (BzDynamicListView *self, const char *child_type); void bz_dynamic_list_view_set_child_prop (BzDynamicListView *self, const char *child_prop); void bz_dynamic_list_view_set_object_prop (BzDynamicListView *self, const char *object_prop); guint bz_dynamic_list_view_get_max_children_per_line (BzDynamicListView *self); void bz_dynamic_list_view_set_max_children_per_line (BzDynamicListView *self, guint max_children); guint bz_dynamic_list_view_get_row_spacing (BzDynamicListView *self); void bz_dynamic_list_view_set_row_spacing (BzDynamicListView *self, guint row_spacing); guint bz_dynamic_list_view_get_column_spacing (BzDynamicListView *self); void bz_dynamic_list_view_set_column_spacing (BzDynamicListView *self, guint column_spacing); GtkAdjustment *bz_dynamic_list_view_get_vadjustment (BzDynamicListView *self); G_END_DECLS /* End of bz-dynamic-list-view.h */ bazaar-org-bazaar-b6e9a65/src/bz-entry-cache-manager.c000066400000000000000000000710661522167256300226210ustar00rootroot00000000000000/* bz-entry-cache-manager.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::ENTRY-CACHE" #define BAZAAR_MODULE "entry-cache" #define MAX_CONCURRENT_WRITES 16 #define WATCH_CLEANUP_INTERVAL_MSEC 5000 #include #include "bz-entry-cache-manager.h" #include "bz-env.h" #include "bz-flatpak-entry.h" #include "bz-io.h" #include "bz-serializable.h" #include "bz-util.h" /* clang-format off */ G_DEFINE_QUARK (bz-entry-cache-error-quark, bz_entry_cache_error); /* clang-format on */ struct _BzEntryCacheManager { GObject parent_instance; GMutex mutex; guint living_entries; DexScheduler *scheduler; guint64 memory_usage; DexPromise *init; GHashTable *alive_hash; GHashTable *writing_hash; GHashTable *reading_hash; BzGuard *ongoing_gates[MAX_CONCURRENT_WRITES]; GMutex ongoing_mutexes[MAX_CONCURRENT_WRITES]; guint ongoing_queued[MAX_CONCURRENT_WRITES]; GMutex ongoing_queueing_mutex; BzGuard *alive_gate; GMutex alive_mutex; BzGuard *reading_gate; GMutex reading_mutex; BzGuard *writing_gate; GMutex writing_mutex; DexFuture *watch_task; }; G_DEFINE_FINAL_TYPE (BzEntryCacheManager, bz_entry_cache_manager, G_TYPE_OBJECT); enum { PROP_0, PROP_LIVING_ENTRIES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * watch_init_fiber (GWeakRef *wr); static DexFuture * watch_cb (DexFuture *future, GWeakRef *wr); static DexFuture * watch_work_fiber (GWeakRef *wr); static DexFuture * notify_props_fiber (GWeakRef *wr); BZ_DEFINE_DATA ( living_entry, LivingEntry, { GWeakRef wr; BzGuard *gate; GMutex mutex; GTimer *cached; }, BZ_RELEASE_DATA (gate, bz_guard_destroy); g_mutex_clear (&self->mutex); g_weak_ref_clear (&self->wr); BZ_RELEASE_DATA (cached, g_timer_destroy)); BZ_DEFINE_DATA ( write_task, WriteTask, { GWeakRef *self; char *unique_id_checksum; BzEntry *entry; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (unique_id_checksum, g_free); BZ_RELEASE_DATA (entry, g_object_unref);) static DexFuture * write_task_fiber (WriteTaskData *data); BZ_DEFINE_DATA ( read_task, ReadTask, { GWeakRef *self; char *unique_id_checksum; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (unique_id_checksum, g_free)) static DexFuture * read_task_fiber (ReadTaskData *data); static DexFuture * enumerate_disk_fiber (GWeakRef *wr); static void bz_entry_cache_manager_dispose (GObject *object) { BzEntryCacheManager *self = BZ_ENTRY_CACHE_MANAGER (object); g_mutex_clear (&self->mutex); dex_clear (&self->scheduler); dex_clear (&self->watch_task); g_clear_pointer (&self->init, dex_unref); g_clear_pointer (&self->alive_hash, g_hash_table_unref); g_clear_pointer (&self->writing_hash, g_hash_table_unref); g_clear_pointer (&self->reading_hash, g_hash_table_unref); for (guint i = 0; i < G_N_ELEMENTS (self->ongoing_gates); i++) g_clear_pointer (&self->ongoing_gates[i], bz_guard_destroy); for (guint i = 0; i < G_N_ELEMENTS (self->ongoing_mutexes); i++) g_mutex_clear (&self->ongoing_mutexes[i]); g_mutex_clear (&self->ongoing_queueing_mutex); g_clear_pointer (&self->alive_gate, bz_guard_destroy); g_clear_pointer (&self->reading_gate, bz_guard_destroy); g_clear_pointer (&self->writing_gate, bz_guard_destroy); g_mutex_clear (&self->alive_mutex); g_mutex_clear (&self->reading_mutex); g_mutex_clear (&self->writing_mutex); G_OBJECT_CLASS (bz_entry_cache_manager_parent_class)->dispose (object); } static void bz_entry_cache_manager_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzEntryCacheManager *self = BZ_ENTRY_CACHE_MANAGER (object); switch (prop_id) { case PROP_LIVING_ENTRIES: g_value_set_uint (value, bz_entry_cache_manager_get_living_entries (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_cache_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzEntryCacheManager *self = BZ_ENTRY_CACHE_MANAGER (object); (void) self; switch (prop_id) { case PROP_LIVING_ENTRIES: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_cache_manager_class_init (BzEntryCacheManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_entry_cache_manager_set_property; object_class->get_property = bz_entry_cache_manager_get_property; object_class->dispose = bz_entry_cache_manager_dispose; props[PROP_LIVING_ENTRIES] = g_param_spec_uint ( "living-entries", NULL, NULL, 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_entry_cache_manager_init (BzEntryCacheManager *self) { g_mutex_init (&self->mutex); self->scheduler = dex_thread_pool_scheduler_new (); self->init = dex_promise_new (); self->alive_hash = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, living_entry_data_unref); self->writing_hash = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, dex_unref); self->reading_hash = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, dex_unref); for (guint i = 0; i < G_N_ELEMENTS (self->ongoing_mutexes); i++) g_mutex_init (&self->ongoing_mutexes[i]); g_mutex_init (&self->ongoing_queueing_mutex); g_mutex_init (&self->alive_mutex); g_mutex_init (&self->reading_mutex); g_mutex_init (&self->writing_mutex); self->watch_task = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) watch_init_fiber, bz_track_weak (self), bz_weak_release); } BzEntryCacheManager * bz_entry_cache_manager_new (void) { return g_object_new (BZ_TYPE_ENTRY_CACHE_MANAGER, NULL); } guint bz_entry_cache_manager_get_living_entries (BzEntryCacheManager *self) { g_autoptr (GMutexLocker) locker = NULL; g_return_val_if_fail (BZ_IS_ENTRY_CACHE_MANAGER (self), 0); locker = g_mutex_locker_new (&self->mutex); return self->living_entries; } DexFuture * bz_entry_cache_manager_add (BzEntryCacheManager *self, BzEntry *entry) { g_autoptr (WriteTaskData) data = NULL; g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (BZ_IS_ENTRY_CACHE_MANAGER (self)); dex_return_error_if_fail (BZ_IS_ENTRY (entry)); dex_return_error_if_fail (!bz_entry_is_holding (entry)); data = write_task_data_new (); data->self = bz_track_weak (self); data->unique_id_checksum = g_strdup (bz_entry_get_unique_id_checksum (entry)); data->entry = g_object_ref (entry); future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) write_task_fiber, write_task_data_ref (data), write_task_data_unref); return g_steal_pointer (&future); } DexFuture * bz_entry_cache_manager_get (BzEntryCacheManager *self, const char *unique_id) { g_autoptr (ReadTaskData) data = NULL; g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (BZ_IS_ENTRY_CACHE_MANAGER (self)); dex_return_error_if_fail (unique_id != NULL); data = read_task_data_new (); data->self = bz_track_weak (self); data->unique_id_checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, unique_id, -1); future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) read_task_fiber, read_task_data_ref (data), read_task_data_unref); return g_steal_pointer (&future); } DexFuture * bz_entry_cache_manager_get_by_checksum (BzEntryCacheManager *self, const char *unique_id_checksum) { g_autoptr (ReadTaskData) data = NULL; g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (BZ_IS_ENTRY_CACHE_MANAGER (self)); dex_return_error_if_fail (unique_id_checksum != NULL); data = read_task_data_new (); data->self = bz_track_weak (self); data->unique_id_checksum = g_strdup (unique_id_checksum); future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) read_task_fiber, read_task_data_ref (data), read_task_data_unref); return g_steal_pointer (&future); } DexFuture * bz_entry_cache_manager_enumerate_disk (BzEntryCacheManager *self) { g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (BZ_IS_ENTRY_CACHE_MANAGER (self)); future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) enumerate_disk_fiber, bz_track_weak (self), bz_weak_release); return g_steal_pointer (&future); } static DexFuture * write_task_fiber (WriteTaskData *data) { g_autoptr (BzEntryCacheManager) self = NULL; char *unique_id_checksum = data->unique_id_checksum; BzEntry *entry = data->entry; g_autoptr (GError) local_error = NULL; g_autoptr (BzGuard) slot_guard = NULL; g_autoptr (BzGuard) other_guard = NULL; g_autoptr (GMutexLocker) locker = NULL; guint slot_queued = G_MAXUINT; guint slot_index = 0; DexFuture *writing_future = NULL; g_autoptr (LivingEntryData) living = NULL; g_autoptr (DexPromise) promise = NULL; g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (GBytes) bytes = NULL; gsize bytes_size = 0; gconstpointer bytes_data = 0; g_autofree char *main_cache = NULL; g_autoptr (GFile) parent_file = NULL; g_autofree char *save_file_path = NULL; g_autoptr (GFile) save_file = NULL; gsize existing_contents_size = 0; g_autofree char *existing_contents = NULL; g_autoptr (GFileOutputStream) output = NULL; gssize bytes_written = 0; gboolean result = FALSE; g_autoptr (GError) ret_error = NULL; bz_weak_get_or_return_reject (self, data->self); if (!BZ_IS_FLATPAK_ENTRY (entry)) return dex_future_new_reject ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Entry with unique ID checksum '%s' cannot be " "cached because it is not a flatpak entry", unique_id_checksum); /* Rate limit to reduce competition for resources * when refresh triggers a flood of requests * * Here we make sure to pick the slot with the * least tasks waiting in line */ locker = g_mutex_locker_new (&self->ongoing_queueing_mutex); for (guint i = 0; i < G_N_ELEMENTS (self->ongoing_gates); i++) { if (self->ongoing_queued[i] < slot_queued) { slot_queued = self->ongoing_queued[i]; slot_index = i; } } self->ongoing_queued[slot_index]++; g_clear_pointer (&locker, g_mutex_locker_free); BZ_BEGIN_GUARD_WITH_CONTEXT (&slot_guard, &self->ongoing_mutexes[slot_index], &self->ongoing_gates[slot_index]); locker = g_mutex_locker_new (&self->ongoing_queueing_mutex); self->ongoing_queued[slot_index]--; g_clear_pointer (&locker, g_mutex_locker_free); dex_await (dex_ref (self->init), NULL); BZ_BEGIN_GUARD_WITH_CONTEXT (&other_guard, &self->writing_mutex, &self->writing_gate); { writing_future = g_hash_table_lookup (self->writing_hash, unique_id_checksum); if (writing_future != NULL) return dex_future_new_reject ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Entry with unique ID '%s' is already being cached right now", unique_id_checksum); promise = dex_promise_new (); g_hash_table_replace (self->writing_hash, g_strdup (unique_id_checksum), dex_ref (promise)); } bz_clear_guard (&other_guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&other_guard, &self->alive_mutex, &self->alive_gate); { living = g_hash_table_lookup (self->alive_hash, unique_id_checksum); if (living != NULL) living_entry_data_ref (living); else { living = living_entry_data_new (); g_weak_ref_init (&living->wr, NULL); g_mutex_init (&living->mutex); living->cached = g_timer_new (); g_hash_table_replace (self->alive_hash, g_strdup (unique_id_checksum), living_entry_data_ref (living)); } } bz_clear_guard (&other_guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&other_guard, &living->mutex, &living->gate); { builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); bz_serializable_serialize (BZ_SERIALIZABLE (entry), builder); variant = g_variant_builder_end (builder); bytes = g_variant_get_data_as_bytes (variant); bytes_data = g_bytes_get_data (bytes, &bytes_size); main_cache = bz_dup_module_dir (); parent_file = g_file_new_for_path (main_cache); result = g_file_make_directory_with_parents (parent_file, NULL, &local_error); if (!result) { if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_EXISTS)) g_clear_pointer (&local_error, g_error_free); else { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Failed to make parent directory '%s' when caching '%s': %s", main_cache, unique_id_checksum, local_error->message); goto done; } } save_file_path = g_build_filename (main_cache, unique_id_checksum, NULL); save_file = g_file_new_for_path (save_file_path); result = g_file_get_contents ( save_file_path, &existing_contents, &existing_contents_size, NULL); /* Only write if the file has definitely changed */ if (!result || existing_contents_size != bytes_size || memcmp (existing_contents, bytes_data, bytes_size) != 0) { output = g_file_replace ( save_file, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error); if (output == NULL) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Failed to open write stream when caching '%s': %s", unique_id_checksum, local_error->message); goto done; } bytes_written = g_output_stream_write_bytes (G_OUTPUT_STREAM (output), bytes, NULL, &local_error); if (bytes_written < 0) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Failed to write data to stream when caching '%s': %s", unique_id_checksum, local_error->message); goto done; } result = g_output_stream_close (G_OUTPUT_STREAM (output), NULL, &local_error); if (!result) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_CACHE_FAILED, "Failed to close stream when caching '%s': %s", unique_id_checksum, local_error->message); goto done; } } g_timer_start (living->cached); } done: bz_clear_guard (&slot_guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&other_guard, &self->writing_mutex, &self->writing_gate); { if (ret_error != NULL) dex_promise_reject (promise, g_error_copy (ret_error)); else dex_promise_resolve_boolean (promise, TRUE); g_hash_table_remove (self->writing_hash, unique_id_checksum); } bz_clear_guard (&other_guard); if (ret_error != NULL) return dex_future_new_for_error (g_steal_pointer (&ret_error)); else return dex_future_new_true (); } static DexFuture * read_task_fiber (ReadTaskData *data) { g_autoptr (BzEntryCacheManager) self = NULL; char *unique_id_checksum = data->unique_id_checksum; g_autoptr (GError) local_error = NULL; g_autoptr (BzGuard) guard = NULL; g_autoptr (GMutexLocker) locker = NULL; g_autoptr (DexFuture) writing_future = NULL; g_autoptr (LivingEntryData) living = NULL; DexFuture *reading_future = NULL; g_autoptr (DexPromise) promise = NULL; g_autofree char *main_cache = NULL; g_autofree char *path = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (BzFlatpakEntry) entry = NULL; gboolean result = FALSE; g_autoptr (GError) ret_error = NULL; bz_weak_get_or_return_reject (self, data->self); dex_await (dex_ref (self->init), NULL); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->writing_mutex, &self->writing_gate); { writing_future = g_hash_table_lookup (self->writing_hash, unique_id_checksum); if (writing_future != NULL) { dex_ref (writing_future); bz_clear_guard (&guard); dex_await (g_steal_pointer (&writing_future), NULL); } } bz_clear_guard (&guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->reading_mutex, &self->reading_gate); { reading_future = g_hash_table_lookup (self->reading_hash, unique_id_checksum); if (reading_future != NULL) return dex_ref (reading_future); promise = dex_promise_new (); g_hash_table_replace (self->reading_hash, g_strdup (unique_id_checksum), dex_ref (promise)); } bz_clear_guard (&guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->alive_mutex, &self->alive_gate); { living = g_hash_table_lookup (self->alive_hash, unique_id_checksum); if (living != NULL) { g_autoptr (BzEntry) living_entry = NULL; living_entry_data_ref (living); bz_clear_guard (&guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &living->mutex, &living->gate); living_entry = g_weak_ref_get (&living->wr); if (living_entry != NULL) { bz_clear_guard (&guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->reading_mutex, &self->reading_gate); { g_hash_table_remove (self->reading_hash, unique_id_checksum); } bz_clear_guard (&guard); dex_promise_resolve_object (promise, g_object_ref (living_entry)); return dex_future_new_for_object (living_entry); } } else { living = living_entry_data_new (); g_weak_ref_init (&living->wr, NULL); g_mutex_init (&living->mutex); living->cached = g_timer_new (); g_hash_table_replace (self->alive_hash, g_strdup (unique_id_checksum), living_entry_data_ref (living)); bz_clear_guard (&guard); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &living->mutex, &living->gate); } } /* living data was guarded */ main_cache = bz_dup_module_dir (); path = g_build_filename (main_cache, unique_id_checksum, NULL); file = g_file_new_for_path (path); bytes = g_file_load_bytes (file, NULL, NULL, &local_error); if (bytes == NULL) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_DECACHE_FAILED, "Failed to de-cache variant from file: %s", local_error->message); goto done; } variant = g_variant_new_from_bytes (G_VARIANT_TYPE_VARDICT, bytes, FALSE); if (variant == NULL) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_DECACHE_FAILED, "Failed to interpret variant from %s: %s", path, local_error->message); goto done; } entry = g_object_new (BZ_TYPE_FLATPAK_ENTRY, NULL); result = bz_serializable_deserialize (BZ_SERIALIZABLE (entry), variant, &local_error); if (!result) { ret_error = g_error_new ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_DECACHE_FAILED, "Failed to deserialize entry from %s: %s", path, local_error->message); goto done; } g_weak_ref_init (&living->wr, entry); done: BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->reading_mutex, &self->reading_gate); { if (ret_error != NULL) dex_promise_reject (promise, g_error_copy (ret_error)); else dex_promise_resolve_object (promise, g_object_ref (entry)); g_hash_table_remove (self->reading_hash, unique_id_checksum); } bz_clear_guard (&guard); if (ret_error != NULL) return dex_future_new_for_error (g_steal_pointer (&ret_error)); else return dex_future_new_for_object (entry); } static DexFuture * enumerate_disk_fiber (GWeakRef *wr) { g_autoptr (BzEntryCacheManager) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (BzGuard) guard = NULL; g_autoptr (GHashTable) set = NULL; g_autofree char *main_cache = NULL; g_autoptr (GFile) main_cache_file = NULL; g_autoptr (GFileEnumerator) enumerator = NULL; bz_weak_get_or_return_reject (self, wr); set = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->alive_mutex, &self->alive_gate); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->reading_mutex, &self->reading_gate); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard, &self->writing_mutex, &self->writing_gate); main_cache = bz_dup_module_dir (); if (!g_file_test (main_cache, G_FILE_TEST_EXISTS)) goto done; main_cache_file = g_file_new_for_path (main_cache); enumerator = g_file_enumerate_children ( main_cache_file, G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "," G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error); if (enumerator == NULL) return dex_future_new_reject ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_ENUMERATE_FAILED, "Could not initialize directory enumerator at %s: %s", main_cache, local_error->message); for (;;) { g_autoptr (GFileInfo) info = NULL; g_autoptr (GFile) child = NULL; g_autofree char *basename = NULL; info = g_file_enumerator_next_file (enumerator, NULL, &local_error); if (info == NULL) { if (local_error != NULL) return dex_future_new_reject ( BZ_ENTRY_CACHE_ERROR, BZ_ENTRY_CACHE_ERROR_ENUMERATE_FAILED, "Could not enumerate children of cache directory at %s: %s", main_cache, local_error->message); else break; } child = g_file_enumerator_get_child (enumerator, info); if (g_file_info_get_is_symlink (info) || g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR) continue; basename = g_file_get_basename (child); if (basename != NULL) g_hash_table_replace (set, g_steal_pointer (&basename), NULL); } done: return dex_future_new_take_boxed (G_TYPE_HASH_TABLE, g_steal_pointer (&set)); } static DexFuture * watch_init_fiber (GWeakRef *wr) { g_autoptr (BzEntryCacheManager) self = NULL; bz_weak_get_or_return_reject (self, wr); // bz_discard_module_dir (); dex_promise_resolve_boolean (self->init, TRUE); return dex_future_finally_loop ( dex_timeout_new_msec (WATCH_CLEANUP_INTERVAL_MSEC), (DexFutureCallback) watch_cb, bz_track_weak (self), bz_weak_release); } static DexFuture * watch_cb (DexFuture *future, GWeakRef *wr) { g_autoptr (BzEntryCacheManager) self = NULL; bz_weak_get_or_return_reject (self, wr); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) watch_work_fiber, bz_track_weak (self), bz_weak_release); } static DexFuture * watch_work_fiber (GWeakRef *wr) { g_autoptr (BzEntryCacheManager) self = NULL; g_autoptr (BzGuard) guard0 = NULL; GHashTableIter iter = { 0 }; g_autoptr (GTimer) timer = NULL; guint total = 0; guint active = 0; guint alive = 0; guint pruned = 0; bz_weak_get_or_return_reject (self, wr); timer = g_timer_new (); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard0, &self->alive_mutex, &self->alive_gate); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard0, &self->reading_mutex, &self->reading_gate); BZ_BEGIN_GUARD_WITH_CONTEXT (&guard0, &self->writing_mutex, &self->writing_gate); g_hash_table_iter_init (&iter, self->alive_hash); for (;;) { char *unique_id_checksum = NULL; LivingEntryData *living = NULL; g_autoptr (BzGuard) guard1 = NULL; g_autoptr (BzEntry) entry = NULL; if (!g_hash_table_iter_next (&iter, (gpointer *) &unique_id_checksum, (gpointer *) &living)) break; total++; if (g_hash_table_contains (self->reading_hash, unique_id_checksum) || g_hash_table_contains (self->writing_hash, unique_id_checksum)) { active++; continue; } BZ_BEGIN_GUARD_WITH_CONTEXT (&guard1, &living->mutex, &living->gate); entry = g_weak_ref_get (&living->wr); if (entry != NULL) alive++; else { bz_clear_guard (&guard1); g_hash_table_iter_remove (&iter); pruned++; } } bz_clear_guard (&guard0); #ifdef __GLIBC__ malloc_trim (0); #endif g_debug ("Sweep report: finished in %.4f seconds, including time to acquire guards\n" " Out of a total of %d entries considered:\n" " %d were skipped due to active tasks being associated with them\n" " %d application entries were otherwise kept alive\n" " %d entries were forgotten by the application and were pruned\n" " Another sweep will take place in %d msec", g_timer_elapsed (timer, NULL), total, active, alive, pruned, WATCH_CLEANUP_INTERVAL_MSEC); g_mutex_lock (&self->mutex); self->living_entries = active + alive; g_mutex_unlock (&self->mutex); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) notify_props_fiber, bz_track_weak (self), bz_weak_release)); return dex_timeout_new_msec (WATCH_CLEANUP_INTERVAL_MSEC); } static DexFuture * notify_props_fiber (GWeakRef *wr) { g_autoptr (BzEntryCacheManager) self = NULL; bz_weak_get_or_return_reject (self, wr); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LIVING_ENTRIES]); return dex_future_new_true (); } /* End of bz-entry-cache-manager.c */ bazaar-org-bazaar-b6e9a65/src/bz-entry-cache-manager.h000066400000000000000000000036501522167256300226200ustar00rootroot00000000000000/* bz-entry-cache-manager.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry.h" G_BEGIN_DECLS #define BZ_ENTRY_CACHE_ERROR (bz_entry_cache_error_quark ()) GQuark bz_entry_cache_error_quark (void); typedef enum { BZ_ENTRY_CACHE_ERROR_CACHE_FAILED = 0, BZ_ENTRY_CACHE_ERROR_DECACHE_FAILED, BZ_ENTRY_CACHE_ERROR_ENUMERATE_FAILED, } BzEntry_CacheError; #define BZ_TYPE_ENTRY_CACHE_MANAGER (bz_entry_cache_manager_get_type ()) G_DECLARE_FINAL_TYPE (BzEntryCacheManager, bz_entry_cache_manager, BZ, ENTRY_CACHE_MANAGER, GObject) BzEntryCacheManager * bz_entry_cache_manager_new (void); guint bz_entry_cache_manager_get_living_entries (BzEntryCacheManager *self); DexFuture * bz_entry_cache_manager_add (BzEntryCacheManager *self, BzEntry *entry); DexFuture * bz_entry_cache_manager_get (BzEntryCacheManager *self, const char *unique_id); DexFuture * bz_entry_cache_manager_get_by_checksum (BzEntryCacheManager *self, const char *unique_id_checksum); DexFuture * bz_entry_cache_manager_enumerate_disk (BzEntryCacheManager *self); G_END_DECLS /* End of bz-entry-cache-manager.h */ bazaar-org-bazaar-b6e9a65/src/bz-entry-group-util.c000066400000000000000000000100371522167256300222440ustar00rootroot00000000000000/* bz-entry-group-util.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include #include #include "bz-entry-group-util.h" #include "bz-error.h" BzEntry * bz_entry_group_find_entry (BzEntryGroup *group, gboolean (*test) (BzEntry *entry), GtkWidget *window, GError **error) { g_autoptr (GListModel) model = NULL; guint n_items = 0; g_autoptr (GPtrArray) candidates = NULL; g_return_val_if_fail (BZ_IS_ENTRY_GROUP (group), NULL); model = dex_await_object (bz_entry_group_dup_all_into_store (group), error); if (model == NULL) return NULL; n_items = g_list_model_get_n_items (model); candidates = g_ptr_array_new_with_free_func (g_object_unref); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntry) entry = NULL; entry = g_list_model_get_item (model, i); if (bz_entry_is_installed (entry) && (test == NULL || test (entry))) g_ptr_array_add (candidates, g_steal_pointer (&entry)); } if (candidates->len == 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, "BUG: No entry candidates satisfied this test condition"); return NULL; } else if (candidates->len == 1) return g_ptr_array_steal_index_fast (candidates, 0); else if (window != NULL) { AdwDialog *alert = NULL; g_autofree char *response = NULL; alert = adw_alert_dialog_new (NULL, NULL); adw_alert_dialog_set_prefer_wide_layout (ADW_ALERT_DIALOG (alert), TRUE); adw_alert_dialog_format_heading ( ADW_ALERT_DIALOG (alert), _ ("Choose an Installation")); adw_alert_dialog_format_body ( ADW_ALERT_DIALOG (alert), _ ("You have multiple versions of this app installed. Which " "one would you like to proceed with?")); adw_alert_dialog_add_responses ( ADW_ALERT_DIALOG (alert), "cancel", _ ("Cancel"), NULL); adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (alert), "cancel"); adw_alert_dialog_set_response_appearance ( ADW_ALERT_DIALOG (alert), "cancel", ADW_RESPONSE_DESTRUCTIVE); for (guint i = 0; i < candidates->len; i++) { BzEntry *entry = NULL; const char *unique_id = NULL; entry = g_ptr_array_index (candidates, i); unique_id = bz_entry_get_unique_id (entry); adw_alert_dialog_add_responses ( ADW_ALERT_DIALOG (alert), unique_id, unique_id, NULL); if (i == 0) adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (alert), unique_id); } adw_dialog_present (alert, GTK_WIDGET (window)); response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (alert)), NULL); if (response != NULL) { for (guint i = 0; i < candidates->len; i++) { BzEntry *entry = NULL; const char *unique_id = NULL; entry = g_ptr_array_index (candidates, i); unique_id = bz_entry_get_unique_id (entry); if (g_strcmp0 (unique_id, response) == 0) return g_object_ref (entry); } } } return NULL; } bazaar-org-bazaar-b6e9a65/src/bz-entry-group-util.h000066400000000000000000000021231522167256300222460ustar00rootroot00000000000000/* bz-entry-group-util.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-entry.h" #include G_BEGIN_DECLS BzEntry * bz_entry_group_find_entry (BzEntryGroup *group, gboolean (*test) (BzEntry *entry), GtkWidget *window, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-entry-group.c000066400000000000000000001652071522167256300213030ustar00rootroot00000000000000/* bz-entry-group.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::ENTRY-GROUP" #define BAZAAR_MODULE "entry-group" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-io.h" #include "bz-size-result.h" #include "bz-util.h" typedef enum { ENTRY_INSTALLABLE = 1 << 0, ENTRY_INSTALLABLE_AVAILABLE = 1 << 1, ENTRY_UPDATABLE = 1 << 2, ENTRY_UPDATABLE_AVAILABLE = 1 << 3, ENTRY_REMOVABLE = 1 << 4, ENTRY_REMOVABLE_AVAILABLE = 1 << 5, } EntryStateFlags; struct _BzEntryGroup { GObject parent_instance; BzApplicationMapFactory *factory; GtkStringList *unique_ids; GtkStringList *installed_versions; GArray *state_flags; char *id; char *title; char *developer; char *description; GIcon *mini_icon; gboolean is_floss; char *light_accent_color; char *dark_accent_color; gboolean is_flathub; gboolean is_verified; char *search_tokens; char *eol; guint64 installed_size; GtkStringList *addon_group_ids; int n_addons; char *donation_url; BzCategoryFlags categories; int content_age_rating; int max_usefulness; int installable; int updatable; int removable; int installable_available; int updatable_available; int removable_available; gboolean read_only; gboolean searchable; gboolean is_addon; guint64 user_data_size; guint64 cache_size; DexFuture *user_data_size_future; DexFuture *reap_user_data_future; DexFuture *reap_cache_future; GWeakRef ui_entry; BzResult *standalone_ui_entry; GMutex mutex; }; G_DEFINE_FINAL_TYPE (BzEntryGroup, bz_entry_group, G_TYPE_OBJECT) enum { PROP_0, PROP_MODEL, PROP_ADDONS_MODEL, PROP_INSTALLED_VERSIONS, PROP_ID, PROP_TITLE, PROP_DEVELOPER, PROP_DESCRIPTION, PROP_MINI_ICON, PROP_IS_FLOSS, PROP_LIGHT_ACCENT_COLOR, PROP_DARK_ACCENT_COLOR, PROP_IS_FLATHUB, PROP_IS_VERIFIED, PROP_SEARCH_TOKENS, PROP_UI_ENTRY, PROP_EOL, PROP_INSTALLED_SIZE, PROP_N_ADDONS, PROP_DONATION_URL, PROP_CATEGORIES, PROP_INSTALLABLE, PROP_UPDATABLE, PROP_REMOVABLE, PROP_INSTALLABLE_AND_AVAILABLE, PROP_UPDATABLE_AND_AVAILABLE, PROP_REMOVABLE_AND_AVAILABLE, PROP_USER_DATA_SIZE, PROP_CACHE_SIZE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void installed_changed (BzEntryGroup *self, GParamSpec *pspec, BzEntry *entry); static void holding_changed (BzEntryGroup *self, GParamSpec *pspec, BzEntry *entry); static DexFuture * dup_all_into_store_fiber (BzEntryGroup *self); static DexFuture * user_data_size_then (DexFuture *future, GWeakRef *wr); static void check_user_data_size (BzEntryGroup *self); static void bz_entry_group_dispose (GObject *object) { BzEntryGroup *self = BZ_ENTRY_GROUP (object); dex_clear (&self->user_data_size_future); dex_clear (&self->reap_user_data_future); dex_clear (&self->reap_cache_future); g_clear_object (&self->factory); g_clear_object (&self->unique_ids); g_clear_object (&self->installed_versions); g_clear_pointer (&self->state_flags, g_array_unref); g_clear_pointer (&self->id, g_free); g_clear_pointer (&self->title, g_free); g_clear_pointer (&self->developer, g_free); g_clear_pointer (&self->description, g_free); g_clear_pointer (&self->light_accent_color, g_free); g_clear_pointer (&self->dark_accent_color, g_free); g_clear_object (&self->mini_icon); g_clear_pointer (&self->search_tokens, g_free); g_clear_pointer (&self->eol, g_free); g_clear_pointer (&self->donation_url, g_free); g_weak_ref_clear (&self->ui_entry); g_clear_object (&self->standalone_ui_entry); g_mutex_clear (&self->mutex); G_OBJECT_CLASS (bz_entry_group_parent_class)->dispose (object); } static void bz_entry_group_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzEntryGroup *self = BZ_ENTRY_GROUP (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_entry_group_get_model (self)); break; case PROP_ADDONS_MODEL: g_value_set_object (value, bz_entry_group_get_addon_group_ids (self)); break; case PROP_INSTALLED_VERSIONS: g_value_set_object (value, bz_entry_group_get_installed_versions (self)); break; case PROP_ID: g_value_set_string (value, bz_entry_group_get_id (self)); break; case PROP_TITLE: g_value_set_string (value, bz_entry_group_get_title (self)); break; case PROP_DEVELOPER: g_value_set_string (value, bz_entry_group_get_developer (self)); break; case PROP_DESCRIPTION: g_value_set_string (value, bz_entry_group_get_description (self)); break; case PROP_MINI_ICON: g_value_set_object (value, bz_entry_group_get_mini_icon (self)); break; case PROP_IS_FLOSS: g_value_set_boolean (value, bz_entry_group_get_is_floss (self)); break; case PROP_LIGHT_ACCENT_COLOR: g_value_set_string (value, bz_entry_group_get_light_accent_color (self)); break; case PROP_DARK_ACCENT_COLOR: g_value_set_string (value, bz_entry_group_get_dark_accent_color (self)); break; case PROP_IS_FLATHUB: g_value_set_boolean (value, bz_entry_group_get_is_flathub (self)); break; case PROP_IS_VERIFIED: g_value_set_boolean (value, bz_entry_group_get_is_verified (self)); break; case PROP_SEARCH_TOKENS: g_value_set_boxed (value, bz_entry_group_get_search_tokens (self)); break; case PROP_EOL: g_value_set_string (value, bz_entry_group_get_eol (self)); break; case PROP_INSTALLED_SIZE: g_value_set_uint64 (value, bz_entry_group_get_installed_size (self)); break; case PROP_N_ADDONS: g_value_set_int (value, bz_entry_group_get_n_addons (self)); break; case PROP_DONATION_URL: g_value_set_string (value, bz_entry_group_get_donation_url (self)); break; case PROP_CATEGORIES: g_value_set_uint (value, self->categories); break; case PROP_UI_ENTRY: g_value_take_object (value, bz_entry_group_dup_ui_entry (self)); break; case PROP_INSTALLABLE: g_value_set_int (value, bz_entry_group_get_installable (self)); break; case PROP_UPDATABLE: g_value_set_int (value, bz_entry_group_get_updatable (self)); break; case PROP_REMOVABLE: g_value_set_int (value, bz_entry_group_get_removable (self)); break; case PROP_INSTALLABLE_AND_AVAILABLE: g_value_set_int (value, bz_entry_group_get_installable_and_available (self)); break; case PROP_UPDATABLE_AND_AVAILABLE: g_value_set_int (value, bz_entry_group_get_updatable_and_available (self)); break; case PROP_REMOVABLE_AND_AVAILABLE: g_value_set_int (value, bz_entry_group_get_removable_and_available (self)); break; case PROP_USER_DATA_SIZE: g_value_set_uint64 (value, bz_entry_group_get_user_data_size (self)); break; case PROP_CACHE_SIZE: g_value_set_uint64 (value, bz_entry_group_get_cache_size (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_group_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { // BzEntryGroup *self = BZ_ENTRY_GROUP (object); switch (prop_id) { case PROP_MODEL: case PROP_ADDONS_MODEL: case PROP_ID: case PROP_TITLE: case PROP_DEVELOPER: case PROP_DESCRIPTION: case PROP_MINI_ICON: case PROP_IS_FLOSS: case PROP_LIGHT_ACCENT_COLOR: case PROP_DARK_ACCENT_COLOR: case PROP_IS_FLATHUB: case PROP_IS_VERIFIED: case PROP_SEARCH_TOKENS: case PROP_EOL: case PROP_UI_ENTRY: case PROP_INSTALLABLE: case PROP_UPDATABLE: case PROP_REMOVABLE: case PROP_INSTALLABLE_AND_AVAILABLE: case PROP_UPDATABLE_AND_AVAILABLE: case PROP_REMOVABLE_AND_AVAILABLE: case PROP_USER_DATA_SIZE: case PROP_CACHE_SIZE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_group_class_init (BzEntryGroupClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_entry_group_set_property; object_class->get_property = bz_entry_group_get_property; object_class->dispose = bz_entry_group_dispose; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE); props[PROP_ADDONS_MODEL] = g_param_spec_object ( "addons-model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE); props[PROP_INSTALLED_VERSIONS] = g_param_spec_object ( "installed-versions", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE); props[PROP_ID] = g_param_spec_string ( "id", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_TITLE] = g_param_spec_string ( "title", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_DEVELOPER] = g_param_spec_string ( "developer", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_DESCRIPTION] = g_param_spec_string ( "description", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_MINI_ICON] = g_param_spec_object ( "mini-icon", NULL, NULL, G_TYPE_ICON, G_PARAM_READABLE); props[PROP_IS_FLOSS] = g_param_spec_boolean ( "is-floss", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_LIGHT_ACCENT_COLOR] = g_param_spec_string ( "light-accent-color", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_DARK_ACCENT_COLOR] = g_param_spec_string ( "dark-accent-color", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_IS_FLATHUB] = g_param_spec_boolean ( "is-flathub", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_IS_VERIFIED] = g_param_spec_boolean ( "is-verified", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_SEARCH_TOKENS] = g_param_spec_string ( "search-tokens", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_EOL] = g_param_spec_string ( "eol", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_INSTALLED_SIZE] = g_param_spec_uint64 ( "installed-size", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READABLE); props[PROP_N_ADDONS] = g_param_spec_int ( "n-addons", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_DONATION_URL] = g_param_spec_string ( "donation-url", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_CATEGORIES] = g_param_spec_uint ( "categories", NULL, NULL, 0, G_MAXUINT, BZ_CATEGORY_FLAGS_NONE, G_PARAM_READABLE); props[PROP_UI_ENTRY] = g_param_spec_object ( "ui-entry", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READABLE); props[PROP_INSTALLABLE] = g_param_spec_int ( "installable", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_UPDATABLE] = g_param_spec_int ( "updatable", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_REMOVABLE] = g_param_spec_int ( "removable", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_INSTALLABLE_AND_AVAILABLE] = g_param_spec_int ( "installable-and-available", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_UPDATABLE_AND_AVAILABLE] = g_param_spec_int ( "updatable-and-available", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_REMOVABLE_AND_AVAILABLE] = g_param_spec_int ( "removable-and-available", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READABLE); props[PROP_USER_DATA_SIZE] = g_param_spec_uint64 ( "user-data-size", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READABLE); props[PROP_CACHE_SIZE] = g_param_spec_uint64 ( "cache-size", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READABLE); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_entry_group_init (BzEntryGroup *self) { self->unique_ids = gtk_string_list_new (NULL); self->installed_versions = gtk_string_list_new (NULL); self->state_flags = g_array_new (FALSE, TRUE, sizeof (gint32)); self->max_usefulness = -1; g_weak_ref_init (&self->ui_entry, NULL); self->standalone_ui_entry = NULL; g_mutex_init (&self->mutex); } BzEntryGroup * bz_entry_group_new (BzApplicationMapFactory *factory) { BzEntryGroup *group = NULL; g_return_val_if_fail (BZ_IS_APPLICATION_MAP_FACTORY (factory), NULL); group = g_object_new (BZ_TYPE_ENTRY_GROUP, NULL); group->factory = g_object_ref (factory); return group; } BzEntryGroup * bz_entry_group_new_for_single_entry (BzEntry *entry) { BzEntryGroup *group = NULL; const char *id = NULL; const char *unique_id = NULL; const char *title = NULL; const char *developer = NULL; const char *description = NULL; GIcon *mini_icon = NULL; const char *search_tokens = NULL; gboolean is_floss = FALSE; const char *light_accent_color = NULL; const char *dark_accent_color = NULL; gboolean is_flathub = FALSE; gboolean is_verified = FALSE; const char *eol = NULL; guint64 installed_size = 0; const char *donation_url = NULL; BzCategoryFlags entry_categories = BZ_CATEGORY_FLAGS_NONE; DexFuture *future = NULL; g_return_val_if_fail (BZ_IS_ENTRY (entry), NULL); group = g_object_new (BZ_TYPE_ENTRY_GROUP, NULL); id = bz_entry_get_id (entry); unique_id = bz_entry_get_unique_id (entry); title = bz_entry_get_title (entry); developer = bz_entry_get_developer (entry); description = bz_entry_get_description (entry); mini_icon = bz_entry_get_mini_icon (entry); search_tokens = bz_entry_get_search_tokens (entry); is_floss = bz_entry_get_is_foss (entry); light_accent_color = bz_entry_get_light_accent_color (entry); dark_accent_color = bz_entry_get_dark_accent_color (entry); is_flathub = bz_entry_get_is_flathub (entry); is_verified = bz_entry_is_verified (entry); eol = bz_entry_get_eol (entry); installed_size = bz_entry_get_installed_size (entry); donation_url = bz_entry_get_donation_url (entry); entry_categories = bz_entry_get_category_flags (entry); if (id != NULL) group->id = g_strdup (id); if (title != NULL) group->title = g_strdup (title); if (developer != NULL) group->developer = g_strdup (developer); if (description != NULL) group->description = g_strdup (description); if (mini_icon != NULL) group->mini_icon = g_object_ref (mini_icon); if (search_tokens != NULL) group->search_tokens = g_strdup (search_tokens); group->is_floss = is_floss; if (light_accent_color != NULL) group->light_accent_color = g_strdup (light_accent_color); if (dark_accent_color != NULL) group->dark_accent_color = g_strdup (dark_accent_color); group->is_flathub = is_flathub; group->is_verified = is_verified; if (eol != NULL) group->eol = g_strdup (eol); group->installed_size = installed_size; if (donation_url != NULL) group->donation_url = g_strdup (donation_url); group->categories = entry_categories; if (unique_id != NULL) gtk_string_list_append (group->unique_ids, unique_id); future = dex_future_new_for_object (entry); group->standalone_ui_entry = bz_result_new (future); dex_unref (future); return group; } GMutexLocker * bz_entry_group_lock (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return g_mutex_locker_new (&self->mutex); } GListModel * bz_entry_group_get_model (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return G_LIST_MODEL (self->unique_ids); } GListModel * bz_entry_group_get_installed_versions (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return G_LIST_MODEL (self->installed_versions); } const char * bz_entry_group_get_id (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->id; } const char * bz_entry_group_get_title (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->title; } const char * bz_entry_group_get_developer (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->developer; } const char * bz_entry_group_get_description (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->description; } GIcon * bz_entry_group_get_mini_icon (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->mini_icon; } gboolean bz_entry_group_get_is_floss (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return self->is_floss; } const char * bz_entry_group_get_light_accent_color (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->light_accent_color; } const char * bz_entry_group_get_dark_accent_color (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->dark_accent_color; } gboolean bz_entry_group_get_is_flathub (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return self->is_flathub; } gboolean bz_entry_group_get_is_verified (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return self->is_verified; } gboolean bz_entry_group_get_is_mobile_friendly (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return (self->categories & BZ_CATEGORY_FLAGS_MOBILE) != 0; } const char * bz_entry_group_get_search_tokens (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->search_tokens; } const char * bz_entry_group_get_eol (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->eol; } guint64 bz_entry_group_get_installed_size (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->installed_size; } GListModel * bz_entry_group_get_addon_group_ids (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); if (self->addon_group_ids == NULL) return NULL; return G_LIST_MODEL (self->addon_group_ids); } void bz_entry_group_append_addon_group_id (BzEntryGroup *self, const char *id) { g_return_if_fail (BZ_IS_ENTRY_GROUP (self)); g_return_if_fail (id != NULL); if (self->addon_group_ids == NULL) self->addon_group_ids = gtk_string_list_new (NULL); if (gtk_string_list_find (self->addon_group_ids, id) != G_MAXUINT) return; gtk_string_list_append (self->addon_group_ids, id); } int bz_entry_group_get_n_addons (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->n_addons; } const char * bz_entry_group_get_donation_url (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); return self->donation_url; } gboolean bz_entry_group_has_category (BzEntryGroup *self, const char *name) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return bz_category_flags_has_name (self->categories, name); } BzCategoryFlags bz_entry_group_get_categories (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), BZ_CATEGORY_FLAGS_NONE); return self->categories; } int bz_entry_group_get_content_age_rating (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->content_age_rating; } guint64 bz_entry_group_get_user_data_size (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); check_user_data_size (self); return self->user_data_size; } guint64 bz_entry_group_get_cache_size (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); check_user_data_size (self); return self->cache_size; } BzResult * bz_entry_group_dup_ui_entry (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); if (self->standalone_ui_entry != NULL) return g_object_ref (self->standalone_ui_entry); if (g_list_model_get_n_items (G_LIST_MODEL (self->unique_ids)) > 0) { g_autoptr (BzResult) result = NULL; result = g_weak_ref_get (&self->ui_entry); if (result == NULL) { g_autoptr (GtkStringObject) id = NULL; id = g_list_model_get_item (G_LIST_MODEL (self->unique_ids), 0); result = bz_application_map_factory_convert_one (self->factory, g_steal_pointer (&id)); if (result == NULL) return NULL; g_weak_ref_set (&self->ui_entry, result); } return g_steal_pointer (&result); } else return NULL; } char * bz_entry_group_dup_ui_entry_id (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); if (g_list_model_get_n_items (G_LIST_MODEL (self->unique_ids)) > 0) { g_autoptr (GtkStringObject) id = NULL; id = g_list_model_get_item (G_LIST_MODEL (self->unique_ids), 0); return g_strdup (gtk_string_object_get_string (id)); } else return NULL; } int bz_entry_group_get_installable (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); if (self->read_only) return 0; return self->installable; } int bz_entry_group_get_updatable (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->updatable; } int bz_entry_group_get_removable (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); if (self->read_only) return 0; return self->removable; } int bz_entry_group_get_installable_and_available (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->installable_available; } int bz_entry_group_get_updatable_and_available (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->updatable_available; } int bz_entry_group_get_removable_and_available (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), 0); return self->removable_available; } gboolean bz_entry_group_is_searchable (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), TRUE); return self->searchable; } gboolean bz_entry_group_is_addon (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), FALSE); return self->is_addon; } void bz_entry_group_add (BzEntryGroup *self, BzEntry *entry, BzEntry *runtime, gboolean ignore_eol) { g_autoptr (GMutexLocker) locker = NULL; const char *unique_id = NULL; const char *installed_version = NULL; gint usefulness = 0; const char *eol = NULL; const char *title = NULL; const char *developer = NULL; const char *description = NULL; GIcon *mini_icon = NULL; const char *search_tokens = NULL; gboolean is_floss = FALSE; const char *light_accent_color = NULL; const char *dark_accent_color = NULL; gboolean is_flathub = FALSE; gboolean is_verified = FALSE; guint64 installed_size = 0; GListModel *addons = NULL; int n_addons = 0; const char *donation_url = NULL; BzCategoryFlags entry_categories = BZ_CATEGORY_FLAGS_NONE; guint existing = 0; gboolean is_searchable = FALSE; AsContentRating *content_rating = NULL; gboolean is_addon = FALSE; gint32 state_flags = 0; g_return_if_fail (BZ_IS_ENTRY_GROUP (self)); g_return_if_fail (BZ_IS_ENTRY (entry)); g_return_if_fail (runtime == NULL || BZ_IS_ENTRY (runtime)); locker = g_mutex_locker_new (&self->mutex); is_addon = bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_ADDON); if (is_addon) self->is_addon = TRUE; if (self->id == NULL) { self->id = g_strdup (bz_entry_get_id (entry)); self->read_only = g_strcmp0 (self->id, g_application_get_application_id (g_application_get_default ())) == 0; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ID]); } unique_id = bz_entry_get_unique_id (entry); installed_version = bz_entry_get_installed_version (entry); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED_VERSIONS]); if (!ignore_eol) { eol = bz_entry_get_eol (entry); if (eol == NULL && runtime != NULL) eol = bz_entry_get_eol (runtime); if (eol != NULL) { g_clear_pointer (&self->eol, g_free); self->eol = g_strdup (eol); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_EOL]); } } title = bz_entry_get_title (entry); description = bz_entry_get_description (entry); installed_size = bz_entry_get_installed_size (entry); is_flathub = bz_entry_get_is_flathub (entry); is_floss = bz_entry_get_is_foss (entry); if (is_addon) // You would not see any addon when the filter is on without this. is_verified = TRUE; if (!is_addon) { developer = bz_entry_get_developer (entry); mini_icon = bz_entry_get_mini_icon (entry); search_tokens = bz_entry_get_search_tokens (entry); light_accent_color = bz_entry_get_light_accent_color (entry); dark_accent_color = bz_entry_get_dark_accent_color (entry); is_verified = bz_entry_is_verified (entry); donation_url = bz_entry_get_donation_url (entry); entry_categories = bz_entry_get_category_flags (entry); content_rating = bz_entry_get_content_rating (entry); addons = bz_entry_get_addons (entry); is_searchable = bz_entry_is_searchable (entry); if (addons != NULL) n_addons = g_list_model_get_n_items (addons); } usefulness = bz_entry_calc_usefulness (entry); existing = gtk_string_list_find (self->unique_ids, unique_id); if (usefulness >= self->max_usefulness) { if (existing != G_MAXUINT) { gtk_string_list_remove (self->unique_ids, existing); gtk_string_list_remove (self->installed_versions, existing); } gtk_string_list_splice (self->unique_ids, 0, 0, (const char *const[]) { unique_id, NULL }); gtk_string_list_splice (self->installed_versions, 0, 0, (const char *const[]) { installed_version != NULL ? installed_version : "", NULL }); if (title != NULL) { g_clear_pointer (&self->title, g_free); self->title = g_strdup (title); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLE]); } if (description != NULL) { g_clear_pointer (&self->description, g_free); self->description = g_strdup (description); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DESCRIPTION]); } if (installed_size != self->installed_size) { self->installed_size = installed_size; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED_SIZE]); } if (!!is_flathub != !!self->is_flathub) { self->is_flathub = is_flathub; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IS_FLATHUB]); } if (!!is_floss != !!self->is_floss) { self->is_floss = is_floss; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IS_FLOSS]); } if (!!is_verified != !!self->is_verified) { self->is_verified = is_verified; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IS_VERIFIED]); } if (!is_addon) { if (developer != NULL) { g_clear_pointer (&self->developer, g_free); self->developer = g_strdup (developer); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEVELOPER]); } if (mini_icon != NULL) { g_clear_object (&self->mini_icon); self->mini_icon = g_object_ref (mini_icon); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MINI_ICON]); } if (search_tokens != NULL) { g_clear_pointer (&self->search_tokens, g_free); self->search_tokens = g_strdup (search_tokens); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SEARCH_TOKENS]); } if (light_accent_color != NULL) { g_clear_pointer (&self->light_accent_color, g_free); self->light_accent_color = g_strdup (light_accent_color); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LIGHT_ACCENT_COLOR]); } if (dark_accent_color != NULL) { g_clear_pointer (&self->dark_accent_color, g_free); self->dark_accent_color = g_strdup (dark_accent_color); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DARK_ACCENT_COLOR]); } if (n_addons != self->n_addons) { self->n_addons = n_addons; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_N_ADDONS]); } if (donation_url != NULL) { g_clear_pointer (&self->donation_url, g_free); self->donation_url = g_strdup (donation_url); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DONATION_URL]); } if (entry_categories != BZ_CATEGORY_FLAGS_NONE) { self->categories = entry_categories; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CATEGORIES]); } if (content_rating != NULL) self->content_age_rating = as_content_rating_get_minimum_age (content_rating); } self->max_usefulness = usefulness; } else { if (existing == G_MAXUINT) { gtk_string_list_append (self->unique_ids, unique_id); gtk_string_list_append (self->installed_versions, installed_version != NULL ? installed_version : ""); } if (title != NULL && self->title == NULL) { self->title = g_strdup (title); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLE]); } if (description != NULL && self->description == NULL) { self->description = g_strdup (description); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DESCRIPTION]); } if (installed_size > 0 && self->installed_size == 0) { self->installed_size = installed_size; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED_SIZE]); } if (!is_addon) { if (developer != NULL && self->developer == NULL) { self->developer = g_strdup (developer); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEVELOPER]); } if (mini_icon != NULL && self->mini_icon == NULL) { self->mini_icon = g_object_ref (mini_icon); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MINI_ICON]); } if (search_tokens != NULL && self->search_tokens == NULL) { self->search_tokens = g_strdup (search_tokens); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SEARCH_TOKENS]); } if (light_accent_color != NULL && self->light_accent_color == NULL) { self->light_accent_color = g_strdup (light_accent_color); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LIGHT_ACCENT_COLOR]); } if (dark_accent_color != NULL && self->dark_accent_color == NULL) { self->dark_accent_color = g_strdup (dark_accent_color); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DARK_ACCENT_COLOR]); } if (donation_url != NULL && self->donation_url == NULL) { self->donation_url = g_strdup (donation_url); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DONATION_URL]); } } } if (existing != G_MAXUINT) { gint32 previous_state_flags = 0; /* revert the old state if we are replacing */ previous_state_flags = g_array_index (self->state_flags, gint32, existing); if (previous_state_flags & ENTRY_INSTALLABLE) self->installable--; if (previous_state_flags & ENTRY_INSTALLABLE_AVAILABLE) self->installable_available--; if (previous_state_flags & ENTRY_UPDATABLE) self->updatable--; if (previous_state_flags & ENTRY_UPDATABLE_AVAILABLE) self->updatable_available--; if (previous_state_flags & ENTRY_REMOVABLE) self->removable--; if (previous_state_flags & ENTRY_REMOVABLE_AVAILABLE) self->removable_available--; } if (bz_entry_is_installed (entry)) { self->removable++; state_flags |= ENTRY_REMOVABLE; if (!bz_entry_is_holding (entry)) { self->removable_available++; state_flags |= ENTRY_REMOVABLE_AVAILABLE; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AND_AVAILABLE]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE]); } else { if (bz_entry_is_reinstallable (entry)) { self->installable++; state_flags |= ENTRY_INSTALLABLE; if (!bz_entry_is_holding (entry)) { self->installable_available++; state_flags |= ENTRY_INSTALLABLE_AVAILABLE; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE_AND_AVAILABLE]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE]); } } if (existing != G_MAXUINT) g_array_index (self->state_flags, gint32, existing) = state_flags; else g_array_append_val (self->state_flags, state_flags); if (!is_addon && is_searchable) self->searchable = TRUE; } void bz_entry_group_connect_living (BzEntryGroup *self, BzEntry *entry) { g_autoptr (GMutexLocker) locker = NULL; g_return_if_fail (BZ_IS_ENTRY_GROUP (self)); g_return_if_fail (BZ_IS_ENTRY (entry)); locker = g_mutex_locker_new (&self->mutex); g_signal_handlers_disconnect_by_func (entry, installed_changed, self); g_signal_handlers_disconnect_by_func (entry, holding_changed, self); g_signal_connect_object (entry, "notify::installed", G_CALLBACK (installed_changed), self, G_CONNECT_SWAPPED); g_signal_connect_object (entry, "notify::holding", G_CALLBACK (holding_changed), self, G_CONNECT_SWAPPED); } DexFuture * bz_entry_group_dup_all_into_store (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); /* _must_ be the main scheduler since invocations * of BzApplicationMapFactory functions expect this */ return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) dup_all_into_store_fiber, g_object_ref (self), g_object_unref); } static void installed_changed (BzEntryGroup *self, GParamSpec *pspec, BzEntry *entry) { g_autoptr (GMutexLocker) locker = NULL; gboolean reinstallable = FALSE; const char *unique_id = NULL; const char *version = NULL; guint index = 0; gint32 state_flags = 0; locker = g_mutex_locker_new (&self->mutex); reinstallable = bz_entry_is_reinstallable (entry); unique_id = bz_entry_get_unique_id (entry); version = bz_entry_get_installed_version (entry); index = gtk_string_list_find (self->unique_ids, unique_id); if (index == G_MAXUINT) return; state_flags = g_array_index (self->state_flags, gint32, index); gtk_string_list_splice (self->installed_versions, index, 1, (const char *const[]) { version != NULL ? version : "", NULL }); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED_VERSIONS]); if (bz_entry_is_installed (entry)) { if (state_flags & ENTRY_INSTALLABLE) { self->installable--; state_flags &= ~ENTRY_INSTALLABLE; } if (!(state_flags & ENTRY_REMOVABLE)) { self->removable++; state_flags |= ENTRY_REMOVABLE; } if (!bz_entry_is_holding (entry)) { if (state_flags & ENTRY_INSTALLABLE_AVAILABLE) { self->installable_available--; state_flags &= ~ENTRY_INSTALLABLE_AVAILABLE; } if (!(state_flags & ENTRY_REMOVABLE_AVAILABLE)) { self->removable_available++; state_flags |= ENTRY_REMOVABLE_AVAILABLE; } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE_AND_AVAILABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AND_AVAILABLE]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE]); } else { if (state_flags & ENTRY_REMOVABLE) { self->removable--; state_flags &= ~ENTRY_REMOVABLE; } if (reinstallable) { if (!(state_flags & ENTRY_INSTALLABLE)) { self->installable++; state_flags |= ENTRY_INSTALLABLE; } } if (!bz_entry_is_holding (entry)) { if (state_flags & ENTRY_REMOVABLE_AVAILABLE) { self->removable_available--; state_flags &= ~ENTRY_REMOVABLE_AVAILABLE; } if (reinstallable) { if (!(state_flags & ENTRY_INSTALLABLE_AVAILABLE)) { self->installable_available++; state_flags |= ENTRY_INSTALLABLE_AVAILABLE; } } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AND_AVAILABLE]); if (reinstallable) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE_AND_AVAILABLE]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE]); if (reinstallable) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE]); } g_array_index (self->state_flags, gint32, index) = state_flags; dex_clear (&self->user_data_size_future); dex_clear (&self->reap_cache_future); self->user_data_size = 0; self->cache_size = 0; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_USER_DATA_SIZE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CACHE_SIZE]); } static void holding_changed (BzEntryGroup *self, GParamSpec *pspec, BzEntry *entry) { g_autoptr (GMutexLocker) locker = NULL; gboolean reinstallable = FALSE; const char *unique_id = NULL; guint index = 0; gint32 state_flags = 0; locker = g_mutex_locker_new (&self->mutex); reinstallable = bz_entry_is_reinstallable (entry); unique_id = bz_entry_get_unique_id (entry); index = gtk_string_list_find (self->unique_ids, unique_id); if (index == G_MAXUINT) return; state_flags = g_array_index (self->state_flags, gint32, index); if (bz_entry_is_holding (entry)) { if (bz_entry_is_installed (entry)) { if (state_flags & ENTRY_REMOVABLE_AVAILABLE) { self->removable_available--; state_flags &= ~ENTRY_REMOVABLE_AVAILABLE; } } else { if (state_flags & ENTRY_INSTALLABLE_AVAILABLE) { self->installable_available--; state_flags &= ~ENTRY_INSTALLABLE_AVAILABLE; } } } else { if (bz_entry_is_installed (entry)) { if (!(state_flags & ENTRY_REMOVABLE_AVAILABLE)) { self->removable_available++; state_flags |= ENTRY_REMOVABLE_AVAILABLE; } } else if (reinstallable) { if (!(state_flags & ENTRY_INSTALLABLE_AVAILABLE)) { self->installable_available++; state_flags |= ENTRY_INSTALLABLE_AVAILABLE; } } } g_array_index (self->state_flags, gint32, index) = state_flags; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AND_AVAILABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE_AND_AVAILABLE]); } static DexFuture * dup_all_into_store_fiber (BzEntryGroup *self) { g_autoptr (GPtrArray) futures = NULL; guint n_items = 0; g_autoptr (GListStore) store = NULL; guint n_resolved = 0; futures = g_ptr_array_new_with_free_func (dex_unref); n_items = g_list_model_get_n_items (G_LIST_MODEL (self->unique_ids)); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; g_autoptr (BzResult) result = NULL; string = g_list_model_get_item (G_LIST_MODEL (self->unique_ids), i); result = bz_application_map_factory_convert_one (self->factory, g_steal_pointer (&string)); g_ptr_array_add (futures, bz_result_dup_future (result)); } dex_await (dex_future_allv ( (DexFuture *const *) futures->pdata, futures->len), NULL); store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < futures->len; i++) { DexFuture *future = NULL; future = g_ptr_array_index (futures, i); if (dex_future_is_resolved (future)) { BzEntry *entry = NULL; entry = g_value_get_object (dex_future_get_value (future, NULL)); bz_entry_group_connect_living (self, entry); g_list_store_append (store, entry); } } n_resolved = g_list_model_get_n_items (G_LIST_MODEL (store)); if (n_resolved == 0) { g_warning ("No entries for %s were able to be resolved", self->id); return dex_future_new_reject ( G_IO_ERROR, G_IO_ERROR_UNKNOWN, "No entries for %s were able to be resolved", self->id); } if (n_resolved != n_items) g_warning ("Some entries for %s failed to resolve", self->id); return dex_future_new_for_object (store); } static DexFuture * reap_user_data_then (DexFuture *future, GWeakRef *wr) { g_autoptr (BzEntryGroup) self = NULL; bz_weak_get_or_return_reject (self, wr); dex_clear (&self->reap_user_data_future); self->user_data_size = 0; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_USER_DATA_SIZE]); return dex_future_new_true (); } DexFuture * bz_entry_group_reap_user_data (BzEntryGroup *self) { dex_return_error_if_fail (BZ_IS_ENTRY_GROUP (self)); dex_return_error_if_fail (self->id != NULL); if (self->reap_user_data_future != NULL) return dex_ref (self->reap_user_data_future); self->reap_user_data_future = dex_future_then ( bz_reap_user_data_dex (self->id), (DexFutureCallback) reap_user_data_then, bz_track_weak (self), bz_weak_release); return dex_ref (self->reap_user_data_future); } static DexFuture * reap_user_cache_then (DexFuture *future, GWeakRef *wr) { g_autoptr (BzEntryGroup) self = NULL; bz_weak_get_or_return_reject (self, wr); dex_clear (&self->reap_cache_future); self->cache_size = 0; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CACHE_SIZE]); return dex_future_new_true (); } DexFuture * bz_entry_group_reap_user_cache (BzEntryGroup *self) { g_return_val_if_fail (BZ_IS_ENTRY_GROUP (self), NULL); g_return_val_if_fail (self->id != NULL, NULL); if (self->reap_cache_future != NULL) return dex_ref (self->reap_cache_future); self->reap_cache_future = dex_future_then ( bz_reap_user_cache_dex (self->id), (DexFutureCallback) reap_user_cache_then, bz_track_weak (self), bz_weak_release); return dex_ref (self->reap_cache_future); } static DexFuture * user_data_size_then (DexFuture *future, GWeakRef *wr) { g_autoptr (BzEntryGroup) self = NULL; g_autoptr (GError) error = NULL; g_autoptr (BzSizeResult) sizes = NULL; guint64 new_user_data_size = 0; guint64 new_cache_size = 0; bz_weak_get_or_return_reject (self, wr); sizes = g_value_dup_object (dex_future_get_value (future, &error)); if (error != NULL || sizes == NULL) { g_clear_error (&error); return dex_future_new_true (); } new_user_data_size = bz_size_result_get_user_data_size (sizes); new_cache_size = bz_size_result_get_cache_size (sizes); if (new_user_data_size != self->user_data_size) { self->user_data_size = new_user_data_size; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_USER_DATA_SIZE]); } if (new_cache_size != self->cache_size) { self->cache_size = new_cache_size; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CACHE_SIZE]); } return dex_future_new_true (); } static void check_user_data_size (BzEntryGroup *self) { g_autoptr (DexFuture) future = NULL; if (self->user_data_size_future != NULL || self->id == NULL) return; if (self->reap_user_data_future != NULL || self->reap_cache_future != NULL) return; future = bz_get_user_sizes_dex (self->id); future = dex_future_then ( future, (DexFutureCallback) user_data_size_then, bz_track_weak (self), bz_weak_release); self->user_data_size_future = g_steal_pointer (&future); } void bz_entry_group_serialize (BzEntryGroup *self, GVariantBuilder *builder) { guint n_ids = 0; g_variant_builder_add (builder, "{sv}", "id", g_variant_new_string (self->id ? self->id : "")); g_variant_builder_add (builder, "{sv}", "title", g_variant_new_string (self->title ? self->title : "")); if (self->developer != NULL) g_variant_builder_add (builder, "{sv}", "developer", g_variant_new_string (self->developer)); if (self->description != NULL) g_variant_builder_add (builder, "{sv}", "description", g_variant_new_string (self->description)); if (self->search_tokens != NULL) g_variant_builder_add (builder, "{sv}", "search-tokens", g_variant_new_string (self->search_tokens)); if (self->eol != NULL) g_variant_builder_add (builder, "{sv}", "eol", g_variant_new_string (self->eol)); if (self->light_accent_color != NULL) g_variant_builder_add (builder, "{sv}", "light-accent-color", g_variant_new_string (self->light_accent_color)); if (self->dark_accent_color != NULL) g_variant_builder_add (builder, "{sv}", "dark-accent-color", g_variant_new_string (self->dark_accent_color)); if (self->donation_url != NULL) g_variant_builder_add (builder, "{sv}", "donation-url", g_variant_new_string (self->donation_url)); g_variant_builder_add (builder, "{sv}", "is-floss", g_variant_new_boolean (self->is_floss)); g_variant_builder_add (builder, "{sv}", "is-flathub", g_variant_new_boolean (self->is_flathub)); g_variant_builder_add (builder, "{sv}", "is-verified", g_variant_new_boolean (self->is_verified)); g_variant_builder_add (builder, "{sv}", "is-addon", g_variant_new_boolean (self->is_addon)); g_variant_builder_add (builder, "{sv}", "searchable", g_variant_new_boolean (self->searchable)); g_variant_builder_add (builder, "{sv}", "read-only", g_variant_new_boolean (self->read_only)); g_variant_builder_add (builder, "{sv}", "installed-size", g_variant_new_uint64 (self->installed_size)); g_variant_builder_add (builder, "{sv}", "n-addons", g_variant_new_int32 (self->n_addons)); g_variant_builder_add (builder, "{sv}", "categories", g_variant_new_uint32 (self->categories)); g_variant_builder_add (builder, "{sv}", "content-age-rating", g_variant_new_int32 (self->content_age_rating)); g_variant_builder_add (builder, "{sv}", "max-usefulness", g_variant_new_int32 (self->max_usefulness)); n_ids = g_list_model_get_n_items (G_LIST_MODEL (self->unique_ids)); if (n_ids > 0) { g_autoptr (GVariantBuilder) ids_b = NULL; g_autoptr (GVariantBuilder) iv_b = NULL; g_autoptr (GVariantBuilder) sf_b = NULL; ids_b = g_variant_builder_new (G_VARIANT_TYPE ("as")); iv_b = g_variant_builder_new (G_VARIANT_TYPE ("as")); sf_b = g_variant_builder_new (G_VARIANT_TYPE ("ai")); for (guint i = 0; i < n_ids; i++) { g_autoptr (GtkStringObject) s = NULL; g_autoptr (GtkStringObject) iv = NULL; gint32 flags = 0; s = g_list_model_get_item (G_LIST_MODEL (self->unique_ids), i); iv = g_list_model_get_item (G_LIST_MODEL (self->installed_versions), i); flags = g_array_index (self->state_flags, gint32, i); g_variant_builder_add (ids_b, "s", gtk_string_object_get_string (s)); g_variant_builder_add (iv_b, "s", iv != NULL ? gtk_string_object_get_string (iv) : ""); g_variant_builder_add (sf_b, "i", flags); } g_variant_builder_add (builder, "{sv}", "unique-ids", g_variant_builder_end (ids_b)); g_variant_builder_add (builder, "{sv}", "installed-versions", g_variant_builder_end (iv_b)); g_variant_builder_add (builder, "{sv}", "state-flags", g_variant_builder_end (sf_b)); } if (self->addon_group_ids != NULL) { guint n_addon_ids = 0; n_addon_ids = g_list_model_get_n_items (G_LIST_MODEL (self->addon_group_ids)); if (n_addon_ids > 0) { g_autoptr (GVariantBuilder) addon_b = NULL; addon_b = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_addon_ids; i++) { g_autoptr (GtkStringObject) s = NULL; s = g_list_model_get_item (G_LIST_MODEL (self->addon_group_ids), i); g_variant_builder_add (addon_b, "s", gtk_string_object_get_string (s)); } g_variant_builder_add (builder, "{sv}", "addon-group-ids", g_variant_builder_end (addon_b)); } } if (self->mini_icon != NULL) { g_autoptr (GVariant) icon_variant = NULL; icon_variant = g_icon_serialize (self->mini_icon); if (icon_variant != NULL) g_variant_builder_add (builder, "{sv}", "mini-icon", icon_variant); } } gboolean bz_entry_group_deserialize (BzEntryGroup *self, GVariant *import) { g_autoptr (GVariantIter) iter = NULL; iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "id") == 0) self->id = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "title") == 0) self->title = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "developer") == 0) self->developer = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "description") == 0) self->description = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "search-tokens") == 0) self->search_tokens = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "eol") == 0) self->eol = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "light-accent-color") == 0) self->light_accent_color = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "dark-accent-color") == 0) self->dark_accent_color = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "donation-url") == 0) self->donation_url = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "is-floss") == 0) self->is_floss = g_variant_get_boolean (value); else if (g_strcmp0 (key, "is-flathub") == 0) self->is_flathub = g_variant_get_boolean (value); else if (g_strcmp0 (key, "is-verified") == 0) self->is_verified = g_variant_get_boolean (value); else if (g_strcmp0 (key, "is-addon") == 0) self->is_addon = g_variant_get_boolean (value); else if (g_strcmp0 (key, "searchable") == 0) self->searchable = g_variant_get_boolean (value); else if (g_strcmp0 (key, "read-only") == 0) self->read_only = g_variant_get_boolean (value); else if (g_strcmp0 (key, "installed-size") == 0) self->installed_size = g_variant_get_uint64 (value); else if (g_strcmp0 (key, "n-addons") == 0) self->n_addons = g_variant_get_int32 (value); else if (g_strcmp0 (key, "categories") == 0) self->categories = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "content-age-rating") == 0) self->content_age_rating = g_variant_get_int32 (value); else if (g_strcmp0 (key, "max-usefulness") == 0) self->max_usefulness = g_variant_get_int32 (value); else if (g_strcmp0 (key, "unique-ids") == 0) { g_autoptr (GVariantIter) ids_iter = NULL; g_autofree char *uid = NULL; ids_iter = g_variant_iter_new (value); while (g_variant_iter_next (ids_iter, "s", &uid)) gtk_string_list_append (self->unique_ids, uid); } else if (g_strcmp0 (key, "installed-versions") == 0) { g_autoptr (GVariantIter) iv_iter = NULL; g_autofree char *iv = NULL; iv_iter = g_variant_iter_new (value); while (g_variant_iter_next (iv_iter, "s", &iv)) gtk_string_list_append (self->installed_versions, iv); } else if (g_strcmp0 (key, "state-flags") == 0) { g_autoptr (GVariantIter) sf_iter = NULL; gint32 flags = 0; sf_iter = g_variant_iter_new (value); while (g_variant_iter_next (sf_iter, "i", &flags)) g_array_append_val (self->state_flags, flags); } else if (g_strcmp0 (key, "addon-group-ids") == 0) { g_autoptr (GVariantIter) addon_iter = NULL; g_autofree char *addon_id = NULL; addon_iter = g_variant_iter_new (value); while (g_variant_iter_next (addon_iter, "s", &addon_id)) bz_entry_group_append_addon_group_id (self, addon_id); } else if (g_strcmp0 (key, "mini-icon") == 0) self->mini_icon = g_icon_deserialize (value); } if (self->id != NULL) self->read_only = g_strcmp0 ( self->id, g_application_get_application_id (g_application_get_default ())) == 0; return self->id != NULL; } void bz_entry_group_reconcile_with_installed_set (BzEntryGroup *self, GHashTable *installed_set) { g_autoptr (GMutexLocker) locker = NULL; guint n_ids = 0; g_return_if_fail (BZ_IS_ENTRY_GROUP (self)); g_return_if_fail (installed_set != NULL); locker = g_mutex_locker_new (&self->mutex); self->installable = 0; self->removable = 0; self->installable_available = 0; self->removable_available = 0; n_ids = g_list_model_get_n_items (G_LIST_MODEL (self->unique_ids)); for (guint i = 0; i < n_ids; i++) { g_autoptr (GtkStringObject) uid_obj = NULL; const char *uid = NULL; gint32 flags = 0; uid_obj = g_list_model_get_item (G_LIST_MODEL (self->unique_ids), i); uid = gtk_string_object_get_string (uid_obj); if (g_hash_table_contains (installed_set, uid)) { flags |= ENTRY_REMOVABLE | ENTRY_REMOVABLE_AVAILABLE; self->removable++; self->removable_available++; } else { flags |= ENTRY_INSTALLABLE | ENTRY_INSTALLABLE_AVAILABLE; self->installable++; self->installable_available++; } g_array_index (self->state_flags, gint32, i) = flags; } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AND_AVAILABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLABLE_AND_AVAILABLE]); } bazaar-org-bazaar-b6e9a65/src/bz-entry-group.h000066400000000000000000000106341522167256300213010ustar00rootroot00000000000000/* bz-entry-group.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-application-map-factory.h" #include "bz-entry.h" #include "bz-result.h" G_BEGIN_DECLS #define BZ_TYPE_ENTRY_GROUP (bz_entry_group_get_type ()) G_DECLARE_FINAL_TYPE (BzEntryGroup, bz_entry_group, BZ, ENTRY_GROUP, GObject) BzEntryGroup * bz_entry_group_new (BzApplicationMapFactory *factory); BzEntryGroup * bz_entry_group_new_for_single_entry (BzEntry *entry); /* Only necessary if reading props from another thread, writing is always prohibited */ GMutexLocker * bz_entry_group_lock (BzEntryGroup *self); GListModel * bz_entry_group_get_model (BzEntryGroup *self); GListModel * bz_entry_group_get_installed_versions (BzEntryGroup *self); const char * bz_entry_group_get_id (BzEntryGroup *self); const char * bz_entry_group_get_title (BzEntryGroup *self); const char * bz_entry_group_get_developer (BzEntryGroup *self); const char * bz_entry_group_get_description (BzEntryGroup *self); GIcon * bz_entry_group_get_mini_icon (BzEntryGroup *self); gboolean bz_entry_group_get_is_floss (BzEntryGroup *self); const char * bz_entry_group_get_light_accent_color (BzEntryGroup *self); const char * bz_entry_group_get_dark_accent_color (BzEntryGroup *self); gboolean bz_entry_group_get_is_flathub (BzEntryGroup *self); gboolean bz_entry_group_get_is_verified (BzEntryGroup *self); gboolean bz_entry_group_get_is_mobile_friendly (BzEntryGroup *self); const char * bz_entry_group_get_search_tokens (BzEntryGroup *self); const char * bz_entry_group_get_eol (BzEntryGroup *self); guint64 bz_entry_group_get_installed_size (BzEntryGroup *self); GListModel * bz_entry_group_get_addon_group_ids (BzEntryGroup *self); void bz_entry_group_append_addon_group_id (BzEntryGroup *self, const char *id); int bz_entry_group_get_n_addons (BzEntryGroup *self); const char * bz_entry_group_get_donation_url (BzEntryGroup *self); gboolean bz_entry_group_has_category (BzEntryGroup *self, const char *name); BzCategoryFlags bz_entry_group_get_categories (BzEntryGroup *self); int bz_entry_group_get_content_age_rating (BzEntryGroup *self); BzResult * bz_entry_group_dup_ui_entry (BzEntryGroup *self); char * bz_entry_group_dup_ui_entry_id (BzEntryGroup *self); int bz_entry_group_get_installable (BzEntryGroup *self); int bz_entry_group_get_updatable (BzEntryGroup *self); int bz_entry_group_get_removable (BzEntryGroup *self); int bz_entry_group_get_installable_and_available (BzEntryGroup *self); int bz_entry_group_get_updatable_and_available (BzEntryGroup *self); int bz_entry_group_get_removable_and_available (BzEntryGroup *self); gboolean bz_entry_group_is_searchable (BzEntryGroup *self); gboolean bz_entry_group_is_addon (BzEntryGroup *self); guint64 bz_entry_group_get_user_data_size (BzEntryGroup *self); guint64 bz_entry_group_get_cache_size (BzEntryGroup *self); DexFuture * bz_entry_group_reap_user_data (BzEntryGroup *self); DexFuture * bz_entry_group_reap_user_cache (BzEntryGroup *self); void bz_entry_group_add (BzEntryGroup *self, BzEntry *entry, BzEntry *runtime, gboolean ignore_eol); void bz_entry_group_connect_living (BzEntryGroup *self, BzEntry *entry); DexFuture * bz_entry_group_dup_all_into_store (BzEntryGroup *self); void bz_entry_group_serialize (BzEntryGroup *self, GVariantBuilder *builder); gboolean bz_entry_group_deserialize (BzEntryGroup *self, GVariant *import); void bz_entry_group_reconcile_with_installed_set (BzEntryGroup *self, GHashTable *installed_set); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-entry-inspector.blp000066400000000000000000000045331522167256300225020ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzEntryInspector: Adw.Window { title: "Entry Inspector"; default-width: 600; default-height: 800; width-request: 300; height-request: 600; Adw.ToolbarView { top-bar-style: raised_border; bottom-bar-style: raised_border; reveal-bottom-bars: false; content: Box { orientation: vertical; spacing: 5; Label { xalign: 0.0; label: bind template.result as <$BzResult>.message as ; } Label { styles [ "heading", ] xalign: 0.0; selectable: true; label: bind template.result as <$BzResult>.object as <$BzEntry>.title; } Label { xalign: 0.0; selectable: true; label: bind template.result as <$BzResult>.object as <$BzEntry>.unique_id; } Label { xalign: 0.0; selectable: true; label: bind template.result as <$BzResult>.object as <$BzEntry>.unique_id_checksum; } Label { xalign: 0.0; selectable: true; label: bind template.result as <$BzResult>.object as <$BzEntry>.id; } Box { orientation: horizontal; spacing: 5; Image { pixel-size: 16; paintable: bind template.result as <$BzResult>.object as <$BzEntry>.icon-paintable; } Image { pixel-size: 32; paintable: bind template.result as <$BzResult>.object as <$BzEntry>.icon-paintable; } Image { pixel-size: 64; paintable: bind template.result as <$BzResult>.object as <$BzEntry>.icon-paintable; } Image { pixel-size: 128; paintable: bind template.result as <$BzResult>.object as <$BzEntry>.icon-paintable; } } Box { orientation: horizontal; Button { label: "Serialize"; clicked => $gen_serialized(template); } CheckButton convert_to_json { label: "Convert to JSON"; active: true; } } ScrolledWindow { propagate-natural-height: true; child: $GtkSourceView { styles [ "monospace", ] // wrap-mode: word_char; buffer: $GtkSourceBuffer text_buffer {}; }; } }; [top] Adw.HeaderBar top_header_bar {} } } bazaar-org-bazaar-b6e9a65/src/bz-entry-inspector.c000066400000000000000000000144621522167256300221510ustar00rootroot00000000000000/* bz-entry-inspector.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include #include "bz-entry-inspector.h" #include "bz-entry.h" #include "bz-serializable.h" struct _BzEntryInspector { AdwWindow parent_instance; BzResult *result; /* Template widgets */ GtkSourceBuffer *text_buffer; GtkCheckButton *convert_to_json; }; G_DEFINE_FINAL_TYPE (BzEntryInspector, bz_entry_inspector, ADW_TYPE_WINDOW); enum { PROP_0, PROP_RESULT, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_entry_inspector_dispose (GObject *object) { BzEntryInspector *self = BZ_ENTRY_INSPECTOR (object); g_clear_pointer (&self->result, g_object_unref); G_OBJECT_CLASS (bz_entry_inspector_parent_class)->dispose (object); } static void bz_entry_inspector_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzEntryInspector *self = BZ_ENTRY_INSPECTOR (object); switch (prop_id) { case PROP_RESULT: g_value_set_object (value, bz_entry_inspector_get_result (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_inspector_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzEntryInspector *self = BZ_ENTRY_INSPECTOR (object); switch (prop_id) { case PROP_RESULT: bz_entry_inspector_set_result (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void gen_serialized (BzEntryInspector *self, GtkButton *button) { if (bz_result_get_resolved (self->result)) { BzEntry *entry = NULL; g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autofree char *string = NULL; entry = bz_result_get_object (self->result); builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); bz_serializable_serialize (BZ_SERIALIZABLE (entry), builder); variant = g_variant_builder_end (builder); if (gtk_check_button_get_active (self->convert_to_json)) { g_autoptr (JsonNode) node = NULL; g_autoptr (JsonGenerator) generator = NULL; GtkSourceLanguageManager *lang_mgr = NULL; GtkSourceLanguage *language = NULL; node = json_gvariant_serialize (variant); generator = json_generator_new (); json_generator_set_pretty (generator, TRUE); json_generator_set_root (generator, node); string = json_generator_to_data (generator, NULL); lang_mgr = gtk_source_language_manager_get_default (); language = gtk_source_language_manager_get_language (lang_mgr, "json"); gtk_source_buffer_set_language (self->text_buffer, language); } else { string = g_variant_print (variant, FALSE); gtk_source_buffer_set_language (self->text_buffer, NULL); } gtk_text_buffer_set_text (GTK_TEXT_BUFFER (self->text_buffer), string, -1); } else { gtk_source_buffer_set_language (self->text_buffer, NULL); gtk_text_buffer_set_text ( GTK_TEXT_BUFFER (self->text_buffer), "!!! The entry has not resolved", -1); } } static void bz_entry_inspector_class_init (BzEntryInspectorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_entry_inspector_set_property; object_class->get_property = bz_entry_inspector_get_property; object_class->dispose = bz_entry_inspector_dispose; props[PROP_RESULT] = g_param_spec_object ( "result", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-entry-inspector.ui"); gtk_widget_class_bind_template_child (widget_class, BzEntryInspector, text_buffer); gtk_widget_class_bind_template_child (widget_class, BzEntryInspector, convert_to_json); gtk_widget_class_bind_template_callback (widget_class, gen_serialized); } static void bz_entry_inspector_init (BzEntryInspector *self) { GtkSourceStyleSchemeManager *scheme_mgr = NULL; GtkSourceStyleScheme *scheme = NULL; gtk_widget_init_template (GTK_WIDGET (self)); scheme_mgr = gtk_source_style_scheme_manager_get_default (); scheme = gtk_source_style_scheme_manager_get_scheme (scheme_mgr, "Adwaita-dark"); gtk_source_buffer_set_style_scheme (self->text_buffer, scheme); } BzEntryInspector * bz_entry_inspector_new (void) { return g_object_new (BZ_TYPE_ENTRY_INSPECTOR, NULL); } BzResult * bz_entry_inspector_get_result (BzEntryInspector *self) { g_return_val_if_fail (BZ_IS_ENTRY_INSPECTOR (self), NULL); return self->result; } void bz_entry_inspector_set_result (BzEntryInspector *self, BzResult *result) { g_return_if_fail (BZ_IS_ENTRY_INSPECTOR (self)); g_clear_pointer (&self->result, g_object_unref); if (result != NULL) self->result = g_object_ref (result); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RESULT]); } /* End of bz-entry-inspector.c */ bazaar-org-bazaar-b6e9a65/src/bz-entry-inspector.h000066400000000000000000000024001522167256300221430ustar00rootroot00000000000000/* bz-entry-inspector.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-result.h" G_BEGIN_DECLS #define BZ_TYPE_ENTRY_INSPECTOR (bz_entry_inspector_get_type ()) G_DECLARE_FINAL_TYPE (BzEntryInspector, bz_entry_inspector, BZ, ENTRY_INSPECTOR, AdwWindow) BzEntryInspector * bz_entry_inspector_new (void); BzResult * bz_entry_inspector_get_result (BzEntryInspector *self); void bz_entry_inspector_set_result (BzEntryInspector *self, BzResult *result); G_END_DECLS /* End of bz-entry-inspector.h */ bazaar-org-bazaar-b6e9a65/src/bz-entry-selection-row.blp000066400000000000000000000010631522167256300232610ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzEntrySelectionRow: Adw.ActionRow { activatable-widget: radio; [prefix] CheckButton radio { valign: center; } [suffix] Image { visible: bind template.repository as <$BzRepository>.is-user; icon-name: "person-symbolic"; has-tooltip: true; tooltip-text: _("For This User Only"); } title: bind template.repository as <$BzRepository>.title; subtitle: bind $get_subtitle(template.entry as <$BzFlatpakEntry>.flatpak-version, template.repository as <$BzRepository>.is-user) as ; } bazaar-org-bazaar-b6e9a65/src/bz-entry-selection-row.c000066400000000000000000000114621522167256300227320ustar00rootroot00000000000000/* bz-entry-selection-row.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-entry-selection-row.h" #include "bz-flatpak-entry.h" #include "bz-template-callbacks.h" struct _BzEntrySelectionRow { AdwActionRow parent_instance; GtkCheckButton *radio; BzFlatpakEntry *entry; BzRepository *repository; }; G_DEFINE_FINAL_TYPE (BzEntrySelectionRow, bz_entry_selection_row, ADW_TYPE_ACTION_ROW) enum { PROP_0, PROP_ENTRY, PROP_REPOSITORY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_entry_selection_row_dispose (GObject *object) { BzEntrySelectionRow *self = BZ_ENTRY_SELECTION_ROW (object); g_clear_object (&self->entry); g_clear_object (&self->repository); G_OBJECT_CLASS (bz_entry_selection_row_parent_class)->dispose (object); } static void bz_entry_selection_row_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzEntrySelectionRow *self = BZ_ENTRY_SELECTION_ROW (object); switch (prop_id) { case PROP_ENTRY: g_value_set_object (value, self->entry); break; case PROP_REPOSITORY: g_value_set_object (value, self->repository); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_selection_row_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzEntrySelectionRow *self = BZ_ENTRY_SELECTION_ROW (object); switch (prop_id) { case PROP_ENTRY: g_clear_object (&self->entry); self->entry = g_value_dup_object (value); break; case PROP_REPOSITORY: g_clear_object (&self->repository); self->repository = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * get_subtitle (gpointer object, const char *version, gboolean is_user) { const char *scope = is_user ? _ ("this user") : _ ("all users"); return g_strdup_printf ("%s • %s", version, scope); } static void bz_entry_selection_row_class_init (BzEntrySelectionRowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_entry_selection_row_dispose; object_class->get_property = bz_entry_selection_row_get_property; object_class->set_property = bz_entry_selection_row_set_property; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_FLATPAK_ENTRY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_REPOSITORY] = g_param_spec_object ( "repository", NULL, NULL, BZ_TYPE_REPOSITORY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_REPOSITORY); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-entry-selection-row.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_callback (widget_class, get_subtitle); gtk_widget_class_bind_template_child (widget_class, BzEntrySelectionRow, radio); } static void bz_entry_selection_row_init (BzEntrySelectionRow *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzEntrySelectionRow * bz_entry_selection_row_new (BzFlatpakEntry *entry, BzRepository *repository) { g_return_val_if_fail (BZ_IS_ENTRY (entry), NULL); return g_object_new (BZ_TYPE_ENTRY_SELECTION_ROW, "entry", entry, "repository", repository, NULL); } GtkCheckButton * bz_entry_selection_row_get_radio (BzEntrySelectionRow *self) { g_return_val_if_fail (BZ_IS_ENTRY_SELECTION_ROW (self), NULL); return self->radio; } bazaar-org-bazaar-b6e9a65/src/bz-entry-selection-row.h000066400000000000000000000024021522167256300227310ustar00rootroot00000000000000/* bz-entry-selection-row.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include "bz-flatpak-entry.h" #include "bz-repository.h" G_BEGIN_DECLS #define BZ_TYPE_ENTRY_SELECTION_ROW (bz_entry_selection_row_get_type ()) G_DECLARE_FINAL_TYPE (BzEntrySelectionRow, bz_entry_selection_row, BZ, ENTRY_SELECTION_ROW, AdwActionRow) BzEntrySelectionRow * bz_entry_selection_row_new (BzFlatpakEntry *entry, BzRepository *repository); GtkCheckButton * bz_entry_selection_row_get_radio (BzEntrySelectionRow *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-entry.c000066400000000000000000002600261522167256300201440ustar00rootroot00000000000000/* bz-entry.c * * Copyright 2025 Adam Masciola * * 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 */ /* TODO: clean this mess up */ #define G_LOG_DOMAIN "BAZAAR::ENTRY" #define BAZAAR_MODULE "entry" #include #include "bz-app-permissions.h" #include "bz-async-texture.h" #include "bz-category-flags.h" #include "bz-country-data-point.h" #include "bz-data-point.h" #include "bz-entry.h" #include "bz-env.h" #include "bz-global-net.h" #include "bz-io.h" #include "bz-release.h" #include "bz-repository.h" #include "bz-serializable.h" #include "bz-url.h" #include "bz-util.h" #include "bz-verification-status.h" G_DEFINE_FLAGS_TYPE ( BzEntryKind, bz_entry_kind, G_DEFINE_ENUM_VALUE (BZ_ENTRY_KIND_APPLICATION, "application"), G_DEFINE_ENUM_VALUE (BZ_ENTRY_KIND_RUNTIME, "runtime"), G_DEFINE_ENUM_VALUE (BZ_ENTRY_KIND_ADDON, "addon")) G_DEFINE_FLAGS_TYPE ( BzControlType, bz_control_type, G_DEFINE_ENUM_VALUE (BZ_CONTROL_NONE, "none"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_POINTING, "pointing"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_KEYBOARD, "keyboard"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_CONSOLE, "console"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_TABLET, "tablet"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_TOUCH, "touch"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_GAMEPAD, "gamepad"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_TV_REMOTE, "tv-remote"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_VOICE, "voice"), G_DEFINE_ENUM_VALUE (BZ_CONTROL_VISION, "vision")) G_DEFINE_ENUM_TYPE ( BzRelationType, bz_relation_type, G_DEFINE_ENUM_VALUE (BZ_RELATION_REQUIRES, "requires"), G_DEFINE_ENUM_VALUE (BZ_RELATION_RECOMMENDS, "recommends"), G_DEFINE_ENUM_VALUE (BZ_RELATION_SUPPORTS, "supports")) typedef struct { gint hold; gboolean installed; char *installed_version; gboolean reinstallable; gboolean searchable; guint kinds; GListModel *addons; char *id; char *unique_id; char *unique_id_checksum; char *title; char *eol; char *description; char *long_description; char *remote_repo_name; char *url; guint64 size; guint64 installed_size; GdkPaintable *icon_paintable; GIcon *mini_icon; GdkPaintable *remote_repo_icon; char *search_tokens; char *metadata_license; char *project_license; gboolean is_floss; char *project_group; char *developer; char *developer_id; GListModel *developer_apps; GListModel *screenshot_paintables; GListModel *screenshot_captions; GdkPaintable *thumbnail_paintable; GListModel *share_urls; char *donation_url; char *ratings_summary; GListModel *version_history; char *light_accent_color; char *dark_accent_color; gboolean is_mobile_friendly; guint required_controls; guint recommended_controls; guint supported_controls; gint min_display_length; gint max_display_length; AsContentRating *content_rating; GListModel *keywords; BzCategoryFlags categories; BzAppPermissions *permissions; gboolean is_flathub; BzVerificationStatus *verification_status; GListModel *download_stats; GListModel *download_stats_per_country; int recent_downloads; int total_downloads; int favorites_count; GHashTable *flathub_prop_queries; } BzEntryPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (BzEntry, bz_entry, G_TYPE_OBJECT); enum { PROP_0, PROP_HOLDING, PROP_INSTALLED, PROP_INSTALLED_VERSION, PROP_REINSTALLABLE, PROP_SEARCHABLE, PROP_KINDS, PROP_ADDONS, PROP_ID, PROP_UNIQUE_ID, PROP_UNIQUE_ID_CHECKSUM, PROP_TITLE, PROP_EOL, PROP_DESCRIPTION, PROP_DOWNLOAD_STATS_PER_COUNTRY, PROP_LONG_DESCRIPTION, PROP_REMOTE_REPO_NAME, PROP_URL, PROP_SIZE, PROP_INSTALLED_SIZE, PROP_ICON_PAINTABLE, PROP_MINI_ICON, PROP_SEARCH_TOKENS, PROP_REMOTE_REPO_ICON, PROP_METADATA_LICENSE, PROP_PROJECT_LICENSE, PROP_IS_FLOSS, PROP_PROJECT_GROUP, PROP_DEVELOPER, PROP_DEVELOPER_ID, PROP_DEVELOPER_APPS, PROP_SCREENSHOT_PAINTABLES, PROP_SCREENSHOT_CAPTIONS, PROP_THUMBNAIL_PAINTABLE, PROP_SHARE_URLS, PROP_DONATION_URL, PROP_RATINGS_SUMMARY, PROP_VERSION_HISTORY, PROP_IS_FLATHUB, PROP_VERIFICATION_STATUS, PROP_DOWNLOAD_STATS, PROP_RECENT_DOWNLOADS, PROP_TOTAL_DOWNLOADS, PROP_FAVORITES_COUNT, PROP_LIGHT_ACCENT_COLOR, PROP_DARK_ACCENT_COLOR, PROP_IS_MOBILE_FRIENDLY, PROP_REQUIRED_CONTROLS, PROP_RECOMMENDED_CONTROLS, PROP_SUPPORTED_CONTROLS, PROP_MIN_DISPLAY_LENGTH, PROP_MAX_DISPLAY_LENGTH, PROP_CONTENT_RATING, PROP_KEYWORDS, PROP_CATEGORIES, PROP_PERMISSIONS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; BZ_DEFINE_DATA ( query_flathub, QueryFlathub, { GWeakRef self; int prop; char *id; char *developer; }, g_weak_ref_clear (&self->self); BZ_RELEASE_DATA (id, g_free); BZ_RELEASE_DATA (developer, g_free)); static DexFuture * query_flathub_fiber (QueryFlathubData *data); static DexFuture * query_flathub_then (DexFuture *future, QueryFlathubData *data); static void query_flathub (BzEntry *self, int prop); static void download_stats_per_day_foreach (JsonObject *object, const gchar *member_name, JsonNode *member_node, GListStore *store); static void download_stats_per_country_foreach (JsonObject *object, const gchar *member_name, JsonNode *member_node, GListStore *store); static gboolean maybe_save_paintable (BzEntryPrivate *priv, const char *key, GdkPaintable *paintable, GVariantBuilder *builder); static GdkPaintable * make_async_texture (GVariant *parse); static void clear_entry (BzEntry *self); static void bz_entry_dispose (GObject *object) { BzEntry *self = BZ_ENTRY (object); clear_entry (self); G_OBJECT_CLASS (bz_entry_parent_class)->dispose (object); } static void bz_entry_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzEntry *self = BZ_ENTRY (object); BzEntryPrivate *priv = bz_entry_get_instance_private (self); switch (prop_id) { case PROP_HOLDING: g_value_set_boolean (value, bz_entry_is_holding (self)); break; case PROP_INSTALLED: g_value_set_boolean (value, priv->installed); break; case PROP_INSTALLED_VERSION: g_value_set_string (value, priv->installed_version); break; case PROP_REINSTALLABLE: g_value_set_boolean (value, priv->reinstallable); break; case PROP_SEARCHABLE: g_value_set_boolean (value, priv->searchable); break; case PROP_ADDONS: g_value_set_object (value, priv->addons); break; case PROP_KINDS: g_value_set_flags (value, priv->kinds); break; case PROP_ID: g_value_set_string (value, priv->id); break; case PROP_UNIQUE_ID: g_value_set_string (value, priv->unique_id); break; case PROP_UNIQUE_ID_CHECKSUM: g_value_set_string (value, priv->unique_id_checksum); break; case PROP_TITLE: g_value_set_string (value, priv->title); break; case PROP_EOL: g_value_set_string (value, priv->eol); break; case PROP_DESCRIPTION: g_value_set_string (value, priv->description); break; case PROP_LONG_DESCRIPTION: g_value_set_string (value, priv->long_description); break; case PROP_REMOTE_REPO_NAME: g_value_set_string (value, priv->remote_repo_name); break; case PROP_URL: g_value_set_string (value, priv->url); break; case PROP_SIZE: g_value_set_uint64 (value, priv->size); break; case PROP_INSTALLED_SIZE: g_value_set_uint64 (value, priv->installed_size); break; case PROP_ICON_PAINTABLE: g_value_set_object (value, priv->icon_paintable); break; case PROP_MINI_ICON: g_value_set_object (value, priv->mini_icon); break; case PROP_SEARCH_TOKENS: g_value_set_boxed (value, priv->search_tokens); break; case PROP_REMOTE_REPO_ICON: g_value_set_object (value, priv->remote_repo_icon); break; case PROP_METADATA_LICENSE: g_value_set_string (value, priv->metadata_license); break; case PROP_PROJECT_LICENSE: g_value_set_string (value, priv->project_license); break; case PROP_IS_FLOSS: g_value_set_boolean (value, priv->is_floss); break; case PROP_PROJECT_GROUP: g_value_set_string (value, priv->project_group); break; case PROP_DEVELOPER: g_value_set_string (value, priv->developer); break; case PROP_DEVELOPER_ID: g_value_set_string (value, priv->developer_id); break; case PROP_DEVELOPER_APPS: query_flathub (self, PROP_DEVELOPER_APPS); g_value_set_object (value, priv->developer_apps); break; case PROP_SCREENSHOT_PAINTABLES: g_value_set_object (value, priv->screenshot_paintables); break; case PROP_SCREENSHOT_CAPTIONS: g_value_set_object (value, priv->screenshot_captions); break; case PROP_THUMBNAIL_PAINTABLE: g_value_set_object (value, priv->thumbnail_paintable); break; case PROP_SHARE_URLS: g_value_set_object (value, priv->share_urls); break; case PROP_DONATION_URL: g_value_set_string (value, priv->donation_url); break; case PROP_RATINGS_SUMMARY: g_value_set_string (value, priv->ratings_summary); break; case PROP_VERSION_HISTORY: g_value_set_object (value, priv->version_history); break; case PROP_LIGHT_ACCENT_COLOR: g_value_set_string (value, priv->light_accent_color); break; case PROP_DARK_ACCENT_COLOR: g_value_set_string (value, priv->dark_accent_color); break; case PROP_IS_MOBILE_FRIENDLY: g_value_set_boolean (value, priv->is_mobile_friendly); break; case PROP_REQUIRED_CONTROLS: g_value_set_flags (value, priv->required_controls); break; case PROP_RECOMMENDED_CONTROLS: g_value_set_flags (value, priv->recommended_controls); break; case PROP_SUPPORTED_CONTROLS: g_value_set_flags (value, priv->supported_controls); break; case PROP_MIN_DISPLAY_LENGTH: g_value_set_int (value, priv->min_display_length); break; case PROP_MAX_DISPLAY_LENGTH: g_value_set_int (value, priv->max_display_length); break; case PROP_CONTENT_RATING: g_value_set_object (value, priv->content_rating); break; case PROP_KEYWORDS: g_value_set_object (value, priv->keywords); break; case PROP_CATEGORIES: g_value_set_uint (value, priv->categories); break; case PROP_PERMISSIONS: g_value_set_object (value, priv->permissions); break; case PROP_IS_FLATHUB: g_value_set_boolean (value, priv->is_flathub); break; case PROP_VERIFICATION_STATUS: g_value_set_object (value, priv->verification_status); break; case PROP_DOWNLOAD_STATS: query_flathub (self, PROP_DOWNLOAD_STATS); g_value_set_object (value, priv->download_stats); break; case PROP_DOWNLOAD_STATS_PER_COUNTRY: query_flathub (self, PROP_DOWNLOAD_STATS_PER_COUNTRY); g_value_set_object (value, priv->download_stats_per_country); break; case PROP_RECENT_DOWNLOADS: query_flathub (self, PROP_RECENT_DOWNLOADS); g_value_set_int (value, priv->recent_downloads); break; case PROP_TOTAL_DOWNLOADS: query_flathub (self, PROP_TOTAL_DOWNLOADS); g_value_set_int (value, priv->total_downloads); break; case PROP_FAVORITES_COUNT: query_flathub (self, PROP_FAVORITES_COUNT); g_value_set_int (value, priv->favorites_count); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzEntry *self = BZ_ENTRY (object); BzEntryPrivate *priv = bz_entry_get_instance_private (self); switch (prop_id) { case PROP_INSTALLED: priv->installed = g_value_get_boolean (value); break; case PROP_INSTALLED_VERSION: g_clear_pointer (&priv->installed_version, g_free); priv->installed_version = g_value_dup_string (value); break; case PROP_REINSTALLABLE: priv->reinstallable = g_value_get_boolean (value); break; case PROP_SEARCHABLE: priv->searchable = g_value_get_boolean (value); break; case PROP_ADDONS: g_clear_object (&priv->addons); priv->addons = g_value_dup_object (value); break; case PROP_KINDS: priv->kinds = g_value_get_flags (value); break; case PROP_ID: g_clear_pointer (&priv->id, g_free); priv->id = g_value_dup_string (value); break; case PROP_UNIQUE_ID: g_clear_pointer (&priv->unique_id, g_free); priv->unique_id = g_value_dup_string (value); break; case PROP_UNIQUE_ID_CHECKSUM: g_clear_pointer (&priv->unique_id_checksum, g_free); priv->unique_id_checksum = g_value_dup_string (value); break; case PROP_TITLE: g_clear_pointer (&priv->title, g_free); priv->title = g_value_dup_string (value); break; case PROP_EOL: g_clear_pointer (&priv->eol, g_free); priv->eol = g_value_dup_string (value); break; case PROP_DESCRIPTION: g_clear_pointer (&priv->description, g_free); priv->description = g_value_dup_string (value); break; case PROP_LONG_DESCRIPTION: g_clear_pointer (&priv->long_description, g_free); priv->long_description = g_value_dup_string (value); break; case PROP_REMOTE_REPO_NAME: g_clear_pointer (&priv->remote_repo_name, g_free); priv->remote_repo_name = g_value_dup_string (value); priv->is_flathub = g_strcmp0 (priv->remote_repo_name, "flathub") == 0; g_object_notify_by_pspec (object, props[PROP_IS_FLATHUB]); break; case PROP_URL: g_clear_pointer (&priv->url, g_free); priv->url = g_value_dup_string (value); break; case PROP_SIZE: priv->size = g_value_get_uint64 (value); break; case PROP_INSTALLED_SIZE: priv->installed_size = g_value_get_uint64 (value); break; case PROP_ICON_PAINTABLE: g_clear_object (&priv->icon_paintable); priv->icon_paintable = g_value_dup_object (value); break; case PROP_MINI_ICON: g_clear_object (&priv->mini_icon); priv->mini_icon = g_value_dup_object (value); break; case PROP_SEARCH_TOKENS: g_clear_pointer (&priv->search_tokens, g_free); priv->search_tokens = g_value_dup_string (value); break; case PROP_REMOTE_REPO_ICON: g_clear_object (&priv->remote_repo_icon); priv->remote_repo_icon = g_value_dup_object (value); break; case PROP_METADATA_LICENSE: g_clear_pointer (&priv->metadata_license, g_free); priv->metadata_license = g_value_dup_string (value); break; case PROP_PROJECT_LICENSE: g_clear_pointer (&priv->project_license, g_free); priv->project_license = g_value_dup_string (value); break; case PROP_IS_FLOSS: priv->is_floss = g_value_get_boolean (value); break; case PROP_PROJECT_GROUP: g_clear_pointer (&priv->project_group, g_free); priv->project_group = g_value_dup_string (value); break; case PROP_DEVELOPER: g_clear_pointer (&priv->developer, g_free); priv->developer = g_value_dup_string (value); break; case PROP_DEVELOPER_ID: g_clear_pointer (&priv->developer_id, g_free); priv->developer_id = g_value_dup_string (value); break; case PROP_DEVELOPER_APPS: g_clear_object (&priv->developer_apps); priv->developer_apps = g_value_dup_object (value); break; case PROP_SCREENSHOT_PAINTABLES: g_clear_object (&priv->screenshot_paintables); priv->screenshot_paintables = g_value_dup_object (value); break; case PROP_SCREENSHOT_CAPTIONS: g_clear_object (&priv->screenshot_captions); priv->screenshot_captions = g_value_dup_object (value); break; case PROP_THUMBNAIL_PAINTABLE: g_clear_object (&priv->thumbnail_paintable); priv->thumbnail_paintable = g_value_dup_object (value); break; case PROP_SHARE_URLS: g_clear_object (&priv->share_urls); priv->share_urls = g_value_dup_object (value); break; case PROP_DONATION_URL: g_clear_pointer (&priv->donation_url, g_free); priv->donation_url = g_value_dup_string (value); break; case PROP_RATINGS_SUMMARY: g_clear_pointer (&priv->ratings_summary, g_free); priv->ratings_summary = g_value_dup_string (value); break; case PROP_VERSION_HISTORY: g_clear_object (&priv->version_history); priv->version_history = g_value_dup_object (value); break; case PROP_LIGHT_ACCENT_COLOR: g_clear_pointer (&priv->light_accent_color, g_free); priv->light_accent_color = g_value_dup_string (value); break; case PROP_DARK_ACCENT_COLOR: g_clear_pointer (&priv->dark_accent_color, g_free); priv->dark_accent_color = g_value_dup_string (value); break; case PROP_IS_MOBILE_FRIENDLY: priv->is_mobile_friendly = g_value_get_boolean (value); break; case PROP_REQUIRED_CONTROLS: priv->required_controls = g_value_get_flags (value); break; case PROP_RECOMMENDED_CONTROLS: priv->recommended_controls = g_value_get_flags (value); break; case PROP_SUPPORTED_CONTROLS: priv->supported_controls = g_value_get_flags (value); break; case PROP_MIN_DISPLAY_LENGTH: priv->min_display_length = g_value_get_int (value); break; case PROP_MAX_DISPLAY_LENGTH: priv->max_display_length = g_value_get_int (value); break; case PROP_CONTENT_RATING: g_clear_object (&priv->content_rating); priv->content_rating = g_value_dup_object (value); break; case PROP_KEYWORDS: g_clear_object (&priv->keywords); priv->keywords = g_value_dup_object (value); break; case PROP_CATEGORIES: priv->categories = g_value_get_uint (value); break; case PROP_PERMISSIONS: g_clear_object (&priv->permissions); priv->permissions = g_value_dup_object (value); break; case PROP_IS_FLATHUB: priv->is_flathub = g_value_get_boolean (value); break; case PROP_VERIFICATION_STATUS: g_clear_object (&priv->verification_status); priv->verification_status = g_value_dup_object (value); break; case PROP_DOWNLOAD_STATS: case PROP_DOWNLOAD_STATS_PER_COUNTRY: { if (prop_id == PROP_DOWNLOAD_STATS) { g_clear_object (&priv->download_stats); priv->download_stats = g_value_dup_object (value); } else { g_clear_object (&priv->download_stats_per_country); priv->download_stats_per_country = g_value_dup_object (value); } } break; case PROP_RECENT_DOWNLOADS: priv->recent_downloads = g_value_get_int (value); break; case PROP_TOTAL_DOWNLOADS: priv->total_downloads = g_value_get_int (value); break; case PROP_FAVORITES_COUNT: priv->favorites_count = g_value_get_int (value); break; case PROP_HOLDING: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_entry_class_init (BzEntryClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_entry_set_property; object_class->get_property = bz_entry_get_property; object_class->dispose = bz_entry_dispose; props[PROP_HOLDING] = g_param_spec_boolean ( "holding", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_INSTALLED] = g_param_spec_boolean ( "installed", NULL, NULL, FALSE, G_PARAM_READWRITE); props[PROP_INSTALLED_VERSION] = g_param_spec_string ( "installed-version", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_REINSTALLABLE] = g_param_spec_boolean ( "reinstallable", NULL, NULL, TRUE, G_PARAM_READWRITE); props[PROP_SEARCHABLE] = g_param_spec_boolean ( "searchable", NULL, NULL, TRUE, G_PARAM_READWRITE); props[PROP_ADDONS] = g_param_spec_object ( "addons", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_KINDS] = g_param_spec_flags ( "kinds", NULL, NULL, BZ_TYPE_ENTRY_KIND, 0, G_PARAM_READWRITE); props[PROP_ID] = g_param_spec_string ( "id", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_UNIQUE_ID] = g_param_spec_string ( "unique-id", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_UNIQUE_ID_CHECKSUM] = g_param_spec_string ( "unique-id-checksum", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_TITLE] = g_param_spec_string ( "title", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_EOL] = g_param_spec_string ( "eol", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_DESCRIPTION] = g_param_spec_string ( "description", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_LONG_DESCRIPTION] = g_param_spec_string ( "long-description", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_URL] = g_param_spec_string ( "url", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_REMOTE_REPO_NAME] = g_param_spec_string ( "remote-repo-name", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_SIZE] = g_param_spec_uint64 ( "size", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READWRITE); props[PROP_INSTALLED_SIZE] = g_param_spec_uint64 ( "installed-size", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READWRITE); props[PROP_ICON_PAINTABLE] = g_param_spec_object ( "icon-paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE); props[PROP_MINI_ICON] = g_param_spec_object ( "mini-icon", NULL, NULL, G_TYPE_ICON, G_PARAM_READWRITE); props[PROP_SEARCH_TOKENS] = g_param_spec_string ( "search-tokens", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_REMOTE_REPO_ICON] = g_param_spec_object ( "remote-repo-icon", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE); props[PROP_METADATA_LICENSE] = g_param_spec_string ( "metadata-license", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_PROJECT_LICENSE] = g_param_spec_string ( "project-license", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_IS_FLOSS] = g_param_spec_boolean ( "is-floss", NULL, NULL, FALSE, G_PARAM_READWRITE); props[PROP_PROJECT_GROUP] = g_param_spec_string ( "project-group", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_DEVELOPER] = g_param_spec_string ( "developer", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_DEVELOPER_ID] = g_param_spec_string ( "developer-id", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_DEVELOPER_APPS] = g_param_spec_object ( "developer-apps", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_SCREENSHOT_PAINTABLES] = g_param_spec_object ( "screenshot-paintables", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_SCREENSHOT_CAPTIONS] = g_param_spec_object ( "screenshot-captions", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_THUMBNAIL_PAINTABLE] = g_param_spec_object ( "thumbnail-paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE); props[PROP_SHARE_URLS] = g_param_spec_object ( "share-urls", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_DONATION_URL] = g_param_spec_string ( "donation-url", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_RATINGS_SUMMARY] = g_param_spec_string ( "ratings-summary", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_VERSION_HISTORY] = g_param_spec_object ( "version-history", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_LIGHT_ACCENT_COLOR] = g_param_spec_string ( "light-accent-color", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_DARK_ACCENT_COLOR] = g_param_spec_string ( "dark-accent-color", NULL, NULL, NULL, G_PARAM_READWRITE); props[PROP_IS_MOBILE_FRIENDLY] = g_param_spec_boolean ( "is-mobile-friendly", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_REQUIRED_CONTROLS] = g_param_spec_flags ( "required-controls", NULL, NULL, BZ_TYPE_CONTROL_TYPE, BZ_CONTROL_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_RECOMMENDED_CONTROLS] = g_param_spec_flags ( "recommended-controls", NULL, NULL, BZ_TYPE_CONTROL_TYPE, BZ_CONTROL_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_SUPPORTED_CONTROLS] = g_param_spec_flags ( "supported-controls", NULL, NULL, BZ_TYPE_CONTROL_TYPE, BZ_CONTROL_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_MIN_DISPLAY_LENGTH] = g_param_spec_int ( "min-display-length", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_MAX_DISPLAY_LENGTH] = g_param_spec_int ( "max-display-length", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_CONTENT_RATING] = g_param_spec_object ( "content-rating", NULL, NULL, AS_TYPE_CONTENT_RATING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_KEYWORDS] = g_param_spec_object ( "keywords", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_CATEGORIES] = g_param_spec_uint ( "categories", NULL, NULL, 0, G_MAXUINT, BZ_CATEGORY_FLAGS_NONE, G_PARAM_READWRITE); props[PROP_PERMISSIONS] = g_param_spec_object ( "permissions", NULL, NULL, BZ_TYPE_APP_PERMISSIONS, G_PARAM_READWRITE); props[PROP_IS_FLATHUB] = g_param_spec_boolean ( "is-flathub", NULL, NULL, FALSE, G_PARAM_READWRITE); props[PROP_VERIFICATION_STATUS] = g_param_spec_object ( "verification-status", NULL, NULL, BZ_TYPE_VERIFICATION_STATUS, G_PARAM_READWRITE); props[PROP_DOWNLOAD_STATS] = g_param_spec_object ( "download-stats", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_DOWNLOAD_STATS_PER_COUNTRY] = g_param_spec_object ( "download-stats-per-country", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_RECENT_DOWNLOADS] = g_param_spec_int ( "recent-downloads", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE); props[PROP_TOTAL_DOWNLOADS] = g_param_spec_int ( "total-downloads", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE); props[PROP_FAVORITES_COUNT] = g_param_spec_int ( "favorites-count", NULL, NULL, -1, G_MAXINT, -1, G_PARAM_READWRITE); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_entry_init (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); priv->hold = 0; priv->reinstallable = TRUE; priv->searchable = TRUE; priv->favorites_count = -1; } static void bz_entry_real_serialize (BzSerializable *serializable, GVariantBuilder *builder) { BzEntry *self = BZ_ENTRY (serializable); BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_variant_builder_add (builder, "{sv}", "installed", g_variant_new_boolean (priv->installed)); if (priv->installed_version != NULL) g_variant_builder_add (builder, "{sv}", "installed-version", g_variant_new_string (priv->installed_version)); g_variant_builder_add (builder, "{sv}", "kinds", g_variant_new_uint32 (priv->kinds)); g_variant_builder_add (builder, "{sv}", "reinstallable", g_variant_new_boolean (priv->reinstallable)); g_variant_builder_add (builder, "{sv}", "searchable", g_variant_new_boolean (priv->searchable)); if (priv->addons != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->addons); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (priv->addons, i); g_variant_builder_add (sub_builder, "s", gtk_string_object_get_string (string)); } g_variant_builder_add (builder, "{sv}", "addons", g_variant_builder_end (sub_builder)); } } if (priv->id != NULL) g_variant_builder_add (builder, "{sv}", "id", g_variant_new_string (priv->id)); if (priv->unique_id != NULL) g_variant_builder_add (builder, "{sv}", "unique-id", g_variant_new_string (priv->unique_id)); if (priv->unique_id_checksum != NULL) g_variant_builder_add (builder, "{sv}", "unique-id-checksum", g_variant_new_string (priv->unique_id_checksum)); if (priv->title != NULL) g_variant_builder_add (builder, "{sv}", "title", g_variant_new_string (priv->title)); if (priv->eol != NULL) g_variant_builder_add (builder, "{sv}", "eol", g_variant_new_string (priv->eol)); if (priv->description != NULL) g_variant_builder_add (builder, "{sv}", "description", g_variant_new_string (priv->description)); if (priv->long_description != NULL) g_variant_builder_add (builder, "{sv}", "long-description", g_variant_new_string (priv->long_description)); if (priv->remote_repo_name != NULL) g_variant_builder_add (builder, "{sv}", "remote-repo-name", g_variant_new_string (priv->remote_repo_name)); if (priv->url != NULL) g_variant_builder_add (builder, "{sv}", "url", g_variant_new_string (priv->url)); if (priv->size > 0) g_variant_builder_add (builder, "{sv}", "size", g_variant_new_uint64 (priv->size)); if (priv->installed_size > 0) g_variant_builder_add (builder, "{sv}", "installed-size", g_variant_new_uint64 (priv->installed_size)); if (priv->icon_paintable != NULL) maybe_save_paintable (priv, "icon-paintable", priv->icon_paintable, builder); if (priv->mini_icon != NULL) { g_autoptr (GVariant) serialized = NULL; serialized = g_icon_serialize (priv->mini_icon); g_variant_builder_add (builder, "{sv}", "mini-icon", serialized); } if (priv->remote_repo_icon != NULL) maybe_save_paintable (priv, "remote-repo-icon", priv->remote_repo_icon, builder); if (priv->search_tokens != NULL) g_variant_builder_add (builder, "{sv}", "search-tokens", g_variant_new_string (priv->search_tokens)); if (priv->metadata_license != NULL) g_variant_builder_add (builder, "{sv}", "metadata-license", g_variant_new_string (priv->metadata_license)); if (priv->project_license != NULL) g_variant_builder_add (builder, "{sv}", "project-license", g_variant_new_string (priv->project_license)); g_variant_builder_add (builder, "{sv}", "is-floss", g_variant_new_boolean (priv->is_floss)); if (priv->project_group != NULL) g_variant_builder_add (builder, "{sv}", "project-group", g_variant_new_string (priv->project_group)); if (priv->developer != NULL) g_variant_builder_add (builder, "{sv}", "developer", g_variant_new_string (priv->developer)); if (priv->developer_id != NULL) g_variant_builder_add (builder, "{sv}", "developer-id", g_variant_new_string (priv->developer_id)); if (priv->screenshot_paintables != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->screenshot_paintables); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); for (guint i = 0; i < n_items; i++) { g_autoptr (GdkPaintable) paintable = NULL; g_autofree char *key = NULL; paintable = g_list_model_get_item (priv->screenshot_paintables, i); key = g_strdup_printf ("screenshot_%d.png", i); maybe_save_paintable (priv, key, paintable, sub_builder); } g_variant_builder_add (builder, "{sv}", "screenshot-paintables", g_variant_builder_end (sub_builder)); } } if (priv->screenshot_captions != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->screenshot_captions); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (priv->screenshot_captions, i); g_variant_builder_add (sub_builder, "s", gtk_string_object_get_string (string)); } g_variant_builder_add (builder, "{sv}", "screenshot-captions", g_variant_builder_end (sub_builder)); } } if (priv->thumbnail_paintable != NULL) maybe_save_paintable (priv, "thumbnail-paintable", priv->thumbnail_paintable, builder); if (priv->share_urls != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->share_urls); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ss)")); for (guint i = 0; i < n_items; i++) { g_autoptr (BzUrl) url = NULL; const char *id = NULL; const char *url_str = NULL; url = g_list_model_get_item (priv->share_urls, i); id = bz_url_get_id (url); url_str = bz_url_get_url (url); g_variant_builder_add (sub_builder, "(ss)", id ? id : "", url_str ? url_str : ""); } g_variant_builder_add (builder, "{sv}", "share-urls", g_variant_builder_end (sub_builder)); } } if (priv->donation_url != NULL) g_variant_builder_add (builder, "{sv}", "donation-url", g_variant_new_string (priv->donation_url)); if (priv->version_history != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->version_history); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(mstmsms)")); for (guint i = 0; i < n_items; i++) { g_autoptr (BzRelease) release = NULL; guint64 timestamp = 0; const char *url = NULL; const char *version = NULL; const char *description = NULL; release = g_list_model_get_item (priv->version_history, i); timestamp = bz_release_get_timestamp (release); url = bz_release_get_url (release); version = bz_release_get_version (release); description = bz_release_get_description (release); g_variant_builder_add ( sub_builder, "(mstmsms)", description, timestamp, url, version); } g_variant_builder_add (builder, "{sv}", "version-history", g_variant_builder_end (sub_builder)); } } if (priv->light_accent_color != NULL) g_variant_builder_add (builder, "{sv}", "light-accent-color", g_variant_new_string (priv->light_accent_color)); if (priv->dark_accent_color != NULL) g_variant_builder_add (builder, "{sv}", "dark-accent-color", g_variant_new_string (priv->dark_accent_color)); g_variant_builder_add (builder, "{sv}", "is-mobile-friendly", g_variant_new_boolean (priv->is_mobile_friendly)); if (priv->required_controls != BZ_CONTROL_NONE) g_variant_builder_add (builder, "{sv}", "required-controls", g_variant_new_uint32 (priv->required_controls)); if (priv->recommended_controls != BZ_CONTROL_NONE) g_variant_builder_add (builder, "{sv}", "recommended-controls", g_variant_new_uint32 (priv->recommended_controls)); if (priv->supported_controls != BZ_CONTROL_NONE) g_variant_builder_add (builder, "{sv}", "supported-controls", g_variant_new_uint32 (priv->supported_controls)); if (priv->min_display_length > 0) g_variant_builder_add (builder, "{sv}", "min-display-length", g_variant_new_int32 (priv->min_display_length)); if (priv->max_display_length > 0) g_variant_builder_add (builder, "{sv}", "max-display-length", g_variant_new_int32 (priv->max_display_length)); if (priv->content_rating != NULL) { const gchar *kind = as_content_rating_get_kind (priv->content_rating); g_autoptr (GVariantBuilder) sub_builder = NULL; g_autofree const gchar **rating_ids = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ss)")); rating_ids = as_content_rating_get_all_rating_ids (); for (gsize i = 0; rating_ids[i] != NULL; i++) { AsContentRatingValue value = as_content_rating_get_value (priv->content_rating, rating_ids[i]); const gchar *value_str = as_content_rating_value_to_string (value); if (value != AS_CONTENT_RATING_VALUE_UNKNOWN) g_variant_builder_add (sub_builder, "(ss)", rating_ids[i], value_str); } g_variant_builder_add (builder, "{sv}", "content-rating-kind", g_variant_new_string (kind ? kind : "oars-1.1")); g_variant_builder_add (builder, "{sv}", "content-rating-values", g_variant_builder_end (sub_builder)); } if (priv->keywords != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->keywords); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (priv->keywords, i); g_variant_builder_add (sub_builder, "s", gtk_string_object_get_string (string)); } g_variant_builder_add (builder, "{sv}", "keywords", g_variant_builder_end (sub_builder)); } } if (priv->categories != BZ_CATEGORY_FLAGS_NONE) g_variant_builder_add (builder, "{sv}", "categories", g_variant_new_uint32 (priv->categories)); if (priv->verification_status != NULL) { gboolean verified = FALSE; g_autofree char *method = NULL; g_autofree char *website = NULL; g_autofree char *login_name = NULL; g_autofree char *login_provider = NULL; g_autofree char *timestamp = NULL; gboolean login_is_organization = FALSE; g_object_get (priv->verification_status, "verified", &verified, "method", &method, "website", &website, "login-name", &login_name, "login-provider", &login_provider, "timestamp", ×tamp, "login-is-organization", &login_is_organization, NULL); g_variant_builder_add (builder, "{sv}", "verification-verified", g_variant_new_boolean (verified)); if (method != NULL) g_variant_builder_add (builder, "{sv}", "verification-method", g_variant_new_string (method)); if (website != NULL) g_variant_builder_add (builder, "{sv}", "verification-website", g_variant_new_string (website)); if (login_name != NULL) g_variant_builder_add (builder, "{sv}", "verification-login-name", g_variant_new_string (login_name)); if (login_provider != NULL) g_variant_builder_add (builder, "{sv}", "verification-login-provider", g_variant_new_string (login_provider)); if (timestamp != NULL) g_variant_builder_add (builder, "{sv}", "verification-timestamp", g_variant_new_string (timestamp)); g_variant_builder_add (builder, "{sv}", "verification-login-is-organization", g_variant_new_boolean (login_is_organization)); } if (priv->permissions != NULL) { bz_app_permissions_serialize (priv->permissions, builder); } g_variant_builder_add (builder, "{sv}", "is-flathub", g_variant_new_boolean (priv->is_flathub)); if (priv->is_flathub) { if (priv->flathub_prop_queries != NULL) { if (g_hash_table_contains (priv->flathub_prop_queries, GINT_TO_POINTER (PROP_DOWNLOAD_STATS)) && priv->download_stats != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (priv->download_stats); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ddms)")); for (guint i = 0; i < n_items; i++) { g_autoptr (BzDataPoint) point = NULL; double independent = 0.0; double dependent = 0.0; const char *label = NULL; point = g_list_model_get_item (priv->download_stats, i); independent = bz_data_point_get_independent (point); dependent = bz_data_point_get_dependent (point); label = bz_data_point_get_label (point); g_variant_builder_add (sub_builder, "(ddms)", independent, dependent, label); } g_variant_builder_add (builder, "{sv}", "download-stats", g_variant_builder_end (sub_builder)); } } if (g_hash_table_contains (priv->flathub_prop_queries, GINT_TO_POINTER (PROP_RECENT_DOWNLOADS))) g_variant_builder_add (builder, "{sv}", "recent-downloads", g_variant_new_int32 (priv->recent_downloads)); if (g_hash_table_contains (priv->flathub_prop_queries, GINT_TO_POINTER (PROP_FAVORITES_COUNT))) g_variant_builder_add (builder, "{sv}", "favorites-count", g_variant_new_int32 (priv->favorites_count)); } } } static gboolean bz_entry_real_deserialize (BzSerializable *serializable, GVariant *import, GError **error) { BzEntry *self = BZ_ENTRY (serializable); BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_autoptr (GVariantIter) iter = NULL; clear_entry (self); iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "installed") == 0) priv->installed = g_variant_get_boolean (value); else if (g_strcmp0 (key, "installed-version") == 0) priv->installed_version = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "kinds") == 0) priv->kinds = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "reinstallable") == 0) priv->reinstallable = g_variant_get_boolean (value); else if (g_strcmp0 (key, "searchable") == 0) priv->searchable = g_variant_get_boolean (value); else if (g_strcmp0 (key, "addons") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) addon_iter = NULL; store = g_list_store_new (GTK_TYPE_STRING_OBJECT); addon_iter = g_variant_iter_new (value); for (;;) { g_autofree char *unique_id = NULL; g_autoptr (GtkStringObject) string = NULL; if (!g_variant_iter_next (addon_iter, "s", &unique_id)) break; string = gtk_string_object_new (unique_id); g_list_store_append (store, string); } priv->addons = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "id") == 0) priv->id = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "unique-id") == 0) priv->unique_id = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "unique-id-checksum") == 0) priv->unique_id_checksum = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "title") == 0) priv->title = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "eol") == 0) priv->eol = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "description") == 0) priv->description = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "long-description") == 0) priv->long_description = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "remote-repo-name") == 0) priv->remote_repo_name = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "url") == 0) priv->url = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "size") == 0) priv->size = g_variant_get_uint64 (value); else if (g_strcmp0 (key, "installed-size") == 0) priv->installed_size = g_variant_get_uint64 (value); else if (g_strcmp0 (key, "icon-paintable") == 0) priv->icon_paintable = make_async_texture (value); else if (g_strcmp0 (key, "mini-icon") == 0) priv->mini_icon = g_icon_deserialize (value); else if (g_strcmp0 (key, "remote-repo-icon") == 0) priv->remote_repo_icon = make_async_texture (value); else if (g_strcmp0 (key, "search-tokens") == 0) priv->search_tokens = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "metadata-license") == 0) priv->metadata_license = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "project-license") == 0) priv->project_license = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "is-floss") == 0) priv->is_floss = g_variant_get_boolean (value); else if (g_strcmp0 (key, "developer") == 0) priv->developer = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "developer-id") == 0) priv->developer_id = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "screenshot-paintables") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) screenshot_iter = NULL; store = g_list_store_new (BZ_TYPE_ASYNC_TEXTURE); screenshot_iter = g_variant_iter_new (value); for (;;) { g_autofree char *basename = NULL; g_autoptr (GVariant) screenshot = NULL; g_autoptr (GdkPaintable) texture = NULL; if (!g_variant_iter_next (screenshot_iter, "{sv}", &basename, &screenshot)) break; texture = make_async_texture (screenshot); g_list_store_append (store, texture); } priv->screenshot_paintables = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "screenshot-captions") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) caption_iter = NULL; store = g_list_store_new (GTK_TYPE_STRING_OBJECT); caption_iter = g_variant_iter_new (value); for (;;) { g_autofree char *caption = NULL; g_autoptr (GtkStringObject) string = NULL; if (!g_variant_iter_next (caption_iter, "s", &caption)) break; string = gtk_string_object_new (caption); g_list_store_append (store, string); } priv->screenshot_captions = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "thumbnail-paintable") == 0) priv->thumbnail_paintable = make_async_texture (value); else if (g_strcmp0 (key, "share-urls") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) url_iter = NULL; store = g_list_store_new (BZ_TYPE_URL); url_iter = g_variant_iter_new (value); for (;;) { g_autofree char *id = NULL; g_autofree char *url_str = NULL; g_autoptr (BzUrl) url = NULL; if (!g_variant_iter_next (url_iter, "(ss)", &id, &url_str)) break; url = bz_url_new (); bz_url_set_id (url, id); bz_url_set_url (url, url_str); g_list_store_append (store, url); } priv->share_urls = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "donation-url") == 0) priv->donation_url = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "version-history") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) version_iter = NULL; store = g_list_store_new (BZ_TYPE_RELEASE); version_iter = g_variant_iter_new (value); for (;;) { guint64 timestamp = 0; g_autofree char *url = NULL; g_autofree char *description = NULL; g_autofree char *version = NULL; g_autoptr (BzRelease) release = NULL; if (!g_variant_iter_next (version_iter, "(mstmsms)", &description, ×tamp, &url, &version)) break; release = bz_release_new (); bz_release_set_timestamp (release, timestamp); bz_release_set_url (release, url); bz_release_set_version (release, version); bz_release_set_description (release, description); g_list_store_append (store, release); } priv->version_history = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "light-accent-color") == 0) priv->light_accent_color = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "dark-accent-color") == 0) priv->dark_accent_color = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "is-mobile-friendly") == 0) priv->is_mobile_friendly = g_variant_get_boolean (value); else if (g_strcmp0 (key, "required-controls") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) priv->required_controls = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "recommended-controls") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) priv->recommended_controls = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "supported-controls") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) priv->supported_controls = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "min-display-length") == 0) priv->min_display_length = g_variant_get_int32 (value); else if (g_strcmp0 (key, "max-display-length") == 0) priv->max_display_length = g_variant_get_int32 (value); else if (g_strcmp0 (key, "content-rating-kind") == 0) { g_autofree gchar *kind = NULL; kind = g_variant_dup_string (value, NULL); if (priv->content_rating == NULL) priv->content_rating = as_content_rating_new (); as_content_rating_set_kind (priv->content_rating, kind); } else if (g_strcmp0 (key, "content-rating-values") == 0) { g_autoptr (GVariantIter) rating_iter = NULL; if (priv->content_rating == NULL) priv->content_rating = as_content_rating_new (); rating_iter = g_variant_iter_new (value); for (;;) { g_autofree gchar *rating_id = NULL; g_autofree gchar *rating_value_str = NULL; AsContentRatingValue rating_value; if (!g_variant_iter_next (rating_iter, "(ss)", &rating_id, &rating_value_str)) break; rating_value = as_content_rating_value_from_string (rating_value_str); if (rating_value != AS_CONTENT_RATING_VALUE_UNKNOWN) as_content_rating_set_value (priv->content_rating, rating_id, rating_value); } } else if (g_strcmp0 (key, "keywords") == 0) { g_autoptr (GListStore) store = NULL; g_autoptr (GVariantIter) keywords_iter = NULL; store = g_list_store_new (GTK_TYPE_STRING_OBJECT); keywords_iter = g_variant_iter_new (value); for (;;) { g_autofree char *keyword = NULL; g_autoptr (GtkStringObject) string = NULL; if (!g_variant_iter_next (keywords_iter, "s", &keyword)) break; string = gtk_string_object_new (keyword); g_list_store_append (store, string); } priv->keywords = G_LIST_MODEL (g_steal_pointer (&store)); } else if (g_strcmp0 (key, "categories") == 0) priv->categories = g_variant_get_uint32 (value); else if (g_strcmp0 (key, "verification-verified") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "verified", g_variant_get_boolean (value), NULL); } else if (g_strcmp0 (key, "verification-method") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "method", g_variant_get_string (value, NULL), NULL); } else if (g_strcmp0 (key, "verification-website") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "website", g_variant_get_string (value, NULL), NULL); } else if (g_strcmp0 (key, "verification-login-name") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "login-name", g_variant_get_string (value, NULL), NULL); } else if (g_strcmp0 (key, "verification-login-provider") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "login-provider", g_variant_get_string (value, NULL), NULL); } else if (g_strcmp0 (key, "verification-timestamp") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "timestamp", g_variant_get_string (value, NULL), NULL); } else if (g_strcmp0 (key, "verification-login-is-organization") == 0) { if (priv->verification_status == NULL) priv->verification_status = bz_verification_status_new (); g_object_set (priv->verification_status, "login-is-organization", g_variant_get_boolean (value), NULL); } else if (g_strcmp0 (key, "is-flathub") == 0) priv->is_flathub = g_variant_get_boolean (value); else if (g_str_has_prefix (key, "permissions-")) { continue; } } if (priv->permissions == NULL) priv->permissions = bz_app_permissions_new (); if (!bz_app_permissions_deserialize (priv->permissions, import, error)) { g_warning ("Failed to deserialize app permissions"); } return TRUE; } void bz_entry_hold (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_if_fail (BZ_IS_ENTRY (self)); priv = bz_entry_get_instance_private (self); if (++priv->hold == 1) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HOLDING]); } void bz_entry_release (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_if_fail (BZ_IS_ENTRY (self)); priv = bz_entry_get_instance_private (self); if (--priv->hold == 0) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HOLDING]); } gboolean bz_entry_is_holding (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); return priv->hold > 0; } gboolean bz_entry_is_installed (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); return priv->installed; } void bz_entry_set_installed (BzEntry *self, gboolean installed) { BzEntryPrivate *priv = NULL; g_return_if_fail (BZ_IS_ENTRY (self)); priv = bz_entry_get_instance_private (self); priv->installed = installed; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED]); } const char * bz_entry_get_installed_version (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->installed_version; } void bz_entry_set_installed_version (BzEntry *self, const char *version) { BzEntryPrivate *priv = NULL; g_return_if_fail (BZ_IS_ENTRY (self)); priv = bz_entry_get_instance_private (self); g_clear_pointer (&priv->installed_version, g_free); priv->installed_version = g_strdup (version); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INSTALLED_VERSION]); } gboolean bz_entry_is_of_kinds (BzEntry *self, guint kinds) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); return (priv->kinds & kinds) == kinds; } gboolean bz_entry_is_reinstallable (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), TRUE); priv = bz_entry_get_instance_private (self); return priv->reinstallable; } gboolean bz_entry_is_searchable (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), TRUE); priv = bz_entry_get_instance_private (self); return priv->searchable; } void bz_entry_append_addon (BzEntry *self, const char *id) { BzEntryPrivate *priv = NULL; g_autoptr (GtkStringObject) string = NULL; g_return_if_fail (BZ_IS_ENTRY (self)); g_return_if_fail (id != NULL); priv = bz_entry_get_instance_private (self); string = gtk_string_object_new (id); if (priv->addons == NULL) { priv->addons = (GListModel *) g_list_store_new (GTK_TYPE_STRING_OBJECT); g_list_store_append (G_LIST_STORE (priv->addons), string); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ADDONS]); } else g_list_store_append (G_LIST_STORE (priv->addons), string); } GListModel * bz_entry_get_addons (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->addons; } const char * bz_entry_get_id (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->id; } const char * bz_entry_get_unique_id (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->unique_id; } const char * bz_entry_get_unique_id_checksum (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->unique_id_checksum; } const char * bz_entry_get_title (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->title; } const char * bz_entry_get_developer (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->developer; } gboolean bz_entry_is_verified (BzEntry *self) { BzEntryPrivate *priv = NULL; gboolean verified = FALSE; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); if (priv->verification_status != NULL) g_object_get (priv->verification_status, "verified", &verified, NULL); return verified; } const char * bz_entry_get_eol (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), 0); priv = bz_entry_get_instance_private (self); return priv->eol; } const char * bz_entry_get_description (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->description; } const char * bz_entry_get_long_description (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->long_description; } const char * bz_entry_get_remote_repo_name (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->remote_repo_name; } guint64 bz_entry_get_size (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), 0); priv = bz_entry_get_instance_private (self); return priv->size; } guint64 bz_entry_get_installed_size (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), 0); priv = bz_entry_get_instance_private (self); return priv->installed_size; } GdkPaintable * bz_entry_get_icon_paintable (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->icon_paintable; } GListModel * bz_entry_get_screenshot_paintables (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->screenshot_paintables; } GIcon * bz_entry_get_mini_icon (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->mini_icon; } const char * bz_entry_get_search_tokens (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->search_tokens; } GListModel * bz_entry_get_share_urls (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->share_urls; } const char * bz_entry_get_url (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->url; } const char * bz_entry_get_donation_url (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->donation_url; } BzRepository * bz_entry_get_repository (BzEntry *self, GListModel *repos) { BzEntryPrivate *priv = NULL; guint n_repos = 0; g_auto (GStrv) parts = NULL; const char *scope = NULL; const char *repo_name = NULL; gboolean is_user = FALSE; priv = bz_entry_get_instance_private (self); if (priv->unique_id == NULL) return NULL; parts = g_strsplit (priv->unique_id, "::", -1); if (g_strv_length (parts) < 3) return NULL; scope = parts[0]; repo_name = parts[1]; is_user = g_strcmp0 (scope, "FLATPAK-USER") == 0; n_repos = g_list_model_get_n_items (repos); for (guint i = 0; i < n_repos; i++) { g_autoptr (BzRepository) repo = g_list_model_get_item (repos, i); const char *name = bz_repository_get_name (repo); gboolean repo_is_user = bz_repository_get_is_user (repo); if (repo_is_user == is_user && g_strcmp0 (name, repo_name) == 0) return g_object_ref (repo); } return NULL; } gboolean bz_entry_get_is_foss (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); return priv->is_floss; } const char * bz_entry_get_light_accent_color (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->light_accent_color; } const char * bz_entry_get_dark_accent_color (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); priv = bz_entry_get_instance_private (self); return priv->dark_accent_color; } gboolean bz_entry_get_is_mobile_friendly (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); return priv->is_mobile_friendly; } guint bz_entry_get_required_controls (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), BZ_CONTROL_NONE); return priv->required_controls; } guint bz_entry_get_recommended_controls (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), BZ_CONTROL_NONE); return priv->recommended_controls; } guint bz_entry_get_supported_controls (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), BZ_CONTROL_NONE); return priv->supported_controls; } gboolean bz_entry_has_control (BzEntry *self, BzControlType control, BzRelationType relation) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); switch (relation) { case BZ_RELATION_REQUIRES: return (priv->required_controls & control) != 0; case BZ_RELATION_RECOMMENDS: return (priv->recommended_controls & control) != 0; case BZ_RELATION_SUPPORTS: return (priv->supported_controls & control) != 0; default: return FALSE; } } gint bz_entry_get_min_display_length (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), 0); return priv->min_display_length; } gint bz_entry_get_max_display_length (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), 0); return priv->max_display_length; } gboolean bz_entry_supports_form_factor (BzEntry *self, guint available_controls, gint display_length) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); if (priv->required_controls != BZ_CONTROL_NONE) { if ((priv->required_controls & available_controls) != priv->required_controls) return FALSE; } if (priv->min_display_length > 0 && display_length < priv->min_display_length) return FALSE; if (priv->max_display_length > 0 && display_length > priv->max_display_length) return FALSE; return TRUE; } AsContentRating * bz_entry_get_content_rating (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_return_val_if_fail (BZ_IS_ENTRY (self), NULL); return priv->content_rating; } BzCategoryFlags bz_entry_get_category_flags (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), BZ_CATEGORY_FLAGS_NONE); priv = bz_entry_get_instance_private (self); return priv->categories; } gboolean bz_entry_get_is_flathub (BzEntry *self) { BzEntryPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); return priv->is_flathub; } gint bz_entry_calc_usefulness (BzEntry *self) { BzEntryPrivate *priv = NULL; gint score = 0; g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); priv = bz_entry_get_instance_private (self); score += priv->is_flathub ? 1000 : 0; score += priv->title != NULL ? 5 : 0; score += priv->description != NULL ? 1 : 0; score += priv->long_description != NULL ? 5 : 0; score += priv->url != NULL ? 1 : 0; score += priv->size > 0 ? 1 : 0; score += priv->icon_paintable != NULL ? 15 : 0; score += priv->remote_repo_icon != NULL ? 1 : 0; score += priv->metadata_license != NULL ? 1 : 0; score += priv->project_license != NULL ? 1 : 0; score += priv->project_group != NULL ? 1 : 0; score += priv->developer != NULL ? 1 : 0; score += priv->developer_id != NULL ? 1 : 0; score += priv->screenshot_paintables != NULL ? 5 : 0; score += priv->share_urls != NULL ? 5 : 0; score -= priv->eol != NULL ? 500 : 0; return score; } void bz_entry_serialize (BzEntry *self, GVariantBuilder *builder) { g_return_if_fail (BZ_IS_ENTRY (self)); g_return_if_fail (builder != NULL); return bz_entry_real_serialize (BZ_SERIALIZABLE (self), builder); } gboolean bz_entry_deserialize (BzEntry *self, GVariant *import, GError **error) { g_return_val_if_fail (BZ_IS_ENTRY (self), FALSE); g_return_val_if_fail (import != NULL, FALSE); return bz_entry_real_deserialize (BZ_SERIALIZABLE (self), import, error); } GIcon * bz_load_mini_icon_sync (const char *unique_id_checksum, const char *path) { guint icon_size = 0; g_autofree char *main_cache = NULL; g_autofree char *mini_icon_basename = NULL; g_autofree char *mini_icon_path = NULL; g_autoptr (GBytes) bytes = NULL; cairo_surface_t *surface_in = NULL; int width = 0; int height = 0; cairo_surface_t *surface_out = NULL; cairo_t *cairo = NULL; g_autoptr (GFile) parent_file = NULL; g_autoptr (GFile) mini_icon_file = NULL; g_autoptr (GIcon) mini_icon = NULL; icon_size = bz_get_desktop_search_provider_icon_size (); main_cache = bz_dup_module_dir (); mini_icon_basename = g_strdup_printf ("%s-%ux%u", unique_id_checksum, icon_size, icon_size); mini_icon_path = g_build_filename (main_cache, mini_icon_basename, NULL); if (g_file_test (mini_icon_path, G_FILE_TEST_EXISTS)) /* Assume the icon left behind by last writer */ goto done; surface_in = cairo_image_surface_create_from_png (path); width = cairo_image_surface_get_width (surface_in); height = cairo_image_surface_get_height (surface_in); surface_out = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, icon_size, icon_size); cairo = cairo_create (surface_out); cairo_scale (cairo, (double) icon_size / (double) width, (double) icon_size / (double) height); cairo_set_source_surface (cairo, surface_in, 0, 0); cairo_paint (cairo); cairo_restore (cairo); parent_file = g_file_new_for_path (main_cache); g_file_make_directory_with_parents (parent_file, NULL, NULL); cairo_surface_flush (surface_out); cairo_surface_write_to_png (surface_out, mini_icon_path); cairo_destroy (cairo); cairo_surface_destroy (surface_in); cairo_surface_destroy (surface_out); done: mini_icon_file = g_file_new_for_path (mini_icon_path); mini_icon = g_file_icon_new (mini_icon_file); return g_steal_pointer (&mini_icon); } static void query_flathub (BzEntry *self, int prop) { BzEntryPrivate *priv = NULL; g_autoptr (QueryFlathubData) data = NULL; g_autoptr (DexFuture) future = NULL; gboolean is_download_stat = FALSE; priv = bz_entry_get_instance_private (self); is_download_stat = (prop == PROP_DOWNLOAD_STATS || prop == PROP_DOWNLOAD_STATS_PER_COUNTRY || prop == PROP_RECENT_DOWNLOADS || prop == PROP_TOTAL_DOWNLOADS); if (!is_download_stat && !priv->is_flathub) return; if (priv->id == NULL) return; if (priv->flathub_prop_queries == NULL) priv->flathub_prop_queries = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, dex_unref); else if (g_hash_table_contains (priv->flathub_prop_queries, GINT_TO_POINTER (prop))) return; data = query_flathub_data_new (); g_weak_ref_init (&data->self, self); data->prop = prop; data->id = g_strdup (priv->id); data->developer = g_strdup (priv->developer); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) query_flathub_fiber, query_flathub_data_ref (data), query_flathub_data_unref); future = dex_future_then ( future, (DexFutureCallback) query_flathub_then, query_flathub_data_ref (data), query_flathub_data_unref); g_hash_table_replace ( priv->flathub_prop_queries, GINT_TO_POINTER (prop), g_steal_pointer (&future)); } static gint compare_dates (BzDataPoint *a, BzDataPoint *b) { double date_a = bz_data_point_get_independent (a); double date_b = bz_data_point_get_independent (b); return (date_a > date_b) - (date_a < date_b); } static DexFuture * query_flathub_fiber (QueryFlathubData *data) { int prop = data->prop; char *id = data->id; char *developer = data->developer; g_autoptr (GError) local_error = NULL; g_autofree char *request = NULL; g_autoptr (JsonNode) node = NULL; switch (prop) { case PROP_DOWNLOAD_STATS: case PROP_DOWNLOAD_STATS_PER_COUNTRY: case PROP_RECENT_DOWNLOADS: case PROP_TOTAL_DOWNLOADS: request = g_strdup_printf ("/stats/%s?all=false&days=175", id); break; case PROP_DEVELOPER_APPS: request = g_strdup_printf ("/collection/developer/%s", developer); break; case PROP_FAVORITES_COUNT: request = g_strdup_printf ("/favorites/%s/count", id); break; default: g_assert_not_reached (); return NULL; } node = dex_await_boxed (bz_query_flathub_v2_json (request), &local_error); if (node == NULL) { if (!g_error_matches (local_error, DEX_ERROR, DEX_ERROR_FIBER_CANCELLED)) g_warning ("Could not retrieve property %s for %s from flathub: %s", props[prop]->name, id, local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } switch (prop) { case PROP_DOWNLOAD_STATS: { JsonObject *root = NULL; JsonObject *per_day = NULL; g_autoptr (GListStore) store = NULL; if (!JSON_NODE_HOLDS_OBJECT (node)) return dex_future_new_for_error ( g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_DATA, "Unexpected JSON response format")); root = json_node_get_object (node); per_day = json_object_get_object_member (root, "installs_per_day"); store = g_list_store_new (BZ_TYPE_DATA_POINT); json_object_foreach_member ( per_day, (JsonObjectForeach) download_stats_per_day_foreach, store); g_list_store_sort (store, (GCompareDataFunc) compare_dates, NULL); return dex_future_new_for_object (store); } break; case PROP_DOWNLOAD_STATS_PER_COUNTRY: { JsonObject *per_country = NULL; g_autoptr (GListStore) store = NULL; if (!JSON_NODE_HOLDS_OBJECT (node)) return dex_future_new_for_error ( g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_DATA, "Unexpected JSON response format")); per_country = json_object_get_object_member ( json_node_get_object (node), "installs_per_country"); store = g_list_store_new (BZ_TYPE_COUNTRY_DATA_POINT); json_object_foreach_member ( per_country, (JsonObjectForeach) download_stats_per_country_foreach, store); return dex_future_new_for_object (store); } break; case PROP_RECENT_DOWNLOADS: { int recent_downloads = 0; if (!JSON_NODE_HOLDS_OBJECT (node)) return dex_future_new_for_int (0); if (json_object_has_member (json_node_get_object (node), "installs_last_month")) recent_downloads = json_object_get_int_member (json_node_get_object (node), "installs_last_month"); return dex_future_new_for_int (recent_downloads); } break; case PROP_TOTAL_DOWNLOADS: { int total_downloads = 0; if (!JSON_NODE_HOLDS_OBJECT (node)) return dex_future_new_for_int (0); if (json_object_has_member (json_node_get_object (node), "installs_total")) total_downloads = json_object_get_int_member (json_node_get_object (node), "installs_total"); return dex_future_new_for_int (total_downloads); } break; case PROP_DEVELOPER_APPS: { JsonObject *response_obj = NULL; JsonArray *apps_array = NULL; g_autoptr (GtkStringList) app_ids = NULL; response_obj = json_node_get_object (node); apps_array = json_object_get_array_member (response_obj, "hits"); app_ids = gtk_string_list_new (NULL); for (guint i = 0; i < json_array_get_length (apps_array); i++) { JsonObject *app_obj = json_array_get_object_element (apps_array, i); const char *app_id = json_object_get_string_member (app_obj, "app_id"); if (app_id != NULL) gtk_string_list_append (app_ids, app_id); } return dex_future_new_for_object (app_ids); } break; case PROP_FAVORITES_COUNT: { int favorites_count = 0; if (json_object_has_member (json_node_get_object (node), "favorites_count")) favorites_count = json_object_get_int_member (json_node_get_object (node), "favorites_count"); return dex_future_new_for_int (favorites_count); } break; default: g_assert_not_reached (); return NULL; } } static DexFuture * query_flathub_then (DexFuture *future, QueryFlathubData *data) { g_autoptr (BzEntry) self = NULL; int prop = data->prop; const GValue *value = NULL; self = g_weak_ref_get (&data->self); if (self == NULL) return NULL; value = dex_future_get_value (future, NULL); g_object_set_property (G_OBJECT (self), props[prop]->name, value); return NULL; } static void download_stats_per_day_foreach (JsonObject *object, const gchar *member_name, JsonNode *member_node, GListStore *store) { double independent = 0; double dependent = 0; g_autoptr (BzDataPoint) point = NULL; g_autoptr (GDateTime) date = NULL; g_autofree char *formatted_label = NULL; g_autofree char *iso_with_tz = NULL; dependent = json_node_get_int (member_node); iso_with_tz = g_strdup_printf ("%sT00:00:00Z", member_name); date = g_date_time_new_from_iso8601 (iso_with_tz, NULL); formatted_label = g_date_time_format (date, "%-d %b"); independent = (double) g_date_time_to_unix (date); point = g_object_new ( BZ_TYPE_DATA_POINT, "independent", independent, "dependent", dependent, "label", formatted_label, NULL); g_list_store_append (store, point); } static void download_stats_per_country_foreach (JsonObject *object, const gchar *member_name, JsonNode *member_node, GListStore *store) { guint downloads = 0; g_autoptr (BzCountryDataPoint) point = NULL; downloads = json_node_get_int (member_node); point = g_object_new ( BZ_TYPE_COUNTRY_DATA_POINT, "country-code", member_name, "downloads", downloads, NULL); g_list_store_append (store, point); } static gboolean maybe_save_paintable (BzEntryPrivate *priv, const char *key, GdkPaintable *paintable, GVariantBuilder *builder) { g_autoptr (GError) local_error = NULL; const char *source_uri = NULL; const char *cache_into_path = NULL; g_autoptr (GdkTexture) texture = NULL; g_autoptr (GFile) save_file = NULL; gboolean result = FALSE; if (!BZ_IS_ASYNC_TEXTURE (paintable)) { return FALSE; } source_uri = bz_async_texture_get_source_uri (BZ_ASYNC_TEXTURE (paintable)); cache_into_path = bz_async_texture_get_cache_into_path (BZ_ASYNC_TEXTURE (paintable)); if (cache_into_path == NULL) goto done; if (bz_async_texture_get_loaded (BZ_ASYNC_TEXTURE (paintable))) texture = bz_async_texture_dup_texture (BZ_ASYNC_TEXTURE (paintable)); else goto done; save_file = g_file_new_for_path (cache_into_path); if (!g_file_query_exists (save_file, NULL)) { g_autoptr (GFile) parent_file = NULL; g_autoptr (GBytes) png_bytes = NULL; g_autoptr (GFileOutputStream) output = NULL; gssize bytes_written = 0; parent_file = g_file_get_parent (save_file); result = g_file_make_directory_with_parents ( parent_file, NULL, &local_error); if (!result) { if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_EXISTS)) g_clear_pointer (&local_error, g_error_free); else { g_warning ("Couldn't serialize texture to %s: %s\n", cache_into_path, local_error->message); goto done; } } png_bytes = gdk_texture_save_to_png_bytes (texture); if (png_bytes == NULL) goto done; output = g_file_replace ( save_file, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error); if (output == NULL) { g_warning ("Couldn't serialize texture to %s: %s\n", cache_into_path, local_error->message); goto done; } bytes_written = g_output_stream_write_bytes ( G_OUTPUT_STREAM (output), png_bytes, NULL, &local_error); if (bytes_written < 0) { g_warning ("Couldn't serialize texture to %s: %s\n", cache_into_path, local_error->message); goto done; } result = g_output_stream_close (G_OUTPUT_STREAM (output), NULL, &local_error); if (!result) { g_warning ("Couldn't serialize texture to %s: %s\n", cache_into_path, local_error->message); goto done; } } done: g_variant_builder_add (builder, "{sv}", key, g_variant_new ("(sms)", source_uri, cache_into_path)); return TRUE; } static GdkPaintable * make_async_texture (GVariant *parse) { g_autofree char *source = NULL; g_autofree char *cache_into = NULL; g_autoptr (GFile) source_file = NULL; g_autoptr (GFile) cache_into_file = NULL; g_autoptr (BzAsyncTexture) texture = NULL; g_variant_get (parse, "(sms)", &source, &cache_into); source_file = g_file_new_for_uri (source); if (cache_into != NULL) cache_into_file = g_file_new_for_path (cache_into); texture = bz_async_texture_new_lazy (source_file, cache_into_file); return GDK_PAINTABLE (g_steal_pointer (&texture)); } static void clear_entry (BzEntry *self) { BzEntryPrivate *priv = bz_entry_get_instance_private (self); g_clear_pointer (&priv->flathub_prop_queries, g_hash_table_unref); g_clear_object (&priv->addons); g_clear_pointer (&priv->id, g_free); g_clear_pointer (&priv->unique_id, g_free); g_clear_pointer (&priv->unique_id_checksum, g_free); g_clear_pointer (&priv->installed_version, g_free); g_clear_pointer (&priv->title, g_free); g_clear_pointer (&priv->eol, g_free); g_clear_pointer (&priv->description, g_free); g_clear_pointer (&priv->long_description, g_free); g_clear_pointer (&priv->remote_repo_name, g_free); g_clear_pointer (&priv->url, g_free); g_clear_object (&priv->icon_paintable); g_clear_object (&priv->mini_icon); g_clear_object (&priv->remote_repo_icon); g_clear_pointer (&priv->search_tokens, g_free); g_clear_pointer (&priv->metadata_license, g_free); g_clear_pointer (&priv->project_license, g_free); g_clear_pointer (&priv->project_group, g_free); g_clear_pointer (&priv->developer, g_free); g_clear_pointer (&priv->developer_id, g_free); g_clear_object (&priv->developer_apps); g_clear_object (&priv->screenshot_paintables); g_clear_object (&priv->screenshot_captions); g_clear_object (&priv->thumbnail_paintable); g_clear_object (&priv->share_urls); g_clear_pointer (&priv->donation_url, g_free); g_clear_pointer (&priv->ratings_summary, g_free); g_clear_object (&priv->version_history); g_clear_pointer (&priv->light_accent_color, g_free); g_clear_pointer (&priv->dark_accent_color, g_free); g_clear_object (&priv->verification_status); g_clear_object (&priv->download_stats); g_clear_object (&priv->download_stats_per_country); g_clear_object (&priv->content_rating); g_clear_object (&priv->keywords); g_clear_object (&priv->permissions); } bazaar-org-bazaar-b6e9a65/src/bz-entry.h000066400000000000000000000124021522167256300201420ustar00rootroot00000000000000/* bz-entry.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include #include #include "bz-category-flags.h" #include "bz-repository.h" G_BEGIN_DECLS typedef enum { BZ_ENTRY_KIND_APPLICATION = 1 << 0, BZ_ENTRY_KIND_RUNTIME = 1 << 1, BZ_ENTRY_KIND_ADDON = 1 << 2, } BzEntryKind; GType bz_entry_kind_get_type (void); #define BZ_TYPE_ENTRY_KIND (bz_entry_kind_get_type ()) typedef enum { BZ_CONTROL_NONE = 0, BZ_CONTROL_POINTING = 1 << 0, BZ_CONTROL_KEYBOARD = 1 << 1, BZ_CONTROL_CONSOLE = 1 << 2, BZ_CONTROL_TABLET = 1 << 3, BZ_CONTROL_TOUCH = 1 << 4, BZ_CONTROL_GAMEPAD = 1 << 5, BZ_CONTROL_TV_REMOTE = 1 << 6, BZ_CONTROL_VOICE = 1 << 7, BZ_CONTROL_VISION = 1 << 8, } BzControlType; GType bz_control_type_get_type (void); #define BZ_TYPE_CONTROL_TYPE (bz_control_type_get_type ()) typedef enum { BZ_RELATION_REQUIRES, BZ_RELATION_RECOMMENDS, BZ_RELATION_SUPPORTS, } BzRelationType; GType bz_relation_type_get_type (void); #define BZ_TYPE_RELATION_TYPE (bz_relation_type_get_type ()) #define BZ_TYPE_ENTRY (bz_entry_get_type ()) G_DECLARE_DERIVABLE_TYPE (BzEntry, bz_entry, BZ, ENTRY, GObject) struct _BzEntryClass { GObjectClass parent_class; }; void bz_entry_hold (BzEntry *self); void bz_entry_release (BzEntry *self); gboolean bz_entry_is_holding (BzEntry *self); gboolean bz_entry_is_installed (BzEntry *self); const char * bz_entry_get_installed_version (BzEntry *self); void bz_entry_set_installed_version (BzEntry *self, const char *version); void bz_entry_set_installed (BzEntry *self, gboolean installed); gboolean bz_entry_is_reinstallable (BzEntry *self); gboolean bz_entry_is_searchable (BzEntry *self); gboolean bz_entry_is_of_kinds (BzEntry *self, guint kinds); void bz_entry_append_addon (BzEntry *self, const char *id); GListModel * bz_entry_get_addons (BzEntry *self); const char * bz_entry_get_id (BzEntry *self); const char * bz_entry_get_unique_id (BzEntry *self); const char * bz_entry_get_unique_id_checksum (BzEntry *self); const char * bz_entry_get_title (BzEntry *self); const char * bz_entry_get_developer (BzEntry *self); GList * bz_entry_get_developer_apps (BzEntry *self); const char * bz_entry_get_eol (BzEntry *self); const char * bz_entry_get_description (BzEntry *self); gboolean bz_entry_is_verified (BzEntry *self); const char * bz_entry_get_long_description (BzEntry *self); const char * bz_entry_get_remote_repo_name (BzEntry *self); guint64 bz_entry_get_size (BzEntry *self); guint64 bz_entry_get_installed_size (BzEntry *self); GdkPaintable * bz_entry_get_icon_paintable (BzEntry *self); GListModel * bz_entry_get_screenshot_paintables (BzEntry *self); GIcon * bz_entry_get_mini_icon (BzEntry *self); const char * bz_entry_get_search_tokens (BzEntry *self); GListModel * bz_entry_get_share_urls (BzEntry *self); const char * bz_entry_get_url (BzEntry *self); const char * bz_entry_get_donation_url (BzEntry *self); BzRepository * bz_entry_get_repository (BzEntry *self, GListModel *repos); gboolean bz_entry_get_is_foss (BzEntry *self); const char * bz_entry_get_light_accent_color (BzEntry *self); const char * bz_entry_get_dark_accent_color (BzEntry *self); gboolean bz_entry_get_is_flathub (BzEntry *self); gboolean bz_entry_get_is_mobile_friendly (BzEntry *self); guint bz_entry_get_required_controls (BzEntry *self); guint bz_entry_get_recommended_controls (BzEntry *self); guint bz_entry_get_supported_controls (BzEntry *self); gboolean bz_entry_has_control (BzEntry *self, BzControlType control, BzRelationType relation); gint bz_entry_get_min_display_length (BzEntry *self); gint bz_entry_get_max_display_length (BzEntry *self); gboolean bz_entry_supports_form_factor (BzEntry *self, guint available_controls, gint display_length); gint bz_entry_get_age_rating (BzEntry *self); AsContentRating * bz_entry_get_content_rating (BzEntry *self); BzCategoryFlags bz_entry_get_category_flags (BzEntry *self); gint bz_entry_calc_usefulness (BzEntry *self); void bz_entry_serialize (BzEntry *self, GVariantBuilder *builder); gboolean bz_entry_deserialize (BzEntry *self, GVariant *import, GError **error); GIcon * bz_load_mini_icon_sync (const char *unique_id_checksum, const char *path); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-env.c000066400000000000000000000106111522167256300175640ustar00rootroot00000000000000/* bz-env.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-env.h" gsize bz_get_dex_stack_size (void) { static guint64 stack_size = 0; if (g_once_init_enter (&stack_size)) { const char *envvar = NULL; guint64 value = 0; /* Ensure we have enough space for gtk/glycin Some routines try to optimize by putting stuff on the stack, see https://gitlab.gnome.org/GNOME/libdex/-/issues/27#note_2582332 2025-10-21 22:47:02 eva */ value = MAX (8388608, dex_get_min_stack_size ()); envvar = g_getenv ("BAZAAR_DEX_STACK_SIZE"); if (envvar != NULL) { g_autoptr (GError) local_error = NULL; g_autoptr (GVariant) variant = NULL; variant = g_variant_parse ( G_VARIANT_TYPE_UINT64, envvar, NULL, NULL, &local_error); if (variant != NULL) { guint64 parse_result = 0; parse_result = g_variant_get_uint64 (variant); if (parse_result < dex_get_min_stack_size ()) g_warning ("BAZAAR_DEX_STACK_SIZE must be greater than %zu on this system", dex_get_min_stack_size ()); else value = parse_result; } else g_warning ("BAZAAR_DEX_STACK_SIZE is invalid: %s", local_error->message); } g_once_init_leave (&stack_size, value); } return stack_size; } guint64 bz_get_n_download_workers (void) { static guint64 n_dl_workers = 0; if (g_once_init_enter (&n_dl_workers)) { const char *envvar = NULL; guint64 value = 0; value = 8; envvar = g_getenv ("BAZAAR_N_DOWNLOAD_WORKERS"); if (envvar != NULL) { g_autoptr (GError) local_error = NULL; g_autoptr (GVariant) variant = NULL; variant = g_variant_parse ( G_VARIANT_TYPE_UINT64, envvar, NULL, NULL, &local_error); if (variant != NULL) { guint64 parse_result = 0; parse_result = g_variant_get_uint64 (variant); if (parse_result == 0) g_warning ("BAZAAR_N_DOWNLOAD_WORKERS must be greater than 0"); else value = parse_result; } else g_warning ("BAZAAR_N_DOWNLOAD_WORKERS is invalid: %s", local_error->message); } g_once_init_leave (&n_dl_workers, value); } return n_dl_workers; } guint bz_get_desktop_search_provider_icon_size (void) { static guint64 icon_size = 0; if (g_once_init_enter (&icon_size)) { const char *envvar = NULL; guint64 value = 0; /* default 24x24 for the gnome-shell search provider */ value = 24; envvar = g_getenv ("BAZAAR_DESKTOP_SEARCH_PROVIDER_ICON_SIZE"); if (envvar != NULL) { g_autoptr (GError) local_error = NULL; g_autoptr (GVariant) variant = NULL; variant = g_variant_parse ( G_VARIANT_TYPE_UINT64, envvar, NULL, NULL, &local_error); if (variant != NULL) { guint64 parse_result = 0; parse_result = g_variant_get_uint64 (variant); if (parse_result == 0 || parse_result > 256) g_warning ("BAZAAR_DESKTOP_SEARCH_PROVIDER_ICON_SIZE must be " "greater than 0 but no greater than 256"); else value = parse_result; } else g_warning ("BAZAAR_DESKTOP_SEARCH_PROVIDER_ICON_SIZE is invalid: %s", local_error->message); } g_once_init_leave (&icon_size, value); } return (guint) icon_size; } bazaar-org-bazaar-b6e9a65/src/bz-env.h000066400000000000000000000016621522167256300175770ustar00rootroot00000000000000/* bz-env.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS gsize bz_get_dex_stack_size (void); guint64 bz_get_n_download_workers (void); guint bz_get_desktop_search_provider_icon_size (void); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-error-dialog.blp000066400000000000000000000027761522167256300217320ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzErrorDialog: Adw.Dialog { content-width: 500; content-height: 400; child: Adw.ToastOverlay toast_overlay { child: Adw.ToolbarView { [top] Adw.HeaderBar {} content: Box { orientation: vertical; spacing: 0; margin-start: 24; margin-end: 24; margin-top: 12; margin-bottom: 24; Label error_title { halign: center; styles [ "title-1", ] } Box { orientation: horizontal; spacing: 6; margin-top: 12; margin-bottom: 6; Label { label: _("Details"); halign: start; hexpand: true; styles [ "heading", ] } Button copy_button { icon-name: "edit-copy-symbolic"; tooltip-text: _("Copy"); clicked => $on_copy_button_clicked(); styles [ "flat", ] } } ScrolledWindow { vexpand: true; hscrollbar-policy: automatic; vscrollbar-policy: automatic; TextView text_view { editable: false; wrap-mode: word_char; monospace: true; left-margin: 6; right-margin: 6; top-margin: 6; bottom-margin: 6; styles [ "card", ] } } }; }; }; } bazaar-org-bazaar-b6e9a65/src/bz-error-dialog.c000066400000000000000000000060161522167256300213660ustar00rootroot00000000000000/* bz-error-dialog.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-error-dialog.h" struct _BzErrorDialog { AdwDialog parent_instance; AdwToastOverlay *toast_overlay; GtkLabel *error_title; GtkTextView *text_view; }; G_DEFINE_FINAL_TYPE (BzErrorDialog, bz_error_dialog, ADW_TYPE_DIALOG) static void on_copy_button_clicked (GtkButton *button, BzErrorDialog *self) { GtkTextBuffer *buffer = NULL; GtkTextIter start = { 0 }; GtkTextIter end = { 0 }; g_autofree char *text = NULL; GdkClipboard *clipboard = NULL; g_autoptr (AdwToast) toast = NULL; buffer = gtk_text_view_get_buffer (self->text_view); gtk_text_buffer_get_bounds (buffer, &start, &end); text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_text (clipboard, text); toast = adw_toast_new (_ ("Copied!")); adw_toast_set_timeout (toast, 2); adw_toast_overlay_add_toast (self->toast_overlay, g_steal_pointer (&toast)); } static void bz_error_dialog_class_init (BzErrorDialogClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-error-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzErrorDialog, toast_overlay); gtk_widget_class_bind_template_child (widget_class, BzErrorDialog, error_title); gtk_widget_class_bind_template_child (widget_class, BzErrorDialog, text_view); gtk_widget_class_bind_template_callback (widget_class, on_copy_button_clicked); } static void bz_error_dialog_init (BzErrorDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzErrorDialog * bz_error_dialog_new (const char *title, const char *text) { BzErrorDialog *self; GtkTextBuffer *buffer; GtkTextIter iter; g_return_val_if_fail (title != NULL, NULL); g_return_val_if_fail (text != NULL, NULL); self = g_object_new (BZ_TYPE_ERROR_DIALOG, NULL); gtk_label_set_text (self->error_title, title); buffer = gtk_text_view_get_buffer (self->text_view); gtk_text_buffer_get_start_iter (buffer, &iter); gtk_text_buffer_insert (buffer, &iter, text, -1); return self; } bazaar-org-bazaar-b6e9a65/src/bz-error-dialog.h000066400000000000000000000020701522167256300213670ustar00rootroot00000000000000/* bz-error-dialog.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_ERROR_DIALOG (bz_error_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzErrorDialog, bz_error_dialog, BZ, ERROR_DIALOG, AdwDialog) BzErrorDialog *bz_error_dialog_new (const char *title, const char *text); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-error.c000066400000000000000000000074631522167256300201400ustar00rootroot00000000000000/* bz-error.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include #include #include "bz-error-dialog.h" #include "bz-error.h" #include "bz-window.h" static void show_alert (GtkWidget *widget, const char *title, const char *text); static void await_alert_response (AdwAlertDialog *alert, gchar *response, DexPromise *promise); static void unref_dex_closure (gpointer data, GClosure *closure); void bz_show_error_for_widget (GtkWidget *widget, const char *title, const char *text) { g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (text != NULL); show_alert (widget, title, text); } static void on_toast_button_clicked (AdwToast *toast, GtkWidget *widget) { BzErrorDialog *dialog; const char *title = NULL; const char *text = NULL; if (!GTK_IS_WIDGET (widget)) return; title = g_object_get_data (G_OBJECT (toast), "title"); text = g_object_get_data (G_OBJECT (toast), "text"); dialog = bz_error_dialog_new (title ? title : _ ("Details"), text ? text : ""); adw_dialog_present (ADW_DIALOG (dialog), widget); } static void show_alert (GtkWidget *widget, const char *title, const char *text) { BzWindow *window = NULL; AdwToast *toast = NULL; g_autofree char *toast_title = NULL; window = BZ_WINDOW (gtk_widget_get_ancestor (widget, BZ_TYPE_WINDOW)); if (window == NULL) return; toast_title = g_strdup_printf ("%s", title); toast = adw_toast_new (toast_title); adw_toast_set_button_label (toast, _ ("Details")); adw_toast_set_priority (toast, ADW_TOAST_PRIORITY_HIGH); adw_toast_set_timeout (toast, 5); g_object_set_data_full (G_OBJECT (toast), "title", g_strdup (title), g_free); g_object_set_data_full (G_OBJECT (toast), "text", g_strdup (text), g_free); g_signal_connect (toast, "button-clicked", G_CALLBACK (on_toast_button_clicked), widget); bz_window_add_toast (window, toast); } DexFuture * bz_make_alert_dialog_future (AdwAlertDialog *dialog) { g_autoptr (DexPromise) promise = NULL; dex_return_error_if_fail (ADW_IS_ALERT_DIALOG (dialog)); promise = dex_promise_new (); g_signal_connect_data ( dialog, "response", G_CALLBACK (await_alert_response), dex_ref (promise), unref_dex_closure, G_CONNECT_DEFAULT); return DEX_FUTURE (g_steal_pointer (&promise)); } static void await_alert_response (AdwAlertDialog *alert, gchar *response, DexPromise *promise) { dex_promise_resolve_string (promise, g_strdup (response)); } static void unref_dex_closure (gpointer data, GClosure *closure) { DexPromise *promise = data; if (dex_future_is_pending (DEX_FUTURE (promise))) dex_promise_reject ( promise, g_error_new ( DEX_ERROR, DEX_ERROR_UNKNOWN, "The signal was disconnected")); dex_unref (promise); } bazaar-org-bazaar-b6e9a65/src/bz-error.h000066400000000000000000000020241522167256300201310ustar00rootroot00000000000000/* bz-error.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include G_BEGIN_DECLS void bz_show_error_for_widget (GtkWidget *widget, const char *title, const char *text); DexFuture * bz_make_alert_dialog_future (AdwAlertDialog *dialog); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-exponential-function.txt000066400000000000000000000002641522167256300235450ustar00rootroot00000000000000prefix=bz name=exponential_function parent-prefix=g parent-name=object author=AUTOGEN property=factor double G_TYPE_DOUBLE double property=y_intercept double G_TYPE_DOUBLE double bazaar-org-bazaar-b6e9a65/src/bz-fading-clamp.c000066400000000000000000000263261522167256300213300ustar00rootroot00000000000000/* bz-fading-clamp.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-fading-clamp.h" #include "bz-util.h" #define FADE_HEIGHT 75 #define CLAMP_LEEWAY 100 struct _BzFadingClamp { GtkWidget parent_instance; BgeAnimation *animation; GtkWidget *child; int max_height; int min_max_height; int current_height; int allocated_width; gboolean will_change; }; enum { PROP_0, PROP_CHILD, PROP_MAX_HEIGHT, PROP_MIN_MAX_HEIGHT, PROP_WILL_CHANGE, N_PROPS }; static GParamSpec *properties[N_PROPS]; G_DEFINE_TYPE (BzFadingClamp, bz_fading_clamp, GTK_TYPE_WIDGET) static void animate (BzFadingClamp *self, const char *key, double value, gpointer user_data) { self->current_height = round (value); gtk_widget_queue_resize (GTK_WIDGET (self)); } static void bz_fading_clamp_update_will_change (BzFadingClamp *self) { gboolean new_value = FALSE; int natural_height; int width; if (self->child) { if (self->allocated_width > 0) width = self->allocated_width; else gtk_widget_measure (self->child, GTK_ORIENTATION_HORIZONTAL, -1, NULL, &width, NULL, NULL); gtk_widget_measure (self->child, GTK_ORIENTATION_VERTICAL, width, NULL, &natural_height, NULL, NULL); new_value = natural_height > self->min_max_height + CLAMP_LEEWAY; } if (self->will_change != new_value) { self->will_change = new_value; g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_WILL_CHANGE]); } } static void bz_fading_clamp_dispose (GObject *object) { BzFadingClamp *self = BZ_FADING_CLAMP (object); g_clear_object (&self->animation); g_clear_pointer (&self->child, gtk_widget_unparent); G_OBJECT_CLASS (bz_fading_clamp_parent_class)->dispose (object); } static void bz_fading_clamp_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFadingClamp *self = BZ_FADING_CLAMP (object); switch (prop_id) { case PROP_CHILD: g_value_set_object (value, self->child); break; case PROP_MAX_HEIGHT: g_value_set_int (value, self->max_height); break; case PROP_MIN_MAX_HEIGHT: g_value_set_int (value, self->min_max_height); break; case PROP_WILL_CHANGE: g_value_set_boolean (value, self->will_change); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_fading_clamp_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFadingClamp *self = BZ_FADING_CLAMP (object); switch (prop_id) { case PROP_CHILD: bz_fading_clamp_set_child (self, g_value_get_object (value)); break; case PROP_MAX_HEIGHT: bz_fading_clamp_set_max_height (self, g_value_get_int (value)); break; case PROP_MIN_MAX_HEIGHT: self->min_max_height = g_value_get_int (value); bz_fading_clamp_update_will_change (self); gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MIN_MAX_HEIGHT]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static GtkSizeRequestMode bz_fading_clamp_get_request_mode (GtkWidget *widget) { return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } static void bz_fading_clamp_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { int target_height = 0; BzFadingClamp *self = BZ_FADING_CLAMP (widget); if (!self->child) { *minimum = 0; *natural = 0; return; } if (orientation == GTK_ORIENTATION_HORIZONTAL) gtk_widget_measure (self->child, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); else { gtk_widget_measure (self->child, GTK_ORIENTATION_VERTICAL, for_size, minimum, natural, minimum_baseline, natural_baseline); if (*natural <= self->max_height + CLAMP_LEEWAY) target_height = *natural; else target_height = self->max_height; bz_fading_clamp_update_will_change (self); if (!bge_animation_has_key (self->animation, "height")) self->current_height = target_height; *minimum = self->current_height; *natural = self->current_height; } } static void bz_fading_clamp_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BzFadingClamp *self = BZ_FADING_CLAMP (widget); if (self->allocated_width != width) { self->allocated_width = width; bz_fading_clamp_update_will_change (self); } if (self->child) { int child_height = 0; int natural_height = 0; gtk_widget_measure (self->child, GTK_ORIENTATION_VERTICAL, width, NULL, &natural_height, NULL, NULL); if (natural_height > height) child_height = natural_height; else child_height = height; gtk_widget_allocate (self->child, width, child_height, baseline, NULL); } } static void bz_fading_clamp_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzFadingClamp *self = BZ_FADING_CLAMP (widget); int width, height, natural_height; int gradient_start; graphene_rect_t gradient_rect; GskColorStop stops[2]; graphene_point_t start_point, end_point; int effective_fade_height; float stop_offset; if (!self->child || !gtk_widget_get_visible (self->child)) return; width = gtk_widget_get_width (widget); height = gtk_widget_get_height (widget); if (height <= 0) return; gtk_widget_measure (self->child, GTK_ORIENTATION_VERTICAL, width, NULL, &natural_height, NULL, NULL); if (natural_height <= height) { gtk_widget_snapshot_child (widget, self->child, snapshot); return; } effective_fade_height = MIN (natural_height - height, FADE_HEIGHT); gtk_snapshot_push_mask (snapshot, GSK_MASK_MODE_ALPHA); gradient_start = height - effective_fade_height; graphene_rect_init (&gradient_rect, 0, 0, width, height); stop_offset = CLAMP ((float) gradient_start / height, 0.0f, 1.0f); stops[0] = (GskColorStop){ stop_offset, { 1, 1, 1, 1 } }; stops[1] = (GskColorStop){ 1.0, { 1, 1, 1, 0 } }; graphene_point_init (&start_point, 0, 0); graphene_point_init (&end_point, 0, height); gtk_snapshot_append_linear_gradient (snapshot, &gradient_rect, &start_point, &end_point, stops, 2); gtk_snapshot_pop (snapshot); gtk_widget_snapshot_child (widget, self->child, snapshot); gtk_snapshot_pop (snapshot); } static void bz_fading_clamp_class_init (BzFadingClampClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_fading_clamp_dispose; object_class->get_property = bz_fading_clamp_get_property; object_class->set_property = bz_fading_clamp_set_property; widget_class->get_request_mode = bz_fading_clamp_get_request_mode; widget_class->measure = bz_fading_clamp_measure; widget_class->size_allocate = bz_fading_clamp_size_allocate; widget_class->snapshot = bz_fading_clamp_snapshot; properties[PROP_CHILD] = g_param_spec_object ("child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); properties[PROP_MAX_HEIGHT] = g_param_spec_int ("max-height", NULL, NULL, 0, G_MAXINT, 300, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); properties[PROP_MIN_MAX_HEIGHT] = g_param_spec_int ("min-max-height", NULL, NULL, 0, G_MAXINT, 150, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); properties[PROP_WILL_CHANGE] = g_param_spec_boolean ("will-change", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, N_PROPS, properties); } static void bz_fading_clamp_init (BzFadingClamp *self) { self->animation = bge_animation_new (GTK_WIDGET (self)); self->max_height = 300; self->min_max_height = 150; self->current_height = CLAMP_LEEWAY; self->allocated_width = 0; self->will_change = FALSE; } GtkWidget * bz_fading_clamp_new (void) { return g_object_new (BZ_TYPE_FADING_CLAMP, NULL); } void bz_fading_clamp_set_child (BzFadingClamp *self, GtkWidget *child) { g_return_if_fail (BZ_IS_FADING_CLAMP (self)); g_return_if_fail (child == NULL || GTK_IS_WIDGET (child)); if (self->child == child) return; g_clear_pointer (&self->child, gtk_widget_unparent); if (child) { self->child = child; gtk_widget_set_parent (child, GTK_WIDGET (self)); self->current_height = 0; } bz_fading_clamp_update_will_change (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CHILD]); gtk_widget_queue_resize (GTK_WIDGET (self)); } GtkWidget * bz_fading_clamp_get_child (BzFadingClamp *self) { g_return_val_if_fail (BZ_IS_FADING_CLAMP (self), NULL); return self->child; } void bz_fading_clamp_set_max_height (BzFadingClamp *self, int max_height) { int natural_height = 0; int target_height = 0; int width = 0; g_return_if_fail (BZ_IS_FADING_CLAMP (self)); if (self->max_height == max_height) return; self->max_height = max_height; if (self->child) { if (self->allocated_width > 0) width = self->allocated_width; else gtk_widget_measure (self->child, GTK_ORIENTATION_HORIZONTAL, -1, NULL, &width, NULL, NULL); gtk_widget_measure (self->child, GTK_ORIENTATION_VERTICAL, width, NULL, &natural_height, NULL, NULL); if (natural_height <= max_height + CLAMP_LEEWAY) target_height = natural_height; else target_height = max_height; } else target_height = max_height; bge_animation_add_spring ( self->animation, "height", self->current_height, target_height, 1.25, 1.0, 800.0, (BgeAnimationCallback) animate, NULL, NULL, NULL); bz_fading_clamp_update_will_change (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MAX_HEIGHT]); } int bz_fading_clamp_get_max_height (BzFadingClamp *self) { g_return_val_if_fail (BZ_IS_FADING_CLAMP (self), 0); return self->max_height; } bazaar-org-bazaar-b6e9a65/src/bz-fading-clamp.h000066400000000000000000000025221522167256300213250ustar00rootroot00000000000000/* bz-fading-clamp.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_FADING_CLAMP (bz_fading_clamp_get_type ()) G_DECLARE_FINAL_TYPE (BzFadingClamp, bz_fading_clamp, BZ, FADING_CLAMP, GtkWidget) GtkWidget *bz_fading_clamp_new (void); GtkWidget *bz_fading_clamp_get_child (BzFadingClamp *self); void bz_fading_clamp_set_child (BzFadingClamp *self, GtkWidget *child); int bz_fading_clamp_get_max_height (BzFadingClamp *self); void bz_fading_clamp_set_max_height (BzFadingClamp *self, int max_height); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-favorite-button.blp000066400000000000000000000020601522167256300224560ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzFavoriteButton: Button { styles [ "small-pill", "suggested-action", "favorite", ] margin-top: 8; valign: start; halign: start; has-tooltip: true; tooltip-text: _("Favorite Count"); visible: bind template.entry as <$BzEntry>.is-flathub; clicked => $button_clicked_cb() swapped; child: Stack stack { transition-type: crossfade; StackPage { name: "content"; child: Box box { Image icon { icon-name: "bookmark-outline-symbolic"; } Revealer count_revealer { reveal-child: bind $is_positive(template.entry as <$BzEntry>.favorites-count) as ; transition-type: slide_left; child: Label count_label { margin-start: 4; label: bind $format_favorites_count(template.entry as <$BzEntry>.favorites-count) as ; }; } }; } StackPage { name: "spinner"; child: Adw.Spinner { halign: center; width-request: 16; }; } }; }bazaar-org-bazaar-b6e9a65/src/bz-favorite-button.c000066400000000000000000000314521522167256300221320ustar00rootroot00000000000000/* bz-favorite-button.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-entry.h" #include "bz-env.h" #include "bz-error.h" #include "bz-favorite-button.h" #include "bz-global-net.h" #include "bz-state-info.h" struct _BzFavoriteButton { GtkButton parent_instance; BzEntry *entry; BzStateInfo *state; GtkBox *box; GtkImage *icon; GtkRevealer *count_revealer; GtkLabel *count_label; GtkStack *stack; gboolean is_favorited; }; G_DEFINE_FINAL_TYPE (BzFavoriteButton, bz_favorite_button, GTK_TYPE_BUTTON) enum { PROP_0, PROP_ENTRY, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * fetch_favorite_status_fiber (BzFavoriteButton *button); static DexFuture * toggle_favorite_fiber (BzFavoriteButton *button); static void button_clicked_cb (BzFavoriteButton *self, GtkButton *button); static void update_icon (BzFavoriteButton *self); static void update_count (BzFavoriteButton *self); static void on_login_button_clicked (GtkButton *button, GtkPopover *popover); static void show_login_popover (BzFavoriteButton *self); static gboolean is_positive (gpointer object, int value); static char * format_favorites_count (gpointer object, int count); static void bz_favorite_button_dispose (GObject *object) { BzFavoriteButton *self = BZ_FAVORITE_BUTTON (object); g_clear_object (&self->entry); g_clear_object (&self->state); G_OBJECT_CLASS (bz_favorite_button_parent_class)->dispose (object); } static void bz_favorite_button_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFavoriteButton *self = BZ_FAVORITE_BUTTON (object); switch (prop_id) { case PROP_ENTRY: g_value_set_object (value, bz_favorite_button_get_entry (self)); break; case PROP_STATE: g_value_set_object (value, bz_favorite_button_get_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_favorite_button_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFavoriteButton *self = BZ_FAVORITE_BUTTON (object); switch (prop_id) { case PROP_ENTRY: bz_favorite_button_set_entry (self, g_value_get_object (value)); break; case PROP_STATE: bz_favorite_button_set_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_favorite_button_class_init (BzFavoriteButtonClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_favorite_button_dispose; object_class->get_property = bz_favorite_button_get_property; object_class->set_property = bz_favorite_button_set_property; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-favorite-button.ui"); gtk_widget_class_bind_template_child (widget_class, BzFavoriteButton, box); gtk_widget_class_bind_template_child (widget_class, BzFavoriteButton, icon); gtk_widget_class_bind_template_child (widget_class, BzFavoriteButton, count_revealer); gtk_widget_class_bind_template_child (widget_class, BzFavoriteButton, count_label); gtk_widget_class_bind_template_child (widget_class, BzFavoriteButton, stack); gtk_widget_class_bind_template_callback (widget_class, is_positive); gtk_widget_class_bind_template_callback (widget_class, format_favorites_count); gtk_widget_class_bind_template_callback (widget_class, button_clicked_cb); } static void bz_favorite_button_init (BzFavoriteButton *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->is_favorited = FALSE; } GtkWidget * bz_favorite_button_new (void) { return g_object_new (BZ_TYPE_FAVORITE_BUTTON, NULL); } void bz_favorite_button_set_entry (BzFavoriteButton *self, BzEntry *entry) { g_return_if_fail (BZ_IS_FAVORITE_BUTTON (self)); g_return_if_fail (entry == NULL || BZ_IS_ENTRY (entry)); if (g_set_object (&self->entry, entry)) { update_count (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENTRY]); if (self->state != NULL && self->entry != NULL) { dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) fetch_favorite_status_fiber, g_object_ref (self), g_object_unref)); } } } BzEntry * bz_favorite_button_get_entry (BzFavoriteButton *self) { g_return_val_if_fail (BZ_IS_FAVORITE_BUTTON (self), NULL); return self->entry; } void bz_favorite_button_set_state (BzFavoriteButton *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_FAVORITE_BUTTON (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); if (g_set_object (&self->state, state)) { g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); if (self->state != NULL && self->entry != NULL) { dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) fetch_favorite_status_fiber, g_object_ref (self), g_object_unref)); } } } BzStateInfo * bz_favorite_button_get_state (BzFavoriteButton *self) { g_return_val_if_fail (BZ_IS_FAVORITE_BUTTON (self), NULL); return self->state; } static gboolean is_positive (gpointer object, int value) { return value > 0; } static char * format_favorites_count (gpointer object, int count) { if (count >= 1000000) return g_strdup_printf ("%.1fM", count / 1000000.0); else if (count >= 1000) return g_strdup_printf ("%.1fK", count / 1000.0); else return g_strdup_printf ("%d", count); } static void update_icon (BzFavoriteButton *self) { if (self->is_favorited) gtk_image_set_from_icon_name (self->icon, "bookmark-filled-symbolic"); else gtk_image_set_from_icon_name (self->icon, "bookmark-outline-symbolic"); } static void update_count (BzFavoriteButton *self) { int count = 0; if (self->entry != NULL) g_object_get (self->entry, "favorites-count", &count, NULL); gtk_revealer_set_reveal_child (self->count_revealer, count > 0); if (count > 0) { g_autofree char *formatted = format_favorites_count (NULL, count); gtk_label_set_label (self->count_label, formatted); } } static DexFuture * fetch_favorite_status_fiber (BzFavoriteButton *button) { g_autoptr (GError) local_error = NULL; g_autoptr (JsonNode) node = NULL; g_autofree char *request = NULL; BzAuthState *auth_state = NULL; const char *token = NULL; const char *app_id = NULL; if (button->state == NULL || button->entry == NULL) return NULL; auth_state = bz_state_info_get_auth_state (button->state); if (!bz_auth_state_is_authenticated (auth_state)) return NULL; token = bz_auth_state_get_token (auth_state); if (token == NULL) return NULL; g_object_get (button->entry, "id", &app_id, NULL); request = g_strdup_printf ("/favorites/%s", app_id); node = dex_await_boxed ( bz_query_flathub_v2_json_authenticated (request, token), &local_error); if (local_error == NULL && node != NULL && JSON_NODE_HOLDS_VALUE (node)) { button->is_favorited = json_node_get_boolean (node); update_icon (button); } return NULL; } static DexFuture * toggle_favorite_fiber (BzFavoriteButton *button) { g_autoptr (GError) local_error = NULL; g_autofree char *request = NULL; BzAuthState *auth_state = NULL; const char *token = NULL; const char *app_id = NULL; int current_count = 0; if (button->state == NULL || button->entry == NULL) goto err; auth_state = bz_state_info_get_auth_state (button->state); if (!bz_auth_state_is_authenticated (auth_state)) goto err; token = bz_auth_state_get_token (auth_state); if (token == NULL) goto err; g_object_get (button->entry, "id", &app_id, "favorites-count", ¤t_count, NULL); if (button->is_favorited) request = g_strdup_printf ("/favorites/%s/remove", app_id); else request = g_strdup_printf ("/favorites/%s/add", app_id); if (button->is_favorited) dex_await ( bz_query_flathub_v2_json_authenticated_delete (request, token), &local_error); else dex_await ( bz_query_flathub_v2_json_authenticated_post (request, token), &local_error); if (local_error != NULL) { GtkWidget *window = NULL; gtk_stack_set_visible_child_name (button->stack, "content"); window = gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_WINDOW); if (window != NULL) bz_show_error_for_widget (window, _ ("Failed to update favorite"), local_error->message); } else { button->is_favorited = !button->is_favorited; g_object_set (button->entry, "favorites-count", button->is_favorited ? current_count + 1 : current_count - 1, NULL); update_icon (button); update_count (button); gtk_stack_set_visible_child_name (button->stack, "content"); } return NULL; err: gtk_stack_set_visible_child_name (button->stack, "content"); return NULL; } static void on_login_button_clicked (GtkButton *button, GtkPopover *popover) { gtk_popover_popdown (popover); } static void show_login_popover (BzFavoriteButton *self) { GtkWidget *popover; GtkWidget *box; GtkWidget *label; GtkWidget *button; popover = gtk_popover_new (); gtk_widget_set_parent (popover, GTK_WIDGET (self)); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_widget_set_margin_top (box, 6); gtk_widget_set_margin_bottom (box, 6); gtk_widget_set_margin_start (box, 6); gtk_widget_set_margin_end (box, 6); label = gtk_label_new (_ ("Log in with Flathub to manage favorites")); gtk_label_set_wrap (GTK_LABEL (label), TRUE); gtk_label_set_max_width_chars (GTK_LABEL (label), 17); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); gtk_box_append (GTK_BOX (box), label); button = gtk_button_new_with_label (_ ("Log In")); gtk_widget_add_css_class (button, "suggested-action"); gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.flathub-login"); g_signal_connect (button, "clicked", G_CALLBACK (on_login_button_clicked), popover); gtk_box_append (GTK_BOX (box), button); gtk_popover_set_child (GTK_POPOVER (popover), box); gtk_popover_popup (GTK_POPOVER (popover)); } static void button_clicked_cb (BzFavoriteButton *self, GtkButton *button) { BzAuthState *auth_state = NULL; if (self->state == NULL) return; auth_state = bz_state_info_get_auth_state (self->state); if (!bz_auth_state_is_authenticated (auth_state)) { show_login_popover (self); return; } gtk_stack_set_visible_child_name (self->stack, "spinner"); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) toggle_favorite_fiber, g_object_ref (self), g_object_unref)); } bazaar-org-bazaar-b6e9a65/src/bz-favorite-button.h000066400000000000000000000026501522167256300221350ustar00rootroot00000000000000/* bz-favorite-button.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include "bz-state-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_FAVORITE_BUTTON (bz_favorite_button_get_type ()) G_DECLARE_FINAL_TYPE (BzFavoriteButton, bz_favorite_button, BZ, FAVORITE_BUTTON, GtkButton) GtkWidget * bz_favorite_button_new (void); void bz_favorite_button_set_entry (BzFavoriteButton *self, BzEntry *entry); BzEntry * bz_favorite_button_get_entry (BzFavoriteButton *self); void bz_favorite_button_set_state (BzFavoriteButton *self, BzStateInfo *state); BzStateInfo * bz_favorite_button_get_state (BzFavoriteButton *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-favorites-page.blp000066400000000000000000000054071522167256300222520ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzFavoritesPage: Adw.NavigationPage { title: _("Favorites"); Adw.ToolbarView { [top] Adw.HeaderBar { [end] Button install_all_button { styles [ "flat", ] has-tooltip: true; tooltip-text: _("Install All"); icon-name: "list-add-symbolic"; sensitive: bind $invert_boolean($is_empty(template.favorites) as ) as ; clicked => $install_all_cb() swapped; } } content: Adw.BreakpointBin { width-request: 360; height-request: 100; child: Adw.ViewStack stack { enable-transitions: true; transition-duration: 400; Adw.ViewStackPage { name: "loading"; title: _("Loading"); child: Adw.Spinner { halign: fill; valign: center; width-request: 64; height-request: 64; margin-bottom: 18; }; } Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "starred-symbolic"; title: _("No Favorites"); description: _("Applications you mark as favorite will appear here"); }; } Adw.ViewStackPage { name: "content"; title: _("Favorites"); child: ScrolledWindow { hscrollbar-policy: never; child: Adw.ClampScrollable { maximum-size: 650; child: ListView list_view { styles [ "navigation-sidebar", "installed-list-view", "no-vertical-margin" ] margin-start: 25; margin-end: 25; overflow: visible; model: NoSelection { model: bind template.model; }; factory: BuilderListItemFactory { template ListItem { activatable: true; selectable: false; focusable: true; child: Revealer { reveal-child: true; overflow: visible; child: $BzFavoritesTile { group: bind template.item as <$BzEntryGroup>; activated => $tile_activated_cb(); unfavorited => $unfavorite_cb(); }; }; } }; }; }; }; } }; Adw.Breakpoint { condition ("max-width: 700px") setters { list_view.margin-start: 8; list_view.margin-end: 8; } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-favorites-page.c000066400000000000000000000310621522167256300217130ustar00rootroot00000000000000/* bz-favorites-page.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-application-map-factory.h" #include "bz-env.h" #include "bz-error.h" #include "bz-favorites-page.h" #include "bz-favorites-tile.h" #include "bz-global-net.h" #include "bz-io.h" #include "bz-util.h" struct _BzFavoritesPage { AdwNavigationPage parent_instance; BzStateInfo *state; GListModel *model; GListModel *favorites; gboolean show_sidebar; AdwViewStack *stack; }; G_DEFINE_FINAL_TYPE (BzFavoritesPage, bz_favorites_page, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_STATE, PROP_MODEL, PROP_FAVORITES, PROP_SHOW_SIDEBAR, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * fetch_favorites_fiber (GWeakRef *wr); static void favorites_changed (BzFavoritesPage *self, guint position, guint removed, guint added, GListModel *model); static void set_page (BzFavoritesPage *self); static void bz_favorites_page_dispose (GObject *object) { BzFavoritesPage *self = BZ_FAVORITES_PAGE (object); if (self->favorites != NULL) g_signal_handlers_disconnect_by_func (self->favorites, favorites_changed, self); g_clear_object (&self->favorites); g_clear_object (&self->model); g_clear_object (&self->state); G_OBJECT_CLASS (bz_favorites_page_parent_class)->dispose (object); } static void bz_favorites_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFavoritesPage *self = BZ_FAVORITES_PAGE (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, self->state); break; case PROP_MODEL: g_value_set_object (value, self->model); break; case PROP_FAVORITES: g_value_set_object (value, self->favorites); break; case PROP_SHOW_SIDEBAR: g_value_set_boolean (value, self->show_sidebar); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_favorites_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFavoritesPage *self = BZ_FAVORITES_PAGE (object); switch (prop_id) { case PROP_STATE: self->state = g_value_dup_object (value); break; case PROP_SHOW_SIDEBAR: self->show_sidebar = g_value_get_boolean (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SHOW_SIDEBAR]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_favorites_page_constructed (GObject *object) { BzFavoritesPage *self = BZ_FAVORITES_PAGE (object); g_autoptr (DexFuture) future = NULL; G_OBJECT_CLASS (bz_favorites_page_parent_class)->constructed (object); future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) fetch_favorites_fiber, bz_track_weak (self), bz_weak_release); dex_future_disown (g_steal_pointer (&future)); } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_empty (gpointer object, GListModel *model) { if (model == NULL) return TRUE; return g_list_model_get_n_items (model) == 0; } static gboolean is_favorited (GListModel *favorites, BzEntryGroup *group) { if (favorites == NULL || group == NULL) return FALSE; return g_list_store_find (G_LIST_STORE (favorites), group, NULL); } static void tile_activated_cb (BzFavoritesTile *tile) { BzEntryGroup *group = NULL; g_assert (BZ_IS_FAVORITES_TILE (tile)); group = bz_favorites_tile_get_group (tile); if (group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (tile), "window.show-group", "s", bz_entry_group_get_id (group)); } static void unfavorite_cb (BzFavoritesTile *tile, BzEntryGroup *group, gpointer user_data) { BzFavoritesPage *self = NULL; guint position = 0; g_assert (BZ_IS_FAVORITES_TILE (tile)); g_assert (BZ_IS_ENTRY_GROUP (group)); self = BZ_FAVORITES_PAGE (gtk_widget_get_ancestor (GTK_WIDGET (tile), BZ_TYPE_FAVORITES_PAGE)); if (self == NULL) return; if (self->favorites == NULL) return; if (g_list_store_find (G_LIST_STORE (self->favorites), group, &position)) { g_list_store_remove (G_LIST_STORE (self->favorites), position); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FAVORITES]); } } static void install_all_cb (BzFavoritesPage *self, GtkButton *button) { GVariantBuilder builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("as")); guint n_items = 0; g_return_if_fail (BZ_IS_FAVORITES_PAGE (self)); if (self->model == NULL || self->favorites == NULL) return; n_items = g_list_model_get_n_items (self->favorites); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntryGroup) group = NULL; group = g_list_model_get_item (self->favorites, i); if (!is_favorited (self->favorites, group)) continue; g_variant_builder_add (&builder, "s", bz_entry_group_get_id (group)); } gtk_widget_activate_action (GTK_WIDGET (self), "window.bulk-install", "as", &builder); } static void bz_favorites_page_class_init (BzFavoritesPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_favorites_page_dispose; object_class->constructed = bz_favorites_page_constructed; object_class->get_property = bz_favorites_page_get_property; object_class->set_property = bz_favorites_page_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_FAVORITES] = g_param_spec_object ( "favorites", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_SHOW_SIDEBAR] = g_param_spec_boolean ( "show-sidebar", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_FAVORITES_TILE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-favorites-page.ui"); gtk_widget_class_bind_template_child (widget_class, BzFavoritesPage, stack); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_empty); gtk_widget_class_bind_template_callback (widget_class, tile_activated_cb); gtk_widget_class_bind_template_callback (widget_class, unfavorite_cb); gtk_widget_class_bind_template_callback (widget_class, install_all_cb); } static void bz_favorites_page_init (BzFavoritesPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_favorites_page_new (BzStateInfo *state) { return g_object_new (BZ_TYPE_FAVORITES_PAGE, "state", state, NULL); } static void favorites_changed (BzFavoritesPage *self, guint position, guint removed, guint added, GListModel *model) { set_page (self); } static void set_page (BzFavoritesPage *self) { if (self->favorites != NULL && g_list_model_get_n_items (self->favorites) > 0) adw_view_stack_set_visible_child_name (self->stack, "content"); else adw_view_stack_set_visible_child_name (self->stack, "empty"); } static int compare_entry_groups_by_title (BzEntryGroup *group_a, BzEntryGroup *group_b) { const char *title_a = bz_entry_group_get_title (group_a); const char *title_b = bz_entry_group_get_title (group_b); return g_utf8_collate (title_a, title_b); } static DexFuture * fetch_favorites_fiber (GWeakRef *wr) { g_autoptr (BzFavoritesPage) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GtkStringList) id_list = NULL; g_autoptr (GListModel) model = NULL; g_autoptr (GListStore) sorted_store = NULL; g_autoptr (GListStore) favorites_store = NULL; g_autoptr (JsonNode) node = NULL; BzApplicationMapFactory *factory = NULL; BzAuthState *auth_state = NULL; const char *token = NULL; JsonArray *array = NULL; guint n_favorites = 0; guint n_items = 0; self = g_weak_ref_get (wr); if (self == NULL) return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_CANCELLED, "Page destroyed"); id_list = gtk_string_list_new (NULL); auth_state = bz_state_info_get_auth_state (self->state); token = bz_auth_state_get_token (auth_state); if (token != NULL && bz_auth_state_is_authenticated (auth_state)) { node = dex_await_boxed ( bz_query_flathub_v2_json_authenticated ("/favorites", token), &local_error); if (node == NULL) { g_warning ("Failed to fetch favorites from Flathub: %s", local_error->message); goto done; } if (!JSON_NODE_HOLDS_ARRAY (node)) { g_warning ("Unexpected response format from Flathub favorites API"); goto done; } array = json_node_get_array (node); n_favorites = json_array_get_length (array); for (guint i = 0; i < n_favorites; i++) { JsonObject *favorite_obj = NULL; const char *app_id = NULL; favorite_obj = json_array_get_object_element (array, i); app_id = json_object_get_string_member (favorite_obj, "app_id"); if (app_id != NULL) gtk_string_list_append (id_list, app_id); } } done: factory = bz_state_info_get_application_factory (self->state); model = bz_application_map_factory_generate (factory, G_LIST_MODEL (id_list)); sorted_store = g_list_store_new (BZ_TYPE_ENTRY_GROUP); favorites_store = g_list_store_new (BZ_TYPE_ENTRY_GROUP); n_items = g_list_model_get_n_items (model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntryGroup) group = g_list_model_get_item (model, i); g_list_store_append (sorted_store, group); g_list_store_append (favorites_store, group); } g_list_store_sort (sorted_store, (GCompareDataFunc) compare_entry_groups_by_title, NULL); g_clear_object (&self->model); self->model = G_LIST_MODEL (g_steal_pointer (&sorted_store)); if (self->favorites != NULL) g_signal_handlers_disconnect_by_func (self->favorites, favorites_changed, self); g_clear_object (&self->favorites); self->favorites = G_LIST_MODEL (g_steal_pointer (&favorites_store)); g_signal_connect_swapped (self->favorites, "items-changed", G_CALLBACK (favorites_changed), self); set_page (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FAVORITES]); return dex_future_new_true (); } bazaar-org-bazaar-b6e9a65/src/bz-favorites-page.h000066400000000000000000000021001522167256300217070ustar00rootroot00000000000000/* bz-favorites-page.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_FAVORITES_PAGE (bz_favorites_page_get_type ()) G_DECLARE_FINAL_TYPE (BzFavoritesPage, bz_favorites_page, BZ, FAVORITES_PAGE, AdwNavigationPage) GtkWidget *bz_favorites_page_new (BzStateInfo *state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-favorites-tile.blp000066400000000000000000000072001522167256300222640ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzFavoritesTile: $BzListTile { accessibility { labelled-by: title_label; described-by: description_label; } child: Box { orientation: horizontal; spacing: 10; $BzTransactIcon { margin-start: 10; margin-top: 10; margin-bottom: 10; width-request: 48; height-request: 48; info: $BzTransactIconInfo { group: bind template.group as <$BzEntryGroup>; paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; }; } Box { orientation: vertical; valign: center; spacing: 4; Label title_label { xalign: 0.0; ellipsize: end; single-line-mode: true; has-tooltip: true; tooltip-text: bind template.group as <$BzEntryGroup>.id; label: bind template.group as <$BzEntryGroup>.title; } Label description_label { halign: start; label: bind template.group as <$BzEntryGroup>.description; xalign: 0.0; ellipsize: end; single-line-mode: true; styles ["dim-label", "caption"] } } Button support_button { styles [ "circular", "flat", "suggested-action", "support" ] has-tooltip: true; tooltip-text: _("Support This Application"); width-request: 32; height-request: 32; valign: center; icon-name: "heart-filled-symbolic"; visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.donation-url) as ) as ; clicked => $support_cb() swapped; } Box { orientation: horizontal; spacing: 8; margin-end: 8; hexpand: true; halign: end; Button install_remove_button { styles [ "flat", ] width-request: 32; height-request: 32; valign: center; has-tooltip: true; visible: bind $invert_boolean($logical_and($is_zero(template.group as <$BzEntryGroup>.removable) as , $is_zero(template.group as <$BzEntryGroup>.installable) as ) as ) as ; tooltip-text: bind $get_install_remove_tooltip(template.group as <$BzEntryGroup>.removable) as ; sensitive: bind $switch_bool( template.group as <$BzEntryGroup>.removable, $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable-and-available) as ) as , $invert_boolean($is_zero(template.group as <$BzEntryGroup>.installable-and-available) as ) as , ) as ; icon-name: bind $get_install_remove_icon(template.group as <$BzEntryGroup>.removable) as ; clicked => $install_remove_cb() swapped; } Stack unfavorite_stack { transition-type: crossfade; StackPage { name: "button"; child: Button unfavorite_button { styles [ "flat", ] width-request: 32; height-request: 32; valign: center; has-tooltip: true; tooltip-text: _("Remove From Favorites"); icon-name: "bookmark-filled-symbolic"; clicked => $unfavorite_cb() swapped; }; } StackPage { name: "spinner"; child: Adw.Spinner { halign: center; width-request: 16; }; } } Image { pixel-size: 14; icon-name: "go-next-symbolic"; margin-end: 4; styles ["dimmed"] } } }; } bazaar-org-bazaar-b6e9a65/src/bz-favorites-tile.c000066400000000000000000000244551522167256300217440ustar00rootroot00000000000000/* bz-favorites-tile.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-entry-group-util.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-error.h" #include "bz-favorites-page.h" #include "bz-favorites-tile.h" #include "bz-global-net.h" #include "bz-state-info.h" #include "bz-window.h" struct _BzFavoritesTile { BzListTile parent_instance; BzEntryGroup *group; GtkLabel *title_label; GtkLabel *description_label; GtkButton *install_remove_button; GtkButton *support_button; GtkButton *unfavorite_button; GtkStack *unfavorite_stack; }; G_DEFINE_FINAL_TYPE (BzFavoritesTile, bz_favorites_tile, BZ_TYPE_LIST_TILE) enum { PROP_0, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_UNFAVORITED, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void install_remove_cb (BzFavoritesTile *self, GtkButton *button); static void support_cb (BzFavoritesTile *self, GtkButton *button); static DexFuture * unfavorite_fiber (BzFavoritesTile *tile); static void unfavorite_cb (BzFavoritesTile *self, GtkButton *button); static void bz_favorites_tile_dispose (GObject *object) { BzFavoritesTile *self = BZ_FAVORITES_TILE (object); g_clear_object (&self->group); G_OBJECT_CLASS (bz_favorites_tile_parent_class)->dispose (object); } static void bz_favorites_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFavoritesTile *self = BZ_FAVORITES_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_favorites_tile_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_favorites_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFavoritesTile *self = BZ_FAVORITES_TILE (object); switch (prop_id) { case PROP_GROUP: bz_favorites_tile_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static char * get_install_remove_tooltip (gpointer object, int removable) { if (removable > 0) return g_strdup (C_("Install Controls", "Uninstall")); else return g_strdup (C_("Install Controls", "Install")); } static char * get_install_remove_icon (gpointer object, int removable) { if (removable > 0) return g_strdup ("user-trash-symbolic"); else return g_strdup ("document-save-symbolic"); } static gboolean switch_bool (gpointer object, gboolean condition, gboolean true_value, gboolean false_value) { return condition ? true_value : false_value; } static gboolean logical_and (gpointer object, gboolean value1, gboolean value2) { return value1 && value2; } static void bz_favorites_tile_class_init (BzFavoritesTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_favorites_tile_dispose; object_class->get_property = bz_favorites_tile_get_property; object_class->set_property = bz_favorites_tile_set_property; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_UNFAVORITED] = g_signal_new ( "unfavorited", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ENTRY_GROUP); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-favorites-tile.ui"); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, title_label); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, description_label); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, install_remove_button); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, support_button); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, unfavorite_button); gtk_widget_class_bind_template_child (widget_class, BzFavoritesTile, unfavorite_stack); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, switch_bool); gtk_widget_class_bind_template_callback (widget_class, logical_and); gtk_widget_class_bind_template_callback (widget_class, get_install_remove_tooltip); gtk_widget_class_bind_template_callback (widget_class, get_install_remove_icon); gtk_widget_class_bind_template_callback (widget_class, install_remove_cb); gtk_widget_class_bind_template_callback (widget_class, unfavorite_cb); gtk_widget_class_bind_template_callback (widget_class, support_cb); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_favorites_tile_init (BzFavoritesTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_favorites_tile_new (void) { return g_object_new (BZ_TYPE_FAVORITES_TILE, NULL); } void bz_favorites_tile_set_group (BzFavoritesTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_FAVORITES_TILE (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } BzEntryGroup * bz_favorites_tile_get_group (BzFavoritesTile *self) { g_return_val_if_fail (BZ_IS_FAVORITES_TILE (self), NULL); return self->group; } static void install_remove_cb (BzFavoritesTile *self, GtkButton *button) { int removable = 0; if (self->group == NULL) return; removable = bz_entry_group_get_removable (self->group); if (removable > 0) gtk_widget_activate_action (GTK_WIDGET (self), "window.remove-group", "(sb)", bz_entry_group_get_id (self->group), FALSE); else gtk_widget_activate_action (GTK_WIDGET (self), "window.install-group", "(sb)", bz_entry_group_get_id (self->group), TRUE); } static void support_cb (BzFavoritesTile *self, GtkButton *button) { const char *url = NULL; if (self->group == NULL) return; url = bz_entry_group_get_donation_url (self->group); if (url == NULL) return; g_app_info_launch_default_for_uri (url, NULL, NULL); } static DexFuture * unfavorite_fiber (BzFavoritesTile *tile) { g_autoptr (GError) local_error = NULL; g_autoptr (BzStateInfo) state = NULL; g_autofree char *request = NULL; BzFavoritesPage *page = NULL; BzAuthState *auth_state = NULL; const char *token = NULL; const char *app_id = NULL; GtkWidget *revealer = NULL; GtkWidget *row = NULL; revealer = gtk_widget_get_parent (GTK_WIDGET (tile)); row = gtk_widget_get_parent (GTK_WIDGET (revealer)); page = BZ_FAVORITES_PAGE (gtk_widget_get_ancestor (GTK_WIDGET (tile), BZ_TYPE_FAVORITES_PAGE)); if (page == NULL) return NULL; g_object_get (page, "state", &state, NULL); if (state == NULL) return NULL; auth_state = bz_state_info_get_auth_state (state); token = bz_auth_state_get_token (auth_state); if (token == NULL || !bz_auth_state_is_authenticated (auth_state)) return NULL; app_id = bz_entry_group_get_id (tile->group); request = g_strdup_printf ("/favorites/%s/remove", app_id); dex_await ( bz_query_flathub_v2_json_authenticated_delete (request, token), &local_error); if (local_error != NULL) { GtkWidget *window = NULL; gtk_stack_set_visible_child_name (tile->unfavorite_stack, "button"); window = gtk_widget_get_ancestor (GTK_WIDGET (tile), GTK_TYPE_WINDOW); if (window != NULL) bz_show_error_for_widget (window, _("Failed to remove favorite"), local_error->message); } else { gtk_widget_set_overflow (revealer, GTK_OVERFLOW_HIDDEN); gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), FALSE); gtk_widget_add_css_class (row, "hidden"); g_signal_emit (tile, signals[SIGNAL_UNFAVORITED], 0, tile->group); } return NULL; } static void unfavorite_cb (BzFavoritesTile *self, GtkButton *button) { gtk_stack_set_visible_child_name (self->unfavorite_stack, "spinner"); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) unfavorite_fiber, g_object_ref (self), g_object_unref)); } bazaar-org-bazaar-b6e9a65/src/bz-favorites-tile.h000066400000000000000000000023731522167256300217440ustar00rootroot00000000000000/* bz-favorites-tile.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-list-tile.h" #include G_BEGIN_DECLS #define BZ_TYPE_FAVORITES_TILE (bz_favorites_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzFavoritesTile, bz_favorites_tile, BZ, FAVORITES_TILE, BzListTile) GtkWidget * bz_favorites_tile_new (void); void bz_favorites_tile_set_group (BzFavoritesTile *self, BzEntryGroup *group); BzEntryGroup * bz_favorites_tile_get_group (BzFavoritesTile *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-featured-carousel-view.c000066400000000000000000000126321522167256300233630ustar00rootroot00000000000000/* bz-featured-carousel-view.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include "bz-featured-carousel-view.h" #include "bz-application.h" #include "bz-curated-appids-info.h" #include "bz-featured-carousel.h" struct _BzFeaturedCarouselView { AdwBin parent_instance; BzCuratedFeaturedCarousel *carousel; }; G_DEFINE_FINAL_TYPE (BzFeaturedCarouselView, bz_featured_carousel_view, ADW_TYPE_BIN) enum { PROP_0, PROP_CAROUSEL, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_featured_carousel_view_dispose (GObject *object) { BzFeaturedCarouselView *self = BZ_FEATURED_CAROUSEL_VIEW (object); g_clear_object (&self->carousel); G_OBJECT_CLASS (bz_featured_carousel_view_parent_class)->dispose (object); } static void bz_featured_carousel_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFeaturedCarouselView *self = BZ_FEATURED_CAROUSEL_VIEW (object); switch (prop_id) { case PROP_CAROUSEL: g_value_set_object (value, bz_featured_carousel_view_get_carousel (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_featured_carousel_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFeaturedCarouselView *self = BZ_FEATURED_CAROUSEL_VIEW (object); switch (prop_id) { case PROP_CAROUSEL: bz_featured_carousel_view_set_carousel (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_featured_carousel_view_class_init (BzFeaturedCarouselViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_featured_carousel_view_dispose; object_class->get_property = bz_featured_carousel_view_get_property; object_class->set_property = bz_featured_carousel_view_set_property; props[PROP_CAROUSEL] = g_param_spec_object ( "carousel", NULL, NULL, BZ_TYPE_CURATED_FEATURED_CAROUSEL, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_FEATURED_CAROUSEL); } static void bz_featured_carousel_view_init (BzFeaturedCarouselView *self) { } GtkWidget * bz_featured_carousel_view_new (BzCuratedFeaturedCarousel *carousel) { return g_object_new ( BZ_TYPE_FEATURED_CAROUSEL_VIEW, "carousel", carousel, NULL); } void bz_featured_carousel_view_set_carousel (BzFeaturedCarouselView *self, BzCuratedFeaturedCarousel *carousel) { BzCuratedAppidsInfo *appids = NULL; GListModel *list = NULL; g_return_if_fail (BZ_IS_FEATURED_CAROUSEL_VIEW (self)); g_return_if_fail (carousel == NULL || BZ_IS_CURATED_FEATURED_CAROUSEL (carousel)); g_clear_object (&self->carousel); adw_bin_set_child (ADW_BIN (self), NULL); if (carousel != NULL) { self->carousel = g_object_ref (carousel); appids = bz_curated_featured_carousel_get_appids (carousel); if (appids != NULL) list = bz_curated_appids_info_get_list (appids); if (list != NULL) { BzStateInfo *info = NULL; BzApplicationMapFactory *factory = NULL; g_autoptr (GListModel) groups = NULL; BzFeaturedCarousel *carousel_w = NULL; gboolean disable_auto_rotate = FALSE; info = bz_state_info_get_default (); factory = bz_state_info_get_application_factory (info); groups = bz_application_map_factory_generate (factory, list); g_object_get (carousel, "disable-auto-rotate", &disable_auto_rotate, NULL); carousel_w = bz_featured_carousel_new (); bz_featured_carousel_set_model (carousel_w, groups); g_object_set (carousel_w, "auto-rotate", !disable_auto_rotate, NULL); gtk_widget_set_margin_top (GTK_WIDGET (carousel_w), 20); gtk_widget_set_margin_bottom (GTK_WIDGET (carousel_w), 12); adw_bin_set_child (ADW_BIN (self), GTK_WIDGET (carousel_w)); } } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CAROUSEL]); } BzCuratedFeaturedCarousel * bz_featured_carousel_view_get_carousel (BzFeaturedCarouselView *self) { g_return_val_if_fail (BZ_IS_FEATURED_CAROUSEL_VIEW (self), NULL); return self->carousel; } bazaar-org-bazaar-b6e9a65/src/bz-featured-carousel-view.h000066400000000000000000000025761522167256300233760ustar00rootroot00000000000000/* bz-featured-carousel-view.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include "bz-curated-featured-carousel.h" G_BEGIN_DECLS #define BZ_TYPE_FEATURED_CAROUSEL_VIEW (bz_featured_carousel_view_get_type ()) G_DECLARE_FINAL_TYPE (BzFeaturedCarouselView, bz_featured_carousel_view, BZ, FEATURED_CAROUSEL_VIEW, AdwBin) GtkWidget * bz_featured_carousel_view_new (BzCuratedFeaturedCarousel *carousel); void bz_featured_carousel_view_set_carousel (BzFeaturedCarouselView *self, BzCuratedFeaturedCarousel *carousel); BzCuratedFeaturedCarousel * bz_featured_carousel_view_get_carousel (BzFeaturedCarouselView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-featured-carousel.blp000066400000000000000000000034311522167256300227430ustar00rootroot00000000000000using Gtk 4.0; template $BzFeaturedCarousel: Box { orientation: vertical; spacing: 12; EventControllerFocus { enter => $on_focus_enter_cb(template); leave => $on_focus_leave_cb(template); } Overlay { [overlay] Button previous_button { halign: start; valign: center; width-request: 48; height-request: 48; margin-start: 12; icon-name: "go-previous-symbolic"; visible: bind $is_gt(selection.n-items, 1); clicked => $previous_button_clicked_cb(); styles [ "circular", "flat", "image-button", ] accessibility { label: _("Previous"); } } [overlay] Button next_button { halign: end; valign: center; width-request: 48; height-request: 48; margin-end: 12; icon-name: "go-next-symbolic"; visible: bind $is_gt(selection.n-items, 1); clicked => $next_button_clicked_cb(); styles [ "circular", "flat", "image-button", ] accessibility { label: _("Next"); } } child: $BgeCarousel carousel { styles [ "card", "featured-carousel" ] notify::has-focus => $carousel_focus_cb(); allow-mouse-drag: true; allow-overshoot: false; allow-scroll-wheel: true; allow-raise: false; create-widget => $on_create_widget(template); remove-widget => $on_remove_widget(template); focusable: true; model: SingleSelection selection { autoselect: true; model: bind template.model; notify::selected => $on_notify_selected(template); // notify::n-items => $on_notify_n_items(template); }; }; } EventControllerKey { key-pressed => $key_pressed_cb(); } } bazaar-org-bazaar-b6e9a65/src/bz-featured-carousel.c000066400000000000000000000330221522167256300224070ustar00rootroot00000000000000/* bz-featured-carousel.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-entry-group.h" #include "bz-featured-carousel.h" #include "bz-featured-tile.h" #include "bz-template-callbacks.h" #define FEATURED_ROTATE_TIME 5 #define MANUAL_ROTATE_RECOVER_TIME 7.5 struct _BzFeaturedCarousel { GtkBox parent_instance; GListModel *model; gboolean auto_rotate; guint rotation_timer_source; GTimer *time_since_manual_rotate; gboolean has_focus; BgeCarousel *carousel; GtkSingleSelection *selection; GtkButton *next_button; GtkButton *previous_button; }; G_DEFINE_FINAL_TYPE (BzFeaturedCarousel, bz_featured_carousel, GTK_TYPE_BOX) enum { PROP_0, PROP_MODEL, PROP_AUTO_ROTATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL, }; static void update_buttons_for_tile (BzFeaturedCarousel *self) { GtkWidget *child = NULL; const char *class_name = NULL; guint index = 0; index = gtk_single_selection_get_selected (self->selection); child = bge_carousel_get_nth_page (self->carousel, index); if (child == NULL) return; class_name = gtk_widget_has_css_class (child, "flathub-lotion") ? "flathub-lotion" : "flathub-gunmetal"; gtk_widget_remove_css_class (GTK_WIDGET (self->next_button), "flathub-lotion"); gtk_widget_remove_css_class (GTK_WIDGET (self->next_button), "flathub-gunmetal"); gtk_widget_remove_css_class (GTK_WIDGET (self->previous_button), "flathub-lotion"); gtk_widget_remove_css_class (GTK_WIDGET (self->previous_button), "flathub-gunmetal"); gtk_widget_add_css_class (GTK_WIDGET (self->next_button), class_name); gtk_widget_add_css_class (GTK_WIDGET (self->previous_button), class_name); } static void on_style_changed (AdwStyleManager *style_manager, GParamSpec *pspec, BzFeaturedCarousel *self) { g_idle_add_once ((GSourceOnceFunc) update_buttons_for_tile, self); } static void announce_selected_entry (BzFeaturedCarousel *self) { guint index = 0; g_autoptr (BzEntryGroup) group = NULL; const char *title = NULL; const char *description = NULL; g_autofree char *message = NULL; index = gtk_single_selection_get_selected (self->selection); group = g_list_model_get_item (G_LIST_MODEL (self->selection), index); if (group == NULL) return; title = bz_entry_group_get_title (group); description = bz_entry_group_get_description (group); message = g_strdup_printf ("%s. %s", title != NULL ? title : "", description != NULL ? description : ""); gtk_accessible_announce (GTK_ACCESSIBLE (self), message, GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_MEDIUM); } static void carousel_focus_cb (BgeCarousel *self, GParamSpec *pspec, BzFeaturedCarousel *carousel) { if (gtk_widget_has_focus (GTK_WIDGET (self))) announce_selected_entry (carousel); } static void on_focus_enter_cb (BzFeaturedCarousel *self) { self->has_focus = TRUE; } static void on_focus_leave_cb (BzFeaturedCarousel *self) { self->has_focus = FALSE; } static void on_notify_selected (BzFeaturedCarousel *self, GParamSpec *pspec, GtkSingleSelection *selection) { g_timer_start (self->time_since_manual_rotate); update_buttons_for_tile (self); } static void show_relative_page (BzFeaturedCarousel *self, gint delta, gboolean use_custom_spring) { guint n_pages; guint current_page; guint new_page; n_pages = g_list_model_get_n_items (G_LIST_MODEL (self->selection)); if (n_pages == 0) return; current_page = gtk_single_selection_get_selected (self->selection); new_page = (n_pages + current_page + delta) % n_pages; g_signal_handlers_block_by_func (self->selection, on_notify_selected, self); gtk_single_selection_set_selected (self->selection, new_page); g_signal_handlers_unblock_by_func (self->selection, on_notify_selected, self); if (self->has_focus) announce_selected_entry (self); update_buttons_for_tile (self); } static gboolean rotate_cb (gpointer user_data) { BzFeaturedCarousel *self = BZ_FEATURED_CAROUSEL (user_data); double elapsed = 0.0; if (!self->auto_rotate) return G_SOURCE_CONTINUE; if (self->has_focus) return G_SOURCE_CONTINUE; elapsed = g_timer_elapsed (self->time_since_manual_rotate, NULL); if (elapsed > MANUAL_ROTATE_RECOVER_TIME) show_relative_page (self, +1, TRUE); return G_SOURCE_CONTINUE; } static void next_button_clicked_cb (GtkButton *button, gpointer user_data) { BzFeaturedCarousel *self; self = BZ_FEATURED_CAROUSEL (user_data); show_relative_page (self, +1, FALSE); } static void previous_button_clicked_cb (GtkButton *button, gpointer user_data) { BzFeaturedCarousel *self; self = BZ_FEATURED_CAROUSEL (user_data); show_relative_page (self, -1, FALSE); } static void tile_clicked_cb (BzFeaturedTile *tile, gpointer user_data) { BzEntryGroup *group = NULL; group = bz_featured_tile_get_group (tile); gtk_widget_activate_action (GTK_WIDGET (user_data), "window.show-group", "s", bz_entry_group_get_id (group)); } static gboolean key_pressed_cb (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state, BzFeaturedCarousel *self) { if (gtk_widget_is_visible (GTK_WIDGET (self->previous_button)) && gtk_widget_is_sensitive (GTK_WIDGET (self->previous_button)) && ((gtk_widget_get_direction (GTK_WIDGET (self->previous_button)) == GTK_TEXT_DIR_LTR && keyval == GDK_KEY_Left) || (gtk_widget_get_direction (GTK_WIDGET (self->previous_button)) == GTK_TEXT_DIR_RTL && keyval == GDK_KEY_Right))) { gtk_widget_activate (GTK_WIDGET (self->previous_button)); return GDK_EVENT_STOP; } if (gtk_widget_is_visible (GTK_WIDGET (self->next_button)) && gtk_widget_is_sensitive (GTK_WIDGET (self->next_button)) && ((gtk_widget_get_direction (GTK_WIDGET (self->next_button)) == GTK_TEXT_DIR_LTR && keyval == GDK_KEY_Right) || (gtk_widget_get_direction (GTK_WIDGET (self->next_button)) == GTK_TEXT_DIR_RTL && keyval == GDK_KEY_Left))) { gtk_widget_activate (GTK_WIDGET (self->next_button)); return GDK_EVENT_STOP; } switch (keyval) { case GDK_KEY_Return: case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: case GDK_KEY_space: case GDK_KEY_KP_Space: { GtkWidget *tile = NULL; tile = bge_carousel_get_nth_page (self->carousel, gtk_single_selection_get_selected (self->selection)); if (tile != NULL) g_signal_emit_by_name (tile, "clicked"); return GDK_EVENT_STOP; } default: break; } return GDK_EVENT_PROPAGATE; } static void bz_featured_carousel_dispose (GObject *object) { BzFeaturedCarousel *self = BZ_FEATURED_CAROUSEL (object); g_signal_handlers_disconnect_by_func (adw_style_manager_get_default (), on_style_changed, self); g_clear_handle_id (&self->rotation_timer_source, g_source_remove); g_clear_pointer (&self->time_since_manual_rotate, g_timer_destroy); g_clear_object (&self->model); G_OBJECT_CLASS (bz_featured_carousel_parent_class)->dispose (object); } static void bz_featured_carousel_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFeaturedCarousel *self; self = BZ_FEATURED_CAROUSEL (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_featured_carousel_get_model (self)); break; case PROP_AUTO_ROTATE: g_value_set_boolean (value, self->auto_rotate); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void bz_featured_carousel_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFeaturedCarousel *self; self = BZ_FEATURED_CAROUSEL (object); switch (prop_id) { case PROP_MODEL: bz_featured_carousel_set_model (self, g_value_get_object (value)); break; case PROP_AUTO_ROTATE: self->auto_rotate = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static GtkWidget * on_create_widget (BzFeaturedCarousel *self, BzEntryGroup *group, BgeCarousel *carousel) { BzFeaturedTile *tile = NULL; tile = bz_featured_tile_new (group); gtk_widget_set_hexpand (GTK_WIDGET (tile), TRUE); gtk_widget_set_vexpand (GTK_WIDGET (tile), TRUE); gtk_widget_set_can_focus (GTK_WIDGET (tile), FALSE); g_signal_connect (tile, "clicked", G_CALLBACK (tile_clicked_cb), self); return GTK_WIDGET (tile); } static void on_remove_widget (BzFeaturedCarousel *self, BzFeaturedTile *tile, BzEntryGroup *group, BgeCarousel *carousel) { } static void bz_featured_carousel_class_init (BzFeaturedCarouselClass *klass) { GObjectClass *object_class; GtkWidgetClass *widget_class; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->get_property = bz_featured_carousel_get_property; object_class->set_property = bz_featured_carousel_set_property; object_class->dispose = bz_featured_carousel_dispose; props[PROP_MODEL] = g_param_spec_object ("model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); props[PROP_AUTO_ROTATE] = g_param_spec_boolean ("auto-rotate", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-featured-carousel.ui"); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzFeaturedCarousel, carousel); gtk_widget_class_bind_template_child (widget_class, BzFeaturedCarousel, selection); gtk_widget_class_bind_template_child (widget_class, BzFeaturedCarousel, next_button); gtk_widget_class_bind_template_child (widget_class, BzFeaturedCarousel, previous_button); gtk_widget_class_bind_template_callback (widget_class, on_create_widget); gtk_widget_class_bind_template_callback (widget_class, on_remove_widget); gtk_widget_class_bind_template_callback (widget_class, on_notify_selected); gtk_widget_class_bind_template_callback (widget_class, next_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, previous_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, carousel_focus_cb); gtk_widget_class_bind_template_callback (widget_class, on_focus_enter_cb); gtk_widget_class_bind_template_callback (widget_class, on_focus_leave_cb); gtk_widget_class_bind_template_callback (widget_class, key_pressed_cb); } static void bz_featured_carousel_init (BzFeaturedCarousel *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->auto_rotate = TRUE; self->rotation_timer_source = g_timeout_add_seconds ( FEATURED_ROTATE_TIME, rotate_cb, self); self->time_since_manual_rotate = g_timer_new (); g_signal_connect (adw_style_manager_get_default (), "notify::dark", G_CALLBACK (on_style_changed), self); } BzFeaturedCarousel * bz_featured_carousel_new (void) { return g_object_new (BZ_TYPE_FEATURED_CAROUSEL, NULL); } GListModel * bz_featured_carousel_get_model (BzFeaturedCarousel *self) { g_return_val_if_fail (BZ_IS_FEATURED_CAROUSEL (self), NULL); return self->model; } void bz_featured_carousel_set_model (BzFeaturedCarousel *self, GListModel *model) { g_return_if_fail (BZ_IS_FEATURED_CAROUSEL (self)); g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model)); if (model != NULL && model == self->model) return; g_clear_object (&self->model); if (model != NULL) self->model = g_object_ref (model); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); } bazaar-org-bazaar-b6e9a65/src/bz-featured-carousel.h000066400000000000000000000023431522167256300224160ustar00rootroot00000000000000/* bz-featured-carousel.c * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_FEATURED_CAROUSEL (bz_featured_carousel_get_type ()) G_DECLARE_FINAL_TYPE (BzFeaturedCarousel, bz_featured_carousel, BZ, FEATURED_CAROUSEL, GtkBox) BzFeaturedCarousel *bz_featured_carousel_new (void); GListModel *bz_featured_carousel_get_model (BzFeaturedCarousel *self); void bz_featured_carousel_set_model (BzFeaturedCarousel *self, GListModel *model); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-featured-tile.blp000066400000000000000000000035541522167256300220710ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzFeaturedTile: Button { styles [ "featured-tile", ] Overlay { [overlay] Image { halign: end; valign: start; icon-name: "app-installed-symbolic"; icon-size: normal; visible: bind template.group as <$BzEntryGroup>.removable; margin-top: 12; margin-end: 12; } Box content_box { halign: center; orientation: horizontal; margin-start: 10; margin-end: 10; Box { orientation: vertical; valign: center; margin-top: 50; margin-bottom: 50; Image image { paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; margin-bottom: 12; pixel-size: 128; styles [ "icon-dropshadow", ] } Label title { xalign: 0.5; halign: center; ellipsize: end; label: bind template.group as <$BzEntryGroup>.title; styles [ "title-1", ] } Adw.Clamp { maximum-size: 350; tightening-threshold: 350; Box { orientation: vertical; Label description { ellipsize: end; xalign: 0.5; lines: 1; justify: center; label: bind template.group as <$BzEntryGroup>.description; wrap: true; wrap-mode: word_char; styles [ "caption", ] } } } } $BzScreenshot screenshot { visible: bind $invert_boolean(template.narrow) as ; paintable: bind template.first-screenshot; rounded-corners: true; top-half: true; valign: end; margin-top: 20; } } } } bazaar-org-bazaar-b6e9a65/src/bz-featured-tile.c000066400000000000000000000352171522167256300215370ustar00rootroot00000000000000/* bz-featured-tile.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "bz-featured-tile.h" #include "bz-entry.h" #include "bz-group-tile-css-watcher.h" #include "bz-screenshot.h" #include "bz-util.h" #define BZ_TYPE_FEATURED_TILE_LAYOUT (bz_featured_tile_layout_get_type ()) G_DECLARE_FINAL_TYPE (BzFeaturedTileLayout, bz_featured_tile_layout, BZ, FEATURED_TILE_LAYOUT, GtkLayoutManager) struct _BzFeaturedTileLayout { GtkLayoutManager parent_instance; gboolean narrow_mode; GtkWidget *content_box; int last_width; }; G_DEFINE_FINAL_TYPE (BzFeaturedTileLayout, bz_featured_tile_layout, GTK_TYPE_LAYOUT_MANAGER) enum { LAYOUT_SIGNAL_NARROW_MODE_CHANGED, LAYOUT_SIGNAL_LAST }; static guint layout_signals[LAYOUT_SIGNAL_LAST] = { 0 }; static void bz_featured_tile_layout_measure (GtkLayoutManager *layout_manager, GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { GtkWidget *child; *minimum = 0; *natural = 0; *minimum_baseline = -1; *natural_baseline = -1; for (child = gtk_widget_get_first_child (widget); child != NULL; child = gtk_widget_get_next_sibling (child)) { int child_min; int child_nat; if (!gtk_widget_should_layout (child)) continue; gtk_widget_measure (child, orientation, for_size, &child_min, &child_nat, NULL, NULL); *minimum = MAX (*minimum, child_min); *natural = MAX (*natural, child_nat); } } static void bz_featured_tile_layout_allocate (GtkLayoutManager *layout_manager, GtkWidget *widget, gint width, gint height, gint baseline) { BzFeaturedTileLayout *self; GtkWidget *child; gboolean narrow_mode; int spacing; const int NARROW_THRESHOLD = 950; const int MIN_SPACING = 15; const int MAX_SPACING = 128; const int MAX_WIDTH = 1300; self = BZ_FEATURED_TILE_LAYOUT (layout_manager); narrow_mode = (width < NARROW_THRESHOLD); if (self->content_box != NULL && self->last_width != width) { self->last_width = width; if (narrow_mode) { spacing = 100; } else { if (width < NARROW_THRESHOLD) spacing = MIN_SPACING; else if (width >= MAX_WIDTH) spacing = MAX_SPACING; else spacing = MIN_SPACING + ((width - NARROW_THRESHOLD) * (MAX_SPACING - MIN_SPACING)) / (MAX_WIDTH - NARROW_THRESHOLD); } gtk_box_set_spacing (GTK_BOX (self->content_box), spacing); } for (child = gtk_widget_get_first_child (widget); child != NULL; child = gtk_widget_get_next_sibling (child)) { if (gtk_widget_should_layout (child)) gtk_widget_allocate (child, width, height, -1, NULL); } if (self->narrow_mode != narrow_mode) { self->narrow_mode = narrow_mode; g_signal_emit (self, layout_signals[LAYOUT_SIGNAL_NARROW_MODE_CHANGED], 0, self->narrow_mode); } } static void bz_featured_tile_layout_class_init (BzFeaturedTileLayoutClass *klass) { GtkLayoutManagerClass *layout_manager_class; layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass); layout_manager_class->measure = bz_featured_tile_layout_measure; layout_manager_class->allocate = bz_featured_tile_layout_allocate; layout_signals[LAYOUT_SIGNAL_NARROW_MODE_CHANGED] = g_signal_new ("narrow-mode-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); } static void bz_featured_tile_layout_init (BzFeaturedTileLayout *self) { self->last_width = -1; } struct _BzFeaturedTile { GtkButton parent_instance; BzEntryGroup *group; gboolean narrow_mode; guint refresh_id; BzGroupTileCssWatcher *css; GtkWidget *stack; GtkWidget *image; GtkWidget *title; GtkWidget *description; GtkWidget *screenshot; GtkWidget *content_box; GdkPaintable *first_screenshot; gboolean has_screenshot; DexFuture *ui_entry_resolve; }; G_DEFINE_FINAL_TYPE (BzFeaturedTile, bz_featured_tile, GTK_TYPE_BUTTON) enum { PROP_0, PROP_GROUP, PROP_FIRST_SCREENSHOT, PROP_HAS_SCREENSHOT, PROP_NARROW, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL, }; static void bz_featured_tile_refresh (BzFeaturedTile *self); static void update_screenshot (BzFeaturedTile *self); static gboolean bz_featured_tile_refresh_idle_cb (GWeakRef *wr) { g_autoptr (BzFeaturedTile) self = NULL; self = g_weak_ref_get (wr); if (self == NULL) goto done; self->refresh_id = 0; bz_featured_tile_refresh (self); done: return G_SOURCE_REMOVE; } static void schedule_refresh (BzFeaturedTile *self) { if (self->refresh_id != 0) return; self->refresh_id = g_idle_add_full ( G_PRIORITY_DEFAULT, (GSourceFunc) bz_featured_tile_refresh_idle_cb, bz_track_weak (self), bz_weak_release); } static void bz_featured_tile_layout_narrow_mode_changed_cb (GtkLayoutManager *layout_manager, gboolean narrow_mode, gpointer user_data) { BzFeaturedTile *self; self = BZ_FEATURED_TILE (user_data); if (self->narrow_mode != narrow_mode) { self->narrow_mode = narrow_mode; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NARROW]); schedule_refresh (self); } } static inline void notify_properties (BzFeaturedTile *self, gboolean has_screenshot) { if (self->has_screenshot != has_screenshot) { self->has_screenshot = has_screenshot; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_SCREENSHOT]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FIRST_SCREENSHOT]); } static DexFuture * ui_entry_resolved_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzFeaturedTile) self = NULL; const GValue *value = NULL; gboolean has_screenshot = FALSE; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); if (value != NULL) { BzEntry *ui_entry = NULL; g_autoptr (GListModel) screenshots = NULL; ui_entry = g_value_get_object (value); g_object_get (ui_entry, "screenshot-paintables", &screenshots, NULL); if (screenshots != NULL && g_list_model_get_n_items (screenshots) > 0) { self->first_screenshot = g_list_model_get_item (screenshots, 0); has_screenshot = TRUE; } } dex_clear (&self->ui_entry_resolve); notify_properties (self, has_screenshot); return NULL; } /* FIXME: duplicate code from rich-app-tile */ static void update_screenshot (BzFeaturedTile *self) { g_autoptr (BzResult) ui_entry_result = NULL; g_autoptr (GListModel) screenshots = NULL; dex_clear (&self->ui_entry_resolve); g_clear_object (&self->first_screenshot); if (self->group == NULL) { notify_properties (self, FALSE); return; } ui_entry_result = bz_entry_group_dup_ui_entry (self->group); self->ui_entry_resolve = dex_future_finally ( bz_result_dup_future (ui_entry_result), (DexFutureCallback) ui_entry_resolved_finally, bz_track_weak (self), bz_weak_release); } static void bz_featured_tile_refresh (BzFeaturedTile *self) { gtk_label_set_wrap (GTK_LABEL (self->description), self->narrow_mode); gtk_label_set_lines (GTK_LABEL (self->description), self->narrow_mode ? 2 : 1); update_screenshot (self); } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static int get_start_margin (gpointer object, gboolean narrow) { return narrow ? 20 : 50; } static void bz_featured_tile_dispose (GObject *object) { BzFeaturedTile *self; self = BZ_FEATURED_TILE (object); g_clear_handle_id (&self->refresh_id, g_source_remove); if (self->group != NULL) g_signal_handlers_disconnect_by_func (self->group, schedule_refresh, self); g_clear_object (&self->group); g_clear_object (&self->css); g_clear_object (&self->first_screenshot); G_OBJECT_CLASS (bz_featured_tile_parent_class)->dispose (object); } static void bz_featured_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFeaturedTile *self; self = BZ_FEATURED_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_featured_tile_get_group (self)); break; case PROP_FIRST_SCREENSHOT: g_value_set_object (value, self->first_screenshot); break; case PROP_HAS_SCREENSHOT: g_value_set_boolean (value, self->has_screenshot); break; case PROP_NARROW: g_value_set_boolean (value, self->narrow_mode); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void bz_featured_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFeaturedTile *self; self = BZ_FEATURED_TILE (object); switch (prop_id) { case PROP_GROUP: bz_featured_tile_set_group (self, g_value_get_object (value)); break; case PROP_FIRST_SCREENSHOT: case PROP_HAS_SCREENSHOT: case PROP_NARROW: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void bz_featured_tile_class_init (BzFeaturedTileClass *klass) { GObjectClass *object_class; GtkWidgetClass *widget_class; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_featured_tile_dispose; object_class->get_property = bz_featured_tile_get_property; object_class->set_property = bz_featured_tile_set_property; props[PROP_GROUP] = g_param_spec_object ("group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); props[PROP_FIRST_SCREENSHOT] = g_param_spec_object ("first-screenshot", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_HAS_SCREENSHOT] = g_param_spec_boolean ("has-screenshot", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_NARROW] = g_param_spec_boolean ("narrow", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_SCREENSHOT); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-featured-tile.ui"); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, get_start_margin); gtk_widget_class_bind_template_child (widget_class, BzFeaturedTile, image); gtk_widget_class_bind_template_child (widget_class, BzFeaturedTile, title); gtk_widget_class_bind_template_child (widget_class, BzFeaturedTile, description); gtk_widget_class_bind_template_child (widget_class, BzFeaturedTile, screenshot); gtk_widget_class_bind_template_child (widget_class, BzFeaturedTile, content_box); gtk_widget_class_set_css_name (widget_class, "featured-tile"); gtk_widget_class_set_layout_manager_type (widget_class, BZ_TYPE_FEATURED_TILE_LAYOUT); } static void bz_featured_tile_init (BzFeaturedTile *self) { GtkLayoutManager *layout_manager; BzFeaturedTileLayout *tile_layout; gtk_widget_init_template (GTK_WIDGET (self)); self->css = bz_group_tile_css_watcher_new (); bz_group_tile_css_watcher_set_widget (self->css, GTK_WIDGET (self)); layout_manager = gtk_widget_get_layout_manager (GTK_WIDGET (self)); g_warn_if_fail (layout_manager != NULL); tile_layout = BZ_FEATURED_TILE_LAYOUT (layout_manager); tile_layout->content_box = self->content_box; g_signal_connect_object (layout_manager, "narrow-mode-changed", G_CALLBACK (bz_featured_tile_layout_narrow_mode_changed_cb), self, 0); } BzFeaturedTile * bz_featured_tile_new (BzEntryGroup *group) { return g_object_new (BZ_TYPE_FEATURED_TILE, "group", group, NULL); } BzEntryGroup * bz_featured_tile_get_group (BzFeaturedTile *self) { g_return_val_if_fail (BZ_IS_FEATURED_TILE (self), NULL); return self->group; } void bz_featured_tile_set_group (BzFeaturedTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_FEATURED_TILE (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); g_clear_handle_id (&self->refresh_id, g_source_remove); if (self->group != NULL) g_signal_handlers_disconnect_by_func (self->group, schedule_refresh, self); g_clear_object (&self->group); if (group != NULL) { self->group = g_object_ref (group); g_signal_connect_swapped (group, "notify", G_CALLBACK (schedule_refresh), self); schedule_refresh (self); } bz_group_tile_css_watcher_set_group (self->css, group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } bazaar-org-bazaar-b6e9a65/src/bz-featured-tile.h000066400000000000000000000023331522167256300215350ustar00rootroot00000000000000/* bz-featured-tile.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include G_BEGIN_DECLS #define BZ_TYPE_FEATURED_TILE (bz_featured_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzFeaturedTile, bz_featured_tile, BZ, FEATURED_TILE, GtkButton) BzFeaturedTile *bz_featured_tile_new (BzEntryGroup *group); BzEntryGroup *bz_featured_tile_get_group (BzFeaturedTile *self); void bz_featured_tile_set_group (BzFeaturedTile *self, BzEntryGroup *group); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-finished-search-query.txt000066400000000000000000000004701522167256300235720ustar00rootroot00000000000000prefix=bz name=finished_search_query parent-prefix=g parent-name=object author=AUTOGEN property=interpreted_query char G_TYPE_STRING string property=results GPtrArray G_TYPE_PTR_ARRAY boxed g_ptr_array_unref g_ptr_array_ref property=n_results guint G_TYPE_UINT uint property=elapsed double G_TYPE_DOUBLE double bazaar-org-bazaar-b6e9a65/src/bz-flathub-auth-provider.txt000066400000000000000000000002511522167256300236040ustar00rootroot00000000000000prefix=bz name=flathub_auth_provider parent-prefix=g parent-name=object author=AUTOGEN property=method char G_TYPE_STRING string property=name char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-flathub-category-section.blp000066400000000000000000000020471522167256300242350ustar00rootroot00000000000000using Gtk 4.0; template $BzFlathubCategorySection : Box { orientation: vertical; spacing: 10; visible: bind $invert_boolean($is_null(template.category as <$BzFlathubCategory>) as ) as ; margin-bottom: 12; Label section_title { styles [ "title-1", ] visible: bind template.has-title as ; xalign: 0.0; hexpand: true; margin-start: 3; margin-end: 3; margin-bottom: 5; ellipsize: end; } $BzDynamicListView section_list { styles [ "flathub-page-section", ] hexpand: true; scroll: false; noscroll-kind: flow-box; child-type: "BzAppTile"; child-prop: "group"; row-spacing: bind $get_spacing(template.compact) as ; column-spacing: bind $get_spacing(template.compact) as ; bind-widget => $bind_widget_cb(); unbind-widget => $unbind_widget_cb(); } Button more_button { styles [ "pill", ] can-shrink: true; halign: center; valign: center; margin-top: 5; clicked => $on_more_button_clicked(); } }bazaar-org-bazaar-b6e9a65/src/bz-flathub-category-section.c000066400000000000000000000253431522167256300237060ustar00rootroot00000000000000/* bz-flathub-category-section.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-apps-page.h" #include "bz-entry-group.h" #include "bz-flathub-category-section.h" #include "bz-flathub-category.h" #include "bz-flathub-page.h" struct _BzFlathubCategorySection { GtkBox parent_instance; GtkLabel *section_title; GtkWidget *section_list; GtkButton *more_button; BzFlathubCategory *category; gboolean compact; gboolean has_title; guint min_items; GtkSliceListModel *slice_model; }; G_DEFINE_FINAL_TYPE (BzFlathubCategorySection, bz_flathub_category_section, GTK_TYPE_BOX) enum { PROP_0, PROP_CATEGORY, PROP_COMPACT, PROP_HAS_TITLE, PROP_MIN_ITEMS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void tile_clicked (BzEntryGroup *group, GtkButton *button) { gtk_widget_activate_action (GTK_WIDGET (button), "window.show-group", "s", bz_entry_group_get_id (group)); } static void on_more_button_clicked (GtkButton *button, BzFlathubCategorySection *self) { GtkWidget *flathub_page = NULL; GtkWidget *nav_view = NULL; AdwNavigationPage *apps_page = NULL; if (self->category == NULL) return; flathub_page = gtk_widget_get_ancestor (GTK_WIDGET (self), BZ_TYPE_FLATHUB_PAGE); if (flathub_page == NULL) return; nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (nav_view == NULL) return; apps_page = bz_apps_page_new_from_category (self->category); if (apps_page == NULL) return; adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } static void bind_widget_cb (BzFlathubCategorySection *self, GtkWidget *tile, BzEntryGroup *group, GtkWidget *view) { g_signal_connect_swapped (tile, "clicked", G_CALLBACK (tile_clicked), group); } static void unbind_widget_cb (BzFlathubCategorySection *self, GtkWidget *tile, BzEntryGroup *group, GtkWidget *view) { g_signal_handlers_disconnect_by_func (tile, G_CALLBACK (tile_clicked), group); } static int get_spacing (gpointer object, gboolean compact) { return compact ? 9 : 11; } static void update_model (BzFlathubCategorySection *self) { GtkExpression *expression; guint max_items; if (self->category == NULL) return; max_items = self->compact ? 6 : 12; max_items = MAX (max_items, self->min_items); if (self->slice_model != NULL) { gtk_slice_list_model_set_size (self->slice_model, max_items); return; } expression = gtk_property_expression_new (BZ_TYPE_FLATHUB_CATEGORY, NULL, "applications"); self->slice_model = gtk_slice_list_model_new (NULL, 0, max_items); gtk_expression_bind (expression, self->slice_model, "model", self->category); g_object_set (self->section_list, "model", self->slice_model, NULL); } static void bz_flathub_category_section_dispose (GObject *object) { BzFlathubCategorySection *self = BZ_FLATHUB_CATEGORY_SECTION (object); g_clear_object (&self->category); g_clear_object (&self->slice_model); G_OBJECT_CLASS (bz_flathub_category_section_parent_class)->dispose (object); } static void bz_flathub_category_section_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFlathubCategorySection *self = BZ_FLATHUB_CATEGORY_SECTION (object); switch (prop_id) { case PROP_CATEGORY: g_value_set_object (value, bz_flathub_category_section_get_category (self)); break; case PROP_COMPACT: g_value_set_boolean (value, bz_flathub_category_section_get_compact (self)); break; case PROP_HAS_TITLE: g_value_set_boolean (value, self->has_title); break; case PROP_MIN_ITEMS: g_value_set_uint (value, bz_flathub_category_section_get_min_items (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_category_section_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFlathubCategorySection *self = BZ_FLATHUB_CATEGORY_SECTION (object); switch (prop_id) { case PROP_CATEGORY: bz_flathub_category_section_set_category (self, g_value_get_object (value)); break; case PROP_COMPACT: bz_flathub_category_section_set_compact (self, g_value_get_boolean (value)); break; case PROP_HAS_TITLE: self->has_title = g_value_get_boolean (value); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_TITLE]); break; case PROP_MIN_ITEMS: bz_flathub_category_section_set_min_items (self, g_value_get_uint (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static void bz_flathub_category_section_class_init (BzFlathubCategorySectionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_flathub_category_section_dispose; object_class->get_property = bz_flathub_category_section_get_property; object_class->set_property = bz_flathub_category_section_set_property; props[PROP_CATEGORY] = g_param_spec_object ( "category", NULL, NULL, BZ_TYPE_FLATHUB_CATEGORY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_COMPACT] = g_param_spec_boolean ( "compact", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_HAS_TITLE] = g_param_spec_boolean ( "has-title", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MIN_ITEMS] = g_param_spec_uint ( "min-items", NULL, NULL, 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-flathub-category-section.ui"); gtk_widget_class_bind_template_child (widget_class, BzFlathubCategorySection, section_title); gtk_widget_class_bind_template_child (widget_class, BzFlathubCategorySection, section_list); gtk_widget_class_bind_template_child (widget_class, BzFlathubCategorySection, more_button); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, on_more_button_clicked); gtk_widget_class_bind_template_callback (widget_class, bind_widget_cb); gtk_widget_class_bind_template_callback (widget_class, unbind_widget_cb); gtk_widget_class_bind_template_callback (widget_class, get_spacing); } static void bz_flathub_category_section_init (BzFlathubCategorySection *self) { self->compact = FALSE; self->has_title = TRUE; self->min_items = 0; gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_flathub_category_section_new (void) { return g_object_new (BZ_TYPE_FLATHUB_CATEGORY_SECTION, NULL); } void bz_flathub_category_section_set_category (BzFlathubCategorySection *self, BzFlathubCategory *category) { const char *display_name; g_autofree char *more_label = NULL; g_return_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self)); g_return_if_fail (category == NULL || BZ_IS_FLATHUB_CATEGORY (category)); if (self->category == category) return; g_clear_object (&self->category); g_clear_object (&self->slice_model); if (category != NULL) { self->category = g_object_ref (category); display_name = bz_flathub_category_get_display_name (category); gtk_label_set_text (self->section_title, display_name); more_label = g_strdup (bz_flathub_category_get_more_of_name (category)); gtk_button_set_label (self->more_button, more_label); update_model (self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CATEGORY]); } BzFlathubCategory * bz_flathub_category_section_get_category (BzFlathubCategorySection *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self), NULL); return self->category; } void bz_flathub_category_section_set_compact (BzFlathubCategorySection *self, gboolean compact) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self)); if (self->compact == compact) return; self->compact = compact; update_model (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COMPACT]); } gboolean bz_flathub_category_section_get_compact (BzFlathubCategorySection *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self), FALSE); return self->compact; } void bz_flathub_category_section_set_min_items (BzFlathubCategorySection *self, guint min_items) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self)); if (self->min_items == min_items) return; self->min_items = min_items; update_model (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MIN_ITEMS]); } guint bz_flathub_category_section_get_min_items (BzFlathubCategorySection *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY_SECTION (self), 0); return self->min_items; } bazaar-org-bazaar-b6e9a65/src/bz-flathub-category-section.h000066400000000000000000000035241522167256300237100ustar00rootroot00000000000000/* bz-flathub-category-section.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-flathub-category.h" #include G_BEGIN_DECLS #define BZ_TYPE_FLATHUB_CATEGORY_SECTION (bz_flathub_category_section_get_type ()) G_DECLARE_FINAL_TYPE (BzFlathubCategorySection, bz_flathub_category_section, BZ, FLATHUB_CATEGORY_SECTION, GtkBox) GtkWidget *bz_flathub_category_section_new (void); void bz_flathub_category_section_set_category (BzFlathubCategorySection *self, BzFlathubCategory *category); BzFlathubCategory *bz_flathub_category_section_get_category (BzFlathubCategorySection *self); void bz_flathub_category_section_set_compact (BzFlathubCategorySection *self, gboolean compact); gboolean bz_flathub_category_section_get_compact (BzFlathubCategorySection *self); void bz_flathub_category_section_set_min_items (BzFlathubCategorySection *self, guint min_items); guint bz_flathub_category_section_get_min_items (BzFlathubCategorySection *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-flathub-category.c000066400000000000000000000672311522167256300222460ustar00rootroot00000000000000/* bz-flathub-category.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "appstream.h" #include "bz-flathub-category.h" #include "bz-flathub-sub-category.h" #include "bz-serializable.h" struct _BzFlathubCategory { GObject parent_instance; BzApplicationMapFactory *map_factory; char *name; GListModel *applications; GListModel *quality_applications; int total_entries; gboolean is_spotlight; GListModel *subcategories; }; static void serializable_iface_init (BzSerializableInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzFlathubCategory, bz_flathub_category, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (BZ_TYPE_SERIALIZABLE, serializable_iface_init)); enum { PROP_0, PROP_MAP_FACTORY, PROP_NAME, PROP_DISPLAY_NAME, PROP_SHORT_NAME, PROP_IS_XDG, PROP_SHOW_IN_LIST, PROP_SYMBOLIC_ICON_NAME, PROP_ICON_NAME, PROP_APPLICATIONS, PROP_QUALITY_APPLICATIONS, PROP_TOTAL_ENTRIES, PROP_IS_SPOTLIGHT, PROP_SUBCATEGORIES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void clear (BzFlathubCategory *self); typedef struct { const char *id; const char *display_name; const char *short_name; const char *more_of_name; gboolean is_xdg; gboolean show_in_list; const char *icon_name; const char *symbolic_icon_name; const void *subcategories; } CategoryInfo; typedef struct { const char *display_name; const char *category_id; } Subcategory; static const Subcategory audiovideo_subcategories[] = { { N_ ("Editing"), "AudioVideoEditing" }, { N_ ("Midi"), "Midi" }, { N_ ("Mixer"), "Mixer" }, { N_ ("Music"), "Music" }, { N_ ("Player"), "Player" }, { N_ ("Recorder"), "Recorder" }, { N_ ("Sequencer"), "Sequencer" }, { N_ ("Tuner"), "Tuner" }, { N_ ("TV"), "TV" }, { NULL, NULL } }; static const Subcategory game_subcategories[] = { { N_ ("Emulation"), "Emulator" }, { N_ ("Action"), "ActionGame" }, { N_ ("Adventure"), "AdventureGame" }, { N_ ("Arcade"), "ArcadeGame" }, { N_ ("Blocks"), "BlocksGame" }, { N_ ("Board"), "BoardGame" }, { N_ ("Card"), "CardGame" }, { N_ ("Kids"), "KidsGame" }, { N_ ("Logic"), "LogicGame" }, { N_ ("Role Playing"), "RolePlaying" }, { N_ ("Shooter"), "Shooter" }, { N_ ("Simulation"), "Simulation" }, { N_ ("Sports"), "SportsGame" }, { N_ ("Strategy"), "StrategyGame" }, { NULL, NULL } }; static const Subcategory network_subcategories[] = { { N_ ("Browsers"), "WebBrowser" }, { N_ ("Chat"), "Chat" }, { N_ ("Mail"), "Email" }, { N_ ("File Sharing"), "FileTransfer"}, { NULL, NULL } }; static const CategoryInfo category_info[] = { { "audiovideo", N_ ("Audio & Video"), N_ ("Media"), N_ ("More Audio & Video"), TRUE, TRUE, "io.github.kolumni.Bazaar.Audiovideo", "video-reel2-symbolic", audiovideo_subcategories }, { "development", N_ ("Developer Tools"), N_ ("Develop"), N_ ("More Developer Tools"), TRUE, TRUE, "io.github.kolumni.Bazaar.Develop", "code-symbolic", NULL }, { "education", N_ ("Education"), N_ ("Learn"), N_ ("More Education"), TRUE, TRUE, "io.github.kolumni.Bazaar.Learn", "open-book-symbolic", NULL }, { "game", N_ ("Gaming"), N_ ("Play"), N_ ("More Gaming"), TRUE, TRUE, "io.github.kolumni.Bazaar.Play", "gamepad-symbolic", game_subcategories }, { "graphics", N_ ("Graphics & Photography"), N_ ("Create"), N_ ("More Graphics & Photography"), TRUE, TRUE, "io.github.kolumni.Bazaar.Create", "paintbrush-symbolic", NULL }, { "network", N_ ("Networking"), N_ ("Internet"), N_ ("More Networking"), TRUE, TRUE, "io.github.kolumni.Bazaar.Network", "globe-symbolic", network_subcategories }, { "office", N_ ("Productivity"), N_ ("Work"), N_ ("More Productivity"), TRUE, TRUE, "io.github.kolumni.Bazaar.Work", "meeting-symbolic", NULL }, { "science", N_ ("Science"), N_ ("Science"), N_ ("More Science"), TRUE, TRUE, "io.github.kolumni.Bazaar.Science", "applications-science-symbolic", NULL }, { "system", N_ ("System"), N_ ("System"), N_ ("More System"), TRUE, TRUE, "io.github.kolumni.Bazaar.System", "applications-system-symbolic", NULL }, { "utility", N_ ("Utilities"), N_ ("Tools"), N_ ("More Utilities"), TRUE, TRUE, "io.github.kolumni.Bazaar.Utilities", "applications-utilities-symbolic", NULL }, { "trending", N_ ("Trending"), N_ ("Trending"), N_ ("More Trending"), FALSE, TRUE, "io.github.kolumni.Bazaar.Trending", "", NULL }, { "popular", N_ ("Popular"), N_ ("Popular"), N_ ("More Popular"), FALSE, TRUE, "io.github.kolumni.Bazaar.Popular", "", NULL }, { "recently-added", N_ ("Recently Added"), N_ ("New"), N_ ("More New"), FALSE, TRUE, "io.github.kolumni.Bazaar.New", "", NULL }, { "recently-updated", N_ ("Recently Updated"), N_ ("Updated"), N_ ("More Updated"), FALSE, TRUE, "io.github.kolumni.Bazaar.Updated", "", NULL }, { "mobile", N_ ("Mobile"), N_ ("Mobile"), N_ ("More Mobile"), FALSE, TRUE, "io.github.kolumni.Bazaar.Mobile", "", NULL }, { "adwaita", N_ ("Adwaita"), N_ ("Adwaita"), N_ ("More Adwaita"), FALSE, TRUE, "io.github.kolumni.Bazaar.Adwaita", "", NULL }, { "kde", N_ ("KDE Apps"), N_ ("KDE Apps"), N_ ("More KDE Apps"), FALSE, TRUE, "io.github.kolumni.Bazaar.Kde", "", NULL }, { "game-only", N_ ("Games"), N_ ("Games"), N_ ("More Games"), FALSE, FALSE, "", "", NULL }, { "emulators", N_ ("Emulators"), N_ ("Emulators"), N_ ("More Emulators"), FALSE, FALSE, "", "", NULL }, { "launchers", N_ ("Launchers"), N_ ("Launchers"), N_ ("More Game Launchers"), FALSE, FALSE, "", "", NULL }, { "game-tools", N_ ("Game Tools"), N_ ("Game Tools"), N_ ("More Game Tools"), FALSE, FALSE, "", "", NULL }, { NULL, NULL, NULL, NULL, FALSE, FALSE, NULL, NULL, NULL } }; static const CategoryInfo * get_category_info (const char *category_id) { for (int i = 0; category_info[i].id != NULL; i++) { if (g_strcmp0 (category_info[i].id, category_id) == 0) return &category_info[i]; } return NULL; } static GListModel * create_subcategories (const Subcategory *subcategories) { GListStore *store; store = g_list_store_new (BZ_TYPE_FLATHUB_SUB_CATEGORY); for (gsize i = 0; subcategories[i].display_name != NULL; i++) g_list_store_append (store, g_object_new (BZ_TYPE_FLATHUB_SUB_CATEGORY, "name", _ (subcategories[i].display_name), "id", subcategories[i].category_id, NULL)); return G_LIST_MODEL (store); } static void bz_flathub_category_dispose (GObject *object) { BzFlathubCategory *self = BZ_FLATHUB_CATEGORY (object); clear (self); G_OBJECT_CLASS (bz_flathub_category_parent_class)->dispose (object); } static void bz_flathub_category_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFlathubCategory *self = BZ_FLATHUB_CATEGORY (object); switch (prop_id) { case PROP_MAP_FACTORY: g_value_set_object (value, bz_flathub_category_get_map_factory (self)); break; case PROP_NAME: g_value_set_string (value, bz_flathub_category_get_name (self)); break; case PROP_APPLICATIONS: g_value_take_object (value, bz_flathub_category_dup_applications (self)); break; case PROP_QUALITY_APPLICATIONS: g_value_take_object (value, bz_flathub_category_dup_quality_applications (self)); break; case PROP_DISPLAY_NAME: g_value_set_string (value, bz_flathub_category_get_display_name (self)); break; case PROP_SHORT_NAME: g_value_set_string (value, bz_flathub_category_get_short_name (self)); break; case PROP_IS_XDG: g_value_set_boolean (value, bz_flathub_category_get_is_xdg (self)); break; case PROP_SHOW_IN_LIST: g_value_set_boolean (value, bz_flathub_category_get_show_in_list (self)); break; case PROP_SYMBOLIC_ICON_NAME: g_value_set_string (value, bz_flathub_category_get_symbolic_icon_name (self)); break; case PROP_ICON_NAME: g_value_set_string (value, bz_flathub_category_get_icon_name (self)); break; case PROP_TOTAL_ENTRIES: g_value_set_int (value, bz_flathub_category_get_total_entries (self)); break; case PROP_IS_SPOTLIGHT: g_value_set_boolean (value, bz_flathub_category_get_is_spotlight (self)); break; case PROP_SUBCATEGORIES: g_value_set_object (value, bz_flathub_category_get_subcategories (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_category_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFlathubCategory *self = BZ_FLATHUB_CATEGORY (object); switch (prop_id) { case PROP_MAP_FACTORY: bz_flathub_category_set_map_factory (self, g_value_get_object (value)); break; case PROP_NAME: bz_flathub_category_set_name (self, g_value_get_string (value)); break; case PROP_APPLICATIONS: bz_flathub_category_set_applications (self, g_value_get_object (value)); break; case PROP_QUALITY_APPLICATIONS: bz_flathub_category_set_quality_applications (self, g_value_get_object (value)); break; case PROP_TOTAL_ENTRIES: bz_flathub_category_set_total_entries (self, g_value_get_int (value)); break; case PROP_IS_SPOTLIGHT: bz_flathub_category_set_is_spotlight (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_category_class_init (BzFlathubCategoryClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_flathub_category_set_property; object_class->get_property = bz_flathub_category_get_property; object_class->dispose = bz_flathub_category_dispose; props[PROP_MAP_FACTORY] = g_param_spec_object ( "map-factory", NULL, NULL, BZ_TYPE_APPLICATION_MAP_FACTORY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_NAME] = g_param_spec_string ( "name", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_DISPLAY_NAME] = g_param_spec_string ( "display-name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_SHORT_NAME] = g_param_spec_string ( "short-name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_IS_XDG] = g_param_spec_boolean ( "is-xdg", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_SHOW_IN_LIST] = g_param_spec_boolean ( "show-in-list", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_SYMBOLIC_ICON_NAME] = g_param_spec_string ( "symbolic-icon-name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_ICON_NAME] = g_param_spec_string ( "icon-name", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_APPLICATIONS] = g_param_spec_object ( "applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_QUALITY_APPLICATIONS] = g_param_spec_object ( "quality-applications", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TOTAL_ENTRIES] = g_param_spec_int ( "total-entries", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_IS_SPOTLIGHT] = g_param_spec_boolean ( "is-spotlight", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_SUBCATEGORIES] = g_param_spec_object ( "subcategories", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_flathub_category_init (BzFlathubCategory *self) { } static void bz_flathub_category_real_serialize (BzSerializable *serializable, GVariantBuilder *builder) { BzFlathubCategory *self = BZ_FLATHUB_CATEGORY (serializable); if (self->name != NULL) g_variant_builder_add (builder, "{sv}", "name", g_variant_new_string (self->name)); if (self->applications != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (self->applications); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (self->applications, i); g_variant_builder_add (sub_builder, "s", gtk_string_object_get_string (string)); } g_variant_builder_add (builder, "{sv}", "applications", g_variant_builder_end (sub_builder)); } } if (self->quality_applications != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (self->quality_applications); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { g_autoptr (GtkStringObject) string = NULL; string = g_list_model_get_item (self->quality_applications, i); g_variant_builder_add (sub_builder, "s", gtk_string_object_get_string (string)); } g_variant_builder_add (builder, "{sv}", "quality-applications", g_variant_builder_end (sub_builder)); } } g_variant_builder_add (builder, "{sv}", "total-entries", g_variant_new_int32 (self->total_entries)); g_variant_builder_add (builder, "{sv}", "is-spotlight", g_variant_new_boolean (self->is_spotlight)); } static gboolean bz_flathub_category_real_deserialize (BzSerializable *serializable, GVariant *import, GError **error) { BzFlathubCategory *self = BZ_FLATHUB_CATEGORY (serializable); g_autoptr (GVariantIter) iter = NULL; clear (self); iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; /* TODO automate this, this is awful */ if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "name") == 0) bz_flathub_category_set_name (self, g_variant_get_string (value, NULL)); else if (g_strcmp0 (key, "applications") == 0) { g_autoptr (GtkStringList) list = NULL; g_autoptr (GVariantIter) list_iter = NULL; list = gtk_string_list_new (NULL); list_iter = g_variant_iter_new (value); for (;;) { g_autofree char *id = NULL; if (!g_variant_iter_next (list_iter, "s", &id)) break; gtk_string_list_append (list, id); } self->applications = (GListModel *) g_steal_pointer (&list); } else if (g_strcmp0 (key, "quality-applications") == 0) { g_autoptr (GtkStringList) list = NULL; g_autoptr (GVariantIter) list_iter = NULL; list = gtk_string_list_new (NULL); list_iter = g_variant_iter_new (value); for (;;) { g_autofree char *id = NULL; if (!g_variant_iter_next (list_iter, "s", &id)) break; gtk_string_list_append (list, id); } self->quality_applications = (GListModel *) g_steal_pointer (&list); } else if (g_strcmp0 (key, "total-entries") == 0) self->total_entries = g_variant_get_int32 (value); else if (g_strcmp0 (key, "is-spotlight") == 0) self->is_spotlight = g_variant_get_boolean (value); } return TRUE; } static void serializable_iface_init (BzSerializableInterface *iface) { iface->serialize = bz_flathub_category_real_serialize; iface->deserialize = bz_flathub_category_real_deserialize; } BzFlathubCategory * bz_flathub_category_new (void) { return g_object_new (BZ_TYPE_FLATHUB_CATEGORY, NULL); } BzApplicationMapFactory * bz_flathub_category_get_map_factory (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); return self->map_factory; } const char * bz_flathub_category_get_name (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); return self->name; } GListModel * bz_flathub_category_dup_applications (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); if (self->applications != NULL) { if (self->map_factory != NULL) return bz_application_map_factory_generate ( self->map_factory, G_LIST_MODEL (self->applications)); else return G_LIST_MODEL (g_object_ref (self->applications)); } else return NULL; } GListModel * bz_flathub_category_dup_quality_applications (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); if (self->quality_applications != NULL) { if (self->map_factory != NULL) return bz_application_map_factory_generate ( self->map_factory, G_LIST_MODEL (self->quality_applications)); else return G_LIST_MODEL (g_object_ref (self->quality_applications)); } else return NULL; } int bz_flathub_category_get_total_entries (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), 0); return self->total_entries; } gboolean bz_flathub_category_get_is_spotlight (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), FALSE); return self->is_spotlight; } void bz_flathub_category_set_map_factory (BzFlathubCategory *self, BzApplicationMapFactory *map_factory) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); g_return_if_fail (map_factory == NULL || BZ_IS_APPLICATION_MAP_FACTORY (map_factory)); g_clear_object (&self->map_factory); if (map_factory != NULL) self->map_factory = g_object_ref (map_factory); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MAP_FACTORY]); } void bz_flathub_category_set_name (BzFlathubCategory *self, const char *name) { const CategoryInfo *info; g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); g_clear_pointer (&self->name, g_free); self->name = g_strdup (name); info = get_category_info (name); if (info != NULL && info->subcategories != NULL) { g_clear_object (&self->subcategories); self->subcategories = create_subcategories ((const Subcategory *) info->subcategories); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUBCATEGORIES]); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]); } void bz_flathub_category_set_applications (BzFlathubCategory *self, GListModel *applications) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); g_clear_pointer (&self->applications, g_object_unref); if (applications != NULL) self->applications = g_object_ref (applications); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPLICATIONS]); } void bz_flathub_category_set_quality_applications (BzFlathubCategory *self, GListModel *applications) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); g_clear_pointer (&self->quality_applications, g_object_unref); if (applications != NULL) self->quality_applications = g_object_ref (applications); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_QUALITY_APPLICATIONS]); } void bz_flathub_category_set_total_entries (BzFlathubCategory *self, int total_entries) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); if (self->total_entries == total_entries) return; self->total_entries = total_entries; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TOTAL_ENTRIES]); } void bz_flathub_category_set_is_spotlight (BzFlathubCategory *self, gboolean is_spotlight) { g_return_if_fail (BZ_IS_FLATHUB_CATEGORY (self)); if (self->is_spotlight == is_spotlight) return; self->is_spotlight = is_spotlight; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IS_SPOTLIGHT]); } const char * bz_flathub_category_get_display_name (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); info = get_category_info (self->name); return info ? _ (info->display_name) : self->name; } const char * bz_flathub_category_get_short_name (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); info = get_category_info (self->name); return info ? _ (info->short_name) : self->name; } const char * bz_flathub_category_get_more_of_name (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); info = get_category_info (self->name); return info ? _ (info->more_of_name) : self->name; } gboolean bz_flathub_category_get_is_xdg (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), FALSE); info = get_category_info (self->name); return info ? info->is_xdg : FALSE; } gboolean bz_flathub_category_get_show_in_list (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), FALSE); info = get_category_info (self->name); return info ? info->show_in_list : FALSE; } const char * bz_flathub_category_get_symbolic_icon_name (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); info = get_category_info (self->name); return info ? info->symbolic_icon_name : NULL; } const char * bz_flathub_category_get_icon_name (BzFlathubCategory *self) { const CategoryInfo *info; g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); info = get_category_info (self->name); return info ? info->icon_name : NULL; } GListModel * bz_flathub_category_get_subcategories (BzFlathubCategory *self) { g_return_val_if_fail (BZ_IS_FLATHUB_CATEGORY (self), NULL); return self->subcategories; } static void clear (BzFlathubCategory *self) { g_clear_pointer (&self->map_factory, g_object_unref); g_clear_pointer (&self->name, g_free); g_clear_pointer (&self->applications, g_object_unref); g_clear_pointer (&self->quality_applications, g_object_unref); g_clear_object (&self->subcategories); } static const char * bz_flathub_category_map_appstream_id (const char *as_category_id) { g_autofree char *lowercase = NULL; const CategoryInfo *info = NULL; g_return_val_if_fail (as_category_id != NULL, NULL); lowercase = g_ascii_strdown (as_category_id, -1); info = get_category_info (lowercase); return info ? info->id : NULL; } GListModel * bz_flathub_category_list_from_appstream (GPtrArray *as_categories) { g_autoptr (GListStore) categories = NULL; g_return_val_if_fail (as_categories != NULL, NULL); if (as_categories->len == 0) return NULL; categories = g_list_store_new (BZ_TYPE_FLATHUB_CATEGORY); for (guint i = 0; i < as_categories->len; i++) { const char *category_id = NULL; const char *mapped_id = NULL; category_id = (const char *) g_ptr_array_index (as_categories, i); if (category_id == NULL) continue; mapped_id = bz_flathub_category_map_appstream_id (category_id); if (mapped_id != NULL) { g_autoptr (BzFlathubCategory) category = NULL; category = bz_flathub_category_new (); bz_flathub_category_set_name (category, mapped_id); g_list_store_append (categories, category); } } if (g_list_model_get_n_items (G_LIST_MODEL (categories)) == 0) return NULL; return G_LIST_MODEL (g_steal_pointer (&categories)); } /* End of bz-flathub-category.c */ bazaar-org-bazaar-b6e9a65/src/bz-flathub-category.h000066400000000000000000000060711522167256300222460ustar00rootroot00000000000000/* bz-flathub-category.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-application-map-factory.h" G_BEGIN_DECLS #define BZ_TYPE_FLATHUB_CATEGORY (bz_flathub_category_get_type ()) G_DECLARE_FINAL_TYPE (BzFlathubCategory, bz_flathub_category, BZ, FLATHUB_CATEGORY, GObject) BzFlathubCategory * bz_flathub_category_new (void); BzApplicationMapFactory * bz_flathub_category_get_map_factory (BzFlathubCategory *self); const char * bz_flathub_category_get_name (BzFlathubCategory *self); GListModel * bz_flathub_category_dup_applications (BzFlathubCategory *self); GListModel * bz_flathub_category_dup_quality_applications (BzFlathubCategory *self); void bz_flathub_category_set_map_factory (BzFlathubCategory *self, BzApplicationMapFactory *map_factory); void bz_flathub_category_set_name (BzFlathubCategory *self, const char *name); void bz_flathub_category_set_applications (BzFlathubCategory *self, GListModel *applications); void bz_flathub_category_set_quality_applications (BzFlathubCategory *self, GListModel *applications); const char * bz_flathub_category_get_display_name (BzFlathubCategory *self); const char * bz_flathub_category_get_short_name (BzFlathubCategory *self); const char * bz_flathub_category_get_more_of_name (BzFlathubCategory *self); gboolean bz_flathub_category_get_is_xdg (BzFlathubCategory *self); gboolean bz_flathub_category_get_show_in_list (BzFlathubCategory *self); const char * bz_flathub_category_get_symbolic_icon_name (BzFlathubCategory *self); const char * bz_flathub_category_get_icon_name (BzFlathubCategory *self); int bz_flathub_category_get_total_entries (BzFlathubCategory *self); void bz_flathub_category_set_total_entries (BzFlathubCategory *self, int total_entries); gboolean bz_flathub_category_get_is_spotlight (BzFlathubCategory *self); void bz_flathub_category_set_is_spotlight (BzFlathubCategory *self, gboolean is_spotlight); GListModel * bz_flathub_category_get_subcategories (BzFlathubCategory *self); GListModel * bz_flathub_category_list_from_appstream (GPtrArray *as_categories); G_END_DECLS /* End of bz-flathub-category.h */ bazaar-org-bazaar-b6e9a65/src/bz-flathub-page.blp000066400000000000000000000573061522167256300217020ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzFlathubPage: Adw.Bin { child: Adw.BreakpointBin { width-request: 360; height-request: 100; child: Adw.BreakpointBin { width-request: 360; height-request: 100; child: Adw.ViewStack stack { enable-transitions: true; transition-duration: 400; Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "flathub-symbolic"; title: _("Flathub Not Added"); description: _("The Flathub remote was not found on any of your Flatpak installations"); }; } Adw.ViewStackPage { name: "offline"; title: _("Flathub Unavailable"); child: Adw.StatusPage { icon-name: "connected-squares-x"; title: _("Can't Reach Flathub"); description: _("You can still manage and search for apps."); child: Box offline_buttons { halign: center; spacing: 12; Button { label: _("Search Apps"); halign: center; clicked => $open_search_cb(template); styles ["pill"] } Button { styles ["pill"] halign: center; sensitive: bind $invert_boolean(template.state as <$BzStateInfo>.syncing as ) as ; label: _("Reconnect"); action-name: "app.sync-remotes"; } }; }; } Adw.ViewStackPage { name: "content"; title: _("Browser"); child: ScrolledWindow { styles [ "transparent", ] hscrollbar-policy: never; child: Adw.ClampScrollable { maximum-size: 1500; tightening-threshold: 1400; child: Viewport { child: Box content_box { margin-start: 30; margin-end: 30; margin-top: 5; margin-bottom: 50; orientation: vertical; spacing: 15; $BzFeaturedCarousel { styles [ "flathub-page-section", ] margin-top: 16; margin-bottom: 3; hexpand: true; model: bind template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.apps_of_the_week; } Box section_toggles_box { halign: center; width-request: 800; Adw.ToggleGroup section_toggles { hexpand: true; halign: fill; homogeneous: true; styles [ "round", "huge" ] Adw.Toggle { label: _("Trending"); name: "trending"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "trending") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("Popular"); name: "popular"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "popular") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("New"); name: "recently-added"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "recently-added") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("Updated"); name: "recently-updated"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "recently-updated") as <$BzFlathubCategory>) as ) as ; } } } Adw.ViewStack sections_stack { enable-transitions: true; transition-duration: 300; visible-child-name: bind section_toggles.active-name bidirectional; Adw.ViewStackPage { name: "trending"; title: _("Trending"); child: $BzFlathubCategorySection section_trending { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "trending") as <$BzFlathubCategory>; min-items: 12; has-title: false; }; } Adw.ViewStackPage { name: "recently-updated"; title: _("Recently Updated"); child: $BzFlathubCategorySection section_recently_updated { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "recently-updated") as <$BzFlathubCategory>; min-items: 12; has-title: false; }; } Adw.ViewStackPage { name: "recently-added"; title: _("Recently Added"); child: $BzFlathubCategorySection section_recently_added { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "recently-added") as <$BzFlathubCategory>; min-items: 12; has-title: false; }; } Adw.ViewStackPage { name: "popular"; title: _("Popular"); child: $BzFlathubCategorySection section_popular { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "popular") as <$BzFlathubCategory>; min-items: 12; has-title: false; }; } } $BzFlathubCategorySection section_productivity { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "office") as <$BzFlathubCategory>; } Box { orientation: vertical; spacing: 10; margin-top: 16; margin-bottom: 20; Label { styles [ "title-1", ] xalign: 0.0; hexpand: true; margin-start: 3; margin-end: 3; margin-bottom: 5; ellipsize: end; label: _("App of the Day"); } $BzFeaturedCarousel { styles [ "flathub-page-section", ] hexpand: true; model: SliceListModel { offset: 0; size: 1; model: bind template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.apps_of_the_day_week; }; } } $BzFlathubCategorySection section_graphics { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "graphics") as <$BzFlathubCategory>; } $BzFlathubCategorySection section_audiovideo { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "audiovideo") as <$BzFlathubCategory>; } Box otg_box { visible: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "mobile") as <$BzFlathubCategory>) as ) as ; margin-top: 8; margin-bottom: 20; styles [ "sp-section", "otg", "card", ] Box otg_padding_box { orientation: horizontal; margin-start: 24; margin-end: 24; margin-top: 24; margin-bottom: 24; Box otg_title_box { orientation: vertical; spacing: 12; width-request: 285; valign: center; Image otg_image { icon-name: "on-the-go-symbolic"; can-target: false; pixel-size: 256; margin-bottom: 10; halign: start; styles [ "sp-section-image", ] } Label otg_title { label: _("On the Go"); halign: start; wrap: true; wrap-mode: word_char; styles [ "sp-section-title", "title-1", ] } Label otg_subtitle { label: _("Apps for your Linux phones and tablets"); halign: start; wrap: true; wrap-mode: word_char; } Button otg_more_button_top { styles [ "pill", ] label: _("More Mobile Apps"); halign: start; valign: center; clicked => $show_more_mobile_cb(template); } } $BzDynamicListView otg_list { styles [ "flathub-page-section", ] hexpand: true; scroll: false; noscroll-kind: flow-box; child-type: "BzAppTile"; child-prop: "group"; max-children-per-line: 3; model: SliceListModel otg_slice { offset: 0; size: 9; model: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "mobile") as <$BzFlathubCategory>.applications; }; bind-widget => $bind_widget_cb(template); unbind-widget => $unbind_widget_cb(template); } Button otg_more_button_bottom { styles [ "pill", ] visible: false; label: _("More Mobile Apps"); halign: center; valign: center; margin-bottom: 12; clicked => $show_more_mobile_cb(template); } } } $BzFlathubCategorySection section_education { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "education") as <$BzFlathubCategory>; } $BzFlathubCategorySection section_network { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "network") as <$BzFlathubCategory>; } Box { visible: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "game") as <$BzFlathubCategory>) as ) as ; orientation: vertical; margin-top: 8; margin-bottom: 20; spacing: 10; styles [ "sp-section", "wlg", "card", ] Box gaming_padding_box { orientation: vertical; margin-start: 24; margin-end: 24; margin-top: 24; margin-bottom: 24; Box { orientation: vertical; spacing: 12; width-request: 285; margin-bottom: 12; valign: center; Image { icon-name: "we-love-games-symbolic"; can-target: false; pixel-size: 256; margin-bottom: 10; halign: center; styles [ "sp-section-image", ] } Label { label: _("We​ ♥​ Games"); halign: center; justify: center; wrap: true; wrap-mode: word_char; styles [ "sp-section-title", "title-1", ] } Label { label: _("Games and apps to run your favorite titles"); halign: center; justify: center; wrap: true; wrap-mode: word_char; } } Box game_section_toggles_box { halign: center; width-request: 800; margin-bottom: 20; margin-top: 8; Adw.ToggleGroup game_section_toggles { hexpand: true; halign: fill; homogeneous: true; styles [ "round", "huge" ] Adw.Toggle { label: _("Games"); name: "game"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "game") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("Emulators"); name: "emulators"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "emulators") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("Launchers"); name: "launchers"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "launchers") as <$BzFlathubCategory>) as ) as ; } Adw.Toggle { label: _("Tools"); name: "game-tools"; enabled: bind $invert_boolean($is_null($get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "game-tools") as <$BzFlathubCategory>) as ) as ; } } } Adw.ViewStack game_sections_stack { enable-transitions: true; transition-duration: 300; visible-child-name: bind game_section_toggles.active-name bidirectional; Adw.ViewStackPage { name: "game"; child: Box { orientation: vertical; $BzDynamicListView game_list { styles [ "flathub-page-section", ] hexpand: true; scroll: false; noscroll-kind: flow-box; child-type: "BzAppTile"; child-prop: "group"; max-children-per-line: 4; model: SliceListModel game_slice { offset: 0; size: 12; model: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "game-only") as <$BzFlathubCategory>.applications; }; bind-widget => $bind_widget_cb(template); unbind-widget => $unbind_widget_cb(template); } Button { styles [ "pill", ] label: _("More Games"); halign: center; valign: center; margin-top: 12; margin-bottom: 12; clicked => $show_more_gaming_cb(template); } }; } Adw.ViewStackPage { name: "emulators"; child: $BzFlathubCategorySection emulators_section { has-title: false; category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "emulators") as <$BzFlathubCategory>; }; } Adw.ViewStackPage { name: "launchers"; child: $BzFlathubCategorySection launchers_section { has-title: false; category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "launchers") as <$BzFlathubCategory>; }; } Adw.ViewStackPage { name: "game-tools"; child: $BzFlathubCategorySection game_tools_section { has-title: false; category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "game-tools") as <$BzFlathubCategory>; }; } } } } $BzFlathubCategorySection section_development { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "development") as <$BzFlathubCategory>; } $BzFlathubCategorySection section_science { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "science") as <$BzFlathubCategory>; } $BzFlathubCategorySection section_system { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "system") as <$BzFlathubCategory>; } $BzFlathubCategorySection section_utility { category: bind $get_category_by_name_cb(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories, "utility") as <$BzFlathubCategory>; } }; }; }; }; } }; Adw.Breakpoint { condition ("max-width: 1250sp") setters { otg_list.max-children-per-line: 2; otg_slice.size: 6; } } Adw.Breakpoint { condition ("max-width: 700px") setters { offline_buttons.orientation: vertical; content_box.margin-start: 10; content_box.margin-end: 10; otg_padding_box.margin-start: 6; otg_padding_box.margin-end: 6; otg_padding_box.margin-bottom: 6; gaming_padding_box.margin-start: 6; gaming_padding_box.margin-end: 6; gaming_padding_box.margin-bottom: 6; section_toggles.homogeneous: false; game_section_toggles.homogeneous: false; section_trending.compact: true; section_popular.compact: true; section_recently_added.compact: true; section_recently_updated.compact: true; section_productivity.compact: true; section_graphics.compact: true; section_audiovideo.compact: true; section_education.compact: true; section_network.compact: true; section_development.compact: true; section_science.compact: true; section_system.compact: true; section_utility.compact: true; emulators_section.compact: true; launchers_section.compact: true; game_tools_section.compact: true; game_list.max-children-per-line: 2; game_slice.size: 6; otg_slice.size: 6; } } }; Adw.Breakpoint { condition ("max-width: 970sp") setters { section_toggles_box.width-request: -1; game_section_toggles_box.width-request: -1; otg_padding_box.orientation: vertical; otg_padding_box.spacing: 6; otg_title_box.halign: center; otg_title_box.width-request: -1; otg_title.justify: center; otg_subtitle.justify: center; otg_image.halign: center; otg_image.margin-top: 15; otg_image.margin-bottom: 5; otg_title.halign: center; otg_subtitle.halign: center; otg_more_button_bottom.visible: true; otg_more_button_top.visible: false; } } }; }bazaar-org-bazaar-b6e9a65/src/bz-flathub-page.c000066400000000000000000000237771522167256300213540ustar00rootroot00000000000000/* bz-flathub-page.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-app-tile.h" #include "bz-apps-page.h" #include "bz-dynamic-list-view.h" #include "bz-entry-group.h" #include "bz-featured-carousel.h" #include "bz-flathub-category-section.h" #include "bz-flathub-category.h" #include "bz-flathub-page.h" #include "bz-section-view.h" struct _BzFlathubPage { AdwBin parent_instance; BzStateInfo *state; /* Template widgets */ AdwViewStack *stack; }; G_DEFINE_FINAL_TYPE (BzFlathubPage, bz_flathub_page, ADW_TYPE_BIN) enum { PROP_0, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_OPEN_SEARCH, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static BzFlathubCategory * get_category_by_name (GListModel *categories, const char *name); static void invalidating_state_changed (BzFlathubPage *self, GParamSpec *pspec, BzStateInfo *info); static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static void tile_clicked (BzEntryGroup *group, GtkButton *button); static void show_more_clicked (BzFlathubPage *self, GtkButton *button, const char *category_name); static void bz_flathub_page_dispose (GObject *object) { BzFlathubPage *self = BZ_FLATHUB_PAGE (object); if (self->state != NULL) g_signal_handlers_disconnect_by_func (self->state, invalidating_state_changed, self); g_clear_object (&self->state); G_OBJECT_CLASS (bz_flathub_page_parent_class)->dispose (object); } static void bz_flathub_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFlathubPage *self = BZ_FLATHUB_PAGE (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_flathub_page_get_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFlathubPage *self = BZ_FLATHUB_PAGE (object); switch (prop_id) { case PROP_STATE: bz_flathub_page_set_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bind_widget_cb (BzFlathubPage *self, BzAppTile *tile, BzEntryGroup *group, BzDynamicListView *view) { g_signal_connect_swapped (tile, "clicked", G_CALLBACK (tile_clicked), group); } static void unbind_widget_cb (BzFlathubPage *self, BzAppTile *tile, BzEntryGroup *group, BzDynamicListView *view) { g_signal_handlers_disconnect_by_func (tile, G_CALLBACK (tile_clicked), group); } static void show_more_mobile_cb (BzFlathubPage *self, GtkButton *button) { show_more_clicked (self, button, "mobile"); } static void show_more_gaming_cb (BzFlathubPage *self, GtkButton *button) { show_more_clicked (self, button, "game"); } static BzFlathubCategory * get_category_by_name (GListModel *categories, const char *name) { guint n_items; guint i; if (categories == NULL) return NULL; n_items = g_list_model_get_n_items (categories); for (i = 0; i < n_items; i++) { g_autoptr (BzFlathubCategory) category = g_list_model_get_item (categories, i); const char *category_name; category_name = bz_flathub_category_get_name (category); if (g_strcmp0 (category_name, name) == 0) return g_object_ref (category); } return NULL; } static gpointer get_category_by_name_cb (gpointer object, gpointer categories_obj, const char *name) { return get_category_by_name (G_LIST_MODEL (categories_obj), name); } static void open_search_cb (BzFlathubPage *self, GtkButton *button) { g_signal_emit (self, signals[SIGNAL_OPEN_SEARCH], 0); } static void show_group_action (GtkWidget *widget, BzEntryGroup *group) { gtk_widget_activate_action (widget, "window.show-group", "s", bz_entry_group_get_id (group)); } static void bz_flathub_page_class_init (BzFlathubPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_flathub_page_dispose; object_class->get_property = bz_flathub_page_get_property; object_class->set_property = bz_flathub_page_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_OPEN_SEARCH] = g_signal_new ( "open-search", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); g_type_ensure (BZ_TYPE_SECTION_VIEW); g_type_ensure (BZ_TYPE_FLATHUB_CATEGORY_SECTION); g_type_ensure (BZ_TYPE_FLATHUB_CATEGORY); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); g_type_ensure (BZ_TYPE_APP_TILE); g_type_ensure (BZ_TYPE_FEATURED_CAROUSEL); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-flathub-page.ui"); gtk_widget_class_bind_template_child (widget_class, BzFlathubPage, stack); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, bind_widget_cb); gtk_widget_class_bind_template_callback (widget_class, unbind_widget_cb); gtk_widget_class_bind_template_callback (widget_class, get_category_by_name_cb); gtk_widget_class_bind_template_callback (widget_class, show_more_mobile_cb); gtk_widget_class_bind_template_callback (widget_class, show_more_gaming_cb); gtk_widget_class_bind_template_callback (widget_class, open_search_cb); } static void bz_flathub_page_init (BzFlathubPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_flathub_page_new (void) { return g_object_new (BZ_TYPE_FLATHUB_PAGE, NULL); } void bz_flathub_page_set_state (BzFlathubPage *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_FLATHUB_PAGE (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); if (self->state != NULL) g_signal_handlers_disconnect_by_func (self->state, invalidating_state_changed, self); g_clear_object (&self->state); if (state != NULL) { self->state = g_object_ref (state); g_signal_connect_swapped ( state, "notify::flathub", G_CALLBACK (invalidating_state_changed), self); g_signal_connect_swapped ( state, "notify::has-flathub", G_CALLBACK (invalidating_state_changed), self); g_signal_connect_swapped ( state, "notify::online", G_CALLBACK (invalidating_state_changed), self); } invalidating_state_changed (self, NULL, state); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } BzStateInfo * bz_flathub_page_get_state (BzFlathubPage *self) { g_return_val_if_fail (BZ_IS_FLATHUB_PAGE (self), NULL); return self->state; } static void show_more_clicked (BzFlathubPage *self, GtkButton *button, const char *category_name) { g_autoptr (BzFlathubCategory) category = NULL; GtkWidget *nav_view = NULL; AdwNavigationPage *apps_page = NULL; category = get_category_by_name ( bz_flathub_state_get_categories ( bz_state_info_get_flathub (self->state)), category_name); if (category == NULL) return; apps_page = bz_apps_page_new_from_category (category); nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); g_assert (nav_view != NULL); adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } static void tile_clicked (BzEntryGroup *group, GtkButton *button) { show_group_action (GTK_WIDGET (button), group); } static void invalidating_state_changed (BzFlathubPage *self, GParamSpec *pspec, BzStateInfo *info) { BzFlathubState *flathub = NULL; gboolean has_repo = FALSE; const char *page = NULL; if (self->state != NULL) { flathub = bz_state_info_get_flathub (self->state); has_repo = bz_state_info_get_has_flathub (self->state); } if (flathub != NULL && has_repo) page = "content"; else if (!has_repo) page = "empty"; else page = "offline"; adw_view_stack_set_visible_child_name (self->stack, page); } bazaar-org-bazaar-b6e9a65/src/bz-flathub-page.h000066400000000000000000000022571522167256300213470ustar00rootroot00000000000000/* bz-flathub-page.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_FLATHUB_PAGE (bz_flathub_page_get_type ()) G_DECLARE_FINAL_TYPE (BzFlathubPage, bz_flathub_page, BZ, FLATHUB_PAGE, AdwBin) GtkWidget * bz_flathub_page_new (void); void bz_flathub_page_set_state (BzFlathubPage *self, BzStateInfo *state); BzStateInfo * bz_flathub_page_get_state (BzFlathubPage *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-flathub-state.c000066400000000000000000001006041522167256300215410ustar00rootroot00000000000000/* bz-flathub-state.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::FLATHUB" #define COLLECTION_FETCH_SIZE 192 #define CATEGORY_FETCH_SIZE 48 #define QUALITY_MODERATION_PAGE_SIZE 300 #define KEYWORD_SEARCH_PAGE_SIZE 48 #define ADWAITA_URL "https://arewelibadwaitayet.com" #include #include #include "bz-env.h" #include "bz-flathub-category.h" #include "bz-flathub-state.h" #include "bz-global-net.h" #include "bz-io.h" #include "bz-serializable.h" #include "bz-util.h" struct _BzFlathubState { GObject parent_instance; char *for_day; BzApplicationMapFactory *map_factory; char *app_of_the_day; GtkStringList *apps_of_the_week; GListStore *categories; DexFuture *initializing; }; typedef enum { QUALITY_MODE_NONE, QUALITY_MODE_FIRST, QUALITY_MODE_RANDOM } QualityMode; static void serializable_iface_init (BzSerializableInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzFlathubState, bz_flathub_state, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (BZ_TYPE_SERIALIZABLE, serializable_iface_init)) static GListModel *bz_flathub_state_dup_apps_of_the_day_week (BzFlathubState *self); enum { PROP_0, PROP_FOR_DAY, PROP_MAP_FACTORY, PROP_APP_OF_THE_DAY, PROP_APP_OF_THE_DAY_GROUP, PROP_APPS_OF_THE_WEEK, PROP_APPS_OF_THE_DAY_WEEK, PROP_CATEGORIES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * initialize_fiber (GWeakRef *wr); static DexFuture * initialize_finally (DexFuture *future, GWeakRef *wr); static void notify_all (BzFlathubState *self); static void clear (BzFlathubState *self); static void bz_flathub_state_dispose (GObject *object) { BzFlathubState *self = BZ_FLATHUB_STATE (object); dex_clear (&self->initializing); g_clear_pointer (&self->map_factory, g_object_unref); clear (self); G_OBJECT_CLASS (bz_flathub_state_parent_class)->dispose (object); } static void bz_flathub_state_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFlathubState *self = BZ_FLATHUB_STATE (object); switch (prop_id) { case PROP_FOR_DAY: g_value_set_string (value, bz_flathub_state_get_for_day (self)); break; case PROP_MAP_FACTORY: g_value_set_object (value, bz_flathub_state_get_map_factory (self)); break; case PROP_APP_OF_THE_DAY: g_value_set_string (value, bz_flathub_state_get_app_of_the_day (self)); break; case PROP_APP_OF_THE_DAY_GROUP: g_value_take_object (value, bz_flathub_state_dup_app_of_the_day_group (self)); break; case PROP_APPS_OF_THE_WEEK: g_value_take_object (value, bz_flathub_state_dup_apps_of_the_week (self)); break; case PROP_APPS_OF_THE_DAY_WEEK: g_value_take_object (value, bz_flathub_state_dup_apps_of_the_day_week (self)); break; case PROP_CATEGORIES: g_value_set_object (value, bz_flathub_state_get_categories (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_state_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFlathubState *self = BZ_FLATHUB_STATE (object); switch (prop_id) { case PROP_FOR_DAY: dex_future_disown (bz_flathub_state_set_for_day (self, g_value_get_string (value))); break; case PROP_MAP_FACTORY: bz_flathub_state_set_map_factory (self, g_value_get_object (value)); break; case PROP_APP_OF_THE_DAY: case PROP_APP_OF_THE_DAY_GROUP: case PROP_APPS_OF_THE_WEEK: case PROP_APPS_OF_THE_DAY_WEEK: case PROP_CATEGORIES: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flathub_state_class_init (BzFlathubStateClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_flathub_state_set_property; object_class->get_property = bz_flathub_state_get_property; object_class->dispose = bz_flathub_state_dispose; props[PROP_FOR_DAY] = g_param_spec_string ( "for-day", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MAP_FACTORY] = g_param_spec_object ( "map-factory", NULL, NULL, BZ_TYPE_APPLICATION_MAP_FACTORY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_APP_OF_THE_DAY] = g_param_spec_string ( "app-of-the-day", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_APP_OF_THE_DAY_GROUP] = g_param_spec_object ( "app-of-the-day-group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_APPS_OF_THE_WEEK] = g_param_spec_object ( "apps-of-the-week", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_APPS_OF_THE_DAY_WEEK] = g_param_spec_object ( "apps-of-the-day-week", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CATEGORIES] = g_param_spec_object ( "categories", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_flathub_state_init (BzFlathubState *self) { } static void bz_flathub_state_real_serialize (BzSerializable *serializable, GVariantBuilder *builder) { BzFlathubState *self = BZ_FLATHUB_STATE (serializable); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return; if (self->for_day != NULL) g_variant_builder_add (builder, "{sv}", "for-day", g_variant_new_string (self->for_day)); if (self->app_of_the_day != NULL) g_variant_builder_add (builder, "{sv}", "app-of-the-day", g_variant_new_string (self->app_of_the_day)); if (self->apps_of_the_week != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (G_LIST_MODEL (self->apps_of_the_week)); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < n_items; i++) { const char *string = NULL; string = gtk_string_list_get_string (self->apps_of_the_week, i); g_variant_builder_add (sub_builder, "s", string); } g_variant_builder_add (builder, "{sv}", "apps-of-the-week", g_variant_builder_end (sub_builder)); } } if (self->categories != NULL) { guint n_items = 0; n_items = g_list_model_get_n_items (G_LIST_MODEL (self->categories)); if (n_items > 0) { g_autoptr (GVariantBuilder) sub_builder = NULL; sub_builder = g_variant_builder_new (G_VARIANT_TYPE ("av")); for (guint i = 0; i < n_items; i++) { g_autoptr (BzFlathubCategory) category = NULL; g_autoptr (GVariantBuilder) category_builder = NULL; category = g_list_model_get_item (G_LIST_MODEL (self->categories), i); category_builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); bz_serializable_serialize (BZ_SERIALIZABLE (category), category_builder); g_variant_builder_add (sub_builder, "v", g_variant_builder_end (category_builder)); } g_variant_builder_add (builder, "{sv}", "categories", g_variant_builder_end (sub_builder)); } } } static gboolean bz_flathub_state_real_deserialize (BzSerializable *serializable, GVariant *import, GError **error) { BzFlathubState *self = BZ_FLATHUB_STATE (serializable); gboolean result = FALSE; g_autoptr (GVariantIter) iter = NULL; if (self->initializing != NULL && !dex_future_is_pending (self->initializing)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_BUSY, "Cannot perform serialization operations while initializing!"); return FALSE; } clear (self); iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; /* TODO automate this, this is awful */ if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "for-day") == 0) self->for_day = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "app-of-the-day") == 0) self->app_of_the_day = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "apps-of-the-week") == 0) { g_autoptr (GtkStringList) list = NULL; g_autoptr (GVariantIter) list_iter = NULL; list = gtk_string_list_new (NULL); list_iter = g_variant_iter_new (value); for (;;) { g_autofree char *id = NULL; if (!g_variant_iter_next (list_iter, "s", &id)) break; gtk_string_list_append (list, id); } self->apps_of_the_week = g_steal_pointer (&list); } else if (g_strcmp0 (key, "categories") == 0) { g_autoptr (GListStore) categories = NULL; g_autoptr (GVariantIter) categories_iter = NULL; categories = g_list_store_new (BZ_TYPE_FLATHUB_CATEGORY); categories_iter = g_variant_iter_new (value); for (;;) { g_autoptr (GVariant) category_import = NULL; g_autoptr (BzFlathubCategory) category = NULL; if (!g_variant_iter_next (categories_iter, "v", &category_import)) break; category = bz_flathub_category_new (); result = bz_serializable_deserialize ( BZ_SERIALIZABLE (category), category_import, error); if (!result) return FALSE; g_object_bind_property (self, "map-factory", category, "map-factory", G_BINDING_SYNC_CREATE); g_list_store_append (categories, category); } self->categories = g_steal_pointer (&categories); } } notify_all (self); return TRUE; } static void serializable_iface_init (BzSerializableInterface *iface) { iface->serialize = bz_flathub_state_real_serialize; iface->deserialize = bz_flathub_state_real_deserialize; } BzFlathubState * bz_flathub_state_new (void) { return g_object_new (BZ_TYPE_FLATHUB_STATE, NULL); } const char * bz_flathub_state_get_for_day (BzFlathubState *self) { g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); return self->for_day; } BzApplicationMapFactory * bz_flathub_state_get_map_factory (BzFlathubState *self) { g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); return self->map_factory; } const char * bz_flathub_state_get_app_of_the_day (BzFlathubState *self) { g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return NULL; return self->app_of_the_day; } BzEntryGroup * bz_flathub_state_dup_app_of_the_day_group (BzFlathubState *self) { g_autoptr (GtkStringObject) string = NULL; g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return NULL; g_return_val_if_fail (self->map_factory != NULL, NULL); string = gtk_string_object_new (self->app_of_the_day); return bz_application_map_factory_convert_one (self->map_factory, string); } GListModel * bz_flathub_state_dup_apps_of_the_week (BzFlathubState *self) { g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return NULL; if (self->apps_of_the_week != NULL) { if (self->map_factory != NULL) return bz_application_map_factory_generate ( self->map_factory, G_LIST_MODEL (self->apps_of_the_week)); else return G_LIST_MODEL (g_object_ref (self->apps_of_the_week)); } else return NULL; } GListModel * bz_flathub_state_dup_apps_of_the_day_week (BzFlathubState *self) { g_autoptr (GtkStringList) combined_list = NULL; g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return NULL; combined_list = gtk_string_list_new (NULL); if (self->app_of_the_day != NULL) gtk_string_list_append (combined_list, self->app_of_the_day); if (self->apps_of_the_week != NULL) { guint n_items = g_list_model_get_n_items (G_LIST_MODEL (self->apps_of_the_week)); for (guint i = 0; i < n_items; i++) { const char *app_id = gtk_string_list_get_string (self->apps_of_the_week, i); gtk_string_list_append (combined_list, app_id); } } if (self->map_factory != NULL) return bz_application_map_factory_generate (self->map_factory, G_LIST_MODEL (combined_list)); else return G_LIST_MODEL (g_object_ref (combined_list)); } GListModel * bz_flathub_state_get_categories (BzFlathubState *self) { g_return_val_if_fail (BZ_IS_FLATHUB_STATE (self), NULL); if (self->initializing != NULL && dex_future_is_pending (self->initializing)) return NULL; return G_LIST_MODEL (self->categories); } DexFuture * bz_flathub_state_set_for_day (BzFlathubState *self, const char *for_day) { dex_return_error_if_fail (BZ_IS_FLATHUB_STATE (self)); dex_clear (&self->initializing); clear (self); if (for_day != NULL) { g_autoptr (DexFuture) future = NULL; self->for_day = g_strdup (for_day); self->apps_of_the_week = gtk_string_list_new (NULL); self->categories = g_list_store_new (BZ_TYPE_FLATHUB_CATEGORY); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) initialize_fiber, bz_track_weak (self), bz_weak_release); future = dex_future_finally ( future, (DexFutureCallback) initialize_finally, bz_track_weak (self), bz_weak_release); self->initializing = g_steal_pointer (&future); return dex_ref (self->initializing); } else { notify_all (self); return dex_future_new_false (); } } DexFuture * bz_flathub_state_update_to_today (BzFlathubState *self) { g_autoptr (GDateTime) datetime = NULL; g_autofree gchar *for_day = NULL; dex_return_error_if_fail (BZ_IS_FLATHUB_STATE (self)); datetime = g_date_time_new_now_utc (); for_day = g_date_time_format (datetime, "%F"); g_debug ("Syncing with flathub for day: %s", for_day); return bz_flathub_state_set_for_day (self, for_day); } void bz_flathub_state_set_map_factory (BzFlathubState *self, BzApplicationMapFactory *map_factory) { g_return_if_fail (BZ_IS_FLATHUB_STATE (self)); g_return_if_fail (map_factory == NULL || BZ_IS_APPLICATION_MAP_FACTORY (map_factory)); g_clear_object (&self->map_factory); if (map_factory != NULL) self->map_factory = g_object_ref (map_factory); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MAP_FACTORY]); } static gboolean is_kde_plasma (void) { const char *desktop = g_getenv ("XDG_CURRENT_DESKTOP"); if (desktop == NULL) return FALSE; return g_str_equal (desktop, "KDE") || g_strstr_len (desktop, -1, "KDE") != NULL; } static void add_category (BzFlathubState *self, const char *name, JsonNode *node, GHashTable *quality_set, gboolean is_json_object, QualityMode quality_mode, gboolean is_spotlight) { JsonObject *object = NULL; JsonObjectIter iter = { 0 }; JsonArray *hits_array = NULL; const char *key = NULL; const char *app = NULL; g_autoptr (BzFlathubCategory) category = NULL; g_autoptr (GtkStringList) store = NULL; g_autoptr (GtkStringList) quality_store = NULL; g_autoptr (GPtrArray) quality_apps = NULL; guint app_count = 0; guint quality_count = 0; guint random_index = 0; guint i = 0; int total_entries = 0; category = bz_flathub_category_new (); store = gtk_string_list_new (NULL); quality_store = gtk_string_list_new (NULL); bz_flathub_category_set_name (category, name); bz_flathub_category_set_is_spotlight (category, is_spotlight); bz_flathub_category_set_applications (category, G_LIST_MODEL (store)); object = json_node_get_object (node); if (is_json_object) { if (quality_mode == QUALITY_MODE_RANDOM) quality_apps = g_ptr_array_new_with_free_func (g_free); json_object_iter_init (&iter, object); while (json_object_iter_next (&iter, &key, NULL)) { gtk_string_list_append (store, key); if (g_hash_table_contains (quality_set, key)) { if (quality_mode == QUALITY_MODE_RANDOM) g_ptr_array_add (quality_apps, g_strdup (key)); else if (quality_mode == QUALITY_MODE_FIRST) gtk_string_list_append (quality_store, key); } app_count++; } total_entries = json_object_get_size (object); } else { if (quality_mode == QUALITY_MODE_RANDOM) quality_apps = g_ptr_array_new_with_free_func (g_free); hits_array = json_object_get_array_member (object, "hits"); app_count = json_array_get_length (hits_array); for (i = 0; i < app_count; i++) { JsonObject *element = NULL; const char *app_id = NULL; element = json_array_get_object_element (hits_array, i); app_id = json_object_get_string_member (element, "app_id"); gtk_string_list_append (store, app_id); if (g_hash_table_contains (quality_set, app_id)) { if (quality_mode == QUALITY_MODE_RANDOM) g_ptr_array_add (quality_apps, g_strdup (app_id)); else if (quality_mode == QUALITY_MODE_FIRST) gtk_string_list_append (quality_store, app_id); } } total_entries = json_object_get_int_member (object, "totalHits"); } if (quality_mode == QUALITY_MODE_RANDOM && quality_apps != NULL) { quality_count = MIN (7, quality_apps->len); for (i = 0; i < quality_count; i++) { random_index = g_random_int_range (0, quality_apps->len); app = g_ptr_array_index (quality_apps, random_index); gtk_string_list_append (quality_store, app); g_ptr_array_remove_index_fast (quality_apps, random_index); } } bz_flathub_category_set_total_entries (category, total_entries); bz_flathub_category_set_quality_applications (category, G_LIST_MODEL (quality_store)); g_list_store_append (self->categories, category); } static DexFuture * initialize_fiber (GWeakRef *wr) { g_autoptr (BzFlathubState) self = NULL; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; gboolean is_kde = is_kde_plasma (); g_autoptr (GHashTable) quality_set = NULL; g_autoptr (DexFuture) aotd_f = NULL; g_autoptr (DexFuture) aotw_f = NULL; g_autoptr (DexFuture) categories_f = NULL; g_autoptr (DexFuture) updated_f = NULL; g_autoptr (DexFuture) added_f = NULL; g_autoptr (DexFuture) popular_f = NULL; g_autoptr (DexFuture) trending_f = NULL; g_autoptr (DexFuture) mobile_f = NULL; g_autoptr (DexFuture) passing_f = NULL; g_autoptr (DexFuture) adwaita_f = NULL; g_autoptr (DexFuture) toolkit_f = NULL; g_autoptr (DexFuture) emulators_f = NULL; g_autoptr (DexFuture) launchers_f = NULL; g_autoptr (DexFuture) game_tools_f = NULL; g_autoptr (DexFuture) game_only_f = NULL; bz_weak_get_or_return_reject (self, wr); quality_set = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); #define ADD_REQUEST(_var, ...) \ G_STMT_START \ { \ g_autofree char *_request = NULL; \ \ _request = g_strdup_printf (__VA_ARGS__); \ (_var) = bz_query_flathub_v2_json_take (g_steal_pointer (&_request)); \ if (!dex_await (dex_ref ((_var)), &local_error)) \ { \ g_warning ("Failed to complete request to flathub: %s", local_error->message); \ return dex_future_new_for_error (g_steal_pointer (&local_error)); \ } \ } \ G_STMT_END if (is_kde) ADD_REQUEST (toolkit_f, "/collection/developer/kde?locale=en"); else { adwaita_f = bz_https_query_json (ADWAITA_URL "/api/apps"); if (!dex_await (dex_ref (adwaita_f), &local_error)) { g_warning ("Failed to complete request to arewelibadwaitayet: %s", local_error->message); g_clear_error (&local_error); adwaita_f = NULL; } } ADD_REQUEST (passing_f, "/quality-moderation/passing-apps?page=1&page_size=%d", QUALITY_MODERATION_PAGE_SIZE); ADD_REQUEST (aotd_f, "/app-picks/app-of-the-day/%s", self->for_day); ADD_REQUEST (aotw_f, "/app-picks/apps-of-the-week/%s", self->for_day); ADD_REQUEST (categories_f, "/collection/category"); ADD_REQUEST (updated_f, "/collection/recently-updated?page=0&per_page=%d", COLLECTION_FETCH_SIZE); ADD_REQUEST (added_f, "/collection/recently-added?page=0&per_page=%d", COLLECTION_FETCH_SIZE); ADD_REQUEST (popular_f, "/collection/popular?page=0&per_page=%d", COLLECTION_FETCH_SIZE); ADD_REQUEST (trending_f, "/collection/trending?page=0&per_page=%d", COLLECTION_FETCH_SIZE); ADD_REQUEST (mobile_f, "/collection/mobile?page=0&per_page=%d", CATEGORY_FETCH_SIZE); ADD_REQUEST (game_only_f, "/collection/category/game?exclude_subcategories=emulator&exclude_subcategories=packageManager&exclude_subcategories=utility&exclude_subcategories=network&exclude_subcategories=gameTool&exclude_subcategories=launcherStore&sort_by=trending&page=0&per_page=%d", CATEGORY_FETCH_SIZE); ADD_REQUEST (emulators_f, "/collection/category/game/subcategories?subcategory=emulator&sort_by=trending&page=0&per_page=%d", CATEGORY_FETCH_SIZE); ADD_REQUEST (launchers_f, "/collection/category/game/subcategories?subcategory=packageManager&subcategory=launcherStore&sort_by=trending&page=0&per_page=%d", CATEGORY_FETCH_SIZE); ADD_REQUEST (game_tools_f, "/collection/category/game/subcategories?subcategory=utility&subcategory=network&subcategory=gameTool&sort_by=trending&page=0&per_page=%d", CATEGORY_FETCH_SIZE); #undef ADD_REQUEST #define GET_BOXED(_future) g_value_get_boxed (dex_future_get_value ((_future), NULL)) { JsonObject *object = NULL; JsonArray *array = NULL; guint length = 0; object = json_node_get_object (GET_BOXED (passing_f)); array = json_object_get_array_member (object, "apps"); length = json_array_get_length (array); for (guint i = 0; i < length; i++) { const char *app_id = NULL; app_id = json_array_get_string_element (array, i); g_hash_table_replace (quality_set, g_strdup (app_id), NULL); } } { JsonObject *object = NULL; object = json_node_get_object (GET_BOXED (aotd_f)); self->app_of_the_day = g_strdup (json_object_get_string_member (object, "app_id")); } { JsonObject *object = NULL; JsonArray *array = NULL; guint length = 0; object = json_node_get_object (GET_BOXED (aotw_f)); array = json_object_get_array_member (object, "apps"); length = json_array_get_length (array); for (guint i = 0; i < length; i++) { JsonObject *element = NULL; element = json_array_get_object_element (array, i); gtk_string_list_append ( self->apps_of_the_week, json_object_get_string_member (element, "app_id")); } } add_category (self, "trending", GET_BOXED (trending_f), quality_set, FALSE, QUALITY_MODE_NONE, TRUE); add_category (self, "popular", GET_BOXED (popular_f), quality_set, FALSE, QUALITY_MODE_NONE, TRUE); add_category (self, "recently-added", GET_BOXED (added_f), quality_set, FALSE, QUALITY_MODE_NONE, TRUE); add_category (self, "recently-updated", GET_BOXED (updated_f), quality_set, FALSE, QUALITY_MODE_NONE, TRUE); add_category (self, "mobile", GET_BOXED (mobile_f), quality_set, FALSE, QUALITY_MODE_NONE, TRUE); add_category (self, "game-only", GET_BOXED (game_only_f), quality_set, FALSE, QUALITY_MODE_NONE, FALSE); add_category (self, "emulators", GET_BOXED (emulators_f), quality_set, FALSE, QUALITY_MODE_NONE, FALSE); add_category (self, "launchers", GET_BOXED (launchers_f), quality_set, FALSE, QUALITY_MODE_NONE, FALSE); add_category (self, "game-tools", GET_BOXED (game_tools_f), quality_set, FALSE, QUALITY_MODE_NONE, FALSE); { static const char *categories[] = { "audiovideo", "development", "education", "game", "graphics", "network", "office", "science", "system", "utility" }; g_autoptr (GPtrArray) category_futures = NULL; category_futures = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < G_N_ELEMENTS (categories); i++) { g_autofree char *request = NULL; g_autoptr (DexFuture) future = NULL; request = g_strdup_printf ( "/collection/category/%s?page=0&per_page=%d", categories[i], CATEGORY_FETCH_SIZE); future = bz_query_flathub_v2_json_take (g_steal_pointer (&request)); result = dex_await (dex_ref (future), &local_error); if (!result) { g_warning ("Failed to complete request to flathub: %s", local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } g_ptr_array_add (category_futures, dex_ref (future)); } for (guint i = 0; i < G_N_ELEMENTS (categories); i++) { DexFuture *future = NULL; JsonNode *node = NULL; future = g_ptr_array_index (category_futures, i); node = GET_BOXED (future); add_category (self, categories[i], node, quality_set, FALSE, QUALITY_MODE_FIRST, FALSE); } } if (is_kde) add_category (self, "kde", GET_BOXED (toolkit_f), quality_set, FALSE, QUALITY_MODE_RANDOM, FALSE); else if (adwaita_f != NULL) add_category (self, "adwaita", GET_BOXED (adwaita_f), quality_set, TRUE, QUALITY_MODE_RANDOM, FALSE); return dex_future_new_true (); } static DexFuture * initialize_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzFlathubState) self = NULL; bz_weak_get_or_return_reject (self, wr); if (dex_future_is_resolved (future)) { guint n_categories = 0; n_categories = g_list_model_get_n_items (G_LIST_MODEL (self->categories)); for (guint i = 0; i < n_categories; i++) { g_autoptr (BzFlathubCategory) category = NULL; category = g_list_model_get_item (G_LIST_MODEL (self->categories), i); g_object_bind_property (self, "map-factory", category, "map-factory", G_BINDING_SYNC_CREATE); } g_debug ("Done syncing flathub state; notifying property listeners..."); notify_all (self); } else clear (self); return dex_ref (future); } static DexFuture * search_collection_fiber (char *route) { g_autoptr (GError) local_error = NULL; g_autoptr (GtkStringList) results = NULL; g_autoptr (JsonNode) node = NULL; g_autofree char *request = NULL; JsonObject *object = NULL; JsonArray *array = NULL; guint length = 0; request = g_strdup_printf ("%s&page=1&per_page=%d&locale=en", route, KEYWORD_SEARCH_PAGE_SIZE); node = dex_await_boxed ( bz_query_flathub_v2_json_take ( g_steal_pointer (&request)), &local_error); if (node == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); results = gtk_string_list_new (NULL); object = json_node_get_object (node); array = json_object_get_array_member (object, "hits"); length = json_array_get_length (array); for (guint i = 0; i < length; i++) { JsonObject *element = NULL; const char *app_id = NULL; element = json_array_get_object_element (array, i); app_id = json_object_get_string_member (element, "app_id"); gtk_string_list_append (results, app_id); } return dex_future_new_take_object (g_steal_pointer (&results)); } static DexFuture * search_collection_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzFlathubState) self = NULL; const GValue *value = NULL; GListModel *model = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); if (value == NULL) return dex_ref (future); model = g_value_get_object (value); if (self->map_factory != NULL) return dex_future_new_take_object ( bz_application_map_factory_generate (self->map_factory, model)); return dex_ref (future); } DexFuture * bz_flathub_state_search_collection (BzFlathubState *self, const char *route) { g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (BZ_IS_FLATHUB_STATE (self)); dex_return_error_if_fail (route != NULL); future = dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) search_collection_fiber, g_strdup (route), g_free); future = dex_future_finally ( future, (DexFutureCallback) search_collection_finally, bz_track_weak (self), bz_weak_release); return g_steal_pointer (&future); } static void notify_all (BzFlathubState *self) { g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOR_DAY]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APP_OF_THE_DAY]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APP_OF_THE_DAY_GROUP]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPS_OF_THE_WEEK]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPS_OF_THE_DAY_WEEK]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CATEGORIES]); } static void clear (BzFlathubState *self) { g_clear_pointer (&self->for_day, g_free); g_clear_pointer (&self->app_of_the_day, g_free); g_clear_pointer (&self->apps_of_the_week, g_object_unref); g_clear_pointer (&self->categories, g_object_unref); } /* End of bz-flathub-state.c */ bazaar-org-bazaar-b6e9a65/src/bz-flathub-state.h000066400000000000000000000041011522167256300215410ustar00rootroot00000000000000/* bz-flathub-state.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-application-map-factory.h" #include "bz-entry-group.h" G_BEGIN_DECLS #define BZ_TYPE_FLATHUB_STATE (bz_flathub_state_get_type ()) G_DECLARE_FINAL_TYPE (BzFlathubState, bz_flathub_state, BZ, FLATHUB_STATE, GObject) BzFlathubState * bz_flathub_state_new (void); DexFuture * bz_flathub_state_set_for_day (BzFlathubState *self, const char *for_day); void bz_flathub_state_set_map_factory (BzFlathubState *self, BzApplicationMapFactory *map_factory); const char * bz_flathub_state_get_for_day (BzFlathubState *self); BzApplicationMapFactory * bz_flathub_state_get_map_factory (BzFlathubState *self); const char * bz_flathub_state_get_app_of_the_day (BzFlathubState *self); BzEntryGroup * bz_flathub_state_dup_app_of_the_day_group (BzFlathubState *self); GListModel * bz_flathub_state_dup_apps_of_the_week (BzFlathubState *self); GListModel * bz_flathub_state_get_categories (BzFlathubState *self); gboolean bz_flathub_state_get_has_connection_error (BzFlathubState *self); DexFuture * bz_flathub_state_update_to_today (BzFlathubState *self); DexFuture * bz_flathub_state_search_collection (BzFlathubState *self, const char *route); G_END_DECLS /* End of bz-flathub-state.h */ bazaar-org-bazaar-b6e9a65/src/bz-flathub-sub-category.txt000066400000000000000000000002441522167256300234210ustar00rootroot00000000000000prefix=bz name=flathub_sub_category parent-prefix=g parent-name=object author=AUTOGEN property=name char G_TYPE_STRING string property=id char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-flatpak-bundle-result.txt000066400000000000000000000004141522167256300235760ustar00rootroot00000000000000prefix=bz name=flatpak_bundle_result parent-prefix=g parent-name=object author=AUTOGEN include="bz-flatpak-entry.h" include="bz-flatpak-repo.h" property=entry BzFlatpakEntry BZ_TYPE_FLATPAK_ENTRY object property=runtime_repo BzFlatpakRepo BZ_TYPE_FLATPAK_REPO object bazaar-org-bazaar-b6e9a65/src/bz-flatpak-entry.c000066400000000000000000000665741522167256300216000ustar00rootroot00000000000000/* bz-flatpak-entry.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::FLATPAK-ENTRY" #define BAZAAR_MODULE "entry" #include "config.h" #include #include #include "bz-app-permissions.h" #include "bz-application-map-factory.h" #include "bz-application.h" #include "bz-appstream-parser.h" #include "bz-flatpak-private.h" #include "bz-io.h" #include "bz-result.h" #include "bz-serializable.h" #include "bz-state-info.h" #define VERSION_SUFFIX_REGEX "\\s+[0-9][0-9.]*\\s*$" struct _BzFlatpakEntry { BzEntry parent_instance; gboolean user; gboolean is_bundle; gboolean is_installed_ref; char *flatpak_name; char *flatpak_id; char *flatpak_version; char *application_name; char *application_runtime; char *application_command; char *runtime_name; char *addon_extension_of_ref; char *bundle_path; BzResult *runtime_result; FlatpakRef *ref; }; static void serializable_iface_init (BzSerializableInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzFlatpakEntry, bz_flatpak_entry, BZ_TYPE_ENTRY, G_IMPLEMENT_INTERFACE (BZ_TYPE_SERIALIZABLE, serializable_iface_init)) enum { PROP_0, PROP_USER, PROP_FLATPAK_NAME, PROP_IS_BUNDLE, PROP_BUNDLE_PATH, PROP_FLATPAK_ID, PROP_FLATPAK_VERSION, PROP_APPLICATION_NAME, PROP_APPLICATION_RUNTIME, PROP_APPLICATION_COMMAND, PROP_RUNTIME_NAME, PROP_RUNTIME_RESULT, PROP_ADDON_OF_REF, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void clear_entry (BzFlatpakEntry *self); static void apply_icon_theme (BzFlatpakEntry *self); static void bz_flatpak_entry_dispose (GObject *object) { BzFlatpakEntry *self = BZ_FLATPAK_ENTRY (object); clear_entry (self); g_clear_object (&self->ref); G_OBJECT_CLASS (bz_flatpak_entry_parent_class)->dispose (object); } static void bz_flatpak_entry_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFlatpakEntry *self = BZ_FLATPAK_ENTRY (object); switch (prop_id) { case PROP_USER: g_value_set_boolean (value, self->user); break; case PROP_FLATPAK_ID: g_value_set_string (value, self->flatpak_id); break; case PROP_FLATPAK_NAME: g_value_set_string (value, self->flatpak_name); break; case PROP_FLATPAK_VERSION: g_value_set_string (value, self->flatpak_version); break; case PROP_APPLICATION_NAME: g_value_set_string (value, self->application_name); break; case PROP_IS_BUNDLE: g_value_set_boolean (value, self->is_bundle); break; case PROP_BUNDLE_PATH: g_value_set_string (value, self->bundle_path); break; case PROP_APPLICATION_RUNTIME: g_value_set_string (value, self->application_runtime); break; case PROP_APPLICATION_COMMAND: g_value_set_string (value, self->application_command); break; case PROP_RUNTIME_NAME: g_value_set_string (value, self->runtime_name); break; case PROP_RUNTIME_RESULT: g_value_take_object (value, bz_flatpak_entry_dup_runtime_result (self)); break; case PROP_ADDON_OF_REF: g_value_set_string (value, self->addon_extension_of_ref); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flatpak_entry_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { // BzFlatpakEntry *self = BZ_FLATPAK_ENTRY (object); switch (prop_id) { case PROP_USER: case PROP_FLATPAK_NAME: case PROP_FLATPAK_ID: case PROP_FLATPAK_VERSION: case PROP_APPLICATION_NAME: case PROP_IS_BUNDLE: case PROP_APPLICATION_RUNTIME: case PROP_APPLICATION_COMMAND: case PROP_RUNTIME_NAME: case PROP_ADDON_OF_REF: case PROP_BUNDLE_PATH: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_flatpak_entry_class_init (BzFlatpakEntryClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_flatpak_entry_set_property; object_class->get_property = bz_flatpak_entry_get_property; object_class->dispose = bz_flatpak_entry_dispose; props[PROP_USER] = g_param_spec_boolean ( "user", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_FLATPAK_NAME] = g_param_spec_string ( "flatpak-name", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_FLATPAK_ID] = g_param_spec_string ( "flatpak-id", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_FLATPAK_VERSION] = g_param_spec_string ( "flatpak-version", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_APPLICATION_NAME] = g_param_spec_string ( "application-name", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_IS_BUNDLE] = g_param_spec_boolean ( "is-bundle", NULL, NULL, FALSE, G_PARAM_READABLE); props[PROP_BUNDLE_PATH] = g_param_spec_string ( "bundle-path", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_APPLICATION_RUNTIME] = g_param_spec_string ( "application-runtime", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_APPLICATION_COMMAND] = g_param_spec_string ( "application-command", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_RUNTIME_NAME] = g_param_spec_string ( "runtime-name", NULL, NULL, NULL, G_PARAM_READABLE); props[PROP_RUNTIME_RESULT] = g_param_spec_object ( "runtime", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_ADDON_OF_REF] = g_param_spec_string ( "addon-extension-of-ref", NULL, NULL, NULL, G_PARAM_READABLE); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_flatpak_entry_init (BzFlatpakEntry *self) { } static void bz_flatpak_entry_real_serialize (BzSerializable *serializable, GVariantBuilder *builder) { BzFlatpakEntry *self = BZ_FLATPAK_ENTRY (serializable); g_variant_builder_add (builder, "{sv}", "user", g_variant_new_boolean (self->user)); g_variant_builder_add (builder, "{sv}", "is-bundle", g_variant_new_boolean (self->is_bundle)); g_variant_builder_add (builder, "{sv}", "is-installed-ref", g_variant_new_boolean (self->is_installed_ref)); if (self->bundle_path != NULL) g_variant_builder_add (builder, "{sv}", "bundle-path", g_variant_new_string (self->bundle_path)); if (self->flatpak_name != NULL) g_variant_builder_add (builder, "{sv}", "flatpak-name", g_variant_new_string (self->flatpak_name)); if (self->flatpak_id != NULL) g_variant_builder_add (builder, "{sv}", "flatpak-id", g_variant_new_string (self->flatpak_id)); if (self->flatpak_version != NULL) g_variant_builder_add (builder, "{sv}", "flatpak-version", g_variant_new_string (self->flatpak_version)); if (self->application_name != NULL) g_variant_builder_add (builder, "{sv}", "application-name", g_variant_new_string (self->application_name)); if (self->application_runtime != NULL) g_variant_builder_add (builder, "{sv}", "application-runtime", g_variant_new_string (self->application_runtime)); if (self->application_command != NULL) g_variant_builder_add (builder, "{sv}", "application-command", g_variant_new_string (self->application_command)); if (self->runtime_name != NULL) g_variant_builder_add (builder, "{sv}", "runtime-name", g_variant_new_string (self->runtime_name)); if (self->addon_extension_of_ref != NULL) g_variant_builder_add (builder, "{sv}", "addon-extension-of-ref", g_variant_new_string (self->addon_extension_of_ref)); bz_entry_serialize (BZ_ENTRY (self), builder); } static gboolean bz_flatpak_entry_real_deserialize (BzSerializable *serializable, GVariant *import, GError **error) { BzFlatpakEntry *self = BZ_FLATPAK_ENTRY (serializable); g_autoptr (GVariantIter) iter = NULL; clear_entry (self); iter = g_variant_iter_new (import); for (;;) { g_autofree char *key = NULL; g_autoptr (GVariant) value = NULL; if (!g_variant_iter_next (iter, "{sv}", &key, &value)) break; if (g_strcmp0 (key, "user") == 0) self->user = g_variant_get_boolean (value); else if (g_strcmp0 (key, "is-bundle") == 0) self->is_bundle = g_variant_get_boolean (value); else if (g_strcmp0 (key, "is-installed-ref") == 0) self->is_installed_ref = g_variant_get_boolean (value); else if (g_strcmp0 (key, "bundle-path") == 0) self->bundle_path = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "flatpak-name") == 0) self->flatpak_name = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "flatpak-id") == 0) self->flatpak_id = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "flatpak-version") == 0) self->flatpak_version = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "application-name") == 0) self->application_name = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "application-runtime") == 0) self->application_runtime = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "application-command") == 0) self->application_command = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "runtime-name") == 0) self->runtime_name = g_variant_dup_string (value, NULL); else if (g_strcmp0 (key, "addon-extension-of-ref") == 0) self->addon_extension_of_ref = g_variant_dup_string (value, NULL); } if (self->is_installed_ref) apply_icon_theme (self); return bz_entry_deserialize (BZ_ENTRY (self), import, error); } static void serializable_iface_init (BzSerializableInterface *iface) { iface->serialize = bz_flatpak_entry_real_serialize; iface->deserialize = bz_flatpak_entry_real_deserialize; } BzResult * bz_flatpak_entry_dup_runtime_result (BzFlatpakEntry *self) { BzStateInfo *state = NULL; BzApplicationMapFactory *factory = NULL; g_autofree char *runtime_unique_id = NULL; g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); state = bz_state_info_get_default (); if (self->runtime_result != NULL) return g_object_ref (self->runtime_result); if (self->application_runtime == NULL) return NULL; factory = bz_state_info_get_entry_factory (state); if (factory == NULL) return NULL; runtime_unique_id = g_strdup_printf ("FLATPAK-SYSTEM::flathub::runtime/%s", self->application_runtime); self->runtime_result = bz_application_map_factory_convert_one ( factory, gtk_string_object_new (runtime_unique_id)); return self->runtime_result != NULL ? g_object_ref (self->runtime_result) : NULL; } BzFlatpakEntry * bz_flatpak_entry_new_for_ref (FlatpakRef *ref, FlatpakRemote *remote, gboolean user, AsComponent *component, const char *appstream_dir, GError **error) { g_autoptr (BzFlatpakEntry) self = NULL; GBytes *bytes = NULL; g_autoptr (GKeyFile) key_file = NULL; gboolean result = FALSE; guint kinds = 0; g_autofree char *module_dir = NULL; const char *id = NULL; g_autofree char *unique_id = NULL; g_autofree char *unique_id_checksum = NULL; guint64 download_size = 0; guint64 installed_size = 0; const char *title = NULL; const char *eol = NULL; const char *remote_name = NULL; g_autoptr (GdkPaintable) icon_paintable = NULL; g_autoptr (BzAppPermissions) permissions = NULL; gboolean searchable = FALSE; gboolean reinstallable = FALSE; g_return_val_if_fail (FLATPAK_IS_REF (ref), NULL); g_return_val_if_fail (FLATPAK_IS_REMOTE_REF (ref) || FLATPAK_IS_BUNDLE_REF (ref) || FLATPAK_IS_INSTALLED_REF (ref), NULL); g_return_val_if_fail (component == NULL || appstream_dir != NULL || FLATPAK_IS_BUNDLE_REF (ref) || FLATPAK_IS_INSTALLED_REF (ref), NULL); self = g_object_new (BZ_TYPE_FLATPAK_ENTRY, NULL); self->user = user; self->is_bundle = FLATPAK_IS_BUNDLE_REF (ref); self->is_installed_ref = FLATPAK_IS_INSTALLED_REF (ref); self->ref = g_object_ref (ref); if (FLATPAK_IS_BUNDLE_REF (ref)) { GFile *file = NULL; file = flatpak_bundle_ref_get_file (FLATPAK_BUNDLE_REF (ref)); if (file != NULL) self->bundle_path = g_file_get_path (file); } key_file = g_key_file_new (); if (FLATPAK_IS_REMOTE_REF (ref)) bytes = flatpak_remote_ref_get_metadata (FLATPAK_REMOTE_REF (ref)); else if (FLATPAK_IS_BUNDLE_REF (ref)) bytes = flatpak_bundle_ref_get_metadata (FLATPAK_BUNDLE_REF (ref)); else if (FLATPAK_IS_INSTALLED_REF (ref)) bytes = flatpak_installed_ref_load_metadata (FLATPAK_INSTALLED_REF (ref), NULL, error); result = g_key_file_load_from_bytes ( key_file, bytes, G_KEY_FILE_NONE, error); if (!result) return NULL; #define GET_STRING(member, group_name, key) \ G_STMT_START \ { \ self->member = g_key_file_get_string ( \ key_file, group_name, key, error); \ if (self->member == NULL) \ return NULL; \ } \ G_STMT_END if (!g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, G_LOG_DOMAIN)) { gsize n_groups = 0; g_auto (GStrv) groups = NULL; g_print ("Debug Key File Data for %s - groups:\n", flatpak_ref_get_name (ref)); groups = g_key_file_get_groups (key_file, &n_groups); for (gsize i = 0; i < n_groups; i++) { gsize n_keys = 0; g_auto (GStrv) keys = NULL; g_print (" group %s\n", groups[i]); keys = g_key_file_get_keys (key_file, groups[i], &n_keys, NULL); for (gsize j = 0; j < n_keys; j++) { g_autofree char *value = NULL; value = g_key_file_get_value (key_file, groups[i], keys[j], NULL); g_print (" %s=%s\n", keys[j], value); } } } if (g_key_file_has_group (key_file, "Application")) { kinds |= BZ_ENTRY_KIND_APPLICATION; GET_STRING (application_name, "Application", "name"); GET_STRING (application_runtime, "Application", "runtime"); if (g_key_file_has_key (key_file, "Application", "command", NULL)) GET_STRING (application_command, "Application", "command"); } if (g_key_file_has_group (key_file, "ExtensionOf")) { kinds |= BZ_ENTRY_KIND_ADDON; GET_STRING (addon_extension_of_ref, "ExtensionOf", "ref"); } if (g_key_file_has_group (key_file, "Runtime")) { kinds |= BZ_ENTRY_KIND_RUNTIME; GET_STRING (runtime_name, "Runtime", "name"); } #undef GET_STRING // if (kinds == 0) // { // g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN, // "Key file presented no useful information"); // return NULL; // } module_dir = bz_dup_module_dir (); self->flatpak_name = g_strdup (flatpak_ref_get_name (ref)); self->flatpak_id = flatpak_ref_format_ref (ref); self->flatpak_version = g_strdup (flatpak_ref_get_branch (ref)); id = flatpak_ref_get_name (ref); unique_id = bz_flatpak_ref_format_unique (ref, user); unique_id_checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, unique_id, -1); if (remote != NULL) remote_name = flatpak_remote_get_name (remote); else if (FLATPAK_IS_BUNDLE_REF (ref)) remote_name = flatpak_bundle_ref_get_origin (FLATPAK_BUNDLE_REF (ref)); else if (FLATPAK_IS_INSTALLED_REF (ref)) remote_name = flatpak_installed_ref_get_origin (FLATPAK_INSTALLED_REF (ref)); if (FLATPAK_IS_REMOTE_REF (ref)) download_size = flatpak_remote_ref_get_download_size (FLATPAK_REMOTE_REF (ref)); else if (FLATPAK_IS_BUNDLE_REF (ref)) { g_autoptr (GFileInfo) file_info = NULL; GFile *bundle_file = flatpak_bundle_ref_get_file (FLATPAK_BUNDLE_REF (ref)); file_info = g_file_query_info (bundle_file, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, NULL, NULL); if (file_info != NULL) download_size = g_file_info_get_size (file_info); } if (FLATPAK_IS_REMOTE_REF (ref)) installed_size = flatpak_remote_ref_get_installed_size (FLATPAK_REMOTE_REF (ref)); else if (FLATPAK_IS_BUNDLE_REF (ref)) installed_size = flatpak_bundle_ref_get_installed_size (FLATPAK_BUNDLE_REF (ref)); else if (FLATPAK_IS_INSTALLED_REF (ref)) installed_size = flatpak_installed_ref_get_installed_size (FLATPAK_INSTALLED_REF (ref)); if (component != NULL) { result = bz_appstream_parser_populate_entry (BZ_ENTRY (self), component, appstream_dir, remote_name, module_dir, unique_id_checksum, id, kinds, error); if (!result) return NULL; } g_object_get (self, "icon-paintable", &icon_paintable, NULL); if (icon_paintable == NULL) { if (FLATPAK_IS_BUNDLE_REF (ref)) { for (int size = 128; size > 0; size -= 64) { g_autoptr (GBytes) icon_bytes = NULL; GdkTexture *texture = NULL; icon_bytes = flatpak_bundle_ref_get_icon (FLATPAK_BUNDLE_REF (ref), size); if (icon_bytes == NULL) continue; texture = gdk_texture_new_from_bytes (icon_bytes, NULL); /* don't error out even if loading fails */ if (texture != NULL) { icon_paintable = (GdkPaintable *) g_steal_pointer (&texture); break; } } } else if (FLATPAK_IS_INSTALLED_REF (ref)) apply_icon_theme (self); } g_object_get (self, "title", &title, NULL); if (title == NULL) { if (self->application_name != NULL) title = self->application_name; else if (self->runtime_name != NULL) title = self->runtime_name; else title = self->flatpak_id; } if ((kinds & BZ_ENTRY_KIND_RUNTIME) && !(kinds & BZ_ENTRY_KIND_ADDON) && self->flatpak_version != NULL) { static GRegex *version_regex = NULL; g_autofree char *stripped_title = NULL; if (g_once_init_enter_pointer (&version_regex)) { g_autoptr (GRegex) re = NULL; /* GNOME runtimes have the flatpak version at the end whilst others don't. */ re = g_regex_new (VERSION_SUFFIX_REGEX, 0, 0, NULL); g_once_init_leave_pointer (&version_regex, g_steal_pointer (&re)); } stripped_title = g_regex_replace (version_regex, title, -1, 0, "", 0, NULL); title = g_strdup_printf ("%s %s", stripped_title, self->flatpak_version); } if (FLATPAK_IS_REMOTE_REF (ref)) eol = flatpak_remote_ref_get_eol (FLATPAK_REMOTE_REF (ref)); else if (FLATPAK_IS_INSTALLED_REF (ref)) eol = flatpak_installed_ref_get_eol (FLATPAK_INSTALLED_REF (ref)); permissions = bz_app_permissions_new_from_metadata (key_file, error); if (permissions == NULL) return NULL; searchable = !FLATPAK_IS_INSTALLED_REF (ref); reinstallable = !FLATPAK_IS_INSTALLED_REF (ref); g_object_set ( self, "kinds", kinds, "id", id, "unique-id", unique_id, "unique-id-checksum", unique_id_checksum, "title", title, "eol", eol, "remote-repo-name", remote_name, "size", download_size, "installed-size", installed_size, "icon-paintable", icon_paintable, "permissions", permissions, "searchable", searchable, "reinstallable", reinstallable, NULL); return g_steal_pointer (&self); } char * bz_flatpak_ref_parts_format_unique (const char *origin, const char *fmt, gboolean user) { return g_strdup_printf ( "FLATPAK-%s::%s::%s", user ? "USER" : "SYSTEM", origin != NULL ? origin : "bundle", fmt); } char * bz_flatpak_ref_format_unique (FlatpakRef *ref, gboolean user) { g_autofree char *fmt = NULL; const char *origin = NULL; fmt = flatpak_ref_format_ref (FLATPAK_REF (ref)); if (FLATPAK_IS_REMOTE_REF (ref)) origin = flatpak_remote_ref_get_remote_name (FLATPAK_REMOTE_REF (ref)); else if (FLATPAK_IS_INSTALLED_REF (ref)) origin = flatpak_installed_ref_get_origin (FLATPAK_INSTALLED_REF (ref)); return bz_flatpak_ref_parts_format_unique (origin, fmt, user); } FlatpakRef * bz_flatpak_entry_get_ref (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); if (self->ref == NULL) self->ref = flatpak_ref_parse (self->flatpak_id, NULL); return self->ref; } char * bz_flatpak_id_format_unique (const char *flatpak_id, gboolean user) { g_autoptr (FlatpakRef) ref = NULL; ref = flatpak_ref_parse (flatpak_id, NULL); if (ref == NULL) return NULL; return bz_flatpak_ref_format_unique (ref, user); } gboolean bz_flatpak_entry_is_user (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), FALSE); return self->user; } const char * bz_flatpak_entry_get_flatpak_name (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->flatpak_name; } const char * bz_flatpak_entry_get_flatpak_id (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->flatpak_id; } const char * bz_flatpak_entry_get_flatpak_version (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->flatpak_version; } const char * bz_flatpak_entry_get_application_name (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->application_name; } const char * bz_flatpak_entry_get_application_runtime (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->application_runtime; } const char * bz_flatpak_entry_get_runtime_name (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->runtime_name; } const char * bz_flatpak_entry_get_addon_extension_of_ref (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->addon_extension_of_ref; } gboolean bz_flatpak_entry_is_bundle (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), FALSE); return self->is_bundle; } gboolean bz_flatpak_entry_is_installed_ref (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), FALSE); return self->is_installed_ref; } const char * bz_flatpak_entry_get_bundle_path (BzFlatpakEntry *self) { g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), NULL); return self->bundle_path; } gboolean bz_flatpak_entry_launch (BzFlatpakEntry *self, BzFlatpakInstance *flatpak, GError **error) { FlatpakRef *ref = NULL; #ifdef SANDBOXED_LIBFLATPAK g_autofree char *fmt = NULL; g_autofree char *cmdline = NULL; #else FlatpakInstallation *installation = NULL; #endif g_return_val_if_fail (BZ_IS_FLATPAK_ENTRY (self), FALSE); g_return_val_if_fail (BZ_IS_FLATPAK_INSTANCE (flatpak), FALSE); ref = bz_flatpak_entry_get_ref (self); #ifdef SANDBOXED_LIBFLATPAK fmt = flatpak_ref_format_ref (FLATPAK_REF (ref)); if (g_file_test ("/run/systemd", G_FILE_TEST_EXISTS)) cmdline = g_strdup_printf ("flatpak-spawn --host systemd-run --user --pipe flatpak run %s", fmt); else cmdline = g_strdup_printf ("flatpak-spawn --host flatpak run %s", fmt); return g_spawn_command_line_async (cmdline, error); #else installation = self->user ? bz_flatpak_instance_get_user_installation (flatpak) : bz_flatpak_instance_get_system_installation (flatpak); /* async? */ return flatpak_installation_launch ( installation, flatpak_ref_get_name (ref), flatpak_ref_get_arch (ref), flatpak_ref_get_branch (ref), flatpak_ref_get_commit (ref), NULL, error); #endif } static void clear_entry (BzFlatpakEntry *self) { g_clear_pointer (&self->flatpak_name, g_free); g_clear_pointer (&self->flatpak_id, g_free); g_clear_pointer (&self->flatpak_version, g_free); g_clear_pointer (&self->application_name, g_free); g_clear_pointer (&self->application_runtime, g_free); g_clear_pointer (&self->application_command, g_free); g_clear_pointer (&self->runtime_name, g_free); g_clear_pointer (&self->addon_extension_of_ref, g_free); g_clear_pointer (&self->bundle_path, g_free); g_clear_object (&self->runtime_result); } static void apply_icon_theme (BzFlatpakEntry *self) { FlatpakRef *ref = NULL; BzStateInfo *state = NULL; const char *icon_name = NULL; GtkIconTheme *theme = NULL; ref = bz_flatpak_entry_get_ref (self); state = bz_state_info_get_default (); icon_name = flatpak_ref_get_name (ref); theme = self->user ? bz_state_info_get_user_icon_theme (state) : bz_state_info_get_system_icon_theme (state); if (theme != NULL) { g_autoptr (GtkIconPaintable) paintable = NULL; paintable = gtk_icon_theme_lookup_icon ( theme, icon_name, NULL, 128, 1, GTK_TEXT_DIR_NONE, 0); if (paintable != NULL) g_object_set ( self, "icon-paintable", paintable, NULL); } } bazaar-org-bazaar-b6e9a65/src/bz-flatpak-entry.h000066400000000000000000000041551522167256300215700ustar00rootroot00000000000000/* bz-flatpak-entry.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-entry.h" #include "bz-flatpak-instance.h" #include "bz-result.h" G_BEGIN_DECLS #define BZ_TYPE_FLATPAK_ENTRY (bz_flatpak_entry_get_type ()) G_DECLARE_FINAL_TYPE (BzFlatpakEntry, bz_flatpak_entry, BZ, FLATPAK_ENTRY, BzEntry) char * bz_flatpak_id_format_unique (const char *flatpak_id, gboolean user); gboolean bz_flatpak_entry_is_user (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_flatpak_name (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_flatpak_id (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_flatpak_version (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_application_name (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_application_runtime (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_runtime_name (BzFlatpakEntry *self); BzResult * bz_flatpak_entry_dup_runtime_result (BzFlatpakEntry *self); gboolean bz_flatpak_entry_is_bundle (BzFlatpakEntry *self); gboolean bz_flatpak_entry_is_installed_ref (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_bundle_path (BzFlatpakEntry *self); const char * bz_flatpak_entry_get_addon_extension_of_ref (BzFlatpakEntry *self); gboolean bz_flatpak_entry_launch (BzFlatpakEntry *self, BzFlatpakInstance *flatpak, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-flatpak-instance.c000066400000000000000000003426571522167256300222420ustar00rootroot00000000000000/* bz-flatpak-instance.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::FLATPAK" #define BAZAAR_MODULE "flatpak" #include #include #include "config.h" #include "bz-backend-notification.h" #include "bz-backend-transaction-op-payload.h" #include "bz-backend-transaction-op-progress-payload.h" #include "bz-backend.h" #include "bz-env.h" #include "bz-flatpak-bundle-result.h" #include "bz-flatpak-private.h" #include "bz-flatpak-repo.h" #include "bz-global-net.h" #include "bz-io.h" #include "bz-repository.h" #include "bz-util.h" /* clang-format off */ G_DEFINE_QUARK (bz-flatpak-error-quark, bz_flatpak_error); /* clang-format on */ struct _BzFlatpakInstance { GObject parent_instance; DexScheduler *scheduler; FlatpakInstallation *system; FlatpakInstallation *system_interactive; GFileMonitor *system_events; int system_mute; FlatpakInstallation *user; FlatpakInstallation *user_interactive; GFileMonitor *user_events; int user_mute; GMutex mute_mutex; GMutex notif_mutex; GPtrArray *notif_channels; DexFuture *notif_send; GMutex transactions_mutex; /* BzEntry* -> GPtrArray* -> GCancellable* */ GHashTable *ongoing_cancellables; }; static void backend_iface_init (BzBackendInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzFlatpakInstance, bz_flatpak_instance, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (BZ_TYPE_BACKEND, backend_iface_init)); BZ_DEFINE_DATA ( init, Init, { BzFlatpakInstance *self; }, BZ_RELEASE_DATA (self, g_object_unref)) static DexFuture * init_fiber (InitData *data); BZ_DEFINE_DATA ( check_has_flathub, CheckHasFlathub, { GWeakRef *self; GCancellable *cancellable; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (cancellable, g_object_unref)); static DexFuture * check_has_flathub_fiber (CheckHasFlathubData *data); BZ_DEFINE_DATA ( ensure_flathub, EnsureFlathub, { GWeakRef *self; GCancellable *cancellable; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (cancellable, g_object_unref)); static DexFuture * ensure_flathub_fiber (EnsureFlathubData *data); BZ_DEFINE_DATA ( load_local_ref, LoadLocalRef, { GWeakRef *self; GCancellable *cancellable; GFile *file; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (cancellable, g_object_unref); BZ_RELEASE_DATA (file, g_object_unref)); static DexFuture * load_local_ref_fiber (LoadLocalRefData *data); DexFuture * bz_flatpak_repo_new_from_url (const char *url, GCancellable *cancellable); BZ_DEFINE_DATA ( gather_refs, GatherRefs, { GWeakRef *self; GCancellable *cancellable; guint total; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (cancellable, g_object_unref)); static DexFuture * retrieve_remote_refs_fiber (GatherRefsData *data); static DexFuture * retrieve_installs_fiber (GatherRefsData *data); static DexFuture * retrieve_updates_fiber (GatherRefsData *data); BZ_DEFINE_DATA ( list_repos, ListRepos, { GWeakRef *self; GCancellable *cancellable; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (cancellable, g_object_unref)); static DexFuture * list_repositories_fiber (ListReposData *data); static DexFuture * ensure_runtime_remote_fiber (BzFlatpakInstance *self, FlatpakInstallation *installation, const char *bundle_path, GCancellable *cancellable); BZ_DEFINE_DATA ( retrieve_refs_for_remote, RetrieveRefsForRemote, { GatherRefsData *parent; FlatpakInstallation *installation; FlatpakRemote *remote; }, BZ_RELEASE_DATA (parent, gather_refs_data_unref); BZ_RELEASE_DATA (installation, g_object_unref); BZ_RELEASE_DATA (remote, g_object_unref)); static DexFuture * retrieve_refs_for_remote_fiber (RetrieveRefsForRemoteData *data); static DexFuture * retrieve_refs_for_enumerable_remote (BzFlatpakInstance *self, GCancellable *cancellable, const char *remote_name, FlatpakInstallation *installation, FlatpakRemote *remote); static DexFuture * retrieve_refs_for_noenumerable_remote (BzFlatpakInstance *self, GCancellable *cancellable, const char *remote_name, FlatpakInstallation *installation, FlatpakRemote *remote); BZ_DEFINE_DATA ( transaction, Transaction, { GWeakRef *self; GMutex mutex; GCancellable *cancellable; GPtrArray *installs; GPtrArray *updates; GPtrArray *removals; DexChannel *channel; GPtrArray *send_futures; GHashTable *ref_to_entry_hash; GHashTable *op_to_progress_hash; guint unidentified_op_cnt; }, BZ_RELEASE_DATA (self, bz_weak_release); g_mutex_clear (&self->mutex); BZ_RELEASE_DATA (cancellable, g_object_unref); BZ_RELEASE_DATA (installs, g_ptr_array_unref); BZ_RELEASE_DATA (updates, g_ptr_array_unref); BZ_RELEASE_DATA (removals, g_ptr_array_unref); BZ_RELEASE_DATA (channel, dex_unref); BZ_RELEASE_DATA (send_futures, g_ptr_array_unref); BZ_RELEASE_DATA (ref_to_entry_hash, g_hash_table_unref); BZ_RELEASE_DATA (op_to_progress_hash, g_hash_table_unref)); static DexFuture * transaction_fiber (TransactionData *data); BZ_DEFINE_DATA ( transaction_job, TransactionJob, { TransactionData *parent; FlatpakTransaction *transaction; }, BZ_RELEASE_DATA (parent, transaction_data_unref); BZ_RELEASE_DATA (transaction, g_object_unref)); static DexFuture * transaction_job_fiber (TransactionJobData *data); static void transaction_new_operation (FlatpakTransaction *object, FlatpakTransactionOperation *operation, FlatpakTransactionProgress *progress, TransactionData *data); static void transaction_operation_done (FlatpakTransaction *object, FlatpakTransactionOperation *operation, gchar *commit, gint result, TransactionData *data); static gboolean transaction_operation_error (FlatpakTransaction *object, FlatpakTransactionOperation *operation, GError *error, gint details, TransactionData *data); static gboolean transaction_ready (FlatpakTransaction *object, TransactionData *data); static BzFlatpakEntry * find_entry_from_operation (TransactionData *data, FlatpakTransactionOperation *operation); BZ_DEFINE_DATA ( transaction_operation, TransactionOperation, { TransactionData *parent; BzFlatpakEntry *entry; BzBackendTransactionOpPayload *op; }, BZ_RELEASE_DATA (parent, transaction_data_unref); BZ_RELEASE_DATA (entry, g_object_unref); BZ_RELEASE_DATA (op, g_object_unref)); static void transaction_progress_changed (FlatpakTransactionProgress *object, TransactionOperationData *data); BZ_DEFINE_DATA ( transaction_operation_done, TransactionOperationDone, { TransactionData *parent; FlatpakTransaction *transaction; FlatpakTransactionOperation *operation; }, BZ_RELEASE_DATA (parent, transaction_data_unref); BZ_RELEASE_DATA (transaction, g_object_unref); BZ_RELEASE_DATA (operation, g_object_unref)); static DexFuture * transaction_operation_done_fiber (TransactionOperationDoneData *data); static void installation_event (BzFlatpakInstance *self, GFile *file, GFile *other_file, GFileMonitorEvent event_type, GFileMonitor *monitor); static void send_notif (BzFlatpakInstance *self, DexChannel *channel, BzBackendNotification *notif, gboolean lock); static void send_notif_all (BzFlatpakInstance *self, BzBackendNotification *notif, gboolean lock); #define SEND_AND_RETURN_ERROR(_self, _lock, _error, ...) \ G_STMT_START \ { \ g_autofree char *_error_string = NULL; \ g_autoptr (BzBackendNotification) _notif = NULL; \ \ _error_string = g_strdup_printf (__VA_ARGS__); \ \ _notif = bz_backend_notification_new (); \ bz_backend_notification_set_kind (_notif, BZ_BACKEND_NOTIFICATION_KIND_ERROR); \ bz_backend_notification_set_error (_notif, _error_string); \ send_notif_all ((_self), _notif, (_lock)); \ \ return dex_future_new_for_error ( \ g_error_new_literal (BZ_FLATPAK_ERROR, \ (_error), \ _error_string)); \ } \ G_STMT_END BZ_DEFINE_DATA ( wait_notif, WaitNotif, { GWeakRef self; DexChannel *channel; BzBackendNotification *notif; }, g_weak_ref_clear (&self->self); BZ_RELEASE_DATA (channel, dex_unref); BZ_RELEASE_DATA (notif, g_object_unref)); static DexFuture * wait_notif_finally (DexFuture *future, WaitNotifData *data); static gint cmp_rref (FlatpakRemoteRef *a, FlatpakRemoteRef *b, GHashTable *hash); static AsComponent * parse_component_for_node (XbNode *node, GError **error); static GBytes * decompress_appstream_gz (GBytes *appstream_gz, GCancellable *cancellable, GError **error); static XbSilo * build_silo (XbBuilderSource *source, GCancellable *cancellable, GError **error); static AsComponent * extract_first_component_for_silo (XbSilo *silo, GError **error); static void bz_flatpak_instance_dispose (GObject *object) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (object); dex_clear (&self->scheduler); g_clear_object (&self->system); g_clear_object (&self->system_interactive); g_clear_object (&self->system_events); g_clear_object (&self->user); g_clear_object (&self->user_interactive); g_clear_object (&self->user_events); g_mutex_clear (&self->mute_mutex); g_clear_pointer (&self->notif_channels, g_ptr_array_unref); dex_clear (&self->notif_send); g_mutex_clear (&self->notif_mutex); g_clear_pointer (&self->ongoing_cancellables, g_hash_table_unref); g_mutex_clear (&self->transactions_mutex); G_OBJECT_CLASS (bz_flatpak_instance_parent_class)->dispose (object); } static void bz_flatpak_instance_class_init (BzFlatpakInstanceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_flatpak_instance_dispose; } static void bz_flatpak_instance_init (BzFlatpakInstance *self) { self->scheduler = dex_thread_pool_scheduler_new (); self->system_mute = 0; self->user_mute = 0; g_mutex_init (&self->mute_mutex); self->notif_channels = g_ptr_array_new_with_free_func (dex_unref); g_mutex_init (&self->notif_mutex); self->ongoing_cancellables = g_hash_table_new_full ( g_direct_hash, g_direct_equal, g_object_unref, (GDestroyNotify) g_ptr_array_unref); g_mutex_init (&self->transactions_mutex); } static DexChannel * bz_flatpak_instance_create_notification_channel (BzBackend *backend) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (DexChannel) channel = NULL; channel = dex_channel_new (0); g_mutex_lock (&self->notif_mutex); g_ptr_array_add (self->notif_channels, dex_ref (channel)); g_mutex_unlock (&self->notif_mutex); return g_steal_pointer (&channel); } static DexFuture * bz_flatpak_instance_load_local_package (BzBackend *backend, GFile *file, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (LoadLocalRefData) data = NULL; data = load_local_ref_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); data->file = g_object_ref (file); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) load_local_ref_fiber, load_local_ref_data_ref (data), load_local_ref_data_unref); } static DexFuture * bz_flatpak_instance_retrieve_remote_refs (BzBackend *backend, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (GatherRefsData) data = NULL; data = gather_refs_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); data->total = 0; return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) retrieve_remote_refs_fiber, gather_refs_data_ref (data), gather_refs_data_unref); } static DexFuture * bz_flatpak_instance_retrieve_install_ids (BzBackend *backend, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (GatherRefsData) data = NULL; data = gather_refs_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) retrieve_installs_fiber, gather_refs_data_ref (data), gather_refs_data_unref); } static DexFuture * bz_flatpak_instance_retrieve_update_ids (BzBackend *backend, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (GatherRefsData) data = NULL; data = gather_refs_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) retrieve_updates_fiber, gather_refs_data_ref (data), gather_refs_data_unref); } static DexFuture * bz_flatpak_instance_list_repositories (BzBackend *backend, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (ListReposData) data = NULL; data = list_repos_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) list_repositories_fiber, list_repos_data_ref (data), list_repos_data_unref); } static DexFuture * bz_flatpak_instance_schedule_transaction (BzBackend *backend, BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals, DexChannel *channel, GCancellable *cancellable) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); BzFlatpakEntry **installs_dup = NULL; BzFlatpakEntry **updates_dup = NULL; BzFlatpakEntry **removals_dup = NULL; g_autoptr (TransactionData) data = NULL; for (guint i = 0; i < n_installs; i++) dex_return_error_if_fail (BZ_IS_FLATPAK_ENTRY (installs[i])); for (guint i = 0; i < n_updates; i++) dex_return_error_if_fail (BZ_IS_FLATPAK_ENTRY (updates[i])); for (guint i = 0; i < n_removals; i++) dex_return_error_if_fail (BZ_IS_FLATPAK_ENTRY (removals[i])); if (n_installs > 0) { installs_dup = g_malloc0_n (n_installs, sizeof (*installs_dup)); for (guint i = 0; i < n_installs; i++) installs_dup[i] = g_object_ref (BZ_FLATPAK_ENTRY (installs[i])); } if (n_updates > 0) { updates_dup = g_malloc0_n (n_updates, sizeof (*updates_dup)); for (guint i = 0; i < n_updates; i++) updates_dup[i] = g_object_ref (BZ_FLATPAK_ENTRY (updates[i])); } if (n_removals > 0) { removals_dup = g_malloc0_n (n_removals, sizeof (*removals_dup)); for (guint i = 0; i < n_removals; i++) removals_dup[i] = g_object_ref (BZ_FLATPAK_ENTRY (removals[i])); } data = transaction_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); data->installs = installs_dup != NULL ? g_ptr_array_new_take ((gpointer *) installs_dup, n_installs, g_object_unref) : NULL; data->updates = updates_dup != NULL ? g_ptr_array_new_take ((gpointer *) updates_dup, n_updates, g_object_unref) : NULL; data->removals = removals_dup != NULL ? g_ptr_array_new_take ((gpointer *) removals_dup, n_removals, g_object_unref) : NULL; data->channel = bz_dex_maybe_ref (channel); data->send_futures = g_ptr_array_new_with_free_func (dex_unref); data->ref_to_entry_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); data->op_to_progress_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL); g_mutex_init (&data->mutex); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) transaction_fiber, transaction_data_ref (data), transaction_data_unref); } static gboolean bz_flatpak_instance_cancel_task_for_entry (BzBackend *backend, BzEntry *entry) { BzFlatpakInstance *self = BZ_FLATPAK_INSTANCE (backend); g_autoptr (GMutexLocker) locker = NULL; GPtrArray *cancellables = NULL; locker = g_mutex_locker_new (&self->transactions_mutex); cancellables = g_hash_table_lookup (self->ongoing_cancellables, entry); if (cancellables == NULL) return FALSE; for (guint i = 0; i < cancellables->len; i++) { GCancellable *cancellable = NULL; cancellable = g_ptr_array_index (cancellables, i); g_cancellable_cancel (cancellable); } return TRUE; } static void backend_iface_init (BzBackendInterface *iface) { iface->create_notification_channel = bz_flatpak_instance_create_notification_channel; iface->load_local_package = bz_flatpak_instance_load_local_package; iface->retrieve_remote_entries = bz_flatpak_instance_retrieve_remote_refs; iface->retrieve_install_ids = bz_flatpak_instance_retrieve_install_ids; iface->retrieve_update_ids = bz_flatpak_instance_retrieve_update_ids; iface->list_repositories = bz_flatpak_instance_list_repositories; iface->schedule_transaction = bz_flatpak_instance_schedule_transaction; iface->cancel_task_for_entry = bz_flatpak_instance_cancel_task_for_entry; } FlatpakInstallation * bz_flatpak_instance_get_system_installation (BzFlatpakInstance *self) { g_return_val_if_fail (BZ_IS_FLATPAK_INSTANCE (self), NULL); return self->system; } FlatpakInstallation * bz_flatpak_instance_get_user_installation (BzFlatpakInstance *self) { g_return_val_if_fail (BZ_IS_FLATPAK_INSTANCE (self), NULL); return self->user; } DexFuture * bz_flatpak_instance_new (void) { g_autoptr (InitData) data = NULL; data = init_data_new (); data->self = g_object_new (BZ_TYPE_FLATPAK_INSTANCE, NULL); return dex_scheduler_spawn ( data->self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) init_fiber, init_data_ref (data), init_data_unref); } DexFuture * bz_flatpak_instance_has_flathub (BzFlatpakInstance *self, GCancellable *cancellable) { g_autoptr (CheckHasFlathubData) data = NULL; dex_return_error_if_fail (BZ_IS_FLATPAK_INSTANCE (self)); dex_return_error_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); data = check_has_flathub_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) check_has_flathub_fiber, check_has_flathub_data_ref (data), check_has_flathub_data_unref); } DexFuture * bz_flatpak_instance_ensure_has_flathub (BzFlatpakInstance *self, GCancellable *cancellable) { g_autoptr (EnsureFlathubData) data = NULL; dex_return_error_if_fail (BZ_IS_FLATPAK_INSTANCE (self)); dex_return_error_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); data = ensure_flathub_data_new (); data->self = bz_track_weak (self); data->cancellable = bz_object_maybe_ref (cancellable); return dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) ensure_flathub_fiber, ensure_flathub_data_ref (data), ensure_flathub_data_unref); } static DexFuture * init_fiber (InitData *data) { BzFlatpakInstance *self = data->self; g_autoptr (GError) local_error = NULL; g_autofree char *main_cache = NULL; bz_discard_module_dir (); self->system = flatpak_installation_new_system (NULL, &local_error); if (self->system != NULL) { g_autoptr (GFile) path = NULL; flatpak_installation_set_no_interaction (self->system, TRUE); path = flatpak_installation_get_path (self->system); self->system_interactive = flatpak_installation_new_for_path ( path, FALSE, NULL, NULL); g_assert (self->system_interactive != NULL); flatpak_installation_set_no_interaction (self->system_interactive, FALSE); self->system_events = flatpak_installation_create_monitor ( self->system, NULL, &local_error); if (self->system_events != NULL) g_signal_connect_swapped ( self->system_events, "changed", G_CALLBACK (installation_event), self); else { g_warning ("Failed to initialize event watch for system installation: %s", local_error->message); g_clear_pointer (&local_error, g_error_free); } } else { g_warning ("Failed to initialize system installation: %s", local_error->message); g_clear_pointer (&local_error, g_error_free); } #ifdef SANDBOXED_LIBFLATPAK { g_autoptr (GFile) user_installation_path = NULL; const char *home = g_get_home_dir (); g_autofree char *user_flatpak_path = g_build_filename (home, ".local", "share", "flatpak", NULL); user_installation_path = g_file_new_for_path (user_flatpak_path); self->user = flatpak_installation_new_for_path ( user_installation_path, TRUE, NULL, &local_error); } #else self->user = flatpak_installation_new_user (NULL, &local_error); #endif if (self->user != NULL) { g_autoptr (GFile) path = NULL; flatpak_installation_set_no_interaction (self->user, TRUE); path = flatpak_installation_get_path (self->user); self->user_interactive = flatpak_installation_new_for_path ( path, TRUE, NULL, NULL); g_assert (self->user_interactive != NULL); flatpak_installation_set_no_interaction (self->user_interactive, FALSE); self->user_events = flatpak_installation_create_monitor ( self->user, NULL, &local_error); if (self->user_events != NULL) g_signal_connect_swapped ( self->user_events, "changed", G_CALLBACK (installation_event), self); else { g_warning ("Failed to initialize event watch for user installation: %s", local_error->message); g_clear_pointer (&local_error, g_error_free); } } else { g_warning ("Failed to initialize user installation: %s", local_error->message); g_clear_pointer (&local_error, g_error_free); } #ifdef SANDBOXED_LIBFLATPAK if (g_getenv ("FLATPAK_BINARY") == NULL) { g_autofree char *flatpak_path = NULL; gint exit_status = 0; g_spawn_command_line_sync ("flatpak-spawn --host sh -c 'command -v flatpak'", &flatpak_path, NULL, &exit_status, NULL); if (exit_status == 0 && flatpak_path != NULL) g_setenv ("FLATPAK_BINARY", g_strstrip (flatpak_path), FALSE); else g_warning ("Failed to resolve host flatpak binary! User refs wont be updated"); } #endif if (self->system == NULL && self->user == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to initialize any flatpak installations"); return dex_future_new_for_object (self); } static DexFuture * check_has_flathub_fiber (CheckHasFlathubData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) system_remotes = NULL; guint n_system_remotes = 0; g_autoptr (GPtrArray) user_remotes = NULL; guint n_user_remotes = 0; bz_weak_get_or_return_reject (self, data->self); if (self->system != NULL) { system_remotes = flatpak_installation_list_remotes ( self->system, cancellable, &local_error); if (system_remotes == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for system installation: %s", local_error->message); n_system_remotes = system_remotes->len; } // Downloading from user remotes in the Flatpak is unsupported. #ifndef SANDBOXED_LIBFLATPAK if (self->user != NULL) { user_remotes = flatpak_installation_list_remotes ( self->user, cancellable, &local_error); if (user_remotes == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for user installation: %s", local_error->message); n_user_remotes = user_remotes->len; } #endif for (guint i = 0; i < n_system_remotes + n_user_remotes; i++) { FlatpakRemote *remote = NULL; const char *name = NULL; if (i < n_system_remotes) remote = g_ptr_array_index (system_remotes, i); else remote = g_ptr_array_index (user_remotes, i - n_system_remotes); if (flatpak_remote_get_disabled (remote) || flatpak_remote_get_noenumerate (remote)) continue; name = flatpak_remote_get_name (remote); if (g_strcmp0 (name, "flathub") == 0) return dex_future_new_true (); } return dex_future_new_false (); } static DexFuture * ensure_flathub_fiber (EnsureFlathubData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; g_autoptr (GError) local_error = NULL; g_autoptr (FlatpakRemote) remote = NULL; FlatpakInstallation *installation = NULL; gboolean result = FALSE; bz_weak_get_or_return_reject (self, data->self); #define REPO_URL "https://dl.flathub.org/repo/flathub.flatpakrepo" #ifdef SANDBOXED_LIBFLATPAK if (self->system != NULL) { remote = flatpak_installation_get_remote_by_name ( self->system, "flathub", cancellable, NULL); installation = self->system; } if (remote == NULL) return dex_future_new_true (); #else if (self->user != NULL) { remote = flatpak_installation_get_remote_by_name ( self->user, "flathub", cancellable, NULL); installation = self->user; } if (remote == NULL && self->system != NULL) { remote = flatpak_installation_get_remote_by_name ( self->system, "flathub", cancellable, NULL); if (remote != NULL) installation = self->system; } #endif if (remote != NULL) { flatpak_remote_set_disabled (remote, FALSE); flatpak_remote_set_noenumerate (remote, FALSE); flatpak_remote_set_gpg_verify (remote, TRUE); result = flatpak_installation_modify_remote ( installation, remote, cancellable, &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to modify existing system flathub remote: %s", local_error->message); } else { g_autoptr (SoupMessage) message = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (FlatpakRemote) imported = NULL; message = soup_message_new (SOUP_METHOD_GET, REPO_URL); output = g_memory_output_stream_new_resizable (); result = dex_await ( bz_send_with_global_http_session_then_splice_into (message, output), &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to retrieve flatpakrepo file from %s: %s", REPO_URL, local_error->message); bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output)); imported = flatpak_remote_new_from_file ("flathub", bytes, &local_error); if (imported == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to construct flatpak remote from flatpakrepo file %s: %s", REPO_URL, local_error->message); flatpak_remote_set_gpg_verify (imported, TRUE); result = flatpak_installation_add_remote ( installation, imported, TRUE, cancellable, &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to add flathub to flatpak installation: %s", local_error->message); } return dex_future_new_true (); } DexFuture * bz_flatpak_repo_new_from_url (const char *url, GCancellable *cancellable) { g_autoptr (SoupMessage) message = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GKeyFile) key_file = NULL; BzFlatpakRepo *repo = NULL; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autofree char *name = NULL; g_autofree char *title = NULL; g_autofree char *repo_url = NULL; g_autofree char *homepage = NULL; g_autofree char *comment = NULL; g_autofree char *description = NULL; g_autofree char *icon = NULL; g_autofree char *gpg_key = NULL; g_autofree char *default_branch = NULL; g_autofree char *filter = NULL; g_autoptr (GError) bool_error = NULL; gboolean gpg_verify = FALSE; name = g_path_get_basename (url); { char *dot = strrchr (name, '.'); if (dot != NULL) *dot = '\0'; } message = soup_message_new (SOUP_METHOD_GET, url); output = g_memory_output_stream_new_resizable (); result = dex_await ( bz_send_with_global_http_session_then_splice_into (message, output), &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to retrieve flatpakrepo file from %s: %s", url, local_error->message); bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output)); key_file = g_key_file_new (); result = g_key_file_load_from_bytes (key_file, bytes, G_KEY_FILE_NONE, &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to parse flatpakrepo file from %s: %s", url, local_error->message); title = g_key_file_get_string (key_file, "Flatpak Repo", "Title", NULL); repo_url = g_key_file_get_string (key_file, "Flatpak Repo", "Url", NULL); homepage = g_key_file_get_string (key_file, "Flatpak Repo", "Homepage", NULL); comment = g_key_file_get_string (key_file, "Flatpak Repo", "Comment", NULL); description = g_key_file_get_string (key_file, "Flatpak Repo", "Description", NULL); icon = g_key_file_get_string (key_file, "Flatpak Repo", "Icon", NULL); gpg_key = g_key_file_get_string (key_file, "Flatpak Repo", "GPGKey", NULL); default_branch = g_key_file_get_string (key_file, "Flatpak Repo", "DefaultBranch", NULL); filter = g_key_file_get_string (key_file, "Flatpak Repo", "Filter", NULL); gpg_verify = g_key_file_get_boolean (key_file, "Flatpak Repo", "GPGVerify", &bool_error); if (bool_error != NULL) { gpg_verify = gpg_key != NULL; g_clear_error (&bool_error); } repo = g_object_new (BZ_TYPE_FLATPAK_REPO, "name", name, "title", title, "url", repo_url, "homepage", homepage, "comment", comment, "description", description, "icon", icon, "gpg-key", gpg_key, "default-branch", default_branch, "filter", filter, "gpg-verify", gpg_verify, NULL); return dex_future_new_for_object (repo); } static DexFuture * load_local_ref_fiber (LoadLocalRefData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GFile *file = data->file; GCancellable *cancellable = data->cancellable; gboolean result = FALSE; g_autoptr (GError) local_error = NULL; g_autofree char *uri = NULL; g_autofree char *path = NULL; g_autofree char *runtime_repo_url = NULL; bz_weak_get_or_return_reject (self, data->self); uri = g_file_get_uri (file); path = g_file_get_path (file); if (uri == NULL) uri = g_strdup_printf ("file://%s", path); if (g_str_has_suffix (uri, ".flatpakref")) { const char *resolved_uri = NULL; g_autoptr (GKeyFile) key_file = g_key_file_new (); g_autofree char *name = NULL; if (g_str_has_prefix (uri, "flatpak+https")) resolved_uri = uri + strlen ("flatpak+"); else resolved_uri = uri; key_file = g_key_file_new (); if (g_str_has_prefix (resolved_uri, "http")) { g_autoptr (SoupMessage) message = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (GBytes) bytes = NULL; message = soup_message_new (SOUP_METHOD_GET, resolved_uri); output = g_memory_output_stream_new_resizable (); result = dex_await ( bz_send_with_global_http_session_then_splice_into (message, output), &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to retrieve flatpakref file from %s: %s", resolved_uri, local_error->message); bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output)); result = g_key_file_load_from_bytes (key_file, bytes, G_KEY_FILE_NONE, &local_error); } else if (path != NULL) result = g_key_file_load_from_file ( key_file, path, G_KEY_FILE_NONE, &local_error); else local_error = g_error_new ( G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, "Cannot handle URIs of this type"); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to load flatpakref '%s' into a key file: %s", uri, local_error->message); name = g_key_file_get_string (key_file, "Flatpak Ref", "Name", &local_error); if (name == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to load locate \"Name\" key in flatpakref '%s': %s", uri, local_error->message); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_PRESENT_ID); bz_backend_notification_set_generic_id (notif, name); send_notif_all (self, notif, TRUE); } return dex_future_new_take_string (g_steal_pointer (&name)); } else /* This is a bundle ref */ { g_autoptr (FlatpakBundleRef) bref = NULL; const char *name = NULL; const char *origin = NULL; FlatpakInstallation *add_to_installation = NULL; g_autoptr (FlatpakRemote) remote = NULL; g_autoptr (BzFlatpakEntry) entry = NULL; g_autoptr (BzFlatpakRepo) runtime_repo = NULL; g_autoptr (GBytes) appstream_gz = NULL; g_autoptr (GBytes) appstream = NULL; g_autoptr (AsComponent) component = NULL; g_autoptr (BzFlatpakBundleResult) bundle_result = NULL; if (path == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Cannot load '%s' as a flatpak bundle: URI is not a local file", uri); bref = flatpak_bundle_ref_new (file, &local_error); if (bref == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to load local flatpak bundle '%s': %s", path, local_error->message); name = flatpak_ref_get_name (FLATPAK_REF (bref)); origin = flatpak_bundle_ref_get_origin (bref); runtime_repo_url = flatpak_bundle_ref_get_runtime_repo_url (bref); if (runtime_repo_url != NULL) { g_autoptr (GError) repo_error = NULL; runtime_repo = dex_await_object ( bz_flatpak_repo_new_from_url (runtime_repo_url, cancellable), &repo_error); if (runtime_repo == NULL) g_warning ("Failed to parse runtime repo from %s: %s", runtime_repo_url, repo_error->message); } if (self->system != NULL) add_to_installation = self->system; else if (self->user != NULL) add_to_installation = self->user; /* First check if we already should have the origin remote installed */ if (self->system != NULL) { g_autoptr (GPtrArray) remotes = NULL; remotes = flatpak_installation_list_remotes ( self->system, NULL, NULL); if (remotes != NULL) { for (guint i = 0; i < remotes->len; i++) { FlatpakRemote *existing = NULL; const char *url = NULL; existing = g_ptr_array_index (remotes, i); url = flatpak_remote_get_url (existing); if (url != NULL && g_strcmp0 (url, origin) == 0) { remote = g_object_ref (existing); add_to_installation = NULL; break; } } } } if (self->user != NULL) { g_autoptr (GPtrArray) remotes = NULL; remotes = flatpak_installation_list_remotes ( self->user, NULL, NULL); if (remotes != NULL) { for (guint i = 0; i < remotes->len; i++) { FlatpakRemote *existing = NULL; const char *url = NULL; existing = g_ptr_array_index (remotes, i); url = flatpak_remote_get_url (existing); if (url != NULL && g_strcmp0 (url, origin) == 0) { remote = g_object_ref (existing); add_to_installation = NULL; break; } } } } if (add_to_installation != NULL) { g_autoptr (FlatpakRemote) config_remote = NULL; g_autofree char *remote_name = NULL; /* Configure and sync the new remote */ remote_name = g_strdup_printf ("%s-bazaar-origin", name); config_remote = flatpak_remote_new (remote_name); flatpak_remote_set_url (config_remote, origin); flatpak_remote_set_disabled (config_remote, FALSE); flatpak_remote_set_noenumerate (config_remote, FALSE); flatpak_remote_set_gpg_verify (config_remote, TRUE); result = flatpak_installation_add_remote ( add_to_installation, config_remote, FALSE, cancellable, NULL); if (result) { { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_INVALIDATE_REMOTES); send_notif_all (self, notif, TRUE); } remote = flatpak_installation_get_remote_by_name ( add_to_installation, remote_name, cancellable, NULL); if (remote != NULL) { { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_START); bz_backend_notification_set_remote_name (notif, remote_name); send_notif_all (self, notif, TRUE); } result = dex_await ( retrieve_refs_for_enumerable_remote ( self, cancellable, remote_name, add_to_installation, remote), NULL); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_FINISH); bz_backend_notification_set_remote_name (notif, remote_name); send_notif_all (self, notif, TRUE); } } } } appstream_gz = flatpak_bundle_ref_get_appstream (bref); if (appstream_gz != NULL) { appstream = decompress_appstream_gz (appstream_gz, NULL, &local_error); if (appstream == NULL) { g_warning ("Failed to decompress AppStream data: %s", local_error->message); g_clear_error (&local_error); } else { g_autoptr (XbBuilderSource) source = NULL; source = xb_builder_source_new (); if (!xb_builder_source_load_bytes (source, appstream, XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT, &local_error)) { g_warning ("Failed to load AppStream bytes into xmlb: %s", local_error->message); g_clear_error (&local_error); } else { g_autoptr (XbSilo) silo = NULL; silo = build_silo (source, NULL, &local_error); if (silo == NULL) { g_warning ("Failed to compile xmlb silo: %s", local_error->message); g_clear_error (&local_error); } else { component = extract_first_component_for_silo (silo, &local_error); if (component == NULL && local_error != NULL) { g_warning ("Failed to parse component: %s", local_error->message); g_clear_error (&local_error); } } } } } entry = bz_flatpak_entry_new_for_ref ( FLATPAK_REF (bref), remote, FALSE, component, NULL, &local_error); if (entry == NULL) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to parse information from flatpak bundle '%s': %s", path, local_error->message); bundle_result = g_object_new (BZ_TYPE_FLATPAK_BUNDLE_RESULT, "entry", entry, "runtime-repo", runtime_repo, NULL); return dex_future_new_for_object (g_steal_pointer (&bundle_result)); } } static DexFuture * retrieve_remote_refs_fiber (GatherRefsData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) system_remotes = NULL; guint n_system_remotes = 0; g_autoptr (GPtrArray) user_remotes = NULL; guint n_user_remotes = 0; g_autoptr (GHashTable) blocked_names_hash = NULL; g_autoptr (GPtrArray) jobs = NULL; g_autoptr (GPtrArray) job_names = NULL; g_autoptr (DexFuture) future = NULL; gboolean result = FALSE; g_autoptr (GString) error_string = NULL; bz_weak_get_or_return_reject (self, data->self); if (self->system != NULL) { system_remotes = flatpak_installation_list_remotes ( self->system, cancellable, &local_error); if (system_remotes == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for system installation: %s", local_error->message); n_system_remotes = system_remotes->len; } if (self->user != NULL) { user_remotes = flatpak_installation_list_remotes ( self->user, cancellable, &local_error); if (user_remotes == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for user installation: %s", local_error->message); n_user_remotes = user_remotes->len; } if (n_user_remotes + n_system_remotes == 0) return dex_future_new_true (); jobs = g_ptr_array_new_with_free_func (dex_unref); job_names = g_ptr_array_new_with_free_func (g_free); for (guint i = 0; i < n_system_remotes + n_user_remotes; i++) { FlatpakInstallation *installation = NULL; FlatpakRemote *remote = NULL; const char *name = NULL; g_autoptr (RetrieveRefsForRemoteData) job_data = NULL; g_autoptr (DexFuture) job_future = NULL; if (i < n_system_remotes) { installation = self->system; remote = g_ptr_array_index (system_remotes, i); } else { installation = self->user; remote = g_ptr_array_index (user_remotes, i - n_system_remotes); } name = flatpak_remote_get_name (remote); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_START); bz_backend_notification_set_remote_name (notif, name); send_notif_all (self, notif, TRUE); } job_data = retrieve_refs_for_remote_data_new (); job_data->parent = gather_refs_data_ref (data); job_data->installation = g_object_ref (installation); job_data->remote = g_object_ref (remote); job_future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) retrieve_refs_for_remote_fiber, retrieve_refs_for_remote_data_ref (job_data), retrieve_refs_for_remote_data_unref); g_ptr_array_add (jobs, g_steal_pointer (&job_future)); g_ptr_array_add (job_names, g_strdup (name)); } if (jobs->len == 0) return dex_future_new_true (); result = dex_await (dex_future_allv ( (DexFuture *const *) jobs->pdata, jobs->len), NULL); if (!result) error_string = g_string_new ("No remotes could be synchronized:\n\n"); for (guint i = 0; i < jobs->len; i++) { DexFuture *job_future = NULL; char *name = NULL; job_future = g_ptr_array_index (jobs, i); name = g_ptr_array_index (job_names, i); dex_future_get_value (job_future, &local_error); if (local_error != NULL) { if (error_string == NULL) error_string = g_string_new ("Some remotes couldn't be fully sychronized:\n"); g_string_append_printf (error_string, "\n%s failed because: %s\n", name, local_error->message); } g_clear_pointer (&local_error, g_error_free); } if (result) { if (error_string != NULL) return dex_future_new_take_string ( g_string_free_and_steal (g_steal_pointer (&error_string))); else return dex_future_new_true (); } else return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "%s", error_string->str); } static DexFuture * retrieve_refs_for_enumerable_remote (BzFlatpakInstance *self, GCancellable *cancellable, const char *remote_name, FlatpakInstallation *installation, FlatpakRemote *remote) { g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autoptr (GFile) appstream_dir = NULL; g_autofree char *appstream_dir_path = NULL; g_autofree char *appstream_xml_path = NULL; g_autoptr (GFile) appstream_xml = NULL; g_autoptr (XbBuilderSource) source = NULL; g_autoptr (XbSilo) silo = NULL; g_autoptr (XbNode) root = NULL; g_autoptr (GPtrArray) children = NULL; g_autoptr (GHashTable) component_hash = NULL; g_autoptr (GPtrArray) refs = NULL; g_debug ("Remote '%s' is enumerable, listing all remote refs", remote_name); result = flatpak_installation_update_remote_sync ( installation, remote_name, cancellable, &local_error); if (!result) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to synchronize remote '%s': %s", remote_name, local_error->message); result = flatpak_installation_update_appstream_full_sync ( installation, remote_name, NULL, NULL, NULL, NULL, cancellable, &local_error); if (!result) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to synchronize appstream data for remote '%s': %s", remote_name, local_error->message); appstream_dir = flatpak_remote_get_appstream_dir (remote, NULL); if (appstream_dir == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to locate appstream directory for remote '%s': %s", remote_name, local_error->message); appstream_dir_path = g_file_get_path (appstream_dir); appstream_xml_path = g_build_filename (appstream_dir_path, "appstream.xml.gz", NULL); if (!g_file_test (appstream_xml_path, G_FILE_TEST_EXISTS)) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to verify existence of appstream " "bundle download at path %s for remote '%s'", appstream_xml_path, remote_name); appstream_xml = g_file_new_for_path (appstream_xml_path); source = xb_builder_source_new (); result = xb_builder_source_load_file ( source, appstream_xml, XB_BUILDER_SOURCE_FLAG_WATCH_FILE | XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT, cancellable, &local_error); if (!result) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to load binary xml from appstream bundle " "download at path %s for remote '%s': %s", appstream_xml_path, remote_name, local_error->message); silo = build_silo (source, cancellable, &local_error); #ifdef __GLIBC__ /* From gnome-software/plugins/core/gs-plugin-appstream.c * * https://gitlab.gnome.org/GNOME/gnome-software/-/issues/941 * libxmlb <= 0.3.22 makes lots of temporary heap allocations parsing large XMLs * trim the heap after parsing to control RSS growth. */ malloc_trim (0); #endif if (silo == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, "Failed to compile binary xml silo from appstream bundle " "download at path %s for remote '%s': %s", appstream_xml_path, remote_name, local_error->message); root = xb_silo_get_root (silo); children = xb_node_get_children (root); component_hash = g_hash_table_new (g_str_hash, g_str_equal); for (guint i = 0; i < children->len; i++) { XbNode *component_node = NULL; AsComponent *component = NULL; const char *id = NULL; component_node = g_ptr_array_index (children, i); component = parse_component_for_node (component_node, &local_error); if (component == NULL) { SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_APPSTREAM_FAILURE, "Failed to parse appstream component from appstream bundle silo " "originating from download at path %s for remote '%s': %s", appstream_xml_path, remote_name, local_error->message); } id = as_component_get_id (component); g_hash_table_replace (component_hash, (gpointer) id, component); } refs = flatpak_installation_list_remote_refs_sync ( installation, remote_name, cancellable, &local_error); if (refs == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to enumerate refs for remote '%s': %s", remote_name, local_error->message); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_TELL_INCOMING); bz_backend_notification_set_n_incoming (notif, refs->len); send_notif_all (self, notif, TRUE); } /* Ensure the receiving side of the channel gets * runtimes first, then addons, then applications */ g_ptr_array_sort_values_with_data ( refs, (GCompareDataFunc) cmp_rref, component_hash); for (guint i = 0; i < refs->len; i++) { FlatpakRemoteRef *rref = NULL; const char *name = NULL; AsComponent *component = NULL; g_autoptr (BzFlatpakEntry) entry = NULL; rref = g_ptr_array_index (refs, i); name = flatpak_ref_get_name (FLATPAK_REF (rref)); component = g_hash_table_lookup (component_hash, name); if (component == NULL) { g_autofree char *desktop_id = NULL; desktop_id = g_strdup_printf ("%s.desktop", name); component = g_hash_table_lookup (component_hash, desktop_id); } entry = bz_flatpak_entry_new_for_ref ( FLATPAK_REF (rref), remote, installation == self->user, component, appstream_dir_path, NULL); if (entry != NULL) { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REPLACE_ENTRY); bz_backend_notification_set_entry (notif, BZ_ENTRY (entry)); send_notif_all (self, notif, TRUE); } else { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_TELL_INCOMING); bz_backend_notification_set_n_incoming (notif, -1); send_notif_all (self, notif, TRUE); } } return dex_future_new_true (); } static DexFuture * retrieve_refs_for_noenumerable_remote (BzFlatpakInstance *self, GCancellable *cancellable, const char *remote_name, FlatpakInstallation *installation, FlatpakRemote *remote) { g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) installed_apps = NULL; guint matched = 0; installed_apps = flatpak_installation_list_installed_refs_by_kind ( installation, FLATPAK_REF_KIND_APP, cancellable, &local_error); if (installed_apps == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_LOCAL_SYNCHRONIZATION_FAILURE, "Failed to enumerate installed apps for non-enumerable remote '%s': %s", remote_name, local_error->message); g_debug ("Found %u total installed apps, filtering for remote '%s'", installed_apps->len, remote_name); for (guint i = 0; i < installed_apps->len; i++) { FlatpakInstalledRef *iref = NULL; const char *ref_origin = NULL; g_autoptr (AsComponent) component = NULL; g_autoptr (BzFlatpakEntry) entry = NULL; g_autoptr (GBytes) appstream_gz = NULL; iref = g_ptr_array_index (installed_apps, i); ref_origin = flatpak_installed_ref_get_origin (iref); if (g_strcmp0 (ref_origin, remote_name) != 0) continue; matched++; appstream_gz = flatpak_installed_ref_load_appdata (iref, cancellable, NULL); if (appstream_gz != NULL) { g_autoptr (GBytes) appstream = NULL; g_autoptr (XbBuilderSource) source = NULL; g_autoptr (XbSilo) silo = NULL; g_autoptr (GError) appstream_error = NULL; appstream = decompress_appstream_gz (appstream_gz, cancellable, &appstream_error); if (appstream == NULL) { g_info ("Could not decompress appstream for installed ref: %s", appstream_error ? appstream_error->message : "unknown error"); goto create_entry; } source = xb_builder_source_new (); if (!xb_builder_source_load_bytes (source, appstream, XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT, &appstream_error)) { g_info ("Could not load appstream bytes: %s", appstream_error ? appstream_error->message : "unknown error"); goto create_entry; } silo = build_silo (source, cancellable, &appstream_error); if (silo == NULL) { g_info ("Could not build silo from appstream: %s", appstream_error ? appstream_error->message : "unknown error"); goto create_entry; } component = extract_first_component_for_silo (silo, &appstream_error); if (component == NULL) { g_info ("Could not parse appstream component: %s", appstream_error ? appstream_error->message : "unknown error"); } } create_entry: entry = bz_flatpak_entry_new_for_ref ( FLATPAK_REF (iref), remote, installation == self->user, component, NULL, NULL); if (entry != NULL) { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REPLACE_ENTRY); bz_backend_notification_set_entry (notif, BZ_ENTRY (entry)); send_notif_all (self, notif, TRUE); } } g_debug ("Found %u installed apps from non-enumerable remote '%s'", matched, remote_name); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_TELL_INCOMING); bz_backend_notification_set_n_incoming (notif, matched); send_notif_all (self, notif, TRUE); } return dex_future_new_true (); } static DexFuture * retrieve_refs_for_remote_fiber (RetrieveRefsForRemoteData *data) { FlatpakInstallation *installation = data->installation; FlatpakRemote *remote = data->remote; g_autoptr (BzFlatpakInstance) self = NULL; const char *remote_name = NULL; gboolean is_noenumerate = FALSE; g_autoptr (DexFuture) ret = NULL; bz_weak_get_or_return_reject (self, data->parent->self); remote_name = flatpak_remote_get_name (remote); is_noenumerate = flatpak_remote_get_noenumerate (remote); /* the fedora flatpak repos cause too many issues */ if (strstr (remote_name, "fedora") != NULL) is_noenumerate = TRUE; #ifdef SANDBOXED_LIBFLATPAK if (is_noenumerate || installation == self->user) #else if (is_noenumerate) #endif ret = retrieve_refs_for_noenumerable_remote ( self, data->parent->cancellable, remote_name, installation, remote); else ret = retrieve_refs_for_enumerable_remote ( self, data->parent->cancellable, remote_name, installation, remote); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_FINISH); bz_backend_notification_set_remote_name (notif, remote_name); send_notif_all (self, notif, TRUE); } return g_steal_pointer (&ret); } static DexFuture * retrieve_installs_fiber (GatherRefsData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) system_refs = NULL; guint n_system_refs = 0; g_autoptr (GPtrArray) user_refs = NULL; guint n_user_refs = 0; g_autoptr (GHashTable) ids = NULL; bz_weak_get_or_return_reject (self, data->self); if (self->system != NULL) { flatpak_installation_drop_caches ( self->system, cancellable, NULL); system_refs = flatpak_installation_list_installed_refs ( self->system, cancellable, &local_error); if (system_refs == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_LOCAL_SYNCHRONIZATION_FAILURE, "Failed to discover installed refs for system installation: %s", local_error->message); n_system_refs = system_refs->len; } if (self->user != NULL) { flatpak_installation_drop_caches ( self->user, cancellable, NULL); user_refs = flatpak_installation_list_installed_refs ( self->user, cancellable, &local_error); if (user_refs == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_LOCAL_SYNCHRONIZATION_FAILURE, "Failed to discover installed refs for user installation: %s", local_error->message); n_user_refs = user_refs->len; } ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); for (guint i = 0; i < n_system_refs + n_user_refs; i++) { gboolean user = FALSE; FlatpakInstalledRef *iref = NULL; const char *version = NULL; g_autofree char *unique_id = NULL; if (i < n_system_refs) { user = FALSE; iref = g_ptr_array_index (system_refs, i); } else { user = TRUE; iref = g_ptr_array_index (user_refs, i - n_system_refs); } version = flatpak_installed_ref_get_appdata_version (iref); unique_id = bz_flatpak_ref_format_unique (FLATPAK_REF (iref), user); g_hash_table_replace (ids, g_steal_pointer (&unique_id), g_strdup (version != NULL ? version : "")); } return dex_future_new_take_boxed ( G_TYPE_HASH_TABLE, g_steal_pointer (&ids)); } static gboolean should_skip_extension_ref (FlatpakInstalledRef *iref) { const gchar *ref_name = flatpak_ref_get_name (FLATPAK_REF (iref)); /* These get updated with their parents and look really bad in the UI */ return g_str_has_suffix (ref_name, ".Locale") || g_str_has_suffix (ref_name, ".Debug") || g_str_has_suffix (ref_name, ".Sources"); } static DexFuture * retrieve_updates_fiber (GatherRefsData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) system_refs = NULL; guint n_sys_refs = 0; g_autoptr (GPtrArray) user_refs = NULL; guint n_user_refs = 0; g_autoptr (GPtrArray) ids = NULL; bz_weak_get_or_return_reject (self, data->self); if (self->system != NULL) { system_refs = flatpak_installation_list_installed_refs_for_update ( self->system, cancellable, &local_error); if (system_refs == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to discover update-elligible refs for system installation: %s", local_error->message); n_sys_refs = system_refs->len; } #ifndef SANDBOXED_LIBFLATPAK if (self->user != NULL) #else if (self->user != NULL && g_getenv ("FLATPAK_BINARY") != NULL) #endif { user_refs = flatpak_installation_list_installed_refs_for_update ( self->user, cancellable, &local_error); if (user_refs == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, "Failed to discover update-elligible refs for user installation: %s", local_error->message); n_user_refs = user_refs->len; } ids = g_ptr_array_new_with_free_func (g_free); for (guint i = 0; i < n_sys_refs + n_user_refs; i++) { gboolean user = FALSE; FlatpakInstalledRef *iref = NULL; if (i < n_sys_refs) { user = FALSE; iref = g_ptr_array_index (system_refs, i); } else { user = TRUE; iref = g_ptr_array_index (user_refs, i - n_sys_refs); } if (should_skip_extension_ref (iref)) continue; g_ptr_array_add (ids, bz_flatpak_ref_format_unique (FLATPAK_REF (iref), user)); } return dex_future_new_take_boxed ( G_TYPE_PTR_ARRAY, g_steal_pointer (&ids)); } static DexFuture * list_repositories_fiber (ListReposData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GPtrArray) system_repos = NULL; g_autoptr (GPtrArray) user_repos = NULL; g_autoptr (GListStore) repos = NULL; cancellable = data->cancellable; bz_weak_get_or_return_reject (self, data->self); repos = g_list_store_new (BZ_TYPE_REPOSITORY); if (self->system != NULL) { system_repos = flatpak_installation_list_remotes ( self->system, cancellable, &local_error); if (system_repos == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for system installation: %s", local_error->message); for (guint i = 0; i < system_repos->len; i++) { FlatpakRemote *remote = NULL; g_autoptr (BzRepository) repo = NULL; remote = g_ptr_array_index (system_repos, i); repo = g_object_new (BZ_TYPE_REPOSITORY, "name", flatpak_remote_get_name (remote), "title", flatpak_remote_get_title (remote), "url", flatpak_remote_get_url (remote), "is-user", FALSE, NULL); g_list_store_append (repos, repo); } } if (self->user != NULL) { user_repos = flatpak_installation_list_remotes ( self->user, cancellable, &local_error); if (user_repos == NULL) SEND_AND_RETURN_ERROR ( self, TRUE, BZ_FLATPAK_ERROR_CANNOT_INITIALIZE, "Failed to enumerate remotes for user installation: %s", local_error->message); for (guint i = 0; i < user_repos->len; i++) { FlatpakRemote *remote = NULL; g_autoptr (BzRepository) repo = NULL; remote = g_ptr_array_index (user_repos, i); repo = g_object_new (BZ_TYPE_REPOSITORY, "name", flatpak_remote_get_name (remote), "title", flatpak_remote_get_title (remote), "url", flatpak_remote_get_url (remote), "is-user", TRUE, NULL); g_list_store_append (repos, repo); } } return dex_future_new_for_object (g_steal_pointer (&repos)); } static DexFuture * ensure_runtime_remote_fiber (BzFlatpakInstance *self, FlatpakInstallation *installation, const char *bundle_path, GCancellable *cancellable) { g_autoptr (GError) local_error = NULL; g_autoptr (GFile) bundle_file = NULL; g_autoptr (FlatpakBundleRef) bundle_ref = NULL; g_autofree char *runtime_repo_url = NULL; g_autoptr (SoupMessage) message = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (FlatpakRemote) remote = NULL; g_autofree char *remote_name = NULL; g_autoptr (GKeyFile) key_file = NULL; g_autofree char *gpg_key_base64 = NULL; g_autoptr (GBytes) gpg_key_bytes = NULL; bundle_file = g_file_new_for_path (bundle_path); bundle_ref = flatpak_bundle_ref_new (bundle_file, NULL); if (bundle_ref == NULL) return dex_future_new_true (); runtime_repo_url = flatpak_bundle_ref_get_runtime_repo_url (bundle_ref); if (runtime_repo_url == NULL) return dex_future_new_true (); remote_name = g_path_get_basename (runtime_repo_url); { char *dot = strrchr (remote_name, '.'); if (dot != NULL) *dot = '\0'; } { g_autoptr (FlatpakRemote) existing = NULL; existing = flatpak_installation_get_remote_by_name ( installation, remote_name, cancellable, NULL); if (existing != NULL) return dex_future_new_true (); } message = soup_message_new (SOUP_METHOD_GET, runtime_repo_url); output = g_memory_output_stream_new_resizable (); dex_await ( bz_send_with_global_http_session_then_splice_into (message, output), &local_error); if (local_error != NULL) { g_warning ("failed to fetch %s: %s", runtime_repo_url, local_error->message); return dex_future_new_true (); } bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (output)); key_file = g_key_file_new (); if (!g_key_file_load_from_bytes (key_file, bytes, G_KEY_FILE_NONE, NULL)) return dex_future_new_true (); gpg_key_base64 = g_key_file_get_string (key_file, "Flatpak Repo", "GPGKey", NULL); if (gpg_key_base64 == NULL) return dex_future_new_true (); { gsize gpg_key_len = 0; guchar *gpg_key_data = g_base64_decode (gpg_key_base64, &gpg_key_len); gpg_key_bytes = g_bytes_new_take (gpg_key_data, gpg_key_len); } remote = flatpak_remote_new_from_file (remote_name, bytes, &local_error); if (remote == NULL) { g_warning ("failed to parse flatpakrepo from %s: %s", runtime_repo_url, local_error->message); return dex_future_new_true (); } flatpak_remote_set_gpg_verify (remote, TRUE); flatpak_remote_set_gpg_key (remote, gpg_key_bytes); if (!flatpak_installation_add_remote ( installation, remote, TRUE, cancellable, &local_error)) { g_warning ("failed to add remote '%s': %s", remote_name, local_error->message); g_clear_error (&local_error); } return dex_future_new_true (); } static DexFuture * transaction_fiber (TransactionData *data) { g_autoptr (BzFlatpakInstance) self = NULL; GCancellable *cancellable = data->cancellable; GPtrArray *installations = data->installs; GPtrArray *updates = data->updates; GPtrArray *removals = data->removals; DexChannel *channel = data->channel; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autoptr (GPtrArray) transactions = NULL; g_autoptr (GPtrArray) entries = NULL; g_autoptr (GPtrArray) jobs = NULL; g_autoptr (GHashTable) errored = NULL; bz_weak_get_or_return_reject (self, data->self); transactions = g_ptr_array_new_with_free_func (g_object_unref); entries = g_ptr_array_new_with_free_func (g_object_unref); if (installations != NULL) { for (guint i = 0; i < installations->len; i++) { BzFlatpakEntry *entry = NULL; const char *bundle_path = NULL; FlatpakInstallation *installation = NULL; entry = g_ptr_array_index (installations, i); bundle_path = bz_flatpak_entry_get_bundle_path (entry); if (bundle_path == NULL) continue; installation = bz_flatpak_entry_is_user (entry) ? self->user_interactive : self->system_interactive; if (bundle_path != NULL && installation != NULL) dex_await ( ensure_runtime_remote_fiber (self, installation, bundle_path, cancellable), NULL); } for (guint i = 0; i < installations->len; i++) { BzFlatpakEntry *entry = NULL; const char *bundle_path = NULL; FlatpakRef *ref = NULL; gboolean is_user = FALSE; g_autofree char *ref_fmt = NULL; g_autoptr (FlatpakTransaction) transaction = NULL; entry = g_ptr_array_index (installations, i); bundle_path = bz_flatpak_entry_get_bundle_path (entry); ref = bz_flatpak_entry_get_ref (entry); is_user = bz_flatpak_entry_is_user (BZ_FLATPAK_ENTRY (entry)); ref_fmt = flatpak_ref_format_ref (ref); if ((is_user && self->user == NULL) || (!is_user && self->system == NULL)) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the update of %s to transaction " "because its installation couldn't be found", ref_fmt); } transaction = flatpak_transaction_new_for_installation ( is_user ? self->user_interactive : self->system_interactive, cancellable, &local_error); if (transaction == NULL) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to initialize potential transaction for installation: %s", local_error->message); } if (bundle_path != NULL) /* Prioritize bundle installation */ { g_autoptr (GFile) file = NULL; file = g_file_new_for_path (bundle_path); result = flatpak_transaction_add_install_bundle ( transaction, file, NULL, &local_error); } else result = flatpak_transaction_add_install ( transaction, bz_entry_get_remote_repo_name (BZ_ENTRY (entry)), ref_fmt, NULL, &local_error); if (!result) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the installation of %s to transaction: %s", ref_fmt, local_error->message); } g_ptr_array_add (transactions, g_steal_pointer (&transaction)); g_ptr_array_add (entries, g_object_ref (entry)); g_hash_table_replace (data->ref_to_entry_hash, g_steal_pointer (&ref_fmt), g_object_ref (entry)); } } if (updates != NULL) { g_autoptr (FlatpakTransaction) user_transaction = NULL; g_autoptr (FlatpakTransaction) sys_transaction = NULL; for (guint i = 0; i < updates->len; i++) { BzFlatpakEntry *entry = NULL; FlatpakRef *ref = NULL; gboolean is_user = FALSE; g_autofree char *ref_fmt = NULL; entry = g_ptr_array_index (updates, i); ref = bz_flatpak_entry_get_ref (entry); is_user = bz_flatpak_entry_is_user (BZ_FLATPAK_ENTRY (entry)); ref_fmt = flatpak_ref_format_ref (ref); if ((is_user && self->user == NULL) || (!is_user && self->system == NULL)) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the update of %s to transaction " "because its installation couldn't be found", ref_fmt); } if (is_user && user_transaction == NULL) user_transaction = flatpak_transaction_new_for_installation ( self->user_interactive, cancellable, &local_error); else if (!is_user && sys_transaction == NULL) sys_transaction = flatpak_transaction_new_for_installation ( self->system_interactive, cancellable, &local_error); if ((is_user && user_transaction == NULL) || (!is_user && sys_transaction == NULL)) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to initialize potential transaction for installation: %s", local_error->message); } /* Put updates in one transaction to prevent dependency race-conditions, since the update list is most likely coming from this instance */ result = flatpak_transaction_add_update ( is_user ? user_transaction : sys_transaction, ref_fmt, NULL, NULL, &local_error); if (!result) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the update of %s to transaction: %s", ref_fmt, local_error->message); } g_ptr_array_add (entries, g_object_ref (entry)); g_hash_table_replace (data->ref_to_entry_hash, g_steal_pointer (&ref_fmt), g_object_ref (entry)); } if (user_transaction != NULL) g_ptr_array_add (transactions, g_steal_pointer (&user_transaction)); if (sys_transaction != NULL) g_ptr_array_add (transactions, g_steal_pointer (&sys_transaction)); } if (removals != NULL) { for (guint i = 0; i < removals->len; i++) { BzFlatpakEntry *entry = NULL; FlatpakRef *ref = NULL; gboolean is_user = FALSE; g_autofree char *ref_fmt = NULL; g_autoptr (FlatpakTransaction) transaction = NULL; entry = g_ptr_array_index (removals, i); ref = bz_flatpak_entry_get_ref (entry); is_user = bz_flatpak_entry_is_user (BZ_FLATPAK_ENTRY (entry)); ref_fmt = flatpak_ref_format_ref (ref); if ((is_user && self->user == NULL) || (!is_user && self->system == NULL)) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the removal of %s to transaction " "because its installation couldn't be found", ref_fmt); } transaction = flatpak_transaction_new_for_installation ( is_user ? self->user_interactive : self->system_interactive, cancellable, &local_error); if (transaction == NULL) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to initialize potential transaction for installation: %s", local_error->message); } result = flatpak_transaction_add_uninstall ( transaction, ref_fmt, &local_error); if (!result) { dex_channel_close_send (channel); return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to append the removal of %s to transaction: %s", ref_fmt, local_error->message); } g_ptr_array_add (transactions, g_steal_pointer (&transaction)); g_ptr_array_add (entries, g_object_ref (entry)); g_hash_table_replace (data->ref_to_entry_hash, g_steal_pointer (&ref_fmt), g_object_ref (entry)); } } g_mutex_lock (&self->transactions_mutex); #define REGISTER_CANCELLABLES(entry) \ G_STMT_START \ { \ GPtrArray *cancellables = NULL; \ \ cancellables = g_hash_table_lookup (self->ongoing_cancellables, entry); \ if (cancellables != NULL) \ g_ptr_array_add (cancellables, g_object_ref (cancellable)); \ else \ { \ cancellables = g_ptr_array_new_with_free_func (g_object_unref); \ g_ptr_array_add (cancellables, g_object_ref (cancellable)); \ g_hash_table_replace (self->ongoing_cancellables, g_object_ref (entry), cancellables); \ } \ } \ G_STMT_END if (installations != NULL) { for (guint i = 0; i < installations->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (installations, i); REGISTER_CANCELLABLES (entry); } } if (removals != NULL) { for (guint i = 0; i < removals->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (removals, i); REGISTER_CANCELLABLES (entry); } } if (updates != NULL) { for (guint i = 0; i < updates->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (updates, i); REGISTER_CANCELLABLES (entry); } } #undef REGISTER_CANCELLABLES g_mutex_unlock (&self->transactions_mutex); jobs = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < transactions->len; i++) { FlatpakTransaction *transaction = NULL; g_autoptr (TransactionJobData) job_data = NULL; transaction = g_ptr_array_index (transactions, i); job_data = transaction_job_data_new (); job_data->parent = transaction_data_ref (data); job_data->transaction = g_object_ref (transaction); g_ptr_array_add ( jobs, dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) transaction_job_fiber, transaction_job_data_ref (job_data), transaction_job_data_unref)); } dex_await (dex_future_all_racev ( (DexFuture *const *) jobs->pdata, jobs->len), NULL); g_mutex_lock (&self->transactions_mutex); #define UNREGISTER_CANCELLABLES(entry) \ G_STMT_START \ { \ GPtrArray *cancellables = NULL; \ \ cancellables = g_hash_table_lookup (self->ongoing_cancellables, entry); \ if (cancellables != NULL) \ { \ g_ptr_array_remove (cancellables, cancellable); \ if (cancellables->len == 0) \ g_hash_table_remove (self->ongoing_cancellables, entry); \ } \ } \ G_STMT_END if (installations != NULL) { for (guint i = 0; i < installations->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (installations, i); UNREGISTER_CANCELLABLES (entry); } } if (removals != NULL) { for (guint i = 0; i < removals->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (removals, i); UNREGISTER_CANCELLABLES (entry); } } if (updates != NULL) { for (guint i = 0; i < updates->len; i++) { BzEntry *entry = NULL; entry = g_ptr_array_index (updates, i); UNREGISTER_CANCELLABLES (entry); } } #undef UNREGISTER_CANCELLABLES g_mutex_unlock (&self->transactions_mutex); if (data->send_futures->len > 0) dex_await (dex_future_allv ( (DexFuture *const *) data->send_futures->pdata, data->send_futures->len), NULL); errored = g_hash_table_new_full ( g_direct_hash, g_direct_equal, g_object_unref, (GDestroyNotify) g_error_free); for (guint i = 0; i < jobs->len; i++) { DexFuture *job = NULL; BzEntry *entry = NULL; job = g_ptr_array_index (jobs, i); entry = g_ptr_array_index (entries, i); dex_future_get_value (job, &local_error); if (local_error != NULL) g_hash_table_replace ( errored, g_object_ref (entry), g_steal_pointer (&local_error)); } dex_channel_close_send (channel); return dex_future_new_take_boxed (G_TYPE_HASH_TABLE, g_steal_pointer (&errored)); } static DexFuture * transaction_job_fiber (TransactionJobData *data) { TransactionData *parent = data->parent; FlatpakTransaction *transaction = data->transaction; GCancellable *cancellable = parent->cancellable; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_signal_connect (transaction, "new-operation", G_CALLBACK (transaction_new_operation), parent); g_signal_connect (transaction, "operation-done", G_CALLBACK (transaction_operation_done), parent); g_signal_connect (transaction, "operation-error", G_CALLBACK (transaction_operation_error), parent); g_signal_connect (transaction, "ready", G_CALLBACK (transaction_ready), parent); result = flatpak_transaction_run (transaction, cancellable, &local_error); if (!result) return dex_future_new_reject ( BZ_FLATPAK_ERROR, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, "Failed to run flatpak transaction on installation: %s", local_error->message); return dex_future_new_true (); } static void transaction_new_operation (FlatpakTransaction *transaction, FlatpakTransactionOperation *operation, FlatpakTransactionProgress *progress, TransactionData *data) { g_autoptr (BzFlatpakInstance) self = NULL; FlatpakTransactionOperationType kind = 0; BzFlatpakEntry *entry = NULL; g_autoptr (BzBackendTransactionOpPayload) payload = NULL; g_autoptr (TransactionOperationData) operation_data = NULL; bz_weak_get_or_return (self, data->self); kind = flatpak_transaction_operation_get_operation_type (operation); if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL || kind == FLATPAK_TRANSACTION_OPERATION_UPDATE || kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE || kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) { g_mutex_lock (&self->mute_mutex); if (self->user_interactive == flatpak_transaction_get_installation (transaction)) self->user_mute++; else self->system_mute++; g_mutex_unlock (&self->mute_mutex); } if (data->channel == NULL) return; flatpak_transaction_progress_set_update_frequency (progress, 100); entry = find_entry_from_operation (data, operation); payload = bz_backend_transaction_op_payload_new (); bz_backend_transaction_op_payload_set_entry ( payload, BZ_ENTRY (entry)); bz_backend_transaction_op_payload_set_name ( payload, flatpak_transaction_operation_get_ref (operation)); bz_backend_transaction_op_payload_set_download_size ( payload, flatpak_transaction_operation_get_download_size (operation)); bz_backend_transaction_op_payload_set_installed_size ( payload, flatpak_transaction_operation_get_installed_size (operation)); g_mutex_lock (&data->mutex); g_ptr_array_add ( data->send_futures, dex_channel_send ( data->channel, dex_future_new_for_object (payload))); data->unidentified_op_cnt--; g_mutex_unlock (&data->mutex); g_object_set_data_full ( G_OBJECT (operation), "payload", g_object_ref (payload), g_object_unref); operation_data = transaction_operation_data_new (); operation_data->parent = transaction_data_ref (data); operation_data->entry = bz_object_maybe_ref (entry); operation_data->op = g_object_ref (payload); g_signal_connect_data ( progress, "changed", G_CALLBACK (transaction_progress_changed), transaction_operation_data_ref (operation_data), transaction_operation_data_unref_closure, G_CONNECT_DEFAULT); } static void transaction_operation_done (FlatpakTransaction *transaction, FlatpakTransactionOperation *operation, gchar *commit, gint result, TransactionData *data) { g_autoptr (GMutexLocker) locker = NULL; g_autoptr (BzFlatpakInstance) self = NULL; g_autoptr (BzBackendTransactionOpPayload) payload = NULL; g_autoptr (TransactionOperationDoneData) future_data = NULL; g_autoptr (DexFuture) future = NULL; bz_weak_get_or_return (self, data->self); locker = g_mutex_locker_new (&data->mutex); g_hash_table_replace ( data->op_to_progress_hash, g_object_ref (operation), GINT_TO_POINTER (100)); payload = g_object_steal_data (G_OBJECT (operation), "payload"); if (payload != NULL) g_ptr_array_add ( data->send_futures, dex_channel_send ( data->channel, dex_future_new_for_object (payload))); if (result == FLATPAK_TRANSACTION_RESULT_NO_CHANGE) return; future_data = transaction_operation_done_data_new (); future_data->parent = transaction_data_ref (data); future_data->transaction = g_object_ref (transaction); future_data->operation = g_object_ref (operation); future = dex_scheduler_spawn ( self->scheduler, bz_get_dex_stack_size (), (DexFiberFunc) transaction_operation_done_fiber, transaction_operation_done_data_ref (future_data), transaction_operation_done_data_unref); g_ptr_array_add (data->send_futures, g_steal_pointer (&future)); } static gboolean transaction_operation_error (FlatpakTransaction *object, FlatpakTransactionOperation *operation, GError *error, gint details, TransactionData *data) { g_autoptr (BzBackendTransactionOpPayload) payload = NULL; /* `FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL` is the only possible value of `details` */ g_warning ("Transaction failed to complete: %s", error->message); g_mutex_lock (&data->mutex); g_hash_table_replace ( data->op_to_progress_hash, g_object_ref (operation), GINT_TO_POINTER (100)); payload = g_object_steal_data (G_OBJECT (operation), "payload"); if (payload != NULL) { g_object_set_data_full ( G_OBJECT (payload), "error", g_strdup (error->message), g_free); g_ptr_array_add ( data->send_futures, dex_channel_send ( data->channel, dex_future_new_for_object (payload))); } g_mutex_unlock (&data->mutex); /* Don't recover for now */ return FALSE; } static gboolean transaction_ready (FlatpakTransaction *object, TransactionData *data) { g_autolist (GObject) operations = NULL; operations = flatpak_transaction_get_operations (object); g_mutex_lock (&data->mutex); data->unidentified_op_cnt += g_list_length (operations); g_mutex_unlock (&data->mutex); return TRUE; } static BzFlatpakEntry * find_entry_from_operation (TransactionData *data, FlatpakTransactionOperation *operation) { GPtrArray *related_to_ops = NULL; const char *ref_fmt = NULL; BzFlatpakEntry *entry = NULL; related_to_ops = flatpak_transaction_operation_get_related_to_ops (operation); ref_fmt = flatpak_transaction_operation_get_ref (operation); entry = g_hash_table_lookup (data->ref_to_entry_hash, ref_fmt); if (entry != NULL) return entry; if (related_to_ops != NULL) { for (guint i = 0; i < related_to_ops->len; i++) { FlatpakTransactionOperation *related_op = NULL; related_op = g_ptr_array_index (related_to_ops, i); entry = find_entry_from_operation (data, related_op); if (entry != NULL) break; } } return entry; } static void transaction_progress_changed (FlatpakTransactionProgress *progress, TransactionOperationData *data) { TransactionData *parent = data->parent; g_autoptr (BzBackendTransactionOpProgressPayload) payload = NULL; int int_progress = 0; double double_progress = 0.0; GHashTableIter iter = { 0 }; int progress_sum = 0; guint n_ops = 0; double total_progress = 0.0; g_mutex_lock (&parent->mutex); int_progress = flatpak_transaction_progress_get_progress (progress); double_progress = (double) flatpak_transaction_progress_get_progress (progress) / 100.0; g_hash_table_replace ( parent->op_to_progress_hash, g_object_ref (data->op), GINT_TO_POINTER (int_progress)); g_hash_table_iter_init (&iter, parent->op_to_progress_hash); for (;;) { gpointer key = NULL; gpointer val = NULL; if (!g_hash_table_iter_next (&iter, &key, &val)) break; progress_sum += GPOINTER_TO_INT (val); n_ops++; } total_progress = MIN ((double) progress_sum / (double) ((n_ops + parent->unidentified_op_cnt) * 100), 1.0); payload = bz_backend_transaction_op_progress_payload_new (); bz_backend_transaction_op_progress_payload_set_op ( payload, data->op); bz_backend_transaction_op_progress_payload_set_status ( payload, flatpak_transaction_progress_get_status (progress)); bz_backend_transaction_op_progress_payload_set_is_estimating ( payload, flatpak_transaction_progress_get_is_estimating (progress)); bz_backend_transaction_op_progress_payload_set_progress ( payload, double_progress); bz_backend_transaction_op_progress_payload_set_total_progress ( payload, total_progress); bz_backend_transaction_op_progress_payload_set_bytes_transferred ( payload, flatpak_transaction_progress_get_bytes_transferred (progress)); bz_backend_transaction_op_progress_payload_set_start_time ( payload, flatpak_transaction_progress_get_start_time (progress)); g_ptr_array_add ( data->parent->send_futures, dex_channel_send ( data->parent->channel, dex_future_new_for_object (payload))); g_mutex_unlock (&parent->mutex); } static DexFuture * transaction_operation_done_fiber (TransactionOperationDoneData *data) { g_autoptr (BzFlatpakInstance) self = NULL; FlatpakTransaction *transaction = data->transaction; FlatpakTransactionOperation *operation = data->operation; g_autoptr (GError) local_error = NULL; FlatpakTransactionOperationType op_type = 0; BzBackendNotificationKind notif_kind = 0; const char *origin = NULL; const char *ref = NULL; gboolean is_user = FALSE; g_autofree char *unique_id = NULL; const char *version = NULL; FlatpakInstallation *installation = NULL; g_autoptr (FlatpakInstalledRef) iref = NULL; g_autoptr (FlatpakRef) parsed_ref = NULL; bz_weak_get_or_return_reject (self, data->parent->self); op_type = flatpak_transaction_operation_get_operation_type (operation); switch (op_type) { case FLATPAK_TRANSACTION_OPERATION_INSTALL: case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE: notif_kind = BZ_BACKEND_NOTIFICATION_KIND_INSTALL_DONE; break; case FLATPAK_TRANSACTION_OPERATION_UPDATE: notif_kind = BZ_BACKEND_NOTIFICATION_KIND_UPDATE_DONE; break; case FLATPAK_TRANSACTION_OPERATION_UNINSTALL: notif_kind = BZ_BACKEND_NOTIFICATION_KIND_REMOVE_DONE; break; case FLATPAK_TRANSACTION_OPERATION_LAST_TYPE: default: g_assert_not_reached (); } installation = flatpak_transaction_get_installation (transaction); origin = flatpak_transaction_operation_get_remote (operation); ref = flatpak_transaction_operation_get_ref (operation); is_user = installation == self->user_interactive; unique_id = bz_flatpak_ref_parts_format_unique (origin, ref, is_user); if (op_type == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) { g_autoptr (FlatpakRemote) remote = NULL; { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_INVALIDATE_REMOTES); send_notif_all (self, notif, TRUE); } remote = flatpak_installation_get_remote_by_name ( installation, origin, NULL, NULL); if (remote != NULL) { { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_START); bz_backend_notification_set_remote_name (notif, origin); send_notif_all (self, notif, TRUE); } dex_await ( retrieve_refs_for_noenumerable_remote ( self, NULL, origin, installation, remote), NULL); { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_REMOTE_SYNC_FINISH); bz_backend_notification_set_remote_name (notif, origin); send_notif_all (self, notif, TRUE); } } } if (notif_kind == BZ_BACKEND_NOTIFICATION_KIND_INSTALL_DONE || notif_kind == BZ_BACKEND_NOTIFICATION_KIND_UPDATE_DONE) { parsed_ref = flatpak_ref_parse (ref, &local_error); if (parsed_ref != NULL) { iref = flatpak_installation_get_installed_ref ( installation, flatpak_ref_get_kind (parsed_ref), flatpak_ref_get_name (parsed_ref), flatpak_ref_get_arch (parsed_ref), flatpak_ref_get_branch (parsed_ref), NULL, &local_error); if (iref != NULL) version = flatpak_installed_ref_get_appdata_version (iref); else if (local_error != NULL) { g_warning ("Failed to get installed ref for version: %s", local_error->message); g_clear_error (&local_error); } } else if (local_error != NULL) { g_warning ("Failed to parse ref for version: %s", local_error->message); g_clear_error (&local_error); } } { g_autoptr (BzBackendNotification) notif = NULL; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, notif_kind); bz_backend_notification_set_unique_id (notif, unique_id); if (version != NULL && *version != '\0') bz_backend_notification_set_version (notif, version); send_notif_all (self, notif, TRUE); } return dex_future_new_true (); } static void installation_event (BzFlatpakInstance *self, GFile *file, GFile *other_file, GFileMonitorEvent event_type, GFileMonitor *monitor) { gboolean emit = FALSE; g_autoptr (BzBackendNotification) notif = NULL; g_mutex_lock (&self->mute_mutex); if (monitor == self->user_events) { if (self->user_mute > 0) self->user_mute--; else emit = TRUE; } else { if (self->system_mute > 0) self->system_mute--; else emit = TRUE; } g_mutex_unlock (&self->mute_mutex); if (!emit) return; notif = bz_backend_notification_new (); bz_backend_notification_set_kind (notif, BZ_BACKEND_NOTIFICATION_KIND_EXTERNAL_CHANGE); send_notif_all (self, notif, TRUE); } static void send_notif (BzFlatpakInstance *self, DexChannel *channel, BzBackendNotification *notif, gboolean lock) { g_autoptr (GMutexLocker) locker = NULL; if (lock) locker = g_mutex_locker_new (&self->notif_mutex); if (self->notif_send == NULL || !dex_future_is_pending (self->notif_send)) { dex_clear (&self->notif_send); self->notif_send = dex_channel_send ( channel, dex_future_new_for_object (notif)); } else { g_autoptr (WaitNotifData) data = NULL; data = wait_notif_data_new (); g_weak_ref_init (&data->self, self); data->channel = dex_ref (channel); data->notif = g_object_ref (notif); self->notif_send = dex_future_finally ( g_steal_pointer (&self->notif_send), (DexFutureCallback) wait_notif_finally, wait_notif_data_ref (data), wait_notif_data_unref); } } static void send_notif_all (BzFlatpakInstance *self, BzBackendNotification *notif, gboolean lock) { g_autoptr (GMutexLocker) locker = NULL; if (lock) locker = g_mutex_locker_new (&self->notif_mutex); for (guint i = 0; i < self->notif_channels->len;) { DexChannel *channel = NULL; channel = g_ptr_array_index (self->notif_channels, i); if (dex_channel_can_send (channel)) { send_notif (self, channel, notif, FALSE); i++; } else g_ptr_array_remove_index_fast (self->notif_channels, i); } } static DexFuture * wait_notif_finally (DexFuture *future, WaitNotifData *data) { g_autoptr (BzFlatpakInstance) self = NULL; g_autoptr (GMutexLocker) locker = NULL; bz_weak_get_or_return_reject (self, &data->self); locker = g_mutex_locker_new (&self->notif_mutex); if (future == self->notif_send) dex_clear (&self->notif_send); send_notif (self, data->channel, data->notif, FALSE); return dex_future_new_true (); } static gint cmp_rref (FlatpakRemoteRef *a, FlatpakRemoteRef *b, GHashTable *hash) { FlatpakRefKind a_fkind = 0; FlatpakRefKind b_fkind = 0; AsComponent *a_comp = NULL; AsComponent *b_comp = NULL; AsComponentKind a_kind = AS_COMPONENT_KIND_UNKNOWN; AsComponentKind b_kind = AS_COMPONENT_KIND_UNKNOWN; a_fkind = flatpak_ref_get_kind (FLATPAK_REF (a)); b_fkind = flatpak_ref_get_kind (FLATPAK_REF (b)); a_comp = g_hash_table_lookup (hash, flatpak_ref_get_name (FLATPAK_REF (a))); b_comp = g_hash_table_lookup (hash, flatpak_ref_get_name (FLATPAK_REF (b))); if (a_comp == NULL) return a_fkind == FLATPAK_REF_KIND_RUNTIME ? -1 : 1; if (b_comp == NULL) return b_fkind == FLATPAK_REF_KIND_RUNTIME ? 1 : -1; a_kind = as_component_get_kind (a_comp); b_kind = as_component_get_kind (b_comp); if (a_kind == AS_COMPONENT_KIND_RUNTIME) return -1; if (b_kind == AS_COMPONENT_KIND_RUNTIME) return 1; if (a_kind == AS_COMPONENT_KIND_ADDON) return -1; if (b_kind == AS_COMPONENT_KIND_ADDON) return 1; if (a_kind == AS_COMPONENT_KIND_DESKTOP_APP || a_kind == AS_COMPONENT_KIND_CONSOLE_APP || a_kind == AS_COMPONENT_KIND_WEB_APP) return 1; if (b_kind == AS_COMPONENT_KIND_DESKTOP_APP || b_kind == AS_COMPONENT_KIND_CONSOLE_APP || b_kind == AS_COMPONENT_KIND_WEB_APP) return -1; return 0; } static AsComponent * parse_component_for_node (XbNode *node, GError **error) { g_autofree char *component_xml = NULL; g_autoptr (AsMetadata) metadata = NULL; AsComponent *component = NULL; gboolean result = FALSE; component_xml = xb_node_export (node, XB_NODE_EXPORT_FLAG_NONE, error); if (component_xml == NULL) return NULL; metadata = as_metadata_new (); result = as_metadata_parse_data ( metadata, component_xml, -1, AS_FORMAT_KIND_XML, error); if (!result) return NULL; component = as_metadata_get_component (metadata); return bz_object_maybe_ref (component); } static GBytes * decompress_appstream_gz (GBytes *appstream_gz, GCancellable *cancellable, GError **error) { g_autoptr (GZlibDecompressor) decompressor = NULL; g_autoptr (GInputStream) stream_gz = NULL; g_autoptr (GInputStream) stream_data = NULL; g_autoptr (GBytes) appstream = NULL; decompressor = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); stream_gz = g_memory_input_stream_new_from_bytes (appstream_gz); stream_data = g_converter_input_stream_new (stream_gz, G_CONVERTER (decompressor)); appstream = g_input_stream_read_bytes ( stream_data, 0x100000, /* 1MB */ cancellable, error); if (appstream == NULL) return NULL; return g_steal_pointer (&appstream); } static XbSilo * build_silo (XbBuilderSource *source, GCancellable *cancellable, GError **error) { g_autoptr (XbBuilder) builder = NULL; const gchar *const *locales = NULL; g_autoptr (XbSilo) silo = NULL; builder = xb_builder_new (); locales = g_get_language_names (); for (guint i = 0; locales[i] != NULL; i++) xb_builder_add_locale (builder, locales[i]); xb_builder_import_source (builder, source); silo = xb_builder_compile ( builder, XB_BUILDER_COMPILE_FLAG_NATIVE_LANGS, cancellable, error); return g_steal_pointer (&silo); } static AsComponent * extract_first_component_for_silo (XbSilo *silo, GError **error) { g_autoptr (XbNode) root = NULL; g_autoptr (GPtrArray) children = NULL; root = xb_silo_get_root (silo); children = xb_node_get_children (root); if (children == NULL || children->len == 0) return NULL; return parse_component_for_node ( g_ptr_array_index (children, 0), error); } bazaar-org-bazaar-b6e9a65/src/bz-flatpak-instance.h000066400000000000000000000033101522167256300222230ustar00rootroot00000000000000/* bz-flatpak-instance.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_FLATPAK_ERROR (bz_flatpak_error_quark ()) GQuark bz_flatpak_error_quark (void); typedef enum { BZ_FLATPAK_ERROR_CANNOT_INITIALIZE = 0, BZ_FLATPAK_ERROR_LOCAL_SYNCHRONIZATION_FAILURE, BZ_FLATPAK_ERROR_REMOTE_SYNCHRONIZATION_FAILURE, BZ_FLATPAK_ERROR_TRANSACTION_FAILURE, BZ_FLATPAK_ERROR_IO_MISBEHAVIOR, BZ_FLATPAK_ERROR_APPSTREAM_FAILURE, BZ_FLATPAK_ERROR_GLYCIN_FAILURE, } BzFlatpakError; #define BZ_TYPE_FLATPAK_INSTANCE (bz_flatpak_instance_get_type ()) G_DECLARE_FINAL_TYPE (BzFlatpakInstance, bz_flatpak_instance, BZ, FLATPAK_INSTANCE, GObject) DexFuture * bz_flatpak_instance_new (void); DexFuture * bz_flatpak_instance_has_flathub (BzFlatpakInstance *self, GCancellable *cancellable); DexFuture * bz_flatpak_instance_ensure_has_flathub (BzFlatpakInstance *self, GCancellable *cancellable); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-flatpak-private.h000066400000000000000000000034411522167256300220760ustar00rootroot00000000000000/* bz-flatpak-private.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include #include "bz-flatpak-entry.h" #include "bz-flatpak-instance.h" G_BEGIN_DECLS /* BzFlatpakInstance */ FlatpakInstallation * bz_flatpak_instance_get_system_installation (BzFlatpakInstance *self); FlatpakInstallation * bz_flatpak_instance_get_user_installation (BzFlatpakInstance *self); /* BzFlatpakEntry */ char * bz_flatpak_ref_parts_format_unique (const char *origin, const char *fmt, gboolean user); char * bz_flatpak_ref_format_unique (FlatpakRef *ref, gboolean user); BzFlatpakEntry * bz_flatpak_entry_new_for_ref (FlatpakRef *ref, FlatpakRemote *remote, gboolean user, AsComponent *component, const char *appstream_dir, GError **error); FlatpakRef * bz_flatpak_entry_get_ref (BzFlatpakEntry *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-flatpak-repo.txt000066400000000000000000000013101522167256300217520ustar00rootroot00000000000000prefix=bz name=flatpak_repo parent-prefix=g parent-name=object author=AUTOGEN property=name char G_TYPE_STRING string property=title char G_TYPE_STRING string property=url char G_TYPE_STRING string property=homepage char G_TYPE_STRING string property=comment char G_TYPE_STRING string property=description char G_TYPE_STRING string property=icon char G_TYPE_STRING string property=gpg_key char G_TYPE_STRING string property=default_branch char G_TYPE_STRING string property=filter char G_TYPE_STRING string property=is_user gboolean G_TYPE_BOOLEAN boolean property=disabled gboolean G_TYPE_BOOLEAN boolean property=noenumerate gboolean G_TYPE_BOOLEAN boolean property=gpg_verify gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-full-view.blp000066400000000000000000001024321522167256300212440ustar00rootroot00000000000000using Gtk 4.0; using Gio 2.0; using Adw 1; template $BzFullView: Adw.Bin { child: Adw.ToolbarView { [top] Adw.HeaderBar header_bar { overflow: hidden; [title] Revealer { reveal-child: bind $is_scrolled_down(main_scroll.vadjustment as .value) as ; transition-type: slide_up; transition-duration: 500; overflow: visible; child: Label { label: bind template.entry-group as <$BzEntryGroup>.title; styles ["title"] }; } } content: Adw.ViewStack stack { enable-transitions: true; Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "sad-computer-symbolic"; title: _("No Results"); description: _("Try a different search query"); }; } Adw.ViewStackPage { name: "loading"; title: _("Empty"); child: Adw.Bin {}; } Adw.ViewStackPage { name: "content"; title: _("Content"); child: Adw.BreakpointBin { width-request: 360; height-request: 100; Adw.Breakpoint { condition ("max-width: 700px") setters { context_bar.orientation: vertical; context_bar.spacing: 4; context_bar.homogeneous: false; header_box.spacing: 12; app_name_box.spacing: 0; formfactor_support_tile_wide.visible: false; formfactor_support_tile_narrow.visible: true; screenshots.compact: true; header_bar.show-title: false; link_list.dual-column: false; } } child: Adw.BreakpointBin breakpoint_bin { width-request: 360; height-request: 100; Adw.Breakpoint breakpoint { condition ("max-width: 525px") setters { top_box.margin-start: 10; top_box.margin-end: 10; bottom_box.margin-start: 10; bottom_box.margin-end: 10; bottom_box.margin-top: 5; wide_install_controls.visible: false; narrow_install_controls.visible: true; app_icon.valign: start; app_icon.pixel-size: 96; } } child: Overlay { [overlay] Box shadow_overlay { valign: start; height-request: 3; can-target: false; } child: ScrolledWindow main_scroll { child: Box main_box { orientation: vertical; vexpand: false; margin-bottom: 15; spacing: 20; Adw.Banner { title: _("This is a local preview, some details may differ from the published listing"); visible: bind $metainfo_banner_visible(template.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.remote-repo-name) as ; revealed: true; button-label: _("Preview Store Appearance"); button-clicked => $preview_other_metainfo_cb(template); } Adw.Clamp { maximum-size: 910; tightening-threshold: 576; margin-top: 15; child: Box top_box { orientation: vertical; margin-start: 25; margin-end: 25; spacing: 20; Box header_box { orientation: horizontal; spacing: 20; Image app_icon { valign: center; halign: center; pixel-size: 128; paintable: bind template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; visible: bind $invert_boolean($is_null(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable) as ) as ; styles [ "icon-dropshadow", ] } Image fallback_icon { valign: center; halign: center; pixel-size: 128; icon-name: "application-x-executable"; visible: bind $is_null(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable) as ; styles [ "icon-dropshadow", ] } Box not_icon { orientation: horizontal; baseline-position: center; halign: fill; hexpand: true; spacing: 15; Box app_name_box { orientation: vertical; valign: center; hexpand: true; spacing: 3; Label { styles [ "title-1", "app-title", ] xalign: 0.0; wrap: true; lines: 2; ellipsize: end; wrap-mode: word_char; natural-wrap-mode: word; selectable: true; label: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.title; } Box { styles [ "bz-debug", ] halign: start; orientation: horizontal; spacing: 6; visible: bind template.state as <$BzStateInfo>.debug-mode; Button { icon-name: "edit-copy-symbolic"; clicked => $copy_id_cb(template); } Label { styles [ "bz-monospace", ] selectable: true; label: bind template.entry-group as <$BzEntryGroup>.id; } Button { label: "Inspect UI Entry"; clicked => $debug_id_inspect_cb(template); } } $BzDeveloperBadge { entry: bind template.ui-entry as <$BzResult>.object as <$BzEntry>; } Box { layout-manager: Adw.WrapLayout { child-spacing: 10; line-spacing: 0; }; Button { visible: bind $invert_boolean($is_null(template.ui-entry as <$BzResult>.object as <$BzEntry>.donation-url) as ) as ; styles [ "small-pill", "suggested-action", "support", ] margin-top: 8; valign: start; halign: start; has-tooltip: true; tooltip-text: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.donation-url; clicked => $support_cb(template); child: Adw.ButtonContent { use-underline: true; label: _("_Support"); icon-name: "heart-filled-symbolic"; }; } $BzFavoriteButton { state: bind template.state as <$BzStateInfo>; entry: bind template.ui-entry as <$BzResult>.object as <$BzEntry>; } } } $BzInstallControls wide_install_controls { wide: true; entry-group: bind template.entry-group as <$BzEntryGroup>; state: bind template.state as <$BzStateInfo>; settings: bind template.state as <$BzStateInfo>.settings; update => $update_cb(template); } } } Box context_bar { hexpand: false; homogeneous: true; spacing: 0; orientation: horizontal; halign: fill; styles [ "app-context-bar", ] Box { homogeneous: true; $BzContextTile download_size_tile { label: bind try {$get_size_label( $is_zero(template.entry-group as <$BzEntryGroup>.removable) as , template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.installed, template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.size, ) as , $get_size_label($is_zero(template.entry-group as <$BzEntryGroup>.removable) as ,0,0) as }; has-tooltip: true; tooltip-text: bind $format_size_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>.size) as ; lozenge-style: "grey"; sensitive: bind $invert_boolean($is_zero($get_size_type(template.ui-entry as <$BzResult>.object as <$BzEntry>, $is_zero(template.entry-group as <$BzEntryGroup>.removable) as ) as ) as ) as ; clicked => $size_cb(template); lozenge-child: Label { justify: center; label: bind $format_size($get_size_type(template.ui-entry as <$BzResult>.object as <$BzEntry>, $is_zero(template.entry-group as <$BzEntryGroup>.removable) as ) as ) as ; lines: 3; ellipsize: end; halign: center; wrap: true; xalign: 0.5; use-markup: true; }; } $BzContextTile license_tile { label: bind $get_license_label(template.ui-entry as <$BzResult>.object as <$BzEntry>) as ; lozenge-style: bind $bool_to_string(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, "grey", "warning") as ; clicked => $license_cb(template); has-tooltip: true; tooltip-text: bind $format_license_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>) as ; lozenge-child: Box { spacing: 6; Image { icon-name: bind $get_license_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, 0) as ; } Image { icon-name: bind $get_license_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-floss, 1) as ; } }; } $BzContextTile { clicked => $safety_cb(template); label: bind $get_safety_rating_label(template.ui-entry as <$BzResult>.object as <$BzEntry>) as ; lozenge-style: bind $get_safety_rating_style(template.ui-entry as <$BzResult>.object as <$BzEntry>) as ; lozenge-child: Box { spacing: 4; Image { icon-name: bind $get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,0) as ; visible: bind $invert_boolean($is_empty_string($get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,0) as ) as ) as ; } Image { icon-name: bind $get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,1) as ; visible: bind $invert_boolean($is_empty_string($get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,1) as ) as ) as ; } Image { icon-name: bind $get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,2) as ; visible: bind $invert_boolean($is_empty_string($get_safety_rating_icon(template.ui-entry as <$BzResult>.object as <$BzEntry>,2) as ) as ) as ; } }; } } Box { homogeneous: true; $BzContextTile formfactor_support_tile_wide { label: bind $get_formfactor_label(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; has-tooltip: true; tooltip-text: bind $get_formfactor_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; clicked => $formfactor_cb(template); lozenge-style: "grey"; lozenge-child: Box { Image { visible: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly as ; icon-name: "device-support-adaptive-symbolic"; pixel-size: 56; styles [ "wide-image", ] } Image { visible: bind $invert_boolean(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; icon-name: "device-support-desktop-symbolic"; } }; } $BzContextTile formfactor_support_tile_narrow { label: bind $get_formfactor_label(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; has-tooltip: true; tooltip-text: bind $get_formfactor_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; clicked => $formfactor_cb(template); lozenge-style: bind $bool_to_string(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly, "grey", "error") as ; visible: false; lozenge-child: Box { Image { visible: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly as ; icon-name: "device-support-adaptive-symbolic"; pixel-size: 56; styles [ "wide-image", ] } Image { visible: bind $invert_boolean(template.ui-entry as <$BzResult>.object as <$BzEntry>.is-mobile-friendly) as ; icon-name: "device-support-desktop-symbolic"; } }; } $BzContextTile { clicked => $age_rating_cb(template); has-tooltip: true; tooltip-text: bind $get_age_rating_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>.content-rating) as ; label: bind $get_age_rating_label(template.ui-entry as <$BzResult>.object as <$BzEntry>.content-rating) as ; lozenge-style: bind $get_age_rating_style(template.ui-entry as <$BzResult>.object as <$BzEntry>.content-rating) as ; lozenge-child: Label { label: bind $format_age_rating(template.ui-entry as <$BzResult>.object as <$BzEntry>.content-rating) as ; hexpand: true; }; } $BzContextTile { can-target: bind $invert_boolean($is_null(template.ui-entry) as ) as ; sensitive: bind $invert_boolean($is_null(template.ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ) as ; clicked => $dl_stats_cb(template); label: _("Downloads/Month"); has-tooltip: bind $invert_boolean($is_null(template.ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ) as ; tooltip-text: bind $format_recent_downloads_tooltip(template.ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ; lozenge-style: "grey"; lozenge-child: Label { justify: center; label: bind $format_recent_downloads(template.ui-entry as <$BzResult>.object as <$BzEntry>.recent-downloads) as ; halign: center; use-markup: true; }; } } $BzInstallControls narrow_install_controls { wide: false; visible: false; margin-top: 6; entry-group: bind template.entry-group as <$BzEntryGroup>; state: bind template.state as <$BzStateInfo>; settings: bind template.state as <$BzStateInfo>.settings; update => $update_cb(template); } } Box { visible: bind $invert_boolean($is_null(template.entry-group as <$BzEntryGroup>.eol) as ) as ; orientation: vertical; spacing: 8; styles [ "card", "colored", "warning", ] Label { label: _("Stopped Receiving Core Updates"); margin-top: 8; margin-start: 8; margin-end: 8; wrap: true; wrap-mode: word_char; justify: center; styles [ "title-4", ] } Label { label: _("This app uses a runtime that no longer receives updates or security fixes. It may become unsafe to use."); margin-bottom: 8; margin-start: 8; margin-end: 8; wrap: true; wrap-mode: word_char; justify: center; } } }; } $BzScreenshotsCarousel screenshots { vexpand: true; hexpand: true; light-accent-color: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.light-accent-color; dark-accent-color: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.dark-accent-color; model: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.screenshot-paintables; captions: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.screenshot-captions; } Adw.Clamp { maximum-size: 910; tightening-threshold: 576; child: Box { orientation: vertical; Box bottom_box { orientation: vertical; valign: start; margin-start: 25; margin-end: 25; margin-bottom: 20; margin-top: 10; spacing: 15; Revealer { transition-type: slide_down; reveal-child: bind $logical_and( $logical_and($invert_boolean($is_zero(template.entry-group as <$BzEntryGroup>.user-data-size) as ) as ,$is_zero(template.entry-group as <$BzEntryGroup>.removable) as ) as , $invert_boolean($is_zero(template.entry-group as <$BzEntryGroup>.installable-and-available) as ) as ) as ; visible: bind $invert_boolean($logical_and($is_zero(template.entry-group as <$BzEntryGroup>.removable) as , $is_zero(template.entry-group as <$BzEntryGroup>.installable) as ) as ) as ; child: Box { height-request: 50; margin-bottom: 10; spacing: 12; styles [ "card", "colored", "accent", ] Label { halign: start; valign: center; xalign: 0; hexpand: true; margin-start: 12; margin-top: 12; margin-bottom: 12; label: bind $format_leftover_label(template.ui-entry as <$BzResult>.object as <$BzEntry>.title, template.entry-group as <$BzEntryGroup>.user-data-size) as ; use-markup: true; wrap: true; wrap-mode: word_char; justify: left; } Button { valign: center; margin-end: 8; clicked => $delete_user_data_cb(template); child: Adw.ButtonContent { icon-name: "user-trash-symbolic"; label: _("Trash Data"); }; } }; } Box { spacing: 10; orientation: vertical; Label { styles [ "title-2", ] valign: start; xalign: 0; wrap: true; wrap-mode: word_char; selectable: true; label: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.description; } $BzFadingClamp fading_clamp { max-height: bind $get_description_max_height(description_toggle.active) as ; min-max-height: 170; child: $BzAppstreamDescriptionRender { appstream-description: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.long-description; }; } } ToggleButton description_toggle { styles [ "circular", ] visible: bind fading_clamp.will-change; halign: center; child: Label { label: bind $get_description_toggle_text(description_toggle.active) as ; margin-start: 16; margin-end: 16; }; } $BzReleasesList releases_list { version-history: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.version-history; installed-versions: bind template.entry-group as <$BzEntryGroup>.installed-versions; } Box { orientation: vertical; spacing: bind $choose(addons_more_btn.visible, 15, 3) as ; Box { orientation: vertical; visible: bind $invert_boolean($is_zero(addon_model.n-items) as ) as ; Label { styles ["heading"] halign: start; label: _("Add-ons"); margin-top: 5; margin-start: 3; } ListView { styles [ "navigation-sidebar", "installed-list-view", "full-view-addons" ] overflow: visible; model: NoSelection addon_model { model: bind $get_addon_groups(template.entry-group); }; factory: BuilderListItemFactory { template ListItem { activatable: false; selectable: false; focusable: false; child: $BzAddonTile { group: bind template.item as <$BzEntryGroup>; activated => $addon_tile_activated_cb(); }; } }; } Adw.PreferencesGroup addons_more_btn { visible: bind $should_show_addon_overflow(template.entry-group); Adw.ButtonRow { title: _("More Add-Ons"); end-icon-name: "go-next-symbolic"; activated => $install_addons_cb(template); } } } Box { orientation: vertical; Label { halign: start; label: _("Links"); margin-top: 5; margin-bottom: 8; margin-start: 3; visible: bind $logical_and( $invert_boolean($is_empty(template.ui-entry as <$BzResult>.object as <$BzEntry>.share-urls) as ) as , $invert_boolean($is_zero(addon_model.n-items) as ) as ) as ; styles [ "heading", ] } $BzShareList link_list { urls: bind template.ui-entry as <$BzResult>.object as <$BzEntry>.share-urls; dual-column: true; } } } Box { orientation: vertical; visible: bind $invert_boolean($is_zero(other_apps_model.n-items) as ) as ; Label { styles [ "heading", "h4", ] label: bind $format_other_apps_label(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.developer) as ; xalign: 0; wrap: true; wrap-mode: word_char; margin-top: 5; margin-bottom: 8; margin-start: 3; } $BzDynamicListView { hexpand: true; scroll: false; noscroll-kind: flow-box; child-type: "BzAppTile"; child-prop: "group"; max-children-per-line: bind $get_dev_apps_max_children_per_line(other_apps_model.model) as ; bind-widget => $bind_app_tile_cb(template); unbind-widget => $unbind_app_tile_cb(template); model: SliceListModel other_apps_model { offset: 0; size: 6; model: bind $get_developer_apps_entries(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.developer-apps, template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>) as ; }; } Button { visible: bind $is_longer(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.developer-apps, 6) as ; clicked => $more_apps_button_clicked_cb(template); halign: center; margin-top: 15; margin-bottom: 8; child: Label { label: bind $format_more_other_apps_label(template.entry-group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.developer) as ; justify: center; wrap: true; wrap-mode: word_char; }; styles [ "pill", ] } } } }; } }; }; }; }; }; } }; }; }bazaar-org-bazaar-b6e9a65/src/bz-full-view.c000066400000000000000000000640571522167256300207230ustar00rootroot00000000000000/* bz-full-view.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::FULL-VIEW-WIDGET" #include #include #include "bz-addon-tile.h" #include "bz-addons-dialog.h" #include "bz-age-rating-dialog.h" #include "bz-app-size-dialog.h" #include "bz-app-tile.h" #include "bz-apps-page.h" #include "bz-appstream-description-render.h" #include "bz-context-tile-callbacks.h" #include "bz-context-tile.h" #include "bz-developer-badge.h" #include "bz-dynamic-list-view.h" #include "bz-entry-inspector.h" #include "bz-error.h" #include "bz-fading-clamp.h" #include "bz-favorite-button.h" #include "bz-flatpak-entry.h" #include "bz-full-view.h" #include "bz-hardware-support-dialog.h" #include "bz-install-controls.h" #include "bz-license-dialog.h" #include "bz-metainfo-preview.h" #include "bz-releases-list.h" #include "bz-safety-calculator.h" #include "bz-safety-dialog.h" #include "bz-screenshot-page.h" #include "bz-screenshots-carousel.h" #include "bz-section-view.h" #include "bz-share-list.h" #include "bz-spdx.h" #include "bz-state-info.h" #include "bz-stats-dialog.h" #include "bz-template-callbacks.h" #include "bz-util.h" #include "bz-window.h" struct _BzFullView { AdwBin parent_instance; BzStateInfo *state; BzTransactionManager *transactions; BzEntryGroup *group; DexFuture *ui_future; BzResult *ui_entry; BzResult *runtime; BzResult *group_model; gboolean show_sidebar; /* Template widgets */ GtkScrolledWindow *main_scroll; AdwViewStack *stack; GtkWidget *shadow_overlay; GtkToggleButton *description_toggle; }; G_DEFINE_FINAL_TYPE (BzFullView, bz_full_view, ADW_TYPE_BIN) enum { PROP_0, PROP_STATE, PROP_ENTRY_GROUP, PROP_UI_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_UPDATE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void bz_full_view_dispose (GObject *object) { BzFullView *self = BZ_FULL_VIEW (object); dex_clear (&self->ui_future); g_clear_object (&self->state); g_clear_object (&self->transactions); g_clear_object (&self->group); g_clear_object (&self->ui_entry); g_clear_object (&self->runtime); g_clear_object (&self->group_model); G_OBJECT_CLASS (bz_full_view_parent_class)->dispose (object); } static void bz_full_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzFullView *self = BZ_FULL_VIEW (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, self->state); break; case PROP_ENTRY_GROUP: g_value_set_object (value, bz_full_view_get_entry_group (self)); break; case PROP_UI_ENTRY: g_value_set_object (value, self->ui_entry); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_full_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzFullView *self = BZ_FULL_VIEW (object); switch (prop_id) { case PROP_STATE: g_clear_object (&self->state); self->state = g_value_dup_object (value); break; case PROP_ENTRY_GROUP: bz_full_view_set_entry_group (self, g_value_get_object (value)); break; case PROP_UI_ENTRY: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean is_scrolled_down (gpointer object, double value) { return value > 100.0; } static char * format_as_link (gpointer object, const char *value) { if (value != NULL) return g_strdup_printf ("%s", value, value, value); else return g_strdup (_ ("No URL")); } static gboolean has_link (gpointer object, const char *license) { if (license == NULL || *license == '\0') return FALSE; return bz_spdx_is_valid (license); } static char * pick_license_warning (gpointer object, gboolean value) { return value ? g_strdup (_ ("This app has a FLOSS license, meaning the source code can be audited for safety.")) : g_strdup (_ ("This app has a proprietary license, meaning the source code is developed privately and cannot be audited by an independent third party.")); } static char * format_other_apps_label (gpointer object, const char *developer) { if (!developer || *developer == '\0') return g_strdup (_ ("More Apps")); return g_strdup_printf (_ ("More Apps by %s"), developer); } static char * format_more_other_apps_label (gpointer object, const char *developer) { if (!developer || *developer == '\0') return g_strdup (_ ("Other Apps by this Developer")); return g_strdup_printf (_ ("Other Apps by %s"), developer); } static char * format_leftover_label (gpointer object, const char *name, guint64 size) { g_autofree char *formatted_size = NULL; formatted_size = g_format_size (size); return g_strdup_printf (_ ("%s is not installed, but it still has %s of data present."), name, formatted_size); } static gpointer filter_own_app_id (BzEntry *entry, GtkStringList *app_ids) { const char *own_id; g_autoptr (GtkStringList) filtered = NULL; guint n_items = 0; if (!BZ_IS_ENTRY (entry) || !GTK_IS_STRING_LIST (app_ids)) return NULL; own_id = bz_entry_get_id (entry); if (!own_id) return NULL; filtered = gtk_string_list_new (NULL); n_items = g_list_model_get_n_items (G_LIST_MODEL (app_ids)); for (guint i = 0; i < n_items; i++) { const char *id = NULL; id = gtk_string_list_get_string (app_ids, i); if (g_strcmp0 (id, own_id) != 0) gtk_string_list_append (filtered, id); } if (g_list_model_get_n_items (G_LIST_MODEL (filtered)) > 0) return g_steal_pointer (&filtered); else return NULL; } static GListModel * get_developer_apps_entries (gpointer object, GtkStringList *app_ids, BzEntry *entry) { BzFullView *self = BZ_FULL_VIEW (object); g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids); BzApplicationMapFactory *factory; if (!filtered) return NULL; factory = bz_state_info_get_application_factory (self->state); if (!factory) return NULL; return bz_application_map_factory_generate (factory, G_LIST_MODEL (filtered)); } static int get_dev_apps_max_children_per_line (gpointer object, GListModel *model) { if (!model) return 3; return g_list_model_get_n_items (model) > 2 ? 3 : 2; } static void more_apps_button_clicked_cb (BzFullView *self, GtkButton *button) { g_autoptr (GListModel) model = NULL; guint n_items; g_autofree char *title = NULL; g_autofree char *subtitle = NULL; AdwNavigationPage *apps_page = NULL; GtkWidget *nav_view = NULL; g_autoptr (GListModel) app_ids = NULL; BzEntry *entry = NULL; const char *developer = NULL; g_return_if_fail (BZ_IS_FULL_VIEW (self)); g_return_if_fail (GTK_IS_BUTTON (button)); entry = bz_result_get_object (self->ui_entry); if (entry == NULL) return; g_object_get (entry, "developer-apps", &app_ids, NULL); model = bz_application_map_factory_generate ( bz_state_info_get_application_factory (self->state), app_ids); n_items = g_list_model_get_n_items (model); developer = bz_entry_get_developer (entry); if (developer != NULL && *developer != '\0') title = g_strdup_printf (_ ("Other Apps by %s"), developer); else title = g_strdup (_ ("Other Apps")); subtitle = g_strdup_printf (ngettext ("%d Application", "%d Applications", n_items), n_items); apps_page = bz_apps_page_new (title, model); bz_apps_page_set_subtitle (BZ_APPS_PAGE (apps_page), subtitle); nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (nav_view != NULL) adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } static void app_tile_clicked_cb (BzFullView *self, BzAppTile *tile) { BzEntryGroup *group = bz_app_tile_get_group (tile); bz_full_view_set_entry_group (self, group); } static void bind_app_tile_cb (BzFullView *self, BzAppTile *tile, BzEntryGroup *group, BzDynamicListView *view) { g_signal_connect_swapped (tile, "clicked", G_CALLBACK (app_tile_clicked_cb), self); } static void unbind_app_tile_cb (BzFullView *self, BzAppTile *tile, BzEntryGroup *group, BzDynamicListView *view) { g_signal_handlers_disconnect_by_func (tile, G_CALLBACK (app_tile_clicked_cb), self); } static void open_url_cb (BzFullView *self, AdwActionRow *row) { BzEntry *entry = NULL; const char *url = NULL; entry = BZ_ENTRY (bz_result_get_object (self->ui_entry)); url = bz_entry_get_url (entry); if (url != NULL && *url != '\0') g_app_info_launch_default_for_uri (url, NULL, NULL); else g_warning ("Invalid or empty URL provided for Flathub URL CB"); } static void license_cb (BzFullView *self, GtkButton *button) { AdwDialog *dialog = NULL; BzEntry *ui_entry = NULL; if (self->group == NULL) return; ui_entry = bz_result_get_object (self->ui_entry); if (ui_entry == NULL) return; dialog = bz_license_dialog_new (ui_entry); adw_dialog_present (dialog, GTK_WIDGET (self)); } static void age_rating_cb (BzFullView *self, GtkButton *button) { BzAgeRatingDialog *dialog = NULL; BzEntry *ui_entry = NULL; if (self->group == NULL) return; ui_entry = bz_result_get_object (self->ui_entry); if (ui_entry == NULL) return; dialog = bz_age_rating_dialog_new (ui_entry); adw_dialog_present (ADW_DIALOG (dialog), GTK_WIDGET (self)); } static void dl_stats_cb (BzFullView *self, GtkButton *button) { AdwDialog *dialog = NULL; AdwBreakpointBin *bin = NULL; BzEntry *ui_entry = NULL; if (self->group == NULL) return; ui_entry = bz_result_get_object (self->ui_entry); bin = bz_stats_dialog_new (NULL, NULL, 0); dialog = adw_dialog_new (); adw_dialog_set_content_width (dialog, 1250); adw_dialog_set_content_height (dialog, 750); adw_dialog_set_child (dialog, GTK_WIDGET (bin)); g_object_bind_property (ui_entry, "download-stats", bin, "model", G_BINDING_SYNC_CREATE); g_object_bind_property (ui_entry, "download-stats-per-country", bin, "country-model", G_BINDING_SYNC_CREATE); g_object_bind_property (ui_entry, "total-downloads", bin, "total-downloads", G_BINDING_SYNC_CREATE); adw_dialog_present (dialog, GTK_WIDGET (self)); bz_stats_dialog_animate_open (BZ_STATS_DIALOG (bin)); } static void size_cb (BzFullView *self, GtkButton *button) { AdwDialog *size_dialog = NULL; if (self->group == NULL) return; size_dialog = bz_app_size_dialog_new (self->group); adw_dialog_present (size_dialog, GTK_WIDGET (self)); } static void formfactor_cb (BzFullView *self, GtkButton *button) { AdwDialog *dialog = NULL; BzEntry *ui_entry = NULL; if (self->group == NULL) return; ui_entry = bz_result_get_object (self->ui_entry); dialog = ADW_DIALOG (bz_hardware_support_dialog_new (ui_entry)); adw_dialog_present (dialog, GTK_WIDGET (self)); } static void safety_cb (BzFullView *self, GtkButton *button) { AdwDialog *dialog = NULL; BzEntry *ui_entry = NULL; if (self->group == NULL) return; ui_entry = bz_result_get_object (self->ui_entry); if (ui_entry == NULL) return; dialog = bz_safety_dialog_new (ui_entry); adw_dialog_present (dialog, GTK_WIDGET (self)); } static void update_cb (BzFullView *self, GListModel *entries, BzInstallControls *controls) { g_signal_emit (self, signals[SIGNAL_UPDATE], 0, entries); } static DexFuture * reap_user_data_done (DexFuture *future, GWeakRef *wr) { g_autoptr (BzFullView) self = NULL; g_autoptr (GError) local_error = NULL; dex_future_get_value (future, &local_error); self = g_weak_ref_get (wr); if (self != NULL && local_error != NULL) bz_show_error_for_widget ( GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))), _ ("Failed to Remove User Data"), local_error->message); return dex_future_new_true (); } static void delete_user_data_cb (BzFullView *self, GtkButton *button) { g_autoptr (DexFuture) future = NULL; g_return_if_fail (BZ_IS_FULL_VIEW (self)); if (self->group == NULL) return; future = bz_entry_group_reap_user_data (self->group); if (future != NULL) dex_future_disown (dex_future_finally ( dex_ref (future), (DexFutureCallback) reap_user_data_done, bz_track_weak (self), bz_weak_release)); } static void support_cb (BzFullView *self, GtkButton *button) { BzEntry *entry = NULL; entry = bz_result_get_object (self->ui_entry); if (entry != NULL) { const char *url = NULL; url = bz_entry_get_donation_url (entry); g_app_info_launch_default_for_uri (url, NULL, NULL); } } static GListModel * get_addon_groups (BzFullView *self, BzEntryGroup *group) { BzApplicationMapFactory *factory = NULL; GListModel *ids = NULL; GListModel *groups = NULL; if (group == NULL) return NULL; ids = bz_entry_group_get_addon_group_ids (group); if (ids == NULL) return NULL; factory = bz_state_info_get_application_factory (self->state); groups = bz_application_map_factory_generate (factory, ids); if (groups == NULL) return NULL; return G_LIST_MODEL (gtk_slice_list_model_new (groups, 0, 3)); } static gboolean should_show_addon_overflow (gpointer object, BzEntryGroup *group) { GListModel *ids = NULL; if (group == NULL) return FALSE; ids = bz_entry_group_get_addon_group_ids (group); if (ids == NULL) return FALSE; return g_list_model_get_n_items (ids) > 3; } static void install_addons_cb (BzFullView *self, GtkButton *button) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.addons-group", "s", bz_entry_group_get_id (self->group)); } static void addon_tile_activated_cb (BzAddonTile *tile) { BzFullView *self = NULL; BzEntryGroup *group = NULL; AdwDialog *dialog = NULL; self = BZ_FULL_VIEW (gtk_widget_get_ancestor (GTK_WIDGET (tile), BZ_TYPE_FULL_VIEW)); group = bz_addon_tile_get_group (tile); if (group == NULL) return; dialog = bz_addons_dialog_new_single (group); adw_dialog_present (dialog, GTK_WIDGET (self)); } static int get_description_max_height (gpointer object, gboolean active) { return active ? 10000 : 170; } static char * get_description_toggle_text (gpointer object, gboolean active) { return g_strdup (active ? _ ("Show Less") : _ ("Show More")); } static gboolean metainfo_banner_visible (gpointer object, const char *remote_name) { return g_strcmp0 (remote_name, "local-preview") == 0; } static void preview_other_metainfo_cb (BzFullView *self, AdwBanner *banner) { GtkWidget *window = NULL; window = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))); bz_window_push_page (BZ_WINDOW (window), create_entry_group_preview_page (self->group)); } static void copy_id_cb (BzFullView *self, GtkButton *button) { const char *id = NULL; GdkClipboard *clipboard = NULL; if (self->group == NULL) return; id = bz_entry_group_get_id (self->group); clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_text (clipboard, id); } static void debug_id_inspect_cb (BzFullView *self, GtkButton *button) { g_autofree char *unique_id = NULL; g_autoptr (GtkStringObject) string = NULL; g_autoptr (BzResult) result = NULL; if (self->group == NULL) return; unique_id = bz_entry_group_dup_ui_entry_id (self->group); result = bz_application_map_factory_convert_one ( bz_state_info_get_entry_factory (self->state), gtk_string_object_new (unique_id)); if (result != NULL) { BzEntryInspector *inspector = NULL; inspector = bz_entry_inspector_new (); bz_entry_inspector_set_result (inspector, result); gtk_window_present (GTK_WINDOW (inspector)); } } static void bz_full_view_class_init (BzFullViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_full_view_dispose; object_class->get_property = bz_full_view_get_property; object_class->set_property = bz_full_view_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_ENTRY_GROUP] = g_param_spec_object ( "entry-group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_UI_ENTRY] = g_param_spec_object ( "ui-entry", NULL, NULL, BZ_TYPE_RESULT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_UPDATE] = g_signal_new ( "update", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_LIST_MODEL); g_signal_set_va_marshaller ( signals[SIGNAL_UPDATE], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__OBJECTv); g_type_ensure (BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER); g_type_ensure (BZ_TYPE_DEVELOPER_BADGE); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); g_type_ensure (BZ_TYPE_ENTRY); g_type_ensure (BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_FADING_CLAMP); g_type_ensure (BZ_TYPE_FAVORITE_BUTTON); g_type_ensure (BZ_TYPE_FLATPAK_ENTRY); g_type_ensure (BZ_TYPE_HARDWARE_SUPPORT_DIALOG); g_type_ensure (BZ_TYPE_INSTALL_CONTROLS); g_type_ensure (BZ_TYPE_SECTION_VIEW); g_type_ensure (BZ_TYPE_RELEASES_LIST); g_type_ensure (BZ_TYPE_SCREENSHOTS_CAROUSEL); g_type_ensure (BZ_TYPE_SHARE_LIST); g_type_ensure (BZ_TYPE_CONTEXT_TILE); g_type_ensure (BZ_TYPE_ADDON_TILE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-full-view.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); bz_widget_class_bind_all_context_tile_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzFullView, stack); gtk_widget_class_bind_template_child (widget_class, BzFullView, main_scroll); gtk_widget_class_bind_template_child (widget_class, BzFullView, shadow_overlay); gtk_widget_class_bind_template_child (widget_class, BzFullView, description_toggle); gtk_widget_class_bind_template_callback (widget_class, is_scrolled_down); gtk_widget_class_bind_template_callback (widget_class, age_rating_cb); gtk_widget_class_bind_template_callback (widget_class, format_as_link); gtk_widget_class_bind_template_callback (widget_class, has_link); gtk_widget_class_bind_template_callback (widget_class, format_leftover_label); gtk_widget_class_bind_template_callback (widget_class, format_other_apps_label); gtk_widget_class_bind_template_callback (widget_class, format_more_other_apps_label); gtk_widget_class_bind_template_callback (widget_class, get_developer_apps_entries); gtk_widget_class_bind_template_callback (widget_class, get_dev_apps_max_children_per_line); gtk_widget_class_bind_template_callback (widget_class, more_apps_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, open_url_cb); gtk_widget_class_bind_template_callback (widget_class, license_cb); gtk_widget_class_bind_template_callback (widget_class, dl_stats_cb); gtk_widget_class_bind_template_callback (widget_class, size_cb); gtk_widget_class_bind_template_callback (widget_class, formfactor_cb); gtk_widget_class_bind_template_callback (widget_class, safety_cb); gtk_widget_class_bind_template_callback (widget_class, update_cb); gtk_widget_class_bind_template_callback (widget_class, delete_user_data_cb); gtk_widget_class_bind_template_callback (widget_class, support_cb); gtk_widget_class_bind_template_callback (widget_class, pick_license_warning); gtk_widget_class_bind_template_callback (widget_class, get_addon_groups); gtk_widget_class_bind_template_callback (widget_class, should_show_addon_overflow); gtk_widget_class_bind_template_callback (widget_class, install_addons_cb); gtk_widget_class_bind_template_callback (widget_class, addon_tile_activated_cb); gtk_widget_class_bind_template_callback (widget_class, bind_app_tile_cb); gtk_widget_class_bind_template_callback (widget_class, unbind_app_tile_cb); gtk_widget_class_bind_template_callback (widget_class, get_description_max_height); gtk_widget_class_bind_template_callback (widget_class, get_description_toggle_text); gtk_widget_class_bind_template_callback (widget_class, metainfo_banner_visible); gtk_widget_class_bind_template_callback (widget_class, preview_other_metainfo_cb); gtk_widget_class_bind_template_callback (widget_class, copy_id_cb); gtk_widget_class_bind_template_callback (widget_class, debug_id_inspect_cb); } static void bz_full_view_init (BzFullView *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_full_view_new (void) { return g_object_new (BZ_TYPE_FULL_VIEW, NULL); } static DexFuture * on_ui_entry_resolved (DexFuture *future, GWeakRef *wr) { g_autoptr (BzFullView) self = NULL; BzEntry *ui_entry = NULL; g_autoptr (BzResult) runtime_result = NULL; const GValue *value = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); if (value != NULL && G_VALUE_HOLDS_OBJECT (value)) { ui_entry = g_value_get_object (value); if (BZ_IS_FLATPAK_ENTRY (ui_entry)) self->runtime = bz_flatpak_entry_dup_runtime_result (BZ_FLATPAK_ENTRY (ui_entry)); } adw_view_stack_set_visible_child_name (self->stack, "content"); return dex_future_new_for_boolean (TRUE); } void bz_full_view_set_entry_group (BzFullView *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_FULL_VIEW (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); if (group == self->group) return; dex_clear (&self->ui_future); g_clear_object (&self->group); g_clear_object (&self->ui_entry); g_clear_object (&self->runtime); g_clear_object (&self->group_model); gtk_toggle_button_set_active (self->description_toggle, FALSE); if (group != NULL) { self->group = g_object_ref (group); self->ui_entry = bz_entry_group_dup_ui_entry (group); if (self->ui_entry != NULL && bz_result_get_resolved (self->ui_entry)) { BzEntry *entry = NULL; g_autoptr (GListStore) store = NULL; g_autoptr (DexFuture) future = NULL; g_autoptr (DexFuture) object_future = NULL; GWeakRef *wr = NULL; entry = bz_result_get_object (self->ui_entry); store = g_list_store_new (BZ_TYPE_ENTRY); g_list_store_append (store, entry); future = dex_future_new_for_object (store); self->group_model = bz_result_new (future); object_future = dex_future_new_for_object (entry); wr = bz_track_weak (self); dex_unref (on_ui_entry_resolved (object_future, wr)); bz_weak_release (wr); } else { g_autoptr (DexFuture) future = NULL; future = bz_entry_group_dup_all_into_store (group); self->group_model = bz_result_new (future); if (self->ui_entry != NULL) { g_autoptr (DexFuture) ui_future = NULL; adw_view_stack_set_visible_child_name (self->stack, "loading"); ui_future = bz_result_dup_future (self->ui_entry); ui_future = dex_future_then ( ui_future, (DexFutureCallback) on_ui_entry_resolved, bz_track_weak (self), bz_weak_release); self->ui_future = g_steal_pointer (&ui_future); } } } else adw_view_stack_set_visible_child_name (self->stack, "empty"); gtk_adjustment_set_value (gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->main_scroll)), 0.0); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENTRY_GROUP]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_UI_ENTRY]); } BzEntryGroup * bz_full_view_get_entry_group (BzFullView *self) { g_return_val_if_fail (BZ_IS_FULL_VIEW (self), NULL); return self->group; } bazaar-org-bazaar-b6e9a65/src/bz-full-view.h000066400000000000000000000030761522167256300207220ustar00rootroot00000000000000/* bz-full-view.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry-group.h" #include "bz-transaction-manager.h" G_BEGIN_DECLS #define BZ_TYPE_FULL_VIEW (bz_full_view_get_type ()) G_DECLARE_FINAL_TYPE (BzFullView, bz_full_view, BZ, FULL_VIEW, AdwBin) GtkWidget * bz_full_view_new (void); void bz_full_view_set_transaction_manager (BzFullView *self, BzTransactionManager *group); BzTransactionManager * bz_full_view_get_transaction_manager (BzFullView *self); void bz_full_view_set_entry_group (BzFullView *self, BzEntryGroup *group); BzEntryGroup * bz_full_view_get_entry_group (BzFullView *self); void bz_full_view_set_debounce (BzFullView *self, gboolean debounce); gboolean bz_full_view_get_debounce (BzFullView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-global-net.c000066400000000000000000000264531522167256300210330ustar00rootroot00000000000000/* bz-global-net.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::GLOBAL-NET" #include "config.h" #include #include #include "bz-env.h" #include "bz-global-net.h" #include "bz-util.h" BZ_DEFINE_DATA ( http_request, HttpRequest, { SoupMessage *message; GOutputStream *splice_into; gboolean close_output; }, BZ_RELEASE_DATA (message, g_object_unref); BZ_RELEASE_DATA (splice_into, g_object_unref)); static DexFuture * http_send_fiber (HttpRequestData *data); static void http_send_and_splice_finish (GObject *object, GAsyncResult *result, gpointer user_data); static DexFuture * query_json_source_then (DexFuture *future, GOutputStream *output_stream); static DexFuture * send (SoupMessage *message, GOutputStream *splice_into, gboolean close_output); static DexFuture * query_flathub_v2_json_with_method (const char *request, const char *method, const char *token); GProxyResolver * bz_get_default_proxy_resolver (void) { static GProxyResolver *resolver = NULL; if (g_once_init_enter_pointer (&resolver)) { pxProxyFactory *factory = NULL; g_auto (GStrv) proxies = NULL; g_autoptr (GProxyResolver) resolver_instance = NULL; factory = px_proxy_factory_new (); /* blocking */ proxies = px_proxy_factory_get_proxies (factory, DONATE_LINK); g_clear_pointer (&factory, px_proxy_factory_free); resolver_instance = g_simple_proxy_resolver_new ( proxies != NULL && *proxies != NULL ? proxies[0] : NULL, NULL); g_once_init_leave_pointer (&resolver, g_steal_pointer (&resolver_instance)); } return resolver; } DexFuture * bz_send_with_global_http_session (SoupMessage *message) { dex_return_error_if_fail (SOUP_IS_MESSAGE (message)); return send (message, NULL, FALSE); } DexFuture * bz_send_with_global_http_session_then_splice_into (SoupMessage *message, GOutputStream *output) { dex_return_error_if_fail (SOUP_IS_MESSAGE (message)); dex_return_error_if_fail (G_IS_OUTPUT_STREAM (output)); return send (message, output, TRUE); } DexFuture * bz_https_query_json (const char *uri) { g_autoptr (GError) local_error = NULL; g_autoptr (SoupMessage) message = NULL; SoupMessageHeaders *headers = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (uri != NULL); message = soup_message_new (SOUP_METHOD_GET, uri); headers = soup_message_get_request_headers (message); soup_message_headers_append (headers, "User-Agent", "Bazaar"); output = g_memory_output_stream_new_resizable (); future = send (message, output, TRUE); future = dex_future_then ( future, (DexFutureCallback) query_json_source_then, g_object_ref (output), g_object_unref); return g_steal_pointer (&future); } DexFuture * bz_query_flathub_v2_json (const char *request) { dex_return_error_if_fail (request != NULL); return query_flathub_v2_json_with_method (request, SOUP_METHOD_GET, NULL); } DexFuture * bz_query_flathub_v2_json_take (char *request) { DexFuture *future = NULL; dex_return_error_if_fail (request != NULL); future = bz_query_flathub_v2_json (request); g_free (request); return future; } DexFuture * bz_query_flathub_v2_json_authenticated (const char *request, const char *token) { dex_return_error_if_fail (request != NULL); return query_flathub_v2_json_with_method (request, SOUP_METHOD_GET, token); } DexFuture * bz_query_flathub_v2_json_authenticated_post (const char *request, const char *token) { dex_return_error_if_fail (request != NULL); return query_flathub_v2_json_with_method (request, SOUP_METHOD_POST, token); } DexFuture * bz_query_flathub_v2_json_authenticated_delete (const char *request, const char *token) { dex_return_error_if_fail (request != NULL); return query_flathub_v2_json_with_method (request, SOUP_METHOD_DELETE, token); } static DexFuture * query_flathub_v2_json_with_method (const char *request, const char *method, const char *token) { g_autofree char *uri = NULL; g_autoptr (SoupMessage) message = NULL; SoupMessageHeaders *headers = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (DexFuture) future = NULL; uri = g_strdup_printf ("https://flathub.org/api/v2%s", request); message = soup_message_new (method, uri); headers = soup_message_get_request_headers (message); soup_message_headers_append (headers, "User-Agent", "Bazaar"); if (token != NULL && token[0] != '\0') { g_autofree char *cookie_value = NULL; cookie_value = g_strdup_printf ("session=%s", token); soup_message_headers_append (headers, "Cookie", cookie_value); } output = g_memory_output_stream_new_resizable (); future = send (message, output, TRUE); future = dex_future_then ( future, (DexFutureCallback) query_json_source_then, g_object_ref (output), g_object_unref); return g_steal_pointer (&future); } static DexFuture * http_send_fiber (HttpRequestData *data) { static SoupSession *session = NULL; SoupMessage *message = data->message; GOutputStream *splice_into = data->splice_into; gboolean close_output = data->close_output; GOutputStreamSpliceFlags splice_flags = G_OUTPUT_STREAM_SPLICE_NONE; g_autoptr (DexPromise) promise = NULL; if (g_once_init_enter_pointer (&session)) { g_autoptr (SoupSession) session_instance = NULL; session_instance = soup_session_new (); soup_session_set_proxy_resolver (session_instance, bz_get_default_proxy_resolver ()); g_once_init_leave_pointer (&session, g_steal_pointer (&session_instance)); } splice_flags = G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE; if (close_output) splice_flags |= G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET; promise = dex_promise_new_cancellable (); soup_session_send_and_splice_async ( session, message, splice_into, splice_flags, G_PRIORITY_DEFAULT_IDLE, dex_promise_get_cancellable (promise), http_send_and_splice_finish, dex_ref (promise)); return DEX_FUTURE (g_steal_pointer (&promise)); } static void http_send_and_splice_finish (GObject *object, GAsyncResult *result, gpointer user_data) { DexPromise *promise = user_data; g_autoptr (GError) local_error = NULL; gssize bytes_written = 0; g_assert (SOUP_IS_SESSION (object)); g_assert (G_IS_ASYNC_RESULT (result)); g_assert (DEX_IS_PROMISE (promise)); bytes_written = soup_session_send_and_splice_finish (SOUP_SESSION (object), result, &local_error); if (bytes_written >= 0) { g_debug ("Spliced %zu bytes from http reply into output stream", bytes_written); dex_promise_resolve_uint64 (promise, bytes_written); } else { g_debug ("Could not splice http reply into output stream: %s", local_error->message); dex_promise_reject (promise, g_steal_pointer (&local_error)); } dex_unref (promise); } static DexFuture * query_json_source_then (DexFuture *future, GOutputStream *output_stream) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; gsize bytes_size = 0; gconstpointer bytes_data = NULL; g_autoptr (JsonParser) parser = NULL; gboolean result = FALSE; JsonNode *node = NULL; bytes = g_memory_output_stream_steal_as_bytes ( G_MEMORY_OUTPUT_STREAM (output_stream)); bytes_data = g_bytes_get_data (bytes, &bytes_size); if (bytes_size == 0) return dex_future_new_take_boxed (JSON_TYPE_NODE, json_node_new (JSON_NODE_NULL)); parser = json_parser_new_immutable (); result = json_parser_load_from_data (parser, bytes_data, bytes_size, &local_error); if (!result) return dex_future_new_for_error (g_steal_pointer (&local_error)); node = json_parser_get_root (parser); return dex_future_new_take_boxed (JSON_TYPE_NODE, json_node_ref (node)); } static DexFuture * send (SoupMessage *message, GOutputStream *splice_into, gboolean close_output) { g_autoptr (HttpRequestData) data = NULL; g_autoptr (DexFuture) future = NULL; data = http_request_data_new (); data->message = g_object_ref (message); data->splice_into = bz_object_maybe_ref (splice_into); data->close_output = close_output; future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) http_send_fiber, http_request_data_ref (data), http_request_data_unref); return g_steal_pointer (&future); } static DexFuture * fetch_uri_contents_then (DexFuture *future, GOutputStream *output) { return dex_future_new_take_boxed ( G_TYPE_BYTES, g_memory_output_stream_steal_as_bytes ( G_MEMORY_OUTPUT_STREAM (output))); } DexFuture * bz_fetch_uri_contents (const char *uri) { g_autoptr (SoupMessage) message = NULL; SoupMessageHeaders *headers = NULL; g_autoptr (GOutputStream) output = NULL; g_autoptr (DexFuture) future = NULL; dex_return_error_if_fail (uri != NULL); if (g_str_has_prefix (uri, "http://") || g_str_has_prefix (uri, "https://")) { message = soup_message_new (SOUP_METHOD_GET, uri); if (message == NULL) return dex_future_new_reject ( G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, "could not construct a request for uri %s", uri); headers = soup_message_get_request_headers (message); soup_message_headers_append (headers, "User-Agent", "Bazaar"); output = g_memory_output_stream_new_resizable (); future = bz_send_with_global_http_session_then_splice_into (message, output); future = dex_future_then ( future, (DexFutureCallback) fetch_uri_contents_then, g_object_ref (output), g_object_unref); return g_steal_pointer (&future); } else { g_autoptr (GFile) file = NULL; file = g_file_new_for_uri (uri); return dex_file_load_contents_bytes (file); } } bazaar-org-bazaar-b6e9a65/src/bz-global-net.h000066400000000000000000000033721522167256300210330ustar00rootroot00000000000000/* bz-global-net.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include G_BEGIN_DECLS GProxyResolver * bz_get_default_proxy_resolver (void); DexFuture * bz_send_with_global_http_session (SoupMessage *message); DexFuture * bz_send_with_global_http_session_then_splice_into (SoupMessage *message, GOutputStream *output); DexFuture * bz_https_query_json (const char *uri); DexFuture * bz_query_flathub_v2_json (const char *request); DexFuture * bz_query_flathub_v2_json_authenticated (const char *request, const char *token); DexFuture * bz_query_flathub_v2_json_authenticated_post (const char *request, const char *token); DexFuture * bz_query_flathub_v2_json_authenticated_delete (const char *request, const char *token); DexFuture * bz_query_flathub_v2_json_take (char *request); DexFuture * bz_fetch_uri_contents (const char *uri); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-gnome-shell-search-provider.c000066400000000000000000000355311522167256300243110ustar00rootroot00000000000000/* bz-gnome-shell-search-provider.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-gnome-shell-search-provider.h" #include "bz-entry-group.h" #include "bz-finished-search-query.h" #include "bz-search-result.h" #include "bz-util.h" #include "gs-shell-search-provider-generated.h" struct _BzGnomeShellSearchProvider { GObject parent_instance; BzSearchEngine *engine; GDBusConnection *connection; BzShellSearchProvider2 *skeleton; DexFuture *task; GHashTable *last_results; }; G_DEFINE_FINAL_TYPE (BzGnomeShellSearchProvider, bz_gnome_shell_search_provider, G_TYPE_OBJECT); enum { PROP_0, PROP_ENGINE, PROP_CONNECTION, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; BZ_DEFINE_DATA ( request, Request, { BzGnomeShellSearchProvider *self; GDBusMethodInvocation *invocation; GApplication *application; }, BZ_RELEASE_DATA (invocation, g_object_unref); BZ_RELEASE_DATA (application, g_application_release);) static DexFuture * request_finally (DexFuture *future, RequestData *data); static void start_request (BzGnomeShellSearchProvider *self, GDBusMethodInvocation *invocation, const char *const *terms); static void bz_gnome_shell_search_provider_dispose (GObject *object) { BzGnomeShellSearchProvider *self = BZ_GNOME_SHELL_SEARCH_PROVIDER (object); dex_clear (&self->task); g_clear_object (&self->engine); g_clear_object (&self->connection); g_clear_object (&self->skeleton); g_clear_pointer (&self->last_results, g_hash_table_unref); G_OBJECT_CLASS (bz_gnome_shell_search_provider_parent_class)->dispose (object); } static void bz_gnome_shell_search_provider_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzGnomeShellSearchProvider *self = BZ_GNOME_SHELL_SEARCH_PROVIDER (object); switch (prop_id) { case PROP_ENGINE: g_value_set_object (value, bz_gnome_shell_search_provider_get_engine (self)); break; case PROP_CONNECTION: g_value_set_object (value, bz_gnome_shell_search_provider_get_connection (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_gnome_shell_search_provider_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzGnomeShellSearchProvider *self = BZ_GNOME_SHELL_SEARCH_PROVIDER (object); switch (prop_id) { case PROP_ENGINE: bz_gnome_shell_search_provider_set_engine (self, g_value_get_object (value)); break; case PROP_CONNECTION: bz_gnome_shell_search_provider_set_connection (self, g_value_get_object (value), NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_gnome_shell_search_provider_class_init (BzGnomeShellSearchProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_gnome_shell_search_provider_set_property; object_class->get_property = bz_gnome_shell_search_provider_get_property; object_class->dispose = bz_gnome_shell_search_provider_dispose; props[PROP_ENGINE] = g_param_spec_object ( "engine", NULL, NULL, BZ_TYPE_SEARCH_ENGINE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CONNECTION] = g_param_spec_object ( "connection", NULL, NULL, G_TYPE_DBUS_CONNECTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static gboolean get_initial_result_set (BzShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **terms, BzGnomeShellSearchProvider *self) { start_request (self, invocation, (const char *const *) terms); return TRUE; } static gboolean get_subsearch_result_set (BzShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **previous_results, gchar **terms, BzGnomeShellSearchProvider *self) { start_request (self, invocation, (const char *const *) terms); return TRUE; } static gboolean get_result_metas (BzShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **results, BzGnomeShellSearchProvider *self) { g_autoptr (GVariantBuilder) builder = NULL; builder = g_variant_builder_new (G_VARIANT_TYPE ("aa{sv}")); for (char **result = results; *result != NULL; result++) { BzEntryGroup *group = NULL; g_autoptr (GVariantBuilder) meta_builder = NULL; const char *title = NULL; const char *description = NULL; GIcon *icon = NULL; group = g_hash_table_lookup (self->last_results, *result); if (group == NULL) { g_warning ("failed to find '%s' in gnome-shell search result cache", *result); continue; } meta_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); g_variant_builder_add (meta_builder, "{sv}", "id", g_variant_new_string (*result)); title = bz_entry_group_get_title (group); g_variant_builder_add (meta_builder, "{sv}", "name", g_variant_new_string (title)); description = bz_entry_group_get_description (group); if (description != NULL) g_variant_builder_add (meta_builder, "{sv}", "description", g_variant_new_string (description)); icon = bz_entry_group_get_mini_icon (group); if (icon != NULL) { g_autofree gchar *icon_str = NULL; icon_str = g_icon_to_string (icon); if (icon_str != NULL) g_variant_builder_add (meta_builder, "{sv}", "gicon", g_variant_new_string (icon_str)); else { g_autoptr (GVariant) icon_serialized = NULL; icon_serialized = g_icon_serialize (icon); if (icon_serialized != NULL) g_variant_builder_add (meta_builder, "{sv}", "icon", icon_serialized); } } g_variant_builder_add_value (builder, g_variant_builder_end (meta_builder)); } g_dbus_method_invocation_return_value (invocation, g_variant_new ("(aa{sv})", builder)); return TRUE; } static gboolean activate_result (BzShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar *result, gchar **terms, guint32 timestamp, BzGnomeShellSearchProvider *self) { g_action_group_activate_action ( G_ACTION_GROUP (g_application_get_default ()), "show-app-id", g_variant_new ("s", result)); bz_shell_search_provider2_complete_activate_result (skeleton, invocation); return TRUE; } static gboolean launch_search (BzShellSearchProvider2 *skeleton, GDBusMethodInvocation *invocation, gchar **terms, guint32 timestamp, BzGnomeShellSearchProvider *self) { g_autofree gchar *string = NULL; string = g_strjoinv (" ", terms); g_action_group_activate_action ( G_ACTION_GROUP (g_application_get_default ()), "show-app-id", g_variant_new ("s", string)); bz_shell_search_provider2_complete_launch_search (skeleton, invocation); return TRUE; } static void bz_gnome_shell_search_provider_init (BzGnomeShellSearchProvider *self) { self->skeleton = bz_shell_search_provider2_skeleton_new (); self->last_results = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); g_signal_connect ( self->skeleton, "handle-get-initial-result-set", G_CALLBACK (get_initial_result_set), self); g_signal_connect ( self->skeleton, "handle-get-subsearch-result-set", G_CALLBACK (get_subsearch_result_set), self); g_signal_connect ( self->skeleton, "handle-get-result-metas", G_CALLBACK (get_result_metas), self); g_signal_connect ( self->skeleton, "handle-activate-result", G_CALLBACK (activate_result), self); g_signal_connect ( self->skeleton, "handle-launch-search", G_CALLBACK (launch_search), self); } BzGnomeShellSearchProvider * bz_gnome_shell_search_provider_new (void) { return g_object_new (BZ_TYPE_GNOME_SHELL_SEARCH_PROVIDER, NULL); } BzSearchEngine * bz_gnome_shell_search_provider_get_engine (BzGnomeShellSearchProvider *self) { g_return_val_if_fail (BZ_IS_GNOME_SHELL_SEARCH_PROVIDER (self), NULL); return self->engine; } void bz_gnome_shell_search_provider_set_engine (BzGnomeShellSearchProvider *self, BzSearchEngine *engine) { g_return_if_fail (BZ_IS_GNOME_SHELL_SEARCH_PROVIDER (self)); g_return_if_fail (engine == NULL || BZ_IS_SEARCH_ENGINE (engine)); g_clear_pointer (&self->engine, g_object_unref); if (engine != NULL) self->engine = g_object_ref (engine); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENGINE]); } GDBusConnection * bz_gnome_shell_search_provider_get_connection (BzGnomeShellSearchProvider *self) { g_return_val_if_fail (BZ_IS_GNOME_SHELL_SEARCH_PROVIDER (self), NULL); return self->connection; } gboolean bz_gnome_shell_search_provider_set_connection (BzGnomeShellSearchProvider *self, GDBusConnection *connection, GError **error) { gboolean success = TRUE; g_return_val_if_fail (BZ_IS_GNOME_SHELL_SEARCH_PROVIDER (self), FALSE); g_return_val_if_fail (connection == NULL || G_IS_DBUS_CONNECTION (connection), FALSE); if (self->connection != NULL) g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton)); g_clear_pointer (&self->connection, g_object_unref); if (connection != NULL) { g_autoptr (GError) local_error = NULL; self->connection = g_object_ref (connection); success = g_dbus_interface_skeleton_export ( G_DBUS_INTERFACE_SKELETON (self->skeleton), connection, "/io/github/kolunmi/Bazaar/SearchProvider", &local_error); if (!success) { if (error != NULL) g_propagate_error (error, g_steal_pointer (&local_error)); else g_warning ("Could not register gnome shell search provider: %s", local_error->message); } } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CONNECTION]); return success; } static DexFuture * request_finally (DexFuture *future, RequestData *data) { BzGnomeShellSearchProvider *self = data->self; GDBusMethodInvocation *invocation = data->invocation; g_autoptr (GError) local_error = NULL; const GValue *value = NULL; BzFinishedSearchQuery *finished = NULL; GPtrArray *results = NULL; g_autoptr (GVariantBuilder) builder = NULL; value = dex_future_get_value (future, &local_error); if (value != NULL) { finished = g_value_get_object (value); results = bz_finished_search_query_get_results (finished); builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); for (guint i = 0; i < results->len; i++) { BzSearchResult *result = NULL; BzEntryGroup *group = NULL; const char *id = NULL; result = g_ptr_array_index (results, i); group = bz_search_result_get_group (result); if (bz_entry_group_get_removable (group) > 0) /* Skip already installed groups */ continue; id = bz_entry_group_get_id (group); g_variant_builder_add (builder, "s", id); g_hash_table_replace ( self->last_results, g_strdup (id), g_object_ref (group)); } g_dbus_method_invocation_return_value ( invocation, g_variant_new ("(as)", builder)); } else { g_warning ("search engine reported an error to the search provider, " "returning an empty response to invocation: %s", local_error->message); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL)); } return NULL; } static void start_request (BzGnomeShellSearchProvider *self, GDBusMethodInvocation *invocation, const char *const *terms) { g_autoptr (RequestData) data = NULL; g_autoptr (DexFuture) future = NULL; dex_clear (&self->task); g_hash_table_remove_all (self->last_results); if (g_strv_length ((gchar **) terms) == 1 && g_utf8_strlen (terms[0], -1) == 1) { g_dbus_method_invocation_return_value ( invocation, g_variant_new ("(as)", NULL)); return; } if (self->engine == NULL) { g_warning ("search provider does not have an engine, " "returning empty response to invocation"); g_dbus_method_invocation_return_value ( invocation, g_variant_new ("(as)", NULL)); return; } data = request_data_new (); data->self = self; data->invocation = g_object_ref (invocation); data->application = g_application_get_default (); g_application_hold (data->application); future = bz_search_engine_query (self->engine, terms); future = dex_future_finally ( future, (DexFutureCallback) request_finally, request_data_ref (data), request_data_unref); self->task = g_steal_pointer (&future); } /* End of bz-gnome-shell-search-provider.c */ bazaar-org-bazaar-b6e9a65/src/bz-gnome-shell-search-provider.h000066400000000000000000000034111522167256300243060ustar00rootroot00000000000000/* bz-gnome-shell-search-provider.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-search-engine.h" G_BEGIN_DECLS #define BZ_TYPE_GNOME_SHELL_SEARCH_PROVIDER (bz_gnome_shell_search_provider_get_type ()) G_DECLARE_FINAL_TYPE (BzGnomeShellSearchProvider, bz_gnome_shell_search_provider, BZ, GNOME_SHELL_SEARCH_PROVIDER, GObject) BzGnomeShellSearchProvider * bz_gnome_shell_search_provider_new (void); BzSearchEngine * bz_gnome_shell_search_provider_get_engine (BzGnomeShellSearchProvider *self); void bz_gnome_shell_search_provider_set_engine (BzGnomeShellSearchProvider *self, BzSearchEngine *engine); GDBusConnection * bz_gnome_shell_search_provider_get_connection (BzGnomeShellSearchProvider *self); gboolean bz_gnome_shell_search_provider_set_connection (BzGnomeShellSearchProvider *self, GDBusConnection *connection, GError **error); G_END_DECLS /* End of bz-gnome-shell-search-provider.h */ bazaar-org-bazaar-b6e9a65/src/bz-group-tile-css-watcher.c000066400000000000000000000235321522167256300233120ustar00rootroot00000000000000/* bz-group-tile-css-watcher.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-group-tile-css-watcher.h" #define LUMINANCE_THRESHOLD 130.0 struct _BzGroupTileCssWatcher { GObject parent_instance; GWeakRef widget; BzEntryGroup *group; GtkCssProvider *css; char *light_class; char *dark_class; char *light_text_class; char *dark_text_class; }; G_DEFINE_FINAL_TYPE (BzGroupTileCssWatcher, bz_group_tile_css_watcher, G_TYPE_OBJECT); enum { PROP_0, PROP_WIDGET, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void refresh (BzGroupTileCssWatcher *self); static void clear (BzGroupTileCssWatcher *self); static void bz_group_tile_css_watcher_dispose (GObject *object) { BzGroupTileCssWatcher *self = BZ_GROUP_TILE_CSS_WATCHER (object); clear (self); g_weak_ref_clear (&self->widget); g_clear_pointer (&self->group, g_object_unref); G_OBJECT_CLASS (bz_group_tile_css_watcher_parent_class)->dispose (object); } static void bz_group_tile_css_watcher_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzGroupTileCssWatcher *self = BZ_GROUP_TILE_CSS_WATCHER (object); switch (prop_id) { case PROP_WIDGET: g_value_take_object (value, bz_group_tile_css_watcher_dup_widget (self)); break; case PROP_GROUP: g_value_set_object (value, bz_group_tile_css_watcher_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_group_tile_css_watcher_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzGroupTileCssWatcher *self = BZ_GROUP_TILE_CSS_WATCHER (object); switch (prop_id) { case PROP_WIDGET: bz_group_tile_css_watcher_set_widget (self, g_value_get_object (value)); break; case PROP_GROUP: bz_group_tile_css_watcher_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_group_tile_css_watcher_class_init (BzGroupTileCssWatcherClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_group_tile_css_watcher_set_property; object_class->get_property = bz_group_tile_css_watcher_get_property; object_class->dispose = bz_group_tile_css_watcher_dispose; props[PROP_WIDGET] = g_param_spec_object ( "widget", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void dark_changed (BzGroupTileCssWatcher *self, GParamSpec *pspec, AdwStyleManager *mgr) { g_autoptr (GtkWidget) widget = NULL; gboolean is_dark; if (self->css == NULL) return; widget = g_weak_ref_get (&self->widget); if (widget == NULL) return; is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); gtk_widget_remove_css_class (widget, self->light_class); gtk_widget_remove_css_class (widget, self->dark_class); gtk_widget_remove_css_class (widget, self->light_text_class); gtk_widget_remove_css_class (widget, self->dark_text_class); gtk_widget_add_css_class (widget, is_dark ? self->dark_class : self->light_class); gtk_widget_add_css_class (widget, is_dark ? self->dark_text_class : self->light_text_class); } static void bz_group_tile_css_watcher_init (BzGroupTileCssWatcher *self) { g_weak_ref_init (&self->widget, NULL); g_signal_connect_object ( adw_style_manager_get_default (), "notify::dark", G_CALLBACK (dark_changed), self, G_CONNECT_SWAPPED); } BzGroupTileCssWatcher * bz_group_tile_css_watcher_new (void) { return g_object_new (BZ_TYPE_GROUP_TILE_CSS_WATCHER, NULL); } GtkWidget * bz_group_tile_css_watcher_dup_widget (BzGroupTileCssWatcher *self) { g_return_val_if_fail (BZ_IS_GROUP_TILE_CSS_WATCHER (self), NULL); return g_weak_ref_get (&self->widget); } BzEntryGroup * bz_group_tile_css_watcher_get_group (BzGroupTileCssWatcher *self) { g_return_val_if_fail (BZ_IS_GROUP_TILE_CSS_WATCHER (self), NULL); return self->group; } void bz_group_tile_css_watcher_set_widget (BzGroupTileCssWatcher *self, GtkWidget *widget) { g_return_if_fail (BZ_IS_GROUP_TILE_CSS_WATCHER (self)); g_weak_ref_clear (&self->widget); if (widget != NULL) g_weak_ref_init (&self->widget, widget); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WIDGET]); } void bz_group_tile_css_watcher_set_group (BzGroupTileCssWatcher *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_GROUP_TILE_CSS_WATCHER (self)); g_clear_pointer (&self->group, g_object_unref); if (group != NULL) self->group = g_object_ref (group); refresh (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } static gdouble get_luminance (GdkRGBA *rgba) { return (0.299 * rgba->red * 255.0) + (0.587 * rgba->green * 255.0) + (0.114 * rgba->blue * 255.0); } static gboolean color_is_light (const char *hex_color) { GdkRGBA rgba; gdouble luminance; if (hex_color == NULL || !gdk_rgba_parse (&rgba, hex_color)) return FALSE; luminance = get_luminance (&rgba); return luminance > LUMINANCE_THRESHOLD; } static void refresh (BzGroupTileCssWatcher *self) { g_autoptr (GtkWidget) widget = NULL; const char *id = NULL; const char *light_accent_color = NULL; const char *dark_accent_color = NULL; clear (self); widget = g_weak_ref_get (&self->widget); if (self->group == NULL || widget == NULL) return; id = bz_entry_group_get_id (self->group); light_accent_color = bz_entry_group_get_light_accent_color (self->group); dark_accent_color = bz_entry_group_get_dark_accent_color (self->group); if (light_accent_color != NULL || dark_accent_color != NULL) { g_autoptr (GString) fixed_id = NULL; g_autofree char *css_string = NULL; gboolean is_dark; fixed_id = g_string_new (id); g_string_replace (fixed_id, ".", "--", 0); self->light_class = g_strdup_printf ("%s-light", fixed_id->str); self->dark_class = g_strdup_printf ("%s-dark", fixed_id->str); self->light_text_class = g_strdup ( color_is_light (light_accent_color != NULL ? light_accent_color : dark_accent_color) ? "flathub-gunmetal" : "flathub-lotion"); self->dark_text_class = g_strdup ( color_is_light (dark_accent_color != NULL ? dark_accent_color : light_accent_color) ? "flathub-gunmetal" : "flathub-lotion"); css_string = g_strdup_printf ( ".%s{background-color:%s;}\n" ".%s{background-color:%s;}", self->light_class, light_accent_color != NULL ? light_accent_color : dark_accent_color, self->dark_class, dark_accent_color != NULL ? dark_accent_color : light_accent_color); self->css = gtk_css_provider_new (); gtk_css_provider_load_from_string ( self->css, css_string); gtk_style_context_add_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (self->css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); gtk_widget_add_css_class (widget, is_dark ? self->dark_class : self->light_class); gtk_widget_add_css_class (widget, is_dark ? self->dark_text_class : self->light_text_class); } } static void clear (BzGroupTileCssWatcher *self) { g_autoptr (GtkWidget) widget = NULL; widget = g_weak_ref_get (&self->widget); if (widget != NULL) { if (self->light_class != NULL) gtk_widget_remove_css_class (widget, self->light_class); if (self->dark_class != NULL) gtk_widget_remove_css_class (widget, self->dark_class); if (self->light_text_class != NULL) gtk_widget_remove_css_class (widget, self->light_text_class); if (self->dark_text_class != NULL) gtk_widget_remove_css_class (widget, self->dark_text_class); } g_clear_pointer (&self->light_class, g_free); g_clear_pointer (&self->dark_class, g_free); g_clear_pointer (&self->light_text_class, g_free); g_clear_pointer (&self->dark_text_class, g_free); if (self->css != NULL) gtk_style_context_remove_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (self->css)); g_clear_pointer (&self->css, g_object_unref); } /* End of bz-group-tile-css-watcher.c */ bazaar-org-bazaar-b6e9a65/src/bz-group-tile-css-watcher.h000066400000000000000000000031021522167256300233060ustar00rootroot00000000000000/* bz-group-tile-css-watcher.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-entry-group.h" G_BEGIN_DECLS #define BZ_TYPE_GROUP_TILE_CSS_WATCHER (bz_group_tile_css_watcher_get_type ()) G_DECLARE_FINAL_TYPE (BzGroupTileCssWatcher, bz_group_tile_css_watcher, BZ, GROUP_TILE_CSS_WATCHER, GObject) BzGroupTileCssWatcher * bz_group_tile_css_watcher_new (void); GtkWidget * bz_group_tile_css_watcher_dup_widget (BzGroupTileCssWatcher *self); BzEntryGroup * bz_group_tile_css_watcher_get_group (BzGroupTileCssWatcher *self); void bz_group_tile_css_watcher_set_widget (BzGroupTileCssWatcher *self, GtkWidget *widget); void bz_group_tile_css_watcher_set_group (BzGroupTileCssWatcher *self, BzEntryGroup *group); G_END_DECLS /* End of bz-group-tile-css-watcher.h */ bazaar-org-bazaar-b6e9a65/src/bz-hardware-support-dialog.blp000066400000000000000000000016501522167256300240760ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzHardwareSupportDialog: Adw.Dialog { content-height: 530; content-width: 640; title: _("Hardware Support"); Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: ScrolledWindow { hscrollbar-policy: never; Adw.Clamp { maximum-size: 600; tightening-threshold: 400; Box { orientation: vertical; spacing: 24; margin-start: 24; margin-end: 24; margin-top: 24; margin-bottom: 24; $BzLozenge lozenge { title: _("Hardware Support"); icon-names: [ "device-supported-symbolic", ]; importance: unimportant; } ListBox list { selection-mode: none; styles [ "boxed-list", ] } } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-hardware-support-dialog.c000066400000000000000000000235151522167256300235470ustar00rootroot00000000000000/* bz-hardware-support-dialog.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "bz-hardware-support-dialog.h" #include "bz-context-row.h" #include "bz-lozenge.h" #include struct _BzHardwareSupportDialog { AdwDialog parent_instance; BzEntry *entry; gulong entry_notify_handler; /* Template widgets */ BzLozenge *lozenge; GtkListBox *list; }; G_DEFINE_FINAL_TYPE (BzHardwareSupportDialog, bz_hardware_support_dialog, ADW_TYPE_DIALOG) enum { PROP_0, PROP_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; typedef struct { const gchar *icon_name; const gchar *title; BzControlType control_flag; const gchar *required_subtitle; const gchar *recommended_subtitle; const gchar *supported_subtitle; const gchar *unsupported_subtitle; } ControlInfo; static const ControlInfo control_infos[] = { { "input-keyboard-symbolic", N_ ("Keyboard support"), BZ_CONTROL_KEYBOARD, N_ ("Requires keyboards"), N_ ("Recommends keyboards"), N_ ("Supports keyboards"), N_ ("Unknown support for keyboards") }, { "input-mouse-symbolic", N_ ("Mouse support"), BZ_CONTROL_POINTING, N_ ("Requires mice or pointing devices"), N_ ("Recommends mice or pointing devices"), N_ ("Supports mice or pointing devices"), N_ ("Unknown support for mice or pointing devices") }, { "device-support-touch-symbolic", N_ ("Touchscreen support"), BZ_CONTROL_TOUCH, N_ ("Requires touchscreens"), N_ ("Recommends touchscreens"), N_ ("Supports touchscreens"), N_ ("Unknown support for touchscreens") } }; static BzImportance get_control_importance (guint required_controls, guint recommended_controls, guint supported_controls, BzControlType control_flag) { if (required_controls & control_flag) return BZ_IMPORTANCE_IMPORTANT; else if (recommended_controls & control_flag) return BZ_IMPORTANCE_INFORMATION; else if (supported_controls & control_flag) return BZ_IMPORTANCE_UNIMPORTANT; else return BZ_IMPORTANCE_NEUTRAL; } static const gchar * get_subtitle_for_importance (const ControlInfo *info, BzImportance importance) { switch (importance) { case BZ_IMPORTANCE_IMPORTANT: return _ (info->required_subtitle); case BZ_IMPORTANCE_INFORMATION: return _ (info->recommended_subtitle); case BZ_IMPORTANCE_UNIMPORTANT: return _ (info->supported_subtitle); case BZ_IMPORTANCE_NEUTRAL: return _ (info->unsupported_subtitle); case BZ_IMPORTANCE_WARNING: default: g_assert_not_reached (); } } static void add_control_row (BzHardwareSupportDialog *self, const ControlInfo *info, BzImportance importance) { AdwActionRow *row; const gchar *subtitle; subtitle = get_subtitle_for_importance (info, importance); row = bz_context_row_new (info->icon_name, importance, _ (info->title), subtitle); gtk_list_box_append (self->list, GTK_WIDGET (row)); } static void update_list (BzHardwareSupportDialog *self) { GtkWidget *child; AdwActionRow *row; guint required_controls; guint recommended_controls; guint supported_controls; gboolean is_mobile_friendly; while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->list))) != NULL) gtk_list_box_remove (self->list, child); if (self->entry == NULL) return; required_controls = bz_entry_get_required_controls (self->entry); recommended_controls = bz_entry_get_recommended_controls (self->entry); supported_controls = bz_entry_get_supported_controls (self->entry); is_mobile_friendly = bz_entry_get_is_mobile_friendly (self->entry); row = bz_context_row_new ("phone-symbolic", is_mobile_friendly ? BZ_IMPORTANCE_UNIMPORTANT : BZ_IMPORTANCE_NEUTRAL, _ ("Mobile support"), is_mobile_friendly ? _ ("Works on mobile devices") : _ ("May not work well on mobile devices")); gtk_list_box_append (self->list, GTK_WIDGET (row)); row = bz_context_row_new ("device-support-desktop-symbolic", BZ_IMPORTANCE_UNIMPORTANT, _ ("Desktop support"), _ ("Works well on large screens")); gtk_list_box_append (self->list, GTK_WIDGET (row)); for (gsize i = 0; i < G_N_ELEMENTS (control_infos); i++) { BzImportance importance; importance = get_control_importance (required_controls, recommended_controls, supported_controls, control_infos[i].control_flag); add_control_row (self, &control_infos[i], importance); } } static void update_header (BzHardwareSupportDialog *self) { const gchar *icon_names[2]; g_autofree gchar *title_text = NULL; BzImportance importance; guint required_controls; gboolean is_mobile_friendly; if (self->entry == NULL) return; required_controls = bz_entry_get_required_controls (self->entry); is_mobile_friendly = bz_entry_get_is_mobile_friendly (self->entry); if (required_controls != BZ_CONTROL_NONE || !is_mobile_friendly) { icon_names[0] = "dialog-warning-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s works best on specific hardware"), bz_entry_get_title (self->entry)); importance = BZ_IMPORTANCE_NEUTRAL; } else { icon_names[0] = "device-supported-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s works on most devices"), bz_entry_get_title (self->entry)); importance = BZ_IMPORTANCE_UNIMPORTANT; } bz_lozenge_set_icon_names (self->lozenge, icon_names); bz_lozenge_set_title (self->lozenge, title_text); bz_lozenge_set_importance (self->lozenge, importance); } static void update_ui (BzHardwareSupportDialog *self) { update_list (self); update_header (self); } static void entry_notify_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { BzHardwareSupportDialog *self = BZ_HARDWARE_SUPPORT_DIALOG (user_data); update_ui (self); } static void bz_hardware_support_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzHardwareSupportDialog *self = BZ_HARDWARE_SUPPORT_DIALOG (object); switch (prop_id) { case PROP_ENTRY: self->entry = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_hardware_support_dialog_constructed (GObject *object) { BzHardwareSupportDialog *self = BZ_HARDWARE_SUPPORT_DIALOG (object); G_OBJECT_CLASS (bz_hardware_support_dialog_parent_class)->constructed (object); if (self->entry != NULL) { self->entry_notify_handler = g_signal_connect (self->entry, "notify", G_CALLBACK (entry_notify_cb), self); update_ui (self); } } static void bz_hardware_support_dialog_dispose (GObject *object) { BzHardwareSupportDialog *self = BZ_HARDWARE_SUPPORT_DIALOG (object); g_clear_signal_handler (&self->entry_notify_handler, self->entry); g_clear_object (&self->entry); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_HARDWARE_SUPPORT_DIALOG); G_OBJECT_CLASS (bz_hardware_support_dialog_parent_class)->dispose (object); } static void bz_hardware_support_dialog_class_init (BzHardwareSupportDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_hardware_support_dialog_set_property; object_class->constructed = bz_hardware_support_dialog_constructed; object_class->dispose = bz_hardware_support_dialog_dispose; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LOZENGE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-hardware-support-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzHardwareSupportDialog, lozenge); gtk_widget_class_bind_template_child (widget_class, BzHardwareSupportDialog, list); } static void bz_hardware_support_dialog_init (BzHardwareSupportDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzHardwareSupportDialog * bz_hardware_support_dialog_new (BzEntry *entry) { return g_object_new (BZ_TYPE_HARDWARE_SUPPORT_DIALOG, "entry", entry, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-hardware-support-dialog.h000066400000000000000000000021771522167256300235550ustar00rootroot00000000000000/* bz-hardware-support-dialog.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include #include G_BEGIN_DECLS #define BZ_TYPE_HARDWARE_SUPPORT_DIALOG (bz_hardware_support_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzHardwareSupportDialog, bz_hardware_support_dialog, BZ, HARDWARE_SUPPORT_DIALOG, AdwDialog) BzHardwareSupportDialog *bz_hardware_support_dialog_new (BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-hash-table-object.txt000066400000000000000000000002571522167256300226520ustar00rootroot00000000000000prefix=bz name=hash_table_object parent-prefix=g parent-name=object author=AUTOGEN property=hash_table GHashTable G_TYPE_HASH_TABLE boxed g_hash_table_unref g_hash_table_ref bazaar-org-bazaar-b6e9a65/src/bz-hook-dialog-option.txt000066400000000000000000000003431522167256300230750ustar00rootroot00000000000000prefix=bz name=hook_dialog_option parent-prefix=g parent-name=object author=AUTOGEN include= property=id char G_TYPE_STRING string property=string char G_TYPE_STRING string property=style char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-hook-dialog.txt000066400000000000000000000007041522167256300215700ustar00rootroot00000000000000prefix=bz name=hook_dialog parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-hook-dialog-option.h" ensure=BZ_TYPE_HOOK_DIALOG_OPTION property=id char G_TYPE_STRING string property=title char G_TYPE_STRING string property=body char G_TYPE_STRING string property=body_use_markup gboolean G_TYPE_BOOLEAN boolean property=options GListModel G_TYPE_LIST_MODEL object property=default_response_id char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-hook.txt000066400000000000000000000011201522167256300203240ustar00rootroot00000000000000prefix=bz name=hook parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-hook-dialog.h" ensure=BZ_TYPE_HOOK_DIALOG ensure=BZ_TYPE_HOOK_DIALOG_OPTION enum=bz hook_signal view_app before_transaction after_transaction enum=bz hook_return_status continue stop confirm deny enum=bz hook_transaction_type install update removal property=id char G_TYPE_STRING string property=when BzHookSignal BZ_TYPE_HOOK_SIGNAL enum property=dialogs GListModel G_TYPE_LIST_MODEL object property=shell char G_TYPE_STRING string property=check_appid_regex char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-hooks.c000066400000000000000000000521551522167256300201300ustar00rootroot00000000000000/* bz-hooks.c * * Copyright 2026 Eva M * * 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 */ #define G_LOG_DOMAIN "BAZAAR::HOOKS" #include #include "bz-env.h" #include "bz-error.h" #include "bz-hooks.h" #include "bz-util.h" BZ_DEFINE_DATA ( execute_hook, ExecuteHook, { BzHook *hook; BzHookTransactionType ts_type; char *ts_appid; BzEntryGroup *group; }, BZ_RELEASE_DATA (hook, g_object_unref); BZ_RELEASE_DATA (ts_appid, g_free); BZ_RELEASE_DATA (group, g_object_unref)) BZ_DEFINE_DATA ( run_emission, RunEmission, { GListModel *hooks; BzHookSignal signal; BzHookTransactionType ts_type; char *ts_appid; BzEntryGroup *group; }, BZ_RELEASE_DATA (hooks, g_object_unref); BZ_RELEASE_DATA (ts_appid, g_free); BZ_RELEASE_DATA (group, g_object_unref)) BZ_DEFINE_DATA ( dialog, Dialog, { char *id; AdwDialog *dialog; }, BZ_RELEASE_DATA (id, g_free); BZ_RELEASE_DATA (dialog, g_object_unref)); static DexFuture * execute_hook_fiber (ExecuteHookData *data); static DexFuture * run_emission_fiber (RunEmissionData *data); DexFuture * bz_execute_hook (BzHook *hook, BzHookTransactionType ts_type, const char *ts_appid, BzEntryGroup *group) { g_autoptr (ExecuteHookData) data = NULL; dex_return_error_if_fail (BZ_IS_HOOK (hook)); data = execute_hook_data_new (); data->hook = g_object_ref (hook); data->ts_type = ts_type; data->ts_appid = bz_maybe_strdup (ts_appid); data->group = bz_object_maybe_ref (group); return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) execute_hook_fiber, execute_hook_data_ref (data), execute_hook_data_unref); } DexFuture * bz_run_hook_emission (GListModel *hooks, BzHookSignal signal, BzHookTransactionType ts_type, const char *ts_appid, BzEntryGroup *group) { g_autoptr (RunEmissionData) data = NULL; dex_return_error_if_fail (G_IS_LIST_MODEL (hooks)); data = run_emission_data_new (); data->hooks = g_object_ref (hooks); data->signal = signal; data->ts_type = ts_type; data->ts_appid = bz_maybe_strdup (ts_appid); data->group = bz_object_maybe_ref (group); return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) run_emission_fiber, execute_hook_data_ref (data), execute_hook_data_unref); } static DexFuture * execute_hook_fiber (ExecuteHookData *data) { BzHook *hook = data->hook; BzHookTransactionType ts_type = data->ts_type; char *ts_appid = data->ts_appid; BzEntryGroup *group = data->group; BzHookSignal signal = 0; g_autoptr (GEnumClass) signal_enum_class = NULL; g_autoptr (GEnumClass) ts_type_enum_class = NULL; GEnumValue *signal_enum = NULL; GEnumValue *ts_type_enum = NULL; g_autoptr (GDateTime) date = NULL; g_autofree char *timestamp_sec = NULL; g_autofree char *timestamp_usec = NULL; const char *id = NULL; const char *shell = NULL; g_autoptr (GPtrArray) dialogs = NULL; g_autoptr (DialogData) current_dialog = NULL; gboolean hook_aborted = FALSE; gboolean finish = FALSE; signal = bz_hook_get_when (hook); switch (signal) { case BZ_HOOK_SIGNAL_BEFORE_TRANSACTION: case BZ_HOOK_SIGNAL_AFTER_TRANSACTION: dex_return_error_if_fail (ts_appid != NULL); break; case BZ_HOOK_SIGNAL_VIEW_APP: default: dex_return_error_if_fail (BZ_IS_ENTRY_GROUP (group)); break; } signal_enum_class = g_type_class_ref (BZ_TYPE_HOOK_SIGNAL); ts_type_enum_class = g_type_class_ref (BZ_TYPE_HOOK_TRANSACTION_TYPE); signal_enum = g_enum_get_value (signal_enum_class, signal); ts_type_enum = g_enum_get_value (ts_type_enum_class, ts_type); date = g_date_time_new_now_utc (); timestamp_sec = g_strdup_printf ("%zu", g_date_time_to_unix (date)); timestamp_usec = g_strdup_printf ("%zu", g_date_time_to_unix_usec (date)); id = bz_hook_get_id (hook); shell = bz_hook_get_shell (hook); if (shell == NULL) { g_warning ("Main Config: hook definition must have shell code, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } dialogs = g_ptr_array_new_with_free_func (dialog_data_unref); if (bz_hook_get_dialogs (hook) != NULL) { GListModel *config_dialogs = NULL; guint n_dialogs = 0; config_dialogs = bz_hook_get_dialogs (hook); n_dialogs = g_list_model_get_n_items (config_dialogs); for (guint i = 0; i < n_dialogs; i++) { g_autoptr (BzHookDialog) config_dialog = NULL; const char *dialog_id = NULL; const char *dialog_title = NULL; const char *dialog_body = NULL; gboolean dialog_body_use_markup = FALSE; const char *dialog_default_response = NULL; g_autoptr (AdwDialog) dialog = NULL; guint n_opts = 0; g_autoptr (DialogData) dialog_data = NULL; config_dialog = g_list_model_get_item (config_dialogs, i); dialog_id = bz_hook_dialog_get_id (config_dialog); dialog_title = bz_hook_dialog_get_title (config_dialog); dialog_body = bz_hook_dialog_get_body (config_dialog); dialog_body_use_markup = bz_hook_dialog_get_body_use_markup (config_dialog); dialog_default_response = bz_hook_dialog_get_default_response_id (config_dialog); if (dialog_title == NULL || dialog_body == NULL) { g_warning ("Main Config: dialog definition must have a title and body, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } if (dialog_default_response == NULL) { g_warning ("Main Config: dialog definition must have a default response, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } dialog = g_object_ref_sink (adw_alert_dialog_new (dialog_title, dialog_body)); if (bz_hook_dialog_get_options (config_dialog) != NULL) { GListModel *config_opts = NULL; guint n_options = 0; config_opts = bz_hook_dialog_get_options (config_dialog); n_options = g_list_model_get_n_items (config_opts); for (guint j = 0; j < n_options; j++) { g_autoptr (BzHookDialogOption) config_opt = NULL; const char *opt_id = NULL; const char *opt_string = NULL; const char *opt_style = NULL; config_opt = g_list_model_get_item (config_opts, j); opt_id = bz_hook_dialog_option_get_id (config_opt); if (opt_id == NULL) { g_warning ("Main Config: dialog option definition must have an id, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } opt_string = bz_hook_dialog_option_get_string (config_opt); if (opt_string == NULL) { g_warning ("Main Config: dialog option definition must have a string, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } opt_style = bz_hook_dialog_option_get_style (config_opt); adw_alert_dialog_add_response (ADW_ALERT_DIALOG (dialog), opt_id, opt_string); if (opt_style != NULL) { AdwResponseAppearance appearance = ADW_RESPONSE_DEFAULT; if (g_strcmp0 (opt_style, "suggested") == 0) appearance = ADW_RESPONSE_SUGGESTED; else if (g_strcmp0 (opt_style, "destructive") == 0) appearance = ADW_RESPONSE_DESTRUCTIVE; else g_warning ("Main Config: dialog option definition appearance can be " "\"suggested\" or \"destructive\". \"%s\" is invalid.", opt_style); adw_alert_dialog_set_response_appearance ( ADW_ALERT_DIALOG (dialog), opt_id, appearance); } n_opts++; } } if (n_opts == 0) { g_warning ("Main Config: dialog definition must have options, skipping this hook"); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } adw_alert_dialog_set_body_use_markup ( ADW_ALERT_DIALOG (dialog), dialog_body_use_markup); adw_alert_dialog_set_default_response ( ADW_ALERT_DIALOG (dialog), dialog_default_response); dialog_data = dialog_data_new (); dialog_data->id = dialog_id != NULL ? g_strdup (dialog_id) : NULL; dialog_data->dialog = g_steal_pointer (&dialog); g_ptr_array_add (dialogs, g_steal_pointer (&dialog_data)); } } for (guint stage = 0;; stage++) { g_autoptr (GError) local_error = NULL; g_autoptr (GSubprocessLauncher) launcher = NULL; g_autofree char *stage_str = NULL; const char *hook_stage = NULL; g_autoptr (GSubprocess) subprocess = NULL; gboolean result = FALSE; GInputStream *stdout_pipe = NULL; g_autoptr (GBytes) stdout_bytes = NULL; gsize stdout_size = 0; gconstpointer stdout_data = NULL; g_autofree char *stdout_str = NULL; char *stdout_newline = NULL; launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE); g_subprocess_launcher_set_cwd (launcher, g_get_home_dir ()); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_INITIATED_UNIX_STAMP", timestamp_sec, TRUE); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_INITIATED_UNIX_STAMP_USEC", timestamp_usec, TRUE); stage_str = g_strdup_printf ("%d", stage); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_STAGE_IDX", stage_str, TRUE); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_ID", id, TRUE); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_TYPE", signal_enum->value_nick, TRUE); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_WAS_ABORTED", hook_aborted ? "true" : "false", TRUE); switch (signal) { case BZ_HOOK_SIGNAL_BEFORE_TRANSACTION: case BZ_HOOK_SIGNAL_AFTER_TRANSACTION: g_subprocess_launcher_setenv (launcher, "BAZAAR_TS_APPID", ts_appid, TRUE); g_subprocess_launcher_setenv (launcher, "BAZAAR_TS_TYPE", ts_type_enum->value_nick, TRUE); break; case BZ_HOOK_SIGNAL_VIEW_APP: default: g_subprocess_launcher_setenv (launcher, "BAZAAR_APPID", bz_entry_group_get_id (group), TRUE); break; } if (finish) hook_stage = "teardown"; else if (hook_aborted) hook_stage = "catch"; else if (stage == 0) hook_stage = "setup"; else if (current_dialog != NULL) { GApplication *application = NULL; GtkWindow *window = NULL; g_autofree char *response = NULL; hook_stage = "teardown-dialog"; application = g_application_get_default (); window = gtk_application_get_active_window (GTK_APPLICATION (application)); if (window != NULL) { adw_dialog_present (current_dialog->dialog, GTK_WIDGET (window)); response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (current_dialog->dialog)), &local_error); if (response == NULL) g_warning ("Failed to resolve response from dialog " "\"%s\", assuming default response \"%s\": %s", current_dialog->id, adw_alert_dialog_get_default_response ( ADW_ALERT_DIALOG (current_dialog->dialog)), local_error->message); g_clear_pointer (&local_error, g_error_free); } else g_warning ("A window was not available to present dialog " "\"%s\" on, assuming default response \"%s\"", current_dialog->id, adw_alert_dialog_get_default_response ( ADW_ALERT_DIALOG (current_dialog->dialog))); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_DIALOG_ID", current_dialog->id, TRUE); g_subprocess_launcher_setenv ( launcher, "BAZAAR_HOOK_DIALOG_RESPONSE_ID", response != NULL ? response : adw_alert_dialog_get_default_response ( ADW_ALERT_DIALOG (current_dialog->dialog)), TRUE); g_clear_pointer (¤t_dialog, dialog_data_unref); } else if (dialogs->len > 0) { hook_stage = "setup-dialog"; current_dialog = g_ptr_array_steal_index (dialogs, 0); g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_DIALOG_ID", current_dialog->id, TRUE); } else hook_stage = "action"; g_subprocess_launcher_setenv (launcher, "BAZAAR_HOOK_STAGE", hook_stage, TRUE); subprocess = g_subprocess_launcher_spawn ( launcher, &local_error, "/bin/sh", "-c", shell, NULL); if (subprocess == NULL) { g_warning ("Hook failed to spawn, abandoning it now: %s", local_error->message); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } result = dex_await ( dex_subprocess_wait_check (subprocess), &local_error); if (!result) { g_warning ("Hook failed to exit cleanly, abandoning it now: %s", local_error->message); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } stdout_pipe = g_subprocess_get_stdout_pipe (subprocess); stdout_bytes = g_input_stream_read_bytes (stdout_pipe, 1024, NULL, &local_error); if (!stdout_bytes) { g_warning ("Failed to read stdout pipe of hook, abandoning it now: %s", local_error->message); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } stdout_data = g_bytes_get_data (stdout_bytes, &stdout_size); stdout_str = g_malloc (stdout_size + 1); memcpy (stdout_str, stdout_data, stdout_size); stdout_str[stdout_size] = '\0'; stdout_newline = strchr (stdout_str, '\n'); if (stdout_newline != NULL) *stdout_newline = '\0'; if (g_strcmp0 (hook_stage, "setup") == 0) { if (g_strcmp0 (stdout_str, "ok") == 0) continue; else if (g_strcmp0 (stdout_str, "pass") == 0) return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } else if (g_strcmp0 (hook_stage, "setup-dialog") == 0) { if (g_strcmp0 (stdout_str, "ok") == 0) continue; else if (g_strcmp0 (stdout_str, "pass") == 0) { g_clear_pointer (¤t_dialog, dialog_data_unref); continue; } } else if (g_strcmp0 (hook_stage, "teardown-dialog") == 0) { if (g_strcmp0 (stdout_str, "ok") == 0) continue; else if (g_strcmp0 (stdout_str, "abort") == 0) { hook_aborted = TRUE; continue; } } else if (g_strcmp0 (hook_stage, "catch") == 0) { if (g_strcmp0 (stdout_str, "recover") == 0) { hook_aborted = FALSE; continue; } else if (g_strcmp0 (stdout_str, "abort") == 0) { finish = TRUE; continue; } } else if (g_strcmp0 (hook_stage, "action") == 0) { finish = TRUE; continue; } else if (g_strcmp0 (hook_stage, "teardown") == 0) { if (g_strcmp0 (stdout_str, "continue") == 0) return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); else if (g_strcmp0 (stdout_str, "stop") == 0) return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_STOP); else if (g_strcmp0 (stdout_str, "confirm") == 0) return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONFIRM); else if (g_strcmp0 (stdout_str, "deny") == 0) return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_DENY); } else g_assert_not_reached (); g_warning ("Received invalid response from hook for stage \"%s\", abandoning it now", hook_stage); return dex_future_new_for_int (BZ_HOOK_RETURN_STATUS_CONTINUE); } } static DexFuture * run_emission_fiber (RunEmissionData *data) { GListModel *hooks = data->hooks; BzHookSignal signal = data->signal; BzHookTransactionType ts_type = data->ts_type; char *ts_appid = data->ts_appid; BzEntryGroup *group = data->group; guint n_hooks = 0; n_hooks = g_list_model_get_n_items (hooks); for (guint i = 0; i < n_hooks; i++) { g_autoptr (BzHook) hook = NULL; BzHookSignal when = 0; hook = g_list_model_get_item (hooks, i); when = bz_hook_get_when (hook); if (when == signal) { const char *check_appid_regex = NULL; BzHookReturnStatus hook_result = BZ_HOOK_RETURN_STATUS_CONTINUE; check_appid_regex = bz_hook_get_check_appid_regex (hook); if (check_appid_regex != NULL) { GRegex *regex = NULL; regex = g_object_get_data (G_OBJECT (hook), "check-appid-regex"); if (regex == NULL) { g_autoptr (GError) local_error = NULL; regex = g_regex_new ( check_appid_regex, G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &local_error); if (regex != NULL) g_object_set_data_full ( G_OBJECT (hook), "check-appid-regex", regex, (GDestroyNotify) g_regex_unref); else g_warning ("Hook check-appid-regex property '%s' " "is an invalid regex string: %s", check_appid_regex, local_error->message); } if (regex != NULL && !g_regex_match (regex, ts_appid, G_REGEX_MATCH_DEFAULT, NULL)) continue; } hook_result = dex_await_int ( bz_execute_hook (hook, ts_type, ts_appid, group), NULL); if (hook_result == BZ_HOOK_RETURN_STATUS_CONFIRM || hook_result == BZ_HOOK_RETURN_STATUS_STOP) break; else if (hook_result == BZ_HOOK_RETURN_STATUS_DENY) return dex_future_new_reject ( G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Prevented by a configured hook"); } } return dex_future_new_true (); } bazaar-org-bazaar-b6e9a65/src/bz-hooks.h000066400000000000000000000024401522167256300201250ustar00rootroot00000000000000/* bz-hooks.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-hook.h" G_BEGIN_DECLS DexFuture * bz_execute_hook (BzHook *hook, BzHookTransactionType ts_type, const char *ts_appid, BzEntryGroup *group); DexFuture * bz_run_hook_emission (GListModel *hooks, BzHookSignal signal, BzHookTransactionType ts_type, const char *ts_appid, BzEntryGroup *group); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-inspector.blp000066400000000000000000000550021522167256300213400ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzInspector: Adw.Window { title: "Bazaar Inspector"; default-width: 1200; default-height: 800; width-request: 600; height-request: 600; Adw.ToolbarView { top-bar-style: raised_border; bottom-bar-style: raised_border; reveal-bottom-bars: false; content: Paned { orientation: horizontal; start-child: ScrolledWindow { child: Box { orientation: vertical; width-request: 100; spacing: 10; Box { orientation: vertical; Box { orientation: horizontal; spacing: 10; Label { styles [ "heading" ] label: "Background Task Info:"; xalign: 0.0; } Label { label: bind template.state as <$BzStateInfo>.background-task-label as ; xalign: 0.0; } } Box { orientation: horizontal; spacing: 10; Label { styles [ "heading" ] label: "Active Entry Objects in Memory:"; xalign: 0.0; } Label { label: bind $format_uint(template.state as <$BzStateInfo>.cache-manager as <$BzEntryCacheManager>.living-entries) as ; xalign: 0.0; } } } Box { orientation: vertical; spacing: 3; CheckButton debug_mode_check { label: "Enable Global Debug Mode"; } CheckButton disable_blocklists_check { label: "Disable All Blocklists"; } } Box { orientation: vertical; spacing: 3; Label { styles [ "heading" ] label: "Active Blocklists (YAML)"; xalign: 0.0; } ScrolledWindow { propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.state as <$BzStateInfo>.blocklists; }; factory: string_list_factory; }; } } Box { orientation: vertical; spacing: 3; Label { styles [ "heading" ] label: "Active Blocklists (TXT)"; xalign: 0.0; } ScrolledWindow { propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.state as <$BzStateInfo>.txt-blocklists; }; factory: string_list_factory; }; } } Box { orientation: vertical; spacing: 3; Label { styles [ "heading" ] label: "Active Curated-Configs"; xalign: 0.0; } ScrolledWindow { propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.state as <$BzStateInfo>.curated-configs; }; factory: string_list_factory; }; } } Box { orientation: vertical; spacing: 3; Box { orientation: horizontal; spacing: 10; Label { styles [ "heading" ] label: "Max Age Rating:"; xalign: 0.0; } Label { label: bind $format_int(template.state as <$BzStateInfo>.parental-age-rating) as ; xalign: 0.0; } } Label { styles [ "heading" ] label: "Restricted App IDs"; xalign: 0.0; } ScrolledWindow { propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.state as <$BzStateInfo>.parental-blocked-ids; }; factory: plain_string_list_factory; }; } } }; }; end-child: Box { orientation: vertical; spacing: 8; Label { styles [ "heading" ] margin-top: 10; label: "All Entry Groups"; xalign: 0.0; } Separator { orientation: horizontal; } Expander { label: "Serialize All Entries Into File"; child: Box { margin-start: 3; margin-end: 3; margin-top: 3; margin-bottom: 3; orientation: vertical; spacing: 5; Box { orientation: horizontal; spacing: 5; Entry serialize_all_entries_path_entry { hexpand: true; placeholder-text: "Enter the path to an output file..."; } Button serialize_all_entries_btn { styles [ "suggested-action", ] label: "Go"; clicked => $serialize_all_entries_cb(template); } } ProgressBar serialize_all_entries_progress { visible: false; } }; } Separator { orientation: horizontal; } Box { orientation: horizontal; spacing: 5; CheckButton { label: "Preview"; notify::active => $preview_changed(template); } Entry search_entry { hexpand: true; margin-start: 5; margin-end: 5; margin-top: 5; margin-bottom: 5; placeholder-text: "Filter..."; changed => $entry_changed(template); } } ScrolledWindow { vscrollbar-policy: always; propagate-natural-height: true; child: ListView { model: SingleSelection groups_selection { model: FilterListModel filter_model { incremental: true; model: bind template.state as <$BzStateInfo>.all-entry-groups; }; notify::selected-item => $selected_group_changed(template); }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Expander { styles [ "bz-monospace", ] resize-toplevel: true; label-widget: Label { label: bind template.item as <$BzEntryGroup>.id as ; }; child: Box { styles [ "card", ] margin-start: 3; margin-end: 3; margin-top: 3; margin-bottom: 3; halign: start; orientation: horizontal; Box { margin-start: 5; margin-end: 5; margin-top: 5; margin-bottom: 5; orientation: vertical; spacing: 2; Box { margin-start: 2; orientation: horizontal; spacing: 2; Label { styles [ "accent", ] label: bind template.item as <$BzEntryGroup>.title; } Image { gicon: bind template.item as <$BzEntryGroup>.mini-icon; } Box { styles [ "linked", ] hexpand: true; halign: end; orientation: horizontal; MenuButton { styles [ "bz-small-button", ] child: Label { styles [ "bz-monospace", ] margin-start: 2; margin-end: 2; label: "Entries"; }; popover: Popover { child: ScrolledWindow { propagate-natural-width: true; propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.item as <$BzEntryGroup>.model; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Box { margin-top: 1; margin-bottom: 1; orientation: horizontal; spacing: 5; Box { styles [ "linked", ] orientation: horizontal; Button { styles [ "bz-small-button", ] has-tooltip: true; tooltip-text: "Decache and Inspect"; child: Image { icon-name: "external-link-symbolic"; pixel-size: 12; }; clicked => $decache_and_inspect_cb(template); } Button { styles [ "bz-small-button", ] has-tooltip: true; tooltip-text: "Copy Unique ID"; child: Image { icon-name: "edit-copy-symbolic"; pixel-size: 12; }; clicked => $copy_unique_id_cb(template); } } Label { hexpand: true; ellipsize: end; xalign: 0.0; label: bind template.item as <$GtkStringObject>.string as ; selectable: true; } }; } }; }; }; }; } MenuButton { styles [ "bz-small-button", ] visible: bind $not($is_null(template.item as <$BzEntryGroup>.addons-model as <$GListModel>) as ) as ; child: Label { styles [ "bz-monospace", ] margin-start: 2; margin-end: 2; label: "Addons"; }; popover: Popover { child: ScrolledWindow { propagate-natural-width: true; propagate-natural-height: true; child: ListView { model: NoSelection { model: bind template.item as <$BzEntryGroup>.addons-model; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Label { hexpand: true; ellipsize: end; xalign: 0.0; label: bind template.item as <$GtkStringObject>.string as ; selectable: true; }; } }; }; }; }; } } } Separator { orientation: horizontal; } Grid { column-spacing: 2; row-spacing: 1; Label { layout { column: 0; row: 0; } label: "Developer:"; xalign: 1.0; } Label { layout { column: 1; row: 0; } styles [ "accent", ] label: bind template.item as <$BzEntryGroup>.developer; ellipsize: end; xalign: 0.5; } Label { layout { column: 0; row: 1; } label: "Description:"; xalign: 1.0; } Label { layout { column: 1; row: 1; } styles [ "accent", ] label: bind template.item as <$BzEntryGroup>.description; ellipsize: end; xalign: 0.5; } Label { layout { column: 0; row: 2; } label: "EOL:"; xalign: 1.0; } Label { layout { column: 1; row: 2; } styles [ "accent", ] label: bind template.item as <$BzEntryGroup>.eol; ellipsize: end; xalign: 0.5; } Label { layout { column: 2; row: 0; } label: "Installable:"; xalign: 1.0; } Label { layout { column: 3; row: 0; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.installable) as ; xalign: 0.0; } Label { layout { column: 2; row: 1; } label: "Installable-And-Available:"; xalign: 1.0; } Label { layout { column: 3; row: 1; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.installable-and-available) as ; xalign: 0.0; } Label { layout { column: 2; row: 2; } label: "Updatable:"; xalign: 1.0; } Label { layout { column: 3; row: 2; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.updatable) as ; xalign: 0.0; } Label { layout { column: 2; row: 3; } label: "Updatable-And-Available:"; xalign: 1.0; } Label { layout { column: 3; row: 3; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.updatable-and-available) as ; xalign: 0.0; } Label { layout { column: 2; row: 4; } label: "Removable:"; xalign: 1.0; } Label { layout { column: 3; row: 4; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.removable) as ; xalign: 0.0; } Label { layout { column: 2; row: 5; } label: "Removable-And-Available:"; xalign: 1.0; } Label { layout { column: 3; row: 5; } styles [ "accent", ] label: bind $format_int(template.item as <$BzEntryGroup>.removable-and-available) as ; xalign: 0.0; } } } }; }; } }; }; } }; }; [top] Adw.HeaderBar top_header_bar {} } } BuilderListItemFactory string_list_factory { template ListItem { selectable: false; activatable: false; child: Box { orientation: horizontal; spacing: 10; Label { styles [ "dimmed", "bz-monospace", ] width-request: 30; label: bind $format_uint(template.position) as ; xalign: 1.0; } Label { styles [ "bz-monospace", ] hexpand: true; margin-top: 2; margin-bottom: 2; xalign: 0.0; selectable: true; label: bind template.item as <$GtkStringObject>.string as ; } Button { label: "Open"; clicked => $open_file_externally_cb(template); } }; } } BuilderListItemFactory plain_string_list_factory { template ListItem { selectable: false; activatable: false; child: Box { orientation: horizontal; spacing: 10; Label { styles [ "dimmed", "bz-monospace", ] width-request: 30; label: bind $format_uint(template.position) as ; xalign: 1.0; } Label { styles [ "bz-monospace", ] hexpand: true; margin-top: 2; margin-bottom: 2; xalign: 0.0; selectable: true; label: bind template.item as <$GtkStringObject>.string as ; } }; } } bazaar-org-bazaar-b6e9a65/src/bz-inspector.c000066400000000000000000000373641522167256300210200ustar00rootroot00000000000000/* bz-inspector.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::INSPECTOR" #include #include "config.h" #include "bz-entry-inspector.h" #include "bz-env.h" #include "bz-inspector.h" #include "bz-serializable.h" #include "bz-template-callbacks.h" #include "bz-window.h" struct _BzInspector { AdwWindow parent_instance; BzStateInfo *state; GBinding *debug_mode_binding; GBinding *disable_blocklists_binding; GtkWindow *preview_window; GtkCheckButton *debug_mode_check; GtkCheckButton *disable_blocklists_check; GtkEditable *serialize_all_entries_path_entry; GtkButton *serialize_all_entries_btn; GtkProgressBar *serialize_all_entries_progress; GtkEditable *search_entry; GtkFilterListModel *filter_model; GtkSingleSelection *groups_selection; }; G_DEFINE_FINAL_TYPE (BzInspector, bz_inspector, ADW_TYPE_WINDOW); enum { PROP_0, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * serialize_all_entries_fiber (BzInspector *self); static gboolean filter_func (BzEntryGroup *group, BzInspector *self); static void bz_inspector_dispose (GObject *object) { BzInspector *self = BZ_INSPECTOR (object); g_clear_pointer (&self->state, g_object_unref); g_clear_object (&self->debug_mode_binding); g_clear_object (&self->disable_blocklists_binding); if (self->preview_window != NULL) gtk_window_close (self->preview_window); g_clear_object (&self->preview_window); G_OBJECT_CLASS (bz_inspector_parent_class)->dispose (object); } static void bz_inspector_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzInspector *self = BZ_INSPECTOR (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_inspector_get_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_inspector_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzInspector *self = BZ_INSPECTOR (object); switch (prop_id) { case PROP_STATE: bz_inspector_set_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void serialize_all_entries_cb (BzInspector *self, GtkButton *button) { dex_future_disown ( dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) serialize_all_entries_fiber, g_object_ref (self), g_object_unref)); } static void preview_changed (BzInspector *self, GParamSpec *pspec, GtkCheckButton *button) { if (gtk_check_button_get_active (button)) { BzWindow *window = NULL; BzEntryGroup *selected = NULL; g_assert (self->preview_window == NULL); window = bz_window_new (self->state); gtk_window_set_default_size (GTK_WINDOW (window), 750, 750); gtk_window_present (GTK_WINDOW (window)); selected = gtk_single_selection_get_selected_item (self->groups_selection); if (selected != NULL) bz_window_show_group (window, selected); self->preview_window = (GtkWindow *) g_object_ref_sink (window); } else { if (self->preview_window != NULL) gtk_window_close (self->preview_window); g_clear_object (&self->preview_window); } } static void selected_group_changed (BzInspector *self, GParamSpec *pspec, GtkSingleSelection *selection) { BzEntryGroup *group = NULL; if (self->preview_window == NULL || !gtk_widget_get_mapped (GTK_WIDGET (self->preview_window))) return; group = gtk_single_selection_get_selected_item (self->groups_selection); if (group != NULL) bz_window_show_group (BZ_WINDOW (self->preview_window), group); } static void entry_changed (BzInspector *self, GtkEditable *editable) { GtkFilter *filter = NULL; filter = gtk_filter_list_model_get_filter (self->filter_model); gtk_filter_changed (filter, GTK_FILTER_CHANGE_DIFFERENT); } static void decache_and_inspect_cb (GtkListItem *list_item, GtkButton *button) { GtkStringObject *item = NULL; BzInspector *self = NULL; g_autoptr (BzResult) result = NULL; item = gtk_list_item_get_item (list_item); self = BZ_INSPECTOR (gtk_widget_get_ancestor (GTK_WIDGET (button), BZ_TYPE_INSPECTOR)); g_assert (self != NULL); result = bz_application_map_factory_convert_one ( bz_state_info_get_entry_factory (self->state), g_object_ref (item)); if (result != NULL) { BzEntryInspector *inspector = NULL; inspector = bz_entry_inspector_new (); bz_entry_inspector_set_result (inspector, result); gtk_window_present (GTK_WINDOW (inspector)); } } static void copy_unique_id_cb (GtkListItem *list_item, GtkButton *button) { GtkStringObject *item = NULL; const char *text = NULL; GdkClipboard *clipboard = NULL; item = gtk_list_item_get_item (list_item); text = gtk_string_object_get_string (item); clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_text (clipboard, text); } static void open_file_externally_cb (GtkListItem *list_item, GtkButton *button) { GtkStringObject *string = NULL; const char *path = NULL; string = gtk_list_item_get_item (list_item); path = gtk_string_object_get_string (string); #if defined(DEVELOPMENT_BUILD) && defined(SANDBOXED_LIBFLATPAK) { const char *argv[] = { "flatpak-spawn", "--host", "xdg-open", NULL, NULL }; argv[3] = path; g_spawn_async (NULL, (char **) argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); } #else { g_autofree char *uri = NULL; uri = g_strdup_printf ("file://%s", path); g_app_info_launch_default_for_uri (uri, NULL, NULL); } #endif } static void bz_inspector_class_init (BzInspectorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_inspector_set_property; object_class->get_property = bz_inspector_get_property; object_class->dispose = bz_inspector_dispose; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-inspector.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzInspector, debug_mode_check); gtk_widget_class_bind_template_child (widget_class, BzInspector, disable_blocklists_check); gtk_widget_class_bind_template_child (widget_class, BzInspector, serialize_all_entries_path_entry); gtk_widget_class_bind_template_child (widget_class, BzInspector, serialize_all_entries_btn); gtk_widget_class_bind_template_child (widget_class, BzInspector, serialize_all_entries_progress); gtk_widget_class_bind_template_child (widget_class, BzInspector, search_entry); gtk_widget_class_bind_template_child (widget_class, BzInspector, filter_model); gtk_widget_class_bind_template_child (widget_class, BzInspector, groups_selection); gtk_widget_class_bind_template_callback (widget_class, serialize_all_entries_cb); gtk_widget_class_bind_template_callback (widget_class, preview_changed); gtk_widget_class_bind_template_callback (widget_class, selected_group_changed); gtk_widget_class_bind_template_callback (widget_class, decache_and_inspect_cb); gtk_widget_class_bind_template_callback (widget_class, copy_unique_id_cb); gtk_widget_class_bind_template_callback (widget_class, open_file_externally_cb); gtk_widget_class_bind_template_callback (widget_class, entry_changed); } static void on_map (BzInspector *self, GtkWidget *widget) { gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); } static void bz_inspector_init (BzInspector *self) { GtkCustomFilter *filter = NULL; g_autofree char *serialize_all_entries_output = NULL; gtk_widget_init_template (GTK_WIDGET (self)); filter = gtk_custom_filter_new ((GtkCustomFilterFunc) filter_func, self, NULL); gtk_filter_list_model_set_filter (self->filter_model, GTK_FILTER (filter)); g_signal_connect_swapped (self, "map", G_CALLBACK (on_map), self); serialize_all_entries_output = g_build_filename ( g_get_home_dir (), "BAZAAR_SERIALIZED_ENTRIES.TXT", NULL); gtk_editable_set_text ( self->serialize_all_entries_path_entry, serialize_all_entries_output); } BzInspector * bz_inspector_new (void) { return g_object_new (BZ_TYPE_INSPECTOR, NULL); } BzStateInfo * bz_inspector_get_state (BzInspector *self) { g_return_val_if_fail (BZ_IS_INSPECTOR (self), NULL); return self->state; } void bz_inspector_set_state (BzInspector *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_INSPECTOR (self)); g_clear_pointer (&self->state, g_object_unref); g_clear_pointer (&self->debug_mode_binding, g_object_unref); g_clear_pointer (&self->disable_blocklists_binding, g_object_unref); if (state != NULL) { self->state = g_object_ref (state); self->debug_mode_binding = g_object_bind_property ( state, "debug-mode", self->debug_mode_check, "active", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); self->disable_blocklists_binding = g_object_bind_property ( state, "disable-blocklists", self->disable_blocklists_check, "active", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } static DexFuture * serialize_all_entries_fiber (BzInspector *self) { g_autoptr (GError) local_error = NULL; g_autoptr (BzEntryCacheManager) cache = NULL; const char *path = NULL; g_autofree char *path_clone = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GHashTable) cached_set = NULL; guint cached_set_size = 0; g_autoptr (GFileOutputStream) output = NULL; GHashTableIter iter = { 0 }; if (self->state == NULL) return dex_future_new_false (); cache = bz_state_info_get_cache_manager (self->state); if (cache == NULL) return dex_future_new_false (); g_object_ref (cache); path = gtk_editable_get_text (self->serialize_all_entries_path_entry); if (path == NULL || *path == '\0') return dex_future_new_false (); path_clone = g_strdup (path); file = g_file_new_for_path (path_clone); gtk_widget_set_sensitive (GTK_WIDGET (self->serialize_all_entries_btn), FALSE); gtk_widget_set_visible (GTK_WIDGET (self->serialize_all_entries_progress), TRUE); gtk_progress_bar_set_fraction (self->serialize_all_entries_progress, 0.0); cached_set = dex_await_boxed ( bz_entry_cache_manager_enumerate_disk ( bz_state_info_get_cache_manager (self->state)), &local_error); if (cached_set == NULL) goto err; cached_set_size = g_hash_table_size (cached_set); output = dex_await_object ( dex_file_replace ( file, NULL, TRUE, G_FILE_CREATE_REPLACE_DESTINATION, G_PRIORITY_DEFAULT), &local_error); if (output == NULL) goto err; #define WRITE_STRING(_string) \ G_STMT_START \ { \ dex_await ( \ dex_output_stream_write ( \ G_OUTPUT_STREAM (output), \ (_string), \ strlen ((_string)), \ G_PRIORITY_DEFAULT), \ &local_error); \ if (local_error != NULL) \ goto err; \ } \ G_STMT_END WRITE_STRING ("[\n"); g_hash_table_iter_init (&iter, cached_set); for (guint i = 1;; i++) { char *checksum = NULL; g_autoptr (BzEntry) entry = NULL; g_autoptr (GVariantBuilder) builder = NULL; g_autoptr (GVariant) variant = NULL; g_autoptr (JsonNode) node = NULL; g_autoptr (JsonGenerator) generator = NULL; gsize length = 0; g_autofree char *string = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &checksum, NULL)) break; if (i > 1) WRITE_STRING (",\n\n"); entry = dex_await_object ( bz_entry_cache_manager_get_by_checksum ( cache, checksum), &local_error); if (entry == NULL) goto err; builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT); bz_serializable_serialize (BZ_SERIALIZABLE (entry), builder); variant = g_variant_builder_end (builder); node = json_gvariant_serialize (variant); generator = json_generator_new (); json_generator_set_pretty (generator, TRUE); json_generator_set_root (generator, node); string = json_generator_to_data (generator, &length); dex_await ( dex_output_stream_write ( G_OUTPUT_STREAM (output), string, length, G_PRIORITY_DEFAULT), &local_error); if (local_error != NULL) goto err; gtk_progress_bar_set_fraction ( self->serialize_all_entries_progress, (double) i / (double) cached_set_size); } WRITE_STRING ("\n]\n"); dex_await ( dex_output_stream_close ( G_OUTPUT_STREAM (output), G_PRIORITY_DEFAULT), NULL); gtk_widget_set_sensitive (GTK_WIDGET (self->serialize_all_entries_btn), TRUE); gtk_widget_set_visible (GTK_WIDGET (self->serialize_all_entries_progress), FALSE); return dex_future_new_true (); err: if (local_error != NULL) g_warning ("Failed to serialize: %s", local_error->message); gtk_widget_set_sensitive (GTK_WIDGET (self->serialize_all_entries_btn), TRUE); gtk_widget_set_visible (GTK_WIDGET (self->serialize_all_entries_progress), FALSE); return dex_future_new_for_error (g_steal_pointer (&local_error)); } static gboolean filter_func (BzEntryGroup *group, BzInspector *self) { const char *text = NULL; const char *id = NULL; const char *title = NULL; text = gtk_editable_get_text (self->search_entry); id = bz_entry_group_get_id (group); title = bz_entry_group_get_title (group); if (text == NULL || *text == '\0') return TRUE; if (strcasestr (id, text) != NULL) return TRUE; if (strcasestr (title, text) != NULL) return TRUE; return FALSE; } /* End of bz-inspector.c */ bazaar-org-bazaar-b6e9a65/src/bz-inspector.h000066400000000000000000000022561522167256300210150ustar00rootroot00000000000000/* bz-inspector.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_INSPECTOR (bz_inspector_get_type ()) G_DECLARE_FINAL_TYPE (BzInspector, bz_inspector, BZ, INSPECTOR, AdwWindow) BzInspector * bz_inspector_new (void); BzStateInfo * bz_inspector_get_state (BzInspector *self); void bz_inspector_set_state (BzInspector *self, BzStateInfo *state); G_END_DECLS /* End of bz-inspector.h */ bazaar-org-bazaar-b6e9a65/src/bz-install-controls.blp000066400000000000000000000123211522167256300226360ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzInstallControls: Box { hexpand: bind $invert_boolean(template.wide) as ; Stack stack { visible: bind $is_not_empty_page(stack.visible-child-name) as ; transition-type: crossfade; visible-child-name: bind try { $get_visible_page(template.entry-group as <$BzEntryGroup>.installable, template.entry-group as <$BzEntryGroup>.removable, template.state as <$BzStateInfo>.available-updates, template.tracker as <$BzTransactionEntryTracker>.active as ) as , $get_visible_page(template.entry-group as <$BzEntryGroup>.installable, template.entry-group as <$BzEntryGroup>.removable, template.state as <$BzStateInfo>.available-updates, false ) as }; hexpand: bind $invert_boolean(template.wide) as ; valign: center; StackPage install { name: "install"; child: $BgeWdgtRenderer animated_button { margin-top: 3; margin-bottom: 3; resource: "/io/github/kolunmi/Bazaar/bz-install-controls.wdgt"; reference: bind template.tracker as <$BzTransactionEntryTracker>; state: bind try { $get_install_btn_state( template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>, template.tracker as <$BzTransactionEntryTracker>.active as , template.tracker as <$BzTransactionEntryTracker>.pending as , template.tracker as <$BzTransactionEntryTracker>.progress as ) as , $install_btn_state_fallback() as }; has-tooltip: true; hexpand: bind $invert_boolean(template.wide) as ; halign: bind $choose(template.wide, 2, 0) as ; }; } StackPage open { name: "open"; child: Box { spacing: bind $choose(template.wide, 10, 8) as ; homogeneous: bind $invert_boolean(template.wide) as ; halign: bind $choose(template.wide, 2, 0) as ; valign: center; margin-top: 3; margin-bottom: 3; Button open_button { styles [ "pill", ] visible: bind $invert_boolean($is_blocked(template.state as <$BzStateInfo>.parental-blocked-ids, template.entry-group as <$BzEntryGroup>) as ) as ; has-tooltip: true; hexpand: bind $invert_boolean(template.wide) as ; label: _("_Open"); use-underline: true; sensitive: bind $invert_boolean($is_zero(template.entry-group as <$BzEntryGroup>.removable-and-available) as ) as ; clicked => $run_cb(template); } Button { styles [ "destructive-action", "circular", ] width-request: bind $choose(template.wide, 45, -1) as ; hexpand: bind $invert_boolean(template.wide) as ; has-tooltip: bind template.wide as ; tooltip-text: _("Uninstall Application"); sensitive: bind $invert_boolean($is_zero(template.entry-group as <$BzEntryGroup>.removable-and-available) as ) as ; clicked => $remove_cb(template); child: Box { halign: center; hexpand: true; Label { visible: bind $invert_boolean(template.wide) as ; label: _("_Remove"); use-underline: true; } Image { visible: bind template.wide as ; icon-name: "user-trash-symbolic"; } }; } }; } StackPage update { name: "update"; child: Box { spacing: bind $choose(template.wide, 10, 8) as ; homogeneous: bind $invert_boolean(template.wide) as ; halign: bind $choose(template.wide, 2, 0) as ; valign: center; margin-top: 3; margin-bottom: 3; Button update_button { styles [ "pill", "suggested-action" ] hexpand: bind $invert_boolean(template.wide) as ; label: _("Update"); clicked => $update_cb(template); } Button { styles [ "destructive-action", "circular", ] width-request: bind $choose(template.wide, 45, -1) as ; hexpand: bind $invert_boolean(template.wide) as ; has-tooltip: bind template.wide as ; tooltip-text: _("Uninstall Application"); sensitive: bind $invert_boolean($is_zero(template.entry-group as <$BzEntryGroup>.removable-and-available) as ) as ; clicked => $remove_cb(template); child: Box { halign: center; hexpand: true; Label { visible: bind $invert_boolean(template.wide) as ; label: _("Remove"); } Image { visible: bind template.wide as ; icon-name: "user-trash-symbolic"; } }; } }; } StackPage empty { name: "empty"; child: Adw.Bin {}; } } } bazaar-org-bazaar-b6e9a65/src/bz-install-controls.c000066400000000000000000000504541522167256300223140ustar00rootroot00000000000000/* bz-install-controls.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-install-controls.h" #include "bz-state-info.h" #include "bz-template-callbacks.h" #include "bz-util.h" #include "progress-bar-designs/common.h" struct _BzInstallControls { GtkBox parent_instance; BzEntryGroup *group; BzStateInfo *state; GSettings *settings; gboolean wide; BzTransactionEntryTracker *tracker; GListModel *all_trackers; GtkWidget *install_button; char *install_btn_class; char *pride_class; /* Template widgets */ GtkWidget *open_button; GtkWidget *update_button; GtkWidget *animated_button; }; G_DEFINE_FINAL_TYPE (BzInstallControls, bz_install_controls, GTK_TYPE_BOX) enum { PROP_0, PROP_WIDE, PROP_ENTRY_GROUP, PROP_STATE, PROP_SETTINGS, PROP_TRACKER, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_UPDATE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void pride_flag_changed (BzInstallControls *self, const char *key, GSettings *settings); static void ensure_draw_css (BzInstallControls *self); static void update_tracker (BzInstallControls *self) { BzTransactionManager *manager = NULL; g_autoptr (GListModel) all = NULL; const char *group_id = NULL; g_autoptr (BzTransactionEntryTracker) found = NULL; if (self->state != NULL) manager = bz_state_info_get_transaction_manager (self->state); if (manager != NULL) g_object_get (manager, "all-trackers", &all, NULL); if (self->group != NULL) group_id = bz_entry_group_get_id (self->group); if (all != NULL && group_id != NULL) { for (guint i = 0; i < g_list_model_get_n_items (all); i++) { g_autoptr (BzTransactionEntryTracker) tracker = NULL; BzEntry *entry = NULL; tracker = g_list_model_get_item (all, i); entry = bz_transaction_entry_tracker_get_entry (tracker); if (g_strcmp0 (entry != NULL ? bz_entry_get_id (entry) : NULL, group_id) == 0) { found = g_steal_pointer (&tracker); break; } } } if (g_set_object (&self->tracker, found)) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRACKER]); } static void on_all_trackers_changed (GListModel *model, guint position, guint removed, guint added, BzInstallControls *self) { update_tracker (self); } static void install_cancel_cb (BzInstallControls *self, GtkButton *button) { const char *state = NULL; if (self->group == NULL) return; state = bge_wdgt_renderer_get_state (BGE_WDGT_RENDERER (self->animated_button)); if (state == NULL) return; if (g_strcmp0 (state, "inactive") == 0) gtk_widget_activate_action (GTK_WIDGET (self), "window.install-group", "(sb)", bz_entry_group_get_id (self->group), TRUE); else gtk_widget_activate_action (GTK_WIDGET (self), "window.cancel-group", "s", bz_entry_group_get_id (self->group)); } static void remove_cb (BzInstallControls *self, GtkButton *button) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.remove-group", "(sb)", bz_entry_group_get_id (self->group), TRUE); } static void run_cb (BzInstallControls *self, GtkButton *button) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.launch-group", "s", bz_entry_group_get_id (self->group)); } static GListStore * find_matching_updates (BzInstallControls *self, GListModel *available_updates) { const char *group_id = NULL; guint n_items = 0; GListStore *store = NULL; if (self->group == NULL || available_updates == NULL) return NULL; group_id = bz_entry_group_get_id (self->group); n_items = g_list_model_get_n_items (available_updates); store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntry) entry = NULL; const char *id = NULL; entry = g_list_model_get_item (available_updates, i); id = bz_entry_get_id (entry); if (g_strcmp0 (id, group_id) == 0) g_list_store_append (store, entry); } if (g_list_model_get_n_items (G_LIST_MODEL (store)) == 0) g_clear_object (&store); return store; } static void update_cb (BzInstallControls *self, GtkButton *button) { GListModel *available_updates = NULL; g_autoptr (GListStore) store = NULL; if (self->state == NULL) return; available_updates = bz_state_info_get_available_updates (self->state); store = find_matching_updates (self, available_updates); if (store != NULL) g_signal_emit (self, signals[SIGNAL_UPDATE], 0, G_LIST_MODEL (store)); } static gboolean is_not_empty_page (gpointer object, const char *page_name) { if (page_name == NULL) return FALSE; return g_strcmp0 (page_name, "empty") != 0; } static char * get_visible_page (gpointer object, int installable, int removable, GListModel *available_updates, gboolean active) { BzInstallControls *self = BZ_INSTALL_CONTROLS (object); g_autoptr (GListStore) store = NULL; if (active) return g_strdup ("install"); if (removable > 0) { if (g_signal_has_handler_pending (self, signals[SIGNAL_UPDATE], 0, FALSE)) store = find_matching_updates (self, available_updates); return g_strdup (store != NULL ? "update" : "open"); } else if (installable > 0) return g_strdup ("install"); else return g_strdup ("empty"); } static void set_install_btn_class (BzInstallControls *self, const char *class) { if (self->install_button == NULL) return; if (self->install_btn_class != NULL && g_strcmp0 (class, self->install_btn_class) == 0) return; if (self->install_btn_class != NULL) gtk_widget_remove_css_class (self->install_button, self->install_btn_class); g_clear_pointer (&self->install_btn_class, g_free); if (class != NULL) { gtk_widget_add_css_class (self->install_button, class); self->install_btn_class = g_strdup (class); } } static char * get_install_btn_state (BzInstallControls *self, BzTransactionEntryStatus status, gboolean active, gboolean pending, double progress) { g_autofree char *state = NULL; const char *class = NULL; if ((active || pending) && status == BZ_TRANSACTION_ENTRY_STATUS_CANCELLED) { state = g_strdup ("cancelling"); class = NULL; } else if (pending || status == BZ_TRANSACTION_ENTRY_STATUS_QUEUED) { state = g_strdup ("pending"); class = NULL; } else if (!active || status == BZ_TRANSACTION_ENTRY_STATUS_DONE) { state = g_strdup ("inactive"); class = "suggested-action"; } else { state = g_strdup ("fraction"); class = NULL; } set_install_btn_class (self, class); return g_steal_pointer (&state); } static char * install_btn_state_fallback (BzInstallControls *self) { set_install_btn_class (self, "suggested-action"); return g_strdup ("inactive"); } static gboolean is_blocked (gpointer object, GListModel *parental_blocked, BzEntryGroup *group) { const char *id = NULL; if (parental_blocked == NULL || group == NULL) return FALSE; id = bz_entry_group_get_id (group); if (id == NULL) return FALSE; for (guint i = 0; i < g_list_model_get_n_items (parental_blocked); i++) { g_autoptr (GtkStringObject) obj = g_list_model_get_item (parental_blocked, i); if (strstr (gtk_string_object_get_string (obj), id) != NULL) return TRUE; } return FALSE; } static gboolean idle_grab_focus (GWeakRef *wr) { g_autoptr (BzInstallControls) self = NULL; self = g_weak_ref_get (wr); if (self == NULL) goto done; if (gtk_widget_is_visible (GTK_WIDGET (self))) { GtkWidget *target = self->install_button; if (self->group != NULL && bz_entry_group_get_removable (self->group) > 0) target = find_matching_updates (self, bz_state_info_get_available_updates (self->state)) != NULL ? self->update_button : self->open_button; gtk_widget_grab_focus (target); } done: return G_SOURCE_REMOVE; } static void bz_install_controls_dispose (GObject *object) { BzInstallControls *self = BZ_INSTALL_CONTROLS (object); if (self->settings != NULL) g_signal_handlers_disconnect_by_func ( self->settings, pride_flag_changed, self); if (self->all_trackers != NULL) g_signal_handlers_disconnect_by_func ( self->all_trackers, on_all_trackers_changed, self); g_clear_object (&self->group); g_clear_object (&self->state); g_clear_object (&self->settings); g_clear_object (&self->tracker); g_clear_object (&self->install_button); g_clear_pointer (&self->install_btn_class, g_free); g_clear_pointer (&self->pride_class, g_free); g_clear_object (&self->all_trackers); G_OBJECT_CLASS (bz_install_controls_parent_class)->dispose (object); } static void bz_install_controls_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzInstallControls *self = BZ_INSTALL_CONTROLS (object); switch (prop_id) { case PROP_WIDE: g_value_set_boolean (value, self->wide); break; case PROP_ENTRY_GROUP: g_value_set_object (value, self->group); break; case PROP_STATE: g_value_set_object (value, self->state); break; case PROP_TRACKER: g_value_set_object (value, self->tracker); break; case PROP_SETTINGS: g_value_set_object (value, self->settings); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_install_controls_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzInstallControls *self = BZ_INSTALL_CONTROLS (object); switch (prop_id) { case PROP_WIDE: bz_install_controls_set_wide (self, g_value_get_boolean (value)); break; case PROP_ENTRY_GROUP: bz_install_controls_set_entry_group (self, g_value_get_object (value)); break; case PROP_STATE: bz_install_controls_set_state (self, g_value_get_object (value)); break; case PROP_SETTINGS: { if (self->settings != NULL) g_signal_handlers_disconnect_by_func ( self->settings, pride_flag_changed, self); g_clear_object (&self->settings); self->settings = g_value_dup_object (value); if (self->settings != NULL) { g_signal_connect_swapped ( self->settings, "changed::global-progress-bar-theme", G_CALLBACK (pride_flag_changed), self); } ensure_draw_css (self); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_install_controls_class_init (BzInstallControlsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_install_controls_dispose; object_class->get_property = bz_install_controls_get_property; object_class->set_property = bz_install_controls_set_property; props[PROP_WIDE] = g_param_spec_boolean ( "wide", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ENTRY_GROUP] = g_param_spec_object ( "entry-group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_SETTINGS] = g_param_spec_object ( "settings", NULL, NULL, G_TYPE_SETTINGS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TRACKER] = g_param_spec_object ( "tracker", NULL, NULL, BZ_TYPE_TRANSACTION_ENTRY_TRACKER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_UPDATE] = g_signal_new ( "update", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_LIST_MODEL); g_signal_set_va_marshaller ( signals[SIGNAL_UPDATE], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__OBJECTv); g_type_ensure (BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_STATE_INFO); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-install-controls.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzInstallControls, open_button); gtk_widget_class_bind_template_child (widget_class, BzInstallControls, update_button); gtk_widget_class_bind_template_child (widget_class, BzInstallControls, animated_button); gtk_widget_class_bind_template_callback (widget_class, install_cancel_cb); gtk_widget_class_bind_template_callback (widget_class, remove_cb); gtk_widget_class_bind_template_callback (widget_class, run_cb); gtk_widget_class_bind_template_callback (widget_class, update_cb); gtk_widget_class_bind_template_callback (widget_class, is_not_empty_page); gtk_widget_class_bind_template_callback (widget_class, get_visible_page); gtk_widget_class_bind_template_callback (widget_class, get_install_btn_state); gtk_widget_class_bind_template_callback (widget_class, install_btn_state_fallback); gtk_widget_class_bind_template_callback (widget_class, is_blocked); } static void bz_install_controls_init (BzInstallControls *self) { self->wide = TRUE; gtk_widget_init_template (GTK_WIDGET (self)); self->install_button = bge_wdgt_renderer_lookup_object ( BGE_WDGT_RENDERER (self->animated_button), "btn"); gtk_widget_add_css_class (self->install_button, "pill"); g_signal_connect_swapped ( self->install_button, "clicked", G_CALLBACK (install_cancel_cb), self); gtk_widget_add_css_class (self->install_button, "suggested-action"); self->install_btn_class = g_strdup ("suggested-action"); } GtkWidget * bz_install_controls_new (void) { return g_object_new (BZ_TYPE_INSTALL_CONTROLS, NULL); } gboolean bz_install_controls_get_wide (BzInstallControls *self) { g_return_val_if_fail (BZ_IS_INSTALL_CONTROLS (self), FALSE); return self->wide; } void bz_install_controls_set_wide (BzInstallControls *self, gboolean wide) { g_return_if_fail (BZ_IS_INSTALL_CONTROLS (self)); wide = !!wide; if (self->wide == wide) return; self->wide = wide; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WIDE]); } BzEntryGroup * bz_install_controls_get_entry_group (BzInstallControls *self) { g_return_val_if_fail (BZ_IS_INSTALL_CONTROLS (self), NULL); return self->group; } void bz_install_controls_set_entry_group (BzInstallControls *self, BzEntryGroup *group) { const char *title = NULL; const char *developer = NULL; g_return_if_fail (BZ_IS_INSTALL_CONTROLS (self)); if (self->group == group) return; g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENTRY_GROUP]); if (group != NULL) { title = bz_entry_group_get_title (group); developer = bz_entry_group_get_developer (group); } if (self->install_button != NULL) { g_autofree char *label = NULL; if (title != NULL && developer != NULL) label = g_strdup_printf (_("Install %s from %s"), title, developer); else if (title != NULL) label = g_strdup_printf (_("Install %s"), title); if (label != NULL) gtk_accessible_update_property ( GTK_ACCESSIBLE (self->install_button), GTK_ACCESSIBLE_PROPERTY_LABEL, label, -1); } if (group != NULL) g_idle_add_full ( G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) idle_grab_focus, bz_track_weak (self), bz_weak_release); update_tracker (self); } BzStateInfo * bz_install_controls_get_state (BzInstallControls *self) { g_return_val_if_fail (BZ_IS_INSTALL_CONTROLS (self), NULL); return self->state; } void bz_install_controls_set_state (BzInstallControls *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_INSTALL_CONTROLS (self)); if (self->all_trackers != NULL) { g_signal_handlers_disconnect_by_func (self->all_trackers, on_all_trackers_changed, self); g_clear_object (&self->all_trackers); } g_set_object (&self->state, state); if (state != NULL) { BzTransactionManager *mgr = NULL; mgr = bz_state_info_get_transaction_manager (state); if (mgr != NULL) g_object_get (mgr, "all-trackers", &self->all_trackers, NULL); if (self->all_trackers != NULL) g_signal_connect (self->all_trackers, "items-changed", G_CALLBACK (on_all_trackers_changed), self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); update_tracker (self); } static void pride_flag_changed (BzInstallControls *self, const char *key, GSettings *settings) { ensure_draw_css (self); } static void ensure_draw_css (BzInstallControls *self) { if (self->settings != NULL) { g_autofree char *id = NULL; g_autofree char *final_id = NULL; g_autofree char *class = NULL; id = g_settings_get_string (self->settings, "global-progress-bar-theme"); if (g_strcmp0 (id, "accent-color") != 0) final_id = g_strdup_printf ("%s-horizontal", id); else final_id = g_strdup (id); class = bz_dup_css_class_for_pride_id (final_id); if (self->pride_class != NULL && g_strcmp0 (self->pride_class, class) == 0) return; if (self->pride_class != NULL) gtk_widget_remove_css_class (self->animated_button, self->pride_class); g_clear_pointer (&self->pride_class, g_free); gtk_widget_add_css_class (self->animated_button, class); self->pride_class = g_steal_pointer (&class); } else { if (self->pride_class != NULL) gtk_widget_remove_css_class (self->animated_button, self->pride_class); g_clear_pointer (&self->pride_class, g_free); } } bazaar-org-bazaar-b6e9a65/src/bz-install-controls.h000066400000000000000000000032131522167256300223100ustar00rootroot00000000000000/* bz-install-controls.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-state-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_INSTALL_CONTROLS (bz_install_controls_get_type ()) G_DECLARE_FINAL_TYPE (BzInstallControls, bz_install_controls, BZ, INSTALL_CONTROLS, GtkBox) GtkWidget * bz_install_controls_new (void); gboolean bz_install_controls_get_wide (BzInstallControls *self); void bz_install_controls_set_wide (BzInstallControls *self, gboolean wide); BzEntryGroup * bz_install_controls_get_entry_group (BzInstallControls *self); void bz_install_controls_set_entry_group (BzInstallControls *self, BzEntryGroup *group); BzStateInfo * bz_install_controls_get_state (BzInstallControls *self); void bz_install_controls_set_state (BzInstallControls *self, BzStateInfo *state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-install-controls.wdgt000066400000000000000000000076051522167256300230370ustar00rootroot00000000000000defwidget "Install Button" { reference state : "BzTransactionEntryTracker"; var progress : "gdouble"; var lbl-install : "GtkLabel"; var lbl-cancel : "GtkLabel"; var lbl-cancelling : "GtkLabel"; var stack : "GtkStack"; var btn : "GtkButton"; var flag : "GtkFixed"; var start : "gdouble"; var end : "gdouble"; var opacity : "gdouble"; var corner : "gdouble"; var outline : "GskPath"; var outline-measure : "GskPathMeasure"; var outline-width : "gdouble"; var outline-opacity : "gdouble"; init { set progress = #transition(state:progress, 1.1, 0.1, 10.0); set stack = #( transition-type = crossfade; transition-duration = 200; %set lbl-install = #child/GtkLabel(""() label = C_("Install Controls", "Install"); ); %set lbl-cancel = #child/GtkLabel(""() label = C_("Install Controls", "Cancel"); ); %set lbl-cancelling = #child/GtkLabel(""() label = C_("Install Controls", "Cancelling"); ); ); allocate stack %width%, %height%, #(); set btn = #child/(""("pill") child = stack; margin-start = 4; margin-end = 4; margin-top = 4; margin-bottom = 4; ); allocate btn %width%, %height%, #(); set flag = #child/(""("install-button-indicator") can-target = false; ); allocate flag %width%, %height%, #(); set corner = #eval(#(%height%)/2.0); set outline = #GskPath( move-to(#eval(#(%width%)/2.0), 0.0); rel-line-to(#eval(#(%width%)/2.0-#(corner)), 0.0); rel-arc-to(corner, 0.0, corner, corner); rel-line-to(0.0, #eval(#(%height%)-#(corner)*2.0)); rel-arc-to(0.0, corner, #eval(-#(corner)), corner); rel-line-to(#eval(-(#(%width%)-#(corner)*2.0)), 0.0); rel-arc-to(#eval(-#(corner)), 0.0, #eval(-#(corner)), #eval(-#(corner))); rel-line-to(0.0, #eval(-(#(%height%)-#(corner)*2.0))); rel-arc-to(0.0, #eval(-#(corner)), corner, #eval(-#(corner))); rel-line-to(#eval(#(%width%)/2.0-#(corner)), 0.0); close(); ); set outline-measure = #measure-path(outline); snapshot { do-child btn; with opacity(outline-opacity) { with stroke( #GskPath( add-segment( outline, #path-point(outline-measure, #eval((#(start)%1.0)*#(#path-length(outline-measure)))), #path-point(outline-measure, #eval((#(end)%1.0)*#(#path-length(outline-measure)))), ); ), #GskStroke(outline-width, butt, round, 0.0), ) { do-child flag; } } } } state-default "inactive" { set btn:sensitive = true; set stack:visible-child = lbl-install; set start = 0.0; set end = 0.001; set outline-width = 5.0; set outline-opacity = 0.0; transition-spring outline-width 1.0, 0.1, 15.0; transition-spring outline-opacity 1.0, 0.1, 100.0; } state "pending" { set btn:sensitive = true; set stack:visible-child = lbl-cancel; set start = #eval((#(%tick%)/3.0)%1.0); set end = #eval((#(start)+0.2)%1.0); set outline-width = 5.0; set outline-opacity = 1.0; transition-spring outline-width 1.0, 0.1, 10.0; transition-spring outline-opacity 1.0, 0.1, 10.0; } state "fraction" { set btn:sensitive = true; set stack:visible-child = lbl-cancel; set start = 0.0; set end = #eval(0.05+#(progress)*0.95); set outline-width = 5.0; set outline-opacity = 1.0; transition-spring outline-width 1.1, 0.1, 10.0; transition-spring outline-opacity 1.1, 0.1, 10.0; } state "cancelling" { set btn:sensitive = false; set stack:visible-child = lbl-cancelling; set start = 0.0; set end = 0.001; set outline-width = 0.0; set outline-opacity = 1.0; transition-spring outline-width 1.0, 0.1, 10.0; transition-spring outline-opacity 1.0, 0.1, 10.0; } } bazaar-org-bazaar-b6e9a65/src/bz-installed-tile.blp000066400000000000000000000063261522167256300222510ustar00rootroot00000000000000using Gtk 4.0; template $BzInstalledTile: $BzListTile { accessibility { labelled-by: title_label; described-by: description_label; } child: Box { orientation: horizontal; spacing: 10; $BzTransactIcon { margin-start: 10; margin-top: 10; margin-bottom: 10; width-request: 64; height-request: 64; valign: center; halign: center; info: $BzTransactIconInfo { group: bind template.group as <$BzEntryGroup>; paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; }; } Box { orientation: vertical; valign: center; spacing: 4; Label title_label { xalign: 0.0; ellipsize: end; single-line-mode: true; has-tooltip: true; tooltip-text: bind template.group as <$BzEntryGroup>.id; label: bind template.group as <$BzEntryGroup>.title; } Label description_label { halign: start; ellipsize: end; single-line-mode: true; label: bind $format_description(template.group as <$BzEntryGroup>.installed-size, template.group as <$BzEntryGroup>.installed-versions) as ; styles ["dimmed", "caption", "installed-size"] } Label { xalign: 0.0; ellipsize: end; single-line-mode: true; visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.eol) as ) as ; label: _("Stopped Receiving Updates"); styles ["warning", "caption"] } } Button support_button { styles [ "circular", "flat", "suggested-action", "support" ] has-tooltip: true; tooltip-text: bind template.group as <$BzEntryGroup>.donation-url; width-request: 32; height-request: 32; valign: center; icon-name: "heart-filled-symbolic"; visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.donation-url) as ) as ; clicked => $support_cb() swapped; accessibility { label: _("Donate Button"); } } Box { orientation: horizontal; spacing: 8; margin-end: 8; hexpand: true; halign: end; Button addons_button { styles [ "flat" ] tooltip-text: _("Manage Add-Ons"); visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.n-addons as ) as ) as ; valign: center; icon-name: "application-x-addon-symbolic"; clicked => $install_addons_cb() swapped; } Button remove_button { styles [ "flat", ] tooltip-text: _("Remove"); valign: center; icon-name: "user-trash-symbolic"; visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable) as ) as ; sensitive: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable-and-available) as ) as ; clicked => $remove_cb() swapped; } Image { pixel-size: 14; icon-name: "go-next-symbolic"; margin-end: 4; styles ["dimmed"] } } }; }bazaar-org-bazaar-b6e9a65/src/bz-installed-tile.c000066400000000000000000000207061522167256300217140ustar00rootroot00000000000000/* bz-installed-tile.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include #include "bz-addons-dialog.h" #include "bz-entry-group-util.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-error.h" #include "bz-installed-tile.h" #include "bz-library-page.h" #include "bz-state-info.h" #include "bz-transact-icon.h" #include "bz-transact-icon-info.h" #include "bz-window.h" struct _BzInstalledTile { BzListTile parent_instance; BzEntryGroup *group; GtkLabel *title_label; GtkButton *support_button; GtkButton *remove_button; }; G_DEFINE_FINAL_TYPE (BzInstalledTile, bz_installed_tile, BZ_TYPE_LIST_TILE) enum { PROP_0, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_installed_tile_dispose (GObject *object) { BzInstalledTile *self = BZ_INSTALLED_TILE (object); g_clear_object (&self->group); G_OBJECT_CLASS (bz_installed_tile_parent_class)->dispose (object); } static void bz_installed_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzInstalledTile *self = BZ_INSTALLED_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_installed_tile_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_installed_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzInstalledTile *self = BZ_INSTALLED_TILE (object); switch (prop_id) { case PROP_GROUP: bz_installed_tile_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean logical_and (gpointer object, gboolean a, gboolean b) { return a && b; } static gboolean logical_or (gpointer object, gboolean a, gboolean b) { return a || b; } static char * format_description (gpointer object, guint64 size, GListModel *versions) { g_autoptr (GString) result = NULL; g_autoptr (GString) versions_str = NULL; g_autofree char *size_str = NULL; guint n_versions = 0; result = g_string_new (NULL); if (versions != NULL) n_versions = g_list_model_get_n_items (versions); if (n_versions > 0) { versions_str = g_string_new (NULL); for (guint i = 0; i < n_versions; i++) { g_autoptr (GtkStringObject) string = NULL; const char *version = NULL; string = g_list_model_get_item (versions, i); version = gtk_string_object_get_string (string); if (version != NULL && *version != '\0') { if (versions_str->len > 0) g_string_append_c (versions_str, ' '); g_string_append (versions_str, version); } } if (versions_str->len > 0) { g_string_append (result, versions_str->str); g_string_append (result, " • "); } } size_str = g_format_size (size); g_string_append (result, size_str); return g_string_free (g_steal_pointer (&result), FALSE); } static void support_cb (BzInstalledTile *self, GtkButton *button) { const char *url = NULL; if (self->group == NULL) return; url = bz_entry_group_get_donation_url (self->group); if (url == NULL) return; g_app_info_launch_default_for_uri (url, NULL, NULL); } static void permissions_cb (BzInstalledTile *self) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.permissions", "s", bz_entry_group_get_id (self->group)); } static void install_addons_cb (BzInstalledTile *self) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.addons-group", "s", bz_entry_group_get_id (self->group)); } static void remove_cb (BzInstalledTile *self, GtkButton *button) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.remove-group", "(sb)", bz_entry_group_get_id (self->group), FALSE); } static void bz_installed_tile_class_init (BzInstalledTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_installed_tile_dispose; object_class->get_property = bz_installed_tile_get_property; object_class->set_property = bz_installed_tile_set_property; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_TRANSACT_ICON); g_type_ensure (BZ_TYPE_TRANSACT_ICON_INFO); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-installed-tile.ui"); gtk_widget_class_bind_template_child (widget_class, BzInstalledTile, title_label); gtk_widget_class_bind_template_child (widget_class, BzInstalledTile, support_button); gtk_widget_class_bind_template_child (widget_class, BzInstalledTile, remove_button); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, logical_and); gtk_widget_class_bind_template_callback (widget_class, logical_or); gtk_widget_class_bind_template_callback (widget_class, format_description); gtk_widget_class_bind_template_callback (widget_class, support_cb); gtk_widget_class_bind_template_callback (widget_class, install_addons_cb); gtk_widget_class_bind_template_callback (widget_class, remove_cb); gtk_widget_class_bind_template_callback (widget_class, permissions_cb); gtk_widget_class_install_action (widget_class, "installed-tile.install-addons", NULL, (GtkWidgetActionActivateFunc) install_addons_cb); gtk_widget_class_install_action (widget_class, "installed-tile.permissions", NULL, (GtkWidgetActionActivateFunc) permissions_cb); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_installed_tile_init (BzInstalledTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_installed_tile_new (void) { return g_object_new (BZ_TYPE_INSTALLED_TILE, NULL); } void bz_installed_tile_set_group (BzInstalledTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_INSTALLED_TILE (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } BzEntryGroup * bz_installed_tile_get_group (BzInstalledTile *self) { g_return_val_if_fail (BZ_IS_INSTALLED_TILE (self), NULL); return self->group; } bazaar-org-bazaar-b6e9a65/src/bz-installed-tile.h000066400000000000000000000023731522167256300217210ustar00rootroot00000000000000/* bz-installed-tile.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-list-tile.h" #include G_BEGIN_DECLS #define BZ_TYPE_INSTALLED_TILE (bz_installed_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzInstalledTile, bz_installed_tile, BZ, INSTALLED_TILE, BzListTile) GtkWidget * bz_installed_tile_new (void); void bz_installed_tile_set_group (BzInstalledTile *self, BzEntryGroup *group); BzEntryGroup * bz_installed_tile_get_group (BzInstalledTile *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-internal-config.txt000066400000000000000000000003311522167256300224460ustar00rootroot00000000000000prefix=bz name=internal_config parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-search-bias.h" ensure=BZ_TYPE_SEARCH_BIAS property=search_biases GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-io.c000066400000000000000000000316561522167256300174170ustar00rootroot00000000000000/* bz-io.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-io.h" #include "bz-env.h" #include "bz-size-result.h" static DexFuture * reap_file_fiber (GFile *file); static DexFuture * reap_path_fiber (char *path); static DexFuture * reap_app_dir_fiber (char *path); static DexFuture * get_directory_size_fiber (GFile *file); static DexFuture * get_user_sizes_fiber (char *app_id); static DexFuture * get_all_user_data_ids_fiber (void); char * bz_dup_user_data_path (const char *app_id) { g_return_val_if_fail (app_id != NULL, NULL); return g_build_filename (g_get_home_dir (), ".var", "app", app_id, NULL); } char * bz_dup_user_cache_path (const char *app_id) { g_return_val_if_fail (app_id != NULL, NULL); return g_build_filename (g_get_home_dir (), ".var", "app", app_id, "cache", NULL); } DexScheduler * bz_get_io_scheduler (void) { static DexScheduler *scheduler = NULL; if (g_once_init_enter_pointer (&scheduler)) g_once_init_leave_pointer (&scheduler, dex_thread_pool_scheduler_new ()); return scheduler; } void bz_reap_file (GFile *file) { g_autoptr (GError) local_error = NULL; g_autofree gchar *uri = NULL; g_autoptr (GFileEnumerator) enumerator = NULL; gboolean result = FALSE; g_return_if_fail (G_IS_FILE (file)); uri = g_file_get_uri (file); if (uri == NULL) uri = g_file_get_path (file); enumerator = g_file_enumerate_children ( file, G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "," G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_TIME_MODIFIED, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error); if (enumerator == NULL) { if (!g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) g_warning ("failed to reap cache directory '%s': %s", uri, local_error->message); g_clear_pointer (&local_error, g_error_free); return; } for (;;) { g_autoptr (GFileInfo) info = NULL; g_autoptr (GFile) child = NULL; GFileType file_type = G_FILE_TYPE_UNKNOWN; info = g_file_enumerator_next_file (enumerator, NULL, &local_error); if (info == NULL) { if (local_error != NULL) g_warning ("failed to enumerate cache directory '%s': %s", uri, local_error->message); g_clear_pointer (&local_error, g_error_free); break; } child = g_file_enumerator_get_child (enumerator, info); file_type = g_file_info_get_file_type (info); if (!g_file_info_get_is_symlink (info) && file_type == G_FILE_TYPE_DIRECTORY) bz_reap_file (child); else { result = g_file_delete (child, NULL, &local_error); if (!result) { g_warning ("failed to reap cache directory '%s': %s", uri, local_error->message); g_clear_pointer (&local_error, g_error_free); } } } result = g_file_enumerator_close (enumerator, NULL, &local_error); if (!result) { g_warning ("failed to reap cache directory '%s': %s", uri, local_error->message); g_clear_pointer (&local_error, g_error_free); } result = g_file_delete (file, NULL, &local_error); if (!result) { g_warning ("failed to reap cache directory '%s': %s", uri, local_error->message); g_clear_pointer (&local_error, g_error_free); } } void bz_reap_path (const char *path) { g_autoptr (GFile) file = NULL; g_return_if_fail (path != NULL); file = g_file_new_for_path (path); bz_reap_file (file); } static void trash_file_callback (GObject *object, GAsyncResult *result, gpointer user_data) { g_autoptr (DexPromise) promise = user_data; g_autoptr (GError) error = NULL; if (g_file_trash_finish (G_FILE (object), result, &error)) dex_promise_resolve_boolean (promise, TRUE); else dex_promise_reject (promise, g_steal_pointer (&error)); } static DexFuture * trash_file_dex (GFile *file) { DexPromise *promise = dex_promise_new_cancellable (); g_file_trash_async (file, G_PRIORITY_DEFAULT, dex_promise_get_cancellable (promise), trash_file_callback, dex_ref (promise)); return DEX_FUTURE (promise); } static DexFuture * reap_app_dir_fiber (char *path) { g_autoptr (GFile) file = NULL; g_autoptr (DexFuture) trash_future = NULL; g_autoptr (GError) error = NULL; gboolean result = FALSE; file = g_file_new_for_path (path); trash_future = trash_file_dex (file); result = dex_await_boolean (dex_ref (trash_future), &error); if (!result) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) return dex_future_new_true (); g_warning ("failed to trash directory '%s': %s", path, error->message); return dex_future_new_for_error (g_steal_pointer (&error)); } return dex_future_new_true (); } static DexFuture * reap_user_data_fiber (char *app_id) { g_autofree char *path = bz_dup_user_data_path (app_id); return reap_app_dir_fiber (path); } static DexFuture * reap_user_cache_fiber (char *app_id) { g_autofree char *path = bz_dup_user_cache_path (app_id); bz_reap_path (path); return dex_future_new_true (); } DexFuture * bz_reap_file_dex (GFile *file) { dex_return_error_if_fail (G_IS_FILE (file)); return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) reap_file_fiber, g_object_ref (file), g_object_unref); } DexFuture * bz_reap_path_dex (const char *path) { dex_return_error_if_fail (path != NULL); return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) reap_path_fiber, g_strdup (path), g_free); } DexFuture * bz_reap_user_data_dex (const char *app_id) { dex_return_error_if_fail (app_id != NULL); return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) reap_user_data_fiber, g_strdup (app_id), g_free); } DexFuture * bz_reap_user_cache_dex (const char *app_id) { dex_return_error_if_fail (app_id != NULL); return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) reap_user_cache_fiber, g_strdup (app_id), g_free); } DexFuture * bz_get_user_sizes_dex (const char *app_id) { dex_return_error_if_fail (app_id != NULL); return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) get_user_sizes_fiber, g_strdup (app_id), g_free); } DexFuture * bz_get_user_data_ids_dex (void) { return dex_scheduler_spawn ( bz_get_io_scheduler (), bz_get_dex_stack_size (), (DexFiberFunc) get_all_user_data_ids_fiber, NULL, NULL); } static DexFuture * get_user_sizes_fiber (char *app_id) { g_autofree char *user_data_path = NULL; g_autofree char *user_cache_path = NULL; g_autoptr (GFile) data_file = NULL; g_autoptr (GFile) cache_file = NULL; g_autoptr (GPtrArray) futures = NULL; g_autoptr (GError) error = NULL; guint64 user_data_size = 0; guint64 cache_size = 0; user_data_path = bz_dup_user_data_path (app_id); user_cache_path = bz_dup_user_cache_path (app_id); data_file = g_file_new_for_path (user_data_path); cache_file = g_file_new_for_path (user_cache_path); futures = g_ptr_array_new_with_free_func (dex_unref); g_ptr_array_add (futures, get_directory_size_fiber (data_file)); g_ptr_array_add (futures, get_directory_size_fiber (cache_file)); dex_await (dex_future_allv ( (DexFuture *const *) futures->pdata, futures->len), NULL); user_data_size = dex_await_uint64 (dex_ref (g_ptr_array_index (futures, 0)), &error); if (error != NULL) { g_clear_error (&error); user_data_size = 0; } cache_size = dex_await_uint64 (dex_ref (g_ptr_array_index (futures, 1)), &error); if (error != NULL) { g_clear_error (&error); cache_size = 0; } return dex_future_new_take_object ( g_object_new (BZ_TYPE_SIZE_RESULT, "user-data-size", user_data_size, "cache-size", cache_size, NULL)); } static void measure_disk_usage_callback (GObject *object, GAsyncResult *result, gpointer user_data) { g_autoptr (DexPromise) promise = user_data; g_autoptr (GError) error = NULL; guint64 disk_usage = 0; if (g_file_measure_disk_usage_finish (G_FILE (object), result, &disk_usage, NULL, NULL, &error)) dex_promise_resolve_uint64 (promise, disk_usage); else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) dex_promise_resolve_uint64 (promise, 0); else dex_promise_reject (promise, g_steal_pointer (&error)); } static DexFuture * get_directory_size_fiber (GFile *file) { DexPromise *promise = NULL; promise = dex_promise_new_cancellable (); g_file_measure_disk_usage_async ( file, G_FILE_MEASURE_NONE, G_PRIORITY_DEFAULT, dex_promise_get_cancellable (promise), NULL, NULL, measure_disk_usage_callback, dex_ref (promise)); return DEX_FUTURE (promise); } static DexFuture * get_all_user_data_ids_fiber (void) { g_autofree char *var_app_path = NULL; g_autoptr (GFile) var_app_dir = NULL; g_autoptr (DexFuture) enumerator_future = NULL; g_autoptr (GFileEnumerator) enumerator = NULL; g_autoptr (GError) error = NULL; GHashTable *ids = NULL; var_app_path = g_build_filename (g_get_home_dir (), ".var", "app", NULL); var_app_dir = g_file_new_for_path (var_app_path); ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); enumerator_future = dex_file_enumerate_children ( var_app_dir, G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, G_PRIORITY_DEFAULT); enumerator = dex_await_object (dex_ref (enumerator_future), &error); if (enumerator == NULL) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) return dex_future_new_take_boxed (G_TYPE_HASH_TABLE, ids); g_hash_table_unref (ids); return dex_future_new_for_error (g_steal_pointer (&error)); } for (;;) { g_autoptr (DexFuture) next_future = NULL; g_autolist (GFileInfo) infos = NULL; next_future = dex_file_enumerator_next_files (enumerator, 10, G_PRIORITY_DEFAULT); infos = dex_await_boxed (dex_ref (next_future), &error); if (infos == NULL) { if (error != NULL) { g_hash_table_unref (ids); return dex_future_new_for_error (g_steal_pointer (&error)); } break; } for (GList *l = infos; l != NULL; l = l->next) { GFileInfo *info = l->data; GFileType file_type = g_file_info_get_file_type (info); if (file_type == G_FILE_TYPE_DIRECTORY) { const char *app_id = g_file_info_get_name (info); g_hash_table_insert (ids, g_strdup (app_id), NULL); } } } return dex_future_new_take_boxed (G_TYPE_HASH_TABLE, ids); } char * bz_dup_root_cache_dir (void) { GApplication *application = NULL; const char *user_cache = NULL; const char *id = NULL; user_cache = g_get_user_cache_dir (); application = g_application_get_default (); if (application != NULL) id = g_application_get_application_id (application); if (id == NULL) id = "io.github.kolunmi.Bazaar"; return g_build_filename (user_cache, id, NULL); } char * bz_dup_cache_dir (const char *submodule) { g_autofree char *root_cache_dir = NULL; g_return_val_if_fail (submodule != NULL, NULL); root_cache_dir = bz_dup_root_cache_dir (); return g_build_filename (root_cache_dir, submodule, NULL); } static DexFuture * reap_file_fiber (GFile *file) { bz_reap_file (file); return dex_future_new_true (); } static DexFuture * reap_path_fiber (char *path) { bz_reap_path (path); return dex_future_new_true (); } bazaar-org-bazaar-b6e9a65/src/bz-io.h000066400000000000000000000050431522167256300174130ustar00rootroot00000000000000/* bz-io.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include G_BEGIN_DECLS char * bz_dup_user_data_path (const char *app_id); char * bz_dup_user_cache_path (const char *app_id); DexScheduler * bz_get_io_scheduler (void); void bz_reap_file (GFile *file); void bz_reap_path (const char *path); DexFuture * bz_reap_file_dex (GFile *file); DexFuture * bz_reap_path_dex (const char *path); DexFuture * bz_reap_user_data_dex (const char *app_id); DexFuture * bz_reap_user_cache_dex (const char *app_id); DexFuture * bz_get_user_sizes_dex (const char *app_id); DexFuture * bz_get_user_data_ids_dex (void); char * bz_dup_root_cache_dir (void); char * bz_dup_cache_dir (const char *submodule); #define bz_dup_module_dir() bz_dup_cache_dir (BAZAAR_MODULE) #define bz_discard_path(_path) \ G_STMT_START \ { \ if (g_file_test ((_path), G_FILE_TEST_IS_DIR)) \ bz_reap_path ((_path)); \ else if (g_file_test ((_path), G_FILE_TEST_EXISTS)) \ { \ g_autoptr (GFile) file = NULL; \ \ file = g_file_new_for_path ((_path)); \ g_file_delete (file, NULL, NULL); \ } \ } \ G_STMT_END #define bz_discard_module_dir() \ G_STMT_START \ { \ g_autofree char *_path = NULL; \ \ _path = bz_dup_module_dir (); \ bz_discard_path (_path); \ } \ G_STMT_END G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-lazy-wdgt.c000066400000000000000000000230001522167256300207120ustar00rootroot00000000000000/* bz-lazy-wdgt.c * * Copyright 2026 Eva M * * 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 */ /** * BzLazyWdgt: * * Initializing a BgeWdgtRenderer can be expensive, so this allows you to have a * placeholder widget until the state changes from a non-NULL value to another * non-NULL value, at which point a proper renderer will be swapped in. */ #include "bz-lazy-wdgt.h" struct _BzLazyWdgt { AdwBin parent_instance; BgeWdgtSpec *wdgt_spec; char *wdgt_resource; char *wdgt_state; GObject *wdgt_reference; gboolean activated; }; G_DEFINE_FINAL_TYPE (BzLazyWdgt, bz_lazy_wdgt, ADW_TYPE_BIN); enum { PROP_0, PROP_WDGT_SPEC, PROP_WDGT_RESOURCE, PROP_WDGT_STATE, PROP_WDGT_REFERENCE, PROP_WDGT_ACTIVATED, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void maybe_activate (BzLazyWdgt *self); static void bz_lazy_wdgt_dispose (GObject *object) { BzLazyWdgt *self = BZ_LAZY_WDGT (object); g_clear_pointer (&self->wdgt_spec, g_object_unref); g_clear_pointer (&self->wdgt_resource, g_free); g_clear_pointer (&self->wdgt_state, g_free); g_clear_pointer (&self->wdgt_reference, g_object_unref); G_OBJECT_CLASS (bz_lazy_wdgt_parent_class)->dispose (object); } static void bz_lazy_wdgt_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzLazyWdgt *self = BZ_LAZY_WDGT (object); switch (prop_id) { case PROP_WDGT_SPEC: g_value_set_object (value, bz_lazy_wdgt_get_wdgt_spec (self)); break; case PROP_WDGT_RESOURCE: g_value_set_string (value, bz_lazy_wdgt_get_wdgt_resource (self)); break; case PROP_WDGT_STATE: g_value_set_string (value, bz_lazy_wdgt_get_wdgt_state (self)); break; case PROP_WDGT_REFERENCE: g_value_set_object (value, bz_lazy_wdgt_get_wdgt_reference (self)); break; case PROP_WDGT_ACTIVATED: g_value_set_boolean (value, bz_lazy_wdgt_get_activated (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_lazy_wdgt_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzLazyWdgt *self = BZ_LAZY_WDGT (object); switch (prop_id) { case PROP_WDGT_SPEC: bz_lazy_wdgt_set_wdgt_spec (self, g_value_get_object (value)); break; case PROP_WDGT_RESOURCE: bz_lazy_wdgt_set_wdgt_resource (self, g_value_get_string (value)); break; case PROP_WDGT_STATE: bz_lazy_wdgt_set_wdgt_state (self, g_value_get_string (value)); break; case PROP_WDGT_REFERENCE: bz_lazy_wdgt_set_wdgt_reference (self, g_value_get_object (value)); break; case PROP_WDGT_ACTIVATED: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_lazy_wdgt_class_init (BzLazyWdgtClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_lazy_wdgt_set_property; object_class->get_property = bz_lazy_wdgt_get_property; object_class->dispose = bz_lazy_wdgt_dispose; props[PROP_WDGT_SPEC] = g_param_spec_object ( "wdgt-spec", NULL, NULL, BGE_TYPE_WDGT_SPEC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_WDGT_RESOURCE] = g_param_spec_string ( "wdgt-resource", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_WDGT_STATE] = g_param_spec_string ( "wdgt-state", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_WDGT_REFERENCE] = g_param_spec_object ( "wdgt-reference", NULL, NULL, G_TYPE_OBJECT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_WDGT_ACTIVATED] = g_param_spec_boolean ( "activated", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_lazy_wdgt_init (BzLazyWdgt *self) { } BzLazyWdgt * bz_lazy_wdgt_new (void) { return g_object_new (BZ_TYPE_LAZY_WDGT, NULL); } BgeWdgtSpec * bz_lazy_wdgt_get_wdgt_spec (BzLazyWdgt *self) { g_return_val_if_fail (BZ_IS_LAZY_WDGT (self), NULL); return self->wdgt_spec; } const char * bz_lazy_wdgt_get_wdgt_resource (BzLazyWdgt *self) { g_return_val_if_fail (BZ_IS_LAZY_WDGT (self), NULL); return self->wdgt_resource; } const char * bz_lazy_wdgt_get_wdgt_state (BzLazyWdgt *self) { g_return_val_if_fail (BZ_IS_LAZY_WDGT (self), NULL); return self->wdgt_state; } GObject * bz_lazy_wdgt_get_wdgt_reference (BzLazyWdgt *self) { g_return_val_if_fail (BZ_IS_LAZY_WDGT (self), NULL); return self->wdgt_reference; } gboolean bz_lazy_wdgt_get_activated (BzLazyWdgt *self) { g_return_val_if_fail (BZ_IS_LAZY_WDGT (self), FALSE); return self->activated; } void bz_lazy_wdgt_set_wdgt_spec (BzLazyWdgt *self, BgeWdgtSpec *wdgt_spec) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); g_return_if_fail (wdgt_spec == NULL || BGE_IS_WDGT_SPEC (wdgt_spec)); if (wdgt_spec == self->wdgt_spec) return; g_clear_pointer (&self->wdgt_spec, g_object_unref); if (wdgt_spec != NULL) self->wdgt_spec = g_object_ref (wdgt_spec); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_SPEC]); } void bz_lazy_wdgt_set_wdgt_resource (BzLazyWdgt *self, const char *wdgt_resource) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); if (wdgt_resource == self->wdgt_resource || (wdgt_resource != NULL && self->wdgt_resource != NULL && g_strcmp0 (wdgt_resource, self->wdgt_resource) == 0)) return; g_clear_pointer (&self->wdgt_resource, g_free); if (wdgt_resource != NULL) self->wdgt_resource = g_strdup (wdgt_resource); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_RESOURCE]); } void bz_lazy_wdgt_set_wdgt_state (BzLazyWdgt *self, const char *wdgt_state) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); if (wdgt_state == self->wdgt_state || (wdgt_state != NULL && self->wdgt_state != NULL && g_strcmp0 (wdgt_state, self->wdgt_state) == 0)) return; g_clear_pointer (&self->wdgt_state, g_free); if (wdgt_state != NULL) { self->wdgt_state = g_strdup (wdgt_state); maybe_activate (self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_STATE]); } void bz_lazy_wdgt_set_wdgt_reference (BzLazyWdgt *self, GObject *wdgt_reference) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); g_return_if_fail (wdgt_reference == NULL || G_IS_OBJECT (wdgt_reference)); if (wdgt_reference == self->wdgt_reference) return; g_clear_pointer (&self->wdgt_reference, g_object_unref); if (wdgt_reference != NULL) self->wdgt_reference = g_object_ref (wdgt_reference); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_REFERENCE]); } void bz_lazy_wdgt_set_wdgt_resource_take (BzLazyWdgt *self, char *wdgt_resource) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); if (wdgt_resource != NULL && self->wdgt_resource != NULL && g_strcmp0 (wdgt_resource, self->wdgt_resource) == 0) { g_free (wdgt_resource); return; } g_clear_pointer (&self->wdgt_resource, g_free); if (wdgt_resource != NULL) self->wdgt_resource = wdgt_resource; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_RESOURCE]); } void bz_lazy_wdgt_set_wdgt_state_take (BzLazyWdgt *self, char *wdgt_state) { g_return_if_fail (BZ_IS_LAZY_WDGT (self)); if (wdgt_state != NULL && self->wdgt_state != NULL && g_strcmp0 (wdgt_state, self->wdgt_state) == 0) { g_free (wdgt_state); return; } g_clear_pointer (&self->wdgt_state, g_free); if (wdgt_state != NULL) { self->wdgt_state = wdgt_state; maybe_activate (self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WDGT_STATE]); } static void maybe_activate (BzLazyWdgt *self) { BgeWdgtRenderer *renderer = NULL; if (self->activated) return; renderer = bge_wdgt_renderer_new (); g_object_bind_property (self, "wdgt-spec", renderer, "spec", G_BINDING_SYNC_CREATE); g_object_bind_property (self, "wdgt-resource", renderer, "resource", G_BINDING_SYNC_CREATE); g_object_bind_property (self, "wdgt-state", renderer, "state", G_BINDING_SYNC_CREATE); g_object_bind_property (self, "wdgt-reference", renderer, "reference", G_BINDING_SYNC_CREATE); adw_bin_set_child (ADW_BIN (self), GTK_WIDGET (renderer)); self->activated = TRUE; } /* End of bz-lazy-wdgt.c */ bazaar-org-bazaar-b6e9a65/src/bz-lazy-wdgt.h000066400000000000000000000043611522167256300207300ustar00rootroot00000000000000/* bz-lazy-wdgt.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include #include G_BEGIN_DECLS #define BZ_TYPE_LAZY_WDGT (bz_lazy_wdgt_get_type ()) G_DECLARE_FINAL_TYPE (BzLazyWdgt, bz_lazy_wdgt, BZ, LAZY_WDGT, AdwBin) BzLazyWdgt * bz_lazy_wdgt_new (void); BgeWdgtSpec * bz_lazy_wdgt_get_wdgt_spec (BzLazyWdgt *self); const char * bz_lazy_wdgt_get_wdgt_resource (BzLazyWdgt *self); const char * bz_lazy_wdgt_get_wdgt_state (BzLazyWdgt *self); GObject * bz_lazy_wdgt_get_wdgt_reference (BzLazyWdgt *self); gboolean bz_lazy_wdgt_get_activated (BzLazyWdgt *self); void bz_lazy_wdgt_set_wdgt_spec (BzLazyWdgt *self, BgeWdgtSpec *wdgt_spec); void bz_lazy_wdgt_set_wdgt_resource (BzLazyWdgt *self, const char *wdgt_resource); void bz_lazy_wdgt_set_wdgt_state (BzLazyWdgt *self, const char *wdgt_state); void bz_lazy_wdgt_set_wdgt_reference (BzLazyWdgt *self, GObject *wdgt_reference); void bz_lazy_wdgt_set_wdgt_resource_take (BzLazyWdgt *self, char *wdgt_resource); #define bz_lazy_wdgt_set_wdgt_resource_take_printf(self, ...) bz_lazy_wdgt_set_wdgt_resource_take (self, g_strdup_printf (__VA_ARGS__)) void bz_lazy_wdgt_set_wdgt_state_take (BzLazyWdgt *self, char *wdgt_state); #define bz_lazy_wdgt_set_wdgt_state_take_printf(self, ...) bz_lazy_wdgt_set_wdgt_state_take (self, g_strdup_printf (__VA_ARGS__)) G_END_DECLS /* End of bz-lazy-wdgt.h */ bazaar-org-bazaar-b6e9a65/src/bz-library-page.blp000066400000000000000000000240531522167256300217120ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzLibraryPage: Adw.Bin { child: Box { orientation: vertical; Adw.Clamp search_box_clamp { margin-start: 12; margin-end: 12; maximum-size: 375; visible: bind template.has-apps; child: Adw.Bin { halign: fill; margin-top: 10; margin-bottom: 10; child: Box { orientation: horizontal; spacing: 8; height-request: 40; Image { icon-name: "system-search-symbolic"; } Text search_bar { hexpand: true; max-length: 50; placeholder-text: _("Search installed apps"); notify::text => $search_text_changed(template); activate => $search_text_activate(template); } Button clear_button { icon-name: "edit-clear-symbolic"; visible: bind $not($is_empty_string(search_bar.text) as ) as ; styles [ "flat", "circular", "searchbar-button", ] clicked => $reset_search_cb(template); accessibility { label: _("Clear search"); } } styles [ "search-box", ] }; }; } Adw.ViewStack stack { enable-transitions: true; transition-duration: 400; Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "library-symbolic"; title: _("No Apps Found"); description: ""; }; } Adw.ViewStackPage { name: "no-results"; title: _("No Results"); child: Adw.StatusPage { icon-name: "library-symbolic"; title: _("No Results"); description: bind $no_results_found_subtitle(search_bar.text) as ; child: Button { styles [ "pill", ] halign: center; label: _("Search Store Instead"); clicked => $global_search_cb(template); }; }; } Adw.ViewStackPage { name: "content"; // Translators: . title: _("Library"); child: ScrolledWindow scroll{ hscrollbar-policy: never; child: Adw.Clamp { vexpand: true; maximum-size: 650; child: Box margin_box { orientation: vertical; margin-start: 9; margin-end: 9; margin-bottom: 30; Box non_search_content { orientation: vertical; visible: bind $is_empty_string(search_bar.text) as ; Revealer { reveal-child: bind $invert_boolean($is_empty(template.state as <$BzStateInfo>.available-updates) as ) as ; transition-type: slide_down; child: Box { orientation: vertical; spacing: 8; margin-top: 15; Label { label: _("Pending Updates"); xalign: 0; margin-start: 12; margin-top: 15; styles [ "heading", "h4", ] } $BzUpdatesCard { state: bind template.state; update => $updates_card_update_cb(template); } }; } Revealer { reveal-child: bind $invert_boolean($is_zero(template.state as <$BzStateInfo>.transaction-manager as <$BzTransactionManager>.install-trackers as .n-items) as ) as ; transition-type: slide_down; child: Box { margin-top: 15; orientation: vertical; Label install_label { label: _("Downloads"); xalign: 0; margin-start: 12; styles [ "heading", "h4", ] } ListView install_list_view { styles [ "navigation-sidebar", "installed-list-view", ] model: NoSelection { model: bind template.state as <$BzStateInfo>.transaction-manager as <$BzTransactionManager>.install-trackers; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: $BzTransactionTile { tracker: bind template.item; activated => $tile_activated_cb(); }; } }; } }; } Revealer { reveal-child: bind $invert_boolean($is_zero(template.state as <$BzStateInfo>.transaction-manager as <$BzTransactionManager>.removal-trackers as .n-items) as ) as ; transition-type: slide_down; child: Box { margin-top: 15; orientation: vertical; Label removal_label { label: _("Recently Uninstalled"); xalign: 0; margin-start: 12; styles [ "heading", "h4", ] } ListView removal_list_view { styles [ "navigation-sidebar", "installed-list-view", ] model: NoSelection { model: bind template.state as <$BzStateInfo>.transaction-manager as <$BzTransactionManager>.removal-trackers; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: $BzTransactionTile { tracker: bind template.item; activated => $tile_activated_cb(); }; } }; } }; } Revealer { reveal-child: bind template.state as <$BzStateInfo>.transaction-manager as <$BzTransactionManager>.has-transactions; margin-bottom: 15; transition-type: slide_down; child: ListBox { margin-bottom: 16; margin-top: 4; margin-start: 4; margin-end: 4; selection-mode: none; styles [ "boxed-list", ] Adw.ButtonRow { title: _("Clear Finished Tasks"); activated => $clear_tasks_cb(template); styles [ "error", ] } }; } Box { margin-start: 12; margin-end: 4; Label { label: bind $format_install_count(filter_model.n-items) as ; xalign: 0; visible: bind template.has-apps; hexpand: true; margin-top: 4; styles [ "heading", "h4", ] } MenuButton { icon-name: "sliders-horizontal-symbolic"; popover: sort_popover; tooltip-text: _("Sort Options"); styles ["flat"] } } } ListView list_view { styles [ "navigation-sidebar", "installed-list-view", "installed-section" ] visible: bind template.has-apps; model: NoSelection { model: FilterListModel filter_model { filter: CustomFilter filter {}; model: SortListModel sort_model { sorter: CustomSorter sorter {}; model: bind template.model; }; notify::n-items => $n_filtered_items_changed(template); }; }; factory: BuilderListItemFactory { template ListItem { activatable: false; selectable: false; focusable: false; child: $BzInstalledTile { group: bind template.item as <$BzEntryGroup>; activated => $tile_activated_cb(); }; } }; } }; }; }; } } }; } Popover sort_popover { child: Box { orientation: vertical; spacing: 6; margin-top: 8; margin-bottom: 8; margin-start: 8; margin-end: 16; Label { label: _("Sort By"); wrap: true; wrap-mode: word_char; xalign: 0; margin-start: 28; styles [ "heading", "h4", "dimmed" ] } CheckButton sort_name { label: _("Name"); active: true; toggled => $sort_changed_cb(template); } CheckButton sort_size { label: _("Size"); group: sort_name; toggled => $sort_changed_cb(template); } }; } bazaar-org-bazaar-b6e9a65/src/bz-library-page.c000066400000000000000000000447471522167256300213730ustar00rootroot00000000000000/* bz-library-page.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-entry-group.h" #include "bz-installed-tile.h" #include "bz-library-page.h" #include "bz-section-view.h" #include "bz-template-callbacks.h" #include "bz-transaction-tile.h" #include "bz-updates-card.h" #include "bz-util.h" struct _BzLibraryPage { AdwBin parent_instance; GListModel *model; BzTransactionManager *transactions; BzStateInfo *state; /* Template widgets */ AdwViewStack *stack; GtkText *search_bar; GtkScrolledWindow *scroll; GtkFilterListModel *filter_model; GtkCustomFilter *filter; GtkListView *list_view; GtkSortListModel *sort_model; GtkCustomSorter *sorter; GtkCheckButton *sort_name; GtkCheckButton *sort_size; }; G_DEFINE_FINAL_TYPE (BzLibraryPage, bz_library_page, ADW_TYPE_BIN) enum { PROP_0, PROP_MODEL, PROP_TRANSACTIONS, PROP_STATE, PROP_HAS_APPS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_UPDATE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static void items_changed (BzLibraryPage *self, guint position, guint removed, guint added, GListModel *model); static void has_transactions_changed (BzLibraryPage *self, GParamSpec *pspec, BzTransactionManager *transactions); static void set_page (BzLibraryPage *self); static gboolean set_page_idle_cb (BzLibraryPage *self); static gboolean filter (BzEntryGroup *group, BzLibraryPage *self); static void bz_library_page_dispose (GObject *object) { BzLibraryPage *self = BZ_LIBRARY_PAGE (object); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); if (self->transactions != NULL) g_signal_handlers_disconnect_by_func (self->transactions, has_transactions_changed, self); g_clear_object (&self->model); g_clear_object (&self->transactions); g_clear_object (&self->state); G_OBJECT_CLASS (bz_library_page_parent_class)->dispose (object); } static void bz_library_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzLibraryPage *self = BZ_LIBRARY_PAGE (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_library_page_get_model (self)); break; case PROP_TRANSACTIONS: g_value_set_object (value, bz_library_page_get_transactions (self)); break; case PROP_STATE: g_value_set_object (value, bz_library_page_get_state (self)); break; case PROP_HAS_APPS: { guint n_apps = 0; if (self->model != NULL) n_apps = g_list_model_get_n_items (self->model); g_value_set_boolean (value, n_apps > 0); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_library_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzLibraryPage *self = BZ_LIBRARY_PAGE (object); switch (prop_id) { case PROP_MODEL: bz_library_page_set_model (self, g_value_get_object (value)); break; case PROP_TRANSACTIONS: bz_library_page_set_transactions (self, g_value_get_object (value)); break; case PROP_STATE: bz_library_page_set_state (self, g_value_get_object (value)); break; case PROP_HAS_APPS: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * no_results_found_subtitle (gpointer object, const char *search_text) { if (search_text == NULL || *search_text == '\0') return g_strdup (""); return g_strdup_printf (_ ("No matches found for \"%s\" in the list of installed apps"), search_text); } static char * format_update_count (gpointer object, GListModel *updates) { guint n_updates = 0; if (updates == NULL) return g_strdup (""); n_updates = g_list_model_get_n_items (updates); return g_strdup_printf (ngettext ("%u Available Update", "%u Available Updates", n_updates), n_updates); } static char * format_install_count (gpointer object, gint n_items) { return g_strdup_printf (ngettext ("%u Installed App", "%u Installed Apps", n_items), n_items); } static void tile_activated_cb (BzListTile *tile) { BzLibraryPage *self = NULL; BzEntryGroup *group = NULL; g_assert (BZ_IS_LIST_TILE (tile)); self = (BzLibraryPage *) gtk_widget_get_ancestor (GTK_WIDGET (tile), BZ_TYPE_LIBRARY_PAGE); if (self == NULL) return; if (BZ_IS_INSTALLED_TILE (tile)) { group = bz_installed_tile_get_group (BZ_INSTALLED_TILE (tile)); } else if (BZ_IS_TRANSACTION_TILE (tile)) { BzTransactionEntryTracker *tracker = NULL; BzEntry *entry = NULL; tracker = bz_transaction_tile_get_tracker (BZ_TRANSACTION_TILE (tile)); if (tracker == NULL) return; entry = bz_transaction_entry_tracker_get_entry (tracker); group = bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (bz_entry_get_id (entry))); } else return; if (group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.show-group", "s", bz_entry_group_get_id (group)); } static void search_text_changed (BzLibraryPage *self, GParamSpec *pspec, GtkText *entry) { gtk_filter_changed (GTK_FILTER (self->filter), GTK_FILTER_CHANGE_DIFFERENT); set_page (self); } static void search_text_activate (BzLibraryPage *self, GtkText *entry) { const char *text = NULL; text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (text != NULL && *text != '\0') gtk_widget_activate_action (GTK_WIDGET (self), "app.search", "s", text); gtk_editable_set_text (GTK_EDITABLE (self->search_bar), ""); } static void reset_search_cb (BzLibraryPage *self, GtkButton *button) { gtk_text_set_buffer (self->search_bar, NULL); } static void n_filtered_items_changed (BzLibraryPage *self, GParamSpec *pspec, GtkFilterListModel *model) { set_page (self); } static void clear_tasks_cb (BzLibraryPage *self) { BzTransactionManager *manager = NULL; if (self->state == NULL) return; manager = bz_state_info_get_transaction_manager (self->state); if (manager != NULL) bz_transaction_manager_clear_finished (manager); } static void updates_card_update_cb (BzLibraryPage *self, GListModel *entries, BzUpdatesCard *card) { g_signal_emit (self, signals[SIGNAL_UPDATE], 0, entries); } static void global_search_cb (BzLibraryPage *self, GtkButton *button) { const char *text = NULL; text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (text != NULL && *text != '\0') gtk_widget_activate_action (GTK_WIDGET (self), "app.search", "s", text); gtk_editable_set_text (GTK_EDITABLE (self->search_bar), ""); } static int sort_func (BzEntryGroup *a, BzEntryGroup *b, BzLibraryPage *self) { if (gtk_check_button_get_active (self->sort_size)) { guint64 size_a = 0; guint64 size_b = 0; size_a = bz_entry_group_get_installed_size (a); size_b = bz_entry_group_get_installed_size (b); return size_a > size_b ? -1 : size_a < size_b ? 1 : 0; } return g_utf8_collate (bz_entry_group_get_title (a), bz_entry_group_get_title (b)); } static void sort_changed_cb (BzLibraryPage *self, GtkCheckButton *button) { gtk_sorter_changed (GTK_SORTER (self->sorter), GTK_SORTER_CHANGE_DIFFERENT); } static void bz_library_page_class_init (BzLibraryPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_library_page_dispose; object_class->get_property = bz_library_page_get_property; object_class->set_property = bz_library_page_set_property; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TRANSACTIONS] = g_param_spec_object ( "transactions", NULL, NULL, BZ_TYPE_TRANSACTION_MANAGER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_HAS_APPS] = g_param_spec_boolean ( "has-apps", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_UPDATE] = g_signal_new ( "update", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_LIST_MODEL); g_signal_set_va_marshaller ( signals[SIGNAL_UPDATE], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__OBJECTv); g_type_ensure (BZ_TYPE_SECTION_VIEW); g_type_ensure (BZ_TYPE_ENTRY_GROUP); g_type_ensure (BZ_TYPE_INSTALLED_TILE); g_type_ensure (BZ_TYPE_TRANSACTION_TILE); g_type_ensure (BZ_TYPE_UPDATES_CARD); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-library-page.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, stack); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, search_bar); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, scroll); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, filter_model); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, filter); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, list_view); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, sort_model); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, sorter); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, sort_name); gtk_widget_class_bind_template_child (widget_class, BzLibraryPage, sort_size); gtk_widget_class_bind_template_callback (widget_class, no_results_found_subtitle); gtk_widget_class_bind_template_callback (widget_class, format_update_count); gtk_widget_class_bind_template_callback (widget_class, format_install_count); gtk_widget_class_bind_template_callback (widget_class, tile_activated_cb); gtk_widget_class_bind_template_callback (widget_class, reset_search_cb); gtk_widget_class_bind_template_callback (widget_class, search_text_changed); gtk_widget_class_bind_template_callback (widget_class, search_text_activate); gtk_widget_class_bind_template_callback (widget_class, n_filtered_items_changed); gtk_widget_class_bind_template_callback (widget_class, clear_tasks_cb); gtk_widget_class_bind_template_callback (widget_class, updates_card_update_cb); gtk_widget_class_bind_template_callback (widget_class, global_search_cb); gtk_widget_class_bind_template_callback (widget_class, sort_changed_cb); } static void bz_library_page_init (BzLibraryPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); gtk_custom_filter_set_filter_func ( self->filter, (GtkCustomFilterFunc) filter, self, NULL); gtk_custom_sorter_set_sort_func ( self->sorter, (GCompareDataFunc) sort_func, self, NULL); } GtkWidget * bz_library_page_new (void) { return g_object_new (BZ_TYPE_LIBRARY_PAGE, NULL); } void bz_library_page_set_model (BzLibraryPage *self, GListModel *model) { g_return_if_fail (BZ_IS_LIBRARY_PAGE (self)); g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model)); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_clear_object (&self->model); if (model != NULL) { self->model = g_object_ref (model); g_signal_connect_swapped (model, "items-changed", G_CALLBACK (items_changed), self); } g_idle_add_full ( G_PRIORITY_DEFAULT, (GSourceFunc) set_page_idle_cb, g_object_ref (self), g_object_unref); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_APPS]); } GListModel * bz_library_page_get_model (BzLibraryPage *self) { g_return_val_if_fail (BZ_IS_LIBRARY_PAGE (self), NULL); return self->model; } void bz_library_page_set_transactions (BzLibraryPage *self, BzTransactionManager *transactions) { g_return_if_fail (BZ_IS_LIBRARY_PAGE (self)); g_return_if_fail (transactions == NULL || BZ_IS_TRANSACTION_MANAGER (transactions)); if (self->transactions != NULL) g_signal_handlers_disconnect_by_func (self->transactions, has_transactions_changed, self); g_clear_object (&self->transactions); if (transactions != NULL) { self->transactions = g_object_ref (transactions); g_signal_connect_swapped ( transactions, "notify::has-transactions", G_CALLBACK (has_transactions_changed), self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSACTIONS]); } BzTransactionManager * bz_library_page_get_transactions (BzLibraryPage *self) { g_return_val_if_fail (BZ_IS_LIBRARY_PAGE (self), NULL); return self->transactions; } void bz_library_page_set_state (BzLibraryPage *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_LIBRARY_PAGE (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); g_clear_object (&self->state); if (state != NULL) self->state = g_object_ref (state); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } BzStateInfo * bz_library_page_get_state (BzLibraryPage *self) { g_return_val_if_fail (BZ_IS_LIBRARY_PAGE (self), NULL); return self->state; } gboolean bz_library_page_ensure_active (BzLibraryPage *self, const char *initial) { const char *text = NULL; g_return_val_if_fail (BZ_IS_LIBRARY_PAGE (self), FALSE); text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (text != NULL && *text != '\0' && gtk_widget_has_focus (GTK_WIDGET (self->search_bar))) return FALSE; gtk_widget_grab_focus (GTK_WIDGET (self->search_bar)); gtk_editable_set_text (GTK_EDITABLE (self->search_bar), initial); if (initial != NULL) gtk_editable_set_position (GTK_EDITABLE (self->search_bar), g_utf8_strlen (initial, -1)); return TRUE; } void bz_library_page_reset_search (BzLibraryPage *self) { GtkAdjustment *vadjustment = NULL; g_return_if_fail (BZ_IS_LIBRARY_PAGE (self)); vadjustment = gtk_scrolled_window_get_vadjustment (self->scroll); gtk_adjustment_set_value (vadjustment, 0.0); gtk_text_set_buffer (self->search_bar, NULL); } static void items_changed (BzLibraryPage *self, guint position, guint removed, guint added, GListModel *model) { set_page (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_APPS]); } static void has_transactions_changed (BzLibraryPage *self, GParamSpec *pspec, BzTransactionManager *transactions) { set_page (self); } static void set_page (BzLibraryPage *self) { guint n_apps = 0; guint n_filtered = 0; gboolean has_transactions = FALSE; if (self->model != NULL) { n_apps = g_list_model_get_n_items (self->model); n_filtered = g_list_model_get_n_items (G_LIST_MODEL (self->filter_model)); } if (self->state != NULL) { BzTransactionManager *manager = NULL; manager = bz_state_info_get_transaction_manager (self->state); has_transactions = bz_transaction_manager_get_has_transactions (manager); } if (n_apps == 0 && !has_transactions) { gtk_editable_set_text (GTK_EDITABLE (self->search_bar), ""); adw_view_stack_set_visible_child_name (self->stack, "empty"); } else if (n_apps > 0 && n_filtered == 0) adw_view_stack_set_visible_child_name (self->stack, "no-results"); else adw_view_stack_set_visible_child_name (self->stack, "content"); } static gboolean set_page_idle_cb (BzLibraryPage *self) { set_page (self); return G_SOURCE_REMOVE; } static gboolean filter (BzEntryGroup *group, BzLibraryPage *self) { const char *id = NULL; const char *title = NULL; const char *text = NULL; if (bz_entry_group_is_addon (group)) return FALSE; id = bz_entry_group_get_id (group); title = bz_entry_group_get_title (group); text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (text != NULL && *text != '\0') return strcasestr (id, text) != NULL || strcasestr (title, text) != NULL; else return TRUE; } bazaar-org-bazaar-b6e9a65/src/bz-library-page.h000066400000000000000000000033411522167256300213610ustar00rootroot00000000000000/* bz-library-page.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_LIBRARY_PAGE (bz_library_page_get_type ()) G_DECLARE_FINAL_TYPE (BzLibraryPage, bz_library_page, BZ, LIBRARY_PAGE, AdwBin) GtkWidget * bz_library_page_new (void); void bz_library_page_set_model (BzLibraryPage *self, GListModel *model); GListModel * bz_library_page_get_model (BzLibraryPage *self); void bz_library_page_set_transactions (BzLibraryPage *self, BzTransactionManager *transactions); BzTransactionManager * bz_library_page_get_transactions (BzLibraryPage *self); void bz_library_page_set_state (BzLibraryPage *self, BzStateInfo *state); BzStateInfo * bz_library_page_get_state (BzLibraryPage *self); gboolean bz_library_page_ensure_active (BzLibraryPage *self, const char *initial); void bz_library_page_reset_search (BzLibraryPage *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-license-dialog.blp000066400000000000000000000062141522167256300222120ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzLicenseDialog: Adw.Bin { child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: Adw.Clamp { maximum-size: 600; child: Box { orientation: vertical; margin-top: 6; margin-bottom: 18; margin-start: 18; margin-end: 18; Box { orientation: vertical; margin-bottom: 16; valign: center; vexpand: true; $BzLozenge { visible: bind template.entry as <$BzEntry>.is-floss as ; title: bind $get_label_cb(template.entry as <$BzEntry>) as ; icon-names: [ "heart-outline-thick-symbolic", "community-symbolic", "thumbs-up-outline-symbolic", ]; importance: unimportant; } $BzLozenge { visible: bind $invert_boolean(template.entry as <$BzEntry>.is-floss as ) as ; title: bind $get_label_cb(template.entry as <$BzEntry>) as ; icon-names: [ "hand-openyay-symbolic", "proprietary-code-symbolic", "license-symbolic", ]; importance: information; } } Box { orientation: vertical; spacing: 6; margin-bottom: 12; Label { label: bind $get_license_info(template.entry as <$BzEntry>) as ; valign: start; margin-bottom: 18; margin-start: 18; margin-end: 18; use-markup: true; xalign: 0.50; wrap: true; wrap-mode: word_char; justify: center; } Button { styles [ "pill", ] visible: bind template.entry as <$BzEntry>.is-floss as ; clicked => $contribute_cb(template); tooltip-text: bind $get_involved_tooltip(template.entry) as ; halign: center; child: Box { orientation: horizontal; spacing: 10; Label { label: _("Get Involved"); wrap: true; wrap-mode: word_char; justify: right; } Image { icon-name: "external-link-symbolic"; } }; } Button { styles [ "pill", ] visible: bind $should_show_eula(template.entry as <$BzEntry>) as ; clicked => $eula_cb(template); tooltip-text: bind $eula_tooltip(template.entry) as ; halign: center; child: Box { orientation: horizontal; spacing: 10; Label { label: _("Learn More"); wrap: true; wrap-mode: word_char; justify: right; } Image { icon-name: "external-link-symbolic"; } }; } } }; }; }; } bazaar-org-bazaar-b6e9a65/src/bz-license-dialog.c000066400000000000000000000225041522167256300216570ustar00rootroot00000000000000/* bz-license-dialog.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-entry.h" #include "bz-license-dialog.h" #include "bz-lozenge.h" #include "bz-spdx.h" #include "bz-url.h" struct _BzLicenseDialog { AdwBin parent_instance; BzEntry *entry; }; G_DEFINE_FINAL_TYPE (BzLicenseDialog, bz_license_dialog, ADW_TYPE_BIN) enum { PROP_0, PROP_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL }; static void bz_license_dialog_dispose (GObject *object) { BzLicenseDialog *self = NULL; self = BZ_LICENSE_DIALOG (object); g_clear_object (&self->entry); G_OBJECT_CLASS (bz_license_dialog_parent_class)->dispose (object); } static void bz_license_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzLicenseDialog *self = NULL; self = BZ_LICENSE_DIALOG (object); switch (prop_id) { case PROP_ENTRY: g_value_set_object (value, self->entry); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_license_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzLicenseDialog *self = NULL; self = BZ_LICENSE_DIALOG (object); switch (prop_id) { case PROP_ENTRY: g_clear_object (&self->entry); self->entry = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static char * get_label_cb (gpointer object, BzEntry *entry) { g_autofree char *license = NULL; gboolean is_floss = FALSE; if (entry == NULL) return g_strdup (""); g_object_get ( entry, "is-floss", &is_floss, "project-license", &license, NULL); if (license == NULL || *license == '\0') return g_strdup (_ ("Unknown License")); if (is_floss) return g_strdup (_ ("Community Built")); if (bz_spdx_is_proprietary (license)) return g_strdup (_ ("Proprietary")); return g_strdup (_ ("Special License")); } static char * get_involved_tooltip (gpointer object, BzEntry *entry) { g_autoptr (GListModel) share_urls = NULL; g_autoptr (BzUrl) first_url = NULL; const char *url = NULL; if (entry == NULL) return NULL; g_object_get (entry, "share-urls", &share_urls, NULL); if (share_urls == NULL || g_list_model_get_n_items (share_urls) < 1) return NULL; first_url = g_list_model_get_item (share_urls, 1); url = bz_url_get_url (first_url); if (url != NULL && *url != '\0') return g_strdup (url); return NULL; } static char * format_license_link (const char *license) { g_autofree char *license_name = NULL; g_autofree char *license_url = NULL; if (!bz_spdx_is_valid (license)) return g_strdup (license); license_name = bz_spdx_get_name (license); if (license_name == NULL || *license_name == '\0') { g_clear_pointer (&license_name, g_free); license_name = g_strdup (license); } license_url = bz_spdx_get_url (license); return g_strdup_printf ("%s", license_url, license_name); } static char * get_license_info (gpointer object, BzEntry *entry) { g_autofree char *license = NULL; gboolean is_floss = FALSE; g_autofree char *link = NULL; if (entry == NULL) return g_strdup (""); g_object_get ( entry, "is-floss", &is_floss, "project-license", &license, NULL); if (license == NULL || *license == '\0') { if (is_floss) return g_strdup (_ ("This app is developed in the open by an international community.\n\n" "You can participate and help make it even better.")); else return g_strdup (_ ("The license of this app is not known")); } if (is_floss) { link = format_license_link (license); return g_strdup_printf (_ ("This app is developed in the open by an international community, " "and released under the %s license.\n\n" "You can participate and help make it even better."), link); } if (bz_spdx_is_proprietary (license)) { return g_strdup (_ ("This app is not developed in the open, so only its developers know how it works. " "It may be insecure in ways that are hard to detect, and it may change without oversight.\n\n" "You may or may not be able to contribute to this app.")); } link = format_license_link (license); return g_strdup_printf (_ ("This app is developed under the special license %s.\n\n" "You may or may not be able to contribute to this app."), link); } static void contribute_cb (BzLicenseDialog *self) { g_autoptr (GListModel) share_urls = NULL; g_autoptr (BzUrl) first_url = NULL; const char *url = NULL; g_object_get (self->entry, "share-urls", &share_urls, NULL); if (share_urls == NULL || g_list_model_get_n_items (share_urls) < 1) return; first_url = g_list_model_get_item (share_urls, 1); url = bz_url_get_url (first_url); if (url != NULL && *url != '\0') g_app_info_launch_default_for_uri (url, NULL, NULL); } static char * get_eula_url (BzEntry *entry) { g_autofree char *license = NULL; const char *url = NULL; if (entry == NULL) return NULL; g_object_get (entry, "project-license", &license, NULL); if (license == NULL || !g_str_has_prefix (license, "LicenseRef-proprietary=")) return NULL; url = license + strlen ("LicenseRef-proprietary="); return (*url != '\0') ? g_strdup (url) : NULL; } static gboolean should_show_eula (gpointer object, BzEntry *entry) { g_autofree char *url = get_eula_url (entry); return url != NULL; } static char * eula_tooltip (gpointer object, BzEntry *entry) { return get_eula_url (entry); } static void eula_cb (BzLicenseDialog *self) { g_autofree char *url = get_eula_url (self->entry); if (url != NULL) g_app_info_launch_default_for_uri (url, NULL, NULL); } static void bz_license_dialog_class_init (BzLicenseDialogClass *klass) { GObjectClass *object_class = NULL; GtkWidgetClass *widget_class = NULL; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_license_dialog_dispose; object_class->get_property = bz_license_dialog_get_property; object_class->set_property = bz_license_dialog_set_property; props[PROP_ENTRY] = g_param_spec_object ( "entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LOZENGE); gtk_widget_class_set_template_from_resource ( widget_class, "/io/github/kolunmi/Bazaar/bz-license-dialog.ui"); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, get_label_cb); gtk_widget_class_bind_template_callback (widget_class, get_license_info); gtk_widget_class_bind_template_callback (widget_class, get_involved_tooltip); gtk_widget_class_bind_template_callback (widget_class, should_show_eula); gtk_widget_class_bind_template_callback (widget_class, eula_tooltip); gtk_widget_class_bind_template_callback (widget_class, contribute_cb); gtk_widget_class_bind_template_callback (widget_class, eula_cb); } static void bz_license_dialog_init (BzLicenseDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwDialog * bz_license_dialog_new (BzEntry *entry) { BzLicenseDialog *widget = NULL; AdwDialog *dialog = NULL; widget = g_object_new (BZ_TYPE_LICENSE_DIALOG, "entry", entry, NULL); dialog = adw_dialog_new (); adw_dialog_set_content_width (dialog, 425); adw_dialog_set_child (dialog, GTK_WIDGET (widget)); return dialog; } AdwNavigationPage * bz_license_page_new (BzEntry *entry) { BzLicenseDialog *widget = NULL; AdwNavigationPage *page = NULL; widget = g_object_new (BZ_TYPE_LICENSE_DIALOG, "entry", entry, NULL); page = adw_navigation_page_new (GTK_WIDGET (widget), _ ("License")); adw_navigation_page_set_tag (page, "license"); return page; } bazaar-org-bazaar-b6e9a65/src/bz-license-dialog.h000066400000000000000000000021301522167256300216550ustar00rootroot00000000000000/* bz-license-dialog.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include G_BEGIN_DECLS #define BZ_TYPE_LICENSE_DIALOG (bz_license_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzLicenseDialog, bz_license_dialog, BZ, LICENSE_DIALOG, AdwBin) AdwDialog * bz_license_dialog_new (BzEntry *entry); AdwNavigationPage * bz_license_page_new (BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-linear-function.txt000066400000000000000000000002561522167256300224720ustar00rootroot00000000000000prefix=bz name=linear_function parent-prefix=g parent-name=object author=AUTOGEN property=slope double G_TYPE_DOUBLE double property=y_intercept double G_TYPE_DOUBLE double bazaar-org-bazaar-b6e9a65/src/bz-list-tile.c000066400000000000000000000147161522167256300207140ustar00rootroot00000000000000/* bz-list-tile.c * * Copyright 2025 Hari Rana * * 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 */ #include "bz-list-tile.h" typedef struct { GtkWidget *child; } BzListTilePrivate; G_DEFINE_TYPE_WITH_PRIVATE (BzListTile, bz_list_tile, GTK_TYPE_WIDGET) enum { PROP_0, PROP_CHILD, LAST_PROP }; static GParamSpec *props[LAST_PROP]; enum { ACTIVATED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0, }; static void on_gesture_click_released (BzListTile *self, gint n_press, gdouble x, gdouble y, GtkGestureClick *gesture); static void bz_list_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzListTile *self = BZ_LIST_TILE (object); switch (prop_id) { case PROP_CHILD: g_value_set_object (value, bz_list_tile_get_child (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_list_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzListTile *self = BZ_LIST_TILE (object); switch (prop_id) { case PROP_CHILD: bz_list_tile_set_child (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_list_tile_dispose (GObject *object) { BzListTile *self = BZ_LIST_TILE (object); BzListTilePrivate *priv = bz_list_tile_get_instance_private (self); g_clear_pointer (&priv->child, gtk_widget_unparent); G_OBJECT_CLASS (bz_list_tile_parent_class)->dispose (object); } static void bz_list_tile_class_init (BzListTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->get_property = bz_list_tile_get_property; object_class->set_property = bz_list_tile_set_property; object_class->dispose = bz_list_tile_dispose; /** * BzListTile:child: * * The child widget. */ props[PROP_CHILD] = g_param_spec_object ("child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); /** * BzListTile::activated: * * This signal is emitted after the tile has been activated. */ signals[ACTIVATED] = g_signal_new ("activated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); { g_autoptr (GtkShortcutAction) activate_action = NULL; const guint activate_keyvals[] = { GDK_KEY_space, GDK_KEY_KP_Space, GDK_KEY_Return, GDK_KEY_ISO_Enter, GDK_KEY_KP_Enter, }; activate_action = gtk_signal_action_new ("activated"); for (size_t i = 0; i < G_N_ELEMENTS (activate_keyvals); i++) { g_autoptr (GtkShortcut) activate_shortcut = NULL; activate_shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (activate_keyvals[i], 0), g_object_ref (activate_action)); gtk_widget_class_add_shortcut (widget_class, activate_shortcut); } } gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void bz_list_tile_init (BzListTile *self) { GtkGesture *gesture_click; gtk_widget_add_css_class (GTK_WIDGET (self), "card"); gtk_widget_add_css_class (GTK_WIDGET (self), "activatable"); gesture_click = gtk_gesture_click_new (); g_signal_connect_swapped (gesture_click, "released", G_CALLBACK (on_gesture_click_released), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture_click)); gtk_widget_set_focusable (GTK_WIDGET (self), TRUE); gtk_widget_set_receives_default (GTK_WIDGET (self), TRUE); } /** * bz_list_tile_new: * * Create a new #BzListTile. * * Returns: (transfer full): a newly created #BzListTile */ BzListTile * bz_list_tile_new (void) { return g_object_new (BZ_TYPE_LIST_TILE, NULL); } /** * bz_list_tile_get_child: * @self: a #BzListTile * * Get the child associated with @self. * * Returns: (transfer none) (nullable): the child */ GtkWidget * bz_list_tile_get_child (BzListTile *self) { BzListTilePrivate *priv; g_assert (BZ_IS_LIST_TILE (self)); priv = bz_list_tile_get_instance_private (self); return priv->child; } /** * bz_list_tile_set_child: * @self: a #BzListTile * @child: (transfer none): the child * * Set the child to associate with @self. */ void bz_list_tile_set_child (BzListTile *self, GtkWidget *child) { BzListTilePrivate *priv; g_assert (BZ_IS_LIST_TILE (self)); priv = bz_list_tile_get_instance_private (self); /* Since this is not a library, there is no point in safeguarding it */ priv->child = child; gtk_widget_set_parent (child, GTK_WIDGET (self)); } static void on_gesture_click_released (BzListTile *self, gint n_press, gdouble x, gdouble y, GtkGestureClick *gesture) { if (gtk_widget_contains (GTK_WIDGET (self), x, y)) { gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); g_signal_emit (self, signals[ACTIVATED], 0); } else { gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); } } bazaar-org-bazaar-b6e9a65/src/bz-list-tile.h000066400000000000000000000023361522167256300207140ustar00rootroot00000000000000/* bz-list-tile.h * * Copyright 2025 Hari Rana * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_LIST_TILE (bz_list_tile_get_type()) G_DECLARE_DERIVABLE_TYPE (BzListTile, bz_list_tile, BZ, LIST_TILE, GtkWidget) struct _BzListTileClass { GtkWidgetClass parent_class; }; BzListTile *bz_list_tile_new (void); GtkWidget *bz_list_tile_get_child (BzListTile *self); void bz_list_tile_set_child (BzListTile *self, GtkWidget *child); G_END_DECLSbazaar-org-bazaar-b6e9a65/src/bz-login-page.blp000066400000000000000000000060421522167256300213540ustar00rootroot00000000000000using Gtk 4.0; using Gdk 4.0; using Adw 1; template $BzLoginPage: Adw.NavigationPage { title: _("Connect to Flathub"); child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: Stack main_stack { transition-type: crossfade; StackPage { name: "loading"; child: Adw.Spinner { hexpand: true; vexpand: true; halign: center; valign: center; width-request: 64; height-request: 64; }; } StackPage { name: "error"; child: Adw.StatusPage error_status_page { icon-name: "computer-fail-symbolic"; title: _("Something Went Wrong"); }; } StackPage { name: "start"; child: Adw.Clamp { child: Adw.StatusPage { icon-name: "flathub-symbolic"; title: _("Connect to Flathub"); description: _("Log in to sync your favorited apps across devices"); child: Adw.PreferencesGroup provider_preferences_group { margin-start: 10; margin-end: 10; hexpand: true; halign: fill; }; }; }; } StackPage { name: "browser"; child: ScrolledWindow browser_scroll { vexpand: true; }; } StackPage { name: "finish"; child: ScrolledWindow { hscrollbar-policy: never; child: Adw.Clamp { maximum-size: 600; child: Box { orientation: vertical; vexpand: true; halign: center; valign: center; Box { orientation: vertical; spacing: 15; halign: center; valign: center; Adw.Avatar { size: 96; show-initials: true; text: bind template.auth-state as <$BzAuthState>.name; custom-image: bind try { $choose(template.auth-state as <$BzAuthState>.paintable as <$BzAsyncTexture>.loaded, template.auth-state as <$BzAuthState>.paintable , null as ), null as }; } Label { halign: center; label: bind $format_greeting(template.auth-state as <$BzAuthState>.name as ) as ; wrap: true; wrap-mode: word_char; justify: center; styles [ "title-1", ] } } Box { orientation: horizontal; spacing: 10; halign: center; margin-top: 20; Button { label: _("Finish"); clicked => $on_close_clicked(); styles [ "pill", ] } } }; }; }; } }; }; }bazaar-org-bazaar-b6e9a65/src/bz-login-page.c000066400000000000000000000541351522167256300210270ustar00rootroot00000000000000/* bz-login-page.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include #include #include #include "bz-auth-state.h" #include "bz-flathub-auth-provider.h" #include "bz-global-net.h" #include "bz-login-page.h" #include "bz-template-callbacks.h" #include "bz-util.h" struct _BzLoginPage { AdwNavigationPage parent_instance; BzAuthState *auth_state; WebKitWebView *webview; gboolean webkit_loaded; SoupSession *session; SoupCookieJar *cookie_jar; GList *providers; BzFlathubAuthProvider *current_provider; char *auth_redirect_url; char *session_cookie; GDateTime *session_cookie_expires; gboolean oauth_completed; GtkStack *main_stack; AdwStatusPage *error_status_page; AdwPreferencesGroup *provider_preferences_group; GtkScrolledWindow *browser_scroll; }; G_DEFINE_FINAL_TYPE (BzLoginPage, bz_login_page, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_AUTH_STATE, N_PROPS }; static GParamSpec *properties[N_PROPS]; static WebKitNetworkSession * get_shared_network_session (void) { static WebKitNetworkSession *shared_session = NULL; if (g_once_init_enter (&shared_session)) { g_autofree char *data_dir = NULL; g_autoptr (WebKitNetworkSession) session = NULL; data_dir = g_build_filename (g_get_user_data_dir (), "io.github.kolunmi.Bazaar", "webkit-data", NULL); session = webkit_network_session_new (data_dir, NULL); g_once_init_leave (&shared_session, g_steal_pointer (&session)); } return shared_session; } static void show_error_take (BzLoginPage *self, char *message) { g_autofree char *escaped_message = NULL; gtk_stack_set_visible_child_name (self->main_stack, "error"); escaped_message = g_markup_escape_text (message, -1); adw_status_page_set_description (self->error_status_page, escaped_message); g_free (message); } static JsonObject * parse_json_response (GBytes *bytes, GError **error) { gboolean result = FALSE; g_autoptr (JsonParser) parser = NULL; JsonNode *root = NULL; parser = json_parser_new (); result = json_parser_load_from_data ( parser, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), error); if (!result) return NULL; root = json_parser_get_root (parser); return json_node_dup_object (root); } static SoupMessage * create_flathub_request (const char *method, const char *route) { g_autofree char *url = NULL; g_autoptr (SoupMessage) msg = NULL; url = g_strdup_printf ("https://flathub.org/api/v2%s", route); msg = soup_message_new (method, url); soup_message_headers_append (soup_message_get_request_headers (msg), "accept", "application/json"); return g_steal_pointer (&msg); } static void load_webkit_library (BzLoginPage *self) { WebKitNetworkSession *network_session = NULL; if (self->webkit_loaded) return; network_session = get_shared_network_session (); self->webview = g_object_new ( WEBKIT_TYPE_WEB_VIEW, "network-session", network_session, NULL); gtk_scrolled_window_set_child ( self->browser_scroll, GTK_WIDGET (self->webview)); self->webkit_loaded = TRUE; } static void on_user_info_loaded (GObject *source_object, GAsyncResult *res, GWeakRef *wr); static void on_oauth_complete (GObject *source_object, GAsyncResult *res, GWeakRef *wr); static void complete_oauth (BzLoginPage *self, const char *code, const char *state, const char *error) { g_autoptr (JsonBuilder) builder = NULL; g_autoptr (JsonGenerator) generator = NULL; g_autofree char *route = NULL; g_autofree char *json_data = NULL; g_autoptr (SoupMessage) msg = NULL; gtk_stack_set_visible_child_name (self->main_stack, "loading"); builder = json_builder_new (); json_builder_begin_object (builder); if (error != NULL) { json_builder_set_member_name (builder, "state"); json_builder_add_string_value (builder, state); json_builder_set_member_name (builder, "error"); json_builder_add_string_value (builder, error); } else { json_builder_set_member_name (builder, "code"); json_builder_add_string_value (builder, code); json_builder_set_member_name (builder, "state"); json_builder_add_string_value (builder, state); } json_builder_end_object (builder); generator = json_generator_new (); json_generator_set_root (generator, json_builder_get_root (builder)); json_data = json_generator_to_data (generator, NULL); route = g_strdup_printf ("/auth/login/%s", bz_flathub_auth_provider_get_method (self->current_provider)); msg = soup_message_new ("POST", g_strdup_printf ("https://flathub.org/api/v2%s", route)); soup_message_headers_append (soup_message_get_request_headers (msg), "accept", "application/json"); soup_message_headers_append (soup_message_get_request_headers (msg), "Content-Type", "application/json"); soup_message_set_request_body_from_bytes (msg, "application/json", g_bytes_new (json_data, strlen (json_data))); soup_session_send_and_read_async ( self->session, msg, G_PRIORITY_DEFAULT, NULL, (GAsyncReadyCallback) on_oauth_complete, bz_track_weak (self)); } static gboolean on_decide_policy (BzLoginPage *self, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decision_type, WebKitWebView *webview) { WebKitNavigationAction *nav_action = NULL; WebKitURIRequest *request = NULL; const char *uri = NULL; g_autoptr (GUri) parsed_uri = NULL; g_autoptr (GHashTable) params = NULL; const char *code = NULL; const char *state = NULL; const char *error = NULL; if (decision_type != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION) return FALSE; nav_action = webkit_navigation_policy_decision_get_navigation_action ( WEBKIT_NAVIGATION_POLICY_DECISION (decision)); request = webkit_navigation_action_get_request (nav_action); uri = webkit_uri_request_get_uri (request); if (uri == NULL || strstr (uri, "flathub.org") == NULL || strstr (uri, "/login/") == NULL) return FALSE; parsed_uri = g_uri_parse (uri, G_URI_FLAGS_NONE, NULL); if (parsed_uri == NULL) return FALSE; params = g_uri_parse_params (g_uri_get_query (parsed_uri), -1, "&", G_URI_PARAMS_NONE, NULL); if (params == NULL) return FALSE; code = g_hash_table_lookup (params, "code"); state = g_hash_table_lookup (params, "state"); error = g_hash_table_lookup (params, "error"); if ((code != NULL && state != NULL && !self->oauth_completed) || (error != NULL && state != NULL && !self->oauth_completed)) { self->oauth_completed = TRUE; webkit_policy_decision_ignore (decision); complete_oauth (self, code, state, error); return TRUE; } return FALSE; } static void get_user_info (BzLoginPage *self) { g_autoptr (SoupMessage) msg = NULL; msg = create_flathub_request ("GET", "/auth/userinfo"); soup_session_send_and_read_async ( self->session, msg, G_PRIORITY_DEFAULT, NULL, (GAsyncReadyCallback) on_user_info_loaded, bz_track_weak (self)); } static void on_oauth_complete (GObject *source_object, GAsyncResult *res, GWeakRef *wr) { g_autoptr (BzLoginPage) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (JsonObject) obj = NULL; const char *status = NULL; g_autoslist (SoupCookie) cookies = NULL; self = g_weak_ref_get (wr); if (self == NULL) goto done; bytes = soup_session_send_and_read_finish ( SOUP_SESSION (source_object), res, &local_error); if (bytes == NULL) { g_warning ("OAuth complete error: %s", local_error->message); show_error_take (self, g_strdup_printf ("Error: %s", local_error->message)); goto done; } obj = parse_json_response (bytes, &local_error); if (obj == NULL) { g_warning ("Failed to parse OAuth response: %s", local_error->message); show_error_take (self, g_strdup_printf ("Error: %s", local_error->message)); goto done; } status = json_object_get_string_member (obj, "status"); cookies = soup_cookie_jar_all_cookies (self->cookie_jar); for (GSList *l = cookies; l != NULL; l = l->next) { SoupCookie *cookie = l->data; if (g_strcmp0 (soup_cookie_get_name (cookie), "session") == 0) { g_clear_pointer (&self->session_cookie, g_free); self->session_cookie = g_strdup (soup_cookie_get_value (cookie)); g_clear_pointer (&self->session_cookie_expires, g_date_time_unref); self->session_cookie_expires = g_date_time_ref (soup_cookie_get_expires (cookie)); } } if (g_strcmp0 (status, "ok") == 0 || g_strcmp0 (status, "success") == 0) get_user_info (self); else show_error_take (self, g_strdup ("Authentication failed")); done: bz_weak_release (wr); } static void on_user_info_loaded (GObject *source_object, GAsyncResult *res, GWeakRef *wr) { g_autoptr (BzLoginPage) self = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (GError) error = NULL; g_autoptr (JsonObject) obj = NULL; JsonObject *default_account = NULL; const char *displayname = NULL; const char *avatar_url = NULL; self = g_weak_ref_get (wr); if (self == NULL) goto done; if (self->webview != NULL) webkit_web_view_load_uri (self->webview, "about:blank"); bytes = soup_session_send_and_read_finish (SOUP_SESSION (source_object), res, &error); if (error != NULL) { g_warning ("User info load error: %s", error->message); show_error_take (self, g_strdup_printf ("Error: %s", error->message)); goto done; } obj = parse_json_response (bytes, &error); if (obj == NULL) { g_warning ("Failed to parse user info: %s", error->message); show_error_take (self, g_strdup_printf ("Error: %s", error->message)); goto done; } displayname = json_object_get_string_member (obj, "displayname"); if (json_object_has_member (obj, "default_account")) { default_account = json_object_get_object_member (obj, "default_account"); if (displayname == NULL && json_object_has_member (default_account, "login")) displayname = json_object_get_string_member (default_account, "login"); if (json_object_has_member (default_account, "avatar")) avatar_url = json_object_get_string_member (default_account, "avatar"); } if (displayname == NULL) displayname = "N/A"; if (self->auth_state != NULL) bz_auth_state_set_authenticated (self->auth_state, displayname, self->session_cookie, self->session_cookie_expires, avatar_url); gtk_stack_set_visible_child_name (self->main_stack, "finish"); done: bz_weak_release (wr); } static void on_login_response (GObject *source_object, GAsyncResult *res, GWeakRef *wr) { g_autoptr (BzLoginPage) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (JsonObject) obj = NULL; const char *redirect = NULL; self = g_weak_ref_get (wr); if (self == NULL) goto done; bytes = soup_session_send_and_read_finish ( SOUP_SESSION (source_object), res, &local_error); if (bytes == NULL) { show_error_take (self, g_strdup_printf ("Error: %s", local_error->message)); goto done; } obj = parse_json_response (bytes, &local_error); if (obj == NULL) { show_error_take (self, g_strdup_printf ("Error: %s", local_error->message)); goto done; } redirect = json_object_get_string_member (obj, "redirect"); if (redirect == NULL) { show_error_take (self, g_strdup ("Error: No redirect URL received")); goto done; } g_clear_pointer (&self->auth_redirect_url, g_free); self->auth_redirect_url = g_strdup (redirect); load_webkit_library (self); g_signal_connect_swapped ( self->webview, "decide-policy", G_CALLBACK (on_decide_policy), self); gtk_stack_set_visible_child_name (self->main_stack, "browser"); webkit_web_view_load_uri (self->webview, self->auth_redirect_url); done: bz_weak_release (wr); } static void on_provider_row_activated (BzLoginPage *self, GtkButton *button) { BzFlathubAuthProvider *provider = NULL; g_autoptr (SoupMessage) msg = NULL; g_autofree char *route = NULL; provider = g_object_get_data (G_OBJECT (button), "provider"); if (provider == NULL) return; self->current_provider = provider; self->oauth_completed = FALSE; gtk_stack_set_visible_child_name (self->main_stack, "loading"); route = g_strdup_printf ("/auth/login/%s", bz_flathub_auth_provider_get_method (provider)); msg = create_flathub_request ("GET", route); soup_session_send_and_read_async ( self->session, msg, G_PRIORITY_DEFAULT, NULL, (GAsyncReadyCallback) on_login_response, bz_track_weak (self)); } static void on_providers_loaded (GObject *source_object, GAsyncResult *res, GWeakRef *wr) { g_autoptr (BzLoginPage) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; g_autoptr (JsonParser) parser = NULL; JsonNode *root; JsonArray *array; self = g_weak_ref_get (wr); if (self == NULL) goto done; bytes = soup_session_send_and_read_finish (SOUP_SESSION (source_object), res, &local_error); if (bytes == NULL) { show_error_take (self, g_strdup_printf ("Error loading providers: %s", local_error->message)); goto done; } parser = json_parser_new (); if (!json_parser_load_from_data (parser, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), &local_error)) { show_error_take (self, g_strdup_printf ("Error parsing providers: %s", local_error->message)); goto done; } root = json_parser_get_root (parser); array = json_node_get_array (root); for (guint i = 0; i < json_array_get_length (array); i++) { JsonObject *provider_obj = NULL; g_autoptr (BzFlathubAuthProvider) provider = NULL; const char *method = NULL; const char *name = NULL; GtkWidget *row = NULL; GtkWidget *prefix_icon = NULL; GtkWidget *suffix_icon = NULL; g_autofree char *icon_name = NULL; provider_obj = json_array_get_object_element (array, i); provider = bz_flathub_auth_provider_new (); method = json_object_get_string_member (provider_obj, "method"); name = json_object_get_string_member (provider_obj, "name"); row = adw_action_row_new (); icon_name = g_strdup_printf ("io.github.kolunmi.Bazaar.%s", method); bz_flathub_auth_provider_set_name (provider, name); bz_flathub_auth_provider_set_method (provider, method); self->providers = g_list_append (self->providers, g_object_ref (provider)); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), name); prefix_icon = gtk_image_new_from_icon_name (icon_name); gtk_image_set_icon_size (GTK_IMAGE (prefix_icon), GTK_ICON_SIZE_LARGE); gtk_widget_add_css_class (prefix_icon, "lowres-icon"); adw_action_row_add_prefix (ADW_ACTION_ROW (row), prefix_icon); suffix_icon = gtk_image_new_from_icon_name ("go-next-symbolic"); adw_action_row_add_suffix (ADW_ACTION_ROW (row), suffix_icon); g_object_set_data_full (G_OBJECT (row), "provider", g_object_ref (provider), g_object_unref); gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), true); g_signal_connect_swapped (row, "activated", G_CALLBACK (on_provider_row_activated), self); adw_preferences_group_add (self->provider_preferences_group, row); } gtk_stack_set_visible_child_name (self->main_stack, "start"); done: bz_weak_release (wr); } static void load_providers (BzLoginPage *self) { g_autoptr (SoupMessage) msg = NULL; gtk_stack_set_visible_child_name (self->main_stack, "loading"); msg = create_flathub_request ("GET", "/auth/login"); soup_session_send_and_read_async ( self->session, msg, G_PRIORITY_DEFAULT, NULL, (GAsyncReadyCallback) on_providers_loaded, bz_track_weak (self)); } static void on_close_clicked (GtkButton *button, BzLoginPage *self) { GtkWidget *navigation_view = NULL; navigation_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (navigation_view != NULL) adw_navigation_view_pop (ADW_NAVIGATION_VIEW (navigation_view)); } static void bz_login_page_dispose (GObject *object) { BzLoginPage *self = BZ_LOGIN_PAGE (object); g_clear_object (&self->auth_state); g_clear_object (&self->session); g_clear_object (&self->cookie_jar); g_clear_pointer (&self->session_cookie_expires, g_date_time_unref); g_clear_pointer (&self->auth_redirect_url, g_free); g_clear_pointer (&self->session_cookie, g_free); if (self->providers != NULL) { g_list_free_full (self->providers, (GDestroyNotify) g_object_unref); self->providers = NULL; } G_OBJECT_CLASS (bz_login_page_parent_class)->dispose (object); } static void bz_login_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzLoginPage *self = BZ_LOGIN_PAGE (object); switch (prop_id) { case PROP_AUTH_STATE: g_value_set_object (value, self->auth_state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_login_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzLoginPage *self = BZ_LOGIN_PAGE (object); switch (prop_id) { case PROP_AUTH_STATE: g_set_object (&self->auth_state, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * format_greeting (gpointer object, const char *name) { if (name == NULL || name[0] == '\0') return g_strdup (" "); return g_strdup_printf (_ ("Hello, %s!"), name); } static void bz_login_page_class_init (BzLoginPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_login_page_dispose; object_class->get_property = bz_login_page_get_property; object_class->set_property = bz_login_page_set_property; properties[PROP_AUTH_STATE] = g_param_spec_object ( "auth-state", NULL, NULL, BZ_TYPE_AUTH_STATE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, properties); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-login-page.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzLoginPage, main_stack); gtk_widget_class_bind_template_child (widget_class, BzLoginPage, error_status_page); gtk_widget_class_bind_template_child (widget_class, BzLoginPage, provider_preferences_group); gtk_widget_class_bind_template_child (widget_class, BzLoginPage, browser_scroll); gtk_widget_class_bind_template_callback (widget_class, on_close_clicked); gtk_widget_class_bind_template_callback (widget_class, format_greeting); } static void bz_login_page_init (BzLoginPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->session = soup_session_new (); soup_session_set_proxy_resolver (self->session, bz_get_default_proxy_resolver ()); self->cookie_jar = soup_cookie_jar_new (); soup_cookie_jar_set_accept_policy (self->cookie_jar, SOUP_COOKIE_JAR_ACCEPT_ALWAYS); soup_session_add_feature (self->session, SOUP_SESSION_FEATURE (self->cookie_jar)); self->webkit_loaded = FALSE; self->oauth_completed = FALSE; load_providers (self); } AdwNavigationPage * bz_login_page_new (BzAuthState *auth_state) { return g_object_new (BZ_TYPE_LOGIN_PAGE, "auth-state", auth_state, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-login-page.h000066400000000000000000000020411522167256300210210ustar00rootroot00000000000000/* bz-login-page.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-auth-state.h" #include G_BEGIN_DECLS #define BZ_TYPE_LOGIN_PAGE (bz_login_page_get_type ()) G_DECLARE_FINAL_TYPE (BzLoginPage, bz_login_page, BZ, LOGIN_PAGE, AdwNavigationPage) AdwNavigationPage *bz_login_page_new (BzAuthState *auth_state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-lozenge.c000066400000000000000000000237621522167256300204520ustar00rootroot00000000000000/* bz-lozenge.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-context-row.h" #include "bz-lozenge.h" struct _BzLozenge { GtkBox parent_instance; gchar *title; gchar *label; gchar **icon_names; BzImportance importance; GtkWidget *icon_box; GtkWidget *label_widget; GtkWidget *title_label; }; G_DEFINE_FINAL_TYPE (BzLozenge, bz_lozenge, GTK_TYPE_BOX) enum { PROP_0, PROP_TITLE, PROP_LABEL, PROP_ICON_NAMES, PROP_IMPORTANCE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL }; static void bz_lozenge_rebuild (BzLozenge *self); static void bz_lozenge_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzLozenge *self = NULL; self = BZ_LOZENGE (object); switch (prop_id) { case PROP_TITLE: g_value_set_string (value, self->title); break; case PROP_LABEL: g_value_set_string (value, self->label); break; case PROP_ICON_NAMES: g_value_set_boxed (value, self->icon_names); break; case PROP_IMPORTANCE: g_value_set_enum (value, self->importance); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_lozenge_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzLozenge *self = NULL; self = BZ_LOZENGE (object); switch (prop_id) { case PROP_TITLE: bz_lozenge_set_title (self, g_value_get_string (value)); break; case PROP_LABEL: bz_lozenge_set_label (self, g_value_get_string (value)); break; case PROP_ICON_NAMES: bz_lozenge_set_icon_names (self, g_value_get_boxed (value)); break; case PROP_IMPORTANCE: bz_lozenge_set_importance (self, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_lozenge_dispose (GObject *object) { BzLozenge *self = NULL; self = BZ_LOZENGE (object); g_clear_pointer (&self->title, g_free); g_clear_pointer (&self->label, g_free); g_clear_pointer (&self->icon_names, g_strfreev); g_clear_pointer (&self->icon_box, gtk_widget_unparent); g_clear_pointer (&self->label_widget, gtk_widget_unparent); g_clear_pointer (&self->title_label, gtk_widget_unparent); G_OBJECT_CLASS (bz_lozenge_parent_class)->dispose (object); } static void bz_lozenge_class_init (BzLozengeClass *klass) { GObjectClass *object_class = NULL; object_class = G_OBJECT_CLASS (klass); object_class->get_property = bz_lozenge_get_property; object_class->set_property = bz_lozenge_set_property; object_class->dispose = bz_lozenge_dispose; props[PROP_TITLE] = g_param_spec_string ("title", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_LABEL] = g_param_spec_string ("label", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ICON_NAMES] = g_param_spec_boxed ("icon-names", NULL, NULL, G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_IMPORTANCE] = g_param_spec_enum ("importance", NULL, NULL, BZ_TYPE_IMPORTANCE, BZ_IMPORTANCE_NEUTRAL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_lozenge_init (BzLozenge *self) { GtkWidget *container = NULL; self->importance = BZ_IMPORTANCE_NEUTRAL; gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_VERTICAL); gtk_box_set_spacing (GTK_BOX (self), 12); gtk_widget_set_halign (GTK_WIDGET (self), GTK_ALIGN_CENTER); container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_widget_set_halign (container, GTK_ALIGN_CENTER); gtk_box_append (GTK_BOX (self), container); self->icon_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_widget_set_halign (self->icon_box, GTK_ALIGN_CENTER); gtk_box_append (GTK_BOX (container), self->icon_box); self->label_widget = gtk_label_new (NULL); gtk_widget_set_halign (self->label_widget, GTK_ALIGN_CENTER); gtk_widget_add_css_class (self->label_widget, "circular-lozenge"); gtk_widget_add_css_class (self->label_widget, "large"); gtk_box_append (GTK_BOX (container), self->label_widget); self->title_label = gtk_label_new (NULL); gtk_label_set_justify (GTK_LABEL (self->title_label), GTK_JUSTIFY_CENTER); gtk_label_set_wrap (GTK_LABEL (self->title_label), TRUE); gtk_label_set_wrap_mode (GTK_LABEL (self->title_label), PANGO_WRAP_WORD_CHAR); gtk_label_set_xalign (GTK_LABEL (self->title_label), 0.5); gtk_widget_add_css_class (self->title_label, "title-2"); gtk_box_append (GTK_BOX (self), self->title_label); bz_lozenge_rebuild (self); } GtkWidget * bz_lozenge_new (void) { return g_object_new (BZ_TYPE_LOZENGE, NULL); } void bz_lozenge_set_title (BzLozenge *self, const gchar *title) { g_return_if_fail (BZ_IS_LOZENGE (self)); if (g_strcmp0 (self->title, title) == 0) return; g_clear_pointer (&self->title, g_free); self->title = g_strdup (title); bz_lozenge_rebuild (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLE]); } const gchar * bz_lozenge_get_title (BzLozenge *self) { g_return_val_if_fail (BZ_IS_LOZENGE (self), NULL); return self->title; } void bz_lozenge_set_label (BzLozenge *self, const gchar *label) { g_return_if_fail (BZ_IS_LOZENGE (self)); if (g_strcmp0 (self->label, label) == 0) return; g_clear_pointer (&self->label, g_free); self->label = g_strdup (label); bz_lozenge_rebuild (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LABEL]); } const gchar * bz_lozenge_get_label (BzLozenge *self) { g_return_val_if_fail (BZ_IS_LOZENGE (self), NULL); return self->label; } void bz_lozenge_set_icon_names (BzLozenge *self, const gchar *const *icon_names) { g_return_if_fail (BZ_IS_LOZENGE (self)); g_clear_pointer (&self->icon_names, g_strfreev); self->icon_names = g_strdupv ((gchar **) icon_names); bz_lozenge_rebuild (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ICON_NAMES]); } gchar ** bz_lozenge_get_icon_names (BzLozenge *self) { g_return_val_if_fail (BZ_IS_LOZENGE (self), NULL); return g_strdupv (self->icon_names); } void bz_lozenge_set_importance (BzLozenge *self, BzImportance importance) { g_return_if_fail (BZ_IS_LOZENGE (self)); if (self->importance == importance) return; self->importance = importance; bz_lozenge_rebuild (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IMPORTANCE]); } BzImportance bz_lozenge_get_importance (BzLozenge *self) { g_return_val_if_fail (BZ_IS_LOZENGE (self), BZ_IMPORTANCE_NEUTRAL); return self->importance; } static void bz_lozenge_rebuild (BzLozenge *self) { GtkWidget *child = NULL; const gchar *css_class = NULL; g_return_if_fail (BZ_IS_LOZENGE (self)); while ((child = gtk_widget_get_first_child (self->icon_box)) != NULL) gtk_box_remove (GTK_BOX (self->icon_box), child); if (self->icon_names != NULL && self->icon_names[0] != NULL) { gtk_widget_set_visible (self->icon_box, TRUE); gtk_widget_set_visible (self->label_widget, FALSE); css_class = bz_context_row_importance_to_css_class (self->importance); for (gsize i = 0; self->icon_names[i] != NULL; i++) { GtkWidget *icon = NULL; icon = gtk_image_new_from_icon_name (self->icon_names[i]); gtk_image_set_pixel_size (GTK_IMAGE (icon), 24); gtk_widget_set_halign (icon, GTK_ALIGN_CENTER); gtk_widget_add_css_class (icon, "circular-lozenge"); gtk_widget_add_css_class (icon, css_class); gtk_widget_add_css_class (icon, "large"); gtk_box_append (GTK_BOX (self->icon_box), icon); } } else if (self->label != NULL && *self->label != '\0') { const gchar *new_classes[3] = { "circular-lozenge", "large", NULL }; gtk_widget_set_visible (self->icon_box, FALSE); gtk_widget_set_visible (self->label_widget, TRUE); gtk_label_set_markup (GTK_LABEL (self->label_widget), self->label); gtk_widget_set_css_classes (self->label_widget, new_classes); css_class = bz_context_row_importance_to_css_class (self->importance); gtk_widget_add_css_class (self->label_widget, css_class); } else { gtk_widget_set_visible (self->icon_box, FALSE); gtk_widget_set_visible (self->label_widget, FALSE); } if (self->title != NULL && *self->title != '\0') { gtk_label_set_text (GTK_LABEL (self->title_label), self->title); gtk_widget_set_visible (self->title_label, TRUE); } else { gtk_widget_set_visible (self->title_label, FALSE); } } bazaar-org-bazaar-b6e9a65/src/bz-lozenge.h000066400000000000000000000031301522167256300204420ustar00rootroot00000000000000/* bz-lozenge.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-context-row.h" #include G_BEGIN_DECLS #define BZ_TYPE_LOZENGE (bz_lozenge_get_type ()) G_DECLARE_FINAL_TYPE (BzLozenge, bz_lozenge, BZ, LOZENGE, GtkBox) GtkWidget *bz_lozenge_new (void); void bz_lozenge_set_title (BzLozenge *self, const gchar *title); const gchar * bz_lozenge_get_title (BzLozenge *self); void bz_lozenge_set_label (BzLozenge *self, const gchar *label); const gchar * bz_lozenge_get_label (BzLozenge *self); void bz_lozenge_set_icon_names (BzLozenge *self, const gchar *const *icon_names); gchar ** bz_lozenge_get_icon_names (BzLozenge *self); void bz_lozenge_set_importance (BzLozenge *self, BzImportance importance); BzImportance bz_lozenge_get_importance (BzLozenge *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-main-config.txt000066400000000000000000000014251522167256300215630ustar00rootroot00000000000000prefix=bz name=main_config parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-hook.h" include="bz-search-bias.h" ensure=BZ_TYPE_HOOK ensure=BZ_TYPE_HOOK_DIALOG ensure=BZ_TYPE_HOOK_DIALOG_OPTION ensure=BZ_TYPE_SEARCH_BIAS property=txt_blocklist_paths GListModel G_TYPE_LIST_MODEL object property=blocklist_version int G_TYPE_INT int property=yaml_blocklist_paths GListModel G_TYPE_LIST_MODEL object property=curated_config_version int G_TYPE_INT int property=curated_config_paths GListModel G_TYPE_LIST_MODEL object property=override_eol_markings GListModel G_TYPE_LIST_MODEL object property=hooks GListModel G_TYPE_LIST_MODEL object property=search_biases GListModel G_TYPE_LIST_MODEL object property=start_on_curated gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-malcontent-service.c000066400000000000000000000154011522167256300226000ustar00rootroot00000000000000/* bz-malcontent-service.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include #include "bz-malcontent-service.h" struct _BzMalcontentService { GObject parent_instance; MctManager *manager; BzStateInfo *state; GDBusConnection *bus; MctAppFilter *filter; gulong changed_id; }; G_DEFINE_FINAL_TYPE (BzMalcontentService, bz_malcontent_service, G_TYPE_OBJECT) static void fetch_blocked_ids (BzMalcontentService *self); static void apply_filter (BzMalcontentService *self, MctAppFilter *filter); static void on_filter_loaded (GObject *source, GAsyncResult *result, gpointer user_data); static void on_filter_changed (MctManager *manager, guint64 user_id, gpointer user_data); static void bz_malcontent_service_dispose (GObject *object) { BzMalcontentService *self = NULL; self = BZ_MALCONTENT_SERVICE (object); g_signal_handler_disconnect (self->manager, self->changed_id); g_clear_object (&self->manager); g_clear_object (&self->state); g_clear_object (&self->bus); g_clear_pointer (&self->filter, mct_app_filter_unref); G_OBJECT_CLASS (bz_malcontent_service_parent_class)->dispose (object); } static void bz_malcontent_service_class_init (BzMalcontentServiceClass *klass) { G_OBJECT_CLASS (klass)->dispose = bz_malcontent_service_dispose; } static void bz_malcontent_service_init (BzMalcontentService *self) { } BzMalcontentService * bz_malcontent_service_new (GDBusConnection *bus, BzStateInfo *state) { BzMalcontentService *self = NULL; self = g_object_new (BZ_TYPE_MALCONTENT_SERVICE, NULL); self->state = g_object_ref (state); self->bus = g_object_ref (bus); self->manager = mct_manager_new (bus); self->changed_id = g_signal_connect (self->manager, "app-filter-changed", G_CALLBACK (on_filter_changed), self); return self; } void bz_malcontent_service_start (BzMalcontentService *self) { mct_manager_get_app_filter_async (self->manager, getuid (), MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE, NULL, on_filter_loaded, self); } static void fetch_blocked_ids (BzMalcontentService *self) { g_autoptr (GError) local_error = NULL; g_autoptr (GVariant) result = NULL; g_autoptr (GVariant) prop = NULL; g_autoptr (GVariant) filter_tuple = NULL; g_autoptr (GtkStringList) blocked = NULL; g_autofree char *object_path = NULL; gboolean is_allowlist = FALSE; GVariantIter *iter = NULL; const char *ref = NULL; object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%d", (int) getuid ()); result = g_dbus_connection_call_sync ( self->bus, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "Get", g_variant_new ("(ss)", "com.endlessm.ParentalControls.AppFilter", "AppFilter"), G_VARIANT_TYPE ("(v)"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &local_error); if (result == NULL) { g_warning ("failed to fetch malcontent AppFilter from D-Bus: %s", local_error->message); return; } prop = g_variant_get_child_value (result, 0); filter_tuple = g_variant_get_variant (prop); g_variant_get (filter_tuple, "(bas)", &is_allowlist, &iter); blocked = gtk_string_list_new (NULL); while (g_variant_iter_next (iter, "s", &ref)) gtk_string_list_append (blocked, ref); g_variant_iter_free (iter); bz_state_info_set_parental_blocked_ids (self->state, G_LIST_MODEL (blocked)); } static void apply_filter (BzMalcontentService *self, MctAppFilter *filter) { const char *const *oars_sections = NULL; int max_age = -1; g_clear_pointer (&self->filter, mct_app_filter_unref); self->filter = mct_app_filter_ref (filter); oars_sections = mct_app_filter_get_oars_sections (self->filter); for (gsize i = 0; oars_sections[i] != NULL; i++) { MctAppFilterOarsValue filter_value; int section_age; filter_value = mct_app_filter_get_oars_value (self->filter, oars_sections[i]); if (filter_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN) continue; section_age = as_content_rating_attribute_to_csm_age (oars_sections[i], (AsContentRatingValue) filter_value); if (section_age > max_age) max_age = section_age; } bz_state_info_set_parental_age_rating (self->state, max_age); fetch_blocked_ids (self); } static void on_filter_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { BzMalcontentService *self = NULL; g_autoptr (MctAppFilter) filter = NULL; g_autoptr (GError) local_error = NULL; self = user_data; filter = mct_manager_get_app_filter_finish (self->manager, result, &local_error); if (filter != NULL) apply_filter (self, filter); else g_warning ("Failed to load malcontent app filter: %s", local_error->message); } static void on_filter_changed (MctManager *manager, guint64 user_id, gpointer user_data) { BzMalcontentService *self = NULL; self = user_data; if (user_id != (guint64) getuid ()) return; mct_manager_get_app_filter_async (self->manager, getuid (), MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, on_filter_loaded, self); } bazaar-org-bazaar-b6e9a65/src/bz-malcontent-service.h000066400000000000000000000023301522167256300226020ustar00rootroot00000000000000/* bz-malcontent-service.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-state-info.h" #include #include G_BEGIN_DECLS #define BZ_TYPE_MALCONTENT_SERVICE bz_malcontent_service_get_type () G_DECLARE_FINAL_TYPE (BzMalcontentService, bz_malcontent_service, BZ, MALCONTENT_SERVICE, GObject) BzMalcontentService * bz_malcontent_service_new (GDBusConnection *bus, BzStateInfo *state); void bz_malcontent_service_start (BzMalcontentService *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-marshalers.list000066400000000000000000000026251522167256300216740ustar00rootroot00000000000000# see glib-genmarshal(1) for a detailed description of the file format, # possible parameter types are: # VOID indicates no return type, or no extra # parameters. if VOID is used as the parameter # list, no additional parameters may be present. # BOOLEAN for boolean types (gboolean) # CHAR for signed char types (char) # UCHAR for unsigned char types (guchar) # INT for signed integer types (int) # UINT for unsigned integer types (guint) # LONG for signed long integer types (glong) # ULONG for unsigned long integer types (gulong) # INT64 for signed 64bit integer types (gint64) # UINT64 for unsigned 64bit integer types (guint64) # ENUM for enumeration types (int) # FLAGS for flag enumeration types (guint) # FLOAT for single-precision float types (float) # DOUBLE for double-precision float types (double) # STRING for string types (char *) # BOXED for boxed (anonymous but reference counted) types (GBoxed*) # PARAM for GParamSpec or derived types (GParamSpec*) # POINTER for anonymous pointer types (gpointer) # OBJECT for GObject or derived types (GObject*) # VARIANT for GVariant types (GVariant*) # NONE deprecated alias for VOID # BOOL deprecated alias for BOOLEAN VOID:OBJECT,OBJECT VOID:OBJECT,BOXED bazaar-org-bazaar-b6e9a65/src/bz-metainfo-preview.c000066400000000000000000000167531522167256300222720ustar00rootroot00000000000000/* bz-metainfo-preview.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-entry-group.h" #include "bz-featured-carousel.h" #include "bz-metainfo-preview.h" #include "bz-rich-app-tile.h" #include "bz-util.h" BZ_DEFINE_DATA ( pick_files, PickFiles, { DexPromise *promise; GFile *metainfo_file; }, BZ_RELEASE_DATA (promise, dex_unref); BZ_RELEASE_DATA (metainfo_file, g_object_unref)) static void on_icon_chosen (GtkFileDialog *dialog, GAsyncResult *result, PickFilesData *data); static void on_metainfo_chosen (GtkFileDialog *dialog, GAsyncResult *result, DexPromise *promise); static BzMetainfoPickResult * bz_metainfo_pick_result_copy (BzMetainfoPickResult *result); GType bz_metainfo_pick_result_get_type (void) { static GType type = 0; if (type == 0) type = g_boxed_type_register_static ( "BzMetainfoPickResult", (GBoxedCopyFunc) bz_metainfo_pick_result_copy, (GBoxedFreeFunc) bz_metainfo_pick_result_free); return type; } void bz_metainfo_pick_result_free (BzMetainfoPickResult *result) { g_clear_object (&result->metainfo_file); g_clear_object (&result->icon_file); g_free (result); } DexFuture * bz_metainfo_preview_pick_files (void) { g_autoptr (DexPromise) promise = dex_promise_new (); g_autoptr (GtkFileDialog) dialog = NULL; g_autoptr (GtkFileFilter) filter = NULL; g_autoptr (GListStore) filters = NULL; dialog = gtk_file_dialog_new (); gtk_file_dialog_set_title (dialog, _ ("Select Metainfo File")); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _ ("Metainfo Files")); gtk_file_filter_add_pattern (filter, "*.metainfo.xml*"); gtk_file_filter_add_pattern (filter, "*.appdata.xml*"); filters = g_list_store_new (GTK_TYPE_FILE_FILTER); g_list_store_append (filters, filter); gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); gtk_file_dialog_open ( dialog, NULL, NULL, (GAsyncReadyCallback) on_metainfo_chosen, dex_ref (promise)); return DEX_FUTURE (g_steal_pointer (&promise)); } static BzMetainfoPickResult * bz_metainfo_pick_result_copy (BzMetainfoPickResult *result) { BzMetainfoPickResult *copy = NULL; copy = g_new0 (BzMetainfoPickResult, 1); copy->metainfo_file = result->metainfo_file ? g_object_ref (result->metainfo_file) : NULL; copy->icon_file = result->icon_file ? g_object_ref (result->icon_file) : NULL; return copy; } static void on_metainfo_chosen (GtkFileDialog *dialog, GAsyncResult *result, DexPromise *promise) { g_autoptr (DexPromise) owned_promise = promise; g_autoptr (GError) local_error = NULL; g_autoptr (GFile) metainfo_file = NULL; g_autoptr (GtkFileDialog) icon_dialog = NULL; g_autoptr (GtkFileFilter) filter = NULL; g_autoptr (GListStore) filters = NULL; PickFilesData *data = NULL; metainfo_file = gtk_file_dialog_open_finish (dialog, result, &local_error); if (metainfo_file == NULL) { dex_promise_reject (owned_promise, g_steal_pointer (&local_error)); return; } data = pick_files_data_new (); data->promise = g_steal_pointer (&owned_promise); data->metainfo_file = g_steal_pointer (&metainfo_file); icon_dialog = gtk_file_dialog_new (); gtk_file_dialog_set_title (icon_dialog, _ ("Select Icon (Optional)")); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _ ("Image Files")); gtk_file_filter_add_pattern (filter, "*.png"); gtk_file_filter_add_pattern (filter, "*.svg"); gtk_file_filter_add_pattern (filter, "*.jpg"); gtk_file_filter_add_pattern (filter, "*.jpeg"); filters = g_list_store_new (GTK_TYPE_FILE_FILTER); g_list_store_append (filters, filter); gtk_file_dialog_set_filters (icon_dialog, G_LIST_MODEL (filters)); gtk_file_dialog_open ( icon_dialog, NULL, NULL, (GAsyncReadyCallback) on_icon_chosen, data); } static void on_icon_chosen (GtkFileDialog *dialog, GAsyncResult *result, PickFilesData *data) { g_autoptr (PickFilesData) owned_data = data; g_autoptr (GFile) icon_file = NULL; BzMetainfoPickResult *pick = NULL; icon_file = gtk_file_dialog_open_finish (dialog, result, NULL); pick = g_new0 (BzMetainfoPickResult, 1); pick->metainfo_file = g_object_ref (owned_data->metainfo_file); pick->icon_file = g_steal_pointer (&icon_file); dex_promise_resolve_boxed ( owned_data->promise, bz_metainfo_pick_result_get_type (), g_steal_pointer (&pick)); } AdwNavigationPage * create_entry_group_preview_page (BzEntryGroup *group) { AdwNavigationPage *page = NULL; GtkWidget *toolbar_view = NULL; AdwHeaderBar *header_bar = NULL; GtkBox *box = NULL; BzFeaturedCarousel *carousel = NULL; BzRichAppTile *tile = NULL; GtkWidget *carousel_clamp = NULL; GtkWidget *tile_clamp = NULL; GtkWidget *scroll = NULL; g_autoptr (GListStore) store = NULL; store = g_list_store_new (BZ_TYPE_ENTRY_GROUP); g_list_store_append (store, group); carousel = bz_featured_carousel_new (); bz_featured_carousel_set_model (carousel, G_LIST_MODEL (store)); gtk_widget_set_can_target (GTK_WIDGET (carousel), FALSE); carousel_clamp = adw_clamp_new (); adw_clamp_set_maximum_size (ADW_CLAMP (carousel_clamp), 1500); adw_clamp_set_tightening_threshold (ADW_CLAMP (carousel_clamp), 1400); adw_clamp_set_child (ADW_CLAMP (carousel_clamp), GTK_WIDGET (carousel)); tile = BZ_RICH_APP_TILE (bz_rich_app_tile_new ()); bz_rich_app_tile_set_group (tile, group); tile_clamp = adw_clamp_new (); adw_clamp_set_maximum_size (ADW_CLAMP (tile_clamp), 350); adw_clamp_set_child (ADW_CLAMP (tile_clamp), GTK_WIDGET (tile)); box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 12)); gtk_widget_set_margin_top (GTK_WIDGET (box), 24); gtk_widget_set_margin_bottom (GTK_WIDGET (box), 24); gtk_widget_set_margin_start (GTK_WIDGET (box), 24); gtk_widget_set_margin_end (GTK_WIDGET (box), 24); gtk_box_append (box, GTK_WIDGET (carousel_clamp)); gtk_box_append (box, GTK_WIDGET (tile_clamp)); scroll = gtk_scrolled_window_new (); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scroll), GTK_WIDGET (box)); gtk_widget_set_vexpand (scroll, TRUE); header_bar = ADW_HEADER_BAR (adw_header_bar_new ()); toolbar_view = adw_toolbar_view_new (); adw_toolbar_view_add_top_bar (ADW_TOOLBAR_VIEW (toolbar_view), GTK_WIDGET (header_bar)); adw_toolbar_view_set_content (ADW_TOOLBAR_VIEW (toolbar_view), scroll); page = adw_navigation_page_new (toolbar_view, _ ("Preview")); return page; } bazaar-org-bazaar-b6e9a65/src/bz-metainfo-preview.h000066400000000000000000000023411522167256300222630ustar00rootroot00000000000000/* bz-metainfo-preview.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include #include #include #include "bz-entry-group.h" G_BEGIN_DECLS typedef struct { GFile *metainfo_file; GFile *icon_file; } BzMetainfoPickResult; void bz_metainfo_pick_result_free (BzMetainfoPickResult *result); GType bz_metainfo_pick_result_get_type (void); DexFuture * bz_metainfo_preview_pick_files (void); AdwNavigationPage * create_entry_group_preview_page (BzEntryGroup *group); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-newline-parser.c000066400000000000000000000112501522167256300217270ustar00rootroot00000000000000/* bz-newline-parser.c * * Copyright 2025 Eva M * * 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 */ #define G_LOG_DOMAIN "BAZAAR::NEWLINE-TXT-PARSER" #include "config.h" #include "bz-hash-table-object.h" #include "bz-newline-parser.h" #include "bz-parser.h" struct _BzNewlineParser { GObject parent_instance; gboolean comments; guint max_lines; }; static void parser_iface_init (BzParserInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzNewlineParser, bz_newline_parser, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (BZ_TYPE_PARSER, parser_iface_init)) static void destroy_gvalue (GValue *value); static void bz_newline_parser_dispose (GObject *object) { BzNewlineParser *self = BZ_NEWLINE_PARSER (object); (void) self; G_OBJECT_CLASS (bz_newline_parser_parent_class)->dispose (object); } static void bz_newline_parser_class_init (BzNewlineParserClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_newline_parser_dispose; } static void bz_newline_parser_init (BzNewlineParser *self) { } static GHashTable * bz_newline_parser_real_process_bytes (BzParser *iface_self, GBytes *bytes, GError **error) { BzNewlineParser *self = BZ_NEWLINE_PARSER (iface_self); gsize size = 0; const guchar *data = NULL; g_autofree char *contents = NULL; g_autoptr (GHashTable) set = NULL; guint n_ids = 0; char *beg = NULL; char *end = NULL; g_autoptr (BzHashTableObject) obj = NULL; GValue *value = NULL; g_autoptr (GHashTable) ret = NULL; g_return_val_if_fail (BZ_IS_NEWLINE_PARSER (self), NULL); g_return_val_if_fail (bytes != NULL, NULL); data = g_bytes_get_data (bytes, &size); contents = g_memdup2 (data, size + 1); contents[size] = '\0'; set = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); for (beg = contents, end = g_utf8_strchr (beg, -1, '\n'); beg != NULL && *beg != '\0'; beg = end + 1, end = g_utf8_strchr (beg, -1, '\n')) { g_autofree char *line = NULL; if (end == NULL) g_warning ("Data has no terminating newline"); if ((self->comments && g_str_has_prefix (beg, "#")) || (end != NULL && end - beg <= 1) || (end == NULL && *beg == '\0')) { if (end != NULL) continue; else break; } if (end != NULL) line = g_strndup (beg, end - beg); else line = g_strdup (beg); if (g_hash_table_contains (set, line)) g_warning ("Duplicate line %s detected in data", line); else g_hash_table_replace (set, g_steal_pointer (&line), NULL); if (end == NULL) break; if (self->max_lines > 0 && ++n_ids > self->max_lines) { g_warning ("Data has a lot of lines, automatically " "truncating to %d", self->max_lines); break; } } obj = bz_hash_table_object_new (); bz_hash_table_object_set_hash_table (obj, set); value = g_new0 (typeof (*value), 1); g_value_init (value, G_TYPE_OBJECT); g_value_set_object (value, obj); ret = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) destroy_gvalue); g_hash_table_replace (ret, g_strdup ("/"), g_steal_pointer (&value)); return g_steal_pointer (&ret); } static void parser_iface_init (BzParserInterface *iface) { iface->process_bytes = bz_newline_parser_real_process_bytes; } BzNewlineParser * bz_newline_parser_new (gboolean comments, guint max_lines) { BzNewlineParser *parser = NULL; parser = g_object_new (BZ_TYPE_NEWLINE_PARSER, NULL); parser->comments = comments; parser->max_lines = max_lines; return parser; } static void destroy_gvalue (GValue *value) { g_value_unset (value); g_free (value); } bazaar-org-bazaar-b6e9a65/src/bz-newline-parser.h000066400000000000000000000020601522167256300217330ustar00rootroot00000000000000/* bz-newline-parser.h * * Copyright 2025 Eva M * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_NEWLINE_PARSER (bz_newline_parser_get_type ()) G_DECLARE_FINAL_TYPE (BzNewlineParser, bz_newline_parser, BZ, NEWLINE_PARSER, GObject) BzNewlineParser * bz_newline_parser_new (gboolean comments, guint max_lines); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-parser.c000066400000000000000000000026651522167256300203020ustar00rootroot00000000000000/* bz-parser.c * * Copyright 2025 Eva M * * 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 */ #include "bz-parser.h" G_DEFINE_INTERFACE (BzParser, bz_parser, G_TYPE_OBJECT) static GHashTable * bz_parser_real_process_bytes (BzParser *self, GBytes *bytes, GError **error) { return NULL; } static void bz_parser_default_init (BzParserInterface *iface) { iface->process_bytes = bz_parser_real_process_bytes; } GHashTable * bz_parser_process_bytes (BzParser *self, GBytes *bytes, GError **error) { g_return_val_if_fail (BZ_IS_PARSER (self), NULL); g_return_val_if_fail (bytes != NULL, NULL); return BZ_PARSER_GET_IFACE (self)->process_bytes ( self, bytes, error); } bazaar-org-bazaar-b6e9a65/src/bz-parser.h000066400000000000000000000023721522167256300203020ustar00rootroot00000000000000/* bz-parser.h * * Copyright 2025 Eva M * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_PARSER (bz_parser_get_type ()) G_DECLARE_INTERFACE (BzParser, bz_parser, BZ, PARSER, GObject) struct _BzParserInterface { GTypeInterface parent_iface; GHashTable *(*process_bytes) (BzParser *self, GBytes *bytes, GError **error); }; GHashTable * bz_parser_process_bytes (BzParser *self, GBytes *bytes, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-preferences-dialog.blp000066400000000000000000000040621522167256300230700ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzPreferencesDialog: Adw.PreferencesDialog { content-height: 500; search-enabled: true; width-request: 350; height-request: 100; Adw.Breakpoint { condition ("max-width: 625sp") setters { flag_buttons_box.max-children-per-line: 6; } } Adw.PreferencesPage { title: _("Preferences"); use-underline: true; banner: Adw.Banner { sensitive: bind $invert_boolean(template.state as <$BzStateInfo>.syncing as ) as ; revealed: bind template.state as <$BzStateInfo>.metered_connection as ; title: _("Network connection is metered — automatic store data refresh is paused"); button-label: _("Refresh Manually"); action-name: "app.sync-remotes"; }; Adw.PreferencesGroup { title: _("Content Filters"); Adw.SwitchRow only_foss_switch { title: _("Free Software Only"); subtitle: _("Hide proprietary apps when browsing and searching"); } Adw.SwitchRow only_flathub_switch { title: _("Flathub Results Only"); subtitle: _("Limit search and browse results to apps only available on Flathub"); } Adw.SwitchRow only_verified_switch { title: _("Verified Results Only"); subtitle: _("Hide results that are not verified on Flathub"); } Adw.SwitchRow hide_eol_switch { title: _("Hide End-of-Life Apps"); subtitle: _("Hide apps which are no longer supported by their developers"); } } Adw.PreferencesGroup { title: _("Progress Bar Theme"); Adw.ActionRow { child: Box { margin-top: 6; margin-bottom: 6; halign: center; FlowBox flag_buttons_box { styles [ "accent-button-box", ] orientation: horizontal; column-spacing: 4; row-spacing: 4; halign: center; homogeneous: true; max-children-per-line: 11; selection-mode: none; } }; } } } } bazaar-org-bazaar-b6e9a65/src/bz-preferences-dialog.c000066400000000000000000000246461522167256300225470ustar00rootroot00000000000000/* bz-preferences-dialog.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-preferences-dialog.h" #include typedef struct { const char *id; const char *style_class; const char *tooltip; } BarTheme; static const BarTheme bar_themes[] = { { "accent-color", "accent-color-theme", N_ ("Accent Color") }, { "pride-rainbow-flag", "pride-rainbow-flag-theme", N_ ("Pride Colors") }, { "lesbian-pride-flag", "lesbian-pride-flag-theme", N_ ("Lesbian Pride Colors") }, { "gay-pride-flag", "gay-pride-flag-theme", N_ ("Male Homosexual Pride Colors") }, { "transgender-flag", "transgender-flag-theme", N_ ("Transgender Pride Colors") }, { "nonbinary-flag", "nonbinary-flag-theme", N_ ("Nonbinary Pride Colors") }, { "bisexual-flag", "bisexual-flag-theme", N_ ("Bisexual Pride Colors") }, { "asexual-flag", "asexual-flag-theme", N_ ("Asexual Pride Colors") }, { "pansexual-flag", "pansexual-flag-theme", N_ ("Pansexual Pride Colors") }, { "aromantic-flag", "aromantic-flag-theme", N_ ("Aromantic Pride Colors") }, { "genderfluid-flag", "genderfluid-flag-theme", N_ ("Genderfluid Pride Colors") }, { "polysexual-flag", "polysexual-flag-theme", N_ ("Polysexual Pride Colors") }, { "omnisexual-flag", "omnisexual-flag-theme", N_ ("Omnisexual Pride Colors") }, { "aroace-flag", "aroace-flag-theme", N_ ("Aroace Pride Colors") }, { "agender-flag", "agender-flag-theme", N_ ("Agender Pride Colors") }, { "genderqueer-flag", "genderqueer-flag-theme", N_ ("Genderqueer Pride Colors") }, { "intersex-flag", "intersex-flag-theme", N_ ("Intersex Pride Colors") }, { "demigender-flag", "demigender-flag-theme", N_ ("Demigender Pride Colors") }, { "biromantic-flag", "biromantic-flag-theme", N_ ("Biromantic Pride Colors") }, { "disability-flag", "disability-flag-theme", N_ ("Disability Pride Colors") }, { "femboy-flag", "femboy-flag-theme", N_ ("Femboy Pride Colors") }, { "neutrois-flag", "neutrois-flag-theme", N_ ("Neutrois Pride Colors") }, }; struct _BzPreferencesDialog { AdwPreferencesDialog parent_instance; BzStateInfo *state; GSettings *settings; /* Template widgets */ AdwSwitchRow *only_foss_switch; AdwSwitchRow *only_flathub_switch; AdwSwitchRow *only_verified_switch; GtkFlowBox *flag_buttons_box; AdwSwitchRow *hide_eol_switch; GtkToggleButton *flag_buttons[G_N_ELEMENTS (bar_themes)]; }; G_DEFINE_FINAL_TYPE (BzPreferencesDialog, bz_preferences_dialog, ADW_TYPE_PREFERENCES_DIALOG) enum { PROP_0, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bind_settings (BzPreferencesDialog *self); static void create_flag_buttons (BzPreferencesDialog *self); static void bz_preferences_dialog_dispose (GObject *object) { BzPreferencesDialog *self = BZ_PREFERENCES_DIALOG (object); g_clear_object (&self->state); g_clear_object (&self->settings); G_OBJECT_CLASS (bz_preferences_dialog_parent_class)->dispose (object); } static void flag_button_toggled (GtkToggleButton *button, BzPreferencesDialog *self) { const char *theme_id = NULL; if (!gtk_toggle_button_get_active (button)) return; theme_id = g_object_get_data (G_OBJECT (button), "theme-id"); if (theme_id != NULL) { g_settings_set_string (self->settings, "global-progress-bar-theme", theme_id); } } static void global_progress_theme_settings_changed (BzPreferencesDialog *self, const char *key, GSettings *settings) { const char *theme = NULL; theme = g_settings_get_string (self->settings, "global-progress-bar-theme"); for (guint i = 0; i < G_N_ELEMENTS (bar_themes); i++) { if (g_strcmp0 (theme, bar_themes[i].id) == 0) { gtk_toggle_button_set_active (self->flag_buttons[i], TRUE); break; } } } static void create_flag_buttons (BzPreferencesDialog *self) { GtkToggleButton *first_button = NULL; for (guint i = 0; i < G_N_ELEMENTS (bar_themes); i++) { GtkToggleButton *button = NULL; button = GTK_TOGGLE_BUTTON (gtk_toggle_button_new ()); gtk_widget_set_tooltip_text (GTK_WIDGET (button), Q_ (bar_themes[i].tooltip)); gtk_widget_add_css_class (GTK_WIDGET (button), "accent-button"); gtk_widget_add_css_class (GTK_WIDGET (button), bar_themes[i].style_class); g_object_set_data_full (G_OBJECT (button), "theme-id", g_strdup (bar_themes[i].id), g_free); if (i == 0) { first_button = button; } else { gtk_toggle_button_set_group (button, first_button); } g_signal_connect (button, "toggled", G_CALLBACK (flag_button_toggled), self); self->flag_buttons[i] = button; gtk_flow_box_append (self->flag_buttons_box, GTK_WIDGET (button)); } } static void bind_settings (BzPreferencesDialog *self) { if (self->settings == NULL) return; /* Bind all boolean settings to their respective switches */ g_settings_bind (self->settings, "show-only-foss", self->only_foss_switch, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (self->settings, "show-only-flathub", self->only_flathub_switch, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (self->settings, "show-only-verified", self->only_verified_switch, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (self->settings, "hide-eol", self->hide_eol_switch, "active", G_SETTINGS_BIND_DEFAULT); g_signal_connect_object ( self->settings, "changed::global-progress-bar-theme", G_CALLBACK (global_progress_theme_settings_changed), self, G_CONNECT_SWAPPED); global_progress_theme_settings_changed (self, "global-progress-bar-theme", self->settings); } static void bz_preferences_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzPreferencesDialog *self = BZ_PREFERENCES_DIALOG (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, self->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_preferences_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { switch (prop_id) { case PROP_STATE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static void bz_preferences_dialog_class_init (BzPreferencesDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_preferences_dialog_set_property; object_class->get_property = bz_preferences_dialog_get_property; object_class->dispose = bz_preferences_dialog_dispose; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-preferences-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzPreferencesDialog, only_foss_switch); gtk_widget_class_bind_template_child (widget_class, BzPreferencesDialog, only_flathub_switch); gtk_widget_class_bind_template_child (widget_class, BzPreferencesDialog, only_verified_switch); gtk_widget_class_bind_template_child (widget_class, BzPreferencesDialog, flag_buttons_box); gtk_widget_class_bind_template_child (widget_class, BzPreferencesDialog, hide_eol_switch); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); } static void bz_preferences_dialog_init (BzPreferencesDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); create_flag_buttons (self); } AdwDialog * bz_preferences_dialog_new (BzStateInfo *state) { BzPreferencesDialog *dialog = NULL; g_return_val_if_fail (BZ_IS_STATE_INFO (state), NULL); dialog = g_object_new (BZ_TYPE_PREFERENCES_DIALOG, NULL); dialog->state = g_object_ref (state); g_object_get (state, "settings", &dialog->settings, NULL); bind_settings (dialog); return ADW_DIALOG (dialog); } bazaar-org-bazaar-b6e9a65/src/bz-preferences-dialog.h000066400000000000000000000021151522167256300225370ustar00rootroot00000000000000/* bz-preferences-dialog.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_PREFERENCES_DIALOG (bz_preferences_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzPreferencesDialog, bz_preferences_dialog, BZ, PREFERENCES_DIALOG, AdwPreferencesDialog) AdwDialog * bz_preferences_dialog_new (BzStateInfo *state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-pride-flag-config.txt000066400000000000000000000003401522167256300226440ustar00rootroot00000000000000prefix=bz name=pride_flag_config parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-pride-flag-spec.h" ensure=BZ_TYPE_PRIDE_FLAG_SPEC property=flag_specs GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-pride-flag-spec.txt000066400000000000000000000006311522167256300223340ustar00rootroot00000000000000prefix=bz name=pride_flag_spec parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-pride-flag-stripe-spec.h" ensure=BZ_TYPE_PRIDE_FLAG_STRIPE_SPEC property=id char G_TYPE_STRING string property=name char G_TYPE_STRING string property=homogeneous gboolean G_TYPE_BOOLEAN boolean property=direction char G_TYPE_STRING string property=stripes GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-pride-flag-stripe-spec.txt000066400000000000000000000003001522167256300236310ustar00rootroot00000000000000prefix=bz name=pride_flag_stripe_spec parent-prefix=g parent-name=object author=AUTOGEN include= property=rgba char G_TYPE_STRING string property=size double G_TYPE_DOUBLE double bazaar-org-bazaar-b6e9a65/src/bz-progress-bar.blp000066400000000000000000000001371522167256300217370ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzProgressBar: Adw.Bin { child: ProgressBar bar {}; } bazaar-org-bazaar-b6e9a65/src/bz-progress-bar.c000066400000000000000000000116541522167256300214120ustar00rootroot00000000000000/* bz-progress-bar.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include "bz-progress-bar.h" struct _BzProgressBar { AdwBin parent_instance; double fraction; AdwAnimation *animation; /* Template widgets */ GtkProgressBar *bar; }; G_DEFINE_FINAL_TYPE (BzProgressBar, bz_progress_bar, ADW_TYPE_BIN) enum { PROP_0, PROP_FRACTION, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_progress_bar_dispose (GObject *object) { BzProgressBar *self = BZ_PROGRESS_BAR (object); g_clear_object (&self->animation); G_OBJECT_CLASS (bz_progress_bar_parent_class)->dispose (object); } static void bz_progress_bar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzProgressBar *self = BZ_PROGRESS_BAR (object); switch (prop_id) { case PROP_FRACTION: g_value_set_double (value, bz_progress_bar_get_fraction (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_progress_bar_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzProgressBar *self = BZ_PROGRESS_BAR (object); switch (prop_id) { case PROP_FRACTION: bz_progress_bar_set_fraction (self, g_value_get_double (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_progress_bar_class_init (BzProgressBarClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_progress_bar_dispose; object_class->get_property = bz_progress_bar_get_property; object_class->set_property = bz_progress_bar_set_property; props[PROP_FRACTION] = g_param_spec_double ( "fraction", NULL, NULL, 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-progress-bar.ui"); gtk_widget_class_bind_template_child (widget_class, BzProgressBar, bar); } static void bz_progress_bar_init (BzProgressBar *self) { AdwAnimationTarget *target = NULL; AdwSpringParams *spring = NULL; gtk_widget_init_template (GTK_WIDGET (self)); target = adw_property_animation_target_new (G_OBJECT (self->bar), "fraction"); spring = adw_spring_params_new (1.0, 0.5, 200.0); self->animation = adw_spring_animation_new ( GTK_WIDGET (self), 0.0, 0.0, spring, target); adw_spring_animation_set_epsilon ( ADW_SPRING_ANIMATION (self->animation), 0.00025); } GtkWidget * bz_progress_bar_new (void) { return g_object_new (BZ_TYPE_PROGRESS_BAR, NULL); } void bz_progress_bar_set_fraction (BzProgressBar *self, double fraction) { double last = 0.0; double current = 0.0; g_return_if_fail (BZ_IS_PROGRESS_BAR (self)); last = self->fraction; self->fraction = CLAMP (fraction, 0.0, 1.0); current = gtk_progress_bar_get_fraction (self->bar); if (self->fraction < last || G_APPROX_VALUE (last, self->fraction, 0.001)) { adw_animation_reset (self->animation); gtk_progress_bar_set_fraction (self->bar, self->fraction); } else { adw_spring_animation_set_value_from ( ADW_SPRING_ANIMATION (self->animation), current); adw_spring_animation_set_value_to ( ADW_SPRING_ANIMATION (self->animation), self->fraction); adw_spring_animation_set_initial_velocity ( ADW_SPRING_ANIMATION (self->animation), adw_spring_animation_get_velocity ( ADW_SPRING_ANIMATION (self->animation))); adw_animation_play (self->animation); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FRACTION]); } double bz_progress_bar_get_fraction (BzProgressBar *self) { g_return_val_if_fail (BZ_IS_PROGRESS_BAR (self), 0.0); return self->fraction; } bazaar-org-bazaar-b6e9a65/src/bz-progress-bar.h000066400000000000000000000022301522167256300214050ustar00rootroot00000000000000/* bz-progress-bar.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_PROGRESS_BAR (bz_progress_bar_get_type ()) G_DECLARE_FINAL_TYPE (BzProgressBar, bz_progress_bar, BZ, PROGRESS_BAR, AdwBin) GtkWidget * bz_progress_bar_new (void); void bz_progress_bar_set_fraction (BzProgressBar *self, double fraction); double bz_progress_bar_get_fraction (BzProgressBar *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-release.txt000066400000000000000000000004201522167256300210060ustar00rootroot00000000000000prefix=bz name=release parent-prefix=g parent-name=object author=AUTOGEN include= property=description char G_TYPE_STRING string property=timestamp guint64 G_TYPE_UINT64 uint64 property=url char G_TYPE_STRING string property=version char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-releases-dialog.blp000066400000000000000000000013031522167256300223650ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzReleasesDialog: Adw.Dialog { title: _("Version History"); content-width: 550; content-height: 600; child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: true; } content: ScrolledWindow { propagate-natural-height: true; vexpand: true; hscrollbar-policy: never; child: Adw.Clamp { maximum-size: 500; tightening-threshold: 600; margin-top: 24; margin-bottom: 24; margin-start: 12; margin-end: 12; child: ListBox releases_box { styles ["boxed-list"] valign: start; selection-mode: none; }; }; }; }; }bazaar-org-bazaar-b6e9a65/src/bz-releases-list.blp000066400000000000000000000011211522167256300220770ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzReleasesList: Adw.Bin { visible: false; child: Box { orientation: vertical; spacing: 12; ListBox preview_box { styles [ "boxed-list", ] selection-mode: none; valign: start; } ListBox show_all_box { visible: false; styles [ "boxed-list", ] selection-mode: none; Adw.ButtonRow { title: _("_Version History"); use-underline: true; activated => $show_all_releases_cb(); end-icon-name: "go-next-symbolic"; } } }; } bazaar-org-bazaar-b6e9a65/src/bz-releases-list.c000066400000000000000000000436411522167256300215610ustar00rootroot00000000000000/* bz-releases-list.c * * Copyright 2025 Alexander Vanhee, Adam Masciola * * 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 */ #include #include "bz-appstream-description-render.h" #include "bz-fading-clamp.h" #include "bz-release.h" #include "bz-releases-list.h" #include "bz-template-callbacks.h" /* Dialog structure */ typedef struct { /* Template widgets */ AdwDialog parent_instance; GtkListBox *releases_box; GListModel *installed_versions; } BzReleasesDialog; typedef struct { AdwDialogClass parent_class; } BzReleasesDialogClass; static GType bz_releases_dialog_get_type (void) G_GNUC_CONST; G_DEFINE_TYPE (BzReleasesDialog, bz_releases_dialog, ADW_TYPE_DIALOG) /* Main widget structure */ struct _BzReleasesList { AdwBin parent_instance; GListModel *version_history; GListModel *installed_versions; /* Template widgets */ GtkListBox *preview_box; GtkBox *show_all_box; }; G_DEFINE_FINAL_TYPE (BzReleasesList, bz_releases_list, ADW_TYPE_BIN) enum { PROP_0, PROP_VERSION_HISTORY, PROP_INSTALLED_VERSIONS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static gboolean is_version_installed (GListModel *installed_versions, const char *version) { guint n_items = 0; if (!installed_versions || !version) return FALSE; n_items = g_list_model_get_n_items (installed_versions); for (guint i = 0; i < n_items; i++) { g_autoptr (GObject) item = NULL; item = g_list_model_get_item (installed_versions, i); if (GTK_IS_STRING_OBJECT (item)) { const char *installed_version = NULL; installed_version = gtk_string_object_get_string (GTK_STRING_OBJECT (item)); if (installed_version != NULL && g_strcmp0 (installed_version, version) == 0) return TRUE; } } return FALSE; } // From gs-common.c static char * format_timestamp (guint64 unix_time) { g_autoptr (GDateTime) then = NULL; g_autoptr (GDateTime) now = NULL; gint days, weeks, months, years; if (unix_time == 0) return NULL; then = g_date_time_new_from_unix_utc (unix_time); now = g_date_time_new_now_local (); if (then == NULL || now == NULL) return NULL; days = (gint) (g_date_time_difference (now, then) / G_TIME_SPAN_DAY); weeks = days / 7; months = days / 30; years = weeks / 52; if (days < 1) /* Translators: something happened less than a day ago */ return g_strdup (_ ("Today")); else if (days < 2) /* Translators: something happened more than a day ago but less than 2 days ago */ return g_strdup (_ ("Yesterday")); else if (days < 15) /* Translators: something happened days ago */ return g_strdup_printf (ngettext ("%d day ago", "%d days ago", days), days); else if (weeks < 8) /* Translators: something happened weeks ago */ return g_strdup_printf (ngettext ("%d week ago", "%d weeks ago", weeks), weeks); else if (years < 1) /* Translators: something happened months ago */ return g_strdup_printf (ngettext ("%d month ago", "%d months ago", months), months); else /* Translators: something happened years ago */ return g_strdup_printf (ngettext ("%d year ago", "%d years ago", years), years); } static char * format_timestamp_tooltip (guint64 unix_time) { g_autoptr (GDateTime) then = NULL; if (unix_time == 0) return NULL; then = g_date_time_new_from_unix_utc (unix_time); if (then == NULL) return NULL; /* TRANSLATORS: This is the date string with: day number, month name, year. i.e. "22 March 2026" */ return g_date_time_format (then, _ ("%e %B %Y")); } static GtkWidget * create_release_row (const char *version, const char *description, guint64 timestamp, const char *url, gboolean use_clamp, GListModel *installed_versions) { AdwActionRow *row = NULL; GtkBox *content_box = NULL; GtkBox *header_box = NULL; GtkLabel *version_label = NULL; GtkLabel *date_label = NULL; GtkLabel *installed_label = NULL; BzAppstreamDescriptionRender *description_widget = NULL; BzFadingClamp *fading_clamp = NULL; GtkBox *more_info_box = NULL; GtkLabel *more_info_label = NULL; GtkImage *more_info_icon = NULL; g_autofree char *date_str = NULL; g_autofree char *date_tooltip = NULL; g_autofree char *version_text = NULL; g_autofree char *markup = NULL; date_str = format_timestamp (timestamp); row = ADW_ACTION_ROW (adw_action_row_new ()); gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); content_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 3)); gtk_widget_set_margin_top (GTK_WIDGET (content_box), 15); gtk_widget_set_margin_bottom (GTK_WIDGET (content_box), 15); gtk_widget_set_margin_start (GTK_WIDGET (content_box), 15); gtk_widget_set_margin_end (GTK_WIDGET (content_box), 15); header_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8)); gtk_widget_set_size_request (GTK_WIDGET (header_box), -1, 24); version_text = g_strdup_printf (_ ("Version %s"), version); version_label = GTK_LABEL (gtk_label_new (version_text)); gtk_widget_add_css_class (GTK_WIDGET (version_label), "accent"); gtk_widget_add_css_class (GTK_WIDGET (version_label), "heading"); gtk_label_set_ellipsize (version_label, PANGO_ELLIPSIZE_END); gtk_widget_set_halign (GTK_WIDGET (version_label), GTK_ALIGN_START); gtk_box_append (header_box, GTK_WIDGET (version_label)); if (is_version_installed (installed_versions, version)) { installed_label = GTK_LABEL (gtk_label_new (_ ("Installed"))); gtk_widget_add_css_class (GTK_WIDGET (installed_label), "lozenge"); gtk_widget_add_css_class (GTK_WIDGET (installed_label), "small"); gtk_widget_set_halign (GTK_WIDGET (installed_label), GTK_ALIGN_START); gtk_widget_set_hexpand (GTK_WIDGET (installed_label), TRUE); gtk_box_append (header_box, GTK_WIDGET (installed_label)); } else { gtk_widget_set_hexpand (GTK_WIDGET (version_label), TRUE); } date_label = GTK_LABEL (gtk_label_new (date_str ? date_str : "")); gtk_widget_add_css_class (GTK_WIDGET (date_label), "dim-label"); gtk_widget_set_halign (GTK_WIDGET (date_label), GTK_ALIGN_END); date_tooltip = format_timestamp_tooltip (timestamp); if (date_tooltip != NULL) gtk_widget_set_tooltip_text (GTK_WIDGET (date_label), date_tooltip); gtk_box_append (header_box, GTK_WIDGET (date_label)); gtk_box_append (content_box, GTK_WIDGET (header_box)); if (description != NULL && *description) { description_widget = bz_appstream_description_render_new (); bz_appstream_description_render_set_appstream_description (description_widget, description); if (use_clamp) { fading_clamp = BZ_FADING_CLAMP (bz_fading_clamp_new ()); bz_fading_clamp_set_max_height (fading_clamp, 270); bz_fading_clamp_set_child (fading_clamp, GTK_WIDGET (description_widget)); gtk_widget_set_margin_top (GTK_WIDGET (fading_clamp), 10); gtk_box_append (content_box, GTK_WIDGET (fading_clamp)); } else { gtk_widget_set_margin_top (GTK_WIDGET (description_widget), 10); gtk_box_append (content_box, GTK_WIDGET (description_widget)); } } else { GtkLabel *fallback_label = NULL; fallback_label = GTK_LABEL (gtk_label_new (_ ("No details for this release"))); gtk_widget_set_margin_top (GTK_WIDGET (fallback_label), 5); gtk_label_set_selectable (fallback_label, TRUE); gtk_widget_add_css_class (GTK_WIDGET (fallback_label), "dim-label"); gtk_label_set_xalign (fallback_label, 0.0); gtk_label_set_wrap (fallback_label, TRUE); gtk_box_append (content_box, GTK_WIDGET (fallback_label)); } if (!use_clamp && url && *url) { more_info_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4)); markup = g_markup_printf_escaped ("%s", url, url, _ ("Get More Information")); more_info_label = GTK_LABEL (gtk_label_new (NULL)); gtk_label_set_markup (more_info_label, markup); gtk_widget_set_tooltip_text (GTK_WIDGET (more_info_label), url); gtk_box_append (more_info_box, GTK_WIDGET (more_info_label)); more_info_icon = GTK_IMAGE (gtk_image_new_from_icon_name ("external-link-symbolic")); gtk_image_set_pixel_size (more_info_icon, 12); gtk_widget_add_css_class (GTK_WIDGET (more_info_icon), "accent"); gtk_box_append (more_info_box, GTK_WIDGET (more_info_icon)); gtk_box_append (content_box, GTK_WIDGET (more_info_box)); } gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), GTK_WIDGET (content_box)); return GTK_WIDGET (row); } static void bz_releases_dialog_dispose (GObject *object) { BzReleasesDialog *self = (BzReleasesDialog *) object; g_clear_object (&self->installed_versions); G_OBJECT_CLASS (bz_releases_dialog_parent_class)->dispose (object); } static void bz_releases_dialog_class_init (BzReleasesDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_releases_dialog_dispose; gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-releases-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzReleasesDialog, releases_box); } static void bz_releases_dialog_init (BzReleasesDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_releases_dialog_new (GListModel *version_history, GListModel *installed_versions) { BzReleasesDialog *dialog = NULL; guint n_items = 0; dialog = g_object_new (bz_releases_dialog_get_type (), NULL); if (installed_versions) dialog->installed_versions = g_object_ref (installed_versions); if (version_history == NULL) return GTK_WIDGET (dialog); n_items = g_list_model_get_n_items (version_history); for (guint i = 0; i < n_items; i++) { g_autoptr (BzRelease) release = NULL; const char *version = NULL; const char *description = NULL; const char *url = NULL; guint64 timestamp = 0; GtkWidget *row = NULL; release = g_list_model_get_item (version_history, i); if (release == NULL) continue; version = bz_release_get_version (release); description = bz_release_get_description (release); url = bz_release_get_url (release); timestamp = bz_release_get_timestamp (release); row = create_release_row (version, description, timestamp, url, FALSE, dialog->installed_versions); gtk_list_box_append (dialog->releases_box, row); } return GTK_WIDGET (dialog); } static void clear_preview_box (BzReleasesList *self) { GtkWidget *child = NULL; g_return_if_fail (BZ_IS_RELEASES_LIST (self)); while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->preview_box))) != NULL) { if (child == GTK_WIDGET (self->show_all_box)) break; gtk_list_box_remove (self->preview_box, child); } } static void populate_preview_box (BzReleasesList *self) { guint n_items = 0; g_return_if_fail (BZ_IS_RELEASES_LIST (self)); clear_preview_box (self); if (self->version_history == NULL) { gtk_widget_set_visible (GTK_WIDGET (self->show_all_box), FALSE); return; } n_items = g_list_model_get_n_items (self->version_history); if (n_items == 0) { gtk_widget_set_visible (GTK_WIDGET (self->show_all_box), FALSE); return; } if (n_items > 0) { g_autoptr (BzRelease) release = NULL; const char *version = NULL; const char *description = NULL; guint64 timestamp = 0; GtkWidget *row = NULL; release = g_list_model_get_item (self->version_history, 0); if (release != NULL) { version = bz_release_get_version (release); description = bz_release_get_description (release); timestamp = bz_release_get_timestamp (release); row = create_release_row (version, description, timestamp, NULL, TRUE, self->installed_versions); gtk_list_box_insert (self->preview_box, row, 0); } } gtk_widget_set_visible (GTK_WIDGET (self->show_all_box), n_items > 0); } static void show_all_releases_cb (AdwButtonRow *button, BzReleasesList *self) { GtkWidget *dialog = NULL; GtkRoot *root = NULL; g_return_if_fail (BZ_IS_RELEASES_LIST (self)); root = gtk_widget_get_root (GTK_WIDGET (self)); if (root == NULL) return; dialog = bz_releases_dialog_new (self->version_history, self->installed_versions); adw_dialog_present (ADW_DIALOG (dialog), GTK_WIDGET (root)); } static void bz_releases_list_dispose (GObject *object) { BzReleasesList *self = BZ_RELEASES_LIST (object); g_clear_object (&self->version_history); g_clear_object (&self->installed_versions); G_OBJECT_CLASS (bz_releases_list_parent_class)->dispose (object); } static void bz_releases_list_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzReleasesList *self = BZ_RELEASES_LIST (object); switch (prop_id) { case PROP_VERSION_HISTORY: g_value_set_object (value, self->version_history); break; case PROP_INSTALLED_VERSIONS: g_value_set_object (value, self->installed_versions); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_releases_list_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzReleasesList *self = BZ_RELEASES_LIST (object); switch (prop_id) { case PROP_VERSION_HISTORY: bz_releases_list_set_version_history (self, g_value_get_object (value)); break; case PROP_INSTALLED_VERSIONS: g_clear_object (&self->installed_versions); self->installed_versions = g_value_dup_object (value); populate_preview_box (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_releases_list_class_init (BzReleasesListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_releases_list_dispose; object_class->get_property = bz_releases_list_get_property; object_class->set_property = bz_releases_list_set_property; props[PROP_VERSION_HISTORY] = g_param_spec_object ("version-history", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_INSTALLED_VERSIONS] = g_param_spec_object ("installed-versions", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_RELEASE); g_type_ensure (BZ_TYPE_APPSTREAM_DESCRIPTION_RENDER); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-releases-list.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzReleasesList, preview_box); gtk_widget_class_bind_template_child (widget_class, BzReleasesList, show_all_box); gtk_widget_class_bind_template_callback (widget_class, show_all_releases_cb); } static void bz_releases_list_init (BzReleasesList *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_releases_list_new (void) { return g_object_new (BZ_TYPE_RELEASES_LIST, NULL); } void bz_releases_list_set_version_history (BzReleasesList *self, GListModel *version_history) { g_return_if_fail (BZ_IS_RELEASES_LIST (self)); g_return_if_fail (version_history == NULL || G_IS_LIST_MODEL (version_history)); if (self->version_history == version_history) return; g_clear_object (&self->version_history); if (version_history != NULL) { self->version_history = g_object_ref (version_history); populate_preview_box (self); gtk_widget_set_visible (GTK_WIDGET (self), g_list_model_get_n_items (version_history) > 0); } else { clear_preview_box (self); gtk_widget_set_visible (GTK_WIDGET (self), FALSE); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VERSION_HISTORY]); } GListModel * bz_releases_list_get_version_history (BzReleasesList *self) { g_return_val_if_fail (BZ_IS_RELEASES_LIST (self), NULL); return self->version_history; } bazaar-org-bazaar-b6e9a65/src/bz-releases-list.h000066400000000000000000000025251522167256300215620ustar00rootroot00000000000000/* bz-releases-list.h * * Copyright 2025 Alexander Vanhee, Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_RELEASES_LIST (bz_releases_list_get_type ()) G_DECLARE_FINAL_TYPE (BzReleasesList, bz_releases_list, BZ, RELEASES_LIST, AdwBin) GtkWidget * bz_releases_list_new (void); GtkWidget * bz_releases_dialog_new (GListModel *version_history, GListModel *installed_versions); void bz_releases_list_set_version_history (BzReleasesList *self, GListModel *version_history); GListModel * bz_releases_list_get_version_history (BzReleasesList *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-repository.txt000066400000000000000000000003661522167256300216160ustar00rootroot00000000000000prefix=bz name=repository parent-prefix=g parent-name=object author=AUTOGEN property=is_user gboolean G_TYPE_BOOLEAN boolean property=title char G_TYPE_STRING string property=url char G_TYPE_STRING string property=name char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-result.c000066400000000000000000000166661522167256300203320ustar00rootroot00000000000000/* bz-result.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-result.h" struct _BzResult { GObject parent_instance; DexFuture *finally; GObject *object; GError *error; GTimer *timer; char *non_error_msg; }; G_DEFINE_FINAL_TYPE (BzResult, bz_result, G_TYPE_OBJECT); enum { PROP_0, PROP_PENDING, PROP_RESOLVED, PROP_REJECTED, PROP_OBJECT, PROP_MESSAGE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * future_finally (DexFuture *future, BzResult *self); static void bz_result_dispose (GObject *object) { BzResult *self = BZ_RESULT (object); dex_clear (&self->finally); g_clear_object (&self->object); g_clear_pointer (&self->error, g_error_free); g_clear_pointer (&self->timer, g_timer_destroy); g_clear_pointer (&self->non_error_msg, g_free); G_OBJECT_CLASS (bz_result_parent_class)->dispose (object); } static void bz_result_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzResult *self = BZ_RESULT (object); switch (prop_id) { case PROP_PENDING: g_value_set_boolean (value, bz_result_get_pending (self)); break; case PROP_RESOLVED: g_value_set_boolean (value, bz_result_get_resolved (self)); break; case PROP_REJECTED: g_value_set_boolean (value, bz_result_get_rejected (self)); break; case PROP_OBJECT: g_value_set_object (value, bz_result_get_object (self)); break; case PROP_MESSAGE: g_value_set_string (value, bz_result_get_message (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_result_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { // BzResult *self = BZ_RESULT (object); switch (prop_id) { case PROP_PENDING: case PROP_RESOLVED: case PROP_REJECTED: case PROP_OBJECT: case PROP_MESSAGE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_result_class_init (BzResultClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_result_set_property; object_class->get_property = bz_result_get_property; object_class->dispose = bz_result_dispose; props[PROP_PENDING] = g_param_spec_boolean ( "pending", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_RESOLVED] = g_param_spec_boolean ( "resolved", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_REJECTED] = g_param_spec_boolean ( "rejected", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_OBJECT] = g_param_spec_object ( "object", NULL, NULL, G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MESSAGE] = g_param_spec_string ( "message", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_result_init (BzResult *self) { } BzResult * bz_result_new (DexFuture *future) { BzResult *self = NULL; DexFutureStatus status = DEX_FUTURE_STATUS_PENDING; g_return_val_if_fail (DEX_IS_FUTURE (future), NULL); self = g_object_new (BZ_TYPE_RESULT, NULL); status = dex_future_get_status (future); switch (status) { case DEX_FUTURE_STATUS_PENDING: self->timer = g_timer_new (); self->finally = dex_future_finally ( dex_ref (future), (DexFutureCallback) future_finally, g_object_ref (self), g_object_unref); break; case DEX_FUTURE_STATUS_RESOLVED: self->object = g_value_dup_object (dex_future_get_value (future, NULL)); self->non_error_msg = g_strdup ("Object was already successfully resolved"); break; case DEX_FUTURE_STATUS_REJECTED: { g_autoptr (GError) local_error = NULL; dex_future_get_value (future, &local_error); self->error = g_error_copy (local_error); } break; default: g_assert_not_reached (); } return self; } gboolean bz_result_get_pending (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), FALSE); return self->finally != NULL; } gboolean bz_result_get_resolved (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), FALSE); return self->object != NULL; } gboolean bz_result_get_rejected (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), FALSE); return self->error != NULL; } gpointer bz_result_get_object (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), NULL); return self->object; } const char * bz_result_get_message (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), NULL); if (self->error != NULL) return self->error->message; else return self->non_error_msg; } DexFuture * bz_result_dup_future (BzResult *self) { g_return_val_if_fail (BZ_IS_RESULT (self), NULL); if (self->finally != NULL) return dex_ref (self->finally); else if (self->object != NULL) return dex_future_new_for_object (self->object); else if (self->error != NULL) return dex_future_new_for_error (g_error_copy (self->error)); else return NULL; } static DexFuture * future_finally (DexFuture *future, BzResult *self) { g_autoptr (GError) local_error = NULL; const GValue *value = NULL; dex_clear (&self->finally); g_timer_stop (self->timer); value = dex_future_get_value (future, &local_error); if (value != NULL) { self->object = g_value_dup_object (value); self->non_error_msg = g_strdup_printf ( "Successfully resolved object in %f seconds", g_timer_elapsed (self->timer, NULL)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_OBJECT]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MESSAGE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RESOLVED]); } else { self->error = g_error_copy (local_error); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MESSAGE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REJECTED]); } return dex_ref (future); } /* End of bz-result.c */ bazaar-org-bazaar-b6e9a65/src/bz-result.h000066400000000000000000000024331522167256300203220ustar00rootroot00000000000000/* bz-result.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_RESULT (bz_result_get_type ()) G_DECLARE_FINAL_TYPE (BzResult, bz_result, BZ, RESULT, GObject) BzResult * bz_result_new (DexFuture *future); gboolean bz_result_get_pending (BzResult *self); gboolean bz_result_get_resolved (BzResult *self); gboolean bz_result_get_rejected (BzResult *self); gpointer bz_result_get_object (BzResult *self); const char * bz_result_get_message (BzResult *self); DexFuture * bz_result_dup_future (BzResult *self); G_END_DECLS /* End of bz-result.h */ bazaar-org-bazaar-b6e9a65/src/bz-rich-app-tile.blp000066400000000000000000000141661522167256300217760ustar00rootroot00000000000000using Gtk 4.0; template $BzRichAppTile: $BzListTile { overflow: hidden; activated => $tile_clicked_cb(); accessibility { described-by: description; } child: Box { orientation: vertical; styles [ "rich-tile-card", ] $BzThemedEntryGroupRect picture_box { height-request: 200; styles [ "rich-screenshot-box", ] group: bind template.group as <$BzEntryGroup>; child: Box { margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; Image { icon-name: "image-missing-symbolic"; pixel-size: 96; halign: center; valign: center; hexpand: true; visible: bind screenshot.visible inverted; } $BzRoundedPicture screenshot { halign: center; hexpand: true; valign: center; paintable: bind template.ui-entry as <$BzEntry>.thumbnail-paintable; radius: 6; visible: bind $invert_boolean($is_null(template.ui-entry as <$BzEntry>.thumbnail-paintable) as ) as ; } }; } Box { margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; orientation: horizontal; spacing: 15; height-request: 64; $BzTransactIcon { valign: center; halign: center; width-request: 64; height-request: 64; info: $BzTransactIconInfo transact_icon_info { group: bind template.group as <$BzEntryGroup>; paintable: bind template.ui_entry as <$BzEntry>.icon-paintable; }; } Box { valign: center; hexpand: true; orientation: vertical; spacing: 5; Box { spacing: 6; Label title { css-name: "app-tile-title"; styles [ "heading", ] xalign: 0.0; ellipsize: end; label: bind template.group as <$BzEntryGroup>.title; max-width-chars: 18; } Image { styles [ "verified", ] visible: bind template.group as <$BzEntryGroup>.is-verified; icon-name: "verified-checkmark-symbolic"; pixel-size: 14; accessibility { label: _("Verified"); } } } Label description { visible: bind $is_null(template.group as <$BzEntryGroup>.eol) as ; css-name: "app-tile-description"; xalign: 0.0; yalign: 0.0; wrap: true; wrap-mode: word_char; ellipsize: end; vexpand: true; lines: 2; max-width-chars: 15; single-line-mode: true; label: bind template.group as <$BzEntryGroup>.description; styles [ "dimmed", ] } Label { visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.eol) as ) as ; css-name: "app-tile-description"; xalign: 0.0; yalign: 0.0; wrap: true; wrap-mode: word_char; ellipsize: end; vexpand: true; lines: 2; max-width-chars: 15; single-line-mode: true; label: _("Stopped Receiving Updates"); styles [ "warning", ] } } Stack action_stack { transition-type: crossfade; valign: center; hhomogeneous: false; interpolate-size: true; visible-child-name: bind try { $get_visible_page( template.group as <$BzEntryGroup>.installable, template.group as <$BzEntryGroup>.removable, template.removable-at-start as , template.tracker as <$BzTransactionEntryTracker>, template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus> ) as , $get_visible_page( template.group as <$BzEntryGroup>.installable, template.group as <$BzEntryGroup>.removable, template.removable-at-start as , null as <$BzTransactionEntryTracker>, null as <$BzTransactionEntryStatus> ) as }; StackPage { name: "get"; child: Button get_button { sensitive: bind $invert_boolean( $is_zero(template.group as <$BzEntryGroup>.installable-and-available) as ) as ; styles [ "medium-pill", ] valign: center; clicked => $install_button_clicked_cb(template); }; } StackPage { name: "open"; child: Button { sensitive: bind $invert_boolean( $is_zero(template.group as <$BzEntryGroup>.removable-and-available) as ) as ; styles [ "medium-pill", ] label: _("Open"); valign: center; clicked => $run_button_clicked_cb(template); }; } StackPage { name: "uninstall"; child: Button { sensitive: bind $invert_boolean( $is_zero(template.group as <$BzEntryGroup>.removable-and-available) as ) as ; styles [ "circular", ] icon-name: "user-trash-symbolic"; has-tooltip: true; tooltip-text: _("Uninstall"); valign: center; clicked => $remove_button_clicked_cb(template); }; } StackPage { name: "cancel"; child: Button { styles [ "circular", ] icon-name: "cross-large-circle-filled-symbolic"; has-tooltip: true; tooltip-text: _("Cancel"); valign: center; clicked => $cancel_button_clicked_cb(template); }; } StackPage { name: "empty"; child: Box {}; } } } }; } bazaar-org-bazaar-b6e9a65/src/bz-rich-app-tile.c000066400000000000000000000337771522167256300214540ustar00rootroot00000000000000/* bz-rich-app-tile.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include "bz-rich-app-tile.h" #include "bz-application.h" #include "bz-entry.h" #include "bz-rounded-picture.h" #include "bz-themed-entry-group-rect.h" #include "bz-transact-icon.h" #include "bz-util.h" #include struct _BzRichAppTile { BzListTile parent_instance; BzEntryGroup *group; BzEntry *ui_entry; DexFuture *ui_entry_resolve; gboolean removable_at_start; BzTransactionEntryTracker *tracker; GListModel *all_trackers; GtkWidget *picture_box; GtkWidget *get_button; BzTransactIconInfo *transact_icon_info; GtkWidget *action_stack; }; G_DEFINE_FINAL_TYPE (BzRichAppTile, bz_rich_app_tile, BZ_TYPE_LIST_TILE); enum { PROP_0, PROP_GROUP, PROP_UI_ENTRY, PROP_REMOVABLE_AT_START, PROP_TRACKER, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void update_ui_entry (BzRichAppTile *self); static void update_tracker (BzRichAppTile *self) { BzTransactionManager *manager = NULL; g_autoptr (GListModel) all = NULL; const char *group_id = NULL; g_autoptr (BzTransactionEntryTracker) found = NULL; manager = bz_state_info_get_transaction_manager (bz_state_info_get_default ()); if (manager != NULL) g_object_get (manager, "all-trackers", &all, NULL); if (self->group != NULL) group_id = bz_entry_group_get_id (self->group); if (all != NULL && group_id != NULL) { for (guint i = 0; i < g_list_model_get_n_items (all); i++) { g_autoptr (BzTransactionEntryTracker) tracker = NULL; BzEntry *entry = NULL; tracker = g_list_model_get_item (all, i); entry = bz_transaction_entry_tracker_get_entry (tracker); if (g_strcmp0 (entry != NULL ? bz_entry_get_id (entry) : NULL, group_id) == 0) { found = g_steal_pointer (&tracker); break; } } } if (g_set_object (&self->tracker, found)) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRACKER]); } static void on_all_trackers_changed (GListModel *model, guint position, guint removed, guint added, BzRichAppTile *self) { update_tracker (self); } static DexFuture * ui_entry_resolved_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzRichAppTile) self = NULL; const GValue *value = NULL; bz_weak_get_or_return_reject (self, wr); value = dex_future_get_value (future, NULL); if (value != NULL) { BzEntry *ui_entry = g_value_get_object (value); g_set_object (&self->ui_entry, ui_entry); } else { g_clear_object (&self->ui_entry); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_UI_ENTRY]); return NULL; } static void update_ui_entry (BzRichAppTile *self) { g_autoptr (BzResult) ui_entry_result = NULL; dex_clear (&self->ui_entry_resolve); if (self->ui_entry != NULL) { g_clear_object (&self->ui_entry); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_UI_ENTRY]); } ui_entry_result = bz_entry_group_dup_ui_entry (self->group); self->ui_entry_resolve = dex_future_finally ( bz_result_dup_future (ui_entry_result), (DexFutureCallback) ui_entry_resolved_finally, bz_track_weak (self), bz_weak_release); } static void bz_rich_app_tile_dispose (GObject *object) { BzRichAppTile *self = BZ_RICH_APP_TILE (object); if (self->all_trackers != NULL) { g_signal_handlers_disconnect_by_func (self->all_trackers, on_all_trackers_changed, self); g_clear_object (&self->all_trackers); } g_clear_object (&self->group); g_clear_object (&self->ui_entry); g_clear_object (&self->tracker); dex_clear (&self->ui_entry_resolve); G_OBJECT_CLASS (bz_rich_app_tile_parent_class)->dispose (object); } static void bz_rich_app_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzRichAppTile *self = BZ_RICH_APP_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_rich_app_tile_get_group (self)); break; case PROP_UI_ENTRY: g_value_set_object (value, self->ui_entry); break; case PROP_REMOVABLE_AT_START: g_value_set_boolean (value, self->removable_at_start); break; case PROP_TRACKER: g_value_set_object (value, self->tracker); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_rich_app_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzRichAppTile *self = BZ_RICH_APP_TILE (object); switch (prop_id) { case PROP_GROUP: bz_rich_app_tile_set_group (self, g_value_get_object (value)); break; case PROP_UI_ENTRY: case PROP_REMOVABLE_AT_START: case PROP_TRACKER: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void tile_clicked_cb (GtkButton *button, BzRichAppTile *self) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.show-group", "s", bz_entry_group_get_id (self->group)); } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static char * get_visible_page (gpointer object, int installable, int removable, gboolean removable_at_start, BzTransactionEntryTracker *tracker, BzTransactionEntryStatus status) { if (tracker != NULL && (bz_transaction_entry_tracker_get_active (tracker) || bz_transaction_entry_tracker_get_pending (tracker)) && status != BZ_TRANSACTION_ENTRY_STATUS_CANCELLED && status != BZ_TRANSACTION_ENTRY_STATUS_DONE) return g_strdup ("cancel"); if (removable > 0) return g_strdup (removable_at_start ? "uninstall" : "open"); if (installable > 0) return g_strdup ("get"); return g_strdup ("empty"); } static void install_button_clicked_cb (BzRichAppTile *self, GtkButton *button) { gtk_widget_activate_action (GTK_WIDGET (self), "window.install-group", "(sb)", bz_entry_group_get_id (self->group), TRUE); } static void remove_button_clicked_cb (BzRichAppTile *self, GtkButton *button) { gtk_widget_activate_action (GTK_WIDGET (self), "window.remove-group", "(sb)", bz_entry_group_get_id (self->group), FALSE); } static void run_button_clicked_cb (BzRichAppTile *self, GtkButton *button) { gtk_widget_activate_action (GTK_WIDGET (self), "window.launch-group", "s", bz_entry_group_get_id (self->group)); } static void cancel_button_clicked_cb (BzRichAppTile *self, GtkButton *button) { if (self->group == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.cancel-group", "s", bz_entry_group_get_id (self->group)); } static void bz_rich_app_tile_class_init (BzRichAppTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_rich_app_tile_set_property; object_class->get_property = bz_rich_app_tile_get_property; object_class->dispose = bz_rich_app_tile_dispose; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_UI_ENTRY] = g_param_spec_object ( "ui-entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_REMOVABLE_AT_START] = g_param_spec_boolean ( "removable-at-start", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_TRACKER] = g_param_spec_object ( "tracker", NULL, NULL, BZ_TYPE_TRANSACTION_ENTRY_TRACKER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_TRANSACT_ICON); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ROUNDED_PICTURE); g_type_ensure (BZ_TYPE_THEMED_ENTRY_GROUP_RECT); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-rich-app-tile.ui"); gtk_widget_class_bind_template_callback (widget_class, tile_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, get_visible_page); gtk_widget_class_bind_template_callback (widget_class, install_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, remove_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, run_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, cancel_button_clicked_cb); gtk_widget_class_bind_template_child (widget_class, BzRichAppTile, picture_box); gtk_widget_class_bind_template_child (widget_class, BzRichAppTile, get_button); gtk_widget_class_bind_template_child (widget_class, BzRichAppTile, transact_icon_info); gtk_widget_class_bind_template_child (widget_class, BzRichAppTile, action_stack); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_rich_app_tile_init (BzRichAppTile *self) { BzStateInfo *state = NULL; BzTransactionManager *manager = NULL; const char *get_label = NULL; gtk_widget_init_template (GTK_WIDGET (self)); /* Translators: If you can't find a short enough translation, use "/" to use an icon instead. */ get_label = _ ("Get"); if (get_label != NULL && *get_label != '\0' && g_strcmp0 (get_label, "/") != 0) gtk_button_set_label (GTK_BUTTON (self->get_button), get_label); else gtk_button_set_icon_name (GTK_BUTTON (self->get_button), "folder-download-symbolic"); state = bz_state_info_get_default (); manager = bz_state_info_get_transaction_manager (state); if (manager != NULL) g_object_get (manager, "all-trackers", &self->all_trackers, NULL); if (self->all_trackers != NULL) g_signal_connect (self->all_trackers, "items-changed", G_CALLBACK (on_all_trackers_changed), self); update_tracker (self); } GtkWidget * bz_rich_app_tile_new (void) { return g_object_new (BZ_TYPE_RICH_APP_TILE, NULL); } BzEntryGroup * bz_rich_app_tile_get_group (BzRichAppTile *self) { g_return_val_if_fail (BZ_IS_RICH_APP_TILE (self), NULL); return self->group; } void bz_rich_app_tile_set_group (BzRichAppTile *self, BzEntryGroup *group) { const char *title = NULL; gboolean verified = FALSE; gboolean removable_at_start = FALSE; g_autofree char *label = NULL; g_return_if_fail (BZ_IS_RICH_APP_TILE (self)); g_clear_object (&self->group); if (group != NULL) { self->group = g_object_ref (group); title = bz_entry_group_get_title (self->group); verified = bz_entry_group_get_is_verified (self->group); removable_at_start = bz_entry_group_get_removable (self->group) != 0; if (self->removable_at_start != removable_at_start) { self->removable_at_start = removable_at_start; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REMOVABLE_AT_START]); } if (verified) { label = g_strdup_printf ("%s, %s", title, _ ("Verified")); gtk_accessible_update_property (GTK_ACCESSIBLE (self), GTK_ACCESSIBLE_PROPERTY_LABEL, label, -1); } else { gtk_accessible_update_property (GTK_ACCESSIBLE (self), GTK_ACCESSIBLE_PROPERTY_LABEL, title, -1); } } update_ui_entry (self); update_tracker (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } void bz_rich_app_tile_focus_action_button (BzRichAppTile *self) { GtkWidget *visible_child = NULL; g_return_if_fail (BZ_IS_RICH_APP_TILE (self)); visible_child = gtk_stack_get_visible_child (GTK_STACK (self->action_stack)); if (visible_child != NULL) gtk_widget_grab_focus (visible_child); } /* End of bz-rich-app-tile.c */ bazaar-org-bazaar-b6e9a65/src/bz-rich-app-tile.h000066400000000000000000000025421522167256300214430ustar00rootroot00000000000000/* bz-rich-app-tile.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "adwaita.h" #include #include "bz-entry-group.h" #include "bz-list-tile.h" G_BEGIN_DECLS #define BZ_TYPE_RICH_APP_TILE (bz_rich_app_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzRichAppTile, bz_rich_app_tile, BZ, RICH_APP_TILE, BzListTile) GtkWidget * bz_rich_app_tile_new (void); BzEntryGroup * bz_rich_app_tile_get_group (BzRichAppTile *self); void bz_rich_app_tile_set_group (BzRichAppTile *self, BzEntryGroup *group); void bz_rich_app_tile_focus_action_button (BzRichAppTile *self); G_END_DECLS /* End of bz-rich-app-tile.h */ bazaar-org-bazaar-b6e9a65/src/bz-root-blocklist.txt000066400000000000000000000003211522167256300223350ustar00rootroot00000000000000prefix=bz name=root_blocklist parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-blocklist.h" ensure=BZ_TYPE_BLOCKLIST property=blocklists GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-root-curated-config.txt000066400000000000000000000003331522167256300232440ustar00rootroot00000000000000prefix=bz name=root_curated_config parent-prefix=g parent-name=object author=AUTOGEN include="bz-curated-row.h" property=templates GListModel G_TYPE_LIST_MODEL object property=rows GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-rounded-picture.c000066400000000000000000000216441522167256300221150ustar00rootroot00000000000000/* bz-rounded-picture.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "bz-rounded-picture.h" struct _BzRoundedPicture { GtkWidget parent_instance; GdkPaintable *paintable; double radius; }; G_DEFINE_FINAL_TYPE (BzRoundedPicture, bz_rounded_picture, GTK_TYPE_WIDGET) enum { PROP_0, PROP_PAINTABLE, PROP_RADIUS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { NULL }; static void invalidate_contents (BzRoundedPicture *self, GdkPaintable *paintable) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void invalidate_size (BzRoundedPicture *self, GdkPaintable *paintable) { gtk_widget_queue_resize (GTK_WIDGET (self)); } static void bz_rounded_picture_dispose (GObject *object) { BzRoundedPicture *self = BZ_ROUNDED_PICTURE (object); if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, invalidate_size, self); } g_clear_object (&self->paintable); G_OBJECT_CLASS (bz_rounded_picture_parent_class)->dispose (object); } static void bz_rounded_picture_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzRoundedPicture *self = BZ_ROUNDED_PICTURE (object); switch (prop_id) { case PROP_PAINTABLE: g_value_set_object (value, self->paintable); break; case PROP_RADIUS: g_value_set_double (value, self->radius); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_rounded_picture_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzRoundedPicture *self = BZ_ROUNDED_PICTURE (object); switch (prop_id) { case PROP_PAINTABLE: bz_rounded_picture_set_paintable (self, g_value_get_object (value)); break; case PROP_RADIUS: bz_rounded_picture_set_radius (self, g_value_get_double (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_rounded_picture_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BzRoundedPicture *self = BZ_ROUNDED_PICTURE (widget); *minimum = 0; *natural = 0; if (self->paintable == NULL) return; if (orientation == GTK_ORIENTATION_HORIZONTAL) { *natural = gdk_paintable_get_intrinsic_width (self->paintable); } else { *natural = gdk_paintable_get_intrinsic_height (self->paintable); } } static void bz_rounded_picture_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzRoundedPicture *self = BZ_ROUNDED_PICTURE (widget); int widget_width; int widget_height; double paintable_width; double paintable_height; double paintable_aspect; double widget_aspect; double scale; double draw_width, draw_height; double x, y; GskRoundedRect rect; GskShadow shadow; if (self->paintable == NULL) return; widget_width = gtk_widget_get_width (widget); widget_height = gtk_widget_get_height (widget); if (widget_width <= 0 || widget_height <= 0) return; paintable_width = gdk_paintable_get_intrinsic_width (self->paintable); paintable_height = gdk_paintable_get_intrinsic_height (self->paintable); if (paintable_width <= 0 || paintable_height <= 0) { paintable_width = widget_width; paintable_height = widget_height; } paintable_aspect = paintable_width / paintable_height; widget_aspect = (double) widget_width / (double) widget_height; if (widget_aspect > paintable_aspect) { scale = (double) widget_height / paintable_height; draw_height = widget_height; draw_width = paintable_width * scale; } else { scale = (double) widget_width / paintable_width; draw_width = widget_width; draw_height = paintable_height * scale; } x = (widget_width - draw_width) / 2.0; y = (widget_height - draw_height) / 2.0; shadow.color.red = 0.0; shadow.color.green = 0.0; shadow.color.blue = 0.0; shadow.color.alpha = 0.35; shadow.dx = 0.0; shadow.dy = 2.0; shadow.radius = 16.0; gtk_snapshot_push_shadow (snapshot, &shadow, 1); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); gsk_rounded_rect_init_from_rect (&rect, &GRAPHENE_RECT_INIT (0, 0, draw_width, draw_height), self->radius); gtk_snapshot_push_rounded_clip (snapshot, &rect); gdk_paintable_snapshot (self->paintable, snapshot, draw_width, draw_height); gtk_snapshot_pop (snapshot); gtk_snapshot_pop (snapshot); } static void bz_rounded_picture_class_init (BzRoundedPictureClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_rounded_picture_dispose; object_class->get_property = bz_rounded_picture_get_property; object_class->set_property = bz_rounded_picture_set_property; widget_class->measure = bz_rounded_picture_measure; widget_class->snapshot = bz_rounded_picture_snapshot; props[PROP_PAINTABLE] = g_param_spec_object ("paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_RADIUS] = g_param_spec_double ("radius", NULL, NULL, 0.0, G_MAXDOUBLE, 12.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_rounded_picture_init (BzRoundedPicture *self) { self->radius = 12.0; } GtkWidget * bz_rounded_picture_new (void) { return g_object_new (BZ_TYPE_ROUNDED_PICTURE, NULL); } void bz_rounded_picture_set_paintable (BzRoundedPicture *self, GdkPaintable *paintable) { g_return_if_fail (BZ_IS_ROUNDED_PICTURE (self)); g_return_if_fail (paintable == NULL || GDK_IS_PAINTABLE (paintable)); if (self->paintable == paintable) return; if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, invalidate_size, self); } g_clear_object (&self->paintable); if (paintable != NULL) { self->paintable = g_object_ref (paintable); g_signal_connect_swapped (self->paintable, "invalidate-contents", G_CALLBACK (invalidate_contents), self); g_signal_connect_swapped (self->paintable, "invalidate-size", G_CALLBACK (invalidate_size), self); } gtk_widget_queue_resize (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PAINTABLE]); } GdkPaintable * bz_rounded_picture_get_paintable (BzRoundedPicture *self) { g_return_val_if_fail (BZ_IS_ROUNDED_PICTURE (self), NULL); return self->paintable; } void bz_rounded_picture_set_radius (BzRoundedPicture *self, double radius) { g_return_if_fail (BZ_IS_ROUNDED_PICTURE (self)); if (self->radius == radius) return; self->radius = radius; gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RADIUS]); } double bz_rounded_picture_get_radius (BzRoundedPicture *self) { g_return_val_if_fail (BZ_IS_ROUNDED_PICTURE (self), 0.0); return self->radius; } bazaar-org-bazaar-b6e9a65/src/bz-rounded-picture.h000066400000000000000000000026111522167256300221130ustar00rootroot00000000000000/* bz-rounded-picture.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_ROUNDED_PICTURE (bz_rounded_picture_get_type ()) G_DECLARE_FINAL_TYPE (BzRoundedPicture, bz_rounded_picture, BZ, ROUNDED_PICTURE, GtkWidget) GtkWidget * bz_rounded_picture_new (void); void bz_rounded_picture_set_paintable (BzRoundedPicture *self, GdkPaintable *paintable); GdkPaintable * bz_rounded_picture_get_paintable (BzRoundedPicture *self); void bz_rounded_picture_set_radius (BzRoundedPicture *self, double radius); double bz_rounded_picture_get_radius (BzRoundedPicture *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-row-view.c000066400000000000000000000112131522167256300205520ustar00rootroot00000000000000/* bz-row-view.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include "bz-row-view.h" #include "bz-article-list-view.h" #include "bz-banner-view.h" #include "bz-curated-articles-info.h" #include "bz-curated-banner.h" #include "bz-curated-featured-carousel.h" #include "bz-curated-row.h" #include "bz-curated-section.h" #include "bz-entry-group.h" #include "bz-featured-carousel-view.h" #include "bz-section-view.h" struct _BzRowView { AdwBin parent_instance; BzCuratedRow *row; }; G_DEFINE_FINAL_TYPE (BzRowView, bz_row_view, ADW_TYPE_BIN) enum { PROP_0, PROP_ROW, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_row_view_dispose (GObject *object) { BzRowView *self = BZ_ROW_VIEW (object); g_clear_object (&self->row); G_OBJECT_CLASS (bz_row_view_parent_class)->dispose (object); } static void bz_row_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzRowView *self = BZ_ROW_VIEW (object); switch (prop_id) { case PROP_ROW: g_value_set_object (value, bz_row_view_get_row (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_row_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzRowView *self = BZ_ROW_VIEW (object); switch (prop_id) { case PROP_ROW: bz_row_view_set_row (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_row_view_class_init (BzRowViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_row_view_dispose; object_class->get_property = bz_row_view_get_property; object_class->set_property = bz_row_view_set_property; props[PROP_ROW] = g_param_spec_object ( "row", NULL, NULL, BZ_TYPE_CURATED_ROW, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_SECTION_VIEW); g_type_ensure (BZ_TYPE_FEATURED_CAROUSEL_VIEW); g_type_ensure (BZ_TYPE_BANNER_VIEW); g_type_ensure (BZ_TYPE_ARTICLE_LIST_VIEW); } static void bz_row_view_init (BzRowView *self) { } GtkWidget * bz_row_view_new (BzCuratedRow *row) { return g_object_new ( BZ_TYPE_ROW_VIEW, "row", row, NULL); } void bz_row_view_set_row (BzRowView *self, BzCuratedRow *row) { BzCuratedSection *section = NULL; BzCuratedFeaturedCarousel *carousel = NULL; BzCuratedBanner *banner = NULL; BzCuratedArticlesInfo *articles = NULL; GtkWidget *child = NULL; g_return_if_fail (BZ_IS_ROW_VIEW (self)); g_return_if_fail (row == NULL || BZ_IS_CURATED_ROW (row)); g_clear_object (&self->row); adw_bin_set_child (ADW_BIN (self), NULL); if (row != NULL) { self->row = g_object_ref (row); section = bz_curated_row_get_section (row); carousel = bz_curated_row_get_featured_carousel (row); banner = bz_curated_row_get_banner (row); articles = bz_curated_row_get_articles (row); if (section != NULL) child = bz_section_view_new (section); else if (carousel != NULL) child = bz_featured_carousel_view_new (carousel); else if (banner != NULL) child = bz_banner_view_new (banner); else if (articles != NULL) child = bz_article_list_view_new (articles); } if (child != NULL) adw_bin_set_child (ADW_BIN (self), child); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ROW]); } BzCuratedRow * bz_row_view_get_row (BzRowView *self) { g_return_val_if_fail (BZ_IS_ROW_VIEW (self), NULL); return self->row; } bazaar-org-bazaar-b6e9a65/src/bz-row-view.h000066400000000000000000000022101522167256300205540ustar00rootroot00000000000000/* bz-row-view.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-curated-row.h" G_BEGIN_DECLS #define BZ_TYPE_ROW_VIEW (bz_row_view_get_type ()) G_DECLARE_FINAL_TYPE (BzRowView, bz_row_view, BZ, ROW_VIEW, AdwBin) GtkWidget * bz_row_view_new (BzCuratedRow *row); void bz_row_view_set_row (BzRowView *self, BzCuratedRow *row); BzCuratedRow * bz_row_view_get_row (BzRowView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-safety-calculator.c000066400000000000000000000646021522167256300224270ustar00rootroot00000000000000/* bz-safety-calculator.c * * Copyright 2026 Alexander Vanhee * Copyright (C) 2022 Red Hat * * 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 */ #include "config.h" #include #include "bz-app-permissions.h" #include "bz-context-row.h" #include "bz-safety-calculator.h" #include "bz-safety-row.h" static char * format_bus_policy_title (const BzBusPolicy *bus_policy); static const char * format_bus_policy_subtitle (const BzBusPolicy *bus_policy); static void add_row_if_permission (GListStore *store, gboolean has_permission, BzImportance item_rating, const char *icon_name_with_permission, const char *title_with_permission, const char *description_with_permission, const char *icon_name_without_permission, const char *title_without_permission, const char *description_without_permission); static gboolean lookup_well_known_bus_policy (const char *bus_name, const char **out_title, const char **out_description); GListModel * bz_safety_calculator_analyze_entry (BzEntry *entry) { GListStore *store = NULL; BzAppPermissions *permissions = NULL; BzAppPermissionsFlags perm_flags = BZ_APP_PERMISSIONS_FLAGS_NONE; gboolean is_verified = FALSE; gboolean is_foss = FALSE; const GPtrArray *filesystem_read = NULL; const GPtrArray *filesystem_full = NULL; const BzBusPolicy *const *bus_policies = NULL; size_t n_bus_policies = 0; gboolean has_system_tray = FALSE; BzImportance fs_importance = BZ_IMPORTANCE_WARNING; guint i = 0; g_return_val_if_fail (BZ_IS_ENTRY (entry), NULL); store = g_list_store_new (BZ_TYPE_SAFETY_ROW); is_verified = bz_entry_is_verified (entry); is_foss = bz_entry_get_is_foss (entry); g_object_get (entry, "permissions", &permissions, NULL); if (permissions != NULL) perm_flags = bz_app_permissions_get_flags (permissions); fs_importance = (perm_flags & BZ_APP_PERMISSIONS_FLAGS_NETWORK) ? BZ_IMPORTANCE_WARNING : BZ_IMPORTANCE_INFORMATION; if (permissions == NULL) { add_row_if_permission (store, TRUE, BZ_IMPORTANCE_WARNING, "channel-insecure-symbolic", _ ("Unknown Permissions"), _ ("Permissions are missing for this app."), NULL, NULL, NULL); } else { filesystem_read = bz_app_permissions_get_filesystem_read (permissions); filesystem_full = bz_app_permissions_get_filesystem_full (permissions); bus_policies = bz_app_permissions_get_bus_policies (permissions, &n_bus_policies); add_row_if_permission (store, bz_app_permissions_is_empty (permissions), BZ_IMPORTANCE_UNIMPORTANT, "permissions-sandboxed-symbolic", _ ("No Permissions"), _ ("App is fully sandboxed"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_NETWORK) != 0, BZ_IMPORTANCE_INFORMATION, "network-wireless-symbolic", _ ("Network Access"), _ ("Can access the internet"), "network-wireless-disabled-symbolic", _ ("No Network Access"), _ ("Cannot access the internet")); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_DEVICES) != 0, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_NETWORK) ? BZ_IMPORTANCE_WARNING : BZ_IMPORTANCE_INFORMATION, "camera-photo-symbolic", _ ("User Device Access"), _ ("Can access devices such as webcams or gaming controllers"), "camera-disabled-symbolic", _ ("No User Device Access"), _ ("Cannot access devices such as webcams or gaming controllers")); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_INPUT_DEVICES) != 0, BZ_IMPORTANCE_INFORMATION, "input-keyboard-symbolic", _ ("Input Device Access"), _ ("Can access input devices"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_AUDIO_DEVICES) != 0, BZ_IMPORTANCE_INFORMATION, "permissions-microphone-symbolic", _ ("Microphone Access and Audio Playback"), _ ("Can listen using microphones and play audio without asking permission"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_SYSTEM_DEVICES) != 0, BZ_IMPORTANCE_WARNING, "permissions-system-devices-symbolic", _ ("System Device Access"), _ ("Can access system devices which require elevated permissions"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_SCREEN) != 0, BZ_IMPORTANCE_WARNING, "permissions-screen-contents-symbolic", _ ("Screen Contents Access"), _ ("Can access the contents of the screen or other windows"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_X11) != 0, BZ_IMPORTANCE_IMPORTANT, "permissions-legacy-windowing-system-symbolic", _ ("Legacy Windowing System"), _ ("Always uses a legacy windowing system (X11)"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX) != 0, BZ_IMPORTANCE_IMPORTANT, "earth-symbolic", _ ("Arbitrary Permissions"), _ ("Can acquire arbitrary permissions"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_SETTINGS) != 0, BZ_IMPORTANCE_WARNING, "emblem-system-symbolic", _ ("User Settings"), _ ("Can access and change user settings"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL) != 0, BZ_IMPORTANCE_IMPORTANT, "drive-harddisk-symbolic", _ ("Full File System Read/Write Access"), _ ("Can read and write all data on the file system"), NULL, NULL, NULL); add_row_if_permission (store, ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_HOME_FULL) != 0 && !(perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL)), BZ_IMPORTANCE_IMPORTANT, "user-home-symbolic", _ ("Home Folder Read/Write Access"), _ ("Can read and write all data in your home directory"), NULL, NULL, NULL); add_row_if_permission (store, ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ) != 0 && !(perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL)), BZ_IMPORTANCE_IMPORTANT, "folder-symbolic", _ ("Full File System Read Access"), _ ("Can read all data on the file system"), NULL, NULL, NULL); add_row_if_permission (store, ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_HOME_READ) != 0 && !(perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL | BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ))), BZ_IMPORTANCE_IMPORTANT, "user-home-symbolic", _ ("Home Folder Read Access"), _ ("Can read all data in your home directory"), NULL, NULL, NULL); add_row_if_permission (store, ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL) != 0 && !(perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL | BZ_APP_PERMISSIONS_FLAGS_HOME_FULL))), fs_importance, "folder-download-symbolic", _ ("Download Folder Read/Write Access"), _ ("Can read and write all data in your downloads directory"), NULL, NULL, NULL); add_row_if_permission (store, ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ) != 0 && !(perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL | BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ | BZ_APP_PERMISSIONS_FLAGS_HOME_FULL | BZ_APP_PERMISSIONS_FLAGS_HOME_READ))), fs_importance, "folder-download-symbolic", _ ("Download Folder Read Access"), _ ("Can read all data in your downloads directory"), NULL, NULL, NULL); for (i = 0; filesystem_full != NULL && i < filesystem_full->len; i++) { const BzFilesystemPath *path = g_ptr_array_index (filesystem_full, i); g_autofree char *fs_title = bz_filesystem_path_to_display_string (path); const char *fs_icon = bz_filesystem_path_to_icon_name (path); if (perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL) continue; if ((perm_flags & BZ_APP_PERMISSIONS_FLAGS_HOME_FULL) && path->type == BZ_FILESYSTEM_PATH_HOME_SUBDIR) continue; add_row_if_permission (store, TRUE, fs_importance, fs_icon, fs_title, _ ("Can read and write all data in the directory"), NULL, NULL, NULL); } for (i = 0; filesystem_read != NULL && i < filesystem_read->len; i++) { const BzFilesystemPath *path = g_ptr_array_index (filesystem_read, i); g_autofree char *fs_title = bz_filesystem_path_to_display_string (path); const char *fs_icon = bz_filesystem_path_to_icon_name (path); if (perm_flags & BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL) continue; if ((perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ | BZ_APP_PERMISSIONS_FLAGS_HOME_FULL | BZ_APP_PERMISSIONS_FLAGS_HOME_READ)) && path->type == BZ_FILESYSTEM_PATH_HOME_SUBDIR) continue; add_row_if_permission (store, TRUE, fs_importance, fs_icon, fs_title, _ ("Can read all data in the directory"), NULL, NULL, NULL); } add_row_if_permission (store, !(perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL | BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ | BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_OTHER | BZ_APP_PERMISSIONS_FLAGS_HOME_FULL | BZ_APP_PERMISSIONS_FLAGS_HOME_READ | BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_FULL | BZ_APP_PERMISSIONS_FLAGS_DOWNLOADS_READ)) && filesystem_read == NULL && filesystem_full == NULL, BZ_IMPORTANCE_UNIMPORTANT, "folder-symbolic", _ ("No File System Access"), _ ("Cannot access the file system at all"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS) != 0, BZ_IMPORTANCE_WARNING, "emblem-system-symbolic", _ ("Uses System Services"), _ ("Can request data from non-portal system services"), NULL, NULL, NULL); add_row_if_permission (store, (perm_flags & BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS) != 0, BZ_IMPORTANCE_WARNING, "emblem-system-symbolic", _ ("Uses Session Services"), _ ("Can request data from non-portal session services"), NULL, NULL, NULL); for (i = 0; i < n_bus_policies; i++) { const BzBusPolicy *policy = bus_policies[i]; const char *well_known_title = NULL; const char *well_known_desc = NULL; g_autofree char *bus_title = NULL; const char *bus_description = NULL; gboolean is_system_tray = FALSE; is_system_tray = g_str_equal (policy->bus_name, "org.kde.StatusNotifierWatcher") || g_str_equal (policy->bus_name, "com.canonical.indicator.application"); if (is_system_tray && has_system_tray) // if not filtered, then there would be 2 entries for tray icon continue; if (is_system_tray) has_system_tray = TRUE; if (lookup_well_known_bus_policy (policy->bus_name, &well_known_title, &well_known_desc)) { bus_title = g_strdup (well_known_title); bus_description = well_known_desc; } else { bus_title = format_bus_policy_title (policy); bus_description = format_bus_policy_subtitle (policy); } add_row_if_permission (store, TRUE, BZ_IMPORTANCE_WARNING, "emblem-system-symbolic", bus_title, bus_description, NULL, NULL, NULL); } add_row_if_permission (store, !(perm_flags & (BZ_APP_PERMISSIONS_FLAGS_SYSTEM_BUS | BZ_APP_PERMISSIONS_FLAGS_SESSION_BUS | BZ_APP_PERMISSIONS_FLAGS_BUS_POLICY_OTHER)) && n_bus_policies == 0, BZ_IMPORTANCE_UNIMPORTANT, "emblem-system-symbolic", _ ("No Service Access"), _ ("Cannot access non-portal session or system services at all"), NULL, NULL, NULL); } add_row_if_permission (store, is_verified, BZ_IMPORTANCE_UNIMPORTANT, "verified-checkmark-symbolic", _ ("Verified App Developer"), _ ("The developer of this app has been verified to be who they say they are"), NULL, NULL, NULL); if (!is_foss) { add_row_if_permission (store, TRUE, BZ_IMPORTANCE_INFORMATION, "proprietary-code-symbolic", _ ("Proprietary Code"), _ ("The source code is not public, so it cannot be independently audited and might be unsafe"), NULL, NULL, NULL); } else { add_row_if_permission (store, FALSE, BZ_IMPORTANCE_NEUTRAL, NULL, NULL, NULL, "auditable-code-symbolic", _ ("Auditable Code"), _ ("The source code is public and can be independently audited, which makes the app more likely to be safe")); } g_clear_object (&permissions); return G_LIST_MODEL (store); } char * bz_safety_calculator_get_top_icon (BzEntry *entry, int index) { g_autoptr (GListModel) model = NULL; const char *icons[2] = { NULL, NULL }; guint icon_count = 0; guint n_items = 0; BzImportance priorities[] = { BZ_IMPORTANCE_IMPORTANT, BZ_IMPORTANCE_WARNING, BZ_IMPORTANCE_INFORMATION }; g_return_val_if_fail (BZ_IS_ENTRY (entry), NULL); if (index < 0 || index > 1) return NULL; model = bz_safety_calculator_analyze_entry (entry); n_items = g_list_model_get_n_items (model); for (guint priority_idx = 0; priority_idx < 3 && icon_count < 2; priority_idx++) { BzImportance current_priority = priorities[priority_idx]; for (guint i = 0; i < n_items && icon_count < 2; i++) { g_autoptr (BzSafetyRow) row = g_list_model_get_item (model, i); BzImportance importance = BZ_IMPORTANCE_UNIMPORTANT; const char *icon_name = NULL; gboolean duplicate = FALSE; g_object_get (row, "importance", &importance, "icon-name", &icon_name, NULL); if (importance != current_priority) continue; if (icon_name == NULL || *icon_name == '\0') continue; for (guint j = 0; j < icon_count; j++) { if (g_strcmp0 (icons[j], icon_name) == 0) { duplicate = TRUE; break; } } if (!duplicate) { icons[icon_count] = icon_name; icon_count++; } } } if (icon_count == 0 || icons[index] == NULL) return NULL; return g_strdup (icons[index]); } BzImportance bz_safety_calculator_calculate_rating (BzEntry *entry) { g_autoptr (GListModel) model = NULL; BzImportance max_rating = BZ_IMPORTANCE_UNIMPORTANT; guint n_items = 0; guint i = 0; gboolean is_foss = FALSE; g_return_val_if_fail (BZ_IS_ENTRY (entry), BZ_IMPORTANCE_UNIMPORTANT); model = bz_safety_calculator_analyze_entry (entry); n_items = g_list_model_get_n_items (model); is_foss = bz_entry_get_is_foss (entry); for (i = 0; i < n_items; i++) { g_autoptr (BzSafetyRow) row = g_list_model_get_item (model, i); BzImportance rating = BZ_IMPORTANCE_UNIMPORTANT; g_object_get (row, "importance", &rating, NULL); max_rating = MAX (max_rating, rating); } if (is_foss && max_rating == BZ_IMPORTANCE_WARNING) { max_rating = BZ_IMPORTANCE_INFORMATION; } if (is_foss && max_rating == BZ_IMPORTANCE_IMPORTANT) { max_rating = BZ_IMPORTANCE_WARNING; } return max_rating; } BzHighRiskGroup bz_safety_calculator_get_high_risk_groups (BzEntry *entry) { BzAppPermissions *permissions = NULL; BzAppPermissionsFlags perm_flags = BZ_APP_PERMISSIONS_FLAGS_NONE; BzHighRiskGroup result = BZ_HIGH_RISK_GROUP_NONE; g_return_val_if_fail (BZ_IS_ENTRY (entry), BZ_HIGH_RISK_GROUP_NONE); g_object_get (entry, "permissions", &permissions, NULL); if (permissions == NULL) return BZ_HIGH_RISK_GROUP_NONE; perm_flags = bz_app_permissions_get_flags (permissions); if (perm_flags & BZ_APP_PERMISSIONS_FLAGS_X11) result |= BZ_HIGH_RISK_GROUP_X11; if (perm_flags & (BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_FULL | BZ_APP_PERMISSIONS_FLAGS_FILESYSTEM_READ | BZ_APP_PERMISSIONS_FLAGS_HOME_FULL | BZ_APP_PERMISSIONS_FLAGS_HOME_READ | BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX)) result |= BZ_HIGH_RISK_GROUP_DISK; g_clear_object (&permissions); return result; } static char * format_bus_policy_title (const BzBusPolicy *bus_policy) { if (bus_policy->bus_type == G_BUS_TYPE_SYSTEM) { return g_strdup_printf (_ ("Use the %s System Service"), bus_policy->bus_name); } else if (bus_policy->bus_type == G_BUS_TYPE_SESSION) { return g_strdup_printf (_ ("Use the %s Session Service"), bus_policy->bus_name); } else { return g_strdup_printf (_ ("Use the %s Service"), bus_policy->bus_name); } } static const char * format_bus_policy_subtitle (const BzBusPolicy *bus_policy) { switch (bus_policy->permission) { case BZ_BUS_POLICY_PERMISSION_SEE: return _ ("Can see the non-portal service"); case BZ_BUS_POLICY_PERMISSION_TALK: return _ ("Can talk to the non-portal service"); case BZ_BUS_POLICY_PERMISSION_OWN: return _ ("Can own the non-portal service"); case BZ_BUS_POLICY_PERMISSION_NONE: case BZ_BUS_POLICY_PERMISSION_UNKNOWN: default: g_assert_not_reached (); } } static gboolean lookup_well_known_bus_policy (const char *bus_name, const char **out_title, const char **out_description) { if (g_str_equal (bus_name, "com.canonical.AppMenu.Registrar")) { *out_title = _ ("Global Menu Integration"); *out_description = _ ("Can display its menus in a global menu bar"); return TRUE; } if (g_str_equal (bus_name, "org.kde.kconfig.notify")) { *out_title = _ ("KDE Settings Integration"); *out_description = _ ("Can detect when KDE desktop settings change"); return TRUE; } if (g_str_equal (bus_name, "org.kde.KGlobalSettings")) { *out_title = _ ("KDE Global Settings"); *out_description = _ ("Can read KDE desktop preferences like fonts and colors"); return TRUE; } if (g_str_equal (bus_name, "org.freedesktop.secrets")) { *out_title = _ ("Secret Storage Service"); *out_description = _ ("Can store and retrieve its own passwords using the system keyring"); return TRUE; } if (g_str_equal (bus_name, "org.freedesktop.Notifications")) { *out_title = _ ("Desktop Notifications Service"); *out_description = _ ("Can send desktop notifications"); return TRUE; } if (g_str_equal (bus_name, "org.kde.StatusNotifierWatcher") || g_str_equal (bus_name, "com.canonical.indicator.application")) { *out_title = _ ("System Tray Integration"); *out_description = _ ("Can display an icon in the system tray"); return TRUE; } if (g_str_equal (bus_name, "org.kde.kdeconnect")) { *out_title = _ ("KDE Connect Integration"); *out_description = _ ("Can interact with devices paired via KDE Connect"); return TRUE; } return FALSE; } static void add_row_if_permission (GListStore *store, gboolean has_permission, BzImportance item_rating, const char *icon_name_with_permission, const char *title_with_permission, const char *description_with_permission, const char *icon_name_without_permission, const char *title_without_permission, const char *description_without_permission) { BzSafetyRow *row = NULL; if (!has_permission && title_without_permission == NULL) return; row = bz_safety_row_new (); g_object_set (row, "importance", has_permission ? item_rating : BZ_IMPORTANCE_UNIMPORTANT, "icon-name", has_permission ? icon_name_with_permission : icon_name_without_permission, "title", has_permission ? title_with_permission : title_without_permission, "subtitle", has_permission ? description_with_permission : description_without_permission, NULL); g_list_store_append (store, row); g_object_unref (row); } bazaar-org-bazaar-b6e9a65/src/bz-safety-calculator.h000066400000000000000000000026351522167256300224320ustar00rootroot00000000000000/* bz-safety-calculator.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-context-row.h" #include "bz-entry.h" #include "bz-safety-row.h" #include G_BEGIN_DECLS typedef enum { BZ_HIGH_RISK_GROUP_NONE = 0, BZ_HIGH_RISK_GROUP_X11 = 1 << 0, BZ_HIGH_RISK_GROUP_DISK = 1 << 1, } BzHighRiskGroup; #define BZ_TYPE_HIGH_RISK_GROUP (bz_high_risk_group_get_type ()) GListModel * bz_safety_calculator_analyze_entry (BzEntry *entry); BzImportance bz_safety_calculator_calculate_rating (BzEntry *entry); char * bz_safety_calculator_get_top_icon (BzEntry *entry, int index); BzHighRiskGroup bz_safety_calculator_get_high_risk_groups (BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-safety-dialog.blp000066400000000000000000000112731522167256300220640ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzSafetyDialog: Adw.Bin { child: Adw.ToolbarView { [top] Adw.HeaderBar { show-title: false; } content: Adw.Carousel carousel { interactive: false; allow-scroll-wheel: false; allow-mouse-drag: false; allow-long-swipes: false; hexpand: true; ScrolledWindow { hscrollbar-policy: never; hexpand: true; Box global_box { orientation: vertical; spacing: 12; margin-start: 18; margin-end: 18; margin-top: 18; margin-bottom: 18; $BzLozenge { title: _("Arbitrary Permissions"); icon-names: [ "earth-symbolic", ]; importance: important; margin-bottom: 8; } Label { wrap: true; xalign: 0; use-markup: true; margin-bottom: 18; margin-start: 18; margin-end: 18; label: _("This app has a permission that indirectly allows it to grant itself any other permission it wants, bypassing the Flatpak sandbox.\n\nIt can therefore do anything a normal, non-sandboxed application can do, such as accessing all your files and connecting to the internet.\n\nViewing the other permissions may still give a better idea of what the app is likely to do."); } Button { label: _("View Other Permissions"); clicked => $next_page(template); margin-bottom: 12; halign: center; hexpand: true; styles ["pill"] } } } ScrolledWindow { hscrollbar-policy: never; hexpand: true; Adw.Clamp { maximum-size: 640; tightening-threshold: 400; Box { orientation: vertical; spacing: 24; margin-start: 24; margin-end: 24; margin-top: 24; margin-bottom: 24; $BzLozenge lozenge { title: _("Safe"); icon-names: [ "app-safety-ok-symbolic", ]; importance: unimportant; } ListBox permissions_list { selection-mode: none; styles [ "boxed-list", ] } Adw.PreferencesGroup { margin-top: 10; title: _("Details"); Adw.ActionRow license_row { title: _("License"); subtitle: bind template.entry as <$BzEntry>.project-license; subtitle-selectable: true; visible: bind $not($is_empty_string(license_row.subtitle) as ) as ; styles [ "property", ] } Adw.ActionRow { title: _("App ID"); subtitle: bind template.entry as <$BzEntry>.id; subtitle-selectable: true; styles [ "property", ] } Adw.ActionRow { title: _("SDK"); subtitle: bind template.entry as <$BzFlatpakEntry>.runtime as <$BzResult>.object as <$BzEntry>.title; subtitle-selectable: true; has-tooltip: true; tooltip-text: bind template.entry as <$BzFlatpakEntry>.application-runtime; visible: bind $invert_boolean( $is_null(template.entry as <$BzFlatpakEntry>.runtime as <$BzResult>.object) as ) as ; styles [ "property", ] [suffix] MenuButton { visible: bind $invert_boolean($is_null(template.entry as <$BzEntry>.eol) as ) as ; styles [ "error", "flat", ] valign: center; icon-name: "dialog-warning-symbolic"; popover: Popover { child: Label { margin-top: 8; margin-bottom: 8; margin-start: 8; margin-end: 8; max-width-chars: 35; wrap: true; label: _( "This app uses an outdated version of the software platform (SDK) and might contain bugs or security vulnerabilities which will not be fixed." ); }; }; } } } } } } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-safety-dialog.c000066400000000000000000000275301522167256300215340ustar00rootroot00000000000000/* bz-safety-dialog.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-app-permissions.h" #include "bz-context-row.h" #include "bz-entry.h" #include "bz-lozenge.h" #include "bz-safety-calculator.h" #include "bz-safety-dialog.h" #include "bz-safety-row.h" #include "bz-template-callbacks.h" #define ANIMATION_DURATION 300 struct _BzSafetyDialog { AdwBin parent_instance; BzEntry *entry; gboolean has_sandbox_escape; AdwAnimation *width_animation; AdwAnimation *height_animation; BzLozenge *lozenge; GtkListBox *permissions_list; AdwCarousel *carousel; GtkBox *global_box; }; G_DEFINE_FINAL_TYPE (BzSafetyDialog, bz_safety_dialog, ADW_TYPE_BIN) enum { PROP_0, PROP_ENTRY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void update_permissions_list (BzSafetyDialog *self); static void animate_to_page (BzSafetyDialog *self, guint page_index); static void bz_safety_dialog_dispose (GObject *object) { BzSafetyDialog *self = BZ_SAFETY_DIALOG (object); g_clear_object (&self->entry); g_clear_object (&self->width_animation); g_clear_object (&self->height_animation); G_OBJECT_CLASS (bz_safety_dialog_parent_class)->dispose (object); } static void bz_safety_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSafetyDialog *self = BZ_SAFETY_DIALOG (object); switch (prop_id) { case PROP_ENTRY: g_value_set_object (value, self->entry); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_safety_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzSafetyDialog *self; self = BZ_SAFETY_DIALOG (object); switch (prop_id) { case PROP_ENTRY: g_clear_object (&self->entry); self->entry = g_value_dup_object (value); update_permissions_list (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void get_target_size (BzSafetyDialog *self, guint page_index, int *out_width, int *out_height) { if (page_index == 0) { int nat = 0; *out_width = 450; gtk_widget_measure (GTK_WIDGET (self->global_box), GTK_ORIENTATION_VERTICAL, *out_width, NULL, &nat, NULL, NULL); *out_height = CLAMP (nat + 48, 100, 600); } else { *out_width = 640; *out_height = 576; } } static void animate_to_page (BzSafetyDialog *self, guint page_index) { AdwDialog *dialog = NULL; int target_width = 0; int target_height = 0; int cur_w = 0; int cur_h = 0; dialog = ADW_DIALOG (gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_DIALOG)); if (dialog == NULL) return; if (self->width_animation == NULL || self->height_animation == NULL) return; get_target_size (self, page_index, &target_width, &target_height); cur_w = adw_dialog_get_content_width (dialog); cur_h = adw_dialog_get_content_height (dialog); adw_animation_skip (self->width_animation); adw_animation_skip (self->height_animation); adw_timed_animation_set_duration (ADW_TIMED_ANIMATION (self->width_animation), ANIMATION_DURATION); adw_timed_animation_set_duration (ADW_TIMED_ANIMATION (self->height_animation), ANIMATION_DURATION); adw_timed_animation_set_value_from (ADW_TIMED_ANIMATION (self->width_animation), cur_w); adw_timed_animation_set_value_to (ADW_TIMED_ANIMATION (self->width_animation), target_width); adw_timed_animation_set_value_from (ADW_TIMED_ANIMATION (self->height_animation), cur_h); adw_timed_animation_set_value_to (ADW_TIMED_ANIMATION (self->height_animation), target_height); adw_animation_play (self->width_animation); adw_animation_play (self->height_animation); } static void on_dialog_map (BzSafetyDialog *self) { AdwDialog *dialog = NULL; int target_width = 0; int target_height = 0; guint page_index = self->has_sandbox_escape ? 0 : 1; dialog = ADW_DIALOG (gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_DIALOG)); if (dialog == NULL) return; if (page_index == 1) { GtkWidget *page = NULL; page = gtk_widget_get_last_child (GTK_WIDGET (self->carousel)); adw_carousel_scroll_to (self->carousel, page, FALSE); } get_target_size (self, page_index, &target_width, &target_height); adw_dialog_set_content_width (dialog, target_width); adw_dialog_set_content_height (dialog, target_height); } static void next_page (BzSafetyDialog *self, GtkButton *button) { GtkWidget *page = NULL; page = gtk_widget_get_last_child (GTK_WIDGET (self->carousel)); adw_carousel_scroll_to (self->carousel, page, TRUE); animate_to_page (self, 1); } static void bz_safety_dialog_class_init (BzSafetyDialogClass *klass) { GObjectClass *object_class; GtkWidgetClass *widget_class; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_safety_dialog_dispose; object_class->get_property = bz_safety_dialog_get_property; object_class->set_property = bz_safety_dialog_set_property; props[PROP_ENTRY] = g_param_spec_object ("entry", NULL, NULL, BZ_TYPE_ENTRY, G_PARAM_READWRITE); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LOZENGE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-safety-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzSafetyDialog, lozenge); gtk_widget_class_bind_template_child (widget_class, BzSafetyDialog, permissions_list); gtk_widget_class_bind_template_child (widget_class, BzSafetyDialog, carousel); gtk_widget_class_bind_template_child (widget_class, BzSafetyDialog, global_box); gtk_widget_class_bind_template_callback (widget_class, next_page); } static void bz_safety_dialog_init (BzSafetyDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwDialog * bz_safety_dialog_new (BzEntry *entry) { BzSafetyDialog *widget = NULL; AdwDialog *dialog = NULL; AdwAnimationTarget *width_target = NULL; AdwAnimationTarget *height_target = NULL; widget = g_object_new (BZ_TYPE_SAFETY_DIALOG, NULL); dialog = adw_dialog_new (); adw_dialog_set_content_height (dialog, 576); adw_dialog_set_content_width (dialog, 640); adw_dialog_set_child (dialog, GTK_WIDGET (widget)); width_target = adw_property_animation_target_new (G_OBJECT (dialog), "content-width"); widget->width_animation = adw_timed_animation_new (GTK_WIDGET (widget), 0, 0, ANIMATION_DURATION, width_target); height_target = adw_property_animation_target_new (G_OBJECT (dialog), "content-height"); widget->height_animation = adw_timed_animation_new (GTK_WIDGET (widget), 0, 0, ANIMATION_DURATION, height_target); g_object_set (widget, "entry", entry, NULL); g_signal_connect_swapped (widget, "map", G_CALLBACK (on_dialog_map), widget); return dialog; } AdwNavigationPage * bz_safety_dialog_page_new (BzEntry *entry) { BzSafetyDialog *widget = NULL; AdwNavigationPage *page = NULL; widget = g_object_new (BZ_TYPE_SAFETY_DIALOG, "entry", entry, NULL); page = adw_navigation_page_new (GTK_WIDGET (widget), _ ("Safety")); adw_navigation_page_set_tag (page, "safety"); return page; } static void update_permissions_list (BzSafetyDialog *self) { const char *icon_names[2]; const char *app_name = NULL; g_autofree char *title_text = NULL; BzImportance importance = BZ_IMPORTANCE_UNIMPORTANT; GtkWidget *child = NULL; g_autoptr (GListModel) model = NULL; guint n_items = 0; g_autoptr (BzAppPermissions) permissions = NULL; BzAppPermissionsFlags perm_flags = BZ_APP_PERMISSIONS_FLAGS_NONE; while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->permissions_list))) != NULL) gtk_list_box_remove (self->permissions_list, child); if (self->entry == NULL) return; g_object_get (self->entry, "permissions", &permissions, NULL); if (permissions != NULL) perm_flags = bz_app_permissions_get_flags (permissions); self->has_sandbox_escape = (perm_flags & BZ_APP_PERMISSIONS_FLAGS_ESCAPE_SANDBOX) != 0; app_name = bz_entry_get_title (self->entry); model = bz_safety_calculator_analyze_entry (self->entry); importance = bz_safety_calculator_calculate_rating (self->entry); n_items = g_list_model_get_n_items (model); for (gint level = BZ_IMPORTANCE_IMPORTANT; level >= BZ_IMPORTANCE_UNIMPORTANT; level--) { for (gint j = 0; j < n_items; j++) { g_autoptr (BzSafetyRow) row_data = NULL; AdwActionRow *row = NULL; BzImportance row_importance = 0; row_data = g_list_model_get_item (model, j); row_importance = bz_safety_row_get_importance (row_data); if (row_importance != level) continue; row = bz_context_row_new (bz_safety_row_get_icon_name (row_data), bz_safety_row_get_importance (row_data), bz_safety_row_get_title (row_data), bz_safety_row_get_subtitle (row_data)); gtk_list_box_append (self->permissions_list, GTK_WIDGET (row)); } } switch (importance) { case BZ_IMPORTANCE_UNIMPORTANT: icon_names[0] = "app-safety-ok-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s is Safe"), app_name); break; case BZ_IMPORTANCE_NEUTRAL: icon_names[0] = "app-safety-ok-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s has no Unsafe Permissions"), app_name); break; case BZ_IMPORTANCE_INFORMATION: icon_names[0] = "app-safety-ok-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s is Probably Safe"), app_name); break; case BZ_IMPORTANCE_WARNING: icon_names[0] = "app-safety-unknown-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s is Possibly Unsafe"), app_name); break; case BZ_IMPORTANCE_IMPORTANT: icon_names[0] = "app-safety-unsafe-symbolic"; icon_names[1] = NULL; title_text = g_strdup_printf (_ ("%s is Unsafe"), app_name); break; default: g_assert_not_reached (); } bz_lozenge_set_icon_names (self->lozenge, icon_names); bz_lozenge_set_title (self->lozenge, title_text); bz_lozenge_set_importance (self->lozenge, importance); } bazaar-org-bazaar-b6e9a65/src/bz-safety-dialog.h000066400000000000000000000021451522167256300215340ustar00rootroot00000000000000/* bz-safety-dialog.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-entry.h" #include G_BEGIN_DECLS G_BEGIN_DECLS #define BZ_TYPE_SAFETY_DIALOG (bz_safety_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzSafetyDialog, bz_safety_dialog, BZ, SAFETY_DIALOG, AdwBin) AdwDialog * bz_safety_dialog_new (BzEntry *entry); AdwNavigationPage * bz_safety_dialog_page_new (BzEntry *entry); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-safety-row.txt000066400000000000000000000004441522167256300214740ustar00rootroot00000000000000prefix=bz name=safety_row parent-prefix=g parent-name=object author=AUTOGEN include="bz-context-row.h" property=importance BzImportance BZ_TYPE_IMPORTANCE enum property=title char G_TYPE_STRING string property=subtitle char G_TYPE_STRING string property=icon_name char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-screenshot-page.blp000066400000000000000000000120641522167256300224220ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzScreenshotPage: Adw.Bin { child: Adw.BreakpointBin { width-request: 360; height-request: 100; Adw.Breakpoint { condition ("max-width: 700px") setters { mobile_caption_box.margin-bottom: 70; } } child: Adw.ToastOverlay toast_overlay { child: Adw.ToolbarView { top-bar-style: flat; extend-content-to-top-edge: true; styles [ "view-dark", ] [top] Adw.HeaderBar header_bar { styles [ "flat", "header-osd", ] show-end-title-buttons: false; show-start-title-buttons: false; show-back-button: false; show-title: false; [start] Button back_button { icon-name: "go-previous-symbolic"; tooltip-text: _("Back"); clicked => $back_clicked() swapped; styles [ "flat", ] } } content: Overlay { [overlay] Box { orientation: horizontal; halign: start; valign: end; margin-bottom: 12; margin-start: 12; spacing: 6; Box navigation_controls { orientation: horizontal; spacing: 6; visible: bind $has_multiple_screenshots(template.screenshots) as ; styles [ "osd-box", ] Button previous_button { icon-name: "go-previous-symbolic"; tooltip-text: _("Previous Screenshot"); clicked => $previous_clicked() swapped; styles [ "flat", ] } Button next_button { icon-name: "go-next-symbolic"; tooltip-text: _("Next Screenshot"); clicked => $next_clicked() swapped; styles [ "flat", ] } } Box { styles [ "osd-box", ] Button copy_button { icon-name: "edit-copy-symbolic"; tooltip-text: _("Copy Image"); clicked => $copy_clicked() swapped; styles [ "flat", ] } } } [overlay] Revealer { halign: center; valign: end; reveal-child: bind $is_valid_string(template.current-caption) as ; transition-type: crossfade; can-target: false; child: Box mobile_caption_box { margin-bottom: 12; styles [ "osd-box", ] Label { halign: center; hexpand: true; label: bind template.current-caption; height-request: 34; justify: center; max-width-chars: 30; wrap: true; margin-start: 8; margin-end: 8; wrap-mode: word_char; styles [ "heading" ] } }; } [overlay] Box { orientation: horizontal; halign: end; valign: end; margin-bottom: 12; margin-end: 12; Box zoom_controls { orientation: horizontal; styles [ "osd-box", ] Revealer { reveal-child: bind template.is-zoomed as ; transition-type: slide_right; Button reset_zoom_button { icon-name: "zoom-original-symbolic"; tooltip-text: _("Reset View"); clicked => $reset_zoom_clicked() swapped; styles [ "flat", ] } } Button zoom_out_button { icon-name: "zoom-minus-symbolic"; tooltip-text: _("Zoom Out"); clicked => $zoom_out_clicked() swapped; styles [ "flat", ] } Button zoom_in_button { icon-name: "zoom-plus-symbolic"; tooltip-text: _("Zoom In"); clicked => $zoom_in_clicked() swapped; styles [ "flat", ] } } } child: Adw.Carousel carousel { can-focus: false; interactive: bind $invert_boolean(template.is-zoomed) as ; allow-scroll-wheel: bind $invert_boolean(template.is-zoomed) as ; allow-mouse-drag: bind $invert_boolean(template.is-zoomed) as ; allow-long-swipes: false; notify::position => $on_carousel_position_changed(); }; }; }; }; }; }bazaar-org-bazaar-b6e9a65/src/bz-screenshot-page.c000066400000000000000000000670441522167256300220770ustar00rootroot00000000000000/* bz-screenshot-page.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include "bz-screenshot-page.h" #include "bz-screenshot.h" #include "bz-zoom.h" #include #define MOUSE_BACK_BUTTON 8 #define SPRING_DAMPING_RATIO 1.05 #define SPRING_MASS 1.0 #define SPRING_STIFFNESS 1000.0 struct _BzScreenshotPage { AdwBin parent_instance; AdwCarousel *carousel; AdwToastOverlay *toast_overlay; GListModel *screenshots; GListModel *captions; guint current_index; guint initial_index; gboolean is_zoomed; GtkWidget *source_widget; GdkTexture *source_texture; graphene_rect_t source_bounds_at_map; AdwSpringAnimation *animation; double animation_progress; gboolean closing; }; G_DEFINE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, ADW_TYPE_BIN) enum { PROP_0, PROP_SCREENSHOTS, PROP_CURRENT_INDEX, PROP_CURRENT_CAPTION, PROP_IS_ZOOMED, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static GdkTexture *render_widget_to_texture (GtkWidget *widget); static void on_animation_value (AdwSpringAnimation *animation, GParamSpec *pspec, BzScreenshotPage *self); static void on_close_animation_done (AdwAnimation *animation, BzScreenshotPage *self); static void on_zoom_level_changed (BzZoom *zoom, GParamSpec *pspec, BzScreenshotPage *self); static void update_is_zoomed (BzScreenshotPage *self); static void connect_zoom_signal (BzScreenshotPage *self, GtkWidget *page); static BzZoom *get_current_zoom (BzScreenshotPage *self); static void populate_carousel (BzScreenshotPage *self); static gboolean on_key_pressed (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state, BzScreenshotPage *self); static void on_button_pressed (GtkGestureClick *gesture, int n_press, double x, double y, BzScreenshotPage *self); static void on_swipe (BzScreenshotPage *self, gdouble vel_x, gdouble vel_y); static gboolean on_scroll (BzScreenshotPage *self, gdouble dx, gdouble dy, GtkEventControllerScroll *controller); static void bz_screenshot_page_map (GtkWidget *widget) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (widget); AdwAnimationTarget *target = NULL; AdwSpringParams *params = NULL; GTK_WIDGET_CLASS (bz_screenshot_page_parent_class)->map (widget); if (self->source_widget != NULL) { self->source_texture = render_widget_to_texture (self->source_widget); if (!gtk_widget_compute_bounds (self->source_widget, widget, &self->source_bounds_at_map)) graphene_rect_init (&self->source_bounds_at_map, 0, 0, gtk_widget_get_width (widget), gtk_widget_get_height (widget)); gtk_widget_set_opacity (self->source_widget, 0.0); } self->animation_progress = 0.0; self->closing = FALSE; target = adw_callback_animation_target_new ((AdwAnimationTargetFunc) gtk_widget_queue_draw, self, NULL); params = adw_spring_params_new (SPRING_DAMPING_RATIO, SPRING_MASS, SPRING_STIFFNESS); self->animation = ADW_SPRING_ANIMATION ( adw_spring_animation_new (widget, 0.0, 1.0, params, target)); adw_spring_animation_set_clamp (self->animation, TRUE); adw_spring_animation_set_epsilon (ADW_SPRING_ANIMATION (self->animation), 0.0001); adw_spring_animation_set_initial_velocity (ADW_SPRING_ANIMATION (self->animation), -1.2); g_signal_connect (self->animation, "notify::value", G_CALLBACK (on_animation_value), self); adw_animation_play (ADW_ANIMATION (self->animation)); } static void bz_screenshot_page_unmap (GtkWidget *widget) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (widget); if (self->source_widget != NULL && !self->closing) gtk_widget_set_opacity (self->source_widget, 1.0); GTK_WIDGET_CLASS (bz_screenshot_page_parent_class)->unmap (widget); } static void bz_screenshot_page_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (widget); double progress = 0.0; int width = 0; int height = 0; float rev = 0.0f; float x = 0.0f; float y = 0.0f; float w = 0.0f; float h = 0.0f; graphene_rect_t lerped; graphene_rect_t source_bounds; progress = self->animation_progress; width = gtk_widget_get_width (widget); height = gtk_widget_get_height (widget); if (self->source_texture == NULL || progress >= 1.0) { GTK_WIDGET_CLASS (bz_screenshot_page_parent_class)->snapshot (widget, snapshot); return; } if (self->source_widget != NULL && !gtk_widget_compute_bounds (self->source_widget, widget, &source_bounds)) source_bounds = self->source_bounds_at_map; else if (self->source_widget == NULL) source_bounds = self->source_bounds_at_map; rev = (float) (1.0 - progress); x = source_bounds.origin.x * rev + 0.0f * (float) progress; y = source_bounds.origin.y * rev + 0.0f * (float) progress; w = source_bounds.size.width * rev + (float) width * (float) progress; h = source_bounds.size.height * rev + (float) height * (float) progress; graphene_rect_init (&lerped, x, y, w, h); gtk_snapshot_push_clip (snapshot, &lerped); gtk_snapshot_push_cross_fade (snapshot, progress); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); gtk_snapshot_scale (snapshot, w / source_bounds.size.width, h / source_bounds.size.height); gdk_paintable_snapshot (GDK_PAINTABLE (self->source_texture), snapshot, source_bounds.size.width, source_bounds.size.height); gtk_snapshot_restore (snapshot); gtk_snapshot_pop (snapshot); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); gtk_snapshot_scale (snapshot, w / (float) width, h / (float) height); GTK_WIDGET_CLASS (bz_screenshot_page_parent_class)->snapshot (widget, snapshot); gtk_snapshot_restore (snapshot); gtk_snapshot_pop (snapshot); gtk_snapshot_pop (snapshot); } static void back_clicked (BzScreenshotPage *self) { AdwAnimationTarget *target = NULL; AdwSpringParams *params = NULL; GtkWidget *parent = NULL; if (self->closing) return; if (self->source_widget != NULL) { self->closing = TRUE; gtk_widget_set_can_target (GTK_WIDGET (self), FALSE); if (self->animation != NULL) { g_signal_handlers_disconnect_by_func (self->animation, on_animation_value, self); g_clear_object (&self->animation); } target = adw_callback_animation_target_new ( (AdwAnimationTargetFunc) gtk_widget_queue_draw, self, NULL); params = adw_spring_params_new (SPRING_DAMPING_RATIO, SPRING_MASS, SPRING_STIFFNESS); self->animation = ADW_SPRING_ANIMATION ( adw_spring_animation_new (GTK_WIDGET (self), self->animation_progress, 0.0, params, target)); adw_spring_animation_set_clamp (self->animation, TRUE); adw_spring_animation_set_epsilon (ADW_SPRING_ANIMATION (self->animation), 0.0001); adw_spring_animation_set_initial_velocity (ADW_SPRING_ANIMATION (self->animation), -1.2); g_signal_connect (self->animation, "notify::value", G_CALLBACK (on_animation_value), self); g_signal_connect (self->animation, "done", G_CALLBACK (on_close_animation_done), self); adw_animation_play (ADW_ANIMATION (self->animation)); } else { if (self->source_widget != NULL) gtk_widget_set_opacity (self->source_widget, 1.0); parent = gtk_widget_get_parent (GTK_WIDGET (self)); if (parent != NULL) gtk_overlay_remove_overlay (GTK_OVERLAY (parent), GTK_WIDGET (self)); } } static void zoom_in_clicked (BzScreenshotPage *self) { BzZoom *zoom = NULL; zoom = get_current_zoom (self); if (zoom != NULL) bz_zoom_zoom_in (zoom); } static void zoom_out_clicked (BzScreenshotPage *self) { BzZoom *zoom = NULL; zoom = get_current_zoom (self); if (zoom != NULL) bz_zoom_zoom_out (zoom); } static void reset_zoom_clicked (BzScreenshotPage *self) { BzZoom *zoom = NULL; zoom = get_current_zoom (self); if (zoom != NULL) bz_zoom_reset (zoom); } static void previous_clicked (BzScreenshotPage *self) { guint n_pages = 0; GtkWidget *page = NULL; n_pages = adw_carousel_get_n_pages (self->carousel); if (n_pages == 0) return; if (self->current_index > 0) page = adw_carousel_get_nth_page (self->carousel, self->current_index - 1); else page = adw_carousel_get_nth_page (self->carousel, n_pages - 1); if (page != NULL) adw_carousel_scroll_to (self->carousel, page, TRUE); } static void next_clicked (BzScreenshotPage *self) { guint n_pages = 0; GtkWidget *page = NULL; n_pages = adw_carousel_get_n_pages (self->carousel); if (n_pages == 0) return; if (self->current_index < n_pages - 1) page = adw_carousel_get_nth_page (self->carousel, self->current_index + 1); else page = adw_carousel_get_nth_page (self->carousel, 0); if (page != NULL) adw_carousel_scroll_to (self->carousel, page, TRUE); } static void on_carousel_position_changed (AdwCarousel *carousel, GParamSpec *pspec, BzScreenshotPage *self) { GtkWidget *old_page = NULL; GtkWidget *new_page = NULL; BzZoom *old_zoom = NULL; guint new_index = 0; guint n_pages = 0; new_index = (guint) round (adw_carousel_get_position (carousel)); n_pages = adw_carousel_get_n_pages (carousel); if (new_index == self->current_index || new_index >= n_pages) return; if (self->current_index < n_pages) { old_page = adw_carousel_get_nth_page (carousel, self->current_index); if (old_page != NULL && BZ_IS_ZOOM (old_page)) { old_zoom = BZ_ZOOM (old_page); g_signal_handlers_disconnect_by_func (old_zoom, on_zoom_level_changed, self); bz_zoom_reset (old_zoom); } } self->current_index = new_index; if (new_index < n_pages) { new_page = adw_carousel_get_nth_page (carousel, new_index); connect_zoom_signal (self, new_page); } update_is_zoomed (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_INDEX]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_CAPTION]); } static void copy_clicked (BzScreenshotPage *self) { g_autoptr (BzAsyncTexture) async_texture = NULL; g_autoptr (GdkTexture) texture = NULL; GdkClipboard *clipboard = NULL; AdwToast *toast = NULL; guint n_items = 0; guint actual_index = 0; if (self->screenshots == NULL) return; n_items = g_list_model_get_n_items (self->screenshots); if (n_items == 0) return; actual_index = (self->initial_index + self->current_index) % n_items; async_texture = g_list_model_get_item (self->screenshots, actual_index); if (async_texture == NULL) return; texture = bz_async_texture_dup_texture (async_texture); if (texture == NULL) return; clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_texture (clipboard, texture); toast = adw_toast_new (_ ("Copied!")); adw_toast_set_timeout (toast, 1); adw_toast_overlay_add_toast (self->toast_overlay, toast); } static void on_zoom_level_changed (BzZoom *zoom, GParamSpec *pspec, BzScreenshotPage *self) { update_is_zoomed (self); } static gboolean has_multiple_screenshots (GObject *object, GListModel *screenshots, gpointer user_data) { if (screenshots == NULL) return FALSE; return g_list_model_get_n_items (screenshots) > 1; } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_valid_string (gpointer object, const char *value) { return value != NULL && *value != '\0'; } static void bz_screenshot_page_dispose (GObject *object) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); g_clear_object (&self->screenshots); g_clear_object (&self->captions); g_clear_object (&self->source_texture); g_clear_object (&self->animation); G_OBJECT_CLASS (bz_screenshot_page_parent_class)->dispose (object); } static void bz_screenshot_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); switch (prop_id) { case PROP_SCREENSHOTS: g_value_set_object (value, self->screenshots); break; case PROP_CURRENT_INDEX: g_value_set_uint (value, self->current_index); break; case PROP_CURRENT_CAPTION: { const char *caption = NULL; caption = bz_screenshot_page_get_current_caption (self); g_value_set_string (value, caption); } break; case PROP_IS_ZOOMED: g_value_set_boolean (value, self->is_zoomed); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_screenshot_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); switch (prop_id) { case PROP_SCREENSHOTS: g_set_object (&self->screenshots, g_value_get_object (value)); break; case PROP_CURRENT_INDEX: self->initial_index = g_value_get_uint (value); break; case PROP_CURRENT_CAPTION: case PROP_IS_ZOOMED: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_screenshot_page_constructed (GObject *object) { BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); GtkWidget *page = NULL; G_OBJECT_CLASS (bz_screenshot_page_parent_class)->constructed (object); populate_carousel (self); self->current_index = 0; page = adw_carousel_get_nth_page (self->carousel, 0); if (page != NULL) connect_zoom_signal (self, page); update_is_zoomed (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_CAPTION]); } static void bz_screenshot_page_class_init (BzScreenshotPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_screenshot_page_dispose; object_class->constructed = bz_screenshot_page_constructed; object_class->get_property = bz_screenshot_page_get_property; object_class->set_property = bz_screenshot_page_set_property; widget_class->map = bz_screenshot_page_map; widget_class->unmap = bz_screenshot_page_unmap; widget_class->snapshot = bz_screenshot_page_snapshot; props[PROP_SCREENSHOTS] = g_param_spec_object ( "screenshots", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_CURRENT_INDEX] = g_param_spec_uint ( "current-index", NULL, NULL, 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); props[PROP_CURRENT_CAPTION] = g_param_spec_string ( "current-caption", NULL, NULL, NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_IS_ZOOMED] = g_param_spec_boolean ( "is-zoomed", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_ZOOM); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshot-page.ui"); gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, carousel); gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, toast_overlay); gtk_widget_class_bind_template_callback (widget_class, back_clicked); gtk_widget_class_bind_template_callback (widget_class, zoom_in_clicked); gtk_widget_class_bind_template_callback (widget_class, zoom_out_clicked); gtk_widget_class_bind_template_callback (widget_class, on_carousel_position_changed); gtk_widget_class_bind_template_callback (widget_class, reset_zoom_clicked); gtk_widget_class_bind_template_callback (widget_class, copy_clicked); gtk_widget_class_bind_template_callback (widget_class, previous_clicked); gtk_widget_class_bind_template_callback (widget_class, next_clicked); gtk_widget_class_bind_template_callback (widget_class, has_multiple_screenshots); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_valid_string); } static void bz_screenshot_page_init (BzScreenshotPage *self) { GtkEventController *key_controller = NULL; GtkEventController *scroll = NULL; GtkGesture *swipe = NULL; GtkGesture *click = NULL; gtk_widget_init_template (GTK_WIDGET (self)); key_controller = gtk_event_controller_key_new (); gtk_event_controller_set_propagation_phase (key_controller, GTK_PHASE_CAPTURE); g_signal_connect (key_controller, "key-pressed", G_CALLBACK (on_key_pressed), self); gtk_widget_add_controller (GTK_WIDGET (self), key_controller); swipe = gtk_gesture_swipe_new (); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (swipe), GTK_PHASE_CAPTURE); g_signal_connect_swapped (swipe, "swipe", G_CALLBACK (on_swipe), self); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (swipe), TRUE); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (swipe)); click = gtk_gesture_click_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (click), 0); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (click), GTK_PHASE_CAPTURE); g_signal_connect (click, "pressed", G_CALLBACK (on_button_pressed), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (click)); scroll = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); gtk_event_controller_set_propagation_phase (scroll, GTK_PHASE_BUBBLE); g_signal_connect_swapped (scroll, "scroll", G_CALLBACK (on_scroll), self); gtk_widget_add_controller (GTK_WIDGET (self), scroll); } const char * bz_screenshot_page_get_current_caption (BzScreenshotPage *self) { g_autoptr (GtkStringObject) caption_obj = NULL; guint n_items = 0; guint actual_index = 0; g_return_val_if_fail (BZ_IS_SCREENSHOT_PAGE (self), NULL); if (self->captions == NULL) return ""; n_items = g_list_model_get_n_items (self->captions); if (n_items == 0) return ""; actual_index = (self->initial_index + self->current_index) % n_items; caption_obj = g_list_model_get_item (self->captions, actual_index); if (caption_obj == NULL) return ""; return gtk_string_object_get_string (caption_obj); } void bz_screenshot_page_set_captions (BzScreenshotPage *self, GListModel *captions) { g_return_if_fail (BZ_IS_SCREENSHOT_PAGE (self)); g_set_object (&self->captions, captions); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_CAPTION]); } void bz_screenshot_page_close (BzScreenshotPage *self) { g_return_if_fail (BZ_IS_SCREENSHOT_PAGE (self)); back_clicked (self); } gboolean bz_screenshot_page_is_closing (BzScreenshotPage *self) { return self->closing; } AdwBin * bz_screenshot_page_new (GListModel *screenshots, GListModel *captions, guint initial_index, GtkWidget *source_widget) { BzScreenshotPage *page = NULL; page = g_object_new ( BZ_TYPE_SCREENSHOT_PAGE, "screenshots", screenshots, "current-index", initial_index, NULL); page->source_widget = source_widget; if (captions != NULL) bz_screenshot_page_set_captions (page, captions); return ADW_BIN (page); } static GdkTexture * render_widget_to_texture (GtkWidget *widget) { g_autoptr (GtkWidgetPaintable) paintable = NULL; g_autoptr (GtkSnapshot) snapshot = NULL; g_autoptr (GskRenderNode) node = NULL; GtkNative *native = NULL; GdkTexture *texture = NULL; paintable = GTK_WIDGET_PAINTABLE (gtk_widget_paintable_new (widget)); snapshot = gtk_snapshot_new (); gdk_paintable_snapshot (GDK_PAINTABLE (paintable), snapshot, gdk_paintable_get_intrinsic_width (GDK_PAINTABLE (paintable)), gdk_paintable_get_intrinsic_height (GDK_PAINTABLE (paintable))); node = gtk_snapshot_to_node (snapshot); native = gtk_widget_get_native (widget); if (node != NULL && native != NULL) texture = gsk_renderer_render_texture ( gtk_native_get_renderer (native), node, NULL); return texture; } static void on_animation_value (AdwSpringAnimation *animation, GParamSpec *pspec, BzScreenshotPage *self) { self->animation_progress = adw_animation_get_value (ADW_ANIMATION (animation)); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void on_close_animation_done (AdwAnimation *animation, BzScreenshotPage *self) { GtkWidget *parent = NULL; if (self->source_widget != NULL) gtk_widget_set_opacity (self->source_widget, 1.0); parent = gtk_widget_get_parent (GTK_WIDGET (self)); if (parent != NULL) gtk_overlay_remove_overlay (GTK_OVERLAY (parent), GTK_WIDGET (self)); } static void populate_carousel (BzScreenshotPage *self) { guint n_items = 0; guint i = 0; if (self->screenshots == NULL) return; n_items = g_list_model_get_n_items (self->screenshots); if (n_items == 0) return; for (guint offset = 0; offset < n_items; offset++) { g_autoptr (BzAsyncTexture) async_texture = NULL; GtkWidget *zoom_widget = NULL; GtkWidget *screenshot = NULL; i = (self->initial_index + offset) % n_items; async_texture = g_list_model_get_item (self->screenshots, i); if (async_texture == NULL) continue; screenshot = bz_screenshot_new (); bz_screenshot_set_paintable (BZ_SCREENSHOT (screenshot), GDK_PAINTABLE (async_texture)); bz_screenshot_set_rounded_corners (BZ_SCREENSHOT (screenshot), FALSE); gtk_widget_set_margin_top (screenshot, 25); gtk_widget_set_margin_bottom (screenshot, 25); gtk_widget_set_margin_start (screenshot, 25); gtk_widget_set_margin_end (screenshot, 25); zoom_widget = bz_zoom_new (); gtk_widget_set_hexpand (zoom_widget, TRUE); gtk_widget_set_vexpand (zoom_widget, TRUE); bz_zoom_set_child (BZ_ZOOM (zoom_widget), screenshot); adw_carousel_append (self->carousel, zoom_widget); } } static void update_is_zoomed (BzScreenshotPage *self) { GtkWidget *screenshot = NULL; BzZoom *zoom = NULL; double zoom_level = 0.0; gboolean was_zoomed = FALSE; was_zoomed = self->is_zoomed; zoom = get_current_zoom (self); if (zoom != NULL) { g_object_get (zoom, "zoom-level", &zoom_level, NULL); screenshot = bz_zoom_get_child (zoom); if (screenshot != NULL) bz_screenshot_set_filter ( BZ_SCREENSHOT (screenshot), zoom_level <= 4.5 ? GSK_SCALING_FILTER_TRILINEAR : GSK_SCALING_FILTER_NEAREST); } self->is_zoomed = zoom != NULL && bz_zoom_is_transformed (zoom); if (was_zoomed != self->is_zoomed) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IS_ZOOMED]); } static void connect_zoom_signal (BzScreenshotPage *self, GtkWidget *page) { BzZoom *zoom = NULL; if (page != NULL && BZ_IS_ZOOM (page)) { zoom = BZ_ZOOM (page); g_signal_connect (zoom, "notify::zoom-level", G_CALLBACK (on_zoom_level_changed), self); } } static BzZoom * get_current_zoom (BzScreenshotPage *self) { GtkWidget *page = NULL; guint n_pages = 0; n_pages = adw_carousel_get_n_pages (self->carousel); if (self->current_index >= n_pages) return NULL; page = adw_carousel_get_nth_page (self->carousel, self->current_index); if (page == NULL || !BZ_IS_ZOOM (page)) return NULL; return BZ_ZOOM (page); } static gboolean on_key_pressed (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state, BzScreenshotPage *self) { if (keyval == GDK_KEY_Left) { previous_clicked (self); return TRUE; } else if (keyval == GDK_KEY_Right) { next_clicked (self); return TRUE; } return FALSE; } static void on_button_pressed (GtkGestureClick *gesture, int n_press, double x, double y, BzScreenshotPage *self) { if (gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)) == MOUSE_BACK_BUTTON) back_clicked (self); } static void on_swipe (BzScreenshotPage *self, gdouble vel_x, gdouble vel_y) { if (vel_y < -500.0 || vel_y > 500.0) back_clicked (self); } static gboolean on_scroll (BzScreenshotPage *self, gdouble dx, gdouble dy, GtkEventControllerScroll *controller) { GdkEvent *event = NULL; GdkDevice *device = NULL; GdkInputSource source = 0; event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller)); device = gdk_event_get_device (event); source = gdk_device_get_source (device); if (source == GDK_SOURCE_TOUCHPAD && (dy < -2.0 || dy > 2.0)) back_clicked (self); return GDK_EVENT_PROPAGATE; } bazaar-org-bazaar-b6e9a65/src/bz-screenshot-page.h000066400000000000000000000030251522167256300220710ustar00rootroot00000000000000/* bz-screenshot-page.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-async-texture.h" #include G_BEGIN_DECLS #define BZ_TYPE_SCREENSHOT_PAGE (bz_screenshot_page_get_type ()) G_DECLARE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, BZ, SCREENSHOT_PAGE, AdwBin) AdwBin * bz_screenshot_page_new (GListModel *screenshots, GListModel *captions, guint initial_index, GtkWidget *source_widget); void bz_screenshot_page_set_captions (BzScreenshotPage *self, GListModel *captions); const char * bz_screenshot_page_get_current_caption (BzScreenshotPage *self); void bz_screenshot_page_close (BzScreenshotPage *self); gboolean bz_screenshot_page_is_closing (BzScreenshotPage *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-screenshot.c000066400000000000000000000374741522167256300211710ustar00rootroot00000000000000/* bz-screenshot.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-screenshot.h" #include "bz-async-texture.h" #define TOP_HALF_FIXED_WIDTH 650 #define TOP_HALF_FIXED_HEIGHT 265 struct _BzScreenshot { GtkWidget parent_instance; GdkPaintable *paintable; double focus_x; double focus_y; gboolean rounded_corners; gboolean top_half; GskScalingFilter filter; }; G_DEFINE_FINAL_TYPE (BzScreenshot, bz_screenshot, GTK_TYPE_WIDGET) enum { PROP_0, PROP_PAINTABLE, PROP_FOCUS_X, PROP_FOCUS_Y, PROP_ROUNDED_CORNERS, PROP_TOP_HALF, PROP_FILTER, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void invalidate_contents (BzScreenshot *self, GdkPaintable *paintable); static void invalidate_size (BzScreenshot *self, GdkPaintable *paintable); static void async_loaded (BzScreenshot *self, GParamSpec *pspec, BzAsyncTexture *texture); static void bz_screenshot_dispose (GObject *object) { BzScreenshot *self = BZ_SCREENSHOT (object); if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, invalidate_size, self); g_signal_handlers_disconnect_by_func (self->paintable, async_loaded, self); } g_clear_object (&self->paintable); G_OBJECT_CLASS (bz_screenshot_parent_class)->dispose (object); } static void bz_screenshot_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzScreenshot *self = BZ_SCREENSHOT (object); switch (prop_id) { case PROP_PAINTABLE: g_value_set_object (value, bz_screenshot_get_paintable (self)); break; case PROP_FOCUS_X: g_value_set_double (value, bz_screenshot_get_focus_x (self)); break; case PROP_FOCUS_Y: g_value_set_double (value, bz_screenshot_get_focus_y (self)); break; case PROP_ROUNDED_CORNERS: g_value_set_boolean (value, bz_screenshot_get_rounded_corners (self)); break; case PROP_TOP_HALF: g_value_set_boolean (value, bz_screenshot_get_top_half (self)); break; case PROP_FILTER: g_value_set_enum (value, bz_screenshot_get_filter (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_screenshot_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzScreenshot *self = BZ_SCREENSHOT (object); switch (prop_id) { case PROP_PAINTABLE: bz_screenshot_set_paintable (self, g_value_get_object (value)); break; case PROP_FOCUS_X: bz_screenshot_set_focus_x (self, g_value_get_double (value)); break; case PROP_FOCUS_Y: bz_screenshot_set_focus_y (self, g_value_get_double (value)); break; case PROP_ROUNDED_CORNERS: bz_screenshot_set_rounded_corners (self, g_value_get_boolean (value)); break; case PROP_TOP_HALF: bz_screenshot_set_top_half (self, g_value_get_boolean (value)); break; case PROP_FILTER: bz_screenshot_set_filter (self, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static GtkSizeRequestMode bz_screenshot_get_request_mode (GtkWidget *widget) { BzScreenshot *self = BZ_SCREENSHOT (widget); if (self->top_half) return GTK_SIZE_REQUEST_CONSTANT_SIZE; return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } static void bz_screenshot_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BzScreenshot *self = BZ_SCREENSHOT (widget); if (self->paintable == NULL) return; if (self->top_half) { if (orientation == GTK_ORIENTATION_HORIZONTAL) { *minimum = TOP_HALF_FIXED_WIDTH; *natural = TOP_HALF_FIXED_WIDTH; } else { *minimum = TOP_HALF_FIXED_HEIGHT; *natural = TOP_HALF_FIXED_HEIGHT; } } else { if (orientation == GTK_ORIENTATION_VERTICAL) { int intrinsic_height; double intrinsic_aspect_ratio; intrinsic_height = gdk_paintable_get_intrinsic_height (self->paintable); intrinsic_aspect_ratio = gdk_paintable_get_intrinsic_aspect_ratio (self->paintable); if (for_size >= 0 && intrinsic_aspect_ratio > 0.0) { double result; result = ceil ((double) for_size / intrinsic_aspect_ratio); *minimum = (int) MIN (intrinsic_height, result); *natural = (int) MIN (intrinsic_height, result); } else { *minimum = 0; *natural = intrinsic_height; } } else { *minimum = 0; *natural = gdk_paintable_get_intrinsic_width (self->paintable); } } } static void bz_screenshot_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzScreenshot *self; int widget_width; int widget_height; double paintable_aspect; double scaled_w, scaled_h; double x, y; GskRoundedRect rect; self = BZ_SCREENSHOT (widget); if (self->paintable == NULL) return; widget_width = gtk_widget_get_width (widget); widget_height = gtk_widget_get_height (widget); paintable_aspect = gdk_paintable_get_intrinsic_aspect_ratio (self->paintable); if (self->top_half) { int paintable_width = gdk_paintable_get_intrinsic_width (self->paintable); if (paintable_width > TOP_HALF_FIXED_WIDTH) scaled_w = TOP_HALF_FIXED_WIDTH; else scaled_w = paintable_width > 0 ? paintable_width : TOP_HALF_FIXED_WIDTH; if (paintable_aspect > 0.0) scaled_h = scaled_w / paintable_aspect; else scaled_h = widget_height * 2.0; x = (widget_width - scaled_w) / 2.0; y = 0; } else { if (paintable_aspect > 0.0) { scaled_w = widget_width; scaled_h = scaled_w / paintable_aspect; if (scaled_h > widget_height) { scaled_h = widget_height; scaled_w = scaled_h * paintable_aspect; } } else { scaled_w = widget_width; scaled_h = widget_height; } x = (widget_width - scaled_w) / 2.0; y = (widget_height - scaled_h) / 2.0; } if (self->rounded_corners) { rect.corner[0].width = 10.0; rect.corner[0].height = 10.0; rect.corner[1].width = 10.0; rect.corner[1].height = 10.0; rect.corner[2].width = 10.0; rect.corner[2].height = 10.0; rect.corner[3].width = 10.0; rect.corner[3].height = 10.0; if (self->top_half) { rect.bounds = GRAPHENE_RECT_INIT (x, y, scaled_w, scaled_h); gtk_snapshot_push_rounded_clip (snapshot, &rect); gtk_snapshot_push_clip (snapshot, &GRAPHENE_RECT_INIT (0, 0, widget_width, widget_height)); } else { rect.bounds = GRAPHENE_RECT_INIT (0, 0, widget_width, widget_height); gtk_snapshot_push_rounded_clip (snapshot, &rect); } } gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); /* TODO: doesn't handle all cases properly */ if (self->filter == GSK_SCALING_FILTER_NEAREST && BZ_IS_ASYNC_TEXTURE (self->paintable)) { g_autoptr (GdkTexture) texture = NULL; texture = bz_async_texture_dup_texture (BZ_ASYNC_TEXTURE (self->paintable)); if (texture != NULL) gtk_snapshot_append_scaled_texture ( snapshot, texture, self->filter, &GRAPHENE_RECT_INIT (0.0, 0.0, scaled_w, scaled_h)); } else if (self->filter == GSK_SCALING_FILTER_NEAREST && GDK_IS_TEXTURE (self->paintable)) gtk_snapshot_append_scaled_texture ( snapshot, GDK_TEXTURE (self->paintable), self->filter, &GRAPHENE_RECT_INIT (0.0, 0.0, scaled_w, scaled_h)); else gdk_paintable_snapshot (self->paintable, snapshot, scaled_w, scaled_h); if (self->rounded_corners) { gtk_snapshot_pop (snapshot); if (self->top_half) gtk_snapshot_pop (snapshot); } } static void bz_screenshot_class_init (BzScreenshotClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_screenshot_dispose; object_class->get_property = bz_screenshot_get_property; object_class->set_property = bz_screenshot_set_property; props[PROP_PAINTABLE] = g_param_spec_object ( "paintable", NULL, NULL, GDK_TYPE_PAINTABLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_FOCUS_X] = g_param_spec_double ( "focus-x", NULL, NULL, -1.0, G_MAXDOUBLE, -1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_FOCUS_Y] = g_param_spec_double ( "focus-y", NULL, NULL, -1.0, G_MAXDOUBLE, -1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ROUNDED_CORNERS] = g_param_spec_boolean ( "rounded-corners", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TOP_HALF] = g_param_spec_boolean ( "top-half", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_FILTER] = g_param_spec_enum ( "filter", NULL, NULL, GSK_TYPE_SCALING_FILTER, GSK_SCALING_FILTER_TRILINEAR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); widget_class->get_request_mode = bz_screenshot_get_request_mode; widget_class->measure = bz_screenshot_measure; widget_class->snapshot = bz_screenshot_snapshot; } static void bz_screenshot_init (BzScreenshot *self) { self->focus_x = -1.0; self->focus_y = -1.0; self->rounded_corners = TRUE; self->top_half = FALSE; self->filter = GSK_SCALING_FILTER_TRILINEAR; } GtkWidget * bz_screenshot_new (void) { return g_object_new (BZ_TYPE_SCREENSHOT, NULL); } void bz_screenshot_set_paintable (BzScreenshot *self, GdkPaintable *paintable) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); g_return_if_fail (paintable == NULL || GDK_IS_PAINTABLE (paintable)); if (self->paintable != NULL) { g_signal_handlers_disconnect_by_func (self->paintable, invalidate_contents, self); g_signal_handlers_disconnect_by_func (self->paintable, invalidate_size, self); g_signal_handlers_disconnect_by_func (self->paintable, async_loaded, self); } g_clear_object (&self->paintable); if (paintable != NULL) { self->paintable = g_object_ref (paintable); g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK (invalidate_contents), self); g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (invalidate_size), self); if (BZ_IS_ASYNC_TEXTURE (paintable)) g_signal_connect_swapped (paintable, "notify::loaded", G_CALLBACK (async_loaded), self); } gtk_widget_queue_resize (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PAINTABLE]); } GdkPaintable * bz_screenshot_get_paintable (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), NULL); return self->paintable; } void bz_screenshot_set_focus_x (BzScreenshot *self, double focus_x) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); self->focus_x = focus_x; gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOCUS_X]); } double bz_screenshot_get_focus_x (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), 0.0); return self->focus_x; } void bz_screenshot_set_focus_y (BzScreenshot *self, double focus_y) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); self->focus_y = focus_y; gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOCUS_Y]); } double bz_screenshot_get_focus_y (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), 0.0); return self->focus_y; } void bz_screenshot_set_rounded_corners (BzScreenshot *self, gboolean rounded_corners) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); if (self->rounded_corners == rounded_corners) return; self->rounded_corners = rounded_corners; gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ROUNDED_CORNERS]); } gboolean bz_screenshot_get_rounded_corners (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), TRUE); return self->rounded_corners; } void bz_screenshot_set_top_half (BzScreenshot *self, gboolean top_half) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); if (self->top_half == top_half) return; self->top_half = top_half; gtk_widget_queue_resize (GTK_WIDGET (self)); gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TOP_HALF]); } gboolean bz_screenshot_get_top_half (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), FALSE); return self->top_half; } void bz_screenshot_set_filter (BzScreenshot *self, GskScalingFilter filter) { g_return_if_fail (BZ_IS_SCREENSHOT (self)); if (self->filter == filter) return; self->filter = filter; gtk_widget_queue_draw (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FILTER]); } GskScalingFilter bz_screenshot_get_filter (BzScreenshot *self) { g_return_val_if_fail (BZ_IS_SCREENSHOT (self), FALSE); return self->filter; } static void invalidate_contents (BzScreenshot *self, GdkPaintable *paintable) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void invalidate_size (BzScreenshot *self, GdkPaintable *paintable) { gtk_widget_queue_resize (GTK_WIDGET (self)); } static void async_loaded (BzScreenshot *self, GParamSpec *pspec, BzAsyncTexture *texture) { gtk_widget_queue_draw (GTK_WIDGET (self)); gtk_widget_queue_resize (GTK_WIDGET (self)); } bazaar-org-bazaar-b6e9a65/src/bz-screenshot.h000066400000000000000000000037441522167256300211670ustar00rootroot00000000000000/* bz-screenshot.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_SCREENSHOT (bz_screenshot_get_type ()) G_DECLARE_FINAL_TYPE (BzScreenshot, bz_screenshot, BZ, SCREENSHOT, GtkWidget) GtkWidget * bz_screenshot_new (void); void bz_screenshot_set_paintable (BzScreenshot *self, GdkPaintable *paintable); GdkPaintable * bz_screenshot_get_paintable (BzScreenshot *self); void bz_screenshot_set_focus_x (BzScreenshot *self, double focus_x); double bz_screenshot_get_focus_x (BzScreenshot *self); void bz_screenshot_set_focus_y (BzScreenshot *self, double focus_y); double bz_screenshot_get_focus_y (BzScreenshot *self); void bz_screenshot_set_rounded_corners (BzScreenshot *self, gboolean rounded_corners); gboolean bz_screenshot_get_rounded_corners (BzScreenshot *self); void bz_screenshot_set_top_half (BzScreenshot *self, gboolean top_half); gboolean bz_screenshot_get_top_half (BzScreenshot *self); void bz_screenshot_set_filter (BzScreenshot *self, GskScalingFilter filter); GskScalingFilter bz_screenshot_get_filter (BzScreenshot *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-screenshots-carousel.blp000066400000000000000000000054561522167256300235150ustar00rootroot00000000000000using Gtk 4.0; template $BzScreenshotsCarousel: Gtk.Widget { valign: start; accessibility { label: _("Screenshots Carousel"); } styles [ "screenshot-carousel", "frame", "carousel-box", ] layout-manager: Gtk.BinLayout {}; Gtk.Overlay { halign: fill; child: Gtk.Box { orientation: vertical; halign: fill; $BgeCarousel carousel { vexpand: true; hexpand: true; height-request: bind $get_carousel_height(template.compact) as ; allow-mouse-drag: true; allow-overshoot: true; allow-scroll-wheel: true; allow-raise: bind $invert_boolean(template.compact) as ; create-widget => $on_create_widget(template); remove-widget => $on_remove_widget(template); model: SingleSelection selection { autoselect: true; model: bind template.model; notify::selected => $on_notify_selected(template); notify::model => $on_notify_model(template); }; } }; [overlay] Gtk.Revealer prev_button_revealer { transition-type: crossfade; reveal-child: false; halign: start; valign: center; can-focus: false; Gtk.Button prev_button { icon-name: "go-previous-symbolic"; valign: center; halign: start; clicked => $on_prev_clicked() swapped; styles [ "circular", "osd", ] } } [overlay] Gtk.Revealer next_button_revealer { transition-type: crossfade; reveal-child: false; halign: end; valign: center; can-focus: false; Gtk.Button next_button { icon-name: "go-next-symbolic"; valign: center; clicked => $on_next_clicked() swapped; styles [ "circular", "osd", ] } } [overlay] Gtk.Box no_screenshots_overlay { orientation: vertical; halign: center; valign: center; spacing: 12; visible: bind $is_empty(template.model) as ; Gtk.Image { icon-name: "image-missing-symbolic"; pixel-size: 96; styles [ "dim-label", ] } Gtk.Label { label: _("No Screenshots"); styles [ "dim-label", "title-2", ] } } [overlay] Box { styles [ "osd-box", "pip-button", ] margin-end: 8; margin-bottom: 8; halign: end; valign: end; can-focus: false; visible: bind $not($is_empty(template.model) as ) as ; Gtk.Button { icon-name: "pip-out-symbolic"; tooltip-text: _("Open Screenshot Viewer"); clicked => $on_expand_clicked() swapped; styles [ "flat", ] } } } } bazaar-org-bazaar-b6e9a65/src/bz-screenshots-carousel.c000066400000000000000000000530251522167256300231550ustar00rootroot00000000000000/* bz-screenshots-carousel.c * * Copyright 2025 Alexander Vanhee * * Adapted from gs-screenshot-carousel.c * * Copyright (C) 2013-2016 Richard Hughes * Copyright (C) 2013 Matthias Clasen * Copyright (C) 2015-2019 Kalev Lember * Copyright (C) 2019 Joaquim Rocha * Copyright (C) 2021 Adrien Plazas * * 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 */ #include #include #include #include "bz-decorated-screenshot.h" #include "bz-screenshots-carousel.h" #include "bz-screenshot-page.h" #include "bz-template-callbacks.h" #include "bz-window.h" #define LIGHT_CLASS "screenshot-carousel-light" #define DARK_CLASS "screenshot-carousel-dark" #define LIGHT_MIX_PERCENTAGE 15 #define DARK_MIX_PERCENTAGE 4 struct _BzScreenshotsCarousel { GtkWidget parent_instance; BgeCarousel *carousel; // GtkWidget *carousel_indicator; GtkButton *prev_button; GtkWidget *prev_button_revealer; GtkButton *next_button; GtkWidget *next_button_revealer; GtkSingleSelection *selection; GListModel *model; GListModel *captions; gboolean compact; char *light_accent_color; char *dark_accent_color; char *widget_css_class; GtkCssProvider *css; gulong items_changed_id; }; G_DEFINE_FINAL_TYPE (BzScreenshotsCarousel, bz_screenshots_carousel, GTK_TYPE_WIDGET) enum { PROP_0, PROP_MODEL, PROP_CAPTIONS, PROP_COMPACT, PROP_LIGHT_ACCENT_COLOR, PROP_DARK_ACCENT_COLOR, N_PROPS }; static GParamSpec *properties[N_PROPS]; static void refresh_css (BzScreenshotsCarousel *self); static void clear_css (BzScreenshotsCarousel *self); static void update_button_visibility (BzScreenshotsCarousel *self) { gdouble position; guint n_pages; if (!self->carousel) return; position = gtk_single_selection_get_selected (self->selection); n_pages = g_list_model_get_n_items (G_LIST_MODEL (self->selection)); if (n_pages == 0) { gtk_revealer_set_reveal_child (GTK_REVEALER (self->prev_button_revealer), FALSE); gtk_revealer_set_reveal_child (GTK_REVEALER (self->next_button_revealer), FALSE); return; } gtk_revealer_set_reveal_child (GTK_REVEALER (self->prev_button_revealer), position >= 0.5); gtk_revealer_set_reveal_child (GTK_REVEALER (self->next_button_revealer), position < n_pages - 1.5); } static void carousel_navigate (BzScreenshotsCarousel *self, AdwNavigationDirection direction) { guint n_children = 0; gdouble position = 0.0; n_children = g_list_model_get_n_items (G_LIST_MODEL (self->selection)); position = gtk_single_selection_get_selected (self->selection); position += (direction == ADW_NAVIGATION_DIRECTION_BACK) ? -1 : 1; position = round (position); position = MIN (position, n_children - 1); position = MAX (0, position); gtk_single_selection_set_selected (self->selection, position); } static void on_prev_clicked (BzScreenshotsCarousel *self) { if (!self->carousel) return; carousel_navigate (self, ADW_NAVIGATION_DIRECTION_BACK); } static void on_next_clicked (BzScreenshotsCarousel *self) { if (!self->carousel) return; carousel_navigate (self, ADW_NAVIGATION_DIRECTION_FORWARD); } static void on_notify_selected (BzScreenshotsCarousel *self) { update_button_visibility (self); } static void on_notify_model (BzScreenshotsCarousel *self) { guint n_items = g_list_model_get_n_items (G_LIST_MODEL (self->selection)); if (!self->compact && n_items >= 3) gtk_single_selection_set_selected (self->selection, 1); update_button_visibility (self); } static void open_screenshot_at_index (BzScreenshotsCarousel *self, guint index) { BzScreenshotPage *page = NULL; GtkWidget *picture = NULL; GtkWidget *child = NULL; GtkWidget *root = NULL; guint n_items; if (!self->model) return; n_items = g_list_model_get_n_items (self->model); if (index >= n_items) return; child = bge_carousel_get_nth_page (self->carousel, index); if (child != NULL) picture = gtk_widget_get_first_child (child); root = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))); if (!BZ_IS_WINDOW (root)) return; page = BZ_SCREENSHOT_PAGE (bz_screenshot_page_new (self->model, self->captions, index, picture)); bz_window_open_screenshot_page (BZ_WINDOW (root), page); } static void on_screenshot_clicked (BzDecoratedScreenshot *screenshot, BzScreenshotsCarousel *self) { BzAsyncTexture *async_texture = NULL; guint index = 0; guint n_items = 0; if (!self->model) return; async_texture = bz_decorated_screenshot_get_async_texture (screenshot); if (async_texture == NULL) return; n_items = g_list_model_get_n_items (self->model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzAsyncTexture) item = NULL; item = g_list_model_get_item (self->model, i); if (item == async_texture) { index = i; break; } } open_screenshot_at_index (self, index); } static void on_expand_clicked (BzScreenshotsCarousel *self) { gdouble position; guint index; guint n_pages; if (!self->carousel || !self->model) return; n_pages = g_list_model_get_n_items (G_LIST_MODEL (self->selection)); if (n_pages == 0) return; position = gtk_single_selection_get_selected (self->selection); index = (guint) round (position); index = MIN (index, n_pages - 1); open_screenshot_at_index (self, index); } static int get_carousel_height (BzScreenshotsCarousel *self) { return self->compact ? 250 : 375; } static void on_screenshot_focus_changed (BzDecoratedScreenshot *screenshot, GParamSpec *pspec, BzScreenshotsCarousel *self) { if (!self->carousel) return; if (gtk_widget_has_focus (GTK_WIDGET (screenshot))) { BzAsyncTexture *texture = NULL; guint n_items = 0; texture = bz_decorated_screenshot_get_async_texture (screenshot); n_items = g_list_model_get_n_items (self->model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzAsyncTexture) item = NULL; item = g_list_model_get_item (self->model, i); if (item == texture) { gtk_single_selection_set_selected (self->selection, i); break; } } } } static GtkWidget * on_create_widget (BzScreenshotsCarousel *self, BzAsyncTexture *item, BgeCarousel *carousel) { GtkWidget *screenshot = NULL; g_autofree char *caption = NULL; const char *shot_caption = NULL; guint n_items = 0; guint index = 0; screenshot = g_object_new (BZ_TYPE_DECORATED_SCREENSHOT, "async-texture", item, NULL); n_items = g_list_model_get_n_items (self->model); for (index = 0; index < n_items; index++) { g_autoptr (BzAsyncTexture) it = NULL; it = g_list_model_get_item (self->model, index); if (it == item) break; } if (self->captions != NULL && index < g_list_model_get_n_items (self->captions)) { g_autoptr (GtkStringObject) caption_obj = NULL; caption_obj = g_list_model_get_item (self->captions, index); if (caption_obj != NULL) shot_caption = gtk_string_object_get_string (caption_obj); } if (shot_caption != NULL && *shot_caption != '\0') caption = g_strdup_printf (_ ("Screenshot %u %s"), index + 1, shot_caption); else caption = g_strdup_printf (_ ("Screenshot %u"), index + 1); gtk_accessible_update_property (GTK_ACCESSIBLE (screenshot), GTK_ACCESSIBLE_PROPERTY_LABEL, caption, -1); g_signal_connect (screenshot, "clicked", G_CALLBACK (on_screenshot_clicked), self); g_signal_connect (screenshot, "notify::has-focus", G_CALLBACK (on_screenshot_focus_changed), self); return screenshot; } static void on_remove_widget (BzScreenshotsCarousel *self, BzDecoratedScreenshot *screenshot, BzAsyncTexture *item, BgeCarousel *carousel) { } static void dark_changed (BzScreenshotsCarousel *self, GParamSpec *pspec, AdwStyleManager *mgr) { gboolean is_dark; if (self->css == NULL) return; is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); gtk_widget_remove_css_class (GTK_WIDGET (self), LIGHT_CLASS); gtk_widget_remove_css_class (GTK_WIDGET (self), DARK_CLASS); gtk_widget_add_css_class (GTK_WIDGET (self), is_dark ? DARK_CLASS : LIGHT_CLASS); } static void bz_screenshots_carousel_dispose (GObject *object) { BzScreenshotsCarousel *self = BZ_SCREENSHOTS_CAROUSEL (object); GtkWidget *root_child = gtk_widget_get_first_child (GTK_WIDGET (self)); if (self->model && self->items_changed_id) { g_signal_handler_disconnect (self->model, self->items_changed_id); self->items_changed_id = 0; } g_clear_object (&self->model); g_clear_object (&self->captions); clear_css (self); g_clear_pointer (&self->light_accent_color, g_free); g_clear_pointer (&self->dark_accent_color, g_free); g_clear_pointer (&self->widget_css_class, g_free); if (root_child != NULL) gtk_widget_unparent (root_child); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_SCREENSHOTS_CAROUSEL); G_OBJECT_CLASS (bz_screenshots_carousel_parent_class)->dispose (object); } static void bz_screenshots_carousel_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzScreenshotsCarousel *self = BZ_SCREENSHOTS_CAROUSEL (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, self->model); break; case PROP_CAPTIONS: g_value_set_object (value, self->captions); break; case PROP_COMPACT: g_value_set_boolean (value, self->compact); break; case PROP_LIGHT_ACCENT_COLOR: g_value_set_string (value, self->light_accent_color); break; case PROP_DARK_ACCENT_COLOR: g_value_set_string (value, self->dark_accent_color); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_screenshots_carousel_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzScreenshotsCarousel *self = BZ_SCREENSHOTS_CAROUSEL (object); switch (prop_id) { case PROP_MODEL: bz_screenshots_carousel_set_model (self, g_value_get_object (value)); break; case PROP_CAPTIONS: bz_screenshots_carousel_set_captions (self, g_value_get_object (value)); break; case PROP_COMPACT: bz_screenshots_carousel_set_compact (self, g_value_get_boolean (value)); break; case PROP_LIGHT_ACCENT_COLOR: bz_screenshots_carousel_set_light_accent_color (self, g_value_get_string (value)); break; case PROP_DARK_ACCENT_COLOR: bz_screenshots_carousel_set_dark_accent_color (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_screenshots_carousel_class_init (BzScreenshotsCarouselClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_screenshots_carousel_dispose; object_class->get_property = bz_screenshots_carousel_get_property; object_class->set_property = bz_screenshots_carousel_set_property; properties[PROP_MODEL] = g_param_spec_object ("model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_CAPTIONS] = g_param_spec_object ("captions", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_COMPACT] = g_param_spec_boolean ("compact", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_LIGHT_ACCENT_COLOR] = g_param_spec_string ("light-accent-color", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_DARK_ACCENT_COLOR] = g_param_spec_string ("dark-accent-color", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, properties); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshots-carousel.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, carousel); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, prev_button); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, prev_button_revealer); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, next_button); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, next_button_revealer); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, selection); gtk_widget_class_bind_template_callback (widget_class, on_prev_clicked); gtk_widget_class_bind_template_callback (widget_class, on_next_clicked); gtk_widget_class_bind_template_callback (widget_class, on_notify_selected); gtk_widget_class_bind_template_callback (widget_class, on_notify_model); gtk_widget_class_bind_template_callback (widget_class, on_create_widget); gtk_widget_class_bind_template_callback (widget_class, on_remove_widget); gtk_widget_class_bind_template_callback (widget_class, on_expand_clicked); gtk_widget_class_bind_template_callback (widget_class, get_carousel_height); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "screenshot-carousel"); } static void bz_screenshots_carousel_init (BzScreenshotsCarousel *self) { gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect_object ( adw_style_manager_get_default (), "notify::dark", G_CALLBACK (dark_changed), self, G_CONNECT_SWAPPED); } GtkWidget * bz_screenshots_carousel_new (void) { return g_object_new (BZ_TYPE_SCREENSHOTS_CAROUSEL, NULL); } void bz_screenshots_carousel_set_model (BzScreenshotsCarousel *self, GListModel *model) { g_return_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self)); g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model)); if (self->model == model) return; if (self->model && self->items_changed_id) { g_signal_handler_disconnect (self->model, self->items_changed_id); self->items_changed_id = 0; } g_clear_object (&self->model); if (model) { self->model = g_object_ref (model); gtk_single_selection_set_selected (self->selection, 0); } g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MODEL]); } GListModel * bz_screenshots_carousel_get_model (BzScreenshotsCarousel *self) { g_return_val_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self), NULL); return self->model; } void bz_screenshots_carousel_set_captions (BzScreenshotsCarousel *self, GListModel *captions) { g_clear_object (&self->captions); if (captions) self->captions = g_object_ref (captions); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CAPTIONS]); } void bz_screenshots_carousel_set_compact (BzScreenshotsCarousel *self, gboolean compact) { g_return_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self)); if (self->compact == compact) return; self->compact = compact; g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COMPACT]); } gboolean bz_screenshots_carousel_get_compact (BzScreenshotsCarousel *self) { g_return_val_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self), FALSE); return self->compact; } void bz_screenshots_carousel_set_light_accent_color (BzScreenshotsCarousel *self, const char *color) { g_return_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self)); if (color == self->light_accent_color || (color != NULL && g_strcmp0 (self->light_accent_color, color) == 0)) return; g_clear_pointer (&self->light_accent_color, g_free); if (color != NULL) self->light_accent_color = g_strdup (color); refresh_css (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_LIGHT_ACCENT_COLOR]); } const char * bz_screenshots_carousel_get_light_accent_color (BzScreenshotsCarousel *self) { g_return_val_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self), NULL); return self->light_accent_color; } void bz_screenshots_carousel_set_dark_accent_color (BzScreenshotsCarousel *self, const char *color) { g_return_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self)); if (color == self->dark_accent_color || (color != NULL && g_strcmp0 (self->dark_accent_color, color) == 0)) return; g_clear_pointer (&self->dark_accent_color, g_free); if (color != NULL) self->dark_accent_color = g_strdup (color); refresh_css (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DARK_ACCENT_COLOR]); } const char * bz_screenshots_carousel_get_dark_accent_color (BzScreenshotsCarousel *self) { g_return_val_if_fail (BZ_IS_SCREENSHOTS_CAROUSEL (self), NULL); return self->dark_accent_color; } static void refresh_css (BzScreenshotsCarousel *self) { g_autofree char *css_string = NULL; g_autofree char *light_bg = NULL; g_autofree char *dark_bg = NULL; gboolean is_dark; clear_css (self); if (self->light_accent_color == NULL && self->dark_accent_color == NULL) return; self->widget_css_class = g_strdup_printf ("screenshot-carousel-%p", (void *) self); gtk_widget_add_css_class (GTK_WIDGET (self), self->widget_css_class); if (self->light_accent_color != NULL && self->dark_accent_color != NULL) light_bg = g_strdup_printf ("color-mix(in srgb, %s %d%%, rgb(255,255,255))", self->light_accent_color, LIGHT_MIX_PERCENTAGE); else if (self->light_accent_color != NULL) light_bg = g_strdup (self->light_accent_color); else if (self->dark_accent_color != NULL) light_bg = g_strdup_printf ("color-mix(in srgb, %s %d%%, rgb(255,255,255))", self->dark_accent_color, LIGHT_MIX_PERCENTAGE); if (self->light_accent_color != NULL && self->dark_accent_color != NULL) dark_bg = g_strdup_printf ("color-mix(in srgb, %s %d%%, rgb(29,29,32))", self->dark_accent_color, DARK_MIX_PERCENTAGE); else if (self->dark_accent_color != NULL) dark_bg = g_strdup (self->dark_accent_color); else if (self->light_accent_color != NULL) dark_bg = g_strdup_printf ("color-mix(in srgb, %s %d%%, rgb(29,29,32))", self->light_accent_color, DARK_MIX_PERCENTAGE); css_string = g_strdup_printf ( ".%s.%s{background-color:%s;}\n" ".%s.%s{background-color:%s;}", self->widget_css_class, LIGHT_CLASS, light_bg, self->widget_css_class, DARK_CLASS, dark_bg); self->css = gtk_css_provider_new (); gtk_css_provider_load_from_string (self->css, css_string); gtk_style_context_add_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (self->css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); gtk_widget_add_css_class (GTK_WIDGET (self), is_dark ? DARK_CLASS : LIGHT_CLASS); } static void clear_css (BzScreenshotsCarousel *self) { gtk_widget_remove_css_class (GTK_WIDGET (self), LIGHT_CLASS); gtk_widget_remove_css_class (GTK_WIDGET (self), DARK_CLASS); if (self->widget_css_class != NULL) { gtk_widget_remove_css_class (GTK_WIDGET (self), self->widget_css_class); g_clear_pointer (&self->widget_css_class, g_free); } if (self->css != NULL) gtk_style_context_remove_provider_for_display ( gdk_display_get_default (), GTK_STYLE_PROVIDER (self->css)); g_clear_pointer (&self->css, g_object_unref); } bazaar-org-bazaar-b6e9a65/src/bz-screenshots-carousel.h000066400000000000000000000041431522167256300231570ustar00rootroot00000000000000/* bz-screenshots-carousel.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_SCREENSHOTS_CAROUSEL (bz_screenshots_carousel_get_type ()) G_DECLARE_FINAL_TYPE (BzScreenshotsCarousel, bz_screenshots_carousel, BZ, SCREENSHOTS_CAROUSEL, GtkWidget) GtkWidget * bz_screenshots_carousel_new (void); void bz_screenshots_carousel_set_model (BzScreenshotsCarousel *self, GListModel *model); GListModel * bz_screenshots_carousel_get_model (BzScreenshotsCarousel *self); void bz_screenshots_carousel_set_captions (BzScreenshotsCarousel *self, GListModel *captions); void bz_screenshots_carousel_set_compact (BzScreenshotsCarousel *self, gboolean compact); gboolean bz_screenshots_carousel_get_compact (BzScreenshotsCarousel *self); void bz_screenshots_carousel_set_light_accent_color (BzScreenshotsCarousel *self, const char *color); const char * bz_screenshots_carousel_get_light_accent_color (BzScreenshotsCarousel *self); void bz_screenshots_carousel_set_dark_accent_color (BzScreenshotsCarousel *self, const char *color); const char * bz_screenshots_carousel_get_dark_accent_color (BzScreenshotsCarousel *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-search-bias.txt000066400000000000000000000007221522167256300215540ustar00rootroot00000000000000prefix=bz name=search_bias parent-prefix=g parent-name=object author=AUTOGEN include= include="bz-linear-function.h" include="bz-exponential-function.h" property=regex char G_TYPE_STRING string property=convert_to char G_TYPE_STRING string property=linear_boost BzLinearFunction BZ_TYPE_LINEAR_FUNCTION object property=exponential_boost BzExponentialFunction BZ_TYPE_EXPONENTIAL_FUNCTION object property=boost_appids GListModel G_TYPE_LIST_MODEL object bazaar-org-bazaar-b6e9a65/src/bz-search-engine.c000066400000000000000000000653211522167256300215140ustar00rootroot00000000000000/* bz-search-engine.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::SEARCH-ENGINE" #include "bz-search-engine.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-finished-search-query.h" #include "bz-search-result.h" #include "bz-util.h" struct _BzSearchEngine { GObject parent_instance; GListModel *model; GListModel *biases; GPtrArray *biases_mirror; }; G_DEFINE_FINAL_TYPE (BzSearchEngine, bz_search_engine, G_TYPE_OBJECT); enum { PROP_0, PROP_MODEL, PROP_BIASES, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void biases_changed (BzSearchEngine *self, guint position, guint removed, guint added, GListModel *model); static double test_strings (const char *query, const char *against, gssize accept_min_size); typedef struct { guint idx; double val; } Score; static gint cmp_scores (Score *a, Score *b); enum { LINEAR, EXPONENTIAL, }; BZ_DEFINE_DATA ( bias, Bias, { gboolean invalid; GRegex *regex; char *convert_to; GHashTable *boost; int boost_kind; union { struct { double slope; double y_intercept; } linear_boost; struct { double factor; double y_intercept; } exponential_boost; }; }, BZ_RELEASE_DATA (regex, g_regex_unref); BZ_RELEASE_DATA (convert_to, g_free); BZ_RELEASE_DATA (boost, g_hash_table_unref)); BZ_DEFINE_DATA ( query_task, QueryTask, { char **terms; GPtrArray *snapshot; GPtrArray *biases; }, BZ_RELEASE_DATA (terms, g_strfreev); BZ_RELEASE_DATA (snapshot, g_ptr_array_unref); BZ_RELEASE_DATA (biases, g_ptr_array_unref)) static DexFuture * query_task_fiber (QueryTaskData *data); BZ_DEFINE_DATA ( query_sub_task, QuerySubTask, { char *query_utf8; GPtrArray *shallow_mirror; double threshold; guint work_offset; guint work_length; GPtrArray *active_biases; }, BZ_RELEASE_DATA (query_utf8, g_free); BZ_RELEASE_DATA (shallow_mirror, g_ptr_array_unref); BZ_RELEASE_DATA (active_biases, g_ptr_array_unref)); static DexFuture * query_sub_task_fiber (QuerySubTaskData *data); static inline GUnicodeType utf8_char_class (const char *s, gunichar *ch_out); static inline const char * utf8_skip_to_next_of_class (const char **s, GUnicodeType class, gsize *read_utf8); static void bz_search_engine_dispose (GObject *object) { BzSearchEngine *self = BZ_SEARCH_ENGINE (object); if (self->biases != NULL) g_signal_handlers_disconnect_by_func (self->biases, biases_changed, self); g_clear_object (&self->model); g_clear_object (&self->biases); g_clear_pointer (&self->biases_mirror, g_ptr_array_unref); G_OBJECT_CLASS (bz_search_engine_parent_class)->dispose (object); } static void bz_search_engine_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSearchEngine *self = BZ_SEARCH_ENGINE (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, bz_search_engine_get_model (self)); break; case PROP_BIASES: g_value_set_object (value, bz_search_engine_get_biases (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_search_engine_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzSearchEngine *self = BZ_SEARCH_ENGINE (object); switch (prop_id) { case PROP_MODEL: bz_search_engine_set_model (self, g_value_get_object (value)); break; case PROP_BIASES: bz_search_engine_set_biases (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_search_engine_class_init (BzSearchEngineClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_search_engine_set_property; object_class->get_property = bz_search_engine_get_property; object_class->dispose = bz_search_engine_dispose; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_BIASES] = g_param_spec_object ( "biases", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_search_engine_init (BzSearchEngine *self) { self->biases_mirror = g_ptr_array_new_with_free_func (bias_data_unref); } BzSearchEngine * bz_search_engine_new (void) { return g_object_new (BZ_TYPE_SEARCH_ENGINE, NULL); } GListModel * bz_search_engine_get_biases (BzSearchEngine *self) { g_return_val_if_fail (BZ_IS_SEARCH_ENGINE (self), NULL); return self->biases; } void bz_search_engine_set_biases (BzSearchEngine *self, GListModel *biases) { g_return_if_fail (BZ_IS_SEARCH_ENGINE (self)); g_return_if_fail (biases == NULL || G_IS_LIST_MODEL (biases)); if (self->biases != NULL) g_signal_handlers_disconnect_by_func (self->biases, biases_changed, self); g_clear_object (&self->biases); g_ptr_array_set_size (self->biases_mirror, 0); if (biases != NULL) { guint n_biases = 0; self->biases = g_object_ref (biases); n_biases = g_list_model_get_n_items (biases); biases_changed (self, 0, 0, n_biases, biases); g_signal_connect_swapped ( biases, "items-changed", G_CALLBACK (biases_changed), self); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_BIASES]); } GListModel * bz_search_engine_get_model (BzSearchEngine *self) { g_return_val_if_fail (BZ_IS_SEARCH_ENGINE (self), NULL); return self->model; } void bz_search_engine_set_model (BzSearchEngine *self, GListModel *model) { g_return_if_fail (BZ_IS_SEARCH_ENGINE (self)); g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model)); g_clear_object (&self->model); if (model != NULL) self->model = g_object_ref (model); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); } DexFuture * bz_search_engine_query (BzSearchEngine *self, const char *const *terms) { guint n_groups = 0; dex_return_error_if_fail (BZ_IS_SEARCH_ENGINE (self)); dex_return_error_if_fail (terms != NULL && *terms != NULL); if (self->model != NULL) n_groups = g_list_model_get_n_items (self->model); if (self->model == NULL || n_groups == 0 || **terms == '\0') { g_autoptr (GPtrArray) results = NULL; g_autoptr (BzFinishedSearchQuery) finished = NULL; results = g_ptr_array_new_with_free_func (g_object_unref); g_ptr_array_set_size (results, n_groups); for (guint i = 0; i < results->len; i++) { g_autoptr (BzEntryGroup) group = NULL; g_autoptr (BzSearchResult) result = NULL; group = g_list_model_get_item (self->model, i); result = bz_search_result_new (); bz_search_result_set_group (result, group); bz_search_result_set_original_index (result, i); g_ptr_array_index (results, i) = g_steal_pointer (&result); } finished = bz_finished_search_query_new (); bz_finished_search_query_set_interpreted_query (finished, ""); bz_finished_search_query_set_results (finished, results); bz_finished_search_query_set_n_results (finished, n_groups); bz_finished_search_query_set_elapsed (finished, 0.0); return dex_future_new_for_object (finished); } else { g_autoptr (GPtrArray) snapshot = NULL; g_autoptr (QueryTaskData) data = NULL; snapshot = g_ptr_array_new_with_free_func (g_object_unref); g_ptr_array_set_size (snapshot, n_groups); for (guint i = 0; i < snapshot->len; i++) g_ptr_array_index (snapshot, i) = g_list_model_get_item (self->model, i); data = query_task_data_new (); data->terms = g_strdupv ((gchar **) terms); data->snapshot = g_steal_pointer (&snapshot); data->biases = g_ptr_array_ref (self->biases_mirror); return dex_scheduler_spawn ( dex_thread_pool_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) query_task_fiber, query_task_data_ref (data), query_task_data_unref); } } static void biases_changed (BzSearchEngine *self, guint position, guint removed, guint added, GListModel *model) { g_autoptr (GPtrArray) new_mirror = NULL; /* Since `self->biases_mirror` is used in other threads, it should be immutable after its construction; so we have to make a new mirror upon every change */ new_mirror = g_ptr_array_new_with_free_func (bias_data_unref); g_ptr_array_set_size (new_mirror, self->biases_mirror->len + added - removed); #define COPY_OVER(_old_idx, _new_idx, _len) \ for (guint _i = 0; _i < (_len); _i++) \ { \ BiasData *_data = NULL; \ BiasData **_loc = NULL; \ \ _data = g_ptr_array_index (self->biases_mirror, (_old_idx) + _i); \ _loc = (BiasData **) &g_ptr_array_index (new_mirror, (_new_idx) + _i); \ *_loc = bias_data_ref (_data); \ } COPY_OVER (0, 0, position); COPY_OVER (position + removed, position + added, self->biases_mirror->len - (position + removed)); #undef COPY_OVER for (guint i = 0; i < added; i++) { g_autoptr (GError) local_error = NULL; BiasData **loc = NULL; g_autoptr (BzSearchBias) bias = NULL; const char *regex_string = NULL; const char *convert_to = NULL; GListModel *boost_appids = NULL; BzLinearFunction *linear_function = NULL; BzExponentialFunction *exponential_function = NULL; g_autoptr (GRegex) regex = NULL; g_autoptr (GHashTable) boost = NULL; g_autoptr (BiasData) data = NULL; loc = (BiasData **) &g_ptr_array_index (new_mirror, position + i); bias = g_list_model_get_item (model, position + i); regex_string = bz_search_bias_get_regex (bias); convert_to = bz_search_bias_get_convert_to (bias); boost_appids = bz_search_bias_get_boost_appids (bias); linear_function = bz_search_bias_get_linear_boost (bias); exponential_function = bz_search_bias_get_exponential_boost (bias); #define SKIP() \ G_STMT_START \ { \ g_autoptr (BiasData) _data = NULL; \ \ _data = bias_data_new (); \ _data->invalid = TRUE; \ *loc = bias_data_ref (_data); \ } \ G_STMT_END if (regex_string == NULL || (convert_to == NULL && (boost_appids == NULL || (linear_function == NULL && exponential_function == NULL)))) { g_critical ("Bias is incomplete! Skipping..."); SKIP (); continue; } if (linear_function != NULL && exponential_function != NULL) { g_critical ("Search bias can only have one boost function! Skipping..."); SKIP (); continue; } regex = g_regex_new ( regex_string, G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &local_error); if (regex == NULL) { g_critical ("Bias regex \"%s\" is invalid: %s", regex_string, local_error->message); SKIP (); continue; } #undef SKIP if (boost_appids != NULL) { guint n_appids = 0; n_appids = g_list_model_get_n_items (boost_appids); if (n_appids > 0) { boost = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); for (guint j = 0; j < n_appids; j++) { g_autoptr (GtkStringObject) string = NULL; const char *appid = NULL; string = g_list_model_get_item (boost_appids, j); appid = gtk_string_object_get_string (string); g_hash_table_replace (boost, g_strdup (appid), NULL); } } } data = bias_data_new (); data->regex = g_regex_ref (regex); data->convert_to = bz_maybe_strdup (convert_to); data->boost = bz_maybe_ref (boost, g_hash_table_ref); if (linear_function != NULL) { data->boost_kind = LINEAR; data->linear_boost.slope = bz_linear_function_get_slope (linear_function); data->linear_boost.y_intercept = bz_linear_function_get_y_intercept (linear_function); } if (exponential_function != NULL) { data->boost_kind = EXPONENTIAL; data->exponential_boost.factor = bz_exponential_function_get_factor (exponential_function); data->exponential_boost.y_intercept = bz_exponential_function_get_y_intercept (exponential_function); } *loc = bias_data_ref (data); } g_clear_pointer (&self->biases_mirror, g_ptr_array_unref); self->biases_mirror = g_steal_pointer (&new_mirror); } static DexFuture * query_task_fiber (QueryTaskData *data) { char **terms = data->terms; GPtrArray *shallow_mirror = data->snapshot; GPtrArray *biases = data->biases; g_autoptr (GError) local_error = NULL; gboolean result = FALSE; g_autoptr (GTimer) timer = NULL; g_autofree char *query_utf8 = NULL; guint n_sub_tasks = 0; guint scores_per_task = 0; g_autoptr (GPtrArray) active_biases = NULL; g_autoptr (GPtrArray) sub_futures = NULL; g_autoptr (GArray) scores = NULL; g_autoptr (GPtrArray) results = NULL; g_autoptr (BzFinishedSearchQuery) finished = NULL; timer = g_timer_new (); query_utf8 = g_strjoinv (" ", terms); n_sub_tasks = MAX (1, MIN (shallow_mirror->len / 512, g_get_num_processors ())); scores_per_task = shallow_mirror->len / n_sub_tasks; active_biases = g_ptr_array_new_with_free_func (bias_data_unref); for (guint i = 0; i < biases->len; i++) { BiasData *bias = NULL; bias = g_ptr_array_index (biases, i); if (bias->invalid) continue; if (!g_regex_match (bias->regex, query_utf8, G_REGEX_MATCH_DEFAULT, NULL)) continue; if (bias->convert_to != NULL) { g_autofree char *tmp = NULL; tmp = g_regex_replace ( bias->regex, query_utf8, -1, 0, bias->convert_to, G_REGEX_MATCH_DEFAULT, NULL); if (tmp != NULL) { g_clear_pointer (&query_utf8, g_free); query_utf8 = g_steal_pointer (&tmp); } } g_ptr_array_add (active_biases, bias_data_ref (bias)); } sub_futures = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < n_sub_tasks; i++) { g_autoptr (QuerySubTaskData) sub_data = NULL; g_autoptr (DexFuture) future = NULL; sub_data = query_sub_task_data_new (); sub_data->query_utf8 = g_strdup (query_utf8); sub_data->shallow_mirror = g_ptr_array_ref (shallow_mirror); sub_data->threshold = 1.0; sub_data->work_offset = i * scores_per_task; sub_data->work_length = scores_per_task; sub_data->active_biases = g_ptr_array_ref (active_biases); if (i >= n_sub_tasks - 1) sub_data->work_length += shallow_mirror->len % n_sub_tasks; future = dex_scheduler_spawn ( dex_thread_pool_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) query_sub_task_fiber, query_sub_task_data_ref (sub_data), query_sub_task_data_unref); g_ptr_array_add (sub_futures, g_steal_pointer (&future)); } result = dex_await (dex_future_allv ( (DexFuture *const *) sub_futures->pdata, sub_futures->len), &local_error); if (!result) return dex_future_new_for_error (g_steal_pointer (&local_error)); scores = g_array_new (FALSE, FALSE, sizeof (Score)); for (guint i = 0; i < sub_futures->len; i++) { DexFuture *future = NULL; GArray *scores_out = NULL; future = g_ptr_array_index (sub_futures, i); scores_out = g_value_get_boxed (dex_future_get_value (future, NULL)); if (scores_out->len > 0) g_array_append_vals (scores, scores_out->data, scores_out->len); } if (scores->len > 0) g_array_sort (scores, (GCompareFunc) cmp_scores); results = g_ptr_array_new_with_free_func (g_object_unref); g_ptr_array_set_size (results, scores->len); for (guint i = 0; i < scores->len; i++) { Score *score = NULL; BzEntryGroup *group = NULL; g_autoptr (BzSearchResult) search_result = NULL; score = &g_array_index (scores, Score, i); group = g_ptr_array_index (shallow_mirror, score->idx); search_result = bz_search_result_new (); bz_search_result_set_group (search_result, group); bz_search_result_set_original_index (search_result, score->idx); bz_search_result_set_score (search_result, score->val); g_ptr_array_index (results, i) = g_steal_pointer (&search_result); } finished = bz_finished_search_query_new (); bz_finished_search_query_set_interpreted_query (finished, query_utf8); bz_finished_search_query_set_results (finished, results); bz_finished_search_query_set_n_results (finished, results->len); bz_finished_search_query_set_elapsed (finished, g_timer_elapsed (timer, NULL)); return dex_future_new_for_object (finished); } static DexFuture * query_sub_task_fiber (QuerySubTaskData *data) { GPtrArray *shallow_mirror = data->shallow_mirror; char *query_utf8 = data->query_utf8; double threshold = data->threshold; guint work_offset = data->work_offset; guint work_length = data->work_length; GPtrArray *active_biases = data->active_biases; g_autoptr (GArray) scores_out = NULL; scores_out = g_array_new (FALSE, FALSE, sizeof (Score)); for (guint i = 0; i < work_length; i++) { g_autoptr (GMutexLocker) locker = NULL; BzEntryGroup *group = NULL; const char *id = NULL; const char *title = NULL; double score = 0.0; group = g_ptr_array_index (shallow_mirror, work_offset + i); locker = bz_entry_group_lock (group); if (!bz_entry_group_is_searchable (group)) continue; id = bz_entry_group_get_id (group); title = bz_entry_group_get_title (group); if ((id != NULL && g_strcmp0 (query_utf8, id) == 0) || (title != NULL && strcasecmp (query_utf8, title) == 0)) score = (double) G_MAXINT; else { const char *developer = NULL; const char *description = NULL; const char *search_tokens = NULL; developer = bz_entry_group_get_developer (group); description = bz_entry_group_get_description (group); search_tokens = bz_entry_group_get_search_tokens (group); #define EVALUATE_STRING(_s, _accept_min_size) \ ((_s) != NULL \ ? (test_strings (query_utf8, (_s), (_accept_min_size))) \ : 0.0) score += EVALUATE_STRING (title, 2) * 2.0; score += EVALUATE_STRING (developer, 2) * 1.0; score += EVALUATE_STRING (description, 3) * 1.0; score += EVALUATE_STRING (search_tokens, -1) * 1.5; #undef EVALUATE_STRING } for (guint j = 0; j < active_biases->len; j++) { BiasData *bias = NULL; bias = g_ptr_array_index (active_biases, j); if (bias->boost == NULL) continue; if (!g_hash_table_contains (bias->boost, id)) continue; switch (bias->boost_kind) { case LINEAR: score = bias->linear_boost.slope * score + bias->linear_boost.y_intercept; break; case EXPONENTIAL: score = pow (bias->exponential_boost.factor, score) * bias->exponential_boost.y_intercept; break; default: break; } } if (score > threshold) { Score append = { 0 }; append.idx = work_offset + i; append.val = score; g_array_append_val (scores_out, append); } } return dex_future_new_take_boxed (G_TYPE_ARRAY, g_steal_pointer (&scores_out)); } #define UTF8_FOREACH_FORWARD(_var, _s) \ for (const char *_var = (_s); \ _var != NULL && *_var != '\0'; \ _var = g_utf8_next_char (_var)) #define UTF8_FOREACH_FORWARD_WITH_END(_var, _s, _end) \ for (const char *_var = (_s); \ _var != NULL && *_var != '\0' && _var < (_end); \ _var = g_utf8_next_char (_var)) #define UTF8_FOREACH_BACKWARD(_var, _s, _start) \ for (const char *_var = (_s); \ _var != NULL && _var >= (_start); \ _var = g_utf8_prev_char (_var)) #define UTF8_FOREACH_TOKEN_FORWARDS(_start_var, _end_var, _s, _token_len) \ for (const char *_start_var = (_s), *_end_var = utf8_skip_to_next_of_class (&_start_var, G_UNICODE_SPACE_SEPARATOR, (_token_len)); \ _start_var != NULL && *_start_var != '\0'; \ _start_var = _end_var, _end_var = utf8_skip_to_next_of_class (&_start_var, G_UNICODE_SPACE_SEPARATOR, (_token_len))) static double test_strings (const char *query, const char *against, gssize accept_min_size) { double score = 0.0; gsize query_tok_utf8_len = 0; gsize against_tok_utf8_len = 0; UTF8_FOREACH_TOKEN_FORWARDS (query_tok_start, query_tok_end, query, &query_tok_utf8_len) { gboolean query_token_has_match = FALSE; UTF8_FOREACH_TOKEN_FORWARDS (against_tok_start, against_tok_end, against, &against_tok_utf8_len) { gboolean match = FALSE; gsize consumed = 0; if (accept_min_size > 0 && against_tok_utf8_len < accept_min_size) continue; UTF8_FOREACH_FORWARD_WITH_END (against_ptr, against_tok_start, against_tok_end) { const char *against_check_ptr = NULL; gunichar against_ch = 0; if (query_tok_utf8_len > against_tok_utf8_len - consumed) break; match = TRUE; against_check_ptr = against_ptr; against_ch = g_unichar_tolower (g_utf8_get_char (against_ptr)); UTF8_FOREACH_FORWARD_WITH_END (query_ptr, query_tok_start, query_tok_end) { gunichar query_ch = 0; query_ch = g_unichar_tolower (g_utf8_get_char (query_ptr)); if (against_ch != query_ch) { match = FALSE; break; } against_check_ptr = g_utf8_next_char (against_check_ptr); against_ch = g_unichar_tolower (g_utf8_get_char (against_check_ptr)); } if (match) break; else consumed++; } if (match) { score += (double) (query_tok_utf8_len * query_tok_utf8_len) / (double) against_tok_utf8_len; query_token_has_match = TRUE; } } if (!query_token_has_match) { score = 0.0; break; } } return score; } static inline GUnicodeType utf8_char_class (const char *s, gunichar *ch_out) { gunichar ch = 0; GUnicodeType cl = 0; ch = g_utf8_get_char (s); cl = g_unichar_type (ch); if (ch_out != NULL) *ch_out = ch; return cl; } static inline const char * utf8_skip_to_next_of_class (const char **s, GUnicodeType class, gsize *read_utf8) { gboolean skipped = FALSE; if (read_utf8 != NULL) *read_utf8 = 0; UTF8_FOREACH_FORWARD (p, *s) { if (utf8_char_class (p, NULL) == class) { if (skipped) return p; } else { if (!skipped) { *s = p; skipped = TRUE; } if (read_utf8 != NULL) (*read_utf8)++; } } /* return the end of the string if nothing was found */ return *s + strlen (*s); } static gint cmp_scores (Score *a, Score *b) { return (b->val - a->val < 0.0) ? -1 : 1; } /* End of bz-search-engine.c */ bazaar-org-bazaar-b6e9a65/src/bz-search-engine.h000066400000000000000000000027741522167256300215240ustar00rootroot00000000000000/* bz-search-engine.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include G_BEGIN_DECLS #define BZ_TYPE_SEARCH_ENGINE (bz_search_engine_get_type ()) G_DECLARE_FINAL_TYPE (BzSearchEngine, bz_search_engine, BZ, SEARCH_ENGINE, GObject) BzSearchEngine * bz_search_engine_new (void); GListModel * bz_search_engine_get_model (BzSearchEngine *self); void bz_search_engine_set_model (BzSearchEngine *self, GListModel *model); GListModel * bz_search_engine_get_biases (BzSearchEngine *self); void bz_search_engine_set_biases (BzSearchEngine *self, GListModel *biases); DexFuture * bz_search_engine_query (BzSearchEngine *self, const char *const *terms); G_END_DECLS /* End of bz-search-engine.h */ bazaar-org-bazaar-b6e9a65/src/bz-search-filter-popover.blp000066400000000000000000000032551522167256300235550ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzSearchFilterPopover: Gtk.Popover { child: ScrolledWindow { propagate-natural-height: true; propagate-natural-width: true; child: Box { orientation: vertical; spacing: 12; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; Label { label: _("Filters"); halign: start; styles [ "heading", ] } Adw.WrapBox { justify: fill; child-spacing: 6; line-spacing: 6; natural-line-length: 320; justify-last-line: false; Button verified_button { name: "verified"; label: _("_Verified"); clicked => $on_filter_button_clicked(); use-underline: true; } Button free_button { name: "free"; label: _("_Free/Open"); clicked => $on_filter_button_clicked(); use-underline: true; } Button non_eol_button { name: "non-eol"; label: _("Non-_EOL"); clicked => $on_filter_button_clicked(); use-underline: true; tooltip-text: _("Filter out End-of-Life apps"); } Button mobile_button { name: "mobile"; label: _("_Mobile Friendly"); clicked => $on_filter_button_clicked(); use-underline: true; } } Label { label: _("Categories"); halign: start; styles [ "heading", ] } Adw.WrapBox wrap_box { justify: fill; child-spacing: 6; line-spacing: 6; natural-line-length: 320; } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-search-filter-popover.c000066400000000000000000000405471522167256300232270ustar00rootroot00000000000000/* bz-search-filter-popover.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-application.h" #include "bz-category-flags.h" #include "bz-flathub-category.h" #include "bz-flathub-state.h" #include "bz-search-filter-popover.h" #include "bz-state-info.h" struct _BzSearchFilterPopover { GtkPopover parent_instance; BzCategoryFlags selected_categories; gboolean only_verified; gboolean only_free; gboolean only_non_eol; gboolean only_mobile; gboolean has_active_filters; gboolean state_forced_verified; gboolean state_forced_free; gboolean state_forced_non_eol; AdwWrapBox *wrap_box; GtkWidget *verified_button; GtkWidget *free_button; GtkWidget *non_eol_button; GtkWidget *mobile_button; }; G_DEFINE_FINAL_TYPE (BzSearchFilterPopover, bz_search_filter_popover, GTK_TYPE_POPOVER) enum { PROP_0, PROP_SELECTED_CATEGORIES, PROP_ONLY_VERIFIED, PROP_ONLY_FREE, PROP_ONLY_NON_EOL, PROP_ONLY_MOBILE, PROP_HAS_ACTIVE_FILTERS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void update_has_active_filters (BzSearchFilterPopover *self); static void apply_filter_button (BzSearchFilterPopover *self, guint prop, gboolean value); static void sync_from_state (BzSearchFilterPopover *self); static void on_state_setting_changed (BzSearchFilterPopover *self, GParamSpec *pspec, BzStateInfo *state); static void on_category_button_clicked (GtkButton *button, gpointer user_data); static void rebuild_category_buttons (BzSearchFilterPopover *self); static void on_show (GtkPopover *popover, gpointer user_data); static void on_filter_button_clicked (GtkButton *button, gpointer user_data); static void bz_search_filter_popover_dispose (GObject *object) { BzSearchFilterPopover *self = BZ_SEARCH_FILTER_POPOVER (object); BzStateInfo *state = NULL; state = bz_state_info_get_default (); if (state != NULL) g_signal_handlers_disconnect_by_data (state, self); gtk_widget_dispose_template (GTK_WIDGET (object), BZ_TYPE_SEARCH_FILTER_POPOVER); G_OBJECT_CLASS (bz_search_filter_popover_parent_class)->dispose (object); } static void bz_search_filter_popover_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSearchFilterPopover *self = BZ_SEARCH_FILTER_POPOVER (object); switch (prop_id) { case PROP_SELECTED_CATEGORIES: g_value_set_flags (value, self->selected_categories); break; case PROP_ONLY_VERIFIED: g_value_set_boolean (value, self->only_verified); break; case PROP_ONLY_FREE: g_value_set_boolean (value, self->only_free); break; case PROP_ONLY_NON_EOL: g_value_set_boolean (value, self->only_non_eol); break; case PROP_ONLY_MOBILE: g_value_set_boolean (value, self->only_mobile); break; case PROP_HAS_ACTIVE_FILTERS: g_value_set_boolean (value, self->has_active_filters); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_search_filter_popover_class_init (BzSearchFilterPopoverClass *klass) { GObjectClass *object_class = NULL; GtkWidgetClass *widget_class = NULL; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_search_filter_popover_dispose; object_class->get_property = bz_search_filter_popover_get_property; props[PROP_SELECTED_CATEGORIES] = g_param_spec_flags ( "selected-categories", NULL, NULL, BZ_TYPE_CATEGORY_FLAGS, BZ_CATEGORY_FLAGS_NONE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ONLY_VERIFIED] = g_param_spec_boolean ( "only-verified", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ONLY_FREE] = g_param_spec_boolean ( "only-free", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ONLY_NON_EOL] = g_param_spec_boolean ( "only-non-eol", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_ONLY_MOBILE] = g_param_spec_boolean ( "only-mobile", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_HAS_ACTIVE_FILTERS] = g_param_spec_boolean ( "has-active-filters", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-search-filter-popover.ui"); gtk_widget_class_bind_template_child (widget_class, BzSearchFilterPopover, wrap_box); gtk_widget_class_bind_template_child (widget_class, BzSearchFilterPopover, verified_button); gtk_widget_class_bind_template_child (widget_class, BzSearchFilterPopover, free_button); gtk_widget_class_bind_template_child (widget_class, BzSearchFilterPopover, non_eol_button); gtk_widget_class_bind_template_child (widget_class, BzSearchFilterPopover, mobile_button); gtk_widget_class_bind_template_callback (widget_class, on_filter_button_clicked); } static void bz_search_filter_popover_init (BzSearchFilterPopover *self) { BzStateInfo *state = NULL; gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect (self, "show", G_CALLBACK (on_show), NULL); state = bz_state_info_get_default (); if (state != NULL) { g_signal_connect_swapped (state, "notify::show-only-verified", G_CALLBACK (on_state_setting_changed), self); g_signal_connect_swapped (state, "notify::show-only-foss", G_CALLBACK (on_state_setting_changed), self); g_signal_connect_swapped (state, "notify::hide-eol", G_CALLBACK (on_state_setting_changed), self); } } GtkWidget * bz_search_filter_popover_new (void) { return g_object_new (BZ_TYPE_SEARCH_FILTER_POPOVER, NULL); } BzCategoryFlags bz_search_filter_popover_get_selected_categories (BzSearchFilterPopover *self) { g_return_val_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self), BZ_CATEGORY_FLAGS_NONE); return self->selected_categories; } gboolean bz_search_filter_popover_get_only_verified (BzSearchFilterPopover *self) { g_return_val_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self), FALSE); return self->only_verified; } gboolean bz_search_filter_popover_get_only_free (BzSearchFilterPopover *self) { g_return_val_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self), FALSE); return self->only_free; } gboolean bz_search_filter_popover_get_only_non_eol (BzSearchFilterPopover *self) { g_return_val_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self), FALSE); return self->only_non_eol; } gboolean bz_search_filter_popover_get_only_mobile (BzSearchFilterPopover *self) { g_return_val_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self), FALSE); return self->only_mobile; } void bz_search_filter_popover_clear (BzSearchFilterPopover *self) { GtkWidget *child = NULL; g_return_if_fail (BZ_IS_SEARCH_FILTER_POPOVER (self)); if (!self->state_forced_verified) apply_filter_button (self, PROP_ONLY_VERIFIED, FALSE); if (!self->state_forced_free) apply_filter_button (self, PROP_ONLY_FREE, FALSE); if (!self->state_forced_non_eol) apply_filter_button (self, PROP_ONLY_NON_EOL, FALSE); apply_filter_button (self, PROP_ONLY_MOBILE, FALSE); for (child = gtk_widget_get_first_child (GTK_WIDGET (self->wrap_box)); child != NULL; child = gtk_widget_get_next_sibling (child)) gtk_widget_remove_css_class (child, "accent"); if (self->selected_categories != BZ_CATEGORY_FLAGS_NONE) { self->selected_categories = BZ_CATEGORY_FLAGS_NONE; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SELECTED_CATEGORIES]); update_has_active_filters (self); } } static void update_has_active_filters (BzSearchFilterPopover *self) { gboolean active = FALSE; active = (self->only_verified && !self->state_forced_verified) || (self->only_free && !self->state_forced_free) || (self->only_non_eol && !self->state_forced_non_eol) || self->only_mobile || self->selected_categories != BZ_CATEGORY_FLAGS_NONE; if (self->has_active_filters == active) return; self->has_active_filters = active; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_ACTIVE_FILTERS]); } static void apply_filter_button (BzSearchFilterPopover *self, guint prop, gboolean value) { struct { guint prop; gboolean *field; GtkWidget **button; } map[] = { { PROP_ONLY_VERIFIED, &self->only_verified, &self->verified_button }, { PROP_ONLY_FREE, &self->only_free, &self->free_button }, { PROP_ONLY_NON_EOL, &self->only_non_eol, &self->non_eol_button }, { PROP_ONLY_MOBILE, &self->only_mobile, &self->mobile_button }, }; for (guint i = 0; i < G_N_ELEMENTS (map); i++) { if (map[i].prop != prop) continue; *map[i].field = value; if (value) gtk_widget_add_css_class (*map[i].button, "accent"); else gtk_widget_remove_css_class (*map[i].button, "accent"); g_object_notify_by_pspec (G_OBJECT (self), props[prop]); update_has_active_filters (self); return; } } static void sync_from_state (BzSearchFilterPopover *self) { BzStateInfo *state = NULL; gboolean state_verified = FALSE; gboolean state_free = FALSE; gboolean state_hide_eol = FALSE; state = bz_state_info_get_default (); if (state == NULL) return; g_object_get (state, "show-only-verified", &state_verified, "show-only-foss", &state_free, "hide-eol", &state_hide_eol, NULL); self->state_forced_verified = state_verified; self->state_forced_free = state_free; self->state_forced_non_eol = state_hide_eol; if (state_verified) apply_filter_button (self, PROP_ONLY_VERIFIED, TRUE); if (self->verified_button != NULL) gtk_widget_set_sensitive (self->verified_button, !state_verified); if (state_free) apply_filter_button (self, PROP_ONLY_FREE, TRUE); if (self->free_button != NULL) gtk_widget_set_sensitive (self->free_button, !state_free); if (state_hide_eol) apply_filter_button (self, PROP_ONLY_NON_EOL, TRUE); if (self->non_eol_button != NULL) gtk_widget_set_sensitive (self->non_eol_button, !state_hide_eol); } static void on_state_setting_changed (BzSearchFilterPopover *self, GParamSpec *pspec, BzStateInfo *state) { gboolean state_verified = FALSE; gboolean state_free = FALSE; gboolean state_hide_eol = FALSE; g_object_get (state, "show-only-verified", &state_verified, "show-only-foss", &state_free, "hide-eol", &state_hide_eol, NULL); if (!state_verified) apply_filter_button (self, PROP_ONLY_VERIFIED, FALSE); if (!state_free) apply_filter_button (self, PROP_ONLY_FREE, FALSE); if (!state_hide_eol) apply_filter_button (self, PROP_ONLY_NON_EOL, FALSE); sync_from_state (self); } static void on_filter_button_clicked (GtkButton *button, gpointer user_data) { BzSearchFilterPopover *self = BZ_SEARCH_FILTER_POPOVER (user_data); const char *name = NULL; name = gtk_widget_get_name (GTK_WIDGET (button)); if (g_str_equal (name, "verified")) apply_filter_button (self, PROP_ONLY_VERIFIED, !self->only_verified); else if (g_str_equal (name, "free")) apply_filter_button (self, PROP_ONLY_FREE, !self->only_free); else if (g_str_equal (name, "non-eol")) apply_filter_button (self, PROP_ONLY_NON_EOL, !self->only_non_eol); else if (g_str_equal (name, "mobile")) apply_filter_button (self, PROP_ONLY_MOBILE, !self->only_mobile); } static void on_category_button_clicked (GtkButton *button, gpointer user_data) { BzSearchFilterPopover *self = BZ_SEARCH_FILTER_POPOVER (user_data); BzCategoryFlags flag = BZ_CATEGORY_FLAGS_NONE; flag = (BzCategoryFlags) GPOINTER_TO_SIZE ( g_object_get_data (G_OBJECT (button), "category-flag")); self->selected_categories ^= flag; if (self->selected_categories & flag) gtk_widget_add_css_class (GTK_WIDGET (button), "accent"); else gtk_widget_remove_css_class (GTK_WIDGET (button), "accent"); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SELECTED_CATEGORIES]); update_has_active_filters (self); } static void rebuild_category_buttons (BzSearchFilterPopover *self) { g_autoptr (BzFlathubState) flathub = NULL; g_autoptr (GListModel) categories = NULL; BzStateInfo *state = NULL; GtkWidget *child = NULL; while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->wrap_box))) != NULL) adw_wrap_box_remove (self->wrap_box, child); sync_from_state (self); state = bz_state_info_get_default (); if (state == NULL) return; g_object_get (state, "flathub", &flathub, NULL); if (flathub == NULL) return; g_object_get (flathub, "categories", &categories, NULL); if (categories == NULL) return; for (guint i = 0; i < g_list_model_get_n_items (categories); i++) { g_autoptr (BzFlathubCategory) category = NULL; const char *name = NULL; const char *label = NULL; const char *icon = NULL; GtkWidget *button = NULL; GtkWidget *content = NULL; BzCategoryFlags flag = BZ_CATEGORY_FLAGS_NONE; category = g_list_model_get_item (categories, i); if (!bz_flathub_category_get_is_xdg (category)) continue; name = bz_flathub_category_get_name (category); label = bz_flathub_category_get_short_name (category); icon = bz_flathub_category_get_symbolic_icon_name (category); flag = bz_category_flags_from_name (name); content = g_object_new (ADW_TYPE_BUTTON_CONTENT, "label", label, "icon-name", icon ? icon : "", NULL); button = gtk_button_new (); gtk_button_set_child (GTK_BUTTON (button), content); gtk_accessible_update_property (GTK_ACCESSIBLE (button), GTK_ACCESSIBLE_PROPERTY_LABEL, label, -1); g_object_set_data (G_OBJECT (button), "category-flag", GSIZE_TO_POINTER ((gsize) flag)); if (self->selected_categories & flag) gtk_widget_add_css_class (button, "accent"); g_signal_connect (button, "clicked", G_CALLBACK (on_category_button_clicked), self); adw_wrap_box_append (self->wrap_box, button); } } static void on_show (GtkPopover *popover, gpointer user_data) { rebuild_category_buttons (BZ_SEARCH_FILTER_POPOVER (popover)); } bazaar-org-bazaar-b6e9a65/src/bz-search-filter-popover.h000066400000000000000000000030741522167256300232260ustar00rootroot00000000000000/* bz-search-filter-popover.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-category-flags.h" #include G_BEGIN_DECLS #define BZ_TYPE_SEARCH_FILTER_POPOVER (bz_search_filter_popover_get_type ()) G_DECLARE_FINAL_TYPE (BzSearchFilterPopover, bz_search_filter_popover, BZ, SEARCH_FILTER_POPOVER, GtkPopover) GtkWidget * bz_search_filter_popover_new (void); BzCategoryFlags bz_search_filter_popover_get_selected_categories (BzSearchFilterPopover *self); gboolean bz_search_filter_popover_get_only_verified (BzSearchFilterPopover *self); gboolean bz_search_filter_popover_get_only_free (BzSearchFilterPopover *self); gboolean bz_search_filter_popover_get_only_non_eol (BzSearchFilterPopover *self); gboolean bz_search_filter_popover_get_only_mobile (BzSearchFilterPopover *self); void bz_search_filter_popover_clear (BzSearchFilterPopover *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-search-page.blp000066400000000000000000000251431522167256300215140ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzSearchPage: Adw.Bin { child: Adw.BreakpointBin { width-request: 360; height-request: 100; Adw.Breakpoint { condition ("max-width: 1000sp") setters { grid_view.min-columns: 2; grid_view.max-columns: 2; clamp_scrollable.maximum-size: 700; } } Adw.Breakpoint { condition ("max-width: 700sp") setters { empty_box.margin-start: 10; empty_box.margin-end: 10; empty_box.margin-top: 5; search_box_clamp.margin-start: 12; search_box_clamp.margin-end: 12; grid_view.min-columns: 1; grid_view.max-columns: 1; clamp_scrollable.maximum-size: 400; } } child: Box { orientation: vertical; Adw.Clamp search_box_clamp { margin-start: 12; margin-end: 12; maximum-size: 375; child: Adw.Bin { halign: fill; margin-top: 10; margin-bottom: 10; child: Box { spacing: 8; height-request: 40; Image { icon-name: "system-search-symbolic"; } Text search_bar { hexpand: true; max-length: 50; placeholder-text: _("Search Apps, Games, Software"); } Adw.Spinner search_busy { visible: false; width-request: 16; height-request: 16; } MenuButton filter_button { visible: bind $is_valid_string(search_bar.text) as ; icon-name: "sliders-horizontal-symbolic"; tooltip-text: _("Search Filters"); popover: $BzSearchFilterPopover filter_popover { notify::has-active-filters => $has_active_filters_cb(); }; styles [ "flat", "circular", "searchbar-button", ] accessibility { label: _("Filters"); } } Button clear_button { visible: bind $is_valid_string(search_bar.text) as ; icon-name: "edit-clear-symbolic"; styles [ "flat", "circular", "searchbar-button", ] clicked => $reset_search_cb(template); accessibility { label: _("Clear Search"); } } styles [ "search-box", ] }; }; } Adw.Clamp { margin-start: 12; margin-end: 12; maximum-size: 375; child: Box { margin-start: 12; margin-end: 12; margin-top: 6; margin-bottom: 6; styles [ "bz-debug", ] orientation: vertical; spacing: 5; visible: bind template.state as <$BzStateInfo>.debug_mode; Box { orientation: horizontal; spacing: 10; Label { label: "Interpreted Query:"; } Label { styles [ "caption-heading", ] label: bind template.current-query as <$BzFinishedSearchQuery>.interpreted-query; } } Box { orientation: horizontal; spacing: 10; Label { label: "# of Results:"; } Label { styles [ "caption-heading", ] label: bind $format_uint(template.current-query as <$BzFinishedSearchQuery>.n-results as ) as ; } } Box { orientation: horizontal; spacing: 10; Label { label: "Seconds Elapsed:"; } Label { styles [ "caption-heading", ] label: bind $format_double(template.current-query as <$BzFinishedSearchQuery>.elapsed as ) as ; } } }; } Stack search_stack { transition-type: crossfade; StackPage { name: "empty"; child: Box { orientation: vertical; vexpand: true; ScrolledWindow { hscrollbar-policy: never; vexpand: true; visible: bind $invert_boolean($is_empty(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories) as ) as ; child: Adw.Clamp { maximum-size: 1000; tightening-threshold: 900; child: Box empty_box { margin-start: 30; margin-end: 30; margin-top: 16; margin-bottom: 50; orientation: vertical; $BzSearchPillList { margin-bottom: 25; activated => $pill_list_cb(template); } Label { label: _("Browse Categories"); halign: start; margin-bottom: 12; margin-start: 4; wrap: true; wrap-mode: word_char; styles [ "heading", ] } $BzDynamicListView { styles [ "flathub-page-section", ] hexpand: true; max-children-per-line: 4; scroll: false; noscroll-kind: flow-box; child-type: "BzCategoryTile"; child-prop: "category"; model: FilterListModel visible_categories { filter: CustomFilter categories_filter {}; model: bind template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories; }; bind-widget => $bind_category_tile_cb(template); unbind-widget => $unbind_category_tile_cb(template); } Adw.StatusPage { visible: bind $is_empty(template.state as <$BzStateInfo>.flathub as <$BzFlathubState>.categories) as ; hexpand: true; vexpand: true; icon-name: "system-search-symbolic"; title: _("Categories Unavailable"); description: _("Search for apps using the search bar above."); } }; }; } }; } StackPage { name: "results"; child: Box content_box { orientation: horizontal; visible: bind $invert_boolean($is_null(grid_view.model as .selected-item) as ) as ; ScrolledWindow entry_grid_scroll { hexpand: true; vexpand: true; hscrollbar-policy: never; child: Adw.ClampScrollable clamp_scrollable { maximum-size: 1000; tightening-threshold: 900; child: GridView grid_view { styles [ "search-grid", ] min-columns: 3; max-columns: 3; factory: BuilderListItemFactory { template ListItem { child: Box { orientation: vertical; spacing: 5; $BzRichAppTile { group: bind template.item as <$BzSearchResult>.group as <$BzEntryGroup>; focusable: false; } Box { styles [ "bz-debug", ] visible: bind template.item as <$BzSearchResult>.state as <$BzStateInfo>.debug_mode; orientation: vertical; spacing: 2; Box { orientation: horizontal; spacing: 10; Label { label: "Result Score:"; } Label { styles [ "caption-heading", ] label: bind $format_double(template.item as <$BzSearchResult>.score as ) as ; } } Separator { margin-bottom: 5; } Box { orientation: horizontal; spacing: 10; Label { styles [ "bz-monospace", ] hexpand: true; xalign: 0.0; label: bind template.item as <$BzSearchResult>.group as <$BzEntryGroup>.id; selectable: true; wrap: true; wrap-mode: char; } Button { icon-name: "edit-copy-symbolic"; clicked => $copy_id_cb(template); } } Box { orientation: horizontal; spacing: 10; Button { hexpand: true; halign: end; label: "Inspect UI Entry"; clicked => $debug_id_inspect_cb(template); } } } }; } }; }; }; } }; } StackPage { name: "no-results"; child: Adw.StatusPage { vexpand: true; icon-name: "edit-find-symbolic"; title: _("No Applications Found"); description: bind $no_results_found_subtitle(search_bar.text) as ; }; } } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-search-page.c000066400000000000000000000646431522167256300211710ustar00rootroot00000000000000/* bz-search-page.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-apps-page.h" #include "bz-async-texture.h" #include "bz-category-tile.h" #include "bz-dynamic-list-view.h" #include "bz-entry-inspector.h" #include "bz-finished-search-query.h" #include "bz-group-tile-css-watcher.h" #include "bz-rich-app-tile.h" #include "bz-screenshot.h" #include "bz-search-filter-popover.h" #include "bz-search-page.h" #include "bz-search-pill-list.h" #include "bz-search-result.h" #include "bz-template-callbacks.h" #include "bz-util.h" struct _BzSearchPage { AdwBin parent_instance; BzStateInfo *state; BzEntryGroup *selected; gboolean remove; gboolean search_in_progress; BzFinishedSearchQuery *current_query; BzContentProvider *blocklists_provider; BzContentProvider *txt_blocklists_provider; GListStore *search_model; GtkSelectionModel *selection_model; guint search_update_timeout; DexFuture *search_query; /* Template widgets */ GtkText *search_bar; AdwSpinner *search_busy; GtkBox *content_box; GtkStack *search_stack; GtkGridView *grid_view; GtkWidget *filter_button; BzSearchFilterPopover *filter_popover; GtkCustomFilter *categories_filter; }; G_DEFINE_FINAL_TYPE (BzSearchPage, bz_search_page, ADW_TYPE_BIN) enum { PROP_0, PROP_STATE, PROP_TEXT, PROP_CURRENT_QUERY, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void search_changed (GtkEditable *editable, BzSearchPage *self); static void search_activate (GtkText *text, BzSearchPage *self); static void grid_activate (GtkGridView *grid_view, guint position, BzSearchPage *self); static void invalidating_state_prop_changed (BzSearchPage *self, GParamSpec *pspec, BzStateInfo *info); static void blocklists_items_changed (BzSearchPage *self, guint position, guint removed, guint added, GListModel *model); static DexFuture * search_query_then (DexFuture *future, GWeakRef *wr); static void update_filter (BzSearchPage *self); static void emit_idx (BzSearchPage *self, GListModel *model, guint selected_idx); static void bz_search_page_dispose (GObject *object) { BzSearchPage *self = BZ_SEARCH_PAGE (object); if (self->state != NULL) g_signal_handlers_disconnect_by_func (self->state, invalidating_state_prop_changed, self); if (self->blocklists_provider != NULL) g_signal_handlers_disconnect_by_func (self->blocklists_provider, blocklists_items_changed, self); if (self->txt_blocklists_provider != NULL) g_signal_handlers_disconnect_by_func (self->txt_blocklists_provider, blocklists_items_changed, self); g_clear_handle_id (&self->search_update_timeout, g_source_remove); dex_clear (&self->search_query); g_clear_object (&self->state); g_clear_object (&self->selected); g_clear_object (&self->current_query); g_clear_object (&self->blocklists_provider); g_clear_object (&self->txt_blocklists_provider); g_clear_object (&self->search_model); g_clear_object (&self->selection_model); G_OBJECT_CLASS (bz_search_page_parent_class)->dispose (object); } static void bz_search_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSearchPage *self = BZ_SEARCH_PAGE (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_search_page_get_state (self)); break; case PROP_TEXT: g_value_set_string (value, bz_search_page_get_text (self)); break; case PROP_CURRENT_QUERY: g_value_set_object (value, self->current_query); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_search_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzSearchPage *self = BZ_SEARCH_PAGE (object); switch (prop_id) { case PROP_STATE: bz_search_page_set_state (self, g_value_get_object (value)); break; case PROP_TEXT: bz_search_page_set_text (self, g_value_get_string (value)); break; case PROP_CURRENT_QUERY: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_empty (gpointer object, GListModel *model) { if (model == NULL) return TRUE; return g_list_model_get_n_items (model) == 0; } static gboolean is_valid_string (gpointer object, const char *value) { return value != NULL && *value != '\0'; } static char * idx_to_string (gpointer object, guint value) { return g_strdup_printf ("%d", value + 1); } static char * score_to_string (gpointer object, double value) { return g_strdup_printf ("%0.1f", value); } static char * no_results_found_subtitle (gpointer object, const char *search_text) { if (search_text == NULL || *search_text == '\0') return g_strdup (""); return g_strdup_printf (_ ("No results found for \"%s\" in Flathub"), search_text); } static void has_active_filters_cb (BzSearchFilterPopover *filter_popover, GParamSpec *pspec, BzSearchPage *self) { gboolean active = FALSE; g_object_get (filter_popover, "has-active-filters", &active, NULL); if (active) gtk_widget_add_css_class (self->filter_button, "accent"); else gtk_widget_remove_css_class (self->filter_button, "accent"); } static void pill_list_cb (BzSearchPage *self, const char *label, GtkWidget *pill_list) { bz_search_page_set_text (self, label); update_filter (self); } static void category_clicked (BzFlathubCategory *category, GtkButton *button) { GtkWidget *self = NULL; GtkWidget *nav_view = NULL; AdwNavigationPage *apps_page = NULL; self = gtk_widget_get_ancestor (GTK_WIDGET (button), BZ_TYPE_SEARCH_PAGE); g_assert (self != NULL); nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); g_assert (nav_view != NULL); apps_page = bz_apps_page_new_from_category (category); adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } static void bind_category_tile_cb (BzSearchPage *self, BzCategoryTile *tile, BzFlathubCategory *category, BzDynamicListView *view) { g_signal_connect_swapped (tile, "clicked", G_CALLBACK (category_clicked), category); } static void unbind_category_tile_cb (BzSearchPage *self, BzCategoryTile *tile, BzFlathubCategory *category, BzDynamicListView *view) { g_signal_handlers_disconnect_by_func (tile, category_clicked, category); } static void reset_search_cb (BzSearchPage *self, GtkButton *button) { bz_search_page_set_text (self, ""); bz_search_filter_popover_clear (self->filter_popover); bz_search_page_refresh (self); } static void copy_id_cb (GtkListItem *list_item, GtkButton *button) { BzSearchResult *result = NULL; BzEntryGroup *group = NULL; const char *id = NULL; GdkClipboard *clipboard = NULL; result = gtk_list_item_get_item (list_item); group = bz_search_result_get_group (result); id = bz_entry_group_get_id (group); clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_text (clipboard, id); } static void debug_id_inspect_cb (GtkListItem *list_item, GtkButton *button) { BzSearchResult *search_result = NULL; BzStateInfo *state = NULL; BzEntryGroup *group = NULL; g_autofree char *unique_id = NULL; g_autoptr (BzResult) result = NULL; search_result = gtk_list_item_get_item (list_item); state = bz_search_result_get_state (search_result); if (state == NULL) return; group = bz_search_result_get_group (search_result); unique_id = bz_entry_group_dup_ui_entry_id (group); result = bz_application_map_factory_convert_one ( bz_state_info_get_entry_factory (state), gtk_string_object_new (unique_id)); if (result != NULL) { BzEntryInspector *inspector = NULL; inspector = bz_entry_inspector_new (); bz_entry_inspector_set_result (inspector, result); gtk_window_present (GTK_WINDOW (inspector)); } } static void bz_search_page_class_init (BzSearchPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_search_page_dispose; object_class->get_property = bz_search_page_get_property; object_class->set_property = bz_search_page_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TEXT] = g_param_spec_string ( "text", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_CURRENT_QUERY] = g_param_spec_object ( "current-query", NULL, NULL, BZ_TYPE_FINISHED_SEARCH_QUERY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_ASYNC_TEXTURE); g_type_ensure (BZ_TYPE_CATEGORY_TILE); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); g_type_ensure (BZ_TYPE_GROUP_TILE_CSS_WATCHER); g_type_ensure (BZ_TYPE_RICH_APP_TILE); g_type_ensure (BZ_TYPE_SCREENSHOT); g_type_ensure (BZ_TYPE_SEARCH_RESULT); g_type_ensure (BZ_TYPE_SEARCH_PILL_LIST); g_type_ensure (BZ_TYPE_SEARCH_FILTER_POPOVER); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-search-page.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, search_bar); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, search_busy); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, content_box); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, search_stack); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, grid_view); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, filter_button); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, filter_popover); gtk_widget_class_bind_template_child (widget_class, BzSearchPage, categories_filter); gtk_widget_class_bind_template_callback (widget_class, bind_category_tile_cb); gtk_widget_class_bind_template_callback (widget_class, unbind_category_tile_cb); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_empty); gtk_widget_class_bind_template_callback (widget_class, has_active_filters_cb); gtk_widget_class_bind_template_callback (widget_class, is_valid_string); gtk_widget_class_bind_template_callback (widget_class, idx_to_string); gtk_widget_class_bind_template_callback (widget_class, score_to_string); gtk_widget_class_bind_template_callback (widget_class, reset_search_cb); gtk_widget_class_bind_template_callback (widget_class, pill_list_cb); gtk_widget_class_bind_template_callback (widget_class, no_results_found_subtitle); gtk_widget_class_bind_template_callback (widget_class, copy_id_cb); gtk_widget_class_bind_template_callback (widget_class, debug_id_inspect_cb); } static void bz_search_page_init (BzSearchPage *self) { self->search_model = g_list_store_new (BZ_TYPE_SEARCH_RESULT); gtk_widget_init_template (GTK_WIDGET (self)); /* TODO: move all this to blueprint */ self->selection_model = GTK_SELECTION_MODEL (gtk_no_selection_new (NULL)); gtk_no_selection_set_model (GTK_NO_SELECTION (self->selection_model), G_LIST_MODEL (self->search_model)); gtk_grid_view_set_model (self->grid_view, self->selection_model); g_signal_connect (self->search_bar, "changed", G_CALLBACK (search_changed), self); g_signal_connect (self->search_bar, "activate", G_CALLBACK (search_activate), self); g_signal_connect (self->grid_view, "activate", G_CALLBACK (grid_activate), self); g_signal_connect_swapped (self->filter_popover, "notify::selected-categories", G_CALLBACK (update_filter), self); g_signal_connect_swapped (self->filter_popover, "notify::only-verified", G_CALLBACK (update_filter), self); g_signal_connect_swapped (self->filter_popover, "notify::only-free", G_CALLBACK (update_filter), self); g_signal_connect_swapped (self->filter_popover, "notify::only-non-eol", G_CALLBACK (update_filter), self); g_signal_connect_swapped (self->filter_popover, "notify::only-mobile", G_CALLBACK (update_filter), self); gtk_custom_filter_set_filter_func ( self->categories_filter, (GtkCustomFilterFunc) bz_flathub_category_get_show_in_list, NULL, NULL); } GtkWidget * bz_search_page_new (GListModel *model, const char *initial) { BzSearchPage *self = NULL; self = g_object_new ( BZ_TYPE_SEARCH_PAGE, "model", model, NULL); if (initial != NULL) gtk_editable_set_text (GTK_EDITABLE (self->search_bar), initial); return GTK_WIDGET (self); } BzEntryGroup * bz_search_page_get_selected (BzSearchPage *self, gboolean *remove) { g_return_val_if_fail (BZ_IS_SEARCH_PAGE (self), NULL); if (remove != NULL) *remove = self->remove; return self->selected; } void bz_search_page_set_state (BzSearchPage *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_SEARCH_PAGE (self)); if (self->state != NULL) g_signal_handlers_disconnect_by_func (self->state, invalidating_state_prop_changed, self); g_clear_object (&self->state); if (self->blocklists_provider != NULL) g_signal_handlers_disconnect_by_func (self->blocklists_provider, blocklists_items_changed, self); g_clear_object (&self->blocklists_provider); if (self->txt_blocklists_provider != NULL) g_signal_handlers_disconnect_by_func (self->txt_blocklists_provider, blocklists_items_changed, self); g_clear_object (&self->txt_blocklists_provider); if (state != NULL) { self->state = g_object_ref (state); g_signal_connect_swapped ( state, "notify::disable-blocklists", G_CALLBACK (invalidating_state_prop_changed), self); g_signal_connect_swapped ( state, "notify::hide-eol", G_CALLBACK (invalidating_state_prop_changed), self); g_signal_connect_swapped ( state, "notify::show-only-foss", G_CALLBACK (invalidating_state_prop_changed), self); g_signal_connect_swapped ( state, "notify::show-only-flathub", G_CALLBACK (invalidating_state_prop_changed), self); g_signal_connect_swapped ( state, "notify::show-only-verified", G_CALLBACK (invalidating_state_prop_changed), self); g_signal_connect_swapped ( state, "notify::parental-age-rating", G_CALLBACK (invalidating_state_prop_changed), self); g_object_get ( state, "blocklists-provider", &self->blocklists_provider, "txt-blocklists-provider", &self->txt_blocklists_provider, NULL); if (self->blocklists_provider != NULL) g_signal_connect_data ( self->blocklists_provider, "items-changed", G_CALLBACK (blocklists_items_changed), self, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); if (self->txt_blocklists_provider != NULL) g_signal_connect_data ( self->txt_blocklists_provider, "items-changed", G_CALLBACK (blocklists_items_changed), self, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); } g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } BzStateInfo * bz_search_page_get_state (BzSearchPage *self) { g_return_val_if_fail (BZ_IS_SEARCH_PAGE (self), NULL); return self->state; } void bz_search_page_set_text (BzSearchPage *self, const char *text) { g_return_if_fail (BZ_IS_SEARCH_PAGE (self)); gtk_editable_set_text (GTK_EDITABLE (self->search_bar), text); if (text != NULL) gtk_editable_set_position (GTK_EDITABLE (self->search_bar), g_utf8_strlen (text, -1)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TEXT]); } const char * bz_search_page_get_text (BzSearchPage *self) { g_return_val_if_fail (BZ_IS_SEARCH_PAGE (self), NULL); return gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); } void bz_search_page_refresh (BzSearchPage *self) { g_return_if_fail (BZ_IS_SEARCH_PAGE (self)); update_filter (self); } gboolean bz_search_page_ensure_active (BzSearchPage *self, const char *initial) { const char *text = NULL; g_return_val_if_fail (BZ_IS_SEARCH_PAGE (self), FALSE); text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (text != NULL && *text != '\0' && gtk_widget_has_focus (GTK_WIDGET (self->search_bar))) return FALSE; gtk_widget_grab_focus (GTK_WIDGET (self->search_bar)); bz_search_page_set_text (self, initial); return TRUE; } static void search_changed (GtkEditable *editable, BzSearchPage *self) { g_clear_handle_id (&self->search_update_timeout, g_source_remove); self->search_update_timeout = g_timeout_add_once ( 300, (GSourceOnceFunc) update_filter, self); gtk_widget_set_visible (GTK_WIDGET (self->search_busy), TRUE); } static void search_activate (GtkText *text, BzSearchPage *self) { GtkSelectionModel *model = NULL; guint n_items = 0; model = gtk_grid_view_get_model (self->grid_view); n_items = g_list_model_get_n_items (G_LIST_MODEL (model)); if (gtk_widget_get_visible (GTK_WIDGET (self->search_busy))) return; if (n_items > 0) { GtkWidget *cell = NULL; GtkWidget *box = NULL; GtkWidget *tile = NULL; gtk_widget_activate_action (GTK_WIDGET (self->grid_view), "list.scroll-to-item", "u", 0); cell = gtk_widget_get_first_child (GTK_WIDGET (self->grid_view)); if (cell != NULL) box = gtk_widget_get_first_child (cell); if (box != NULL) tile = gtk_widget_get_first_child (box); if (BZ_IS_RICH_APP_TILE (tile)) bz_rich_app_tile_focus_action_button (BZ_RICH_APP_TILE (tile)); } } static void grid_activate (GtkGridView *grid_view, guint position, BzSearchPage *self) { GtkSelectionModel *model = NULL; model = gtk_grid_view_get_model (self->grid_view); emit_idx (self, G_LIST_MODEL (model), position); } static void invalidating_state_prop_changed (BzSearchPage *self, GParamSpec *pspec, BzStateInfo *info) { update_filter (self); } static void blocklists_items_changed (BzSearchPage *self, guint position, guint removed, guint added, GListModel *model) { update_filter (self); } static DexFuture * search_query_then (DexFuture *future, GWeakRef *wr) { g_autoptr (BzSearchPage) self = NULL; g_autoptr (GPtrArray) filtered = NULL; BzFinishedSearchQuery *finished = NULL; GPtrArray *results = NULL; guint old_length = 0; const char *page_name = NULL; BzCategoryFlags categories = BZ_CATEGORY_FLAGS_NONE; gboolean only_verified = FALSE; gboolean only_free = FALSE; gboolean only_non_eol = FALSE; gboolean only_mobile = FALSE; bz_weak_get_or_return_reject (self, wr); finished = g_value_get_object (dex_future_get_value (future, NULL)); results = bz_finished_search_query_get_results (finished); categories = bz_search_filter_popover_get_selected_categories (self->filter_popover); only_verified = bz_search_filter_popover_get_only_verified (self->filter_popover); only_free = bz_search_filter_popover_get_only_free (self->filter_popover); only_non_eol = bz_search_filter_popover_get_only_non_eol (self->filter_popover); only_mobile = bz_search_filter_popover_get_only_mobile (self->filter_popover); filtered = g_ptr_array_new_with_free_func (g_object_unref); for (guint i = 0; i < results->len; i++) { BzSearchResult *result = g_ptr_array_index (results, i); BzEntryGroup *group = bz_search_result_get_group (result); if (self->state != NULL) /* This is for debug mode */ bz_search_result_set_state (result, self->state); if (categories != BZ_CATEGORY_FLAGS_NONE && !(bz_entry_group_get_categories (group) & categories)) continue; if (only_verified && !bz_entry_group_get_is_verified (group)) continue; if (only_free && !bz_entry_group_get_is_floss (group)) continue; if (only_non_eol && bz_entry_group_get_eol (group)) continue; if (only_mobile && !bz_entry_group_get_is_mobile_friendly (group)) continue; g_ptr_array_add (filtered, g_object_ref (result)); } old_length = g_list_model_get_n_items (G_LIST_MODEL (self->search_model)); g_list_store_splice ( self->search_model, 0, old_length, (gpointer *) filtered->pdata, filtered->len); gtk_widget_set_visible (GTK_WIDGET (self->search_busy), FALSE); if (filtered->len > 0) { page_name = "results"; gtk_widget_activate_action (GTK_WIDGET (self->grid_view), "list.scroll-to-item", "u", 0); } else { const char *search_text = NULL; search_text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); page_name = (search_text && *search_text) ? "no-results" : "empty"; } self->current_query = g_object_ref (finished); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_QUERY]); gtk_stack_set_visible_child_name (self->search_stack, page_name); dex_clear (&self->search_query); return NULL; } static void update_filter (BzSearchPage *self) { BzSearchEngine *engine = NULL; const char *search_text = NULL; g_autoptr (GStrvBuilder) builder = NULL; guint n_terms = 0; g_auto (GStrv) terms = NULL; g_autoptr (DexFuture) future = NULL; g_autofree gchar **tokens = NULL; g_clear_handle_id (&self->search_update_timeout, g_source_remove); dex_clear (&self->search_query); g_clear_object (&self->current_query); self->current_query = bz_finished_search_query_new (); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_QUERY]); gtk_widget_set_visible (GTK_WIDGET (self->search_busy), FALSE); if (self->state == NULL) return; engine = bz_state_info_get_search_engine (self->state); if (engine == NULL) return; search_text = gtk_editable_get_text (GTK_EDITABLE (self->search_bar)); if (search_text == NULL || *search_text == '\0') { g_list_store_remove_all (self->search_model); gtk_stack_set_visible_child_name (self->search_stack, "empty"); return; } builder = g_strv_builder_new (); tokens = g_strsplit_set (search_text, " \t\n", -1); for (gchar **token = tokens; *token != NULL; token++) { if (**token != '\0') { g_strv_builder_take (builder, *token); n_terms++; } else g_free (*token); } if (n_terms == 0) { g_list_store_remove_all (self->search_model); gtk_stack_set_visible_child_name (self->search_stack, "empty"); return; } terms = g_strv_builder_end (builder); self->search_in_progress = TRUE; future = bz_search_engine_query ( engine, (const char *const *) terms); gtk_widget_set_visible ( GTK_WIDGET (self->search_busy), dex_future_is_pending (future)); future = dex_future_then ( future, (DexFutureCallback) search_query_then, bz_track_weak (self), bz_weak_release); self->search_query = g_steal_pointer (&future); } static void emit_idx (BzSearchPage *self, GListModel *model, guint selected_idx) { g_autoptr (BzSearchResult) result = NULL; BzEntryGroup *group = NULL; result = g_list_model_get_item (G_LIST_MODEL (model), selected_idx); group = bz_search_result_get_group (result); gtk_widget_activate_action (GTK_WIDGET (self), "window.show-group", "s", bz_entry_group_get_id (group)); } bazaar-org-bazaar-b6e9a65/src/bz-search-page.h000066400000000000000000000033231522167256300211620ustar00rootroot00000000000000/* bz-search-page.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" G_BEGIN_DECLS #define BZ_TYPE_SEARCH_PAGE (bz_search_page_get_type ()) G_DECLARE_FINAL_TYPE (BzSearchPage, bz_search_page, BZ, SEARCH_PAGE, AdwBin) GtkWidget * bz_search_page_new (GListModel *model, const char *initial); void bz_search_page_set_state (BzSearchPage *self, BzStateInfo *state); BzStateInfo * bz_search_page_get_state (BzSearchPage *self); void bz_search_page_set_text (BzSearchPage *self, const char *text); const char * bz_search_page_get_text (BzSearchPage *self); BzEntryGroup * bz_search_page_get_selected (BzSearchPage *self, gboolean *remove); BzEntryGroup * bz_search_page_get_previewing (BzSearchPage *self); void bz_search_page_refresh (BzSearchPage *self); gboolean bz_search_page_ensure_active (BzSearchPage *self, const char *initial); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-search-pill-list.c000066400000000000000000000136011522167256300221520ustar00rootroot00000000000000/* bz-search-pill-list.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-search-pill-list.h" struct _BzSearchPillList { GtkBox parent_instance; }; G_DEFINE_FINAL_TYPE (BzSearchPillList, bz_search_pill_list, GTK_TYPE_BOX) enum { SIGNAL_ACTIVATED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL]; static void pill_button_clicked_cb (BzSearchPillList *self, GtkButton *button); static void bz_search_pill_list_class_init (BzSearchPillListClass *klass) { signals[SIGNAL_ACTIVATED] = g_signal_new ("activated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); } static void bz_search_pill_list_init (BzSearchPillList *self) { GtkLayoutManager *layout = NULL; static const char *pills[] = { /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Browser"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Video"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Music"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Office"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("PDF"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Calendar"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Messaging"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Paint"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("VPN"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Torrent"), /* Translators: Search suggestion: the english text will be used for the search regardless of what you put here, so don't worry about the string yielding poor search results. Focus on correctness and friendliness, etc */ N_ ("Emulator"), /* This array MUST be NULL terminated */ NULL }; gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_HORIZONTAL); layout = GTK_LAYOUT_MANAGER (adw_wrap_layout_new ()); adw_wrap_layout_set_child_spacing (ADW_WRAP_LAYOUT (layout), 10); adw_wrap_layout_set_line_spacing (ADW_WRAP_LAYOUT (layout), 8); adw_wrap_layout_set_justify (ADW_WRAP_LAYOUT (layout), ADW_JUSTIFY_FILL); gtk_widget_set_layout_manager (GTK_WIDGET (self), layout); for (guint i = 0; pills[i] != NULL; i++) { GtkWidget *button = NULL; button = gtk_button_new_with_label (Q_ (pills[i])); gtk_widget_add_css_class (button, "small-pill"); gtk_widget_add_css_class (button, "search-pill"); g_signal_connect_swapped (button, "clicked", G_CALLBACK (pill_button_clicked_cb), self); g_object_set_data_full (G_OBJECT (button), "search-token", g_strdup (pills[i]), g_free); gtk_box_append (GTK_BOX (self), button); } } GtkWidget * bz_search_pill_list_new (void) { return g_object_new (BZ_TYPE_SEARCH_PILL_LIST, NULL); } static void pill_button_clicked_cb (BzSearchPillList *self, GtkButton *button) { const char *search_token = NULL; search_token = g_object_get_data (G_OBJECT (button), "search-token"); g_signal_emit (self, signals[SIGNAL_ACTIVATED], 0, search_token); } bazaar-org-bazaar-b6e9a65/src/bz-search-pill-list.h000066400000000000000000000020111522167256300221500ustar00rootroot00000000000000/* bz-search-pill-list.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_SEARCH_PILL_LIST (bz_search_pill_list_get_type ()) G_DECLARE_FINAL_TYPE (BzSearchPillList, bz_search_pill_list, BZ, SEARCH_PILL_LIST, GtkBox) GtkWidget *bz_search_pill_list_new (void); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-search-result.txt000066400000000000000000000005411522167256300221530ustar00rootroot00000000000000prefix=bz name=search_result parent-prefix=g parent-name=object author=AUTOGEN include="bz-state-info.h" property=group BzEntryGroup BZ_TYPE_ENTRY_GROUP object property=original_index guint G_TYPE_UINT uint property=score double G_TYPE_DOUBLE double property=title_markup char G_TYPE_STRING string property=state BzStateInfo BZ_TYPE_STATE_INFO object bazaar-org-bazaar-b6e9a65/src/bz-section-view.blp000066400000000000000000000053141522167256300217470ustar00rootroot00000000000000using Gtk 4.0; using Gio 2.0; using Adw 1; template $BzSectionView: Adw.Bin { margin-top: 16; child: Box { hexpand: true; vexpand: true; halign: fill; valign: fill; orientation: vertical; spacing: 4; Label { visible: bind $invert_boolean($is_null_string(template.section as <$BzCuratedSection>.title as ) as ) as ; label: bind template.section as <$BzCuratedSection>.title as ; halign: start; xalign: 0; styles [ "title-1", ] } Box { hexpand: true; vexpand: true; visible: bind $invert_boolean($is_null(template.section as <$BzCuratedSection>.subtitle) as ) as ; margin-bottom: 2; $BgeMarkdownRender subtitle { hexpand: true; vexpand: true; wrap-tables: false; markdown: bind template.section as <$BzCuratedSection>.subtitle as <$BzCuratedMarkdownInfo>.string as ; } } Box { hexpand: true; vexpand: true; visible: bind $invert_boolean($is_null(template.section as <$BzCuratedSection>.appids) as ) as ; orientation: vertical; spacing: 10; margin-top: 10; margin-bottom: 16; $BzDynamicListView list { hexpand: true; scroll: false; column-spacing: 10; noscroll-kind: flow-box; child-type: bind try{$get_child_type(template.section as <$BzCuratedSection>.list-type) as ,"BzAppTile"}; child-prop: "group"; model: SliceListModel slice { model: bind $convert_to_groups( template.section as <$BzCuratedSection>.appids as <$BzCuratedAppidsInfo>.list ) as ; offset: 0; size: bind $get_slice_length(template.section as <$BzCuratedSection>.overflow-count, template.section as <$BzCuratedSection>.enable-bulk-install); }; } Button { styles [ "pill", ] margin-start: 25; margin-end: 25; margin-top: 12; halign: center; visible: bind $show_more_visible(template.section as <$BzCuratedSection>.enable-bulk-install as , template.section as <$BzCuratedSection>.appids as <$BzCuratedAppidsInfo>.list, template.section as <$BzCuratedSection>.overflow-count); label: _("Show More"); clicked => $show_more_clicked(template); } Button { styles [ "pill", ] margin-start: 25; margin-end: 25; margin-top: 12; halign: center; visible: bind template.section as <$BzCuratedSection>.enable-bulk-install as ; label: _("Install All"); clicked => $install_all_clicked(template); } } }; } bazaar-org-bazaar-b6e9a65/src/bz-section-view.c000066400000000000000000000207751522167256300214240ustar00rootroot00000000000000/* bz-section-view.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-application.h" #include "bz-apps-page.h" #include "bz-curated-section.h" #include "bz-dynamic-list-view.h" #include "bz-entry-group.h" #include "bz-rich-app-tile.h" #include "bz-section-view.h" #include "bz-window.h" struct _BzSectionView { AdwBin parent_instance; BzCuratedSection *section; /* Template widgets */ BgeMarkdownRender *subtitle; }; G_DEFINE_FINAL_TYPE (BzSectionView, bz_section_view, ADW_TYPE_BIN) enum { PROP_0, PROP_SECTION, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_section_view_dispose (GObject *object) { BzSectionView *self = BZ_SECTION_VIEW (object); g_clear_object (&self->section); G_OBJECT_CLASS (bz_section_view_parent_class)->dispose (object); } static void bz_section_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSectionView *self = BZ_SECTION_VIEW (object); switch (prop_id) { case PROP_SECTION: g_value_set_object (value, bz_section_view_get_section (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_section_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzSectionView *self = BZ_SECTION_VIEW (object); switch (prop_id) { case PROP_SECTION: bz_section_view_set_section (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_null_string (gpointer object, const char *value) { return value == NULL; } static char * get_child_type (gpointer object, const char *list_type) { if (list_type != NULL && g_strcmp0 (list_type, "rich") == 0) return g_strdup ("BzRichAppTile"); return g_strdup ("BzAppTile"); } static guint get_slice_length (gpointer object, guint overflow_count, gboolean install_all_visible) { if (overflow_count == 0 || install_all_visible) return 20; return MIN (overflow_count, 20); } static gboolean show_more_visible (gpointer object, gboolean enable_bulk_install, GListModel *full_model, guint overflow_count) { if (enable_bulk_install || full_model == NULL) return FALSE; return g_list_model_get_n_items (full_model) > (overflow_count == 0 ? 20 : MIN (overflow_count, 20)); } static GListModel * convert_to_groups (gpointer object, GListModel *value) { BzStateInfo *info = NULL; BzApplicationMapFactory *factory = NULL; info = bz_state_info_get_default (); factory = bz_state_info_get_application_factory (info); return bz_application_map_factory_generate (factory, value); } static void install_all_clicked (BzSectionView *self, GtkButton *button) { GtkWidget *window = NULL; BzCuratedAppidsInfo *appids = NULL; GListModel *list = NULL; guint n_appids = 0; BzStateInfo *info = NULL; BzApplicationMapFactory *factory = NULL; g_autoptr (GListModel) groups = NULL; window = gtk_widget_get_ancestor (GTK_WIDGET (self), BZ_TYPE_WINDOW); if (window == NULL) return; /* If the button is visible and the user clicked it, this must be non-null */ appids = bz_curated_section_get_appids (self->section); list = bz_curated_appids_info_get_list (appids); if (list == NULL) return; n_appids = g_list_model_get_n_items (list); if (n_appids == 0) return; /* TODO: bind state via object properties */ info = bz_state_info_get_default (); factory = bz_state_info_get_application_factory (info); groups = bz_application_map_factory_generate (factory, list); /* TODO: use signals to chain up the blueprints; it is cleaner, but more work... :( */ bz_window_bulk_install (BZ_WINDOW (window), groups); } static void show_more_clicked (BzSectionView *self, GtkButton *button) { BzCuratedAppidsInfo *appids = NULL; GListModel *list = NULL; g_autoptr (GListModel) groups = NULL; BzStateInfo *info = NULL; BzApplicationMapFactory *factory = NULL; AdwNavigationPage *apps_page = NULL; GtkWidget *nav_view = NULL; const char *title = NULL; if (self->section == NULL) return; appids = bz_curated_section_get_appids (self->section); list = bz_curated_appids_info_get_list (appids); if (list == NULL) return; info = bz_state_info_get_default (); factory = bz_state_info_get_application_factory (info); groups = bz_application_map_factory_generate (factory, list); title = bz_curated_section_get_title (self->section); apps_page = bz_apps_page_new (title, groups); nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); if (nav_view != NULL) adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } static void bz_section_view_class_init (BzSectionViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_section_view_dispose; object_class->get_property = bz_section_view_get_property; object_class->set_property = bz_section_view_set_property; props[PROP_SECTION] = g_param_spec_object ( "section", NULL, NULL, BZ_TYPE_CURATED_SECTION, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_DYNAMIC_LIST_VIEW); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-section-view.ui"); gtk_widget_class_bind_template_child (widget_class, BzSectionView, subtitle); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_null_string); gtk_widget_class_bind_template_callback (widget_class, get_child_type); gtk_widget_class_bind_template_callback (widget_class, convert_to_groups); gtk_widget_class_bind_template_callback (widget_class, install_all_clicked); gtk_widget_class_bind_template_callback (widget_class, show_more_clicked); gtk_widget_class_bind_template_callback (widget_class, get_slice_length); gtk_widget_class_bind_template_callback (widget_class, show_more_visible); } static void bz_section_view_init (BzSectionView *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_section_view_new (BzCuratedSection *section) { return g_object_new ( BZ_TYPE_SECTION_VIEW, "section", section, NULL); } void bz_section_view_set_section (BzSectionView *self, BzCuratedSection *section) { g_return_if_fail (BZ_IS_SECTION_VIEW (self)); g_return_if_fail (section == NULL || BZ_IS_CURATED_SECTION (section)); g_clear_object (&self->section); if (section != NULL) self->section = g_object_ref (section); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SECTION]); } BzCuratedSection * bz_section_view_get_section (BzSectionView *self) { g_return_val_if_fail (BZ_IS_SECTION_VIEW (self), NULL); return self->section; } bazaar-org-bazaar-b6e9a65/src/bz-section-view.h000066400000000000000000000023341522167256300214200ustar00rootroot00000000000000/* bz-section-view.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-curated-section.h" G_BEGIN_DECLS #define BZ_TYPE_SECTION_VIEW (bz_section_view_get_type ()) G_DECLARE_FINAL_TYPE (BzSectionView, bz_section_view, BZ, SECTION_VIEW, AdwBin) GtkWidget * bz_section_view_new (BzCuratedSection *section); void bz_section_view_set_section (BzSectionView *self, BzCuratedSection *section); BzCuratedSection * bz_section_view_get_section (BzSectionView *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-serializable.c000066400000000000000000000037761522167256300214600ustar00rootroot00000000000000/* bz-serializable.c * * Copyright 2025 Adam Masciola * * 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 */ #include "bz-serializable.h" G_DEFINE_INTERFACE (BzSerializable, bz_serializable, G_TYPE_OBJECT) static void bz_serializable_real_serialize (BzSerializable *self, GVariantBuilder *builder) { return; } static gboolean bz_serializable_real_deserialize (BzSerializable *self, GVariant *import, GError **error) { return TRUE; } static void bz_serializable_default_init (BzSerializableInterface *iface) { iface->serialize = bz_serializable_real_serialize; iface->deserialize = bz_serializable_real_deserialize; } void bz_serializable_serialize (BzSerializable *self, GVariantBuilder *builder) { g_return_if_fail (BZ_IS_SERIALIZABLE (self)); g_return_if_fail (builder != NULL); BZ_SERIALIZABLE_GET_IFACE (self)->serialize ( self, builder); } gboolean bz_serializable_deserialize (BzSerializable *self, GVariant *import, GError **error) { g_return_val_if_fail (BZ_IS_SERIALIZABLE (self), FALSE); g_return_val_if_fail (import != NULL, FALSE); return BZ_SERIALIZABLE_GET_IFACE (self)->deserialize ( self, import, error); } bazaar-org-bazaar-b6e9a65/src/bz-serializable.h000066400000000000000000000030261522167256300214510ustar00rootroot00000000000000/* bz-serializable.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_SERIALIZABLE (bz_serializable_get_type ()) G_DECLARE_INTERFACE (BzSerializable, bz_serializable, BZ, SERIALIZABLE, GObject) struct _BzSerializableInterface { GTypeInterface parent_iface; void (*serialize) (BzSerializable *self, GVariantBuilder *builder); gboolean (*deserialize) (BzSerializable *self, GVariant *import, GError **error); }; void bz_serializable_serialize (BzSerializable *self, GVariantBuilder *builder); gboolean bz_serializable_deserialize (BzSerializable *self, GVariant *import, GError **error); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-share-list.c000066400000000000000000000276041522167256300210610ustar00rootroot00000000000000/* bz-share-list.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include #include "bz-share-list.h" #include "bz-url.h" #include "bz-window.h" struct _BzShareList { GtkBox parent_instance; GListModel *urls; gboolean dual_column; }; G_DEFINE_FINAL_TYPE (BzShareList, bz_share_list, GTK_TYPE_BOX) enum { PROP_0, PROP_URLS, PROP_DUAL_COLUMN, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; typedef struct { const char *id; const char *display_name; const char *icon_name; } UrlInfo; static const UrlInfo url_info[] = { { "flathub", NC_ ("Project URL Type", "Flathub Page"), "flathub-symbolic" }, { "homepage", NC_ ("Project URL Type", "Project Website"), "globe-symbolic" }, { "bugtracker", NC_ ("Project URL Type", "Issue Tracker"), "computer-fail-symbolic" }, { "faq", NC_ ("Project URL Type", "FAQ"), "help-faq-symbolic" }, { "help", NC_ ("Project URL Type", "Help"), "help-browser-symbolic" }, { "donation", NC_ ("Project URL Type", "Donate"), "heart-filled-symbolic" }, { "translate", NC_ ("Project URL Type", "Translate"), "translations-symbolic" }, { "contact", NC_ ("Project URL Type", "Contact"), "mail-send-symbolic" }, { "vcs-browser", NC_ ("Project URL Type", "Source Code"), "code-symbolic" }, { "contribute", NC_ ("Project URL Type", "Contribute"), "system-users-symbolic" }, { "manifest", NC_ ("Project URL Type", "Manifest"), "shoe-box-symbolic" }, { NULL, NULL, NULL } }; static void populate_urls (BzShareList *self); static GtkListBox *create_list_box (void); static AdwActionRow *create_url_action_row (BzShareList *self, BzUrl *url_item); static void copy_cb (BzShareList *self, GtkButton *button); static void follow_link_cb (BzShareList *self, GtkWidget *widget); static void bz_share_list_dispose (GObject *object) { BzShareList *self = BZ_SHARE_LIST (object); g_clear_object (&self->urls); G_OBJECT_CLASS (bz_share_list_parent_class)->dispose (object); } static void bz_share_list_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzShareList *self = BZ_SHARE_LIST (object); switch (prop_id) { case PROP_URLS: g_value_set_object (value, self->urls); break; case PROP_DUAL_COLUMN: g_value_set_boolean (value, self->dual_column); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_share_list_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzShareList *self = BZ_SHARE_LIST (object); switch (prop_id) { case PROP_URLS: g_clear_object (&self->urls); self->urls = g_value_dup_object (value); populate_urls (self); break; case PROP_DUAL_COLUMN: self->dual_column = g_value_get_boolean (value); populate_urls (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_share_list_class_init (BzShareListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_share_list_dispose; object_class->get_property = bz_share_list_get_property; object_class->set_property = bz_share_list_set_property; props[PROP_URLS] = g_param_spec_object ( "urls", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_DUAL_COLUMN] = g_param_spec_boolean ( "dual-column", NULL, NULL, FALSE, G_PARAM_READWRITE); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_URL); } static void bz_share_list_init (BzShareList *self) { gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_VERTICAL); } GtkWidget * bz_share_list_new (void) { return g_object_new (BZ_TYPE_SHARE_LIST, NULL); } static void populate_urls (BzShareList *self) { GtkWidget *child = NULL; guint n_items = 0; guint left_count = 0; guint right_count = 0; while ((child = gtk_widget_get_first_child (GTK_WIDGET (self))) != NULL) gtk_box_remove (GTK_BOX (self), child); if (!self->urls) return; n_items = g_list_model_get_n_items (self->urls); if (!self->dual_column || n_items <= 1) { GtkListBox *list_box = NULL; list_box = create_list_box (); gtk_widget_set_hexpand (GTK_WIDGET (list_box), TRUE); for (guint i = 0; i < n_items; i++) { g_autoptr (BzUrl) url_item = NULL; AdwActionRow *action_row = NULL; url_item = g_list_model_get_item (self->urls, i); action_row = create_url_action_row (self, url_item); gtk_list_box_append (list_box, GTK_WIDGET (action_row)); } gtk_box_append (GTK_BOX (self), GTK_WIDGET (list_box)); } else { GtkBox *columns_box = NULL; GtkListBox *left_box = NULL; GtkListBox *right_box = NULL; left_count = (n_items + 1) / 2; right_count = n_items / 2; columns_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12)); gtk_widget_set_hexpand (GTK_WIDGET (columns_box), TRUE); gtk_box_set_homogeneous (columns_box, TRUE); left_box = create_list_box (); gtk_widget_set_hexpand (GTK_WIDGET (left_box), TRUE); for (guint i = 0; i < left_count; i++) { g_autoptr (BzUrl) url_item = NULL; AdwActionRow *action_row = NULL; url_item = g_list_model_get_item (self->urls, i); action_row = create_url_action_row (self, url_item); gtk_list_box_append (left_box, GTK_WIDGET (action_row)); } right_box = create_list_box (); gtk_widget_set_hexpand (GTK_WIDGET (right_box), TRUE); for (guint i = 0; i < right_count; i++) { g_autoptr (BzUrl) url_item = NULL; AdwActionRow *action_row = NULL; url_item = g_list_model_get_item (self->urls, left_count + i); action_row = create_url_action_row (self, url_item); gtk_list_box_append (right_box, GTK_WIDGET (action_row)); } gtk_box_append (columns_box, GTK_WIDGET (left_box)); gtk_box_append (columns_box, GTK_WIDGET (right_box)); gtk_box_append (GTK_BOX (self), GTK_WIDGET (columns_box)); } } static GtkListBox * create_list_box (void) { GtkListBox *list_box = NULL; list_box = GTK_LIST_BOX (gtk_list_box_new ()); gtk_list_box_set_selection_mode (list_box, GTK_SELECTION_NONE); gtk_widget_add_css_class (GTK_WIDGET (list_box), "boxed-list"); gtk_widget_set_valign (GTK_WIDGET (list_box), GTK_ALIGN_START); return list_box; } static AdwActionRow * create_url_action_row (BzShareList *self, BzUrl *url_item) { const char *url_string = NULL; const char *id = NULL; const char *display = NULL; AdwActionRow *action_row = NULL; GtkImage *suffix_icon = NULL; GtkBox *suffix_box = NULL; GtkButton *copy_button = NULL; GtkSeparator *separator = NULL; const UrlInfo *info = NULL; url_string = bz_url_get_url (url_item); id = bz_url_get_id (url_item); display = (g_str_has_prefix (url_string, "http://") || g_str_has_prefix (url_string, "https://")) ? strstr (url_string, "://") + 3 : url_string; for (int i = 0; url_info[i].id != NULL; i++) { if (g_strcmp0 (url_info[i].id, id) == 0) { info = &url_info[i]; break; } } action_row = ADW_ACTION_ROW (adw_action_row_new ()); adw_preferences_row_set_use_markup (ADW_PREFERENCES_ROW (action_row), FALSE); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (action_row), info ? g_dpgettext2 (NULL, "Project URL Type", info->display_name) : url_string); adw_action_row_set_subtitle (action_row, display); adw_action_row_set_subtitle_lines (action_row, 1); gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (action_row), TRUE); g_object_set_data_full (G_OBJECT (action_row), "url", g_strdup (url_string), g_free); g_signal_connect_swapped (action_row, "activated", G_CALLBACK (follow_link_cb), self); if (info != NULL && info->icon_name != NULL && info->icon_name[0] != '\0') { GtkImage *prefix_icon = NULL; prefix_icon = GTK_IMAGE (gtk_image_new_from_icon_name (info->icon_name)); gtk_image_set_icon_size (prefix_icon, GTK_ICON_SIZE_NORMAL); adw_action_row_add_prefix (action_row, GTK_WIDGET (prefix_icon)); } suffix_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4)); gtk_widget_set_valign (GTK_WIDGET (suffix_box), GTK_ALIGN_CENTER); copy_button = GTK_BUTTON (gtk_button_new_from_icon_name ("edit-copy-symbolic")); gtk_widget_set_tooltip_text (GTK_WIDGET (copy_button), _ ("Copy Link")); gtk_button_set_has_frame (copy_button, FALSE); g_object_set_data_full (G_OBJECT (copy_button), "url", g_strdup (url_string), g_free); g_signal_connect_swapped (copy_button, "clicked", G_CALLBACK (copy_cb), self); separator = GTK_SEPARATOR (gtk_separator_new (GTK_ORIENTATION_VERTICAL)); gtk_widget_set_margin_top (GTK_WIDGET (separator), 6); gtk_widget_set_margin_bottom (GTK_WIDGET (separator), 6); suffix_icon = GTK_IMAGE (gtk_image_new_from_icon_name ("external-link-symbolic")); gtk_image_set_icon_size (suffix_icon, GTK_ICON_SIZE_NORMAL); gtk_widget_set_margin_start (GTK_WIDGET (suffix_icon), 8); gtk_widget_set_margin_end (GTK_WIDGET (suffix_icon), 4); gtk_box_append (suffix_box, GTK_WIDGET (copy_button)); gtk_box_append (suffix_box, GTK_WIDGET (separator)); gtk_box_append (suffix_box, GTK_WIDGET (suffix_icon)); adw_action_row_add_suffix (action_row, GTK_WIDGET (suffix_box)); return action_row; } static void copy_cb (BzShareList *self, GtkButton *button) { const char *link = NULL; GdkClipboard *clipboard = NULL; AdwToast *toast = NULL; GtkWidget *ancestor = NULL; link = g_object_get_data (G_OBJECT (button), "url"); clipboard = gdk_display_get_clipboard (gdk_display_get_default ()); gdk_clipboard_set_text (clipboard, link); toast = adw_toast_new (_ ("Copied!")); adw_toast_set_timeout (toast, 1); ancestor = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_TOAST_OVERLAY); if (ancestor != NULL) { adw_toast_overlay_add_toast (ADW_TOAST_OVERLAY (ancestor), toast); return; } } static void follow_link_cb (BzShareList *self, GtkWidget *widget) { const char *link = NULL; link = g_object_get_data (G_OBJECT (widget), "url"); g_app_info_launch_default_for_uri (link, NULL, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-share-list.h000066400000000000000000000017361522167256300210640ustar00rootroot00000000000000/* bz-share-list.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_SHARE_LIST (bz_share_list_get_type ()) G_DECLARE_FINAL_TYPE (BzShareList, bz_share_list, BZ, SHARE_LIST, GtkBox) GtkWidget * bz_share_list_new (void); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-size-result.txt000066400000000000000000000002641522167256300216620ustar00rootroot00000000000000prefix=bz name=size_result parent-prefix=g parent-name=object author=AUTOGEN property=user_data_size guint64 G_TYPE_UINT64 uint64 property=cache_size guint64 G_TYPE_UINT64 uint64 bazaar-org-bazaar-b6e9a65/src/bz-spdx.c000066400000000000000000000031761522167256300177620ustar00rootroot00000000000000/* bz-spdx.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-spdx.h" gboolean bz_spdx_is_valid (const char *license_id) { g_autofree char *url = NULL; g_return_val_if_fail (license_id != NULL, FALSE); url = as_get_license_url (license_id); return url != NULL; } char * bz_spdx_get_url (const char *license_id) { g_return_val_if_fail (license_id != NULL, NULL); return as_get_license_url (license_id); } char * bz_spdx_get_name (const char *license_id) { char *result = NULL; g_return_val_if_fail (license_id != NULL, NULL); if (bz_spdx_is_proprietary (license_id)) return g_strdup ("Proprietary"); result = as_license_to_spdx_id (license_id); if (result == NULL) return g_strdup (license_id); return result; } gboolean bz_spdx_is_proprietary (const char *license_id) { g_return_val_if_fail (license_id != NULL, FALSE); return g_str_has_prefix (license_id, "LicenseRef-proprietary"); } bazaar-org-bazaar-b6e9a65/src/bz-spdx.h000066400000000000000000000020031522167256300177530ustar00rootroot00000000000000/* bz-spdx.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS gboolean bz_spdx_is_valid (const char *license_id); char * bz_spdx_get_url (const char *license_id); char * bz_spdx_get_name (const char *license_id); gboolean bz_spdx_is_proprietary (const char *license_id); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-state-info.txt000066400000000000000000000064471522167256300214560ustar00rootroot00000000000000prefix=bz name=state_info parent-prefix=g parent-name=object author=AUTOGEN include="bz-application-map-factory.h" include="bz-auth-state.h" include="bz-backend.h" include="bz-content-provider.h" include="bz-entry-cache-manager.h" include="bz-flathub-state.h" include="bz-internal-config.h" include="bz-main-config.h" include="bz-search-engine.h" include="bz-transaction-manager.h" property=all_entries GListModel G_TYPE_LIST_MODEL object property=all_entry_groups GListModel G_TYPE_LIST_MODEL object property=filtered_entry_groups GListModel G_TYPE_LIST_MODEL object property=all_installed_entry_groups GListModel G_TYPE_LIST_MODEL object property=all_user_data_entry_groups GListModel G_TYPE_LIST_MODEL object property=allow_manual_sync gboolean G_TYPE_BOOLEAN boolean property=application_factory BzApplicationMapFactory BZ_TYPE_APPLICATION_MAP_FACTORY object property=auth_state BzAuthState BZ_TYPE_AUTH_STATE object property=available_updates GListModel G_TYPE_LIST_MODEL object property=backend BzBackend BZ_TYPE_BACKEND object property=background_task_label char G_TYPE_STRING string property=blocklists GListModel G_TYPE_LIST_MODEL object property=blocklists_provider BzContentProvider BZ_TYPE_CONTENT_PROVIDER object property=busy gboolean G_TYPE_BOOLEAN boolean property=busy_progress double G_TYPE_DOUBLE double property=busy_progress_label char G_TYPE_STRING string property=busy_step_label char G_TYPE_STRING string property=cache_manager BzEntryCacheManager BZ_TYPE_ENTRY_CACHE_MANAGER object property=checking_for_updates gboolean G_TYPE_BOOLEAN boolean property=curated_configs GListModel G_TYPE_LIST_MODEL object property=curated_provider BzContentProvider BZ_TYPE_CONTENT_PROVIDER object property=debug_mode gboolean G_TYPE_BOOLEAN boolean property=disable_blocklists gboolean G_TYPE_BOOLEAN boolean property=donation_prompt_dismissed gboolean G_TYPE_BOOLEAN boolean property=entry_factory BzApplicationMapFactory BZ_TYPE_APPLICATION_MAP_FACTORY object property=flathub BzFlathubState BZ_TYPE_FLATHUB_STATE object property=has_flathub gboolean G_TYPE_BOOLEAN boolean property=have_connection gboolean G_TYPE_BOOLEAN boolean property=hide_eol gboolean G_TYPE_BOOLEAN boolean property=internal_config BzInternalConfig BZ_TYPE_INTERNAL_CONFIG object property=main_config BzMainConfig BZ_TYPE_MAIN_CONFIG object property=metered_connection gboolean G_TYPE_BOOLEAN boolean property=recently_synced gboolean G_TYPE_BOOLEAN boolean property=online gboolean G_TYPE_BOOLEAN boolean property=repositories GListModel G_TYPE_LIST_MODEL object property=search_engine BzSearchEngine BZ_TYPE_SEARCH_ENGINE object property=settings GSettings G_TYPE_SETTINGS object property=show_only_flathub gboolean G_TYPE_BOOLEAN boolean property=show_only_foss gboolean G_TYPE_BOOLEAN boolean property=show_only_verified gboolean G_TYPE_BOOLEAN boolean property=syncing gboolean G_TYPE_BOOLEAN boolean property=system_icon_theme GtkIconTheme GTK_TYPE_ICON_THEME object property=transaction_manager BzTransactionManager BZ_TYPE_TRANSACTION_MANAGER object property=txt_blocklists GListModel G_TYPE_LIST_MODEL object property=txt_blocklists_provider BzContentProvider BZ_TYPE_CONTENT_PROVIDER object property=user_icon_theme GtkIconTheme GTK_TYPE_ICON_THEME object property=parental_blocked_ids GListModel G_TYPE_LIST_MODEL object property=parental_age_rating int G_TYPE_INT int bazaar-org-bazaar-b6e9a65/src/bz-stats-dialog.blp000066400000000000000000000043611522167256300217270ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzStatsDialog: Adw.BreakpointBin { width-request: 360; height-request: 450; child: Adw.ToolbarView { bottom-bar-style: raised_border; [top] Adw.HeaderBar { title-widget: Adw.ViewSwitcher switcher_title { visible: bind $logical_and($model_has_enough_points(template.model) as , $invert_boolean($is_null(template.country-model) as ) as ) as ; stack: stack; policy: wide; }; } content: Box { orientation: vertical; Adw.ViewStack stack { vexpand: true; Adw.ViewStackPage { name: "graph"; title: _("Timeline"); icon-name: "graph2-symbolic"; visible: bind $model_has_enough_points(template.model) as ; child: Box { orientation: vertical; Label { label: bind $format_total_downloads(template.total-downloads) as ; halign: end; hexpand: true; margin-end: 34; margin-bottom: 2; styles ["dimmed"] } $BzDataGraph graph { model: bind template.model; tooltip-prefix: _("Installs:"); vexpand: true; hexpand: true; } }; } Adw.ViewStackPage { name: "map"; title: _("World"); icon-name: "globe-symbolic"; child: Box { orientation: vertical; margin-top:10; margin-bottom: 10; $BzWorldMap world_map { model: bind template.country-model; vexpand: true; } Label { label: _("Since 4/15/2024"); halign: center; styles [ "dimmed", "caption" ] } }; } } Adw.ViewSwitcherBar switcher_bar { visible: bind $invert_boolean($is_null(template.country-model) as ) as ; stack: stack; } }; }; Adw.Breakpoint { condition ("max-width: 450sp") setters { switcher_title.stack: null; switcher_bar.reveal: true; } } }bazaar-org-bazaar-b6e9a65/src/bz-stats-dialog.c000066400000000000000000000135631522167256300214000ustar00rootroot00000000000000/* bz-stats-dialog.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include #include "bz-data-graph.h" #include "bz-stats-dialog.h" #include "bz-template-callbacks.h" #include "bz-world-map.h" struct _BzStatsDialog { AdwBreakpointBin parent_instance; GListModel *model; GListModel *country_model; int total_downloads; /* Template widgets */ AdwViewStack *stack; BzDataGraph *graph; BzWorldMap *world_map; }; G_DEFINE_FINAL_TYPE (BzStatsDialog, bz_stats_dialog, ADW_TYPE_BREAKPOINT_BIN) enum { PROP_0, PROP_MODEL, PROP_COUNTRY_MODEL, PROP_TOTAL_DOWNLOADS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_stats_dialog_dispose (GObject *object) { BzStatsDialog *self = BZ_STATS_DIALOG (object); g_clear_object (&self->model); g_clear_object (&self->country_model); G_OBJECT_CLASS (bz_stats_dialog_parent_class)->dispose (object); } static void bz_stats_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzStatsDialog *self = BZ_STATS_DIALOG (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, self->model); break; case PROP_COUNTRY_MODEL: g_value_set_object (value, self->country_model); break; case PROP_TOTAL_DOWNLOADS: g_value_set_int (value, self->total_downloads); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_stats_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzStatsDialog *self = BZ_STATS_DIALOG (object); switch (prop_id) { case PROP_MODEL: g_clear_object (&self->model); self->model = g_value_dup_object (value); break; case PROP_COUNTRY_MODEL: g_clear_object (&self->country_model); self->country_model = g_value_dup_object (value); break; case PROP_TOTAL_DOWNLOADS: self->total_downloads = g_value_get_int (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * format_total_downloads (gpointer object, int value) { if (value <= 0) return g_strdup ("---"); if (value >= 1000000) /* Translators: M is the suffix for millions */ return g_strdup_printf (_ ("%.2fM Total Installs"), value / 1000000.0); else if (value >= 1000) /* Translators: K is the suffix for thousands*/ return g_strdup_printf (_ ("%.2fK Total Installs"), value / 1000.0); else return g_strdup_printf (_ ("%'d Total Installs"), value); } static gboolean model_has_enough_points (gpointer object, GListModel *model) { if (model == NULL) return FALSE; return g_list_model_get_n_items (model) >= 10; } static void bz_stats_dialog_class_init (BzStatsDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_stats_dialog_dispose; object_class->get_property = bz_stats_dialog_get_property; object_class->set_property = bz_stats_dialog_set_property; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_COUNTRY_MODEL] = g_param_spec_object ( "country-model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE); props[PROP_TOTAL_DOWNLOADS] = g_param_spec_int ( "total-downloads", NULL, NULL, 0, G_MAXINT, 0, G_PARAM_READWRITE); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_DATA_GRAPH); g_type_ensure (BZ_TYPE_WORLD_MAP); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-stats-dialog.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_callback (widget_class, format_total_downloads); gtk_widget_class_bind_template_callback (widget_class, model_has_enough_points); gtk_widget_class_bind_template_child (widget_class, BzStatsDialog, stack); gtk_widget_class_bind_template_child (widget_class, BzStatsDialog, graph); gtk_widget_class_bind_template_child (widget_class, BzStatsDialog, world_map); } static void bz_stats_dialog_init (BzStatsDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); } AdwBreakpointBin * bz_stats_dialog_new (GListModel *model, GListModel *country_model, int total_downloads) { BzStatsDialog *stats_dialog = NULL; stats_dialog = g_object_new ( BZ_TYPE_STATS_DIALOG, "model", model, "country-model", country_model, "total-downloads", total_downloads, NULL); return ADW_BREAKPOINT_BIN (stats_dialog); } void bz_stats_dialog_animate_open (BzStatsDialog *self) { g_return_if_fail (BZ_IS_STATS_DIALOG (self)); bz_data_graph_animate_open (self->graph); } bazaar-org-bazaar-b6e9a65/src/bz-stats-dialog.h000066400000000000000000000022451522167256300214000ustar00rootroot00000000000000/* bz-stats-dialog.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_STATS_DIALOG (bz_stats_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzStatsDialog, bz_stats_dialog, BZ, STATS_DIALOG, AdwBreakpointBin) AdwBreakpointBin * bz_stats_dialog_new (GListModel *model, GListModel *country_model, int total_downloads); void bz_stats_dialog_animate_open (BzStatsDialog *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-subcategory-list.c000066400000000000000000000245731522167256300223100ustar00rootroot00000000000000/* bz-subcategory-list.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include #include "bz-apps-page.h" #include "bz-flathub-state.h" #include "bz-flathub-sub-category.h" #include "bz-subcategory-list.h" #include "bz-util.h" #include "bz-window.h" struct _BzSubcategoryList { GtkBox parent_instance; BzFlathubCategory *category; BzFlathubState *flathub_state; DexFuture *task; }; G_DEFINE_FINAL_TYPE (BzSubcategoryList, bz_subcategory_list, GTK_TYPE_BOX); enum { PROP_0, PROP_CATEGORY, PROP_FLATHUB_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * search_finally (DexFuture *future, GWeakRef *wr) { g_autoptr (BzSubcategoryList) self = NULL; g_autoptr (GError) local_error = NULL; GtkRoot *root = NULL; const GValue *value = NULL; bz_weak_get_or_return_reject (self, wr); root = gtk_widget_get_root (GTK_WIDGET (self)); value = dex_future_get_value (future, &local_error); if (value != NULL) { GListModel *model = NULL; guint n_items = 0; model = g_value_get_object (value); n_items = g_list_model_get_n_items (model); if (n_items <= 1) { AdwToast *toast = adw_toast_new (_ ("No Results Found")); bz_window_add_toast (BZ_WINDOW (root), toast); } else { const char *subcategory_name = NULL; g_autofree char *subtitle = NULL; AdwNavigationPage *apps_page = NULL; GtkWidget *nav_view = NULL; subcategory_name = g_object_get_data (G_OBJECT (self), "current-subcategory"); subtitle = g_strdup_printf (_ ("%d Applications"), n_items); apps_page = bz_apps_page_new (subcategory_name, model); bz_apps_page_set_subtitle (BZ_APPS_PAGE (apps_page), subtitle); nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), apps_page); } } else { AdwToast *toast = adw_toast_new (_ ("Search failed")); bz_window_add_toast (BZ_WINDOW (root), toast); g_warning ("Search failed: %s", local_error->message); } dex_clear (&self->task); return dex_future_new_true (); } static void subcategory_button_clicked_cb (BzSubcategoryList *self, GtkButton *button) { g_autoptr (DexFuture) future = NULL; const char *category = NULL; const char *label = NULL; g_autofree char *route = NULL; g_return_if_fail (BZ_IS_SUBCATEGORY_LIST (self)); g_return_if_fail (GTK_IS_BUTTON (button)); if (self->flathub_state == NULL) return; if (self->category == NULL) return; if (self->task != NULL) return; category = bz_flathub_category_get_name (self->category); if (category == NULL || *category == '\0') return; label = gtk_button_get_label (button); if (label == NULL || *label == '\0') return; g_object_set_data_full (G_OBJECT (self), "current-subcategory", g_strdup (label), g_free); route = g_strdup (g_object_get_data (G_OBJECT (button), "subcategory-id")); if (route == NULL) return; future = bz_flathub_state_search_collection (self->flathub_state, route); future = dex_future_finally ( future, (DexFutureCallback) search_finally, bz_track_weak (self), bz_weak_release); self->task = g_steal_pointer (&future); } static void rebuild_subcategories (BzSubcategoryList *self) { GtkWidget *child; GListModel *subcategories; guint n_items; dex_clear (&self->task); while ((child = gtk_widget_get_first_child (GTK_WIDGET (self))) != NULL) gtk_box_remove (GTK_BOX (self), child); if (self->category == NULL) { gtk_widget_set_visible (GTK_WIDGET (self), FALSE); return; } subcategories = bz_flathub_category_get_subcategories (self->category); if (subcategories == NULL) { gtk_widget_set_visible (GTK_WIDGET (self), FALSE); return; } n_items = g_list_model_get_n_items (subcategories); if (n_items == 0) { gtk_widget_set_visible (GTK_WIDGET (self), FALSE); return; } gtk_widget_set_visible (GTK_WIDGET (self), TRUE); for (guint i = 0; i < n_items; i++) { g_autoptr (BzFlathubSubCategory) subcategory = NULL; const char *label = NULL; const char *subcat_id = NULL; const char *category = NULL; g_autofree char *route = NULL; GtkWidget *button = NULL; subcategory = g_list_model_get_item (subcategories, i); if (subcategory == NULL) continue; label = bz_flathub_sub_category_get_name(subcategory); subcat_id = bz_flathub_sub_category_get_id(subcategory); category = bz_flathub_category_get_name (self->category); route = g_strdup_printf ("/collection/category/%s/subcategories?subcategory=%s", category, subcat_id); button = gtk_button_new_with_label (label); gtk_widget_add_css_class (button, "small-pill"); g_object_set_data_full (G_OBJECT (button), "subcategory-id", g_steal_pointer (&route), g_free); g_signal_connect_swapped (button, "clicked", G_CALLBACK (subcategory_button_clicked_cb), self); gtk_box_append (GTK_BOX (self), button); } } static void bz_subcategory_list_dispose (GObject *object) { BzSubcategoryList *self = BZ_SUBCATEGORY_LIST (object); dex_clear (&self->task); g_clear_object (&self->category); g_clear_object (&self->flathub_state); G_OBJECT_CLASS (bz_subcategory_list_parent_class)->dispose (object); } static void bz_subcategory_list_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzSubcategoryList *self = BZ_SUBCATEGORY_LIST (object); switch (prop_id) { case PROP_CATEGORY: g_value_set_object (value, bz_subcategory_list_get_category (self)); break; case PROP_FLATHUB_STATE: g_value_set_object (value, bz_subcategory_list_get_flathub_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_subcategory_list_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzSubcategoryList *self = BZ_SUBCATEGORY_LIST (object); switch (prop_id) { case PROP_CATEGORY: bz_subcategory_list_set_category (self, g_value_get_object (value)); break; case PROP_FLATHUB_STATE: bz_subcategory_list_set_flathub_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_subcategory_list_class_init (BzSubcategoryListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_subcategory_list_set_property; object_class->get_property = bz_subcategory_list_get_property; object_class->dispose = bz_subcategory_list_dispose; props[PROP_CATEGORY] = g_param_spec_object ( "category", NULL, NULL, BZ_TYPE_FLATHUB_CATEGORY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_FLATHUB_STATE] = g_param_spec_object ( "flathub-state", NULL, NULL, BZ_TYPE_FLATHUB_STATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_subcategory_list_init (BzSubcategoryList *self) { GtkLayoutManager *layout; gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible (GTK_WIDGET (self), FALSE); layout = GTK_LAYOUT_MANAGER (adw_wrap_layout_new ()); adw_wrap_layout_set_child_spacing (ADW_WRAP_LAYOUT (layout), 8); adw_wrap_layout_set_line_spacing (ADW_WRAP_LAYOUT (layout), 8); gtk_widget_set_layout_manager (GTK_WIDGET (self), layout); } GtkWidget * bz_subcategory_list_new (void) { return g_object_new (BZ_TYPE_SUBCATEGORY_LIST, NULL); } BzFlathubCategory * bz_subcategory_list_get_category (BzSubcategoryList *self) { g_return_val_if_fail (BZ_IS_SUBCATEGORY_LIST (self), NULL); return self->category; } void bz_subcategory_list_set_category (BzSubcategoryList *self, BzFlathubCategory *category) { g_return_if_fail (BZ_IS_SUBCATEGORY_LIST (self)); g_return_if_fail (category == NULL || BZ_IS_FLATHUB_CATEGORY (category)); g_clear_object (&self->category); if (category != NULL) self->category = g_object_ref (category); rebuild_subcategories (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CATEGORY]); } BzFlathubState * bz_subcategory_list_get_flathub_state (BzSubcategoryList *self) { g_return_val_if_fail (BZ_IS_SUBCATEGORY_LIST (self), NULL); return self->flathub_state; } void bz_subcategory_list_set_flathub_state (BzSubcategoryList *self, BzFlathubState *flathub_state) { g_return_if_fail (BZ_IS_SUBCATEGORY_LIST (self)); g_return_if_fail (flathub_state == NULL || BZ_IS_FLATHUB_STATE (flathub_state)); g_clear_object (&self->flathub_state); if (flathub_state != NULL) self->flathub_state = g_object_ref (flathub_state); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FLATHUB_STATE]); } bazaar-org-bazaar-b6e9a65/src/bz-subcategory-list.h000066400000000000000000000030051522167256300223000ustar00rootroot00000000000000/* bz-subcategory-list.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include "bz-flathub-category.h" #include "bz-flathub-state.h" #include G_BEGIN_DECLS #define BZ_TYPE_SUBCATEGORY_LIST (bz_subcategory_list_get_type ()) G_DECLARE_FINAL_TYPE (BzSubcategoryList, bz_subcategory_list, BZ, SUBCATEGORY_LIST, GtkBox) GtkWidget *bz_subcategory_list_new (void); BzFlathubCategory *bz_subcategory_list_get_category (BzSubcategoryList *self); void bz_subcategory_list_set_category (BzSubcategoryList *self, BzFlathubCategory *category); BzFlathubState *bz_subcategory_list_get_flathub_state (BzSubcategoryList *self); void bz_subcategory_list_set_flathub_state (BzSubcategoryList *self, BzFlathubState *flathub_state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-template-callbacks.c000066400000000000000000000115141522167256300225270ustar00rootroot00000000000000/* bz-template-callbacks.c * * Copyright 2026 Eva M * * 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 */ #include "bz-template-callbacks.h" static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } /* Let's try to use this more for conciseness */ static gboolean not (gpointer object, gboolean value) { return invert_boolean (object, value); } static gboolean is_zero (gpointer object, int value) { return value == 0; } static gboolean is_double_zero (gpointer object, double value) { return value == 0.0; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_gt (gpointer object, int value1, int value2) { return value1 > value2; } static gboolean is_lt (gpointer object, int value1, int value2) { return value1 < value2; } static gboolean is_ge (gpointer object, int value1, int value2) { return value1 >= value2; } static gboolean is_le (gpointer object, int value1, int value2) { return value1 <= value2; } static gboolean logical_and (gpointer object, gboolean value1, gboolean value2) { return value1 && value2; } static gboolean logical_or (gpointer object, gboolean value1, gboolean value2) { return value1 || value2; } static gboolean is_positive (gpointer object, int value) { return value >= 0; } static gboolean is_empty (gpointer object, GListModel *model) { return model == NULL || g_list_model_get_n_items (model) == 0; } static gboolean is_empty_string (gpointer object, const char *str) { return str == NULL || *str == '\0'; } static gboolean is_longer (gpointer object, GListModel *model, int value) { return model != NULL && g_list_model_get_n_items (model) > value; } static char * bool_to_string (gpointer object, gboolean condition, char *if_true, char *if_false) { return g_strdup (condition ? if_true : if_false); } static gpointer choose (gpointer object, gboolean condition, gpointer if_true, gpointer if_false) { return condition ? if_true : if_false; } static char * format_int (gpointer object, gint integer) { return g_strdup_printf ("%d", integer); } static char * format_uint (gpointer object, guint uint) { return g_strdup_printf ("%u", uint); } static char * format_double (gpointer object, double number) { return g_strdup_printf ("%f", number); } void bz_widget_class_bind_all_util_callbacks (GtkWidgetClass *widget_class) { g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class)); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, not); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, is_double_zero); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_gt); gtk_widget_class_bind_template_callback (widget_class, is_lt); gtk_widget_class_bind_template_callback (widget_class, is_ge); gtk_widget_class_bind_template_callback (widget_class, is_le); gtk_widget_class_bind_template_callback (widget_class, logical_and); gtk_widget_class_bind_template_callback (widget_class, logical_or); gtk_widget_class_bind_template_callback (widget_class, is_positive); gtk_widget_class_bind_template_callback (widget_class, is_empty); gtk_widget_class_bind_template_callback (widget_class, is_empty_string); gtk_widget_class_bind_template_callback (widget_class, is_longer); gtk_widget_class_bind_template_callback (widget_class, bool_to_string); gtk_widget_class_bind_template_callback (widget_class, choose); gtk_widget_class_bind_template_callback (widget_class, format_int); gtk_widget_class_bind_template_callback (widget_class, format_uint); gtk_widget_class_bind_template_callback (widget_class, format_double); } bazaar-org-bazaar-b6e9a65/src/bz-template-callbacks.h000066400000000000000000000015461522167256300225400ustar00rootroot00000000000000/* bz-template-callbacks.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include void bz_widget_class_bind_all_util_callbacks (GtkWidgetClass *widget_class); bazaar-org-bazaar-b6e9a65/src/bz-themed-entry-group-rect.c000066400000000000000000000170601522167256300234730ustar00rootroot00000000000000/* bz-themed-entry-group-rect.c * * Copyright 2025 Eva M * * 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 */ #include #include "bz-themed-entry-group-rect.h" struct _BzThemedEntryGroupRect { GtkWidget parent_instance; GtkWidget *child; BzEntryGroup *group; }; G_DEFINE_FINAL_TYPE (BzThemedEntryGroupRect, bz_themed_entry_group_rect, GTK_TYPE_WIDGET); enum { PROP_0, PROP_CHILD, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_themed_entry_group_rect_dispose (GObject *object) { BzThemedEntryGroupRect *self = BZ_THEMED_ENTRY_GROUP_RECT (object); g_clear_pointer (&self->child, gtk_widget_unparent); g_clear_pointer (&self->group, g_object_unref); G_OBJECT_CLASS (bz_themed_entry_group_rect_parent_class)->dispose (object); } static void bz_themed_entry_group_rect_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzThemedEntryGroupRect *self = BZ_THEMED_ENTRY_GROUP_RECT (object); switch (prop_id) { case PROP_CHILD: g_value_set_object (value, bz_themed_entry_group_rect_get_child (self)); break; case PROP_GROUP: g_value_set_object (value, bz_themed_entry_group_rect_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_themed_entry_group_rect_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzThemedEntryGroupRect *self = BZ_THEMED_ENTRY_GROUP_RECT (object); switch (prop_id) { case PROP_CHILD: bz_themed_entry_group_rect_set_child (self, g_value_get_object (value)); break; case PROP_GROUP: bz_themed_entry_group_rect_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_themed_entry_group_rect_allocate (GtkWidget *widget, int width, int height, int baseline) { BzThemedEntryGroupRect *self = BZ_THEMED_ENTRY_GROUP_RECT (widget); if (self->child != NULL) gtk_widget_allocate (self->child, width, height, baseline, NULL); gtk_widget_queue_draw (widget); } static void bz_themed_entry_group_rect_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzThemedEntryGroupRect *self = BZ_THEMED_ENTRY_GROUP_RECT (widget); double widget_width = 0.0; double widget_height = 0.0; const char *light_color = NULL; const char *dark_color = NULL; GdkRGBA light_rgba = { 0 }; GdkRGBA dark_rgba = { 0 }; gboolean is_dark = FALSE; widget_width = (double) gtk_widget_get_width (widget); widget_height = (double) gtk_widget_get_height (widget); if (self->group != NULL) { light_color = bz_entry_group_get_light_accent_color (self->group); dark_color = bz_entry_group_get_dark_accent_color (self->group); } if (light_color != NULL) gdk_rgba_parse (&light_rgba, light_color); else gdk_rgba_parse (&light_rgba, "#ebebed"); if (dark_color != NULL) gdk_rgba_parse (&dark_rgba, dark_color); else gdk_rgba_parse (&dark_rgba, "#2e2e32"); is_dark = adw_style_manager_get_dark (adw_style_manager_get_default ()); gtk_snapshot_push_opacity (snapshot, 0.70); gtk_snapshot_append_color ( snapshot, is_dark ? &dark_rgba : &light_rgba, &GRAPHENE_RECT_INIT (0.0, 0.0, widget_width, widget_height)); gtk_snapshot_pop (snapshot); if (self->child != NULL) gtk_widget_snapshot_child (widget, self->child, snapshot); } static void bz_themed_entry_group_rect_class_init (BzThemedEntryGroupRectClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_themed_entry_group_rect_set_property; object_class->get_property = bz_themed_entry_group_rect_get_property; object_class->dispose = bz_themed_entry_group_rect_dispose; widget_class->size_allocate = bz_themed_entry_group_rect_allocate; widget_class->snapshot = bz_themed_entry_group_rect_snapshot; props[PROP_CHILD] = g_param_spec_object ( "child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void dark_changed (BzThemedEntryGroupRect *self, GParamSpec *pspec, AdwStyleManager *mgr) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void bz_themed_entry_group_rect_init (BzThemedEntryGroupRect *self) { g_signal_connect_object ( adw_style_manager_get_default (), "notify::dark", G_CALLBACK (dark_changed), self, G_CONNECT_SWAPPED); } GtkWidget * bz_themed_entry_group_rect_new (void) { return g_object_new (BZ_TYPE_THEMED_ENTRY_GROUP_RECT, NULL); } BzEntryGroup * bz_themed_entry_group_rect_get_group (BzThemedEntryGroupRect *self) { g_return_val_if_fail (BZ_IS_THEMED_ENTRY_GROUP_RECT (self), NULL); return self->group; } void bz_themed_entry_group_rect_set_group (BzThemedEntryGroupRect *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_THEMED_ENTRY_GROUP_RECT (self)); g_clear_pointer (&self->group, g_object_unref); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } GtkWidget * bz_themed_entry_group_rect_get_child (BzThemedEntryGroupRect *self) { g_return_val_if_fail (BZ_IS_THEMED_ENTRY_GROUP_RECT (self), NULL); return self->child; } void bz_themed_entry_group_rect_set_child (BzThemedEntryGroupRect *self, GtkWidget *child) { g_return_if_fail (BZ_THEMED_ENTRY_GROUP_RECT (self)); g_return_if_fail (child == NULL || GTK_IS_WIDGET (child)); if (self->child == child) return; if (child != NULL) g_return_if_fail (gtk_widget_get_parent (child) == NULL); g_clear_pointer (&self->child, gtk_widget_unparent); self->child = child; if (child != NULL) gtk_widget_set_parent (child, GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CHILD]); } /* End of bz-themed-entry-group-rect.c */ bazaar-org-bazaar-b6e9a65/src/bz-themed-entry-group-rect.h000066400000000000000000000031001522167256300234660ustar00rootroot00000000000000/* bz-themed-entry-group-rect.h * * Copyright 2025 Eva M * * 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 */ #pragma once #include #include "bz-entry-group.h" G_BEGIN_DECLS #define BZ_TYPE_THEMED_ENTRY_GROUP_RECT (bz_themed_entry_group_rect_get_type ()) G_DECLARE_FINAL_TYPE (BzThemedEntryGroupRect, bz_themed_entry_group_rect, BZ, THEMED_ENTRY_GROUP_RECT, GtkWidget) GtkWidget * bz_themed_entry_group_rect_new (void); BzEntryGroup * bz_themed_entry_group_rect_get_group (BzThemedEntryGroupRect *self); void bz_themed_entry_group_rect_set_group (BzThemedEntryGroupRect *self, BzEntryGroup *group); GtkWidget * bz_themed_entry_group_rect_get_child (BzThemedEntryGroupRect *self); void bz_themed_entry_group_rect_set_child (BzThemedEntryGroupRect *self, GtkWidget *child); G_END_DECLS /* End of bz-themed-entry-group-rect.h */ bazaar-org-bazaar-b6e9a65/src/bz-transact-icon-info.txt000066400000000000000000000005521522167256300230720ustar00rootroot00000000000000prefix=bz name=transact_icon_info parent-prefix=g parent-name=object author=AUTOGEN include="bz-state-info.h" property=state BzStateInfo BZ_TYPE_STATE_INFO object property=group BzEntryGroup BZ_TYPE_ENTRY_GROUP object property=paintable GdkPaintable GDK_TYPE_PAINTABLE object property=tracker BzTransactionEntryTracker BZ_TYPE_TRANSACTION_ENTRY_TRACKER object bazaar-org-bazaar-b6e9a65/src/bz-transact-icon.c000066400000000000000000000365431522167256300215550ustar00rootroot00000000000000/* bz-transact-icon.c * * Copyright 2026 Eva M * * 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 */ #include #include "bz-application.h" #include "bz-lazy-wdgt.h" #include "bz-transact-icon.h" #include "progress-bar-designs/common.h" struct _BzTransactIcon { AdwBin parent_instance; BzTransactIconInfo *info; GSettings *settings; BzTransactionManager *ts_manager; GListModel *trackers; BzTransactionEntryTracker *tracker; char *pride_class; BzLazyWdgt *wdgt; }; G_DEFINE_FINAL_TYPE (BzTransactIcon, bz_transact_icon, ADW_TYPE_BIN); enum { PROP_0, PROP_INFO, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void apply_state (BzTransactIcon *self); static void update_tracker (BzTransactIcon *self); static void check_tracker (BzTransactIcon *self); static void ensure_draw_css (BzTransactIcon *self); static void update_icon (BzTransactIcon *self); static void info_state_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info); static void info_group_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info); static void info_paintable_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info); static void trackers_items_changed (BzTransactIcon *self, guint position, guint removed, guint added, GListModel *model); static void tracker_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactionEntryTracker *tracker); static void pride_flag_changed (BzTransactIcon *self, const char *key, GSettings *settings); static gboolean next_frame_tick_cb (GtkWidget *widget, GdkFrameClock *frame_clock, char *apply_state); static void bz_transact_icon_dispose (GObject *object) { BzTransactIcon *self = BZ_TRANSACT_ICON (object); if (self->info != NULL) { g_signal_handlers_disconnect_by_func ( self->info, info_state_notify, self); g_signal_handlers_disconnect_by_func ( self->info, info_group_notify, self); g_signal_handlers_disconnect_by_func ( self->info, info_paintable_notify, self); } g_clear_pointer (&self->info, g_object_unref); if (self->trackers != NULL) g_signal_handlers_disconnect_by_func ( self->trackers, trackers_items_changed, self); if (self->tracker != NULL) g_signal_handlers_disconnect_by_func ( self->tracker, tracker_notify, self); if (self->settings != NULL) g_signal_handlers_disconnect_by_func ( self->settings, pride_flag_changed, self); g_clear_object (&self->settings); g_clear_object (&self->ts_manager); g_clear_object (&self->trackers); g_clear_object (&self->tracker); g_clear_pointer (&self->pride_class, g_free); G_OBJECT_CLASS (bz_transact_icon_parent_class)->dispose (object); } static void bz_transact_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzTransactIcon *self = BZ_TRANSACT_ICON (object); switch (prop_id) { case PROP_INFO: g_value_set_object (value, bz_transact_icon_get_info (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transact_icon_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzTransactIcon *self = BZ_TRANSACT_ICON (object); switch (prop_id) { case PROP_INFO: bz_transact_icon_set_info (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transact_icon_class_init (BzTransactIconClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_transact_icon_set_property; object_class->get_property = bz_transact_icon_get_property; object_class->dispose = bz_transact_icon_dispose; props[PROP_INFO] = g_param_spec_object ( "info", NULL, NULL, BZ_TYPE_TRANSACT_ICON_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_transact_icon_init (BzTransactIcon *self) { GtkWidget *placeholder_icon = NULL; self->wdgt = bz_lazy_wdgt_new (); bz_lazy_wdgt_set_wdgt_resource (self->wdgt, "/io/github/kolunmi/Bazaar/bz-transact-icon.wdgt"); g_object_bind_property (self, "info", self->wdgt, "wdgt-reference", G_BINDING_DEFAULT); adw_bin_set_child (ADW_BIN (self), GTK_WIDGET (self->wdgt)); placeholder_icon = gtk_image_new (); gtk_widget_add_css_class (placeholder_icon, "icon-dropshadow"); g_object_bind_property (self, "height-request", placeholder_icon, "pixel-size", G_BINDING_SYNC_CREATE); adw_bin_set_child (ADW_BIN (self->wdgt), placeholder_icon); update_icon (self); } BzTransactIcon * bz_transact_icon_new (void) { return g_object_new (BZ_TYPE_TRANSACT_ICON, NULL); } BzTransactIconInfo * bz_transact_icon_get_info (BzTransactIcon *self) { g_return_val_if_fail (BZ_IS_TRANSACT_ICON (self), NULL); return self->info; } void bz_transact_icon_set_info (BzTransactIcon *self, BzTransactIconInfo *info) { g_return_if_fail (BZ_IS_TRANSACT_ICON (self)); g_return_if_fail (info == NULL || BZ_IS_TRANSACT_ICON_INFO (info)); if (info == self->info) return; if (self->info != NULL) { g_signal_handlers_disconnect_by_func ( self->info, info_state_notify, self); g_signal_handlers_disconnect_by_func ( self->info, info_group_notify, self); g_signal_handlers_disconnect_by_func ( self->info, info_paintable_notify, self); } g_clear_pointer (&self->info, g_object_unref); if (info != NULL) { self->info = g_object_ref (info); g_signal_connect_swapped (self->info, "notify::state", G_CALLBACK (info_state_notify), self); g_signal_connect_swapped (self->info, "notify::group", G_CALLBACK (info_group_notify), self); g_signal_connect_swapped (self->info, "notify::paintable", G_CALLBACK (info_paintable_notify), self); } apply_state (self); update_icon (self); bz_transact_icon_info_set_state ( info, bz_state_info_get_default ()); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INFO]); } static void apply_state (BzTransactIcon *self) { if (self->trackers != NULL) g_signal_handlers_disconnect_by_func ( self->trackers, trackers_items_changed, self); if (self->tracker != NULL) g_signal_handlers_disconnect_by_func ( self->tracker, tracker_notify, self); if (self->settings != NULL) g_signal_handlers_disconnect_by_func ( self->settings, pride_flag_changed, self); g_clear_object (&self->settings); g_clear_object (&self->ts_manager); g_clear_object (&self->trackers); g_clear_object (&self->tracker); if (self->info != NULL) { BzStateInfo *state = NULL; state = bz_transact_icon_info_get_state (self->info); if (state != NULL) { g_object_get ( state, "transaction-manager", &self->ts_manager, "settings", &self->settings, NULL); if (self->ts_manager != NULL) { g_object_get ( self->ts_manager, "all-trackers", &self->trackers, NULL); if (self->trackers != NULL) g_signal_connect_swapped ( self->trackers, "items-changed", G_CALLBACK (trackers_items_changed), self); } if (self->settings != NULL) { g_signal_connect_swapped ( self->settings, "changed::global-progress-bar-theme", G_CALLBACK (pride_flag_changed), self); } } } update_tracker (self); ensure_draw_css (self); } static void update_tracker (BzTransactIcon *self) { g_autoptr (BzTransactionEntryTracker) found = NULL; if (self->trackers != NULL) { BzEntryGroup *group = NULL; group = bz_transact_icon_info_get_group (self->info); if (group != NULL) { const char *id = NULL; guint n_trackers = 0; id = bz_entry_group_get_id (group); n_trackers = g_list_model_get_n_items (self->trackers); for (guint i = 0; i < n_trackers; i++) { g_autoptr (BzTransactionEntryTracker) tracker = NULL; BzEntry *entry = NULL; tracker = g_list_model_get_item (self->trackers, i); entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) continue; if (g_strcmp0 (bz_entry_get_id (entry), id) == 0) { found = g_steal_pointer (&tracker); break; } } } } bz_transact_icon_info_set_tracker (self->info, found); if (found != self->tracker) { if (self->tracker != NULL) g_signal_handlers_disconnect_by_func ( self->tracker, tracker_notify, self); g_clear_object (&self->tracker); if (found != NULL) { self->tracker = g_object_ref (found); g_signal_connect_swapped (self->tracker, "notify::active", G_CALLBACK (tracker_notify), self); g_signal_connect_swapped (self->tracker, "notify::pending", G_CALLBACK (tracker_notify), self); g_signal_connect_swapped (self->tracker, "notify::status", G_CALLBACK (tracker_notify), self); } check_tracker (self); } } static void check_tracker (BzTransactIcon *self) { const char *state = NULL; if (self->tracker != NULL) { gboolean active = FALSE; gboolean pending = FALSE; BzTransactionEntryStatus status = 0; active = bz_transaction_entry_tracker_get_active (self->tracker); pending = bz_transaction_entry_tracker_get_pending (self->tracker); status = bz_transaction_entry_tracker_get_status (self->tracker); if ((active || pending) && status == BZ_TRANSACTION_ENTRY_STATUS_CANCELLED) state = "inactive"; else if (pending || status == BZ_TRANSACTION_ENTRY_STATUS_QUEUED) state = "pending"; else if (!active || status == BZ_TRANSACTION_ENTRY_STATUS_DONE) state = "inactive"; else state = "fraction"; } else state = "inactive"; if (!bz_lazy_wdgt_get_activated (self->wdgt)) { /* Ensure smooth animation from idle; hacky but if we schedule the state change on the next animation tick, then it will appear to smoothly animate from the placeholder */ bz_lazy_wdgt_set_wdgt_state (self->wdgt, "inactive"); gtk_widget_add_tick_callback ( GTK_WIDGET (self), (GtkTickCallback) next_frame_tick_cb, g_strdup (state), g_free); } else bz_lazy_wdgt_set_wdgt_state (self->wdgt, state); update_icon (self); ensure_draw_css (self); } static void ensure_draw_css (BzTransactIcon *self) { GtkWidget *renderer = NULL; g_autoptr (GtkWidget) widget = NULL; g_autofree char *id = NULL; g_autofree char *class = NULL; renderer = adw_bin_get_child (ADW_BIN (self->wdgt)); if (!BGE_IS_WDGT_RENDERER (renderer)) return; widget = bge_wdgt_renderer_lookup_object (BGE_WDGT_RENDERER (renderer), "flag"); if (self->settings == NULL) { if (self->pride_class != NULL) gtk_widget_remove_css_class (widget, self->pride_class); g_clear_pointer (&self->pride_class, g_free); return; } id = g_settings_get_string (self->settings, "global-progress-bar-theme"); class = bz_dup_css_class_for_pride_id (id); if (self->pride_class != NULL && g_strcmp0 (self->pride_class, class) == 0) return; if (self->pride_class != NULL) gtk_widget_remove_css_class (widget, self->pride_class); g_clear_pointer (&self->pride_class, g_free); gtk_widget_add_css_class (widget, class); self->pride_class = g_steal_pointer (&class); } static void update_icon (BzTransactIcon *self) { GtkWidget *renderer = NULL; g_autoptr (GtkWidget) icon = NULL; GdkPaintable *paintable = NULL; renderer = adw_bin_get_child (ADW_BIN (self->wdgt)); if (BGE_IS_WDGT_RENDERER (renderer)) icon = bge_wdgt_renderer_lookup_object (BGE_WDGT_RENDERER (renderer), "icon"); else icon = g_object_ref (renderer); if (self->info != NULL) paintable = bz_transact_icon_info_get_paintable (self->info); if (paintable != NULL) gtk_image_set_from_paintable (GTK_IMAGE (icon), paintable); else gtk_image_set_from_icon_name (GTK_IMAGE (icon), "application-x-executable"); } static void info_state_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info) { apply_state (self); } static void info_group_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info) { update_tracker (self); } static void info_paintable_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactIconInfo *info) { update_icon (self); } static void trackers_items_changed (BzTransactIcon *self, guint position, guint removed, guint added, GListModel *model) { update_tracker (self); } static void tracker_notify (BzTransactIcon *self, GParamSpec *pspec, BzTransactionEntryTracker *tracker) { check_tracker (self); } static void pride_flag_changed (BzTransactIcon *self, const char *key, GSettings *settings) { ensure_draw_css (self); } static gboolean next_frame_tick_cb (GtkWidget *widget, GdkFrameClock *frame_clock, char *apply_state) { BzTransactIcon *self = BZ_TRANSACT_ICON (widget); bz_lazy_wdgt_set_wdgt_state (self->wdgt, apply_state); return G_SOURCE_REMOVE; } /* End of bz-transact-icon.c */ bazaar-org-bazaar-b6e9a65/src/bz-transact-icon.h000066400000000000000000000023551522167256300215540ustar00rootroot00000000000000/* bz-transact-icon.h * * Copyright 2026 Eva M * * 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 */ #pragma once #include #include "bz-transact-icon-info.h" G_BEGIN_DECLS #define BZ_TYPE_TRANSACT_ICON (bz_transact_icon_get_type ()) G_DECLARE_FINAL_TYPE (BzTransactIcon, bz_transact_icon, BZ, TRANSACT_ICON, AdwBin) BzTransactIcon * bz_transact_icon_new (void); BzTransactIconInfo * bz_transact_icon_get_info (BzTransactIcon *self); void bz_transact_icon_set_info (BzTransactIcon *self, BzTransactIconInfo *info); G_END_DECLS /* End of bz-transact-icon.h */ bazaar-org-bazaar-b6e9a65/src/bz-transact-icon.wdgt000066400000000000000000000057131522167256300222730ustar00rootroot00000000000000defwidget "Transact Icon" { reference info : "BzTransactIconInfo"; var progress : "gdouble"; var icon-scale : "gdouble"; var flag : "GtkFixed"; var icon : "GtkImage"; var start : "gdouble"; var end : "gdouble"; var path : "GskPath"; var path-measure : "GskPathMeasure"; var path-width : "gdouble"; var path-opacity : "gdouble"; init { set progress = #transition(info:tracker:progress, 1.1, 0.1, 10.0); set flag = #child/(""("transact-icon-flag") can-target = false;); allocate flag #eval(#(%width%)+#(path-width)*2.0), #eval(#(%height%)+#(path-width)*2.0), #(translate(#GraphenePoint(#eval(-#(path-width)), #eval(-#(path-width))));); set icon = #child/(""("icon-dropshadow") pixel-size = #ifelse(#<(%height%, 1), 1, %height%); ); allocate icon %width%, %height%, #(); set path = #GskPath( add-circle( #GraphenePoint(#eval(#(%width%)/2.0), #eval(#(%height%)/2.0)), #eval(#(%height%)/2.0), ); ); set path-measure = #measure-path(path); snapshot { save { move translate(#GraphenePoint(#eval((#(%width%)/2.0)*(1.0-#(icon-scale))), #eval((#(%height%)/2.0)*(1.0-#(icon-scale))))); move scale(icon-scale, icon-scale); do-child icon; } save { move translate(#GraphenePoint(0.0, %height%)); move rotate(-90.0); with opacity(path-opacity) { with stroke( #GskPath( add-segment( path, #path-point(path-measure, #eval((#(start)%1.0)*#(#path-length(path-measure)))), #path-point(path-measure, #eval((#(end)%1.0)*#(#path-length(path-measure)))), ); ), #GskStroke(path-width, round, round, 0.0), ) { move rotate(90.0); move translate(#GraphenePoint(0.0, #eval(-#(%height%)))); do-child flag; } } } } } state-default "inactive" { set icon-scale = 1.0; transition-spring icon-scale 1.0, 0.1, 15.0; set start = 0.0; set end = 1.0; set path-opacity = 0.0; transition-spring path-opacity 1.0, 0.1, 10.0; set path-width = 3.0; transition-spring path-width 1.0, 0.1, 5.0; } state "pending" { set icon-scale = 0.6; transition-spring icon-scale 1.0, 0.1, 15.0; set start = #eval((#(%tick%)*0.5)%1.0); set end = #eval(#(start)+0.2); set path-opacity = 1.0; transition-spring path-opacity 1.0, 0.1, 5.0; set path-width = 3.0; transition-spring path-width 1.0, 0.1, 5.0; } state "fraction" { set icon-scale = 0.6; transition-spring icon-scale 1.0, 0.1, 15.0; set start = 0.0; set end = #eval(0.05+#(progress)*0.95); set path-opacity = 1.0; transition-spring path-opacity 1.0, 0.1, 5.0; set path-width = 3.0; transition-spring path-width 1.0, 0.1, 5.0; } } bazaar-org-bazaar-b6e9a65/src/bz-transaction-dialog-result.txt000066400000000000000000000004241522167256300244700ustar00rootroot00000000000000prefix=bz name=transaction_dialog_result parent-prefix=g parent-name=object author=AUTOGEN include="bz-entry.h" property=selected_entry BzEntry BZ_TYPE_ENTRY object property=delete_user_data gboolean G_TYPE_BOOLEAN boolean property=confirmed gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-transaction-dialog.c000066400000000000000000000536711522167256300225730ustar00rootroot00000000000000/* bz-transaction-dialog.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-application.h" #include "bz-entry-selection-row.h" #include "bz-env.h" #include "bz-error.h" #include "bz-flatpak-entry.h" #include "bz-safety-calculator.h" #include "bz-state-info.h" #include "bz-transaction-dialog.h" #include "bz-transaction-list-dialog.h" #include "bz-util.h" static gboolean should_skip_entry (BzEntry *entry, gboolean remove) { gboolean is_installed; if (bz_entry_is_holding (entry)) return TRUE; if (!remove && !bz_entry_is_reinstallable (entry)) return TRUE; is_installed = bz_entry_is_installed (entry); return (!remove && is_installed) || (remove && !is_installed); } static GtkWidget * create_entry_radio_button (BzEntry *entry, GtkWidget **out_radio) { BzStateInfo *state_info = NULL; GListModel *repositories = NULL; g_autoptr (BzRepository) repo = NULL; BzEntrySelectionRow *row = NULL; GtkCheckButton *radio = NULL; state_info = bz_state_info_get_default (); repositories = bz_state_info_get_repositories (state_info); if (repositories != NULL) repo = bz_entry_get_repository (entry, repositories); row = bz_entry_selection_row_new (BZ_FLATPAK_ENTRY (entry), repo); radio = bz_entry_selection_row_get_radio (row); if (out_radio != NULL) *out_radio = GTK_WIDGET (radio); return GTK_WIDGET (row); } static GPtrArray * create_entry_radio_buttons (AdwAlertDialog *alert, GListStore *store, gboolean remove) { g_autoptr (GPtrArray) radios = NULL; GtkWidget *container = NULL; container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); radios = g_ptr_array_new (); if (store != NULL) { guint n_total_entries = g_list_model_get_n_items (G_LIST_MODEL (store)); if (n_total_entries > 1) { GtkWidget *listbox = NULL; GtkCheckButton *first_valid_radio = NULL; GtkCheckButton *dummy_radio = NULL; listbox = gtk_list_box_new (); gtk_list_box_set_selection_mode (GTK_LIST_BOX (listbox), GTK_SELECTION_NONE); gtk_widget_add_css_class (listbox, "boxed-list"); dummy_radio = GTK_CHECK_BUTTON (gtk_check_button_new ()); for (guint i = 0; i < n_total_entries; i++) { g_autoptr (BzEntry) entry = NULL; GtkWidget *row = NULL; GtkWidget *radio = NULL; gboolean should_skip = FALSE; entry = g_list_model_get_item (G_LIST_MODEL (store), i); should_skip = should_skip_entry (entry, remove); row = create_entry_radio_button (entry, &radio); g_ptr_array_add (radios, radio); gtk_check_button_set_group (GTK_CHECK_BUTTON (radio), dummy_radio); if (should_skip) { gtk_widget_set_sensitive (row, FALSE); gtk_widget_set_sensitive (radio, FALSE); } else { if (first_valid_radio == NULL) { gtk_check_button_set_active (GTK_CHECK_BUTTON (radio), TRUE); first_valid_radio = (GtkCheckButton *) radio; } } gtk_list_box_append (GTK_LIST_BOX (listbox), row); } gtk_box_append (GTK_BOX (container), listbox); } } if (remove) { GtkWidget *listbox = NULL; GtkWidget *keep_data_row = NULL; GtkWidget *delete_data_row = NULL; GtkWidget *keep_radio = NULL; GtkWidget *delete_radio = NULL; listbox = gtk_list_box_new (); gtk_list_box_set_selection_mode (GTK_LIST_BOX (listbox), GTK_SELECTION_NONE); gtk_widget_add_css_class (listbox, "boxed-list"); keep_data_row = adw_action_row_new (); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (keep_data_row), _ ("Keep User Data")); adw_action_row_set_subtitle (ADW_ACTION_ROW (keep_data_row), _ ("Allow restoring personal settings & content")); keep_radio = gtk_check_button_new (); gtk_widget_set_valign (keep_radio, GTK_ALIGN_CENTER); gtk_check_button_set_active (GTK_CHECK_BUTTON (keep_radio), TRUE); adw_action_row_add_prefix (ADW_ACTION_ROW (keep_data_row), keep_radio); adw_action_row_set_activatable_widget (ADW_ACTION_ROW (keep_data_row), keep_radio); gtk_list_box_append (GTK_LIST_BOX (listbox), keep_data_row); delete_data_row = adw_action_row_new (); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (delete_data_row), _ ("Delete All Data")); adw_action_row_set_subtitle (ADW_ACTION_ROW (delete_data_row), _ ("Permanently erase user data to save space")); delete_radio = gtk_check_button_new (); gtk_widget_set_valign (delete_radio, GTK_ALIGN_CENTER); gtk_check_button_set_group (GTK_CHECK_BUTTON (delete_radio), GTK_CHECK_BUTTON (keep_radio)); adw_action_row_add_prefix (ADW_ACTION_ROW (delete_data_row), delete_radio); adw_action_row_set_activatable_widget (ADW_ACTION_ROW (delete_data_row), delete_radio); gtk_list_box_append (GTK_LIST_BOX (listbox), delete_data_row); g_ptr_array_add (radios, keep_radio); g_ptr_array_add (radios, delete_radio); gtk_box_append (GTK_BOX (container), listbox); } adw_alert_dialog_set_extra_child (alert, container); return g_steal_pointer (&radios); } static void configure_install_dialog (AdwAlertDialog *alert, const char *title, const char *id, gboolean has_multiple_entries) { g_autofree char *heading = NULL; heading = g_strdup_printf (_ ("Install %s?"), title); adw_alert_dialog_set_heading (alert, heading); if (has_multiple_entries) adw_alert_dialog_set_body (alert, _ ("Select which version to install. May install additional shared components")); else adw_alert_dialog_set_body (alert, _ ("May install additional shared components")); adw_alert_dialog_add_responses (alert, "cancel", _ ("_Cancel"), "install", _ ("_Install"), NULL); adw_alert_dialog_set_response_appearance (alert, "install", ADW_RESPONSE_SUGGESTED); adw_alert_dialog_set_default_response (alert, "install"); adw_alert_dialog_set_close_response (alert, "cancel"); } static void configure_remove_dialog (AdwAlertDialog *alert, const char *title, const char *id, gboolean has_multiple_entries) { g_autofree char *heading = NULL; g_autofree char *body = NULL; heading = g_strdup_printf (_ ("Remove %s?"), title); if (has_multiple_entries) body = g_strdup (_ ("Select which version to remove.")); else body = g_strdup_printf (_ ("It will not be possible to use %s after it is uninstalled."), title); adw_alert_dialog_set_heading (alert, heading); adw_alert_dialog_set_body (alert, body); adw_alert_dialog_add_responses (alert, "cancel", _ ("_Cancel"), "remove", _ ("_Remove"), NULL); adw_alert_dialog_set_response_appearance (alert, "remove", ADW_RESPONSE_DESTRUCTIVE); adw_alert_dialog_set_default_response (alert, "remove"); adw_alert_dialog_set_close_response (alert, "cancel"); } static void configure_high_risk_warning_dialog (AdwAlertDialog *alert, const char *title, BzHighRiskGroup risk_groups) { g_autofree char *heading = NULL; g_autofree char *body = NULL; heading = g_strdup_printf (_ ("“%s” is High Risk"), title); if (risk_groups & BZ_HIGH_RISK_GROUP_DISK) { body = g_strdup (_ ("This app has full access to your system, including all " "your files, browser history, saved passwords, and " "more. It also has access to the internet, meaning it " "could send your data to outside parties.\n\n" "Because the app is proprietary, it can not be audited " "for what it does with these permissions.")); } else if (risk_groups & BZ_HIGH_RISK_GROUP_X11) { body = g_strdup (_ ("This app uses the legacy X11 windowing system, which " "allows it to record all keystrokes, capture screenshots, " "and monitor other applications. It also has access " "to the internet, meaning it could send your data to " "outside parties.\n\n" "Because the app is proprietary, it can not be audited " "for what it does with these permissions.")); } adw_alert_dialog_set_heading (alert, heading); adw_alert_dialog_set_body (alert, body); adw_alert_dialog_set_body_use_markup (alert, TRUE); adw_alert_dialog_set_prefer_wide_layout (alert, TRUE); adw_alert_dialog_add_responses (alert, "cancel", _ ("_Cancel"), "install", _ ("_Install Anyway"), NULL); adw_alert_dialog_set_response_appearance (alert, "install", ADW_RESPONSE_DESTRUCTIVE); adw_alert_dialog_set_default_response (alert, "cancel"); adw_alert_dialog_set_close_response (alert, "cancel"); } static BzHighRiskGroup get_entry_high_risk_groups (BzEntry *entry) { if (bz_entry_get_is_foss (entry)) return BZ_HIGH_RISK_GROUP_NONE; return bz_safety_calculator_get_high_risk_groups (entry); } BZ_DEFINE_DATA ( show_dialog, ShowDialog, { GtkWidget *parent; BzEntry *entry; BzEntryGroup *group; gboolean remove; gboolean auto_confirm; }, BZ_RELEASE_DATA (entry, g_object_unref); BZ_RELEASE_DATA (group, g_object_unref)) static DexFuture * show_dialog_fiber (ShowDialogData *data) { g_autoptr (GError) local_error = NULL; g_autoptr (GListStore) store = NULL; const char *title = NULL; const char *id = NULL; g_autoptr (AdwDialog) alert = NULL; g_autoptr (AdwDialog) risk_alert = NULL; g_autoptr (GPtrArray) radios = NULL; g_autofree char *dialog_response = NULL; g_autofree char *risk_response = NULL; g_autoptr (BzTransactionDialogResult) result = NULL; g_autoptr (BzEntry) check_entry = NULL; BzHighRiskGroup risk_groups = BZ_HIGH_RISK_GROUP_NONE; guint n_total_entries = 0; gboolean confirmed = 0; result = bz_transaction_dialog_result_new (); if (data->group != NULL) { store = dex_await_object (bz_entry_group_dup_all_into_store (data->group), &local_error); if (store == NULL) { bz_show_error_for_widget (data->parent, _ ("Failed to load transaction dialog"), local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } for (guint i = g_list_model_get_n_items (G_LIST_MODEL (store)); i > 0; i--) { g_autoptr (BzEntry) entry = NULL; entry = g_list_model_get_item (G_LIST_MODEL (store), i - 1); if (!bz_entry_is_reinstallable (entry) && (!data->remove || !bz_entry_is_installed (entry))) g_list_store_remove (store, i - 1); } title = bz_entry_group_get_title (data->group); id = bz_entry_group_get_id (data->group); n_total_entries = g_list_model_get_n_items (G_LIST_MODEL (store)); if (n_total_entries > 0) check_entry = g_list_model_get_item (G_LIST_MODEL (store), 0); } else { title = bz_entry_get_title (data->entry); id = bz_entry_get_id (data->entry); check_entry = g_object_ref (data->entry); } if (!data->remove && check_entry != NULL) risk_groups = get_entry_high_risk_groups (check_entry); if (risk_groups != BZ_HIGH_RISK_GROUP_NONE) { risk_alert = g_object_ref_sink (adw_alert_dialog_new (NULL, NULL)); configure_high_risk_warning_dialog (ADW_ALERT_DIALOG (risk_alert), title, risk_groups); adw_dialog_present (risk_alert, data->parent); risk_response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (risk_alert)), &local_error); if (risk_response == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (g_strcmp0 (risk_response, "install") != 0) { bz_transaction_dialog_result_set_confirmed (result, FALSE); return dex_future_new_for_object (result); } data->auto_confirm = TRUE; } alert = g_object_ref_sink (adw_alert_dialog_new (NULL, NULL)); if (data->remove) configure_remove_dialog (ADW_ALERT_DIALOG (alert), title, id, n_total_entries > 1); else configure_install_dialog (ADW_ALERT_DIALOG (alert), title, id, n_total_entries > 1); radios = create_entry_radio_buttons (ADW_ALERT_DIALOG (alert), store, data->remove); if (!data->remove && data->auto_confirm && radios->len <= 1) { dialog_response = g_strdup ("install"); g_ptr_array_set_size (radios, 0); g_clear_object (&alert); } else if (data->remove && data->auto_confirm && radios->len <= 1) { dialog_response = g_strdup ("remove"); g_ptr_array_set_size (radios, 0); g_clear_object (&alert); } else { adw_dialog_present (alert, data->parent); dialog_response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (alert)), &local_error); if (dialog_response == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (data->remove && radios->len >= 2) { GtkCheckButton *delete_radio = g_ptr_array_index (radios, radios->len - 1); bz_transaction_dialog_result_set_delete_user_data (result, gtk_check_button_get_active (delete_radio)); } } confirmed = (g_strcmp0 (dialog_response, "install") == 0) || (g_strcmp0 (dialog_response, "remove") == 0); bz_transaction_dialog_result_set_confirmed (result, confirmed); if (!confirmed) return dex_future_new_for_object (result); if (data->group != NULL) { guint n_entries = g_list_model_get_n_items (G_LIST_MODEL (store)); for (guint i = 0; i < MIN (n_entries, radios->len); i++) { GtkCheckButton *check = g_ptr_array_index (radios, i); if (gtk_check_button_get_active (check)) { g_autoptr (BzEntry) entry = NULL; entry = g_list_model_get_item (G_LIST_MODEL (store), i); bz_transaction_dialog_result_set_selected_entry (result, entry); break; } } if (bz_transaction_dialog_result_get_selected_entry (result) == NULL && n_entries > 0) { g_autoptr (BzEntry) entry = NULL; entry = g_list_model_get_item (G_LIST_MODEL (store), 0); bz_transaction_dialog_result_set_selected_entry (result, entry); } } else bz_transaction_dialog_result_set_selected_entry (result, data->entry); return dex_future_new_for_object (result); } DexFuture * bz_transaction_dialog_show (GtkWidget *parent, BzEntry *entry, BzEntryGroup *group, gboolean remove, gboolean auto_confirm) { g_autoptr (ShowDialogData) data = NULL; g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL); g_return_val_if_fail (entry != NULL || group != NULL, NULL); data = show_dialog_data_new (); data->parent = parent; data->entry = bz_object_maybe_ref (entry); data->group = bz_object_maybe_ref (group); data->remove = remove; data->auto_confirm = auto_confirm; return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) show_dialog_fiber, g_steal_pointer (&data), show_dialog_data_unref); } BZ_DEFINE_DATA ( bulk_install_dialog, BulkInstallDialog, { GtkWidget *parent; GListModel *groups; }, BZ_RELEASE_DATA (groups, g_object_unref)); static DexFuture * bulk_install_dialog_fiber (BulkInstallDialogData *data) { g_autoptr (GError) local_error = NULL; g_autoptr (BzBulkInstallDialogResult) result = NULL; g_autoptr (GPtrArray) resolved_entries = NULL; g_autoptr (GListStore) entries_store = NULL; AdwDialog *dialog = NULL; g_autofree char *dialog_response = NULL; g_autofree char *heading = NULL; guint n_groups = 0; gboolean confirmed = FALSE; result = bz_bulk_install_dialog_result_new (); resolved_entries = g_ptr_array_new_with_free_func (g_object_unref); if (data->groups == NULL) { bz_bulk_install_dialog_result_set_confirmed (result, FALSE); return dex_future_new_for_object (result); } n_groups = g_list_model_get_n_items (data->groups); for (guint i = 0; i < n_groups; i++) { g_autoptr (BzEntryGroup) group = NULL; g_autoptr (GListStore) store = NULL; g_autoptr (BzEntry) entry = NULL; group = g_list_model_get_item (data->groups, i); if (bz_entry_group_get_removable (group) > 0) continue; store = dex_await_object (bz_entry_group_dup_all_into_store (group), &local_error); if (store == NULL || g_list_model_get_n_items (G_LIST_MODEL (store)) == 0) continue; entry = g_list_model_get_item (G_LIST_MODEL (store), 0); if (entry == NULL) continue; if (bz_entry_is_installed (entry) || bz_entry_is_holding (entry)) continue; g_ptr_array_add (resolved_entries, g_object_ref (entry)); } if (resolved_entries->len == 0) { g_autoptr (AdwDialog) info_alert = NULL; info_alert = g_object_ref_sink (adw_alert_dialog_new ( _ ("All apps are already installed"), NULL)); adw_alert_dialog_add_response (ADW_ALERT_DIALOG (info_alert), "ok", _ ("_OK")); adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (info_alert), "ok"); adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (info_alert), "ok"); adw_dialog_present (info_alert, data->parent); dex_await (bz_make_alert_dialog_future (ADW_ALERT_DIALOG (info_alert)), NULL); bz_bulk_install_dialog_result_set_confirmed (result, FALSE); return dex_future_new_for_object (result); } entries_store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < resolved_entries->len; i++) g_list_store_append (entries_store, g_ptr_array_index (resolved_entries, i)); heading = g_strdup_printf (ngettext ("Install %u App?", "Install %u Apps?", resolved_entries->len), resolved_entries->len); dialog = bz_transaction_list_dialog_new ( G_LIST_MODEL (entries_store), heading, _ ("The following will be installed. Additional shared components may also be installed"), _ ("%d addons will be installed."), _ ("Additionally, addons will be installed."), _ ("_Cancel"), _ ("_Install All")); adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (dialog), "confirm"); adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (dialog), "cancel"); adw_dialog_present (dialog, data->parent); dialog_response = dex_await_string ( bz_make_alert_dialog_future (ADW_ALERT_DIALOG (dialog)), &local_error); if (dialog_response == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); confirmed = bz_transaction_list_dialog_was_confirmed ( BZ_TRANSACTION_LIST_DIALOG (dialog)); bz_bulk_install_dialog_result_set_confirmed (result, confirmed); if (confirmed) { g_autoptr (GListStore) store = NULL; store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < resolved_entries->len; i++) { BzEntry *entry = g_ptr_array_index (resolved_entries, i); g_list_store_append (store, entry); } bz_bulk_install_dialog_result_set_entries (result, G_LIST_MODEL (store)); } return dex_future_new_for_object (result); } DexFuture * bz_bulk_install_dialog_show (GtkWidget *parent, GListModel *groups) { g_autoptr (BulkInstallDialogData) data = NULL; g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL); g_return_val_if_fail (G_IS_LIST_MODEL (groups), NULL); data = bulk_install_dialog_data_new (); data->parent = parent; data->groups = g_object_ref (groups); return dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) bulk_install_dialog_fiber, g_steal_pointer (&data), bulk_install_dialog_data_unref); } bazaar-org-bazaar-b6e9a65/src/bz-transaction-dialog.h000066400000000000000000000025421522167256300225670ustar00rootroot00000000000000/* bz-transaction-dialog.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include #include "bz-bulk-install-dialog-result.h" #include "bz-entry-group.h" #include "bz-transaction-dialog-result.h" G_BEGIN_DECLS DexFuture *bz_transaction_dialog_show (GtkWidget *parent, BzEntry *entry, BzEntryGroup *group, gboolean remove, gboolean auto_confirm); DexFuture *bz_bulk_install_dialog_show (GtkWidget *parent, GListModel *groups); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-transaction-entry-tracker.txt000066400000000000000000000013021522167256300245030ustar00rootroot00000000000000prefix=bz name=transaction_entry_tracker parent-prefix=g parent-name=object author=AUTOGEN enum=bz transaction_entry_kind install update removal enum=bz transaction_entry_status queued ongoing done cancelled include= include="bz-entry.h" property=entry BzEntry BZ_TYPE_ENTRY object property=current_ops GListModel G_TYPE_LIST_MODEL object property=finished_ops GListModel G_TYPE_LIST_MODEL object property=kind BzTransactionEntryKind BZ_TYPE_TRANSACTION_ENTRY_KIND enum property=status BzTransactionEntryStatus BZ_TYPE_TRANSACTION_ENTRY_STATUS enum property=progress double G_TYPE_DOUBLE double property=pending gboolean G_TYPE_BOOLEAN boolean property=active gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-transaction-list-dialog.blp000066400000000000000000000042731522167256300240710ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzTransactionListDialog: Adw.AlertDialog { extra-child: ScrolledWindow { width-request: 300; propagate-natural-height: true; overflow: hidden; vexpand: true; hscrollbar-policy: never; child: Box { orientation: vertical; spacing: 5; ListView list_view { styles [ "navigation-sidebar", ] model: NoSelection selection_model {}; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Box { orientation: horizontal; margin-top: 5; margin-bottom: 5; spacing: 6; Image { icon-size: large; paintable: bind template.item as <$BzEntry>.icon-paintable; visible: bind $invert_boolean($is_null(template.item as <$BzEntry>.icon-paintable) as ) as ; } Image { icon-size: large; icon-name: "application-x-executable"; visible: bind $is_null(template.item as <$BzEntry>.icon-paintable) as ; } Box { orientation: vertical; spacing: 3; Label { styles [ "heading", ] hexpand: true; xalign: 0.0; ellipsize: end; single-line-mode: true; label: bind template.item as <$BzEntry>.title; } Label { styles [ "dimmed", ] hexpand: true; xalign: 0.0; wrap: true; wrap-mode: word_char; single-line-mode: true; selectable: true; label: bind template.item as <$BzEntry>.id; } } }; } }; } Label secondary_label { styles [ "dimmed", ] visible: false; wrap: true; justify: center; } }; }; }bazaar-org-bazaar-b6e9a65/src/bz-transaction-list-dialog.c000066400000000000000000000134771522167256300235440ustar00rootroot00000000000000/* bz-transaction-list-dialog.c * * Copyright 2025 Adam Masciola * * 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 */ #include "config.h" #include #include "bz-entry.h" #include "bz-transaction-list-dialog.h" struct _BzTransactionListDialog { AdwAlertDialog parent_instance; GListModel *entries; gboolean confirmed; GtkFilterListModel *app_filter; /* Template widgets */ GtkNoSelection *selection_model; GtkLabel *secondary_label; }; G_DEFINE_FINAL_TYPE (BzTransactionListDialog, bz_transaction_list_dialog, ADW_TYPE_ALERT_DIALOG) static gboolean match_for_app (BzEntry *item, gpointer user_data); static void on_response (AdwAlertDialog *alert, gchar *response, BzTransactionListDialog *self); static void bz_transaction_list_dialog_dispose (GObject *object) { BzTransactionListDialog *self = BZ_TRANSACTION_LIST_DIALOG (object); g_clear_object (&self->entries); g_clear_object (&self->app_filter); G_OBJECT_CLASS (bz_transaction_list_dialog_parent_class)->dispose (object); } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static void bz_transaction_list_dialog_class_init (BzTransactionListDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_transaction_list_dialog_dispose; gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-transaction-list-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, BzTransactionListDialog, selection_model); gtk_widget_class_bind_template_child (widget_class, BzTransactionListDialog, secondary_label); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); } static void bz_transaction_list_dialog_init (BzTransactionListDialog *self) { GtkCustomFilter *filter = NULL; gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect (self, "response", G_CALLBACK (on_response), self); filter = gtk_custom_filter_new ((GtkCustomFilterFunc) match_for_app, NULL, NULL); self->app_filter = gtk_filter_list_model_new (NULL, GTK_FILTER (filter)); gtk_no_selection_set_model (self->selection_model, G_LIST_MODEL (self->app_filter)); } static void on_response (AdwAlertDialog *alert, gchar *response, BzTransactionListDialog *self) { self->confirmed = g_strcmp0 (response, "confirm") == 0; } AdwDialog * bz_transaction_list_dialog_new (GListModel *entries, const gchar *heading, const gchar *body, const gchar *body_no_apps, const gchar *secondary_label, const gchar *cancel_label, const gchar *confirm_label) { BzTransactionListDialog *dialog = NULL; guint n_total = 0; guint n_apps = 0; guint n_other = 0; g_return_val_if_fail (G_IS_LIST_MODEL (entries), NULL); dialog = g_object_new (BZ_TYPE_TRANSACTION_LIST_DIALOG, NULL); dialog->entries = g_object_ref (entries); gtk_filter_list_model_set_model (dialog->app_filter, entries); adw_alert_dialog_add_response (ADW_ALERT_DIALOG (dialog), "cancel", cancel_label); adw_alert_dialog_add_response (ADW_ALERT_DIALOG (dialog), "confirm", confirm_label); adw_alert_dialog_set_response_appearance (ADW_ALERT_DIALOG (dialog), "confirm", ADW_RESPONSE_SUGGESTED); adw_alert_dialog_set_heading (ADW_ALERT_DIALOG (dialog), heading); n_total = g_list_model_get_n_items (entries); n_apps = g_list_model_get_n_items (G_LIST_MODEL (dialog->app_filter)); n_other = n_total - n_apps; if (n_total > 0) { if (n_apps == 0 && body_no_apps != NULL) { g_autofree char *formatted_body = NULL; formatted_body = g_strdup_printf (body_no_apps, n_other); adw_alert_dialog_set_body (ADW_ALERT_DIALOG (dialog), formatted_body); adw_alert_dialog_set_extra_child (ADW_ALERT_DIALOG (dialog), NULL); } else { adw_alert_dialog_set_body (ADW_ALERT_DIALOG (dialog), body); if (n_other > 0 && secondary_label != NULL) { g_autofree char *formatted_label = NULL; formatted_label = g_strdup_printf (secondary_label, n_other); gtk_label_set_label (dialog->secondary_label, formatted_label); gtk_widget_set_visible (GTK_WIDGET (dialog->secondary_label), TRUE); } } } return ADW_DIALOG (dialog); } gboolean bz_transaction_list_dialog_was_confirmed (BzTransactionListDialog *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_LIST_DIALOG (self), FALSE); return self->confirmed; } static gboolean match_for_app (BzEntry *item, gpointer user_data) { return bz_entry_is_of_kinds (item, BZ_ENTRY_KIND_APPLICATION); } bazaar-org-bazaar-b6e9a65/src/bz-transaction-list-dialog.h000066400000000000000000000027751522167256300235500ustar00rootroot00000000000000/* bz-transaction-list-dialog.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_TRANSACTION_LIST_DIALOG (bz_transaction_list_dialog_get_type ()) G_DECLARE_FINAL_TYPE (BzTransactionListDialog, bz_transaction_list_dialog, BZ, TRANSACTION_LIST_DIALOG, AdwAlertDialog) AdwDialog * bz_transaction_list_dialog_new (GListModel *entries, const gchar *heading, const gchar *body, const gchar *body_no_apps, const gchar *secondary_label, const gchar *cancel_label, const gchar *confirm_label); gboolean bz_transaction_list_dialog_was_confirmed (BzTransactionListDialog *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-transaction-manager.c000066400000000000000000000650161522167256300227420ustar00rootroot00000000000000/* bz-transaction-manager.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::TRANSACTIONS" #include "config.h" #include #include "bz-backend-transaction-op-payload.h" #include "bz-backend-transaction-op-progress-payload.h" #include "bz-env.h" #include "bz-marshalers.h" #include "bz-transaction-manager.h" #include "bz-util.h" /* clang-format off */ G_DEFINE_QUARK (bz-transaction-mgr-error-quark, bz_transaction_mgr_error); /* clang-format on */ enum { HOOK_CONTINUE, HOOK_STOP, HOOK_CONFIRM, HOOK_DENY, }; static inline void finish_queued_schedule_data (gpointer ptr); BZ_DEFINE_DATA ( queued_schedule, QueuedSchedule, { GWeakRef *self; BzTransaction *transaction; DexPromise *promise; GTimer *timer; }, finish_queued_schedule_data (self);) struct _BzTransactionManager { GObject parent_instance; BzMainConfig *config; BzBackend *backend; gboolean paused; GListStore *transactions; double current_progress; gboolean pending; QueuedScheduleData *current; DexFuture *loop; GtkFlattenListModel *all_trackers; GtkFilterListModel *install_trackers; GtkFilterListModel *removal_trackers; GQueue queue; }; G_DEFINE_FINAL_TYPE (BzTransactionManager, bz_transaction_manager, G_TYPE_OBJECT) enum { PROP_0, PROP_CONFIG, PROP_BACKEND, PROP_PAUSED, PROP_TRANSACTIONS, PROP_HAS_TRANSACTIONS, PROP_ACTIVE, PROP_PENDING, PROP_CURRENT_PROGRESS, PROP_INSTALL_TRACKERS, PROP_REMOVAL_TRACKERS, PROP_ALL_TRACKERS, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_SUCCESS, SIGNAL_FAILURE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static DexFuture * transaction_fiber (QueuedScheduleData *data); static DexFuture * transaction_finally (DexFuture *future, QueuedScheduleData *data); static DexFuture * then_loop_cb (DexFuture *future, GWeakRef *wr); static DexFuture * dispatch_next (BzTransactionManager *self); static void bz_transaction_manager_dispose (GObject *object) { BzTransactionManager *self = BZ_TRANSACTION_MANAGER (object); g_clear_object (&self->config); g_clear_object (&self->backend); g_clear_object (&self->transactions); g_queue_clear_full (&self->queue, queued_schedule_data_unref); g_clear_pointer (&self->current, queued_schedule_data_unref); dex_clear (&self->loop); G_OBJECT_CLASS (bz_transaction_manager_parent_class)->dispose (object); } static void bz_transaction_manager_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzTransactionManager *self = BZ_TRANSACTION_MANAGER (object); switch (prop_id) { case PROP_CONFIG: g_value_set_boxed (value, bz_transaction_manager_get_config (self)); break; case PROP_BACKEND: g_value_set_object (value, bz_transaction_manager_get_backend (self)); break; case PROP_PAUSED: g_value_set_boolean (value, bz_transaction_manager_get_paused (self)); break; case PROP_TRANSACTIONS: g_value_set_object (value, self->transactions); break; case PROP_HAS_TRANSACTIONS: g_value_set_boolean (value, bz_transaction_manager_get_has_transactions (self)); break; case PROP_ACTIVE: g_value_set_boolean (value, bz_transaction_manager_get_active (self)); break; case PROP_PENDING: g_value_set_boolean (value, bz_transaction_manager_get_pending (self)); break; case PROP_CURRENT_PROGRESS: g_value_set_double (value, self->current_progress); break; case PROP_INSTALL_TRACKERS: g_value_set_object (value, self->install_trackers); break; case PROP_REMOVAL_TRACKERS: g_value_set_object (value, self->removal_trackers); break; case PROP_ALL_TRACKERS: g_value_set_object (value, self->all_trackers); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transaction_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzTransactionManager *self = BZ_TRANSACTION_MANAGER (object); switch (prop_id) { case PROP_CONFIG: bz_transaction_manager_set_config (self, g_value_get_boxed (value)); break; case PROP_BACKEND: bz_transaction_manager_set_backend (self, g_value_get_object (value)); break; case PROP_PAUSED: bz_transaction_manager_set_paused (self, g_value_get_boolean (value)); break; case PROP_TRANSACTIONS: case PROP_HAS_TRANSACTIONS: case PROP_ACTIVE: case PROP_PENDING: case PROP_CURRENT_PROGRESS: case PROP_INSTALL_TRACKERS: case PROP_REMOVAL_TRACKERS: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean filter_install_trackers (gpointer item, gpointer user_data) { BzTransactionEntryTracker *tracker = NULL; BzTransactionEntryKind kind = 0; tracker = BZ_TRANSACTION_ENTRY_TRACKER (item); if (tracker == NULL) return FALSE; kind = bz_transaction_entry_tracker_get_kind (tracker); return kind == BZ_TRANSACTION_ENTRY_KIND_INSTALL || kind == BZ_TRANSACTION_ENTRY_KIND_UPDATE; } static gboolean filter_removal_trackers (gpointer item, gpointer user_data) { BzTransactionEntryTracker *tracker = NULL; tracker = BZ_TRANSACTION_ENTRY_TRACKER (item); if (tracker == NULL) return FALSE; return bz_transaction_entry_tracker_get_kind (tracker) == BZ_TRANSACTION_ENTRY_KIND_REMOVAL; } static gpointer get_trackers_model (gpointer item, gpointer user_data) { BzTransaction *transaction = NULL; g_autoptr (GListModel) trackers = NULL; transaction = BZ_TRANSACTION (item); if (transaction == NULL) return NULL; trackers = g_object_ref (bz_transaction_get_trackers (transaction)); g_object_unref (item); return g_steal_pointer (&trackers); } static void bz_transaction_manager_class_init (BzTransactionManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_transaction_manager_dispose; object_class->get_property = bz_transaction_manager_get_property; object_class->set_property = bz_transaction_manager_set_property; props[PROP_CONFIG] = g_param_spec_object ( "config", NULL, NULL, BZ_TYPE_MAIN_CONFIG, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_BACKEND] = g_param_spec_object ( "backend", NULL, NULL, BZ_TYPE_BACKEND, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PAUSED] = g_param_spec_boolean ( "paused", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_TRANSACTIONS] = g_param_spec_object ( "transactions", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_HAS_TRANSACTIONS] = g_param_spec_boolean ( "has-transactions", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_ACTIVE] = g_param_spec_boolean ( "active", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_PENDING] = g_param_spec_boolean ( "pending", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_CURRENT_PROGRESS] = g_param_spec_double ( "current-progress", NULL, NULL, 0.0, 1.0, 0.0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_INSTALL_TRACKERS] = g_param_spec_object ( "install-trackers", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_REMOVAL_TRACKERS] = g_param_spec_object ( "removal-trackers", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_ALL_TRACKERS] = g_param_spec_object ( "all-trackers", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_SUCCESS] = g_signal_new ( "success", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, BZ_TYPE_TRANSACTION, 0); g_signal_set_va_marshaller ( signals[SIGNAL_SUCCESS], G_TYPE_FROM_CLASS (klass), bz_marshal_VOID__OBJECT_BOXEDv); signals[SIGNAL_FAILURE] = g_signal_new ( "failure", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, BZ_TYPE_TRANSACTION, 0); g_signal_set_va_marshaller ( signals[SIGNAL_FAILURE], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__OBJECTv); } static void bz_transaction_manager_init (BzTransactionManager *self) { GtkCustomFilter *install_filter; GtkCustomFilter *removal_filter; GtkMapListModel *map_model; self->transactions = g_list_store_new (BZ_TYPE_TRANSACTION); g_queue_init (&self->queue); map_model = gtk_map_list_model_new ( g_object_ref (G_LIST_MODEL (self->transactions)), get_trackers_model, NULL, NULL); self->all_trackers = gtk_flatten_list_model_new (G_LIST_MODEL (map_model)); install_filter = gtk_custom_filter_new ( filter_install_trackers, NULL, NULL); self->install_trackers = gtk_filter_list_model_new ( g_object_ref (G_LIST_MODEL (self->all_trackers)), GTK_FILTER (install_filter)); removal_filter = gtk_custom_filter_new ( filter_removal_trackers, NULL, NULL); self->removal_trackers = gtk_filter_list_model_new ( g_object_ref (G_LIST_MODEL (self->all_trackers)), GTK_FILTER (removal_filter)); } BzTransactionManager * bz_transaction_manager_new (void) { return g_object_new (BZ_TYPE_TRANSACTION_MANAGER, NULL); } void bz_transaction_manager_set_config (BzTransactionManager *self, BzMainConfig *config) { g_return_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); g_clear_object (&self->config); if (config != NULL) self->config = g_object_ref (config); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CONFIG]); } BzMainConfig * bz_transaction_manager_get_config (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), NULL); return self->config; } void bz_transaction_manager_set_backend (BzTransactionManager *self, BzBackend *backend) { g_return_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); g_return_if_fail (backend == NULL || BZ_IS_BACKEND (backend)); g_clear_object (&self->backend); if (backend != NULL) self->backend = g_object_ref (backend); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_BACKEND]); } BzBackend * bz_transaction_manager_get_backend (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), NULL); return self->backend; } void bz_transaction_manager_set_paused (BzTransactionManager *self, gboolean paused) { g_return_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); if (!!self->paused == !!paused) return; self->paused = paused; if (!paused) dex_future_disown (dispatch_next (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PAUSED]); } gboolean bz_transaction_manager_get_paused (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), FALSE); return self->paused; } gboolean bz_transaction_manager_get_active (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), FALSE); return self->loop != NULL; } gboolean bz_transaction_manager_get_pending (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), FALSE); return self->loop != NULL && self->pending; } gboolean bz_transaction_manager_get_has_transactions (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), FALSE); return g_list_model_get_n_items (G_LIST_MODEL (self->transactions)) > 0; } GListModel * bz_transaction_manager_get_all_trackers (BzTransactionManager *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_MANAGER (self), NULL); return G_LIST_MODEL (self->all_trackers); } DexFuture * bz_transaction_manager_add (BzTransactionManager *self, BzTransaction *transaction) { g_autoptr (QueuedScheduleData) data = NULL; dex_return_error_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); dex_return_error_if_fail (self->backend != NULL); dex_return_error_if_fail (BZ_IS_TRANSACTION (transaction)); bz_transaction_hold (transaction); if (self->queue.length > 0) { BzTransaction *to_merge[2] = { 0 }; g_autoptr (BzTransaction) new_transaction = NULL; guint position = 0; data = g_queue_pop_head (&self->queue); g_list_store_find (self->transactions, data->transaction, &position); g_assert (position != G_MAXUINT); to_merge[0] = g_steal_pointer (&data->transaction); to_merge[1] = g_object_ref (transaction); new_transaction = bz_transaction_new_merged (to_merge, G_N_ELEMENTS (to_merge)); g_list_store_splice (self->transactions, position, 1, (gpointer *) &new_transaction, 1); for (guint i = 0; i < G_N_ELEMENTS (to_merge); i++) g_object_unref (to_merge[i]); data->transaction = g_steal_pointer (&new_transaction); } else { data = queued_schedule_data_new (); data->self = bz_track_weak (self); data->transaction = g_object_ref (transaction); data->promise = dex_promise_new_cancellable (); g_list_store_insert (self->transactions, 0, transaction); } g_queue_push_head (&self->queue, queued_schedule_data_ref (data)); if (self->loop == NULL && !self->paused) dex_future_disown (dispatch_next (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_TRANSACTIONS]); return dex_ref (data->promise); } void bz_transaction_manager_cancel_current (BzTransactionManager *self) { g_return_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); if (self->current == NULL) return; dex_promise_reject ( self->current->promise, g_error_new (G_IO_ERROR, G_IO_ERROR_CANCELLED, "Cancelled by API")); g_object_set ( self->current->transaction, "status", "Cancelled", "progress", 1.0, "finished", TRUE, "success", FALSE, "error", "Cancelled by API", NULL); g_clear_pointer (&self->current, queued_schedule_data_unref); dex_clear (&self->loop); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ACTIVE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); } void bz_transaction_manager_clear_finished (BzTransactionManager *self) { guint n_items = 0; gboolean had_items = FALSE; g_return_if_fail (BZ_IS_TRANSACTION_MANAGER (self)); n_items = g_list_model_get_n_items (G_LIST_MODEL (self->transactions)); had_items = n_items > 0; for (guint i = 0; i < n_items;) { g_autoptr (BzTransaction) transaction = NULL; gboolean finished = FALSE; transaction = g_list_model_get_item (G_LIST_MODEL (self->transactions), i); g_object_get (transaction, "finished", &finished, NULL); if (finished) { g_list_store_remove (self->transactions, i); n_items--; } else i++; } if (had_items && n_items == 0) g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_TRANSACTIONS]); } static DexFuture * transaction_fiber (QueuedScheduleData *data) { g_autoptr (BzTransactionManager) self = NULL; BzTransaction *transaction = data->transaction; DexPromise *promise = data->promise; g_autoptr (GError) local_error = NULL; g_autoptr (GListStore) store = NULL; g_autoptr (DexChannel) channel = NULL; g_autoptr (DexFuture) future = NULL; g_autoptr (GHashTable) op_set = NULL; g_autoptr (GHashTable) pending_set = NULL; g_autoptr (GHashTable) errored = NULL; GHashTableIter iter = { 0 }; bz_weak_get_or_return_reject (self, data->self); g_object_set ( transaction, "status", "Starting up...", "progress", 0.0, NULL); self->current_progress = 0.0; self->pending = TRUE; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ACTIVE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_PROGRESS]); store = g_list_store_new (BZ_TYPE_TRANSACTION); g_list_store_append (store, transaction); channel = dex_channel_new (0); future = bz_backend_merge_and_schedule_transactions ( self->backend, G_LIST_MODEL (store), channel, dex_promise_get_cancellable (promise)); op_set = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL); pending_set = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL); for (;;) { g_autoptr (GObject) object = NULL; object = dex_await_object (dex_channel_receive (channel), NULL); if (object == NULL) break; if (BZ_IS_BACKEND_TRANSACTION_OP_PAYLOAD (object)) { if (g_hash_table_contains (op_set, object)) { g_autofree char *error = NULL; error = g_object_steal_data (object, "error"); if (error != NULL) bz_transaction_error_out_task ( transaction, BZ_BACKEND_TRANSACTION_OP_PAYLOAD (object), error); else bz_transaction_finish_task ( transaction, BZ_BACKEND_TRANSACTION_OP_PAYLOAD (object)); g_hash_table_remove (op_set, object); if (g_hash_table_contains (pending_set, object)) { g_hash_table_remove (pending_set, object); self->pending = g_hash_table_size (pending_set) == g_hash_table_size (op_set); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); } } else { bz_transaction_add_task ( transaction, BZ_BACKEND_TRANSACTION_OP_PAYLOAD (object)); g_hash_table_replace (op_set, g_object_ref (object), NULL); } } else if (BZ_IS_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (object)) { const char *status = NULL; gboolean is_estimating = FALSE; double total_progress = 0.0; bz_transaction_update_task ( transaction, BZ_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (object)); status = bz_backend_transaction_op_progress_payload_get_status ( BZ_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (object)); is_estimating = bz_backend_transaction_op_progress_payload_get_is_estimating ( BZ_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (object)); total_progress = bz_backend_transaction_op_progress_payload_get_total_progress ( BZ_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (object)); g_object_set ( transaction, "pending", is_estimating, "status", status, "progress", total_progress, NULL); self->current_progress = total_progress; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_PROGRESS]); if (is_estimating && !g_hash_table_contains (pending_set, object)) { g_hash_table_replace (pending_set, g_object_ref (object), NULL); self->pending = g_hash_table_size (pending_set) == g_hash_table_size (op_set); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); } else if (!is_estimating && g_hash_table_contains (pending_set, object)) { g_hash_table_remove (pending_set, object); self->pending = g_hash_table_size (pending_set) == g_hash_table_size (op_set); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); } } } /* Finish off tasks that may not have received a final update */ g_hash_table_iter_init (&iter, op_set); for (;;) { BzBackendTransactionOpPayload *payload = NULL; gpointer dummy = NULL; if (!g_hash_table_iter_next ( &iter, (gpointer *) &payload, (gpointer *) &dummy)) break; bz_transaction_error_out_task (transaction, payload, "Cancelled"); } errored = dex_await_boxed (g_steal_pointer (&future), &local_error); if (local_error != NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (errored != NULL && g_hash_table_size (errored) > 0) { GHashTableIter errored_iter = { 0 }; gpointer key = NULL; gpointer val = NULL; g_hash_table_iter_init (&errored_iter, errored); g_hash_table_iter_next (&errored_iter, &key, &val); return dex_future_new_for_error (g_error_copy ((GError *) val)); } return dex_future_new_true (); } static DexFuture * transaction_finally (DexFuture *future, QueuedScheduleData *data) { g_autoptr (BzTransactionManager) self = NULL; g_autoptr (GError) local_error = NULL; BzTransaction *transaction = data->transaction; DexPromise *promise = data->promise; GTimer *timer = data->timer; const GValue *value = NULL; g_autofree char *status = NULL; bz_weak_get_or_return_reject (self, data->self); g_timer_stop (timer); status = g_strdup_printf ( _ ("Finished in %.02f seconds"), g_timer_elapsed (data->timer, NULL)); value = dex_future_get_value (future, &local_error); g_object_set ( transaction, "status", status, "progress", 1.0, "success", value != NULL, "error", local_error != NULL ? local_error->message : NULL, "finished", TRUE, NULL); self->current_progress = 1.0; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CURRENT_PROGRESS]); if (value != NULL) { g_signal_emit (self, signals[SIGNAL_SUCCESS], 0, transaction); dex_promise_resolve_boolean (promise, TRUE); } else { g_warning ("Transaction failed to complete: %s", local_error->message); g_signal_emit (self, signals[SIGNAL_FAILURE], 0, transaction); dex_promise_resolve_boolean (promise, FALSE); } return dex_future_new_true (); } static DexFuture * then_loop_cb (DexFuture *future, GWeakRef *wr) { g_autoptr (BzTransactionManager) self = NULL; bz_weak_get_or_return_reject (self, wr); g_clear_pointer (&self->current, queued_schedule_data_unref); return dispatch_next (self); } static DexFuture * dispatch_next (BzTransactionManager *self) { g_autoptr (QueuedScheduleData) data = NULL; g_autoptr (DexFuture) future = NULL; if (self->queue.length == 0 || self->paused) { dex_clear (&self->loop); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ACTIVE]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PENDING]); if (self->queue.length == 0) return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "No more futures in queue"); if (self->paused) return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_UNKNOWN, "Paused"); } if (self->current != NULL) { QueuedScheduleData *peek = NULL; peek = g_queue_peek_head (&self->queue); return dex_ref (peek->promise); } data = g_queue_pop_tail (&self->queue); g_clear_pointer (&data->timer, g_timer_destroy); data->timer = g_timer_new (); future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) transaction_fiber, queued_schedule_data_ref (data), queued_schedule_data_unref); future = dex_future_finally ( future, (DexFutureCallback) transaction_finally, queued_schedule_data_ref (data), queued_schedule_data_unref); future = dex_future_first ( future, dex_ref (data->promise), NULL); self->current = queued_schedule_data_ref (data); if (self->loop == NULL) self->loop = dex_future_then_loop ( dex_ref (future), (DexFutureCallback) then_loop_cb, bz_track_weak (self), bz_weak_release); return dex_ref (future); } static inline void finish_queued_schedule_data (gpointer ptr) { QueuedScheduleData *data = ptr; g_clear_pointer (&data->self, bz_weak_release); if (data->transaction != NULL) bz_transaction_release (data->transaction); g_clear_object (&data->transaction); if (data->promise != NULL && dex_future_is_pending (DEX_FUTURE (data->promise))) dex_promise_reject ( data->promise, g_error_new (G_IO_ERROR, G_IO_ERROR_CANCELLED, "User data was destroyed")); dex_clear (&data->promise); g_clear_pointer (&data->timer, g_timer_destroy); } bazaar-org-bazaar-b6e9a65/src/bz-transaction-manager.h000066400000000000000000000050431522167256300227410ustar00rootroot00000000000000/* bz-transaction-manager.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-backend.h" #include "bz-main-config.h" #include "bz-transaction.h" G_BEGIN_DECLS #define BZ_TRANSACTION_MGR_ERROR (bz_transaction_mgr_error_quark ()) GQuark bz_transaction_mgr_error_quark (void); typedef enum { BZ_TRANSACTION_MGR_ERROR_CANCELLED_BY_HOOK = 0, } BzTransaction_MgrError; #define BZ_TYPE_TRANSACTION_MANAGER (bz_transaction_manager_get_type ()) G_DECLARE_FINAL_TYPE (BzTransactionManager, bz_transaction_manager, BZ, TRANSACTION_MANAGER, GObject) BzTransactionManager * bz_transaction_manager_new (void); void bz_transaction_manager_set_config (BzTransactionManager *self, BzMainConfig *config); BzMainConfig * bz_transaction_manager_get_config (BzTransactionManager *self); void bz_transaction_manager_set_backend (BzTransactionManager *self, BzBackend *backend); BzBackend * bz_transaction_manager_get_backend (BzTransactionManager *self); void bz_transaction_manager_set_paused (BzTransactionManager *self, gboolean paused); gboolean bz_transaction_manager_get_paused (BzTransactionManager *self); gboolean bz_transaction_manager_get_active (BzTransactionManager *self); gboolean bz_transaction_manager_get_pending (BzTransactionManager *self); gboolean bz_transaction_manager_get_has_transactions (BzTransactionManager *self); GListModel * bz_transaction_manager_get_all_trackers (BzTransactionManager *self); G_GNUC_WARN_UNUSED_RESULT DexFuture * bz_transaction_manager_add (BzTransactionManager *self, BzTransaction *transaction); void bz_transaction_manager_cancel_current (BzTransactionManager *self); void bz_transaction_manager_clear_finished (BzTransactionManager *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-transaction-task.txt000066400000000000000000000006561522167256300226660ustar00rootroot00000000000000prefix=bz name=transaction_task parent-prefix=g parent-name=object author=AUTOGEN include="bz-backend-transaction-op-payload.h" include="bz-backend-transaction-op-progress-payload.h" property=op BzBackendTransactionOpPayload BZ_TYPE_BACKEND_TRANSACTION_OP_PAYLOAD object property=last_progress BzBackendTransactionOpProgressPayload BZ_TYPE_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD object property=error char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-transaction-tile.blp000066400000000000000000000325551522167256300226220ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzTransactionTile: $BzListTile { child: Adw.Bin { child: Box { orientation: vertical; Box { orientation: horizontal; spacing: 10; margin-top: 10; margin-bottom: 10; margin-start: 10; margin-end: 4; Image { paintable: bind $get_main_icon(template.tracker) as <$GdkPaintable>; pixel-size: 64; valign: start; halign: start; styles [ "icon-dropshadow", ] } Box { valign: center; orientation: vertical; Label { styles [ "transaction-tile-title", ] hexpand: true; ellipsize: end; xalign: 0.0; label: bind template.tracker as <$BzTransactionEntryTracker>.entry as <$BzEntry>.title as ; } Revealer progress_bars_revealer { reveal-child: bind $list_has_items(template.tracker as <$BzTransactionEntryTracker>.current-ops) as ; transition-type: slide_down; styles [ "no-min-height", ] child: ListView { styles [ "navigation-sidebar", "installed-list-view", "user-data-list-view" ] visible: bind $invert_boolean($is_transaction_tracker_removal(template.tracker) as ) as ; model: NoSelection { model: bind template.tracker as <$BzTransactionEntryTracker>.current-ops; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Box { orientation: vertical; spacing: 3; $BzProgressBar { hexpand: "true"; fraction: bind template.item as <$BzTransactionTask>.last-progress as <$BzBackendTransactionOpProgressPayload>.progress; } Label { styles [ "dimmed", "caption-heading", ] hexpand: true; xalign: 0; ellipsize: end; single-line-mode: true; label: bind $format_download_progress(template.item as <$BzTransactionTask>.last-progress as <$BzBackendTransactionOpProgressPayload>.bytes-transferred, template.item as <$BzTransactionTask>.op as <$BzBackendTransactionOpPayload>.download-size) as ; } }; } }; }; } Revealer { reveal-child: bind progress_bars_revealer.reveal-child inverted; child: Box { orientation: horizontal; layout-manager: Adw.WrapLayout { child-spacing: 4; line-spacing: 0; }; Box { visible: bind $is_entry_addon(template.tracker) as ; halign: start; spacing: 4; margin-top: 8; styles [ "green", "colored", "small-pill", "download-size-pill", ] Image { icon-name: "puzzle-piece-symbolic"; pixel-size: 12; } Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("App Add-On"); } } Box { visible: bind $is_both($is_entry_runtime(template.tracker) as , $invert_boolean($is_entry_addon(template.tracker) as ) as ) as ; halign: start; spacing: 4; margin-top: 8; styles [ "blue", "colored", "small-pill", "download-size-pill", ] Image { icon-name: "application-x-sharedlib-symbolic"; pixel-size: 12; } Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("Runtime"); } } Box { visible: bind $is_queued(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ; halign: start; spacing: 4; margin-top: 8; styles [ "grey", "colored", "small-pill", "download-size-pill", ] Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("In Queue"); } } Box { visible: bind $is_completed(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ; halign: start; spacing: 4; margin-top: 8; styles [ "grey", "colored", "small-pill", "download-size-pill", ] Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("Done"); } } Box { visible: bind $is_cancelled(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ; halign: start; spacing: 4; margin-top: 8; styles [ "grey", "colored", "small-pill", "download-size-pill", ] Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("Cancelled"); } } Box { visible: bind $is_transaction_tracker_errored(template.tracker as <$BzTransactionEntryTracker>.finished-ops) as ; halign: start; spacing: 4; margin-top: 8; styles [ "error", "colored", "small-pill", "download-size-pill", ] Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: _("Error"); } } Box { halign: start; spacing: 4; margin-top: 8; styles [ "installed-pill", "small-pill", "download-size-pill", ] visible: bind $logical_and($is_transaction_tracker_removal(template.tracker) as , $is_completed(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ) as ; Label { styles [ "caption-heading", ] valign: center; xalign: 0.0; label: bind $format_removal_size(template.tracker as <$BzTransactionEntryTracker>.entry as <$BzEntry>.installed-size) as ; } } }; } } Box { orientation: horizontal; spacing: 5; Button { visible: bind $is_both( $is_both( $is_both($is_entry_application(template.tracker as <$BzTransactionEntryTracker>) as , $is_completed(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ) as , $is_transaction_tracker_install(template.tracker as <$BzTransactionEntryTracker>) as ) as , template.tracker as <$BzTransactionEntryTracker>.entry as <$BzEntry>.installed as ) as ; valign: center; label: _("Open"); clicked => $run_cb(template); styles [ "medium-pill", ] } Button { visible: bind $is_ongoing(template.tracker as <$BzTransactionEntryTracker>.status as <$BzTransactionEntryStatus>) as ; icon-name: "media-playback-stop-symbolic"; has-tooltip: true; valign: center; tooltip-text: _("Cancel Transaction"); clicked => $cancel_cb(template); styles [ "flat", ] } ToggleButton toggle { sensitive: bind $invert_boolean($is_empty(template.tracker as <$BzTransactionEntryTracker>.finished-ops) as ) as ; tooltip-text: _("Show Details"); child: Image { pixel-size: 14; icon-name: "go-next-symbolic"; styles [ "accent", ] }; valign: center; styles [ "flat", "circular", "ops-toggle", ] } } } Revealer { reveal-child: bind toggle.active; child: Box { orientation: vertical; styles [ "operations", ] Separator {} ListView { styles [ "navigation-sidebar", "installed-list-view", ] model: NoSelection { model: bind template.tracker as <$BzTransactionEntryTracker>.finished-ops; }; factory: BuilderListItemFactory { template ListItem { activatable: false; child: Box { orientation: horizontal; spacing: 10; margin-start: 7; margin-end: 7; Image { styles [ "success", ] valign: center; icon-name: "check-plain-symbolic"; visible: bind $is_null(template.item as <$BzTransactionTask>.error) as ; } Image { styles [ "error", ] valign: center; icon-name: "cross-large-circle-filled-symbolic"; visible: bind $invert_boolean($is_null(template.item as <$BzTransactionTask>.error) as ) as ; } Box { valign: center; orientation: horizontal; spacing: 5; hexpand: true; Label { styles [ "dimmed", ] valign: center; hexpand: true; xalign: 0.0; ellipsize: end; single-line-mode: true; label: bind template.item as <$BzTransactionTask>.op as <$BzBackendTransactionOpPayload>.name; visible: bind $is_null(template.item as <$BzTransactionTask>.error) as ; } Label { styles [ "error", ] valign: center; hexpand: true; xalign: 0.0; ellipsize: end; single-line-mode: true; label: bind template.item as <$BzTransactionTask>.op as <$BzBackendTransactionOpPayload>.name; visible: bind $invert_boolean($is_null(template.item as <$BzTransactionTask>.error) as ) as ; has-tooltip: true; tooltip-text: bind template.item as <$BzTransactionTask>.error as ; } Button { icon-name: "info-outline-symbolic"; clicked => $error_clicked_cb(template); visible: bind $invert_boolean($is_null(template.item as <$BzTransactionTask>.error) as ) as ; has-tooltip: true; tooltip-text: _("Show Error Info"); styles [ "error", "flat", ] } } }; } }; } }; } }; }; } bazaar-org-bazaar-b6e9a65/src/bz-transaction-tile.c000066400000000000000000000306631522167256300222650ustar00rootroot00000000000000/* bz-transaction-tile.c * * Copyright 2025 Adam Masciola * * 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 */ #include #include "bz-application.h" #include "bz-entry-group.h" #include "bz-entry.h" #include "bz-error-dialog.h" #include "bz-error.h" #include "bz-flatpak-entry.h" #include "bz-list-tile.h" #include "bz-state-info.h" #include "bz-template-callbacks.h" #include "bz-transaction-tile.h" #include "bz-window.h" struct _BzTransactionTile { BzListTile parent_instance; BzTransactionEntryTracker *tracker; }; G_DEFINE_FINAL_TYPE (BzTransactionTile, bz_transaction_tile, BZ_TYPE_LIST_TILE); enum { PROP_0, PROP_TRACKER, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_transaction_tile_dispose (GObject *object) { BzTransactionTile *self = BZ_TRANSACTION_TILE (object); g_clear_pointer (&self->tracker, g_object_unref); G_OBJECT_CLASS (bz_transaction_tile_parent_class)->dispose (object); } static void bz_transaction_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzTransactionTile *self = BZ_TRANSACTION_TILE (object); switch (prop_id) { case PROP_TRACKER: g_value_set_object (value, bz_transaction_tile_get_tracker (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transaction_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzTransactionTile *self = BZ_TRANSACTION_TILE (object); switch (prop_id) { case PROP_TRACKER: bz_transaction_tile_set_tracker (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * format_removal_size (gpointer object, guint64 value) { g_autofree char *size = NULL; size = g_format_size (value); return g_strdup_printf (_ ("%s Freed"), size); } static char * format_download_progress (gpointer object, guint64 bytes_transferred, guint64 total_size) { g_autofree char *downloaded_str = NULL; g_autofree char *total_str = NULL; downloaded_str = g_format_size (bytes_transferred); if (total_size == (guint64) -1) return g_strdup_printf ("%s", downloaded_str); else { total_str = g_format_size (total_size); return g_strdup_printf ("%s / %s", downloaded_str, total_str); } } static gboolean is_transaction_type (gpointer object, BzTransactionEntryTracker *tracker, int type) { if (tracker == NULL) return FALSE; return bz_transaction_entry_tracker_get_kind (tracker) == type; } static gboolean is_transaction_tracker_install (gpointer object, BzTransactionEntryTracker *tracker) { return is_transaction_type (object, tracker, BZ_TRANSACTION_ENTRY_KIND_INSTALL); } static gboolean is_transaction_tracker_update (gpointer object, BzTransactionEntryTracker *tracker) { return is_transaction_type (object, tracker, BZ_TRANSACTION_ENTRY_KIND_UPDATE); } static gboolean is_transaction_tracker_removal (gpointer object, BzTransactionEntryTracker *tracker) { return is_transaction_type (object, tracker, BZ_TRANSACTION_ENTRY_KIND_REMOVAL); } static gboolean is_transaction_tracker_errored (gpointer object, GListModel *finished_ops) { guint n_items = 0; if (finished_ops == NULL) return FALSE; n_items = g_list_model_get_n_items (finished_ops); for (guint i = 0; i < n_items; i++) { g_autoptr (BzTransactionTask) task = NULL; task = g_list_model_get_item (finished_ops, i); if (bz_transaction_task_get_error (task) != NULL) return TRUE; } return FALSE; } static gboolean list_has_items (gpointer object, GListModel *model) { if (model == NULL) return FALSE; return g_list_model_get_n_items (model) > 0; } static gboolean is_queued (gpointer object, BzTransactionEntryStatus status) { return status == BZ_TRANSACTION_ENTRY_STATUS_QUEUED; } static gboolean is_ongoing (gpointer object, BzTransactionEntryStatus status) { return status == BZ_TRANSACTION_ENTRY_STATUS_ONGOING; } static gboolean is_completed (gpointer object, BzTransactionEntryStatus status) { return status == BZ_TRANSACTION_ENTRY_STATUS_DONE; } static gboolean is_cancelled (gpointer object, BzTransactionEntryStatus status) { return status == BZ_TRANSACTION_ENTRY_STATUS_CANCELLED; } static gboolean is_both (gpointer object, gboolean first, gboolean second) { return first && second; } static GdkPaintable * get_main_icon (gpointer object, BzTransactionEntryTracker *tracker) { BzEntry *entry = NULL; GdkPaintable *icon_paintable = NULL; if (tracker == NULL) goto return_generic; entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) goto return_generic; icon_paintable = bz_entry_get_icon_paintable (entry); if (icon_paintable != NULL) return g_object_ref (icon_paintable); return_generic: return (GdkPaintable *) gtk_icon_theme_lookup_icon ( gtk_icon_theme_get_for_display (gdk_display_get_default ()), "application-x-executable", NULL, 64, 1, gtk_widget_get_default_direction (), GTK_ICON_LOOKUP_NONE); } static gboolean is_entry_kind (gpointer object, BzTransactionEntryTracker *tracker, int kind) { BzEntry *entry = NULL; if (tracker == NULL) return FALSE; entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) return FALSE; return bz_entry_is_of_kinds (entry, kind); } static gboolean is_entry_application (gpointer object, BzTransactionEntryTracker *tracker) { return is_entry_kind (object, tracker, BZ_ENTRY_KIND_APPLICATION); } static gboolean is_entry_runtime (gpointer object, BzTransactionEntryTracker *tracker) { return is_entry_kind (object, tracker, BZ_ENTRY_KIND_RUNTIME); } static gboolean is_entry_addon (gpointer object, BzTransactionEntryTracker *tracker) { return is_entry_kind (object, tracker, BZ_ENTRY_KIND_ADDON); } static void run_cb (BzTransactionTile *self, GtkButton *button) { BzTransactionEntryTracker *tracker = NULL; BzEntry *entry = NULL; tracker = bz_transaction_tile_get_tracker (self); if (tracker == NULL) return; entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.launch-group", "s", bz_entry_get_id (entry)); } static void cancel_cb (BzTransactionTile *self, GtkButton *button) { BzTransactionEntryTracker *tracker = NULL; BzEntry *entry = NULL; tracker = bz_transaction_tile_get_tracker (self); if (tracker == NULL) return; entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) return; gtk_widget_activate_action (GTK_WIDGET (self), "window.cancel-group", "s", bz_entry_get_id (entry)); } static void error_clicked_cb (GtkListItem *item, GtkButton *button, BzTransactionTile *self) { BzTransactionTask *task = NULL; const char *error = NULL; const char *name = NULL; BzErrorDialog *dialog = NULL; task = gtk_list_item_get_item (item); if (task == NULL) return; error = bz_transaction_task_get_error (task); if (error == NULL) return; name = bz_backend_transaction_op_payload_get_name ( bz_transaction_task_get_op (task)); if (name != NULL) { g_autofree char *body = NULL; body = g_strdup_printf ("%s: %s", name, error); dialog = bz_error_dialog_new (_ ("Transaction Error"), body); } else dialog = bz_error_dialog_new (_ ("Transaction Error"), error); adw_dialog_present (ADW_DIALOG (dialog), GTK_WIDGET (self)); } static void bz_transaction_tile_class_init (BzTransactionTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->set_property = bz_transaction_tile_set_property; object_class->get_property = bz_transaction_tile_get_property; object_class->dispose = bz_transaction_tile_dispose; props[PROP_TRACKER] = g_param_spec_object ( "tracker", NULL, NULL, BZ_TYPE_TRANSACTION_ENTRY_TRACKER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LIST_TILE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-transaction-tile.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_callback (widget_class, format_removal_size); gtk_widget_class_bind_template_callback (widget_class, format_download_progress); gtk_widget_class_bind_template_callback (widget_class, get_main_icon); gtk_widget_class_bind_template_callback (widget_class, is_entry_application); gtk_widget_class_bind_template_callback (widget_class, is_entry_runtime); gtk_widget_class_bind_template_callback (widget_class, is_entry_addon); gtk_widget_class_bind_template_callback (widget_class, is_transaction_tracker_install); gtk_widget_class_bind_template_callback (widget_class, is_transaction_tracker_update); gtk_widget_class_bind_template_callback (widget_class, is_transaction_tracker_removal); gtk_widget_class_bind_template_callback (widget_class, is_transaction_tracker_errored); gtk_widget_class_bind_template_callback (widget_class, list_has_items); gtk_widget_class_bind_template_callback (widget_class, is_queued); gtk_widget_class_bind_template_callback (widget_class, is_ongoing); gtk_widget_class_bind_template_callback (widget_class, is_completed); gtk_widget_class_bind_template_callback (widget_class, is_cancelled); gtk_widget_class_bind_template_callback (widget_class, is_both); gtk_widget_class_bind_template_callback (widget_class, run_cb); gtk_widget_class_bind_template_callback (widget_class, cancel_cb); gtk_widget_class_bind_template_callback (widget_class, error_clicked_cb); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_transaction_tile_init (BzTransactionTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } BzTransactionTile * bz_transaction_tile_new (void) { return g_object_new (BZ_TYPE_TRANSACTION_TILE, NULL); } BzTransactionEntryTracker * bz_transaction_tile_get_tracker (BzTransactionTile *self) { g_return_val_if_fail (BZ_IS_TRANSACTION_TILE (self), NULL); return self->tracker; } void bz_transaction_tile_set_tracker (BzTransactionTile *self, BzTransactionEntryTracker *tracker) { g_return_if_fail (BZ_IS_TRANSACTION_TILE (self)); g_clear_pointer (&self->tracker, g_object_unref); if (tracker != NULL) self->tracker = g_object_ref (tracker); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRACKER]); } /* End of bz-transaction-tile.c */ bazaar-org-bazaar-b6e9a65/src/bz-transaction-tile.h000066400000000000000000000025111522167256300222610ustar00rootroot00000000000000/* bz-transaction-tile.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-transaction-entry-tracker.h" G_BEGIN_DECLS #define BZ_TYPE_TRANSACTION_TILE (bz_transaction_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzTransactionTile, bz_transaction_tile, BZ, TRANSACTION_TILE, BzListTile) BzTransactionTile * bz_transaction_tile_new (void); BzTransactionEntryTracker * bz_transaction_tile_get_tracker (BzTransactionTile *self); void bz_transaction_tile_set_tracker (BzTransactionTile *self, BzTransactionEntryTracker *tracker); G_END_DECLS /* End of bz-transaction-tile.h */ bazaar-org-bazaar-b6e9a65/src/bz-transaction.c000066400000000000000000000655261522167256300213400ustar00rootroot00000000000000/* bz-transaction.c * * Copyright 2025 Adam Masciola * * 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 */ /* TODO: This file probably needs to be rewritten */ #include "config.h" #include #include "bz-transaction.h" typedef struct { GListStore *installs; GListStore *updates; GListStore *removals; char *name; gboolean pending; GListStore *current_tasks; GListStore *finished_tasks; GListStore *trackers; char *status; double progress; gboolean finished; gboolean success; char *error; } BzTransactionPrivate; G_DEFINE_TYPE_WITH_PRIVATE (BzTransaction, bz_transaction, G_TYPE_OBJECT) enum { PROP_0, PROP_NAME, PROP_INSTALLS, PROP_UPDATES, PROP_REMOVALS, PROP_PENDING, PROP_CURRENT_OPS, PROP_FINISHED_OPS, PROP_TRACKERS, PROP_STATUS, PROP_PROGRESS, PROP_FINISHED, PROP_SUCCESS, PROP_ERROR, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void finish (BzTransactionPrivate *priv); static gboolean find_payload_eq_func (BzTransactionTask *task, gpointer none, BzBackendTransactionOpPayload *payload); static gboolean find_entry_eq_func (BzTransactionEntryTracker *tracker, gpointer none, BzEntry *entry); static gboolean find_and_maybe_transfer (GListStore *from, GListStore *to, gpointer lookup, GEqualFuncFull eql, gpointer *out); static void tracker_update (BzTransactionPrivate *priv, BzBackendTransactionOpPayload *payload, BzBackendTransactionOpProgressPayload *progress_payload, gboolean transfer, gboolean set_done); static void bz_transaction_dispose (GObject *object) { BzTransaction *self = BZ_TRANSACTION (object); BzTransactionPrivate *priv = bz_transaction_get_instance_private (self); g_clear_pointer (&priv->name, g_free); g_clear_object (&priv->installs); g_clear_object (&priv->updates); g_clear_object (&priv->removals); g_clear_object (&priv->current_tasks); g_clear_object (&priv->finished_tasks); g_clear_object (&priv->trackers); g_clear_pointer (&priv->status, g_free); g_clear_pointer (&priv->error, g_free); G_OBJECT_CLASS (bz_transaction_parent_class)->dispose (object); } static void bz_transaction_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzTransaction *self = BZ_TRANSACTION (object); BzTransactionPrivate *priv = bz_transaction_get_instance_private (self); switch (prop_id) { case PROP_NAME: g_value_set_string (value, priv->name); break; case PROP_INSTALLS: g_value_set_object (value, priv->installs); break; case PROP_UPDATES: g_value_set_object (value, priv->updates); break; case PROP_REMOVALS: g_value_set_object (value, priv->removals); break; case PROP_PENDING: g_value_set_boolean (value, priv->pending); break; case PROP_CURRENT_OPS: g_value_set_object (value, priv->current_tasks); break; case PROP_FINISHED_OPS: g_value_set_object (value, priv->finished_tasks); break; case PROP_TRACKERS: g_value_set_object (value, priv->trackers); break; case PROP_STATUS: g_value_set_string (value, priv->status); break; case PROP_PROGRESS: g_value_set_double (value, priv->progress); break; case PROP_FINISHED: g_value_set_boolean (value, priv->finished); break; case PROP_SUCCESS: g_value_set_boolean (value, priv->success); break; case PROP_ERROR: g_value_set_string (value, priv->error); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transaction_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzTransaction *self = BZ_TRANSACTION (object); BzTransactionPrivate *priv = bz_transaction_get_instance_private (self); switch (prop_id) { case PROP_NAME: g_clear_pointer (&priv->name, g_free); priv->name = g_value_dup_string (value); break; case PROP_INSTALLS: g_clear_object (&priv->installs); priv->installs = g_value_dup_object (value); break; case PROP_UPDATES: g_clear_object (&priv->updates); priv->updates = g_value_dup_object (value); break; case PROP_REMOVALS: g_clear_object (&priv->removals); priv->removals = g_value_dup_object (value); break; case PROP_PENDING: priv->pending = g_value_get_boolean (value); break; case PROP_STATUS: g_clear_pointer (&priv->status, g_free); priv->status = g_value_dup_string (value); break; case PROP_PROGRESS: priv->progress = g_value_get_double (value); break; case PROP_FINISHED: priv->finished = g_value_get_boolean (value); if (priv->finished) finish (priv); break; case PROP_SUCCESS: priv->success = g_value_get_boolean (value); break; case PROP_ERROR: g_clear_pointer (&priv->error, g_free); priv->error = g_value_dup_string (value); break; case PROP_CURRENT_OPS: case PROP_FINISHED_OPS: case PROP_TRACKERS: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_transaction_class_init (BzTransactionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = bz_transaction_set_property; object_class->get_property = bz_transaction_get_property; object_class->dispose = bz_transaction_dispose; props[PROP_NAME] = g_param_spec_string ( "name", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_INSTALLS] = g_param_spec_object ( "installs", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_UPDATES] = g_param_spec_object ( "updates", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_REMOVALS] = g_param_spec_object ( "removals", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_PENDING] = g_param_spec_boolean ( "pending", NULL, NULL, TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_CURRENT_OPS] = g_param_spec_object ( "current-ops", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_FINISHED_OPS] = g_param_spec_object ( "finished-ops", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_TRACKERS] = g_param_spec_object ( "trackers", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); props[PROP_STATUS] = g_param_spec_string ( "status", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_PROGRESS] = g_param_spec_double ( "progress", NULL, NULL, 0.0, 1.0, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_FINISHED] = g_param_spec_boolean ( "finished", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_SUCCESS] = g_param_spec_boolean ( "success", NULL, NULL, FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_ERROR] = g_param_spec_string ( "error", NULL, NULL, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_transaction_init (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_autoptr (GDateTime) now = NULL; priv = bz_transaction_get_instance_private (self); now = g_date_time_new_now_local (); priv->name = g_date_time_format (now, "%X"); priv->installs = g_list_store_new (BZ_TYPE_ENTRY); priv->updates = g_list_store_new (BZ_TYPE_ENTRY); priv->removals = g_list_store_new (BZ_TYPE_ENTRY); priv->pending = TRUE; priv->current_tasks = g_list_store_new (BZ_TYPE_TRANSACTION_TASK); priv->finished_tasks = g_list_store_new (BZ_TYPE_TRANSACTION_TASK); priv->trackers = g_list_store_new (BZ_TYPE_TRANSACTION_ENTRY_TRACKER); priv->status = g_strdup (_ ("Pending")); priv->success = TRUE; } BzTransaction * bz_transaction_new_full (BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals) { g_autoptr (BzTransaction) self = NULL; BzTransactionPrivate *priv = NULL; g_return_val_if_fail ((installs != NULL && n_installs > 0) || (updates != NULL && n_updates > 0) || (removals != NULL && n_removals > 0), NULL); for (guint i = 0; i < n_installs; i++) g_return_val_if_fail (BZ_IS_ENTRY (installs[i]), NULL); for (guint i = 0; i < n_updates; i++) g_return_val_if_fail (BZ_IS_ENTRY (updates[i]), NULL); for (guint i = 0; i < n_removals; i++) g_return_val_if_fail (BZ_IS_ENTRY (removals[i]), NULL); self = g_object_new (BZ_TYPE_TRANSACTION, NULL); priv = bz_transaction_get_instance_private (self); #define ADD_ENTRY(type, entry, transaction_type) \ G_STMT_START \ { \ g_autoptr (BzTransactionEntryTracker) tracker = NULL; \ g_autoptr (GListStore) current_ops = NULL; \ g_autoptr (GListStore) finished_ops = NULL; \ \ g_list_store_append (priv->type, (entry)); \ \ tracker = bz_transaction_entry_tracker_new (); \ current_ops = g_list_store_new (BZ_TYPE_TRANSACTION_TASK); \ finished_ops = g_list_store_new (BZ_TYPE_TRANSACTION_TASK); \ \ bz_transaction_entry_tracker_set_entry (tracker, (entry)); \ bz_transaction_entry_tracker_set_current_ops (tracker, G_LIST_MODEL (current_ops)); \ bz_transaction_entry_tracker_set_finished_ops (tracker, G_LIST_MODEL (finished_ops)); \ bz_transaction_entry_tracker_set_kind (tracker, transaction_type); \ bz_transaction_entry_tracker_set_status (tracker, BZ_TRANSACTION_ENTRY_STATUS_QUEUED); \ bz_transaction_entry_tracker_set_pending (tracker, TRUE); \ if ((transaction_type) == BZ_TRANSACTION_ENTRY_KIND_REMOVAL) \ bz_transaction_entry_tracker_set_active (tracker, TRUE); \ \ g_list_store_append (priv->trackers, tracker); \ } \ G_STMT_END for (guint i = 0; i < n_installs; i++) ADD_ENTRY (installs, installs[i], BZ_TRANSACTION_ENTRY_KIND_INSTALL); for (guint i = 0; i < n_updates; i++) ADD_ENTRY (updates, updates[i], BZ_TRANSACTION_ENTRY_KIND_UPDATE); for (guint i = 0; i < n_removals; i++) ADD_ENTRY (removals, removals[i], BZ_TRANSACTION_ENTRY_KIND_REMOVAL); #undef ADD_ENTRY return g_steal_pointer (&self); } BzTransaction * bz_transaction_new_merged (BzTransaction **transactions, guint n_transactions) { g_autoptr (GPtrArray) installs_pa = NULL; g_autoptr (GPtrArray) updates_pa = NULL; g_autoptr (GPtrArray) removals_pa = NULL; g_return_val_if_fail (transactions != NULL, NULL); g_return_val_if_fail (n_transactions >= 2, NULL); installs_pa = g_ptr_array_new_with_free_func (g_object_unref); updates_pa = g_ptr_array_new_with_free_func (g_object_unref); removals_pa = g_ptr_array_new_with_free_func (g_object_unref); for (guint i = 0; i < n_transactions; i++) { GListModel *installs = NULL; GListModel *updates = NULL; GListModel *removals = NULL; guint n_installs = 0; guint n_updates = 0; guint n_removals = 0; installs = bz_transaction_get_installs (transactions[i]); updates = bz_transaction_get_updates (transactions[i]); removals = bz_transaction_get_removals (transactions[i]); if (installs != NULL) n_installs = g_list_model_get_n_items (installs); if (updates != NULL) n_updates = g_list_model_get_n_items (updates); if (removals != NULL) n_removals = g_list_model_get_n_items (removals); for (guint j = 0; j < n_installs; j++) g_ptr_array_add (installs_pa, g_list_model_get_item (installs, j)); for (guint j = 0; j < n_updates; j++) g_ptr_array_add (updates_pa, g_list_model_get_item (updates, j)); for (guint j = 0; j < n_removals; j++) g_ptr_array_add (removals_pa, g_list_model_get_item (removals, j)); } return bz_transaction_new_full ( (BzEntry **) installs_pa->pdata, installs_pa->len, (BzEntry **) updates_pa->pdata, updates_pa->len, (BzEntry **) removals_pa->pdata, removals_pa->len); } GListModel * bz_transaction_get_installs (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_TRANSACTION (self), NULL); priv = bz_transaction_get_instance_private (self); return G_LIST_MODEL (priv->installs); } GListModel * bz_transaction_get_updates (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_TRANSACTION (self), NULL); priv = bz_transaction_get_instance_private (self); return G_LIST_MODEL (priv->updates); } GListModel * bz_transaction_get_removals (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_TRANSACTION (self), NULL); priv = bz_transaction_get_instance_private (self); return G_LIST_MODEL (priv->removals); } GListModel * bz_transaction_get_trackers (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_val_if_fail (BZ_IS_TRANSACTION (self), NULL); priv = bz_transaction_get_instance_private (self); return G_LIST_MODEL (priv->trackers); } void bz_transaction_hold (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_if_fail (BZ_IS_TRANSACTION (self)); priv = bz_transaction_get_instance_private (self); #define HOLD_MODEL(_model) \ if ((_model) != NULL) \ { \ guint n_items = 0; \ \ n_items = g_list_model_get_n_items (G_LIST_MODEL ((_model))); \ for (guint i = 0; i < n_items; i++) \ { \ g_autoptr (BzEntry) entry = NULL; \ \ entry = g_list_model_get_item (G_LIST_MODEL ((_model)), i); \ bz_entry_hold (entry); \ } \ } HOLD_MODEL (priv->installs); HOLD_MODEL (priv->updates); HOLD_MODEL (priv->removals); #undef HOLD_MODEL } void bz_transaction_release (BzTransaction *self) { BzTransactionPrivate *priv = NULL; g_return_if_fail (BZ_IS_TRANSACTION (self)); priv = bz_transaction_get_instance_private (self); #define RELEASE_MODEL(_model) \ if ((_model) != NULL) \ { \ guint n_items = 0; \ \ n_items = g_list_model_get_n_items (G_LIST_MODEL ((_model))); \ for (guint i = 0; i < n_items; i++) \ { \ g_autoptr (BzEntry) entry = NULL; \ \ entry = g_list_model_get_item (G_LIST_MODEL ((_model)), i); \ bz_entry_release (entry); \ } \ } RELEASE_MODEL (priv->installs); RELEASE_MODEL (priv->updates); RELEASE_MODEL (priv->removals); #undef RELEASE_MODEL } void bz_transaction_add_task (BzTransaction *self, BzBackendTransactionOpPayload *payload) { BzTransactionPrivate *priv = NULL; g_autoptr (BzTransactionTask) task = NULL; BzEntry *entry = NULL; g_autoptr (BzTransactionEntryTracker) tracker = NULL; gboolean result = FALSE; g_return_if_fail (BZ_IS_TRANSACTION (self)); g_return_if_fail (BZ_IS_BACKEND_TRANSACTION_OP_PAYLOAD (payload)); priv = bz_transaction_get_instance_private (self); task = bz_transaction_task_new (); bz_transaction_task_set_op (task, payload); g_list_store_append (priv->current_tasks, task); entry = bz_backend_transaction_op_payload_get_entry (payload); result = find_and_maybe_transfer ( priv->trackers, NULL, entry, (GEqualFuncFull) find_entry_eq_func, (gpointer *) &tracker); if (result) { GListModel *current_ops = NULL; if (bz_transaction_entry_tracker_get_kind (tracker) == BZ_TRANSACTION_ENTRY_KIND_UPDATE) bz_backend_transaction_op_payload_set_download_size (payload, (guint64) -1); current_ops = bz_transaction_entry_tracker_get_current_ops (tracker); g_list_store_append (G_LIST_STORE (current_ops), task); g_object_notify (G_OBJECT (tracker), "current-ops"); } } void bz_transaction_update_task (BzTransaction *self, BzBackendTransactionOpProgressPayload *payload) { BzTransactionPrivate *priv = NULL; BzBackendTransactionOpPayload *op = NULL; g_autoptr (BzTransactionTask) task = NULL; gboolean result = FALSE; g_return_if_fail (BZ_IS_TRANSACTION (self)); g_return_if_fail (BZ_IS_BACKEND_TRANSACTION_OP_PROGRESS_PAYLOAD (payload)); priv = bz_transaction_get_instance_private (self); op = bz_backend_transaction_op_progress_payload_get_op (payload); result = find_and_maybe_transfer ( priv->current_tasks, NULL, op, (GEqualFuncFull) find_payload_eq_func, (gpointer *) &task); if (result) bz_transaction_task_set_last_progress (task, payload); tracker_update (priv, op, payload, FALSE, FALSE); } void bz_transaction_finish_task (BzTransaction *self, BzBackendTransactionOpPayload *payload) { BzTransactionPrivate *priv = NULL; g_return_if_fail (BZ_IS_TRANSACTION (self)); g_return_if_fail (BZ_IS_BACKEND_TRANSACTION_OP_PAYLOAD (payload)); priv = bz_transaction_get_instance_private (self); find_and_maybe_transfer ( priv->current_tasks, priv->finished_tasks, payload, (GEqualFuncFull) find_payload_eq_func, NULL); tracker_update (priv, payload, NULL, TRUE, FALSE); } void bz_transaction_error_out_task (BzTransaction *self, BzBackendTransactionOpPayload *payload, const char *message) { BzTransactionPrivate *priv = NULL; gboolean result = FALSE; g_autoptr (BzTransactionTask) task = NULL; g_return_if_fail (BZ_IS_TRANSACTION (self)); g_return_if_fail (BZ_IS_BACKEND_TRANSACTION_OP_PAYLOAD (payload)); g_return_if_fail (message != NULL); priv = bz_transaction_get_instance_private (self); result = find_and_maybe_transfer ( priv->current_tasks, priv->finished_tasks, payload, (GEqualFuncFull) find_payload_eq_func, (gpointer *) &task); if (result) bz_transaction_task_set_error (task, message); tracker_update (priv, payload, NULL, TRUE, TRUE); } static void finish (BzTransactionPrivate *priv) { guint n_trackers = 0; n_trackers = g_list_model_get_n_items (G_LIST_MODEL (priv->trackers)); for (guint i = 0; i < n_trackers; i++) { g_autoptr (BzTransactionEntryTracker) tracker = NULL; tracker = g_list_model_get_item (G_LIST_MODEL (priv->trackers), i); bz_transaction_entry_tracker_set_active (tracker, FALSE); bz_transaction_entry_tracker_set_pending (tracker, FALSE); if (bz_transaction_entry_tracker_get_status (tracker) == BZ_TRANSACTION_ENTRY_STATUS_CANCELLED) continue; bz_transaction_entry_tracker_set_status ( tracker, priv->success ? BZ_TRANSACTION_ENTRY_STATUS_DONE : BZ_TRANSACTION_ENTRY_STATUS_CANCELLED); } } static gboolean find_payload_eq_func (BzTransactionTask *task, gpointer none, BzBackendTransactionOpPayload *payload) { return bz_transaction_task_get_op (task) == payload; } static gboolean find_entry_eq_func (BzTransactionEntryTracker *tracker, gpointer none, BzEntry *entry) { return bz_transaction_entry_tracker_get_entry (tracker) == entry; } /* This kinda sucks */ static gboolean find_and_maybe_transfer (GListStore *from, GListStore *to, gpointer lookup, GEqualFuncFull eql, gpointer *out) { guint op_pos = 0; gboolean found = FALSE; g_autoptr (GObject) object = NULL; found = g_list_store_find_with_equal_func_full (from, NULL, eql, lookup, &op_pos); if (!found) return FALSE; object = g_list_model_get_item (G_LIST_MODEL (from), op_pos); if (to != NULL) { /* transfer if `to` is provided */ g_list_store_remove (from, op_pos); g_list_store_append (to, object); } if (out != NULL) *out = g_steal_pointer (&object); return TRUE; } static void tracker_update (BzTransactionPrivate *priv, BzBackendTransactionOpPayload *payload, BzBackendTransactionOpProgressPayload *progress_payload, gboolean transfer, gboolean set_done) { BzEntry *entry = NULL; g_autoptr (BzTransactionEntryTracker) tracker = NULL; gboolean result = FALSE; entry = bz_backend_transaction_op_payload_get_entry (payload); result = find_and_maybe_transfer ( priv->trackers, NULL, entry, (GEqualFuncFull) find_entry_eq_func, (gpointer *) &tracker); if (result) { BzTransactionEntryStatus existing_status = 0; existing_status = bz_transaction_entry_tracker_get_status (tracker); if (transfer) { GListModel *from = NULL; GListModel *to = NULL; if (set_done) { bz_transaction_entry_tracker_set_active (tracker, FALSE); bz_transaction_entry_tracker_set_status (tracker, BZ_TRANSACTION_ENTRY_STATUS_DONE); bz_transaction_entry_tracker_set_pending (tracker, FALSE); } from = bz_transaction_entry_tracker_get_current_ops (tracker); to = bz_transaction_entry_tracker_get_finished_ops (tracker); result = find_and_maybe_transfer ( G_LIST_STORE (from), G_LIST_STORE (to), payload, (GEqualFuncFull) find_payload_eq_func, NULL); g_object_notify (G_OBJECT (tracker), "current-ops"); g_object_notify (G_OBJECT (tracker), "finished-ops"); } else { if (progress_payload != NULL) { double progress = 0.0; double scaled = 0.0; gboolean estimating = FALSE; progress = bz_backend_transaction_op_progress_payload_get_total_progress (progress_payload); scaled = progress >= 1.0 ? 1.0 : progress * 0.9; estimating = bz_backend_transaction_op_progress_payload_get_is_estimating (progress_payload); g_object_set (tracker, "progress", scaled, "pending", estimating && progress == 0.0, NULL); } bz_transaction_entry_tracker_set_active (tracker, TRUE); if (existing_status != BZ_TRANSACTION_ENTRY_STATUS_CANCELLED) bz_transaction_entry_tracker_set_status (tracker, BZ_TRANSACTION_ENTRY_STATUS_ONGOING); } } } bazaar-org-bazaar-b6e9a65/src/bz-transaction.h000066400000000000000000000047451522167256300213410ustar00rootroot00000000000000/* bz-transaction.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include "bz-entry.h" #include "bz-transaction-entry-tracker.h" #include "bz-transaction-task.h" G_BEGIN_DECLS #define BZ_TYPE_TRANSACTION (bz_transaction_get_type ()) G_DECLARE_DERIVABLE_TYPE (BzTransaction, bz_transaction, BZ, TRANSACTION, GObject) struct _BzTransactionClass { GObjectClass parent_class; }; BzTransaction * bz_transaction_new_full (BzEntry **installs, guint n_installs, BzEntry **updates, guint n_updates, BzEntry **removals, guint n_removals); BzTransaction * bz_transaction_new_merged (BzTransaction **transactions, guint n_transactions); GListModel * bz_transaction_get_installs (BzTransaction *self); GListModel * bz_transaction_get_updates (BzTransaction *self); GListModel * bz_transaction_get_removals (BzTransaction *self); GListModel * bz_transaction_get_trackers (BzTransaction *self); void bz_transaction_hold (BzTransaction *self); void bz_transaction_release (BzTransaction *self); void bz_transaction_add_task (BzTransaction *self, BzBackendTransactionOpPayload *payload); void bz_transaction_update_task (BzTransaction *self, BzBackendTransactionOpProgressPayload *payload); void bz_transaction_finish_task (BzTransaction *self, BzBackendTransactionOpPayload *payload); void bz_transaction_error_out_task (BzTransaction *self, BzBackendTransactionOpPayload *payload, const char *message); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-updates-card.blp000066400000000000000000000015271522167256300217110ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzUpdatesCard: Adw.Bin { child: ListBox { selection-mode: none; margin-start: 4; margin-end: 4; margin-bottom: 4; styles [ "boxed-list", ] Adw.ExpanderRow expander_row { title: bind $format_update_count(template.state as <$BzStateInfo>.available-updates) as ; notify::expanded => $on_expander_expanded_cb(); [suffix] Box { height-request: 60; Button { label: _("_Update All"); use-underline: true; valign: center; clicked => $update_all_cb(); styles [ "suggested-action", ] } } } }; } FilterListModel runtimes_filter_model { filter: CustomFilter runtimes_filter {}; model: bind template.state as <$BzStateInfo>.available-updates; }bazaar-org-bazaar-b6e9a65/src/bz-updates-card.c000066400000000000000000000361351522167256300213610ustar00rootroot00000000000000/* bz-updates-card.c * * Copyright 2026 Alexander Vanhee * * 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 */ #include "config.h" #include #include "bz-entry.h" #include "bz-release.h" #include "bz-releases-list.h" #include "bz-template-callbacks.h" #include "bz-updates-card.h" struct _BzUpdatesCard { AdwBin parent_instance; BzStateInfo *state; /* Template widgets */ AdwExpanderRow *expander_row; GtkCustomFilter *runtimes_filter; GtkFilterListModel *runtimes_filter_model; GPtrArray *app_rows; GtkWidget *runtimes_row; gboolean has_closed; }; G_DEFINE_FINAL_TYPE (BzUpdatesCard, bz_updates_card, ADW_TYPE_BIN) enum { PROP_0, PROP_STATE, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; enum { SIGNAL_UPDATE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL]; static char *format_update_count (gpointer object, GListModel *updates); static void update_all_cb (GtkButton *button, BzUpdatesCard *self); static void update_runtimes_cb (GtkButton *button, BzUpdatesCard *self); static void on_expander_expanded_cb (AdwExpanderRow *row, GParamSpec *pspec, BzUpdatesCard *self); static gboolean filter_runtimes (BzEntry *entry, BzUpdatesCard *self); static void on_available_updates_changed (BzUpdatesCard *self, GParamSpec *pspec, BzStateInfo *state); static void on_runtimes_changed (GtkFilterListModel *model, guint position, guint removed, guint added, BzUpdatesCard *self); static void on_update_single_cb (GtkButton *button, BzEntry *entry) { BzUpdatesCard *self = NULL; g_autoptr (GListStore) store = NULL; self = BZ_UPDATES_CARD (gtk_widget_get_ancestor (GTK_WIDGET (button), BZ_TYPE_UPDATES_CARD)); store = g_list_store_new (BZ_TYPE_ENTRY); g_list_store_append (store, entry); g_signal_emit (self, signals[SIGNAL_UPDATE], 0, store); } static void on_version_history_cb (GtkButton *button, BzEntry *entry) { GtkRoot *root = NULL; g_autoptr (GListModel) history = NULL; GtkWidget *dialog = NULL; root = gtk_widget_get_root (GTK_WIDGET (button)); if (root == NULL) return; g_object_get (entry, "version-history", &history, NULL); dialog = bz_releases_dialog_new (history, NULL); adw_dialog_present (ADW_DIALOG (dialog), GTK_WIDGET (root)); } static GtkWidget * build_app_row (BzEntry *entry, BzUpdatesCard *self) { AdwActionRow *row = NULL; GtkWidget *icon = NULL; GtkWidget *history_button = NULL; GtkWidget *update_button = NULL; GdkPaintable *paintable = NULL; g_autoptr (GListModel) history = NULL; g_autofree char *installed_ver = NULL; const char *new_ver = NULL; // This will probably the same as the installed version if using cache... g_autofree char *subtitle = NULL; row = ADW_ACTION_ROW (adw_action_row_new ()); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), bz_entry_get_title (entry)); g_object_get (entry, "icon-paintable", &paintable, NULL); icon = paintable != NULL ? gtk_image_new_from_paintable (paintable) : gtk_image_new_from_icon_name ("application-x-executable"); g_clear_object (&paintable); gtk_image_set_pixel_size (GTK_IMAGE (icon), 48); gtk_widget_set_size_request (icon, 48, 48); gtk_widget_set_margin_top (icon, 6); gtk_widget_set_margin_bottom (icon, 6); gtk_widget_set_valign (icon, GTK_ALIGN_CENTER); gtk_widget_add_css_class (icon, "icon-dropshadow"); adw_action_row_add_prefix (row, icon); g_object_get (entry, "version-history", &history, "installed-version", &installed_ver, NULL); if (history != NULL && g_list_model_get_n_items (history) > 0 && installed_ver != NULL) { g_autoptr (BzRelease) first = g_list_model_get_item (history, 0); new_ver = bz_release_get_version (first); if (new_ver != NULL) { if (g_strcmp0 (installed_ver, new_ver) != 0) subtitle = g_strdup_printf ("%s → %s", installed_ver, new_ver); else subtitle = g_strdup (new_ver); adw_action_row_set_subtitle (row, subtitle); } } history_button = gtk_button_new_from_icon_name ("view-list-bullet-symbolic"); gtk_widget_set_valign (history_button, GTK_ALIGN_CENTER); gtk_widget_set_tooltip_text (history_button, _ ("Version History")); gtk_widget_add_css_class (history_button, "flat"); gtk_widget_set_visible (history_button, history != NULL && g_list_model_get_n_items (history) > 0); g_signal_connect_data (history_button, "clicked", G_CALLBACK (on_version_history_cb), g_object_ref (entry), (GClosureNotify) g_object_unref, 0); adw_action_row_add_suffix (row, history_button); update_button = gtk_button_new_with_label (_ ("Update")); gtk_widget_set_valign (update_button, GTK_ALIGN_CENTER); g_signal_connect_data (update_button, "clicked", G_CALLBACK (on_update_single_cb), g_object_ref (entry), (GClosureNotify) g_object_unref, 0); adw_action_row_add_suffix (row, update_button); return GTK_WIDGET (row); } static GtkWidget * build_runtimes_row (BzUpdatesCard *self) { AdwActionRow *row = NULL; GtkWidget *update_button = NULL; row = ADW_ACTION_ROW (adw_action_row_new ()); gtk_widget_set_visible (GTK_WIDGET (row), FALSE); update_button = gtk_button_new_with_label (_ ("Update")); gtk_widget_set_valign (update_button, GTK_ALIGN_CENTER); g_signal_connect (update_button, "clicked", G_CALLBACK (update_runtimes_cb), self); adw_action_row_add_suffix (row, update_button); return GTK_WIDGET (row); } static void on_runtimes_changed (GtkFilterListModel *model, guint position, guint removed, guint added, BzUpdatesCard *self) { guint n_items = 0; g_autofree char *title = NULL; if (self->runtimes_row == NULL) return; n_items = g_list_model_get_n_items (G_LIST_MODEL (model)); gtk_widget_set_visible (self->runtimes_row, n_items > 0); if (n_items == 0) return; title = g_strdup_printf (ngettext ("%u Runtime Update", "%u Runtime Updates", n_items), n_items); adw_preferences_row_set_title (ADW_PREFERENCES_ROW (self->runtimes_row), title); } static void repopulate_expander_row (BzUpdatesCard *self) { GListModel *updates = NULL; guint n_items = 0; guint i = 0; for (i = 0; i < self->app_rows->len; i++) adw_expander_row_remove (self->expander_row, g_ptr_array_index (self->app_rows, i)); g_ptr_array_set_size (self->app_rows, 0); if (self->runtimes_row != NULL) { adw_expander_row_remove (self->expander_row, self->runtimes_row); self->runtimes_row = NULL; } if (self->state == NULL) return; updates = bz_state_info_get_available_updates (self->state); if (updates == NULL) return; n_items = g_list_model_get_n_items (updates); for (i = 0; i < n_items; i++) { g_autoptr (BzEntry) entry = NULL; GtkWidget *row = NULL; entry = g_list_model_get_item (updates, i); if (entry == NULL || !BZ_IS_ENTRY (entry)) continue; if (!bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_APPLICATION)) continue; row = build_app_row (entry, self); adw_expander_row_add_row (self->expander_row, row); g_ptr_array_add (self->app_rows, row); } self->runtimes_row = build_runtimes_row (self); adw_expander_row_add_row (self->expander_row, self->runtimes_row); on_runtimes_changed (self->runtimes_filter_model, 0, 0, 0, self); if (!self->has_closed) adw_expander_row_set_expanded (self->expander_row, n_items <= 3); } static void on_available_updates_changed (BzUpdatesCard *self, GParamSpec *pspec, BzStateInfo *state) { gtk_filter_changed (GTK_FILTER (self->runtimes_filter), GTK_FILTER_CHANGE_DIFFERENT); repopulate_expander_row (self); } static void bz_updates_card_dispose (GObject *object) { BzUpdatesCard *self = BZ_UPDATES_CARD (object); g_clear_object (&self->state); g_clear_pointer (&self->app_rows, g_ptr_array_unref); gtk_widget_dispose_template (GTK_WIDGET (self), BZ_TYPE_UPDATES_CARD); G_OBJECT_CLASS (bz_updates_card_parent_class)->dispose (object); } static void bz_updates_card_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzUpdatesCard *self = BZ_UPDATES_CARD (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, bz_updates_card_get_state (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_updates_card_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzUpdatesCard *self = BZ_UPDATES_CARD (object); switch (prop_id) { case PROP_STATE: bz_updates_card_set_state (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_updates_card_class_init (BzUpdatesCardClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_updates_card_dispose; object_class->get_property = bz_updates_card_get_property; object_class->set_property = bz_updates_card_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); signals[SIGNAL_UPDATE] = g_signal_new ( "update", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_LIST_MODEL); g_signal_set_va_marshaller ( signals[SIGNAL_UPDATE], G_TYPE_FROM_CLASS (klass), g_cclosure_marshal_VOID__OBJECTv); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-updates-card.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzUpdatesCard, expander_row); gtk_widget_class_bind_template_child (widget_class, BzUpdatesCard, runtimes_filter); gtk_widget_class_bind_template_child (widget_class, BzUpdatesCard, runtimes_filter_model); gtk_widget_class_bind_template_callback (widget_class, format_update_count); gtk_widget_class_bind_template_callback (widget_class, update_all_cb); gtk_widget_class_bind_template_callback (widget_class, on_expander_expanded_cb); } static void bz_updates_card_init (BzUpdatesCard *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->app_rows = g_ptr_array_new (); gtk_custom_filter_set_filter_func ( self->runtimes_filter, (GtkCustomFilterFunc) filter_runtimes, self, NULL); g_signal_connect (self->runtimes_filter_model, "items-changed", G_CALLBACK (on_runtimes_changed), self); } GtkWidget * bz_updates_card_new (void) { return g_object_new (BZ_TYPE_UPDATES_CARD, NULL); } void bz_updates_card_set_state (BzUpdatesCard *self, BzStateInfo *state) { g_return_if_fail (BZ_IS_UPDATES_CARD (self)); g_return_if_fail (state == NULL || BZ_IS_STATE_INFO (state)); g_clear_object (&self->state); if (state != NULL) { self->state = g_object_ref (state); g_signal_connect_object (state, "notify::available-updates", G_CALLBACK (on_available_updates_changed), self, G_CONNECT_SWAPPED); } gtk_filter_changed (GTK_FILTER (self->runtimes_filter), GTK_FILTER_CHANGE_DIFFERENT); repopulate_expander_row (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]); } BzStateInfo * bz_updates_card_get_state (BzUpdatesCard *self) { g_return_val_if_fail (BZ_IS_UPDATES_CARD (self), NULL); return self->state; } static char * format_update_count (gpointer object, GListModel *updates) { guint n_updates = 0; if (updates == NULL) return g_strdup (""); n_updates = g_list_model_get_n_items (updates); return g_strdup_printf (ngettext ("%u Available Update", "%u Available Updates", n_updates), n_updates); } static void update_all_cb (GtkButton *button, BzUpdatesCard *self) { GListModel *updates = NULL; g_return_if_fail (GTK_IS_BUTTON (button)); g_return_if_fail (BZ_IS_UPDATES_CARD (self)); if (self->state == NULL) return; updates = bz_state_info_get_available_updates (self->state); if (updates == NULL) return; g_signal_emit (self, signals[SIGNAL_UPDATE], 0, updates); } static void update_runtimes_cb (GtkButton *button, BzUpdatesCard *self) { GListModel *runtimes = NULL; g_autoptr (GListStore) store = NULL; guint n_items = 0; runtimes = G_LIST_MODEL (self->runtimes_filter_model); n_items = g_list_model_get_n_items (runtimes); if (n_items == 0) return; store = g_list_store_new (BZ_TYPE_ENTRY); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntry) entry = g_list_model_get_item (runtimes, i); if (entry != NULL) g_list_store_append (store, entry); } g_signal_emit (self, signals[SIGNAL_UPDATE], 0, store); } static void on_expander_expanded_cb (AdwExpanderRow *row, GParamSpec *pspec, BzUpdatesCard *self) { if (!adw_expander_row_get_expanded (row)) self->has_closed = TRUE; } static gboolean filter_runtimes (BzEntry *entry, BzUpdatesCard *self) { g_return_val_if_fail (BZ_IS_ENTRY (entry), FALSE); return bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_RUNTIME) || bz_entry_is_of_kinds (entry, BZ_ENTRY_KIND_ADDON); } bazaar-org-bazaar-b6e9a65/src/bz-updates-card.h000066400000000000000000000022621522167256300213600ustar00rootroot00000000000000/* bz-updates-card.h * * Copyright 2026 Alexander Vanhee * * 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 */ #pragma once #include "bz-state-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_UPDATES_CARD (bz_updates_card_get_type ()) G_DECLARE_FINAL_TYPE (BzUpdatesCard, bz_updates_card, BZ, UPDATES_CARD, AdwBin) GtkWidget * bz_updates_card_new (void); void bz_updates_card_set_state (BzUpdatesCard *self, BzStateInfo *state); BzStateInfo * bz_updates_card_get_state (BzUpdatesCard *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-url.txt000066400000000000000000000002221522167256300201700ustar00rootroot00000000000000prefix=bz name=url parent-prefix=g parent-name=object author=AUTOGEN property=id char G_TYPE_STRING string property=url char G_TYPE_STRING string bazaar-org-bazaar-b6e9a65/src/bz-user-data-page.blp000066400000000000000000000040761522167256300221360ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzUserDataPage: Adw.NavigationPage { title: _("Manage Leftover User Data"); Adw.ToolbarView { [top] Adw.HeaderBar {} content: Adw.BreakpointBin { width-request: 360; height-request: 450; child: Adw.ViewStack stack { enable-transitions: true; transition-duration: 400; Adw.ViewStackPage { name: "loading"; title: _("Loading"); child:Adw.Spinner { halign: fill; valign: center; width-request: 64; height-request: 64; margin-bottom: 18; }; } Adw.ViewStackPage { name: "empty"; title: _("Empty"); child: Adw.StatusPage { icon-name: "folder-documents-symbolic"; title: _("No User Data Found"); }; } Adw.ViewStackPage { name: "content"; title: _("User Data"); child: ScrolledWindow { hscrollbar-policy: never; child: Adw.ClampScrollable { maximum-size: 650; child: ListView list_view { styles [ "navigation-sidebar", "user-data-list-view" ] margin-start: 25; margin-end: 25; overflow: visible; model: NoSelection { model: bind template.model; }; factory: BuilderListItemFactory { template ListItem { activatable: false; selectable: false; focusable: false; child: $BzUserDataTile { group: bind template.item as <$BzEntryGroup>; }; } }; }; }; }; } }; Adw.Breakpoint { condition ("max-width: 700px") setters { list_view.margin-start: 0; list_view.margin-end: 0; } } }; } } bazaar-org-bazaar-b6e9a65/src/bz-user-data-page.c000066400000000000000000000211161522167256300215750ustar00rootroot00000000000000/* bz-user-data-page.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include #include "bz-application-map-factory.h" #include "bz-env.h" #include "bz-io.h" #include "bz-user-data-page.h" #include "bz-user-data-tile.h" #include "bz-util.h" struct _BzUserDataPage { AdwNavigationPage parent_instance; BzStateInfo *state; GListModel *model; /* Template widgets */ AdwViewStack *stack; }; G_DEFINE_FINAL_TYPE (BzUserDataPage, bz_user_data_page, ADW_TYPE_NAVIGATION_PAGE) enum { PROP_0, PROP_STATE, PROP_MODEL, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static DexFuture * fetch_user_data_fiber (GWeakRef *wr); static void items_changed (BzUserDataPage *self, guint position, guint removed, guint added, GListModel *model); static void set_page (BzUserDataPage *self); static void bz_user_data_page_dispose (GObject *object) { BzUserDataPage *self = BZ_USER_DATA_PAGE (object); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_clear_object (&self->model); g_clear_object (&self->state); G_OBJECT_CLASS (bz_user_data_page_parent_class)->dispose (object); } static void bz_user_data_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzUserDataPage *self = BZ_USER_DATA_PAGE (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, self->state); break; case PROP_MODEL: g_value_set_object (value, self->model); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_user_data_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzUserDataPage *self = BZ_USER_DATA_PAGE (object); switch (prop_id) { case PROP_STATE: self->state = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_user_data_page_constructed (GObject *object) { BzUserDataPage *self = BZ_USER_DATA_PAGE (object); g_autoptr (DexFuture) future = NULL; G_OBJECT_CLASS (bz_user_data_page_parent_class)->constructed (object); future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) fetch_user_data_fiber, bz_track_weak (self), bz_weak_release); dex_future_disown (g_steal_pointer (&future)); } static gboolean is_zero (gpointer object, int value) { return value == 0; } static void bz_user_data_page_class_init (BzUserDataPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_user_data_page_dispose; object_class->constructed = bz_user_data_page_constructed; object_class->get_property = bz_user_data_page_get_property; object_class->set_property = bz_user_data_page_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_USER_DATA_TILE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-user-data-page.ui"); gtk_widget_class_bind_template_child (widget_class, BzUserDataPage, stack); gtk_widget_class_bind_template_callback (widget_class, is_zero); } static void bz_user_data_page_init (BzUserDataPage *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_user_data_page_new (BzStateInfo *state) { return g_object_new (BZ_TYPE_USER_DATA_PAGE, "state", state, NULL); } static void items_changed (BzUserDataPage *self, guint position, guint removed, guint added, GListModel *model) { set_page (self); } static void set_page (BzUserDataPage *self) { if (self->model != NULL && g_list_model_get_n_items (G_LIST_MODEL (self->model)) > 0) adw_view_stack_set_visible_child_name (self->stack, "content"); else adw_view_stack_set_visible_child_name (self->stack, "empty"); } static int compare_entry_groups_by_title (BzEntryGroup *group_a, BzEntryGroup *group_b) { const char *title_a = bz_entry_group_get_title (group_a); const char *title_b = bz_entry_group_get_title (group_b); return g_utf8_collate (title_a, title_b); } static DexFuture * fetch_user_data_fiber (GWeakRef *wr) { g_autoptr (BzUserDataPage) self = NULL; g_autoptr (GHashTable) ids_hash = NULL; g_autoptr (GError) local_error = NULL; GHashTableIter iter = { 0 }; g_autoptr (GtkStringList) id_list = NULL; BzApplicationMapFactory *factory = NULL; g_autoptr (GListModel) model = NULL; g_autoptr (GListStore) sorted_store = NULL; GListModel *installed_groups = NULL; g_autoptr (GHashTable) installed_ids = NULL; guint n_items; self = g_weak_ref_get (wr); if (self == NULL) return dex_future_new_reject (G_IO_ERROR, G_IO_ERROR_CANCELLED, "Page destroyed"); installed_groups = bz_state_info_get_all_installed_entry_groups (self->state); installed_ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); if (installed_groups != NULL) { guint n_installed = g_list_model_get_n_items (installed_groups); for (guint i = 0; i < n_installed; i++) { g_autoptr (BzEntryGroup) group = NULL; const char *id = NULL; group = g_list_model_get_item (installed_groups, i); id = bz_entry_group_get_id (group); if (id != NULL) g_hash_table_replace (installed_ids, g_strdup (id), NULL); } } ids_hash = dex_await_boxed ( bz_get_user_data_ids_dex (), &local_error); if (ids_hash == NULL) { g_warning ("Failed to enumerate user data directories: %s", local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } id_list = gtk_string_list_new (NULL); g_hash_table_iter_init (&iter, ids_hash); for (;;) { char *app_id = NULL; if (!g_hash_table_iter_next (&iter, (gpointer *) &app_id, NULL)) break; if (!g_hash_table_contains (installed_ids, app_id)) gtk_string_list_append (id_list, app_id); } factory = bz_state_info_get_application_factory (self->state); model = bz_application_map_factory_generate (factory, G_LIST_MODEL (id_list)); sorted_store = g_list_store_new (BZ_TYPE_ENTRY_GROUP); n_items = g_list_model_get_n_items (model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntryGroup) group = g_list_model_get_item (model, i); g_list_store_append (sorted_store, group); } g_list_store_sort (sorted_store, (GCompareDataFunc) compare_entry_groups_by_title, NULL); if (self->model != NULL) g_signal_handlers_disconnect_by_func (self->model, items_changed, self); g_clear_object (&self->model); self->model = G_LIST_MODEL (g_steal_pointer (&sorted_store)); g_signal_connect_swapped (self->model, "items-changed", G_CALLBACK (items_changed), self); set_page (self); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODEL]); return dex_future_new_true (); } bazaar-org-bazaar-b6e9a65/src/bz-user-data-page.h000066400000000000000000000020761522167256300216060ustar00rootroot00000000000000/* bz-user-data-page.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-state-info.h" #include G_BEGIN_DECLS #define BZ_TYPE_USER_DATA_PAGE (bz_user_data_page_get_type ()) G_DECLARE_FINAL_TYPE (BzUserDataPage, bz_user_data_page, BZ, USER_DATA_PAGE, AdwNavigationPage) GtkWidget * bz_user_data_page_new (BzStateInfo *state); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-user-data-tile.blp000066400000000000000000000050641522167256300221550ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $BzUserDataTile: Adw.Bin { child: Revealer { transition-type: slide_down; reveal-child: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.user-data-size) as ) as ; child: Adw.Bin { accessibility { labelled-by: title_label; described-by: description_label; } margin-bottom: 4; margin-start: 4; margin-end: 4; margin-top: 4; styles [ "card", ] child: Box { orientation: horizontal; spacing: 10; Picture icon_picture { margin-start: 10; margin-top: 10; margin-bottom: 10; height-request: 48; width-request: 48; paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable; visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable) as ) as ; styles ["icon-dropshadow"] } Image fallback_icon { margin-start: 10; margin-top: 10; margin-bottom: 10; height-request: 48; width-request: 48; pixel-size: 48; icon-name: "application-x-executable"; visible: bind $is_null(template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable) as ; styles ["icon-dropshadow"] } Box { orientation: vertical; valign: center; spacing: 4; Label title_label { xalign: 0.0; ellipsize: end; single-line-mode: true; has-tooltip: true; tooltip-text: bind template.group as <$BzEntryGroup>.id; label: bind template.group as <$BzEntryGroup>.title; } Label description_label { halign: start; label: bind $format_size(template.group as <$BzEntryGroup>.user-data-size as ) as ; styles ["accent", "caption-heading"] } } Button remove_button { styles [ "flat", "destructive-action", ] hexpand: true; halign: end; width-request: 32; height-request: 32; valign: center; margin-end: 16; has-tooltip: true; tooltip-text: _("Trash User Data"); icon-name: "user-trash-symbolic"; clicked => $remove_cb() swapped; } }; }; }; } bazaar-org-bazaar-b6e9a65/src/bz-user-data-tile.c000066400000000000000000000147371522167256300216310ustar00rootroot00000000000000/* bz-user-data-tile.c * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #include #include "bz-entry-group.h" #include "bz-env.h" #include "bz-error.h" #include "bz-state-info.h" #include "bz-user-data-page.h" #include "bz-user-data-tile.h" #include "bz-util.h" #include "bz-window.h" struct _BzUserDataTile { BzListTile parent_instance; BzEntryGroup *group; GtkPicture *icon_picture; GtkImage *fallback_icon; GtkLabel *title_label; GtkButton *remove_button; }; G_DEFINE_FINAL_TYPE (BzUserDataTile, bz_user_data_tile, ADW_TYPE_BIN) enum { PROP_0, PROP_GROUP, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_user_data_tile_dispose (GObject *object) { BzUserDataTile *self = BZ_USER_DATA_TILE (object); g_clear_object (&self->group); G_OBJECT_CLASS (bz_user_data_tile_parent_class)->dispose (object); } static void bz_user_data_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzUserDataTile *self = BZ_USER_DATA_TILE (object); switch (prop_id) { case PROP_GROUP: g_value_set_object (value, bz_user_data_tile_get_group (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_user_data_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzUserDataTile *self = BZ_USER_DATA_TILE (object); switch (prop_id) { case PROP_GROUP: bz_user_data_tile_set_group (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean invert_boolean (gpointer object, gboolean value) { return !value; } static gboolean is_null (gpointer object, GObject *value) { return value == NULL; } static gboolean is_zero (gpointer object, int value) { return value == 0; } static char * format_size (gpointer object, guint64 value) { return g_format_size (value); } static DexFuture * reap_user_data_done (DexFuture *future, GWeakRef *wr) { g_autoptr (BzUserDataTile) self = NULL; g_autoptr (GError) local_error = NULL; dex_future_get_value (future, &local_error); self = g_weak_ref_get (wr); if (self == NULL) return dex_future_new_true (); if (local_error != NULL) bz_show_error_for_widget ( GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))), _ ("Failed to Remove User Data"), local_error->message); else { g_autofree char *message = NULL; message = g_strdup_printf (_ ("Trashed User Data for %s"), bz_entry_group_get_title (self->group)); bz_window_add_toast ( BZ_WINDOW (gtk_widget_get_root (GTK_WIDGET (self))), adw_toast_new (message)); } return dex_future_new_true (); } static void remove_cb (BzUserDataTile *self, GtkButton *button) { g_autoptr (DexFuture) future = NULL; if (self->group == NULL) return; future = bz_entry_group_reap_user_data (self->group); if (future != NULL) dex_future_disown (dex_future_finally ( dex_ref (future), (DexFutureCallback) reap_user_data_done, bz_track_weak (self), bz_weak_release)); } static void bz_user_data_tile_class_init (BzUserDataTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_user_data_tile_dispose; object_class->get_property = bz_user_data_tile_get_property; object_class->set_property = bz_user_data_tile_set_property; props[PROP_GROUP] = g_param_spec_object ( "group", NULL, NULL, BZ_TYPE_ENTRY_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_LIST_TILE); g_type_ensure (BZ_TYPE_ENTRY_GROUP); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-user-data-tile.ui"); gtk_widget_class_bind_template_child (widget_class, BzUserDataTile, icon_picture); gtk_widget_class_bind_template_child (widget_class, BzUserDataTile, fallback_icon); gtk_widget_class_bind_template_child (widget_class, BzUserDataTile, title_label); gtk_widget_class_bind_template_child (widget_class, BzUserDataTile, remove_button); gtk_widget_class_bind_template_callback (widget_class, invert_boolean); gtk_widget_class_bind_template_callback (widget_class, is_null); gtk_widget_class_bind_template_callback (widget_class, is_zero); gtk_widget_class_bind_template_callback (widget_class, format_size); gtk_widget_class_bind_template_callback (widget_class, remove_cb); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); } static void bz_user_data_tile_init (BzUserDataTile *self) { gtk_widget_init_template (GTK_WIDGET (self)); } GtkWidget * bz_user_data_tile_new (void) { return g_object_new (BZ_TYPE_USER_DATA_TILE, NULL); } void bz_user_data_tile_set_group (BzUserDataTile *self, BzEntryGroup *group) { g_return_if_fail (BZ_IS_USER_DATA_TILE (self)); g_return_if_fail (group == NULL || BZ_IS_ENTRY_GROUP (group)); g_clear_object (&self->group); if (group != NULL) self->group = g_object_ref (group); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_GROUP]); } BzEntryGroup * bz_user_data_tile_get_group (BzUserDataTile *self) { g_return_val_if_fail (BZ_IS_USER_DATA_TILE (self), NULL); return self->group; } bazaar-org-bazaar-b6e9a65/src/bz-user-data-tile.h000066400000000000000000000023631522167256300216260ustar00rootroot00000000000000/* bz-user-data-tile.h * * Copyright 2025 Adam Masciola, Alexander Vanhee * * 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 */ #pragma once #include "bz-entry-group.h" #include "bz-list-tile.h" #include G_BEGIN_DECLS #define BZ_TYPE_USER_DATA_TILE (bz_user_data_tile_get_type ()) G_DECLARE_FINAL_TYPE (BzUserDataTile, bz_user_data_tile, BZ, USER_DATA_TILE, AdwBin) GtkWidget * bz_user_data_tile_new (void); void bz_user_data_tile_set_group (BzUserDataTile *self, BzEntryGroup *group); BzEntryGroup * bz_user_data_tile_get_group (BzUserDataTile *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-util.h000066400000000000000000000214741522167256300177670ustar00rootroot00000000000000/* bz-util.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #define bz_maybe(_ptr, _func) ((_ptr) != NULL ? (_func) ((_ptr)) : NULL) #define bz_maybe_strdup(_ptr) bz_maybe (_ptr, g_strdup) #define bz_maybe_ref(_ptr, _ref) ((typeof (_ptr)) bz_maybe (_ptr, _ref)) #define bz_object_maybe_ref(_obj) bz_maybe_ref ((_obj), g_object_ref) #define bz_dex_maybe_ref(_obj) bz_maybe_ref ((_obj), dex_ref) #define BZ_RELEASE_DATA(name, unref) \ if ((unref) != NULL) \ { \ g_clear_pointer (&self->name, (unref)); \ } #define BZ_RELEASE_UTAG(name, remove) \ if ((remove) != NULL) \ { \ g_clear_handle_id (&self->name, (remove)); \ } /* va args = releases */ #define BZ_DEFINE_DATA(name, Name, layout, ...) \ typedef struct _##Name##Data Name##Data; \ struct _##Name##Data \ { \ gatomicrefcount rc; \ struct layout; \ }; \ G_GNUC_UNUSED \ static inline Name##Data * \ name##_data_new (void) \ { \ Name##Data *data = NULL; \ data = g_new0 (typeof (*data), 1); \ g_atomic_ref_count_init (&data->rc); \ return data; \ } \ G_GNUC_UNUSED \ static inline Name##Data * \ name##_data_ref (gpointer ptr) \ { \ Name##Data *self = ptr; \ g_atomic_ref_count_inc (&self->rc); \ return self; \ } \ G_GNUC_UNUSED \ static void \ name##_data_deinit (gpointer ptr) \ { \ Name##Data *self = ptr; \ __VA_ARGS__ \ } \ G_GNUC_UNUSED \ static void \ name##_data_unref (gpointer ptr) \ { \ Name##Data *self = ptr; \ if (g_atomic_ref_count_dec (&self->rc)) \ { \ name##_data_deinit (self); \ g_free (self); \ } \ } \ G_GNUC_UNUSED \ static void \ name##_data_unref_closure (gpointer data, \ GClosure *closure) \ { \ name##_data_unref (data); \ } \ G_DEFINE_AUTOPTR_CLEANUP_FUNC (Name##Data, name##_data_unref); /* Be careful with deadlocks */ typedef DexFuture BzGuard; static inline void bz_guard_destroy (BzGuard *guard) { if (dex_future_is_pending (guard)) dex_promise_resolve_boolean (DEX_PROMISE (guard), TRUE); dex_unref (guard); } G_DEFINE_AUTOPTR_CLEANUP_FUNC (BzGuard, bz_guard_destroy); #define bz_clear_guard(_pp) g_clear_pointer (_pp, bz_guard_destroy) #define BZ_BEGIN_GUARD_WITH_CONTEXT(_guard, _mutex, _gate) \ G_STMT_START \ { \ g_autoptr (GMutexLocker) _locker = NULL; \ g_autoptr (DexFuture) _wait = NULL; \ \ _locker = g_mutex_locker_new (_mutex); \ if (*(_guard) == NULL) \ *(_guard) = (DexFuture *) dex_promise_new (); \ if (*(_gate) != NULL) \ { \ if (dex_future_is_pending (*(_gate))) \ _wait = g_steal_pointer (_gate); \ else \ dex_clear (_gate); \ } \ *(_gate) = dex_ref (*(_guard)); \ g_clear_pointer (&_locker, g_mutex_locker_free); \ \ if (_wait != NULL) \ dex_await (g_steal_pointer (&_wait), NULL); \ } \ G_STMT_END #define BZ_BEGIN_GUARD(_guard) \ G_STMT_START \ { \ static GMutex _mutex = { 0 }; \ static BzGuard *_gate = NULL; \ BZ_BEGIN_GUARD_WITH_CONTEXT (_guard, &_mutex, &_gate); \ } \ G_STMT_END /* Use with dex_scheduler_spawn */ G_GNUC_UNUSED static GWeakRef * bz_track_weak (gpointer object) { GWeakRef *wr = NULL; if (object == NULL) return NULL; wr = g_new0 (typeof (*wr), 1); g_weak_ref_init (wr, object); return wr; } G_GNUC_UNUSED static void bz_weak_release (gpointer ptr) { GWeakRef *wr = ptr; g_weak_ref_clear (wr); g_free (wr); } #define bz_weak_get_or_return(self, wr) \ G_STMT_START \ { \ (self) = g_weak_ref_get (wr); \ if ((self) == NULL) \ return; \ } \ G_STMT_END #define bz_weak_get_or_return_reject(self, wr) \ G_STMT_START \ { \ (self) = g_weak_ref_get (wr); \ if ((self) == NULL) \ return dex_future_new_reject ( \ G_IO_ERROR, \ G_IO_ERROR_CANCELLED, \ "Object was discarded"); \ } \ G_STMT_END G_GNUC_UNUSED static void _bz_debug_print_when_disposed_cb (gpointer ptr); BZ_DEFINE_DATA ( _bz_debug_dispose_cb, _BzDebugDisposeCb, { GType type; const char *loc; guint64 time; }, _bz_debug_print_when_disposed_cb (self);) G_GNUC_UNUSED static void _bz_debug_print_when_disposed_cb (gpointer ptr) { _BzDebugDisposeCbData *data = ptr; g_print ("%zu OBJECT DISPOSE: type %s; from %s at %zu\n", g_get_monotonic_time (), g_type_name (data->type), data->loc, data->time); } #define BZ_DEBUG_PRINT_WHEN_DISPOSED(_object) \ G_STMT_START \ { \ g_autoptr (_BzDebugDisposeCbData) _data = NULL; \ \ _data = _bz_debug_dispose_cb_data_new (); \ _data->type = G_OBJECT_TYPE (_object); \ _data->loc = G_STRLOC; \ _data->time = g_get_monotonic_time (); \ \ g_object_set_data_full ( \ G_OBJECT (_object), \ "BZ_DEBUG_PRINT_WHEN_DISPOSED", \ _bz_debug_dispose_cb_data_ref (_data), \ _bz_debug_dispose_cb_data_unref); \ } \ G_STMT_END bazaar-org-bazaar-b6e9a65/src/bz-verification-status.txt000066400000000000000000000006511522167256300233770ustar00rootroot00000000000000prefix=bz name=verification_status parent-prefix=g parent-name=object author=AUTOGEN property=verified gboolean G_TYPE_BOOLEAN boolean property=method char G_TYPE_STRING string property=website char G_TYPE_STRING string property=login_name char G_TYPE_STRING string property=login_provider char G_TYPE_STRING string property=timestamp char G_TYPE_STRING string property=login_is_organization gboolean G_TYPE_BOOLEAN boolean bazaar-org-bazaar-b6e9a65/src/bz-window.blp000066400000000000000000000272701522167256300206470ustar00rootroot00000000000000using Gtk 4.0; using Gio 2.0; using Gdk 4.0; using Adw 1; template $BzWindow: Adw.ApplicationWindow { title: bind $format_title(navigation_view.visible-page as .title); default-width: 1220; default-height: 900; width-request: 360; height-request: 294; ShortcutController { Shortcut { trigger: "Escape"; action: "action(escape)"; } Shortcut { trigger: "Back"; action: "action(escape)"; } Shortcut { trigger: "BackSpace"; action: "action(escape)"; } Shortcut { trigger: "g"; action: "action(escape)"; } } content: Gtk.Overlay window_overlay { child: Adw.ToolbarView { content: Adw.BreakpointBin split_breakpoint_bin { width-request: 360; height-request: 450; child: Adw.ToastOverlay toasts { child: Adw.NavigationView navigation_view { pop-on-escape: false; Adw.NavigationPage { tag: "main"; title: _("Bazaar"); child: Adw.ToolbarView toolbar_view { top-bar-style: flat; bottom-bar-style: flat; reveal-bottom-bars: false; content: Stack main_stack { StackPage { name: "loading"; child: Box { halign: fill; valign: center; orientation: vertical; spacing: 6; tooltip-text: bind template.state as <$BzStateInfo>.background-task-label; Adw.Spinner { width-request: 64; height-request: 64; margin-bottom: 18; } Label { label: _("Refreshing"); wrap: true; justify: center; margin-bottom: 24; styles [ "title-3", ] } }; } StackPage { name: "main"; child: Adw.ViewStack main_view_stack { Adw.ViewStackPage { name: "browse"; title: _("Curated"); icon-name: "star-outline-rounded-symbolic"; visible: bind template.state as <$BzStateInfo>.curated-provider as <$BzContentProvider>.has-inputs; child: $BzCuratedView browse { state: bind template.state as <$BzStateInfo>; browse-flathub => $browse_flathub_cb(template); }; } Adw.ViewStackPage { name: "flathub"; title: _("Explore"); icon-name: "explore-symbolic"; child: $BzFlathubPage { state: bind template.state as <$BzStateInfo>; open-search => $open_search_cb(template); }; } Adw.ViewStackPage { name: "installed"; // Translators: . title: _("Library"); icon-name: "library-symbolic"; badge-number: bind template.state as <$BzStateInfo>.available-updates as .n-items; needs-attention: bind template.state as <$BzStateInfo>.available-updates as .n-items; child: $BzLibraryPage library_page { state: bind template.state; transactions: bind template.state as <$BzStateInfo>.transaction-manager; model: bind template.state as <$BzStateInfo>.all-installed-entry-groups; update => $update_cb(template); }; } Adw.ViewStackPage { name: "search"; title: _("Search"); icon-name: "system-search-symbolic"; child: $BzSearchPage search_page { state: bind template.state; }; } }; } }; [top] Box { orientation: vertical; Adw.HeaderBar top_header_bar { [start] Box { styles [ "bz-debug", ] orientation: horizontal; spacing: 6; visible: bind template.state as <$BzStateInfo>.debug-mode; Button { has-tooltip: true; tooltip-text: "Open Bazaar Inspector"; icon-name: "bug-symbolic"; action-name: "app.bazaar-inspector"; } } [start] MenuButton { visible: bind template.state as <$BzStateInfo>.auth-state as <$BzAuthState>.authenticated; menu-model: account_menu; styles [ "circular", "flat", ] child: Adw.Avatar { size: 24; show-initials: true; text: bind template.state as <$BzStateInfo>.auth-state as <$BzAuthState>.name; custom-image: bind try { $choose(template.state as <$BzStateInfo>.auth-state as <$BzAuthState>.paintable as <$BzAsyncTexture>.loaded, template.state as <$BzStateInfo>.auth-state as <$BzAuthState>.paintable , null as ), null as }; }; } [start] Revealer { transition-type: crossfade; transition-duration: 750; margin-start: 8; reveal-child: bind $logical_and($invert_boolean(template.state as <$BzStateInfo>.busy) as , $invert_boolean($is_null(template.state as <$BzStateInfo>.background-task-label) as ) as ) as ; child: Adw.Spinner { width-request: 16; height-request: 16; has-tooltip: true; tooltip-text: bind template.state as <$BzStateInfo>.background-task-label; }; } [title] Box { Adw.ViewSwitcher { stack: main_view_stack; policy: wide; visible: bind $invert_boolean(template.state as <$BzStateInfo>.busy) as ; } Label { label: _("Bazaar"); visible: bind template.state as <$BzStateInfo>.busy as ; styles [ "title", ] } } [end] MenuButton { primary: true; icon-name: "open-menu-symbolic"; has-tooltip: true; tooltip-text: _("Main Menu"); menu-model: primary_menu; } } Adw.Banner { styles [ "bz-donations-banner", ] revealed: bind $invert_boolean(template.state as <$BzStateInfo>.donation-prompt-dismissed as ) as ; title: _("You are running a new version of Bazaar!"); button-label: _("See What's New"); action-name: "app.donate"; } Adw.Banner { sensitive: bind $invert_boolean(template.state as <$BzStateInfo>.syncing as ) as ; revealed: bind $logical_and($invert_boolean(template.state as <$BzStateInfo>.metered_connection as ) as , $logical_and(template.state as <$BzStateInfo>.have_connection as , $invert_boolean(template.state as <$BzStateInfo>.online as ) as ) as ) as ; title: _("You have a network connection but are viewing a cached version of Flathub"); button-label: _("Refresh Manually"); button-clicked => $sync_cb(template); } Adw.Banner { sensitive: bind $invert_boolean(template.state as <$BzStateInfo>.syncing as ) as ; revealed: bind $logical_and( $invert_boolean(template.state as <$BzStateInfo>.recently-synced as ) as , $logical_and(template.state as <$BzStateInfo>.metered_connection as , template.state as <$BzStateInfo>.have_connection as ) as ) as ; title: _("Network connection is metered — automatic refreshes disabled"); button-label: _("Refresh Manually"); button-clicked => $sync_cb(template); } } [bottom] Adw.ViewSwitcherBar { stack: main_view_stack; reveal: true; visible: bind $invert_boolean(template.state as <$BzStateInfo>.busy) as ; } }; } Adw.NavigationPage { tag: "view"; title: bind full_view.entry-group as <$BzEntryGroup>.title as ; child: $BzFullView full_view { state: bind template.state; update => $update_cb(template); }; } }; }; Adw.Breakpoint { condition ("max-width: 700px") setters { top_header_bar.title-widget: null; toolbar_view.reveal-bottom-bars: true; } apply => $breakpoint_apply_cb(template); unapply => $breakpoint_unapply_cb(template); } }; }; }; } menu primary_menu { section { item { label: _("_Donate to Bazaar"); action: "app.donate"; } } section { item { label: _("_Refresh"); action: "app.sync-remotes"; } item { label: _("_Login With Flathub"); action: "app.flathub-login"; hidden-when: "action-disabled"; } item { label: _("_Manage Leftover User Data"); action: "window.user-data"; } } section { item { label: _("_Preferences"); action: "app.preferences"; } item { label: _("_Keyboard Shortcuts"); action: "app.shortcuts"; } item { label: _("_About Bazaar"); action: "app.about"; } } section { item { label: _("_Quit Bazaar"); action: "app.quit"; } } } menu debug_menu { section { item { label: "Open Bazaar Inspector"; action: "app.bazaar-inspector"; } } } menu account_menu { section { item { label: _("Favorites"); action: "app.flathub-favorites"; } } section { item { label: _("Log Out"); action: "app.flathub-logout"; } } } bazaar-org-bazaar-b6e9a65/src/bz-window.c000066400000000000000000001164271522167256300203170ustar00rootroot00000000000000/* bz-window.c * * Copyright 2025 Adam Masciola * * 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 */ // This file is an utter mess #include "config.h" #include #include "bz-addons-dialog.h" #include "bz-application.h" #include "bz-curated-view.h" #include "bz-entry-group-util.h" #include "bz-entry-group.h" #include "bz-env.h" #include "bz-error.h" #include "bz-flathub-page.h" #include "bz-flatpak-entry.h" #include "bz-full-view.h" #include "bz-hooks.h" #include "bz-io.h" #include "bz-library-page.h" #include "bz-progress-bar.h" #include "bz-screenshot-page.h" #include "bz-search-page.h" #include "bz-template-callbacks.h" #include "bz-transaction-dialog.h" #include "bz-transaction-manager.h" #include "bz-user-data-page.h" #include "bz-util.h" #include "bz-window.h" struct _BzWindow { AdwApplicationWindow parent_instance; BzStateInfo *state; GtkEventController *key_controller; BzScreenshotPage *screenshot_page; gboolean breakpoint_applied; /* Template widgets */ AdwNavigationView *navigation_view; BzFullView *full_view; BzSearchPage *search_page; BzLibraryPage *library_page; AdwToastOverlay *toasts; AdwViewStack *main_view_stack; GtkStack *main_stack; GtkOverlay *window_overlay; }; G_DEFINE_FINAL_TYPE (BzWindow, bz_window, ADW_TYPE_APPLICATION_WINDOW) enum { PROP_0, PROP_STATE, PROP_COMPACT, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; BZ_DEFINE_DATA ( transact, Transact, { GWeakRef *self; BzEntry *entry; BzEntryGroup *group; gboolean remove; gboolean auto_confirm; GtkWidget *source; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (entry, g_object_unref); BZ_RELEASE_DATA (group, g_object_unref); BZ_RELEASE_DATA (source, g_object_unref)) static DexFuture * transact_fiber (TransactData *data); BZ_DEFINE_DATA ( bulk_install, BulkInstall, { GWeakRef *self; GListModel *groups; }, BZ_RELEASE_DATA (self, bz_weak_release); BZ_RELEASE_DATA (groups, g_object_unref)) static DexFuture * bulk_install_fiber (BulkInstallData *data); static DexFuture * transact (BzEntry *entry, gboolean remove, GtkWidget *source); static void try_transact (BzWindow *self, BzEntry *entry, BzEntryGroup *group, gboolean remove, gboolean auto_confirm, GtkWidget *source); static void search (BzWindow *self, const char *text); static void bulk_install (BzWindow *self, BzEntry **installs, guint n_installs); static void set_page (BzWindow *self); static void emit_hook_disown (BzWindow *self, BzHookSignal signal, BzEntryGroup *group); static void bz_window_dispose (GObject *object) { BzWindow *self = BZ_WINDOW (object); g_clear_object (&self->state); G_OBJECT_CLASS (bz_window_parent_class)->dispose (object); } static void bz_window_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzWindow *self = BZ_WINDOW (object); switch (prop_id) { case PROP_STATE: g_value_set_object (value, self->state); break; case PROP_COMPACT: g_value_set_boolean (value, self->breakpoint_applied); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_window_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { // BzWindow *self = BZ_WINDOW (object); switch (prop_id) { case PROP_STATE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static char * list_length (gpointer object, GListModel *model) { if (model == NULL) return g_strdup (0); return g_strdup_printf ("%u", g_list_model_get_n_items (model)); } static void update_cb (BzWindow *self, GListModel *entries, GtkWidget *widget) { g_autoptr (BzTransaction) transaction = NULL; guint n_updates = 0; g_autofree BzEntry **updates_buf = NULL; GListModel *available_updates = NULL; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (G_IS_LIST_MODEL (entries)); n_updates = g_list_model_get_n_items (entries); if (n_updates == 0) return; updates_buf = g_malloc_n (n_updates, sizeof (*updates_buf)); for (guint i = 0; i < n_updates; i++) updates_buf[i] = g_list_model_get_item (entries, i); transaction = bz_transaction_new_full ( NULL, 0, updates_buf, n_updates, NULL, 0); dex_future_disown (bz_transaction_manager_add ( bz_state_info_get_transaction_manager (self->state), transaction)); available_updates = bz_state_info_get_available_updates (self->state); if (G_IS_LIST_STORE (available_updates)) { GListStore *store = G_LIST_STORE (available_updates); guint n_available = g_list_model_get_n_items (available_updates); for (guint i = n_available; i > 0; i--) { guint current_size = 0; guint idx = 0; g_autoptr (BzEntry) available_entry = NULL; const char *available_id = NULL; idx = i - 1; current_size = g_list_model_get_n_items (available_updates); if (idx >= current_size) continue; available_entry = g_list_model_get_item (available_updates, idx); available_id = bz_entry_get_id (available_entry); for (guint j = 0; j < n_updates; j++) { if (g_strcmp0 (available_id, bz_entry_get_id (updates_buf[j])) == 0) { g_list_store_remove (store, idx); break; } } } } g_object_notify (G_OBJECT (self->state), "available-updates"); for (guint i = 0; i < n_updates; i++) g_object_unref (updates_buf[i]); } void bz_window_show_app_id (BzWindow *self, const char *app_id) { g_autoptr (BzEntryGroup) group = NULL; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (app_id != NULL); group = bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (app_id)); if (group != NULL) bz_window_show_group (self, group); } static void page_toggled_cb (BzWindow *self, GParamSpec *pspec, AdwToggleGroup *toggles) { set_page (self); } static void browse_flathub_cb (BzWindow *self, BzCuratedView *widget) { adw_view_stack_set_visible_child_name (self->main_view_stack, "flathub"); } static void open_search_cb (BzWindow *self, BzSearchPage *widget) { adw_view_stack_set_visible_child_name (self->main_view_stack, "search"); } static void breakpoint_apply_cb (BzWindow *self, AdwBreakpoint *breakpoint) { self->breakpoint_applied = TRUE; gtk_widget_add_css_class (GTK_WIDGET (self), "narrow"); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COMPACT]); } static void breakpoint_unapply_cb (BzWindow *self, AdwBreakpoint *breakpoint) { self->breakpoint_applied = FALSE; gtk_widget_remove_css_class (GTK_WIDGET (self), "narrow"); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COMPACT]); } static void sync_cb (BzWindow *self, GtkButton *button) { g_action_group_activate_action ( G_ACTION_GROUP (g_application_get_default ()), "sync-remotes", NULL); } static void transactions_clear_cb (BzWindow *self, GtkButton *button) { bz_transaction_manager_clear_finished ( bz_state_info_get_transaction_manager (self->state)); } static void action_escape (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); GListModel *stack = NULL; guint n_pages = 0; if (self->screenshot_page != NULL) { if (!bz_screenshot_page_is_closing (self->screenshot_page)) { bz_screenshot_page_close (self->screenshot_page); return; } } stack = adw_navigation_view_get_navigation_stack (self->navigation_view); n_pages = g_list_model_get_n_items (stack); adw_navigation_view_pop (self->navigation_view); if (n_pages <= 2) set_page (self); } static char * format_progress (gpointer object, double value) { return g_strdup_printf ("%.0f%%", 100.0 * value); } static char * format_title (gpointer object, const char *title) { if (title == NULL || *title == '\0' || g_strcmp0 (title, _ ("Bazaar")) == 0) return g_strdup (_ ("Bazaar")); /* Translators: %s is the title of the current page */ return g_strdup_printf (_ ("Bazaar — %s"), title); } static BzEntryGroup * resolve_group_from_parameter (BzWindow *self, GVariant *parameter, gboolean *auto_confirm) { const char *id = NULL; g_variant_get (parameter, "(&sb)", &id, auto_confirm); return bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (id)); } static void action_install_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); g_autoptr (BzEntryGroup) group = NULL; gboolean auto_confirm = FALSE; group = resolve_group_from_parameter (self, parameter, &auto_confirm); if (group != NULL) try_transact (self, NULL, group, FALSE, auto_confirm, NULL); } static void action_remove_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); g_autoptr (BzEntryGroup) group = NULL; gboolean auto_confirm = FALSE; group = resolve_group_from_parameter (self, parameter, &auto_confirm); if (group != NULL) try_transact (self, NULL, group, TRUE, auto_confirm, NULL); } static void action_cancel_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); const char *id = NULL; BzTransactionManager *manager = NULL; BzBackend *backend = NULL; GListModel *trackers = NULL; guint n_items = 0; id = g_variant_get_string (parameter, NULL); manager = bz_state_info_get_transaction_manager (self->state); if (manager == NULL) return; backend = bz_state_info_get_backend (self->state); if (backend == NULL) return; trackers = bz_transaction_manager_get_all_trackers (manager); n_items = g_list_model_get_n_items (trackers); for (guint i = 0; i < n_items; i++) { g_autoptr (BzTransactionEntryTracker) tracker = NULL; BzEntry *entry = NULL; const char *entry_id = NULL; tracker = g_list_model_get_item (trackers, i); entry = bz_transaction_entry_tracker_get_entry (tracker); if (entry == NULL) continue; entry_id = bz_entry_get_id (entry); if (g_strcmp0 (entry_id, id) == 0) { if (bz_backend_cancel_task_for_entry (backend, entry)) g_object_set (tracker, "status", BZ_TRANSACTION_ENTRY_STATUS_CANCELLED, NULL); break; } } } static void action_show_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); const char *id = NULL; g_autoptr (BzEntryGroup) group = NULL; id = g_variant_get_string (parameter, NULL); group = bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (id)); if (group == NULL) return; if (bz_entry_group_is_addon (group)) { AdwDialog *dialog = NULL; dialog = bz_addons_dialog_new_single (group); adw_dialog_present (dialog, GTK_WIDGET (self)); } else bz_window_show_group (self, group); } static void action_addons_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); const char *id = NULL; g_autoptr (BzEntryGroup) group = NULL; AdwDialog *addons_dialog = NULL; id = g_variant_get_string (parameter, NULL); group = bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (id)); if (group == NULL) return; addons_dialog = bz_addons_dialog_new (group); adw_dialog_present (addons_dialog, GTK_WIDGET (self)); } static void action_bulk_install (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); g_autoptr (GListStore) ids = NULL; g_autoptr (GListModel) groups = NULL; GVariantIter iter = { 0 }; const char *id = NULL; ids = g_list_store_new (GTK_TYPE_STRING_OBJECT); g_variant_iter_init (&iter, parameter); while (g_variant_iter_next (&iter, "&s", &id)) { g_autoptr (GtkStringObject) string = gtk_string_object_new (id); g_list_store_append (ids, string); } groups = bz_application_map_factory_generate ( bz_state_info_get_application_factory (self->state), G_LIST_MODEL (ids)); if (groups != NULL && g_list_model_get_n_items (groups) > 0) bz_window_bulk_install (self, groups); } static void action_user_data (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); AdwNavigationPage *user_data_page = NULL; user_data_page = ADW_NAVIGATION_PAGE (bz_user_data_page_new (self->state)); adw_navigation_view_push (self->navigation_view, user_data_page); } static void action_open_flathub_page (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); adw_navigation_view_pop_to_tag (self->navigation_view, "main"); adw_view_stack_set_visible_child_name (self->main_view_stack, "flathub"); } static void action_open_library (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); adw_navigation_view_pop_to_tag (self->navigation_view, "main"); adw_view_stack_set_visible_child_name (self->main_view_stack, "installed"); bz_library_page_reset_search (self->library_page); } static DexFuture * launch_group_fiber (BzEntryGroup *group) { g_autoptr (GError) local_error = NULL; g_autoptr (GListStore) store = NULL; GtkWidget *window = NULL; BzStateInfo *state = NULL; state = bz_state_info_get_default (); window = GTK_WIDGET (gtk_application_get_active_window ( GTK_APPLICATION (g_application_get_default ()))); store = dex_await_object ( bz_entry_group_dup_all_into_store (group), &local_error); if (store == NULL) { if (window != NULL) bz_show_error_for_widget (window, _ ("Failed to launch application"), local_error->message); return dex_future_new_for_error (g_steal_pointer (&local_error)); } for (guint i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (store)); i++) { g_autoptr (BzEntry) entry = NULL; const char *ref = NULL; gboolean result = FALSE; entry = g_list_model_get_item (G_LIST_MODEL (store), i); if (!BZ_IS_FLATPAK_ENTRY (entry) || !bz_entry_is_installed (entry)) continue; ref = bz_flatpak_entry_get_addon_extension_of_ref (BZ_FLATPAK_ENTRY (entry)); if (ref != NULL) { g_auto (GStrv) parts = NULL; BzApplicationMapFactory *factory = NULL; g_autoptr (BzEntryGroup) parent = NULL; parts = g_strsplit (ref, "/", -1); if (parts[0] != NULL && parts[1] != NULL) { factory = bz_state_info_get_application_factory (state); parent = bz_application_map_factory_convert_one ( factory, gtk_string_object_new (parts[1])); if (parent != NULL) return launch_group_fiber (parent); } } result = bz_flatpak_entry_launch ( BZ_FLATPAK_ENTRY (entry), BZ_FLATPAK_INSTANCE (bz_state_info_get_backend (state)), &local_error); if (!result && window != NULL) bz_show_error_for_widget (window, _ ("Failed to launch application"), local_error->message); return result ? dex_future_new_true () : dex_future_new_for_error (g_steal_pointer (&local_error)); } return dex_future_new_false (); } static void action_launch_group (GtkWidget *widget, const char *action_name, GVariant *parameter) { BzWindow *self = BZ_WINDOW (widget); const char *id = NULL; g_autoptr (BzEntryGroup) group = NULL; id = g_variant_get_string (parameter, NULL); group = bz_application_map_factory_convert_one ( bz_state_info_get_application_factory (self->state), gtk_string_object_new (id)); if (group == NULL) return; dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) launch_group_fiber, g_object_ref (group), g_object_unref)); } static void bz_window_class_init (BzWindowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_window_dispose; object_class->get_property = bz_window_get_property; object_class->set_property = bz_window_set_property; props[PROP_STATE] = g_param_spec_object ( "state", NULL, NULL, BZ_TYPE_STATE_INFO, G_PARAM_READABLE); props[PROP_COMPACT] = g_param_spec_boolean ( "compact", NULL, NULL, FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); g_type_ensure (BZ_TYPE_SEARCH_PAGE); g_type_ensure (BZ_TYPE_PROGRESS_BAR); g_type_ensure (BZ_TYPE_CURATED_VIEW); g_type_ensure (BZ_TYPE_FULL_VIEW); g_type_ensure (BZ_TYPE_LIBRARY_PAGE); g_type_ensure (BZ_TYPE_FLATHUB_PAGE); gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-window.ui"); bz_widget_class_bind_all_util_callbacks (widget_class); gtk_widget_class_bind_template_child (widget_class, BzWindow, navigation_view); gtk_widget_class_bind_template_child (widget_class, BzWindow, full_view); gtk_widget_class_bind_template_child (widget_class, BzWindow, toasts); gtk_widget_class_bind_template_child (widget_class, BzWindow, search_page); gtk_widget_class_bind_template_child (widget_class, BzWindow, library_page); gtk_widget_class_bind_template_child (widget_class, BzWindow, main_view_stack); gtk_widget_class_bind_template_child (widget_class, BzWindow, main_stack); gtk_widget_class_bind_template_child (widget_class, BzWindow, window_overlay); gtk_widget_class_bind_template_callback (widget_class, list_length); gtk_widget_class_bind_template_callback (widget_class, update_cb); gtk_widget_class_bind_template_callback (widget_class, page_toggled_cb); gtk_widget_class_bind_template_callback (widget_class, breakpoint_apply_cb); gtk_widget_class_bind_template_callback (widget_class, breakpoint_unapply_cb); gtk_widget_class_bind_template_callback (widget_class, sync_cb); gtk_widget_class_bind_template_callback (widget_class, transactions_clear_cb); gtk_widget_class_bind_template_callback (widget_class, browse_flathub_cb); gtk_widget_class_bind_template_callback (widget_class, open_search_cb); gtk_widget_class_bind_template_callback (widget_class, format_progress); gtk_widget_class_bind_template_callback (widget_class, format_title); gtk_widget_class_install_action (widget_class, "escape", NULL, action_escape); gtk_widget_class_install_action (widget_class, "window.user-data", NULL, action_user_data); gtk_widget_class_install_action (widget_class, "window.open-library", NULL, action_open_library); gtk_widget_class_install_action (widget_class, "window.open-flathub-page", NULL, action_open_flathub_page); gtk_widget_class_install_action (widget_class, "window.install-group", "(sb)", action_install_group); gtk_widget_class_install_action (widget_class, "window.remove-group", "(sb)", action_remove_group); gtk_widget_class_install_action (widget_class, "window.cancel-group", "s", action_cancel_group); gtk_widget_class_install_action (widget_class, "window.show-group", "s", action_show_group); gtk_widget_class_install_action (widget_class, "window.addons-group", "s", action_addons_group); gtk_widget_class_install_action (widget_class, "window.bulk-install", NULL, action_bulk_install); gtk_widget_class_install_action (widget_class, "window.launch-group", "s", action_launch_group); gtk_widget_class_add_binding_action (widget_class, GDK_KEY_d, GDK_CONTROL_MASK, "window.open-library", NULL); gtk_widget_class_add_binding_action (widget_class, GDK_KEY_w, GDK_CONTROL_MASK, "window.close", NULL); gtk_widget_class_add_binding_action (widget_class, GDK_KEY_e, GDK_CONTROL_MASK, "window.open-flathub-page", NULL); } static gboolean key_pressed (BzWindow *self, guint keyval, guint keycode, GdkModifierType state, GtkEventControllerKey *controller) { gunichar unichar = 0; char buf[32] = { 0 }; const char *visible_child_name = NULL; gboolean was_deeper = FALSE; /* Ignore if this is a modifier-shortcut of some sort */ if (state & ~(GDK_NO_MODIFIER_MASK | GDK_SHIFT_MASK)) return FALSE; if (self->screenshot_page != NULL) return FALSE; unichar = gdk_keyval_to_unicode (keyval); if (unichar == 0 || !g_unichar_isgraph (unichar)) return FALSE; g_unichar_to_utf8 (unichar, buf); was_deeper = g_list_model_get_n_items ( adw_navigation_view_get_navigation_stack (self->navigation_view)) > 1; adw_navigation_view_pop_to_tag (self->navigation_view, "main"); visible_child_name = adw_view_stack_get_visible_child_name (self->main_view_stack); if (!was_deeper && g_strcmp0 (visible_child_name, "installed") == 0) return bz_library_page_ensure_active (self->library_page, buf); else { adw_view_stack_set_visible_child_name (self->main_view_stack, "search"); return bz_search_page_ensure_active (self->search_page, buf); } } static void bz_window_init (BzWindow *self) { gtk_widget_init_template (GTK_WIDGET (self)); #ifdef DEVELOPMENT_BUILD gtk_widget_add_css_class (GTK_WIDGET (self), "devel"); #endif adw_view_stack_set_visible_child_name (self->main_view_stack, "flathub"); self->key_controller = gtk_event_controller_key_new (); g_signal_connect_swapped (self->key_controller, "key-pressed", G_CALLBACK (key_pressed), self); gtk_widget_add_controller (GTK_WIDGET (self), self->key_controller); } static void app_busy_changed (BzWindow *self, GParamSpec *pspec, BzStateInfo *info) { bz_search_page_refresh (self->search_page); set_page (self); } static void has_inputs_changed (BzWindow *self, GParamSpec *pspec, BzContentProvider *provider) { if (!bz_content_provider_get_has_inputs (provider)) adw_view_stack_set_visible_child_name (self->main_view_stack, "flathub"); } static DexFuture * transact_fiber (TransactData *data) { g_autoptr (GError) local_error = NULL; g_autoptr (BzEntry) selected_entry = NULL; g_autoptr (DexFuture) transact_future = NULL; g_autofree char *id_dup = NULL; BzMainConfig *config = NULL; GListModel *hooks = NULL; gboolean delete_user_data = FALSE; GdkDisplay *display = NULL; GdkSeat *seat = NULL; GdkDevice *keyboard = NULL; GdkModifierType modifiers = GDK_NO_MODIFIER_MASK; // Get ID early before any async operations if (data->group != NULL) id_dup = g_strdup (bz_entry_group_get_id (data->group)); else id_dup = g_strdup (bz_entry_get_id (data->entry)); /* Prevent Bazaar from being removed by itself */ if (data->remove) { const char *bazaar_id = NULL; bazaar_id = g_application_get_application_id (g_application_get_default ()); if (g_strcmp0 (id_dup, bazaar_id) == 0) { GtkWidget *window = NULL; window = GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (g_application_get_default ()))); bz_show_error_for_widget (window, _ ("You can't remove Bazaar from Bazaar!"), _ ("You can't remove Bazaar from Bazaar!")); return dex_future_new_false (); } } config = bz_state_info_get_main_config (bz_state_info_get_default ()); if (config != NULL) hooks = bz_main_config_get_hooks (config); #define RUN_HOOK(_signal) \ G_STMT_START \ { \ if (hooks != NULL && \ !dex_await ( \ bz_run_hook_emission ( \ hooks, (_signal), \ data->remove \ ? BZ_HOOK_TRANSACTION_TYPE_REMOVAL \ : BZ_HOOK_TRANSACTION_TYPE_INSTALL, \ id_dup, NULL), \ &local_error)) \ return dex_future_new_for_error (g_steal_pointer (&local_error)); \ } \ G_STMT_END RUN_HOOK (BZ_HOOK_SIGNAL_BEFORE_TRANSACTION); display = gdk_display_get_default (); seat = gdk_display_get_default_seat (display); keyboard = gdk_seat_get_keyboard (seat); if (keyboard != NULL) modifiers = gdk_device_get_modifier_state (keyboard); if (modifiers & GDK_SHIFT_MASK) /* Holding shift while invoking a transaction skips the dialog and assumes the first valid entry */ { if (data->group != NULL) { g_autoptr (GListModel) store = NULL; guint n_items = 0; store = dex_await_object ( bz_entry_group_dup_all_into_store (data->group), &local_error); if (store == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); n_items = g_list_model_get_n_items (store); for (guint i = 0; i < n_items; i++) { g_autoptr (BzEntry) entry = NULL; gboolean installed = FALSE; entry = g_list_model_get_item (store, i); installed = bz_entry_is_installed (entry); if ((data->remove && installed) || (!data->remove && !installed)) { selected_entry = g_steal_pointer (&entry); break; } } if (selected_entry == NULL) return dex_future_new_false (); } else selected_entry = g_object_ref (data->entry); } else { g_autoptr (BzTransactionDialogResult) dialog_result = NULL; // Show the dialog dialog_result = dex_await_object ( bz_transaction_dialog_show ( GTK_WIDGET (gtk_application_get_active_window ( GTK_APPLICATION (g_application_get_default ()))), data->entry, data->group, data->remove, data->auto_confirm), &local_error); if (dialog_result == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (!bz_transaction_dialog_result_get_confirmed (dialog_result)) return dex_future_new_false (); selected_entry = g_object_ref ( bz_transaction_dialog_result_get_selected_entry (dialog_result)); delete_user_data = bz_transaction_dialog_result_get_delete_user_data ( dialog_result); } // Perform the transaction transact_future = transact ( selected_entry, data->remove, data->source); if (!dex_await (g_steal_pointer (&transact_future), &local_error)) return dex_future_new_for_error (g_steal_pointer (&local_error)); // Handle user data deletion if (delete_user_data) { if (data->group != NULL) bz_entry_group_reap_user_data (data->group); else dex_future_disown (bz_reap_user_data_dex (id_dup)); } RUN_HOOK (BZ_HOOK_SIGNAL_AFTER_TRANSACTION); #undef RUN_HOOK return dex_future_new_true (); } BzWindow * bz_window_new (BzStateInfo *state) { BzWindow *window = NULL; BzMainConfig *config = NULL; g_return_val_if_fail (BZ_IS_STATE_INFO (state), NULL); window = g_object_new (BZ_TYPE_WINDOW, NULL); window->state = g_object_ref (state); config = bz_state_info_get_main_config (state); if (config != NULL && bz_main_config_get_start_on_curated (config)) adw_view_stack_set_visible_child_name (window->main_view_stack, "browse"); g_signal_connect_object (state, "notify::busy", G_CALLBACK (app_busy_changed), window, G_CONNECT_SWAPPED); /* these seem unsafe but BzApplication never * changes the objects we are connecting to */ g_signal_connect_object (bz_state_info_get_curated_provider (state), "notify::has-inputs", G_CALLBACK (has_inputs_changed), window, G_CONNECT_SWAPPED); g_object_notify_by_pspec (G_OBJECT (window), props[PROP_STATE]); set_page (window); return window; } void bz_window_search (BzWindow *self, const char *text) { g_return_if_fail (BZ_IS_WINDOW (self)); search (self, text); } void bz_window_show_entry (BzWindow *self, BzEntry *entry) { g_autoptr (BzEntryGroup) group = NULL; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (BZ_IS_ENTRY (entry)); group = bz_entry_group_new_for_single_entry (entry); bz_window_show_group (self, group); } void bz_window_show_group (BzWindow *self, BzEntryGroup *group) { GListModel *stack = NULL; gboolean in_stack = FALSE; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (BZ_IS_ENTRY_GROUP (group)); bz_full_view_set_entry_group (self->full_view, group); emit_hook_disown (self, BZ_HOOK_SIGNAL_VIEW_APP, group); stack = adw_navigation_view_get_navigation_stack (self->navigation_view); for (guint i = 0; i < g_list_model_get_n_items (stack); i++) { g_autoptr (AdwNavigationPage) page = NULL; page = g_list_model_get_item (stack, i); if (g_strcmp0 (adw_navigation_page_get_tag (page), "view") == 0) { in_stack = TRUE; adw_navigation_view_pop_to_page (self->navigation_view, page); break; } } if (!in_stack) adw_navigation_view_push_by_tag (self->navigation_view, "view"); } void bz_window_add_toast (BzWindow *self, AdwToast *toast) { g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (ADW_IS_TOAST (toast)); adw_toast_overlay_add_toast (self->toasts, toast); } void bz_window_push_page (BzWindow *self, AdwNavigationPage *page) { g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (ADW_IS_NAVIGATION_PAGE (page)); adw_navigation_view_push (self->navigation_view, page); } void bz_window_open_screenshot_page (BzWindow *self, BzScreenshotPage *page) { g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (BZ_IS_SCREENSHOT_PAGE (page)); if (self->screenshot_page != NULL) return; self->screenshot_page = page; g_signal_connect_swapped (page, "destroy", G_CALLBACK (g_nullify_pointer), &self->screenshot_page); gtk_overlay_add_overlay (self->window_overlay, GTK_WIDGET (page)); } void bz_window_bulk_install (BzWindow *self, GListModel *groups) { g_autoptr (BulkInstallData) data = NULL; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (G_IS_LIST_MODEL (groups)); data = bulk_install_data_new (); data->self = bz_track_weak (self); data->groups = g_object_ref (groups); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) bulk_install_fiber, bulk_install_data_ref (data), bulk_install_data_unref)); } BzStateInfo * bz_window_get_state_info (BzWindow *self) { g_return_val_if_fail (BZ_IS_WINDOW (self), NULL); return self->state; } static DexFuture * transact (BzEntry *entry, gboolean remove, GtkWidget *source) { g_autoptr (BzTransaction) transaction = NULL; if (remove) transaction = bz_transaction_new_full ( NULL, 0, NULL, 0, &entry, 1); else transaction = bz_transaction_new_full ( &entry, 1, NULL, 0, NULL, 0); return bz_transaction_manager_add ( bz_state_info_get_transaction_manager (bz_state_info_get_default ()), transaction); } static void try_transact (BzWindow *self, BzEntry *entry, BzEntryGroup *group, gboolean remove, gboolean auto_confirm, GtkWidget *source) { g_autoptr (TransactData) data = NULL; g_return_if_fail (entry != NULL || group != NULL); if (bz_state_info_get_busy (self->state)) { adw_toast_overlay_add_toast ( self->toasts, adw_toast_new_format (_ ("Can't do that right now!"))); return; } data = transact_data_new (); data->self = bz_track_weak (self); data->entry = bz_object_maybe_ref (entry); data->group = bz_object_maybe_ref (group); data->remove = remove; data->auto_confirm = auto_confirm; data->source = bz_object_maybe_ref (source); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) transact_fiber, transact_data_ref (data), transact_data_unref)); } static void bulk_install (BzWindow *self, BzEntry **installs, guint n_installs) { g_autoptr (BzTransaction) transaction = NULL; g_return_if_fail (BZ_IS_WINDOW (self)); g_return_if_fail (installs != NULL); g_return_if_fail (n_installs > 0); if (bz_state_info_get_busy (self->state)) { adw_toast_overlay_add_toast ( self->toasts, adw_toast_new_format (_ ("Can't do that right now!"))); return; } transaction = bz_transaction_new_full ( installs, n_installs, NULL, 0, NULL, 0); dex_future_disown (bz_transaction_manager_add ( bz_state_info_get_transaction_manager (self->state), transaction)); } static DexFuture * bulk_install_fiber (BulkInstallData *data) { g_autoptr (BzWindow) self = NULL; g_autoptr (GError) local_error = NULL; g_autoptr (BzBulkInstallDialogResult) result = NULL; GListModel *entries = NULL; guint n_installs = 0; g_autofree BzEntry **installs_buf = NULL; bz_weak_get_or_return_reject (self, data->self); result = dex_await_object ( bz_bulk_install_dialog_show (GTK_WIDGET (self), data->groups), &local_error); if (result == NULL) return dex_future_new_for_error (g_steal_pointer (&local_error)); if (!bz_bulk_install_dialog_result_get_confirmed (result)) return dex_future_new_false (); entries = bz_bulk_install_dialog_result_get_entries (result); n_installs = g_list_model_get_n_items (entries); if (n_installs == 0) return dex_future_new_false (); installs_buf = g_malloc_n (n_installs, sizeof (*installs_buf)); for (guint i = 0; i < n_installs; i++) installs_buf[i] = g_list_model_get_item (entries, i); bulk_install (self, installs_buf, n_installs); for (guint i = 0; i < n_installs; i++) g_object_unref (installs_buf[i]); return dex_future_new_true (); } static void search (BzWindow *self, const char *initial) { if (initial != NULL && *initial != '\0') bz_search_page_set_text (self->search_page, initial); adw_view_stack_set_visible_child_name (self->main_view_stack, "search"); adw_navigation_view_pop_to_tag (self->navigation_view, "main"); gtk_widget_grab_focus (GTK_WIDGET (self->search_page)); } static void set_page (BzWindow *self) { const char *selected_navigation_page_name = NULL; if (self->state == NULL) return; if (bz_state_info_get_busy (self->state)) { gtk_stack_set_visible_child_name (self->main_stack, "loading"); adw_navigation_view_pop_to_tag (self->navigation_view, "main"); } else gtk_stack_set_visible_child_name (self->main_stack, "main"); selected_navigation_page_name = adw_navigation_view_get_visible_page_tag (self->navigation_view); if (g_strcmp0 (selected_navigation_page_name, "view") != 0) bz_full_view_set_entry_group (self->full_view, NULL); } static void emit_hook_disown (BzWindow *self, BzHookSignal signal, BzEntryGroup *group) { BzMainConfig *config = NULL; GListModel *hooks = NULL; if (self->state == NULL) return; config = bz_state_info_get_main_config (self->state); if (config == NULL) return; hooks = bz_main_config_get_hooks (config); if (hooks == NULL) return; dex_future_disown (bz_run_hook_emission ( hooks, signal, 0, NULL, group)); } bazaar-org-bazaar-b6e9a65/src/bz-window.h000066400000000000000000000035531522167256300203170ustar00rootroot00000000000000/* bz-window.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include #include "bz-state-info.h" #include "bz-screenshot-page.h" G_BEGIN_DECLS #define BZ_TYPE_WINDOW (bz_window_get_type ()) G_DECLARE_FINAL_TYPE (BzWindow, bz_window, BZ, WINDOW, AdwApplicationWindow) BzWindow * bz_window_new (BzStateInfo *state); void bz_window_search (BzWindow *self, const char *text); void bz_window_push_update_dialog (BzWindow *self); void bz_window_show_entry (BzWindow *self, BzEntry *entry); void bz_window_show_group (BzWindow *self, BzEntryGroup *group); void bz_window_show_app_id (BzWindow *self, const char *app_id); void bz_window_push_page (BzWindow *self, AdwNavigationPage *page); void bz_window_add_toast (BzWindow *self, AdwToast *toast); void bz_window_open_screenshot_page (BzWindow *self, BzScreenshotPage *page); void bz_window_bulk_install (BzWindow *self, GListModel *groups); BzStateInfo * bz_window_get_state_info (BzWindow *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-world-map-parser.c000066400000000000000000000077311522167256300222010ustar00rootroot00000000000000/* bz-world-map-parser.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include #include "bz-country.h" #include "bz-world-map-parser.h" struct _BzWorldMapParser { GObject parent_instance; GListStore *countries; }; G_DEFINE_FINAL_TYPE (BzWorldMapParser, bz_world_map_parser, G_TYPE_OBJECT) static const char *get_translated_name (GVariant *translations, const char *fallback_name); static void bz_world_map_parser_dispose (GObject *object) { BzWorldMapParser *self = BZ_WORLD_MAP_PARSER (object); g_clear_object (&self->countries); G_OBJECT_CLASS (bz_world_map_parser_parent_class)->dispose (object); } static void bz_world_map_parser_class_init (BzWorldMapParserClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_world_map_parser_dispose; } static void bz_world_map_parser_init (BzWorldMapParser *self) { self->countries = g_list_store_new (BZ_TYPE_COUNTRY); } BzWorldMapParser * bz_world_map_parser_new (void) { return g_object_new (BZ_TYPE_WORLD_MAP_PARSER, NULL); } gboolean bz_world_map_parser_load_from_resource (BzWorldMapParser *self, const char *resource_path, GError **error) { g_autoptr (GBytes) bytes = NULL; g_autoptr (GVariant) data = NULL; GVariantIter iter = { 0 }; const char *name = NULL; const char *iso_code = NULL; GVariant *translations = NULL; GVariant *coordinates = NULL; g_return_val_if_fail (BZ_IS_WORLD_MAP_PARSER (self), FALSE); g_return_val_if_fail (resource_path != NULL, FALSE); bytes = g_resources_lookup_data (resource_path, G_RESOURCE_LOOKUP_FLAGS_NONE, error); if (bytes == NULL) return FALSE; data = g_variant_new_from_bytes (G_VARIANT_TYPE ("a(ssa{ss}aaa(dd))"), bytes, TRUE); g_list_store_remove_all (self->countries); g_variant_iter_init (&iter, data); while (g_variant_iter_next (&iter, "(&s&s@a{ss}@aaa(dd))", &name, &iso_code, &translations, &coordinates)) { g_autoptr (BzCountry) country = NULL; const char *display_name = NULL; display_name = get_translated_name (translations, name); country = bz_country_new (); bz_country_set_name (country, display_name); bz_country_set_iso_code (country, iso_code); bz_country_set_coordinates (country, coordinates); g_list_store_append (self->countries, country); g_variant_unref (translations); g_variant_unref (coordinates); } return TRUE; } GListModel * bz_world_map_parser_get_countries (BzWorldMapParser *self) { g_return_val_if_fail (BZ_IS_WORLD_MAP_PARSER (self), NULL); return G_LIST_MODEL (self->countries); } static const char * get_translated_name (GVariant *translations, const char *fallback_name) { const char *const *language_names = NULL; language_names = g_get_language_names (); for (guint i = 0; language_names[i] != NULL; i++) { const char *translated = NULL; if (g_variant_lookup (translations, language_names[i], "&s", &translated)) return translated; } return fallback_name; } bazaar-org-bazaar-b6e9a65/src/bz-world-map-parser.h000066400000000000000000000025751522167256300222070ustar00rootroot00000000000000/* bz-world-map-parser.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_WORLD_MAP_PARSER (bz_world_map_parser_get_type ()) G_DECLARE_FINAL_TYPE (BzWorldMapParser, bz_world_map_parser, BZ, WORLD_MAP_PARSER, GObject) BzWorldMapParser *bz_world_map_parser_new (void); gboolean bz_world_map_parser_load_from_resource (BzWorldMapParser *self, const char *resource_path, GError **error); GListModel *bz_world_map_parser_get_countries (BzWorldMapParser *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-world-map.c000066400000000000000000000540611522167256300207050ustar00rootroot00000000000000/* bz-world-map.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "config.h" #include #include #include "bz-country-data-point.h" #include "bz-country.h" #include "bz-world-map-parser.h" #include "bz-world-map.h" #define OPACITY_MULTIPLIER 2 struct _BzWorldMap { GtkWidget parent_instance; BzWorldMapParser *parser; GListModel *countries; GListModel *model; double min_lon; double max_lon; double min_lat; double max_lat; GskPath **country_paths; guint *path_to_country; guint n_paths; gboolean cache_valid; int last_width; int last_height; GtkEventController *motion; GtkGesture *gesture; double offset_x; double offset_y; double scale; int hovered_country; double motion_x; double motion_y; guint max_downloads; GtkWidget *tooltip_box; GtkWidget *tooltip_label1; GtkWidget *tooltip_prefix_label; GtkWidget *tooltip_label2; }; G_DEFINE_FINAL_TYPE (BzWorldMap, bz_world_map, GTK_TYPE_WIDGET) enum { PROP_0, PROP_MODEL, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static guint get_downloads_for_country (BzWorldMap *self, const char *iso_code) { guint n_items = 0; if (self->model == NULL) return 0; n_items = g_list_model_get_n_items (self->model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzCountryDataPoint) point = g_list_model_get_item (self->model, i); const char *country_code = bz_country_data_point_get_country_code (point); if (g_strcmp0 (country_code, iso_code) == 0) return bz_country_data_point_get_downloads (point); } return 0; } static void calculate_max_downloads (BzWorldMap *self) { guint n_items = 0; self->max_downloads = 0; if (self->model == NULL) return; n_items = g_list_model_get_n_items (self->model); for (guint i = 0; i < n_items; i++) { g_autoptr (BzCountryDataPoint) point = g_list_model_get_item (self->model, i); guint downloads = bz_country_data_point_get_downloads (point); if (downloads > self->max_downloads) self->max_downloads = downloads; } } static void calculate_bounds (BzWorldMap *self) { guint n_items = 0; if (self->countries == NULL) return; n_items = g_list_model_get_n_items (self->countries); self->min_lon = 180.0; self->max_lon = -180.0; self->min_lat = 90.0; self->max_lat = -90.0; for (guint i = 0; i < n_items; i++) { g_autoptr (BzCountry) country = g_list_model_get_item (self->countries, i); GVariant *coordinates = bz_country_get_coordinates (country); GVariantIter poly_iter, ring_iter, point_iter; GVariant *polygon = NULL; GVariant *ring = NULL; double lon, lat; if (coordinates == NULL) continue; g_variant_iter_init (&poly_iter, coordinates); while ((polygon = g_variant_iter_next_value (&poly_iter))) { g_variant_iter_init (&ring_iter, polygon); while ((ring = g_variant_iter_next_value (&ring_iter))) { g_variant_iter_init (&point_iter, ring); while (g_variant_iter_next (&point_iter, "(dd)", &lon, &lat)) { if (lon < self->min_lon) self->min_lon = lon; if (lon > self->max_lon) self->max_lon = lon; if (lat < self->min_lat) self->min_lat = lat; if (lat > self->max_lat) self->max_lat = lat; } g_clear_pointer (&ring, g_variant_unref); } g_clear_pointer (&polygon, g_variant_unref); } } } static void project_point (BzWorldMap *self, double lon, double lat, double width, double height, double *x, double *y) { double lon_range = self->max_lon - self->min_lon; double lat_range = self->max_lat - self->min_lat; *x = ((lon - self->min_lon) / lon_range) * width; *y = height - ((lat - self->min_lat) / lat_range) * height; } static void calculate_transform (BzWorldMap *self, double widget_width, double widget_height, double map_width, double map_height) { double scale_x = widget_width / map_width; double scale_y = widget_height / map_height; self->scale = MIN (scale_x, scale_y); self->offset_x = (widget_width - map_width * self->scale) / 2.0; self->offset_y = (widget_height - map_height * self->scale) / 2.0; } static void build_paths (BzWorldMap *self, double width, double height) { guint n_items = 0; guint path_index = 0; if (self->countries == NULL) return; if (self->country_paths != NULL) { for (guint i = 0; i < self->n_paths; i++) g_clear_pointer (&self->country_paths[i], gsk_path_unref); g_clear_pointer (&self->country_paths, g_free); } g_clear_pointer (&self->path_to_country, g_free); n_items = g_list_model_get_n_items (self->countries); self->n_paths = 0; for (guint i = 0; i < n_items; i++) { g_autoptr (BzCountry) country = NULL; GVariant *coordinates = NULL; GVariantIter poly_iter = { 0 }; GVariant *polygon = NULL; country = g_list_model_get_item (self->countries, i); coordinates = bz_country_get_coordinates (country); if (coordinates == NULL) continue; g_variant_iter_init (&poly_iter, coordinates); while ((polygon = g_variant_iter_next_value (&poly_iter))) { self->n_paths += g_variant_n_children (polygon); g_clear_pointer (&polygon, g_variant_unref); } } self->country_paths = g_new0 (GskPath *, self->n_paths); self->path_to_country = g_new0 (guint, self->n_paths); for (guint i = 0; i < n_items; i++) { g_autoptr (BzCountry) country = NULL; GVariant *coordinates = NULL; GVariantIter poly_iter = { 0 }; GVariant *polygon = NULL; country = g_list_model_get_item (self->countries, i); coordinates = bz_country_get_coordinates (country); if (coordinates == NULL) continue; g_variant_iter_init (&poly_iter, coordinates); while ((polygon = g_variant_iter_next_value (&poly_iter))) { GVariantIter ring_iter = { 0 }; GVariant *ring = NULL; g_variant_iter_init (&ring_iter, polygon); while ((ring = g_variant_iter_next_value (&ring_iter))) { g_autoptr (GskPathBuilder) builder = NULL; GVariantIter point_iter = { 0 }; double lon = 0.0; double lat = 0.0; gboolean first = TRUE; builder = gsk_path_builder_new (); g_variant_iter_init (&point_iter, ring); while (g_variant_iter_next (&point_iter, "(dd)", &lon, &lat)) { double x = 0.0; double y = 0.0; project_point (self, lon, lat, width, height, &x, &y); if (first) { gsk_path_builder_move_to (builder, x, y); first = FALSE; } else { gsk_path_builder_line_to (builder, x, y); } } gsk_path_builder_close (builder); self->country_paths[path_index] = gsk_path_builder_to_path (builder); self->path_to_country[path_index] = i; path_index++; g_clear_pointer (&ring, g_variant_unref); } g_clear_pointer (&polygon, g_variant_unref); } } self->cache_valid = TRUE; } static void invalidate_cache (BzWorldMap *self) { self->cache_valid = FALSE; gtk_widget_queue_draw (GTK_WIDGET (self)); } static void on_style_changed (AdwStyleManager *style_manager, GParamSpec *pspec, BzWorldMap *self) { invalidate_cache (self); } static void update_hovered_country (BzWorldMap *self, double x, double y) { double map_x; double map_y; map_x = (x - self->offset_x) / self->scale; map_y = (y - self->offset_y) / self->scale; self->motion_x = x; self->motion_y = y; self->hovered_country = -1; for (guint i = 0; i < self->n_paths; i++) { if (gsk_path_in_fill (self->country_paths[i], &GRAPHENE_POINT_INIT (map_x, map_y), GSK_FILL_RULE_WINDING)) { self->hovered_country = self->path_to_country[i]; break; } } } static void motion_event (BzWorldMap *self, gdouble x, gdouble y, GtkEventControllerMotion *controller) { int old_hovered; old_hovered = self->hovered_country; update_hovered_country (self, x, y); if (old_hovered != self->hovered_country || self->hovered_country >= 0) gtk_widget_queue_draw (GTK_WIDGET (self)); } static void motion_leave (BzWorldMap *self, GtkEventControllerMotion *controller) { if (self->hovered_country != -1) { self->hovered_country = -1; self->motion_x = -1.0; self->motion_y = -1.0; gtk_widget_queue_draw (GTK_WIDGET (self)); } } static void gesture_begin (BzWorldMap *self, double start_x, double start_y, GtkGestureDrag *gesture) { update_hovered_country (self, start_x, start_y); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void gesture_update (BzWorldMap *self, double offset_x, double offset_y, GtkGestureDrag *gesture) { double start_x; double start_y; gtk_gesture_drag_get_start_point (gesture, &start_x, &start_y); update_hovered_country (self, start_x + offset_x, start_y + offset_y); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void gesture_end (BzWorldMap *self, double offset_x, double offset_y, GtkGestureDrag *gesture) { gtk_widget_queue_draw (GTK_WIDGET (self)); } static void bz_world_map_dispose (GObject *object) { BzWorldMap *self = BZ_WORLD_MAP (object); g_signal_handlers_disconnect_by_func (adw_style_manager_get_default (), on_style_changed, self); if (self->country_paths != NULL) { for (guint i = 0; i < self->n_paths; i++) g_clear_pointer (&self->country_paths[i], gsk_path_unref); g_free (self->country_paths); self->country_paths = NULL; } if (self->path_to_country != NULL) { g_free (self->path_to_country); self->path_to_country = NULL; } if (self->tooltip_box != NULL) gtk_widget_unparent (self->tooltip_box); g_clear_object (&self->countries); g_clear_object (&self->model); G_OBJECT_CLASS (bz_world_map_parent_class)->dispose (object); } static void bz_world_map_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzWorldMap *self = BZ_WORLD_MAP (object); switch (prop_id) { case PROP_MODEL: g_value_set_object (value, self->model); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_world_map_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzWorldMap *self = BZ_WORLD_MAP (object); switch (prop_id) { case PROP_MODEL: g_clear_object (&self->model); self->model = g_value_dup_object (value); calculate_max_downloads (self); gtk_widget_queue_draw (GTK_WIDGET (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_world_map_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BzWorldMap *self = BZ_WORLD_MAP (widget); if (width == self->last_width && height == self->last_height) return; self->last_width = width; self->last_height = height; invalidate_cache (self); } static void bz_world_map_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzWorldMap *self = BZ_WORLD_MAP (widget); double widget_width = gtk_widget_get_width (widget); double widget_height = gtk_widget_get_height (widget); AdwStyleManager *style_manager = adw_style_manager_get_default (); g_autoptr (GdkRGBA) accent_color = adw_style_manager_get_accent_color_rgba (style_manager); GdkRGBA stroke_color = { 0 }; g_autoptr (GskStroke) stroke = gsk_stroke_new (0.5); g_autoptr (GskStroke) hover_stroke = gsk_stroke_new (1.5); double map_width = 1000.0; double map_height = 500.0; if (self->countries == NULL) return; gtk_widget_get_color (widget, &stroke_color); stroke_color.alpha = 0.3; if (!self->cache_valid) build_paths (self, map_width, map_height); calculate_transform (self, widget_width, widget_height, map_width, map_height); gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (self->offset_x, self->offset_y)); gtk_snapshot_scale (snapshot, self->scale, self->scale); for (guint i = 0; i < self->n_paths; i++) { guint country_idx = self->path_to_country[i]; g_autoptr (BzCountry) country = g_list_model_get_item (self->countries, country_idx); const char *iso_code = bz_country_get_iso_code (country); guint downloads = get_downloads_for_country (self, iso_code); GdkRGBA fill_color = *accent_color; if (self->max_downloads > 0 && downloads > 0) { double ratio = (double) downloads / (double) self->max_downloads; fill_color.alpha = CLAMP (ratio * OPACITY_MULTIPLIER, 0.1, 1.0); } else { fill_color.alpha = 0.0; } gtk_snapshot_append_fill (snapshot, self->country_paths[i], GSK_FILL_RULE_WINDING, &fill_color); gtk_snapshot_append_stroke (snapshot, self->country_paths[i], stroke, &stroke_color); } gtk_snapshot_restore (snapshot); if (self->hovered_country >= 0) { GdkRGBA hover_color = stroke_color; hover_color.alpha = 1.0; gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (self->offset_x, self->offset_y)); gtk_snapshot_scale (snapshot, self->scale, self->scale); for (guint i = 0; i < self->n_paths; i++) { if (self->path_to_country[i] == (guint) self->hovered_country) { gtk_snapshot_append_stroke (snapshot, self->country_paths[i], hover_stroke, &hover_color); } } gtk_snapshot_restore (snapshot); } if (self->hovered_country >= 0 && self->motion_x >= 0.0 && self->motion_y >= 0.0) { g_autoptr (BzCountry) country = g_list_model_get_item (self->countries, self->hovered_country); const char *iso_code = bz_country_get_iso_code (country); guint download_number = get_downloads_for_country (self, iso_code); const char *country_name = bz_country_get_name (country); g_autofree char *label1_text = g_strdup_printf ("%s", country_name); g_autofree char *label2_text = g_strdup_printf ("%'u", download_number); GtkRequisition natural_size; double card_x = 0.0; double card_y = 0.0; gtk_label_set_markup (GTK_LABEL (self->tooltip_label1), label1_text); /* Translators: As in, "1 Install" / "100 Installs" */ gtk_label_set_text (GTK_LABEL (self->tooltip_prefix_label), ngettext ("Install", "Installs", download_number)); gtk_label_set_text (GTK_LABEL (self->tooltip_label2), label2_text); gtk_widget_get_preferred_size (self->tooltip_box, NULL, &natural_size); gtk_widget_allocate (self->tooltip_box, natural_size.width, natural_size.height, -1, NULL); if (self->motion_x > widget_width / 2.0) card_x = self->motion_x - natural_size.width - 10.0; else card_x = self->motion_x + 10.0; card_y = self->motion_y + 10.0; gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (card_x, card_y)); gtk_widget_snapshot_child (widget, self->tooltip_box, snapshot); gtk_snapshot_restore (snapshot); } } static void bz_world_map_class_init (BzWorldMapClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_world_map_dispose; object_class->get_property = bz_world_map_get_property; object_class->set_property = bz_world_map_set_property; props[PROP_MODEL] = g_param_spec_object ( "model", NULL, NULL, G_TYPE_LIST_MODEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); widget_class->snapshot = bz_world_map_snapshot; widget_class->size_allocate = bz_world_map_size_allocate; } static void bz_world_map_init (BzWorldMap *self) { AdwStyleManager *style_manager = adw_style_manager_get_default (); g_autoptr (GError) error = NULL; GtkWidget *inner_box = NULL; GtkWidget *label2_box = NULL; self->parser = bz_world_map_parser_new (); self->hovered_country = -1; self->motion_x = -1.0; self->motion_y = -1.0; self->max_downloads = 0; self->motion = gtk_event_controller_motion_new (); g_signal_connect_swapped (self->motion, "motion", G_CALLBACK (motion_event), self); g_signal_connect_swapped (self->motion, "leave", G_CALLBACK (motion_leave), self); gtk_widget_add_controller (GTK_WIDGET (self), self->motion); self->gesture = gtk_gesture_drag_new (); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->gesture), TRUE); g_signal_connect_swapped (self->gesture, "drag-begin", G_CALLBACK (gesture_begin), self); g_signal_connect_swapped (self->gesture, "drag-update", G_CALLBACK (gesture_update), self); g_signal_connect_swapped (self->gesture, "drag-end", G_CALLBACK (gesture_end), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (self->gesture)); self->tooltip_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_add_css_class (self->tooltip_box, "floating-tooltip"); gtk_widget_add_css_class (self->tooltip_box, "card"); inner_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); gtk_widget_set_margin_start (inner_box, 12); gtk_widget_set_margin_end (inner_box, 12); gtk_widget_set_margin_top (inner_box, 12); gtk_widget_set_margin_bottom (inner_box, 12); self->tooltip_label1 = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_label1, "heading"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_label1), 0.0); gtk_label_set_use_markup (GTK_LABEL (self->tooltip_label1), TRUE); gtk_box_append (GTK_BOX (inner_box), self->tooltip_label1); label2_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); self->tooltip_label2 = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_label2, "monospace"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_label2), 0.0); gtk_box_append (GTK_BOX (label2_box), self->tooltip_label2); self->tooltip_prefix_label = gtk_label_new (""); gtk_widget_add_css_class (self->tooltip_prefix_label, "body"); gtk_widget_add_css_class (self->tooltip_prefix_label, "dim-label"); gtk_label_set_xalign (GTK_LABEL (self->tooltip_prefix_label), 0.0); gtk_box_append (GTK_BOX (label2_box), self->tooltip_prefix_label); gtk_box_append (GTK_BOX (inner_box), label2_box); gtk_box_append (GTK_BOX (self->tooltip_box), inner_box); gtk_widget_set_parent (self->tooltip_box, GTK_WIDGET (self)); g_signal_connect (style_manager, "notify::dark", G_CALLBACK (on_style_changed), self); g_signal_connect (style_manager, "notify::accent-color", G_CALLBACK (on_style_changed), self); if (bz_world_map_parser_load_from_resource (self->parser, "/io/github/kolunmi/Bazaar/countries.gvariant", &error)) { self->countries = g_object_ref (bz_world_map_parser_get_countries (self->parser)); calculate_bounds (self); g_clear_object (&self->parser); } else { g_warning ("BzWorldMap: Failed to load countries: %s", error->message); g_clear_object (&self->parser); } } GtkWidget * bz_world_map_new (void) { return g_object_new (BZ_TYPE_WORLD_MAP, NULL); } bazaar-org-bazaar-b6e9a65/src/bz-world-map.h000066400000000000000000000021621522167256300207050ustar00rootroot00000000000000/* bz-world-map.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_WORLD_MAP (bz_world_map_get_type ()) G_DECLARE_FINAL_TYPE (BzWorldMap, bz_world_map, BZ, WORLD_MAP, GtkWidget) GtkWidget * bz_world_map_new (void); GListModel * bz_world_map_get_model (BzWorldMap *self); void bz_world_map_set_model (BzWorldMap *self, GListModel *model); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-yaml-parser.c000066400000000000000000001222031522167256300212310ustar00rootroot00000000000000/* bz-yaml-parser.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::YAML" #include "config.h" #include #include #include #include "bz-parser.h" #include "bz-util.h" #include "bz-yaml-parser.h" /* clang-format off */ G_DEFINE_QUARK (bz-yaml-error-quark, bz_yaml_error); /* clang-format on */ static void deinit_schema_node (gpointer data); BZ_DEFINE_DATA ( schema_node, SchemaNode, { int kind; union { struct { char *vtype; } scalar; struct { GType type; GHashTable *type_hints; } object; struct { SchemaNodeData *child; } list; struct { GHashTable *children; } mappings; }; }, deinit_schema_node (self);) struct _BzYamlParser { GObject parent_instance; SchemaNodeData *schema; }; static void parser_iface_init (BzParserInterface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE ( BzYamlParser, bz_yaml_parser, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (BZ_TYPE_PARSER, parser_iface_init)) enum { KIND_SCALAR, KIND_OBJECT, KIND_LIST, KIND_MAPPINGS, }; static SchemaNodeData * compile_schema (XbNode *node); static gboolean parse (BzYamlParser *self, yaml_parser_t *parser, yaml_event_t *event, gboolean parse_first, gboolean toplevel, SchemaNodeData *schema, GHashTable *output, GHashTable *anchors, GPtrArray *path_stack, GError **error); static GObject * parse_object (BzYamlParser *self, yaml_parser_t *parser, yaml_event_t *event, GType object_gtype, GHashTable *type_hints, GHashTable *anchors, const char *prop_path, GError **error); static char * join_path_stack (GPtrArray *path_stack); static void destroy_gvalue (GValue *value); static GValue * make_gvalue_alloc (GType type); static GValue * copy_gvalue_alloc (GValue *value); static void bz_yaml_parser_dispose (GObject *object) { BzYamlParser *self = BZ_YAML_PARSER (object); g_clear_pointer (&self->schema, schema_node_data_unref); G_OBJECT_CLASS (bz_yaml_parser_parent_class)->dispose (object); } static void bz_yaml_parser_class_init (BzYamlParserClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = bz_yaml_parser_dispose; g_type_ensure (GTK_TYPE_STRING_OBJECT); } static void bz_yaml_parser_init (BzYamlParser *self) { } static GHashTable * bz_yaml_parser_real_process_bytes (BzParser *iface_self, GBytes *bytes, GError **error) { BzYamlParser *self = BZ_YAML_PARSER (iface_self); g_autoptr (GError) local_error = NULL; gsize bytes_size = 0; const guchar *bytes_data = NULL; yaml_parser_t parser = { 0 }; yaml_event_t event = { 0 }; g_autoptr (GHashTable) output = NULL; g_autoptr (GHashTable) anchors = NULL; g_autoptr (GPtrArray) path_stack = NULL; gboolean result = FALSE; g_return_val_if_fail (BZ_IS_YAML_PARSER (self), NULL); g_return_val_if_fail (bytes != NULL, NULL); bytes_data = g_bytes_get_data (bytes, &bytes_size); yaml_parser_initialize (&parser); yaml_parser_set_input_string (&parser, bytes_data, bytes_size); output = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) destroy_gvalue); anchors = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) destroy_gvalue); path_stack = g_ptr_array_new_with_free_func (g_free); result = parse ( self, &parser, &event, TRUE, TRUE, self->schema, output, anchors, path_stack, &local_error); yaml_parser_delete (&parser); if (result) return g_steal_pointer (&output); else { g_propagate_error (error, g_steal_pointer (&local_error)); return NULL; } } static void parser_iface_init (BzParserInterface *iface) { iface->process_bytes = bz_yaml_parser_real_process_bytes; } BzYamlParser * bz_yaml_parser_new_for_resource_schema (const char *path) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) bytes = NULL; const char *resource_data = NULL; g_autoptr (XbSilo) silo = NULL; g_autoptr (XbNode) root = NULL; g_autoptr (SchemaNodeData) schema = NULL; g_autoptr (BzYamlParser) parser = NULL; g_return_val_if_fail (path != NULL, NULL); bytes = g_resources_lookup_data ( path, G_RESOURCE_LOOKUP_FLAGS_NONE, &local_error); if (bytes == NULL) g_critical ("Could not load internal resource: %s", local_error->message); g_assert (bytes != NULL); resource_data = g_bytes_get_data (bytes, NULL); silo = xb_silo_new_from_xml (resource_data, &local_error); if (silo == NULL) g_critical ("Could not parse internal xml resource: %s", local_error->message); g_assert (silo != NULL); root = xb_silo_get_root (silo); parser = g_object_new (BZ_TYPE_YAML_PARSER, NULL); parser->schema = compile_schema (root); return g_steal_pointer (&parser); } static SchemaNodeData * compile_schema (XbNode *node) { const char *element = NULL; g_autoptr (SchemaNodeData) schema = NULL; element = xb_node_get_element (node); schema = schema_node_data_new (); #define ERROR_OUT(...) \ G_STMT_START \ { \ g_critical ("Fatal: internal schema: " __VA_ARGS__); \ g_assert (FALSE); \ } \ G_STMT_END if (g_strcmp0 (element, "scalar") == 0) { const char *type = NULL; type = xb_node_get_attr (node, "type"); if (type == NULL) ERROR_OUT ("scalar must have a type"); if (!g_variant_type_is_basic ((const GVariantType *) type)) ERROR_OUT ("invalid variant type for scalar '%s'", type); schema->kind = KIND_SCALAR; schema->scalar.vtype = g_strdup (type); } else if (g_strcmp0 (element, "object") == 0) { const char *class = NULL; GType gtype = G_TYPE_INVALID; g_autoptr (GTypeClass) gtype_class = NULL; XbNode *child = NULL; class = xb_node_get_attr (node, "class"); if (class == NULL) ERROR_OUT ("object must have a class"); gtype = g_type_from_name (class); if (gtype == G_TYPE_INVALID || !g_type_is_a (gtype, G_TYPE_OBJECT)) ERROR_OUT ("'%s' is not a valid object class", class); schema->kind = KIND_OBJECT; schema->object.type = gtype; schema->object.type_hints = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, NULL); gtype_class = g_type_class_ref (gtype); child = xb_node_get_child (node); while (child != NULL) { const char *child_element = NULL; const char *name = NULL; GParamSpec *property = NULL; const char *typehint_name = NULL; GType typehint_gtype = G_TYPE_INVALID; XbNode *next = NULL; child_element = xb_node_get_element (child); if (g_strcmp0 (child_element, "typehint") != 0) ERROR_OUT ("\"typehint\" is the only valid child element of \"object\""); name = xb_node_get_attr (child, "name"); if (name == NULL) ERROR_OUT ("typehint must have a name"); /* TODO: implement recursive checking */ if (strchr (name, '.') == NULL) { property = g_object_class_find_property (G_OBJECT_CLASS (gtype_class), name); if (property == NULL) ERROR_OUT ("typehint property '%s' is invalid", name); } typehint_name = xb_node_get_attr (child, "type"); if (typehint_name == NULL) ERROR_OUT ("typehint must have a type"); typehint_gtype = g_type_from_name (typehint_name); if (typehint_gtype == G_TYPE_INVALID || !g_type_is_a (typehint_gtype, G_TYPE_OBJECT)) ERROR_OUT ("'%s' is not a valid object class", typehint_name); g_hash_table_replace ( schema->object.type_hints, g_strdup (name), GSIZE_TO_POINTER (typehint_gtype)); next = xb_node_get_next (child); g_object_unref (child); child = next; } } else if (g_strcmp0 (element, "list") == 0) { g_autoptr (XbNode) child = NULL; child = xb_node_get_child (node); if (child == NULL) ERROR_OUT ("list must have a child"); schema->kind = KIND_LIST; schema->list.child = compile_schema (child); } else if (g_strcmp0 (element, "mappings") == 0) { XbNode *child = NULL; schema->kind = KIND_MAPPINGS; schema->mappings.children = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, schema_node_data_unref); child = xb_node_get_child (node); while (child != NULL) { const char *child_element = NULL; const char *key = NULL; g_autoptr (XbNode) child_child = NULL; XbNode *next = NULL; child_element = xb_node_get_element (child); if (g_strcmp0 (child_element, "mapping") != 0) ERROR_OUT ("\"mapping\" is the only valid child element of \"mappings\""); key = xb_node_get_attr (child, "key"); if (key == NULL) ERROR_OUT ("mapping must have a key"); child_child = xb_node_get_child (child); if (child == NULL) ERROR_OUT ("mapping must have a child"); g_hash_table_replace ( schema->mappings.children, g_strdup (key), compile_schema (child_child)); next = xb_node_get_next (child); g_object_unref (child); child = next; } } else ERROR_OUT ("unrecognized element '%s'", element); #undef ERROR_OUT return g_steal_pointer (&schema); } static gboolean parse (BzYamlParser *self, yaml_parser_t *parser, yaml_event_t *event, gboolean parse_first, gboolean toplevel, SchemaNodeData *schema, GHashTable *output, GHashTable *anchors, GPtrArray *path_stack, GError **error) { if (parse_first && !yaml_parser_parse (parser, event)) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_INVALID_YAML, "Failed to parse YAML at line %zu, column %zu: %s", parser->problem_mark.line, parser->problem_mark.column, parser->problem); return FALSE; } #define NEXT_EVENT() \ G_STMT_START \ { \ yaml_event_delete (event); \ if (!yaml_parser_parse (parser, event)) \ { \ g_set_error ( \ error, \ BZ_YAML_ERROR, \ BZ_YAML_ERROR_INVALID_YAML, \ "Failed to parse YAML at line %zu, column %zu: %s", \ parser->problem_mark.line, \ parser->problem_mark.column, \ parser->problem); \ return FALSE; \ } \ } \ G_STMT_END #define EXPECT(event_type, string_type) \ if (event->type != (event_type)) \ { \ g_set_error ( \ error, \ BZ_YAML_ERROR, \ BZ_YAML_ERROR_DOES_NOT_CONFORM, \ "Failed to validate YAML against schema at line %zu, column %zu: " \ "expected " string_type " here", \ event->start_mark.line, \ event->start_mark.column); \ yaml_event_delete (event); \ return FALSE; \ } #define TRY_ALIAS(var, gtype, string_type) \ if (event->type == YAML_ALIAS_EVENT) \ { \ GValue *_value = NULL; \ \ _value = g_hash_table_lookup ( \ anchors, \ event->data.alias.anchor); \ if (_value == NULL) \ { \ g_set_error ( \ error, \ BZ_YAML_ERROR, \ BZ_YAML_ERROR_INVALID_YAML, \ "Failed to resolve YAML alias at line %zu, column %zu: " \ "the anchor \"%s\" does not yet exist", \ event->start_mark.line, \ event->start_mark.column, \ (const char *) event->data.alias.anchor); \ yaml_event_delete (event); \ return FALSE; \ } \ \ if (!G_VALUE_HOLDS (_value, (gtype))) \ { \ g_set_error ( \ error, \ BZ_YAML_ERROR, \ BZ_YAML_ERROR_DOES_NOT_CONFORM, \ "Failed to validate YAML against schema at line %zu, column %zu: " \ "the alias needs to be of type " string_type " here", \ event->start_mark.line, \ event->start_mark.column); \ yaml_event_delete (event); \ return FALSE; \ } \ \ (var) = copy_gvalue_alloc (_value); \ } if (toplevel) { EXPECT (YAML_STREAM_START_EVENT, "start of stream"); NEXT_EVENT (); EXPECT (YAML_DOCUMENT_START_EVENT, "start of document"); NEXT_EVENT (); } switch (schema->kind) { case KIND_SCALAR: { GValue *value = NULL; TRY_ALIAS (value, G_TYPE_VARIANT, "scalar"); if (value != NULL) { GVariant *variant = NULL; variant = g_value_get_variant (value); if (!g_variant_type_equal ( g_variant_get_type (variant), (const GVariantType *) schema->scalar.vtype)) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_DOES_NOT_CONFORM, "Failed to validate YAML against schema at line %zu, column %zu: " "the alias needs to be of scalar type %s here", event->start_mark.line, event->start_mark.column, schema->scalar.vtype); destroy_gvalue (value); yaml_event_delete (event); return FALSE; } } else { g_autofree char *anchor = NULL; g_autoptr (GVariant) variant = NULL; EXPECT (YAML_SCALAR_EVENT, "scalar"); anchor = bz_maybe_strdup ((const char *) event->data.scalar.anchor); if (g_variant_type_equal ((const GVariantType *) schema->scalar.vtype, G_VARIANT_TYPE_STRING)) variant = g_variant_new_string ((const char *) event->data.scalar.value); else { g_autoptr (GError) local_error = NULL; variant = g_variant_parse ( (const GVariantType *) schema->scalar.vtype, (const char *) event->data.scalar.value, NULL, NULL, &local_error); if (variant == NULL) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_BAD_SCALAR, "Failed to parse scalar variant at line %zu, column %zu: " "%s", event->start_mark.line, event->start_mark.column, local_error->message); yaml_event_delete (event); return FALSE; } } value = make_gvalue_alloc (G_TYPE_VARIANT); g_value_set_variant (value, g_steal_pointer (&variant)); if (anchor != NULL) g_hash_table_replace ( anchors, g_steal_pointer (&anchor), copy_gvalue_alloc (value)); } g_hash_table_replace (output, join_path_stack (path_stack), value); } break; case KIND_OBJECT: { g_autoptr (GObject) object = NULL; GValue *value = NULL; TRY_ALIAS (value, schema->object.type, "object"); if (value == NULL) { object = parse_object ( self, parser, event, schema->object.type, schema->object.type_hints, anchors, NULL, error); if (object == NULL) /* event is already cleaned up */ return FALSE; value = make_gvalue_alloc (schema->object.type); g_value_set_object (value, object); } g_hash_table_replace (output, join_path_stack (path_stack), value); } break; case KIND_LIST: { GValue *value = NULL; TRY_ALIAS (value, G_TYPE_PTR_ARRAY, "list"); if (value == NULL) { g_autofree char *anchor = NULL; g_autoptr (GPtrArray) list = NULL; EXPECT (YAML_SEQUENCE_START_EVENT, "list"); anchor = bz_maybe_strdup ((const char *) event->data.sequence_start.anchor); list = g_ptr_array_new_with_free_func ((GDestroyNotify) destroy_gvalue); for (;;) { g_autoptr (GHashTable) list_output = NULL; g_autoptr (GPtrArray) list_path_stack = NULL; gboolean result = FALSE; GValue *append = NULL; NEXT_EVENT (); if (event->type == YAML_SEQUENCE_END_EVENT) break; list_output = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) destroy_gvalue); list_path_stack = g_ptr_array_new_with_free_func (g_free); result = parse ( self, parser, event, FALSE, FALSE, schema->list.child, list_output, anchors, list_path_stack, error); if (!result) /* event is already cleaned up */ return FALSE; append = make_gvalue_alloc (G_TYPE_HASH_TABLE); g_value_set_boxed (append, list_output); g_ptr_array_add (list, append); } value = make_gvalue_alloc (G_TYPE_PTR_ARRAY); g_value_set_boxed (value, list); if (anchor != NULL) g_hash_table_replace ( anchors, g_steal_pointer (&anchor), copy_gvalue_alloc (value)); } g_hash_table_replace (output, join_path_stack (path_stack), value); } break; case KIND_MAPPINGS: { EXPECT (YAML_MAPPING_START_EVENT, "mappings"); for (;;) { g_autofree char *key = NULL; SchemaNodeData *map_schema = NULL; gboolean result = FALSE; NEXT_EVENT (); if (event->type == YAML_MAPPING_END_EVENT) break; EXPECT (YAML_SCALAR_EVENT, "scalar key"); key = g_strdup ((const char *) event->data.scalar.value); map_schema = g_hash_table_lookup (schema->mappings.children, key); if (map_schema == NULL) { g_autofree char *path = NULL; path = join_path_stack (path_stack); g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_DOES_NOT_CONFORM, "Failed to validate YAML against schema at line %zu, column %zu: " "key '%s' shouldn't exist at path %s", event->start_mark.line, event->start_mark.column, key, path); yaml_event_delete (event); return FALSE; } g_ptr_array_add (path_stack, g_steal_pointer (&key)); result = parse ( self, parser, event, TRUE, FALSE, map_schema, output, anchors, path_stack, error); if (!result) /* event is already cleaned up */ return FALSE; g_ptr_array_set_size (path_stack, path_stack->len - 1); } } break; default: g_assert_not_reached (); } if (toplevel) { NEXT_EVENT (); EXPECT (YAML_DOCUMENT_END_EVENT, "end of document"); NEXT_EVENT (); EXPECT (YAML_STREAM_END_EVENT, "end of stream"); } yaml_event_delete (event); return TRUE; } static GObject * parse_object (BzYamlParser *self, yaml_parser_t *parser, yaml_event_t *event, GType object_gtype, GHashTable *type_hints, GHashTable *anchors, const char *prop_path, GError **error) { GValue *value = NULL; g_autofree char *object_anchor = NULL; g_autoptr (GTypeClass) gtype_class = NULL; g_autoptr (GObject) object = NULL; TRY_ALIAS (value, object_gtype, "object mapping"); if (value != NULL) { object = g_value_dup_object (value); destroy_gvalue (value); return g_steal_pointer (&object); } EXPECT (YAML_MAPPING_START_EVENT, "object mapping"); object_anchor = bz_maybe_strdup ((const char *) event->data.mapping_start.anchor); gtype_class = g_type_class_ref (object_gtype); object = g_object_new (object_gtype, NULL); for (;;) { g_autofree char *property = NULL; GParamSpec *spec = NULL; NEXT_EVENT (); if (event->type == YAML_MAPPING_END_EVENT) break; EXPECT (YAML_SCALAR_EVENT, "scalar key"); property = g_strdup ((const char *) event->data.scalar.value); spec = g_object_class_find_property (G_OBJECT_CLASS (gtype_class), property); if (spec == NULL) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_DOES_NOT_CONFORM, "Failed to validate YAML against schema at line %zu, column %zu: " "property '%s' doesn't exist on type %s", event->start_mark.line, event->start_mark.column, property, g_type_name (object_gtype)); yaml_event_delete (event); return FALSE; } NEXT_EVENT (); if (g_type_is_a (spec->value_type, G_TYPE_LIST_MODEL)) { g_autofree char *replace_prop_path = NULL; GType element_gtype = 0; g_autoptr (GListModel) list = NULL; if (prop_path != NULL) replace_prop_path = g_strdup_printf ("%s.%s", prop_path, property); element_gtype = GPOINTER_TO_SIZE (g_hash_table_lookup ( type_hints, replace_prop_path != NULL ? replace_prop_path : property)); TRY_ALIAS (value, G_TYPE_LIST_MODEL, "mappings"); if (value != NULL) { list = g_value_dup_object (value); if (!G_IS_LIST_MODEL (list) || g_list_model_get_item_type (list) != element_gtype) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_DOES_NOT_CONFORM, "Failed to validate YAML against schema at line %zu, column %zu: " "the alias needs to be a list of object type %s here", event->start_mark.line, event->start_mark.column, g_type_name (element_gtype)); destroy_gvalue (value); yaml_event_delete (event); return FALSE; } } else { g_autofree char *anchor = NULL; EXPECT (YAML_SEQUENCE_START_EVENT, "sequence"); anchor = bz_maybe_strdup ((const char *) event->data.sequence_start.anchor); if (element_gtype == GTK_TYPE_STRING_OBJECT) { list = (GListModel *) gtk_string_list_new (NULL); for (;;) { NEXT_EVENT (); if (event->type == YAML_SEQUENCE_END_EVENT) break; EXPECT (YAML_SCALAR_EVENT, "scalar list value"); gtk_string_list_append ( GTK_STRING_LIST (list), (const char *) event->data.scalar.value); } } else { if (element_gtype == 0) element_gtype = G_TYPE_OBJECT; list = (GListModel *) g_list_store_new (element_gtype); for (;;) { g_autoptr (GObject) child_object = NULL; NEXT_EVENT (); if (event->type == YAML_SEQUENCE_END_EVENT) break; child_object = parse_object ( self, parser, event, element_gtype, type_hints, anchors, replace_prop_path != NULL ? replace_prop_path : property, error); if (child_object == NULL) /* event is already cleaned up */ return FALSE; g_list_store_append (G_LIST_STORE (list), child_object); } } if (anchor != NULL) { value = make_gvalue_alloc (G_TYPE_LIST_MODEL); g_value_set_object (value, list); g_hash_table_replace ( anchors, g_steal_pointer (&anchor), value); } } g_object_set (object, property, list, NULL); } else if (g_type_is_a (spec->value_type, G_TYPE_OBJECT)) { g_autofree char *replace_prop_path = NULL; g_autoptr (GObject) prop_object = NULL; if (prop_path != NULL) replace_prop_path = g_strdup_printf ("%s.%s", prop_path, property); prop_object = parse_object ( self, parser, event, spec->value_type, type_hints, anchors, replace_prop_path != NULL ? replace_prop_path : property, error); if (prop_object == NULL) /* event is already cleaned up */ return FALSE; g_object_set (object, property, prop_object, NULL); } else if (g_type_is_a (spec->value_type, G_TYPE_ENUM)) { g_autoptr (GEnumClass) class = NULL; GEnumValue *enum_value = NULL; TRY_ALIAS (value, spec->value_type, "scalar enum value"); if (value != NULL) { g_object_set_property (object, property, value); destroy_gvalue (value); } else { g_autofree char *anchor = NULL; EXPECT (YAML_SCALAR_EVENT, "scalar enum value"); anchor = bz_maybe_strdup ((const char *) event->data.scalar.anchor); class = g_type_class_ref (spec->value_type); enum_value = g_enum_get_value_by_nick ( class, (const char *) event->data.scalar.value); if (enum_value == NULL) enum_value = g_enum_get_value_by_name ( class, (const char *) event->data.scalar.value); if (enum_value == NULL) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_BAD_SCALAR, "Failed to parse scalar enum at line %zu, column %zu: " "'%s' does not exist in type %s", event->start_mark.line, event->start_mark.column, (const char *) event->data.scalar.value, g_type_name (spec->value_type)); yaml_event_delete (event); return FALSE; } if (anchor != NULL) { value = make_gvalue_alloc (spec->value_type); g_value_set_enum (value, enum_value->value); g_hash_table_replace ( anchors, g_steal_pointer (&anchor), value); } g_object_set (object, property, enum_value->value, NULL); } } else { g_autoptr (GError) local_error = NULL; const GVariantType *vtype = NULL; g_autoptr (GVariant) variant = NULL; TRY_ALIAS (value, spec->value_type, "scalar"); if (value != NULL) { g_object_set_property (object, property, value); destroy_gvalue (value); } else { g_autofree char *anchor = NULL; if (spec->value_type == G_TYPE_STRING && event->type == YAML_MAPPING_START_EVENT) { /* Handle optional translated strings */ const char *const *langs = NULL; g_autofree char *english = NULL; anchor = bz_maybe_strdup ((const char *) event->data.mapping_start.anchor); langs = g_get_language_names (); for (;;) { g_autofree char *code = NULL; NEXT_EVENT (); if (event->type == YAML_MAPPING_END_EVENT) break; EXPECT (YAML_SCALAR_EVENT, "scalar key language code"); if (variant != NULL) continue; code = g_strdup ((const char *) event->data.scalar.value); NEXT_EVENT (); EXPECT (YAML_SCALAR_EVENT, "scalar translated string"); if (g_strv_contains (langs, code)) variant = g_variant_new_string ((const char *) event->data.scalar.value); else if (english == NULL && g_strcmp0 (code, "en") == 0) english = g_strdup ((const char *) event->data.scalar.value); } if (variant == NULL) variant = g_variant_new_string (english != NULL ? english : "NULL"); } else { EXPECT (YAML_SCALAR_EVENT, "scalar value"); anchor = bz_maybe_strdup ((const char *) event->data.scalar.anchor); switch (spec->value_type) { case G_TYPE_BOOLEAN: vtype = G_VARIANT_TYPE_BOOLEAN; break; case G_TYPE_INT: vtype = G_VARIANT_TYPE_INT32; break; case G_TYPE_INT64: vtype = G_VARIANT_TYPE_INT64; break; case G_TYPE_UINT: vtype = G_VARIANT_TYPE_UINT32; break; case G_TYPE_UINT64: vtype = G_VARIANT_TYPE_UINT64; break; case G_TYPE_DOUBLE: case G_TYPE_FLOAT: vtype = G_VARIANT_TYPE_DOUBLE; break; case G_TYPE_STRING: default: vtype = G_VARIANT_TYPE_STRING; break; } if (g_variant_type_equal (vtype, G_VARIANT_TYPE_STRING)) variant = g_variant_new_string ((const char *) event->data.scalar.value); else { variant = g_variant_parse ( vtype, (const char *) event->data.scalar.value, NULL, NULL, &local_error); if (variant == NULL) { g_set_error ( error, BZ_YAML_ERROR, BZ_YAML_ERROR_BAD_SCALAR, "Failed to parse scalar variant at line %zu, column %zu: %s", event->start_mark.line, event->start_mark.column, local_error->message); yaml_event_delete (event); return FALSE; } } } if (anchor != NULL) value = make_gvalue_alloc (spec->value_type); switch (spec->value_type) { case G_TYPE_BOOLEAN: g_object_set (object, property, g_variant_get_boolean (variant), NULL); if (anchor != NULL) g_value_set_boolean (value, g_variant_get_boolean (variant)); break; case G_TYPE_INT: g_object_set (object, property, g_variant_get_int32 (variant), NULL); if (anchor != NULL) g_value_set_int (value, g_variant_get_int32 (variant)); break; case G_TYPE_INT64: g_object_set (object, property, g_variant_get_int64 (variant), NULL); if (anchor != NULL) g_value_set_int64 (value, g_variant_get_int64 (variant)); break; case G_TYPE_UINT: g_object_set (object, property, g_variant_get_uint32 (variant), NULL); if (anchor != NULL) g_value_set_uint (value, g_variant_get_uint32 (variant)); break; case G_TYPE_UINT64: g_object_set (object, property, g_variant_get_uint64 (variant), NULL); if (anchor != NULL) g_value_set_uint64 (value, g_variant_get_uint64 (variant)); break; case G_TYPE_DOUBLE: case G_TYPE_FLOAT: g_object_set (object, property, g_variant_get_double (variant), NULL); if (anchor != NULL) g_value_set_double (value, g_variant_get_double (variant)); break; case G_TYPE_STRING: default: g_object_set (object, property, g_variant_get_string (variant, NULL), NULL); if (anchor != NULL) g_value_set_string (value, g_variant_get_string (variant, NULL)); break; } if (anchor != NULL) g_hash_table_replace ( anchors, g_steal_pointer (&anchor), value); } } } if (object_anchor != NULL) { value = make_gvalue_alloc (G_TYPE_LIST_MODEL); g_value_set_object (value, object); g_hash_table_replace ( anchors, g_steal_pointer (&object_anchor), value); } return g_steal_pointer (&object); } static char * join_path_stack (GPtrArray *path_stack) { GString *string = NULL; if (path_stack->len == 0) return g_strdup ("/"); string = g_string_new (NULL); for (guint i = 0; i < path_stack->len; i++) { const char *component = NULL; component = g_ptr_array_index (path_stack, i); g_string_append_printf (string, "/%s", component); } return g_string_free_and_steal (string); } static void destroy_gvalue (GValue *value) { g_value_unset (value); g_free (value); } static GValue * make_gvalue_alloc (GType type) { GValue *ret = NULL; ret = g_new0 (typeof (*ret), 1); g_value_init (ret, type); return ret; } static GValue * copy_gvalue_alloc (GValue *value) { GValue *ret = NULL; ret = g_new0 (typeof (*ret), 1); g_value_init (ret, value->g_type); g_value_copy (value, ret); return ret; } static void deinit_schema_node (gpointer data) { SchemaNodeData *self = data; switch (self->kind) { case KIND_SCALAR: g_clear_pointer (&self->scalar.vtype, g_free); break; case KIND_OBJECT: g_clear_pointer (&self->object.type_hints, g_hash_table_unref); break; case KIND_LIST: g_clear_pointer (&self->list.child, schema_node_data_unref); break; case KIND_MAPPINGS: g_clear_pointer (&self->mappings.children, g_hash_table_unref); break; default: g_assert_not_reached (); } } bazaar-org-bazaar-b6e9a65/src/bz-yaml-parser.h000066400000000000000000000023321522167256300212360ustar00rootroot00000000000000/* bz-yaml-parser.h * * Copyright 2025 Adam Masciola * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_YAML_ERROR (bz_yaml_error_quark ()) GQuark bz_yaml_error_quark (void); typedef enum { BZ_YAML_ERROR_INVALID_YAML = 0, BZ_YAML_ERROR_DOES_NOT_CONFORM, BZ_YAML_ERROR_BAD_SCALAR, } BzYamlError; #define BZ_TYPE_YAML_PARSER (bz_yaml_parser_get_type ()) G_DECLARE_FINAL_TYPE (BzYamlParser, bz_yaml_parser, BZ, YAML_PARSER, GObject) BzYamlParser * bz_yaml_parser_new_for_resource_schema (const char *path); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/bz-zoom.c000066400000000000000000000473361522167256300177760ustar00rootroot00000000000000/* bz-zoom.c * * Copyright 2025 Alexander Vanhee * * 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 */ #include "bz-zoom.h" #include #include #define OVERPAN_FACTOR 0.5 struct _BzZoom { GtkWidget parent_instance; GtkWidget *child; double zoom_level; double min_zoom; double max_zoom; double pan_x; double pan_y; double mouse_x; double mouse_y; double gesture_start_zoom; double drag_start_x; double drag_start_y; gboolean is_dragging; AdwAnimation *zoom_animation; double target_zoom; double target_pan_x; double target_pan_y; double start_zoom; double start_pan_x; double start_pan_y; GtkGesture *zoom_gesture; GtkGesture *drag_gesture; GtkEventController *scroll_controller; GtkEventController *motion_controller; }; G_DEFINE_FINAL_TYPE (BzZoom, bz_zoom, GTK_TYPE_WIDGET) enum { PROP_0, PROP_CHILD, PROP_ZOOM_LEVEL, PROP_MIN_ZOOM, PROP_MAX_ZOOM, LAST_PROP }; static GParamSpec *props[LAST_PROP] = { 0 }; static void bz_zoom_constrain_pan (BzZoom *self); static void bz_zoom_zoom_at_point (BzZoom *self, double zoom_factor, double center_x, double center_y); static void bz_zoom_dispose (GObject *object) { BzZoom *self; self = BZ_ZOOM (object); g_clear_pointer (&self->child, gtk_widget_unparent); g_clear_object (&self->zoom_animation); G_OBJECT_CLASS (bz_zoom_parent_class)->dispose (object); } static void bz_zoom_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BzZoom *self; self = BZ_ZOOM (object); switch (prop_id) { case PROP_CHILD: g_value_set_object (value, bz_zoom_get_child (self)); break; case PROP_ZOOM_LEVEL: g_value_set_double (value, bz_zoom_get_zoom_level (self)); break; case PROP_MIN_ZOOM: g_value_set_double (value, bz_zoom_get_min_zoom (self)); break; case PROP_MAX_ZOOM: g_value_set_double (value, bz_zoom_get_max_zoom (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void bz_zoom_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BzZoom *self; self = BZ_ZOOM (object); switch (prop_id) { case PROP_CHILD: bz_zoom_set_child (self, g_value_get_object (value)); break; case PROP_ZOOM_LEVEL: bz_zoom_set_zoom_level (self, g_value_get_double (value)); break; case PROP_MIN_ZOOM: bz_zoom_set_min_zoom (self, g_value_get_double (value)); break; case PROP_MAX_ZOOM: bz_zoom_set_max_zoom (self, g_value_get_double (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void on_motion (BzZoom *self, double x, double y, GtkEventControllerMotion *controller) { self->mouse_x = x; self->mouse_y = y; } static void on_zoom_begin (BzZoom *self, GdkEventSequence *sequence, GtkGesture *gesture) { self->gesture_start_zoom = self->zoom_level; } static void on_zoom_changed (BzZoom *self, double scale, GtkGesture *gesture) { double target_zoom; double zoom_factor; double center_x; double center_y; target_zoom = self->gesture_start_zoom * scale; if (self->zoom_level > 0) zoom_factor = target_zoom / self->zoom_level; else zoom_factor = 1.0; gtk_gesture_get_bounding_box_center (gesture, ¢er_x, ¢er_y); bz_zoom_zoom_at_point (self, zoom_factor, center_x, center_y); } static gboolean on_scroll (BzZoom *self, double dx, double dy, GtkEventControllerScroll *controller) { GdkEvent *event; GdkDevice *device; GdkInputSource source; double zoom_factor; event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller)); if (event == NULL) return GDK_EVENT_PROPAGATE; device = gdk_event_get_device (event); if (device == NULL) return GDK_EVENT_PROPAGATE; source = gdk_device_get_source (device); if (source != GDK_SOURCE_MOUSE) return GDK_EVENT_PROPAGATE; zoom_factor = dy < 0 ? 1.1 : 0.9; bz_zoom_zoom_at_point (self, zoom_factor, self->mouse_x, self->mouse_y); return GDK_EVENT_STOP; } static void on_drag_begin (BzZoom *self, double start_x, double start_y, GtkGesture *gesture) { if (!bz_zoom_is_transformed(self)) { gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); return; } self->drag_start_x = self->pan_x; self->drag_start_y = self->pan_y; self->is_dragging = TRUE; } static void on_drag_update (BzZoom *self, double offset_x, double offset_y, GtkGesture *gesture) { if (!self->is_dragging) return; self->pan_x = self->drag_start_x + offset_x; self->pan_y = self->drag_start_y + offset_y; bz_zoom_constrain_pan (self); gtk_widget_queue_draw (GTK_WIDGET (self)); } static void on_drag_end (BzZoom *self, double offset_x, double offset_y, GtkGesture *gesture) { self->is_dragging = FALSE; } static void bz_zoom_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { BzZoom *self; int width; int height; GskTransform *transform; graphene_point_t point; self = BZ_ZOOM (widget); width = gtk_widget_get_width (widget); height = gtk_widget_get_height (widget); if (width <= 0 || height <= 0) return; transform = NULL; graphene_point_init (&point, width / 2.0 + self->pan_x, height / 2.0 + self->pan_y); transform = gsk_transform_translate (transform, &point); /* See bz_zoom_size_allocate */ // transform = gsk_transform_scale (transform, self->zoom_level, self->zoom_level); graphene_point_init ( &point, -(width * self->zoom_level) / 2.0, -(height * self->zoom_level) / 2.0); transform = gsk_transform_translate (transform, &point); gtk_snapshot_save (snapshot); gtk_snapshot_transform (snapshot, transform); if (self->child) gtk_widget_snapshot_child (widget, self->child, snapshot); gtk_snapshot_restore (snapshot); gsk_transform_unref (transform); } static void bz_zoom_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { BzZoom *self; self = BZ_ZOOM (widget); if (self->child) gtk_widget_measure (self->child, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); else { *minimum = 0; *natural = 0; } } static void bz_zoom_size_allocate (GtkWidget *widget, int width, int height, int baseline) { BzZoom *self; self = BZ_ZOOM (widget); if (self->child) /* TODO: maybe add a property to control whether the child is artificially scaled? */ gtk_widget_allocate ( self->child, self->zoom_level * width, self->zoom_level * height, baseline, NULL); bz_zoom_constrain_pan (self); } static void bz_zoom_class_init (BzZoomClass *klass) { GObjectClass *object_class; GtkWidgetClass *widget_class; object_class = G_OBJECT_CLASS (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = bz_zoom_dispose; object_class->get_property = bz_zoom_get_property; object_class->set_property = bz_zoom_set_property; widget_class->snapshot = bz_zoom_snapshot; widget_class->measure = bz_zoom_measure; widget_class->size_allocate = bz_zoom_size_allocate; props[PROP_CHILD] = g_param_spec_object ( "child", NULL, NULL, GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_ZOOM_LEVEL] = g_param_spec_double ( "zoom-level", NULL, NULL, 0.1, 10.0, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MIN_ZOOM] = g_param_spec_double ( "min-zoom", NULL, NULL, 0.1, 1.0, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_MAX_ZOOM] = g_param_spec_double ( "max-zoom", NULL, NULL, 1.0, 10.0, 5.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, props); } static void bz_zoom_init (BzZoom *self) { self->zoom_level = 1.0; self->min_zoom = 1.0; self->max_zoom = 5.0; self->pan_x = 0.0; self->pan_y = 0.0; self->mouse_x = 0.0; self->mouse_y = 0.0; self->gesture_start_zoom = 1.0; self->is_dragging = FALSE; self->zoom_gesture = gtk_gesture_zoom_new (); g_signal_connect_swapped (self->zoom_gesture, "begin", G_CALLBACK (on_zoom_begin), self); g_signal_connect_swapped (self->zoom_gesture, "scale-changed", G_CALLBACK (on_zoom_changed), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (self->zoom_gesture)); self->drag_gesture = gtk_gesture_drag_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->drag_gesture), GDK_BUTTON_PRIMARY); g_signal_connect_swapped (self->drag_gesture, "drag-begin", G_CALLBACK (on_drag_begin), self); g_signal_connect_swapped (self->drag_gesture, "drag-update", G_CALLBACK (on_drag_update), self); g_signal_connect_swapped (self->drag_gesture, "drag-end", G_CALLBACK (on_drag_end), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (self->drag_gesture)); self->scroll_controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL | GTK_EVENT_CONTROLLER_SCROLL_HORIZONTAL); g_signal_connect_swapped (self->scroll_controller, "scroll", G_CALLBACK (on_scroll), self); gtk_widget_add_controller (GTK_WIDGET (self), self->scroll_controller); self->motion_controller = gtk_event_controller_motion_new (); g_signal_connect_swapped (self->motion_controller, "motion", G_CALLBACK (on_motion), self); gtk_widget_add_controller (GTK_WIDGET (self), self->motion_controller); gtk_widget_set_focusable (GTK_WIDGET (self), TRUE); } GtkWidget * bz_zoom_new (void) { return g_object_new (BZ_TYPE_ZOOM, NULL); } GtkWidget * bz_zoom_get_child (BzZoom *self) { g_return_val_if_fail (BZ_IS_ZOOM (self), NULL); return self->child; } void bz_zoom_set_child (BzZoom *self, GtkWidget *child) { g_return_if_fail (BZ_IS_ZOOM (self)); g_return_if_fail (child == NULL || GTK_IS_WIDGET (child)); if (self->child == child) return; g_clear_pointer (&self->child, gtk_widget_unparent); self->child = child; if (self->child) gtk_widget_set_parent (self->child, GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CHILD]); } double bz_zoom_get_zoom_level (BzZoom *self) { g_return_val_if_fail (BZ_IS_ZOOM (self), 1.0); return self->zoom_level; } void bz_zoom_set_zoom_level (BzZoom *self, double zoom_level) { double new_zoom; g_return_if_fail (BZ_IS_ZOOM (self)); new_zoom = CLAMP (zoom_level, self->min_zoom, self->max_zoom); if (fabs (new_zoom - self->zoom_level) < 0.001) return; self->zoom_level = new_zoom; bz_zoom_constrain_pan (self); gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ZOOM_LEVEL]); } gboolean bz_zoom_is_transformed (BzZoom *self) { g_return_val_if_fail (BZ_IS_ZOOM (self), FALSE); return fabs (self->zoom_level - 1.0) >= 0.001 || fabs (self->pan_x) >= 0.5 || fabs (self->pan_y) >= 0.5; } double bz_zoom_get_min_zoom (BzZoom *self) { g_return_val_if_fail (BZ_IS_ZOOM (self), 1); return self->min_zoom; } void bz_zoom_set_min_zoom (BzZoom *self, double min_zoom) { g_return_if_fail (BZ_IS_ZOOM (self)); self->min_zoom = min_zoom; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MIN_ZOOM]); } double bz_zoom_get_max_zoom (BzZoom *self) { g_return_val_if_fail (BZ_IS_ZOOM (self), 5.0); return self->max_zoom; } void bz_zoom_set_max_zoom (BzZoom *self, double max_zoom) { g_return_if_fail (BZ_IS_ZOOM (self)); self->max_zoom = max_zoom; g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MAX_ZOOM]); } static void bz_zoom_constrain_pan (BzZoom *self) { int widget_width; int widget_height; double overpan_x; double overpan_y; double range_x; double range_y; double max_pan_x; double max_pan_y; widget_width = gtk_widget_get_width (GTK_WIDGET (self)); widget_height = gtk_widget_get_height (GTK_WIDGET (self)); if (widget_width <= 0 || widget_height <= 0) return; overpan_x = widget_width * OVERPAN_FACTOR; overpan_y = widget_height * OVERPAN_FACTOR; range_x = MAX (0, (widget_width * self->zoom_level - widget_width) / 2.0); range_y = MAX (0, (widget_height * self->zoom_level - widget_height) / 2.0); max_pan_x = range_x + overpan_x; max_pan_y = range_y + overpan_y; self->pan_x = CLAMP (self->pan_x, -max_pan_x, max_pan_x); self->pan_y = CLAMP (self->pan_y, -max_pan_y, max_pan_y); } static void bz_zoom_zoom_at_point (BzZoom *self, double zoom_factor, double center_x, double center_y) { double old_zoom; double new_zoom; int widget_width; int widget_height; double widget_center_x; double widget_center_y; double old_content_x; double old_content_y; double zoom_ratio; double new_content_x; double new_content_y; old_zoom = self->zoom_level; new_zoom = old_zoom * zoom_factor; new_zoom = CLAMP (new_zoom, self->min_zoom, self->max_zoom); if (fabs (new_zoom - old_zoom) < 0.001) return; widget_width = gtk_widget_get_width (GTK_WIDGET (self)); widget_height = gtk_widget_get_height (GTK_WIDGET (self)); widget_center_x = widget_width / 2.0; widget_center_y = widget_height / 2.0; old_content_x = center_x - widget_center_x - self->pan_x; old_content_y = center_y - widget_center_y - self->pan_y; zoom_ratio = new_zoom / old_zoom; new_content_x = old_content_x * zoom_ratio; new_content_y = old_content_y * zoom_ratio; self->zoom_level = new_zoom; self->pan_x = center_x - widget_center_x - new_content_x; self->pan_y = center_y - widget_center_y - new_content_y; bz_zoom_constrain_pan (self); gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ZOOM_LEVEL]); } static void on_animation_value (double value, BzZoom *self) { self->zoom_level = self->start_zoom + (self->target_zoom - self->start_zoom) * value; self->pan_x = self->start_pan_x + (self->target_pan_x - self->start_pan_x) * value; self->pan_y = self->start_pan_y + (self->target_pan_y - self->start_pan_y) * value; bz_zoom_constrain_pan (self); gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ZOOM_LEVEL]); } static void bz_zoom_animate_to (BzZoom *self, double target_zoom, double target_pan_x, double target_pan_y) { AdwAnimationTarget *target; if (self->zoom_animation) adw_animation_skip (self->zoom_animation); self->start_zoom = self->zoom_level; self->start_pan_x = self->pan_x; self->start_pan_y = self->pan_y; self->target_zoom = target_zoom; self->target_pan_x = target_pan_x; self->target_pan_y = target_pan_y; target = adw_callback_animation_target_new ((AdwAnimationTargetFunc) on_animation_value, self, NULL); self->zoom_animation = adw_timed_animation_new (GTK_WIDGET (self), 0, 1, 150, target); adw_timed_animation_set_easing (ADW_TIMED_ANIMATION (self->zoom_animation), ADW_EASE_OUT_CUBIC); adw_animation_play (self->zoom_animation); } void bz_zoom_zoom_in (BzZoom *self) { int width; int height; double old_zoom; double new_zoom; double widget_center_x; double widget_center_y; double center_x; double center_y; double old_content_x; double old_content_y; double zoom_ratio; double new_content_x; double new_content_y; double new_pan_x; double new_pan_y; g_return_if_fail (BZ_IS_ZOOM (self)); width = gtk_widget_get_width (GTK_WIDGET (self)); height = gtk_widget_get_height (GTK_WIDGET (self)); center_x = width / 2.0; center_y = height / 2.0; old_zoom = self->zoom_level; new_zoom = old_zoom * 1.2; new_zoom = CLAMP (new_zoom, self->min_zoom, self->max_zoom); if (fabs (new_zoom - old_zoom) < 0.001) return; widget_center_x = width / 2.0; widget_center_y = height / 2.0; old_content_x = center_x - widget_center_x - self->pan_x; old_content_y = center_y - widget_center_y - self->pan_y; zoom_ratio = new_zoom / old_zoom; new_content_x = old_content_x * zoom_ratio; new_content_y = old_content_y * zoom_ratio; new_pan_x = center_x - widget_center_x - new_content_x; new_pan_y = center_y - widget_center_y - new_content_y; bz_zoom_animate_to (self, new_zoom, new_pan_x, new_pan_y); } void bz_zoom_zoom_out (BzZoom *self) { int width; int height; double old_zoom; double new_zoom; double widget_center_x; double widget_center_y; double center_x; double center_y; double old_content_x; double old_content_y; double zoom_ratio; double new_content_x; double new_content_y; double new_pan_x; double new_pan_y; g_return_if_fail (BZ_IS_ZOOM (self)); width = gtk_widget_get_width (GTK_WIDGET (self)); height = gtk_widget_get_height (GTK_WIDGET (self)); center_x = width / 2.0; center_y = height / 2.0; old_zoom = self->zoom_level; new_zoom = old_zoom * 0.8; new_zoom = CLAMP (new_zoom, self->min_zoom, self->max_zoom); if (fabs (new_zoom - old_zoom) < 0.001) return; widget_center_x = width / 2.0; widget_center_y = height / 2.0; old_content_x = center_x - widget_center_x - self->pan_x; old_content_y = center_y - widget_center_y - self->pan_y; zoom_ratio = new_zoom / old_zoom; new_content_x = old_content_x * zoom_ratio; new_content_y = old_content_y * zoom_ratio; new_pan_x = center_x - widget_center_x - new_content_x; new_pan_y = center_y - widget_center_y - new_content_y; bz_zoom_animate_to (self, new_zoom, new_pan_x, new_pan_y); } void bz_zoom_reset (BzZoom *self) { g_return_if_fail (BZ_IS_ZOOM (self)); bz_zoom_animate_to (self, 1.0, 0.0, 0.0); } void bz_zoom_fit_to_window (BzZoom *self) { g_return_if_fail (BZ_IS_ZOOM (self)); bz_zoom_animate_to (self, 1.0, 0.0, 0.0); } /* End of bz-zoom.c */ bazaar-org-bazaar-b6e9a65/src/bz-zoom.h000066400000000000000000000032631522167256300177720ustar00rootroot00000000000000/* bz-zoom.h * * Copyright 2025 Alexander Vanhee * * 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 */ #pragma once #include G_BEGIN_DECLS #define BZ_TYPE_ZOOM (bz_zoom_get_type ()) G_DECLARE_FINAL_TYPE (BzZoom, bz_zoom, BZ, ZOOM, GtkWidget) GtkWidget *bz_zoom_new (void); GtkWidget *bz_zoom_get_child (BzZoom *self); void bz_zoom_set_child (BzZoom *self, GtkWidget *child); double bz_zoom_get_zoom_level (BzZoom *self); void bz_zoom_set_zoom_level (BzZoom *self, double zoom_level); double bz_zoom_get_min_zoom (BzZoom *self); void bz_zoom_set_min_zoom (BzZoom *self, double min_zoom); double bz_zoom_get_max_zoom (BzZoom *self); void bz_zoom_set_max_zoom (BzZoom *self, double max_zoom); gboolean bz_zoom_is_transformed (BzZoom *self); void bz_zoom_zoom_in (BzZoom *self); void bz_zoom_zoom_out (BzZoom *self); void bz_zoom_reset (BzZoom *self); void bz_zoom_fit_to_window (BzZoom *self); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/curated-config-schema.xml000066400000000000000000000005301522167256300230700ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/dl-worker.c000066400000000000000000000130141522167256300202710ustar00rootroot00000000000000/* dl-worker.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::DL-WORKER-SUBPROCESS" #include "bz-env.h" #include "bz-global-net.h" #include "bz-util.h" BZ_DEFINE_DATA ( main, Main, { GMainLoop *loop; GIOChannel *stdout_channel; }, BZ_RELEASE_DATA (loop, g_main_loop_unref); BZ_RELEASE_DATA (stdout_channel, g_io_channel_unref)); BZ_DEFINE_DATA ( download, Download, { char *src; char *dest; GIOChannel *stdout_channel; }, BZ_RELEASE_DATA (src, g_free); BZ_RELEASE_DATA (dest, g_free); BZ_RELEASE_DATA (stdout_channel, g_io_channel_unref)); static DexFuture * read_stdin (MainData *data); static DexFuture * download_fiber (DownloadData *data); int main (int argc, char *argv[]) { g_autoptr (GIOChannel) stdout_channel = NULL; g_autoptr (GMainLoop) main_loop = NULL; g_autoptr (MainData) data = NULL; g_autoptr (DexFuture) future = NULL; g_log_writer_default_set_use_stderr (TRUE); dex_init (); stdout_channel = g_io_channel_unix_new (STDOUT_FILENO); g_assert (g_io_channel_set_encoding (stdout_channel, NULL, NULL)); g_io_channel_set_buffered (stdout_channel, FALSE); main_loop = g_main_loop_new (NULL, FALSE); data = main_data_new (); data->loop = g_main_loop_ref (main_loop); data->stdout_channel = g_io_channel_ref (stdout_channel); future = dex_scheduler_spawn ( dex_thread_pool_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) read_stdin, main_data_ref (data), main_data_unref); g_main_loop_run (main_loop); return EXIT_SUCCESS; } static DexFuture * read_stdin (MainData *data) { g_autoptr (GIOChannel) stdin_channel = NULL; stdin_channel = g_io_channel_unix_new (STDIN_FILENO); for (;;) { g_autoptr (GError) local_error = NULL; g_autofree char *string = NULL; char *newline = NULL; g_autoptr (GVariant) variant = NULL; g_autofree char *src_uri = NULL; g_autofree char *dest_path = NULL; g_autoptr (DownloadData) dl_data = NULL; g_io_channel_read_line ( stdin_channel, &string, NULL, NULL, &local_error); if (string == NULL) { if (local_error != NULL) g_warning ("FATAL: Failure reading stdin channel: %s", local_error->message); g_main_loop_quit (data->loop); return NULL; } newline = g_utf8_strchr (string, -1, '\n'); if (newline != NULL) *newline = '\0'; variant = g_variant_parse ( G_VARIANT_TYPE ("(ss)"), string, NULL, NULL, &local_error); if (variant == NULL) { g_warning ("Failure parsing variant text '%s' into structure: %s\n", string, local_error->message); g_main_loop_quit (data->loop); continue; } g_variant_get (variant, "(ss)", &src_uri, &dest_path); dl_data = download_data_new (); dl_data->src = g_steal_pointer (&src_uri); dl_data->dest = g_steal_pointer (&dest_path); dl_data->stdout_channel = g_io_channel_ref (data->stdout_channel); dex_future_disown (dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) download_fiber, download_data_ref (dl_data), download_data_unref)); } return NULL; } static DexFuture * download_fiber (DownloadData *data) { gboolean success = FALSE; g_autoptr (GError) local_error = NULL; g_autoptr (GFile) dest_file = NULL; g_autoptr (GFileOutputStream) dest_output = NULL; g_autoptr (SoupMessage) message = NULL; g_autoptr (GVariant) variant = NULL; g_autofree char *output = NULL; g_autofree char *output_plus_nl = NULL; dest_file = g_file_new_for_path (data->dest); dest_output = g_file_replace ( dest_file, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error); if (dest_output == NULL) { g_warning ("%s", local_error->message); goto done; } message = soup_message_new (SOUP_METHOD_GET, data->src); success = dex_await (bz_send_with_global_http_session_then_splice_into ( message, G_OUTPUT_STREAM (dest_output)), &local_error); if (!success) { g_warning ("%s", local_error->message); goto done; } done: variant = g_variant_new ("(sb)", data->dest, success); output = g_variant_print (variant, TRUE); output_plus_nl = g_strdup_printf ("%s\n", output); g_io_channel_write_chars (data->stdout_channel, output_plus_nl, -1, NULL, NULL); return dex_future_new_true (); } bazaar-org-bazaar-b6e9a65/src/gen_gobject.sh000077500000000000000000000476631522167256300210450ustar00rootroot00000000000000#!/bin/sh # gen_gobject.sh # author: kolunmi die() { echo "Usage: $0 [--header|--code] [spec] [output]" 1>&2 echo " [--header|--code] whether to output the header (.h) or code (.c)" 1>&2 echo " [spec] spec keyfile" 1>&2 echo " [output] output file" 1>&2 echo "" 1>&2 echo " The spec file should contain these keys:" 1>&2 echo " [prefix] lower case prefix, EX: my" 1>&2 echo " [name] lower case class name, EX: class" 1>&2 echo " [parent-prefix] prefix of parent class, EX: g" 1>&2 echo " [parent-name] name of parent class, EX: object" 1>&2 echo " [author] author name, EX: " 1>&2 echo " [include] #include for the header file (can have multiple)" 1>&2 echo " EX: " 1>&2 echo " EX: \"my-other-class.h\"" 1>&2 echo " [enum] declare an enum type (can have multiple)" 1>&2 echo " EX: my fruit_type apple orange pear" 1>&2 echo " [ensure] ensure another type (can have multiple), EX: GTK_TYPE_WIDGET" 1>&2 echo " [property] property spec (can have multiple), EX: (see below)" 1>&2 echo "" 1>&2 echo " The properties are parsed with the form:" 1>&2 echo " [name] [ctype] [gtype] [spec-type] [free (optional)] [ref (optional)]" 1>&2 echo " EX: my_widget GtkWidget GTK_TYPE_WIDGET object" 1>&2 echo " EX: my_string char G_TYPE_STRING string" 1>&2 echo " EX: my_int int G_TYPE_INT int" 1>&2 echo " EX: my_ptr_array GPtrArray G_TYPE_PTR_ARRAY boxed g_ptr_array_unref g_ptr_array_ref" 1>&2 echo "" 1>&2 echo "$@, aborting!" 1>&2 exit 1 } if [ "$#" -ne 3 ]; then die wrong number of args fi OUTPUT_TYPE="$1" SPEC_FILE="$2" OUTPUT_FILE="$3" if [ -z "$OUTPUT_TYPE" ] || [ -z "$SPEC_FILE" ] || [ -z "$OUTPUT_FILE" ]; then die one or more args are empty fi case "$OUTPUT_TYPE" in --header|--code) ;; *) die arg 1 must be '--header' or '--code' ;; esac if ! [ -f "$SPEC_FILE" ]; then die "$SPEC_FILE isn't a file" fi # if [ -e "$OUTPUT_FILE" ]; then # die "$OUTPUT_FILE already exists" # fi unset PREF unset NAME unset PAR_PREF unset PAR_NAME unset AUTHOR unset INCLUDES unset ENSURES unset ENUMS unset PROPS while IFS= read -r line; do [ -z "$line" ] && continue KEY="${line%%=*}" VAL="${line#*=}" case "$KEY" in prefix) PREF="$VAL" ;; name) NAME="$VAL" ;; parent-prefix) PAR_PREF="$VAL" ;; parent-name) PAR_NAME="$VAL" ;; author) AUTHOR="$VAL" ;; include) if [ -n "$INCLUDES" ]; then INCLUDES="${INCLUDES} #include ${VAL}" else INCLUDES="#include ${VAL}" fi ;; enum) if [ -n "$ENUMS" ]; then ENUMS="${ENUMS} ${VAL}" else ENUMS="$VAL" fi ;; ensure) if [ -n "$ENSURES" ]; then ENSURES="${ENSURES} g_type_ensure (${VAL});" else ENSURES=" g_type_ensure (${VAL});" fi ;; property) if [ -n "$PROPS" ]; then PROPS="${PROPS} ${VAL}" else PROPS="$VAL" fi ;; *) die "unknown key '${KEY}' in ${SPEC_FILE}" ;; esac done < "$SPEC_FILE" if [ -z "$PREF" ] || [ -z "$NAME" ] || [ -z "$PAR_PREF" ] || [ -z "$PAR_NAME" ] || [ -z "$AUTHOR" ] || [ -z "$PROPS" ]; then die "one or more params in $SPEC_FILE are empty" fi case "$OUTPUT_TYPE" in --header) H_FILE="$OUTPUT_FILE" C_FILE="${OUTPUT_FILE%\.h}.c" ;; --code) H_FILE="${OUTPUT_FILE%\.c}.h" C_FILE="$OUTPUT_FILE" ;; esac to_upper() { echo "$1" | tr '[a-z]' '[A-Z]' } to_pascal() { echo "$1" | sed 's/[^_]\+/\L\u&/g' | tr -d '_' } to_hyphened() { echo "$1" | tr '_' '-' } SNAKE="${PREF}_${NAME}" MACRO_PREF="$(to_upper "${PREF}")" MACRO_NAME="$(to_upper "${NAME}")" MACRO="${MACRO_PREF}_${MACRO_NAME}" TYPE="${MACRO_PREF}_TYPE_${MACRO_NAME}" PASCAL="$(to_pascal "${SNAKE}")" HYPHEN_NAME="$(to_hyphened "${NAME}")" HYPHEN="$(to_hyphened "${PREF}")-${HYPHEN_NAME}" PAR_SNAKE="${PAR_PREF}_${PAR_NAME}" PAR_MACRO_PREF="$(to_upper "${PAR_PREF}")" PAR_MACRO_NAME="$(to_upper "${PAR_NAME}")" PAR_MACRO="${PAR_MACRO_PREF}_${PAR_MACRO_NAME}" PAR_TYPE="${PAR_MACRO_PREF}_TYPE_${PAR_MACRO_NAME}" PAR_PASCAL="$(to_pascal "${PAR_SNAKE}")" PAR_HYPHEN_NAME="$(to_hyphened "${PAR_NAME}")" PAR_HYPHEN="$(to_hyphened "${PAR_PREF}")-${PAR_HYPHEN_NAME}" YEAR="$(date +'%Y')" print_enums () { HEADER="$1" [ -z "$ENUMS" ] && return if [ "$HEADER" = header ]; then while IFS= read -r line; do set -- $line LOC_PREF="$1" LOC_NAME="$2" LOC_SNAKE="${LOC_PREF}_${LOC_NAME}" LOC_SNAKE_UPPER="$(to_upper "$LOC_SNAKE")" LOC_TYPE="$(to_upper "$LOC_PREF")_TYPE_$(to_upper "$LOC_NAME")" LOC_PASCAL="$(to_pascal "${LOC_SNAKE}")" shift 2 printf 'typedef enum\n{\n' for enum in "$@"; do LOC_ENUM_SYMBOL="${LOC_SNAKE_UPPER}_$(to_upper "$enum")" printf ' %s,\n' "$LOC_ENUM_SYMBOL" done printf '} %s;\n' "$LOC_PASCAL" printf 'GType %s_get_type (void);\n' "$LOC_SNAKE" printf '#define %s (%s_get_type ())\n\n' "$LOC_TYPE" "$LOC_SNAKE" done <%s, ' "${LOC_NAME}" if [ -n "$LOC_FREE" ]; then printf "$LOC_FREE" else case "$LOC_PTYPE" in string) printf 'g_free' ;; *) printf 'g_object_unref' ;; esac fi printf ');\n' ;; esac done <%s;\n' "$LOC_NAME" printf '}\n\n' fi done <%s' "$LOC_NAME" "$LOC_NAME" ;; string) if [ "$TAKE" = take ]; then printf '%s != NULL && self->%s != NULL && g_strcmp0(%s, self->%s) == 0' "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" else printf '%s == self->%s || (%s != NULL && self->%s != NULL && g_strcmp0(%s, self->%s) == 0)' "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" "$LOC_NAME" fi ;; *) printf '%s == self->%s' "$LOC_NAME" "$LOC_NAME" ;; esac if [ "$TAKE" = take ]; then printf '){\n ' case "$LOC_PTYPE" in char|uchar|boolean|int|uint|long|ulong|int64|uint64|unichar|enum|flags|float|double) ;; *) if [ -n "$LOC_FREE" ]; then printf "$LOC_FREE" else case "$LOC_PTYPE" in string) printf 'g_free' ;; *) printf 'g_object_unref' ;; esac fi printf ' (%s);\n' "$LOC_NAME" ;; esac printf ' return;\n }\n\n' else printf ')\n return;\n\n' fi case "$LOC_PTYPE" in char|uchar|boolean|int|uint|long|ulong|int64|uint64|unichar|enum|flags|float|double) ;; *) printf ' g_clear_pointer (&self->%s, ' "$LOC_NAME" if [ -n "$LOC_FREE" ]; then printf "$LOC_FREE" else case "$LOC_PTYPE" in string) printf 'g_free' ;; *) printf 'g_object_unref' ;; esac fi printf ');\n' printf ' if (%s != NULL)\n ' "$LOC_NAME" ;; esac if [ "$TAKE" = take ]; then printf ' self->%s = %s' "$LOC_NAME" "$LOC_NAME" else printf ' self->%s = ' "$LOC_NAME" if [ -n "$LOC_REF" ]; then printf '%s (%s)' "$LOC_REF" "$LOC_NAME" else case "$LOC_PTYPE" in char|uchar|boolean|int|uint|long|ulong|int64|uint64|unichar|enum|flags|float|double) printf '%s' "$LOC_NAME" ;; string) printf 'g_strdup (%s)' "$LOC_NAME" ;; *) printf 'g_object_ref (%s)' "$LOC_NAME" ;; esac fi fi printf ';\n\n' printf ' g_object_notify_by_pspec (G_OBJECT (self), props[PROP_%s]);\n' "$(to_upper $LOC_NAME)" printf '}\n\n' fi done < "$H_FILE" <. * * SPDX-License-Identifier: GPL-3.0-or-later */ #pragma once #include $INCLUDES G_BEGIN_DECLS $(print_enums header) #define $TYPE (${SNAKE}_get_type ()) G_DECLARE_FINAL_TYPE ($PASCAL, $SNAKE, $MACRO_PREF, $MACRO_NAME, $PAR_PASCAL) $(print_functions header) $(print_get_property_methods header) $(print_set_property_methods header) $(print_set_property_methods header take) G_END_DECLS /* End of $H_FILE */ EOF [ "$OUTPUT_TYPE" = --code ] && cat > "$C_FILE" <. * * SPDX-License-Identifier: GPL-3.0-or-later */ #include "$H_FILE" $(print_enums) struct _${PASCAL} { $PAR_PASCAL parent_instance; $(print_struct) }; G_DEFINE_FINAL_TYPE ($PASCAL, $SNAKE, $PAR_TYPE); enum { $(print_prop_enums) }; static GParamSpec *props[LAST_PROP] = { 0 }; static void ${SNAKE}_dispose (GObject *object) { $PASCAL *self = $MACRO (object); $(print_dispose) G_OBJECT_CLASS (${SNAKE}_parent_class)->dispose (object); } static void ${SNAKE}_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { $PASCAL *self = $MACRO (object); switch (prop_id) { $(print_get_property) default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void ${SNAKE}_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { $PASCAL *self = $MACRO (object); switch (prop_id) { $(print_set_property) default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void ${SNAKE}_class_init (${PASCAL}Class *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); $ENSURES object_class->set_property = ${SNAKE}_set_property; object_class->get_property = ${SNAKE}_get_property; object_class->dispose = ${SNAKE}_dispose; $(print_init_properties) g_object_class_install_properties (object_class, LAST_PROP, props); } static void ${SNAKE}_init (${PASCAL} *self) { } $(print_functions) $(print_get_property_methods) $(print_set_property_methods) $(print_set_property_methods '' take) /* End of $C_FILE */ EOF exit 0 bazaar-org-bazaar-b6e9a65/src/icons/000077500000000000000000000000001522167256300173335ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Adwaita.svg000066400000000000000000000005621522167256300261740ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Audiovideo.svg000066400000000000000000000352101522167256300267100ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Create.svg000066400000000000000000000145341522167256300260310ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Develop.svg000066400000000000000000000053621522167256300262230ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Kde.svg000066400000000000000000000030641522167256300253250ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Learn.svg000066400000000000000000000225301522167256300256620ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Mobile.svg000066400000000000000000000255131522167256300260340ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Network.svg000066400000000000000000000057551522167256300262640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.New.svg000066400000000000000000000050101522167256300253440ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Play.svg000066400000000000000000000141651522167256300255330ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Popular.svg000066400000000000000000000075121522167256300262460ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Science.svg000066400000000000000000000566261522167256300262070ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.System.svg000066400000000000000000000164001522167256300261040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Trending.svg000066400000000000000000000300621522167256300263720ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Updated.svg000066400000000000000000000032311522167256300262040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Utilities.svg000066400000000000000000000135561522167256300266040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolumni.Bazaar.Work.svg000066400000000000000000000204541522167256300255460ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolunmi.Bazaar.github.svg000066400000000000000000000027731522167256300261120ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolunmi.Bazaar.gitlab.svg000066400000000000000000000040351522167256300260630ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolunmi.Bazaar.gnome.svg000066400000000000000000000024111522167256300257220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolunmi.Bazaar.google.svg000066400000000000000000000026351522167256300261010ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/io.github.kolunmi.Bazaar.kde.svg000066400000000000000000000034171522167256300253670ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/000077500000000000000000000000001522167256300211015ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/000077500000000000000000000000001522167256300225415ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/app-installed-symbolic.svg000066400000000000000000000014351522167256300276410ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/app-safety-ok-symbolic.svg000066400000000000000000000012551522167256300275640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/app-safety-unknown-symbolic.svg000066400000000000000000000025621522167256300306540ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/app-safety-unsafe-symbolic.svg000066400000000000000000000015611522167256300304340ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/auditable-code-symbolic.svg000066400000000000000000000024221522167256300277430ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/bookmark-filled-symbolic.svg000066400000000000000000000007471522167256300301530ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/bookmark-outline-symbolic.svg000066400000000000000000000012471522167256300303670ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/bug-symbolic.svg000066400000000000000000000035141522167256300256610ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/check-plain-symbolic.svg000066400000000000000000000013361522167256300272620ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/circle-filled-symbolic.svg000066400000000000000000000004051522167256300275760ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/code-symbolic.svg000066400000000000000000000014061522167256300260140ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/community-symbolic.svg000066400000000000000000000026251522167256300271320ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/connected-squares-x-symbolic.svg000066400000000000000000000022541522167256300307740ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/copy-symbolic.svg000066400000000000000000000013671522167256300260620ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/cross-large-circle-filled-symbolic.svg000066400000000000000000000016201522167256300320150ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/delay-symbolic.svg000066400000000000000000000021601522167256300261760ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/device-support-adaptive-symbolic.svg000066400000000000000000000015401522167256300316450ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/device-support-desktop-symbolic.svg000066400000000000000000000010371522167256300315220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/device-support-touch-symbolic.svg000066400000000000000000000021201522167256300311650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/device-supported-symbolic.svg000066400000000000000000000015501522167256300303640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/download-plus-symbolic.svg000066400000000000000000000034401522167256300276720ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/drive-harddisk-symbolic.svg000066400000000000000000000012141522167256300277770ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/earth-symbolic.svg000066400000000000000000000043301522167256300262040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/edit-clear-all-symbolic.svg000066400000000000000000000023131522167256300276570ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/execute-to-symbolic.svg000066400000000000000000000006221522167256300271630ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/explore-symbolic.svg000066400000000000000000000021241522167256300265560ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/external-link-symbolic.svg000066400000000000000000000024241522167256300276600ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/eye-outline-filled-symbolic.svg000066400000000000000000000015401522167256300305750ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/flathub-symbolic.svg000066400000000000000000000037161522167256300265350ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/flatpak-symbolic.svg000066400000000000000000000013241522167256300265230ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/folder-download-symbolic.svg000066400000000000000000000011661522167256300301650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/gamepad-symbolic.svg000066400000000000000000000023771522167256300265100ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/globe-symbolic.svg000066400000000000000000000052701522167256300261750ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/go-previous-symbolic.svg000066400000000000000000000011761522167256300273650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/graph2-symbolic.svg000066400000000000000000000010761522167256300262700ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/hand-openyay-symbolic.svg000066400000000000000000000014161522167256300274770ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/heart-filled-symbolic.svg000066400000000000000000000011251522167256300274400ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/heart-outline-thick-symbolic.svg000066400000000000000000000023271522167256300307650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/horizontal-arrows-disabled-symbolic.svg000066400000000000000000000026451522167256300323610ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/image-missing-symbolic.svg000066400000000000000000000015221522167256300276320ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/left-large-symbolic.svg000066400000000000000000000007431522167256300271270ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/library-symbolic.svg000066400000000000000000000021101522167256300265370ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/license-symbolic.svg000066400000000000000000000056411522167256300265310ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/media-playback-pause-symbolic.svg000066400000000000000000000010071522167256300310550ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/media-playback-start-symbolic.svg000066400000000000000000000010521522167256300310750ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/media-playback-stop-symbolic.svg000066400000000000000000000005311522167256300307260ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/meeting-symbolic.svg000066400000000000000000000010701522167256300265270ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/newspaper-symbolic.svg000066400000000000000000000015301522167256300271040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/on-the-go-symbolic.svg000066400000000000000000000103371522167256300267020ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/open-book-symbolic.svg000066400000000000000000000022271522167256300267750ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/paintbrush-symbolic.svg000066400000000000000000000010671522167256300272640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/parent-symbolic.svg000066400000000000000000000025761522167256300264040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/people-symbolic.svg000066400000000000000000000015511522167256300263670ustar00rootroot00000000000000 permissions-legacy-windowing-system-symbolic.svg000066400000000000000000000012521522167256300341640ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/permissions-microphone-symbolic.svg000066400000000000000000000007511522167256300316200ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/permissions-sandboxed-symbolic.svg000066400000000000000000000022121522167256300314160ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/permissions-screen-contents-symbolic.svg000066400000000000000000000010631522167256300325640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/permissions-system-devices-symbolic.svg000066400000000000000000000021471522167256300324220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/permissions-warning-symbolic.svg000066400000000000000000000015611522167256300311220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/person-symbolic.svg000066400000000000000000000006021522167256300264050ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/pip-out-symbolic.svg000066400000000000000000000017071522167256300265030ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/power-profile-performance-symbolic.svg000066400000000000000000000022631522167256300321750ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/proprietary-code-symbolic.svg000066400000000000000000000024131522167256300303710ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/puzzle-piece-symbolic.svg000066400000000000000000000012031522167256300275110ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/000077500000000000000000000000001522167256300242105ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/advertising-none-symbolic.svg000066400000000000000000000015721522167256300320310ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/advertising-symbolic.svg000066400000000000000000000016051522167256300310710ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/alcohol-use-none-symbolic.svg000066400000000000000000000013371522167256300317240ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/alcohol-use-symbolic.svg000066400000000000000000000012471522167256300307670ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/audio-chat-none-symbolic.svg000066400000000000000000000011521522167256300315220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/audio-chat-symbolic.svg000066400000000000000000000007511522167256300305710ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/contacts-symbolic.svg000066400000000000000000000020201522167256300303600ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/drug-use-none-symbolic.svg000066400000000000000000000017011522167256300312370ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/drug-use-symbolic.svg000066400000000000000000000015261522167256300303070ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/gambling-none-symbolic.svg000066400000000000000000000010271522167256300312650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/gambling-symbolic.svg000066400000000000000000000007501522167256300303320ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/human-remains-symbolic.svg000066400000000000000000000006141522167256300313150ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/messaging-none-symbolic.svg000066400000000000000000000010051522167256300314560ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/messaging-symbolic.svg000066400000000000000000000006561522167256300305340ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/money-none-symbolic.svg000066400000000000000000000011461522167256300306360ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/money-symbolic.svg000066400000000000000000000007621522167256300277040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/nudity-none-symbolic.svg000066400000000000000000000013101522167256300310140ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/nudity-symbolic.svg000066400000000000000000000007601522167256300300670ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/smoking-none-symbolic.svg000066400000000000000000000007431522167256300311600ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/smoking-symbolic.svg000066400000000000000000000006551522167256300302250ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/social-info-symbolic.svg000066400000000000000000000017551522167256300307630ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/strong-language-none-symbolic.svg000066400000000000000000000006571522167256300326120ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/strong-language-symbolic.svg000066400000000000000000000005371522167256300316520ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/violence-none-symbolic.svg000066400000000000000000000010171522167256300313100ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/ratings/violence-symbolic.svg000066400000000000000000000005511522167256300303550ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/regex-symbolic.svg000066400000000000000000000011721522167256300262140ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/right-large-symbolic.svg000066400000000000000000000007441522167256300273130ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/sad-computer-symbolic.svg000066400000000000000000000022241522167256300275040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/school-symbolic.svg000066400000000000000000000020131522167256300263640ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/server-pick-symbolic.svg000066400000000000000000000016521522167256300273370ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/share-alt-symbolic.svg000066400000000000000000000015711522167256300267650ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/share-symbolic.svg000066400000000000000000000021751522167256300262100ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/shoe-box-symbolic.svg000066400000000000000000000011701522167256300266240ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/sidebar-show-symbolic.svg000066400000000000000000000011421522167256300274660ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/sliders-horizontal-symbolic.svg000066400000000000000000000017671522167256300307500ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/smartphone2-symbolic.svg000066400000000000000000000010161522167256300273410ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/software-update-available-symbolic.svg000066400000000000000000000021511522167256300321300ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/square-filled-symbolic.svg000066400000000000000000000004761522167256300276450ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/star-outline-rounded-symbolic.svg000066400000000000000000000026321522167256300311700ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/starred-symbolic.svg000066400000000000000000000013171522167256300265470ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/thumbs-up-outline-symbolic.svg000066400000000000000000000032701522167256300305040ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/timer-sand-symbolic.svg000066400000000000000000000010571522167256300271470ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/translations-symbolic.svg000066400000000000000000000012061522167256300276210ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/user-trash-symbolic.svg000066400000000000000000000020501522167256300271730ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/verified-checkmark-symbolic.svg000066400000000000000000000030611522167256300306240ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/video-reel2-symbolic.svg000066400000000000000000000007711522167256300272230ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/view-more-horizontal-symbolic.svg000066400000000000000000000010271522167256300312020ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/view-more-symbolic.svg000066400000000000000000000007631522167256300270210ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/we-love-games-symbolic.svg000066400000000000000000000171351522167256300275600ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/zoom-minus-symbolic.svg000066400000000000000000000013371522167256300272220ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/icons/scalable/actions/zoom-plus-symbolic.svg000066400000000000000000000014031522167256300270440ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/internal-config-schema.xml000066400000000000000000000003211522167256300232530ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/internal-config.yaml000066400000000000000000000032171522167256300221660ustar00rootroot00000000000000search-biases: # Brief regex review: # `^` indicates the beginning of the string # `$` indicates the end of the string # `\b` indicates a word boundary # `(?i)` means case insensitive - regex: ^(?i)browser$ convert-to: web browser boost-appids: - app.zen_browser.zen - io.github.ungoogled_software.ungoogled_chromium - org.chromium.Chromium - org.gnome.Epiphany - org.kde.falkon - org.mozilla.firefox - org.torproject.torbrowser-launcher linear-boost: slope: 1.333 y-intercept: 40.0 - regex: \b(?i)vm\b convert-to: virtual machine boost-appids: - org.virt_manager.virt-manager - org.gnome.Boxes linear-boost: slope: 1.0 y-intercept: 50.0 - regex: \b(?i)ide\b convert-to: develop boost-appids: - com.visualstudio.code - com.vscodium.codium - dev.zed.Zed - org.gnome.Builder - org.kde.kdevelop linear-boost: slope: 1.0 y-intercept: 10.0 - regex: \b(?i)daw\b boost-appids: # these don't normally show, despite being DAWs - fm.reaper.Reaper - io.lmms.LMMS linear-boost: slope: 1.0 y-intercept: 20.0 - regex: \b(?i)photoshop\b boost-appids: - org.gimp.GIMP linear-boost: slope: 1.0 y-intercept: 20.0 - regex: \b(?i)illustrator\b boost-appids: - org.inkscape.Inkscape linear-boost: slope: 1.0 y-intercept: 20.0 - regex: \b(?i)dl\b convert-to: download - regex: \b(?i)yt\b convert-to: youtube - regex: \b(?i)vids?\b convert-to: video - regex: \b(?i)mc\b convert-to: minecraft bazaar-org-bazaar-b6e9a65/src/main-config-schema.xml000066400000000000000000000011661522167256300223730ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/main.c000066400000000000000000000031731522167256300173140ustar00rootroot00000000000000/* main.c * * Copyright 2025 Adam Masciola * * 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 */ #define G_LOG_DOMAIN "BAZAAR::MAIN" #include "config.h" #include #include #include #include "bz-application.h" int main (int argc, char *argv[]) { g_autoptr (BzApplication) app = NULL; int result = 0; if (argc > 1 && g_strcmp0 (argv[1], "--version") == 0) { g_print ("%s\n", PACKAGE_VCS_VERSION); return 0; } dex_init (); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* Init Bazaar GTK Extensions */ bge_init (); app = g_object_new ( BZ_TYPE_APPLICATION, "application-id", "io.github.kolunmi.Bazaar", "flags", G_APPLICATION_HANDLES_COMMAND_LINE, "resource-base-path", "/io/github/kolunmi/Bazaar", NULL); result = g_application_run (G_APPLICATION (app), argc, argv); return result; } bazaar-org-bazaar-b6e9a65/src/meson.build000066400000000000000000000237211522167256300203670ustar00rootroot00000000000000math = cc.find_library('m', required: false) xmllint = find_program('xmllint', required: true) gtk_dep = dependency('gtk4', version: '>= 4.22.1') libadwaita_dep = dependency('libadwaita-1', version: '>= 1.8') libdex_dep = dependency('libdex-1', version: '>= 1.0.0') flatpak_dep = dependency('flatpak', version: '>= 1.9') appstream_dep = dependency('appstream', version: '>= 1.0') xmlb_dep = dependency('xmlb', version: '>= 0.3.4') yaml_dep = dependency('yaml-0.1', version: '>= 0.2.5') libsoup_dep = dependency('libsoup-3.0', version: '>= 3.6.0') json_glib_dep = dependency('json-glib-1.0', version: '>= 1.10.0') glycin_dep = dependency('glycin-2', version: '>= 2.0') glycin_gtk4_dep = dependency('glycin-gtk4-2', version: '>= 2.0') webkit_dep = dependency('webkitgtk-6.0', version: '>= 2.50.2') libsecret_dep = dependency('libsecret-1', version: '>= 0.20') libproxy_dep = dependency('libproxy-1.0', version: '>= 0.5') malcontent_dep = dependency('malcontent-0', version: '>= 0.12.0') gtksourceview_dep = dependency('gtksourceview-5', version: '>= 5.17') dl_worker_sources = [ 'bz-env.c', 'bz-global-net.c', 'dl-worker.c', ] dl_worker_deps = [ math, libdex_dep, libsoup_dep, json_glib_dep, libproxy_dep, ] dl_worker_exe = executable(dl_worker_bin_name, dl_worker_sources, dependencies: dl_worker_deps, install: true, ) marshalers = gnome.genmarshal('bz-marshalers', sources: 'bz-marshalers.list', prefix: 'bz_marshal', valist_marshallers: true, ) gdbus_src = gnome.gdbus_codegen( 'gs-shell-search-provider-generated', 'shell-search-provider-dbus-interfaces.xml', interface_prefix : 'org.gnome.', namespace : 'Bz', ) bz_sources = files( 'bz-addon-tile.c', 'bz-addons-dialog.c', 'bz-age-rating-dialog.c', 'bz-all-apps-page.c', 'bz-app-permissions.c', 'bz-app-size-dialog.c', 'bz-app-tile.c', 'bz-application-map-factory.c', 'bz-application.c', 'bz-apps-page.c', 'bz-appstream-description-render.c', 'bz-appstream-parser.c', 'bz-article.c', 'bz-article-list-view.c', 'bz-article-tile.c', 'bz-aspect-picture.c', 'bz-async-texture.c', 'bz-auth-state.c', 'bz-backend.c', 'bz-banner-view.c', 'bz-bundle-install-dialog.c', 'bz-category-flags.c', 'bz-category-tile.c', 'bz-content-provider.c', 'bz-context-row.c', 'bz-context-tile-callbacks.c', 'bz-context-tile.c', 'bz-curated-view.c', 'bz-data-graph.c', 'bz-decorated-screenshot.c', 'bz-developer-badge.c', 'bz-donations-dialog.c', 'bz-download-worker.c', 'bz-dynamic-list-view.c', 'bz-entry-cache-manager.c', 'bz-entry-group-util.c', 'bz-entry-group.c', 'bz-entry-inspector.c', 'bz-entry-selection-row.c', 'bz-entry.c', 'bz-env.c', 'bz-error-dialog.c', 'bz-error.c', 'bz-fading-clamp.c', 'bz-favorite-button.c', 'bz-favorites-page.c', 'bz-favorites-tile.c', 'bz-featured-carousel.c', 'bz-featured-carousel-view.c', 'bz-featured-tile.c', 'bz-flathub-category-section.c', 'bz-flathub-category.c', 'bz-flathub-category.c', 'bz-flathub-page.c', 'bz-flathub-state.c', 'bz-flatpak-entry.c', 'bz-flatpak-instance.c', 'bz-full-view.c', 'bz-global-net.c', 'bz-gnome-shell-search-provider.c', 'bz-group-tile-css-watcher.c', 'bz-hardware-support-dialog.c', 'bz-hooks.c', 'bz-inspector.c', 'bz-install-controls.c', 'bz-installed-tile.c', 'bz-io.c', 'bz-lazy-wdgt.c', 'bz-library-page.c', 'bz-license-dialog.c', 'bz-list-tile.c', 'bz-login-page.c', 'bz-lozenge.c', 'bz-malcontent-service.c', 'bz-metainfo-preview.c', 'bz-newline-parser.c', 'bz-parser.c', 'bz-preferences-dialog.c', 'bz-progress-bar.c', 'bz-releases-list.c', 'bz-result.c', 'bz-rich-app-tile.c', 'bz-rounded-picture.c', 'bz-row-view.c', 'bz-safety-calculator.c', 'bz-safety-dialog.c', 'bz-screenshot-page.c', 'bz-screenshot.c', 'bz-screenshots-carousel.c', 'bz-search-engine.c', 'bz-search-filter-popover.c', 'bz-search-page.c', 'bz-search-pill-list.c', 'bz-section-view.c', 'bz-serializable.c', 'bz-share-list.c', 'bz-spdx.c', 'bz-stats-dialog.c', 'bz-subcategory-list.c', 'bz-template-callbacks.c', 'bz-themed-entry-group-rect.c', 'bz-transact-icon.c', 'bz-transaction-dialog.c', 'bz-transaction-list-dialog.c', 'bz-transaction-manager.c', 'bz-transaction-tile.c', 'bz-transaction.c', 'bz-updates-card.c', 'bz-user-data-page.c', 'bz-user-data-tile.c', 'bz-window.c', 'bz-world-map-parser.c', 'bz-world-map.c', 'bz-yaml-parser.c', 'bz-zoom.c', ) subdir('progress-bar-designs') bz_deps = [ # Bazaar GTK Extensions; see ../bge/ bge_dep, math, gtk_dep, libadwaita_dep, flatpak_dep, appstream_dep, xmlb_dep, yaml_dep, libsoup_dep, json_glib_dep, libdex_dep, glycin_dep, glycin_gtk4_dep, webkit_dep, libsecret_dep, libproxy_dep, malcontent_dep, gtksourceview_dep, ] gen_gobject = find_program('./gen_gobject.sh') gen_gobject_header = generator( gen_gobject, output: '@BASENAME@.h', arguments: ['--header', '@INPUT@', '@OUTPUT@'], ) gen_gobject_code = generator( gen_gobject, output: '@BASENAME@.c', arguments: ['--code', '@INPUT@', '@OUTPUT@'], ) gobject_specs = files( 'bz-age-rating-attribute.txt', 'bz-backend-notification.txt', 'bz-backend-transaction-op-payload.txt', 'bz-backend-transaction-op-progress-payload.txt', 'bz-blocklist-condition-match-envvar.txt', 'bz-blocklist-condition-match-locale.txt', 'bz-blocklist-condition.txt', 'bz-blocklist.txt', 'bz-bulk-install-dialog-result.txt', 'bz-country-data-point.txt', 'bz-country.txt', 'bz-curated-appids-info.txt', 'bz-curated-article.txt', 'bz-curated-articles-info.txt', 'bz-curated-banner.txt', 'bz-curated-featured-carousel.txt', 'bz-curated-image-info.txt', 'bz-curated-markdown-info.txt', 'bz-curated-row.txt', 'bz-curated-section.txt', 'bz-data-point.txt', 'bz-exponential-function.txt', 'bz-finished-search-query.txt', 'bz-flathub-auth-provider.txt', 'bz-flathub-sub-category.txt', 'bz-flatpak-repo.txt', 'bz-flatpak-bundle-result.txt', 'bz-hash-table-object.txt', 'bz-hook-dialog-option.txt', 'bz-hook-dialog.txt', 'bz-hook.txt', 'bz-internal-config.txt', 'bz-linear-function.txt', 'bz-main-config.txt', 'bz-pride-flag-config.txt', 'bz-pride-flag-spec.txt', 'bz-pride-flag-stripe-spec.txt', 'bz-release.txt', 'bz-repository.txt', 'bz-root-blocklist.txt', 'bz-root-curated-config.txt', 'bz-safety-row.txt', 'bz-search-bias.txt', 'bz-search-result.txt', 'bz-size-result.txt', 'bz-state-info.txt', 'bz-transact-icon-info.txt', 'bz-transaction-dialog-result.txt', 'bz-transaction-entry-tracker.txt', 'bz-transaction-task.txt', 'bz-url.txt', 'bz-verification-status.txt', ) gen_gobject_srcs = [] foreach f : gobject_specs header = gen_gobject_header.process(f) code = gen_gobject_code.process(f) gen_gobject_srcs += [header, code] endforeach generated_gobjects = declare_dependency( sources: gen_gobject_srcs, ) bz_deps += [ generated_gobjects ] blueprints = custom_target('blueprints', input: files( 'bz-addon-tile.blp', 'bz-addons-dialog.blp', 'bz-age-rating-dialog.blp', 'bz-all-apps-page.blp', 'bz-app-size-dialog.blp', 'bz-app-tile.blp', 'bz-apps-page.blp', 'bz-appstream-description-render.blp', 'bz-article.blp', 'bz-article-tile.blp', 'bz-banner-view.blp', 'bz-bundle-install-dialog.blp', 'bz-category-tile.blp', 'bz-context-tile.blp', 'bz-curated-view.blp', 'bz-decorated-screenshot.blp', 'bz-developer-badge.blp', 'bz-donations-dialog.blp', 'bz-entry-inspector.blp', 'bz-entry-selection-row.blp', 'bz-error-dialog.blp', 'bz-favorite-button.blp', 'bz-favorites-page.blp', 'bz-favorites-tile.blp', 'bz-featured-carousel.blp', 'bz-featured-tile.blp', 'bz-flathub-category-section.blp', 'bz-flathub-page.blp', 'bz-full-view.blp', 'bz-hardware-support-dialog.blp', 'bz-inspector.blp', 'bz-install-controls.blp', 'bz-installed-tile.blp', 'bz-library-page.blp', 'bz-license-dialog.blp', 'bz-login-page.blp', 'bz-preferences-dialog.blp', 'bz-progress-bar.blp', 'bz-releases-dialog.blp', 'bz-releases-list.blp', 'bz-rich-app-tile.blp', 'bz-safety-dialog.blp', 'bz-screenshot-page.blp', 'bz-screenshots-carousel.blp', 'bz-search-filter-popover.blp', 'bz-search-page.blp', 'bz-section-view.blp', 'bz-stats-dialog.blp', 'bz-transaction-list-dialog.blp', 'bz-transaction-tile.blp', 'bz-updates-card.blp', 'bz-user-data-page.blp', 'bz-user-data-tile.blp', 'bz-window.blp', 'shortcuts-dialog.blp', ), output: '.', command: [ find_program('blueprint-compiler', version: '>= 0.20.0'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@' ], ) release_notes = custom_target('release-notes.xml', output: 'release-notes.xml', input: meson.project_source_root() / 'data' / 'io.github.kolunmi.Bazaar.metainfo.xml.in', command: [ 'sh', '-c', xmllint.full_path() + ' --xpath "//releases/release[1]" "$1" > "$2"', '--', '@INPUT@', '@OUTPUT@', ], ) countries_gvariant = custom_target( 'countries-gvariant', input: files('../scripts/countries.json.in'), output: 'countries.gvariant', command: [ python3, meson.project_source_root() / 'scripts' / 'countries.py', '@INPUT@', meson.project_source_root() / 'po' / 'LINGUAS', '@OUTPUT@', ], ) bz_sources += gnome.compile_resources('bz-resources', 'bazaar.gresource.xml', c_name: 'bz', source_dir: meson.current_build_dir(), dependencies: [blueprints, release_notes, countries_gvariant], ) executable('bazaar', bz_sources + ['main.c'], gdbus_src, marshalers, dependencies: bz_deps, install: true, ) executable(refresh_worker_bin_name, bz_sources + ['refresh-worker.c'], gdbus_src, marshalers, dependencies: bz_deps, install: true, ) bazaar-org-bazaar-b6e9a65/src/pride-flag-config-schema.xml000066400000000000000000000003201522167256300234500ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/000077500000000000000000000000001522167256300222605ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/common.h000066400000000000000000000014421522167256300237220ustar00rootroot00000000000000/* progress-bar-designs/common.h * * Copyright 2025 Eva M * * 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 */ #pragma once #include "pride/pride.h" bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/meson.build000066400000000000000000000000201522167256300244120ustar00rootroot00000000000000subdir('pride') bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/pride/000077500000000000000000000000001522167256300233635ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/pride/meson.build000066400000000000000000000000441522167256300255230ustar00rootroot00000000000000bz_sources += files( 'pride.c', ) bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/pride/pride-flags.yaml000066400000000000000000000162151522167256300264510ustar00rootroot00000000000000flag-specs: - # the internal ID of the flag; this should match the gsettings file at # /data/io.github.kolunmi.Bazaar.gschema.xml id: "pride-rainbow-flag" # the user-facing name name: "Pride Rainbow Flag" # (optional) set to true if the flag is homogeneous, or put more # shrimply(🦐) each stripe has the same vertical size homogeneous: true # the direction in which the stripes are drawn (css format) direction: to bottom # list of stripe specs stripes: &pride-rainbow-flag-stripes - # all stripes must provide the `rgba` field, which will is the color of # the stripe. Many formats are supported for this; here is a snippet # from the GDK source, listing the formats: # # - A standard name (Taken from the CSS specification). # - A hexadecimal value in the form “#rgb”, “#rrggbb”, # “#rrrgggbbb” or ”#rrrrggggbbbb” # - A hexadecimal value in the form “#rgba”, “#rrggbbaa”, # or ”#rrrrggggbbbbaaaa” # - A RGB color in the form “rgb(r,g,b)” (In this case the color # will have full opacity) # - A RGBA color in the form “rgba(r,g,b,a)” # - A HSL color in the form "hsl(hue, saturation, lightness)" # - A HSLA color in the form "hsla(hue, saturation, lightness, alpha)" # # for more information, see # https://docs.gtk.org/gdk4/method.RGBA.parse.html rgba: "#E40303" # if the above `homogeneous` field is set to `true`, then this field can # be omitted. otherwise, this value is a floating point number from 0.0 # to 1.0 representing the size of this stripe as a percentage of the # flag's pixel height in the UI. so if this strip should take up 20% of # the vertical space, put `0.2`, as shown here. Since the `homogeneous` # field was set to `true` on this flag, this is ignored size: 0.2 - rgba: "#FF8C00" - rgba: "#FFED00" - rgba: "#008026" - rgba: "#24408E" - rgba: "#732982" - id: "lesbian-pride-flag" name: "Lesbian Pride Flag" homogeneous: true direction: to bottom stripes: &lesbian-flag-stripes - rgba: "#D62800" - rgba: "#EF7627" - rgba: "#FF9B56" - rgba: "#FFFFFF" - rgba: "#D162A4" - rgba: "#B55690" - rgba: "#A30262" - id: "gay-pride-flag" name: "Gay Pride Flag" homogeneous: true direction: to bottom stripes: &gay-pride-flag-stripes - rgba: "#018E71" - rgba: "#21CFAC" - rgba: "#9AE9C3" - rgba: "#FFFFFF" - rgba: "#7CAFE4" - rgba: "#4F47CC" - rgba: "#3C1379" - id: "transgender-flag" name: "Transgender Flag" homogeneous: true direction: to bottom stripes: &transgender-flag-stripes - rgba: "#5BCEFA" - rgba: "#F5A9B8" - rgba: "#FFFFFF" - rgba: "#F5A9B8" - rgba: "#5BCEFA" - id: "nonbinary-flag" name: "Nonbinary Flag" homogeneous: true direction: to bottom stripes: &nonbinary-flag-stripes - rgba: "#FCF434" - rgba: "#FFFFFF" - rgba: "#9C59D1" - rgba: "#2C2C2C" - id: "bisexual-flag" name: "Bisexual Flag" direction: to bottom stripes: &bisexual-flag-stripes - rgba: "#D60270" size: 0.4 - rgba: "#9B4F96" size: 0.2 - rgba: "#0038A8" size: 0.4 - id: "asexual-flag" name: "Asexual Flag" homogeneous: true direction: to bottom stripes: &asexual-flag-stripes - rgba: "#000000" - rgba: "#A3A3A3" - rgba: "#FFFFFF" - rgba: "#810081" - id: "pansexual-flag" name: "Pansexual Flag" homogeneous: true direction: to bottom stripes: &pansexual-flag-stripes - rgba: "#FF218C" - rgba: "#FFD800" - rgba: "#21B1FF" - id: "aromantic-flag" name: "Aromantic Flag" homogeneous: true direction: to bottom stripes: &aromantic-flag-stripes - rgba: "#3DA542" - rgba: "#A7D379" - rgba: "#FFFFFF" - rgba: "#A9A9A9" - rgba: "#000000" - id: "genderfluid-flag" name: "Genderfluid Flag" homogeneous: true direction: to bottom stripes: &genderfluid-flag-stripes - rgba: "#FF76A4" - rgba: "#FFFFFF" - rgba: "#C011D7" - rgba: "#000000" - rgba: "#2F3CBE" - id: "polysexual-flag" name: "Polysexual Flag" homogeneous: true direction: to bottom stripes: &polysexual-flag-stripes - rgba: "#F61CB9" - rgba: "#07D569" - rgba: "#1C92F6" - id: "omnisexual-flag" name: "Omnisexual Flag" homogeneous: true direction: to bottom stripes: &omnisexual-flag-stripes - rgba: "#FF9CCE" - rgba: "#FF52BF" - rgba: "#200044" - rgba: "#675FFF" - rgba: "#8DA7FF" - id: "aroace-flag" name: "Aroace Flag" homogeneous: true direction: to bottom stripes: &aroace-flag-stripes - rgba: "#E28C00" - rgba: "#ECCD00" - rgba: "#FFFFFF" - rgba: "#62AEDC" - rgba: "#203856" - id: "agender-flag" name: "Agender Flag" homogeneous: true direction: to bottom stripes: &agender-flag-stripes - rgba: "#000000" - rgba: "#BCC4C7" - rgba: "#FFFFFF" - rgba: "#B7F684" - rgba: "#FFFFFF" - rgba: "#BCC4C7" - rgba: "#000000" - id: "genderqueer-flag" name: "Genderqueer Flag" homogeneous: true direction: to bottom stripes: &genderqueer-flag-stripes - rgba: "#B57EDC" - rgba: "#FFFFFF" - rgba: "#4A8123" - id: "intersex-flag" name: "Intersex Flag" direction: to bottom stripes: &intersex-flag-stripes - rgba: "#FFD800" size: 0.4 - rgba: "#7902AA" size: 0.2 - rgba: "#FFD800" size: 0.4 - id: "demigender-flag" name: "Demigender Flag" homogeneous: true direction: to bottom stripes: &demigender-flag-stripes - rgba: "#7F7F7F" - rgba: "#C3C3C3" - rgba: "#FBFF74" - rgba: "#FFFFFF" - rgba: "#FBFF74" - rgba: "#C3C3C3" - rgba: "#7F7F7F" - id: "biromantic-flag" name: "Biromantic Flag" homogeneous: true direction: to bottom stripes: &biromantic-flag-stripes - rgba: "#8869A5" - rgba: "#D8A7D8" - rgba: "#FFFFFF" - rgba: "#FDB18D" - rgba: "#151638" - id: "disability-flag" name: "Disability Flag" homogeneous: true direction: to bottom stripes: &disability-flag-stripes - rgba: "#595959" - rgba: "#CF7280" - rgba: "#EEDE77" - rgba: "#E8E8E8" - rgba: "#7BC2E0" - rgba: "#3BB07D" - rgba: "#595959" - id: "femboy-flag" name: "Femboy Flag" homogeneous: true direction: to bottom stripes: &femboy-flag-stripes - rgba: "#D460A7" - rgba: "#E4ADCD" - rgba: "#FFFFFF" - rgba: "#57CEF8" - rgba: "#FFFFFF" - rgba: "#E4ADCD" - rgba: "#D460A7" - id: "neutrois-flag" name: "Neutrois Flag" homogeneous: true direction: to bottom stripes: &neutrois-flag-stripes - rgba: "rgb(255,255,255)" - rgba: "rgb(31,159,0)" - rgba: "rgb(0,0,0)" bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/pride/pride.c000066400000000000000000000177731522167256300246510ustar00rootroot00000000000000/* progress-bar-designs/pride/pride.c * * Copyright 2025 Eva M * * 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 */ #include "config.h" #include "bz-parser.h" #include "bz-pride-flag-config.h" #include "bz-yaml-parser.h" #include "pride.h" static void generate_flag_css (GString *css, const char *id, const char *direction, gboolean homogeneous, GListModel *stripes); GtkStyleProvider * bz_get_pride_style_provider (void) { static GtkCssProvider *provider = NULL; if (g_once_init_enter_pointer (&provider)) { g_autoptr (GError) local_error = NULL; g_autoptr (GBytes) config_bytes = NULL; g_autoptr (BzYamlParser) parser = NULL; g_autoptr (GHashTable) parse_results = NULL; g_autoptr (BzPrideFlagConfig) config = NULL; g_autoptr (GtkCssProvider) tmp = NULL; config_bytes = g_resources_lookup_data ( "/io/github/kolunmi/Bazaar/pride-flags.yaml", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); g_assert (config_bytes != NULL); g_type_ensure (BZ_TYPE_PRIDE_FLAG_CONFIG); g_type_ensure (BZ_TYPE_PRIDE_FLAG_SPEC); g_type_ensure (BZ_TYPE_PRIDE_FLAG_STRIPE_SPEC); parser = bz_yaml_parser_new_for_resource_schema ( "/io/github/kolunmi/Bazaar/pride-flag-config-schema.xml"); parse_results = bz_parser_process_bytes ( BZ_PARSER (parser), config_bytes, &local_error); if (parse_results == NULL) g_critical ("Could not parse internal 'pride-flags.yaml': %s", local_error->message); g_assert (parse_results != NULL); config = g_value_dup_object (g_hash_table_lookup (parse_results, "/")); tmp = gtk_css_provider_new (); if (config != NULL) { GListModel *flag_specs = NULL; flag_specs = bz_pride_flag_config_get_flag_specs (config); if (flag_specs != NULL) { g_autoptr (GString) css = NULL; guint n_flag_specs = 0; css = g_string_new (NULL); n_flag_specs = g_list_model_get_n_items (flag_specs); for (guint i = 0; i < n_flag_specs; i++) { g_autoptr (BzPrideFlagSpec) flag_spec = NULL; const char *id = NULL; const char *name = NULL; gboolean homogeneous = FALSE; GListModel *stripes = NULL; const char *direction = NULL; flag_spec = g_list_model_get_item (flag_specs, i); id = bz_pride_flag_spec_get_id (flag_spec); name = bz_pride_flag_spec_get_name (flag_spec); homogeneous = bz_pride_flag_spec_get_homogeneous (flag_spec); stripes = bz_pride_flag_spec_get_stripes (flag_spec); direction = bz_pride_flag_spec_get_direction (flag_spec); if (id == NULL) { g_critical ("Flag spec with index %d lacks an id, skipping it", i); continue; } if (name == NULL) { g_critical ("Flag spec \"%s\" lacks an name, skipping it", id); continue; } if (stripes == NULL) { g_critical ("Flag spec \"%s\" lacks a strip list, skipping it", id); continue; } if (direction == NULL) direction = "to bottom"; generate_flag_css (css, id, direction, homogeneous, stripes); { g_autofree char *horizontal_id = NULL; const char *horizontal_direction = NULL; horizontal_id = g_strdup_printf ("%s-horizontal", id); if (g_strcmp0 (direction, "to bottom") == 0) horizontal_direction = "to right"; else if (g_strcmp0 (direction, "to top") == 0) horizontal_direction = "to left"; else if (g_strcmp0 (direction, "to left") == 0) horizontal_direction = "to top"; else if (g_strcmp0 (direction, "to right") == 0) horizontal_direction = "to bottom"; else horizontal_direction = "to right"; generate_flag_css (css, horizontal_id, horizontal_direction, homogeneous, stripes); } } if (css->len > 0) gtk_css_provider_load_from_string (tmp, css->str); } } g_once_init_leave_pointer (&provider, g_steal_pointer (&tmp)); } return GTK_STYLE_PROVIDER (provider); } char * bz_dup_css_class_for_pride_id (const char *id) { g_return_val_if_fail (id != NULL, NULL); return g_strdup_printf ("%s-theme", id); } static void generate_flag_css (GString *css, const char *id, const char *direction, gboolean homogeneous, GListModel *stripes) { g_autoptr (GString) stripe_css = NULL; guint n_stripes = 0; double cur_offset = 0.0; gboolean skip = FALSE; stripe_css = g_string_new (NULL); g_string_append_printf (stripe_css, ".%s-theme { ", id); g_string_append_printf (stripe_css, "--flag-gradient: linear-gradient(%s", direction); n_stripes = g_list_model_get_n_items (stripes); for (guint j = 0; j < n_stripes; j++) { g_autoptr (BzPrideFlagStripeSpec) stripe_spec = NULL; const char *rgba_spec = NULL; double size = 0.0; GdkRGBA rgba = { 0 }; stripe_spec = g_list_model_get_item (stripes, j); rgba_spec = bz_pride_flag_stripe_spec_get_rgba (stripe_spec); size = bz_pride_flag_stripe_spec_get_size (stripe_spec); if (rgba_spec == NULL) { g_critical ("Flag spec \"%s\" has a stripe spec which lacks an rgba spec, skipping it", id); skip = TRUE; break; } if (!gdk_rgba_parse (&rgba, rgba_spec)) { g_critical ("Flag spec \"%s\" has a stripe spec which has an invalid rgba spec, skipping it", id); skip = TRUE; break; } if (!homogeneous && (size <= 0.0 || size > 1.0)) { g_critical ("Flag spec \"%s\" has a stripe spec which has an out of bounds size, skipping it", id); skip = TRUE; break; } g_string_append_printf (stripe_css, ", %s %d%%", rgba_spec, (int) round (cur_offset * 100.0)); cur_offset += homogeneous ? 1.0 / (double) n_stripes : size; if (cur_offset > 1.0) { g_critical ("Flag spec \"%s\" has a stripe spec which exceeds the height of the flag, skipping it", id); skip = TRUE; break; } g_string_append_printf (stripe_css, ", %s %d%%", rgba_spec, (int) round (cur_offset * 100.0)); } if (skip) return; g_string_append (stripe_css, "); }\n"); g_string_append_len (css, stripe_css->str, stripe_css->len); } bazaar-org-bazaar-b6e9a65/src/progress-bar-designs/pride/pride.h000066400000000000000000000016571522167256300246500ustar00rootroot00000000000000/* progress-bar-designs/pride/pride.h * * Copyright 2025 Eva M * * 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 */ #pragma once #include G_BEGIN_DECLS GtkStyleProvider * bz_get_pride_style_provider (void); char * bz_dup_css_class_for_pride_id (const char *id); G_END_DECLS bazaar-org-bazaar-b6e9a65/src/refresh-worker.c000066400000000000000000000114151522167256300213330ustar00rootroot00000000000000/* refresh-worker.c * * Copyright 2026 Eva M * * 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 */ #define G_LOG_DOMAIN "BAZAAR::REFRESH-WORKER" #include "bz-backend-notification.h" #include "bz-backend.h" #include "bz-entry-cache-manager.h" #include "bz-env.h" #include "bz-flatpak-instance.h" #include "bz-util.h" BZ_DEFINE_DATA ( main, Main, { GMainLoop *loop; GIOChannel *stdout_channel; int rv; }, BZ_RELEASE_DATA (loop, g_main_loop_unref); BZ_RELEASE_DATA (stdout_channel, g_io_channel_unref)); static DexFuture * run (MainData *data); int main (int argc, char *argv[]) { g_autoptr (GIOChannel) stdout_channel = NULL; g_autoptr (GMainLoop) main_loop = NULL; g_autoptr (MainData) data = NULL; g_autoptr (DexFuture) future = NULL; g_log_writer_default_set_use_stderr (TRUE); dex_init (); stdout_channel = g_io_channel_unix_new (STDOUT_FILENO); g_assert (g_io_channel_set_encoding (stdout_channel, NULL, NULL)); g_io_channel_set_buffered (stdout_channel, FALSE); main_loop = g_main_loop_new (NULL, FALSE); data = main_data_new (); data->loop = g_main_loop_ref (main_loop); data->stdout_channel = g_io_channel_ref (stdout_channel); data->rv = EXIT_SUCCESS; future = dex_scheduler_spawn ( dex_scheduler_get_default (), bz_get_dex_stack_size (), (DexFiberFunc) run, main_data_ref (data), main_data_unref); g_main_loop_run (main_loop); return data->rv; } static DexFuture * run (MainData *data) { gboolean result = FALSE; g_autoptr (GError) local_error = NULL; g_autoptr (BzEntryCacheManager) cache = NULL; g_autoptr (BzFlatpakInstance) flatpak = NULL; g_autoptr (DexChannel) channel = NULL; g_autoptr (GHashTable) installed_set = NULL; g_autoptr (DexFuture) all_notifs = NULL; guint n_notifs = 0; g_autoptr (GPtrArray) write_backs = NULL; cache = bz_entry_cache_manager_new (); flatpak = dex_await_object ( bz_flatpak_instance_new (), &local_error); if (flatpak == NULL) goto err; channel = bz_backend_create_notification_channel (BZ_BACKEND (flatpak)); if (channel == NULL) goto err; result = dex_await ( bz_backend_retrieve_remote_entries ( BZ_BACKEND (flatpak), NULL), &local_error); if (!result) goto err; installed_set = dex_await_boxed ( bz_backend_retrieve_install_ids ( BZ_BACKEND (flatpak), NULL), &local_error); if (installed_set == NULL) goto err; all_notifs = dex_channel_receive_all (channel); n_notifs = dex_future_set_get_size (DEX_FUTURE_SET (all_notifs)); write_backs = g_ptr_array_new_with_free_func (dex_unref); for (guint i = 0; i < n_notifs; i++) { DexFuture *future = NULL; g_autoptr (BzBackendNotification) notif = NULL; BzBackendNotificationKind kind = 0; future = dex_future_set_get_future_at ( DEX_FUTURE_SET (all_notifs), i); notif = dex_await_object (dex_ref (future), NULL); if (notif == NULL) continue; kind = bz_backend_notification_get_kind (notif); if (kind == BZ_BACKEND_NOTIFICATION_KIND_REPLACE_ENTRY) { BzEntry *entry = NULL; const char *unique_id = NULL; entry = bz_backend_notification_get_entry (notif); unique_id = bz_entry_get_unique_id (entry); bz_entry_set_installed (entry, g_hash_table_contains (installed_set, unique_id)); g_ptr_array_add ( write_backs, bz_entry_cache_manager_add (cache, entry)); } } if (write_backs->len > 0) dex_await ( dex_future_allv ( (DexFuture *const *) write_backs->pdata, write_backs->len), NULL); data->rv = EXIT_SUCCESS; g_main_loop_quit (data->loop); return dex_future_new_true (); err: if (local_error != NULL) g_critical ("Unable to complete refresh: %s", local_error->message); data->rv = EXIT_FAILURE; g_main_loop_quit (data->loop); return dex_future_new_false (); } bazaar-org-bazaar-b6e9a65/src/release-notes.xml.in000066400000000000000000000000001522167256300221030ustar00rootroot00000000000000bazaar-org-bazaar-b6e9a65/src/shell-search-provider-dbus-interfaces.xml000066400000000000000000000035031522167256300262210ustar00rootroot00000000000000 bazaar-org-bazaar-b6e9a65/src/shortcuts-dialog.blp000066400000000000000000000026261522167256300222200ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; Adw.ShortcutsDialog shortcuts_dialog { Adw.ShortcutsSection navigation_section { title: C_("shortcut window", "Navigation"); Adw.ShortcutsItem { title: C_("shortcut window", "Open Explore Page"); action-name: "window.open-flathub-page"; accelerator: "e"; } Adw.ShortcutsItem { title: C_("shortcut window", "Open Library Page"); action-name: "window.open-library"; accelerator: "d"; } Adw.ShortcutsItem { title: C_("shortcut window", "Open Search Page"); action-name: "app.search('')"; } } Adw.ShortcutsSection remotes_section { title: C_("shortcut window", "Remotes"); Adw.ShortcutsItem { title: C_("shortcut window", "Sync Remotes"); action-name: "app.sync-remotes"; } } Adw.ShortcutsSection general_section { title: C_("shortcut window", "General"); Adw.ShortcutsItem { title: C_("shortcut window", "Open Preferences"); action-name: "app.preferences"; } Adw.ShortcutsItem { title: C_("shortcut window", "Show Shortcuts"); action-name: "app.shortcuts"; } Adw.ShortcutsItem { title: C_("shortcut window", "Close Window"); action-name: "window.quit"; accelerator: "w"; } Adw.ShortcutsItem { title: C_("shortcut window", "Quit Bazaar"); action-name: "app.quit"; } } }bazaar-org-bazaar-b6e9a65/src/style.css000066400000000000000000000512331522167256300200760ustar00rootroot00000000000000:root { --hc-border: color(srgb 0 0 0.023 / 50%); } @media (prefers-color-scheme: dark) { :root { --hc-border: color(srgb 1 1 1 / 50%); } } .bz-monospace { font-size: smaller; font-family: monospace; } .bz-small-button { padding: 1px; margin: 0; } .bz-small-button > * { margin: 0; padding: 0; } .bz-debug { background: linear-gradient(to top, #ffaf4c, #ffc04c); border-color: black; border-radius: 6px; border-style: solid; border-width: 1px; color: black; padding: 3px; } .bz-debug button { border-color: black; border-style: dashed; border-width: 1px; border-radius: 3px; padding-top: 0px; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; } .bz-donations-dialog { background: linear-gradient(to bottom left, #1f2d8f, #159eff); color: white; } .bz-donations-banner { --banner-color: var(--accent-bg-color); } .updates-amount { background-color: white; color: var(--accent-bg-color); font-size: 0.60em; border-radius: 9999px; font-weight: 900; } .updates-amount-border { background-color: var(--accent-bg-color); border-radius: 9999px; } .search-box { outline: 0 solid transparent; outline-offset: 6px; transition-property: outline, outline-offset; transition-duration: 200ms; padding: 8px 12px; border-radius: 9999px; background-color: var(--card-bg-color); } .search-box:focus-within { outline-color: color-mix(in srgb, var(--accent-color), transparent); outline-offset: 0; outline-width: 2px; } @media (prefers-color-scheme: light) { .search-box { background-color: var(--shade-color); } } @media (prefers-contrast: more) { .search-box { box-shadow: inset 0 0 0 1px var(--hc-border); } .search-box:focus-within { box-shadow: none; outline-color: var(--accent-color); } } .search-box > text placeholder { opacity: 0.55; } .searchbar-button, .searchbar-button > button { min-height: 24px; min-width: 24px; } .search-pill { font-weight: 450; } .search-grid { background-color: var(--window-bg-color); } .search-grid > child { padding: 0; margin: 6px 6px; border-radius: 12px; transition: background-color 200ms; } .narrow .search-grid > child { margin: 6px 12px; } .card-row-btn { border-radius: 0; } .screenshot { border-radius: 20px; } .browser-banner { border-radius: 25px; background-color: transparent; } .browser-banner-title { font-size: 3.2em; font-weight: bolder; } .browser-banner-subtitle { font-size: 2.0em; font-weight: bold; } .browser-banner-description { font-size: 1.33em; font-weight: normal; } .installed-size { font-weight: 500; } .verified { color: @blue_2; } .app-developer link{ color: @blue_2; text-decoration: none; } .support { --accent-fg-color : #f06292; --accent-bg-color : alpha(#f06292, 0.25); --accent-color : #f06292; } .favorite { --accent-fg-color: @accent_bg_color; --accent-bg-color : alpha(@accent_bg_color, 0.25); --accent-color: @accent_color; } .favorite * { --accent-fg-color: @accent_fg_color; --accent-bg-color: @accent_bg_color; --accent-color: @accent_color; } .orange { --accent-fg-color: @orange_5; --accent-color: alpha(@orange_5, 0.25); --accent-bg-color: @orange_5; } .green { --accent-fg-color : #8ff0a4; --accent-bg-color : alpha(#2ec27e, 0.25); --accent-color : #8ff0a4; } .blue { --accent-fg-color : #99c1f1; --accent-bg-color : alpha(#1a5fb4, 0.25); --accent-color : #99c1f1; } .dark-blue { --accent-fg-color : #99c1f1; --accent-bg-color : #1a5fb4; --accent-color : #99c1f1; } @media (prefers-color-scheme: light) { .green { --accent-fg-color : #2ec27e; --accent-bg-color : alpha(#8ff0a4, 0.25); --accent-color : #2ec27e; } .blue { --accent-fg-color : #1a5fb4; --accent-bg-color : alpha(#99c1f1, 0.25); --accent-color : #1a5fb4; } .dark-blue { --accent-fg-color : #1C71D8; --accent-bg-color : #1C71D8; --accent-color : #1C71D8; } } .grey { --accent-color: alpha(@window_fg_color,0.75); --accent-bg-color: @window_fg_color; } .grey.colored { --accent-fg-color : @window_fg_color; --accent-bg-color : alpha(@window_fg_color,0.05); --accent-color : alpha(@window_fg_color,0.75); } @media (prefers-contrast: more) { .circular-lozenge { box-shadow: inset 0 0 0 1px; } } .circular-lozenge.green, .lozenge.green { color: @green_5; background-color: alpha(@green_3, .25); } .circular-lozenge.yellow, .lozenge.yellow { color: #ae7b03; background: alpha(@yellow_5, .25); } .circular-lozenge.orange, .lozenge.orange { color: @orange_5; background-color: alpha(@orange_4, .25); } .circular-lozenge.red, .lozenge.red { color: @red_4; background-color: alpha(@red_2, .25); } .circular-lozenge.grey, .lozenge.grey { color: #323237; background-color: color-mix(in srgb, var(--window-fg-color) 10%, transparent); } @media (prefers-color-scheme: dark) { .circular-lozenge.green, .lozenge.green { color: @green_1; background-color: alpha(@green_4, .25); } .circular-lozenge.yellow, .lozenge.yellow { color: @yellow_2; background: alpha(#cd9309, .25); } .circular-lozenge.orange, .lozenge.orange { color: @orange_1; } .circular-lozenge.red, .lozenge.red { color: #ff7b63; } .circular-lozenge.grey, .lozenge.grey { color: @window_fg_color; } } .floating-tooltip { background-color: var(--dialog-bg-color); } .floating-tooltip .monospace { font-size: 1em; } .flathub { --accent-color: alpha(@window_fg_color,0.75); --accent-bg-color: @window_fg_color; } .flathub-lotion { color: #fafafa; } .flathub-gunmetal { color: #251f32; } @media (prefers-color-scheme: dark) { .flathub { --accent-color: alpha(#fafafa,0.75); --accent-bg-color: #7847b8; } } .lozenge { font-size: 18px; font-weight: bold; border-radius: 99999px; padding: 5px 11px; min-width: 18px; min-height: 22px; color: var(--accent-color); background-color: alpha(var(--accent-bg-color),0.15); transition: background-color 150ms ease; } .lozenge.small { padding: 1px 9px; font-size: 12px; font-weight: bold; } .lozenge-ring-button { padding: 0; border-radius: 999999px; background: transparent; } .circular-lozenge { font-weight: bold; border-radius: 99999px; padding: 9px 11px; min-width: 18px; min-height: 22px; color: var(--accent-color); background-color: alpha(var(--accent-bg-color),0.15); } .circular-lozenge.large { font-size: 24px; padding: 15px 18px; min-width: 24px; min-height: 30px; } button.context-tile:hover .lozenge { background-color: alpha(var(--accent-bg-color),0.25); } button.context-tile:active .lozenge { background-color: alpha(var(--accent-bg-color),0.35); } .small-pill { padding: 2px 12px; border-radius: 99999px; } @media (prefers-contrast: more) { .small-pill { box-shadow: inset 0 0 0 1px; } .small-pill:focus-within { box-shadow: none; } } .medium-pill { border-radius: 99999px; } .colored { background-color: var(--accent-bg-color); color: var(--accent-color); } .card.colored { background-color: alpha(var(--accent-bg-color),0.15); color: var(--accent-color); } .small-pill.dimmed { background-color: alpha(@theme_fg_color, 0.15); } .small-pill.error { background-color: alpha(@error_bg_color, 0.15); } .installed-pill { background-color: alpha(@success_bg_color, 0.15); color: @success_color; font-weight: 500; font-size: 0.9em; padding: 2px 7px 2px 4.5px; } .circular-download-pill { padding: 5px; } .sp-section .installed-pill { background-color: alpha(@window_fg_color, 0.10); color: alpha(@window_fg_color, 0.75); } .download-size-pill{ padding: 2px 8px; } .flathub-page-section { border-radius: 10px; } .transaction-list-view row { margin: 0; padding: 0; } window.narrow .app-title { font-size: 16pt; } .developer-badge > button { padding: 0; background-color: transparent; } .developer-badge:focus > button { border-radius: 5px; } window.narrow .app-developer { font-size: small; } .context-tile { box-shadow: none; padding: 4px; } button.context-tile { background-color: transparent; } .context-tile-text { font-size: 10pt; font-weight: 500; } .wide-image { margin-top: -28px; margin-bottom: -28px; } .featured-carousel { outline-offset: 2px; } .screenshot-carousel.frame { border-width: 1px 0; } .screenshot-carousel button{ margin: 12px; } .carousel-box { background-color: var(--view-bg-color); } toggle-group.huge, toggle-group.huge * { border-radius: 9999px; } .huge > toggle { padding: 3px 12px; } .otg { background: linear-gradient(to right, #2f3d9f, #682889); } .wlg { background: linear-gradient(to right, #821756, #136673); } .sp-section .card:not(:hover):not(:active) { background: transparent; } .sp-section .card { box-shadow: none; } @media (prefers-color-scheme: light) { .otg { background: linear-gradient(to right, #c6eaf8, #c4f3c9); } .wlg { background: linear-gradient(to right, #fdcde0, #b0e5f0); } .sp-section .card:hover { background: rgba(255, 255, 255, 0.50); } .sp-section .card:active { background: rgba(255, 255, 255, 0.75); } } @media (prefers-contrast: more) { .card.category-tile, .card.app-tile { box-shadow: inset 0 0 0 1px var(--hc-border); } .card.category-tile:focus-within, .card.app-tile :focus-within { box-shadow: none; outline-color: var(--accent-color); } } .sp-section-image { margin-top: -95px; margin-bottom: -95px; } .sp-section-title { font-size: 3.5em; } .decorated-screenshot { margin: 0; padding: 0; background-color: transparent; } .indicator-box button { margin: 0 4px 4px 0; } .pip-button.osd-box { padding: 0; } .pip-button > button { margin: 5px; } window, headerbar, .global-search { transition: background-color 0.2s ease; } .header-osd windowcontrols button image { background-color: rgba(0, 0, 0, 0.65); color: white; background-image: none; } .osd-box { border-radius: 12px; background-color: rgba(0, 0, 0, 0.65); padding: 6px; color: white; } .view-dark { background-color: black; color: white; } .header-osd box.horizontal:not(.end) { background-color: rgba(0, 0, 0, 0.65); border-radius: 10px; } .accent-button { border-radius: 9999px; padding: 3px; background: var(--flag-gradient, var(--accent-bg-color)); min-width: 32px; min-height: 32px; outline: none; background-clip: content-box; background-origin: content-box; box-shadow: none; transition: transform 0.3s ease; } .accent-button.horizontal { transform: rotate(-90deg); } .accent-button-box > flowboxchild { padding: 0; background-color: transparent; } .accent-button:checked { box-shadow: 0 0 0 3px var(--accent-bg-color); } .accent-button:focus:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 30%, transparent); } .accent-button:checked:focus:focus-visible { box-shadow: 0 0 0 3px var(--accent-bg-color), 0 0 0 6px color-mix(in srgb, var(--accent-color) 30%, transparent); } /* Category buttons styling modified from GNOME Software*/ .category-tile { font-weight: 700; font-size: 13pt; color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); padding-left: 32px; padding-right: 32px; outline-offset: 2px; } @media (prefers-contrast: more) { .category-tile { box-shadow: none; } } window.narrow .category-tile { font-size: 14pt; padding-left: 24px; padding-right: 24px; } /* All background gradients are at 135deg for consistency */ .category-tile.category-recently-updated { background: linear-gradient(135deg, #f9ef69, #26a269); color: #0c3020; text-shadow: 0 1px rgba(255, 255, 255, 0.35); } .category-tile.category-recently-updated:hover { background: linear-gradient(135deg, shade(#f9ef69, 1.1), shade(#26a269, 1.1)); } .category-tile.category-recently-updated:active { background: linear-gradient(135deg, shade(#f9ef69, 0.95), shade(#26a269, 0.95)); } .category-tile.category-recently-added { background: linear-gradient(135deg, #99a3eb, #495ade); } .category-tile.category-recently-added:hover { background: linear-gradient(135deg, shade(#99a3eb, 1.1), shade(#495ade, 1.1)); } .category-tile.category-recently-added:active { background: linear-gradient(135deg, shade(#99a3eb, .95), shade(#495ade, .95)); } .category-tile.category-trending { background: linear-gradient(135deg, #99c1f1, #3584e4); } .category-tile.category-trending:hover { background: linear-gradient(135deg, shade(#99c1f1, 1.1), shade(#3584e4, 1.1)); } .category-tile.category-trending:active { background: linear-gradient(135deg, shade(#99c1f1, .95), shade(#3584e4, .95)); } .category-tile.category-popular { background: linear-gradient(135deg, #f7ef74, #ffbf6f); color: rgba(0, 0, 0, 0.8); text-shadow: 0 1px rgba(255, 255, 255, 0.35); } .category-tile.category-popular:hover { background: linear-gradient(135deg, shade(#f7ef74, 1.1), shade(#ffbf6f, 1.1)); } .category-tile.category-popular:active { background: linear-gradient(135deg, shade(#f7ef74, .95), shade(#ffbf6f, .95)); } .category-tile.category-mobile { background: linear-gradient(135deg, #c6eaf8, #c4f3c9); color: rgba(0, 0, 0, 0.8); text-shadow: 0 1px rgba(255, 255, 255, 0.35); } .category-tile.category-mobile:hover { background: linear-gradient(135deg, shade(#c6eaf8, 1.05), shade(#c4f3c9, 1.05)); } .category-tile.category-mobile:active { background: linear-gradient(135deg, shade(#c6eaf8, .95), shade(#c4f3c9, .95)); } .category-tile.category-graphics { background: linear-gradient(135deg, #ce8cd7 0%, #2861c6 100%); } .category-tile.category-graphics:hover { background: linear-gradient(135deg, shade(#ce8cd7, 1.07) 0%, shade(#2861c6, 1.1) 100%); } .category-tile.category-graphics:active { background: linear-gradient(135deg, shade(#ce8cd7, .95) 0%, shade(#2861c6, .95) 100%); } .category-tile.category-development { background: linear-gradient(135deg, #444449 30%, #333337 100%); } .category-tile.category-development:hover { background: linear-gradient(135deg, shade(#444449, 1.13) 30%, shade(#333337, 1.13) 100%); } .category-tile.category-development:active { background: linear-gradient(135deg, shade(#444449, .95) 30%, shade(#333337, .95) 100%); } .category-tile.category-education { background: linear-gradient(135deg, #2ec27e 30%, #27a66c 100%); } .category-tile.category-education:hover { background: linear-gradient(135deg, shade(#2ec27e, 1.06) 30%, shade(#27a66c, 1.06) 100%); } .category-tile.category-education:active { background: linear-gradient(135deg, shade(#2ec27e, .95) 30%, shade(#27a66c, .95) 100%); } .category-tile.category-game { background: linear-gradient(135deg, #f9e2a7 0%, #eb5ec3 50%, #6d53e0 100%); color: #393484; text-shadow: 0 1px rgba(255, 255, 255, 0.35); } .category-tile.category-game:hover { background: linear-gradient(135deg, shade(#f9e2a7, 1.07) 0%, shade(#eb5ec3, 1.07) 50%, shade(#6d53e0, 1.07) 100%); } .category-tile.category-game:active { background: linear-gradient(135deg, shade(#f9e2a7, .97) 0%, shade(#eb5ec3, .95) 50%, shade(#6d53e0, 1.07) 100%); } .category-tile.category-network { background: linear-gradient(135deg, #ff6b35, #ed333b); } .category-tile.category-network:hover { background: linear-gradient(135deg, shade(#ff6b35, 1.1), shade(#ed333b, 1.1)); } .category-tile.category-network:active { background: linear-gradient(135deg, shade(#ff6b35, .95), shade(#ed333b, .95)); } .category-tile.category-office { padding: 1px; color: #1c71d8; text-shadow: 0 1px rgba(255, 255, 255, 0.35); background-color: #fdf8d7; background-image: linear-gradient(#deddda 1px, transparent 1px), linear-gradient(90deg, #deddda 1px, transparent 1px); background-size: 10px 10px, 10px 10px; background-position: -1px -4px, center -1px; } .category-tile.category-office:hover { background-color: shade(#fdf8d7, 1.05); background-image: linear-gradient(shade(#deddda, 1.04) 1px, transparent 1px), linear-gradient(90deg, shade(#deddda, 1.04) 1px, transparent 1px); } .category-tile.category-office:active { background-color: shade(#fdf8d7, .93); background-image: linear-gradient(shade(#deddda, .97) 1px, transparent 1px), linear-gradient(90deg, shade(#deddda, .97) 1px, transparent 1px); } .category-tile.category-audiovideo { background: linear-gradient(135deg, #ffcd3c 0%, #ff6b35 100%); } .category-tile.category-audiovideo:hover { background: linear-gradient(135deg, shade(#ffcd3c, 1.08) 0%, shade(#ff6b35, 1.08) 100%); } .category-tile.category-audiovideo:active { background: linear-gradient(135deg, shade(#ffcd3c, .95) 0%, shade(#ff6b35, .95) 100%); } .category-tile.category-science { background: linear-gradient(135deg, #8ff0a4 0%, #1c71d8 100%); } .category-tile.category-science:hover { background: linear-gradient(135deg, shade(#8ff0a4, 1.1) 0%, shade(#1c71d8, 1.1) 100%); } .category-tile.category-science:active { background: linear-gradient(135deg, shade(#8ff0a4, .95) 0%, shade(#1c71d8, .95) 100%); } .category-tile.category-system { background: linear-gradient(135deg, #6c757d 0%, #495057 100%); } .category-tile.category-system:hover { background: linear-gradient(135deg, shade(#6c757d, 1.15) 0%, shade(#495057, 1.15) 100%); } .category-tile.category-system:active { background: linear-gradient(135deg, shade(#6c757d, .95) 0%, shade(#495057, .95) 100%); } .category-tile.category-utility { color: #ee5f50; text-shadow: 0 1px rgba(255, 255, 255, 0.35); background: linear-gradient(135deg, #f6f5f4 0%, #deddda 100%); } .category-tile.category-utility:hover { background: linear-gradient(135deg, shade(#f6f5f4, 1.05) 0%, shade(#deddda, 1.05) 100%); } .category-tile.category-utility:active { background: linear-gradient(135deg, shade(#f6f5f4, .95) 0%, shade(#deddda, .95) 100%); } .category-tile.category-adwaita { text-shadow: 0 1px rgba(255, 255, 255, 0.35); background: linear-gradient(45deg, #1c71d8 0%, #57e289 100%); } .category-tile.category-adwaita:hover { background: linear-gradient(45deg, shade(#1c71d8, 1.15) 0%, shade(#57e289, 1.15) 100%); } .category-tile.category-adwaita:active { background: linear-gradient(45deg, shade(#1c71d8, .95) 0%, shade(#57e289, .95) 100%); } .category-tile.category-kde { text-shadow: 0 1px rgba(255, 255, 255, 0.35); background: linear-gradient(135deg, #3584e4 0%, #704dac 100%); } .category-tile.category-kde:hover { background: linear-gradient(135deg, shade(#3584e4, 1.08) 0%, shade(#704dac, 1.08) 100%); } .category-tile.category-kde:active { background: linear-gradient(135deg, shade(#3584e4, .95) 0%, shade(#704dac, .95) 100%); } .category-tile.category-adwaita image, .category-tile.category-kde image { -gtk-icon-shadow: none; } .installed-list-view > * { padding: 0; transition: background-color 200ms; min-height: 0; margin: 5px 4.5px; } .installed-section { padding-top: 0; } .narrow .installed-list-view > * { margin: 4px 4.5px; } .narrow .full-view-addons > * { margin: 5px 0px; } .full-view-addons > * { margin: 5px 0px; } .full-view-addons { margin: 0px; } .no-vertical-margin > row.hidden { margin-top: 0px; margin-bottom: 0px; } .no-vertical-margin > row:not(.hidden) { margin-bottom: 6px; } .user-data-list-view > * { margin: 0; } .user-data-list-view row { min-height: 0; } .no-min-height { min-height: 0; } .transaction-tile-title { font-size: 1.05em; font-weight: 450; } .operations { background-color: rgba(255, 255, 255, 0.040); border-radius: 0px 0px 12px 12px; } @media (prefers-color-scheme: light) { .operations { background-color: rgba(0, 0, 0, 0.050); } } .ops-toggle { transition: transform 200ms ease; transform: rotate(90deg); } .ops-toggle:checked, .ops-toggle.rotated { transform: rotate(270deg); } .disable-adw-flow-box-styling { background-color: transparent; box-shadow: none; padding: 0; } curated-list-view, curated-list-view list { background: var(--bg-color); } .article-image-button { padding: 10px; background-color: transparent; transition: transform 350ms ease; } .article-image-button:hover { transform: scale(1.03); } .code-block { border-color: alpha(currentColor, 0.05); } .article .title-2 { font-size: 1.50em; } .markdown-table { border-top: 1px solid alpha(currentColor, 0.15); border-left: 1px solid alpha(currentColor, 0.15); } .markdown-table > label { padding: 8px 14px; border-right: 1px solid alpha(currentColor, 0.15); border-bottom: 1px solid alpha(currentColor, 0.15); } .markdown-table > label.row-odd { background-color: alpha(currentColor, 0.08); } .install-button-indicator { background: var(--flag-gradient, var(--accent-bg-color)); border-radius: 9999px; } .transact-icon-flag { background: var(--flag-gradient, var(--accent-bg-color)); } bazaar-org-bazaar-b6e9a65/translators.sh000077500000000000000000000074301522167256300203500ustar00rootroot00000000000000#!/usr/bin/env bash # Helper script that automates the preparation steps to translate Bazaar. # # The script will add the passed language code to the LINGUAS file to avoid # editing it manually. # also: # It will reorder the contents of the file alphabetically; # It will check if the code is already in the file; # It will show the contents of the LINGUAS file, allowing a visual check; # It won't really check if the locale code is valid but will inform you # that it is not in the list of codes inside /usr/share/locale; # It will generate a .backup inside /tmp before proceeding and a .tmp file # before overwriting LINGUAS. # translators_helper() { local lang_input local lang_f local po_d local build_d local system_langs local langs_in_file local temp_file lang_f="LINGUAS" po_d="po" build_d="build" mapfile -t system_langs < <(find /usr/share/locale/ -maxdepth 1 -type d -printf "%f\n") temp_file="$(mktemp --suffix=BAZAAR)" printf "Temporary file: %s\n" "${temp_file}" printf "Setting im_a_translator to true\n" meson setup build -Dim_a_translator=true || return 1 pushd "${po_d}" >/dev/null || return 1 langs_in_file="$(wc --lines "${lang_f}" | grep --only-matching --extended-regex "[0-9]{1,}")" printf "\nNumber of languages currently in file %s\n" "${langs_in_file}" unset langs_in_file printf "Language codes currently in %s file.\n" "${lang_f}" cat --squeeze-blank "${lang_f}" read -r -n 1 -p "Proceed? (Type y or Y to confirm)" YN case "$YN" in [Yy]) printf "\n%s\n" "Proceeding..." ;; *) printf "\n%s\n" "Leaving..." exit 3 ;; esac printf "\nCopying %s to /tmp/%s\n" "${lang_f}" "${lang_f}.backup" cp --verbose "${lang_f}" "/tmp/${lang_f}.backup" read -r -p "Type the language code you want to enable translation for. ex.: pt_BR or es: " lang_input if [[ "${system_langs[*]}" =~ ${lang_input} ]]; then printf "Found %s in the system's language code list.\n" "${lang_input}" sleep 2s else printf "Could not find \"%s\" in the system's language code list, but proceeding nonetheless.\n" "${lang_input}" sleep 2s fi if grep --only-matching "${lang_input}" "${lang_f}"; then printf "%s already in file\n" "${lang_input}" sleep 2s else printf "Language to be added: %s\n" "${lang_input}" printf "%s\n" "${lang_input}" | tee -p --append "${lang_f}" 2>&1 sleep 2s fi cat --squeeze-blank "${lang_f}" | ( sed --unbuffered 1q sort ) | tee -p "${temp_file}" cat --squeeze-blank "${temp_file}" >"${lang_f}" langs_in_file="$(wc --lines "${lang_f}" | grep --only-matching --extended-regex "[0-9]{1,}")" printf "Number of languages currently in file %s\n" "${langs_in_file}" unset langs_in_file cat --squeeze-blank "${temp_file}" cat --squeeze-blank "${lang_f}" # $EDITOR LINGUAS popd || return 1 pushd "${build_d}" || return 1 printf "Generating the main pot (Portable Object Template) file for lang %s...\n" "${lang_input}" meson compile bazaar-pot printf "Update and/or create the po (Portable Object) files for %s.\n" "${lang_input}" meson compile bazaar-update-po echo "--------------------------------" printf "\nConfiguration done. Now ready for you to open your \"po\" file in your text editor and begin translating.\n" printf "When you are done, commit your changes form your fork and submit a pull request on \n%s also, refer to TRANSLATORS.md if needed\e]8;;\e\\ \n\n" "https://github.com/bazaar-org/bazaar/blob/master/TRANSLATORS.md" echo "--------------------------------" popd || return 1 return 0 } translators_helper || echo 'An error occurred; review the above output' 2>&1 bazaar-org-bazaar-b6e9a65/version.sh000077500000000000000000000010571522167256300174600ustar00rootroot00000000000000#!/bin/sh INSTR="$1" VERSION=0.9.0 case "$INSTR" in get-version) echo "${VERSION}" ;; get-vcs) VCS_VERSION="$(git -C "$MESON_SOURCE_ROOT" describe --always --dirty)" if [ -n "$VCS_VERSION" ]; then echo "${VERSION} (vcs=${VCS_VERSION})" else echo "${VERSION}" fi ;; get-gh-release) TAG="v${VERSION}" echo "https://github.com/bazaar-org/bazaar/releases/tag/${TAG}" ;; *) echo invalid arguments 1>&2 exit 1 ;; esac